Skip to main content

MemoryGovernor

Struct MemoryGovernor 

Source
pub struct MemoryGovernor { /* private fields */ }
Expand description

Process-wide byte-accounting governor for large allocations.

Every large planned allocation (dense design materialization, covariance block, sampler design assembly) reserves its byte footprint against one shared ledger via try_reserve and holds the returned RAII MemoryReservation for as long as the allocation is live. Because the ledger is shared, allocations that are each individually acceptable can no longer jointly exceed memory: whichever request would tip the ledger past the budget gets a typed MemoryReservationError and routes to a chunked or matrix-free strategy instead. Strategy selection is thereby a continuous function of predicted live bytes vs remaining budget, not of row/column thresholds.

The global budget is sized once from actually-available memory (host available_memory, clamped by cgroup limits inside containers) — see [GOVERNOR_BUDGET_NUMERATOR] for the headroom rationale.

Implementations§

Source§

impl MemoryGovernor

Source

pub fn global() -> &'static MemoryGovernor

The process-wide governor. Budget detection runs once, on first use.

Source

pub fn budget_bytes(&self) -> usize

Source

pub fn reserved_bytes(&self) -> usize

Source

pub fn remaining_bytes(&self) -> usize

Source

pub fn single_materialization_cap_bytes(&self) -> usize

Absolute ceiling for one governed operation. Consumers reserve the operation’s complete predicted live set (matrix plus simultaneous workspaces/copies), so the shared ledger itself is the policy.

Source

pub fn try_reserve( &self, bytes: usize, context: &str, ) -> Result<MemoryReservation, MemoryReservationError>

Reserve bytes against the joint ledger.

On success the returned MemoryReservation must be held for as long as the allocation it accounts for is live; dropping it releases the bytes. On failure the caller receives the ledger evidence and is expected to fall back to a chunked or matrix-free strategy.

Source

pub fn try_reserve_dense_f64( &self, nrows: usize, ncols: usize, context: &str, ) -> Result<MemoryReservation, MemoryReservationError>

Reserve the footprint of a dense nrows × ncols f64 matrix. Dimension-product overflow is reported as a budget refusal (an allocation whose size cannot even be computed certainly does not fit).

Source

pub fn try_reserve_dense_f64_copies( &self, nrows: usize, ncols: usize, copies: usize, context: &str, ) -> Result<MemoryReservation, MemoryReservationError>

Reserve the predicted live footprint of copies simultaneous dense matrices with one atomic ledger charge.

Trait Implementations§

Source§

impl Clone for MemoryGovernor

Source§

fn clone(&self) -> MemoryGovernor

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MemoryGovernor

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.