Install perfetto tools option (#58)

* Install perfetto tools option

- E.g. traced, perfetto, etc.

* Fix copying of perfetto directory

* Require curl for installing perfetto tools

* Fix to locating tools/ninja
This commit is contained in:
Jonathan R. Madsen
2022-05-11 15:05:09 -05:00
committed by GitHub
parent 346f8cd0bc
commit 8146426e8b
10 changed files with 282 additions and 31 deletions
@@ -34,7 +34,7 @@ jobs:
wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - &&
echo "deb [arch=amd64] https://repo.radeon.com/rocm/apt/${{ matrix.rocm_version }}/ ubuntu main" | tee /etc/apt/sources.list.d/rocm.list &&
apt-get update &&
apt-get install -y build-essential m4 autoconf libtool python3-pip clang libomp-dev ${{ matrix.compiler }} libudev-dev libnuma-dev rocm-dev rocm-utils roctracer-dev rocprofiler-dev hip-base hsa-amd-aqlprofile hsa-rocr-dev hsakmt-roct-dev libpapi-dev libopenmpi-dev &&
apt-get install -y build-essential m4 autoconf libtool python3-pip clang libomp-dev ${{ matrix.compiler }} libudev-dev libnuma-dev rocm-dev rocm-utils roctracer-dev rocprofiler-dev hip-base hsa-amd-aqlprofile hsa-rocr-dev hsakmt-roct-dev libpapi-dev libopenmpi-dev curl &&
python3 -m pip install --upgrade pip &&
python3 -m pip install 'cmake==3.16.3' &&
for i in 6 7 8 9; do /opt/conda/envs/py3.${i}/bin/python -m pip install numpy; done
@@ -66,7 +66,8 @@ jobs:
-DOMNITRACE_USE_HIP=ON
-DOMNITRACE_MAX_THREADS=64
-DOMNITRACE_USE_SANITIZER=OFF
-DTIMEMORY_USE_PAPI=OFF
-DOMNITRACE_USE_PAPI=OFF
-DOMNITRACE_INSTALL_PERFETTO_TOOLS=ON
- name: Build
timeout-minutes: 45
@@ -90,7 +91,9 @@ jobs:
timeout-minutes: 10
run: |
set -v
traced --background
export OMNITRACE_DEBUG=ON
export OMNITRACE_PERFETTO_BACKEND=system
which omnitrace-avail
ldd $(which omnitrace-avail)
omnitrace-avail --help
@@ -101,10 +104,12 @@ jobs:
ldd $(which omnitrace)
omnitrace --help
omnitrace -e -v 1 -o ls.inst --simulate -- ls
omnitrace -e -v 1 -o ls.inst -- ls
./ls.inst
omnitrace -e -v 1 --simulate -- ls
omnitrace -e -v 1 -o ls.inst -- ls
perfetto --out ls-perfetto-trace.proto --txt -c omnitrace.cfg
./ls.inst
omnitrace -e -v 1 -- ls
du -m ls-perfetto-trace.proto
- name: CTest Artifacts
if: success() || failure()
+3 -1
View File
@@ -115,6 +115,8 @@ omnitrace_add_option(
"Build with hidden visibility (disable for Debug builds)" ON ADVANCED)
omnitrace_add_option(OMNITRACE_BUILD_CI "Enable internal asserts, etc." OFF ADVANCED
NO_FEATURE)
omnitrace_add_option(OMNITRACE_INSTALL_PERFETTO_TOOLS
"Install perfetto tools (i.e. traced, perfetto, etc.)" OFF)
omnitrace_add_option(OMNITRACE_STRIP_LIBRARIES "Strip the libraries"
${_STRIP_LIBRARIES_DEFAULT} ADVANCED)
@@ -226,7 +228,7 @@ install(
OPTIONAL)
install(
FILES ${PROJECT_SOURCE_DIR}/roctrace.cfg
FILES ${PROJECT_SOURCE_DIR}/omnitrace.cfg
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}
OPTIONAL)
+22 -10
View File
@@ -23,6 +23,7 @@ omnitrace_add_interface_library(omnitrace-ptl "Enables PTL support (tasking)")
omnitrace_add_interface_library(omnitrace-papi "Enable PAPI support")
omnitrace_add_interface_library(omnitrace-ompt "Enable OMPT support")
omnitrace_add_interface_library(omnitrace-python "Enables Python support")
omnitrace_add_interface_library(omnitrace-perfetto "Enables Perfetto support")
omnitrace_add_interface_library(omnitrace-timemory "Provides timemory libraries")
omnitrace_add_interface_library(omnitrace-timemory-config
"CMake interface library applied to all timemory targets")
@@ -32,7 +33,7 @@ omnitrace_add_interface_library(omnitrace-compile-definitions "Compile definitio
set(OMNITRACE_EXTENSION_LIBRARIES
omnitrace::omnitrace-hip omnitrace::omnitrace-roctracer omnitrace::omnitrace-rocm-smi
omnitrace::omnitrace-mpi omnitrace::omnitrace-ptl omnitrace::omnitrace-ompt
omnitrace::omnitrace-papi)
omnitrace::omnitrace-papi omnitrace::omnitrace-perfetto)
target_include_directories(
omnitrace-headers INTERFACE ${PROJECT_SOURCE_DIR}/source/lib/omnitrace
@@ -50,23 +51,32 @@ string(REPLACE ":" ";" CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH};${CMAKE_PREFIX
#
# ----------------------------------------------------------------------------------------#
if(NOT WIN32)
set(CMAKE_THREAD_PREFER_PTHREAD ON)
set(THREADS_PREFER_PTHREAD_FLAG OFF)
endif()
set(CMAKE_THREAD_PREFER_PTHREAD ON)
set(THREADS_PREFER_PTHREAD_FLAG OFF)
find_library(pthread_LIBRARY NAMES pthread pthreads)
find_package_handle_standard_args(pthread-library REQUIRED_VARS pthread_LIBRARY)
find_package(Threads ${omnitrace_FIND_QUIETLY} ${omnitrace_FIND_REQUIREMENT})
if(Threads_FOUND)
target_link_libraries(omnitrace-threading INTERFACE ${CMAKE_THREAD_LIBS_INIT})
endif()
find_library(pthread_LIBRARY NAMES pthread pthreads)
find_package_handle_standard_args(pthread-library REQUIRED_VARS pthread_LIBRARY)
if(pthread_LIBRARY AND NOT WIN32)
if(pthread_LIBRARY)
target_link_libraries(omnitrace-threading INTERFACE ${pthread_LIBRARY})
else()
find_package(Threads ${omnitrace_FIND_QUIETLY} ${omnitrace_FIND_REQUIREMENT})
if(Threads_FOUND)
target_link_libraries(omnitrace-threading INTERFACE Threads::Threads)
endif()
endif()
foreach(_LIB dl rt)
find_library(${_LIB}_LIBRARY NAMES ${_LIB})
find_package_handle_standard_args(${_LIB}-library REQUIRED_VARS ${_LIB}_LIBRARY)
if(${_LIB}_LIBRARY)
target_link_libraries(omnitrace-threading INTERFACE ${${_LIB}_LIBRARY})
endif()
endforeach()
# ----------------------------------------------------------------------------------------#
#
# HIP
@@ -368,6 +378,8 @@ omnitrace_checkout_git_submodule(
REPO_BRANCH v17.0
TEST_FILE sdk/perfetto.cc)
include(Perfetto)
# ----------------------------------------------------------------------------------------#
#
# ELFIO
+205
View File
@@ -0,0 +1,205 @@
# ======================================================================================
# Perfetto.cmake
#
# Configure perfetto for omnitrace
#
# ======================================================================================
include_guard(GLOBAL)
include(ExternalProject)
include(ProcessorCount)
# ---------------------------------------------------------------------------------------#
#
# executables and libraries
#
# ---------------------------------------------------------------------------------------#
find_program(
OMNITRACE_COPY_EXECUTABLE
NAMES cp
PATH_SUFFIXES bin)
find_program(
OMNITRACE_NINJA_EXECUTABLE
NAMES ninja
PATH_SUFFIXES bin)
mark_as_advanced(OMNITRACE_COPY_EXECUTABLE)
mark_as_advanced(OMNITRACE_NINJA_EXECUTABLE)
# ---------------------------------------------------------------------------------------#
#
# variables
#
# ---------------------------------------------------------------------------------------#
processorcount(NUM_PROCS_REAL)
math(EXPR _NUM_THREADS "${NUM_PROCS_REAL} - (${NUM_PROCS_REAL} / 2)")
if(_NUM_THREADS GREATER 8)
set(_NUM_THREADS 8)
elseif(_NUM_THREADS LESS 1)
set(_NUM_THREADS 1)
endif()
set(OMNITRACE_PERFETTO_SOURCE_DIR ${PROJECT_BINARY_DIR}/external/perfetto/source)
set(OMNITRACE_PERFETTO_TOOLS_DIR ${PROJECT_BINARY_DIR}/external/perfetto/source/tools)
set(OMNITRACE_PERFETTO_BINARY_DIR
${PROJECT_BINARY_DIR}/external/perfetto/source/out/linux)
set(OMNITRACE_PERFETTO_INSTALL_DIR
${PROJECT_BINARY_DIR}/external/perfetto/source/out/linux/stripped)
set(OMNITRACE_PERFETTO_LINK_FLAGS
"-static-libgcc -static-libstdc++"
CACHE STRING "Link flags for perfetto")
set(OMNITRACE_PERFETTO_BUILD_THREADS
${_NUM_THREADS}
CACHE STRING "Number of threads to use when building perfetto tools")
if(CMAKE_CXX_COMPILER_IS_CLANG)
set(PERFETTO_IS_CLANG true)
set(OMNITRACE_PERFETTO_C_FLAGS
""
CACHE STRING "Perfetto C flags")
set(OMNITRACE_PERFETTO_CXX_FLAGS
""
CACHE STRING "Perfetto C++ flags")
else()
set(PERFETTO_IS_CLANG false)
set(OMNITRACE_PERFETTO_C_FLAGS
"-static-libgcc -static-libstdc++ -Wno-maybe-uninitialized"
CACHE STRING "Perfetto C flags")
set(OMNITRACE_PERFETTO_CXX_FLAGS
"-static-libgcc -static-libstdc++ -Wno-maybe-uninitialized"
CACHE STRING "Perfetto C++ flags")
endif()
mark_as_advanced(OMNITRACE_PERFETTO_C_FLAGS)
mark_as_advanced(OMNITRACE_PERFETTO_CXX_FLAGS)
mark_as_advanced(OMNITRACE_PERFETTO_LINK_FLAGS)
if(NOT OMNITRACE_NINJA_EXECUTABLE)
set(OMNITRACE_NINJA_EXECUTABLE
${OMNITRACE_PERFETTO_TOOLS_DIR}/ninja
CACHE FILEPATH "Ninja" FORCE)
endif()
# ---------------------------------------------------------------------------------------#
#
# source tree
#
# ---------------------------------------------------------------------------------------#
if(NOT EXISTS "${OMNITRACE_PERFETTO_SOURCE_DIR}")
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory
${PROJECT_BINARY_DIR}/external/perfetto)
# cmake -E copy_directory fails for some reason
execute_process(
COMMAND ${OMNITRACE_COPY_EXECUTABLE} -r ${PROJECT_SOURCE_DIR}/external/perfetto/
${OMNITRACE_PERFETTO_SOURCE_DIR})
endif()
configure_file(${PROJECT_SOURCE_DIR}/cmake/Templates/args.gn.in
${OMNITRACE_PERFETTO_BINARY_DIR}/args.gn @ONLY)
# ---------------------------------------------------------------------------------------#
#
# build tools
#
# ---------------------------------------------------------------------------------------#
if(OMNITRACE_INSTALL_PERFETTO_TOOLS)
find_program(
OMNITRACE_CURL_EXECUTABLE
NAMES curl
PATH_SUFFIXES bin)
if(NOT OMNITRACE_CURL_EXECUTABLE)
omnitrace_message(
SEND_ERROR
"curl executable cannot be found. install-build-deps script for perfetto will fail"
)
endif()
externalproject_add(
omnitrace-perfetto-build
PREFIX ${PROJECT_BINARY_DIR}/external/perfetto
SOURCE_DIR ${OMNITRACE_PERFETTO_SOURCE_DIR}
BUILD_IN_SOURCE 1
PATCH_COMMAND ${OMNITRACE_PERFETTO_TOOLS_DIR}/install-build-deps
CONFIGURE_COMMAND ${OMNITRACE_PERFETTO_TOOLS_DIR}/gn gen
${OMNITRACE_PERFETTO_BINARY_DIR}
BUILD_COMMAND ${OMNITRACE_NINJA_EXECUTABLE} -C ${OMNITRACE_PERFETTO_BINARY_DIR} -j
${OMNITRACE_PERFETTO_BUILD_THREADS}
INSTALL_COMMAND ""
BUILD_BYPRODUCTS ${OMNITRACE_PERFETTO_BINARY_DIR}/args.gn)
add_custom_target(
omnitrace-perfetto-clean
COMMAND ${OMNITRACE_NINJA_EXECUTABLE} -t clean
WORKING_DIRECTORY ${OMNITRACE_PERFETTO_BINARY_DIR}
COMMENT "Cleaning Perfetto...")
install(
DIRECTORY ${OMNITRACE_PERFETTO_INSTALL_DIR}/
DESTINATION ${CMAKE_INSTALL_LIBDIR}
FILES_MATCHING
PATTERN "*libperfetto.so*")
foreach(_FILE perfetto traced tracebox traced_probes traced_perf trigger_perfetto)
install(
PROGRAMS ${OMNITRACE_PERFETTO_INSTALL_DIR}/${_FILE}
DESTINATION ${CMAKE_INSTALL_BINDIR}
OPTIONAL)
endforeach()
endif()
# ---------------------------------------------------------------------------------------#
#
# perfetto static library
#
# ---------------------------------------------------------------------------------------#
add_library(omnitrace-perfetto-library STATIC)
add_library(omnitrace::omnitrace-perfetto-library ALIAS omnitrace-perfetto-library)
target_sources(
omnitrace-perfetto-library PRIVATE ${OMNITRACE_PERFETTO_SOURCE_DIR}/sdk/perfetto.cc
${OMNITRACE_PERFETTO_SOURCE_DIR}/sdk/perfetto.h)
target_link_libraries(
omnitrace-perfetto-library
PRIVATE omnitrace::omnitrace-threading omnitrace::omnitrace-static-libgcc
omnitrace::omnitrace-static-libstdcxx)
set_target_properties(
omnitrace-perfetto-library
PROPERTIES OUTPUT_NAME perfetto
ARCHIVE_OUTPUT_DIRECTORY ${OMNITRACE_PERFETTO_BINARY_DIR}
POSITION_INDEPENDENT_CODE ON
CXX_VISIBILITY_PRESET "internal")
set(perfetto_DIR ${OMNITRACE_PERFETTO_SOURCE_DIR})
set(PERFETTO_ROOT_DIR
${OMNITRACE_PERFETTO_SOURCE_DIR}
CACHE PATH "Root Perfetto installation" FORCE)
set(PERFETTO_INCLUDE_DIR
${OMNITRACE_PERFETTO_SOURCE_DIR}/sdk
CACHE PATH "Perfetto include folder" FORCE)
set(PERFETTO_LIBRARY
${OMNITRACE_PERFETTO_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}perfetto${CMAKE_STATIC_LIBRARY_SUFFIX}
CACHE FILEPATH "Perfetto library" FORCE)
mark_as_advanced(PERFETTO_ROOT_DIR)
mark_as_advanced(PERFETTO_INCLUDE_DIR)
mark_as_advanced(PERFETTO_LIBRARY)
# ---------------------------------------------------------------------------------------#
#
# perfetto interface library
#
# ---------------------------------------------------------------------------------------#
omnitrace_target_compile_definitions(omnitrace-perfetto INTERFACE OMNITRACE_USE_PERFETTO)
target_include_directories(omnitrace-perfetto SYSTEM
INTERFACE $<BUILD_INTERFACE:${PERFETTO_INCLUDE_DIR}>)
target_link_libraries(
omnitrace-perfetto INTERFACE $<BUILD_INTERFACE:${PERFETTO_LIBRARY}>
$<BUILD_INTERFACE:omnitrace::omnitrace-threading>)
+29
View File
@@ -0,0 +1,29 @@
# Set build arguments here. See `gn help buildargs`.
cc = "@CMAKE_C_COMPILER@"
cxx = "@CMAKE_CXX_COMPILER@"
is_debug = false
is_clang = @PERFETTO_IS_CLANG@
is_hermetic_clang = false
enable_perfetto_benchmarks = false
enable_perfetto_integration_tests = false
enable_perfetto_unittests = false
enable_perfetto_fuzzers = false
# enable_perfetto_stderr_crash_dump = false
enable_perfetto_heapprofd = false
enable_perfetto_tools = false
enable_perfetto_tools_trace_to_text = false
enable_perfetto_trace_processor = false
enable_perfetto_trace_processor_httpd = false
enable_perfetto_trace_processor_json = false
enable_perfetto_trace_processor_linenoise = false
enable_perfetto_trace_processor_percentile = false
enable_perfetto_trace_processor_sqlite = false
enable_perfetto_ui = false
extra_cflags = "@OMNITRACE_PERFETTO_C_FLAGS@"
extra_cxxflags = "@OMNITRACE_PERFETTO_CXX_FLAGS@"
extra_ldflags = "@OMNITRACE_PERFETTO_LINK_FLAGS@ -Wl,-rpath=\\\$ORIGIN:\\\$ORIGIN/../lib"
+2 -2
View File
@@ -1,6 +1,6 @@
# perfetto --out OUTPUT_FILE --txt -c omnitrace.cfg
# 2 minute trace, but can be stopped prematurely.
duration_ms: 120000
# 5 minute trace, but can be stopped prematurely.
duration_ms: 300000
write_into_file: true
file_write_period_ms: 100
flush_period_ms: 100
+2 -2
View File
@@ -392,8 +392,8 @@ extern "C"
OMNITRACE_DL_INVOKE_STATUS(_invoked, get_indirect().omnitrace_init_f, a, b, c);
if(_invoked)
{
dl::get_active() = true;
dl::get_inited() = true;
dl::get_active() = true;
dl::get_inited() = true;
dl::_omnitrace_dl_verbose = dl::get_omnitrace_dl_env();
}
}
+4 -7
View File
@@ -10,8 +10,6 @@ add_library(omnitrace::omnitrace-interface-library ALIAS omnitrace-interface-lib
target_include_directories(
omnitrace-interface-library INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR})
target_include_directories(omnitrace-interface-library SYSTEM
INTERFACE ${perfetto_DIR}/sdk)
target_compile_definitions(
omnitrace-interface-library
@@ -25,6 +23,7 @@ target_link_libraries(
$<BUILD_INTERFACE:omnitrace::omnitrace-threading>
$<BUILD_INTERFACE:omnitrace::omnitrace-compile-options>
$<BUILD_INTERFACE:omnitrace::omnitrace-compile-definitions>
$<BUILD_INTERFACE:omnitrace::omnitrace-perfetto>
$<BUILD_INTERFACE:omnitrace::omnitrace-timemory>
$<BUILD_INTERFACE:omnitrace::omnitrace-mpi>
$<BUILD_INTERFACE:omnitrace::omnitrace-ptl>
@@ -73,8 +72,7 @@ set(library_sources
${CMAKE_CURRENT_LIST_DIR}/library/components/pthread_gotcha.cpp
${CMAKE_CURRENT_LIST_DIR}/library/components/pthread_create_gotcha.cpp
${CMAKE_CURRENT_LIST_DIR}/library/components/pthread_mutex_gotcha.cpp
${CMAKE_CURRENT_LIST_DIR}/library/components/user_region.cpp
${perfetto_DIR}/sdk/perfetto.cc)
${CMAKE_CURRENT_LIST_DIR}/library/components/user_region.cpp)
set(library_headers
${CMAKE_CURRENT_LIST_DIR}/library.hpp
@@ -108,8 +106,7 @@ set(library_headers
${CMAKE_CURRENT_LIST_DIR}/library/components/pthread_gotcha.hpp
${CMAKE_CURRENT_LIST_DIR}/library/components/pthread_create_gotcha.hpp
${CMAKE_CURRENT_LIST_DIR}/library/components/pthread_mutex_gotcha.hpp
${CMAKE_CURRENT_LIST_DIR}/library/components/user_region.hpp
${perfetto_DIR}/sdk/perfetto.h)
${CMAKE_CURRENT_LIST_DIR}/library/components/user_region.hpp)
target_sources(omnitrace-object-library PRIVATE ${library_sources} ${library_headers})
@@ -142,7 +139,7 @@ endif()
add_library(omnitrace-library SHARED $<TARGET_OBJECTS:omnitrace-object-library>)
add_library(omnitrace::omnitrace-library ALIAS omnitrace-library)
target_link_libraries(omnitrace-library PRIVATE omnitrace-interface-library)
target_link_libraries(omnitrace-library PRIVATE omnitrace::omnitrace-interface-library)
set_target_properties(
omnitrace-library
+5 -4
View File
@@ -142,7 +142,8 @@ configure_settings(bool _init)
auto _default_perfetto_v =
!tim::get_env<bool>("OMNITRACE_USE_TIMEMORY", false, false);
auto _system_backend = tim::get_env("OMNITRACE_PERFETTO_BACKEND_SYSTEM", false, false);
auto _system_backend =
tim::get_env("OMNITRACE_PERFETTO_BACKEND_SYSTEM", false, false);
auto _omnitrace_debug = _config->get<bool>("OMNITRACE_DEBUG");
if(_omnitrace_debug) tim::set_env("TIMEMORY_DEBUG_SETTINGS", "1", 0);
@@ -221,9 +222,9 @@ configure_settings(bool _init)
auto _backend = tim::get_env_choice<std::string>(
"OMNITRACE_PERFETTO_BACKEND",
(_system_backend)
? "system" // if OMNITRACE_PERFETTO_BACKEND_SYSTEM is true, default to system.
: "inprocess", // Otherwise, default to inprocess
(_system_backend) ? "system" // if OMNITRACE_PERFETTO_BACKEND_SYSTEM is true,
// default to system.
: "inprocess", // Otherwise, default to inprocess
{ "inprocess", "system", "all" }, false);
OMNITRACE_CONFIG_SETTING(std::string, "OMNITRACE_PERFETTO_BACKEND",