Skip to content

Document per-instance CPU and RAM utilization - #346

Merged
cory-salad merged 6 commits into
SaladTechnologies:mainfrom
cory-salad:docs-resource-utilization
Sep 21, 2026
Merged

cory-salad merged 6 commits into
SaladTechnologies:mainfrom
cory-salad:docs-resource-utilization

Conversation

@cory-salad

Copy link
Copy Markdown
Contributor

Adds a docs page for the CPU and RAM utilization we now report per container group instance in the Portal and via the API. There was no coverage of it — the only existing "utilization" docs describe instrumenting your own container with psutil/nvidia-smi, which is a different thing.

New page: container-engine/explanation/container-groups/resource-utilization.mdx, under Container Groups in the nav.

It answers the two questions the metric's design creates:

How often it updates. Nodes sample once every 60s, so CPU is an interval average rather than an instantaneous reading, a new instance shows CPU 0% for about the first minute (the value is a delta and needs two samples), and a restart resets the counter and costs one interval.

Why it goes over 100%. Both percentages are measured against what you requested, not against the node. On GPU container groups the requested vCPU and RAM aren't strictly enforced, so above-100% readings are real and expected. The page says not to rely on it: how much headroom a container gets varies by node, so an application that routinely runs over will work on some nodes and fail unexpectedly on others — raise the request instead. CPU-only workloads have the limits enforced, which is why overage there shows up as exit code 137.

Also adds cross-links from the container groups overview and the hardware-metrics autoscaling guide, which now distinguishes the platform-reported values from self-instrumented ones.

Behavior was taken from the platform implementation rather than inferred.

Note for reviewers

The end-to-end staleness is described as "up to roughly two minutes." The 60s node sampling interval is solid; I hedged on the backend refresh cadence. If someone knows the real number, that sentence is worth tightening.

Separately, container-groups.mdx still hardcodes Number of vCPUs (1-16) and Memory (RAM) (1-60GB). Not touched here, but those will go stale as the maximums rise.

🤖 Generated with Claude Code

cory-salad and others added 5 commits September 21, 2026 09:59
SaladCloud reports CPU and RAM utilization for every running container
group instance in the Portal and via the API, but nothing in the docs
explained what the numbers mean. The two questions that need answering
are the ones the metric's design creates: how often it updates, and why
it goes over 100%.

Both percentages are measured against the vCPU and RAM you requested,
not against the node. Nodes vary widely in size, so a percentage of node
hardware would mean something different on every machine.

Utilization above 100% is expected on GPU workloads. vCPU and RAM are
included in the GPU price, so neither is capped: CPU has no cgroup quota
at all, and the memory ceiling is raised above the request when the node
has spare memory at container start. A GPU workload that asked for 2
vCPUs and can keep 8 cores busy really does report 400%. CPU-only
workloads are billed for those resources and the limits are enforced,
which is why exceeding RAM there produces exit code 137 instead.

The update behavior follows from sampling every 60 seconds: CPU is an
interval average rather than an instantaneous reading, the first value
needs two samples so a new instance shows 0% for about a minute, and a
restart resets the counter and costs one interval.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The (1-16) and (1-60 GB) parentheticals pinned the page to today's
maximums, which can go higher. The sentence works without them -- what
matters is that the denominator is what you configured, not what the
ceiling happens to be.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The paragraph restated what the GPU subsection right below it explains
concretely, and framed the over-100% case as general when it only
happens on GPU workloads -- the CPU-only subsection says the limits are
enforced there.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
State the GPU behavior plainly -- limits are not strictly enforced, so
over-100% happens -- and pair it with the consequence that matters:
headroom varies by node, so a workload that routinely runs over will
fail unexpectedly on some of them. Raise the request instead.

CPU-only collapses to the enforced limits and exit code 137.

Drop the older-instances subsection entirely; no such instances remain.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The over-100%-on-GPU bullet repeated the GPU section verbatim. What is
left is the two readings that are not obvious from the sections above --
low CPU on a GPU workload is usually not a problem, low RAM on a
CPU-only one is money and scheduling headroom -- so it reads better as a
short paragraph than a four-item list.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@cory-salad
cory-salad requested review from a team as code owners September 21, 2026 17:23
@cory-salad cory-salad self-assigned this Sep 21, 2026
Pre-existing in the hardware-metrics autoscaling guide, surfaced because
CI only spell-checks changed files and this branch touches that page.

Every occurrence is a lowercase identifier -- the prometheus_client
package, variable names, and the http://prometheus:9090 host -- so
capitalizing to satisfy the checker would break the examples.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@cory-salad
cory-salad merged commit bfdaf67 into SaladTechnologies:main Sep 21, 2026
5 checks passed
@cory-salad
cory-salad deleted the docs-resource-utilization branch September 21, 2026 18:07
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