3

私は、Apple Instruments ツールを使用してマルチスレッド アプリケーションの分析を行っています。ツールで色分けされたスレッドの状態を説明する適切なリソースを見つけようとしています。私は XNU Kernel のドキュメントや本を調べてきましたが、うまくいきませんでした。

「プリエンプテッド」モードと「スーパーバイザー」モードに対応する黄色と紫がたくさんあります (添付画像の右上のポップアップにフル カラー チャートが記載されています)。「実行中」の状態 (青色) とは対照的に、これらの状態で多くの時間を費やしていることを考えると、これらの状態が何を指しているのか、また、これらの状態で過ごす時間を最小限に抑えることが可能/望ましいかどうかを知ることに特に関心があります。 .

ここに画像の説明を入力

4

1 に答える 1

3

Preempted = スレッドは実行可能であり、実行する準備ができていて、実行する意思があり、実行できましたが、他のスレッドのために追い出されました (コンテキストが切り替えられました)。これは、スレッドが I/O またはイベントでスリープ状態ではなく、実際に CPU 集中型の処理を行っていたことを意味します。ただし、クォンタムの期限切れまたは優先度の高い他のスレッドが原因で、CPU から強制的に除外されました。

Supervisor = スレッドはカーネル モードでした。通常、これはカーネルがスレッドによって行われたシステム コールを処理していたことを意味します。

どちらも厳密に悪いわけではありませんが、次のとおりです。

プリエンプションの回避: ここでできることはあまりありません。優先度を調整する以外に、負のナイス値を使用するか、setpriority API を直接使用して優先度を上げてください。また、スケジューリング ポリシーを使用してスレッドの優先順位を上げたり、Mach スケジューラ (スレッドの根底にある意思決定者) をだましてスレッドを優先させたり、より多くの CPU 時間を与えたりすることもできます。

スーパーバイザー モードを回避する: システム コールに重きを置いている可能性があります。繰り返しますが、これは必ずしも悪いことではありません。

お役に立てれば、

TG

于 2012-10-18T01:09:54.173 に答える