cgroups(7) Miscellaneous Information Manual cgroups(7) NAMN cgroups -- Linux styrgrupper BESKRIVNING Styrgrupper, vanligen refererade till som cgroups, ar en funktion i Linuxkarnan som gor att processer kan organiseras i hierarkiska grupper vars anvandning av olika typer av resurser sedan kan begransas och overvakas. Karnans cgroup-granssnitt tillhandahalls via ett pseudofilsystem som kallas cgroupfs. Gruppering implementeras i karnans centrala cgroup-kod, medan resurssparning och -begransning implementeras i ett antal undersystem per resurstyp (minne, CPU, och sa vidare). Terminologi En cgroup ar en samling av processer som ar bundna av en uppsattning granser eller parametrar som definieras via cgroup-filsystemet. Ett undersystem ar en karnkomponent som modifierar beteendet hos processerna i en cgroup. Olika undersystem har implementerats, vilket gor det mojligt att gora saker som att begransa mangden CPU-tid och minne som ar tillgangligt i en cgroup, bokforing av CPU-tiden som anvands av en cgroup och frysning och aterupptagande av korningen av processerna i en cgroup. Undersystem ar ocksa ibland kanda som resurshanterare (resource controllers) (eller helt enkelt, hanterare (controllers)). En hanterares cgroups ar arrangerade i en hierarki. Denna hierarki defineras genom att skapa, ta bort och byta namn pa underkataloger i cgroup-filsystemet. Pa varje niva av hierarkin kan attribut (t.ex., granser) definieras. Granserna, styrningen och bokforingen som erbjuds av cgroups har allmant sett paverkan genom underhierarkin under den cgroup dar attributen definieras. Alltsa kan till exempel inte granserna som placeras pa en cgroup pa en hogre niva i hierarkin overskridas av avkomme-cgroups. Cgroups version 1 och version 2 Den ursprungliga utgavan av cgroups-implementationen var i Linux 2.6.24. Med tiden har olika cgroup-hanterare lagts till for att mojliggora hanteringen av olika typer av resurser. Dock var utvecklingen av dessa hanterare i stort sett okoordinerad, med resultatet att manga inkonsistenser uppstod mellan hanterare och anvandandet av cgroup-hierarkier blev ganska komplext. En langre beskrivning av dessa problem finns i karnans kallfil Documentation/admin-guide/cgroup-v2.rst (eller Documentation/cgroup-v2.txt i Linux 4.17 och tidigare). Pa grund av problemen med den ursprungliga cgroups-implementationen (cgroups version 1) inleddes, med borjan i Linux 3.10, arbete pa en ny, ortogonal implementation for att atgarda dessa problem. Fran borjan markerad experimentell, och dold bakom monteringsflaggan -o __DEVEL__sane_behavior gjordes den nya versionen (cgroups version 2) slutligen officiell i och med utgavan av Linux 4.5. Skillnader mellan de tva versionerna beskrivs i texten nedan. Filen cgroup.sane_behavior, som finns i cgroups v1, ar en relik fran denna monteringsflagga. Filen rapporterar alltid "0" och finns bara kvar for bakatkompatibilitet. Aven om cgroups v2 ar avsett att vara en ersattning for cgroups v1 finns det aldre systemet kvar (och av kompatibilitetsskal ar det osannolikt att det kommer tas bort). For narvarande implementerar cgroups v2 endast en delmangd av hanterarna som ar tillgangliga i cgroups v1. De tva systemen ar implementerade sa att bade v1-hanterare och v2-hanterare kan monteras pa samma system. Alltsa ar det till exempel mojligt att anvanda de hanterare som stodjs under version 2, men ocksa anvanda version 1-hanterare dar version 2 annu inte stodjer dessa hanterare. Den enda begransningen ar att en hanterare inte samtidigt kan anvandas i bade en cgroups v1-hierarki och i cgroups v2-hierarkin. CGROUPS VERSION 1 Under cgroups v1 kan varje hanterare monteras mot ett separat cgroup-filsystem som ger sin egen hierarkiska organisation av processerna pa systemet. Det ar ocksa mojligt att sammontera flera (eller alla) cgroups v1-hanterare mot samma cgroup-filsystem, vilket betyder att de sammonterade hanterarna anvander samma hierarkiska organisation av processer. For varje monterad hierarki avspeglar katalogtradet styrgruppshierarkin. Varje styrgrupp representeras av en katalog, dar var och en av dess barnstyr-cgroup representeras av en barnkatalog. Till exempel representerar /user/johan/1.session styrgruppen 1.session, vilken ar ett barn till johan, vilken ar ett barn till /user. Under varje cgroup-katalog finns en uppsattning filer vilka kan lasas eller skrivas till, vilket avspeglar resursbegransningar och nagra allmanna cgroup-egenskaper. Uppgifter (tradar) respektive processer I cgroups v1 dras en distinktion mellan processer och uppgifter. I denna vy kan en process besta av flera uppgifter (oftare kallade tradar, fran ett anvandarperspektiv, och kallas sa i resten av denna manualsida). I cgroups v1 ar det mojligt att hantera cgroup-medlemskapet hos tradarna i en process oberoende av varandra. Cgroups v1 mojlighet att dela tradar over olika cgroups orsakade problem i en del fall. Till exempel var det inte meningsfullt for minneshanteraren eftersom alla tradarna i en process delar en enda adressrymd. Pa grund av dessa problem togs mojlighetn att oberoende hantera cgroup-medlemskapet hos tradar i en process bort i den ursprungliga cgroups v2-implementationen, och aterstalldes senare i en mer begransad form (se diskussionen om "tradlage" nedan). Montering av v1-hanterare Anvandningen av cgroups forutsatter en karna byggd med alternativet CONFIG_CGROUP. Dessutom har var och en av v1-hanterarna ett associerat konfigurationsalternativ som maste vara satt for att anvanda den hanteraren. For att anvanda en v1-hanterare maste den monteras mot ett cgroup-filsystem. Den vanliga platsen for sadana monteringar ar under ett tmpfs(5)-filsystem monterat pa /sys/fs/cgroup. Man kan alltsa montera cpu-hanteraren enligt foljande: mount -t cgroup -o cpu none /sys/fs/cgroup/cpu Det ar mojligt att sammontera flera hanterare mot samma hierarki. Till exempel sammonteras har hanterarna cpu och cpuacct mot en enda hierarki: mount -t cgroup -o cpu,cpuacct none /sys/fs/cgroup/cpu,cpuacct Sammontering av hanterare har effekten att en process ar i samma cgroup for alla sammonterade hanterare. Separat monterade hanterare gor det mojligt for en process att finnas i en cgroup /apa1 for en hanterare medan den finns i /apa2/apa3 for en annan. Det ar mojligt att sammontera alla v1-hanterare mot samma hierarki: mount -t cgroup -o all cgroup /sys/fs/cgroup (Man kan astadkomma samma resultat genom att utelamna -o all eftersom det ar standardbeteendet om inga hanterare uttryckligen anges.) Det ar inte mojligt att montera samma hanterare mot flera cgroup-hierarkier. Till exempel ar det inte mojligt att montera bade hanteraren cpu och cpuacct mot en hierarki, och att montera hanteraren cpu ensam mot en annan hierarki. Det ar mojligt att skapa flera monteringar med exakt samma uppsattning av sammonterade hanterare. I det fallet ar dock det enda som hander att flera monteringspunkter ger en vy av samma hierarki. Observera att pa manga system ar v1-hanterarna automatiskt monterade under /sys/fs/cgroup; speciellt skapar systemd(1) automatiskt sadana monteringar. Avmontering av v1-hanterare Ett monterat cgroup-filsystem kan avmonteras med kommandot umount(8), som i foljande exempel: umount /sys/fs/cgroup/pids Men observera aven: ett cgroup-filsystem avmonteras bara om det inte ar upptaget, det vill saga att det inte har nagon barn-cgroup. Om det inte ar fallet ar enda effekten av umount(8) att gora monteringen osynlig. Alltsa maste man for att sakerstalla att en montering verkligen tas bort forst ta bort alla barn-cgroup:er, vilket i sin tur endast kan goras efter att alla medlemsprocesser har flyttats ifran dessa cgroup:er till root-cgroup:en. Cgroup version 1-hanterare Varje hanterare i cgroup version 1 styrs av ett karnkonfigurationsalternativ (uppraknat nedan). Dessutom styrs tillgangligheten av funktionen cgroup av karnkonfigurationsalternativet CONFIG_CGROUPS. cpu (fran Linux 2.6.24; CONFIG_CGROUP_SCHED) Cgroups kan garanteras ett minsta antal "CPU-andelar" nar ett system ar belastat. Detta begransar inte en cgroup:s CPU-anvandning om CPU:erna inte ar belastade. For ytterligare information, se Documentation/scheduler/sched-design-CFS.rst (eller Documentation/scheduler/sched-design-CFS.txt i Linux 5.2 och tidigare). I Linux 3.2 utokades denna styrgrupp till att tillandahalla styrning av "CPU-bandbredd". Om karnan konfigureras med CONFIG_CFS_BANDWIDTH ar det, inom varje schemalaggningsperiod (definierad via en fil i cgroup-katalogen), mojligt att definiera en ovre grans pa CPU-tiden som tilldelas till processer i en cgroup. Denna ovre grans galler aven om det inte finns nagon annan konkurrens om CPU:n. Ytterligare information finns i karnans kallfil Documentation/scheduler/sched-bwc.rst (eller Documentation/scheduler/sched-bwc.txt i Linux 5.2 och tidigare). cpuacct (sedan Linux 2.6.24; CONFIG_CGROUP_CPUACCT) Denna tillhandahaller bokforing av CPU-anvandning av grupper av processer. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/cpuacct.rst (eller Documentation/cgroup-v1/cpuacct.txt i Linux 5.2 och tidigare). cpuset (sedan Linux 2.6.24; CONFIG_CPUSETS) Denna cgroup kan anvandas for att binda processerna i en cgroup till en specifik uppsattning av CPU:er och NUMA-noder. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/cpusets.rst (eller Documentation/cgroup-v1/cpusets.txt i Linux 5.2 och tidigare). memory (sedan Linux 2.6.25; CONFIG_MEMCG) Minneshanteraren stodjer rapportering och begransning av processminne, karnminne och vaxling som anvands av cgroup:er. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/memory.rst (eller Documentation/cgroup-v1/memory.txt i Linux 5.2 och tidigare). devices (sedan Linux 2.6.26; CONFIG_CGROUP_DEVICE) Detta stodjer styrning av vilka processer som far skapa (mknod) enheter liksom oppna dem for lasning eller skrivning. Policyerna kan anges som tillatelselistor och nekandelistor. Hierarkin uppratthalls, sa att nya regler inte far bryta mot befintliga regler for malet eller anfader-cgroup:er. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/devices.rst (eller Documentation/cgroup-v1/devices.txt i Linux 5.2 och tidigare). freezer (sedan Linux 2.6.28; CONFIG_CGROUP_FREEZER) Cgroup:en freezer kan forsatta alla processer i en cgroup i vantelage (suspend) och ateruppta (resume) dem. Att frysa en cgroup /A far aven dess barn, till exempel processer i /A/B, att frysas. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/freezer-subsystem.rst (eller Documentation/cgroup-v1/freezer-subsystem.txt i Linux 5.2 och tidigare). net_cls (sedan Linux 2.6.29; CONFIG_CGROUP_NET_CLASSID) Denna lagger ett klass-id, angivet for cgroup:en, pa natverkspaket som skapas av en cgroup. Dessa klass-id:n kan sedan anvandas i brandvaggsregler, liksom anvandas for att forma trafiken med tc(8). Detta galler endast paket som lamnar cgroup:en, inte trafik som kommer till cgroup:en. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/net_cls.rst (eller Documentation/cgroup-v1/net_cls.txt i Linux 5.2 och tidigare). blkio (sedan Linux 2.6.33; CONFIG_BLK_CGROUP) Cgroup:en blkio styr och begransar atkomst till angivna blockenheter genom att lagga pa IO-styrning i form av strypning och ovre granser pa lovnoder och mellanliggande noder i lagringshierarkin. Tva policyer ar tillgangliga. Den forsta ar med proportionell vikt tidsbaserad uppdelning av disk implementerad med CFQ. Denna ar i kraft for lovnoder som anvander CFQ. Den andra ar en strypningspolicy som anger ovre granser for I/O-hastighet for en enhet. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/blkio-controller.rst (eller Documentation/cgroup-v1/blkio-controller.txt i Linux 5.2 och tidigare). perf_event (sedan Linux 2.6.39; CONFIG_CGROUP_PERF) Denna hanterare medger perf-overvakning av uppsattningen processer som ar grupperade i en cgroup. Ytterligare information finns i karnans kallfiler net_prio (sedan Linux 3.3; CONFIG_CGROUP_NET_PRIO) Denna tillater att prioriteter anges, per natverksgranssnitt, for cgroup:er. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/net_prio.rst (eller Documentation/cgroup-v1/net_prio.txt i Linux 5.2 och tidigare). hugetlb (sedan Linux 3.5; CONFIG_CGROUP_HUGETLB) Denna stodjer att man begransar anvandningen av valdiga sidor med styrgrupper. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/hugetlb.rst (eller Documentation/cgroup-v1/hugetlb.txt i Linux 5.2 och tidigare). pids (sedan Linux 4.3; CONFIG_CGROUP_PIDS) Denna hanterare tillater att man begransar antalet processer som kan skapas i en styrgrupp (och dess avkommor). Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/pids.rst (eller Documentation/cgroup-v1/pids.txt i Linux 5.2 och senare). rdma (sedan Linux 4.11; CONFIG_CGROUP_RDMA) RDMA-hanteraren tillater att man begransar anvandningen av RDMA/IB-specifika resurser per styrgrupp. Ytterligare information finns i karnans kallfil Documentation/admin-guide/cgroup-v1/rdma.rst (eller Documentation/cgroup-v1/rdma.txt i Linux 5.2 och tidigare). Att skapa styrgrupper och flytta processer Ett styrgruppfilsystem innehaller initialt en ensam rotstyrgrupp, "/", vilken alla processer hor till. En ny styrgrupp skapas genom att skapa en katalog i styrgruppfilsystemet: mkdir /sys/fs/cgroup/cpu/sg1 Detta skapar en ny tom styrgrupp. En process kan flyttas till denna styrgrup genom att skriva dess PID in i styrgruppens fil cgroup.procs: echo $$ > /sys/fs/cgroup/cpu/sg1/cgroup.procs Endast en PID at gangen far skrivas till denna fil. Om man skriver vardet 0 till en fil cgroup.procs flyttas den skrivande processen till motsvarande styrgrupp. Nar man skriver ett PID in i cgroup.procs flyttas alla tradar i processen in i den nya styrgruppen pa en gang. Inom en hierarki kan en process vara medlem av precis en styrgrupp. Nar man skriver en process PID till en fil cgroup.procs tas den automatiskt bort fran den styrgrupp den var medlem av tidigare. Filen cgroup.procs kan lasas for att hamta en lista pa processer som ar medlemmar av en styrgrupp. Den returnerade listan av PID:er ar inte garanterat i ordning. Inte heller ar den garanterat fri fran upprepningar. (Till exempel kan ett PID ha blivit ateranvant medan listan lastes.) I cgroups v1 kan en enskild trad flyttas till en annan styrgrupp genom att skriva dess trad-ID (d.v.s., karnans trad-ID returnerat fran clone(2) och gettid(2)) till filen tasks i en styrgruppskatalog. Denna fil kan lasas for att se uppsattningen av tradar som ar medlemmar av styrgruppen. Att ta bort styrgrupper For att ta bort en styrgrupp far den forst inte ha nagra barnstyrgrupper och inte innehalla nagra processer (andra an zombier). Forutsatt att det ar fallet kan man helt enkelt ta bort motsvarande katalogsokvag. Observera att filer i en styrgruppskatalog inte kan och inte behover tas bort. Cgroups v1 notifieringar om slapp Tva filer kan anvandas for att avgora huruvida karnan skall tillhandahalla notifieringar nar en styrgrupp blir tom. En styrgrupp anses tom nar den inte innehaller nagra barnstyrgrupper och inga medlemsprocesser. En speciell fil i rotkatalogen av varje styrgruppshierarki, release_agent, kan anvandas for att registrera sokvagsnamnet till ett program som kan anropas nar en styrgrupp i hierarkin blir tom. Sokvagen till den nyss tomda styrgruppen (relativt monteringspunkten for styrgrupper) ges som det enda kommandoradsargumentet nar programmet release_agent anropas. Programmet release_agent kan ta bort styrgruppskatalogen, eller kanske aterpopulera den med en process. Standardvardet i filen release_agent ar tomt, vilket betyder att ingen slappagent anropas. Innehallet i filen release_agent kan ocksa anges via en monteringsflagga nar styrgruppsfilsystemet monteras: mount -o release_agent=sokvag Huruvida programmet release_agent anropas eller inte nar en viss styrgrupp blir tom avgors av vardet i filen notify_on_release i motsvarande styrgruppskatalog. Om denna fil innehaller vardet 0, da anropas inte programmet release_agent. Om den innehaller vardet 1 anropas programmet release_agent. Standardvardet i denna fil i rotstyrgruppen ar 0. Nar en ny styrgrupp skapas arvs vardet i denna fil fran motsvarande fil i foraldrastyrgruppen. Cgroup v1 namngivna hierarkier I cgroups v1 ar det mojligt att montera en styrgruppshierarki som inte har nagra tillkopplade hanterare: mount -t cgroup -o none,name=ngtnamn none /nagon/monterings/punkt Flera instanser av sadana hierarkier kan monteras; varje hierarki maste ha ett unikt namn. Det enda syftet med sadana hierarkier ar att spara processer. (Se diskussionen om slappnotifieringar nedan.) Ett exempel pa detta ar styrgruppshierarkin name=systemd som anvands av systemd(1) for att spara tjanster och anvandarsessioner. Sedan Linux 5.0 kan karnans uppstartsflagga cgroup_no_v1 (beskriven nedan) anvandas till att avaktivera namngivna hierarkier inom cgroup v1, genom att ange cgroup_no_v1=namngiven. CGROUPS VERSION 2 I cgroups v2 bor alla monterade hanterare i en enda sammanslagen hierarki. Aven om (olika) hanterare kan monteras samtidigt under v1- och v2-hierarkierna ar det inte mojligt att montera samma hanterare samtidigt under bade v1- och v2-hierarkierna. De nya beteendena i cgroups v2 sammanfattas har, och utvecklas i nagra fall i de foljande underavsnitten. o Cgroups v2 tillhandahaller en sammanslagen hierarki mot vilken alla hanterare monteras. o "Interna" processer ar inte tillatna. Med undantag av rotstyrgruppen kan processer endast finnas i lovnoder (styrgrupper som inte sjalva innehaller barnstyrgrupper). Detaljerna ar nagot mer subtila an detta, och beskrivs nedan. o Aktiva styrgrupper maste anges via filerna cgroup.controllers och cgroup.subtree_control. o Filen tasks har tagits bort. Dessutom har filen cgroup.clone_children som anvands i hanteraren cpuset tagits bort. o En forbattrad mekanism for notifieringar om tomma styrgrupper ges av filen cgroup.events. For fler andringar, se filen Documentation/admin-guide/cgroup-v2.rst i karnans kalla (eller Documentation/cgroup-v2.txt i Linux 4.17 och tidigare). Nagra av de nya beteendena ovan modifierades senare med tillagget i Linux 4.14 av "tradlage" (beskrivet nedan). Cgroups v2 sammanslagen hierarki I cgroups v1 var mojligheten att montera olika hanterare mot olika hierarkier avsedd att ge en stor flexibilitet i designen av program. I praktiken visade sig dock flexibiliteten vara mindre anvandbar an forvantat, och i manga fall lade den till komplexitet. Darfor monteras i cgroups v2 alla tillgangliga hanterare mot en enda hierarki. De tillgangliga hanterarna monteras automatiskt, vilket betyder att det inte ar nodvandigt (eller mojligt) att ange hanterarna nar man monterar filsystemet for cgroups v2 med ett kommando som det foljande: mount -t cgroup2 none /mnt/cgroup2 En hanterare i cgroup v2 ar tillganglig endast om den inte for narvarande anvands via en montering mot en cgroup v1-hierarki. Eller, for att uttrycka det pa ett annat satt, ar det inte mojligt att anvanda samma hanterare mot bade en v1-hierarki och den sammanslagna v2-hierarkin. Detta betyder att det kan vara nodvandigt att forst avmontera en v1-hanterare (som beskrivet ovan) fore den hanteraren ar tillganglig i v2. Eftersom systemd(1) normalt anvander sig mycket av nagra v1-hanterare kan det i nagra fall vara enklare att starta med de valda v1-hanterarna avaktiverade. For att gora detta, ange flaggan cgroup_no_v1=lista pa karnans startkommandorad; lista ar en kommaseparerad lista av namnen pa hanterare att avaktivera, eller ordet all for att avaktivera alla v1-hanterare. (Denna situation hanteras korrekt av systemd(1) som faller tillbaka pa att arbeta utan de angivna hanterarna.) Observera att pa manga moderna system monterar systemd(1) automatiskt filsystemet cgroup2 pa /sys/fs/cgroup/unified under uppstartsprocessen. Cgroups v2 monteringsflaggor The following options (mount -o) can be specified when mounting the group v2 filesystem: nsdelegate (sedan Linux 4.15) Behandla styrgruppsnamnrymder som delegeringsgranser. For detaljer se nedan. memory_localevents (sedan Linux 5.2) memory.events skall visa statistik endast for styrgruppen sjalv, och inte for nagra avkommestyrgrupper. Detta var beteendet fore Linux 5.2. Med borjan i Linux 5.2 ar standardbeteendet att inkludera statistik for avkommestyrgrupper i memory.events, och denna monteringsflagga kan anvandas for att aterga till det tidigare beteendet. Denna flagga ar systemvid och kan anges vid monteringar eller andras genom ommonteringar endast fran den intiala monteringsnamnrymden; den ignoreras tyst i andra namnrymder an den initiala. Cgroups v2-hanterare Foljande hanterare, dokumenterade i karnans kallfil Documentation/admin-guide/cgroup-v2.rst (eller Documentation/cgroup-v2.txt i Linux 4.17 och tidigare), stodjs i styrgrupper version 2: cpu (sedan Linux 4.15) Detta ar efterfoljaren till hanterarna cpu och cpuacct i version 1. cpuset (sedan Linux 5.0) Detta ar efterfoljaren till hanteraren cpuset i version 1. freezer (sedan Linux 5.2) Detta ar efterfoljaren till hanteraren freezer i version 1. hugetlb (sedan Linux 5.6) Detta ar efterfoljaren till hanteraren hugetlb i version 1. io (sedan Linux 4.5) Detta ar efterfoljaren till hanteraren blkio i version 1. memory (sedan Linux 4.5) Detta ar efterfoljaren till hanteraren memory i version 1. perf_event (sedan Linux 4.11) Detta ar samma som hanteraren perf_event i version 1. pids (sedan Linux 4.5) Detta ar samma som hanteraren pids i version 1. rdma (sedan Linux 4.11) Detta ar samma som hanteraren rdma i version 1. Det finns ingen direkt motsvarighet till hanterarna net_cls och net_prio fran styrgrupper version 1. Istallet har stod lagts till i iptables(8) for att tillata eBPF-filter att haka pa sokvagar i cgroup v2 for att ta beslut om natverkstrafik baserat pa styrgrupp. Hanteraren devices i v2 ger inget granssnitt till filer; istallet begransas enhetsstyrningen genom att koppla ett eBPF-program (BPF_CGROUP_DEVICE) till en v2-styrgrupp. Cgroups v2 undertradsstyrning Varje styrgrupp i v2-hierarkin innehaller foljande tva filer: cgroup.controllers Denna endast lasbara fil exponerar en lista av hanterarna som finns tillgangliga i denna styrgrupp. Innehallet i denna fil motsvarar innehallet i filen cgroup.subtree_control i foraldrastyrgruppen. cgroup.subtree_control Detta ar en lista over hanterare som ar aktiva (aktiverade) i styrgruppen. Uppsattningen av hanterare i denna fil ar en delmangd av mangden i cgroup.controllers for denna styrgrupp. Uppsattningen av aktiva hanterare modifieras genom att till denna fil skriva strangar som innehaller blankavgransade hanterarnamn, vart och ett foreganget av "+" (for att aktivera hanteraren) eller "-" (for att avaktivera hanteraren), som i foljande exempel: echo '+pids -memory' > x/y/cgroup.subtree_control Ett forsok att aktivera en hanterare som inte finns i cgroup.controllers medfor ett fel ENOENT nar man skriver till filen cgroup.subtree_control. Eftersom listan av hanterare i cgroup.subtree_control ar en delmangd av dem i cgroup.controllers kan en hanterare som har avaktiverats i en styrgrupp i hierarkin aldrig ateraktiveras i undertradet nedanfor den styrgruppen. En styrgrupps fil cgroup.subree_control avgor uppsattningen hanterare som anvands i barnstyrgruppen. Nar en hanterare (t.ex., pids) finns i filen cgroup.subtree_control i en foraldrastyrgrupp, da skapas automatiskt motsvarande hanterargranssnittsfiler (t.ex., pids.max) i barnen till den styrgruppen och kan anvandas for att utova resursstyrning i barnstyrgrupperna. Cgroups v2-regeln "inga interna processer" Cgroups v2 uppratthaller en sa kallad "inga interna processer"-regel. Grovt uttryckt betyder denna regel att, med undantag for rotstyrgruppen, processer endast far bo i lovnoder (styrgrupper som inte sjalva innehaller barnstyrgrupper). Detta undviker behovet av att avgora hur resurser skall fordelas mellan processer som ar medlemmar av en styrgrupp A och processer i barnstyrgrupper till A. Till exempel, om styrgruppen /sg1/sg2 finns, da kan en process bo i /sg1/sg2, men inte i /sg1. Detta ar sa for att undvika en tvetydighet i cgroups v1 med avseende pa delegationen av resurser mellan processer i /sg1 och dess barnstyrgrupper. Det rekommenderade sattet i cgroups v2 ar att skapa en underkatalog som heter leaf for alla styrgrupper som inte ar lov, vilken skall innehalla processer men inga barnstyrgrupper. Alltsa, processer vilka tidigare skulle ha hamnat i /sg1 skulle nu hamna i /sg1/leaf. Detta har fordelen att gora relationen mellan processer i /sg1/leaf och /sg1s andra barn explicit. Regeln om "inga interna processer" ar i verkligheten mer subtil an den uttrycks ovan. Mer exakt ar regeln att en styrgrupp (annan an roten) inte bade kan (1) ha medlemsprocesser, och (2) distribuera resurser till barnstyrgrupper -- det vill saga, ha en fil cgroup.subtree_control som inte ar tom. Alltsa ar det mojligt for en styrgrupp att bade ha medlemsprocesser och barnstyrgrupper, men fore nagra hanterare kan aktiveras for den styrgruppen maste medlemsprocesserna flyttas ut ur styrgruppen (t.ex., kanske in i barnstyrgrupperna). Med tillagget i Linux 4.14 av "tradat lage" (beskrivet nedan) har regeln om "inga interna processer" blivit friare i nagra fall. Cgroups v2 fil cgroup.events Varje styrgrupp annan an roten i v2-hierarkin innehaller en fil endast for lasning, cgroup.events, vars innehall ar nyckel-varde-par (begransade med nyradstecken, med nyckeln och vardet separerade med blanktecken) som ger information om styrgruppen. $ cat mingrp/cgroup.events populated 1 frozen 0 Foljande nycklar kan forekomma i denna fil: populated Vardet pa denna nyckel ar antingen 1, om denna styrgrupp eller nagon av dess avkommor har medlemsprocesser, annars 0. frozen (sedan Linux 5.2) Vardet pa denna nyckel ar 1 om denna styrgrupp for narvarande ar frusen, eller 0 om den inte ar det. Filen cgroup.events kan overvakas for att ta emot notifieringar nar vardet pa en av dess nycklar andras. Sadan overvakning kan goras med inotify(7), vilket notifierar om andringar som IN_MODIFY-handelser, eller poll(2), vilket notifierar om andringar genom att returnera bitarna POLLPRI och POLLERR i faltet revents. Cgroup v2 slappnotifieringar Cgroups v2 tillhandahaller en ny mekanism for att fa notifieringar nar en styrgrupp blir tom. Filerna release_agent och notify_on_release ar borttagna, och ersatta av nyckeln populated i filen cgroup.events. Denna nyckel har antingen vardet 0, vilket betyder att styrgruppen (och dess avkommor) inte innehaller nagra medlemsprocesser (andra an zombier), eller 1, vilket betyder att styrgruppen (eller en av dess avkommor) innehaller medlemsprocesser. Mekanismen for slappnotifieringar i cgroups v2 ger foljande fordelar framfor mekanismen release_agent i cgroups v1: o Den tillater billigare notifiering, eftersom en enda process kan overvaka flera cgroup.events-filer (med teknikerna som beskrivs tidigare). Daremot medfor mekanismen i cgroups v1 kostnaden i att skapa en process for varje notifiering. o Notifieringar for olika underhierarkier av styrgrupper kan delegeras till andra processer. Daremot tillater mekanismen i cgroups v1 endast en slappagent for en hel hierarki. Cgroups v2 filen cgroup.stat Varje styrgrupp i v2-hierarkin innehaller en fil cgroup.stat endast for lasning (forst introducerad i Linux 4.14) som bestar av rader som innehaller nyckel-varde-par. Foljande nycklar finns for narvarande i denna fil: nr_descendants Detta ar det totala antalet synliga (d.v.s., levande) avkommestyrgrupper under denna styrgrupp. nr_dying_descendants Detta ar det totala antalet doende avkommestyrgrupper under denna styrgrupp. En styrgrupp gar in i tillstandet doende efter att ha tagits bort. Den finns kvar i detta tillstand under en odefinierad period (vilken kommer bero pa systemets last) medan resurser frigors innan styrgruppen forstors. Observera att forekomsten av nagra styrgrupper i tillstandet doende ar normalt och indikerar inte nagot problem. En process kan inte goras till medlem av en doende styrgrupp, och en doende styrgrupp kan inte aterupplivas. Begransning av antalet avkommestyrgrupper Varje styrgrupp i v2-hierarkin innehaller foljande filer, vilka kan anvandas for att visa och satta begransningar pa antalet avkommestyrgrupper under den styrgruppen: cgroup.max.depth (sedan Linux 4.14) Denna fil definerar en grans pa nastningsdjupet for avkommestyrgrupper. Vardet 0 i denna fil betyder att inga avkommestyrgrupper kan skapas. Ett forsok att skapa en avkomma vars nastningsniva overskrider gransen misslyckas (mkdir(2) misslyckas med felet EAGAIN). Att skriva strangen "max" till denna fil betyder att ingen begransning gors. Standardvardet i denna fil ar "max". cgroup.max.descendants (sedan Linux 4.14) Denna fil definierar en grans pa antalet levande avkommestyrgrupper som denna styrgrupp far ha. Ett forsok att skapa fler avkommor an tillatet av denna grans misslyckas (mkdir(2) misslyckas med felet EAGAIN). Att skriva strangen "max" till denna fil betyder att ingen begransning gors. Standardvardet i denna fil ar "max". STYRGRUPPSDELEGERING: ATT DELEGERA EN HIERARKI TILL EN MINDRE PRIVILEGIERAD ANVANDARE I styrgruppssammanhang betyder delegering att man overlater hanteringen av nagot undertrad av denna styrgruppshierarki till en oprivilegierad anvandare. Cgroups v1 ger stod for delegering baserat pa filrattigheter i styrgruppshierarkin men med mindre strikta begransningsregler an v2 (som noteras nedan). Cgroups v2 stodjer delegering med begransningar genom en explicit design. Fokuset for diskussionen i detta avsnitt ar pa delegering i cgroups v2, med nagra avvikelser for cgroups v1 namnda langs vagen. Lite terminologi kravs for att beskriva delegering. En delegerare ar en privilegierad anvandare (d.v.s., root) som ager en foraldrastyrgrupp. En delegat ar en oprivilegierad anvandare som kommer fa rattigheterna som behovs for att hantera nagon underhierarki under foraldrastyrgruppen, kant som det delegerade undertradet. For att utfora en delegering gor delegeraren vissa kataloger och filer skrivbara for delegaten, typiskt genom att andra agarskap pa objekten till att vara anvandar-ID:t for delegaten. Om vi antar att vi vill delegera hierarkin med rot vid (forslagsvis) /dlgt_grp och att det inte annu finns nagra barnstyrgrupper under den styrgruppen, da andras agandet av foljande till anvandar-ID:t for delegaten: /dlgt_grp Att andra agarskap pa roten till undertradet betyder att eventuella nya styrgrupper som skapas under det undertradet (och filerna de innehaller) ocksa kommer agas av delegaten. /dlgt_grp/cgroup.procs Att andra agandet av den har filen betyder att delegaten kan flytta processer in i roten av det delegerade undertradet. /dlgt_grp/cgroup.subtree_control (endast cgroups v2) Att andra agandet av den har filen betyder att delegaten kan aktivera hanterare (som finns i /dlgt_grp/cgroup.controllers) for att vidare omfordela resurser till lagre nivaer i undertradet. (Som ett alternativ till att andra agandet av denna fil kan delegeraren istallet lagga till valda hanterare till denna fil.) /dlgt_grp/cgroup.threads (endast cgroups v2) Att andra agandet av den har filen ar nodvandigt om ett tradat undertrad delegeras (se beskrivningen av "tradlage", nedan). Detta tillater delegaten att skriva trad-ID:n till filen. (Agandet av den har filen kan aven andras nar man delegerar ett domanundertrad, men for narvarande fyller det inget syfte eftersom, vilket beskrivs nedan, det inte ar mojligt att flytta en trad mellan domanstyrgrupper genom att skriva dess trad-ID till filen cgroups.thread.) I cgroups v1 ar istallet motsvarande fil som skall delegeras filen tasks. Delegeraren skall inte andra agaren av nagon annan av hanterarens granssnittsfiler (t.ex., pids.max, memory.high) i dlgt_grp. Dessa filer anvands fran nasta niva ovanfor det delegerade undertradet for att fordela resurser in i undertradet, och delegaten skall inte ha ratt att andra resurserna som fordelas in i det delegerade undertradet. Se aven diskussionen om filen /sys/kernel/cgroup/delegate i NOTERINGAR for information om ytterligare delegerbara filer i cgroups v2. Efter att de tidigare namnda stegen har utforts kan delegaten skapa barnstyrgrupper inom det delegerade undertradet (styrgruppens underkataloger och filerna de innehaller kommer att agas av delegaten) och flytta processer mellan styrgrupper i undertradet. Om nagra hanterare finns i dlgt_grp/cgroup.subtree_control, eller om agandet av den filen overlats pa delegaten, kan delegaten aven styra den vidare omfordelningen av motsvarande resurser in i det delegerade undertradet. Cgroups v2-delegering: nsdelegate och styrgruppsnamnrymder Med start i Linux 4.13 finns det aven ett andra satt att utfora styrgruppsdelegering i cgroups v2-hierarkin. Detta gors genom att montera eller montera om cgroups v2-filsystemet med monteringsflaggan nsdelegate. Till exempel, om cgroup v2-filsystemet redan har monterats kan vi montera om det med flaggan nsdelegate sa har: mount -t cgroup2 -o remount,nsdelegate \ none /sys/fs/cgroup/unified Effekten av denna monteringsflagga ar att den far styrgruppsnamnrymder att automatiskt bli delegeringsgranser. Mer specifikt galler foljande restriktioner for processer inuti styrgruppsnamnrymden: o Skrivningar till hanterarens granssnittsfiler i namnrymdens rotkatalog kommer misslyckas med felet EPERM. Processer inuti styrgruppsnamnrymden kan fortfarande skriva till delegerbara filer i styrgruppsnamnrymdens rotkatalog sasom cgroup.procs och cgroup.subtree_control, och kan skapa underhierarkier under rotkatalogen. o Forsok att migrera processer over namnrymdsgransen forhindras (med felet ENOENT). Processer inuti styrgruppsnamnrymden kan fortfarande (med hansyn tagen till inneslutningsreglerna som beskrivs nedan) flytta processer mellan styrgrupper inom underhierarkin under namnrymdsroten. Mojligheten att definiera styrgruppsnamnrymder som delegeringsgranser gor styrgruppsnamnrymder mer anvandbara. For att forsta varfor, anta att vi redan har en styrgruppshierarki som har delegerats till en oprivilegierad anvandare, cecilia, med den aldre delegeringstekniken som beskrivs ovan. Anta vidare att cecilia vill delegera en underhierarki vidare under den befintliga delegerade hierarkin. (Till exempel kanske den delegerade hierarkin kan vara associerad med en oprivilegierad behallare som kors av cecilia.) Aven om en styrgruppsnamnrymd anvandes skulle, eftersom bada hierarkierna ags av den oprivilegierade anvandaren cecilia, foljande illegitima atgarder kunna utforas. o En process i den underliggande hierarkin skulle kunna andra resurshanterarens installningar i hierarkins rotkatalog. (Dessa resurshanterares installningar ar avsedda att mojliggora utovandet av styrning fran foraldrastyrgruppen; en process inuti barngruppen skall inte fa andra dem.) o En process inuti den underliggande hierarkin skulle kunna flytta processer in i och ut ur den underliggande hierarkin om styrgrupperna i den overliggande hierarkin pa nagot satt var synliga. Genom att anvanda monteringsflaggan nsdelegate forhindras bada dessa mojligheter. Monteringsflaggan nsdelegate har bara nagon effekt nar den anvands i den initiala monteringsnamnrymden; i andra monteringsnamnrymder ignoreras flaggan tyst. Observera: pa en del system monterar systemd(1) automatiskt filsystemet cgroup v2. For att experimentera med flaggan nsdelegate kan det vara anvandbart att starta karnan med foljande kommandoradsflaggor: cgroup_no_v1=all systemd.legacy_systemd_cgroup_controller Dessa flaggor far karnan att starta med cgroups v1-hanterarna avaktiverade (vilket betyder att hanterarna finns tillgangliga i v2-hierarkin), och sager till systemd(1) att inte montera och anvanda cgroup v2-hierarkin, sa att v2-hierarkin kan monteras manuellt med de onskade flaggorna efter uppstart. Inneslutningsregler for styrgruppsdelegering Nagra inneslutningsregler for delegering sakerstaller att delegaten kan flytta processer mellan styrgrupper inom det delegerade undertradet, men inte kan flytta processer utifran det delegerade undertradet in i undertradet eller vice versa. En oprivilegierad process (d.v.s., delegaten) kan skriva PID:en for en "mal"-process in i en fil cgroup.procs endast om alla foljande ar sanna: o Skrivaren har skrivrattigheter pa filen cgroup.procs i malstyrgruppen. o Skrivaren har skrivrattigheter till filen cgroup.procs i den narmaste gemensamma anfadern till kall- och malstyrgrupperna. Observera att i nagra fall kan den narmaste anfadern vara kall- eller malstyrgruppen sjalv. Detta krav vidmakthalls inte for cgroups v1-hierarkier, med konsekvensen att inneslutningen i v1 ar mindre strikt an i v2. (Till exempel kan i cgroups v1 anvandaren som ager tva distinkta delegerade underhierarkier flytta en process mellan hierarkierna.) o Om cgroup v2-filsystemet monterades med flaggan nsdelegate maste skrivaren kunna se kall- och malstyrgrupperna fran sin egen styrgruppsnamnrymd. o I cgroups v1: skrivarens effektiva UID (d.v.s., delegaten) matchar malprocessens verkliga anvandar-ID eller sparade set-user-ID. Fore Linux 4.11 gallde detta krav aven i cgroups v2. (Detta var ett historiskt krav arvt fran cgroups v1 som senare bedomdes som onodigt, eftersom de andra reglerna racker for inneslutning i cgroups v2.) Observera: en konsekvens av dessa inneslutningsreger for delegering ar att den oprivilegierade delegaten inte kan placera in den forsta processen i det delegerade undertradet; istallet maste delegeraren placera in den forsta processen (en process som ags av delegaten) i det delegerade undertradet. CGROUPS VERSION 2 TRADLAGE Bland restriktionerna som alaggs av cgroups v2 och som inte fanns med i cgroups v1 ar foljande: o Ingen styrning pa tradniva: alla tradarna i en process maste finnas i samma styrgrupp. o Inga interna processer: en styrgrupp kan inte bade ha medlemsprocesser och utova styrning av barnstyrgrupper. Bada dessa restriktioner lades till for att avsaknaden av dessa restriktioner hade orsakat problem i cgroups v1. Speciellt var mojligheten i cgroups v1 att tillata upplosning pa tradniva av styrgruppsmedlemskap inte meningsfull for nagra hanterare. (Ett noterbart exempel var hanteraren memory: eftersom tradar delar en adressrymd ar det inte meningsfullt att dela tradar mellan olika memory-styrgrupper.) Oaktat det ursprungliga designbeslutet i cgroups v2 fanns det anvandningsfall for vissa hanterare, sarskilt hanteraren cpu, for vilka upplosning av styrningen pa tradniva var meningsfull och anvandbar. For att rymma sadana fall lade Linux 4.14 till tradlage till cgroups v2. Tradlage tillater foljande: o Att skapa tradade undertrad i vilka en process tradar kan spridas mellan styrgrupper inuti tradet. (Ett tradundertrad kan innehalla flera multitradade processer.) o Begreppet tradade hanterare vilka kan fordela resurser mellan styrgrupperna i ett tradat undertrad. o Lattandet av "regeln inga interna processer", sa att en styrgrupp kan, inom ett tradat undertrad, bade innehalla medlemstradar och utova resurshantering mellan barnstyrgrupper. Med tillagget av tradlage innehaller numera varje styrgrupp utom roten en ny fil, cgroup.type, som visar, och under vissa omstandigheter kan anvandas for att andra, en styrgrupps "typ". Denna fil innehaller ett av foljande typvarden: domain Detta ar en normal v2-styrgrupp som tillhandahaller styrning pa processniva. Om en process ar medlem av denna styrgrupp, da ar alla processens tradar (per definition) i samma styrgrupp. Detta ar standardtypen for styrgrupper, och ger samma beteende som gavs for styrgrupper i den ursprungliga implementationen av cgroups v2. threaded Denna styrgrupp ar medlem i ett tradat undertrad. Tradar kan laggas till till denna styrgrupp, och hanterare kan aktiveras for styrgruppen. domain threaded Detta ar en domanstyrgrupp som tjanstgor som roten i ett tradat undertrad. Denna styrgruppstyp ar aven kand som "tradad rot". domain invalid Detta ar en styrgrupp inuti ett tradat undertrad som ar i ett "felaktigt" tillstand. Processer kan inte laggas till till styrgruppen, och hanterare kan inte aktiveras for styrgruppen. Det enda man kan gora med denna styrgrupp (bortsett fran att ta bort den) ar att konvertera den till en tradad styrgrupp genom att skriva strangen "threaded" till filen cgroup.type. Motiveringen till existensen av denna "provisoriska" typ under skapandet av ett tradat undertrad (istallet for att karnan helt enkelt omedelbart konverterar alla styrgrupper under en tradad rot till typen tradad) ar att ge utrymme for mojliga framtida utokningar av modellen for tradat lage. Tradade hanterare kontra domanhanterare I och med tillagget av tradat lage sarskiljer cgroups v2 nu tva typer av resurshanterare: o Tradade hanterare: dessa hanterare stodjer resursstyrning pa tradniva och kan aktiveras inuti tradade undertrad, med resultatet att motsvarande hanterargranssnittsfiler dyker upp inuti styrgrupperna i det tradade undertradet. Fran och med Linux 4.19 ar foljande hanterare tradade: cpu, perf_event och pids. o Domanhanterare: dessa hanterare stodjer endast resursstyrning pa processniva. Fran en domanhanterares perspektiv ar alla tradar i en process alltid i samma styrgrupp. Domanhanterare kan inte aktiveras inuti ett tradat undertrad. Att skapa ett tradat undertrad Det finns tva vagar som leder till att ett tradat undertrad skapas. Den forsta vagen ar som foljer: (1) Vi skriver strangen "threaded" till filen cgroup.type i en styrgrupp y/z som just nu har typen doman. Detta har foljande effekter: o Typen pa styrgruppen y/z blir tradad. o Foraldrastyrgruppens, y, typ blir doman tradad. Foraldrastyrgruppen ar roten i ett tradat undertrad (aven kant som "tradad rot"). o Alla andra styrgrupper under y som inte redan hade typen tradad (for att de befann sig inuti redan befintliga tradade undertrad under den nya tradade roten) konverteras till typen doman felaktig. (2) Vi skriver strangen "threaded" till var och en av styrgrupperna med doman felaktig under y, for att konvertera dem till typen tradad. Som en konsekvens av detta steg har nu alla tradar under den tradade roten typen tradad och det tradade tradet ar darmed fullt anvandbart. Kravet att skriva "threaded" till var och en av dessa styrgrupper ar nagot otymplig, men mojliggor tankbara framtida utvidgningar av modellen tradlage. Den andra vagen att skapa ett tradat undertrad ar som foljer: (1) I en befintlig styrgrupp, z, som just nu har typen doman aktiverar vi (1.1) en eller flera av de tradade hanterarna och (1.2) gor en process till en medlem av z. (Dessa tva steg kan goras i godtycklig ordning.) Detta har foljande konsekvenser: o Typen pa z blir doman tradad. o Alla nedstigande styrgrupper till z som inte redan hade typen tradad konverteras till typen doman felaktig. (2) Som tidigare gor vi det tradade undertradet anvandbart genom att skriva strangen "threaded" till var och en av styrgrupperna med doman felaktig under z, for att konvertera dem till typen tradad. En av konsekvenserna av de ovanstaende satten for att skapa ett tradat undertrad ar att den tradade rotstyrgruppen endast kan vara foralder till styrgrupper som ar tradade (och doman felaktiga). Den tradade rotstyrgruppen kan inte vara foralder till domanstyrgrupper, och en tradad styrgrupp kan inte ha ett syskon som ar en domanstyrgrupp. Att anvanda ett tradat undertrad Inom ett tradat undertrad kan tradade hanterare aktiveras i varje undergrupp vars typ har andrats till tradad; nar man gor det dyker motsvarande granssnittsfiler for hanteraren upp i barnen till den styrgruppen. En process kan flyttas in i ett tradat undertrad genom att skriva dess PID till filen cgroup.procs i en av styrgrupperna inuti tradet. Detta medfor att alla tradarna i den processen gors till medlemmar av motsvarande styrgrupp och gor processen till en medlem av det tradade undertradet. Processens tradar kan sedan spridas over det tradade undertradet genom att skriva deras trad-ID:n (se gettid(2)) till filerna cgroup.threads i olika styrgrupper inuti undertradet. En process alla tradar maste befinna sig i samma tradade undertrad. Liksom nar man skriver till cgroup.procs galler vissa inneslutningsregler nar man skriver till filen cgroup.threads: o Skrivaren maste ha skrivrattigheter till filen cgroup.threads i malstyrgruppen. o Skrivaren maste ha skrivrattigheter till filen cgroup.procs i den gemensamma anfadern till kall- och malstyrgrupperna. (I nagra fall kan den gemensamma anfadern vara kall- eller malstyrgruppen sjalv.) o Kall- och malstyrgrupperna maste finnas i samma tradade undertrad. (Utanfor ett tradat undertrad misslyckas ett forsok att flytta en trad genom att skriva dess trad-ID till filen cgroup.threads i en annan domanstyrgrupp med felet EOPNOTSUPP.) Filen cgroup.threads finns i alla styrgrupper (inklusive domanstyrgrupper) och kan lasas for att upptacka uppsattningen tradar som finns i styrgruppen. Uppsattningen trad-ID:n som fas nar man laser denna fil ar inte garanterat i ordning eller fri fran dubbletter. Filen cgroup.procs i den tradade roten visar PID:arna for alla processer som ar medlemmar av det tradade undertradet. Filen cgroup.procs i de andra styrgrupperna i undertradet ar inte lasbara. Domanhanterare kan inte aktiveras i ett tradat undertrad; inga granssnittsfiler till hanteraren dyker upp i styrgrupperna under den tradade roten. Fran domanhanterarens synvinkel ar tradade undertrad osynliga: en multitradad process i ett tradat undertrad ser for domanhanteraren ut som en process som bor i den tradade rotstyrgruppen. Inom ett tradat undertrad galler inte regeln "inga interna processer": en styrgrupp kan bade innehalla medlemsprocesser (eller -tradar) och utova styrning over barnstyrgrupper. Regler for att skriva till cgroup.type och att skapa tradade undertrad Ett antal regler galler vid skrivning till filen cgroup.type: o Endast strangen "threaded" far skrivas. Med andra ord, den enda uttryckliga overgangen som ar mojlig ar att konvertera en domanstyrgrupp till typen tradad. o Resultatet av att skriva "threaded" beror pa det nuvarande vardet i cgroup.type enligt foljande: o Doman eller doman tradad: inled skapandet av ett tradat undertrad (vars rot ar foraldern till denna styrgrupp) via det forsta av satten som beskrivs ovan; o Doman felaktig: konvertera denna styrgrupp (vilken finns inuti ett tradat undertrad) till ett anvandbart (d.v.s., tradat) tillstand; o Tradad: ingen effekt (en "no-op"). o Vi kan inte skriva till en cgroup.type-fil om foralderns typ ar doman felaktig. Med andra ord, styrgruppen i ett tradat undertrad maste konverteras till tillstandet tradad uppifran och ner. Det finns aven nagra begransningar som maste vara uppfyllda for att skapa ett tradat undertrad rotat i styrgruppen x: o Det far inte finnas nagon medlemsprocess i nedstigande styrgrupper fran x. (Styrgruppen x sjalv kan ha medlemsprocesser.) o Inga domanhanterare far vara aktiverade i xs fil cgroup.subtree_control. Vid brott mot nagon av ovanstaende begransningar kommer forsok att skriva "threaded" till en fil cgroup.type att misslyckas med felet ENOTSUP. Styrgruppstypen "doman tradad" Enligt metoderna som beskrivs ovan kan typen pa en styrgrupp andras till doman tradad i endera av foljande fall: o Strangen "threaded" skrivs till en barnstyrgrupp. o En tradad hanterare aktiveras inuti styrgruppen och en process gors till medlem av styrgruppen. En doman tradad styrgrupp, x, kan aterga till typen doman om ovanstaende villkor inte langre ar uppfyllda -- det vill saga, om alla tradade barnstyrgrupper till x tas bort och antingen x inte langre har tradade hanterare aktiverade eller inte langre har medlemsprocesser. Nar en styrgrupp x som ar doman tradad atergar till typen doman: o Alla avkommor till x som ar doman felaktig och som inte ar i underliggande tradade undertrad atergar till typen doman. o Rotstyrgruppen i eventuella underliggande tradade undertrad atergar till typen doman tradad. Undantag for rotstyrgruppen Rotstyrgruppen i v2-hierarkin hanteras speciellt: den kan vara foralder till bade doman och tradade styrgrupper. Om strangen "threaded" skrivs till filen cgroup.type i ett av barnen till rotstyrgruppen, da o blir typen pa den styrgruppen tradad. o andras typen pa avkommor till den styrgruppen som inte ar en del av underliggande tradade undertrad till doman felaktig. Observera att i detta fall finns det ingen styrgrupp vars typ blir doman tradad. (Teoretiskt sett kan rotstyrgruppen betraktas som den tradade roten till styrgruppen vars typ andrades till tradad.) Syftet med denna speciella hantering av rotstyrgruppen ar att lata en tradad styrgrupp som anvander hanteraren cpu att placeras sa hogt som mojligt i hierarkin, for att minimera den (lilla) kostnaden i att traversera styrgruppshierarkin. Hanteraren "cpu" i cgroups v2 och realtidstradar Per Linux 4.19 stodjer inte hanteraren cpu i cgroups v2 styrning av realtidstradar (specifikt tradar schemalagda under nagon av policyerna SCHED_FIFO, SCHED_RR och SCHED_DEADLINE; se sched(7)). Darfor kan hanteraren cpu aktiveras i rotstyrgruppen endast om alla realtidstradar finns i rotstyrgruppen. (Om det finns realtidstradar i andra styrgrupper an roten, da misslyckas ett anrop av write(2) med strangen "+cpu" till filen cgroup.subtree_control med felet EINVAL.) Pa vissa system placerar systemd(1) vissa realtidstradar i andra styrgrupper an roten i v2-hierarkin. Pa sadana system maste dessa tradar forst flyttas till rotstyrgruppen innan cpu-hanteraren kan aktiveras. FEL Foljande fel kan forekomma for mount(2): EBUSY Ett forsok att montera ett styrgruppsfilsystem for version 1 som inte specificerade vare sig flaggan name= (for att montera en namngiven hierarki) eller ett hanterarnamn (eller all). NOTERINGAR En barnprocess som skapas via fork(2) arver sin foralders styrgruppsmedlemskap. En process styrgruppsmedlemskap bevaras over execve(2). Flaggan CLONE_INTO_CGROUP till clone3(2) kan anvandas for att skapa en barnprocess som inleder sitt liv i en annan version-2-styrgrupp an foraldraprocessen. /proc-filer /proc/cgroups (sedan Linux 2.6.24) Denna fil innehaller information om hanterarna som ar inkompilerade i karnan. Ett exempel pa innehallet i denna fil (omformaterat for lasbarhet) ar foljande: #subsys_name hierarchy num_cgroups enabled cpuset 4 1 1 cpu 8 1 1 cpuacct 8 1 1 blkio 6 1 1 memory 3 1 1 devices 10 84 1 freezer 7 1 1 net_cls 9 1 1 perf_event 5 1 1 net_prio 9 1 1 hugetlb 0 1 0 pids 2 1 1 Falten i denna fil ar, fran vanster till hoger: [1] Namnet pa hanteraren. [2] Det unika ID:t for styrgruppshierarkin pa vilken denna hanterare ar monterad. Om flera cgroups v1-hanterare ar bundna till samma hierarki kommer var och en visa samma hierarki-ID i detta falt. Vardet i detta falt kommer vara 0 om: o hanteraren inte ar monterad pa en cgroups v1-hierarki; o hanteraren ar bunden till cgroups v2s enda unifierade hierarki eller o hanteraren ar avaktiverad (se nedan). [3] Antalet styrgrupper i denna hierarki som anvander denna hanterare. [4] Detta falt har vardet 1 om denna hanterare ar aktiverad eller 0 om den har avaktiverats (via parametern cgroup_disable pa karnans kommandorad vid uppstart). /proc/pid/cgroup (sedan Linux 2.6.24) Denna fil beskriver styrgrupperna till vilken processen med motsvarande PID hor. Den visade informationen skiljer mellan hierarkierna for styrgrupper version 1 och version 2. For varje styrgruppshierarki i vilken processen ar medlem finns det en post som innehaller tre kolonseparerade falt: hierarki-ID:hanterarlista:styrgruppssokvag Till exempel: 5:cpuacct,cpu,cpuset:/daemons De kolonseparerade falten ar, fran vanster till hoger: [1] For version 1-hierarkier av styrgrupper innehaller detta falt ett unikt hierarki-ID-nummer som kan matchas med ett hierarki-ID i /proc/cgroups. For version 2-hierarkin av styrgrupper innehaller detta falt vardet 0. [2] For version 1-hierarkier av styrgrupper innehaller detta falt en kommaseparerad lista over hanterare bundna till hierarkin. For version 2-hierarkin av styrgrupper ar detta falt tomt. [3] Detta falt innehaller sokvagen till styrgruppen i hierarkin den hor till. Sokvagen ar relativ hierarkins monteringspunkt. /sys/kernel/cgroup-filer /sys/kernel/cgroup/delegate (sedan Linux 4.15) Denna fil exporterar en lista over filerna i cgroups v2 (en per rad) som gar att delegera (d.v.s., vars agarskap skall andras till delegatens anvandar-ID). I framtiden kan uppsattningen delegerbara filer andras eller vaxa, och denna fil ger en mojlighet for karnan att informera program i anvandarrymden om vilka filer som maste delegeras. Per Linux 4.15 syns foljande nar man inspekterar filen: $ cat /sys/kernel/cgroup/delegate cgroup.procs cgroup.subtree_control cgroup.threads /sys/kernel/cgroup/features (sedan Linux 4.15) Med tiden kan samlingen av funktioner i cgroups v2 som karnan tillhandahaller andras eller vaxa, och nagra funktionerna kanske inte aktiveras som standard. Denna fil ger ett satt for program i anvandarrymden att avgora vilka funktioner den korande karnan stodjer och har aktiverade. Funktioner listas en per rad: $ cat /sys/kernel/cgroup/features nsdelegate memory_localevents Posterna som kan forekomma i denna fil ar: memory_localevents (sedan Linux 5.2) Karnan stodjer monteringsflaggan memory_localevents. nsdelegate (sedan Linux 4.15) Karnan stodjer monteringsflaggan nsdelegate. memory_recursiveprot (sedan Linux 5.7) Karnan stodjer monteringsflaggan memory_recursiveprot. SE AVEN prlimit(1), systemd(1), systemd-cgls(1), systemd-cgtop(1), clone(2), ioprio_set(2), perf_event_open(2), setrlimit(2), cgroup_namespaces(7), cpuset(7), namespaces(7), sched(7), user_namespaces(7) Karnans kallfil Documentation/admin-guide/cgroup-v2.rst. OVERSATTNING Den svenska oversattningen av denna manualsida skapades av Goran Uddeborg Denna oversattning ar fri dokumentation; las GNU General Public License Version 3 eller senare for upphovsrattsvillkor. Vi tar INGET ANSVAR. Om du hittar fel i oversattningen av denna manualsida, skicka ett mail till . Linux man-pages 6.8 2 maj 2024 cgroups(7)