标签归档:cgroup

Linux CGroup学习 – 入门篇

对于hadoop和hbase公用的集群来说,经常会发生实时性要求较高的任务被大任务抢占资源,严重的情况下,region server进程也会挂掉,集群的资源竞争日益严重。在下一代hadoop yarn中采用了cgroup对系统资源进行隔离,目前的hadoop-2.0.5-alpha版只考虑了对内存和CPU资源的隔离。最近学习了下cgroup,记录在此。

CGroup简介

cgroup的全称是Control Group(控制群组),是linux kernel里的一种资源管理机制,用来限制,记录和隔离资源。最早是2006年由Google的工程师开发,后来合并到kernel 2.6.24中.

cgroup的特点和应用场景有:

  1. 限制资源的使用:比如某个应用程序占用了大部分的系统资源,导致别的程序无法执行,或者在多核机器上,让某个应用程序只能使用某些CPU,保留一些给其他程序使用,或者限制程序只能使用最多2G的内存。
  2. 使用资源的优先权:让某个程序比另外一个程序使用更多的CPU。
  3. 记录CPU的使用量以收取费用:对于某些提供计算资源的公司来说,需要对CPU的使用进行收费,但是如果计算使用者到底使用了多少CPU呢?传统的方法是统计整个系统上所有指令使用的CPU时间,然后进行分析,现在通过cgroup很容易实现。
  4. 隔离不同群组的进程:对于不同群组的进程做到隔离,可用于lxc(linux container)。
  5. freezing: 暂停和恢复任务

各个模块介绍

cgroup使用预定义的控制器(子系统)来决定具体的资源限制类型,以及具体的限制参数,通过挂载伪文件系统的方式来读取设置、应用控制细节。cgroup包含了多个孤立的子系统,每一个子系统代表一个单一的资源,具有集中管理的便利性。可用的控制子系统主要包括:

  • blkio: 限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。
  • cpu: 为任务所使用的cpu时间提供调度控制
  • cpuacct:为任务自动生成cpu资源使用报告
  • cpuset: 为任务分配独立CPU(对于多核处理器)和内存节点
  • devices: 允许或者拒绝某些任务访问指定的设备
  • freezer: 允许挂起或者恢复群组中的任务
  • memory:限制任务所使用的内存,并自动生成内存资源报告
  • net_cls: 用类标识符(classid)来标记网络包,以便Linux流量控制(tc)能够分辨 cgroup 中的特定任务所发出的数据包
  • ns: 允许为任务分配不同的名称空间

CGroup的使用

先检查当前系统是否支持cgroup:

libcgroup工具

RHEL 6系统提供了libcgroup来管理Cgroups,该软件包中包含了一系列Cgroup工具及其使用手册。我们可以使用它来绑定Cgroups层次结构,设置Cgroups参数。如果不安装libcgroup,就需要自己手工mount挂载和用shell语句写文件的方式来设置参数了。

libcgroup的安装:

yum install libcgroup

cgconfig服务的启动和停止:

service cgconfig start|stop
--> 阅读全文