Skip to content

ci: simplify and accelerate workflows - #2467

Merged
cpunion merged 8 commits into
xgo-dev:mainfrom
cpunion:codex/ci-workflow-simplify-r12-20260901
Sep 1, 2026
Merged

cpunion merged 8 commits into
xgo-dev:mainfrom
cpunion:codex/ci-workflow-simplify-r12-20260901

Conversation

@cpunion

@cpunion cpunion commented Aug 31, 2026 •

Copy link
Copy Markdown
Collaborator

Purpose

Simplify the R12-era workflows, reduce repeated dependency work, and shorten the only native test job that consistently exceeds 40 minutes without sharding the profiles that stay below 35 minutes.

Based on the merged R12 work in #2465.

Decisions

MSYS2

msys2/setup-msys2@v2 is already used for the CLANG64, CLANGARM64, and MSYS host-shell environments, and its built-in package cache is enabled by default. This PR does not move the pinned LLVM 19.1.7 and old-libxml2 ABI installation into install or pacboy: those inputs resolve the rolling MSYS2 repository before the manual pins are applied and can introduce newer runtime libraries. Deprecated MINGW32 and MINGW64 environments are not required by the supported R12 profiles.

Caches and actions

  • collapse eight safe restore/save pairs into unified actions/cache@v6 steps;
  • cache ESP QEMU downloads by host OS, host architecture, and installer-script hash;
  • update Windows Python setup to actions/setup-python@v7;
  • key the mutable full Windows LLVM tree by target architecture, so amd64, i386, and ARM64 builtins cannot race through one immutable cache key;
  • keep target-native compiler-rt/LLDB and vcpkg caches target-specific;
  • refresh Homebrew formula and tap metadata on Apple Silicon while only installing missing formulae; keep Intel macOS on its runner-image metadata and dependencies because Homebrew no longer guarantees Intel bottles.

Large ESP Clang, WASI, and sysroot inputs remain narrowly cached where already bounded. Unpinned Python demo packages and Go build outputs are not newly cached because their invalidation and size would make the hit rate or storage tradeoff unclear.

Matrices and sharding

  • represent the eight default/full documentation install combinations as one two-axis matrix while preserving their existing check names;
  • split Windows ARM64 MSVC full tests into two 100-package shards;
  • execute profile-wide Windows runtime/FFI and std-symbol checks exactly once across the two shards;
  • leave every other native profile unsharded because four R12 measurements put them below 35 minutes, while ARM64 MSVC alone took 45-48 minutes.

Measured comparison

The warm-cache fork run at 4a2cb1322 is compared with the successful upstream R12 head 9f0a5af09. These are single-run measurements on GitHub-hosted runners, so small differences should be treated as normal variance. The current head refreshes Homebrew metadata only on Apple Silicon and keeps Intel macOS on its runner-image metadata; final macOS and release timings will be refreshed after its CI completes.

Scope R12 This PR Change
Docs total runner time 28.60 min 28.37 min -0.8%
LLGo total runner time 466.18 min 435.82 min -6.5%
Release Build total runner time 23.87 min 19.72 min -17.4%
Build Cache total runner time 22.57 min 20.67 min -8.4%
Combined total above 541.22 min 504.58 min -6.8%
ARM64 MSVC critical path 45m07s 32m15s -28.5%
ARM64 MSVC total runner time 45m07s 61m20s +35.9%

The ARM64 profile intentionally spends 16m13s more aggregate runner time to remove the sole 45-48 minute critical-path outlier. The two final shards complete in 29m05s and 32m15s. Sharding shorter profiles would repeat setup without a comparable reliability or latency benefit.

A cold-cache probe also verified that each target writes its own full LLVM cache; the final run restored llgo-llvm-19.1.3-full-target-windows-arm64-... exactly. ESP QEMU likewise restored its host-specific key and skipped installation.

Contributor-side validation

All 67 runnable checks passed on predecessor head 4a2cb1322; the release-only job was correctly skipped for a pull request. Current head 47984a395 is running with the architecture-specific Homebrew refresh policy. Previous LLGo run: https://github.com/cpunion/llgo/actions/runs/33441249158.

@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.

Review: CI workflow simplification

Overall this is a clean, well-commented CI refactor. The migration from actions/cache/restore + separate save steps to a single actions/cache@v6 is correct for the composite actions (setup-deps, setup-llvm-mingw, setup-embed-deps, setup-goreleaser), the doc.yml matrix merge expands to the intended 8 combinations, the Windows ARM64 MSVC 2-shard split and its profile-wide check gating are correct and coverage-preserving, and the comments accurately describe the code.

One regression stands out and is flagged inline: the release-build.yml sysroot producer no longer saves its cache. A few lower-priority notes below.

Other notes (no reliable inline location / lower priority):

  • setup-deps/action.yml (macOS, ~line 731): brew_install_missing python@3.12 || true is followed by an unconditional brew link --overwrite python@3.12. Under bash -e, if the install genuinely fails the || true is defeated because the link then aborts the step. If python@3.12 is best-effort, guard the link too; if it's required, the || true is misleading.
  • setup-embed-deps/action.yml (~line 13): the macOS block still runs brew update and omits HOMEBREW_NO_AUTO_UPDATE=1, inconsistent with the de-flaking applied to setup-deps in this PR. Consider applying the same treatment for consistency.
  • install-esp-qemu.sh (~lines 60-63): the two Espressif QEMU tarballs are downloaded without SHA-256 verification, unlike the sibling libiconv download and the Windows LLVM downloads. Now that the result is cached (keyed only on the script hash), an upstream-mutated/tampered artifact would be persisted and re-served. Consider pinning + verifying checksums to match the discipline used elsewhere.

Comment thread .github/workflows/release-build.yml
@cpunion

cpunion commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

Also addressed the three lower-priority review notes in 1289c6e:

  • The optional Homebrew Python install now guards the link step as well, so an unavailable optional formula does not fail setup.
  • Embedded macOS setup now disables Homebrew auto-update and installs sdl2 only when absent.
  • The pinned Espressif QEMU archives are now checked against the SHA-256 values published with that release before extraction/caching.

Local checks passed: git diff --check, bash syntax, shellcheck, YAML parsing, actionlint (excluding the existing release-workflow shellcheck findings), plus an actual arm64 macOS download/checksum/extract and version launch of both QEMU binaries.

@codecov

codecov Bot commented Aug 31, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions

github-actions Bot commented Sep 1, 2026

Copy link
Copy Markdown

LLGo baseline benchmarks

