性能测试
kunpeng-lzbench是基于lzbench的测试框架,并将ZSTD等算法修改为动态库的调用方式,用于对比不同压缩算法库之间的解压缩性能。
块压缩性能测试
本小节提供调用开源ZSTD算法库和调用KZstar算法库测试块压缩性能的操作步骤,对比调用KZstar算法库前后的性能提升效果。
调用开源ZSTD算法库测试块压缩性能
- 查看测试工具所使用的算法库。
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)
- 调用开源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算法库测试块压缩性能
- 设置KZstar环境变量,使能KZstar。
export LD_LIBRARY_PATH=/usr/local/kzstar/lib:$LD_LIBRARY_PATH
- 查看测试工具所使用的算法库。
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)
- 调用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所示。
环境变量名称 |
环境变量说明 |
配置值说明 |
|---|---|---|
ZSTAR_THREAD_NUM_ENV |
用于设置可使用的线程数量。线程数量包含了初始的主线程,即创建的子线程数量实际为ZSTAR_THREAD_NUM_ENV减1。
|
默认值为0,最大为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时均能触发并发压缩。