dmsong
作者dmsong·2021-06-29 15:44
系统工程师·IPS

Power9的nxgzip硬件压缩加速器在生物信息学中的应用

字数 2490阅读 1026评论 0赞 0

背景
数据压缩的使用场景很多,如备份/归档,大文件的存储和传输,使用数据压缩,可以节约存储空间,节约传输时间。
Power9特有的硬件压缩加速技术,通过芯片上的nxgzip的硬件加速模块,能极大提高压缩/解压缩速度,提高生产效率。

单细胞测序技术是近几年是非常热门的研究方向。传统测序方法是在多细胞水平进行的,得到的变异水平也是成千上万个细胞的平均后水平,丢失了异质性的信息。相比传统测序方法,单细胞测序能够检出混杂样品测序所无法得到的异质性信息,因而被越来越广泛应用于基础科研和临床研究,对于癌症早期的诊断、追踪以及个体化治疗具有重要意义。
人类的全基因序列大约30亿个碱基对,测序文件大小约2G。而对于单细胞测序,由于一次测序数十到数百个细胞,得到的测序文件大约500G,压缩后也有100G左右。在处理序列文件时,相比实际处理序列所花时间,有大量时间浪费在文件的解压上,限制了每天所能处理的样本数量。

测试过程与测试结果
要使用Power9的nxgzip硬件压缩加速功能,需要升级FW到特定版本,升级内核支持nxgzip,然后在系统中激活nxgzip。激活之后,通过添加LD_PRELOAD环境变量,可以像使用软件gzip一样使用nxgzip了。详细配置过程参见参考资料。
简单的压缩/解压缩功能可以使用nxgzip自带的测试程序来完成。如下所示:

/opt/at12.0/bin/gcc -O3 -L /usr/lib/ -o genwqe_gzip genwqe_gzip.c -lz   
export LD_PRELOAD=/lib64/libnxz.so   
time /nx_zlib_test/genwqe_gzip -c queue.all.log.20191114 > log.gz  

测试结果表明,使用nxgzip硬件压缩特性,相比使用软件gzip,性能有10倍以上的提升。

我们的客户编写了一个demo程序,利用kseq,从测序得到的序列压缩文件中读取序列。代码示例如下:

#include <zlib.h>
#include <vector.h>
#include <sting>
#include <iostream>
#include "kseq.h"   
KSEQ_INIT(gzFile,gzread)   
int demo(const char* fq){   
gzFile fp;   
kseq_t *seq;   
fp = gzopen(fq,"r");   
seq = kseq_init(fp);   
std::vector exampleContainer;   
while (kseq_read(seq)>=0){   
//doing something   
exampleContainer.push_back(seq->seq.s);   
}   
std::cout << exampleContainer.size() << std::endl;   
return 0;   
}   
int main(int argc,char *argv[]){   
if (argv[1] !=NULL){   
demo(argv[1]);   
}   
return 0;   
}  

使用IBM Advanced Toolchain编译运行demo程序

g++ --std=c++11 -O2 -mcpu=power9 -mtune=power9 -maltivec -fopenmp -lm -lnxz demo.cpp -o demo

处理一个50G的序列压缩文件(有7亿多条记录,30亿行),测试结果如下:

[root@localhost demo_fqgz_deflate_barcode]# time LD_PRELOAD=/lib64/libnxz.so.201125 ./demo /data/Test_data/44-RE.2.fq.gz   
752454539   
real 7m18.194s   
user 7m8.366s   
sys 0m9.754s  

对比使用标准libz库的测试结果

[root@localhost demo_fqgz_deflate_barcode2]# time ./demo /data/Test_data/44-RE.2.fq.gz   
752454539   
real 18m29.003s   
user 18m18.939s   
sys 0m9.879s  

对比可见性能有2.5倍的提升。

结论
如前所述,在只做压缩/解压缩时,使用nxgzip硬件压缩技术,相比软件gzip,性能提升10倍以上。但在上面的demo测试中,程序的逻辑是,从序列压缩文件中读一部分数据,解压,放入缓冲区,kseq从缓冲区读出序列并处理。这个串行的处理流程限制了nxgzip加速的优势。不过,我们仍然可以看到,处理一个50G的压缩序列文件时,在没有其他优化措施的情况下,使用nxgzip硬件解压缩,比软件gzip时间缩短了至少10分钟。使得客户每天能处理更多的样本。
如果我们继续对kseq进行优化,比如使用多线程增加并行度,能充分利用nxgzip的性能优势,那么处理样本的效率还能进一步提升。
所以,Power9的nxgzip硬件加速器对于生物信息学领域里大量需要压缩/解压缩的场景,都可以起到很好的加速作用。

参考资料:
1, https://www.talkwithtrend.com/Article/251261, NXGZIP硬件压缩加速技术应用,李松青
2,https://github.com/libnxz/power-gzip, Power-gzip代码和文档
3,https://github.com/hmyneni/linux.git, linux内核补丁

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

X社区推广