หลายครั้งที่ฉันเจอสถานการณ์ที่ไฟล์ถูกคัดลอกช้ากว่ามากจาก/ไปยังเครื่องเสมือนบนโฮสต์ Hyper-V ที่ใช้ Windows Server 2019 มากกว่าใน VM ของการกำหนดค่าเดียวกันบนโฮสต์ที่ใช้ Windows Server 2016 ในการทดสอบบางอย่าง การอ่าน / ความเร็วในการเขียนบนเครือข่ายไปยัง VM บน Windows Server 2019 นั้นต่ำกว่าใน WS2016 เกือบสามเท่า (การคัดลอกผ่าน SMB ทดสอบ SSH/SCP แล้ว) ในบทความนี้ ฉันพยายามอธิบายวิธีการต่างๆ หลายวิธีในการปรับปรุงประสิทธิภาพเครือข่ายของเครื่องเสมือน Hyper-V ที่ทำงานบน Windows Server 2019 (และ Windows 10 และ 11 บิลด์ล่าสุด)
รับ Segment Coalescing (RSC) ใน Hyper-V vSwitch
ก่อนอื่น คุณควรสังเกต Receive Segment Coalescing (RSC) คุณลักษณะที่ปรากฏใน Hyper-V บน Windows Server 2019/2022 (และ Windows 10 1809+) การรวมกลุ่มการรับจะใช้ที่ระดับสวิตช์เสมือน (vSwitch) RSC ช่วยลดภาระของ CPU และเพิ่มทรูพุตของเครือข่ายโดยการรวมกลุ่ม TCP หลายส่วนเป็นกลุ่มที่ใหญ่ขึ้น ประสิทธิภาพของเครือข่ายได้รับการปรับปรุงเนื่องจากกลุ่มขนาดใหญ่ได้รับการประมวลผลเร็วกว่ากลุ่มที่เล็กกว่าจำนวนมาก
ใน Hyper-V เวอร์ชันก่อนหน้า (Windows Server 2016/2012R2) เฉพาะโหมด Receive Segment Coalescing ของฮาร์ดแวร์เท่านั้นที่ได้รับการสนับสนุนที่ระดับ NICหากเปิดใช้งานการสนับสนุน RSC อาจส่งผลให้เครือข่ายล่าช้าเป็นพิเศษในการกำหนดค่าฮาร์ดแวร์บางอย่าง
ปัญหานี้เกิดขึ้นใน Windows Server 2019 เวอร์ชันเต็ม GUI และใน Windows Hyper-V Server ฟรีตามค่าเริ่มต้น RSC จะเปิดใช้งานสำหรับ vSwitches ภายนอกทั้งหมดบน Windows Server 2019
คุณสามารถตรวจสอบว่าเปิดใช้งาน RSC สำหรับสวิตช์เสมือนโดยใช้คำสั่ง:
Get-VMSwitch | Select-Object *RSC*
คุณสามารถปิดใช้งานโดยใช้ RSC สำหรับการรับส่งข้อมูล IPv4 บนอะแดปเตอร์เครือข่ายไคลเอ็นต์โดยใช้คำสั่งต่อไปนี้:
Disable-NetAdapterRsc -Name "Ethernet" -IPv4
ตรวจสอบว่าความเร็วในการคัดลอกใน Hyper-V VM เพิ่มขึ้นหลังจากปิดใช้งาน RSC หรือไม่ หากความเร็วเครือข่ายดีขึ้น คุณสามารถปิดใช้งาน RSC บนสวิตช์เสมือนที่ VM เชื่อมต่ออยู่ได้
คุณสามารถตรวจสอบปริมาณงานเครือข่ายของคุณโดยใช้เครื่องมือ iperfหากต้องการปิดใช้งานซอฟต์แวร์ RSC สำหรับสวิตช์เสมือนเฉพาะ ให้เรียกใช้คำสั่ง:
Set-VMSwitch -Name vSwitchName -EnableSoftwareRsc $false
คุณสามารถเปิด/ปิดใช้งาน RSC ได้ทันที ซึ่งจะไม่ส่งผลต่อการเชื่อมต่อที่ใช้งานอยู่
หรือคุณสามารถปิดการใช้งาน RSC บนโฮสต์ Windows ของคุณได้อย่างสมบูรณ์:
netsh int tcp set global rsc=disabled
โหมด Virtual Machine Queue (VMQ) ในไดรเวอร์อะแดปเตอร์เครือข่าย
ในบางกรณี ถ้า VMQ (Virtual Machine Queue) ถูกเปิดใช้งานในโปรแกรมควบคุมอะแดปเตอร์เครือข่ายของโฮสต์ Hyper-V ที่มีอยู่จริง ซึ่งอาจส่งผลให้ประสิทธิภาพเครือข่ายต่ำในเครื่องเสมือน Hyper-V VMQ เป็นคุณลักษณะของฮาร์ดแวร์ และหากฮาร์ดแวร์ของคุณไม่รองรับแต่เปิดใช้งานในไดรเวอร์ อาจส่งผลให้แพ็กเก็ตสูญหายและเพิ่มเวลาแฝงของเครือข่าย ปัญหาเป็นเรื่องปกติของอะแดปเตอร์เครือข่าย Broadcom Gigabit และเกิดขึ้นใน Hyper-V ทุกรุ่น (Windows Server 2012 R2/2559/2019)
VMQ ได้รับการออกแบบมาเพื่อปรับปรุงประสิทธิภาพของเครือข่ายโดยการส่งต่อแพ็กเก็ตโดยตรงจากอะแดปเตอร์เครือข่ายจริงไปยังเครื่องเสมือนคุณสามารถปิดใช้งาน VMQ ได้ในคุณสมบัติของไดรเวอร์อะแดปเตอร์เครือข่ายของคุณ
หรือคุณสามารถแสดงรายการอะแดปเตอร์เครือข่ายที่รองรับ VMQ และสถานะโดยใช้ PowerShell:
Get-NetAdapterVmq
ในการปิดใช้งาน VMQ สำหรับ NIC เฉพาะ ให้เรียกใช้คำสั่งด้านล่าง (อะแดปเตอร์เครือข่ายจะไม่สามารถใช้ได้เป็นเวลาสองสามวินาที):
Set-NetAdapterVmq -Name “NICName” -Enabled $False
หลังจากปิดใช้งาน VMQ จะเป็นการดีกว่าที่จะรีสตาร์ทโฮสต์และตรวจสอบประสิทธิภาพของเครือข่าย
ตรวจสอบให้แน่ใจว่านโยบายการจำกัดแบนด์วิดท์ QoS ถูกปิดใช้งานใน Windowsปรับการตั้งค่า TCP ให้เหมาะสมสำหรับ Hyper-V บน Windows Server 2019
บันทึกการตั้งค่า TCP ปัจจุบันบนโฮสต์ Hyper-V ของคุณ และใช้การตั้งค่าใหม่ที่จะทำให้การตั้งค่า TCP ใน Windows Server 2019 ใกล้เคียงกับ Windows Server 2016
บันทึกการตั้งค่าปัจจุบัน:
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 หรือ Hyper-V 2019 เท่านั้น
ใช้การตั้งค่า NetTCP ใหม่สำหรับ LAN:
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CongestionProvider DCTCP
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -CwndRestart True
Set-NetTCPSetting -SettingName DatacenterCustom,Datacenter -ForceWS Disabled
สำหรับ WAN:
Set-NetTCPSetting -SettingName InternetCustom,Internet -CongestionProvider CTCP
Set-NetTCPSetting -SettingName InternetCustom,Internet -DelayedAckTimeoutMs 50
Set-NetTCPSetting -SettingName InternetCustom,Internet -ForceWS Disabled
ปิดใช้งานวิธีการเพิ่มประสิทธิภาพเครือข่าย RSS และ RSC ที่ระดับสแต็ก TCP:
netsh int tcp show global
netsh int tcp set global RSS=Disabled
netsh int tcp set global RSC=Disabled
หรือในระดับ NIC:
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
ปิดใช้งาน vRSS สำหรับ VM ทั้งหมด:
Get-VM | Set-VMNetworkAdapter -VrssEnabled $FALSE
ปิดการใช้งาน Large Send Offload (LSO) บน NIC: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
- Recv Segment Coalescing (IPv4/IPv6) =ปิดใช้งาน
- Large Send Offload V2 (IPv4/IPv6) =ปิดการใช้งาน
การตั้งค่าสแต็ก TCP เหล่านี้จะทำให้การตั้งค่าโปรโตคอลเครือข่าย Windows Server 2019 คล้ายกับการตั้งค่า Windows Server เวอร์ชันก่อนหน้า