Cgroup 基礎操作
一、cgroup介紹:
據官方文檔介紹,rhel6爲內核準備了一個新特性------資源控制,也即cgroup。此服務的軟件包是libcgroup。有了這個,你就可以分配資源,例如:CPU time,系統內存, 網絡帶寬等。這個是被cgconfig服務所控制的。如果此服務沒有啓動,在根目錄下的cgroup文件夾裏就不會存在內容。
[root@susir]#/etc/init.d/cgconfig status
[root@susir]#/etc/init.d/cgconfig stop
[root@susir]#ls /cgroup
啓動此服務之後,就會在/cgroup目錄下面多出一些內容,如圖所示:
[root@susir cgroup]# /etc/init.d/cgconfig restart
Stopping cgconfig service: [ OK ]
Starting cgconfig service: [ OK ]
[root@susir cgroup]# pwd
/cgroup
[root@susir cgroup]# ls
blkio cpu cpuacct cpuset devices freezer memory net_cls
二、cgroup各個模塊的介紹:
cgroup類似與進程,他們是分等級的,各個屬性都是從父進程哪裏繼承過來。cgroup包含了多個孤立的子系統,沒一個子系統代表一個單一的資源。rhel6中一共準備了9個子系統,以下是每個子系統的詳細說明:
? blkio 這個子系統設置限制每個塊設備的輸入輸出控制。例如:磁盤,光盤以及usb等等。
? cpu 這個子系統使用調度程序爲cgroup任務提供cpu的訪問。
? cpuacct 產生cgroup任務的cpu資源報告。
? cpuset 如果是多核心的cpu,這個子系統會爲cgroup任務分配單獨的cpu和內存。
? devices 允許或拒絕cgroup任務對設備的訪問。
? freezer 暫停和恢復cgroup任務。
? memory 設置每個cgroup的內存限制以及產生內存資源報告。
? net_cls 標記每個網絡包以供cgroup方便使用。
? ns 名稱空間子系統。
以上九個子系統之間也存在着一定的關係.詳情參閱官方文檔。
三、cgroup的使用:
1、cgroup的安裝:
在安裝系統的時候,默認已經安裝了libcgroup軟件包,如果沒有安裝可以使用以下命令進行安裝:
[root@susir /]# rpm -q libcgroup
libcgroup-0.36.1-6.el6.x86_64
如果沒有安裝請用YUM安裝。
2、cgroup服務的控制:
將其更改爲伴隨系統的啓動而啓動:
[root@susir /]# chkconfig --list cgconfig
cgconfig
0:off 1:off
2:off 3:off
4:off 5:off
6:off
[root@susir /]# chkconfig cgconfig on
[root@susir /]# chkconfig --list cgconfig
cgconfig
0:off 1:off
2:on 3:on
4:on 5:on
6:off
服務的停止和啓動
[root@susir cgroup]# /etc/init.d/cgconfig stop/start
3、cgroup的配置文件cgconfig.conf文件介紹:
在cgconfig.conf文件中,主要包含了兩個主要類型:mount和group。mount是指創建以及掛載哪些層次爲虛擬文件系統,並附上子系統的層次結構。cgconfig.conf文件的內容如下所示:
[root@susir /]# more /etc/cgconfig.conf
#
# Copyright IBM Corporation. 2007
#
# Authors:
Balbir Singh
# This program is free software; you can redistribute it and/or modify it
# under the terms of version 2.1 of the GNU Lesser General Public License
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# See man cgconfig.conf for further details.
#
# By default, mount all controllers to /cgroup/
mount {
cpuset
= /cgroup/cpuset;
cpu
= /cgroup/cpu;
cpuacct
= /cgroup/cpuacct;
memory
= /cgroup/memory;
devices
= /cgroup/devices;
freezer
= /cgroup/freezer
......省略。。。。。。。
例如cpuset=/cgroup/cputest,就可以理解爲以下幾條命令
[root@susir /]# mount -t cgroup -o cpuset cpuset /cgroup/cpuset
mount: cpuset already mounted or /cgroup/cpuset busy
[root@susir /]# umount /cgroup/cpu
cpu/ cpuacct/ cpuset/
[root@susir /]# umount /cgroup/cpuset
[root@susir /]# mount -t cgroup -o cpuset cpuset /cgroup/cpuset
4、與cgroup相關的幾個命令:
lssubsys-----顯示已經存在的子系統。
[root@susir /]# lssubsys -am
cpu /cgroup/cpu
cpuacct /cgroup/cpuacct
memory /cgroup/memory
devices /cgroup/devices
freezer /cgroup/freezer
net_cls /cgroup/net_cls
blkio /cgroup/blkio
cpuset /cgroup/cpuset
ns
上所示,除ns子系統沒有在/etc/cgconfig.conf文件裏設置外,其他的都掛載在對應的目錄下面。
lscgroup-----顯示所有的cgroup。
[root@susir /]# lscgroup
cpu:/
cpuacct:/
memory:/
devices:/
freezer:/
net_cls:/
blkio:/
cpuset:/
5、掛載與卸載子系統層次:
如上所示,各個模塊均以掛載與對於的目錄下面。以下卸載了cpu子系統層次:
[root@susir /]# umount /cgroup/cpu
[root@susir /]# lssubsys -am #(-a代表所有,-m代表顯示掛載點。)
cpuacct /cgroup/cpuacct
memory /cgroup/memory
devices /cgroup/devices
freezer /cgroup/freezer
net_cls /cgroup/net_cls
blkio /cgroup/blkio
cpuset /cgroup/cpuset
ns
cpu
其他的卸載與掛載都一樣。使用以下命令將其掛載回去:
[root@susir /]# mount -t cgroup -o cpu cpu /cgroup/cpu
[root@susir /]# lssubsys -am
cpuacct /cgroup/cpuacct
memory /cgroup/memory
devices /cgroup/devices
freezer /cgroup/freezer
net_cls /cgroup/net_cls
blkio /cgroup/blkio
cpuset /cgroup/cpuset
cpu /cgroup/cpu
ns
6、創建一個自定義的cgroup:
這裏要用到cgcreate命令,具體用法如下所示:先來看個示例:
[root@susir /]# cgcreate
Usage is cgcreate -t : -a : -g :
[root@susir /]# cgcreate -g cpu,net_cls:/test-subgroup
[root@susir /]# lssubsys -am
cpuacct /cgroup/cpuacct
memory /cgroup/memory
devices /cgroup/devices
freezer /cgroup/freezer
net_cls /cgroup/net_cls
blkio /cgroup/blkio
cpuset /cgroup/cpuset
cpu /cgroup/cpu
ns
沒有出來。看到麼。其實掛載上去之後,使用lssubsys命令是看不到的。因爲啊。創建完了之後,系統還不能掛載,因爲掛載點不存在,等掛載點創建了之後,系統會自動掛載上去的。
7、刪除cgroup
[root@susir /]# cgdelete
Usage is cgdelete [-r] : [...]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.