如何在WSL2中为cgroup v2启用cpu、memory等控制器?
如何在WSL2的Ubuntu 22.04中为cgroup v2启用CPU、内存等控制器?
对于仅有Windows设备的用户,获取支持cgroup v2的最简方式是创建Ubuntu 22.04的WSL2实例,但默认情况下WSL2同时启用cgroup v1和v2层级,所有控制器都归属v1:
$ mount -l | grep cgroup tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755) cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu) cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) cgroup on /sys/fs/cgroup/net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids) cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
直接执行umount /sys/fs/cgroup/*移除v1控制器后,v2层级(/sys/fs/cgroup/unified)并不会新增控制器——这是因为cgroup v1控制器仍在被系统进程占用,不符合官方文档中“控制器不再处理任何进程才能移至v2层级”的要求。
解决方法:让WSL2以cgroup v2单模式启动
无需在运行中调整,直接修改WSL2配置,让系统启动时就禁用cgroup v1,将所有控制器归属到v2层级:
- 在Windows用户目录(如
C:\Users\<你的用户名>)下创建或编辑.wslconfig文件 - 添加以下配置内容:
[wsl2] kernelCommandLine = cgroup_no_v1=all cgroup_enable=memory swapaccount=1cgroup_no_v1=all:禁用所有cgroup v1控制器cgroup_enable=memory:确保内存控制器在v2中启用swapaccount=1:开启swap资源统计(可选,根据需求添加)
- 保存文件后,在Windows命令提示符或PowerShell中执行:
wsl --shutdown - 重新启动WSL2实例,验证配置生效:
- 查看cgroup挂载情况:
此时应仅显示cgroup2的挂载条目mount | grep cgroup - 确认可用控制器:
输出会包含cat /sys/fs/cgroup/cgroup.controllerscpu、memory等你需要的控制器
- 查看cgroup挂载情况:
如果不需要完全禁用cgroup v1,仅需将特定控制器移至v2,可将cgroup_no_v1=all替换为具体控制器列表,例如cgroup_no_v1=cpu,memory。但单v2模式更适合需要纯cgroup v2环境的场景。
内容的提问来源于stack exchange,提问作者Ivan_a_bit_Ukrainivan
相关产品推荐
相关产品推荐

