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, cgroupswas 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 cgexecBefehl 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 tasksetzur 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 tasksetselbst 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 tasksetfür jeden neuen verwendet werden. Ein weitaus vernünftigerer Ansatz wäre, CPU-intensive Anwendungen wahlweise über cgexecoder 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 tasksetoder cgexecerfordert 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 taskseloder 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.confDatei erreicht werden .
Siehe auch