我想更改 PID 为 1132 的进程的 CPU 亲和性,因此我使用以下命令并成功更改了它的 CPU 亲和性:
abc@abc:~$ taskset -pc 1132
pid 1132's current affinity list: 0
但是当我尝试查看正在使用 PID 1132 的 CPU 时,我得到的是相同的旧 CPU。中央处理器 3
abc@abc:~$ pidstat |grep '1132'
10:01:37 AM 1132 0.00 0.00 0.00 0.00 3 runsv
为什么会这样?
最佳答案
关联列表是错误的。您应该将进程 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。\
检索到的掩码将仅反射(reflect)与系统上物理上的 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
关于linux - 为什么 pidstat 没有反射(reflect)我使用任务集对 CPU 亲和性所做的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29343364/