open-standards/proof/proof-rs/crates/proof-cli
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 2f170ca75f
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 7s
standards workspaces build + test / proof-rs (proof/conformance/v1/joulespec.toml, proof-conformance, proof/proof-rs, proof-rs, linux, true) (pull_request) Successful in 1m25s
energy meters on real hardware / sink decode table · per-task energy and the GPU rail on macOS (pull_request) Successful in 2m14s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m26s
standards workspaces build + test / joulecontract-rs (joulecontract/joulecontract-rs, joulecontract-rs, linux-arm64, true) (pull_request) Successful in 57s
energy meters on real hardware / RAPL and NVML on jetson-hub (pull_request) Successful in 39s
energy meters on real hardware / sink decode table · RAPL on jetson-hub (NVML surveyed) (pull_request) Successful in 2m32s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 7m12s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 15m6s
proof-cascade: RAPL reads each package's energy-status MSR where powercap lists none
Some kernels ship without the powercap RAPL driver (Ubuntu without
linux-modules-extra, as on some bare-metal servers), so /sys/class/powercap
lists no package while the counters are there, and the meter's RAPL source
was Unavailable on hosts that can measure. Where powercap lists no package,
the meter now reads the same counters directly: each package's
MSR_PKG_ENERGY_STATUS (0x611, Intel family 6; 0xC001029B, AMD Zen and Hygon)
through /dev/cpu/<first cpu of the package>/msr, the 32-bit count converted
at the package's own unit (bits 12:8 of the power-unit MSR), so it wraps at
2^32 counts in microjoules and resolves one count (61 uJ at 2^-14 J). A
power-unit MSR that reads zero is no counter (KVM guests read zeros). Each
MSR package is a package zone to the rest of the meter, so the liveness
rule, the busy-against-idle bracket and the wrap arithmetic are unchanged.
Powercap is still preferred; a host that lists only psys and reads no MSR
is still Absent. The same reading as jouleclaw-energy's, ported here so the
standard keeps no dependency on another.

The status text says why an MSR host reads nothing without privilege
(proof --measure: the msr module and CAP_SYS_RAWIO), and the RAPL hardware
test's oracle reads the MSRs with its own reader where powercap lists no
package, so it judges those hosts too.

On two bare-metal servers with no powercap zone, as root: a Xeon E-2278G,
RAPL Live, the all-core burn metered 117.2 J over its calls inside the
oracle's 121.8 J package-only bracket, proof --measure 64.7 mJ a proof,
HwShunt; two Xeon Silver 4215R sockets, both live, 141.3 J inside 192.9 J,
69.0 mJ a proof. As an unprivileged user the status is Unavailable on both,
agreeing with the oracle, and proof --measure gives the reason.

Tests: fake device files (a register's bytes at its offset) cover a
two-socket host read on each package's first CPU, the 32-bit wrap, AMD's
registers, a zero unit, an unknown CPU, a missing or vanished device,
powercap preferred (and a listed but unreadable package left to powercap),
and the production probe composition over MSR packages. proof-cascade and
proof-cli tests pass on Linux and macOS; clippy is clean with -D warnings
on Linux (proof-cascade, proof-cli) and macOS (proof-cascade,
proof-solvers).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-04 20:59:49 -05:00
..
src proof-cascade: RAPL reads each package's energy-status MSR where powercap lists none 2026-11-04 20:59:49 -05:00
tests proof-solvers: grade wall time × the default 15 W Estimator, not ModelBased 2026-10-11 10:11:54 -04:00
Cargo.toml Cargo: no minimum-supported-version floor, because the policy is latest stable 2026-11-03 17:42:20 -05:00