01 背景和动机
压缩作为一种有效降低SSD数据写入量的方法由于受到CPU压缩/解压效率不高的影响,在某些情况下吞吐量甚至低于非压缩IO系统。而硬件ASIC压缩加速器在性能、功耗上都优于CPU/GPU/FPGA ,且高性能的硬件压缩加速器成本越来越低,如Intel QAT加速器甚至直接集成在芯片组内。
文章首先进行了两个实验,第一个实验是在NVMe SSD+HDD组成的混合存储系统上分别使用启用GZIP和LZ4压缩功能的ZFS文件系统进行写性能测试,结果表明,压缩有效降低了系统的写入量,同时发现与LZ4算法相比,GZIP压缩率更高,但是计算开销也更高。第二个实验是分别在启用GZIP和LZ4压缩功能的ZFS文件系统上进行大数据分析性能测试,测试结果如下图所示,可以看出GZIP与LZ4相比,IO开销更少,但是由于解压开销过大,性能甚至不如不适用压缩的ZFS。
可以发现:GZIP的高CPU占用可能导致资源竞争、影响其他任务;压缩/解压应该卸载到硬件完成而不是使用低效而繁忙的CPU处理。
02 QZFS的设计与实现
本文作者对ZFS的压缩路径进行了改造,将软件压缩替换为QAT硬件压缩。为了使用QAT对ZFS进行压缩加速,需要解决以下问题:首先,卸载压缩应该将压缩、解压函数调用替换为ASIC IO调用;其次,由于QAT对数据的处理与软件实现的压缩不同,因此需要对数据进行预处理;之后,为了高效的压缩卸载,需要对运行时的内存地址翻译、操作进行优化;最后,为了优于卸载开销,需要选择性的将部分压缩任务卸载到QAT,而不是全部交给QAT实现。
整个QZFS的设计如下图所示,设计基于QAT硬件压缩加速器和ZFS文件系统实现,可以作为Lustre的后端文件系统。整个QZFS实现仅依赖QAT的硬件API和Linux环境,并且已经合入ZFS官方版本。
压缩服务引擎由压缩性检查器和算法选择器组成,用于决定哪些压缩任务卸载到QAT加速器上。功能包括压缩率决定的压缩卸载、原始数据大小决定的选择性卸载和可扩展的压缩算法选择器。
压缩率决定的压缩卸载是使用压缩率检查器决定是否将数据保存为压缩格式,当检查器收到ZIO模块的写入请求时,记原始数据长度,预设压缩结果长度,若QAT压缩结果长度超过,则直接进行原始数据写入,不进行压缩。
原始数据大小选择性卸载是指:由于对过小的数据进行硬件压缩卸载造成的硬件通信开销过大,而过大的数据需要在内核中预留过多的连续内存,因此需要根据数据大小将压缩任务选择性的卸载到QAT加速器上运行。当时,卸载到QAT执行,其他大小则使用软件压缩。
可扩展的压缩算法选择器用于在压缩时选择合适的算法进行压缩,由于其高度模块化,因此可以方便的扩展其他压缩算法,文章发表时仅实现了GZIP的压缩方法。
QAT需要连续的物理内存存放数据,而ZIO使用的虚拟内存物理上可能不连续,因此使用扁平缓冲和分散缓冲表实现了向量IO模型,整个模型结构如下图所示。这种将连续数据分割成定长的数据块组并分散存放可以避免在调用QAT时分配大量连续内存引起的内存复制开销。
为了进行负载均衡,避免任务堆积,需要对QZFS的硬件压缩卸载进行调度。具体方法为:在QZFS启动时,QAT卸载模块会初始化一个逻辑实例,分配部分连续的物理内存作为QAT运行数据缓存区,并建立与QAT硬件的通信通道。当压缩任务过多时,任务卸载模块可能因为没有足够的QAT计算资源无法获得QAT实例,此时卸载模块将通过软件替代即使用CPU完成压缩来平衡系统的计算资源。
每个卸载的压缩任务使用压缩会话描述。有时,这些压缩会话可能会发生错误。如果无法正确处理QAT加速器上的故障,则可以重新启动QAT设备进行恢复。在这种情况下,QAT卸载模块清理所有正在执行的压缩会话,并将可用性标志设置为FALSE,以禁用所有QAT卸载操作,直到完成重新初始化操作。
03 评估
整个评估平台由4台服务器组成,每台装备有两个22核心Xeon E5-2699v4,128G RAM,1组NVMe SSD阵列和一块DH8950 PCIe QAT card。每个NVMe阵列由3块1.6TB Intel P3700 Series NVNe SSD组成。服务器通过Intel XL710 40GB 网卡和100Gb以太网交换机连接,具体连接方式如下图所示。
使用fio进行多线程读写性能基准测试。测试结果如下图所示,结果表明,在压缩关闭配置中,平均读吞吐量比平均写吞吐量高18%,随机读取吞吐量最高3937 MB/s,与NVMe固态硬盘的硬件特性一致。软件GZIP下,平均读比写吞吐量高出约4.5倍,这是因为GZIP算法的压缩速度远低于解压速度。启用QAT加速器后,平均读吞吐量与写吞吐量相近。总的来说,QAT配置具有最高的读/写吞吐量和成本效率。GZIP配置与QAT配置具有相似的压缩比,但其高CPU开销不仅导致写入吞吐量低、系统效率低。与OFF配置相比,开启QAT因为压缩数据降低了存储的I/O成本,因此改进了吞吐量(读10%,写28%)。
在Luster客户端上运行Luster OSS访问存储上的科学数据,部署方式分别为单节点集群和多节点(3/4节点)集群。
首先,作者分析了不同硬件/软件方案在进行科学大数据分析时的执行时间,可以看出,由于分析转换时间固定,执行差异集中在解压开销,可以看出QZFS保持了最高的解压效率。
之后,作者分析了不同线程数量下的执行时间和效率,结果如下图所示。单线程下,相对于软件GZIP,QAT配置下的执行时间降低了约30%。随着线程数增加,GZIP和QAT配置的执行时间逐渐减少。在每个工作负载进程中有16个线程的情况下,QAT加速的gzip性能优势从30%增长到60%,因为更多的线程产生更多的并行I/O请求,提高了底层QAT加速器的利用率。
在三节点、四节点上进行性能测试的结果与单节点模式类似,QAT平均降低了63.10%和63.14%的执行时间,整体效率提升了6倍多。
04 总结
高IO性能和低总体成本是两个难以同时实现重要的优化目标。数据压缩被认为是一种有效的解决方案,但压缩任务会产生较高的计算资源消耗,并可能影响应用程序工作负载的运行。本文研究了文件系统级别的数据压缩卸载。QZFS旨在将Intel QAT加速器集成到ZFS文件系统中,以提供与应用程序透明且经济高效的数据存储。评估已经验证,与带软件gzip压缩的ZFS、应用程序集成gzip加速相比,QZFS可以有效节省CPU资源,并进一步提高大数据处理工作负载的性能。
The End
致谢
感谢本次论文解读者,来自华东师范大学的硕士生黄奕阳,主要研究方向为文件系统压缩。
点一下“阅读原文”获取论文