CPU Kerne VM zugewiesen, aber Docker nicht verboten -Kann Docker die auch nutzen?


Recommended Posts

Hallo.

 

Ich habe meiner (einzigen) VM auf einem unraid System einige Kerne bei der VM Erzeugung zugewiesen (alle bis auf Core0 + zugehörendem HT).

Beim CPU Pinning musste auch etwas eingestellt werden, deshalb dort für die VM das gleiche.

Eine weitergehende Kernisolierung habe ich nicht eingestellt (soweit ich mich entsinne).


Nun braucht diese durchgehend laufende VM nur sporadisch diese Rechenleistung.


Parallel läuft ab und zu der Docker SABnzbd/ich777, der ab und zu mal auch Downloads per PAR zurecht rücken/rechnen muß.

 

Nun meine Frage, weil ich aus der Dashboardanzeige das nicht entnehmen kann:
Wenn die VM sich langweilt/nicht ausgelastet ist und der Docker richtig Leistung braucht, teilt unraid dem Docker die freien Rechenzeiten der Kerne zu, die zwar in der VM EInrichtung der VM erlaubt, aber nie anderen Anwendungen verboten wurden

oder sind diese Kerne nun exklusiv in der VM?

 

Anbei Screenshot

-VM EInstellungen (oberer Teil)

-Docker Einstellungen (oberer Teil)

-CPU Pinning

 

VM1-2023-03-12 00_34_42-102 Tessa Main (TESSA-MAIN1064) – VNC Viewer.png

Docker1-2023-03-12 00_35_48-102 Tessa Main (TESSA-MAIN1064) – VNC Viewer.png

CPU1-2023-03-12 00_37_24-102 Tessa Main (TESSA-MAIN1064) – VNC Viewer.png

Link to comment
4 hours ago, DataCollector said:

Beim CPU Pinning musste auch etwas eingestellt werden, deshalb dort für die VM das gleiche.

 

das ist so nicht ganz korrekt ...

 

das sind "2 Paar Schuhe", VM Pinning und Unraid CPU Pinning müssen nicht aufeinander folgen, abgestimmt sein, ...

 

die Meisten lassen das unraid CPU Pinning und weisen VM(s) separate CPU's zu, gerade wenn mehrere parallel laufen sollten.

 

zusammengefasst, mit dem CPU Pinning (unraid) limitierst du natürlich alles auf diese pins was vom host aufgerufen wird, sprich, plugins wo etwas ausführen, Docker(s), ... laufen bei Dir aktuell nur auf core 0/10, fertig, die VM hat für sich die restlichen cores.

 

wenn ich mich recht erinnere nutzt du ja die VM nicht als Desktop oder Gaming VM sondern "nur" remote ohne GPU pass etc ... als reine "Arbeits VM" von einem anderen client aus, da macht das CPU Pinning auf dem Host wenig Sinn, würde ich entfernen und nur das VM Pinning belassen.

 

Ich nutze 2 VM's "produktiv" mit GPU passthrough, sprich, der Server ist bei mir auch gleichzeitig der Desktop PC und die Gaming VM hängt am TV, da ich in allen Konstellationen so "bare metal" wie möglich sein will (und das ist auch gefühlt so) habe ich alles isoliert, Unraid, VM1, VM2 und merke dadurch keine Last wenn etwas "anderes" arbeitet.

 

unraid (host, plugins, dockers, ...)

image.thumb.png.c73964da416d82358548d15ec6f66799.png

desktop vm & gaming vm

image.png.56f91d216564731a61d498de6bcc2542.png

 

image.thumb.png.de158dc162f572f93d0f4ed45c9c82a1.pngimage.thumb.png.6ed3327046bd074c9f480d8e09bfec40.png

 

wenn die VM's aus sind

image.png.95375b95f18c132a52b6def1e0577af0.png

 

5 hours ago, DataCollector said:

Nun meine Frage, weil ich aus der Dashboardanzeige das nicht entnehmen kann:

