可以使用 taskset 或 systemd CPUAffinity=0

问题描述

我正在尝试查看是否可以将 dockerd 和 containerd 固定到 Linux 服务器上的核心 0,而将所有其他核心留给容器(使用 cpuset)。所以我在我的 systemd 单元上使用了它:

[Service]
cpuAffinity=0

我注意到子进程也被固定到核心 0(任务手册解释了这是预期的行为):

grep -i cpu /proc/$PID/status


我的问题是:

  1. 可以只固定父进程,但子进程可以使用cpuset 在他们想要的地方运行
  2. 有人在做这个吗?我担心的是,我希望通过将中断和其他进程绑定到核心 0 来让某些敏感进程不受干扰地工作

谢谢,

解决方法

systemd 单元上的 taskset、numactl 和 'CPUAffinity' 将(如预期的那样)使分叉的进程固定到特定的 CPU。我找不到 Docker 在等待容器执行时浪费资源的证据,所以我暂时让它不固定运行。

如果其他人提供了更好的答案,很高兴重新打开这个问题。