Broo algoritmo de compresi贸n sin p茅rdida y codificaci贸n delta, comparaci贸n con Xdelta3. Desarrollo de proyectos en casa

Me alegra darte la bienvenida. Ha pasado casi un a帽o desde que se public贸 el 煤ltimo art铆culo y estamos listos para decirle qu茅 sucedi贸 con el algoritmo en s铆 y c贸mo est谩 involucrada la codificaci贸n delta.


imagen


Entrada


Despu茅s del lanzamiento del art铆culo sobre mejoras al algoritmo Broo, nos enfrentamos con un obst谩culo para mejorar el nivel de compresi贸n y rendimiento, es decir, era imposible mejorar el nivel de compresi贸n sin afectar la velocidad de descompresi贸n y viceversa. Har茅 una reserva de inmediato, las mejoras se realizaron sin perjuicio de otras caracter铆sticas del algoritmo, pero estos cambios son insignificantes, escribiremos sobre estos cambios m谩s adelante. Entonces, despu茅s, pensamos en d贸nde podemos aplicar nuestra experiencia y conocimiento acumulados en una direcci贸n similar. Y la elecci贸n recay贸 en codificaci贸n delta .


驴Qu茅 es la codificaci贸n delta?


Codificaci贸n delta ( codificaci贸n delta del ingl茅s ): una forma de representar los datos en forma de diferencia ( delta ) entre los datos en serie en lugar de los datos en s铆.

En la pr谩ctica, si los algoritmos de compresi贸n le permiten reducir el tama帽o del archivo y almacenarlo o reenviarlo sin ninguna dependencia de otros archivos, entonces los algoritmos de codificaci贸n delta le permiten construir un parche (diferencia) de un tama帽o m谩s peque帽o basado en dos archivos (conjunto de datos) y aplicar el parche para el archivo ( conjunto de datos) 1 : obtenga un archivo (conjunto de datos) 2 .


La aplicaci贸n m谩s com煤n para la codificaci贸n delta es actualizar las aplicaciones en sus tel茅fonos y PC. En lugar de descargar la aplicaci贸n por completo y luego reemplazar los archivos, se construye un parche mucho m谩s peque帽o (dependiendo del n煤mero de cambios), que le permite descargar la actualizaci贸n mucho m谩s r谩pido, y la velocidad de aplicar el parche afecta directamente la velocidad de actualizaci贸n de la aplicaci贸n misma.


Si sabe d贸nde m谩s se usa la codificaci贸n delta, escriba los comentarios.


Acerca de los cambios en el algoritmo Broo


Como dijimos, hay algunos de ellos:


  • Se agreg贸 soporte para archivos de tama帽o 2 ^ 64 para x64 y 2 ^ 32 para x32.
  • Relaci贸n de compresi贸n mejorada.

Estos cambios todav铆a est谩n en la etapa de experimentaci贸n y depuraci贸n. El problema principal: despu茅s de agregar soporte para archivos grandes, la velocidad de descompresi贸n se redujo en un 20%, lo que es inaceptable para nosotros. As铆 que todav铆a estamos buscando una soluci贸n.


A continuaci贸n proporcionamos solo una tabla de comparaciones de la versi贸n anterior del algoritmo, la versi贸n experimental y algunos niveles de zstd. El archivo xml del art铆culo anterior .


Procesador: Intel i7-7700HQ


Memoria: DDR4-2400


Nombre del algoritmoVelocidad de embalajeVelocidad de descompresi贸nTama帽o de archivo comprimido, bytes% del original
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

Como muchos algoritmos, la velocidad depende del procesador, como podemos ver en la tabla, la velocidad de descompresi贸n es m谩s de 1.5 veces m谩s r谩pida que la del zstd de primer nivel, en el procesador Intel i7-7700HQ. Mientras que en el antiguo Intel i3-550, la velocidad de descompresi贸n era aproximadamente igual a la velocidad de descompresi贸n zstd, puede ver las tablas de comparaci贸n aqu铆 .


Esto sugiere que puede realizar una integraci贸n m谩s estrecha con procesadores individuales. Depende de los detalles de la tarea.


Delta Coding y Broo


Como habr谩s adivinado, desarrollamos nuestro propio algoritmo de codificaci贸n delta y le pusimos el nombre de DBroo (Delta Broo).


Principales caracter铆sticas y caracter铆sticas:


  • Soporte para tama帽os de archivo 2 ^ 64 para x64 y 2 ^ 32 para x32.
  • Trabajar con datos binarios.
  • Se permite la modificaci贸n parcial del archivo de referencia al que se aplicar谩 el parche.

Hay soluciones listas para usar como diff, bsdiff, xdelta y otras. El objetivo era encontrar lo mejor (as铆 como asequible) en esta direcci贸n y competir con 茅l. El Xdelta3 result贸 ser el principal competidor de una manera puramente experimental. Ofrece una buena compresi贸n y una velocidad de aplicaci贸n de parches bastante r谩pida. Xdelta3 tambi茅n se usa para actualizaciones de CyanogenMod (ahora LineageOS ).


Ahora veamos la tabla de comparaci贸n de DBroo y Xdelta3. Como archivo de referencia, se usa "xml", y como archivo nuevo, el mismo pero modificado al azar.


Nombre del algoritmoVelocidad de creaci贸n de parchesVelocidad de aplicaci贸n de parchesTama帽o de parche, bytes% del original
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


El desarrollo se da solo a aquellos productos que tienen una demanda en el mercado. Por lo tanto, agradecemos sus comentarios. Tambi茅n creamos un canal de telegramas .


Gracias

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


All Articles