pydftracer 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. pydftracer-1.0.1/CMakeLists.txt +517 -0
  2. pydftracer-1.0.1/MANIFEST.in +6 -0
  3. pydftracer-1.0.1/PKG-INFO +142 -0
  4. pydftracer-1.0.1/README.md +115 -0
  5. pydftracer-1.0.1/cmake/configure_files/dftracer-config-version.cmake.in +12 -0
  6. pydftracer-1.0.1/cmake/configure_files/dftracer-config.cmake.build.in +61 -0
  7. pydftracer-1.0.1/cmake/configure_files/dftracer-config.cmake.install.in +61 -0
  8. pydftracer-1.0.1/cmake/configure_files/dftracer_config.hpp.in +53 -0
  9. pydftracer-1.0.1/cmake/configure_files/dftracer_module.lua.in +49 -0
  10. pydftracer-1.0.1/cmake/modules/SetupCompiler.cmake +245 -0
  11. pydftracer-1.0.1/cmake/modules/dftracer-utils.cmake +139 -0
  12. pydftracer-1.0.1/cmake/tests/has_fd.cpp +61 -0
  13. pydftracer-1.0.1/cmake/tests/has_filesystem.cpp +8 -0
  14. pydftracer-1.0.1/dependency/CMakeLists.txt +11 -0
  15. pydftracer-1.0.1/dependency/cpp.requirements.txt +4 -0
  16. pydftracer-1.0.1/dependency/install_dependency.sh +38 -0
  17. pydftracer-1.0.1/dfanalyzer/__init__.py +0 -0
  18. pydftracer-1.0.1/dfanalyzer/main.py +681 -0
  19. pydftracer-1.0.1/dfanalyzer/plots.py +225 -0
  20. pydftracer-1.0.1/dftracer/__init__.py +0 -0
  21. pydftracer-1.0.1/dftracer/logger.py +309 -0
  22. pydftracer-1.0.1/include/dftracer/core/constants.h +32 -0
  23. pydftracer-1.0.1/include/dftracer/core/typedef.h +12 -0
  24. pydftracer-1.0.1/include/dftracer/dftracer.h +129 -0
  25. pydftracer-1.0.1/pydftracer.egg-info/PKG-INFO +142 -0
  26. pydftracer-1.0.1/pydftracer.egg-info/SOURCES.txt +55 -0
  27. pydftracer-1.0.1/pydftracer.egg-info/dependency_links.txt +1 -0
  28. pydftracer-1.0.1/pydftracer.egg-info/not-zip-safe +1 -0
  29. pydftracer-1.0.1/pydftracer.egg-info/requires.txt +17 -0
  30. pydftracer-1.0.1/pydftracer.egg-info/top_level.txt +2 -0
  31. pydftracer-1.0.1/pyproject.toml +50 -0
  32. pydftracer-1.0.1/setup.cfg +4 -0
  33. pydftracer-1.0.1/setup.py +208 -0
  34. pydftracer-1.0.1/src/dftracer/brahma/posix.cpp +566 -0
  35. pydftracer-1.0.1/src/dftracer/brahma/posix.h +198 -0
  36. pydftracer-1.0.1/src/dftracer/brahma/stdio.cpp +81 -0
  37. pydftracer-1.0.1/src/dftracer/brahma/stdio.h +96 -0
  38. pydftracer-1.0.1/src/dftracer/core/dftracer_main.cpp +241 -0
  39. pydftracer-1.0.1/src/dftracer/core/dftracer_main.h +74 -0
  40. pydftracer-1.0.1/src/dftracer/core/enumeration.h +46 -0
  41. pydftracer-1.0.1/src/dftracer/core/error.h +30 -0
  42. pydftracer-1.0.1/src/dftracer/core/macro.h +21 -0
  43. pydftracer-1.0.1/src/dftracer/core/singleton.h +52 -0
  44. pydftracer-1.0.1/src/dftracer/df_logger.cpp +5 -0
  45. pydftracer-1.0.1/src/dftracer/df_logger.h +152 -0
  46. pydftracer-1.0.1/src/dftracer/dftracer.cpp +141 -0
  47. pydftracer-1.0.1/src/dftracer/dftracer_preload.cpp +44 -0
  48. pydftracer-1.0.1/src/dftracer/dftracer_preload.h +12 -0
  49. pydftracer-1.0.1/src/dftracer/pydftracer.cpp +107 -0
  50. pydftracer-1.0.1/src/dftracer/utils/configuration_manager.cpp +287 -0
  51. pydftracer-1.0.1/src/dftracer/utils/configuration_manager.h +35 -0
  52. pydftracer-1.0.1/src/dftracer/utils/posix_internal.cpp +79 -0
  53. pydftracer-1.0.1/src/dftracer/utils/posix_internal.h +36 -0
  54. pydftracer-1.0.1/src/dftracer/utils/utils.cpp +5 -0
  55. pydftracer-1.0.1/src/dftracer/utils/utils.h +228 -0
  56. pydftracer-1.0.1/src/dftracer/writer/chrome_writer.cpp +212 -0
  57. pydftracer-1.0.1/src/dftracer/writer/chrome_writer.h +129 -0
