跳过导航链接
退出打印视图
| Oracle VM Server for SPARC 2.0 管理指南

搜索范围:

- 本文档
- 整个文档库

### 分配 PCIe 端点设备

从 Oracle VM Server for SPARC 2.0 发行版和 Oracle Solaris 10 9/10 OS 开始，可以将某个 PCIe 端点（或可分配的直接 I/O）设备分配到域。这种 PCIe 端点设备的使用增加了将设备分配到 I/O 域的粒度。这种功能是通过直接 I/O (Direct I/O, DIO) 功能提供的。

通过 DIO 功能，您可以在系统中创建比 PCIe 总线数更多的 I/O 域。可能的 I/O 域数当前仅受 PCIe 端点设备数限制。

PCIe 端点设备可以是下列任意一个：

- 插槽中的 PCIe 卡

- 由平台标识的板载 PCIe 设备

下图显示了将 PCIe 端点设备 `PCIE3` 分配到 I/O 域。I/O 域中的总线 `pci_0` 和交换机都是虚拟的。不可再在 `primary` 域中访问`PCIE3` 端点设备。

在 I/O 域中，`pci_0` 块和交换机分别为虚拟根联合体和虚拟 PCIe 交换机。该块和交换机与 `primary` 域中的 `pci_0` 块和交换机十分类似。在 `primary` 域中，插槽 `PCIE3` 中的设备是原始设备的阴影格式，并标识为 `SUNW,assigned`。

图 6-2 将 PCIe 端点设备分配到 I/O 域

使用 `ldm list-io` 命令列出 PCIe 端点设备。

即使 DIO 功能允许将插槽中的任意 PCIe 卡分配到 I/O 域，也仅支持某些 PCIe 卡。请参见《Oracle VM Server for SPARC 2.0 Release Notes》中的"Direct I/O Hardware and Software Requirements"。

注 - 不支持具有交换机或桥的 PCIe 卡。也不支持 PCIe 函数级分配。将不受支持的 PCIe 卡分配到 I/O 域可能会导致不可预测的行为。

以下是一些有关 DIO 功能的重要详细信息：

- 仅当满足所有软件要求时才会启用此功能。请参见《Oracle VM Server for SPARC 2.0 Release Notes》中的"Direct I/O Hardware and Software Requirements"。

- 使用 DIO 功能，只可将连接到已分配至 `primary` 域的 PCIe 总线的 PCIe 端点分配到其他域。

- 仅当运行 `primary` 域时，使用 DIO 的 I/O 域才可访问 PCIe 端点设备。

- 重新引导 `primary` 域会对具有 PCIe 端点设备的 I/O 域产生影响。请参见重新引导 `primary` 域。`primary` 域还具有以下职责：

  - 初始化 PCIe 总线并管理该总线。

  - 处理所有由分配到 I/O 域的 PCIe 端点设备触发的总线错误。请注意，只有 `primary` 域才会收到所有与 PCIe 总线相关的错误。

#### 直接 I/O 硬件和软件要求

要成功使用 DIO 功能，必须运行相应的软件，并仅将 DIO 功能支持的 PCIe 卡分配到 I/O 域。有关硬件和软件要求，请参见《Oracle VM Server for SPARC 2.0 Release Notes》中的"Direct I/O Hardware and Software Requirements"。

注 - `primary` 域支持平台上支持的所有 PCIe 卡。有关支持的 PCIe 卡列表，请参见平台的文档。但是，仅可将支持直接 I/O 的 PCIe 卡分配到 I/O 域。

#### 直接 I/O 限制

有关如何解决以下限制的信息，请参见规划 PCIe 端点设备配置。

- 将 PCIe 端点设备分配到 `primary` 域或者将其从该域删除时会启动延迟重新配置，这意味着仅当 `primary` 重新引导后才会应用更改。

  重新引导 `primary` 域会对直接 I/O 产生影响，因此，请仔细规划直接 I/O 配置更改，以最大限度地增加对 `primary` 域的直接 I/O 相关更改，最大限度地减少 `primary` 域重新引导。

- 仅当域停止或处于非活动状态时，才允许将 PCIe 端点设备分配到任何其他域或删除该端点设备。

#### 规划 PCIe 端点设备配置

分配或删除 PCIe 端点设备时提前仔细规划以避免产生 `primary` 域宕机。重新引导 `primary` 域不仅影响 `primary` 域本身可用的服务，还会影响已分配有 PCIe 端点设备的 I/O 域。即使对每个 I/O 域的更改不会影响其他域，提前规划有助于最大限度地减小对由该域所提供的服务的影响。

首次分配或删除设备时会启动延迟重新配置。因此，可以继续添加或删除更多设备，然后只重新引导一次 `primary` 域，以使所有更改生效。

有关示例，请参见通过分配 PCIe 端点设备创建 I/O 域。

下面介绍了要规划和执行 DIO 设备配置必须执行的步骤：

1. 了解和记录系统硬件配置。

   具体地说，记录系统中有关 PCIe 卡的部件号及其他详细信息的信息。

   使用 `ldm list-io -l` 和 `prtdiag -v` 命令获取信息并保存起来供将来参考。

2. 确定 `primary` 域中所需的 PCIe 端点设备。

   例如，确定提供对以下内容的访问权限的 PCIe 端点设备：

   - 引导磁盘设备

   - 网络设备

   - `primary` 域提供作为服务的其他设备

3. 删除可能会在 I/O 域中使用的所有 PCIe 端点设备。

   重新引导会对 I/O 域产生影响，此步骤将有助于您避免在 `primary` 域上执行后续重新引导操作。

   使用 `ldm rm-io` 命令删除 PCIe 端点设备。使用 pseudonyms 而非设备路径将设备指定到 `rm-io` 和 `add-io` 子命令。

   注 - 即使首次删除 PCIe 端点设备可能会启动延迟重新配置，您也可以继续删除设备。删除所需的所有设备后，仅需要重新引导 `primary` 域一次，使所有更改生效。

4. 将此配置保存到服务处理器 (service processor, SP)。

   使用 `ldm add-config` 命令。

5. 重新引导 `primary` 域以释放在步骤 3 中删除的 PCIe 端点设备。

6. 确认不再将删除的 PCIe 端点设备分配到 `primary` 域。

   使用 `ldm list-io -l` 命令检验删除的设备在输出中是否显示为 `SUNW,assigned-device`。

7. 将可用的 PCIe 端点设备分配到来宾域，以提供对物理设备的直接访问权。

   分配完成后，将无法再通过域迁移功能将来宾域迁移到其他物理系统。

8. 将 PCIe 端点设备添加到来宾域或者将其从来宾域删除。

   使用 `ldm add-io` 命令。

   通过减少重新引导操作并避免由 I/O 域提供的服务宕机来最大限度地减少对该域的更改。

9. （可选）更改 PCIe 硬件。

   请参见更改 PCIe 硬件。

#### 重新引导 `primary` 域

PCIe 总线归 `primary` 域所有，该域负责初始化和管理总线。`primary` 域必须处于活动状态，并运行支持 DIO 功能的 Oracle Solaris OS 版本。关闭、停止或重新引导 `primary` 域会中断对 PCIe 总线的访问。PCIe 总线不可用时，该总线上的 PCIe 设备会受到影响，可能会变为不可用。

在运行 I/O 域的同时如果重新引导 `primary` 域，则具有 PCIe 端点设备的那些 I/O 域的行为是不可预测的。例如，具有 PCIe 端点设备的 I/O 域可能会在重新引导过程中或在重新引导后出现紧急情况。`primary` 域重新引导时，您可能需要手动停止或启动每个域。

要解决这些问题，请执行以下步骤之一：

