Too*_*day 11 virtualization qemu pcie
我找到了一个指南,告诉我执行以下操作以使 GPU 在 20.04 上通过
apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager ovmf
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
/etc/默认/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_iommu=on kvm.ignore_msrs=1 vfio-pci.ids=10de:2489,10de:228b"
Run Code Online (Sandbox Code Playgroud)
然后
update-grub
Run Code Online (Sandbox Code Playgroud)
然而,当我重新启动时,我看到一个纯黑的屏幕。22.04 的过程是否有所不同?CPU是i9-12900k
TAC*_*LEX 21
本指南在带有Nouveau驱动程序和以下系统配置的Ubuntu 22.04 LTS、22.10、23.04、23.10 上进行了测试:
\n注意力!本指南仅与 Nouveau 驱动程序相关。在开始系统更改之前,请仔细阅读文本。
\n对于基于 Intel 的系统:
\n具有 VT-x、VT-d 和处理器显卡的CPU
\n支持 GPU 直通的独立显卡(用于直通)
\n具有两个输入的显示器,例如Displayport、D-SUB、DVI、HDMI或带有显示器或两个显示器的切换盒。
\n对于基于 AMD 的系统:
\n带集成显卡的主板(用于操作)
\n配备 AMD-V、AMD-Vi 和集成显卡的 CPU
\n支持 GPU 直通的独立显卡(用于直通)
\n具有两个输入的显示器,例如 Displayport、D-SUB、DVI、HDMI 或带有显示器或两个显示器的切换盒。
\n请参阅支持 IOMMU 的硬件列表(列表可能不完整)。
\n重要提示: \n为了提高来宾计算机的工作效率,请将来宾操作系统安装在额外的物理磁盘上(直通解决方案)。\n此外,您还需要 8 GB RAM用于操作系统(OS),8 GB RAM 用于来宾计算机,16 GB RAM 可能会显着增加您的HDD或SSD 的性能和使用寿命。
\n对于基于 Intel 的系统启用 Intel 虚拟化技术 (VT-x) 和 Intel VT-D 技术
\n对于基于 AMD 的系统启用 SVM 模式。
\n步骤 2.设置 BIOS 以使用集成显卡作为主要启动设备
\n注意力!如果您使用专为直通 PCI-Express 图形设备设计的系统启动,则会出现错误代码 43。
\n步骤 3.检查CPU 上的IOMMU支持
\n对于 AMD 处理器:
\n$ cat /proc/cpuinfo | grep --color svm\n
Run Code Online (Sandbox Code Playgroud)\n对于英特尔处理器:
\n$ cat /proc/cpuinfo | grep --color vmx\n
Run Code Online (Sandbox Code Playgroud)\n您应该看到突出显示的文本 svm 或 vmx。
\n步骤 4.启用 IOMMU
\n$ sudo nano /etc/default/grub\n
Run Code Online (Sandbox Code Playgroud)\n将以下选项添加到 GRUB_CMDLINE_LINUX_DEFAULT=""
\n对于 AMD 处理器:
\namd_iommu=on kvm.ignore_msrs=1\n
Run Code Online (Sandbox Code Playgroud)\n对于英特尔处理器:
\nintel_iommu=on kvm.ignore_msrs=1\n
Run Code Online (Sandbox Code Playgroud)\n步骤 5.更新 GRUB
\n$ sudo grub-mkconfig -o /boot/grub/grub.cfg\n
Run Code Online (Sandbox Code Playgroud)\n步骤 6.重新启动系统
\n步骤 7.检查 IOMMU 是否已启用
\n$ sudo dmesg | grep -i -e DMAR -e IOMMU\n
Run Code Online (Sandbox Code Playgroud)\n您应该看到如下消息:
\n[ 0.123456] pci 0000:09:00.0: Adding to iommu group 1\n[ 0.234567] pci 0000:0a:00.0: Adding to iommu group 2\n[ 0.345678] DMAR: Intel(R) Virtualization Technology for Directed I/O\n
Run Code Online (Sandbox Code Playgroud)\n步骤 8.找到您的设备
\n$ lspci -nnk\n
Run Code Online (Sandbox Code Playgroud)\n您应该看到如下所示的文本:
\n01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10aa:10bb] (rev a1) (prog-if 00 [VGA controller])\n Subsystem: Micro-Star International Co., Ltd. [MSI] TU117 [GeForce GTX 1650] [0101:a1a1]\n Flags: bus master, fast devsel, latency 0, IRQ 151, IOMMU group 1\n Memory at de000000 (32-bit, non-prefetchable) [size=16M]\n Memory at c0000000 (64-bit, prefetchable) [size=256M]\n Memory at d0000000 (64-bit, prefetchable) [size=32M]\n I/O ports at e000 [size=128]\n Expansion ROM at 000c0000 [disabled] [size=128K]\n Capabilities: <access denied>\n Kernel driver in use: nouveau\n Kernel modules: nvidiafb, nouveau\n\n01:00.1 Audio device [0403]: NVIDIA Corporation Device [01cc:01ee] (rev a1)\n Subsystem: Micro-Star International Co., Ltd. [MSI] Device [0202:a2a2]\n Flags: bus master, fast devsel, latency 0, IRQ 17, IOMMU group 1\n Memory at df080000 (32-bit, non-prefetchable) [size=16K]\n Capabilities: <access denied>\n Kernel driver in use: snd_hda_intel\n Kernel modules: snd_hda_intel\n
Run Code Online (Sandbox Code Playgroud)\n如果您看到文本“正在使用的内核驱动程序:nvidia”,如下所示:
\n01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10aa:10bb] (rev a1)\n Subsystem: Micro-Star International Co., Ltd. [MSI] TU117 [GeForce GTX 1650] [0101:a1a1]\n Kernel driver in use: nvidia\n Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia\n01:00.1 Audio device [0403]: NVIDIA Corporation Device [01cc:01ee] (rev a1)\n Subsystem: Micro-Star International Co., Ltd. [MSI] Device [0202:a2a2]\n Kernel driver in use: snd_hda_intel\n Kernel modules: snd_hda_intel\n
Run Code Online (Sandbox Code Playgroud)\n您的系统使用 NVIDIA专有驱动程序。您需要删除所有旧的视频驱动程序。以下是删除所有旧视频驱动程序并重新安装 nouveau 的方法:
\n$ sudo nvidia-settings --uninstall\n$ sudo apt-get remove --purge nvidia*\n$ sudo apt-get remove --purge xserver-xorg-video-nouveau\n$ sudo apt-get remove --purge xserver-xorg-video-nv\n$ sudo apt-get install nvidia-common\n$ sudo apt-get install xserver-xorg-video-nouveau\n$ sudo apt-get install xserver-xorg-video-all\n$ sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri\n$ sudo apt-get install --reinstall xserver-xorg-core\n$ sudo dpkg-reconfigure xserver-xorg\n
Run Code Online (Sandbox Code Playgroud)\n或运行以下命令:
\n$ software-properties-gtk --open-tab=4\n
Run Code Online (Sandbox Code Playgroud)\n选择选项 \xe2\x80\x9cX.Org X server -- 来自 xserver-xorg-video-nouveau (开源)\xe2\x80\x9d 的 Nouveau 显示驱动程序
\n运行自动删除:
\n$ sudo apt autoremove\n
Run Code Online (Sandbox Code Playgroud)\n然后重新启动系统并重复步骤 8。
\n步骤 9.创建一个名为 vfio.conf 的新文件
\n$ sudo nano /etc/modprobe.d/vfio.conf\n
Run Code Online (Sandbox Code Playgroud)\n添加以下行以及 STEP 8 中的设备 ID:
\nblacklist nouveau\nblacklist snd_hda_intel\noptions vfio-pci ids=10aa:10bb,01cc:01ee\n
Run Code Online (Sandbox Code Playgroud)\n步骤 10.更新现有的 initramfs
\n$ sudo update-initramfs -u\n
Run Code Online (Sandbox Code Playgroud)\n步骤 11.重新启动系统
\n第 12 步:确保一切正常
\n$ lspci -nnk\n
Run Code Online (Sandbox Code Playgroud)\n您应该看到如下文本,行 \xe2\x80\x9cKernel driver in use: nouveau\xe2\x80\x9d 和 \xe2\x80\x9cKernel driver in use: snd_hda_intel\xe2\x80\x9d 不应出现在文本:
\n01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117 [GeForce GTX 1650] [10aa:10bb] (rev a1)\n Subsystem: Micro-Star International Co., Ltd. [MSI] TU117 [GeForce GTX 1650] [0101:a1a1]\n Kernel modules: nvidiafb, nouveau\n01:00.1 Audio device [0403]: NVIDIA Corporation Device [01cc:01ee] (rev a1)\n Subsystem: Micro-Star International Co., Ltd. [MSI] Device [0202:a2a2]\n Kernel modules: snd_hda_intel\n
Run Code Online (Sandbox Code Playgroud)\n步骤 13.使用VirtManager创建新的访客计算机
\n安装KVM
\n$ sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils\n
Run Code Online (Sandbox Code Playgroud)\n添加用户
\n注意:对于较新版本的 Linux 内核,请尝试 libvirt。
\n$ sudo adduser username libvirtd\n
Run Code Online (Sandbox Code Playgroud)\n如果您遇到组问题“adduser:组‘libvirtd\’不存在。” 尝试:
\n$ sudo addgroup libvirtd\n
Run Code Online (Sandbox Code Playgroud)\n安装VirtManager
\n$ sudo apt-get install virt-manager\n
Run Code Online (Sandbox Code Playgroud)\n使用自定义配置创建新的访客计算机。
\n$ virt-manager\n
Run Code Online (Sandbox Code Playgroud)\n如果您收到“确保libvirtd
守护进程正在运行”错误,请重新启动并重试。
可选:要将来宾操作系统安装在其他物理磁盘上,请取消选中“为此虚拟机启用存储”框
\n\n\n你必须:
\n可选:要将客户机操作系统安装在其他物理磁盘上,请选择主机设备 \xe2\x80\x93 物理 SSD M.2 或 SATA 3.0 PCIe Gen3 x1 卡(适用于 SATA SSD/HDD)
\n步骤 14.编辑访客计算机
\n$ virsh list --all\n\n$ sudo virsh edit YourGuestMachineName\n
Run Code Online (Sandbox Code Playgroud)\n添加以下行:
\n<vendor_id state=\'on\' value=\'1234567890ab\'/>\n<kvm>\n <hidden state=\'on\'/>\n</kvm>\n<ioapic driver=\'kvm\'/>\n
Run Code Online (Sandbox Code Playgroud)\n最终结果应该类似于:
\n<features>\n <acpi/>\n <apic/>\n <hyperv>\n <relaxed state=\'on\'/>\n <vapic state=\'on\'/>\n <spinlocks state=\'on\' retries=\'8191\'/>\n <vendor_id state=\'on\' value=\'1234567890ab\'/>\n </hyperv>\n <kvm>\n <hidden state=\'on\'/>\n </kvm>\n <vmport state=\'off\'/>\n <ioapic driver=\'kvm\'/>\n</features>\n
Run Code Online (Sandbox Code Playgroud)\n完成编辑后,使用 CTRL+x 保存更改。
\n步骤 15.运行访客计算机
\n可选:如果要在附加物理磁盘上安装来宾操作系统,请启动来宾计算机并在适当的时候按 BIOS 输入键 F2。将物理磁盘设备设置为可引导。
\n如果您想使用 PCI-Express 图形设备作为主引导设备,请执行以下操作:
\n$ sudo nano /etc/modprobe.d/vfio.conf\n
Run Code Online (Sandbox Code Playgroud)\n使用 STEP 8 中的设备 ID 更改以下行:
\nblacklist nouveau\nblacklist snd_hda_intel\noptions vfio-pci ids=10aa:10bb,01cc:01ee\n
Run Code Online (Sandbox Code Playgroud)\n和:
\n#blacklist nouveau\n#blacklist snd_hda_intel\n#options vfio-pci ids=10aa:10bb,01cc:01ee\n
Run Code Online (Sandbox Code Playgroud)\n更新现有的 initramfs
\n$ sudo update-initramfs -u\n
Run Code Online (Sandbox Code Playgroud)\n重新启动系统并将 BIOS 设置为使用 PCI-Express 图形设备作为主启动设备。
\n指南:在另一个分区上创建 qcow2 磁盘映像文件。
\n问题:模拟器可能没有路径\'/*.qcow2\'的搜索权限
\n行动:
\n问题:启动域时出错:无法访问存储文件\'/*.qcow2\'(如uid:10101,gid:101):权限被拒绝
\n行动:
\n问题:重新启动系统后不显示 Gnome 登录屏幕。
\n行动:
\n问题:客户机正常启动,但我在 PCI-Express 图形设备的输出上看到黑屏。
\n行动:
\n检查电缆连接和显示器的设置
\n检查步骤 1、2、14
\n在 Windows 上安装正确的设备驱动程序
\n在 Windows 上卸载并重新安装设备驱动程序
\n更新 Windows 上的设备驱动程序
\n问题:使用 USB 重定向器时,网络摄像头、USB 音频接口、USB HDD/SSD 等设备无法正常工作。
\n行动:
\n问题:使用 Windows 10 操作系统的客户机上出现间歇性声音并伴有噼啪声。
\n行动:
\n问题:我的客户机冻结,因此我的 USB 音频接口崩溃(使用额外的 PCIe Gen3 x4 USB 3.2 卡的直通解决方案)。
\n行动:
\n确保根目录有大约 8 GB 的可用空间
\n从访客计算机中删除未使用的虚拟硬件(声音、\n网络、控制器、通道、USB 重定向)
\n在虚拟机管理器中,转至“编辑”>“连接详细信息”并\n通过“虚拟网络”选项卡取消选中“启动时”
\n重新启动您的系统
\n在 Ubuntu 中禁用 WiFi
\n将 Ubuntu 操作系统上的 CPU 调速器设置为“性能”
\n请参阅虚拟化调整和优化指南
\n$ sudo apt install tuned\n
Run Code Online (Sandbox Code Playgroud)\n(每次启动电脑时都需要这些命令)
\n$ sudo tuned-adm profile virtual-host && sudo systemctl enable tuned && tuned-adm active\n
Run Code Online (Sandbox Code Playgroud)\n 对于 Ubuntu 23.04、23.10
\n$ virt-manager\n\n$ htop -t -F libvirtd\n
Run Code Online (Sandbox Code Playgroud)\n结果应该类似于:
\n [Main] [I/O]\n PID\xe2\x96\xb3USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command\n 976 root 20 0 1602M 36044 22348 S 0.0 0.2 0:01.32 \xe2\x94\x9c\xe2\x94\x80 /usr/sbin/libvirtd --timeout 120\n .\n .\n 999 root 20 0 1602M 36044 22348 S 0.0 0.2 0:00.00 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 /usr/sbin/libvirtd --timeout 120\n 1001 root 20 0 1602M 36044 22348 S 0.0 0.2 0:00.00 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 /usr/sbin/libvirtd --timeout 120\n 5905 username 20 0 140M 132M 3584 R 50.0 0.0 0:00.10 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 htop -t -F libvirt\n
Run Code Online (Sandbox Code Playgroud)\n$ sudo renice -20 -g <PID>\n\n$ sudo chrt -a -r -p 99 <PID>\n
Run Code Online (Sandbox Code Playgroud)\n$ htop -t -F libvirtd\n
Run Code Online (Sandbox Code Playgroud)\n最终结果应该类似于:
\n [Main] [I/O]\n PID\xe2\x96\xb3USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command\n 976 root RT -20 1602M 36044 22348 S 0.0 0.2 0:01.32 \xe2\x94\x9c\xe2\x94\x80 /usr/sbin/libvirtd --timeout 120\n .\n .\n 999 root RT -20 1602M 36044 22348 S 0.0 0.2 0:00.00 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 /usr/sbin/libvirtd --timeout 120\n 1001 root RT -20 1602M 36044 22348 S 0.0 0.2 0:00.00 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 /usr/sbin/libvirtd --timeout 120\n 5905 username 20 0 140M 132M 3584 R 50.0 0.0 0:00.10 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80 htop -t -F libvirt\n
Run Code Online (Sandbox Code Playgroud)\n对于 Ubuntu 22.04 LTS、22.10
\n注意:也许在 Ubuntu 22.04 LTS、22.10 更新过程将变得与 Ubuntu 23.04 或 23.10 的过程类似。
\n运行您的访客机器
\n运行以下命令
\n$ htop -t\n
Run Code Online (Sandbox Code Playgroud)\n结果应该类似于:
\n [Main] [I/O]\n PID\xe2\x96\xbdUSER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command\n 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd\n 10011 root 20 0 0 0 0 S 0.0 0.0 0:01.17 \xe2\x94\x9c\xe2\x94\x80 9998\n 10005 root 20 0 0 0 0 S 0.0 0.0 0:00.11 \xe2\x94\x9c\xe2\x94\x80 kvm-nx-lpage-recovery-9998\n 10004 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 \xe2\x94\x94\xe2\x94\x80 kvm\n 1 root 20 0 166M 13300 7344 S 0.0 0.1 0:04.02 init\n 9998 libvirt-qe 20 0 11.1G 8371M 11796 S 93.0 52.7 2h35:34 \xe2\x94\x9c\xe2\x94\x80 qemu-system-x86_64 -name guest=username,debug-threads=on -S -object {"qom-type":"secret","\n 18086 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:00.00 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 worker\n 10012 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:20.20 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 SPICE Worker\n 10010 libvirt-qe 20 0 11.1G 8371M 11796 S 9.3 52.7 18:42.97 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 CPU 3/KVM\n 10009 libvirt-qe 20 0 11.1G 8371M 11796 S 27.9 52.7 18:31.20 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 CPU 2/KVM\n 10008 libvirt-qe 20 0 11.1G 8371M 11796 R 18.6 52.7 25:01.04 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 CPU 1/KVM\n 10007 libvirt-qe 20 0 11.1G 8371M 11796 R 9.3 52.7 1h08:06 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 CPU 0/KVM\n 10006 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:25.50 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 IO mon_iothread\n 10002 libvirt-qe 20 0 11.1G 8371M 11796 S 0.0 52.7 0:00.11 \xe2\x94\x82 \xe2
归档时间: |
|
查看次数: |
69263 次 |
最近记录: |