Performance
July 31, 2026 ยท View on GitHub
The performance subsystem records firmware boot performance measurements and publishes them for
consumption by the operating system through the ACPI Firmware Performance Data Table (FPDT). The
records themselves live in the Firmware Basic Boot Performance Table (FBPT), which the DXE Core
builds during boot and the patina_performance component publishes at End of DXE.
This document details the performance system is implemented accross it's multiple crates, modules, and implementations.
Layers
- SDK - Shared types and the service contract. It defines the interfaces and common structures used by all layers.
- DXE Core - The measurement engine.
CorePerformanceimplementsPerformanceManagerand owns all global state and will process new performance records. This is implemented in the core to ensure early availability of performance data. - Component - The DXE integration and interoperability layer. It consumes the service and, at boot,
publishes the FBPT for the ACPI FPDT, installs the
EdkiiPerformanceMeasurementprotocol for C drivers, installs thePerformancePropertyconfiguration table, and optionally merges Management Mode (MM) performance records. - UEFI - Traditional UEFI drivers, boot loaders, and protocols. These will consume the traditional UEFI or EDKII interfaces.
Interfaces
CorePerformance is the single implementation of the PerformanceManager service. All other
external callers reach the implementation through one of three interfaces:
PerformanceManagerservice (used by components)EdkiiPerformanceMeasurementprotocol (used by drivers)- Published ACPI tables (read by applications & OS)
The core will be responsible for exposing #1, while the component will expose #2 and #3. The class diagram below demonstrates this.
---
config:
look: handDrawn
---
classDiagram
class PerformanceManager {
<<service trait>>
+create_measurement()
+publish_table()
+etc()
}
class CorePerformance {
-measurement_configuration
-measurement_storage
+core_only_measurements()
}
class FBPT {
-measurement_list
-published_table_pointer
+add_record()
+publish_table()
}
class RustComponent {
<<component>>
}
class PatinaPerformance {
<<component>>
}
class EdkiiPerformanceMeasurement {
<<protocol>>
+create_performance_measurement()
}
class PerformanceProperty {
<<config table>>
}
class UefiDriver {
<<UEFI driver>>
}
PerformanceManager <|.. CorePerformance : implements
CorePerformance *-- FBPT : owns
RustComponent ..> PerformanceManager : uses service
PatinaPerformance ..> PerformanceManager : uses service
PatinaPerformance ..> EdkiiPerformanceMeasurement : installs
PatinaPerformance ..> PerformanceProperty : installs
EdkiiPerformanceMeasurement ..> PerformanceManager : forwards to
UefiDriver ..> EdkiiPerformanceMeasurement : calls
Configuration
Whether performance measurement is enabled is decided by the DXE Core. The Core resolves a PerformanceConfig and,
when enabled, registers the PerformanceManager service. When disabled the service is absent, so the
patina_performance component's service dependency is unsatisfied and it never dispatches.
pub struct PerformanceConfig {
pub enabled: u8, // ENABLED / DISABLED
pub enabled_measurements: u32, // bitmask of `Measurement`
}
The configuration is resolved in priority order:
- A
PerformanceConfigguided HOB produced before the DXE Core runs. - Otherwise, the platform's
PlatformInfo::DEFAULT_PERFORMANCE_CONFIG. If not overridden, this will default to disabled.
enabled_measurements is a bitmask of the Measurement values that gate the Core's boot
instrumentation: StartImage, LoadImage, DriverBindingSupport, DriverBindingStart, and
DriverBindingStop. Measurements requested through the service or the EDK II protocol are recorded
whenever performance is enabled.