Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

Capitolo 8. Networking

Col tempo lo stack di rete di Red Hat Enterprise Linux è stato aggiornato con numerose funzioni di ottimizzazione automatizzate. Per la maggior parte dei carichi di lavoro le impostazioni di rete auto-configurate forniscono una prestazione ottimale.
In molti casi le problematiche relative alle prestazioni sono causate da un funzionamento non corretto dell'hardware o per un errore dell'infrastruttura. Questi casi non vengono affrontati nel documento poichè le soluzioni e le problematiche discusse in questo capitolo, sono utili per l'ottimizzazione di sistemi con un funzionamento corretto.
Il Networking è un sistema molto delicato che contiene diverse sezioni con connessioni molto sensibili. Ecco perchè la community della open source e Red Hat investono gran parte del loro lavoro per ottimizzare automaticamente le prestazioni della rete. Per questo motivo dati i carichi di lavoro potreste non aver bisogno di riconfigurare il networking per migliorare le prestazioni.

8.1. Miglioramenti delle prestazioni di rete

Red Hat Enterprise Linux 6.1 apporta i seguenti miglioramenti delle prestazioni di rete:

Receive Packet Steering (RPS)

RPS abilita una coda rx del NIC singola in modo da avere il proprio carico di lavoro softirq distribuito tra diverse CPU. Questa impostazione aiuta a prevenire la congestione del traffico di rete sulla coda dell'hardware NIC singola.
Per abilitare RPS specificare i nomi di destinazione delle CPU in /sys/class/net/ethX/queues/rx-N/rps_cpus, sostituendo ethX con il nome del dispositivo corrispondente al NIC (per esempio eth1, eth2) e rx-N con la coda di ricezione del NIC specificato. Ciò permetterà alle CPU specificate nel file di processare i dati dalla coda rx-N su ethX. Quando specificate le CPU prendete in considerazione il cache affinity della coda [4].

Receive Flow Steering

RFS è una estensione di RPS e permette all'amministratore di configurare una tabella hash popolata automaticamente quando le applicazioni ricevono i dati e vengono interrogate dallo stack di rete. Così facendo verranno determinate le applicazioni che ricevono ogni sezione di dati della rete (in base alle informazioni della rete source:destination).
Utilizzando queste informazioni lo stack di rete sarà in grado di programmare la CPU ottimale per la ricezione di ogni pacchetto. Per configurare RFS usare i seguenti parametri:
/proc/sys/net/core/rps_sock_flow_entries
Usato per controllare il numero massimo di socket/flussi che il kernel è in grado di dirigere verso la CPU specificata. Questo rappresenta un limite condiviso da tutto il sistema.
/sys/class/net/ethX/queues/rx-N/rps_flow_cnt
Usato per controllare il numero massimo di socket/flussi che il kernel è in grado di dirigere verso la coda di ricezione specificata (rx-N) su di un NIC (ethX). Da notare che la somma di tutti i valori per-coda per questo parametro su tutti i NIC, deve essere uguale o minore a quello di /proc/sys/net/core/rps_sock_flow_entries.
Diversamente da RPS, RFS permette sia alla coda di ricezione che all'applicazione di condividere la stessa CPU durante la processazione del flusso di pacchetti. Questa impostazione in alcuni casi migliora le prestazioni. Tuttavia questi miglioramenti dipendono da fattori tipo gerarchia della cache, carico dell'applicazione ecc.

Supporto getsockopt per TCP thin-stream

Thin-stream è un termine usato per indicare i protocolli di trasporto dove le applicazioni inviano dati ad una velocità così bassa che i meccanismi di ritrasmissione del protocollo non risultano completamente saturi. Le applicazioni che utilizzano protocolli thin-stream eseguono un trasporto usando protocolli affidabili come TCP; in molti casi queste applicazioni forniscono servizi di tipo time-sensitive (per esempio stock trading, giochi online, sistemi di controllo).
Per servizi "time-sensitive" la perdita dei pacchetti può essere devastante per la qualità del servizio. Per prevenirla è stata migliorata la chiamata getsockopt che ora supporta due opzioni aggiuntive:
TCP_THIN_DUPACK
Per thin stream, questo valore booleano abilita l'attivazione dinamica delle ritrasmissioni dopo un dupACK.
TCP_THIN_LINEAR_TIMEOUTS
Per thin stream, questo valore booleano abilita l'attivazione dinamica dei timeout lineari.
Entrambe le opzioni sono attivate dall'applicazione. Per maggiori informazioni consultare file:///usr/share/doc/kernel-doc-version/Documentation/networking/ip-sysctl.txt. Per maggiori informazioni sui thin-stream consultare file:///usr/share/doc/kernel-doc-version/Documentation/networking/tcp-thin.txt.

Supporto Transparent Proxy (TProxy)

Il kernel supporta ora i socket UDP e IPv4 TCP assegnati non-localmente per il supporto del transparent proxy. Per poterlo abilitare configurare iptables in modo adeguato. Sarà necessario altresì abilitare e configurare correttamente la politica di instradamento.
Per maggiori informazioni sui transparent proxy consultare file:///usr/share/doc/kernel-doc-version/Documentation/networking/tproxy.txt.


[4] Prendere in considerazione il cache affinity tra una CPU ed un NIC significa configurarli in modo da condividere la stessa cache L2. Per maggiori informazioni consultare Sezione 8.3, «Panoramica sulla ricezione dei pacchetti».