피드로 돌아가기
Dev.toBackend
원문 읽기
C++23 기반 FIX 엔진이 QuickFIX 대비 ExecutionReport 파싱 성능 3배 개선 달성
Rewriting a FIX Engine in C++23: What Got Simpler (and What Didn't)
AI 요약
Context
QuickFIX는 C++98 스타일의 힙 할당과 std::map 기반 필드 저장을 사용해왔다. 모든 필드 접근마다 malloc과 memcpy가 발생하며 트리 노드 순회가 필요한 구조였다.
Technical Solution
- QuickFIX의 std::map<int, std::string> → flat array 인덱싱으로 O(1) 필드 접근 구현
- std::pmr::monotonic_buffer_resource로 1,000줄의 수동 풀 할당 로직 대체
- AVX2 SIMD(_mm256_cmpeq_epi8)로 SOH(0x01) delimiter 스캔 병렬화
- consteval로 컴파일 타임 태그 룩업 테이블 생성하여 런타임 분기 300개 제거
Impact
ExecutionReport 파싱 730ns → 246ns (3배 개선), P99 지연시간 780ns → 56ns (14배 개선), 처리량 1.19M msg/s → 4.17M msg/s
Key Takeaway
메모리 할당 제거와 알고리즘 복잡도 최적화가 프로토콜 처리 성능의 핵심이며 C++23의 constexpr 기능과 PMR이 레거시 풀 할당 코드를 효과적으로 대체한다.
실천 포인트
고성능 프로토콜 파서 개발 시 flat array 인덱싱과 zero-copy std::string_view를 적용하면 힙 할산을 최소화하면서 O(1) 접근 보장 가능