【发布时间】:2020-09-07 19:58:48
【问题描述】:
我想获得时间序列
t0, misses
...
tN, misses
其中tN 是时间戳(秒分辨率),misses 是内核为我的 PID 进行磁盘 IO 以在进程确实访问时加载 mmap()-ed 内存区域的缺失页面的次数到那个记忆。好的,也许磁盘 IO 和内存访问之间的连接更难跟踪,让我们假设我的程序不能用另一个(而不是评估丢失的 mmapped 内存)原因来做任何磁盘 io。我想,我需要在 perf world 中跟踪一个名为 node-load-misses 的东西。
您知道如何使用 eBPF 收集此类数据吗?我应该使用什么探针?
尝试使用perf record 用于类似目的:我不喜欢性能记录的数据量。我记得尝试是这样的(我也不记得我是如何解析那个 output.data 文件的):
perf record -p $PID -a -F 10 -e node-loads -e node-load-misses -o output.data
我认为 eBPF 可以提供一些便利,以更少的开销方式实现这样的事情。
【问题讨论】:
-
Pavelkolodin、cache-misses 或 node-* 事件不适用于磁盘 IO 事件。这些未命中是 CPU 管道和 L2/L3/NUMA 内存硬件计数器;并且磁盘 I/O (如加载丢失的页面)是由 Linux 内核在软件中处理的 pagefault(这可作为软件事件 perf record -e page-faults 获得)。您应该尝试跟踪(trace-cmd 或 ftrace 或
perf trace -e 'exceptions:page_fault_user')。故障追踪was planned for perf tool in 2012,补丁在lwn.net/Articles/602658提出