Linux下程序或程序组的自动CPU负载平衡?

假设以下设置:系统(Ubuntu 14.04 LTS),具有40个内核,大量RAM。 另外一个只有部分multithreading的程序。 也就是说,它不断地在多个核心上运行数小时,然后只在一个核心上运行(也是几个小时)。

我想通过并行运行该程序来最大限度地提高该机器的CPU利用率,例如10次,但是我真的想要防止出现

  1. 所有10个实例都希望并行运行在全部40个内核上(可怕的caching垃圾)
  2. 我告诉每个实例,最多使用4个内核,但是有些情况下,其中9个是单核使用,十分之一可以暂时使用所有内核,但是不能使用,因为它只允许使用4个内核。

问题是:是否有公用事业/操作系统扩展,允许? 使用“renice”并不完全是需要的,尽pipe如果有一个自动的主pipe允许dynamic地renice进程,可能会非常接近。 理想情况下,它可以这样工作:只要一组程序不能最大化给定的CPU资源,就可以获得尽可能多的CPU资源。 但是,如果他们使用更多,那么具有最长运行时间(或其他)的程序将获得CPU的最高优先级,最终会使其他实例挨饿。

我发现的最接近的是控制组(cgexec和朋友),但是从我所知道的只能定义具有固定CPU比率的程序组,例如,组中的程序最多可以使用60%的CPU(即使其他40%是未使用的),并且无法阻止所有进程得到某些东西(再次,垃圾CPUcaching)。

看一下taskset ,它可以让你设置一个进程可以运行的核心(CPU)。