我正在尝试使用 cgroup v2 中的 cpuset 控制器隔离一些延迟敏感进程的 CPU 核心。
我创建了一个群组lowlatency
:
mkdir /sys/fs/cgroup/lowlatency
并将其限制为仅使用1-7,9-15
CPU:
echo "1-7,9-15" > /sys/fs/cgroup/lowlatency/cpuset.cpus
另外,我将此组作为root
新的 cpuset 分区的一部分:
echo "root" > /sys/fs/cgroup/lowlatency/cpuset.cpus.partition
最后,根组不再使用独立的 CPU 1-7,9-15
:
cat /sys/fs/cgroup/cpuset.cpus.effective
0,8
问题在于根子组中的进程仍然使用错误的 CPU。
CPU 亲和力掩码是正确的:
杀死并重新启动后,它们被放置在正确的CPU上(0和8)。这是 cgroup 中的错误吗?我可以在不重新启动的情况下将这些进程移至新的 cpuset 吗?
我尝试使用cpuset.cpus.partition=root
和taskset -cp 4 1079
手动删除低延迟组,并且无需重新启动即可工作: