Windows Priority and Affinityとは何ですか?また、それはどのようなアドバタンジを提供しますか?


9

優先度とアフィニティ(タスクマネージャー内にあります)とは正確に何で、何に使用されますか。

タスクマネージャー内で見つかりました

これらの設定を使用する必要がある/使用できる状況、およびこれらの設定をカスタマイズしているときに得られる利点。

回答:


3

アフィニティの設定は何かを行いますが、それを使いたくないでしょう。

CPUアフィニティを設定すると、Windowsは選択したCPU(またはコア)のみを使用するようになります。アフィニティを単一のCPUに設定すると、WindowsはそのCPUでのみアプリケーションを実行し、他のCPUでは実行しません。

Windowsは、実行中のアプリケーションを最も使用率の低いプロセッサに自動的に配置するため、単一のCPUに制限しても、Windowsはその役割を果たせません。CPU /コア1が他のアプリケーションの実行でビジーであっても、WindowsはCPU /コア2でアフィニティが設定されたアプリケーションを実行できません。

マルチCPU /コアシステムで実行しているときに正しく動作しない古いアプリケーションを実行することが、これを実行する唯一の理由です。


5
>使いたくないでしょう。 違います。シングルスレッドアプリケーションの場合、CPUのスレッド/コアを最大限に使用することはできず、Windowsがそれを強制/トリックするためにできることは何もありません。2つのシングルスレッドアプリケーションがある場合は、Windowsに個別のスレッド/コアを使用するように指示できます。これにより、合計CPU使用率が50〜75%になるのではなく、最大で100%(各コア) 1つのプログラムで最大限に使用されている)。確かに、設定を実際に利用することはできますが、それはほとんどの人が知らない/実現しない/必要としない特定のシナリオです。
Synetech 2012

2
2つのシングルスレッドアプリケーションがある場合、Windowsはそれぞれ異なるスレッド/コアで実行され、アフィニティを設定せずにCPU使用率が100%になります。テストするために、4コアマシンでシングルスレッドプログラムの4つのインスタンスを実行し、CPU使用率を100%にしました。Windowsは、CPUを効率的にスケジュールするのに十分なほどスマートです。
shf301

それはシステムやWindowsのバージョンに依存すると思います。私はそれ(XP)が両方のコアを50〜75%でホバリングし、両方のプロセスが両方のコアに設定され、それらを手動で設定してCPUを使い果たしたことを確認しました。
Synetech 2012

@Synetech:それはほとんど不可能のようです。2つのプロセスをコアからコアに移動する必要があり、常に両方が同時に実行されたはずです。
David Schwartz

これのもう1つの有効な使用例:利用可能なすべてのCPUを利用し、他のプログラムの実行を妨げたり、ユーザー入力へのOSの応答を非常に遅くしたりするアプリケーションがあります。この場合、誰かがそのようなアプリケーションを一部のCPUのみに制限することを決定するかもしれません。開発者としては、CPUを集中的に使用するアプリケーションをプロファイリングするときにこの機能を頻繁に使用します。
Eyal Roth

2

アフィニティを設定すると、そのプロセスで実行が許可されているプロセッサがそのプロセスに通知されます。

一部のニッチなケースでは非常に便利ですが、平均的なユーザーはおそらくそれをいじる必要はありません。

たとえば、プロセスが独自のコアの実行を許可されている場合、70のウィンドウユーティリティが独自のタイムスライスのプロセッサで絶えず割り込みやスタックスワップを行わなくても、(ほぼ)リアルタイムで実行できます。リアルタイムアプリケーションは、マルチプロセッサ/マルチコアシステムが登場するまで、OSがアプリケーションを中断したり、タスクを切り替えたりするため、ウィンドウズが決して実行できなかったものでした。システムの他のすべてのアプリケーションがそのプロセッサを使用しないようにしながら、リアルタイムアプリケーションを1つのプロセッサに分離することで、ほとんどの場合それを克服できます。これは非常にニッチなテーマですが、(実際の)フライトシミュレータ、ファクトリオートメーション、制御フィードバックシステムなどのシステムは、リアルタイムアーキテクチャに依存して機能します。

プロセッサを集中的に使用するアプリケーション(VMなど)を独自のコアに分離できるため、システムの残りの部分をクロールしなくても使用できます。理論的には、ベアメタルハイパーバイザーの相互作用をサポートするプロセッサ上で実行されるハイパーバイザーは、それ自体で実行される独立したOS(ホストOSの実行に必要なプロセッサを除く)と同等のプロセッサパフォーマンスに到達できます。もちろん、実際には、独立したコア/プロセッサで実行されているVMでも、ホストOSからの少量のオーバーヘッドを受け入れる必要があります。

大量のデータをフラックスで処理するアプリケーションの場合、アプリケーションをそれ自体のプロセッサーに分離すると(さらに、複数のコアを使用する可能性がある場合)、キャッシュスワッピングが削減されます。

古いプロセッサが複数のプロセッサに分散しているときに機能しなくなると、問題を修正するために1つのコア/プロセッサに制限することができます。

