Come posso configurare i cgroup per condividere equamente le risorse tra utenti?


11

C'era un'opzione di configurazione del kernel chiamata sched_user o simile in cgroups. Ciò ha permesso (per quanto ne so) a tutti gli utenti di condividere equamente le risorse di sistema. In 2.6.35 non è disponibile. Esiste un modo in cui posso configurare il mio sistema per condividere automaticamente le risorse io / cpu / memory tra tutti gli utenti (incluso root?). Non ho mai creato un cgroup prima, c'è un buon tutorial per farlo? Grazie mille.


Bene, ho preso un bottino nel pacchetto cgroups-bin su Ubuntu e sono abbastanza sicuro che "fa questo" di default se lo installo. Ho pensato che avrebbe richiesto l'installazione, tuttavia suppongo che lo faccia solo se hai esigenze particolari. Ho provato eseguendo lo stress con 2 thread CPU sotto root e 2 sotto il mio utente e tutti e 4 i thread sembrano condividere il 50% in alto, il che mi fa pensare che funzioni. Questo potrebbe "risolverlo" per me, tuttavia se qualcosa mi piacerebbe avere un modo più chiaro per confermare, o un'idea migliore su come configurarlo, grazie ancora!
NightwishFan

Risposte:


12

La documentazione del kernel fornisce una copertura generale dei cgroup con esempi.

Il cgroups-binpacchetto (che dipende da libcgroup1) già fornito dalla distribuzione dovrebbe andare bene.

La configurazione viene eseguita modificando i seguenti due file:

/etc/cgconfig.conf

Utilizzato da libcgroup per definire i gruppi di controllo, i loro parametri e punti di montaggio.

/etc/cgrules.conf

Usato da libcgroup per definire i gruppi di controllo a cui appartiene il processo.

Questi file di configurazione contengono già degli esempi, quindi prova ad adattarli alle tue esigenze. Le pagine man coprono abbastanza bene la loro configurazione.

Successivamente, avvia il gestore del carico di lavoro e il demone delle regole:

service cgconfig restart
service cgred restart

Il gestore del carico di lavoro (cgconfig) è responsabile per l'allocazione delle risorse.
Aggiunta di un nuovo processo al gestore:

cgexec [-g <controllers>:<path>] command [args]

Aggiunta di un processo già in esecuzione al gestore:

cgclassify [-g <controllers>:<path>] <pidlist>

O automaticamente sul file cgrules.conf e sul demone delle regole del CGroup (cgred), che forza ogni processo appena generato nel gruppo specificato.


Esempio /etc/cgconfig.conf:

group group1 {
    perm {
            task {
                    uid = alice;
                    gid = alice;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

group group2 {
    perm {
            task {
                    uid = bob;
                    gid = bob;
            }
            admin {
                    uid = root;
                    gid = root;
            }
    }

    cpu {
            cpu.shares = 500;
    }

}

mount {
    cpu = /dev/cgroups/cpu;
    cpuacct = /dev/cgroups/cpuacct;
}

Esempio /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Ciò condividerà le risorse della CPU circa 50-50 tra l'utente "alice" e "bob"


Apprendimento di cgroups, questo preferito. Grazie.
Jigar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.