随着5G商用的渐近,通信行业也迎来了5G的机遇与挑战。大规模机器类通信、超可靠、低延迟通信需求场景(智能家居、智慧城市、增强现实、工业自动化、自动驾驶等)的兴起,对未来网络的计算和流量转发能力提出了更高的要求。通用CPU设备已经无法满足处理海量数据、图片、流量的需求。
根据不同业务场景和自身优势,通讯厂商引入GPU、FPGA等进行加速,推出了各种加速硬件方案。对于异构加速硬件,要运行在各种CloudOS上,再被上层厂家的VNF调用,假如没有一个统一的标准来管理这些加速卡,没有统一的接口来让上层网元调用,将会造成比较严重的问题。
为了实现NFV异构加速硬件的统一管理, ETSI制定了NFV加速硬件统一管理软件框架标准。此后,该标准被拓展至更多场景,并在OpenStack孵化出了Cyborg项目。
Cyborg,目前唯一的开源硬件加速管理软件项目
Cyborg的主要功能包括硬件资源的发现、上报、挂载\卸载等资源管理。用户可以通过Cyborg列出计算节点上已经被发现和上报的加速器、并创建带加速器的实例。对于一些特殊硬件的特殊功能或配置(如:FPGA的编程),也将在cyborg实现。
Cyborg采用经典架构,由cyborg-api、cyborg-conductor、cyborg-agent、 cyborg-db几个模块组成。其中Cyborg-agent位于计算节点,用于监控加速器;cyborg-conductor位于控制节点,管理整个系统和操作数据库。cyborg-api和cyborg-db分别为接口和数据库,均位于控制节点。
下面通过Cyborg的两个流程来介绍其主要功能:资源发现和上报流程、创建带加速硬件的实例流程。
加速资源发现和上报流程:
1. 各设备的driver为加速设备构造Cyborg中用于描述设备的数据结构,等待cyborg-agent轮询取走设备数据;
2. cyborg-agent周期性扫描计算节点enabled的driver;
3. cyborg-agent获取到driver上报来的数据信息后,通过cyborg-conductor将资源信息写入placement(更新Resource Provider(RP), Resource Class(RC),traits)和cyborg-db(更新devices, deployables, attach_handles, attributes, controlpath_ids)
创建带加速硬件的实例流程:
1. User在cyborg创建一个加速资源模板device_profile(类似于nova flavor);
2. User创建flavor,并在extra-spec属性中设置device_profile的name;
3. User 使用已创建的flavor 发送boot虚机请求;
4. Nova-api接受到请求以后, 向cyborg发起请求获取device_profile信息,并将device_profile信息合入request_spec,用于调度;
5. 调度过程中nova-scheduler向placement请求获取符合request_spec中要求的硬件加速资源,placement返回满足要求的主机列表,之后主机列表再通过nova-scheduler其他Filter的过滤,排序后选定某个主机;
6. Nova-compute在选定的主机上部署实例,并向cyborg请求加速资源的挂载操作:
Nova-compute根据device_profile向cyborg请求创建加速器请求(Accelerator Request, ARQ),并为每个ARQ匹配硬件资源Resource Provider(RP)。 需要说明的是:ARQ包含instance_uuid、 resource_provider_id、host_name、 device_profile_id等字段信息。一个ARQ对应一个device_profile_group, 一个device_profile_group对应request spec中的一个request group。
Nova-compute向cyborg发送绑定设备(bind_ARQ)的请求。Cyborg根据ARQ信息绑定instance、host、device,绑定结束后更新ARQ的状态,并通知nova当前ARQ绑定操作是否成功;
Nova-compute接到ARQ绑定操作结束的通知后,从ARQ获取设备信息,并将设备BDF信息写入instance的XML文件。
中兴通讯持续社区贡献
社区T版本的主要工作在于实现S版本重新定义的加速硬件数据结构、基本发现、上报、挂载流程,目前社区已实现基本的管理功能,与placement交互基本完成,与nova组件的交互尚在推进中,有待成熟。另一方面社区在提升Cyborg代码规范、及产品可用性方面也投入了大量精力:T版本引入集成测试、并全面引入flak8测试提升源代码的规范、python3支持。Driver的支持方面,cyborg社区T版本新增了AICHIP ASCEND Driver。
我司从Queens版本开始投入Cyborg,历经四个版本,见证了Cyborg功能的逐步实现和完善。总体来说,中兴通讯的贡献主要在三方面: 第一、Cyborg与Nova交互的集成测试以促进Cyborg的商用进程 (包括了加速硬件需求的接口测试,?设备调度和挂载测试,设备上报数据库,Tempest CI及测试);第二、对现有Driver 的维护、支持更多的Driver (eg. ZTE自研高精度时钟卡Driver);第三、提升源代码规范和质量(全面改善flake8测试)、完善接口文档。
在OpenStack Train Release中,中兴通讯在项目的commits和reviews均排名第二。中兴通讯在项目拥有两位Core Reviewer。在未来,中兴通讯将持续投入在Cyborg中,为Cyborg项目的发展做出贡献。