Skip to content

ci: use Qiniu runners for Linux jobs - #2476

Merged
xushiwei merged 9 commits into
xgo-dev:mainfrom
MeteorsLiu:qiniu-ci-runner
Sep 5, 2026
Merged

ci: use Qiniu runners for Linux jobs#2476
xushiwei merged 9 commits into
xgo-dev:mainfrom
MeteorsLiu:qiniu-ci-runner

Conversation

@MeteorsLiu

Copy link
Copy Markdown
Contributor

No description provided.

@MeteorsLiu
MeteorsLiu marked this pull request as draft September 2, 2026 05:49

@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: route Linux CI to self-hosted qiniu runners

The change is mechanically correct: every conditional runs-on expression's test value matches its matrix's Linux os entry, non-Linux (macOS/Windows) lanes fall through to matrix.os unchanged, the ubuntu-24.04-arm lane is correctly preserved on GitHub-hosted ARM, and the (a && fromJSON(...)) || matrix.os short-circuit is valid Actions syntax. The concerns below are about operational and security consequences of running on self-hosted hardware, not syntax.

Security — the main concern (fork PRs on self-hosted runners)

Most of these workflows trigger on pull_request: branches: ["**"], so fork PR code now executes on the self-hosted qiniu host. Self-hosted runners on a public repo are the classic compromise vector: unlike ephemeral GitHub-hosted VMs, the host is persistent, shared, and on your network. The release-build.yml build job is the sharpest edge (Docker socket + fork-controlled tree — flagged inline). Please confirm the qiniu runner group is not offered to fork PRs (org/repo runner-group setting), or gate the PR-triggered jobs to github.repository == 'xgo-dev/llgo' and keep fork PRs on GitHub-hosted runners. Note notify-benchmarks.yml already models the right gate on its dispatch job (github.repository == 'xgo-dev/llgo' && github.event_name != 'pull_request') — the classifier-tests job does not.

Operational (worth confirming, not blocking)

  • Capacity / throughput: all Linux CI now requires the [qiniu, ubuntu-24.04] pool. Linux was effectively elastic on ubuntu-latest; on a busy multi-PR day (llgo.yml + goroot.yml shards + go.yml + benchmark + release) throughput is now bounded by the self-hosted pool size. Confirm it's sized for peak concurrent load.
  • Runner label assumption: the whole change rests on the qiniu runners being labeled exactly ubuntu-24.04. If they carry a different label, every routed job fails to schedule.
  • Benchmark comparability: benchmark.yml's Linux lane moves to shared self-hosted hardware. Benchmarks are CPU/neighbor-sensitive (the job even pins GOMAXPROCS: 2 to reduce variance); new numbers may not be comparable to the existing GitHub-hosted baseline. Consider a dedicated/single-tenant label for this leg.

Maintainability (minor)

  • The conditional expression is duplicated ~10 times plus 2 ubuntu-24.04 variants; a future group/label change must be applied in lockstep across all of them.
  • Mixed idiom: Linux-only matrix jobs (targets.yml, llgo.yml wasm) use the static list while equivalent matrix jobs use the conditional. Behavior is identical, but normalizing would read more clearly.
  • The matrix key stays ubuntu-latest while execution is pinned to ubuntu-24.04; a one-line comment explaining the indirection would help future maintainers.

Comment thread .github/workflows/release-build.yml Outdated
Comment thread .github/workflows/notify-benchmarks.yml
Comment thread .github/workflows/benchmark.yml Outdated
Comment thread .github/workflows/targets.yml
@MeteorsLiu MeteorsLiu closed this Sep 2, 2026
@MeteorsLiu MeteorsLiu reopened this Sep 2, 2026
@MeteorsLiu MeteorsLiu closed this Sep 2, 2026
@MeteorsLiu MeteorsLiu reopened this Sep 2, 2026
@MeteorsLiu MeteorsLiu closed this Sep 2, 2026
@MeteorsLiu MeteorsLiu reopened this Sep 2, 2026
@codecov

codecov Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@MeteorsLiu MeteorsLiu closed this Sep 2, 2026
@MeteorsLiu MeteorsLiu reopened this Sep 2, 2026
@MeteorsLiu
MeteorsLiu marked this pull request as ready for review September 2, 2026 08:50

@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: migrate Linux CI to self-hosted qiniu runners

This PR moves Linux CI lanes from GitHub-hosted runners to the self-hosted [qiniu, ubuntu-24.04] label, adds explicit Go cache/env configuration in setup-go, and adds cmake + pip --user to the setup actions.

