Skip to content

ci: reuse fixture builds and shard Go integration tests - #2896

Open
cpunion wants to merge 12 commits into
xgo-dev:mainfrom
cpunion:codex/ci-test-efficiency-20261021
Open

cpunion wants to merge 12 commits into
xgo-dev:mainfrom
cpunion:codex/ci-test-efficiency-20261021

Conversation

@cpunion

@cpunion cpunion commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Reduce compiler-test and CI time while preserving test cases, host/target pairs, and coverage. LLGo and test binaries continue to build from the checkout under test.

  • Split all internal/build tests into two processes inside each existing Go job, with isolated source trees/package caches and GOMAXPROCS=2 per process. Discover tests dynamically, verify exactly-once execution, retain every case duration, and union set-mode coverage, including helper processes. Preserve Windows overlays and linker flags.
  • Reuse fixture builds and O0 metadata goldens while retaining O2/ThinLTO/FullLTO regressions. Overlap independent Go suites on Linux; preserve serial suite order on macOS and Windows.
  • Share board, debugger, and macOS Windows-cross setup; reuse Wasm worker binaries and scope caches by workload. Trim redundant MSVC benchmark setup.
  • Fix failures exposed during qualification: native callback pointer-width stores, synchronous browser filesystem callbacks, Windows test-log pipe deadlocks, and BDWGC fault initialization before suspending threads. Retain their focused regressions.

Completed Go jobs, excluding queueing (single samples on the same runner labels):

Job Main c171abfa Previous 3793c636 New b0f7f57c vs previous
Linux 64:44 36:28 27:52 −23.6%
macOS 47:53 60:02 33:32 −44.1%
Windows MSVC 80:42 90:35 76:01 −16.1%
Windows MinGW 83:10 67:44 49:27 −27.0%
Four-job total 4:36:29 4:14:49 3:06:52 −26.7%

The four-job total is 32.4% below main. Sources: main, previous, new. Setup/cache variance remains visible, particularly in MSVC; these are observations, not isolated measurements of every change. Across all 12 comparable workflows, total job execution time is 17:34:33 → 16:34:11 → 16:09:51 (main → previous → new): −8.0% vs main, −2.4% vs previous. This excludes the benchmark workflow because PRs measure both base and head while main push measures one revision. Including benchmarks, the two PR runs total 19:24:13 → 19:00:09.

Elapsed time from trigger to the last job, including queueing, is 2:23:25, versus 2:19:19 previously. The macOS artifact job queued for 1:58:29; the unchanged WinGet-candidate job spent 19:48 downloading six current-run archives. These delays and Windows dependency-install variance offset part of the Go savings; end-to-end latency has not improved in this sample.

Coverage and test retention:

  • All 43,377 CI test/subtest outcomes across the four hosts match the previous run: 42,700 passed, 677 skipped, with no new skips. Only random temporary-directory names are normalized.
  • Full local instrumented serial/parallel runs both pass. Their 22,873 coverage block definitions match, with zero previously covered blocks lost (one additional block hit in the parallel run). All 2,240 local test/subtest outcomes match.
  • Controlled local A/B with the same uninstrumented Go 1.27.0/LLVM 22 binary: 18:36 → 11:41 (−37.2%), using 4 Go CPU threads versus 2+2; total CPU time rises 9.4%. Fresh LLGo package caches and warm shared tool caches, one sample each. The separate instrumented serial run overlapped unrelated compilation and is used only for coverage verification.

Validation: 37 workflow contract tests, three executor tests, actionlint, full local suites, and all four Go CI jobs pass. Native Linux/Windows qualification passes partitioning, coverage union, helper coverage, isolated outputs, Unicode logging, paths/flags with spaces, and failure propagation. All 118 checks pass; the tag-only release job is skipped. Codecov passes. Cold library parallelism remains separate in #2898.

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code review summary

