CephXXI · PG AutoscalePG Autoscale
Reading autoscaler suggestions
What you'll learn
- Read every column of `ceph osd pool autoscale-status`
- Explain how SIZE, RATE, and RAW CAPACITY produce the recommendation
- Identify when a recommendation is based on bad inputs
- Distinguish a real recommendation from a transient one
Prerequisites
None — start here.
Verified against Ceph Tentacle 20.2.x · Ceph Squid 19.2.x (supported previous) · cephadm matches the verified Ceph release · podman 4.x · csi-rbd and csi-cephfs current · RBD / CephFS / RGW current (matches Ceph release) · Linux kernel 5.15+ (5.10 minimum) · Ubuntu 24.04 LTS (Ceph host baseline) · Debian 12 (Bookworm) (Ceph host baseline) · Rocky Linux / RHEL / AlmaLinux 9.x (Ceph host baseline) · Proxmox VE 9.x (cross-course integration) · Kubernetes 1.31+ (cross-course integration) · 2026-08-18
Why this matters in production
autoscale-status is one of the few Ceph commands that shows you its
work. Every number the module used to reach a recommendation is in the
table. If you can read it, you can tell in seconds whether a
recommendation reflects reality or reflects a pool that was created
yesterday and has 40 MB in it.
The table
ceph osd pool autoscale-status
POOL SIZE TARGET SIZE RATE RAW CAPACITY RATIO TARGET RATIO BIAS PG_NUM NEW PG_NUM AUTOSCALE BULK
.mgr 1.2M 3.0 437.0T 0.0000 1.0 1 on false
rbd-vms 18.4T 3.0 437.0T 0.1263 1.0 512 1024 warn false
ec-archive 61.0T 1.5 437.0T 0.2094 1.0 1024 on true
| Column | What it is |
|---|---|
SIZE | bytes the pool currently stores (user data) |
TARGET SIZE | what you told the module the pool will grow to |
RATE | raw bytes consumed per user byte — size for replicated, (k+m)/k for EC |
RAW CAPACITY | raw capacity of the OSDs this pool’s rule can use |
RATIO | this pool’s share of raw capacity: SIZE × RATE / RAW CAPACITY |
TARGET RATIO | your declared share, if you set one |
BIAS | a manual multiplier on the computed PG count |
PG_NUM | current value |
NEW PG_NUM | what the module wants — blank means no change |
BULK | flag saying “this pool will be large; start it big” |
RATE 1.5 on ec-archive above is a k=4, m=2 profile: six raw bytes
per four user bytes.
Reading a recommendation
The module targets roughly 100 PGs per OSD across all pools. It divides
that budget between pools in proportion to how much of the cluster each
one occupies — RATIO, or TARGET RATIO if you declared one — then
rounds to a power of two.
So rbd-vms above holds 12.6% of raw capacity and is being told to go
from 512 to 1024 PGs. Either the pool grew, OSDs were added, or another
pool shrank. The table tells you which, because all three inputs are
right there.
When the inputs are wrong
The classic bad recommendation: a brand-new pool.
POOL SIZE RATE RAW CAPACITY RATIO PG_NUM NEW PG_NUM
new-pool 40M 3.0 437.0T 0.0000 32 1
The module sees a pool holding effectively nothing and proposes the minimum. It is arithmetically correct and operationally wrong — you created that pool because you are about to put 30 TB in it. The fix is not to argue with the module; it is to tell it what you know:
ceph osd pool set new-pool target_size_ratio 0.20
Quiz
Knowledge check · 4 questions
Q1. A pool shows `RATE 1.33`. What does this tell you about the pool?
Q2. RAW CAPACITY in autoscale-status is the same value for every pool in a cluster.
Q3. Diagnose the recommendation before acting on it.
A pool `metrics-hot` you created two days ago for a new Prometheus long-term store shows `SIZE 900M`, `PG_NUM 256`, `NEW PG_NUM 8`, `AUTOSCALE on`. The ingest pipeline goes live next week and is projected to write 25 TB in the first month.
Q4. What is the relationship between the RATIO column and the PG count the module recommends?
Passing score: 75%. Answers are checked in this browser.
Production discipline
Read autoscale-status before and after any change to pool
layout, device classes, or OSD count — all three move RAW CAPACITY and
therefore every recommendation in the table. Keep a note of pools where
you deliberately overrode the module, and why; the next operator will see
a pool at 4× the recommended PG count and needs to know it was a decision
rather than an accident.
Cross-course references
- Kubernetes: a StorageClass pointing at a new Ceph pool should have target_size_ratio set before the first PVC lands
- Linux: reading a table of derived values back to its inputs is the same skill as reading
vmstatfields