GNU/Linux >> Znalost Linux >  >> Linux

Úvod do cgroups správce Linuxu

Takže jste slyšeli o této věci zvané cgroups a rádi byste se dozvěděli více. Možná jste o tom zachytili zmínku, když jste poslouchali přednášku o kontejnerizaci. Možná jste se dívali na ladění výkonu Linuxu, nebo jste možná jednoho dne náhodou procházeli souborovým systémem a objevili jste /sys/fs/cgroups . Ať tak či onak, chcete se dozvědět více o této funkcionalitě, která je v jádře zapečená už nějakou dobu. Takže se pohodlně usaďte, vezměte si popcorn a připravte se, že se (doufejme) dozvíte něco, co jste možná ještě nevěděli.

Co jsou cgroups?

Websterův slovník definuje cgroups jako... Dělám si srandu. Vždycky jsem nenáviděl poslouchat řeči, které začínaly nudnými slovníkovými definicemi. Místo toho se pokusím destilovat technickou definici cgroups do něčeho snadno srozumitelného.

Cgroups jsou velké téma. Tuto diskuzi jsem rozdělil do čtyřdílné série. První část, tento článek, pokrývá základní koncepty cgroups. Druhá část zkoumá CPUShare do větší hloubky. Třetí část, nazvaná „Cgroups the hardway“ se zabývá administrativními úkoly cgroup. Konečně čtvrtá část pokrývá cgroups, jak je spravuje systemd.

Jak možná víte nebo ne, linuxové jádro je zodpovědné za to, že veškerý hardware v systému spolehlivě spolupracuje. To znamená, že kromě kousků kódu (ovladačů), které umožňují operačnímu systému (OS) porozumět hardwaru, nastavuje také limity na to, kolik prostředků může konkrétní program vyžadovat od systému. To lze nejsnáze pochopit, když mluvíme o množství paměti (RAM), kterou musí systém rozdělit mezi všechny aplikace, které může váš počítač spouštět. Ve své nejzákladnější podobě může systém Linux spouštět většinu aplikací bez omezení. To může být skvělé pro obecné výpočty, pokud všechny aplikace hrají dobře dohromady. Co se ale stane, když je v programu chyba a program začne spotřebovávat veškerou dostupnou paměť? Jádro má zařízení nazvané Out Of Memory (OOM) Killer. Jeho úkolem je zastavovat aplikace, aby se uvolnilo dostatek paměti RAM, aby mohl operační systém nadále fungovat bez pádu.

To je skvělé, říkáte si, ale co to má společného s cgroups? Proces OOM funguje jako poslední obranná linie, než se váš systém zhroutí kolem vás. Je to užitečné do určité míry, ale protože jádro může řídit, které procesy musí přežít OOM, může také určit, které aplikace nemohou spotřebovávat příliš mnoho RAM.

Cgroups jsou tedy zařízení zabudované do jádra, které umožňuje správci nastavit limity využití zdrojů pro jakýkoli proces v systému. Obecně platí, že cgroups řídí:

  • Počet sdílení CPU na proces.
  • Omezení paměti na proces.
  • Blokovat I/O zařízení pro každý proces.
  • Které síťové pakety jsou identifikovány jako stejný typ, takže jiná aplikace může vynucovat pravidla síťového provozu.

Existuje více aspektů než jen tyto, ale to jsou hlavní kategorie, které většinu správců zajímají.

Skoré začátky Cgroups

Kontrolní skupiny (cgroups) jsou mechanismem linuxového jádra pro jemnou kontrolu zdrojů. Cgroups, původně navržené inženýry Google v roce 2006, byly nakonec kolem roku 2007 začleněny do linuxového jádra. I když v současnosti existují dvě verze cgroups, většina distribucí a mechanismů používá verzi 1, jak je v jádře od 2.6.24. Stejně jako u většiny věcí přidaných do jádra hlavní řady nebyla zpočátku velká míra přijetí. Verze 2 pokračuje v tomto trendu, existuje již téměř půl desetiletí, ale stále není široce nasazena.

