Skip to content

v: pin compiler to V 0.5.1 (from source); keep vanilla_io_uring but skip it in CI#9466

Merged
waghanza merged 5 commits into
the-benchmarker:developfrom
enghitalo:v/pin-compiler-065a450
Jun 16, 2026
Merged

v: pin compiler to V 0.5.1 (from source); keep vanilla_io_uring but skip it in CI#9466
waghanza merged 5 commits into
the-benchmarker:developfrom
enghitalo:v/pin-compiler-065a450

Conversation

@enghitalo

@enghitalo enghitalo commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Two changes to the v benchmark 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:

  • Pinned to the 0.5.1 tag (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.
  • Plain make can't build an old tag: its latest_vc step git pulls the newest vlang/vc bootstrap, which no longer matches 0.5.1's vlib (fails with unknown ident \native`). So the build pins vc to 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 vc commit) 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_enter are 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:

next if language == 'v' && framework == 'vanilla_io_uring'

Remove that line once io_uring is allowed under the CI sandbox (e.g. a uniform custom seccomp profile applied to all frameworks). vanilla_epoll is unaffected, and the io_uring engine continues to be benchmarked in HttpArena, whose harness permits io_uring. See #9467 for the root cause.

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>
@enghitalo enghitalo requested a review from waghanza as a code owner June 15, 2026 14:49

@waghanza waghanza left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@enghitalo

Copy link
Copy Markdown
Contributor Author

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.
@enghitalo enghitalo changed the title v: pin the compiler to a fixed commit for reproducible builds v: pin the compiler to the 0.5.1 release for reproducible builds Jun 15, 2026
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).
@enghitalo enghitalo changed the title v: pin the compiler to the 0.5.1 release for reproducible builds v: pin the compiler to V 0.5.1, built from source (pinned vc bootstrap) Jun 15, 2026
@enghitalo

Copy link
Copy Markdown
Contributor Author

The CI failure was vanilla_io_uring only — it builds fine but io_uring_setup/io_uring_enter are blocked by Docker's default seccomp on the GHA runners, so it never becomes HTTP-ready. vanilla_epoll, pico, veb and fasthttp all pass with this V pin.

Excluded vanilla_io_uring from the CI matrix via a new generic framework.skip_ci flag (it still runs in the real benchmark). Root cause + a fair way to re-enable io_uring in CI (one custom seccomp profile applied uniformly to all frameworks) are tracked in #9467.

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.
@enghitalo enghitalo force-pushed the v/pin-compiler-065a450 branch from 9ccc1e9 to 6c56c36 Compare June 16, 2026 00:36
@enghitalo

Copy link
Copy Markdown
Contributor Author

Update: instead of the per-framework CI skip, I just removed the vanilla_io_uring framework (force-pushed). Carrying a framework that can't pass the CI smoke-test isn't worth it; vanilla_epoll stays and io_uring keeps being benchmarked in HttpArena. #9467 updated accordingly (root cause + the fair way to add io_uring here later if wanted).

@enghitalo enghitalo marked this pull request as draft June 16, 2026 07:32
@waghanza

Copy link
Copy Markdown
Collaborator

Maybe @enghitalo , you can keep the code base ;-) and skip it on matrix creation in here

next unless File.exist?(file)

so as you can remove this skipe when io_uring will be enabled on docker

@enghitalo

enghitalo commented Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

Maybe @enghitalo , you can keep the code base ;-) and skip it on matrix creation in here

next unless File.exist?(file)

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.
@enghitalo enghitalo changed the title v: pin the compiler to V 0.5.1, built from source (pinned vc bootstrap) v: pin compiler to V 0.5.1 (from source); keep vanilla_io_uring but skip it in CI Jun 16, 2026
@enghitalo enghitalo marked this pull request as ready for review June 16, 2026 13:48
@waghanza

Copy link
Copy Markdown
Collaborator

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)

@enghitalo

Copy link
Copy Markdown
Contributor Author

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?

@waghanza

Copy link
Copy Markdown
Collaborator

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

@waghanza

Copy link
Copy Markdown
Collaborator

btw, if it fails, it will not be included on results, so no inconvenients of having it here

@enghitalo

Copy link
Copy Markdown
Contributor Author

Ok. Let's try

@waghanza waghanza merged commit fa0ad07 into the-benchmarker:develop Jun 16, 2026
5 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