linux - 为什么 pidstat 没有反射(reflect)我使用任务集对 CPU 亲和性所做的更改?

标签 linux bash unix ps

我想更改 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/

相关文章:

bash - 如何将位置参数传递给函数

bash - 在多台机器上并行运行脚本

bash - shell脚本内存不足

C 以字节 block 读取文件

php - 如何在php文件中指定任何主机?

php - 如何使用 PHP 在 Linux/Apache 上使用 Windows 身份验证连接到 SQL Server?

python - 如何同时为 ROS 环境变量提供两个路径?

linux - 在安装了tomcat8的centos上找不到startup.sh和shutdown.sh

linux - 使用 Perl 脚本提取 tar.gz 文件

string - 如何判断有多少文件与 unix 中的描述匹配