- 在关闭 `primary` 域之前，请在系统上手动关闭已将 PCIe 端点设备分配到其中的任意域。

  此步骤可确保您在关闭、停止或重新引导 `primary` 域之前完全关闭这些域。

  要查找已将 PCIe 端点设备分配到其中的所有域，请运行 `ldm list-io` 命令。通过此命令，可以列出系统上已分配到域的 PCIe 端点设备。这样，使用此信息可帮助您进行计划。有关此命令输出的详细说明，请参见 `ldm`(1M) 手册页。

  对于找到的每个域，请通过运行 `ldm stop` 命令停止它。

- 配置 `primary` 域和已分配有 PCIe 端点设备的域之间的域依赖关系。

  这种依赖关系可确保具有 PCIe 端点设备的域能够在 `primary` 域因故重新引导时自动重新启动。

  请注意，此依赖关系会强行重设那些域，并且那些域不能完全关闭。但是，此依赖关系不会对手动关闭的任何域产生影响。

      # ldm set-domain failure-policy=reset primary
      # ldm set-domain master=primary ldom

#### 更改 PCIe 硬件

以下步骤有助于避免错误地配置 PCIe 端点分配。有关安装和删除特定硬件的平台特定信息，请参见平台的文档。

- 如果要将 PCIe 卡安装到空插槽内，无需执行任何操作。此 PCIe 卡自动归拥有 PCIe 总线的域所有。

  要将新的 PCIe 卡分配到 I/O 域，请使用 `ldm rm-io` 命令，先将卡从 `primary` 域删除。然后，使用 `ldm add-io` 命令将卡分配到 I/O 域。

- 如果要将 PCIe 卡从系统中删除并将其分配到 `primary` 域，无须执行任何操作。

- 要删除已分配到某个 I/O 域的 PCIe 卡，请先将设备从 I/O 域删除。然后，在从系统中物理删除设备之前，将该设备添加到 `primary` 域。

- 要替换已分配到某个 I/O 域的 PCIe 卡，请检验 DIO 功能是否支持新卡。

  如果支持，则会将新卡自动分配到当前 I/O 域而无需执行任何操作。

  如果不支持，请先使用 `ldm rm-io` 命令将该 PCIe 卡从 I/O 域删除。然后，使用 `ldm add-io` 命令将 PCIe 卡重新分配到 `primary` 域。接着，使用其他 PCIe 卡物理替换已分配到 `primary` 域的 PCIe 卡。通过这些步骤，您可以避免不受 DIO 功能支持的配置。

# 通过分配 PCIe 端点设备创建 I/O 域

提前规划所有 DIO 部署，从而最大限度地缩短停机时间。

有关通过添加 PCIe 端点设备来创建 I/O 域的示例，请参见规划 PCIe 端点设备配置。

1. 标识和归档系统上当前安装的设备。

   `ldm list-io -l` 命令的输出显示了当前配置 I/O 设备的方式。可使用 `prtdiag -v` 命令获取更多详细信息。

   注 - 将设备分配到 I/O 域之后，只可在 I/O 域中确定设备的标识。

       # ldm list-io -l
       IO              PSEUDONYM       DOMAIN
       --              ---------       ------
       pci@400         pci_0           primary
       pci@500         pci_1           primary

       PCIE                 PSEUDONYM  STATUS  DOMAIN
       ----                 ---------  ------  ------
       pci@400/pci@0/pci@c  PCIE1      EMP     -
       pci@400/pci@0/pci@9  PCIE2      OCC     primary
               network@0
               network@0,1
               network@0,2
               network@0,3
       pci@400/pci@0/pci@d  PCIE3      OCC     primary
               SUNW,emlxs/fp/disk
               SUNW,emlxs@0,1/fp/disk
               SUNW,emlxs@0,1/fp@0,0
       pci@400/pci@0/pci@8  MB/SASHBA  OCC     primary
               scsi@0/tape
               scsi@0/disk
               scsi@0/sd@0,0
               scsi@0/sd@1,0
       pci@500/pci@0/pci@9  PCIE0      EMP     -
       pci@500/pci@0/pci@d  PCIE4      OCC     primary
               network@0
               network@0,1
       pci@500/pci@0/pci@c  PCIE5      OCC     primary
               SUNW,qlc@0/fp/disk
               SUNW,qlc@0/fp@0,0
               SUNW,qlc@0,1/fp/disk
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c605dbab,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c6041434,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c6053652,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c6041b4f,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c605dbb3,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c60413bc,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c604167f,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c6041b3a,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c605dabf,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c60417a4,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c60416a7,0
               SUNW,qlc@0,1/fp@0,0/ssd@w21000011c60417e7,0
               SUNW,qlc@0,1/fp@0,0/ses@w215000c0ff082669,0
       pci@500/pci@0/pci@8  MB/NET0    OCC     primary
               network@0
               network@0,1
               network@0,2
               network@0,3

2. 确定需要保留的引导磁盘的设备路径。
   - 对于 UFS 文件系统，请运行 `df /` 命令，以确定引导磁盘的设备路径。

         primary# df /
         /                  (/dev/dsk/c0t1d0s0 ): 1309384 blocks   457028 files

   - 对于 ZFS 文件系统，首先运行 `df /` 命令以确定池名称，然后运行 `zpool status` 命令以确定引导磁盘的设备路径。

         primary# df /
         /                  (rpool/ROOT/s10s_u8wos_08a):245176332 blocks 245176332 files
         primary# zpool status rpool
          zpool status rpool
           pool: rpool
          state: ONLINE
          scrub: none requested
         config:

                 NAME        STATE     READ WRITE CKSUM
                 rpool       ONLINE       0     0     0
                   c0t1d0s0  ONLINE       0     0     0

3. 确定块设备连接到的物理设备。

   以下示例使用块设备 `c0t1d0s0`：

       primary# ls -l /dev/dsk/c0t1d0s0
       lrwxrwxrwx    1 root    root    49 Jul 20 22:17 /dev/dsk/c0t1d0s0 ->
       ../../devices/pci@400/pci@0/pci@8/scsi@0/sd@0,0:a

   在此示例中，`primary` 域的引导磁盘的物理设备已连接到 PCIe 端点设备 (`pci@400/pci@0/pci@8`)，该端点设备对应于步骤 1 中列出的 `MB/SASHBA`。删除此设备可能会阻止 `primary` 域引导，因此请不要将此设备从 `primary` 域删除。

4. 确定由系统使用的网络接口。

       # ifconfig -a
       lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
               inet 127.0.0.1 netmask ff000000
       nxge0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 2
               inet 10.6.212.149 netmask fffffe00 broadcast 10.6.213.255
               ether 0:21:28:4:27:cc

   在此示例中，`nxge0` 接口用作 `primary` 域的网络接口。

5. 确定网络接口连接到的物理设备。

   以下命令使用 `nxge0` 网络接口：

       primary# ls -l /dev/nxge0
       lrwxrwxrwx   1 root     root          46 Jul 30 17:29 /dev/nxge0 ->
       ../devices/pci@500/pci@0/pci@8/network@0:nxge0

   在此示例中，`primary` 域使用的网络接口的物理设备已连接到 PCIe 端点设备 (`pci@500/pci@0/pci@8`)，该端点设备对应于步骤 1 中列出的 `MB/NET0`。因此，您不希望将此设备从 `primary` 域删除。由于所有其他 PCIe 设备都未被 `primary` 域使用，因此可以将它们安全地分配到其他域。

   如果 `primary` 域使用的网络接口位于您要分配到其他域的总线上，则需要重新配置 `primary` 域以使用其他网络接口。

