Tuesday, November 25, 2025

KVM : GPU Passthrough

 

KVM : GPU Passthrough


 

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

81:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [GeForce RTX 3060] [10de:2487] (rev a1)
81:00.1 Audio device [0403]: NVIDIA Corporation GA104 High Definition Audio Controller [10de:228b] (rev a1)

root@dlp:~# 
vi /etc/modprobe.d/vfio.conf
# create new : for [ids=***], specify [Vendor-ID : Device-ID]

options vfio-pci ids=10de:2487,10de:228b
root@dlp:~# 
echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
root@dlp:~# 
# confirm IOMMU is enabled

root@dlp:~# 
dmesg | grep -E "DMAR|IOMMU"

[    0.010814] ACPI: DMAR 0x000000007A5C3130 000108 (v01 ALASKA A M I    00000001 INTL 20091013)
[    0.010847] ACPI: Reserving DMAR table memory at [mem 0x7a5c3130-0x7a5c3237]
[    0.027998] DMAR: IOMMU enabled
[    0.099135] DMAR: Host address width 46
[    0.099137] DMAR: DRHD base: 0x000000fbffc000 flags: 0x0
[    0.099143] DMAR: dmar0: reg_base_addr fbffc000 ver 1:0 cap d2078c106f0466 ecap f020df
[    0.099146] DMAR: DRHD base: 0x000000c7ffc000 flags: 0x1
[    0.099151] DMAR: dmar1: reg_base_addr c7ffc000 ver 1:0 cap d2078c106f0466 ecap f020df
[    0.099153] DMAR: RMRR base: 0x0000007dbcf000 end: 0x0000007dbddfff
[    0.099155] DMAR: ATSR flags: 0x0
[    0.099156] DMAR: RHSA base: 0x000000c7ffc000 proximity domain: 0x0
[    0.099158] DMAR: RHSA base: 0x000000fbffc000 proximity domain: 0x1
[    0.099161] DMAR-IR: IOAPIC id 10 under DRHD base  0xfbffc000 IOMMU 0
[    0.099163] DMAR-IR: IOAPIC id 8 under DRHD base  0xc7ffc000 IOMMU 1
[    0.099165] DMAR-IR: IOAPIC id 9 under DRHD base  0xc7ffc000 IOMMU 1
[    0.099166] DMAR-IR: HPET id 0 under DRHD base 0xc7ffc000
[    0.099168] DMAR-IR: x2apic is disabled because BIOS sets x2apic opt out bit.
[    0.099169] DMAR-IR: Use 'intremap=no_x2apic_optout' to override the BIOS setting.
[    0.100047] DMAR-IR: Enabled IRQ remapping in xapic mode
[    0.468967] DMAR: No SATC found
[    0.468971] DMAR: dmar0: Using Queued invalidation
[    0.468978] DMAR: dmar1: Using Queued invalidation
[    0.480680] DMAR: Intel(R) Virtualization Technology for Directed I/O

# confirm vfio_pci is enabled

root@dlp:~# 
dmesg | grep -i vfio

[    4.102407] VFIO - User Level meta-driver version: 0.3
[    4.120253] vfio-pci 0000:81:00.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=none
[    4.120385] vfio_pci: add [10de:2487[ffffffff:ffffffff]] class 0x000000/00000000
[    4.144749] vfio_pci: add [10de:228b[ffffffff:ffffffff]] class 0x000000/00000000
[2]That's OK. For example, create a Debian 13 Virtual machine with GPU.
Specify PCI identification number of GPU for [--host-device].
root@dlp:~# virt-install \
--name debian13 \
--ram 8192 \
--disk path=/var/kvm/images/debian13.img,size=30 \
--vcpus=4 \
--os-variant debian13 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0,password=password \
--video vga \
--host-device 81:00.0 \
--features kvm_hidden=on \
--machine q35 \
--cdrom /home/debian-13.0.0-amd64-DVD-1.iso 
[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 GA104 [GeForce RTX 3060] (rev a1)

No comments:

Post a Comment