Skip to content

Commit

Permalink
Update Perfetto and fix tests (#378)
Browse files Browse the repository at this point in the history
Fix for "SWDEV-479652" - Perfetto-based tests are failing.

Updated version of perfetto submodule to v46.0.
Modified Omnitrace code that uses Perfetto, so it can compile.
Modified the testing code, so it can run the version of trace_processor_shell provided (v46.0).

---------

Signed-off-by: Aleksandar Janicijevic <[email protected]>
Co-authored-by: David Galiffi <[email protected]>
  • Loading branch information
ajanicijamd and dgaliffiAMD authored Sep 13, 2024
1 parent 1413ab6 commit 96d7b8f
Show file tree
Hide file tree
Showing 15 changed files with 173 additions and 70 deletions.
6 changes: 6 additions & 0 deletions .github/workflows/opensuse.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ jobs:
timeout_minutes: 25
max_attempts: 5
command: |
wget https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v46.0/linux-amd64/trace_processor_shell -P /opt/trace_processor/bin &&
chmod +x /opt/trace_processor/bin/trace_processor_shell
python3 -m pip install --upgrade pip &&
python3 -m pip install numpy perfetto dataclasses &&
python3 -m pip install 'cmake==3.21.4' &&
for i in 6 7 8 9 10; do /opt/conda/envs/py3.${i}/bin/python -m pip install numpy perfetto dataclasses; done
- name: Configure Env
Expand Down Expand Up @@ -87,6 +92,7 @@ jobs:
-DOMNITRACE_USE_HIP=OFF
-DOMNITRACE_USE_OMPT=OFF
-DOMNITRACE_USE_PYTHON=ON
-DOMNITRACE_INSTALL_PERFETTO_TOOLS=OFF
-DOMNITRACE_USE_MPI_HEADERS=ON
-DOMNITRACE_PYTHON_PREFIX=/opt/conda/envs
-DOMNITRACE_PYTHON_ENVS="py3.6;py3.7;py3.8;py3.9;py3.10;py3.11"
Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/redhat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,16 @@ jobs:
env

- name: Install Packages
shell: bash
run: |
wget https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v46.0/linux-amd64/trace_processor_shell -P /opt/trace_processor/bin &&
chmod +x /opt/trace_processor/bin/trace_processor_shell
python3 -m pip install --upgrade pip &&
python3 -m pip install numpy perfetto dataclasses &&
python3 -m pip install 'cmake==3.21.4' &&
for i in 6 7 8 9 10; do /opt/conda/envs/py3.${i}/bin/python -m pip install numpy perfetto dataclasses; done
- name: Install ROCm Packages
if: ${{ matrix.rocm-version > 0 }}
timeout-minutes: 30
shell: bash
Expand Down Expand Up @@ -109,6 +119,7 @@ jobs:
-DOMNITRACE_USE_MPI_HEADERS=ON
-DOMNITRACE_CI_MPI_RUN_AS_ROOT=ON
-DOMNITRACE_MAX_THREADS=64
-DOMNITRACE_INSTALL_PERFETTO_TOOLS=OFF
-DOMNITRACE_PYTHON_PREFIX=/opt/conda/envs
-DOMNITRACE_PYTHON_ENVS="py3.6;py3.7;py3.8;py3.9;py3.10;py3.11"
-DOMNITRACE_DISABLE_EXAMPLES="transpose;rccl"
Expand Down
27 changes: 12 additions & 15 deletions .github/workflows/ubuntu-focal.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,10 @@ jobs:
apt-get update &&
apt-get upgrade -y &&
apt-get install -y build-essential m4 autoconf libtool python3-pip libiberty-dev clang libmpich-dev mpich environment-modules ${{ matrix.compiler }} &&
wget https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v46.0/linux-amd64/trace_processor_shell -P /opt/trace_processor/bin &&
chmod +x /opt/trace_processor/bin/trace_processor_shell &&
python3 -m pip install --upgrade pip &&
python3 -m pip install numpy &&
python3 -m pip install perfetto &&
python3 -m pip install numpy perfetto dataclasses &&
python3 -m pip install 'cmake==3.16.3' &&
for i in 6 7 8 9 10; do /opt/conda/envs/py3.${i}/bin/python -m pip install numpy perfetto dataclasses; done &&
apt-get -y --purge autoremove &&
Expand Down Expand Up @@ -246,20 +247,12 @@ jobs:
mpi-headers: ['OFF']
build-jobs: ['3']
ctest-exclude: ['-LE "mpi-example|transpose"']
perfetto-tools: ['OFF']
include:
- compiler: 'g++'
rocm-version: '4.5'
mpi-headers: 'OFF'
build-jobs: '2'
ctest-exclude: '-LE "mpi-example|transpose"'
perfetto-tools: 'ON'
- compiler: 'g++'
rocm-version: 'debian'
mpi-headers: 'ON'
build-jobs: '2'
ctest-exclude: '-LE transpose'
perfetto-tools: 'OFF'

env:
BUILD_TYPE: MinSizeRel
Expand All @@ -283,7 +276,10 @@ jobs:
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 }} libudev1 libnuma1 rocm-dev rocm-utils rocm-smi-lib roctracer-dev rocprofiler-dev rccl-dev hip-base hsa-amd-aqlprofile hsa-rocr-dev hsakmt-roct-dev libpapi-dev curl libopenmpi-dev openmpi-bin libfabric-dev &&
wget https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v46.0/linux-amd64/trace_processor_shell -P /opt/trace_processor/bin &&
chmod +x /opt/trace_processor/bin/trace_processor_shell &&
python3 -m pip install --upgrade pip &&
python3 -m pip install numpy perfetto dataclasses &&
python3 -m pip install 'cmake==3.21.4' &&
for i in 6 7 8 9 10; do /opt/conda/envs/py3.${i}/bin/python -m pip install numpy perfetto dataclasses; done &&
apt-get -y --purge autoremove &&
Expand Down Expand Up @@ -345,7 +341,6 @@ jobs:
-DOMNITRACE_USE_PYTHON=ON
-DOMNITRACE_USE_MPI_HEADERS=${{ matrix.mpi-headers }}
-DOMNITRACE_USE_SANITIZER=OFF
-DOMNITRACE_INSTALL_PERFETTO_TOOLS=${{ matrix.perfetto-tools }}
-DOMNITRACE_PYTHON_PREFIX=/opt/conda/envs
-DOMNITRACE_PYTHON_ENVS="py3.6;py3.7;py3.8;py3.9;py3.10;py3.11"
-DOMNITRACE_CI_MPI_RUN_AS_ROOT=${{ matrix.mpi-headers }}
Expand Down Expand Up @@ -444,9 +439,10 @@ jobs:
sudo apt-get install -y build-essential m4 autoconf libtool python3-pip clang libomp-dev environment-modules ${{ matrix.deps }} ${{ matrix.compiler }} &&
if [ "${{ matrix.mpi }}" = "mpich" ]; then sudo apt-get install -y libmpich-dev mpich; fi &&
if [ "${{ matrix.mpi }}" = "openmpi" ]; then sudo apt-get install -y libopenmpi-dev openmpi-bin libfabric-dev; fi &&
wget https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v46.0/linux-amd64/trace_processor_shell -P /opt/trace_processor/bin &&
chmod +x /opt/trace_processor/bin/trace_processor_shell &&
python3 -m pip install --upgrade pip &&
python3 -m pip install numpy &&
python3 -m pip install perfetto &&
python3 -m pip install numpy perfetto dataclasses &&
python3 -m pip install 'cmake==3.16.3' &&
sudo apt-get -y --purge autoremove &&
sudo apt-get -y clean
Expand Down Expand Up @@ -596,9 +592,10 @@ jobs:
command: |
apt-get update &&
apt-get install -y build-essential m4 autoconf libtool python3-pip clang libomp-dev environment-modules gcc g++ mpich libmpich-dev texinfo &&
wget https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v46.0/linux-amd64/trace_processor_shell -P /opt/trace_processor/bin &&
chmod +x /opt/trace_processor/bin/trace_processor_shell &&
python3 -m pip install --upgrade pip &&
python3 -m pip install numpy &&
python3 -m pip install perfetto &&
python3 -m pip install numpy perfetto dataclasses &&
python3 -m pip install 'cmake==3.24.1' &&
for i in 6 7 8 9 10; do /opt/conda/envs/py3.${i}/bin/python -m pip install numpy perfetto dataclasses; done &&
apt-get -y --purge autoremove &&
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/ubuntu-jammy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,10 @@ jobs:
apt-get install -y software-properties-common &&
apt-get upgrade -y &&
apt-get install -y build-essential m4 autoconf libtool python3-pip libiberty-dev clang libomp-dev libopenmpi-dev libfabric-dev openmpi-bin environment-modules ${{ matrix.compiler }} &&
wget https://commondatastorage.googleapis.com/perfetto-luci-artifacts/v46.0/linux-amd64/trace_processor_shell -P /opt/trace_processor/bin &&
chmod +x /opt/trace_processor/bin/trace_processor_shell &&
python3 -m pip install --upgrade pip &&
python3 -m pip install numpy &&
python3 -m pip install numpy perfetto dataclasses &&
python3 -m pip install 'cmake==3.21.4' &&
for i in 6 7 8 9 10; do /opt/conda/envs/py3.${i}/bin/python -m pip install numpy perfetto dataclasses; done
Expand Down
2 changes: 1 addition & 1 deletion cmake/Packages.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -483,7 +483,7 @@ omnitrace_checkout_git_submodule(
RELATIVE_PATH external/perfetto
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
REPO_URL https://android.googlesource.com/platform/external/perfetto
REPO_BRANCH v28.0
REPO_BRANCH v46.0
TEST_FILE sdk/perfetto.cc)

include(Perfetto)
Expand Down
4 changes: 2 additions & 2 deletions cmake/Perfetto.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,10 @@ if(CMAKE_CXX_COMPILER_IS_CLANG)
else()
set(PERFETTO_IS_CLANG false)
set(OMNITRACE_PERFETTO_C_FLAGS
"-static-libgcc -Wno-maybe-uninitialized"
"-static-libgcc -Wno-maybe-uninitialized -Wno-stringop-overflow"
CACHE STRING "Perfetto C flags")
set(OMNITRACE_PERFETTO_CXX_FLAGS
"-static-libgcc -Wno-maybe-uninitialized"
"-static-libgcc -Wno-maybe-uninitialized -Wno-stringop-overflow -Wno-mismatched-new-delete"
CACHE STRING "Perfetto C++ flags")
endif()

Expand Down
8 changes: 4 additions & 4 deletions cmake/Templates/args.gn.in
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ is_clang = @PERFETTO_IS_CLANG@
is_hermetic_clang = false

enable_perfetto_benchmarks = false
enable_perfetto_integration_tests = false
enable_perfetto_integration_tests = true
enable_perfetto_unittests = false
enable_perfetto_fuzzers = false

# enable_perfetto_stderr_crash_dump = false
enable_perfetto_heapprofd = false
enable_perfetto_tools = false
enable_perfetto_trace_processor = false
enable_perfetto_trace_processor_httpd = false
enable_perfetto_trace_processor = true
enable_perfetto_trace_processor_httpd = true
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_trace_processor_sqlite = true
enable_perfetto_ui = false

extra_cflags = "@OMNITRACE_PERFETTO_C_FLAGS@"
Expand Down
83 changes: 83 additions & 0 deletions examples/python/source-numpy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
#!@PYTHON_EXECUTABLE@

import os
import sys
import time
import omnitrace
from omnitrace.user import region as omni_user_region

_prefix = ""


def fib(n):
return n if n < 2 else (fib(n - 1) + fib(n - 2))


try:
import numpy as np

def inefficient(n):
print(f"[{_prefix}] ... running inefficient({n}) (1)")
a = 0
for i in range(n):
a += i
for j in range(n):
a += j
_len = a * n * n
_ret = np.random.rand(_len).sum()
print(f"[{_prefix}] ... sum of {_len} random elements: {_ret}")
return _ret

except ImportError as e:
print(f"ImportError: {e}")
import random

def _sum(arr):
print(f"---- in _sum")
return sum(arr)

def inefficient(n):
print(f"[{_prefix}] ... running inefficient({n})")
a = 0
for i in range(n):
a += i
for j in range(n):
a += j
_len = a * n * n
_arr = [random.random() for _ in range(_len)]
_ret = _sum(_arr)
print(f"[{_prefix}] ... sum of {_len} random elements: {_ret}")
return _ret


@omnitrace.profile()
def run(n):
_ret = 0
_ret += fib(n)
_ret += inefficient(n)
return _ret


if __name__ == "__main__":
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-n", "--num-iterations", help="Number", type=int, default=3)
parser.add_argument("-v", "--value", help="Starting value", type=int, default=20)
parser.add_argument(
"-s",
"--stop-profile",
help="Stop tracing after given iterations",
type=int,
default=0,
)
args = parser.parse_args()

_prefix = os.path.basename(__file__)
print(f"[{_prefix}] Executing {args.num_iterations} iterations...\n")
for i in range(args.num_iterations):
with omni_user_region(f"main_loop"):
if args.stop_profile > 0 and i == args.stop_profile:
omnitrace.user.stop_trace()
ans = run(args.value)
print(f"[{_prefix}] [{i}] result of run({args.value}) = {ans}\n")
47 changes: 16 additions & 31 deletions examples/python/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import time
import omnitrace
from omnitrace.user import region as omni_user_region
import random

_prefix = ""

Expand All @@ -13,39 +14,23 @@ def fib(n):
return n if n < 2 else (fib(n - 1) + fib(n - 2))


try:
import numpy as np
def _sum(arr):
print(f"---- in _sum")
return sum(arr)

def inefficient(n):
print(f"[{_prefix}] ... running inefficient({n})")
a = 0
for i in range(n):
a += i
for j in range(n):
a += j
_len = a * n * n
_ret = np.random.rand(_len).sum()
print(f"[{_prefix}] ... sum of {_len} random elements: {_ret}")
return _ret

except ImportError:
import random

def _sum(arr):
return sum(arr)

def inefficient(n):
print(f"[{_prefix}] ... running inefficient({n})")
a = 0
for i in range(n):
a += i
for j in range(n):
a += j
_len = a * n * n
_arr = [random.random() for _ in range(_len)]
_ret = _sum(_arr)
print(f"[{_prefix}] ... sum of {_len} random elements: {_ret}")
return _ret
def inefficient(n):
print(f"[{_prefix}] ... running inefficient({n})")
a = 0
for i in range(n):
a += i
for j in range(n):
a += j
_len = a * n * n
_arr = [random.random() for _ in range(_len)]
_ret = _sum(_arr)
print(f"[{_prefix}] ... sum of {_len} random elements: {_ret}")
return _ret


@omnitrace.profile()
Expand Down
2 changes: 1 addition & 1 deletion external/perfetto
Submodule perfetto updated from 99ead4 to c74251
11 changes: 6 additions & 5 deletions source/lib/core/perfetto.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,12 @@ perfetto_counter_track<Tp>::emplace(size_t _idx, const std::string& _v,
auto _index = _track_data.size();
auto& _name = _name_data.emplace_back(std::make_unique<std::string>(_v));
const char* _unit_name = (_units && strlen(_units) > 0) ? _units : nullptr;
_track_data.emplace_back(::perfetto::CounterTrack{ _name->c_str() }
.set_unit_name(_unit_name)
.set_category(_category)
.set_unit_multiplier(_mult)
.set_is_incremental(_incr));
_track_data.emplace_back(
::perfetto::CounterTrack{ ::perfetto::DynamicString{ _name->c_str() } }
.set_unit_name(_unit_name)
.set_category(_category)
.set_unit_multiplier(_mult)
.set_is_incremental(_incr));
if(config::get_is_continuous_integration())
{
for(auto& itr : _missing)
Expand Down
6 changes: 3 additions & 3 deletions source/lib/omnitrace/library/tracing.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -642,14 +642,14 @@ mark_perfetto_ts(CategoryT, const char* name, uint64_t _ts, Args&&... args)

template <typename CategoryT, typename... Args>
inline void
mark_perfetto_track(CategoryT, const char*, ::perfetto::Track _track, uint64_t _ts,
mark_perfetto_track(CategoryT, const char* name, ::perfetto::Track _track, uint64_t _ts,
Args&&... args)
{
// skip if category is disabled
if(category_mark_disabled<CategoryT>()) return;

TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, _track, _ts,
std::forward<Args>(args)...);
TRACE_EVENT_INSTANT(trait::name<CategoryT>::value, ::perfetto::DynamicString{ name },
_track, _ts, std::forward<Args>(args)...);
}
} // namespace tracing
} // namespace omnitrace
3 changes: 2 additions & 1 deletion tests/omnitrace-python-tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ foreach(_VERSION ${OMNITRACE_PYTHON_VERSIONS})
NAME ${TEST_NAME}-validate-perfetto
COMMAND
${_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_LIST_DIR}/validate-perfetto-proto.py
-m ${TEST_PERFETTO_METRIC} ${TEST_ARGS} -p -i
-m ${TEST_PERFETTO_METRIC} ${TEST_ARGS} -p -t
/opt/trace_processor/bin/trace_processor_shell -i
PYTHON_VERSION ${_VERSION}
FILE omnitrace-tests-output/${TEST_NAME}/${_VERSION}/${TEST_PERFETTO_FILE}
DEPENDS ${TEST_NAME}-${_VERSION}
Expand Down
1 change: 1 addition & 0 deletions tests/omnitrace-testing.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -985,6 +985,7 @@ function(OMNITRACE_ADD_VALIDATION_TEST)
${CMAKE_CURRENT_LIST_DIR}/validate-perfetto-proto.py -m
"${TEST_PERFETTO_METRIC}" ${TEST_ARGS} -i
${PROJECT_BINARY_DIR}/omnitrace-tests-output/${TEST_NAME}/${TEST_PERFETTO_FILE}
-t /opt/trace_processor/bin/trace_processor_shell
WORKING_DIRECTORY ${PROJECT_BINARY_DIR})
endif()

Expand Down
Loading

0 comments on commit 96d7b8f

Please sign in to comment.