Spec-Zone.ru › Tokio

Структура RuntimeMetrics

pub struct RuntimeMetrics { /* private fields */ }
Доступно только при включённой возможности crate rt.

Дескриптор метрик среды выполнения.

Этот дескриптор внутри использует подсчёт ссылок, и его можно свободно клонировать. Дескриптор RuntimeMetrics получается с помощью метода Runtime::metrics.

Реализации

impl RuntimeMetrics

pub fn num_workers(&self) -> usize

Возвращает количество рабочих потоков, используемых средой выполнения.

Количество рабочих потоков задаётся настройкой worker_threads для runtime::Builder. При использовании среды выполнения current_thread возвращаемое значение всегда равно 1.

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.num_workers();
println!("Runtime is using {} workers", n);

pub fn num_alive_tasks(&self) -> usize

Возвращает текущее количество активных задач в среде выполнения.

Этот счётчик увеличивается при запуске задачи и уменьшается при её завершении.

Примечание. При использовании многопоточной среды выполнения это значение может быть несогласованным, то есть задачи могут не выполняться, хотя метрика показывает обратное.

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.num_alive_tasks();
println!("Runtime has {} alive tasks", n);

pub fn global_queue_depth(&self) -> usize

Возвращает количество задач, запланированных в данный момент в глобальной очереди среды выполнения.

Задачи, запущенные или получившие уведомление из потока, не принадлежащего среде выполнения, помещаются в глобальную очередь среды выполнения. Эта метрика возвращает текущее количество ожидающих задач в глобальной очереди. Поэтому возвращаемое значение может увеличиваться или уменьшаться по мере планирования и обработки новых задач.

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.global_queue_depth();
println!("{} tasks currently pending in the runtime's global queue", n);

pub fn worker_total_busy_duration(&self, worker: usize) -> Duration

Доступно только на target_has_atomic=64.

Возвращает время, в течение которого указанный рабочий поток был занят.

Отсчёт времени занятости рабочего потока начинается с нуля при создании среды выполнения и увеличивается, пока поток обрабатывает задачи. Это значение позволяет оценить нагрузку на указанный поток. Если поток занят большую часть времени, значит, он испытывает нагрузку и будет реже проверять наличие входящих событий.

Таймер монотонно увеличивается. Он никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — индекс рабочего потока, для которого выполняется запрос. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и остаётся неизменным в течение всего времени существования экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равен num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_total_busy_duration(0);
println!("worker 0 was busy for a total of {:?}", n);

pub fn worker_park_count(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64.

Возвращает общее количество переходов указанного рабочего потока в состояние ожидания.

Счётчик переходов рабочего потока в состояние ожидания начинается с нуля при создании среды выполнения и увеличивается на единицу каждый раз, когда поток переходит в ожидание новых входящих событий для обработки. Обычно это означает, что поток обработал все ожидающие задачи и в данный момент простаивает.

Счётчик монотонно увеличивается. Он никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — индекс рабочего потока, для которого выполняется запрос. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и остаётся неизменным в течение всего времени существования экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равен num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_park_count(0);
println!("worker 0 parked {} times", n);

pub fn worker_park_unpark_count(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64.

Возвращает общее количество переходов указанного рабочего потока в состояние ожидания и обратно.

Счётчик переходов рабочего потока в состояние ожидания и обратно начинается с нуля при создании среды выполнения и увеличивается на единицу каждый раз, когда поток переходит в ожидание новых входящих событий для обработки. Обычно это означает, что поток обработал все ожидающие задачи и в данный момент простаивает. Когда появляется новая задача, поток возобновляет работу, и счётчик переходов в состояние ожидания и обратно снова увеличивается на единицу.

Нечётное значение счётчика означает, что рабочий поток сейчас находится в состоянии ожидания. Чётное значение означает, что рабочий поток сейчас активен.

Счётчик монотонно увеличивается. Он никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — индекс рабочего потока, для которого выполняется запрос. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и остаётся неизменным в течение всего времени существования экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равен num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();
let n = metrics.worker_park_unpark_count(0);

println!("worker 0 parked and unparked {} times", n);

if n % 2 == 0 {
    println!("worker 0 is active");
} else {
    println!("worker 0 is parked");
}

pub fn num_blocking_threads(&self) -> usize

Доступно только на tokio_unstable.

Возвращает количество дополнительных потоков, созданных средой выполнения.

Количество рабочих потоков задаётся настройкой max_blocking_threads в runtime::Builder.

Примеры
use tokio::runtime::Handle;

let _ = tokio::task::spawn_blocking(move || {
    // Stand-in for compute-heavy work or using synchronous APIs
    1 + 1
}).await;
let metrics = Handle::current().metrics();

let n = metrics.num_blocking_threads();
println!("Runtime has created {} threads", n);

pub fn active_tasks_count(&self) -> usize

👎Устарело:

Переименовано в num_alive_tasks

Доступно только на tokio_unstable.

Переименовано в RuntimeMetrics::num_alive_tasks

pub fn num_idle_blocking_threads(&self) -> usize

Доступно только на tokio_unstable.

Возвращает количество простаивающих потоков, созданных средой выполнения для вызовов spawn_blocking.

Примеры
use tokio::runtime::Handle;

#[tokio::main]
async fn main() {
    let _ = tokio::task::spawn_blocking(move || {
        // Stand-in for compute-heavy work or using synchronous APIs
        1 + 1
    }).await;
    let metrics = Handle::current().metrics();

    let n = metrics.num_idle_blocking_threads();
    println!("Runtime has {} idle blocking thread pool threads", n);
}

pub fn worker_thread_id(&self, worker: usize) -> Option<ThreadId>

Доступно только на tokio_unstable.

Возвращает идентификатор указанного рабочего потока.

Возвращаемое значение равно None, если рабочий поток ещё не завершил запуск.

Если требуются дополнительные сведения о потоке, например его собственный идентификатор, их можно собрать в on_thread_start и сопоставить с идентификатором потока.

Аргументы

worker — индекс запрашиваемого рабочего потока. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и остаётся его идентификатором в течение всего срока жизни экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker соответствует недопустимому рабочему потоку, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let id = metrics.worker_thread_id(0);
println!("worker 0 has id {:?}", id);

pub fn worker_local_queue_depth(&self, worker: usize) -> usize

Доступно только на tokio_unstable.

Возвращает количество задач, запланированных в данный момент в локальной очереди указанного рабочего потока.

Задачи, созданные или получившие уведомление из потока среды выполнения, планируются с использованием локальной очереди этого рабочего потока. Эта метрика возвращает текущее количество ожидающих задач в локальной очереди рабочего потока. Поэтому возвращаемое значение может увеличиваться или уменьшаться по мере планирования и обработки новых задач.

Аргументы

worker — индекс запрашиваемого рабочего потока. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и остаётся его идентификатором в течение всего срока жизни экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker соответствует недопустимому рабочему потоку, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_local_queue_depth(0);
println!("{} tasks currently pending in worker 0's local queue", n);

pub fn poll_time_histogram_enabled(&self) -> bool

Доступно только на tokio_unstable.

Возвращает true, если среда выполнения отслеживает распределение времени опроса задач.

По умолчанию время опроса задач не регистрируется, поскольку для этого требуется вызывать Instant::now() дважды для каждого опроса задачи. Эта функция включается вызовом enable_metrics_poll_time_histogram() при создании среды выполнения.

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_poll_time_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let enabled = metrics.poll_time_histogram_enabled();

            println!("Tracking task poll time distribution: {:?}", enabled);
        });
}

pub fn poll_time_histogram_num_buckets(&self) -> usize

Доступно только в tokio_unstable.

Возвращает количество корзин гистограммы, отслеживающих распределение времени опроса задач.

Это значение настраивается вызовом metrics_poll_time_histogram_configuration() при создании среды выполнения.

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_poll_time_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let buckets = metrics.poll_time_histogram_num_buckets();

            println!("Histogram buckets: {:?}", buckets);
        });
}

pub fn poll_time_histogram_bucket_range(&self, bucket: usize) -> Range<Duration>

Доступно только в tokio_unstable.

Возвращает диапазон времени опроса задач, отслеживаемый указанной корзиной.

Это значение настраивается вызовом metrics_poll_time_histogram_configuration() при создании среды выполнения.

Панические ошибки

Метод вызывает панику, если bucket обозначает недопустимый индекс корзины, то есть больше или равен poll_time_histogram_num_buckets().

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_poll_time_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let buckets = metrics.poll_time_histogram_num_buckets();

            for i in 0..buckets {
                let range = metrics.poll_time_histogram_bucket_range(i);
                println!("Histogram bucket {} range: {:?}", i, range);
            }
        });
}

pub fn blocking_queue_depth(&self) -> usize

Доступно только в tokio_unstable.

Возвращает количество задач, запланированных в данный момент в пуле блокирующих потоков, созданных с помощью spawn_blocking.

Эта метрика возвращает текущее количество ожидающих задач в пуле блокирующих потоков. Поэтому возвращаемое значение может увеличиваться или уменьшаться по мере планирования и обработки новых задач.

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.blocking_queue_depth();
println!("{} tasks currently pending in the blocking thread pool", n);

pub fn spawned_tasks_count(&self) -> u64

Доступно только в target_has_atomic=64 и tokio_unstable.

Возвращает количество задач, созданных в этой среде выполнения с момента её создания.

При создании среды выполнения счётчик равен нулю и увеличивается на единицу при каждом создании задачи.

Счётчик монотонно возрастает. Он никогда не уменьшается и не сбрасывается до нуля.

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.spawned_tasks_count();
println!("Runtime has had {} tasks spawned", n);

pub fn remote_schedule_count(&self) -> u64

Доступно только в target_has_atomic=64 и tokio_unstable.

Возвращает количество задач, запланированных извне среды выполнения.

При создании среды выполнения счётчик удалённого планирования равен нулю и увеличивается на единицу каждый раз, когда задача пробуждается извне среды выполнения. Обычно это означает, что задача создаётся или получает уведомление из потока, не принадлежащего среде выполнения, и должна быть помещена в очередь внедрения Runtime, что обычно выполняется медленнее.

Счётчик монотонно возрастает. Он никогда не уменьшается и не сбрасывается до нуля.

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.remote_schedule_count();
println!("{} tasks were scheduled from outside the runtime", n);

pub fn budget_forced_yield_count(&self) -> u64

Доступно только в target_has_atomic=64 и tokio_unstable.

Возвращает количество случаев, когда задачи принудительно уступали управление планировщику после исчерпания выделенного им бюджета.

При создании среды выполнения счётчик равен нулю и увеличивается на единицу каждый раз, когда задача уступает управление из-за исчерпания своего бюджета.

Счётчик монотонно возрастает. Он никогда не уменьшается и не сбрасывается до нуля.

