Resultados medidos, no afirmaciones de marketing. Todos los benchmarks ejecutados en Linux con GCC 13.3, 100 000 iteraciones, CPU anclada.
Comparación directa en las operaciones FIX fundamentales.
Cómo pasamos de 730ns a 246ns en cuatro fases acumulativas.
Sustituir copias de std::string por vistas std::span<const char> sobre el buffer original. Un std::span ocupa 16 bytes en la pila. Sin heap, sin copia, sin destructor.
Sustituir std::map<int, std::string> por un array pre-indexado. El acceso a campos se convierte en una sola instrucción mov indexada por número de tag FIX.
Exploración vectorizada AVX2 de delimitadores SOH que procesa 32 bytes por ciclo. ~13x más rápido que el escaneo byte a byte.
Tablas de offsets de campos consteval y 22 tablas de búsqueda en tiempo de compilación eliminan ~300 ramas en tiempo de ejecución para conversión de enums/tipos.
Procesando un mensaje NewOrderSingle en la ruta crítica.
Decisiones de diseño que se acumulan para dar 3x de rendimiento.
| Técnica | QuickFIX | NexusFIX |
|---|---|---|
| Memoria | Asignación en heap por mensaje | Vistas std::span de copia cero |
| Búsqueda de campo | O(log n) std::map | O(1) indexación directa de array |
| Parsing | Escaneo byte a byte | Vectorizado AVX2 SIMD |
| Offsets de campo | Cálculo en tiempo de ejecución | consteval en tiempo de compilación |
| Conversión de enums | switch en tiempo de ejecución (~300 ramas) | 22 tablas de búsqueda en tiempo de compilación |
| Manejo de errores | Excepciones | std::expected (sin lanzamiento) |
11 librerías líderes del sector estudiadas. Lo que aprendimos, lo que construimos, lo que medimos.
La búsqueda O(n) con iterador es subóptima para paquetes FIX densos
Offsets de campo consteval + indexación directa O(1)
Swiss Tables con sondeo SIMD y huellas H2
absl::flat_hash_map para el almacén de sesiones
Cola SPSC sin bloqueo con formateo diferido
Quill como backend de logging
Codificación binaria + hilo en segundo plano para logging de 7ns
DeferredProcessor<T> con serialización binaria estática
DEFER_TASKRUN elimina las activaciones de tareas del kernel
io_uring + buffers registrados + multishot
Abstracción SIMD portable entre conjuntos de instrucciones
Se mantuvieron intrínsecos ajustados a mano para patrones FIX
Reactor share-nothing para I/O de alta concurrencia
Anclaje de núcleo + pipelining sin bloqueo
Vallas de memoria avanzadas y primitivas sin bloqueo
Cola SPSC nativa + validación con bit-masking
El relleno de línea de caché elimina el false sharing
SPSCQueue nativa con técnicas idénticas
Wrappers SIMD genéricos para operaciones matemáticas
Intrínsecos Intel directos para escaneo SOH
El buffer monotónico habilita la asignación en arena por mensaje
std::pmr::monotonic_buffer_resource
Tres comandos para compilar y ejecutar los benchmarks usted mismo.
$ 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