XNUスレッド状態Xcode / Instrumentsでカラーコード化
-
13-12-2019 - |
質問
私は、私が理解しようとしている情報をたくさんの情報を提供するApple Instruments Toolsを使用してマルチスレッドアプリケーションの分析を行っています。ツールで色分けされているスレッド状態を説明するための良いリソースを見つけようとしています。私はXnuカーネルのドキュメントと本を探していますが、あまり運がない。
「先読み」モードと「スーパーバイザ」モードに対応する黄色と紫色がたくさんあります(フルカラーチャートは添付のイメージ内の右上に表示されます)。私が「ランニング」状態(青い)とは対照的に、これらの状態で過ごすことができることを考えると、私はそれらが参照されているものを知ることが特に興味があり、そしてそれがこれらの状態で過ごした時間を最小限に抑えることが可能であるかどうか。
解決
PreEmpted=あなたのスレッドは実行可能で、喜んで実行することができましたが、他のスレッドを支持してキックアウトしました(コンテキスト切り替え)。つまり、スレッドがI / Oやイベントで寝ていなかったことを意味し、実際にCPU集約的なことをしていました。しかしながら、量子満了または他のいくつかの優先ねじの場合、それはCPUから押し出された。
Supervisor=あなたのスレッドはカーネルモードにありました。通常、これはカーネルがあなたのスレッドによって行われたシステムコールを修理していたことを意味します。
どちらも厳密に悪いですが、:
プリエンプションの避けました:あなたの優先順位を持って遊ぶだけでは、ここでできることはできません - SetPriority APIを使用して、マイナスの良い価値を使用して、または直接優先順位を高めます。スケジューリングポリシーを使用してスレッドの設定を追加し、マッハスケジューラ(スレッドの基礎となる意思決定メーカー)を最初に置き、より多くのCPU時間を与えることもできます。
スーパーバイザモードの回避:システムコールに重い可能性があります。繰り返しますが、これは必ずしも悪いことではありません。
これが助けになることを願っています、
tg