Skupiny - Cgroups
Původní autoři | v1: Paul Menage, Rohit Seth v2: Tejun Heo |
---|---|
Vývojáři | Tejun Heo, Johannes Weiner, Michal Hocko, Waiman Long, Roman Gushchin, Chris Down a kol. |
První vydání | 2007 |
Napsáno | C |
Operační systém | Linux |
Typ | Systémový software |
Licence | GPL a LGPL |
webová stránka | www |
skupiny (zkráceně z kontrolní skupiny) je Linuxové jádro funkce, která omezuje, zohledňuje a izoluje využití zdroje (CPU, paměť, disk I / O, síť atd.) Kolekce procesy.
Inženýři ve společnosti Google (především Paul Menage a Rohit Seth ) zahájil práci na této funkci v roce 2006 pod názvem „procesní kontejnery“.[1] Na konci roku 2007 se nomenklatura změnila na „kontrolní skupiny“, aby nedocházelo k nejasnostem způsobeným více významy výrazu „kontejner "v kontextu jádra Linuxu a funkce kontrolních skupin byla sloučena do Linuxové jádro hlavní řada ve verzi jádra 2.6.24, která byla vydána v lednu 2008.[2] Od té doby vývojáři přidali mnoho nových funkcí a řadičů, například podporu pro kernfs v roce 2014,[3] firewalling,[4] a jednotná hierarchie.[5] cgroup v2 byla sloučena v linuxovém jádře 4.5 s významnými změnami v rozhraní a interních funkcích.[6]
Verze
![]() | Tato část může vyžadovat vyčištění setkat se s Wikipedií standardy kvality. Specifický problém je: neúplné popisy a nedostatek odkazůČerven 2016) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Existují dvě verze skupin.
Cgroups původně napsali Paul Menage a Rohit Seth a do jádra Linuxu se začlenili v roce 2007. Poté se tomu říká cgroups verze 1.[7]
Poté převzal vývoj a údržbu skupin Tejun Heo. Tejun Heo přepracoval a přepsal cgroups. Tento přepis se nyní nazývá verze 2, dokumentace cgroups-v2 se poprvé objevila v linuxovém jádře 4.5 vydaném 14. března 2016.[8]
Na rozdíl od verze 1 má cgroup v2 pouze jednu hierarchii procesů a rozlišuje mezi procesy, nikoli vlákny.
Funkce
Jedním z cílů designu skupin je poskytnout jednotné rozhraní mnoha různým případy užití, z řízení jednotlivých procesů (pomocí pěkný například) do plného rozsahu virtualizace na úrovni operačního systému (jak poskytuje OpenVZ, Linux-VServer nebo LXC, například). Cgroups poskytuje:
- Omezení zdrojů
- skupiny lze nastavit tak, aby nepřekročily nakonfigurovaný Paměť limit, který zahrnuje také mezipaměť systému souborů[9][10]
- Stanovení priorit
- některé skupiny mohou získat větší podíl na využití CPU[11] nebo propustnost disku I / O[12]
- Účetnictví
- měří využití zdrojů skupiny, které lze použít například pro účely fakturace[13]
- Řízení
- zmrazení skupin procesů, jejich kontrolní bod a restartování[13]
Použití

Kontrolní skupina (zkráceně cgroup) je kolekce procesů, které jsou vázány stejnými kritérii a jsou spojeny se sadou parametrů nebo limitů. Tyto skupiny mohou být hierarchické, což znamená, že každá skupina dědí omezení od své nadřazené skupiny. Jádro poskytuje přístup k více řadičům (také nazývaným subsystémy) prostřednictvím rozhraní cgroup;[2] například řadič „paměti“ omezuje využití paměti, „cpuacct“ účtuje využití CPU atd.
Kontrolní skupiny lze použít několika způsoby:
- Ruční přístup k virtuálnímu souborovému systému cgroup.
- Vytvářením a správou skupin za běhu pomocí nástrojů, jako je cgcreate, cgexec, a cgclassify (z libcgroup).
- Prostřednictvím „démona motoru pravidel“, který může automaticky přesouvat procesy určitých uživatelů, skupin nebo příkazů do cgroups, jak je uvedeno v jeho konfiguraci.
- Nepřímo prostřednictvím jiného softwaru, který používá skupiny, jako je např Přístavní dělník, Firejail, LXC,[14] libvirt, systemd, Otevřete Grid Scheduler / Grid Engine,[15] a vývojově zaniklý Google lmctfy.
Dokumentace k jádru Linuxu obsahuje některé technické podrobnosti o nastavení a použití kontrolních skupin verze 1[16] a verze 2.[17] systemd-cgtop
[18] Příkaz lze použít k zobrazení nejlepších ovládacích skupin podle jejich využití prostředků.
Redesign
Redesign skupin byl zahájen v roce 2013,[19] s dalšími změnami, které přinesly verze 3.15 a 3.16 jádra Linuxu.[20][21][22]
Izolace jmenného prostoru
I když to není technicky součástí cgroups, související funkcí linuxového jádra je izolace jmenného prostoru, kde jsou skupiny procesů odděleny tak, že nemohou „vidět“ zdroje v jiných skupinách. Například obor názvů PID poskytuje samostatný výčet identifikátory procesu v každém oboru názvů. K dispozici jsou také jmenné prostory mount, user, UTS, network a SysV IPC.
- The Obor názvů PID poskytuje izolaci pro přidělování identifikátory procesu (PID), seznamy procesů a jejich podrobnosti. I když je nový jmenný prostor izolován od ostatních sourozenců, procesy v jeho „nadřazeném“ jmenném prostoru stále vidí všechny procesy v podřízených jmenných prostorech - i když s různými čísly PID.[23]
- Obor názvů sítí izoluje řadiče síťového rozhraní (fyzické nebo virtuální), iptables pravidla brány firewall, směrovací tabulky atd. Síťové jmenné prostory lze vzájemně propojit pomocí virtuálního zařízení Ethernet „veth“.[24]
- Obor názvů „UTS“ umožňuje změnu název hostitele.
- Mount jmenný prostor umožňuje vytvoření jiného rozložení systému souborů nebo zpřístupnění určitých přípojných bodů pouze pro čtení.[25]
- Obor názvů IPC izoluje systém V meziprocesová komunikace mezi jmennými prostory.
- Obor názvů uživatelů izoluje ID uživatelů mezi jmennými prostory.[26]
- Obor názvů skupiny[27]
Jmenné prostory se vytvářejí pomocí příkazu "unshare" nebo Syscall, nebo jako nové příznaky v „klonovaném“ syscall.[28]
Subsystém „ns“ byl přidán na počátku vývoje cgroups za účelem integrace jmenných prostorů a kontrolních skupin. Pokud by byla připojena cgroup "ns", každý jmenný prostor by také vytvořil novou skupinu v hierarchii cgroup. Jednalo se o experiment, který byl později posouzen jako špatně vhodný pro cgroups API a byl odstraněn z jádra.
Obory názvů Linuxu byly inspirovány obecnějšími funkcemi oboru názvů, které se hojně používají Plán 9 od Bell Labs.[29]
Sjednocená hierarchie
Kernfs byl představen do linuxového jádra s verzí 3.14 v březnu 2014, hlavním autorem je Tejun Heo.[30] Jedním z hlavních motivátorů pro samostatný kernfs je souborový systém cgroups. Kernfs je v zásadě vytvořen oddělením některých z sysfs logika do nezávislé entity, což ostatním subsystémům jádra usnadňuje implementaci jejich vlastního virtuálního systému souborů se zpracováním připojení a odpojení zařízení, dynamickým vytvářením a odebíráním a dalšími atributy. Redesign pokračoval do verze 3.15 linuxového jádra.[31]
Kontrolní skupiny paměti jádra (kmemcg)
Skupiny řízení paměti jádra (kmemcg) byly sloučeny do verze 3.8 (18. února 2013Hlavní linka linuxového jádra.[32][33][34] Řadič kmemcg může omezit množství paměti, kterou může jádro využít ke správě vlastních interních procesů.
) zpovědomí o skupině zabijáka OOM
Linux Kernel 4.19 (říjen 2018) představen cgroup povědomí o OOM zabiják implementace, která přidává schopnost zabít cgroup jako jednu jednotku a tak zaručit integritu pracovního vytížení.[35]
Přijetí
Různé projekty používají jako základ cgroups, včetně CoreOS, Přístavní dělník (v roce 2013), Hadoop, Jelastic, Kubernetes,[36] lmctfy (Let Me Contain that For You), LXC (LinuX Containers), systemd, Mesos a mezosféra,[36] a HTCondor. Hlavní linuxové distribuce jej také přijaly jako např Red Hat Enterprise Linux (RHEL) 6.0 v listopadu 2010, o tři roky později přijetí jádrem Linuxu.[37]
Dne 29. Října 2019 Projekt Fedora upravena Fedora 31 tak, aby standardně používala CgroupsV2[38]
Viz také
- Implementace virtualizace na úrovni operačního systému
- Procesní skupina
- Tc (Linux) - obslužný program pro řízení provozu, který se mírně překrývá s nastavením sítě zaměřené na síť
Reference
- ^ Jonathan Corbet (29. května 2007). "Zpracovat kontejnery". LWN.net.
- ^ A b Jonathan Corbet (29. října 2007). „Notes from a container“. LWN.net. Citováno 14. dubna 2015.
Původní název „kontejnery“ byl považován za příliš obecný - tento kód je důležitou součástí řešení kontejneru, ale je daleko od celé věci. Takže kontejnery byly nyní přejmenovány na „kontrolní skupiny“ (nebo „cgroups“) a sloučeny pro 2.6.24.
- ^ „cgroup: convert to kernfs“. lkml. 28. ledna 2014.
- ^ "netfilter: x_tables: lehká shoda skupiny řízení procesu". 23. dubna 2014. Archivovány od originál dne 24. dubna 2014.
- ^ "cgroup: připravit se na výchozí jednotnou hierarchii". 13. března 2014.
- ^ "cgroup v2: Více hierarchií".
- ^ "rozdíl mezi linuxovým jádrem 4.4 a 4.5". 14. března 2016.
- ^ „Documentation / cgroup-v2.txt as appears in Linux kernel 4.5“. 14. března 2016.
- ^ Jonathan Corbet (31. července 2007). "Řízení využití paměti v kontejnerech". LWN.
- ^ Balbir Singh, Vaidynathan Srinivasan (červenec 2007). „Containers: Challenges with the memory resource controller and its performance“ (PDF). Ottawa Linux Symposium.
- ^ Jonathan Corbet (23. října 2007). "Prostor jádra: Spravedlivé plánování uživatelů pro Linux". Síťový svět. Archivovány od originál dne 19. října 2013. Citováno 22. srpna 2012.
- ^ Kamkamezawa Hiroyu (19. listopadu 2008). Cgroup a řadič paměťových zdrojů (PDF). Japonsko Linux Symposium. Archivovány od originál (Prezentace PDF) dne 22. července 2011.
- ^ A b Dave Hansen. Správa zdrojů (Prezentace PDF). Linux Foundation.
- ^ Matt Helsley (3. února 2009). "LXC: Linuxové kontejnerové nástroje". IBM developerWorks.
- ^ „Integrace grid engine cgroups“. Škálovatelná logika. 22. května 2012.
- ^ "skupiny". kernel.org.
- ^ https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/cgroup-v2.rst
- ^ https://www.freedesktop.org/software/systemd/man/systemd-cgtop.html
- ^ „Vše o linuxovém jádře: Redesign Cgroup“. Linux.com. 15. srpna 2013. Citováno 19. května 2014.
- ^ „Jednotná hierarchie kontrolní skupiny ve verzi 3.16“. LWN.net. 11. června 2014.
- ^ „Pull cgroup updates for 3.15 from Tejun Heo“. kernel.org. 3. dubna 2014.
- ^ „Pull cgroup updates for 3.16 from Tejun Heo“. kernel.org. 9. června 2014.
- ^ Pavel Emelyanov, Kir Kolyshkin (19. listopadu 2007). "Obory jmen PID v jádře 2.6.24". LWN.net.
- ^ Jonathan Corbet (30. ledna 2007). "Síťové jmenné prostory". LWN.net.
- ^ Serge E. Hallyn, Ram Pai (17. září 2007). "Použití jmenných prostorů pro připojení". IBM developerWorks.
- ^ Michael Kerrisk (27. února 2013). "Jmenné prostory v provozu, část 5: Uživatelské jmenné prostory". lwn.net Linux Info ze zdroje.
- ^ https://lkml.org/lkml/2016/3/26/132/
- ^ Janak Desai (11. ledna 2006). „Dokumentace k linuxovému jádru na sdílení“.
- ^ „Použití jmenných prostorů v plánu 9“. 1992. Archivovány od originál dne 6. září 2014. Citováno 15. února 2015.
- ^ „kernfs, sysfs, driver-core: implementovat synchronní samočinné odstranění“. LWN.net. 3. února 2014. Citováno 7. dubna 2014.
- ^ "Zdrojový strom linuxového jádra: kernel / git / torvalds / linux.git: cgroups: convert to kernfs". kernel.org. 11. února 2014. Citováno 23. května 2014.
- ^ "memcg: infrastruktura ovladače kmem". kernel.org zdrojový kód. 18. prosince 2012.
- ^ "memcg: kmem účetní základní infrastruktura". kernel.org zdrojový kód. 18. prosince 2012.
- ^ "memcg: přidat dokumentaci o ovladači kmem". kernel.org. 18. prosince 2012.
- ^ https://kernelnewbies.org/Linux_4.19#Memory_management
- ^ A b „Mezosféra přivede Kubernetes společnosti Google k Mesosu“. Mesosphere.io. 10. července 2014. Archivovány od originál dne 6. září 2015. Citováno 13. července 2014.
- ^ https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/pdf/6.0_Release_Notes/Red_Hat_Enterprise_Linux-6-6.0_Release_Notes-en-US.pdf
- ^ https://bugzilla.redhat.com/show_bug.cgi?id=1732114
externí odkazy
- Dokumentace k jádru Linuxu na cgroups
- Jmenné prostory a cgroups linuxového jádra od Rami Rosen
- Jmenné prostory a cgroups, základ linuxových kontejnerů (včetně cgroups v2), snímky přednášky Rami Rosena, Netdev 1.1, Sevilla, Španělsko, 2016
- Principy rozhraní API nových ovládacích skupin, LWN.net, autor: Rami Rosen, březen 2016
- Rozsáhlá správa klastrů ve společnosti Google s Borgem Dubna 2015, autori: Abhishek Verma, Luis Pedrosa, Madhukar Korupolu, David Oppenheimer, Eric Tune a John Wilkes
- Objekty práce, podobná funkce ve Windows