为进程分配cpu核心 - Linux

时间:2015-11-30 09:14:23

标签: bash process cpu affinity

有没有办法强制一个具有特定PID的进程,只能在服务器的一个cpu上执行和运行?我知道有这样的命令

taskset -cp <Cpu_Number> <Pid>

但上述命令在我的系统上不起作用。如果还有其他命令,请告诉我。

1 个答案:

答案 0 :(得分:15)

有两种方法可以将cpu核心/核心分配给正在运行的进程。

第一种方法:

taskset -cp 0,4 9030

非常清楚!将cpu核心0和4分配给pid 9030。

第二种方法:

taskset -p 0x11 9030

这有点复杂。 -p后面的十六进制数字是位掩码。可以找到here的解释,摘录如下:

  

CPU亲和性表示为位掩码,具有最低顺序   对应于第一逻辑CPU和最高位的位   对应于最后一个逻辑CPU。并非所有CPU都可能存在   给定系统但是掩码可以指定比存在的CPU更多的CPU。一个   检索到的掩码将仅反映与CPU对应的位   物理上在系统上。如果给出了无效的掩码(即,那个掩码   对应于当前系统上没有有效的CPU)错误是   回。掩码通常以十六进制形式给出。

仍然困惑?请看下面的图片:

enter image description here

我添加了与十六进制数对应的二进制文件,处理器从左开始从零开始计数。在第一个示例中,位掩码中的one对应于zero处理器,因此将为进程启用处理器。将禁用在位掩码中具有zero到其对应位置的所有处理器。事实上,这就是它被称为面具的原因。

说完所有这些后,使用taskset更改处理器关联性需要:

  

用户必须拥有CAP_SYS_NICE才能更改a的CPU亲和性   处理。任何用户都可以检索关联掩码。

请查看Capabalities Man Page

您可能有兴趣查看处理CAP_SYS_NICE的SO Question

我的资源

  1. Tutorials Point

  2. XModulo