Jump to content

Erfahrungen KVM CPU Kernvergabe


Recommended Posts

Hallo.

 

Ich mache ja alles bisher nur zu Hause(Umschulung). 

Aber wie sind eure Erfahrungen mit der Vergabe von CPU Kernen an die VM mit Linux in einer größeren Rechencenter Umgebung? Mit richtigen Virtualisierungs Hosts...

 

Virtualisiert wird bei mir Windows Server 2019 Domain Controller und Linux(ZFS Storage), 2019 Terminal Server, PFSense Firewall, 2019 Zertifikats Server, Domänen Mitglieds Rechner Win 10 und noch ne getrennte Win 10 VM die mit dem ganzen nix zu tun hat. Brauche ich für Teams Meetings  sowie Windows XP als Honeypot.

 

 

 

Bei Windows ist mir das klar. Da sollte man dann Anwendungs Orientiert nur 1-2 oder X Kerne geben. Windows ist halt ein Single User System und das würde irgend wann das System lahm legen. Da würde ich nicht auf die Idee kommen alle Kerne an die VM zu "vergeben"

 

Bei Linux leistet der Sheduler allerdings bessere Arbeit. Dort kann ich alle Kerne vergeben. Bei 8 gleichzeitig laufenden VMs habe ich da keine Probleme.

Bei allen 8 mit CPU Z einen CPU Stresstest gemacht und ich habe keine Probleme.

 

Nun weiß ich(aus der Windows Welt) das bei Windows halt nur 1-2 Kerne vergeben werden.

2 Kerne vs meine 24 an die VMs... ist natürlich ordentlich Leistungsverlust.

 

2 Kerne sind schneller auszulasten als 24 Kerne wenn User das versuchen würden. Der Linux Sheduler teilt ja die Leistung eh auf.

 

Wobei ich hier dann von "host-passthrough" spreche und keine Cores anpinne. Das pinnen wäre ja direkter Zugriff auf die Cores und würde quasi den Sheduler umgehen. Nicht gut.

(Bei meinen Tests sind da die Systeme schnell in die Knie gegangen. Selbst der Host hatte Probleme)

 

Jedenfalls hab ich auch immer IO Werte im Blick. Konnte bisher aber keine Nachteile erkennen.

Edited by TAM
Link to post

Moin, 

in einem größeren RZ, das unter KVM läuft, war ich noch nie - was nicht bedeuten soll, dass es die nicht gibt, nur dass ich noch nie in einem war. Unter Hyper-V oder ESXi würde man nie auf die Idee kommen, alle Kerne eines Hosts einer einzigen VM zuzuweisen (während andere VMs dort laufen), denn da funktioniert das Scheduling offenbar anders als bei KVM. Aber es gibt Quellen, die behaupten, ein CPU Overcommitment von 5:1 wäre noch OK. Meine Erfahrung sagt hier etwas anderes. 

 

Woher Du die Erkenntnis nimmst, dass Windows ein Dingle-User-System ist, während Du einen Terminalserver betreibst, ist mir allerdings schleierhaft. 

 

Link to post
Posted (edited)

Mit Single User System meine ich wie eine Anfrage an die CPU behandelt wird.

Der Windows Sheduler schickt die Anfrage eines Users los. Wartet auf die Antwort. Und schickt sie ihm sobald sie ankommt.

Jede Anfrage wird dann auf einzelne freie Cores verteilt. Erst wenn keine CPU mehr rechnet, also 1 frei ist Darf User 2 Anfragen schicken.

 

Das ganze geht natürlich unwahrscheinlich schnell. Aber wenn es zu viele Anfragen sind staut es sich.

 

Beim Linux Sheduler ist das anders. Die Anfragen werden aufgesplittet und vorsortiert. Es werden Teil Aufgaben an den Kernel geschickt. Von allen Usern nahezu gleichzeitig. Und dann bekommen auch alle User nahezu zeitgleich eine Antwort. Kann das nicht gut erklären.

Windows 1 User fertig. Dann der Nächste. Single User System.
Linux alle User gleichzeitig. Multi User System.


Das hat jetzt nix damit zu tun ob ich mehrere Benutzerkonten anlegen kann....

 

Edited by TAM
Link to post

Wir haben zwar größere KVM Umgebungen am laufen, aber auch da weisen wir nicht alle Kerne einer VM zu, sondern machen es sinnvoll oder wie bestellt :-) Bei ESXi / Hyper V gehen wir je nach Service Klasse einer VM in ein Overvommitment von 5 zu 1 bis zu Direktzuweisung 1 zu 1...

