-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding changes for handling abort signals (#979)
* Adding changes for handling abort signals * Fix the test failure * Fixing CmakeLists error * Addressing review comments * fixing warnings * fixing execute test * Fixing abort app test * Address review comments * Apply suggestions from code review * Apply suggestions from code review * Fixes for testing issues * Adding kernel filtering test * Removing text input file * fix formatting issues * misc fix * Suppress signal-unsafe error in ThreadSanitizer - rename signal handler to rocprofv3_error_signal_handler to ensure specific filtering * Fix rocprofv3 aborted-app validation --------- Co-authored-by: Jonathan R. Madsen <[email protected]> Co-authored-by: Jonathan R. Madsen <[email protected]>
- Loading branch information
1 parent
018f3ce
commit 94b5d9b
Showing
10 changed files
with
244 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# | ||
# rocprofv3 tool test | ||
# | ||
cmake_minimum_required(VERSION 3.21.0 FATAL_ERROR) | ||
|
||
project( | ||
rocprofiler-tests-aborted-app | ||
LANGUAGES CXX | ||
VERSION 0.0.0) | ||
|
||
find_package(rocprofiler-sdk REQUIRED) | ||
|
||
rocprofiler_configure_pytest_files(CONFIG pytest.ini COPY validate.py conftest.py | ||
input.json) | ||
|
||
string(REPLACE "LD_PRELOAD=" "ROCPROF_PRELOAD=" PRELOAD_ENV | ||
"${ROCPROFILER_MEMCHECK_PRELOAD_ENV}") | ||
|
||
set(aborted-app-env "${PRELOAD_ENV}" ROCPROF_TESTING_RAISE_SIGNAL=1 | ||
ROCPROF_INTERNAL_TEST_SIGNAL_HANDLER_VIA_EXIT=1) | ||
|
||
# app-abort | ||
add_test( | ||
NAME rocprofv3-test-execute-app-abort | ||
COMMAND | ||
$<TARGET_FILE:rocprofiler-sdk::rocprofv3> -i | ||
${CMAKE_CURRENT_BINARY_DIR}/input.json -d | ||
${CMAKE_CURRENT_BINARY_DIR}/out-aborted-app -- $<TARGET_FILE:vector-ops> 1 1) | ||
|
||
set_tests_properties( | ||
rocprofv3-test-execute-app-abort | ||
PROPERTIES TIMEOUT 45 LABELS "integration-tests" ENVIRONMENT "${aborted-app-env}" | ||
WILL_FAIL TRUE) | ||
|
||
add_test( | ||
NAME rocprofv3-test-validate-app-abort | ||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/validate.py --json-input | ||
${CMAKE_CURRENT_BINARY_DIR}/out-aborted-app/pass_1/out_results.json) | ||
|
||
set_tests_properties( | ||
rocprofv3-test-validate-app-abort | ||
PROPERTIES TIMEOUT 45 LABELS "integration-tests" DEPENDS | ||
"rocprofv3-test-execute-app-abort" FAIL_REGULAR_EXPRESSION | ||
"${ROCPROFILER_DEFAULT_FAIL_REGEX}") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import json | ||
import pytest | ||
import pandas as pd | ||
|
||
from rocprofiler_sdk.pytest_utils.dotdict import dotdict | ||
from rocprofiler_sdk.pytest_utils import collapse_dict_list | ||
|
||
|
||
def pytest_addoption(parser): | ||
parser.addoption( | ||
"--json-input", | ||
action="store", | ||
help="Path to JSON file.", | ||
) | ||
|
||
|
||
@pytest.fixture | ||
def json_data(request): | ||
filename = request.config.getoption("--json-input") | ||
with open(filename, "r") as inp: | ||
return dotdict(collapse_dict_list(json.load(inp))) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
"jobs": [ | ||
{ | ||
"pmc":["SQ_WAVES"], | ||
"kernel_include_regex": "addition", | ||
"kernel_exclude_regex": "subtract", | ||
"hip_runtime_trace": true, | ||
"kernel_trace": true, | ||
"output_file": "out", | ||
"output_format": [ | ||
"json" | ||
], | ||
"truncate_kernels": true | ||
} | ||
] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
|
||
[pytest] | ||
addopts = --durations=20 -rA -s -vv | ||
testpaths = validate.py | ||
pythonpath = @ROCPROFILER_SDK_TESTS_BINARY_DIR@/pytest-packages |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import sys | ||
import pytest | ||
import re | ||
|
||
kernel_trace_list = sorted(["addition_kernel", "subtract_kernel"]) | ||
kernel_counter_list = ["addition_kernel"] | ||
|
||
|
||
def unique(lst): | ||
return list(set(lst)) | ||
|
||
|
||
def test_counter_collection_json_data(json_data): | ||
data = json_data["rocprofiler-sdk-tool"] | ||
|
||
def get_kernel_name(kernel_id): | ||
return data["kernel_symbols"][kernel_id]["formatted_kernel_name"] | ||
|
||
counter_collection_data = data["callback_records"]["counter_collection"] | ||
|
||
for counter in counter_collection_data: | ||
kernel_name = get_kernel_name(counter.dispatch_data.dispatch_info.kernel_id) | ||
assert kernel_name in kernel_counter_list | ||
|
||
|
||
def test_kernel_trace_json(json_data): | ||
data = json_data["rocprofiler-sdk-tool"] | ||
|
||
def get_kernel_name(kernel_id): | ||
return data["kernel_symbols"][kernel_id]["formatted_kernel_name"] | ||
|
||
def get_kind_name(kind_id): | ||
return data["strings"]["buffer_records"][kind_id]["kind"] | ||
|
||
kernel_dispatch_data = data["buffer_records"]["kernel_dispatch"] | ||
kernels = [] | ||
assert len(kernel_dispatch_data) == 2 | ||
for dispatch in kernel_dispatch_data: | ||
dispatch_info = dispatch["dispatch_info"] | ||
kernel_name = get_kernel_name(dispatch_info["kernel_id"]) | ||
|
||
assert get_kind_name(dispatch["kind"]) == "KERNEL_DISPATCH" | ||
assert dispatch["correlation_id"]["internal"] > 0 | ||
assert dispatch_info["agent_id"]["handle"] > 0 | ||
assert dispatch_info["queue_id"]["handle"] > 0 | ||
assert dispatch_info["kernel_id"] > 0 | ||
if not re.search(r"__amd_rocclr_.*", kernel_name): | ||
kernels.append(kernel_name) | ||
|
||
assert dispatch_info["workgroup_size"]["x"] == 64 | ||
assert dispatch_info["workgroup_size"]["y"] == 1 | ||
assert dispatch_info["workgroup_size"]["z"] == 1 | ||
assert dispatch_info["grid_size"]["x"] == 1024 | ||
assert dispatch_info["grid_size"]["y"] == 1024 | ||
assert dispatch_info["grid_size"]["z"] == 1 | ||
assert dispatch["end_timestamp"] >= dispatch["start_timestamp"] | ||
|
||
assert kernels == kernel_trace_list | ||
|
||
|
||
def test_hip_api_trace_json(json_data): | ||
data = json_data["rocprofiler-sdk-tool"] | ||
|
||
def get_operation_name(kind_id, op_id): | ||
return data["strings"]["buffer_records"][kind_id]["operations"][op_id] | ||
|
||
def get_kind_name(kind_id): | ||
return data["strings"]["buffer_records"][kind_id]["kind"] | ||
|
||
valid_domain_names = ("HIP_RUNTIME_API",) | ||
|
||
hip_api_data = data["buffer_records"]["hip_api"] | ||
|
||
functions = [] | ||
for api in hip_api_data: | ||
kind = get_kind_name(api["kind"]) | ||
assert kind in valid_domain_names | ||
assert api["end_timestamp"] >= api["start_timestamp"] | ||
functions.append(get_operation_name(api["kind"], api["operation"])) | ||
|
||
expected_functions = ( | ||
[ | ||
"hipGetDeviceCount", | ||
"hipSetDevice", | ||
"hipDeviceSynchronize", | ||
"hipStreamCreateWithFlags", | ||
] | ||
+ (["hipHostMalloc"] * 3) | ||
+ (["hipMallocAsync"] * 3) | ||
+ (["hipMemcpyAsync"] * 2) | ||
+ [ | ||
"hipStreamSynchronize", | ||
"hipDeviceSynchronize", | ||
"hipLaunchKernel", | ||
"hipGetLastError", | ||
"hipLaunchKernel", | ||
"hipGetLastError", | ||
] | ||
) | ||
|
||
assert functions == expected_functions | ||
|
||
|
||
if __name__ == "__main__": | ||
exit_code = pytest.main(["-x", __file__] + sys.argv[1:]) | ||
sys.exit(exit_code) |