aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-07-11 15:21:14 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-07-11 14:06:11 +0000
commitb6d5ea79ef2cf0e6a36f4c5b64b0c5b4e9b921fd (patch)
treea38641ddd354cb719ce138e7b13be95029349ecf /pkg
parentb3f41ffa84f43572b0a8652f8017f9d53996f042 (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')
-rw-r--r--pkg/runtest/executor_test.go4
-rw-r--r--pkg/runtest/run_test.go85
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
}