Change Log¶
Recorder 3.0.0 Dec 27, 2024
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.
Recorder 2.4.0 Mar 24, 2023
Implement inter-process compression using offset pattern detection
Clean up code and simplify post-processing APIs
Recorder 2.3.3 Jan 21, 2022
Still require a RECORDER_WITH_NON_MPI hint for non-mpi programs.
Add a singal handler to intercept SIGTERM and SIGINT.
Allow setting buffer size 4. Fix timestamps in Chrome trace conversion
Recorder 2.3.2 Jan 18, 2022
Can handle both MPI and non-MPI programs without user hint.
Can handle fork() + exec() workflows.
Recorder 2.3.1 Nov 30, 2021
Separate MPI and MPI-IO.
Updated conflict detector to use the latest reader code.
Recorder 2.3.0 Sep 15, 2021
Adopt pilgrim copmerssion algorithm.
Implemented a new reader and decorder interface.
Support GNU ftrace functionality.
Support multi-threaded programs. Record has a thread id field.
Store records in starting timestamp order.
Store level information for each record.
Add APIs to retrive function type and function name, etc.
Recorder 2.2.1 Aug 25, 2021
Include the code for verifying I/O synchronizations (tools/verifyio).
Add support for multi-threaded programs.
Recorder 2.2.0 Jan 25, 2021
Add support for MPI_Cart_sub, MPI_Comm_split_type, etc.
Assign each MPI_Comm object a globally unique id.
Recorder 2.1.9 Jan 14, 2021
Clean up the code
Fixed a few memory leak issues
Add support for fseeko and ftello
Recorder 2.1.8 Dec 18, 2020
Add MPI_Test, MPI_Testany, MPI_Testsome and MPI_Testall
Add MPI_Ireduce, MPI_Iscatter, MPI_Igather and MPI_Ialltoall
Do not log pointers by default as it delivers not so much information
Recorder 2.1.7 Nov 11, 2020
Add fcntl() support. Only support commands defined in POSIX standard.
Add support for MPI_Ibcast()
Recorder 2.1.6 Nov 05, 2020
Generate unique id for communicators
Fix bus caused by MPI_COMM_NULL
Add support for MPI_File_get_size
Recorder 2.1.5 Aug 27, 2020
Add MPI_File_seek and MPI_File_seek_shared
Add documentation on how to install using Spack.
Recorder 2.1.4 Aug 26, 2020
Update LICENSE
Update automake/autotools files to make it ready for Spack
Recorder 2.1.3 Aug 24, 2020
Use autotools and automake for compilation.
Add support for MPI_Comm_split/MPI_Comm_dup/MPI_Comm_create
Store the value of MPI_Status
Recorder 2.1.2 Aug 06, 2020
Rewrite the reader program with C.
Add Python bindings to call C functions.
Add support for MPI_Waitall/Waitany/Waitsome and MPI_Ssend
Remove oft2 converter.
Clean up the Makefile.
Recorder 2.1.1 Jun 28, 2020
Use uthash library to replace the original hash map implementation
Remove zlib support
Recorder 2.1 May 15, 2020
Dump a VERSION file for the reader script to decide the trace format.
Include the return value in each record.
Implement conflict detection algorithm for commit semantics and session semantics.
Recorder 2.0.1 Nov 7, 2019
Implement compressed peephole encoding schema.
Intergrat zlib as another compression choice.
Users can choose compression modes by setting environment variables.
Recorder 2.0 Jul 19, 2019
Add the binary format output.
Implement a converter that can output OTF2 trace format.
Write a separate log unit to provide an uniform logging interface. Re-write most of the code to use this new log unit.
Ignore files (e.g. /sockets) that are not used by the application itself.
Add a built-in hashmap to support mappings from function name and filename to integers.
Put all function (that we plan to intercept) signatures in the same header file