Skip to main content
RunBook Academy

CephXXIX · Network DesignNetwork Design

Choosing link speed for a Ceph cluster

Intermediate⏱ ~16 mincephiperf3

What you'll learn

  • Convert link speed to realistic usable throughput
  • Derive the network requirement from OSD count and device speed
  • Match link speed to recovery-window requirements
  • Justify a speed choice with arithmetic

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

Not yet marked complete on this device.

Why this matters in production

Link speed is a long-lived decision — you will not re-cable a cluster casually — and the common advice (“10 Gb minimum”) is a floor rather than an answer. The right figure comes from the devices in the chassis and the recovery window you are willing to accept.

Usable throughput

NominalTheoreticalRealistic sustained
10 GbE1.25 GB/s~1.1 GB/s
25 GbE3.1 GB/s~2.8 GB/s
40 GbE5.0 GB/s~4.4 GB/s
100 GbE12.5 GB/s~11 GB/s

Plan against the third column, and remember that client and replication traffic share it unless you have a separate cluster network.

Deriving the requirement

From the devices. Sum what the OSDs in one host can actually deliver:

12 × HDD at 180 MB/s sequential   = 2.2 GB/s   → 25 GbE
12 × SATA SSD at 500 MB/s         = 6.0 GB/s   → 100 GbE
8 × NVMe at 3 GB/s                = 24 GB/s    → 100 GbE, still short

A host whose devices can saturate the link means the network, not the storage, sets throughput. For HDD hosts, 25 GbE is generally ample; for NVMe, the network is the constraint at any commercially reasonable speed and the question becomes how much of the device capability you are willing to leave unused.

From the recovery window. This is usually the binding requirement:

one 16 TB OSD, EC 8+3 → 128 TB of recovery traffic
at 50% of a 25 GbE link (1.4 GB/s) → 25 hours
at 50% of a 100 GbE link (5.5 GB/s) → 6.5 hours

Compare against the degraded window you will accept, and let that comparison choose the speed.

Practical guidance

ClusterPublicCluster
Small HDD, under 10 hosts10 GbEshared
Production HDD25 GbE25 GbE
SATA SSD25 GbE25 GbE or 100
NVMe100 GbE100 GbE
Wide EC on large drives25 GbE100 GbE

The last row is worth noting: EC recovery volume can justify a faster cluster network than the client-facing side needs.

Verify what you actually have

ethtool ens1f0 | grep -E 'Speed|Duplex'
iperf3 -c 10.30.0.47 -P 8 -t 30

Run iperf3 between OSD hosts on both networks during commissioning and record the result. A 25 GbE link negotiating at 10 GbE, or delivering 6 Gb/s because of a host-side bottleneck, is far easier to find at build time than during an incident.

Quiz

Knowledge check · 4 questions

  1. Q1. A host has 12 HDD OSDs each capable of about 180 MB/s sequential. What link speed matches that capability?

  2. Q2. For most new builds, 25 GbE is a better choice than 40 GbE.

  3. Q3. Choose link speed from a recovery requirement.

    A design uses 18 TB drives with EC 8+3 across 16 hosts. The operations team requires return to full redundancy within 24 hours of a single OSD failure. Both 25 GbE and 100 GbE are within budget, with 100 GbE costing significantly more.

  4. Q4. Why should iperf3 be run between OSD hosts during commissioning?

Passing score: 75%. Answers are checked in this browser.

Production discipline

Derive link speed from the recovery-window requirement and the per-host device capability, and show both calculations in the design. Measure achieved throughput with iperf3 at commissioning and store the result alongside the design document — the gap between rated and achieved is exactly the sort of thing that is impossible to reconstruct later.

Cross-course references

  • Kubernetes: node network capacity planning for storage-backed workloads uses the same derivation
  • Linux: verifying negotiated link speed with ethtool is standard practice for the same reason