tesi di laurea! Analisi empirica dei meccanismi di log in sistemi open-source! Anno Accademico 2010/2011! relatore! Ch.mo prof. Domenico Cotroneo! Correlatore! Ing. Antonio Pecchia! Candidato! Assunta Imperatrice! Matr. 534/1657!
files di testo prodotti dalle applicazioni, utilizzati per analizzare il comportamento al fallimento di un sist.! organizzati in records contenenti tipicamente un TIMESTAMP, una DESCRIZIONE DELLʼEVENTO e una SEVERITY! Meccanismo di logging Cosʼè?! Un insieme di istruzioni per:! la DETECTION di errori che si manifestano a run-time;! la COLLECTION delle relative informazioni nei logs;!! if (path == 0 strlen(path) == 0){! ERROR_SET(fatal, NDBD_EXIT_INVALID_CONFIG,!! "Invalid configuration fetched. Configuration does not contain valid, param_string);!...! Esempio: Chiamata alla funzione di log estratta dai sorgenti di MySQL 5.6.2 ( configuration.cpp, 368-373 )!
Problema1che Il meccanismo di logging presenta un importante limite:!! Studi dimostrano che circa il 60% dei fallimenti software dei sistemi non è segnalato nei log*! Obie4vo Analisi dei meccanismi di logging utilizzati in vari sistemi open-source, al fine di valutare la copertura dei logs rispetto ai Software Faults che si attivano a run-time! *M. Cinque, D. Cotroneo, R. Natella, and A. Pecchia. Assessing and improving the effectiveness of logs for the analysis of software faults. In Proc. Intʼl Conference on Dependable Systems and Networks (DSN 2010), pages 457 466!
Realizzazione del tool di supporto per il parsing delle chiamate di logs Ø RICEVE! i file sorgenti in ingresso! Ø ISOLA! le chiamate alle funzioni di log! Ø IDENTIFICA! le strutture per la detection! Ø PRODUCE:! CLASSIFICAZIONE e CONTEGGIO dei costrutti di controllo! CLASSIFICAZIONE ed ENUMERAZIONE di tutte le! possibili operazioni delle clausole negli IF! SCHEDATURA e CALCOLO di ciascuno dei possibili valori coinvolti nelle condizioni degli IF in notevoli 0, -1, 1, NULL, TRUE, FALSE e default VALUE (char, string e real)! Chiamate ap_log_error! Sorgenti http_main.c, http_config.c, http_log.c! n = 3! TOOL!! =================== Report ========================! LS SORGENTI 16276 LS ANALIZZATE 632 LOG 132! ELSE(std) 10 SWITCH 4 IFD 17 CATCH 0 OTHER 19! TOT IF 71 -> IF 1-Cond: 66 ** IF 2-Cond: 4 ** IF >= 3-Cond: 1 IF 2-Cond -> IF 1-Op/AND: 4 ** IF 1-Op/OR: 0! IF 3-Cond -> IF 2-Op/AND: 0 ** IF 2-Op/OR: 1 ** IF 2-Op/AND- OR: 0! ----------------------------------------------------------------------------------------! == -!= - < - > - <= - >=! NULL 4-0 (4)! 0 0-1 - 7-0 - 0-0 (8) -1 0-0 - 0-0 - 0-0 (0)! +1 0-0 - 0-0 - 0-0 (0) VALUE 4-36 - 3-1 - 0-0 (44) TRUE 13-0 (13)! FALSE 10-0 (10) Esempio: Analisi di Apache 2.2.19!
Sistemi open- source analizza1 La scelta dei software ha cercato di essere esaustiva: sono state considerate le caratteristiche dei sistemi reali al fine di ottenere dei risultati statisticamente significativi! Organizzazione a livello di S.O.! Dominio! applicativo! Tipologia! di sistema! Stile di! programmazione! Sistema! Operativo! Middleware! Server! Business! Critical! Mission! Critical! Centralizzato! Distribuito! Procedure! Oriented! (C)! Apache!!!!! Object! Oriented! (C++)! DDS!!!!! Cardamom!!!!! Minix!!!!! TAO!!!!! RTEMS!!!!! MySQL!!!!! Release analizzate:! Apache v. 1.3.41 / 2.0.64 / 2.2.19! DDS 1.0 /1.3 / 2.0 / 2.2! Corba TAO 1.6! Minix 3.1.8! Cardamom 2.1! RTEMS 4.10.1! MySQL 5.6.2!
CASO 1: Confronto del meccanismo di logging tra varie release di Apache PERCENTUALE DI CHIAMATE DI LOG RISPETTO AL CODICE ANALIZZATO! 3 25! 2 15! 1 5! APACHE v. 1.3.41 v. 2.0.64 v 2.2.19 Loc 24589 15053 16276 LOG 209 138 132 LOG/Loc 0,00849 0,00916 0,00811 Trend quasi costante per lʼaliquota di codice dedicata al logging! Operatori logici delle clausole degli IF! 18! 4! 4! 2! IF 1AND! IF 1 OR! IF 2 AND! IF 2 OR! IF 2 AND/OR! 1! 1! 1! Strutture di controllo per la detection di eventi! 18 16 14 12 10 8 6 4 2 157! v.1.3.41! v.2.0.64! v.2.2.19! 79! 71! 21! 24! 5! 5! 8! 1 IF! IF > 1 COND.! 1 4! 4! 33! 34! 15! 17! 16! 19! ELSE! SWITCH! IFDEFINE! OTHER! v La detection degli errori è realizzata principalmente per mezzo di strutture IF ed in particolare quelle formate da UNA condizione!! v Equità dellʼutilizzo dellʼoperatore OR negli IF composti da almeno tre condizioni: nella release 1.3.41 cʼè prevalenza di condizioni AND!
Operatori di confronto utilizzati nei costrutti IF! Valori per il confronto utilizzati nelle clausole degli IF! 140 90 120 100 80 60 40 20 0 93 31 31 44 39 37 41 9 10 3 2 1 1 5 0 0 0 0 ==!= < > <= >= v. 1.3.41 v. 2.0.64 v. 2.2.19 75 60 45 30 15 0 67 51 47 44 22 22 13 1213 8 6 7 8 10 10 4 3 0 0 0 0 NULL 0-1 1 VALUE TRUE FALSE La detection privilegia lʼuso degli operatori di uguaglianza e disuguaglianza! Si rileva particolare discordanza nellʼutilizzo dei comparatori tra la v. 1.3.41 e le altre due! Contenuti i riscontri su tutti i valori notevoli e sullʼadempimento di eventi booleani: si registra una peculiarità per la v. 1.3.41!! Notevoli verifiche di carattere generale! CONSISTENTI DIFFERENZE DI LOGGING TRA LA RELEASE 1.3.41 E LE VERSIONI 2.0.64 E 2.2.19!
CASO 2: Confronto del meccanismo di logging S.O. MINIX RTEMS Loc 30042 148501 LOG 128 161 LOG/Loc 0,004260 0,001084 MIDDLEWARE CARDAMOM TAO DDS Loc 187891 60341 23277 LOG 597 430 475 LOG/Loc 0,003177 0,007126 0,020406 SERVER MYSQL APACHE Loc 339465 16276 LOG 593 132 LOG/Loc 0,001746 0,008110 PERCENTUALE DI CHIAMATE DI LOG RISPETTO AL CODICE ANALIZZATO! Variabilità nella quota di codice per il logging sia tra le differenti classi che tra il gruppo di sistemi delle medesime!
14 12 10 8 6 4 2 Sistema Operativo! MINIX! RTEMS! 92! 8 19! 5! 6! 9! 9! 11! 4! 2! 6! IF! IF >1 Cond.! ELSE! SWITCH!IFDEFINE! CATCH! OTHER! STRUTTURE DI CONTROLLO PER LA DETECTION DI FAULT! È confermato il trend per le differenti categorie: la detection è fatta per mezzo di costrutti IF! Si afferma la modalità di loggare essenzialmente attraverso lʼuso degli IF composti da UNA clausola! Processi Server! Middleware! 60 50 485! MYSQL! APACHE! 60 50 486! CARDAMOM! TAO! DDS! 431! 40 30 40 30 308! 20 10 71! 37! 25! 34! 11! 29! 5! 1 4! 17! 19! IF! IF >1 Cond.! ELSE! SWITCH!IFDEFINE! CATCH! OTHER! 20 10 87! IF! IF >1 Cond.! 76! 42! 43! 5! 12! 26! 4! 26! 1 4! 4! 1! 39! 53! 18! 8! ELSE! SWITCH! IFDEFINE! CATCH! OTHER!
7 6 5 4 3 2 1 30 25 20 15 10 5 MINIX! 29! 25! 34! Sistema Operativo! RTEMS! 49! 21! 1 6! 3! 1! 1! ==!!=! <! >! <=! >=! Maggior impiego dellʼoperatore di disuguaglianza! Server! MYSQL! APACHE! 246! 251! 31! 37! 17! 1 1 1! 2! 1 ==!!=! <! >! <=! >=! 6! 35 30 25 20 15 10 Equivalente uso dei comparatori di uguaglianza e disuguaglianza! 5 83! 303! 204! 82! Middleware! CARDAMOM! TAO! DDS! 173! 41! 24! 9! 1! 11! 1 1! 1 12! 2! ==!!=! <! >! <=! >=! Prevalenza dellʼoperatore di uguaglianza! COMPOSIZIONE CLAUSOLE IF:! OPERATORI DI COMPARAZIONE! Utilizzo limitato degli operatori di monotonia: eccezione nel Middleware TAO! Non si evidenzia un trend comune!
7 6 5 4 3 2 1 30 25 20 15 10 5 Facoltà di Ingegneria! 1! 1 21! 16! Sistema Operativo! 7! MINIX! 1! RTEMS! 4! 44! 56! 1 3! NULL! -1! 1! VALUE! TRUE! FALSE! Notevoli i controlli di carattere generali! Server! MYSQL! APACHE! 251! 21! 4! 8! 14! 1 92! 98! 44! 4! 5 8! 13! 1 NULL! -1! 1! VALUE! TRUE! FALSE! Discordanza tra i sistemi appartenenti ai Processi Server! 30 25 20 15 10 5 Middleware! CARDAMOM! TAO! DDS! 3! 9! 259! 85! 78! 4 11! 5! 88! 91! 63! 67! 32! 41! 29! 35! 3 NULL! -1! 1! VALUE! TRUE! FALSE! Moderati controlli sui valori -1, VALUE e sulle condizioni booleane: eccezione in corrispondenza dello 0 nel sistema TAO! COMPOSIZIONE CLAUSOLE IF:! VALORI DI CONFRONTO! Scarsi controlli sui valori NULL e 1! È confermata lʼassenza di un trend comune per il logging!
Lesson learned and Key finding Dallʼanalisi si evince che:!! q le chiamate alle funzioni di log sono innescate soprattutto dal rivelamento degli errori mediante lʼutilizzo di strutture di controllo IF!! q si tenta di loggare un errore attraverso UNA SOLA istruzione! Una delle possibili cause della limitazione del meccanismo di logging è da attribuirsi a quei Software Faults che, attivati nella fase run-time, generano errori che impediscono il raggiungimento delle strutture di controllo!