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

性能测试

kunpeng-lzbench是基于lzbench的测试框架,并将ZSTD等算法修改为动态库的调用方式,用于对比不同压缩算法库之间的解压缩性能。

编译测试工具

  1. Gitee仓获取lzbench源码。
  2. 使用make方式编译生成lzbench二进制工具。

块压缩性能测试

本小节提供调用开源ZSTD算法库和调用KZstar算法库测试块压缩性能的操作步骤,对比调用KZstar算法库前后的性能提升效果。

调用开源ZSTD算法库测试块压缩性能

  1. 查看测试工具所使用的算法库。
    ldd lzbench
    回显如下内容,表示使用的是开源ZSTD算法库。
     linux-vdso.so.1 (0x0000ffffae181000)
     libz.so.1 => /usr/lib64/libz.so.1 (0x0000ffffae113000)
     libzstd.so.1 => /usr/lib64/libzstd.so.1 (0x0000ffffae012000)
     liblz4.so.1 => /usr/lib64/liblz4.so.1 (0x0000ffffadfe1000)
     libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000ffffaddeb000)
     libm.so.6 => /usr/lib64/libm.so.6 (0x0000ffffadd4a000)
     libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x0000ffffadd19000)
     libc.so.6 => /usr/lib64/libc.so.6 (0x0000ffffadb6a000)
     /lib/ld-linux-aarch64.so.1 (0x0000ffffae144000)
  2. 调用开源ZSTD算法库测试块压缩性能,指定压缩等级为level 3,分块大小为128KB。
    ./lzbench -ezstd,3 -b128 itemdata
    压缩结果如下所示。
    lzbench 1.8 (64-bit Linux)  (null)
    Assembled by P.Skibinski
    
    Compressor name         Compress. Decompress. Compr. size  Ratio Filename
    memcpy                  37655 MB/s 37041 MB/s     7316868 100.00 itemdata
    zstd 1.5.5 -3             195 MB/s   851 MB/s     2257863  30.86 itemdata

调用KZstar算法库测试块压缩性能

  1. 设置KZstar环境变量,使能KZstar。
    export LD_LIBRARY_PATH=/usr/local/kzstar/lib:$LD_LIBRARY_PATH
  2. 查看测试工具所使用的算法库。
    ldd lzbench
    回显如下所示,表示使用的是KZstar算法库。
     linux-vdso.so.1 (0x0000ffffa84cf000)
     libz.so.1 => /usr/lib64/libz.so.1 (0x0000ffffa8461000)
     libzstd.so.1 => /usr/local/kzstar/lib/libzstd.so.1 (0x0000ffffa8380000)
     liblz4.so.1 => /usr/lib64/liblz4.so.1 (0x0000ffffa834f000)
     libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x0000ffffa8159000)
     libm.so.6 => /usr/lib64/libm.so.6 (0x0000ffffa80b8000)
     libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x0000ffffa8087000)
     libc.so.6 => /usr/lib64/libc.so.6 (0x0000ffffa7ed8000)
     /lib/ld-linux-aarch64.so.1 (0x0000ffffa8492000)
     libzstar.so => /usr/local/kzstar/lib/libzstar.so (0x0000ffffa7ea7000)
     libsecurec.so => /usr/local/kzstar/lib/libsecurec.so (0x0000ffffa7e76000)
  3. 调用KZstar算法库测试块压缩性能,指定压缩等级为level 3,分块大小为128KB。
    ./lzbench -ezstd,3 -b128 itemdata 
    压缩结果如下所示。
    lzbench 1.8 (64-bit Linux)  (null)
    Assembled by P.Skibinski
    
    Compressor name         Compress. Decompress. Compr. size  Ratio Filename
    memcpy                  37578 MB/s 37182 MB/s     7316868 100.00 itemdata
    zstd 1.5.5 -3             261 MB/s  1030 MB/s     2266113  30.97 itemdata
    done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=128KB cSpeed=0MB)

上述测试结果中压缩性能从195MB/s提升到了261MB/s,解压缩性能从851MB/s提升到了1030MB/s。由此可以看出不配置并发优化选项,只使用普通优化手段,对比开源ZSTD算法,使用KZstar算法后压缩性能和解压性能均有一定提升。

并发压缩测试

当存在空闲CPU资源时,可以通过配置对应的环境变量ZSTAR_THREAD_NUM_ENV和ZSTAR_THREAD_COMPRESS_LIMIT_ENV,实现压缩包的拆分,将压缩解压并行化,从而在不修改业务代码的前提下提升解压缩性能。环境变量说明如表1所示。

表1 并发压缩相关环境变量说明

环境变量名称

环境变量说明

配置值说明

ZSTAR_THREAD_NUM_ENV

用于设置可使用的线程数量。线程数量包含了初始的主线程,即创建的子线程数量实际为ZSTAR_THREAD_NUM_ENV减1。

  • 使用非流式并行化解压时,必须要使用非流式并行化压缩生成的数据,解压时实际使用到的线程数量为压缩和解压使用到的线程数量的较小值。
  • 使用非流式压缩或解压时,主线程会参与到压缩或解压过程,实际线程数量与设置的线程数量一致;使用流式压缩时,主线程不参与压缩过程,实际线程数量为设置的线程数量减1。

