← NexusFIX/基準測試
基準測試 · v1.8 · 2026 年 5 月

效能基準測試.

實測結果,非行銷數據。所有基準在 Linux 上使用 GCC 13.3、100,000 次迭代、CPU 綁定執行。

ExecutionReport 解析
246 ns
QuickFIX 730 ns快 3.0x
吞吐量
4.17M msg/sec
QuickFIX 1.19M msg/sec高 3.5x
P99 延遲
258 ns
QuickFIX 784 ns低 3.0x
堆積分配 / 訊息
0
QuickFIX ~12 個(std::string、std::map 節點)競技場複用

NexusFIX vs QuickFIX.

核心 FIX 操作的正面比較。

指標
QuickFIX
NexusFIX
提升幅度
ExecutionReport 解析
730 ns
246 ns
快 3.0x
NewOrderSingle 解析
661 ns
229 ns
快 2.9x
欄位存取(4 個欄位)
31 ns
11 ns
快 2.9x
吞吐量
1.19M msg/sec
4.17M msg/sec
高 3.5x
P99 延遲
784 ns
258 ns
低 3.0x

最佳化歷程.

我們如何在四個累積階段中從 730ns 降至 246ns。

200 ns400 ns600 ns730 ns基線基線520 ns−210階段 1380 ns−140階段 2290 ns−90階段 3246 ns−44階段 4總計 · -484NS · 3.0× 更快
1 第一階段:零拷貝解析
730ns → 520ns

以 std::span<const char> 視圖取代 std::string 拷貝,指向原始緩衝區。std::span 在堆疊上佔 16 位元組, 無堆積、無拷貝、無解構函式。

2 第二階段:O(1) 欄位查詢
520ns → 380ns

以預索引陣列取代 std::map<int, std::string>。欄位存取變為以 FIX 標籤號索引的單一 mov 指令。

3 第三階段:SIMD 分隔符掃描
380ns → 290ns

AVX2 向量化 SOH 分隔符掃描每週期處理 32 位元組。比逐位元組掃描快約 13 倍。

4 第四階段:編譯期偏移量
290ns → 246ns

consteval 欄位偏移量表和 22 個編譯期查詢表消除了約 300 個執行期的列舉/類型轉換分支。

零分配證明.

在熱路徑上處理 NewOrderSingle 訊息。

QuickFIX /order-flow 熱路徑
~12 次堆分配
堆積分配
~12 個(std::string、std::map 節點)
欄位儲存
std::map<int, std::string> 拷貝
解析邏輯
執行期 map 插入
記憶體佔用
動態、不可預測
解構函式開銷
~12 個 std::string 解構函式
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 編譯期
列舉轉換執行期 switch(~300 分支)22 個編譯期查詢表
錯誤處理例外std::expected(不拋出)

架構影響.

研究了 11 個業界領先的函式庫。我們學到什麼、我們建構什麼、我們測量什麼。

hffix
我們學到的

O(n) 迭代器查詢對密集 FIX 封包並非最優

我們建構的

consteval 欄位偏移量 + O(1) 直接索引

14ns 欄位存取
結果
Abseil
我們學到的

Swiss Tables 結合 SIMD 探測和 H2 指紋

我們建構的

absl::flat_hash_map 用於會話儲存

查詢速度提升 31%
結果
Quill
我們學到的

無鎖 SPSC 佇列和延遲格式化

我們建構的

Quill 作為日誌後端

中位數日誌延遲 8ns
結果
NanoLog
我們學到的

二進制編碼 + 背景執行緒實現 7ns 日誌

我們建構的

DeferredProcessor<T> 和靜態二進制序列化

降低 84%(75→12ns)
結果
liburing
我們學到的

DEFER_TASKRUN 消除核心任務喚醒

我們建構的

io_uring + 已登錄緩衝區 + multishot

I/O 快 7-27%
結果
Highway
我們學到的

跨指令集的可攜式 SIMD 抽象

我們建構的

保留手動調整的 FIX 模式 intrinsics

13x 吞吐量
結果
Seastar
我們學到的

高併發 I/O 的無共享 reactor

我們建構的

Core 綁定 + 無鎖流水線

P99 改善 8%
結果
Folly
我們學到的

進階記憶體柵欄和無鎖原語

我們建構的

原生 SPSC 佇列 + 位元遮罩驗證

零依賴
結果
Rigtorp
我們學到的

快取行填充消除假共享

我們建構的

使用相同技術的原生 SPSCQueue

88M ops/sec,11ns
結果
xsimd
我們學到的

數學運算的通用 SIMD 包裝

我們建構的

直接使用 Intel intrinsics 進行 SOH 掃描

比包裝快 2x
結果
Boost.PMR
我們學到的

單調緩衝區支援每訊息 arena 分配

我們建構的

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