Доброго времени суток хабравчане и гости сайта, речь пойдет об алгоритме сжатия без потерь, который является совместным «ребенком». В данной статье будут приведены промежуточные результаты которых удалось добиться, в виде таблиц сравнения с популярными алгоритмами.
Основная идеология для алгоритма была составлена в нескольких характеристиках:
Скорость упаковки (сжатия) сюда изначально не была включена, но постепенно будет улучшаться как и весь алгоритм в целом. Не используются энтропийное сжатие и словарные методы.
Для чистоты и простоты проведения измерений, алгоритм интегрировали в утилиту lzbench (cсылка на GitHub), так как в ней уже присутствует достаточное кол-во других алгоритмов и легко интегрировать свой.
Далее были выбраны файлы из уже готового пакета для тестирования алгоритмов с названием Silesia. Краткое описание файлов:
→ Источник
Список насыщен алгоритмами которые решают разные задачи, но все познается в сравнении.
Brotli — основан на современном варианте алгоритма LZ77, энтропийном кодировании Хаффмана и моделировании контекста 2-го порядка.
Предназначен для ускорения загрузки веб-страниц, поддерживается в браузерах Chrome, основанных на Chromium и в Firefox.
Deflate — алгоритм сжатия без потерь, использующий комбинацию алгоритмов LZ77 и Хаффмана.
Zstandard (Zstd) — алгоритм сжатия данных без потерь, разрабатываемый с 2015 Yann Collet при поддержке Facebook. Cочетает словарный алгоритм сжатия данных типа LZ77 и эффективное энтропийное кодирование типа tANS (FSE — Finite State Entropy), модификацию кода Хаффмана, реализующую нецелое количество бит для хранения символов.
LZMA — используется в архиваторе 7-Zip для создания сжатых архивов в формате 7z. Алгоритм основан на схеме сжатия данных по словарю, сходной с использованной в LZ77, и обеспечивает высокий коэффициент сжатия (обычно превышающий коэффициент, получаемый при сжатии с использованием bzip2), а также позволяет использовать словари различного размера (до 4 Гб).
Snappy — еще один алгорим сжатия без потерь от google предназначен для достижения высоких скоростей без достижения максимальных степеней сжатия.
Процессор DualCore Intel Core i3 550, 3200 MHz
Память GoodRam 8119 Mb DDR3-1333 DDR3 SDRAM
ОС Ubuntu 16.10 x64
memcpy — функция которая копирует данные, взята как эталон по скорости упаковки и распаковки.
Таблицы отсортированы по коэфициенту сжатия (“% от оригинала” так выводит lzbench, не стал конвертировать) от мелкого к большему.
Следует заметить, что он все еще сыроват и еще есть достаточно работы для улучшения, но уже сейчас дает положительный эффект. Впереди еще часы генерирования и проверки гипотез, написание тестов и оптимизации кода.
Спасибо за внимание.
Коротко об алгоритме
Основная идеология для алгоритма была составлена в нескольких характеристиках:
- Не привязан к типам файлов
- Хороший коэффициент сжатия
- Быстрая скорость распаковки
Скорость упаковки (сжатия) сюда изначально не была включена, но постепенно будет улучшаться как и весь алгоритм в целом. Не используются энтропийное сжатие и словарные методы.
Подготовка
Для чистоты и простоты проведения измерений, алгоритм интегрировали в утилиту lzbench (cсылка на GitHub), так как в ней уже присутствует достаточное кол-во других алгоритмов и легко интегрировать свой.
Далее были выбраны файлы из уже готового пакета для тестирования алгоритмов с названием Silesia. Краткое описание файлов:
Имя файла | Описание | Тип | Размер, Байт |
dickens | Коллекция работ Чарльза Диккенса | txt (eng) | 10 192 446 |
mozilla | tar архив с исполняемыми файлами Mozilla 1.0 | exe | 51 220 480 |
mr | Изображение МРТ | image | 9 970 564 |
nci | База химических структур | database | 33 553 445 |
ooffice | Dll файлы из Open Office.org 1.01 | exe | 6 152 192 |
osdb | Пример базы данных MySQL формата из | database | 10 085 684 |
reymont | Текст книги | Polish, pdf | 6 627 202 |
samba | tar архив исходников | src | 21 606 400 |
sao | Звездный каталог Смитсоновской астрофизической обсерватории | bin data | 7 251 944 |
webster | Американский словарь английского языка Уэбстера | html | 41 458 703 |
xml | Коллекция xml файлов | xml | 5 345 280 |
X-ray | Рентген изображение | image | 8 474 240 |
Список алгоритмов которые участвуют в сравнениях
- Brotli
- Broo
- Csc
- Gipfeli
- Libdeflate
- Lz4
- Lz5
- Lzlib
- Lzma
- Lzsse
- Quicklz
- Snappy
- Xpack
- Yalz77
- Yappy
- Zlib
- Zstd
Список насыщен алгоритмами которые решают разные задачи, но все познается в сравнении.
Короткое описание некоторых из них
Brotli — основан на современном варианте алгоритма LZ77, энтропийном кодировании Хаффмана и моделировании контекста 2-го порядка.
Предназначен для ускорения загрузки веб-страниц, поддерживается в браузерах Chrome, основанных на Chromium и в Firefox.
Deflate — алгоритм сжатия без потерь, использующий комбинацию алгоритмов LZ77 и Хаффмана.
Zstandard (Zstd) — алгоритм сжатия данных без потерь, разрабатываемый с 2015 Yann Collet при поддержке Facebook. Cочетает словарный алгоритм сжатия данных типа LZ77 и эффективное энтропийное кодирование типа tANS (FSE — Finite State Entropy), модификацию кода Хаффмана, реализующую нецелое количество бит для хранения символов.
LZMA — используется в архиваторе 7-Zip для создания сжатых архивов в формате 7z. Алгоритм основан на схеме сжатия данных по словарю, сходной с использованной в LZ77, и обеспечивает высокий коэффициент сжатия (обычно превышающий коэффициент, получаемый при сжатии с использованием bzip2), а также позволяет использовать словари различного размера (до 4 Гб).
Snappy — еще один алгорим сжатия без потерь от google предназначен для достижения высоких скоростей без достижения максимальных степеней сжатия.
Характеристики ПК
Процессор DualCore Intel Core i3 550, 3200 MHz
Память GoodRam 8119 Mb DDR3-1333 DDR3 SDRAM
ОС Ubuntu 16.10 x64
Результаты
memcpy — функция которая копирует данные, взята как эталон по скорости упаковки и распаковки.
Таблицы отсортированы по коэфициенту сжатия (“% от оригинала” так выводит lzbench, не стал конвертировать) от мелкого к большему.
Тест 1. Коллекция работ Чарльза Диккенса, text
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4029 MB/s | 4034 MB/s | 10192446 | 100.00 | dickens, txt |
csc 2016-10-13 -1 | 18 MB/s | 31 MB/s | 4020916 | 39.45 | dickens, txt |
lzlib 1.7 -0 | 7.76 MB/s | 34 MB/s | 3815335 | 37.43 | dickens, txt |
lzma 9.38 -0 | 13 MB/s | 38 MB/s | 4044850 | 39.68 | dickens, txt |
libdeflate 0.6 -1 | 85 MB/s | 435 MB/s | 4231543 | 41.52 | dickens, txt |
zstd 1.1.3 -1 | 143 MB/s | 486 MB/s | 4279273 | 41.98 | dickens, txt |
xpack 2016-06-02 -1 | 83 MB/s | 359 MB/s | 4282245 | 42.01 | dickens, txt |
brotli 0.5.2 -0 | 168 MB/s | 178 MB/s | 4401269 | 43.18 | dickens, txt |
zlib 1.2.8 -1 | 50 MB/s | 195 MB/s | 4585618 | 44.99 | dickens, txt |
broo 1.0 | 6.03 MB/s | 265 MB/s | 4750936 | 46.61 | dickens, txt |
gipfeli 2016-07-13 | 178 MB/s | 254 MB/s | 4955632 | 48.62 | dickens, txt |
yalz77 2015-09-19 -1 | 62 MB/s | 304 MB/s | 5634109 | 55.28 | dickens, txt |
quicklz 1.5.0 -1 | 250 MB/s | 326 MB/s | 5831353 | 57.21 | dickens, txt |
lzsse2 2016-05-14 -0 | 18 MB/s | 1481 MB/s | 5865705 | 57.55 | dickens, txt |
yappy 2014-03-22 -0 | 91 MB/s | 1122 MB/s | 6141853 | 60.26 | dickens, txt |
snappy 1.1.3 | 179 MB/s | 648 MB/s | 6337834 | 62.18 | dickens, txt |
lz4 1.7.5 | 264 MB/s | 1652 MB/s | 6428742 | 63.07 | dickens, txt |
lz5 2.0 -10 | 216 MB/s | 1855 MB/s | 6431869 | 63.10 | dickens, txt |
Тест 2. Tar архив с исполняемыми файлами Mozilla 1.0, exe
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 3986 MB/s | 4042 MB/s | 51220480 | 100.00 | mozilla, exe |
csc 2016-10-13 -1 | 11 MB/s | 41 MB/s | 15331191 | 29.93 | mozilla, exe |
lzma 9.38 -0 | 17 MB/s | 43 MB/s | 16425272 | 32.07 | mozilla, exe |
lzlib 1.7 -0 | 18 MB/s | 33 MB/s | 16470484 | 32.16 | mozilla, exe |
xpack 2016-06-02 -1 | 76 MB/s | 368 MB/s | 18391874 | 35.91 | mozilla, exe |
libdeflate 0.6 -1 | 92 MB/s | 396 MB/s | 19780124 | 38.62 | mozilla, exe |
zstd 1.1.3 -1 | 209 MB/s | 542 MB/s | 20120459 | 39.28 | mozilla, exe |
zlib 1.2.8 -1 | 53 MB/s | 209 MB/s | 20577226 | 40.17 | mozilla, exe |
brotli 0.5.2 -0 | 217 MB/s | 186 MB/s | 21740128 | 42.44 | mozilla, exe |
broo 1.0 | 5.11 MB/s | 350 MB/s | 23177220 | 45.25 | mozilla, exe |
gipfeli 2016-07-13 | 236 MB/s | 436 MB/s | 24380558 | 47.60 | mozilla, exe |
quicklz 1.5.0 -1 | 315 MB/s | 368 MB/s | 24756819 | 48.33 | mozilla, exe |
yalz77 2015-09-19 -1 | 49 MB/s | 436 MB/s | 25454532 | 49.70 | mozilla, exe |
lzsse2 2016-05-14 -0 | 13 MB/s | 1493 MB/s | 25826648 | 50.42 | mozilla, exe |
lz4 1.7.5 | 437 MB/s | 1876 MB/s | 26435667 | 51.61 | mozilla, exe |
snappy 1.1.3 | 303 MB/s | 1013 MB/s | 26461924 | 51.66 | mozilla, exe |
lz5 2.0 -10 | 334 MB/s | 2097 MB/s | 27016242 | 52.74 | mozilla, exe |
yappy 2014-03-22 -0 | 107 MB/s | 1749 MB/s | 27728218 | 54.14 | mozilla, exe |
Тест 3. Изображение МРТ, image
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
lzlib 1.7 -0 | 20 MB/s | 34 MB/s | 3130897 | 31.40 | mr, image |
lzma 9.38 -0 | 16 MB/s | 44 MB/s | 3157626 | 31.67 | mr, image |
csc 2016-10-13 -1 | 12 MB/s | 40 MB/s | 3285805 | 32.96 | mr, image |
xpack 2016-06-02 -1 | 82 MB/s | 323 MB/s | 3526828 | 35.37 | mr, image |
libdeflate 0.6 -1 | 98 MB/s | 428 MB/s | 3750985 | 37.62 | mr, image |
zlib 1.2.8 -1 | 60 MB/s | 227 MB/s | 3828366 | 38.40 | mr, image |
zstd 1.1.3 -1 | 191 MB/s | 637 MB/s | 3829231 | 38.41 | mr, image |
brotli 0.5.2 -0 | 198 MB/s | 185 MB/s | 3975643 | 39.87 | mr, image |
gipfeli 2016-07-13 | 220 MB/s | 395 MB/s | 4702561 | 47.16 | mr, image |
broo 1.0 | 5.94 MB/s | 305 MB/s | 4741219 | 47.55 | mr, image |
quicklz 1.5.0 -1 | 410 MB/s | 363 MB/s | 4778194 | 47.92 | mr, image |
lzsse2 2016-05-14 -0 | 24 MB/s | 1523 MB/s | 5120289 | 51.35 | mr, image |
yalz77 2015-09-19 -1 | 58 MB/s | 396 MB/s | 5269368 | 52.85 | mr, image |
snappy 1.1.3 | 302 MB/s | 912 MB/s | 5419831 | 54.36 | mr, image |
lz4 1.7.5 | 422 MB/s | 2024 MB/s | 5440937 | 54.57 | mr, image |
yappy 2014-03-22 -0 | 108 MB/s | 1609 MB/s | 6454120 | 64.73 | mr, image |
lz5 2.0 -10 | 294 MB/s | 2248 MB/s | 6978486 | 69.99 | mr, image |
Тест 4. База химических структур, database
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4042 MB/s | 4047 MB/s | 33553445 | 100.00 | nci, db |
csc 2016-10-13 -1 | 39 MB/s | 156 MB/s | 2463773 | 7.34 | nci, db |
lzma 9.38 -0 | 43 MB/s | 153 MB/s | 2777997 | 8.28 | nci, db |
lzlib 1.7 -0 | 49 MB/s | 103 MB/s | 2868761 | 8.55 | nci, db |
zstd 1.1.3 -1 | 435 MB/s | 915 MB/s | 2884530 | 8.60 | nci, db |
broo 1.0 | 8.65 MB/s | 1000 MB/s | 2981970 | 8.89 | nci, db |
xpack 2016-06-02 -1 | 180 MB/s | 807 MB/s | 3838847 | 11.44 | nci, db |
brotli 0.5.2 -0 | 539 MB/s | 575 MB/s | 3984199 | 11.87 | nci, db |
libdeflate 0.6 -1 | 180 MB/s | 1165 MB/s | 4066913 | 12.12 | nci, db |
zlib 1.2.8 -1 | 122 MB/s | 404 MB/s | 4624597 | 13.78 | nci, db |
yalz77 2015-09-19 -1 | 197 MB/s | 695 MB/s | 5050596 | 15.05 | nci, db |
gipfeli 2016-07-13 | 529 MB/s | 681 MB/s | 5063829 | 15.09 | nci, db |
lz4 1.7.5 | 765 MB/s | 2496 MB/s | 5533040 | 16.49 | nci, db |
lz5 2.0 -10 | 657 MB/s | 2644 MB/s | 5545810 | 16.53 | nci, db |
snappy 1.1.3 | 560 MB/s | 1452 MB/s | 6146844 | 18.32 | nci, db |
quicklz 1.5.0 -1 | 512 MB/s | 799 MB/s | 6160636 | 18.36 | nci, db |
lzsse2 2016-05-14 -0 | 15 MB/s | 2984 MB/s | 6339807 | 18.89 | nci, db |
yappy 2014-03-22 -0 | 179 MB/s | 1941 MB/s | 8967562 | 26.73 | nci, db |
Тест 5. Dll файлы из Open Office.org 1.01, exe
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4054 MB/s | 4102 MB/s | 6152192 | 100.00 | ooffice, exe |
csc 2016-10-13 -1 | 9.91 MB/s | 29 MB/s | 2301523 | 37.41 | ooffice, exe |
lzma 9.38 -0 | 13 MB/s | 31 MB/s | 2841578 | 46.19 | ooffice, exe |
lzlib 1.7 -0 | 14 MB/s | 24 MB/s | 2879489 | 46.80 | ooffice, exe |
xpack 2016-06-02 -1 | 60 MB/s | 342 MB/s | 3137960 | 51.01 | ooffice, exe |
libdeflate 0.6 -1 | 69 MB/s | 286 MB/s | 3187434 | 51.81 | ooffice, exe |
zlib 1.2.8 -1 | 40 MB/s | 151 MB/s | 3290532 | 53.49 | ooffice, exe |
brotli 0.5.2 -0 | 154 MB/s | 143 MB/s | 3539615 | 57.53 | ooffice, exe |
zstd 1.1.3 -1 | 166 MB/s | 487 MB/s | 3579899 | 58.19 | ooffice, exe |
broo 1.0 | 4.93 MB/s | 412 MB/s | 3757206 | 61.07 | ooffice, exe |
gipfeli 2016-07-13 | 163 MB/s | 354 MB/s | 3922276 | 63.75 | ooffice, exe |
lzsse2 2016-05-14 -0 | 15 MB/s | 1205 MB/s | 3995091 | 64.94 | ooffice, exe |
quicklz 1.5.0 -1 | 234 MB/s | 264 MB/s | 4013859 | 65.24 | ooffice, exe |
yalz77 2015-09-19 -1 | 35 MB/s | 398 MB/s | 4125570 | 67.06 | ooffice, exe |
yappy 2014-03-22 -0 | 82 MB/s | 1718 MB/s | 4235687 | 68.85 | ooffice, exe |
snappy 1.1.3 | 222 MB/s | 889 MB/s | 4271150 | 69.42 | ooffice, exe |
lz4 1.7.5 | 337 MB/s | 1671 MB/s | 4338918 | 70.53 | ooffice, exe |
lz5 2.0 -10 | 251 MB/s | 1997 MB/s | 4370070 | 71.03 | ooffice, exe |
Тест 6. Пример базы данных MySQL формата из Open Source Database Benchmark, database
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4095 MB/s | 4073 MB/s | 10085684 | 100.00 | osdb, db |
csc 2016-10-13 -1 | 10 MB/s | 38 MB/s | 3317800 | 32.90 | osdb, db |
lzlib 1.7 -0 | 19 MB/s | 33 MB/s | 3345965 | 33.18 | osdb, db |
xpack 2016-06-02 -1 | 68 MB/s | 475 MB/s | 3752871 | 37.21 | osdb, db |
zstd 1.1.3 -1 | 194 MB/s | 585 MB/s | 3770566 | 37.39 | osdb, db |
libdeflate 0.6 -1 | 90 MB/s | 470 MB/s | 3896803 | 38.64 | osdb, db |
brotli 0.5.2 -0 | 214 MB/s | 224 MB/s | 3910502 | 38.77 | osdb, db |
lzma 9.38 -0 | 15 MB/s | 38 MB/s | 3988823 | 39.55 | osdb, db |
zlib 1.2.8 -1 | 56 MB/s | 211 MB/s | 4076391 | 40.42 | osdb, db |
broo 1.0 | 5.40 MB/s | 474 MB/s | 4147465 | 41.12 | osdb, db |
lzsse2 2016-05-14 -0 | 12 MB/s | 1724 MB/s | 4492551 | 44.54 | osdb, db |
gipfeli 2016-07-13 | 232 MB/s | 530 MB/s | 4517517 | 44.79 | osdb, db |
yalz77 2015-09-19 -1 | 51 MB/s | 596 MB/s | 4570193 | 45.31 | osdb, db |
lz4 1.7.5 | 359 MB/s | 1629 MB/s | 5256666 | 52.12 | osdb, db |
lz5 2.0 -10 | 278 MB/s | 1842 MB/s | 5286739 | 52.42 | osdb, db |
snappy 1.1.3 | 303 MB/s | 1110 MB/s | 5329321 | 52.84 | osdb, db |
quicklz 1.5.0 -1 | 277 MB/s | 330 MB/s | 5496443 | 54.50 | osdb, db |
yappy 2014-03-22 -0 | 70 MB/s | 1794 MB/s | 7515735 | 74.52 | osdb, db |
Тест 7. Текст книги Chłopi, польского писателя Радислава Реймонта, Polish, PDF
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4123 MB/s | 4120 MB/s | 6627202 | 100.00 | reymont, pdf |
csc 2016-10-13 -1 | 15 MB/s | 47 MB/s | 1872324 | 28.25 | reymont, pdf |
lzma 9.38 -0 | 15 MB/s | 49 MB/s | 1921954 | 29.00 | reymont, pdf |
lzlib 1.7 -0 | 22 MB/s | 37 MB/s | 2082297 | 31.42 | reymont, pdf |
zstd 1.1.3 -1 | 157 MB/s | 486 MB/s | 2167385 | 32.70 | reymont, pdf |
libdeflate 0.6 -1 | 100 MB/s | 512 MB/s | 2206932 | 33.30 | reymont, pdf |
xpack 2016-06-02 -1 | 97 MB/s | 389 MB/s | 2279716 | 34.40 | reymont, pdf |
broo 1.0 | 5.10 MB/s | 423 MB/s | 2289019 | 34.54 | reymont, pdf |
brotli 0.5.2 -0 | 212 MB/s | 226 MB/s | 2360732 | 35.62 | reymont, pdf |
zlib 1.2.8 -1 | 59 MB/s | 213 MB/s | 2376430 | 35.86 | reymont, pdf |
gipfeli 2016-07-13 | 222 MB/s | 318 MB/s | 2644916 | 39.91 | reymont, pdf |
quicklz 1.5.0 -1 | 284 MB/s | 399 MB/s | 3003825 | 45.33 | reymont, pdf |
yalz77 2015-09-19 -1 | 76 MB/s | 347 MB/s | 3017083 | 45.53 | reymont, pdf |
lzsse2 2016-05-14 -0 | 16 MB/s | 1735 MB/s | 3039392 | 45.86 | reymont, pdf |
yappy 2014-03-22 -0 | 119 MB/s | 1252 MB/s | 3161344 | 47.70 | reymont, pdf |
lz4 1.7.5 | 303 MB/s | 1611 MB/s | 3181387 | 48.00 | reymont, pdf |
lz5 2.0 -10 | 265 MB/s | 1626 MB/s | 3184901 | 48.06 | reymont, pdf |
snappy 1.1.3 | 208 MB/s | 729 MB/s | 3233787 | 48.80 | reymont, pdf |
Тест 8. Tar архив исходников Samba 2-2.3, src
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4048 MB/s | 4033 MB/s | 21606400 | 100.00 | samba, src |
csc 2016-10-13 -1 | 17 MB/s | 60 MB/s | 4407241 | 20.40 | samba, src |
lzlib 1.7 -0 | 26 MB/s | 46 MB/s | 5178819 | 23.97 | samba, src |
lzma 9.38 -0 | 21 MB/s | 59 MB/s | 5338935 | 24.71 | samba, src |
zstd 1.1.3 -1 | 257 MB/s | 715 MB/s | 5550637 | 25.69 | samba, src |
xpack 2016-06-02 -1 | 107 MB/s | 568 MB/s | 5669295 | 26.24 | samba, src |
libdeflate 0.6 -1 | 113 MB/s | 615 MB/s | 5922973 | 27.41 | samba, src |
brotli 0.5.2 -0 | 304 MB/s | 285 MB/s | 6084327 | 28.16 | samba, src |
broo 1.0 | 6.90 MB/s | 650 MB/s | 6186042 | 28.63 | samba, src |
zlib 1.2.8 -1 | 73 MB/s | 276 MB/s | 6329455 | 29.29 | samba, src |
gipfeli 2016-07-13 | 323 MB/s | 426 MB/s | 6810623 | 31.52 | samba, src |
yalz77 2015-09-19 -1 | 81 MB/s | 512 MB/s | 7098899 | 32.86 | samba, src |
quicklz 1.5.0 -1 | 366 MB/s | 497 MB/s | 7309452 | 33.83 | samba, src |
lzsse2 2016-05-14 -0 | 14 MB/s | 2144 MB/s | 7395737 | 34.23 | samba, src |
lz4 1.7.5 | 486 MB/s | 2035 MB/s | 7716839 | 35.72 | samba, src |
lz5 2.0 -10 | 398 MB/s | 2246 MB/s | 7927178 | 36.69 | samba, src |
snappy 1.1.3 | 353 MB/s | 1089 MB/s | 8008774 | 37.07 | samba, src |
yappy 2014-03-22 -0 | 123 MB/s | 1769 MB/s | 9183273 | 42.50 | samba, src |
Тест 9. Звездный каталог Смитсоновской астрофизической обсерватории, bin
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4096 MB/s | 4114 MB/s | 7251944 | 100.00 | sao, bin |
lzma 9.38 -0 | 9.47 MB/s | 22 MB/s | 4923529 | 67.89 | sao, bin |
lzlib 1.7 -0 | 10 MB/s | 16 MB/s | 5005573 | 69.02 | sao, bin |
csc 2016-10-13 -1 | 5.69 MB/s | 17 MB/s | 5082846 | 70.09 | sao, bin |
xpack 2016-06-02 -1 | 47 MB/s | 312 MB/s | 5259606 | 72.53 | sao, bin |
libdeflate 0.6 -1 | 60 MB/s | 258 MB/s | 5494268 | 75.76 | sao, bin |
zlib 1.2.8 -1 | 31 MB/s | 158 MB/s | 5567774 | 76.78 | sao, bin |
brotli 0.5.2 -0 | 130 MB/s | 120 MB/s | 6019841 | 83.01 | sao, bin |
gipfeli 2016-07-13 | 146 MB/s | 422 MB/s | 6043361 | 83.33 | sao, bin |
broo 1.0 | 3.55 MB/s | 496 MB/s | 6086118 | 83.92 | sao, bin |
yappy 2014-03-22 -0 | 68 MB/s | 1709 MB/s | 6201752 | 85.52 | sao, bin |
zstd 1.1.3 -1 | 145 MB/s | 483 MB/s | 6254282 | 86.24 | sao, bin |
yalz77 2015-09-19 -1 | 26 MB/s | 576 MB/s | 6299030 | 86.86 | sao, bin |
snappy 1.1.3 | 212 MB/s | 969 MB/s | 6435266 | 88.74 | sao, bin |
quicklz 1.5.0 -1 | 229 MB/s | 222 MB/s | 6498301 | 89.61 | sao, bin |
lzsse2 2016-05-14 -0 | 15 MB/s | 941 MB/s | 6710542 | 92.53 | sao, bin |
lz4 1.7.5 | 337 MB/s | 2161 MB/s | 6790273 | 93.63 | sao, bin |
lz5 2.0 -10 | 236 MB/s | 2501 MB/s | 6792720 | 93.67 | sao, bin |
Тест 10. Американский словарь английского языка Уэбстера, html
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 3970 MB/s | 4008 MB/s | 41458703 | 100.00 | webster, html |
csc 2016-10-13 -1 | 13 MB/s | 44 MB/s | 10360155 | 24.99 | webster, html |
lzma 9.38 -0 | 17 MB/s | 47 MB/s | 12704878 | 30.64 | webster, html |
lzlib 1.7 -0 | 22 MB/s | 38 MB/s | 12727596 | 30.70 | webster, html |
zstd 1.1.3 -1 | 169 MB/s | 531 MB/s | 13738284 | 33.14 | webster, html |
libdeflate 0.6 -1 | 99 MB/s | 524 MB/s | 13839192 | 33.38 | webster, html |
broo 1.0 | 5.42 MB/s | 266 MB/s | 13854195 | 33.42 | webster, html |
xpack 2016-06-02 -1 | 94 MB/s | 441 MB/s | 14006907 | 33.79 | webster, html |
brotli 0.5.2 -0 | 187 MB/s | 207 MB/s | 14559007 | 35.12 | webster, html |
zlib 1.2.8 -1 | 60 MB/s | 211 MB/s | 14991242 | 36.16 | webster, html |
gipfeli 2016-07-13 | 209 MB/s | 281 MB/s | 16152312 | 38.96 | webster, html |
lzsse2 2016-05-14 -0 | 14 MB/s | 1897 MB/s | 17459517 | 42.11 | webster, html |
quicklz 1.5.0 -1 | 276 MB/s | 369 MB/s | 18315816 | 44.18 | webster, html |
yalz77 2015-09-19 -1 | 62 MB/s | 315 MB/s | 18435248 | 44.47 | webster, html |
yappy 2014-03-22 -0 | 107 MB/s | 1378 MB/s | 19899610 | 48.00 | webster, html |
lz4 1.7.5 | 317 MB/s | 1593 MB/s | 20139988 | 48.58 | webster, html |
lz5 2.0 -10 | 260 MB/s | 1790 MB/s | 20153547 | 48.61 | webster, html |
snappy 1.1.3 | 214 MB/s | 765 MB/s | 20206466 | 48.74 | webster, html |
Тест 11. Коллекция xml файлов, xml
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4118 MB/s | 4113 MB/s | 5345280 | 100.00 | xml |
csc 2016-10-13 -1 | 27 MB/s | 99 MB/s | 606763 | 11.35 | xml |
lzma 9.38 -0 | 34 MB/s | 108 MB/s | 691236 | 12.93 | xml |
zstd 1.1.3 -1 | 363 MB/s | 887 MB/s | 703151 | 13.15 | xml |
lzlib 1.7 -0 | 39 MB/s | 73 MB/s | 741537 | 13.87 | xml |
broo 1.0 | 7.91 MB/s | 1277 MB/s | 800526 | 14.98 | xml |
brotli 0.5.2 -0 | 409 MB/s | 451 MB/s | 905757 | 16.94 | xml |
libdeflate 0.6 -1 | 143 MB/s | 856 MB/s | 940409 | 17.59 | xml |
zlib 1.2.8 -1 | 104 MB/s | 344 MB/s | 965248 | 18.06 | xml |
xpack 2016-06-02 -1 | 137 MB/s | 634 MB/s | 1000008 | 18.71 | xml |
yalz77 2015-09-19 -1 | 157 MB/s | 666 MB/s | 1067378 | 19.97 | xml |
gipfeli 2016-07-13 | 406 MB/s | 527 MB/s | 1100536 | 20.59 | xml |
quicklz 1.5.0 -1 | 452 MB/s | 712 MB/s | 1124708 | 21.04 | xml |
lzsse2 2016-05-14 -0 | 18 MB/s | 2870 MB/s | 1201125 | 22.47 | xml |
lz4 1.7.5 | 617 MB/s | 1991 MB/s | 1227495 | 22.96 | xml |
lz5 2.0 -10 | 524 MB/s | 2231 MB/s | 1240098 | 23.20 | xml |
snappy 1.1.3 | 414 MB/s | 1196 MB/s | 1308374 | 24.48 | xml |
yappy 2014-03-22 -0 | 155 MB/s | 1915 MB/s | 1605459 | 30.04 | xml |
Тест 12. Рентген изображение, image
Имя алгоритма | Скорость упаковки | Скорость распаковки | Размер сжатого файла, Байт | % от оригинала | Имя файла, тип |
memcpy | 4023 MB/s | 4106 MB/s | 8474240 | 100.00 | x-ray, image |
csc 2016-10-13 -1 | 16 MB/s | 21 MB/s | 4049630 | 47.79 | x-ray, image |
lzlib 1.7 -0 | 9.85 MB/s | 18 MB/s | 5079274 | 59.94 | x-ray, image |
lzma 9.38 -0 | 10 MB/s | 23 MB/s | 5198894 | 61.35 | x-ray, image |
xpack 2016-06-02 -1 | 48 MB/s | 243 MB/s | 5863367 | 69.19 | x-ray, image |
libdeflate 0.6 -1 | 63 MB/s | 267 MB/s | 5999750 | 70.80 | x-ray, image |
zlib 1.2.8 -1 | 35 MB/s | 145 MB/s | 6033932 | 71.20 | x-ray, image |
brotli 0.5.2 -0 | 139 MB/s | 121 MB/s | 6600523 | 77.89 | x-ray, image |
zstd 1.1.3 -1 | 419 MB/s | 569 MB/s | 6772286 | 79.92 | x-ray, image |
lzsse2 2016-05-14 -0 | 17 MB/s | 883 MB/s | 7292876 | 86.06 | x-ray, image |
quicklz 1.5.0 -1 | 264 MB/s | 219 MB/s | 7440632 | 87.80 | x-ray, image |
gipfeli 2016-07-13 | 165 MB/s | 486 MB/s | 7641391 | 90.17 | x-ray, image |
broo 1.0 | 3.47 MB/s | 487 MB/s | 7702715 | 90.90 | x-ray, image |
yalz77 2015-09-19 -1 | 23 MB/s | 491 MB/s | 7933653 | 93.62 | x-ray, image |
snappy 1.1.3 | 446 MB/s | 1869 MB/s | 8209180 | 96.87 | x-ray, image |
yappy 2014-03-22 -0 | 59 MB/s | 3200 MB/s | 8328582 | 98.28 | x-ray, image |
lz4 1.7.5 | 852 MB/s | 3457 MB/s | 8390195 | 99.01 | x-ray, image |
lz5 2.0 -10 | 540 MB/s | 4126 MB/s | 8459685 | 99.83 | x-ray, image |
“Послесловие”
Следует заметить, что он все еще сыроват и еще есть достаточно работы для улучшения, но уже сейчас дает положительный эффект. Впереди еще часы генерирования и проверки гипотез, написание тестов и оптимизации кода.
Спасибо за внимание.