默认值为0,最大为17。

  • 当不设置线程数量,或者线程数量被设置为0或者1时,表示不启用多线程。
  • 当线程数量设置超过17时,则会将线程数量设置为17。

ZSTAR_THREAD_COMPRESS_LIMIT_ENV

用于设置非流式压缩时,开启并行化所需数据量的最低大小。

当非流式压缩输入数据大小大于等于设置的下限时,才会进行并行化压缩;否则使用单线程压缩。

并发解压需要基于并发压缩的包才有效果,否则只按单任务方式解压。

单位为字节(Byte),默认值为512KB。

输入合规的正整数可以对并行化下限进行调整,其余如负数、非整形数等会被判断为无效值,仍使用默认下限。

本小节提供使能KZstar算法后的并发压缩测试步骤,对比使用并发压缩前后的性能提升效果。

设置线程数量为3,分块大小分别为128KB和512KB时KZstar算法库块压缩性能

  • 调用KZstar算法库测试块压缩性能,设置环境变量ZSTAR_THREAD_NUM_ENV=3,指定压缩等级为level 3,分块大小为128KB。
    ZSTAR_THREAD_NUM_ENV=3 ./lzbench -ezstd,3 -b128 itemdata
    压缩结果如下所示。
    lzbench 1.8 (64-bit Linux)  (null)
    Assembled by P.Skibinski
    
    Compressor name         Compress. Decompress. Compr. size  Ratio Filename
    memcpy                   6512 MB/s 37298 MB/s     7316868 100.00 itemdata
    zstd 1.5.5 -3             261 MB/s  1030 MB/s     2266113  30.97 itemdata
    done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=128KB cSpeed=0MB)
  • 调用KZstar算法库测试块压缩性能,设置环境变量ZSTAR_THREAD_NUM_ENV=3,指定压缩等级为level 3,分块大小为512KB。
    ZSTAR_THREAD_NUM_ENV=3 ./lzbench -ezstd,3 -b512 itemdata
    压缩结果如下所示。
    lzbench 1.8 (64-bit Linux)  (null)
    Assembled by P.Skibinski
    
    Compressor name         Compress. Decompress. Compr. size  Ratio Filename
    memcpy                   6447 MB/s 37817 MB/s     7316868 100.00 itemdata
    zstd 1.5.5 -3             588 MB/s  2084 MB/s     2221068  30.36 itemdata
    done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=512KB cSpeed=0MB)

由上述压缩结果可以看出配置ZSTAR_THREAD_NUM_ENV=3,使用多线程进行并行压缩。对于128KB包长,按单线程处理,无法使用并发能力;512KB包长达到并发条件,压缩解压性能提升明显。

设置线程数量为3,开启并行化所需数据量的最低大小为1024B,分块大小为128KB和512KB时KZstar算法库块压缩性能

  • 调用KZstar算法库测试块压缩性能,设置环境变量ZSTAR_THREAD_NUM_ENV=3以及ZSTAR_THREAD_COMPRESS_LIMIT_ENV=1024,指定压缩等级为level 3,分块大小为128KB。
    ZSTAR_THREAD_COMPRESS_LIMIT_ENV=1024 ZSTAR_THREAD_NUM_ENV=3 ./lzbench -ezstd,3 -b128 itemdata
    压缩结果如下所示。
    lzbench 1.8 (64-bit Linux)  (null)
    Assembled by P.Skibinski
    
    Compressor name         Compress. Decompress. Compr. size  Ratio Filename
    memcpy                  38627 MB/s 36890 MB/s     7316868 100.00 itemdata
    zstd 1.5.5 -3             725 MB/s  1785 MB/s     2464904  33.69 itemdata
    done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=128KB cSpeed=0MB)
  • 调用KZstar算法库测试块压缩性能,设置环境变量ZSTAR_THREAD_NUM_ENV=3以及ZSTAR_THREAD_COMPRESS_LIMIT_ENV=1024,指定压缩等级为level 3,分块大小为512KB。
    ZSTAR_THREAD_COMPRESS_LIMIT_ENV=1024 ZSTAR_THREAD_NUM_ENV=3 ./lzbench -ezstd,3 -b512 itemdata
    压缩结果如下所示。
    lzbench 1.8 (64-bit Linux)  (null)
    Assembled by P.Skibinski
    
    Compressor name         Compress. Decompress. Compr. size  Ratio Filename
    memcpy                  38242 MB/s 39856 MB/s     7316868 100.00 itemdata
    zstd 1.5.5 -3             664 MB/s  2271 MB/s     2232919  30.52 itemdata
    done... (cIters=1 dIters=1 cTime=1.0 dTime=2.0 chunkSize=512KB cSpeed=0MB)

ZSTAR_THREAD_COMPRESS_LIMIT_ENV=1024表示非流式压缩时,开启并行化所需数据量的最低大小为1024B,此时分块大小为128KB和512KB时均能触发并发压缩。