Det här inlägget skrevs ursprungligen av Abhijit Khande & Vineeth V Acharya från DELL Windows Engineering Team.
Kommentarer är välkomna! Kontakta WinServerBlogs@dell.com om du vill föreslå ett ämne eller lämna andra kommentarer.
Med operativsystemet Microsoft® Windows Server® 2012 Beta har Microsoft introducerat stöd för ett antal funktioner inom nätverksområdet. En sådan viktig och intressant egenskap är
I/O-virtualisering med en rot (SR-IOV), som gör det möjligt för virtuella maskiner att dela en enda PCI-e-enhet. Det här inlägget ger en grundläggande översikt över SR-IOV i Windows Server 2012 Beta och hur det drastiskt minskar CPU-användningen i en virtualiserad miljö under nätverks-I/O.
SR-IOV-gränssnittet är ett tillägg till PCI Express (PCIe)-specifikationen. SR-IOV gör det möjligt för en enda PCIe-enhet, t.ex. ett nätverkskort, att tillhandahålla flera lätta hårdvaruytor på PCI-bussen och separat åtkomst till dess resurser bland de olika instanserna. Det uppnås genom användning av flera virtuella funktioner (VF) utöver den (vanliga) fysiska funktionen (PF). Eftersom både PCIe-enheten och plattformen är maskinvaruberoende måste de ha stöd för den här funktionen.
Traditionellt tas ett paket som är avsett för den virtuella datorn emot av det fysiska nätverkskortet (med fysisk funktion) som finns i värdoperativsystemet. Det här paketet hanteras av NDIS-drivrutinsmodulen (Network Driver Interface Specification for NICs). Paketet tillhandahålls sedan till Hyper-V-växeln, som bearbetar paketet (till exempel routning, VLAN-filtrering) och vidarebefordrar paketet till den avsedda virtuella datorn via VMBus, som du ser i bild 1. Den omvända sökvägen följs när den virtuella datorn måste skicka ett paket.
Med SR-IOV kan den virtuella maskinen använda en virtuell funktion (VF) för att skicka och ta emot paket direkt till det fysiska nätverkskortet och kringgå den traditionella sökvägen helt som visas i bild 1. Detta ökar inte bara nätverkets I/O utan minskar även omkostnaderna för värddatorns CPU.
Figur 1: Datasökväg med och utan SR-IOV
Live Migration och SR-IOV
I Windows Server 2012 Beta kan direktmigrering utföras med SR-IOV som används av en virtuell dator. Om käll- och målsystemen stöder SR-IOV och målet har en tillgänglig VF använder den virtuella datorn den virtuella funktionen. Annars återgår den virtuella datorn till den traditionella sökvägen (VM-Bus).
Varje SR-IOV-kompatibelt nätverkskort exponerar ett fast antal virtuella funktioner, som kan erhållas genom att köra PowerShell-kommandot "Get-NetAdapterSriov".
Prestandaanalys
Vi utförde några tester i vårt labb för att jämföra prestandan med och utan SR-IOV. Testmiljön består av en testserver (där testerna körs) och en filserver. Testservern är en Dell PowerEdge™ R710 II med en Intel® X520 10 GB Ethernet-adapter och Windows Server 2012 Beta OS. Filservern är värd för flera SMB-resurser och är ansluten till testservern via ett 10 GB-nätverk via en Dell PowerConnect™ 8024-switch.
Vi samlade in prestandadata i termer av CPU som används av DPC:erna (Deferred Procedure Call) som schemalagts av de olika drivrutinsmodulerna som deltar i nätverksdataöverföringen. Dessa data samlades in både i gäst- och värdoperativsystemet, enligt beskrivningen i följande scenarier. Testservern har fyra identiska virtuella datorer med Windows Server 2012 Beta som gästoperativsystem. De fyra VM:arna är anslutna till 10 GB-nätverket via en virtuell växel. Denna testkonfiguration visas i figur 2.
Figur 2: Testkonfiguration
Innan vi visar prestandadata är det viktigt att introducera en mycket kritisk parameter som används för denna testning. I den
Microsoft Windows Det finns en systemmekanism som kallas Deferred Procedure Call (DPC), som gör det möjligt att utföra uppgifter med hög prioritet (t.ex. en
Avbrottshanterare) för att skjuta upp obligatoriska men lägre prioriterade uppgifter för senare utförande. Detta gör att enhetsdrivrutiner och andra händelsekonsumenter på låg nivå kan utföra den högprioriterade delen av bearbetningen snabbt och schemalägga icke-kritisk ytterligare bearbetning för körning med lägre prioritet.
Scenario 1 – Prestanda resulterar i virtuell dator (gästoperativsystem):
Vi använde fyra virtuella datorer (VM) för det här scenariot (VM 1 till VM 4). Vi har aktiverat SR-IOV på VM 1 och VM 2 (genom att markera alternativet "Enable SR-IOV" i VM-inställningarna) och inaktiverat SR-IOV på VM 3 och VM 4 (genom att avmarkera samma alternativ). Därför använder VM 1 och VM 2 den virtuella funktionen (som exponeras av Intel-adaptern), medan VM 3 och VM 4 använder den syntetiska sökvägen (VMBus) för all nätverkskommunikation, som visas i bild 2.
Vi började kopiera data (med storleken 20 GB) från en enda SMB-resurs till de virtuella datorerna och samlade in systemets CPU-användningsloggar i gästoperativsystemet.
Figur 3: DPC-CPU-användning i virtuella maskiner
I bild 3 hänvisar SR-IOV till den genomsnittliga DPC-CPU-användningen i VM-1 och VM-2 och icke-SR-IOV hänvisar till den genomsnittliga DPC-CPU-användningen i VM-3 och VM-4. Om vi tittar på diagrammet ser vi att det inte är så stor skillnad i CPU-användningen mellan de två fallen, men vi har inte tagit hänsyn till CPU-användningen i värddatorn ännu.
Scenario 2 – Prestandaresultat på värddatorn (värdoperativsystemet):
Vi använde en virtuell dator för det här scenariot. Vi började kopiera data (med storleken 20 GB) från SMB-resursen till den virtuella datorn och samlade in DPC CPU-användningen av 2 moduler, NDIS och VMBUS, som används i nätverks-I/O.
Figur 4: DPC-CPU-användning i värddatorn
Resultaten visas i bild 4. Som förväntat finns det en stor skillnad i CPU-användning mellan de två fallen (SR-IOV och icke-SR-IOV). CPU-användningen är i storleksordningen 102 för SR-IOV och i storleksordningen 103 - 104 för icke-SR-IOV. Detta beror främst på att den virtuella maskinen, när det gäller SR-IOV, kommunicerar direkt med det fysiska nätverkskortet via den virtuella funktionen. Därför används inte värdens CPU-cykler för bearbetning av nätverkspaket. När det gäller icke-SR-IOV (som visas i bild 1) kommunicerar gästoperativsystemet med värdoperativsystemet via VM-bussen, som i sin tur bearbetar paketen och skickar dem via det fysiska nätverkskortet. Därför används moduler som VM Bus och NDIS i stor utsträckning.
Vid beräkning av den totala CPU-användningen ser vi att CPU-användningen under nätverks-I/O är mycket mindre när SR-IOV används. Därför kan Windows Server 2012 Beta med SR-IOV aktiverat hjälpa kunder att minska CPU-overhead under nätverks-I/O och därmed förbättra den totala systemprestandan.
Konfigurera SR-IOV med PowerShell
Du kan använda följande PowerShell-kommandon för att skapa en ny virtuell växel med SR-IOV aktiverat och koppla den virtuella växeln till det virtuella nätverkskortet för en befintlig virtuell dator.
OBSERVERA: Innan du kör följande kommandon bör följande alternativ aktiveras i BIOS
- Virtualiseringsteknik
- SR-IOV Global aktivera
(Förutsatt att ett enda nätverkskort (Intel X520) är anslutet)
$NetAdap = Get-NetAdapter | Where-Object { $_. Status -eq "Up"}(Växeln -EnableIov används för att aktivera SR-IOV i den virtuella växeln)
New-VMSwitch -Name "SRIOV Switch" -NetAdapterName $NetAdap.Name -AllowManagementOS $True -Notes "SRIOV Switch on X520" -EnableIov $True
$VMSw = Get-VMSwitch
Lägga till ett nytt nätverkskort till VM-1 och ansluta det till den virtuella växeln.
Add-VMNetworkAdapter -SwitchName $VMSw.Name -VMName VM-1 -Name "SRIOV Adapter"
OBS:För att det här kommandot ska fungera måste den virtuella datorn vara avstängd)
Du kan också använda ett redan befintligt virtuellt nätverkskort med hjälp av följande kommandon)
$VMNet = Get-VMNetworkAdapter -VMName VM-1
Connect-VMNetworkAdapter -VMName VM-1 -SwitchName $VMSw.Name -Name $VMNet.Name
Varje VM-nätverkskort har två egenskaper, IovWeight & VmqWeight, som motsvarar SR-IOV respektive VMQ. Genom att justera dessa vikter aktiveras eller inaktiveras funktionerna.