据我所知(如果我错了,请纠正我),
systemctl set-property ... CPUShares=some_value
Run Code Online (Sandbox Code Playgroud)
限制整个 cgroup 单元的 CPU 时间。如果我们想限制该单元内进程的 CPU 时间,我们可以使用
systemd-run ... nice=some_value
Run Code Online (Sandbox Code Playgroud)
我想知道进程的 nice-value 和一组进程的 CPUShares-value 的概念之间是否存在一些内在差异?我们可以限制进程的 CPUShares 或设置 cgroup 单元的 nice-value 吗?我们什么时候想做一个或另一个?
好吧,让我用 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
Run Code Online (Sandbox Code Playgroud)
然后我做了sudo systemctl start idiot.service; top | grep idiot,这可以预见地告诉我idiot使用了 100% 的 CPU。现在,根据链接,我们应该可以通过以下方式限制此服务的资源:
sudo systemctl set-property idiot.service CPUShares=100
sudo systemctl daemon-reload
sudo systemctl restart idiot.service
Run Code Online (Sandbox Code Playgroud)
我做到了,然后是top. 但这仍然告诉我idiot正在使用 100% 的 CPU!我究竟做错了什么?
注意:我也尝试添加CPUShares=100到单元文件中,但无济于事