gzip压缩测试

gzip文件格式

2 bytes GZIP标志字节:0x1f, 0x8b (\037 \213)
1 byte 压缩方法: (0..7 reserved, 8 = deflate)
1 byte 标志位:

    bit 0 set: 文件可能是ASCII文本文件
    bit 1 set: 附加多个gzip文件部分
    bit 2 set: 存在有可选的附加 内容
    bit 3 set: 提供了原始的文件名称
    bit 4 set: 则提供有一个O-终结的文件内容
    bit 5 set: 文件被加密
    bit 6,7:   保留

4 bytes 文件更改时间(Unix时间)
1 byte 额外的标志,决定了压缩方法。 2:使用最大的压缩,最慢的算法 4:采用最快的算法
1 byte 这个标志指明了进行压缩时系统的类型。
0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)
1 - Amiga
2 - VMS (or OpenVMS)
3 - Unix
4 - VM/CMS
5 - Atari TOS
6 - HPFS filesystem (OS/2, NT)
7 - Macintosh
8 - Z-System
9 - CP/M
10 - TOPS-20
11 - NTFS filesystem (NT)
12 - QDOS
13 - Acorn RISCOS
255 - unknown
2 bytes optional part number (second part=1) 可选的序号
2 bytes optional extra field length 可选的附加内容的长度
? bytes optional extra field 可选的附加内容
? bytes optional original file name, zero terminated 可选的原始文件名称,以'\0'结束
? bytes optional file comment, zero terminated 可选文件内容(这部分不被解释,而是可读的供人使用的,以'\0'结束
12 bytes optional encryption header
? bytes compressed data
4 bytes crc32 这个是未压缩数据的循环冗余校验值。
4 bytes uncompressed input size modulo 2^32 这是原始数据的长度以2的32次方为模的值。

示例

1f8b 08 00 0000 0000 04 03 // 头
cb48 cdc9 c957 28cf 2fca 4951 e002 00 // 压缩流
f59e cc18 0d00 0000 // 尾

gzip压缩测试

在csms中使用libz提供算法对数据进行压缩/解压缩.
将数据压缩成gz文件可以直接使用libz提供的gzwrite等API. 也可以通过封装其提供的deflate算法实现压缩数据的API. gziphelp就是通过封装deflate算法, 对外提供压缩数据的功能, 其优势在于:
1.) 对压缩参数的控制更加直接,
2.) 可以控制输出文件的大小. 这个功能是直接使用gzwrite等函数压缩数据所不能实现的.
以下通过测试, 对比两种压缩方法.
测试时将压缩线程绑定到10核心, libz 版本使用1.2.7. 结果如下:

系统信息

[root@localhost week31]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24
On-line CPU(s) list:   0-23
Thread(s) per core:    2
Core(s) per socket:    6
座:                 2
NUMA 节点:         1
厂商 ID:           GenuineIntel
CPU 系列:          6
型号:              63
型号名称:        Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz
步进:              2
CPU MHz:             1201.031
BogoMIPS:            4804.75
虚拟化:           VT-x
L1d 缓存:          32K
L1i 缓存:          32K
L2 缓存:           256K
L3 缓存:           15360K
NUMA 节点0 CPU:    0-23

运行测试程序

[root@localhost week31]# ./gt alldump__core00_000_0000.pcap 1
gzip api: 
use 4583 ms, origin size = 184829494, compress_size = 127411977 rate = 0.689349, speed = 40.329368
gzip help: 
use 4088 ms, origin size = 184829494, compress_size = 127525463 rate = 0.689963, speed = 45.212694
[root@localhost week31]# ./gt alldump__core00_000_0000.pcap 2
gzip api: 
use 5053 ms, origin size = 184829494, compress_size = 126247778 rate = 0.683050, speed = 36.578170
gzip help: 
use 4273 ms, origin size = 184829494, compress_size = 126224228 rate = 0.682923, speed = 43.255206
[root@localhost week31]# ./gt alldump__core00_000_0000.pcap 3
gzip api: 
use 5400 ms, origin size = 184829494, compress_size = 125256169 rate = 0.677685, speed = 34.227684
gzip help: 
use 4732 ms, origin size = 184829494, compress_size = 125302681 rate = 0.677937, speed = 39.059487
[root@localhost week31]# ./gt alldump__core00_000_0000.pcap 4
gzip api: 
use 6371 ms, origin size = 184829494, compress_size = 127068456 rate = 0.687490, speed = 29.011065
gzip help: 
use 5134 ms, origin size = 184829494, compress_size = 123212863 rate = 0.666630, speed = 36.001070
[root@localhost week31]# ./gt alldump__core00_000_0000.pcap 6
gzip api: 
use 7764 ms, origin size = 184829494, compress_size = 125248024 rate = 0.677641, speed = 23.805963
gzip help: 
use 6648 ms, origin size = 184829494, compress_size = 121397541 rate = 0.656808, speed = 27.802270
[root@localhost week31]# ./gt alldump__core00_000_0000.pcap 8
gzip api: 
use 11236 ms, origin size = 184829494, compress_size = 124747600 rate = 0.674933, speed = 16.449759
gzip help: 
use 10906 ms, origin size = 184829494, compress_size = 120960929 rate = 0.654446, speed = 16.947505

压缩级别与压缩率

压缩率 速度(MB/s) 压缩级别
0.689963 45.212694 1
0.682923 43.255206 2
0.677937 39.059487 3
0.666630 36.001070 4
0.656808 27.802270 6
0.654446 16.947505 8

libz需要优化

理由: 通过测试可知gzip压缩/解压缩速度较慢, 且非常消耗CPU. 系统中存在多处压缩/解压缩的处理. 所以libz优化有助于提升csms处理压缩/解压缩的性能.

优化案例1 : https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/zlib-compression-whitepaper-copy.pdf

使用这篇文字中提供的libz库, 运行之前本文测试使用的测试程序.单核压缩文件速率可达到 50MB/sec 左右, 较原有速率提升20% 左右.

参考

[1] (https://tools.ietf.org/html/rfc1952)
[2] (http://www.zlib.net/manual.html)
[3] (https://en.wikipedia.org/wiki/Gzip )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • 一、压缩算法 1.zip 以下参考他发明了 zip 压缩格式,功成名就之际死于堕落压缩大战真相 转载自2004.1...
    合肥黑阅读 5,856评论 0 5
  • Hadoop有一些数据I/O方面操作的工具,其中一些比Hadoop使用的都更普遍。例如数据完整性和压缩。但是当使用...
    单行线的旋律阅读 623评论 0 2
  • 01 不知道从什么时候开始,我变得自卑,连和人说话,都不敢直视他人的眼睛,慢慢大家都觉得我不爱交际,不善言辞。 我...
    90后职场说阅读 769评论 1 1