我最近看到this comment,它询问是否可以测量进程的每核CPU负载,但是没有回复它,所以我问这是一个问题。
是否存在一种机制来测量单核进程在每个核心基础上使用的周期?
更具体地说,我喜欢定期测量(让我们说每秒),就像perf一样,但没有必要使用perf。也就是说,类似于perf stat -I 500 -e cycles sleep 5
的输出,但每个CPU有一行表示进程在该CPU上运行的周期数。
答案 0 :(得分:0)
我相信这不太可能。
您可以为每个进程测量每个核心/每个CPU的周期(系统范围模式,可能需要特殊权限):
# per logical CPU / hardware thread
perf stat -a --no-aggr sleep 1
# per core
perf stat -a --per-core sleep 1
或者您可以监控给定流程的每个线程
perf --per-thread -p <pid>
奇怪的是perf
确实接受了--per-core -a -p
的组合 - 但结果是虚假的,这似乎是一个错误。
您可以使用bcc / BPF拼凑一些东西。请参阅https://github.com/iovisor/bcc#tools / http://www.brendangregg.com/linuxperf.html。我确信某种方式存在单行,但找到它可能并不容易。