Repository navigation
Draft
Conversation
…-free, and an HPET boot is no run The scoreboard of 2026-11-11 (#1217) and its review found four ways a table could say what the runs did not. pingpong.futex.cross_core read 250 to 257 ns in three of the T14's four boots and 4.6 us in the fourth: a side that finds its word already changed never sleeps, and across two cores a whole round can pass that way. Each side now keeps what its wake found (FUTEX_WAKE's and SYS_FUTEX_WAKE's count). The cross-core row is the rounds in which both wakes found their waiter queued; the others are `<row>.unparked`, and a run in which none parked is `unmeasured`. On one CPU no round passes without both sides leaving it, so that row keeps every round. Both say the parks a kept round had, of two (`parks_per_round`). The split is osbench_rules::parked, tested on the host. Linux pads an ordinary thread's sleep by its timer slack and ToyOS pads none. osbench-compare now judges a wait at Linux's `.slack1ns` row, against ToyOS's row of the unsuffixed name, and gives the unsuffixed row no verdict. Three of the AMD bench's five Linux runs kept time on the HPET, so the median of five was an HPET run's. osbench on Linux now exits 3 before any group where the clocksource is not the one its vDSO reads, and the compare holds the clocksource among a system's setup, refusing runs that differ. PER_RUN, which stated it run by run, goes. Rows that had no verdict get one where a direction exists: ps, ns/MiB, kops/s and chunks/s are times and rates, and `fair.<grouping>.off_fair` is how far the worst-served job's share lay from its max-min fair share (osbench_rules::fair), which the six share rows could not say. `osbench all` on Linux starts `nvme` through `sudo -n` where that asks no password, so the raw namespace is read in the run the compare reads. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
The message carried a run of spaces from a broken line, and the README's compare item one line past its width. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… parks Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Test and tooling code only:
tests/guest/osbenchand its compare. No product code and no manual page: no requirement or architectural decision changes.The scoreboard of 2026-11-11 (#1217) and its review found places where a table could say what the runs did not. This PR fixes the ones in the tooling. A stacked draft (
benchrows-launch) addsproc.launch.first_outputand records the rows still owed.What changes
pingpong.futex.cross_coreread 250 to 257 ns in three of the T14's four boots and 4.6 µs in the fourth. A side that finds its word already changed never sleeps, and across two cores a whole round can pass that way. Each side now keeps what its wake found: the count thatFUTEX_WAKEandSYS_FUTEX_WAKEboth return. The cross-core row keeps the rounds in which both wakes found their waiter queued in the kernel. The other rounds arepingpong.futex.cross_core.unparked, and a run in which none parked reports the rowunmeasured. Both futex rows say how many such wakes a kept round had, of two (parks_per_round). The split isosbench_rules::parked, tested on the host.osbench-comparenow judges a wait at Linux's.slack1nsrow, against ToyOS's row of the unsuffixed name. The unsuffixed row gets no verdict, and its line says where it is judged.osbenchexits 3 before any group when the clocksource is not the one its vDSO reads (tscon x86-64). The compare holdsclocksourceamong a system's setup and refuses runs that differ.PER_RUNis deleted: it stated the clocksource run by run and never refused a run.ps,ns/MiB,kops/sandchunks/sare times and rates. The sixfair.*share rows still get no verdict, since a share is neither better higher nor better lower. The newfair.<grouping>.off_fairis how far the worst-served job's share lay from its max-min fair share at equal weights (osbench_rules::fair), lower better.nvme.read.*in the run the compare reads.osbench allstartsnvmethroughsudo -nwhere that asks no password. Otherwise it startsnvmeas itself, and the rows say they were refused, as before.Decisions a reviewer should weigh
parks_per_roundand is otherwise unchanged.SYS_FUTEX_WAITreturns 0 both when it was woken and when it never blocked, so the wait's own return value cannot tell.off_fair's entitlement is max-min fairness between the grouping's units: threads undershared, the three workloads underapartandsession. Under a per-workload grouping that did not take effect (1xcgroup) the row isunmeasured. Shares are counted in chunks, and starting a helper costs chunks, so the row has a floor above zero on any system. On the scoreboard's T14 figures it would have read about 8 for ToyOS'sapartand 15 for Linux's. These figures were computed by hand from the committed share rows, not measured.Checks
Status: draft. The host suite and the metal boot are pending; nothing below is claimed beyond what ran.
osbench_capability_groups_exit_0(guest runner, x86-64 q35) ate9f6d3c8b: green, run 43022944399. It runsidentity,fair(with the newoff_fairrows) andenergyon the benchcase image, each to exit 0. The later commit0876d634echanges only a message in code compiled for Linux and the README, so the result still applies.osbench-rulesandosbench-compareat54cfdfd2a(this branch plus the stacked commit, which touches neither crate), built, run and restored: a round counted parked when either wake found a waiter; the ponger's parks not counted; max-min without the demand cap; the padded row judged;clocksourceout ofSETUP. Each built and turned its test red (exit 101). Unmutated: 35 and 18 tests pass.cargo +nightly-2026-07-22 build -p osbench --target x86_64-unknown-linux-musl --profile toyosat0876d634e: exit 0.cargo run -- --ci host: pending, at the stacked head54cfdfd2a, which contains this branch whole. An earlier run ate9f6d3c8bended when this host's disk filled and is not counted.Not verified
x86_64-unknown-linux-musl(built) andaarch64-unknown-linux-musl(clippy). No Linux machine was available to this branch. The clocksource refusal, thesudo -nstart and the Linux futex counts are first exercised by the bench runs requested for the stacked branch.pingpong.*, because the suite'sschedgroup is metal-only. The new futex fields are first read on the staged boot.🤖 Generated with Claude Code