在这里,每一列都是一个 CPU 内核,每一行都是一个事件。man perf-sched可以比我更详细地解释这些。perf schedule latency记录并告诉您每个任务的执行在调度中经历了多少延迟。
$ sudo perf sched latency | grep busyloop
busyloop:1315372 | 26548.094 ms | 677 | avg: 0.055 ms | max: 0.660 ms | max start: 179800.883053 s | max end: 179800.883713 s
这就是 Linux 具有事件挂钩的目的,您可以将它们与
perf
收集统计数据
我将从一些简单的事情开始:
尝试这个:
busyloop.c
编译:
跑步:
你有你的答案 - 有点。那是时间安排切换。这确实包括您的进程本身进入内核,而不是被中断。
减去指定两者时得到的数字,
sched_switch
然后系统调用输入计数:在这个负载更高的示例运行中,有 765 次上下文切换,但其中只有 30 次是由进程自己执行系统调用引起的。
实时统计
perf stat
通常也可以使用相同的命令行选项实时观察可以做什么perf top
(
perf top
,perf record
,perf report
在没有任何特定事件可观察的情况下做一些非常棒的事情——他们观察在或多或少的定期采样中你的 CPU 核心在哪个函数中的频率。这是在实际工作负载情况下优化软件和系统的极好的第一步.但那导致这里很远!)深入追踪
如果您想要非常详细的东西,
perf sched
这是一个非常强大的工具。在这里,每一列都是一个 CPU 内核,每一行都是一个事件。
man perf-sched
可以比我更详细地解释这些。perf schedule latency
记录并告诉您每个任务的执行在调度中经历了多少延迟。很简约!