第 1 章 控​​​制​​​组​​​群​​​(Cgroup)简​​​介​​​

Red Hat Enterprise Linux 6 提​​​供​​​新​​​的​​​内​​​核​​​功​​​能​​​:控​​​制​​​族​​​群​​​(control group),本​​​手​​​册​​​中​​​使​​​用​​​其​​​简​​​称​​​ cgroup。​​​Cgroup 可​​​让​​​您​​​为​​​系​​​统​​​中​​​所​​​运​​​行​​​任​​​务​​​(进​​​程​​​)的​​​用​​​户​​​定​​​义​​​组​​​群​​​分​​​配​​​资​​​源​​​ -- 比​​​如​​​ CPU 时​​​间​​​、​​​系​​​统​​​内​​​存​​​、​​​网​​​络​​​带​​​宽​​​或​​​者​​​这​​​些​​​资​​​源​​​的​​​组​​​合​​​。​​​您​​​可​​​以​​​监​​​控​​​您​​​配​​​置​​​的​​​ cgroup,拒​​​绝​​​ cgroup 访​​​问​​​某​​​些​​​资​​​源​​​,甚​​​至​​​在​​​运​​​行​​​的​​​系​​​统​​​中​​​动​​​态​​​配​​​置​​​您​​​的​​​ cgroup。​​​可​​​将​​​ cgconfig控​​​制​​​组​​​群​​​配​​​置​​​ )服​​​务​​​配​​​置​​​为​​​在​​​引​​​导​​​时​​​启​​​动​​​,并​​​重​​​新​​​建​​​立​​​您​​​预​​​先​​​定​​​义​​​的​​​ cgroup,这​​​样​​​可​​​使​​​其​​​在​​​重​​​启​​​过​​​程​​​中​​​保​​​留​​​它​​​们​​​。​​​
使​​​用​​​ cgroup,系​​​统​​​管​​​理​​​员​​​可​​​更​​​具​​​体​​​地​​​控​​​制​​​对​​​系​​​统​​​资​​​源​​​的​​​分​​​配​​​、​​​优​​​先​​​顺​​​序​​​、​​​拒​​​绝​​​、​​​管​​​理​​​和​​​监​​​控​​​。​​​可​​​更​​​好​​​地​​​根​​​据​​​任​​​务​​​和​​​用​​​户​​​分​​​配​​​硬​​​件​​​资​​​源​​​,提​​​高​​​总​​​体​​​效​​​率​​​。​​​

1.1. 如​​​何​​​管​​​理​​​控​​​制​​​组​​​群​​​

Cgroup 是​​​分​​​层​​​管​​​理​​​的​​​,类​​​似​​​进​​​程​​​,且​​​子​​​ cgroup 会​​​继​​​承​​​其​​​上​​​级​​​ cgroup 的​​​一​​​些​​​属​​​性​​​。​​​但​​​这​​​两​​​个​​​模​​​式​​​也​​​有​​​不​​​同​​​。​​​

Linux 进​​​程​​​模​​​式​​​

Linux 系​​​统​​​中​​​的​​​所​​​有​​​进​​​程​​​都​​​是​​​通​​​用​​​父​​​进​​​程​​​ init 的​​​子​​​进​​​程​​​,该​​​进​​​程​​​在​​​引​​​导​​​时​​​由​​​内​​​核​​​执​​​行​​​并​​​启​​​动​​​其​​​它​​​进​​​程​​​(这​​​些​​​进​​​程​​​会​​​按​​​顺​​​序​​​启​​​动​​​其​​​子​​​进​​​程​​​)。​​​因​​​为​​​所​​​有​​​进​​​程​​​都​​​归​​​结​​​到​​​一​​​个​​​父​​​进​​​程​​​,所​​​以​​​ Linux 进​​​程​​​模​​​式​​​是​​​一​​​个​​​单​​​一​​​层​​​级​​​结​​​构​​​,或​​​者​​​树​​​结​​​构​​​。​​​
另​​​外​​​,init 之​​​外​​​的​​​每​​​个​​​ Linux 进​​​程​​​都​​​会​​​继​​​承​​​其​​​父​​​进​​​程​​​的​​​环​​​境​​​(比​​​如​​​ PATH 变​​​量​​​)[1]和​​​某​​​些​​​属​​​性​​​(比​​​如​​​打​​​开​​​文​​​件​​​描​​​述​​​符​​​)。​​​

Cgroup 模​​​式​​​

Cgroup 与​​​进​​​程​​​在​​​以​​​下​​​方​​​面​​​类​​​似​​​:
  • 它​​​们​​​是​​​分​​​级​​​的​​​,且​​​
  • 子​​​ cgroup 会​​​继​​​承​​​父​​​ cgroup 的​​​某​​​些​​​属​​​性​​​。​​​
