Die Virtualisierung von Servern findet man derzeit in nahezu allen Rechenzentren - einerseits, um Kosten zu senken, andererseits, um den Einsatz von Ressourcen im RZ zu optimieren. Mit SR-IOV steht seit Kurzem eine Technik zur Verfügung, um die Nutzung der physischen Ressourcen für VMs zu verbessern.Eine Studie von IDC mit dem Titel "Market Analysis Perspective: Worldwide Enterprise Virtualization Software, 2010 - Server Virtualization", stellt folgende Kernpunkte heraus: Die Zahl virtualisierter Server steigt - es wird erwartet, dass 2014 mehr als 18,4 Millionen virtualisierte Server im Einsatz sein werden. Teilnehmer der Studie berichten zudem, dass sie 25 Prozent der Kosten für Hardware und entsprechende Infrastruktur einsparen konnten. Angesichts dieser enormen Zunahme virtueller Umgebungen hat das Streben nach I/O-Optimierung für virtuelle Server zur Entwicklung neuer Netzwerktechniken wie Converged Enhanced Ethernet (CEE) und Data Center Bridging (DCB), Fibre Channel over Ethernet (FCoE) und Virtual NICs geführt. Einen neuen Standard stellt die Single-Root-I/O-Virtualisierung (SR-IOV) dar, entwickelt von der PCI SIG (Special Interest Group).
Die Hypervisor der virtuellen Server stellen den VMs (virtuellen Maschinen) Ressourcen zur Verfügung, die die Funktion eines physischen Servers nachahmen und es jeder VM ermöglichen, unabhängig auf diesem Server zu laufen. Für den I/O bedeutet das, dass jede VM ein virtuelles I/O-Gerät verwendet, das der Hypervisor bereitstellt. Dies funktioniert zwar, ist aber nicht effizient. Dies gilt vor allem für den empfangenen I/O. Der Hypervisor führt folgende Schritte zur Verarbeitung eines empfangenen I/Os auf Multi-Core-Servern durch, wobei jeder Schritt den I/O verlangsamt und wichtige CPU-Ressourcen nutzt: 1. Die Arbeit eines der Prozessorkerne wird zur Überprüfung eines Pakets unterbrochen (Interrupt), um zu bestimmen, an welche VM das Paket zu senden ist. 2. Die Arbeit des Kerns, der die VM versorgt, wird unterbrochen und führt den I/O aus. 3. Der Kern, der das Paket ursprünglich empfangen hat, setzt die unterbrochene Operation fort.
Multi-Core-Server verteilen die Last auf mehrere Rechenkerne und können somit auch ressourcenhungrige Anwendungen verarbeiten. Zudem lässt sich mit Multi-Core-Prozessoren der Virtualisierungsgrad erhöhen, es lassen sich also mehr VMs pro physischem Server betreiben, bevor der Server ausgelastet ist.
Dieser Trend entwickelt sich seit 2009 dank der Einführung von Quad-Core-Prozessoren durch Intel und AMD ständig weiter. Dieser Tage dürfte sich der Trend dank einer neuen Server-Generation mit bis zu acht Kernen und bis zu 16 gleichzeitig laufenden Threads weiter verstärken. Neben einer wachsenden Zahl der Prozessorkerne steigt auch die Speicherkapazität auf dem Server - ein weiterer ausschlaggebender Grund für die Virtualisierung von Servern. Abgesehen von Kernen und Speicher gilt es auch eine dritte Komponente, den I/O, zu erhöhen, um für die VMs ausreichend Bandbreite im Netzwerk zur Verfügung zu stellen. Dazu gehören leistungsstarke 10GBit/s-Ethernet-Ports, ein effektiver Protokoll-Offload zur Einsparung von CPU-Zyklen und die Einführung neuer Techniken wie SR-IOV.
Was ist SR-IOV?
SR-IOV ist ein PCI-SIG-Standard, der für virtuelle Server entwickelt wurde. Die SR-IOV-Spezifikation erlaubt es einer PCI-Express-Karte, mehrfach als physische und virtuelle Karte zu erscheinen, indem das Konzept der physischen und virtuellen Funktionen verwendet wird:
Physische Funktion (PF): Es besteht mindestens eine PF für jeden physischen Port an einem Adapter. Adapter lassen sich in bis zu vier Ports pro physischem Port partitionieren, beispielsweise acht PFs auf einem Adapter mit zwei physischen Ports. Von Vorteil ist hier, dass die PFs vollständig konfigurierbar sind. Sie sind mit dem Hypervisor verbunden und lassen sich wie physische Geräte verwalten.
Virtuelle Funktion (VF): Virtuelle Funktionen sind VMs zugeordnet und auf die Verwaltung von Datentransfer (I/O-Streams) beschränkt. Sie unterstützen dabei nicht die Verwaltung des physischen Geräts. Der Hypervisor stellt VFs für unterschiedliche VMs bereit, wodurch diesen ein I/O-Device zur Verfügung steht, ohne dass die VM die physischen Daten der Adapter kennt. Der Hypervisor verwaltet die physischen Geräte.
Obwohl der SR-IOV-Standard Netzwerke wie auch Speicher-I/O betrifft, ist dieser bisher nur in Netzwerken implementiert worden. Die Leistungsentwicklung für virtuelle Server konzentriert sich auf den Datenverkehr, der meist den größten I/O-Bedarf ausmacht und die meisten Server-Ressourcen beansprucht. Der Speicher-I/O hat viel weniger Overhead und erreicht normalerweise die Maximalgeschwindigkeit der Leitung.
Eine der möglichen Lösungen für höhere Leistung ist der direkte oder Passthrough-I/O auf der Grundlage der Zuordnung eines einzigen physischen Ports zu jeder VM bei gleichzeitiger Umgehung des Hypervisors. Diese Methode verbessert die Leistung, ist jedoch durch die Anzahl der physischen Ports eingeschränkt. Auch hat dies eine komplizierte und kostspielige Ansammlung von Ports, Switch-Ports und Kabeln zur Folge. Ein direkter I/O ist bei einer Migration einer aktiven VM nicht durchführbar. Die VM verwendet einen Softwaretreiber, der auf das I/O-Gerät abgestimmt ist. Durch eine Migration der VM ist nicht mehr gewährleistet, dass das gleiche I/O-Gerät im Ziel-Server vorhanden ist. Eine Migration erfordert dementsprechend das aufwendige manuelle Ausschalten, Verschieben und Neustarten der VM.
Mit SR-IOV werden die VFs den VMs zugeordnet. Dies ermöglicht die Unterstützung von direktem I/O vieler VMs über einen einzigen Adapter-Port, Switch-Port und ein Kabel; bei Bedarf lassen sich einer VM mehrere VFs zuordnen. Zum Beispiel könnten VFs von jedem physischen Port eines Zwei-Port-Adapters einer VM zugeordnet werden, um eine hohe Verfügbarkeit zu gewährleisten.
Der Server-Kern führt beim Empfang von I/O sämtliche Paketoperationen selbstständig aus, zusammen mit den ihm zugeordneten VFs, welche der dedizierten VM zugewiesen sind. Dabei sind keine Interrupts von Prozessorkernen nötig, die anderen VMs zugeordnet sind. Um eine noch höhere Leistung zu erzielen, lassen sich I/Os mittels eines internen Layer-2-Switches zwischen VFs auf derselben PF leiten, um die Umleitung über einen physischen Switch zu vermeiden. SR-IOV erlaubt also die Migration aktiver VMs unabhängig von der Hardware des Host-Servers und erhöht die Flexibilität des vorhandenen I/O-Geräts durch Aufteilung der Bandbreite. Zudem steigt die Effizienz durch Verwendung interner Layer-2-Switch-Funktionalität.