ceph加速

Ceph加速

1. SPDK/DPDK
2. SIMD 
3. Intel-QAT 
4. AES-NI 
5. SHA-NI 
6. CRC32 
7. ISA-L

SPDK/DPDK

SPDK (Storage Performance Development Kit ) —— 针对于支持nvme协议的SSD设备,是一种高性能的解决方案。

DPDK (Data Plane Development Kit) -- 专注于网络应用中数据包的高性能处理。

SPDK/DPDK应用程序运行在操作系统的User Space,利用自身提供的数据面库进行数据处理,绕过了Linux内核,以提升报文处理效率。

SPDK/DPDK基于UIO,VFIOigb_uio的支持直接将存储设备的的地址空间映射到应用空间的方式,并利用NVMe/Net规范来初始化NVMe SSD/Net device设备,实现基本的I/O操作,从而构筑用户态驱动,所以整个过程不需要陷入到内核中

SPDK/DPDK用户态驱动的方案中,使用异步轮询取代中断,通过CPU不断轮询的方式,一旦查询到操作完成,则立马触发回调函数,给到上层用户程序,这样用户程序可以按需发送多个请求,以此提升性能。

img

原文链接:https://blog.csdn.net/ApeLife/article/details/100751359

spdk组件

img

SPDK中大概有三类子组件:网络前端、处理框架、后端。

网络前端子组件:包括DPDK网卡驱动和用户态网络服务UNS(这是一个Linux内核TCP/IP协议栈的替代品,能够突破通用TCP/IP协议栈的种种性能限制瓶颈)。DPDK在网卡侧提供了一个高性能的发包收包处理框架,在数据从网卡到操作系统用户态之间提供了一条快速通道。UNS代码则继续这一部分处理,稍加处理TCP/IP数据包的标准处理方式,并形成iSCSI命令。

处理框架:包括iSCSI Target和Customer Storage App,“处理框架”部分拿到了数据包内容,将iSCSI命令转换为SCSI块级命令。然而,在它将这些命令发到“后端”驱动之前,SPDK提供了一套API框架,让厂商能够插入自己定义的处理逻辑(架构图中绿色的方框)。通过这种机制,存储厂商可在这里实现例如缓存、去重、压缩、加密、RAID计算,或擦除码(Erasure Coding)计算等功能,使这些功能包含在SPDK的处理流程中。

后端:数据到达了“后端”驱动层,在这里SPDK和物理块设备交互(读和写操作)。这一系列后端设备驱动涵盖了不同性能的存储分层,保证SPDK几乎与每种存储应用形成关联。

原文链接:https://blog.csdn.net/bandaoyu/article/details/124740721

SIMD

SIMD(Single Instruction Multiple Data)即单指令流多数据流,是一种可以对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据。

img

在 Ceph 中,SIMD 技术可以应用于数据编解码、数据压缩和加密等方面,进行加速。

变量定义

第一部分,统一为”__m“;
第二部分为位数如“64”、“128”、“256”等;
第三部位为变量类型,int型:“i”,double型:“d”,float型什么也不加。

例如“__m128i” 的意思是定义128位的int型数据。

函数定义

第一部分定义输出的数据类型的位数  128位:_mm  256位:_mm256  512位:_mm512

第二部分定义功能的名称例如,载入数据“_load”,加法“_add”,存储“_store”;

第三部分定义该功能的详细数据类型,比如8位整数“_epi8”、无符号8位整数“_epu8”、16位整数“_epi16”,双精度浮点数“_pd”

例如 _mm_add_epi16(a,b),的意思是数据总位数为128,将a和b其中每16位为一个数字进行对应相加。
a可以看作a[0]、a[1]、a[2]...a[7]。b看作b[0]、b[1]、b[2]...b[7]。然后a[0]+b[0]、a[1]+b[1]...a[7]+b[7]为结果。

简单示例

#include <immintrin.h>
#include <stdio.h>
 
float aa[] = {10, 20, 30, 40, 50, 60, 70, 80};
float bb[] = {0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5};
float cc[] = {0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5};
 
