存储加速方向
存储软件自身软件栈
- 存储软件自身一般通过是通过减少软件栈开销来达到优化自身的目的,比如软件栈的一些校验或者保护算法可以通过CPU的特殊指令集对存储校验或者保护算法进行优化
网络IO
- Linux网络的开销一般比较大,封包和解包一般都是在CPU端进行,数据的可靠性需要依赖TCP协议栈,而TCP协议栈保证稳定的同时TCP的操作必须经过协议栈,这就带来了数据从用户态->内核态->网卡驱动开销。数据拷贝和CP开销让网络IO往往不低。因此可以所经过的网络中,可以把数据传输的任务从CPU中卸载,交给具有RDMA功能的网卡或者只能网卡带进行远程RDMA避免传统网络IO带来的开销,目前企业级服务器一般25G网卡都支持RDMA但是需要用户态软件改造来完成功能。
存储IO
- 操作系统到实际存储设备落盘过程中,可以采用用户态的驱动和IO栈的旁路操作系统内部大部分IO栈进行加速,比如SPDK
CPU处理器的加速
超线程技术
- 超线程技术是操作系统将每个物理核心识别为2个可以并行的功能工作逻辑核,它们有独立的寄存器共用主要的执行单元。超线程开启可以提供应用软件性能的30%。如果机器很多物理核心,并且都处于空闲状态开启超线程会导致性能下降
指令加速
- AES-NI指令集,可以用于网络加密、磁盘 加密、文件加密的加密算法。AES-NI是为了加速AES算法,提高加密的数据吞吐量而设计的扩展指令
- CRC32扩展指令集,循环冗余校验(CRC)算法用于网络和存储领域进行的数据一致性检查。CRC32扩展指令针对CRC-32算法进行加速。
- SHA-NI指令集,用于加速哈希算法,SHA-NI指令集由7个SIMD指令构成,一起用来加速SHA-1 SHA-256算法
FPGA加速
数据计算加速
- 可以通过FPGA加速纠删码(EC)、数据压缩算法(gzip/LZO/LZ4)、加解密算法、哈希算法
- 可以通过软件自定义 网络负责复制和备份工作,这一网络可以通过采用FPGA的硬件改造来加速存储协议转换。