FITL: Extending LLVM for the Translation of Fault-Injection Directives

Design Quality vs. Level of Representation


A tool that accepts fault-injection specifications in source code but that injects faults by instrumenting LLVM IR.

Significance and Impact

Future HPC systems are expected to expose hardware faults at the application level, so well-designed fault injectors are needed for studying and testing application resilience.

Research Details

  • We have designed a novel set of fault-injection pragmas for C.
  • We have designed FITL as a novel set of LLVM extensions for fault injection.
  • We have described abstractions for translating our pragmas to FITL.
  • Our fault-injector provides a good balance between usability and accuracy/implementability by combining source-level directives and LLVM-level implementation.


The frequency of hardware errors in HPC systems continues to grow as system designs evolve toward exascale. Tolerating these errors efficiently and effectively will require software-based resilience solutions. With this requirement in mind, recent research has increasingly employed LLVM-based tools to simulate transient hardware faults in order to study the resilience characteristics of specific applications. However, such tools require researchers to configure their experiments at the level of the LLVM intermediate representation (LLVM IR) rather than at the source level of the applications under study. In this paper, we present FITL (Fault-Injection Toolkit for LLVM), a set of LLVM extensions to which it is straightforward to translate source-level pragmas that specify fault injection. While we have designed FITL not to be tied to any particular compiler front end or high-level language, we also describe how we have extended our OpenARC compiler to translate a novel set of fault-injection pragmas for C to FITL. Finally, we present several resilience studies we have conducted using FITL, including a comparison with a source-level fault injector we have built as part of OpenARC.