Quick start: Cấu hình nhanh SR-IOV i915 trong 5 phút
Passthrough PCIe truyền thống có một điểm yếu chí mạng: một thiết bị phần cứng chỉ gán được cho một máy ảo duy nhất. Khi VM Windows lấy trọn chiếc iGPU UHD 770, container Jellyfin kế bên lập tức mất hardware acceleration và nghẽn CPU khi transcode 4K.
Công nghệ SR-IOV (Single Root I/O Virtualization) kết hợp module DKMS sẽ giải quyết triệt để vấn đề này. Toàn bộ quy trình cài đặt được thực hiện trực tiếp trên shell của Proxmox Host (PVE 8.x, Kernel 6.5 hoặc 6.8):
# 1. Cài đặt kernel headers và công cụ build
apt update && apt install -y git build-essential pve-headers-$(uname -r) dkms sysfsutils
# 2. Clone repository driver i915 SR-IOV DKMS
cd /usr/src
git clone https://github.com/strongtz/i915-sriov-dkms.git
cd i915-sriov-dkms
# 3. Đăng ký và build module vào hệ thống
dkms add .
dkms install -m i915-sriov-dkms -v $(cat VERSION)
# 4. Kiểm tra trạng thái module sau khi build
dkms status
Cập nhật Grub để kích hoạt IOMMU và cho phép driver i915 khởi tạo Virtual Functions (VF):
# Nạp tham số IOMMU, GuC firmware và giới hạn 7 VF vào Grub
sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="[^"]*/& intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7/' /etc/default/grub
update-grub
# Khai báo số lượng VF tự động tạo mỗi khi boot hệ thống
echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 7" >> /etc/sysfs.conf
# Khởi động lại Proxmox host
reboot
Kiểm tra kết quả ngay sau khi máy chủ khởi động lại:
lspci | grep -i display
# Đầu ra chuẩn sẽ gồm 00:02.0 (Physical Function) kèm 7 thiết bị ảo từ 00:02.1 đến 00:02.7 (Virtual Functions)
Bản chất kỹ thuật: GVT-g đã chết, SR-IOV thay thế ra sao?
Từ thế hệ Skylake (Gen 6) đến Comet Lake (Gen 10), Intel hỗ trợ GVT-g trực tiếp trong kernel Linux. Công nghệ này cho phép chia sẻ vGPU qua cơ chế mediated device rất mượt mà. Tuy nhiên, bước sang Gen 11 (Tiger Lake) và các kiến trúc mới như Alder Lake (Gen 12), Raptor Lake (Gen 13/14), Intel đã khai tử hoàn toàn GVT-g.
Thay vào đó, Intel đưa SR-IOV xuống phần cứng iGPU tiêu dùng. Cơ chế này hoạt động trực tiếp ở tầng silicon với hai thành phần tách biệt:
- Physical Function (PF): Nằm cố định tại bus
00:02.0. PF giữ quyền quản trị toàn bộ phần cứng vật lý, điều khiển xung nhịp, điện áp và phân bổ VRAM. - Virtual Function (VF): Các thiết bị PCIe ảo (từ
00:02.1đến00:02.7). Mỗi VF sở hữu không gian cấu hình PCIe riêng biệt. Các engine QuickSync (giải mã/mã hóa H.264, HEVC, AV1) được chia sẻ theo thời gian thực (time-slicing) qua bộ lập lịch phần cứng GuC.
Driver gốc của Intel trên nhân Linux chặn tính năng tạo VF trên CPU phổ thông. Dự án mã nguồn mở i915-sriov-dkms mở khóa rào cản này, cho phép một con CPU như Core i5-13500 gánh mượt mà 5 luồng transcode 4K HDR cùng lúc trên nhiều máy ảo.
Gán VF vào VM và xử lý triệt để lỗi Code 43 trên Windows
Cấu hình máy ảo nhận diện đúng thiết bị ảo đòi hỏi thiết lập chuẩn xác các cờ PCIe trong Proxmox.
1. Cấu hình VM Linux cho Plex, Jellyfin hoặc Docker
Mở file cấu hình VM (ví dụ VM 101 tại /etc/pve/qemu-server/101.conf) và thêm thiết bị VF:
# Gán Virtual Function đầu tiên vào VM
hostpci0: 0000:00:02.1,pcie=1
Khởi động VM Ubuntu/Debian rồi cài đặt gói công cụ kiểm tra driver đồ họa:
apt install -y vainfo intel-media-va-driver-non-free
vainfo --display drm --device /dev/dri/renderD128
Khi lệnh trả về danh sách profile hỗ trợ VAEntrypointVLD và VAEntrypointEncSlice cho các định dạng H264, HEVC Main10, bộ tăng tốc phần cứng đã hoạt động hoàn hảo.
2. Vượt lỗi Code 43 trên máy ảo Windows 10 và Windows 11
Trình cài đặt driver đồ họa của Intel trên Windows mặc định quét chữ ký hypervisor. Nếu phát hiện môi trường ảo hóa KVM, driver sẽ ngắt hoạt động và báo lỗi Code 43 trong Device Manager.
Để khắc phục, mở file cấu hình máy ảo Windows (ví dụ /etc/pve/qemu-server/102.conf) và áp dụng mẫu thông số sau:
bios: ovmf
machine: q35
cpu: host,hidden=1,flags=+pcid
hostpci0: 0000:00:02.2,pcie=1,x-vga=1
vga: none
Cờ hidden=1 che giấu định danh KVM khỏi bảng CPUID. Hệ điều hành khách sẽ nhận diện card đồ họa như phần cứng cắm trên bare-metal. Sau đó, chỉ cần tải gói Intel Graphics DCH Driver chính thức và cài đặt bình thường.
Kinh nghiệm vận hành và xử lý sự cố thực tế
Dưới đây là các lưu ý kỹ thuật quan trọng giúp hệ thống vận hành ổn định lâu dài:
- Sự cố sau khi cập nhật Kernel: Mỗi lần Proxmox nâng kernel (ví dụ từ 6.8.4 lên 6.8.8), DKMS có thể không kịp build module mới nếu thiếu gói header. Luôn chạy
dkms statussau lệnhapt dist-upgrade. Nếu module báo lỗi, kích hoạt ngay lệnhdkms autoinstalltrước khi reboot. - Kiểm tra nạp firmware GuC/HuC: Thiếu firmware GuC, hệ thống sẽ từ chối phân phối tài nguyên cho các VF. Chạy lệnh sau để kiểm tra:
dmesg | grep -i gucNhật ký hệ thống phải xuất hiện dòng
GuC firmware validatedthì bộ lập lịch phần cứng mới sẵn sàng. - Tối ưu VRAM theo nhu cầu: Driver i915 chia đều bộ nhớ đồ họa theo giá trị
max_vfs. Nếu chỉ dùng 2 máy ảo, hãy đổi tham số thànhi915.max_vfs=2. Cách này tăng gấp đôi dung lượng bộ đệm khung hình và VRAM khả dụng cho từng VM. - Duy trì cổng cứu hộ qua SSH: Tránh chỉnh sửa file cấu hình mạng hoặc bus PCI qua màn hình gắn trực tiếp vào cổng HDMI của mainboard. Hãy thao tác qua kết nối SSH độc lập để kịp thời sửa sai nếu cổng xuất hình bị vô hiệu hóa khi nạp driver.

