(Translated by https://www.hiragana.jp/)
cgroups - 维基百科,自由的百科全书 とべ转到内容ないよう

cgroups

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

cgroups
原作げんさくしゃPaul Menage あずか Rohit Seth
開發かいはつしゃkernel.org (Tejun Heoあずか其他成員せいいん)以及freedesktop.org
くび发布2007ねん,​17ねんまえ​(2007
编程语言Cげん
操作そうさけいLinux
类型行程こうていぐんぐみてき資源しげん管理かんりこうのう
许可协议GPL あずか LGPL
网站www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt あずか www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/
Unified hierarchy cgroups 且 systemd.

cgroups,其名稱めいしょうげんひかえせいぐんぐみ英語えいごcontrol groupsてき簡寫,Linuxないかくてきいち个功のうようらいきりせいひかえせいあずか分離ぶんりいち行程こうていぐんぐみてき资源(如CPU、うちそん、磁盘输入输出とう[1]

這個せんあん最早もはやゆかりGoogleてき工程こうてい主要しゅようPaul MenageRohit Seth)ざい2006ねん發起ほっき最早もはやてき名稱めいしょうため进程容器ようき(process containers)[2]ざい2007ねんいんためざいLinux內核なか容器ようき(container)這個名詞めいしゆう許多きょた不同ふどうてき意義いぎため避免混亂こんらんじゅうしん命名めいめいためcgroup,なみ且被合併がっぺいいた2.6.24はんてきないかくちゅう(该版ほん于2008ねん1がつ发布)[3]以后,开发じん员陆续添加てんかりょう许多しんこうのうひかえせいれい如2014ねんkernfsてき支持しじ[4]防火ぼうかこうのう[5]かず统一层次结构[6]。cgroup v2ざいLinuxないかく4.5ちゅうごう[7]せっ口和くちわ内部ないぶこうのう发生りょう重大じゅうだい变化[8]

こうのう

[编辑]

cgroupsてき一个设计目标是为不同的用例提供统一的接口,从控せい单一进程(ぞうniceいた作業さぎょう系統けいとうそうきょなずらえぞうOpenVZLinux-VServerLXC)。cgroups提供ていきょう

  • 资源げんせい(Resource limiting):组以被设置ちょう过设じょうてきうちそんきりせい(这也包括ほうかつ页面缓存えいPage_cache[9] [10]、I/O带宽げんせい[11]、CPUはい额限せい[12]、CPU集合しゅうごうげんせい[13]ある最大さいだい开文件数けんすう[14]
  • 优先级设じょう(Prioritization):いち可能かのう会得えとくいたさらだいてきCPU[15] ある磁盘IO吞吐りょう[16]
  • 结算(Accounting):衡量いちてき资源使用しようじょう况,以用于计费等目的もくてき[17]
  • ひかえせい(Control):冻结なかてき进程,运行检查てんえいApplication_checkpointing和重かずえしん启动。[17]

使用しよう

[编辑]

ひかえせい组(cgroup)一组受相同条件约束的进程,并与一组参数或限制相关联。这些组可以是层次结构てき意味いみごと个组从其ちち组继承げんせい

うちかくどおり过cgroupせっこう提供ていきょう对多个控せい(也称为子けい统)てき访问[18]れい如,“memory”ひかえせいげんせいないそん使用しよう,“cpuacct”记录CPU使用しようじょう况等。

ひかえせい组可以通过多种方しき使用しよう

  • 动读うつし cgroup てききょ拟文けんけい统。
  • 使用しよう cgcreatecgexec cgclassifyらい libcgroupとう工具こうぐそく时创たてかず管理かんりぐん组。
  • つう过“规则引擎もり护程じょ”,以根すえ配置はいち动将特定とくていよう户、组或命令めいれいてき进程うつり动到cgroupsちゅう
  • 间接どおり使用しよう cgroups てき其他软件,如DockerFirejail、LXC[19]libvirtsystemdOpen Grid Scheduler/Grid Engine[20],以及Googleやめ停止ていし开发てきlmctfy

Linux ないかくぶん包含ほうがんりょうひかえせい版本はんぽん1(cgroup v1)[21] かず版本はんぽん2(cgroup v2)[22]てき一些设置和使用的技术细节。

也可以使用しよう systemd-cgtop 命令めいれい[23]按资げん使用しようじょう况显しめせ顶级ひかえせい组。

じゅうしん设计

[编辑]

cgroupsてきおもしん设计はじめ于2013ねん[24]ずいきさきざいLinuxないかくてき3.153.16はん本中ほんなか引入りょう额外てきあらため变。[25][26][27]

命名めいめいそら间隔离

[编辑]

虽然cgroups工作こうさくてきわざ部分ぶぶんただしLinuxないかくてき一个相关特性是命名空间隔离,它将一组进程分离开来,使つかい它们无法“いた”其他组中てき资源。れい如,PID命名めいめいそら间在ごと命名めいめいそら间中提供ていきょうりょういち独立どくりつてき进程标识まい举。还有可用かようてき挂载、よう户、UTS、网络SysV IPC命名めいめいそら间。

  • PID namespace (PID命名めいめいそら间) 提供ていきょうりょう进程标识(PID)、进程れつひょう及其详细しんいきてきぶん离。虽然しんてき命名めいめいそら间与其他どう命名めいめいそら间隔离,ただし其“ちち命名めいめいそら间中てき进程仍然以看いた命名めいめいそら间中てき所有しょゆう进程,つきかんPIDごう不同ふどう[28]
  • Network namespace (网络命名めいめいそら间) へだた离了(物理ぶつりあるきょ拟的)网络せっこうひかえせい、iptables防火ぼうか墙规则、みちよしひょうとう。网络命名めいめいそら间可以使用しよう"veth"きょ拟以ふとし网设备连せっざいいちおこり
  • "UTS" namespace まこと更改こうかいしゅつくえめい
  • Mount namespace まこと许创けん不同ふどうてきぶんけんけい统布きょくあるはたぼう些挂载点设置为只读。[29]
  • IPC namespace へだた离了命名めいめいそら间之间的System V进程间通信つうしん
  • User namespace ざい命名めいめいそら间之间隔离用户ID。[30]
  • Cgroup namespace [31]

命名めいめいそら间是どおり过"unshare"命令めいれいあるけい统调よう创建てきあるものさく为"clone"けい统调ようちゅうてき"new"标志。[32]

ざい cgroups 开发早期そうき添加てんかりょう"ns"けい统,以整合せいごう命名めいめいそら间和ひかえせい组。如果挂载りょう"ns"ひかえせい组,まい命名めいめいそら间也かいざいひかえせい组层结构ちゅう创建いち个新てき组。这是いち个实验,きさき认为与cgroups APIふとしひきはい,并从ないかくちゅううつりじょ

Linuxてき命名めいめいそら间受到りょう贝尔实验しつきゅうごう项目ちゅう广泛使用しようてきさら通用つうようてき命名めいめいそら间功のうてき启发。[33]

统一层次结构(Unified hierarchy)

[编辑]

Kernfs于2014ねん3がつ引入Linuxないかく版本はんぽん为3.14,主要しゅよう作者さくしゃTejun Heo。[34]いち独立どくりつてきkernfsてき主要しゅよう动机いちcgroupsぶんけんけい统。Kernfs基本きほんじょうどおり过将いち些sysfs逻辑拆分为一个独立实体来创建的,从而为其ないかくけい统实现自己じこてききょ拟文けんけい提供ていきょうりょう便利べんり包括ほうかつ处理设备连接だん开连せっ、动态创建删除以及其他属性ぞくせいじゅう设计继续到Linuxないかくてき3.15版本はんぽん

うちかくないそんひかえせい组(kmemcg)

[编辑]

うちかくないそんひかえせい组(kmemcg)やめあい并到Linuxないかくぬし线版本はんぽん3.8(2013ねん2がつ18にち,​11ねんまえ​(2013-02-18)。[35][36][37]kmemcgひかえせい以限せいないかくよう管理かんり自身じしん内部ないぶ进程しょ使用しようてきないそんりょう

cgroup对OOM killerてき感知かんち

[编辑]

Linuxないかく4.19(2018ねん10がつ)引入りょうOOM killerえいOOM killer实现てきcgroup感知かんち,这增加ぞうかりょう以cgroup为单杀死进程てき能力のうりょく,从而证了工作こうさく负载てきかんせいせい[38]

应用

[编辑]

かく种项使用しようcgroupsさく为基础,包括ほうかつCoreOSDocker(2013ねん)、HadoopJelasticKubernetes[39]lmctfy(Let Me Contain That For You)、LXC(LinuX Containers)、systemdMesosかずMesosphere[40],以及HTCondor主要しゅようてきLinux发行ばん也采ようりょう它,れいRed Hat Enterprise Linux(RHEL)6.0ざい2010ねん11月さいよう[41]ぬし线Linuxないかくばんさんねん

2019ねん10がつ29にちFedora项目はたFedora 31だま认修あらため使用しようCgroupsV2。[42]

まいり

[编辑]

引用いんよう

[编辑]
  1. ^ Control Group v2 — The Linux Kernel documentation. www.kernel.org. [2024-02-29]. (原始げんし内容ないようそん于2018-11-07). 
  2. ^ Jonathan Corbet. Process containers. LWN.net. 2007-05-29 [2012-06-16]. (原始げんし内容ないようそん于2017-06-12). 
  3. ^ Jonathan Corbet. Notes from a container. LWN.net. 2007-10-29 [2012-06-16]. (原始げんし内容ないようそん于2012-06-22). 
  4. ^ LKML: Tejun Heo: [PATCHSET cgroup/for-3.15] cgroup: convert to kernfs. lkml.org. [2024-02-29]. (原始げんし内容ないようそん于2018-10-12). 
  5. ^ [PATCH 12/12] netfilter: x_tables: lightweight process control group matching — Linux Network Development. web.archive.org. 2014-04-24 [2024-02-29]. 原始げんし内容ないようそん档于2014-04-24. 
  6. ^ LKML: Tejun Heo: [PATCHSET cgroup/for-3.15] cgroup: prepare for the default unified hierarchy. lkml.org. [2024-02-29]. (原始げんし内容ないようそん于2014-03-20). 
  7. ^ kernel/git/torvalds/linux.git - Linux kernel source tree. git.kernel.org. [2024-02-29]. 
  8. ^ Control Group v2 — The Linux Kernel documentation. www.kernel.org. [2024-02-29]. (原始げんし内容ないようそん于2018-11-07). 
  9. ^ Jonathan Corbet. Controlling memory use in containers. LWN. 2007-07-31 [2012-06-16]. (原始げんし内容ないようそん于2018-01-29). 
  10. ^ Balbir Singh, Vaidynathan Srinivasan. Containers: Challenges with the memory resource controller and its performance (PDF). Ottawa Linux Symposium. July 2007 [2012-06-16]. (原始げんし内容ないようそん (PDF)于2012-05-23). 
  11. ^ Using cgroups to limit I/O · André Carvalho. andrestc.com. [2024-02-29]. 
  12. ^ The container throttling problem. danluu.com. [2024-02-29]. 
  13. ^ Derr, Simon (2004). "CPUSETS". 
  14. ^ setrlimit(2) — Arch manual pages. man.archlinux.org. [2024-02-29]. 
  15. ^ Jonathan Corbet. Kernel space: Fair user scheduling for Linux. Network World. 2007-10-23 [2012-06-16]. (原始げんし内容ないようそん于2009-05-24). 
  16. ^ Kamkamezawa Hiroyu. Cgroup and Memory Resource Controller (PDF). Japan Linux Symposium. 2008-11-19 [2012-06-16]. (原始げんし内容ないよう (PDF presentation slides)そん档于2011-07-22). 
  17. ^ 17.0 17.1 Dave Hansen. Resource Management (PDF). Linux Foundation. [2012-06-16]. (原始げんし内容ないよう (PDF presentation slides)そん档于2011-10-09). 
  18. ^ Notes from a container [LWN.net]. lwn.net. [2024-02-29]. (原始げんし内容ないようそん于2018-02-04). 
  19. ^ IBM Developer. developer.ibm.com. [2024-02-29]. (原始げんし内容ないようそん于2013-10-03). 
  20. ^ Rayson. Grid Engine cgroups Integration. [2024-02-29]. (原始げんし内容ないようそん于2013-01-22) えい语). 
  21. ^ v1. 
  22. ^ linux/Documentation/admin-guide/cgroup-v2.rst at master · torvalds/linux. GitHub. [2024-02-29] えい语). 
  23. ^ systemd-cgtop. www.freedesktop.org. [2024-02-29]. 
  24. ^ All About the Linux Kernel: Cgroup's Redesign. Linux.com. 2013-08-15 [2014-05-19]. (原始げんし内容ないようそん档于2019-04-28). 
  25. ^ The unified control group hierarchy in 3.16. LWN.net. 2014-06-11. 
  26. ^ Pull cgroup updates for 3.15 from Tejun Heo. kernel.org. 2014-04-03. 
  27. ^ Pull cgroup updates for 3.16 from Tejun Heo. kernel.org. 2014-06-09. 
  28. ^ Pavel Emelyanov, Kir Kolyshkin. PID namespaces in the 2.6.24 kernel. LWN.net. 19 November 2007 [2024-03-01]. (原始げんし内容ないようそん于2017-12-08). 
  29. ^ Serge E. Hallyn, Ram Pai. Applying mount namespaces. IBM developerWorks. 17 September 2007. 
  30. ^ Michael Kerrisk. Namespaces in operation, part 5: User namespaces. lwn.net Linux Info from the Source. 27 February 2013 [2024-03-01]. (原始げんし内容ないようそん于2022-06-04). 
  31. ^ LKML: Linus Torvalds: Linux 4.6-rc1. 
  32. ^ Janak Desai. Linux kernel documentation on unshare. 11 January 2006. 
  33. ^ The Use of Name Spaces in Plan 9. 1992 [15 February 2015]. (原始げんし内容ないようそん档于6 September 2014). 
  34. ^ kernfs, sysfs, driver-core: implement synchronous self-removal. LWN.net. 2014-02-03 [2014-04-07]. 
  35. ^ memcg: kmem controller infrastructure. kernel.org source code. 2012-12-18. 
  36. ^ memcg: kmem accounting basic infrastructure. kernel.org source code. 2012-12-18. 
  37. ^ memcg: add documentation about the kmem controller. kernel.org. 2012-12-18. 
  38. ^ Linux_4.19 - Linux Kernel Newbies. 
  39. ^ Mesosphere to Bring Google’s Kubernetes to Mesos - Mesosphere. web.archive.org. 2015-09-06 [2024-02-29]. 原始げんし内容ないようそん档于2015-09-06. 
  40. ^ Mesosphere to Bring Google’s Kubernetes to Mesos - Mesosphere. web.archive.org. 2015-09-06 [2024-02-29]. 原始げんし内容ないようそん档于2015-09-06. 
  41. ^ "6.0 Release Notes" (PDF). redhat.com. 
  42. ^ 1732114 – Modify Fedora 31 to use CgroupsV2 by default. bugzilla.redhat.com. [2024-02-29]. 

外部がいぶ連結れんけつ

[编辑]