Cyborg Intel® x710 驱动提案

本文档提出为 Intel® x710 驱动提供一个新的 Cyborg 驱动,该驱动在 Nova 的 SRIOV 网卡支持规范 1 中有提及。在 Cyborg 侧,我们需要实现一个用于 SRIOV 网卡的驱动,以便管理该设备的生命周期,并允许 Nova 从 Cyborg 请求这种类型的资源。

问题描述

Intel Ethernet Converged Network Adapter x710 2 解决了敏捷数据中心对高性能的需求,为服务器和虚拟化提供无与伦比的功能,为 LAN 或 SAN 网络提供灵活性,并提供经过验证的可靠性能。

该设备还支持 SR-IOV 虚拟化技术,可以虚拟化多达 128 个 VF,每个 VF 都可以支持 PCI Express 层次结构中与 I/O 相关功能的独特且独立的数据路径。

使用 SR-IOV 与网络设备,例如,允许单个端口(功能)的带宽被划分为更小的切片,这些切片可以分配给特定的 VM 或客户机,通过标准接口进行分配。

x710 网络适配器的一个关键特性是动态设备个性化 (DDP) 3

DDP 允许根据特定用例的需求动态重新配置数据包处理流水线,在运行时将新的数据包处理流水线配置配置文件添加到网络适配器,而无需重置或重新启动服务器。软件以非永久性、类似事务的方式应用这些自定义配置文件,因此在网络适配器重置后,或通过软件回滚配置文件更改,原始网络控制器的配置将被恢复。DPDK 提供了所有处理 DDP 包的 API。

用例

  • 作为操作员,我希望使用 Cyborg 来管理 Intel X710 的生命周期。Cyborg 侧驱动程序应该能够管理这种类型的加速资源,包括发现它、将其报告给 Placement 并对其进行编程。

  • 作为最终用户,我希望启动一个使用 Intel X710 的 VM 来加速与网络相关的负载,Cyborg 应该能够与 Nova 交互以将其分配给 VM。

  • 作为高级最终用户,我希望自定义一个在启动使用它的 VM 时加载到 Intel X710 上的配置文件,Cyborg 驱动程序应该能够提供这样的程序接口。

提议的变更

总而言之,目标是开发一个支持 discover() 和 program() 接口的 Cyborg Intel® x710 驱动程序。

发现 (Discovery)

该驱动程序应包括发现函数,这些函数将由代理定期调用,并将设备信息封装到 Cyborg 的统一数据模型中,例如 Device、Deployable、AttachHandle 等。

此外,我们还应该实现一个配置文件,让 Cyborg 驱动程序能够发现 X710 上加载的 DDP 配置文件,以及与该网卡关联的 physnet 名称,然后 Cyborg 可以将这些作为属性报告。

配置文件的示例是

[nic_devices]
enabled_nic_types = x710_static

[x710_static]
physical_device_mappings = physnet1:eth2|eth3
function_device_mappings = GTPv1:eth3|eth2

编程 (Programming)

该驱动程序应实现一个 program() 函数,允许 Cyborg API 调用以将特定配置文件加载到网卡上,这是上述第三个用例的部分实现。

为了实现此功能,Nova 需要解析用户的请求并获取配置文件的名称,Cyborg 应该从 Nova 获取此配置文件的信息,并让此驱动程序将配置文件加载到选定的设备上。

简而言之,此函数需要调用一些实用程序(例如 DPDK API 或 ethtool)来编程网卡。对于第一阶段,我们将致力于预编程场景。未来将推出另一个规范来展示此驱动程序的动态编程功能的总体设计。

备选方案

数据模型影响

一张物理 X710 卡有 2 个 PF,每个 PF 都可以虚拟化为多个 VF。VF 的最大数量因不同型号而异。

这里,我们以每个 PF 中 4 个 VF 为例。

Cyborg 中的数据模型应该如下所示

+---------------------------------------------------+
|                                                   |
|      device A                    device B         |
|   +------------------+     +------------------+   |
|   | deployable 1-4   |     | deployables 5-8  |   |
|   | +----+ +----+    |     | +----+  +----+   |   |
|   | | vf | | vf |    |     | | vf |  | vf |   |   |
|   | +----+ +----+    |     | +----+  +----+   |   |
|   | +----+ +----+    |     | +----+  +----+   |   |
|   | | vf | | vf |    |     | | vf |  | vf |   |   |
|   | +----+ +----+    |     | +----+  +----+   |   |
|   +------------------+     +------------------+   |
| X710                                              |
+---------------------------------------------------+

资源提供程序树的结构应报告如下

                     +--------------+
                     |              |
                     | compute node |
                     |              |
                     +-------+------+
                             |
      +----------------+-----+-----------------------+
      |                |                             |
      v                v                             v
+-----+-----+     +----+-------+                 +---+--------+
|           |     |            |                 |            |
|deployable1|     |deployable 2|   ...           |deployable 8|
+-----------+     +------------+                 +------------+

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

开发者影响

Deployer 需要安装 DPDK 工具包才能配置 DDP 功能。

实现

负责人

主要负责人

王欣然(xin-ran.wang@intel.com)

依赖项

测试

  • 将添加单元测试来测试此驱动程序。

  • 在 Cyborg Wiki 中添加测试结果,这是 Cyborg 社区要求的。

文档影响

需要添加或更新相关的文档。

参考资料

1

https://review.opendev.org/c/openstack/nova-specs/+/742785

2

https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ethernet-x710-brief.pdf

3

https://software.intel.com/content/www/us/en/develop/articles/dynamic-device-personalization-for-intel-ethernet-700-series.html

历史记录

修订

发布名称

描述

Wallaby

引入