ZFS compression algorithm lzjb, gzip, gzip-[0-9], zle, lz4 compare
背景
zfs提供几种压缩算法,
lzjb, gzip, gzip-[0-9], zle, lz4
其中默认的压缩算法为lzjb, 这个是ZFS的作者Jeff Bonwick提供的, gzip默认的压缩级别为6, 或者指定压缩级别.
这里主要测试一下压缩时间和压缩比.
注意, 压缩选项默认是关闭的, 压缩选项针对dataset来设置, 同一个pool中不同的dataset可以设置不同的压缩算法, 也可以开关混用. 对于未使用压缩的dataset, 如果已经存在数据的话, 开启压缩后, 之后的数据会压缩, 但是之前存储的数据不会变动.
首先测试的是lzjb.
[root@spark01 digoal]# rm -rf /zp/test/*
[root@spark01 digoal]# zfs set compression=lzjb zp/test
[root@spark01 digoal]# date +%F%T; cp -r hadoop-2.4.0* spl-0.6.2* zfs-0.6.2* /zp/test/ ; date +%F%T;
2014-05-1916:00:45
2014-05-1916:01:00 15秒
[root@spark01 digoal]# zfs get all zp/test|grep compress
zp/test compressratio 1.49x -
zp/test compression lzjb local
zp/test refcompressratio 1.49x -
测试gzip
[root@spark01 digoal]# rm -rf /zp/test/*
[root@spark01 digoal]# zfs set compression=gzip zp/test
[root@spark01 digoal]# date +%F%T; cp -r hadoop-2.4.0* spl-0.6.2* zfs-0.6.2* /zp/test/ ; date +%F%T;
2014-05-1916:01:47
2014-05-1916:02:02 15秒
[root@spark01 digoal]# zfs get all zp/test|grep compress
zp/test compressratio 1.77x -
zp/test compression gzip local
zp/test refcompressratio 1.77x -
测试gzip-9
[root@spark01 digoal]# rm -rf /zp/test/*
[root@spark01 digoal]# zfs set compression=gzip-9 zp/test
[root@spark01 digoal]# date +%F%T; cp -r hadoop-2.4.0* spl-0.6.2* zfs-0.6.2* /zp/test/ ; date +%F%T;
2014-05-1916:03:01
2014-05-1916:03:18 17秒
[root@spark01 digoal]# zfs get all zp/test|grep compress
zp/test compressratio 1.59x -
zp/test compression gzip-9 local
zp/test refcompressratio 1.59x -
测试zle
[root@spark01 digoal]# rm -rf /zp/test/*
[root@spark01 digoal]# zfs set compression=zle zp/test
[root@spark01 digoal]# date +%F%T; cp -r hadoop-2.4.0* spl-0.6.2* zfs-0.6.2* /zp/test/ ; date +%F%T;
2014-05-1916:03:47
2014-05-1916:04:04 17秒
[root@spark01 digoal]# zfs get all zp/test|grep compress
zp/test compressratio 1.09x -
zp/test compression zle local
zp/test refcompressratio 1.09x -
测试lz4
[root@spark01 digoal]# rm -rf /zp/test/*
[root@spark01 digoal]# zfs set compression=lz4 zp/test
[root@spark01 digoal]# date +%F%T; cp -r hadoop-2.4.0* spl-0.6.2* zfs-0.6.2* /zp/test/ ; date +%F%T;
2014-05-1916:04:25
2014-05-1916:04:39 14秒
[root@spark01 digoal]# zfs get all zp/test|grep compress
zp/test compressratio 1.43x -
zp/test compression lz4 local
zp/test refcompressratio 1.43x -
不压缩的情况测试 :
[root@spark01 digoal]# zfs set compression=off zp/test
[root@spark01 digoal]# rm -rf /zp/test/*
[root@spark01 digoal]# date +%F%T; cp -r hadoop-2.4.0* spl-0.6.2* zfs-0.6.2* /zp/test/ ; date +%F%T;
2014-05-1916:09:19
2014-05-1916:09:38 19秒
从测试结果来看, gzip6的压缩比最高, 同时时间也比较折中, 推荐使用.
另外作者的算法lzjb也是被大多数人推荐使用的.
建议所有的dataset都开启压缩, 从测试数据来看, 显然CPU不是问题, IO是大问题. 因为未开启压缩的情况下, 耗时是最长的.
参考
1. https://pthree.org/2012/12/18/zfs-administration-part-xi-compression-and-deduplication/