SR-IOV (Single Root Input/Output Virtualization
) เป็นเทคโนโลยีการจำลองเสมือนของอุปกรณ์ฮาร์ดแวร์โฮสต์ที่ช่วยให้เครื่องเสมือนสามารถเข้าถึงอุปกรณ์โฮสต์ได้โดยตรง สามารถจำลองอุปกรณ์ประเภทต่างๆ ได้ แต่ส่วนใหญ่มักใช้เพื่อจำลองอะแดปเตอร์เครือข่าย ในบทความนี้ เราจะแสดงวิธีเปิดใช้งานและกำหนดค่า SR-IOV สำหรับอะแดปเตอร์เครือข่ายเครื่องเสมือนบนเซิร์ฟเวอร์ Windows Hyper-V
รองรับ SRV-IOV ใน Hyper-V 2012+ รวมถึง Windows Hyper-V Server ฟรี เราจะไม่เจาะลึกหลักการ SR-IOV โดยละเอียด เนื่องจากคุณสามารถรับหลักเกณฑ์ทั้งหมดได้บนเว็บ เพื่อความเข้าใจในทางปฏิบัติ ก็เพียงพอแล้วที่จะรู้ว่า SR-IOV อนุญาตให้เข้าถึงอะแดปเตอร์เครือข่ายจริงของโฮสต์สำหรับ VM ได้โดยตรง และข้ามการประมวลผลการรับส่งข้อมูลด้วยสวิตช์เสมือน Hyper-V อะแดปเตอร์เครือข่ายทางกายภาพหนึ่งตัวในโหมด SR-IOV สามารถให้บริการเครื่องเสมือนได้หลายเครื่อง
เนื่องจากการใช้ SR-IOV สำหรับเครื่องเสมือน Hyper-V คุณจะ เพิ่มปริมาณงาน ได้อย่างมาก , ลดเวลาแฝงของเครือข่ายและโหลด CPU เกิดจากการประมวลผลการรับส่งข้อมูลเครือข่ายโดยซอฟต์แวร์ Hyper-V
SR-IOV ไม่สามารถทำงานร่วมกับ NIC teamingในการเปิดใช้งาน SRV-IOV บนโฮสต์ Hyper-V ของคุณ คุณต้องปฏิบัติตามข้อกำหนดบางประการ
ก่อนอื่น เปิดใช้งาน SRV-IOV และรองรับการจำลองเสมือนใน BIOS ของเซิร์ฟเวอร์ของคุณ การตั้งค่าอาจแตกต่างกันไปขึ้นอยู่กับผู้ขาย
- รองรับการจำลองเสมือน:Intel (เทคโนโลยีการจำลองเสมือน, Intel VT, VT-d, Vanderpool), AMD (SVM, AMD-V)
- IOMMU
- SR-IOV
- ASPM
คุณอาจไม่มีทุกรายการ แม้แต่ไม่มี SR-IOV แต่ไม่ได้หมายความว่าเซิร์ฟเวอร์ของคุณไม่รองรับ SR-IOV ตัวอย่างเช่น มาเธอร์บอร์ด Supermicro อาจไม่มี SR-IOV ใน BIOS แต่มีการปิดใช้งาน ASPM ตามค่าเริ่มต้น หากคุณเปิดใช้งานการสนับสนุน ASPM และการจำลองเสมือน SR-IOV จะถูกเปิดใช้งานโดยอัตโนมัติ
โปรดทราบว่าหากโฮสต์ระบบปฏิบัติการ Windows OS ได้รับการติดตั้งด้วย SR-IOV ที่ปิดใช้งานในการตั้งค่า BIOS หลังจากที่คุณเปิดใช้งาน ระบบจะถือว่าคุณได้เปลี่ยนอะแดปเตอร์เครือข่ายแล้ว (ที่อยู่ IP แบบคงที่ปัจจุบันจะถูกรีเซ็ต)คุณสามารถตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ Hyper-V รองรับ SR-IOV ที่ระดับฮาร์ดแวร์โดยใช้ PowerShell:
(get-vmhost).IovSupport
(get-vmhost).IovSupportReasons
หากเซิร์ฟเวอร์ของคุณรองรับคุณสมบัตินี้ IovSupport จะมี True
. หากไม่เป็นเช่นนั้น จะเป็น False
. ในกรณีนี้ IovSupportReasons รายการแสดงสาเหตุที่ไม่รองรับ SR-IOV โดยปกติแล้วจะอธิบายเหตุผลโดยละเอียด เหตุผลทั่วไปมีดังนี้:
- ชิปเซ็ตในระบบไม่ทำการแมปแบบขัดจังหวะใหม่ หากไม่มี SR-IOV ที่ไม่รองรับ
- SR-IOV ไม่สามารถใช้บนคอมพิวเตอร์เครื่องนี้ได้ เนื่องจากโปรเซสเซอร์ไม่สนับสนุนการแปลที่อยู่ระดับที่สอง (SLAT) สำหรับโปรเซสเซอร์ Intel คุณลักษณะนี้อาจเรียกว่า Extended Page Tables (EPT) สำหรับโปรเซสเซอร์ AMD คุณลักษณะนี้อาจเรียกว่า Rapid Virtualization Indexing (RVI) หรือ Nested Page Tables (NPT)
- SR-IOV ไม่สามารถใช้กับระบบนี้ได้ เนื่องจากฮาร์ดแวร์ PCI Express ไม่รองรับ Access Control Services (ACS) ที่พอร์ตรูทใดๆ ติดต่อผู้จำหน่ายระบบของคุณสำหรับข้อมูลเพิ่มเติม
- หากต้องการใช้ SR-IOV บนคอมพิวเตอร์เครื่องนี้ จะต้องอัปเดต BIOS เนื่องจากมีข้อมูลที่ไม่ถูกต้องซึ่งอธิบายความสามารถของฮาร์ดแวร์ ติดต่อผู้ผลิตคอมพิวเตอร์ของคุณเพื่อขอข้อมูลอัปเดต
- ชิปเซ็ตบนระบบไม่ทำการรีแมป DMA ใหม่ โดยที่ SR-IOV จะไม่รองรับ
- SR-IOV ไม่สามารถใช้กับระบบนี้ได้ เนื่องจากได้รับการกำหนดค่าให้ปิดใช้งานการใช้ฮาร์ดแวร์การรีแมป I/O
- ในการใช้ SR-IOV กับระบบนี้ ไบออสของระบบจะต้องได้รับการอัปเดตเพื่อให้ Windows สามารถควบคุม PCI Express ได้ ติดต่อผู้ผลิตระบบของคุณสำหรับการอัปเดต
- ตรวจสอบให้แน่ใจว่าระบบรองรับชิปเซ็ตสำหรับ SR-IOV และเปิดใช้งานการจำลองเสมือน I/O ใน BIOS
- SR-IOV ไม่สามารถใช้กับระบบนี้ได้ เนื่องจากมีการรายงานว่าไม่มี PCI Express Bus ติดต่อผู้ผลิตระบบของคุณสำหรับข้อมูลเพิ่มเติม
ผลลัพธ์แบบเต็มของ get-vmswitch | fl *iov*
คำสั่งมีข้อมูลที่เป็นประโยชน์บางอย่าง ตัวอย่างเช่น:
IovVirtualFunctionCount : 6 IovVirtualFunctionsInUse : 3
ตัวเลขแสดงจำนวนอุปกรณ์เสมือน IOV ที่พร้อมใช้งาน และจำนวนอุปกรณ์ที่ใช้โดยเครื่องเสมือน
เมื่อสร้างสวิตช์เสมือน Hyper-V ให้เลือกตัวเลือกการสนับสนุน SR-IOV — เปิดใช้งานการจำลองเสมือน I/O รากเดียว (SR-IOV) .
หรือเปิดใช้งานตัวเลือก EnableIOV เมื่อสร้างสวิตช์เสมือนโดยใช้ PowerShell:
New-VMSwitch -Name "VMNetExt" -NetAdapterName "Ethernet 2" -EnableIov 1
หากโฮสต์ไฮเปอร์ไวเซอร์รองรับ SR-IOV ไม่ได้หมายความว่าจะทำงานบนสวิตช์เสมือนเฉพาะ สวิตช์ต้องผูกกับอะแดปเตอร์เครือข่ายที่รองรับ SR-IOV
มีอีกสิ่งที่สำคัญ เมนบอร์ดอาจมีอะแดปเตอร์เครือข่ายหลายตัว แต่บางตัวอาจรองรับ SR-IOV เท่านั้น นอกจากนี้ หากอะแดปเตอร์รองรับ SR-IOV ตามเอกสารข้อมูล ไม่ได้หมายความว่าอะแดปเตอร์ทำงานบนเมนบอร์ดของคุณ
ดังนั้น หลังจากที่คุณกำหนดค่าสวิตช์แล้ว ให้ตรวจสอบโดยใช้คำสั่ง:
get-vmswitch | select IovSupport, IovSupportReasons, IovEnabled
ตัวเลือก IovEnabled แสดงว่าเปิดใช้งาน SR-IOV หรือไม่
คุณสามารถแสดงรายการอะแดปเตอร์เครือข่ายที่รองรับ SR-IOV ได้โดยใช้ PowerShell:
Get-NetAdapterSriov | sort name | ft Name, InterfaceDescription, SriovSupport
หลังจากที่คุณเปิดใช้งาน SR-IOV บนไฮเปอร์ไวเซอร์และระดับสวิตช์เสมือนแล้ว คุณสามารถเปิดใช้งานบนเครื่องเสมือนของคุณได้ (ปิดใช้งานโดยค่าเริ่มต้น) คุณสามารถค้นหา เปิดใช้งาน SR-IOV ตัวเลือกใน การเร่งฮาร์ดแวร์ ของอะแดปเตอร์เครือข่ายเครื่องเสมือนของคุณ
หรือคุณสามารถเปิดใช้งาน SR-IOV สำหรับอะแดปเตอร์เครือข่ายของเครื่องเสมือนผ่าน PowerShell:
Set-VMNetworkAdapter -VMName mytestvm -VMNetworkAdapterName “Network Adapter” -IovWeight 100
คุณค้นหาข้อผิดพลาดและเหตุการณ์ SR-IOV ทั้งหมดใน Hyper-V ได้โดยใช้บันทึก Event Viewer แยกต่างหาก:
บันทึกแอปพลิเคชันและบริการ -> Microsoft -> Windows -> Hyper-V-SynthNic -> ผู้ดูแลระบบ
หาก SR-IOV ทำงานอย่างถูกต้อง คุณจะเห็นรายการต่อไปนี้ใน Event Viewer เมื่อเริ่มต้นเครื่องเสมือน:
12597 Network adapter (%NIC_ID%) Connected to virtual network. 12582 Network adapter (%NIC_ID%) started successfully. 12584 Network adapter (%NIC_ID%) allocated a virtual function. 12588 Network adapter (%NIC_ID%) assigned a virtual function.
SR-IOV เพิ่มประสิทธิภาพเครือข่ายของเครื่องเสมือนและไฮเปอร์ไวเซอร์ คุณอาจเห็นผลลัพธ์สูงสุดของการใช้ SR-IOV บนโฮสต์ Hyper-V ที่มีทราฟฟิกเครื่องเสมือนสูง ซึ่งทำให้ CPU ของโฮสต์มีภาระงานมาก