几种压缩算法的压缩和速度比较

2023-05-16

Quick Benchmark: Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZO

EDIT: Add zstd

Contents

 [hide] 

  • 1 Selected archives
  • 2 Test conditions
  • 3 The file test results
    • 3.1 Compressed file size in bytes
    • 3.2 Compression ratio
    • 3.3 Compression time
    • 3.4 Decompression time
    • 3.5 Memory requirements on compression
    • 3.6 Memory requirements on decompression
  • 4 Stream test
    • 4.1 Time to compress
    • 4.2 Time to decompress
    • 4.3 Memory used
    • 4.4 Compression ratio
      • 4.4.1 With the benchmark application
  • 5 Graphics
  • 6 Quick benchmark on ARM64

Selected archives

I have selected:

  • Source of the kernel to test source compression
  • Stream protocol with flush

Test conditions

Tests were run on a desktop:

  • Intel Core i5 CPU 750 at 2.67GHz
  • 8GB of DDR3 memory
  • tmpfs as ram disk is used
  • Linux kernel 3.3.2, gentoo amd64
  • CFLAGS: -pipe -O2 -g -floop-block -floop-interchange -fgraphite
  • bzip2-1.0.6-r3, xz-utils-5.0.3, gzip-1.4

Only normal mode will be tested firstly.

The file test results

Note: The first column with numbers 1..9 indicates the compression setting passed to gzip, bzip2 and lzmash (e.g. "gzip -9").

Tarball mode from linux-3.3, original size: 466083840 (445M)

Compressed file size in bytes

 gzipbzip2lzmalzma -exzxz -elz4lzop
 gzipbzip2lzmalzma -exzxz -elz4lzop
1124875819 (120M)93997047 (90M)85618192 (82M)72042179 (69M)85630688 (82M)72069084 (69M)165844264 (159M)168012430 (161M)
2119040249 (114M)87741348 (84M)81480824 (78M)70264395 (68M)81492504 (78M)70282944 (68M)165844264 (159M)166987891 (160M)
3114931686 (110M)84816957 (81MB)79575087 (76MB)69015118 (66MB)79586568 (76MB)69029204 (66MB)165844264 (159M)166987891 (160M)
5102328357 (98M)81837328 (79M)69557610 (67M)67879362 (65M)69583428 (67M)67875988 (65M)-166987891 (160M)
7100128597 (96M)80197758 (77M)67276420 (65M)66868212 (64M)67294092 (65M)66852780 (64M)-116205578 (111M)
999740486 (96M)78963640 (76M)65841213 (63M)65362226 (63M)65859432 (63M)65372696 (63M)-114824102 (110M)

Compression ratio

 gzipbzip2lzmalzma -exzxz -elz4lzop
 gzipbzip2lzmalzma -exzxz -elz4lzop
126.8%20.2%18.4%15.5%18.4%15.5%35.6%36.0%
225.5%18.8%17.5%15.1%17.5%15.1%35.6%35.8%
324.7%18.2%17.1%14.8%17.1%14.8%35.6%35.8%
522.0%17.6%14.9%14.6%14.9%14.6%-35.8%
721.5%17.2%14.4%14.3%14.4%14.3%-24.9%
921.4%16.9%14.1%14.0%14.1%14.0%-24.6%

Compression time

 gzipbzip2lzmalzma -exzxz -elz4lzop
 gzipbzip2lzmalzma -exzxz -elz4lzop
18.1s58.3s31.7s4m37s32.2s4m40s1.3s1.6s
28.5s58.4s40.7s4m49s41.9s4m53s1.4s1.6s
39.6s59.1s1m2s4m36s1m1s4m39s1.3s1.5s
514s1m1s3m5s5m3m6s4m53s-1.5s
721s1m2s4m14s5m52s4m13s5m57s-35s
933s1m3s4m48s6m40s4m51s6m40s-1m5s
  • gzip -1 vs lz4 -1 on x86: lz4 6.2x more fast
  • gzip -1 vs lz4 -1 on ARM: lz4 3.6x more fast

Decompression time

 gzipbzip2lzmalzma -exzxz -elz4lzop
 gzipbzip2lzmalzma -exzxz -elz4lzop
