
Es scheint, dass Linux die Prozessausführung unabhängig vom Benutzer des Prozesses plant. Wenn also ein Benutzer 100 Prozesse ausführt und ein anderer Benutzer 1 Prozess, erhält der erste Benutzer im Durchschnitt 100-mal mehr CPU-Zeit als der zweite.
Gibt es eine Möglichkeit, die CPU-Zeit nach Benutzern auszugleichen, so dass in diesem Beispiel beide Benutzer 50 % der CPU-Zeit erhalten?
Antwort1
Da es sich hier um Linux handelt, sind die Standardeinstellungen natürlich relativ einfach, aber es gibt viele konkurrierende Tools, um diese zu ändern. Aber nicht alle davon sind in jeder Distribution verfügbar, daher ist es nicht offensichtlich, welches man verwenden soll.
Auf Cgroups-Systemen wird für die CPU-Ressource ein gewichtetes Verteilungsmodell unterstützt, bei dem jeder Gruppe ein Anteil der verfügbaren Ressource entsprechend ihrer Gewichtung zugewiesen wird.
Auf systemd-Systemen entspricht das Slice-Konzept direkt der Verwendung von cgroups. Lesen Sieman systemd.resource-control
und erwägen Sie die Aktivierung DefaultCPUAccounting=
. Wenden Sie für jede betroffene Einheit das gleiche CPU-Verhältnis an. Um dies beispielsweise für jeden interaktiven Benutzer zu tun, geben Sie dies in etwa wie folgt ein: /etc/systemd/system/user-.slice.d/resource.conf
[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control
[Slice]
CPUWeight=100
Der genaue Wert der Zahl ist nicht wichtig, solange jede betroffene Einheit etwas im richtigen Verhältnis erhält. Außerdem wird nicht die gesamte System-CPU aufgeteilt, sondern die CPU, die dem übergeordneten user.slice zugewiesen ist. Wenn stattdessen eine Serviceeinheit optimiert wird, liegen diese außerhalb des system.slice.
Auf Systemen, die pam_limit verwenden, können POSIX-Ressourcenlimits für angemeldete Benutzer festgelegt werden. Siehe man limits.conf
, und die Konfigurationsdatei könnte ein Drop-In wie sein /etc/security/limits.d/resource.conf
. Eine praktische Sache könnte sein, nproc
die maximale Anzahl von Aufgaben festzulegen, die ein Benutzer erhält. Wird dieser Wert überschritten, schlägt die Aufspaltung fehl. Oder cpu
ist ein verlockendes Limit, das Überschreiten des festen Limits kann jedoch dazu führen, dass Prozesse beendet werden, was keine gute Benutzererfahrung ist.
Und für die Aufgabenversion des Kinderspiels Rotlicht Grünlicht gibt esCPU-Begrenzung. Dies sendet SIGSTOP- und SIGCONT-Signale, um die CPU-Nutzung zu verwalten, ganz einfach. Insbesondere ist es ein bisschen Ad-hoc, da es keine Konfigurationsdatei gibt, es muss aufgerufen werden, um einen Prozess zu starten, oder es muss eine PID zugewiesen werden.
Antwort2
Sie können cgroup verwenden und die Anwendung entsprechend Ihren Anforderungen zuweisen. Eine Referenz istcgroups-v2