The node reached its disk floor under a people's wave: the freer ran out of things it may free, 21:33-22:27Z 11-13 #64
Open
opened 2026-11-13 22:28:18 +00:00 by xemmerling
·
0 comments
No Branch/Tag specified
main
dev/schema-step-order
t-join-release
t-work-booking
t-ahead-deadlock-wip
t-hotfix-9ae
t-width-work
t-id-token-renew
t-claim-unkept
t-resume-live
t-run-record
t-all-lockfiles
t-relay-offset
t-blame-event
t-freer-links
t-load-tests
t-jobserver2
t-starved-timeout
t-client-pack
t-offline-config
t-test-plan
t-told-resume2
t-jobserver
t-told-resume
t-outbound2
t-crash-open-bench
t-told-once
guest-never-below-given
admit-page-cache-active
pooled-admission
driver-give-back
no-sizes
one-driver-per-check
archive/vm-root-share
archive/build-out-kept
archive/cargo-perf
archive/virtiofs-readdir-alloc
archive/vm-outputs-stream
archive/stable-verify-priority
archive/agents-1
archive/stack-parallel
archive/cpu-admission
archive/narrow-from-every-log
archive/old-t
archive/worker-store-gc
archive/failing-builds-kept
archive/vm-cargo-home
archive/lifecycle
archive/bench-own-cores
archive/place-test-binaries-nocopy
archive/vm-net-upload-stall
archive/booking-current-use
archive/archive-dep-out-dirs
archive/any-arch-shards
archive/prepare-stall-progress-ns20
archive/s2
archive/next-set-20
archive/store-full-waits
archive/fetch-caps-by-node
archive/vm-step-phases
archive/arm-only-for-arm
archive/deploy-all-workers
archive/lifecycle-staging
archive/lifecycle-1-wire
archive/fast-gate
archive/cargo-key-narrow
archive/log-leads-followup
archive/gate-limit
archive/prepare-stall-vm-bytes
archive/lifecycle-2-ends
archive/cache-hits-bind
archive/failing-reused
archive/oci-archive-direct
archive/prepare-stall-progress
archive/test-quarantine
archive/crash-safe-on-18
archive/build-script-etxtbsy
archive/old-release
archive/next-set-19c
archive/wait-reasons
archive/cache-put-best-effort
archive/hang-not-t-time
archive/shard-test-results
archive/vm-carry-on-17
archive/check-test-filter
archive/artifact-path-beneath
archive/stall-room-xfs
archive/build-dir-no-recopy
archive/cache-hits-link
archive/outputs-no-follow-on-copy
archive/outputs-no-follow
archive/next-set-19
archive/hang-detect
archive/stable-verify-stable-plan
archive/freer-target-only
archive/lease-pricing-narrow
archive/vm-outputs-once
archive/queue-place-starved
archive/publish-reads
archive/disk-warning-scratch
archive/outputs-no-copy
archive/wd-probe-3min
archive/watchdog-on-d65
archive/log-leads-with-excerpt
archive/queue-place
archive/prep-watchdog-progress
archive/cache-put-stack-room
archive/cache-put-stack
archive/place-by-pace
archive/nested-sync-helper
archive/next-set-18y
archive/archive-bins-by-env-19
archive/next-set-18
archive/disk-want-held
archive/young-booking-back
archive/flaky-tests-1027b
archive/next-set-17
archive/prep-start-at-close
archive/unpack-error-on-17
archive/server-memory-high
archive/vm-start-held
archive/vm-carry-on-14
archive/space-trim-registry-room
archive/file-cache-ns16
archive/unpack-error-final
archive/crash-safe-worker
archive/server-space-trim
archive/status-big-runs
archive/nested-tmp-volatile
archive/publish-refresh
archive/gc-cache-quiet-reads
archive/next-set-16
archive/vm14-proof
archive/csw-node-kill
archive/unpack-link
archive/vm-tests-15
archive/seccomp-allow-field
archive/flaky-tests-1027-ns15
archive/shard-fail-fast
archive/server-node-check
archive/live-log-restart
archive/unpack-no-orphans
archive/flaky-tests-1027
archive/fetch-share-images
archive/fetch-images-red4
archive/forget-cached
archive/put-file-once-ns15
archive/recheck-rank-15
archive/fetch-images-red3
archive/unpack-no-orphans-red2
archive/fetch-io-pass-followups
archive/sandbox-no-fallback-ns15
archive/unpack-no-orphans-red
archive/archive-bins-by-env-ns15
archive/ns15-proof
archive/next-set-15
archive/archive-bins-by-env
archive/vm-guest-panic-15
archive/sandbox-no-fallback
archive/recheck-rank
archive/placement-ahead-bound
archive/carry-keeps-listing
archive/registry-parallel-pull
archive/sandbox-tests-15
archive/attempt-log-live-15
archive/follow-progress-16
archive/follow-progress-15
archive/ns15-archive-base
archive/fetch-io-max-on-13
archive/fetch-images-red2
archive/transient-build-fail-15
archive/test-ended-early-15
archive/archive-keep-cleanup
archive/main-merge-14
archive/sandbox-clone3-fallback
archive/vm-carry-on-13
archive/fetch-io-sweep-15
archive/vm-root-disk-fixes
archive/vm-guest-panic
archive/follow-progress-14
archive/archive-keep-on-demand
archive/vm-exit-unseen
archive/file-cache-share
archive/bwrap-root-userns
archive/transient-build-fail
archive/fetch-io-max
archive/file-cache-guard-11
archive/fetch-io-sweep
archive/archive-build-dir-skip
archive/next-set-14
archive/wrapper-one-read
archive/archive-tmp-links
archive/attempt-log-live
archive/fetch-share-and-order
archive/vm-hang-io-wait
archive/vm-carry-fixes
archive/image-cancel
archive/test-ended-early
archive/sim-on-train3-bundle
archive/hits-layer-wip
archive/t-old-putfile
archive/archive-links
archive/stall-on-13
archive/carried-prep-completes
archive/put-file-once
archive/preview-14
archive/follow-progress
archive/gc-reads-dont-protect
archive/admission-replay-people
archive/people-pickup
archive/gc-pass-visible
archive/hits-layer
archive/own-build-priced
archive/compact-stamps-followup
archive/prepare-timing
archive/sim-on-train3
archive/next-set-13
archive/next-set-12b
archive/sim-on-next-set-12
archive/deploy-doc-no-kill
archive/next-set-12
archive/attempt-logs-real
archive/sim-tests-green
archive/shard-label-index
archive/young-booking
archive/next-set-11
archive/data-dir-config-env
archive/vm-sync-not-host-store
archive/attempt-logs
archive/wrapper-ro
archive/tests-wait-on-events
archive/blame-git-optional-needs
archive/job-file-headroom-impl
archive/next-set-10
archive/blame-verdict-fresh-parent
archive/compact-touched-stamps
archive/interactive-incremental-off
archive/follow-lost-lines-counted
archive/evict-test
archive/next-set-trial
archive/keys-cover-output-bytes
archive/file-cache-guard
archive/blame-after-parent
archive/test-filter-matching-nothing-fails
archive/s1-on-d96
archive/draining-node-queues
archive/tprev-checks-prod-next
archive/s1-dead
archive/follow-live-run
archive/guard-stopped-setup-text
archive/io-error-cause
archive/source-layer-whole
archive/clippy-groups
archive/worker-silence-grace
archive/price-touched
archive/prod-next
archive/batch1
archive/s1-on-prod-next
archive/vmcache/sandbox-copyup-pin
archive/s1-xfs-store
archive/warm-script-builds
archive/vmcache/setup-tag-digest
archive/vmcache/setup-should-fixes
archive/vmcache/setup-any-arch
archive/guard-livelock
archive/host-budget
archive/wire-format-test
archive/admission-replay
archive/switch-safe
archive/stall-window
archive/upgrade-carries-preparing
archive/static-init
archive/switch-proof-b
archive/carry-tokens
archive/seals-together
archive/switch-safe-storage
archive/switch-safe-worker
archive/batch-b-prev
archive/vmcache/batch-b
archive/carry-vm-helpers
archive/small-llvm-args-failed-log
archive/batch-a
archive/stall-hotfix
archive/prev-pacing
archive/u-try-wip
archive/u-try
archive/u-try-wip2
archive/flatten-verify
archive/poll-free
archive/flatten-tiers
archive/hotfix-cross
archive/pool-stall
archive/disk-pacing
archive/u-builds-from-graph
archive/mac-idle
archive/ship-direct
archive/vmcache/shards
archive/soft-margin
archive/behind-no-target
archive/filtered-binaries
archive/vmcache/setup-layers
archive/direct-off-prev
archive/probe-budget
archive/vm-helper-exit
archive/jobs-soft-bound
archive/vmcache/vm-disks
archive/vmcache/failure-outputs
archive/narrowed-not-verdict
archive/scratch-direct-off
archive/handover-holds
archive/memory-lines
archive/drain-destroys
archive/pool-size
archive/drain-own-frees
archive/test-schema-drop
archive/deploy-disk
archive/deploy-disk-lines
archive/clone-aware-freeing
archive/absolute-headroom
archive/zfs-pool-size
archive/u-int5
archive/u-load
archive/u-warn
archive/u-steer
archive/revert-stall-once
archive/guard-headroom
archive/u-int3
archive/u-readsets
archive/u-hermetic
archive/mem-virtio
archive/u-buildjobs
archive/u-waits
archive/u-three
archive/u-zfs-stall
archive/u-config
archive/u-lean
archive/u-e2e
archive/u-integrate2
archive/u-jobenv
archive/u-cache-blobs
archive/u-observe2
archive/u-sched-nospread
archive/u-node-bound
archive/u-sched-oom
archive/u-review-store
archive/u-observe
archive/u-review-engine
archive/u-review-srv
archive/u-review-node
archive/u-review-sched
archive/preempt-measured
archive/u-integrate
archive/u-eng
archive/lock-off-runtime
archive/u-vm
archive/u-gone
archive/u-offline
archive/ready-starve
archive/u-notices
archive/heads-never-superseded
archive/u-learn
archive/int
archive/u-graph
archive/u-umount
archive/supersede-followed
archive/preparing-booking
archive/u-xdev
archive/u-env
archive/u-poll
archive/u-wrap
archive/u-room
archive/u-wrap-try
archive/u-fixed
archive/unstall
archive/u-fix3
archive/u-cwd
archive/resume-supersedes
archive/server-heap
archive/u-harness
archive/u-macos
archive/u-node
archive/u-eng2
archive/u-leader
archive/u-cutover
archive/u-cache
archive/u-sched
archive/u-engine
archive/chore/agpl-license
archive/note-x86-disk-room
archive/pass-cost
archive/prod-defects
archive/clippy-false-greens
archive/t-pace-variance-prototype
archive/outputs-reattach
archive/fix-retry-needs
archive/no-supersede-uncached
archive/fix/promoted-view-mtime
archive/rb-merge
archive/ft-sched
archive/ft-node
archive/ft-engine
archive/fx-sim
archive/fx2-mem
archive/fx2-store
archive/fx2-ci
archive/fx-work
archive/fx-ci
archive/fx-sched
archive/fx-req
archive/fx-store
archive/fx-cache
archive/rb-storage
archive/rb-scheduling
archive/rb-sweep
archive/rb-tracking
archive/rb-workers
archive/rb-client
archive/rb-profiles
archive/rebuild
archive/batch-deploy
archive/fix-roll
archive/work
archive/fix-busy
archive/fix-perf
archive/fix-suite
archive/fix-spread
archive/fix-sig
archive/fix-wait
archive/fix-init
archive/sizing
archive/fix-drift
archive/delivery
archive/fix-snap
archive/fix-own
archive/fix-rollout
archive/fix-hang
archive/fix-tree
archive/images
archive/fill
archive/sched-gate-preparing-after
archive/takeover-sim
archive/image-d244b22
archive/image-ce8a09e
archive/image-c9ff4f7
archive/image-489bec9
archive/image-7e07ffb
archive/image-583ea93
archive/image-8e1cd2c
archive/image-fbf0a9c
archive/image-6924e11
archive/image-29cabc3
archive/image-97ebb0e
archive/image-d0e23ac
archive/image-319fce9
archive/image-4f689e1
archive/image-feacbcd
archive/image-d5d9446
archive/image-6b86940
archive/fix/dedup-priority-promotion
archive/image-a5b0fe3
archive/image-462afb1
archive/image-f39d42c
archive/image-6e71fb4
archive/image-0c62329
archive/resources
archive/image-112b6a6
archive/image-8b06530
archive/image-5ae7cd8
archive/fmt-fix-in-t-toml
archive/image-arm64
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
tilo/t#64
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Production,
9faf6c61until 22:08Z and6ebaa239after it; the freer and the node's store are the same in both. Readings only; I changed nothing and cancelled nothing.What happened. Under a wave of people's jobs the node's free disk fell from 1,203 GiB at 21:33Z to 452 GiB at 22:05Z, the floor (5% of 8,190 GiB is 409.5). It rose to 755 GiB while the 22:08Z restart paused starts, and at 22:27Z it is at 537 GiB and falling about 35 GiB a minute again.
Jobs it cost so far. Two ended at their own disk limit (clippy/api-tester 22:04:42, 6.7 GiB booked and 6.8 held; clippy/collaboration 22:16:00, 36.7 booked and 36.4 held), one did not start within 30 s (test/feeds 22:04:11). All people's jobs, all run again. The four cache refusals of issue #63 fell in the same minutes.
Who wrote it. In the ten minutes to 21:52Z people started 86 jobs with 1,271 GiB of disk booked, CI one. At 22:03Z the jobs out had booked: one principal's 3 sessions 52 jobs and 1,435 GiB, another's 6 sessions 47 jobs and 708 GiB, CI 13 jobs and 283 GiB. The largest: nine
clippy/tilo-uijobs at 76 GiB each, all started within 20 minutes.What the node could do about it.
t_node_disk_ceiling_bytes, GiBdeleting/stayed empty while 130 GiB went in five minutes. Seven samples of thet-freerthread: waiting (futex, nanosleep) with unchanged IO counters, then seconds at a time in anioctlin state D.t disk --json: freeing 0. The ceiling says why: what it may free has run out.How I read it. Bookings hold nothing on the volume by design (the head comment of src/store/freer.rs), people's jobs start first and without a limit, and each brings a build directory of tens of GiB. So a wave can hold more than the volume has beyond its keep line; the cache gives way first, then there is nothing left to free, and the floor is the only brake. Two things I cannot judge from outside: whether layers and snapshots stay held longer than a job or session needs them, and whether flattening should wait while the volume is short.
No change proposed here; disk admission is yours, and a limit per principal is the user's decision. Evidence kept on my side: free disk by minute, the deleter's counters, the thread samples.
22:32Z, four more within 30 seconds. clippy/tilolang-host (46.1 GiB booked, 46.1 held), clippy-x86_64/imager (17.5 and 17.2), clippy/file-explorer (34.1 and 34.2) and clippy/tilo-room-host (38.5 and 38.6) each ended
disk_fullat its own limit after about 15 minutes of work, with 523 to 553 GiB free on the volume, above the floor. All four are one principal's people's jobs and all run again booked higher, which asks for more disk still. That makes six such ends since 22:04Z. So the brake is not only the floor: a job whose quota is not grown while the ceiling is this low loses its work at the quota.Measured, 22:37Z: the grows are refused.
t_sched_grow_total{what="disk"}per ten minutes:None was refused in the hour before 21:56Z. A refused grow leaves the job at its quota (src/sched/state.rs, the
fitsbranch of a disk grow), and the sixdisk_fullends are jobs that then wrote into it.22:42Z, on
6ebaa239. Free disk is at 436 GiB and falling again (496 at 22:40:35Z), with 171 entries waiting indeleting/. 27 asks wait for disk, and people's jobs now wait 180 s at the median and 492 s at the 95th percentile to start (376 started in 15 minutes); CI started 2.22:42 to 22:48Z: the node ran at a quarter of its jobs for want of disk, with cores idle.
t_node_busy_coresThe whole queue waited for disk (
why=disk:107519at 22:47Z, 125 of 159 cores booked). Four more jobs endeddisk_fullat their own limit in those minutes (22:43:43, 22:44:13, 22:44:58, 22:47:06), which makes ten since 22:04Z, all one principal's people's jobs. Then the freer caught up: 760 GiB free at 22:48Z and starts resumed (37 and 22 in the next two minutes).22:51Z: recovered, with the wave still on. Free disk 760 GiB at 22:48:03Z, then 856, 911, 1,008 and 1,140 GiB at 22:51:03Z, as
deleting/drained from 446 entries to 0. No job ended by a cause after 22:47:06Z. Out at 22:51Z: one principal 31 jobs with 884 GiB of disk booked, CI 14 jobs with 642 GiB, the other principal 42 jobs with 302 GiB. The whole episode ran from 21:33Z to 22:51Z: the floor touched at 22:05Z (452 GiB) and nearly again at 22:42Z (436), tendisk_fullends and onesetupend, and six minutes at a quarter of the node's jobs.It happened again, 00:54Z to 01:45Z 11-14, on
c2d52b34: a stall this time, not a pile of failed jobsTimeline.
disk.disk_full, all people's: two of principal quinten, two of xemmerling. No CI job fails for disk.disk, each short by about 1.07 GB; grows refused 72 to 182 a minute.Against 21:33Z on the older build: there the node kept placing, ten jobs ended
disk_fulland 311 grows were refused per ten minutes. Here a job short of the node's disk waited for it, so the cost was five minutes with no job started.Who wrote. Per-session bytes written, from the jobs' cgroups (
io.stat, two reads 20 s apart at 01:22Z): people's jobs 97 GiB a minute, CI nothing; one session 78 GiB a minute. In the jobs view the largest session then wasclaude:fa71a892…of principal xemmerling with 44 running jobs in 34 runs at once.The freer's own account at 01:42:02Z. "the volume needs 473,300,496,219 bytes more free": keep 1,319 GB, floor 439.7 GB, available 123.9 GB,
freeing380.8 GB (handed to the deleter, not yet gone), pending 853.7 GB, freed 13 candidates of 218.7 GB in that pass, kept 548 candidates whose blocks other files share: 970.8 GB that freeing would not return.Where the volume's 8,047 GiB used sat (01:39Z,
du -sxwith short limits; shared blocks counted more than once).cas/packs2,835 GiB in 741 files;layers12,101 directories, of them build layersb-6,424 with a random sample of 14 at a mean 1.65 GiB (largest 10.4), every other kind under 100 MiB a layer;scratch318 GiB;deleting122 GiB. A people's session's build is about 59 GB, and the worker flattened five such in twelve minutes (t::store::snapshots: flattened a session's build … bytes=59113234798).What I could not explain, and where a fix would have to look.
I changed nothing on production. The readings are in my notes; the scripts are
disk-floor-reading.shanddisk-floor-watch*.sh.