13.5s3.4s6.7s5.9s7.2s6.5s0.4s1.5s
23s15.76.3s5.6s6.8s6.3s0.3s1.4s
33.2s15.9s6s5.6s6.7s6.2s0.4s1.4s
53.2s16s5.5s5.4s6.2s6s-1.5s
73s15s5.3s5.3s5.9s5.8s-1.3s
93s15s5s5.1s5.6s5.6s-1.2s

Memory requirements on compression

 gzipbzip2lzmalzma -exzxz -elz4lzop
 gzipbzip2lzmalzma -exzxz -elz4lzop
10.4MB1.1MB8.3MB12.6MB8.3MB12.5MB12MB0.7MB
20.4MB1.9MB15.8MB24MB15.8MB24MB12MB0.7MB
30.4MB2.7MB30.7MB46.9MB30.8MB47M13.2MB0.7MB
50.4MB4.2MB93MB93MB93MB93MB-0.7MB
70.4MB5.7MB185MB185MB185MB185MB-0.9MB
90.4MB7.2MB672MB673MB673MB673MB-0.9MB
  • Note: lz4 it's the program using this size, the code for internal lz4 use very less memory

Memory requirements on decompression

 gzipbzip2lzmalzma -exzxz -elz4lzop
 gzipbzip2lzmalzma -exzxz -elz4lzop
10.1MB0.3MB1MB1MB1MB1MB13MB0.2MB
20.1MB0.9MB2.1MB2.1MB2.1MB2.1MB12MB0.2MB
30.1MB1.1MB4.1MB4.1MB4.0MB4.0MB13MB0.2MB
50.1MB1.9MB8.1MB8.1MB8.1MB8.1MB-0.2MB
70.1MB2.6MB16MB16MB16MB16MB-0.2MB
90.1MB3.4MB64MB64MB64MB64MB-0.2MB
  • Note: lz4 it's the program using this size, the code for internal lz4 use very less memory

Cli used for -1 compression:

  • time gzip -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;time gunzip linux-3.3.tar*
  • time bzip2 -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;time bunzip2 linux-3.3.tar.bz2
  • time lzma -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unlzma linux-3.3.tar*
  • time lzma -e -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unlzma linux-3.3.tar*
  • time xz -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unxz linux-3.3.tar*
  • time xz -e -1 linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time unxz linux-3.3.tar*
  • time /home/user/lz4-read-only/lz4demo64 -c0 linux-3.3.tar linux-3.3.tar.lz4;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time /home/user/lz4-read-only/lz4demo64 -d linux-3.3.tar.lz4 linux-3.3.tar;rm linux-3.3.tar.*
  • time lzop -1 linux-3.3.tar;rm linux-3.3.tar;du -ksh linux-3.3.tar*;ls -l linux-3.3.tar*;read PAUSe;time lzop -d linux-3.3.tar*;rm linux-3.3.tar.*

Stream test

Time to compress

 gzipzliblz4lz4hcnone
 gzipzliblz4lz4hcnone
137636813031110
2371391   
3378362   
5390392   
7389387   
9393384   

Time to decompress

 gzipzliblz4lz4hcnone
 gzipzliblz4lz4hcnone
1179717788097969
218411831   
317711780   
518061960   
718611851   
918351806   

Messured with:


timespec tstart,tstop;
clock_gettime(CLOCK_REALTIME, &tstart);
//compression/decompression
clock_gettime(CLOCK_REALTIME, &tstop);
compressionTime+=((quint64)tstop.tv_sec * 1000000LL + (quint64)tstop.tv_nsec / 1000LL)-((quint64)tstart.tv_sec * 1000000LL + (quint64)tstart.tv_nsec / 1000LL);
  

Memory used

gzipzliblz4lz4hcnone
gzipzliblz4lz4hcnone
0.5MB0.5MB0MB0MB0MB

The socket is always used as full duplex, then it's compression + decompression memory.

Compression ratio

It's transferred size/raw size (lower is better)

With the benchmark application

Uploaded at: https://github.com/alphaonex86/debug-devel/tree/master/QTcpCompressionBenchmark

