// 04 · Latencia del motor

¿Qué tan rápido es el motor Rust?

Mediciones con reloj monotónico in-process. Sin red. Sin HTTP. Ciclos puros del motor. Medido el 2026-04-24, motor 0.4.48, {{n}} muestras.

Solo el motor - no el wall time end-to-end

Estos números miden el ruta crítica del motor Rust: parse, escrituras al state-cache, pipeline completo, todo in-process, todo con reloj monotónico. NO incluyen round-trip de red, latencia WS del mercado ni tiempo de fill del broker. El lag de red por mercado se mide por separado como recv_wall_ns − state_cache_updated_ns (recv menos state-updated). Lee el doc de la Matriz de Latencia para el desglose completo.

p50
310 ns
p95
980 ns
p99
1,950 ns

Histograma de MarketState::update_ticker_owned muestras de 89,033 (motor 0.4.48) - nanosegundos, reloj monotónico in-process

Pipeline completo del motor Rust

Las siete métricas de la Matriz de Latencia (motor 0.4.48). Escrituras de estado a escala de nanosegundos; parse + end-to-end a escala de microsegundos. Todo in-process. Nada de esto es red.

métricanp50p99nota
state_ticker_ns89,033310 ns1.95 µsEscritura al state-cache de un solo ticker. La unidad mínima de trabajo del motor: precio, volumen y timestamp de un símbolo confirmados en el estado de mercado. Este es el número titular de 310 ns.
state_mark_price_ns1202.15 µs3.73 µsEscritura de estado del mark price. Ligeramente más pesada que una escritura de ticker: el mark price lleva campos adicionales (funding rate, index price) al estado.
state_order_update_ns3,4583.69 µs13.86 µsEscritura de estado del ciclo de vida de una orden: nueva, parcialmente ejecutada, ejecutada, cancelada. Cada transición de estado toca el mapa de órdenes y el índice de órdenes por símbolo.
state_ob_snap_ns16,4064.44 µs17.42 µsEscritura de snapshot completo del libro de órdenes. Reemplaza toda la escalera bid/ask de un símbolo en una operación atómica. Más pesada que un delta porque reescribe la profundidad completa.
state_ob_delta_ns102,5495.51 µs16.34 µsDelta incremental del libro de órdenes. Aplica la actualización de un nivel de precio en un lado a la escalera en vivo. Más barato que un snapshot; la mayoría de los ticks son deltas.
parse_ns176,5551.76 µs77.95 µsParse completo de frame WS: decodificación JSON o binaria, ruteo por tipo de mensaje, lookup de símbolo. El motor parsea cada frame antes de la escritura de estado. Este es el costo solo de parse.
end_to_end_ns176,55514.40 µs248.96 µsPipeline end-to-end: parse + escritura de estado, el ruta crítica in-process completo desde el frame crudo hasta el estado de mercado actualizado. El titular de 14.4 µs es este número.

Expectativas por tier de hardware

El titular de 310 ns se mide en un Intel Xeon 8369B fijado (tier A). Sub-microsegundo p50 es la propiedad definitoria del hardware de nivel motor. Laptops throttleadas o VMs compartidas pueden superar 1 µs: eso refleja el hardware, no el motor.

tierhardwareconfigp50p95
AIntel Xeon 8369B (Ice Lake-SP)Linux 5.15, núcleo fijado, performance governor, Rust 1.78310 ns980 ns
BAMD EPYC 7763 / Xeon Gold 6338Linux 5.15+, performance governor, Rust 1.78350–500 ns0.7–1.2 µs
CApple M2 / M3 MacBookmacOS 14+, arm64, Rust 1.78250–450 ns0.6–1.1 µs
DLaptop Intel i7-12700H / Ryzen 9 7945HXLinux/Win11, sin fijar, Rust 1.78400–650 ns0.8–1.4 µs

Reproduce esto en tres comandos

El bench es un crate Rust autocontenido. No se necesita clonar la plataforma ni servicios externos.

# 1. Clone the public OSS repo
git clone https://github.com/melaya-labs/melaya.git
cd melaya/benchmarks/engine

# 2. Run the criterion bench (~100k iterations, ~30 seconds)
cargo bench --bench state_ticker

# 3. Read the per-iteration CSV + summary
cat results/state_ticker_ns.csv | head
cat results/summary.json

Tiempo total de ejecución: menos de 30 segundos en hardware tier-A. El harness criterion escribe results/state_ticker_ns.csv + results/summary.json. Metodología completa en el README del bench.

Únete a la comunidad
// Cookies
Melaya usa un pequeño set de cookies first-party estrictamente necesarias para autenticarte, mantener tu sesión y proteger la plataforma de abusos. No usamos cookies de publicidad, trackers cross-site ni analytics de terceros por defecto. La lista completa de cookies está en nuestra Política de Privacidad.