← NexusFIX/基准测试
基准测试 · v1.8 · 2026 年 5 月

性能基准测试.

实测结果,非营销宣传。所有基准测试在 Linux 上运行,GCC 13.3,100,000 次迭代,CPU 固定。

ExecutionReport 解析
246 ns
QuickFIX 730 ns快 3.0 倍
吞吐量
4.17M 消息/秒
QuickFIX 1.19M 消息/秒高 3.5 倍
P99 延迟
258 ns
QuickFIX 784 ns低 3.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 倍
吞吐量
1.19M 消息/秒
4.17M 消息/秒
高 3.5 倍
P99 延迟
784 ns
258 ns
低 3.0 倍

优化历程.

我们如何通过四个复合阶段从 730ns 优化到 246ns。

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::span<const char> 视图替代 std::string 拷贝,直接引用原始缓冲区。std::span 在栈上仅 16 字节。无堆分配、无拷贝、无析构。

2 阶段 2:O(1) 字段查找
520ns → 380ns

用预索引数组替代 std::map<int, std::string>。字段访问变为一条 mov 指令,按 FIX 标签号索引。

3 阶段 3:SIMD 分隔符扫描
380ns → 290ns

AVX2 向量化 SOH 分隔符扫描,每周期处理 32 字节。比逐字节扫描快约 13 倍。

4 阶段 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(无 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 + 注册缓冲区 + 多次接收

I/O 快 7-27%
结果
Highway
学到了什么

跨指令集的可移植 SIMD 抽象

构建了什么

保留手动调优的 FIX 模式内联函数

吞吐量提升 13 倍
结果
Seastar
学到了什么

无共享反应器用于高并发 I/O

构建了什么

CPU 核心绑定 + 无锁流水线

P99 改善 8%
结果
Folly
学到了什么

高级内存栅栏和无锁原语

构建了什么

原生 SPSC 队列 + 位掩码验证

零外部依赖
结果
Rigtorp
学到了什么

缓存行填充消除伪共享

构建了什么

使用相同技术的原生 SPSCQueue

88M ops/sec,11ns
结果
xsimd
学到了什么

通用 SIMD 包装器用于数学运算

构建了什么

直接 Intel 内联函数用于 SOH 扫描

比包装器快 2 倍
结果
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