同じプロセスが異なる「CPU」で前後にバウンスされるのはなぜですか?

同じプロセスが異なる「CPU」で前後にバウンスされるのはなぜですか?

完全なCPUコアを使用しているがシングルスレッドプロセスを開始するいくつかの長期実行タスクのパフォーマンスのトラブルシューティングを行っています。私はこれらのプロセスが他のCPUにジャンプし続けることを観察しました。同じプロセスが別のCPUに移動されるのはなぜですか?カーネルスケジューラが実行中のプロセスをあまり頻繁に移動したり、まったく移動しないことは正常ではないようです。しかし、さまざまなプロセスでこれらの動作を見ることができます。プロセスがアクティブになるにつれて、複数のCPUで変更されるようです。

私はこの行動を観察しますtop。対応する列を追加しますLast Used Cpu。その後、プロセスIDが同じままであるにもかかわらず、他のCPUに変更され続ける興味深いプロセスを観察しました。

オーバーレイジョブがバランスよく実行されている間に複数のCPUでプロセスを維持する必要があるにもかかわらず、プロセスが同じCPUで一時的に互いに競合することが多いため、一部のジョブではパフォーマンスが一貫しないほど多様です。これらのタスクが実行されている間、サーバーはこれらのプロセスを除いてほとんどの時間アイドル状態です。したがって、タスク1が1つのCPUセットからプロセスを開始し、タスク2が最終的に別のCPUセットから開始され、そのまま残されることを望みます.

EC2のAmazon Linux 2カーネル4.14.x

ベストアンサー1

Linux スケジューラは自然な CPU 好みを使用します。つまり、パフォーマンス上の理由から、スケジューラはできるだけ長く同じCPUにプロセスを維持しようとします。通常のLinuxシステムで使用できますtaskset

しかし、私が理解したのは、専用インスタンスがないと、EC2で多くのCPU共有が発生することです。プロセスをvCPUに接続することもできますが、これは単なる外観です。

おすすめ記事