[rocprofv3] signal handler fix (#332)

* rocprofv3: LD_PRELOAD for signal and sigaction

- wrappers around `signal` and `sigaction` to prevent applications which install signal handlers to replace the rocprofv3 signal handlers
- minor tweaks to buffer sizes (use page_size instead of
KiB)

* [DO NOT COMMIT] extra logging

* Switch git submodule url for perfetto

- use GitHub URL as this is more accessible

* Update ring_buffer<Tp>

- account for alignment padding

* Update buffered_output

- track number of bytes stored
- add nullptr checks

* Update tmp_file_buffer

- track number of bytes
- read_tmp_file does not create tmp file if it does not already exist

* Update tmp_file

- add exists member function for checking whether temporary file already exists
- tweak remove() implementation

* Update config.hpp

- add option to enable/disable signal handlers
- add option for minimum_output_bytes

* Make signal, sigaction functions visible

* rocprofv3 tool updates

- chained signals
- override the signal handler(s) installed by the application
- improve cleanup of temporary files
- support minimum output bytes

* Add commandline support

* fixing test

* minor fix

* minor fix

* fix clang issue

* fix

* Adding docs

* review comments

* review changes

* review

* YUV pulldown additions to rocdecode

* More rocdecode changes

---------

Co-authored-by: Jonathan R. Madsen <jonathanrmadsen@gmail.com>
Co-authored-by: Jonathan R. Madsen <Jonathan.Madsen@amd.com>
Co-authored-by: Benjamin Welton <bewelton@amd.com>
This commit is contained in:
Nagaraj, Sriraksha
2025-04-17 23:10:52 -05:00
committed by GitHub
parent 46818b0167
commit 87badfbd15
22 changed files with 866 additions and 107 deletions
+26
View File
@@ -620,6 +620,26 @@ For MPI applications (or other job launchers such as SLURM), place rocprofv3 ins
help=argparse.SUPPRESS,
)
add_parser_bool_argument(
advanced_options,
"--disable-signal-handlers",
help="""Enables the signal handlers in the rocprofv3 tool.
When --disable-signal-handlers is set to true,
and application has its signal handler on SIGSEGV or similar installed,
then its signal handler will be used, not the rocprofv3 signal handler.
Note: glog still installs signal handlers which provide backtraces""",
)
advanced_options.add_argument(
"--minimum-output-data",
help="""Output files are generated only if output data size > minimum output data".
It can be used for controlling the generation of output files so that user don't recieve empty files.
The input is in KB units.""",
default=None,
type=int,
metavar="KB",
)
if args is None:
args = sys.argv[1:]
@@ -1359,6 +1379,12 @@ def run(app_args, args, **kwargs):
update_env("ROCPROF_PC_SAMPLING_METHOD", args.pc_sampling_method)
update_env("ROCPROF_PC_SAMPLING_INTERVAL", args.pc_sampling_interval)
if args.disable_signal_handlers is not None:
update_env("ROCPROF_SIGNAL_HANDLERS", not args.disable_signal_handlers)
if args.minimum_output_data:
update_env("ROCPROF_MINIMUM_OUTPUT_BYTES", args.minimum_output_data * 1024)
if args.advanced_thread_trace:
def int_auto(num_str):