47984a395a41 | 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 19608 B 0 B / +0.0% 387 B 0 B / +0.0% 330.475 ms -23.28 ms / -6.6% (better) 1.267 ms -9.388 us / -0.7% (better)
Linux cprintf-lto 19440 B 0 B / +0.0% 368 B 0 B / +0.0% 333.018 ms -15.22 ms / -4.4% (better) 1.282 ms +19.35 us / +1.5% (worse)
Linux fmtprintf 1615576 B 0 B / +0.0% 493418 B 0 B / +0.0% 2.437 s -26.46 ms / -1.1% (better) 2.945 ms -44.45 us / -1.5% (better)
Linux fmtprintf-lto 1491368 B 0 B / +0.0% 453936 B 0 B / +0.0% 8.228 s +67.68 ms / +0.8% (worse) 2.876 ms -26.69 us / -0.9% (better)
Linux println 62808 B 0 B / +0.0% 15360 B 0 B / +0.0% 339.149 ms +1.32 ms / +0.4% (worse) 1.590 ms +21.88 us / +1.4% (worse)
Linux println-lto 54648 B 0 B / +0.0% 12985 B 0 B / +0.0% 506.855 ms -16.81 ms / -3.2% (better) 1.580 ms -40.29 us / -2.5% (better)
macOS cprintf 84480 B 0 B / +0.0% 16845 B 0 B / +0.0% 542.864 ms +137.9 ms / +34.0% (worse) 4.089 ms +965.1 us / +30.9% (worse)
macOS cprintf-lto 100704 B 0 B / +0.0% 16825 B 0 B / +0.0% 465.618 ms +31.38 ms / +7.2% (worse) 2.755 ms -287.8 us / -9.5% (better)
macOS fmtprintf 1473136 B 0 B / +0.0% 869200 B 0 B / +0.0% 2.025 s +11.51 ms / +0.6% (worse) 4.358 ms -49.54 us / -1.1% (better)
macOS fmtprintf-lto 1176000 B 0 B / +0.0% 864760 B 0 B / +0.0% 5.106 s -693.9 ms / -12.0% (better) 4.121 ms -276.5 us / -6.3% (better)
macOS println 114944 B 0 B / +0.0% 35377 B 0 B / +0.0% 488.925 ms +45.01 ms / +10.1% (worse) 4.200 ms -1.833 ms / -30.4% (better)
macOS println-lto 118736 B 0 B / +0.0% 33029 B 0 B / +0.0% 556.589 ms +13.59 ms / +2.5% (worse) 3.668 ms +654.9 us / +21.7% (worse)
Windows MinGW cprintf 20480 B 0 B / +0.0% 4662 B 0 B / +0.0% 818.542 ms +3.504 ms / +0.4% (worse) 3.627 ms +253.4 us / +7.5% (worse)
Windows MinGW cprintf-lto 18432 B 0 B / +0.0% 4582 B 0 B / +0.0% 878.557 ms +36.04 ms / +4.3% (worse) 3.389 ms -110 us / -3.1% (better)
Windows MinGW fmtprintf 1932800 B 0 B / +0.0% 597574 B 0 B / +0.0% 3.571 s +118.6 ms / +3.4% (worse) 8.345 ms +465.5 us / +5.9% (worse)
Windows MinGW fmtprintf-lto 1982464 B 0 B / +0.0% 589622 B 0 B / +0.0% 9.794 s +346.1 ms / +3.7% (worse) 8.367 ms +517 us / +6.6% (worse)
Windows MinGW println 74240 B 0 B / +0.0% 25014 B 0 B / +0.0% 822.785 ms +2.108 ms / +0.3% (worse) 6.246 ms -307.8 us / -4.7% (better)
Windows MinGW println-lto 67584 B 0 B / +0.0% 21830 B 0 B / +0.0% 1.024 s -9.588 ms / -0.9% (better) 6.558 ms +275.7 us / +4.4% (worse)
Windows MinGW 386 cprintf 37888 B 0 B / +0.0% 5228 B 0 B / +0.0% 896.565 ms -10.19 ms / -1.1% (better) 5.054 ms +94.3 us / +1.9% (worse)
Windows MinGW 386 cprintf-lto 21504 B 0 B / +0.0% 5028 B 0 B / +0.0% 961.874 ms +38.76 ms / +4.2% (worse) 5.344 ms +285.9 us / +5.7% (worse)
Windows MinGW 386 fmtprintf 1947136 B 0 B / +0.0% 472062 B 0 B / +0.0% 3.657 s +58.77 ms / +1.6% (worse) 10.748 ms +308 us / +3.0% (worse)
Windows MinGW 386 fmtprintf-lto 2188288 B 0 B / +0.0% 472002 B 0 B / +0.0% 10.321 s -35.4 ms / -0.3% (better) 10.750 ms -257.1 us / -2.3% (better)
Windows MinGW 386 println 88064 B 0 B / +0.0% 20726 B 0 B / +0.0% 899.451 ms +3.021 ms / +0.3% (worse) 8.778 ms +334.7 us / +4.0% (worse)
Windows MinGW 386 println-lto 72192 B 0 B / +0.0% 18790 B 0 B / +0.0% 1.147 s -2.14 ms / -0.2% (better) 8.309 ms -250.7 us / -2.9% (better)
Windows MinGW ARM64 cprintf 19968 B 0 B / +0.0% 4632 B 0 B / +0.0% 1.004 s +10.1 ms / +1.0% (worse) 7.134 ms +266.1 us / +3.9% (worse)
Windows MinGW ARM64 cprintf-lto 18432 B 0 B / +0.0% 4552 B 0 B / +0.0% 1.017 s +15.14 ms / +1.5% (worse) 6.840 ms +745.5 us / +12.2% (worse)
Windows MinGW ARM64 fmtprintf 1820160 B 0 B / +0.0% 510596 B 0 B / +0.0% 3.446 s -62.55 ms / -1.8% (better) 13.663 ms +1.027 ms / +8.1% (worse)
Windows MinGW ARM64 fmtprintf-lto 1886720 B 0 B / +0.0% 506320 B 0 B / +0.0% 8.955 s +81.1 ms / +0.9% (worse) 14.116 ms -132.5 us / -0.9% (better)
Windows MinGW ARM64 println 71680 B 0 B / +0.0% 23832 B 0 B / +0.0% 987.727 ms -5.62 ms / -0.6% (better) 11.824 ms +501.8 us / +4.4% (worse)
Windows MinGW ARM64 println-lto 67072 B 0 B / +0.0% 21068 B 0 B / +0.0% 1.190 s +14.77 ms / +1.3% (worse) 12.090 ms +794.4 us / +7.0% (worse)
Windows MSVC cprintf 12288 B 0 B / +0.0% 4438 B 0 B / +0.0% 887.673 ms -626 us / -0.1% (better) 5.618 ms +820.5 us / +17.1% (worse)
Windows MSVC cprintf-lto 11776 B 0 B / +0.0% 4278 B 0 B / +0.0% 783.891 ms +9.982 ms / +1.3% (worse) 4.023 ms +16.4 us / +0.4% (worse)
Windows MSVC fmtprintf 1471488 B 0 B / +0.0% 597142 B 0 B / +0.0% 3.390 s -238.7 ms / -6.6% (better) 9.086 ms -507.6 us / -5.3% (better)
Windows MSVC fmtprintf-lto 1517056 B 0 B / +0.0% 596502 B 0 B / +0.0% 10.279 s -100.5 ms / -1.0% (better) 9.588 ms +568.6 us / +6.3% (worse)
Windows MSVC println 47104 B 0 B / +0.0% 25030 B 0 B / +0.0% 770.437 ms +7.935 ms / +1.0% (worse) 7.137 ms +129.2 us / +1.8% (worse)
Windows MSVC println-lto 44032 B 0 B / +0.0% 22198 B 0 B / +0.0% 1.021 s +11.74 ms / +1.2% (worse) 8.255 ms +719.6 us / +9.5% (worse)
Windows MSVC 386 cprintf 9728 B 0 B / +0.0% 3930 B 0 B / +0.0% 805.274 ms -36.7 ms / -4.4% (better) 5.378 ms -1.604 ms / -23.0% (better)
Windows MSVC 386 cprintf-lto 9216 B 0 B / +0.0% 3840 B 0 B / +0.0% 823.332 ms -32.18 ms / -3.8% (better) 5.295 ms -502.2 us / -8.7% (better)
Windows MSVC 386 fmtprintf 1189888 B 0 B / +0.0% 456032 B 0 B / +0.0% 3.429 s -34.41 ms / -1.0% (better) 13.108 ms +1.181 ms / +9.9% (worse)
Windows MSVC 386 fmtprintf-lto 1252352 B 0 B / +0.0% 452437 B 0 B / +0.0% 9.899 s +57.2 ms / +0.6% (worse) 10.969 ms -958.2 us / -8.0% (better)
Windows MSVC 386 println 35328 B 0 B / +0.0% 19712 B 0 B / +0.0% 797.299 ms -26.13 ms / -3.2% (better) 9.172 ms -938.1 us / -9.3% (better)
Windows MSVC 386 println-lto 34304 B 0 B / +0.0% 17927 B 0 B / +0.0% 1.045 s -9.707 ms / -0.9% (better) 8.944 ms -972.8 us / -9.8% (better)
Windows MSVC ARM64 cprintf 11264 B 0 B / +0.0% 3976 B 0 B / +0.0% 1.576 s -169.5 ms / -9.7% (better) 6.420 ms -961.8 us / -13.0% (better)
Windows MSVC ARM64 cprintf-lto 10752 B 0 B / +0.0% 3844 B 0 B / +0.0% 1.611 s -48.62 ms / -2.9% (better) 6.714 ms +92.6 us / +1.4% (worse)
Windows MSVC ARM64 fmtprintf 1365504 B 0 B / +0.0% 510268 B 0 B / +0.0% 5.454 s -330.7 ms / -5.7% (better) 13.993 ms -1.156 ms / -7.6% (better)
Windows MSVC ARM64 fmtprintf-lto 1413120 B 0 B / +0.0% 507148 B 0 B / +0.0% 16.720 s -353.5 ms / -2.1% (better) 13.376 ms -967.1 us / -6.7% (better)
Windows MSVC ARM64 println 43008 B 0 B / +0.0% 22824 B 0 B / +0.0% 1.577 s -42.77 ms / -2.6% (better) 11.096 ms -1.672 ms / -13.1% (better)
Windows MSVC ARM64 println-lto 40960 B 0 B / +0.0% 20732 B 0 B / +0.0% 1.968 s -111.5 ms / -5.4% (better) 11.285 ms -1.244 ms / -9.9% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 13.370 ns/op +0.09 ns/op / +0.7% (worse)
Linux BenchmarkMergeCompilerFlags 142.700 ns/op +2.8 ns/op / +2.0% (worse)
Linux BenchmarkMergeLinkerFlags 89.090 ns/op -0.4 ns/op / -0.4% (better)
Linux BenchmarkChannelBuffered 36.460 ns/op 0 ns/op / +0.0%
Linux BenchmarkChannelHandoff 27405 ns/op +411 ns/op / +1.5% (worse)
Linux BenchmarkDefer 44.310 ns/op +0.1 ns/op / +0.2% (worse)
Linux BenchmarkDirectCall 1.556 ns/op -0.002 ns/op / -0.1% (better)
Linux BenchmarkGlobalRead 1.868 ns/op +0.001 ns/op / +0.1% (worse)
Linux BenchmarkGlobalWrite 2.487 ns/op 0 ns/op / +0.0%
Linux BenchmarkGoroutine 36727 ns/op +6782 ns/op / +22.6% (worse)
Linux BenchmarkInterfaceCall 7.783 ns/op +0.003 ns/op / +0.03856% (worse)
Linux BenchmarkRuntimeGetG 1.869 ns/op 0 ns/op / +0.0%
macOS BenchmarkLookupPCRandom 13.570 ns/op +1.49 ns/op / +12.3% (worse)
macOS BenchmarkMergeCompilerFlags 95.550 ns/op -17.15 ns/op / -15.2% (better)
macOS BenchmarkMergeLinkerFlags 67.520 ns/op +1.8 ns/op / +2.7% (worse)
macOS BenchmarkChannelBuffered 23.040 ns/op -1.81 ns/op / -7.3% (better)
macOS BenchmarkChannelHandoff 6879 ns/op -2297 ns/op / -25.0% (better)
macOS BenchmarkDefer 30.480 ns/op -2.61 ns/op / -7.9% (better)
macOS BenchmarkDirectCall 1.017 ns/op -0.159 ns/op / -13.5% (better)
macOS BenchmarkGlobalRead 1.023 ns/op -0.088 ns/op / -7.9% (better)
macOS BenchmarkGlobalWrite 1.019 ns/op -0.138 ns/op / -11.9% (better)
macOS BenchmarkGoroutine 38996 ns/op +5412 ns/op / +16.1% (worse)
macOS BenchmarkInterfaceCall 4.409 ns/op -0.461 ns/op / -9.5% (better)
macOS BenchmarkRuntimeGetG 2.095 ns/op -0.485 ns/op / -18.8% (better)
Windows MinGW BenchmarkLookupPCRandom 13.100 ns/op +0.01 ns/op / +0.1% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 612.100 ns/op +7.8 ns/op / +1.3% (worse)
Windows MinGW BenchmarkMergeLinkerFlags 540.100 ns/op +17.2 ns/op / +3.3% (worse)
Windows MinGW BenchmarkChannelBuffered 34.280 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW BenchmarkChannelHandoff 868.900 ns/op +50.8 ns/op / +6.2% (worse)
Windows MinGW BenchmarkDefer 59.580 ns/op +2.58 ns/op / +4.5% (worse)
Windows MinGW BenchmarkDirectCall 1.858 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalRead 1.549 ns/op -0.003 ns/op / -0.2% (better)
Windows MinGW BenchmarkGlobalWrite 2.471 ns/op +0.003 ns/op / +0.1% (worse)
Windows MinGW BenchmarkGoroutine 85008 ns/op +223 ns/op / +0.3% (worse)
Windows MinGW BenchmarkInterfaceCall 9.317 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkRuntimeGetG 2.787 ns/op -0.004 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkLookupPCRandom 26.570 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkMergeCompilerFlags 737.900 ns/op -35.5 ns/op / -4.6% (better)
Windows MinGW 386 BenchmarkMergeLinkerFlags 694.500 ns/op +9.3 ns/op / +1.4% (worse)
Windows MinGW 386 BenchmarkChannelBuffered 46.350 ns/op +0.32 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkChannelHandoff 935.400 ns/op +27.1 ns/op / +3.0% (worse)
Windows MinGW 386 BenchmarkDefer 42.950 ns/op -0.31 ns/op / -0.7% (better)
Windows MinGW 386 BenchmarkDirectCall 1.552 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkGlobalRead 1.552 ns/op 0 ns/op / +0.0%
Windows MinGW 386 BenchmarkGlobalWrite 7.776 ns/op -0.005 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGoroutine 84979 ns/op +499 ns/op / +0.6% (worse)
Windows MinGW 386 BenchmarkInterfaceCall 9.917 ns/op -0.025 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 1.863 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.090 ns/op +0.05 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 577 ns/op +1.6 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 542.100 ns/op +5.3 ns/op / +1.0% (worse)
Windows MinGW ARM64 BenchmarkChannelBuffered 43.750 ns/op +0.07 ns/op / +0.2% (worse)
Windows MinGW ARM64 BenchmarkChannelHandoff 2217 ns/op +91 ns/op / +4.3% (worse)
Windows MinGW ARM64 BenchmarkDefer 56.350 ns/op -1.76 ns/op / -3.0% (better)
Windows MinGW ARM64 BenchmarkDirectCall 0.590 ns/op +0.0001 ns/op / +0.01696% (worse)
Windows MinGW ARM64 BenchmarkGlobalRead 0.738 ns/op +0.0008 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.663 ns/op -0.0001 ns/op / -0.01508% (better)
Windows MinGW ARM64 BenchmarkGoroutine 57195 ns/op -1934 ns/op / -3.3% (better)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.722 ns/op +0.002 ns/op / +0.04237% (worse)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.772 ns/op -0.033 ns/op / -1.8% (better)
Windows MSVC BenchmarkLookupPCRandom 12.800 ns/op -0.46 ns/op / -3.5% (better)
Windows MSVC BenchmarkMergeCompilerFlags 620.700 ns/op +13.5 ns/op / +2.2% (worse)
Windows MSVC BenchmarkMergeLinkerFlags 523.300 ns/op -3.4 ns/op / -0.6% (better)
Windows MSVC BenchmarkChannelBuffered 35.140 ns/op -0.15 ns/op / -0.4% (better)
Windows MSVC BenchmarkChannelHandoff 1052 ns/op -10 ns/op / -0.9% (better)
Windows MSVC BenchmarkDefer 54.620 ns/op -0.06 ns/op / -0.1% (better)
Windows MSVC BenchmarkDirectCall 1.862 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC BenchmarkGlobalRead 1.548 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkGlobalWrite 2.470 ns/op -0.001 ns/op / -0.04047% (better)
Windows MSVC BenchmarkGoroutine 80255 ns/op -1246 ns/op / -1.5% (better)
Windows MSVC BenchmarkInterfaceCall 9.298 ns/op -0.013 ns/op / -0.1% (better)
Windows MSVC BenchmarkRuntimeGetG 2.168 ns/op -0.003 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkLookupPCRandom 26.460 ns/op 0 ns/op / +0.0%
Windows MSVC 386 BenchmarkMergeCompilerFlags 737.400 ns/op +11.5 ns/op / +1.6% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 672.100 ns/op +40.6 ns/op / +6.4% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 42.820 ns/op -0.13 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkChannelHandoff 858 ns/op +2.1 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkDefer 45.730 ns/op -3.11 ns/op / -6.4% (better)
Windows MSVC 386 BenchmarkDirectCall 1.548 ns/op 0 ns/op / +0.0%
Windows MSVC 386 BenchmarkGlobalRead 1.859 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkGlobalWrite 7.818 ns/op +0.004 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkGoroutine 88293 ns/op +1127 ns/op / +1.3% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 9.905 ns/op +0.003 ns/op / +0.0303% (worse)
Windows MSVC 386 BenchmarkRuntimeGetG 2.167 ns/op -0.03 ns/op / -1.4% (better)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.060 ns/op -0.03 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 583.100 ns/op +1.4 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 540.200 ns/op +2.1 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkChannelBuffered 43.820 ns/op +0.19 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 2599 ns/op +300 ns/op / +13.0% (worse)
Windows MSVC ARM64 BenchmarkDefer 62.180 ns/op +0.71 ns/op / +1.2% (worse)
Windows MSVC ARM64 BenchmarkDirectCall 0.663 ns/op +0.0002 ns/op / +0.03017% (worse)
Windows MSVC ARM64 BenchmarkGlobalRead 0.737 ns/op -0.0102 ns/op / -1.4% (better)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.796 ns/op -0.013 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkGoroutine 52842 ns/op +1002 ns/op / +1.9% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.724 ns/op -0.003 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.771 ns/op 0 ns/op / +0.0%

