CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
509 lines
14 KiB
ReStructuredText
509 lines
14 KiB
ReStructuredText
.. meta::
|
|
:description: ROCprofiler-Systems preset profiles and domain flags guide
|
|
:keywords: ROCm, profiling, presets, domain flags, HPC, AI, ML, GPU, tracing, configuration
|
|
|
|
******************************************************************************
|
|
Using preset profiles and domain flags
|
|
******************************************************************************
|
|
|
|
ROCm Systems Profiler provides preset profiles and domain flags that simplify
|
|
configuring the profiler for common workload scenarios. Instead of manually
|
|
setting numerous environment variables, use a single ``--preset`` flag or
|
|
combine domain flags for composable configuration.
|
|
|
|
Quick start
|
|
===========
|
|
|
|
The following example runs are using the ``rocprof-sys-run`` tool.
|
|
All of the examples should and will produce the same output when running with ``rocprof-sys-sample`` tool also.
|
|
|
|
.. code-block:: shell
|
|
|
|
# Use a preset for balanced profiling
|
|
rocprof-sys-run --preset=balanced -- ./myapp
|
|
|
|
# List all available presets
|
|
rocprof-sys-run --list-presets
|
|
|
|
# See detailed info about a preset
|
|
rocprof-sys-run --explain=balanced
|
|
|
|
# Combine a preset with domain flags
|
|
rocprof-sys-run --preset=balanced --gpu=temp,power -- ./myapp
|
|
|
|
# Export configuration as reusable JSON
|
|
rocprof-sys-run --preset=balanced --gpu --export-config=my-config.json
|
|
|
|
Topic-based help
|
|
================
|
|
|
|
The ``--help`` system is organized by topic to avoid overwhelming output:
|
|
|
|
.. code-block:: shell
|
|
|
|
# Compact summary with essential options
|
|
rocprof-sys-run --help
|
|
|
|
# Help for a specific topic
|
|
rocprof-sys-run --help=sampling
|
|
rocprof-sys-run --help=gpu
|
|
rocprof-sys-run --help=tracing
|
|
|
|
# Full option listing
|
|
rocprof-sys-run --help=all
|
|
|
|
Available help topics:
|
|
|
|
* **Group topics:** ``preset``, ``general``, ``tracing``, ``profiling``,
|
|
``sampling``, ``process``, ``counters``, ``backend``, ``debug``, ``misc``
|
|
* **Domain topics:** ``gpu``, ``cpu``, ``rocm``, ``parallel``
|
|
|
|
Available presets
|
|
==================
|
|
|
|
Use ``--list-presets`` to see all presets grouped by category, or
|
|
``--explain=<name>`` for detailed information about a specific preset.
|
|
|
|
General purpose presets
|
|
------------------------
|
|
|
|
--preset=balanced
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Balanced profiling with moderate overhead and comprehensive data
|
|
|
|
**Best for:** Most profiling scenarios, recommended starting point
|
|
|
|
**Configuration:**
|
|
|
|
* Tracing: ON (Perfetto timeline)
|
|
* Profiling: ON (call-stack based)
|
|
* CPU Sampling: ON @ 50 Hz
|
|
* GPU Metrics: ON (via AMD SMI)
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-run --preset=balanced -- ./myapp
|
|
rocprof-sys-sample --preset=balanced -- ./myapp
|
|
|
|
--preset=profile-only
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Profiling-only mode without tracing (flat profile)
|
|
|
|
**Best for:** Production environments, minimal overhead profiling
|
|
|
|
**Configuration:**
|
|
|
|
* Tracing: OFF
|
|
* Profiling: ON (flat profile)
|
|
* CPU Sampling: OFF
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=profile-only -- ./production_app
|
|
|
|
--preset=detailed
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Comprehensive profiling with full system metrics
|
|
|
|
**Best for:** In-depth performance analysis, identifying bottlenecks
|
|
|
|
**Configuration:**
|
|
|
|
* Tracing: ON (Perfetto timeline)
|
|
* Profiling: ON (call-stack based)
|
|
* CPU Sampling: ON (all CPUs)
|
|
* GPU Metrics: ON
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=detailed -- ./complex_app
|
|
|
|
GPU and workload presets
|
|
--------------------------
|
|
|
|
--preset=trace-gpu
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** GPU workload analysis with device activity
|
|
|
|
**Configuration:** Tracing ON, Profiling OFF, ROCm domains ON, GPU metrics ON,
|
|
CPU Sampling OFF
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=trace-gpu -- ./gpu_compute_app
|
|
|
|
--preset=workload-trace
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Comprehensive tracing for AI/ML, HPC, and GPU workloads
|
|
|
|
**Configuration:** Tracing ON (2 GB buffer), Profiling ON, MPI ON, RCCL ON,
|
|
ROCm domains ON, GPU metrics ON, rocPD ON
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=workload-trace -- python train.py
|
|
|
|
--preset=trace-hw-counters
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Hardware counter collection (VALUUtilization, Occupancy)
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=trace-hw-counters -- ./kernel_heavy_app
|
|
|
|
HPC presets
|
|
-----------
|
|
|
|
--preset=trace-hpc
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Optimized for MPI, OpenMP, and compute-intensive applications
|
|
|
|
**Configuration:** Tracing ON, Profiling ON, MPI ON, OpenMP ON, Kokkos ON,
|
|
RCCL ON, PAPI events ON, ROCm domains ON, GPU metrics ON
|
|
|
|
.. code-block:: shell
|
|
|
|
mpirun -n 4 rocprof-sys-sample --preset=trace-hpc -- ./mpi_app
|
|
|
|
--preset=trace-openmp
|
|
~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** OpenMP with kernel dispatches and memory copies (excludes HSA API)
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=trace-openmp -- ./openmp_target_app
|
|
|
|
--preset=profile-mpi
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** MPI communication latency profiling (no tracing, no GPU)
|
|
|
|
.. code-block:: shell
|
|
|
|
mpirun -n 16 rocprof-sys-sample --preset=profile-mpi -- ./mpi_comm_app
|
|
|
|
API tracing presets
|
|
-------------------
|
|
|
|
--preset=sys-trace
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Comprehensive system API tracing (HIP, HSA, ROCTx, RCCL)
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=sys-trace -- ./my_rocm_app
|
|
|
|
--preset=runtime-trace
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
**Purpose:** Runtime API tracing (excludes compiler API and HSA internals)
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-sample --preset=runtime-trace -- ./my_hip_app
|
|
|
|
Domain flags
|
|
============
|
|
|
|
Domain flags provide high-level control over specific profiling domains.
|
|
They can be used standalone or combined with presets.
|
|
|
|
--gpu
|
|
-----
|
|
|
|
Enable GPU metrics collection via AMD SMI. Optionally specify which metrics:
|
|
|
|
.. code-block:: shell
|
|
|
|
# All default GPU metrics
|
|
rocprof-sys-run --gpu -- ./myapp
|
|
|
|
# Specific metrics only
|
|
rocprof-sys-run --gpu=temp,power,busy -- ./myapp
|
|
|
|
Available metrics: ``temp``, ``power``, ``busy`` (utilization), ``mem_usage``
|
|
|
|
Shortcuts: ``temperature`` -> ``temp``, ``usage``/``utilization`` -> ``busy``,
|
|
``memory`` -> ``mem_usage``
|
|
|
|
--rocm
|
|
------
|
|
|
|
Enable ROCm API tracing. Optionally specify which API domains:
|
|
|
|
.. code-block:: shell
|
|
|
|
# All default ROCm domains
|
|
rocprof-sys-run --rocm -- ./myapp
|
|
|
|
# Specific domains only
|
|
rocprof-sys-run --rocm=hip,kernel,memory -- ./myapp
|
|
|
|
Available domains: ``hip_runtime_api``, ``marker_api``, ``kernel_dispatch``,
|
|
``memory_copy``, ``scratch_memory``, ``hsa_api``, ``rccl_api``
|
|
|
|
Shortcuts: ``hip`` -> ``hip_runtime_api``, ``kernel`` -> ``kernel_dispatch``,
|
|
``memory`` -> ``memory_copy``, ``hsa`` -> ``hsa_api``,
|
|
``marker`` -> ``marker_api``, ``rccl`` -> ``rccl_api``
|
|
|
|
--cpu
|
|
-----
|
|
|
|
Enable CPU call-stack sampling. Optionally specify frequency in Hz:
|
|
|
|
.. code-block:: shell
|
|
|
|
# Default 100 Hz sampling
|
|
rocprof-sys-run --cpu -- ./myapp
|
|
|
|
# Custom frequency
|
|
rocprof-sys-run --cpu=50 -- ./myapp
|
|
|
|
--parallel
|
|
----------
|
|
|
|
Enable parallel runtime profiling. Optionally specify which runtimes:
|
|
|
|
.. code-block:: shell
|
|
|
|
# All runtimes (MPI, OpenMP, Kokkos, RCCL)
|
|
rocprof-sys-run --parallel -- ./myapp
|
|
|
|
# Specific runtimes
|
|
rocprof-sys-run --parallel=mpi,openmp -- ./mpi_app
|
|
|
|
Combining presets with domain flags
|
|
------------------------------------
|
|
|
|
Domain flags override or extend preset settings:
|
|
|
|
.. code-block:: shell
|
|
|
|
# Balanced preset with specific GPU metrics
|
|
rocprof-sys-run --preset=balanced --gpu=temp,power -- ./myapp
|
|
|
|
# HPC preset with custom ROCm domains
|
|
rocprof-sys-sample --preset=trace-hpc --rocm=hip,kernel,rccl -- ./app
|
|
|
|
# Profile-only preset with CPU sampling enabled
|
|
rocprof-sys-run --preset=profile-only --cpu=100 -- ./myapp
|
|
|
|
Configuration export
|
|
====================
|
|
|
|
Export the resolved configuration (preset + domain flags + env overrides) as
|
|
a reusable JSON file:
|
|
|
|
.. code-block:: shell
|
|
|
|
# Export to stdout
|
|
rocprof-sys-run --preset=balanced --gpu --export-config
|
|
|
|
# Export to file
|
|
rocprof-sys-run --preset=balanced --gpu --export-config=team-config.json
|
|
|
|
# Reuse the exported configuration
|
|
rocprof-sys-run --preset=./team-config.json -- ./myapp
|
|
|
|
Custom configuration files
|
|
==========================
|
|
|
|
Custom JSON configuration files can be loaded using the ``--preset`` flag
|
|
with a file path:
|
|
|
|
.. code-block:: shell
|
|
|
|
# Load from relative path
|
|
rocprof-sys-run --preset=./my-config.json -- ./myapp
|
|
|
|
# Load from absolute path
|
|
rocprof-sys-run --preset=/path/to/config.json -- ./myapp
|
|
|
|
See the JSON schema file at ``share/rocprofiler-systems/presets/schema.json``
|
|
for the full configuration format.
|
|
|
|
Preset directory
|
|
================
|
|
|
|
Presets are loaded from the following locations (in order):
|
|
|
|
1. ``$ROCPROFSYS_PRESET_DIR`` (if set)
|
|
2. ``<install-prefix>/share/rocprofiler-systems/presets``
|
|
3. ``$ROCM_PATH/share/rocprofiler-systems/presets``
|
|
|
|
Adding custom presets
|
|
---------------------
|
|
|
|
Create a JSON file in the preset directory:
|
|
|
|
.. code-block:: json
|
|
|
|
{
|
|
"metadata": {
|
|
"name": "my-preset",
|
|
"description": "Custom profiling configuration",
|
|
"use_case": "My specific workload",
|
|
"category": "custom"
|
|
},
|
|
"tracing": { "enabled": true },
|
|
"profiling": { "enabled": true },
|
|
"sampling": {
|
|
"enabled": true,
|
|
"frequency_hz": { "value": 100 }
|
|
}
|
|
}
|
|
|
|
The preset will be automatically discovered and available via
|
|
``--preset=my-preset``.
|
|
|
|
JSON schema reference
|
|
---------------------
|
|
|
|
The JSON preset schema supports the following sections. See the full schema
|
|
file at ``share/rocprofiler-systems/presets/schema.json`` for all available
|
|
fields with descriptions and types.
|
|
|
|
.. list-table::
|
|
:header-rows: 1
|
|
:widths: 20 80
|
|
|
|
* - Section
|
|
- Description
|
|
* - ``tracing``
|
|
- Perfetto trace output: ``enabled``, ``legacy``, ``buffer_size_kb``,
|
|
``fill_policy``
|
|
* - ``profiling``
|
|
- Call-stack profiling: ``enabled``, ``flat_profile``
|
|
* - ``sampling``
|
|
- CPU sampling: ``enabled``, ``frequency_hz``, ``timer``, ``delay_sec``,
|
|
``duration_sec``, ``cpus``, ``gpus``, ``ainics``
|
|
* - ``domains.gpu``
|
|
- GPU metrics via AMD SMI: ``enabled``, ``metrics`` (temp, power, busy,
|
|
mem_usage), ``sampling_rate_hz``, ``process_sampling_freq``, ``ainic``
|
|
* - ``domains.rocm``
|
|
- ROCm API tracing: ``enabled``, ``api_domains`` (hip_runtime_api,
|
|
kernel_dispatch, etc.), ``group_by_queue``
|
|
* - ``domains.cpu``
|
|
- CPU domain metrics: ``enabled``, ``metrics.freq``
|
|
* - ``domains.parallel``
|
|
- Parallel runtimes: ``mpi``, ``openmp``, ``kokkos``, ``rccl``,
|
|
``shmem``, ``ucx``
|
|
* - ``output``
|
|
- Output control: ``path``, ``time_output``, ``file_output``,
|
|
``rocpd_output``
|
|
* - ``hardware_counters``
|
|
- HW counters: ``enabled``, ``rocm_events``, ``papi_events``,
|
|
``papi_multiplexing``
|
|
* - ``causal``
|
|
- Causal profiling: ``enabled``, ``mode``, ``backend``,
|
|
``binary_scope``/``binary_exclude``,
|
|
``function_scope``/``function_exclude``,
|
|
``source_scope``/``source_exclude``, ``end_to_end``, ``delay_sec``,
|
|
``duration_sec``, ``random_seed``
|
|
* - ``advanced``
|
|
- Advanced settings: ``verbose``, ``debug``, ``max_depth``,
|
|
``trace_delay_sec``, ``trace_duration_sec``, ``cpu_affinity``,
|
|
``collapse_threads``, ``timemory_components``, ``network_interface``,
|
|
``trace_periods``, ``trace_period_clock_id``
|
|
|
|
Environment variables excluded from presets
|
|
-------------------------------------------
|
|
|
|
The following ``ROCPROFSYS_*`` environment variables are intentionally
|
|
**not included** in the JSON preset schema. These are internal runtime
|
|
settings whose values depend on the invocation context or low-level
|
|
implementation details. A preset should describe *what* to profile, not
|
|
how the profiler manages its internals.
|
|
|
|
**Session-specific** (depend on the invocation, not the profiling intent):
|
|
|
|
.. list-table::
|
|
:widths: 35 65
|
|
|
|
* - ``ROCPROFSYS_CONFIG_FILE``
|
|
- Path to the user's config file. Set at invocation time, not a
|
|
profiling choice.
|
|
* - ``ROCPROFSYS_OUTPUT_PREFIX``
|
|
- Per-run output prefix (e.g., test name). Set by the test harness
|
|
or user for each run.
|
|
* - ``ROCPROFSYS_SELECTED_REGIONS``
|
|
- Region filter for selective tracing. Depends on the specific
|
|
application being profiled.
|
|
|
|
**Internal plumbing** (implementation details users should not configure
|
|
via presets):
|
|
|
|
.. list-table::
|
|
:widths: 35 65
|
|
|
|
* - ``ROCPROFSYS_ENABLED``
|
|
- Master profiler enable flag. Always ``true`` when running via CLI
|
|
tools. Setting to ``false`` in a preset would silently disable
|
|
all profiling.
|
|
* - ``ROCPROFSYS_SUPPRESS_CONFIG``
|
|
- Suppress config file loading. Used internally by
|
|
``rocprof-sys-avail``.
|
|
* - ``ROCPROFSYS_SUPPRESS_PARSING``
|
|
- Suppress config parsing. Used internally. Setting in a preset
|
|
would break config file handling.
|
|
* - ``ROCPROFSYS_USE_PID``
|
|
- Include PID in output paths. Managed automatically by the output
|
|
subsystem.
|
|
* - ``ROCPROFSYS_PERFETTO_BACKEND``
|
|
- Perfetto transport backend (``inprocess``/``system``). Low-level
|
|
transport choice, not a profiling concern.
|
|
* - ``ROCPROFSYS_PERFETTO_FLUSH_PERIOD_MS``
|
|
- Perfetto flush interval. Performance tuning for the trace writer.
|
|
* - ``ROCPROFSYS_PROCESS_SAMPLING_DURATION``
|
|
- Duration of process sampling. Controlled via ``sampling.duration_sec``
|
|
in the sampling section instead.
|
|
* - ``ROCPROFSYS_SAMPLING_OVERFLOW_EVENT``
|
|
- Hardware overflow event name. Highly platform-specific and not
|
|
portable across machines.
|
|
* - ``ROCPROFSYS_CPU_FREQ_ENABLED``
|
|
- CPU frequency monitoring. Controlled indirectly via the
|
|
``domains.cpu`` section instead.
|
|
|
|
These variables can still be set directly via environment variables to
|
|
override behavior at runtime, but they are not part of the preset schema
|
|
and will not appear in ``--export-config`` output.
|
|
|
|
Troubleshooting
|
|
===============
|
|
|
|
Preset not found
|
|
----------------
|
|
|
|
.. code-block:: shell
|
|
|
|
# Check available presets
|
|
rocprof-sys-run --list-presets
|
|
|
|
# Set preset directory explicitly
|
|
export ROCPROFSYS_PRESET_DIR=/opt/rocm/share/rocprofiler-systems/presets
|
|
|
|
Viewing active configuration
|
|
-----------------------------
|
|
|
|
Use verbose mode to see what settings a preset configures:
|
|
|
|
.. code-block:: shell
|
|
|
|
rocprof-sys-run --preset=balanced -v 2 -- ./myapp
|
|
|
|
See also
|
|
========
|
|
|
|
* :doc:`sampling-call-stack` - Call-stack sampling basics
|
|
* :doc:`instrumenting-rewriting-binary-application` - Binary instrumentation
|
|
* :doc:`configuring-validating-environment` - Environment configuration
|