Matrix semantics — verified correct. The runs-on: ${{ matrix.runner || matrix.os }} + include: pattern was checked in every modified workflow (including the tricky cases: goroot.yml with heavy exclude blocks, and doc.yml local_install matching on platform rather than os). In each case the runner key attaches to the intended ubuntu combinations without creating duplicate jobs or leaving jobs stranded on GitHub-hosted runners. No bug here.

Two findings below relate to running on a persistent, public-repo self-hosted fleet; both hinge on how the qiniu runners are provisioned. See inline comments.

Other notes (non-blocking):

  • setup-demo-deps/action.ymlpip3.12 install --user --break-system-packages numpy torch: on persistent runners --user installs into $HOME/.local, which sticks across jobs and can mask a missing-dep regression or cause version drift. Consider pinning versions if reproducibility matters. --user also makes --break-system-packages largely redundant (harmless).
  • setup-deps/action.yml — adding cmake correctly satisfies the dev-lto-globaldce lane in go.yml; good catch.
  • setup-go/action.yml — the action description ("Set up and verify the requested Go toolchain") no longer reflects that it now also configures Go cache/module paths; minor.

Comment thread .github/workflows/release-build.yml Outdated
Comment thread .github/actions/setup-go/action.yml Outdated
@MeteorsLiu MeteorsLiu closed this Sep 2, 2026
@MeteorsLiu MeteorsLiu reopened this Sep 2, 2026

@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: Migrate Ubuntu CI to self-hosted qiniu runners

This PR routes the Ubuntu CI lanes to self-hosted runners via the runs-on: ${{ matrix.runner || matrix.os }} + matrix include pattern, adds Go cache env vars to the setup-go action, and tweaks a couple of dependency installs. The migration pattern is applied consistently and the include merge semantics are correct — each include only adds a runner field to an already-existing os: ubuntu-latest combination without overwriting a base matrix value, so matrix.runner is set on exactly the intended Linux combinations and the || matrix.os fallback covers everything else.

Below are the items worth addressing before merge. See inline comments for line-specific notes.

Self-hosted runners + fork PR triggers (architectural, please confirm)

