Considerazioni sulle macchine virtuali Linux
Per le macchine virtuali Linux e BSD è necessario fare alcune considerazioni aggiuntive rispetto alle macchine virtuali Windows in Hyper-V.
La prima considerazione riguarda la presenza di Integration Services o il fatto che la macchina virtuale sia in esecuzione solo su hardware emulato senza riconoscimento dei dati. Una tabella delle versioni Linux e BSD che includono Integration Services predefiniti o scaricabili è disponibile in Macchine virtuali Linux e FreeBSD supportate per Hyper-V in Windows. Queste pagine contengono griglie delle funzionalità Hyper-V disponibili per le versioni di distribuzione Linux e note su tali funzionalità, ove applicabile.
Anche quando il guest esegue Integration Services, può essere configurato con hardware legacy che non offre le migliori prestazioni. Ad esempio, è possibile configurare e usare una scheda Ethernet virtuale per il guest anziché usare una scheda di rete legacy. Con Windows Server 2016 sono disponibili anche reti avanzate come SR-IOV.
Prestazioni di rete Linux
Per impostazione predefinita Linux abilita l'accelerazione hardware e l'offload. Se vRSS è abilitato nelle proprietà di una scheda di interfaccia di rete sull'host e il guest Linux ha la capacità di usare vRSS, la funzionalità verrà abilitata. In PowerShell questo stesso parametro può essere modificato con il comando EnableNetAdapterRSS
.
Analogamente, la funzionalità VMMQ (Virtual Switch RSS) può essere abilitata nella scheda di interfaccia di rete fisica usata dalla scheda Proprietà>Configura...>Avanzate guest > impostando commutatore virtuale RSS su Abilitato o abilitando VMMQ in Powershell in base alla procedura seguente:
Set-VMNetworkAdapter -VMName **$VMName** -VmmqEnabled $True
Nel guest è possibile eseguire un'ulteriore regolazione del TCP aumentando i limiti. Per ottenere prestazioni ottimali, la distribuzione del carico di lavoro su più CPU e la presenza di carichi di lavoro profondi producono la velocità effettiva migliore, poiché i carichi di lavoro virtualizzati avranno una latenza più elevata rispetto a quelli "bare metal".
Alcuni esempi di parametri di ottimizzazione utili nei benchmark di rete includono:
net.core.netdev_max_backlog = 30000
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_wmem = 4096 12582912 33554432
net.ipv4.tcp_rmem = 4096 12582912 33554432
net.ipv4.tcp_max_syn_backlog = 80960
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
net.ipv4.tcp_abort_on_overflow = 1
Uno strumento utile per i microbenchmark di rete è ntttcp, disponibile sia su Linux che su Windows. La versione di Linux è open source e disponibile su ntttcp-for-linux in github.com. La versione di Windows è disponibile nell'area download. Quando si ottimizzano i carichi di lavoro, è consigliabile usare il maggior numero di flussi necessari per ottenere la velocità effettiva ottimale. Usando ntttcp per modellare il traffico, il parametro -P
imposta il numero di connessioni parallele usate.
Prestazioni di archiviazione Linux
Alcune procedure consigliate, tra cui le seguenti, sono elencate in Procedure consigliate per l'esecuzione di Linux in Hyper-V. Il kernel Linux dispone di diversi scheduler I/O per riordinare le richieste con algoritmi diversi. NOOP è una coda first-in first-out che passa la decisione di pianificazione all'hypervisor. È consigliabile usare NOOP come scheduler quando si esegue una macchina virtuale Linux in Hyper-V. Per modificare lo scheduler di un dispositivo specifico, nella configurazione del caricatore di avvio (/etc/grub.conf, ad esempio), aggiungere elevator=noop
ai parametri del kernel e poi riavviare.
Analogamente a quanto accade nella rete, le prestazioni del guest Linux con l'archiviazione traggono il massimo vantaggio da più code con una profondità sufficiente a tenere occupato l'host. Il microbenchmarking delle prestazioni di archiviazione è probabilmente migliore con lo strumento di benchmark fio con il motore libaio.