特定のアプリケーションでパフォーマンス測定を行っていた場合、プロセスを分離できない限り、異なるシステム間で一貫した結果を得るのはほぼ不可能です。そうしないと、OSがアプリケーションに与える時間を制御できないためです。ほとんどの人は、ランタイムパフォーマンスを測定しても良い結果が得られないことに同意しますが、アフィニティを使用することでOSの介入(結果の一貫性が失われる)を制限できるとは考えていません。

アフィニティが重要な場合はたくさんありますが、それらが何であるかがわからない場合は、おそらく必要ありません。


アフィニティを多くの人が思っているよりもずっと役に立たないものにするのは、プロセスアフィニティを使用可能なCPUのサブセットに設定することです。これらのCPUから他のものを遮断しません。これを行うには、システム内の他のすべてのプロセスに移動して、自分が所有する必要のあるCPUからそれらを除外する必要があります。それはほとんど実用的ではありません。
ジェイミーハンラハン

サードパーティのソフトウェアを使用できます。MSがデフォルトでこの機能を含まない理由は私を超えています。
エヴァンプライス

私が書いたように、それはそれほど役に立ちません。そしてそれは、非常に誤用されやすいです。実際、アフィニティで「創造的」過ぎる通常の結果は、他の方法では実行できても、物事が実行されないことです。通常は、推奨CPUであると思われるもの以外でスレッドを実行する方が、まったく実行するよりも良いでしょう(愚かにアフィニティを設定して、アイドル状態のCPUへのアクセスを拒否した後)。Windowsのデフォルトの「理想的なプロセッサ」と「以前のプロセッサ」のメカニズムは、アフィニティマスクのこのような鈍い手段なしで、優れたキャッシュコヒーレンシを実現します。
Jamie Hanrahan、2018

2

これは、特定のシナリオで非常に役立つ機能です。アイドル状態になる傾向があるか、数分間すべてのCPUの100%を積極的に取得し、検索やビルドなどを行う傾向があるマルチスレッドアプリケーションがあるとします。このアプリケーションを「食」と呼びましょう。

また、このアプリケーションに取り組んでいる間に、CPU要件が適度であるが、本質的にはリアルタイムアプリケーションである他のアプリケーションがたくさんあるとします。たとえば、Eclipseを使用していて、ランダムにビルドを開始したり、gwtコンパイルを行ったりしているときに、コンピューターを使用して音楽をストリーミングしたり、ブラウザーウィンドウで調査を行ったりします(たとえば、ビルドの問題の原因を調査します)。 。確かに、音楽がスキップしたり、ブラウザが応答を停止したりしても死ぬことはありませんが、迷惑です。

CPUイーティングアプリを7/8コアに制限することで、他の誰もが比較的未使用のCPUにアクセスできることが保証され、コンピュータ上の他のすべてのユーザビリティの途切れや中断に常に対処する必要がなくなります。日食がすり減っている間。


この場合は、CPUホグプロセスを低い優先度に設定するだけの方がはるかに良いでしょう。
ジェイミー・ハンラハン

1

優先度が高いほど、タスクの処理が優先度の低いタスクよりも有利になります。非常に応答性が必要なアプリケーションを実行している場合や、たとえば他の非対話型プロセスが多数ある場合、優先順位を設定することで、優先順位の高いプロセスのエクスペリエンスを向上させることができます。

例:Windows Vista以降、Windows Media Playerは自動的にメディアファイルのスムーズで継続的な再生を保証するためにより高い優先順位を取得し、デフォルトでは他のプロセスで使用できるCPU時間は約20%のみです。これは、優先順位が何をするかを理解するのに役立つ例にすぎません。(Technetの VistaでのMedia Playerの優先順位について詳しく読むことができます。)

ソフトアフィニティまたはハードアフィニティを使用すると、以前にプロセスが中断され、後で再開されたときに、CPUのキャッシュにプロセスの残りが残っている可能性があるため、処理速度が向上します。


どうもありがとう!それでは、アフィニティを使用するための良いガイドは何ですか?
James Mertz、2010


アフィニティの使用に関する優れたガイド:「禁止」。
Jamie Hanrahan、2015

「他のプロセスで使用できるCPU時間は20%のみ」は正確な説明ではありません。実際の実装では、マルチメディアクラススケジューラにオプトインするスレッドは、リアルタイム優先度クラスの各スケジューリング間隔の最大 80%まで実行できます。必ずしもそれほど多く使用する必要はありません。使用しない場合もそうです。20%以上が他のスレッドで使用できます。
Jamie Hanrahan、2015

1

これの完璧な例は、古い32ビットゲーム(アプリケーション)が最新の64ビットコンピューターでエミュレートされている場合は特に、古いコンピューターゲーム(または他のソフトウェア)です。古いゲームのアフィニティを4つのコアのみに制限することで、クラッシュを回避してスタブバーンゲームを開始できるようになることがよくあります。OLDゲーム、ビデオエディター、ハードウェアアクセラレーショングラフィックソフトウェア、またはCADソフトウェアで使用される一部のレンダリングエンジンは、4つを超えるCPUコアを認識せず、起動時にクラッシュします。

これを投稿するためだけにアカウントを作成するのではなく、google 'kieseyhow'を見つけます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.