OpenDevicePartnership / OpenDevicePartnership/odp-platform-common

patina_boot Measurement Harness

Open
#108 1 comment 0 reactions 1 assignee View on GitHub

@kat-perez is already working on this.

Since Jun 26, 2026.

epic
Dominant language
Rust
Stars
1
Forks
5
Avg merge
3d 4h
Merged PRs (30d)
9

Description

Summary

Stand up a reproducible performance measurement pipeline for patina_boot that runs without requiring any physical Surface (or other vendor) hardware. The harness has two layers: (1) cargo bench microbenchmarks for individual primitives, and (2) QEMU + OVMF end-to-end boot timing for full BDS-phase measurement. Both layers run in CI on every PR.

Motivation

The first weeks of patina_boot development have shown that measuring performance directly on production hardware (Surface SKUs) couples performance work to platform-integration debugging. Every Patina-side change has triggered cascading platform-specific issues — missing primitives, console-init gaps, capsule-processing assumptions — that take days to surface and resolve. This makes "measure perf" effectively mean "debug platform integration for a week, then measure." Numbers gathered this way are noisy, not reproducible by external partners, and don't isolate the contribution of patina_boot itself from the platform's accumulated EDK2 assumptions.

The measurement harness fixes this by decoupling performance work from platform-integration work. With a microbenchmark + QEMU pipeline in place:

  • Every patina_boot PR can have its perf impact measured automatically (regression catches happen at the PR level, not after a
    platform-integration cycle)
  • Numbers we publish to OEMs are reproducible on commodity hardware (anyone with a dev laptop can clone, run, and verify)
  • Performance becomes a first-class concern with continuous visibility, not a one-off measurement at the end of integration

This unblocks the broader BMMI deliverables — every comparison number cited in the OEM whitepaper, every per-primitive regression check, every "Patina is X% faster" claim flows through this harness.

Deliverables

  1. Microbenchmark harness in patina_boot/benches/ using criterion + mockall. Covers all major primitives (BootOrchestrator::execute, helpers::connect_all, helpers::expand_device_path, etc.) with synthetic inputs sized parametrically.
  2. QEMU + OVMF integration test pipeline that boots a minimal patina_boot-driven binary in qemu-system-x86_64, captures FPDT-style timing for the BDS phase, and produces millisecond-resolution numbers.
  3. CI integration for both layers: every PR runs the bench suite, regressions > 10% fail the build, results are posted as a PR comment.
  4. Methodology documentation (docs/measurement-methodology.md) describing the harness, the metrics it captures, and how an external engineer reproduces the numbers.

Definition of Done

  • cargo bench in the patina_boot repo runs and emits a baseline JSON report covering all 8 vtable primitives
  • qemu-system-x86_64 boots OVMF + patina_boot, reaches BDS, and emits parsable boot-time output
  • CI gates patina_boot PRs on a > 10% bench regression
  • An engineer outside the patina_boot team can follow docs/measurement-methodology.md and reproduce a number within 5% of the baseline
  • Numbers from this harness are cited in the BMMI perf comparison whitepaper (Epic 7)

Out of Scope

  • Production-platform measurement (covered in Epic 6 — Surface SKU Integration)
  • Physical reference platform measurement (covered in Epic 5)
  • Native Rust replacement of the C proxy primitives (covered in Epic 4)
  • Any orchestrator design changes beyond what's needed to be benchmarkable (covered in Epic 3)

Dependencies

  • Blocks: Epics 4, 5, 6, 7 all consume the methodology + tooling this epic produces
  • Blocked by: None — this is the first thing to build

Estimated effort

~2.5 weeks (1 engineer)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.