gzipzliblz4lz4hcnone
gzipzliblz4lz4hcnone
0.990.971.591.591

The most over-head of small packet (3Bytes) is drop by high compression with zlib/gzip for the big packet.

Graphics

Compression-ratio.png Compression-time.png

Quick benchmark on ARM64

A quick benchmark on ARM64 (odroid, Cortex A53), on kernel Image (12MB), use default compression level (-6) because no way to configure the compression level of btrfs

The speed is on compressed stream, mean the hdd.

 xzgziplz4zstd
Size4.2M5.5M7.8M5.8M
Compression speed0.2 MB/s1.8 MB/s21.4 MB/s2.8 MB/s
Decompression speed4.8 MB/s13.6 MB/s48.4 MB/s19.1 MB/s
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

几种压缩算法的压缩和速度比较 的相关文章

  • ML302 OpenCPU系列(5)---Log工具的使用

    ML302 OpenCPU系列 xff08 5 xff09 Log工具的使用 一 使用串口助手抓取Log二 使用Coolwatcher抓取AP Log三 查看死机现场 工欲善其事 xff0c 必先利其器 Log是嵌入式开发中最重要的调试手段
  • Lottie简单使用

    一 简介 Lottie 是Airbnb开源的一个面向 iOS Android React Native 的动画库 xff0c 能分析 Adobe After Effects 导出的动画 xff0c 并且能让原生 App 像使用静态素材一样使
  • Xshell显示图形化界面

    前言 很久没用过图形化界面了 xff0c 都忘记怎么使用了 依据以往的经验都是由环境变量DISPLAY设置 xff0c 然后就能连接了 xff0c 每天也是匆匆忙忙的就过了一天 xff0c 都不知道干了啥 xff0c 分配的时间也少 xff
  • 2017--就业分享之IT校招现状和面试经历

    在介绍自己整个春季和夏季实习求职经历之前 xff0c 先给大家公布一则新闻 2017届互联网校招薪酬报告 xff1a 先说下对 16 年 17 届校招的总体看法 xff1a 本该是个不大不小的年 xff0c 结果被华为一己之力搞成了个大年
  • docker常见命令

    文章目录 0 删除重建容器1 打包一个镜像并在另一个服务器上使用 0 删除重建容器 如果觉得镜像被自己搞坏了 xff0c 重启没啥用 xff0c 就要考虑基于之前的镜像重新建立一个新的容器了 span class token comment
  • python代码获取远程电脑IP

    实时的使用邮箱发送IP地址到指定邮箱 使用python代码封装好的软件 xff1a 链接 xff1a https pan baidu com s 1Flz7HHtZM0w3HGDeF 4BhQ pwd 61 yxy2 提取码 xff1a y
  • Collections.singleton();

    span class token comment 删除list某个元素 span List span class token operator lt span Integer span class token operator gt spa
  • 一个程序员所应该具备的精神

    所谓障碍都是主观上的 如果你想研发什么新的技术 xff0c 只需要在冰箱里放满食物和饮料 xff0c 再有一台便宜的计算机 xff0c 和以之献身的决心 xff0c 你即可拥有任何你想拥有的编程深度 xff01 John Carmack
  • Java把字符串中的数字删除的方法和判断字符串里面是否有汉字的方法

    1 把数字删除 String testStr 61 34 大幅度要栽夺工地奇巧地厅革dfdsfdsafd32123313 34 System out println testStr replaceAll 34 0 9 34 34 34 2
  • 氧化还原反应

  • MPI中可能会出现的错误

    1 p1 xxxxx p4 error interrupt SIGSEGV 11 这个错误可能是因为某个进程中出现了段错误引起的 自己编程中曾出现过的错误 1 只在一个进程中给指针申请空间 而在其他进程没有申请 所以在广播的时候出错 2 在
  • 华为2288HV5使用U盘安装ESXI6.7.0

    如题 1 准备U盘做ESXI启动盘2 华为服务器做RADI3 安装ESXI4 配置ESXI 1 准备U盘做ESXI启动盘 准备至少4G的U盘 xff0c 需要格式化U盘 有两种常见的制作U盘启动的工具 xff0c UltraISO和rufu
  • Github Page绑定至个人域名

    前言 此教程主要用于将个人域名映射至Github Page xff0c 同时实现Github Page在个人域名的发布本次所使用的个人域名是在阿里云上申请注册所得注意 xff1a 如果想要取消Github Page发布 xff0c 删除CN
  • gnome桌面无法显示的解决

    前两天安装gtk 43 中间出错了 xff0c apt get install libgtk2 0 过程中突然出错说是sweap什么的错误 xff0c 重启后居然无法登录进入桌面 xff0c 提示libpixbufloader png so
  • 如何使用Visual Studio2010运行C语言

    1 首先打bai开Microsoft Visual Studio 2010如下图 xff1a 2 然后在bai已安装的模板下选Win32 右边选Win32控制台应用程序 最后在下面输入项目名称 xff0c 然后点确定 xff0c 如下图 3
  • 医学影像入门知识——3. 26邻域/8邻域和连通性(neighborhood and connectivity)

    文章目录 1 邻域概念 1 1 6 18 26邻域 空间 1 2 6 18 26 32 56 80 92 116 124 空间 1 3 4 8 平面上的邻域 1 4 python代码表示 2 连通性 连通度 2 1 点连通度 2 2 边连通
  • Spring Security(六) —— CSRF

    一 xff1a CSRF漏洞保护简介 CSRF xff08 Cross site request forgery xff09 跨站请求伪造 xff0c 也叫一键式攻击 xff08 one click attack xff09 xff0c 通
  • git中submodule子模块的添加、使用和删除

    转载 xff1a https blog csdn net qq 29034779 article details 123212589 子模块的添加 添加子模块非常简单 xff0c 命令如下 xff1a git submodule add l
  • centos7中报错ModuleNotFoundError: No module named ‘_ctypes‘解决方法

    分析 python3中有个内置模块叫ctypes xff0c 它是python3的外部函数库模块 xff0c 提供了兼容C语言的数据类型 xff0c 并通过它调用Linux系统下的共享库 Shared library xff0c 此模块需要
  • Ubuntu 12.04 开机启动软件图形界面(无桌面环境)

    在不加载桌面环境的前提下 xff0c 启动图形化软件 xff0c 总体分以下几步 xff1a 禁止桌面环境启动 gt tty1自动登录 gt 软件自动启动 gt 远程维护时保持进程唯一 1 禁止桌面环境启动 路径 xff1a etc ini