Timer runtime benchmarks

Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 601.600 ns/op -5.9 ns/op / -1.0% (better)
Linux AfterFuncZeroDelivery/LLGo 52429 ns/op -479 ns/op / -0.9% (better)
Linux CreateStop/Go 147.500 ns/op +0.3 ns/op / +0.2% (worse)
Linux CreateStop/LLGo 700 ns/op -458 ns/op / -39.6% (better)
Linux RearmStopped/Go 54.410 ns/op -0.85 ns/op / -1.5% (better)
Linux RearmStopped/LLGo 905.200 ns/op +243.2 ns/op / +36.7% (worse)
Linux ResetActive/Go 41.550 ns/op -0.15 ns/op / -0.4% (better)
Linux ResetActive/LLGo 304.500 ns/op -71 ns/op / -18.9% (better)
Linux ResetHeap1024/Go 41.480 ns/op -0.02 ns/op / -0.04819% (better)
Linux ResetHeap1024/LLGo 146.200 ns/op +0.8 ns/op / +0.6% (worse)
macOS AfterFuncZeroDelivery/Go 466 ns/op -58.2 ns/op / -11.1% (better)
macOS AfterFuncZeroDelivery/LLGo 64206 ns/op -11622 ns/op / -15.3% (better)
macOS CreateStop/Go 138.200 ns/op -32 ns/op / -18.8% (better)
macOS CreateStop/LLGo 460.800 ns/op -131.5 ns/op / -22.2% (better)
macOS RearmStopped/Go 56.980 ns/op -11.33 ns/op / -16.6% (better)
macOS RearmStopped/LLGo 361.100 ns/op -90.5 ns/op / -20.0% (better)
macOS ResetActive/Go 46.230 ns/op -6.26 ns/op / -11.9% (better)
macOS ResetActive/LLGo 166.900 ns/op -14.1 ns/op / -7.8% (better)
macOS ResetHeap1024/Go 44.690 ns/op -7 ns/op / -13.5% (better)
macOS ResetHeap1024/LLGo 88.460 ns/op -25.64 ns/op / -22.5% (better)
Windows MinGW AfterFuncZeroDelivery/Go 562.900 ns/op +20.7 ns/op / +3.8% (worse)
Windows MinGW AfterFuncZeroDelivery/LLGo 171044 ns/op +10111 ns/op / +6.3% (worse)
Windows MinGW CreateStop/Go 121.200 ns/op +6.7 ns/op / +5.9% (worse)
Windows MinGW CreateStop/LLGo 508.500 ns/op +35.2 ns/op / +7.4% (worse)
Windows MinGW RearmStopped/Go 31.420 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW RearmStopped/LLGo 333.600 ns/op +22.8 ns/op / +7.3% (worse)
Windows MinGW ResetActive/Go 20.050 ns/op -0.05 ns/op / -0.2% (better)
Windows MinGW ResetActive/LLGo 181.600 ns/op +5.4 ns/op / +3.1% (worse)
Windows MinGW ResetHeap1024/Go 20.460 ns/op -0.11 ns/op / -0.5% (better)
Windows MinGW ResetHeap1024/LLGo 144.900 ns/op +0.6 ns/op / +0.4% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 973 ns/op +27.9 ns/op / +3.0% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 190513 ns/op -1340 ns/op / -0.7% (better)
Windows MinGW 386 CreateStop/Go 195.800 ns/op +3.9 ns/op / +2.0% (worse)
Windows MinGW 386 CreateStop/LLGo 1809 ns/op -11 ns/op / -0.6% (better)
Windows MinGW 386 RearmStopped/Go 63.580 ns/op -1.04 ns/op / -1.6% (better)
Windows MinGW 386 RearmStopped/LLGo 354.600 ns/op -2.4 ns/op / -0.7% (better)
Windows MinGW 386 ResetActive/Go 38.980 ns/op -0.05 ns/op / -0.1% (better)
Windows MinGW 386 ResetActive/LLGo 1005 ns/op +41.7 ns/op / +4.3% (worse)
Windows MinGW 386 ResetHeap1024/Go 39.470 ns/op -0.18 ns/op / -0.5% (better)
Windows MinGW 386 ResetHeap1024/LLGo 194.300 ns/op -0.9 ns/op / -0.5% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 663 ns/op -13.4 ns/op / -2.0% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 135008 ns/op -2472 ns/op / -1.8% (better)
Windows MinGW ARM64 CreateStop/Go 199.200 ns/op +1.4 ns/op / +0.7% (worse)
Windows MinGW ARM64 CreateStop/LLGo 403.100 ns/op -6.1 ns/op / -1.5% (better)
Windows MinGW ARM64 RearmStopped/Go 70.550 ns/op +0.01 ns/op / +0.01418% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 293.700 ns/op -4 ns/op / -1.3% (better)
Windows MinGW ARM64 ResetActive/Go 31.040 ns/op +0.11 ns/op / +0.4% (worse)
Windows MinGW ARM64 ResetActive/LLGo 125.300 ns/op -0.6 ns/op / -0.5% (better)
Windows MinGW ARM64 ResetHeap1024/Go 31.110 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW ARM64 ResetHeap1024/LLGo 143.200 ns/op +0.2 ns/op / +0.1% (worse)
Windows MSVC AfterFuncZeroDelivery/Go 549.800 ns/op -26 ns/op / -4.5% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 162735 ns/op +1983 ns/op / +1.2% (worse)
Windows MSVC CreateStop/Go 116.200 ns/op +0.5 ns/op / +0.4% (worse)
Windows MSVC CreateStop/LLGo 457.100 ns/op +6.2 ns/op / +1.4% (worse)
Windows MSVC RearmStopped/Go 31.410 ns/op -0.32 ns/op / -1.0% (better)
Windows MSVC RearmStopped/LLGo 302.700 ns/op +1.3 ns/op / +0.4% (worse)
Windows MSVC ResetActive/Go 20.080 ns/op -0.01 ns/op / -0.04978% (better)
Windows MSVC ResetActive/LLGo 154.500 ns/op +5.6 ns/op / +3.8% (worse)
Windows MSVC ResetHeap1024/Go 20.420 ns/op -0.13 ns/op / -0.6% (better)
Windows MSVC ResetHeap1024/LLGo 142.500 ns/op -0.7 ns/op / -0.5% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 938.700 ns/op +6 ns/op / +0.6% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 180486 ns/op -1994 ns/op / -1.1% (better)
Windows MSVC 386 CreateStop/Go 194.800 ns/op +1.1 ns/op / +0.6% (worse)
Windows MSVC 386 CreateStop/LLGo 1502 ns/op -141 ns/op / -8.6% (better)
Windows MSVC 386 RearmStopped/Go 63.100 ns/op -0.07 ns/op / -0.1% (better)
Windows MSVC 386 RearmStopped/LLGo 331.600 ns/op -2.8 ns/op / -0.8% (better)
Windows MSVC 386 ResetActive/Go 38.910 ns/op -0.01 ns/op / -0.02569% (better)
Windows MSVC 386 ResetActive/LLGo 990.100 ns/op +710.3 ns/op / +253.9% (worse)
Windows MSVC 386 ResetHeap1024/Go 39.320 ns/op -0.02 ns/op / -0.1% (better)
Windows MSVC 386 ResetHeap1024/LLGo 176.600 ns/op -0.6 ns/op / -0.3% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 675.800 ns/op +5 ns/op / +0.7% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 135382 ns/op +16778 ns/op / +14.1% (worse)
Windows MSVC ARM64 CreateStop/Go 201.300 ns/op +0.9 ns/op / +0.4% (worse)
Windows MSVC ARM64 CreateStop/LLGo 458 ns/op +18 ns/op / +4.1% (worse)
Windows MSVC ARM64 RearmStopped/Go 70.590 ns/op +0.05 ns/op / +0.1% (worse)
Windows MSVC ARM64 RearmStopped/LLGo 306.300 ns/op -5.8 ns/op / -1.9% (better)
Windows MSVC ARM64 ResetActive/Go 30.850 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC ARM64 ResetActive/LLGo 131.200 ns/op +1.9 ns/op / +1.5% (worse)
Windows MSVC ARM64 ResetHeap1024/Go 31.070 ns/op -0.01 ns/op / -0.03218% (better)
Windows MSVC ARM64 ResetHeap1024/LLGo 146.500 ns/op -0.2 ns/op / -0.1% (better)

Compared with b200f0f8eff6 measured in the same runner job.

@cpunion
cpunion merged commit 2a0eaf0 into xgo-dev:main Sep 1, 2026
74 of 75 checks passed
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