// 04 · Latence moteur

À quelle vitesse tourne le moteur Rust ?

Mesures in-process horloge monotone. Pas de réseau. Pas de HTTP. Cycles moteur purs. Mesuré le 2026-04-24, moteur 0.4.48, {{n}} échantillons.

Moteur uniquement - pas de wall time end-to-end

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.

p50
310 ns
p95
980 ns
p99
1,950 ns

Histogramme sur MarketState::update_ticker_owned échantillons de 89,033 (moteur 0.4.48) - nanosecondes, horloge monotone in-process

Pipeline complet moteur Rust

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étriquenp50p99note
state_ticker_ns89,033310 ns1.95 µsWrite 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_ns1202.15 µs3.73 µsWrite 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_ns3,4583.69 µs13.86 µsWrite 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_ns16,4064.44 µs17.42 µsWrite 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_ns102,5495.51 µs16.34 µsDelta 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_ns176,5551.76 µs77.95 µsParse 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_ns176,55514.40 µs248.96 µsPipeline 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.

Attentes par palier matériel

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.

paliermatérielconfigp50p95
AIntel Xeon 8369B (Ice Lake-SP)Linux 5.15, core épinglé, 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, non épinglé, Rust 1.78400–650 ns0.8–1.4 µs

Reproduis ça en trois commandes

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.

Rejoindre la communauté
// Cookies
Melaya utilise un petit jeu de cookies first-party strictement nécessaires pour t'authentifier, maintenir ta session et protéger la plateforme des abus. Pas de cookies publicitaires, ni de trackers cross-site, ni d’analytics niveaus par défaut. La liste complète des cookies est dans notre Politique de confidentialité.