Jedním z problémů, který sužuje přijetí cgroup, je nedostatek znalostí o její existenci a její části v moderním systému Linux. Nízké povědomí a osvojení často znamenají, že interakce s rozhraním jádra je neohrabaná, spletitá nebo prostě přímo manuální proces. To byl zpočátku případ cgroups. Jistě, není tak těžké vytvořit jednorázové cgroups. Pokud jste například chtěli simulovat rané dny před vývojem nástrojů kolem cgroups, můžete vytvořit spoustu adresářů a připojit cgroup souborový systém a začněte vše konfigurovat ručně. Ale než se k tomu všemu dostaneme, promluvme si trochu o tom, proč cgroups jsou v dnešním linuxovém ekosystému životně důležité.

Proč jsou cgroups důležité

Cgroups mají čtyři hlavní funkce, které spolu úzce souvisejí, a proto jsou v moderním systému velmi důležité, zvláště pokud provozujete kontejnerovou zátěž.

1. Omezení zdrojů

Jak již bylo zmíněno dříve, cgroups umožňují správci zajistit, aby programy spuštěné v systému zůstaly v určitých přijatelných mezích pro CPU, RAM, I/O blokových zařízení a skupiny zařízení.

POZNÁMKA :Skupiny zařízení CGroup mohou být klíčovou součástí komplexní bezpečnostní strategie vašeho systému. Skupiny zařízení zahrnují ovládání oprávnění pro čtení, zápis a mknod operace. Operace čtení/zápisu jsou poměrně samozřejmé, takže se pojďme na chvíli podívat na mknod funkčnost v systému Linux.

mknod byl původně navržen tak, aby naplnil všechny věci, které se zobrazují v /dev/ . Jsou to věci jako pevné disky, rozhraní USB pro zařízení, jako je Arduino, mikrokontroléry ESP8266 nebo jiná zařízení, která mohou v systému existovat. Většina moderních systémů Linux používá udev automaticky naplnit tento virtuální souborový systém věcmi detekovanými jádrem. mknod také umožňuje více programům vzájemně komunikovat vytvořením pojmenovaného kanálu. Tento koncept je mimo rámec tohoto vysvětlení, ale stačí pochopit, že to usnadňuje předávání informací z jednoho programu do druhého. Bez ohledu na to, mknod v kontrolovaném prostředí je něco, co by měl správce pečlivě omezit.

2. Prioritizace

Stanovení priorit se mírně liší od omezování zdrojů, protože procesy neomezujete nutně. Místo toho pouze říkáte, že bez ohledu na to, kolik zdrojů je k dispozici, zpracujte X bude mít vždy více času v systému než proces Y .

3. Účetnictví

Zatímco účtování je ve výchozím nastavení pro většinu podnikových verzí Linuxu vypnuto kvůli dodatečnému využití zdrojů, může být opravdu užitečné zapnout využití zdrojů pro konkrétní strom (více o tom později). Můžete tak vidět, jaké procesy uvnitř které cgroup spotřebovávají jaké typy nebo zdroje.

4. Řízení procesu

V cgroups existuje zařízení nazvané freezer . Zatímco hluboké porozumění této funkci je mimo rozsah tohoto článku, můžete si mrazák představit jako schopnost pořídit snímek konkrétního procesu a přesunout jej. Pro hlubší pochopení viz Dokumentace jádra.

Dobře, tak co to všechno znamená? No, z pohledu správce systému to znamená několik věcí.

Za prvé, i bez ponoření se do technologie kontejnerů to znamená, že můžete dosáhnout větší hustoty na jediném serveru pečlivým řízením typu pracovní zátěže, aplikací a zdrojů, které vyžadují.

Zadruhé to docela zvyšuje vaši bezpečnost. Zatímco typická instalace Linuxu standardně používá cgroups, neklade na procesy žádná omezení. Pokud se tak rozhodnete, můžete ve výchozím nastavení uložit omezení. Můžete také omezit přístup ke konkrétním zařízením pro konkrétní uživatele, skupiny nebo procesy, což dále pomáhá uzamknout systém.

