做人呢,最紧要就系开心啦

Linux内核之进程5:Cgroup

398次阅读
没有评论

1. 按群分组

Cgroup 按群分组,分配资源,属于二级分配

Linux 内核之进程 5:Cgroup

(1)按群组分配资源

将进程分组,多个组按权重分配 CPU 配额,单个组内任务再按进程调度算法分配

案例:启动三个 a.out,一共耗 CPU800%(八核)

Linux 内核之进程 5:Cgroup

创建两个 CGROUP:A 和 B

cd /sys/fs/cgroup/cpu
sudo mkdir A
sudo mkdir B

关注 A / B 中两个成员,

cgroup.procs:本群组包含的进程

cpu.shares:本组权重值,与其他组竞争的权重值;

Linux 内核之进程 5:Cgroup

将进程 1164/1184 加入组 A,1147 加入组 B

查看 CPU 占用情况:

Linux 内核之进程 5:Cgroup

即组 A 两进程之和与组 B 相当,因为默认权重相等;

修改组 A 权重值为 2048

echo 2048 > cpu.shares

Linux 内核之进程 5:Cgroup

三进程 CPU 占有率变为均等

Linux 内核之进程 5:Cgroup

修改组 A 权重值为 512

echo 512 > cpu.shares

Linux 内核之进程 5:Cgroup

上图看到组 A 的进程 1164,1184CPU 占用率加起来大概是组 B 一半

这里 cgroup.procs 里的进程号是动态的,进程死亡,这里进程号就会消失;

Linux 内核之进程 5:Cgroup

(2)设置群的 quota 配额:

cpu.cfs_perid_us: 默认 100ms;

cpu.cfs_quota_us:设置该群组最大可占用 CPU 比例;

Linux 内核之进程 5:Cgroup

群 A 的 CPU 占用最大 8000/100000; cfs_quota_us 可以超过 100%, 最多不超过 CPU 个数;

类似网络带宽,按付费给予配额。

还可以进一步分配每个 CPU 的具体任务,参考 cgroup 文档。

cgroup 应用案例 1:

Android 新版本中,将任务分为前端进程组,后端进程组,分配不同权重

Linux 内核之进程 5:Cgroup

这样前端进程会分配更多 CPU,后端进程 (比如后台运行支付宝和微信等) 组占用 CPU 较少,合理的提高了 CPU 利用率,提高交互型,用户体验更好。

cgroup 应用案例 2:

在云服务中,用 Cgroup 限制 CPU 配额,根据支付费用分配 CPU 资源,即使有多余 CPU 资源存在,付费用户得到的 CPU 资源也不会比原本更多。

2.sched_autogroup:

So I think this is firmly one of those“real improvement”patches. Good job. By
Linus

每一个 seesion,自动创建一个 group, 也可以关闭

leon@pc:/proc/sys/kernel\$ cat sched_autogroup_enabled

1

群默认权重是一样的,所有每个新 seesion 的 CPU 占有率都相同,也可以设置 nice;

每个 seesion 的所有进程都在一个 group;

Linux 内核之进程 5:Cgroup

3 dock 和 cgroup

启动每个 docker 是一个 group,可以设置其 CPU 占用 quota

docker run --cpu-quota 25000 --cpu-period 10000 --cpu-shares 30

linuxep/lepv0.1

4 systemd 和 cgroup

systemd 是应用层用来管理服务群组的层级关系;跟 cgroup 非常类似,

它是一个动态过程,只有设置资源限制,才会跟 cgroup 线程一一对应起来;

systemd cg 相关命令

systemd-cgls

Linux 内核之进程 5:Cgroup

systemd-cgtop

systemd-run

systemctl

set-property 限制 cgroup 的资源
sudo systemd-run -p --unit=test --slice=test ./a.out 4
sudo systemd-run -p CPUQuota=25% --unit=test --slice=test ./a.out 4

Linux 内核之进程 5:Cgroup

─test.slice

│ └─test.service

│  └─7850 /home/leon/xxx/./a.out 4

cgroup 的 cpu 目录会生成对应 test 配置文件

Linux 内核之进程 5:Cgroup

5 cpuset 和 cgroup

将 CPU 添加到 cgroup 群组,将进程添加入该群组,就限制在该群组的 CPU 运行,特别适用 NUMA 的场景

Linux 内核之进程 5:Cgroup

可以设置 cpuset.cpus

cpuset.mems

在:/sys/fs/cgroup/cpuset 创建组 A,然后往 A 添加进程,设置 A 目录下的 cpuset.cpus。

leon@:echo 0-1 > cpuset.cpus

该组的进程就只限制在指定 CPU 上运行;

ps: 另外 cgroup 同样可以对内存和 IO 做群组管理。

正文完
 
admin
版权声明:本站原创文章,由 admin 2022-01-04发表,共计1717字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)