Sinusukat ng mga numerong ito ang mainit na landas ng makina ng Rust, pag-parse, mga pagsusulat ng estado-cache, buong pipeline, lahat in-process, lahat monotonic na orasan. HINDI kasama ang round-trip ng network, latency ng WS ng lugar, o oras ng fill ng broker. Ang lag ng network bawat lugar ay sinusukat nang hiwalay bilang recv_wall_ns − state_cache_updated_ns (recv minus state-updated). Basahin ang dokumento ng Latency Matrix para sa buong pagpapaliwanag.
Histogram sa loob ng MarketState::update_ticker_owned sample ng 89,033 (makina 0.4.48), nanosegundo, in-process monotonic na orasan
Lahat ng pitong sukatan mula sa Latency Matrix (makina 0.4.48). Mga pagsusulat ng estado sa sukat ng nanosegundo; pag-parse + end-to-end sa sukat ng microsegundo. Lahat in-process. Wala sa mga ito ay network.
| sukatan | n | p50 | p99 | tala |
|---|---|---|---|---|
state_ticker_ns | 89,033 | 310 ns | 1.95 µs | Isang pagsusulat ng estado-cache ng ticker. Ang pinakamaliit na yunit ng gawain ng makina, isang presyo, dami, at timestamp ng simbolo na na-commit sa estado ng palitan. Ito ang headline na 310 ns. |
state_mark_price_ns | 120 | 2.15 µs | 3.73 µs | Pagsusulat ng estado ng mark price. Bahagyang mas mabigat kaysa sa pagsusulat ng ticker, ang mark price ay nagdadala ng karagdagang mga field (funding rate, index price) sa estado. |
state_order_update_ns | 3,458 | 3.69 µs | 13.86 µs | Pagsusulat ng estado ng lifecycle ng order: bago, bahagyang napuno, napuno, nakansela. Ang bawat paglipat ng katayuan ay humahawak ng mapa ng order at ng index ng order bawat simbolo. |
state_ob_snap_ns | 16,406 | 4.44 µs | 17.42 µs | Pagsusulat ng buong snapshot ng orderbook. Pinapalitan ang buong hagdan ng bid/ask para sa isang simbolo sa isang atomic na operasyon. Mas mabigat kaysa sa delta dahil isinusulat muli ang buong lalim. |
state_ob_delta_ns | 102,549 | 5.51 µs | 16.34 µs | Incremental na delta ng orderbook. Inilalapat ang update ng antas ng presyo ng isang gilid sa buhay na hagdan. Mas mura kaysa sa snapshot; karamihan ng mga tick ay mga delta. |
parse_ns | 176,555 | 1.76 µs | 77.95 µs | Buong pag-parse ng frame ng WS: JSON o binary na decode, routing ng uri ng mensahe, paghahanap ng simbolo. Ini-parse ng makina ang bawat frame bago ang pagsusulat ng estado. Ito ang gastos ng pag-parse lamang. |
end_to_end_ns | 176,555 | 14.40 µs | 248.96 µs | Pipeline na end-to-end: pag-parse + pagsusulat ng estado, ang buong in-process na mainit na landas mula sa raw na frame hanggang sa na-update na estado ng palitan. Ang headline na 14.4 µs ay ang numerong ito. |
Ang headline na 310 ns ay sinusukat sa isang naka-pin na Intel Xeon 8369B (antas A). Ang sub-microsegundo na p50 ang nagtatakda ng katangian ng hardware ng antas ng makina. Ang mga naka-throttle na laptop o mga shared na VM ay maaaring lumampas sa 1 µs, na sumasalamin sa hardware, hindi sa makina.
| antas | kagamitan | pagsasaayos | p50 | p95 |
|---|---|---|---|---|
| A | Intel Xeon 8369B (Ice Lake-SP) | Linux 5.15, naka-pin na core, performance governor, Rust 1.78 | 310 ns | 980 ns |
| B | AMD EPYC 7763 / Xeon Gold 6338 | Linux 5.15+, tagapamahala ng pagganap, 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 | Intel i7-12700H / Ryzen 9 7945HX laptop | Linux/Win11, hindi naka-pin, Rust 1.78 | 400–650 ns | 0.8–1.4 µs |
Ang bench ay isang self-contained na crate ng Rust. Walang kinakailangang clone ng plataporma, walang mga panlabas na serbisyo.
# 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
Kabuuang oras ng dingding: wala pang 30 segundo sa hardware ng antas-A. Ang harness ng criterion ay sumusulat ng results/state_ticker_ns.csv + results/summary.json. Buong metodolohiya sa README ng bench.