1.2. 子​​​系​​​统​​​、​​​层​​​级​​​、​​​控​​​制​​​组​​​群​​​和​​​任​​​务​​​的​​​关​​​系​​​

请​​​记​​​住​​​ cgroup 术​​​语​​​中​​​系​​​统​​​进​​​程​​​称​​​为​​​任​​​务​​​。​​​
这​​​里​​​有​​​一​​​些​​​简​​​单​​​的​​​规​​​则​​​管​​​理​​​子​​​系​​​统​​​、​​​cgroup 层​​​级​​​以​​​及​​​任​​​务​​​之​​​间​​​的​​​关​​​系​​​,并​​​给​​​出​​​那​​​些​​​规​​​则​​​的​​​合​​​理​​​结​​​果​​​。​​​
规​​​则​​​ 1

任​​​何​​​单​​​一​​​子​​​系​​​统​​​(比​​​如​​​ cpu)最​​​多​​​可​​​附​​​加​​​到​​​一​​​个​​​层​​​级​​​中​​​。​​​

结​​​果​​​是​​​,cpu 子​​​系​​​统​​​永​​​远​​​无​​​法​​​附​​​加​​​到​​​两​​​个​​​不​​​同​​​的​​​层​​​级​​​。​​​
规​​​则​​​ 2

单​​​一​​​层​​​级​​​可​​​附​​​加​​​一​​​个​​​或​​​者​​​多​​​个​​​子​​​系​​​统​​​。​​​

结​​​果​​​是​​​,cpu 和​​​ memroy 子​​​系​​​统​​​(或​​​者​​​任​​​意​​​数​​​目​​​的​​​子​​​系​​​统​​​)都​​​可​​​附​​​加​​​到​​​单​​​一​​​层​​​级​​​中​​​,只​​​要​​​每​​​个​​​子​​​系​​​统​​​不​​​再​​​附​​​加​​​到​​​另​​​一​​​个​​​层​​​级​​​即​​​可​​​。​​​
规​​​则​​​ 3

每​​​次​​​在​​​系​​​统​​​中​​​创​​​建​​​新​​​层​​​级​​​时​​​,该​​​系​​​统​​​中​​​的​​​所​​​有​​​任​​​务​​​都​​​是​​​那​​​个​​​层​​​级​​​的​​​默​​​认​​​ cgroup(我​​​们​​​称​​​之​​​为​​​ root cgroup)的​​​初​​​始​​​成​​​员​​​。​​​对​​​于​​​您​​​创​​​建​​​的​​​任​​​何​​​单​​​一​​​层​​​级​​​,该​​​系​​​统​​​中​​​的​​​每​​​个​​​任​​​务​​​都​​​可​​​以​​​是​​​那​​​个​​​层​​​级​​​中​​​唯​​​一​​​一​​​个​​​ cgroup 的​​​成​​​员​​​。​​​单​​​一​​​任​​​务​​​可​​​以​​​是​​​在​​​多​​​个​​​ cgroup 中​​​,只​​​要​​​每​​​个​​​ cgroup 都​​​在​​​不​​​同​​​的​​​层​​​级​​​中​​​即​​​可​​​。​​​只​​​要​​​某​​​个​​​任​​​务​​​成​​​为​​​同​​​一​​​层​​​级​​​中​​​第​​​二​​​个​​​ cgroup 的​​​成​​​员​​​,就​​​会​​​将​​​其​​​从​​​那​​​个​​​层​​​级​​​的​​​第​​​一​​​个​​​ cgroup 中​​​删​​​除​​​。​​​一​​​个​​​任​​​务​​​永​​​远​​​不​​​会​​​同​​​时​​​位​​​于​​​同​​​一​​​层​​​级​​​的​​​不​​​同​​​ cgroup 中​​​。​​​

