Топтар - Cgroups

топтар
Түпнұсқа автор (лар)v1: Пол Менедж, Рохит Сет
v2: Теджун Хео
ӘзірлеушілерТеджун Хео, Йоханнес Вайнер, Михал Хоко, Вайман Лонг, Роман Гущин, Крис Даун және басқалар.
Бастапқы шығарылым2007; 13 жыл бұрын (2007)
ЖазылғанC
Операциялық жүйеLinux
ТүріЖүйелік бағдарламалық жасақтама
ЛицензияGPL және LGPL
Веб-сайтwww. ядро.org/ doc/ Құжаттама/ cgroup-v1/ v1 және www. ядро.org/ doc/ Құжаттама/ cgroup-v2.жазу v2 үшін

топтар (бастап қысқартылған бақылау топтары) Бұл Linux ядросы мүмкіндіктерін шектейтін, есепке алатын және оқшаулайтын функция ресурстарды пайдалану (CPU, жад, енгізу-шығару дискісі, желі және т.б.) жиынтығының процестер.

Инженерлер Google (бірінші кезекте Пол Менедж және Рохит Сет ) осы функция бойынша жұмысты 2006 жылы «технологиялық контейнерлер» атауымен бастады.[1] 2007 жылдың аяғында номенклатура терминнің бірнеше мағынасынан туындаған шатасуларды болдырмау үшін «бақылау топтарына» өзгерді »контейнер «Linux ядро ​​контекстінде және басқару топтарының функционалдығы біріктірілді Linux ядросы 2.6.24 ядросындағы негізгі сызық, ол 2008 жылдың қаңтарында шығарылды.[2] Содан бері әзірлеушілер қолдау сияқты көптеген жаңа функциялар мен контроллерлер қосты kernfs 2014 жылы,[3] брандмауэр,[4] және біртұтас иерархия.[5] cgroup v2 интерфейсі мен ішкі функционалдығына айтарлықтай өзгерістер енгізіп, Linux ядросы 4.5-те біріктірілді.[6]

Нұсқалар

Топтардың екі нұсқасы бар.

Топтарды бастапқыда Пол Менейдж және Рохит Сет жазған және 2007 жылы Linux ядросына енген. Содан кейін бұл топтардың 1-нұсқасы деп аталады.[7]

Содан кейін топтарды әзірлеу және оларға қызмет көрсету қолға алынды Теджун Хео. Теджун Хео топтарды қайта құрды және қайта жазды. Бұл қайта жазу қазір 2-нұсқа деп аталады, cgroups-v2 құжаттамасы алғаш рет Linux ядросы 4.5-те 2016 жылдың 14 наурызында шыққан.[8]

V1 топтан айырмашылығы, v2 тобы тек бір процестің иерархиясына ие және ағындарды емес, процестерді ажыратады.

Ерекшеліктер

Топтардың жобалау мақсаттарының бірі - әр түрлі адамдарға бірыңғай интерфейс ұсыну істерді қолдану, жалғыз процестерді басқарудан (қолдану арқылы) жақсы толық) операциялық жүйе деңгейіндегі виртуалдандыру (көзделгендей) OpenVZ, Linux-VServer немесе LXC, Мысалға). Топтар мыналарды ұсынады:

Ресурстарды шектеу
топтар конфигурацияланғаннан аспайтын етіп орнатылуы мүмкін жады шегі, оған файлдық жүйенің кэші[9][10]
Басымдық
кейбір топтар процессорды пайдаланудың үлкен үлесін ала алады[11] немесе дискінің енгізу-шығару мүмкіндігі[12]
Бухгалтерлік есеп
мысалы, есеп айырысу мақсатында пайдаланылуы мүмкін топтың ресурстарын пайдалануды өлшейді[13]
Бақылау
процестердің мұздату топтары, олардың бақылау-өткізу пункті және қайта қосу[13]

Пайдаланыңыз

Жанама қолданудың мысалы ретінде systemd топтар қондырғысына эксклюзивті қол жетімділікті ұсынады

