LZFSE ( Entropía de estado finito de Lempel – Ziv ) es un algoritmo de compresión de datos sin pérdida de código abierto creado por Apple Inc. Fue lanzado con un algoritmo más simple llamado LZVN . [2]
Desarrollador (es) | manzana |
---|---|
Versión inicial | 2015 |
Lanzamiento estable | lzfse-1.0 / 8 de mayo de 2017 |
Repositorio | lzfse en GitHub |
Escrito en | C |
Sistema operativo | macOS , iOS , Linux [1] |
Disponible en | C |
Tipo | Compresión de datos |
Licencia | Nueva licencia BSD de 3 cláusulas |
Descripción general
El nombre es un acrónimo de Lempel-Ziv y Finite State Entropy [3] (implementación de sistemas numéricos asimétricos ). LZFSE fue presentado por Apple en su Worldwide Developer Conference 2015. Se envió con las versiones iOS 9 y OS X 10.11 de ese año .
Apple afirma que LZFSE se comprime con una proporción comparable a la de zlib ( DEFLATE ) y se descomprime de dos a tres veces más rápido mientras usa menos recursos, por lo que ofrece una mayor eficiencia que zlib. Estaba destinado a escenarios en los que la velocidad y la frecuencia de descompresión debían priorizarse por igual. [3] Parte de esta eficiencia se logró optimizando el algoritmo para microarquitecturas modernas, centrándose específicamente en arm64 . [4] La evaluación comparativa de terceros confirma que LZFSE se descomprime más rápido que zlib, pero también sugiere que muchos otros algoritmos de compresión modernos pueden tener características de rendimiento de algoritmos de compresión más favorables, como densidad, velocidad de compresión y velocidad de descompresión por un margen significativo. [5]
La implementación de 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 usa LZVN en su lugar. [6] Este algoritmo en libfastCompression.a se descubrió anteriormente como el método de compresión kernelcache predeterminado en Mac OS X Yosemite Developer Preview 1 (2014), reemplazando la lzss
compresión heredada de Haruhiko Okumura . [7]
Según Squash Benchmark, LZFSE es similar en velocidad a ZSTD (nivel 6), pero tiene una relación ligeramente peor. LZVN es similar en velocidad al nivel 4 del LZ4, con una relación ligeramente peor también. [8] Ni LZFSE ni LZVN se pueden ajustar en tiempo de ejecución, aunque algunas constantes se pueden ajustar en tiempo de compilación para lograr el equilibrio habitual entre velocidad y relación. [6]
Implementación
Una biblioteca C de referencia escrita por Eric Bainville se puso a disposición bajo la licencia BSD de 3 cláusulas después de la WWDC 2016. También incluye un ejecutable para comprimir y descomprimir flujos LZFSE. No hay planes para exponer una API LZVN. [1]
AppleFSCompression.framework (AFSC), el mecanismo para la compresión casi transparente en HFS Plus y Apple File System , es compatible con LZFSE y LZVN desde OS X 10.9.
Ver también
- Zstandard : otra combinación de LZ77 y FSE, de Yann Collet, autor de FSE
- Algoritmo de compresión LZ4 : un miembro rápido de la familia LZ77, también disponible en plataformas Apple [9]
Referencias
- ↑ a b Bainville, Eric (7 de junio de 2016). "Biblioteca de compresión LZFSE y herramienta de línea de comandos" . GitHub . Consultado el 4 de julio de 2016 .
- ^ Apple Inc. "Compresión de datos - Compresión | Documentación para desarrolladores de Apple" . developer.apple.com . Consultado el 7 de abril de 2017 .
- ^ a b De Simone, Sergio. "Apple Open-Sources su nuevo algoritmo de compresión LZFSE" . infoq . Consultado el 7 de julio de 2016 .
- ^ Apple Inc. (12 de junio de 2015). "Low Energy, High Performance: Compression and Accelerate - WWDC 2015 - Apple Developer Videos" . developer.apple.com . Consultado el 5 de marzo de 2017 . pdf
- ^ "Compression Benchmark" . Consultado el 10 de agosto de 2018 .
- ^ a b "lzfse_tunables.h" . GitHub . 18 de diciembre de 2019 . Consultado el 22 de diciembre de 2019 .
- ^ Piker-Alpha (4 de junio de 2014). "OS X 10.10 Yosemite DP1 kernel (caché)" . Universum de Pike . Consultado el 22 de diciembre de 2019 .
- ^ "Punto de referencia de compresión de squash" . GitHub . Calabaza . Consultado el 25 de diciembre de 2019 .
- ^ "algoritmo_compresión" . Documentación para desarrolladores de Apple . Apple . Consultado el 11 de agosto de 2019 .
enlaces externos
- lzfse en GitHub
- Entropía de estado finito de Yann Collet (Cyan4973) , el origen de la implementación de FSE en LZFSE
- Discusión sobre Encode.su , del cual el mantenedor Eric Bainville ha tomado sugerencias