Algoritma kompresi lossless dan delta coding Broo, perbandingan dengan Xdelta3. Pengembangan proyek rumah

Senang menyambut Anda. Hampir satu tahun telah berlalu sejak artikel terakhir dipublikasikan dan kami siap untuk memberi tahu Anda apa yang terjadi pada algoritma itu sendiri dan bagaimana delta coding terlibat.


gambar


Entri


Setelah publikasi artikel tentang peningkatan algoritma Broo, kami dihadapkan dengan hambatan dalam meningkatkan tingkat kompresi dan kinerja, yaitu, tidak mungkin untuk meningkatkan tingkat kompresi tanpa mempengaruhi kecepatan dekompresi dan sebaliknya. Saya akan segera melakukan reservasi, perbaikan dilakukan tanpa mengurangi karakteristik algoritma lainnya, tetapi perubahan ini tidak signifikan, kami akan menulis tentang perubahan ini nanti. Jadi, setelah itu, kami memikirkan di mana kami bisa menerapkan keahlian dan pengetahuan kami yang terakumulasi dalam arah yang sama. Dan pilihan jatuh pada pengkodean delta .


Apa itu delta coding?


Delta encoding ( Eng. Delta encoding) - cara mewakili data dalam bentuk perbedaan ( delta ) antara data serial dan bukan data itu sendiri.

Dalam praktiknya, jika algoritma kompresi memungkinkan Anda mengurangi ukuran file dan menyimpan atau meneruskannya tanpa ketergantungan pada file lain, maka algoritma pengkodean delta memungkinkan Anda untuk membangun tambalan (perbedaan) dengan ukuran lebih kecil berdasarkan pada dua file (kumpulan data) dan menerapkan tambalan untuk file tersebut ( kumpulan data) 1 - dapatkan file (kumpulan data) 2 .


Aplikasi yang paling umum untuk pengkodean delta adalah memperbarui aplikasi di ponsel dan PC Anda. Alih-alih mengunduh aplikasi sepenuhnya dan kemudian mengganti file, tambalan yang jauh lebih kecil dibuat (tergantung pada jumlah perubahan), yang memungkinkan Anda mengunduh pembaruan lebih cepat, dan kecepatan penerapan tambalan secara langsung memengaruhi kecepatan pembaruan aplikasi itu sendiri.


Jika Anda tahu di mana lagi pengkodean delta digunakan, maka tulis di komentar.


Tentang perubahan pada algoritma Broo


Seperti yang kami katakan, ada beberapa di antaranya:


  • Dukungan tambahan untuk file berukuran 2 ^ 64 untuk x64 dan 2 ^ 32 untuk x32.
  • Rasio kompresi yang ditingkatkan.

Perubahan ini masih dalam tahap eksperimen dan debugging. Masalah utama - setelah menambahkan dukungan untuk file besar, kecepatan dekompresi turun 20%, yang tidak dapat diterima bagi kami. Jadi kami masih mencari solusi.


Di bawah ini kami hanya menyediakan satu tabel perbandingan dari versi algoritma yang lama, yang eksperimental, dan beberapa level zstd. File xml dari artikel sebelumnya .


Prosesor: Intel i7-7700HQ


Memori: DDR4-2400


Nama AlgoritmaKecepatan pengepakanKecepatan dekompresiUkuran File Terkompresi, Bytes% asli
memcpy17460 MB / s17194 MB / s5345280100.00
zstd 1.3.1 -6141 MB / s1311 MB / s58581010.96
broo 1.211 MB / s1905 MB / s60683811.35
zstd 1.3.1 -5196 MB / s1207 MB / s61951011.59
zstd 1.3.1 -4357 MB / s1214 MB / s63758711,93
zstd 1.3.1 -3366 MB / s1220 MB / s63907311.96
broo 1.114 MB / s2005 MB / s64308412,03
zstd 1.3.1 -2394 MB / s1108 MB / s69050812,92
zstd 1.3.1 -1479 MB / s1213 MB / s70309313.15

Seperti banyak algoritma, kecepatan tergantung pada prosesor, seperti yang dapat kita lihat dalam tabel, kecepatan dekompresi lebih dari 1,5 kali lebih cepat daripada zstd tingkat pertama, pada prosesor Intel i7-7700HQ. Sementara pada Intel i3-550 lama, kecepatan dekompresi kira-kira sama dengan kecepatan dekompresi zstd, Anda dapat melihat tabel perbandingan di sini .


Ini menunjukkan bahwa Anda dapat melakukan integrasi yang lebih ketat dengan masing-masing prosesor. Tergantung pada spesifikasi tugas.


Delta Coding dan Broo


Seperti yang Anda duga, kami mengembangkan algoritma pengkodean delta kami sendiri dan memberinya nama DBroo (Delta Broo).


Karakteristik dan fitur utama:


  • Dukungan untuk ukuran file 2 ^ 64 untuk x64 dan 2 ^ 32 untuk x32.
  • Bekerja dengan data biner.
  • Modifikasi sebagian dari file referensi yang menerapkan patch diizinkan.

Ada solusi siap pakai seperti diff, bsdiff, xdelta dan lainnya. Tujuannya adalah untuk menemukan yang terbaik (sekaligus terjangkau) dalam arah ini dan bersaing dengannya. Xdelta3 ternyata menjadi pesaing utama dengan cara eksperimental murni. Ini memberikan kompresi yang baik dan kecepatan aplikasi patch yang cukup cepat. Xdelta3 juga digunakan untuk pembaruan CyanogenMod (sekarang LineageOS ).


Sekarang mari kita lihat tabel perbandingan DBroo dan Xdelta3. Sebagai file referensi, "xml" digunakan, dan sebagai file baru, sama tetapi dimodifikasi secara acak.


Nama AlgoritmaKecepatan pembuatan tambalanKecepatan aplikasi tambalanUkuran tambalan, byte% dari aslinya
memcpy18052 MB / s18665 MB / s5326823100.00
Xdelta3 -9 + lzma5,40 MB / s306 MB / s1065422,00
Xdelta3 -6 + lzma20 MB / s310 MB / s1219162.28
DBroo 1.07,40 MB / s1600.00 MB / s1230522.31
Xdelta3 -97,00 MB / s688,24 MB / s1797323.37
Xdelta3 -636,71 MB / s694.09 MB / s2016813.78
Xdelta3 -359,22 MB / s637,43 MB / s2372184.45
Xdelta3 -272,73 MB / s582.75 MB / s2792235.24
Xdelta3 -181,43 MB / s540.53 MB / s4788248.9

PS


Pengembangan hanya diberikan kepada produk-produk yang memiliki permintaan di pasar. Karena itu, kami menyambut komentar Anda. Kami juga membuat saluran telegram .


Terima kasih

Source: https://habr.com/ru/post/id425255/


All Articles