Ubuntu 22.04下使用cgroup v2隔离CPU失败的技术求助
解决cgroup v2设置
cpuset.cpus.partition=isolated时的"Invalid argument"错误 问题根源
你的错误主要来自三个核心原因:Ubuntu 22.04默认启用cgroup混合模式(而非纯v2层级)、cgroup配置顺序错误、cgcreate工具在v2环境下的兼容性问题。以下是针对性的解决方案:
步骤1:切换到cgroup v2统一层级
Ubuntu 22.04默认使用cgroup v1/v2混合模式,而cpuset.cpus.partition是v2独有的属性,需先切换到纯v2模式:
- 编辑grub启动配置:
sudo nano /etc/default/grub - 修改
GRUB_CMDLINE_LINUX_DEFAULT,添加systemd.unified_cgroup_hierarchy=1,示例:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=1" - 更新grub并重启:
sudo update-grub sudo reboot - 验证v2启用状态:
输出包含mount | grep cgroup2cgroup2 on /sys/fs/cgroup type cgroup2即表示配置成功。
步骤2:正确配置CPU隔离cgroup
避免使用cgcreate(该工具在v2环境下行为易混淆),直接操作sysfs文件系统:
- 进入cgroup v2挂载点:
cd /sys/fs/cgroup - 创建目标cgroup:
sudo mkdir benchmark - 为该cgroup分配要隔离的CPU(此处为CPU0):
sudo bash -c 'echo 0 > benchmark/cpuset.cpus' - 分配对应的内存节点:
sudo bash -c 'echo 0 > benchmark/cpuset.mems' - 设置分区为
isolated:sudo bash -c 'echo isolated > benchmark/cpuset.cpus.partition' - 验证配置:
输出应为cat benchmark/cpuset.cpus.partitionisolated,此时父cgroup的有效CPU会自动排除CPU0,实现隔离。
步骤3:将基准测试进程移入隔离cgroup
获取测试进程的PID后,将其写入cgroup的cgroup.procs文件:
sudo bash -c 'echo <你的进程PID> > benchmark/cgroup.procs'
内容的提问来源于stack exchange,提问作者Vladimir Tsyshnatiy
相关产品推荐
相关产品推荐

