Questo post è stato originariamente scritto da Abhijit Khande e Vineeth V Acharya del team di progettazione di DELL Windows.
I commenti sono i benvenuti! Per suggerire un argomento o fare altri commenti, contattare WinServerBlogs@dell.com.
Con il sistema operativo Microsoft® Windows Server® 2012 Beta, Microsoft ha introdotto il supporto per una serie di funzionalità nello spazio di rete. Una di queste caratteristiche significative e interessanti è
Virtualizzazione I/O single root (SR-IOV), che consente alle macchine virtuali di condividere un singolo dispositivo PCI-e. Questo post fornisce una panoramica di base di SR-IOV in Windows Server 2012 Beta e di come riduce drasticamente l'utilizzo della CPU in un ambiente virtualizzato durante l'I/O di rete.
L'interfaccia SR-IOV è un estensione della specifica PCI Express (PCIe). SR-IOV consente a un singolo dispositivo PCIe, ad esempio una scheda di rete, di fornire più superfici hardware leggere sul bus PCI e di separare l'accesso alle proprie risorse tra le varie istanze. Si ottiene mediante l'uso di più funzioni virtuali (VF) in aggiunta alla (consueta) funzione fisica (PF). Poiché dipende dall'hardware, il dispositivo PCIe e la piattaforma devono entrambi supportare questa funzione.
Tradizionalmente, un pacchetto destinato alla macchina virtuale viene ricevuto dalla scheda di rete fisica (utilizzando la funzione fisica) presente nel sistema operativo host. Questo pacchetto viene gestito dal modulo driver NDIS (Network Driver Interface Specification for NICs). Il pacchetto viene quindi fornito allo switch Hyper-V, che elabora il pacchetto (ad esempio il routing, il filtraggio VLAN) e lo inoltra alla VM destinata tramite VMBus, come illustrato nella Figura 1. Il percorso inverso verrà seguito quando la VM deve inviare un pacchetto.
Con SR-IOV, la VM può utilizzare una funzione virtuale (VF) per inviare e ricevere pacchetti direttamente alla scheda di rete fisica ignorando completamente il percorso tradizionale, come mostrato nella Figura 1. Ciò non solo aumenta l'I/O di rete, ma riduce anche l'overhead sulla CPU del computer host.
Figura 1: Percorso dati con e senza SR-IOV
Live Migration e SR-IOV
In Windows Server 2012 Beta, Live Migration può essere eseguito con SR-IOV utilizzato da una macchina virtuale. Se i sistemi di origine e di destinazione supportano SR-IOV e la destinazione ha un VF disponibile, la VM utilizzerà la funzione virtuale. In caso contrario, la VM tornerà al percorso tradizionale (VM-Bus).
Ogni scheda di rete compatibile con SR-IOV espone un numero fisso di funzioni virtuali, che è possibile ottenere eseguendo il comando PowerShell "Get-NetAdapterSriov".
Analisi delle prestazioni
Abbiamo eseguito alcuni test nel nostro laboratorio per confrontare le prestazioni con e senza SR-IOV. L'ambiente di test è costituito da un server di test (su cui vengono eseguiti i test) e un file server. Il server di prova è un Dell PowerEdge™ R710 II con scheda Ethernet Intel® X520 da 10 GB e sistema operativo Windows Server 2012 Beta. Il file server ospita più condivisioni SMB ed è connesso al server di test tramite una rete da 10 GB tramite uno switch Dell PowerConnect™ 8024.
Abbiamo acquisito i dati sulle prestazioni in termini di CPU utilizzata dai DPC (Deferred Procedure Call) pianificati dai diversi moduli driver che prendono parte al trasferimento dei dati di rete. Questi dati sono stati acquisiti sia nel sistema operativo guest che in quello host, come descritto negli scenari seguenti. Il server di test dispone di 4 macchine virtuali identiche con Windows Server 2012 Beta come sistema operativo guest. Le 4 VM sono collegate alla rete da 10 GB tramite uno switch virtuale. Questa configurazione di test è illustrata nella Figura 2.
Figura 2: Configurazione
del test Prima di mostrare i dati sulle prestazioni, è importante introdurre un parametro molto critico utilizzato per questo test. Nel
Microsoft Windows Sistema operativo esiste un meccanismo di sistema chiamato Deferred Procedure Call (DPC), che consente attività ad alta priorità (ad esempio un
Gestore interrupt) per rinviare le attività richieste, ma con priorità inferiore, per un'esecuzione successiva. Ciò consente ai driver di dispositivo e ad altri consumer di eventi di basso livello di eseguire rapidamente la parte ad alta priorità dell'elaborazione e pianificare l'elaborazione aggiuntiva non critica per l'esecuzione con una priorità inferiore.
Scenario 1 – Risultati delle prestazioni nella macchina virtuale (sistema operativo guest):
Per questo scenario sono state utilizzate quattro macchine virtuali (VM) (da VM 1 a VM 4). Abbiamo abilitato SR-IOV sulla VM 1 e VM 2 (selezionando l'opzione "Abilita SR-IOV" nelle impostazioni della VM) e disabilitato SR-IOV sulla VM 3 e VM 4 (deselezionando la stessa opzione). Pertanto, la VM 1 e la VM 2 utilizzeranno la funzione virtuale (esposta dalla scheda Intel), mentre la VM 3 e la VM 4 utilizzeranno il percorso sintetico (VMBus) per qualsiasi comunicazione di rete, come illustrato nella Figura 2.
Abbiamo iniziato a copiare i dati (delle dimensioni di 20 GB) da una singola condivisione SMB alle macchine virtuali e abbiamo acquisito i registri di utilizzo della CPU di sistema nel sistema operativo guest.
Figura 3: Utilizzo della CPU DPC nella macchina
virtuale Nella Figura 3, SR-IOV si riferisce all'utilizzo medio della CPU DPC in VM-1 e VM-2 e Non-SR-IOV si riferisce all'utilizzo medio della CPU DPC in VM-3 e VM-4. Se guardiamo il grafico, vediamo che non c'è molta differenza nell'utilizzo della CPU tra i due casi, ma non abbiamo ancora preso in considerazione l'utilizzo della CPU nel computer host.
Scenario 2 – Risultato delle prestazioni nel computer host (sistema operativo host):
Per questo scenario abbiamo utilizzato una macchina virtuale. Abbiamo iniziato a copiare i dati (di dimensioni di 20 GB) dalla condivisione SMB alla VM e abbiamo acquisito l'utilizzo della CPU DPC di 2 moduli, NDIS e VMBUS, utilizzati nell'I/O di rete.
Figura 4: Utilizzo della CPU DPC nel computer
host I risultati sono illustrati nella Figura 4. Come previsto, esiste una grande differenza nell'utilizzo della CPU tra i due casi (SR-IOV e Non-SR-IOV). L'utilizzo della CPU è dell'ordine di 102 nel caso di SR-IOV e dell'ordine di 103 - 104 nel caso di Non-SR-IOV. Ciò è dovuto principalmente al fatto che, nel caso di SR-IOV, la macchina virtuale comunica direttamente con la scheda di rete fisica tramite la funzione virtuale. Di conseguenza, i cicli della CPU dell host non vengono utilizzati per l'elaborazione dei pacchetti di rete. Nel caso di non-SR-IOV (come mostrato nella Figura 1), il sistema operativo guest comunica con il sistema operativo host tramite il bus VM, che a sua volta elabora i pacchetti e li invia tramite la scheda di rete fisica. Pertanto, moduli come VM Bus e NDIS sono ampiamente utilizzati.
Nel calcolo dell'utilizzo totale della CPU, si osserva che l'utilizzo della CPU durante l'I/O di rete è molto inferiore quando si utilizza SR-IOV. Pertanto, Windows Server 2012 Beta con SR-IOV abilitato aiuterà i clienti a ridurre il sovraccarico della CPU durante l'I/O di rete e quindi a migliorare le prestazioni complessive del sistema.
Configurazione di SR-IOV tramite PowerShell
È possibile utilizzare i seguenti comandi PowerShell per creare un nuovo commutatore virtuale con SR-IOV abilitato e collegare il commutatore virtuale alla scheda di rete virtuale di una macchina virtuale esistente.
NOTA: Prima di eseguire i seguenti comandi, è necessario abilitare le seguenti opzioni nel BIOS
- Tecnologia di virtualizzazione
- Abilitazione globale SR-IOV
(Supponendo che sia collegata una singola scheda di rete (Intel X520))
$NetAdap = Get-NetAdapter | dove-oggetto { $_. Status -eq "Up"}
(Lo switch -EnableIov viene utilizzato per abilitare SR-IOV nello switch virtuale)
New-VMSwitch -Name "SRIOV Switch" -NetAdapterName $NetAdap.Name -AllowManagementOS $True -Notes "SRIOV Switch on X520" -EnableIov $True
$VMSw = Get-VMSwitch
Aggiunta di una nuova scheda di rete a VM-1 e relativa connessione allo switch virtuale.
Add-VMNetworkAdapter -SwitchName $VMSw.Name -VMName VM-1 -Name "SRIOV Adapter"
NOTA:affinché questo comando funzioni, la VM deve essere disattivata)
È inoltre possibile utilizzare una scheda di rete VM già esistente utilizzando i seguenti comandi)
$VMNet = Get-VMNetworkAdapter -VMName VM-1
Connect-VMNetworkAdapter -VMName VM-1 -SwitchName $VMSw.Name -Name $VMNet.Name
Ogni scheda di rete VM ha due proprietà, IovWeight e VmqWeight, che corrispondono rispettivamente a SR-IOV e VMQ. La regolazione di questi pesi abilita o disabilita le funzioni.