1.2. Relazione tra Sottosistemi, Gerarchie, Control Groups e Task
Si ricordi che nella terminologia presente in cgroup, i processi di sistema sono indicati come task.
Di seguito sono riportate alcune regole di base, relative alle relazioni presenti tra i sottosistemi, gerarchie di cgroups e task, insieme con una spiegazione delle conseguenze delle suddette regole.
Regola 1
Una singola gerarchia può avere uno o più sottosistemi ad essa collegati.
Di conseguenza, i sottosistemi della cpu
e della memoria
(o altri sottosistemi), possono essere collegati ad una singola gerarchia, fintanto che ciascuno non sia collegato ad altra gerarchia che abbia già altri sottosistemi (vedi regola 2).
Regola 2
Un singolo sottosistema (come la cpu
), non può essere collegato a più di una gerarchia se una di queste ha già collegato un sottosistema differente.
Di conseguenza, il sottosistema della cpu
non può mai essere collegata a due gerarchie differenti se una di queste gerarchie ha già agganciato il sottosistema di memoria
. Tuttavia, un singolo sottosistema può essere collegato a due gerarchie se entrambe le gerarchie hanno agganciato soltanto quel sottosistema
Regola 3
Ogni qualvolta si crea una nuova gerarchia nei sistemi, tutti i task nel sistema sono inizialmente membri del cgroup predefinito di quella gerarchia, noto come cgroup di root. Per ogni singola gerarchia creata, ogni task nel sistema può essere un membro di un solo cgroup in quella gerarchia. Un singolo task può essere in cgroup multipli, fintanto che ciascuno di questi cgroup è in una gerarchia differente. Non appena un task diventa un membro di un secondo cgroup nella stessa gerarchia, esso viene rimosso dal primo cgroup della gerarchia. In ogni istante un task non si trova mai in due cgroup differenti nella stessa gerarchia.
Di conseguenza, se i sottosistemi di cpu
e memoria
sono collegati a una gerarchia di nome cpu_mem_cg
, ed il sottosistema net_cls
è collegato ad una gerarchia di nome net
, allora un processo httpd
, in esecuzione, potrebbe essere un membro di un qualsiasi cgroup in cpu_and_mem
e di un qualsiasi cgroup in net
.
Il cgroup in cpu_mem_cg
di cui il processo httpd
è un membro, potrebbe limitare il suo tempo di CPU a metà di quello dedicato agli altri processi, e limitare la memoria ad un massimo di 1024
MB. Inoltre, il cgroup in net
di cui è membro, potrebbe limitare il tasso di trasmissione a 30
megabyte per secondo.
Quando è creata la prima gerarchia, ogni task nel sistema è un membro di almeno un cgroup:il cgroup radice. Perciò, quando si usano i cgroup, ogni task di sistema si trova sempre in almeno un cgroup.
Regola 4
Ogni processo (task), nel sistema, che fa fork di sè stesso crea un processo (task) figlio. Un task figlio eredita automaticamente l'appartenenza al cgroup del genitore, ma all'occorrenza, può essere trasferito a cgroup differenti. Una volta effettuato il fork, i processi genitore e figlio sono completamente indipendenti.
Di conseguenza, si consideri il task httpd
, membro del cgroup chiamato half_cpu_1gb_max
nella gerarchia cpu_and_mem
, e membro del cgroup trans_rate_30
nella gerarchia net
. Quando il processo httpd
si ramifica, il suo processo figlio diventa automaticamente un membro del cgroup half_cpu_1gb_max
e del cgroup trans_rate_30
. Esso eredita gli stessi cgroup del proprio processo genitore.
Da quì i processi genitore e quello figlio saranno completamente indipendenti: la modifica di un cgroup di appartenenza non avrà alcun effetto sui processi. Allo stesso modo la modifica dei cgroup di un processo genitore non interesserà in alcun modo i processi figli relativi. Per riassumere: qualsiasi processo figlio erediterà inizialmente l'appartenenza agli stessi cgroup del processo genitore, ma tale appartenenza potrà essere modificata o rimossa più avanti.