如何檢查我的進程是否被核心搶佔/多久被核心搶佔?

如何檢查我的進程是否被核心搶佔/多久被核心搶佔?

為了分析程序,我想在一個 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 的基準設定文檔提供對問題的良好概述以及緩解這些問題的技術;他的文章主要關注基準測試,但其中大部分內容也適用於其他情況。

相關內容