2011-08-02 26 views
3

すべて、スレッドスイッチのプロセスを示すための方法やツールはありますか?つまり、特定の時刻にCPUがどのスレッドによって取得されたかを知ることができます。また、時間のコンテキスト切り替えコストもあります。スレッドを切り替える方法はありますか?

+0

興味深い質問。私はこれが可能かどうか疑問に思いました。この種の動作を知る必要があるシナリオを想像してみてください。 –

+0

私は時にはプログラム分析に便利だと思う、私はちょうど私のプログラムの実行をよりよく理解したいと思う、技術的に言えば、私はそれが可能だと思う – thisEric

答えて

2

SystemTapはこの種のものに便利です。これには缶詰の例sched_switch.stpがあります。

ただし、スイッチの経過時間は測定されません。それは少なくとも2つの理由から難しいようです。まず、デルタを測定するための入口と出口の適切なプローブを決定しなければならず、今は何も探していません。 (関連するプロセス内のカーネルの出入りはまあまあ近似かもしれませんが、現時点ではそれは分かりませんが)コンテキストスイッチを避けることがどれだけ重要であるかを知りたければ、余分なCPUキャッシュミスがタスクをより頻繁に切り替えることを考慮しなかった場合は、不完全な画像になります。私は答えを得るための唯一の良い方法は実験的かもしれないと思います。特に、スケジューリングパラメータを調整して(cfs-tuning.pdfを参照)、頻繁なコンテキスト切り替えがプログラムの速度にどのように影響するかを確認することができます。

1

カーネルにftraceがコンパイルされている場合は、sched_switchトレーサを使用して、プロセスウェイクアップとコンテキストスイッチのトレースを出力できます。あなたのタスクがRTスケジュールされている場合は、wakeupトレーサを使用して、タスクのウェイクアップとスケジューリングの間の最大レイテンシを知ることもできます。詳細については、Documentation/trace/ftrace.txtを参照してください。

関連する問題