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