You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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模式:

  1. 编辑grub启动配置:
    sudo nano /etc/default/grub
    
  2. 修改GRUB_CMDLINE_LINUX_DEFAULT,添加systemd.unified_cgroup_hierarchy=1,示例:
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash systemd.unified_cgroup_hierarchy=1"
    
  3. 更新grub并重启:
    sudo update-grub
    sudo reboot
    
  4. 验证v2启用状态:
    mount | grep cgroup2
    
    输出包含cgroup2 on /sys/fs/cgroup type cgroup2即表示配置成功。

步骤2:正确配置CPU隔离cgroup

避免使用cgcreate(该工具在v2环境下行为易混淆),直接操作sysfs文件系统:

  1. 进入cgroup v2挂载点:
    cd /sys/fs/cgroup
    
  2. 创建目标cgroup:
    sudo mkdir benchmark
    
  3. 为该cgroup分配要隔离的CPU(此处为CPU0):
    sudo bash -c 'echo 0 > benchmark/cpuset.cpus'
    
  4. 分配对应的内存节点:
    sudo bash -c 'echo 0 > benchmark/cpuset.mems'
    
  5. 设置分区为isolated:
    sudo bash -c 'echo isolated > benchmark/cpuset.cpus.partition'
    
  6. 验证配置:
    cat benchmark/cpuset.cpus.partition
    
    输出应为isolated,此时父cgroup的有效CPU会自动排除CPU0,实现隔离。

步骤3:将基准测试进程移入隔离cgroup

获取测试进程的PID后,将其写入cgroup的cgroup.procs文件:

sudo bash -c 'echo <你的进程PID> > benchmark/cgroup.procs'

内容的提问来源于stack exchange,提问作者Vladimir Tsyshnatiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:10:27