根​​​本​​​的​​​不​​​同​​​是​​​在​​​某​​​个​​​系​​​统​​​中​​​可​​​同​​​时​​​存​​​在​​​不​​​同​​​的​​​分​​​级​​​ cgroup。​​​如​​​果​​​ Linux 进​​​程​​​模​​​式​​​是​​​进​​​程​​​的​​​单​​​一​​​树​​​模​​​式​​​,那​​​么​​​ cgroup 模​​​式​​​是​​​一​​​个​​​或​​​者​​​更​​​多​​​任​​​务​​​的​​​独​​​立​​​、​​​未​​​连​​​接​​​树​​​(例​​​如​​​:进​​​程​​​)。​​​
需​​​要​​​多​​​个​​​独​​​立​​​ cgroup 分​​​级​​​,因​​​为​​​每​​​个​​​分​​​级​​​都​​​会​​​附​​​加​​​到​​​一​​​个​​​或​​​者​​​多​​​个​​​子​​​系​​​统​​​中​​​。​​​子​​​系​​​统​​​[2]代​​​表​​​单​​​一​​​资​​​源​​​,比​​​如​​​ CPU 时​​​间​​​或​​​者​​​内​​​存​​​。​​​Red Hat Enterprise Linux 6 提​​​供​​​ 9 个​​​ cgroup 子​​​系​​​统​​​,根​​​据​​​名​​​称​​​和​​​功​​​能​​​列​​​出​​​如​​​下​​​。​​​

Red Hat Enterprise Linux 中​​​的​​​可​​​用​​​子​​​系​​​统​​​

  • blkio -- 这​​​个​​​子​​​系​​​统​​​为​​​块​​​设​​​备​​​设​​​定​​​输​​​入​​​/输​​​出​​​限​​​制​​​,比​​​如​​​物​​​理​​​设​​​备​​​(磁​​​盘​​​,固​​​态​​​硬​​​盘​​​,USB 等​​​等​​​)。​​​
  • cpu -- 这​​​个​​​子​​​系​​​统​​​使​​​用​​​调​​​度​​​程​​​序​​​提​​​供​​​对​​​ CPU 的​​​ cgroup 任​​​务​​​访​​​问​​​。​​​
  • cpuacct -- 这​​​个​​​子​​​系​​​统​​​自​​​动​​​生​​​成​​​ cgroup 中​​​任​​​务​​​所​​​使​​​用​​​的​​​ CPU 报​​​告​​​。​​​
  • cpuset -- 这​​​个​​​子​​​系​​​统​​​为​​​ cgroup 中​​​的​​​任​​​务​​​分​​​配​​​独​​​立​​​ CPU(在​​​多​​​核​​​系​​​统​​​)和​​​内​​​存​​​节​​​点​​​。​​​
  • devices -- 这​​​个​​​子​​​系​​​统​​​可​​​允​​​许​​​或​​​者​​​拒​​​绝​​​ cgroup 中​​​的​​​任​​​务​​​访​​​问​​​设​​​备​​​。​​​
  • freezer -- 这​​​个​​​子​​​系​​​统​​​挂​​​起​​​或​​​者​​​恢​​​复​​​ cgroup 中​​​的​​​任​​​务​​​。​​​
  • memory -- 这​​​个​​​子​​​系​​​统​​​设​​​定​​​ cgroup 中​​​任​​​务​​​使​​​用​​​的​​​内​​​存​​​限​​​制​​​,并​​​自​​​动​​​生​​​成​​​由​​​那​​​些​​​任​​​务​​​使​​​用​​​的​​​内​​​存​​​资​​​源​​​报​​​告​​​。​​​
  • net_cls -- 这​​​个​​​子​​​系​​​统​​​使​​​用​​​等​​​级​​​识​​​别​​​符​​​(classid)标​​​记​​​网​​​络​​​数​​​据​​​包​​​,可​​​允​​​许​​​ Linux 流​​​量​​​控​​​制​​​程​​​序​​​(tc)识​​​别​​​从​​​具​​​体​​​ cgroup 中​​​生​​​成​​​的​​​数​​​据​​​包​​​。​​​
  • ns -- 名​​​称​​​空​​​间​​​子​​​系​​​统​​​。​​​

注意

您​​​可​​​能​​​在​​​ cgroup 文​​​献​​​,比​​​如​​​ man page 或​​​者​​​内​​​核​​​文​​​档​​​中​​​看​​​到​​​术​​​语​​​资​​​源​​​控​​​制​​​器​​​或​​​者​​​控​​​制​​​器​​​。​​​这​​​两​​​个​​​词​​​与​​​ subsystem(子​​​系​​​统​​​)的​​​含​​​义​​​相​​​同​​​,且​​​基​​​于​​​这​​​样​​​的​​​事​​​实​​​,即​​​子​​​系​​​统​​​通​​​常​​​调​​​度​​​资​​​源​​​或​​​者​​​在​​​其​​​所​​​附​​​属​​​层​​​级​​​的​​​ cgroup 中​​​应​​​用​​​限​​​制​​​。​​​
子​​​系​​​统​​​(资​​​源​​​控​​​制​​​器​​​)的​​​定​​​义​​​非​​​常​​​普​​​通​​​:它​​​是​​​根​​​据​​​一​​​组​​​任​​​务​​​行​​​动​​​的​​​东​​​西​​​,例​​​如​​​进​​​程​​​。​​​


[1] 父​​​进​​​程​​​可​​​在​​​将​​​环​​​境​​​传​​​递​​​给​​​子​​​进​​​程​​​前​​​更​​​改​​​它​​​。​​​
[2] 您​​​应​​​该​​​了​​​解​​​在​​​ libcgroup man page 和​​​其​​​它​​​文​​​档​​​中​​​,子​​​系​​​统​​​也​​​称​​​资​​​源​​​控​​​制​​​器​​​,或​​​者​​​控​​​制​​​器​​​。​​​