Link Aggregation - Istituto Nazionale di Fisica Nucleare
Transcript
Link Aggregation - Istituto Nazionale di Fisica Nucleare
Università degli Studi di Genova Facoltà di Scienze Matematiche Fisiche e Naturali Corso di Laurea in Informatica Analisi di funzionalità e prestazioni del protocollo 802.3ad Link Aggregation su infrastruttura di rete Gigabit Ethernet Tesi di Laurea di Alessandro Solimando Relatore: Prof. Alessandro Brunengo Anno Accademico 2007/2008 Indice Introduzione v 1 Analisi e comprensione della topologia della rete in esame 1 1.1 . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 I dischi . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.2 I disk-server . . . . . . . . . . . . . . . . . . . . . . . . 3 La rete locale . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.1 Gli host . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2.2 Switch e Router . . . . . . . . . . . . . . . . . . . . . . 4 2 Test sul corretto funzionamento della rete allo stato attuale 5 1.2 2.1 2.2 Il sistema di storage Introduzione agli strumenti utilizzati per la misura delle prestazioni: netperf e dstat . . . . . . . . . . . . . . . . . . . . . 5 Validazione strumenti di misurazione . . . . . . . . . . . . . . 6 3 Descrizione e configurazione dello switch BlackDiamond 8800 8 3.1 Approfondimento sulle VLAN . . . . . . . . . . . . . . . . . . 3.2 Gestione e configurazione dello switch per il Bonding . . . . . 10 4 Configurazione degli host per il Bonding 4.1 8 16 Caricamento e configurazione del modulo del kernel . . . . . . 16 Indice ii 4.1.1 /etc/modprobe.conf . . . . . . . . . . . . . . . . . . . . 16 4.2 Definizione dell’interfaccia di rete per il Bonding: bond0 . . . 17 4.3 Riconfigurazione delle interfacce di rete eth0 ed eth1 4.3.1 . . . . . 18 Monitoraggio delle impostazioni del modulo . . . . . . 20 5 Test di performance con diverse configurazioni del Bonding 22 5.1 5.2 Traffico in direzione della macchina in bonding (farm06) . . . 23 5.1.1 Static L2 . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.1.2 Static L3 . . . . . . . . . . . . . . . . . . . . . . . . . . 26 5.1.3 LACP L2 ed L3 . . . . . . . . . . . . . . . . . . . . . . 28 Traffico in uscita dalla macchina in bonding (farm06) . . . . . 29 5.2.1 Mode = xor balancing (Statico) con xmit hash policy = 0 (L2) . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.2.2 Mode = xor balancing (Statico) con xmit hash policy = 1 (L3+L4) . . . . . . . . . . . . . . . . . . . . . . . 31 5.2.3 Mode = 802.3ad (LACP) con xmit hash policy = 0 (L2) e Mode = 802.3ad (LACP) con xmit hash policy = 1 (L3+L4) . . . . . . . . . . . . . . . . . . . . . . . 31 5.3 Test di tolleranza alla disconnessione fisica di un link . . . . . 34 5.4 Considerazioni conclusive sulla scelta del protocollo per il bonding 36 6 Prestazioni della infrastruttura di produzione 39 6.1 Dettaglio della infrastruttura di storage . . . . . . . . . . . . . 39 6.2 File system GPFS . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.2.1 Accesso al file system . . . . . . . . . . . . . . . . . . . 41 6.3 Valutazione del sistema in produzione . . . . . . . . . . . . . . 41 6.4 Confronto di performance dei disk-server e dei file system . . . 42 6.4.1 Prestazioni in scrittura . . . . . . . . . . . . . . . . . . 42 Indice iii 6.5 Analisi in lettura . . . . . . . . . . . . . . . . . . . . . . . . . 44 7 Analisi dell’utilizzo dei dischi gestiti dai disk-server 46 7.1 Definizione del layout per i test . . . . . . . . . . . . . . . . . 47 7.2 Test su borex1 dev . . . . . . . . . . . . . . . . . . . . . . . . 48 7.3 Test su farm1 dev . . . . . . . . . . . . . . . . . . . . . . . . . 49 7.4 Test con doppio accesso . . . . . . . . . . . . . . . . . . . . . 52 7.5 Test su farm1 dev con stesso file . . . . . . . . . . . . . . . . . 53 7.6 Considerazioni sui test con accesso al disco . . . . . . . . . . . 57 8 Conclusioni 58 8.1 Algoritmo di smistamento . . . . . . . . . . . . . . . . . . . . 58 8.2 Protocollo di gestione delle interfacce . . . . . . . . . . . . . . 58 8.3 Sistema di monitoraggio delle interfacce . . . . . . . . . . . . . 59 8.4 Test sugli host farm 8.5 Test sull’infrastruttura in produzione . . . . . . . . . . . . . . 59 8.6 Valutazione conclusiva . . . . . . . . . . . . . . . . . . . . . . 60 . . . . . . . . . . . . . . . . . . . . . . . 59 A RAID 61 B Approfondimento su alcune tipologie di test di netperf 64 C Dettaglio sui parametri del modulo 66 D Riepilogo per la scelta della modalità di bonding 74 Bibliografia 77 . . . una dedica Introduzione La rete locale del Centro Calcolo della sezione di Genova dell’INFN1 è prevalentemente costituita da una infrastruttura Ethernet commutata, ed utilizza un backbone in Gigabit Ethernet che permette velocità non superiori ad 1 Gbps. Nuove applicazioni di prossima attivazione, in particolare quelle legate alla analisi dati degli esperimenti in fase di attivazione sull’acceleratore LHC2 del CERN3 di Ginevra, presentano esigenze di banda di accesso ai dati che sicuramente eccederanno tale limite. La naturale evoluzione della rete è orientata verso la realizzazione di un’infrastruttura a 10 Gigabit Ethernet, il cui costo però è ancora elevato. Una soluzione alternativa può essere il link aggregation, conosciuto anche come port trunking o bonding, che consiste nel definire una interfaccia di rete virtuale corrispondente alla aggregazione di due o più interfacce fisiche. Questa tecnica permette di utilizzare le interfacce fisiche come se fossero una singola interfaccia di rete, con una capacità trasmissiva pari alla somma delle interfacce aggregate. Il basso costo di schede Gigabit Ethernet, anche in considerazione che i server attuali già dispongono di due interfacce di rete integrate sulla scheda madre, permetterebbe di incrementare la banda verso i server di disco a costi molto 1 Istituto Nazionale di Fisica Nucleare Large Hadron Collider 3 Conseil Européen pour la Recherche Nucléaire 2 Introduzione vi contenuti. Le caratteristiche del link aggregation offrono inoltre funzionalità interessanti come il bilanciamento del traffico tra le interfacce aggregate ed il failover su eventuali guasti alle singole connessioni. Il presente lavoro è finalizzato a testare le diverse configurazioni disponibili per il bonding e valutarne le funzionalità di failover e di prestazioni, dapprima con test memory-to-memory, poi con reali accessi al sistema di storage della infrastruttura in produzione. Capitolo 1 Analisi e comprensione della topologia della rete in esame 1.1 Il sistema di storage Lo storage disponibile nella infrastruttura in produzione consiste di svariate decine di terabyte di spazio disco resi disponibili da controller Raid, ed esportati tramite diversi disk server. La complessità dello storage ed esigenze di affidabilità e flessibilità di gestione hanno richiesto l’utilizzo di una SAN (Storage Area Network ), cioè di una rete di tipo switched dedicata allo storage, in tecnologia Fibre Channel [1] per la connessione server-disco. 1.1.1 I dischi La maggior parte dei dischi sono di tipo SATA, organizzati in batterie, ognuna servita da un doppio controller Raid per motivi di ridondanza. I dischi sono aggregati in volumi gestiti tramite RAID 1 di livello 5 e 6, in gruppi di 4 o 8 più i dischi di ridondanza. L’organizzazione mediante RAID ha imposto, per ogni volume oggetto di test, 1 Per un approfondimento sui diversi sistemi RAID consultare l’Appendice A a pagina 61. Capitolo 1. Analisi e comprensione della topologia della rete in esame Figura 1.1: Rete di studio 2 Capitolo 1. Analisi e comprensione della topologia della rete in esame 3 un’indagine riguardo la block-size e relativa stripe-size in quanto costituiscono fattori che hanno impatto sulle prestazioni di I/O. 1.1.2 I disk-server Tutta l’infrastruttura di calcolo è costituita da calcolatori su cui è installato il sistema operativo Linux, nelle distribuzioni SLC4 [2] e SL5 [3]. Lo stesso sistema è installato sui diversi disk server che esportano i volumi. Tutti i server sono biprocessori Intel o AMD, dual o quad core, dotati di 4 o 8 GB di RAM, e forniti di una interfaccia di rete Gigabit Ethernet operativa e di una seconda interfaccia di rete identica alla prima ma inattiva, oltre ad una scheda Fibre Channel dual head per la connessione alla SAN. Per motivi di prestazioni e di flessibilità i volumi sono esportati tramite il file system di rete distribuito e parallelo GPFS (General Parallel File System), un file system proprietario IBM ideato appositamente per gestire accessi concorrenti e volumi distribuiti [4]. La coerenza dei dati e il locking sui file sono gestiti tramite demoni che girano sia sui disk-server che sui client; questi demoni sono in comunicazione fra loro, ed in grado di sincronizzare le proprie informazioni (riguardanti i dati, metadati e i lock sulle porzioni del file system) in modo da garantire la consistenza del file system anche in occasione di accessi concomitanti ai suoi volumi. 1.2 1.2.1 La rete locale Gli host La farm è attualmente costituita da circa 50 nodi di calcolo biprocessori Intel o AMD a 32 o 64 bit, dual o quad core e sia i server che i client fanno uso del Sistema Operativo Scientific Linux CERN 4. I nodi di calcolo sono Capitolo 1. Analisi e comprensione della topologia della rete in esame 4 suddivisi per architettura e per gruppo sperimentale di proprietà, ma la configurazione utilizza un meccanismo di condivisione delle risorse che permette agli utenti di utilizzare tutta la potenza di calcolo disponibile anche se non di proprietà. 1.2.2 Switch e Router Nella rete locale sono presenti uno switch di core Extreme Networks Black Diamond 8800, dotato di 112 interfacce di rete Gigabit Ethernet in rame o fibra ottica, per l’interconnessione delle macchine (sia per quanto riguarda i nodi di calcolo che i disk-server) e che svolge anche funzioni di routing interno tra le reti IP locali, ed un router per la connessione geografica verso l’esterno della rete locale INFN. Sia i client che i server sono collegati allo switch mediante interfacce di rete Gigabit-Ethernet. La LAN, date le dimensioni non trascurabili, è partizionata attraverso il meccanismo delle VLAN per evitare la replicazione di parte dell’hardware. Le VLAN, necessarie a capire l’organizzazione della rete di studio, saranno trattate in maggior dettaglio alla sezione 3.1 a pagina 8. Capitolo 2 Test sul corretto funzionamento della rete allo stato attuale 2.1 Introduzione agli strumenti utilizzati per la misura delle prestazioni: netperf e dstat Netperf [6] è un’applicazione di pubblico dominio sviluppata da Hewlett Packard per effettuare misurazioni sulle capacità di trasmissione e ricezione fra due macchine collegate. È composto da una componente client (netperf ) e da una server (netserver ) che dialogano generando flussi di traffico controllati in modo da calcolare la capacità trasmissiva della singola connessione. Il server è un demone che resta in ascolto su una porta TCP che può essere scelta tramite il parametro “-p”. Il client è un applicativo interattivo al quale bisogna specificare il nome del server e la porta TCP su cui aprire la comunicazione, il tempo di durata ed il tipo di test. Le tipologie di test utilizzate per questi test di controllo sono state TCP STREAM e UDP STREAM, i quali generano rispettivamente traffico TCP e UDP in direzione della macchina su cui è in ascolto Capitolo 2. Test sul corretto funzionamento della rete allo stato attuale 6 netserver. In alcuni casi si è anche fatto ricorso a TCP MAERTS, analogo a TCP STREAM ma con il flusso dati in senso contrario, ovvero generato dal server in direzione del client. Alcune tra le rimanenti tipologie di test sono state riportate in appendice B. Dstat [7] è un tool che, leggendo opportuni contatori del kernel Linux tramite il file system /proc, è in grado di mostrare statistiche riguardanti la macchina su cui è in esecuzione, fornendo diversi dati fra i quali l’utilizzo di CPU, della rete e dell’accesso al disco. La capacità di separare i contatori delle singole interfacce di rete o relativi ai singoli volumi di storage ne fa lo strumento ideale per la nostra sperimentazione. 2.2 Validazione strumenti di misurazione Questi test iniziali sono stati realizzati senza configurazione di bonding allo scopo di verificare il corretto rilevamento dei dati da parte dei programmi utilizzati e il corretto funzionamento delle interfacce di rete e dei cavi di collegamento, nonché dello switch di core che le collega. I test unidirezionali sono avvenuti fra le 4 macchine prese in esame, rispettivamente farm06, farm07, farm08 e farm09. Le misurazioni sono state effettuate a partire da ciascuna delle quattro macchine verso le altre 3, sia per quanto riguarda il protocollo TCP che per l’UDP, generando traffico con netperf e confrontando i dati di questo programma con quelli forniti in output dalle istanze di dstat (una per ogni macchina interessata dal singolo test). Durante i test con entrambi i protocolli si sono raggiunti stabilmente i 118 MB/s, cor- Capitolo 2. Test sul corretto funzionamento della rete allo stato attuale 7 rispondenti a circa 944 Mbps, su tutte le coppie di connessione tra le quattro macchine. Il risultato è ragionevole tenendo conto che il mancato raggiungimento del limite teorico di 125 MB/s è da imputare al limite intrinseco delle interfacce di rete e dei protocolli utilizzati (gestione degli interrupt, separazione dei frame, gestione delle connessioni). Capitolo 3 Descrizione e configurazione dello switch BlackDiamond 8800 3.1 Approfondimento sulle VLAN La gestione della rete in esame si basa fortemente sull’utilizzo delle VLAN (Virtual Local Area Network), un’astrazione che permette la ripartizione logica di un’unica rete locale in una serie di reti virtualmente distinte tra loro grazie ad una particolare etichettatura dei frame [8]. Ogni VLAN sarà identificata da un id univoco sulla rete, detto VLAN Tag o VLAN ID, che sarà inserito utilizzando 4 byte aggiuntivi nell’header dei frame trasmessi. Esistono diverse implementazioni di questa tecnologia, più o meno compatibilitra loro. Tuttavia è stato definito un protocollo standard per l’implementazione di tale tecnica, noto con la sigla IEEE 802.1Q. Tutti gli apparati della rete locale di produzione supportano questo standard, cosı̀ come le più recenti distribuzioni di linux utilizzate localmente. Le singole porte degli switch della rete locale dovranno essere assegnate ad una o più VLAN, cioè faranno parte di una o più reti virtuali, in modalità tagged o untagged : Capitolo 3. Descrizione e configurazione dello switch BlackDiamond 8800 9 • quando una porta è assegnata ad una VLAN in modalità tagged, i frame appartenenti a quella VLAN in uscita sulla porta manterranno la tag nell’header. Se la tag è assente, lo switch la inserirà prima di trasmettere il frame; quando arriva un frame con tag nell’header, cioè appartenente ad una certa VLAN, attraverso una porta, questo frame sarà accettato solo se quella porta è associata alla VLAN in modalità tagged. • quando una porta è associata ad una VLAN in modalità untagged, un frame appartenente a quella VLAN che debba essere trasmesso in uscita su quella porta verrà privato della tag prima di essere inviato; in ingresso, un frame privo di tag verrà accettato ed assegnato automaticamente alla VLAN a cui la porta è associata in modalità untagged. Questa tecnica permette agli switch di trattare correttamente i frame in transito, evitando trasmissioni degli stessi verso rami non appartenenti alla VLAN corretta. La modalità untagged permette agli stessi switch di trasmettere i frame privi di tag verso porzioni di rete (switch o host) che non sarebbero in grado di identificare correttamente l’header esteso contenente la TAG della VLAN. Sostanzialmente due VLAN differenti si comportano come se fossero due reti locali distinte, ed il transito di dati da una all’altra richiede la presenza di un apparato di routing che possa fare il forward del pacchetto attraverso il confine tra le VLAN. Il principale vantaggio di questa tecnica stà nel fatto di poter separare in più reti virtualmente distinte gli apparati connessi alla stessa rete locale fisica, per motivi di sicurezza, di management o semplicemente per limitare il flusso di messaggi broadcast sempre presenti su una rete locale alle sole porzioni della rete di interesse, migliorando la prestazione globale della rete. Capitolo 3. Descrizione e configurazione dello switch BlackDiamond 880010 La rete su cui è stata svolta la sperimentazione è suddivisa in diverse reti virtuali, di cui le principali sono dedicate a diversi gruppi sperimentali ed una dedicata ai server di calcolo ed ai server di disco. Queste reti interne sono connesse a livello 3 (cioè a livello di routing) dal core switch, che quindi opera non solo come switch vero e proprio ma anche come router. 3.2 Gestione e configurazione dello switch per il Bonding Lo switch a cui sono collegate le 4 macchine di test (farm06, farm 07, farm08, farm09) e i disk-server è un BlackDiamond 8800 della Extreme Networks, switch modulare a 10 slot configurato attualmente con due schede di rete di management e due schede di switching a 48 porte in Gigabit-Ethernet in rame. Lo switch supporta il Link Aggregation con diverse politiche di smistamento del traffico sulle diverse porte appartenenti al LAG (Link Aggregation Group), la porta logica che le rappresenta, il corrispettivo dell’interfaccia logica per il bonding su un host. Le porte appartententi ad un singolo LAG devono avere la stessa velocità e i diversi LAG devono avere insiemi a intersezione nulla fra loro. L’ExtremeWare XOS 11.3, il Sistema Operativo presente sullo switch, supporta il Link Aggregation tra porte posizionate su schede diverse, in modo da poter garantire maggior robustezza anche contro il malfunzionamento di un intero modulo. Capitolo 3. Descrizione e configurazione dello switch BlackDiamond 880011 Nel caso di utilizzo delle VLAN, queste vedranno il LAG come un’unica porta virtuale, detta master port, definita al momento della creazione del LAG stesso. Inserire una porta in un LAG avrà come side-effect la sua eliminazione da tutte le VLAN in cui era stata precedentemente configurata, ciò perché, a livello logico, quella porta non può essere più referenziata direttamente nel VLAN database1 , in quanto parte di una porta logica, il LAG. La porta aggiunta verrà automaticamente inserita nelle VLAN configurate per il LAG. Link Aggregation Statico e Dinamico: La tecnica di aggregazione statica richiede che le porte appartenenti al LAG siano predefinite e la cardinalità del loro insieme può variare solo diminuendo. Ciò avviene nel caso in cui un link perda connettività: in questo caso il traffico, se possibile, viene ridistribuito ed eventualmente bilanciato sulle rimanenti porte. In caso il link precedentemente fallito ritorni ad essere disponibile verrà reintegrato dinamicamente nel LAG. Questa modalità non prevede però nessuna forma di dialogo con il device connesso alle porte del LAG. Quest’ultimo deve essere configurato opportunamente per evitare malfunzionamenti, anche gravi, sullo switch e sull’intera rete locale. Il link aggregation dinamico, al contrario,permette di definire un insieme di porte appartenenti al LAG in modo che solo una parte di esse venga utilizzato attivamente, mentre le altre rimangono in stato di standby, pronte a subentrare al posto di link rilevati in fallimento. In questo modo, in occasione di una failure, la capacità trasmissiva del LAG non diminuisce come nel caso statico, ma viene mantenuta grazie alla attivazione delle porte in stand-by. 1 Ovvero il database utilizzato internamente dallo switch. Capitolo 3. Descrizione e configurazione dello switch BlackDiamond 880012 La modalità dinamica si basa sul LACP (Link Aggregation Control Protocol) che fa parte dello standard 802.3ad ed è utilizzabile solo se il dispositivo remoto utilizza anch’esso questa modalità. La sincronizzazione con la controparte precede sempre l’invio di dati ed avviene per mezzo di uno scambio di LACPDU (Link Aggregation Control Protocol Data Unit) che rappresentano dei frame di controllo definiti dal protocollo LACP. Inizialmente tutte le porte del LAG sono in uno stato detto unselected e non vengono utilizzate per l’invio di dati (ad esclusione dei LACPDU). In seguito, dopo la sincronizzazione con il dispositivo remoto, verrà scelto il sottoinsieme di porte aventi MAC address minore fra quelle correttamente sincronizzate, le altre saranno messe in standby (mentre le porte non sincronizzate manterranno lo stato unselected). È eventualmente possibile definire diversi criteri per la priorità nella scelta delle porte, che saranno anche utlizzati per scegliere il sostituto di una porta in fallimento fra quelle in standby. È da notare che si avranno delle porte in standby se e solo se le porte selected saranno in numero maggiore rispetto a quelle definite per il LAG. Algoritmi di smistamento del traffico: La scelta della porta fisica attraverso cui instradare un frame sul LAG può essere effettuata in base a diversi algoritmi. Il firmware del core switch permette di utilizzare due diversi algoritmi, sia nel caso statico che dinamico. L’algoritmo con scelta in base all’indirizzo di livello 2 utilizza una funzione dipendente dai MAC address sorgente e destinazione, mentre quello di livello 3 utilizzerà gli indirizzi IP. In caso sia scelto un algoritmo di livello 3 e arrivino pacchetti non IP verrà comunque utilizzato l’algoritmo basato sul Capitolo 3. Descrizione e configurazione dello switch BlackDiamond 880013 MAC address, che è anche la scelta di default. Configurazione pratica dello switch: 1. Creazione di un LAG consistente in almeno una porta (la master-port): enable sharing <port> grouping <port_list> {algorithm [address-based {L2|L3}]} {lacp} dove: - <port> indica la master-port, in caso di switch modulare il formato sarà numeroModulo:numeroPorta. Va sottolineato che il LAG prenderà come identificativo il nome della master-port. - <port list> indica la lista delle porte del LAG, dove andrà specificata anche la master-port; si può anche specificare in modo compatto un range di porte contigue con il formato portaInizioRangeportaFineRange. - algorithm indica l’algoritmo di smistamento dei frame. - L2 (Layer 2) ed L3 (Layer 3) indicano se l’algoritmo address based utilizzerà il MAC Address (indirizzo di Layer 2) o l’IP (indirizzo Layer 3) per la scelta della porta su cui far uscire il frame. - Il parametro opzionale lacp, invece, indica se utilizzare Link Aggregation Statico (default) o Dinamico (specificando lacp al fondo). Per disabilitare un LAG si deve fare ricorso al seguente comando: disable sharing <port> dove <port> è la master-port definita per il LAG. 2. Aggiunta o rimozione di porte dal LAG: Capitolo 3. Descrizione e configurazione dello switch BlackDiamond 880014 configure sharing <port> add ports <port_list> configure sharing <port> delete ports <port_list> Vincoli generali: • Il numero massimo di LAG configurabili sullo switch è pari a 32. • Il tipo delle porte di un LAG può essere eterogeneo2 , ma devono tutte avere la stessa capacità trasmissiva. Qualora si utilizzasse un mix di porte in fibra e rame è opportuno disabilitare su queste ultime l’autonegoziazione della velocità. • Le porte non devono essere necessariamente contigue e non devono per forza appartenere allo stesso modulo. Vincoli per la configurazione statica: • Un LAG statico può essere costituito da al più 8 porte. Vincoli per la configurazione dinamica: • Il numero massimo di porte è pari a 16, di cui al più 8 utilizzate e 8 in standby. Comandi di verifica e visualizzazione delle configurazioni: • verifica dello stato del Link Aggregation: show ports sharing • visualizzazione delle informazioni relative al LACP: show lacp 2 Come ad esempio fibra ottica e cavo in rame. Capitolo 3. Descrizione e configurazione dello switch BlackDiamond 880015 • visualizzazione delle informazioni relative ad un singolo LAG: show lacp lag <group-id> {detail}, dove: - <group-id> è rappresentato dalla master-port del LAG. - detail, se specificato, aumenta la verbosità del resoconto. • visualizzare informazioni su una porta di uno specifico LAG: show lacp member-port <port> {detail}, dove: - <port> è l’id univoco della porta. - detail, se specificato, aumenta il dettaglio del resoconto. • azzerare le statistiche e i contatori: clear lacp counters Per una trattazione più dettagliata dei comandi di verifica e diagnostica si rimanda a [9]. La disponibilità di tali configurazioni ha reso l’infrastruttura di rete a disposizione idonea alla sperimentazione del Link Aggregation, in quanto dovranno essere configurati un LAG per ogni server, e ciascun LAG dovrà aggregare due interfacce di rete. Capitolo 4 Configurazione degli host per il Bonding La configurazione del bonding su un host con Sistema Operativo Linux prevede il caricamento di un omonimo modulo del kernel [10], la specifica dei parametri per il suo funzionamento, la configurazione di un’interfaccia virtuale che rappresenterà l’aggregato e delle interfacce fisiche da aggregare in essa. 4.1 4.1.1 Caricamento e configurazione del modulo del kernel /etc/modprobe.conf Il caricamento del modulo va effettuato modificando il file /etc/modprobe.conf che serve ad installare e rimuovere moduli del kernel, definire alias e specificare opzioni. Il bonding è già disponibile nelle principali distribuzioni di linux server-oriented1 senza necessità di ricompilare il kernel ed è stato solamente necessario aggiungere un alias e specificare le opzioni per il modulo. 1 tra cui la Scientific Linux utilizzata nella rete di studio Capitolo 4. Configurazione degli host per il Bonding 17 Di seguito un esempio di istruzioni aggiunte a /etc/modprobe.conf: alias bond0 bonding options bonding mode=4 miimon=100 xmit_hash_policy=1 L’alias permette il caricamento automatico del modulo bonding se l’interfaccia virtuale bond0 risulterà configurata. Le opzioni riportate sopra indicano rispettivamente: - mode=4: impone una gestione delle interfacce aggregate secondo il protocollo 802.3ad. - miimon=100: stabilisce l’intervallo in millisecondi tra un controllo e l’altro dello stato delle interfacce. - xmit hash policy=1: indica l’utilizzo di una politica di smistamento dei frame basata sugli indirizzi Layer 2. Le altre opzioni disponibili per il modulo del bonding sono riportate in dettaglio nell’appendice C. Per verificare che il modulo sia stato effettivamente caricato si può utilizzare il comando lsmod che visualizza con una formattazione chiara il contenuto di /proc/modules, ovvero la lista dei moduli caricati ed alcune informazioni aggiuntive a loro relative. 4.2 Definizione dell’interfaccia di rete per il Bonding: bond0 In RedHat Enterprise Linux e distribuzioni basate su di essa, al caricamento della rete, vengono lette le informazioni sulla configurazione delle interfacce da file residenti nella directory /etc/sysconfig/network-scripts aventi il Capitolo 4. Configurazione degli host per il Bonding 18 seguente formato per il nome: ifcfg-<nome_interfaccia>. Per quanto riguarda l’interfaccia virtuale da utilizzare per il bonding è stato quindi necessario creare il file ifcfg-bond0 contenente le seguenti righe di configurazione: DEVICE=bond0 ONBOOT=yes BOOTPROTO=dhcp USERCTL=no dove: • DEVICE indica il nome dell’interfaccia di rete. • ONBOOT = yes forza il caricamento dell’interfaccia all’avvio. • BOOTPROTO = dhcp indica rispettivamente di utilizzare il procollo DHCP (Dynamic Host Configuration Protocol) e ricevere da un server apposito l’indirizzo IP e gli altri parametri per la rete. L’alternativa è una definizione statica di queste informazioni2 • USERCTL = no impedisce che lo stato dell’interfaccia possa essere modificato anche da utenti non privilegiati. 4.3 Riconfigurazione delle interfacce di rete eth0 ed eth1 Sempre nella directory /etc/sysconfig/network-scripts sono stati modificati i file ifcfg-eth0 ed ifcfg-eth1 per configurare le due interfacce come dipendenti da bond0 e non più disponibili indipendentemente: 2 Fra cui le principali sono: Indirizzo IP, Net-mask, Default Gateway, indirizzi dei server DNS. Capitolo 4. Configurazione degli host per il Bonding 19 cat /etc/sysconfig/network-scripts/ifcfg-eth0 (prima delle modifiche): DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes TYPE=Ethernet cat /etc/sysconfig/network-scripts/ifcfg-eth0 (dopo le modifiche): DEVICE=eth0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet MASTER=bond0 SLAVE=yes Il file ifcfg-eth1 è analogo, quindi per brevità non sarà riportato. Si può notare come sia stato cambiato il Boot Protocol da dhcp a none perché essendo le interfacce eth0 ed eth1 aggregate nell’interfaccia virtuale bond0 esse non saranno più visibili ed utilizzabili singolarmente, perciò sarà necessario impostare l’indirizzo IP e il MAC Address solo per bond03 . Sono altresı̀ state aggiunte le informazioni MASTER=interfacciaMaster, dove interfacciaMaster è il nome dell’interfaccia virtuale utilizzata per il bonding, e SLAVE=yes per indicare che l’utilizzo dell’interfaccia sarà soggetto e subordinato alla master appena definita. Per distribuzioni che non supportano tali file per la configurazione delle intefacce di rete si dovrà ricorrere all’utility ifenslave con la seguente sintassi: ifenslave <interfacciaMaster> <interfacciaSlave> 3 Il primo ricevuto dal DHCP Server, il secondo preso dalla prima interfaccia tra quelle aggregate, ma modificabile manualmente tramite il file di configurazione opppure tramite ifconfig. Capitolo 4. Configurazione degli host per il Bonding 4.3.1 20 Monitoraggio delle impostazioni del modulo Ogni interfaccia virtuale di bonding possiede un file di sola lettura nella directory /proc/net/bonding. Con la configurazione di esempio mostrata nel paragrafo precedente, mediante il comando cat /proc/net/bonding/bond0 si avrà il seguente output: Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005) Bonding Mode: IEEE 802.3ad Dynamic link aggregation MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 802.3ad info LACP rate: slow Active Aggregator Info: Aggregator ID: 5 Number of ports: 2 Actor Key: 17 Partner Key: 3007 Partner Mac Address: 00:04:96:1d:cd:60 Slave Interface: eth0 MII Status: up Link Failure Count: 3 Permanent HW addr: 00:30:48:7e:2d:0a Aggregator ID: 5 Slave Interface: eth1 MII Status: up Link Failure Count: 3 Permanent HW addr: 00:30:48:7e:2d:0b Aggregator ID: 5 Il formato e le informazioni variano in dipendenza dalla modalità di bonding utilizzata, dallo stato e dalla versione del driver per il bonding in uso, si può comunque scevrare uno scheletro comune: Capitolo 4. Configurazione degli host per il Bonding 21 nella parte iniziale vengono visualizzate le informazioni generali sulle impostazioni per il bonding, come ad esempio la modalità di gestione dei link (statico o dinamico) e l’algoritmo di smistamento del traffico utilizzato. Successivamente viene dettagliato lo stato per ogni singola interfaccia aggregata tramite il bonding. Capitolo 5 Test di performance con diverse configurazioni del Bonding Per poter effettuare un confronto sotto il profilo del throughput, del bilanciamento del carico e dell’affidabilità sono stati svolti diversi test utilizzando le varie configurazioni possibili al fine di identificare la più adatta per la rete di studio, sia per quanto riguarda il modulo del kernel per gli host, sia per le opzioni offerte dallo switch. Queste prove sono state realizzate utilizzando quattro calcolatori dedicati: Figura 5.1: configurazione test con flussi diretti verso il server uno (farm06) dotato di due interfacce di rete Gigabit Ethernet configurate in bonding e quindi facente funzioni di server, e altri tre calcolatori uguali al server (farm07, farm08 e farm09), ma utilizzati come client e configurati con un link Gigabit Ethernet ciascuno (vedi fig. 5.1). Capitolo 5. Test di performance con diverse configurazioni del Bonding 23 5.1 Traffico in direzione della macchina in bonding (farm06) Questi test sono finalizzati a verificare la funzionalità dei diversi algoritmi di smistamento del traffico operati dallo switch, generando flussi di dati concomitanti dai client verso il server, ed anche a valutare un eventuale impatto del layer del bonding sulle prestazioni delle singole interfacce di rete. Lo smistamento del traffico dei tre client dovrebbe permettere di saturare la doppia interfaccia del server e di bilanciare i flussi tra client concorrenti. Allo scopo di valutare le funzionalità dei due protocolli (statico e dinamico) nei due possibili algoritmi di instradamento dei frame disponibili (basati su indirizzi MAC o indirizzi IP), sul modulo numero 3 dello switch sono state definite quattro coppie di porte in bonding con diverse configurazioni: • (3:1, 3:2): Link Aggregation Statico e algoritmo di redistribuzione dei pacchetti basato su indirizzi di livello 2 • (3:3, 3:4): Link Aggregation Statico e algoritmo basato su indirizzi di livello 3 • (3:5, 3:6): Link Aggregation Dinamico (LACP) e algoritmo basato su indirizzi di livello 2 • (3:7, 3:8): Link Aggregation Dinamico (LACP) e algoritmo basato su indirizzi di livello 3 5.1.1 Static L2 In questa configurazione l’algoritmo di smistamento applicato dallo switch determina l’interfaccia di uscita di ciascun frame, tra quelle aggregate, se- Capitolo 5. Test di performance con diverse configurazioni del Bonding 24 condo la formula: (S M AC ⊕ D M AC) % slave count dove • S MAC: l’indirizzo hardware della macchina sorgente, cioè della scheda di rete denominate eth0 • D MAC: l’indirizzo hardware dell’interfaccia virtuale di farm06, ovvero il MAC address del destinatario • slave count: pari a 2 nel nostro caso, equivalente al numero di schede di rete aggregate. Sono stati realizzati diversi test utilizzando uno, due e tre client concomitanti, sia con protocollo TCP che con protocollo UDP. Si vede chiaramente in fig. 5.2 che il comportamento non è quello auspicato, in quanto tutto il traffico viene instradato attraverso una sola interfaccia del server, eth1, mentre attraverso l’altra non passano dati. Questo accade perché le interfacce di tutti e tre i client hanno un MAC address pari, per cui l’algoritmo di selezione sceglie per i tre flussi sempre la stessa interfaccia in uscita. Va considerato che gli odierni calcolatori utilizzati come server di calcolo vengono prodotti con due interfacce di rete integrate sulla scheda madre, i cui indirizzi sono sequenziali. Quasi sempre la prima delle due interfacce ha indirizzo pari, per cui il problema osservato non è da considerarsi un fatto contingente ma un potenziale problema che si verificherebbe quasi sempre, annullando di fatto la funzionalità di aggregazione del bonding. Per aggirare questo problema si potrebbe procedere ad un reindirizzamento delle schede di rete dei client in modo opportuno, ma questa opzione non Capitolo 5. Test di performance con diverse configurazioni del Bonding 25 Figura 5.2: Static/L2: flusso concomitante dei tre client verso il server; viene utilizzata solo una interfaccia di rete che satura a 118 MB/s, mentre l’altra non viene utilizzata è consigliabile in quanto comporterebbe un carico di lavoro aggiuntivo e la necessità di tenere conto degli indirizzi ridefiniti per evitare duplicazioni, con conseguente divergenza della complessità di gestione per una rete non banale come quella in esame. Test effettuati generando flussi non concomitanti tra i client ed il server hanno confermato questo comportamento: tutti i flussi utilizzano la stessa interfaccia di rete del bonding verso il server. Va comunque osservato che la banda aggregata che si ottiene raggiunge i 118 MB/s, cioe’ satura l’interfaccia Gigabit Ethernet utilizzata, e che la banda disponibile viene equamente ripartita tra i diversi client (vedi fig. 5.3): questo conferma che l’utilizzo del bonding in modalità statica non comporta un calo di prestazioni e che il protocollo bilancia correttamente la banda Capitolo 5. Test di performance con diverse configurazioni del Bonding 26 Figura 5.3: Static/L2: flusso concomitante dei tre client verso il server; viene utilizzata solo una interfaccia di rete che satura a 118 MB/s, con la banda ripartita equamente fra i tre client disponibile tra i diversi utilizzatori. 5.1.2 Static L3 La porta di uscita per il singolo frame, in questa modalità, sarà determinata dallo switch secondo la seguente formula: (S IP ⊕ D IP ) % slave count dove • S IP: l’indirizzo IP della macchina sorgente. • D IP: l’indirizzo IP del destinatario. • slave count: equivale al numero di schede di rete aggregate. Capitolo 5. Test di performance con diverse configurazioni del Bonding 27 La ripartizione del traffico in questo caso dipende evidentemente dagli indirizzi IP, che possono essere definiti in modo opportuno più facilmente rispetto agli indirizzi di livello 2. L’utilizzo di questo algoritmo dovrebbe permettere di ripartire il traffico su entrambe le interfacce di rete. In fig. 5.4 si può osservare come l’algoritmo selezioni porte differenti per i diversi client, raggiungendo un throughput aggregato pari a ∼236 MB/s, corrispondente di fatto alla saturazione delle due interfacce in bonding. I flussi provenienti dai tre client vengono distribuiti uno verso una interfaccia e due verso l’altra; in questo modo un client (farm08) dispone ed utilizza interamente la banda di 1 Gbps, gli altri due (farm07 e farm09) si suddividono equamente la banda dell’altra interfaccia, ottenendo ∼58 MB/s ciascuno (cioè circa 466 Mbps). Figura 5.4: Static/L3: traffico TCP da 3 client verso il server con saturazione di entrambe le interfacce Gigabit Ethernet. Capitolo 5. Test di performance con diverse configurazioni del Bonding 28 5.1.3 LACP L2 ed L3 Questi test sono finalizzati a misurare funzionalità e prestazioni del bonding realizzato tramite il protocollo di aggregazione dinamico LACP. Poiché gli algoritmi di smistamento del traffico sono indipendenti dalla tipologia di bonding, ci si aspetta che il comportamento coincida con quello dei test relativi alla sezione 5.1.1 e 5.1.2 Figura 5.5: LACP/L3: tre flussi concomitanti verso il server: sono mostrati i contatori sulle singole interfacce del server, e l’aggregato; la banda disponibile viene completamente saturata (236 MB/s) Le misure dimostrano che anche il protocollo dinamico LACP ha piena funzionalità e permette di raggiungere un throughput aggregato pari a ∼236 MB/s, saturando entrambe le interfacce del server, qualora si utilizzi l’algoritmo basato sugli indirizzi IP (L3) (vedi fig. 5.5). Capitolo 5. Test di performance con diverse configurazioni del Bonding 29 5.2 Traffico in uscita dalla macchina in bonding (farm06) Il traffico in uscita dal server viene instradato verso una delle interfacce aggregate in base ad algoritmi implementati nel driver del bonding installato sul server, che sono diversi da quelli che operano sul traffico in ingresso e che sono implementati nel firmware dello switch; è quindi necessario verificarne la funzionalità generando ed analizzando flussi dal server verso i client. Il driver del bonding permette la scelta fra due algoritmi per lo smistamento dei frame, uno basato sui MAC address (L2) del tutto identico all’algoritmo utilizzato dallo switch, l’altro che dipende sia dagli indirizzi IP che dalle porte TCP o UDP utilizzate dagli applicativi che comunicano. Quest’ultimo è quindi un algoritmo che lavora ai livelli 3 e 4 dei protocolli di rete. Si configura la scelta dell’algoritmo tramite il parametro xmit hash policy: xmit_hash_policy = 0: algoritmo L2 (indirizzi hardware) xmit_hash_policy = 1, algoritmo L3+L4 (indirizzi IP e porte TCP/UDP) In quest’ultimo caso l’interfaccia verso cui instradare il frame è determinata dalla formula: ((S P ORT ⊕ D P ORT ) ⊕ ((S IP ⊕ D IP ) ⊕ 0xffff)) % slave count dove - S PORT: porta sulla macchina sorgente - D PORT: porta sulla macchina di destinazione - S IP: indirizzo IP della macchina sorgente - D IP: indirizzo IP della macchina di destinazione Capitolo 5. Test di performance con diverse configurazioni del Bonding 30 - slave count: corrisponde al numero di interfacce in bonding La dipendenza dalle porte TCP o UDP rende virtualmente impossibile prevedere quale interfaccia verrà utilizzata in quanto spesso gli applicativi utilizzano porte scelte dinamicamente, perciò al di là del nostro controllo. In questa situazione la distribuzione dei flussi sulle diverse interfacce del bonding è garantita a livello statistico. 5.2.1 Mode = xor balancing (Statico) con xmit hash policy = 0 (L2) Figura 5.6: Static/L2: traffico TCP dal server verso 2 client; i due client condividono e saturano la stessa interfaccia GE. Utilizzando l’algoritmo basato sul MAC address il comportamento atteso dovrebbe essere conforme a quanto avveniva generando traffico in direzione contraria (Sezione 5.1.1). Capitolo 5. Test di performance con diverse configurazioni del Bonding 31 I test effettuati (figura 5.6) hanno avuto l’esito previsto: tutto il traffico passa su una sola interfaccia, eth0. 5.2.2 Mode = xor balancing (Statico) con xmit hash policy = 1 (L3+L4) L’utilizzo di un algoritmo basato su indirizzi IP e numero di porte TCP/UDP, dovrebbe permettere di redistribuire i flussi su più d’una interfaccia, in modo analogo all’algoritmo L3 implementato dallo switch. Dai grafici si nota come in un caso (figura 5.7) vengano utilizzate entrambe le interfacce di rete riuscendo cosı̀ a raggiungere i 2 Gbps, e come nell’altro (figura 5.8) si abbia l’utilizzo di una sola scheda, rimanendo limitati alla velocità di 1 Gbps. Tale difformità è conseguenza del fatto che netperf utilizza porte dinamiche: evidentemente nel secondo caso la combinazione di porte ed indirizzi IP delle due connessioni è stata tale da determinare la stessa interfaccia per l’instradamento dei due flussi, lasciando quindi una interfaccia inutilizzata e limitando il throughput aggregato ad un solo link Gigabit Ethernet. Nel primo caso si è invece riusciti a sfruttare completamente la banda offerta dal bonding. 5.2.3 Mode = 802.3ad (LACP) con xmit hash policy = 0 (L2) e Mode = 802.3ad (LACP) con xmit hash policy = 1 (L3+L4) Cosı̀ come per lo switch, anche per l’host la tipologia di bonding non influenza lo smistamento dei frame, perciò i risultati attesi erano analoghi a quelli delle sezioni 5.2.1 e 5.2.2, come confermato dai test mostrati in fig. 5.9 e 5.10. Capitolo 5. Test di performance con diverse configurazioni del Bonding 32 Figura 5.7: Static/L3+L4: traffico TCP dal server verso 2 client; il traffico si distribuisce sulle due interfacce GE e le saturano entrambe. Figura 5.8: Static/L3+L4: traffico TCP dal server verso 2 client: in questo caso i flussi condividono e saturano la stessa interfaccia GE. Capitolo 5. Test di performance con diverse configurazioni del Bonding 33 Figura 5.9: LACP/L2: traffico in uscita dal server; viene utilizzata una sola interfaccia GE. Figura 5.10: LACP/L3+L4: taffico in uscita dal server; entrambe le interfacce del server vengono saturate. Capitolo 5. Test di performance con diverse configurazioni del Bonding 34 5.3 Test di tolleranza alla disconnessione fisica di un link Uno dei requisiti per l’utilizzo in produzione del bonding sulla rete in esame è la robustezza a eventi dannosi quali la perdita di un link, qualunque ne sia la causa. A questo proposito sono state testate le due diverse tipologie di gestione dei link a disposizione, quella statica e quella dinamica, entrambe con algoritmo di smistamento di tipo L3 (L3+L4 lato server) in modo da saturare la banda, scenario in cui una riduzione dei link dovrebbe avere un esito visibilmente negativo. Per questi test è stato utilizzato netperf perché in grado di generare traffico a piena banda con possibilità di scegliere il protocollo. Interessava altresı̀ verificare il comportamento di una generica applicazione di file transfer, perciò si è fatto ricorso al comando cp mediante l’utilizzo di NFS (Network File System), grazie a cui è possibile montare file system remoti su una macchina locale. I file trasferiti con cp avevano tutti la dimensione di 16 GByte in modo di avere un tempo di trasferimento sufficientemente lungo da permettere un monitoraggio significativo. La perdita di un link è stata simulata disconnettendo fisicamente uno dei due cavi in rame dallo switch, successivamente riattaccato per controllare che il traffico riprendesse a fluire come prima dell’interruzione, chiaramente verificando eventuali errori. Per quanto riguarda la configurazione del modulo di bonding sulla macchina Capitolo 5. Test di performance con diverse configurazioni del Bonding 35 farm06 è stato utilizzato un miimon pari a 100, valore in grado di fornire reattività nell’individuare il cambio di stato di un link senza però stressare troppo la macchina con un controllo troppo frequente. Le misure effettuate utilizzando il protocollo statico sono mostrate in fig. 5.11 (contatori lato server) ed in fig. 5.12 (contatori lato client), mentre i test con LACP sono mostrati in fig. 5.13 e 5.14 (sempre lato server e client rispettivamente). Figura 5.11: Static, contatori delle interfacce lato server: dopo 60 secondi è stato disconnesso il link eth0, riconnesso poi dopo 10 secondi. Si può notare come la disconnessione non influisca negativamente sul link ancora connesso e come il traffico riprenda regolarmente al momento della riconnessione. In tutti i test eseguiti non è stato rilevato alcun errore. Al momento della disconnessione l’host rilevava correttamente l’accaduto (come è stato verificato controllando i messaggi di diagnostica del kernel) riducendo la banda e continuando il trasferimento, senza errori, sull’unico link rimasto per poi tornare a piena banda su entrambe le tratte al momento della riconnessione. Capitolo 5. Test di performance con diverse configurazioni del Bonding 36 Figura 5.12: Static, contatori delle interfacce lato client; dal grafico appare evidente come al momento della disconnessione del link i 3 client condividano equamente la banda disponibile. La reazione alla perdita del link è quindi pienamente soddisfacente ed in linea con quanto atteso. 5.4 Considerazioni conclusive sulla scelta del protocollo per il bonding Le misure effettuate hanno mostrato una completa equivalenza tra il protocollo statico e quello dinamico sia per quanto riguarda le prestazioni che per le funzionalità di failover e di bilanciamento. Tuttavia l’utilizzo del protocollo dinamico, oltre ad essere uo standard riconosciuto, offre superiori garanzie di protezione della rete locale, in quanto l’attivazione del link avviene solo dopo un controllo sulla corretta configurazione di entrambi i lati della connessione Capitolo 5. Test di performance con diverse configurazioni del Bonding 37 Figura 5.13: LACP lato server: si può ossevare chiaramente come il throughput aggregato scende a 118 MB/s con un solo link disponibile. Durante questo periodo le tre istanze di netperf condividono la banda disponibile dell’unico link attivo. Figura 5.14: LACP lato client: il grafico evidenzia chiaramente come al momento della disconnessione del cavo, nell’intervallo che va dal secondo 60 all’80, il flusso dati verso i 3 client si riduca alla velocità di 1 Gbps. Capitolo 5. Test di performance con diverse configurazioni del Bonding 38 aggregata. Per questo motivo si è scelto di utilizzare in seguito il protocollo di aggregazione dinamico. Per quanto riguarda la scelta dell’algoritmo di instradamento dei frame, si è potuto vedere come l’algoritmo basato sugli indirizzi MAC spesso impedisce un completo sfruttamento della banda aggregata, non soltanto in conseguenza del più o meno casuale indirizzamento concorde delle schede dei server. Si deve infatti considerare che ogni qualvolta l’accesso ai server avvenga attraverso un processo di routing (cioè di instradamento a livello 3), i frame in entrata ed in partenza dai server avranno sempre come destinataria l’interfaccia ethernet dell’apparato che effettua il routing (il router di frontiera per le connessioni esterne alla rete locale, o lo switch di core per le connessioni provenienti da VLAn diverse da quella di appartenenza dei server). Poiché nella configurazione locale molti client sono collocati su VLAN diverse da quella dei server, questo effetto sarebbe frequente. Per questo motivo nel seguito si è scelto di utilizzare gli algoritmi basati sugli indirizzi L3 lato switch e sugli indirizzi L3+L4 lato server. Capitolo 6 Prestazioni della infrastruttura di produzione Per poter analizzare in modo completo la tecnologia in esame, è necessario effettuare test con effettivo accesso al sistema di storage, in quanto lo scopo della sperimentazione è ottenere un aumento di banda verso i dischi. Si è quindi reso indispensabile utilizzare l’infrastruttura in produzione, l’unica in grado di offrire un sistema disco capace di supportare il carico di I/O necessario a dimostrare la validità della soluzione tecnologica. 6.1 Dettaglio della infrastruttura di storage Lo storage di produzione e’ costituito da un insieme di sei disk server che esportano volumi acceduti tramite una Storage Area Network via protocollo Fibre Channel con link a 4 Gbps (vedi fig. 1.1). Ogni server è connesso alla SAN da una scheda Fibre Channel dual head attraverso due switch per motivi di ridondanza. I sistemi disco sono costituiti da tre batterie di dischi SATA gestite ciascuna da un doppio controller RAID con interfaccia Fibre Channel per la connessione alla SAN. Ciascuna coppia di controller ha configurato la propria batteria Capitolo 6. Prestazioni della infrastruttura di produzione 40 di dischi in volumi Raid 5 o Raid 6, per garantire prestazioni ed affidabilità al sistema. Ciascun disk server esporta quindi una parte dei volumi configurati sui controller di disco; per motivi di prestazioni e di flessibilità sui volumi sono configurati diversi file system di tipo GPFS (General Parallel File System), un file system parallelo sviluppato e distribuito da IBM. I meccanismi di funzionamento di questo file system devono essere analizzati per poter pianifilcare correttamente i test che si desidera realizzare. 6.2 File system GPFS Un file system GPFS è costituito dalla unione di uno o più volumi fisici, che vengono visti come un unico contenitore (il file system, appunto) la cui dimensione è pari alla somma delle dimensioni dei volumi aggregati. I volumi, che nel nostro caso sono i volumi esportati dai controller raid, vengono chiamati NSD (Network Shared Disk) e resi disponibili ai client da uno o più server (detti NSD server). In una infrastruttura SAN, in cui uno stesso volume può essere visto direttamente da più di un server, è possibile configurare GPFS in modo che quel volume sia esportato da un server primario, ma che altri server secondari possano intervenire in sostituzione del primo in caso di guasto, senza perdere di funzionalità; in questo modo si realizza un sistema di accesso al disco altamente affidabile grazie a ridondanze multiple (sul volume Raid, sul doppio controller, sul path multiplo della SAN, ed infine sul disk server) che proteggono da qualsiasi guasto singolo. Capitolo 6. Prestazioni della infrastruttura di produzione 6.2.1 41 Accesso al file system GPFS realizza l’accesso (in scrittura ed in lettura) al file system facendo striping su tutti gli NSD che costituiscono il file system stesso. Questo permette di parallelizzare gli accessi aumentando notevolmente le prestazioni di I/O: se abbiamo un file system costituito da N NSD, e si vogliono eseguire N distinte operazioni di I/O (ad esempio quando si deve leggere o scrivere sequenzialmente un grosso file), queste vengono eseguite contemporaneamente una su ciascun NSD, distribuendo cosı̀ il carico di lavoro di I/O su diversi volumi. Se gli NSD sono esportati da server differenti, si potrà anche parallelizzare gli accessi su più server; in questo modo si aumenta la banda oltre i limiti della capacità di I/O del disco o della capacità di banda del singolo server. 6.3 Valutazione del sistema in produzione Nella configurazione attuale del sistema di storage sono configurati più di 25 NSD, raggruppati in una decina di file system GPFS, ed esportati da 6 disk server. Questi file system hanno prestazioni piuttosto differenti in funzione dell’età dell’hardware, e della capacità di banda del singoli controller. Si deve quindi avere una iniziale valutazione di quali siano i file system più performanti per poter identificare una piattaforma opportuna di test su cui operare. Le prove descritte nel presente capitolo sono finalizzate proprio a questo scopo, e sono state effettuate prima di configurare il bonding sui disk server. Capitolo 6. Prestazioni della infrastruttura di produzione 6.4 42 Confronto di performance dei disk-server e dei file system I test sono stati realizzati mediante l’impiego di 14 client della farm di produzione, creando opportuni script, ciascuno dei quali esegue sequenzialmente scrittura e lettura di 128 file da 1 GB con una block-size di 512 KByte1 . Gli script sono stati sottomessi come batch job sulla farm di produzione tramite il batch system LSF (Load Sharing Facility), che è stato opportunamente configurato per dedicare slot sui client selezionati per questa specifica funzione. 6.4.1 Prestazioni in scrittura Ognuna delle 14 macchine per il test ha eseguito un job consistente in uno Shell Script che effettuasse la scrittura mediante l’utility dd2 e riportasse il tempo impiegato per scrivere ciascun file nel file job# .out. Successivamente è stato utilizzato uno script per analizzare i file di output e calcolare la media del tempo necessario a completare la scrittura dei file per ciascuna macchina. Di seguito la tabella riassuntiva per il test effettuato: 1 Valore ottimale in quanto in grado di sfruttare al meglio lo striping offerto dall’organizzazione dei dischi mediante RAID 6. 2 Utility in grado di copiare in modalità raw interi dischi o partizioni, oppure di specificare una grandezza in byte dei dati. La modalità raw consiste nella copia fisica dei dati a prescindere dall’organizzazione del file system e della tavola delle partizioni. Capitolo 6. Prestazioni della infrastruttura di produzione Job # Macchina File System 43 Disk-Server Valor medio di scrittura (sec) 1 atlas08 aiace2 fs gpfs5, gpfs6 116 2 atlas07 geant4 fs gpfs3 138 3 atlas09 home fs gpfs2 N/A 4 aiace05 borex1 fs gpfs3, gpfs4 64 5 aiace01 atlas1 fs gpfs3, gpfs4 55 6 aiace06 borex1 fs gpfs3, gpfs4 64 7 totem01 farm1 fs gpfs3, gpfs4 64 8 aiace04 babar0 fs gpfs5, gpfs6 107 9 aiace02 atlas1 fs gpfs3, gpfs4 55 10 totem03 geant4 fs gpfs3 130 11 totem02 farm1 fs gpfs3, gpfs4 64 12 aiace03 babar0 fs gpfs5, gpfs6 109 13 geant12 aiace3 fs gpfs3, gpfs4 64 14 geant13 aiace3 fs gpfs3, gpfs4 64 15 teo15 aiace2 fs gpfs5, gpfs6 106 16 teo16 home fs gpfs2 N/A I test 3 e 16, anche se pianificati, non sono stati portati a termine in quanto avrebbero sovraccaricato il file system dove risiedono le home directory utente causando disservizi non tollerabili. La differenza di prestazioni sui diversi file system è dovuta in parte al diverso numero di dischi disponibili per ognuno, in parte al disk-server incaricato di esportarlo (e più precisamente al numero di file system che esso deve gestire) e in parte dalla ripartizione sulle diverse batterie di dischi gestite da diversi controller. La configurazione è troppo complessa per procedere con una stima sommaria, si è perciò preferito non scendere nel dettaglio in quanto al Capitolo 6. Prestazioni della infrastruttura di produzione 44 di fuori dell’argomento di indagine. Si sono tuttavia potuti selezionare i file system fra i più performanti da utilizzare per i successivi test di stress del sistema di storage e rete annessa: aiace3 fs, borex1 fs, farm1 fs; il file system atlas1 fs non è stato preso in considerazione per via della sua configurazione che lo rende inadatto alla sperimentazione in oggetto: esso è infatti costituito da 3 NSD che, per un errore di configurazione, sono esportati dallo stesso server; l’utilizzo del bonding su questo file system risulterebbe meno efficace che negli altri casi. Tutti i file system sopracitati sono serviti dai disk-server GPFS3 e GPFS4, sui quali verrà configurato il bonding. 6.5 Analisi in lettura Il test in lettura è strutturato in modo speculare a quello per la scrittura, sempre mediante Job ma stavolta con l’ausilio di uno script che effettui operazioni di lettura anziché scrittura, sempre tramite dd. Poiché erano già stati individuati i file system più performanti si è proceduto alla misura del throughput in lettura solo per questi. Job # Macchina File System Disk-Server Valor medio di lettura (sec) 1 totem01 farm1 fs gpfs3, gpfs4 30 2 totem02 farm1 fs gpfs3, gpfs4 30 3 aiace05 borex1 fs gpfs3, gpfs4 31 4 aiace06 borex1 fs gpfs3, gpfs4 32 5 geant12 aiace3 fs gpfs3, gpfs4 32 6 geant13 aiace3 fs gpfs3, gpfs4 32 I risultati per i diversi file system sono risultati accettabili e pressochè identi- Capitolo 6. Prestazioni della infrastruttura di produzione 45 ci fra loro. L’aggregato delle prestazioni su questi file system in lettura è pari a circa 200 MB/s, cioè vicina alla saturazione delle due interfacce Gigabit Ethernet disponibili per l’accesso agli NSD, una per ciascun server. Capitolo 7 Analisi dell’utilizzo dei dischi gestiti dai disk-server Questi ultimi test sono dedicati a misurare il throughput massimo ottenibile dal sistema di storage configurando in bonding le due interfacce di rete dei server di disco. La configurazione del bonding utilizzata è quella che associa il protocollo dinamico (LACP) con l’algoritmo basato sugli indirizzi L3 (lato switch) e L3+L4 (lato server). In base a quanto visto nel cap. 6 si è deciso di operare soltanto sui file system più performanti, tutti serviti dai soli due server gpfs3 e gpfs4. Tutti i file system in questione sono costituiti da due NSD; per ottimizzare le prestazioni ciascun NSD di un file system è servito da un server diverso. La definizione del layout dei test deve essere fatta in modo da permettere in linea teorica di saturare la banda disponibile. Come mostrato in fig. 7.1, in cui per semplicità non è mostrato il dettaglio della SAN, ogni NSD dispone di 4 Gbps verso il server che la esporta (link Fibre Channel), che a sua volta offre un link a 2 Gbps (il bonding delle interfacce di rete) verso la rete locale. Ogni accesso al file system viene pa- Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 47 Figura 7.1: path di accesso ai volumi del singolo file system: i client devono essere scelti in modo che tutte le interfacce di rete dei server siano completamente utilizzate. rallelizzato sui due NSD, quindi l’aggregato disponibile verso il file system è di 4 Gbps. Poichè ogni client dispone di un link ad 1 Gbps (la sua interfaccia Gigabit Ethernet), sarà necessario generare flussi concomitanti da almeno quattro client. Tutte le misure verranno fatte in scrittura ed in lettura, anche se si prevede che solo queste ultime saranno in grado di fornire un throughput sufficiente a saturare i 4 Gbps disponibili. 7.1 Definizione del layout per i test Se si vuole saturare la banda, i client dovranno essere scelti in modo che l’algoritmo di instradamento del bonding operi bilanciando il traffico verso i quattro client su tutte le interfacce dei server. A questo proposito deve essere fatta una considerazione relativa al fatto che l’algoritmo dipende non solo dagli indirizzi IP ma anche dalle porte TCP Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 48 utilizzate nelle singole connessioni, almeno per i flussi uscenti dai server: in principio i numeri di porta non sono controllabili, perchè scelti dinamicamente dagli applicativi; tuttavia GPFS opera in modo da permetterci di prevedere la strada che prenderanno i dati verso i diversi client, perchè la scelta della porta, sia sui server che sui client, viene fatta al bootstrap e non cambia fino al successivo restart. In queste condizioni è possibile eseguire una mappatura dei cammini seguiti dai flussi in funzione del client, e scegliere opportunamente quattro client che possano saturare entrambe le interfacce dei due server. Per ogni singolo client utilizzato nei test seguenti, ove non espressamente specificato, si è fatto ricorso ad un file da 8 GByte, sia in lettura che in scrittura. L’elevata dimensione permette di annullare eventuali effetti di caching dei disk server e dei controller di disco che potrebbero alterare le misure; in particolare, per verificare che i dati trasmessi sulla rete fossero stati effettivamente letti da disco, sono sempre stati misurati tramite dstat i throughput sia sulle interfacce di rete che sull’accesso al disco. Durante tutte le prove sono stati monitorati anche i valori dei contatori della CPU per riscontrare eventuali anomalie o carico eccessivo, ma nulla di tutto ciò è stato riscontrato in nessuno dei test condotti. 7.2 Test su borex1 dev I test in scrittura (fig. 7.2) mostrano come si raggiunga sulla rete un throughput aggregato medio di ∼310 MB/s (2.4 Gbps) sul file system, con punte fino a 400 MB/s (3.2 Gbps). Il risultato e’ ottimo e già sufficiente a dimostrare come la tecnologia del bonding permetta di superare il limite dei 2 Gbps. In lettura (fig. 7.3) si ottengono prestazioni leggermente migliori: ∼340 MB/s (2.7 Gbps) in media, e punte di quasi 450 MB/s (3.6 Gbps). Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 49 In entrambi i grafici si può notare che il flusso da e verso il server gpfs4 risulta essere abbastanza regolare, mentre quello relativo a gpfs3 presenta delle cadute evidenti per intervalli temporali significativi. Per capire se questo fenomeno fosse in qualche modo legato all’utilizzo del bonding è stato svolto un test di lettura utilizzando un solo client e, come si può vedere dalla fig. 7.4, l’interruzione del flusso dati riguardante gpfs3 si è verificata anche in questo caso. Analizzando nel dettaglio la configurazione dei due NSD (Network Shared Disk) relativi al file system in uso ci si è accorti che le loro dimensioni sono diverse, rispettivamente pari a 6 TByte e 4 TByte, mentre l’occupazione percentuale dei due NSD è identica. Ne consegue che il file system GPFS realizza lo striping sugli NSD di uno stesso file system bilanciando le scritture in modo da occupare equamente i diversi NSD a livello percentuale e non assoluto. Nel nostro caso, avendo gli NSD dimensioni diverse, GPFS necessariamente dovrà scrivere più spesso sull’NSD più grande, bilanciando cosı̀ l’occupazione percentuale. Questo è il motivo per cui nei test precedenti il server gpfs3 ciclicamente interrompe la sua attività: è infatti proprio gpfs3 a servire l’NSD più piccola. Una situazione del tutto analoga si presenta ovviamente anche in lettura. 7.3 Test su farm1 dev Per verificare la nostra ipotesi sono stati svolti test su farm1 dev, uno dei file system selezionati al cap. 6, che è costituito da due NSD di uguale dimensione. In figura 7.5 è mostrato il grafico relativo alla scrittura contemporanea di quattro client. Dopo una fase iniziale il throughput si attesta con una certa stabilità intorno ai 390 MByte/s, pari a circa 3.1 Gbps. A differenza Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 50 Figura 7.2: quattro client in scrittura su borex1 dev; sono mostrati il throughput in entrata sul bonding dei due server e l’aggregato, ed il throughput aggregato di scrittura su disco (WRITE). Figura 7.3: quattro client in lettura su borex1 dev; anche in questo caso sono mostrati i throughput delle interfacce dei due server, la loro somma, e la somma del throughput di I/O in lettura dal disco. Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 51 Figura 7.4: La caduta di throughput verso gpfs3 nonostante la lettura su borex1 dev da parte di un singolo client mostra come questo comportamento avvenga indipendentemente dall’utilizzo del bonding di quanto accadeva con il file system borex1 dev, i due disk-server hanno un flusso dati perfettamente bilanciato, dimostrando come il bonding non fosse responsabile dell’asimmetria. Per quanto riguarda la lettura (fig. 7.6), sempre mediante quattro client, la velocità media raggiunta è stata circa la stessa, con punte fino a 450 MB/s. Dal grafico si nota che poco dopo i 60 secondi si è verificato un calo di prestazioni, questa volta su entrambi i flussi dei due disk-server; questo è probabilmente dovuto a qualche operazione di I/O eseguita dai server ma non legata al nostro test, evento possibile in una rete in produzione come quella utilizzata. Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 52 Figura 7.5: quattro client in scrittura su farm1 dev: i flussi sono sempre bilanciati sui due server 7.4 Test con doppio accesso Il test di fig. 7.7 è stato svolto con quattro client per ciascuno dei due file system utilizzati in precedenza per verificare la velocità massima ottenibile, che è risultata essere stabilmente sopra i 3.2 Gbps, ben oltre i 2 Gbps ottenibili senza bonding. Anche in questo test si notano gli effetti prodotti dalla asimmetria degli NSD di uno dei due file system, che però pesa in modo minore per via del contributo simmetrico degli accessi all’altro file system. Osservando il grafico si può notare ancora una volta come il calo subito da borex1 dev non si verifichi su farm1 dev grazie alla ripartizione simmetrica di quest’ultimo sui diversi dischi, ripartizione che permette di sfruttare al meglio lo striping, permesso dall’organizzazione dei dischi tramite RAID 6. Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 53 Figura 7.6: quattro client in lettura su farm1 dev 7.5 Test su farm1 dev con stesso file I test effettuati fin’ora erano finalizzati a valutare le prestazioni dell’accesso al disco annullando eventuali effetti di ottimizzazione dovuti alle cache del file system e dei controller. A questo scopo sono stati utilizzati file differenti per ciascun client, e di dimensioni tali da impedire qualsiasi efficacia delle cache. Il test descritto nel presente paragrafo ha invece lo scopo di verificare quali siano i reali limiti nell’utilizzo della banda disponibile, sempre associato ad un reale accesso al disco, mettendo il disco in condizioni di non essere collo di bottiglia. Sono quindi stati eseguiti due test in lettura con quattro ed otto client che hanno letto contemporaneamente lo stesso file, sempre di 8 GB. In questo modo eventuali ottimizzazioni delle cache dovrebbero apparire evidenti. Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 54 Figura 7.7: test con quattro client in accesso contemporaneo per ognuno dei due file system I test sono stati fatti operando sul file system farm1 fs, per evitare i comportamenti asimmetrici visti nei paragrafi precedenti. In fig. 7.8) si può osservare come in questa condizione il flusso di dati sulla rete si attesti stabilmente intorno ai 460 MB/s, pari a ∼3.7 Gbps, che costituiscono la saturazione delle quattro interfacce dei server. Nella stessa figura è anche mostrato il throughput dei dati letti dal disco, o più precisamente letti dalle schede FC dei server e quindi trasmessi dal controller del disco verso la SAN. Come si può vedere il flusso si attesta stabilmente intorno ai 440 MB/s; questo significa che non è stata la cache del file system ad intervenire, perchè la quantità di dati buttati su rete equivale alla quantità di dati letti dai controller, ma piuttosto la cache dei controller stessi, i quali, dovendo servire più volte gli stessi dati letti dai dischi, non hanno dovuto operare letture mul- Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 55 Figura 7.8: lettura da parte di quattro client di uno stesso file su farm1 dev tiple dello stesso file. In questo modo i dati sono risultati essere disponibili senza ritardi legati alla lettura fisica dai dischi, e le prestazioni hanno potuto saturare la banda di rete disponible. In fig. 7.9 è mostrato il grafico relativo ad 8 client concomitanti in lettura sullo stesso file: il grafico è assolutamente identico al precedente. Questo mostra come l’aumento di connessioni sulla rete non comporta inefficienze sulle prestazioni del bonding. Sia nel primo che nel secondo test si nota una discrepanza fissa fra il throughput aggregato di rete dei due disk server (indicato come aggregato-recv in entrambi i grafici) e il throughput in lettura del disco, sempre aggregato. La differenza è dovuta al fatto che la quantità di byte letti dal disco ed inviati sulla rete non è la stessa, per via degli overhead dei protocolli di rete. Il frame ethernet inviato sulla rete è costituito dai seguienti campi: • header Ethernet: il protocollo utilizza un header di 14 byte Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 56 Figura 7.9: lettura da parte di otto client di uno stesso file su farm1 dev • header IP: nella versione IPv4, quella utilizzata, consiste di 20 byte • header TCP: questo è costituito dai 20 byte standard più 14 Byte di parte opzionale (2 byte di NOOP e una coppia di 6 byte per il timestamp), il cui utilizzo è stato verificato tramite l’utility tcpdump • campo dati: questo campo contiene i dati che vengono letti da disco ed inviati alla applicazione remota, ed è costituito da 1446 byte • trailer Ethernet: costituito da 4 byte di Frame Check Sequence L’overhead totale dovuto ai protocolli di rete risulta quindi di 72 byte sui 1518 trasmessi verso i client, cioè pari a circa il 5%, esattamente lo scarto fra i valori misurati nei test. Capitolo 7. Analisi dell’utilizzo dei dischi gestiti dai disk-server 7.6 57 Considerazioni sui test con accesso al disco La serie di misure effettuate dimostra che la tecnologia del port trunking permette di ottenere prestazioni eccellenti sulla rete anche in associazione ad un elevato I/O di accesso al disco. L’architettura ed il dimensionamento dei server disponibili sulla infrastruttura di produzione sono idonei a sostenere questo throughput, sia per la banda passante offerta dalle schede che per la potenza di CPU disponibile sui server, che non sono mai andati in sofferenza. Per poter sfruttare opportunamente la banda disponibile si devono tuttavia considerare attentamente tutti i fattori che concorrono a limitarne l’efficienza. Nella configurazione locale, ad esempio, una errata configurazione dei volumi e dei file system comporta una perdita del 13% rispetto alla configurazione bilanciata. Inoltre gli ultimi test hanno mostrato che, sfruttando la cache del controller, le prestazioni arrivino a saturare tutte le interfacce disponibili; questo implicitamente significa che nei test precedenti il limite reale è costituito dall’accesso fisico ai dati sui dischi. Anche questo è un fattore da tenere in considerazione per realizzare un sistema ad alte prestazioni: è necessario parallelizzare gli accessi ai volumi per poter raggiungere le prestazioni desiderate. Capitolo 8 Conclusioni 8.1 Algoritmo di smistamento La scelta dell’algoritmo di smistamento per il bilanciamento è ricaduta su L2-L3 per quanto concerne lo switch ed L2-L3-L4 per il modulo del bonding. Il solo utilizzo degli indirizzi di livello 2, infatti, anche se teoricamente garantisce il bilanciamento, nella rete di studio non era applicabile per la presenza di soli MAC Address pari e per la difficoltà di tener conto nell’economia di gestione presente e futura di un evenutuale renumbering di tali indirizzi. Un altro motivo che ha portato all’esclusione dell’algoritmo Layer 2 è stato il traffico proveniente dalla WAN1 i cui pacchetti, per via dell’operazione di rotazione effettuata dal router, assumevano come indirizzo sorgente il MAC Address di quest’ultimo, impedendo cosı̀ il bilanciamento. 8.2 Protocollo di gestione delle interfacce Per il protocollo invece, la scelta è ricaduta sull’802.3ad perché più sicuro della versione statica: la negoziazione con la controparte infatti, impedisce che eventuali errori di configurazione o collegamento dei cavi portino a mal1 Ma più in generale il traffico passante per il router. Capitolo 8. Conclusioni 59 funzionamenti che potrebbero ripercuotersi sull’intera rete locale, evento mai auspicabile, tantomeno su un’infrastruttura di rete in produzione, come nel nostro caso. 8.3 Sistema di monitoraggio delle interfacce Per quello che riguarda il sistema di monitoraggio delle interfacce dell’host con il modulo del bonding, è stata esclusa la soluzione che fa uso di pacchetti Arp la quale, in presenza di traffico non bilanciato dove uno o più link non vengono utilizzati, porterebbe a considerare in fallimento anche i link inutilizzati ma funzionanti, per l’assenza di Arp Reply su di essi. Si è invece preferito il mii-monitoring che agisce a livello di interfaccia di rete monitorandone lo stato reale, aspetto che lo rende decisamente più affidabile. 8.4 Test sugli host farm Le prove, di tipo memory to memory, condotte sulle infrastrutture di test hanno confermato come il comportamento sia effettivamente conforme a quanto la tecnologia promette, sia per quanto riguarda il bilanciamento, sia per la fault-tolerance, sia per l’aumento del throughput. I test condotti su queste macchine dedicate erano volti alla valutazione della sola tecnologia, escludendo per quanto possibile altri fattori esterni, quali l’accesso disco o l’utilizzo massivo della rete da parte di terzi, requisiti impossibili da ottenere in una rete in produzione. 8.5 Test sull’infrastruttura in produzione I test sulle infrastrutture in produzione, con accesso al sistema di storage, mostrano come sia possibile raddoppiare la banda disponibile verso il file Capitolo 8. Conclusioni 60 system fino a raggiungere la velocità di 470 MB/s2 . Si evidenzia anche come per ottenere le massime prestazioni la configurazione debba essere effettuata con cura (ad esempio per quel che riguarda il bilanciamento del throughput verso gli NSD) in quanto sono molti i fattori che concorrono e una loro scelta non oculata può impedire di sfruttare appieno le potenzialità offerte dalla tencologia di bonding. 8.6 Valutazione conclusiva La tecnologia in esame si è rivelata a tal punto soddisfacente per quel che concerne gli aspetti di affidabilità, bilanciamento del traffico e aumento del throughput che la configurazione, utilizzata per condurre i test e le sperimentazioni del presente lavoro, è stata mantenuta ed è tutt’ora utilizzata dai sistemi di storage in produzione della sezione di Genova dell’INFN. 2 circa 3,7 Gbps Appendice A RAID RAID (Redundant Array of Independent Disks): metodologia Hardware e Software di organizzazione dei dischi al fine di aumentarne l’affidabilità, la tolleranza ai guasti e l’efficienza. Vi sono diverse tipolgie che pongono maggiormente l’accento su uno degli aspetti sopra elencati, vedremo le principali RAID 0 detto anche striping, partiziona i dati in segmenti di uguale dimensione e sceglie il disco su cui scrivere secondo una politica di alternanza Round Robin. In questo modo si aumenta l’efficienza, si dimunisce l’affidabilità (si moltiplicano i punti di fallimento, ognuno dei quali porta potenzialmente alla perdita dell’intero file system) e non v’è alcuna ridondanza o controllo di parità sui dati. RAID 1 detto anche mirroring, implementato mediante la replicazione totale dei dati su un altro disco, aumentando cosı̀ l’affidabilità grazie alla ridondanza completa che comporta però un impiego di memoria pari al doppio di quanto richiesto dai soli dati. Anche l’efficienza aumenta poiché è spesso supportata la lettura da entrambi i dischi in parallelo. RAID 2 la divisione dei dati avviene a livello di singolo bit, e la replicazione Appendice A. RAID 62 è affiancata dal codice di Hamming, in grado di correggere un errore su un singolo bit e di rilevare errori su due. RAID 3 suddivisione in byte, necessita di un numero minimo di 3 dischi, 2 per i dati e un terzo per la parità, raramente utilizzato perché richiede l’uso di tutti i dischi contemporaneamente in caso di lettura dati. RAID 4 suddivisione in blocchi, anche qui su N dischi, N-1 conterranno dati (non replicati) e il disco rimanente sarà usato per la parità. Poiché la suddivisione avviene a blocchi interi, una richiesta su un singolo blocco potrà essere soddisfatta da un solo disco e, se supportato, permettere letture in parallelo su blocchi che risiedono su altri dischi. RAID 5 anche in questo caso il partizionamento è effettuato a blocchi con dati di parità, suddivisi però sui vari dischi. Tutti i blocchi sui vari dischi sono idealmente numerati e quelli che condividono lo stesso numero sui diversi dischi appartengono ad una stripe. Per ogni stripe è presente un blocco di parità, che non risiede sempre sullo stesso disco. Ad ogni modifica di un blocco di una stripe, ne viene ricalcolata la parità che va a sovrascrivere la precedente. Data la block size (dimensione del blocco) e il numero di dischi in RAID viene definita la stripe-size, ovvero la grandezza di una singola stripe: stripe-size = block-size ∗ (N − 1) dove N è il numero dei dischi, a cui viene sottratto il blocco con i dati di parità. Questa quantità è importante per l’ottimizzazione in scrittura, in quanto scrivere un insieme di dati con grandezza pari alla stripe-size è l’unico Appendice A. RAID 63 modo che il sistema ha per poter calcolare preventivamente la parità e scrivere in contemporanea su tutti i dischi, senza far precedere l’operazione di scrittura da una di lettura del sottoinsieme della stripe che non verrebbe sovrascritto. In lettura, invece, il blocco di parità non viene letto, a meno di errori CRC sui dati, che imporrebbero un ricalcolo, se possibile, dei dati danneggiati mediante gli altri blocchi unitamente a quelli di parità, celando cosı̀ eventuali malfunzionamenti (rilevabili mediante diagnostica o dall’inevitabile calo di prestazioni). Alla rottura di un secondo disco però i dati non saranno più recuperabili. RAID 6 corrisponde al RAID 5, con l’aggiunta di un ulteriore blocco di parità per ogni stripe per aumentare l’affidabilità, basandosi sul fatto che la probabilità di rottura di un secondo disco nell’intervallo che va dalla rottura del primo alla scoperta di quanto accaduto sia relativamente bassa, anche se influenzata da moltissimi fattori. In questo modo su N dischi impiegati, N-2 conterranno dati e i rimanenti parità (anche se i blocchi sono suddivisi fra tutti i dischi). Appendice B Approfondimento su alcune tipologie di test di netperf • TCP RR: permette di misurare il tempo necessario a ricevere una risposta (Response) ad un’interrogazione (Request), che è detto Round Trip Time. La dimensione dei pacchetti utilizzati come interrogazione e risposta sono impostati di default a 1 Byte, anche se può essere specificata. La grandezza del buffer per il socket sarà quella di default per il sistema se non indicato esplicitamente dall’utilizzatore. Opzioni utili: -r sizespec permette di cambiare la dimensione dei pacchetti Request/Response -l value se value è maggiore di zero indica la durata in secondi del test, altrimenti il numero di transizioni (intese come invio di richiesta e ricezione di risposta) che saranno effettuate -s sizespec imposta la grandezza del buffer del socket (sia in ricezione che in trasmissione) Appendice B. Approfondimento su alcune tipologie di test di netperf 65 -S sizespec analogo al precedente ma relativo ai buffer dell’host remoto -D imposta il flag TCP NODELAY (attivando il flag PUSH nell’header dei pacchetti TCP che indica di non aspettare di riempire il buffer in invio prima di spedire i dati) sia sull’host locale che su quello remoto È da notare però che essendo TCP un protocollo stream e non a messaggi può essere necessario iterare il processo di ricezione fino a ricevere l’intero pacchetto (non azzerando il puntatore del buffer del socket ma incrementandolo ogni volta per non sovrascrivere i dati letti fino a quel momento). • UDP RR: analogo a TCP RR ma con l’assenza del flag -D, in quanto privo di senso per il protocollo UDP. • TCP MAERTS: questa tipologia di test invoca lo stesso script che gestisce TCP STREAM, ma in questo caso il flusso di dati procede da netserver verso netperf (cioè dall’host remoto verso la macchina locale su cui è lanciato il test), contrariamente a quanto avveniva con TCP STREAM. Questa particolarità può essere utile per testare la rete dopo la modifica di parametri dell’elaboratore verso cui è destinato il flusso dei dati (che essendo la macchina locale evita di ricorrere a rsh o similari per modificare i parametri e per lanciare il test). Appendice C Dettaglio sui parametri del modulo arp interval: intervallo in millisecondi dopo cui un link è considerato in fallimento se non ha ricevuto alcun ARP Reply. Per questo motivo è adatto esclusivamente per algoritmi di smistamento dei pacchetti di tipo “fair” fra i link, come ad esempio il Round Robin (alterna i vari link per l’invio di ogni frame). In caso si utilizzi un algoritmo basato su uno XOR fra gli indirizzi di livello 2 è altamente probabile che tutto il traffico converga su un unico link, comprese le ARP Reply, portando in questo modo a considerare in fallimento tutti gli altri link. Se impostato a 0 questo metodo di controllo dello stato dei link viene disabilitato. Valore di Default: 0 arp ip target: quando arp interval ha un valore maggiore di zero esso rappresenta la macchina verso cui effettuare l’ARP Request. Il formato atteso è di tipo ddd.ddd.ddd.ddd e più indirizzi vanno separati da virgola, per un massimo di 16. Valore di Default: nessun indirizzo IP downdelay/updelay: ritardo temporale in millisecondi dopo cui riflettere Appendice C. Dettaglio sui parametri del modulo 67 il cambio di stato di un link, dev’essere un multiplo del parametro miimon, altrimenti verrà approssimato automaticamente. Specificare un valore maggiore di zero può essere sensato in caso si utilizzi dell’hardware che effettui diverse transizioni di stato prima di stabilizzarsi in quello effettivo, come può ad esempio accadere durante l’avvio di uno switch. Valore di Default: 0 lacp rate: indica la frequenza di invio di pacchetti Lacp. I valori ammessi sono 0 (slow, un LACPDU ogni 30 secondi) e 1 (fast, un pacchetto ogni secondo). Valore di Default: 0 max bonds: numero di interfacce di rete virtuali gestite dall’istanza corrente del driver di bonding. Valore di Default: 1 miimon: indica la frequenza in millisecondi con cui verrà invocato il MII link monitoring, ovvero il controllo di stato del link. Indicando 0 come valore il monitor verrà disabilitato. Specificare un numero troppo basso (ovvero inferiore a 100) si può incorrere in un degrado delle prestazioni. È inoltre da ricordare che il suo utilizzo è mutuamente esclusivo con quello dell’ARP Monitor. Valore di Default: 0 primary: permette di specificare come prioritaria una particolare interfaccia. In caso quest’interfaccia subisca un failover (link in fallimento) e successivamente ritorni disponibile, allora verrà reintegrata come interfaccia primaria per lo smistamento del traffico. Questo parametro è sensato solo con la modalità active-backup ed è utile quanto si ha Appendice C. Dettaglio sui parametri del modulo 68 un link preferibile agli altri sotto qualche aspetto (come ad esempio il throughput). use carrier: in caso miimon abbia un valore maggiore di zero questo parametro indicherà l’applicazione da utilizzare come monitor dello status dei link. I valori ammessi sono 0 per il deprecato MII or ETHTOOL ioctls e 1 per netif carrier ok(). In caso il driver della NIC utilizzata non supporti netif carrier ok(), questo mostrerà l’interfaccia come attiva indipendentemente dallo stato reale poiché questo è il risultato di default per l’applicazione. Per testare lo stato dell’interfaccia di rete si può ricorrere all’utility mii-tool, ecco un esempio di output: eth0: negotiated 100baseTx-FD flow-control, link ok eth1: no link Prima di impostare il parametro use carrier è bene controllare lo stato dell’interfaccia mediante mii-tool per verificare che esso sia rilevato correttamente. In alternativa, per verificare il supporto MII, si può anche ricorrere ad ethtool, con il seguente comando: ethtool eth? | grep "Link detected" dove eth? sta per il nome dell’interfaccia di rete per cui si vuole effettuare il controllo. Valore di Default: 1 mode: Questo parametro prende come valore una stringa con il nome della Appendice C. Dettaglio sui parametri del modulo 69 modalità oppure il numero intero ad essa associato, nell’ordine in cui sono riportati nella lista. 0. balance-rr: questa modalità implementa lo smistamento dei pacchetti seguendo una politica Round Robin, cioè selezionando ciclicamente, dalla prima all’ultima, un fra le interfacce disponibili per l’inivio. In questo modo sono garantiti sia il bilanciamento del carico che la tolleranza ai guasti. 1. active-backup: ad ogni istante solo una delle interfacce disponibili è realmente utilizzata per l’inivio e la ricezione. In caso di un suo fallimento una tra le altre disponibili verrà scelta per rimpiazzarla (la quale sarà preferenzialmente quella specificata attraverso il parametro “primary”). Con questa modalità è garantita la sola tolleranza ai guasti mentre si perdono i miglioramenti di throughput ottenibili mediante il bonding. 2. balance-xor: l’interfaccia su cui inviare un frame è scelta, di default, in base alla seguente formula (S M AC ⊕ D M AC) % slave count dove, - S MAC: MAC Address dell’interfaccia di bonding - D MAC: MAC Address dell’interfaccia della macchina remota - slave count: numero delle interfacce di rete aggregate Appendice C. Dettaglio sui parametri del modulo 70 Durante la stessa connessione le due macchine non cambiano, come nemmeno i due MAC Address, perciò il risultato della formula sarà costante e verrà perciò utilizzata sempre una data interfaccia per la stessa connessione. È però possibile utilizzare un calcolo diverso per la scelta dell’interfaccia su cui trasmettere, modificando il valore del parametro xmit hash policy. Questo modalità assicura bilanciamento e fault-tolerance. 3. broadcast: tutto il traffico viene replicato su ognuna delle interfacce di rete disponibili, garantendo cosı̀ la fault-tolerance ma non aumentando il throughput “utile”1 . 4. 802.3ad: è un’implementazione dello standard IEEE detto “Dynamic Link Aggregation”2 . Come prescritto dallo standard, le porte da aggregare devono avere la stessa velocità e la stessa modalità per il duplex, non sono perciò consentiti aggregati eterogenei sotto questi aspetti. L’interfaccia in uscita per un frame è nuovamente determinata da un calcolo effettuato in base alla xmit hash policy scelta. Prerequisiti per l’utilizzo: - Supporto di EthTool da parte dei driver per verificare la velocità e le impostazioni duplex per le interfacce. 1 non aumenta infatti l’apporto informativo poiché, nonostante il volume di traffico aumenti, non si ha maggiore informazione ma solo una sua replicazione 2 Le specifiche sono disponibili in [8] Appendice C. Dettaglio sui parametri del modulo 71 - Uno switch che supporti l’802.3ad, eventualmente da configurare3 . 5. balance-tlb: questa modalità implementa una trasmissione adattiva con bilanciamento del carico ma, a differenza della 802.3ad, non è imposto nessun vincolo per quanto riguarda lo switch. La ripartizione del carico in uscita avviene cercando di bilanciarlo, calcolandolo per ciascuna interfaccia in proporzione alla sua capacità trasmissiva. In caso un link fallisca, per non perdere la comunicazione, un altro fra i disponibili assumerà dinamicamente il suo MAC Address. Prerequisiti per l’utilizzo: - Supporto di EthTool da parte dei driver per verificare la velocità e le impostazioni duplex per le interfacce. - Interfacce di rete dotate di driver in grado di cambiare dinamicamente il MAC Address. 6. balance-alb: come il balance-tlb per il traffico in uscita, con l’aggiunta del bilanciamento anche per il flusso dati in ingresso4 . Il driver del bonding intercetta le APR Reply della macchina su cui gira sovrascrivendone il MAC Address con quello di una delle interfacce aggregate, cambiata ogni volta con politica Round Robin, cosı̀ da ripartire i diversi client sui diversi link. Il bilanciamento in ricezione è altresı̀ possibile per le connessioni 3 Alla sezione 3.2 di pagina 13 è riportata la procedura di configurazione dello switch della rete di studio. 4 solo per il tipo IPV4 Appendice C. Dettaglio sui parametri del modulo 72 stabilite da un host remoto; ad ogni invio dalla macchina locale di un ARP Request il driver salverà l’IP della macchina che si vuole contattare e quando arriverà un ARP Reply da una macchina con l’IP memorizzato invierà a sua volta un ARP Reply a quella macchina con il MAC Address di una delle interfacce aggregate. Il fatto che le ARP Request della macchina in bonding riportino tutte il MAC Address dell’interfaccia virtuale porta a far collassare il traffico sull’interfaccia reale che possiede quel MAC, ma il problema è aggirabile aggiornando le informazioni nelle cache delle macchine remote con un ulteriore ARP Reply. Allo stesso modo, quando un’interfaccia in fallimento torna attiva, il traffico viene redistribuito anche su di essa sempre tramite una negoziazione ARP. Si deve però notare che per contrastare l’ARP Cache Poisoning 5 molti sistemi ignorano pacchetti con informazioni ARP provenienti da macchine con cui non hanno richieste pendenti. Valore di Default: 0 (ovvero balance-rr) xmit hash policy: Permette di scegliere la formula per calcolare l’interfaccia di rete da utilizzare in uscita con le seguenti modalità 1. layer2: vedi parametro mode, valore balance-xor Si sottolinea che questo metodo di calcolo è conforme allo standard 802.3ad 2. layer3+4: questa politica di scelta utilizza informazioni dei livelli superiori, 5 tecnica di attacco informatico Appendice C. Dettaglio sui parametri del modulo 73 ovvero gli indirizzi IP e le porte, mediante la formula ((S P ORT ⊕ D P ORT ) ⊕ ((S IP ⊕ D IP ) ⊕ 0xffff)) % slave count dove, - S PORT: porta della macchina sorgente - D PORT: porta della macchina di destinazione - S IP: indirizzo IP della macchina sorgente - D IP: indirizzo IP della macchina di destinazione - slave count: numero delle interfacce aggregate e al momento disponibili È da notare che il traffico UDP e TCP frammentato sia privo delle informazioni riguardanti le porte6 e che per tutto il traffico che non utilizza pacchetti IP viene in ogni caso utilizzata la formula relativa agli indirizzi di livello 2. Valore di Default: 0 (layer2) 6 presenti solo nel primo frammento Appendice D Riepilogo per la scelta della modalità di bonding • Come si è cercato di evidenziare nell’Appendice C, la scelta dell’algoritmo di gestione delle interfacce e quello di smistamento dei pacchetti sono cruciali per adattare la tecnologia in esame alle necessità di una specifica rete. Per individuare la configurazione più adatta bisogna anzitutto individuare quali aspetti vadano privilegiati fra: Affidabilità: è necessario scegliere con accuratezza fra la soluzione mediante monitor ARP e quella tramite il monitoraggio delle NIC dei singoli link. La prima soluzione non è però applicabile quando tutte le interfacce dell’host in bonding sono connesse ad un’unico apparato di rete intermedio (quale ad esempio uno switch), come già sottolineato all’Appendice C relativamente al parametro arp interval . Per quanto riguarda le modalità di gestione delle interfacce bisogna procedere ad un distinguo fra due casi, uno in cui l’host in bonding sia connesso ad un solo apparato di rete (o direttamen- Appendice D. Riepilogo per la scelta della modalità di bonding 75 te alla macchina di destinazione), un altro in cui la macchina sia connessa ad entità intermedie indipendenti fra loro. 1. Nel primo caso, per quanto concerne la sola affidabilità, le modalità applicabili sono indifferentemente la balance-xor, la 802.3ad, la balance-tlb e la balance-alb, poiché tutte in grado di ripartire il traffico fra le interfacce attive quando viene rilevato un link in fallimento. 2. Nel secondo caso può invece essere conveniente adottare la modalità active-backup, la quale prevede l’utilizzo attivo di una sola interfaccia in ogni singolo istante, tenendo come altenativa le restanti intefacce aggregate. Se queste connettono l’host ad altri switch, ad esempio, un fallimento del link primario dovuto ad un problema dell’entità a cui è collegato potrebbe evitare l’isolamento della macchina senza alcun degrado di prestazioni rilevabile. La prima soluzione permette di aumentare il throughput ma può gestire solo fallimenti a livello di interfaccia, la seconda non aumenta la performance ma, se unita all’utilizzo di più apparati di rete intermedi indipendenti fra loro, si rivela molto più robusta della precedente. Ridondanza: l’unica modalità in grado di assicurare una ridondanza totale senza attendere il fallimento di alcun link è la broadcast, la quale replica lo stesso flusso su tutte le interfacce aggregate, a detrimento però delle performance. Performance: sotto questo aspetto non vi sono evidenti differenze fra le varie modalità, ad eccezione di active-backup e broadcast per cui Appendice D. Riepilogo per la scelta della modalità di bonding 76 il limite massimo di velocità raggiungibile è pari a quello di una singola interfaccia. Bilanciamento: il bilanciamento totale si ha per mezzo della modalità balance-rr che alterna con politica Round Robin fra le varie interfacce, perdendo però la caratteristica di trasmettere i pacchetti di una stessa connessione sullo stesso link. Compatibilità: - la modalità 802.3ad prevede una fase di dialogo con la controparte che preceda il reale invio di dati, questo impone un supporto del protocollo da parte dell’entità a cui l’host in bonding è connesso. - balace-tlb necessita che Ethtool supporti il driver delle varie interfacce di rete, come già mostrato in Appendice C a pagina 66. - balance-alb questa modalità ha lo stesso requisito della precedente a cui va però aggiunta anche la capacità da parte del driver di cambiare dinamicamente l’indirizzo fisico delle interfacce utilizzate. Bibliografia [1] Fibre Channel Industry Association (FCIA). http://www.fibrechannel.org/ [2] Scientific Linux CERN 4 (SLC4). http://linux.web.cern.ch/linux/scientific4/ [3] Scientific Linux (SL). https://www.scientificlinux.org/ [4] General Parallel File System (GPFS). http://www-03.ibm.com/systems/clusters/software/gpfs/ [5] IEEE 802.1Q Standards for Local and metropolitan area networks: Virtual Bridged Local Area Networks (’03). http://standards.ieee.org/getieee802/download/802.1Q-2003.pdf [6] Netperf. http://www.netperf.org/netperf/ [7] Dstat. http://dag.wieers.com/home-made/dstat/ [8] Netperf. http://www.netperf.org/netperf/ BIBLIOGRAFIA 78 [9] ExtremeWare XOS 11.3 Concepts Guide (’03). http://www.extremenetworks.com/libraries/services/ExtremeWareXOSConcepts11 3.pdf [10] Documentazione driver Bonding per Linux. http://www.linuxfoundation.org/en/Net:Bonding [11] Netperf manual revision 2.0, Information Network Division, Hewlett Packard http://www.netperf.org/netperf/training/Netperf.html