Reviewed the full diff (477f959...6c127d4) across code quality, performance, security, and documentation. This is a carefully reasoned CI-overhead reduction, and it's backed by an unusually thorough set of contract tests (test_ci_workflows.py, test_run_go_tests.py) that lock in the exact invariants the refactor must preserve. The key risk areas all hold up:

  • SIMD consolidation — folding internal/build into one run with -coverpkg=./... is a strict superset of the former internal/build,cl,ssa coverpkg, so compiler coverage is preserved (and broadened) while the second filtered run is removed.
  • -covermode=set — sound for these non--race jobs; the covered-statement set Codecov consumes is identical. (Keep set and -race apart if -race is ever added to these lines, since set counters aren't goroutine-safe.)
  • Matrix restructuring — windows-gnu-cross preserves all 6 host/target pairs and embedded-debug keeps both backends observable (gdb/lldb as separate steps gated on !cancelled() && steps.compiler.outcome == 'success', no continue-on-error), matching the old fail-fast: false behavior.
  • Windows quarantine — run_go_tests.py re-emits go test -json Output verbatim, so dev/go_test_windows.sh's narrow golang/go#81238 signature match still works; test_windows_quarantine_still_rejects_unrelated_failures_after_json_rendering covers this.
  • Security — no attacker-controllable context is interpolated into any run: script; ci-gate gates on the non-spoofable needs.prepare.result; use_oidc correctly disables OIDC for fork PRs; run_go_tests.py runs its command as an argv list (no shell=True) and HTML-escapes step-summary cells. No concerns.

Two minor inline notes below, both non-blocking.

Worth watching (not inline)

  • .github/workflows/llgo.yml macOS windows-gnu-cross all lane — collapsing the three macOS cross-targets into one job runs amd64/arm64/386 sequentially under a single 120-min timeout instead of in parallel. The shared host-compiler/llvm-mingw/vcpkg setup is a genuine saving and the per-arch steps still run after an earlier failure, but this is the tightest margin introduced by the PR. Worth confirming the macOS all job's wall-clock on the first few real runs.

Comment thread .github/workflows/go.yml Outdated
Comment thread .github/scripts/run_go_tests.py
@codecov

codecov Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@cpunion
cpunion force-pushed the codex/ci-test-efficiency-20261021 branch from 24b9468 to 136ca25 Compare October 21, 2026 02:03
@cpunion cpunion changed the title ci: reduce Go test overhead and share runner setup ci: reduce redundant test compilation and runner setup Oct 21, 2026
@cpunion cpunion changed the title ci: reduce redundant test compilation and runner setup ci: reuse test builds and overlap Go suites Oct 21, 2026
Reuse the callback-store fix from c87f706 in PR xgo-dev#2895 without the unrelated linkname changes. Clearing or restoring a C callback must not write a two-word Go funcval over adjacent native storage.

Add deterministic adjacent-slot and closure-rejection regressions, plus pointer-width IR checks on Linux, Darwin and all six Windows ABI targets.
@cpunion cpunion changed the title ci: reuse test builds and overlap Go suites ci: reuse test builds and overlap Linux Go suites Oct 21, 2026
Avoid nested Go callbacks exhausting the JS/Asyncify stack. Keep synchronous host operations for worker RPC and Sync methods, and exercise filesystem GC stress with both single and multiple workers.
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

LLGo baseline benchmarks

b0f7f57c0178 | workflow run | long-term charts

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 8336 B 0 B / +0.0% 387 B 0 B / +0.0% 932.769 ms -155 ms / -14.3% (better) 1.686 ms +377.1 us / +28.8% (worse)
Linux cprintf-lto 8120 B 0 B / +0.0% 368 B 0 B / +0.0% 890.076 ms -166.1 ms / -15.7% (better) 1.313 ms +13.41 us / +1.0% (worse)
Linux fmtprintf 2565720 B +96 B / +0.003742% (worse) 511606 B 0 B / +0.0% 5.632 s -718.6 ms / -11.3% (better) 3.694 ms -560.9 us / -13.2% (better)
Linux fmtprintf-lto 2008104 B -112 B / -0.005577% (better) 448627 B 0 B / +0.0% 25.113 s -1.41 s / -5.3% (better) 3.774 ms -522.3 us / -12.2% (better)
Linux println 246128 B +72 B / +0.02926% (worse) 17756 B 0 B / +0.0% 961.880 ms -95.73 ms / -9.1% (better) 1.654 ms +38.33 us / +2.4% (worse)
Linux println-lto 97056 B +16 B / +0.01649% (worse) 15021 B 0 B / +0.0% 1.658 s -475.7 ms / -22.3% (better) 1.732 ms -98.96 us / -5.4% (better)
macOS cprintf 50672 B 0 B / +0.0% 4409 B 0 B / +0.0% 964.203 ms -17.99 ms / -1.8% (better) 2.447 ms -572.8 us / -19.0% (better)
macOS cprintf-lto 50592 B -16 B / -0.03162% (better) 161 B 0 B / +0.0% 883.614 ms -403 ms / -31.3% (better) 3.051 ms -493.8 us / -13.9% (better)
macOS fmtprintf 1687568 B +16 B / +0.0009481% (worse) 892440 B 0 B / +0.0% 3.570 s -1.644 s / -31.5% (better) 30.444 ms -21.03 ms / -40.9% (better)
macOS fmtprintf-lto 1405232 B -16 B / -0.001139% (better) 774684 B 0 B / +0.0% 6.253 s -3.589 s / -36.5% (better) 48.668 ms -28.36 ms / -36.8% (better)
macOS println 96960 B 0 B / +0.0% 24707 B 0 B / +0.0% 1.004 s -37.89 ms / -3.6% (better) 4.401 ms +442.1 us / +11.2% (worse)
macOS println-lto 84288 B 0 B / +0.0% 21864 B 0 B / +0.0% 1.314 s -86.36 ms / -6.2% (better) 4.311 ms -2.054 ms / -32.3% (better)
Windows MinGW cprintf 709632 B 0 B / +0.0% 4390 B 0 B / +0.0% 1.808 s -69.53 ms / -3.7% (better) 3.594 ms +139.3 us / +4.0% (worse)
Windows MinGW cprintf-lto 59392 B 0 B / +0.0% 4342 B 0 B / +0.0% 1.853 s -32.19 ms / -1.7% (better) 3.503 ms +14.8 us / +0.4% (worse)
Windows MinGW fmtprintf 5588480 B 0 B / +0.0% 609462 B 0 B / +0.0% 5.613 s -1.2 ms / -0.02137% (better) 11.516 ms +320.9 us / +2.9% (worse)
Windows MinGW fmtprintf-lto 4232192 B 0 B / +0.0% 556838 B 0 B / +0.0% 13.343 s +198.9 ms / +1.5% (worse) 10.723 ms -878.6 us / -7.6% (better)
Windows MinGW println 766976 B 0 B / +0.0% 25510 B 0 B / +0.0% 1.821 s -109.6 ms / -5.7% (better) 6.508 ms +190.9 us / +3.0% (worse)
Windows MinGW println-lto 222208 B 0 B / +0.0% 22278 B 0 B / +0.0% 2.092 s -69.91 ms / -3.2% (better) 6.734 ms +60.4 us / +0.9% (worse)
Windows MinGW 386 cprintf 657920 B 0 B / +0.0% 5608 B 0 B / +0.0% 1.204 s +1.808 ms / +0.2% (worse) 3.385 ms +57 us / +1.7% (worse)
Windows MinGW 386 cprintf-lto 119296 B 0 B / +0.0% 5112 B 0 B / +0.0% 1.210 s +28.03 ms / +2.4% (worse) 3.396 ms -9.7 us / -0.3% (better)
Windows MinGW 386 fmtprintf 4884992 B 0 B / +0.0% 476862 B 0 B / +0.0% 3.960 s +244.8 ms / +6.6% (worse) 9.065 ms +346.1 us / +4.0% (worse)
Windows MinGW 386 fmtprintf-lto 4233728 B 0 B / +0.0% 455182 B 0 B / +0.0% 9.405 s +522 ms / +5.9% (worse) 9.062 ms +27.6 us / +0.3% (worse)
Windows MinGW 386 println 711680 B 0 B / +0.0% 22116 B 0 B / +0.0% 1.216 s +70.32 ms / +6.1% (worse) 5.895 ms +201.4 us / +3.5% (worse)
Windows MinGW 386 println-lto 271872 B 0 B / +0.0% 19628 B 0 B / +0.0% 1.426 s +81.2 ms / +6.0% (worse) 5.759 ms +144.5 us / +2.6% (worse)
Windows MinGW ARM64 cprintf 720896 B 0 B / +0.0% 4204 B 0 B / +0.0% 2.177 s +102.3 ms / +4.9% (worse) 6.840 ms +649.7 us / +10.5% (worse)
Windows MinGW ARM64 cprintf-lto 58880 B 0 B / +0.0% 4156 B 0 B / +0.0% 2.258 s +161.1 ms / +7.7% (worse) 7.415 ms +1.17 ms / +18.7% (worse)
Windows MinGW ARM64 fmtprintf 5498368 B 0 B / +0.0% 517620 B 0 B / +0.0% 6.011 s +113.5 ms / +1.9% (worse) 16.861 ms +327.8 us / +2.0% (worse)
Windows MinGW ARM64 fmtprintf-lto 4398592 B 0 B / +0.0% 483424 B 0 B / +0.0% 13.122 s +360 ms / +2.8% (worse) 15.822 ms +638.6 us / +4.2% (worse)
Windows MinGW ARM64 println 773632 B 0 B / +0.0% 24152 B 0 B / +0.0% 2.194 s +96.43 ms / +4.6% (worse) 12.085 ms +845.6 us / +7.5% (worse)
Windows MinGW ARM64 println-lto 228352 B 0 B / +0.0% 21404 B 0 B / +0.0% 2.504 s +66.7 ms / +2.7% (worse) 12.429 ms +779.6 us / +6.7% (worse)
Windows MSVC cprintf 954368 B 0 B / +0.0% 66003 B 0 B / +0.0% 1.458 s +15.34 ms / +1.1% (worse) 2.735 ms -137.3 us / -4.8% (better)
Windows MSVC cprintf-lto 307200 B 0 B / +0.0% 65971 B 0 B / +0.0% 1.476 s +5.749 ms / +0.4% (worse) 2.815 ms -20 us / -0.7% (better)
Windows MSVC fmtprintf 5890560 B 0 B / +0.0% 705350 B 0 B / +0.0% 4.514 s +84.97 ms / +1.9% (worse) 11.358 ms +238.5 us / +2.1% (worse)
Windows MSVC fmtprintf-lto 4556288 B 0 B / +0.0% 656486 B 0 B / +0.0% 10.329 s -273.4 ms / -2.6% (better) 10.747 ms -91.6 us / -0.8% (better)
Windows MSVC println 1079808 B 0 B / +0.0% 121542 B 0 B / +0.0% 1.470 s +18.25 ms / +1.3% (worse) 6.588 ms -277.2 us / -4.0% (better)
Windows MSVC println-lto 542720 B 0 B / +0.0% 118982 B 0 B / +0.0% 1.843 s +186.8 ms / +11.3% (worse) 6.621 ms +891 us / +15.6% (worse)
Windows MSVC 386 cprintf 566784 B 0 B / +0.0% 3947 B 0 B / +0.0% 1.651 s -21.1 ms / -1.3% (better) 5.316 ms -786.8 us / -12.9% (better)
Windows MSVC 386 cprintf-lto 59904 B 0 B / +0.0% 3901 B 0 B / +0.0% 1.676 s -92.26 ms / -5.2% (better) 5.185 ms -666 us / -11.4% (better)
Windows MSVC 386 fmtprintf 4615680 B 0 B / +0.0% 460274 B 0 B / +0.0% 5.250 s -69.47 ms / -1.3% (better) 13.155 ms -433.1 us / -3.2% (better)
Windows MSVC 386 fmtprintf-lto 3980288 B 0 B / +0.0% 430529 B 0 B / +0.0% 11.487 s -127.1 ms / -1.1% (better) 13.417 ms -206.4 us / -1.5% (better)
Windows MSVC 386 println 623104 B 0 B / +0.0% 20716 B 0 B / +0.0% 1.644 s -37.07 ms / -2.2% (better) 8.954 ms -167 us / -1.8% (better)
Windows MSVC 386 println-lto 210944 B 0 B / +0.0% 18829 B 0 B / +0.0% 1.917 s -13.57 ms / -0.7% (better) 8.815 ms -1.114 ms / -11.2% (better)
Windows MSVC ARM64 cprintf 720384 B 0 B / +0.0% 4240 B 0 B / +0.0% 1.931 s +24.76 ms / +1.3% (worse) 7.397 ms +547.1 us / +8.0% (worse)
Windows MSVC ARM64 cprintf-lto 64512 B 0 B / +0.0% 4140 B 0 B / +0.0% 1.948 s +9.263 ms / +0.5% (worse) 7.950 ms +549.5 us / +7.4% (worse)
Windows MSVC ARM64 fmtprintf 5494784 B 0 B / +0.0% 517716 B 0 B / +0.0% 5.182 s -88.12 ms / -1.7% (better) 14.837 ms -614.7 us / -4.0% (better)
Windows MSVC ARM64 fmtprintf-lto 4405760 B 0 B / +0.0% 484240 B 0 B / +0.0% 11.425 s -250.4 ms / -2.1% (better) 15.930 ms +709 us / +4.7% (worse)
Windows MSVC ARM64 println 775680 B 0 B / +0.0% 24420 B 0 B / +0.0% 1.880 s -7.335 ms / -0.4% (better) 13.213 ms +364.1 us / +2.8% (worse)
Windows MSVC ARM64 println-lto 233472 B 0 B / +0.0% 21796 B 0 B / +0.0% 2.069 s -11.6 ms / -0.6% (better) 12.878 ms +933.1 us / +7.8% (worse)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.500 ns/op -0.14 ns/op / -1.0% (better)
Linux BenchmarkMergeCompilerFlags 209.500 ns/op -1.1 ns/op / -0.5% (better)
Linux BenchmarkMergeLinkerFlags 138.400 ns/op +11.9 ns/op / +9.4% (worse)
Linux BenchmarkChannelBuffered 58.440 ns/op +0.18 ns/op / +0.3% (worse)
Linux BenchmarkChannelHandoff 19620 ns/op +6646 ns/op / +51.2% (worse)
Linux BenchmarkDefer 56.410 ns/op +7.85 ns/op / +16.2% (worse)
Linux BenchmarkDirectCall 1.173 ns/op +0.008 ns/op / +0.7% (worse)
Linux BenchmarkGlobalRead 1.166 ns/op -0.002 ns/op / -0.2% (better)
Linux BenchmarkGlobalWrite 7.964 ns/op +0.186 ns/op / +2.4% (worse)
Linux BenchmarkGoroutine 25476 ns/op +1240 ns/op / +5.1% (worse)
Linux BenchmarkInterfaceCall 5.888 ns/op +0.043 ns/op / +0.7% (worse)
Linux BenchmarkRuntimeGetG 2.336 ns/op +0.005 ns/op / +0.2% (worse)
macOS BenchmarkLookupPCRandom 15.380 ns/op -3.72 ns/op / -19.5% (better)
macOS BenchmarkMergeCompilerFlags 112.300 ns/op -44 ns/op / -28.2% (better)
macOS BenchmarkMergeLinkerFlags 68.080 ns/op -37.22 ns/op / -35.3% (better)
macOS BenchmarkChannelBuffered 26.460 ns/op -1.14 ns/op / -4.1% (better)
macOS BenchmarkChannelHandoff 7352 ns/op +29 ns/op / +0.4% (worse)
macOS BenchmarkDefer 33.950 ns/op -0.77 ns/op / -2.2% (better)
macOS BenchmarkDirectCall 1.043 ns/op -0.123 ns/op / -10.5% (better)
macOS BenchmarkGlobalRead 1.011 ns/op -0.087 ns/op / -7.9% (better)
macOS BenchmarkGlobalWrite 1.048 ns/op -0.029 ns/op / -2.7% (better)
macOS BenchmarkGoroutine 65365 ns/op -610 ns/op / -0.9% (better)
macOS BenchmarkInterfaceCall 3.813 ns/op -0.185 ns/op / -4.6% (better)
macOS BenchmarkRuntimeGetG 2.146 ns/op -0.653 ns/op / -23.3% (better)
Windows MinGW BenchmarkLookupPCRandom 13.110 ns/op +0.14 ns/op / +1.1% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 623.800 ns/op -23.6 ns/op / -3.6% (better)
Windows MinGW BenchmarkMergeLinkerFlags 548.800 ns/op -54.2 ns/op / -9.0% (better)
Windows MinGW BenchmarkChannelBuffered 34.990 ns/op +0.01 ns/op / +0.02859% (worse)
Windows MinGW BenchmarkChannelHandoff 1276 ns/op +151 ns/op / +13.4% (worse)
Windows MinGW BenchmarkDefer 56.600 ns/op +0.29 ns/op / +0.5% (worse)
Windows MinGW BenchmarkDirectCall 1.549 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkGlobalRead 1.546 ns/op -0.003 ns/op / -0.2% (better)
Windows MinGW BenchmarkGlobalWrite 2.471 ns/op +0.001 ns/op / +0.04049% (worse)
Windows MinGW BenchmarkGoroutine 92582 ns/op +3210 ns/op / +3.6% (worse)
Windows MinGW BenchmarkInterfaceCall 8.432 ns/op +0.042 ns/op / +0.5% (worse)
Windows MinGW BenchmarkRuntimeGetG 2.481 ns/op +0.001 ns/op / +0.04032% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 16.350 ns/op +0.55 ns/op / +3.5% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 402.700 ns/op +11.7 ns/op / +3.0% (worse)
Windows MinGW 386 BenchmarkMergeLinkerFlags 379.400 ns/op +6.3 ns/op / +1.7% (worse)
Windows MinGW 386 BenchmarkChannelBuffered 37.770 ns/op -0.3 ns/op / -0.8% (better)
Windows MinGW 386 BenchmarkChannelHandoff 707.900 ns/op +6.4 ns/op / +0.9% (worse)
Windows MinGW 386 BenchmarkDefer 28.350 ns/op +1.52 ns/op / +5.7% (worse)
Windows MinGW 386 BenchmarkDirectCall 0.957 ns/op +0.0135 ns/op / +1.4% (worse)
Windows MinGW 386 BenchmarkGlobalRead 0.949 ns/op +0.0028 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 8.471 ns/op -0.005 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGoroutine 53537 ns/op -1531 ns/op / -2.8% (better)
Windows MinGW 386 BenchmarkInterfaceCall 4.886 ns/op +0.077 ns/op / +1.6% (worse)
Windows MinGW 386 BenchmarkRuntimeGetG 1.236 ns/op -0.002 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.080 ns/op -0.01 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 571.800 ns/op +3.3 ns/op / +0.6% (worse)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 529.500 ns/op +9.6 ns/op / +1.8% (worse)
Windows MinGW ARM64 BenchmarkChannelBuffered 38.710 ns/op -0.09 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkChannelHandoff 2955 ns/op -207 ns/op / -6.5% (better)
Windows MinGW ARM64 BenchmarkDefer 54.800 ns/op +0.67 ns/op / +1.2% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.589 ns/op -0.0005 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkGlobalRead 0.738 ns/op -0.0002 ns/op / -0.02711% (better)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.590 ns/op -0.0004 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkGoroutine 66308 ns/op +1281 ns/op / +2.0% (worse)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.233 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.769 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkLookupPCRandom 9.623 ns/op -0.05 ns/op / -0.5% (better)
Windows MSVC BenchmarkMergeCompilerFlags 412.100 ns/op +24.6 ns/op / +6.3% (worse)
Windows MSVC BenchmarkMergeLinkerFlags 365.100 ns/op +9.7 ns/op / +2.7% (worse)
Windows MSVC BenchmarkChannelBuffered 25.790 ns/op -0.05 ns/op / -0.2% (better)
Windows MSVC BenchmarkChannelHandoff 1183 ns/op +34 ns/op / +3.0% (worse)
Windows MSVC BenchmarkDefer 44.410 ns/op +0.39 ns/op / +0.9% (worse)
Windows MSVC BenchmarkDirectCall 1.358 ns/op +0.001 ns/op / +0.1% (worse)
Windows MSVC BenchmarkGlobalRead 1.356 ns/op -0.001 ns/op / -0.1% (better)
Windows MSVC BenchmarkGlobalWrite 2.166 ns/op +0.001 ns/op / +0.04619% (worse)
Windows MSVC BenchmarkGoroutine 58446 ns/op +490 ns/op / +0.8% (worse)
Windows MSVC BenchmarkInterfaceCall 7.270 ns/op -0.022 ns/op / -0.3% (better)
Windows MSVC BenchmarkRuntimeGetG 1.629 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkLookupPCRandom 26.580 ns/op +0.06 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkMergeCompilerFlags 780.600 ns/op +25.8 ns/op / +3.4% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 687.800 ns/op -4.6 ns/op / -0.7% (better)
Windows MSVC 386 BenchmarkChannelBuffered 41.680 ns/op -0.31 ns/op / -0.7% (better)
Windows MSVC 386 BenchmarkChannelHandoff 1014 ns/op +23.9 ns/op / +2.4% (worse)
Windows MSVC 386 BenchmarkDefer 51.610 ns/op +5.74 ns/op / +12.5% (worse)
Windows MSVC 386 BenchmarkDirectCall 1.549 ns/op 0 ns/op / +0.0%
Windows MSVC 386 BenchmarkGlobalRead 1.552 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkGlobalWrite 7.784 ns/op +0.01 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkGoroutine 108741 ns/op +1282 ns/op / +1.2% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 8.247 ns/op -0.004 ns/op / -0.04848% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 2.480 ns/op +0.001 ns/op / +0.04034% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.090 ns/op -0.01 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 569.500 ns/op +1.9 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 536.200 ns/op +3.9 ns/op / +0.7% (worse)
Windows MSVC ARM64 BenchmarkChannelBuffered 39.030 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkChannelHandoff 4779 ns/op +1275 ns/op / +36.4% (worse)
Windows MSVC ARM64 BenchmarkDefer 64.330 ns/op -0.15 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkDirectCall 0.663 ns/op -0.0004 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkGlobalRead 0.590 ns/op +0.0002 ns/op / +0.0339% (worse)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.795 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkGoroutine 56534 ns/op +67 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.169 ns/op -0.01 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.803 ns/op 0 ns/op / +0.0%
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 918.300 ns/op +7.1 ns/op / +0.8% (worse)
Linux AfterFuncZeroDelivery/LLGo 45466 ns/op +6315 ns/op / +16.1% (worse)
Linux CreateStop/Go 297.900 ns/op -0.3 ns/op / -0.1% (better)
Linux CreateStop/LLGo 1807 ns/op -76 ns/op / -4.0% (better)
Linux RearmStopped/Go 119.100 ns/op +3.5 ns/op / +3.0% (worse)
Linux RearmStopped/LLGo 1435 ns/op +129 ns/op / +9.9% (worse)
Linux ResetActive/Go 69.830 ns/op +2.14 ns/op / +3.2% (worse)
Linux ResetActive/LLGo 654.600 ns/op +15.3 ns/op / +2.4% (worse)
Linux ResetHeap1024/Go 67.230 ns/op +0.08 ns/op / +0.1% (worse)
Linux ResetHeap1024/LLGo 171.100 ns/op +5.9 ns/op / +3.6% (worse)
macOS AfterFuncZeroDelivery/Go 425.100 ns/op -241.5 ns/op / -36.2% (better)
macOS AfterFuncZeroDelivery/LLGo 60655 ns/op -18255 ns/op / -23.1% (better)
macOS CreateStop/Go 157.800 ns/op -22.7 ns/op / -12.6% (better)
macOS CreateStop/LLGo 495.400 ns/op -456.6 ns/op / -48.0% (better)
macOS RearmStopped/Go 65.600 ns/op -21.49 ns/op / -24.7% (better)
macOS RearmStopped/LLGo 323.800 ns/op -287.3 ns/op / -47.0% (better)
macOS ResetActive/Go 46.210 ns/op -11.21 ns/op / -19.5% (better)
macOS ResetActive/LLGo 171 ns/op -53.4 ns/op / -23.8% (better)
macOS ResetHeap1024/Go 42.750 ns/op -27.04 ns/op / -38.7% (better)
macOS ResetHeap1024/LLGo 82.120 ns/op -81.58 ns/op / -49.8% (better)
Windows MinGW AfterFuncZeroDelivery/Go 557.300 ns/op -10.9 ns/op / -1.9% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 184022 ns/op +693 ns/op / +0.4% (worse)
Windows MinGW CreateStop/Go 117.300 ns/op +1.4 ns/op / +1.2% (worse)
Windows MinGW CreateStop/LLGo 440.800 ns/op -24.6 ns/op / -5.3% (better)
Windows MinGW RearmStopped/Go 31.620 ns/op +0.16 ns/op / +0.5% (worse)
Windows MinGW RearmStopped/LLGo 242.400 ns/op -12.4 ns/op / -4.9% (better)
Windows MinGW ResetActive/Go 20.070 ns/op -0.04 ns/op / -0.2% (better)
Windows MinGW ResetActive/LLGo 198.700 ns/op +22.3 ns/op / +12.6% (worse)
Windows MinGW ResetHeap1024/Go 20.470 ns/op -0.16 ns/op / -0.8% (better)
Windows MinGW ResetHeap1024/LLGo 123.500 ns/op +2.4 ns/op / +2.0% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 641.900 ns/op +12.3 ns/op / +2.0% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 111116 ns/op +5298 ns/op / +5.0% (worse)
Windows MinGW 386 CreateStop/Go 170.300 ns/op +9.1 ns/op / +5.6% (worse)
Windows MinGW 386 CreateStop/LLGo 381.600 ns/op -119.2 ns/op / -23.8% (better)
Windows MinGW 386 RearmStopped/Go 63.130 ns/op +0.62 ns/op / +1.0% (worse)
Windows MinGW 386 RearmStopped/LLGo 302.600 ns/op +26.1 ns/op / +9.4% (worse)
Windows MinGW 386 ResetActive/Go 30.210 ns/op +0.62 ns/op / +2.1% (worse)
Windows MinGW 386 ResetActive/LLGo 800.200 ns/op +35.1 ns/op / +4.6% (worse)
Windows MinGW 386 ResetHeap1024/Go 30.280 ns/op +0.26 ns/op / +0.9% (worse)
Windows MinGW 386 ResetHeap1024/LLGo 116.900 ns/op +3.3 ns/op / +2.9% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 658.700 ns/op -3 ns/op / -0.5% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 153389 ns/op -3290 ns/op / -2.1% (better)
Windows MinGW ARM64 CreateStop/Go 200.300 ns/op -3.6 ns/op / -1.8% (better)
Windows MinGW ARM64 CreateStop/LLGo 432.900 ns/op -0.6 ns/op / -0.1% (better)
Windows MinGW ARM64 RearmStopped/Go 70.310 ns/op -0.24 ns/op / -0.3% (better)
Windows MinGW ARM64 RearmStopped/LLGo 215.700 ns/op -6.6 ns/op / -3.0% (better)
Windows MinGW ARM64 ResetActive/Go 31.060 ns/op +0.03 ns/op / +0.1% (worse)
Windows MinGW ARM64 ResetActive/LLGo 121.300 ns/op -7 ns/op / -5.5% (better)
Windows MinGW ARM64 ResetHeap1024/Go 30.970 ns/op -0.17 ns/op / -0.5% (better)
Windows MinGW ARM64 ResetHeap1024/LLGo 113.100 ns/op -0.9 ns/op / -0.8% (better)
Windows MSVC AfterFuncZeroDelivery/Go 394.100 ns/op +7.2 ns/op / +1.9% (worse)
Windows MSVC AfterFuncZeroDelivery/LLGo 111102 ns/op +1524 ns/op / +1.4% (worse)
Windows MSVC CreateStop/Go 90.800 ns/op -0.11 ns/op / -0.1% (better)
Windows MSVC CreateStop/LLGo 329.600 ns/op -23.2 ns/op / -6.6% (better)
Windows MSVC RearmStopped/Go 24.470 ns/op +0.01 ns/op / +0.04088% (worse)
Windows MSVC RearmStopped/LLGo 213.500 ns/op +25.4 ns/op / +13.5% (worse)
Windows MSVC ResetActive/Go 14.800 ns/op 0 ns/op / +0.0%
Windows MSVC ResetActive/LLGo 128.100 ns/op -8.2 ns/op / -6.0% (better)
Windows MSVC ResetHeap1024/Go 14.920 ns/op +0.15 ns/op / +1.0% (worse)
Windows MSVC ResetHeap1024/LLGo 102 ns/op +0.1 ns/op / +0.1% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/Go 950.400 ns/op -6.5 ns/op / -0.7% (better)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 200720 ns/op +305 ns/op / +0.2% (worse)
Windows MSVC 386 CreateStop/Go 191.100 ns/op -0.1 ns/op / -0.1% (better)
Windows MSVC 386 CreateStop/LLGo 464 ns/op -3.7 ns/op / -0.8% (better)
Windows MSVC 386 RearmStopped/Go 63.260 ns/op -0.07 ns/op / -0.1% (better)
Windows MSVC 386 RearmStopped/LLGo 295.600 ns/op -11.6 ns/op / -3.8% (better)
Windows MSVC 386 ResetActive/Go 38.940 ns/op +0.03 ns/op / +0.1% (worse)
Windows MSVC 386 ResetActive/LLGo 894.200 ns/op -47.8 ns/op / -5.1% (better)
Windows MSVC 386 ResetHeap1024/Go 39.330 ns/op -0.03 ns/op / -0.1% (better)
Windows MSVC 386 ResetHeap1024/LLGo 165.400 ns/op -1.4 ns/op / -0.8% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 663.300 ns/op -10.5 ns/op / -1.6% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 146521 ns/op -879 ns/op / -0.6% (better)
Windows MSVC ARM64 CreateStop/Go 195.100 ns/op +0.8 ns/op / +0.4% (worse)
Windows MSVC ARM64 CreateStop/LLGo 344.600 ns/op -21 ns/op / -5.7% (better)
Windows MSVC ARM64 RearmStopped/Go 70.680 ns/op +0.09 ns/op / +0.1% (worse)
Windows MSVC ARM64 RearmStopped/LLGo 226.200 ns/op -0.1 ns/op / -0.04419% (better)
Windows MSVC ARM64 ResetActive/Go 30.950 ns/op +0.01 ns/op / +0.03232% (worse)
Windows MSVC ARM64 ResetActive/LLGo 111.200 ns/op -5.2 ns/op / -4.5% (better)
Windows MSVC ARM64 ResetHeap1024/Go 31.280 ns/op +0.2 ns/op / +0.6% (worse)
Windows MSVC ARM64 ResetHeap1024/LLGo 120.100 ns/op -0.4 ns/op / -0.3% (better)

Compared with c171abfa1301 measured in the same runner job.

@cpunion

cpunion commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator Author

Validation is complete for 3793c636f: 118 checks succeeded; the tag-only release job was skipped. Successful checks include the Windows MSVC/MinGW Go suites and all six native Windows ABI/architecture lanes.

  • The complete host Go main batch and its timing report finish with 6,473 case outcomes, exit 0 on both Windows 2022 (14m41s) and Windows 2025 (16m07s). This verifies the native log-pipe fix against the full workload that previously hung after testing completed. The large-output, stderr, and nonzero-exit regression also passes on both images.
  • The synchronized heap-lock probe times out with the original BDWGC and passes with the patch, including application exception-handler preservation. Default and forced-MPROTECT BDWGC tests and 30 consecutive temporary-file runs pass. The actual upstream MinGW x86 job passes the regression, runtime/FFI checks, and demos, verifying the patched SDK integration.
  • The final combined macOS Windows-cross lane completes amd64, arm64, and 386 in 34m10s, below the unchanged 120-minute limit.

The native logging fix preserves live diagnostics, every timing row, failure propagation, and the existing narrow runtime quarantine. The GC patch prepares the collecting thread's CRT signal state before suspending other threads, addressing the heap-lock cycle documented in BDWGC #924.

Follow-up validation for b0f7f57: both isolated build shards exit with zero on Linux (799 selected tests), macOS (796), Windows MSVC (768), and Windows MinGW (768). The executor verifies that every selected top-level test reports an outcome exactly once. All four complete Go jobs and the LLGo test matrix pass; patch coverage is 100.00% after all Go reports arrive. Validation is now complete for this head: 118 checks succeeded and the tag-only release job was skipped. All release-artifact validation jobs, including all six Windows packages and WinGet candidate generation, pass.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

b0f7f57c0178 | workflow run | long-term charts

WebAssembly output sizes
Example, profile and compiler Wasm module vs base Generated JS glue vs base
cprintf/j32-emscripten/LLGo 149447 B 0 B / +0.0% 88932 B +391 B / +0.4% (worse)
cprintf/j32-goos-js/LLGo 148066 B 0 B / +0.0% 72985 B 0 B / +0.0%
cprintf/j64-emscripten-memory64/LLGo 136749 B 0 B / +0.0% 92103 B +391 B / +0.4% (worse)
cprintf/w32-goos-wasip1/LLGo 159710 B 0 B / +0.0% 0 B 0 B / 0.0%
cprintf/w32-wasi/LLGo 160318 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-emscripten/LLGo 3004237 B 0 B / +0.0% 121468 B +391 B / +0.3% (worse)
fmtprintf/j32-goos-js/Go 2526852 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-goos-js/LLGo 3100354 B 0 B / +0.0% 92140 B 0 B / +0.0%
fmtprintf/j64-emscripten-memory64/LLGo 2768379 B 0 B / +0.0% 126065 B +391 B / +0.3% (worse)
fmtprintf/w32-goos-wasip1/Go 2500019 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-goos-wasip1/LLGo 2374992 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 2371681 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-emscripten/LLGo 148964 B 0 B / +0.0% 88932 B +391 B / +0.4% (worse)
j32-goos-js/Go 1895533 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-goos-js/LLGo 147816 B 0 B / +0.0% 72985 B 0 B / +0.0%
j64-emscripten-memory64/LLGo 136307 B 0 B / +0.0% 92103 B +391 B / +0.4% (worse)
reflectcall/j32-emscripten/LLGo 1531352 B 0 B / +0.0% 95808 B +391 B / +0.4% (worse)
reflectcall/j32-goos-js/Go 2191221 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/j32-goos-js/LLGo 1583425 B 0 B / +0.0% 79857 B 0 B / +0.0%
reflectcall/j64-emscripten-memory64/LLGo 1411631 B 0 B / +0.0% 99561 B +391 B / +0.4% (worse)
reflectcall/w32-goos-wasip1/Go 2205707 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-goos-wasip1/LLGo 1309382 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 1306983 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/Go 1909947 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/LLGo 159384 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-wasi/LLGo 159992 B 0 B / +0.0% 0 B 0 B / 0.0%
LLGo WebAssembly build measurements
Example and profile Build vs base
j32-emscripten 8.049 s -321.6 ms / -3.8% (better)
j32-goos-js 7.758 s -1.025 s / -11.7% (better)
j64-emscripten-memory64 6.964 s -135.3 ms / -1.9% (better)
reflectcall/w32-wasi 25.126 s +88.55 ms / +0.4% (worse)
w32-goos-wasip1 4.966 s -476.6 ms / -8.8% (better)
w32-wasi 4.764 s -192.4 ms / -3.9% (better)

Compared with c171abfa1301 measured in the same runner job.

@cpunion cpunion changed the title ci: reuse test builds and overlap Linux Go suites ci: reuse fixture builds and shard Go integration tests Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant