From 234690c8232dde0ebeab9d0ed7469650196c7b57 Mon Sep 17 00:00:00 2001 From: Noah Kennedy Date: Fri, 3 Mar 2023 17:08:23 -0600 Subject: [PATCH] rt: add io_driver_ready_count metric (#40) --- Cargo.toml | 2 +- src/runtime.rs | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index fdc7666..a5ca53e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ rt = ["tokio"] tokio-stream = "0.1.11" futures-util = "0.3.19" pin-project-lite = "0.2.7" -tokio = { version = "1.26.0", features = ["rt", "stats", "time"], optional = true } +tokio = { version = "1.26.0", features = ["rt", "stats", "time", "net"], optional = true } [dev-dependencies] axum = "0.6" diff --git a/src/runtime.rs b/src/runtime.rs index 4498486..d9bcef3 100644 --- a/src/runtime.rs +++ b/src/runtime.rs @@ -944,6 +944,12 @@ pub struct RuntimeMetrics { /// ##### Definition /// This metric is derived from [`tokio::runtime::RuntimeMetrics::budget_forced_yield_count`]. pub budget_forced_yield_count: u64, + + /// Returns the number of ready events processed by the runtime’s I/O driver. + /// + /// ##### Definition + /// This metric is derived from [`tokio::runtime::RuntimeMetrics::io_driver_ready_count`]. + pub io_driver_ready_count: u64, } /// Snapshot of per-worker metrics @@ -971,6 +977,7 @@ pub struct RuntimeIntervals { // Number of tasks scheduled from *outside* of the runtime num_remote_schedules: u64, budget_forced_yield_count: u64, + io_driver_ready_count: u64, } impl RuntimeIntervals { @@ -979,6 +986,7 @@ impl RuntimeIntervals { let num_remote_schedules = self.runtime.remote_schedule_count(); let budget_forced_yields = self.runtime.budget_forced_yield_count(); + let io_driver_ready_events = self.runtime.io_driver_ready_count(); let mut metrics = RuntimeMetrics { workers_count: self.runtime.num_workers(), @@ -994,12 +1002,14 @@ impl RuntimeIntervals { min_busy_duration: Duration::from_secs(1000000000), min_local_queue_depth: usize::MAX, budget_forced_yield_count: budget_forced_yields - self.budget_forced_yield_count, + io_driver_ready_count: io_driver_ready_events - self.io_driver_ready_count, ..Default::default() }; self.num_remote_schedules = num_remote_schedules; self.started_at = now; self.budget_forced_yield_count = budget_forced_yields; + self.io_driver_ready_count = io_driver_ready_events; for worker in &mut self.workers { worker.probe(&self.runtime, &mut metrics); @@ -1084,6 +1094,7 @@ impl RuntimeMonitor { workers, num_remote_schedules: self.runtime.remote_schedule_count(), budget_forced_yield_count: self.runtime.budget_forced_yield_count(), + io_driver_ready_count: self.runtime.io_driver_ready_count(), } } }