我找到一个指南,它告诉我执行以下操作以使 GPU 直通在 20.04 上正常工作
apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager ovmf
lspci -nn
返回
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA104 [GeForce RTX 3060 Ti Lite Hash Rate] [10de:2489] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GA104 High Definition Audio Controller [10de:228b] (rev a1)
/etc/默认/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on kvm.ignore_msrs=1 vfio-pci.ids=10de:2489,10de:228b"
然后
update-grub
但是当我重新启动时,屏幕一片黑。22.04 的流程是否不同?i9-12900k 是 CPU
答案1
安装了 NOUVEAU 驱动程序的 Ubuntu GPU 直通指南
本指南已在 Ubuntu 22.04 LTS、22.10、23.04、23.10 上进行了测试,新派驱动程序和以下系统配置:
- MSI® 主板 Z170A
- 英特尔® 酷睿™ i5-6600 处理器
- GeForce GTX 1650 AERO ITX 4G OC。
注意力!本指南仅适用于 Nouveau 驱动程序。请在开始系统更改之前仔细阅读文本。对于安装了专有 nvidia 驱动程序的 ubuntu,请参阅指南:安装了 NVIDIA 专有驱动程序的 Ubuntu GPU 直通指南。
本指南所需的硬件规格
对于基于 Intel 的系统:
对于基于 AMD 的系统:
带有集成显卡的主板(用于操作)
带有 AMD-V、AMD-Vi 和集成显卡的 CPU
具有 GPU 直通支持的独立显卡(用于直通)
具有两个输入(如 Displayport、D-SUB、DVI、HDMI)的显示器或带显示器的切换盒或两个显示器。
看列表IOMMU 支持硬件(列表可能不完整)。
重要的: 为了提高客户机的生产力,请在额外的物理磁盘上安装客户机操作系统(直通解决方案)。此外,您还需要 8GB内存为了操作系统(操作系统)和 8GB RAM 用于客户机,16GB RAM 可能会显著增加您的HDD 的或者SSD性能和寿命。
必需步骤
对于基于英特尔的系统,启用英特尔虚拟化技术 (VT-x) 和英特尔 VT-D 技术
对于基于 AMD 的系统,启用 SVM 模式。
第2步。将 BIOS 设置为使用集成显卡作为主启动设备
注意力!如果您使用专为直通 PCI-Express 图形设备设计的系统启动系统,则会出现错误代码 43。
步骤3.检查IO管理单元支持您的 CPU
对于 AMD 处理器:
$ cat /proc/cpuinfo | grep --color svm
对于 Intel 处理器:
$ cat /proc/cpuinfo | grep --color vmx
您应该看到突出显示的文本 svm 或 vmx。
步骤4。启用 IOMMU
$ sudo nano /etc/default/grub
将以下选项添加到 GRUB_CMDLINE_LINUX_DEFAULT=""
对于 AMD 处理器:
amd_iommu=on kvm.ignore_msrs=1
对于 Intel 处理器:
intel_iommu=on kvm.ignore_msrs=1
步骤 5.更新 GRUB
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
步骤6.重新启动系统
步骤 7.检查 IOMMU 是否已启用
$ sudo dmesg | grep -i -e DMAR -e IOMMU
您应该会看到如下消息:
[ 0.123456] pci 0000:09:00.0: Adding to iommu group 1
[ 0.234567] pci 0000:0a:00.0: Adding to iommu group 2
[ 0.345678] DMAR: Intel(R) Virtualization Technology for Directed I/O
步骤8.查找您的设备
$ lspci -nnk
您应该看到如下文本:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10aa:10bb] (rev a1) (prog-if 00 [VGA controller])
Subsystem: Micro-Star International Co., Ltd. [MSI] TU117 [GeForce GTX 1650] [0101:a1a1]
Flags: bus master, fast devsel, latency 0, IRQ 151, IOMMU group 1
Memory at de000000 (32-bit, non-prefetchable) [size=16M]
Memory at c0000000 (64-bit, prefetchable) [size=256M]
Memory at d0000000 (64-bit, prefetchable) [size=32M]
I/O ports at e000 [size=128]
Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: <access denied>
Kernel driver in use: nouveau
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation Device [01cc:01ee] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [0202:a2a2]
Flags: bus master, fast devsel, latency 0, IRQ 17, IOMMU group 1
Memory at df080000 (32-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
如果您看到如下文本“正在使用的内核驱动程序:nvidia”:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10aa:10bb] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] TU117 [GeForce GTX 1650] [0101:a1a1]
Kernel driver in use: nvidia
Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia
01:00.1 Audio device [0403]: NVIDIA Corporation Device [01cc:01ee] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [0202:a2a2]
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
您的系统使用 NVIDIA所有权驱动程序。您需要删除所有旧视频驱动程序。以下是删除所有旧视频驱动程序并重新安装 nouveau 的方法:
$ sudo nvidia-settings --uninstall
$ sudo apt-get remove --purge nvidia*
$ sudo apt-get remove --purge xserver-xorg-video-nouveau
$ sudo apt-get remove --purge xserver-xorg-video-nv
$ sudo apt-get install nvidia-common
$ sudo apt-get install xserver-xorg-video-nouveau
$ sudo apt-get install xserver-xorg-video-all
$ sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri
$ sudo apt-get install --reinstall xserver-xorg-core
$ sudo dpkg-reconfigure xserver-xorg
或者运行以下命令:
$ software-properties-gtk --open-tab=4
选择选项“X.Org X 服务器 - 来自 xserver-xorg-video-nouveau 的 Nouveau 显示驱动程序(开源)”
运行自动删除:
$ sudo apt autoremove
然后重新启动系统并重复步骤 8。
步骤 9.创建一个名为 vfio.conf 的新文件
$ sudo nano /etc/modprobe.d/vfio.conf
在 STEP 8 中添加以下带有设备 ID 的行:
blacklist nouveau
blacklist snd_hda_intel
options vfio-pci ids=10aa:10bb,01cc:01ee
步骤 10.更新现有的 initramfs
$ sudo update-initramfs -u
步骤11。重新启动系统
步骤12。确保一切正常
$ lspci -nnk
您应该看到如下所示的文本,文本中不应出现“正在使用的内核驱动程序:nouveau”和“正在使用的内核驱动程序:snd_hda_intel”这两行:
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10aa:10bb] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] TU117 [GeForce GTX 1650] [0101:a1a1]
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device [0403]: NVIDIA Corporation Device [01cc:01ee] (rev a1)
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [0202:a2a2]
Kernel modules: snd_hda_intel
步骤13。使用虚拟管理器创建一个新的客户机
安装虚拟机
$ sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
添加用户
注意:对于较新版本的 Linux 内核,请尝试 libvirt。
$ sudo adduser username libvirtd
如果您遇到组问题“adduser:组'libvirtd'不存在。”请尝试:
$ sudo addgroup libvirtd
安装 VirtManager
$ sudo apt-get install virt-manager
使用自定义配置创建新的客户机。
$ virt-manager
如果收到“确保libvirtd
守护进程正在运行”错误,请重新启动并重试。
可选:要在其他物理磁盘上安装客户操作系统,请取消选中“为此虚拟机启用存储”复选框
你必须:
- 选择“Q35”芯片组和“UEFI
x86_64:/usr/share/OVMF/OVMF_CODE_4M.ms.fd”固件或类似固件
- 添加用于 GPU 直通的 PCI 主机设备
可选:要在其他物理磁盘上安装客户机操作系统,请选择主机设备 - 物理 SSD M.2 或 SATA 3.0 PCIe Gen3 x1 卡(用于 SATA SSD/HDD)
- 设置 QXL 视频驱动程序和 SPICE 客户端以使用“地址”
监听类型进行显示。
步骤14。编辑来宾机器
$ virsh list --all
$ sudo virsh edit YourGuestMachineName
添加以下行:
<vendor_id state='on' value='1234567890ab'/>
<kvm>
<hidden state='on'/>
</kvm>
<ioapic driver='kvm'/>
最终结果应该是这样的:
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vendor_id state='on' value='1234567890ab'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
<ioapic driver='kvm'/>
</features>
编辑完成后,使用 CTRL+x 保存更改。
步骤15。运行客户机
可选:如果您要将客户操作系统安装在额外的物理磁盘上,请启动客户机并在适当的时候按下 BIOS 输入键 F2。将物理磁盘设备设置为可启动。
笔记
如果您想使用 PCI-Express 图形设备作为主启动设备,请执行以下操作:
$ sudo nano /etc/modprobe.d/vfio.conf
将以下行更改为 STEP 8 中的设备 ID:
blacklist nouveau
blacklist snd_hda_intel
options vfio-pci ids=10aa:10bb,01cc:01ee
和:
#blacklist nouveau
#blacklist snd_hda_intel
#options vfio-pci ids=10aa:10bb,01cc:01ee
更新现有的 initramfs
$ sudo update-initramfs -u
重新启动系统并将 BIOS 设置为使用 PCI-Express 图形设备作为主启动设备。
也可以看看
指导:在另一个分区上创建 qcow2 磁盘映像文件。
故障排除
问题:模拟器可能没有路径“/*.qcow2”的搜索权限
行动:
- 使用 sudo 权限运行 virt-manager 或使用 chown、chgrp、chmod 命令进行修复。请参阅此处的步骤指导。
问题:启动域时出错:无法访问存储文件 '/*.qcow2' (as uid:10101, gid:101): 权限被拒绝
行动:
- 使用 sudo 权限运行 virt-manager 或使用 chown、chgrp、chmod 命令进行修复。请参阅此处的步骤指导。
问题:重新启动系统后不显示 Gnome 登录屏幕。
行动:
- 您的系统可能使用集成显卡启动,而 vaio.conf 文件缺失、为空、包含不正确的文本或步骤 9 中描述的行以 # 字符开头。检查步骤 9。
问题:客户机启动正常,但我看到 PCI-Express 图形设备的输出出现黑屏。
行动:
检查电缆连接和显示器的设置
检查步骤 1、2、14
在 Windows 上安装正确的设备驱动程序
在 Windows 上卸载并重新安装设备驱动程序
在 Windows 上更新设备驱动程序
问题:使用 USB 重定向器时,网络摄像头、USB 音频接口、USB HDD/SSD 等设备无法正常工作。
行动:
- 使用额外的 PCIe USB 卡,必须支持 IOMMU(PCIe 卡直通解决方案)。
问题:搭载 Windows 10 操作系统的客户机出现间歇性声音并伴有噼啪声。
行动:
- 使用通用内核
- 在 Ubuntu 中禁用 WiFi
- 为了提高客户机的性能,请将 Ubuntu 操作系统上的 CPU 调节器设置为“性能”
- 如果您使用的是内置声卡的 HDA (ICH9) 或 HDA (ICH6) 型号,请将 vCPU 数量设置为逻辑主机 CPU 数量的一半
- 如果你使用额外的PCIe第三代 x4USB3.2 卡(PCIe 卡直通解决方案)带有 USB 音频接口,参考物理 CPU 拓扑手动设置处理器拓扑(插槽、核心、线程)
- 如果您使用带有 USB 音频接口的附加 PCIe Gen3 x4 USB 3.2 卡(PCIe 卡直通解决方案),请尝试不同的音频接口驱动程序版本
- 如果操作系统 Ubuntu 已转换为 Ubuntu Studio,请尝试恢复所有更改
- 安装干净的 Ubuntu 操作系统并重试。
问题:我的客户机器冻结,因此我的 USB 音频接口崩溃(使用额外的 PCIe Gen3 x4 USB 3.2 卡的直通解决方案)。
行动:
确保根目录有大约 8 GB 的可用空间
从您的客户机中删除未使用的虚拟硬件(声音、网络、控制器、通道、USB 重定向)
在虚拟机管理器中,转到“编辑”>“连接详细信息”,然后通过“虚拟网络”选项卡取消选中“启动时”
重新启动系统
在 Ubuntu 中禁用 WiFi
将 Ubuntu 操作系统上的 CPU 调速器设置为“性能”
- 安装调整
$ sudo apt install tuned
- 实验性地运行以下命令
(每次启动电脑时都需要这些命令)
$ sudo tuned-adm profile virtual-host && sudo systemctl enable tuned && tuned-adm active
对于 Ubuntu 23.04、23.10
- 运行以下命令
$ virt-manager
$ htop -t -F libvirtd
结果看起来应该是这样的:
[Main] [I/O]
PID△USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
976 root 20 0 1602M 36044 22348 S 0.0 0.2 0:01.32 ├─ /usr/sbin/libvirtd --timeout 120
.
.
999 root 20 0 1602M 36044 22348 S 0.0 0.2 0:00.00 │ ├─ /usr/sbin/libvirtd --timeout 120
1001 root 20 0 1602M 36044 22348 S 0.0 0.2 0:00.00 │ └─ /usr/sbin/libvirtd --timeout 120
5905 username 20 0 140M 132M 3584 R 50.0 0.0 0:00.10 │ │ └─ htop -t -F libvirt
- 使用 libvirtd 的最低 PID 值运行以下命令
$ sudo renice -20 -g <PID>
$ sudo chrt -a -r -p 99 <PID>
- 运行以下命令
$ htop -t -F libvirtd
最终结果应该是这样的:
[Main] [I/O]
PID△USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
976 root RT -20 1602M 36044 22348 S 0.0 0.2 0:01.32 ├─ /usr/sbin/libvirtd --timeout 120
.
.
999 root RT -20 1602M 36044 22348 S 0.0 0.2 0:00.00 │ ├─ /usr/sbin/libvirtd --timeout 120
1001 root RT -20 1602M 36044 22348 S 0.0 0.2 0:00.00 │ └─ /usr/sbin/libvirtd --timeout 120
5905 username 20 0 140M 132M 3584 R 50.0 0.0 0:00.10 │ │ └─ htop -t -F libvirt
- 运行您的客户机
对于 Ubuntu 22.04 LTS、22.10
注意:也许在 Ubuntu 22.04 LTS、22.10 更新之后,该过程将变得类似于 Ubuntu 23.04 或 23.10 的过程。
运行您的客户机
运行以下命令
$ htop -t
结果看起来应该是这样的:
[Main] [I/O]
PID▽USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
10011 root 20 0 0 0 0 S 0.0 0.0 0:01.17 ├─ 9998
10005 root 20 0 0 0 0 S 0.0 0.0 0:00.11 ├─ kvm-nx-lpage-recovery-9998
10004 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 └─ kvm
1 root 20 0 166M 13300 7344 S 0.0 0.1 0:04.02 init
9998 libvirt-qe 20 0 11.1G 8371M 11796 S 93.0 52.7 2h35:34 ├─ qemu-system-x86_64 -name guest=username,debug-threads=on -S -object {"qom-type":"secret","
18086 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:00.00 │ ├─ worker
10012 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:20.20 │ ├─ SPICE Worker
10010 libvirt-qe 20 0 11.1G 8371M 11796 S 9.3 52.7 18:42.97 │ ├─ CPU 3/KVM
10009 libvirt-qe 20 0 11.1G 8371M 11796 S 27.9 52.7 18:31.20 │ ├─ CPU 2/KVM
10008 libvirt-qe 20 0 11.1G 8371M 11796 R 18.6 52.7 25:01.04 │ ├─ CPU 1/KVM
10007 libvirt-qe 20 0 11.1G 8371M 11796 R 9.3 52.7 1h08:06 │ ├─ CPU 0/KVM
10006 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:25.50 │ ├─ IO mon_iothread
10002 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:00.11 │ └─ qemu-system-x86_64 -name guest=username,debug-threads=on -S -object {"qom-type":"secret
9990 root 20 0 80140 13292 11496 S 0.0 0.1 0:00.00 ├─ virtlogd
1644 username 20 0 19456 10288 7352 S 0.0 0.1 0:00.58 ├─ systemd --user
9903 username 20 0 937M 89440 39952 S 0.0 0.5 0:40.61 │ └─ python3 /usr/bin/virt-manager
9908 username 20 0 937M 89440 39952 S 0.0 0.5 0:07.74 │ ├─ virt-manager
9907 username 20 0 937M 89440 39952 S 0.0 0.5 0:00.00 │ ├─ dconf worker
9906 username 20 0 937M 89440 39952 S 0.0 0.5 0:00.00 │ ├─ gdbus
9904 username 20 0 937M 89440 39952 S 0.0 0.5 0:00.00 │ └─ gmain
960 root 20 0 1526M 34408 19836 S 0.0 0.2 0:22.20 └─ libvirtd
10001 root 20 0 1526M 34408 19836 S 0.0 0.2 0:08.64 ├─ vm-username
1014 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.06 ├─ udev-event
990 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ gdbus
989 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ gmain
986 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
985 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
984 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
983 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
982 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
975 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.22 ├─ prio-rpc-libvir
974 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.22 ├─ prio-rpc-libvir
973 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.23 ├─ prio-rpc-libvir
972 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.21 ├─ prio-rpc-libvir
971 root 20 0 1526M 34408 19836 S 0.0 0.2 0:00.23 ├─ prio-rpc-libvir
970 root 20 0 1526M 34408 19836 S 0.0 0.2 0:02.15 ├─ rpc-libvirtd
969 root 20 0 1526M 34408 19836 S 0.0 0.2 0:02.11 ├─ rpc-libvirtd
968 root 20 0 1526M 34408 19836 S 0.0 0.2 0:02.19 ├─ rpc-libvirtd
967 root 20 0 1526M 34408 19836 S 0.0 0.2 0:02.09 ├─ rpc-libvirtd
966 root 20 0 1526M 34408 19836 S 0.0 0.2 0:02.04 └─ rpc-libvirtd
- 为所有根进程设置 NI(nice)值 -5(每次启动或重新启动操作系统时都需要此项)
$ sudo renice -5 -u root
- 为 qemu-system-x86_64 (9998)、virt-manager、libvirtd、kvm-nx-lpage-recovery-****、kvm、virtlogd 命令设置 NI(nice)值 -20(每次启动客户机时都需要此项)
显示命令 qemu-system-x86_64 (9998)、virt-manager、libvirtd 的所有正在运行的线程
example: $ sudo ps -Ljf <PID>
$ ps -Ljf 9998 9903 960
对于命令 qemu-system-x86_64 (9998)、virt-manager、libvirtd 运行:
example: $ sudo renice -20 -g <PGID>
$ sudo renice -20 -g 9997 9903 960
对于命令 kvm-nx-lpage-recovery-9998、kvm、virtlogd 运行:
example: $ sudo renice -20 <PID>
$ sudo renice -20 10005 10004 9990
- 将命令 kvm-nx-lpage-recovery-9998、kvm、qemu-system-x86_64 (9998)、virtlogd、virt-manager、libvirtd 设置为实时(每次启动客户机时都需要此项)
$ sudo chrt -a -r -p 99 10005
$ sudo chrt -a -r -p 99 10004
$ sudo chrt -a -r -p 99 9998
$ sudo chrt -a -r -p 99 9990
$ sudo chrt -a -r -p 99 9903
$ sudo chrt -a -r -p 99 960
- 运行 htop
$ htop -t
最终结果应该是这样的:
[Main] [I/O]
PID▽USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
2 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd
10011 root RT -20 0 0 0 S 0.0 0.0 0:01.17 ├─ 9998
10005 root RT -20 0 0 0 S 0.0 0.0 0:00.11 ├─ kvm-nx-lpage-recovery-9998
10004 root RT -20 0 0 0 I 0.0 0.0 0:00.00 └─ kvm
1 root 20 -5 166M 13300 7344 S 0.0 0.1 0:04.02 init
9998 libvirt-qe RT -20 11.1G 8371M 11796 S 93.0 52.7 2h35:34 ├─ qemu-system-x86_64 -name guest=username,debug-threads=on -S -object {"qom-type":"secret","
18086 libvirt-qe RT -20 11.1G 8371M 11796 S 0.0 52.7 0:00.00 │ ├─ worker
10012 libvirt-qe RT -20 11.1G 8371M 11796 S 0.0 52.7 0:20.20 │ ├─ SPICE Worker
10010 libvirt-qe RT -20 11.1G 8371M 11796 S 9.3 52.7 18:42.97 │ ├─ CPU 3/KVM
10009 libvirt-qe RT -20 11.1G 8371M 11796 S 27.9 52.7 18:31.20 │ ├─ CPU 2/KVM
10008 libvirt-qe RT -20 11.1G 8371M 11796 R 18.6 52.7 25:01.04 │ ├─ CPU 1/KVM
10007 libvirt-qe RT -20 11.1G 8371M 11796 R 9.3 52.7 1h08:06 │ ├─ CPU 0/KVM
10006 libvirt-qe RT -20 11.1G 8371M 11796 S 0.0 52.7 0:25.50 │ ├─ IO mon_iothread
10002 libvirt-qe RT -20 11.1G 8371M 11796 S 0.0 52.7 0:00.11 │ └─ qemu-system-x86_64 -name guest=username,debug-threads=on -S -object {"qom-type":"secret
9990 root RT -20 80140 13292 11496 S 0.0 0.1 0:00.00 ├─ virtlogd
1644 username 20 0 19456 10288 7352 S 0.0 0.1 0:00.58 ├─ systemd --user
9903 username RT -20 937M 89440 39952 S 0.0 0.5 0:40.61 │ └─ python3 /usr/bin/virt-manager
9908 username RT -20 937M 89440 39952 S 0.0 0.5 0:07.74 │ ├─ virt-manager
9907 username RT -20 937M 89440 39952 S 0.0 0.5 0:00.00 │ ├─ dconf worker
9906 username RT -20 937M 89440 39952 S 0.0 0.5 0:00.00 │ ├─ gdbus
9904 username RT -20 937M 89440 39952 S 0.0 0.5 0:00.00 │ └─ gmain
960 root RT -20 1526M 34408 19836 S 0.0 0.2 0:22.20 └─ libvirtd
10001 root RT -20 1526M 34408 19836 S 0.0 0.2 0:08.64 ├─ vm-username
1014 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.06 ├─ udev-event
990 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ gdbus
989 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ gmain
986 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
985 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
984 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
983 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
982 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.00 ├─ rpc-admin
975 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.22 ├─ prio-rpc-libvir
974 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.22 ├─ prio-rpc-libvir
973 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.23 ├─ prio-rpc-libvir
972 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.21 ├─ prio-rpc-libvir
971 root RT -20 1526M 34408 19836 S 0.0 0.2 0:00.23 ├─ prio-rpc-libvir
970 root RT -20 1526M 34408 19836 S 0.0 0.2 0:02.15 ├─ rpc-libvirtd
969 root RT -20 1526M 34408 19836 S 0.0 0.2 0:02.11 ├─ rpc-libvirtd
968 root RT -20 1526M 34408 19836 S 0.0 0.2 0:02.19 ├─ rpc-libvirtd
967 root RT -20 1526M 34408 19836 S 0.0 0.2 0:02.09 ├─ rpc-libvirtd
966 root RT -20 1526M 34408 19836 S 0.0 0.2 0:02.04 └─ rpc-libvirtd
使用“q”停止
- 如果问题未完全解决,请尝试使用较少的 CPU 核心。参考物理 CPU 拓扑,将核心数设置为一半。例如,Intel® Core™ i5-6600 处理器有 4 个核心。要使用一半的核心数,请将 CPU 拓扑设置为 1 个插槽、2 个核心、1 个线程。
- 增加音频接口的 ASIO 驱动程序的缓冲区大小。
问题:访问 qcow2 磁盘映像(虚拟磁盘)时 CPU 负载过重。使用样本库的虚拟机上出现间歇性声音和噼啪声。
行动:
- 将虚拟磁盘缓存模式设置为不安全
- 直通额外的物理 SSD M.2 或直通额外的 SATA 3.0 PCIe Gen3 x1 卡用于 SATA SSD/HDD。
问题:在 Windows 10 系统上,USB 设备(HDD/SSD、网络摄像头、Midi 键盘)几分钟不活动后就会停止响应。
行动:
- 通过电源选项禁用 USB 选择性暂停
- 防止 Windows 10 操作系统通过设备管理器关闭通用超高速 USB 集线器、通用 USB 集线器、USB 根集线器设备以节省电量。
参考
答案2
安装了 NVIDIA 专有驱动程序的 Ubuntu GPU 直通指南
本指南在 Ubuntu 23.10、24.04 LTS 上进行了测试,采用了 NVIDIA 专有驱动程序和以下系统配置:
- MSI® 主板 Z170A
- 英特尔® 酷睿™ i5-6600 处理器
- GeForce GTX 1650 AERO ITX 4G OC。
注意力!本指南仅适用于基于 Intel CPU 的系统。在开始系统更改之前,请仔细阅读文本。
本指南所需的硬件规格
带有集成显卡的主板(用于操作)
带有 VT-x、VT-d 和处理器显卡的英特尔 CPU
独立 NVIDIA 显卡,支持 GPU 直通(用于直通)
具有两个输入(如 Displayport、D-SUB、DVI、HDMI)的显示器或带显示器的切换盒或两个显示器。
必需步骤
步骤1。在 BIOS 中启用硬件辅助虚拟化
启用英特尔虚拟化技术 (VT-x) 和英特尔 VT-D 技术
第2步。将 BIOS 设置为使用集成显卡作为主启动设备(重要)
步骤3.检查您的英特尔 CPU 是否支持 IOMMU
$ cat /proc/cpuinfo | grep --color vmx
您应该看到突出显示的文本 vmx。
步骤4。启用 IOMMU
$ sudo nano /etc/default/grub
将以下选项添加到 GRUB_CMDLINE_LINUX_DEFAULT="":
intel_iommu=on kvm.ignore_msrs=1
步骤 5.更新 GRUB
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
步骤6.重新启动系统
步骤 7.检查 IOMMU 是否已启用
$ sudo dmesg | grep -i -e DMAR -e IOMMU
您应该会看到如下消息:
[ 0.123456] pci 0000:09:00.0: Adding to iommu group 1
[ 0.234567] pci 0000:0a:00.0: Adding to iommu group 2
[ 0.345678] DMAR: Intel(R) Virtualization Technology for Directed I/O
步骤8.安装 NVIDIA 专有驱动程序
$ software-properties-gtk --open-tab=4
选择选项“使用来自 nvidia-driver-XXX 的 NVIDIA 驱动程序元包(专有,已测试)”
步骤 9.安装 nvidia-prime
$ sudo apt install nvidia-prime
步骤 10.重新启动系统
步骤11。将集成显卡设置为主要
$ sudo prime-select intel
步骤12。检查集成显卡是否设置为主显卡
$ sudo prime-select query
你必须看到“情报”
步骤13。重新启动系统
步骤14。使用 VirtManager 创建新的客户机
参见步骤 13指南:安装了 NOUVEAU 驱动程序的 Ubuntu GPU 直通指南
步骤15。编辑来宾机器
参见步骤 14指南:安装了 NOUVEAU 驱动程序的 Ubuntu GPU 直通指南
步骤16。运行客户机
笔记
如果您想使用 NVIDIA 图形设备作为主启动设备,请执行以下操作:
将 NVIDIA 图形设备设置为主要
$ sudo prime-select nvidia
检查 NVIDIA 图形设备是否设置为主要
$ sudo prime-select query
你必须看到“nvidia”
重新启动系统
$ sudo reboot
故障排除
请参阅故障排除指南:安装了 NOUVEAU 驱动程序的 Ubuntu GPU 直通指南