6. 删除可能会在 I/O 域中使用的 PCIe 端点设备。

   在此示例中，您可以删除 `PCIE2`、`PCIE3`、`PCIE4` 和 `PCIE5` 端点设备，因为它们没有被 `primary` 域使用。

   1. 删除 PCIe 端点设备。

      | 注意 - 请不要删除 `primary` 域中使用的设备。 如果错误地删除了错误设备，请使用 `ldm cancel-op reconf primary` 命令取消 `primary` 域上的延迟重新配置。

      可以一次删除多个设备以避免多次重新引导。

          # ldm rm-io PCIE2 primary
          Initiating a delayed reconfiguration operation on the primary domain.
          All configuration changes for other domains are disabled until the primary
          domain reboots, at which time the new configuration for the primary domain
          will also take effect.
          # ldm rm-io PCIE3 primary
          ------------------------------------------------------------------------------
          Notice: The primary domain is in the process of a delayed reconfiguration.
          Any changes made to the primary domain will only take effect after it reboots.
          ------------------------------------------------------------------------------
          # ldm rm-io PCIE4 primary
          ------------------------------------------------------------------------------
          Notice: The primary domain is in the process of a delayed reconfiguration.
          Any changes made to the primary domain will only take effect after it reboots.
          ------------------------------------------------------------------------------
          # ldm rm-io PCIE5 primary
          ------------------------------------------------------------------------------
          Notice: The primary domain is in the process of a delayed reconfiguration.
          Any changes made to the primary domain will only take effect after it reboots.
          ------------------------------------------------------------------------------

   2. 将新配置保存到服务处理器 (service processor, SP)。

      以下命令会将配置保存到名为 `dio` 的文件中：

          # ldm add-config dio

   3. 重新引导系统以反映 PCIe 端点设备的删除。

          # reboot -- -r

7. 登录 `primary` 域，检验是否不再将 PCIe 端点设备分配到域。

       # ldm list-io
       IO              PSEUDONYM       DOMAIN
       --              ---------       ------
       pci@400         pci_0           primary
       pci@500         pci_1           primary

       PCIE                 PSEUDONYM  STATUS  DOMAIN
       ----                 ---------  ------  ------
       pci@400/pci@0/pci@c  PCIE1      EMP     -
       pci@400/pci@0/pci@9  PCIE2      OCC
       pci@400/pci@0/pci@d  PCIE3      OCC
       pci@400/pci@0/pci@8  MB/SASHBA  OCC     primary
       pci@500/pci@0/pci@9  PCIE0      EMP     -
       pci@500/pci@0/pci@d  PCIE4      OCC
       pci@500/pci@0/pci@c  PCIE5      OCC
       pci@500/pci@0/pci@8  MB/NET0    OCC     primary

   注 - 对于删除的 PCIe 端点设备，`ldm list-io -l` 输出可能会显示 `SUNW,assigned-device`。不可再从 `primary` 域获取实际信息，但是要将设备分配到其中的域包含此信息。

8. 将 PCIe 端点设备分配到域。
   1. 将 `PCIE2` 设备添加到 `ldg1` 域。

          # ldm add-io PCIE2 ldg1

   2. 绑定并启动 `ldg1` 域。

          # ldm bind ldg1
          # ldm start ldg1
          LDom ldg1 started

9. 登录 `ldg1` 域并检验设备是否可用。

   使用 `dladm show-dev` 命令检验网络设备是否可用。然后，配置网络设备以在域中使用。

       # dladm show-dev
       vnet0           link: up        speed: 0     Mbps       duplex: unknown
       nxge0           link: unknown   speed: 0     Mbps       duplex: unknown
       nxge1           link: unknown   speed: 0     Mbps       duplex: unknown
       nxge2           link: unknown   speed: 0     Mbps       duplex: unknown
       nxge3           link: unknown   speed: 0     Mbps       duplex: unknown

版权所有 © 2007, 2010, Oracle 和/或其附属公司。 保留所有权利。 法律声明 |