das solltest du allerdings sehen ... wenn ernsthaft Last anliegt auf dem Docker wird sich das auf core 0/10 auswirken, sonst nicht ...

 

5 hours ago, DataCollector said:

oder sind diese Kerne nun exklusiv in der VM?

 

zusammengefasst, so wie es jetzt bei Dir eingerichtet ist, ja ;)

Link to comment
2 minutes ago, alturismo said:

das ist so nicht ganz korrekt ...

okay, aber als ich das CPU Pinning für die VM abschalten wollte, blieb ein Kern immer aktiv markiert.

2 minutes ago, alturismo said:

zusammengefasst, mit dem CPU Pinning (unraid) limitierst du natürlich alles auf diese pins was vom host aufgerufen wird, sprich, plugins wo etwas ausführen, Docker(s), ... laufen bei Dir aktuell nur auf core 0/10, fertig, die VM hat für sich die restlichen cores.

Dabei habe ich dich gerade 0/10 mit Absicht frei gelassen, damit unraid immer den ersten Core hat und erhoffte, daß es sich bei Bedarf auch die anderen nimmt, sofern die VM die eben nicht auslastet.

Das habe ich wohl falsch verstanden und erklärt auch, warum Sabnzbd so langsam mit PAR korrigiert.

 

2 minutes ago, alturismo said:

wenn ich mich recht erinnere nutzt du ja die VM nicht als Desktop oder Gaming VM sondern "nur" remote ohne GPU pass etc ... als reine "Arbeits VM" von einem anderen client aus, da macht das CPU Pinning auf dem Host wenig Sinn, würde ich entfernen und nur das VM Pinning belassen.

Du liegst richtig, dass die Win10-VM nur als Arbeitstier herhalten soll.

Das CPU Pinning zu entfernen geht nicht. Ein Kern bleibt immer übrig und läßt sich nicht abschalten (sieh Screenshot1 unten).

Und die VM hat dann auch nur noch einen Kern.

 

Und wenn ich dann in der VM Konfiguration bestimmte Kerne konfiguriere, dann tauchen auch genau die im CPU Pinning automatisch auf.

(Screenshot 2 und 3)

 

2 minutes ago, alturismo said:

Ich nutze 2 VM's "produktiv" mit GPU passthrough, sprich, der Server ist bei mir auch gleichzeitig der Desktop PC und die Gaming VM hängt am TV, da ich in allen Konstellationen so "bare metal" wie möglich sein will (und das ist auch gefühlt so)

Zum Thema Passthrough: Da ich von der Netzwerkgeschwindigkeit (oder genauer Latenz bei Netzwerkzugriffen auf die Shares der selben Maschine) sehr enttäuscht bin, überlege ich ernsthaft eine, oder gar mehrere SSD, auch an die VM durchzureichen um darauf nativ/bare metal  zu arbeiten und nur die Ergebnisse in Shares zu transferieren. Aber das ist ein anderes Thema.

 

2 minutes ago, alturismo said:

habe ich alles isoliert, Unraid, VM1, VM2 und merke dadurch keine Last wenn etwas "anderes" arbeitet.

Ich hätte gerne die Rechenleistung (abgesehen von einer Grundkapazität, damit alles weiterhin flüssig läuft) dort, wo se gebraucht wird, egal ob das gerade Docker oder VM oder wenn beides die braucht eben dann zu gleichen Teilen verteilt ist.

Ich habe 10Kerne + 10HT.

1 Kern+HT soll für unraid selber bleiben, damit es imme rnoch akzeptabel schnell arbeiten kann. 9 Kerne+9HT stehen somit füt VM/Docker zur Verfügung.

Am liebsten hätte ich je 1 Kern+HT für VM und für jeden Docker fest (damit alles sich noch flüssig bedienen läßt und nichts in einen Timeout läuft) und die restlichen Kerne und zugehörenden HT dürfen nach Bedarf dynamisch zwischen den gestarteten Anwendungen 'springen'.

Aber ich befürchte, das geht so nicht. Oder?

 

