OxCaml로 구현한 초고속 HTTP 서버, 힙 할당 제로!

by DD
5개월 전
조회수 12

OxCaml을 사용하여 제로 힙 할당을 구현한 고성능 HTTP/1.1 파서 httpz가 등장함

Unboxed recordslocal lists를 활용하여 메모리 할당을 최소화하고, 기존 OCaml 기반 파서 대비 압도적인 성능을 보임

커뮤니티에서는 OxCaml의 발전 가능성에 주목하며, OCaml과의 관계 및 타입 시스템에 대한 질문이 이어짐

제로 힙 할당 아키텍처

httpz는 Unboxed records를 사용하여 요청 및 span 타입을 스택에 할당하고, Local lists를 통해 헤더 리스트를 힙이 아닌 스택에 생성한다. 구체적으로, Bigstring I/O를 활용하여 버퍼에서 직접 읽고 쓰며, 32KB의 사전 할당 버퍼를 재사용하여 메모리 할당을 최소화한다. 따라서, GC 오버헤드를 줄여 성능을 극대화한다.

성능 비교 및 최적화

httpz는 기존 Eio 기반 파서인 httpe 대비 압도적인 성능을 보여준다. 구체적으로, 작은 요청(35B)에서 3.14배, 중간 요청(439B)에서 2.13배, 큰 요청(1155B)에서 2.27배의 속도 향상을 달성했다. 반면, Throughput은 초당 1460만 요청으로, httpe의 460만 요청 대비 3배 이상 높다. 따라서, CPU 사용률을 줄이고 응답 시간을 단축한다.

OxCaml 생태계와 미래

커뮤니티에서는 OxCaml의 타입 시스템과 OCaml과의 관계에 대한 질문이 이어졌다. 구체적으로, unboxed record의 list나 array 생성 시의 동작 방식, boxed/unboxed 타입 구분에 대한 논의가 진행되었다. 따라서, OxCaml의 발전 방향과 OCaml 생태계에 미칠 영향에 대한 지속적인 관심이 필요하다.

Zero heap allocation HTTP server using OxCaml