Most migrated workflows trigger on pull_request: branches: ["**"] (go.yml, llgo.yml, build-cache.yml, targets.yml, fmt.yml, stdlib-coverage.yml, doc.yml, benchmark.yml, release-build.yml's test-artifacts). This means fork PRs now execute untrusted code (go test, demo test.sh scripts, go install ./..., pip install) directly on the persistent qiniu infrastructure. On a public repo this is the scenario GitHub explicitly warns against for self-hosted runners: host compromise, cache/tooling tampering that later trusted (push/tag/release) jobs consume, and lateral movement.

Please confirm the qiniu pool is either (a) ephemeral (single-use VM/container per job), or (b) gated behind maintainer approval for outside collaborators — and/or keep fork-pull_request jobs on GitHub-hosted runners while routing only trusted events to the self-hosted pool. Note release-build.yml's GoReleaser step mounts the host Docker socket, so a host compromised by an earlier fork job could tamper with release inputs.

GOCACHE / module-cache placement (see inline on setup-go)

The two most concrete correctness/perf issues are in .github/actions/setup-go/action.yml — see the inline comment.

Minor / consistency

  • benchmark.yml uses os: ubuntu-24.04 for its Linux entry while every other file uses os: ubuntu-latest; aligning the matrix.os identifier avoids confusion (both still resolve runs-on via the runner override).
  • Job display names that interpolate ${{ matrix.os }} (e.g. go.yml, llgo.yml, goroot.yml, build-cache.yml) will show ubuntu-latest in the checks list even though the job now runs on the qiniu ubuntu-24.04 runner — cosmetic only.
  • setup-deps adds cmake and setup-demo-deps switches to pip3.12 install --user: both look reasonable for a leaner/self-hosted image; no concerns.

Comment thread .github/actions/setup-go/action.yml Outdated
Comment thread .github/workflows/targets.yml
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

LLGo baseline benchmarks

4a2d667f9c3b | 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% 388.267 ms -406 ms / -51.1% (better) 1.256 ms -346.1 us / -21.6% (better)
Linux cprintf-lto 19440 B 0 B / +0.0% 368 B 0 B / +0.0% 415.814 ms -93.89 ms / -18.4% (better) 1.259 ms -14.84 us / -1.2% (better)
Linux fmtprintf 1615680 B -8 B / -0.0004951% (better) 493418 B 0 B / +0.0% 3.274 s -665.1 ms / -16.9% (better) 3.161 ms -388.6 us / -11.0% (better)
Linux fmtprintf-lto 1491480 B 0 B / +0.0% 453936 B 0 B / +0.0% 10.459 s -917.1 ms / -8.1% (better) 2.965 ms -175.5 us / -5.6% (better)
Linux println 62808 B 0 B / +0.0% 15360 B 0 B / +0.0% 399.425 ms -112.9 ms / -22.0% (better) 1.515 ms -149.5 us / -9.0% (better)
Linux println-lto 54648 B 0 B / +0.0% 12985 B 0 B / +0.0% 616.124 ms -222.2 ms / -26.5% (better) 1.520 ms -211 us / -12.2% (better)
macOS cprintf 84480 B 0 B / +0.0% 16845 B 0 B / +0.0% 874.255 ms +471.4 ms / +117.0% (worse) 7.472 ms +4.911 ms / +191.8% (worse)
macOS cprintf-lto 100704 B 0 B / +0.0% 16825 B 0 B / +0.0% 673.700 ms +244.9 ms / +57.1% (worse) 3.718 ms +1.013 ms / +37.5% (worse)
macOS fmtprintf 1473136 B 0 B / +0.0% 869312 B 0 B / +0.0% 2.450 s -204 ms / -7.7% (better) 5.715 ms +1.048 ms / +22.5% (worse)
macOS fmtprintf-lto 1176000 B 0 B / +0.0% 864884 B 0 B / +0.0% 5.668 s -1.269 s / -18.3% (better) 4.321 ms -1.142 ms / -20.9% (better)
macOS println 114944 B 0 B / +0.0% 35377 B 0 B / +0.0% 692.598 ms +305.7 ms / +79.0% (worse) 6.881 ms +3.595 ms / +109.4% (worse)
macOS println-lto 118736 B 0 B / +0.0% 33029 B 0 B / +0.0% 984.772 ms +290.9 ms / +41.9% (worse) 4.749 ms -2.813 ms / -37.2% (better)
Windows MinGW cprintf 20480 B 0 B / +0.0% 4662 B 0 B / +0.0% 652.443 ms +5.426 ms / +0.8% (worse) 2.765 ms -65.5 us / -2.3% (better)
Windows MinGW cprintf-lto 18432 B 0 B / +0.0% 4582 B 0 B / +0.0% 655.931 ms +7.584 ms / +1.2% (worse) 2.828 ms -7 us / -0.2% (better)
Windows MinGW fmtprintf 1932800 B 0 B / +0.0% 597574 B 0 B / +0.0% 2.667 s -125.3 ms / -4.5% (better) 6.333 ms +199.8 us / +3.3% (worse)
Windows MinGW fmtprintf-lto 1982464 B 0 B / +0.0% 589622 B 0 B / +0.0% 7.384 s -47.94 ms / -0.6% (better) 6.179 ms -39.8 us / -0.6% (better)
Windows MinGW println 74240 B 0 B / +0.0% 25014 B 0 B / +0.0% 625.620 ms -1.133 ms / -0.2% (better) 5.076 ms -70.1 us / -1.4% (better)
Windows MinGW println-lto 67584 B 0 B / +0.0% 21830 B 0 B / +0.0% 795.564 ms +2.094 ms / +0.3% (worse) 4.991 ms -155.6 us / -3.0% (better)
Windows MinGW 386 cprintf 37888 B 0 B / +0.0% 5228 B 0 B / +0.0% 852.007 ms -6.016 ms / -0.7% (better) 5.231 ms +148.9 us / +2.9% (worse)
Windows MinGW 386 cprintf-lto 21504 B 0 B / +0.0% 5028 B 0 B / +0.0% 962.502 ms -14.32 ms / -1.5% (better) 5.050 ms +374.4 us / +8.0% (worse)
Windows MinGW 386 fmtprintf 1947136 B 0 B / +0.0% 472062 B 0 B / +0.0% 3.475 s -325.9 us / -0.009378% (better) 11.108 ms +501.9 us / +4.7% (worse)
Windows MinGW 386 fmtprintf-lto 2188288 B 0 B / +0.0% 472002 B 0 B / +0.0% 10.034 s -1.876 ms / -0.0187% (better) 11.872 ms +1.28 ms / +12.1% (worse)
Windows MinGW 386 println 88064 B 0 B / +0.0% 20726 B 0 B / +0.0% 848.771 ms -18.18 ms / -2.1% (better) 8.297 ms -1.151 ms / -12.2% (better)
Windows MinGW 386 println-lto 72192 B 0 B / +0.0% 18790 B 0 B / +0.0% 1.102 s +1.982 ms / +0.2% (worse) 8.384 ms +93 us / +1.1% (worse)
Windows MinGW ARM64 cprintf 19968 B 0 B / +0.0% 4632 B 0 B / +0.0% 970.674 ms -32.66 ms / -3.3% (better) 6.182 ms -303.7 us / -4.7% (better)
Windows MinGW ARM64 cprintf-lto 18432 B 0 B / +0.0% 4552 B 0 B / +0.0% 1.002 s -25.24 ms / -2.5% (better) 6.480 ms -110.9 us / -1.7% (better)
Windows MinGW ARM64 fmtprintf 1820160 B 0 B / +0.0% 510596 B 0 B / +0.0% 3.449 s +23.84 ms / +0.7% (worse) 12.938 ms -189.8 us / -1.4% (better)
Windows MinGW ARM64 fmtprintf-lto 1886720 B 0 B / +0.0% 506320 B 0 B / +0.0% 8.649 s -14.44 ms / -0.2% (better) 13.066 ms -25.1 us / -0.2% (better)
Windows MinGW ARM64 println 71680 B 0 B / +0.0% 23832 B 0 B / +0.0% 985.484 ms -6.541 ms / -0.7% (better) 10.866 ms -252.4 us / -2.3% (better)
Windows MinGW ARM64 println-lto 67072 B 0 B / +0.0% 21068 B 0 B / +0.0% 1.157 s -26.18 ms / -2.2% (better) 11.175 ms +92.6 us / +0.8% (worse)
Windows MSVC cprintf 12288 B 0 B / +0.0% 4438 B 0 B / +0.0% 755.854 ms +13.76 ms / +1.9% (worse) 4.021 ms -581.5 us / -12.6% (better)
Windows MSVC cprintf-lto 11776 B 0 B / +0.0% 4278 B 0 B / +0.0% 886.640 ms -30.45 ms / -3.3% (better) 4.545 ms +1.01 ms / +28.6% (worse)
Windows MSVC fmtprintf 1471488 B 0 B / +0.0% 597142 B 0 B / +0.0% 3.399 s +68.8 ms / +2.1% (worse) 12.272 ms +3.62 ms / +41.8% (worse)
Windows MSVC fmtprintf-lto 1517056 B 0 B / +0.0% 596502 B 0 B / +0.0% 10.253 s +31.94 ms / +0.3% (worse) 9.277 ms +51 us / +0.6% (worse)
Windows MSVC println 47104 B 0 B / +0.0% 25030 B 0 B / +0.0% 734.279 ms +10.16 ms / +1.4% (worse) 7.029 ms +236.8 us / +3.5% (worse)
Windows MSVC println-lto 44032 B 0 B / +0.0% 22198 B 0 B / +0.0% 970.651 ms -6.991 ms / -0.7% (better) 6.805 ms -115.5 us / -1.7% (better)
Windows MSVC 386 cprintf 9728 B 0 B / +0.0% 3930 B 0 B / +0.0% 612.470 ms -1.767 ms / -0.3% (better) 4.354 ms +458.7 us / +11.8% (worse)
Windows MSVC 386 cprintf-lto 9216 B 0 B / +0.0% 3840 B 0 B / +0.0% 627.943 ms +5.513 ms / +0.9% (worse) 3.883 ms -127.9 us / -3.2% (better)
Windows MSVC 386 fmtprintf 1189888 B 0 B / +0.0% 456032 B 0 B / +0.0% 2.734 s +24.12 ms / +0.9% (worse) 9.070 ms -80.3 us / -0.9% (better)
Windows MSVC 386 fmtprintf-lto 1252352 B 0 B / +0.0% 452437 B 0 B / +0.0% 7.846 s +9.425 ms / +0.1% (worse) 8.414 ms -354.5 us / -4.0% (better)
Windows MSVC 386 println 35328 B 0 B / +0.0% 19712 B 0 B / +0.0% 609.810 ms +9.312 ms / +1.6% (worse) 6.937 ms -285 us / -3.9% (better)
Windows MSVC 386 println-lto 34304 B 0 B / +0.0% 17927 B 0 B / +0.0% 810.831 ms -91.63 ms / -10.2% (better) 6.920 ms -1.1 ms / -13.7% (better)
Windows MSVC ARM64 cprintf 11264 B 0 B / +0.0% 3976 B 0 B / +0.0% 1.747 s -101.6 ms / -5.5% (better) 7.276 ms -1.148 ms / -13.6% (better)
Windows MSVC ARM64 cprintf-lto 10752 B 0 B / +0.0% 3844 B 0 B / +0.0% 1.735 s -140.3 ms / -7.5% (better) 7.066 ms -1.448 ms / -17.0% (better)
Windows MSVC ARM64 fmtprintf 1365504 B 0 B / +0.0% 510268 B 0 B / +0.0% 5.757 s -318.2 ms / -5.2% (better) 14.674 ms -2.997 ms / -17.0% (better)
Windows MSVC ARM64 fmtprintf-lto 1413120 B 0 B / +0.0% 507148 B 0 B / +0.0% 17.235 s -717 ms / -4.0% (better) 14.028 ms -354.3 us / -2.5% (better)
Windows MSVC ARM64 println 43008 B 0 B / +0.0% 22824 B 0 B / +0.0% 1.702 s -168.5 ms / -9.0% (better) 11.766 ms -3.478 ms / -22.8% (better)
Windows MSVC ARM64 println-lto 40960 B 0 B / +0.0% 20732 B 0 B / +0.0% 2.082 s -271.1 ms / -11.5% (better) 12.128 ms -3.624 ms / -23.0% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.610 ns/op +0.1 ns/op / +0.7% (worse)
Linux BenchmarkMergeCompilerFlags 194.800 ns/op -1.3 ns/op / -0.7% (better)
Linux BenchmarkMergeLinkerFlags 125.200 ns/op -1.9 ns/op / -1.5% (better)
Linux BenchmarkChannelBuffered 68.200 ns/op -0.14 ns/op / -0.2% (better)
Linux BenchmarkChannelHandoff 17054 ns/op +4134 ns/op / +32.0% (worse)
Linux BenchmarkDefer 50.750 ns/op -2.42 ns/op / -4.6% (better)
Linux BenchmarkDirectCall 1.164 ns/op -0.002 ns/op / -0.2% (better)
Linux BenchmarkGlobalRead 1.163 ns/op 0 ns/op / +0.0%
Linux BenchmarkGlobalWrite 7.755 ns/op -0.017 ns/op / -0.2% (better)
Linux BenchmarkGoroutine 20750 ns/op -711 ns/op / -3.3% (better)
Linux BenchmarkInterfaceCall 6.519 ns/op -0.033 ns/op / -0.5% (better)
Linux BenchmarkRuntimeGetG 2.441 ns/op +0.005 ns/op / +0.2% (worse)
macOS BenchmarkLookupPCRandom 12.690 ns/op -2.52 ns/op / -16.6% (better)
macOS BenchmarkMergeCompilerFlags 107.100 ns/op -8.8 ns/op / -7.6% (better)
macOS BenchmarkMergeLinkerFlags 63.930 ns/op -16.57 ns/op / -20.6% (better)
macOS BenchmarkChannelBuffered 29.570 ns/op +4.08 ns/op / +16.0% (worse)
macOS BenchmarkChannelHandoff 8651 ns/op +475 ns/op / +5.8% (worse)
macOS BenchmarkDefer 45.740 ns/op +1.82 ns/op / +4.1% (worse)
macOS BenchmarkDirectCall 1.088 ns/op -0.067 ns/op / -5.8% (better)
macOS BenchmarkGlobalRead 1.095 ns/op -0.133 ns/op / -10.8% (better)
macOS BenchmarkGlobalWrite 1.119 ns/op -0.213 ns/op / -16.0% (better)
macOS BenchmarkGoroutine 56705 ns/op +13021 ns/op / +29.8% (worse)
macOS BenchmarkInterfaceCall 5.411 ns/op -0.363 ns/op / -6.3% (better)
macOS BenchmarkRuntimeGetG 3.130 ns/op +0.898 ns/op / +40.2% (worse)
Windows MinGW BenchmarkLookupPCRandom 9.667 ns/op +0.08 ns/op / +0.8% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 378.800 ns/op -35.9 ns/op / -8.7% (better)
Windows MinGW BenchmarkMergeLinkerFlags 330.900 ns/op -1 ns/op / -0.3% (better)
Windows MinGW BenchmarkChannelBuffered 30.350 ns/op +0.07 ns/op / +0.2% (worse)
Windows MinGW BenchmarkChannelHandoff 1271 ns/op +61 ns/op / +5.0% (worse)
Windows MinGW BenchmarkDefer 42.910 ns/op -0.09 ns/op / -0.2% (better)
Windows MinGW BenchmarkDirectCall 1.628 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalRead 1.357 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalWrite 2.164 ns/op -0.004 ns/op / -0.2% (better)
Windows MinGW BenchmarkGoroutine 56549 ns/op +503 ns/op / +0.9% (worse)
Windows MinGW BenchmarkInterfaceCall 7.897 ns/op -0.224 ns/op / -2.8% (better)
Windows MinGW BenchmarkRuntimeGetG 1.903 ns/op +0.001 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 27.770 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 780.500 ns/op -7.4 ns/op / -0.9% (better)
Windows MinGW 386 BenchmarkMergeLinkerFlags 713.300 ns/op -13 ns/op / -1.8% (better)
Windows MinGW 386 BenchmarkChannelBuffered 47.570 ns/op 0 ns/op / +0.0%
Windows MinGW 386 BenchmarkChannelHandoff 786.100 ns/op +17.4 ns/op / +2.3% (worse)
Windows MinGW 386 BenchmarkDefer 43.660 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkDirectCall 1.746 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGlobalRead 1.747 ns/op 0 ns/op / +0.0%
Windows MinGW 386 BenchmarkGlobalWrite 8.988 ns/op +0.001 ns/op / +0.01113% (worse)
Windows MinGW 386 BenchmarkGoroutine 69879 ns/op +486 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkInterfaceCall 11.180 ns/op -0.02 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 2.098 ns/op -0.001 ns/op / -0.04764% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.020 ns/op -0.07 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 571.900 ns/op -1.3 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 549.400 ns/op +7.3 ns/op / +1.3% (worse)
Windows MinGW ARM64 BenchmarkChannelBuffered 43.340 ns/op +0.34 ns/op / +0.8% (worse)
Windows MinGW ARM64 BenchmarkChannelHandoff 2090 ns/op +71 ns/op / +3.5% (worse)
Windows MinGW ARM64 BenchmarkDefer 55.850 ns/op +0.94 ns/op / +1.7% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.590 ns/op -0.0003 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkGlobalRead 0.738 ns/op +0.0005 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.663 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkGoroutine 57473 ns/op -1268 ns/op / -2.2% (better)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.727 ns/op -0.012 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.803 ns/op +0.034 ns/op / +1.9% (worse)
Windows MSVC BenchmarkLookupPCRandom 13.220 ns/op +0.15 ns/op / +1.1% (worse)
Windows MSVC BenchmarkMergeCompilerFlags 624.300 ns/op -40.4 ns/op / -6.1% (better)
Windows MSVC BenchmarkMergeLinkerFlags 539 ns/op -39.9 ns/op / -6.9% (better)
Windows MSVC BenchmarkChannelBuffered 34.920 ns/op -0.02 ns/op / -0.1% (better)
Windows MSVC BenchmarkChannelHandoff 1010 ns/op -129 ns/op / -11.3% (better)
Windows MSVC BenchmarkDefer 56.940 ns/op +0.07 ns/op / +0.1% (worse)
Windows MSVC BenchmarkDirectCall 1.857 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkGlobalRead 1.550 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC BenchmarkGlobalWrite 2.468 ns/op -0.003 ns/op / -0.1% (better)
Windows MSVC BenchmarkGoroutine 79811 ns/op +3199 ns/op / +4.2% (worse)
Windows MSVC BenchmarkInterfaceCall 9.305 ns/op -0.003 ns/op / -0.03223% (better)
Windows MSVC BenchmarkRuntimeGetG 2.479 ns/op -0.004 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkLookupPCRandom 21.530 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkMergeCompilerFlags 566.200 ns/op -14.4 ns/op / -2.5% (better)
Windows MSVC 386 BenchmarkMergeLinkerFlags 525.200 ns/op -11.4 ns/op / -2.1% (better)
Windows MSVC 386 BenchmarkChannelBuffered 36.870 ns/op -0.22 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkChannelHandoff 653.800 ns/op +30.6 ns/op / +4.9% (worse)
Windows MSVC 386 BenchmarkDefer 39.880 ns/op +1.83 ns/op / +4.8% (worse)
Windows MSVC 386 BenchmarkDirectCall 1.357 ns/op 0 ns/op / +0.0%
Windows MSVC 386 BenchmarkGlobalRead 1.361 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkGlobalWrite 6.982 ns/op -0.01 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkGoroutine 61201 ns/op +2014 ns/op / +3.4% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 8.694 ns/op +0.005 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkRuntimeGetG 1.631 ns/op +0.001 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 11.980 ns/op -0.09 ns/op / -0.7% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 576.700 ns/op +4.7 ns/op / +0.8% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 544.700 ns/op +11.1 ns/op / +2.1% (worse)
Windows MSVC ARM64 BenchmarkChannelBuffered 43.980 ns/op +0.3 ns/op / +0.7% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 1761 ns/op -336 ns/op / -16.0% (better)
Windows MSVC ARM64 BenchmarkDefer 63.490 ns/op -2.37 ns/op / -3.6% (better)
Windows MSVC ARM64 BenchmarkDirectCall 0.663 ns/op -0.0003 ns/op / -0.04522% (better)
Windows MSVC ARM64 BenchmarkGlobalRead 0.738 ns/op +0.0007 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.795 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkGoroutine 54776 ns/op +79 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.716 ns/op 0 ns/op / +0.0%
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.805 ns/op +0.036 ns/op / +2.0% (worse)

Timer runtime benchmarks

Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 909.700 ns/op -8.1 ns/op / -0.9% (better)
Linux AfterFuncZeroDelivery/LLGo 31276 ns/op -8785 ns/op / -21.9% (better)
Linux CreateStop/Go 287.700 ns/op -4.8 ns/op / -1.6% (better)
Linux CreateStop/LLGo 1814 ns/op +85 ns/op / +4.9% (worse)
Linux RearmStopped/Go 114.800 ns/op +0.2 ns/op / +0.2% (worse)
Linux RearmStopped/LLGo 1394 ns/op +204 ns/op / +17.1% (worse)
Linux ResetActive/Go 67.430 ns/op -0.06 ns/op / -0.1% (better)
Linux ResetActive/LLGo 747.600 ns/op -3 ns/op / -0.4% (better)
Linux ResetHeap1024/Go 67.060 ns/op -0.15 ns/op / -0.2% (better)
Linux ResetHeap1024/LLGo 197.200 ns/op -2.6 ns/op / -1.3% (better)
macOS AfterFuncZeroDelivery/Go 541.100 ns/op -55 ns/op / -9.2% (better)
macOS AfterFuncZeroDelivery/LLGo 66493 ns/op -17406 ns/op / -20.7% (better)
macOS CreateStop/Go 131.900 ns/op -46.3 ns/op / -26.0% (better)
macOS CreateStop/LLGo 235.300 ns/op -318.3 ns/op / -57.5% (better)
macOS RearmStopped/Go 50.980 ns/op -23.95 ns/op / -32.0% (better)
macOS RearmStopped/LLGo 346.400 ns/op -298.5 ns/op / -46.3% (better)
macOS ResetActive/Go 40.100 ns/op -10.83 ns/op / -21.3% (better)
macOS ResetActive/LLGo 144.600 ns/op -125.1 ns/op / -46.4% (better)
macOS ResetHeap1024/Go 45.610 ns/op -6.92 ns/op / -13.2% (better)
macOS ResetHeap1024/LLGo 97.080 ns/op -39.12 ns/op / -28.7% (better)
Windows MinGW AfterFuncZeroDelivery/Go 381.900 ns/op +18.5 ns/op / +5.1% (worse)
Windows MinGW AfterFuncZeroDelivery/LLGo 106572 ns/op +560 ns/op / +0.5% (worse)
Windows MinGW CreateStop/Go 89.400 ns/op -0.3 ns/op / -0.3% (better)
Windows MinGW CreateStop/LLGo 376.400 ns/op +4.9 ns/op / +1.3% (worse)
Windows MinGW RearmStopped/Go 24.460 ns/op +0.01 ns/op / +0.0409% (worse)
Windows MinGW RearmStopped/LLGo 252.300 ns/op +5 ns/op / +2.0% (worse)
Windows MinGW ResetActive/Go 14.830 ns/op +0.04 ns/op / +0.3% (worse)
Windows MinGW ResetActive/LLGo 135.400 ns/op +9.7 ns/op / +7.7% (worse)
Windows MinGW ResetHeap1024/Go 14.810 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW ResetHeap1024/LLGo 120.900 ns/op +0.5 ns/op / +0.4% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 987.800 ns/op -6.2 ns/op / -0.6% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 153489 ns/op +1531 ns/op / +1.0% (worse)
Windows MinGW 386 CreateStop/Go 217.100 ns/op +0.6 ns/op / +0.3% (worse)
Windows MinGW 386 CreateStop/LLGo 2103 ns/op -472 ns/op / -18.3% (better)
Windows MinGW 386 RearmStopped/Go 73.340 ns/op -0.07 ns/op / -0.1% (better)
Windows MinGW 386 RearmStopped/LLGo 369.900 ns/op -0.4 ns/op / -0.1% (better)
Windows MinGW 386 ResetActive/Go 42.040 ns/op +0.1 ns/op / +0.2% (worse)
Windows MinGW 386 ResetActive/LLGo 1007 ns/op +54.3 ns/op / +5.7% (worse)
Windows MinGW 386 ResetHeap1024/Go 42.200 ns/op +0.02 ns/op / +0.04742% (worse)
Windows MinGW 386 ResetHeap1024/LLGo 204.500 ns/op -4.1 ns/op / -2.0% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 668.500 ns/op -5 ns/op / -0.7% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 122110 ns/op -9168 ns/op / -7.0% (better)
Windows MinGW ARM64 CreateStop/Go 202.400 ns/op +3.7 ns/op / +1.9% (worse)
Windows MinGW ARM64 CreateStop/LLGo 398.900 ns/op -11 ns/op / -2.7% (better)
Windows MinGW ARM64 RearmStopped/Go 70.610 ns/op +0.01 ns/op / +0.01416% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 294.900 ns/op +2.7 ns/op / +0.9% (worse)
Windows MinGW ARM64 ResetActive/Go 30.880 ns/op -0.15 ns/op / -0.5% (better)
Windows MinGW ARM64 ResetActive/LLGo 123.600 ns/op -10.7 ns/op / -8.0% (better)
Windows MinGW ARM64 ResetHeap1024/Go 31.160 ns/op +0.14 ns/op / +0.5% (worse)
Windows MinGW ARM64 ResetHeap1024/LLGo 142.300 ns/op -0.7 ns/op / -0.5% (better)
Windows MSVC AfterFuncZeroDelivery/Go 555.600 ns/op -4.7 ns/op / -0.8% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 157987 ns/op +3446 ns/op / +2.2% (worse)
Windows MSVC CreateStop/Go 117.200 ns/op +2.3 ns/op / +2.0% (worse)
Windows MSVC CreateStop/LLGo 458.500 ns/op +12.4 ns/op / +2.8% (worse)
Windows MSVC RearmStopped/Go 31.500 ns/op +0.21 ns/op / +0.7% (worse)
Windows MSVC RearmStopped/LLGo 302.300 ns/op -2.8 ns/op / -0.9% (better)
Windows MSVC ResetActive/Go 20.140 ns/op -0.05 ns/op / -0.2% (better)
Windows MSVC ResetActive/LLGo 147.800 ns/op -10 ns/op / -6.3% (better)
Windows MSVC ResetHeap1024/Go 20.640 ns/op +0.19 ns/op / +0.9% (worse)
Windows MSVC ResetHeap1024/LLGo 144.100 ns/op +2.3 ns/op / +1.6% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/Go 765.600 ns/op +4.6 ns/op / +0.6% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 127228 ns/op +919 ns/op / +0.7% (worse)
Windows MSVC 386 CreateStop/Go 166.300 ns/op -3.3 ns/op / -1.9% (better)
Windows MSVC 386 CreateStop/LLGo 1911 ns/op -136 ns/op / -6.6% (better)
Windows MSVC 386 RearmStopped/Go 58.470 ns/op +1.82 ns/op / +3.2% (worse)
Windows MSVC 386 RearmStopped/LLGo 277.900 ns/op +2.2 ns/op / +0.8% (worse)
Windows MSVC 386 ResetActive/Go 32.790 ns/op +0.27 ns/op / +0.8% (worse)
Windows MSVC 386 ResetActive/LLGo 880.200 ns/op +671.8 ns/op / +322.4% (worse)
Windows MSVC 386 ResetHeap1024/Go 32.810 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC 386 ResetHeap1024/LLGo 149.100 ns/op -0.7 ns/op / -0.5% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 663.300 ns/op -2.9 ns/op / -0.4% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 123071 ns/op -10975 ns/op / -8.2% (better)
Windows MSVC ARM64 CreateStop/Go 198.800 ns/op +6 ns/op / +3.1% (worse)
Windows MSVC ARM64 CreateStop/LLGo 417.900 ns/op -11.7 ns/op / -2.7% (better)
Windows MSVC ARM64 RearmStopped/Go 70.680 ns/op +0.12 ns/op / +0.2% (worse)
Windows MSVC ARM64 RearmStopped/LLGo 310.900 ns/op +8.1 ns/op / +2.7% (worse)
Windows MSVC ARM64 ResetActive/Go 30.980 ns/op -0.02 ns/op / -0.1% (better)
Windows MSVC ARM64 ResetActive/LLGo 144.900 ns/op +14.6 ns/op / +11.2% (worse)
Windows MSVC ARM64 ResetHeap1024/Go 31.060 ns/op -0.13 ns/op / -0.4% (better)
Windows MSVC ARM64 ResetHeap1024/LLGo 148.800 ns/op +0.9 ns/op / +0.6% (worse)

Compared with 317e876a8ed2 measured in the same runner job.

@xushiwei
xushiwei merged commit defc3f0 into xgo-dev:main Sep 5, 2026
59 of 61 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.

2 participants