设置(系统范围内)CPU 亲和性以在 Linux 平台上运行进程

设置(系统范围内)CPU 亲和性以在 Linux 平台上运行进程

我正在进行一项研究,即调度多个并行应用程序(例如,OpenMP/pthreaded 应用程序)并在基于 Linux 的多处理器平台上的特定(分区)内核上执行应用程序。

我们可以使用sched_setaffinity()系统调用为每个应用程序设置 CPU 亲和性。但是,如您所知,Linux 也管理(所有)正在运行的程序。因此,我安排的应用程序的执行有时会被 Linux 安排的其他进程中断。

我想将所有进程和守护进程(除了我调度的应用程序)设置为 CPU 0。我的第一个想法是通过遍历内核模块中的 init 任务中的所有任务来手动设置 CPU 0。但结果会受到Linux负载均衡的影响。我们需要另一种方法来关闭或管理 Linux CPU 负载平衡。

有没有可能的方法或系统配置来做到这一点?我的目标平台是AMD Opteron服务器(包含64核),Linux版本是3.19。

答案1

您应该能够通过告诉内核仅使用第一个NCPU 来禁用自动负载平衡。例如,将以下内容添加到引导参数中,应该可以在 CPU #0 上有效地运行整个系统(因为系统将仅使用单个 CPU):

maxcpus=1

然后使用taskset或类似方法在不同的 CPU 上运行您的进程。

相关内容