如何在 Linux 上设置进程的处理器关联性?
答案1
我为此使用了任务集。如果您安装了任务集,类似于:
taskset -cp 0,2 45678
将设置 id 为 45678 的进程与 cpu 1 和 3 具有关联性。
答案2
在进程内部,调用将是sched_setaffinity()
,或者对于 pthreads 的东西,pthread_setaffinity_np()
与此相关的是,如果您担心程序的 CPU 关联性,那么也值得关注它是如何进行内存分配的。内存连接到多个控制器(即多个 CPU 插槽,每个都有自己的)的大型系统在不同的 CPU-内存对之间将具有可变的延迟和带宽。您还需要使用它所numactl
使用的命令或系统调用来研究 NUMA 关联性。我参与的一个程序由此获得了 10% 的性能提升。
答案3
您需要安装schedutils
(Linux 调度程序实用程序)。我已经在我的 Ubuntu 桌面上使用了它。
顺丰关联
答案4
taskset -c 1-3 ./a.out arg1 arg2
a.out
使用给定参数和设置为处理器 1、2 或 3(从零开始)的亲和力启动进程。
这是一个最小的 C 测试程序,可用于查看它的实际情况:https://stackoverflow.com/questions/10490756/how-to-use-sched-getaffinity-and-sched-setaffinity-in-linux-from-c/50117787#50117787