v: pin compiler to V 0.5.1 (from source); keep vanilla_io_uring but skip it in CI#9466
Conversation
The V image cloned `--depth 1` from master, so every rebuild picked up a different compiler and results drifted with whatever master happened to be. Pin to a specific commit (shallow-fetched by SHA, so it stays fast) so V builds are reproducible; bump the SHA to move the toolchain deliberately. Pinned: vlang/v@065a450b8 (V 0.5.1 065a450, 2026-06-15). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
waghanza
left a comment
There was a problem hiding this comment.
So you'll maintain v @enghitalo ? I mean you'll create a PR on each update to make sure version expsed (in confi.yaml) in the same that the sha here ?
PS : Do not merge, I prefer to do it, since I have results update running on my machine
|
I'm going to leave this version here as a permanent fix (instead of main branch) because V is undergoing a major refactoring, although it's quite stable. Whenever there's a change in Vanilla or V that requires updates, I'll update it here. |
Pin to the tagged 0.5.1 release binary rather than building a master commit from source. Post-0.5.1 master carries a large codegen regression — single- element array push (`arr << x`) is 4-7x slower (vlang/v#27468), which slows every V program including the vanilla benchmarks — so the stable release is both faster and byte-for-byte reproducible. Uses the prebuilt zip, so no source build/`make" and no vc-bootstrap mismatch.
Pin V to the 0.5.1 release tag and build from source. Plain `make` can't build an old tag — its latest_vc step `git pull`s the newest vlang/vc bootstrap, which no longer matches 0.5.1's vlib (`unknown ident \`native\``). So pin vc to the commit cut for 0.5.1 (vlang/vc f461dfeb = "[v:master] 0c3183c - V 0.5.1") and run make's own bootstrap recipe (cc -> v1 -> v2 -> v). Pinned by tag, not moving master, because post-0.5.1 master has a codegen regression (single-element array push 4-7x slower, vlang/v#27468).
|
The CI failure was Excluded |
io_uring can't be exercised in this CI: io_uring_setup/io_uring_enter are blocked by Docker's default seccomp profile on GitHub Actions runners, so the server builds but never becomes HTTP-ready. Rather than carry a framework that can't pass the smoke-test, drop the io_uring variant here; vanilla_epoll stays. The io_uring engine continues to be benchmarked in HttpArena, where the harness permits io_uring. See the-benchmarker#9467 for the root cause and a fair way to support io_uring in CI (a uniform custom seccomp profile) if it's wanted later.
9ccc1e9 to
6c56c36
Compare
|
Update: instead of the per-framework CI skip, I just removed the |
|
Maybe @enghitalo , you can keep the code base ;-) and skip it on matrix creation in here Line 25 in dcbf2bf so as you can remove this skipe when io_uring will be enabled on docker |
done |
Per @waghanza's suggestion: instead of removing the vanilla_io_uring framework, keep the codebase and skip it during matrix creation. io_uring_setup/ io_uring_enter are blocked by Docker's default seccomp profile on the GitHub Actions runners, so the server builds but never becomes HTTP-ready. The skip is a single line in .tasks/ci.rake (next if language == 'v' && framework == 'vanilla_io_uring') — remove it once io_uring is allowed under the CI sandbox. The io_uring engine continues to be benchmarked in HttpArena, whose harness permits io_uring. See the-benchmarker#9467.
|
I mean you can re-add vanilla_io_uring source code 😛 Maybe it could be shown in results (since the results are made on an other type of workstation that github actions) |
But does it run in the same Docker container? |
|
Nnot at all. It runs on latest stable docker version on latest fedora (44 as for now) @enghitalo I'm not aware of all specs of githib actions docker info nor system below, but I'm quite sure that it is not a fedora with latest linux kernel |
|
btw, if it fails, it will not be included on results, so no inconvenients of having it here |
|
Ok. Let's try |
Two changes to the
vbenchmark for reproducible, passing CI.1. Pin the V compiler to V 0.5.1, built from source
The Dockerfile previously cloned moving
master. Pin it so builds are reproducible:0.5.1tag (not a master commit) because post-0.5.1 master carries a large codegen regression — single-element array push (arr << x) is 4-7× slower (vlang/v#27468; it also explains the x.json2 regression #27467), which slows every V program including these benchmarks.makecan't build an old tag: itslatest_vcstepgit pulls the newestvlang/vcbootstrap, which no longer matches 0.5.1's vlib (fails withunknown ident \native`). So the build pinsvcto the commit cut for 0.5.1 (vlang/vc@f461dfeb= "[v:master] 0c3183c - V 0.5.1") and runs make's own bootstrap recipe (cc -> v1 -> v2 -> v`).Bump the tag (and the matching
vccommit) to update the compiler.2. Keep
vanilla_io_uring, but skip it in CI (don't delete it)Per @waghanza's suggestion — keep the codebase and skip it during matrix creation rather than removing the framework.
io_uring can't be exercised in this CI:
io_uring_setup/io_uring_enterare blocked by Docker's default seccomp profile on the GitHub Actions runners, so the server builds but never becomes HTTP-ready (it can't pass the smoke test). So the framework is kept in the tree and skipped with a single line in.tasks/ci.rake:Remove that line once io_uring is allowed under the CI sandbox (e.g. a uniform custom seccomp profile applied to all frameworks).
vanilla_epollis unaffected, and the io_uring engine continues to be benchmarked in HttpArena, whose harness permits io_uring. See #9467 for the root cause.