From 60da41c8f71300cb91e678d97c26fdf76ae60212 Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Fri, 6 Oct 2023 09:58:38 -0700 Subject: [PATCH] separating preload library with main so. To avoid double loading. --- CMakeLists.txt | 1 - src/dlio_profiler/dlio_profiler.cpp | 12 +++--------- src/dlio_profiler/dlio_profiler_py.cpp | 5 ++++- test/CMakeLists.txt | 16 ++++++++++++++-- test/test.py | 2 +- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 192f3777..a2d85f79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -147,7 +147,6 @@ set(DLIO_PROFILER_PY_PUBLIC_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/src/dlio_profiler/brahma/stdio.h ${CMAKE_CURRENT_SOURCE_DIR}/include/dlio_profiler/dlio_profiler.h) set(DLIO_PROFILER_PY_PRIVATE_INCLUDE - ${CMAKE_CURRENT_SOURCE_DIR}/src/dlio_profiler/core/dlio_profiler_main.h ${CMAKE_CURRENT_SOURCE_DIR}/src/dlio_profiler/core/constants.h ${CMAKE_CURRENT_SOURCE_DIR}/src/dlio_profiler/utils/posix_internal.h diff --git a/src/dlio_profiler/dlio_profiler.cpp b/src/dlio_profiler/dlio_profiler.cpp index 59e75d76..9ccce1b5 100644 --- a/src/dlio_profiler/dlio_profiler.cpp +++ b/src/dlio_profiler/dlio_profiler.cpp @@ -19,25 +19,19 @@ namespace dlio_profiler { bool is_init() {return dlio_profiler::init;} void set_init(bool _init) { dlio_profiler::init = _init;} void dlio_profiler_init(void) { - char *init_type_count = getenv(DLIO_PROFILER_INIT_COUNT); char *init_type = getenv(DLIO_PROFILER_INIT); - if (init_type_count == nullptr && init_type != nullptr && strcmp(init_type, "PRELOAD") == 0) { + if (!is_init() && init_type != nullptr && strcmp(init_type, "PRELOAD") == 0) { int pid = getpid(); dlio_profiler::Singleton::get_instance(true, true, nullptr, nullptr, &pid); DLIO_PROFILER_LOGINFO("Running initialize within constructor %d", getpid()); set_init(true); - int val = setenv(DLIO_PROFILER_INIT_COUNT, "1", 1); - (void) val; } } void dlio_profiler_fini(void) { char *init_type = getenv(DLIO_PROFILER_INIT); - char *init_type_count = getenv(DLIO_PROFILER_INIT_COUNT); - if (init_type_count != nullptr && init_type != nullptr && strcmp(init_type, "PRELOAD")) { - dlio_profiler::Singleton::get_instance(false, false)->finalize(); + if (is_init() && init_type != nullptr && strcmp(init_type, "PRELOAD")) { + dlio_profiler::Singleton::get_instance(false, true)->finalize(); set_init(false); - int val = unsetenv(DLIO_PROFILER_INIT_COUNT); - (void) val; } } \ No newline at end of file diff --git a/src/dlio_profiler/dlio_profiler_py.cpp b/src/dlio_profiler/dlio_profiler_py.cpp index d9e6beeb..6cb38fff 100644 --- a/src/dlio_profiler/dlio_profiler_py.cpp +++ b/src/dlio_profiler/dlio_profiler_py.cpp @@ -25,7 +25,10 @@ namespace dlio_profiler { if (init_type == nullptr || strcmp(init_type, "FUNCTION") == 0) { dlio_profiler::Singleton::get_instance(true, true, log_file.c_str(), data_dirs.c_str(), &process_id); } else { - dlio_profiler::Singleton::get_instance(true, false, log_file.c_str(), data_dirs.c_str(), &process_id); + int * pid = nullptr; + if (process_id != -1) + *pid = process_id; + dlio_profiler::Singleton::get_instance(true, false, log_file.c_str(), data_dirs.c_str(), pid); } } TimeResolution get_time() { diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 6829d32c..e78e2a36 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,12 +2,12 @@ add_executable(test_basic test.cpp) add_dependencies(test_basic ${PROJECT_NAME}) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data) add_test(test ${CMAKE_BINARY_DIR}/bin/test_basic) -set_property(TEST test APPEND PROPERTY ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/lib/libdlio_profiler.so) +set_property(TEST test APPEND PROPERTY ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/lib/libdlio_profiler_preload.so) set_property(TEST test APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib) set_property(TEST test APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=1) set_property(TEST test APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INIT=PRELOAD) set_property(TEST test APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) -set_property(TEST test APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_BINARY_DIR}/log_cpp.pwf) +set_property(TEST test APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_BINARY_DIR}/log_cpp_io_only) set_property(TEST test APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) find_program(PYTHON_EXE python) @@ -17,3 +17,15 @@ set_property(TEST test_py APPEND PROPERTY ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH set_property(TEST test_py APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}/dependency/.spack-env/view/lib64) set_property(TEST test APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=1) set_property(TEST test_py APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) + +find_program(PYTHON_EXE python) +message("-- Found python at location " ${PYTHON_EXE}) +add_test(test_py_both ${PYTHON_EXE} ${CMAKE_CURRENT_SOURCE_DIR}/test.py) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH}:${CMAKE_SOURCE_DIR}/venv/lib) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib:${CMAKE_SOURCE_DIR}/dependency/.spack-env/view/lib64) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT LD_PRELOAD=${CMAKE_BINARY_DIR}/lib/libdlio_profiler_preload.so) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_DATA_DIR=${CMAKE_CURRENT_BINARY_DIR}/data) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_FILE=${CMAKE_BINARY_DIR}/log_cpp_io_both) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_INIT=PRELOAD) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_ENABLE=1) +set_property(TEST test_py_both APPEND PROPERTY ENVIRONMENT DLIO_PROFILER_LOG_LEVEL=INFO) diff --git a/test/test.py b/test/test.py index 82c4ec33..60be9b47 100644 --- a/test/test.py +++ b/test/test.py @@ -45,7 +45,7 @@ def write_read_jpeg(index): import threading -logger.initialize(f"{cwd}/log.pwf", f"{cwd}/data") +logger.initialize(f"{cwd}/log-app.pwf", f"{cwd}/data") t1 = threading.Thread(target=posix_calls1, args=(10,)) custom_events() t2 = threading.Thread(target=posix_calls2, args=(1,))