Protocollo e trasporto IB: livelli, QP, RDMA, subnet manager
InfiniBand è stato progettato fin dall’inizio come un fabric per computer che comunicano direttamente con la memoria reciproca, non per pacchetti tra sconosciuti. I suoi livelli, l’indirizzamento e la gestione risultano estranei a un ingegnere Ethernet, ma sono semplici una volta acquisito il vocabolario — e spiegano perché il livello fisico è soggetto a standard così severi. Questa pagina descrive il protocollo; l’ottica è in Ottica InfiniBand.
Livelli
| Livello | Contenuto | Note |
|---|---|---|
| Fisico | lane (1x, 4x, 8x, 12x), segnalazione per lane (da NRZ al PAM4 di HDR… vedi velocità), codifica (da 8B/10B fino a QDR, 64B/66B da FDR in poi), FEC (opzionale da FDR, RS-FEC su HDR/NDR) | il mondo del ricetrasmettitore |
| Collegamento | header di instradamento locale (LRH) con i LID, lane virtuali (VL0–VL14 dati, VL15 gestione), controllo di flusso basato su crediti per VL, CRC di livello collegamento (ICRC/VCRC) | lossless per progettazione |
| Rete | header di instradamento globale (GRH) con GID a 128 bit per l’instradamento multi-subnet | usato raramente all’interno di un singolo cluster |
| Trasporto | queue pair (QP) con code di invio/ricezione, tipi di servizio RC/UC/UD/XRC, segmentazione alla MTU, ACK/NAK per il servizio affidabile | qui vive l’RDMA |
| Superiore | API verbs, MPI, NCCL (via UCX/SHARP), storage (SRP, iSER, NVMe/IB), IPoIB | ciò che usano le applicazioni |
Indirizzamento e identità
| Identificatore | Dimensione | Assegnato da | Significato |
|---|---|---|---|
| GUID | 64 bit | produttore | identità permanente di una porta, di un nodo o di un sistema (come un MAC) |
| LID (identificatore locale) | 16 bit | subnet manager | indirizzo all’interno di un subnet; le tabelle di forwarding usano i LID |
| GID | 128 bit | SM (prefisso) + GUID | prefisso di subnet + GUID; usato tra subnet diversi e da RoCE |
| PKey (chiave di partizione) | 16 bit | SM | appartenenza a una partizione (come una VLAN); membri completi/limitati |
| QPN | 24 bit | HCA | queue pair number — l’endpoint all’interno di una porta |
Queue pair e servizi di trasporto
Una queue pair è una coda di invio e una coda di ricezione nell’HCA, di proprietà di un’applicazione. Le work request inviate ad essa vengono eseguite dall’hardware; i completamenti arrivano in una completion queue. Tipi di servizio:
| Tipo | Affidabile | Connesso | Uso |
|---|---|---|---|
| RC — connessione affidabile | sì (ACK/NAK, ritrasmissione) | sì, una QP per peer | la maggior parte del traffico RDMA; MPI, NCCL, storage |
| UC — connessione inaffidabile | no | sì | raro |
| UD — datagramma inaffidabile | no | no, una QP per tutti i peer | gestione, IPoIB, multicast |
| XRC — connessione affidabile estesa | sì | code di ricezione condivise tra i processi | job MPI di grandi dimensioni, per ridurre il numero di QP |
| RD — datagramma affidabile | sì | no | sostanzialmente inutilizzato |
Le operazioni RDMA (READ, WRITE, atomiche) spostano i dati direttamente tra i buffer applicativi su due host, senza che nessuna delle due CPU li copi; SEND/RECEIVE trasporta i messaggi. La memoria deve essere registrata (bloccata in memoria e dotata di una chiave) prima che l’HCA possa accedervi. GPUDirect RDMA estende questo meccanismo alla memoria GPU (Fabric GPU).
Controllo di flusso e MTU
Ogni collegamento esegue un controllo di flusso basato su crediti per lane virtuale: il ricevitore comunica lo spazio disponibile nel buffer, il mittente non trasmette mai più di quanto il ricevitore possa assorbire. Nessun frame viene scartato per congestione; si propaga invece una back-pressure — lo stesso compromesso dei crediti di Fibre Channel, e il motivo per cui un solo collegamento lento o con errori degrada un intero job. La MTU di collegamento è 256–4096 byte (tipicamente 4096); la MTU di percorso è negoziata end-to-end. I livelli di servizio (SL) sono mappati sulle VL per separare le classi di traffico, e l'instradamento adattivo può deviare i flussi attorno ai collegamenti congestionati.
Il subnet manager
Esattamente un subnet manager (SM) è attivo per ogni subnet (gli altri restano in standby). Si occupa di:
- Scoprire la topologia percorrendo la fabric con pacchetti di gestione a instradamento diretto (SMP su VL15/QP0) — ogni switch e ogni porta HCA.
- Assegnare i LID e configurare le porte (velocità, larghezza, MTU, arbitraggio VL, PKey).
- Calcolare le rotte — min-hop, up-down, fat-tree, dragonfly+, instradamento adattivo — e programmare la tabella di forwarding lineare di ogni switch.
- Eseguire scansioni periodiche e in risposta ai trap (porta up/down), reinstradando attorno ai guasti.
- Eseguire il subnet administrator (SA), che risponde alle query di percorso degli host.
OpenSM (open source) e i fabric manager dei produttori (UFM) lo implementano; il fabric manager è anche il punto in cui vengono raccolti, su tutta la flotta, gli errori di porta, i risultati della negoziazione di velocità/larghezza del collegamento e la DDM dell’ottica (Affidabilità e monitoraggio dei collegamenti).
Negoziazione del collegamento
All’attivazione del collegamento le due estremità negoziano la larghezza (1x/2x/4x) e la velocità (rate per lane) al valore comune più alto. Un collegamento che si attiva a 2x, o di una generazione più lento del previsto, è l’equivalente InfiniBand del caso Ethernet «collegamento a 10G invece che a 25G»: la fibra o il laser di una lane, un cavo al limite, oppure una generazione di ricetrasmettitore non corrispondente (Velocità e rate). Il fabric manager riporta lo stato negoziato; ibstat / ibportstate lo mostrano su un host.
Strumenti di gestione e diagnostica
| Strumento | Scopo |
|---|---|
ibstat, ibstatus | stato locale della porta, rate, larghezza, LID |
ibnetdiscover | dump della topologia |
ibdiagnet | verifica su tutta la fabric: errori, mismatch di velocità/larghezza, GUID duplicati, informazioni sul cavo |
perfquery, ibqueryerrors | contatori per porta: errori di simbolo, cadute del collegamento, recupero del collegamento, errori di ricezione di porta, overrun eccessivo del buffer, pacchetti scartati su VL15, contatori FEC |
mlxlink, mlxcables | dettagli PHY per porta, ed EEPROM di cavo/ricetrasmettitore, DDM, istogramma FEC |
ibportstate | forza velocità/larghezza, resetta una porta |
Gli errori di simbolo e i recuperi del collegamento sono i contatori del livello fisico — l’equivalente di CRC/FEC in Ethernet, legati alla potenza Rx e alla pulizia (Fabric).
InfiniBand vs RoCE in un paragrafo
RoCE v2 trasporta lo stesso verbs/RDMA su UDP/IP/Ethernet; sostituisce il subnet manager con il routing IP e le PKey con le VLAN, e sostituisce il controllo di flusso a crediti con PFC/ECN (DCQCN) — che deve essere configurato correttamente per essere lossless (Ethernet lossless, Interconnessioni). I ricetrasmettitori sono fisicamente gli stessi; cambiano solo la codifica dell’identità e le policy dell’host.
In CodingBox
I moduli InfiniBand si leggono come qualsiasi QSFP/OSFP: identità (compresi i bit di rate InfiniBand nel byte 164 di SFF-8636, o le applicazioni CMIS), DDM e checksum per lane in Check transceiver e DDM. Una porta che negozia al di sotto della propria velocità nominale merita una lettura al banco di entrambe le estremità.