ในระบบ Virtualization สมัยใหม่ การเพิ่มประสิทธิภาพการเชื่อมต่อเครือข่ายและการเข้าถึงฮาร์ดแวร์โดยตรงเป็นสิ่งสำคัญ โดยเฉพาะในงานที่ต้องการ Bandwidth สูง หรือ Latency ต่ำ เช่น ระบบฐานข้อมูลขนาดใหญ่, AI/ML หรือ Virtual Desktop Infrastructure (VDI) หนึ่งในเทคโนโลยีที่ช่วยได้คือ SR-IOV (Single Root I/O Virtualization) ซึ่งทำให้สามารถแบ่ง Physical NIC ออกเป็นหลาย Virtual Function (VF) เพื่อมอบให้กับ VM ได้โดยตรง ลดภาระการทำงานของ Hypervisor ลงอย่างมาก
ในขณะเดียวกันเทคนิค PCI Passthrough ก็เป็นอีกทางเลือกที่ให้ VM เข้าถึงอุปกรณ์ PCIe เช่น GPU หรือ NIC ได้โดยตรงผ่าน VFIO (Virtual Function I/O) ซึ่งมีประโยชน์อย่างยิ่งในการเพิ่มประสิทธิภาพสำหรับงานเฉพาะทาง
บทความนี้จะอธิบายวิธีการตั้งค่า SR-IOV สำหรับ NIC บน Proxmox VE ซึ่งเป็นเวอร์ชันล่าสุด ณ ปัจจุบัน โดยจะครอบคลุมตั้งแต่การตั้งค่า Kernel Module, การปรับแต่ง BIOS, การกำหนด IOMMU, ไปจนถึงการเพิ่ม Virtual Function ให้กับ VM อย่างถูกต้อง
ตัวอย่างการทำ GPU Passthrough บน Proxmox VE
1. เช็ก BIOS และเปิดการตั้งค่าที่จำเป็น
– เข้า BIOS ของเครื่องเซิร์ฟเวอร์
เปิดใช้งาน
หมายเหตุ ซึ่งท่าน จะต้องเปิดใช้งาน Intel Virtualization / Intel VT-d และ SR-IOV ใน NIC ผ่าน BIOS ก่อน

เปิดใช้งาน SR-IOV
2. การเตรียม ISO ที่สามารถบูต Proxmox VE เพื่อติดตั้งให้เรียบร้อย พร้อมเข้าสู่ระบบ

หน้าแดชแบอด Proxmox VE
3. การตรวจสอบการสนับสนุน IOMMU
สามารถตรวจยืนยันว่า IOMMU เปิดใช้งานอยู่หรือไม่โดยใช้ Shell ของ Proxmox ด้วยคำสั่งต่อไปนี้:
# dmesg | grep -e DMAR -e IOMMU

# dmesg | grep 'remapping'

*** หาก IOMMU ไม่แสดงเป็นเปิดใช้งาน ให้ไปทำการเปิดใช้งาน SR-IOV ที่ BIOS ให้เรียบร้อย
4. การกำหนดค่า Proxmox
เมื่อติดตั้ง Proxmox แล้ว ให้ล็อกอินเข้าสู่ระบบ และเพิ่มพารามิเตอร์การบูตเคอร์เนล “intel_iommu=on” และ “iommu=pt” ใน /etc/default/grub:
# vi /etc/default/grub
ทำการเพิ่มพารามิเตอร์ บรรทัดนี้
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

** อย่าลืม save
เช็ค cpu
# dmesg | grep cpu

# dmesg | grep intel

# more /proc/cpuinfo

รันคำสั่ง “update-grub” หลังจากทำการเปลี่ยนแปลงที่จำเป็นเพื่อใช้การเปลี่ยนแปลง
# update-grub

เข้าเพิ่ม Kernel Modules สามารถทำได้โดยเพิ่มโมดูลเหล่านี้ลงใน ‘ /etc/modules ‘ **ทำหน้าที่เป็นตัวกลางส่งผ่าน
# vi /etc/modules
จากนั้นเพิ่มพารามิเตอร์
vfio vfio_iommu_type1 vfio_pci vfio_virqfd

** อย่าลืม save
หลังจากเปลี่ยนแปลงโมดูลใดๆ ที่เกี่ยวข้องแล้ว คุณต้องรีเฟรช initramfs ของคุณ ใน Proxmox VE สามารถทำได้โดยดำเนินการดังนี้:
# update-initramfs -u -k all

จากนั้นทำการ reboot เครื่อง Server Proxmox VE
ทำการเช็ค device name ของ NIC ในรูปเราจะได้ค่าเป็นดังนี้

ทำการตรวจสอบอุปกรณ์ NIC
# Ispci

เมื่อใช้คำสั่ง Ispci ท่านจะเห็น Virtual NIC จำนวนทั้งหมดขึ้นมา

เท่านั้นก็เสร็จเรียบร้อย
5. การกำหนดค่าไคลเอนต์
เมื่อถึงจุดนี้ ให้สร้าง VM ใหม่ใน Proxmox สำหรับบทช่วยสอนนี้ เราได้ติดตั้ง CentOS-7-x86_64-DVD-1810

ตั้งชื่อ VM คลิก Next

เลือก ISO Image คลิก Next

กำหนดค่าระบบแล้ว คลิก Next

กำหนดค่า Disk แล้ว คลิก Next

กำหนดค่า CPU แล้ว คลิก Next

กำหนดค่า Memory แล้ว คลิก Next

กำหนดค่า Network แล้ว คลิก Next

ตรวจสอบรายละเอียด จากนั้นคลิก Next
6. การเพิ่ม GPU
เมื่อสร้าง VM แล้ว คุณสามารถเพิ่ม GPU ได้ผ่านแท็บฮาร์ดแวร์ภายใต้คอนโซล VM ใน Proxmox

เลือก VM —> Hardware

เลือกปุ่ม Add -> PCI Device

เลือก Raw Device และค้นหา GPU ของคุณ

คลิก Add

จากนั้นคุณทำการติดตั้งและเข้าสู่ระบบระบบปฏิบัติการแล้ว ให้ตรวจสอบว่า GPU แสดงขึ้นมาโดยเรียกใช้สั่ง lspci
# lspci

ดังนั้น SR-IOV (Single Root I/O Virtualization) เป็นเทคนิคที่ช่วยให้ Network Interface Card (NIC) สามารถสร้าง Virtual Functions (VF) หลายตัวจาก Physical Function (PF) ตัวเดียว เพื่อแบ่งทรัพยากรส่งตรงให้ VM ใช้งานได้โดยไม่ผ่าน hypervisor มากเกินไป (ใกล้เคียงกับ PCI Passthrough) ซึ่งจะได้ประสิทธิภาพสูงสุดและ latency ต่ำที่สุด หากคุณทำตามขั้นตอนทั้งหมดอย่างเคร่งครัด เครื่องเสมือน (VM) ของคุณก็ไม่น่าจะมีปัญหาในการตรวจจับอุปกรณ์ PCIe ทั่วไป ทั้งนี้สามารถทำตามคู่มือแบบวีดีโอได้ที่ Youtube
AVESTA ให้บริการทั้งงานขายระบบ System , Networks ติดตั้ง อัพเกรด Configure และอื่น ๆ หากท่านมีคำถามสามารถติดต่อเพื่อขอข้อมูลเกี่ยวกับการบริการของเราได้ตลอดเวลา ด้วยประสบการณ์ยาวนานนับสิบปี