运行时指标
这一部分讲运行时主线。和任务指标相反,这里没有算法:RuntimeMonitor 不在运行时里装任何东西,数字全是 tokio 在调度器里攒的,本库只是定期去读、做差、求和。所以这一部分的重点是每个数字到底是什么:它由 tokio 的哪一行代码累加,什么时候才被写出来,名字和含义对不对得上。
- 稳定与不稳定两层字段:
define_runtime_metrics!给 31 个字段逐个加cfg(tokio_unstable),不开就不存在(实测 10 个和 41 个);每个字段对应 tokio 调度器的哪段代码;只开 cfg 时 tokio 每次 poll 多做什么;一个实验把各组计数各触发一遍。 - Worker 差分与 poll 时间直方图:
intervals()在调用时定下基准,metric!宏做差;busy_ratio的范围是 0 到 worker 数;tokio 只在 park 和维护时提交计数,一次长 poll 让 2 个 worker 的busy_ratio到了 4.9;mean_poll_duration是 EWMA,current_thread 上恒为 0;直方图要在Builder上打开。
flowchart TB tk["tokio:每个 worker 的 MetricsBatch"] -->|"park、维护时 submit"| at["WorkerMetrics 原子变量"] rm["RuntimeMonitor:Handle::metrics()"] --> iv["intervals():记下每个 worker 的基准"] iv --> nx["next():读累计值、做差、求和取极值"] at --> nx nx --> st["10 个稳定字段"] nx --> un["31 个 tokio_unstable 字段"]
被量的那些机制,worker 主循环、本地队列、注入队列、窃取、协作预算、阻塞池,都在 tokio 卷讲过,这里的表格逐个链过去。
💬 关联讨论
发起讨论加载中...