![Linux下程序或程序组的自动CPU负载平衡?](https://linux22.com/image/680766/Linux%E4%B8%8B%E7%A8%8B%E5%BA%8F%E6%88%96%E7%A8%8B%E5%BA%8F%E7%BB%84%E7%9A%84%E8%87%AA%E5%8A%A8CPU%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1%EF%BC%9F.png)
假设以下设置:系统(Ubuntu 14.04 LTS)有 40 个内核,大量 RAM。此外还有一个仅部分多线程的程序。也就是说,它不断在多个内核上运行数小时和仅在一个内核上运行(同样持续数小时)之间切换。
我想通过并行运行该程序(比如说 10 次)来最大限度地提高该机器的 CPU 利用率,但我真的想防止出现以下情况
- 所有 10 个实例都希望在所有 40 个核心上并行运行(严重的缓存破坏)
- 我告诉每个实例最多使用 4 个核心,但随后出现这样的情况:其中 9 个核心处于单核心使用状态,而第十个核心可以暂时使用所有核心,但不能,因为它只能使用 4 个。
问题是:是否有允许这样做的实用程序/操作系统扩展?使用“renice”并不完全是必要的,尽管如果有一个自动监控程序允许动态地增加或减少进程的优先级,那么它可能非常接近。理想情况下,它会像这样工作:只要一组程序没有最大限度地利用给定的 CPU 资源,它们就可以获得它们想要的资源。但如果它们使用更多,那么运行时间最长的程序(或其他程序)将获得 CPU 的最高优先级,最终导致其他实例挨饿。
我发现最接近的是控制组(cgexec 及其朋友),但据我所知,只能定义具有固定 CPU 比率的程序组,例如,一个组中的程序最多可以使用 60% 的 CPU(即使其他 40% 未使用)并且没有办法阻止所有进程获取某些东西(再次破坏 CPU 缓存)。
答案1
看一眼任务集它可以让您设置进程可以在哪些核心(CPU)上运行。