XubuntuでFirefoxを使用する際に問題があります。時々、Firefoxは1つのCPUコアを占有し、他のすべてのコアはアイドル状態です。ウェブサイトの構築は非常に遅く、非常に迷惑です。
再起動せずにしばらくコンピュータを離れると、魔法のようなことが起こり、FirefoxがすべてのCPUコアを再び同じように使用することがわかりました。
どこかでCPUコアがキャッシュ/バッファのエントリに接続されていることを読んだので(マルチコア)、プログラムが一時的に1つのCPUコアを使用している場合は、実際にキャッシュ/バッファ操作から別のコアを解放するよりも優れています。
CPU負荷がバランスをとる方法をより詳細に説明できる人はいますか?
答え1
ls
通常、UNIXおよびLinuxのスケジューリングでは、短いプログラム(たとえば、、、ps
...)がたくさんあると仮定しているため、grep
1つの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年。