14.10. 将 PCI 设备附加到 IBM Z 上的虚拟机


通过使用 vfio-pci 设备驱动程序,您可以在 pass-through 模式下将 PCI 设备分配给 IBM Z 主机上的虚拟机(VM)。例如,这使虚拟机可以使用 NVMe 闪存磁盘来处理数据库。

先决条件

  • 您有一个具有 IBM Z 硬件架构的主机系统。
  • 您有一个 Linux 操作系统的目标虚拟机。
  • 在主机上已载入了必要的 vfio 内核模块。

    # lsmod | grep vfio

    这个命令的输出必须包含以下模块:

    • vfio_pci
    • vfio_pci_core
    • vfio_iommu_type1

流程

  1. 获取您要使用的设备的 PCI 地址标识符。

    # lspci -nkD
    
    0000:00:00.0 0000: 1014:04ed
    	Kernel driver in use: ism
    	Kernel modules: ism
    0001:00:00.0 0000: 1014:04ed
    	Kernel driver in use: ism
    	Kernel modules: ism
    0002:00:00.0 0200: 15b3:1016
    	Subsystem: 15b3:0062
    	Kernel driver in use: mlx5_core
    	Kernel modules: mlx5_core
    0003:00:00.0 0200: 15b3:1016
    	Subsystem: 15b3:0062
    	Kernel driver in use: mlx5_core
    	Kernel modules: mlx5_core
  2. 打开您要将 PCI 设备附加到的虚拟机的 XML 配置。

    # virsh edit vm-name
  3. 将以下 <hostdev> 配置添加到 XML 文件的 <devices> 部分。

    address 行上的值替换为设备的 PCI 地址。例如,如果设备地址是 0003:00:00.0,请使用以下配置:

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/>
       </source>
       <address type="pci"/>
    </hostdev>
  4. 可选:要修改客户机操作系统如何检测 PCI 设备,您还可以将 <zpci> 子元素添加到 <address> 元素中。在 <zpci> 行中,您可以调整 uidfid 值,这会修改客户机操作系统中设备的 PCI 地址和功能 ID。

    <hostdev mode="subsystem" type="pci" managed="yes">
      <driver name="vfio"/>
       <source>
        <address domain="0x0003" bus="0x00" slot="0x00" function="0x0"/>
       </source>
       <address type="pci">
         <zpci uid="0x0008" fid="0x001807"/>
       </address>
    </hostdev>

    在本例中:

    • uid="0x0008" 将虚拟机中设备的域 PCI 地址设置为 0008:00:00.0
    • fid="0x001807" 将设备的插槽值设置为 0x001807。因此,虚拟机文件系统中的设备配置被保存到 /sys/bus/pci/slots/00001087/address 中。

      如果没有指定这些值,libvirt 会自动配置它们。

  5. 保存 XML 配置。
  6. 如果虚拟机正在运行,请将其关闭。

    # virsh shutdown vm-name

验证

  1. 启动虚拟机并登录到其客户机操作系统。
  2. 在客户端操作系统中,确认列出了 PCI 设备。

    例如,如果设备地址是 0003:00:00.0,请使用以下命令:

    # lspci -nkD | grep 0003:00:00.0
    
    0003:00:00.0 8086:9a09 (rev 01)
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.