cgroup driver设置为cgroupfs和systemd的区别

1、在说Cgroupfs与Systemd之间的区别之前,我们需要先了解一下什么是Cgroup?

Cgroup,全称Control Group(控制组),是Linux系统内核提供的一个特性(Linux 2.6.24内核开始将Cgroup加入主线),主要用于限制和隔离一组进程对系统资源的使用,也就是做资源QoS。可控制的资源主要包括CPU、内存、block I/O、网络带宽等等。


2、什么是Cgroupfs?

Cgroup提供了一个原生接口并通过cgroupfs提供(从这句话我们可以知道cgroupfs就是Cgroup的一个接口的封装)。类似于procfs和sysfs,是一种虚拟文件系统。并且cgroupfs是可以挂载的,默认情况下挂载在/sys/fs/cgroup目录。

如下图所示,我们可以看到对应的总资源管理及细节的资源管理:

可以看到这里有很多控制文件,其中以cpuset开头的控制文件都是cpuset子系统产生的,其他文件则由Cgroup产生。tasks文件记录了这个Cgroup的所有进程(包括线程),在系统启动后默认没有对Cgroup做任何配置的情况下,cgroupfs只有一个根目录,并且系统所有的进程都在这个根目录中,即所有进程pid都在根目录的tasks文件中,如下图所示:


3、下面我们就来说一下Cgroupfs限制CPU、内存的简单操作方法:

#创建Cgrou,通过mkdir创建一个新的目录,也就是常见了一个新的Cgroup
mkdir /sys/fs/cgroup/cpuset/demo
#配置Cgrou,配置这个Cgroup的资源配额,通过以下命令,可以先哲这个Cgroup的进程只能在0号cpu上运行,并且只能在0号内存节点分配内存。
echo 0 > /sys/fs/cgroup/cpuset/demo/cpuset.cpus
echo 0 > /sys/fs/cgroup/cpuset/demo/cpuset.mems
#使能Cgroup,通过将进程id写进tasks文件,将整个进程移动到Cgroup中,Cgroup真正起作用了
echo $$ > /sys/fs/cgroup/cpuset/demo/tasks # $$表示当前进程id

4、什么是Systemd?

Systemd也是对于Cgroup接口的一个封装。systemd以PID1的形式在系统启动的时候运行,并提供了一套系统管理守护程序、库和实用程序,用来控制、管理Linux计算机操作系统资源。通过systemd-cgls命令我们可以看到systemd工作的进程PID是1,而目录/sys/fs/cgroup/systemd是systemd维护的自己使用的非subsystem的cgroups层级结构。


5、下面我们就来说一下Systemd限制CPU、内存的简单操作方法:

#限制计划任务的CPU占用为0.1个CPU,内存为200MB
systemctl set-property cron.service CPUShares=100 MemoryLimit=200M

6、总结说明

从以上的[Cgroupfs限制CPU、内存参考操作方法]及[Systemd限制CPU、内存参考操作方法]来看,相对来说Systemd更加简单,而且目前已经被主流Linux发行版所支持(Red Hat系列、Debian系列等),而且经过几个版本的迭代已经很成熟了,所以不管是Docker本身还是在K8S中建议使用Systemd来进行资源控制与管理,详细设置可以参考官方教程。

更多的关于Cgroup的资源管理,可以参考Red Hat 7的管理文档:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/index

希望以上回答对您有所帮忙,砖字不易,欢迎关注转发,谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值