软件架构

vKAE主要由Guest OS、Host OS和KAE Hardware组成。

vKAE的加速流程与在物理机上使用KAE设备进行RSA算法加解密硬件加速类似,可以通过物理机的HPRE(High Performance RSA Engine)设备来创建VF(Virtual Function),这些VF随后被直通到虚拟机中,使得虚拟机能够使用vKAE设备进行RSA算法加解密硬件加速,并应用于Nginx场景中,从而提升网络转发性能。

vKAE特性架构图如图1所示,各模块功能如表1所示。

图1 vKAE特性架构图
表1 vKAE特性各模块功能

名称

功能

Host OS

物理机的操作系统。

Guest OS

虚拟机的操作系统。

KAE Hardware

集成在鲲鹏920处理器中,加速器的硬件实现,不直接开放给客户。

KAE Kernel Space Driver (HPRE)

KAE加速卡内核态的驱动程序,加解密场景下使用HPRE(High Performance RSA Engine),直接和KAE硬件加速卡打交道。对于鲲鹏920服务器,每个HPRE设备提供了1024个队列。

PF(Physical Function)

用于支持SR-IOV(Single Root I/O Virtualization)的PCI(Peripheral Component Interconnect)功能,拥有完全配置或控制PCIe(Peripheral Component Interconnect express)设备资源的能力。在1个HPRE设备中,单个PF默认使用256个队列。

VF(Virtual Function)

是一种轻量级的PCIe功能,与PF相关联,可以与PF以及同一PF关联的其他VF共享一个或多个物理资源。在1个HPRE设备中,有768个队列留给VF使用。VF队列数量=(1024-PF队列数量)/VF个数,余数队列会加到最后一个VF上。推荐1个PF虚拟化出8个VF数目。

WD(Warpdriver)

加速驱动,用户态驱动统一接口。

UADK Driver

用户态加速器框架(User-space Accelerator Development Kit),是一个基于UACCE(Unified/User-space-access-intended Accelerator Framework)内核模块和Linux SVA(Shared Virtual Addressing)技术的通用的加速器用户态解决方案,该方案提供一套用户态库,需要使用硬件加速的用户调用相关API完成所需要的功能。

KAE Engine

作为应用程序和硬件之间的中间层,负责“加解密操作的输入输出数据”,在用户应用程序与KAE硬件设备之间进行传递,主要操作就是IO读写。

OpenSSL Engine API

OpenSSL为第三方提供了Engine加载框架,方便用户使用自己的硬件设备完成密码学算法。

EVP API

EVP是由libcrypto实现的一系列API,使应用程序能够执行密码操作。EVP API的实现使用Core和Provider组件。

OpenSSL API

是开源的程序套件,由三部分组成:OpenSSL libcrypto、OpenSSL libssl和OpenSSL命令行工具。

OpenSSL libcrypto

OpenSSL加解密算法库,具有通用功能的加解密库,里面包含众多加解密算法。

OpenSSL libssl

OpenSSL中支持TLS(SSL和TLS协议)的库,并依赖于libcrypto。

Nginx

Nginx应用程序。