Institute ofComputing Jaca: a Reflective Fault
Injection Tool based on PatternsEliane Martins
Cecilia Rubira
Nelson Leme
Institute of Computing
State University of Campinas - Unicamp
Brasil
International Performance and Dependability Symposium — IPDS’2002Washington, D.C., USA • June 23 - 26, 2002
2
Institute ofComputing
Contents
• Context
• Motivation and Objective
• Jaca
• Preliminary Experiments
• Conclusions
• Future Works
3
Institute ofComputing
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)
4
Institute ofComputing
• Static injection (compile-time)
– source or Assembler code alteration • no extra code is needed• faults triggered when altered code is accessed
• needs extra code: fault injector and monitor• needs fault trigger mechanism
SFI Approaches
• Dynamic injection (runtime)–special process–interrupt routines–trace mode–code insertion
5
Institute ofComputing
Motivation
• Typical runtime SFI tools work at machine code levelex.: 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
6
Institute ofComputing
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
7
Institute ofComputing
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 reflectionmanipulation of
structural aspectsex.: definition of a class or function
behavioral reflectionmanipulation of
system’s behaviorex.: method invocation
interception
• Reflective systems’
architecture:– base level: system’s functions
– meta level: interception and/or
alteration functions
8
Institute ofComputing
Behavioral Reflection and OO
metaobject
meta-level
base-level
object X : classattribute A : type, valuemethod M1 : name, parameters
M1A B
M2 M3
object X
9
Institute ofComputing 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
10
Institute ofComputing
• 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
Development Aspects
• portability• source code independence
• modularity• extensibility
11
Institute ofComputing
Jaca’s Architecture
Interface
Controller
InjectorManager
Monitor Manager
ActivatorLogicalInjector
Logical Injector
LogicalMonitor
LogicalMonitor
… …
PhysicalInjector
PhysicalMonitor
…
Meta Level
Base LevelTarget Application
Fault List
Log File
Class List
Jaca
12
Institute ofComputing
Application Instrumentation
Application’s Class Files
Metaobjects’ ClassFiles
byte code
byte code
Javassist library
Activator(class loader)
byte code +
hooks to metaobjects
Metaobject
Physical Injector
Physical Monitor
13
Institute ofComputing
Preliminary Experiments• Experiments to show Jaca’s extensibility:
– Assembler-level fault injection
PhysicalInjector
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 ) ;
... }
Low LevelFunctions
LowLevelRoutine( )
14
Institute ofComputing
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
15
Institute ofComputing
Thank you !
• Our emails:
Top Related