gpt4 book ai didi

ubuntu - 如何在 WSL2 中启用 cgroup v2?

转载 作者:行者123 更新时间:2023-12-05 01:50:30 29 4
gpt4 key购买 nike

我正在学习 cgroup v2。从 Windows 访问 cgroup v2 的最短方法是生成托管 Ubuntu 22.04 的 WSL2 实例。不幸的是,有一个问题。删除 v1 Controller 不会自动将该 Controller 添加到 v2 层次结构。

默认情况下,WSL2 同时启用了 cgroup v1cgroup v2v2 没有可用的 Controller 。几乎所有内容都由 cgroup v1 获取:

A@B$ 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 Controller 。这确实从 $ mount | 中删除了 cgroup v1 Controller grep cgroup 列表。但是随后没有任何内容添加到 v2 (/sys/fs/cgroup/unified)。

如果我理解cgroup v2 official documentation正确地,只有当 Controller 不再处理更多进程时, Controller 才可以移动到 cgroup v2

如何为 cgroup v2 启用“cpu”和“内存”等 Controller ?

最佳答案

从 Linux v5.0 开始,cgroup_no_v1=<list_of_controllers_to_disable>内核引导选项可用于禁用 cgroup v1层次结构。

对于 WSL,请关注 Microsoft documentation我们需要创建 %UserProfile%\.wslconfig包含以下内容的文件:

[wsl2]
kernelCommandLine = cgroup_no_v1=all

就是这样。
确保使用> wsl.exe --shutdown重启您的 WSL命令。
您可以在 <cgroup_fs_mount_point>/cgroup.controllers 中看到已启用的 Controller 文件。

额外调整:

  1. 默认情况下,cgroup2 可能会安装在 /sys/fs/cgroup/unified。 .有些应用程序可能不喜欢它(尤其是 docker)。将其移动到常规位置:
$ mount --move /sys/fs/cgroup/unified /sys/fs/cgroup
  1. 您可以通过编辑 /etc/fstab 来达到类似的效果文件:
cgroup2 /sys/fs/cgroup cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0

就我而言,/etc/fstab 的缺点原来的 cgroup 挂载点是 /sys/fs/cgroup/unified$ mount | grep cgroup2 中保持“悬挂”状态和 /proc/self/mountinfo .好处是 docker 服务在这种情况下可以正常启动。因此,如果您可以容忍悬空安装,/etc/fstab方法足够好。

关于ubuntu - 如何在 WSL2 中启用 cgroup v2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73021599/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com