Tesi di laurea Strumento per l’iniezione di guasti software nel sistema operativo GNU/Linux Anno Accademico 2009/2010 Relatore Ch.mo prof. Marcello Cinque Correlatore Ch.mo ing. Roberto Natella Candidato Davide Fazzone Matr. 534/002977 Obiettivi della tesi Realizzazione di uno strumento automatico per la creazione e l'iniezione di guasti software all'interno del kernel del sistema operativo open-source GNU/Linux Valutazione, attraverso una fase finale di testing, dell’influenza di questi “guasti indotti” sul corretto funzionamento del sistema operativo e su eventuali applicazioni Ciò è di fondamentale importanza in sistemi safetycritical, i cui malfunzionamenti possono provocare danni a persone o all’ambiente circostante. Davide Fazzone – Matr. 534/002977 Cos’è la Fault Injection “Il test di un programma può essere usato per mostrare la presenza di bug, ma mai per mostrare la loro assenza” (E. Dijkstra – 1970) Definizione: Volontaria iniezione di guasti all'interno del sistema sotto osservazione, per valutarne il comportamento all'insorgere dei guasti iniettati Esempio di guasto iniettato Usata nella validazione della Fault Tolerance Differenze tra Fault, Error e Failure Ciclo Fault-Error-Failure Davide Fazzone – Matr. 534/002977 Metodologie di Fault Injection Tecnica G-SWFIT: Modifiche a livello del codice binario Adatta a componenti OTS Necessità di essere adattata a hardware, sistema operativo e compilatore Fault Injection Tool (FIT) Modifiche a livello del codice sorgente Adatta a software open-source Necessità di poter accedere al codice sorgente Tecnica G-SWFIT Passi del Tool di Fault Injection Davide Fazzone – Matr. 534/002977 La Fault Injection nel Sistema Operativo Perché fare F.I. nel Sistema Operativo? Risulta di interesse osservare come i fallimenti a livello del S.O. si propagano nel software applicativo Il S.O. è realizzato per aggregazione di componenti (problematiche di integrazione) Concentrare i test sui driver Secondo studi statistici, i guasti nei driver sono la principale causa di fallimento dei Sistemi Operativi in quanto scritti da terze parti Failure di un driver in sistema Windows Modi di fallimento possibili: • • • Hang del sistema Crash del sistema Errori Applicativi Come il Sistema Operativo reagisce a questi fallimenti Davide Fazzone – Matr. 534/002977 Uso del tool sul codice del kernel Linux Metodo e componenti usate Virtualizzazione (QEMU) Tool ausiliarii (mcpp, httperf) Realizzazione di un processo per generare dal codice sorgente diverse versioni del driver con guasti iniettati Problemi nell’uso del tool sul codice del kernel Linux Necessità di progettare un tool che permetta di usare normalmente il FIT Davide Fazzone – Matr. 534/002977 Processo automatico realizzato Fase iniziale di configurazione ed ottenimento dei sorgenti Utilizzo del fix-tool creato per adattare il codice del kernel, al fine di poter applicare il tool di Fault Injection in uso Rimozione di macro, direttive al precompilatore e parole chiave non aderenti allo standard del linguaggio Compilazione delle patch generate Test per ogni patch Davide Fazzone – Matr. 534/002977 Caso di Studio FNM-Linux (Finmeccanica Linux) v. 2.1.1 Basata sulla meta-distribuzione Gentoo Linux Le principali feature di questa distribuzione sono: Management di prodotti industriali Real Time spinto su sistemi multi-core Scalabilità garantita Software Safety D0178B Licensa GPL2 Kernel in uso: Linux-2.6.24-FNM_v2.1 (evoluzione della versione 2.6.24.7 del kernel Linux, opportunamente patchato secondo le loro necessità aziendali). Equipaggiata di Abyss Web Server per il test delle schede di rete Le tre schede di rete sotto test: Realtek NE2000 (modulo “ne2k-pci” – LOC: 716) Realtek RTL-8139C (modulo “rtl8139cp” – LOC: 2101) Adv. Micro-Devices PCnet32 (modulo “pcnet32” – LOC: 3106) Davide Fazzone – Matr. 534/002977 Risultati del Caso di Studio Per ogni scheda sono state create diverse centinaia di patch Si escludono: quelle che non permettevano una corretta compilazione quelle che non riguardavano il modulo in esame ma qualche libreria inclusa Dalla compilazione delle rimanenti si ricavano i moduli buggati Ognuno di questi viene messo in esercizio e testato tramite uno script di workload Si ottengono, quindi, i risultati statistici desiderati Davide Fazzone – Matr. 534/002977 Conclusioni e Sviluppi Futuri Statistiche complessive 73,6% dei casi di test senza errori 11,8% dei casi di test con Crash 2,5% dei casi di test con Hang 12,1% dei casi di test con Errori Applicativi Percentuali dei failure riscontrati rispetto al totale degli errori Sviluppi Futuri Logging in caso di Hang Modalità diverse da test a “scatola chiusa” Davide Fazzone – Matr. 534/002977 Grazie dell’attenzione Davide Fazzone – Matr. 534/002977