什么是Cgroups

(转自http://pythonic.me/Cgroups.html

cgroups(Control Group)是Linux内核的功能,简单的说,它对进程分组,然后以组为单位进行资源调度和分配,另外还能记录组内进程使用的资源数量(内存、CPU等)。

什么时候要用cgroups

如果一台机器是给多个人共享,对有些用户,你希望多分配一些资源,对另外一些用户,少分配一些资源,这时候就可以用cgroups。如果你想记录某个用户或者进程一共使用了多少资源,也可以使用cgroups。

直观印象

下面的例子中,创建两个cgroup foo和bar,给每个组分配不同的cpu优先级。

所有和cgroups的交互都是通过虚拟文件系统完成的,所以我们要挂载cgroup文件系统,像下面的例子这样。

mount -t cgroup -o cpu cgroups /mnt/cgroup # 挂载,-o参数表示加载哪些子系统(参加后面的子系统解释)

如果执行成功,我们会发现/mnt/cgroup目录下多了几个文件

-rw-r–r– 1 root root 0 Feb 13 04:19 cpu.rt_period_us
-rw-r–r– 1 root root 0 Feb 13 04:19 cpu.rt_runtime_us
-rw-r–r– 1 root root 0 Feb 13 04:19 cpu.shares
-rw-r–r– 1 root root 0 Feb 13 04:19 notify_on_release
-rw-r–r– 1 root root 0 Feb 13 04:19 release_agent
-rw-r–r– 1 root root 0 Feb 13 04:19 tasks

继续

mkdir /mnt/cgroup/foo
mkdir /mnt/cgroup/bar # 创建了两个cgroup foo和bar

设置每个cgroup的参数
echo 100 > /mnt/cgroup/foo/cpu.shares
echo 200 > /mnt/cgroup/bar/cpu.shares

为了测试,我写了下面一段简单的python代码,保存为loop.py

#!/usr/bin/env python

while True:
    pass

然后在两个terminal中分别运行loop.py,两个进程分别占用了大约49%的cpu。此时,它们都不在foot和bar cgroup中。

PID %CPU COMMAND
3722 49.9 python
3723 49.9 python

下面,把进程放入cgroup,就是简单的pid放入cgroup的task文件中。

echo 3722 > foo/cpu.shares
echo 3723 > bar/cpu.shares

立刻,cpu使用率改变了。

PID %CPU COMMAND
3722 65.3 python
3723 32.1 python

看到了吧,使用cgroup就是这么简单:先挂载,再分组,设置好参数,最后把进程扔到对应的组里就行了。

另外,子进程会自动进入父进程的cgroup中

cgroup的一些概念和名词

任务(task ),就是系统的一个进程。
控制组(control cgroup),划分出来的一组task集合,包括它们的设置。比如上面的foo,bar都是控制组。
层级(hierarchy) 控制组是有层次的,比如foo下面还可以建新的控制组,新建的控制组自动继承foo的所有配置。
子系统(subsystem),这个最重要了,一个子系统就是一个资源管理器。比如cpu子系统、内存子系统等等。全部的子系统包括blkio, cpu, cpuacct, cpuset, devices, freezer, memory, net_cls, ns等

持久化cgroups

上面例子中的cgroups配置,重启后就消失了,自然不是实用主义做法。如果想配置永久生效,要使用cgconfig服务,把配置写到/etc/cgcfongi.conf文件中。这里就不多做介绍了,毕竟本文也只是个“简介​​​”而已。


可以使用命令 cgclear 停用Cgroup
在普通的ubuntu系统中默认是没有cgroup功能的,同样也没有lxc功能。虽然这些功能可以协助我们更好的管理系统,但当用criu进行checkpoint/restore工作时,省去这些功能,可以减少不必要的checkpoint,降低失败的概率。
检查是否启用cgroup: lssubsys –all
检查是否启用lxc:lxc-checkconfig

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值