• Non ci sono risultati.

Strumenti software sviluppati: quadro generale

Durante lo svolgimento del Task 2 è stato necessario sviluppare una serie di software che implementassero il protocollo vero e proprio in tutte le successive revisioni e varianti, che alcune applicazioni che ne simulassero l’uso. Oltre a ciò è stata progettata e realizzata una intera suite di strumenti software che consentono di effettuare test in maniera completamente automatizzata, e acquisiscono di una serie di dati in tempo reale salvandoli su alcuni file. In un secondo momento altri strumenti della suite consentono di effettuare un post-processing dei dati e di generare una serie di grafici e di report sui test effettuati, in maniera automatica ma

con molti parametri configurabili, in modo da evidenziare alcuni istanti temporali, oppure variare la risoluzione dei grafici, generare output dettagliati per il debug e la verifica degli algoritmi.

In Figura 6.15 è mostrato uno schema della architettura generale della suite di software sviluppata:

Figura 6.15: Schema generale della suite software sviluppata

Per dare una idea complessiva del lavoro svolto i software sono stati sviluppati usando come linguaggi C standard per la programmazione di sistema, scripting Bash per script di servizio, automatizzazione dei test e post-processing dati, e il linguaggio Octave per le applicazioni di post-processing dei dati, calcoli statistici e generazione dei grafici. Le righe di codice sviluppate ad oggi sono svariate migliaia.

I file di output alla fine del processo di test ed elaborazione dei risultati contengono tutte le elaborazioni intermedie per consentire verifica dei calcoli e del processamento dati nel caso venga attivata l’opzione di debug. Vengono inoltre generati file in formato CSV contenenti tutti i dati statistici calcolati per ogni test. Ancora vengono generati dei test sheet contenenti le configurazioni hardware e software di tutte le macchine coinvolte e e tutti i parametri passati ai vari software in modo da salvare in maniera completamente automatica e trasparente all’utente tutte le informazioni che consentono di risalire all’ambiente di test utilizzato per una

prova in particolare. Oltre a ciò vengono generati grafici con un gran numero di parametri personalizzabili, o auto-configuranti.

Nei successivi paragrafi sono presenti brevi cenni al funzionamento dei software della suite.

6.14.1 Software in C

Il linguaggio C è stato scelto per implementare tutte applicazioni a livello di sistema, per la sua velocità ed efficienza. Le sue prerogative si sono rivelate essenziali nel caso dei software che implementano il protocollo e simulano lo strato applicativo, visto che si intende misurare prestazioni real-time con tempi dell’ordine di grandezza dei millisecondi.

6.14.1.1 Sender_2

Software in C per la generazione di pacchetti e simulazione di protocollo isocrono realtime. Data la sua complessità è stato sviluppato utilizzando l’IDE Eclipse.

Di seguito sono mostrate alcune delle opzioni accettate in ingresso per dare una idea delle sue funzionalità.

Usage:

Sender_2 [-n[pkt_number]] [-r[-20:+19]] [-Pport_number] [-ddelay] [-tp] source_ip target_ip - n[value] number of packets to send between 1 and 100000. Default value is 100.

- r[-20 to +19] set the process to be reniced by value. Default value is -20 - p set the TOS priority for the socket.

- l enable syslog logging, it will send to the dhcp server useful logs. - t enable some useful features in realtime environments.

- d[0 to 90] set the delay on exit in seconds. Default value is 2s.

- w[0 to 100000] set the periodical sending interval (in us). Default value is 10ms. - P[0 to 65535] specify port to bind. Default is 5000.

- N["string"] notes (max 255 char)

6.14.1.2 Receiver_2

Software in C multithreaded per la ricezione di pacchetti e simulazione di protocollo isocrono realtime. Data la sua complessità è stato sviluppato utilizzando l’IDE Eclipse.

Di seguito sono mostrate alcune delle opzioni accettate in ingresso per dare una idea delle sue funzionalità.

Usage:

Receiver_2 [-rltp] dest_ip

