Linux
如何檢查我的程序是否/多久被核心搶占?
為了分析程序,我想在一個 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 的基准設置文件很好地概述了這些問題以及緩解這些問題的技術;他的文章側重於基準測試,但其中大部分內容適用於其他情況。