cgroups - cgroups
| Autori originali | v1: Paul Menage, Rohit Seth v2: Tejun Heo |
|---|---|
| Dezvoltatori | Tejun Heo, Johannes Weiner, Michal Hocko, Waiman Long, Roman Gushchin, Chris Down și colab. |
| Eliberarea inițială | 2007 |
| Scris in | C |
| Sistem de operare | Linux |
| Tip | Programul sistemului |
| Licență | GPL și LGPL |
| Site-ul web |
www |
cgroups (prescurtat din grupuri de control ) este o caracteristică de kernel Linux care limitează, contabilizează și izolează utilizarea resurselor (CPU, memorie, I / O de disc, rețea etc.) a unei colecții de procese .
Inginerii de la Google (în principal Paul Menage și Rohit Seth ) au început lucrul la această caracteristică în 2006 sub numele de "containere de proces". La sfârșitul anului 2007, nomenclatura s-a schimbat în „grupuri de control” pentru a evita confuzia cauzată de mai multe semnificații ale termenului „ container ” în contextul nucleului Linux, iar funcționalitatea grupurilor de control a fost fuzionată în linia principală a nucleului Linux în versiunea 2.6.24 a nucleului, care a fost lansat în ianuarie 2008. De atunci, dezvoltatorii au adăugat multe funcții și controlere noi, cum ar fi suport pentru kernfs în 2014, firewall și ierarhie unificată. cgroup v2 a fost îmbinat în kernel-ul Linux 4.5 cu modificări semnificative ale interfeței și funcționalității interne.
Versiuni
Există două versiuni ale cgroup-urilor.
Cgroups a fost scris inițial de Paul Menage și Rohit Seth și integrat în kernel-ul Linux în 2007. Ulterior, aceasta este numită cgroups versiunea 1.
Dezvoltarea și întreținerea grupurilor a fost apoi preluată de Tejun Heo . Tejun Heo a reproiectat și a rescris grupuri. Această rescriere se numește acum versiunea 2, documentația cgroups-v2 a apărut pentru prima dată în kernel-ul Linux 4.5 lansat pe 14 martie 2016.
Spre deosebire de v1, cgroup v2 are o singură ierarhie de proces și discrimină între procese, nu fire.
Caracteristici
Unul dintre obiectivele de proiectare ale cgroup-urilor este de a oferi o interfață unificată pentru multe cazuri diferite de utilizare , de la controlul proceselor individuale (de exemplu, folosind frumos ) până la virtualizarea completă la nivel de sistem de operare (așa cum este furnizat de OpenVZ , Linux-VServer sau LXC , de exemplu). Cgroups oferă:
- Limitarea resurselor
- grupurile pot fi setate să nu depășească o limită de memorie configurată , care include și memoria cache a sistemului de fișiere
- Prioritizare
- unele grupuri pot obține o pondere mai mare din utilizarea procesorului sau a randamentului I / O pe disc
- Contabilitate
- măsoară utilizarea resurselor unui grup, care poate fi utilizată, de exemplu, în scopuri de facturare
- Control
- blocarea grupurilor de procese, verificarea și repornirea acestora
Utilizare
Un grup de control (abreviat ca cgroup) este o colecție de procese care sunt legate de aceleași criterii și asociate cu un set de parametri sau limite. Aceste grupuri pot fi ierarhizate, ceea ce înseamnă că fiecare grup moștenește limite de la grupul său părinte. Nucleul oferă acces la mai multe controlere (numite și subsisteme) prin interfața cgroup; de exemplu, controlerul „memorie” limitează utilizarea memoriei, utilizarea procesorului conturilor „cpuacct” etc.
Grupurile de control pot fi utilizate în mai multe moduri:
- Accesând manual sistemul de fișiere virtual cgroup.
- Prin crearea și gestionarea grupurilor de pe zbura folosind instrumente cum ar fi
cgcreate,cgexecșicgclassify(lalibcgroup). - Prin intermediul „demonului motor de reguli” care poate muta automat procesele anumitor utilizatori, grupuri sau comenzi în grupuri c, după cum se specifică în configurația sa.
- Indirect, prin intermediul altor programe software care utilizează cgroup-uri, cum ar fi Docker , Firejail , LXC , libvirt , systemd , Open Grid Scheduler / Grid Engine și lmctfy din punct de vedere al dezvoltării Google .
Documentația kernel-ului Linux conține câteva detalii tehnice despre configurarea și utilizarea grupurilor de control versiunea 1 și versiunea 2. systemd-cgtopComanda poate fi utilizată pentru a afișa grupurile de control de top prin utilizarea resurselor lor.
Reproiectați
Redesignul cgroupurilor a început în 2013, cu modificări suplimentare aduse de versiunile 3.15 și 3.16 ale kernel-ului Linux.
Izolarea spațiului de nume
Deși nu face parte din punct de vedere tehnic al grupurilor cgroup, o caracteristică conexă a kernel-ului Linux este izolarea spațiului de nume , unde grupurile de procese sunt separate astfel încât să nu poată „vedea” resursele din alte grupuri. De exemplu, un spațiu de nume PID oferă o enumerare separată a identificatorilor de proces din cadrul fiecărui spațiu de nume. De asemenea, sunt disponibile spații de nume de montare, utilizator, UTS, rețea și SysV IPC.
- Spațiul de nume PID oferă izolare pentru alocarea identificatorilor de proces (PID), a listelor de procese și a detaliilor acestora. În timp ce noul spațiu de nume este izolat de alți frați, procesele din spațiul său de nume „părinte” încă văd toate procesele în spațiile de nume copil - deși cu numere PID diferite.
- Spațiul de nume al rețelei izolează controlerele de interfață de rețea (fizice sau virtuale), regulile firewall-ului iptables , tabelele de rutare etc. Spațiile de nume ale rețelei pot fi conectate între ele utilizând dispozitivul Ethernet virtual „veth”.
- Spațiul de nume „UTS” permite schimbarea numelui de gazdă .
- Mount namespace permite crearea unui aspect diferit al sistemului de fișiere sau realizarea anumitor puncte de montare numai în citire.
- Spațiul de nume IPC izolează comunicarea inter-proces System V între spațiile de nume.
- Spațiul de nume al utilizatorului izolează ID-urile de utilizator între spațiile de nume.
- Cgroup spațiu de nume
Spațiile de nume sunt create cu comanda „ unshare ” sau syscall sau ca steaguri noi într-un syscall „clonează”.
Subsistemul „ns” a fost adăugat la începutul dezvoltării cgroup-urilor pentru a integra spații de nume și grupuri de control. Dacă grupul c "ns" ar fi montat, fiecare spațiu de nume ar crea, de asemenea, un grup nou în ierarhia cgroup. Acesta a fost un experiment care ulterior a fost considerat a fi o potrivire slabă pentru API-ul cgroups și eliminat din nucleu.
Spațiile de nume Linux au fost inspirate de funcționalitatea mai generală a spațiului de nume folosită intens în Plan 9 de la Bell Labs .
Ierarhie unificată
Kernfs a fost introdus în nucleul Linux cu versiunea 3.14 în martie 2014, autorul principal fiind Tejun Heo. Unul dintre motivatorii principali pentru un kernfs separat este sistemul de fișiere cgroups. Kernfs este creat practic prin împărțirea unei părți din logica sysfs într-o entitate independentă, facilitând astfel pentru alte subsisteme kernel implementarea propriului sistem de fișiere virtuale cu gestionare pentru conectarea și deconectarea dispozitivului, crearea și eliminarea dinamică și alte atribute. Redesign-ul a continuat în versiunea 3.15 a kernel-ului Linux.
Grupuri de control memorie kernel (kmemcg)
Grupurile de control al memoriei kernel ( kmemcg ) au fost îmbinate în versiunea 3.8 (18 februarie 2013 ) a liniei principale a kernel-ului Linux . Controlerul kmemcg poate limita cantitatea de memorie pe care nucleul o poate utiliza pentru a-și gestiona propriile procese interne.
conștientizarea grupului de criminalul OOM
Linux Kernel 4.19 (octombrie 2018) a introdus conștientizarea cgroup-ului de implementare OOM killer, care adaugă o capacitate de a ucide un cgroup ca o singură unitate și astfel garantează integritatea volumului de lucru.
Adopţie
Diferite proiecte folosesc cgroups ca bază a acestora, inclusiv CoreOS , Docker (în 2013), Hadoop , Jelastic , Kubernetes , lmctfy (Let Me Conțin asta pentru tine), LXC (LINUX Containere), systemd , Mesos și mezosferei, și HTCondor . Distribuțiile majore Linux l-au adoptat, de asemenea, cum ar fi Red Hat Enterprise Linux (RHEL) 6.0 în noiembrie 2010, cu trei ani înainte de adoptarea de către nucleul principal Linux.
La 29 octombrie 2019, Proiectul Fedora a modificat Fedora 31 pentru a utiliza CgroupsV2 în mod implicit
Vezi si
- Implementări de virtualizare la nivel de sistem de operare
- Grup de proces
- Tc (Linux) - un utilitar de control al traficului care se suprapune ușor în funcționalitate, cu setări de grupuri orientate către rețea
Referințe
linkuri externe
- Documentația oficială a kernel-ului Linux despre cgroups v1 și cgroups v2
- Red Hat Resource Management Guide on cgroups
- Pagina manuală Ubuntu pe cgroups
- Nucleuri Linux și spații de nume și cgroupuri de Rami Rosen (2013)
- Spații de nume și cgroupuri, baza containerelor Linux (inclusiv cgroups v2) , diapozitive ale unei discuții de Rami Rosen, Netdev 1.1, Sevilla, Spania, 2016
- Înțelegerea noilor grupuri de control API , LWN.net , de Rami Rosen, martie 2016
- Gestionarea pe scară largă a clusterelor la Google cu Borg , aprilie 2015, de Abhishek Verma, Luis Pedrosa, Madhukar Korupolu, David Oppenheimer, Eric Tune și John Wilkes
- Job Objects , caracteristică similară pe Windows