]> Cypherpunks repositories - gostls13.git/commit
[dev.fuzz] internal/fuzz: avoid marshaling input before calling fuzz function
authorJay Conrod <jayconrod@google.com>
Mon, 12 Jul 2021 22:39:43 +0000 (15:39 -0700)
committerJay Conrod <jayconrod@google.com>
Tue, 20 Jul 2021 00:06:06 +0000 (00:06 +0000)
commit2a0825d01f2cd68f5d82b3335f943bcf6f565f09
tree92ea2f9453fdde34a447844eba227c2a31215a39
parent3e06338c5ddb6cfd639015ba24655f9c9df87ef7
[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>
src/cmd/go/testdata/script/test_fuzz_mutator_repeat.txt [new file with mode: 0644]
src/internal/fuzz/mem.go
src/internal/fuzz/mutators_byteslice_test.go
src/internal/fuzz/pcg.go
src/internal/fuzz/worker.go
src/internal/fuzz/worker_test.go