Repository navigation
fleet: GPU wall wake latency, a measured breakdown per phase and the cuts #1257
Description
The staging wall's wake takes about 2 min 30 s from the coordinator's power change to the GPU half's last address, and 43 to 52 s for each EC2 tile. This issue tracks measuring each phase and cutting the ones that are ours.
The wake of 2026-10-25 11:11:33 UTC (coordinator log, ASG activity, instance consoles)
GPU host (g4dn.metal, spot group fcvm-fleet-hosts):
| phase | from | to | took |
|---|---|---|---|
| Auto Scaling reacts to SetDesiredCapacity 0 to 1 | 11:11:33 desired set | 11:11:44 "instance was started in response to a difference" | 11 s |
| launch request to EC2 LaunchTime / activity | 11:11:44 | 11:11:46 LaunchTime, activity 11:11:47 to 11:11:52 | 2 to 8 s |
| metal firmware to kernel start | 11:11:46 | about 11:12:25 (console: cloud-init init-local at 11:12:50, uptime 25.6 s) | about 39 s |
kernel to fcvm-fleet-store.service start |
11:12:25 | 11:12:57 (uptime 32.5 s) | 32 s |
store restore (store.sh, 3.2 GB zstd tar from S3 in us-east-2 onto NVMe btrfs) |
11:12:57 | 11:13:50 (cloud-final starts the agent at uptime 86 s) | 53 s |
| agent start to every slot's address in DNS | 11:13:50 | 11:13:54 to 11:13:56 | 4 to 6 s |
| DNS confirmation | 11:13:56 | 11:14:02 to 11:14:03 names published | 7 s (being removed separately; src/fleet/coord/dns.rs is out of scope here) |
EC2 tile (g4dn.xlarge, one-time spot, template fcvm-fleet-tile-x86_64): launched 11:11:34 to 11:11:35, addresses reported 11:12:18 to 11:12:27. One tile's console: kernel start about 8 s after launch, the nvidia module loads at uptime 17.9 s (a 9.7 s gap after udev starts), cloud-init init-local at 25.6 s, the renderer and TLS units start at 33 s. A single relaunch at 11:14:40 reported at 11:15:19 (39 s).
Spot fallback: the coordinator moves a short spot group's capacity to the on-demand group only after --spot-wait 120 seconds, although Auto Scaling records the failed spot launch (UnfulfillableCapacity, MaxSpotInstanceCountExceeded) within about 10 s of the desired-capacity change.
Two gaps in what the coordinator records: the wake record's host phases stop at booted because the power state turns awake once the EC2 half's 8 GPUs are up (about 53 s), before the host's agent says hello, so store_ready_at, agent_at and rendering_at stay empty; and none of the phases reach the coordinator's log.
Plan (each a separate PR)
- Record each wake's breakdown in the coordinator log: host phases (instance pending, in service, store ready with the store's own fetch and extract times, agent hello, each slot running with its timings) and each tile's (launch accepted, instance running seen,
/healthfirst answer, ready), and keep recording host phases after the power state turns awake. - The 14 s before Auto Scaling launches: it is Auto Scaling's own reconciliation after SetDesiredCapacity; decide whether to keep it (see 3).
- Warm pools: Auto Scaling warm pools do not support spot instances, and the host's store is on instance-store NVMe, which a stop wipes. Options and their cost, with one measured trial on staging.
- Fall back to the on-demand group as soon as Auto Scaling reports a failed spot launch for the wake, and log which path each wake took.
- Other waits in the wake path: tile readiness polls every 3 s; page reconnect backoff in
fleet/web; agent dial backoff.
Activity
fleet coord: cancel only persistent spot requests; age pooled tiles o…
fleet coord: a resume starts a pooled tile only if it is stopped and …
ejc3 commentedon Oct 25, 2026
Measurements and PRs so far. Instance types and timings only; every number is from the staging wake of 2026-10-25 11:11:33 UTC (coordinator log, ASG activities, consoles) or from instances launched for this (a g4dn.metal gpubox and g4dn.xlarge tiles from the current AMIs, us-east-1).
GPU host, before and after
fcvm-fleet-storestartEC2 tile, before and after
PRs
wake: ...lines,tile ready), host phases recorded after the fleet is awake, the store-ready file written./healthasked every 250 ms (stacked on fleet: log each wake's breakdown; record a host's wake after the fleet is awake #1261).Not done, and why
fcvm-fleet: fill the GPU host's root volume at 300 MiB/s at launch
fcvm-fleet: fill the GPU host's root volume at 300 MiB/s at launch (#679
fcvm-fleet: the coordinator launches the GPU hosts; remove the host a…