pub struct BrickStats {
pub name: String,
pub count: u64,
pub total_ns: u64,
pub min_ns: u64,
pub max_ns: u64,
pub total_elements: u64,
pub total_bytes: u64,
pub total_compressed_bytes: u64,
pub bottleneck: BrickBottleneck,
pub total_cycles: u64,
pub min_cycles: u64,
pub max_cycles: u64,
}Expand description
Accumulated per-brick statistics.
Fields§
§name: StringBrick name
count: u64Total samples collected
total_ns: u64Total elapsed time (nanoseconds)
min_ns: u64Min elapsed time (nanoseconds)
max_ns: u64Max elapsed time (nanoseconds)
total_elements: u64Total elements processed
total_bytes: u64PMAT-451: Total bytes processed (for throughput calculation)
total_compressed_bytes: u64PMAT-451: Total compressed bytes (for compression ratio)
bottleneck: BrickBottleneckPMAT-451: Bottleneck classification
total_cycles: u64Phase 11 (E.9.2): Total CPU cycles (from RDTSCP/CNTVCT)
min_cycles: u64Phase 11: Minimum CPU cycles observed
max_cycles: u64Phase 11: Maximum CPU cycles observed
Implementations§
Source§impl BrickStats
impl BrickStats
Sourcepub fn add_sample(&mut self, elapsed_ns: u64, elements: u64)
pub fn add_sample(&mut self, elapsed_ns: u64, elements: u64)
Add a sample to statistics.
Sourcepub fn add_sample_with_cycles(
&mut self,
elapsed_ns: u64,
elements: u64,
cycles: u64,
)
pub fn add_sample_with_cycles( &mut self, elapsed_ns: u64, elements: u64, cycles: u64, )
Phase 11 (E.9.2): Add a sample with CPU cycle count.
Use this for frequency-invariant performance analysis. Cycles are immune to CPU frequency scaling (turbo boost).
Sourcepub fn cycles_per_element(&self) -> f64
pub fn cycles_per_element(&self) -> f64
Phase 11: Cycles per element (frequency-invariant throughput metric).
Lower is better. This metric is immune to CPU frequency scaling.
Sourcepub fn avg_cycles(&self) -> f64
pub fn avg_cycles(&self) -> f64
Phase 11: Average cycles per sample.
Sourcepub fn estimated_ipc(&self) -> f64
pub fn estimated_ipc(&self) -> f64
Phase 11: Estimated IPC (Instructions Per Cycle).
Approximation assuming ~1 instruction per element for simple ops.
- Low IPC (<1.0): Memory stalls (cache misses, memory latency)
- High IPC (>2.0): Compute bound (efficient execution)
Sourcepub fn diagnose_from_cycles(&self) -> &'static str
pub fn diagnose_from_cycles(&self) -> &'static str
Phase 11: Diagnose bottleneck based on cycles vs time ratio.
High cycles + low time = likely cache misses Low cycles + high time = likely CPU throttling or context switches
Sourcepub fn add_sample_with_bytes(
&mut self,
elapsed_ns: u64,
elements: u64,
input_bytes: u64,
output_bytes: u64,
)
pub fn add_sample_with_bytes( &mut self, elapsed_ns: u64, elements: u64, input_bytes: u64, output_bytes: u64, )
PMAT-451: Add a sample with byte metrics for compression workloads.
§Arguments
elapsed_ns: Time taken in nanosecondselements: Number of elements processed (e.g., pages)input_bytes: Original uncompressed sizeoutput_bytes: Compressed output size
Sourcepub fn compression_ratio(&self) -> f64
pub fn compression_ratio(&self) -> f64
PMAT-451: Calculate compression ratio (input_size / output_size). Returns 1.0 if no compression data available.
Sourcepub fn throughput_gbps(&self) -> f64
pub fn throughput_gbps(&self) -> f64
PMAT-451: Calculate throughput in GB/s. Based on total input bytes processed.
Sourcepub fn set_bottleneck(&mut self, bottleneck: BrickBottleneck)
pub fn set_bottleneck(&mut self, bottleneck: BrickBottleneck)
PMAT-451: Set bottleneck classification.
Sourcepub fn get_bottleneck(&self) -> BrickBottleneck
pub fn get_bottleneck(&self) -> BrickBottleneck
PMAT-451: Get bottleneck classification.
Sourcepub fn throughput(&self) -> f64
pub fn throughput(&self) -> f64
Throughput in elements/second.
Sourcepub fn tokens_per_sec(&self) -> f64
pub fn tokens_per_sec(&self) -> f64
Throughput in tokens/second (alias for throughput).
Trait Implementations§
Source§impl Clone for BrickStats
impl Clone for BrickStats
Source§fn clone(&self) -> BrickStats
fn clone(&self) -> BrickStats
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BrickStats
impl Debug for BrickStats
Source§impl Default for BrickStats
impl Default for BrickStats
Source§fn default() -> BrickStats
fn default() -> BrickStats
Auto Trait Implementations§
impl Freeze for BrickStats
impl RefUnwindSafe for BrickStats
impl Send for BrickStats
impl Sync for BrickStats
impl Unpin for BrickStats
impl UnsafeUnpin for BrickStats
impl UnwindSafe for BrickStats
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.