Ho 3 processi su una macchina single core. Ogni processo è esattamente lo stesso e brucia la CPU il più velocemente possibile (tight loop). Due di questi ( A
e B
) vengono lanciati con cgexec in gruppi separati con condivisioni impostate su 512 e 512. Il terzo ( C
) viene avviato regolarmente, non con cgexec.
Una volta che tutto è attivo e funzionante, C
ottiene il 66% della CPU mentre A
e B
diviso il 33%. Se uccido C
allora A
e B
ottengo il 50% ciascuno (come previsto).
Perché C
ottiene il 66%? Mi sarei aspettato il 33% ciascuno in questo scenario, o forse il 50% (C), il 25% (A) e il 25% (B). Il 66% C
non funzionerà, non importa come faccio la matematica però.
In generale, voglio capire come i processi avviati senza cgexec
interagire con i processi avviati cgexec
quando si tratta di condivisione delle risorse (CPU in particolare, ma una risposta più generale sarebbe apprezzata se non fosse troppo complessa).
top
e credo che siano stati avviati abbastanza semplicemente da un prompt dei comandi: cgexec -g cpu:foo myprogram
e ./myprogram
. È passato un po 'di tempo, quindi non ricordo con certezza.
cpu.shares
è un'opzione di configurazione molto particolare; Raccomando di dividere le cose per CPU se possibile usando cpuset.cpus
invece.