随机推荐

  • 16行,使用Python制作简易版QQ自动回复机器人(windows版)

    目录 1 安装go cqhttp 2 使用go cqhttp 2 1 发送信息 2 1 1发送 你好 2 1 2 在群里 64 人 2 2获取群成员列表 2 3 实现QQ机器人 1 安装go cqhttp 点此安装go cqhttp xff
  • 免费的仿真软件LTSpice

    LTSpice是一个免费的仿真软件 xff0c 重要的是它同时提供macOS和Windows版本 下载地址 其他教程 xff1a LTspice仿真命令 weixin 42617385的博客 CSDN博客 LTspice 一个会写代码的烤鸭
  • esp-aliyun undefined reference to `pthread_create‘错误

    FreeRTOS 错误信息 Users esp8266 projects wendeng build esp aliyun libesp aliyun a span class token punctuation span wrapper
  • github cli 创建远程仓库并推送到github

    以下操作基于macOS xff0c 其他系统安装请参阅官方文档cli cli GitHub s official command line tool 1 安装github cli brew span class token function
  • 阿里云生活物联网删除测试设备

    阿里云生活物联网平台 https living aliyun com 的测试设备 xff0c 在生活物联网平台页面是无法进行删除的 xff0c 生活物联网平台的设备列表只能显示量产设备 如果要删除测试设备 xff0c 必须在物联网平台 ht
  • STM32CubeMX学习教程之四:定时器中断

    完整源码下载 xff1a https github com simonliu009 STM32CubeMX TIM1 Interrupt 软件 xff1a STM32CubeMX V4 25 0 System Workbench V2 4
  • 算法——贝塞尔(Bézier)曲线拟合

    文章目录 1 基本概念 1 1 从熟悉的地方入手 1 2 贝塞尔曲线拟合原理 转载 2 公式和物理意义 2 0 阶数和伯恩斯坦多项式等 2 0 1 阶数 2 0 2 伯恩斯坦多项式 2 0 3 杨辉三角和二项式系数 2 1 一阶 次贝塞尔公
  • STM32CubeMX学习教程之五:PWM实现呼吸灯效果

    完整源码下载 xff1a https github com simonliu009 STM32CubeMX PWM Output 软件 xff1a STM32CubeMX V4 25 0 System Workbench V2 4 固件库版
  • STM32CubeMX学习教程之十:硬件I2C读写AT24C02

    完整源码下载 xff1a https github com simonliu009 STM32CubeMX hardware I2C AT24C02 网上有流传已久一种说法 xff0c 就是STM的I2C有bug xff0c 不好用 确实很
  • Visual Studio Code 的 includePath 全局设置

    这几天折腾使用Visual Studio Code 编写 ESP8266 non os 代码 xff0c 基本设置都没问题 xff0c 但是就是自动补全折腾很久没弄好 在折腾了一圈插件之后 xff08 包括Auto Import C 43
  • 使用.gitignore忽略文件或者文件夹及其失效解决方法

    git如果需要忽略某个文件夹 xff0c 可以在初始化之后 xff0c 在仓库根目录下创建一个 gitignore文件 xff0c 添加需要忽略的文件和文件夹即可 我们也不需要从头写 gitignore文件 xff0c GitHub已经为我
  • python源代码文件加密

    由于python设计的初衷是开源的 xff0c 因此py文件是可以直接看到源码的 但开发商业软件 xff0c 代码加密保护就比较重要了 python编译后程序 pyc文件是py文件经过编译后生成的二进制文件 xff0c 因此可以发布pyc文
  • gnu binutils

    The GNU Binutils are a collection of binary tools The main ones are ld the GNU linker as the GNU assembler But they also
  • android wakelock

    1 android休眠控制锁 powermanager acquir 获取控制锁 powermanager release 释放控制锁 2 在powerManagerService中 xff0c 有检测当前framework层中的wakel
  • 产品经理常用术语

    产品经理常用术语 长尾理论 网络时代兴起的一种新理论 xff0c 由于成本和效率的因素 xff0c 当商品储存流通展示的场地和渠道足够宽广 xff0c 商品生产成本急剧下降以至于个人都可以进行生产 xff0c 并且商品的销售成本急剧降低时
  • 传统CD车机面板操作说明

    转自http bbs hifidiy net thread 675597 1 1 html 一般CD车机带USB SD卡的面板操作说明 1 1 控制面板外观图 2 0 基本 共同 功能操作说明 2 1 开启和关闭电源 静音开关 按 钮为开启
  • 汽车总线系统通信协议

    天合汽车零部件 xff08 上海 xff09 有限公司 上海交通大学区域光纤通信网与新型光通信系统国家重点实验室 xff08 上网时间 xff1a 2006 11 xff09 摘要 xff1a 本文主要针对汽车电子控制系统和车载多媒体系统
  • 算法——连续性后处理(把26邻域连续的变成6邻域连续的)

    文章目录 1 概念 1 1 6邻域连续 1 2 18邻域连续 1 3 26邻域连续 1 4 总结 2 目标 3 严格一点的 3 1 原理描述 3 1 1 18邻域连续补充 3 1 2 26邻域连续补充 3 2 代码实现 C 4 宽松一点的
  • RedHat Linux下安装JDK1.7报错Permission denied

    在RedHat Linux5 中安装JDK1 7时 xff0c 当我解压jdk xff0c 并且配置好了环境变量 xff0c 测试的时候 xff0c 报以下错误 root 64 jingfeng01 java version Error d
  • 几种压缩算法的压缩和速度比较

    Quick Benchmark Gzip vs Bzip2 vs LZMA vs XZ vs LZ4 vs LZO EDIT Add zstd Contents hide 1 Selected archives2 Test conditio