per-hop latency — this session
how to read this
Each fill traverses nine wingfoil stamp points: ws_recv → ws_publish → gw_recv → gw_price → fix_send → fix_recv → gw_publish → ws_sub_recv → ws_send.
The chart plots the per-hop delta on a log Y-axis (nanoseconds). The flamegraph below shows the nested call stack: browser at the bottom (full round-trip), each layer above is a strict sub-interval of the layer below — exactly like a CPU flamegraph, but the samples are wall-clock fills.
Resident is everything inside this server (two processes connected by iceoryx2 shared memory). Wire is the FIX-over-TLS round-trip to LMAX plus the WebSocket legs to your browser — derived as rtt_total − resident, both measured in a single clock domain so no NTP sync is needed.
flamegraph — nested call stack (rolling mean)
grafana — session traces
↗ open in new window
Aggregate p50/p99 across all sessions are in Prometheus at
:9091/metrics.
Per-session traces are pushed to Tempo via OTLP and pre-filtered to this session above.
Not loading? docker compose -f wingfoil/examples/latency_e2e/docker-compose.yml up -d