Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Reti di Calcolatori An SDN-based setup for active measurements in mobile networks Anno Accademico 2015/2016 Candidato: Raffaele Sommese matr. N46002132 A mia Madre e mio Padre A Te che ci sei e ci sei sempre stata Agli Amici di sempre Indice Capitolo 1 Introduzione 1.1 Progetto Monroe . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 Capitolo 2 Software Defined Networking 2.1 OpenVSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 Capitolo 3 Nodo Monroe 3.1 Bios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Sistema Operativo . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 8 Capitolo 4 Docker 9 4.1 Gestione dei permessi in Docker . . . . . . . . . . . . . . . . . . 10 4.2 Sicurezza in Docker . . . . . . . . . . . . . . . . . . . . . . . . . 11 4.3 Modalità di rete Docker . . . . . . . . . . . . . . . . . . . . . . 11 Capitolo 5 Infrastruttura Virtuale 5.1 Container OpenVSwitch . . . . . . . . . . . . . . . . . . . . . . 5.2 Container Ryu . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Container D-ITG . . . . . . . . . . . . . . . . . . . . . . . . . . 13 15 15 16 Capitolo 6 Analisi delle prestazioni di rete di Docker 17 Capitolo 7 Conclusioni e Sviluppi Futuri 22 Bibliografia 23 ii Elenco delle figure 1.1 1.2 2.1 2.2 3.1 3.2 3.3 4.1 4.2 4.3 5.1 5.2 5.3 5.4 5.5 6.1 6.2 6.3 Evoluzione delle performance su reti mobili [1] . Architettura del progetto Monroe [2] . . . . . . Architettura di una rete SDN [3] . . . . . . . . Principio di funzionamento di OpenVSwitch [4] Architettura di un Nodo Monroe [2] . . . . . . . CoreBoot Bios in Virtual Machine . . . . . . . . Tinycore in Virtual Machine . . . . . . . . . . . Docker Engine . . . . . . . . . . . . . . . . . . . Docker:Modalità Bridge [5] . . . . . . . . . . . . Docker:Modalità Overlay [5] . . . . . . . . . . . Tipologie di Deployment considerate . . . . . . Tipologie di Deployment considerate . . . . . . OpenVSwich Container . . . . . . . . . . . . . . Ryu Container . . . . . . . . . . . . . . . . . . ITGSend Container . . . . . . . . . . . . . . . . Confronto di banda in Upload . . . . . . . . . . Confronto con 2 Flussi in Upload . . . . . . . . Confronto con 2 Flussi Poissoniani in Upload . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 4 5 6 7 8 9 12 12 13 14 15 16 16 19 20 21 Capitolo 1 Introduzione Introduzione La misura della banda disponibile è uno dei più importanti e rilevanti ambiti di ricerca nell’area del monitoraggio di rete. Questa, infatti, è importante per numerose applicazioni che richiedono una stima di tale valore per adattare il proprio comportamento. Il caso più noto è quello delle applicazioni di video-streaming, che utilizzano differenti tecniche per variare la risoluzione a fronte della banda disponibile. Questa misura, è importante anche, nel nuovo paradigma delle Content Delivery Networks, per effettuare una scelta ottima del server da cui l’utente possa prelevare i contenuti [6, 7]. Inoltre, questo tipo di misure è fondamentale per la verifica dei Service Level Agreements. In contesti di ricerca è utile avere a disposizione delle piattaforme su larga scala, che permettano ai ricercatori di avere accesso a numerosi dispositivi distribuiti su reti geografiche. Queste piattaforme sono utili per testare nuovi approcci e metodologie applicabili sulla rete, e per raccogliere grosse quantità di dati. Una delle più importanti piattaforme è PlanetLab, una rete di ricerca globale che fornisce ai ricercatori un accesso remoto per eseguire esperimenti su reti distribuite [8]. L’importanza crescente del monitoraggio delle prestazioni di Figura 1.1: Evoluzione delle performance su reti mobili [1] internet su reti mobili è dovuta alla sua rapida diffusione e all’avvento di nuove tecnologie 4G, che prevedono, in teoria, il raggiungimento di velocità di 100 MByte/s [1]. 1 Introduzione 1.1 Progetto Monroe Figura 1.2: Architettura del progetto Monroe [2] Il progetto Monroe1 nasce dalla collaborazione tra vari istituti di ricerca ed università: • Simula Research Laboratory • Politecnico Torino • IMDEA Networks • Karlstad University • Celerway Communications • Nextworks • Telenor. Il progetto è sponsorizzato dall’Unione Europea. L’obiettivo del progetto Monroe è di costruire una piattaforma aperta e flessibile per il deployment di esperimenti di misura su reti mobili e wireless con il supporto a tecnologie Multi-Homed. Il progetto punta a creare un paradigma EaaS (Experiments as a Service) per gli utilizzatori del servizio, con l’obiettivo di facilitare la gestione e la manutenzione del sistema e di renderlo di immediato utilizzo [9]. 1 https://www.monroe-project.eu 2 Introduzione Gli utilizzatori del progetto sono sia dagli utenti del consorzio Monroe, sia membri esterni, tra cui l’Università Federico II. E’ importante al fine di coordinare i vari esperimenti attivi in esecuzione sui diversi nodi di misura, trovare una metodologia per permettere ai suddetti di eseguire contemporaneamente senza che ciò influenzi il risultato delle loro misure. In questa tesi si vuole presentare un setup basato su tecnologia SDN per i nodi Monroe, che potrà essere utile alla risoluzione del sopraccitato problema. 3 Capitolo 2 Software Defined Networking Software Defined Networking Il paradigma emergente del Software Defined Networking, si pone l’obiettivo di superare la classica e complessa gestione delle infrastrutture di rete decentralizzata, separando la logica di controllo definita come control plane, dalla logica di forwarding del traffico definita come data plane. Da questa separazione, i dispositivi di rete assumono il semplice ruolo di store and forward, mentre la logica di gestione viene demandata ad un controller centralizzato, o in alternativa ad un Network Operating System. Questa gestione centralizzata permette di ottenere un maggior controllo sulle policy di rete e sul deployment di eventuali aggiornamenti o riconfigurazioni. È bene notare che il controller, nonostante porti alla centralizzazione dell’intelligenza della rete, deve essere adeguatamente distribuito su più entità fisiche, per evitare un Single Point of Faliure e per garantire ai dispositivi di rete, la stessa affidabilità dei quelli gestiti con un approccio decentralizzato[3]. Figura 2.1: Architettura di una rete SDN [3] In Figura 2.1 sono presentati tutti i componenti sopra descritti. È bene notare che l’interscambio di informazioni tra il control plane e il data plane avviene attraverso OpenFlow, un protocollo di comunicazione sviluppato per reti SDN [10]. 2.1 OpenVSwitch OpenVSwitch è una delle implementazioni più utilizzate e famose di switch SDN software. Il suo successo è dovuto alla scarsa disponibilità iniziale e all’elevato costo di switch hardware OpenFlow. OpenVSwitch è formato da due componenti principali: un demone user-space e un modulo kernel. 4 Software Defined Networking I pacchetti in arrivo su un bridge OpenVSwitch vengono gestiti come illustrato in Figura 2.2 Figura 2.2: Principio di funzionamento di OpenVSwitch [4] All’arrivo di un pacchetto, il modulo kernel provvede ad intercettarlo e controlla nella propria tabella all’interno del kernel se vi è una regola per processarlo. Se il modulo kernel non trova una regola adatta, provvede al trasferimento del pacchetto, attraverso una netlink socket, al demone in userspace, che successivamente controlla nella propria tabella se vi sono regole per il processamento. Se anche in userspace la regola non è presente allora il demone in userspace interroga il controller [4]. 5 Capitolo 3 Nodo Monroe Nodo Monroe Il nodo Hardware Monroe è equipaggiato con una APU1D4 . L’APU1D4 è una small form-factor board avente le seguenti caratteristiche hardware: • CPU:AMD T40E 1 Ghz Dual Core 64 bit • RAM: 4GB DDR-1066 • 2 miniPCI-E Slot • 3 Ethernet Gigabit Il nodo include anche: • Wifi:Compex WLE600VX 802.11ac/b/g/n Dual-Band mPCIe • GPS:Sierra Wireless MC7304 LTE mPCIe • SSD:SSD M-Sata 16GB MLC Phison • USB Hub:Yepkit YKUSH • 3 USB Modem:ZTE MF910 MiFi • Antenne Figura 3.1: Architettura di un Nodo Monroe [2] I Nodi Monroe sono installati su alcuni autobus urbani ed extraurbani, e l’hardware scelto è stato testato in diverse condizioni di umidità e temperatura. In particolare è stato rilevato che i Modem Usb MiFi si spegnevano al superamento della temperatura di 55◦C e di una percentuale di umidità relativa del 60%. La restante parte dei dispositivi ha funzionato regolarmente durante uno stress test con temperatura di 70◦C e umidità relativa del 60% 6 Nodo Monroe e in un un caso d’utilizzo reale, tra Bergen e Sogndal, ad una temperatura di -10◦C. Sono sorte alcune complicazioni riguardo l’alimentazione, in un caso reale, su alcuni bus a Torino, che hanno portato all’instabilità di alcuni dispositivi connessi via USB [11]. La sezione di alimentazione risulta critca anche a causa di continui cicli di on/off a cui è soggetto il nodo, e alla indisponibilità di un’alimentazione a 220V AC. 3.1 Bios Nella prima fase dello sviluppo del nostro setup, si è reso necessario replicare in virtuale il sistema fisico, per testare i vari approcci senza il supporto dell’hardware reale, non ancora disponibile. Per fare questo si è deciso di emulare il sistema attraverso il software di virtualizzazione QEMU. La board è fornita con CoreBoot, un bios opensource, dunque si è scelto di ricompilare ed emulare anche quest’ultimo. CoreBoot è un firmware opensource per dispositivi embedded e PC che offre un’esperienza di avvio veloce e affidabile [12]. Si è reso necessario adattare la configurazione di CoreBoot, in accordo al tutorial presente sulla wiki ufficiale, con alcuni accorgimenti, a causa della documentazione non aggiornata. CoreBoot necessita di un “second stage payload” al fine di caricare il sistema operativo e/o un boot manager. I payload che è possibile usare per questo scopo sono numerosi, inclusa la possibilità di inserire l’intero kernel Linux come payload. Nel nostro caso si è scelto di utilizzare SEABios, un bios a 16-bit x86 che supporta vari bootloader, e che viene utilizzato in genere come Bios principale in QEMU. A tal fine, lo abbiamo compilato e incluso nell’immagine personalizzata di CoreBoot. Figura 3.2: CoreBoot Bios in Virtual Machine 7 Nodo Monroe 3.2 Sistema Operativo Inizialmente non erano disponibili molte informazioni circa il sistema operativo installato sui nodi Monroe, quindi in prima analisi si è deciso di focalizzarsi sull’OS di default del produttore della APU. Si è successivamente proceduto a sviluppare un setup completo di TinyCore 5.2 utilizzando l’immagine ufficiale fornita da PC-Engine. Dopo aver ottenuto un setup del sistema virtualizzato completo e stabile si è passati all’installazione di OpenVSwitch,una piattaforma Open-Source per la creazione di bridge SDN software. Figura 3.3: Tinycore in Virtual Machine Nei repository ufficiali di TinyCore Linux non era presente il pacchetto di OpenVSwitch, pertanto si è reso necessario compilare quest’ultimo dai sorgenti. Durante la compilazione ci si è resi conto che per il corretto funzionamento di OpenVSwitch è necessario caricare alcuni moduli kernel, e per la corretta compilazione era necessaria una versione di GCC più recente. Successivamente siamo stati informati dai membri del progetto Monroe che il sistema operativo ufficiale scelto per la board è Debian Jessie con Kernel 4.6 prelevato dai repository debian backport. Gli esperimenti, inoltre, potranno essere eseguiti tramite macchina virtuale o container Docker. Allo stato attuale solo l’implementazione dei container è pronta all’uso,di conseguenza si è deciso di focalizzarsi su un setup containerbased. 8 Capitolo 4 Docker Docker Un container software è molto simile ad una macchina virtuale, ma a differenza di quest’ultima risulta essere meno gravoso sulle risorse del sistema. In una macchina virtuale, infatti, è necessario emulare l’intero sistema operativo ospite, incluso il kernel. Ciò, in uno scenario di deployment di numerose applicazioni in diverse macchine virtuali, porta ad un overhead significativo. I container, invece, utilizzano le primitive previste dal kernel Linux per la virtualizzazione dei namespace e la gestione delle risorse attraverso cgroups, condividendo di fatto il kernel sottostante. Inoltre i container rappresentano un’astrazione del sistema operativo di riferimento specificato, poiché essi emulano soltanto le differenze rispetto al sistema base. Questi punti di forza hanno portato alla rapida diffusione dei container software in vari campi dell’ICT, facendo emergere il nuovo paradigma del Container as a Service [13]. Docker è un gestore di container nato come progetto dell’azienda dotCloud. Figura 4.1: Docker Engine Nel 2013 viene rilasciato come software opensource, diventando uno dei progetti più seguiti su GitHub [14]. È scritto in linguaggio Go ed inizialmente utilizzava le librerie LXC, ma dalla versione 0.9, utilizza una propria libreria: libcontainer. Le immagini pubbliche di Docker vengono raccolte all’interno di un repository detto Docker Hub, ed alcune di esse vengono certificate come 9 Docker immagini ufficiali. Per creare una nuova immagine di Docker è necessario produrre uno speciale file di testo: il DockerFile. In questo file va indicata l’immagine base a cui si fa riferimento e le modifiche che si vogliono apportare ad essa, compresa l’inclusione di eventuali file dell’utente. Successivamente,il container viene compilato producendo un’immagine che include le differenze rispetto all’immagine base. Ogni immagine Docker, infatti, rappresenta un livello read-only che, messo su uno stack, concorre alla realizzazione il filesystem reale del container. Il Docker storage driver si occupa della gestione di questi layer [15]. Quando il container viene avviato, viene creato un ulteriore layer read-write contenente le modifiche temporanee. Questa strategia di gestione permette di ottenere immagini leggere e facilmente distribuibili attraverso repository privati o pubblici,quale il DockerHub. 4.1 Gestione dei permessi in Docker Di base, Docker esegue i container in modalità non privilegiata. Questa impostazione non permette, ad esempio di modificare gli indirizzi ip dell’interfaccia di rete, caricare moduli kernel o eseguire il demone Docker all’interno di Docker. Una modo per eseguire questa tipologia di operazioni è l’utilizzo dei container in modalità privilegiata. Questa impostazione, tuttavia, mina pesantemente i principi di isolamento dell’approccio container-based. Esistono comunque delle opzioni messe a disposizione per permettere un tuning migliore dei privilegi concessi al container. Ad esempio, si possono fornire i privilegi di accesso ad un determinato dispositivo tramite l’opzione –device=/dev/snd:/dev/snd con la possibilità di scegliere se quest’ultimo può essere acceduto in lettura, scrittura ed esecuzione. Docker permette inoltre attraverso le opzioni –cap-add e –cap-drop di aggiungere ulteriori permessi o di rimuovere i permessi non necessari [16]. I permessi associabili fanno parte delle Linux capabilities introdotte nel Kernel 2.2, che hanno modificato la precedente situazione in cui vi erano due uniche modalità di esecuzione di processi, o con UID 0 privilegiata o con UID diverso da 0 in modalità non privilegiata. Le capabilities provvedono alla separazione dei vari privilegi fornendo un ulteriore livello di astrazione 10 Docker e sicurezza al sistema. È possibile ritrovare una lista completa delle Linux capabilities all’interno del manuale ufficiale [17]. 4.2 Sicurezza in Docker L’utilizzo dei container permette di semplificare le operazioni di gestione e mantenere al contempo un alto livello di sicurezza, solo se vengono adottate le stesse politiche di sicurezza di uso comune per gli altri processi (ovvero l’uso di utenti non privilegiati per evitare escalation, configurazioni delle applicazioni sicure ecc...). I problemi principali dell’approccio container sono causati dalla condivisione del Kernel della macchina host, portando a possibili attacchi di tipo Denial of Service (Kernel-Panic nei casi più gravi) [18]. Inoltre se forniamo al container i privilegi per l’accesso a device e sottosistemi Kernel ”vitali”, essi risultano essere attaccabili, permettendo eventualmente un controllo completo del sistema. 4.3 Modalità di rete Docker Durante la fase di installazione Docker crea tre interfacce di rete: una rete bridge collegata all’interfaccia docker0 all’interno dell’host e utilizzata come rete di default in tutti i container ove non specificato; una rete host che aggiunge il container allo stack di rete dell’host permettendogli l’accesso a tutte le interfacce; una rete none che rappresenta una rete riservata al singolo container contenente solo l’interfaccia di loopback. Docker permette, dalla versione 1.8 in via sperimentale e stabilmente dalla 1.9.01 ,anche la creazione di reti definite dall’utente per una gestione più granulare dei container. Si possono creare sia reti bridge che reti overlay, inoltre è possibile realizzare plugin di rete proprietari. Le reti Bridge sono simili alla rete docker0, nella loro creazione è possibile specificare il range di indirizzi assegnati,il default gateway e se la rete è interna o esterna. Le reti Bridge sono di tipo Natted, pertanto per esporre un servizio all’esterno è necessario “pubblicare” la porta. 1 https://github.com/docker/docker/releases/tag/v1.9.0 11 Docker Figura 4.2: Docker:Modalità Bridge [5] La modalità di rete Overlay permette la creazione di reti multi-host implementando una logica SDN-Like. Infatti, questa tipologia di reti richiede la presenza di un Key-Value store centralizzato che mantiene le informazioni circa la topologia di rete distribuita [5]. Figura 4.3: Docker:Modalità Overlay [5] È possibile implementare un’ulteriore modalità di rete SDN attraverso l’ausilio di OpenVSwitch. Per realizzare ciò, è necessario utilizzare la modalità di rete none e successivamente collegare i container docker allo switch SDN. Per il collegamento dei container allo switch è possibile utilizzare l’estensione ovs-docker2 attraverso il comando: ovs-docker add-port ovs-br1 eth0 containern –ipaddress=192.168.1.33/24 eth0 è l’interfaccia di rete che verrà associata all’interno del container, containern è il nome del container e 192.168.1.33/24 è l’indirizzo ip con la netmask associata. 2 https://github.com/openvswitch/ovs/blob/master/utilities/ovs-docker 12 Capitolo 5 Infrastruttura Virtuale Infrastruttura Virtuale Sono state valutate varie soluzioni possibili per lo sviluppo di una prima infrastruttura di test: (a) Docker (b) Full VM Figura 5.1: Tipologie di Deployment considerate Nell’approccio evidenziato in Figura 5.1b, utile nel caso si voglia mantenere una totale indipendenza dal sistema sottostante, si provvede a instanziare una macchina virtuale sul nodo fisico, attraverso l’uso di strumenti quali Vagrant e VirtualBox. All’interno della macchina virtuale si esegue OpenVSwitch e due ulteriori Virtual Machine, o in alternativa dei container Docker, contenenti i vari tool degli esperimenti. Inoltre, si collegano le interfacce delle macchine virtuali ad OpenVSwitch in modo da poterne gestire il traffico. Di contro, questa soluzione introduce un alto overhead dovuto alla virtualizzazione. Nel secondo approccio, esposto in Figura 5.1a, con il deployment di OpenVSwitch sul sistema host fisico è possibile eseguire all’interno di container Docker (lo scenario attualmente in uso nel nodo Monroe) gli esperimenti, e collegare le interfacce dei container attraverso l’estensione ovs-docker allo switch SDN. L’approccio in Figura 5.2a è simile al caso precedente ma si basa sull’utilizzo di virtual machine. Eventualmente i due approcci proposti possono essere combinati in modo da poter gestire il traffico totale del nodo. L’approccio evidenziato in Figura 5.2b, attualmente implementato, rappresenta un compromesso tra la flessibilità d’uso garantita dalle macchine virtuali e le scarse modifiche richieste al sistema operativo host,imposte nelle fasi iniziali 13 Infrastruttura Virtuale (a) VM (b) Full Docker Figura 5.2: Tipologie di Deployment considerate del progetto. In questa tipologia di implementazione anche OpenVSwitch è eseguito all’interno di un container Docker e tutti i container sono interconnessi tra di loro attraverso delle bridge network,le quali possono essere create tramite il comando: docker network create –driver bridge –subnet 192.168.50.0/29 link1 dove link1 rappresenta il nome della rete e 192.168.50.0/29 la rete da creare. Successivamente è possibile lanciare i vari container docker associandoli ad un bridge attraverso la specifica –net nomerete Docker, per scelte implementative, allo stato attuale permette l’associazione di una sola rete all’avvio del container. Per associare ulteriori reti è necessario, dopo aver eseguito il comando run, digitare da terminale il seguente comando: docker network connect nomerete nomecontainer Si è dunque proceduto a realizzare un primo setup, come in Figura 5.2b, contenente i seguenti container: 1. OpenVSwitch 2. Ryu SDN-Controller 3. D-ITG Sender Mode 4. D-ITG Receiver Mode 14 Infrastruttura Virtuale 5.1 Container OpenVSwitch Per il container con OpenVSwitch è stato necessario, a causa della richiesta del caricamento di alcuni moduli kernel, montare all’interno del container in modalità read-only il path /lib/modules/ contenente i moduli del kernel in esecuzione sul sistema fisico. E’ stato inoltre necessario lanciare il container con i seguenti privilegi: • SYS MODULE (per il caricamento dei moduli kernel) • SYS NICE (per permettere ad OpenVSwitch di modificare la propria priorità) • NET ADMIN (per permettere la modifica degli indirizzi ip delle interfaccie) Nel DockerFile ritroviamo le istruzioni che provvedono a scaricare OpenVSwitch ed i net-tools dai repository ufficiali di Debian. All’avvio il container attende 5 secondi, per permettere l’aggancio asincrono delle altre interfacce di rete, di seguito avvia OpenVSwitch e aggiunge al bridge tutte le interfacce di rete eth. Successivamente imposta il controller a cui desidera sottoscriversi. Figura 5.3: OpenVSwich Container 5.2 Container Ryu Il controller nelle reti SDN è uno dei componenti fondamentali per il corretto funzionamento della rete. Per tale motivo la scelta di un buon controller, che sia flessibile ed adatto ai propri scopi risulta essere di vitale importanza. In letteratura sono presenti molte comparazioni tra le prestazioni dei vari controller SDN [19]. Nel nostro caso è stato utilizzato Ryu, un 15 Infrastruttura Virtuale Figura 5.4: Ryu Container controller SDN scritto in Python, che supporta differenti versioni di OpenFlow. Ryu permette di realizzare, attraverso script Python eseguiti dal RyuManager, differenti modalità e topologie di rete. Nel nostro caso, è stato utilizzato un semplice script di esempio per l’implementazione di uno switch Layer 2 con autoapprendimento.1 Il container con Ryu necessità solamente del privilegio di NET ADMIN, che come già specificato, è necessario per permettere la modifica degli indirizzi ip delle interfacce. Nel DockerFile ritroviamo le istruzioni che provvedono a scaricare Ryu dai sorgenti e compilarlo. Successivamente Ryu viene avviato attraverso ryu-manager ed è necessario fornirgli uno script Python contenente la configurazione desiderata. 5.3 Container D-ITG Sono dei semplici container con D-ITG configurati in modalità sender e receiver. Figura 5.5: ITGSend Container 1 https://github.com/osrg/ryu/blob/master/ryu/app/simple switch.py 16 Analisi delle prestazioni di rete di Docker Capitolo 6 Analisi delle prestazioni di rete di Docker È stato realizzato uno scenario di test per effettuare delle misure di achievable throughput in upload, analizzando come questa possa essere influenzata dalla virtualizzazione offerta dal container Docker. Sono state confrontate le prestazioni native, sia con le prestazioni di un container con OpenVSwitch nel sistema operativo host, attraverso il plugin ovs-docker, come illustrato precedentemente in Figura 5.1a, sia con lo scenario con OpenVSwitch in container, anch’esso illustrato precedentemente in Figura 5.2b. In particolare l’intero scenario è stato messo in opera su due PC fisici connessi tra loro back-to-back con cavo Ethernet CAT5E con specifiche riportate in Tabella 6.1 Receiver CPU: Intel T3300 RAM: 2 GB DDR3 NET: Atheros AR8131 Sender Intel Q8300 4GB DDR3 Realtek 8111C Tabella 6.1: Specifiche Hardware Sul Sender sono stati instanziati i tool nelle 3 modalità descritte, mentre il Receiver è stato posto in modalità nativa emulando di fatto il server di misura, come previsto dall’architettura finale. Per effettuare la misura di achievable throughput si è provveduto a saturare il link attraverso D-ITG con traffico UDP aumentando il rate di trasmissione fino alla comparsa di packet loss. D-ITG (Distributed Internet Traffic Generator) è una piattaforma per la generazione di traffico sintetico e trace-based, multipiattaforma e distribuita[20]. Il traffico di congestione è stato generato con i parametri riporatati in tabella 6.2 Packet Size InterPacket Time Richiesto InterPacket Time Ottenuto BitRate Richiesto BitRate Medio Ottenuto Duration Native 1470 Byte 300805 pkt/s 32620 pkt/s 3.537 Gb/s 383.6 Mb/s 10s Docker 1470 Byte 300805 pkt/s 28407 pkt/s 3.537 Gb/s 334.1 Mb/s 10s FullDocker 1470 Byte 300805 pkt/s 24501 pkt/s 3.537 Gb/s 288.1 Mb/s 10s Tabella 6.2: Parametri di generazione 17 Analisi delle prestazioni di rete di Docker La differenza notevole tra il BitRate e l’Inter Packet Time richiesto e quello ottenuto sono dovute alle scarse performance in termini di rete e di computazione, le quali hanno influenzato pesantemente il comportamento di D-ITG. Si è riscontrato, inoltre,il seguente comportamento anomalo: forzando il rate al valore ottenuto empiricamente in ricezione, quest’ultimo diminuiva ulteriormente. Si è dunque deciso di effettuare le misure in modo da massimizzare i tassi di ricezione. L’intero esperimento, attraverso l’ausilio di script di automatizzazione appositamente creati, è stato ripetuto 100 volte, e i dati sono stati successivamente estratti e compattati tramite alcune utility di manipolazione testi quali grep,sed e awk. Infine, essi sono stati plottati sotto forma di BoxPlot attraverso l’utilizzo di GnuPlot1 , un tool free di tipo command line che fornisce strumenti per automatizzare la creazione e l’export in immagini di vari grafici. Il BoxPlot utilizzato nel nostro esempio mostra i seguenti dati: • Massimo • 75% Percentile • Mediana • 25% Percentile • Minimo Come è possibile notare dai BoxPlot in Figura 6.1, la modalità nativa risulta essere, come da previsioni, quella con migliori prestazioni. La modalità con OpenVSwitch incluso nel sistema e il container agganciato riesce a fornirci comunque prestazioni accettabili rispetto a quella nativa. Le prestazioni peggiori sono state ottenute nella nostra configurazione FullDocker, sviluppata in base ai vincoli imposti dal progetto Monroe. In particolare, in quest ultimo scenario, la rete host viene connessa a docker tramite un bridge che realizza una Network Address Translation che limita ulteriormente le prestazioni. 1 http://www.gnuplot.info/ 18 Analisi delle prestazioni di rete di Docker Figura 6.1: Confronto di banda in Upload Packet Size IPT Richiesto IPT Ottenuto BitRate Richiesto BitRate Medio Ottenuto Duration Packet Size IPT Richiesto IPT Ottenuto BitRate Richiesto BitRate Medio Ottenuto Duration F1 Native 1470 Byte 75080 pkt/s 5143 pkt/s 882.9 Mb/s 60.48 Mb/s 10 s F2 Native 1470 Byte 75080 pkt/s 4986 pkt/s 882.9 Mb/s 58.64 Mb/s 10 s F1 Docker 1470 Byte 70080 pkt/s 5529 pkt/s 824.1 Mb/s 65.02 Mb/s 10 s F2 Docker 1470 Byte 70080 pkt/s 5282 pkt/s 824.1 Mb/s 62.12 Mb/s 10 s F1 FullDocker 1470 Byte 50080 pkt/s 4814 pkt/s 588.9 Mb/s 56.61 Mb/s 10 s F2 FullDocker 1470 Byte 50080 pkt/s 5027 pkt/s 588.9 Mb/s 59.12 Mb/s 10 s Tabella 6.3: Parametri dei due Flussi È stato realizzato un altro esperimento con due flussi da due container(processi nel caso nativo) diversi con i parametri riportati in Tabella 6.3 Si è notato che l’aumento della saturazione del link dettata dai rate imposti, 19 Analisi delle prestazioni di rete di Docker portava il traffico di signaling TCP di D-ITG ad essere scartato e soggetto a numerose ritrasmissioni che falsavano la misura. Le mancate trasmissioni del traffico di signaling TCP spesso portavano l’esecuzione della generazione dei due flussi in mutua esclusione. È stata valutata la possibilità di utilizzare un’interfaccia di rete solo per il signaling, tuttavia tale opzione è stata scartata poiché essa non è prevista per i nodi reali, di contro sarà possibile tramite SDN rendere prioritario il traffico di signaling, ottenendo cosi migliori risultati. Ci si è dunque posti su rate più “conservativi” in modo da ottenere risultati significativi. L’esperimento di generazione è stato ripetuto per 100 volte. Figura 6.2: Confronto con 2 Flussi in Upload In Figura 6.2 sono riportati i due flussi per il caso nativo, Docker e FullDocker descritti precedentemente. È possibile notare che i flussi tendono a ripartirsi equamente, presentando minore dispersione nel caso FullDocker. La mediana, inoltre, tende ad essere simile per tutti i flussi considerati. È stato infine condotto un ulteriore esperimento con due flussi poissoniani i cui parametri sono riportati in Tabella 6.4 20 Analisi delle prestazioni di rete di Docker Packet Size IPT Richiesto IPT Ottenuto BitRate Richiesto BitRate Medio Ottenuto Duration Packet Size IPT Richiesto IPT Ottenuto BitRate Richiesto BitRate Medio Ottenuto Duration F1 Native 1470 Byte 75080 pkt/s 5538 pkt/s 882.9 Mb/s 65.12 Mb/s 10 s F2 Native 1470 Byte 75080 pkt/s 5630 pkt/s 882.9 Mb/s 66.21 Mb/s 10 s F1 Docker 1470 Byte 70080 pkt/s 5235 pkt/s 824.1 Mb/s 61.57 Mb/s 10 s F2 Docker 1470 Byte 70080 pkt/s 5662 pkt/s 824.1 Mb/s 66.58 Mb/s 10 s F1 FullDocker 1470 Byte 50080 pkt/s 5450 pkt/s 588.9 Mb/s 64.09 Mb/s 10 s F2 FullDocker 1470 Byte 50080 pkt/s 4635 pkt/s 588.9 Mb/s 54.51 Mb/s 10 s Tabella 6.4: Parametri dei due Flussi Poissoniani Figura 6.3: Confronto con 2 Flussi Poissoniani in Upload Dal BoxPlot dei risultati in Figura 6.3 emerge un comportamento decisamente variabile, che tende ad assestarsi solo nel caso FullDocker. 21 Capitolo 7 Conclusioni e Sviluppi Futuri Conclusioni In questo lavoro si è visto come produrre un setup di base con OpenVSwitch e Docker per gestire il traffico dei nodi Monroe. Abbiamo analizzato ed illustrato parte della tecnologia Docker e il nuovo paradigma Software Defined Networking. È stato inoltre descritto l’hardware del nodo Monroe su cui verranno installati gli esperimenti. Successivamente abbiamo valutato le varie implementazioni possibili per un setup per i nodi Monroe, analizzando più nel dettaglio le due modalità container-based. È stato infine valutato l’impatto sulle prestazioni di rete dovuto all’approccio container-based mettendolo in relazione ad una configurazione nativa, ottenendo alcuni risultati significativi riguardo alle prestazioni. Come sviluppi futuri si individuano diverse possibilità: • La scrittura di un’opportuna configurazione per il controller Ryu capace di gestire in maniera equa i flussi di traffico provenienti dai vari container, a differenza del caso attuale in cui è stato utilizzato un semplice script di esempio. • La realizzazione e l’implementazione del container contenente i tool per la misura della banda disponibile ed effettuare misurazioni e valutazioni in tal senso. Inoltre, quando l’hardware risulterà essere disponibile, l’intero setup descritto in questo lavoro dovra essere testato e validato. 22 Bibliografia [1] N. P. Singh. The theoretical and real world of 4g technologies. Int. J. Mob. Netw. Des. Innov., 5(2):97–118, March 2013. [2] First monroe open call. https://www.monroe-project.eu/wp-content/ uploads/2015/12/call announcement v2.pdf. [3] D. Kreutz, F. M. V. Ramos, P. E. Verı́ssimo, C. E. Rothenberg, S. Azodolmolky, and S. Uhlig. Software-defined networking: A comprehensive survey. Proceedings of the IEEE, 103(1):14–76, Jan 2015. [4] H. Y. Pan and S. Y. Wang. Optimizing the sdn control-plane performance of the openvswitch software switch. In 2015 IEEE Symposium on Computers and Communication (ISCC), pages 403–408, July 2015. [5] Understand docker container networks. https: //docs.docker.com/engine/userguide/networking/dockernetworks/. [6] R. Prasad, C. Dovrolis, M. Murray, and K. Claffy. Bandwidth estimation: metrics, measurement techniques, and tools. IEEE Network, 17(6):27–35, Nov 2003. [7] Manish Jain and Constantinos Dovrolis. Ten fallacies and pitfalls on end-to-end available bandwidth estimation. In Proceedings of the 4th ACM SIGCOMM Conference on Internet Measurement, IMC ’04, pages 272–277, New York, NY, USA, 2004. ACM. [8] Antonio Pescapé. Large scale plataforms. University Lecture, 2016. [9] Andra Lutu Min Xie and Ozgu Alay. Report on use cases. Technical report, MONROE, 09 2015. [10] Nick McKeown, Tom Anderson, Hari Balakrishnan, Guru Parulkar, Larry Peterson, Jennifer Rexford, Scott Shenker, and Jonathan Turner. Openflow: Enabling innovation in campus networks. SIGCOMM Comput. Commun. Rev., 38(2):69–74, March 2008. [11] Hansen Thomas Hirsch Kristian Evensen Jonas Werme Tobias Logren Dely Roberto Monno Vincenzo Mancuso Anna Brunstrom Ozgu Alay Andra Lutu, Audun Fosselie. Report on Hardware Design and Selection. Technical report, MONROE, 03 2016. [12] coreboot: fast and flexible open source firmware. https://www.coreboot.org/. [13] C. Anderson. Docker [software engineering]. IEEE Software, 32(3):102–c3, May 2015. [14] Docker: Automated and consistent software deployments. https://www.infoq.com/news/2013/03/Docker. [15] Understand images, containers, and storage drivers. https://docs.docker. com/engine/userguide/storagedriver/imagesandcontainers/. [16] Runtime privilege and linux capabilities. https://docs.docker.com/ engine/reference/run/#runtime-privilege-and-linux-capabilities. [17] capabilities - overview of linux capabilities. http://linux.die.net/man/7/capabilities. [18] Are docker containers really secure?. https://opensource.com/business/14/7/docker-security-selinux. [19] A. L. Stancu, S. Halunga, A. Vulpe, G. Suciu, O. Fratu, and E. C. Popovici. A comparison between several software defined networking controllers. In Telecommunication in Modern Satellite, Cable and Broadcasting Services (TELSIKS), 2015 12th International Conference on, pages 223–226, Oct 2015. [20] Alessio Botta, Alberto Dainotti, and Antonio Pescapè. A tool for the generation of realistic network workload for emerging networking scenarios. Computer Networks, 56(15):3531–3547, 2012.