2 minutes ago, alturismo said:

image.thumb.png.c73964da416d82358548d15ec6f66799.png

desktop vm & gaming vm

image.png.56f91d216564731a61d498de6bcc2542.png

 

Deine Isolation hätte für mich das Problem, daß ich dynamisch mal die Rechenkraft vieler kerne in der VM brauche und mal in den Docker Containern. Alle aber durchgehend und parallel laufen, aber eben selber nur ab und zu wirklich etwas rechenintensives zu tun bekommen.

 

2 minutes ago, alturismo said:

wenn die VM's aus sind

image.png.95375b95f18c132a52b6def1e0577af0.png

Meine VM und Docker sollen eigentlich 24/7 durchlaufen.

Klar kann ich manuell der VM 5 Kerne (+HT) zuordnen und Docker 4Kerne+HT, aber wenn dei VM dann richtig schuften muss, während Docker sich langweilt, hätte ich gerne dynamisch noch 3 Kerne (+zugehörende HT) vom Docker bei der VM gesehen und wen der Docker was rechenintensives zu tun bekommt, dann wieder eine passende Umverteilung.

cpupinn-2023-03-12 05_57_22-102 Tessa Main (TESSA-MAIN1064) – VNC Viewer.png

VM-10.2023-03-12 06_02_56-102 Tessa Main (TESSA-MAIN1064) – VNC Viewer.png

VM10CPU2023-03-12 06_03_27-102 Tessa Main (TESSA-MAIN1064) – VNC Viewer.png

Link to comment
18 minutes ago, DataCollector said:

okay, aber als ich das CPU Pinning für die VM abschalten wollte, blieb ein Kern immer aktiv markiert.

46 minutes ago, alturismo said:

klar, dann habe ich mich falsch ausgedrückt, die VM braucht natürlich Kerne, sprich, du weist der VM Kerne zu, mindestens 1 ;) aber das CPU Pinning des hosts musst du dadurch nicht entsprechend anpassen ... sprich, lass den Host unberührt und weise da wieder alle Kerne zu, VM lassen wie Sie war ...

 

sprich, unraid Isolation ex

image.thumb.png.67d40fdb2ef28cf3a0508fdda26a1a26.png

VM belassen wie Sie war

image.png.26eda0ca1393c26f1dbb60418bf5d4a4.png

 

jetzt hat Unraid und seine Prozesse bei Bedarf "alles" zur Verfügung, die VM läuft parallel auf allem außer 0/10 + 1/11

 

 

  • Thanks 1
Link to comment
18 minutes ago, alturismo said:

die VM braucht natürlich Kerne, sprich, du weist der VM Kerne zu, mindestens 1 ;) aber das CPU Pinning des hosts musst du dadurch nicht entsprechend anpassen ... sprich, lass den Host unberührt und weise da wieder alle Kerne zu, VM lassen wie Sie war ...

sprich, unraid Isolation ex

image.thumb.png.67d40fdb2ef28cf3a0508fdda26a1a26.png

 

 

 

Die CPU Isolation hatte ich nie eingestellt.

Das CPU Pinning VM stellt sich automatisch so ein, wie ich die Kerne in der VM-Konfiguration zuordne.

Dann war es ja alles so eingestellt, wie ich es wollte. Dann bin ich vielleicht wieder auf die eher verwirrende Anzeige im Dashboard reingefallen.

Link to comment

und finaler Nachtrag.

 

Isolation, damit isolierst du Kerne von dem host grundsätzlich, natürlich kann der Host aber Prozessen die "freien" Kerne zuweisen, siehe VM's, da wird das ja dann genau so praktiziert. Das Gleiche kannst du dann natürlich auch mit Docker(s) nutzen.

 

wenn du nichts separat einstellst, laufen die Docker auch nur auf den isolierten Kernen, in meinem Beispiel oben 0/10, 1/11.

 

meine VM's hast du ja oben gesehen ...

 