Басқару тобы (cgroup деп қысқартылған) - бұл бірдей критерийлермен байланысқан және параметрлер немесе шектер жиынтығымен байланысты процестер жиынтығы. Бұл топтар иерархиялық болуы мүмкін, яғни әр топ өзінің ата-анасынан шектеу алады. Ядро топтық интерфейс арқылы бірнеше контроллерлерге (сонымен қатар ішкі жүйелер деп аталады) қол жеткізуді қамтамасыз етеді;[2] мысалы, «жады» контроллері жадыны пайдалануды шектейді, «cpuacct» шоттарын CPU пайдалану және т.б.

Басқару топтарын бірнеше тәсілдермен пайдалануға болады:

  • Cgroup виртуалды файлдық жүйесіне қолмен қол жеткізу арқылы.
  • Сияқты құралдарды пайдалану арқылы топтарды құру және басқару арқылы cgcreate, cgexec, және cgclassify (бастап.) libcgroup).
  • Конфигурацияда көрсетілгендей белгілі бір пайдаланушылардың, топтардың немесе командалардың процедураларын топтарға автоматты түрде жылжыта алатын «ережелер қозғалтқышы демоны» арқылы.
  • Сияқты жанама түрде топтарды қолданатын басқа бағдарламалық жасақтама арқылы Докер, Firejail, LXC,[14] libvirt, жүйелік, Тор жоспарлағышын / тор механизмін ашыңыз,[15] және Google дамымай қалды lmctfy.

Linux ядросының құжаттамасында басқару нұсқаларын 1 орнату және пайдалану туралы кейбір техникалық мәліметтер бар[16] және 2-нұсқа.[17] systemd-cgtop[18] команданы ресурстарды пайдалану бойынша жоғарғы басқару топтарын көрсету үшін пайдалануға болады.

Қайта құру

Топтарды қайта құру 2013 жылы басталды,[19] Linux ядросының 3.15 және 3.16 нұсқаларында келтірілген қосымша өзгерістермен.[20][21][22]

Атаулар кеңістігін оқшаулау

Техникалық тұрғыдан топтардың бөлігі болмаса да, Linux ядросының байланысты ерекшелігі болып табылады атауды оқшаулау, мұнда процестер топтары басқа топтардағы ресурстарды «көре алмайтындай» етіп бөлінеді. Мысалы, PID атау кеңістігі жеке санақпен қамтамасыз етеді процесс идентификаторлары әрбір атау кеңістігінде. Сондай-ақ, mount, user, UTS, network және SysV IPC аттары кеңістіктері қол жетімді.

  • The PID атау кеңістігі бөлу үшін оқшаулауды қамтамасыз етеді процесс идентификаторлары (PID), процестердің тізімдері және олардың бөлшектері. Жаңа аттар кеңістігі басқа бауырлардан оқшауланған кезде, оның «ата-аналық» аттар кеңістігіндегі процедуралар әр түрлі PID сандарымен болса да, балалар аттары кеңістігіндегі барлық процестерді көреді.[23]
  • Желі атауының кеңістігі оқшаулайды желілік интерфейс контроллері (физикалық немесе виртуалды), iptables брандмауэр ережелері, маршрутизация кестелері және т.с.с. желілердің аттары кеңістіктерін бір-бірімен «вет» виртуалды Ethernet құрылғысы арқылы байланыстыруға болады.[24]
  • «UTS» аттар кеңістігі өзгертуге мүмкіндік береді хост аты.
  • Тау аттар кеңістігі файлдық жүйенің басқа орналасуын жасауға немесе кейбір бекіту нүктелерін тек оқуға мүмкіндік береді.[25]
  • IPC аттар кеңістігі V жүйесін оқшаулайды процесаралық байланыс аттар кеңістігінің арасында.
  • Пайдаланушының аттар кеңістігі пайдаланушы идентификаторларын аттар кеңістігі арасында оқшаулайды.[26]
  • Топтар аттарының кеңістігі[27]

Атаулар кеңістігі «үлестіру» немесе көмегімен жасалады syscall немесе «клон» жүйесінде жаңа жалаушалар ретінде.[28]

«Ns» ішкі жүйесі топтардың дамуының басында аттар кеңістігі мен басқару топтарын біріктіру үшін қосылды. Егер «ns» тобы орнатылса, әр ат кеңістігі топ иерархиясында жаңа топ құра алады. Бұл эксперимент болды, ол кейінірек API топтарына сәйкес емес деп танылып, ядродан шығарылды.

