Gemessene Ergebnisse, keine Marketing-Behauptungen. Alle Benchmarks auf Linux mit GCC 13.3, 100.000 Iterationen, CPU-gebunden.
Direktvergleich der wichtigsten FIX-Operationen.
Von 730ns auf 246ns in vier aufeinander aufbauenden Phasen.
std::string-Kopien durch std::span<const char>-Ansichten in den Originalpuffer ersetzt. Ein std::span ist 16 Bytes auf dem Stack. Kein Heap, keine Kopie, kein Destruktor.
std::map<int, std::string> durch ein vorindiziertes Array ersetzt. Feldzugriff wird zu einem einzigen mov-Befehl, indiziert durch die FIX-Tag-Nummer.
AVX2-vektorisiertes SOH-Trennzeichen-Scanning verarbeitet 32 Bytes pro Zyklus. ~13x schneller als Byte-für-Byte-Scanning.
consteval-Feld-Offset-Tabellen und 22 Compile-Time-Lookup-Tabellen eliminieren ~300 Laufzeit-Branches für Enum-/Typ-Konvertierung.
Verarbeitung einer NewOrderSingle-Nachricht auf dem Hot Path.
Designentscheidungen, die sich zu 3x Performance summieren.
| Technik | QuickFIX | NexusFIX |
|---|---|---|
| Speicher | Heap-Allokation pro Nachricht | Zero-Copy-std::span-Ansichten |
| Feldzugriff | O(log n) std::map | O(1) direktes Array-Indexing |
| Parsing | Byte-für-Byte-Scanning | AVX2 SIMD vektorisiert |
| Feld-Offsets | Laufzeitberechnung | consteval Compile-Time |
| Enum-Konvertierung | Laufzeit-Switch (~300 Branches) | 22 Compile-Time-Lookup-Tabellen |
| Fehlerbehandlung | Ausnahmen | std::expected (kein Throw) |
11 führende Bibliotheken untersucht. Was wir gelernt, gebaut und gemessen haben.
O(n)-Iterator-Lookup ist für dichte FIX-Pakete suboptimal
consteval-Feld-Offsets + O(1)-Direktindizierung
Swiss Tables mit SIMD-Probing und H2-Fingerprints
absl::flat_hash_map für Session-Store
Lock-free SPSC-Queue mit verzögerter Formatierung
Quill als Logging-Backend
Binäre Kodierung + Hintergrund-Thread für 7ns Logging
DeferredProcessor<T> mit statischer Binär-Serialisierung
DEFER_TASKRUN eliminiert Kernel-Task-Aufweckungen
io_uring + registrierte Puffer + Multishot
Portable SIMD-Abstraktion über Befehlssätze hinweg
Handoptimierte Intrinsics für FIX-Muster beibehalten
Share-nothing-Reaktor für hochgradig paralleles I/O
Core-Pinning + Lock-free-Pipelining
Fortgeschrittenes Memory-Fencing und Lock-free-Primitive
Natives SPSC-Queue + Bit-Masking-Validierung
Cache-Line-Padding eliminiert False Sharing
Natives SPSCQueue mit identischen Techniken
Generische SIMD-Wrapper für mathematische Operationen
Direkte Intel-Intrinsics für SOH-Scanning
Monotonischer Puffer ermöglicht Arena-Allokation pro Nachricht
std::pmr::monotonic_buffer_resource
Drei Befehle zum Bauen und Ausführen der Benchmarks.
$ 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