From ba48dd93c97a286da3b3af42c4e69ef1c0809f10 Mon Sep 17 00:00:00 2001 From: Vsevolod Strukchinsky Date: Thu, 12 Nov 2026 20:10:14 +0500 Subject: [PATCH 1/2] Test on Linux arm64 instead of macOS The macOS runners kept pull requests waiting in the queue, and nothing in the module depends on the operating system. What the macOS jobs gave was arm64: the reads that take no lock depend on the order in which memory is written, which arm64 keeps less of than x86-64, and the compiler inlines differently there. GitHub's Linux arm64 runners, free for public repositories, keep that. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7988747..fc305b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,7 +39,10 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, macos-latest] + # x86-64 and arm64: the reads that take no lock depend on the order in + # which memory is written, which arm64 keeps less of, and the compiler + # inlines differently on each. + os: [ubuntu-latest, ubuntu-24.04-arm] # The oldest release that go.mod allows, and the newest. go: ["1.26.x", stable] steps: From 4609c61a63298aa0358e0c7018f99c88a3432bb7 Mon Sep 17 00:00:00 2001 From: Vsevolod Strukchinsky Date: Thu, 12 Nov 2026 20:11:58 +0500 Subject: [PATCH 2/2] Give the tests ten minutes in CI Under the race detector and with coverage, s3fifo takes about four minutes of the five on a typical runner, and on a slow one, 1.7 times as slow across every package, it ran out of time in pull request 6. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc305b7..3e7ef4a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,7 +54,10 @@ jobs: go-version: ${{ matrix.go }} cache-dependency-path: bench/go.sum - name: Test - run: go test -race -shuffle=on -timeout=5m -coverprofile=coverage.out ./... + # With the race detector and coverage, the slowest package takes about + # four minutes on a typical runner, and a slow runner takes 1.7 times + # as long. + run: go test -race -shuffle=on -timeout=10m -coverprofile=coverage.out ./... - name: Coverage run: go tool cover -func=coverage.out | tail -n 1 - name: Test the benchmarks