From f2a1fe13725e9bd41f46fa86b429d451266849fb Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Sun, 8 Oct 2023 15:10:46 -0700 Subject: [PATCH] code refactoring --- .github/workflows/ci.yml | 2 +- CMakeLists.txt | 8 ++- src/dlio_profiler/dlio_profiler_preload.cpp | 6 +++ test/CMakeLists.txt | 55 +++++++++++++-------- 4 files changed, 48 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2eb3c267..92048b29 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,7 +49,7 @@ jobs: fi - name: Build from ${{ matrix.dir }} on ${{ matrix.perm }} run: | - export CMAKE_BUILD_TYPE=Profile + export CMAKE_BUILD_TYPE=PROFILE export DLIO_PROFILER_ENABLE_TESTS=ON LOC=. if [[ $DIR == 'github' ]]; then diff --git a/CMakeLists.txt b/CMakeLists.txt index 345dcefb..8cfbdf30 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,12 +71,18 @@ endif () if(DLIO_PROFILER_ENABLE_TESTS) - enable_testing() if(CMAKE_BUILD_TYPE STREQUAL "PROFILE") + message("-- " "[DLIO Profiler] building with CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}") set(CMAKE_C_FLAGS_PROFILE --coverage) set(CMAKE_CXX_FLAGS_PROFILE --coverage) endif() + enable_testing() add_subdirectory(test) + if(CMAKE_BUILD_TYPE STREQUAL "PROFILE") + get_property(COVERAGE_FILE_LIST GLOBAL PROPERTY COVERAGE_FILES) + add_custom_command(OUTPUT default.profdata COMMAND llvm-profdata merge -sparse ${COVERAGE_FILE_LIST} -o default.profdata VERBATIM) + add_custom_target(merged_coverage DEPENDS default.profdata) + endif() endif() if (BUILD_PYTHON_BINDINGS) diff --git a/src/dlio_profiler/dlio_profiler_preload.cpp b/src/dlio_profiler/dlio_profiler_preload.cpp index 48db21ce..99a4e1a4 100644 --- a/src/dlio_profiler/dlio_profiler_preload.cpp +++ b/src/dlio_profiler/dlio_profiler_preload.cpp @@ -14,9 +14,15 @@ namespace dlio_profiler { bool is_init() {return dlio_profiler::init;} void set_init(bool _init) { dlio_profiler::init = _init;} void dlio_profiler_init(void) { + if (!is_init()) { dlio_profiler::Singleton::get_instance(ProfilerStage::PROFILER_INIT, ProfileType::PROFILER_PRELOAD); + set_init(true); + } } void dlio_profiler_fini(void) { + if (is_init()) { dlio_profiler::Singleton::get_instance(ProfilerStage::PROFILER_FINI, ProfileType::PROFILER_PRELOAD)->finalize(); + set_init(false); + } } \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d3b33134..7ae9e530 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,13 @@ +set_property(GLOBAL PROPERTY COVERAGE_FILES "") +function(dlp_add_test) + add_test(${ARGV}) + set_tests_properties(${ARGV0} PROPERTIES + ENVIRONMENT "LLVM_PROFILE_FILE=${ARGV0}.profraw") + get_property(OLD_CF GLOBAL PROPERTY COVERAGE_FILES) + set(NEW_CF ${OLD_CF} ${CMAKE_CURRENT_BINARY_DIR}/${ARGV0}.profraw) + set_property(GLOBAL PROPERTY COVERAGE_FILES ${NEW_CF}) +endfunction() + add_executable(test_cpp cpp/test.cpp) target_link_libraries(test_cpp ${PROJECT_NAME}) add_dependencies(test_cpp ${PROJECT_NAME}) @@ -12,7 +22,7 @@ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data) find_program (BASH_PROGRAM bash) set(test_name test_cpp_basic_only) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/lib/libdlio_profiler_preload.so) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) @@ -21,33 +31,33 @@ set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INIT=PR set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) set(test_name test_cpp_basic_app_only) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data 1) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data 1) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=1) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) set(test_name test_cpp_basic_app_disable_only) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data 1) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data 1) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=0) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 0) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 0) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) set(test_name test_c_basic_only) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_c ./data) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_c ./data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/lib/libdlio_profiler_preload.so) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) @@ -56,30 +66,33 @@ set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INIT=PR set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) +set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) + set(test_name test_c_basic_app_only) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_c ./data 1) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_c ./data 1) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=1) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) set(test_name test_c_basic_app_disable_only) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_c ./data 1) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_c ./data 1) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=0) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 0) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 0) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) set(test_name test_cpp_basic_meta) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/lib/libdlio_profiler_preload.so) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=1) @@ -89,11 +102,11 @@ set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FIL set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INC_METADATA=1) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) set(test_name test_cpp_basic_affinity) -add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data) +dlp_add_test(${test_name} ${CMAKE_BINARY_DIR}/bin/test_cpp ./data) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/lib/libdlio_profiler_preload.so) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=1) @@ -104,14 +117,14 @@ set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEV set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INC_METADATA=1) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_SET_CORE_AFFINITY=1) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 7) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) find_program(PYTHON_EXE python) message("-- Found python at location " ${PYTHON_EXE}) set(test_name test_py_only) -add_test(${test_name} ${PYTHON_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/py/test.py) +dlp_add_test(${test_name} ${PYTHON_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/py/test.py) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH}:${CMAKE_SOURCE_DIR}/venv/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}_app) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}/dependency/.spack-env/view/lib64) @@ -120,11 +133,11 @@ set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE= set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INC_METADATA=1) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 75) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 75) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) set(test_name test_py_disable_only) -add_test(${test_name} ${PYTHON_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/py/test.py) +dlp_add_test(${test_name} ${PYTHON_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/py/test.py) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH}:${CMAKE_SOURCE_DIR}/venv/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}_app) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}/dependency/.spack-env/view/lib64) @@ -132,13 +145,13 @@ set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DI set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=0) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 0) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 0) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name}) find_program(PYTHON_EXE python) message("-- Found python at location " ${PYTHON_EXE}) set(test_name test_py_both) -add_test(${test_name} ${PYTHON_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/py/test.py) +dlp_add_test(${test_name} ${PYTHON_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/py/test.py) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH}:${CMAKE_SOURCE_DIR}/venv/lib) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}/dependency/.spack-env/view/lib64) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_CURRENT_BINARY_DIR}/${test_name}_app) @@ -150,5 +163,5 @@ set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE= set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) set_property(TEST ${test_name} APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INC_METADATA=1) -add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 80) +dlp_add_test(check_file_exists_${test_name} ${BASH_PROGRAM} ${CMAKE_CURRENT_SOURCE_DIR}/check_file.sh ${CMAKE_CURRENT_BINARY_DIR}/${test_name}* 80) set_tests_properties(check_file_exists_${test_name} PROPERTIES DEPENDS ${test_name})