uiuc-hpc/Recorder
Comprehensive Parallel I/O Tracing and Analysis
📋 Changes
- Automatic Tracing Code Generation: Introduced a new tracing mechanism that employs a three-phase generic tracing wrapper for each function of interest. These tracing wrappers can be generated automatically and compiled as plugins, making it extremely easy to extend support for additional functions and I/O libraries. Added support for nearly all functions of PnetCDF and NetCDF.
- Supporting Diverse Programs: Extend Recorder to trace a wide range of program types, including single-threaded, multi-threaded, MPI, non-MPI programs, and CUDA kernels. Recorder also captures rich metadata, such as thread IDs and function call depth, offering a deeper insight into the traced data. These features enable the tracing and analysis of I/O operations across a broader range of HPC scenarios.
- Pattern-Recognition-Based Compression: Implemented a compression algorithm based on pattern recognition, capable of identifying and compressing recurring code patterns and common I/O patterns. This algorithm also includes an inter-process compression stage, effectively reducing redundancy across processes.
Update reader code to make it compatible with older traces
1. Updated documents 2. Several bug fixes 3. Fixed compile issues on more HPC systems 4. Changed default tracing layers: all I/O layers will be traced by default. MPI layer is disabled by default
1. Now we switched to a new compression algorithm and thus a new tracing format. 2. Changed CMAKE system. 3. Developed two format converters.
1. Included a tool for checking I/O synchronization. It supports both MPI-IO semantics and POSIX semantics. 2. Fixed a few bugs.
Basically re-write the code. 1. Add the binary format output. 2. Implement a converter that can output OTF2 trace format. 3. Write a separate log unit to provide an uniform logging interface. Re-write most of the code to use this new log unit. 4. Ignore files (e.g. /sockets) that are not used the application itself. 5. Add a built-in hashmap to support mappings from function name and filename to integers. 6. Put all function (that we plan to intercept) signatures in the same header file
