除了少数进程之外,将整个系统限制在某些核心上?

除了少数进程之外,将整个系统限制在某些核心上?

你好,我在 Linux 机器上运行一些对延迟敏感的程序(更具体地说是 CentOS 6),我不希望进程的线程被抢占。因此,在我的计划中,第一步是设置线程的 CPU 亲和性,以便线程在不同的内核上运行,这样它们就不会互相抢占。然后,第二步是确保系统中的其他进程不在这些内核上运行。

所以我的问题是:是否可以限制整个系统在某些核心上运行,除了这个进程?这应该适用于将来任何新创建的进程。

答案1

CentOS 6 上可用的 Cgroups 有一个 cpuset 子系统,允许您选择哪个进程在哪组 CPU 上运行。使用 cpuset 子系统,您可以创建一个只有一个 CPU 的 cpuset,将所有当前正在运行的进程放入该 cpuset 中,即如您在问题中所述“限制整个系统在某些核心上运行”。然后,您可以创建另一个带有剩余 CPU 的 cpuset,启动线程进程并将该进程放入新创建的 cpuset 中。

Cgroups 和 cpuset 完全由 mount、mkdir 和 echo 命令管理。

还有设定值为 cpuset 提供更高级别功能的实用程序(使用 mkdir / echo ,您需要在 cpuset 中使用 for 循环移动每个进程)。

相关内容