2016-03-19 19 views
0

Um die Anzahl der verfügbaren Kerne für einen Benutzer zu begrenzen, habe ich beschlossen, Cgroup zu verwenden. Also, indem ich eine Gruppe erstelle, muss ich eine Nummer für cpu.shares setzen. Angenommen, es gibt 32 Kerne im System und ich möchte einen Benutzer nur auf 4 Kerne beschränken. Was ist der korrekte Wert für diesen Parameter?Begrenzung der CPU-Anzahl für einen Benutzer

Soweit ich verstehe, muss ich 400 verwenden, da die Gesamt-CPU-Zeit 3200 ist. Bin ich richtig?

+0

Haben Sie einen Blick auf diese Frage geworfen: http://serverfault.com/questions/603861/limit-user-to-n-cpu-cores – SMohan

+0

Ich schaute auf http://unix.stackexchange.com/ Fragen/5106 Was ist der Unterschied zwischen Nice und Cgroup? – mahmood

Antwort

1

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.

+0

Das beschränkte die CPU-Zählungen nicht. Bitte sehen Sie mein neues Thema unter http://unix.stackexchange.com/questions/270938 – mahmood