プログラムを分析するために、1つの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のベンチマーク設定ドキュメント問題と問題を軽減するための技術の良い概要を提供します。彼の記事は主にベンチマークに焦点を当てていますが、ほとんどは他の状況にも当てはまります。