Skip to content

v0.2.2: SIGILL fix for AVX-only CPUs (go-yenc-simd v0.1.2), NEON, rapidyenc .deb dependencies - #88

Merged
go-while merged 4 commits into
mainfrom
testing
Oct 25, 2026
Merged

go-while merged 4 commits into
mainfrom
testing

Conversation

@go-while

@go-while go-while commented Oct 25, 2026 •

Copy link
Copy Markdown
Owner

For v0.2.2.

Crash fix (from go-yenc-simd v0.1.2): the purego builds of v0.0.8 to v0.2.1 crash with SIGILL when decoding on x86-64 CPUs that have AVX but not AVX2: Intel Sandy Bridge/Ivy Bridge, AMD Bulldozer/Piledriver/Steamroller and Jaguar, which are common in older NAS boxes and home servers. Those builds use GOEXPERIMENT=simd, and go-yenc-simd's AVX kernel built its constants with VPBROADCASTB, an AVX2 instruction. Checked by disassembly: v0.2.1 and v0.0.8 built from their tags have 6 and 7 of them in steps16; this branch has 0. The rapidyenc builds were hit only with -yencgo or -benchmark. AVX2 and AVX-512 CPUs were never affected.

go-yenc-simd v0.1.2: NEON on arm64: on an Apple M1 or a Neoverse N2 the decode kernel does about 5–8 GB/s on random data, a whole article with CRC 2–3.4 GB/s (figures from go-yenc-simd's README). The release notes quote no x86 speedups. The release notes' "Which file?" text no longer says ARM has no SIMD.

rapidyenc .deb: now Depends: libc6 (>= 2.34), libstdc++6. It had no dependencies, so dpkg would install it on systems where the binary can't start (Debian 11, glibc 2.31). purego stays without dependencies (static). Checked: apt install ./…rapidyenc.deb on Debian 13.

glibc 2.34, not 2.35: both rapidyenc Linux binaries (amd64, arm64) use symbols up to GLIBC_2.34 and run on AlmaLinux/Rocky/CentOS 9. The release notes and README say so; on Alpine (musl) take purego.

Distro test, 18 VMs (amd64, AVX2): AlmaLinux 9/10, Alpine 3.22–3.24, Arch, CentOS Stream 9/10, Debian 13, Gentoo, openEuler 25.03, openSUSE Leap 15.6/16.0, Rocky 9/10, Ubuntu 24.04/25.04/26.04. On each:

  • built both variants from source, the rapidyenc C library too;
  • ran go test ./... for both;
  • ran -benchmark;
  • ran the v0.2.1 release binaries;
  • on Debian/Ubuntu, installed, ran and removed both .debs.

Everything passes, except the rapidyenc release binary on Alpine (glibc-only, expected). With gcc 7 (Leap 15.6), rapidyenc builds without its AVX-512 VBMI2 kernel; the README mentions it.

Test fix: TestIdleTimeoutKeepsSlowTransfer failed in 16 of 20 runs on a 1-CPU container at host load 45 (300 ms idle timeout, a line every 100 ms). It now uses a 1 s timeout; 0 of 20 fail.

Tests: go test ./... with and without -tags rapidyenc (GOEXPERIMENT=simd), go vet, go mod verify; built both .debs with DEB=1 scripts/build-release.sh.

🤖 Generated with Claude Code

go-while and others added 4 commits October 24, 2026 23:57
…1-CPU VM)

With 300 ms idle and a line every 100 ms, one sleep overrunning by 200 ms
failed the test: 16 of 20 runs on an Arch container with one CPU at host
load 45, 0 of 20 at load 25. shortIdle now takes the timeout; the silent
command test keeps 300 ms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
go-yenc-simd v0.1.2 decodes with NEON on arm64 (about 5-8 GB/s on an Apple
M1 or a Neoverse N2, from its README), x86 unchanged (re-measured on the
EPYC: Go/C ratio 1.42, was 1.43). The release notes no longer say ARM has no
SIMD, and the rapidyenc Linux files need glibc 2.34 (not 2.35: both binaries
reference symbols up to GLIBC_2.34 and run on AlmaLinux/Rocky 9).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tested distros

The rapidyenc .deb declared no dependencies, so dpkg would install it where
the binary can't start (Debian 11, glibc 2.31). purego stays without Depends
(static). README: on Alpine take purego, the rapidyenc Linux files need glibc
2.34 and libstdc++; the C variant builds on musl from source; the distros it
was built and tested on (18 VMs); gcc 7 drops rapidyenc's VBMI2 kernel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… add whole-article speed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@go-while go-while changed the title v0.2.2: go-yenc-simd v0.1.2 (NEON), rapidyenc .deb dependencies, glibc 2.34, distro test v0.2.2: SIGILL fix for AVX-only CPUs (go-yenc-simd v0.1.2), NEON, rapidyenc .deb dependencies Oct 25, 2026
@go-while
go-while merged commit 95f40ce into main Oct 25, 2026
12 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