如何检查我的进程是否被内核抢占/多久被内核抢占?

如何检查我的进程是否被内核抢占/多久被内核抢占?

为了分析程序,我想在一个 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 的基准设置文档提供对问题的良好概述以及缓解这些问题的技术;他的文章主要关注基准测试,但其中大部分内容也适用于其他情况。

相关内容