随着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文件。
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的配额管理用于在构建虚拟机时管理用户或项目对加速器的访问。目前,项目或用户可能拥有无限数量的加速资源,应该有一个限制,限制是可配置的。