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

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

  •  
  •   wniming · 12 小时 56 分钟前 · 494 次点击

    先说一下需求,我有一台 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  
       12 小时 35 分钟前
    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
       11 小时 15 分钟前
    @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  
       10 小时 14 分钟前
    @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
       9 小时 47 分钟前
    @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  
       8 小时 20 分钟前
    @wniming #4 说明 lxc 这个坏东西想办法把自己漏出去了?要么试一试
    systemd-run --user --scope -p "Delegate=yes" -p "CPUWeight=10" --unit lxc-unit lxc-start -F f42
    yanqiyu
        6
    yanqiyu  
       8 小时 17 分钟前
    @wniming #4 突然意识到还有个可能的办法是设置 lxc-.scope.d 里面的 drop-in 来配 CPUWeight ,语法可以看 https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2965 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:19 · PVG 22:19 · LAX 07:19 · JFK 10:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.