为了分析程序,我想在一个 CPU 上不间断地运行它。为此,我使用taskset
和的组合chrt
:
# taskset -c 1 chrt -f 99 ./my_program
现在我的问题是是否有一个工具可以让我检查进程是否/多久被内核的上下文切换中断。
答案1
您可以使用perf
;例如,
perf stat -e context-switches,cpl_cycles.ring0,cpl_cycles.ring123 your_command
将产生类似于以下内容的摘要
Performance counter stats for 'your_command':
1 context-switches
11,890,096 cpl_cycles.ring0
9,980,265 cpl_cycles.ring123
0.011218937 seconds time elapsed
0.007533000 seconds user
0.003766000 seconds sys
这表明在执行期间发生了一次上下文切换(切换到另一个进程,而不是内核)your_command
,CPU 花费了 54% 的时间来运行内核代码。
确保给定进程尽可能多地获得 CPU 的关注可能会变得相当复杂。Victor Stinner 的基准设置文档提供对问题的良好概述以及缓解这些问题的技术;他的文章主要关注基准测试,但其中大部分内容也适用于其他情况。