为进程分配cpu核心 - Linux

Adm*_*mia 13 bash cpu process affinity

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

taskset -cp <Cpu_Number> <Pid>
Run Code Online (Sandbox Code Playgroud)

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

sjs*_*sam 17

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

第一种方法:

taskset -cp 0,4 9030
Run Code Online (Sandbox Code Playgroud)

很清楚!将cpu核0和4分配给pid 9030.

第二种方法:

taskset -p 0x11 9030
Run Code Online (Sandbox Code Playgroud)

这有点复杂.后面的十六进制数-p是一个位掩码.可在此处找到解释,其摘录如下:

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

仍然困惑?看下图:

在此输入图像描述

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

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

用户必须拥有CAP_SYS_NICE才能更改进程的CPU关联.任何用户都可以检索关联掩码.

请查看Capabalities Man Page.

您可能有兴趣看一下处理CAP_SYS_NICE的SO问题.

我的资源

  1. 教程点

  2. XModulo

  • “Linux 将传统上与超级用户相关的权限划分为不同的单元,称为功能,可以独立启用和禁用。”我猜默认情况下,为 root 启用了 CAP_SYS_NICE。您可以使用以下命令检查 CAP_SYS_NICE 是否已设置命令“lcap -c CAP_SYS_NICE”。 (2认同)