Ces chiffres mesurent le hot path du moteur Rust - parse, state-cache writes, pipeline complet - tous in-process, tous horloge monotone. Ils n'incluent PAS le round-trip réseau, la latence WS du venue ou le fill time broker. Le lag réseau par venue est mesuré séparément comme recv_wall_ns − state_cache_updated_ns (recv moins state-updated). Lis le doc Latency Matrix pour le breakdown complet.
Histogramme sur MarketState::update_ticker_owned échantillons de 89,033 (moteur 0.4.48) - nanosecondes, horloge monotone in-process
Les sept métriques de la Latency Matrix (moteur 0.4.48). State writes à l'échelle nanoseconde ; parse + end-to-end à l'échelle microseconde. Tout in-process. Rien de ceci n'est du réseau.
| métrique | n | p50 | p99 | note |
|---|---|---|---|---|
state_ticker_ns | 89,033 | 310 ns | 1.95 µs | Write state-cache d'un ticker unique. La plus petite unité de travail moteur - prix, volume et timestamp d'un symbole engagés dans le market state. C'est le chiffre phare à 310 ns. |
state_mark_price_ns | 120 | 2.15 µs | 3.73 µs | Write state mark price. Légèrement plus lourd qu'un ticker write - le mark price embarque des champs supplémentaires (funding rate, index price) dans le state. |
state_order_update_ns | 3,458 | 3.69 µs | 13.86 µs | Write state cycle de vie ordre : new, partiellement rempli, rempli, annulé. Chaque transition de statut touche l'order map et l'index ordre par symbole. |
state_ob_snap_ns | 16,406 | 4.44 µs | 17.42 µs | Write snapshot orderbook complet. Remplace toute la grille bid/ask d'un symbole en une opération atomique. Plus lourd qu'un delta car il réécrit toute la profondeur. |
state_ob_delta_ns | 102,549 | 5.51 µs | 16.34 µs | Delta orderbook incrémental. Applique la mise à jour d'un niveau de prix d'un côté au ladder live. Moins cher qu'un snapshot ; la plupart des ticks sont des deltas. |
parse_ns | 176,555 | 1.76 µs | 77.95 µs | Parse frame WS complète : décodage JSON ou binaire, routage du type de message, lookup symbole. Le moteur parse chaque frame avant le state write. C'est le coût parse seul. |
end_to_end_ns | 176,555 | 14.40 µs | 248.96 µs | Pipeline end-to-end : parse + state write, le hot path in-process complet de la frame brute au market state mis à jour. Le chiffre phare à 14,4 µs est ce nombre. |
Le chiffre phare à 310 ns est mesuré sur un Intel Xeon 8369B épinglé (palier A). Un p50 sub-microseconde est la propriété définissant le matériel moteur. Les laptops bridés ou les VMs partagées peuvent dépasser 1 µs - c'est le matériel qui l'explique, pas le moteur.
| palier | matériel | config | p50 | p95 |
|---|---|---|---|---|
| A | Intel Xeon 8369B (Ice Lake-SP) | Linux 5.15, core épinglé, 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, non épinglé, Rust 1.78 | 400–650 ns | 0.8–1.4 µs |
Le bench est une crate Rust autonome. Pas besoin de cloner la plateforme, pas de services externes.
# 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
Wall time total : moins de 30 secondes sur matériel palier A. Le harnais criterion écrit results/state_ticker_ns.csv + results/summary.json. Méthodologie complète dans le README du bench.