Linux

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

  • June 22, 2021

為了分析程序,我想在一個 CPU 上不間斷地執行它。為此,我使用taskset和的組合chrt

# taskset -c 1 chrt -f 99 ./my_program

現在我的問題是,是否有一個工具可以讓我檢查程序是否/多久被上下文切換到核心中斷。

您可以使用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 的基准設置文件很好地概述了這些問題以及緩解這些問題的技術;他的文章側重於基準測試,但其中大部分內容適用於其他情況。

引用自:https://unix.stackexchange.com/questions/655293