LZFSE ( Lempel–Ziv Finite State Entropy ) es un algoritmo de compresión de datos sin pérdidas de código abierto creado por Apple Inc. Fue lanzado junto con un algoritmo más simple llamado LZVN . [ 2 ]
Descripción general
El nombre es un acrónimo de Lempel-Ziv y entropía de estado finito [ 3 ] (implementación de sistemas numéricos asimétricos ). Apple presentó LZFSE en su Conferencia Mundial de Desarrolladores de 2015. Se incluyó en las versiones de iOS 9 y OS X 10.11 de ese año .
Apple afirma que LZFSE comprime con una relación comparable a la de zlib ( DEFLATE ) y descomprime de dos a tres veces más rápido utilizando menos recursos, ofreciendo así una mayor eficiencia energética que zlib. Fue diseñado para escenarios donde la velocidad y la tasa de descompresión deben tener la misma prioridad. [ 3 ] Parte de esta eficiencia energética se logró optimizando el algoritmo para microarquitecturas modernas, centrándose específicamente en arm64 . [ 4 ] Las pruebas de rendimiento de terceros confirman que LZFSE descomprime más rápido que zlib, pero también sugieren que muchos otros algoritmos de compresión modernos pueden tener características de rendimiento más favorables, como densidad, velocidad de compresión y velocidad de descompresión, por un margen significativo. [ 5 ]
Según Squash Benchmark, LZFSE tiene una velocidad similar a zstd (nivel 6), pero una relación ligeramente peor. LZVN tiene una velocidad similar a LZ4 nivel 4, con una relación también ligeramente peor. [ 6 ] Ni LZFSE ni LZVN son configurables en tiempo de ejecución, aunque se pueden ajustar algunas constantes en tiempo de compilación para lograr el equilibrio habitual entre velocidad y relación. [ 7 ]
Implementación
Una biblioteca de referencia en C escrita por Eric Bainville se puso a disposición bajo la licencia BSD de 3 cláusulas después de la WWDC 2016. Incluye un ejecutable para comprimir y descomprimir flujos LZFSE. No hay planes para exponer una API LZVN. [ 1 ]
La implementación LZFSE de Apple utiliza un algoritmo más simple llamado LZVN cuando la entrada es menor que LZFSE_ENCODE_LZVN_THRESHOLD(4096 bytes). Este es un algoritmo de tipo LZSS sin codificación de entropía, pero con tres anchos de paquetes REP (L, M, D). En la implementación de referencia de código abierto, Apple explica que LZFSE no funciona tan bien para tamaños pequeños, por lo que se utiliza LZVN en su lugar. [ 7 ] Este algoritmo en libfastCompression.a se descubrió anteriormente como el método de compresión de caché del kernel predeterminado en Mac OS X Yosemite Developer Preview 1 (2014), reemplazando la lzsscompresión heredada de Haruhiko Okumura . [ 8 ]
Uso
AppleFSCompression.framework (AFSC), el mecanismo de compresión cuasi-transparente en HFS Plus y Apple File System , es compatible con LZFSE y LZVN desde OS X 10.9.
El marco de trabajo Disk Images de Apple ha ofrecido una codificación basada en LZFSE llamada ULFOdesde Mac OS X 10.11 , [ 9 ] accesible a través de hdiutil(1)[ 10 ] y algunas utilidades de imágenes de terceros.
Apple introdujo el formato Apple Archive y su API asociada en macOS High Sierra en 2017. [ 11 ] La extensión es .aar (desde macOS Big Sur , solía ser .yaa ). El cifrado se introdujo en macOS Monterey , cuando AA se convirtió en el formato predeterminado de Archive Utility . Hay tres utilidades de línea de comandos disponibles en macOS para manejar archivos AA. [ 12 ] [ 13 ] De los programas de terceros, Keka puede usar las API del sistema para manejar archivos AA, pero no existen implementaciones independientes en otros sistemas. [ 14 ]
Véase también
- Zstandard : otra combinación de LZ77 y FSE, por Yann Collet, el autor de FSE.
- Algoritmo de compresión LZ4 : un miembro rápido de la familia LZ77, también disponible en plataformas Apple [ 15 ].
Referencias
- 1 2 Bainville, Eric (2016-06-07). "Biblioteca de compresión LZFSE y herramienta de línea de comandos" . GitHub . Recuperado el 2016-07-04 .
- ↑ Apple Inc. "Compresión de datos - Compresión | Documentación para desarrolladores de Apple" . developer.apple.com . Consultado el 7 de abril de 2017 .
- 1 2 De Simone, Sergio. "Apple publica como código abierto su nuevo algoritmo de compresión LZFSE" . infoq . Consultado el 7 de julio de 2016 .
- ↑ Apple Inc. (12 de junio de 2015). "Bajo consumo energético, alto rendimiento: compresión y aceleración – WWDC 2015 – Vídeos para desarrolladores de Apple" . developer.apple.com . Consultado el 5 de marzo de 2017 .PDF archivado el 18 de abril de 2016 en Wayback Machine.
- ↑ "Compression Benchmark" . Consultado el 10 de agosto de 2018 .
- ↑ "Squash Compression Benchmark" . GitHub . Squash . Consultado el 25 de diciembre de 2019 .
- 1 2 "lzfse_tunables.h" . GitHub . 18 de diciembre de 2019. Consultado el 22 de diciembre de 2019 .
- ^ Piker-Alpha (4 de junio de 2014). "Núcleo (caché) de OS X 10.10 Yosemite DP1" . Universum de Pike . Consultado el 22 de diciembre de 2019 .
- ↑ Tsai, Michael (2015-10-07). "Imágenes de disco LZFSE en El Capitan" . Archivado del original el 2017-04-09 . Recuperado el 2022-04-15 .
- ↑ "hdiutil(1) página man de mojave" . Consultado el 15 de abril de 2022 .
- ↑ "Archivo de Apple" . Documentación para desarrolladores de Apple .
- ↑ "Dentro del archivo de Apple: más que un formato de compresión" . The Eclectic Light Company . 10 de mayo de 2022.
- ↑ "AA(1): Manipular archivos de Apple" . keith.github.io .
- ↑ "Soporte para AppleArchive · Problema n.° 829 · aonez/Keka" . GitHub .
- ↑ "algoritmo de compresión" . Documentación para desarrolladores de Apple . Apple Inc. Consultado el 11 de agosto de 2019 .
Enlaces externos
- lzfse en GitHub
- Entropía de estado finito por Yann Collet (Cyan4973) , la fuente de la implementación de FSE en LZFSE.
- Discusión en Encode.su , de la cual el mantenedor Eric Bainville ha tomado sugerencias.
- Algoritmos de compresión sin pérdidas
- Bibliotecas informáticas gratuitas
- Compresión de datos