domenica 21 agosto 2016

pfSense e 10 GbE

Il 10 Gigabite Ethernet o 10 GbE risale al, 2002 ma solo negli ultimi anni ha visto una maggiore diffusione ed una riduzione dei prezzi dei dispositivi capaci di gestire tali velocità rendendolo alla portata anche degli utenti finali.
In quest'articolo vedremo come attivare connessioni 10 GbE in pfsense, quali accorgimenti adottare, quale hardware può supportare tali velocità e quando ha realmente senso.


Nella quasi totalità delle soluzioni hardware professionali in commercio, le porte 10 GbE sono "aggiunte" tramite schede PCI Express oppure tramite moduli di espansione basati su connettori proprietari ma connessi in un modo o nell'altro al bus PCIe.
Questo può indurre a pensare che qualsiasi hardware che sia in grado di alloggiare una scheda PCIe sia idoneo a supportare connessioni 10 GbE. Ovviamente quest'assunzione è totalmente falsa poichè sono numerose le componenti che entrano in gioco per supportare una larghezza di banda simile.

Quando ha senso l'utilizzo di 10 GbE?

Per prima cosa cerchiamo di capire in cosa una scheda 10 GbE ci può essere d'aiuto. I casi di connettività 10 GbE sono abbastanza rari, non è una cosa frequente il doversi connettere alla dorsale del GARR :)
L'utilità di simili velocità però può nascere dove il firewall assume anche il ruolo di switch core e si occupa di gestire il routing di layer 3. In questi casi il firewall diventa il nodo cruciale della nostra rete e deve avere una capacità elaborativo molto sostenuta.

Il BUS di comunicazione

Il bus interno, anche se trascurato ricopre un ruolo fondamentale poichè è preposto al trasporto delle informazioni tra scheda, ram e cpu.
E'importante conoscere le caratteristiche del bus per poter effettuare una stima del traffico che è in grado di gestire.
Attualmente lo standard più diffuso è il PCIe nella versione 2.0 che ha una trasferimento per singolo canale di 500 MBs (4 Gbps). I canali sono indicati con un a x seguita da un numero. I valori disponibili sono: x1, x4, x8, x16 e x32.
Quindi avremo rispettivamente delle velocità di 4, 16, 32, 64 e 128 Gbps di throughput.
Ad un primo sguardo è possibile intuire che per gestire correttamente una scheda dual port 10 GbE è necessario un bus PCIe 2.0 x8.

Il processore e la memoria

Bus e scheda di rete si occupano del trasporto ma chi deve svolgere lo sporco lavoro di smistare i pacchetti in arrivo ed in partenza è il processore e per farlo si appoggia alla memoria cache ed alla memoria ram.
Un processore scadente può vanificare ogni sforzo così come un banco di ram scadente può fare da freno per un processore performante. 
Su quest'aspetto è difficile fare dei calcoli poichè le variabili in gioco sono tante: frequenza del processore, numero di core, tipo di memoria ecc...
Più avanti vedremo come fare un test per scoprire il thrughput gestibile dalla nostra macchina. Sicuramente non sono idonei processori atom con 1 o 2 core della prima generazione, così come possono arrancare processori core due duo. Inutile dire che processori i3, i5 ed i7 così come gli Xeon di ultima generazione potrebbero gestire svariate connessioni 10GbE.

Identificare le caratteristiche dell'hardware

Se non abbiamo un datasheet con le caratteristiche del nostro hardware è possibile ricavarle direttamente attraverso pfsense, per farlo possiamo procedere come segue:
Accediamo a Diagnostics > Command Prompt > Execute Shell Command e digitiamo il seguente comando pciconf -lc che ci restituirà l'elenco delle connessioni PCI e le loro caratteristiche.
Un esempio di output potrebbe essere quello riportato nella figura di seguito.

 


Se vogliamo indagare altri componenti possiamo usare il comando sysctl -a


Un messaggio come il seguente ci indica la presenza di un bus PCIe da 8 canali e quindi con una capacità di 32 Gbps.

PCI-Express 2 endpoint max data 128(512) FLR RO NS link x8(x8) speed 2.5(5.0) ASPM disabled(L0s)

Determinare il throughput del nostro firewall

