CPUロードバランシングはどのように行われますか? [閉鎖]

CPUロードバランシングはどのように行われますか? [閉鎖]

XubuntuでFirefoxを使用する際に問題があります。時々、Firefoxは1つのCPUコアを占有し、他のすべてのコアはアイドル状態です。ウェブサイトの構築は非常に遅く、非常に迷惑です。

再起動せずにしばらくコンピュータを離れると、魔法のようなことが起こり、FirefoxがすべてのCPUコアを再び同じように使用することがわかりました。

どこかでCPUコアがキャッシュ/バッファのエントリに接続されていることを読んだので(マルチコア)、プログラムが一時的に1つのCPUコアを使用している場合は、実際にキャッシュ/バッファ操作から別のコアを解放するよりも優れています。

CPU負荷がバランスをとる方法をより詳細に説明できる人はいますか?

答え1

ls通常、UNIXおよびLinuxのスケジューリングでは、短いプログラム(たとえば、、、ps...)がたくさんあると仮定しているため、grep1つのCPUで1つのプログラムを起動します。プログラムが長期間実行されると(FirefoxやChromeなど)、カーネルは負荷の不均衡を認識し、プロセスを別のCPUに移行します。これは移行操作によって実行されます(実行に表示されますps)。

https://superuser.com/questions/440906/what-is-the-migration-process

移行の実行方法については、次を参照してください。 https://stackoverflow.com/questions/49707124/how-does-linux-kernel- migration-the-process-among-multiple-cores

 * This is how migration works:
 *
 * 1) we invoke migration_cpu_stop() on the target CPU using
 *    stop_one_cpu().
 * 2) stopper starts to run (implicitly forcing the migrated thread
 *    off the CPU) 
 * 3) it checks whether the migrated task is still in the wrong runqueue.
 * 4) if it's in the wrong runqueue then the migration thread removes
 *    it and puts it into the right queue.
 * 5) stopper completes and stop_one_cpu() returns and the migration
 *    is done.

負荷を決定する方法については、以下を参照してください。 https://github.com/torvalds/linux/blob/master/kernel/sched/fair.cそしてコメントを見てくださいmigration。ただし、通常、スケジューラは次の点を考慮する必要があります。

  • CPUはどれくらい忙しいですか?
  • 移行プロセスのコスト
  • 生成されたシステムエラーの数

その後、移行するプロセスとCPUを決定する必要があります。

すべて非常に複雑なので、これについてもっと知りたい場合は、次のことを確認することをお勧めします。 https://blog.acolyer.org/2016/04/26/the-linux-scheduler-a-decade-of-wasted-cores/ そしてオリジナルの論文: Linuxスケジューラ:無駄なコアの10年

関連情報