Wie kann ich cgroups so konfigurieren, dass Ressourcen zwischen Benutzern fair geteilt werden?

11

Früher gab es eine Kernel-Konfigurationsoption namens sched_user oder ähnliches unter cgroups. Dies ermöglichte (meines Wissens) allen Benutzern, Systemressourcen fair zu teilen. In 2.6.35 ist es nicht verfügbar. Gibt es eine Möglichkeit, mein System so zu konfigurieren, dass io / cpu / memory-Ressourcen automatisch für alle Benutzer (einschließlich root?) Freigegeben werden? Ich habe noch nie eine cgroup eingerichtet. Gibt es dafür ein gutes Tutorial? Vielen Dank.

NightwishFan
quelle
Nun, ich habe das Paket cgroups-bin unter Ubuntu geplündert und bin mir ziemlich sicher, dass es dies standardmäßig "tut", wenn ich es nur installiere. Ich nahm an, dass ein Setup erforderlich wäre, aber ich nehme an, dass dies nur dann der Fall ist, wenn Sie spezielle Anforderungen haben. Ich habe getestet, indem ich Stress mit 2 CPU-Threads unter root und 2 unter meinem Benutzer ausgeführt habe, und alle 4 Threads scheinen 50% an der Spitze zu haben, was mich glauben lässt, dass es funktioniert. Dies kann es für mich "lösen", aber wenn ich eine klarere Möglichkeit zur Bestätigung oder eine bessere Idee zur Konfiguration haben möchte, nochmals vielen Dank!
NightwishFan
Versuchen Sie dies: kennystechtalk.blogspot.co.uk/2015/04/…
Ken Sharp

Antworten:

12

Die Kernel - Dokumentation enthält eine allgemeine Berichterstattung über cgroups mit Beispielen.

Das cgroups-binPaket (das davon abhängt libcgroup1), das bereits von der Distribution bereitgestellt wird, sollte in Ordnung sein.

Die Konfiguration erfolgt durch Bearbeiten der folgenden zwei Dateien:

/etc/cgconfig.conf

Wird von libcgroup verwendet, um Kontrollgruppen, ihre Parameter und Mountpunkte zu definieren.

/etc/cgrules.conf

Wird von libcgroup verwendet, um die Kontrollgruppen zu definieren, zu denen der Prozess gehört.

Diese Konfigurationsdateien enthalten bereits Beispiele. Passen Sie sie daher an Ihre Anforderungen an. Die Manpages decken ihre Konfiguration recht gut ab.

Starten Sie anschließend den Workload-Manager und den Regel-Daemon:

service cgconfig restart
service cgred restart

Der Workload-Manager (cgconfig) ist für die Zuweisung der Ressourcen verantwortlich.
Hinzufügen eines neuen Prozesses zum Manager:

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

Hinzufügen eines bereits laufenden Prozesses zum Manager:

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

Oder automatisch über die Datei cgrules.conf und den CGroup Rules Daemon (cgred), der jeden neu erzeugten Prozess in die angegebene Gruppe zwingt.


Beispiel /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;
}

Beispiel /etc/cgrules.conf:

alice            cpu             group1/
bob              cpu             group2/

Dadurch werden die CPU-Ressourcen zwischen 50 und 50 zwischen dem Benutzer 'alice' und 'bob' aufgeteilt.

wedeln
quelle
Lerngruppen, hat dies mit einem Lesezeichen versehen. Vielen Dank.
Jigar