Kommt dann auf die Anwendung / eingekaufte SLA usw. an, Sinnvoll erachte ich persönlich ein maximales Overcommitment von 3 zu 1, eher 2 zu 1 ...

 

Und was dein Wissen um den Windows Scheduler angeht, solltest du noch einmal tief in dich gehen.

Edited by MrCocktail
Typo
  • Like 1
  • Haha 2
Link to post

Moin,

 

für mich klingt das auch nach grundsätzlichen Missverständnissen.

 

Um die eigentliche Frage zu beantworten: Unabhängig vom Hypervisor weist man die vCPU-Anzahl für VMs so zu, wie es die Anwendungen erfordern. Also so, wie man es bei den anderen Ressourcen auch tun würde. Einem virtuellen DC würde ich weder unter Hyper-V noch unter VMware und auch nicht unter KVM mehr als eine bis zwei CPUs zuweisen. Bei einem Datenbank- oder Terminalserver mehr, je nach den tatsächlichen Anforderungen.

 

CPU-Overcommit ist in aller Regel kein Problem, da gehöre ich zu der Fraktion, die andere Erfahrungen hat als Evgenij ;-). "In aller Regel" heißt dabei: Es kann natürlich auch Konstellationen geben, in denen man das bleiben lässt und nicht mehr als 1:2 oder gar 1:1 zuweist. Meine Erfahrung sagt aber, das ist die große Ausnahme.

 

Gruß, Nils

PS. wenn du es für Hyper-V genauer wissen willst - in dem Rheinwerk-Buch habe ich ein ganzes Kapitel über die Ressourcenzuweisung geschrieben. Das gilt, weil es um prinzipielle Fragen geht, ähnlich auch für andere Hypervisoren.

Link to post
Posted (edited)

Danke euch beiden.

 

Ja. Mit dem Windows Sheduler bin ich nicht so vertraut. Kann das vielleicht auch nicht richtig erklären.

 

Würde das gerne mal in nem großen Rechenzentrum testen.

 

Ist mit Overcommitting gemeint das man die Cores anpinnt?

 

Beim anpinnen habe ich wirklich negative Erfahrungen gemacht.

 

Aber wenn ich jetzt bei meiner Ryzen 9 3900x CPU bei KVM einstelle:

 

1 Socket

12 Kerne

2 Threads

 

Komme ich auf 24.

 

Und Pinnen tu ich nicht.

 

Ich erreiche bei CPU Z beim Stresstest einen Wert von ca 7200

 

Wenn ich allerdings nur 1 Kern vergebe. Dann hab ich einen Wert von ca 450. Also deutlich weniger Leistung.

 

Und so flüssig wie vorher läuft das dann nicht mehr. 

 

Und ich denke mir mal wenn ich User habe die Leistung brauchen... Sind die 450 schnell aufgebraucht und die VM ist am Limit.

 

Weil höher als 100% vom Host gehts ja nicht. Die Leistung wird ja nicht aufgeteilt wie wenn ich mehr Kerne gebe.

 

Achso. Wenn mein Host Windows ist.. Und ich ca 4 VMs mit je 1 Core laufen lasse habe ich auf dem Host ne gesamt auslastung von ca 11-14% ohne etwas zu tun.

 

Bei Linux als Hpyervisor bei 8 VMs ca 7-11% 

Ohne das die VMs was tun.

 

Beim Auslasten auf allen Kernen wird die Leistung halbiert und halbiert und halbiert. Jeder Kern hat trotzdem fast 100% Auslastung. Das System bleibt aber stabil. Nur die VMs erreichen dann werte von nur noch 1500 bis 2200.

 

Wenn ich nur 1 Kern vergebe ist dieser halt auf 100% ausgelastet.

 

Wenn ich das bei Windoes mache wird auch nur 1 Kern belastet. Das Host System arbeitet dann aber auch extrem langsam.

Edited by TAM
Link to post

Moin,

 

also ... in Kürze dazu: Du bist auf dem falschen Dampfer. So einfach ist die Performancebetrachtung nicht. Du nutzt die falschen Werkzeuge und du ordnest Dinge falsch zu. Mir scheinen hier auch Host und VM durcheinanderzugehen.

 

