Alla artiklar

RoCE v2: header-overhead, MTU och effektiv bandbredd

För robotar
7 november 2026
RoCE v2: header-overhead, MTU och effektiv bandbredd

RoCE v2 skickar RDMA över vanligt Ethernet genom att kapsla in sig i UDP/IP. Det gör protokollet routbart och enkelt att drifta, men det kostar header per paket: 54 byte innan första nyttobajten får plats. Hur mycket det betyder beror nästan helt på MTU, och den som räknar på länkhastighet utan att räkna på overhead överskattar sin klusterprestanda med tio till tjugo procent.

Vad headern består av

Ett RoCE v2-paket på tråden består av Ethernet-headern (14 byte, plus 4 vid VLAN-tagg), IP-headern (20 byte för IPv4, 40 för IPv6), UDP-headern (8 byte) och IB BTH (12 byte). Därtill kommer iCRC (4 byte) som skyddar hela paketet samt Ethernets egen FCS (4 byte).

Med IPv4 och utan VLAN blir summan 14 + 20 + 8 + 12 + 4 = 58 byte, varav de 54 första räknas mot MTU:n och de fyra sista ligger utanför. Det är den siffra som avgör hur mycket nyttodata som får plats i varje paket.

Nyttolast per paket

Med MTU 1500 blir RDMA-nyttolasten 1500 − 20 (IP) − 8 (UDP) − 12 (BTH) = 1460 byte. Effektiviteten blir 1460 / 1500 ≈ 97,3 procent. Det låter högt, men procentsatsen gäller per paket, och vid 100 Gbit/s handlar det om cirka 2,7 Gbit/s som går till headers i stället för data.

Med 9000 byte MTU blir nyttolasten 8960 byte och effektiviteten 99,6 procent. Skillnaden mellan 97,3 och 99,6 procent är liten i procent men stor i absoluta tal: på en 200 Gbit/s-länk är det ungefär 4,7 Gbit/s mer nyttodata, vilket är mer än en hel 25G-länk.

Räkna själv

Effektiv bandbredd = länkhastighet × (nyttolast / (nyttolast + 54)). Med IPv6 blir nämnaren 74 byte i stället för 54, eftersom IP-headern växer med 20 byte; det sänker effektiviteten vid MTU 1500 till cirka 95,2 procent. Den som kör dual stack och mäter IPv6-trafik får alltså en annan siffra än den som mäter IPv4.

Paketfrekvens är den andra gränsen

Även med perfekt MTU finns ett tak i paket per sekund. En switch eller NIC som klarar 100 Gbit/s med 1500-byte paket hanterar cirka 8,1 miljoner paket per sekund; med 9000 byte sjunker kravet till ungefär 1,4 miljoner. Det är därför jumboframes hjälper även när länken inte är mättad: de flyttar lasten från paketbearbetning till ren bandbredd.

Motorn i RoCE är dessutom att en enda sändning kan fylla länken utan att CPU:n deltar per paket. Faller prestandan trots god MTU är orsaken oftare PFC, ECN eller köbalansering än headern.

Vanliga misstag

Det vanligaste är att blanda MTU inom samma broadcast-domän: en nod med 1500 och en med 9000 ger fragmentering eller tysta tapp, och RDMA är känsligt för båda. Det näst vanligaste är att räkna på teoretisk länkhastighet i stället för godkänd nyttolast, vilket ger en kalkyl som aldrig kan uppfyllas.

En tredje detalj är att overheaden slås ut olika hårt beroende på meddelandestorlek. Små RDMA-operationer, som en fjärrläsning av ett par hundra byte, består till stor del av header, och där är det antalet operationer i sekund som sätter taket — inte länkens bandbredd. Stora överföringar närmar sig den teoretiska siffran ovan.

Den här webbplatsen är ett verktyg och informationsarkiv för RoCE v2-kalkyl: den räknar header-overhead och effektiv bandbredd för dina MTU- och länkparametrar. Siffrorna är teoretiska och beskriver protokollets kostnad, inte applikationens faktiska genomströmning.