Skip to content

Commit

Permalink
Reducing Overheads. (#170)
Browse files Browse the repository at this point in the history
1. Converted Logging to be compiled out.
2. Added debug preload called dbg to be used for logging.
3. Made I/O buffered of 32 MB.
4. Optimized printing of metadata and events.
  • Loading branch information
hariharan-devarajan authored Aug 31, 2024
1 parent a1cbeef commit 24b912a
Show file tree
Hide file tree
Showing 20 changed files with 522 additions and 338 deletions.
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

0 comments on commit 24b912a

Please sign in to comment.