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ị
- 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
Code language: JavaScript (javascript)
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"
Code language: JavaScript (javascript)
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
Code language: Nginx (nginx)
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
Code language: Nginx (nginx)
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
Code language: Nginx (nginx)
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
Code language: YAML (yaml)
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
Code language: Nginx (nginx)
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])
Code language: CSS (css)
Còn trên XPEnology, mình kiểm tra bằng lệnh
lspci -tvqnn
Code language: Nginx (nginx)
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]
Code language: YAML (yaml)
Vậy là xong. Chúc bạn thực hiện thành công!
Tham khảo: 3os
Cách này dùng card rời không được à bạn ơi?
Hướng dẫn này chỉ cho GPU tích hợp của Intel. Card rời bạn cần tìm hướng dẫn khác nhé.
Cảm ơn bạn, có vấn đề nữa là sau khi cài xong proxmox, mình gỡ card rời ra được không bạn nhỉ? vì mình chỉ muốn dùng chip và ram thôi.
Tuỳ thuộc mainboard của bạn nó có chịu boot nếu không có card rời không thôi. Nếu mainboard hỗ trợ thì proxmox có thể chạy không card vô tư.
Bạn đang có máy ở nhà thì tự thử nghiệm xem có được hay không.
Cảm ơn bạn. Phải nói mình rất thích đọc blog của bạn. Toàn thủ thuật hữu ích và nâng cao. Chúc blog bạn nhìu người biết đến hơn.
Hi bạn!
Bạn có thể hướng dẫn cách xuất hình trực tiếp VM (thí dụ là win10) qua cổng xuất hình của card màn hình đã đc passthrough vào VM được không.
Tôi làm theo video này và xuất trực tiếp VM Window 10 qua card RX 460 ra màn hình thành công. Bạn tham khảo thử nhé: https://www.youtube.com/watch?v=S6jQx4AJlFw&ab_channel=TechHut
Sao e gõ dmesg | grep -e DMAR -e IOMMU thì nó báo DMAR: IOMMU enabled rồi
Nhưng khi add PCI thì nó vẫn báo No IOMMU detected
Chip G4400 có vt-d ạ, e đã bật trong bios luôn