Windows Server 2019'da Hyper-V VM'lerinde Zayıf Ağ Performansı


Dosyaların, Windows Server 2019 çalıştıran bir Hyper-V ana bilgisayarındaki sanal makinelerden/sanal makinelere, Windows Server 2016 çalıştıran bir ana bilgisayardaki aynı yapılandırmaya sahip bir VM'ye kıyasla çok daha yavaş kopyalandığı bir durumla birkaç kez karşılaştım. Windows Server 2019'da ağ üzerinden VM'ye yazma hızı, WS2016'dakinden neredeyse üç kat daha düşüktür (SMB, SSH/SCP üzerinden kopyalama test edilmiştir). Bu yazıda, Windows Server 2019 (ve en son Windows 10 ve 11 sürümleri) üzerinde çalışan Hyper-V sanal makinelerinin ağ performansını iyileştirmek için birkaç farklı yöntemi açıklamaya çalıştım.

Hyper-V vSwitch'te Segment Birleştirmeyi (RSC) Alın

Her şeyden önce, Windows Server 2019/2022'de (ve Windows 10 1809+) Hyper-V'de görünen Alım Segmenti Birleştirme (RSC) özelliğine dikkat etmelisiniz. Alma Segment Birleştirme, sanal anahtar düzeyinde (vSwitch) kullanılır. RSC, birden çok TCP segmentini daha büyük segmentlerde birleştirerek CPU yükünü azaltmaya ve ağ verimini artırmaya olanak tanır. Büyük segmentler birçok küçük segmentten daha hızlı işlendiği için ağ performansı iyileştirildi.

Önceki Hyper-V sürümlerinde (Windows Server 2016/2012R2), NIC düzeyinde yalnızca donanım Alma Segmenti Birleştirme modu destekleniyordu.

RSC desteği etkinleştirilirse, bazı donanım yapılandırmalarında fazladan ağ gecikmesine neden olabilir.

Sorun, hem Windows Server 2019 Tam GUI sürümlerinde hem de ücretsiz Windows Hyper-V Sunucusunda oluşur.

RSC, Windows Server 2019'daki tüm harici vSwitch'ler için varsayılan olarak etkindir.

Aşağıdaki komutu kullanarak sanal anahtarlar için RSC'nin etkinleştirilip etkinleştirilmediğini kontrol edebilirsiniz:

Get-VMSwitch | Select-Object *RSC*

Aşağıdaki komutu kullanarak istemci ağ bağdaştırıcısında IPv4 trafiği için RSC kullanımını devre dışı bırakabilirsiniz:

Disable-NetAdapterRsc -Name "Ethernet" -IPv4

RSC devre dışı bırakıldıktan sonra bir Hyper-V VM'deki kopyalama hızının artıp artmadığını kontrol edin. Ağ hızı iyileştiyse, VM'nin bağlı olduğu sanal anahtarda RSC'yi devre dışı bırakabilirsiniz.

Ağ veriminizi iperf aracını kullanarak kontrol edebilirsiniz.

Belirli bir sanal anahtar için RSC yazılımını devre dışı bırakmak üzere şu komutu çalıştırın:

Set-VMSwitch -Name vSwitchName -EnableSoftwareRsc $false

RSC'yi anında etkinleştirebilir/devre dışı bırakabilirsiniz, herhangi bir aktif bağlantıyı etkilemez.

Veya Windows ana bilgisayarınızda RSC'yi tamamen devre dışı bırakabilirsiniz:

netsh int tcp set global rsc=disabled

Ağ Adaptörü Sürücüsünde Sanal Makine Kuyruğu (VMQ) Modu

Bazı durumlarda, fiziksel bir Hyper-V ana bilgisayarının ağ bağdaştırıcı sürücüsünde VMQ (Sanal Makine Kuyruğu) etkinleştirilirse, bu, Hyper-V sanal makinelerinde düşük ağ performansına neden olabilir. VMQ bir donanım özelliğidir ve donanımınız tarafından desteklenmez ancak sürücüde etkinleştirilirse, paket kaybına ve artan ağ gecikmesine neden olabilir. Sorun, Broadcom Gigabit ağ bağdaştırıcılarına özgüdür ve tüm Hyper-V sürümlerinde (Windows Server 2012 R2/2016/2019) görülür.

