第 1 部分针对 Oracle Solaris 平台设计设备驱动程序
9. 直接内存访问 (Direct Memory Access, DMA)
14. 分层驱动程序接口 (Layered Driver Interface, LDI)
SR-IOV 功能包括物理功能 (Physical Function, PF) 驱动程序和虚拟功能 (Virtual Function, VF) 驱动程序。以下各节介绍了 PF 和 VF 驱动程序以及必需的设备配置的详细信息。
SR-IOV 设备的 PF 驱动程序用于管理具有 SR-IOV 功能的设备的物理功能 (Physical Function, PF)。SR-IOV 规范中定义了支持 SR-IOV 功能的 PCI 功能。PF 包含 SR-IOV 功能结构,用于管理 SR-IOV 功能。PF 是全功能的 PCIe 功能,可以像其他任何 PCIe 设备一样进行发现、管理和处理。PF 拥有完全配置资源,可以用于配置或控制 PCIe 设备。PF 驱动程序具有以下特征:
仅在根域中可见
可能有也可能没有数据移动功能。PF 驱动程序即使在 SR-IOV 模式下也应该正常工作。
通过 Oracle Solaris IOV 框架提供的 API 控制 SR-IOV 功能的启用和禁用。
要为给定的 PF 配置的 VF 数量是由系统管理员决定的。此数值在 Sparc OVM 平台上的计算机描述符 (Machine Descriptor, MD) 中定义,或者在裸机环境中的配置文件中定义。
PF 驱动程序在连接阶段通过借助 DDI 接口调用 Oracle Solaris IOV 框架来启用 VF。如果 PF 驱动程序在连接过程中未启用 VF,只要驱动程序回调标志指示支持具有 IOV 功能的驱动程序,Oracle Solaris IOV 框架在连接后将立即尝试配置 VF。
PF 可以通过特定于设备的机制分别启用和禁用每个关联的 VF。
与物理功能关联的一种功能。VF 是一种轻量级 PCIe 功能,可以与物理功能以及与同一物理功能关联的其他 VF 共享一个或多个物理资源。VF 驱动程序具有以下特征:
在根域和 I/O 域中都可见
可以通过 HW 邮箱或 OS 提供的接口启动与其 PF 的通信
在根域中不可见,除非满足以下条件:
根域已经引导
PF 驱动程序连接并调用了 VF 的配置
根域的 Oracle Solaris IOV 框架启用了 VF
系统固件向 VF 分配了资源
在 I/O 域中不可见,除非满足以下条件:
VF 已启用且在根域中可见
VF 已指定给 I/O 域
Oracle Solaris 固件 (OBP) 在 I/O 域中检测到 VF
注 - 具有 SR-IOV 功能的 PF 和 VF 驱动程序必须注册中断资源管理 (Interrupt Resource Management, IRM) 回调并提供对此功能的支持。有关 IRM 接口的详细信息和用法,请参见第 8 章。
注 - 如果 VF 是一个网络 VF,则可以在启用 numVFs 后配置以下参数。配置应该在启用 VF 之前完成。
mac-addr
vlan (Virtual LAN) ID
port-vlan-id
alt-mac-addrs
mtu
PF 驱动程序必须支持下表中列出的配置参数。这些参数可以导出到 Sparc OVM Manager 中。仅当所有参数均已配置时,配置才算完成。
表 21-1 配置参数定义
|
注 - 当设备配置参数发生更改时,应重新连接设备。
注 - 在启用 VF 之前请按以下顺序配置参数。特定于类的参数将基于特定于类的配置。
与标准相关的参数
特定于资源和设备的参数
特定于类的参数
通过 PCI 配置信息文件 /etc/pci.conf,系统可以保存 PCI 配置(如特定 PF 的 VF 数量)。pci.conf 文件提供了以下内容:
-持久保留 PCI 配置以便在引导系统时可以自动创建 VF。
-由于配置文件是 boot_archive 的一部分,所以在系统引导期间可以使用 VF。
注 - 将 /etc/pci.conf 添加到 /boot/solaris/filelist.ramdisk 文件中以便将 /etc/pci.conf 文件包括在 Oracle Solaris 引导进程中。
有关更多信息,请参见附录 E。
Sparc:可以通过 ldm 命令设置这类参数。有关详细信息,请参见 ldm(1M) 手册页。
x86:可通过 pci.conf 文件指定特定于类的参数。以下示例显示了在 pci.conf 文件中设置的参数。
示例 21-1 设置设备配置参数
[[path=/pci@0,0/pci8086,3a40@1c/pci108e,4848@0,1]] num-vf=2 [Device_Configuration] [[path=/pci@0,0/pci8086,3a40@1c/pci108e,4848@0,1]] VF[0] = { primary-mac-addr = 0xaabbccddeeff alt-mac-addrs = 0x102233445556, 0x102233445557 vlan-id = 20, 30 } VF[1] = { primary-mac-addr = 0xaabbccddeef1 alt-mac-addrs = 0x102233445568 vlan-id = 20, 30, 40, 50 }
Sparc OVM Manager 负责所有 Sparc OVM 平台上的 SR-IOV 配置。Sparc OVM Manager 负责以下操作:
获取具有 SR-IOV 功能的驱动程序的 PF 列表
获取驱动程序支持的特定于设备的参数
验证特定的设备配置
更新计算机描述符 (Machine Descriptor, MD) 文件的所有有效配置详细信息以及 VF 的分配和删除情况。
下图显示了 Sparc OVM 配置的概要视图。
图 21-2 Sparc OVM 配置的概要视图
在发行 Oracle Solaris 11 时,未提供任何可用来在裸机平台(包括 x86)上配置 SR-IOV 的工具。