英语

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

英特尔 Omni-Path (OPA) 虚拟网络接口控制器 (VNIC) 功能支持通过在 HFI 节点之间封装以太网数据包,在 Omni-Path 光纤上实现以太网功能。

架构

Omni-Path 封装的以太网数据包的交换模式涉及一个或多个覆盖在 Omni-Path 光纤拓扑上的虚拟以太网交换机。允许 Omni-Path 光纤上的一组 HFI 节点在特定的虚拟以太网交换机上交换封装的以太网数据包。虚拟以太网交换机是通过配置光纤上的 HFI 节点以进行报头生成和处理而实现的逻辑抽象。在最简单的配置中,光纤上的所有 HFI 节点都通过单个虚拟以太网交换机交换封装的以太网数据包。虚拟以太网交换机实际上是一个独立的以太网网络。配置由以太网管理器 (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 数据包是四字对齐的。“尾部”字段包含填充的字节数。在接收端,读取“尾部”字段并删除填充(以及 ICRC、尾部和 OPA 报头),然后再将数据包传递到网络堆栈。

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

驱动程序设计

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

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

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

OPA VNIC 模块实现了与硬件无关的 VNIC 功能。它由两个部分组成。VNIC 以太网管理代理 (VEMA) 将自身注册为 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         |
|                                            |
+--------------------------------------------+