VMQ, paketleri fiziksel bir ağ bağdaştırıcısından sanal makinelere doğrudan ileterek ağ performansını iyileştirmek için tasarlanmıştır.

Ağ bağdaştırıcı sürücünüzün özelliklerinde VMQ'yu devre dışı bırakabilirsiniz.

Veya PowerShell'i kullanarak VMQ destekli ağ bağdaştırıcılarının bir listesini ve durumlarını görüntüleyebilirsiniz:

Get-NetAdapterVmq

Belirli bir NIC için VMQ'yu devre dışı bırakmak üzere aşağıdaki komutu çalıştırın (ağ bağdaştırıcısı birkaç saniyeliğine kullanılamayacak):

Set-NetAdapterVmq -Name “NICName” -Enabled $False

VMQ'yu devre dışı bıraktıktan sonra ana bilgisayarı yeniden başlatmak ve ağ performansını kontrol etmek daha iyidir.

Windows'ta QoS bant genişliği sınırı ilkelerinin devre dışı bırakıldığından emin olun.

Windows Server 2019'da Hyper-V için TCP Ayarlarını Optimize Edin

Geçerli TCP ayarlarını Hyper-V sunucunuza kaydedin ve Windows Server 2019'daki TCP ayarlarını neredeyse Windows Server 2016'dakilere benzer hale getirecek yeni ayarları uygulayın.

Geçerli ayarları kaydedin:

Get-NetTCPSetting -SettingName Datacenter,DatacenterCustom,InternetCustom,Internet|select SettingName,CongestionProvider,CwndRestart,ForceWS|Export-csv c:\backup\ws2019_network_stack_settings_nettcp_backup.csv

Windows Server 2019 ve Windows 10 1709+'da varsayılan olarak TCP'nin CUBIC uygulaması kullanılır. Bu algoritma, yüksek gecikmeli yüksek hızlı ağlar için optimize edilmiştir (varsayılan olarak Linux çekirdeği 2.6.19 ve daha yeni sürümlerde de kullanılır).

Aşağıdaki ayarları yalnızca Windows Server 2019 veya Hyper-V 2019'da uygulayın.

LAN için yeni NetTCP ayarlarını uygulayın:

Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS Disabled

WAN için:

Set-NetTCPSetting -SettingName InternetCustom,Internet -CongestionProvider CTCP
Set-NetTCPSetting -SettingName InternetCustom,Internet -DelayedAckTimeoutMs 50
Set-NetTCPSetting -SettingName InternetCustom,Internet -ForceWS Disabled

TCP yığın düzeyinde ağ RSS ve RSC ağ optimizasyon yöntemlerini devre dışı bırakın:

netsh int tcp show global
netsh int tcp set global RSS=Disabled
netsh int tcp set global RSC=Disabled

veya NIC düzeyinde:

Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Recv Segment Coalescing (IPv4)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Recv Segment Coalescing (IPv6)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Receive Side Scaling" -DisplayValue "Disabled" -NoRestart

Tüm sanal makineler için vRSS'yi devre dışı bırakın:

Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSE

NIC'lerde Büyük Gönderme Boşaltma'yı (LSO) devre dışı bırakın:

Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Large Send Offload Version 2 (IPv4)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Set-NetAdapterAdvancedProperty -DisplayName "Large Send Offload Version 2 (IPv6)" -DisplayValue "Disabled" -NoRestart
Get-NetAdapter | Restart-NetAdapter

Bu seçenekleri, ağ bağdaştırıcı özelliklerinizin Gelişmiş sekmesinden de devre dışı bırakabilirsiniz:

  • Alım Segmenti Birleştirme (IPv4/IPv6)=Devre Dışı

  • Büyük Gönderme Boşaltma V2 (IPv4/IPv6)=Devre Dışı

Bu TCP yığını ayarları, Windows Server 2019 ağ protokolü ayarlarını önceki Windows Server sürümlerine benzer hale getirecektir.

İlgili makaleler