Skip to content

Reduce time of longest CI tests - #4825

Merged
Cyan4973 merged 7 commits into
devfrom
ci-faster-long-tests
Oct 6, 2026
Merged

Cyan4973 merged 7 commits into
devfrom
ci-faster-long-tests

Conversation

@Cyan4973

@Cyan4973 Cyan4973 commented Oct 6, 2026

Copy link
Copy Markdown
Contributor
  • clang-msan-testzstd (22–26 min): skip large data tests under MSan. They still run in the make-test* jobs and the 3 ASan + UBSan testzstd jobs.
  • Cover shrink tests: reduced steps. This was 6 min under MSan and 1.5–4 min in the other testzstd jobs.
  • msan-regression (9–24 min): fuzz.py regression now runs targets in parallel, one per CPU. This also speeds up the 2 ASan regression jobs and commit.yml's regressiontest.
  • make-test and make-test-macos (14–20 min): use make -j test, as make-test-32bit already does.

Each of the 4 `--train-cover=steps=256,shrink*` commands trained 558
candidate dictionaries. Under MSan they took ~90 s each, 6 of the 26 min
of clang-msan-testzstd. Shrinking is applied to every candidate, so a
few candidates exercise it just as well: steps=7 trains 16 of them,
and runs ~20x faster.

The fastcover shrink tests were reduced the same way in 85a016e.
`fuzz.py regression` ran the 21 corpora one after another: msan-regression
took 9 to 24 min on 4-CPU runners, depending on runner speed.

Run one target per CPU, largest corpora first, since they take longest.
Each target's output is printed with its command line when it completes.
All targets run even if one fails, and failures are listed at the end.

Locally, 4 CPUs, no sanitizer: 290 s -> 135 s.
`make test` ran its 9 test targets one after another, taking 14-20 min,
about 7 of which are time-boxed fuzzers. make-test-32bit already runs
`make -j test`, and takes 10-11 min.
They took ~20 of the job's 22-26 min, making it the longest job of
dev-long-tests. They still run in the make-test* jobs, and in the
3 ASan + UBSan testzstd jobs.
Claude Code keeps per-checkout state there (local settings, agent
worktrees). Nothing under .claude/ is tracked; ignoring it keeps it out
of git status and out of accidental commits.
@Cyan4973 Cyan4973 self-assigned this Oct 6, 2026
@Cyan4973 Cyan4973 added the CI label Oct 6, 2026
@meta-cla meta-cla Bot added the CLA Signed label Oct 6, 2026
The uasan-%, asan-% and tsan-% rules don't pass -j, so these jobs built
their testers serially, then ran fuzzer, zstreamtest and decodecorpus one
after another. gcc-asan-ubsan-fuzz32 took 16 min: 10.3 for fuzzer, 3.1
for zstreamtest, 2.9 for builds.

With -j, the testers build and run concurrently, as in the msan-fuzztest
jobs, whose msan-% rule already passes -j.
The fuzzer unit tests take 4 to 12 min at -O0 under MSan, depending on
the runner, and are what this job is for. The random fuzzing that
follows (fuzzer 200 s, zstreamtest 2x 90 s) duplicates clang-msan-fuzz,
which runs it longer, with --long-tests, on optimized code.

Cut it to 60 s and 2x 30 s: ~2.3 min less on this job, the longest of
dev-long-tests after the previous changes.
@Cyan4973
Cyan4973 merged commit e4fc5f9 into dev Oct 6, 2026
110 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant