808ea7dfa7
## Overview
This is a significant PR which has 3 very notable characteristics:
1. Omnitrace colorizes most of it's logging
2. Completely reworked the sampling
- Samples now record the current instruction pointers instead of strings
- This _dramatically_ decreases the overhead of taking a sample
- The collection of metrics during a sample are split out into another component, enabling that data collection to be disabled -- which decreases the sampling overhead even further
- When both `OMNITRACE_SAMPLING_CPUTIME` and `OMNITRACE_SAMPLING_REALTIME` are ON:
- `OMNITRACE_SAMPLING_CPUTIME_FREQ` and `OMNITRACE_SAMPLING_REALTIME_FREQ` can be used to individually control the sampling frequency
- `OMNITRACE_SAMPLING_CPUTIME_DELAY` and `OMNITRACE_SAMPLING_REALTIME_DELAY` can be used to individually control the delay time before starting
- Now, omnitrace does not start a real-time sampler on the main thread unless `OMNITRACE_SAMPLING_REALTIME` is ON
- In the future, an `OMNITRACE_SAMPLING_TIDS` (and real-time, cpu-time variants) configuration variable(s) will allow you to select which threads will be sampled
3. Files produced by `omnitrace` exe -- `available-instr.txt`, `instrumented-instr.txt`, etc. -- now no longer has `-instr` suffix and are placed in `instrumentation/` subfolder, i.e. `available-instr.txt` -> instrumentation/available.txt`
- This helped de-clutter the output folder
Most of the other edits were reorganization (e.g. internal namespace changes), cleanup, and splitting up functionality.
## Bug Fixes
There is a bug fix with respect to the HSA callbacks which disabled sampling on child threads when an HSA API call was made
## Details
- created thread_info struct for mapping different thread IDs
- reorganized file structure significantly
- added categories.hpp, concepts.hpp
- moved around name trait definitions
- moved all omnitrace components into `omnitrace::component` namespace
- there was a lot of inconsistency b/t using `tim::component` in some places and `omnitrace::component`
- added macros like OMNITRACE_DECLARE_COMPONENT in lieu of TIMEMORY_DECLARE_COMPONENT
- OMNITRACE_CRITICAL_TRACE_NUM_THREADS -> OMNITRACE_THREAD_POOL_SIZE
- roctracer and critical_trace use same thread pool
- critical_trace functions do not lock anymore bc of thread-local TaskGroup
- added `component::local_category_region` to support using `component::category_region` without explicitly passing in name
- removed `component::omnitrace` (unused)
- migrated KokkosP and OMPT to use `component::local_category_region`
- removed `component::user_region` as a result
- migrated omnitrace_{push,pop}_{trace,region}_hidden to use component::category_region
- removed `component::functors` as a result
- migrated some ppdefs
- `api::omnitrace` -> `project::omnitrace`
- `api::(...)` -> `category::(...)`
- improved recording the execution time of threads
- migrated this functionality out of pthread_create_gotcha and into thread_info
- moved mpi_gotcha, fork_gotcha, exit_gotcha, rcclp into omnitrace::component namespace
- split backtrace up into backtrace, backtrace_metrics, backtrace_timestamp components
- sampling.cpp handles setup and post-processing that was formerly in backtrace
- updated logging to use colors
- `OMNITRACE_COLORIZED_LOG` config variable
- updated docs on JSON output from timemory
- instrumentation info in instrumentation subfolder
- added testing for KokkosP entries
- added testing for ompt entries
- add_critical_trace function defined in critical_trace.hpp
- disable push_thread_state and pop_thread_state when thread state is Disabled or Completed
- add comp::page_rss to main bundle
- thread_data supports std::optional instead of std::unique_ptr
- thread_data supports tim::identity<T> to avoid unique_ptr or optional
- tracing::record_thread_start_time()
- tracing::push_timemory and tracing::pop_timemory are templated on CategoryT
- removed anonymous namespace from omnitrace::utility
- sampling backtrace stores instruction pointers instead of strings
- component::category_region updates
- handle disabled thread state
- handle finalized state
- fewer debug messages
- invoke thread_init()
- invoke thread_init_sampling()
- handle push/pop count based on category
- push/pop count only modified when used
- component::cpu_freq
- components/ensure_storage.hpp
- reworked the pthread_create replacement function
- updated parallel-overhead example to report # of times locked
- OMNITRACE_MAX_UNWIND_DEPTH build option
- update timemory submodule
246 satır
5.6 KiB
YAML
246 satır
5.6 KiB
YAML
parse:
|
|
additional_commands:
|
|
omnitrace_checkout_git_submodule:
|
|
flags:
|
|
- RECURSIVE
|
|
kwargs:
|
|
RELATIVE_PATH: '*'
|
|
WORKING_DIRECTORY: '*'
|
|
TEST_FILE: '*'
|
|
REPO_URL: '*'
|
|
REPO_BRANCH: '*'
|
|
ADDITIONAL_COMMANDS: '*'
|
|
omnitrace_save_variables:
|
|
kwargs:
|
|
VARIABLES: '*'
|
|
CONDITION: '*'
|
|
omnitrace_restore_variables:
|
|
kwargs:
|
|
VARIABLES: '*'
|
|
CONDITION: '*'
|
|
omnitrace_add_test:
|
|
flags:
|
|
- SKIP_BASELINE
|
|
- SKIP_REWRITE
|
|
- SKIP_RUNTIME
|
|
- SKIP_SAMPLING
|
|
kwargs:
|
|
NAME: '*'
|
|
TARGET: '*'
|
|
MPI: '*'
|
|
GPU: '*'
|
|
NUM_PROCS: '*'
|
|
REWRITE_TIMEOUT: '*'
|
|
RUNTIME_TIMEOUT: '*'
|
|
REWRITE_ARGS: '*'
|
|
RUNTIME_ARGS: '*'
|
|
RUN_ARGS: '*'
|
|
ENVIRONMENT: '*'
|
|
LABELS: '*'
|
|
PROPERTIES: '*'
|
|
RUNTIME_PASS_REGEX: '*'
|
|
RUNTIME_FAIL_REGEX: '*'
|
|
REWRITE_PASS_REGEX: '*'
|
|
REWRITE_FAIL_REGEX: '*'
|
|
REWRITE_RUN_PASS_REGEX: '*'
|
|
REWRITE_RUN_FAIL_REGEX: '*'
|
|
omnitrace_target_compile_definitions:
|
|
kwargs:
|
|
PUBLIC: '*'
|
|
PRIVATE: '*'
|
|
INTERFACE: '*'
|
|
omnitrace_add_bin_test:
|
|
flags:
|
|
- WILL_FAIL
|
|
- ADD_INVERSE
|
|
kwargs:
|
|
NAME: '*'
|
|
ARGS: '*'
|
|
LABELS: '*'
|
|
TARGET: '*'
|
|
DEPENDS: '*'
|
|
COMMAND: '*'
|
|
TIMEOUT: '*'
|
|
PROPERTIES: '*'
|
|
ENVIRONMENT: '*'
|
|
WORKING_DIRECTORY: '*'
|
|
PASS_REGEX: '*'
|
|
FAIL_REGEX: '*'
|
|
SKIP_REGEX: '*'
|
|
omnitrace_add_python_test:
|
|
flags:
|
|
- STANDALONE
|
|
kwargs:
|
|
NAME: '*'
|
|
FILE: '*'
|
|
TIMEOUT: '*'
|
|
PROFILE_ARGS: '*'
|
|
RUN_ARGS: '*'
|
|
ENVIRONMENT: '*'
|
|
LABELS: '*'
|
|
DEPENDS: '*'
|
|
COMMAND: '*'
|
|
PROPERTIES: '*'
|
|
PYTHON_EXECUTABLE: '*'
|
|
PYTHON_VERSION: '*'
|
|
PASS_REGEX: '*'
|
|
FAIL_REGEX: '*'
|
|
SKIP_REGEX: '*'
|
|
omnitrace_add_python_validation_test:
|
|
kwargs:
|
|
NAME: '*'
|
|
ARGS: '*'
|
|
PERFETTO_FILE: '*'
|
|
PERFETTO_METRIC: '*'
|
|
TIMEMORY_FILE: '*'
|
|
TIMEMORY_METRIC: '*'
|
|
rocm_version_message:
|
|
flags:
|
|
- STATUS
|
|
- WARNING
|
|
- SEND_ERROR
|
|
- FATAL_ERROR
|
|
- AUTHOR_WARNING
|
|
omnitrace_find_python:
|
|
flags:
|
|
- REQUIRED
|
|
- QUIET
|
|
kwargs:
|
|
VERSION: '*'
|
|
ROOT_DIR: '*'
|
|
COMPONENTS: '*'
|
|
omnitrace_python_console_script:
|
|
kwargs:
|
|
VERSION: '*'
|
|
ROOT_DIR: '*'
|
|
omnitrace_pybind11_add_module:
|
|
flags:
|
|
- MODULE
|
|
- SHARED
|
|
- EXCLUDE_FROM_ALL
|
|
- NO_EXTRAS
|
|
- SYSTEM
|
|
- THIN_LTO
|
|
- LTO
|
|
kwargs:
|
|
PYTHON_VERSION: '*'
|
|
CXX_STANDARD: '*'
|
|
VISIBILITY: '*'
|
|
omnitrace_directory:
|
|
flags:
|
|
- MKDIR
|
|
- FAIL
|
|
kwargs:
|
|
PREFIX: '*'
|
|
OUTPUT_VARIABLE: '*'
|
|
WORKING_DIRECTORY: '*'
|
|
PATHS: '*'
|
|
omnitrace_check_python_dirs_and_versions:
|
|
flags:
|
|
- UNSET
|
|
- FAIL
|
|
kwargs:
|
|
RESULT_VARIABLE: '*'
|
|
OUTPUT_VARIABLE: '*'
|
|
omnitrace_find_static_library:
|
|
flags:
|
|
- NO_CACHE
|
|
- REQUIRED
|
|
- NO_DEFAULT_PATH
|
|
- NO_PACKAGE_ROOT_PATH
|
|
- NO_CMAKE_PATH
|
|
- NO_CMAKE_ENVIRONMENT_PATH
|
|
- NO_SYSTEM_ENVIRONMENT_PATH
|
|
- CMAKE_FIND_ROOT_PATH_BOTH
|
|
- ONLY_CMAKE_FIND_ROOT_PATH
|
|
- NO_CMAKE_FIND_ROOT_PATH
|
|
kwargs:
|
|
NAMES: '*'
|
|
NAMES_PER_DIR: '*'
|
|
HINTS: '*'
|
|
PATHS: '*'
|
|
PATH_SUFFIXES: '*'
|
|
DOC: '*'
|
|
omnitrace_find_shared_library:
|
|
flags:
|
|
- NO_CACHE
|
|
- REQUIRED
|
|
- NO_DEFAULT_PATH
|
|
- NO_PACKAGE_ROOT_PATH
|
|
- NO_CMAKE_PATH
|
|
- NO_CMAKE_ENVIRONMENT_PATH
|
|
- NO_SYSTEM_ENVIRONMENT_PATH
|
|
- CMAKE_FIND_ROOT_PATH_BOTH
|
|
- ONLY_CMAKE_FIND_ROOT_PATH
|
|
- NO_CMAKE_FIND_ROOT_PATH
|
|
kwargs:
|
|
NAMES: '*'
|
|
NAMES_PER_DIR: '*'
|
|
HINTS: '*'
|
|
PATHS: '*'
|
|
PATH_SUFFIXES: '*'
|
|
DOC: '*'
|
|
override_spec: {}
|
|
vartags: []
|
|
proptags: []
|
|
format:
|
|
disable: false
|
|
line_width: 90
|
|
tab_size: 4
|
|
use_tabchars: false
|
|
fractional_tab_policy: use-space
|
|
max_subgroups_hwrap: 2
|
|
max_pargs_hwrap: 8
|
|
max_rows_cmdline: 2
|
|
separate_ctrl_name_with_space: false
|
|
separate_fn_name_with_space: false
|
|
dangle_parens: false
|
|
dangle_align: child
|
|
min_prefix_chars: 4
|
|
max_prefix_chars: 10
|
|
max_lines_hwrap: 2
|
|
line_ending: unix
|
|
command_case: lower
|
|
keyword_case: upper
|
|
always_wrap: []
|
|
enable_sort: true
|
|
autosort: false
|
|
require_valid_layout: false
|
|
layout_passes: {}
|
|
markup:
|
|
bullet_char: '*'
|
|
enum_char: .
|
|
first_comment_is_literal: true
|
|
literal_comment_pattern: ^#
|
|
fence_pattern: ^\s*([`~]{3}[`~]*)(.*)$
|
|
ruler_pattern: ^\s*[^\w\s]{3}.*[^\w\s]{3}$
|
|
explicit_trailing_pattern: '#<'
|
|
hashruler_min_length: 10
|
|
canonicalize_hashrulers: true
|
|
enable_markup: true
|
|
lint:
|
|
disabled_codes: []
|
|
function_pattern: '[0-9a-z_]+'
|
|
macro_pattern: '[0-9A-Z_]+'
|
|
global_var_pattern: '[A-Z][0-9A-Z_]+'
|
|
internal_var_pattern: _[A-Z][0-9A-Z_]+
|
|
local_var_pattern: '[a-z][a-z0-9_]+'
|
|
private_var_pattern: _[0-9a-z_]+
|
|
public_var_pattern: '[A-Z][0-9A-Z_]+'
|
|
argument_var_pattern: '[a-z][a-z0-9_]+'
|
|
keyword_pattern: '[A-Z][0-9A-Z_]+'
|
|
max_conditionals_custom_parser: 2
|
|
min_statement_spacing: 1
|
|
max_statement_spacing: 2
|
|
max_returns: 6
|
|
max_branches: 12
|
|
max_arguments: 5
|
|
max_localvars: 15
|
|
max_statements: 50
|
|
encode:
|
|
emit_byteorder_mark: false
|
|
input_encoding: utf-8
|
|
output_encoding: utf-8
|
|
misc:
|
|
per_command: {}
|