1.5.3. 设备直通/热插拔
如果您希望始终通过设备而不是此处描述的热插拔,请通过例如将设备的 xml 内容添加到您的静态访客 xml 表示中 虚拟编辑. 在这种情况下,您不需要使用 附加/分离. 有不同种类的直通。 您可用的类型取决于您的硬件和软件设置。
• USB 热插拔/直通
• VF 热插拔/直通
3 https://libvirt.org/migration.html#offline
4 https://libvirt.org/migration.html
5 http://wiki.qemu.org/Features/PostCopyLiveMigration
6 https://wiki.ubuntu.com/QemuKVMMigration
但是这两种方法的处理方式非常相似,虽然有多种方法可以做到(例如也通过 qemu 监视器),但建议通过 libvirt 进行此类更改。 这样 libvirt 可以尝试为您管理各种特殊情况,并在某种程度上掩盖版本差异。
通常,当通过 libvirt 驱动热插拔时,您会创建一个 xml 片段来描述设备,就像您在静态访客描述中所做的那样。7 USB 设备通常由供应商/产品 ID 标识:
虚拟功能通常通过它们的 PCI-ID(域、总线、插槽、功能)分配。
首先获得 Virtual 功能是非常依赖于设备的,因此无法在此处完全涵盖。 但总的来说,它涉及设置一个iommu,通过VFIO注册8 有时会请求多个 VF。 这是 ppc64el 上的示例,用于在设备上获取 4 个 VF:
$ sudo modprobe vfio-pci
# 识别设备
$ lspci -n -s 0005:01:01.3 0005:01:01.3 0200:10df:e228 (rev 10)
# 注册和请求 VF
$ echo 10df e228 | 须藤三通/sys/bus/pci/drivers/vfio-pci/new_id
$ 回声 4 | 须藤三通/sys/bus/pci/devices/0005\:01\:00.0/sriov_numvfs
然后,通过将访客与 xml 片段相关联,通过 libvirt 附加或分离设备。
virsh 附加设备
# 在访客中使用设备
virsh 分离设备
关于保护“太多”的 apparmor proetction,有几个相关的已知问题。 您可能需要调整 apparmor 配置文件中的异常,直到出现错误 15522419 (对于 USB)和 https://bugs.launchpad.net/ubuntu/+source/apparmor/+bug/1679704(对于 VF 分配)已解决。 要检查您是否受到影响,请在使用 USB/VF 直通/热插拔功能时观察 dmesg 并验证您是否看到 apparmor denies10.
7 https://libvirt.org/formatdomain.html
8 https://www.kernel.org/doc/Documentation/vfio.txt
9 https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1552241
10 http://wiki.apparmor.net/index.php/AppArmor_Failures#Messages_in_the_Log_files