Konečně můžete provést značné množství ladění výkonu prostřednictvím cgroups. To v kombinaci s tuned znamená, že můžete vytvořit prostředí speciálně přizpůsobené pro vaše individuální pracovní zátěže. Ve velkém měřítku nebo v prostředí citlivém na latenci mohou tyto úpravy znamenat rozdíl mezi splněním nebo nedodržením vašich dohod o úrovni služeb (SLA).

Jak cgroups fungují?

Pro účely této diskuse mluvíme o cgroups V1 . Zatímco verze 2 je k dispozici v Red Hat Enterprise Linux 8 (RHEL 8), je ve výchozím nastavení zakázána. Většina technologií kontejnerů, jako je Kubernetes, OpenShift, Docker a tak dále, stále spoléhá na cgroups verze 1.

Již jsme diskutovali o tom, že cgroups jsou mechanismem pro ovládání určitých subsystémů v jádře. Tyto subsystémy, jako jsou zařízení, CPU, RAM, síťový přístup a tak dále, se nazývají řadiče v terminologii cgroup.

Každý typ řadiče (cpu , blkio , memory atd.) je rozdělena do stromové struktury. Každá větev nebo list má svou vlastní váhu nebo limity. Řídicí skupina má několik procesů, které jsou s ní spojeny, takže využití zdrojů je granulární a snadno doladitelné.

POZNÁMKA :Každý potomek dědí a je omezen limity nastavenými v nadřazené cgroup.

Ve výše uvedeném diagramu můžete vidět, že je možné mít PID 1 v memory , disk i/o a cpu kontrolní skupiny. Skupiny cgroups jsou vytvořeny podle typu prostředku a nemají žádné vzájemné spojení. To znamená, že můžete mít database skupina spojená se všemi ovladači, ale se skupinami se zachází nezávisle. Stejně jako GID je těmto skupinám při vytvoření přiřazena číselná hodnota, nikoli popisný název. Pod kapotou jádro používá tyto hodnoty k určení alokace zdrojů. Chcete-li si to představit jinak, předpokládejme, že každý název cgroup, jakmile je připojen k řadiči, je přejmenován na název řadiče plus název podle vašeho výběru. Tedy skupina nazvaná database v memory řadič lze ve skutečnosti považovat za memory-database . Neexistuje tedy žádný vztah k database skupina spojená s řadičem cpu jako popisný název lze chápat jako cpu-database .

POZNÁMKA :Toto je hrubé zjednodušení a NENÍ technicky přesné, pokud byste se chtěli zapojit do základního kódu cgroup. Výše uvedené vysvětlení je určeno pro jasnost porozumění.

Sbalit

Nyní tedy máte představu o tom, co jsou cgroups a jak vám mohou pomoci s laděním výkonu a zabezpečením. Také lépe rozumíte tomu, jak cgroups interagují s ovladači.

Tento článek není rozpisem všech typů ovladačů, které existují v cgroups. Něco takového rozsahu by zabralo celou knihu, aby se to pořádně vysvětlilo. V dalším článku se podívám na CPUShares kvůli jejich relativní složitosti a důležitosti, kterou hrají pro celkové zdraví systému. Ostatní ovladače fungují podobně. Proto byste měli být schopni převzít lekce získané z řadiče CPU a aplikovat je na většinu zbývajících řadičů cgroup.

Nezapomeňte, že ve třetí části prozkoumáme administrativní úlohy a ve čtvrté části skončíme s tím, jak systemd interaguje s cgroups.

[ Začínáte s kontejnery? Podívejte se na tento bezplatný kurz. Nasazení kontejnerových aplikací:technický přehled. ]


Linux
  1. Úvod do Nmap na Kali Linuxu

  2. Jak změnit název hostitele v systému Linux

  3. Stát se správcem systému Linux:Od prodeje po správce systému

  1. Oprávnění pro Linux:Úvod do chmod

  2. Mých 5 oblíbených nástrojů pro správu systému Linux

  3. Stručný úvod do rolí Ansible pro správu systému Linux

  1. Úvod do bpftrace pro Linux

  2. Úvod do souborového systému Linux

  3. Kali Linux systémové požadavky