- r[-20 to +19]set the process to be reniced by value. Default value is -20. - l enable syslog logging. Will send to the syslog server useful logs. - t enable some useful features in realtime environments.

- p[0 to 65535] specify port to bind. Default is 5000. - N["string"] notes (max 255 char).

6.14.2 Octave scripts

Gli script Octave occupano una posizione importante all’interno della suite, poiché implementano tutta la fase di post-processing dei dati, calcolo statistico e generazione grafici. Infatti non avrebbe senso far effettuare ai sistemi sotto test tutte le elaborazioni necessarie, visto che sicuramente non verrebbero effettuate a bordo di una macchina agricola.

6.14.2.1 plotting_script.m

Script Octave che naviga la cartella corrente, ordina e carica i dati. In seguito ad alcune verifiche sui dati in ingresso (ad esempio reordering) calcola tutti i dati statistici ed elabora su richiesta vari tipi di grafici in maniera completamente automatica. E’ costituito da alcune migliaia di righe di codice ed è dotato di svariate funzionalità, tra le quali:

- modalità debug: scrive a video e su disco tutti i risultati intermedi dei calcoli effettuati in modo da consentire verifica di funzionamento

- test sheet: genera automaticamente file contenente informazioni dettagliate sulla configurazione di test

- standard view: grafici standard (flusso intero) con differenze tra tempi di arrivo dei pacchetti - detail view: grafici di dettaglio con finestratura regolabile

- time view: grafici con riferimenti temporali - sia standard che detail view

Vi sono molti altri parametri personalizzabili, alcuni esempi di output sono nella sezione dedicata ai test.

6.14.2.2 generate_test_sheet.m

Invocato da plotting_script è un parser degli header nei file di dati che ricava automaticamente parametri circa il test attuale raccolti dalla catena di software precedenti e genera automaticamente un file di output (test_sheet.txt) che descrive in dettaglio la configurazione (configurazione hardware, configurazione di sistema, indirizzi IP, host coinvolti, tipo di test, numero e direzione dei flussi etc.)

6.14.2.3 header_def.txt

File di definizione e configurazione per la gestione dinamica di label nel test_sheet.txt.

6.14.3 Script di Shell

La shell offre tutti gli strumenti per creare script che interagiscono con il sistema, sfruttandone le potenzialità in maniera molto semplice e spesso sorprendentemente efficace. Grazie alle funzionalità della potente shell Bash sono stati realizzati vari script utili, ed anche il potente software che automatizza completamente l’esecuzione di test su un numero arbitrario di macchine. Di seguito brevi cenni sui vari script realizzati.

6.14.3.1 multiple_sender.sh

Wrapper script. Lancia più occorrenze di Sender_2 replicando i parametri in ingresso, ma variando alcuni parametri in maniera automatica, ad esempio il numero di porta per ottenere trasmissioni multi flusso

6.14.3.2 multiple_receiver.sh

Wrapper script. Lancia più occorrenze di Sender_2 replicando i parametri in ingresso, ma variando alcuni parametri in maniera automatica.

6.14.3.4 pretestspider

Spider per il pretrattamento dei file contenenti risultati del test. Naviga ricorsivamente le cartelle con riferimenti temporali validi e raccoglie tutti i file di dati in una unica directory per facilitare ulteriori analisi

6.14.3.5 testspider

Spider per il trattamento dei file contenenti risultati del test. Naviga ricorsivamente le cartelle e lancia opportunamente gli script Octave che operano l'analisi vera e propria dei risultati.

6.14.3.6 remote_control.sh

Script che automatizza completamente una o più sessioni di test su un numero arbitrario di macchine remote, caricando topologia, caratteristiche dei test e configurazioni da appositi file di configurazione (ad esempio hosts.in definisce la topologia della rete). Consente di lanciare sessioni batch di test al variare di ogni parametro, salvando tutti i risultati e le analisi per successiva consultazione, oltre a messaggi in uscita ed errori dei software lanciati. E’ stato necessario svilupparlo per realizzare test che coinvolgono un numero di macchine/flussi elevato.