Files
TheRock/rocm-systems/projects/rocprofiler-systems/docs/how-to/using-preset-profiles.rst
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

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