如何检查我的进程的 CPU 是如何关联的?

如何检查我的进程的 CPU 是如何关联的?

当我登录到主机时,我发现我的进程被关联到核心的子集:

# taskset -cp $$
pid 2040's current affinity list: 0-15,17,19,24-39,41,43

我不知道为什么。对于 root 或任何其他登录 shell,都会发生这种情况。我搜索了 /etc/,在文件中查找字符串“affin”或“taskset”:

find /etc -type f -exec grep -i taskset {} \; -print
find /etc -type f -exec grep -i affin {} \; -print

...没有什么。我已经表演过

# pwd
/sys/fs/cgroup/cpuset
# cat cpuset.cpus
0-47

...整艘船都在那里。我一生都无法弄清楚亲和力列表是在哪里设置的。

也许我应该提到我做过之前在这台机器上进行了 cpu 分区调整,但我将其更改为“吞吐量性能”并cpu-partitioning-variables.conf从 中删除了该文件/etc/tuned,我认为该过程可能留下了一个工件,但我找不到它。

顺便说一句,我们有:

# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-1160.36.2.el7.x86_64 root=/dev/mapper/vg00-root ro nofb splash=quiet crashkernel=auto rd.lvm.lv=vg00/root nosoftlockup mce=ignore_ce ipv6.disable=1 transparent_hugepage=never spectre_v2=off nopti LANG=en_US.UTF-8

谢谢。

答案1

感谢@artem-s-tashnikov,我认为答案可以在 initrd 中找到。看https://github.com/redhat-performance/tuned/issues/381,我说:

我对系统进行了 cpu 分区调整,CPU 关联列表为 0-15,17,19,24-39,41,43。 Tuned 在tuned.conf 中有一些组件包含“bootloader”,因此initrd 已更改。具体来说,在 initrd 中 /etc/systemd/system.conf 包含“CPUAffinity=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 19 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 41 43"

我们决定不想使用此调整,并将其更改为吞吐量性能。重新启动后,我发现systemd的CPU亲和力列表为0-15,17,19,24-39,41,43。

因此,将 cpu 分区更改为 INTO 会修改 initrd,但更改 OUT 不会将其恢复原状。它留下了这件神器,需要人们自己去发现。至少在文档中提及它可能会更好。谢谢。

相关内容