Zunächst einmal sollten Sie lernen, dass cpu.shares
nicht hart Limit auf die Anzahl der Kerne eingestellt ist. Es ist ein generischer Parameter, der verwendet wird, um verbrauchte CPU-Ressourcen im CFS-Scheduler zu berücksichtigen.
I.e. Wenn es zwei Apps im System gibt, die beide eine Sekunde CPU-Zeit verbrauchen, setzt CFS ihre vruntime
auf 10 /cpu.shares
, damit sie beide mehr CPU-Zeit benötigen, sie haben gleiche Chancen, sie zu bekommen.
Nun, wenn Sie einstellen cpu.shares
auf kleinere Werte (dh 128
) für die erste Anwendung, wird es bekommen vruntime
= 10 /128 = 7,8 * 10 , während zweite (mit nicht angepassten Wert der Aktien) wird erhalten vruntime
= 10 /1024 = 0,9 * 10 . Der Prozess mit der niedrigeren Nummer vruntime
wird ausgewählt, um zuerst auf der CPU ausgeführt zu werden, sodass die zweite Anwendung noch 7 Sekunden lang ausgeführt werden kann, es sei denn, die CPU wird der ersten App zugewiesen.
Beachten Sie, dass diese Prioritäten nur in Anwesenheit von zweiten CPU-Greedy-App funktionieren. Wenn nur Anwendungen mit "eingeschränkten" Benutzern arbeiten, werden sie vom CFS-Scheduler auf CPUs gesetzt, so dass sie alle 32 Kerne belegen können.
Schließlich Beantwortung erste Frage, Ihre Aufgabe ist rein mathematisch:
x 4
-------- = ----
1024 + x 32
Sie cpu.shares
zu setzen soll.
Haben Sie einen Blick auf diese Frage geworfen: http://serverfault.com/questions/603861/limit-user-to-n-cpu-cores – SMohan
Ich schaute auf http://unix.stackexchange.com/ Fragen/5106 Was ist der Unterschied zwischen Nice und Cgroup? – mahmood