@@ -0,0 +1,517 @@
1
+ cmake_minimum_required(VERSION 3.4...3.18)
2
+ #------------------------------------------------------------------------------
3
+ # Version information
4
+ #------------------------------------------------------------------------------
5
+
6
+ set(DFTRACER_VERSION_MAJOR "3")
7
+ set(DFTRACER_VERSION_MINOR "0")
8
+ set(DFTRACER_VERSION_PATCH "0")
9
+ set(DFTRACER_PACKAGE ${PROJECT_NAME})
10
+ set(DFTRACER_PACKAGE_NAME ${PROJECT_NAME})
11
+ set(DFTRACER_PACKAGE_VERSION "${DFTRACER_VERSION_MAJOR}.${DFTRACER_VERSION_MINOR}.${DFTRACER_VERSION_PATCH}")
12
+ set(DFTRACER_PACKAGE_VERSION_MAJOR "${DFTRACER_VERSION_MAJOR}.${DFTRACER_VERSION_MINOR}")
13
+ set(DFTRACER_PACKAGE_VERSION_MINOR "${DFTRACER_VERSION_PATCH}")
14
+ set(DFTRACER_PACKAGE_STRING "${DFTRACER_PACKAGE_NAME} ${DFTRACER_PACKAGE_VERSION}")
15
+ set(DFTRACER_PACKAGE_TARNAME "${DFTRACER_PACKAGE}")
16
+
17
+ project(dftracer LANGUAGES C CXX)
18
+
19
+
20
+ # Convenience defines
21
+ string(TOUPPER "${PROJECT_NAME}" UPPER_PROJECT_NAME)
22
+ string(TOLOWER "${PROJECT_NAME}" LOWER_PROJECT_NAME)
23
+
24
+ #------------------------------------------------------------------------------
25
+ # Internal Includes for header and libraries
26
+ #------------------------------------------------------------------------------
27
+ # Get installation directories -- these get used in various places;
28
+ # best to just make them available
29
+ option (DFTRACER_LIBDIR_AS_LIB OFF)
30
+ if (NOT DFTRACER_LIBDIR_AS_LIB)
31
+ include(GNUInstallDirs)
32
+ endif ()
33
+ #
34
+ if (CMAKE_INSTALL_LIBDIR)
35
+ message(STATUS "CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}")
36
+ set(DFTRACER_LIBDIR ${CMAKE_INSTALL_LIBDIR})
37
+ set(DFTRACER_INSTALL_INCLUDE_DIR
38
+ ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
39
+ set(DFTRACER_INSTALL_DOCDIR
40
+ ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR})
41
+ set(DFTRACER_INSTALL_SYSCONFDIR
42
+ ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SYSCONFDIR}/modulefiles)
43
+ else ()
44
+ set(DFTRACER_LIBDIR "lib")
45
+ set(DFTRACER_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
46
+ set(DFTRACER_INSTALL_DOCDIR "${CMAKE_INSTALL_PREFIX}/doc")
47
+ set(DFTRACER_INSTALL_SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc/modulefiles")
48
+ message(STATUS "DFTRACER_LIBDIR set to ${DFTRACER_LIBDIR}")
49
+ endif ()
50
+
51
+ #------------------------------------------------------------------------------
52
+ # Internal Paths for cmake libraries and Setup install and output Directories
53
+ #------------------------------------------------------------------------------
54
+ # This sets where to look for dependent libraries
55
+ set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${CMAKE_BINARY_DIR} ${CMAKE_INSTALL_PREFIX})
56
+ # This sets where to look for dependent library's cmake files
57
+ list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
58
+ list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR}/cmake)
59
+ list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/share/cmake)
60
+
61
+ #------------------------------------------------------------------------------
62
+ if (NOT DFTRACER_EXTERNALLY_CONFIGURED)
63
+ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Single Directory for all Executables.")
64
+ set(CMAKE_INCLUDE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/include CACHE PATH "Store the headers.")
65
+ set(EXECUTABLE_OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
66
+ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR} CACHE PATH "Single Directory for all Libraries")
67
+ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR} CACHE PATH "Single Directory for all static libraries.")
68
+ endif ()
69
+
70
+ include_directories(${CMAKE_BINARY_DIR}/include)
71
+ link_directories(${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR})
72
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
73
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
74
+
75
+ #-----------------------------------------------------------------------------
76
+ # Targets built within this project are exported at Install time for use
77
+ # by other projects.
78
+ #-----------------------------------------------------------------------------
79
+ if (NOT DFTRACER_EXPORTED_TARGETS)
80
+ set(DFTRACER_EXPORTED_TARGETS "dftracer-targets")
81
+ endif ()
82
+
83
+
84
+ include(dftracer-utils)
85
+ #------------------------------------------------------------------------------
86
+ # Build options
87
+ #------------------------------------------------------------------------------
88
+ # option(ENABLE_DFTRACER_DEBUG "Include debugging prints and logging" OFF) # This is not needed as we have CMAKE_BUILD_TYPE
89
+ # This is verbose, maybe an alternate might help simplify
90
+ #option(BUILD_URPC "Build DFTRACER's URPC code" OFF)
91
+ #option(ENABLE_PERFFLOW "Build with PerfFlow Aspect support" OFF)
92
+ #option(ENABLE_UCX_DTL "Build DFTRACER's UCX data transport layer" OFF)
93
+
94
+ # This option is off by default because non-developers should not use
95
+ # this option under normal circumstances.
96
+ option(DFTRACER_WARNINGS_AS_ERRORS "Build with warnings promoted to errors." OFF)
97
+ mark_as_advanced(DFTRACER_WARNINGS_AS_ERRORS)
98
+
99
+ option (DFTRACER_USE_CLANG_LIBCXX OFF)
100
+ if (DFTRACER_USE_CLANG_LIBCXX)
101
+ set (GCC_TOOLCHAIN "")
102
+ endif (DFTRACER_USE_CLANG_LIBCXX)
103
+
104
+ # Options
105
+ option (DFTRACER_DISABLE_HWLOC "Disable HWLOC" On)
106
+ if (NOT DFTRACER_DISABLE_HWLOC)
107
+ set(DFTRACER_HWLOC_ENABLE 1)
108
+ endif()
109
+ option (DFTRACER_BUILD_PYTHON_BINDINGS "Build python bindings." ON)
110
+ set(DFTRACER_PYTHON_EXE "python3" CACHE STRING "Python executable to use for building.")
111
+ set(DFTRACER_PYTHON_SITE $ENV{DFTRACER_PYTHON_SITE} CACHE STRING "Python site packages to use for building.")
112
+
113
+
114
+ if (DFTRACER_BUILD_PYTHON_BINDINGS)
115
+ if (DFTRACER_PYTHON_SITE)
116
+ set(PYTHON_SITE_PACKAGES "${DFTRACER_PYTHON_SITE}")
117
+ set(MAIN_PYTHON_SITE_PACKAGES ${PYTHON_SITE_PACKAGES})
118
+ else()
119
+ set(PYTHON_SITE_PACKAGES ${CMAKE_INSTALL_PREFIX})
120
+ execute_process (COMMAND ${DFTRACER_PYTHON_EXE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" OUTPUT_VARIABLE MAIN_PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
121
+ endif()
122
+ include_directories(${PYTHON_SITE_PACKAGES}/dftracer/include)
123
+ link_directories(${PYTHON_SITE_PACKAGES}/dftracer/lib)
124
+ endif()
125
+
126
+ # install dependency
127
+ option (DFTRACER_INSTALL_DEPENDENCIES "Install DFTracer dependencies" OFF)
128
+
129
+ # testing
130
+ option (DFTRACER_ENABLE_TESTS "Enable tests for DFTRACER." OFF)
131
+ option (DFTRACER_ENABLE_DLIO_BENCHMARK_TESTS "Enable dlio_benchmark tests" OFF)
132
+ option (DFTRACER_ENABLE_PAPER_TESTS "Enable paper tests" OFF)
133
+
134
+ #------------------------------------------------------------------------------
135
+ # Compiler setup
136
+ #------------------------------------------------------------------------------
137
+ include(ExternalProject)
138
+ # It requires include(GNUInstallDirs) before if that is needed
139
+ include(SetupCompiler)
140
+
141
+ #------------------------------------------------------------------------------
142
+ # Build Type based configurations
143
+ #------------------------------------------------------------------------------
144
+
145
+ if(CMAKE_BUILD_TYPE STREQUAL "")
146
+ set(CMAKE_BUILD_TYPE "Release") # Setting default as Release
147
+ endif()
148
+
149
+ if (NOT DEFINED BUILD_SHARED_LIBS)
150
+ set(BUILD_SHARED_LIBS ON)
151
+ endif ()
152
+ #------------------------------------------------------------------------------
153
+ # Disallow in-source build
154
+ #------------------------------------------------------------------------------
155
+ if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
156
+ message(FATAL_ERROR
157
+ "${PROJECT_NAME} requires an out of source Build. "
158
+ "Please create a separate binary directory and run CMake there.")
159
+ endif ()
160
+ #------------------------------------------------------------------------------
161
+ # Set a default build type if none was specified
162
+ #------------------------------------------------------------------------------
163
+ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
164
+ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
165
+ message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
166
+ set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
167
+ # Set the possible values of build type for cmake-gui
168
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
169
+ "MinSizeRel" "RelWithDebInfo")
170
+ endif ()
171
+ #------------------------------------------------------------------------------
172
+ # Dependencies
173
+ #------------------------------------------------------------------------------
174
+
175
+ if (DFTRACER_INSTALL_DEPENDENCIES)
176
+ message(STATUS "[${PROJECT_NAME}] downloading dependencies. Please run make for downloading depedencies and then do reconfigure without dependency flag.")
177
+ message(STATUS "[${PROJECT_NAME}] Installing depedencies at ${CMAKE_INSTALL_PREFIX}")
178
+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/dependency)
179
+ else()
180
+ # Required Dependencies
181
+ # =============================================================================
182
+ set(DEPENDENCY_LIB "")
183
+ find_package(cpp-logger 1.0.0 REQUIRED)
184
+ if (${cpp-logger_FOUND})
185
+ include_directories(${CPP_LOGGER_INCLUDE_DIRS})
186
+ set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${CPP_LOGGER_LIBRARIES})
187
+ message(STATUS "[CPP_LOGGER] found cpp-logger at ${CPP_LOGGER_INCLUDE_DIRS}")
188
+ else ()
189
+ message(FATAL_ERROR "-- [CPP_LOGGER] is needed for ${PROJECT_NAME} build")
190
+ endif ()
191
+ find_package(brahma REQUIRED)
192
+ if (${brahma_FOUND})
193
+ message(STATUS "[BRAHMA] found brahma at ${BRAHMA_INCLUDE_DIRS}")
194
+ include_directories(${BRAHMA_INCLUDE_DIRS})
195
+ set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${BRAHMA_LIBRARIES})
196
+ else ()
197
+ message(FATAL_ERROR "-- [BRAHMA] is needed for ${PROJECT_NAME} build")
198
+ endif ()
199
+ find_package(yaml-cpp REQUIRED)
200
+ if (${yaml-cpp_FOUND})
201
+ message(STATUS "[DFTRACER] found yaml-cpp at ${YAML_CPP_INCLUDE_DIR}")
202
+ include_directories(${YAML_CPP_INCLUDE_DIR})
203
+ set(YAML_CPP_LIBRARY_DIR "${YAML_CPP_CMAKE_DIR}/../../")
204
+ set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -L${YAML_CPP_LIBRARY_DIR} ${YAML_CPP_LIBRARIES})
205
+ else ()
206
+ message(FATAL_ERROR "-- [DFTRACER] yaml-cpp is needed for ${PROJECT_NAME} build")
207
+ endif ()
208
+
209
+ # Optional Dependencies
210
+ # =============================================================================
211
+ if (DFTRACER_BUILD_PYTHON_BINDINGS)
212
+ find_package(pybind11 REQUIRED)
213
+ #add_subdirectory(dependency/py11bind)
214
+ endif()
215
+ if (NOT DFTRACER_DISABLE_HWLOC)
216
+ find_package(HWLOC REQUIRED)
217
+ if (${HWLOC_FOUND})
218
+ include_directories(${HWLOC_INCLUDE_DIRS})
219
+ set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${HWLOC_LIBRARIES})
220
+ message(STATUS "[DFTRACER] found hwloc at ${HWLOC_INCLUDE_DIRS}")
221
+ else ()
222
+ message(FATAL_ERROR "-- [DFTRACER] hwloc is needed for ${PROJECT_NAME} build with -DDFTRACER_DISABLE_HWLOC-ON option.")
223
+ endif ()
224
+ endif()
225
+
226
+
227
+
228
+
229
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
230
+ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
231
+ set(DFTRACER_PRELOAD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/dftracer_preload.cpp)
232
+ set(DFTRACER_PRELOAD_PRIVATE_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/dftracer_preload.h)
233
+
234
+ set(DFTRACER_CORE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/posix.cpp
235
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/stdio.cpp
236
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/writer/chrome_writer.cpp
237
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/posix_internal.cpp
238
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/dftracer.cpp
239
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/dftracer_main.cpp
240
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/configuration_manager.cpp
241
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/df_logger.cpp
242
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/utils.cpp)
243
+ set(DFTRACER_CORE_PUBLIC_INCLUDE
244
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/dftracer/dftracer.h
245
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/dftracer/core/constants.h
246
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/dftracer/core/typedef.h)
247
+ set(DFTRACER_CORE_PRIVATE_INCLUDE
248
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/posix_internal.h
249
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/utils.h
250
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/posix.h
251
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/stdio.h
252
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/dftracer_main.h
253
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/macro.h
254
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/singleton.h
255
+ ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/configuration_manager.h)
256
+ add_library(${PROJECT_NAME} SHARED)
257
+ target_link_libraries(${PROJECT_NAME} ${DEPENDENCY_LIB})
258
+ add_library(${PROJECT_NAME}_preload SHARED)
259
+ target_link_libraries(${PROJECT_NAME}_preload ${DEPENDENCY_LIB} ${PROJECT_NAME})
260
+ if (DFTRACER_BUILD_PYTHON_BINDINGS)
261
+ pybind11_add_module(py${PROJECT_NAME} ${DFTRACER_CORE_SRC} ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/pydftracer.cpp)
262
+ target_compile_definitions(py${PROJECT_NAME} PRIVATE VERSION_INFO=${EXAMPLE_VERSION_INFO})
263
+ target_link_libraries(py${PROJECT_NAME} PRIVATE ${DEPENDENCY_LIB})
264
+ endif()
265
+ target_sources(${PROJECT_NAME}
266
+ PRIVATE
267
+ ${DFTRACER_CORE_SRC}
268
+ )
269
+ target_sources(${PROJECT_NAME}_preload
270
+ PRIVATE
271
+ ${DFTRACER_PRELOAD_SRC}
272
+ )
273
+ target_include_directories(${PROJECT_NAME}
274
+ PRIVATE
275
+ # where the library itself will look for its internal headers
276
+ ${CMAKE_CURRENT_SOURCE_DIR}/src
277
+ PUBLIC
278
+ # where top-level project will look for the library's public headers
279
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
280
+ # where external projects will look for the library's public headers
281
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
282
+ )
283
+ set_target_properties(${PROJECT_NAME}
284
+ PROPERTIES
285
+ DEBUG_OUTPUT_NAME ${PROJECT_NAME}
286
+ RELEASE_OUTPUT_NAME ${PROJECT_NAME}
287
+ MINSIZEREL_OUTPUT_NAME ${PROJECT_NAME}
288
+ RELWITHDEBINFO_OUTPUT_NAME ${PROJECT_NAME}
289
+ VERSION ${DFTRACER_PACKAGE_VERSION}
290
+ SOVERSION ${DFTRACER_PACKAGE_VERSION}
291
+ )
292
+
293
+ dftracer_install_headers("${DFTRACER_CORE_PUBLIC_INCLUDE}")
294
+ install(
295
+ TARGETS ${PROJECT_NAME}
296
+ EXPORT ${DFTRACER_EXPORTED_TARGETS}
297
+ LIBRARY DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
298
+ ARCHIVE DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
299
+ RUNTIME DESTINATION ${DFTRACER_INSTALL_BIN_DIR}
300
+ )
301
+ install(TARGETS ${PROJECT_NAME}
302
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
303
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
304
+ install(TARGETS ${PROJECT_NAME}_preload
305
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
306
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
307
+
308
+ install(
309
+ TARGETS
310
+ ${PROJECT_NAME}_preload
311
+ EXPORT
312
+ ${DFTRACER_EXPORTED_TARGETS}
313
+ LIBRARY DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
314
+ ARCHIVE DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
315
+ RUNTIME DESTINATION ${DFTRACER_INSTALL_BIN_DIR}
316
+ )
317
+ if (DFTRACER_BUILD_PYTHON_BINDINGS)
318
+ install(TARGETS py${PROJECT_NAME}
319
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
320
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
321
+ file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/symlink.sh CONTENT "echo -- Installing: symlink ${MAIN_PYTHON_SITE_PACKAGES}/$<TARGET_FILE_NAME:py${PROJECT_NAME}> from ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/$<TARGET_FILE_NAME:py${PROJECT_NAME}>;ln -sf ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/$<TARGET_FILE_NAME:py${PROJECT_NAME}> ${MAIN_PYTHON_SITE_PACKAGES}/$<TARGET_FILE_NAME:py${PROJECT_NAME}>")
322
+ install(CODE "execute_process(
323
+ COMMAND bash -c \"set -e
324
+ chmod +x ${CMAKE_BINARY_DIR}/symlink.sh
325
+ . ${CMAKE_BINARY_DIR}/symlink.sh
326
+ \")")
327
+ endif()
328
+ #cmake_policy(SET CMP0079 NEW) # In case that we need more control over the target building order
329
+
330
+ if(DFTRACER_ENABLE_TESTS)
331
+ message("-- " "[DFTracer] Enabling Testing")
332
+ if(CMAKE_BUILD_TYPE STREQUAL "PROFILE")
333
+ message("-- " "[DFTracer] building with CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}")
334
+ set(CMAKE_C_FLAGS_PROFILE --coverage)
335
+ set(CMAKE_CXX_FLAGS_PROFILE --coverage)
336
+ endif()
337
+ enable_testing()
338
+ add_subdirectory(test)
339
+ if(CMAKE_BUILD_TYPE STREQUAL "PROFILE")
340
+ get_property(COVERAGE_FILE_LIST GLOBAL PROPERTY COVERAGE_FILES)
341
+ add_custom_command(OUTPUT default.profdata COMMAND llvm-profdata merge -sparse ${COVERAGE_FILE_LIST} -o default.profdata VERBATIM)
342
+ add_custom_target(merged_coverage DEPENDS default.profdata)
343
+ endif()
344
+ endif()
345
+
346
+ #-----------------------------------------------------------------------------
347
+ # Configure the config.cmake file for the build directory
348
+ #-----------------------------------------------------------------------------
349
+ configure_file(
350
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/configure_files/${PROJECT_NAME}-config.cmake.build.in
351
+ ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake @ONLY
352
+ )
353
+
354
+ configure_file(
355
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/configure_files/${PROJECT_NAME}-config.cmake.install.in
356
+ ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/install/${PROJECT_NAME}-config.cmake @ONLY
357
+ )
358
+ install(
359
+ FILES
360
+ ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/install/${PROJECT_NAME}-config.cmake
361
+ DESTINATION
362
+ ${DFTRACER_LIBDIR}/cmake/${PROJECT_NAME}
363
+ )
364
+ #-----------------------------------------------------------------------------
365
+ # Configure the ${PROJECT_NAME}-config-version .cmake file for the install directory
366
+ #-----------------------------------------------------------------------------
367
+ configure_file(
368
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/configure_files/${PROJECT_NAME}-config-version.cmake.in
369
+ ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake @ONLY
370
+ )
371
+
372
+ install(
373
+ FILES
374
+ ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake
375
+ DESTINATION
376
+ ${DFTRACER_LIBDIR}/cmake/${PROJECT_NAME}
377
+ )
378
+
379
+ export(EXPORT ${DFTRACER_EXPORTED_TARGETS}
380
+ FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake")
381
+
382
+ # Write the configure file
383
+ configure_file("${CMAKE_SOURCE_DIR}/cmake/configure_files/dftracer_config.hpp.in"
384
+ "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/dftracer/dftracer_config.hpp" @ONLY)
385
+
386
+
387
+ ################################################################
388
+ # Install DFTRACER
389
+ ################################################################
390
+
391
+ include(CMakePackageConfigHelpers)
392
+
393
+ # Write the version file. This is independent of build/install tree.
394
+ write_basic_package_version_file(
395
+ DFTRACERConfigVersion.cmake
396
+ VERSION "${DFTRACER_PACKAGE_VERSION}"
397
+ COMPATIBILITY SameMajorVersion)
398
+
399
+ install(FILES
400
+ "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/dftracer/dftracer_config.hpp"
401
+ DESTINATION
402
+ ${DFTRACER_INSTALL_INCLUDE_DIR}/dftracer)
403
+
404
+ install(EXPORT
405
+ ${DFTRACER_EXPORTED_TARGETS}
406
+ DESTINATION
407
+ ${DFTRACER_LIBDIR}/cmake/${PROJECT_NAME}
408
+ FILE
409
+ ${DFTRACER_EXPORTED_TARGETS}.cmake
410
+ )
411
+
412
+ # Install license and readme
413
+ install(FILES
414
+ "${PROJECT_SOURCE_DIR}/LICENSE"
415
+ "${PROJECT_SOURCE_DIR}/README.md"
416
+ DESTINATION
417
+ ${DFTRACER_INSTALL_DOCDIR})
418
+
419
+
420
+ ###############################################################################
421
+ # Print out configuration summary
422
+ ###############################################################################
423
+
424
+ if (CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
425
+ set(DFTRACER_GNU_LINUX TRUE)
426
+ endif ()
427
+
428
+ # NOTE: message() outputs to stderr by default. We now use a string to
429
+ # maintain this information and then have cmake echo it to stdout. The
430
+ # only side effects are that if you use the CMake GUI, you won't see
431
+ # this output anymore (they only report stderr) and that if you add
432
+ # something to the list, you must remember your newline!
433
+ set(_str "\n== DFTRACER Configuration Summary ==\n\n")
434
+ string(APPEND _str " PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}\n"
435
+ " PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}\n\n"
436
+ " CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}\n"
437
+ " CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}\n\n")
438
+ if (CMAKE_BUILD_TYPE MATCHES None)
439
+ string(APPEND _str
440
+ " CXX FLAGS: ${CMAKE_CXX_FLAGS}\n")
441
+ elseif (CMAKE_BUILD_TYPE MATCHES Release)
442
+ string(APPEND _str
443
+ " CXX FLAGS: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}\n")
444
+ string(APPEND _str
445
+ " C FLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}\n")
446
+ elseif (CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
447
+ string(APPEND _str
448
+ " CXX FLAGS: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}\n")
449
+ string(APPEND _str
450
+ " C FLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}\n")
451
+ elseif (CMAKE_BUILD_TYPE MATCHES Debug)
452
+ string(APPEND _str
453
+ " CXX FLAGS: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}\n")
454
+ string(APPEND _str
455
+ " C FLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}\n")
456
+ endif ()
457
+ string(APPEND _str "\n")
458
+
459
+ string(APPEND _str
460
+ " DFTRACER_PACKAGE_VERSION: ${DFTRACER_PACKAGE_VERSION}\n")
461
+ string(APPEND _str
462
+ " DFTRACER_GIT_VERSION: ${DFTRACER_GIT_VERSION}\n")
463
+ string(APPEND _str
464
+ " GLIBC_VERSION: ${GLIBC_VERSION}\n")
465
+ string(APPEND _str
466
+ " DFTRACER_PYTHON_EXE: ${DFTRACER_PYTHON_EXE}\n")
467
+ string(APPEND _str
468
+ " DFTRACER_PYTHON_SITE: ${DFTRACER_PYTHON_SITE}\n")
469
+ string(APPEND _str
470
+ " MAIN_PYTHON_SITE_PACKAGES: ${MAIN_PYTHON_SITE_PACKAGES}\n")
471
+ string(APPEND _str
472
+ " DEPENDENCY_LIB: ${DEPENDENCY_LIB}\n")
473
+ #Print the true/false variables
474
+ append_str_tf(_str
475
+ DFTRACER_GNU_LINUX
476
+ DFTRACER_LIBDIR_AS_LIB
477
+ DFTRACER_USE_CLANG_LIBCXX
478
+ DFTRACER_WARNINGS_AS_ERRORS
479
+ DFTRACER_BUILD_PYTHON_BINDINGS
480
+ DFTRACER_ENABLE_TESTS
481
+ DFTRACER_ENABLE_DLIO_BENCHMARK_TESTS
482
+ DFTRACER_ENABLE_PAPER_TESTS
483
+ )
484
+ string(APPEND _str
485
+ "\n== End DFTRACER Configuration Summary ==\n")
486
+
487
+ # Output to stdout
488
+ execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${_str}")
489
+ set(_str)
490
+
491
+
492
+ ###############################################################################
493
+ # Write a basic modulefile
494
+ ###############################################################################
495
+
496
+ set(DFTRACER_MODULEFILE_NAME "dftracer-${DFTRACER_PACKAGE_VERSION}.lua")
497
+ # CACHE STRING
498
+ # "The name of the DFTRACER modulefile to install. Must end in .lua.")
499
+
500
+ if (NOT (DFTRACER_MODULEFILE_NAME MATCHES ".+\.lua"))
501
+ message(WARNING
502
+ "DFTRACER_MODULEFILE_NAME must have extension \".lua\". Appending.")
503
+ set(DFTRACER_MODULEFILE_NAME "${DFTRACER_MODULEFILE_NAME}.lua"
504
+ CACHE STRING "" FORCE)
505
+ endif ()
506
+
507
+ configure_file(
508
+ "${CMAKE_SOURCE_DIR}/cmake/configure_files/dftracer_module.lua.in"
509
+ "${CMAKE_BINARY_DIR}/dftracer_module.lua.install"
510
+ @ONLY)
511
+
512
+ install(FILES "${CMAKE_BINARY_DIR}/dftracer_module.lua.install"
513
+ RENAME "${DFTRACER_MODULEFILE_NAME}"
514
+ DESTINATION
515
+ "${DFTRACER_INSTALL_SYSCONFDIR}")
516
+
517
+ endif()
@@ -0,0 +1,6 @@
1
+ graft src
2
+ graft cmake
3
+ graft dependency
4
+ graft include
5
+
6
+ include CMakeLists.txt
@@ -0,0 +1,142 @@
1
+ Metadata-Version: 2.1
2
+ Name: pydftracer
3
+ Version: 1.0.1
4
+ Summary: I/O profiler for deep learning python apps. Specifically for dlio_benchmark.
5
+ Home-page: https://github.com/hariharan-devarajan/dftracer
6
+ Author: Hariharan Devarajan (Hari)
7
+ License: UNKNOWN
8
+ Project-URL: Bug Reports, https://github.com/hariharan-devarajan/dftracer/issues
9
+ Project-URL: Source, https://github.com/hariharan-devarajan/dftracer
10
+ Description: [![DFTracer Build and Test](https://github.com/hariharan-devarajan/dftracer/actions/workflows/ci.yml/badge.svg)](https://github.com/hariharan-devarajan/dftracer/actions/workflows/ci.yml)
11
+ [![Coverage Status](https://coveralls.io/repos/github/hariharan-devarajan/dftracer/badge.svg?branch=feature/apis)](https://coveralls.io/github/hariharan-devarajan/dftracer?branch=dev)
12
+ [![Documentation Status](https://readthedocs.org/projects/dftracer/badge/?version=latest)](https://dftracer.readthedocs.io/en/latest/?badge=latest)
13
+
14
+ # DFTracer v1.0.1
15
+ A multi-level profiler for capturing application functions and low-level system I/O calls from deep learning workloads.
16
+
17
+ Requirements for profiler
18
+ 1. Python > 3.7
19
+ 2. pybind11
20
+
21
+
22
+ Requirements for analyzer
23
+ 1. bokeh>=2.4.2
24
+ 2. pybind11
25
+ 3. [zindex_py](https://github.com/hariharan-devarajan/zindex.git)
26
+ 4. pandas>=2.0.3
27
+ 5. dask>=2023.5.0
28
+ 6. distributed
29
+ 7. numpy>=1.24.3
30
+ 8. pyarrow>=12.0.1
31
+ 9. rich>=13.6.0
32
+ 10. python-intervals>=1.10.0.post1
33
+ 11. matplotlib>=3.7.3
34
+
35
+ ## Build DFTracer with pip
36
+
37
+ Users can easily install DFTracer using pip. This is the way most python packages are installed.
38
+ This method would work for both native python environments and conda environments.
39
+
40
+ ### From source
41
+
42
+ ```bash
43
+ git clone git@github.com:hariharan-devarajan/dftracer.git
44
+ cd dftracer
45
+ # You can skip this for installing the dev branch.
46
+ # for latest stable version use master branch.
47
+ git checkout tags/<Release> -b <Release>
48
+ pip install .
49
+ ```
50
+
51
+ ### From Github
52
+
53
+ ```bash
54
+ DFT_VERSION=dev
55
+ pip install git+https://github.com/hariharan-devarajan/dftracer.git@${DFT_VERSION}
56
+ ```
57
+
58
+ For more build instructions check [here](https://dftracer.readthedocs.io/en/latest/build.html)
59
+
60
+ Usage
61
+
62
+ ```
63
+ from dftracer.logger import dftracer, dft_fn
64
+ log_inst = dftracer.initialize_log(logfile=None, data_dir=None, process_id=-1)
65
+ dft_fn = dft_fn("COMPUTE")
66
+
67
+ # Example of using function decorators
68
+ @dft_fn.log
69
+ def log_events(index):
70
+ sleep(1)
71
+
72
+ # Example of function spawning and implicit I/O calls
73
+ def posix_calls(val):
74
+ index, is_spawn = val
75
+ path = f"{cwd}/data/demofile{index}.txt"
76
+ f = open(path, "w+")
77
+ f.write("Now the file has more content!")
78
+ f.close()
79
+ if is_spawn:
80
+ print(f"Calling spawn on {index} with pid {os.getpid()}")
81
+ log_inst.finalize() # This need to be called to correctly finalize DFTracer.
82
+ else:
83
+ print(f"Not calling spawn on {index} with pid {os.getpid()}")
84
+
85
+ # NPZ calls internally calls POSIX calls.
86
+ def npz_calls(index):
87
+ # print(f"{cwd}/data/demofile2.npz")
88
+ path = f"{cwd}/data/demofile{index}.npz"
89
+ if os.path.exists(path):
90
+ os.remove(path)
91
+ records = np.random.randint(255, size=(8, 8, 1024), dtype=np.uint8)
92
+ record_labels = [0] * 1024
93
+ np.savez(path, x=records, y=record_labels)
94
+
95
+ def main():
96
+ log_events(0)
97
+ npz_calls(1)
98
+ with get_context('spawn').Pool(1, initializer=init) as pool:
99
+ pool.map(posix_calls, ((2, True),))
100
+ log_inst.finalize()
101
+
102
+
103
+ if __name__ == "__main__":
104
+ main()
105
+
106
+ ```
107
+
108
+ For this example, as the DFTRACER_CPP_INIT do not pass log file or data dir, we need to set ``DFTRACER_LOG_FILE`` and ``DFTRACER_DATA_DIR``.
109
+ By default the DFTracer mode is set to FUNCTION.
110
+ Example of running this configurations are:
111
+
112
+ ```
113
+
114
+ # the process id, app_name and .pfw will be appended by the profiler for each app and process.
115
+ # name of final log file is ~/log_file-<APP_NAME>-<PID>.pfw
116
+ DFTRACER_LOG_FILE=~/log_file
117
+ # Colon separated paths for including for profiler
118
+ DFTRACER_DATA_DIR=/dev/shm/:/p/gpfs1/$USER/dataset:$PWD/data
119
+ # Enable profiler
120
+ DFTRACER_ENABLE=1
121
+ ```
122
+
123
+ For more example check [Examples](https://dftracer.readthedocs.io/en/latest/examples.html).
124
+
125
+
126
+ Keywords: profiler,deep learning,I/O,benchmark,NPZ,pytorch benchmark,tensorflow benchmark
127
+ Platform: UNKNOWN
128
+ Classifier: Development Status :: 3 - Alpha
129
+ Classifier: Intended Audience :: Science/Research
130
+ Classifier: Topic :: Software Development :: Build Tools
131
+ Classifier: License :: OSI Approved :: MIT License
132
+ Classifier: Programming Language :: Python :: 3.7
133
+ Classifier: Programming Language :: Python :: 3.8
134
+ Classifier: Programming Language :: Python :: 3.9
135
+ Classifier: Programming Language :: Python :: 3.10
136
+ Classifier: Programming Language :: Python :: 3 :: Only
137
+ Requires: pybind11
138
+ Requires: setuptools
139
+ Requires-Python: >=3.7
140
+ Description-Content-Type: text/markdown
141
+ Provides-Extra: test
142
+ Provides-Extra: dfanalyzer