程序员

注册

 

发新话题 回复该主题

Linux系统下CPU分组功能探究 [复制链接]

1#

1.cgroup简介

cgroups是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,可以对cpu,内存等资源实现精细化的控制,开发者可以通过cgroups提供的精细化控制能力,限制某一个或者某一组进程的资源使用,比如在一个既部署了前端web服务,也部署了后端计算模块的八核服务器上,可以使用cgroups限制webserver仅可以使用其中的六个核,把剩下的两个核留给后端计算模块。cgroup是linux内核资源虚拟化的技术基石,LXC(linuxContainers)和docker容器所用到的资源隔离技术就是cgroup。

2.cgroup使用

linuxcgroup其实就是linux通过虚拟文件系统(VFS)通过文件的方式将cgroups的功能和配置暴露给用户,并将具体的实现细节隐藏起来,给用户态提供一个统一的文件系统API接口。在我的ubuntu系统中,在sys/fs目录下有一个cgroup的目录,这个目录下有很多的文件目录,例如cpu、memory等等,这些都是cgroup的子系统,每个系统用于不同的资源限制和管理。创建分组cgroup可以直接在cgroup下的CPU目录下创建自己的cgroup,mkdirtest_g1创建目录就可以了,删除目录同样使用rm-rftest_g1就可以了,其中的cgroup.procs中的就是该cgroup下的进程列表。

3.cgroup实验

下面将分别进行几组室验对比一下分组的功能和室验结果。

3.1cpu限制测试

首先启动一个终端执行程序:./fake_make-j2,在没有任何限制的情况下,CPU使用到%(双核%)然后将刚启动的进程加入到刚创建的cgrouptest_g1下。

sudosh-c"echocgroup.procs"然后通过如下命令,设置test_g1组的CPU占比为20%。

sudosh-c"echo00cpu.cfs_quota_us"当设置了test_g1组的CPU占比为20%,实验结果如下:同样的,当设置了test_g1组的CPU占比为%,实验结果如下:接下来分别测试,并列出实验结果:设置CPU占比20%80%%%%%测试结果20%80%%%%%

结论:普通进程,加入到了cgroup中,则cpu使用率会按照分配的比例进行,但是不能超过CPU最大使用率(单核%,双核%)。

3.2实验2

启动2个终端任务,其中一个加入cgroup,另一个不加入cgroup。同样分别修改cpu.cfs_quota_us值为00,,000,000,000,000。设置test_g1组的cpu占比为20%,结果如下:设置test_g1组的CPU占比为%,实验结果如下:

其他实验结果如下表:

cpu占比设置

20%

80%%%%%加入cgroup20%66%66%65%66%66%没有加入cgroup%%%%%%

结论:普通进程是两个线程,但是加入到cgroup的是fakemake进程虽然也是两个线程,但是是一个调度单元,相当于一个调度单元和两个普通线程竞争所以这个普通进程占用的其实是2/3的CPU。

3.3实验3

启动两个终端,都加入到同一个cgroup中,然后修改cpu的占比为20%,结果如下:设置cpu的占比为80%,结果如下:

其他实验结果如下:

cpu占比设置

20%

80%%%%%进程10%40%50%75%%%进程%40%50%75%%%

结论:当两个进程加入了同一个组内,则会在组内按比例分配CPU使用,由于终端1和终端2进程分别都是2个线程,因此cpu都是均分的,但是组的总占比不超过设置的值或最大CPU占比。

3.4实验4

分别创建两个组test_g1和test_g2,然后启动终端1进程并加入到test_g1组中,启动终端2进程加入到test_g2中。并启动一个单独的进程,不加入任何组。设置test_g1和test_g2组的CPU占比为20%时候,则这两个组的任务cpu占比分别为20%,未加入组的进程占比为%,结果如下:设置test_g1和test_g2组的CPU占比为%时候,结果如下:结论:组1和组2可以看作一个进程竞争,没有加入组的则为2个普通线程。因此,没有加入组的进程占比占1/2,test_g1组和test_g2组分别占1/4CPU。设置test_g1和test_g2占比低于50%比例时候,比如20%,则分别占比20%。当设置组1和组2的cpu占比超过50%时,则组1和组2的cpu占比最多为50%。

4、总结

当进程加入到cgroup组中,则可以看成1个普通线程进行竞争,其cpu占比不超过设置值或cpu最大占比。组内的进程在此基础上进行分配CPU资源。预览时标签不可点收录于话题#个上一篇下一篇
分享 转发
TOP
发新话题 回复该主题