Skip to main content
RunBook Academy

CephLXX · Network PerformanceNetwork Performance

MTU end to end

Intermediate⏱ ~17 minpingipiperf3

What you'll learn

  • Verify MTU end to end
  • Recognise the symptoms of a mismatch
  • Configure jumbo frames correctly
  • Decide whether jumbo frames are worth it

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

An MTU mismatch produces intermittent failures on large transfers while small packets work perfectly — which is one of the most confusing failure modes in networking, and Ceph exercises it constantly.

Verifying end to end

# with a 9000 MTU: 9000 - 20 (IP) - 8 (ICMP) = 8972
PEER=peer
ping -M do -s 8972 -c 5 ${PEER}
PING peer (10.0.1.12) 8972(9000) bytes of data.
8980 bytes from 10.0.1.12: icmp_seq=1 ttl=64 time=0.187 ms

Success means every hop carries a 9000-byte frame. Failure:

ping: local error: message too long, mtu=1500
# or
--- peer ping statistics ---
5 packets transmitted, 0 received, 100% packet loss

The second form — silent loss rather than an error — is the dangerous one, because it means a switch in the path is dropping oversized frames without notifying anyone.

# check every path, not just one
for h in $(ceph orch host ls --format json | python3 -c 'import sys,json;[print(x["addr"]) for x in json.load(sys.stdin)]'); do
  printf '%-16s ' "$h"
  ping -M do -s 8972 -c 2 -W 2 "$h" >/dev/null 2>&1 && echo OK || echo FAIL
done

The symptoms of a mismatch

SymptomWhy
Small operations fine, large ones failsmall packets fit, large ones do not
Intermittent OSD heartbeat failuresheartbeats are small; data is not
iperf3 throughput far below link speedretransmits from dropped frames
Recovery stalls or is extremely slowrecovery moves large objects
Works between some hosts, not othersone switch or port differs
IFACE=bond0
ip link show ${IFACE} | grep -o 'mtu [0-9]*'
ethtool -S ${IFACE} | grep -iE 'oversize|too_long|frag'

Configuring correctly

Every element in the path must agree:

host NIC          → 9000
host bond         → 9000
host bridge/VLAN  → 9000
switch port       → 9216 (typically, to allow for headers)
switch fabric     → jumbo enabled
router, if any    → 9000
# persistent, on the host
ip link set dev eth0 mtu 9000
# and in the network configuration so it survives a reboot

Switches often need a larger value than the hosts because their figure includes framing overhead, which is a common source of an off-by-a-few mismatch that fails only for maximum-size frames.

Is it worth it?

ConsiderationJumbo frames
Throughput on large transfersmodest improvement
CPU per bytereduced
Small-operation latencyno change
Configuration risksignificant
Debugging difficulty when wronghigh

On 25 GbE and above with modern offload, the benefit is smaller than it was on 1 GbE. A cluster that is not throughput-bound gains little, and the failure mode is unpleasant — so the honest answer is that jumbo frames are worth configuring when the fabric is fully under your control and not worth the risk when it is not.

Quiz

Knowledge check · 4 questions

  1. Q1. Why does an MTU mismatch typically present as slow recovery rather than as a network error?

  2. Q2. One mismatched switch port can produce months of intermittent recovery stalls while every other path tests clean.

  3. Q3. Diagnose intermittent recovery stalls.

    Recovery on a cluster is extremely slow and occasionally stalls. Client I/O works normally. OSD heartbeats occasionally fail between two specific hosts. Jumbo frames were configured six months ago.

  4. Q4. Why do switches typically need a higher MTU value configured than hosts?

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

Production discipline

Test MTU across every host pair with ping -M do, not one representative path; a single misconfigured port produces intermittent recovery stalls that persist for months. Configure switches with framing headroom above the host MTU, and treat jumbo frames as optional unless the fabric is fully under your control.

Cross-course references

  • Kubernetes: overlay network MTU mismatches produce the identical silent large-packet failure
  • Linux: path MTU discovery failures behind ICMP filtering are a classic hard-to-find fault