commit | 2a0825d01f2cd68f5d82b3335f943bcf6f565f09 | [log] [tgz] |
---|---|---|
author | Jay Conrod <jayconrod@google.com> | Mon Jul 12 15:39:43 2021 -0700 |
committer | Jay Conrod <jayconrod@google.com> | Tue Jul 20 00:06:06 2021 +0000 |
tree | 92ea2f9453fdde34a447844eba227c2a31215a39 | |
parent | 3e06338c5ddb6cfd639015ba24655f9c9df87ef7 [diff] |
[dev.fuzz] internal/fuzz: avoid marshaling input before calling fuzz function Previously, before each call to the fuzz function, the worker process marshalled the mutated input into shared memory. If the worker process terminates unexpectedly, it's important that the coordinator can find the crashing input in shared memory. Profiling shows this marshalling is very expensive though. This change takes another strategy. Instead of marshaling each mutated input, the worker process no longer modifies the input in shared memory at all. Instead, it saves its PRNG state in shared memory and increments a counter before each fuzz function call. If the worker process terminates, the coordinator can reconstruct the crashing value using this information. This change gives a ~10x increase in execs/s for a trivial fuzz function with -parallel=1. Change-Id: I18cf326c252727385dc53ea2518922b1f6ae36b6 Reviewed-on: https://go-review.googlesource.com/c/go/+/334149 Trust: Jay Conrod <jayconrod@google.com> Trust: Katie Hockman <katie@golang.org> Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Katie Hockman <katie@golang.org>
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Gopher image by Renee French, licensed under Creative Commons 3.0 Attributions license.
Our canonical Git repository is located at https://go.googlesource.com/go. There is a mirror of the repository at https://github.com/golang/go.
Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file.
Official binary distributions are available at https://golang.org/dl/.
After downloading a binary release, visit https://golang.org/doc/install for installation instructions.
If a binary distribution is not available for your combination of operating system and architecture, visit https://golang.org/doc/install/source for source installation instructions.
Go is the work of thousands of contributors. We appreciate your help!
To contribute, please read the contribution guidelines at https://golang.org/doc/contribute.html.
Note that the Go project uses the issue tracker for bug reports and proposals only. See https://golang.org/wiki/Questions for a list of places to ask questions about the Go language.