V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

用普通用户运行的 lxc 如何设置 cgroup cpu 调度的优先级?

  •  
  •   wniming · 119 天前 · 1503 次点击
    这是一个创建于 119 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说一下需求,我有一台 9950x 的台式机作为 all in one 服务器,其中有一个用普通用户运行的 lxc 是作为编译服务器使用的,我希望在执行编译任务时能吃满系统的所有 cpu 资源,但如果在执行编译任务时这台机的其他服务也需要 cpu 资源,作为编译服务器的 lxc 容器能给其他的服务让步,所以需要给 lxc 容器设置最低的 cpu 调度优先级。

    如果是 root 用户运行的 lxc 可以在 lxc 的容器的配置文件里用 lxc.cgroup2.cpu.weight 或 lxc.cgroup2.cpu.weight.nice 来设置,但用普通用户运行的 lxc 这两个设置都不起作用(测试方法是在 lxc 容器内和容器外各运行一个吃满所有 cpu 的进程,然后通过 top 查看两个进程各占用多少的 cpu ),已经问了 chatgpt ,结果 chatgpt 给了很多不存在的配置,感觉还是不如来这里问 v 友靠谱。

    这里说的普通用户运行的 lxc 是指用 https://linuxcontainers.org/lxc/getting-started/ 这篇文档里 "Create Unprivileged Containers as a User" 这个部分的配置方式配置的 lxc 。

    物理机的系统是 fedora 42 。

    6 条回复    2025-05-08 14:02:19 +08:00
    yanqiyu
        1
    yanqiyu  
       119 天前
    systemd 应该默认给了 [email protected] 的 Delegate=cpu ,这样子 rootless 应该能够操作 [email protected] 下面的 cpu controller 才对?

    要不要试一试用
    systemd-run --unit=lxc-unit --user -p CPUWeight=10 --collect --pty lxc ...
    来启动 lxc 看看能不能把 lxc 放进去设置了 cpu controller 的环境?
    wniming
        2
    wniming  
    OP
       119 天前
    @yanqiyu 我也觉得理论上应该起作用,但是刚才我用一个全新安装的 fedora 42 又重新试了一下还是不行,而且如果是在 lxc 配置文件里指定 lxc.cgroup2.cpu.weight 的话,在 lxc 内部 cat /sys/fs/cgroup/cpu.weight 是能看到变化的,但如果是用 systemd-run --unit=lxc-unit --user -p CPUWeight=10 --collect --pty lxc-start -F f42 这条命令的话,在 lxc 内部 cat /sys/fs/cgroup/cpu.weight 没有看到变化。
    yanqiyu
        3
    yanqiyu  
       119 天前
    @wniming cgroup2 是一个树状的结构,要是你 systemd-cgls 显示 lxc 的容器内部的进程(和他们的 cgroup 控制器)在 lxc-unit 下面的话就是生效了。

    你可以把这个 weight 理解成 systemd 给 lxc-unit 设置的低 weight 其实是控制 lxc-unit 的整个树的 weight 都低,再往下的 weight 可以理解成树内部的优先级的分配,所以要是 lxc 创建了额外的 cgroup 层级你看到/sys/fs/cgroup/cpu.weight =100 是正常的。
    wniming
        4
    wniming  
    OP
       119 天前
    @yanqiyu systemd-cgls 的输出结果中没有 lxc-unit , 而且在 sysfs 下查看虽然有 lxc-unit.service 但是这个和 lxc-f42-0.scope 是平级关系

    root@localhost:/home/d# cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/app.slice/lxc-unit.service/cpu.weight
    10
    root@localhost:/home/d#
    root@localhost:/home/d# cat /sys/fs/cgroup/user.slice/user-1000.slice/[email protected]/app.slice/lxc-f42-0.scope/cpu.weight
    100
    root@localhost:/home/d#
    yanqiyu
        5
    yanqiyu  
       119 天前
    @wniming #4 说明 lxc 这个坏东西想办法把自己漏出去了?要么试一试
    systemd-run --user --scope -p "Delegate=yes" -p "CPUWeight=10" --unit lxc-unit lxc-start -F f42
    yanqiyu
        6
    yanqiyu  
       119 天前
    @wniming #4 突然意识到还有个可能的办法是设置 lxc-.scope.d 里面的 drop-in 来配 CPUWeight ,语法可以看 https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5723 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 45ms · UTC 06:09 · PVG 14:09 · LAX 23:09 · JFK 02:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.