1

ubuntuがインストールされているマシンでLinux 2.6.xカーネルを使用しています(これが何かを変更する場合に備えて、Ubuntuについて言及しています)。カーネルは、8 コアのマシンで実行されます。マシンはopenvzも実行しますが、これが質問の文脈を変えるとは思いません。

2 つの CPU の使用のみを許可するソフトウェアをインストールしており、最初の両方の CPU (cpumask 3) にハード CPU アフィニティを設定しています。これにより、他のプロセスのスケジューリングがどのように影響を受けるかを自問しています。私はそれについて何か読んだと思いますが、今のところ、プロセスは最初の CPU に接続される可能性が高いと思います。また、カーネルは、キャッシュの無効化を回避するために、プロセスを常に同じ CPU に保持しようとします。

マシン上では、かなりの数のプロセスが実行されています。カーネルはこの状況をどのように処理しますか? 混雑したゾーンにバインドされている間に影響を受けるため、CPU アフィニティ プロセスの実行が遅くなるのは難しいのでしょうか? カーネルはハード アフィニティをどのように考慮しますか。

4

1 に答える 1

2

長期的には、スケジューラの負荷分散コードが、バインドされていないタスクの多くを残りの CPU に移動して、このタスクが最初の 2 つにバインドされていることを説明します。

その仕組みは、各タスクが作成された CPU で開始され、マイクロ レベルでは Linux タスク スケジューラが他の CPU に関係なく各 CPU でスケジューリングの決定を行うというものです。しかし、さらにマクロ レベルのプロセス マイグレーション ロード バランシング コードがステップアップして次のように表示されます。 "。

もちろん、特定のタスクが最初の 2 つの CPU にバインドされているため、ロード バランスは移動する他のタスクを選択します。そのため、バインドされたタスクは、長期的には、バインドされていない他のタスクを他の CPU に十分に「プッシュアウト」し、バランスが保たれます。

于 2011-11-20T15:12:19.303 に答える