質問

各スレッドが生成するどのように多くのコンテキストスイッチを確認する方法はありますか? (両方で、可能であればアウト)X /秒で、あるいはそれが実行され、いくつかの時間後に集約されたデータを与えてみましょうしますか。 (Linux上またはWindows上のいずれか)

私は、全体のOSのため、またはプロセスごとの集計コンテキストの切り替え回数を与えるだけのツールを発見した。

私のプログラムは、多くのコンテキストスイッチ(50K / s)は、おそらく多くの必要はありませんになりますが、私はそれらのほとんどが起こる行う場所、最適化を開始する場所を確認していない。

役に立ちましたか?

解決

あなたがsched_switchするすべての呼び出しに必要なデータを収集するためのSystemTapを使用することができ、最近のGNU / Linuxシステムでは()。 schedtimes.stpの例は、おそらく良いスタートです: http://sourceware.org /systemtap/examples/keyword-index.html#SCHEDULERする

他のヒント

Linuxの

私は、プロセスの特定のスレッドの詳細を表示する小さなスクリプトを書きました。このスクリプトを実行することで、あなたは同様にコンテキストスイッチを見ることができます。

if [ "$#" -ne 2 ]; then
    echo "INVALID ARGUMENT ERROR: Please use ./see_thread.sh processName threadNumber"
    exit
fi
ls /proc/`pgrep $1`/task | head -n$2 | tail -n+$2>temp
cat /proc/`pgrep $1`/task/`cat temp`/sched

は、これが役立つことを願っています。

私は、特定の時間枠の間に糸で作られた自発的・非自発的なコンテキストスイッチを算出し、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秒です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top