结​​​果​​​是​​​,如​​​果​​​ cpu 和​​​ memory 子​​​系​​​统​​​都​​​附​​​加​​​到​​​名​​​为​​​ cpu_and_mem 的​​​层​​​级​​​中​​​,且​​​ net_cls 子​​​系​​​统​​​是​​​附​​​加​​​到​​​名​​​为​​​ net 的​​​层​​​级​​​中​​​,那​​​么​​​运​​​行​​​的​​​ httpd 进​​​程​​​可​​​以​​​是​​​ cpu_and_mem 中​​​任​​​意​​​ cgroup 的​​​成​​​员​​​,同​​​时​​​也​​​是​​​ net 中​​​任​​​意​​​ cgroup 的​​​成​​​员​​​。​​​
httpd 进​​​程​​​所​​​在​​​ cpu_and_mem 中​​​的​​​ cgroup 可​​​将​​​其​​​ CPU 时​​​间​​​限​​​制​​​为​​​分​​​配​​​给​​​其​​​它​​​进​​​程​​​时​​​间​​​的​​​一​​​半​​​,并​​​将​​​其​​​内​​​存​​​用​​​量​​​限​​​制​​​为​​​最​​​多​​​ 1024 MB。​​​另​​​外​​​,net 中​​​的​​​ cgroup 还​​​可​​​将​​​其​​​传​​​输​​​速​​​率​​​限​​​制​​​为​​​ 30 MB/秒​​​。​​​
首​​​次​​​创​​​建​​​层​​​级​​​时​​​,该​​​系​​​统​​​中​​​的​​​每​​​个​​​任​​​务​​​都​​​至​​​少​​​是​​​一​​​个​​​ cgroup 的​​​成​​​员​​​,即​​​ root cgroup。​​​因​​​此​​​每​​​当​​​使​​​用​​​ cgroup 时​​​,每​​​个​​​系​​​统​​​任​​​务​​​总​​​是​​​至​​​少​​​在​​​一​​​个​​​ cgroup 中​​​。​​​
规​​​则​​​ 4

该​​​系​​​统​​​中​​​的​​​任​​​意​​​进​​​程​​​(任​​​务​​​)都​​​将​​​自​​​己​​​分​​​支​​​创​​​建​​​子​​​进​​​程​​​(任​​​务​​​)。​​​该​​​子​​​任​​​务​​​自​​​动​​​成​​​为​​​其​​​父​​​进​​​程​​​所​​​在​​​ cgroup 的​​​成​​​员​​​。​​​然​​​后​​​可​​​根​​​据​​​需​​​要​​​将​​​该​​​子​​​任​​​务​​​移​​​动​​​到​​​不​​​同​​​的​​​ cgroup 中​​​,但​​​开​​​始​​​时​​​它​​​总​​​是​​​继​​​承​​​其​​​父​​​任​​​务​​​的​​​ cgroup(进​​​程​​​术​​​语​​​中​​​称​​​其​​​为​​​“​​​环​​​境​​​”​​​)。​​​

cpu_and_mem 层​​​级​​​中​​​名​​​为​​​ half_cpu_1gb_max 的​​​ cgroup 成​​​员​​​的​​​任​​​务​​​,以​​​及​​​ net 层​​​级​​​中​​​ cgroup trans_rate_30 的​​​成​​​员​​​。​​​当​​​ httpd 进​​​程​​​将​​​其​​​自​​​身​​​分​​​成​​​几​​​个​​​分​​​支​​​时​​​,其​​​子​​​进​​​程​​​会​​​自​​​动​​​成​​​为​​​ half_cpu_1gb_max cgroup 和​​​ trans_rate_30 cgroup 的​​​成​​​员​​​。​​​它​​​会​​​完​​​全​​​继​​​承​​​其​​​父​​​任​​​务​​​所​​​属​​​的​​​同​​​一​​​ cgroup。​​​
此​​​后​​​,父​​​任​​​务​​​和​​​子​​​任​​​务​​​就​​​彼​​​此​​​完​​​全​​​独​​​立​​​:更​​​改​​​某​​​个​​​任​​​务​​​所​​​属​​​ cgroup 不​​​会​​​影​​​响​​​到​​​另​​​一​​​个​​​。​​​同​​​样​​​更​​​改​​​父​​​任​​​务​​​的​​​ cgroup 也​​​不​​​会​​​以​​​任​​​何​​​方​​​式​​​影​​​响​​​其​​​子​​​任​​​务​​​。​​​总​​​之​​​:所​​​有​​​子​​​任​​​务​​​总​​​是​​​可​​​继​​​承​​​其​​​父​​​任​​​务​​​的​​​同​​​一​​​ cgroup 的​​​成​​​员​​​关​​​系​​​,但​​​之​​​后​​​可​​​更​​​改​​​或​​​者​​​删​​​除​​​那​​​些​​​成​​​员​​​关​​​系​​​。​​​