Warning
此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。
Note
如果您发现本文档与原始文件有任何不同或者有翻译问题,请联系该文件的译者, 或者请求时奎亮的帮助:<alexs@kernel.org>。
- Original:
 Intel Omni-Path (OPA) Virtual Network Interface Controller (VNIC)
- 翻译:
 司延腾 Yanteng Si <siyanteng@loongson.cn>
- 校译:
 王普宇 Puyu Wang <realpuyuwang@gmail.com> 时奎亮 Alex Shi <alexs@kernel.org>
英特尔全路径(OPA)虚拟网络接口控制器(VNIC)¶
英特尔全路径(OPA)虚拟网络接口控制器(VNIC)功能通过封装HFI节点之间的以 太网数据包,支持Omni-Path结构上的以太网功能。
体系结构¶
Omni-Path封装的以太网数据包的交换模式涉及Omni-Path结构拓扑上覆盖的一个或 多个虚拟以太网交换机。Omni-Path结构上的HFI节点的一个子集被允许在特定的虚 拟以太网交换机上交换封装的以太网数据包。虚拟以太网交换机是通过配置结构上的 HFI节点实现的逻辑抽象,用于生成和处理报头。在最简单的配置中,整个结构的所有 HFI节点通过一个虚拟以太网交换机交换封装的以太网数据包。一个虚拟以太网交换机, 实际上是一个独立的以太网网络。该配置由以太网管理器(EM)执行,它是可信的结 构管理器(FM)应用程序的一部分。HFI节点可以有多个VNIC,每个连接到不同的虚 拟以太网交换机。下图介绍了两个虚拟以太网交换机与两个HFI节点的情况:
                             +-------------------+
                             |      子网/        |
                             |     以太网        |
                             |      管理         |
                             +-------------------+
                                /          /
                              /           /
                            /            /
                          /             /
+-----------------------------+  +------------------------------+
|     虚拟以太网切换          |  |      虚拟以太网切换          |
|  +---------+    +---------+ |  | +---------+    +---------+   |
|  | VPORT   |    |  VPORT  | |  | |  VPORT  |    |  VPORT  |   |
+--+---------+----+---------+-+  +-+---------+----+---------+---+
         |                 \        /                 |
         |                   \    /                   |
         |                     \/                     |
         |                    /  \                    |
         |                  /      \                  |
     +-----------+------------+  +-----------+------------+
     |   VNIC    |    VNIC    |  |    VNIC   |    VNIC    |
     +-----------+------------+  +-----------+------------+
     |          HFI           |  |          HFI           |
     +------------------------+  +------------------------+
Omni-Path封装的以太网数据包格式如下所述。
位  | 
域  | 
|---|---|
Quad Word 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)  | 
Quad Word 1:  | 
|
0-7  | 
L4 type (=0x78 ETHERNET)  | 
8-11  | 
SLID[23:20]  | 
12-15  | 
DLID[23:20]  | 
16-31  | 
PKEY  | 
32-47  | 
熵  | 
48-63  | 
保留  | 
Quad Word 2:  | 
|
0-15  | 
保留  | 
16-31  | 
L4 头  | 
32-63  | 
以太网数据包  | 
Quad Words 3 to N-1:  | 
|
0-63  | 
以太网数据包 (pad拓展)  | 
Quad Word N (last):  | 
|
0-23  | 
以太网数据包 (pad拓展)  | 
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设备 类型。
依赖于HW的VNIC功能是HFI1驱动的一部分。它实现了分配和释放OPA_VNIC RDMA netdev的动作。它涉及VNIC功能的HW资源分配/管理。它与网络堆栈接口并实现所 需的net_device_ops功能。它在传输路径中期待Omni-Path封装的以太网数据包, 并提供对它们的HW访问。在将数据包向上传递到网络堆栈之前,它把Omni-Path头 从接收的数据包中剥离。它还实现了RDMA netdev控制操作。
OPA VNIC模块实现了独立于硬件的VNIC功能。它由两部分组成。VNIC以太网管理 代理(VEMA)作为一个IB客户端向IB核心注册,并与IB MAD栈接口。它与以太网 管理器(EM)和VNIC netdev交换管理信息。VNIC netdev部分分配和释放OPA_VNIC RDMA netdev设备。它在需要时覆盖由依赖HW的VNIC驱动设置的net_device_ops函数, 以适应任何控制操作。它还处理以太网数据包的封装,在传输路径中使用Omni-Path头。 对于每个VNIC接口,封装所需的信息是由EM通过VEMA MAD接口配置的。它还通过调用 RDMA netdev控制操作将任何控制信息传递给依赖于HW的驱动程序:
+-------------------+ +----------------------+
|                   | |       Linux          |
|     IB MAD        | |       网络           |
|                   | |       栈             |
+-------------------+ +----------------------+
         |               |          |
         |               |          |
+----------------------------+      |
|                            |      |
|      OPA VNIC 模块         |      |
|  (OPA VNIC RDMA Netdev     |      |
|     & EMA 函数)            |      |
|                            |      |
+----------------------------+      |
            |                       |
            |                       |
   +------------------+             |
   |     IB 核心      |             |
   +------------------+             |
            |                       |
            |                       |
+--------------------------------------------+
|                                            |
|      HFI1 驱动和 VNIC 支持                 |
|                                            |
+--------------------------------------------+