3.4. cpuset

cpuset 子​​​系​​​统​​​为​​​ cgroup 分​​​配​​​独​​​立​​​ CPU 和​​​内​​​存​​​节​​​点​​​。​​​可​​​根​​​据​​​用​​​以​​​下​​​参​​​数​​​指​​​定​​​每​​​个​​​ cpuset,每​​​个​​​参​​​数​​​都​​​在​​​控​​​制​​​组​​​群​​​虚​​​拟​​​文​​​件​​​系​​​统​​​中​​​有​​​单​​​独​​​的​​​伪​​​文​​​件​​​

重要

有​​​些​​​子​​​系​​​统​​​拥​​​有​​​强​​​制​​​参​​​数​​​,您​​​在​​​可​​​以​​​将​​​任​​​务​​​移​​​动​​​到​​​使​​​用​​​那​​​些​​​子​​​系​​​统​​​的​​​ cgroup 前​​​必​​​须​​​设​​​定​​​这​​​些​​​参​​​数​​​。​​​例​​​如​​​:在​​​您​​​将​​​任​​​务​​​移​​​动​​​到​​​使​​​用​​​ cpuset 子​​​系​​​统​​​的​​​ cgroup 前​​​,必​​​须​​​为​​​那​​​个​​​ cgroup 定​​​义​​​ cpuset.cpus 和​​​ cpuset.mems 参​​​数​​​。​​​
cpuset.cpus(强​​​制​​​)
指​​​定​​​允​​​许​​​这​​​个​​​ cgroup 中​​​任​​​务​​​访​​​问​​​的​​​ CPU。​​​这​​​是​​​一​​​个​​​用​​​逗​​​号​​​分​​​开​​​的​​​列​​​表​​​,格​​​式​​​为​​​ ASCII,使​​​用​​​小​​​横​​​线​​​("-")代​​​表​​​范​​​围​​​。​​​例​​​如​​​:
0-2,16
代​​​表​​​ CPU 0、​​​1、​​​2 和​​​ 16。​​​
cpuset.mems(强​​​制​​​)
指​​​定​​​允​​​许​​​这​​​个​​​ cgroup 中​​​任​​​务​​​可​​​访​​​问​​​的​​​内​​​存​​​节​​​点​​​。​​​这​​​是​​​一​​​个​​​用​​​逗​​​号​​​分​​​开​​​的​​​列​​​表​​​,格​​​式​​​为​​​ ASCII,使​​​用​​​小​​​横​​​线​​​("-")代​​​表​​​范​​​围​​​。​​​例​​​如​​​:
0-2,16
代​​​表​​​内​​​存​​​节​​​点​​​ 0、​​​1、​​​2 和​​​ 16。​​​
cpuset.memory_migrate
包​​​含​​​用​​​来​​​指​​​定​​​当​​​ cpuset.mems 中​​​的​​​值​​​更​​​改​​​时​​​是​​​否​​​应​​​该​​​将​​​内​​​存​​​中​​​的​​​页​​​迁​​​移​​​到​​​新​​​节​​​点​​​的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​默​​​认​​​情​​​况​​​下​​​禁​​​止​​​内​​​存​​​迁​​​移​​​(0)且​​​页​​​就​​​保​​​留​​​在​​​原​​​来​​​分​​​配​​​的​​​节​​​点​​​中​​​,即​​​使​​​在​​​ cpuset.mems 中​​​现​​​已​​​不​​​再​​​指​​​定​​​这​​​个​​​节​​​点​​​。​​​如​​​果​​​启​​​用​​​(1),则​​​该​​​系​​​统​​​会​​​将​​​页​​​迁​​​移​​​到​​​由​​​ cpuset.mems 指​​​定​​​的​​​新​​​参​​​数​​​中​​​的​​​内​​​存​​​节​​​点​​​中​​​,可​​​能​​​的​​​情​​​况​​​下​​​保​​​留​​​其​​​相​​​对​​​位​​​置​​​ - 例​​​如​​​:原​​​来​​​由​​​ cpuset.mems 指​​​定​​​的​​​列​​​表​​​中​​​第​​​二​​​个​​​节​​​点​​​中​​​的​​​页​​​将​​​会​​​重​​​新​​​分​​​配​​​给​​​现​​​在​​​由​​​ cpuset.mems 指​​​定​​​的​​​列​​​表​​​的​​​第​​​二​​​个​​​节​​​点​​​中​​​,如​​​果​​​这​​​个​​​位​​​置​​​是​​​可​​​用​​​的​​​。​​​
cpuset.cpu_exclusive
包​​​含​​​指​​​定​​​是​​​否​​​其​​​它​​​ cpuset 及​​​其​​​上​​​、​​​下​​​级​​​族​​​群​​​可​​​共​​​享​​​为​​​这​​​个​​​ cpuset 指​​​定​​​的​​​ CPU 的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​默​​​认​​​情​​​况​​​下​​​(0)CPU 不​​​是​​​专​​​门​​​分​​​配​​​给​​​某​​​个​​​ cpuset 的​​​。​​​
cpuset.mem_exclusive
包​​​含​​​指​​​定​​​是​​​否​​​其​​​它​​​ cpuset 可​​​共​​​享​​​为​​​这​​​个​​​ cpuset 指​​​定​​​的​​​内​​​存​​​节​​​点​​​的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​默​​​认​​​情​​​况​​​下​​​(0)内​​​存​​​节​​​点​​​不​​​是​​​专​​​门​​​分​​​配​​​给​​​某​​​个​​​ cpuset 的​​​。​​​专​​​门​​​为​​​某​​​个​​​ cpuset 保​​​留​​​内​​​存​​​节​​​点​​​(1)与​​​使​​​用​​​ cpuset.mem_hardwall 启​​​用​​​内​​​存​​​ hardwall 功​​​能​​​是​​​一​​​致​​​的​​​。​​​
cpuset.mem_hardwall
包​​​含​​​指​​​定​​​是​​​否​​​应​​​将​​​内​​​存​​​页​​​面​​​的​​​内​​​核​​​分​​​配​​​限​​​制​​​在​​​为​​​这​​​个​​​ cpuset 指​​​定​​​的​​​内​​​存​​​节​​​点​​​的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​默​​​认​​​情​​​况​​​下​​​为​​​ 0,属​​​于​​​多​​​个​​​用​​​户​​​的​​​进​​​程​​​共​​​享​​​页​​​面​​​和​​​缓​​​冲​​​。​​​启​​​用​​​ hardwall 时​​​(1)每​​​个​​​任​​​务​​​的​​​用​​​户​​​分​​​配​​​应​​​保​​​持​​​独​​​立​​​。​​​
cpuset.memory_pressure
包​​​含​​​运​​​行​​​在​​​这​​​个​​​ cpuset 中​​​产​​​生​​​的​​​平​​​均​​​内​​​存​​​压​​​力​​​的​​​只​​​读​​​文​​​件​​​。​​​启​​​用​​​ cpuset.memory_pressure_enabled 时​​​,这​​​个​​​伪​​​文​​​件​​​中​​​的​​​值​​​会​​​自​​​动​​​更​​​新​​​,否​​​则​​​伪​​​文​​​件​​​包​​​含​​​的​​​值​​​为​​​ 0。​​​
cpuset.memory_pressure_enabled
包​​​含​​​指​​​定​​​系​​​统​​​是​​​否​​​应​​​该​​​计​​​算​​​这​​​个​​​ cgroup 中​​​进​​​程​​​所​​​生​​​成​​​内​​​存​​​压​​​力​​​的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​计​​​算​​​出​​​的​​​值​​​会​​​输​​​出​​​到​​​ cpuset.memory_pressure,且​​​代​​​表​​​进​​​程​​​试​​​图​​​释​​​放​​​使​​​用​​​中​​​内​​​存​​​的​​​比​​​例​​​,报​​​告​​​为​​​尝​​​试​​​每​​​秒​​​再​​​生​​​内​​​存​​​的​​​整​​​数​​​值​​​再​​​乘​​​ 1000。​​​
cpuset.memory_spread_page
包​​​含​​​指​​​定​​​是​​​否​​​应​​​将​​​文​​​件​​​系​​​统​​​缓​​​冲​​​平​​​均​​​分​​​配​​​给​​​这​​​个​​​ cpuset 的​​​内​​​存​​​节​​​点​​​的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​默​​​认​​​情​​​况​​​为​​​ 0,不​​​尝​​​试​​​为​​​这​​​些​​​缓​​​冲​​​平​​​均​​​分​​​配​​​内​​​存​​​页​​​面​​​,且​​​将​​​缓​​​冲​​​放​​​置​​​在​​​运​​​行​​​生​​​成​​​缓​​​冲​​​的​​​进​​​程​​​的​​​同​​​一​​​节​​​点​​​中​​​。​​​
cpuset.memory_spread_slab
包​​​含​​​指​​​定​​​是​​​否​​​应​​​在​​​ cpuset 间​​​平​​​均​​​分​​​配​​​用​​​于​​​文​​​件​​​输​​​入​​​/输​​​出​​​操​​​作​​​的​​​内​​​核​​​缓​​​存​​​板​​​的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​默​​​认​​​情​​​况​​​是​​​ 0,即​​​不​​​尝​​​试​​​平​​​均​​​分​​​配​​​内​​​核​​​缓​​​存​​​板​​​,并​​​将​​​缓​​​存​​​板​​​放​​​在​​​生​​​成​​​这​​​些​​​缓​​​存​​​的​​​进​​​程​​​所​​​运​​​行​​​的​​​同​​​一​​​节​​​点​​​中​​​。​​​
cpuset.sched_load_balance
包​​​含​​​指​​​定​​​是​​​否​​​在​​​这​​​个​​​ cpuset 中​​​跨​​​ CPU 平​​​衡​​​负​​​载​​​内​​​核​​​的​​​标​​​签​​​(0 或​​​者​​​ 1)。​​​默​​​认​​​情​​​况​​​是​​​ 1,即​​​内​​​核​​​将​​​超​​​载​​​ CPU 中​​​的​​​进​​​程​​​移​​​动​​​到​​​负​​​载​​​较​​​低​​​的​​​ CPU 中​​​以​​​便​​​平​​​衡​​​负​​​载​​​。​​​
请​​​注​​​意​​​:如​​​果​​​在​​​任​​​意​​​上​​​级​​​ cgroup 中​​​启​​​用​​​负​​​载​​​平​​​衡​​​,则​​​在​​​ cgroup 中​​​设​​​定​​​这​​​个​​​标​​​签​​​没​​​有​​​任​​​何​​​效​​​果​​​,因​​​为​​​已​​​经​​​在​​​较​​​高​​​一​​​级​​​ cgroup 中​​​处​​​理​​​了​​​负​​​载​​​平​​​衡​​​。​​​因​​​此​​​,要​​​在​​​ cgroup 中​​​禁​​​用​​​负​​​载​​​平​​​衡​​​,还​​​要​​​在​​​该​​​层​​​级​​​的​​​每​​​一​​​个​​​上​​​级​​​ cgroup 中​​​禁​​​用​​​负​​​载​​​平​​​衡​​​。​​​这​​​里​​​您​​​还​​​应​​​该​​​考​​​虑​​​是​​​否​​​应​​​在​​​所​​​有​​​平​​​级​​​ cgroup 中​​​启​​​用​​​负​​​载​​​平​​​衡​​​。​​​
cpuset.sched_relax_domain_level
包​​​含​​​ -1 到​​​小​​​正​​​数​​​间​​​的​​​整​​​数​​​,它​​​代​​​表​​​内​​​核​​​应​​​尝​​​试​​​平​​​衡​​​负​​​载​​​的​​​ CPU 宽​​​度​​​范​​​围​​​。​​​如​​​果​​​禁​​​用​​​了​​​ cpuset.sched_load_balance,则​​​该​​​值​​​毫​​​无​​​意​​​义​​​。​​​
根​​​据​​​不​​​同​​​系​​​统​​​构​​​架​​​这​​​个​​​值​​​的​​​具​​​体​​​效​​​果​​​不​​​同​​​,但​​​以​​​下​​​值​​​是​​​常​​​用​​​的​​​:
cpuset.sched_relax_domain_level 值​​​
值​​​效​​​果​​​
-1为​​​负​​​载​​​平​​​衡​​​使​​​用​​​系​​​统​​​默​​​认​​​值​​​
0不​​​执​​​行​​​直​​​接​​​负​​​载​​​平​​​衡​​​;负​​​载​​​平​​​衡​​​只​​​是​​​阶​​​段​​​性​​​的​​​
1在​​​同​​​一​​​核​​​中​​​的​​​跨​​​线​​​程​​​直​​​接​​​负​​​载​​​平​​​衡​​​
2在​​​同​​​一​​​软​​​件​​​包​​​中​​​的​​​跨​​​线​​​程​​​直​​​接​​​负​​​载​​​平​​​衡​​​
3在​​​同​​​一​​​节​​​点​​​或​​​者​​​刀​​​片​​​中​​​的​​​跨​​​线​​​程​​​直​​​接​​​负​​​载​​​平​​​衡​​​
4在​​​不​​​使​​​用​​​统​​​一​​​内​​​存​​​访​​​问​​​(NUMA)构​​​架​​​中​​​跨​​​多​​​个​​​ CPU 的​​​直​​​接​​​负​​​载​​​平​​​衡​​​
5在​​​使​​​用​​​统​​​一​​​内​​​存​​​访​​​问​​​(NUMA)构​​​架​​​中​​​跨​​​多​​​个​​​ CPU 的​​​直​​​接​​​负​​​载​​​平​​​衡​​​