Skip to content

runtime: reuse channel waiters and benchmark goroutine dispatch - #3052

Open
go-wyvern wants to merge 4 commits into
xgo-dev:mainfrom
go-wyvern:chan-waiter-cache
Open

go-wyvern wants to merge 4 commits into
xgo-dev:mainfrom
go-wyvern:chan-waiter-cache

Conversation

@go-wyvern

@go-wyvern go-wyvern commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Retain the initialized native condition variable and mutex on the current G's cached ordinary channel waiter, building on the waiter reuse already present in the base branch. Completed waits clear operation references in place, and initialized native synchronization objects remain in place for reuse.

Runtime-owned workers destroy the retained signal in mexit. Main and foreign-thread contexts destroy it in destroyG before their context root is released. A waiter that cannot enter the one-entry cache still destroys its signal immediately.

Add Go and LLGo goroutine lifecycle benchmarks covering goroutine creation and serial dispatch through one persistent worker. The serial-dispatch workload reuses request and completion channels, so it exercises the blocking channel waiter path on LLGo and reports an end-to-end signal for the runtime change. The benchmark baseline artifact and pull request table include both workloads for batches of 1, 16, 128, and 1024.

Validation

  • go test ./benchmark/goroutine ./benchmark/baseline -count=1
  • Rebuilt LLGo passed TestReusableWorkerBatches.
  • The merged LLGo passed five samples of serial-dispatch for all four task counts.
  • The native channel lifetime and teardown probes pass on Darwin.
  • Negative source-overlay checks still catch missing TLS cleanup and notification-before-release ordering regressions.
  • go fmt ./..., git diff --check, and go vet -copylocks=false ./internal/build completed. Full go vet ./... still reports existing fixture and copylocks warnings outside this change.

The serial-dispatch benchmark measures channel synchronization together with worker scheduling and task execution. Lower task counts make waiter costs easier to observe, while larger batches include more task and scheduling work. A dedicated channel-waiter microbenchmark or profile remains useful when attributing the exact portion of the improvement.

@codecov

codecov Bot commented Nov 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@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: retain channel waiter condition variables

The optimization is sound. Retaining the initialized pthread cond+mutex with the per-goroutine cached chanWaiter and skipping re-init() on reuse is correct: the signal is unlocked when cached (z_chan.go:282) and re-locked on reuse (z_chan.go:234), the park()/finish() handshake still holds the lock through notification, the cache is strictly per-goroutine, the field-by-field reset currently covers every non-signal field, and the finish() comment reword is accurate.

Two items, flagged inline:

  • [P1] Resource leak on the lifecycle-owned teardown path — mexit destroys the retained signal only for !ownedByLifecycle, but lifecycle-owned goroutines (main goroutine, foreign/host threads) tear down through destroyG in g_tls.go, which never destroys gp.chanWaiter.signal. See proc_pthread.go.
  • [P3] Manual field reset is fragile against future struct fields — see z_chan.go.

Comment thread runtime/internal/runtime/z_chan.go Resolved
@github-actions

github-actions Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

fba431e8d26b | 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 155941 B 0 B / +0.0% 88932 B 0 B / +0.0%
cprintf/j32-goos-js/LLGo 155024 B 0 B / +0.0% 72985 B 0 B / +0.0%
cprintf/j64-emscripten-memory64/LLGo 142573 B 0 B / +0.0% 92103 B 0 B / +0.0%
cprintf/w32-goos-wasip1/LLGo 15937 B 0 B / +0.0% 0 B 0 B / 0.0%
cprintf/w32-wasi/LLGo 15937 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-emscripten/LLGo 1633645 B +82 B / +0.00502% (worse) 119298 B 0 B / +0.0%
fmtprintf/j32-goos-js/Go 2526852 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-goos-js/LLGo 1698686 B +46 B / +0.002708% (worse) 89416 B 0 B / +0.0%
fmtprintf/j64-emscripten-memory64/LLGo 1514566 B +54 B / +0.003566% (worse) 122540 B 0 B / +0.0%
fmtprintf/w32-goos-wasip1/Go 2500019 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-goos-wasip1/LLGo 1076398 B +1338 B / +0.1% (worse) 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 1077685 B +1338 B / +0.1% (worse) 0 B 0 B / 0.0%
j32-emscripten/LLGo 155131 B 0 B / +0.0% 88932 B 0 B / +0.0%
j32-goos-js/Go 1895533 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-goos-js/LLGo 154420 B 0 B / +0.0% 72985 B 0 B / +0.0%
j64-emscripten-memory64/LLGo 141774 B 0 B / +0.0% 92103 B 0 B / +0.0%
reflectcall/j32-emscripten/LLGo 1372823 B +46 B / +0.003351% (worse) 95650 B 0 B / +0.0%
reflectcall/j32-goos-js/Go 2191221 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/j32-goos-js/LLGo 1385655 B +46 B / +0.00332% (worse) 79699 B 0 B / +0.0%
reflectcall/j64-emscripten-memory64/LLGo 1257055 B +12 B / +0.0009546% (worse) 99450 B 0 B / +0.0%
reflectcall/w32-goos-wasip1/Go 2205707 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-goos-wasip1/LLGo 1042499 B +159 B / +0.01525% (worse) 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 1043655 B +159 B / +0.01524% (worse) 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 18855 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-wasi/LLGo 18855 B 0 B / +0.0% 0 B 0 B / 0.0%
LLGo WebAssembly build measurements
Example and profile Build vs base
j32-emscripten 10.608 s +1.797 s / +20.4% (worse)
j32-goos-js 9.652 s +819.3 ms / +9.3% (worse)
j64-emscripten-memory64 9.354 s +1.164 s / +14.2% (worse)
reflectcall/w32-wasi 30.102 s -3.652 s / -10.8% (better)
w32-goos-wasip1 4.884 s +391.4 ms / +8.7% (worse)
w32-wasi 4.828 s +790.5 ms / +19.6% (worse)

Compared with 717fbe4429cb measured in the same runner job.

@github-actions

Copy link
Copy Markdown

LLGo baseline benchmarks

4f8192456676 | workflow run | long-term charts

