蜗窝科技

内核中文件解压缩操作

蜗窝讨论区存档 · Linux kernel技术问答 · 楼主 wangpeng_bj · 2017-08-21 · 5 帖

本文是原「蜗窝讨论区」的历史存档(2017-08-21),来自版块「Linux kernel技术问答」,共 5 帖。讨论区已停止服务,此处仅供查阅。

wangpeng_bj · 2017-08-21 16:57

Hi linuxer, 非常感谢提供这么好的技术平台。 目前项目遇到一个需求,需要将内核异常日志搜集压缩后转存到BMC,请教内核有现成的解压缩函数可用吗?

linuxer · 2017-08-22 23:16

解压函数的话在启动代码中有,ARM平台上,在启动的时候,首先需要把压缩内核解开,我记得是有解压函数可以用。 压缩函数的话,这个我真不知道。

wangpeng_bj · 2017-09-04 17:20

内核解压缩算法总结 1、842 接口: EXPORT_SYMBOL_GPL(sw842_compress); (没有解压缩接口) 内核中引用位置:无 2、lz4 接口: EXPORT_SYMBOL(lz4hc_compress); EXPORT_SYMBOL(lz4_compress); EXPORT_SYMBOL(lz4_decompress); EXPORT_SYMBOL(lz4_decompress_unknownoutputsize); 内核中引用位置: \drivers\block\zram\Zcomp_lz4.c(只有zram模块引用到) 3、lzo 接口: EXPORT_SYMBOL_GPL(lzo1x_1_compress); EXPORT_SYMBOL_GPL(lzo1x_decompress_safe); 内核中引用位置: Compr_lzo.c (fs\jffs2) Regcache-lzo.c (drivers\base\regmap) Swap.c (kernel\power) Zcomp_lzo.c (drivers\block\zram) 4、xz 解压接口: EXPORT_SYMBOL(xz_dec_init); EXPORT_SYMBOL(xz_dec_reset); EXPORT_SYMBOL(xz_dec_run); EXPORT_SYMBOL(xz_dec_end); 内核中引用位置: decompress_unxz.c (lib)用于解压.xz xz_wrapper.c (fs\squashfs) - a compressed read only filesystem 5、gzip 压缩接口: EXPORT_SYMBOL(zlib_deflate_workspacesize); EXPORT_SYMBOL(zlib_deflate); EXPORT_SYMBOL(zlib_deflateInit2); EXPORT_SYMBOL(zlib_deflateEnd); EXPORT_SYMBOL(zlib_deflateReset); 解压缩接口: EXPORT_SYMBOL(zlib_inflate_workspacesize); EXPORT_SYMBOL(zlib_inflate); EXPORT_SYMBOL(zlib_inflateInit2); EXPORT_SYMBOL(zlib_inflateEnd); EXPORT_SYMBOL(zlib_inflateReset); EXPORT_SYMBOL(zlib_inflateIncomp); EXPORT_SYMBOL(zlib_inflate_blob); 内核引用位置:有多处引用 Ppp_deflate.c (drivers\net\ppp) Zlib.c (crypto) 压缩 Bnx2x_main.c (drivers\net\ethernet\broadcom\bnx2x) 解压

总结:从内核使用情况看,842没有解压接口,lz4只有zram模块用到,xz用于解压.xz文件; lzo和zlib用的更普遍些,lzo有更好的解压缩速度,zlib被更普遍应用,对应的应用层库几乎已经成为一个业界标准。

压缩算法的比较 Algorithm % remaining Encoding Decoding GZIP 13.4% 21 MB/s 118 MB/s LZO 20.5% 135 MB/s 410 MB/s Zippy/Snappy 22.2% 172 MB/s 409 MB/s 注:来自《HBase: The Definitive Guide》 其中: 1)GZIP的压缩率最高,但是其实CPU密集型的,对CPU的消耗比其他算法要多,压缩和解压速度也慢; 2)LZO的压缩率居中,比GZIP要低一些,但是压缩和解压速度明显要比GZIP快很多,其中解压速度快的更多; 3)Zippy/Snappy的压缩率最低,而压缩和解压速度要稍微比LZO要快一些。

参考文档: http://www.zlib.net/zlib_how.html zlib API接口使用(内核使用情况类似) http://blog.csdn.net/memoryjs/article/details/39053127 使用lzo实现zram http://doc.mbalib.com/view/80bcc5c56278b864b67e6a3f603d5ab7.html in kernel memory compression

wowo · 2017-09-05 10:33

wangpeng_bj 写道: 内核解压缩算法总结 ...

赞!! :cool:

linuxer · 2017-09-06 09:39

好帅的3楼,多谢wangpeng_bj 的信息。