마케팅 주장이 아닌 실측 결과. 모든 벤치마크는 Linux, GCC 13.3, 100,000회 반복, CPU 고정 환경에서 실행.
핵심 FIX 작업별 정면 비교.
730ns에서 246ns까지, 4단계 복합 최적화.
std::string 복사를 원본 버퍼의 std::span<const char> 뷰로 대체. std::span은 스택에서 16바이트, 힙 없음, 복사 없음, 소멸자 없음.
std::map<int, std::string>을 사전 인덱싱된 배열로 대체. 필드 접근이 FIX 태그 번호로 인덱싱된 단일 mov 명령어가 됩니다.
AVX2 벡터화 SOH 구분자 스캔으로 사이클당 32바이트 처리. 바이트 단위 스캔 대비 약 13배 빠름.
consteval 필드 오프셋 테이블과 22개 컴파일 타임 조회 테이블로 enum/타입 변환의 런타임 분기 약 300개 제거.
핫 패스에서 NewOrderSingle 메시지 처리.
3배 성능을 복합적으로 달성하는 설계 결정.
| 기법 | QuickFIX | NexusFIX |
|---|---|---|
| 메모리 | 메시지당 힙 할당 | 제로 카피 std::span 뷰 |
| 필드 조회 | O(log n) std::map | O(1) 직접 배열 인덱싱 |
| 파싱 | 바이트 단위 스캔 | AVX2 SIMD 벡터화 |
| 필드 오프셋 | 런타임 계산 | consteval 컴파일 타임 |
| Enum 변환 | 런타임 switch (~300개 분기) | 22개 컴파일 타임 조회 테이블 |
| 오류 처리 | 예외 | std::expected (throw 없음) |
11개 업계 선도 라이브러리 분석. 배운 것, 구축한 것, 측정한 것.
O(n) 이터레이터 조회는 밀집 FIX 패킷에 비효율적
consteval 필드 오프셋 + O(1) 직접 인덱싱
SIMD 프로빙과 H2 핑거프린트를 사용한 Swiss Tables
세션 저장소에 absl::flat_hash_map 사용
지연 포매팅을 사용한 락프리 SPSC 큐
로깅 백엔드로 Quill 사용
7ns 로깅을 위한 바이너리 인코딩 + 백그라운드 스레드
정적 바이너리 직렬화를 사용한 DeferredProcessor<T>
DEFER_TASKRUN이 커널 태스크 웨이크업 제거
io_uring + 등록 버퍼 + multishot
명령어 집합 전반의 이식 가능한 SIMD 추상화
FIX 패턴을 위한 수동 튜닝 인트린직 유지
고동시성 I/O를 위한 공유 없는 리액터
코어 고정 + 락프리 파이프라이닝
고급 메모리 펜싱과 락프리 프리미티브
네이티브 SPSC 큐 + 비트 마스킹 검증
캐시 라인 패딩으로 거짓 공유 제거
동일 기법을 사용한 네이티브 SPSCQueue
수학 연산을 위한 일반 SIMD 래퍼
SOH 스캔을 위한 직접 Intel 인트린직
단조 버퍼로 메시지당 아레나 할당 가능
std::pmr::monotonic_buffer_resource
$ git clone https://github.com/StratCraftsAI/NexusFix.git $ cd NexusFix $ ./start.sh build # 2m18s · release $ ./start.sh bench running 100,000 iterations · cpu pinned · warm cache ExecutionReport parse 246 ns p99 258 ns NewOrderSingle parse 229 ns p99 241 ns field_access 11 ns throughput 4.17 M msg/s ✓ csv written to ./out/bench-2026-05-17.csv