diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-07-11 15:21:14 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-07-11 14:06:11 +0000 |
| commit | b6d5ea79ef2cf0e6a36f4c5b64b0c5b4e9b921fd (patch) | |
| tree | a38641ddd354cb719ce138e7b13be95029349ecf /pkg/runtest | |
| parent | b3f41ffa84f43572b0a8652f8017f9d53996f042 (diff) | |
pkg/runtest: reduce the number of executors
On 32 core machines, we spin up 32 executor procs per each subtest.
In many cases, we don't need that many.
Diffstat (limited to 'pkg/runtest')
| -rw-r--r-- | pkg/runtest/executor_test.go | 4 | ||||
| -rw-r--r-- | pkg/runtest/run_test.go | 85 |
2 files changed, 55 insertions, 34 deletions
diff --git a/pkg/runtest/executor_test.go b/pkg/runtest/executor_test.go index 72889669d..db84da275 100644 --- a/pkg/runtest/executor_test.go +++ b/pkg/runtest/executor_test.go @@ -61,7 +61,7 @@ func TestZlib(t *testing.T) { } executor := csource.BuildExecutor(t, target, "../..") source := queue.Plain() - startRPCServer(t, target, executor, "", source, nil, nil, nil) + startRPCServer(t, target, executor, source, rpcParams{manyProcs: true}) r := rand.New(testutil.RandSource(t)) for i := 0; i < 10; i++ { data := testutil.RandMountImage(r) @@ -111,7 +111,7 @@ func TestExecutorCommonExt(t *testing.T) { t.Fatal(err) } source := queue.Plain() - startRPCServer(t, target, executor, "", source, nil, nil, nil) + startRPCServer(t, target, executor, source, rpcParams{}) req := &queue.Request{ Prog: p, ReturnError: true, diff --git a/pkg/runtest/run_test.go b/pkg/runtest/run_test.go index f9a85bf52..745087b6d 100644 --- a/pkg/runtest/run_test.go +++ b/pkg/runtest/run_test.go @@ -85,30 +85,33 @@ func test(t *testing.T, sysTarget *targets.Target) { Verbose: true, Debug: *flagDebug, } - waitCtx := startRPCServer(t, target, executor, "", ctx, nil, nil, func(features flatrpc.Feature) { - // Features we expect to be enabled on the test OS. - // All sandboxes except for none are not implemented, coverage is not returned, - // and setup for few features is failing specifically to test feature detection. - want := flatrpc.FeatureCoverage | - flatrpc.FeatureExtraCoverage | - flatrpc.FeatureDelayKcovMmap | - flatrpc.FeatureSandboxNone | - flatrpc.FeatureFault | - flatrpc.FeatureNetDevices | - flatrpc.FeatureKCSAN | - flatrpc.FeatureNicVF | - flatrpc.FeatureUSBEmulation | - flatrpc.FeatureVhciInjection | - flatrpc.FeatureWifiEmulation | - flatrpc.FeatureLRWPANEmulation | - flatrpc.FeatureBinFmtMisc | - flatrpc.FeatureSwap - for feat, name := range flatrpc.EnumNamesFeature { - if features&feat != want&feat { - t.Errorf("expect featue %v to be %v, but it is %v", - name, want&feat != 0, features&feat != 0) + waitCtx := startRPCServer(t, target, executor, ctx, rpcParams{ + manyProcs: true, + machineChecked: func(features flatrpc.Feature) { + // Features we expect to be enabled on the test OS. + // All sandboxes except for none are not implemented, coverage is not returned, + // and setup for few features is failing specifically to test feature detection. + want := flatrpc.FeatureCoverage | + flatrpc.FeatureExtraCoverage | + flatrpc.FeatureDelayKcovMmap | + flatrpc.FeatureSandboxNone | + flatrpc.FeatureFault | + flatrpc.FeatureNetDevices | + flatrpc.FeatureKCSAN | + flatrpc.FeatureNicVF | + flatrpc.FeatureUSBEmulation | + flatrpc.FeatureVhciInjection | + flatrpc.FeatureWifiEmulation | + flatrpc.FeatureLRWPANEmulation | + flatrpc.FeatureBinFmtMisc | + flatrpc.FeatureSwap + for feat, name := range flatrpc.EnumNamesFeature { + if features&feat != want&feat { + t.Errorf("expect featue %v to be %v, but it is %v", + name, want&feat != 0, features&feat != 0) + } } - } + }, }) if t.Failed() { return @@ -366,7 +369,11 @@ func testCover(t *testing.T, target *prog.Target) { if test.Is64Bit { vmArch = targets.TestArch64 } - ctx := startRPCServer(t, target, executor, vmArch, source, test.MaxSignal, test.CoverFilter, nil) + ctx := startRPCServer(t, target, executor, source, rpcParams{ + vmArch: vmArch, + maxSignal: test.MaxSignal, + coverFilter: test.CoverFilter, + }) testCover1(t, ctx, target, test, source) }) } @@ -437,13 +444,27 @@ func makeComps(comps ...Comparison) []byte { return w.Bytes() } -func startRPCServer(t *testing.T, target *prog.Target, executor, vmArch string, source queue.Source, - maxSignal, coverFilter []uint64, machineChecked func(features flatrpc.Feature)) context.Context { +type rpcParams struct { + manyProcs bool + vmArch string + maxSignal []uint64 + coverFilter []uint64 + machineChecked func(features flatrpc.Feature) +} + +func startRPCServer(t *testing.T, target *prog.Target, executor string, + source queue.Source, extra rpcParams) context.Context { dir, err := os.MkdirTemp("", "syz-runtest") if err != nil { t.Fatal(err) } ctx, done := context.WithCancel(context.Background()) + + procs := runtime.GOMAXPROCS(0) + if !extra.manyProcs { + // We don't need many procs for this test. + procs = min(procs, 4) + } cfg := &rpcserver.LocalConfig{ Config: rpcserver.Config{ Config: vminfo.Config{ @@ -453,8 +474,8 @@ func startRPCServer(t *testing.T, target *prog.Target, executor, vmArch string, Features: flatrpc.AllFeatures, Sandbox: flatrpc.ExecEnvSandboxNone, }, - VMArch: vmArch, - Procs: runtime.GOMAXPROCS(0), + VMArch: extra.vmArch, + Procs: procs, Slowdown: 10, // to deflake slower tests DebugTimeouts: true, }, @@ -462,12 +483,12 @@ func startRPCServer(t *testing.T, target *prog.Target, executor, vmArch string, Dir: dir, Context: ctx, GDB: *flagGDB, - MaxSignal: maxSignal, - CoverFilter: coverFilter, + MaxSignal: extra.maxSignal, + CoverFilter: extra.coverFilter, } cfg.MachineChecked = func(features flatrpc.Feature, syscalls map[*prog.Syscall]bool) queue.Source { - if machineChecked != nil { - machineChecked(features) + if extra.machineChecked != nil { + extra.machineChecked(features) } return source } |
