Using Loop Invariants to Detect Transient Faults in the Data Caches Seung Woo Son, Sri Hari Krishna Narayanan and Mahmut T. Kandemir Microsystems Design Lab. The Pennsylvania State University
LCTES04-Student Forum Related Work – H/W Hardware fault detection usually involves a combination of Information redundancy (e.g., ECC, parity, etc.) Temporal redundancy (e.g., executing the same instruction twice in the same functional unit, but at different times) Spatial redundancy (e.g., executing same instruction in different functional units)
LCTES04-Student Forum Related Work -S/W Replication of the program execution and the check of the results Recovery Blocks N-Version Programming Introduction of some control code into the program ABFT Assertions Code Flow Checking
LCTES04-Student Forum Our Approach Use loop invariants to detect transient-faults What is a loop invariant? It is data or a property that does not change during execution of a loop. Why target loops? Loops make up 90% of the execution time. Our usage of invariants If invariant value has changed, then soft error has occurred, modifying the data in cache. In that case, re-perform iterations.
LCTES04-Student Forum Bubble Sort Algorithm Bubblesort(sequence): Input: sequence of integers sequence Post-condition: sequence is sorted & contains the same integers as the original sequence length = length of sequence for i = 0 to length - 1 do for j = 0 to length - i -2 do if jth element of sequence >(j+1)th element of sequence then swap jth and (j+1)th element of sequence
LCTES04-Student Forum Bubble Sort-Sample Invariants Loop Invariant – Outer Loop: Last i elements of sequence are sorted and are all greater or equal to the other elements of the sequence. Loop Invariant – Inner Loop: Same as outer loop and the jth element of sequence is greater or equal to the first j elements of sequence.
LCTES04-Student Forum The Big Picture: How does the Project Work? Use an Invariant Detector to detect invariants in code. Incorporate ‘checker code’ into the source code -> hardened version Run this code in a modified version of SimpleScalar that injects errors into memory and cache. Calculate how our method performs
LCTES04-Student Forum The Daikon Invariant Detector Daikon - developed at the Program Analysis Group at MIT. Dynamically detects invariants about a program ’ s data structures Limitations It only targets procedural invariants Does not target loops Does not consider local variables
LCTES04-Student Forum Daikon Usage Modify our Source Code such that Daikon can detect loop invariants Instrument the Source Code Run Test Suites on Instrumented code to create Trace Files Detect invariants in Trace Files Incorporate Invariant Checker code in the Source Code
LCTES04-Student Forum Fault Injection Mechanism Modified SimpleScalar v3.0d to inject faults Randomly generate faults on memory access operation Memory corruption routines from Angshuman ’ s In our study, we randomly flip one bit of memory data during memory and cache read/write operations Generate statistics for faults injected
LCTES04-Student Forum Detected loop invariant – bubble sort … a != null -> easy a[i] > i -> easy i >= 1 -> easy n == 100 -> easy a[i..] sorted by medium a[0..i] sorted by > -> medium i easy …
LCTES04-Student Forum Detected loop invariant – matrix multiplication … size(a[]) == size(b[]) -> easy i >= 0 -> easy b[] contains no duplicates -> difficult b[] elements != null -> medium b[] == a[] > useless …
LCTES04-Student Forum Experiment Setup Bubble Sort Array size = 100 # of iteration = 150 Total # of instruction simulated: 68,019,732 Matrix Multiplication Array size = 100 x 100 # of iteration = 1 Total # of instruction simulated: 65,547,520
LCTES04-Student Forum Detection Rate
LCTES04-Student Forum Detection overhead - code increase
LCTES04-Student Forum Conclusion Developed a soft error detection technique using loop-invariants Detection rate varies according to the characteristics of the applications Different programs have different loop invariants Performance degradation due to fault- hardened code
LCTES04-Student Forum Future Work Better invariant generation mechanism that generated loop invariants directly Automatic Classification of Invariants Automatic Assertion generator in Source Code More accurate fault injection