3

すべて、スレッド切り替えのプロセスを表示するためのアプローチまたはツールはありますか。つまり、特定の時間に、どのスレッドが CPU を使用しているか、およびコンテキスト切り替えのコストを知ることができます。ありがとう

4

2 に答える 2

2

SystemTap は、このような場合に役立ちます。このための缶詰の例sched_switch.stpがあります。

ただし、切り替えの経過時間は測定しません。少なくともいくつかの理由から、これは難しいようです。まず、デルタを測定するために入口と出口の適切なプローブを決定する必要がありますが、今のところ何も見つかりません。(関連するプロセス内でのカーネルの開始/終了は、適切な概算である可能性があります。現在はわかりませんが、おそらくそのための何かがあるでしょう。) 2 番目に、コンテキスト スイッチを回避する価値がどの程度かを知りたい場合は、より頻繁にタスクを切り替えることによる余分な CPU キャッシュ ミスを考慮しないと、不完全な図になってしまいます。答えを得るための唯一の良い方法は、実験的に行うことだと思います。特に、スケジューリング パラメータを微調整してみてください ( cfs-tuning.pdfを参照)。) より頻繁なコンテキスト スイッチがプログラムの速度にどのように影響するかを確認します。

于 2011-09-13T16:48:18.097 に答える
1

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

于 2011-09-14T09:10:51.213 に答える