Skip to content

feat(arc): let a profile keep its capability copies in RAM - #109

Closed
Mearman wants to merge 2 commits into
mainfrom
feat/capability-volume-medium
Closed

Mearman wants to merge 2 commits into
mainfrom
feat/capability-volume-medium

Conversation

@Mearman

@Mearman Mearman commented Oct 20, 2026

Copy link
Copy Markdown
Member

Every runner pod copies its tool-cache and system-library payloads into emptyDir volumes before its job starts, so each pod start writes the whole tool set and sysroot to the node's disk. On nodes with a slow consumer SSD those copies alone kept the disk saturated while the jobs beside them waited, and pods spent their first minutes in their init containers.

This adds a per-profile capability_volume_medium. Unset, nothing changes. Memory puts the tool-cache and sysroot volumes on a tmpfs, so the copies write nothing to the disk. The node cache is a hostPath and keeps its place. RAM-backed volumes count against the pod's memory, so the README's new "Where the copies live" section says how to size the profile's requests and limits from a running pod and that the higher request lowers what measured sizing derives. The filter takes the medium as a parameter and the profile validation refuses anything other than the two media the copies can use.

Every runner pod copies its tool cache and sysroot payloads before its job starts,
and on a node with a slow disk those copies keep the disk busy while the jobs
beside them wait on it. A profile's capability_volume_medium: Memory puts both
volumes on a tmpfs so the copies write nothing to the disk; the README says how
to raise the pods' memory requests and limits by what the copies hold. The node
cache stays a hostPath on the disk.
The init containers that copy the payloads set no limit, so their pages land in the
pod's cgroup and count towards eviction against its requests but against no limit;
what a job adds to the tool cache counts against the runner container's limit.
@Mearman

Mearman commented Oct 20, 2026 •

Copy link
Copy Markdown
Member Author

tmpfs was measured and rejected for the RAM cost: the copies would sit in memory on every node, raising each runner pod's memory request and lowering the fleet's ceiling. Replaced by #132, which copies each payload once per node into a store keyed by image digest.

@Mearman Mearman closed this Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant