Optimizare performanta PPPoE pfSense®

Timp de ani de zile, încă de la lansarea V2.1.0 în 2013, software-ul pfSense s-a bazat pe mpd5 și netgraph pentru a gestiona conexiunile WAN PPPoE. Deși această configurație a servit la stabilirea conectivității la serviciile PPPoE, cerințele rețelelor moderne multi-gigabit au expus limitări ale arhitecturii subiacente. Odată cu oferirea de servicii PPPoE de până la 8 Gbps și chiar 10 Gbps pe unele piețe din Europa de Nord și utilizarea continuă la nivel mondial, inclusiv în Orientul Mijlociu, am considerat că este important să îmbunătățim performanța a ceea ce este, pentru multe case și companii, conexiunea lor WAN principală. În această postare, vom analiza detaliile tehnice ale motivelor pentru care Netgraph a eșuat, modul în care noul driver if_pppoe abordează aceste probleme și ce vă puteți aștepta de la implementarea sa în software-ul pfSense.

Moștenirea: mpd5 și Netgraph


Daemonul Multi-link PPP (mpd5) utilizează Netgraph, un framework modular de kernel FreeBSD conceput pentru implementarea flexibilă a funcțiilor de rețea. Punctul forte al Netgraph constă în versatilitatea sa – acceptă o gamă largă de operațiuni precum bridging, PPP, tuneluri GIF, NAT, Netflow și multe altele, toate combinabile în configurații arbitrare. Această modularitate, însă, are un cost. Designul Netgraph necesită o validare extinsă a conexiunilor modulelor, gestionarea contoarelor de referință și gestionarea blocărilor. În era anilor 1990, când conexiunile DSL aveau viteze de ordinul zecilor de megabiți și procesoare cu un singur nucleu, această suprasarcină era gestionabilă. Dar, pe măsură ce conexiunile prin fibră optică au împins debitele în intervalul multi-gigabit, iar procesoarele multi-nucleu au devenit norma, ineficiențele inerente ale Netgraph au devenit un blocaj.

Problema cu Netgraph


Arhitectura modulară a Netgraph, deși flexibilă, sacrifică performanța. Validarea și sincronizarea constantă necesare pentru fiecare pachet pentru a suporta grafice arbitrare de conexiuni între module introduc latență și limitează scalabilitatea. În mediile cu randament ridicat, această suprasarcină afectează semnificativ performanța PPPoE, ceea ce arată clar că era nevoie de o nouă abordare.

Introducerea if_pppoe: O soluție special concepută


Pentru a remedia aceste deficiențe, Netgate a introdus un nou driver if_pppoe pentru software-ul pfSense. Acest driver este o implementare simplificată, concentrată exclusiv pe PPPoE. Prin restrângerea domeniului său de aplicare, if_pppoe elimină supraîncărcarea și natura single-threaded a modularității Netgraph, permițând câștiguri semnificative de performanță, în special în medii multi-core.

Caracteristici cheie ale if_pppoe

Optimizare multi-core: Spre deosebire de Netgraph, if_pppoe este conceput pentru a utiliza eficient mai multe nuclee CPU. Folosește Receive Side Scaling (RSS) pentru a distribui pachetele între nuclee pe baza protocolului, adreselor sursă/destinație și numerelor de port. Acest lucru asigură că un singur flux TCP rămâne pe un singur nucleu – minimizând pachetele neordonate – în timp ce alte nuclee gestionează fluxurile concurente.

Arhitectură simplificată: Concentrându-se exclusiv pe PPPoE, if_pppoe evită complexitatea suportării funcțiilor de rețea arbitrare. Acest lucru duce la o implementare mai rapidă și mai suplu.
Procesarea simultană a pachetelor: Driverul permite gestionarea simultană a pachetelor atât în direcția de recepție, cât și în cea de transmisie, pe mai multe procesoare. Operațiunile exclusive (de exemplu, blocarea altor procesoare) sunt limitate la evenimente rare de reconfigurare.

Creșteri de performanță

Desigur, dacă vă propuneți să îmbunătățiți performanța, veți dori să testați pentru a vă asigura că ați îmbunătățit lucrurile. Pentru a ne asigura că am identificat limitele clientului PPPoE în pfSense, am folosit un sistem Sapphire Rapids care rulează serverul PPPoE cu kernel Linux.

Dispozitiv testat: Netgate 6100, Forwarding L3, pf dezactivat, ix0/ix1 viteză de conexiune : 10 Gbps

Generator de trafic: Sapphire Rapids, server Linux PPPoE în mod kernel

– E810 NIC1, Port0, VF1, Trusted VF, Kernel Namespace (ns1), iperf3 client

– E810 NIC2, Port0, VF 1, Trusted VF, Kennel namespace (ns2), iperf3 server

Viteză de legătură: 100 Gbps

Durata testului: 60 de secunde

Rezultatele, în Gbps din perspectiva clientului, vorbesc de la sine.

PPPoE ImplementationDownload MinUpload MinDownload MaxUpload Max
mpd5 1 Stream2.623.234.563.84
mpd5 4 Stream5.013.716.664.15
if_pppoe 1 Stream6.184.596.384.94
if_pppoe 4 Stream8.187.969.018.24

Pe un Netgate 6100, am observat îmbunătățiri ale debitului cuprinse între 25% și 100% în scenarii cu fluxuri de trafic simultane multiple – aspecte frecvente în implementările din lumea reală. Aceste îmbunătățiri fac din if_pppoe un instrument revoluționar pentru utilizatorii conexiunilor PPPoE de mare viteză.

Alege echipamentul tău Netgate

Articolul integral in limba engleza poate fi consultat pe pagina Netgate

Alte articole