Intel Omni-Path (OPA) 虚拟网络接口控制器 (VNIC)

Intel Omni-Path (OPA) 虚拟网络接口控制器 (VNIC) 功能通过封装 HFI 节点之间的以太网数据包,支持通过 Omni-Path 结构实现以太网功能。

架构

Omni-Path 封装的以太网数据包的交换模式涉及叠加在 Omni-Path 结构拓扑上的一个或多个虚拟以太网交换机。 Omni-Path 结构上的部分 HFI 节点被允许通过特定的虚拟以太网交换机交换封装的以太网数据包。 虚拟以太网交换机是通过配置结构上的 HFI 节点以生成和处理头部来实现的逻辑抽象。 在最简单的配置中,结构上的所有 HFI 节点通过单个虚拟以太网交换机交换封装的以太网数据包。 虚拟以太网交换机实际上是一个独立的以太网网络。 该配置由以太网管理器 (EM) 执行,以太网管理器 (EM) 是可信结构管理器 (FM) 应用程序的一部分。 HFI 节点可以有多个 VNIC,每个 VNIC 连接到不同的虚拟以太网交换机。 下图展示了具有两个 HFI 节点的两个虚拟以太网交换机的情况。

                             +-------------------+
                             |      Subnet/      |
                             |     Ethernet      |
                             |      Manager      |
                             +-------------------+
                                /          /
                              /           /
                            /            /
                          /             /
+-----------------------------+  +------------------------------+
|  Virtual Ethernet Switch    |  |  Virtual Ethernet Switch     |
|  +---------+    +---------+ |  | +---------+    +---------+   |
|  | VPORT   |    |  VPORT  | |  | |  VPORT  |    |  VPORT  |   |
+--+---------+----+---------+-+  +-+---------+----+---------+---+
         |                 \        /                 |
         |                   \    /                   |
         |                     \/                     |
         |                    /  \                    |
         |                  /      \                  |
     +-----------+------------+  +-----------+------------+
     |   VNIC    |    VNIC    |  |    VNIC   |    VNIC    |
     +-----------+------------+  +-----------+------------+
     |          HFI           |  |          HFI           |
     +------------------------+  +------------------------+

Omni-Path 封装的以太网数据包格式如下所述。

字段

四字 0

0-19

SLID (低 20 位)

20-30

长度 (以四字为单位)

31

BECN 位

32-51

DLID (低 20 位)

52-56

SC (服务等级)

57-59

RC (路由控制)

60

FECN 位

61-62

L2 (=10, 16B 格式)

63

LT (=1, 链接传输头 Flit)

四字 1

0-7

L4 类型 (=0x78 以太网)

8-11

SLID[23:20]

12-15

DLID[23:20]

16-31

PKEY

32-47

48-63

保留

四字 2

0-15

保留

16-31

L4 头部

32-63

以太网数据包

四字 3 到 N-1

0-63

以太网数据包 (填充扩展)

四字 N (最后一个)

0-23

以太网数据包 (填充扩展)

24-55

ICRC

56-61

尾部

62-63

LT (=01, 链接传输尾 Flit)

以太网数据包在发送端填充,以确保 VNIC OPA 数据包是四字对齐的。 “Tail”字段包含填充的字节数。 在接收端,读取“Tail”字段,并删除填充(以及 ICRC、Tail 和 OPA 头部),然后再将数据包传递到网络堆栈。

L4 头部字段包含 VNIC 端口所属的虚拟以太网交换机 ID。 在接收端,此字段用于将接收到的 VNIC 数据包多路分解到不同的 VNIC 端口。

驱动设计

下图展示了 Intel OPA VNIC 软件设计。 OPA VNIC 功能具有硬件相关组件和硬件无关组件。

已添加对 IB 设备分配和释放 RDMA netdev 设备的支持。 RDMA netdev 支持与网络堆栈接口,从而创建标准网络接口。 OPA_VNIC 是一种 RDMA netdev 设备类型。

硬件相关的 VNIC 功能是 HFI1 驱动程序的一部分。 它实现了用于分配和释放 OPA_VNIC RDMA netdev 的 verbs。 它涉及 VNIC 功能的硬件资源分配/管理。 它与网络堆栈接口并实现所需的 net_device_ops 函数。 它期望在发送路径中使用 Omni-Path 封装的以太网数据包,并提供对它们的硬件访问。 它从接收到的数据包中剥离 Omni-Path 头部,然后再将它们传递到网络堆栈。 它还实现了 RDMA netdev 控制操作。

OPA VNIC 模块实现了硬件无关的 VNIC 功能。 它由两部分组成。 VNIC 以太网管理代理 (VEMA) 向 IB 核心注册为 IB 客户端,并与 IB MAD 堆栈接口。 它与以太网管理器 (EM) 和 VNIC netdev 交换管理信息。 VNIC netdev 部分分配和释放 OPA_VNIC RDMA netdev 设备。 它在需要时覆盖由硬件相关的 VNIC 驱动程序设置的 net_device_ops 函数,以适应任何控制操作。 它还处理在发送路径中使用 Omni-Path 头部封装以太网数据包。 对于每个 VNIC 接口,封装所需的信息由 EM 通过 VEMA MAD 接口配置。 它还通过调用 RDMA netdev 控制操作将任何控制信息传递给硬件相关的驱动程序。

+-------------------+ +----------------------+
|                   | |       Linux          |
|     IB MAD        | |      Network         |
|                   | |       Stack          |
+-------------------+ +----------------------+
         |               |          |
         |               |          |
+----------------------------+      |
|                            |      |
|      OPA VNIC Module       |      |
|  (OPA VNIC RDMA Netdev     |      |
|     & EMA functions)       |      |
|                            |      |
+----------------------------+      |
            |                       |
            |                       |
   +------------------+             |
   |     IB core      |             |
   +------------------+             |
            |                       |
            |                       |
+--------------------------------------------+
|                                            |
|      HFI1 Driver with VNIC support         |
|                                            |
+--------------------------------------------+