@@ -1272,8 +1272,8 @@ func (t *tester) runPending(nextTest *distTest) {
1272
1272
worklist := t .worklist
1273
1273
t .worklist = nil
1274
1274
for _ , w := range worklist {
1275
- w .start = make (chan bool )
1276
- w .end = make (chan struct {})
1275
+ w .start = make (chan bool , runtime . NumCPU () * 2 )
1276
+ w .end = make (chan struct {}, runtime . NumCPU () * 2 )
1277
1277
// w.cmd must be set up to write to w.out. We can't check that, but we
1278
1278
// can check for easy mistakes.
1279
1279
if w .cmd .Stdout == nil || w .cmd .Stdout == os .Stdout || w .cmd .Stderr == nil || w .cmd .Stderr == os .Stderr {
@@ -1303,6 +1303,21 @@ func (t *tester) runPending(nextTest *distTest) {
1303
1303
}(w )
1304
1304
}
1305
1305
1306
+ // for runtime.NumCPU() > 4 , do not change maxbg.
1307
+ // Because there is not enough CPU to parallel the testing of multiple packages.
1308
+ if runtime .NumCPU () > 4 {
1309
+ for _ , w := range worklist {
1310
+ // because GOMAXPROCS=2 runtime CPU usage is low,
1311
+ // so increase maxbg to avoid slowing down execution with low CPU usage.
1312
+ // This makes testing a single package slower,
1313
+ // but testing multiple packages together faster.
1314
+ if strings .Contains (w .dt .heading , "GOMAXPROCS=2 runtime" ) {
1315
+ maxbg = runtime .NumCPU () * 2
1316
+ break
1317
+ }
1318
+ }
1319
+ }
1320
+
1306
1321
started := 0
1307
1322
ended := 0
1308
1323
var last * distTest
0 commit comments