Skip to main content

StorageHotspotDetector

Struct StorageHotspotDetector 

Source
pub struct StorageHotspotDetector {
    pub records: HashMap<u64, BlockAccessRecord>,
    pub config: DetectorConfig,
    pub total_events: u64,
}
Expand description

Detects storage hotspots using sliding-window access counting and exponential decay scoring.

§Algorithm

Each block maintains a floating-point score that grows whenever an access is recorded (weighted by AccessType) and shrinks exponentially as logical time elapses (score *= decay_factor^ticks_elapsed). Events older than window_ticks are purged to bound memory usage. A block is classified as a hotspot when its decay-adjusted score equals or exceeds hotspot_threshold.

Fields§

§records: HashMap<u64, BlockAccessRecord>

Per-block access records, keyed by block identifier.

§config: DetectorConfig

Detector configuration.

§total_events: u64

Total number of access events recorded since creation.

Implementations§

Source§

impl StorageHotspotDetector

Source

pub fn new(config: DetectorConfig) -> Self

Create a new detector with the supplied configuration.

Source

pub fn record_access(&mut self, event: AccessEvent)

Record a block access event.

The record for event.block_id is created on first access. Decay is applied for every tick that has elapsed since the last recorded event, events older than the window are evicted, and the event weight is added to the score.

Source

pub fn hotspot_score( &self, block_id: u64, current_tick: u64, ) -> Option<HotspotScore>

Return the decay-adjusted HotspotScore for block_id as of current_tick.

Returns None if the block has never been tracked.

Source

pub fn hotspots(&self, current_tick: u64) -> Vec<HotspotScore>

Return all blocks currently classified as hotspots, sorted by score descending.

Source

pub fn top_n(&self, n: usize, current_tick: u64) -> Vec<HotspotScore>

Return the top n blocks ordered by decay-adjusted score descending.

Non-hotspot blocks are included; the caller must check is_hotspot if only confirmed hotspots are required.

Source

pub fn evict_cold(&mut self, current_tick: u64) -> usize

Remove all block records whose decay-adjusted score has fallen below 0.001.

Returns the number of records that were removed.

Source

pub fn stats(&self, current_tick: u64) -> HotspotDetectorStats

Return aggregate statistics for the current state of the detector.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more