The EnergyCounter trait + Provenance taxonomy (HwShunt | ModelBased | Estimator) is one half of JouleClaw's energy honesty story. The other half is *actual measured numbers* from real silicon under named workloads — so an operator can compute the energy cost of a cascade walk before issuing it. This commit ships the second half *honestly*. The workspace's dev machine cannot produce HwShunt readings for any non-x86 CPU silicon or any accelerator; filling fixture files with numbers from blog posts or vendor whitepapers would corrupt the same provenance contract the trait exists to enforce. So the fixtures ship EMPTY, with the schema and counter binding stated, and `workload_not_run` flagged true for every workload until someone with the hardware fills them. Six per-silicon-lineage stubs: conformance/PROTOCOL.md — how to measure conformance/vendors/template.json — canonical shape conformance/vendors/intel-cpu-rapl.json — Intel CPU / RAPL conformance/vendors/amd-cpu-rapl.json — AMD CPU / RAPL conformance/vendors/nvidia-gpu-nvml.json — NVIDIA GPU / NVML conformance/vendors/amd-gpu-rocm.json — AMD GPU / ROCm conformance/vendors/apple-silicon-ioreport.json — Apple Silicon conformance/vendors/huawei-ascend-npu.json — Huawei Ascend Each has the counter impl + provenance + resolution + min sampling window declared (those are properties of the counter trait, known without running a workload), and every workload entry set to `workload_not_run: true` with the numeric fields `null`. Workload taxonomy (named so cross-silicon comparison is meaningful, not cherry-picked): idle_1s, tier_L0_lookup, tier_L1_local_index, tier_L3_model_7b_token, tier_L3_model_70b_token. The whole point is to make expensive-tier-token energy visible alongside the floor. Cloud TPU / Intel Gaudi / Cambricon / Qualcomm Cloud AI are deliberately NOT stubbed yet — a stub commits to a counter trait impl, and the workspace doesn't ship one for those silicons today. Add the stub when the impl lands. Verifier: `cargo test -p jouleclaw-energy --test vendor_energy_conformance`. Asserts schema well-formedness across every fixture today. Once fixtures fill in, the same verifier also checks the workload monotonicity ordering — so an operator who tries to claim L3 model inference costs less energy than an L0 lookup gets rejected on PR. A third party with the hardware fills a fixture, signs it via Ed25519, and PRs it back. Anyone holding the fixture-author's public key can verify the claim was actually made by that operator. Future work (NOT in this commit): a jouleclaw-vendor-energy-attest binary that emits a wire-form attestation in the same shape as JCR-1 receipts. Co-Authored-By: Claude Opus 4.7 <[email protected]>
29 lines
1.1 KiB
JSON
29 lines
1.1 KiB
JSON
{
|
|
"spec": "JouleClaw vendor-energy v1",
|
|
"schema_id": "vendor-energy/1",
|
|
"hardware": {
|
|
"vendor": "AMD",
|
|
"model": "(not yet measured — e.g. \"EPYC 9755\" / \"Ryzen 9 9950X\")",
|
|
"tdp_w": null,
|
|
"host_os": null
|
|
},
|
|
"counter": {
|
|
"impl": "RaplCounter",
|
|
"provenance": "HwShunt",
|
|
"resolution_uj": 15625,
|
|
"min_window_ns": 10000000
|
|
},
|
|
"method": null,
|
|
"workloads": {
|
|
"idle_1s": {"workload_not_run": true, "joules_uj_total": null, "n_samples": null, "stddev_uj": null},
|
|
"tier_L0_lookup": {"workload_not_run": true, "joules_uj_total": null, "n_samples": null, "stddev_uj": null},
|
|
"tier_L1_local_index":{"workload_not_run": true, "joules_uj_total": null, "n_samples": null, "stddev_uj": null},
|
|
"tier_L3_model_7b_token": {"workload_not_run": true, "joules_uj_per_unit": null, "n_samples": null, "stddev_uj": null},
|
|
"tier_L3_model_70b_token": {"workload_not_run": true, "joules_uj_per_unit": null, "n_samples": null, "stddev_uj": null}
|
|
},
|
|
"date": null,
|
|
"attestation": {
|
|
"signed_by": null,
|
|
"attestation_url": null
|
|
}
|
|
}
|