Am lucrat pentru Spirent, o companie de testare și măsurare care dezvoltă sisteme de testare pentru rețele de înaltă performanță. Produsul se numea Test Center și, împreună cu o echipă foarte talentată, dezvoltam sistemul folosit pentru testarea sistemelor RoCEv2. M-am concentrat în special pe Priority Flow Control (PFC) și pe modul de activare a acestuia pentru „Packet Analyzer and Generator” (cunoscut și sub numele de PGA) bazat pe FPGA de 800 Gbps.

Totuși, nu am avut niciodată o privire concretă asupra Nivelului 4, iar acest memoriu încearcă să elimine această lacună prin articularea elementelor cheie ale Nivelului de Transport InfiniBand (L4) și vizualizarea lor cu ajutorul câtorva diagrame.

Cadrul RoCEv2 Link to heading

Să începem cu cadrul RoCEv2 propriu-zis:

Cadru RoCEv2

Antet de transport de bază (BTH) Link to heading

Câmpuri cheie incluse în antetul BTH:

  • Opcode: Folosit pentru a specifica tipul de operațiune RDMA, cum ar fi RDMA_WRITE, RDMA_READ, …

  • QP de destinație: Folosit pentru a distinge între diferite perechi de cozi de destinație pentru un pachet.

  • Cerere de confirmare: Indică dacă receptorul trebuie să returneze un ACK pentru acest pachet.

Numărul de secvență a pachetelor (PSN): utilizat în urmărirea secvenței pachetelor pentru o livrare fiabilă.

Întrucât UDP este un protocol nesigur, unde cadrele pot fi pierdute/în afara secvenței sau duplicate, PSN este utilizat pentru a asigura livrarea corectă. Totuși, aceasta înseamnă și că ar trebui să existe o modalitate prin care IBTL să solicite retransmiterea cadrului. Acest lucru se realizează folosind antetul AETH, care este descris mai jos.

Antet de transport extins (ETH) Link to heading

Nivelul de transport InfiniBand are mai multe antete extinse, utilizate pentru funcții specifice. În cazul RDMA, cele două cele mai interesante sunt RETH și AETH.

Antet de transport extins RDMA (RETH) Link to heading

Operația RDMA_WRITE necesită mai multe elemente, care sunt reprezentate în câmpurile antetului extins RETH. Acest antet informează hardware-ul receptor despre detaliile operației de scriere, inclusiv:

  • Adresă virtuală: Adresa de memorie destinație unde vor fi scrise datele

  • Cheie de acces la distanță (R_Key): Cheia de acces care validează permisiunile pentru regiunea de memorie

  • Lungime: Dimensiunea datelor care vor fi transferate

Antet de transport extins ACK (AETH) Link to heading

Așa cum s-a explicat anterior, este necesar ca IBTL să notifice expeditorul în cazul unei transmisii nesigure. Acest lucru se face folosind extensia EATH, care conține următorul câmp:

  • Sindrom: Un câmp care conține coduri de răspuns care indică succesul (ACK), condițiile de eroare (NAK) sau starea receptorului negata (RNR), împreună cu informații de control al fluxului.

  • Numărul de secvență al mesajului (MSN): Indică numărul de secvență al celui mai recent mesaj completat, ceea ce înseamnă că toate mesajele cu numere de secvență mai mici au fost recepționate cu succes

Extensii personalizate Link to heading

Specificația IBTL (vezi Capitolul 9) conține destule extensii, dintre care unele mi-au atras atenția:

  • Comparare și schimb: Face posibilă sincronizarea fără blocare.

  • Trimitere vs. Scriere: Prima poate fi utilizată pentru controlul fluxului, în timp ce a doua este utilizată pentru fluxul de date.

  • Extensie imediată: Permite schimbul de metadate pe canalul lateral împreună cu transferul memoriei.

M-am întrebat și eu cum se știe ce extensii sunt prezente în antet. Răspunsul este simplu: pentru fiecare opcode, este o listă de extensii care trebuie analizate - lista este definită static, ca parte a specificației.

Provocarea fluxului de elefant Link to heading

După cum a afirmat Toni Pasanen pe blogul său The Network Times:

Comunicarea GPU-GPU creează fluxuri masive de tip „elephant flow”, pe care plăcile de rețea compatibile cu RDMA le transmit la o rată de linie. Aceste fluxuri pot cauza cu ușurință congestie în rețeaua backend.

Această capacitate a RDMA de a genera trafic la rata unei linii este uimitoare. Dar acest lucru creează și o problemă cu dimensiunea fluxului (dimensiunea fluxului între două perioade consecutive de inactivitate), unde probabilitatea de a accesa un „interval de inactivitate” devine semnificativ mai mică atunci când se utilizează fluxuri RDMA de tip „elephant”.

Dimensiunea fluxului - RDMA vs TCP Imagine din: Echilibrarea încărcării în rețea cu suport pentru reordonare în rețea pentru RDMA

Provocarea echilibrării încărcării Link to heading

Cealaltă complexitate se referă la echilibrarea încărcării cu topologii spine-leaf, unde pachetele pot fi primite în afara ordinii pe o singură pereche de coadă atunci când se utilizează echilibrarea încărcării Packet Spraying. Aceasta creează o complexitate, pe care Nvidia a rezolvat-o prin introducerea unei noi operațiuni RDMA numită „RDMA Write Only”.

Pulverizare pachete: OpCode: Doar scriere TDMA Imagine originală de la: The Network Times

Concluzie Link to heading

Aceasta este o notă „activă” pe care o voi actualiza pe măsură ce găsesc mai multe informații despre IBTL.

Nu există încă nicio concluzie, cu excepția faptului că RDMA este o soluție foarte elegantă pentru a rezolva provocarea eficienței rețelei și vine cu un set de noi provocări.


References: