Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reducing Overheads through DFTracer #170

Merged
merged 1 commit into from
Aug 31, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 51 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -273,13 +273,23 @@ set(DFTRACER_CORE_PRIVATE_INCLUDE
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/posix.h
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/stdio.h
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/dftracer_main.h
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/macro.h
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/logging.h
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/singleton.h
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/configuration_manager.h)
add_library(${PROJECT_NAME} SHARED)
target_link_libraries(${PROJECT_NAME} ${DEPENDENCY_LIB})
add_library(${PROJECT_NAME}_dbg SHARED)
target_link_libraries(${PROJECT_NAME}_dbg ${DEPENDENCY_LIB})
target_compile_definitions(${PROJECT_NAME}_dbg PUBLIC DFTRACER_LOGGER_CPP_LOGGER)
target_compile_definitions(${PROJECT_NAME}_dbg PUBLIC DFTRACER_LOGGER_LEVEL_TRACE)
target_compile_definitions(${PROJECT_NAME}_dbg PUBLIC DFTRACER_LOGGER_LEVEL_DEBUG)
target_compile_definitions(${PROJECT_NAME}_dbg PUBLIC DFTRACER_LOGGER_LEVEL_INFO)
target_compile_definitions(${PROJECT_NAME}_dbg PUBLIC DFTRACER_LOGGER_LEVEL_WARN)
target_compile_definitions(${PROJECT_NAME}_dbg PUBLIC DFTRACER_LOGGER_LEVEL_ERROR)
add_library(${PROJECT_NAME}_preload SHARED)
target_link_libraries(${PROJECT_NAME}_preload ${DEPENDENCY_LIB} ${PROJECT_NAME})
add_library(${PROJECT_NAME}_preload_dbg SHARED)
target_link_libraries(${PROJECT_NAME}_preload_dbg ${DEPENDENCY_LIB} ${PROJECT_NAME}_dbg)
if (DFTRACER_BUILD_PYTHON_BINDINGS)
pybind11_add_module(py${PROJECT_NAME} ${DFTRACER_CORE_SRC} ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/pydftracer.cpp)
target_compile_definitions(py${PROJECT_NAME} PRIVATE VERSION_INFO=${EXAMPLE_VERSION_INFO})
Expand All @@ -289,10 +299,18 @@ target_sources(${PROJECT_NAME}
PRIVATE
${DFTRACER_CORE_SRC}
)
target_sources(${PROJECT_NAME}_dbg
PRIVATE
${DFTRACER_CORE_SRC}
)
target_sources(${PROJECT_NAME}_preload
PRIVATE
${DFTRACER_PRELOAD_SRC}
)
target_sources(${PROJECT_NAME}_preload_dbg
PRIVATE
${DFTRACER_PRELOAD_SRC}
)
target_include_directories(${PROJECT_NAME}
PRIVATE
# where the library itself will look for its internal headers
Expand All @@ -303,6 +321,16 @@ target_include_directories(${PROJECT_NAME}
# where external projects will look for the library's public headers
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_include_directories(${PROJECT_NAME}_dbg
PRIVATE
# where the library itself will look for its internal headers
${CMAKE_CURRENT_SOURCE_DIR}/src
PUBLIC
# where top-level project will look for the library's public headers
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
# where external projects will look for the library's public headers
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set_target_properties(${PROJECT_NAME}
PROPERTIES
DEBUG_OUTPUT_NAME ${PROJECT_NAME}
Expand All @@ -324,9 +352,22 @@ install(
install(TARGETS ${PROJECT_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(
TARGETS ${PROJECT_NAME}_dbg
EXPORT ${DFTRACER_EXPORTED_TARGETS}
LIBRARY DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
RUNTIME DESTINATION ${DFTRACER_INSTALL_BIN_DIR}
)
install(TARGETS ${PROJECT_NAME}_dbg
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(TARGETS ${PROJECT_NAME}_preload
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(TARGETS ${PROJECT_NAME}_preload_dbg
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

install(
TARGETS
Expand All @@ -337,6 +378,15 @@ install(
ARCHIVE DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
RUNTIME DESTINATION ${DFTRACER_INSTALL_BIN_DIR}
)
install(
TARGETS
${PROJECT_NAME}_preload_dbg
EXPORT
${DFTRACER_EXPORTED_TARGETS}
LIBRARY DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
RUNTIME DESTINATION ${DFTRACER_INSTALL_BIN_DIR}
)
if (DFTRACER_BUILD_PYTHON_BINDINGS)
install(TARGETS py${PROJECT_NAME}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
Expand Down
21 changes: 11 additions & 10 deletions src/dftracer/brahma/posix.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#define DFTRACER_POSIX_H

#include <brahma/brahma.h>
#include <dftracer/core/macro.h>
#include <dftracer/core/logging.h>
#include <dftracer/df_logger.h>
#include <dftracer/utils/utils.h>
#include <fcntl.h>
Expand All @@ -33,11 +33,12 @@ class POSIXDFTracer : public POSIX {
const char *trace = tracked_fd[fd % MAX_FD].empty()
? nullptr
: tracked_fd[fd % MAX_FD].c_str();
if (trace != nullptr)
DFTRACER_LOGDEBUG(
if (trace != nullptr) {
DFTRACER_LOG_DEBUG(
"Calling POSIXDFTracer.is_traced for %s and"
" fd %d trace %d",
func, fd, trace != nullptr);
}
return trace;
}

Expand All @@ -49,39 +50,39 @@ class POSIXDFTracer : public POSIX {
else
trace = is_traced_common(filename, func);
if (trace != nullptr)
DFTRACER_LOGDEBUG(
DFTRACER_LOG_DEBUG(
"Calling POSIXDFTracer.is_traced with "
"filename %s for %s trace %d",
filename, func, trace != nullptr);
return trace;
}

inline void trace(int fd, const char *filename) {
DFTRACER_LOGDEBUG("Calling POSIXDFTracer.trace for %d and %s", fd,
filename);
DFTRACER_LOG_DEBUG("Calling POSIXDFTracer.trace for %d and %s", fd,
filename);
if (fd == -1) return;
tracked_fd[fd % MAX_FD] = filename;
}

inline void remove_trace(int fd) {
DFTRACER_LOGDEBUG("Calling POSIXDFTracer.remove_trace for %d", fd);
DFTRACER_LOG_DEBUG("Calling POSIXDFTracer.remove_trace for %d", fd);
if (fd == -1) return;
tracked_fd[fd % MAX_FD] = std::string();
}

public:
POSIXDFTracer(bool trace_all) : POSIX(), trace_all_files(trace_all) {
DFTRACER_LOGDEBUG("POSIX class intercepted", "");
DFTRACER_LOG_DEBUG("POSIX class intercepted", "");
for (int i = 0; i < MAX_FD; ++i) tracked_fd[i] = std::string();
logger = DFT_LOGGER_INIT();
}
void finalize() {
DFTRACER_LOGDEBUG("Finalizing POSIXDFTracer", "");
DFTRACER_LOG_DEBUG("Finalizing POSIXDFTracer", "");
stop_trace = true;
}
~POSIXDFTracer() {}
static std::shared_ptr<POSIXDFTracer> get_instance(bool trace_all = false) {
DFTRACER_LOGDEBUG("POSIX class get_instance", "");
DFTRACER_LOG_DEBUG("POSIX class get_instance", "");
if (!stop_trace && instance == nullptr) {
instance = std::make_shared<POSIXDFTracer>(trace_all);
POSIX::set_instance(instance);
Expand Down
20 changes: 10 additions & 10 deletions src/dftracer/brahma/stdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#define DFTRACER_STDIO_H

#include <brahma/brahma.h>
#include <dftracer/core/macro.h>
#include <dftracer/core/logging.h>
#include <dftracer/df_logger.h>
#include <dftracer/utils/utils.h>
#include <fcntl.h>
Expand All @@ -27,7 +27,7 @@ class STDIODFTracer : public STDIO {
bool trace_all_files;

inline const char *is_traced(FILE *fh, const char *func) {
DFTRACER_LOGDEBUG("Calling STDIODFTracer.is_traced for %s", func);
DFTRACER_LOG_DEBUG("Calling STDIODFTracer.is_traced for %s", func);
if (fh == NULL) return nullptr;
auto iter = tracked_fh.find(fh);
if (iter != tracked_fh.end()) {
Expand All @@ -37,8 +37,8 @@ class STDIODFTracer : public STDIO {
}

inline const char *is_traced(const char *filename, const char *func) {
DFTRACER_LOGDEBUG("Calling STDIODFTracer.is_traced with filename for %s",
func);
DFTRACER_LOG_DEBUG("Calling STDIODFTracer.is_traced with filename for %s",
func);
if (stop_trace) return nullptr;
if (trace_all_files)
return filename;
Expand All @@ -47,29 +47,29 @@ class STDIODFTracer : public STDIO {
}

inline void trace(FILE *fh, const char *filename) {
DFTRACER_LOGDEBUG("Calling STDIODFTracer.trace with filename", "");
DFTRACER_LOG_DEBUG("Calling STDIODFTracer.trace with filename", "");
tracked_fh.insert_or_assign(fh, filename);
}

inline void remove_trace(FILE *fh) {
DFTRACER_LOGDEBUG("Calling STDIODFTracer.remove_trace with filename", "");
DFTRACER_LOG_DEBUG("Calling STDIODFTracer.remove_trace with filename", "");
tracked_fh.erase(fh);
}

public:
STDIODFTracer(bool trace_all)
: STDIO(), tracked_fh(), trace_all_files(trace_all) {
DFTRACER_LOGDEBUG("STDIO class intercepted", "");
DFTRACER_LOG_DEBUG("STDIO class intercepted", "");
logger = DFT_LOGGER_INIT();
}
void finalize() {
DFTRACER_LOGDEBUG("Finalizing STDIODFTracer", "");
DFTRACER_LOG_DEBUG("Finalizing STDIODFTracer", "");
stop_trace = true;
}
~STDIODFTracer() {};
~STDIODFTracer(){};

static std::shared_ptr<STDIODFTracer> get_instance(bool trace_all = false) {
DFTRACER_LOGDEBUG("STDIO class get_instance", "");
DFTRACER_LOG_DEBUG("STDIO class get_instance", "");
if (!stop_trace && instance == nullptr) {
instance = std::make_shared<STDIODFTracer>(trace_all);
STDIO::set_instance(instance);
Expand Down
Loading
Loading