为什么pidstat没有反映我使用taskset在CPU亲和性方面所做的更改?

时间:2015-03-30 10:03:24

标签: linux bash unix ps

我想用PID 1132更改进程的CPU亲和性,因此我使用了以下命令并成功更改了其CPU亲和性:

abc@abc:~$ taskset -pc 1132 
pid 1132's current affinity list: 0

但是当我试图看到PID 1132的CPU正在使用时,我得到了相同的旧CPU,即。 CPU 3

abc@abc:~$ pidstat |grep '1132'
10:01:37 AM      1132    0.00    0.00    0.00    0.00     3  runsv

为什么会这样?

1 个答案:

答案 0 :(得分:0)

亲和力列表错误。您应该将进程1132分配给一个或多个cpu。目前,亲和力列表为0,这是错误的。如果要分配给CPU 0,则应使用0x00000001,如:

0x00000001 is processor #0

0x00000003 is processors #0 and #1

0xFFFFFFFF is all processors (#0 through #31).

CPU亲和性表示为位掩码,最低位对应于第一个逻辑CPU,最高位对应于最后一个逻辑CPU。并非所有CPU都可能存在于给定系统上,但掩码可能指定的CPU数量多于现有CPU数量。 \

检索到的掩码将仅反映与系统上物理上的CPU相对应的位。如果给出了无效的掩码(即,对应于当前系统上没有有效CPU的掩码),则返回错误。

在我的linux(内核4.0)上,我无法将CPU列表0x0分配给进程:

# taskset  -p 0x0 1089
pid 1089's current affinity mask: ff000000ff0000ff00ff
taskset: failed to set pid 1089's affinity: Invalid argument