Mit KVM kenne ich mich nicht aus, was "anpinnen" ist, weiß ich nicht. Das Konzept gibt es bei Hyper-V nicht (und meines Wissens auch nicht bei VMware, jedenfalls nicht als ich mich zuletzt damit beschäftigt habe). Ich denke mal, dass es im Wesentlichen andere Bezeichnungen sind; vielleicht macht KVM hier auch was anders als andere Hypervisoren. Ist aber am Ende egal. Wichtig ist in der Praxis, dass man die VMs richtig einstellt. Und dafür sind die meisten Grundsätze übergreifend gültig und nicht besonders kompliziert.

 

Gruß, Nils

 

  • Like 2
  • Thanks 1
Link to post

Möglich das ich Dinge falsch zuordne. Deshalb hab ich ja gefragt weil ich vieles von KVM selbst nicht verstehe.

 

Es ist nicht mal klar ob KVM Typ1 oder 2 ist... weils beides ist. Das ist ja bei den anderen ganz klar.

 

Achso und mit Host... meine ich den KVM Host. Das System was alles "hostet". Das Hauptsystem. Den Hypervisor.

 

Und "pinnen"... verstehe ich bisher auch nicht so gut. Kann aber sagen das ich dadurch der VM explusiven Zugriff auf die jeweiligen Cores gebe. Und ich denke das geht am Sheduler vorbei.

 

Z.B soll die VM nur Core 22 nutzen. Und über Kreuz mit VCore 4 zusammen arbeiten. Keine Ahnung ob 4 jetzt der VCore ist. Dazu muss ich mir die Topology von der CPU anzeigen lassen und kann auch jeden einzelnen NUMA Knoten bestimmen. Ich kann z.B auch definieren ob z.B Kern 23 für IO mit dem KVM Host zuständig ist...

 

Etwas komplizierter wo ich wie schon geschrieben noch nicht so hinterher komme. 

Link to post

Moin,

 

warum kümmerst du dich überhaupt um diese Ebene? Für die Praxis dürfte das in nahezu allen Szenarien völlig irrelevant sein, das wird eher so eine Geschichte à la "wir machen es, weil es geht" sein. Oder hast du eine bestimmte Anforderung, die du lösen musst?

 

Gruß, Nils

 

Link to post

Ist mir schon klar. Weil einfach eben einfach ist. Diesen Spruch "keep it simple" gibts nicht umsonst. In der Praxis muss ja dann auch jeder mit dem System zurecht kommen. Und nicht nur der eine Super Linux Guru.

 

Ne ich beschäftige mich bloß einfach so damit. Hab keine spezielle Aufgabe die ich lösen muss.

Link to post
vor 23 Minuten schrieb NilsK:

warum kümmerst du dich überhaupt um diese Ebene? Für die Praxis dürfte das in nahezu allen Szenarien völlig irrelevant sein, das wird eher so eine Geschichte à la "wir machen es, weil es geht" sein. Oder hast du eine bestimmte Anforderung, die du lösen musst?

 

Die Oracle Lizenzierung kann ein solcher Grund sein.

Normalerweise muss man alle Cores in einem Virtualisierungscluster lizenzieren, da Oracle jeden Core nutzen könnte. Mit Core Pinning kann man der VM sagen, dass er nur auf Core 0-3 auf Host 1 und 2 zugreifen darf und somit nur diese acht Cores genutzt und Lizenziert werden muss.

 

Sonst wüsste ich aber auch kein anderen Grund.

Link to post

Ich dachte immer es ist egal was man der VM zuweist. Für die Lizensierung wird die echte CPU genommen.

 

Wenn die CPU 40 Kerne hat..  Wird auch für 40 Lizensiert. Egal ob die VM dann am Ende bloß 2 Kerne bekommt.

 

Dachte so ist das immer?!

Link to post

https://docs.oracle.com/cd/E50245_01/E50249/html/vmcon-vm-pinning.html

Zitat

Oracle VM offers an advanced feature for hard partitioning, also known as CPU pinning. Hard partitioning means binding a virtual machine CPU to a physical CPU (on x86) or core (on SPARC), and preventing it from running on other physical cores than the ones specified. This is done for Oracle CPU licensing purposes, since Oracle VM is licensed on a per-CPU basis.

 

Link to post

Moin,

 

vor einer Stunde schrieb TAM:

Dachte so ist das immer?!

 

wichtige Regel in der Softwarelizenzierung: Es gibt kein "so ist das immer". Besonders Oracle ist da schon sehr speziell. Microsoft und andere können sich auch gut absurde Regeln ausdenken, aber Ora schießt regelmäßig den Vogel ab. 

 

Gruß, Nils

PS. meiner Interpretation nach gibt es in diesem Thread keine Frage mehr zu klären.

  • Like 2
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

×
×
  • Create New...