zlib-rs는 C보다 빠름
-
zlib-rs 소개
- zlib-rs는 데이터 압축을 위한 Rust 기반의 zlib 구현임.
- 최근 버전 0.4.2가 출시되었으며, 성능이 크게 향상되었음.
- 현재 가장 빠른 API 호환 zlib 구현으로, 주요 압축 사례에서도 경쟁 제품을 능가함.
-
압축 해제
- 이전에는 target-cpu=native 플래그를 사용하여 벤치마크를 수행했음.
- 이제 런타임에서 최적의 구현을 선택할 수 있도록 변경되었음.
멀티버전
- 멀티버전은 최적의 함수 버전을 선택하는 방법임.
- 모든 CPU에서 작동하는 기본 구현과 특정 CPU 기능을 사용하는 전문화된 버전이 있음.
- Rust에서는 멀티버전이 기본 지원되지 않으며, 수동으로 구현해야 함.
DFA 최적화
- C 코드의 switch 암시적 폴스루를 사용한 효율적인 코드 생성이 Rust에서는 불가능했음.
-
-Cllvm-args=-enable-dfa-jump-thread 옵션을 사용하여 성능을 회복했음.
벤치마크
- zlib-rs는 현재 가장 빠른 API 호환 zlib 구현임.
- zlib-ng와 비교하여 대부분의 경우 더 빠름.
- 크로미움 프로젝트의 zlib 구현과 비교하여도 주요 청크 크기에서 더 빠름.
zlib-ng와의 비교
- 대부분의 청크 크기에서 zlib-ng보다 빠름.
- 특히 1kb 및 65kb 입력에서 각각 10% 이상, 6% 이상 빠름.
크로미움과의 비교
결론
- zlib-rs는 C 프로젝트와 Rust 프로젝트 모두에서 사용 가능함.
- Rust 프로젝트에서는 flate2 크레이트의 zlib-rs 기능 플래그를 사용하는 것이 권장됨.
- C 프로젝트에서는 zlib-rs를 C 동적 라이브러리로 빌드하여 사용 가능함.
- 추가적인 API 기능 구현 및 성능 향상을 위해 자금 지원을 요청하고 있음.