KVM : GPU Passthrough2023/06/20 |
Configure GPU Passthrough for Virtual Machines.
By this configuration, it's possible to use GPU on Virtual Machines and run GPU Computing.
Before configuration, Enable VT-d (Intel) or AMD IOMMU (AMD) on BIOS Setting first.
|
|
[1] | Enable IOMMU feature on KVM Host. |
root@dlp:~#
vi /etc/default/grub # line 10 : add # for AMD CPU, set [amd_iommu=on] # for Intel CPU, set [intel_iommu=on] GRUB_CMDLINE_LINUX=" intel_iommu=on iommu=pt "
root@dlp:~#
update-grub # show PCI identification number and [vendor-ID:device-ID] of Graphic card # PCI number ⇒ it matches [03:00.*] below # vendor-ID:device-ID ⇒ it matches [10de:***] below root@dlp:~# lspci -nn | grep -i nvidia 03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104 [GeForce GTX 770] [10de:1184] (rev a1) 03:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)
root@dlp:~#
vi /etc/modprobe.d/vfio.conf # create new : for [ids=***], specify [Vendor-ID : Device-ID] options vfio-pci ids=10de:1184,10de:0e0a
root@dlp:~#
echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
root@dlp:~#
reboot
# confirm IOMMU is enabled root@dlp:~# dmesg | grep -E "DMAR|IOMMU" [ 0.011924] ACPI: DMAR 0x000000005C6CEB70 0000D4 (v01 ALASKA A M I 00000001 INTL 20091013) [ 0.011947] ACPI: Reserving DMAR table memory at [mem 0x5c6ceb70-0x5c6cec43] [ 0.022477] DMAR: IOMMU enabled [ 0.096903] DMAR: Host address width 46 [ 0.096904] DMAR: DRHD base: 0x000000fbffd000 flags: 0x0 [ 0.096911] DMAR: dmar0: reg_base_addr fbffd000 ver 1:0 cap 8d2008c10ef0466 ecap f0205b [ 0.096914] DMAR: DRHD base: 0x000000fbffc000 flags: 0x1 [ 0.096918] DMAR: dmar1: reg_base_addr fbffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df [ 0.096920] DMAR: RMRR base: 0x0000005ce2b000 end: 0x0000005ce3afff [ 0.096921] DMAR: ATSR flags: 0x0 [ 0.096923] DMAR: RHSA base: 0x000000fbffc000 proximity domain: 0x0 [ 0.096925] DMAR-IR: IOAPIC id 1 under DRHD base 0xfbffc000 IOMMU 1 [ 0.096927] DMAR-IR: IOAPIC id 2 under DRHD base 0xfbffc000 IOMMU 1 [ 0.096928] DMAR-IR: HPET id 0 under DRHD base 0xfbffc000 [ 0.096929] DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit. [ 0.096930] DMAR-IR: Use 'intremap=no_x2apic_optout' to override the BIOS setting. [ 0.097541] DMAR-IR: Enabled IRQ remapping in xapic mode [ 0.381331] DMAR: No SATC found [ 0.381333] DMAR: IOMMU feature sc_support inconsistent [ 0.381334] DMAR: IOMMU feature dev_iotlb_support inconsistent [ 0.381336] DMAR: dmar0: Using Queued invalidation [ 0.381339] DMAR: dmar1: Using Queued invalidation [ 0.384032] DMAR: Intel(R) Virtualization Technology for Directed I/O [ 0.687176] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug. # confirm vfio_pci is enabled root@dlp:~# dmesg | grep -i vfio [ 3.065228] VFIO - User Level meta-driver version: 0.3 [ 3.095618] vfio-pci 0000:03:00.0: vgaarb: deactivate vga console [ 3.100120] vfio-pci 0000:03:00.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 3.100314] vfio_pci: add [10de:1184[ffffffff:ffffffff]] class 0x000000/00000000 [ 3.148678] vfio_pci: add [10de:0e0a[ffffffff:ffffffff]] class 0x000000/00000000 |
[2] | That's OK. For example, create a Debian 12 Virtual machine with GPU. Specify PCI identification number of GPU for [--host-device]. |
root@dlp:~# virt-install \
--name debian12 \
--ram 8192 \
--disk path=/var/kvm/images/debian12.img,size=30 \
--vcpus 4 \
--os-variant debian11 \
--network bridge=br0 \
--graphics none \
--console pty,target_type=serial \
--location /home/debian-12.0.0-amd64-DVD-1.iso \
--extra-args 'console=ttyS0,115200n8' \
--host-device 03:00.0 \
--features kvm_hidden=on \
--machine q35
|
[3] | After creating Virtual machine, Confirm GPU is found on it like follows. |
root@debian:~# lspci | grep -i nvidia 05:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 770] (rev a1) |
Sponsored Link |