Turritopsis Dohrnii Teo En Ming
2020-Feb-02 23:03 UTC
[Samba] [OFF TOPIC] Teo En Ming's Guide to GPU/VGA Passthrough of NVidia GeForce GTX1650 to Windows 10 Virtual Machine using Linux KVM on Ubuntu 18.04.3 LTS Desktop Edition
[OFF TOPIC]
Hi Rowland Penny,
Good morning from Singapore.
Do you think my guide is well written?
Primary Subject: Teo En Ming's Guide to GPU/VGA Passthrough of NVidia
GeForce GTX1650 to Windows 10 Virtual Machine using Linux KVM on Ubuntu 18.04.3
LTS Desktop Edition
Secondary Subject: Mr. Turritopsis Dohrnii Teo En Ming's Linux KVM GPU
Passthrough Project, Started 1st Feb 2020 Saturday late night before midnight
and completed
on 2nd Feb 2020 Sunday at 9:21 PM Singapore Time
PUBLISHED 2ND FEB 2020 SUNDAY AT 9:30 PM SINGAPORE TIME (VERSION 1.0)
REFERENCE
========
Heiko Sieger's blog: Running Windows 10 on Linux using KVM with VGA
Passthrough
Link:
https://heiko-sieger.info/running-windows-10-on-linux-using-kvm-with-vga-passthrough/
======================================================================================================================================
I am following Heiko Sieger's guide because I think it is very well written
and very well explained. Good job!
I need to come up with this guide for myself because the home desktop computer
which I have is specific and unique to me.
Turritopsis Dohrnii Teo En Ming's home desktop computer technical
specifications:
[1] Processor: AMD Ryzen 3 3200G with Radeon Vega 8 Graphics, 4 Cores, 4
Threads, 4.0 GHz Max Boost, 3.6 GHz Base
[2] Motherboard: Gigabyte B450M DS3H rev 1.0 Socket AM4 (BIOS Version: F41, BIOS
Date: 07/22/2019, BIOS ID: 8A16BG05)
[3] Memory: 8 GB Transcend DDR4-2666
[4] Integrated Graphics Device (IGD): AMD Radeon Vega 8 Graphics (for Linux
host)
[5] Discrete GPU on PCIe Slot 1: MSI GeForce GTX1650 Ventus XS OC Edition 4 GB
GDDR5 (for Windows 10 version 1709 virtual machine)
[6] Solid State Disk (SSD): 256 GB Transcend SSD (bare-metal Windows 10 version
1909 installation)
[7] Harddisk (HDD): Seagate Barracude 1 TB 3.5" Internal SATA (for
installing Ubuntu 18.04.3 LTS Desktop Edition host)
DETAILED INSTRUCTIONS
====================
Download ubuntu-18.04.3-desktop-amd64.iso from ubuntu.com (official website) and
burn it to a USB thumb drive using Universal USB Installer 1.9.9.0
from Pendrivelinux.com
Reboot computer.
Press DELETE to go into BIOS Setup.
Use the CLASSIC BIOS Interface.
Peripherals > Initial Display Output: IGD Video (Onboard Graphics)
M.I.T. > Advanced Frequency Settings > Advanced CPU Settings > SVM
Mode: Enabled
BIOS > Storage Boot Option Control: UEFI Only
BIOS > Other PCI Device ROM Priority: UEFI Only
Save BIOS settings and Exit.
Press F12 to go into Boot Menu.
Select the USB thumb drive containing Ubuntu 18.04.3 LTS (UEFI).
Select "Try Ubuntu without installing".
Double click "Install Ubuntu 18.04.3 LTS".
Welcome: English
Keyboard layout: English (US)
Select "Normal installation".
Uncheck "Download updates while installing Ubuntu".
Uncheck "Install third-party software for graphics and Wi-Fi hardware and
additional media formats".
Select "Erase disk and install Ubuntu".
Uncheck "Encrypt the new Ubuntu installation for security".
Uncheck "Use LVM with the new Ubuntu installation".
Select drive: SCSI1 (0,0,0) (sda) - 1.0 TB ATA ST1000DM010-2EP1 (Seagate
Barracuda).
Click Install Now.
Write the changes to disks? Continue.
Where are you? Singapore.
Your name: Turritopsis Dohrnii Teo En Ming
Your computer's name: ubuntu18043
Pick a username: teo-en-ming
Installation Complete: Click Restart Now.
Press F12 to go into Boot Menu.
Select ubuntu (Seagate 1 TB HDD).
Linux command: sudo nano /etc/default/grub
Contents of file:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=on"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx"
parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Linux command: sudo update-grub
Output:
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.3.0-28-generic
Found initrd image: /boot/initrd.img-5.3.0-28-generic
Found linux image: /boot/vmlinuz-5.0.0-23-generic
Found initrd image: /boot/initrd.img-5.0.0-23-generic
Found Windows Boot Manager on /dev/sdc2@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
Reboot the computer.
Linux command: sudo reboot
Linux command: dmesg | grep AMD-Vi
Output:
[ 0.572129] pci 0000:00:00.2: AMD-Vi: Unable to write to IOMMU perf counter.
[ 0.576192] pci 0000:00:00.2: AMD-Vi: Found IOMMU cap 0x40
[ 0.576193] pci 0000:00:00.2: AMD-Vi: Extended features (0x4f77ef22294ada):
[ 0.576195] AMD-Vi: Interrupt remapping enabled
[ 0.576195] AMD-Vi: Virtual APIC enabled
[ 0.576368] AMD-Vi: Lazy IO/TLB flushing enabled
[ 10.432967] AMD-Vi: AMD IOMMUv2 driver by Joerg Roedel <jroedel at
suse.de>
Linux command: cat /proc/cpuinfo | grep svm
Output:
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr
pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt
pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid
aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes
xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a
misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb
bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1
avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves
clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean
flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif
overflow_recov succor smca
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr
pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt
pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid
aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes
xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a
misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb
bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1
avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves
clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean
flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif
overflow_recov succor smca
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr
pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt
pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid
aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes
xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a
misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb
bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1
avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves
clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean
flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif
overflow_recov succor smca
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr
pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt
pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid
aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes
xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a
misalignsse 3dnowprefetch osvw skinit wdt tce topoext perfctr_core perfctr_nb
bpext perfctr_llc mwaitx cpb hw_pstate sme ssbd sev ibpb vmmcall fsgsbase bmi1
avx2 smep bmi2 rdseed adx smap clflushopt sha_ni xsaveopt xsavec xgetbv1 xsaves
clzero irperf xsaveerptr arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean
flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif
overflow_recov succor smca
Linux command: sudo apt install qemu-kvm qemu-utils seabios ovmf hugepages
cpu-checker
Linux command: lspci | grep VGA
Output:
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f82 (rev a1)
07:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI]
Picasso (rev c9)
Linux command: lspci -nn | grep 01:00.
Output:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1f82]
(rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10fa] (rev a1)
Bus numbers of NVidia GeForce GTX1650 GPU:
01:00.0
01:00.1
PCI IDs of NVidia GeForce GTX1650 GPU:
10de:1f82
10de:10fa
Linux command: for a in /sys/kernel/iommu_groups/*; do find $a -type l; done |
sort --version-sort
Output:
/sys/kernel/iommu_groups/7/devices/0000:01:00.0
/sys/kernel/iommu_groups/7/devices/0000:01:00.1
IOMMU Group: 7
Linux command: lsusb
Output:
Bus 001 Device 005: ID 0603:00f2 Novatek Microelectronics Corp. Keyboard (Labtec
Ultra Flat Keyboard)
Bus 001 Device 004: ID 056e:0107 Elecom Co., Ltd (wireless optical mouse)
Linux command: cat /sys/bus/pci/devices/0000:01:00.0/modalias
Output:
pci:v000010DEd00001F82sv00001462sd00008D92bc03sc00i00
Linux command: cat /sys/bus/pci/devices/0000:01:00.1/modalias
Output:
pci:v000010DEd000010FAsv00001462sd00008D92bc04sc03i00
Linux command: sudo nano /etc/modprobe.d/local.conf
Contents of file:
alias pci:v000010DEd00001F82sv00001462sd00008D92bc03sc00i00 vfio-pci
alias pci:v000010DEd000010FAsv00001462sd00008D92bc04sc03i00 vfio-pci
options vfio-pci ids=10de:1f82,10de:10fa
options vfio-pci disable_vga=1
Linux command: sudo nano /etc/modprobe.d/kvm.conf
Contents of file:
options kvm ignore_msrs=1
Linux command: sudo nano /etc/initramfs-tools/modules
Contents of file:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
vhost-net
Linux command: sudo update-initramfs -u
Output:
update-initramfs: Generating /boot/initrd.img-5.3.0-28-generic
I will configure bridge networking much later, after GPU Passthrough is
successful. GPU Passthrough is top priority. I must get it to work first.
REFERENCE
========
Link:
https://heiko-sieger.info/define-a-network-bridge-using-ubuntus-linux-mints-network-manager-application/
Download the latest VFIO drivers from
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
Linux command: fallocate -l 250G /home/teo-en-ming/win10.img
Linux command: kvm-ok
Output:
INFO: /dev/kvm exists
KVM acceleration can be used
Linux command: lsmod | grep kvm
Output:
kvm_amd 94208 0
ccp 86016 1 kvm_amd
kvm 651264 1 kvm_amd
irqbypass 16384 1 kvm
Reboot the computer.
Linux command: sudo reboot
Linux command: lsmod | grep kvm
Output:
kvm_amd 94208 0
ccp 86016 1 kvm_amd
kvm 651264 1 kvm_amd
irqbypass 16384 2 vfio_pci,kvm
Linux command: lsmod | grep vfio
Output:
vfio_pci 49152 0
irqbypass 16384 2 vfio_pci,kvm
vfio_virqfd 16384 1 vfio_pci
vfio_iommu_type1 28672 0
vfio 32768 2 vfio_iommu_type1,vfio_pci
Linux command: qemu-system-x86_64 --version
Output:
QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.21)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
Linux command: lspci -kn | grep -A 2 01:00
Output:
01:00.0 0300: 10de:1f82 (rev a1)
Subsystem: 1462:8d92
Kernel driver in use: vfio-pci
--
01:00.1 0403: 10de:10fa (rev a1)
Subsystem: 1462:8d92
Kernel driver in use: vfio-pci
Kernel driver in use is vfio-pci. It worked!
Linux command: dmesg | grep VFIO
Output:
[ 2.808675] VFIO - User Level meta-driver version: 0.3
Create Script to Start Windows 10 Virtual Machine with GPU Passthrough
=====================================================================
Linux command: sudo nano windows10vm.sh
Contents of file:
#!/bin/bash
vmname="windows10vm"
if ps -ef | grep qemu-system-x86_64 | grep -q multifunction=on; then
echo "A passthrough VM is already running." &
exit 1
else
# use pulseaudio
export QEMU_AUDIO_DRV=pa
export QEMU_PA_SAMPLES=8192
export QEMU_AUDIO_TIMER_PERIOD=99
export QEMU_PA_SERVER=/run/user/1000/pulse/native
cp /usr/share/OVMF/OVMF_VARS.fd /tmp/my_vars.fd
qemu-system-x86_64 \
-name $vmname,process=$vmname \
-machine type=pc,accel=kvm \
-cpu host,kvm=off \
-smp 3,sockets=1,cores=3,threads=1 \
-m 4G \
-balloon none \
-rtc clock=host,base=localtime \
-serial none \
-parallel none \
-soundhw hda \
-usb \
-device usb-host,vendorid=0x0603,productid=0x00f2 \
-device usb-host,vendorid=0x056e,productid=0x0107 \
-device vfio-pci,host=01:00.0,multifunction=on \
-device vfio-pci,host=01:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/tmp/my_vars.fd \
-boot order=dc \
-drive id=disk0,if=virtio,cache=none,format=raw,file=/home/teo-en-ming/win10.img
\
-drive file=/home/teo-en-ming/win10-1709.iso,index=1,media=cdrom \
-drive
file=/home/teo-en-ming/Downloads/virtio-win-0.1.173.iso,index=2,media=cdrom
#-netdev type=tap,id=net0,ifname=vmtap0,vhost=on \
#-device virtio-net-pci,netdev=net0,mac=00:16:3e:00:01:01
#-vga none \
#-nographic \
exit 0
fi
Linux command: sudo chmod +x windows10vm.sh
Linux command: sudo ./windows10vm.sh
Temporarily paused doing work at 2:41 AM in the morning on 2nd Feb 2020 Sunday.
Instructions for AMD Ryzen platforms
===================================
Link:
https://forums.linuxmint.com/viewtopic.php?f=231&t=212692&p=1340482#p1340482
Linux command: sudo add-apt-repository ppa:jacob/virtualisation
Uninstall qemu 2.11.1.
Linux command: sudo apt-get remove qemu-kvm qemu-utils
Install qemu 2.12
Linux command: sudo apt install qemu-kvm qemu-utils
ERROR: Windows 10 virtual machine keeps showing BSOD with IRQL NOT LESS OR EQUAL
Stop Code.
By the way, I am able to see the Tiano Core screen.
No matter what variables I play with in the shell script to start Windows 10 VM,
I always get BSOD IRQL NOT LESS OR EQUAL Stop Code. I am running out of options
already.
Please give me suggestions.
Questions
========
[1] Is MSI GeForce GTX1650 4 GB GDDR5 GPU not supported by Linux KVM for GPU
Passthrough?
[2] Do I need to upgrade the BIOS of my Gigabyte B450M DS3H Socket AM4
motherboard? I fear bricking my motherboard. It is a risky operation.
[3] Are there any other workarounds that I have to do for AMD Ryzen 3000 series
platform, in order to get GPU Passthrough to work?
I am looking forward to your replies.
Thank you very much!
Stopped troubleshooting at 5.19 AM Singapore Time on 2 Feb 2020 Sunday and went
to sleep.
Resumed troubleshooting at around 12 noon Singapore Time on 2 Feb 2020 Sunday.
Upgraded motherboard BIOS to version F50 using Q-Flash.
Linux command: sudo ./windows10vm.sh
Output:
qemu-system-x86_64: -balloon none: warning: This option is deprecated. Use
'--device virtio-balloon' to enable the balloon device.
qemu-system-x86_64: -device vfio-pci,host=01:00.0,multifunction=on: vfio error:
0000:01:00.0: group 0 is not viable
Please ensure all devices within the iommu_group are bound to their vfio bus
driver.
Linux command: for a in /sys/kernel/iommu_groups/*; do find $a -type l; done |
sort --version-sort
Output:
/sys/kernel/iommu_groups/0/devices/0000:00:01.0
/sys/kernel/iommu_groups/0/devices/0000:00:01.1
/sys/kernel/iommu_groups/0/devices/0000:00:01.2
/sys/kernel/iommu_groups/0/devices/0000:01:00.0
/sys/kernel/iommu_groups/0/devices/0000:01:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:02:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.2
/sys/kernel/iommu_groups/0/devices/0000:03:00.0
/sys/kernel/iommu_groups/0/devices/0000:03:01.0
/sys/kernel/iommu_groups/0/devices/0000:03:04.0
/sys/kernel/iommu_groups/0/devices/0000:05:00.0
/sys/kernel/iommu_groups/0/devices/0000:06:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.1
/sys/kernel/iommu_groups/1/devices/0000:00:08.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.0
/sys/kernel/iommu_groups/1/devices/0000:07:00.1
/sys/kernel/iommu_groups/1/devices/0000:07:00.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.3
/sys/kernel/iommu_groups/1/devices/0000:07:00.4
/sys/kernel/iommu_groups/1/devices/0000:07:00.6
/sys/kernel/iommu_groups/1/devices/0000:08:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.0
/sys/kernel/iommu_groups/3/devices/0000:00:18.1
/sys/kernel/iommu_groups/3/devices/0000:00:18.2
/sys/kernel/iommu_groups/3/devices/0000:00:18.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.4
/sys/kernel/iommu_groups/3/devices/0000:00:18.5
/sys/kernel/iommu_groups/3/devices/0000:00:18.6
/sys/kernel/iommu_groups/3/devices/0000:00:18.7
Linux command: sudo apt install inxi
Linux command: inxi -S
Output:
System: Host: ubuntu18043 Kernel: 5.3.0-28-generic x86_64 bits: 64 Desktop:
Gnome 3.28.4
Distro: Ubuntu 18.04.3 LTS
REFERENCE
========
Link: https://phoenixnap.com/kb/how-to-update-kernel-ubuntu
Linux command: sudo apt-add-repository ppa:teejee2008/ppa
Linux command: sudo apt-get update
Linux command: sudo apt-get install ukuu
Linux command: sudo ukuu-gtk
Ukuu: Ubuntu Kernel Update Utility
Installed Linux kernel 5.5.1 using Ukuu.
Linux command: uname -a
Output:
Linux ubuntu18043 5.5.1-050501-generic #202002011032 SMP Sat Feb 1 10:34:22 UTC
2020 x86_64 x86_64 x86_64 GNU/Linux
Linux command: for a in /sys/kernel/iommu_groups/*; do find $a -type l; done |
sort --version-sort
/sys/kernel/iommu_groups/0/devices/0000:00:01.0
/sys/kernel/iommu_groups/0/devices/0000:00:01.1
/sys/kernel/iommu_groups/0/devices/0000:00:01.2
/sys/kernel/iommu_groups/0/devices/0000:01:00.0
/sys/kernel/iommu_groups/0/devices/0000:01:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:02:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.2
/sys/kernel/iommu_groups/0/devices/0000:03:00.0
/sys/kernel/iommu_groups/0/devices/0000:03:01.0
/sys/kernel/iommu_groups/0/devices/0000:03:04.0
/sys/kernel/iommu_groups/0/devices/0000:05:00.0
/sys/kernel/iommu_groups/0/devices/0000:06:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.1
/sys/kernel/iommu_groups/1/devices/0000:00:08.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.0
/sys/kernel/iommu_groups/1/devices/0000:07:00.1
/sys/kernel/iommu_groups/1/devices/0000:07:00.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.3
/sys/kernel/iommu_groups/1/devices/0000:07:00.4
/sys/kernel/iommu_groups/1/devices/0000:07:00.6
/sys/kernel/iommu_groups/1/devices/0000:08:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.0
/sys/kernel/iommu_groups/3/devices/0000:00:18.1
/sys/kernel/iommu_groups/3/devices/0000:00:18.2
/sys/kernel/iommu_groups/3/devices/0000:00:18.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.4
/sys/kernel/iommu_groups/3/devices/0000:00:18.5
/sys/kernel/iommu_groups/3/devices/0000:00:18.6
/sys/kernel/iommu_groups/3/devices/0000:00:18.7
REFERENCE
========
https://queuecumber.gitlab.io/linux-acs-override/
Linux command: cd Downloads
Linux command: unzip artifacts.zip
Linux command: sudo dpkg -i linux-headers-5.4.10-acso_5.4.10-acso-1_amd64.deb
Linux command: sudo dpkg -i linux-image-5.4.10-acso_5.4.10-acso-1_amd64.deb
Linux command: sudo dpkg -i linux-libc-dev_5.4.10-acso-1_amd64.deb
Linux command: sudo reboot
Linux command: uname -a
Output:
Linux ubuntu18043 5.4.10-acso #1 SMP Thu Jan 9 10:30:12 UTC 2020 x86_64 x86_64
x86_64 GNU/Linux
Linux command: for a in /sys/kernel/iommu_groups/*; do find $a -type l; done |
sort --version-sort
Output:
/sys/kernel/iommu_groups/0/devices/0000:00:01.0
/sys/kernel/iommu_groups/0/devices/0000:00:01.1
/sys/kernel/iommu_groups/0/devices/0000:00:01.2
/sys/kernel/iommu_groups/0/devices/0000:01:00.0
/sys/kernel/iommu_groups/0/devices/0000:01:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:02:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.2
/sys/kernel/iommu_groups/0/devices/0000:03:00.0
/sys/kernel/iommu_groups/0/devices/0000:03:01.0
/sys/kernel/iommu_groups/0/devices/0000:03:04.0
/sys/kernel/iommu_groups/0/devices/0000:05:00.0
/sys/kernel/iommu_groups/0/devices/0000:06:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.1
/sys/kernel/iommu_groups/1/devices/0000:00:08.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.0
/sys/kernel/iommu_groups/1/devices/0000:07:00.1
/sys/kernel/iommu_groups/1/devices/0000:07:00.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.3
/sys/kernel/iommu_groups/1/devices/0000:07:00.4
/sys/kernel/iommu_groups/1/devices/0000:07:00.6
/sys/kernel/iommu_groups/1/devices/0000:08:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.0
/sys/kernel/iommu_groups/3/devices/0000:00:18.1
/sys/kernel/iommu_groups/3/devices/0000:00:18.2
/sys/kernel/iommu_groups/3/devices/0000:00:18.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.4
/sys/kernel/iommu_groups/3/devices/0000:00:18.5
/sys/kernel/iommu_groups/3/devices/0000:00:18.6
/sys/kernel/iommu_groups/3/devices/0000:00:18.7
Shifted GTX1650 GPU from PCIe Slot 1 to PCIe Slot 2
Linux Command: lspci | grep VGA
Output:
05:00.0 VGA compatible controller: NVIDIA Corporation Device 1f82 (rev a1)
06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI]
Picasso (rev c9)
Linux command: for a in /sys/kernel/iommu_groups/*; do find $a -type l; done |
sort --version-sort
Output:
/sys/kernel/iommu_groups/0/devices/0000:00:01.0
/sys/kernel/iommu_groups/0/devices/0000:00:01.2
/sys/kernel/iommu_groups/0/devices/0000:01:00.0
/sys/kernel/iommu_groups/0/devices/0000:01:00.1
/sys/kernel/iommu_groups/0/devices/0000:01:00.2
/sys/kernel/iommu_groups/0/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:02:01.0
/sys/kernel/iommu_groups/0/devices/0000:02:04.0
/sys/kernel/iommu_groups/0/devices/0000:04:00.0
/sys/kernel/iommu_groups/0/devices/0000:05:00.0
/sys/kernel/iommu_groups/0/devices/0000:05:00.1
/sys/kernel/iommu_groups/1/devices/0000:00:08.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.1
/sys/kernel/iommu_groups/1/devices/0000:00:08.2
/sys/kernel/iommu_groups/1/devices/0000:06:00.0
/sys/kernel/iommu_groups/1/devices/0000:06:00.1
/sys/kernel/iommu_groups/1/devices/0000:06:00.2
/sys/kernel/iommu_groups/1/devices/0000:06:00.3
/sys/kernel/iommu_groups/1/devices/0000:06:00.4
/sys/kernel/iommu_groups/1/devices/0000:06:00.6
/sys/kernel/iommu_groups/1/devices/0000:07:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.0
/sys/kernel/iommu_groups/3/devices/0000:00:18.1
/sys/kernel/iommu_groups/3/devices/0000:00:18.2
/sys/kernel/iommu_groups/3/devices/0000:00:18.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.4
/sys/kernel/iommu_groups/3/devices/0000:00:18.5
/sys/kernel/iommu_groups/3/devices/0000:00:18.6
/sys/kernel/iommu_groups/3/devices/0000:00:18.7
No improvement. Shift GTX1650 GPU back to PCIe slot 1.
Downgraded motherboard bios to version F42h using Q-flash.
Linux command: for a in /sys/kernel/iommu_groups/*; do find $a -type l; done |
sort --version-sort
Output:
/sys/kernel/iommu_groups/0/devices/0000:00:01.0
/sys/kernel/iommu_groups/0/devices/0000:00:01.1
/sys/kernel/iommu_groups/0/devices/0000:00:01.2
/sys/kernel/iommu_groups/0/devices/0000:01:00.0
/sys/kernel/iommu_groups/0/devices/0000:01:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:02:00.1
/sys/kernel/iommu_groups/0/devices/0000:02:00.2
/sys/kernel/iommu_groups/0/devices/0000:03:00.0
/sys/kernel/iommu_groups/0/devices/0000:03:01.0
/sys/kernel/iommu_groups/0/devices/0000:03:04.0
/sys/kernel/iommu_groups/0/devices/0000:05:00.0
/sys/kernel/iommu_groups/0/devices/0000:06:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.0
/sys/kernel/iommu_groups/1/devices/0000:00:08.1
/sys/kernel/iommu_groups/1/devices/0000:00:08.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.0
/sys/kernel/iommu_groups/1/devices/0000:07:00.1
/sys/kernel/iommu_groups/1/devices/0000:07:00.2
/sys/kernel/iommu_groups/1/devices/0000:07:00.3
/sys/kernel/iommu_groups/1/devices/0000:07:00.4
/sys/kernel/iommu_groups/1/devices/0000:07:00.6
/sys/kernel/iommu_groups/1/devices/0000:08:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.0
/sys/kernel/iommu_groups/2/devices/0000:00:14.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.0
/sys/kernel/iommu_groups/3/devices/0000:00:18.1
/sys/kernel/iommu_groups/3/devices/0000:00:18.2
/sys/kernel/iommu_groups/3/devices/0000:00:18.3
/sys/kernel/iommu_groups/3/devices/0000:00:18.4
/sys/kernel/iommu_groups/3/devices/0000:00:18.5
/sys/kernel/iommu_groups/3/devices/0000:00:18.6
/sys/kernel/iommu_groups/3/devices/0000:00:18.7
Downgraded motherboard BIOS to version F41 using Q-Flash.
Linux command: lspci | grep VGA
Output:
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f82 (rev a1)
07:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI]
Picasso (rev c9)
Linux command: for a in /sys/kernel/iommu_groups/*; do find $a -type l; done |
sort --version-sort
Output:
/sys/kernel/iommu_groups/0/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.1
/sys/kernel/iommu_groups/2/devices/0000:00:01.2
/sys/kernel/iommu_groups/3/devices/0000:00:08.0
/sys/kernel/iommu_groups/4/devices/0000:00:08.1
/sys/kernel/iommu_groups/5/devices/0000:00:14.0
/sys/kernel/iommu_groups/5/devices/0000:00:14.3
/sys/kernel/iommu_groups/6/devices/0000:00:18.0
/sys/kernel/iommu_groups/6/devices/0000:00:18.1
/sys/kernel/iommu_groups/6/devices/0000:00:18.2
/sys/kernel/iommu_groups/6/devices/0000:00:18.3
/sys/kernel/iommu_groups/6/devices/0000:00:18.4
/sys/kernel/iommu_groups/6/devices/0000:00:18.5
/sys/kernel/iommu_groups/6/devices/0000:00:18.6
/sys/kernel/iommu_groups/6/devices/0000:00:18.7
/sys/kernel/iommu_groups/7/devices/0000:01:00.0
/sys/kernel/iommu_groups/7/devices/0000:01:00.1
/sys/kernel/iommu_groups/8/devices/0000:02:00.0
/sys/kernel/iommu_groups/8/devices/0000:02:00.1
/sys/kernel/iommu_groups/8/devices/0000:02:00.2
/sys/kernel/iommu_groups/8/devices/0000:03:00.0
/sys/kernel/iommu_groups/8/devices/0000:03:01.0
/sys/kernel/iommu_groups/8/devices/0000:03:04.0
/sys/kernel/iommu_groups/8/devices/0000:05:00.0
/sys/kernel/iommu_groups/8/devices/0000:06:00.0
/sys/kernel/iommu_groups/9/devices/0000:07:00.0
/sys/kernel/iommu_groups/10/devices/0000:07:00.1
/sys/kernel/iommu_groups/10/devices/0000:07:00.2
/sys/kernel/iommu_groups/10/devices/0000:07:00.3
/sys/kernel/iommu_groups/10/devices/0000:07:00.4
/sys/kernel/iommu_groups/10/devices/0000:07:00.6
Conclusion:
Motherboard BIOS version F41 is still the best. BIOS versions F42h and F50
don't work at all.
With BIOS version F41, the IOMMU group is 7. Within IOMMU group 7, only NVIDIA
GTX1650 GPU exists.
With BIOS versions F42h and F50, the IOMMU group is 0 and there are too many
devices within this group (cannot work).
Using Linux kernel 5.5.1 encountered some problem.
Linux command: sudo ./windows10vm.sh
Output:
qemu-system-x86_64: -balloon none: warning: This option is deprecated. Use
'--device virtio-balloon' to enable the balloon device.
qemu-system-x86_64: -device vfio-pci,host=01:00.0,multifunction=on: vfio error:
0000:01:00.0: failed to open /dev/vfio/7: No such file or directory
Any changes in /etc/modprobe.d require you to update the initramfs. Enter at the
command line:
Linux command: sudo update-initramfs -u
Linux command: sudo reboot
Linux command: sudo update-grub
Linux command: sudo reboot
Linux kernel 5.5.1 is still having some issues with loading vfio-pci kernel
module.
Falling back to Linux kernel 5.3.0.
Checked. Linux kernel 5.3.0 has no issues. Use Linux kernel 5.3.0 all the way.
However, Windows 10 virtual machine still giving me BSOD with IRQL NOT LESS OR
EQUAL Stop Code.
2 Feb 2020 Sunday 5 PM Singapore Time: I am very lost. I don't know what to
do next. Some experts please help.
Thank you very much.
Resumed troubleshooting at 8.17 PM Singapore Time on 2 Feb 2020 Sunday.
REFERENCE
========
Discussion Thread: Gpu passthrough vfio blue screen
Link: https://forum.level1techs.com/t/gpu-passthrough-vfio-blue-screen/132808
According to this discussion thread, any Windows 10 version 1803 and above will
result in a BSOD with IRQL NOT LESS OR EQUAL Stop Code
during installation of the Windows 10 virtual machine.
I am going to download Windows 10 version 1709 from the following download link.
Link: https://tb.rg-adguard.net/public.php
Please remember to boot up Ubuntu 18.04.3 LTS Desktop Edition host using Linux
Kernel 5.3.0 and not Linux Kernel 5.5.1, which doesn't work at all.
Start Windows 10 version 1709 virtual machine with GPU Passthrough
Linux command: sudo ./windows10vm.sh
Windows 10 version 1709 virtual machine completed installation successfully.
During the installation of Windows 10 version 1709 virtual machine, it would not
be able to find any virtual harddisk.
Simply install the virtio driver and Windows 10 version 1709 virtual machine
will be able to detect the virtual harddisk of 250 GB.
Windows 10 version 1709 virtual machine completed installation successfully.
My Windows 10 version 1709 virtual machine already has an internet connection.
So I will not be configuring bridged networking at the moment.
Device Manager > Display adapters > NVIDIA GeForce GTX 1650
NVIDIA GeForce GTX 1650: This device is working properly.
Congratulations to myself! Teo En Ming has successfully passed through MSI
GeForce GTX 1650 4 GB GDDR5 GPU to Windows 10 version 1709 virtual machine
using Linux KVM on Ubuntu 18.04.3 LTS Desktop Edition host with a 5.3.0 Linux
Kernel.
I am going to do photo editing and 4K UHD video rendering in this Windows 10
1709 virtual machine with GPU Passthrough.
Confirmed Working Script to Start Windows 10 Virtual Machine with GPU
Passthrough
================================================================================
#!/bin/bash
vmname="windows10vm"
if ps -ef | grep qemu-system-x86_64 | grep -q multifunction=on; then
echo "A passthrough VM is already running." &
exit 1
else
# use pulseaudio
export QEMU_AUDIO_DRV=pa
export QEMU_PA_SAMPLES=8192
export QEMU_AUDIO_TIMER_PERIOD=99
export QEMU_PA_SERVER=/run/user/1000/pulse/native
cp /usr/share/OVMF/OVMF_VARS.fd /tmp/my_vars.fd
qemu-system-x86_64 \
-name $vmname,process=$vmname \
-machine type=pc,accel=kvm \
-cpu host,kvm=off \
-smp 3,sockets=1,cores=3,threads=1 \
-m 4G \
-balloon none \
-rtc clock=host,base=localtime \
-serial none \
-parallel none \
-soundhw hda \
-usb \
-device usb-host,vendorid=0x0603,productid=0x00f2 \
-device usb-host,vendorid=0x056e,productid=0x0107 \
-device vfio-pci,host=01:00.0,multifunction=on \
-device vfio-pci,host=01:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/tmp/my_vars.fd \
-boot order=dc \
-drive id=disk0,if=virtio,cache=none,format=raw,file=/home/teo-en-ming/win10.img
\
-drive file=/home/teo-en-ming/win10-1709.iso,index=1,media=cdrom \
-drive
file=/home/teo-en-ming/Downloads/virtio-win-0.1.173.iso,index=2,media=cdrom
#-netdev type=tap,id=net0,ifname=vmtap0,vhost=on \
#-device virtio-net-pci,netdev=net0,mac=00:16:3e:00:01:01
#-vga none \
#-nographic \
exit 0
fi
-----END OF TURRITOPSIS DOHRNII TEO EN MING'S GUIDE-----
-----BEGIN EMAIL SIGNATURE-----
The Gospel for all Targeted Individuals (TIs):
[The New York Times] Microwave Weapons Are Prime Suspect in Ills of
U.S. Embassy Workers
Link:
https://www.nytimes.com/2018/09/01/science/sonic-attack-cuba-microwave.html
********************************************************************************************
Singaporean Mr. Turritopsis Dohrnii Teo En Ming's Academic
Qualifications as at 14 Feb 2019 and refugee seeking attempts at the United
Nations Refugee Agency Bangkok (21 Mar 2017), in Taiwan (5 Aug 2019) and
Australia (25 Dec 2019 to 9 Jan 2020):
[1] https://tdtemcerts.wordpress.com/
[2] https://tdtemcerts.blogspot.sg/
[3] https://www.scribd.com/user/270125049/Teo-En-Ming
-----END EMAIL SIGNATURE-----
Rowland penny
2020-Feb-03 09:16 UTC
[Samba] [OFF TOPIC] Teo En Ming's Guide to GPU/VGA Passthrough of NVidia GeForce GTX1650 to Windows 10 Virtual Machine using Linux KVM on Ubuntu 18.04.3 LTS Desktop Edition
On 02/02/2020 23:03, Turritopsis Dohrnii Teo En Ming via samba wrote:> [OFF TOPIC] > > Hi Rowland Penny, > > Good morning from Singapore. > > Do you think my guide is well written?No idea, I gave up reading it when I realised it had nothing to do with Samba and is aimed at getting win 10 running in a VM on YOUR hardware. Please do not post things like this to the Samba mailing, it is meant for discussing Samba. Perhaps try the Ubuntu mailing list ? Rowland
Possibly Parallel Threads
- "failed to setup INTx fd: Operation not permitted" error when using PCI passthrough
- Re: PCI Passthrough and Surprise Hotplug
- PCI Passthrough and Surprise Hotplug
- Re: PCI passthrough fails in virsh: iommu group is not viable
- About the vfio error when using SR-IOV