← NexusFIX/벤치마크
벤치마크 · v1.8 · 2026년 5월

성능
벤치마크.

마케팅 주장이 아닌 실측 결과. 모든 벤치마크는 Linux, GCC 13.3, 100,000회 반복, CPU 고정 환경에서 실행.

ExecutionReport 파싱
246 ns
QuickFIX 730 ns3.0배 빠름
처리량
417만 msg/초
QuickFIX 119만 msg/초3.5배 높음
P99 지연
258 ns
QuickFIX 784 ns3.0배 낮음
힙 할당 / 메시지
0
QuickFIX 약 12회 (std::string, std::map 노드)아레나 재사용

NexusFIX vs QuickFIX.

핵심 FIX 작업별 정면 비교.

지표
QuickFIX
NexusFIX
개선율
ExecutionReport 파싱
730 ns
246 ns
3.0배 빠름
NewOrderSingle 파싱
661 ns
229 ns
2.9배 빠름
필드 접근 (4개 필드)
31 ns
11 ns
2.9배 빠름
처리량
119만 msg/초
417만 msg/초
3.5배 높음
P99 지연
784 ns
258 ns
3.0배 낮음

최적화 여정.

730ns에서 246ns까지, 4단계 복합 최적화.

200 ns400 ns600 ns730 ns베이스라인베이스라인520 ns−210단계 1380 ns−140단계 2290 ns−90단계 3246 ns−44단계 4총계 · -484NS · 3.0× 더 빠름
1 1단계: 제로 카피 파싱
730ns → 520ns

std::string 복사를 원본 버퍼의 std::span<const char> 뷰로 대체. std::span은 스택에서 16바이트, 힙 없음, 복사 없음, 소멸자 없음.

2 2단계: O(1) 필드 조회
520ns → 380ns

std::map<int, std::string>을 사전 인덱싱된 배열로 대체. 필드 접근이 FIX 태그 번호로 인덱싱된 단일 mov 명령어가 됩니다.

3 3단계: SIMD 구분자 스캔
380ns → 290ns

AVX2 벡터화 SOH 구분자 스캔으로 사이클당 32바이트 처리. 바이트 단위 스캔 대비 약 13배 빠름.

4 4단계: 컴파일 타임 오프셋
290ns → 246ns

consteval 필드 오프셋 테이블과 22개 컴파일 타임 조회 테이블로 enum/타입 변환의 런타임 분기 약 300개 제거.

제로 할당 증명.

핫 패스에서 NewOrderSingle 메시지 처리.

QuickFIX /order-flow 핫 경로
~12 힙 할당
힙 할당
약 12회 (std::string, std::map 노드)
필드 저장
std::map<int, std::string> 복사
파싱 로직
런타임 맵 삽입
메모리 풋프린트
동적, 예측 불가
소멸자 오버헤드
std::string 소멸자 약 12회
HEAP · 메시지당12 할당
0x7f3a..0000분산
NexusFIX /order-flow 핫 경로
0 할당 · 아레나 재사용
힙 할당
0
필드 저장
원본 버퍼의 std::span 뷰
파싱 로직
컴파일 타임 오프셋 테이블
메모리 풋프린트
정적, 사전 할당 PMR 풀
소멸자 오버헤드
0 (소유 메모리 없음)
ARENA · 메시지당0 할당
0x0001..a000연속 · 재사용

기법 비교.

3배 성능을 복합적으로 달성하는 설계 결정.

기법QuickFIXNexusFIX
메모리메시지당 힙 할당제로 카피 std::span 뷰
필드 조회O(log n) std::mapO(1) 직접 배열 인덱싱
파싱바이트 단위 스캔AVX2 SIMD 벡터화
필드 오프셋런타임 계산consteval 컴파일 타임
Enum 변환런타임 switch (~300개 분기)22개 컴파일 타임 조회 테이블
오류 처리예외std::expected (throw 없음)

아키텍처 영향.

11개 업계 선도 라이브러리 분석. 배운 것, 구축한 것, 측정한 것.

hffix
배운 것

O(n) 이터레이터 조회는 밀집 FIX 패킷에 비효율적

구축한 것

consteval 필드 오프셋 + O(1) 직접 인덱싱

14ns 필드 접근
결과
Abseil
배운 것

SIMD 프로빙과 H2 핑거프린트를 사용한 Swiss Tables

구축한 것

세션 저장소에 absl::flat_hash_map 사용

31% 빠른 조회
결과
Quill
배운 것

지연 포매팅을 사용한 락프리 SPSC 큐

구축한 것

로깅 백엔드로 Quill 사용

8ns 중간값 로그 지연
결과
NanoLog
배운 것

7ns 로깅을 위한 바이너리 인코딩 + 백그라운드 스레드

구축한 것

정적 바이너리 직렬화를 사용한 DeferredProcessor<T>

84% 감소 (75→12ns)
결과
liburing
배운 것

DEFER_TASKRUN이 커널 태스크 웨이크업 제거

구축한 것

io_uring + 등록 버퍼 + multishot

7-27% 빠른 I/O
결과
Highway
배운 것

명령어 집합 전반의 이식 가능한 SIMD 추상화

구축한 것

FIX 패턴을 위한 수동 튜닝 인트린직 유지

13배 처리량
결과
Seastar
배운 것

고동시성 I/O를 위한 공유 없는 리액터

구축한 것

코어 고정 + 락프리 파이프라이닝

8% P99 개선
결과
Folly
배운 것

고급 메모리 펜싱과 락프리 프리미티브

구축한 것

네이티브 SPSC 큐 + 비트 마스킹 검증

제로 의존성
결과
Rigtorp
배운 것

캐시 라인 패딩으로 거짓 공유 제거

구축한 것

동일 기법을 사용한 네이티브 SPSCQueue

8,800만 ops/초, 11ns
결과
xsimd
배운 것

수학 연산을 위한 일반 SIMD 래퍼

구축한 것

SOH 스캔을 위한 직접 Intel 인트린직

래퍼 대비 2배 빠름
결과
Boost.PMR
배운 것

단조 버퍼로 메시지당 아레나 할당 가능

구축한 것

std::pmr::monotonic_buffer_resource

힙 할당 제로
결과

NexusFIX를 직접 사용해 보세요.

세 가지 명령으로 직접 빌드하고 벤치마크를 실행하세요.

~/dev. Bench
$ 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