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] : [...]
發佈了16 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章