wenn ich jetzt sagen würde, ok, xteve (mit dem ich auch encode) würde ich lieber in einen "meist" freien Bereich laufen lassen könnte ich dem auch die freien Kerne zuweisen, Beispiel wie dies aussehen könnte ...

 

image.thumb.png.6127404f407af132892b238649a4cf39.png

image.thumb.png.c6b8d21320c4cf3697cc2e51ba30c108.png

 

so würde der Container jetzt nicht innerhalb der für unraid freien Kerne laufen sondern "außerhalb" ...

 

sieht dann so aus wenn ich dem xteve Docker jetzt etwas als Aufgabe gebe ...

 

image.thumb.png.5543e307235730bae2a63d507cbed965.png

 

du siehst, der läuft jetzt außerhalb unraid im "freien" Bereich (wo normal nur meine Gaming VM Cores liegen)

 

Zusammengefasst

 

CPU Isolation (Host OS limitieren)

ist ein einmaliger Vorgang beim Boot (siehe syslinux Eintrag nach der Änderung, erfordert auch einen Neustart)

 

CPU Pinning (Zuweisung für VM's, Docker's)

kann immer individuell gesetzt werden, VM oder Docker braucht nur einen Neustart ... und diese können überlappen oder für sich laufen ...

 

Ich hoffe das hilft Dir etwas ... der Kernel weist die ganzen Aufgaben eh dynamisch zu und verwaltet das auch recht ordentlich, daher in deinem Fall ... wie oben beschrieben, würde ich mir da nicht so viele Gedanken machen und einfach alles mehr oder weniger parallel laufen lassen.

 

Ich sitze hier am Desktop PC und will halt nichts davon merken im Hintergrund ... daher Isolation in mehreren Varianten.

Link to comment
1 minute ago, DataCollector said:

Die CPU Isolation hatte ich nie eingestellt.

 

das kann ich mir nicht vorstellen ... sorry ;) 

 

1 minute ago, DataCollector said:

Das CPU Pinning VM stellt sich automatisch so ein, wie ich die Kerne in der VM-Konfiguration zuordne.

 

klar, das ist ja auch das Gleiche, nur anderes webui in dem Moment ;)

Link to comment
2 hours ago, alturismo said:

CPU Pinning, CPU Isolation

 

Warum überhaupt? Sicher es mag Hochleistungs-Szenarien geben wo man das macht, aber hier, so unter uns, ist das einfach nicht erforderlich. Es gibt niemanden der die Ressoucenverteilung besser regeln kann als der Scheduler. Der hat zu jeder Zeit alle Details und kann alle Threads dynamisch anpassen. Und dem Scheduler ist es einfach egal ob es sich um Unraid als NAS, einen Docker Container oder eine VM handelt. Für den Scheduler sind das einfach Ressourcen und der managed das auf höchstem Niveau - passend zu der verbauten Hardware und den momentanen Anforderungen.

 

Gebt jeder VM alle Kerne:

 

image.png.30696f72111dc6bc27840c51744a5c93.png

 

image.thumb.png.a5f3c5563e0c75127b13ac82ddb5c6a3.png

 

Lasst die CPU Isolation leer:

 

image.thumb.png.a099916ba4a70b363cf58d4f9db3c881.png

 

 

Lasst das Container Pinning leer:

 

image.thumb.png.f2d67f56242803cc24ac76c095074e05.png

 

Damit erhaltet Ihr den bestmöglichen Support den Linux für Euch bereitstellen kann.

 

Link to comment
28 minutes ago, mgutt said:

Ist hier eigentlich auch alles erklärt

 

Quote

Zu b.) Diese Szenario ist optimal für VMs, die latenzkritische Anwendungen ausführen wie zB Videostreaming, Gaming oder Audio.

 

Was aber ganz gerne vergessen wird: Wenn die Anwendung dann plötzlich mehr benötigt als gedacht und gepint/isoliert, dann ist sie in einem Käfig und wird ausgebremst.

 

Tor a.) ist in 99% der Fälle die richtige Wahl.

 

Edited by hawihoney
Link to comment
13 minutes ago, hawihoney said:

Wenn die Anwendung dann plötzlich mehr benötigt als gedacht und gepint/isoliert, dann ist sie in einem Käfig und wird ausgebremst.

Das würde einfach nur heißen, dass man seiner VM zu wenig Kerne gegeben hat.

 

Der Einfluss von Host Prozessen auf nicht isolierte Kerne ist beim Spielen spürbar. Hat man also 10 Kerne und isoliert 8 für eine VM, dann ist das Gamingerlebnis besser, als wenn sich die VM die 10 Kerne mit dem Host teilt.

 

Das liegt daran, dass mit steigender Anzahl von Host Prozessen die VM Prozesse auf die Fertigstellung der Host Prozesse warten müssen. Denn bedenke: In der Gaming VM laufen nur Spieleprozesse.

 

Ohne Isolation wäre es so, als würde man beim Spielen parallel noch andere Sachen machen lassen. Zb ein Backup laufen lassen. Das merkt man dann auch sofort.

 

Außer man hat einfach viel mehr Kerne als ein Spiel nutzen kann. Dann wäre ich bei dir. Vermutlich mit einem i9 der 13ten Gen braucht man sich da tatsächlich gar keine Gedanken machen und kann da alles der CPU überlassen.

  • Like 1
Link to comment
1 hour ago, hawihoney said:

Warum überhaupt? Sicher es mag Hochleistungs-Szenarien geben wo man das macht, aber hier, so unter uns, ist das einfach nicht erforderlich.

doch ;) du musst unterscheiden zwischen der "normalen" VM wo man "nur" mal remote was dran macht oder wie hier der Server gleichzeitig "verschiedene" PC's darstellt.

 

Mein Server =

Server - NAS, plugins, dockers, ...

Desktop PC - an dem ich physisch sitze und zum Beispiel hier jetzt schreibe, surfe, arbeite, ... "bare metal" feeling mit eigenem USB Controller am Gehäuse ...

Gaming / Media PC - hängt am TV ... "bare metal" feeling mit eigenem USB Controller für Keyboard, Maus, Bluetooth PS5 Controller, ...

 

und ja, ohne Isolation ... du merkst den Unterschied wenn am NAS was passiert und du gerade am Desktop was aufwändiges machst, oder am Desktop mein Frauchen gerade was macht, ich am Gaming PC was spiele und auf Unraid gerade was automatisiert läuft (download, records, Zuschnitt, encoding, ...)

 

in meiner Konstellation kann "ein Gerät" voll ausgelastet sein ohne dass das andere davon betroffen wird ...

 

also "es kommt immer darauf an" ....

 

ps. Nebeneffekt, ich kann so auch besser skalieren und den Verbrauch besser skalieren ...

Link to comment
40 minutes ago, mgutt said:

Hat man also 10 Kerne und isoliert 8 für eine VM, dann ist das Gamingerlebnis besser, als wenn sich die VM die 10 Kerne mit dem Host teilt.

 

Oder der Host ist zu klein, oder der Host hat ggfs. irgendwann einen Engpass. Gut ich habe seit Larry Laffer keine Computer Spiele mehr gespielt, kann das Szenario also nicht beurteilen. Spiele-VMs scheinen wohl eine Ausnahme zu bilden ...

 

In der normalen Arbeitswelt ist es wurscht ob ein Backup oder Mux parallel läuft, merkt man nicht bei einem ausreichend dimensionierten Rechner.

 

Link to comment
10 hours ago, DataCollector said:

Parallel läuft ab und zu der Docker SABnzbd

 

Nur so am Rande: Ich habe letzte Woche von NZBGet auf SABnzbd umgestellt da NZBGet von LSIO als deprecated ausgewiesen wurde. NZBGet ist seit Jahren nie abgestürzt, war immer zuverlässig, besitzt eine glasklar strukturierte Oberfläche. Ich hätte es weiterverwenden können, wollte aber das von LSIO gleichzeitig empfohlene SABnzbd ausprobieren.

 

