ประสิทธิภาพเครือข่ายแย่บน Hyper-V VMs ใน Windows Server 2019
หลายครั้งที่ฉันเจอสถานการณ์ที่ไฟล์ถูกคัดลอกจาก/ไปยังเครื่องเสมือนบนโฮสต์ 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
ก่อนอื่น คุณควรทราบคุณลักษณะ รับกลุ่มกลุ่ม (RSC) ที่ปรากฏใน Hyper-V บน Windows Server 2019/2022 (และ Windows 10 1809+) การรวมส่วนรับจะใช้ที่ระดับสวิตช์เสมือน (vSwitch) RSC ช่วยลดภาระของ CPU และเพิ่มทรูพุตของเครือข่ายโดยการรวม TCP หลายเซกเมนต์เข้าด้วยกันเป็นเซ็กเมนต์ที่ใหญ่ขึ้น ปรับปรุงประสิทธิภาพของเครือข่าย เนื่องจากส่วนขนาดใหญ่ได้รับการประมวลผลเร็วกว่าส่วนย่อยที่มีขนาดเล็กมาก
ในเวอร์ชัน Hyper-V ก่อนหน้า (Windows Server 2016/2012R2) เฉพาะโหมดการรับเซ็กเมนต์ Coalescing ของฮาร์ดแวร์เท่านั้นที่รองรับในระดับ NIC
หากเปิดใช้งานการรองรับ RSC อาจส่งผลให้เครือข่ายล่าช้าเป็นพิเศษในการกำหนดค่าฮาร์ดแวร์บางอย่าง
ปัญหานี้เกิดขึ้นทั้งใน Windows Server 2019 เวอร์ชัน Full GUI และใน Windows Hyper-V Server ฟรี
ตามค่าเริ่มต้น RSC จะเปิดใช้งานสำหรับ vSwitch ภายนอกทั้งหมดบน 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/2016/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 และ Windows 10 1709+ จะใช้ CUBIC ของ TCP อัลกอริทึมนี้ได้รับการปรับให้เหมาะสมสำหรับเครือข่ายความเร็วสูงที่มีความหน่วงแฝงสูง (มันถูกใช้เป็นค่าเริ่มต้นในเคอร์เนล Linux 2.6.19 และใหม่กว่า)
ใช้การตั้งค่าต่อไปนี้เฉพาะใน 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ปิดใช้งานการส่งขนาดใหญ่ (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)=ปิดใช้งาน
ส่ง Offload V2 ขนาดใหญ่ (IPv4/IPv6)=ปิดใช้งาน
การตั้งค่า TCP stack เหล่านี้จะทำให้การตั้งค่าโปรโตคอลเครือข่าย Windows Server 2019 คล้ายกับ Windows Server รุ่นก่อนหน้า




