Skip to main content

ResourceGroupRegistry

Struct ResourceGroupRegistry 

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

A registry of resource groups and the statistics for each of them.

Resource groups are user-defined groups which can then be associated with memory and CPU usage in distinct code regions. This mechanism allows for granular resource accounting at the level which makes sense to the application, such as per-thread, per-async task, and so on.

§Token guard

When an resource group is registered, an ResourceGroupToken is returned. This token can be used to “enter” the group, which causes memory and CPU usage on the current thread to be attributed to that group. Entering the group returns a drop guard that restores the previously entered group when dropped.

This allows for arbitrarily nested resource groups.

Additionally, Tracked can be used to wrap a Future, attaching it to a specific resource group token. This causes the future to track all memory and CPU usage during polls such that the usage is properly attributed to the resource group.

§Resources tracked

§Memory usage

In order for memory usage to be tracked, TrackingAllocator must be installed as the global allocator for the process.

§CPU usage

CPU usage is automatically tracked if platform support is detected.

Currently, only Linux is supported for CPU usage tracking.

Implementations§

Source§

impl ResourceGroupRegistry

Source

pub fn global() -> &'static Self

Gets a reference to the global resource group registry.

Source

pub fn allocator_installed() -> bool

Returns true if TrackingAllocator is installed as the global allocator.

Source

pub fn register_resource_group<S>(&self, name: S) -> ResourceGroupToken
where S: AsRef<str>,

Registers a new resource group with the given name.

Returns an ResourceGroupToken that can be used to attribute CPU and memory usage to the newly created resource group.

Source

pub fn visit_resource_groups<F>(&self, f: F)
where F: FnMut(&str, &ResourceStats),

Visits all resource groups in the registry and calls the given closure with their names and statistics.

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

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> Track for T

Source§

fn track_resources(self, token: ResourceGroupToken) -> Tracked<Self>

Instruments this type by attaching the given resource group token, returning a Tracked wrapper. Read more
Source§

fn in_current_resource_group(self) -> Tracked<Self>

Instruments this type by attaching the current resource group, returning a Tracked wrapper. 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.
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