# Zlib-rs는 C보다 빠름

> Clean Markdown view of GeekNews topic #19807. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19807](https://news.hada.io/topic?id=19807)
- GeekNews Markdown: [https://news.hada.io/topic/19807.md](https://news.hada.io/topic/19807.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-17T16:33:03+09:00
- Updated: 2025-03-17T16:33:03+09:00
- Original source: [trifectatech.org](https://trifectatech.org/blog/zlib-rs-is-faster-than-c/)
- Points: 4
- Comments: 1

## Topic Body

- zlib-rs는 데이터 압축을 위한 Rust 기반의 zlib 구현체로 최근 0.4.2가 출시되며 크게 성능 향상   
- 현재 **가장 빠른 API 호환 zlib 구현체**이며, 특히 **압축 해제** 성능에서 경쟁 제품보다 뛰어남  
- 주요 성능 개선 사항: 런타임에서 최적의 SIMD 구현을 자동 선택, DFA 최적화 등 적용  
  
### 멀티버전 처리 (Multiversioning)  
- 런타임에서 CPU에 따라 가장 빠른 함수 버전을 자동 선택  
- Rust에서는 기본적으로 멀티버전 지원이 없어서 수동으로 구현해야 함  
- 코드의 런타임 오버헤드를 최소화하면서 최적 성능 제공  
  
### DFA 최적화 (Deterministic Finite Automata)  
- C 언어는 `switch` 구문에서 암묵적 폴스루(fallthrough)를 사용해 성능 향상  
- Rust에는 이와 유사한 메커니즘이 없어 성능 저하 발생  
- LLVM의 `-Cllvm-args=-enable-dfa-jump-thread` 옵션 적용 → 성능 회복  
- LLVM 기본 설정에는 포함되지 않았지만 향후 Rustc에서 기본 활성화 예정  
  
### 벤치마크 성능 비교  
  
#### 1. zlib-ng 대비 성능 비교  
- zlib-rs는 대부분의 입력 크기에서 **zlib-ng**보다 빠른 성능을 보임  
- 특히 **1KB 입력에서는 약 10% 빠르고**, **65KB 입력에서는 약 6% 빠름**  
- 가장 작은 입력 크기에서는 약간 뒤처지지만, 일반적으로는 성능 우위  
  
예를 들어:  
- 입력 크기가 **4바이트일 때**는 zlib-ng가 약간 빠르지만, 실사용에서는 영향이 적음  
- 입력 크기가 **1KB일 때** zlib-rs가 **약 10% 더 빠름**  
- 입력 크기가 **65KB일 때** zlib-rs가 **약 6% 더 빠름**  
  
**→ zlib-ng 대비 대형 청크에서 확실한 성능 우위**  
  
#### 2. zlib-chromium 대비 성능 비교  
- 소형 청크에서는 **zlib-chromium**이 빠름  
- 하지만 **대형 청크에서는 zlib-rs가 우위**  
- 일반적인 크기의 입력에서 zlib-rs가 더 좋은 성능 제공  
  
예를 들어:  
- 입력 크기가 **4바이트일 때** zlib-chromium이 약 12% 더 빠름  
- 입력 크기가 **16바이트일 때** zlib-chromium이 약 6% 더 빠름  
- 입력 크기가 **1KB 이상일 때** zlib-rs가 성능 우위  
  
**→ 일반적인 크기에서 zlib-rs 성능 우위**  
  
### 압축 성능 비교  
  
- 압축 성능에서는 개선 중이나 혼합된 결과  
- **기본 압축 수준(6)에서 6% 향상**, **최고 압축 수준(9)에서 13% 성능 향상**  
- 다른 압축 수준에서는 아직 zlib-ng가 빠름  
  
예를 들어:  
- **압축 수준 6**에서 zlib-rs는 zlib-ng보다 약 6% 빠름  
- **압축 수준 9**에서 zlib-rs는 zlib-ng보다 약 13% 빠름  
- 하지만 **압축 수준 1~4**에서는 zlib-ng가 우위  
  
### 결론  
- zlib-rs는 **압축 해제 성능**에서 zlib-ng, zlib-chromium 대비 성능 우위  
- 압축 성능은 개선 중이며, 주요 압축 수준에서 유의미한 성능 향상 보임  
- **Rust 및 C 프로젝트 모두에 사용 가능**  
  - Rust → `flate2` 크레이트에서 `zlib-rs` 플래그 사용  
  - C → 동적 라이브러리로 컴파일 후 사용 가능

## Comments



### Comment 36008

- Author: neo
- Created: 2025-03-17T16:33:04+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43381512) 
- Rust를 이미 알고 있다는 것을 알게 됨
  - Rust의 목적이 안전성이라고 생각했지만, 이 라이브러리에는 unsafe 키워드가 많이 사용됨
  - C와 Rust의 차이가 의미가 없어지는 시점이 언제인지 궁금함
  - 인라인 어셈블리를 사용하면 두 언어 모두 같은 기계 코드를 생성할 수 있음
  - Rust 컴파일러가 C 컴파일러보다 최적화가 더 잘 되는지 궁금함

- "C보다 빠르다"는 다른 설계, 구현, 알고리즘 등으로 귀결됨
  - 이미 존재하는 구현보다 빠를 수는 있지만, "C보다 빠르다"는 주장은 이상함

- zippy in Nim이 zlib보다 1.5배에서 2배 빠르다고 주장함
  - C에서 표준 설치보다 빠른 zlib도 존재함
  - zlib은 요즘 구식이지만 여전히 인기가 있음
  - 새로운 병렬 친화적 포맷의 기반으로 사용됨

- Rust의 성능이 Rust 자체와 관련이 있는지, 아니면 다른 C 언어 버전보다 더 최적화된 것인지 궁금함
  - C++가 C보다 consistently 더 나은 성능을 발휘하는 정렬의 경우가 있음
  - Rust와 C 사이에도 비슷한 것이 있는지 궁금함

- Chromium은 표준에 있는 알고리즘 때문에 zlib을 사용함
  - 더 나은 알고리즘을 선택하면 더 나은 성능을 낼 수 있음
  - Zstandard는 더 빠르고 압축도 더 잘됨
  - LZ4는 훨씬 빠르지만 크기는 작지 않음

- Zstandard와 blake3 다이제스트가 허용됨

- Rust는 C만큼 빠르다고 말하는 것이 더 정확함
  - 여전히 큰 성과임

- 어떤 라이브러리가 더 빠르게 컴파일되는지
  - 어떤 라이브러리가 더 적은 종속성을 가지는지
  - 각 라이브러리의 크기가 같은지, 어떤 것이 더 작은지

- Rust 사용자들은 Rust와 C를 비교하는 것을 좋아하지만, C 사용자들은 C와 Rust를 비교하는 경우가 드뭄

- 컴파일된 시스템 언어를 다룰 때 언어는 속도에 거의 영향을 미치지 않음
  - 최적화된 버전은 할당을 제어하고, 좋은 메모리 접근 패턴을 사용하며, SIMD와 멀티스레딩을 사용하여 쉽게 100배 이상 빠를 수 있음
  - 더 나은 메모리 접근만으로도 프로그램 속도를 20배 이상 높일 수 있음

- 구현이 C에서보다 빠르다는 의미임
  - "C보다 빠르다"는 것은 없음
