CPU负载如何平衡?

CPU负载如何平衡?

我在 Xubuntu 上使用 Firefox 时遇到了问题。有时,Firefox 会占用一个 CPU 核心,而所有其他核心都处于空闲状态。网站建设非常缓慢而且非常烦人。

我注意到,当我将计算机放置一段时间(无需重新启动)时,神奇的事情就会发生,然后 Firefox 再次平等地使用所有 CPU 核心。

在某处,我读到 CPU 核心附加到缓存/缓冲区中的项目,因此当(多核)程序临时使用一个 CPU 核心时,实际上更好,而不是从缓存/缓冲区作业中释放其他核心。

有人可以进一步解释一下 CPU 负载如何平衡吗?

答案1

一般来说,UNIX 和 Linux 调度假定有很多短程序(例如ls, ps, grep...),因此它将在一个 CPU 上启动一个程序。随着程序运行时间延长(例如 Firefox 或 Chrome),内核会意识到负载不平衡,并将进程迁移到不同的 CPU。这是由迁移作业完成的(如运行所示ps)。

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

要了解迁移是如何完成的,请参阅: https://stackoverflow.com/questions/49707124/how-does-linux-kernel-migrate-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 调度程序:浪费核心的十年

相关内容