systemd与cgroup

简介

这里介绍systemd中与control group相关的配置。
k8s一般会建议containerd或者docker配置使用systemd来管理cgroup。

配置

cpu相关

CPUAccounting:4.15以上的内核默认值为yes,表示启动cpu计数
CPUWeight:1-10000,默认100,基于权重分配cpu时间,如果是idle,则只有cpu空闲的时候才能获取cpu
StartupCPUWeight:进程启动或者停止时的权重。
CPUQuota: 控制cpu.max(cgoup v2)或者cpu.cfs_quota_us(cgroup v1),控制进程可以获得的最大cpu时间,100%表示能获取1个cpu所有的时间。
CPUQuotaPeriodSec:CPUQuota的计算周期
AllowedCPUs:限制进程在指定的进程执行

内存相关

MemoryAccounting
MemoryMin,MemoryLow,StartupMemoryLow
MemoryHigh,StartupMemoryHigh
MemoryMax,StartupMemoryMax
MemorySwapMax,StartupMemorySwapMax
MemoryZSwapMax,StartupMemoryZSwapMax
AllowedMemoryNodes,StartupMemoryNodes

进程相关

TasksAccounting:启动进程计数
TasksMax=N:限制最多启动的进程数

网络,IO,设备,BPF相关见man手册,这里省略。

测试

#写一个无限循环的脚本
[root@testdsq system]# cat /root/code/container/systemd/test.sh
i=0
while [ 1 ]
do
 let i=i+1
done

#创建成service
[root@testdsq system]# cat test.service 
[Unit]
Description=test cgroup

[Service]
Type=simple
ExecStart=/bin/bash  /root/code/container/systemd/test.sh
KillMode=process

[Install]
WantedBy=multi-user.target

#加载test.service
[root@testdsq system]# systemctl daemon-reload

#启动test.service
[root@testdsq system]# systemctl start test.service

#top查看进程使用了100% cpu

#设置test.service最多使用50% cpu 
[root@testdsq system]# systemctl set-property test.service CPUQuota=50%

#top查看进程使用了50% cpu

#set-property会生成50-CPUQuota.conf,所以重启service上面的配置还是生效的
[root@testdsq usr]# cat /etc/systemd/system.control/test.service.d/50-CPUQuota.conf 
# This is a drop-in unit file extension, created via "systemctl set-property"
# or an equivalent operation. Do not edit.
[Service]
CPUQuota=50%

#查看systemd cgroup的树形结构,默认service放在systemd.service下面
[root@testdsq usr]# systemd-cgls

#查看systemd cgroup资源使用情况
[root@testdsq usr]# systemd-cgtop


参考

  • man systemd.resource-control
  • man systemd.service
posted @ 2024-04-19 16:34  董少奇  阅读(134)  评论(0)    收藏  举报