【问题标题】:Assigning a cpu core to a process - Linux将 CPU 核心分配给进程 - Linux
【发布时间】:2016-03-03 21:00:21
【问题描述】:

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

taskset -cp <Cpu_Number> <Pid>

但是上面的命令在我的系统上不起作用。所以请让我知道是否有任何其他命令。

【问题讨论】:

  • 什么是服务器操作系统?用户必须拥有CAP_SYS_NICE 才能更改进程的 CPU 亲和性。任何用户都可以检索关联掩码。
  • 逃避您刚刚发布的问题是不公平的。请等待即时的cmets。评论通常有助于澄清您的问题

标签: bash process cpu affinity


【解决方案1】:

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

第一种方法:

taskset -cp 0,4 9030

很清楚!将 CPU 核心 0 和 4 分配给 pid 9030。

第二种方法:

taskset -p 0x11 9030

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

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

还在困惑吗?看下图:

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

说了这么多,使用taskset来改变处理器亲和性需要:

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

请查看Capabalities Man Page

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

我的资源

  1. Tutorials Point

  2. XModulo

【讨论】:

  • @mahdi : 请问你是怎么整理出来的?
  • 您提供的第二种方法是否只是第一种方法的另一种表示?还是第二种方式对CPU分配影响更大?
  • 我使用命令ps -o pid,psr,comm -p &lt;pid&gt; 来查看分配给特定进程的cpu。然后,我尝试通过以下命令taskset -cp &lt;new_cpu&gt; &lt;pid&gt; 更改此 CPU 分配。然后我再次使用命令ps -o pid,psr,comm -p &lt;pid&gt;,我看到之前的cpu分配没有改变。
  • Linux divides the privileges traditionally associated with superuser into distinct units, known as capabilities, which can be independently enabled and disabled. 我猜默认情况下 CAP_SYS_NICE 是为 root 启用的。你可以使用这个命令lcap -c CAP_SYS_NICE 来检查是否设置了 CAP_SYS_NICE。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多