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.
Histograma de MarketState::update_ticker_owned muestras de 89,033 (motor 0.4.48) - nanosegundos, reloj monotónico in-process
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étrica | n | p50 | p99 | nota |
|---|---|---|---|---|
state_ticker_ns | 89,033 | 310 ns | 1.95 µs | Escritura 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_ns | 120 | 2.15 µs | 3.73 µs | Escritura 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_ns | 3,458 | 3.69 µs | 13.86 µs | Escritura 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_ns | 16,406 | 4.44 µs | 17.42 µs | Escritura 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_ns | 102,549 | 5.51 µs | 16.34 µs | Delta 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_ns | 176,555 | 1.76 µs | 77.95 µs | Parse 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_ns | 176,555 | 14.40 µs | 248.96 µs | Pipeline 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. |
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.
| tier | hardware | config | p50 | p95 |
|---|---|---|---|---|
| A | Intel Xeon 8369B (Ice Lake-SP) | Linux 5.15, núcleo fijado, performance governor, Rust 1.78 | 310 ns | 980 ns |
| B | AMD EPYC 7763 / Xeon Gold 6338 | Linux 5.15+, performance governor, Rust 1.78 | 350–500 ns | 0.7–1.2 µs |
| C | Apple M2 / M3 MacBook | macOS 14+, arm64, Rust 1.78 | 250–450 ns | 0.6–1.1 µs |
| D | Laptop Intel i7-12700H / Ryzen 9 7945HX | Linux/Win11, sin fijar, Rust 1.78 | 400–650 ns | 0.8–1.4 µs |
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.