150 likes | 246 Views
Jaca: a Reflective Fault Injection Tool based on Patterns. Eliane Martins Cecilia Rubira Nelson Leme Institute of Computing State University of Campinas - Unicamp Brasil. International Performance and Dependability Symposium — IPDS’2002 Washington, D.C., USA • June 23 - 26, 2002. Contents.
E N D
Jaca: a Reflective Fault Injection Tool based on Patterns Eliane Martins Cecilia Rubira Nelson Leme Institute of Computing State University of Campinas - Unicamp Brasil International Performance and Dependability Symposium — IPDS’2002 Washington, D.C., USA • June 23 - 26, 2002
Contents • Context • Motivation and Objective • Jaca • Preliminary Experiments • Conclusions • Future Works
Fault Injection • Deliberate introduction of faults into a system to observe its behavior • valuable approach to validate dependability properties • useful to evaluate impact of error recovery mechanisms into performance • Approaches: • simulation-based fault injection • hardware fault injection • software fault injection (SFI)
SFI Approaches • Static injection (compile-time) • source or Assembler code alteration • no extra code is needed • faults triggered when • altered code is accessed • Dynamic injection (runtime) • special process • interrupt routines • trace mode • code insertion • needs extra code: fault injector • and monitor • needs fault trigger mechanism
Motivation • Typical runtime SFI tools work at machine code level ex.: corruption of CPU registers • useful to emulate consequences of hardware failures • low intrusion into the target application • great effort to emulate software faults ex.: incorrect assignment of values to variables; incorrect array indexes; missing function • Why is it important to emulate software faults ? • software faults are major cause of system failures • COTS software components use is increasing, even for critical applications
Our Goals • Problem: • Runtime injection at source-code level, affecting objects’ attributes and methods • Separation of concerns: fault injection and monitoring code separated from application code • Approach used: • computational reflection
Computational Reflection • Capability of a system to reason about or act upon itself • Reflective systems manipulate • external data • meta information: data representing system’s aspects structural reflection manipulation of structural aspects ex.: definition of a class or function behavioral reflection manipulation of system’s behavior ex.: method invocation interception • Reflective systems’ • architecture: • base level: system’s functions • meta level: interception and/or • alteration functions
A B Behavioral Reflection and OO object X : class attribute A : type, value method M1 : name, parameters metaobject meta-level base-level M1 object X M2 M3
Jaca • Evolution of FIRE: • runtime fault injection tool for applications written in C++ • showed feasibility of the approach • source code dependency • Main requirements: • validation of Java applications • high portability • source code independence • ability to incorporate new fault models
Development Aspects • Design based on the Fault Injection Pattern set: • reuse of architectural solutions already used to implement fault injection tools • Code is written in pure Java • Use of Javassist reflection library: • extends Java reflection API • requires no modification to the standard JVM • performs reflection at bytecode level during load time • modularity • extensibility • portability • source code • independence
Log File Fault List Class List Jaca’s Architecture Interface Jaca Controller Injector Manager Monitor Manager Activator Logical Injector Logical Injector … … Logical Monitor Logical Monitor Meta Level Physical Injector Physical Monitor Target Application Base Level …
Application’s Class Files Metaobjects’ ClassFiles Javassist library Metaobject Physical Injector Physical Monitor Application Instrumentation byte code byte code Activator (class loader) byte code + hooks to metaobjects
Preliminary Experiments • Experiments to show Jaca’s extensibility: • Assembler-level fault injection • JNIEXPORT void JNICALL Java_LowLevelRoutine • (JNIEnv *param1, jobject param2) • { • int a, b, c, d, op, num ; • printf ( "\n###-> testing CPUID\n” ) ; • op = 1; • asm ( • "cpuid" • : "=a" (a), • "=b" (b), • "=c" (c), • "=d" (d) • : "a" (op)); • printf ( "\n###-> Register values: - EAX: %i, EBX: %i, • ECX: %i, EDX: %i\n\n", a, b, c, d ) ; • ... } Physical Injector Low Level Functions LowLevelRoutine( )
Conclusions and Future Works • Jaca: • an extensible, portable software fault injector • faults affect attributes and methods of Java applications • fault injection uses computational reflection • source code independent but ... • dependent on reflection toolkit used • Further works: • validate real world applications • COTS ODBMS is being tested • extend Jaca’s functionalities • use of other reflection toolkits: Guaraná, Kava • explore Assembler-level fault injection features
Thank you ! • Our emails: eliane@ic.unicamp.br cmrubira@ic.unicamp.br nleme@post.com