2.9.2. Comportamento di processo nel Control Group di Root
Alcune opzioni di configurazione di blkio
e cpu
influenzano i processi (task), in esecuzione nel cgroup di root in maniera differente che nei sottogruppi. Si consideri il seguente esempio:
Creare due sottogruppi sotto il gruppo root: /rootgroup/red/
e /rootgroup/blue/
In ciascun sottogruppo e nel gruppo radice, definire l'opzione di configurazione cpu.shares
ed impostare il valore 1
.
Nello scenario sopra configurato, un processo posizionato in ciascun gruppo (cioè, un task in /rootgroup/tasks
, /rootgroup/red/tasks
e /rootgroup/blue/tasks
), finisce col consumare 33.33% di CPU:
/rootgroup/
process: 33.33%
/rootgroup/blue/
process: 33.33%
/rootgroup/red/
process: 33.33%
Ogni altro processo posizionato nei sottogruppi blue
e red
condivide il 33.33% di CPU assegnato al sottogruppo.
Tuttavia, processi multipli posizionati nel gruppo di root causano la risorsa di CPU ad essere suddivisa per processo piuttosto che per gruppo. Per esempio, se /rootgroup/
contiene tre processi, /rootgroup/red/
contiene un processo e /rootgroup/blue/
contiene un processo, e l'opzione cpu.shares
è impostata ad 1
in tutti i gruppi, la risorsa CPU è suddivisa come segue:
/rootgroup/
processes: 20% + 20% + 20%
/rootgroup/blue/
process: 20%
/rootgroup/red/
process: 20%
Quindi, è consigliabile spostare tutti i processi dal gruppo root ad uno specifico sottogruppo quando si usano le opzioni di configurazione di blkio
e cpu
, che suddividono una risorsa disponibile in base al peso o una condivisione (per esempio, cpu.shares
o blkio.weight
). Per spostare tutte i task dal gruppo root in uno specifico sottogruppo, si può usare il seguente comando:
rootgroup]# for i in `cat tasks`; do echo $i > red/tasks; done