Zlib-rs, C보다 빠른 성능

16 hours ago 2

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 구현은 작은 청크 크기에서 더 빠르지만, 큰 청크 크기에서는 zlib-ng와 유사함.

  • 압축

    • 압축에서도 성능 향상이 있었으나, 혼합된 결과를 보임.
    • x86_64 리눅스에서 일부 압축 수준에서 더 빠름.

결론

  • zlib-rs는 C 프로젝트와 Rust 프로젝트 모두에서 사용 가능함.
  • Rust 프로젝트에서는 flate2 크레이트의 zlib-rs 기능 플래그를 사용하는 것이 권장됨.
  • C 프로젝트에서는 zlib-rs를 C 동적 라이브러리로 빌드하여 사용 가능함.
  • 추가적인 API 기능 구현 및 성능 향상을 위해 자금 지원을 요청하고 있음.

Read Entire Article