TL; DR : Aus kurzen Recherchen geht hervor, dass es möglich ist, Befehle auf eine bestimmte Anzahl von Kernen zu beschränken. In allen Fällen müssen Sie jedoch einen Befehl verwenden, der die Beschränkung tatsächlich erzwingt.
cgroups
Linux hat, cgroups
was häufig genau zum Zweck der Einschränkung der Ressourcen verwendet wird, die Prozessen zur Verfügung stehen. Nach einer kurzen Recherche finden Sie im Arch Wiki ein Beispiel mit der folgenden Matlab-Konfiguration (einer wissenschaftlichen Software) /etc/cgconfig.conf
:
group matlab {
perm {
admin {
uid = username;
}
task {
uid = username;
}
}
cpuset {
cpuset.mems="0";
cpuset.cpus="0-5";
}
memory {
memory.limit_in_bytes = 5000000000;
}
}
Damit eine solche Konfiguration wirksam wird, müssen Sie den Prozess über einen cgexec
Befehl ausführen , z. B. von derselben Wiki-Seite aus:
$ cgexec -g memory,cpuset:matlab /opt/MATLAB/2012b/bin/matlab -desktop
Task-Set
Eine verwandte Frage zu Ask Ubuntu und Wie beschränke ich einen Prozess auf einen CPU-Kern unter Linux? [duplicate] auf der Unix- und Linux-Site zeigt ein Beispiel für die Verwendung taskset
zur Beschränkung der CPUs für den Prozess. In der ersten Frage wird dies erreicht, indem alle Prozesse für einen bestimmten Benutzer analysiert werden
$ ps aux | awk '/^housezet/{print $2}' | xargs -l taskset -p 0x00000001
In der anderen Frage wird ein Prozess über sich taskset
selbst gestartet :
$ taskset -c 0 mycommand --option # start a command with the given affinity
Fazit
Obwohl es durchaus möglich ist, Prozesse einzuschränken, scheint es nicht so einfach zu sein, dies für bestimmte Benutzer zu erreichen. Das Beispiel in einem verknüpften Ask Ubuntu-Beitrag erfordert ein konsistentes Scannen nach Prozessen, die jedem Benutzer gehören und taskset
für jeden neuen verwendet werden. Ein weitaus vernünftigerer Ansatz wäre, CPU-intensive Anwendungen wahlweise über cgexec
oder auszuführen taskset
. Es ist auch nicht sinnvoll, alle Prozesse auf eine bestimmte Anzahl von CPUS zu beschränken, insbesondere für diejenigen, die Parallelität und Parallelität verwenden, um ihre Aufgaben schneller auszuführen. Wenn Sie sie auf eine bestimmte Anzahl von CPUs beschränken, kann dies die Verarbeitung verlangsamen. Darüber hinaus ist es, wie Terdons Antwort bereits sagte , eine Verschwendung von Ressourcen
Das Ausführen ausgewählter Anwendungen über taskset
oder cgexec
erfordert die Kommunikation mit Ihren Benutzern, um ihnen mitzuteilen, welche Anwendungen sie ausführen können, oder das Erstellen von Wrapper-Skripten, mit denen ausgewählte Anwendungen über tasksel
oder gestartet werden cgexec
.
Darüber hinaus sollten Sie die Anzahl der Prozesse festlegen, die ein Benutzer oder eine Gruppe erzeugen kann, anstatt die Anzahl der CPUs zu begrenzen. Dies kann über die /etc/security/limits.conf
Datei erreicht werden .
Siehe auch