Skip to content

CI perf (settings): slow Depot 16-core hosts since 10-13 15:20 add ~1.5–2.5 min to the merge-queue critical path (~0.6k Linux job-min/day) #1512

Open

Description

Filed by the CI profiler routine. This needs a human: the cause is in the Depot runner fleet, not in the repo, so the implementer routine shouldn't pick it up as a code change.

Measurement

Window: 2026-10-13 13:11 → 2026-10-14 00:00 UTC. Sample: jobs from all 52 CI merge_group runs, 41 CI pull_request runs and 15 push runs (2,253 jobs, filter=all).

Two speeds of host on the same runner class. A job is counted as being on a "slow" host when the gap from job start to its first step is over 15 s. Healthy hosts start in about 6 s.

period (UTC) depot-ubuntu-24.04-16: share of slow-start jobs depot-ubuntu-24.04-4: share of slow-start jobs
13:00–15:20 21% (n=126, p50 gap 6 s) 23% (n=999, p50 6 s)
15:20–22:00 59% (n=90, p50 23.5 s) 70% (n=637, p50 23 s)
22:00–00:00 57% (n=42, p50 19.5 s) 24% (n=286, p50 6 s): recovered

The 4-core class recovered at about 22:00. The 16-core class, which runs clippy and coverage (both on the merge-queue critical path), did not.

coverage → Run tests with coverage step time (successful jobs):

fast host slow host
13:00–15:20 p50 332 s (n=29) –
15:20–22:00 p50 324 s (n=13) p50 424 s (n=17)
22:00+ 320 s (n=1) p50 406 s (n=7 of 8)

The inputs are the same, so the difference is the host. In the 23:49 batch the CI inputs differ by one PR each, and the host coverage TOTAL lines match within 0.02% (350,679 vs 350,622):

  • job 115602304980 on depot-s9bzhj8q5x: start gap 5 s, test step 320 s, job 5.7 min.
  • job 115602276746 on depot-xb3zx5n43w: start gap 22 s, test step 466 s, job 8.7 min.

clippy (also 16-core, and coverage waits on it) takes 1.3–1.4 min on fast hosts and 2.1–2.2 min on slow ones, for example 38486575290 compared with 38480343655.

Effect on landing PRs:

  • merge_group created → ci-ok: 7.4–9.1 min before 15:20 (n=14 non-evicted runs at 13:11–13:35). Since then it has been p50 9.5, max 12.2 (n=8 since 20:16). coverage was the last job before ci-ok in 7 of 8 of the runs since 22:49.
  • Enqueue → merge: p50 11.3 / p90 12.0 min (n=15). The 10-12 profiles had 8.0–8.8 at the same settings.
  • PR created → ci-ok: p50 9.9 / p90 12.1 (n=19 full runs). It was 7.4–7.6 on 10-12.

Where the time goes

Each slow-host coverage job loses about 15–20 s of start-up and 7–9 s of Checkout/Cache cargo/Install Rust (2–3 s each on fast hosts), plus ~80–145 s in the test step. Each slow-host clippy job loses about 50 s. When both land on slow hosts, which happened in 4 of the 8 runs since 22:49, the critical path grows by ~2–2.5 min.

Root cause

Part of the Depot 16-core pool is running ~25–45% slower on CPU and I/O than the rest. That started at about 15:20 UTC on 10-13. It isn't load from this repo: at 13:00 the repo ran ~700 jobs/hour with a 6 s start gap, and at 21:00 it ran ~33 jobs/hour with a 26 s gap. The 4-core pool recovered at 22:00 and the 16-core pool hasn't.

Proposed fix

  1. Human, S: check the Depot status page and the org's Depot dashboard for depot-ubuntu-24.04-16 host health since 2026-10-13 15:20 UTC. If nothing is posted, open a Depot support ticket with the two job links above, the runner names depot-xb3zx5n43w, depot-c59k7s930p, depot-f5768wcmwc, depot-jctrbg38bj, depot-cg4tbh0c9f, depot-g024vxvvxz and depot-n4hvg6kjz3, and the start-gap numbers.
  2. Only if Depot can't fix it within a day (repo side, S): in .github/workflows/ci.yml, move coverage and clippy from depot-ubuntu-24.04-16 to another class whose start gap is healthy (for example depot-ubuntu-24.04-32, or the 4-core class, which recovered). Measure one batch before committing to it. Don't rename either job: clippy is a required check, and coverage feeds ci-ok.

Expected saving

  • Merge-queue critical path: ~1.5 min p50, 9.5 → ~8. Up to 2.5 min when both jobs land on slow hosts.
  • PR feedback (created → ci-ok): ~1.5 min.
  • Job-minutes: ~2.5 min per coverage job and ~0.8 per clippy job on slow hosts, at ~57% slow placement. That is about 1.9 min per run, which is ~0.1k per day over 52 merge-queue runs and ~0.3k per day over ~150 PR runs. Adding the other 16-core jobs gives ~0.4–0.6k Linux job-min/day.

Coverage and risk

No test coverage changes. Option 1 doesn't touch the repo. Option 2 changes only runs-on labels, and keeps job names and ci-ok/clippy the same. Risk: another class may be slow too, which is why it should be measured first.

Effort

S. Option 1 is a ticket. Option 2 is a two-line runs-on change.

ROI

(0.5k job-min → 0.5, + 1.5 critical-path min + 1.5 PR-latency min) × confidence 0.5 ÷ effort 1 ≈ 1.75

