Kurioses vCore to Core Mapping beim Hyper-V 2022
Moin Zusammen,
ich bin soeben bei einem Kunden über ein meiner Ansicht nach sehr gravierendes Problem gestolpert. Und zwar hat sich der entsprechende Kunde seit der Umstellung seines Hyper-V Clusters von 2019 auf 2022 immer wieder beschwert, dass die CPU Last seiner 2012R2 RDS Session Hosts zu hoch währe und das es dadurch im Produktivbetrieb öfters zu spürbaren Verzögerungen bei diversen Applikationen führen würde, die auf diesen RDS Servern bereitgestellt werden.
Heute Abend habe ich mir die Sache mal genauer angesehen und habe dabei festgestellt, dass der Core Scheduler des Hyper-V 2022er einen kompletten Humbug beim mappen der vCores der 2012R2 VM macht. 😭
Und zwar sind jeder der entsprechenden RDS VM 8 vCores zugewiesen.
Testweise wurde die CPU Architektur dieser VM’s sogar soweit umkonfiguriert, dass die VM’s selbst ohne Hyperthreading Kerne laufen.
Demzufolge sollte die Last dieser VM eigentlich nur noch über die physikalischen Kerne des Hyper-V Nodes abgetragen werden und nicht mehr auch über dessen Hyperthreading Kerne, weil es aus diversesten Gründen alles andere als Lustig ist, einen Hyperthreading Kern genau so anzusprechen wie einen physikalischen Kern.
Die älteren von uns erinnern sich diesbezüglich vielleicht noch an ein paar gruselige Geschichten, als die ersten CPU’s mit Hyperthreading rauskamen und die Betriebssysteme diese nicht korrekt ansprechen/unterscheiden konnten. Na ja das ganze war so vor etwa 20 Jahren. 🙃
Umso erstaunter war ich, als ich auf einer dieser RDS Session Host VM’s einen CPU-Stresstoll habe laufen lassen um die Kerne der VM’s auf Volllast zu bringen, um dadurch besser sehen zu können über welche Kerne des Hyper-V Nodes diese tatsächlich auch abgetragen wird.
Und zwar sah das ganze im Taskmanager des Hyper-V Nodes dann folgend aus …
Die mit einem grünen Pfeil markierten Spalten stellen die Auslastung der physikalischen Kerne dar und die mit einem roten Pfeil markierten Spalten, stellen die Auslastung deren Hyperthreading Kerne dar. Und die rot umrandeten, sind die Kerne auf denen die Last der angesprochenen VM abgetragen wurde.
Wie ihr erkennen könnt, wurde in 7 von 8 Fällen, die CPU Last eines vCores der explizit als NICHT HT-Kern konfiguriert wurde, über einen HT-Kern des Hyper-V Nodes abgetragen. 🤢🤮
Wer jetzt das folgende denkt … 😱😖😵💫😭 … korrekt, so geht es mir gerade auch.
Bin ich nun irgendwie nur in einem falschen Film gelandet und wenn ja, wie komme ich aus diesem wieder raus oder drehen diese Microsoftianer nun vollkommen durch?
Beste Grüsse aus BaWü
Alex
ich bin soeben bei einem Kunden über ein meiner Ansicht nach sehr gravierendes Problem gestolpert. Und zwar hat sich der entsprechende Kunde seit der Umstellung seines Hyper-V Clusters von 2019 auf 2022 immer wieder beschwert, dass die CPU Last seiner 2012R2 RDS Session Hosts zu hoch währe und das es dadurch im Produktivbetrieb öfters zu spürbaren Verzögerungen bei diversen Applikationen führen würde, die auf diesen RDS Servern bereitgestellt werden.
Heute Abend habe ich mir die Sache mal genauer angesehen und habe dabei festgestellt, dass der Core Scheduler des Hyper-V 2022er einen kompletten Humbug beim mappen der vCores der 2012R2 VM macht. 😭
Und zwar sind jeder der entsprechenden RDS VM 8 vCores zugewiesen.
Testweise wurde die CPU Architektur dieser VM’s sogar soweit umkonfiguriert, dass die VM’s selbst ohne Hyperthreading Kerne laufen.
Demzufolge sollte die Last dieser VM eigentlich nur noch über die physikalischen Kerne des Hyper-V Nodes abgetragen werden und nicht mehr auch über dessen Hyperthreading Kerne, weil es aus diversesten Gründen alles andere als Lustig ist, einen Hyperthreading Kern genau so anzusprechen wie einen physikalischen Kern.
Die älteren von uns erinnern sich diesbezüglich vielleicht noch an ein paar gruselige Geschichten, als die ersten CPU’s mit Hyperthreading rauskamen und die Betriebssysteme diese nicht korrekt ansprechen/unterscheiden konnten. Na ja das ganze war so vor etwa 20 Jahren. 🙃
Umso erstaunter war ich, als ich auf einer dieser RDS Session Host VM’s einen CPU-Stresstoll habe laufen lassen um die Kerne der VM’s auf Volllast zu bringen, um dadurch besser sehen zu können über welche Kerne des Hyper-V Nodes diese tatsächlich auch abgetragen wird.
Und zwar sah das ganze im Taskmanager des Hyper-V Nodes dann folgend aus …
Die mit einem grünen Pfeil markierten Spalten stellen die Auslastung der physikalischen Kerne dar und die mit einem roten Pfeil markierten Spalten, stellen die Auslastung deren Hyperthreading Kerne dar. Und die rot umrandeten, sind die Kerne auf denen die Last der angesprochenen VM abgetragen wurde.
Wie ihr erkennen könnt, wurde in 7 von 8 Fällen, die CPU Last eines vCores der explizit als NICHT HT-Kern konfiguriert wurde, über einen HT-Kern des Hyper-V Nodes abgetragen. 🤢🤮
Wer jetzt das folgende denkt … 😱😖😵💫😭 … korrekt, so geht es mir gerade auch.
Bin ich nun irgendwie nur in einem falschen Film gelandet und wenn ja, wie komme ich aus diesem wieder raus oder drehen diese Microsoftianer nun vollkommen durch?
Beste Grüsse aus BaWü
Alex
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6904232499
Url: https://administrator.de/contentid/6904232499
Ausgedruckt am: 23.11.2024 um 13:11 Uhr
43 Kommentare
Neuester Kommentar
Testweise wurde die CPU Architektur dieser VM’s sogar soweit umkonfiguriert, dass die VM’s selbst ohne Hyperthreading Kerne laufen.
Meines Erachtens liegt hier ein Denkfehler vor. Du stellst hier die Threads per Core ein, ob physisch oder logisch definierst du nicht.
Wenn du da z.B. 2 einstellst, und der VM 2 CPUs zuweist, wirst du in der VM 2 Cores und 4 Threads haben, die aber nicht unbedingt auf 4 Cores des Hosts laufen. Dazwischen wird nochmal abstrahiert.
Hier habe ich auf einer VM 4 cores voll belastet. Du siehst wie die Belastung auf dem Host nicht immer auf den gleichen Cores liegt.
-Thomas
@MysticFoxDE:
Hallo.
Und die Kiste (der Host) hat physisch 32 Kerne?
Wieviele RDS-VMs im Einsatz? Und jede hat 8 vCores?
Das muß mit dem HT-Oder-Nicht-Problem gar nicht zwingend was zu tun haben.
Klingt mir schwer nach Wartezyklen. Den VMs sind zuviele vCores zugeordnet. Jeder virtuelle Rechenoperation braucht eine physische Rechenoperation, also ein freies Plätzchen auf den echten, physischen CPUs. Gibt's bspw. 32 physische Kerne, aber 10 VMs (Beispiel) haben jede 8 virt. Kerne zugeordnet (=80), heißt es warten. Je mehr vCPUs, desto länger die Wartezyklen. CPU-Overprovisioning funktioniert bei VMware (keine Ahnung, wie die das machen), nicht jedoch bei Microsoft-Hyper-V.
Viele Grüße
von
departure69
Hallo.
und das es dadurch im Produktivbetrieb öfters zu spürbaren Verzögerungen bei diversen Applikationen
Und zwar sind jeder der entsprechenden RDS VM 8 vCores zugewiesen.
Und die Kiste (der Host) hat physisch 32 Kerne?
Wieviele RDS-VMs im Einsatz? Und jede hat 8 vCores?
Das muß mit dem HT-Oder-Nicht-Problem gar nicht zwingend was zu tun haben.
Klingt mir schwer nach Wartezyklen. Den VMs sind zuviele vCores zugeordnet. Jeder virtuelle Rechenoperation braucht eine physische Rechenoperation, also ein freies Plätzchen auf den echten, physischen CPUs. Gibt's bspw. 32 physische Kerne, aber 10 VMs (Beispiel) haben jede 8 virt. Kerne zugeordnet (=80), heißt es warten. Je mehr vCPUs, desto länger die Wartezyklen. CPU-Overprovisioning funktioniert bei VMware (keine Ahnung, wie die das machen), nicht jedoch bei Microsoft-Hyper-V.
Viele Grüße
von
departure69
Ich glaube, hier liegt das Missverständnis:
https://petri.com/customize-non-uniform-memory-access-numa-configuration ...
https://www.datacenter-insider.de/was-ist-numa-a-ede6fc3e6dfa2bad71f899d ...
Viele Grüße, commodity
Zitat von @MysticFoxDE:
Schau mal, bei der folgenden VM, sieht die CPU-Config im Hyper-V folgend aus.
Der Wert 0 bei "Hardwarethreads pro Kern" bedeutet übrigens, das die HT Architektur des darüberliegenden Hyper-V Nodes, 1:1 übernommen werden soll. In diesem Fall hat der darunterliegende Hyper-V eine CPU mit eingeschaltetem HT und einem HT-Kern pro physikalischem Kern und daher wird hier auch korrekt (im oberen Bereich des Bildes zu sehen), automatisch 2 Hardwarethreads pro Kern gewählt.
Die von Dir im ersten Bild oben rot umrandete Einstellung "Hardwarethreads pro Kern" ist von MS missverständlich (schlampig) bezeichnet. Sie hat imo nichts mit HT-Cores zu tun, sondern betrifft die Anzahl der zur Verfügung gestellten NUMA Nodes.Schau mal, bei der folgenden VM, sieht die CPU-Config im Hyper-V folgend aus.
Der Wert 0 bei "Hardwarethreads pro Kern" bedeutet übrigens, das die HT Architektur des darüberliegenden Hyper-V Nodes, 1:1 übernommen werden soll. In diesem Fall hat der darunterliegende Hyper-V eine CPU mit eingeschaltetem HT und einem HT-Kern pro physikalischem Kern und daher wird hier auch korrekt (im oberen Bereich des Bildes zu sehen), automatisch 2 Hardwarethreads pro Kern gewählt.
https://petri.com/customize-non-uniform-memory-access-numa-configuration ...
https://www.datacenter-insider.de/was-ist-numa-a-ede6fc3e6dfa2bad71f899d ...
Viele Grüße, commodity
Jetzt mit Hardwarethreads pro Kern: 1
Ist auch Windows Server 2022. Tatsächlich werden nur die jeweils ersten Cores belastet.
VM: ubuntu 22.04 4 vCPUs
-Thomas
Ist auch Windows Server 2022. Tatsächlich werden nur die jeweils ersten Cores belastet.
VM: ubuntu 22.04 4 vCPUs
stress --cpu 4
-Thomas
Hallo zusammen,
mag sein, dass ich gleich völligen Quatsch von mir gebe, aber ich hatte das bisher so verstanden:
Seit dem Server 2016 gibt es den "klassischen" Hyper-V- Scheduler und den Kernplaner.
Die Einstellung "HW Threads per Core" = 1 wirkt sich mWn auf das SMT Verhalten aus:
0 -> erben vom Hypervisor
1 -> kein SMT
2 -> SMT
[Quelle: https://learn.microsoft.com/de-de/windows-server/virtualization/hyper-v/ ...]
Somit ist bei der Einstellung 1 doch lediglich gesagt, dass auf einem Kern (also der Kombi aus dem "echten" und dem HT Kern) zu einem Zeitpunkt nur 1 Thread einer VM laufen darf.
Es wird verhindert, dass auf den beiden Teilen eines Kerns Threads von 2 unterschiedlichen VMs laufen.
Auf dem "anderen" Teil des Kerns kann also nur Workload des Hypervisors laufen.
Es ist aber nicht garantiert, dass die workload einer VM nicht auf dem HT Kern läuft.
Das deckt sich ja auch mit den Bildern die im ersten Beitrag zu sehen sind.
Meinem Verständnis nach also bei HWThreads per Core = 1:
- Workloads von unterschiedlichen VMs laufen nie auf dem selben Kern
- Es ist nicht garantiert, dass die Workload auf dem physikalischen Kern läuft, die kann auch auf dem HT Kern sein
Um das zu verhindern müsstest Du HT für den Prozessor deaktivieren.
Wie gesagt so ist mein Verständnis der Sache..ich lass mich aber gerne korrigieren.
Achso: Wenn du jeweils 8 Kerne für einen RDSH hast und mehr als 4 RDSH hast die Kerne ja überprovisioniert und dann bekommt eine VM doch nur dann CPU-Kappa, wenn 8 Kerne frei sind.
Und da der Core-Scheduler eben verhindert, dass mehrere VMs auf einem Kern laufen muss eine der VMs quasi im Idle sein, damit die, die CPU-Kappa braucht drankommt, oder hab ich da nen Denkfehler.
S.
uichen
mag sein, dass ich gleich völligen Quatsch von mir gebe, aber ich hatte das bisher so verstanden:
Seit dem Server 2016 gibt es den "klassischen" Hyper-V- Scheduler und den Kernplaner.
Die Einstellung "HW Threads per Core" = 1 wirkt sich mWn auf das SMT Verhalten aus:
0 -> erben vom Hypervisor
1 -> kein SMT
2 -> SMT
[Quelle: https://learn.microsoft.com/de-de/windows-server/virtualization/hyper-v/ ...]
Somit ist bei der Einstellung 1 doch lediglich gesagt, dass auf einem Kern (also der Kombi aus dem "echten" und dem HT Kern) zu einem Zeitpunkt nur 1 Thread einer VM laufen darf.
Es wird verhindert, dass auf den beiden Teilen eines Kerns Threads von 2 unterschiedlichen VMs laufen.
Auf dem "anderen" Teil des Kerns kann also nur Workload des Hypervisors laufen.
Es ist aber nicht garantiert, dass die workload einer VM nicht auf dem HT Kern läuft.
Das deckt sich ja auch mit den Bildern die im ersten Beitrag zu sehen sind.
Meinem Verständnis nach also bei HWThreads per Core = 1:
- Workloads von unterschiedlichen VMs laufen nie auf dem selben Kern
- Es ist nicht garantiert, dass die Workload auf dem physikalischen Kern läuft, die kann auch auf dem HT Kern sein
Um das zu verhindern müsstest Du HT für den Prozessor deaktivieren.
Wie gesagt so ist mein Verständnis der Sache..ich lass mich aber gerne korrigieren.
Achso: Wenn du jeweils 8 Kerne für einen RDSH hast und mehr als 4 RDSH hast die Kerne ja überprovisioniert und dann bekommt eine VM doch nur dann CPU-Kappa, wenn 8 Kerne frei sind.
Und da der Core-Scheduler eben verhindert, dass mehrere VMs auf einem Kern laufen muss eine der VMs quasi im Idle sein, damit die, die CPU-Kappa braucht drankommt, oder hab ich da nen Denkfehler.
S.
uichen
RDS workloads beschleunigt das Hyperthreading kein Stücken... ich hatte neulich mal einen Test automatisiert, auf einem 8 Core / 16 Threads Xeon Prozessor. Ein RDP-Workflow hatte pro Session 100% CPU Last über ca. eine Stunde, eine CAD Anwendung und Word/Excel. Acht davon liefen parallel mit geringen Schwankungen in der Laufzeit. HyperV meldet mir 50% Last am Host, VMware 100%
Als ich mit aktivem Hypterthreading einen neunten RDP Client und einen neunten Workflow gestartet hatte, lief einer der 9 dann doppelt so lang, ab dem 10. wurde der Terminalserver dann instabil. Egal welcher Hypervisor. Das Problem ist daß der Scheduler im Gast am Ende die Threads nicht in Zeitscheiben fair verteilt sondern die Threads alle 5 Sekunden von einem zum anderen Core shiftet, und das ist seit Server 2012R2 so. Bis 2008R2 teilten sich zwei Prozesse brüderlich einen Core... für Multithreading ist der 2012 R2 Ansatz zwar effektiver für Einzelsitzungen, aber eine große Masse an UserSitzungen wird unfairer mit Rechenleistung bedient.
Ist auch Feedback vieler Kunden, die auf HyperV 2022 migriert haben.
Weil man auf Intel-Cores ziemlich viele nicht teilbare Ressourcen hat, die nur ein Thread nutzen kann, so Sachen wie FPU, SSE3, MMX, Kryptographie... läuft ein Workload auf einem 2. Thread dann tut der das nur dann, wenn keine unteilbaren Ressourcen im Spiel sind.
VMware bildet das z.B. auch korrekt ab aber HyperV basiert bei der Core-Konfiguration auf der irrigen Annahme, daß man damit noch mehr rausholen kann. Aus der Praxis mit Office-RDPs ist es besser, Core-Overcommitment zu machen wie auf Hyperthreading zu vertrauen.
Als ich mit aktivem Hypterthreading einen neunten RDP Client und einen neunten Workflow gestartet hatte, lief einer der 9 dann doppelt so lang, ab dem 10. wurde der Terminalserver dann instabil. Egal welcher Hypervisor. Das Problem ist daß der Scheduler im Gast am Ende die Threads nicht in Zeitscheiben fair verteilt sondern die Threads alle 5 Sekunden von einem zum anderen Core shiftet, und das ist seit Server 2012R2 so. Bis 2008R2 teilten sich zwei Prozesse brüderlich einen Core... für Multithreading ist der 2012 R2 Ansatz zwar effektiver für Einzelsitzungen, aber eine große Masse an UserSitzungen wird unfairer mit Rechenleistung bedient.
Ist auch Feedback vieler Kunden, die auf HyperV 2022 migriert haben.
Weil man auf Intel-Cores ziemlich viele nicht teilbare Ressourcen hat, die nur ein Thread nutzen kann, so Sachen wie FPU, SSE3, MMX, Kryptographie... läuft ein Workload auf einem 2. Thread dann tut der das nur dann, wenn keine unteilbaren Ressourcen im Spiel sind.
VMware bildet das z.B. auch korrekt ab aber HyperV basiert bei der Core-Konfiguration auf der irrigen Annahme, daß man damit noch mehr rausholen kann. Aus der Praxis mit Office-RDPs ist es besser, Core-Overcommitment zu machen wie auf Hyperthreading zu vertrauen.
Hallo,
Wie definierst Du "Hardware-Kerne" und "Hyperthreading-Kerne"? Wenn Hyperthreading aktiviert ist, gibt es an sich nur "Hyperthreading-Kerne". Steht auch darüber: "Logische Prozessoren"
Nein, das Setting sperrt die Zuweisung von zweien der 8 Threads einer VM mit 8 vCPUs an die beiden logischen Kerne desselben physikalischen Kerns.
Vgl. dazu die Abbildung von 8 vCPUs in der VM: Mit der Einstellung 0 auf einer Hyperthreading-Platform gibt die WMI-Abfrage in der VM 8 logische, aber nur 4 physikalische Kerne an. Dabei handelt es sich um den Worst-Case im Hypervisor-Scheduling, denn in der Regel werden die 8 Threads auf mehr als vier physische Cores verteilt werden können. Deshalb spricht der Taskmanager nur von 8 "virtuellen Prozessoren". Hingegen mit der Einstellung 1 wird dies erzwungen, und in der VM werden daher 8 logische und 8 physische Kerne angegeben.
Alle 8 Threads liegen auf unterschiedlichen physikalischen Kernen, wie erwartet.
Grüße
Richard
Die mit einem grünen Pfeil markierten Spalten stellen die Auslastung der physikalischen Kerne dar und die mit einem roten Pfeil markierten Spalten, stellen die Auslastung deren Hyperthreading Kerne dar. Und die rot umrandeten, sind die Kerne auf denen die Last der angesprochenen VM abgetragen wurde.
Wie definierst Du "Hardware-Kerne" und "Hyperthreading-Kerne"? Wenn Hyperthreading aktiviert ist, gibt es an sich nur "Hyperthreading-Kerne". Steht auch darüber: "Logische Prozessoren"
Demzufolge sollte die Last dieser VM eigentlich nur noch über die physikalischen Kerne des Hyper-V Nodes abgetragen werden und nicht mehr auch über dessen Hyperthreading Kerne
Nein, das Setting sperrt die Zuweisung von zweien der 8 Threads einer VM mit 8 vCPUs an die beiden logischen Kerne desselben physikalischen Kerns.
Vgl. dazu die Abbildung von 8 vCPUs in der VM: Mit der Einstellung 0 auf einer Hyperthreading-Platform gibt die WMI-Abfrage in der VM 8 logische, aber nur 4 physikalische Kerne an. Dabei handelt es sich um den Worst-Case im Hypervisor-Scheduling, denn in der Regel werden die 8 Threads auf mehr als vier physische Cores verteilt werden können. Deshalb spricht der Taskmanager nur von 8 "virtuellen Prozessoren". Hingegen mit der Einstellung 1 wird dies erzwungen, und in der VM werden daher 8 logische und 8 physische Kerne angegeben.
Wie ihr erkennen könnt, wurde in 7 von 8 Fällen, die CPU Last eines vCores der explizit als NICHT HT-Kern konfiguriert wurde, über einen HT-Kern des Hyper-V Nodes abgetragen.
Alle 8 Threads liegen auf unterschiedlichen physikalischen Kernen, wie erwartet.
Grüße
Richard
@alex
okay dann bin ich raus, wenn mein Verständnis des MS Artikels so grundsätzlich falsch ist und deiner Meinung nach alles was ich da lese ganz anders ist.
Und dass ich bezüglich HT nochmal was lernen muss:
Danke für den netten Hinweis dass ich nichts weiß.
Wie gesagt:
Sorry für den angeblichen Quatsch und Nonsens den ich von mir gegeben habe und Info an die, die das später lesen:
Ignoriert einfach was da von mir steht, Alex hat bestimmt recht, und der MS Artikel ist auch falsch.
Und @Richard:
Komisch, dass Du offenbar genauso falsch liegst wie ich .... denn du erklärst Alex irgendwie dasselbe wie ich - nur eben in anderen Worten....
SMT=1 --> 8 vCPUs der VM erden vom Hypervisor auf 8 pCPUs gemappt
Und da der Hypervisor die "echten" und "´Fake" Kerne eben nicht trennt ,macht er es doch richtig....
Dass hier dann KEINE Überprovisionierung vorliegt kann ich nicht ganz nachvollziehen (8x5 = 40. 40>32....ich habs aber eben nochmal von meinem Neffen in der 2 Klasse nachrechnen lassen um zu verhindern, dass ich in Algebra noch Nacholbedarf habe)
S.
PS:
Wer Sarkasmus findet darf ihn behalten
okay dann bin ich raus, wenn mein Verständnis des MS Artikels so grundsätzlich falsch ist und deiner Meinung nach alles was ich da lese ganz anders ist.
Und dass ich bezüglich HT nochmal was lernen muss:
Danke für den netten Hinweis dass ich nichts weiß.
Wie gesagt:
Sorry für den angeblichen Quatsch und Nonsens den ich von mir gegeben habe und Info an die, die das später lesen:
Ignoriert einfach was da von mir steht, Alex hat bestimmt recht, und der MS Artikel ist auch falsch.
Und @Richard:
Komisch, dass Du offenbar genauso falsch liegst wie ich .... denn du erklärst Alex irgendwie dasselbe wie ich - nur eben in anderen Worten....
SMT=1 --> 8 vCPUs der VM erden vom Hypervisor auf 8 pCPUs gemappt
Und da der Hypervisor die "echten" und "´Fake" Kerne eben nicht trennt ,macht er es doch richtig....
Dass hier dann KEINE Überprovisionierung vorliegt kann ich nicht ganz nachvollziehen (8x5 = 40. 40>32....ich habs aber eben nochmal von meinem Neffen in der 2 Klasse nachrechnen lassen um zu verhindern, dass ich in Algebra noch Nacholbedarf habe)
S.
PS:
Wer Sarkasmus findet darf ihn behalten
Zitat von @MysticFoxDE:
Und die primäre Warteschlange eines physikalischen Kerns mit aktiviertem HT, bezeichne ich als Hardware-Kern und die sekundäre als "Hyperthreading-Kern" oder auch "Fake-Kern", weil diesem nicht wirklich eine eigenständige Recheneinheit zur Verfügung steht.
Und die primäre Warteschlange eines physikalischen Kerns mit aktiviertem HT, bezeichne ich als Hardware-Kern und die sekundäre als "Hyperthreading-Kern" oder auch "Fake-Kern", weil diesem nicht wirklich eine eigenständige Recheneinheit zur Verfügung steht.
Es gibt aber keine Hierarchie zwischen dem "primären" und "sekundären" Hyperthreading-Kern, die es rechtfertigen würde, in den Taskmanager Spalten einzuzeichnen und zu erwarten, dass für vier saturierende Threads genau die logischen Kerne 0, 2, 4, 6, und nicht 1, 3, 5, 7, oder auch 0, 3, 5, 6 verwendet würden. Begründe das doch mal.
Nein, das ist eine Fehlinterpretation, die durch die ungeschickte anzeige im Taskmanager auch noch weiter angeschürt wird, weil dieser in einer VM nur noch stur virtuelle Prozessoren anzeigt, und zwar egal ob HT aktiviert ist oder nicht.
Ich meinte hier auf dem Host. Der Taskmanager zeigt vollkommen richtig an, was das OS bzw. ein Hypervisor sieht: n logische Kerne, zusammen mit der Information, dass diese paarweise n/2 physischen Kernen zugeordnet sind. Diese Information ist relevant; aber über welchen logischen Kern ein physischer Kern belastet wird, ist egal.
Wie du sehen kannst, wird für diese VM eine CPU Emuliert, die nur 4 "physikalische" Kerne hat, auf die sich 8 logische Kerne verteilen, sprich, ist selbe wie auch bei realer Hardware, 4 physikalische Kerne, plus 4 Fake-Kerne. 😉
Nein, es wird in dem Sinne keine CPU "emuliert", das wäre viel zu aufwändig. Auch die VM unterscheidet nicht die tollen pysikalischen Kerne und niedere Fake-Kerne, sondern eben n logische Kerne mit der Info Hyperthreading ja/nein. Wenn Hyperthreading "durchgereicht" wird, teilt die Ausgabe der WMI-Abfrage n durch zwei und zeigt das Ergebnis als physische Kerne an, weil sie für den Umstand der virtuellen Ausführung nicht angepasst ist.
Das ist irreführend, und deshalb macht es der Taskmanager anders. Auch der Taskmanager zeigt bekanntlich auf physischer Hardware logische und physische Kerne an. In der VM sind "virtuelle Kerne" (bzw. "Prozessoren", wie dort Kerne generell genannt werden) aber präziser: Da es hierbei keine "Emulation" von n/2 physischen Kernen gibt, gibt es für die VM mit n vCPUs auf Hyperthreading keinerlei Garantie durch den Hypervisor, dass ihre Hypervisor-Threads auf höchstens n/2 physischen Kernen ausgeführt werden. Im Gegenteil, ein solches restriktives Verhalten wäre nicht sinnvoll und wird vom Scheduler grundsätzlich vermieden. In der Regel ist es effizienter, die Threads einer VM im Hyperthreading durch die einer anderen VM unterbrechen zu lassen; oder auch durch Scheduling anstatt durch Hyperthreading, dazu gleich. Diese Vermeidungsstrategie lässt sich durch die Limitierung der "Threads pro Hardware-Kern" auf 1 auch erzwingen.
Andererseits lässt sich Hyper-V durch Aktivieren von Core-Scheduling auch zwingen, zwei VMs nicht gleichzeitig auf demselben physischen Kern auszuführen; seit 2019 ist das Standard. Dann ist die Aktivierung von SMT durch 0 oder 2 essenziell, um im Ergebnis noch Hyperthreading zu nutzen. Auch Core-Scheduling sorgt aber nicht für eine Begrenzung der eingesetzten physischen Kerne auf die fiktive, in der VM aus der Zahl der virtuellen Kerne abgeleitete Zahl, wie die Screenshots von wohl Hyper-V 2022 ja belegen. Es verhindert nur, dass der Hyper-V eine Konkurrenz von Threads unterschiedlicher VMs im Hyperthreading zuließe, fängt diese also durch Scheduling ab.
Gedulde dich noch ein bisschen, ich habe wie schon vorher erwähnt den Übeltäter gefunden. 😁
Wenn alles gut geht, dann poste ich heute Nachmittag ein bisschen mehr dazu.
Wenn alles gut geht, dann poste ich heute Nachmittag ein bisschen mehr dazu.
Da bin ich gespannt.
Hallo Alex,
nunja du scheinst ja keine andere Meinung außer der Deinen zu glauben und in sofern ist es echt schwer mit Dir auf sachlicher Ebene zu diskutieren.
MIch dann als Zicke zu bezeichnen...Du das kann ich ab.
Aber zurück zum Thema:
Ich habe mir jetzt mal den Spaß gemacht und 2 Kollegen von mir (einer Softwareentwickler von Multithreading Applikationen und Verantwortlich für einen von uns vertriebenen Hypervisor für Automotive Multiprozessor und Multicoresysteme, der andere ist aus unsere IT und verantwortlich für unsere Virtualisierungsserver - wir haben vierstellig V;s bei uns unter HyperV laufen...der sollte also bisschen AHnung haben) gefragt.
Außerdem 2 externe die sich ebenfalls mit Multithreading und Hypervisor auskennen müssen, da sie hierfür ebenfalls verantwortlich sind.
Alle 4 haben ein übereinstimmendes Bild widergegeben, das ich Dir hier gerne weiztergebe.
Grundannahme:
- 1 physikalischer Prozessor mit 32 Cores und HT aktiv
- Hyper V
- jede VM hat 8 vCPUs (virtuelle CPUs)
- Du hast selbst gesagt, dass du 5-6 VMs auf der Node laufen hast
- EInstellung im Hypervisor HW Threads per Core = 1
- Windows Server >=2019 --> Core Schreduler
Klären wir erst mal Begriffe:
- vCPU --> virtuelle CPU innerhalb einer VM
- pCPU --> physikalische CPU auf Ebene des Hypervisors, aka "logischer Prozessor"
Klärung Hyperthreading:
Auf einem physikalischen Core können 2 Threads ausgeführt werden.
Diese beiden Threads teilen sich den cache (L1 und L2).
Diese beiden Thread laufen natürlicvh nicht gleichzeitig, aber können wir uns auf "parallel" einigen?
Sind wir uns bis hierher einig?
Was sieht der Hypervisor:
Der Hypervisor sieht wegen Hyperthreading jeden seiner echten Kerne doppelt, sieht also 64 logische Prozessoren. also 64 pCPUs.
Diese 64 pCPUs sind diese 32 Siliziumteile auf dem Die und auf jedem können eben 2 Threads laufen.
Nennen wir die der Einfachheit halber mal CPU0-31 und weil eben 2 Threads laufen geben wir jeweils ein a der b dazu.
Also CPU0_a, CPU0_b....usw.
Soweit immer noch okay?
Der Hypervisor sieht also 64 pCPUs, kennt aber die Paare, dass also die CPUx_a und CPUx_b irgendwie zusammengehören.
Nun sagst Du in deiner VM "ich brauche 8 vCPUs, richtig ?
Der Hypervisor hat aber den CoreScheduler und weiß:
Ich darf auf einem CPUx_a/b Pärchen keine Workloads von unterschiedlichen VMs laufen lassen.
Wenn er auf eine CPUx_a/b Kombination Workload von verschiedenen VMs laufen lassen möchte, muss er vorher die geteilten CacheSpeicher löschen, da sonst auf Speicherfragmente der andern VM zugegriffen werden könnte aber das nur am Rande.
Durch die Einstellung HW Threads per Core = 1 sagst Du aber dem Hypervisor:
"Kollege, jeder Core kann nur einen Thread einer VM ausführen"
Auf welchem Teil der CPUx, also auf a oder b die Worklload platziert wird, ist nicht definierbar.
Und das ist genau das was Du siehst:
Du lastest eine VM aus und dadurch werden 8 Deiner Kerne (aber eben immer nur a ODER b) mit Workload belastet.
Auf dem anderen DARF keine andere VM laufen und eben durch die o.g EInstellung nicht einmal Workload der selben VM.
Tut mir leid, wenn ich das so länglich dargestellt habe, aber das ist eben das, was bereits meine Meinung warf und mir jetzt von 4 Leuten unabhängig voneinander bestätigt wurde.
Sorry....
Und Overprovisioning:
Wenn du selbst sagst, du hast 5-6 VMs mit jeweils 8 vCPUs, dann komm ich da auf 40-48 angeforderte Kerne oder nicht?
Und eben weil durch den Core Scheduler VMs an den Kerngrenzen isoliert und du sagst "je Kern bitte nur ein Thread einer VM" ist das aus meiner Sicht überbelegt.
Soviel von mir
S.
nunja du scheinst ja keine andere Meinung außer der Deinen zu glauben und in sofern ist es echt schwer mit Dir auf sachlicher Ebene zu diskutieren.
MIch dann als Zicke zu bezeichnen...Du das kann ich ab.
Aber zurück zum Thema:
Ich habe mir jetzt mal den Spaß gemacht und 2 Kollegen von mir (einer Softwareentwickler von Multithreading Applikationen und Verantwortlich für einen von uns vertriebenen Hypervisor für Automotive Multiprozessor und Multicoresysteme, der andere ist aus unsere IT und verantwortlich für unsere Virtualisierungsserver - wir haben vierstellig V;s bei uns unter HyperV laufen...der sollte also bisschen AHnung haben) gefragt.
Außerdem 2 externe die sich ebenfalls mit Multithreading und Hypervisor auskennen müssen, da sie hierfür ebenfalls verantwortlich sind.
Alle 4 haben ein übereinstimmendes Bild widergegeben, das ich Dir hier gerne weiztergebe.
Grundannahme:
- 1 physikalischer Prozessor mit 32 Cores und HT aktiv
- Hyper V
- jede VM hat 8 vCPUs (virtuelle CPUs)
- Du hast selbst gesagt, dass du 5-6 VMs auf der Node laufen hast
- EInstellung im Hypervisor HW Threads per Core = 1
- Windows Server >=2019 --> Core Schreduler
Klären wir erst mal Begriffe:
- vCPU --> virtuelle CPU innerhalb einer VM
- pCPU --> physikalische CPU auf Ebene des Hypervisors, aka "logischer Prozessor"
Klärung Hyperthreading:
Auf einem physikalischen Core können 2 Threads ausgeführt werden.
Diese beiden Threads teilen sich den cache (L1 und L2).
Diese beiden Thread laufen natürlicvh nicht gleichzeitig, aber können wir uns auf "parallel" einigen?
Sind wir uns bis hierher einig?
Was sieht der Hypervisor:
Der Hypervisor sieht wegen Hyperthreading jeden seiner echten Kerne doppelt, sieht also 64 logische Prozessoren. also 64 pCPUs.
Diese 64 pCPUs sind diese 32 Siliziumteile auf dem Die und auf jedem können eben 2 Threads laufen.
Nennen wir die der Einfachheit halber mal CPU0-31 und weil eben 2 Threads laufen geben wir jeweils ein a der b dazu.
Also CPU0_a, CPU0_b....usw.
Soweit immer noch okay?
Der Hypervisor sieht also 64 pCPUs, kennt aber die Paare, dass also die CPUx_a und CPUx_b irgendwie zusammengehören.
Nun sagst Du in deiner VM "ich brauche 8 vCPUs, richtig ?
Der Hypervisor hat aber den CoreScheduler und weiß:
Ich darf auf einem CPUx_a/b Pärchen keine Workloads von unterschiedlichen VMs laufen lassen.
Wenn er auf eine CPUx_a/b Kombination Workload von verschiedenen VMs laufen lassen möchte, muss er vorher die geteilten CacheSpeicher löschen, da sonst auf Speicherfragmente der andern VM zugegriffen werden könnte aber das nur am Rande.
Durch die Einstellung HW Threads per Core = 1 sagst Du aber dem Hypervisor:
"Kollege, jeder Core kann nur einen Thread einer VM ausführen"
Auf welchem Teil der CPUx, also auf a oder b die Worklload platziert wird, ist nicht definierbar.
Und das ist genau das was Du siehst:
Du lastest eine VM aus und dadurch werden 8 Deiner Kerne (aber eben immer nur a ODER b) mit Workload belastet.
Auf dem anderen DARF keine andere VM laufen und eben durch die o.g EInstellung nicht einmal Workload der selben VM.
Tut mir leid, wenn ich das so länglich dargestellt habe, aber das ist eben das, was bereits meine Meinung warf und mir jetzt von 4 Leuten unabhängig voneinander bestätigt wurde.
Sorry....
Und Overprovisioning:
Wenn du selbst sagst, du hast 5-6 VMs mit jeweils 8 vCPUs, dann komm ich da auf 40-48 angeforderte Kerne oder nicht?
Und eben weil durch den Core Scheduler VMs an den Kerngrenzen isoliert und du sagst "je Kern bitte nur ein Thread einer VM" ist das aus meiner Sicht überbelegt.
Soviel von mir
S.
Zitat von @MysticFoxDE:
Aber gerne, wie ich schon mehrfach erwähnt habe, ist z.B. RSS eine der Anwendungsmöglichkeiten, die unbedingt auf dem "primären/physikalischen" Kern laufen muss.
Aber gerne, wie ich schon mehrfach erwähnt habe, ist z.B. RSS eine der Anwendungsmöglichkeiten, die unbedingt auf dem "primären/physikalischen" Kern laufen muss.
Nein, sie sollte nur mit einem Thread pro Kern ausgeführt werden. Ob das erreicht wird, indem man logische Kerne von 0 an gerade oder von 1 an ungerade hochzählt, ist technisch egal - in Bezug auf die CPU-Architektur. Eine Software-Implementierung wird sich für eines davon entscheiden.
Fahre einfach mal eine VM ohne HT hoch und führe auf dieser Get-NetadapterRSS aus und merke was unter "RssProcessorArray" steht und dann starte dieselbe VM mit HT und führe denselben Befehl aus und dann siehst du sehr wohl, das das RSS in einer VM durchaus zwischen vCores und vHT-Cores unterscheiden kann.
Das sieht man da wirklich nur, wenn man es sehen will.
Behauptet bitte niemals wieder, dass zwei VM's auf einem und demselben Kern "gleichzeitig" ausgeführt werden, das ist Unsinn und war so auch noch nie der Fall, weder beim Hyper-V noch bei VMware oder einem anderen Hypervisor!
Tut mir Leid, das ist der Stand der CPU-Entwicklung. Wofür wohl das S in SMT steht?
Schnell nacheinander ja, aber niemals gleichzeitig.
Doch, gleichzeitig, bezogen auf den Kern. Ich habe Verständnis, dass man das mal in Forendiskussionen so sagt: Ein physischer Kern, ein Thread zu einer Zeit. So kann man sich das vereinfacht vorstellen bzw. seine Erwartungen an etwas wie Hyperthreading moderieren.
Es stimmt aber nicht, da ein Kern nicht monolithisch ist, sondern aus Execution Units besteht. Der Zweck von SMT ist, gleichzeitig, d.h. innerhalb desselben Clock-Cycles, Instruktionen zweier Threads auf demselben physischen Kern auszuführen. Daraus ergibt sich ein Effizienzgewinn, weil die in einem Zyklus verfügbaren Instruktionen eines einzelnen Threads die Execution Units eines Kerns typischerweise nicht auslasten. Angenommen werden die Instruktionen der Threads nur sequenziell, das ist ein Funken Wahrheit in der vereinfachten Vorstellung.
Ähm, die Screenshots stammen übrigens von einem Hyper-V 2022, der in diesem Augenblick mit einem "classic" Core-Scheduler gelaufen ist. 😉
Gut, dann sind sie natürlich kein Beleg meiner Aussage. Ändert aber den Sachverhalt nicht.
Oh Mann, das ist überraschend zwecklos.
Das Thema wirkte auf den ersten Blick interessant, gerade auch wegen der Sicherheitsrelevanz z.B. der tatsächlichen Funktionsweise von SMT. Aber es führt offensichtlich zu keinem Erkenntnisgewinn, sondern nur zu unqualifizierten Angriffen.
Letzte Worte:
Das Thema wirkte auf den ersten Blick interessant, gerade auch wegen der Sicherheitsrelevanz z.B. der tatsächlichen Funktionsweise von SMT. Aber es führt offensichtlich zu keinem Erkenntnisgewinn, sondern nur zu unqualifizierten Angriffen.
Letzte Worte:
- Die Präsentation der beiden logischen Kerne eines physischen Kerns auf Basis von SMT/HT ist im Allgemeinen symmetrisch. Diese aus meinem sicher lücken- und fehlerhaften Wissen getroffene Behauptung ist natürlich durch die Dokumentation einer CPU-Architektur oder durch Fachliteratur widerleglich. Die Ausbreitung von phänomenologischen Banalitäten, etwa dass ein Softwarehersteller für eine notwendige Vorzugsentscheidung zwischen einem Wertepaar grundsätzlich den kleineren Wert nimmt, führt dagegen nicht weiter.
- Wie oft welche Execution Unit pro Kern vorhanden ist, steht üblicherweise im Handbuch der jeweiligen Architektur. ALUs findet man heute in der Regel vier, teils auch fünf (Golden Cove). Wenn nur von Execution Units oder der "Breite" der CPU die Rede ist, bezieht sich das normalerweise auf die ALUs.
- Eine ausführliche Darstellung von Multithreading einschließlich SMT findet sich in Hennessy/Patterson, Computer Architecture, 6. Auflage 2019, Seite 242 ff.
- Das nachzuschlagen, hat mich daran erinnert, dass ich oben besser von Functional Units anstelle von Execution Units gesprochen hätte. Glücklicherweise meint Google, das wäre dasselbe.
Für mich ist das Thema durch.
Du teilst Screenshots und sagst es läuft auf 2019 ohne aber zu sagen, dass die "hier ist es böse" Screenshots mit abweichenden Einstellungen gemacht wurden - zumindest hab ich das jetzt so verstanden.
Aus meiner Sicht konnte ich bisher noch nie fehlerhaftes Verhalten des Schedulers feststellen und von daher bin ich hier raus.
Nur soviel:
Ich habe es deshalb als Überbuchung gesehen, weil du eben - zumindest bei der von mir angenommenen Konfig (Core Scheduler, HWThreadsperCore=1) so definiert hast, dass die Workloads eben an den Kerngrenzen getrennt sind und - wie du richtig sagst - der Scheduler den Cache eben erst mal löschen musst.
Keine Überbuchung hast du bei HWThreads-perCore=2, dann verteilt er die 8 angeforderten Kerne der VM aber auf 4 "echte" (a/b oder in Deiner Nomenklatur 0/1) und das ist dann defintiv nicht die doppelte Rechenleistung.
S.
Du teilst Screenshots und sagst es läuft auf 2019 ohne aber zu sagen, dass die "hier ist es böse" Screenshots mit abweichenden Einstellungen gemacht wurden - zumindest hab ich das jetzt so verstanden.
Aus meiner Sicht konnte ich bisher noch nie fehlerhaftes Verhalten des Schedulers feststellen und von daher bin ich hier raus.
Nur soviel:
Ich habe es deshalb als Überbuchung gesehen, weil du eben - zumindest bei der von mir angenommenen Konfig (Core Scheduler, HWThreadsperCore=1) so definiert hast, dass die Workloads eben an den Kerngrenzen getrennt sind und - wie du richtig sagst - der Scheduler den Cache eben erst mal löschen musst.
Keine Überbuchung hast du bei HWThreads-perCore=2, dann verteilt er die 8 angeforderten Kerne der VM aber auf 4 "echte" (a/b oder in Deiner Nomenklatur 0/1) und das ist dann defintiv nicht die doppelte Rechenleistung.
S.
Core --> Logischer Kern einer CPU eines HV-Hosts
PH-Core --> Physikalischer Kern einer CPU eines HV-Hosts Falls HT auf dieser aktiv ist. (0.0, 0.2, 0.4 ...)
HT-Core --> Fake Kern einer CPU eines HV-Hosts Falls HT auf dieser aktiv ist. (0.1, 0.3, 0.5 ...)
PH-Core --> Physikalischer Kern einer CPU eines HV-Hosts Falls HT auf dieser aktiv ist. (0.0, 0.2, 0.4 ...)
HT-Core --> Fake Kern einer CPU eines HV-Hosts Falls HT auf dieser aktiv ist. (0.1, 0.3, 0.5 ...)
Diese Annahmen sind falsch, denn:
Es gibt nicht "1 physikalischer Kern und 1 Fake-Kern" pro Core.
Für jeden physischem Kern werden dem OS 2 logische Kerne präsentiert, die sich in Leistung nicht unterscheiden.
Dies kann man auch leicht nachweisen, indem man einen Benchmark auf jeweils einen logischen Kern beschränkt und die Leistung vergleicht. Hier ein Vergleich von Core 0 und 1 (logische cores des 1. physischen cores)
Der Benchmark wurde ausgeführt in einer WSL2 Ubuntu-Installation mit
sysbench --threads=1 cpu run
Per Taskmanager wurde die VM dem jeweiligem Core zugewiesen.
Noch etwas Grundlegendes zu Hyperthreading, vereinfacht:
ein CPU-Kern hat verschiedene Teile für verschiedenen Aufgaben
Nicht für jede Instruktion, die die CPU verabeiten muss, wird jeder Teil des Kerns benötigt. Und genau da setzt Hyperthreading an, indem es Teile von dem zweiten Thread, die die nicht benötigten Teile des CPU-Kerns benötigt, dazwischenschiebt, so dass pro CPU-Zyklus (möglichst) kein Teil der CPU ungenutzt bleibt. Daher der ~30% Leistungsgewinn bei aktiviertem HT.
Das kann man auch gut auf diesem Bild sehen, welches nicht von der Marketingabteilung kommt
Das Bild zeigt eine Momentaufnahme der Kerne während eines Zyklus, jedes Kästchen stellt eine execution unit eines Kernes dar.
Bei "Superscalar" (1 Kern kein HT) sieht man, dass manche Teile des Kernes benutzt werden (gelb) und andere nicht (grau) und somit hat etwa die Hälfte des Kernes in diesem Zyklus nichts zu tun hat.
"Multiprozessing" zeigt 2 Cores ohne HT
Bei "Hyperthreading" sieht man, wie die nicht benutzten Teile des Kernes im jeweiligen Zyklus mit Aufgaben aus einem anderen Thread aufgefüllt werden, so dass möglichst jeder Teil des Kernes in diesem Zyklus etwas zu tun hat.
Streng genommen muss man daraus schließen dass ein Core ohne HT nur zu etwa 50% effizient ist (variabel nach workload) und erst durch Multithreading an die 90% ran kommt.
Das erklärt auch, warum beide logischen Kerne für sich die volle Leistung des physischen Kerns beanspruchen können, sofern der jeweils andere nichts zu tun hat.
-Thomas
Wo genau widerspricht das was du sagst dem was ich sage?
Logisch, dass wenn man 0 und 1 (beides logische Kerne auf dem selben, physischem Core) gleichzeitig belastet, die Leistung nicht 2x dem entspricht, was ein logischer Kern alleine leisten kann.
Das erschließt sich auch aus dem Rest meines Textes.
Fakt ist, was du oben geschrieben hast ist falsch. Es gibt keinen physischen und „fake“ Core. Es gibt nur zwei gleichwertige logische Cores auf einem physischem Core.
Fakt ist auch dein defizitäres Verständnis von der Funktionsweise von Hyperthreading.
Hier kann ich nur die Empfehlung von C.R.S. unterstreichen, damit tust du dir einen Gefallen...
Und nochwas.. ausgerechnet DU kommst mit Marketing-Gelaber, dem ich auf den Leim gegangen wäre. DU hast die vereinfachten Marketing-Slides gepostet. ICH hingegen technische Informationsslides von Intel.
siehe z.B. Hennessy/Patterson, Computer Architecture, 6. Auflage 2019, Seite 245:
Was im wesentlichen mit dem Bild aus der technischen Dokumentation übereinstimmt, welches ich schon vorhin gepostet habe, aber noch tiefer in die Details verschiedener Arten von Multithreading eingeht.
Das schreib sich Sigmaringen 😉
-Thomas
Logisch, dass wenn man 0 und 1 (beides logische Kerne auf dem selben, physischem Core) gleichzeitig belastet, die Leistung nicht 2x dem entspricht, was ein logischer Kern alleine leisten kann.
Das erschließt sich auch aus dem Rest meines Textes.
Fakt ist, was du oben geschrieben hast ist falsch. Es gibt keinen physischen und „fake“ Core. Es gibt nur zwei gleichwertige logische Cores auf einem physischem Core.
Fakt ist auch dein defizitäres Verständnis von der Funktionsweise von Hyperthreading.
Hier kann ich nur die Empfehlung von C.R.S. unterstreichen, damit tust du dir einen Gefallen...
Eine ausführliche Darstellung von Multithreading einschließlich SMT findet sich in Hennessy/Patterson, Computer Architecture, 6. Auflage 2019, Seite 242 ff.
Und nochwas.. ausgerechnet DU kommst mit Marketing-Gelaber, dem ich auf den Leim gegangen wäre. DU hast die vereinfachten Marketing-Slides gepostet. ICH hingegen technische Informationsslides von Intel.
Zitat von @MysticFoxDE:
Und daher suggeriert dieses, nämlich das man mit HT zwei Dinge parallel verarbeiten kann, auch einen absoluten Humbug. 😉
Das ist kein Humbug, das ist die harte Realität. Es werden im selbem Zyklus (Zeiteinheit) Aufgaben aus mehreren Threads GLEICHZEITIG bearbeitet, was dadurch ermöglicht wird, dass nicht jede Aufgabe alle Teile eines Cores benötigt. Die freien Teile werden mit Aufgaben aus anderen Threads beauftragt.Und daher suggeriert dieses, nämlich das man mit HT zwei Dinge parallel verarbeiten kann, auch einen absoluten Humbug. 😉
siehe z.B. Hennessy/Patterson, Computer Architecture, 6. Auflage 2019, Seite 245:
Was im wesentlichen mit dem Bild aus der technischen Dokumentation übereinstimmt, welches ich schon vorhin gepostet habe, aber noch tiefer in die Details verschiedener Arten von Multithreading eingeht.
Das schreib sich Sigmaringen 😉
-Thomas
Lies doch mal zu Ende was ich geschrieben habe, oder reicht es bei dir nur für einen Satz?
Wenn ja, kein Problem, sobald ich wieder an meiner Workstation sitze, lasse ich selbst die heisse Luft aus deinem HT wieder raus.
"mein" HT?
Na dann verbrenne dich mal nicht.
Und übrigens, HT ist am sterben, bei Intel zumindest. 😉😎
Das wäre gut für dich - dann wird dein mangelndes Verständnis davon zumindest nicht mehr relevant sein.
Beste Grüsse aus Sigmaringen😁
Na immerhin hat das diesmal geklappt. Auch wenn man "Grüße" nicht "Grüsse" schreibt.
-Thomas
PS: vielleicht klappt es damit für dich besser: 😉😎😁😒
PPS: Mich würde eine Quelle für deine Behauptung interessieren, dass Intel HT abwirft. Aus der aktuellen Generation gibt es keinen i7/i9/Xeon Platinum/Gold ohne HT
Zitat von @3063370895:
Logisch, dass wenn man 0 und 1 (beides logische Kerne auf dem selben, physischem Core) gleichzeitig belastet, die Leistung nicht 2x dem entspricht, was ein logischer Kern alleine leisten kann.
Logisch, dass wenn man 0 und 1 (beides logische Kerne auf dem selben, physischem Core) gleichzeitig belastet, die Leistung nicht 2x dem entspricht, was ein logischer Kern alleine leisten kann.
Zitat von @MysticFoxDE:
Moin @3063370895,
ich träume mir eben nichts zusammen.
Ist es eigentlich wirklich so schwer noch zwei weitere Tests zu machen?
Es ist nicht nötig, da ich das Ergebnis bereits kenne. Wie oben beschrieben.Moin @3063370895,
Fakt ist auch dein defizitäres Verständnis von der Funktionsweise von Hyperthreading.
ich träume mir eben nichts zusammen.
Ist es eigentlich wirklich so schwer noch zwei weitere Tests zu machen?
Wenn ja, kein Problem, sobald ich wieder an meiner Workstation sitze, lasse ich selbst die heisse Luft aus deinem HT wieder raus.
Na dann verbrenne dich mal nicht.
Und übrigens, HT ist am sterben, bei Intel zumindest. 😉😎
Beste Grüsse aus Sigmaringen😁
Alex
-Thomas
PS: vielleicht klappt es damit für dich besser: 😉😎😁😒
PPS: Mich würde eine Quelle für deine Behauptung interessieren, dass Intel HT abwirft. Aus der aktuellen Generation gibt es keinen i7/i9/Xeon Platinum/Gold ohne HT
Zitat von @MysticFoxDE:
Moin @3063370895,
und was ist eigentlich so schwer daran zu verstehen, dass lediglich eine zweite Prozesswarteschlange derselben Recheneinheit noch lange kein eigenständiger Core ist.
Habe ich nie behauptet. Du verstehst es einfach nichtMoin @3063370895,
Lies doch mal zu Ende was ich geschrieben habe, oder reicht es bei dir nur für einen Satz?
und was ist eigentlich so schwer daran zu verstehen, dass lediglich eine zweite Prozesswarteschlange derselben Recheneinheit noch lange kein eigenständiger Core ist.
Logisch, dass wenn man 0 und 1 (beides logische Kerne auf dem selben, physischem Core) gleichzeitig belastet, die Leistung nicht 2x dem entspricht, was ein logischer Kern alleine leisten kann.
na ja, laut deinen eigenen Worten sollte dabei aber so zwischen +30% und +100% möglich sein.
Hier nochmals zur Erinnerung.
Daher der ~30% Leistungsgewinn bei aktiviertem HT.
Streng genommen muss man daraus schließen dass ein Core ohne HT nur zu etwa 50% effizient ist (variabel nach workload) und erst durch Multithreading an die 90% ran kommt.
Streng genommen muss man daraus schließen dass ein Core ohne HT nur zu etwa 50% effizient ist (variabel nach workload) und erst durch Multithreading an die 90% ran kommt.
also komm, zeig, wo?
Nochmal, ganz langsam, für dich:
Ein Core ohne HT ist zu keinem Zeitpunkt zu 100% belastet, da nicht jede Aufgabe, die eine CPU erledigt, alle Teile des Cores beansprucht. Hier setzt HT an und füllt die nicht benötigten Teile des Cores mit Aufgaben eines anderen Threads auf. Dadurch kann die Effizienz des Cores gesteigert werden, eben bis zu besagten ~90%, je nach Workload.
Es ist nicht nötig, da ich das Ergebnis bereits kenne. Wie oben beschrieben.
Und warum hast du es nicht gleich mit gepostet?
Wenn ja, kein Problem, sobald ich wieder an meiner Workstation sitze, lasse ich selbst die heisse Luft aus deinem HT wieder raus.
"mein" HT?Na dann verbrenne dich mal nicht.
Mach dir da keine Sorgen, habe einen kleinen und einen grossen Hausdrachen zuhause, sprich, ich kann mit Feuer gut umgehen. 😉
PPS: Mich würde eine Quelle für deine Behauptung interessieren, dass Intel HT abwirft. Habe mir gerade stichprobenmäßig ~20 Prozessoren aus dem aktuellen Lineup angesehen (Server sowie Desktop) und keinen ohne HT gefunden.
Nö, sonst bekomme ich von jemand wegen so Sachen wie NDA, wahrscheinlich ordentlich einen auf den Deckel. 😬
Aber einen kleinen Tipp gebe ich dir dennoch. Da gibt es so Dinge wie E-.... und die sind bei MT meistens um Welten effektiver als HT. 😉
Gruss Alex
Gruss Alex
Ich bin hier fertig. Du verstehst einfach nicht die Technik dahinter. Ich habe es so einfach wie möglich erklärt. Liegt wohl an mir, ich kann es nicht einfach genug erklären, so dass selbst du es verstehst. Mein Fehler - sorry 😉
-Thomas
Thomas, diese Marketingmantra hast du jetzt X Mal wiederholt und ich habe dieses auch verstanden!
Kannst du es nun auch praktisch belegen, danke.
Kannst du es nun auch praktisch belegen, danke.
Mache Aufgabe X auf dem Kern 0 (physischer Kern 0 logischer Kern 0). Die Aufgabe soll den logischen Kern zu 100% belasten. Jetzt mache Aufgabe Y auf Kern 1 (physischer Kern 0 logischer Kern 1). Auch diese Aufgabe soll den logischen Kern zu 100% belasten.
Obwohl der Kern nach deinem Verständnis zu 100% durch Aufgabe X ausgelastet ist, kann die Aufgabe Y auch noch mit einer bestimmten Geschwindigkeit ausgeführt werden. Die Geschwindigkeit von Aufgabe Y ist dann nur noch davon abhängig, wie viele Teile des physischem Kern 0 durch Aufgabe X nicht beansprucht sind und ob diese Teile durch die Aufgabe Y beansprucht werden können.
Übrigens, bei modernen CPU's, ist es im Hinblick auf hohe und durchgängige Performance eher wichtiger den richtigen Kühler zu wählen als HT einzuschalten. 😉
Warum lenkst du immer vom Thema ab und versuchst nicht mal meine Kernaussage (pun intended) zu HT mit Fakten zu widerlegen? Schwurblergequatsche à la "du bist auf Marketing reingefallen" sind keine Fakten.
-Thomas
Ich geb’s auf, das macht keinen Sinn.
selten jemanden gesehen der so sehr von sich selbst überzeugt ist obwohl er so offensichtlich falsch liegt.
-Thomas
selten jemanden gesehen der so sehr von sich selbst überzeugt ist obwohl er so offensichtlich falsch liegt.
-Thomas