LZFSE
| 개발자 | 애플 |
|---|---|
| 발표일 | 2015 |
| 안정화 버전 | lzfse-1.0
/ 2017년 5월 8일 |
| 저장소 | (영어) lzfse - 깃허브 |
| 프로그래밍 언어 | C |
| 운영 체제 | macOS, iOS, 리눅스[1] |
| 언어 | C |
| 종류 | 데이터 압축 |
| 라이선스 | 3-clause New BSD 라이선스 |
LZFSE(Lempel–Ziv Finite State Entropy)는 애플이 만든 오픈 소스 비손실 데이터 압축 알고리즘이다. 더 간단한 알고리즘인 LZVN과 함께 출시되었다.[2]
개요
[편집]이름은 렘펠-지브와 유한 상태 엔트로피[3](비대칭 숫자 시스템 구현)의 약어이다. LZFSE는 애플이 2015년 세계 개발자 회의에서 발표했다. 그 해 iOS 9와 OS X 10.11 출시에 포함되었다.
애플은 LZFSE가 Zlib (DEFLATE)와 비슷한 압축률을 가지면서도 두세 배 더 빠르게 압축을 해제하고 더 적은 리소스를 사용하므로 zlib보다 더 높은 에너지 효율을 제공한다고 주장한다. 압축 해제 속도와 비율을 균등하게 우선시해야 하는 시나리오를 목표로 했다.[3] 이러한 에너지 효율의 일부는 최신 마이크로아키텍처, 특히 ARM64에 맞게 알고리즘을 최적화함으로써 달성되었다.[4] 타사 벤치마킹에 따르면 LZFSE가 zlib보다 압축 해제 속도가 빠르지만, 다른 많은 최신 압축 알고리즘이 밀도, 압축 속도 및 압축 해제 속도와 같은 더 유리한 압축 알고리즘 성능 특성을 상당한 차이로 가질 수 있음을 시사한다.[5]
스쿼시 벤치마크에 따르면 LZFSE는 Zstd (레벨 6)와 속도가 비슷하지만 비율은 약간 나쁘다. LZVN은 LZ4 레벨 4와 속도가 비슷하지만 비율도 약간 나쁘다.[6] LZFSE와 LZVN 모두 런타임에 튜닝할 수 없지만, 일반적인 속도-비율 절충을 위해 컴파일 시간에 몇 가지 상수를 조정할 수 있다.[7]
구현
[편집]에릭 바인빌이 작성한 참조 C 라이브러리는 2016년 WWDC 이후 3-절 BSD 라이선스로 공개되었다. 여기에는 LZFSE 스트림을 압축하고 해제하는 실행 파일도 포함된다. LZVN API를 노출할 계획은 없다.[1]
애플의 LZFSE 구현은 입력이 LZFSE_ENCODE_LZVN_THRESHOLD (4096 바이트)보다 작을 때 LZVN이라는 더 간단한 알고리즘을 사용한다. 이는 엔트로피 부호화 없이 세 가지 너비의 REP (L,M,D) 패킷을 사용하는 LZSS 유형 알고리즘이다. 오픈 소스 참조 구현에서 애플은 LZFSE가 작은 크기에서 제대로 작동하지 않으므로 대신 LZVN을 사용한다고 설명한다.[7] libfastCompression.a의 이 알고리즘은 이전에 Mac OS X 요세미티 개발자 프리뷰 1 (2014)에서 기본 커널캐시 압축 방식으로 발견되었으며, 하루히코 오쿠무라의 기존 lzss 압축을 대체했다.[8]
사용법
[편집]HFS 플러스 및 애플 파일 시스템의 준투명 압축 메커니즘인 AppleFSCompression.framework (AFSC)는 OS X 10.9 이후 LZFSE 및 LZVN을 지원한다.
애플의 디스크 이미지 프레임워크는 Mac OS X 10.11 이후 ULFO라는 LZFSE 기반 인코딩을 제공하며,[9] hdiutil(1)[10] 및 일부 타사 이미지 유틸리티를 통해 접근할 수 있다.
애플은 2017년 macOS 하이 시에라에서 애플 아카이브 형식과 관련 API를 도입했다.[11] 확장자명은 .aar (틀:MacOS 빅서 이후, 이전에는 .yaa)이다. 암호화는 macOS 몬터레이에서 도입되었으며, 이때 AA는 기본 아카이브 유틸리티 형식이 되었다. macOS에는 AA 파일을 처리하는 세 가지 명령줄 유틸리티가 제공된다.[12][13] 타사 프로그램 중 Keka는 시스템 API를 사용하여 AA 파일을 처리할 수 있지만, 다른 시스템에는 독립적인 구현이 존재하지 않는다.[14]
같이 보기
[편집]- Zstandard – FSE 저자 얀 콜레가 만든 또 다른 LZ77 및 FSE 조합
- LZ4 압축 알고리즘 – LZ77 계열의 빠른 멤버, 애플 플랫폼에서도 사용 가능[15]
각주
[편집]- 1 2 Bainville, Eric (2016년 6월 7일). “LZFSE compression library and command line tool”. GitHub. 2016년 7월 4일에 확인함.
- ↑ Apple Inc. “Data Compression - Compression | Apple Developer Documentation” (영어). 《developer.apple.com》. 2017년 4월 7일에 확인함.
- 1 2 De Simone, Sergio. “Apple Open-Sources its New Compression Algorithm LZFSE”. 《infoq》. 2016년 7월 7일에 확인함.
- ↑ Apple Inc. (2015년 6월 12일). “Low Energy, High Performance: Compression and Accelerate – WWDC 2015 – Apple Developer Videos” (영어). 《developer.apple.com》. 2017년 3월 5일에 확인함. pdf 보관됨 2016-04-18 - 웨이백 머신
- ↑ “Compression Benchmark”. 2018년 8월 10일에 확인함.
- ↑ “Squash Compression Benchmark”. 《GitHub》. Squash. 2019년 12월 25일에 확인함.
- 1 2 “lzfse_tunables.h”. 《GitHub》. 2019년 12월 18일. 2019년 12월 22일에 확인함.
- ↑ Piker-Alpha (2014년 6월 4일). “OS X 10.10 Yosemite DP1 kernel(cache)” (영어). 《Pike's Universum》. 2019년 12월 22일에 확인함.
- ↑ Tsai, Michael (2015년 10월 7일). “LZFSE Disk Images in El Capitan”. 2017년 4월 9일에 원본 문서에서 보존된 문서. 2022년 4월 15일에 확인함.
- ↑ “hdiutil(1) mojave man page”. 2022년 4월 15일에 확인함.
- ↑ “Apple Archive” (영어). 《Apple Developer Documentation》.
- ↑ “Inside Apple Archive: more than a compression format” (영어). 《The Eclectic Light Company》. 2022년 5월 10일.
- ↑ “AA(1): Manipulate Apple Archives”. 《keith.github.io》.
- ↑ “AppleArchive support · Issue #829 · aonez/Keka” (영어). 《GitHub》.
- ↑ “compression_algorithm”. 《Apple Developer Documentation》. Apple Inc. 2019년 8월 11일에 확인함.
외부 링크
[편집]- (영어) lzfse - 깃허브
- 얀 콜레(Cyan4973)의 유한 상태 엔트로피, LZFSE의 FSE 구현 소스
- Encode.su 토론, 관리자 에릭 바인빌이 제안을 받아들인 곳