随着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的两个流程来介绍其主要功能:资源发现和上报流程、创建带加速硬件的实例流程。

 

OpenStack硬件管理加速利器: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文件。

 

 

Cyborg调用加速器过程

OpenStack硬件管理加速利器:Cyborg-编程知识网

1.ronic监控网络并发现新资源
2.新的主机通过pXE启动并用Hypervisor初始化
3.Agent更新Nova和Neutron DB
4.Ironic agent根据存储在swift / glance / glare中的比特流加载静态区域
5.Nova agent被通知存在新的PCIe设备(来自SR-IOV的VF)并更新Nova DB
6.Nova根据用户指令需要孵化一台虚拟机并配备PR(vFPGA)
7.Nova过滤器找到可用资源并执行虚拟机创建/配置
8.VM cloud_init使用本地文件或Swift中的比特流加载PR—VM请求Cyborg从Glare加载PR
9.VF注册并分配给虚拟机
10.VM应用程序访问VF

总体来说,Cyborg的出现,在云主机中支持 vGPU( 虚拟图形处理单元 )的功能,这对于图形密集型工作负载以及许多科学性的、人工智能和机器学习的工作负载来说是一项重要的能力。

Cyborg API—应该支持有关加速器的基本操作,API支持以下接口:

  • attach:连接现有的物理加速器或创建新的虚拟加速器,然后分配给虚拟机
  • detach:分离现有物理加速器或释放虚拟机的虚拟加速器
  • list:列出所有附加的加速器
  • update:修改加速器(状态或设备本身)
  • admin:CRUD操作无关的某些配置

Cyborg Agent—Cyborg agent将存在于计算主机以及可能使用加速器的其他主机上,agent具体的作用:

  • 检查硬件以找到加速器
  • 管理安装驱动程序,依赖关系和卸载驱动
  • 将实例连接到加速器
  • 向Cyborg服务器报告有关可用加速器,状态和利用率的数据
  • 硬件发现:每隔数秒就会扫描实例的加速器和现有加速器的使用级别,并将这些信息通过心跳消息报告给Cyborg服务器,以帮助管理调度加速器

  • 硬件管理:Ansible将用于管理每个加速器的配置文件和加速器的Driver。install和uninstall特定的ansible playbook适配Cyborg所支持的硬件。在管理的硬件上进行的配置更改将通过运行不同配置的playbook作为底层实现。

  • 实例连接:一旦产生一个实例需要连接到主机上的特定加速器,Cyborg服务器将向Cyborg agent发送消息。由于不同加速器之间的连接方法不同,因此agent需要不同的driver提供连接功能。

Cyborg-Conductor—Cyborg-db的数据库查询更新操作都需要通过向Cyborg-conductor服务发送RPC请求来实现,conductor负责数据库的访问权限控制,避免直接访问数据库。

openstack-Cyborg-generic-driver功能:

  • 识别和发现附加的加速器后端
  • 列出在后端运行的服务
  • 将加速器附加到通用后端
  • 从通用后端分离加速器。
  • 列出附加到通用后端的加速器。
  • 修改附加到通用后端的加速器。

Quata—cyborg resource quota,Cyborg的配额管理用于在构建虚拟机时管理用户或项目对加速器的访问。目前,项目或用户可能拥有无限数量的加速资源,应该有一个限制,限制是可配置的。