ERIS (short for "ERIS is a Resource Interference Suite") is a tool for performance bottleneck analysis based on the injection of "performance noise". Noise is defined as additional assembly instructions inserted into performance-critical sections of a code, with the goal to stress specific hardware bottleneck sources.
This repository contains the LLVM injection plugin at the core of the noise injection methodology.
This version was confirmed to build with with versions of LLVM from 19.1.3 to 21.0.0. It is built through CMake:
mkdir build
cd build
cmake -DLLVM_DIR=[...] [OTHER OPTIONS] ..
This will print a recap of the relevant CMake variables for the build:
=== Injection plugin config : ===
CMAKE_INSTALL_PREFIX = [...]
CMAKE_CXX_COMPILER = [...]
LLVM_DIR = [...]
CLANG = [...]
CLANGXX = [...]
LLVM_VERSION_MAJOR = [...]
LLVM_VERSION_MINOR = [...]
=================================
The LLVM_DIR variable in particular corresponds to the install path of the LLVM version against which the plugin will be linked. The variables CLANG, CLANGXX and LLVM_VERSION_[MAJOR/MINOR] are given for information only, and the code will be built using the standard CMAKE_CXX_COMPILER variable.
Then :
make
make install
which will install the plugin library in ${CMAKE_INSTALL_PREFIX}/lib.
For more details on the use of the plugin, please refer to the detailed documentation.
The plugin can be called on clang or clang++ using the following flags:
clang[++] -Xclang -load -Xclang libNoiseInjector.so -Xclang -fpass-plugin=libNoiseInjector.so
where libNoiseInjector.so is the plugin library generated by this project and accessible through your LD_LIBRARY_PATH.
Simple example uses can be found in the dedicated directory (see dedicated README). These include experiments presented in the "Noise Injection for Performance Bottleneck Analysis" paper. Artifacts (experimental data) for this paper can be found at the following DOI: 10.5281/zenodo.15598901.