为什么使用 CPUShares 属性时此 systemd 服务资源不受限制?

为什么使用 CPUShares 属性时此 systemd 服务资源不受限制?

好吧,让我亲自动手使用 cgroups 和 systemd,我编写了我能想到的最愚蠢的 C 程序(只是一个计时器和一个自旋锁 while 循环)并将其命名为idiot,我在其中附带了以下idiot.service文件/sys/fs/systemd/system/

[Unit]
Description=Idiot - pretty idiotic imo

[Service]
Type=simple
ExecStart=/path/to/idiot
User=bruno
CPUShares=100

[Install]
WantedBy=default.target

然后我这样做了sudo systemctl start idiot.service; top | grep idiot,这不出所料地告诉我idiotCPU 利用率为 100%。现在,根据关联,我们应该能够通过以下方式限制该服务的资源:

sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service

我这样做了,然后是top.但这仍然告诉我idiotCPU 利用率为 100%!我究竟做错了什么?

注意:我也尝试添加CPUShares=100到单元文件中,但无济于事

答案1

根据man systemd.resource.controlCPUShares=weight将按如下方式工作:

可用 CPU 时间根据 CPU 时间共享权重在一个切片内的所有单元之间分配。

由于您没有告诉我们有关同一切片的其他成员的任何信息,因此我认为没有其他成员,因此服务使用所有 CPU 是合适的。

如果你想玩CPU控制,试试CPUQuota=20%。该指令的记录如下:

CPUQuota=20% 确保执行的进程在一个 CPU 上永远不会获得超过 20% 的 CPU 时间。

相关内容