Linux атау кеңістігі бүкіл кең көлемде қолданылатын жалпы кеңістік функцияларынан шабыт алды Bell Labs компаниясының 9-жоспары.[29]

Біртұтас иерархия

Кернфтер 2014 жылдың наурызында Linux ядросына 3.14 нұсқасымен енгізілді, оның негізгі авторы Tejun Heo болды.[30] Бөлек kernfs үшін негізгі мотивтердің бірі - cgroups файлдық жүйесі. Кернфтер негізінен кейбір бөлу арқылы жасалады sysfs логиканы тәуелсіз құрылымға енгізу, осылайша басқа ядролық ішкі жүйелер үшін құрылғыларды қосу және ажырату, динамикалық құру және жою және басқа атрибуттармен жұмыс істей отырып, өздерінің виртуалды файлдық жүйесін енгізуді жеңілдету. Қайта құру Linux ядросының 3.15 нұсқасында жалғасты.[31]

Жадты басқарудың ядролық топтары (kmemcg)

Ядролық жадыны басқару топтары (кмемкг) 3.8 нұсқасына біріктірілді (2013 ж. 18 ақпан); 7 жыл бұрын (18-02-2013)) Linux ядросының негізгі сызығы.[32][33][34] Kmemcg контроллері ядро ​​өзінің ішкі процестерін басқару үшін қолдана алатын жад көлемін шектей алады.

OOM өлтірушісі туралы топтың хабардар болуы

Linux Kernel 4.19 (қазан 2018) енгізілді топ туралы хабардар болу OOM өлтірушісі бұл топты біртұтас бірлік ретінде өлтіру мүмкіндігін қосатын, сондықтан жұмыс көлемінің біртұтастығына кепілдік береді.[35]

Бала асырап алу

Әр түрлі жобалар топтарды негіз ретінде пайдаланады, соның ішінде CoreOS, Докер (2013 жылы), Hadoop, Серпімді, Кубернет,[36] lmctfy (Сіз үшін мұны қамтуға рұқсат етіңіз), LXC (LinuX контейнерлері), жүйелік, Месос және мезосфера,[36] және HTCondor. Негізгі Linux дистрибьюторлары оны қабылдады Red Hat Enterprise Linux (RHEL) 6.0 2010 жылдың қарашасында, үш жылдан кейін негізгі магистральдық Linux ядросымен қабылданды.[37]