String equality benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkStringEquality/bytes/equal/1024/Go 28.450 ns/op +2.5 ns/op / +9.6% (worse)
Linux BenchmarkStringEquality/bytes/equal/1024/LLGo 62.660 ns/op -0.14 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/bytes/equal/128/Go 8.416 ns/op -0.316 ns/op / -3.6% (better)
Linux BenchmarkStringEquality/bytes/equal/128/LLGo 12 ns/op +0.01 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/bytes/equal/8/Go 5.834 ns/op +0.011 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/bytes/equal/8/LLGo 4.276 ns/op -0.019 ns/op / -0.4% (better)
Linux BenchmarkStringEquality/bytes/first/1024/Go 6.691 ns/op +0.066 ns/op / +1.0% (worse)
Linux BenchmarkStringEquality/bytes/first/1024/LLGo 2.725 ns/op -0.004 ns/op / -0.1% (better)
Linux BenchmarkStringEquality/bytes/first/128/Go 6.636 ns/op +0.015 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/bytes/first/128/LLGo 2.820 ns/op +0.098 ns/op / +3.6% (worse)
Linux BenchmarkStringEquality/bytes/first/8/Go 5.826 ns/op -0.019 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/bytes/first/8/LLGo 2.751 ns/op +0.027 ns/op / +1.0% (worse)
Linux BenchmarkStringEquality/bytes/last/1024/Go 32.360 ns/op +2.51 ns/op / +8.4% (worse)
Linux BenchmarkStringEquality/bytes/last/1024/LLGo 62.780 ns/op +0.22 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/bytes/last/128/Go 8.301 ns/op +0.108 ns/op / +1.3% (worse)
Linux BenchmarkStringEquality/bytes/last/128/LLGo 11.760 ns/op -0.03 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/bytes/last/8/Go 5.828 ns/op -0.002 ns/op / -0.03431% (better)
Linux BenchmarkStringEquality/bytes/last/8/LLGo 3.502 ns/op -0.008 ns/op / -0.2% (better)
Linux BenchmarkStringEquality/strings/equal/1024/Go 23.250 ns/op +0.08 ns/op / +0.3% (worse)
Linux BenchmarkStringEquality/strings/equal/1024/LLGo 55 ns/op +0.1 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/equal/128/Go 8.245 ns/op -0.919 ns/op / -10.0% (better)
Linux BenchmarkStringEquality/strings/equal/128/LLGo 11.400 ns/op +0.2 ns/op / +1.8% (worse)
Linux BenchmarkStringEquality/strings/equal/8/Go 5.860 ns/op +0.032 ns/op / +0.5% (worse)
Linux BenchmarkStringEquality/strings/equal/8/LLGo 4.312 ns/op +0.019 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/strings/first/1024/Go 6.615 ns/op -0.019 ns/op / -0.3% (better)
Linux BenchmarkStringEquality/strings/first/1024/LLGo 3.499 ns/op -0.26 ns/op / -6.9% (better)
Linux BenchmarkStringEquality/strings/first/128/Go 6.692 ns/op +0.09 ns/op / +1.4% (worse)
Linux BenchmarkStringEquality/strings/first/128/LLGo 5.646 ns/op +2.137 ns/op / +60.9% (worse)
Linux BenchmarkStringEquality/strings/first/8/Go 5.851 ns/op +0.033 ns/op / +0.6% (worse)
Linux BenchmarkStringEquality/strings/first/8/LLGo 3.500 ns/op +0.002 ns/op / +0.1% (worse)
Linux BenchmarkStringEquality/strings/last/1024/Go 22.820 ns/op +0.04 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/last/1024/LLGo 55.010 ns/op +0.5 ns/op / +0.9% (worse)
Linux BenchmarkStringEquality/strings/last/128/Go 8.156 ns/op +0.033 ns/op / +0.4% (worse)
Linux BenchmarkStringEquality/strings/last/128/LLGo 11.090 ns/op +0.02 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/last/8/Go 5.831 ns/op +0.01 ns/op / +0.2% (worse)
Linux BenchmarkStringEquality/strings/last/8/LLGo 4.276 ns/op -0.011 ns/op / -0.3% (better)
macOS BenchmarkStringEquality/bytes/equal/1024/Go 27.420 ns/op +0.71 ns/op / +2.7% (worse)
macOS BenchmarkStringEquality/bytes/equal/1024/LLGo 24.540 ns/op -15.28 ns/op / -38.4% (better)
macOS BenchmarkStringEquality/bytes/equal/128/Go 6.313 ns/op +0.581 ns/op / +10.1% (worse)
macOS BenchmarkStringEquality/bytes/equal/128/LLGo 4.670 ns/op -3.229 ns/op / -40.9% (better)
macOS BenchmarkStringEquality/bytes/equal/8/Go 3.824 ns/op +0.307 ns/op / +8.7% (worse)
macOS BenchmarkStringEquality/bytes/equal/8/LLGo 2.821 ns/op +0.001 ns/op / +0.03546% (worse)
macOS BenchmarkStringEquality/bytes/first/1024/Go 3.991 ns/op -3.461 ns/op / -46.4% (better)
macOS BenchmarkStringEquality/bytes/first/1024/LLGo 1.782 ns/op +0.038 ns/op / +2.2% (worse)
macOS BenchmarkStringEquality/bytes/first/128/Go 4.298 ns/op +0.492 ns/op / +12.9% (worse)
macOS BenchmarkStringEquality/bytes/first/128/LLGo 1.800 ns/op -0.031 ns/op / -1.7% (better)
macOS BenchmarkStringEquality/bytes/first/8/Go 4.042 ns/op -1.156 ns/op / -22.2% (better)
macOS BenchmarkStringEquality/bytes/first/8/LLGo 1.749 ns/op -0.21 ns/op / -10.7% (better)
macOS BenchmarkStringEquality/bytes/last/1024/Go 24.130 ns/op -9.38 ns/op / -28.0% (better)
macOS BenchmarkStringEquality/bytes/last/1024/LLGo 24.070 ns/op -4.59 ns/op / -16.0% (better)
macOS BenchmarkStringEquality/bytes/last/128/Go 5.743 ns/op +0.502 ns/op / +9.6% (worse)
macOS BenchmarkStringEquality/bytes/last/128/LLGo 4.104 ns/op -2.181 ns/op / -34.7% (better)
macOS BenchmarkStringEquality/bytes/last/8/Go 3.933 ns/op +0.244 ns/op / +6.6% (worse)
macOS BenchmarkStringEquality/bytes/last/8/LLGo 2.526 ns/op -0.338 ns/op / -11.8% (better)
macOS BenchmarkStringEquality/strings/equal/1024/Go 27.810 ns/op -5.41 ns/op / -16.3% (better)
macOS BenchmarkStringEquality/strings/equal/1024/LLGo 25.870 ns/op -9.92 ns/op / -27.7% (better)
macOS BenchmarkStringEquality/strings/equal/128/Go 6.579 ns/op +0.783 ns/op / +13.5% (worse)
macOS BenchmarkStringEquality/strings/equal/128/LLGo 4.677 ns/op -1.017 ns/op / -17.9% (better)
macOS BenchmarkStringEquality/strings/equal/8/Go 3.906 ns/op +0.387 ns/op / +11.0% (worse)
macOS BenchmarkStringEquality/strings/equal/8/LLGo 2.814 ns/op -0.018 ns/op / -0.6% (better)
macOS BenchmarkStringEquality/strings/first/1024/Go 4.242 ns/op -0.855 ns/op / -16.8% (better)
macOS BenchmarkStringEquality/strings/first/1024/LLGo 1.757 ns/op -0.007 ns/op / -0.4% (better)
macOS BenchmarkStringEquality/strings/first/128/Go 4.257 ns/op +0.322 ns/op / +8.2% (worse)
macOS BenchmarkStringEquality/strings/first/128/LLGo 1.803 ns/op -1.409 ns/op / -43.9% (better)
macOS BenchmarkStringEquality/strings/first/8/Go 3.937 ns/op +0.446 ns/op / +12.8% (worse)
macOS BenchmarkStringEquality/strings/first/8/LLGo 1.829 ns/op -0.053 ns/op / -2.8% (better)
macOS BenchmarkStringEquality/strings/last/1024/Go 24.230 ns/op -5.7 ns/op / -19.0% (better)
macOS BenchmarkStringEquality/strings/last/1024/LLGo 23.830 ns/op -4.02 ns/op / -14.4% (better)
macOS BenchmarkStringEquality/strings/last/128/Go 5.832 ns/op +0.174 ns/op / +3.1% (worse)
macOS BenchmarkStringEquality/strings/last/128/LLGo 4.008 ns/op -1.501 ns/op / -27.2% (better)
macOS BenchmarkStringEquality/strings/last/8/Go 3.883 ns/op +0.438 ns/op / +12.7% (worse)
macOS BenchmarkStringEquality/strings/last/8/LLGo 2.474 ns/op -0.244 ns/op / -9.0% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/Go 19.410 ns/op -1.77 ns/op / -8.4% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/1024/LLGo 46.910 ns/op +0.24 ns/op / +0.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/Go 6.269 ns/op -0.031 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/bytes/equal/128/LLGo 10.190 ns/op +0.08 ns/op / +0.8% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/Go 4.618 ns/op +0.157 ns/op / +3.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/equal/8/LLGo 3.729 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkStringEquality/bytes/first/1024/Go 4.976 ns/op -0.011 ns/op / -0.2% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/1024/LLGo 2.581 ns/op -0.007 ns/op / -0.3% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/128/Go 4.993 ns/op +0.054 ns/op / +1.1% (worse)
Windows MinGW BenchmarkStringEquality/bytes/first/128/LLGo 2.586 ns/op -0.278 ns/op / -9.7% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/8/Go 4.128 ns/op -0.112 ns/op / -2.6% (better)
Windows MinGW BenchmarkStringEquality/bytes/first/8/LLGo 2.584 ns/op +0.001 ns/op / +0.03871% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/Go 18.920 ns/op -0.01 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/1024/LLGo 46.600 ns/op -5.72 ns/op / -10.9% (better)
Windows MinGW BenchmarkStringEquality/bytes/last/128/Go 6.199 ns/op +0.322 ns/op / +5.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/128/LLGo 10.030 ns/op +0.069 ns/op / +0.7% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/8/Go 4.381 ns/op +0.23 ns/op / +5.5% (worse)
Windows MinGW BenchmarkStringEquality/bytes/last/8/LLGo 3.252 ns/op +0.098 ns/op / +3.1% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/Go 17.400 ns/op -0.08 ns/op / -0.5% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/1024/LLGo 40.370 ns/op -0.04 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/128/Go 6.165 ns/op -0.045 ns/op / -0.7% (better)
Windows MinGW BenchmarkStringEquality/strings/equal/128/LLGo 8.282 ns/op +0.039 ns/op / +0.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/8/Go 4.393 ns/op +0.033 ns/op / +0.8% (worse)
Windows MinGW BenchmarkStringEquality/strings/equal/8/LLGo 3.153 ns/op 0 ns/op / +0.0%
Windows MinGW BenchmarkStringEquality/strings/first/1024/Go 5.085 ns/op +0.173 ns/op / +3.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/1024/LLGo 2.005 ns/op -0.001 ns/op / -0.04985% (better)
Windows MinGW BenchmarkStringEquality/strings/first/128/Go 5.069 ns/op +0.152 ns/op / +3.1% (worse)
Windows MinGW BenchmarkStringEquality/strings/first/128/LLGo 2.005 ns/op -0.002 ns/op / -0.1% (better)
Windows MinGW BenchmarkStringEquality/strings/first/8/Go 4.109 ns/op -0.245 ns/op / -5.6% (better)
Windows MinGW BenchmarkStringEquality/strings/first/8/LLGo 2.006 ns/op -0.001 ns/op / -0.04983% (better)
Windows MinGW BenchmarkStringEquality/strings/last/1024/Go 18.370 ns/op +0.96 ns/op / +5.5% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/1024/LLGo 40.370 ns/op -0.1 ns/op / -0.2% (better)
Windows MinGW BenchmarkStringEquality/strings/last/128/Go 5.768 ns/op -0.009 ns/op / -0.2% (better)
Windows MinGW BenchmarkStringEquality/strings/last/128/LLGo 8.164 ns/op +0.036 ns/op / +0.4% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/8/Go 4.375 ns/op +0.201 ns/op / +4.8% (worse)
Windows MinGW BenchmarkStringEquality/strings/last/8/LLGo 2.578 ns/op -0.001 ns/op / -0.03877% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/Go 31 ns/op -0.1 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 34.220 ns/op +0.08 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/Go 10.210 ns/op -0.09 ns/op / -0.9% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/128/LLGo 8.108 ns/op -0.058 ns/op / -0.7% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/Go 7.403 ns/op -0.102 ns/op / -1.4% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/equal/8/LLGo 5.304 ns/op -0.111 ns/op / -2.0% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/Go 8.187 ns/op +0.077 ns/op / +0.9% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/1024/LLGo 3.882 ns/op +0.01 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/Go 8.182 ns/op -0.019 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/128/LLGo 3.883 ns/op +0.027 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/Go 6.923 ns/op -0.11 ns/op / -1.6% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/first/8/LLGo 3.857 ns/op -0.013 ns/op / -0.3% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/Go 30.290 ns/op -0.01 ns/op / -0.033% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/1024/LLGo 33.400 ns/op -0.15 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/Go 9.602 ns/op +0.091 ns/op / +1.0% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/128/LLGo 7.536 ns/op +0.026 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/Go 7.414 ns/op -0.129 ns/op / -1.7% (better)
Windows MinGW 386 BenchmarkStringEquality/bytes/last/8/LLGo 4.465 ns/op +0.029 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/Go 28.750 ns/op +0.2 ns/op / +0.7% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/1024/LLGo 33.810 ns/op -0.08 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/Go 9.499 ns/op -0.149 ns/op / -1.5% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/128/LLGo 8.148 ns/op +0.022 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/Go 7.256 ns/op -0.434 ns/op / -5.6% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/equal/8/LLGo 5.009 ns/op -0.086 ns/op / -1.7% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/Go 7.841 ns/op +0.14 ns/op / +1.8% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.892 ns/op -0.021 ns/op / -0.5% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/Go 7.912 ns/op +0.024 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/128/LLGo 3.898 ns/op -0.009 ns/op / -0.2% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/Go 6.821 ns/op +0.028 ns/op / +0.4% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/first/8/LLGo 3.901 ns/op -0.071 ns/op / -1.8% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/Go 28.080 ns/op -0.02 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/1024/LLGo 33.420 ns/op -0.15 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/Go 9.102 ns/op +0.048 ns/op / +0.5% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/128/LLGo 8.008 ns/op +0.493 ns/op / +6.6% (worse)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/Go 7.157 ns/op -0.081 ns/op / -1.1% (better)
Windows MinGW 386 BenchmarkStringEquality/strings/last/8/LLGo 4.510 ns/op +0.104 ns/op / +2.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.360 ns/op +0.19 ns/op / +0.6% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 38.990 ns/op -0.42 ns/op / -1.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.781 ns/op +0.094 ns/op / +1.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 7.102 ns/op +0.018 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.739 ns/op +0.018 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.487 ns/op +0.002 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.716 ns/op -0.036 ns/op / -0.8% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.573 ns/op -0.044 ns/op / -2.7% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.809 ns/op +0.02 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.563 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.546 ns/op +0.168 ns/op / +5.0% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.564 ns/op +0.018 ns/op / +1.2% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/Go 31.140 ns/op +0.16 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39.130 ns/op +0.21 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.689 ns/op -0.126 ns/op / -1.8% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.821 ns/op -0.02 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.548 ns/op +0.136 ns/op / +4.0% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.196 ns/op -0.005 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.450 ns/op -0.07 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.750 ns/op -0.21 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.061 ns/op +0.008 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.969 ns/op -0.011 ns/op / -0.2% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.896 ns/op +0.005 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.741 ns/op +0.049 ns/op / +1.8% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.532 ns/op +0.017 ns/op / +0.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.571 ns/op -0.039 ns/op / -2.4% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/Go 4.533 ns/op +0.012 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.605 ns/op +0.005 ns/op / +0.3% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/Go 3.929 ns/op +0.055 ns/op / +1.4% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.582 ns/op -0.079 ns/op / -4.8% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.160 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.730 ns/op +0.17 ns/op / +0.5% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/Go 5.910 ns/op -0.001 ns/op / -0.01692% (better)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.488 ns/op +0.04 ns/op / +0.7% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/Go 3.920 ns/op +0.044 ns/op / +1.1% (worse)
Windows MinGW ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.037 ns/op -0.032 ns/op / -1.5% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/Go 16.750 ns/op -0.09 ns/op / -0.5% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/1024/LLGo 33.530 ns/op +0.2 ns/op / +0.6% (worse)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/Go 5.731 ns/op -0.545 ns/op / -8.7% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/128/LLGo 8.241 ns/op -0.021 ns/op / -0.3% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/Go 4.891 ns/op -0.093 ns/op / -1.9% (better)
Windows MSVC BenchmarkStringEquality/bytes/equal/8/LLGo 3.793 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/Go 4.633 ns/op -0.023 ns/op / -0.5% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/1024/LLGo 2.978 ns/op -0.001 ns/op / -0.03357% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/128/Go 4.879 ns/op -0.823 ns/op / -14.4% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/128/LLGo 2.979 ns/op +0.001 ns/op / +0.03358% (worse)
Windows MSVC BenchmarkStringEquality/bytes/first/8/Go 4.622 ns/op -1.112 ns/op / -19.4% (better)
Windows MSVC BenchmarkStringEquality/bytes/first/8/LLGo 2.980 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkStringEquality/bytes/last/1024/Go 16.500 ns/op +0.2 ns/op / +1.2% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/1024/LLGo 36.070 ns/op +1.22 ns/op / +3.5% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/128/Go 5.146 ns/op -1.118 ns/op / -17.8% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/128/LLGo 8.820 ns/op +0.036 ns/op / +0.4% (worse)
Windows MSVC BenchmarkStringEquality/bytes/last/8/Go 4.620 ns/op -0.896 ns/op / -16.2% (better)
Windows MSVC BenchmarkStringEquality/bytes/last/8/LLGo 3.249 ns/op -0.003 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/Go 15.610 ns/op +0.22 ns/op / +1.4% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/1024/LLGo 30.370 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/128/Go 5.718 ns/op -0.54 ns/op / -8.6% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/128/LLGo 6.364 ns/op -0.109 ns/op / -1.7% (better)
Windows MSVC BenchmarkStringEquality/strings/equal/8/Go 5.075 ns/op +0.06 ns/op / +1.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/equal/8/LLGo 2.980 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkStringEquality/strings/first/1024/Go 4.923 ns/op +0.033 ns/op / +0.7% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/1024/LLGo 1.898 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/128/Go 4.883 ns/op -0.024 ns/op / -0.5% (better)
Windows MSVC BenchmarkStringEquality/strings/first/128/LLGo 1.895 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkStringEquality/strings/first/8/Go 4.872 ns/op +0.029 ns/op / +0.6% (worse)
Windows MSVC BenchmarkStringEquality/strings/first/8/LLGo 1.898 ns/op -0.029 ns/op / -1.5% (better)
Windows MSVC BenchmarkStringEquality/strings/last/1024/Go 14.520 ns/op -0.36 ns/op / -2.4% (better)
Windows MSVC BenchmarkStringEquality/strings/last/1024/LLGo 30.120 ns/op -0.09 ns/op / -0.3% (better)
Windows MSVC BenchmarkStringEquality/strings/last/128/Go 5.418 ns/op -0.06 ns/op / -1.1% (better)
Windows MSVC BenchmarkStringEquality/strings/last/128/LLGo 6.088 ns/op +0.01 ns/op / +0.2% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/8/Go 4.873 ns/op +0.042 ns/op / +0.9% (worse)
Windows MSVC BenchmarkStringEquality/strings/last/8/LLGo 2.437 ns/op +0.259 ns/op / +11.9% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/Go 30.960 ns/op +0.06 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/1024/LLGo 85.060 ns/op -0.02 ns/op / -0.02351% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/Go 9.941 ns/op +0.09 ns/op / +0.9% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/128/LLGo 16.150 ns/op -0.1 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/Go 7.409 ns/op +0.053 ns/op / +0.7% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/equal/8/LLGo 5.001 ns/op -0.073 ns/op / -1.4% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/Go 8.131 ns/op -0.02 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/1024/LLGo 3.726 ns/op +0.015 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/Go 8.012 ns/op -0.109 ns/op / -1.3% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/128/LLGo 5.219 ns/op +1.504 ns/op / +40.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/Go 6.965 ns/op -0.081 ns/op / -1.1% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/first/8/LLGo 3.715 ns/op -0.029 ns/op / -0.8% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/Go 30.350 ns/op -0.06 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/1024/LLGo 84.480 ns/op -0.2 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/Go 9.634 ns/op +0.116 ns/op / +1.2% (worse)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/128/LLGo 15.680 ns/op -0.1 ns/op / -0.6% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/Go 7.364 ns/op -0.07 ns/op / -0.9% (better)
Windows MSVC 386 BenchmarkStringEquality/bytes/last/8/LLGo 4.347 ns/op -0.06 ns/op / -1.4% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/Go 28.780 ns/op +0.16 ns/op / +0.6% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/1024/LLGo 94.640 ns/op -0.28 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/Go 9.506 ns/op -0.108 ns/op / -1.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/128/LLGo 16.610 ns/op -0.01 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/Go 7.247 ns/op -0.78 ns/op / -9.7% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/equal/8/LLGo 4.989 ns/op -0.014 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/Go 7.829 ns/op +0.119 ns/op / +1.5% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/1024/LLGo 3.626 ns/op -0.05 ns/op / -1.4% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/Go 7.760 ns/op -0.096 ns/op / -1.2% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/128/LLGo 3.667 ns/op +0.03 ns/op / +0.8% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/Go 6.885 ns/op -0.079 ns/op / -1.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/first/8/LLGo 3.663 ns/op -0.099 ns/op / -2.6% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/Go 28.080 ns/op -0.03 ns/op / -0.1% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/1024/LLGo 94.680 ns/op +0.26 ns/op / +0.3% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/Go 9.044 ns/op +0.039 ns/op / +0.4% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/128/LLGo 16.390 ns/op +0.01 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/Go 7.211 ns/op -0.034 ns/op / -0.5% (better)
Windows MSVC 386 BenchmarkStringEquality/strings/last/8/LLGo 4.629 ns/op -0.012 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/Go 31.480 ns/op +0.16 ns/op / +0.5% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/1024/LLGo 38.770 ns/op +0.13 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/Go 6.721 ns/op +0.021 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/128/LLGo 6.970 ns/op -0.029 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/Go 3.730 ns/op +0.014 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/equal/8/LLGo 2.724 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/Go 4.782 ns/op +0.048 ns/op / +1.0% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/1024/LLGo 1.616 ns/op -0.006 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/Go 4.770 ns/op -0.028 ns/op / -0.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/128/LLGo 1.639 ns/op +0.022 ns/op / +1.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/Go 3.484 ns/op +0.085 ns/op / +2.5% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/first/8/LLGo 1.607 ns/op -0.011 ns/op / -0.7% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/Go 31.530 ns/op +0.1 ns/op / +0.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/1024/LLGo 39.060 ns/op +0.34 ns/op / +0.9% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/Go 6.634 ns/op -0.106 ns/op / -1.6% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/128/LLGo 6.742 ns/op -0.098 ns/op / -1.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/Go 3.399 ns/op -0.149 ns/op / -4.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/bytes/last/8/LLGo 2.262 ns/op +0.003 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/Go 27.380 ns/op +0.04 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/1024/LLGo 35.860 ns/op -2.5 ns/op / -6.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/Go 6.066 ns/op -0.03 ns/op / -0.5% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/128/LLGo 5.932 ns/op +0.007 ns/op / +0.1% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/Go 3.896 ns/op +0.006 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/equal/8/LLGo 2.470 ns/op +0.013 ns/op / +0.5% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/Go 4.526 ns/op +0.02 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/1024/LLGo 1.713 ns/op -0.024 ns/op / -1.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/Go 4.476 ns/op -0.096 ns/op / -2.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/128/LLGo 1.750 ns/op +0.018 ns/op / +1.0% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/Go 3.858 ns/op -0.017 ns/op / -0.4% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/first/8/LLGo 1.759 ns/op +0.039 ns/op / +2.3% (worse)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/Go 27.090 ns/op -0.09 ns/op / -0.3% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/1024/LLGo 35.620 ns/op -0.04 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/Go 5.926 ns/op -0.002 ns/op / -0.03374% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/128/LLGo 5.494 ns/op -0.045 ns/op / -0.8% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/Go 3.886 ns/op -0.008 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkStringEquality/strings/last/8/LLGo 2.213 ns/op 0 ns/op / +0.0%

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 8576 B 0 B / +0.0% 387 B 0 B / +0.0% 1.115 s +22.13 ms / +2.0% (worse) 1.273 ms -49.5 us / -3.7% (better)
Linux cprintf-lto 8240 B 0 B / +0.0% 368 B 0 B / +0.0% 1.096 s +21.18 ms / +2.0% (worse) 1.306 ms -19.43 us / -1.5% (better)
Linux fmtprintf 1943984 B +224 B / +0.01152% (worse) 270049 B +73 B / +0.02704% (worse) 6.729 s -119.4 ms / -1.7% (better) 4.170 ms +1.112 ms / +36.3% (worse)
Linux fmtprintf-lto 1020048 B +176 B / +0.01726% (worse) 210959 B +68 B / +0.03224% (worse) 17.267 s +1.729 s / +11.1% (worse) 3.608 ms +598.3 us / +19.9% (worse)
Linux println 261336 B +680 B / +0.3% (worse) 19265 B +93 B / +0.5% (worse) 1.132 s -15.8 ms / -1.4% (better) 1.647 ms +68.73 us / +4.4% (worse)
Linux println-lto 103176 B +496 B / +0.5% (worse) 15728 B +76 B / +0.5% (worse) 1.796 s -60.52 ms / -3.3% (better) 1.633 ms -1.672 us / -0.1% (better)
macOS cprintf 50944 B 0 B / +0.0% 4409 B 0 B / +0.0% 1.447 s -180.6 ms / -11.1% (better) 3.901 ms -2.463 ms / -38.7% (better)
macOS cprintf-lto 50608 B 0 B / +0.0% 161 B 0 B / +0.0% 1.483 s -436.8 ms / -22.7% (better) 6.610 ms -385.3 us / -5.5% (better)
macOS fmtprintf 1233696 B 0 B / +0.0% 676109 B +16 B / +0.002367% (worse) 7.740 s +573 ms / +8.0% (worse) 5.233 ms -3.32 ms / -38.8% (better)
macOS fmtprintf-lto 871600 B 0 B / +0.0% 521805 B +16 B / +0.003066% (worse) 8.377 s -3.63 s / -30.2% (better) 6.975 ms +905.4 us / +14.9% (worse)
macOS println 100992 B +400 B / +0.4% (worse) 26435 B +60 B / +0.2% (worse) 1.353 s -220.4 ms / -14.0% (better) 5.120 ms +389.8 us / +8.2% (worse)
macOS println-lto 85776 B +144 B / +0.2% (worse) 22543 B +52 B / +0.2% (worse) 1.784 s -16.67 ms / -0.9% (better) 6.027 ms +1.185 ms / +24.5% (worse)
Windows MinGW cprintf 746496 B +512 B / +0.1% (worse) 4230 B 0 B / +0.0% 2.073 s -29.61 ms / -1.4% (better) 4.256 ms -78.4 us / -1.8% (better)
Windows MinGW cprintf-lto 60928 B 0 B / +0.0% 4182 B 0 B / +0.0% 2.101 s -33.11 ms / -1.6% (better) 3.322 ms -689.3 us / -17.2% (better)
Windows MinGW fmtprintf 5157376 B +512 B / +0.009929% (worse) 362182 B +48 B / +0.01325% (worse) 6.913 s -188.7 ms / -2.7% (better) 11.107 ms -555.7 us / -4.8% (better)
Windows MinGW fmtprintf-lto 2764288 B 0 B / +0.0% 308118 B +16 B / +0.005193% (worse) 11.322 s -434.9 ms / -3.7% (better) 11.199 ms -644.7 us / -5.4% (better)
Windows MinGW println 809472 B +1536 B / +0.2% (worse) 27478 B +64 B / +0.2% (worse) 2.026 s -82.31 ms / -3.9% (better) 7.363 ms -439.2 us / -5.6% (better)
Windows MinGW println-lto 233984 B 0 B / +0.0% 22614 B +16 B / +0.1% (worse) 2.395 s +476.7 us / +0.01991% (worse) 7.826 ms +460.6 us / +6.3% (worse)
Windows MinGW 386 cprintf 753152 B +1024 B / +0.1% (worse) 22774 B +48 B / +0.2% (worse) 2.054 s -14.31 ms / -0.7% (better) 8.843 ms +158.9 us / +1.8% (worse)
Windows MinGW 386 cprintf-lto 282112 B 0 B / +0.0% 19520 B +16 B / +0.1% (worse) 2.350 s -33.36 ms / -1.4% (better) 8.656 ms -567 us / -6.1% (better)
Windows MinGW 386 fmtprintf 4507648 B 0 B / +0.0% 284912 B +48 B / +0.01685% (worse) 6.904 s -98.62 ms / -1.4% (better) 12.062 ms +561.8 us / +4.9% (worse)
Windows MinGW 386 fmtprintf-lto 2890752 B 0 B / +0.0% 257498 B +12 B / +0.00466% (worse) 11.086 s -138.3 ms / -1.2% (better) 11.729 ms +22.4 us / +0.2% (worse)
Windows MinGW 386 println 751616 B +512 B / +0.1% (worse) 22720 B +48 B / +0.2% (worse) 2.058 s -1.699 ms / -0.1% (better) 8.741 ms +85.2 us / +1.0% (worse)
Windows MinGW 386 println-lto 281088 B 0 B / +0.0% 19454 B +16 B / +0.1% (worse) 2.405 s +41.53 ms / +1.8% (worse) 8.869 ms +2.4 us / +0.02707% (worse)
Windows MinGW ARM64 cprintf 752128 B +512 B / +0.1% (worse) 4028 B 0 B / +0.0% 2.475 s +105.4 ms / +4.4% (worse) 7.991 ms +496.3 us / +6.6% (worse)
Windows MinGW ARM64 cprintf-lto 60416 B 0 B / +0.0% 3984 B 0 B / +0.0% 2.298 s -103 ms / -4.3% (better) 6.987 ms -956.6 us / -12.0% (better)
Windows MinGW ARM64 fmtprintf 5096448 B 0 B / +0.0% 302196 B +28 B / +0.009266% (worse) 6.970 s +134.4 ms / +2.0% (worse) 15.833 ms +982.9 us / +6.6% (worse)
Windows MinGW ARM64 fmtprintf-lto 2818048 B 0 B / +0.0% 258288 B +4 B / +0.001549% (worse) 11.014 s +451.6 ms / +4.3% (worse) 15.355 ms +180.7 us / +1.2% (worse)
Windows MinGW ARM64 println 813056 B 0 B / +0.0% 25640 B +36 B / +0.1% (worse) 2.307 s -154.1 ms / -6.3% (better) 12.716 ms -415.1 us / -3.2% (better)
Windows MinGW ARM64 println-lto 237056 B 0 B / +0.0% 21836 B +12 B / +0.1% (worse) 2.612 s -99.39 ms / -3.7% (better) 11.707 ms -1.782 ms / -13.2% (better)
Windows MSVC cprintf 991232 B +512 B / +0.1% (worse) 66003 B 0 B / +0.0% 1.706 s +185.3 ms / +12.2% (worse) 2.794 ms +2.4 us / +0.1% (worse)
Windows MSVC cprintf-lto 308736 B 0 B / +0.0% 65971 B 0 B / +0.0% 1.573 s +11.81 ms / +0.8% (worse) 2.765 ms +19.8 us / +0.7% (worse)
Windows MSVC fmtprintf 5457408 B +1536 B / +0.02815% (worse) 458262 B +32 B / +0.006983% (worse) 5.340 s +81.49 ms / +1.5% (worse) 9.590 ms +536.1 us / +5.9% (worse)
Windows MSVC fmtprintf-lto 3087872 B 0 B / +0.0% 406710 B +48 B / +0.0118% (worse) 8.701 s +73.11 ms / +0.8% (worse) 9.576 ms -193.2 us / -2.0% (better)
Windows MSVC println 1122816 B +512 B / +0.04562% (worse) 123622 B +48 B / +0.03884% (worse) 1.537 s +3.26 ms / +0.2% (worse) 5.653 ms -382.8 us / -6.3% (better)
Windows MSVC println-lto 553984 B 0 B / +0.0% 119446 B +32 B / +0.0268% (worse) 1.781 s -19.45 ms / -1.1% (better) 6.585 ms +412.8 us / +6.7% (worse)
Windows MSVC 386 cprintf 662016 B +512 B / +0.1% (worse) 21426 B +48 B / +0.2% (worse) 1.950 s -14.89 ms / -0.8% (better) 9.619 ms -994.9 us / -9.4% (better)
Windows MSVC 386 cprintf-lto 221184 B 0 B / +0.0% 18873 B +16 B / +0.1% (worse) 2.397 s +162.2 ms / +7.3% (worse) 9.882 ms -329.9 us / -3.2% (better)
Windows MSVC 386 fmtprintf 4235776 B +512 B / +0.01209% (worse) 268374 B +48 B / +0.01789% (worse) 6.546 s -61.52 ms / -0.9% (better) 12.340 ms -215.7 us / -1.7% (better)
Windows MSVC 386 fmtprintf-lto 2704384 B 0 B / +0.0% 236993 B +32 B / +0.0135% (worse) 10.196 s -84.92 ms / -0.8% (better) 13.088 ms +293.7 us / +2.3% (worse)
Windows MSVC 386 println 659968 B +1536 B / +0.2% (worse) 21372 B +64 B / +0.3% (worse) 1.925 s -302 ms / -13.6% (better) 9.703 ms +68.9 us / +0.7% (worse)
Windows MSVC 386 println-lto 219648 B 0 B / +0.0% 18803 B +16 B / +0.1% (worse) 2.214 s -3.303 ms / -0.1% (better) 9.498 ms -322.3 us / -3.3% (better)
Windows MSVC ARM64 cprintf 754688 B 0 B / +0.0% 4240 B 0 B / +0.0% 2.039 s +144.2 ms / +7.6% (worse) 7.499 ms +890.8 us / +13.5% (worse)
Windows MSVC ARM64 cprintf-lto 66048 B 0 B / +0.0% 4140 B 0 B / +0.0% 2.023 s +102.4 ms / +5.3% (worse) 7.676 ms +1.273 ms / +19.9% (worse)
Windows MSVC ARM64 fmtprintf 5092352 B 0 B / +0.0% 302524 B +32 B / +0.01058% (worse) 6.386 s +266.5 ms / +4.4% (worse) 16.750 ms +2.46 ms / +17.2% (worse)
Windows MSVC ARM64 fmtprintf-lto 2826752 B 0 B / +0.0% 259232 B 0 B / +0.0% 9.976 s +442.5 ms / +4.6% (worse) 17.625 ms +2.109 ms / +13.6% (worse)
Windows MSVC ARM64 println 816640 B +1024 B / +0.1% (worse) 26132 B +48 B / +0.2% (worse) 1.998 s +93.22 ms / +4.9% (worse) 13.345 ms +1.815 ms / +15.7% (worse)
Windows MSVC ARM64 println-lto 243200 B 0 B / +0.0% 22384 B 0 B / +0.0% 2.262 s +111.4 ms / +5.2% (worse) 12.308 ms +494.2 us / +4.2% (worse)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.510 ns/op +0.04 ns/op / +0.3% (worse)
Linux BenchmarkMergeCompilerFlags 220.600 ns/op +9.8 ns/op / +4.6% (worse)
Linux BenchmarkMergeLinkerFlags 160.300 ns/op +20.3 ns/op / +14.5% (worse)
Linux BenchmarkChannelBuffered 72.160 ns/op -0.13 ns/op / -0.2% (better)
Linux BenchmarkChannelHandoff 13760 ns/op -430 ns/op / -3.0% (better)
Linux BenchmarkDefer 19.150 ns/op +2.31 ns/op / +13.7% (worse)
Linux BenchmarkDirectCall 1.554 ns/op -0.014 ns/op / -0.9% (better)
Linux BenchmarkGlobalRead 1.172 ns/op -0.036 ns/op / -3.0% (better)
Linux BenchmarkGlobalWrite 7.786 ns/op -0.165 ns/op / -2.1% (better)
Linux BenchmarkGoroutine 24023 ns/op +637 ns/op / +2.7% (worse)
Linux BenchmarkInterfaceCall 4.707 ns/op -0.571 ns/op / -10.8% (better)
Linux BenchmarkRuntimeGetG 2.346 ns/op -0.124 ns/op / -5.0% (better)
macOS BenchmarkLookupPCRandom 12.980 ns/op -3.65 ns/op / -21.9% (better)
macOS BenchmarkMergeCompilerFlags 122.100 ns/op -45.1 ns/op / -27.0% (better)
macOS BenchmarkMergeLinkerFlags 72.640 ns/op -30.16 ns/op / -29.3% (better)
macOS BenchmarkChannelBuffered 29.740 ns/op +0.6 ns/op / +2.1% (worse)
macOS BenchmarkChannelHandoff 7621 ns/op -2563 ns/op / -25.2% (better)
macOS BenchmarkDefer 12.180 ns/op +0.31 ns/op / +2.6% (worse)
macOS BenchmarkDirectCall 1.135 ns/op -0.129 ns/op / -10.2% (better)
macOS BenchmarkGlobalRead 1.124 ns/op -0.197 ns/op / -14.9% (better)
macOS BenchmarkGlobalWrite 1.205 ns/op -0.187 ns/op / -13.4% (better)
macOS BenchmarkGoroutine 86071 ns/op +31271 ns/op / +57.1% (worse)
macOS BenchmarkInterfaceCall 4.017 ns/op -0.541 ns/op / -11.9% (better)
macOS BenchmarkRuntimeGetG 2.352 ns/op +0.113 ns/op / +5.0% (worse)
Windows MinGW BenchmarkLookupPCRandom 11.200 ns/op +0.07 ns/op / +0.6% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 630.400 ns/op +1.3 ns/op / +0.2% (worse)
Windows MinGW BenchmarkMergeLinkerFlags 561.400 ns/op +21.4 ns/op / +4.0% (worse)
Windows MinGW BenchmarkChannelBuffered 53.770 ns/op -0.11 ns/op / -0.2% (better)
Windows MinGW BenchmarkChannelHandoff 2485 ns/op -1025 ns/op / -29.2% (better)
Windows MinGW BenchmarkDefer 12.580 ns/op -0.1 ns/op / -0.8% (better)
Windows MinGW BenchmarkDirectCall 0.869 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalRead 0.864 ns/op -0.0053 ns/op / -0.6% (better)
Windows MinGW BenchmarkGlobalWrite 6.066 ns/op -0.005 ns/op / -0.1% (better)
Windows MinGW BenchmarkGoroutine 78470 ns/op -1735 ns/op / -2.2% (better)
Windows MinGW BenchmarkInterfaceCall 4.906 ns/op -0.092 ns/op / -1.8% (better)
Windows MinGW BenchmarkRuntimeGetG 2.150 ns/op +0.004 ns/op / +0.2% (worse)
Windows MinGW 386 BenchmarkLookupPCRandom 26.710 ns/op +0.07 ns/op / +0.3% (worse)
Windows MinGW 386 BenchmarkMergeCompilerFlags 765.400 ns/op +11.9 ns/op / +1.6% (worse)
Windows MinGW 386 BenchmarkMergeLinkerFlags 706.300 ns/op +17 ns/op / +2.5% (worse)
Windows MinGW 386 BenchmarkChannelBuffered 44.140 ns/op -0.27 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkChannelHandoff 623.600 ns/op +52.6 ns/op / +9.2% (worse)
Windows MinGW 386 BenchmarkDefer 15.620 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW 386 BenchmarkDirectCall 1.553 ns/op -0.007 ns/op / -0.4% (better)
Windows MinGW 386 BenchmarkGlobalRead 1.871 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGlobalWrite 7.797 ns/op -0.007 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkGoroutine 107596 ns/op +1080 ns/op / +1.0% (worse)
Windows MinGW 386 BenchmarkInterfaceCall 7.461 ns/op -0.004 ns/op / -0.1% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 2.175 ns/op -0.003 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.090 ns/op -0.05 ns/op / -0.4% (better)
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 576.800 ns/op -1.9 ns/op / -0.3% (better)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 556.100 ns/op -32.6 ns/op / -5.5% (better)
Windows MinGW ARM64 BenchmarkChannelBuffered 43.400 ns/op +0.35 ns/op / +0.8% (worse)
Windows MinGW ARM64 BenchmarkChannelHandoff 1918 ns/op +40 ns/op / +2.1% (worse)
Windows MinGW ARM64 BenchmarkDefer 11.950 ns/op +0.17 ns/op / +1.4% (worse)
Windows MinGW ARM64 BenchmarkDirectCall 0.589 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkGlobalRead 0.664 ns/op +0.0001 ns/op / +0.01507% (worse)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.664 ns/op +0.0006 ns/op / +0.1% (worse)
Windows MinGW ARM64 BenchmarkGoroutine 65703 ns/op -2597 ns/op / -3.8% (better)
Windows MinGW ARM64 BenchmarkInterfaceCall 3.844 ns/op -0.005 ns/op / -0.1% (better)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.811 ns/op +0.012 ns/op / +0.7% (worse)
Windows MSVC BenchmarkLookupPCRandom 9.674 ns/op -0.006 ns/op / -0.1% (better)
Windows MSVC BenchmarkMergeCompilerFlags 385.500 ns/op +15.1 ns/op / +4.1% (worse)
Windows MSVC BenchmarkMergeLinkerFlags 333.700 ns/op +1.2 ns/op / +0.4% (worse)
Windows MSVC BenchmarkChannelBuffered 27.150 ns/op +1.08 ns/op / +4.1% (worse)
Windows MSVC BenchmarkChannelHandoff 528.400 ns/op -2.3 ns/op / -0.4% (better)
Windows MSVC BenchmarkDefer 12.230 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkDirectCall 1.357 ns/op 0 ns/op / +0.0%
Windows MSVC BenchmarkGlobalRead 1.393 ns/op +0.036 ns/op / +2.7% (worse)
Windows MSVC BenchmarkGlobalWrite 2.167 ns/op -0.001 ns/op / -0.04613% (better)
Windows MSVC BenchmarkGoroutine 56631 ns/op -740 ns/op / -1.3% (better)
Windows MSVC BenchmarkInterfaceCall 6.951 ns/op +0.907 ns/op / +15.0% (worse)
Windows MSVC BenchmarkRuntimeGetG 1.630 ns/op +0.002 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkLookupPCRandom 26.480 ns/op -0.01 ns/op / -0.03775% (better)
Windows MSVC 386 BenchmarkMergeCompilerFlags 742.300 ns/op +28.1 ns/op / +3.9% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 642.600 ns/op -16.9 ns/op / -2.6% (better)
Windows MSVC 386 BenchmarkChannelBuffered 43.860 ns/op +0.69 ns/op / +1.6% (worse)
Windows MSVC 386 BenchmarkChannelHandoff 636 ns/op +3.3 ns/op / +0.5% (worse)
Windows MSVC 386 BenchmarkDefer 14.580 ns/op -1.54 ns/op / -9.6% (better)
Windows MSVC 386 BenchmarkDirectCall 1.550 ns/op +0.001 ns/op / +0.1% (worse)
Windows MSVC 386 BenchmarkGlobalRead 1.861 ns/op -0.005 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkGlobalWrite 7.789 ns/op +0.016 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkGoroutine 112107 ns/op +1121 ns/op / +1.0% (worse)
Windows MSVC 386 BenchmarkInterfaceCall 7.445 ns/op -0.001 ns/op / -0.01343% (better)
Windows MSVC 386 BenchmarkRuntimeGetG 2.480 ns/op +0.311 ns/op / +14.3% (worse)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.120 ns/op +0.03 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 577.700 ns/op -11.9 ns/op / -2.0% (better)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 535.300 ns/op -9.3 ns/op / -1.7% (better)
Windows MSVC ARM64 BenchmarkChannelBuffered 46.020 ns/op -0.93 ns/op / -2.0% (better)
Windows MSVC ARM64 BenchmarkChannelHandoff 1325 ns/op +93 ns/op / +7.5% (worse)
Windows MSVC ARM64 BenchmarkDefer 11.750 ns/op -0.21 ns/op / -1.8% (better)
Windows MSVC ARM64 BenchmarkDirectCall 0.590 ns/op -0.0001 ns/op / -0.01696% (better)
Windows MSVC ARM64 BenchmarkGlobalRead 0.663 ns/op +0.0003 ns/op / +0.04524% (worse)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.753 ns/op -0.005 ns/op / -0.1% (better)
Windows MSVC ARM64 BenchmarkGoroutine 56201 ns/op -721 ns/op / -1.3% (better)
Windows MSVC ARM64 BenchmarkInterfaceCall 3.862 ns/op -0.007 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.805 ns/op +0.003 ns/op / +0.2% (worse)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 916.300 ns/op +18 ns/op / +2.0% (worse)
Linux AfterFuncZeroDelivery/LLGo 40042 ns/op +1517 ns/op / +3.9% (worse)
Linux CreateStop/Go 302.900 ns/op +11 ns/op / +3.8% (worse)
Linux CreateStop/LLGo 1409 ns/op -103 ns/op / -6.8% (better)
Linux RearmStopped/Go 116.700 ns/op -0.9 ns/op / -0.8% (better)
Linux RearmStopped/LLGo 966.500 ns/op +47.4 ns/op / +5.2% (worse)
Linux ResetActive/Go 68.830 ns/op +0.2 ns/op / +0.3% (worse)
Linux ResetActive/LLGo 760.200 ns/op +5.5 ns/op / +0.7% (worse)
Linux ResetHeap1024/Go 67.400 ns/op +0.27 ns/op / +0.4% (worse)
Linux ResetHeap1024/LLGo 135.300 ns/op +3.1 ns/op / +2.3% (worse)
macOS AfterFuncZeroDelivery/Go 480.700 ns/op -63.5 ns/op / -11.7% (better)
macOS AfterFuncZeroDelivery/LLGo 70554 ns/op +29358 ns/op / +71.3% (worse)
macOS CreateStop/Go 159.200 ns/op -112.7 ns/op / -41.4% (better)
macOS CreateStop/LLGo 668.500 ns/op +188.9 ns/op / +39.4% (worse)
macOS RearmStopped/Go 63.470 ns/op -16.37 ns/op / -20.5% (better)
macOS RearmStopped/LLGo 217.300 ns/op -8.4 ns/op / -3.7% (better)
macOS ResetActive/Go 42.710 ns/op -18.37 ns/op / -30.1% (better)
macOS ResetActive/LLGo 145.500 ns/op +16.8 ns/op / +13.1% (worse)
macOS ResetHeap1024/Go 49.480 ns/op -1.96 ns/op / -3.8% (better)
macOS ResetHeap1024/LLGo 73.660 ns/op +6.36 ns/op / +9.5% (worse)
Windows MinGW AfterFuncZeroDelivery/Go 656.300 ns/op +2 ns/op / +0.3% (worse)
Windows MinGW AfterFuncZeroDelivery/LLGo 154520 ns/op +592 ns/op / +0.4% (worse)
Windows MinGW CreateStop/Go 186.100 ns/op +4.1 ns/op / +2.3% (worse)
Windows MinGW CreateStop/LLGo 631.100 ns/op -303.7 ns/op / -32.5% (better)
Windows MinGW RearmStopped/Go 68.080 ns/op +0.04 ns/op / +0.1% (worse)
Windows MinGW RearmStopped/LLGo 243 ns/op +22.9 ns/op / +10.4% (worse)
Windows MinGW ResetActive/Go 30.150 ns/op -0.03 ns/op / -0.1% (better)
Windows MinGW ResetActive/LLGo 253.700 ns/op +69.8 ns/op / +38.0% (worse)
Windows MinGW ResetHeap1024/Go 30.430 ns/op +0.15 ns/op / +0.5% (worse)
Windows MinGW ResetHeap1024/LLGo 93.170 ns/op -0.03 ns/op / -0.03219% (better)
Windows MinGW 386 AfterFuncZeroDelivery/Go 967 ns/op +5.3 ns/op / +0.6% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 205773 ns/op +1855 ns/op / +0.9% (worse)
Windows MinGW 386 CreateStop/Go 195.700 ns/op +3.9 ns/op / +2.0% (worse)
Windows MinGW 386 CreateStop/LLGo 427.400 ns/op -45.8 ns/op / -9.7% (better)
Windows MinGW 386 RearmStopped/Go 63.650 ns/op -0.17 ns/op / -0.3% (better)
Windows MinGW 386 RearmStopped/LLGo 361 ns/op -35.3 ns/op / -8.9% (better)
Windows MinGW 386 ResetActive/Go 39.440 ns/op +0.26 ns/op / +0.7% (worse)
Windows MinGW 386 ResetActive/LLGo 985.300 ns/op +15.6 ns/op / +1.6% (worse)
Windows MinGW 386 ResetHeap1024/Go 39.590 ns/op -0.15 ns/op / -0.4% (better)
Windows MinGW 386 ResetHeap1024/LLGo 147.600 ns/op -0.1 ns/op / -0.1% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 660.100 ns/op -8.2 ns/op / -1.2% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 153097 ns/op +1836 ns/op / +1.2% (worse)
Windows MinGW ARM64 CreateStop/Go 197.500 ns/op -0.5 ns/op / -0.3% (better)
Windows MinGW ARM64 CreateStop/LLGo 379.800 ns/op +37.6 ns/op / +11.0% (worse)
Windows MinGW ARM64 RearmStopped/Go 70.590 ns/op +0.02 ns/op / +0.02834% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 161.600 ns/op -0.9 ns/op / -0.6% (better)
Windows MinGW ARM64 ResetActive/Go 31.160 ns/op +0.11 ns/op / +0.4% (worse)
Windows MinGW ARM64 ResetActive/LLGo 98.390 ns/op -4.61 ns/op / -4.5% (better)
Windows MinGW ARM64 ResetHeap1024/Go 31.140 ns/op +0.02 ns/op / +0.1% (worse)
Windows MinGW ARM64 ResetHeap1024/LLGo 92.310 ns/op +0.34 ns/op / +0.4% (worse)
Windows MSVC AfterFuncZeroDelivery/Go 372.900 ns/op -6.4 ns/op / -1.7% (better)
Windows MSVC AfterFuncZeroDelivery/LLGo 108523 ns/op +579 ns/op / +0.5% (worse)
Windows MSVC CreateStop/Go 90.880 ns/op +0.06 ns/op / +0.1% (worse)
Windows MSVC CreateStop/LLGo 323 ns/op -12.7 ns/op / -3.8% (better)
Windows MSVC RearmStopped/Go 24.470 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC RearmStopped/LLGo 189 ns/op +9.5 ns/op / +5.3% (worse)
Windows MSVC ResetActive/Go 14.800 ns/op +0.02 ns/op / +0.1% (worse)
Windows MSVC ResetActive/LLGo 131.500 ns/op +7 ns/op / +5.6% (worse)
Windows MSVC ResetHeap1024/Go 14.840 ns/op -0.06 ns/op / -0.4% (better)
Windows MSVC ResetHeap1024/LLGo 85.920 ns/op -0.97 ns/op / -1.1% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 963.300 ns/op -11.3 ns/op / -1.2% (better)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 204832 ns/op +1284 ns/op / +0.6% (worse)
Windows MSVC 386 CreateStop/Go 193.100 ns/op +1.1 ns/op / +0.6% (worse)
Windows MSVC 386 CreateStop/LLGo 433.600 ns/op +5.1 ns/op / +1.2% (worse)
Windows MSVC 386 RearmStopped/Go 63.410 ns/op +0.16 ns/op / +0.3% (worse)
Windows MSVC 386 RearmStopped/LLGo 557.800 ns/op +19 ns/op / +3.5% (worse)
Windows MSVC 386 ResetActive/Go 39.030 ns/op -0.08 ns/op / -0.2% (better)
Windows MSVC 386 ResetActive/LLGo 960.300 ns/op -19.7 ns/op / -2.0% (better)
Windows MSVC 386 ResetHeap1024/Go 39.380 ns/op -0.06 ns/op / -0.2% (better)
Windows MSVC 386 ResetHeap1024/LLGo 141.800 ns/op -0.7 ns/op / -0.5% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 662 ns/op -3.1 ns/op / -0.5% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 139226 ns/op +3668 ns/op / +2.7% (worse)
Windows MSVC ARM64 CreateStop/Go 199.900 ns/op -1.9 ns/op / -0.9% (better)
Windows MSVC ARM64 CreateStop/LLGo 281 ns/op +2.7 ns/op / +1.0% (worse)
Windows MSVC ARM64 RearmStopped/Go 70.540 ns/op -0.06 ns/op / -0.1% (better)
Windows MSVC ARM64 RearmStopped/LLGo 169.500 ns/op +2.9 ns/op / +1.7% (worse)
Windows MSVC ARM64 ResetActive/Go 31.060 ns/op +0.1 ns/op / +0.3% (worse)
Windows MSVC ARM64 ResetActive/LLGo 93.820 ns/op +3.02 ns/op / +3.3% (worse)
Windows MSVC ARM64 ResetHeap1024/Go 31.070 ns/op -0.01 ns/op / -0.03218% (better)
Windows MSVC ARM64 ResetHeap1024/LLGo 93.250 ns/op -0.7 ns/op / -0.7% (better)

Compared with 717fbe4429cb measured in the same runner job.

@go-wyvern go-wyvern changed the title runtime: retain channel waiter condition variables runtime: reuse channel waiters and benchmark goroutine dispatch Nov 12, 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