pub fn worker_noop_count(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64 и tokio_unstable.

Возвращает количество случаев, когда заданный рабочий поток был выведен из состояния парковки, но не выполнил никакой работы и снова перешёл в состояние парковки.

Счётчик холостых пробуждений рабочего потока равен нулю при создании runtime и увеличивается на единицу каждый раз, когда рабочий поток просыпается, не обнаруживает новых задач и снова засыпает. Это указывает на ложное пробуждение.

Значение счётчика только увеличивается. Оно никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — это индекс запрашиваемого рабочего потока. Заданное значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и сохраняет эту идентификацию на протяжении всего времени существования экземпляра runtime.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_noop_count(0);
println!("worker 0 had {} no-op unparks", n);

pub fn worker_steal_count(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64 и tokio_unstable.

Возвращает количество задач, которые заданный рабочий поток забрал у другого рабочего потока.

Эта метрика применима только к многопоточному runtime и всегда возвращает 0 при использовании runtime текущего потока.

Счётчик похищенных задач рабочего потока равен нулю при создании runtime и увеличивается на N каждый раз, когда рабочий поток обработал свою запланированную очередь и успешно забрал N дополнительных ожидающих задач у другого рабочего потока.

Значение счётчика только увеличивается. Оно никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — это индекс запрашиваемого рабочего потока. Заданное значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и сохраняет эту идентификацию на протяжении всего времени существования экземпляра runtime.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_steal_count(0);
println!("worker 0 has stolen {} tasks", n);

pub fn worker_steal_operations(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64 и tokio_unstable.

Возвращает количество случаев, когда заданный рабочий поток забирал задачи у другого рабочего потока.

Эта метрика применима только к многопоточному runtime и всегда возвращает 0 при использовании runtime текущего потока.

Счётчик похищенных задач рабочего потока равен нулю при создании runtime и увеличивается на единицу каждый раз, когда рабочий поток обработал свою запланированную очередь и успешно забрал дополнительные ожидающие задачи у другого рабочего потока.

Значение счётчика только увеличивается. Оно никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — это индекс запрашиваемого рабочего потока. Заданное значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и сохраняет эту идентификацию на протяжении всего времени существования экземпляра runtime.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_steal_operations(0);
println!("worker 0 has stolen tasks {} times", n);

pub fn worker_poll_count(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64 и tokio_unstable.

Возвращает количество задач, которые опросил заданный рабочий поток.

Счётчик опросов рабочего потока равен нулю при создании runtime и увеличивается на единицу каждый раз, когда рабочий поток опрашивает запланированную задачу.

Значение счётчика только увеличивается. Оно никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — это индекс запрашиваемого рабочего потока. Заданное значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и сохраняет эту идентификацию на протяжении всего времени существования экземпляра runtime.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_poll_count(0);
println!("worker 0 has polled {} tasks", n);

pub fn worker_local_schedule_count(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64 and tokio_unstable.

Возвращает количество задач, запланированных изнутри среды выполнения в локальной очереди указанного рабочего потока.

Счётчик локального планирования начинается с нуля при создании среды выполнения и увеличивается на единицу каждый раз, когда задача пробуждается изнутри среды выполнения на указанном рабочем потоке. Обычно это означает, что задача создаётся или получает уведомление из потока среды выполнения и помещается в локальную очередь рабочего потока.

Значение счётчика монотонно возрастает. Оно никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — индекс рабочего потока, для которого запрашиваются данные. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и будет идентифицировать его на протяжении всего срока существования экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_local_schedule_count(0);
println!("{} tasks were scheduled on the worker's local queue", n);

pub fn worker_overflow_count(&self, worker: usize) -> u64

Доступно только на target_has_atomic=64 and tokio_unstable.

Возвращает количество случаев, когда локальная очередь указанного рабочего потока была переполнена.

Эта метрика применима только к многопланировщику.

Счётчик переполнения рабочего потока начинается с нуля при создании среды выполнения и увеличивается на единицу каждый раз, когда рабочий поток пытается запланировать задачу локально, но его локальная очередь заполнена. В этом случае половина локальной очереди перемещается в очередь внедрения.

Значение счётчика монотонно возрастает. Оно никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — индекс рабочего потока, для которого запрашиваются данные. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и будет идентифицировать его на протяжении всего срока существования экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_overflow_count(0);
println!("worker 0 has overflowed its queue {} times", n);

pub fn poll_time_histogram_bucket_count( &self, worker: usize, bucket: usize, ) -> u64

Доступно только на target_has_atomic=64 and tokio_unstable.

Возвращает количество случаев, когда указанный рабочий поток опрашивал задачи, длительность опроса которых попадала в диапазон указанного интервала гистограммы.

Каждый рабочий поток ведёт собственную гистограмму, а счётчики всех её интервалов начинаются с нуля при создании среды выполнения. При каждом опросе задачи рабочий поток измеряет длительность опроса и увеличивает соответствующий счётчик на 1.

Счётчик каждого интервала монотонно возрастает. Он никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — индекс рабочего потока, для которого запрашиваются данные. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и будет идентифицировать его на протяжении всего срока существования экземпляра среды выполнения.

bucket — индекс интервала гистограммы, для которого запрашиваются данные. Интервал относится к конкретному рабочему потоку. Диапазон, соответствующий интервалу, можно получить, вызвав poll_time_histogram_bucket_range(). Диапазоны интервалов у всех рабочих потоков одинаковы.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers(), либо если bucket обозначает недопустимый интервал гистограммы.

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_poll_time_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let buckets = metrics.poll_time_histogram_num_buckets();

            for worker in 0..metrics.num_workers() {
                for i in 0..buckets {
                    let count = metrics.poll_time_histogram_bucket_count(worker, i);
                    println!("Poll count {}", count);
                }
            }
        });
}

pub fn worker_mean_poll_time(&self, worker: usize) -> Duration

Доступно только на target_has_atomic=64 and tokio_unstable.

Возвращает среднюю длительность опроса задач в наносекундах.

Это экспоненциально взвешенное скользящее среднее. В настоящее время эта метрика предоставляется только многопоточной средой выполнения.

Аргументы

worker — индекс рабочего потока, для которого запрашиваются данные. Значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно идентифицирует один рабочий поток и будет идентифицировать его на протяжении всего срока существования экземпляра среды выполнения.

Паника

Метод вызывает панику, если worker обозначает недопустимый рабочий поток, то есть больше или равно num_workers().

Примеры
use tokio::runtime::Handle;

let metrics = Handle::current().metrics();

let n = metrics.worker_mean_poll_time(0);
println!("worker 0 has a mean poll time of {:?}", n);

pub fn schedule_latency_histogram_enabled(&self) -> bool

Доступно только при включённой функции crate schedule-latency.

Возвращает true, если среда выполнения отслеживает распределение задержек планирования задач.

Задержки планирования задач по умолчанию не измеряются, поскольку для этого требуется вызывать Instant::now() при планировании задачи и при её опросе. Функция включается вызовом enable_metrics_schedule_latency_histogram() при создании среды выполнения.

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_schedule_latency_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let enabled = metrics.schedule_latency_histogram_enabled();

            println!("Tracking task schedule latency distribution: {:?}", enabled);
        });
}

pub fn schedule_latency_histogram_num_buckets(&self) -> usize

Доступно только при включённой функции crate schedule-latency.

Возвращает количество интервалов гистограммы, отслеживающих распределение задержек планирования задач.

Это значение задаётся вызовом metrics_schedule_latency_histogram_configuration() при создании среды выполнения.

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_schedule_latency_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let buckets = metrics.schedule_latency_histogram_num_buckets();

            println!("Histogram buckets: {:?}", buckets);
        });
}

pub fn schedule_latency_histogram_bucket_range( &self, bucket: usize, ) -> Range<Duration>

Доступно только при включённой функции crate schedule-latency.

Возвращает диапазон задержек планирования задач, отслеживаемый указанным интервалом.

Это значение задаётся вызовом metrics_schedule_latency_histogram_configuration() при создании среды выполнения.

Панические завершения

Метод вызывает панику, если bucket представляет недопустимый индекс интервала, то есть больше или равен schedule_latency_histogram_num_buckets().

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_schedule_latency_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let buckets = metrics.schedule_latency_histogram_num_buckets();

            for i in 0..buckets {
                let range = metrics.schedule_latency_histogram_bucket_range(i);
                println!("Histogram bucket {} range: {:?}", i, range);
            }
        });
}

pub fn schedule_latency_histogram_bucket_count( &self, worker: usize, bucket: usize, ) -> u64

Доступно только при включённой функции crate schedule-latency.

Возвращает количество случаев, когда указанный рабочий поток опрашивал задачи с задержкой планирования в пределах диапазона указанного интервала.

Каждый рабочий поток ведёт собственную гистограмму, и счётчики каждого интервала начинаются с нуля при создании среды выполнения. Каждый раз, когда рабочий поток опрашивает задачу, он отслеживает время, прошедшее между планированием задачи и её опросом, и увеличивает соответствующий счётчик на 1.

Счётчик каждого интервала монотонно возрастает. Он никогда не уменьшается и не сбрасывается до нуля.

Аргументы

worker — индекс запрашиваемого рабочего потока. Указанное значение должно находиться в диапазоне от 0 до num_workers(). Индекс однозначно определяет один рабочий поток и продолжает идентифицировать его в течение всего времени существования экземпляра среды выполнения.

bucket — индекс запрашиваемого интервала. Интервал относится к конкретному рабочему потоку. Диапазон, представленный интервалом, можно запросить с помощью schedule_latency_histogram_bucket_range(). Для всех рабочих потоков используются одинаковые диапазоны интервалов.

Панические завершения

Метод вызывает панику, если worker представляет недопустимый рабочий поток, то есть больше или равен num_workers(), либо если bucket представляет недопустимый интервал.

Примеры
use tokio::runtime::{self, Handle};

fn main() {
    runtime::Builder::new_current_thread()
        .enable_metrics_schedule_latency_histogram()
        .build()
        .unwrap()
        .block_on(async {
            let metrics = Handle::current().metrics();
            let buckets = metrics.schedule_latency_histogram_num_buckets();

            for worker in 0..metrics.num_workers() {
                for i in 0..buckets {
                    let range = metrics.schedule_latency_histogram_bucket_range(i);
                    let count = metrics.schedule_latency_histogram_bucket_count(worker, i);
                    println!("{} tasks encountered a scheduling latency between {}us and {}us", count, range.start.as_micros(), range.end.as_micros());
                }
            }
        });
}

pub fn io_driver_fd_registered_count(&self) -> u64

Доступно только на target_has_atomic=64 и tokio_unstable при включённой функции crate net.

Возвращает количество файловых дескрипторов, зарегистрированных в драйвере ввода-вывода среды выполнения.

Примеры
use tokio::runtime::Handle;

#[tokio::main]
async fn main() {
    let metrics = Handle::current().metrics();

    let registered_fds = metrics.io_driver_fd_registered_count();
    println!("{} fds have been registered with the runtime's I/O driver.", registered_fds);

    let deregistered_fds = metrics.io_driver_fd_deregistered_count();

    let current_fd_count = registered_fds - deregistered_fds;
    println!("{} fds are currently registered by the runtime's I/O driver.", current_fd_count);
}

pub fn io_driver_fd_deregistered_count(&self) -> u64

Доступно только при target_has_atomic=64 и tokio_unstable и функции crate net.

Возвращает количество файловых дескрипторов, снятых с регистрации драйвером ввода-вывода среды выполнения.

Примеры
use tokio::runtime::Handle;

#[tokio::main]
async fn main() {
    let metrics = Handle::current().metrics();

    let n = metrics.io_driver_fd_deregistered_count();
    println!("{} fds have been deregistered by the runtime's I/O driver.", n);
}

pub fn io_driver_ready_count(&self) -> u64

Доступно только при target_has_atomic=64 и tokio_unstable и функции crate net.

Возвращает количество готовых событий, обработанных драйвером ввода-вывода среды выполнения.

Примеры
use tokio::runtime::Handle;

#[tokio::main]
async fn main() {
    let metrics = Handle::current().metrics();

    let n = metrics.io_driver_ready_count();
    println!("{} ready events processed by the runtime's I/O driver.", n);
}

Реализации трейтов

impl Clone for RuntimeMetrics

fn clone(&self) -> RuntimeMetrics

Возвращает копию значения. Подробнее
1.0.0 (const: нестабильно) ·

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

Выполняет присваивание копированием из source. Подробнее

impl Debug for RuntimeMetrics

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

Форматирует значение с помощью указанного форматировщика. Подробнее

Автоматические реализации трейтов

impl Freeze for RuntimeMetrics

impl RefUnwindSafe for RuntimeMetrics

impl Send for RuntimeMetrics

impl Sync for RuntimeMetrics

impl Unpin for RuntimeMetrics

impl UnsafeUnpin for RuntimeMetrics

impl UnwindSafe for RuntimeMetrics

Обобщённые реализации

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

fn type_id(&self) -> TypeId

Получает TypeId self. Подробнее

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

fn borrow(&self) -> &T

Неизменяемо заимствует из принадлежащего значения. Подробнее

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

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

Изменяемо заимствует из принадлежащего значения. Подробнее

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

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

🔬Это экспериментальный API, доступный только в nightly-сборке. (clone_to_uninit)
Выполняет копирующее присваивание из self в dest. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

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

Инструментирует этот тип с помощью указанного Span, возвращая обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая обёртку Instrumented. Подробнее

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

fn into(self) -> U

Вызывает U::from(self).

То есть это преобразование выполняется так, как предусмотрено реализацией From<T> for U.

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

type Owned = T

Тип, получаемый в результате перехода к владению данными.

fn to_owned(&self) -> T

Создаёт принадлежащие вызывающему данные из заимствованных данных, обычно путём клонирования. Подробнее

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

Использует заимствованные данные для замены принадлежащих данных, обычно путём клонирования. Подробнее

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

type Error = Infallible

Тип, возвращаемый в случае ошибки преобразования.

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

Выполняет преобразование.

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

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

Тип, возвращаемый в случае ошибки преобразования.

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

Выполняет преобразование.

impl<T> WithSubscriber for T

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

Присоединяет указанный Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий по умолчанию Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/runtime/struct.RuntimeMetrics.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API