鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

存储算法加速库

概述

存储算法加速库(KSAL)是华为自研的存储算法加速库,当前包括EC编解码算法、CRC16校验算法和CRC32校验算法。

EC编解码算法通过同构映射将EC编码过程中所需的高阶有限域GF(2^w)乘法操作替换为二元矩阵乘法,将通过查表实现的复杂有限域乘法操作替代为XOR操作,同时采用编码编排算法在校验块计算过程中对中间结果进行复用,减少XOR操作数,配合鲲鹏向量化指令实现编码加速。

CRC16校验算法和CRC32校验算法采用大数求余算法原理优化以及鲲鹏亲和优化的CRC16/CRC32库替代系统标准CRC16/CRC32校验算法,提升系统性能。

技术原理

EC编解码

算法原理:

采用向量编码以低阶二元XOR操作(向量化加速)替代传统标量编码(Jerasure,ISA-L)的高阶有限域乘法(需使用LUT,10+指令操作),配合编码调度,复用中间计算结果减少操作数,大幅提升EC编码性能。

图1 向量编码多级加速

运行上下文

Plog Client(Index侧)

调用接口

EC编码、EC解码/重构/降级读接口

CRC16校验

假设数据信息序列多项式为M(x),本原多项式为P(x),则CRC定义为:

举例说明上面定理的含义:假设被除数是10,除数是3,则可以先用10除6,再用余数除3,得到4除3的余数。即10除6的余数为4,4除3的余数为1。

由于符合条件的并非唯一,可考虑以下的条件收缩选择范围:

  • Q(x)非零项的数目对应于算法复杂度。
  • Q(x)的次数对应于算法需要的寄存器数量。
  • Q(x)的最高次项与第二高次项的次数差值对应于算法需要的并行度。

依应用场景的不同,可基于以上条件的权衡以选出较合适的。

CRC32校验

算法原理

#ifdef __aarch64__
#define CRC32D(crc, value) __asm__("crc32x %w[c], %w[c], %x[v]":[c]"+r"(crc):[v]"r"(value))
#define CRC32W(crc, value) __asm__("crc32w %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(value))
#define CRC32H(crc, value) __asm__("crc32h %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(value))
#define CRC32B(crc, value) __asm__("crc32b %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(value))

运行上下文

消息校验,数据一致性校验。

预期效果

EC编解码

对比主流开源EC算法,编码平均吞吐性能提升100%。

CRC16校验

对比主流开源CRC16算法,4K校验性能提升100%。

CRC32校验

单个IO消耗CPU的算力减少50%以上,整体收益预计3%。在4KB、8KB、64KB、256KB和1MB块大小情况下,相比ceph_crc32c_sctp性能提升100%,相比ceph_crc32_sctp提升20%。