linux cgconfig 是什么服务
发布网友
发布时间:2022-04-22 08:08
我来回答
共1个回答
热心网友
时间:2022-06-18 08:31
1. cgroup介绍
cgroup是control group的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。
子系统是根据cgroup对任务的划分功能将任务按照一种指定的属性划分成的一个组,主要用来实现资源的控制。在cgroup中,划分成的任务组以层次结构的形式组织,多个子系统形成一个数据结构中类似多根树的结构。cgroup包含了多个孤立的子系统,每一个子系统代表单一的资源,目前,redhat默认支持10个子系统,但默认只挂载了8个子系统,ubuntu 12.04 默认支持8个子系统,但默认只挂载了5个子系统。
redhat默认支持和挂载的子系统如下图所示。
ubuntu 12.04默认支持和挂载的子系统如下图所示。
当然也用户可以自定义子系统并进行挂载。
下面对每一个子系统进行简单的介绍:
blkio : 这个子系统设置*每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。
cpu : 这个子系统使用调度程序为cgroup任务提供cpu的访问。
cpuacct : 产生cgroup任务的cpu资源报告。
cpuset : 如果是多核心的cpu,这个子系统会为cgroup任务分配单独的cpu和内存。
devices : 允许或拒绝cgroup任务对设备的访问。
freezer : 暂停和恢复cgroup任务。
memory : 设置每个cgroup的内存*以及产生内存资源报告。
net_cls : 标记每个网络包以供cgroup方便使用。
ns : 名称空间子系统。
perf_event: 增加了对每group的监测跟踪的能力,即可以监测属于某个特定的group的所有线程以及 运行在特定CPU上的线程,此功能对于监测整个group非常有用,具体参见:
http://lwn.net/Articles/421574/
2. libcgroup工具安装
redhat系统:
yum install libcgroup
ubuntu系统:
sudo apt-get install cgroup-bin
cgroup服务的启动和停止:
service cgconfig start|stop
cgroup启动时,会读取配置文件/etc/cgconfig.conf的内容,根据其内容创建和挂载指定的cgroup子系统。
3.cgroup配置文件分析
/etc/cgconfig.conf是cgroup配置工具libcgroup用来进行cgroup组的定义,参数设定以及挂载点定义的配置文件,
主要由mount和group两个section构成。
(1)mount section的语法格式如下:
mount {
= ;
...
}
#########################################
# controller:内核子系统的名称
# path:该子系统的挂载点
#########################################
举个例子:
mount {
cpuset = /cgroup/red;
}
上面定义相当于如下shell指令:
mkdir /cgroup/red
mount -t cgroup -o cpuset red /cgroup/red
(2)group section的语法格式如下:
group
{
[
]
{
= ;
…
}
…
}
################################################################################
## name: 指定cgroup的名称
## permissions:可选项,指定cgroup对应的挂载点文件系统的权限,root用户拥有所有权限。
## controller:子系统的名称
## param name 和 param value:子系统的属性及其属性值
#################################################################################
举个例子:
mount { ## 定义需要创建的cgroup子系统及其挂载点,这里创建cpu与cpuacct(统计)两个cgroup子系统
cpu = /mnt/cgroups/cpu;
cpuacct = /mnt/cgroups/cpu;
}
group daemons/www { ## 定义daemons/www(web服务器进程)组
perm { ## 定义这个组的权限
task {
uid = root;
gid = webmaster;
}
admin {
uid = root;
gid = root;
}
}
cpu { ## 定义cpu子系统的属性及其值,即属于词组的任务的权重为1000
cpu.shares = 1000;
}
}
group daemons/ftp { ## 定义daemons/ftp(ftp进程)组
perm {
task {
uid = root;
gid = ftpmaster;
}
admin {
uid = root;
gid = root;
}
}
cpu { ## 定义词组的任务的权重为500
cpu.shares = 500;
}
}
上面配置文件定义相当于执行了如下shell命令:
mkdir /mnt/cgroups/cpu
mount -t cgroup -o cpu,cpuacct cpu /mnt/cgroups/cpu
mkdir /mnt/cgroups/cpu/daemons
mkdir /mnt/cgroups/cpu/daemons/www
chown root:root /mnt/cgroups/cpu/daemons/www/*
chown root:webmaster /mnt/cgroups/cpu/daemons/www/tasks
echo 1000 > /mnt/cgroups/cpu/daemons/www/cpu.shares
mkdir /mnt/cgroups/cpu/daemons/ftp
chown root:root /mnt/cgroups/cpu/daemons/ftp/*
chown root:ftpmaster /mnt/cgroups/cpu/daemons/ftp/tasks
echo 500 > /mnt/cgroups/cpu/daemons/ftp/cpu.shares
至于,cgroup的其他相关知识,将在后续的文章中介绍。