Dit bericht is oorspronkelijk geschreven door Abhijit Khande & Vineeth V Acharya van het DELL Windows Engineering Team.
Reacties zijn welkom! Neem contact met WinServerBlogs@dell.com op om een onderwerp voor te stellen of andere opmerkingen te maken.
Met het besturingssysteem Microsoft® Windows Server® 2012 Beta heeft Microsoft ondersteuning geïntroduceerd voor een aantal functies in de netwerkruimte. Een van die belangrijke en interessante functies is
Single Root I/O-virtualisatie (SR-IOV), waarmee virtuele machines één PCI-e-apparaat kunnen delen. Dit bericht biedt een basisoverzicht van SR-IOV in Windows Server 2012 Beta en hoe het het CPU-gebruik in een gevirtualiseerde omgeving tijdens netwerk-I/O drastisch vermindert.
De SR-IOV-interface is een uitbreiding op de PCI Express (PCIe)-specificatie. Met SR-IOV kan één PCIe-apparaat, zoals een netwerkadapter, meerdere lichtgewicht hardwareoppervlakken op de PCI-bus leveren en afzonderlijke toegang tot de bronnen ervan tussen de verschillende instanties. Dit wordt bereikt door het gebruik van meerdere virtuele functies (VF) naast de (gebruikelijke) fysieke functie (PF). Aangezien het afhankelijk is van de hardware, moeten zowel het PCIe-apparaat als het platform deze functie ondersteunen.
Traditioneel wordt een pakket dat bestemd is voor de virtuele machine ontvangen door de fysieke netwerkadapter (met behulp van de fysieke functie) die aanwezig is in het hostbesturingssysteem. Dit pakket wordt afgehandeld door de NDIS-drivermodule (Network Driver Interface Specification for NICs). Het pakket wordt vervolgens geleverd aan de Hyper-V-switch, die het pakket verwerkt (zoals routering, VLAN-filtering) en het pakket doorstuurt naar de beoogde VM via VMBus, zoals weergegeven in Afbeelding-1. Het omgekeerde pad wordt gevolgd wanneer de VM een pakket moet verzenden.
Met SR-IOV kan de VM een virtuele functie (VF) gebruiken om pakketten rechtstreeks naar de fysieke netwerkadapter te verzenden en te ontvangen, waarbij het traditionele pad volledig wordt omzeild, zoals wordt weergegeven in afbeelding 1. Dit verhoogt niet alleen de netwerk-I/O, maar vermindert ook de overhead op de CPU van de hostmachine.
Figuur 1: Datapad met en zonder SR-IOV
Live migratie en SR-IOV
In de bètaversie van Windows Server 2012 kan Live Migration worden uitgevoerd met SR-IOV die wordt gebruikt door een VM. Als de bron- en doelsystemen SR-IOV ondersteunen en het doel een beschikbare VF heeft, gebruikt de VM de virtuele functie. Als dit niet het geval is, keert de VM terug naar het traditionele pad (VM-Bus).
Elke SR-IOV-compatibele netwerkadapter biedt een vast aantal virtuele functies, die kunnen worden verkregen door de PowerShell-opdracht "Get-NetAdapterSriov" uit te voeren.
Prestatieanalyse
We hebben een aantal tests uitgevoerd in ons lab om de prestaties met en zonder SR-IOV te vergelijken. De testomgeving bestaat uit één testserver (waarop de tests worden uitgevoerd) en één bestandsserver. De testserver is een Dell PowerEdge™ R710 II met een Intel® X520 10GB Ethernet-adapter en Windows Server 2012 Beta OS. De bestandsserver host meerdere SMB-shares en is verbonden met de testserver via een netwerk van 10 GB via een Dell PowerConnect™ 8024 switch.
We hebben de prestatiegegevens vastgelegd in termen van de CPU die wordt gebruikt door de DPC's (Deferred Procedure Call) die zijn gepland door de verschillende drivermodules die deelnemen aan de overdracht van netwerkgegevens. Deze data werden vastgelegd in zowel het gast- als het hostbesturingssysteem, zoals beschreven in de volgende scenario's. De testserver heeft 4 identieke virtuele machines met Windows Server 2012 Beta als gastbesturingssysteem. De 4 VM's zijn via een virtuele switch verbonden met het 10GB netwerk. Deze testconfiguratie wordt weergegeven in afbeelding 2.
Figuur 2: Testconfiguratie
Voordat we de prestatiegegevens laten zien, is het belangrijk om een zeer kritische parameter te introduceren die voor deze tests wordt gebruikt. In het
Microsoft Windows besturingssysteem bestaat er een systeemmechanisme genaamd Deferred Procedure Call (DPC), dat taken met hoge prioriteit (bijv. een
Onderbreek handler) om vereiste taken met een lagere prioriteit uit te stellen voor latere uitvoering. Hierdoor kunnen apparaatstuurprogramma's en andere consumenten van gebeurtenissen op laag niveau het deel met hoge prioriteit van hun verwerking snel uitvoeren en niet-kritieke extra verwerking plannen voor uitvoering met een lagere prioriteit.
Scenario 1 – Prestatieresultaten in virtuele machine (gastbesturingssysteem):
We hebben vier virtuele machines (VM) gebruikt voor dit scenario (VM 1 tot en met VM 4). We hebben SR-IOV ingeschakeld op VM 1 en VM 2 (door de optie "SR-IOV inschakelen" aan te vinken in VM-instellingen) en SR-IOV uitgeschakeld op VM 3 en VM 4 (door dezelfde optie uit te schakelen). Daarom gebruiken VM 1 en VM 2 de virtuele functie (weergegeven door de Intel adapter), terwijl VM 3 en VM 4 het synthetische pad (VMBus) gebruiken voor netwerkcommunicatie, zoals weergegeven in afbeelding 2.
We zijn begonnen met het kopiëren van data (van 20 GB) van één SMB-share naar de VM's en hebben de CPU-gebruikslogboeken van het systeem vastgelegd in het gastbesturingssysteem.
Figuur 3: DPC CPU-gebruik in virtuele machine
In afbeelding 3 verwijst SR-IOV naar het gemiddelde DPC CPU-gebruik in VM-1 en VM-2 en niet-SR-IOV verwijst naar het gemiddelde DPC CPU-gebruik in VM-3 en VM-4. Als we naar de grafiek kijken, zien we dat er niet veel verschil is in het CPU-gebruik tussen de twee gevallen, maar we hebben nog geen rekening gehouden met het CPU-gebruik in de hostmachine.
Scenario 2 – Prestatieresultaat in hostcomputer (hostbesturingssysteem):
We hebben voor dit scenario één virtuele machine gebruikt. We zijn begonnen met het kopiëren van data (van grootte 20 GB) van de SMB-share naar de VM en legden het DPC CPU-gebruik vast van 2 modules, NDIS en VMBUS, die worden gebruikt in netwerk-I/O.
Figuur 4: DPC CPU-gebruik op hostcomputer
De resultaten worden weergegeven in afbeelding 4. Zoals verwacht is er een enorm verschil in het CPU-gebruik tussen de twee cases (SR-IOV en Non-SR-IOV). Het CPU-gebruik is in de orde van grootte van 102 in het geval van SR-IOV, en van de orde van grootte 103 - 104 in het geval van niet-SR-IOV. Dit komt vooral omdat, in het geval van SR-IOV, de virtuele machine rechtstreeks communiceert met de fysieke NIC via de virtuele functie. Daarom worden de CPU-cycli van de host niet gebruikt voor het verwerken van netwerkpakketten. In het geval van niet-SR-IOV (zoals weergegeven in afbeelding 1) communiceert het gastbesturingssysteem met het hostbesturingssysteem via de VM-bus, die op zijn beurt de pakketten verwerkt en verzendt via de fysieke NIC. Vandaar dat modules zoals VM Bus en NDIS veel worden gebruikt.
Bij het berekenen van het totale CPU-gebruik zien we dat het CPU-gebruik tijdens netwerk-I/O veel lager is bij gebruik van SR-IOV. Daarom helpt Windows Server 2012 Beta met SR-IOV ingeschakeld klanten de CPU-overhead tijdens netwerk-I/O te verminderen en daardoor de algehele systeemprestaties te verbeteren.
SR-IOV configureren met PowerShell
U kunt de volgende PowerShell-opdrachten gebruiken om een nieuwe virtuele switch te maken met SR-IOV ingeschakeld en de virtuele switch te koppelen aan de virtuele netwerkadapter van een bestaande virtuele machine.
OPMERKING: Voordat u de volgende opdrachten uitvoert, moeten de volgende opties worden ingeschakeld in het BIOS
- Virtualisatietechnologie
- SR-IOV Global Enable
(Ervan uitgaande dat één netwerkadapter (Intel X520) is aangesloten)
$NetAdap = NetAdapter krijgen | Where-Object { $_. Status -eq "Up"}
(De -EnableIov switch wordt gebruikt om SR-IOV in de virtuele switch in te schakelen)
New-VMSwitch -Name "SRIOV switch" -NetAdapterName $NetAdap.Name -AllowManagementOS $True -Notes "SRIOV Switch on X520" -EnableIov $True
$VMSw = Get-VMSwitch
Een nieuwe netwerkadapter toevoegen aan VM-1 en deze aansluiten op de virtuele switch.
Add-VMNetworkAdapter -SwitchName $VMSw.Name -VMName VM-1 -Name "SRIOV Adapter"
OPMERKING:Om deze opdracht te laten werken, moet de VM worden uitgeschakeld)
U kunt ook een reeds bestaande VM-netwerkadapter gebruiken met behulp van de volgende opdrachten)
$VMNet = Get-VMNetworkAdapter -VMName VM-1
Connect-VMNetworkAdapter -VMName VM-1 -SwitchName $VMSw.Name -Naam $VMNet.Name
Elke VM-netwerkadapter heeft twee eigenschappen, IovWeight en VmqWeight, die overeenkomen met respectievelijk SR-IOV en VMQ. Door deze gewichten aan te passen kunt u de functies in- of uitschakelen.