特定の時間枠中にスレッドによって行われた自発的および非自発的なコンテキスト切り替えを計算する bash スクリプトがあります。これがあなたの目的に役立つかどうかはわかりませんが、とにかく投稿します。
このスクリプトは、プロセスのすべてのスレッドをループし、"voluntary_ctxt_switches" & "nonvoluntary_ctxt_switches"
から記録して/proc/< process-id>/task/< thread-id>/status
います。私が一般的に行っているのは、パフォーマンスの実行の開始時にこれらのカウンターを記録し、実行の終了時に再度記録してからvol & non-vol
、パフォーマンスの実行中に合計 ctx スイッチとして差を計算することです。
pid=`ps -ef | grep <process name> | grep $USER | grep -v grep | awk '{print $2}'`
echo "ThreadId;Vol_Ctx_Switch;Invol_Ctx_Switch"
for tid in `ps -L --pid ${pid} | awk '{print $2}'`
do
if [ -f /proc/$pid/task/$tid/status ]
then
vol=`cat /proc/$pid/task/$tid/status | grep voluntary_ctxt_switches | grep -v nonvoluntary_ctxt_switches | awk '{print $NF}'`
non_vol=`cat /proc/$pid/task/$tid/status | grep nonvoluntary_ctxt_switches | awk '{print $NF}'`
fi
echo "$tid;$vol;$non_vol"
done
スクリプトは少し重いです。私の場合、プロセスには約 2500 のスレッドがあります。ctx スイッチを収集する合計時間は約 10 秒です。