ค้นหาเว็บไซต์

ประสิทธิภาพเครือข่ายแย่บน 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 รุ่นก่อนหน้า

บทความที่เกี่ยวข้อง