BESTGREENSCREEN - Fotolia

Hyper-Threading und Virtualisierung: Vor- und Nachteile für den Hypervisor

Hyper-Threading soll die Prozessorleistung verbessern, kann sie aber auch verschlechtern. Der Einsatz sollte daher wohlüberlegt sein.

Hyper-Threading ist eine Prozessortechnologie, die es einem einzelnen Prozessor ermöglicht, sich wie zwei logische Prozessoren zu verhalten. Damit kann die Nutzung der Instruktions-Pipeline des Prozessorkerns und damit auch die augenscheinliche Leistung des Prozessors erhöht werden. Auch virtuelle Umgebungen können von Hyper-Threading profitieren. Sie erlauben dem Hypervisor die effektive Verdoppelung der für die VM-Provisionierung verfügbaren virtuellen Prozessoren.

Leider ist Hyper-Threading nicht bereits an sich ein perfekter Prozess: Ineffiziente, schlecht programmierte oder sogar unsauber verteilte Workloads können die Systemleistung sogar schwächen, wenn Hyper-Threading aktiv ist.

So funktioniert Hyper-Threading

Hyper-Threading ist eine proprietäre Technologie von Intel, die zur Verbesserung der Ressourcennutzung von Prozessoren implementiert wurde. Effektiv können damit die Prozessoren eines Servers besser ausgelastet werden und somit mehr Arbeit erledigen.

Das Konzept der Hyper-Threading-Technologie reibt sich an der Tatsache, dass ein einzelner traditioneller physischer Prozessorkern nur eine Aufgabe auf einmal abarbeiten kann. Ein Workload füllt die Instruktions-Pipeline des Prozessors, und diese Pipeline ist in der Regel nicht zu jeder Zeit zu 100 Prozent gefüllt und ausgelastet. Teilweise liegt das an der Art und Weise, wie eine Anwendung programmiert ist, zusätzlich gibt es aber auch viele leere Prozessorzyklen, weil moderne Prozessoren weit mehr Leistung anbieten, als viele Anwendungen benötigen.

Hyper-Threading fügt dem Prozessorkern zusätzliche Schaltungen hinzu, die als Grundlage für eine zweite Instruktions-Pipeline dienen, um die Ausführungsressourcen des Prozessors aufzuteilen. Darunter fallen etwa der Memory Bus, die Cache-Speicher des Prozessors und dessen Execution Engine. Damit wird es dem physischen Prozessorkern durch Hyper-Threading möglich, quasi als zwei logische Prozessorkerne verwendet zu werden. Ist Hyper-Threading aktiviert, so kann jeder logische Prozessor unabhängig von seinem Zwilling eingesetzt und unterbrochen, angehalten und betrieben werden, und zwar unabhängig vom anderen virtuellen Prozessor, der denselben Kern nutzt. Befindet sich ein logischer Kern im Leerlauf, so kann der Zwilling zusätzliche Ausführungsressourcen von ihm übernehmen.

Dabei ist es wichtig, dass der zweite logische Prozessor beim Hyper-Threading auf demselben physischen Kern keineswegs die Leistung des Prozessors verdoppelt. Die bestehenden Ausführungsressourcen des Prozessors werden damit ja lediglich geteilt, und nicht verdoppelt. So ermöglicht Hyper-Threading zwar das Bearbeiten mehrerer Aufgaben oder Instruktionen zur gleichen Zeit, aber diese zusätzliche Arbeit findet ihre Grenzen auch weiterhin in den bestehenden Grenzen der gleichbleibenden Ausführungsressourcen. Damit ist Hyper-Threading deutlich zu unterscheiden vom Mehrprozessorbetrieb etwa mit zwei oder vier Prozessoren, bei denen die Konfigurationen mehrere physische Prozessoren umfasst.

Wie viel zusätzliche Arbeit ein virtueller Prozessor abarbeiten kann, hängt einerseits von den Anforderungen der Workloads ab, die um die Ressourcen des Prozessors wetteifern, andererseits ist aber auch die Fähigkeit des Betriebssystems von Bedeutung, logische Prozessoren verwalten und einteilen zu können. Ein Betriebssystem ohne eigene Unterstützung für Hyper-Threading wird jeden logischen Prozessor identisch behandeln und womöglich mehrere Workloads auf logische Prozessoren desselben Prozessorkerns laden, was letztendlich die Leistung verschlechtert, während gleichzeitig andere Kerne unterfordert bleiben. Im Vergleich dazu kann ein Betriebssystem mit eigener Unterstützung für Hyper-Threading Threads auf verschiedene Prozessoren aufteilen und die Arbeit in der Breite verteilen, um die Arbeitsleistung des Systems zu maximieren.

Nutzt zum Beispiel eine Anwendung den Prozessor intensiv aus, indem sie dessen Instruktions-Pipeline fast durchgängig auffüllt, so bietet ein zweiter logischer Prozessor auf demselben physischen Prozessorkern wenig Vorteile – es bleiben einfach zu wenige Ressourcen übrig, die es zu teilen gälte. Das Betriebssystem könnte zwar einen zweiten Thread auf diesen logischen Prozessor legen, aber er würde unter der schlechten Leistung leiden und außerdem die Leistung der anspruchsvolleren Anwendung schmälern, indem er von jener benötigte Prozessorzyklen abgreift. Ein Hypervisor oder Betriebssystem muss also mit Hyper-Threading umgehen können und logische Prozessoren auf eine Art und Weise einsetzen, die allen Workloads eine maximierte Prozessornutzung ermöglicht. Wenn dies nicht erzielt werden kann, sollte das Hyper-Threading besser deaktiviert werden.

Hyper-Threading, Virtualisierung und Hypervisoren

Hyper-Threading ist dabei nicht mit Virtualisierung zu verwechseln, ein Hypervisor ist auf Systemebene nicht beteiligt. Hyper-Threading ist eher eine Art hardwarebasierte Virtualisierung auf Ebene des Prozessors.

Wo liegt dann aber der Vorteil von Virtualisierung, Hypervisoren und Hyper-Threading? Hyper-Threading und Hypervisoren sind keine verknüpften Konzepte. Ein Hypervisor kann mit Prozessoren ohne Hyper-Threading arbeiten und Prozessoren mit Hyper-Threading können auf nicht-virtualisierten Systemen arbeiten. Aber beide Konzepte können sich ergänzen, und moderne Hypervisoren wie VMware vSphere können Hyper-Threading  einsetzen, wenn virtuelle CPUs gepoolt und virtuellen Maschinen zugewiesen werden. Damit können Hypervisoren zusätzliche Flexibilität in Organisation und Verteilung der Arbeit erzielen, was potenziell zu einer besseren Nutzung und Effizient virtueller Server führt.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+ und Facebook!

Erfahren Sie mehr über Serverhardware

ComputerWeekly.de
Close