Trước đây mình đã chia sẻ cách cấu hình iGPU Passthrough cho LXC Container trên Proxmox để Plex tận dụng tính năng Quick Sync của iGPU (intel GPU) cho việc transcode phim. Dạo này mình ngồi vọc XPEnology trên Proxmox nên có nghiên cứu thêm cách cấu hình iGPU Passthrough cho máy ảo (Virtual Machine).

Có hai cách cấu hình iGPU Passthrough cho máy ảo VM:

  • Passthrough toàn bộ GPU vào 1 máy ảo duy nhất (Full iGPU Passthrough).
  • Sử dụng công nghệ iGPU GVT-g để chia sẻ GPU cho nhiều máy ảo (Split iGPU GVT-g Passthrough).

Bài viết này là hướng dẫn cách cấu hình Full iGPU Passthrough. Còn Split iGPU GVT-g Passthrough hẹn sẽ chia sẻ sau.

Mục Lục

  • I. Yêu cầu chuẩn bị
  • II. Cấu hình trên host Proxmox
    • 1. Chỉnh sửa grub
    • 2. Cấu hình PCI Passthrough
    • 3. Khởi động lại Proxmox
  • III. Cập nhật cấu hình máy ảo
    • 1. Thêm PCI Device
    • 2. Xác nhận iGPU hoạt động

I. Yêu cầu chuẩn bị

  • Máy chủ Proxmox sử dụng CPU Intel có tích hợp iGPU.
  • Máy ảo VM (Windows / Linux) đã được tạo trên máy chủ Proxmox.

II. Cấu hình trên host Proxmox

Truy cập SSH vào Proxmox để chỉnh sửa một số file cấu hình

1. Chỉnh sửa grub

nano /etc/default/grub

Tìm dòng GRUB_CMDLINE_LINUX_DEFAULT và sửa lại thành như sau

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_acs_override=downstream,multifunction initcall_blacklist=sysfb_init video=simplefb:off video=vesafb:off video=efifb:off video=vesa:off disable_vga=1 vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 modprobe.blacklist=radeon,nouveau,nvidia,nvidiafb,nvidia-gpu,snd_hda_intel,snd_hda_codec_hdmi,i915"

Mục đích nhằm kích hoạt tính năng passthrough đồng thời ngăn Proxmox sử dụng iGPU khi khởi động.

Kích hoạt những thay đổi vừa chỉnh sửa để hiệu lực trong lần khởi động kế tiếp

update-grub

2. Cấu hình PCI Passthrough

nano /etc/modules

Nhập vào các dòng sau và lưu lại

# Modules required for PCI passthrough
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

Chạy lệnh sau để kích hoạt

update-initramfs -u -k all

3. Khởi động lại Proxmox

Khởi động lại máy chủ Proxmox và chạy lệnh sau để xác nhận

dmesg | grep -e DMAR -e IOMMU

Nếu thấy trong kết quả trả về có dòng sau nghĩa là tính năng IOMMU đã được kích hoạt thành công.

[    0.058500] DMAR: IOMMU enabled

III. Cập nhật cấu hình máy ảo

Cách cấu hình iGPU cho máy ảo Windows hay Linux đều như nhau. 

1. Thêm PCI Device

Bạn truy cập vào phần Hardward của máy ảo, bấm vào Add, chọn PCI Device.

Chọn dòng tương ứng với iGPU trên máy hiện có.

Bấm chọn vào mục All Functions, sau đó bấm Add

Ngoài ra, cần phải thay đổi thông số Machine qua q35 (mặc định là i440fx) để hỗ trợ PCI Express.

2. Xác nhận iGPU hoạt động

Ra lệnh tắt (Shutdown) máy ảo và mở lên lại (Power on) để kích hoạt những thay đổi. Không được chọn Restart trên máy ảo vì cách này sẽ không áp dụng những thay đổi vừa tạo trong mục Hardware.

Trên Windows, bạn có thể truy cập vào Device Manager để xác nhận iGPU đã xuất hiện trên máy ảo.

Trên Linux, bạn có thể dùng lệnh sau

 sudo lspci -nnv | grep VGA

Nếu thấy xuất hiện dòng tương tự như dưới đây nghĩa là iGPU đã được passthrough thành công.

00:10.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 530 (Desktop) [8086:3e92] (prog-if 00 [VGA controller])

Còn trên XPEnology, mình kiểm tra bằng lệnh

lspci -tvqnn

Kết quả trả về đã thấy xuất hiện Intel Corporation HD Graphics 530

-+-[0001:01]---00.0  Marvell Technology Group Ltd. 88SE9235 PCIe 2.0 x2 4-port SATA 6 Gb/s Controller [1b4b:9235]
 \-[0000:00]-+-00.0  Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller [8086:29c0]
             +-1a.0  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 [8086:2937]
             +-1a.1  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 [8086:2938]
             +-1a.2  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 [8086:2939]
             +-1a.7  Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 [8086:293c]
             +-1b.0  Intel Corporation 82801I (ICH9 Family) HD Audio Controller [8086:293e]
             +-1c.0-[01]----00.0  Intel Corporation HD Graphics 530 [8086:1912]
             +-1c.1-[02]--
             +-1c.2-[03]--
             +-1c.3-[04]--
             +-1d.0  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 [8086:2934]
             +-1d.1  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 [8086:2935]
             +-1d.2  Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 [8086:2936]
             +-1d.7  Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 [8086:293a]
             +-1e.0-[05-09]--+-01.0-[06]--+-03.0  Red Hat, Inc. Virtio memory balloon [1af4:1002]
             |               |            +-07.0  Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] [8086:2922]
             |               |            \-12.0  Red Hat, Inc. Virtio network device [1af4:1000]
             |               +-02.0-[07]--
             |               +-03.0-[08]--
             |               \-04.0-[09]--
             +-1f.0  Intel Corporation 82801IB (ICH9) LPC Interface Controller [8086:2918]
             +-1f.2  Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA Controller [AHCI mode] [8086:2922]
             \-1f.3  Intel Corporation 82801I (ICH9 Family) SMBus Controller [8086:2930]

Vậy là xong. Chúc bạn thực hiện thành công!

Tham khảo: 3os , thuanbui