Conoscere le caratteristiche del nostro hardware ci permette di determinare se può andare bene o no per gestire una scheda 10GbE ma se vogliamo fare un ulteriore passo e conoscere, anche se in modo empirico, le reali capacità del nostro firewall possiamo ricorrere al comando iperf e spingere il nostro hardware alla massima velocità.
Il test consiste nel utilizzare il tool iperf per fare un test interno, quindi avvieremo una sessione client ed una sessione server sulla stessa macchina facendo un test di trasferimento sull'interfaccia localhost (127.0.0.1).
Per prima cosa installiamo il package iper accedendo a System > Package Manager > Available Packages e selezioniamo iperf
Accediamo a Diagnostics > Iperf > Server, manteniamo tutti i valori di default e clicchiamo su Run iperf server
Senza chiudere la precedente sessione, apriamo una nuova sessione e ci portiamo sulla pagina Diagnostics > Command Prompt > Execute Shell Command.
Digitiamo il comando iperf -c 127.0.0.1 -P4 -w 128k -t30 e clicchiamo su Execute.
Il comando esegue iperf in modalità clinet (-c) si connette al server (127.0.0.1) apre quattro socket parallele (-P4) utilizzando una TCP windows da 128k (-w 128k) per una durata di 30 sec (-t30).

Il risultato che otterremo è simile a quello riportato in figura.


Il risultato riporta il throughput ottenuto sulle 4 socket aperte ed il totale che in questo caso è stato di 11.8 Gbps.

La stessa operazione può essere effettuata accedendo a Diagnostics > Iperf > Server.

Possiamo fare vari test variando i parametri utilizzati con il comando iperf e capire in quali situazioni il firewall raggiunge le massime prestazioni.


Oltre al throughput massimo sarebbe bene dare un occhiata anche all'utilizzo delle altre risorse. Se per raggiungere un throughput di 10 Gbps avete il processore che lavora sempre al 100% e le risorse sempre sature, forse la vostra macchina non è propriamente adatta a questo tipo di connessioni.

A questo punto abbiamo tutti gli elementi per sapere se il nostro firewall potrà supportare pienamente connessioni 10 GbE, quante ne potrà supportare.

Le schede 10 GbE

L'odissea per attivare una connessione 10 GbE non è ancora terminata, anzi, potremmo essere all'inizio. Se il vostro firewall non dispone già di una scheda 10 GbE, reperirne una potrebbe diventare un impresa ardua.

Per prima cosa occorre dire che per conoscere se una scheda è compatibile o meno con pfSense si deve far riferimento alla HCL di FreeBSD 10.3
Normalmente le schede Intel offrono una buona compatibilità ma sono difficilmente reperibili in forma non rimarchiata da HP, DELL o IBM

Un grande classico, anche se un po'datato, è la scheda Intel X520 che esiste in varie versioni a seconda del tipo di connettore impiegato. La scheda monta un chip Intel 82599
Altri chip Intel compatibili sono i più recenti i350
In alternativa potete provare a reperire le Chelsio T520-SO-CR

Nel caso delle schede Intel X520, le versioni con connettori per fibra ottica includono già i transceiver, in altri casi occorre acquistarli separatamente.

Impostazioni avanzate

Le schede di rete 10 GbE sono di norma schede molto avanzate. Per sgravare il processore della macchina che le ospitano, ricorrono a tecnologie come TCP Offload Engine (TOE), Large Recive Offload (LRO), Large Segmentation Offload (LSO) ecc...
Queste funzioni non sempre sono ben digerite dal firewall. Nel caso in cui si dovesse faticare a far funzionare correttamente la scheda di rete è possibile disabilitare alcune di queste funzionalità accedendo a System > Advanced > Networking 
Per esempio per il corretto funzionamento delle Intel X520-sr2 è necessario disabilitare Hardware TCP Segmentation Offloading e Hardware Large Receive Offloading.

Un'altra ottimizzazione possibile è l'utilizzo di quelli che vengono chiamati Jumbo Frame. Il Maximum Transmission Unit (MTU) indica la dimensione massima di un pacchetto in byte. Questo valore è normalmente impostato 1500. Su quasi tutti gli apparati è possibile portare questo valore a 9000 ottenendo così quello che viene chiamato Jumbo Frame. I Jumbo Frame permettono di ottimizzare trasferimenti di dati massicci richiedendo un numero inferiore di frame a parità di dimensione del dato da trasferire.
E'importante sapere che affinchè questa funzionalità possa essere pienamente sfruttuata occorre che tutti gli apparati interessati dalla comunicazione abbiano i Jumbo Frame attivi. Quando viene instaurata una connessione, viene effettuata la negoziazione dei parametri e tra questi viene stabilito anche il valore del MTU. In una comunicazione tra apparati con diverso MTU, quello concordato è sempre quello più basso, quindi se vogliamo sfruttare i Jumbo Frame dovremo modificare l'MTU degli switch e di tutti gli apparati interessati.

In pfSense l'MTU può essere impostato per singola interfaccia andando a modificare il campo MTU. Se il campo viene lasciato vuoto verrà impostato l'MTU di default ovvero 1500.



Posta un commento