linux cgroup代碼學習(1)——cgroup介紹

Cgroup介紹

cgroup 的全稱是control group.是linux中用來限制,隔離任務(進程)所使用物理資源的技術。其對進程的限制主要體如今如下方面:css

  1. Resource limiation:限制CPU,內存等資源的使用html

  2. Prioritization:控制優先級node

  3. Accounting:審計和統計linux

  4. Control:掛起,恢復進程等架構

其以file system的方式提供使用,在使用時,須要先mount cgroup 文件系統,並在mount時指定須要掛載的子系統。CentOS 默認啓動已經開啓cgroup.可使用mount 命令查看當前系統cgroup掛載信息:ui

圖片描述

上圖中一樣列出了subsystem的種類,linux中子系統分爲如下幾類,能夠查看/proc/cgroups查看支持的子系統。
[root@localhost ~]# cat /proc/cgroupsspa

#subsys_name    hierarchy    num_cgroups    enabled
cpuset            2            1            1
cpu               7            1            1
cpuacct           7            1            1
memory            10           1            1
devices           3            1            1
freezer           9            1            1
net_cls           4            1            1
blkio             8            1            1        
perf_event        6            1            1
hugetlb           5            1            1

cpu//cpu的調度策略
cpuset//用來限制可以使用的cpu和內存節點
cpuacct// not clear
memory//內存大小限制
blkio//輸入輸出限制
devices//可訪問的設備
net_cls// not clear
freezer// not clearcode

須要打開某項subsystem,mount相應的subsystem 就能夠了:htm

mount -t cgroup -o cpu,cpuset cgroup /cgroup/cpu  
//mount [-t vfstype] [-o options] device dir

這邊的device參數能夠變更,系統默認的參數是cgroup, 正如上圖所示系統各個subsystem都是以cgroup mount.上處的命令也能夠寫成blog

#mount -t cgroup -o cpu test /cgroup/
#mount | grep cpu
#cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
#test on /cgroup type cgroup (rw,relatime,cpu)

這樣,咱們就可使用掛載的子系統了。
cgroup以filesystem的方式提供服務,在掛載的目錄下,mkdir可建立新的cgroup,rmdir可刪除cgroup(不能直接rm).

架構組成:

先看圖:
136188-20161027105013703-255804694.png
圖片來自:http://www.cnblogs.com/yjf512...

按照資源的劃分,系統被劃分紅了不一樣的子系統(subsystem),正如咱們上面列出的cpu, cpuset, blkio...每種資源獨立構成一個subsystem.
能夠將cgroup的架構抽象的理解爲多根的樹結構,一個hierarchy表明一棵樹,樹上綁定一個或多個subsystem.而樹的葉子則是cgroup,一個cgroup具體的限制了某種資源。一個或多個cgroup組成一個css_set。簡單來說,就是一個資源限制集合(css_set)對一種subsystem(cpu,devices)的限制條件只能有一個,這是顯然的吧...最終的task(進程)同css_set關聯,從而達到限制資源的目的。具體cgroup和css_set 關聯的方式,放在後面講。

常見的4個

  • task(任務):cgroups的術語中,task就表示系統的一個進程。

  • cgroup(控制組):cgroups 中的資源控制都以cgroup爲單位實現。cgroup表示按某種資源控制標準劃分而成的任務組,包含一個或多個子系統。一個任務能夠加入某個cgroup,也能夠從某個cgroup遷移到另一個cgroup。

  • subsystem(子系統):cgroups中的subsystem就是一個資源調度控制器(Resource Controller)。好比CPU子系統能夠控制CPU時間分配,內存子系統能夠限制cgroup內存使用量。

  • hierarchy(層級樹):hierarchy由一系列cgroup以一個樹狀結構排列而成,每一個hierarchy經過綁定對應的subsystem進行資源調度。hierarchy中的cgroup節點能夠包含零或多個子節點,子節點繼承父節點的屬性。整個系統能夠有多個hierarchy。

另外整理的:
css_set:一組關聯cgroup的集合。
cgroupfs_root:表明一個hierarchy
cgroup_subsys:表明一個subsystem

subsystem和hierarchy綁定的限制關係:

  • 限定1. 一個hierarchy上能夠綁定一個或者多個subsystem.例如 cpu & memory 綁定到了同一個hierarchy

  • 限定2. 一個subsystem不能從某個hierarchy解綁而後綁定到其餘的hierarchy 上。 可是當且僅當這些hirearchy的subsystem相同時能夠綁定,能夠理解爲給hierarchy起了別名。(subsystem不能出如今不一樣的hierarchy上,可是你拷貝了一個hierarchy則是能夠的)。

  • 限定3. 建立一個hierarchy的時候,系統全部css_set都會和此hierarchy的root cgroup關聯。也就至關於全部的task都和root cgroup關聯。可是在同一個hierarchy中,一個css_set只能和一個cgroup關聯。

  • 限定4. fork子進程的時候父子進程在同一個cgroup.可是後續能夠修改。

這裏只要對cgroup大概的層次結構瞭解就能夠了,其中subsystem,hierarchy,cgroup的詳細組織關係,留在下節說明。

相關文章
相關標籤/搜索