虚拟端口 (VPort)
(VPort) 的虚拟端口是一个数据对象,表示网络适配器的 NIC 交换机上的内部端口,该端口支持单根 I/O 虚拟化 (SR-IOV) 。 每个 NIC 交换机都有以下用于网络连接的端口:
一个外部物理端口,用于连接到外部物理网络。
连接到 PCI Express 物理功能 (PF) 或虚拟功能的一个或多个内部 VPort (VFs) 。
PF 附加到 Hyper-V 父分区,并在该分区中运行的管理操作系统中作为虚拟网络适配器公开。
VF 附加到 Hyper-V 子分区,并在该分区中运行的来宾操作系统中作为虚拟网络适配器公开。
NIC 交换机将网络流量从物理端口桥接到一个或多个 VPort。 这提供了对基础物理网络接口的虚拟化访问。
每个 VPort 都有一个唯一标识符 (VPortId) ,该标识符对于网络适配器上的 NIC 交换机是唯一的。 默认 VPort 始终存在于默认 NIC 交换机上,永远无法删除。 默认 VPort 的 VPortId 为 NDIS_DEFAULT_VPORT_ID。
当 PF 微型端口驱动程序处理对象标识符 (OID) OID_NIC_SWITCH_CREATE_SWITCH 方法请求时,它将为该开关创建 NIC 开关和默认 VPort。 默认 VPort 始终附加到 PF,并且始终处于操作状态。
非默认 VPort 是通过 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法请求创建的。 只能将一个非默认 VPort 附加到 VF。 附加后,默认处于操作状态。 还可以创建一个或多个非默认 VPort 并将其附加到 PF。 这些 VPort 在创建时是非操作的,可以通过 OID_NIC_SWITCH_VPORT_PARAMETERS的 OID 集请求运行。
注意
VPort 正常运行后,只有在通过 OID_NIC_SWITCH_DELETE_VPORT 的 OID 请求将其删除时,它才能成为非操作。
每个 VPort 都有一个或多个与之关联的硬件队列对,用于接收和传输数据包。 网络适配器上的默认队列对保留供默认 VPort 使用。 当通过 OID_NIC_SWITCH_CREATE_VPORT请求创建 VPort 时,将分配和分配非默认 VPort 的队列对。
非默认 VPort 是通过 OID_NIC_SWITCH_CREATE_VPORT 的 OID 方法请求创建的和配置的。 默认 VPort 和非默认 VPort 是通过 OID_NIC_SWITCH_VPORT_PARAMETERS 的 OID 集请求重新配置的。 每个 OID 请求都包含一个指定以下配置参数 的 NDIS_NIC_SWITCH_VPORT_PARAMETERS 结构:
VPort 附加到的 PCIe 函数。
每个 VPort 可以随时附加到 PF 或 VF。 创建 VPort 并将其附加到 PCIe 函数后,无法将附件动态更改为另一个 PCIe 函数。
注意
默认 VPort 始终附加到网络适配器上的 PF。
从 Windows Server 2012 中的 NDIS 6.30 开始,只能将一个非默认 VPort 附加到 VF。 但是,可以将多个非默认 VPort 以及默认 VPort 附加到 PF。
分配给 VPort 的硬件队列对的数目。
每个 VPort 都有一组可供其使用的硬件队列对。 每个队列对由网络适配器上的单独传输和接收队列组成。
队列对是网络适配器上的有限资源。 创建 NIC 开关时,指定保留供默认和非默认 VPort 使用的队列对总数。 这允许分配给默认 VPort 的队列对数与非默认 VPort 不同。
每个非默认 VPort 都可以配置为具有不同数量的队列对。 这称为队列对 的非对称分配 。 如果 NIC 不允许此类非对称分配,则每个非默认 VPort 都配置为具有相等数量的队列对。 这称为队列对的 对称分配 。 有关详细信息,请参阅 队列对的对称和非对称分配。
注意
PF 微型端口驱动程序报告在 MiniportInitializeEx 期间是否支持队列对的非对称分配。 有关详细信息,请参阅 初始化 PF 微型端口驱动程序。
分配给每个 VPort 的队列对数不会动态更改。 创建 VPort 后,无法更改分配给 VPort 的队列对数。
注意
分配给非默认 VPorts 的一个或多个队列对可用于接收方缩放 (在来宾操作系统中运行的 VF 微型端口驱动程序) RSS。
VPort 的中断审查参数。
可以为不同的 VPort 指定不同的中断审查类型。 这允许虚拟化堆栈控制特定 VPort 生成的中断数。
除了配置参数之外,过分的驱动程序还可以通过发出 OID_RECEIVE_FILTER_SET_FILTER的 OID 方法请求来为每个 VPort 配置接收筛选器。 NIC 开关基于 VPort 执行指定的接收筛选。
VPort 的接收筛选器参数包括数据包筛选条件,例如媒体访问控制列表 (MAC) 地址和虚拟 LAN (VLAN) 标识符。 MAC 地址筛选器和 VLAN 标识符始终在与OID_RECEIVE_FILTER_SET_FILTER请求关联的NDIS_RECEIVE_FILTER_PARAMETERS一起指定。 NIC 交换机必须将传入数据包筛选到目标 MAC 地址和 VLAN 标识符与 VPort 上设置的任何接收筛选器条件匹配的交换机。 NIC 交换机会筛选从另一个 VPort 或外部物理端口接收的数据包。 如果数据包与筛选器匹配,NIC 交换机必须将其转发到 VPort。
可以在 VPort 上设置多个 MAC 地址和 VLAN 标识符对。 如果仅设置 MAC 地址,则接收筛选器指定 VPort 应接收与以下条件匹配的数据包:
数据包的目标 MAC 地址与筛选器的 MAC 地址匹配。
如果 VLAN 标记) VLAN 标识符为零,则数据包具有 VLAN 标记或 (。
通过 OID_NIC_SWITCH_DELETE_VPORT的 OID 集请求删除非默认 VPort。 仅当通过OID_NIC_SWITCH_DELETE_SWITCH的 OID 集请求删除 NIC 开关时,才会删除 默认 VPort。