Mein Erfahrung mit SABnzbd im Verhältnis zu NZBGet ist ernüchternd. Nahezu 50 % mehr CPU Auslastung und damit zusammenhängender Strombedarf, etc. Ich weiß nicht woran das liegt. Ich kann nur raten das NZBGet in C/C++ entwickelt wurde und SABnzbd vermutlich im Python, o.ä. - ich muss das mal nachlesen. Jedenfalls trage ich mich mit dem Gedanken zurück zu gehen. Da die GUI von SABnzbd zudem in meinen Augen ein heftiger Rückschritt zu NZBGet ist, wird mein erneuter Wechsel sehr wahrscheinlich sein.

 

Ich müsste wahrscheinlich ein paar A4 Seiten beschreiben um meinen Frust mit der SABnzbd GUI zu dokumentieren. Nur ein Beispiel von dutzenden: Du trägst etwas in eine Dropdown Liste ein (z.B. Priorität), klickst auf eine Checkbox und eine Änderung der Daten (nicht der Anzeige) erfolgt. Das ist IMHO ein klarer Verstoß gegen jede CUA (Common User Access) Regel. Oder wer benennt eine Checkbox "Check all" nur um dann die Elemente der aktuellen Seite zu markieren und die der weiteren Seiten dieser Liste nicht. Sorry, es galoppiert mit mir durch. Habe selten eine derart schlechte Oberfläche gesehen.

 

Also wenn Performance des SABnzbd Containers ein Problem sein sollte, installiere doch mal parallel NZBGet. Vielleicht ist das schon die Lösung.

 

Edited by hawihoney
Link to comment
43 minutes ago, hawihoney said:

merkt man nicht bei einem ausreichend dimensionierten Rechner.

 

Das meinte ich ja mit dem i9. Irgendwann hat man so viele Kerne, dann ist es vermutlich egal. 

 

50 minutes ago, hawihoney said:

oder der Host hat ggfs. irgendwann einen Engpass.

Dass der Host einen Engpass hat, wenn er zb nur noch 2 Kerne hat, kann einem ja egal sein. Das ist ja für den Nutzer keine latenzkritische Anwendung. Dann läuft eben ein Upload oder was auch immer gerade etwas langsamer. Wenn das Spiel aber auch nur ein bisschen ruckelt, ist das eine gänzlich andere Priorität für den Nutzer.

 

Und ja, dass ist am ehesten beim Gaming ein Problem.

  • Like 1
Link to comment
5 hours ago, hawihoney said:

Nur ein Beispiel von dutzenden: Du trägst etwas in eine Dropdown Liste ein (z.B. Priorität), klickst auf eine Checkbox und eine Änderung der Daten (nicht der Anzeige) erfolgt.

Jeder kann ja nutzen, was er möchte.

Ich wollte etwas einfaches, bei dem ich per SMB einfach die NZb Datei in ein Verzeichnis werfe und später das fertige ERgebnis herausbekomme.

Was mich nur stört: Die GUI ist sehr uninformativ wenn mal ein problem aufgetreten ist. Herauszubekommen, woran es liegt und ob man da vielleicht etwas machen kann ist nicht so einfach.

Aber ansonsten eine schöne "fire and forget" Lösung.

Link to comment
15 minutes ago, DataCollector said:

Was mich nur stört: Die GUI ist sehr uninformativ

 

Steht auch auf meiner Liste ;-) Hab da grad einen Fall da sind lausige 4 Worte alles was es an Info gibt:

 

Clipboard01.thumb.jpg.71f35843e8255ef27c4a0cee9a09a83f.jpg

 

Da Du SABnzbd explizit erwähnt hattest, wollte ich Dir nur den Hinweis geben, dass IMHO SABnzbd mehr Ressourcen frisst als zum Beispiel NZBGet - und das nicht zu knapp. Wo NZBGet meinen Server zu 12-15 % CPU belastet hat, da kommt SABnzbd auf bis zu 25 %. Bei meinem Prozessor W1290P sind das Welten.

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.