Эти цифры измеряют горячий путь Rust-движка: разбор, запись в кэш состояния, полный конвейер, всё внутри процесса, все монотонные часы. Они НЕ включают сетевой круговой обход, задержку WS площадки или время исполнения ордера брокером. Сетевые задержки по площадкам измеряются отдельно как recv_wall_ns − state_cache_updated_ns (получено минус обновлено состояние). Читай документ «Матрица задержек» для полного описания.
Гистограмма по MarketState::update_ticker_owned выборкам 89,033 (движок 0.4.48), наносекунды, внутрипроцессные монотонные часы
Все семь метрик из матрицы задержек (движок 0.4.48). Запись состояния на наносекундной шкале; разбор и сквозная задержка на микросекундной шкале. Всё внутри процесса. Ничего сетевого.
| метрика | n | p50 | p99 | примечание |
|---|---|---|---|---|
state_ticker_ns | 89,033 | 310 ns | 1.95 µs | Единичная запись тикера в кэш состояния. Наименьшая единица работы движка: цена, объём и метка времени одного символа записываются в рыночное состояние. Это заявленный показатель 310 нс. |
state_mark_price_ns | 120 | 2.15 µs | 3.73 µs | Запись марковой цены в состояние. Чуть тяжелее записи тикера: марковая цена несёт дополнительные поля (ставка финансирования, индексная цена) в состояние. |
state_order_update_ns | 3,458 | 3.69 µs | 13.86 µs | Запись жизненного цикла ордера в состояние: новый, частично исполненный, исполненный, отменённый. Каждый переход статуса затрагивает карту ордеров и индекс ордеров по символу. |
state_ob_snap_ns | 16,406 | 4.44 µs | 17.42 µs | Запись полного снимка книги ордеров. Заменяет всю лестницу заявок на покупку и продажу для символа в одной атомарной операции. Тяжелее дельты, так как перезаписывает полную глубину. |
state_ob_delta_ns | 102,549 | 5.51 µs | 16.34 µs | Инкрементная дельта книги ордеров. Применяет обновление ценового уровня одной стороны к живой лестнице. Дешевле снимка; большинство тиков, дельты. |
parse_ns | 176,555 | 1.76 µs | 77.95 µs | Полный разбор WS-фрейма: декодирование JSON или бинарных данных, маршрутизация типа сообщения, поиск символа. Движок разбирает каждый фрейм перед записью состояния. Это стоимость только разбора. |
end_to_end_ns | 176,555 | 14.40 µs | 248.96 µs | Сквозной конвейер: разбор и запись состояния, полный внутрипроцессный горячий путь от сырого фрейма до обновлённого рыночного состояния. Заявленный показатель 14.4 мкс, это данное число. |
Заявленный показатель 310 нс измерен на зафиксированном Intel Xeon 8369B (тариф A). Субмикросекундный p50, определяющее свойство аппаратного обеспечения уровня движка. На ограниченных по мощности ноутбуках или виртуальных машинах с разделяемыми ресурсами p50 может превысить 1 мкс, это отражает аппаратное обеспечение, а не движок.
| тариф | аппаратное обеспечение | конфигурация | p50 | p95 |
|---|---|---|---|---|
| A | Intel Xeon 8369B (Ice Lake-SP) | Linux 5.15, зафиксированное ядро, режим производительности, Rust 1.78 | 310 ns | 980 ns |
| B | AMD EPYC 7763 / Xeon Gold 6338 | Linux 5.15+, режим производительности, 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 | Linux/Win11, без фиксации ядра, Rust 1.78 | 400–650 ns | 0.8–1.4 µs |
Бенчмарк, это самодостаточный Rust-крейт. Клон платформы не требуется, внешние сервисы не нужны.
# 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
Общее время: менее 30 секунд на аппаратном обеспечении тарифа A. Наборщик criterion записывает results/state_ticker_ns.csv и results/summary.json. Полная методология в README бенчмарка.