我想用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
为什么会这样?
答案 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