int main(int argc, char* argv[])
{
 
    __m256 first  = _mm256_loadu_ps(aa);
    __m256 second = _mm256_loadu_ps(bb);
    __m256 result = _mm256_add_ps(first, second);
                    _mm256_storeu_ps(cc, result);
                     
    printf("==%ld \n", sizeof(float));
    for (int i = 0;i < 8; i++)
    {
        printf("%f\n", cc[i]);
    }
 
    return 0;
}

//_mm256_loadu_ps等函数可通过https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html
//loadu,load表示内存是否需要对齐
//SSE的浮点运算指令分为两大类:Packed 和Scalar。
//Packed指令是一次对XMM寄存器中的四个浮点数(即DATA0 ~ DATA3)均进行计算,而Scalar则只对XMM暂存器中的DATA0进行计算。

gcc -mavx2 test.c -o test

user@node1:~$ ./a.out
==4
10.500000
20.500000
30.500000
40.500000
50.500000
60.500000
70.500000
80.500000

Intel-QAT

Intel® QuickAssist Adapter 8950 设备简介

支持英特尔®QuickAssist技术的英特尔®QuickAssist适配器提供加密加速和压缩加速服务。
在这里插入图片描述

intel® QuickAssist Adapter 8950 特性

在这里插入图片描述

Intel QAT加速卡逻辑实例

处理器可以连接到一个或多个英特尔通信芯片组8925至8955系列(PCH)设备。 从软件角度来看,每个PCH设备都包含一个逻辑加速器。 从物理上讲,每个设备都包含多个加速器,这些加速器被负载均衡硬件组件抽象成一个加速器, 发送到一个逻辑加速器的所有请求将在PCH设备内的各个物理加速器之间自动进行负载均衡。 对软件来说,只需要操作一个逻辑加速器即可,可以大大简化应用程序的编程方式,提高工作效率。

一组32个环形存储区(Ring Bank)提供了处理器与PCH设备上的加速引擎之间的通信机制。 每个环形存储区(Ring Bank)包含16个单独的环(Ring)用于通信。 下图显示了处理器,PCH设备,加速器和环形存储区(Ring Bank)之间的关系。

img

处理器和PCH设备之间的通讯流程

加速服务通过对请求和响应消息分别使用不同的环进行通讯。处理器和PCH设备之间的通信通过以下操作实现(另请参见下图):

  • 处理器使用写(Put)操作将请求放置在请求环上。

  • PCH设备使用读取(Get)操作从请求环中检索请求。

  • 执行完该操作后,PCH设备将使用写(Put)操作将响应放入响应环。

  • 处理器使用读取(Get)操作从响应环中检索响应。

    img

    原文链接:https://www.bbsmax.com/A/gAJGNrq8zZ/

AES-NI

高级加密标准指令集 (或称英特尔 高级加密标准新指令 ,简称 AES-NI )是一个 x86 指令集架构 的扩展,用于 IntelAMD 微处理器 ,由Intel在2008年3月提出。 [1] 该指令集的目的是改进应用程序使用 高级加密标准 (AES)执行加密和解密的速度。(AES-NI是一种CPU特性。)

检查cpu是否支持该功能

$ cat /proc/cpuinfo | grep aes | wc -l

AES-NI: https://www.intel.com/content/dam/develop/external/us/en/documents/10tb24-breakthrough-aes-performance-with-intel-aes-new-instructions-final-secure-165683.pdf

ceph中使用AES

ceph中可以使用AES对传输的数据进行加密,保护数据安全。

SHA-NI

SHA-NI指令集,用于加速哈希算法,SHA-NI指令集由7个SIMD指令构成,一起用来加速SHA-1 SHA-256算法

链接:https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sha-extensions.html

ceph中使用SHA

ceph中可以使用SHA对数据完整性进行验证。一般用于安全性比较高的场景,比如数字签名等。

CRC32

CRC32扩展指令集,循环冗余校验(CRC)算法用于网络和存储领域进行的数据一致性检查。CRC32扩展指令针对CRC-32算法进行加速。

ceph中使用CRC

ceph中可以使用CRC对数据完整性和正确性进行验证。一般用于计算效率要求高的场景,比如通信数据的校验。

ISA-L

ISA-L分为了isa-l_pub版本和isa-l_crypto版本, 如图所示。前者主要包含了在存储领域的一些算法,后者主要包含的是密码学的一些算法,包括在最新版本中增加了高性能SM3算法的支持。

img

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值