AlmaLinux9 KVM設定(初期設定+GPUパススルー)

OS設定

ホスト名の変更
# hostnamectl set-hostname AlmaLinux9-kvm-host
SELinuxの無効化
# vi /etc/selinux/config
SELINUX=disabled

# reboot
firewalldの無効化
# systemctl stop firewalld
# systemctl disable firewalld 

KVM設定

パッケージインストール
# dnf update
# dnf install qemu-kvm libvirt virt-install 
ブリッジの作成
# nmcli device
# nmcli connection show

# nmcli connection add type bridge ifname br0
# nmcli device
# nmcli connection show

# nmcli connection modify bridge-br0 ipv4.addresses 192.168.0.90/24 ipv4.method manual
# nmcli connection modify bridge-br0 ipv4.gateway 192.168.0.1
# nmcli connection modify bridge-br0 ipv4.dns 8.8.8.8

# nmcli connection add type bridge-slave ifname enp4s0 master br0
# nmcli device
# nmcli connection show

# nmcli connection del enp4s0 ; reboot

ブリッジへのインターフェース登録状態の確認
# nmcli c show bridge-slave-enp4s0 | grep master

仮想マシンの作成

OS種別の確認
# osinfo-query os
Windowsのインポート(EFI
# virt-install \
 --boot uefi \
 --name Windows10-uefi \
 --vcpus=4 \
 --cpu host-passthrough,cache.mode=passthrough \
 --ram=4096 \
 --os-type=windows \
 --os-variant=win10 \
 --disk=/mnt/storage-2/temp//Windows10-uefi_2.qcow2 \
 --import \
 --network bridge=br0 \
 --graphics vnc,password=foobar,port=5908,listen=0.0.0.0,keymap=en-us
Linuxのインポート
virt-install \
 --name Ubuntu16-tuner \
 --vcpus=4 \
 --cpu host-passthrough,cache.mode=passthrough \
 --ram=2048 \
 --os-type=linux \
 --os-variant=ubuntu16.04 \
 --disk=/var/lib/libvirt/images/Ubuntu16-tuner.qcow2  \
 --import \
 --network bridge=br0 \
 --graphics vnc,password=foobar,port=5901,listen=0.0.0.0,keymap=en-us

PCIパススルー設定

BIOS設定
BIOSで「Intel VT-d」「I/O Virtualization Technology」などの名前の設定項目を有効にする。
IOMMU有効化
# vi /etc/default/grub
GRUB_CMDLINE_LINUX の末尾に「intel_iommu=on」もしくは「amd_iommu=on」を追加

# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot

# dmesg | grep -e DMAR -e IOMMU
[    0.000000] Intel-IOMMU: enabled
ホストのドライバ読み込み無効化設定

grub に nomodeset を追加

# vi /etc/default/grub 
GRUB_CMDLINE_LINUX="vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 intel_iommu=on nomodeset"

# grub2-mkconfig -o /boot/grub2/grub.cfg

・ドライバをブラックリストに追加
# lspci -v -d 1002:68f9 | grep Kernel
	Kernel driver in use: radeon

# lspci -v -d 1002:aa68 | grep Kernel
	Kernel driver in use: snd_hda_intel

# lsmod | grep radeon
drm                   297829  2 ttm,drm_kms_helper,radeon

# vi /etc/modprobe.d/blacklist.conf
blacklist drm
blacklist radeon
blacklist snd-hda-intel

# reboot
NVIDIAグラボをパススルーする場合の error 43 対策

OVMF による PCI パススルー - ArchWiki

仮想マシン設定に下記を追加する

<features>
	<hyperv>
		...
		<vendor_id state='on' value='1234567890ab'/>
		...
	</hyperv>
	...
	<kvm>
	<hidden state='on'/>
	</kvm>
</features>
PCIパススルー設定

PCIパススルーするデバイスを特定

# lspci
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cedar [Radeon HD 5000/6000/7350/8350 Series]
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cedar HDMI Audio [Radeon HD 5400/6300 Series]

# lspci -n
01:00.0 0300: 1002:68f9
01:00.1 0403: 1002:aa68

仮想マシンの設定でPCIバイスを追加

<hostdev mode='subsystem' type='pci' managed='yes'>
  <source>
    <address domain='0' bus='0' slot='0x1a' function='0'/>
  </source>
</hostdev>
※lspci で追加したいデバイスが 01:00.0 の場合、bus='1' slot='0' function='0' を指定する。