2019 жылғы 29 қазанда Fedora жобасы әдепкі бойынша CgroupsV2 пайдалану үшін Fedora 31 модификацияланған[38]

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Джонатан Корбет (2007 ж. 29 мамыр). «Технологиялық контейнерлер». LWN.net.
  2. ^ а б Джонатан Корбет (29 қазан 2007). «Контейнерден жазбалар». LWN.net. Алынған 14 сәуір 2015. Түпнұсқа «контейнерлер» атауы тым жалпы деп саналды - бұл код контейнер шешімінің маңызды бөлігі, бірақ ол бәрінен алыс. Сонымен, контейнерлер енді «басқару топтары» (немесе «топтар») болып өзгертілді және 2.6.24-ке біріктірілді.
  3. ^ «cgroup: kernfs-ге түрлендіру». lkml. 28 қаңтар 2014 ж.
  4. ^ «netfilter: x_tables: жеңіл процестерді бақылау тобының сәйкестігі». 23 сәуір 2014. мұрағатталған түпнұсқа 24 сәуір 2014 ж.
  5. ^ «cgroup: әдепкі бірыңғай иерархияға дайындалу». 13 наурыз 2014 ж.
  6. ^ «cgroup v2: бірнеше иерархиялар».
  7. ^ «Linux ядросының 4.4 және 4.5 арасындағы айырмашылық». 14 наурыз 2016 ж.
  8. ^ «Documentation / cgroup-v2.txt Linux ядросында пайда болған 4.5». 14 наурыз 2016 ж.
  9. ^ Джонатан Корбет (31 шілде 2007). «Контейнерлерде жадты пайдалануды басқару». LWN.
  10. ^ Балбир Сингх, Вайдинатхан Сринивасан (шілде 2007). «Контейнерлер: жады ресурсының контроллерімен байланысты қиындықтар және оның өнімділігі» (PDF). Оттава Linux симпозиумы.
  11. ^ Джонатан Корбет (2007 ж. 23 қазан). «Ядролық кеңістік: Linux үшін пайдаланушыларды әділ жоспарлау». Network World. Архивтелген түпнұсқа 2013 жылғы 19 қазанда. Алынған 22 тамыз 2012.
  12. ^ Камкамезава Хирою (19 қараша 2008). Cgroup және жад ресурстарының контроллері (PDF). Жапония Linux симпозиумы. Архивтелген түпнұсқа (PDF презентация слайдтары) 2011 жылғы 22 шілдеде.
  13. ^ а б Дэйв Хансен. Ресурстарды басқару (PDF презентация слайдтары). Linux Foundation.
  14. ^ Мэтт Хельсли (3 ақпан 2009). «LXC: Linux контейнер құралдары». IBM developerWorks.
  15. ^ «Grid Engine топтарының интеграциясы». Масштабталатын логика. 22 мамыр 2012.
  16. ^ «топтар». kernel.org.
  17. ^ https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/cgroup-v2.rst
  18. ^ https://www.freedesktop.org/software/systemd/man/systemd-cgtop.html
  19. ^ «Linux ядросы туралы барлығы: Cgroup-ті қайта құру». Linux.com. 15 тамыз 2013. Алынған 19 мамыр 2014.
  20. ^ «3.16 бірыңғай басқару тобының иерархиясы». LWN.net. 11 маусым 2014 ж.
  21. ^ «Tejun Heo-дан 3.15-ке арналған топтық жаңартуларды тартыңыз». kernel.org. 3 сәуір 2014.
  22. ^ «Tejun Heo-дан 3.16 нұсқасына арналған топтық жаңартуларды тартыңыз». kernel.org. 9 маусым 2014 ж.
  23. ^ Павел Емельянов, Кир Колышкин (19 қараша 2007). «2.6.24 ядросындағы PID аттар кеңістігі». LWN.net.
  24. ^ Джонатан Корбет (2007 жылғы 30 қаңтар). «Желінің ат кеңістігі». LWN.net.
  25. ^ Серж Э. Халлин, Рам Пай (17 қыркүйек 2007). «Тау аттарының кеңістігін қолдану». IBM developerWorks.
  26. ^ Майкл Керриск (27 ақпан 2013). «Жұмыс кеңістігінде аттар кеңістігі, 5 бөлім: пайдаланушы аттарының кеңістігі». lwn.net Linux ақпарат көзі.
  27. ^ https://lkml.org/lkml/2016/3/26/132/
  28. ^ Джанак Десай (11 қаңтар 2006). «Linux ядросы туралы құжат бөліспеуде».
  29. ^ «9-жоспарда аттар кеңістігін пайдалану». 1992. мұрағатталған түпнұсқа 6 қыркүйек 2014 ж. Алынған 15 ақпан 2015.
  30. ^ «kernfs, sysfs, драйвер-ядро: синхронды өздігінен жоюды жүзеге асырыңыз». LWN.net. 3 ақпан 2014. Алынған 7 сәуір 2014.
  31. ^ «Linux ядросының бастапқы тармағы: kernel / git / torvalds / linux.git: cgroups: kernfs-ге түрлендіру». kernel.org. 11 ақпан 2014. Алынған 23 мамыр 2014.
  32. ^ «memcg: kmem контроллерінің инфрақұрылымы». kernel.org бастапқы код. 18 желтоқсан 2012 ж.
  33. ^ «memcg: kmem бухгалтерлік есептің негізгі инфрақұрылымы». kernel.org бастапқы код. 18 желтоқсан 2012 ж.
  34. ^ «memcg: kmem контроллері туралы құжаттама қосу». kernel.org. 18 желтоқсан 2012 ж.
  35. ^ https://kernelnewbies.org/Linux_4.19#Memory_management
  36. ^ а б «Месосфера Google-дің Кубернетесін Месосқа жеткізеді». Mesosphere.io. 10 шілде 2014. мұрағатталған түпнұсқа 2015 жылғы 6 қыркүйекте. Алынған 13 шілде 2014.
  37. ^ 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
  38. ^ https://bugzilla.redhat.com/show_bug.cgi?id=1732114

Сыртқы сілтемелер