Activity

  1. mikolalysenko commented on Oct 14, 2026

    @mikolalysenko
    CollaboratorAuthor

    Fresh numbers (profiler run 2026-10-14 04:16 UTC): the slowdown looks over since about 01:00 UTC. The sample is small, though.

    Share of jobs whose first step started more than 15 s after the job did (a slow-start host). The sample is 118 CI runs from the last 24h (filter=all):

    period (UTC) 16-core 4-core
    10-13 13:00–15:20 20% (22/111) 23% (204/906)
    15:20–22:00 59% (53/90) 70% (443/637)
    22:00–01:00 57% (24/42) 24% (69/288)
    10-14 01:00–04:16 15% (4/27) 13% (23/181)

    Since 01:00:

    That is 4 merge_group runs and 27 16-core jobs. I'll keep this open until the next 1–2 profiler runs confirm it on a weekday load. If those show the 16-core slow share under ~25%, I'll close this as resolved externally. No runner-class change is needed.


    Generated by Claude Code

  2. mikolalysenko commented on Oct 14, 2026

    @mikolalysenko
    CollaboratorAuthor

    Closing: the Depot slowdown has been over for about 7 hours, and the 4h profile at 08:16 UTC confirms it. No repo change was needed. The hosts recovered on their own.

    Slow-start share is the share of jobs whose first step started more than 15 s after the job did. Sample: 110 CI runs from 10-13 13:11 to 10-14 08:16, 2,366 jobs, filter=all.

    period (UTC) depot-ubuntu-24.04-16 depot-ubuntu-24.04-4
    10-13 13:00 – 10-14 01:00 35% (n=204) 34% (n=1,566)
    10-14 01:00 – 04:16 25% (n=24) 26% (n=153)
    10-14 04:16 – 08:16 3% (1/39) 1% (n=293)

    Effect on landing PRs:

    If the slow hosts come back, the profiler will reopen this or file a new issue with fresh numbers.


    Generated by Claude Code

  3. mikolalysenko commented on Oct 14, 2026

    @mikolalysenko
    CollaboratorAuthor

    Reopening: the slow Depot hosts came back in three spells in the last 24h (profiler run 2026-10-14 16:16 UTC). Last profile's rule was to reopen this if the slow-start share stayed above 20% for 2+ hours. It did, at 12:00–14:00 and again at 21:00–02:00.

    A job counts as slow-start when its first step starts more than 15 s after the job does. Healthy hosts take about 6 s. Sample: 99 runs from 10-13 21:27 to 10-14 16:16, 1,543 jobs, filter=all.

    job created (UTC) depot-ubuntu-24.04-16 depot-ubuntu-24.04-4
    10-13 21:00 – 10-14 01:00 60% (27/45) 30% (95/316)
    10-14 01:00 – 08:00 7% (5/69) 5% (27/501)
    10-14 08:00 – 12:00 15% (6/39); the 08:xx hour was 91% 13% (35/264)
    10-14 12:00 – 16:16 30% (10/33) 50% (116/233)

    By hour across all Linux jobs: 12:xx 36% (33/92), 13:xx 51% (72/142), 15:xx 58% (18/31).

    The same inputs run slower on slow hosts. Here is coverage → Run tests with coverage in successful jobs:

    • Fast hosts (start gap ≤ 12 s): p50 about 335 s, range 303–430 s (n=30). 28 of the 30 took under 370 s.
    • Slow hosts (start gap 19–140 s): 398–471 s (n=13). Examples from today:
    • Fast hosts in the same batches: 115862889221 took 327 s and 115890936333 took 333 s.

    clippy takes p50 1.35–1.40 min on fast hosts and 1.72–2.18 min on slow ones.

    Effect on the merge queue (all 25 merge_group CI runs since 22:49):

    What's still needed is the same as in the body: a human should raise this with Depot. Send the job links above, the hours above, and the fact that both the 4-core and 16-core classes slow down together. Because both classes are affected, moving coverage/clippy to another class (option 2) is less likely to help than it looked on 10-13. Only try it after Depot confirms that a specific pool is healthy.

    ROI is unchanged at ~1.75: about 1.85 critical-path minutes on 40% of merges, plus a similar hit to PR feedback, at confidence 0.5 and effort S.


    Generated by Claude Code

  4. mikolalysenko commented on Oct 15, 2026

    @mikolalysenko
    CollaboratorAuthor

    Fresh numbers (profiler run 2026-10-15 00:16 UTC): slow Depot hosts kept hitting CI through the evening of 10-14. The two merges at 23:48 were the first in 7 hours that ran on fast hosts.

    A job counts as slow-start when its first step started more than 15 s after the job did (median gap on slow hosts is 25 s, p90 43 s). Sample: 93 CI runs from 10-14 04:04 → 10-15 00:10, 1,553 Linux jobs (filter=all).

    period (UTC) slow-start share 4-core 16-core
    10-14 04:00–16:16 20% (160/791) 20% 20%
    10-14 16:16–20:16 61% (150/246) 60% 70%
    10-14 20:16–00:10 37% (192/516) 37% 43%

    By hour: 17h 84%, 19h 57%, 20h 69%, 21h 56%, 22h 15%, 23h 57%.

    Effect on landing PRs (merge-queue REST timelines, enqueue → merge):

    The slowdown is still on Depot's side and needs a human to raise it with them. Next update after 10-16 00:00 unless it clears.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions