Skip to content

55% of job lifetime is queue, and the wait is concentrated on the Docker-capable class #174

Description

@rldyourmnd

Reporting as a tenant (NDDev-it-com/almaty-libraries). Not an outage — the fleet placed every job and nothing timed out. It is a shape worth knowing, because the same ratio was measured a fortnight ago on entirely different hardware, which suggests it is a property of how work is distributed rather than of capacity.

Measurement

One full quality-gates wave, run 32813110833, 2026-08-25T05:30Z. Queue is started_at - created_at, work is completed_at - started_at, summed across all jobs:

jobs 28
queued 87 min — median 4.0 min, max 11.3 min
working 71 min — median 2.2 min, max 7.0 min
queue share of job lifetime 55%

Sampling "time since the last placement" would have given a different and wrong answer; this counts every job's own wait.

Where the wait actually is

The four longest queues in the wave are the same four jobs, in order:

11.3 min  Backend pytest shard 4/4
 9.8 min  Backend pytest shard 3/4
 6.4 min  Backend pytest shard 1/4
 4.8 min  Admin staging symbolication build

Those pytest shards are the ones that declare services: sidecars — they need the Docker-capable class. The other 24 jobs in the wave placed in about a minute. So the wave is not waiting on the fleet in general; it is waiting on one class, and it waits there four times per wave because the suite is sharded four ways.

The longest work is Infrastructure contracts shard 1/6 at 7.0 min, which matches what the same shard takes on a developer workstation — so execution time looks healthy and is not where the loss is.

Prior measurement, for comparison

On 2026-08-15, across 149 application jobs, we measured median queue 23 s but p90 1176 s and max 1679 s — 12.3 hours waiting against 8.9 hours working, 58% queue. That was the retired repository runner host. Different hardware, same ratio.

What we are doing on our side

Reducing how many of our jobs need Docker at all: of seventeen quality-gates jobs only three genuinely require it. That is ours to fix and we are not asking for capacity.

What might be useful fleet-side

  1. Whether the Docker-capable class's in-flight cap is the binding constraint here, or whether these jobs are queuing behind non-Docker work that could have been placed elsewhere.
  2. Whether a wave submitting four sidecar jobs at once is scheduled as four independent admissions or serialized — Serialize saturated capacity probes across scale sets sharing one fleet budget #107 touched serialization of saturated capacity probes across scale sets sharing one budget, and this may be the same budget seen from the tenant side.

Numbers above are reproducible from the run IDs with the tenant token; happy to re-measure on a wave of your choosing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions