diff --git a/.clang-format b/.clang-format index 7a70325a..1bdfc179 100755 --- a/.clang-format +++ b/.clang-format @@ -4,4 +4,4 @@ ColumnLimit: 100 AllowShortFunctionsOnASingleLine: Inline DerivePointerAlignment: false PointerAlignment: Left -UseTab: Never \ No newline at end of file +UseTab: Never diff --git a/.cmake-format b/.cmake-format new file mode 100644 index 00000000..120fb4c6 --- /dev/null +++ b/.cmake-format @@ -0,0 +1,7 @@ +format: + tab_size: 2 + line_width: 100 + dangle_parens: true + max_pargs_hwrap: 3 + separate_ctrl_name_with_space: false + separate_fn_name_with_space: false \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0ac87462..4e36bad5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -6,7 +6,7 @@ // Sets the run context to one level up instead of the .devcontainer folder. "context": "..", // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. - "dockerfile": "../Dockerfile", + "dockerfile": "../infrastructure/docker/Dockerfile", }, "runArgs": [ "-ti", diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..b3319554 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +root = true + +[CMakeLists.txt] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{sh,sh.in}] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true \ No newline at end of file diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 88af70ce..47c797b2 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -13,12 +13,27 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: '1.21' + - name: Install clang-format run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ build-essential \ clang-format-19 + + - name: Install shfmt + run: | + go install mvdan.cc/sh/v3/cmd/shfmt@latest + echo "$HOME/go/bin" >> $GITHUB_PATH + + - name: Install cmake-format + run: | + sudo apt-get install -y python3-pip + sudo pip3 install cmake-format - name: Test formatting run: | diff --git a/.gitignore b/.gitignore index 951f9942..bd7f5899 100755 --- a/.gitignore +++ b/.gitignore @@ -78,4 +78,8 @@ poc/bpf-core/vmlinux.h deps #nfs -*.nfs* \ No newline at end of file +*.nfs* + +# Sphinx documentation builds +docs/_build/ +docs/_static/__pycache__/ \ No newline at end of file diff --git a/.shellcheckrc b/.shellcheckrc new file mode 100644 index 00000000..3daa6cfe --- /dev/null +++ b/.shellcheckrc @@ -0,0 +1,15 @@ +# .shellcheckrc for CMake templates +# Allow @placeholder@ sourcing +disable=SC1090,SC1091 +# Allow sed patterns with @ symbols +disable=SC2001 +# Allow @VAR@ unquoted (will be replaced) +disable=SC2086 +disable=SC2050 +disable=SC2155 + +# Enforce style +# Use [[ ]] consistently +enable=require-double-brackets +# Use ${var} consistently +enable=require-variable-braces \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 4048a73d..6d343ec1 100755 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,4 @@ { - "cmake.configureArgs": [ - "-DCMAKE_PREFIX_PATH=/home/cc/datacrumbs/dependency/.spack-env/view" - ], "editor.formatOnSave": true, "files.associations": { "string": "cpp", diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100755 new mode 100644 index 2f26e1fc..9e1e5983 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,7 @@ option(DATACRUMBS_TRACE_ALL_PROCESSES_OPT "Trace all processes" OFF) set(DATACRUMBS_INCLUSION_PATH "NONE" CACHE STRING "Inclusion path for datacrumbs") set(DATACRUMBS_CONFIGURED_TRACE_DIR "/tmp" CACHE STRING "Trace directory for datacrumbs") set(DATACRUMBS_CONFIGURED_LOG_DIR "/tmp" CACHE STRING "Log directory for datacrumbs") +set(DATACRUMBS_CONFIGURED_RUN_DIR "NONE" CACHE STRING "Run directory for datacrumbs") option(DATACRUMBS_BPF_PRINT_ENABLE "Enable BPF print" OFF) set(DATACRUMBS_MODE_STR "TRACE" CACHE STRING "Mode for datacrumbs (TRACE or PROFILE)") @@ -84,6 +85,15 @@ set(DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS "1000" CACHE STRING "Threshold in # Profiling Options set(DATACRUMBS_TIME_INTERVAL_NS "1000000" CACHE STRING "Profiling time interval in nanosecond") +# Scheduling Options +set(DATACRUMBS_LAUNCHER_TYPE "FLUX" CACHE STRING "Scheduler type for datacrumbs (FLUX, SLURM, OPENMPI, or NONE)") +set_property(CACHE DATACRUMBS_LAUNCHER_TYPE PROPERTY STRINGS FLUX SLURM OPENMPI NONE) +set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "NONE" CACHE STRING "Scheduler job ID environment variable name") +set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "NONE" CACHE STRING "Scheduler option for setting nodes") +set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "NONE" CACHE STRING "Scheduler option for setting processes per node") +set(DATACRUMBS_SCHEDULER_RUN_CMD "NONE" CACHE STRING "Scheduler run command") +set(DATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS "" CACHE STRING "Scheduler run extra args") + # Other options set(DATACRUMBS_LOG_LEVEL_STR "INFO" CACHE STRING "Log Level for compiling ${UPPER_PROJECT_NAME}") set_property(CACHE DATACRUMBS_LOG_LEVEL_STR PROPERTY STRINGS ERROR WARN INFO DEBUG TRACE) @@ -139,6 +149,11 @@ message(STATUS " - Found kernel headers at: ${DATACRUMBS_KERNEL_HEAD message(STATUS " - DATACRUMBS_KERNEL_UNAME_R: ${DATACRUMBS_KERNEL_UNAME_R}") message(STATUS " - DATACRUMBS_CONFIGURED_TRACE_DIR: ${DATACRUMBS_CONFIGURED_TRACE_DIR}") message(STATUS " - DATACRUMBS_CONFIGURED_LOG_DIR: ${DATACRUMBS_CONFIGURED_LOG_DIR}") +message(STATUS " - DATACRUMBS_LAUNCHER_TYPE: ${DATACRUMBS_LAUNCHER_TYPE}") +message(STATUS " - DATACRUMBS_SCHEDULER_JOBID_ENV_VAR: ${DATACRUMBS_SCHEDULER_JOBID_ENV_VAR}") +message(STATUS " - DATACRUMBS_SCHEDULER_NODES_CMD_OPT: ${DATACRUMBS_SCHEDULER_NODES_CMD_OPT}") +message(STATUS " - DATACRUMBS_SCHEDULER_PPN_CMD_OPT: ${DATACRUMBS_SCHEDULER_PPN_CMD_OPT}") +message(STATUS " - DATACRUMBS_SCHEDULER_RUN_CMD: ${DATACRUMBS_SCHEDULER_RUN_CMD}") if(NOT EXISTS "${DATACRUMBS_CONFIGURED_TRACE_DIR}") message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] DATACRUMBS_CONFIGURED_TRACE_DIR does not exist: ${DATACRUMBS_CONFIGURED_TRACE_DIR}") @@ -424,7 +439,7 @@ add_dependencies(datacrumbs_obj datacrumbs_bpf_skel) # Build the final executable by linking server.cpp and the object library add_executable(${PROJECT_NAME} ${DATACRUMBS_SERVER_SRC}) -target_link_libraries(${PROJECT_NAME} ${DEPENDENCY_LIB} datacrumbs_obj) +target_link_libraries(${PROJECT_NAME} datacrumbs_obj ${DEPENDENCY_LIB}) add_dependencies(${PROJECT_NAME} datacrumbs_bpf_skel datacrumbs_obj) # Install the main processing executable into DATACRUMBS_INSTALL_BINARYDIR @@ -587,6 +602,8 @@ set(_DATACRUMBS_DATA_FILES "${CMAKE_DATA_OUTPUT_DIRECTORY}/categories-${DATACRUMBS_USER}-${DATACRUMBS_HOST}.json" "${CMAKE_DATA_OUTPUT_DIRECTORY}/probes-${DATACRUMBS_USER}-${DATACRUMBS_HOST}.json" ) +# Ensure the data output directory exists +file(MAKE_DIRECTORY ${CMAKE_DATA_OUTPUT_DIRECTORY}) if(_DATACRUMBS_DATA_FILES) install(FILES ${_DATACRUMBS_DATA_FILES} @@ -775,6 +792,15 @@ install( ${DATACRUMBS_INSTALL_SBINARYDIR} ) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_salloc.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_salloc @ONLY) +install( + PROGRAMS + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_salloc + DESTINATION + ${DATACRUMBS_INSTALL_BINARYDIR} +) + + # Create an empty directory at install time install(CODE "file(MAKE_DIRECTORY \"\${DATACRUMBS_INSTALL_LIBEXEC}/sbin\")") @@ -795,15 +821,15 @@ if(NOT DATACRUMBS_INCLUSION_PATH STREQUAL "NONE") set(DATACRUMBS_VARS ${DATACRUMBS_VARS} --inclusion_path ${DATACRUMBS_INCLUSION_PATH}) endif() -add_test(NAME datacrumbs_start COMMAND ${DATACRUMBS_PATH}/datacrumbs start ${DATACRUMBS_HOST} ${DATACRUMBS_VARS}) +add_test(NAME datacrumbs_start COMMAND ${DATACRUMBCMAKE_RUNTIME_OUTPUT_DIRECTORYS_PATH}/datacrumbs start ${DATACRUMBS_HOST} ${DATACRUMBS_VARS}) set_tests_properties(datacrumbs_start PROPERTIES DEPENDS datacrumbs_pretest) set_tests_properties(datacrumbs_start PROPERTIES DEPENDS ${PROJECT_NAME}) -add_test(NAME datacrumbs_run COMMAND ${DATACRUMBS_PATH}/datacrumbs run ${DATACRUMBS_HOST} ${DATACRUMBS_VARS}) +add_test(NAME datacrumbs_run COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs run ${DATACRUMBS_HOST} ${DATACRUMBS_VARS}) set_tests_properties(datacrumbs_run PROPERTIES DEPENDS datacrumbs_pretest) set_tests_properties(datacrumbs_run PROPERTIES DEPENDS ${PROJECT_NAME}) -add_test(NAME datacrumbs_stop COMMAND ${DATACRUMBS_PATH}/datacrumbs stop ${DATACRUMBS_HOST} ${DATACRUMBS_VARS}) +add_test(NAME datacrumbs_stop COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs stop ${DATACRUMBS_HOST} ${DATACRUMBS_VARS}) set_tests_properties(datacrumbs_stop PROPERTIES DEPENDS datacrumbs_pretest) set_tests_properties(datacrumbs_stop PROPERTIES DEPENDS ${PROJECT_NAME}) diff --git a/cmake/configure_files/datacrumbs_config.h.in b/cmake/configure_files/datacrumbs_config.h.in index 773491e8..24e361e0 100644 --- a/cmake/configure_files/datacrumbs_config.h.in +++ b/cmake/configure_files/datacrumbs_config.h.in @@ -42,7 +42,7 @@ #cmakedefine DATACRUMBS_CONFIG_PATH "@DATACRUMBS_CONFIG_PATH@" #cmakedefine DATACRUMBS_LOG_DIR "@DATACRUMBS_LOG_DIR@" #cmakedefine DATACRUMBS_DATA_DIR "@DATACRUMBS_DATA_DIR@" -#cmakedefine DATACRUMBS_INSTALL_RUNSTATEDIR "@DATACRUMBS_INSTALL_RUNSTATEDIR@" +#cmakedefine DATACRUMBS_INSTALL_RUNSTATEDIR "@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@" #cmakedefine DATACRUMBS_ENABLE_INCLUSION_PATH @DATACRUMBS_ENABLE_INCLUSION_PATH@ #ifndef DATACRUMBS_ENABLE_INCLUSION_PATH diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 8653cdd4..3f0eb4ee 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -1,465 +1,693 @@ function(print_all_variables) - message(STATUS "CMake Variables:") - get_cmake_property(_variableNames VARIABLES) - list(SORT _variableNames) + message(STATUS "CMake Variables:") + get_cmake_property(_variableNames VARIABLES) + list(SORT _variableNames) - foreach(_variableName ${_variableNames}) - message(STATUS "${_variableName}=${${_variableName}}") - endforeach() + foreach(_variableName ${_variableNames}) + message(STATUS "${_variableName}=${${_variableName}}") + endforeach() endfunction() macro(include_dependencies) - # ------------------------------------------------------------------------------ - # Find all dependencies - # ------------------------------------------------------------------------------ - set(DEPENDENCY_LIBRARY_DIRS "") - set(DEPENDENCY_LIB ${CMAKE_EXE_LINKER_FLAGS} $ENV{LDFLAGS} -lpthread) - - message(STATUS "[${UPPER_PROJECT_NAME}] Detecting dependencies") - - # find packages - find_package(PkgConfig REQUIRED) - pkg_check_modules(LIBBPF libbpf) - find_package(yaml-cpp REQUIRED) - find_package(LLVM REQUIRED CONFIG COMPONENTS Clang) - find_package(json-c REQUIRED) - find_package(ZLIB REQUIRED) - find_package(MPI REQUIRED COMPONENTS CXX QUIET) - - # all validator - if(LIBBPF_VERSION VERSION_LESS "1.0.0") - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] libbpf version 1.0.0 or newer is required, but found ${LIBBPF_VERSION}") - endif() - - # include all links - if(LIBBPF_FOUND) - include_directories(${LIBBPF_INCLUDEDIR}) - link_directories(${LIBBPF_LIBRARY_DIRS}) - - # If LIBBPF_LIBRARY_DIRS is not set, try LIBBPF_LIBDIR, else get parent dir of LIBBPF_LINK_LIBRARIES - if(NOT LIBBPF_LIBRARY_DIRS) - if(LIBBPF_LIBDIR) - set(LIBBPF_LIBRARY_DIRS "${LIBBPF_LIBDIR}") - elseif(LIBBPF_LINK_LIBRARIES) - get_filename_component(_LIBBPF_LIB_PARENT "${LIBBPF_LINK_LIBRARIES}" DIRECTORY) - set(LIBBPF_LIBRARY_DIRS "${_LIBBPF_LIB_PARENT}") - endif() - endif() - - list(APPEND DEPENDENCY_LIBRARY_DIRS ${LIBBPF_LIBRARY_DIRS}) - set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -L${LIBBPF_LIBRARY_DIRS} -lbpf -lelf) - else() - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] libbpf not found!") + # ------------------------------------------------------------------------------ + # Find all dependencies + # ------------------------------------------------------------------------------ + set(DEPENDENCY_LIBRARY_DIRS "") + set(DEPENDENCY_LIB ${CMAKE_EXE_LINKER_FLAGS} $ENV{LDFLAGS} -lpthread) + + message(STATUS "[${UPPER_PROJECT_NAME}] Detecting dependencies") + + # find packages + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBBPF libbpf) + find_package(yaml-cpp REQUIRED) + find_package(LLVM REQUIRED CONFIG COMPONENTS Clang) + find_package(json-c REQUIRED) + find_package(ZLIB REQUIRED) + find_package( + MPI REQUIRED + COMPONENTS CXX + QUIET + ) + + # all validator + if(LIBBPF_VERSION VERSION_LESS "1.0.0") + message( + FATAL_ERROR + "[${UPPER_PROJECT_NAME}] libbpf version 1.0.0 or newer is required, but found ${LIBBPF_VERSION}" + ) + endif() + + set(PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH}) + + # include all links + if(LIBBPF_FOUND) + include_directories(${LIBBPF_INCLUDEDIR}) + link_directories(${LIBBPF_LIBRARY_DIRS}) + + # If LIBBPF_LIBRARY_DIRS is not set, try LIBBPF_LIBDIR, else get parent dir of + # LIBBPF_LINK_LIBRARIES + if(NOT LIBBPF_LIBRARY_DIRS) + if(LIBBPF_LIBDIR) + set(LIBBPF_LIBRARY_DIRS "${LIBBPF_LIBDIR}") + elseif(LIBBPF_LINK_LIBRARIES) + get_filename_component(_LIBBPF_LIB_PARENT "${LIBBPF_LINK_LIBRARIES}" DIRECTORY) + set(LIBBPF_LIBRARY_DIRS "${_LIBBPF_LIB_PARENT}") + endif() endif() - if(${yaml-cpp_FOUND}) - get_filename_component(YAML_CPP_INCLUDE_DIR "${YAML_CPP_INCLUDE_DIR}" ABSOLUTE) - include_directories(${YAML_CPP_INCLUDE_DIR}) + list(APPEND DEPENDENCY_LIBRARY_DIRS ${LIBBPF_LIBRARY_DIRS}) + set(DEPENDENCY_LIB + ${DEPENDENCY_LIB} + -L${LIBBPF_LIBRARY_DIRS} + -lbpf + -lelf + ) + else() + message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] libbpf not found!") + endif() - if(NOT DEFINED YAML_CPP_LIBRARY_DIR) - get_filename_component(YAML_CPP_LIBRARY_DIR "${YAML_CPP_CMAKE_DIR}/../../" ABSOLUTE) - get_filename_component(YAML_CPP_LIBRARY_DIR "${YAML_CPP_LIBRARY_DIR}" ABSOLUTE) - endif() + if(${yaml-cpp_FOUND}) + get_filename_component(YAML_CPP_INCLUDE_DIR "${YAML_CPP_INCLUDE_DIR}" ABSOLUTE) + include_directories(${YAML_CPP_INCLUDE_DIR}) - list(APPEND DEPENDENCY_LIBRARY_DIRS ${YAML_CPP_LIBRARY_DIR}) - set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -L${YAML_CPP_LIBRARY_DIR} -lyaml-cpp) - else() - message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] yaml-cpp is needed for ${PROJECT_NAME} build") + if(NOT DEFINED YAML_CPP_LIBRARY_DIR) + get_filename_component(YAML_CPP_LIBRARY_DIR "${YAML_CPP_CMAKE_DIR}/../../" ABSOLUTE) + get_filename_component(YAML_CPP_LIBRARY_DIR "${YAML_CPP_LIBRARY_DIR}" ABSOLUTE) endif() - if(LLVM_FOUND) - include_directories(${LLVM_INCLUDE_DIRS}) - link_directories(${LLVM_LIBRARY_DIRS}) - set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${LLVM_LIBRARIES} -lclang) - set(CLANG_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/clang) - - if(NOT EXISTS ${CLANG_EXECUTABLE}) - message(FATAL_ERROR "clang executable not found at ${CLANG_EXECUTABLE}. Please check your LLVM installation.") - else() - execute_process( - COMMAND ${CLANG_EXECUTABLE} --version - OUTPUT_VARIABLE CLANG_VERSION_OUTPUT - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_QUIET - COMMAND_ECHO NONE - ) - - # message(STATUS "[${UPPER_PROJECT_NAME}] Found clang executable: ${CLANG_EXECUTABLE}") - # message(STATUS "[${UPPER_PROJECT_NAME}] clang version: ${CLANG_VERSION_OUTPUT}") - endif() + list(APPEND DEPENDENCY_LIBRARY_DIRS ${YAML_CPP_LIBRARY_DIR}) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -L${YAML_CPP_LIBRARY_DIR} -lyaml-cpp) + else() + message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] yaml-cpp is needed for ${PROJECT_NAME} build") + endif() + + if(LLVM_FOUND) + include_directories(${LLVM_INCLUDE_DIRS}) + link_directories(${LLVM_LIBRARY_DIRS}) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${LLVM_LIBRARIES} -lclang) + set(CLANG_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/clang) + + if(NOT EXISTS ${CLANG_EXECUTABLE}) + message( + FATAL_ERROR + "clang executable not found at ${CLANG_EXECUTABLE}. Please check your LLVM installation." + ) else() - message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] LLVM is needed for ${PROJECT_NAME} build") - endif() - - if(json-c_FOUND) - get_filename_component(json-c_INCLUDE_DIR "${json-c_DIR}/../../../include" ABSOLUTE) - get_filename_component(json-c_LIBRARY_DIR "${json-c_DIR}/../../" ABSOLUTE) - include_directories(json-c::json-c) - list(APPEND DEPENDENCY_LIBRARY_DIRS ${json-c_LIBRARY_DIR}) - set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -ljson-c) - else() - message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] json-c is needed for ${PROJECT_NAME} build") - endif() + execute_process( + COMMAND ${CLANG_EXECUTABLE} --version + OUTPUT_VARIABLE CLANG_VERSION_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + COMMAND_ECHO + NONE + ) - if(ZLIB_FOUND) - include_directories(${ZLIB_INCLUDE_DIRS}) - get_filename_component(ZLIB_LIBRARY_DIRS "${ZLIB_LIBRARIES}/../" ABSOLUTE) - list(APPEND DEPENDENCY_LIBRARY_DIRS ${ZLIB_LIBRARY_DIRS}) - set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ZLIB::ZLIB) - else() - message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] zlib is needed for ${PROJECT_NAME} build") + # message(STATUS "[${UPPER_PROJECT_NAME}] Found clang executable: ${CLANG_EXECUTABLE}") + # message(STATUS "[${UPPER_PROJECT_NAME}] clang version: ${CLANG_VERSION_OUTPUT}") endif() + else() + message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] LLVM is needed for ${PROJECT_NAME} build") + endif() + + if(json-c_FOUND) + get_filename_component(json-c_INCLUDE_DIR "${json-c_DIR}/../../../include" ABSOLUTE) + get_filename_component(json-c_LIBRARY_DIR "${json-c_DIR}/../../" ABSOLUTE) + include_directories(${json-c_INCLUDE_DIR}) + list(APPEND DEPENDENCY_LIBRARY_DIRS ${json-c_LIBRARY_DIR}) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -ljson-c) + else() + message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] json-c is needed for ${PROJECT_NAME} build") + endif() + + if(ZLIB_FOUND) + include_directories(${ZLIB_INCLUDE_DIRS}) + get_filename_component(ZLIB_LIBRARY_DIRS "${ZLIB_LIBRARIES}/../" ABSOLUTE) + list(APPEND DEPENDENCY_LIBRARY_DIRS ${ZLIB_LIBRARY_DIRS}) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -lz) + else() + message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] zlib is needed for ${PROJECT_NAME} build") + endif() + + if(${MPI_CXX_FOUND}) + # MPI_CXX_FOUND MPI_CXX_VERSION MPI_CXX_INCLUDE_DIRS MPI_CXX_LIBRARIES + get_filename_component(MPI_CXX_INCLUDE_DIRS "${MPI_CXX_INCLUDE_DIRS}" ABSOLUTE) + include_directories(${MPI_CXX_INCLUDE_DIRS}) + + if(NOT DEFINED MPI_CXX_LIBRARY_DIR) + if(MPI_CXX_LIBRARIES) + # If MPI_CXX_LIBRARIES is a list, get parent dir of each library + set(MPI_CXX_LIBRARY_DIR "") + + foreach(_lib ${MPI_CXX_LIBRARIES}) + get_filename_component(_lib_dir "${_lib}" DIRECTORY) + get_filename_component(_lib_dir "${_lib_dir}" ABSOLUTE) + list(APPEND MPI_CXX_LIBRARY_DIR "${_lib_dir}") + endforeach() - if(${MPI_CXX_FOUND}) - # MPI_CXX_FOUND MPI_CXX_VERSION MPI_CXX_INCLUDE_DIRS MPI_CXX_LIBRARIES - get_filename_component(MPI_CXX_INCLUDE_DIRS "${MPI_CXX_INCLUDE_DIRS}" ABSOLUTE) - include_directories(${MPI_CXX_INCLUDE_DIRS}) - - if(NOT DEFINED MPI_CXX_LIBRARY_DIR) - if(MPI_CXX_LIBRARIES) - # If MPI_CXX_LIBRARIES is a list, get parent dir of each library - set(MPI_CXX_LIBRARY_DIR "") - foreach(_lib ${MPI_CXX_LIBRARIES}) - get_filename_component(_lib_dir "${_lib}" DIRECTORY) - get_filename_component(_lib_dir "${_lib_dir}" ABSOLUTE) - list(APPEND MPI_CXX_LIBRARY_DIR "${_lib_dir}") - endforeach() - list(REMOVE_DUPLICATES MPI_CXX_LIBRARY_DIR) - else() - get_filename_component(MPI_CXX_LIBRARY_DIR "${MPI_CXX_LIBRARIES}" DIRECTORY) - set(MPI_CXX_LIBRARY_DIR "${MPI_CXX_LIBRARY_DIR}") - endif() - endif() - - list(APPEND DEPENDENCY_LIBRARY_DIRS ${MPI_CXX_LIBRARY_DIR}) - set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -L${MPI_CXX_LIBRARY_DIR} ${MPI_CXX_LIBRARIES}) - else() - message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] mpi is needed for ${PROJECT_NAME} build") + list(REMOVE_DUPLICATES MPI_CXX_LIBRARY_DIR) + else() + get_filename_component(MPI_CXX_LIBRARY_DIR "${MPI_CXX_LIBRARIES}" DIRECTORY) + set(MPI_CXX_LIBRARY_DIR "${MPI_CXX_LIBRARY_DIR}") + endif() endif() - list(APPEND DEPENDENCY_LIBRARY_DIRS ${DATACRUMBS_INSTALL_LIB_DIR}) - list(REMOVE_DUPLICATES DEPENDENCY_LIBRARY_DIRS) - - # print found packages - message(STATUS " - Found libbpf:${LIBBPF_VERSION} at include:${LIBBPF_INCLUDEDIR} lib:${LIBBPF_LIBRARY_DIRS}") - message(STATUS " - Found yaml-cpp:${yaml-cpp_VERSION} at include:${YAML_CPP_INCLUDE_DIR} lib:${YAML_CPP_LIBRARY_DIR}") - message(STATUS " - Found llvm:${LLVM_VERSION} at include:${LLVM_INCLUDE_DIRS} lib:${LLVM_LIBRARY_DIRS} clang:${CLANG_EXECUTABLE}") - message(STATUS " - Found json-c:${json-c_CONSIDERED_VERSIONS} at include:${json-c_INCLUDE_DIR} lib:${json-c_LIBRARY_DIR}") - message(STATUS " - Found zlib:${ZLIB_VERSION} at include:${ZLIB_INCLUDE_DIRS} lib:${ZLIB_LIBRARY_DIRS}") - message(STATUS " - Found mpi:${MPI_CXX_VERSION} at include:${MPI_CXX_INCLUDE_DIRS} lib:${MPI_CXX_LIBRARY_DIR}") - message(STATUS " - DEPENDENCY_LIBRARY_DIRS for RPATH:${DEPENDENCY_LIBRARY_DIRS}") - message(STATUS " - DEPENDENCY_LIB for linking :${DEPENDENCY_LIB}") - string(REPLACE ";" ":" DEPENDENCY_LIBRARY_DIRS_COLON "${DEPENDENCY_LIBRARY_DIRS}") - set(CMAKE_INSTALL_RPATH "${DEPENDENCY_LIBRARY_DIRS}") - set(CMAKE_BUILD_RPATH "${DEPENDENCY_LIBRARY_DIRS}") - # print_all_variables() + list(APPEND DEPENDENCY_LIBRARY_DIRS ${MPI_CXX_LIBRARY_DIR}) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -L${MPI_CXX_LIBRARY_DIR} ${MPI_CXX_LIBRARIES}) + else() + message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] mpi is needed for ${PROJECT_NAME} build") + endif() + + list(APPEND DEPENDENCY_LIBRARY_DIRS ${DATACRUMBS_INSTALL_LIB_DIR}) + list(REMOVE_DUPLICATES DEPENDENCY_LIBRARY_DIRS) + + # print found packages + message( + STATUS + " - Found libbpf:${LIBBPF_VERSION} at include:${LIBBPF_INCLUDEDIR} lib:${LIBBPF_LIBRARY_DIRS}" + ) + message( + STATUS + " - Found yaml-cpp:${yaml-cpp_VERSION} at include:${YAML_CPP_INCLUDE_DIR} lib:${YAML_CPP_LIBRARY_DIR}" + ) + message( + STATUS + " - Found llvm:${LLVM_VERSION} at include:${LLVM_INCLUDE_DIRS} lib:${LLVM_LIBRARY_DIRS} clang:${CLANG_EXECUTABLE}" + ) + message( + STATUS + " - Found json-c:${json-c_CONSIDERED_VERSIONS} at include:${json-c_INCLUDE_DIR} lib:${json-c_LIBRARY_DIR}" + ) + message( + STATUS + " - Found zlib:${ZLIB_VERSION} at include:${ZLIB_INCLUDE_DIRS} lib:${ZLIB_LIBRARY_DIRS}" + ) + message( + STATUS + " - Found mpi:${MPI_CXX_VERSION} at include:${MPI_CXX_INCLUDE_DIRS} lib:${MPI_CXX_LIBRARY_DIR}" + ) + message(STATUS " - DEPENDENCY_LIBRARY_DIRS for RPATH:${DEPENDENCY_LIBRARY_DIRS}") + message(STATUS " - DEPENDENCY_LIB for linking :${DEPENDENCY_LIB}") + string( + REPLACE ";" + ":" + DEPENDENCY_LIBRARY_DIRS_COLON + "${DEPENDENCY_LIBRARY_DIRS}" + ) + set(CMAKE_INSTALL_RPATH "${DEPENDENCY_LIBRARY_DIRS}") + set(CMAKE_BUILD_RPATH "${DEPENDENCY_LIBRARY_DIRS}") + + # print_all_variables() endmacro(include_dependencies) macro(derive_configurations) - if(DATACRUMBS_BPFTIME_COMPATIBLE) - set(DATACRUMBS_BPFTIME_COMPATIBLE_FLAG 1) - else() - set(DATACRUMBS_BPFTIME_COMPATIBLE_FLAG 0) - endif() - - if(DATACRUMBS_LOG_LEVEL_STR STREQUAL "ERROR") - set(DATACRUMBS_LOG_LEVEL 1) - elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "WARN") - set(DATACRUMBS_LOG_LEVEL 2) - elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "INFO") - set(DATACRUMBS_LOG_LEVEL 3) - elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "DEBUG") - set(DATACRUMBS_LOG_LEVEL 4) - elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "TRACE") - set(DATACRUMBS_LOG_LEVEL 5) - endif() - - if(DATACRUMBS_MODE_STR AND DATACRUMBS_MODE_STR STREQUAL "TRACE") - set(DATACRUMBS_MODE 1) - else() - set(DATACRUMBS_MODE 2) - endif() - - if(DATACRUMBS_TRACE_ALL_PROCESSES_OPT AND DATACRUMBS_TRACE_ALL_PROCESSES_OPT STREQUAL "ON") - set(DATACRUMBS_TRACE_ALL_PROCESSES 1) - else() - set(DATACRUMBS_TRACE_ALL_PROCESSES 0) - endif() - - option(BPFTOOL_EXECUTABLE "Path to bpftool executable" "") - - if(BPFTOOL_EXECUTABLE STREQUAL "NONE") - set(BPFTOOL_EXECUTABLE "") - endif() - - if(NOT DATACRUMBS_SKIP_PROBE_EXPLORING) - set(ENABLE_PROBE_EXPLORER 1) - else() - set(ENABLE_PROBE_EXPLORER 0) - endif() - - if(NOT DATACRUMBS_SKIP_PROBE_GENERATION) - set(ENABLE_PROBE_GENERATOR 1) - else() - set(ENABLE_PROBE_GENERATOR 0) - endif() - - if(DATACRUMBS_INCLUSION_PATH STREQUAL "NONE") - set(DATACRUMBS_ENABLE_INCLUSION_PATH 0) - else() - set(DATACRUMBS_ENABLE_INCLUSION_PATH 1) + if(DATACRUMBS_BPFTIME_COMPATIBLE) + set(DATACRUMBS_BPFTIME_COMPATIBLE_FLAG 1) + else() + set(DATACRUMBS_BPFTIME_COMPATIBLE_FLAG 0) + endif() + + if(DATACRUMBS_LOG_LEVEL_STR STREQUAL "ERROR") + set(DATACRUMBS_LOG_LEVEL 1) + elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "WARN") + set(DATACRUMBS_LOG_LEVEL 2) + elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "INFO") + set(DATACRUMBS_LOG_LEVEL 3) + elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "DEBUG") + set(DATACRUMBS_LOG_LEVEL 4) + elseif(DATACRUMBS_LOG_LEVEL_STR STREQUAL "TRACE") + set(DATACRUMBS_LOG_LEVEL 5) + endif() + + if(DATACRUMBS_MODE_STR AND DATACRUMBS_MODE_STR STREQUAL "TRACE") + set(DATACRUMBS_MODE 1) + else() + set(DATACRUMBS_MODE 2) + endif() + + if(DATACRUMBS_TRACE_ALL_PROCESSES_OPT AND DATACRUMBS_TRACE_ALL_PROCESSES_OPT STREQUAL "ON") + set(DATACRUMBS_TRACE_ALL_PROCESSES 1) + else() + set(DATACRUMBS_TRACE_ALL_PROCESSES 0) + endif() + + option(BPFTOOL_EXECUTABLE "Path to bpftool executable" "") + + if(BPFTOOL_EXECUTABLE STREQUAL "NONE") + set(BPFTOOL_EXECUTABLE "") + endif() + + if(NOT DATACRUMBS_SKIP_PROBE_EXPLORING) + set(ENABLE_PROBE_EXPLORER 1) + else() + set(ENABLE_PROBE_EXPLORER 0) + endif() + + if(NOT DATACRUMBS_SKIP_PROBE_GENERATION) + set(ENABLE_PROBE_GENERATOR 1) + else() + set(ENABLE_PROBE_GENERATOR 0) + endif() + + if(DATACRUMBS_INCLUSION_PATH STREQUAL "NONE") + set(DATACRUMBS_ENABLE_INCLUSION_PATH 0) + else() + set(DATACRUMBS_ENABLE_INCLUSION_PATH 1) + endif() + + if(DATACRUMBS_BPF_PRINT_ENABLE) + set(DATACRUMBS_BPF_PRINT_ENABLE_FLAG 1) + else() + set(DATACRUMBS_BPF_PRINT_ENABLE_FLAG 0) + endif() + + set(DATACRUMBS_SRC_GEN_PATH ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}) + set(DATACRUMBS_VARS + --user + ${DATACRUMBS_USER} + --config_path + ${CMAKE_CONFIG_OUTPUT_DIRECTORY} + --data_dir + ${CMAKE_DATA_OUTPUT_DIRECTORY} + --trace_log_dir + ${CMAKE_BINARY_DIR}/logs + ) + + if(NOT + DATACRUMBS_INCLUSION_PATH + STREQUAL + "NONE" + ) + set(DATACRUMBS_VARS ${DATACRUMBS_VARS} --inclusion_path ${DATACRUMBS_INCLUSION_PATH}) + endif() + + set(DATACRUMBS_BUILD_CLIENT_SO ${DATACRUMBS_INSTALL_LIB_DIR}/libdatacrumbs_client.so) + + set(DATACRUMBS_CONFIG_PATH ${CMAKE_CONFIG_OUTPUT_DIRECTORY}) + set(DATACRUMBS_DATA_DIR ${CMAKE_DATA_OUTPUT_DIRECTORY}) + set(DATACRUMBS_LOG_DIR ${CMAKE_BINARY_DIR}/logs) + file(MAKE_DIRECTORY ${DATACRUMBS_LOG_DIR}) + + if(DATACRUMBS_ENABLE_OPT AND DATACRUMBS_ENABLE_OPT STREQUAL "ON") + set(DATACRUMBS_ENABLE 1) + else() + set(DATACRUMBS_ENABLE 0) + endif() + + set(DATACRUMBS_PROJECT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + + # Detect system kernel version: major, minor, patch + execute_process( + COMMAND uname -r + OUTPUT_VARIABLE DATACRUMBS_KERNEL_UNAME_R + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # Split kernel version string (e.g., "6.5.0-101-generic") into major, minor, patch + string( + REGEX MATCH + "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" + KERNEL_VERSION_MATCH + "${DATACRUMBS_KERNEL_UNAME_R}" + ) + + if(KERNEL_VERSION_MATCH) + string( + REGEX + REPLACE "^([0-9]+)\\..*" + "\\1" + KERNEL_VERSION_MAJOR + "${DATACRUMBS_KERNEL_UNAME_R}" + ) + string( + REGEX + REPLACE "^[0-9]+\\.([0-9]+)\\..*" + "\\1" + KERNEL_VERSION_MINOR + "${DATACRUMBS_KERNEL_UNAME_R}" + ) + string( + REGEX + REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" + "\\1" + KERNEL_VERSION_PATCH + "${DATACRUMBS_KERNEL_UNAME_R}" + ) + else() + set(KERNEL_VERSION_MAJOR "0") + set(KERNEL_VERSION_MINOR "0") + set(KERNEL_VERSION_PATCH "0") + endif() + + set(DATACRUMBS_CMAKE_KERNEL_VERSION + "(${KERNEL_VERSION_MAJOR}, ${KERNEL_VERSION_MINOR}, ${KERNEL_VERSION_PATCH})" + ) + + # Set Scheduler options Check if scheduler configuration is complete + if((DATACRUMBS_SCHEDULER_JOBID_ENV_VAR STREQUAL "NONE" + OR DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE" + OR DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE" + OR DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE" + ) + AND DATACRUMBS_LAUNCHER_TYPE STREQUAL "NONE" + ) + message( + FATAL_ERROR + "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_LAUNCHER_TYPE, or set all of the following variables: DATACRUMBS_SCHEDULER_ALLOC_CMD, DATACRUMBS_SCHEDULER_JOBID_ENV_VAR, DATACRUMBS_SCHEDULER_NODES_CMD_OPT, DATACRUMBS_SCHEDULER_PPN_CMD_OPT, DATACRUMBS_SCHEDULER_RUN_CMD" + ) + endif() + + if(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR STREQUAL "NONE") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") endif() - - if(DATACRUMBS_BPF_PRINT_ENABLE) - set(DATACRUMBS_BPF_PRINT_ENABLE_FLAG 1) - else() - set(DATACRUMBS_BPF_PRINT_ENABLE_FLAG 0) + endif() + + if(DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") endif() - - set(DATACRUMBS_SRC_GEN_PATH ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}) - set(DATACRUMBS_VARS --user ${DATACRUMBS_USER} --config_path ${CMAKE_CONFIG_OUTPUT_DIRECTORY} --data_dir ${CMAKE_DATA_OUTPUT_DIRECTORY} --trace_log_dir ${CMAKE_BINARY_DIR}/logs) - - if(NOT DATACRUMBS_INCLUSION_PATH STREQUAL "NONE") - set(DATACRUMBS_VARS ${DATACRUMBS_VARS} --inclusion_path ${DATACRUMBS_INCLUSION_PATH}) + endif() + + if(DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") endif() - - set(DATACRUMBS_BUILD_CLIENT_SO ${DATACRUMBS_INSTALL_LIB_DIR}/libdatacrumbs_client.so) - - set(DATACRUMBS_CONFIG_PATH ${CMAKE_CONFIG_OUTPUT_DIRECTORY}) - set(DATACRUMBS_DATA_DIR ${CMAKE_DATA_OUTPUT_DIRECTORY}) - set(DATACRUMBS_LOG_DIR ${CMAKE_BINARY_DIR}/logs) - file(MAKE_DIRECTORY ${DATACRUMBS_LOG_DIR}) - - if(DATACRUMBS_ENABLE_OPT AND DATACRUMBS_ENABLE_OPT STREQUAL "ON") - set(DATACRUMBS_ENABLE 1) - else() - set(DATACRUMBS_ENABLE 0) + endif() + + if(DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") endif() + endif() - set(DATACRUMBS_PROJECT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) - - # Detect system kernel version: major, minor, patch - execute_process( - COMMAND uname -r - OUTPUT_VARIABLE DATACRUMBS_KERNEL_UNAME_R - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - # Split kernel version string (e.g., "6.5.0-101-generic") into major, minor, patch - string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" KERNEL_VERSION_MATCH "${DATACRUMBS_KERNEL_UNAME_R}") - - if(KERNEL_VERSION_MATCH) - string(REGEX REPLACE "^([0-9]+)\\..*" "\\1" KERNEL_VERSION_MAJOR "${DATACRUMBS_KERNEL_UNAME_R}") - string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\..*" "\\1" KERNEL_VERSION_MINOR "${DATACRUMBS_KERNEL_UNAME_R}") - string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" KERNEL_VERSION_PATCH "${DATACRUMBS_KERNEL_UNAME_R}") - else() - set(KERNEL_VERSION_MAJOR "0") - set(KERNEL_VERSION_MINOR "0") - set(KERNEL_VERSION_PATCH "0") - endif() - - set(DATACRUMBS_CMAKE_KERNEL_VERSION "(${KERNEL_VERSION_MAJOR}, ${KERNEL_VERSION_MINOR}, ${KERNEL_VERSION_PATCH})") endmacro(derive_configurations) macro(find_system_details) - message(STATUS "[${UPPER_PROJECT_NAME}] Detecting system details") - - find_library(LIBC_SO NAMES libc.so.6 libc.so PATHS /lib /usr/lib /lib64 /usr/lib64 /usr/local/lib /usr/local/lib64 /usr/lib/x86_64-linux-gnu NO_DEFAULT_PATH) - - if(LIBC_SO) - message(STATUS " - Found libc: ${LIBC_SO}") - set(DATACRUMBS_LIBC_SO ${LIBC_SO}) - else() - message(FATAL_ERROR " - libc.so not found!") - endif() - - if(DATACRUMBS_HOST STREQUAL "NONE") - # Get the system hostname - execute_process( - COMMAND hostname - OUTPUT_VARIABLE RAW_HOSTNAME - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - # Remove all numbers from the hostname - string(REGEX REPLACE "[0-9]" "" DATACRUMBS_HOST "${RAW_HOSTNAME}") - message(STATUS " - Derived hostname: ${DATACRUMBS_HOST}") - else() - message(STATUS " - Using provided hostname: ${DATACRUMBS_HOST}") - endif() - - # Generate vmlinux.h using bpftool before building datacrumbs_bpf - if(BPFTOOL_EXECUTABLE AND NOT BPFTOOL_EXECUTABLE STREQUAL "NONE") - message(STATUS " - Using provided bpftool executable: ${BPFTOOL_EXECUTABLE}") - else() - find_program(BPFTOOL_EXECUTABLE_SEARCH bpftool PATHS /usr/sbin/ /usr/bin/ /usr/local/bin/ /usr/local/sbin/) - set(BPFTOOL_EXECUTABLE ${BPFTOOL_EXECUTABLE_SEARCH}) + message(STATUS "[${UPPER_PROJECT_NAME}] Detecting system details") + + find_library( + LIBC_SO + NAMES libc.so.6 libc.so + PATHS /lib + /usr/lib + /lib64 + /usr/lib64 + /usr/local/lib + /usr/local/lib64 + /usr/lib/x86_64-linux-gnu + NO_DEFAULT_PATH + ) + + if(LIBC_SO) + message(STATUS " - Found libc: ${LIBC_SO}") + set(DATACRUMBS_LIBC_SO ${LIBC_SO}) + else() + message(FATAL_ERROR " - libc.so not found!") + endif() + + if(DATACRUMBS_HOST STREQUAL "NONE") + # Get the system hostname + execute_process( + COMMAND hostname + OUTPUT_VARIABLE RAW_HOSTNAME + OUTPUT_STRIP_TRAILING_WHITESPACE + ) - if(NOT BPFTOOL_EXECUTABLE) - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] bpftool executable not found! Please install bpftool or specify its path via BPFTOOL_EXECUTABLE.") - endif() + # Remove all numbers from the hostname + string( + REGEX + REPLACE "[0-9]" + "" + DATACRUMBS_HOST + "${RAW_HOSTNAME}" + ) + message(STATUS " - Derived hostname: ${DATACRUMBS_HOST}") + else() + message(STATUS " - Using provided hostname: ${DATACRUMBS_HOST}") + endif() + + # Generate vmlinux.h using bpftool before building datacrumbs_bpf + if(BPFTOOL_EXECUTABLE + AND NOT + BPFTOOL_EXECUTABLE + STREQUAL + "NONE" + ) + message(STATUS " - Using provided bpftool executable: ${BPFTOOL_EXECUTABLE}") + else() + find_program( + BPFTOOL_EXECUTABLE_SEARCH bpftool + PATHS /usr/sbin/ + /usr/bin/ + /usr/local/bin/ + /usr/local/sbin/ + ) + set(BPFTOOL_EXECUTABLE ${BPFTOOL_EXECUTABLE_SEARCH}) - message(STATUS " - Found bpftool executable: ${BPFTOOL_EXECUTABLE}") + if(NOT BPFTOOL_EXECUTABLE) + message( + FATAL_ERROR + "[${UPPER_PROJECT_NAME}] bpftool executable not found! Please install bpftool or specify its path via BPFTOOL_EXECUTABLE." + ) endif() - find_file(VMLINUX_BTF_PATH vmlinux PATHS /sys/kernel/btf NO_DEFAULT_PATH) + message(STATUS " - Found bpftool executable: ${BPFTOOL_EXECUTABLE}") + endif() - if(NOT VMLINUX_BTF_PATH) - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] vmlinux BTF file not found in /sys/kernel/btf. Please ensure your kernel provides BTF information at /sys/kernel/btf/vmlinux.") - else() - message(STATUS " - Found vmlinux BTF file at: ${VMLINUX_BTF_PATH}") - endif() + find_file( + VMLINUX_BTF_PATH vmlinux + PATHS /sys/kernel/btf + NO_DEFAULT_PATH + ) - if(CMAKE_SYSTEM_PROCESSOR) - set(DATACRUMBS_ARCH "${CMAKE_SYSTEM_PROCESSOR}") - elseif(DEFINED ENV{ARCH}) - set(DATACRUMBS_ARCH "$ENV{ARCH}") - else() - execute_process( - COMMAND uname -m - OUTPUT_VARIABLE DATACRUMBS_ARCH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endif() + if(NOT VMLINUX_BTF_PATH) + message( + FATAL_ERROR + "[${UPPER_PROJECT_NAME}] vmlinux BTF file not found in /sys/kernel/btf. Please ensure your kernel provides BTF information at /sys/kernel/btf/vmlinux." + ) + else() + message(STATUS " - Found vmlinux BTF file at: ${VMLINUX_BTF_PATH}") + endif() + + if(CMAKE_SYSTEM_PROCESSOR) + set(DATACRUMBS_ARCH "${CMAKE_SYSTEM_PROCESSOR}") + elseif(DEFINED ENV{ARCH}) + set(DATACRUMBS_ARCH "$ENV{ARCH}") + else() + execute_process( + COMMAND uname -m + OUTPUT_VARIABLE DATACRUMBS_ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endif() + + if(DATACRUMBS_KERNEL_VERSION + AND NOT + DATACRUMBS_KERNEL_VERSION + STREQUAL + "" + ) + set(DATACRUMBS_KERNEL_VERSION "${DATACRUMBS_KERNEL_VERSION}") + else() + set(DATACRUMBS_KERNEL_VERSION + "${KERNEL_VERSION_MAJOR}.${KERNEL_VERSION_MINOR}.${KERNEL_VERSION_PATCH}" + ) + endif() - if(DATACRUMBS_KERNEL_VERSION AND NOT DATACRUMBS_KERNEL_VERSION STREQUAL "") - set(DATACRUMBS_KERNEL_VERSION "${DATACRUMBS_KERNEL_VERSION}") - else() - set(DATACRUMBS_KERNEL_VERSION "${KERNEL_VERSION_MAJOR}.${KERNEL_VERSION_MINOR}.${KERNEL_VERSION_PATCH}") - endif() + # Detect kernel headers path if not set or empty + if(NOT DEFINED DATACRUMBS_KERNEL_HEADERS_PATH OR DATACRUMBS_KERNEL_HEADERS_PATH STREQUAL "") + set(_kernel_headers_candidates "/usr/src/${DATACRUMBS_KERNEL_UNAME_R}" + "/usr/src/kernels/${DATACRUMBS_KERNEL_UNAME_R}" + ) + set(DATACRUMBS_KERNEL_HEADERS_PATH "") - # Detect kernel headers path if not set or empty - if(NOT DEFINED DATACRUMBS_KERNEL_HEADERS_PATH OR DATACRUMBS_KERNEL_HEADERS_PATH STREQUAL "") - set(_kernel_headers_candidates - "/usr/src/${DATACRUMBS_KERNEL_UNAME_R}" - "/usr/src/kernels/${DATACRUMBS_KERNEL_UNAME_R}" - ) - set(DATACRUMBS_KERNEL_HEADERS_PATH "") - - foreach(_candidate ${_kernel_headers_candidates}) - if(EXISTS "${_candidate}") - set(DATACRUMBS_KERNEL_HEADERS_PATH "${_candidate}") - break() - endif() - endforeach() + foreach(_candidate ${_kernel_headers_candidates}) + if(EXISTS "${_candidate}") + set(DATACRUMBS_KERNEL_HEADERS_PATH "${_candidate}") + break() + endif() + endforeach() - if(DATACRUMBS_KERNEL_HEADERS_PATH STREQUAL "") - message(WARNING "[${UPPER_PROJECT_NAME}] Kernel headers not found for ${DATACRUMBS_UNAME_R} in /usr/src or /usr/src/kernels.") - endif() + if(DATACRUMBS_KERNEL_HEADERS_PATH STREQUAL "") + message( + WARNING + "[${UPPER_PROJECT_NAME}] Kernel headers not found for ${DATACRUMBS_UNAME_R} in /usr/src or /usr/src/kernels." + ) endif() + endif() - # Normalize architecture names - if(DATACRUMBS_ARCH STREQUAL "x86_64") - set(DATACRUMBS_ARCH "x86") - elseif(DATACRUMBS_ARCH STREQUAL "aarch64") - set(DATACRUMBS_ARCH "arm64") - endif() + # Normalize architecture names + if(DATACRUMBS_ARCH STREQUAL "x86_64") + set(DATACRUMBS_ARCH "x86") + elseif(DATACRUMBS_ARCH STREQUAL "aarch64") + set(DATACRUMBS_ARCH "arm64") + endif() - message(STATUS " - Detected architecture: ${DATACRUMBS_ARCH}") + message(STATUS " - Detected architecture: ${DATACRUMBS_ARCH}") endmacro(find_system_details) function(datacrumbs_composable_install_headers public_headers) - # message("-- [${PROJECT_NAME}] " "installing headers ${public_headers}") - foreach(header ${public_headers}) - file(RELATIVE_PATH header_file_path "${PROJECT_SOURCE_DIR}/src" "${header}") - get_filename_component(header_directory_path "${header_file_path}" DIRECTORY) - - # message(STATUS " - Installing header ${header} to ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_directory_path}") - # file(MAKE_DIRECTORY "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_directory_path}") - configure_file(${header} - "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_file_path}" @ONLY) - install( - FILES ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_file_path} + # message("-- [${PROJECT_NAME}] " "installing headers ${public_headers}") + foreach(header ${public_headers}) + file( + RELATIVE_PATH + header_file_path + "${PROJECT_SOURCE_DIR}/src" + "${header}" + ) + get_filename_component(header_directory_path "${header_file_path}" DIRECTORY) + + # message(STATUS " - Installing header ${header} to + # ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_directory_path}") + # file(MAKE_DIRECTORY + # "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_directory_path}") + configure_file( + ${header} "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_file_path}" @ONLY + ) + install(FILES ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/${header_file_path} DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/composable/include/${header_directory_path}" - ) - endforeach() + ) + endforeach() endfunction() function(datacrumbs_composable_install_src public_src) - # message("-- [${PROJECT_NAME}] " "installing src files ${public_src}") - foreach(src ${public_src}) - file(RELATIVE_PATH src_file_path "${PROJECT_SOURCE_DIR}/src" "${src}") - get_filename_component(src_directory_path "${src_file_path}" DIRECTORY) - install( - FILES ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/src/${src_file_path} + # message("-- [${PROJECT_NAME}] " "installing src files ${public_src}") + foreach(src ${public_src}) + file( + RELATIVE_PATH + src_file_path + "${PROJECT_SOURCE_DIR}/src" + "${src}" + ) + get_filename_component(src_directory_path "${src_file_path}" DIRECTORY) + install(FILES ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/src/${src_file_path} DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/composable/src/${src_directory_path}" - ) - configure_file(${src} - "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/src/${src_file_path}" @ONLY) - endforeach() + ) + configure_file(${src} "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/src/${src_file_path}" @ONLY) + endforeach() endfunction() macro(load_build_variables) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Single Directory for all Executables.") - set(CMAKE_INCLUDE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/include CACHE PATH "Store the headers.") - set(CMAKE_CONFIG_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/configs CACHE PATH "Store the configuration generated.") - set(CMAKE_DATA_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/data CACHE PATH "Store the data generated.") - set(EXECUTABLE_OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR} CACHE PATH "Single Directory for all Libraries") - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR} CACHE PATH "Single Directory for all static libraries.") - set(CMAKE_LIBEXEC_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/libexec/${PROJECT_NAME}) - set(CMAKE_ETC_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}) - set(CMAKE_MODULES_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/modulefiles) - set(CMAKE_FLUX_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/flux) - set(CMAKE_SYSTEMD_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/systemd) - - if(NOT DATACRUMBS_BUILD_ONLY) - # Get installation directories -- these get used in various places; - # best to just make them available - option(DATACRUMBS_LIBDIR_AS_LIB OFF) - - if(NOT DATACRUMBS_LIBDIR_AS_LIB) - include(GNUInstallDirs) - endif() - - if(NOT CMAKE_INSTALL_LIBDIR OR DATACRUMBS_LIBDIR_AS_LIB) - set(CMAKE_INSTALL_BINDIR bin) - set(CMAKE_INSTALL_SBINDIR sbin) - set(CMAKE_INSTALL_LIBDIR lib) - set(CMAKE_INSTALL_INCLUDEDIR include) - set(CMAKE_INSTALL_DOCDIR doc) - set(CMAKE_INSTALL_SYSCONFDIR etc) - set(CMAKE_INSTALL_LIBEXECDIR libexec) - set(CMAKE_INSTALL_RUNSTATEDIR run) - endif() - - set(DATACRUMBS_INSTALL_BINARYDIR - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}) - set(DATACRUMBS_INSTALL_SBINARYDIR - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SBINDIR}) - set(DATACRUMBS_LIBDIR ${CMAKE_INSTALL_LIBDIR}) - set(DATACRUMBS_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) - set(DATACRUMBS_INSTALL_INCLUDE_DIR - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) - set(DATACRUMBS_INSTALL_DOCDIR - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}) - set(DATACRUMBS_INSTALL_SYSCONFDIR - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SYSCONFDIR}/${PROJECT_NAME}) - set(DATACRUMBS_INSTALL_LIBEXEC - ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME}) - else() - set(DATACRUMBS_INSTALL_BINARYDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") - set(DATACRUMBS_INSTALL_SBINARYDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") - set(DATACRUMBS_INSTALL_LIB_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") - set(DATACRUMBS_INSTALL_INCLUDE_DIR "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}") - set(DATACRUMBS_INSTALL_DOCDIR "${CMAKE_BINARY_DIR}/doc") - set(DATACRUMBS_INSTALL_SYSCONFDIR "${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}") - set(DATACRUMBS_INSTALL_LIBEXEC ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}) - set(DATACRUMBS_RUNSTATEDIR "run") + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/bin + CACHE PATH "Single Directory for all Executables." + ) + set(CMAKE_INCLUDE_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/include + CACHE PATH "Store the headers." + ) + set(CMAKE_CONFIG_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/configs + CACHE PATH "Store the configuration generated." + ) + set(CMAKE_DATA_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/data + CACHE PATH "Store the data generated." + ) + set(EXECUTABLE_OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR} + CACHE PATH "Single Directory for all Libraries" + ) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR} + CACHE PATH "Single Directory for all static libraries." + ) + set(CMAKE_LIBEXEC_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/libexec/${PROJECT_NAME}) + set(CMAKE_ETC_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}) + set(CMAKE_MODULES_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/modulefiles) + set(CMAKE_FLUX_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/flux) + set(CMAKE_SYSTEMD_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/systemd) + + if(NOT DATACRUMBS_BUILD_ONLY) + # Get installation directories -- these get used in various places; best to just make them + # available + option(DATACRUMBS_LIBDIR_AS_LIB OFF) + + if(NOT DATACRUMBS_LIBDIR_AS_LIB) + include(GNUInstallDirs) + endif() + + if(NOT CMAKE_INSTALL_LIBDIR OR DATACRUMBS_LIBDIR_AS_LIB) + set(CMAKE_INSTALL_BINDIR bin) + set(CMAKE_INSTALL_SBINDIR sbin) + set(CMAKE_INSTALL_LIBDIR lib) + set(CMAKE_INSTALL_INCLUDEDIR include) + set(CMAKE_INSTALL_DOCDIR doc) + set(CMAKE_INSTALL_SYSCONFDIR etc) + set(CMAKE_INSTALL_LIBEXECDIR libexec) + set(CMAKE_INSTALL_RUNSTATEDIR run) endif() - set(CMAKE_INSTALL_CONFIGS_DIR configs) - set(CMAKE_INSTALL_DATA_DIR data) - set(CMAKE_INSTALL_MODULES_DIR lmod/modulefiles) - - set(DATACRUMBS_INSTALL_DATADIR ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_DATA_DIR}) - set(DATACRUMBS_INSTALL_ETC_CONFIGSDIR ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_CONFIGS_DIR}) - set(DATACRUMBS_INSTALL_ETC_MODULESDIR ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_MODULES_DIR}) - set(DATACRUMBS_INSTALL_ETC_DATADIR ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_DATA_DIR}) - set(DATACRUMBS_INSTALL_ETC_CMAKE ${DATACRUMBS_INSTALL_SYSCONFDIR}/cmake) - set(DATACRUMBS_INSTALL_ETC_SYSTEMD ${DATACRUMBS_INSTALL_SYSCONFDIR}/systemd) - set(DATACRUMBS_INSTALL_ETC_FLUX ${DATACRUMBS_INSTALL_SYSCONFDIR}/flux) + + set(DATACRUMBS_INSTALL_BINARYDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}) + set(DATACRUMBS_INSTALL_SBINARYDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SBINDIR}) + set(DATACRUMBS_LIBDIR ${CMAKE_INSTALL_LIBDIR}) + set(DATACRUMBS_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) + set(DATACRUMBS_INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) + set(DATACRUMBS_INSTALL_DOCDIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR}) + set(DATACRUMBS_INSTALL_SYSCONFDIR + ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SYSCONFDIR}/${PROJECT_NAME} + ) + set(DATACRUMBS_INSTALL_LIBEXEC + ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBEXECDIR}/${PROJECT_NAME} + ) + else() + set(DATACRUMBS_INSTALL_BINARYDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") + set(DATACRUMBS_INSTALL_SBINARYDIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") + set(DATACRUMBS_INSTALL_LIB_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + set(DATACRUMBS_INSTALL_INCLUDE_DIR "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}") + set(DATACRUMBS_INSTALL_DOCDIR "${CMAKE_BINARY_DIR}/doc") + set(DATACRUMBS_INSTALL_SYSCONFDIR "${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}") + set(DATACRUMBS_INSTALL_LIBEXEC ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}) + set(DATACRUMBS_RUNSTATEDIR "run") + endif() + set(CMAKE_INSTALL_CONFIGS_DIR configs) + set(CMAKE_INSTALL_DATA_DIR data) + set(CMAKE_INSTALL_MODULES_DIR lmod/modulefiles) + + set(DATACRUMBS_INSTALL_DATADIR ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_DATA_DIR}) + set(DATACRUMBS_INSTALL_ETC_CONFIGSDIR + ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_CONFIGS_DIR} + ) + set(DATACRUMBS_INSTALL_ETC_MODULESDIR + ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_MODULES_DIR} + ) + set(DATACRUMBS_INSTALL_ETC_DATADIR ${DATACRUMBS_INSTALL_SYSCONFDIR}/${CMAKE_INSTALL_DATA_DIR}) + set(DATACRUMBS_INSTALL_ETC_CMAKE ${DATACRUMBS_INSTALL_SYSCONFDIR}/cmake) + set(DATACRUMBS_INSTALL_ETC_SYSTEMD ${DATACRUMBS_INSTALL_SYSCONFDIR}/systemd) + set(DATACRUMBS_INSTALL_ETC_FLUX ${DATACRUMBS_INSTALL_SYSCONFDIR}/flux) + if(DATACRUMBS_CONFIGURED_RUN_DIR + AND NOT + DATACRUMBS_CONFIGURED_RUN_DIR + STREQUAL + "" + AND NOT + DATACRUMBS_CONFIGURED_RUN_DIR + STREQUAL + "NONE" + ) + set(DATACRUMBS_INSTALL_RUNSTATEDIR ${DATACRUMBS_CONFIGURED_RUN_DIR}) + else() set(DATACRUMBS_INSTALL_RUNSTATEDIR /${CMAKE_INSTALL_RUNSTATEDIR}) + endif() - # Set this at the top level of your project, before any install commands - set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY TRUE) + # Set this at the top level of your project, before any install commands + set(CMAKE_SKIP_INSTALL_ALL_DEPENDENCY TRUE) endmacro(load_build_variables) diff --git a/docs/DataCrumbs_IPDPS_26-2.pdf b/docs/DataCrumbs_IPDPS_26-2.pdf new file mode 100644 index 00000000..53e649b1 Binary files /dev/null and b/docs/DataCrumbs_IPDPS_26-2.pdf differ diff --git a/docs/_static/custom.css b/docs/_static/custom.css new file mode 100644 index 00000000..616291a5 --- /dev/null +++ b/docs/_static/custom.css @@ -0,0 +1,58 @@ +/* Bullet lists in content area only */ +.rst-content ul.simple, +.rst-content .section ul { + list-style: disc outside !important; + margin-left: 0 !important; + padding-left: 1.2em !important; + margin-bottom: 12px !important; +} + +.rst-content ul.simple li, +.rst-content .section ul li { + display: list-item !important; + list-style: disc outside !important; + margin-left: 0 !important; + margin-bottom: 0 !important; +} + +.rst-content ul.simple li p, +.rst-content .section ul li p { + margin-bottom: 0 !important; + margin-top: 0 !important; + display: inline !important; +} + +/* Numbered lists in content area only */ +.rst-content ol, +.rst-content .section ol { + list-style: decimal outside !important; + padding-left: 1.5em !important; + margin-bottom: 12px !important; + margin-left: 0 !important; +} + +.rst-content ol li, +.rst-content .section ol li { + display: list-item !important; + list-style: decimal outside !important; + margin-bottom: 0 !important; + margin-left: 0 !important; +} + +.rst-content ol li p, +.rst-content .section ol li p { + margin-bottom: 0 !important; + margin-top: 0 !important; + display: inline !important; +} + +/* Ensure navigation lists have no bullets */ +.wy-menu-vertical ul, +.wy-menu-vertical li, +nav ul, +nav li, +.toctree-l1, +.toctree-l2, +.toctree-l3 { + list-style: none !important; +} diff --git a/docs/app.rst b/docs/app.rst deleted file mode 100644 index 55e10186..00000000 --- a/docs/app.rst +++ /dev/null @@ -1,28 +0,0 @@ -Install IOR -=========== - -IOR is a parallel file system benchmarking tool. To install IOR, follow these steps: - -1. **Clone the IOR repository:** - - .. code-block:: bash - - git clone https://github.com/hpc/ior.git - cd ior - -2. **Build IOR:** - - .. code-block:: bash - - ./bootstrap - ./configure --prefix=$PREFIX - make -j - make install - -3. **(Optional) Install system-wide:** - - .. code-block:: bash - - sudo make install - -For more details, refer to the official IOR documentation: https://github.com/hpc/ior \ No newline at end of file diff --git a/docs/build.rst b/docs/build.rst old mode 100644 new mode 100755 index 105b82ac..13bab59a --- a/docs/build.rst +++ b/docs/build.rst @@ -1,37 +1,112 @@ -.. _build_instructions: +================= +Building DataCrumbs +================= -Build Instructions -================== - -This guide describes how to build and install all dependencies required for `datacrumbs`, including `bpftool` (tag v7.5.0), with all components installed under a custom prefix directory. +This comprehensive guide covers building DataCrumbs from source in various environments, including standard builds, HPC systems, Docker containers, and the Tuolumne supercomputer. It includes complete instructions for installing dependencies with custom prefix paths. Prerequisites -------------- +============= -- Git -- CMake -- GCC or Clang -- Python (for Sphinx documentation) -- Spack (recommended for dependency management) +Before building, ensure all dependencies are installed as described in the :doc:`dependencies` section. -Set the installation prefix: +Quick verification: + +.. code-block:: bash + + # Verify kernel version (5.8+ recommended) + uname -r + + # Verify BTF support + ls /sys/kernel/btf/vmlinux + + # Verify libbpf + pkg-config --modversion libbpf + + # Verify bpftool + bpftool version + +Core Requirements +----------------- + +**Build Tools:** + +* Git +* CMake (3.14+) +* GCC or Clang +* Python (for Sphinx documentation) +* Linux kernel 5.8+ with BTF support + +Obtaining the Source +==================== + +Clone the DataCrumbs repository: + +.. code-block:: bash + + git clone https://github.com/LLNL/datacrumbs.git + cd datacrumbs + export DATACRUMBS_DIR=$(realpath .) + +Standard Build Process +====================== + +Basic Build +----------- + +The simplest build uses default configuration: + +.. code-block:: bash + + # Create build directory + mkdir build + cd build + + # Configure with CMake + cmake -DCMAKE_INSTALL_PREFIX=/path/to/install .. + + # Build + make -j$(nproc) + + # Install + make install + +This will: + +1. Discover available probes in system libraries +2. Generate custom eBPF programs +3. Compile eBPF and C++ code +4. Install binaries, libraries, and scripts + +Custom Prefix Installation +=========================== + +This section describes how to build and install all dependencies and DataCrumbs under a custom prefix directory. This is essential for non-root installations and HPC environments. + +Set Installation Prefix +----------------------- + +All dependencies and DataCrumbs will be installed under a custom prefix: .. code-block:: bash export PREFIX=/your/custom/prefix + # For example: export PREFIX=$HOME/datacrumbs-install + # Or on HPC: export PREFIX=/usr/workspace/$USER/datacrumbs-install -1. Build and Install Dependencies for datacrumbs ------------------------------------------------ +Build and Install Dependencies +------------------------------- -The following dependencies are required for building `datacrumbs`: +The following dependencies are required for building DataCrumbs: -- bpftool (v7.5.0) and libbpf (v1.5.0) -- json-c -- yaml-cpp -- llvm -- (Optional) bpftime for user-space +**Runtime Dependencies:** -**bpftool (v7.5.0) and libbpf (v1.5.0):** +* bpftool (v7.5.0) and libbpf (v1.5.0) +* json-c +* yaml-cpp +* llvm +- (Optional) bpftime for user-space (experimental) + +**1. Build bpftool (v7.5.0) and libbpf (v1.5.0)** .. code-block:: bash @@ -39,15 +114,35 @@ The following dependencies are required for building `datacrumbs`: pushd bpftool git checkout tags/v7.5.0 -b v7.5.0 git submodule update --init --recursive + + # Build libbpf pushd libbpf git checkout tags/v1.5.0 -b v1.5.0 cd src DESTDIR=$PREFIX make install -j popd + + # Build bpftool cd src DESTDIR=$PREFIX make install -j popd + +.. important:: + **Understanding Prefix-Style Installation Structure** + + When building with ``DESTDIR=$PREFIX``, the build system installs files into nested directories + under ``$PREFIX`` (e.g., ``$PREFIX/usr/local/lib`` instead of ``$PREFIX/lib``). You must move + these files to the correct locations within your ``$PREFIX`` directory for DataCrumbs to find them. + +**2. Move Files to Correct Prefix Structure** + +After building, use ``find`` to locate and move files to the correct locations: + +.. code-block:: bash + pushd $PREFIX + + # Find and move bpf.h and libbpf bpf_header=$(find . -name bpf.h | head -n 1) bpf_header=$(readlink -f $bpf_header) bpf_install_dir=$(dirname $(dirname $(dirname $bpf_header))) @@ -56,13 +151,22 @@ The following dependencies are required for building `datacrumbs`: mv $bpf_install_dir/lib* $PREFIX fi + # Find and move bpftool bpftool=$(find . -name bpftool | head -n 1) bpftool=$(readlink -f $bpftool) bpftool_install_dir=$(dirname $(dirname $bpftool)) if [[ "$bpftool_install_dir" != "$PREFIX" ]]; then mv $bpftool_install_dir/* $PREFIX fi + popd + +**3. Verify Installation** + +Check that files are in the correct locations: + +.. code-block:: bash + echo "Checking installed files under \$PREFIX:" echo "bpf.h:" find $PREFIX -name bpf.h @@ -76,50 +180,25 @@ The following dependencies are required for building `datacrumbs`: echo "bpftool:" find $PREFIX -name bpftool -Expected Output (with PREFIX=/home/haridev/temp/install) --------------------------------------------------------- - -After running the above commands, you should see output similar to: - -bpf.h: - /home/haridev/temp/install/include/bpf/bpf.h - -libbpf.so: - /home/haridev/temp/install/lib/libbpf.so - -libbpf.pc: - /home/haridev/temp/install/lib/pkgconfig/libbpf.pc - -bpftool: - /home/haridev/temp/install/sbin/bpftool +Expected output (with PREFIX=/home/user/install): - This confirms that bpftool and libbpf have been installed under your custom prefix directory. +.. code-block:: text -**Clone datacrumbs:** + bpf.h: + /home/user/install/include/bpf/bpf.h -.. code-block:: bash - - git clone https://github.com/eunomia-bpf/datacrumbs.git - export DATACRUMBS_DIR=$(realpath datacrumbs) + libbpf.so: + /home/user/install/lib/libbpf.so -**(Optional) bpftime for User-space:** - -.. code-block:: bash - - git clone https://github.com/eunomia-bpf/bpftime.git - pushd bpftime - git checkout tags/v0.2.0 -b v0.2.0 - git apply $DATACRUMBS_DIR/docs/patch/bpftime-v0.2.0.patch - mkdir build && cd build - cmake -DCMAKE_INSTALL_PREFIX=$PREFIX .. - make - make install - popd + libbpf.pc: + /home/user/install/lib/pkgconfig/libbpf.pc + bpftool: + /home/user/install/sbin/bpftool +This confirms that bpftool and libbpf have been correctly installed under your custom prefix directory. -1. Install Remaining Dependencies: json-c, yaml-cpp, llvm ---------------------------------------------------------- +**4. Install Remaining Dependencies: json-c, yaml-cpp, llvm** **Recommended: Use Spack** @@ -131,7 +210,7 @@ bpftool: **If Spack is not available:** -- **LLVM:** Install via your package manager +* **LLVM:** Install via your package manager - Fedora/RHEL: .. code-block:: bash @@ -143,51 +222,76 @@ bpftool: sudo apt-get install llvm-dev -- **json-c:** Build from source +* **json-c:** Build from source .. code-block:: bash git clone https://github.com/json-c/json-c.git pushd json-c - git checkout tags/json-c-0.18-20240915 -b json-c-0.18-20240915 + git checkout tags/json-c-0.18-20240915 -b json-c-0.18-20240915 mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j make install -j popd -- **yaml-cpp:** Build from source +* **yaml-cpp:** Build from source .. code-block:: bash git clone https://github.com/jbeder/yaml-cpp.git pushd yaml-cpp - git checkout tags/yaml-cpp-0.7.0 -b yaml-cpp-0.7.0 + git checkout tags/yaml-cpp-0.7.0 -b yaml-cpp-0.7.0 mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j make install -j popd -Set all paths +**5. Update Environment Paths** .. code-block:: bash export PATH=$PREFIX/bin:$PREFIX/sbin:$PATH export LD_LIBRARY_PATH=$PREFIX/lib:$PREFIX/lib64:$LD_LIBRARY_PATH + export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:$PREFIX/lib64/pkgconfig:$PKG_CONFIG_PATH -2. Build and Install datacrumbs ---------------------------------- -With all dependencies installed under your custom prefix directory, you can now build and install `datacrumbs`: +**6. (Optional) BPFTime for Userspace Tracing** -Create a probe YAML for the system: +For experimental userspace eBPF support: .. code-block:: bash - cp $DATACRUMBS_DIR/docs/example/example.yaml $DATACRUMBS_DIR/etc/datacrumbs/configs/probe.yaml - # Edit the probe.yaml as needed + git clone https://github.com/eunomia-bpf/bpftime.git + pushd bpftime + git checkout tags/v0.2.0 -b v0.2.0 + git apply $DATACRUMBS_DIR/docs/patch/bpftime-v0.2.0.patch + mkdir build && cd build + cmake -DCMAKE_INSTALL_PREFIX=$PREFIX .. + make + make install + popd + +Configure BPFTime environment: + +.. code-block:: bash + + export BPFTIME_SHM_MEMORY_MB=10240 + export BPFTIME_MAX_FD_COUNT=128000 + +Build DataCrumbs with Custom Prefix +------------------------------------ -Set CMake arguments: +With all dependencies installed under your custom prefix directory, you can now build and install DataCrumbs: + +**1. Create Host Configuration** + +.. code-block:: bash + + cp $DATACRUMBS_DIR/docs/example/example.yaml $DATACRUMBS_DIR/etc/datacrumbs/configs/$(hostname).yaml + # Edit the configuration file as needed for your system + +**2. Set CMake Arguments** .. code-block:: bash @@ -206,13 +310,611 @@ If you want to use a custom host name or user, set them explicitly: # cmake_args+=(-DDATACRUMBS_HOST=) # cmake_args+=(-DDATACRUMBS_USER=) -Build and install datacrumbs: +**3. Build and Install** .. code-block:: bash - export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig:$PREFIX/lib64/pkgconfig:$PKG_CONFIG_PATH pushd $DATACRUMBS_DIR mkdir -p build && cd build cmake "${cmake_args[@]}" .. make -j + make install popd + +Build with Environment Modules (HPC Systems) +============================================= + +On HPC systems using environment modules (e.g., Tuolumne supercomputer): + +.. code-block:: bash + + # Load required modules + module load gcc/11.2.0 + export CC=$(which gcc) + export CXX=$(which g++) + + # Create build directory + mkdir build + cd build + + # Configure and build + cmake -DCMAKE_INSTALL_PREFIX=$HOME/datacrumbs-install \ + -DDATACRUMBS_HOST=$(hostname) \ + -DDATACRUMBS_USER=$USER \ + .. + + make -j$(nproc) + make install + +CMake Configuration Options +============================ + +All DataCrumbs scripts support common options: + +- ``--verbose``: Enable detailed output +- ``--quiet``: Suppress informational messages +- ``--dry-run``: Show what would be done without executing + +The following table lists all available CMake configuration options: + +.. list-table:: CMake Configuration Options + :header-rows: 1 + :widths: 35 15 50 + + * - Option + - Default + - Description + * - **Core Options** + - + - + * - ``CMAKE_INSTALL_PREFIX`` + - ``/usr/local`` + - Installation prefix for DataCrumbs + * - ``DATACRUMBS_HOST`` + - Auto-detected + - Host identifier for configuration files (must have matching .yaml file in ``etc/datacrumbs/configs/``) + * - ``DATACRUMBS_USER`` + - ``$USER`` + - User name for runtime operations + * - ``DATACRUMBS_INSTALL_USER`` + - ``$USER`` + - User name for installation file naming (for shared installations) + * - **Tracing Configuration** + - + - + * - ``DATACRUMBS_ENABLE_OPT`` + - ``ON`` + - Enable or disable tracing functionality. Values: ``ON``, ``OFF`` + * - ``DATACRUMBS_MODE_STR`` + - ``TRACE`` + - Operation mode. Values: ``TRACE`` (full event tracing), ``PROFILE`` (sampling-based profiling) + * - ``DATACRUMBS_TRACE_ALL_PROCESSES_OPT`` + - ``OFF`` + - Trace all processes on the system (not just target application). Values: ``ON``, ``OFF`` + * - ``DATACRUMBS_INCLUSION_PATH`` + - ``NONE`` + - Filter tracing to specific file paths (e.g., ``/scratch/data``) + * - ``DATACRUMBS_TRACE_RINGBUF_SIZE_MB`` + - ``16`` + - Size of eBPF ring buffer in megabytes. Larger buffers reduce event loss but consume more memory + * - ``DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS`` + - ``1000`` + - Skip events with duration below threshold (nanoseconds). Default is 1 microsecond + * - **Profiling Configuration** + - + - + * - ``DATACRUMBS_TIME_INTERVAL_NS`` + - ``1000000`` + - Sampling interval for profiling mode (nanoseconds). Default is 1 millisecond + * - **Directory Configuration** + - + - + * - ``DATACRUMBS_CONFIGURED_TRACE_DIR`` + - ``/tmp`` + - Default directory for trace output + * - ``DATACRUMBS_CONFIGURED_LOG_DIR`` + - ``/tmp`` + - Default directory for log files + * - ``DATACRUMBS_CONFIGURED_RUN_DIR`` + - ``NONE`` + - Directory for runtime state files (PIDs, lock files). Auto-determined if not set + * - **Kernel Configuration** + - + - + * - ``DATACRUMBS_KERNEL_VERSION`` + - Auto-detected + - Override detected kernel version (e.g., ``5.15.0``) + * - ``DATACRUMBS_KERNEL_HEADERS_PATH`` + - Auto-detected + - Path to kernel headers for eBPF compilation. Default: ``/lib/modules/$(uname -r)/build`` + * - ``DATACRUMBS_KERNEL_PATH`` + - Empty + - Path to kernel source tree (if different from headers) + * - **Scheduler Integration** + - + - + * - ``DATACRUMBS_LAUNCHER_TYPE`` + - ``FLUX`` + - Job scheduler type for multi-node support. Values: ``FLUX``, ``SLURM``, ``OPENMPI``, ``NONE`` + * - ``DATACRUMBS_SCHEDULER_JOBID_ENV_VAR`` + - ``NONE`` + - Environment variable containing job ID (e.g., ``SLURM_JOB_ID``). Auto-determined from scheduler type + * - ``DATACRUMBS_SCHEDULER_NODES_CMD_OPT`` + - ``NONE`` + - Scheduler option for specifying node count (e.g., ``-N``). Auto-determined from scheduler type + * - ``DATACRUMBS_SCHEDULER_PPN_CMD_OPT`` + - ``NONE`` + - Scheduler option for processes per node (e.g., ``-n``). Auto-determined from scheduler type + * - ``DATACRUMBS_SCHEDULER_RUN_CMD`` + - ``NONE`` + - Scheduler job launch command (e.g., ``srun``). Auto-determined from scheduler type + * - ``DATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS`` + - Empty + - Additional arguments for scheduler run command (e.g., ``--exclusive --mem=0``) + * - **Build Control Options** + - + - + * - ``DATACRUMBS_SKIP_PROBE_EXPLORING`` + - ``OFF`` + - Skip the probe exploration step during build. Values: ``ON``, ``OFF`` + * - ``DATACRUMBS_SKIP_PROBE_GENERATION`` + - ``OFF`` + - Skip the probe generation step during build. Values: ``ON``, ``OFF`` + * - ``DATACRUMBS_BUILD_ONLY`` + - ``OFF`` + - Build libraries only without installation or full setup. Values: ``ON``, ``OFF`` + * - **Debug and Development** + - + - + * - ``DATACRUMBS_LOG_LEVEL_STR`` + - ``INFO`` + - Logging verbosity level. Values: ``ERROR``, ``WARN``, ``INFO``, ``DEBUG``, ``TRACE`` + * - ``DATACRUMBS_BPF_PRINT_ENABLE`` + - ``OFF`` + - Enable debug printing from eBPF programs. Values: ``ON``, ``OFF``. Warning: impacts performance! + * - **Tool Paths** + - + - + * - ``BPFTOOL_EXECUTABLE`` + - Auto-detected + - Path to bpftool binary (e.g., ``/usr/local/bin/bpftool``). Auto-detected from ``PATH`` + * - **Compatibility Options** + - + - + * - ``DATACRUMBS_BPFTIME_COMPATIBLE`` + - ``OFF`` + - Enable compatibility with bpftime userspace eBPF runtime. Values: ``ON``, ``OFF`` + +Configuration Examples +---------------------- + +**Basic configuration:** + +.. code-block:: bash + + cmake -DCMAKE_INSTALL_PREFIX=/opt/datacrumbs \ + -DDATACRUMBS_HOST=myhost \ + .. + +**HPC configuration with custom paths:** + +.. code-block:: bash + + cmake -DCMAKE_INSTALL_PREFIX=$PREFIX \ + -DDATACRUMBS_HOST=tuolumne \ + -DDATACRUMBS_USER=$USER \ + -DDATACRUMBS_LAUNCHER_TYPE=FLUX \ + -DDATACRUMBS_CONFIGURED_TRACE_DIR=/lustre/traces \ + -DDATACRUMBS_CONFIGURED_LOG_DIR=/lustre/logs \ + -DBPFTOOL_EXECUTABLE=$PREFIX/sbin/bpftool \ + .. + +**Debug configuration:** + +.. code-block:: bash + + cmake -DDATACRUMBS_LOG_LEVEL_STR=DEBUG \ + -DDATACRUMBS_BPF_PRINT_ENABLE=ON \ + .. + +**Profiling mode with reduced overhead:** + +.. code-block:: bash + + cmake -DDATACRUMBS_MODE_STR=PROFILE \ + -DDATACRUMBS_TIME_INTERVAL_NS=10000000 \ + -DDATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS=10000 \ + .. + +Important Notes +--------------- + +.. important:: + **DATACRUMBS_HOST Configuration File** + + A configuration file named ``.yaml`` **must exist** in ``etc/datacrumbs/configs/`` for the specified hostname. + This is the most common build error. You can: + + - Copy an existing configuration (e.g., ``lead.yaml``, ``docker.yaml``) and modify it + - Create a new one based on the examples in ``docs/example/`` + - See the :doc:`setup` section for details on configuration file structure + +.. warning:: + **Performance Impact** + + - ``DATACRUMBS_TRACE_ALL_PROCESSES_OPT=ON`` generates significantly more trace data + - ``DATACRUMBS_BPF_PRINT_ENABLE=ON`` can severely impact performance + - Use ``DATACRUMBS_MODE_STR=PROFILE`` for lower overhead in production + +Docker Build +============ + +Build DataCrumbs in a Docker container for a consistent environment. + +Building the Docker Image +-------------------------- + +.. code-block:: bash + + cd infrastructure/docker + # Use Dockerfile for standard build, or Dockerfile.build for build-only image + docker build -t datacrumbs:latest -f Dockerfile . + +The Dockerfile performs: + +1. Starts from base image with dependencies +2. Copies source code to ``/opt/datacrumbs`` +3. Configures with CMake for Docker environment +4. Builds and installs DataCrumbs +5. Sets up environment variables + +Running the Container +--------------------- + +.. code-block:: bash + + # Run with required privileges for eBPF + docker run --privileged --cap-add=ALL \ + -v /sys/kernel/debug:/sys/kernel/debug:rw \ + -v /lib/modules:/lib/modules:ro \ + -it datacrumbs:latest bash + +.. warning:: + eBPF requires ``--privileged`` and ``--cap-add=ALL`` capabilities! + +Custom Docker Build +------------------- + +Modify the Dockerfile for your environment: + +.. code-block:: dockerfile + + # Example custom configuration + cmake -DDATACRUMBS_HOST=myhost \ + -DDATACRUMBS_USER=myuser \ + -DDATACRUMBS_KERNEL_HEADERS_PATH=/usr/src/kernels/$(uname -r) \ + -DCMAKE_INSTALL_PREFIX=/opt/datacrumbs-install \ + /opt/datacrumbs/ + +Lima Build (macOS Development) +============================== + +Lima provides a Linux VM environment on macOS for eBPF development. + +Initial Setup +------------- + +.. code-block:: bash + + # Install Lima (macOS) + brew install lima + + # Start Lima VM with DataCrumbs configuration + cd infrastructure/lima + limactl start --network=lima:user-v2 --name=ebpf ebpf.yaml + +The ``ebpf.yaml`` configuration: + +* Creates Ubuntu 22.04 VM +* Installs all DataCrumbs dependencies +* Sets up BCC, spack, and OpenMPI +* Configures 4 CPU cores and 4GB RAM + +Connecting to Lima +------------------ + +.. code-block:: bash + + # Connect to VM + limactl shell ebpf + +Building in Lima +---------------- + +Inside the Lima VM: + +.. code-block:: bash + + # Set environment variables + export DATACRUMBS_DIR=/home/lima.linux/datacrumbs + export DATACRUMBS_INSTALL_DIR=/home/lima.linux/datacrumbs/install + + # Clone repository (if not mounted) + git clone https://github.com/LLNL/datacrumbs.git $DATACRUMBS_DIR + + # Build + cd $DATACRUMBS_DIR + mkdir build + cd build + + cmake -DCMAKE_INSTALL_PREFIX=$DATACRUMBS_INSTALL_DIR \ + -DDATACRUMBS_HOST=lima \ + -DDATACRUMBS_USER=$USER \ + .. + + make -j$(nproc) + make install + +Using Spack (Optional) +---------------------- + +Lima setup includes Spack for dependency management: + +.. code-block:: bash + + # Inside Lima VM + export SPACK_ROOT=/opt/spack + source $SPACK_ROOT/share/spack/setup-env.sh + + # Install dependencies via Spack + spack install openmpi@5.0.5 + spack load openmpi + +Building for Tuolumne Supercomputer +==================================== + +Tuolumne (Tuo) is an LLNL supercomputer requiring specific build procedures. This section provides complete build instructions including dependency installation with custom prefix. + +Prerequisites for Tuolumne +--------------------------- + +Load required modules: + +.. code-block:: bash + + module load gcc/11.2.0 + export CC=$(which gcc) + export CXX=$(which g++) + +Set Installation Prefix +------------------------ + +All dependencies and DataCrumbs will be installed under a custom prefix: + +.. code-block:: bash + + export PREFIX=/usr/workspace/$USER/datacrumbs-install + +Build DataCrumbs for Tuolumne +------------------------------ + +Follow the instructions in the :ref:`Custom Prefix Installation` section above to build and install all dependencies. + +Once dependencies are installed, clone and configure DataCrumbs: + +.. code-block:: bash + + git clone https://github.com/LLNL/datacrumbs.git + export DATACRUMBS_DIR=$(realpath datacrumbs) + +Create host configuration: + +.. code-block:: bash + + cp $DATACRUMBS_DIR/docs/example/example.yaml \ + $DATACRUMBS_DIR/etc/datacrumbs/configs/tuolumne.yaml + # Edit tuolumne.yaml as needed for your system + +Configure CMake arguments: + +.. code-block:: bash + + cmake_args=( + -DCMAKE_PREFIX_PATH=$PREFIX + -DCMAKE_INSTALL_PREFIX=$PREFIX + -DBPFTOOL_EXECUTABLE=$PREFIX/sbin/bpftool + -DDATACRUMBS_HOST=tuolumne + -DDATACRUMBS_USER=$USER + -DDATACRUMBS_LAUNCHER_TYPE=FLUX + -DDATACRUMBS_CONFIGURED_TRACE_DIR=/p/lustre1/$USER/traces + -DDATACRUMBS_CONFIGURED_LOG_DIR=/p/lustre1/$USER/logs + ) + +Build and install: + +.. code-block:: bash + + pushd $DATACRUMBS_DIR + mkdir -p build && cd build + cmake "${cmake_args[@]}" .. + make -j16 + make install + popd + +Running DataCrumbs on Tuolumne +------------------------------- + +Load environment: + +.. code-block:: bash + + module load gcc/11.2.0 + export PATH=$PREFIX/bin:$PREFIX/sbin:$PATH + export LD_LIBRARY_PATH=$PREFIX/lib:$PREFIX/lib64:$LD_LIBRARY_PATH + +Run with BPFTime (if installed): + +.. code-block:: bash + + export BPFTIME_SHM_MEMORY_MB=10240 + export BPFTIME_MAX_FD_COUNT=128000 + + bpftime --install-location $PREFIX/lib load \ + $PREFIX/sbin/datacrumbs "run" "tuolumne-mpiio" \ + "--user" "$USER" \ + "--config_path" "$PREFIX/etc/datacrumbs/configs" \ + "--data_dir" "$PREFIX/etc/datacrumbs/data" \ + "--trace_log_dir" "$PREFIX/etc/datacrumbs/logs" + +For debugging with GDB: + +.. code-block:: bash + + gdb $PREFIX/sbin/datacrumbs + # Inside GDB: + add-auto-load-safe-path /opt/cray/pe/gcc/11.2.0/snos/lib64/libstdc++.so.6.0.29-gdb.py + set follow-fork-mode child + set detach-on-fork off + set print-frame-arguments all + +Standard usage (without BPFTime): + +.. code-block:: bash + + # See Usage section for complete examples + datacrumbs_server_run.sh + datacrumbs_run --help + +Build Verification +================== + +After installation, verify the build: + +.. code-block:: bash + + # Check binaries + ls -la $PREFIX/bin/datacrumbs_* + ls -la $PREFIX/sbin/datacrumbs* + + # Check libraries (may be in lib or lib64 depending on system) + ls -la $PREFIX/lib*/libdatacrumbs_*.so + + # Check module file + ls -la $PREFIX/etc/datacrumbs/modulefiles/ + + # Test validator + $PREFIX/sbin/datacrumbs_validator + +Troubleshooting +=============== + +Build Errors +------------ + +**"Cannot find configuration file for host"** + +.. code-block:: text + + CMake Error: Configuration file etc/datacrumbs/configs/myhost.yaml not found + +**This is the most common build error.** DataCrumbs requires a host-specific configuration file. + +.. code-block:: bash + + # Solution 1: Copy an existing configuration + cd etc/datacrumbs/configs/ + cp lead.yaml myhost.yaml + # Edit myhost.yaml to match your system + + # Solution 2: Specify a different host + cmake -DDATACRUMBS_HOST=lead ... + + # Solution 3: Create minimal configuration + cat > etc/datacrumbs/configs/myhost.yaml << 'EOF' + capture_probes: + - name: sys + probe: syscalls + type: header + file: /usr/src/kernels/$(uname -r)/include/linux/syscalls.h + regex: sys_.* + EOF + +See the :doc:`setup` section for more details on configuration file structure. + +**"Cannot find vmlinux BTF"** + +.. code-block:: bash + + # Verify BTF exists + ls /sys/kernel/btf/vmlinux + + # If missing, specify kernel headers path + cmake -DDATACRUMBS_KERNEL_HEADERS_PATH=/usr/src/kernels/$(uname -r) ... + +**"libbpf not found"** + +.. code-block:: bash + + # Install libbpf or set PKG_CONFIG_PATH + export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH + +**"Clang not found for eBPF compilation"** + +.. code-block:: bash + + # Install clang + sudo dnf install clang llvm + + # Verify + which clang + +**"Permission denied" during eBPF operations** + +The build process tests eBPF capabilities. Ensure: + +.. code-block:: bash + + # Run make with appropriate privileges if needed + sudo make + +Rebuild from Scratch +-------------------- + +To completely rebuild: + +.. code-block:: bash + + # Remove build directory + rm -rf build + + # Recreate and rebuild + mkdir build + cd build + cmake .. + make clean + make -j$(nproc) + +Partial Rebuild +--------------- + +To rebuild only changed components: + +.. code-block:: bash + + # Rebuild specific targets + make datacrumbs_bpf + make datacrumbs + + # Reinstall + make install + +Clean Build Artifacts +--------------------- + +.. code-block:: bash + + # Clean BPF artifacts + make clean_all + + # Clean everything + make clean diff --git a/docs/composability.rst b/docs/composability.rst new file mode 100755 index 00000000..ff99c707 --- /dev/null +++ b/docs/composability.rst @@ -0,0 +1,597 @@ +=================== +Composability Guide +=================== + +DataCrumbs provides a powerful composability feature that allows users to create custom tracing configurations by selecting specific probes. This enables optimized tracing tailored to specific workload requirements, reducing overhead and improving performance. + +Overview +======== + +During the build and installation process, DataCrumbs: + +1. Discovers available probes in system libraries and kernel functions +2. Compiles each probe as a separate eBPF object file +3. Installs individual probe objects to ``/libexec/datacrumbs/objects/`` +4. Provides tools for discovering and composing custom configurations + +This modular approach allows users to: + +- Select only the probes relevant to their workload +- Reduce tracing overhead by excluding unnecessary probes +- Create multiple configurations for different applications +- Share configurations across users in multi-tenant environments + +Probe Objects +============= + +After installation, individual probe objects are available in: + +.. code-block:: bash + + $PREFIX/libexec/datacrumbs/objects/ + +Example probe objects: + +- ``open.o`` - open() system call +- ``read.o`` - read() system call +- ``write.o`` - write() system call +- ``H5Fopen.o`` - HDF5 file open +- ``MPI_File_open.o`` - MPI-IO file open +- ``pread64.o``, ``pwrite64.o`` - POSIX I/O functions +- And many more depending on your system configuration + +Common objects (always required): + +- ``common.o`` - Shared eBPF code +- ``init.bpf.o`` - Initialization code + +Discovering Available Probes +============================= + +Use ``datacrumbs_compose`` to discover all available probes: + +**Command:** + +.. code-block:: bash + + sudo datacrumbs_compose --action discover + +**Output:** + +.. code-block:: text + + [INFO 2025-11-21 21:19:50] After loading yaml for docker + [INFO 2025-11-21 21:19:50] Discovering probe objects in /workspaces/datacrumbs/install/libexec/datacrumbs/objects... + [INFO 2025-11-21 21:19:50] custom1 + [INFO 2025-11-21 21:19:50] sys + [INFO 2025-11-21 21:19:50] libc + [INFO 2025-11-21 21:19:50] os_page_cache + [INFO 2025-11-21 21:19:50] python + [INFO 2025-11-21 21:19:50] xfs + [INFO 2025-11-21 21:19:50] iomap + ... + +The discover action lists all probes that can be composed into custom configurations. + +Creating Composable Configurations +=================================== + +Use ``datacrumbs_compose`` to create a custom configuration: + +**Command Syntax:** + +.. code-block:: bash + + sudo datacrumbs_compose --action compose --name CONFIG_NAME --probes PROBE1,PROBE2,... + +**Arguments:** + +``--action compose`` + Create a new composable configuration + +``--name NAME`` + Name for the custom configuration (alphanumeric and underscore only) + +``--probes PROBES`` + Comma-separated list of probe names (no spaces) + +Example: Local I/O Only +----------------------- + +Create a configuration that traces only POSIX I/O operations: + +.. code-block:: bash + + sudo datacrumbs_compose --action compose \ + --name local_io \ + --probes custom1,sys,os_page_cache,xfs,iomap + +This creates: ``$PREFIX/libexec/datacrumbs/sbin//datacrumbs_local_io`` + +Example: HDF5 Only +------------------ + +Create a configuration for HDF5 applications: + +.. code-block:: bash + + sudo datacrumbs_compose --action compose \ + --name hdf5_only \ + --probes h5a,h5d,h5all + +Example: MPI-IO Only +-------------------- + +Create a configuration for MPI-IO tracing: + +.. code-block:: bash + + sudo datacrumbs_compose --action compose \ + --name mpiio_only \ + --probes mpiio,sys + +Example: Mixed Workload +----------------------- + +Create a configuration for applications using POSIX and HDF5: + +.. code-block:: bash + + sudo datacrumbs_compose --action compose \ + --name posix_hdf5 \ + --probes custom1,sys,hdf5 + +Using Composable Configurations +================================ + +Once created, composable configurations can be used with any DataCrumbs execution mode. + +With datacrumbs_run +------------------- + +.. code-block:: bash + + # Use default configuration + datacrumbs_run --app "./myapp" + + # Use custom configuration + datacrumbs_compose_run --composite-name local_io --app "./myapp" + +With Server Mode +---------------- + +.. code-block:: bash + + # Start server with custom configuration + sudo datacrumbs_server_run.sh --composite-name hdf5_only + + # Run application (uses custom config) + datacrumbs_track --executable ./hdf5_app + ./hdf5_app + + # Stop server + sudo datacrumbs_server_stop.sh --composite-name hdf5_only + +With Service Mode +----------------- + +.. code-block:: bash + + # Set environment variable for service + export DATACRUMBS_COMPOSABLE_NAME=mpiio_only + + # Start service + sudo datacrumbs_service_run.sh + + # Applications will use the mpiio_only configuration + +With Flux Integration +--------------------- + +.. code-block:: bash + + # Submit job with custom configuration + flux run --datacrumbs-enable --datacrumbs-composite=posix_hdf5 \ + -N 4 -n 32 ./parallel_app + + # Or with default configuration + flux run --datacrumbs-enable -N 4 -n 32 ./parallel_app + +Command Reference: datacrumbs_compose +====================================== + +**Synopsis:** + +.. code-block:: bash + + datacrumbs_compose --action ACTION [OPTIONS] + +**Required Arguments:** + +``--action ACTION`` + Action to perform: + + - ``discover``: List all available probes + - ``compose``: Create a new composable configuration + +**Optional Arguments:** + +``--name NAME`` + Name for the composable configuration (required for ``compose`` action) + + - Must contain only alphanumeric characters and underscores + - Will create binary: ``datacrumbs_`` + +``--probes PROBES`` + Comma-separated list of probe names (required for ``compose`` action) + + - No spaces between probe names + - Probe names must exist (use ``discover`` to list) + +``--verbose`` + Enable verbose output + +``--quiet`` + Suppress informational messages + +``--dry-run`` + Show what would be done without executing + +**Examples:** + +.. code-block:: bash + + # Discover available probes + sudo datacrumbs_compose --action discover + + # Create simple configuration + sudo datacrumbs_compose --action compose \ + --name basic_io \ + --probes custom1,sys,os_page_cache + + # Create with verbose output + sudo datacrumbs_compose --action compose \ + --name debug_config \ + --probes custom1,sys,os_page_cache \ + --verbose + + # Dry run to see what would happen + sudo datacrumbs_compose --action compose \ + --name test_config \ + --probes custom1 \ + --dry-run + +Composable Binary Locations +============================ + +Composable binaries are installed per-user: + +.. code-block:: text + + /libexec/datacrumbs/sbin//datacrumbs_ + +Example: + +.. code-block:: bash + + # For user 'alice' with config 'local_io' + /opt/datacrumbs/libexec/datacrumbs/sbin/alice/datacrumbs_local_io + + # For user 'bob' with config 'hdf5_only' + /opt/datacrumbs/libexec/datacrumbs/sbin/bob/datacrumbs_hdf5_only + +This per-user structure allows: + +- Multiple users to have different configurations +- Configuration isolation between users +- Shared installations with user-specific customizations + +Managing Composables +==================== + +Listing Composables +------------------- + +List all composable configurations for the current user: + +.. code-block:: bash + + ls $PREFIX/libexec/datacrumbs/sbin/$USER/ + +Removing Composables +-------------------- + +Remove a composable configuration: + +.. code-block:: bash + + rm $PREFIX/libexec/datacrumbs/sbin/$USER/datacrumbs_ + +Example: + +.. code-block:: bash + + rm $PREFIX/libexec/datacrumbs/sbin/$USER/datacrumbs_posix_io + +Updating Composables +-------------------- + +To update a composable configuration, simply recreate it: + +.. code-block:: bash + + # Recreate with updated probe list + sudo datacrumbs_compose --action compose \ + --name local_io \ + --probes custom1,sys,os_page_cache,xfs,iomap + +The old configuration is automatically replaced. + +Composability Best Practices +============================= + +1. **Start Small**: Begin with minimal probe sets and add more as needed +2. **Profile First**: Use the full configuration to identify which probes are relevant +3. **Workload-Specific**: Create different configurations for different application types +4. **Test Configurations**: Verify custom configurations work before production use +5. **Document Configs**: Maintain a list of configurations and their purposes +6. **Share Configs**: Coordinate configurations across team members for consistency +7. **Monitor Overhead**: Compare overhead between full and custom configurations +8. **Version Control**: Keep track of which probe combinations work best + +Common Configuration Patterns +============================== + +System Call Level +----------------- + +Trace only low-level system calls: + +.. code-block:: bash + + sudo datacrumbs_compose --action compose \ + --name syscalls_only \ + --probes custom1,sys + +Local I/O Level +--------------- + +Trace local I/O operations: + +.. code-block:: bash + + sudo datacrumbs_compose --action compose \ + --name local_io \ + --probes custom1,sys,os_page_cache,xfs,iomap + +High-Level Libraries +-------------------- + +Trace only high-level I/O libraries: + +.. code-block:: bash + + sudo datacrumbs_compose --action compose \ + --name high_level \ + --probes h5a,h5d,mpiio + + +Troubleshooting Composables +============================ + +Probe Not Found +--------------- + +.. code-block:: text + + Error: Probe object 'invalid_probe.o' not found. + +**Solution**: Run ``discover`` to see available probes: + +.. code-block:: bash + + sudo datacrumbs_compose --action discover + +Invalid Configuration Name +-------------------------- + +.. code-block:: text + + Error: Invalid composable name + +**Solution**: Use only alphanumeric characters and underscores: + +.. code-block:: bash + + # Invalid + sudo datacrumbs_compose --action compose --name my-config ... # Hyphen not allowed + + # Valid + sudo datacrumbs_compose --action compose --name my_config ... + +Composable Not Used +------------------- + +If the composable binary is created but not being used: + +.. code-block:: bash + + # Verify binary exists + ls -la $PREFIX/libexec/datacrumbs/sbin/$USER/datacrumbs_* + + # Check permissions + # Should be: -r-x------ (500) + + # Verify you're specifying the name correctly + datacrumbs_compose_run --composite-name exact_name + +Build Failures +-------------- + +If composable build fails: + +.. code-block:: bash + + # Check build logs in the dry-run output + sudo datacrumbs_compose --action compose \ + --name test \ + --probes open,close \ + --verbose + + # Verify CMake and build tools are available + which cmake + + # Check probe objects exist + ls $PREFIX/libexec/datacrumbs/objects/ + +Advanced Usage +============== + +Programmatic Composition +------------------------ + +Create multiple configurations programmatically: + +.. code-block:: bash + + #!/bin/bash + + # Define configurations + declare -A configs + configs[posix]="open,close,read,write,lseek" + configs[hdf5]="H5Fopen,H5Fclose,H5Dread,H5Dwrite" + configs[mpiio]="MPI_File_open,MPI_File_close,MPI_File_read,MPI_File_write" + + # Create all configurations + for name in "${!configs[@]}"; do + echo "Creating configuration: $name" + sudo datacrumbs_compose --action compose \ + --name "$name" \ + --probes "${configs[$name]}" + done + +Dynamic Probe Selection +----------------------- + +Select probes based on application analysis: + +.. code-block:: bash + + # Run with full tracing first + datacrumbs_run --app "./myapp" + + # Analyze trace to find used functions + # (Analysis script not shown) + + # Create optimized configuration with only used probes + sudo datacrumbs_compose --action compose \ + --name myapp_optimized \ + --probes open,read,write,close,H5Dread,H5Dwrite + +Integration with Workflows +--------------------------- + +Include composable creation in workflow scripts: + +.. code-block:: bash + + #!/bin/bash + # workflow.sh + + # Create workflow-specific configuration + sudo datacrumbs_compose --action compose \ + --name workflow_io \ + --probes open,close,read,write,H5Fopen,H5Fclose + + # Run workflow stages with custom configuration + datacrumbs_server_run --composite-name workflow_io + datacrumbs_track --executable ./stage1_preprocess + ./stage1_preprocess + datacrumbs_track --executable ./stage2_compute + ./stage2_compute + datacrumbs_track --executable ./stage3_postprocess + ./stage3_postprocess + datacrumbs_server_stop --composite-name workflow_io + +Examples +======== + +Example 1: Lightweight POSIX Tracing +------------------------------------- + +.. code-block:: bash + + # Discover available probes + sudo datacrumbs_compose --action discover + + # Create lightweight configuration + sudo datacrumbs_compose --action compose \ + --name light_posix \ + --probes open,close,read,write + + # Use with application + datacrumbs_compose_run --composite-name light_posix \ + --app "./io_benchmark" + + # Compare overhead with full tracing + # Lightweight typically has 2-3% overhead vs 5-8% for full + +Example 2: HDF5 Application Optimization +----------------------------------------- + +.. code-block:: bash + + # Initial run with full tracing + datacrumbs_run --app "./hdf5_app dataset.h5" + + # Analyze trace - shows only H5 functions are used + + # Create HDF5-only configuration + sudo datacrumbs_compose --action compose \ + --name hdf5_optimized \ + --probes H5Fopen,H5Fclose,H5Fcreate,H5Dopen,H5Dclose,H5Dcreate,H5Dread,H5Dwrite + + # Use optimized configuration + datacrumbs_compose_run --composite-name hdf5_optimized \ + --app "./hdf5_app large_dataset.h5" + +Example 3: Multi-User Environment +---------------------------------- + +.. code-block:: bash + + # Administrator creates common configurations + sudo su - admin + + # POSIX configuration + sudo datacrumbs_compose --action compose \ + --name std_posix \ + --probes open,close,read,write,pread64,pwrite64 + + # HDF5 configuration + sudo datacrumbs_compose --action compose \ + --name std_hdf5 \ + --probes H5Fopen,H5Fclose,H5Dread,H5Dwrite + + # Users can now use these configurations + # User 1 + datacrumbs_compose_run --composite-name std_posix --app "./user1_app" + + # User 2 + datacrumbs_compose_run --composite-name std_hdf5 --app "./user2_app" + +Example 4: Flux Workflow +------------------------- + +.. code-block:: bash + + # Create configuration for workflow + sudo datacrumbs_compose --action compose \ + --name workflow_trace \ + --probes open,close,read,write,H5Dread,H5Dwrite,MPI_File_read,MPI_File_write + + # Submit Flux job with custom configuration + flux run --datacrumbs-enable \ + --datacrumbs-composite=workflow_trace \ + -N 8 -n 64 \ + ./parallel_workflow diff --git a/docs/conf.py b/docs/conf.py index ded7eddf..722f32a2 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -19,14 +19,14 @@ # -- Project information ----------------------------------------------------- -project = u'dftracer' -copyright = u'2018, Lawrence Livermore National Security, LLC' +project = u'DataCrumbs' +copyright = u'2024, Lawrence Livermore National Security, LLC' author = u'Hariharan Devarajan' # The short X.Y version version = u'0.0' # The full version, including alpha/beta/rc tags -release = u'1.0.2' +release = u'0.0.4' # -- General configuration --------------------------------------------------- @@ -90,9 +90,12 @@ # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] +# Add custom CSS +html_css_files = ['custom.css'] + # The name of an image file (relative to this directory) to place at the top # of the sidebar. -html_logo = 'images/dftracer-logo.png' +# html_logo = 'images/datacrumbs-logo.png' # Update when logo is available # Custom sidebar templates, must be a dictionary that maps document names # to template names. @@ -110,7 +113,7 @@ # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. -htmlhelp_basename = 'dftracer-doc' +htmlhelp_basename = 'datacrumbs-doc' # -- Options for LaTeX output ------------------------------------------------ @@ -137,13 +140,13 @@ # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ - (master_doc, 'dftracer.tex', u'DFTracer Documentation', + (master_doc, 'datacrumbs.tex', u'DataCrumbs Documentation', author, 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. -latex_logo = 'images/dftracer-logo.png' +# latex_logo = 'images/datacrumbs-logo.png' # -- Options for manual page output ------------------------------------------ @@ -151,7 +154,7 @@ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - (master_doc, 'dftracer', u'DFTracer Documentation', + (master_doc, 'datacrumbs', u'DataCrumbs Documentation', [author], 1) ] @@ -162,7 +165,7 @@ # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, 'dftracer', u'DFTracer Documentation', - author, 'dftracer', 'DFTracer is a library for wrapping function calls in shared libraries.', + (master_doc, 'datacrumbs', u'DataCrumbs Documentation', + author, 'datacrumbs', 'DataCrumbs is an eBPF-based I/O profiling and tracing tool for HPC applications.', 'Miscellaneous'), ] diff --git a/docs/dependencies.rst b/docs/dependencies.rst new file mode 100755 index 00000000..1c9f6273 --- /dev/null +++ b/docs/dependencies.rst @@ -0,0 +1,485 @@ +============ +Dependencies +============ + +DataCrumbs has several system and library dependencies that must be satisfied before building and running the tool. + +System Requirements +=================== + +Operating System +---------------- + +DataCrumbs requires a Linux-based operating system with eBPF support. Tested distributions include: + +* CentOS 8+ +* Rocky Linux 8+ +* Ubuntu 20.04+ +* Debian 11+ + +Kernel Requirements +------------------- + +**Recommended: Linux Kernel 5.8 or later** + +DataCrumbs works best with modern kernel versions that have full eBPF feature support: + +* **Linux 5.8+**: Full eBPF features including bounded loops, advanced helpers, and BPF ring buffers (recommended) +* **Linux 5.1+**: Supported with most features +* **Linux 4.18+**: Supported with compatibility layers (reduced functionality) + +For kernels older than 5.8, DataCrumbs can use compatibility mechanisms, but some features may be limited. + +To check your kernel version: + +.. code-block:: bash + + uname -r + +Kernel Configuration +-------------------- + +The kernel must be built with eBPF support enabled. Required kernel configuration options: + +.. code-block:: text + + CONFIG_BPF=y + CONFIG_BPF_SYSCALL=y + CONFIG_BPF_JIT=y + CONFIG_HAVE_EBPF_JIT=y + CONFIG_BPF_EVENTS=y + CONFIG_DEBUG_INFO_BTF=y + +Most modern distributions enable these by default. To verify: + +.. code-block:: bash + + # Check if BTF is available + ls -la /sys/kernel/btf/vmlinux + + # Check BPF support + zgrep BPF /proc/config.gz + +Build Dependencies +================== + +Compiler Requirements +--------------------- + +**GCC 11.2.0 or later** (recommended) + +.. code-block:: bash + + # Check GCC version + gcc --version + + # Set compiler for CMake + export CC=$(which gcc) + export CXX=$(which g++) + +**Clang/LLVM** (for eBPF compilation) + +Clang is required to compile eBPF programs. Version 10+ recommended. + +.. code-block:: bash + + # Check Clang version + clang --version + +Build Tools +----------- + +Required build tools: + +* **CMake 3.5+**: Build system generator +* **Make**: Build automation +* **Git**: Version control (for obtaining source) +* **pkg-config**: Dependency detection + +.. code-block:: bash + + # On CentOS/Rocky Linux + sudo dnf install cmake make git pkg-config + + # On Ubuntu/Debian + sudo apt-get install cmake build-essential git pkg-config + +Core eBPF Dependencies +====================== + +libbpf (v1.5.0+) +---------------- + +**Required Version: 1.5.0 or later** + +libbpf is the core library for loading and managing eBPF programs. DataCrumbs requires a recent version with support for: + +* Modern BPF features (ring buffers, etc.) +* BTF support +* CO-RE (Compile Once - Run Everywhere) + +Installation from Source +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + # Clone libbpf + git clone https://github.com/libbpf/libbpf.git + cd libbpf/src + + # Build and install + make + sudo make install + sudo ldconfig + + # Verify installation + pkg-config --modversion libbpf + +Installation from Package Manager +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + # CentOS/Rocky Linux + sudo dnf install libbpf-devel + + # Ubuntu 22.04+ + sudo apt-get install libbpf-dev + +.. note:: + Package manager versions may be older than 1.5.0. Building from source is recommended for the latest features. + +bpftool (v7.5.0+) +----------------- + +**Required Version: 7.5.0 or later** + +bpftool is used during the build process to generate eBPF-related headers and skeleton files. + +Installation from Source +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + # Install dependencies + sudo dnf install libelf-devel libcap-devel + + # Clone Linux kernel tools + git clone --depth 1 --branch v6.1 https://github.com/torvalds/linux.git + cd linux/tools/bpf/bpftool + + # Build and install + make + sudo make install + + # Verify installation + bpftool version + +System Installation +^^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + # CentOS/Rocky Linux + sudo dnf install bpftool + + # Ubuntu + sudo apt-get install linux-tools-common linux-tools-generic + +.. note:: + The bpftool version often matches the kernel version. Ensure you have a recent version installed. + +Additional Library Dependencies +================================ + +yaml-cpp +-------- + +**Purpose**: Configuration file parsing (YAML format) + +DataCrumbs uses YAML for configuration files that define: + +* Host-specific settings +* Probe configurations +* Capture rules + +Installation: + +.. code-block:: bash + + # From source + git clone https://github.com/jbeder/yaml-cpp.git + cd yaml-cpp + mkdir build && cd build + cmake -DYAML_BUILD_SHARED_LIBS=ON .. + make + sudo make install + + # From package manager + # CentOS/Rocky Linux + sudo dnf install yaml-cpp-devel + + # Ubuntu/Debian + sudo apt-get install libyaml-cpp-dev + +json-c +------ + +**Purpose**: JSON data handling for trace output and data files + +DataCrumbs uses JSON for: + +* Probe metadata storage +* Category definitions +* Internal data exchange + +Installation: + +.. code-block:: bash + + # From package manager + # CentOS/Rocky Linux + sudo dnf install json-c-devel + + # Ubuntu/Debian + sudo apt-get install libjson-c-dev + +libelf +------ + +**Purpose**: ELF (Executable and Linkable Format) file parsing + +Required for: + +* Discovering symbols in libraries +* Attaching probes to functions +* Reading binary metadata + +Installation: + +.. code-block:: bash + + # CentOS/Rocky Linux + sudo dnf install elfutils-libelf-devel + + # Ubuntu/Debian + sudo apt-get install libelf-dev + +zlib +---- + +**Purpose**: Trace data compression + +DataCrumbs can compress trace output to reduce storage requirements. + +Installation: + +.. code-block:: bash + + # CentOS/Rocky Linux + sudo dnf install zlib-devel + + # Ubuntu/Debian + sudo apt-get install zlib1g-dev + +Optional Dependencies +===================== + +patchelf +-------- + +**Purpose**: Binary patching for track/untrack functionality + +Required only if you plan to use ``datacrumbs_track`` and ``datacrumbs_untrack`` scripts to permanently instrument binaries. + +Installation: + +.. code-block:: bash + + # CentOS/Rocky Linux + sudo dnf install patchelf + + # Ubuntu/Debian + sudo apt-get install patchelf + +MPI Implementation +------------------ + +**Purpose**: MPI-IO tracing support + +If tracing MPI applications, install an MPI implementation: + +.. code-block:: bash + + # OpenMPI + sudo dnf install openmpi-devel + + # Or MPICH + sudo dnf install mpich-devel + + # Load MPI module (if using environment modules) + module load openmpi + +HDF5 +---- + +**Purpose**: HDF5 I/O tracing support + +For applications using HDF5: + +.. code-block:: bash + + # CentOS/Rocky Linux + sudo dnf install hdf5-devel + + # Ubuntu/Debian + sudo apt-get install libhdf5-dev + +Python Dependencies (for Analysis) +=================================== + +The analysis tools in ``analysis/`` directory require Python 3.8+ with the following packages: + +.. code-block:: bash + + pip install -r analysis/requirements.txt + +Key packages: + +- ``pandas``: Data analysis +- ``matplotlib``: Visualization +- ``jupyter``: Interactive notebooks +- ``numpy``: Numerical operations + +Kernel Headers +============== + +DataCrumbs needs access to kernel headers for eBPF compilation. + +Installation: + +.. code-block:: bash + + # CentOS/Rocky Linux + sudo dnf install kernel-devel kernel-headers + + # Ubuntu/Debian + sudo apt-get install linux-headers-$(uname -r) + +The kernel headers should be located at: + +- ``/usr/src/kernels/`` +- ``/lib/modules/$(uname -r)/build`` + +You can specify a custom path using the ``DATACRUMBS_KERNEL_HEADERS_PATH`` CMake variable. + +Verifying Dependencies +====================== + +Before building, verify all required dependencies are available: + +.. code-block:: bash + + # Check kernel version + uname -r + + # Check for BTF support + ls /sys/kernel/btf/vmlinux + + # Check libbpf + pkg-config --modversion libbpf + + # Check bpftool + bpftool version + + # Check compiler + gcc --version + clang --version + +Complete Dependency Installation +================================= + +CentOS/Rocky Linux 8 +-------------------- + +.. code-block:: bash + + # System tools + sudo dnf install -y gcc gcc-c++ clang llvm make cmake git + sudo dnf install -y kernel-devel kernel-headers + + # eBPF tools + sudo dnf install -y libbpf-devel bpftool + + # Libraries + sudo dnf install -y elfutils-libelf-devel yaml-cpp-devel json-c-devel zlib-devel + + # Optional tools + sudo dnf install -y patchelf + + # MPI (optional) + sudo dnf install -y openmpi-devel + + # HDF5 (optional) + sudo dnf install -y hdf5-devel + +Ubuntu 22.04 +------------ + +.. code-block:: bash + + # System tools + sudo apt-get update + sudo apt-get install -y build-essential clang llvm cmake git + sudo apt-get install -y linux-headers-$(uname -r) + + # eBPF tools + sudo apt-get install -y libbpf-dev linux-tools-common linux-tools-generic + + # Libraries + sudo apt-get install -y libelf-dev libyaml-cpp-dev libjson-c-dev zlib1g-dev + + # Optional tools + sudo apt-get install -y patchelf + + # MPI (optional) + sudo apt-get install -y libopenmpi-dev + + # HDF5 (optional) + sudo apt-get install -y libhdf5-dev + +Troubleshooting +=============== + +BTF Not Available +----------------- + +If ``/sys/kernel/btf/vmlinux`` doesn't exist: + +1. Upgrade to a newer kernel (5.8+ recommended) +2. Rebuild kernel with ``CONFIG_DEBUG_INFO_BTF=y`` +3. Use ``DATACRUMBS_KERNEL_HEADERS_PATH`` to point to kernel sources + +libbpf Version Too Old +---------------------- + +If package manager version is < 1.5.0: + +.. code-block:: bash + + # Build from source + git clone https://github.com/libbpf/libbpf.git + cd libbpf/src + git checkout v1.5.0 + make + sudo make install + sudo ldconfig + +Permission Issues +----------------- + +eBPF operations require elevated privileges: + +* Run DataCrumbs server components with ``sudo`` +* Ensure user is in appropriate groups (e.g., ``bpf`` group if available) +* Check ``/proc/sys/kernel/unprivileged_bpf_disabled`` setting diff --git a/docs/deployment.rst b/docs/deployment.rst new file mode 100755 index 00000000..b9abca9b --- /dev/null +++ b/docs/deployment.rst @@ -0,0 +1,595 @@ +=================== +Deployment for HPC +=================== + +DataCrumbs can be deployed on HPC systems in multiple ways to allow users to trace their applications. This guide covers deployment methods for multi-user environments where administrators need to grant users access to DataCrumbs functionality. + +Deployment Overview +=================== + +There are two primary deployment approaches: + +1. **Sudoers Access**: Grant specific users permission to start/stop the DataCrumbs server via sudo +2. **Scheduler Integration**: Use job scheduler prolog/epilog scripts to manage DataCrumbs automatically + +.. list-table:: Deployment Method Comparison + :header-rows: 1 + :widths: 25 35 40 + + * - Method + - Best For + - Characteristics + * - Sudoers Access + - Interactive development, small teams + - User-initiated, explicit control, manual start/stop + * - Scheduler Integration + - Production workloads, large deployments + - Automatic, transparent, per-job isolation + +Method 1: Sudoers File Access +============================== + +This method grants specific users permission to run DataCrumbs server control scripts without requiring full root privileges. + +Overview +-------- + +Users can: + +- Start DataCrumbs server with ``sudo datacrumbs_server_run.sh`` +- Stop DataCrumbs server with ``sudo datacrumbs_server_stop.sh`` +- Cannot modify DataCrumbs installation or configuration +- Cannot access other users' trace data + +Sudoers Configuration +--------------------- + +**Step 1: Create sudoers configuration file** + +Create ``/etc/sudoers.d/datacrumbs`` with the following content: + +.. code-block:: bash + + # Allow specific users to run DataCrumbs server control scripts + + # Define user aliases (customize for your site) + User_Alias DATACRUMBS_USERS = user1, user2, user3, %hpc_group + + # Define command aliases + Cmnd_Alias DATACRUMBS_START = /opt/datacrumbs/sbin/datacrumbs_server_run.sh + Cmnd_Alias DATACRUMBS_STOP = /opt/datacrumbs/sbin/datacrumbs_server_stop.sh + Cmnd_Alias DATACRUMBS_SERVICE_START = /opt/datacrumbs/sbin/datacrumbs_service_run.sh + Cmnd_Alias DATACRUMBS_SERVICE_STOP = /opt/datacrumbs/sbin/datacrumbs_service_stop.sh + + # Grant permissions (no password required) + DATACRUMBS_USERS ALL = (root) NOPASSWD: DATACRUMBS_START, DATACRUMBS_STOP + DATACRUMBS_USERS ALL = (root) NOPASSWD: DATACRUMBS_SERVICE_START, DATACRUMBS_SERVICE_STOP + +.. important:: + Replace ``/opt/datacrumbs`` with your actual DataCrumbs installation prefix. + +**Step 2: Set correct permissions** + +.. code-block:: bash + + # Set ownership and permissions + sudo chown root:root /etc/sudoers.d/datacrumbs + sudo chmod 0440 /etc/sudoers.d/datacrumbs + + # Validate sudoers syntax + sudo visudo -c -f /etc/sudoers.d/datacrumbs + +**Step 3: Verify configuration** + +.. code-block:: bash + + # Test as regular user + sudo -l + + # Expected output should include: + # User may run the following commands: + # (root) NOPASSWD: /opt/datacrumbs/sbin/datacrumbs_server_run.sh + # (root) NOPASSWD: /opt/datacrumbs/sbin/datacrumbs_server_stop.sh + +User-Specific Configuration +---------------------------- + +**Allow per-user DataCrumbs access:** + +.. code-block:: bash + + # In /etc/sudoers.d/datacrumbs + User_Alias DATACRUMBS_ADMINS = admin1, admin2 + User_Alias DATACRUMBS_BASIC_USERS = user1, user2, %research_group + + # Admins can run all DataCrumbs commands + DATACRUMBS_ADMINS ALL = (root) NOPASSWD: /opt/datacrumbs/sbin/* + + # Basic users can only start/stop their own servers + DATACRUMBS_BASIC_USERS ALL = (root) NOPASSWD: DATACRUMBS_START, DATACRUMBS_STOP + +Group-Based Access +------------------ + +Grant access to entire groups: + +.. code-block:: bash + + # In /etc/sudoers.d/datacrumbs + + # Allow all users in 'hpc' group + %hpc ALL = (root) NOPASSWD: DATACRUMBS_START, DATACRUMBS_STOP + + # Allow all users in multiple groups + User_Alias DATACRUMBS_USERS = %hpc, %research, %developers + +Usage by Regular Users +----------------------- + +Once configured, users can start and stop DataCrumbs: + +.. code-block:: bash + + # Start DataCrumbs server + sudo datacrumbs_server_run.sh --user $USER + + # Stop DataCrumbs server + sudo datacrumbs_server_stop.sh --user $USER + + # With service mode + sudo datacrumbs_service_run.sh --user $USER + sudo datacrumbs_service_stop.sh --user $USER + +Security Considerations +----------------------- + +.. warning:: + - Only grant access to trusted users + - Regularly audit sudoers configuration + - Monitor DataCrumbs server processes + - Review trace logs for unauthorized access + +Best practices: + +1. Use specific command paths (not wildcards like ``/opt/datacrumbs/*``) +2. Require users to specify ``--user $USER`` to prevent impersonation +3. Set up log monitoring: ``/var/log/auth.log`` tracks sudo usage +4. Implement quota limits on trace storage directories +5. Rotate trace logs regularly + +Restricting Commands +-------------------- + +Limit users to specific DataCrumbs configurations: + +.. code-block:: bash + + # Only allow specific configurations + Cmnd_Alias DATACRUMBS_SAFE_START = /opt/datacrumbs/sbin/datacrumbs_server_run.sh --user *, \ + --config standard + + DATACRUMBS_USERS ALL = (root) NOPASSWD: DATACRUMBS_SAFE_START + +Method 2: Scheduler Integration +================================ + +Automatic DataCrumbs management via job scheduler prolog and epilog scripts. This is the recommended approach for production HPC environments. + +Overview +-------- + +The scheduler automatically: + +- Starts DataCrumbs server when job begins (prolog) +- Stops DataCrumbs server when job completes (epilog) +- Isolates tracing to specific jobs +- No user intervention required + +Supported Schedulers +-------------------- + +* **Flux**: Full support with systemd integration +* **Slurm**: Supported via prolog/epilog scripts + +Flux Integration +================ + +DataCrumbs integrates with Flux resource manager using systemd services and prolog/epilog scripts. + +For complete Flux deployment instructions, see :doc:`flux_integration`. + +Quick Flux Setup +---------------- + +**Step 1: Install systemd service** + +.. code-block:: bash + + # Copy service file to all nodes + for node in node{1..10}; do + sudo scp $PREFIX/etc/datacrumbs/systemd/datacrumbs@.service \ + $node:/etc/systemd/system/ + done + + # Reload systemd + sudo systemctl daemon-reload + +**Step 2: Install prolog/epilog scripts** + +.. code-block:: bash + + # On all Flux nodes + sudo ln -s $PREFIX/sbin/datacrumbs_service_run.sh \ + /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + + sudo ln -s $PREFIX/sbin/datacrumbs_service_stop.sh \ + /etc/flux/system/epilog.d/datacrumbs_service_stop.sh + + # Make executable + sudo chmod u+x /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + sudo chmod u+x /etc/flux/system/epilog.d/datacrumbs_service_stop.sh + +**Step 3: Configure Flux job manager** + +Edit ``/etc/flux/system/conf.d/job-manager.toml``: + +.. code-block:: toml + + [job-manager] + plugins = [ + { load = "prolog-job-manager.so" }, + { load = "epilog.so" } + ] + +**Step 4: Install Flux CLI Plugin** + +The Flux CLI plugin can be installed system-wide or per-user. + +**Option A: System-wide installation (recommended for HPC)** + +.. code-block:: bash + + # Create flux plugins directory if it doesn't exist + sudo mkdir -p /etc/flux/cli/plugins + + # Copy the DataCrumbs plugin + sudo cp $PREFIX/etc/datacrumbs/flux/cli/plugins/datacrumbs.py \ + /etc/flux/cli/plugins/ + + # Set permissions for all users + sudo chmod 644 /etc/flux/cli/plugins/datacrumbs.py + +**Option B: Per-user installation** + +.. code-block:: bash + + # Create user plugin directory + mkdir -p ~/plugins + + # Copy the DataCrumbs plugin + cp $PREFIX/etc/datacrumbs/flux/cli/plugins/datacrumbs.py ~/plugins/ + + # Set environment variable (add to ~/.bashrc for persistence) + export FLUX_CLI_PLUGINPATH=~/plugins/ + + # Use with flux commands + flux run --datacrumbs-enable ./my-application + +**Step 5: Restart Flux** + +.. code-block:: bash + + # On broker-0 node + sudo /admin/scripts/flux_reconfig.sh + flux config reload + +Multi-Node Deployment +--------------------- + +Deploy to all nodes in a cluster: + +.. code-block:: bash + + #!/bin/bash + # deploy_datacrumbs.sh + + NODES="node{1..10}" + DATACRUMBS_INSTALL=/opt/datacrumbs + + for node in $(eval echo $NODES); do + echo "Deploying to $node..." + + # Install systemd service + sudo scp ${DATACRUMBS_INSTALL}/etc/datacrumbs/systemd/datacrumbs@.service \ + ${node}:/etc/systemd/system/ + + # Install prolog/epilog via symbolic links + sudo ssh $node << 'EOF' + # Remove old links + rm -f /etc/flux/system/prolog-job-manager.d/datacrumbs* + rm -f /etc/flux/system/epilog.d/datacrumbs* + + # Create new links + ln -s ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh \ + /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + ln -s ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh \ + /etc/flux/system/epilog.d/datacrumbs_service_stop.sh + + # Set permissions + chmod u+x /etc/flux/system/prolog-job-manager.d/datacrumbs* + chmod u+x /etc/flux/system/epilog.d/datacrumbs* + + # Reload systemd + systemctl daemon-reload + EOF + done + + # Install Flux CLI plugin on broker node (system-wide) + echo "Installing Flux CLI plugin" + sudo mkdir -p /etc/flux/cli/plugins + sudo cp ${DATACRUMBS_INSTALL}/etc/datacrumbs/flux/cli/plugins/datacrumbs.py \ + /etc/flux/cli/plugins/ + sudo chmod 644 /etc/flux/cli/plugins/datacrumbs.py + + # Alternative: Install per-user (optional) + # mkdir -p ~/plugins + # cp ${DATACRUMBS_INSTALL}/etc/datacrumbs/flux/cli/plugins/datacrumbs.py ~/plugins/ + # echo "export FLUX_CLI_PLUGINPATH=~/plugins/" >> ~/.bashrc + +User Workflow with Flux +------------------------ + +Users submit jobs normally with optional DataCrumbs flags: + +.. code-block:: bash + + # Enable DataCrumbs for job + flux run -N 4 --datacrumbs-enable ./my-application + + # With composable configuration + flux run -N 4 \ + --datacrumbs-enable \ + --datacrumbs-composite=posix_only \ + ./my-application + +If using per-user plugin installation: + +.. code-block:: bash + + # Set plugin path (or add to ~/.bashrc) + export FLUX_CLI_PLUGINPATH=~/plugins/ + + # Then use flux commands normally + flux run -N 4 --datacrumbs-enable ./my-application + +No explicit DataCrumbs commands needed - prolog/epilog handle everything. + + + +Slurm Integration +================= + +DataCrumbs can be integrated with Slurm using similar prolog/epilog mechanisms. + +Slurm Configuration +------------------- + +**Step 1: Create prolog script** + +Create ``/etc/slurm/prolog.d/datacrumbs.sh``: + +.. code-block:: bash + + #!/bin/bash + # /etc/slurm/prolog.d/datacrumbs.sh + + # Load DataCrumbs environment + export DATACRUMBS_INSTALL=/opt/datacrumbs + source ${DATACRUMBS_INSTALL}/bin/datacrumbs_setup + + # Start DataCrumbs server for job user + if [[ "${SLURM_JOB_USER}" != "" ]]; then + ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh \ + --user ${SLURM_JOB_USER} \ + --jobid ${SLURM_JOB_ID} + fi + +**Step 2: Create epilog script** + +Create ``/etc/slurm/epilog.d/datacrumbs.sh``: + +.. code-block:: bash + + #!/bin/bash + # /etc/slurm/epilog.d/datacrumbs.sh + + export DATACRUMBS_INSTALL=/opt/datacrumbs + source ${DATACRUMBS_INSTALL}/bin/datacrumbs_setup + + # Stop DataCrumbs server for job user + if [[ "${SLURM_JOB_USER}" != "" ]]; then + ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh \ + --user ${SLURM_JOB_USER} \ + --jobid ${SLURM_JOB_ID} + fi + +**Step 3: Configure Slurm** + +Edit ``/etc/slurm/slurm.conf``: + +.. code-block:: ini + + # Enable prolog/epilog + Prolog=/etc/slurm/prolog.d/datacrumbs.sh + Epilog=/etc/slurm/epilog.d/datacrumbs.sh + + # Set timeouts + PrologFlags=Alloc + EpilogMsgTime=30 + +**Step 4: Set permissions and restart** + +.. code-block:: bash + + # Set script permissions + sudo chmod 755 /etc/slurm/prolog.d/datacrumbs.sh + sudo chmod 755 /etc/slurm/epilog.d/datacrumbs.sh + + # Restart Slurm + sudo systemctl restart slurmctld + sudo systemctl restart slurmd + +User Workflow with Slurm +------------------------- + +Users submit jobs normally: + +.. code-block:: bash + + # Submit batch job + sbatch --nodes=4 my-job.sh + + # Interactive job + salloc --nodes=4 + srun ./my-application + +DataCrumbs automatically traces the application. + +Verification and Testing +======================== + +After deployment, verify DataCrumbs is working correctly. + +Test Sudoers Access +------------------- + +.. code-block:: bash + + # As regular user + sudo datacrumbs_server_run.sh --user $USER --verbose + + # Check server is running + ps aux | grep datacrumbs + + # Stop server + sudo datacrumbs_server_stop.sh --user $USER --verbose + +Test Scheduler Integration +--------------------------- + +.. code-block:: bash + + # Submit simple test job (Flux) + flux run -N 1 hostname + + # Check for DataCrumbs traces + ls -la /tmp/datacrumbs_${USER}*/traces/ + + # Submit with explicit enable (Slurm) + sbatch test-job.sh + +Monitor Deployment +------------------ + +Check systemd service status: + +.. code-block:: bash + + # View service status + sudo systemctl status datacrumbs@${USER} + + # View service logs + sudo journalctl -u datacrumbs@${USER} -f + +Check prolog/epilog execution: + +.. code-block:: bash + + # Flux prolog/epilog logs + sudo journalctl -u flux* --no-pager | grep datacrumbs + + # Slurm logs + sudo tail -f /var/log/slurm/slurmctld.log | grep -i prolog + +Troubleshooting Deployment +=========================== + +Common Issues +------------- + +**"Permission denied" when starting server** + +.. code-block:: bash + + # Check sudoers configuration + sudo visudo -c -f /etc/sudoers.d/datacrumbs + + # Verify user is in allowed group + groups $USER + +**Prolog/epilog scripts not executing** + +.. code-block:: bash + + # Flux: Check plugin configuration + flux config get job-manager.plugins + + # Slurm: Check slurm.conf + grep -i prolog /etc/slurm/slurm.conf + + # Verify script permissions + ls -la /etc/flux/system/prolog-job-manager.d/ + ls -la /etc/slurm/prolog.d/ + +**Systemd service fails to start** + +.. code-block:: bash + + # Check service status + sudo systemctl status datacrumbs@${USER} + + # View detailed logs + sudo journalctl -xe -u datacrumbs@${USER} + + # Verify service file + sudo systemctl cat datacrumbs@.service + +**Traces not being generated** + +.. code-block:: bash + + # Check trace directory permissions + ls -la /tmp/datacrumbs_${USER}*/ + + # Verify DataCrumbs binary has correct capabilities + getcap $PREFIX/bin/datacrumbs + + # Should show: cap_bpf,cap_perfmon+ep + +Cleanup and Uninstallation +=========================== + +Remove sudoers configuration: + +.. code-block:: bash + + sudo rm /etc/sudoers.d/datacrumbs + +Remove Flux integration: + +.. code-block:: bash + + # On all nodes + sudo rm /etc/flux/system/prolog-job-manager.d/datacrumbs* + sudo rm /etc/flux/system/epilog.d/datacrumbs* + sudo rm /etc/systemd/system/datacrumbs@.service + sudo systemctl daemon-reload + +Remove Slurm integration: + +.. code-block:: bash + + sudo rm /etc/slurm/prolog.d/datacrumbs.sh + sudo rm /etc/slurm/epilog.d/datacrumbs.sh + # Edit /etc/slurm/slurm.conf to remove Prolog/Epilog lines + sudo systemctl restart slurmctld diff --git a/docs/ebpf_background.rst b/docs/ebpf_background.rst new file mode 100755 index 00000000..50167bdd --- /dev/null +++ b/docs/ebpf_background.rst @@ -0,0 +1,166 @@ +=================== +eBPF Background +=================== + +What is eBPF? +============= + +eBPF (extended Berkeley Packet Filter) is a revolutionary technology that allows running sandboxed programs in the Linux kernel without changing kernel source code or loading kernel modules. Originally designed for network packet filtering, eBPF has evolved into a general-purpose execution engine that can be used for a wide variety of use cases. + +How eBPF Works +============== + +eBPF programs are written in a restricted C subset, compiled to eBPF bytecode, and loaded into the kernel. The kernel verifies the program for safety before executing it, ensuring: + +* **Memory Safety**: Programs cannot access arbitrary memory locations +* **Termination**: Programs must terminate (no infinite loops) +* **Bounded Execution**: Programs have limited instruction count and stack size + +Key Components +-------------- + +1. **eBPF Programs**: Small programs that execute in kernel space +2. **eBPF Maps**: Key-value data structures for sharing data between kernel and user space +3. **eBPF Verifier**: Ensures program safety before execution +4. **BPF Type Format (BTF)**: Provides type information for eBPF programs +5. **Helper Functions**: Kernel-provided functions that eBPF programs can call + +eBPF in DataCrumbs +================== + +DataCrumbs leverages eBPF technology to provide low-overhead I/O tracing capabilities. The tool uses several eBPF features: + +Kprobes and Uprobes +------------------- + +* **Kprobes**: Attach eBPF programs to kernel functions for tracing system calls and kernel-level I/O operations +* **Uprobes**: Attach eBPF programs to user-space functions in libraries (libc, libhdf5, etc.) + +These probes allow DataCrumbs to intercept function calls without modifying the application or kernel code. + +Ring Buffers +------------ + +DataCrumbs uses eBPF ring buffers (introduced in Linux 5.8) for efficient data transfer from kernel to user space. Ring buffers provide: + +* High-throughput event delivery +* Low latency +* Memory efficiency +* Multi-producer, single-consumer semantics + +Maps for State Management +-------------------------- + +eBPF maps store: + +* Process tracking information +* File descriptor mappings +* Thread-local data +* Aggregated statistics + +Advantages of eBPF for I/O Tracing +=================================== + +Minimal Overhead +---------------- + +eBPF programs execute directly in the kernel with JIT compilation, resulting in near-native performance. DataCrumbs typically adds less than 5% overhead to application execution. + +Safety and Stability +-------------------- + +The eBPF verifier ensures that programs cannot crash the kernel or compromise system security. This makes DataCrumbs safe to use in production environments. + +Dynamic Instrumentation +------------------------ + +eBPF programs can be loaded and unloaded dynamically without rebooting the system or restarting applications. This allows DataCrumbs to: + +* Start and stop tracing on demand +* Update probe configurations at runtime +* Trace running applications without interruption + +No Code Modification +-------------------- + +Applications do not need to be recompiled or modified to be traced by DataCrumbs. The tool can trace: + +* Binary-only applications +* Third-party libraries +* System calls +* Custom functions + +eBPF Limitations +================ + +Kernel Version Requirements +--------------------------- + +eBPF features have evolved over time, with different capabilities available in different kernel versions: + +* **Linux 4.18**: Basic eBPF support with compatibility layers +* **Linux 5.1+**: Modern eBPF features +* **Linux 5.8+**: Full modern eBPF features with BPF ring buffers (recommended) + +Stack Size Limits +----------------- + +eBPF programs have a limited stack size (512 bytes). DataCrumbs works around this by: + +* Using per-CPU maps for temporary storage +* Minimizing stack variable usage +* Splitting complex operations across multiple helper functions + +Verifier Restrictions +--------------------- + +The eBPF verifier imposes restrictions on: + +* Loop complexity (bounded loops only in newer kernels) +* Function calls (limited call depth) +* Memory access patterns (must be verified safe) + +DataCrumbs handles these restrictions through careful program design and code generation. + +eBPF Tools and Ecosystem +========================= + +libbpf +------ + +DataCrumbs uses **libbpf** (version 1.5.0+) as the primary library for: + +* Loading eBPF programs into the kernel +* Managing eBPF maps +* Attaching probes to functions +* Handling BTF information + +bpftool +------- + +**bpftool** (version 7.5.0+) is used during the build process for: + +* Generating vmlinux.h (kernel type definitions) +* Creating BPF object files +* Generating skeleton headers for C programs +* Inspecting loaded eBPF programs (debugging) + +BCC vs libbpf +------------- + +DataCrumbs uses the **libbpf** approach rather than BCC (BPF Compiler Collection) because: + +* **Portability**: libbpf-based programs are compiled once and run anywhere +* **Performance**: No runtime compilation overhead +* **Dependencies**: Smaller dependency footprint +* **Distribution**: Easier to package and deploy + +Further Reading +=============== + +For more information about eBPF: + +- `eBPF.io `_ - Official eBPF documentation +- `libbpf Documentation `_ - libbpf API reference +- `Kernel Documentation `_ - Linux kernel eBPF docs +- `BPF Performance Tools `_ - Book by Brendan Gregg diff --git a/docs/flux_integration.rst b/docs/flux_integration.rst new file mode 100755 index 00000000..d77a1b80 --- /dev/null +++ b/docs/flux_integration.rst @@ -0,0 +1,670 @@ +============================ +Flux Scheduler Integration +============================ + +DataCrumbs provides deep integration with the Flux resource manager for automated tracing in HPC environments. This integration enables transparent tracing of batch jobs through Flux job manager prologs/epilogs and systemd service management. + +Overview +======== + +The Flux integration consists of three components: + +1. **Systemd Service**: Manages DataCrumbs server lifecycle +2. **Prolog Script**: Starts DataCrumbs before job execution +3. **Epilog Script**: Stops DataCrumbs after job completion +4. **Flux Plugin**: Provides command-line options for users + +Benefits +-------- + +* **Automatic Tracing**: Jobs are traced transparently without manual server management +* **Per-Job Isolation**: Each job gets its own tracing session +* **Custom Configurations**: Users can specify composable configurations +* **No Code Changes**: Applications remain unmodified +* **Centralized Management**: Administrators control tracing infrastructure + +Architecture +============ + +When a Flux job is submitted with ``--datacrumbs-enable``: + +1. **Prolog Phase** (before job starts): + + - ``datacrumbs_service_run.sh`` is executed + - Systemd service ``datacrumbs@`` is created and started + - DataCrumbs server begins collecting events + - Job waits for server to be ready + +2. **Execution Phase**: + + - Application runs normally with tracing active + - eBPF probes capture I/O events + - Events are written to trace files + +3. **Epilog Phase** (after job completes): + + - ``datacrumbs_service_stop.sh`` is executed + - Systemd service is stopped and disabled + - Server flushes remaining events + - Trace files are finalized + +Installation Steps +================== + +.. note:: + Installation requires root/administrator privileges on all compute nodes. + +Step 1: Enable Flux Prolog/Epilog +---------------------------------- + +Edit the Flux job manager configuration file on the broker node: + +.. code-block:: bash + + # On Flux broker-0 node + sudo vi /etc/flux/system/conf.d/job-manager.toml + +Add or ensure the following configuration: + +.. code-block:: toml + + [job-manager] + + # Enable prolog execution + prolog.command = [ + "/etc/flux/system/prolog-job-manager.d/*", + ] + + # Enable epilog execution + epilog.command = [ + "/etc/flux/system/epilog.d/*", + ] + +Step 2: Install Systemd Service +-------------------------------- + +Install the DataCrumbs systemd service file on all compute nodes: + +**Service file location:** ``/etc/datacrumbs/systemd/datacrumbs@.service`` + +.. code-block:: bash + + # On each compute node + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + + # Create symlink to systemd directory + sudo ln -s ${DATACRUMBS_INSTALL}/etc/datacrumbs/systemd/datacrumbs@.service \\ + /etc/systemd/system/datacrumbs@.service + + # Reload systemd + sudo systemctl daemon-reload + + # Verify service is recognized + systemctl status datacrumbs@test.service + +**Automated deployment** across multiple nodes: + +.. code-block:: bash + + # Example for nodes lead2-lead6, lead9-lead11 + NODES=\"lead{2..6} lead{9..11}\" + + for node in $NODES; do + echo \"Installing on $node\" + ssh $node \"sudo ln -sf ${DATACRUMBS_INSTALL}/etc/datacrumbs/systemd/datacrumbs@.service /etc/systemd/system/ && sudo systemctl daemon-reload\" + done + +Step 3: Install Prolog Script +------------------------------ + +Install the prolog script that starts DataCrumbs: + +**Script location:** ``/sbin/datacrumbs_service_run.sh`` + +.. code-block:: bash + + # On each compute node + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + + # Create symlink to prolog directory + sudo ln -s ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh \\ + /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + + # Make executable + sudo chmod u+x /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + +**Automated deployment:** + +.. code-block:: bash + + NODES=\"lead{2..6} lead{9..11}\" + + for node in $NODES; do + echo \"Installing prolog on $node\" + ssh $node \"sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh /etc/flux/system/prolog-job-manager.d/ && sudo chmod u+x /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh\" + done + +Step 4: Install Epilog Script +------------------------------ + +Install the epilog script that stops DataCrumbs: + +**Script location:** ``/sbin/datacrumbs_service_stop.sh`` + +.. code-block:: bash + + # On each compute node + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + + # Create symlink to epilog directory + sudo ln -s ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh \\ + /etc/flux/system/epilog.d/datacrumbs_service_stop.sh + + # Make executable + sudo chmod u+x /etc/flux/system/epilog.d/datacrumbs_service_stop.sh + +**Automated deployment:** + +.. code-block:: bash + + NODES=\"lead{2..6} lead{9..11}\" + + for node in $NODES; do + echo \"Installing epilog on $node\" + ssh $node \"sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh /etc/flux/system/epilog.d/ && sudo chmod u+x /etc/flux/system/epilog.d/datacrumbs_service_stop.sh\" + done + +Step 5: Install Flux Plugin +---------------------------- + +Install the Flux CLI plugin for DataCrumbs command-line options: + +**Plugin location:** ``/etc/datacrumbs/flux/cli/plugins/datacrumbs.py`` + +.. code-block:: bash + + # On Flux broker node (or all nodes with flux CLI) + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + + # Create flux plugins directory if it doesn't exist + sudo mkdir -p /etc/flux/cli/plugins + + # Copy plugin file + sudo cp ${DATACRUMBS_INSTALL}/etc/datacrumbs/flux/cli/plugins/datacrumbs.py \\ + /etc/flux/cli/plugins/ + + # Set permissions + sudo chmod 644 /etc/flux/cli/plugins/datacrumbs.py + +**Verify plugin installation:** + +.. code-block:: bash + + # Check if plugin is loaded + flux run --help | grep datacrumbs + + # Should show: + # --datacrumbs-enable Enable datacrumbs + # --datacrumbs-composite COMPOSITE + # Set composite name for datacrumbs + +Step 6: Restart Flux (if needed) +--------------------------------- + +After modifying ``job-manager.toml``, reload Flux configuration: + +.. code-block:: bash + + # On broker-0 node only + flux config reload + +If prolog/epilog entries were added for the first time, a full Flux restart may be required. Consult your system administrator. + +Complete Installation Script +============================= + +Here's a complete script for deploying across multiple nodes: + +.. code-block:: bash + + #!/bin/bash + # deploy_datacrumbs_flux.sh + + # Configuration + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + NODES=\"lead{2..6} lead{9..11}\" + + echo \"Deploying DataCrumbs Flux integration...\" + + # Deploy to each node + for node in $(eval echo $NODES); do + echo \"==========================================\" + echo \"Deploying to $node\" + echo \"==========================================\" + + ssh $node << EOF + # Install systemd service + sudo ln -sf ${DATACRUMBS_INSTALL}/etc/datacrumbs/systemd/datacrumbs@.service \\ + /etc/systemd/system/datacrumbs@.service + sudo systemctl daemon-reload + + # Install prolog script + sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh \\ + /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + sudo chmod u+x /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + + # Install epilog script + sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh \\ + /etc/flux/system/epilog.d/datacrumbs_service_stop.sh + sudo chmod u+x /etc/flux/system/epilog.d/datacrumbs_service_stop.sh + + # Clean old runtime files + sudo rm -rf /tmp/datacrumbs* + sudo rm -rf /var/run/datacrumbs* + + echo \"✓ Installation complete on $node\" + EOF + done + + # Install Flux plugin on broker node + echo \"==========================================\" + echo \"Installing Flux plugin\" + echo \"==========================================\" + sudo mkdir -p /etc/flux/cli/plugins + sudo cp ${DATACRUMBS_INSTALL}/etc/datacrumbs/flux/cli/plugins/datacrumbs.py \\ + /etc/flux/cli/plugins/ + sudo chmod 644 /etc/flux/cli/plugins/datacrumbs.py + + echo \"✓ Flux plugin installed\" + echo \"\" + echo \"==========================================\" + echo \"Deployment complete!\" + echo \"==========================================\" + echo \"\" + echo \"Next steps:\" + echo \"1. Verify job-manager.toml has prolog/epilog configured\" + echo \"2. Run: flux config reload (on broker-0)\" + echo \"3. Test: flux run --datacrumbs-enable hostname\" + +Usage +===== + +Basic Usage +----------- + +Enable DataCrumbs for a Flux job: + +.. code-block:: bash + + flux run --datacrumbs-enable [OPTIONS] COMMAND + +Example: + +.. code-block:: bash + + # Single node job + flux run --datacrumbs-enable hostname + + # Multi-node job + flux run --datacrumbs-enable -N 4 -n 32 ./myapp + + # MPI application (Flux handles launch automatically) + flux run --datacrumbs-enable -N 8 -n 64 ./parallel_app + +With Custom Composable Configuration +------------------------------------- + +Specify a custom composable configuration: + +.. code-block:: bash + + flux run --datacrumbs-enable --datacrumbs-composite=CONFIG_NAME [OPTIONS] COMMAND + +Example: + +.. code-block:: bash + + # Use POSIX I/O configuration + flux run --datacrumbs-enable --datacrumbs-composite=posix_io \\ + -N 4 -n 32 ./io_benchmark + + # Use HDF5 configuration + flux run --datacrumbs-enable --datacrumbs-composite=hdf5_only \\ + -N 2 -n 16 ./hdf5_writer dataset.h5 + + # Use MPI-IO configuration + flux run --datacrumbs-enable --datacrumbs-composite=mpiio_only \\ + -N 8 -n 64 ./mpi_parallel_io + +Command Reference +================= + +Flux CLI Options +---------------- + +``--datacrumbs-enable`` + Enable DataCrumbs tracing for the job + + - Default: disabled + - No argument required + +``--datacrumbs-composite=NAME`` + Specify custom composable configuration + + - Requires ``--datacrumbs-enable`` + - NAME must be alphanumeric and underscores only + - Composable must exist (created with ``datacrumbs_compose``) + - If not specified, uses default full configuration + +Examples +======== + +Example 1: Simple Job with Tracing +----------------------------------- + +.. code-block:: bash + + # Submit job with tracing enabled + flux run --datacrumbs-enable -n 1 dd if=/dev/zero of=/tmp/test bs=1M count=100 + + # Check trace location (set in configuration) + ls $DATACRUMBS_TRACE_DIR/ + +Example 2: Batch Job with Custom Configuration +----------------------------------------------- + +.. code-block:: bash + + # Create custom configuration (one-time setup) + sudo datacrumbs_compose --action compose \\ + --name io_benchmark \\ + --probes open,close,read,write,pread64,pwrite64 + + # Submit batch job + flux batch --datacrumbs-enable --datacrumbs-composite=io_benchmark <---.pfw.gz + + # With MPI: + trace-----.pfw.gz + +**Example**: + +.. code-block:: bash + + # Single node job + /path/to/traces/25/11/21/trace-haridev-12345-node01-lead.pfw.gz + + # Multi-rank MPI job (4 ranks generate 4 trace files) + /path/to/traces/25/11/21/trace-haridev-67890-0-4-lead.pfw.gz + /path/to/traces/25/11/21/trace-haridev-67890-1-4-lead.pfw.gz + /path/to/traces/25/11/21/trace-haridev-67890-2-4-lead.pfw.gz + /path/to/traces/25/11/21/trace-haridev-67890-3-4-lead.pfw.gz + +Find traces for a specific job: + +.. code-block:: bash + + # Get job ID + JOBID=$(flux jobs --format=\"{id}\" | head -1) + + # Find trace files + find $DATACRUMBS_TRACE_DIR -name \"trace-*-${JOBID}-*.pfw.gz\" + + # List all traces from today + ls -lh $DATACRUMBS_TRACE_DIR/$(date +%y/%m/%d)/trace-*.pfw.gz + +Monitoring and Debugging +========================= + +Check Service Status +-------------------- + +.. code-block:: bash + + # Check if service is running for a job + JOBID= + systemctl status datacrumbs@${JOBID}.service + + # View service logs + sudo journalctl -u datacrumbs@${JOBID}.service -f + +Check Prolog/Epilog Execution +------------------------------ + +.. code-block:: bash + + # View Flux logs for prolog/epilog + flux dmesg | grep datacrumbs + + # View job exceptions + flux job eventlog | grep datacrumbs + +Debug Mode +---------- + +Enable verbose output in prolog/epilog scripts: + +.. code-block:: bash + + # Edit prolog script + sudo vi /etc/flux/system/prolog-job-manager.d/datacrumbs_service_run.sh + + # Add at the beginning: + export DATACRUMBS_VERBOSE=1 + +Troubleshooting +=============== + +Job Hangs at Prolog +-------------------- + +**Symptom**: Job hangs with message \"prolog running\" + +**Cause**: DataCrumbs server failed to start + +**Solution**: + +.. code-block:: bash + + # Check systemd service + sudo journalctl -u \"datacrumbs@*\" --no-pager + + # Check for permission issues + ls -la /var/run/datacrumbs/ + + # Verify server binary exists + ls -la $DATACRUMBS_INSTALL/sbin/datacrumbs + +Composable Not Found +-------------------- + +**Symptom**: Error about missing composable configuration + +**Cause**: Specified composable doesn't exist + +**Solution**: + +.. code-block:: bash + + # List available composables + ls $PREFIX/libexec/datacrumbs/sbin/$USER/ + + # Create if missing + sudo datacrumbs_compose --action compose --name --probes + +No Traces Generated +------------------- + +**Symptom**: Job completes but no trace files (``.pfw.gz``) created + +**Cause**: Multiple possible causes + +**Solution**: + +.. code-block:: bash + + # Check if trace files exist with correct naming + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + + # Check trace directory permissions + ls -la $DATACRUMBS_TRACE_DIR + + # Verify application was instrumented + # Applications MUST be tracked or wrapped before tracing works + ldd ./myapp | grep datacrumbs + + # Check service logs + sudo journalctl -u \"datacrumbs@*\" --since \"1 hour ago\" + + # Verify eBPF support + ls /sys/kernel/btf/vmlinux + + # Check for event drops + dmesg | grep -i bpf + +Service Won't Stop +------------------ + +**Symptom**: Epilog fails, service remains running + +**Cause**: Server process not responding + +**Solution**: + +.. code-block:: bash + + # Manually stop service + JOBID= + sudo systemctl stop datacrumbs@${JOBID}.service + + # Force kill if needed + sudo pkill -f \"datacrumbs.*${JOBID}\" + + # Clean up runtime files + sudo rm -rf /var/run/datacrumbs/*${JOBID}* + +Best Practices +============== + +1. **Test First**: Test integration on a single node before cluster-wide deployment +2. **Monitor Overhead**: Check that tracing overhead is acceptable for your workloads +3. **Use Composables**: Create workload-specific configurations to minimize overhead +4. **Regular Cleanup**: Periodically clean old trace files +5. **Log Rotation**: Configure log rotation for DataCrumbs and systemd logs +6. **Resource Limits**: Set appropriate ulimits in systemd service file +7. **Documentation**: Document custom composables and their use cases +8. **User Training**: Educate users on when and how to use ``--datacrumbs-enable`` +9. **Disk Space**: Ensure adequate space for trace files +10. **Backup Configs**: Keep backups of configuration files and composables + +Advanced Configuration +====================== + +Customizing Systemd Service +---------------------------- + +Edit the systemd service file to adjust timeouts, resources, etc.: + +.. code-block:: ini + + # /etc/systemd/system/datacrumbs@.service + [Unit] + Description=DataCrumbs I/O Tracer for Job %i + + [Service] + Type=forking + User=root + EnvironmentFile=/var/run/datacrumbs/datacrumbs-%i.env + ExecStart=/path/to/datacrumbs/sbin/datacrumbs ... + TimeoutStartSec=120s + TimeoutStopSec=60s + LimitNOFILE=1048576 + LimitMEMLOCK=infinity + +Per-User Trace Directories +--------------------------- + +Configure per-user trace directories in the project configuration: + +.. code-block:: yaml + + # project.yaml + trace: + dir_pattern: /scratch/${USER}/traces/%YY%/%MM%/%DD% + +Resource Quotas +--------------- + +Limit trace file size and count per user (filesystem-dependent): + +.. code-block:: bash + + # Example with XFS quotas + xfs_quota -x -c 'limit -u bsoft=100g bhard=120g $USER' /scratch + +Conditional Tracing +------------------- + +Enable tracing only for specific user groups or applications (modify prolog script): + +.. code-block:: bash + + # In datacrumbs_service_run.sh + # Only trace for specific users + if [[ ! \" user1 user2 user3 \" =~ \" $FLUX_JOB_USER \" ]]; then + exit 0 # Skip tracing + fi diff --git a/docs/index.rst b/docs/index.rst index e6f8ff48..a0e705e4 100755 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,20 +1,50 @@ -.. DFTracer documentation master file, created by +.. DataCrumbs documentation master file, created by sphinx-quickstart on Sun Nov 26 20:15:18 2017. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. =============================================================================== -DFTracer: is a library for profiling I/O calls and application functions. +DataCrumbs: eBPF-based I/O Profiling and Tracing for HPC Applications =============================================================================== +DataCrumbs is a comprehensive I/O profiling and tracing tool designed for high-performance computing (HPC) environments. +It leverages eBPF (extended Berkeley Packet Filter) technology to provide low-overhead, real-time monitoring and +analysis of application I/O behavior at scale. + +.. toctree:: + :maxdepth: 2 + :caption: Getting Started + + introduction + ebpf_background + dependencies + +.. toctree:: + :maxdepth: 2 + :caption: Building and Setup + + build + setup + .. toctree:: :maxdepth: 2 :caption: User Guide + usage + integration + composability + +.. toctree:: + :maxdepth: 2 + :caption: Advanced Topics + + flux_integration + +.. toctree:: + :maxdepth: 2 + :caption: Legacy Documentation + overview - build - run - ================== Indices and tables diff --git a/docs/integration.rst b/docs/integration.rst new file mode 100755 index 00000000..f4f6f72d --- /dev/null +++ b/docs/integration.rst @@ -0,0 +1,762 @@ +========================= +Application Integration +========================= + +DataCrumbs provides multiple methods for integrating tracing into your applications without requiring source code modifications. + +Integration Methods +=================== + +DataCrumbs supports three primary integration methods: + +1. **Binary Tracking** (``datacrumbs_track``): Permanently modify executable to include tracing **(Recommended)** +2. **LD_PRELOAD Wrapping** (``datacrumbs_wrap``): Dynamically inject tracing at runtime +3. **Wrapper Mode** (``datacrumbs_run``): Automatic tracing with server management + +.. note:: + **Binary tracking is recommended** for most use cases. Tracked applications run normally when DataCrumbs is not active - they simply don't capture trace data. When the DataCrumbs server is running, data is automatically captured. + +Each method has different use cases and trade-offs. + +Method 1: Binary Tracking (Permanent) +====================================== + +Binary tracking uses ``patchelf`` to permanently add DataCrumbs client library as a dependency of your executable. + +When to Use +----------- + +**Recommended for most use cases:** + +- Applications you want traced every time they run +- Production deployments +- Applications that run frequently +- Long-running applications or daemons +- Scenarios where LD_PRELOAD is problematic +- Setuid/setgid binaries + +**Key benefit**: Tracked applications run normally when DataCrumbs is not active. When the server is running, data is captured automatically. When it's not running, the application executes with no tracing overhead. + +How It Works +------------ + +``datacrumbs_track`` modifies the ELF binary to add ``libdatacrumbs_client.so`` to the ``DT_NEEDED`` entries. The library is automatically loaded when the application starts. + +Tracking an Application +----------------------- + +**Command Reference:** + +.. code-block:: bash + + datacrumbs_track --executable PATH [OPTIONS] + +**Arguments:** + +``--executable PATH`` + Path to the executable to instrument (required) + +**Common Options:** + +``--verbose`` + Enable detailed output showing each step of the tracking process + +``--quiet`` + Suppress informational messages + +``--dry-run`` + Show what would be done without modifying the binary + +**Examples:** + +.. code-block:: bash + + # Track a local binary + datacrumbs_track --executable ./myapp + + # Track with verbose output + datacrumbs_track --executable ./myapp --verbose + + # Dry-run to see what would happen + datacrumbs_track --executable ./myapp --dry-run + + # Track a binary in PATH + datacrumbs_track --executable $(which python3) + + # Track with absolute path (quiet mode) + datacrumbs_track --executable /usr/local/bin/simulation --quiet + +Verification +------------ + +Verify the executable is tracked: + +.. code-block:: bash + + # Check for DataCrumbs library dependency + ldd ./myapp | grep datacrumbs + + # Should show: + # libdatacrumbs_client.so => /path/to/lib/libdatacrumbs_client.so + +Using Tracked Applications +--------------------------- + +Once tracked, the application is automatically traced whenever it runs (if the DataCrumbs server is active): + +.. code-block:: bash + + # Start server + sudo datacrumbs_server_run.sh + + # Run tracked application normally + ./myapp arg1 arg2 + + # Application is automatically traced + # Traces saved to $DATACRUMBS_TRACE_DIR + +Untracking an Application +-------------------------- + +Remove DataCrumbs instrumentation from a binary: + +**Command Reference:** + +.. code-block:: bash + + datacrumbs_untrack --executable PATH [OPTIONS] + +**Arguments:** + +``--executable PATH`` + Path to the executable to uninstrument (required) + +**Common Options:** + +``--verbose`` + Enable detailed output + +``--quiet`` + Suppress informational messages + +``--dry-run`` + Show what would be done without modifying the binary + +**Examples:** + +.. code-block:: bash + + # Untrack a binary + datacrumbs_untrack --executable ./myapp + + # Untrack with verbose output + datacrumbs_untrack --executable ./myapp --verbose + + # Dry-run to verify before untracking + datacrumbs_untrack --executable ./myapp --dry-run + + # Verify removal + ldd ./myapp | grep datacrumbs + # Should show no output + +Important Considerations +------------------------ + +**Backup Your Binaries** + +Always keep a backup before tracking: + +.. code-block:: bash + + cp myapp myapp.original + datacrumbs_track --executable myapp + +**Permissions** + +You need write permission on the binary: + +**Library Path** + +Ensure ``libdatacrumbs_client.so`` is in the library path: + +.. code-block:: bash + + # Add to LD_LIBRARY_PATH + export LD_LIBRARY_PATH=/path/to/datacrumbs/lib:$LD_LIBRARY_PATH + + # Or use module + module load datacrumbs/0.0.4 + +**Binary Compatibility** + +- Works with dynamically linked executables +- Does not work with static binaries +- May not work with binaries that check their own integrity + +Method 2: LD_PRELOAD Wrapping (Dynamic) +======================================== + +LD_PRELOAD wrapping dynamically injects the DataCrumbs client library without modifying the binary. + +When to Use +----------- + +- One-time or ad-hoc tracing +- Testing DataCrumbs before permanent tracking +- Binaries you cannot modify +- Applications where binary modification is undesirable +- System binaries or read-only executables + +How It Works +------------ + +``datacrumbs_wrap`` sets ``LD_PRELOAD`` to load ``libdatacrumbs_client.so`` before executing your application. The library intercepts I/O calls at runtime. + +Wrapping an Application +----------------------- + +**Command Reference:** + +.. code-block:: bash + + datacrumbs_wrap COMMAND [ARGS...] + +**Arguments:** + +``COMMAND`` + Command to execute with tracing + +``ARGS`` + Arguments to pass to the command + +**Examples:** + +.. code-block:: bash + + # Wrap a simple command + datacrumbs_wrap ./myapp input.dat + + # Wrap with multiple arguments + datacrumbs_wrap python3 analysis.py --input data.csv --output results.txt + + # Wrap a pipeline + datacrumbs_wrap bash -c "cat file.txt | ./process > output.txt" + + # Wrap with environment variables + datacrumbs_wrap env VAR=value ./myapp + +Using with Server +----------------- + +For LD_PRELOAD wrapping to work, the DataCrumbs server must be running: + +.. code-block:: bash + + # Start server + sudo datacrumbs_server_run.sh + + # Wrap and run application + datacrumbs_wrap ./myapp + + # Stop server when done + sudo datacrumbs_server_stop.sh + +Manual LD_PRELOAD +----------------- + +You can also manually set LD_PRELOAD: + +.. code-block:: bash + + # Set LD_PRELOAD + export LD_PRELOAD=/path/to/lib/libdatacrumbs_client.so + + # Run application + ./myapp + + # Unset when done + unset LD_PRELOAD + +Important Considerations +------------------------ + +**Security Restrictions** + +LD_PRELOAD is ignored for setuid/setgid binaries for security reasons: + +.. code-block:: bash + + # This won't work if myapp is setuid + datacrumbs_wrap /usr/bin/setuid_app + +**Environment Inheritance** + +Child processes inherit LD_PRELOAD: + +.. code-block:: bash + + # All processes in the pipeline are traced + datacrumbs_wrap bash -c "./step1 | ./step2 | ./step3" + +**Library Conflicts** + +Some applications may conflict with LD_PRELOAD: + +.. code-block:: bash + + # If application checks LD_PRELOAD + # Use track method instead + +**Performance** + +LD_PRELOAD adds minimal overhead compared to tracking (both use the same client library). + +Method 3: Wrapper Mode (Managed) +================================= + +The ``datacrumbs_run`` wrapper provides the easiest integration with automatic server management. + +When to Use +----------- + +- Quick, one-off tracing sessions +- Applications where you want automatic setup/teardown +- Testing or debugging scenarios +- When you don't want to manage the server manually + +How It Works +------------ + +``datacrumbs_run`` automatically: + +1. Configures the environment +2. Starts the DataCrumbs server +3. Runs your application (with internal tracking) +4. Stops the server +5. Collects and saves traces + +Using Wrapper Mode +------------------ + +See :doc:`usage` for detailed ``datacrumbs_run`` documentation. + +.. code-block:: bash + + # Simple usage + datacrumbs_run --app "./myapp args" + + # MPI application (launcher configured in project.yaml) + datacrumbs_run --app "./parallel_app" --enable_mpi --nodes 4 --ppn 8 + +Integration Comparison +====================== + ++------------------+-------------------+------------------+-------------------+-------------------+ +| Feature | Track | LD_PRELOAD | Wrapper | Best For | ++==================+===================+==================+===================+===================+ +| Setup Effort | One-time | Every run | Every run | Varies | ++------------------+-------------------+------------------+-------------------+-------------------+ +| Binary Modified | Yes | No | No | LD_PRELOAD/Wrap | ++------------------+-------------------+------------------+-------------------+-------------------+ +| Permanent | Yes | No | No | Track | ++------------------+-------------------+------------------+-------------------+-------------------+ +| Server Needed | Manual start | Manual start | Auto-managed | Wrapper | ++------------------+-------------------+------------------+-------------------+-------------------+ +| Overhead | Minimal | Minimal | Minimal | All equal | ++------------------+-------------------+------------------+-------------------+-------------------+ +| Setuid Works | Yes | No | No | Track | ++------------------+-------------------+------------------+-------------------+-------------------+ +| Ease of Use | Medium | Easy | Easiest | Wrapper | ++------------------+-------------------+------------------+-------------------+-------------------+ +| Production Use | Yes | Yes | Yes | All suitable | ++------------------+-------------------+------------------+-------------------+-------------------+ + +Recommendations +--------------- + +**Use Track (Recommended):** + +- **Primary recommendation for most use cases** +- Applications run normally when DataCrumbs is not running (no overhead) +- Data is captured automatically when DataCrumbs server is active +- One-time setup, always ready for tracing +- Suitable for production environments +- Works with setuid/setgid binaries + +**Use LD_PRELOAD when:** + +- You need one-time tracing +- Cannot modify binaries (system binaries, read-only filesystems) +- Testing different configurations +- Temporary tracing needs + +**Use Wrapper when:** + +- You want simplicity for ad-hoc analysis +- One-off analysis sessions +- Automatic server management is desired +- MPI applications with scheduler integration + +Advanced Integration Patterns +============================== + +Pattern 1: Selective Function Tracing +-------------------------------------- + +Configure which functions to trace by editing the host configuration file: + +.. code-block:: yaml + + # etc/datacrumbs/configs/myhost.yaml + capture_probes: + - name: open + library: libc + enabled: true + - name: H5Fopen + library: libhdf5 + enabled: true + - name: MPI_File_open + library: libmpi + enabled: false # Disabled + +Rebuild DataCrumbs after configuration changes. + +Pattern 2: Multi-Stage Pipeline Tracing +---------------------------------------- + +Trace complex pipelines with multiple stages: + +.. code-block:: bash + + # Start server once + sudo datacrumbs_server_run.sh + + # Track all stages + datacrumbs_track --executable ./stage1 + datacrumbs_track --executable ./stage2 + datacrumbs_track --executable ./stage3 + + # Run pipeline (all stages traced) + ./stage1 input.dat | ./stage2 | ./stage3 > output.dat + + # Stop server + sudo datacrumbs_server_stop.sh + +Pattern 3: Mixed Integration +----------------------------- + +Combine different methods for different components: + +.. code-block:: bash + + # Track main application permanently + datacrumbs_track --executable ./mainapp + + # Start server + sudo datacrumbs_server_run.sh + + # Run main app (tracked) + ./mainapp & + + # Run helper with wrap (not tracked permanently) + datacrumbs_wrap ./helper_script + + # Stop server + sudo datacrumbs_server_stop.sh + +Pattern 4: Conditional Tracing +------------------------------- + +Enable tracing only when needed: + +.. code-block:: bash + + # Track application + datacrumbs_track --executable ./myapp + + # Run WITHOUT tracing (server not running) + ./myapp # No traces generated + + # Run WITH tracing (start server first) + sudo datacrumbs_server_run.sh + ./myapp # Traces generated + sudo datacrumbs_server_stop.sh + +Integration with Build Systems +=============================== + +Makefile Integration +-------------------- + +.. code-block:: makefile + + # Makefile + myapp: src/*.c + $(CC) -o myapp src/*.c + + track: myapp + datacrumbs_track --executable ./myapp + + run-traced: track + sudo datacrumbs_server_run.sh + ./myapp + sudo datacrumbs_server_stop.sh + + untrack: + datacrumbs_untrack --executable ./myapp + +CMake Integration +----------------- + +.. code-block:: cmake + + # CMakeLists.txt + add_executable(myapp src/main.c) + + # Add custom target for tracking + add_custom_target(track + COMMAND datacrumbs_track --executable $ + DEPENDS myapp + ) + + # Add custom target for traced execution + add_custom_target(run-traced + COMMAND sudo datacrumbs_server_run.sh + COMMAND $ + COMMAND sudo datacrumbs_server_stop.sh + DEPENDS track + ) + +Container Integration +===================== + +Docker +------ + +.. code-block:: dockerfile + + # Dockerfile + FROM ubuntu:22.04 + + # Install DataCrumbs + RUN apt-get update && apt-get install -y datacrumbs + + # Copy application + COPY myapp /usr/local/bin/ + + # Track application at build time + RUN datacrumbs_track --executable /usr/local/bin/myapp + + # Run with tracing + CMD ["bash", "-c", "datacrumbs_server_run.sh && myapp && datacrumbs_server_stop.sh"] + +Running the container: + +.. code-block:: bash + + # Run with eBPF capabilities + docker run --privileged --cap-add=ALL \ + -v /sys/kernel/debug:/sys/kernel/debug:rw \ + myapp-traced + +Singularity +----------- + +.. code-block:: bash + + # Build container with DataCrumbs + singularity build myapp.sif myapp.def + + # Run with tracing + singularity exec --writable-tmpfs myapp.sif \ + bash -c "source /opt/datacrumbs/bin/datacrumbs_setup && \ + datacrumbs_run --app './myapp'" + +Programming Language Integration +================================= + +Python +------ + +Trace Python scripts and their I/O: + +.. code-block:: bash + + # Track Python interpreter + datacrumbs_track --executable $(which python3) + + # Or wrap + datacrumbs_wrap python3 myscript.py + +C/C++ Applications +------------------ + +No special handling needed: + +.. code-block:: bash + + # Compile application + gcc -o myapp myapp.c + + # Track + datacrumbs_track --executable ./myapp + +Fortran +------- + +.. code-block:: bash + + # Compile + gfortran -o simulation simulation.f90 + + # Track + datacrumbs_track --executable ./simulation + +Java +---- + +Trace Java applications' native I/O: + +.. code-block:: bash + + # Wrap Java + datacrumbs_wrap java -jar myapp.jar + +Troubleshooting Integration +============================ + +Tracking Fails +-------------- + +.. code-block:: bash + + # Check if patchelf is installed + which patchelf + + # Install if missing + sudo dnf install patchelf # CentOS/Rocky + sudo apt install patchelf # Ubuntu + + # Verify executable is not static + file ./myapp # Should show "dynamically linked" + +LD_PRELOAD Not Working +---------------------- + +.. code-block:: bash + + # Verify library exists + ls -la $PREFIX/lib/libdatacrumbs_client.so + + # Check LD_LIBRARY_PATH + echo $LD_LIBRARY_PATH | grep datacrumbs + + # Add if missing + export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH + +No Traces Generated +------------------- + +.. code-block:: bash + + # Verify server is running + ps aux | grep datacrumbs + + # Check if application is instrumented + ldd ./myapp | grep datacrumbs + + # Verify trace directory + ls -la $DATACRUMBS_TRACE_DIR + + # Check logs + cat $DATACRUMBS_TRACE_DIR/datacrumbs.log + +Application Crashes After Tracking +----------------------------------- + +.. code-block:: bash + + # Untrack immediately + datacrumbs_untrack --executable ./myapp + + # Check for library conflicts + ldd ./myapp + + # Try LD_PRELOAD method instead + datacrumbs_wrap ./myapp + +Best Practices +============== + +1. **Test First**: Try LD_PRELOAD before permanent tracking +2. **Backup Binaries**: Always keep unmodified copies +3. **Document Tracked Binaries**: Maintain a list of tracked executables +4. **Use Version Control**: Track modified binaries separately +5. **Verify Integration**: Check with ``ldd`` after tracking +6. **Clean Up**: Untrack when no longer needed +7. **Monitor Overhead**: Ensure tracing doesn't impact performance significantly +8. **Use Wrapper for Scripts**: Shell scripts work best with wrapper mode +9. **Check Library Paths**: Ensure DataCrumbs libraries are accessible +10. **Test in Development**: Validate integration before production use + +Examples +======== + +Example 1: Track HDF5 Application +---------------------------------- + +.. code-block:: bash + + # Track the application + datacrumbs_track --executable ./hdf5_writer + + # Verify + ldd ./hdf5_writer | grep datacrumbs + + # Start server + sudo datacrumbs_server_run.sh + + # Run application (automatically traced) + ./hdf5_writer output.h5 + + # Stop server + sudo datacrumbs_server_stop.sh + + # View trace files (.pfw.gz format) + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + +Example 2: Trace System Utility +-------------------------------- + +.. code-block:: bash + + # Cannot modify system binary, use wrap + sudo datacrumbs_server_run.sh + + # Wrap the system command + datacrumbs_wrap tar -czf backup.tar.gz /data + + # Stop server + sudo datacrumbs_server_stop.sh + + # View trace file + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + +Example 3: Pipeline Integration +-------------------------------- + +.. code-block:: bash + + # Track all components + datacrumbs_track --executable ./preprocess + datacrumbs_track --executable ./compute + datacrumbs_track --executable ./postprocess + + # Start server + sudo datacrumbs_server_run.sh + + # Run pipeline + ./preprocess input.dat | ./compute | ./postprocess > output.dat + + # All three stages traced + sudo datacrumbs_server_stop.sh diff --git a/docs/introduction.rst b/docs/introduction.rst new file mode 100755 index 00000000..3e0cdc9d --- /dev/null +++ b/docs/introduction.rst @@ -0,0 +1,101 @@ +============ +Introduction +============ + +Overview +======== + +DataCrumbs is a comprehensive I/O profiling and tracing tool designed for high-performance computing (HPC) environments. It leverages eBPF (extended Berkeley Packet Filter) technology to provide low-overhead, real-time monitoring and analysis of application I/O behavior at scale. + +Key Features +============ + +Low-Overhead Profiling +---------------------- + +DataCrumbs uses eBPF to achieve minimal performance overhead while capturing detailed I/O traces. Unlike traditional profiling tools that may introduce significant overhead, DataCrumbs operates in kernel space, minimizing interference with application execution. + +Scalable Architecture +--------------------- + +Designed for large-scale HPC systems, DataCrumbs can efficiently trace I/O operations across distributed applications running on thousands of nodes. The tool supports multiple job schedulers including: + +* FLUX +* SLURM +* OpenMPI +* Standalone execution + +Multi-Layer Tracing +------------------- + +DataCrumbs captures I/O operations at multiple layers: + +* **System Calls**: Low-level I/O operations (open, read, write, close, etc.) +* **POSIX I/O**: Standard C library I/O functions +* **MPI-IO**: Parallel I/O operations in MPI applications +* **HDF5**: High-level I/O library operations +* **Custom Functions**: User-defined function tracing through configuration + +Flexible Deployment +------------------- + +DataCrumbs supports multiple deployment modes: + +1. **Server Mode**: Long-running server process for continuous monitoring +2. **Service Mode**: Systemd service integration for managed execution +3. **Wrapper Mode**: Direct application wrapping for single executions +4. **Composable Mode**: Custom probe configurations for specific use cases + +Real-Time Analysis +------------------ + +The tool provides: + +* DFTracer format output (``.pfw.gz``) for efficient trace storage and analysis +* Event aggregation and correlation across processes +* Trace compression for efficient storage +* Real-time event processing with ring buffers + +Use Cases +========= + +DataCrumbs is particularly useful for: + +* **Performance Analysis**: Understanding I/O bottlenecks in HPC applications +* **I/O Pattern Discovery**: Identifying access patterns and optimization opportunities +* **Debugging**: Tracing file access patterns to diagnose issues +* **System Monitoring**: Continuous monitoring of I/O behavior in production environments +* **Research**: Studying I/O characteristics of scientific applications + +Architecture +============ + +DataCrumbs consists of several key components: + +1. **eBPF Probes**: Kernel-space programs that capture events with minimal overhead +2. **Explorer**: Discovers available probes and functions in libraries +3. **Generator**: Creates custom eBPF programs based on configuration +4. **Server**: User-space daemon that collects and processes events +5. **Client Library**: Injected into applications for tracking +6. **Writer**: Formats and outputs trace data in DFTracer format (``.pfw.gz``) + +Target Applications +=================== + +DataCrumbs is designed for profiling: + +* MPI applications +* Parallel I/O workloads +* Scientific computing applications +* Data-intensive applications +* Any application using POSIX, HDF5, MPI-IO, or custom I/O libraries + +License +======= + +DataCrumbs is developed at Lawrence Livermore National Laboratory and released under an open-source license. See the LICENSE file in the repository for details. + +Citation +======== + +If you use DataCrumbs in your research, please cite the appropriate publication. See CITATION.cff in the repository for citation information. diff --git a/docs/run.rst b/docs/run.rst old mode 100644 new mode 100755 index e6b2a2b7..a39d934f --- a/docs/run.rst +++ b/docs/run.rst @@ -1,7 +1,14 @@ -Run Datacrumbs -============== +=============== +Running DataCrumbs +=============== -To run Datacrumbs tests, follow these instructions: +This guide describes how to run DataCrumbs tests and trace applications, including examples with IOR benchmarking. + +Basic Test Execution +==================== + +Running Tests with CTest +------------------------ 1. **Navigate to the build directory:** @@ -15,28 +22,343 @@ To run Datacrumbs tests, follow these instructions: ctest -N -3. **View arguments for the Datacrumbs start test which is Daemonize script:** +3. **View arguments for the DataCrumbs start test (Daemonize script):** .. code-block:: bash ctest -R datacrumbs_start -VV - This will show verbose output and the arguments used for the `datacrumbs_start` test. + This will show verbose output and the arguments used for the ``datacrumbs_start`` test. -4. **View arguments for the Datacrumbs run test which is sync script:** +4. **View arguments for the DataCrumbs run test (sync script):** .. code-block:: bash ctest -R datacrumbs_run -VV - This will show verbose output and the arguments used for the `datacrumbs_run` test. + This will show verbose output and the arguments used for the ``datacrumbs_run`` test. -Refer to your project's `ctest` configuration for additional test options. - -5. **Run the `test_simple_dd` test:** +5. **Run the ``test_simple_dd`` test:** .. code-block:: bash ctest -R test_simple_dd -VV - This will execute the `test_simple_dd` test with verbose output from the build directory. \ No newline at end of file + This will execute the ``test_simple_dd`` test with verbose output from the build directory. + +Running Applications with IOR +============================== + +IOR (Interleaved Or Random) is a parallel file system benchmarking tool commonly used in HPC environments. This section demonstrates how to install and run IOR with DataCrumbs tracing. + +Installing IOR +-------------- + +To install IOR, follow these steps: + +1. **Clone the IOR repository:** + + .. code-block:: bash + + git clone https://github.com/hpc/ior.git + cd ior + +2. **Build IOR:** + + .. code-block:: bash + + ./bootstrap + ./configure --prefix=$PREFIX + make -j + make install + +3. **(Optional) Install system-wide:** + + .. code-block:: bash + + sudo make install + +For more details, refer to the official IOR documentation: https://github.com/hpc/ior + +Running IOR Benchmarks +---------------------- + +**Basic IOR Test:** + +.. code-block:: bash + + # Run a simple IOR test + ior -a POSIX -b 1m -t 256k -s 16 -F + +This runs IOR with: +- POSIX I/O API +- 1MB block size +- 256KB transfer size +- 16 segments per task +- File-per-process mode + +**Parallel IOR with MPI:** + +.. code-block:: bash + + # Run IOR with MPI across multiple processes + mpirun -np 4 ior -a MPIIO -b 4m -t 1m -s 8 -o /scratch/testfile + +This runs IOR with: +- MPI-IO API +- 4 MPI processes +- 4MB block size +- 1MB transfer size +- 8 segments per task +- Output file at ``/scratch/testfile`` + +Tracing IOR with DataCrumbs +---------------------------- + +**Prerequisites**: Instrument IOR before tracing: + +.. code-block:: bash + + # Track IOR binary (one-time setup) + datacrumbs_track --executable $(which ior) + + # Or use wrap mode (no pre-tracking needed) + +**Method 1: Using datacrumbs_run (Synchronous)** + +.. code-block:: bash + + # Trace a single-node IOR run (if IOR is tracked) + datacrumbs_run --app-name ior-test -- ior -a POSIX -b 1m -t 256k -s 16 -F + + # Or with wrap mode + datacrumbs_run --app-name ior-test -- datacrumbs_wrap ior -a POSIX -b 1m -t 256k -s 16 -F + +**Method 2: Using datacrumbs_server (Daemon Mode)** + +.. code-block:: bash + + # Start DataCrumbs daemon + datacrumbs_server_run.sh + + # Run your IOR benchmark + mpirun -np 8 ior -a MPIIO -b 4m -t 1m -s 8 -o /scratch/testfile + + # Stop DataCrumbs daemon + datacrumbs_server_stop.sh + +**Method 3: Multi-node IOR with Flux** + +.. code-block:: bash + + # Using Flux scheduler for multi-node execution + flux run -N 4 -n 16 datacrumbs_run --app-name ior-multinode -- \ + ior -a MPIIO -b 8m -t 2m -s 16 -o /lustre/testfile + +**Method 4: Multi-node IOR with SLURM** + +.. code-block:: bash + + # Using SLURM scheduler for multi-node execution + srun -N 4 -n 16 datacrumbs_run --app-name ior-multinode -- \ + ior -a MPIIO -b 8m -t 2m -s 16 -o /lustre/testfile + +IOR Test Examples with DataCrumbs +---------------------------------- + +**Example 1: Write Performance Test** + +.. code-block:: bash + + # Test write performance with different block sizes + datacrumbs_run --app-name ior-write-1m -- ior -a POSIX -w -b 1m -t 256k -s 32 -F + datacrumbs_run --app-name ior-write-4m -- ior -a POSIX -w -b 4m -t 1m -s 32 -F + datacrumbs_run --app-name ior-write-16m -- ior -a POSIX -w -b 16m -t 4m -s 32 -F + +**Example 2: Read Performance Test** + +.. code-block:: bash + + # Test read performance (requires existing files from write test) + datacrumbs_run --app-name ior-read-1m -- ior -a POSIX -r -b 1m -t 256k -s 32 -F + +**Example 3: Collective I/O Test** + +.. code-block:: bash + + # Test MPI-IO collective operations + mpirun -np 4 datacrumbs_run --app-name ior-collective -- \ + ior -a MPIIO -b 4m -t 1m -s 16 -c -o /scratch/collective-test + +The ``-c`` flag enables collective I/O operations. + +**Example 4: Random I/O Test** + +.. code-block:: bash + + # Test random I/O patterns + datacrumbs_run --app-name ior-random -- \ + ior -a POSIX -b 1m -t 64k -s 64 -z -o /scratch/random-test + +The ``-z`` flag enables random I/O instead of sequential. + +**Example 5: Shared File Test** + +.. code-block:: bash + + # All processes access a single shared file + mpirun -np 8 datacrumbs_run --app-name ior-shared -- \ + ior -a MPIIO -b 2m -t 512k -s 16 -o /scratch/shared-file + +Without the ``-F`` flag, all processes use a single shared file. + +Analyzing IOR Traces +-------------------- + +After running IOR with DataCrumbs, analyze the generated traces: + +.. code-block:: bash + + # View trace files in DFTracer format (.pfw.gz) + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + + # Example output: + # trace-root-12345-node01-docker.pfw.gz + # trace-haridev-67890-0-4-lead.pfw.gz (MPI rank 0) + # trace-haridev-67890-1-4-lead.pfw.gz (MPI rank 1) + +**Using DFTracer Utilities**: + +.. code-block:: bash + + # Install DFTracer utilities + pip install dftracer-utils + + # Merge traces from all MPI ranks + dftracer-merge --input "trace-*-67890-*.pfw.gz" --output ior-merged.pfw.gz + + # Get I/O statistics + dftracer-stats --input ior-merged.pfw.gz + + # Split large trace for easier handling + dftracer-split --input ior-merged.pfw.gz --output-dir ior-traces/ + +**Documentation**: https://dftracer.readthedocs.io/en/latest/bash_utilities.html + +**Using DFAnalyzer for Detailed Analysis**: + +.. code-block:: bash + + # Install DFAnalyzer + pip install dfanalyzer + + # Generate comprehensive report + dfanalyzer analyze --input ior-merged.pfw.gz --output ior-report.html + + # Interactive analysis session + dfanalyzer interactive --input ior-merged.pfw.gz + +**Documentation**: https://dftracer.readthedocs.io/projects/analyzer/en/latest/getting-started.html#usage + +**Trace Format**: DFTracer format - see https://dftracer.readthedocs.io/en/latest/trace_format.html + +For DataCrumbs-specific Jupyter notebook examples, refer to the ``analysis/`` directory in the repository. + +Advanced Configuration +====================== + +Trace and Log Directory Configuration +-------------------------------------- + +**Trace Directory** (Administrator Only): + +The trace directory is configured by the system administrator during installation and **cannot be changed by users at runtime**. + +.. code-block:: bash + + # Administrator sets trace directory at build time: + # cmake -DDATACRUMBS_CONFIGURED_TRACE_DIR=/scratch/traces .. + # + # Or via project YAML configuration: + # trace_dir: /lustre/traces + # trace_dir_pattern: /scratch/traces/%YY%/%MM%/%DD% + +**Log Directory**: + +Log directory may be configurable depending on administrator settings: + +.. code-block:: bash + + # If enabled by administrator, users can set log directory + export DATACRUMBS_CONFIGURED_LOG_DIR=/scratch/logs + datacrumbs_run --app-name myapp -- ./myapp + +Filtering Traced Paths +----------------------- + +**Administrator Configuration Only** + +Path filtering must be configured at build time by the system administrator: + +.. code-block:: bash + + # Administrator configures path filtering at build time + cmake -DDATACRUMBS_INCLUSION_PATH=/scratch/data .. + make install + + # After installation, only I/O to /scratch/data will be traced + datacrumbs_run --app-name filtered-app -- ./myapp + +.. note:: + Users cannot change the inclusion path at runtime. This must be set during installation. + +Troubleshooting +=============== + +Permission Issues +----------------- + +If you encounter permission errors: + +.. code-block:: bash + + # Ensure eBPF capabilities (datacrumbs binary is in sbin) + sudo setcap cap_sys_admin,cap_bpf,cap_perfmon+ep $PREFIX/sbin/datacrumbs + + # Or run with sudo + sudo -E datacrumbs_run --app-name myapp -- ./myapp + +Missing Traces +-------------- + +If traces are not generated: + +.. code-block:: bash + + # Check if DataCrumbs is running + ps aux | grep datacrumbs + + # Check logs (default is /tmp unless configured otherwise) + cat /tmp/datacrumbs*.log + # Or if you know your configured log directory: + # cat ${DATACRUMBS_CONFIGURED_LOG_DIR}/datacrumbs*.log + + # Verify trace directory permissions (default is /tmp) + ls -ld /tmp/*trace* 2>/dev/null || echo "No trace files found" + +Performance Impact +------------------ + +To reduce tracing overhead: + +.. code-block:: bash + + # Use profiling mode instead of full tracing + cmake -DDATACRUMBS_MODE_STR=PROFILE .. + make install + + # Skip small events + cmake -DDATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS=10000 .. + make install + +For more information on running DataCrumbs in production environments, see the :doc:`usage` section. \ No newline at end of file diff --git a/docs/setup.rst b/docs/setup.rst new file mode 100755 index 00000000..9dad8442 --- /dev/null +++ b/docs/setup.rst @@ -0,0 +1,1551 @@ +==================== +Environment Setup +==================== + +After building and installing DataCrumbs, you need to set up your environment to use the tools. + +Setup Script Overview +===================== + +DataCrumbs provides a ``datacrumbs_setup`` script that configures the environment for running tracing sessions. + +Basic Setup +=========== + +Source the setup script to configure your environment: + +.. code-block:: bash + + # If using environment modules + module use /path/to/install/etc/datacrumbs/modulefiles + module load datacrumbs/ + + # Or source directly + source /path/to/install/bin/datacrumbs_setup + +What Setup Does +=============== + +The setup script: + +1. **Detects User Context**: Determines if running as root or regular user +2. **Loads Configuration**: Reads project and host-specific YAML configuration +3. **Sets Environment Variables**: Configures paths and runtime parameters +4. **Configures Resource Limits**: Sets appropriate ulimits for eBPF operations +5. **Creates Aliases**: Provides convenient command shortcuts +6. **Loads Module (optional)**: Integrates with environment modules if available + +Environment Variables Set +========================= + +After sourcing the setup script, the following variables are available: + +.. list-table:: Global Configuration Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_VERSION`` + - DataCrumbs version number (e.g., ``0.0.4``) + * - ``DATACRUMBS_LIB_VERSION`` + - Library version number (e.g., ``1.0.0``) + +.. list-table:: Installation Path Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_INSTALL_HOST`` + - Hostname where DataCrumbs is installed + * - ``DATACRUMBS_INSTALL_USER`` + - User who installed DataCrumbs + * - ``DATACRUMBS_INSTALL_PREFIX`` + - Installation prefix directory (e.g., ``/opt/datacrumbs``) + * - ``DATACRUMBS_INSTALL_BIN_DIR`` + - Directory for user command binaries + * - ``DATACRUMBS_INSTALL_SBIN_DIR`` + - Directory for system/admin binaries + * - ``DATACRUMBS_INSTALL_LIB_DIR`` + - Directory for shared libraries + * - ``DATACRUMBS_INSTALL_LIBEXEC_DIR`` + - Directory for internal executables and eBPF objects + * - ``DATACRUMBS_INSTALL_ETC_DIR`` + - Directory for configuration files + +.. list-table:: Client Configuration Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_CLIENT_LIB`` + - Path to the client library (``libdatacrumbs_client.so``) + * - ``DATACRUMBS_CLIENT_BIN`` + - Directory for user-specific client binaries + +.. list-table:: Trace Configuration Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_TRACE_DIR`` + - Directory for trace files. Supports date patterns: ``%YY%`` (year), ``%MM%`` (month), ``%DD%`` (day) + * - ``DATACRUMBS_TRACE_DIR_PATTERN`` + - Pattern template for trace directory (e.g., ``/scratch/traces/%YY%/%MM%/%DD%``) + +.. list-table:: Job Scheduler Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_JOB_SCHEDULER`` + - Active job scheduler (``FLUX``, ``SLURM``, ``OPENMPI``, etc.) + * - ``DATACRUMBS_JOB_RUN`` + - Command to run jobs (e.g., ``flux run``, ``srun``) + * - ``DATACRUMBS_JOB_NODE_FLAG`` + - Flag for specifying number of nodes (e.g., ``-N``) + * - ``DATACRUMBS_JOB_PPN_FLAG`` + - Flag for specifying processes per node (e.g., ``-n``) + * - ``DATACRUMBS_JOB_ID_VAR`` + - Environment variable containing job ID (e.g., ``FLUX_JOB_ID``, ``SLURM_JOB_ID``) + +.. list-table:: Server Configuration Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_SERVER_LOAD_TIMEOUT`` + - Timeout in seconds for server to load eBPF programs (default: ``600``) + * - ``DATACRUMBS_SERVER_RUN_DIR`` + - Directory for server runtime files (PID files, lock files) + * - ``DATACRUMBS_SERVER_RUN_ID`` + - Unique identifier for the current tracing session + * - ``DATACRUMBS_SERVER_MODULE`` + - Flag for module system integration (``0`` or ``1``) + +.. list-table:: Log Configuration Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_LOG_DIR`` + - Directory for log files (e.g., ``/var/log/datacrumbs``) + +.. list-table:: Runtime Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_USER`` + - Current user running DataCrumbs (auto-detected or from ``$USER``) + * - ``DATACRUMBS_IS_ROOT`` + - Flag indicating if running as root (``1``) or regular user (``0``) + +.. list-table:: System Path Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``PATH`` + - Updated to include ``$PREFIX/bin`` (user commands) and ``$PREFIX/sbin`` (admin commands) + * - ``LD_LIBRARY_PATH`` + - Updated to include ``$PREFIX/lib`` (DataCrumbs libraries) and dependency library paths + +.. list-table:: Module System Variables + :header-rows: 1 + :widths: 30 70 + + * - Variable + - Description + * - ``DATACRUMBS_MODULE_AVAILABLE`` + - Set to ``1`` if environment modules are available, ``0`` otherwise + * - ``DATACRUMBS_ENV_LOADED`` + - Set to ``1`` after successful setup to prevent re-initialization + +Using Environment Modules +========================== + +DataCrumbs integrates with environment modules (Lmod/TCL modules) for easy environment management. + +Module File Location +-------------------- + +The module file is installed at: + +.. code-block:: text + + /etc/datacrumbs/modulefiles/datacrumbs/.lua + +Loading the Module +------------------ + +.. code-block:: bash + + # Add module path + module use /path/to/install/etc/datacrumbs/modulefiles + + # Load DataCrumbs module + module load datacrumbs/0.0.4 + + # Verify loaded + module list + +The module automatically: + +- Adds binaries to ``PATH`` +- Adds libraries to ``LD_LIBRARY_PATH`` +- Sources ``datacrumbs_setup`` +- Sets up command aliases + +Module Information +------------------ + +View module details: + +.. code-block:: bash + + # Show module information + module show datacrumbs/0.0.4 + + # Show help text + module help datacrumbs/0.0.4 + +Unloading the Module +-------------------- + +.. code-block:: bash + + module unload datacrumbs + +Available Command Aliases +========================== + +After setup, the following aliases are available: + +Tracking Commands +----------------- + +``datacrumbs_track`` +^^^^^^^^^^^^^^^^^^^^ + +Permanently instrument a binary for tracing. + +.. code-block:: bash + + datacrumbs_track --executable /path/to/myapp + +``datacrumbs_untrack`` +^^^^^^^^^^^^^^^^^^^^^^ + +Remove DataCrumbs instrumentation from a binary. + +.. code-block:: bash + + datacrumbs_untrack --executable /path/to/myapp + +Execution Commands +------------------ + +``datacrumbs_run`` +^^^^^^^^^^^^^^^^^^ + +Run an application with DataCrumbs tracing. + +.. code-block:: bash + + datacrumbs_run --app "myapp arg1 arg2" + +``datacrumbs_compose_run`` +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Run using a custom composable configuration. + +.. code-block:: bash + + datacrumbs_compose_run --composite-name myconfig + +Server Management +----------------- + +``datacrumbs_stop`` +^^^^^^^^^^^^^^^^^^^ + +Stop the DataCrumbs server (requires sudo). + +.. code-block:: bash + + datacrumbs_stop + +``datacrumbs_compose`` +^^^^^^^^^^^^^^^^^^^^^^ + +Manage composable configurations (requires sudo). + +.. code-block:: bash + + sudo datacrumbs_compose --action discover + +Utility Commands +---------------- + +``datacrumbs_wrap`` +^^^^^^^^^^^^^^^^^^^ + +Run a command with LD_PRELOAD-based tracing (requires sudo). + +.. code-block:: bash + + datacrumbs_wrap myapp arg1 arg2 + +``datacrumbs_create_log_dir`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Create date-based log directory structure. + +.. code-block:: bash + + datacrumbs_create_log_dir + +Configuration Files +=================== + +DataCrumbs uses YAML configuration files to define tracing behavior. + +Project Configuration +--------------------- + +**Location**: ``/etc/datacrumbs/configs/project.yaml`` + +Contains project-wide settings including paths, scheduler configuration, and server parameters. + +Example: + +.. code-block:: yaml + + version: 0.0.4 + lib_version: 1.0.0 + install: + host: myhostname + user: myuser + prefix: /opt/datacrumbs + bin_dir: ${DATACRUMBS_INSTALL_PREFIX}/bin + sbin_dir: ${DATACRUMBS_INSTALL_PREFIX}/sbin + lib_dir: ${DATACRUMBS_INSTALL_PREFIX}/lib + client: + lib: ${DATACRUMBS_INSTALL_LIB_DIR}/libdatacrumbs_client.so + bin: ${DATACRUMBS_INSTALL_LIBEXEC_DIR}/sbin/${DATACRUMBS_USER} + trace: + dir_pattern: /scratch/traces/%YY%/%MM%/%DD% + job: + scheduler: FLUX + run: flux run + node_flag: -N + ppn_flag: -n + id_var: FLUX_JOB_ID + server: + load_timeout: 600 + run_dir: /var/run/datacrumbs + module: 0 + log: + dir: /var/log/datacrumbs + +.. _host-configuration: + +Host Configuration +------------------ + +**Location**: ``/etc/datacrumbs/configs/.yaml`` + +Contains host-specific settings for probe configurations and capture rules. This file **must exist** for the hostname specified during build (``DATACRUMBS_HOST``). + +.. important:: + The host configuration file is required for DataCrumbs to build successfully. Copy and modify an existing configuration file (e.g., ``lead.yaml``, ``docker.yaml``) or create a new one based on the examples in ``etc/datacrumbs/configs/``. + +Capture Probes Configuration +============================= + +The ``capture_probes`` section defines which functions, system calls, or events DataCrumbs should trace. Each capture probe specifies what to monitor and how to discover traceable functions. + +Capture probes use different mechanisms to discover and attach to functions. The capture type determines how symbols are discovered, while the probe type determines how they are instrumented at runtime. + +Common Fields +------------- + +All capture probe types share these base fields inherited from the ``CaptureProbe`` class: + +.. list-table:: + :header-rows: 1 + :widths: 20 15 65 + + * - Field + - Required + - Description + * - ``name`` + - Yes + - Unique identifier for this probe set + * - ``probe`` + - Yes + - Runtime probe mechanism: ``syscalls``, ``kprobe``, ``uprobe``, ``usdt``, or ``custom`` + * - ``type`` + - Yes + - Symbol discovery method: ``header``, ``binary``, ``ksym``, ``usdt``, or ``custom`` + * - ``regex`` + - Optional + - Regular expression to filter discovered function names (default: ``.*`` matches all) + * - ``enable_explorer`` + - Optional + - Enable/disable probe discovery at build time (default: ``true``) + +Capture Types Overview +---------------------- + +.. list-table:: + :header-rows: 1 + :widths: 20 30 50 + + * - Capture Type + - Discovery Method + - Compatible Probe Types + * - ``ksym`` + - Kernel symbol table (``/proc/kallsyms``) + - ``kprobe`` only + * - ``header`` + - Parse C header files with Clang + - ``syscalls``, ``kprobe``, ``uprobe`` + * - ``binary`` + - Parse ELF binary symbols + - ``kprobe`` (kernel modules), ``uprobe`` (user binaries) + * - ``usdt`` + - DTRACE probes in binaries + - ``usdt`` only + * - ``custom`` + - User-defined plugin interface + - ``custom`` (can use any underlying mechanism) + +Kernel Symbol Capture (ksym) +----------------------------- + +**Capture Type**: ``ksym`` | **Compatible Probes**: ``kprobe`` + +**Class**: ``KernelCaptureProbe`` + +Discovers kernel functions from the compiled kernel symbol table at ``/proc/kallsyms``. This method queries the running kernel for available functions with type 'T' (global) or 't' (local). + +**Required Fields**: + +.. list-table:: + :header-rows: 1 + :widths: 20 80 + + * - Field + - Description + * - ``name`` + - Identifier for the probe set + * - ``probe`` + - Must be ``kprobe`` + * - ``type`` + - Must be ``ksym`` + * - ``regex`` + - Pattern to match kernel symbol names from ``/proc/kallsyms`` + +**Advantages**: +* Discovers only functions available in the running kernel +* No need for kernel source or headers +* Fast symbol lookup + +**Example - XFS Filesystem Functions**: + +.. code-block:: yaml + + - name: xfs + probe: kprobe + type: ksym + regex: ^xfs(?!.*cold).* + +**Example - IOMAP Functions**: + +.. code-block:: yaml + + - name: iomap + probe: kprobe + type: ksym + regex: ^iomap(?!.*cold).* + +**Example - All VFS Functions**: + +.. code-block:: yaml + + - name: vfs + probe: kprobe + type: ksym + regex: ^vfs_.* + +Header File Capture +-------------------- + +**Capture Type**: ``header`` | **Compatible Probes**: ``syscalls``, ``kprobe``, ``uprobe`` + +**Class**: ``HeaderCaptureProbe`` + +Parses C header files using Clang to discover function declarations. This method extracts function signatures from header files without requiring compiled binaries. + +**Required Fields**: + +.. list-table:: + :header-rows: 1 + :widths: 20 80 + + * - Field + - Description + * - ``name`` + - Identifier for the probe set + * - ``probe`` + - ``syscalls``, ``kprobe``, or ``uprobe`` + * - ``type`` + - Must be ``header`` + * - ``file`` + - Path to C header file + * - ``regex`` + - Optional pattern to filter function names + * - ``enable_explorer`` + - Optional: Disable if header parsing is slow (default: ``true``) + +**Advantages**: +* Works without compiled binaries +* Extracts complete function signatures +* Useful for system calls and kernel headers + +Use Case: System Calls +^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: yaml + + - name: sys + probe: syscalls + type: header + file: @DATACRUMBS_KERNEL_HEADERS_PATH@/include/linux/syscalls.h + regex: sys_.* + +Use Case: Kernel Page Cache +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: yaml + + - name: os_page_cache + probe: kprobe + type: header + file: @DATACRUMBS_KERNEL_HEADERS_PATH@/include/linux/pagemap.h + +Use Case: Kernel Functions (Alternative to ksym) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: yaml + + - name: kernel_fs + probe: kprobe + type: header + file: @DATACRUMBS_KERNEL_HEADERS_PATH@/include/linux/fs.h + regex: (inode|dentry)_.* + +Binary Symbol Capture +---------------------- + +**Capture Type**: ``binary`` | **Compatible Probes**: ``kprobe`` (kernel modules), ``uprobe`` (user binaries) + +**Class**: ``BinaryCaptureProbe`` + +Extracts symbols from compiled ELF binaries using symbol table parsing. Works for both kernel modules (.ko) and user-space binaries/libraries. + +**Required Fields**: + +.. list-table:: + :header-rows: 1 + :widths: 20 80 + + * - Field + - Description + * - ``name`` + - Identifier for the probe set + * - ``probe`` + - ``kprobe`` (for .ko files) or ``uprobe`` (for binaries/libraries) + * - ``type`` + - Must be ``binary`` + * - ``file`` + - Path to binary, shared library, or kernel module + * - ``regex`` + - Pattern to filter symbol names (recommended to exclude compiler-generated names) + * - ``include_offsets`` + - Optional: Include function offsets in output (default: ``false``) + +**Advantages**: +* No source code or headers needed +* Works with any ELF binary +* Discovers actual available functions + +Use Case: Kernel Modules (kprobe) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Example - Lustre Filesystem Module**: + +.. code-block:: yaml + + - name: lustre + probe: kprobe + type: binary + file: /usr/lib/modules/5.14.0/weak-updates/lustre/fs/lustre.ko + regex: (?!.*__)(?!.*:)(?!.*constprop)(?!.*isra).* + +**Regex Explanation**: Excludes compiler-generated names: +* ``(?!.*__)`` - Exclude functions with double underscores +* ``(?!.*:)`` - Exclude namespaced symbols +* ``(?!.*constprop)`` - Exclude const propagation variants +* ``(?!.*isra)`` - Exclude interprocedural scalar replacement variants + +**Example - Lustre OSC Module**: + +.. code-block:: yaml + + - name: osc + probe: kprobe + type: binary + file: /usr/lib/modules/5.14.0/weak-updates/lustre/fs/osc.ko + regex: (?!.*__)(?!.*:)(?!.*constprop)(?!.*isra).* + +Use Case: User-Space Libraries (uprobe) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Example - Standard C Library**: + +.. code-block:: yaml + + - name: libc + probe: uprobe + type: binary + file: @DATACRUMBS_LIBC_SO@ + regex: .*(open|close|read|write|fork).* + +**Example - MPI Library**: + +.. code-block:: yaml + + - name: mpi + probe: uprobe + type: binary + file: /opt/openmpi/lib/libmpi.so + regex: MPI_File_.* + +**Example - HDF5 Library**: + +.. code-block:: yaml + + - name: hdf5 + probe: uprobe + type: binary + file: /usr/lib64/libhdf5.so.200 + regex: H5[FD].* + +Use Case: Application Binaries (uprobe) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Example - IOR Benchmark**: + +.. code-block:: yaml + + - name: ior + probe: uprobe + type: binary + file: /home/user/software/ior/bin/ior + regex: .* + +USDT Capture +------------ + +**Capture Type**: ``usdt`` | **Compatible Probes**: ``usdt`` + +**Class**: ``USDTCaptureProbe`` + +Discovers User-level Statically Defined Tracing (USDT) probes using the DTRACE mechanism. USDT probes are embedded in applications and libraries for tracing, commonly used in interpreted languages like Python. + +**Required Fields**: + +.. list-table:: + :header-rows: 1 + :widths: 20 80 + + * - Field + - Description + * - ``name`` + - Identifier for the probe set + * - ``probe`` + - Must be ``usdt`` + * - ``type`` + - Must be ``usdt`` + * - ``binary_path`` + - Path to binary containing USDT probes + * - ``provider`` + - USDT provider name (namespace for probes) + * - ``regex`` + - Optional pattern to filter probe names + +**Advantages**: +* Low overhead for interpreted languages +* Standardized tracing interface +* Application-specific semantic probes + +**Currently Supported**: Python + +**Example - Python USDT Probes**: + +.. code-block:: yaml + + - name: python + probe: usdt + type: usdt + binary_path: /lib64/libpython3.6m.so.1.0 + provider: python + +**Example - Python GC Probes**: + +.. code-block:: yaml + + - name: python_gc + probe: usdt + type: usdt + binary_path: /lib64/libpython3.6m.so.1.0 + provider: python + regex: gc.* + +Custom Capture +-------------- + +**Capture Type**: ``custom`` | **Compatible Probes**: ``custom`` + +**Class**: ``CustomCaptureProbe`` + +Provides a plugin interface for user-defined probe discovery, function mapping, and event processing. Custom probes can work with any underlying probe mechanism (kprobe, uprobe, etc.) but with complete control over probe logic. + +**Required Fields**: + +.. list-table:: + :header-rows: 1 + :widths: 20 80 + + * - Field + - Description + * - ``name`` + - Identifier for the custom probe + * - ``probe`` + - Must be ``custom`` + * - ``type`` + - Must be ``custom`` + * - ``file`` + - Path to custom BPF source file (.bpf.c) with probe implementations + * - ``probes`` + - Path to JSON file defining probe points and function mappings + * - ``process_header`` + - Path to C header file with event processing functions + * - ``start_event_id`` + - Starting event ID for this probe set (must be unique, typically 100000+) + * - ``event_type`` + - Event classification: ``1`` (duration events), ``2`` (instant events) + +**Advantages**: +* Complete control over probe behavior +* Custom event processing logic +* Can combine multiple probe types +* Plugin architecture for extensibility + +**Use Cases**: +* Complex multi-probe workflows +* Custom data collection beyond function tracing +* Specialized performance analysis +* Domain-specific instrumentation + +**Example - Custom System I/O Probe**: + +.. code-block:: yaml + + - name: custom1 + start_event_id: 100000 + probe: custom + type: custom + file: /opt/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c + probes: /opt/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/probes.json + process_header: /opt/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h + event_type: 2 + +**Plugin Structure**: + +* **BPF file** (``file``): Contains eBPF programs with probe logic +* **Probes JSON** (``probes``): Defines which functions to attach to and their metadata +* **Process header** (``process_header``): C header with functions to process events in user-space + +CMake Variable Substitution +============================ + +Configuration files support CMake variable substitution at build time: + +.. list-table:: + :header-rows: 1 + :widths: 40 60 + + * - Variable + - Expands To + * - ``@DATACRUMBS_PROJECT_PATH@`` + - Build directory path + * - ``@DATACRUMBS_LIBC_SO@`` + - Detected libc library path + * - ``@DATACRUMBS_KERNEL_HEADERS_PATH@`` + - Kernel headers directory + * - ``@DATACRUMBS_KERNEL_UNAME_R@`` + - Kernel release version + +**Example Using Variables**: + +.. code-block:: yaml + + - name: libc + probe: uprobe + type: binary + file: @DATACRUMBS_LIBC_SO@ + regex: .*(open|close|read|write).* + + - name: page_cache + probe: kprobe + type: header + file: @DATACRUMBS_KERNEL_HEADERS_PATH@/include/linux/pagemap.h + +Choosing the Right Capture Type +================================ + +.. list-table:: + :header-rows: 1 + :widths: 20 40 40 + + * - Capture Type + - When to Use + - Limitations + * - **ksym** + - Kernel functions only; fast discovery; no headers needed + - Linux kernel only; no source information + * - **header** + - Have header files; need function signatures; build-time discovery + - Requires header files; slower parsing + * - **binary** + - Have compiled binary; no source; runtime symbol discovery + - No function signatures; binary must have symbols + * - **usdt** + - Tracing interpreted languages; application-specific probes + - Limited language support (Python) + * - **custom** + - Complex instrumentation; custom logic; plugin development + - Requires custom BPF programming + +Complete Configuration Examples +================================ + +Available example configurations in ``etc/datacrumbs/configs/``: + +.. list-table:: + :header-rows: 1 + :widths: 25 75 + + * - File + - Description + * - ``lead.yaml`` + - Full HPC cluster: custom probes, syscalls, Lustre modules, MPI, kernel symbols + * - ``docker.yaml`` + - Container environment: custom probes, libc uprobe, Python USDT, kernel headers + * - ``corona.yaml`` + - LLNL Corona system with comprehensive instrumentation + * - ``tuolumne.yaml`` + - LLNL Tuolumne system focused on MPI-IO workflows + * - ``hdf.yaml`` + - HDF5-focused configuration for scientific applications + +Data Files +========== + +DataCrumbs generates and maintains several data files during build and runtime to manage probe discovery, validation, and event mapping. These files use the naming pattern ``--.`` where: + +* ```` - Hostname from project configuration +* ```` - Install user from project configuration + +File Locations +-------------- + +All data files are stored in: ``/etc/datacrumbs/data/`` + +Probe Discovery Files +--------------------- + +probes-HOST-USER.json +^^^^^^^^^^^^^^^^^^^^^ + +**Generated**: Build time (explorer phase) + +**Purpose**: Master list of discovered probe points organized by capture probe configuration + +Contains all functions discovered by the explorer during the build process. Each entry represents a complete capture probe configuration with its discovered functions. + +**Structure**: Array of capture probe objects, where each object contains: + +* ``type`` - Probe type (0=syscalls, 1=kprobe, 2=uprobe, 3=usdt, 4=custom) +* ``name`` - Capture probe name from configuration +* ``functions`` - Array of discovered function names +* Additional fields specific to probe type (binary_path, provider, bpf_path, etc.) + +**Example Entry (uprobe)**: + +.. code-block:: json + + { + "type": 2, + "name": "libc", + "functions": ["__GI___fork", "__GI___register_atfork", "__GI___vfork"], + "binary_path": "/usr/lib64/libc.so.6", + "function_offsets": ["0xf96b8", "0x841c0", "0x73458"] + } + +**Example Entry (kprobe)**: + +.. code-block:: json + + { + "type": 1, + "name": "xfs", + "functions": ["xfs_file_read_iter", "xfs_file_write_iter", "xfs_file_open"] + } + +**Example Entry (custom)**: + +.. code-block:: json + + { + "type": 4, + "name": "custom1", + "functions": ["openat", "read", "write", "close"], + "bpf_path": "/opt/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c", + "start_event_id": 100000, + "process_header": "/opt/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h", + "event_type": 2 + } + +probes-exclusion-HOST-USER.json +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Managed by**: User (manual editing) + +**Purpose**: User-defined probe exclusion list + +Contains exclusion lists for each capture probe. Only three fields are used: ``type``, ``name``, and ``functions``. All other fields (binary_path, bpf_path, etc.) are ignored. + +**Structure**: Array of objects with required fields: + +* ``type`` - Probe type (must match capture probe type) +* ``name`` - Capture probe name (must match configuration) +* ``functions`` - Array of function names to exclude + +**Example**: + +.. code-block:: json + + [ + { + "type": 0, + "name": "sys", + "functions": ["bdflush", "fork", "ioctl", "ni_syscall"] + }, + { + "type": 2, + "name": "libc", + "functions": ["fnmatch@@GLIBC_2.2.5", "sysctl@GLIBC_2.2.5"] + }, + { + "type": 1, + "name": "xfs", + "functions": ["xfs_buf_cold", "xfs_attr_check_namespace"] + } + ] + +**Use Cases**: +* Exclude functions that cause issues or crashes +* Reduce probe count for performance +* Filter out noisy or irrelevant functions +* Avoid versioned symbols that may not exist on all systems + +**Note**: The exclusion file may contain additional fields from copying the probes file, but only ``type``, ``name``, and ``functions`` are processed during probe discovery. + +categories-HOST-USER.json +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Generated**: Build time (generator phase) + +**Purpose**: Event ID to probe information mapping + +Maps unique event IDs to their corresponding capture probe categories and function names. This is the key lookup table for trace analysis, generated during the same phase as eBPF object compilation. + +**Structure**: Object with event IDs as keys, each mapping to probe metadata + +**Example Structure**: + +.. code-block:: json + + { + "1000": { + "probe_name": "libc", + "function_name": "__GI___fork" + }, + "1010": { + "probe_name": "os_page_cache", + "function_name": "add_to_page_cache_lru" + }, + "100000": { + "probe_name": "custom1", + "function_name": "openat" + } + } + +**Event ID Ranges**: +* **1000-99999**: Standard probes (kprobe, uprobe, syscalls, usdt) +* **100000+**: Custom probes (user-defined via ``start_event_id``) + +This mapping enables: +* Event ID → Function name resolution during trace analysis +* Category grouping for aggregated analysis +* Human-readable trace output + +manual-probes-HOST-USER.json +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Generated**: Build time (generator phase) + +**Purpose**: Probes that cannot be compiled into the eBPF object files + +Contains probes discovered during the generator phase that cannot be statically compiled into eBPF objects. These require runtime resolution and attachment. + +**Structure**: Array of capture probe objects (same as probes file) + +**Common Cases**: +* **Multi-offset symbols**: Functions with multiple addresses due to compiler optimizations or inlining +* **Dynamic libraries**: Symbols only available when library is loaded at runtime +* **Runtime-specific paths**: Kernel modules loaded after boot +* **Unresolvable symbols**: Functions that exist but cannot be compiled into static eBPF programs + +**Example Entry (multiple offsets)**: + +.. code-block:: json + + [ + { + "type": 2, + "name": "ior", + "functions": ["2060", "2061"], + "binary_path": "/home/user/software/ior/bin/ior", + "include_offsets": false + } + ] + +**Note**: The numbers in the ``functions`` array are **event IDs** that correspond to entries in ``categories-HOST-USER.json``. These event IDs reference the actual function names and metadata. These probes are attached dynamically when the DataCrumbs server starts. + +probes-invalid-HOST-USER.json +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Generated**: Runtime (by ``datacrumbs_validator``) + +**Purpose**: Validated probe blacklist - tracks probes that failed validation + +Maintains the same structure as other probe files but lists functions deemed invalid during validation. + +**Structure**: Array of capture probe objects with invalid function lists + +Probes are marked invalid when: +* Attachment fails during validation +* Probe causes system instability +* Symbol no longer exists in current kernel/binary +* Function signature incompatible with tracing + +**Example**: + +.. code-block:: json + + [ + { + "type": 1, + "name": "lustre", + "functions": ["ll_dom_readpage", "lustre_exit", "lustre_init"] + }, + { + "type": 1, + "name": "os_page_cache", + "functions": ["page_cache_sync_readahead"] + } + ] + +Run ``datacrumbs_validator`` after system updates or configuration changes to refresh this list. + +Key Artifacts for Analysis +--------------------------- + +The two most important files for understanding your current tracing configuration: + +.. list-table:: + :header-rows: 1 + :widths: 40 60 + + * - File + - Purpose + * - ``probes-HOST-USER.json`` + - Complete list of active probes organized by capture probe name with all discovered functions + * - ``categories-HOST-USER.json`` + - Event ID → (probe name, function name) mapping for decoding trace events + +**Workflow Integration**: + +1. **Build time - Explorer phase**: Generates ``probes-*.json`` from capture_probes config +2. **User customization**: Edit ``probes-exclusion-*.json`` to exclude unwanted probes +3. **Build time - Generator phase**: Creates ``categories-*.json`` (event ID mappings) and ``manual-probes-*.json`` (probes that cannot be compiled) +4. **Runtime - Validation**: Failed probes recorded in ``probes-invalid-*.json`` by validator +5. **Runtime - Server startup**: Manual probes from step 3 are dynamically attached using event IDs from categories file +6. **Analysis**: Use ``categories-*.json`` to decode event IDs in trace files + +File Management +--------------- + +**Regenerating Data Files**: + +.. code-block:: bash + + # Rebuild to regenerate probes and categories + cd build && make install + +**Viewing Active Probes by Category**: + +.. code-block:: bash + + # Show probe counts per capture probe + jq -r '.[] | "\(.name): \(.functions | length) functions"' \ + /opt/datacrumbs/etc/datacrumbs/data/probes-*.json + +**Checking Event ID Assignments**: + +.. code-block:: bash + + # View event ID mappings + jq '.' /opt/datacrumbs/etc/datacrumbs/data/categories-*.json + +**Finding Specific Function's Event ID**: + +.. code-block:: bash + + # Search for function in categories + jq -r 'to_entries[] | select(.value.function_name=="xfs_file_read_iter") | + "Event ID: \(.key), Probe: \(.value.probe_name)"' \ + /opt/datacrumbs/etc/datacrumbs/data/categories-*.json + +Output Files +============ + +DataCrumbs generates trace and log files during runtime. Understanding the naming conventions and formats is essential for trace analysis. + +Trace Files +----------- + +**Format**: DFTracer format (``.pfw.gz``) + +**Documentation**: https://dftracer.readthedocs.io/en/latest/trace_format.html + +Trace files are compressed binary files containing timestamped events captured by eBPF probes. Each trace file represents the activity of a single process or MPI rank. + +**Naming Convention**: + +The trace file naming convention depends on whether MPI is enabled: + +**Without MPI** (``--disable-mpi``): + +.. code-block:: text + + trace----.pfw.gz + +**Example**: + +.. code-block:: text + + trace-root-12345-node01-docker.pfw.gz + +**With MPI**: + +.. code-block:: text + + trace-----.pfw.gz + +**Example**: + +.. code-block:: text + + trace-haridev-67890-0-4-lead.pfw.gz + trace-haridev-67890-1-4-lead.pfw.gz + trace-haridev-67890-2-4-lead.pfw.gz + trace-haridev-67890-3-4-lead.pfw.gz + +**Filename Components**: + +.. list-table:: + :header-rows: 1 + :widths: 20 80 + + * - Component + - Description + * - ```` + - Runtime user (from ``DATACRUMBS_USER`` or ``--user``) + * - ```` + - Unique run identifier (from ``--run_id`` argument) + * - ```` + - System hostname (non-MPI mode only) + * - ```` + - MPI process rank (0 to N-1, MPI mode only) + * - ```` + - Total number of MPI processes (MPI mode only) + * - ```` + - Configuration name from command line (e.g., ``lead``, ``docker``) + +**Location**: + +Trace files are written to the directory specified by ``DATACRUMBS_TRACE_DIR`` (or ``--trace_log_dir`` argument). + +**Default**: ``/var/log/datacrumbs`` or configured ``trace_log_dir`` from YAML. + +**Analysis**: + +Trace files can be analyzed using **DFTracer tools**: + +**DFTracer Utilities** - Trace manipulation and statistics: + +.. code-block:: bash + + pip install dftracer-utils + dftracer-stats --input trace-*.pfw.gz + dftracer-merge --input "trace-*-67890-*.pfw.gz" --output merged.pfw.gz + dftracer-split --input merged.pfw.gz --output-dir split-traces/ + +**Documentation**: https://dftracer.readthedocs.io/en/latest/bash_utilities.html + +**DFAnalyzer** - Comprehensive analysis: + +.. code-block:: bash + + pip install dfanalyzer + dfanalyzer analyze --input trace-*.pfw.gz --output report.html + dfanalyzer interactive --input trace-*.pfw.gz + +**Documentation**: https://dftracer.readthedocs.io/projects/analyzer/en/latest/getting-started.html#usage + +The DFTracer format includes: + +* Event timestamps (nanosecond precision) +* Event IDs (mapped via ``categories-*.json``) +* Process/thread information +* Function entry/exit pairs (for duration events) +* Custom event data (for instant events) + +Log Files +--------- + +**Format**: Plain text (``.log``) + +Log files contain human-readable diagnostic and debugging information from the DataCrumbs server and client components. + +**Naming Convention**: + +.. code-block:: text + + datacrumbs--.log + +**Example**: + +.. code-block:: text + + datacrumbs-server-20250122-143052.log + datacrumbs-client-20250122-143105.log + +**Location**: + +Log files are written to the directory specified by ``DATACRUMBS_LOG_DIR`` (or ``--log_dir`` argument). + +**Default**: Current working directory or configured ``log_dir``. + +**Log Levels**: + +* ``ERROR``: Critical errors requiring attention +* ``WARN``: Warnings about potential issues +* ``INFO``: General information about execution +* ``DEBUG``: Detailed debugging information +* ``TRACE``: Fine-grained execution traces + +**Viewing Logs**: + +.. code-block:: bash + + # View recent server logs + tail -f /var/log/datacrumbs/datacrumbs-server-*.log + + # Search for errors + grep ERROR /var/log/datacrumbs/*.log + + # Filter by component + grep "\[ConfigurationManager\]" /var/log/datacrumbs/*.log + +Output Management +----------------- + +**Disk Space Considerations**: + +* Trace files can grow large in high-frequency tracing scenarios +* Compression (``.gz``) reduces file size by ~10x +* Plan storage capacity based on trace duration and probe count + +**Cleanup**: + +.. code-block:: bash + + # Remove old traces (older than 7 days) + find $DATACRUMBS_TRACE_DIR -name "trace-*.pfw.gz" -mtime +7 -delete + + # Archive traces before cleanup + tar czf traces-archive-$(date +%Y%m%d).tar.gz $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + +**Aggregating MPI Traces**: + +For MPI applications, use DFTracer utilities to merge traces from all ranks: + +.. code-block:: bash + + # Install DFTracer utilities + pip install dftracer-utils + + # Merge all ranks for a specific run + dftracer-merge --input "$DATACRUMBS_TRACE_DIR/trace-*-67890-*.pfw.gz" \ + --output "$DATACRUMBS_TRACE_DIR/merged-67890.pfw.gz" + + # Split large merged trace if needed + dftracer-split --input "$DATACRUMBS_TRACE_DIR/merged-67890.pfw.gz" \ + --output-dir "$DATACRUMBS_TRACE_DIR/split-67890/" + + # Analyze merged trace + pip install dfanalyzer + dfanalyzer analyze --input "$DATACRUMBS_TRACE_DIR/merged-67890.pfw.gz" \ + --output "$DATACRUMBS_TRACE_DIR/report-67890.html" + +**Documentation**: + +* DFTracer utilities: https://dftracer.readthedocs.io/en/latest/bash_utilities.html +* DFAnalyzer: https://dftracer.readthedocs.io/projects/analyzer/en/latest/getting-started.html#usage + +Resource Limits +=============== + +DataCrumbs automatically configures system resource limits for optimal eBPF operation: + +File Descriptors +---------------- + +.. code-block:: bash + + # Automatically set to maximum + ulimit -n $(ulimit -H -n) + +eBPF requires many file descriptors for maps, programs, and ring buffers. + +Locked Memory +------------- + +.. code-block:: bash + + # Automatically set to maximum + ulimit -l $(ulimit -H -l) + +eBPF maps and ring buffers use locked memory that cannot be swapped. + +Manual Adjustment +----------------- + +If automatic limits are insufficient: + +.. code-block:: bash + + # Increase hard limits (requires root) + sudo bash -c "echo '* hard nofile 1048576' >> /etc/security/limits.conf" + sudo bash -c "echo '* soft nofile 1048576' >> /etc/security/limits.conf" + + # For current session + ulimit -n 1048576 + ulimit -l unlimited + +Directory Structure After Setup +================================ + +DataCrumbs creates the following directory structure: + +.. code-block:: text + + / + ├── bin/ # User commands + │ ├── datacrumbs_setup + │ ├── datacrumbs_run + │ ├── datacrumbs_track + │ ├── datacrumbs_untrack + │ ├── datacrumbs_wrap + │ └── ... + ├── sbin/ # Admin commands + │ ├── datacrumbs # Main server binary + │ ├── datacrumbs_server_run.sh + │ ├── datacrumbs_server_stop.sh + │ ├── datacrumbs_service_run.sh + │ ├── datacrumbs_service_stop.sh + │ └── ... + ├── lib/ # Libraries + │ ├── libdatacrumbs_client.so + │ ├── libdatacrumbs_obj.so + │ └── ... + ├── libexec/ # Internal components + │ └── datacrumbs/ + │ ├── objects/ # eBPF object files + │ └── composable/ # Composable configurations + └── etc/ + └── datacrumbs/ + ├── configs/ # YAML configuration files + ├── data/ # Probe metadata + ├── modulefiles/ # Environment module files + ├── systemd/ # Systemd service files + └── flux/ # Flux plugin files + +Verification +============ + +Verify your setup is correct: + +.. code-block:: bash + + # Check environment variables + echo $DATACRUMBS_USER + echo $DATACRUMBS_TRACE_DIR + echo $PATH | grep datacrumbs + + # Check resource limits + ulimit -n + ulimit -l + + # Check available commands + which datacrumbs_run + which datacrumbs_track + + # Test validator + datacrumbs_validator + +Multiple User Setup +=================== + +For shared installations where multiple users will use DataCrumbs: + +Build Configuration +------------------- + +.. code-block:: bash + + # Build with shared install user + cmake -DCMAKE_INSTALL_PREFIX=/opt/datacrumbs \ + -DDATACRUMBS_INSTALL_USER=shared \ + .. + +Each User Setup +--------------- + +.. code-block:: bash + + # Each user loads the module + module use /opt/datacrumbs/etc/datacrumbs/modulefiles + module load datacrumbs/0.0.4 + + # User-specific trace directory + export DATACRUMBS_TRACE_DIR=/scratch/$USER/traces + +Per-User Configuration +---------------------- + +Users can override some default settings: + +.. code-block:: bash + + # Custom log directory (if administrator enabled this) + export DATACRUMBS_CONFIGURED_LOG_DIR=/custom/logs + +.. note:: + **Trace directory cannot be overridden at runtime**. The trace directory (``DATACRUMBS_TRACE_DIR``) is set by the administrator during installation via the ``trace_dir`` or ``trace_dir_pattern`` configuration in the project YAML file. Users cannot change this location. + +Troubleshooting +=============== + +Setup Script Not Found +----------------------- + +.. code-block:: bash + + # Verify installation + ls /path/to/install/bin/datacrumbs_setup + + # Check PATH + export PATH=/path/to/install/bin:$PATH + +Permission Issues +----------------- + +.. code-block:: bash + + # Ensure directories are accessible + ls -la $DATACRUMBS_TRACE_DIR + ls -la $DATACRUMBS_SERVER_RUN_DIR + + # Create if needed + mkdir -p $DATACRUMBS_TRACE_DIR + mkdir -p $DATACRUMBS_SERVER_RUN_DIR + +Module Not Found +---------------- + +.. code-block:: bash + + # Verify module path + module use /path/to/install/etc/datacrumbs/modulefiles + + # List available modules + module avail datacrumbs + +Resource Limit Errors +--------------------- + +.. code-block:: bash + + # Check current limits + ulimit -a + + # Increase if needed (as root) + sudo pam_limits.so + +Configuration File Errors +------------------------- + +.. code-block:: bash + + # Verify configuration files exist + ls $PREFIX/etc/datacrumbs/configs/ + + # Check YAML syntax + python3 -c "import yaml; yaml.safe_load(open('config.yaml'))" diff --git a/docs/slurm_integration.rst b/docs/slurm_integration.rst new file mode 100644 index 00000000..19b61497 --- /dev/null +++ b/docs/slurm_integration.rst @@ -0,0 +1,911 @@ +============================ +SLURM Scheduler Integration +============================ + +DataCrumbs provides deep integration with the SLURM workload manager for automated tracing in HPC environments. This integration enables transparent tracing of batch jobs through SLURM prolog/epilog scripts, systemd service management, and a custom ``salloc`` wrapper. + +Overview +======== + +The SLURM integration consists of four components: + +1. **Systemd Service**: Manages DataCrumbs server lifecycle +2. **Prolog Script**: Starts DataCrumbs before job execution +3. **Epilog Script**: Stops DataCrumbs after job completion +4. **salloc Wrapper**: Provides command-line options for users via ``datacrumbs_salloc`` + +Benefits +-------- + +* **Automatic Tracing**: Jobs are traced transparently without manual server management +* **Per-Job Isolation**: Each job gets its own tracing session +* **Custom Configurations**: Users can specify composable configurations +* **No Code Changes**: Applications remain unmodified +* **Centralized Management**: Administrators control tracing infrastructure +* **Native SLURM Integration**: Works seamlessly with existing SLURM workflows + +Architecture +============ + +When a SLURM job is submitted with ``datacrumbs_salloc --datacrumbs-enable ``, the following sequence occurs: + +1. **Job Submission Phase**: + + - User runs ``datacrumbs_salloc`` wrapper instead of ``salloc`` + - Wrapper parses DataCrumbs-specific flags + - Job metadata is encoded as JSON in SLURM comment field + - Allocation is submitted to SLURM with embedded DataCrumbs metadata + +2. **Prolog Phase** (before job starts): + + - ``datacrumbs_service_run.sh`` is executed on compute node + - Script parses SLURM job comment to check if tracing is enabled + - Systemd service ``datacrumbs@`` is created and started + - DataCrumbs server begins collecting events + - Job waits for server to be ready + +3. **Execution Phase**: + + - Application runs normally with tracing active + - eBPF probes capture I/O events + - Events are written to trace files + +4. **Epilog Phase** (after job completes): + + - ``datacrumbs_service_stop.sh`` is executed + - Systemd service is stopped and disabled + - Server flushes remaining events + - Trace files are finalized + +Installation Steps +================== + +.. note:: + Installation requires root/administrator privileges on all compute nodes. + +Step 1: Enable SLURM Prolog/Epilog +----------------------------------- + +Edit the SLURM configuration file on the controller node: + +.. code-block:: bash + + # On SLURM controller node + sudo vi /etc/slurm/slurm.conf + +Add or ensure the following configuration: + +.. code-block:: text + + # Enable prolog execution + Prolog=/etc/slurm/prolog.sh + + # Enable epilog execution + Epilog=/etc/slurm/epilog.sh + +.. note:: + Some SLURM configurations may use ``PrologSlurmctld`` and ``EpilogSlurmctld`` for controller-based execution. Adjust based on your site configuration. The prolog.sh and epilog.sh wrapper scripts will call all scripts in their respective .d directories. + +Step 2: Install Systemd Service +-------------------------------- + +Install the DataCrumbs systemd service file on all compute nodes: + +**Service file location:** ``/etc/datacrumbs/systemd/datacrumbs@.service`` + +.. code-block:: bash + + # On each compute node + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + + # Create symlink to systemd directory + sudo ln -s ${DATACRUMBS_INSTALL}/etc/datacrumbs/systemd/datacrumbs@.service \\ + /etc/systemd/system/datacrumbs@.service + + # Reload systemd + sudo systemctl daemon-reload + + # Verify service is recognized + systemctl status datacrumbs@test.service + +**Automated deployment** across multiple nodes: + +.. code-block:: bash + + # Example for compute nodes compute001-compute128 + NODES="compute{001..128}" + + for node in $NODES; do + echo "Installing on $node" + ssh $node "sudo ln -sf ${DATACRUMBS_INSTALL}/etc/datacrumbs/systemd/datacrumbs@.service /etc/systemd/system/ && sudo systemctl daemon-reload" + done + +Step 3: Create Prolog Wrapper Script +------------------------------------- + +Create a wrapper script that SLURM will call, which in turn executes all scripts in the prolog.d directory: + +.. code-block:: bash + + # On each compute node + sudo tee /etc/slurm/prolog.sh > /dev/null << 'EOF' + #!/bin/bash + # SLURM Prolog wrapper - executes all scripts in prolog.d + + PROLOG_DIR="/etc/slurm/prolog.d" + + if [ -d "$PROLOG_DIR" ]; then + for script in "$PROLOG_DIR"/*; do + if [ -x "$script" ]; then + "$script" + fi + done + fi + EOF + + # Make executable + sudo chmod +x /etc/slurm/prolog.sh + +**Automated deployment:** + +.. code-block:: bash + + NODES="compute{001..128}" + + for node in $NODES; do + echo "Creating prolog wrapper on $node" + ssh $node 'sudo tee /etc/slurm/prolog.sh > /dev/null << '"'"'EOF'"'"' + #!/bin/bash + PROLOG_DIR="/etc/slurm/prolog.d" + if [ -d "$PROLOG_DIR" ]; then + for script in "$PROLOG_DIR"/*; do + if [ -x "$script" ]; then + "$script" + fi + done + fi + EOF + sudo chmod +x /etc/slurm/prolog.sh' + done + +Step 4: Install DataCrumbs Prolog Script +----------------------------------------- + +Install the DataCrumbs prolog script that starts tracing: + +**Script location:** ``/sbin/datacrumbs_service_run.sh`` + +.. code-block:: bash + + # On each compute node + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + + # Create prolog.d directory if it doesn't exist + sudo mkdir -p /etc/slurm/prolog.d + + # Symlink DataCrumbs service run script + sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh \\ + /etc/slurm/prolog.d/datacrumbs_service_run.sh + +**Automated deployment:** + +.. code-block:: bash + + NODES="compute{001..128}" + + for node in $NODES; do + echo "Installing DataCrumbs prolog on $node" + ssh $node "sudo mkdir -p /etc/slurm/prolog.d && sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh /etc/slurm/prolog.d/datacrumbs_service_run.sh" + done + +Step 5: Create Epilog Wrapper Script +------------------------------------- + +Create a wrapper script that SLURM will call, which in turn executes all scripts in the epilog.d directory: + +.. code-block:: bash + + # On each compute node + sudo tee /etc/slurm/epilog.sh > /dev/null << 'EOF' + #!/bin/bash + # SLURM Epilog wrapper - executes all scripts in epilog.d + + EPILOG_DIR="/etc/slurm/epilog.d" + + if [ -d "$EPILOG_DIR" ]; then + for script in "$EPILOG_DIR"/*; do + if [ -x "$script" ]; then + "$script" + fi + done + fi + EOF + + # Make executable + sudo chmod +x /etc/slurm/epilog.sh + +**Automated deployment:** + +.. code-block:: bash + + NODES="compute{001..128}" + + for node in $NODES; do + echo "Creating epilog wrapper on $node" + ssh $node 'sudo tee /etc/slurm/epilog.sh > /dev/null << '"'"'EOF'"'"' + #!/bin/bash + EPILOG_DIR="/etc/slurm/epilog.d" + if [ -d "$EPILOG_DIR" ]; then + for script in "$EPILOG_DIR"/*; do + if [ -x "$script" ]; then + "$script" + fi + done + fi + EOF + sudo chmod +x /etc/slurm/epilog.sh' + done + +Step 6: Install DataCrumbs Epilog Script +----------------------------------------- + +Install the DataCrumbs epilog script that stops tracing: + +**Script location:** ``/sbin/datacrumbs_service_stop.sh`` + +.. code-block:: bash + + # On each compute node + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + + # Create epilog.d directory if it doesn't exist + sudo mkdir -p /etc/slurm/epilog.d + + # Symlink DataCrumbs service stop script + sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh \\ + /etc/slurm/epilog.d/datacrumbs_service_stop.sh + +**Automated deployment:** + +.. code-block:: bash + + NODES="compute{001..128}" + + for node in $NODES; do + echo "Installing DataCrumbs epilog on $node" + ssh $node "sudo mkdir -p /etc/slurm/epilog.d && sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh /etc/slurm/epilog.d/datacrumbs_service_stop.sh" + done + +Step 7: Install datacrumbs_salloc Wrapper +------------------------------------------ + +The ``datacrumbs_salloc`` wrapper is installed as part of the standard DataCrumbs installation: + +**Wrapper location:** ``/bin/datacrumbs_salloc`` + +Users should add the DataCrumbs bin directory to their PATH: + +.. code-block:: bash + + # Add to user's ~/.bashrc or ~/.bash_profile + export PATH=/path/to/datacrumbs/install/bin:$PATH + +**Verify wrapper installation:** + +.. code-block:: bash + + # Check if wrapper is accessible + which datacrumbs_salloc + + # View wrapper help + datacrumbs_salloc --help + +Step 8: Restart SLURM (if needed) +---------------------------------- + +After modifying ``slurm.conf``, restart SLURM services: + +.. code-block:: bash + + # On controller node + sudo systemctl restart slurmctld + + # On compute nodes (if using slurmd) + sudo systemctl restart slurmd + +If using ``scontrol``, you can reconfigure without full restart: + +.. code-block:: bash + + sudo scontrol reconfigure + +Complete Installation Script +============================= + +Here's a complete script for deploying across multiple nodes: + +.. code-block:: bash + + #!/bin/bash + # deploy_datacrumbs_slurm.sh + + # Configuration + DATACRUMBS_INSTALL=/path/to/datacrumbs/install + NODES="compute{001..128}" + + echo "Deploying DataCrumbs SLURM integration..." + + # Deploy to each node + for node in $(eval echo $NODES); do + echo "==========================================" + echo "Deploying to $node" + echo "==========================================" + + ssh $node << EOF + # Install systemd service + sudo ln -sf ${DATACRUMBS_INSTALL}/etc/datacrumbs/systemd/datacrumbs@.service \\ + /etc/systemd/system/datacrumbs@.service + sudo systemctl daemon-reload + + # Create SLURM directories + sudo mkdir -p /etc/slurm/prolog.d + sudo mkdir -p /etc/slurm/epilog.d + + # Create prolog wrapper script + sudo tee /etc/slurm/prolog.sh > /dev/null << 'PROLOG_EOF' +#!/bin/bash +PROLOG_DIR="/etc/slurm/prolog.d" +if [ -d "\$PROLOG_DIR" ]; then + for script in "\$PROLOG_DIR"/*; do + if [ -x "\$script" ]; then + "\$script" + fi + done +fi +PROLOG_EOF + sudo chmod +x /etc/slurm/prolog.sh + + # Create epilog wrapper script + sudo tee /etc/slurm/epilog.sh > /dev/null << 'EPILOG_EOF' +#!/bin/bash +EPILOG_DIR="/etc/slurm/epilog.d" +if [ -d "\$EPILOG_DIR" ]; then + for script in "\$EPILOG_DIR"/*; do + if [ -x "\$script" ]; then + "\$script" + fi + done +fi +EPILOG_EOF + sudo chmod +x /etc/slurm/epilog.sh + + # Symlink DataCrumbs prolog script + sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_run.sh \\ + /etc/slurm/prolog.d/datacrumbs_service_run.sh + + # Symlink DataCrumbs epilog script + sudo ln -sf ${DATACRUMBS_INSTALL}/sbin/datacrumbs_service_stop.sh \\ + /etc/slurm/epilog.d/datacrumbs_service_stop.sh + + # Clean old runtime files + sudo rm -rf /tmp/datacrumbs* + sudo rm -rf /var/run/datacrumbs* + + echo "✓ Installation complete on $node" + EOF + done + + echo "" + echo "==========================================" + echo "Deployment complete!" + echo "==========================================" + echo "" + echo "Next steps:" + echo "1. Verify slurm.conf has Prolog=/etc/slurm/prolog.sh and Epilog=/etc/slurm/epilog.sh" + echo "2. Run: sudo scontrol reconfigure (on controller)" + echo "3. Add DataCrumbs bin to user PATH" + echo "4. Test: datacrumbs_salloc --datacrumbs-enable -N 1" + +Usage +===== + +Basic Usage +----------- + +.. important:: + Before tracing, applications must be instrumented using ``datacrumbs_track`` or ``datacrumbs_wrap``. DataCrumbs cannot trace uninstrumented executables. See the main documentation for tracking instructions. + +Use ``datacrumbs_salloc`` wrapper instead of ``salloc`` to enable DataCrumbs: + +.. code-block:: bash + + datacrumbs_salloc --datacrumbs-enable [SLURM_OPTIONS] + +Example: + +.. code-block:: bash + + # Single node allocation + datacrumbs_salloc --datacrumbs-enable -N 1 + + # Multi-node allocation + datacrumbs_salloc --datacrumbs-enable -N 4 -n 32 + + # With time limit and partition + datacrumbs_salloc --datacrumbs-enable -N 2 -t 1:00:00 -p compute + +With Custom Composable Configuration +------------------------------------- + +Specify a custom composable configuration: + +.. code-block:: bash + + datacrumbs_salloc --datacrumbs-enable --datacrumbs-composite=CONFIG_NAME [SLURM_OPTIONS] + +Example: + +.. code-block:: bash + + # Use POSIX I/O configuration + datacrumbs_salloc --datacrumbs-enable --datacrumbs-composite=posix_io -N 4 + + # Use HDF5 configuration + datacrumbs_salloc --datacrumbs-enable --datacrumbs-composite=hdf5_only -N 2 + + # Use MPI-IO configuration + datacrumbs_salloc --datacrumbs-enable --datacrumbs-composite=mpiio_only -N 8 + +Running Jobs in Allocation +--------------------------- + +Once you have an allocation with DataCrumbs enabled, run your applications normally: + +.. code-block:: bash + + # Get allocation with tracing + datacrumbs_salloc --datacrumbs-enable -N 4 + + # Inside allocation, run jobs + srun -N 4 -n 32 ./myapp + + # MPI application + srun -N 4 -n 64 ./parallel_simulation + + # Exit allocation when done + exit + +Using with sbatch +----------------- + +For batch jobs, you need to set the job comment manually in your batch script: + +.. code-block:: bash + + #!/bin/bash + #SBATCH -N 4 + #SBATCH -n 32 + #SBATCH -t 1:00:00 + #SBATCH --comment='{"datacrumbs": {"enable": "yes", "composite": "posix_io"}}' + + # Your application + srun ./myapp + +.. note:: + The ``--comment`` flag must contain valid JSON with the DataCrumbs metadata. The wrapper handles this automatically for interactive allocations. + +Command Reference +================= + +datacrumbs_salloc Options +-------------------------- + +``--datacrumbs-enable`` + Enable DataCrumbs tracing for the allocation + + - Default: disabled + - No argument required + - Must be specified to activate tracing + +``--datacrumbs-composite=NAME`` + Specify custom composable configuration + + - Requires ``--datacrumbs-enable`` + - NAME must be alphanumeric and underscores only + - Composable must exist (created with ``datacrumbs_compose``) + - If not specified, uses default configuration + +.. warning:: + The ``--comment`` flag is reserved for internal use by the wrapper and cannot be used directly. + +Examples +======== + +Example 1: Interactive Job with Tracing +---------------------------------------- + +.. code-block:: bash + + # Get allocation with tracing + datacrumbs_salloc --datacrumbs-enable -N 1 + + # Run I/O benchmark + srun dd if=/dev/zero of=/tmp/test bs=1M count=100 + + # Check traces (will be available after epilog) + exit + +Example 2: Multi-Node MPI Application +-------------------------------------- + +.. code-block:: bash + + # Get allocation with tracing + datacrumbs_salloc --datacrumbs-enable -N 8 -n 64 + + # Run MPI application + srun -N 8 -n 64 ./parallel_simulation input.dat + + # Exit when done + exit + +Example 3: Custom Configuration for HDF5 +----------------------------------------- + +.. code-block:: bash + + # First, create HDF5-specific configuration (one-time, as root/admin) + sudo datacrumbs_compose --action compose \\ + --name hdf5_workflow \\ + --probes H5Fopen,H5Fclose,H5Dcreate,H5Dopen,H5Dclose,H5Dread,H5Dwrite + + # Get allocation with custom config + datacrumbs_salloc --datacrumbs-enable --datacrumbs-composite=hdf5_workflow -N 4 + + # Run HDF5 application + srun -N 4 -n 32 ./hdf5_analysis dataset.h5 + + # Exit + exit + +Example 4: Batch Job with Tracing +---------------------------------- + +Create a batch script ``job.sbatch``: + +.. code-block:: bash + + #!/bin/bash + #SBATCH -J datacrumbs_test + #SBATCH -N 4 + #SBATCH -n 32 + #SBATCH -t 1:00:00 + #SBATCH -p compute + #SBATCH --comment='{"datacrumbs": {"enable": "yes", "composite": "NONE"}}' + + module load ior + + # Run IOR benchmark + srun -N 4 -n 32 ior -t 1m -b 16m -F -o /scratch/testfile + +Submit the job: + +.. code-block:: bash + + sbatch job.sbatch + +Trace File Location +=================== + +Traces are saved to the configured trace directory in **DFTracer format** (``.pfw.gz``). + +**Trace Directory Pattern**: + +According to the ``trace_dir_pattern`` in the project configuration: + +.. code-block:: bash + + # Default pattern: /path/to/traces/%YY%/%MM%/%DD% + # For job on 2025-12-03: + /path/to/traces/25/12/03/ + +**Trace File Naming**: + +.. code-block:: text + + # Without MPI: + trace----.pfw.gz + + # With MPI: + trace-----.pfw.gz + +**Example**: + +.. code-block:: bash + + # Single node job (SLURM_JOB_ID=12345) + /path/to/traces/25/12/03/trace-haridev-12345-node01-lead.pfw.gz + + # Multi-rank MPI job (4 ranks, SLURM_JOB_ID=67890) + /path/to/traces/25/12/03/trace-haridev-67890-0-4-lead.pfw.gz + /path/to/traces/25/12/03/trace-haridev-67890-1-4-lead.pfw.gz + /path/to/traces/25/12/03/trace-haridev-67890-2-4-lead.pfw.gz + /path/to/traces/25/12/03/trace-haridev-67890-3-4-lead.pfw.gz + +Find traces for a specific job: + +.. code-block:: bash + + # Set job ID + JOBID=12345 + + # Find trace files + find $DATACRUMBS_TRACE_DIR -name "trace-*-${JOBID}-*.pfw.gz" + + # List all traces from today + ls -lh $DATACRUMBS_TRACE_DIR/$(date +%y/%m/%d)/trace-*.pfw.gz + +Monitoring and Debugging +========================= + +Check Service Status +-------------------- + +.. code-block:: bash + + # Check if service is running for a job + JOBID= + systemctl status datacrumbs@${JOBID}.service + + # View service logs + sudo journalctl -u datacrumbs@${JOBID}.service -f + +Check Prolog/Epilog Execution +------------------------------ + +.. code-block:: bash + + # View SLURM logs + sudo tail -f /var/log/slurm/slurmctld.log + + # Check job info + scontrol show job + + # View job comment (contains DataCrumbs metadata) + scontrol show job | grep Comment + +Check Job Comment +----------------- + +.. code-block:: bash + + # View DataCrumbs metadata in job comment + JOBID= + scontrol show job $JOBID | grep Comment | awk -F'=' '{print $2}' | jq . + +Debug Mode +---------- + +Enable verbose output in prolog/epilog scripts: + +.. code-block:: bash + + # Edit prolog script + sudo vi /etc/slurm/prolog.d/datacrumbs_service_run.sh + + # Add at the beginning: + export DATACRUMBS_VERBOSE=1 + +Troubleshooting +=============== + +Job Hangs at Prolog +-------------------- + +**Symptom**: Job hangs during prolog execution + +**Cause**: DataCrumbs server failed to start + +**Solution**: + +.. code-block:: bash + + # Check systemd service + sudo journalctl -u "datacrumbs@*" --no-pager + + # Check for permission issues + ls -la /var/run/datacrumbs/ + + # Verify server binary exists + ls -la $DATACRUMBS_INSTALL/sbin/datacrumbs + + # Check prolog script execution + sudo tail -f /var/log/slurm/slurmctld.log + +Composable Not Found +-------------------- + +**Symptom**: Error about missing composable configuration + +**Cause**: Specified composable doesn't exist + +**Solution**: + +.. code-block:: bash + + # List available composables + ls $PREFIX/libexec/datacrumbs/sbin/$USER/ + + # Create if missing + sudo datacrumbs_compose --action compose --name --probes + +No Traces Generated +------------------- + +**Symptom**: Job completes but no trace files (``.pfw.gz``) created + +**Cause**: Multiple possible causes + +**Solution**: + +.. code-block:: bash + + # Verify job comment was set correctly + scontrol show job | grep Comment + + # Should show: Comment={"datacrumbs": {"enable": "yes", ...}} + + # Check if trace files exist + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + + # Check trace directory permissions + ls -la $DATACRUMBS_TRACE_DIR + + # Verify application was instrumented + # Applications MUST be tracked or wrapped before tracing works + ldd ./myapp | grep datacrumbs + + # Check service logs + sudo journalctl -u "datacrumbs@*" --since "1 hour ago" + + # Verify eBPF support + ls /sys/kernel/btf/vmlinux + +Wrapper Not Found +----------------- + +**Symptom**: ``datacrumbs_salloc: command not found`` + +**Cause**: DataCrumbs bin directory not in PATH + +**Solution**: + +.. code-block:: bash + + # Add to PATH temporarily + export PATH=/path/to/datacrumbs/install/bin:$PATH + + # Add to ~/.bashrc for persistence + echo 'export PATH=/path/to/datacrumbs/install/bin:$PATH' >> ~/.bashrc + source ~/.bashrc + +Invalid JSON in Comment +----------------------- + +**Symptom**: Job fails with JSON parsing error + +**Cause**: Malformed JSON in ``--comment`` field (when using sbatch) + +**Solution**: + +.. code-block:: bash + + # Validate JSON format + echo '{"datacrumbs": {"enable": "yes", "composite": "NONE"}}' | jq . + + # Use single quotes around comment in sbatch script + #SBATCH --comment='{"datacrumbs": {"enable": "yes", "composite": "NONE"}}' + +Service Won't Stop +------------------ + +**Symptom**: Epilog fails, service remains running + +**Cause**: Server process not responding + +**Solution**: + +.. code-block:: bash + + # Manually stop service + JOBID= + sudo systemctl stop datacrumbs@${JOBID}.service + + # Force kill if needed + sudo pkill -f "datacrumbs.*${JOBID}" + + # Clean up runtime files + sudo rm -rf /var/run/datacrumbs/*${JOBID}* + +Best Practices +============== + +1. **Test First**: Test integration on a single node before cluster-wide deployment +2. **Monitor Overhead**: Check that tracing overhead is acceptable for your workloads +3. **Use Composables**: Create workload-specific configurations to minimize overhead +4. **Regular Cleanup**: Periodically clean old trace files to manage disk usage +5. **Log Rotation**: Configure log rotation for DataCrumbs and systemd logs +6. **Resource Limits**: Set appropriate ulimits in systemd service file +7. **Documentation**: Document custom composables and their use cases +8. **User Training**: Educate users on when and how to use ``datacrumbs_salloc`` +9. **Disk Space**: Ensure adequate space for trace files +10. **Backup Configs**: Keep backups of configuration files and composables +11. **PATH Setup**: Document PATH requirements for users in site documentation +12. **JSON Validation**: Validate JSON when manually setting comments in batch scripts + +Advanced Configuration +====================== + +Customizing Systemd Service +---------------------------- + +Edit the systemd service file to adjust timeouts, resources, etc.: + +.. code-block:: ini + + # /etc/systemd/system/datacrumbs@.service + [Unit] + Description=DataCrumbs I/O Tracer for Job %i + + [Service] + Type=forking + User=root + EnvironmentFile=/var/run/datacrumbs/datacrumbs-%i.env + ExecStart=/path/to/datacrumbs/sbin/datacrumbs ... + TimeoutStartSec=120s + TimeoutStopSec=60s + LimitNOFILE=1048576 + LimitMEMLOCK=infinity + +Per-User Trace Directories +--------------------------- + +Configure per-user trace directories in the project configuration: + +.. code-block:: yaml + + # project.yaml + trace: + dir_pattern: /scratch/${USER}/traces/%YY%/%MM%/%DD% + +Resource Quotas +--------------- + +Limit trace file size and count per user (filesystem-dependent): + +.. code-block:: bash + + # Example with XFS quotas + xfs_quota -x -c 'limit -u bsoft=100g bhard=120g $USER' /scratch + +Conditional Tracing +------------------- + +Enable tracing only for specific user groups or applications (modify prolog script): + +.. code-block:: bash + + # In datacrumbs_service_run.sh + # Only trace for specific users + if [[ ! " user1 user2 user3 " =~ " $SLURM_JOB_USER " ]]; then + exit 0 # Skip tracing + fi + +See Also +======== + +* :doc:`composability` - Creating custom composable configurations +* :doc:`deployment` - General deployment guidelines +* :doc:`usage` - DataCrumbs usage and configuration + +For additional support or questions about SLURM integration, consult your system administrator or refer to the DataCrumbs GitHub repository. diff --git a/docs/tuo.rst b/docs/tuo.rst deleted file mode 100644 index 58a8c31e..00000000 --- a/docs/tuo.rst +++ /dev/null @@ -1,20 +0,0 @@ - -1. Modules to be loaded - - .. code-block:: bash - - module load gcc/11.2.0 - export CC=`which gcc` - export CXX=`which g++` - -2. BPF Time configuration for Tuo - - .. code-block:: bash - - export BPFTIME_SHM_MEMORY_MB=10240 - export BPFTIME_MAX_FD_COUNT=128000 - bpftime --install-location $PREFIX/lib load /usr/workspace/haridev/datacrumbs/build/bin/datacrumbs "run" "tuolumne-mpiio" "--user" "haridev" "--config_path" "/usr/workspace/haridev/datacrumbs/etc/datacrumbs/configs" "--data_dir" "/usr/workspace/haridev/datacrumbs/etc/datacrumbs/data" "--trace_log_dir" "/usr/workspace/haridev/datacrumbs/etc/datacrumbs/logs" - add-auto-load-safe-path /opt/cray/pe/gcc/11.2.0/snos/lib64/libstdc++.so.6.0.29-gdb.py - set follow-fork-mode child - set detach-on-fork off - set print-frame-arguments all \ No newline at end of file diff --git a/docs/usage.rst b/docs/usage.rst new file mode 100755 index 00000000..b9e986dd --- /dev/null +++ b/docs/usage.rst @@ -0,0 +1,832 @@ +================= +Using DataCrumbs +================= + +DataCrumbs provides multiple modes of operation for tracing applications. This guide covers all usage patterns. + +Quick Start +=========== + +**Recommended: Use Binary Tracking** + +Applications should be instrumented using ``datacrumbs_track`` (recommended) or ``datacrumbs_wrap``: + +.. code-block:: bash + + # Source setup + source /path/to/install/bin/datacrumbs_setup + + # Recommended: Track the application (permanent instrumentation) + datacrumbs_track --executable ./myapp + datacrumbs_run --app "./myapp arg1 arg2" + + # Alternative: Wrap the application (runtime instrumentation) + datacrumbs_run --app "datacrumbs_wrap ./myapp arg1 arg2" + +This automatically: + +1. Starts the DataCrumbs server +2. Runs your instrumented application with tracing enabled +3. Stops the server and collects traces + +.. note:: + **Tracked applications work normally when DataCrumbs is not running** - they simply won't capture trace data. When the DataCrumbs server is running, data is automatically captured. When it's not running, the application executes normally with no tracing overhead. + +Common Script Options +===================== + +All DataCrumbs scripts support the following options: + +.. list-table:: Common Script Options + :header-rows: 1 + :widths: 20 80 + + * - Option + - Description + * - ``--verbose`` + - Enable detailed output for debugging and monitoring + * - ``--quiet`` + - Suppress informational messages (errors still shown) + * - ``--dry-run`` + - Show what would be executed without actually running commands + +Example usage: + +.. code-block:: bash + + # Verbose mode to see detailed operations + datacrumbs_run --verbose --app "./myapp" + + # Quiet mode for automated scripts + datacrumbs_run --quiet --app "./batch_job" + + # Dry-run to preview actions + datacrumbs_track --dry-run --executable ./myapp + + # Combine options + datacrumbs_compose --action discover --verbose + +Usage Modes +=========== + +DataCrumbs supports three primary usage modes: + +1. **Wrapper Mode** (``datacrumbs_run``): Easiest - wraps application execution +2. **Server Mode** (``datacrumbs_server_run.sh``): Long-running server for multiple sessions +3. **Service Mode** (``datacrumbs_service_run.sh``): Systemd service integration + +Wrapper Mode +============ + +Use ``datacrumbs_run`` for single application tracing sessions. + +Basic Usage +----------- + +.. code-block:: bash + + datacrumbs_run --app "command args" + +Example: Trace a Simple Program +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + # Trace dd command + datacrumbs_run --app "dd if=/dev/zero of=/tmp/test.dat bs=1M count=100" + + # Trace Python script + datacrumbs_run --app "python3 myanalysis.py" + + # Trace with complex arguments + datacrumbs_run --app "tar -czf backup.tar.gz /data/important" + +MPI Applications +---------------- + +For MPI applications, specify node and process configuration. The MPI launcher (e.g., ``mpirun``, ``srun``, ``flux run``) is configured in the project YAML and automatically used by DataCrumbs. + +.. code-block:: bash + + datacrumbs_run --app "./mpiapp input.dat" --enable_mpi --nodes 4 --ppn 8 + +**Options:** + +- ``--enable_mpi``: Enable MPI mode +- ``--nodes N``: Number of nodes to use +- ``--ppn N``: Processes per node + +.. note:: + Do not include the MPI launcher (``mpirun``, ``srun``, etc.) in the ``--app`` command. DataCrumbs automatically uses the launcher configured in ``project.yaml`` (``job.run`` setting). + +Example: MPI Application +^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + # Run 32 processes (4 nodes × 8 processes/node) + datacrumbs_run --app "./myapp" --enable_mpi --nodes 4 --ppn 8 + + # With arguments + datacrumbs_run --app "./simulation input.dat" --enable_mpi --nodes 2 --ppn 16 + +Command Reference: datacrumbs_run +---------------------------------- + +**Synopsis:** + +.. code-block:: bash + + datacrumbs_run --app "COMMAND" [OPTIONS] + +**Required Arguments:** + +``--app "COMMAND"`` + Application command with arguments (quoted) + +**Optional Arguments:** + +``--enable_mpi`` + Enable MPI support (default: disabled) + +``--nodes N`` + Number of nodes for MPI execution (default: 1) + +``--ppn N`` + Processes per node for MPI execution (default: 1) + +**Examples:** + +.. code-block:: bash + + # Single process + datacrumbs_run --app "./myapp input.txt" + + # MPI with 16 processes on 2 nodes + datacrumbs_run --app "./parallel_app" --enable_mpi --nodes 2 --ppn 8 + + # Complex command with pipes and redirection + datacrumbs_run --app "cat largefile.dat | ./process > output.txt" + +Output Location +--------------- + +**Trace Files** (DFTracer format): + +Traces are saved to ``$DATACRUMBS_TRACE_DIR`` with naming based on MPI mode: + +.. code-block:: bash + + # Without MPI: + $DATACRUMBS_TRACE_DIR/trace----.pfw.gz + + # With MPI: + $DATACRUMBS_TRACE_DIR/trace-----.pfw.gz + +**Example filenames**: + +.. code-block:: text + + trace-root-12345-node01-docker.pfw.gz # Non-MPI mode + trace-haridev-67890-0-4-lead.pfw.gz # MPI rank 0 of 4 + trace-haridev-67890-3-4-lead.pfw.gz # MPI rank 3 of 4 + +**Log Files**: + +Logs are saved to ``$DATACRUMBS_LOG_DIR``: + +.. code-block:: bash + + $DATACRUMBS_LOG_DIR/datacrumbs-server-.log + $DATACRUMBS_LOG_DIR/datacrumbs-client-.log + +See :doc:`setup` Output Files section for detailed format information. + +Server Mode +=========== + +Use server mode when you want to run multiple tracing sessions without restarting the server. + +**Prerequisites**: Applications must be instrumented before the server can trace them. + +Starting the Server +------------------- + +.. code-block:: bash + + sudo datacrumbs_server_run.sh + +The server: + +- Runs in the background +- Listens for traced applications +- Collects events from all traced processes +- Writes traces continuously to ``.pfw.gz`` files + +Starting with Composable Configuration +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: bash + + sudo datacrumbs_server_run.sh --composite-name myconfig + +Instrumenting Applications +-------------------------- + +**Before** running the server, instrument your applications: + +.. code-block:: bash + + # Method 1: Track binary (permanent modification) + datacrumbs_track --executable ./myapp + + # Method 2: Use wrap script (runtime injection) + # No pre-tracking needed for wrap mode + +Running Applications +-------------------- + +With the server running and applications instrumented: + +.. code-block:: bash + + # Run tracked binary + ./myapp + + # Or use wrap mode + datacrumbs_wrap ./otherapp arg1 arg2 + +Stopping the Server +------------------- + +.. code-block:: bash + + sudo datacrumbs_server_stop.sh + +This: + +- Stops the eBPF programs +- Flushes remaining events +- Closes trace files +- Cleans up resources + +Command Reference: datacrumbs_server_run.sh +------------------------------------------- + +**Synopsis:** + +.. code-block:: bash + + sudo datacrumbs_server_run.sh [OPTIONS] + +**Optional Arguments:** + +``--composite-name NAME`` + Use custom composable configuration (default: standard configuration) + +``--enable-mpi`` + Enable MPI support + +``--nodes N`` + Number of nodes (default: 1) + +``--ppn N`` + Processes per node (default: 1) + +**Examples:** + +.. code-block:: bash + + # Start standard server + sudo datacrumbs_server_run.sh + + # Start with custom configuration + sudo datacrumbs_server_run.sh --composite-name hdf5_only + + # Start for MPI environment + sudo datacrumbs_server_run.sh --enable-mpi --nodes 4 --ppn 16 + +Command Reference: datacrumbs_server_stop.sh +-------------------------------------------- + +**Synopsis:** + +.. code-block:: bash + + sudo datacrumbs_server_stop.sh [OPTIONS] + +**Optional Arguments:** + +``--composite-name NAME`` + Stop server for specific composable configuration + +**Examples:** + +.. code-block:: bash + + # Stop standard server + sudo datacrumbs_server_stop.sh + + # Stop specific composable server + sudo datacrumbs_server_stop.sh --composite-name hdf5_only + +Service Mode (Systemd) +======================= + +Service mode integrates DataCrumbs with systemd for managed, persistent tracing. + +Service Installation +-------------------- + +The systemd service file is installed at: + +.. code-block:: text + + /etc/datacrumbs/systemd/datacrumbs@.service + +Starting the Service +-------------------- + +.. code-block:: bash + + # Enable and start service for current user + sudo systemctl enable datacrumbs@$USER.service + sudo systemctl start datacrumbs@$USER.service + +The service: + +- Starts automatically at boot +- Restarts on failure +- Logs to systemd journal +- Runs with appropriate privileges + +Using Service Scripts +^^^^^^^^^^^^^^^^^^^^^ + +Alternatively, use the provided scripts: + +.. code-block:: bash + + # Start service + sudo datacrumbs_service_run.sh + + # Stop service + sudo datacrumbs_service_stop.sh + +Checking Service Status +----------------------- + +.. code-block:: bash + + # Check status + sudo systemctl status datacrumbs@$USER.service + + # View logs + sudo journalctl -u datacrumbs@$USER.service -f + + # Check if running + ps aux | grep datacrumbs + +Stopping the Service +-------------------- + +.. code-block:: bash + + # Stop service + sudo systemctl stop datacrumbs@$USER.service + + # Disable automatic startup + sudo systemctl disable datacrumbs@$USER.service + + # Or use script + sudo datacrumbs_service_stop.sh + +Command Reference: datacrumbs_service_run.sh +-------------------------------------------- + +**Synopsis:** + +.. code-block:: bash + + sudo datacrumbs_service_run.sh + +**Description:** + +Starts DataCrumbs as a systemd service. The service is automatically enabled and started. + +**Prerequisites:** + +- Root or sudo access +- Systemd service file installed +- Environment configured via ``datacrumbs_setup`` + +Command Reference: datacrumbs_service_stop.sh +--------------------------------------------- + +**Synopsis:** + +.. code-block:: bash + + sudo datacrumbs_service_stop.sh + +**Description:** + +Stops the DataCrumbs systemd service. + +Composable Mode +=============== + +Composable mode allows using custom-built DataCrumbs configurations for specialized tracing scenarios. + +Creating a Composable Configuration +------------------------------------ + +.. code-block:: bash + + # Discover available probes + sudo datacrumbs_compose --action discover + + # Build custom configuration + sudo datacrumbs_compose --action build --name myconfig + +Running with Composable +------------------------ + +.. code-block:: bash + + # Using run wrapper + datacrumbs_compose_run --composite-name myconfig + + # Or start server with composable + sudo datacrumbs_server_run.sh --composite-name myconfig + +Command Reference: datacrumbs_compose +------------------------------------- + +**Synopsis:** + +.. code-block:: bash + + sudo datacrumbs_compose --action ACTION [OPTIONS] + +**Arguments:** + +``--action ACTION`` + Action to perform: ``discover``, ``build``, ``clean`` + +``--name NAME`` + Name for the composable configuration + +**Examples:** + +.. code-block:: bash + + # Discover available probes + sudo datacrumbs_compose --action discover + + # Build custom config + sudo datacrumbs_compose --action build --name hdf5_posix + + # Clean composable builds + sudo datacrumbs_compose --action clean + +Advanced Usage +============== + +Filtering by Path +----------------- + +**Administrator Configuration Only** + +Path filtering must be configured by the system administrator at build time and cannot be changed by users at runtime. + +.. code-block:: bash + + # Administrator sets inclusion path at build time: + # cmake -DDATACRUMBS_INCLUSION_PATH=/scratch/data .. + # make install + # + # Or via project YAML configuration: + # inclusion_path: /scratch/data + +Once configured, only I/O operations on files under the specified path (e.g., ``/scratch/data``) will be traced. + +.. note:: + Users cannot change the inclusion path at runtime. Contact your system administrator to modify path filtering. + +Multi-Node Tracing +------------------ + +For distributed tracing across multiple nodes: + +.. code-block:: bash + + # Start server on each node (via scheduler) + srun -N 4 sudo datacrumbs_server_run.sh --enable-mpi --nodes 4 + + # Run application + srun -N 4 -n 32 ./mpi_app + + # Stop servers + srun -N 4 sudo datacrumbs_server_stop.sh + +Traces are collected independently on each node. + +Integration with Job Schedulers +================================ + +SLURM +----- + +.. code-block:: bash + + #!/bin/bash + #SBATCH -N 4 + #SBATCH -n 32 + #SBATCH -t 1:00:00 + + # Load DataCrumbs + module load datacrumbs/0.0.4 + + # Run with tracing + datacrumbs_run --app "./myapp" --enable_mpi --nodes 4 --ppn 8 + +FLUX +---- + +.. code-block:: bash + + #!/bin/bash + + # Load DataCrumbs + module load datacrumbs/0.0.4 + + # Submit job with tracing + flux run -N 4 -n 32 datacrumbs_run --app "./myapp" --enable_mpi + +OpenMPI (Standalone) +-------------------- + +.. code-block:: bash + + # Load DataCrumbs and MPI + module load datacrumbs/0.0.4 + module load openmpi + + # Run with tracing (MPI launcher configured in project.yaml) + datacrumbs_run --app "./myapp" --enable_mpi --nodes 4 --ppn 8 + +Trace Analysis +============== + +Viewing Traces +-------------- + +DataCrumbs outputs traces in **DFTracer format** (``.pfw.gz`` compressed files): + +.. code-block:: bash + + # Find your traces + ls $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + + # Example output: + # trace-root-12345-node01-docker.pfw.gz + # trace-haridev-67890-0-4-lead.pfw.gz + +**Format**: DFTracer format - see https://dftracer.readthedocs.io/en/latest/trace_format.html + +The trace includes: + +- Timestamped events (nanosecond precision) +- Event IDs (mapped via ``categories-*.json``) +- Function entry/exit pairs +- Process/thread/rank information +- File access patterns + +Analyzing Traces with DFTracer Tools +------------------------------------- + +**DFTracer Utilities** + +Use DFTracer utilities for trace manipulation and inspection: + +.. code-block:: bash + + # Install DFTracer utilities + pip install dftracer-utils + + # Get trace statistics + dftracer-stats --input trace-*.pfw.gz + + # Merge multiple trace files (e.g., from MPI ranks) + dftracer-merge --input "trace-*-67890-*.pfw.gz" --output merged-trace.pfw.gz + + # Split large trace files + dftracer-split --input merged-trace.pfw.gz --output-dir split-traces/ + +**Documentation**: https://dftracer.readthedocs.io/en/latest/bash_utilities.html + +**DFAnalyzer - Comprehensive Analysis** + +For detailed analysis, use DFAnalyzer: + +.. code-block:: bash + + # Install DFAnalyzer + pip install dfanalyzer + + # Generate analysis report + dfanalyzer analyze --input trace-*.pfw.gz --output report.html + + # Interactive analysis + dfanalyzer interactive --input trace-*.pfw.gz + + # Export to CSV for custom analysis + dfanalyzer export --input trace-*.pfw.gz --format csv --output trace-data.csv + +**Documentation**: https://dftracer.readthedocs.io/projects/analyzer/en/latest/getting-started.html#usage + +Custom Analysis Scripts +----------------------- + +DataCrumbs also includes Jupyter notebooks for custom analysis: + +.. code-block:: bash + + # Navigate to analysis directory + cd $DATACRUMBS_INSTALL/share/datacrumbs/analysis + + # Install dependencies + pip install -r requirements.txt + + # Run analysis notebook + jupyter notebook analysis.ipynb + +Troubleshooting +=============== + +Permission Denied Errors +------------------------ + +.. code-block:: bash + + # Ensure sudo for server operations + sudo datacrumbs_server_run.sh + + # Check ulimits + ulimit -n + ulimit -l + + # Increase if needed + ulimit -n 1048576 + ulimit -l unlimited + +Server Won't Start +------------------ + +.. code-block:: bash + + # Check if already running + ps aux | grep datacrumbs + + # Check logs + cat $DATACRUMBS_TRACE_DIR/datacrumbs.log + + # Verify eBPF support + ls /sys/kernel/btf/vmlinux + + # Check for port conflicts + sudo lsof -i -P -n | grep datacrumbs + +No Traces Generated +------------------- + +.. code-block:: bash + + # Verify server is running + ps aux | grep datacrumbs + + # Check trace directory exists + ls -la $DATACRUMBS_TRACE_DIR + + # Verify application is instrumented + ldd ./myapp | grep datacrumbs + + # Check logs for errors + tail -f $DATACRUMBS_TRACE_DIR/datacrumbs.log + +High Overhead +------------- + +.. code-block:: bash + + # Reduce traced events + export DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS=10000 + + # Use profiling mode instead of tracing + # (Administrator must rebuild with -DDATACRUMBS_MODE_STR=PROFILE) + + # Path filtering (Administrator only - set at build time) + # Contact your administrator to enable path filtering + +Missing Events +-------------- + +.. code-block:: bash + + # Increase ring buffer size + # (Rebuild with -DDATACRUMBS_TRACE_RINGBUF_SIZE_MB=64) + + # Check for event drops + grep "dropped" $DATACRUMBS_TRACE_DIR/datacrumbs.log + +Best Practices +============== + +1. **Use binary tracking** (``datacrumbs_track``) - recommended for most use cases; apps run normally when DataCrumbs is not active +2. **Use wrapper mode** (``datacrumbs_run``) for simplicity and automatic server management +3. **Use server mode** for multiple short-running applications +4. **Use service mode** for continuous, production monitoring +5. **Path filtering** (administrator only) - contact your admin to enable filtering by specific paths +6. **Increase ring buffer** for high-throughput I/O applications +7. **Check logs** regularly for warnings or errors +8. **Clean old traces** periodically to free disk space +9. **Test on small workloads** before production runs +10. **Use composables** for specialized tracing needs +11. **Monitor overhead** and adjust thresholds as needed + +Examples +======== + +Example 1: Trace HDF5 Application +---------------------------------- + +.. code-block:: bash + + # Load environment + module load datacrumbs/0.0.4 + module load hdf5 + + # Run with tracing + datacrumbs_run --app "./hdf5_writer dataset.h5" + + # View trace files (.pfw.gz format) + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + +Example 2: Trace MPI-IO Application +------------------------------------ + +.. code-block:: bash + + # Load modules + module load datacrumbs/0.0.4 + module load openmpi + + # Run MPI application with tracing (64 processes on 4 nodes) + datacrumbs_run --app "./parallel_io" \ + --enable_mpi --nodes 4 --ppn 16 + + # View traces from all ranks (64 .pfw.gz files, one per rank) + ls -lh $DATACRUMBS_TRACE_DIR/trace-*-*-64-*.pfw.gz + +Example 3: Long-Running Server +------------------------------- + +.. code-block:: bash + + # Start server + sudo datacrumbs_server_run.sh + + # Track multiple applications + datacrumbs_track --executable ./app1 + datacrumbs_track --executable ./app2 + + # Run applications (they're automatically traced) + ./app1 & + ./app2 & + + # Wait for completion + wait + + # Stop server + sudo datacrumbs_server_stop.sh + + # View collected traces + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz + +Example 4: Filtered Tracing +---------------------------- + +**Prerequisite**: Administrator must have configured path filtering at build time. + +.. code-block:: bash + + # If administrator configured filtering for /scratch filesystem: + # cmake -DDATACRUMBS_INCLUSION_PATH=/scratch .. + + # Run application - only /scratch I/O will be traced + datacrumbs_run --app "./mixed_io" + + # Only /scratch I/O operations are in the trace + # View the generated trace file + ls -lh $DATACRUMBS_TRACE_DIR/trace-*.pfw.gz diff --git a/etc/datacrumbs/configs/docker.yaml b/etc/datacrumbs/configs/docker.yaml index 4867cd31..3ff6db14 100755 --- a/etc/datacrumbs/configs/docker.yaml +++ b/etc/datacrumbs/configs/docker.yaml @@ -20,4 +20,5 @@ capture_probes: - name: os_page_cache probe: kprobe type: header - file: @DATACRUMBS_KERNEL_HEADERS_PATH@/include/linux/pagemap.h \ No newline at end of file + file: @DATACRUMBS_KERNEL_HEADERS_PATH@/include/linux/pagemap.h + enable_explorer: false \ No newline at end of file diff --git a/etc/datacrumbs/configs/lead.yaml b/etc/datacrumbs/configs/lead.yaml index 1b0528d3..16c5f971 100755 --- a/etc/datacrumbs/configs/lead.yaml +++ b/etc/datacrumbs/configs/lead.yaml @@ -20,7 +20,28 @@ capture_probes: probe: kprobe type: binary file: /usr/lib/modules/5.14.0-570.55.1.1toss.t5.x86_64/weak-updates/lustre/fs/lustre.ko - - name: mpiio + regex: (?!.*__)(?!.*:)(?!.*constprop)(?!.*isra).* + - name: mdc + probe: kprobe + type: binary + file: /usr/lib/modules/5.14.0-570.55.1.1toss.t5.x86_64/weak-updates/lustre/fs/mdc.ko + regex: (?!.*__)(?!.*:)(?!.*constprop)(?!.*isra).* + - name: mgc + probe: kprobe + type: binary + file: /usr/lib/modules/5.14.0-570.55.1.1toss.t5.x86_64/weak-updates/lustre/fs/mgc.ko + regex: (?!.*__)(?!.*:)(?!.*constprop)(?!.*isra).* + - name: osc + probe: kprobe + type: binary + file: /usr/lib/modules/5.14.0-570.55.1.1toss.t5.x86_64/weak-updates/lustre/fs/osc.ko + regex: (?!.*__)(?!.*:)(?!.*constprop)(?!.*isra).* + - name: ptlrpc + probe: kprobe + type: binary + file: /usr/lib/modules/5.14.0-570.55.1.1toss.t5.x86_64/weak-updates/lustre/fs/ptlrpc.ko + regex: (?!.*__)(?!.*:)(?!.*constprop)(?!.*isra).* + - name: mpi probe: uprobe type: binary file: /opt/toss/openmpi/4.1/gnu/lib/libmpi.so @@ -29,4 +50,12 @@ capture_probes: probe: uprobe type: binary file: /home/haridev/software/ior/install/bin/ior - regex: .* \ No newline at end of file + regex: .* + - name: iomap + probe: kprobe + type: ksym + regex: ^iomap(?!.*cold).* + - name: xfs + probe: kprobe + type: ksym + regex: ^xfs(?!.*cold).* \ No newline at end of file diff --git a/etc/datacrumbs/configs/project.env.local.in b/etc/datacrumbs/configs/project.env.local.in index 7886148f..e727eaab 100644 --- a/etc/datacrumbs/configs/project.env.local.in +++ b/etc/datacrumbs/configs/project.env.local.in @@ -1,7 +1,12 @@ +# Version export DATACRUMBS_VERSION=@DATACRUMBS_RELEASE_VERSION_STRING@ readonly DATACRUMBS_VERSION + +# Library export DATACRUMBS_LIB_VERSION=@DATACRUMBS_PACKAGE_VERSION@ readonly DATACRUMBS_LIB_VERSION + +# Install export DATACRUMBS_INSTALL_HOST=@DATACRUMBS_HOST@ readonly DATACRUMBS_INSTALL_HOST export DATACRUMBS_INSTALL_USER=@DATACRUMBS_INSTALL_USER@ @@ -28,31 +33,61 @@ export DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR=${DATACRUMBS_INSTALL_LIBEXEC_DIR}/ob readonly DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR export DATACRUMBS_INSTALL_COMPOSABLE_DIR=${DATACRUMBS_INSTALL_LIBEXEC_DIR}/composable readonly DATACRUMBS_INSTALL_COMPOSABLE_DIR +export DATACRUMBS_INSTALL_COMPOSE_BIN=${DATACRUMBS_INSTALL_LIBEXEC_DIR}/@CMAKE_INSTALL_SBINDIR@/${DATACRUMBS_INSTALL_USER} +readonly DATACRUMBS_INSTALL_COMPOSE_BIN +export DATACRUMBS_INSTALL_RUNSTATEDIR=@DATACRUMBS_INSTALL_RUNSTATEDIR@ +readonly DATACRUMBS_INSTALL_RUNSTATEDIR + +# Client export DATACRUMBS_CLIENT_LIB=${DATACRUMBS_INSTALL_LIB_DIR}/libdatacrumbs_client.so readonly DATACRUMBS_CLIENT_LIB export DATACRUMBS_CLIENT_BIN=${DATACRUMBS_INSTALL_LIBEXEC_DIR}/@CMAKE_INSTALL_SBINDIR@/${DATACRUMBS_USER} readonly DATACRUMBS_CLIENT_BIN + +# Trace export DATACRUMBS_TRACE_DIR_PATTERN=@DATACRUMBS_CONFIGURED_TRACE_DIR@/%YY%/%MM%/%DD% readonly DATACRUMBS_TRACE_DIR_PATTERN -export DATACRUMBS_LOG_DIR=@DATACRUMBS_CONFIGURED_LOG_DIR@ -readonly DATACRUMBS_LOG_DIR + +# Job +export DATACRUMBS_JOB_SCHEDULER=@DATACRUMBS_LAUNCHER_TYPE@ +readonly DATACRUMBS_JOB_SCHEDULER +export DATACRUMBS_JOB_RUN=@DATACRUMBS_SCHEDULER_RUN_CMD@ +readonly DATACRUMBS_JOB_RUN +export DATACRUMBS_JOB_NODE_FLAG=@DATACRUMBS_SCHEDULER_NODES_CMD_OPT@ +readonly DATACRUMBS_JOB_NODE_FLAG +export DATACRUMBS_JOB_PPN_FLAG=@DATACRUMBS_SCHEDULER_PPN_CMD_OPT@ +readonly DATACRUMBS_JOB_PPN_FLAG +export DATACRUMBS_JOB_OTHER_FLAGS=@DATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS@ +readonly DATACRUMBS_JOB_OTHER_FLAGS +export DATACRUMBS_JOB_ID_VAR=@DATACRUMBS_SCHEDULER_JOBID_ENV_VAR@ +readonly DATACRUMBS_JOB_ID_VAR + +# Server export DATACRUMBS_SERVER_LOAD_TIMEOUT=${DATACRUMBS_SERVER_TIMEOUT_USER:-600} readonly DATACRUMBS_SERVER_LOAD_TIMEOUT -export DATACRUMBS_SERVER_PID_FILE=@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs.pid +export DATACRUMBS_SERVER_RUN_DIR=@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@ +readonly DATACRUMBS_SERVER_RUN_DIR +export DATACRUMBS_SERVER_RUN_ID_FILE=${DATACRUMBS_SERVER_RUN_DIR}/datacrumbs.runid +readonly DATACRUMBS_SERVER_RUN_ID_FILE +export DATACRUMBS_SERVER_RUN_ID=$(if [ "${!DATACRUMBS_JOB_ID_VAR}" == "" ]; then if [[ -f "${DATACRUMBS_SERVER_RUN_ID_FILE}" ]]; then cat "$DATACRUMBS_SERVER_RUN_ID_FILE" 2>/dev/null; else echo $(date +"%Y%m%d%H%M%S"); fi else echo ${!DATACRUMBS_JOB_ID_VAR}; fi) +readonly DATACRUMBS_SERVER_RUN_ID +export DATACRUMBS_SERVER_PID_FILE=${DATACRUMBS_SERVER_RUN_DIR}/datacrumbs-${DATACRUMBS_SERVER_RUN_ID}.pid readonly DATACRUMBS_SERVER_PID_FILE -export DATACRUMBS_SERVER_RUNID_FILE=@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs.runid -readonly DATACRUMBS_SERVER_RUNID_FILE +export DATACRUMBS_SERVER_SYSTEMD_PID_FILE=${DATACRUMBS_SERVER_RUN_DIR}/datacrumbs-systemd-${DATACRUMBS_SERVER_RUN_ID}.pid +readonly DATACRUMBS_SERVER_SYSTEMD_PID_FILE +export DATACRUMBS_SERVER_READY_FILE=${DATACRUMBS_SERVER_RUN_DIR}/datacrumbs-${DATACRUMBS_SERVER_RUN_ID}.ready +readonly DATACRUMBS_SERVER_READY_FILE +export DATACRUMBS_SERVER_STATUS_FILE=${DATACRUMBS_SERVER_RUN_DIR}/datacrumbs-${DATACRUMBS_SERVER_RUN_ID}.json +readonly DATACRUMBS_SERVER_STATUS_FILE +export DATACRUMBS_SERVER_ENV_FILE=${DATACRUMBS_SERVER_RUN_DIR}/datacrumbs-${DATACRUMBS_SERVER_RUN_ID}.env +readonly DATACRUMBS_SERVER_ENV_FILE export DATACRUMBS_SERVER_MODULE=0 readonly DATACRUMBS_SERVER_MODULE export DATACRUMBS_SERVER_PREAMBLE= readonly DATACRUMBS_SERVER_PREAMBLE -export DATACRUMBS_JOB_RUN=flux run -readonly DATACRUMBS_JOB_RUN -export DATACRUMBS_JOB_NODE_FLAG=-N -readonly DATACRUMBS_JOB_NODE_FLAG -export DATACRUMBS_JOB_PPN_FLAG=--tasks-per-node -readonly DATACRUMBS_JOB_PPN_FLAG -export DATACRUMBS_JOB_OTHER_FLAGS= -readonly DATACRUMBS_JOB_OTHER_FLAGS -export DATACRUMBS_JOB_ID_VAR=FLUX_JOB_ID -readonly DATACRUMBS_JOB_ID_VAR + +# Log +export DATACRUMBS_LOG_DIR=@DATACRUMBS_CONFIGURED_LOG_DIR@ +readonly DATACRUMBS_LOG_DIR +export DATACRUMBS_LOG_FILE=${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVER_RUN_ID}.log +readonly DATACRUMBS_LOG_FILE \ No newline at end of file diff --git a/etc/datacrumbs/data/compact.sh b/etc/datacrumbs/data/compact.sh index b8ca64fd..84d580fb 100755 --- a/etc/datacrumbs/data/compact.sh +++ b/etc/datacrumbs/data/compact.sh @@ -1,6 +1,6 @@ #!/bin/bash for file in *.json; do - [ -e "$file" ] || continue - jq -c . "$file" > "${file}.tmp" && mv "${file}.tmp" "$file" -done \ No newline at end of file + [ -e "$file" ] || continue + jq -c . "$file" >"${file}.tmp" && mv "${file}.tmp" "$file" +done diff --git a/etc/datacrumbs/data/probes-exclusion-haridev-lead.json b/etc/datacrumbs/data/probes-exclusion-haridev-lead.json index cb5c8f92..f80a1fce 100644 --- a/etc/datacrumbs/data/probes-exclusion-haridev-lead.json +++ b/etc/datacrumbs/data/probes-exclusion-haridev-lead.json @@ -1 +1 @@ -[{"type":4,"name":"custom1","functions":[],"bpf_path":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2},{"type":0,"name":"sys","functions":["fork","sys","ioctl","newfstatat","ni_syscall","old_mmap","old_select","io_getevents","io_getevents_time32","io_pgetevents","io_pgetevents_time32","epoll_create1","epoll_ctl","epoll_pwait","epoll_pwait2","ioprio_set","ioprio_get","umount","mount","pivot_root","chroot","vhangup","pipe2","quotactl","quotactl_fd","getdents64","pselect6","pselect6_time32","ppoll","ppoll_time32","signalfd4","vmsplice","splice","tee","timerfd_create","timerfd_settime","timerfd_gettime","timerfd_gettime32","timerfd_settime32","utimensat","utimensat_time32","acct","capget","capset","personality","waitid","set_tid_address","unshare","futex","futex_time32","get_robust_list","set_robust_list","futex_waitv","futex_wake","futex_wait","futex_requeue","nanosleep","nanosleep_time32","getitimer","setitimer","kexec_load","init_module","delete_module","timer_create","timer_gettime","timer_getoverrun","timer_settime","timer_delete","clock_settime","clock_gettime","clock_getres","clock_nanosleep","timer_gettime32","timer_settime32","clock_settime32","clock_gettime32","clock_getres_time32","clock_nanosleep_time32","syslog","ptrace","sched_setparam","sched_setscheduler","sched_getscheduler","sched_getparam","sched_setaffinity","sched_getaffinity","sched_yield","sched_get_priority_max","sched_get_priority_min","sched_rr_get_interval","sched_rr_get_interval_time32","restart_syscall","kill","tkill","tgkill","sigaltstack","rt_sigsuspend","rt_sigaction","rt_sigprocmask","rt_sigpending","rt_sigtimedwait","rt_sigtimedwait_time32","rt_sigqueueinfo","setpriority","getpriority","reboot","setregid","setgid","setreuid","setuid","setresuid","getresuid","setresgid","getresgid","setfsuid","setfsgid","times","setpgid","getpgid","getsid","setsid","getgroups","setgroups","newuname","sethostname","setdomainname","getrlimit","setrlimit","getrusage","umask","prctl","getcpu","gettimeofday","settimeofday","adjtimex","adjtimex_time32","getpid","getppid","getuid","geteuid","getgid","getegid","gettid","sysinfo","mq_open","mq_unlink","mq_timedsend","mq_timedreceive","mq_notify","mq_getsetattr","mq_timedreceive_time32","mq_timedsend_time32","msgget","old_msgctl","msgctl","msgrcv","msgsnd","semget","semctl","old_semctl","semtimedop","semtimedop_time32","semop","shmget","old_shmctl","shmctl","shmat","shmdt","socket","socketpair","bind","listen","accept","connect","getsockname","getpeername","sendto","recvfrom","setsockopt","getsockopt","shutdown","sendmsg","recvmsg","readahead","brk","add_key","request_key","keyctl","clone","clone3","execve","swapon","swapoff","get_mempolicy","set_mempolicy","rt_tgsigqueueinfo","perf_event_open","accept4","recvmmsg","recvmmsg_time32","wait4","prlimit64","name_to_handle_at","open_by_handle_at","clock_adjtime","clock_adjtime32","setns","sendmmsg","kcmp","finit_module","sched_setattr","sched_getattr","renameat2","seccomp","getrandom","memfd_create","bpf","execveat","userfaultfd","membarrier","mlock2","pkey_mprotect","pkey_alloc","pkey_free","rseq","open_tree","move_mount","mount_setattr","fsopen","fsconfig","fsmount","fspick","pidfd_send_signal","pidfd_getfd","landlock_create_ruleset","landlock_add_rule","landlock_restrict_self","memfd_secret","set_mempolicy_home_node","cachestat","map_shadow_stack","ioperm","pciconfig_read","pciconfig_write","pciconfig_iobase","spu_run","spu_create","chmod","chown","lchown","epoll_create","eventfd","signalfd","sendfile","alarm","getpgrp","pause","time","time32","futimesat_time32","utime32","utimes_time32","select","poll","epoll_wait","recv","send","oldumount","uselib","stime","stime32","sigpending","sigprocmask","sgetmask","ssetmask","signal","nice","kexec_file_load","waitpid","socketcall","old_readdir","gethostname","uname","olduname","ipc"]},{"type":2,"name":"libc","functions":["fnmatch@@GLIBC_2.2.5","sched_getaffinity@@GLIBC_2.3.4","getgrnam_r@@GLIBC_2.2.5","sysctl@GLIBC_2.2.5","forkpty@@GLIBC_2.34","getpwnam_r@@GLIBC_2.2.5","getgrgid_r@@GLIBC_2.2.5","openpty@@GLIBC_2.34","fdetach@GLIBC_2.2.5","gai_error@GLIBC_2.2.5","res_send@@GLIBC_2.34","putmsg@GLIBC_2.2.5","fmemopen@GLIBC_2.2.5","forkpty@GLIBC_2.2.5","getpwuid_r@@GLIBC_2.2.5","res_mailok@@GLIBC_2.34","getspnam_r@@GLIBC_2.2.5","quick_exit@@GLIBC_2.24","logwtmp@@GLIBC_2.34","logout@@GLIBC_2.34","fopencookie@@GLIBC_2.2.5","gai_cancel@@GLIBC_2.34","glob64@GLIBC_2.2.5","getgrent_r@@GLIBC_2.2.5","_getopt_internal_r","frexpf128","res_search@@GLIBC_2.34","_nl_select_era_entry","finitef128_do_not_use","copysignf32x","gai_error@@GLIBC_2.34","copysignf32","getmsg@GLIBC_2.2.5","_nl_get_walt_digit","_create_xid","sstk@GLIBC_2.2.5","_nl_cleanup_time","_itoa_word","_nl_unload_domain","_getopt_long_r","getspent_r@@GLIBC_2.2.5","_getopt_long_only_r","_option_is_end","_IO_str_count","_nl_cleanup_ctype","_des_crypt","_getopt_internal","_openchild","re_string_realloc_buffers","context_reuse","hex2bin","x_putint32","x_getpostn","gai_suspend@@GLIBC_2.34","duplicate_node","bin2hex","tr_break@GLIBC_2.2.5","_nl_init_era_entries.part.0","exec_comm","gethostbyname2_r@@GLIBC_2.2.5","_nl_make_l10nflist.localalias","_nl_find_msg","gethostent_r@@GLIBC_2.2.5","start_thread","get_kernel_syms@GLIBC_2.2.5","get_scope","add_prefixlist","match_prefix","in6aicmp","fini","exchange","parse_branch","parse_expression","authdes_nextverf","re_search_internal","gr_map_free","merge_state_with_log","until_short","get_subexp_sub","clean_state_log_if_needed","canon_doc_option","extend_buffers","check_arrival_expand_ecl_sub","check_node_accept_bytes","sub_epsilon_src_nodes","harmless","pmap_rmtcall@GLIBC_2.2.5","merge_state_array","re_acquire_state_context","w_addword","check_dst_limits","check_halt_state_context","context_send_common","utf8_encode.part.0","build_charclass","pop_fail_stack","time_ifunc","match_ctx_clean","re_dfa_add_node","free_charset","build_upper_buffer","re_node_set_add_intersect","free_state","search_cur_bkref_entry","re_node_set_compare","print_and_abort","internal_getgrouplist","clear_once_control","send_vc","shm_open@GLIBC_2.2.5","fstab_init","lio_listio64@@GLIBC_2.34","_nl_init_alt_digit","parse_rule","free_tree","parse_offset","decode_name","argp_hol","x_putbytes","strcspn_ifunc","ext_match","compute_change","ranged_convert","ydhms_diff","name_to_database_index","binary_hnok","memchr_ifunc","get_mnt_entry","end_pattern","str_append","ptrlist_add__","critical_factorization","argp_doc","gethosts","read_alias_file","authnone_validate","ldexpf32","memcmp_ifunc","strrchr_ifunc","strncat_ifunc","strlen_ifunc","gai_suspend@GLIBC_2.2.5","strcpy_ifunc","re_string_context_at","_int_realloc","next_line","sysmalloc","arena_get_retry","arena_get2.part.0","fetch_number","register_state","des_setparity@GLIBC_2.2.5","ptmalloc_init.part.0","process_long_option","internal_fallocate64","build_wcs_upper_buffer","try_file","get_locked_global","key_call_socket","read_conf_file.isra.0","change_sigmask","check_arrival_expand_ecl","resolv_conf_matches","calc_eclosure_iter","arg_bool","duplicate_node_closure","strspn_ifunc","fts_build","prefixcmp","get_nprocs_cpu_online","initshells","fstab_free","add_request_to_runlist","duplicate_tree","tdestroy_recurse","strpbrk_ifunc","peek_token","glob@GLIBC_2.2.5","argp_args_levels.isra.0","strcmp_ifunc","array_add__","x_setpostn","authdes_refresh","fstab_convert","create_token_tree","realpath_stk","authdes_marshal","check_arrival","fts_alloc.isra.0","internal_fnmatch","x_putlong","expand_bkref_cache","msgctl@@GLIBC_2.2.5","pmap_getport@GLIBC_2.2.5","quick_exit@GLIBC_2.10","authnone_verf","get_next_alias","freeres","sock_eq","hol_cousin_cluster_cmp.isra.0","ftw_dir","check_node_accept","decide_maybe_mmap","vtimes_one.part.0","internal_addseverity","build_trtable","adjust_wide_data","getaliasbyname_r@@GLIBC_2.2.5","alloc_perturb","_nl_get_era_entry","scalbnf64x","print_header","set_binding_values.part.0","get_nproc_stat","update_cur_sifted_state","authdes_destroy","walker","strncpy_ifunc","helper_thread","parse_dollars","authnone_create@GLIBC_2.2.5","scalbnf128","tzset_internal","locked_vfxprintf","wcsrchr_ifunc","_Unwind_GetCFA","get_free_list","new_do_write","wait_on_socket","frexpf32","find_derivation","option_alloc","detach_arena.part.0","_int_malloc","buffer_free","sched_setaffinity@@GLIBC_2.3.4","register_file","key_gendes@GLIBC_2.2.5","skip","send_dg","_res_hconf_trim_domain","gethostbyname3_context","authnone_create_once","decrement_at_index.part.0","lower_subexp","scalbnf32","strncmp_ifunc","isinff128_do_not_use","nrl_domainname","freecache","hol_entry_short_iterate","authdes_pk_create@GLIBC_2.2.5","do_system","getpwent_r@@GLIBC_2.2.5","gethostbyname_r@@GLIBC_2.2.5","unwind_stop","create_thread","_IO_wstrn_overflow","token.part.0","wcsncmp_ifunc","find_module_idx","indent_to","hack_digit","open_socket","getttyname_r","_IO_obstack_xsputn","reopen","peek_token_bracket","fts_sort","asctime_internal","maybe_init","alias_compare","fts_stat.isra.0","ecb_crypt@GLIBC_2.2.5","time_syscall","add_module","sift_states_backward","do_release_shlib","do_release_all","new_composite_name","memset_ifunc","x_destroy","free_category","re_compile_internal","msort_with_tmp.part.0","fmemopen@@GLIBC_2.22","free_dfa_content","try_nocreate","strcat_ifunc","_IO_cookie_read","_IO_cookie_seek","space","_IO_cookie_close","parse_reg_exp","fts_palloc","_IO_fopencookie","_IO_str_finish","_nl_expand_alias","copysignf128","_IO_default_seekpos","_int_free","getpmsg@GLIBC_2.2.5","_IO_getwc","build_charclass_op","rtime@GLIBC_2.2.5","unlock","uselib@GLIBC_2.2.5","bdflush@GLIBC_2.2.5","derivation_compare","object_compare","_res_hconf_init","sched_setaffinity@GLIBC_2.3.3","internal_fnwmatch","_argp_input","end_wpattern","ext_wmatch","pcmp","_nl_archive_subfreeres","check_dst_limits_calc_pos_1","_option_is_short","try_dir","argp_default_parser","pmap_getmaps@GLIBC_2.2.5","_seterr_reply@GLIBC_2.2.5","matches_last_entry","parse_backtick","aio_fsync64@@GLIBC_2.34","perror_internal","maybe_script_execute","add_alias2.part.0","authdes_create@GLIBC_2.2.5","munmap_chunk","hst_map_free","_nl_get_alt_digit","re_node_set_init_union","gai_cancel@GLIBC_2.2.5","usage_argful_short_opt","re_acquire_state","copysignf64x","getpublickey@GLIBC_2.2.5","ldexpf64","check_one_fd","re_compile_fastmap_iter","_nl_parse_alt_digit","authdes_getucred@GLIBC_2.2.5","modff128","_Unwind_ForcedUnwind","re_node_set_merge","check_subexp_matching_top","_nl_explode_name","isnanf128_do_not_use","ftw_startup","key_get_conv@GLIBC_2.2.5","_nl_postload_ctype","scalbnf64","re_search_stub","fattach@GLIBC_2.2.5","hol_entry_qcmp","w_addmem","eval_expr_multdiv","cfree@GLIBC_2.2.5"],"binary_path":"/usr/lib64/libc.so.6"},{"type":2,"name":"hdf5","functions":["H5SL_above","H5SL_add","H5SL_below:0x2794b0","H5SL_close:0x27a240","H5SL_count:0x26f830","H5SL_create:0x26f680","H5SL_destroy:0x27a170","H5SL_find:0x278e80","H5SL_first:0x27a020","H5SL_free:0x27a120","H5SL_greater:0x2788a0","H5SL_init:0x26f5c0","H5SL_insert:0x26f840","H5SL_item:0x27a060","H5SL_iterate:0x27a070","H5SL_last:0x27a050","H5SL_less:0x278260","H5SL_next:0x27a030","H5SL_prev:0x27a040","H5SL_release:0x27a0c0","H5SL_remove:0x26f8f0","H5SL_remove_first:0x2776f0","H5SL_search:0x277c10","H5SL_term_package:0x26f600","H5SM__get_index:0x27b480","H5SM__get_mesg_count_test:0x281610","H5SM__list_free:0x27f4f0","H5SM__message_compare:0x2811c0","H5SM__message_decode:0x281500","H5SM__message_encode:0x2813b0","H5SM__table_free:0x27f4b0","H5SM_can_share:0x27b940","H5SM_delete:0x27d490","H5SM_get_fheap_addr:0x27b780","H5SM_get_info:0x27e590","H5SM_get_refcount:0x27ed00","H5SM_ih_size:0x27ff50","H5SM_init:0x27ada0","H5SM_list_debug:0x27f990","H5SM_reconstitute:0x27ece0","H5SM_table_debug:0x27f530","H5SM_try_share:0x27bc00","H5SM_type_shared:0x27b580","H5T__alloc:0x2831b0","H5T__array_create:0x290bf0","H5T__bit_copy:0x2917f0","H5T__bit_dec:0x2928f0","H5T__bit_find:0x2920e0","H5T__bit_get_d:0x291d20","H5T__bit_inc:0x2927d0","H5T__bit_neg:0x292a00","H5T__bit_set:0x291db0","H5T__bit_set_d:0x291d70","H5T__bit_shift:0x291eb0","H5T__commit:0x294900","H5T__commit_anon:0x2950e0","H5T__commit_named:0x293640","H5T__conv_array:0x301480","H5T__conv_b_b:0x2fc5d0","H5T__conv_double_float:0x2f3330","H5T__conv_double_int:0x2ef570","H5T__conv_double_ldouble:0x2f3b30","H5T__conv_double_llong:0x2f1e10","H5T__conv_double_long:0x2f08f0","H5T__conv_double_schar:0x2ece10","H5T__conv_double_short:0x2ee170","H5T__conv_double_uchar:0x2ed7c0","H5T__conv_double_uint:0x2eff20","H5T__conv_double_ullong:0x2f2780","H5T__conv_double_ulong:0x2f1260","H5T__conv_double_ushort:0x2eeb70","H5T__conv_enum:0x2ff6f0","H5T__conv_enum_numeric:0x2ffce0","H5T__conv_f_f:0x2e2430","H5T__conv_f_i:0x2e43e0","H5T__conv_float_double:0x2ec590","H5T__conv_float_int:0x2e86a0","H5T__conv_float_ldouble:0x2ec9c0","H5T__conv_float_llong:0x2eae70","H5T__conv_float_long:0x2e9750","H5T__conv_float_schar:0x2e5fa0","H5T__conv_float_short:0x2e72f0","H5T__conv_float_uchar:0x2e6940","H5T__conv_float_uint:0x2e8ed0","H5T__conv_float_ullong:0x2eb8c0","H5T__conv_float_ulong:0x2ea1a0","H5T__conv_float_ushort:0x2e7cc0","H5T__conv_i_f:0x299b60","H5T__conv_i_i:0x298db0","H5T__conv_int_double:0x2b45f0","H5T__conv_int_float:0x2b3340","H5T__conv_int_ldouble:0x2b5b30","H5T__conv_int_llong:0x2b2900","H5T__conv_int_long:0x2b1ec0","H5T__conv_int_schar:0x2afdc0","H5T__conv_int_short:0x2b0be0","H5T__conv_int_uchar:0x2b04a0","H5T__conv_int_uint:0x2b1a80","H5T__conv_int_ullong:0x2b2d40","H5T__conv_int_ulong:0x2b2300","H5T__conv_int_ushort:0x2b1330","H5T__conv_ldouble_double:0x2fb570","H5T__conv_ldouble_float:0x2fad20","H5T__conv_ldouble_int:0x2f6960","H5T__conv_ldouble_llong:0x2f95a0","H5T__conv_ldouble_long:0x2f7e20","H5T__conv_ldouble_schar:0x2f3f80","H5T__conv_ldouble_short:0x2f5450","H5T__conv_ldouble_uchar:0x2f49e0","H5T__conv_ldouble_uint:0x2f7390","H5T__conv_ldouble_ullong:0x2fa010","H5T__conv_ldouble_ulong:0x2f8890","H5T__conv_ldouble_ushort:0x2f5ea0","H5T__conv_llong_double:0x2d56f0","H5T__conv_llong_float:0x2d3690","H5T__conv_llong_int:0x2d1cc0","H5T__conv_llong_ldouble:0x2d73e0","H5T__conv_llong_long:0x2d2b80","H5T__conv_llong_schar:0x2cff90","H5T__conv_llong_short:0x2d0df0","H5T__conv_llong_uchar:0x2d06a0","H5T__conv_llong_uint:0x2d2450","H5T__conv_llong_ullong:0x2d3220","H5T__conv_llong_ulong:0x2d2da0","H5T__conv_llong_ushort:0x2d1560","H5T__conv_long_double:0x2c3250","H5T__conv_long_float:0x2c11f0","H5T__conv_long_int:0x2bf820","H5T__conv_long_ldouble:0x2c4f40","H5T__conv_long_llong:0x2c0b50","H5T__conv_long_schar:0x2bdaf0","H5T__conv_long_short:0x2be950","H5T__conv_long_uchar:0x2be200","H5T__conv_long_uint:0x2bffb0","H5T__conv_long_ullong:0x2c0d70","H5T__conv_long_ulong:0x2c06e0","H5T__conv_long_ushort:0x2bf0c0","H5T__conv_noop:0x297600","H5T__conv_order:0x297670","H5T__conv_order_opt:0x297900","H5T__conv_ref:0x2fe7c0","H5T__conv_s_s:0x2fbdc0","H5T__conv_schar_double:0x29e6c0","H5T__conv_schar_float:0x29dc80","H5T__conv_schar_int:0x29be30","H5T__conv_schar_ldouble:0x29f100","H5T__conv_schar_llong:0x29d250","H5T__conv_schar_long:0x29c820","H5T__conv_schar_short:0x29b400","H5T__conv_schar_uchar:0x29afe0","H5T__conv_schar_uint:0x29c260","H5T__conv_schar_ullong:0x29d6a0","H5T__conv_schar_ulong:0x29cc70","H5T__conv_schar_ushort:0x29b850","H5T__conv_short_double:0x2a8260","H5T__conv_short_float:0x2a71e0","H5T__conv_short_int:0x2a5340","H5T__conv_short_ldouble:0x2a92e0","H5T__conv_short_llong:0x2a6790","H5T__conv_short_long:0x2a5d40","H5T__conv_short_schar:0x2a40a0","H5T__conv_short_uchar:0x2a47b0","H5T__conv_short_uint:0x2a5770","H5T__conv_short_ullong:0x2a6be0","H5T__conv_short_ulong:0x2a6190","H5T__conv_short_ushort:0x2a4ef0","H5T__conv_struct:0x2fd780","H5T__conv_struct_opt:0x2fdf30","H5T__conv_struct_subset:0x2fd770","H5T__conv_uchar_double:0x2a2bf0","H5T__conv_uchar_float:0x2a21b0","H5T__conv_uchar_int:0x2a0850","H5T__conv_uchar_ldouble:0x2a3630","H5T__conv_uchar_llong:0x2a1930","H5T__conv_uchar_long:0x2a10b0","H5T__conv_uchar_schar:0x29fb80","H5T__conv_uchar_short:0x29ffd0","H5T__conv_uchar_uint:0x2a0c80","H5T__conv_uchar_ullong:0x2a1d70","H5T__conv_uchar_ulong:0x2a14f0","H5T__conv_uchar_ushort:0x2a0410","H5T__conv_uint_double:0x2bb070","H5T__conv_uint_float:0x2b9e40","H5T__conv_uint_int:0x2b88e0","H5T__conv_uint_ldouble:0x2bc5a0","H5T__conv_uint_llong:0x2b95c0","H5T__conv_uint_long:0x2b8d40","H5T__conv_uint_schar:0x2b7080","H5T__conv_uint_short:0x2b7c90","H5T__conv_uint_uchar:0x2b7670","H5T__conv_uint_ullong:0x2b9a00","H5T__conv_uint_ulong:0x2b9180","H5T__conv_uint_ushort:0x2b82b0","H5T__conv_ullong_double:0x2de570","H5T__conv_ullong_float:0x2dc420","H5T__conv_ullong_int:0x2dacb0","H5T__conv_ullong_ldouble:0x2e0360","H5T__conv_ullong_llong:0x2dbf80","H5T__conv_ullong_long:0x2db880","H5T__conv_ullong_schar:0x2d9430","H5T__conv_ullong_short:0x2da050","H5T__conv_ullong_uchar:0x2d9a40","H5T__conv_ullong_uint:0x2db290","H5T__conv_ullong_ulong:0x2dbd30","H5T__conv_ullong_ushort:0x2da680","H5T__conv_ulong_double:0x2cc0d0","H5T__conv_ulong_float:0x2c9f80","H5T__conv_ulong_int:0x2c8810","H5T__conv_ulong_ldouble:0x2cdec0","H5T__conv_ulong_llong:0x2c9880","H5T__conv_ulong_long:0x2c93e0","H5T__conv_ulong_schar:0x2c6f90","H5T__conv_ulong_short:0x2c7bb0","H5T__conv_ulong_uchar:0x2c75a0","H5T__conv_ulong_uint:0x2c8df0","H5T__conv_ulong_ullong:0x2c9d30","H5T__conv_ulong_ushort:0x2c81e0","H5T__conv_ushort_double:0x2add40","H5T__conv_ushort_float:0x2acd10","H5T__conv_ushort_int:0x2ab3b0","H5T__conv_ushort_ldouble:0x2aed70","H5T__conv_ushort_llong:0x2ac490","H5T__conv_ushort_long:0x2abc10","H5T__conv_ushort_schar:0x2aa310","H5T__conv_ushort_short:0x2aaf10","H5T__conv_ushort_uchar:0x2aa910","H5T__conv_ushort_uint:0x2ab7e0","H5T__conv_ushort_ullong:0x2ac8d0","H5T__conv_ushort_ulong:0x2ac050","H5T__conv_vlen:0x300080","H5T__create:0x28abf0","H5T__enum_create:0x302dd0","H5T__enum_insert:0x303040","H5T__free:0x283af0","H5T__get_array_dims:0x2911b0","H5T__get_array_ndims:0x291050","H5T__get_create_plist:0x294720","H5T__get_member_name:0x3040c0","H5T__get_member_size:0x296610","H5T__get_member_value:0x303450","H5T__get_path_table_npaths:0x290ba0","H5T__init_native_float_types:0x306040","H5T__init_native_internal:0x309e00","H5T__insert:0x2967f0","H5T__open_name:0x295770","H5T__print_path_stats:0x302060","H5T__ref_reclaim:0x30d890","H5T__ref_set_loc:0x30d430","H5T__reverse_order:0x296ef0","H5T__sort_name:0x3047c0","H5T__sort_value:0x304520","H5T__update_packed:0x296780","H5T__upgrade_version:0x2909b0","H5T__visit:0x30dc90","H5T__vlen_create:0x30e520","H5T__vlen_reclaim:0x30ea90","H5T__vlen_set_loc:0x30e820","H5T_already_vol_managed:0x295cf0","H5T_close:0x283d10","H5T_close_real:0x2832c0","H5T_cmp:0x2840a0","H5T_construct_datatype:0x295930","H5T_convert:0x285ab0","H5T_convert_committed_datatype:0x285fa0","H5T_convert_with_ctx:0x2859d0","H5T_copy:0x286f50","H5T_copy_reopen:0x28a200","H5T_debug:0x302070","H5T_decode:0x2864e0","H5T_detect_class:0x2825a0","H5T_encode:0x282cc0","H5T_get_actual_type:0x295b00","H5T_get_class:0x282450","H5T_get_force_conv:0x296ee0","H5T_get_member_offset:0x296140","H5T_get_member_type:0x2965a0","H5T_get_named_type:0x295af0","H5T_get_nmembers:0x303f20","H5T_get_offset:0x30a280","H5T_get_order:0x30ae70","H5T_get_precision:0x30bd20","H5T_get_ref_type:0x2860e0","H5T_get_sign:0x304aa0","H5T_get_size:0x284090","H5T_get_super:0x289e80","H5T_init:0x28b230","H5T_invoke_vol_optional:0x295d00","H5T_is_immutable:0x285f60","H5T_is_named:0x285f70","H5T_is_numeric_with_unusual_unused_bits:0x290bb0","H5T_is_relocatable:0x2908a0","H5T_is_sensible:0x286100","H5T_is_variable_str:0x282800","H5T_is_vl_storage:0x2908e0","H5T_link:0x293ce0","H5T_lock:0x282fc0","H5T_nameof:0x285ed0","H5T_noop_conv:0x285880","H5T_oloc:0x285e40","H5T_open:0x295190","H5T_own_vol_obj:0x290b20","H5T_patch_file:0x290ae0","H5T_patch_vlen_file:0x290b00","H5T_path_bkg:0x2859c0","H5T_path_compound_subset:0x285990","H5T_path_find:0x2885b0","H5T_path_noop:0x285840","H5T_reclaim:0x296e40","H5T_reclaim_cb:0x296db0","H5T_restore_refresh_state:0x295c10","H5T_save_refresh_state:0x295b20","H5T_set_loc:0x286130","H5T_set_version:0x290a20","H5T_term_package:0x281fa0","H5T_top_term_package:0x283500","H5T_unregister:0x284d00","H5T_update_shared:0x2948d0","H5T_vlen_reclaim_elmt:0x30ed60","H5S__extent_copy_real:0x236cc0","H5S__extent_release:0x236670","H5S__get_diminfo_status_test:0x26cc70","H5S__get_rebuild_status_test:0x26cbe0","H5S__hyper_get_op_gen:0x249670","H5S__hyper_project_intersection:0x255f70","H5S__hyper_rebuild:0x250d80","H5S__internal_consistency_test:0x26ccd0","H5S__modify_select:0x25e1a0","H5S__sel_iter_close_cb:0x26c030","H5S__verify_offsets:0x26cd90","Nflock:0x61f30","Pflock:0x61ee0"]},{"type":1,"name":"bio","functions":["bio_get_last_bvec","bio_will_gap","bio_integrity_init"]},{"type":3,"name":"python","functions":[],"binary_path":"/usr/lib64/libpython3.9.so","provider":"python"},{"type":1,"name":"xfs","functions":["xfs_dir2_block_addname","xfs_dir2_block_getdents","xfs_dir2_block_log_leaf","xfs_dir2_block_lookup","xfs_dir2_block_lookup_int","xfs_dir2_block_removename","xfs_dir2_block_replace","xfs_dir2_block_sfsize","xfs_dir2_block_sort","xfs_dir2_block_to_leaf","xfs_dir2_block_to_sf","xfs_dir2_compname","xfs_dir2_data_bestfree_p","xfs_dir2_data_entry_tag_p","xfs_dir2_data_freefind","xfs_dir2_data_freeinsert","xfs_dir2_data_freeremove.constprop.0","xfs_dir2_data_freescan","xfs_dir2_data_get_ftype","xfs_dir2_data_log_entry","xfs_dir2_data_log_header","xfs_dir2_data_log_unused","xfs_dir2_data_make_free","xfs_dir2_data_put_ftype","xfs_dir2_data_use_free","xfs_dir2_free_hdr_from_disk","xfs_dir2_free_hdr_to_disk.isra.0","xfs_dir2_free_log_bests.isra.0","xfs_dir2_free_read","xfs_dir2_grow_inode","xfs_dir2_hashname","xfs_dir2_isblock","xfs_dir2_isleaf","xfs_dir2_leaf_addname","xfs_dir2_leaf_getdents","xfs_dir2_leaf_hdr_from_disk","xfs_dir2_leaf_hdr_to_disk","xfs_dir2_leaf_lasthash","xfs_dir2_leaf_lookup","xfs_dir2_leaf_lookup_int","xfs_dir2_leaf_readbuf","xfs_dir2_leaf_removename","xfs_dir2_leaf_replace","xfs_dir2_leaf_search_hash","xfs_dir2_leaf_to_block","xfs_dir2_leaf_to_node","xfs_dir2_leaf_trim_data","xfs_dir2_leafn_add","xfs_dir2_leafn_lookup_for_addname","xfs_dir2_leafn_lookup_for_entry","xfs_dir2_leafn_lookup_int","xfs_dir2_leafn_order","xfs_dir2_leafn_rebalance.constprop.0","xfs_dir2_leafn_remove","xfs_dir2_leafn_split","xfs_dir2_leafn_toosmall","xfs_dir2_leafn_unbalance","xfs_dir2_namecheck","xfs_dir2_node_add_datablk","xfs_dir2_node_addname","xfs_dir2_node_addname_int","xfs_dir2_node_find_freeblk","xfs_dir2_node_lookup","xfs_dir2_node_removename","xfs_dir2_node_replace","xfs_dir2_node_to_leaf","xfs_dir2_node_trim_free","xfs_dir2_sf_addname","xfs_dir2_sf_addname_easy","xfs_dir2_sf_addname_hard","xfs_dir2_sf_create","xfs_dir2_sf_entsize","xfs_dir2_sf_get_ftype","xfs_dir2_sf_get_ino","xfs_dir2_sf_get_parent_ino","xfs_dir2_sf_getdents.isra.0","xfs_dir2_sf_lookup","xfs_dir2_sf_nextentry","xfs_dir2_sf_put_ftype","xfs_dir2_sf_put_ino","xfs_dir2_sf_put_parent_ino","xfs_dir2_sf_removename","xfs_dir2_sf_replace","xfs_dir2_sf_to_block","xfs_dir2_sf_toino4","xfs_dir2_sf_toino8","xfs_dir2_sf_verify","xfs_dir2_shrink_inode","xfs_dir3_block_init","xfs_dir3_block_read","xfs_dir3_block_read_verify","xfs_dir3_block_verify","xfs_dir3_block_write_verify","xfs_dir3_data_end_offset","xfs_dir3_data_init","xfs_dir3_data_read","xfs_dir3_data_read_verify","xfs_dir3_data_reada_verify","xfs_dir3_data_readahead","xfs_dir3_data_verify","xfs_dir3_data_write_verify","xfs_dir3_free_get_buf","xfs_dir3_free_read_verify","xfs_dir3_free_verify","xfs_dir3_free_write_verify","xfs_dir3_get_dtype","xfs_dir3_leaf_check_int","xfs_dir3_leaf_compact","xfs_dir3_leaf_compact_x1","xfs_dir3_leaf_find_entry","xfs_dir3_leaf_find_stale","xfs_dir3_leaf_get_buf","xfs_dir3_leaf_init","xfs_dir3_leaf_log_bests.isra.0","xfs_dir3_leaf_log_ents","xfs_dir3_leaf_log_header","xfs_dir3_leaf_log_tail.isra.0","xfs_dir3_leaf_read","xfs_dir3_leaf_read_verify","xfs_dir3_leaf_verify","xfs_dir3_leaf_write_verify","xfs_dir3_leafn_moveents","xfs_dir3_leafn_moveents.part.0","xfs_dir3_leafn_read","xfs_dir_canenter","xfs_dir_cilookup_result","xfs_dir_createname","xfs_dir_fsync","xfs_dir_init","xfs_dir_ino_validate","xfs_dir_isempty","xfs_dir_lookup","xfs_dir_open","xfs_rmaproot_init","xfs_sb_from_disk","xfs_sb_get_secondary","xfs_sb_good_version","xfs_sb_mount_common","xfs_sb_quiet_read_verify","xfs_sb_quota_from_disk","xfs_sb_read_secondary","xfs_sb_read_verify","xfs_sb_to_disk","xfs_sb_validate_fsb_count","xfs_sb_version_to_features","xfs_sb_write_verify","xfs_sbblock_init","xfs_sbversion_add_attr2","xfs_seek_iomap_begin","xfs_setsize_buftarg_early","xfs_dir_removename","xfs_dir_replace","xfs_dir_startup","xfs_imap_lookup","xfs_imap_valid.part.0","xfs_inobt_first_free_inode","xfs_inobt_get_maxrecs","xfs_inobt_get_minrecs","xfs_inobt_init_key_from_rec","xfs_inobt_init_ptr_from_cur","xfs_inobt_insert","xfs_inobt_insert_sprec","xfs_inobt_maxlevels_ondisk","xfs_inobt_update.isra.0","xfs_dialloc_ag","xfs_dialloc_ag_finobt_near","xfs_dialloc_ag_finobt_newino.isra.0","xfs_dialloc_ag_inobt","xfs_dialloc_ag_update_inobt","xfs_difree_finobt","xfs_difree_inobt","xfs_difree_inode_chunk.isra.0","xfs_dinode_verify.part.0","xfs_dinode_verify_fork","xfs_btree_afakeroot_set_root","xfs_btree_bload","xfs_btree_bload_compute_geometry","xfs_btree_bload_desired_npb","xfs_btree_bload_drop_buf","xfs_btree_bload_ensure_slack","xfs_btree_bload_leaf","xfs_btree_bload_level_geometry","xfs_btree_bload_max_npb","xfs_btree_bload_node","xfs_btree_bload_prep_block","xfs_btree_block_change_owner","xfs_btree_buf_to_ptr.isra.0","xfs_btree_calc_size","xfs_btree_change_owner","xfs_btree_check_block","xfs_btree_check_lptr","xfs_btree_check_sblock","xfs_btree_check_sptr","xfs_btree_commit_afakeroot","xfs_btree_commit_ifakeroot","xfs_btree_compute_maxlevels","xfs_btree_copy_keys","xfs_btree_copy_ptrs","xfs_btree_copy_recs","xfs_btree_count_blocks","xfs_btree_count_blocks_helper","xfs_btree_dec_cursor","xfs_btree_decrement","xfs_btree_del_cursor","xfs_btree_delete","xfs_btree_delrec","xfs_btree_destroy_cur_caches","xfs_btree_diff_two_ptrs","xfs_btree_dup_cursor","xfs_btree_fakeroot_alloc_block","xfs_btree_fakeroot_dup_cursor","xfs_btree_fakeroot_free_block","xfs_btree_fakeroot_init_ptr_from_cur","xfs_btree_firstrec","xfs_btree_free_block","xfs_btree_get_block","xfs_btree_get_buf_block","xfs_btree_get_iroot","xfs_btree_get_keys","xfs_btree_get_leaf_keys","xfs_btree_get_leaf_keys.cold","xfs_btree_get_node_keys","xfs_btree_get_rec","xfs_btree_get_sibling","xfs_btree_goto_left_edge","xfs_btree_has_more_records","xfs_btree_has_records","xfs_btree_has_records_helper","xfs_btree_high_key_addr","xfs_btree_high_key_from_key","xfs_btree_high_key_offset","xfs_btree_ifork_ptr","xfs_btree_increment","xfs_btree_init_block","xfs_btree_init_block_cur","xfs_btree_init_block_int","xfs_btree_insert","xfs_btree_insrec","xfs_btree_is_lastrec","xfs_btree_key_addr","xfs_btree_key_offset","xfs_btree_kill_iroot","xfs_btree_kill_root","xfs_btree_lastrec","xfs_btree_lblock_calc_crc","xfs_btree_lblock_v5hdr_verify","xfs_btree_lblock_verify","xfs_btree_lblock_verify_crc","xfs_btree_log_block","xfs_btree_log_keys","xfs_btree_log_ptrs","xfs_btree_log_recs","xfs_btree_lookup","xfs_btree_lookup_get_block","xfs_btree_lshift","xfs_btree_magic","xfs_btree_make_block_unfull","xfs_btree_new_iroot","xfs_btree_new_root","xfs_btree_offsets","xfs_btree_overlapped_query_range","xfs_btree_ptr_addr","xfs_btree_ptr_is_null","xfs_btree_ptr_offset","xfs_btree_ptr_to_daddr","xfs_btree_query_all","xfs_btree_query_range","xfs_btree_read_buf_block","xfs_btree_read_bufl","xfs_btree_reada_bufl","xfs_btree_reada_bufs","xfs_btree_readahead.isra.0","xfs_btree_readahead_lblock.isra.0","xfs_btree_readahead_ptr.constprop.0","xfs_btree_readahead_sblock.isra.0","xfs_btree_rec_addr","xfs_btree_rec_offset","xfs_btree_rshift","xfs_btree_sblock_calc_crc","xfs_btree_sblock_v5hdr_verify","xfs_btree_sblock_verify","xfs_btree_sblock_verify_crc","xfs_btree_set_ptr_null","xfs_btree_set_refs","xfs_btree_set_sibling","xfs_btree_setbuf","xfs_btree_shift_keys","xfs_btree_shift_ptrs","xfs_btree_shift_recs","xfs_btree_simple_query_range","xfs_btree_space_to_height","xfs_btree_split","xfs_btree_split_worker","xfs_btree_stage_afakeroot","xfs_btree_stage_ifakeroot","xfs_btree_update","xfs_btree_update_keys","xfs_btree_updkeys_force.constprop.0","xfs_btree_visit_block","xfs_btree_visit_blocks","xfs_defer_add","xfs_defer_add_barrier","xfs_defer_barrier_abort_intent","xfs_defer_barrier_cancel_item","xfs_defer_barrier_create_done","xfs_defer_barrier_create_intent","xfs_defer_barrier_finish_item","xfs_defer_cancel","xfs_defer_cancel_recovery","xfs_defer_create_intent.part.0","xfs_defer_create_intents","xfs_defer_destroy_item_caches","xfs_defer_drain_free","xfs_defer_drain_init","xfs_defer_extent_free","xfs_defer_finish","xfs_defer_finish_noroll","xfs_defer_finish_one","xfs_defer_finish_recovery","xfs_defer_item_pause","xfs_defer_item_unpause","xfs_defer_move","xfs_defer_ops_capture_abort","xfs_defer_ops_capture_and_commit","xfs_defer_ops_continue","xfs_defer_pending_abort_list","xfs_defer_pending_cancel_work","xfs_defer_relog","xfs_defer_resources_rele","xfs_defer_restore_resources","xfs_defer_save_resources","xfs_defer_start_recovery","xfs_defer_trans_abort","xfs_defer_trans_roll","xfs_blockgc_clear_iflag","xfs_blockgc_flush_all","xfs_blockgc_free_dquots","xfs_blockgc_free_quota","xfs_blockgc_free_space","xfs_blockgc_set_iflag","xfs_blockgc_start","xfs_blockgc_stop","xfs_blockgc_worker","xfs_bmap_add_attrfork_btree.constprop.0","xfs_bmap_add_attrfork_extents.constprop.0","xfs_bmap_add_attrfork_local.constprop.0","xfs_bmap_add_extent_delay_real","xfs_bmap_add_extent_hole_delay.constprop.0","xfs_bmap_add_extent_hole_real","xfs_bmap_btalloc","xfs_bmap_btalloc_at_eof","xfs_bmap_btalloc_best_length","xfs_bmap_btree_to_extents","xfs_bmap_del_extent_real","xfs_bmap_extents_to_btree","xfs_bmap_extsize_align.part.0","xfs_bmap_forkoff_reset","xfs_bmap_isaeof","xfs_bmap_local_to_extents.constprop.0","xfs_bmap_shift_update_extent.constprop.0","xfs_bmap_worst_indlen.isra.0","xfs_bmapi_allocate","xfs_bmapi_convert_unwritten","xfs_bmapi_finish","xfs_bmapi_trim_map.constprop.0","xfs_bmapi_update_map.constprop.0","xfs_bmbt_init_common","xfs_bmbt_init_high_key_from_rec","xfs_bmbt_init_key_from_rec","xfs_bmbt_init_ptr_from_cur","xfs_bmbt_init_rec_from_cur","xfs_bmbt_key_diff","xfs_bmbt_keys_contiguous","xfs_bmbt_keys_inorder","xfs_bmbt_lookup_eq","xfs_bmbt_lookup_first","xfs_bmbt_read_verify","xfs_bmbt_recs_inorder","xfs_bmbt_update","xfs_bmbt_update_cursor","xfs_bmbt_verify","xfs_bmbt_write_verify","xfs_bmse_can_merge","xfs_bmse_merge.constprop.0","xfs_bnobt_diff_two_keys","xfs_bnobt_init_high_key_from_rec","xfs_bnobt_key_diff","xfs_bnobt_keys_inorder","xfs_bnobt_recs_inorder","xfs_bnoroot_init","xfs_buf_lookup.constprop.0","xfs_acl_from_disk","xfs_acl_from_disk","xfs_acl_to_disk","xfs_acl_to_disk","xfs_add_incompat_log_feature","xfs_add_incompat_log_feature","xfs_ag_block_count","xfs_ag_extend_space","xfs_ag_extend_space","xfs_ag_geom_health","xfs_ag_get_geometry","xfs_ag_get_geometry","xfs_ag_init_headers","xfs_ag_mark_healthy","xfs_ag_mark_healthy","xfs_ag_mark_sick","xfs_ag_mark_sick","xfs_ag_measure_sickness","xfs_ag_measure_sickness","xfs_ag_resv_alloc_extent","xfs_ag_resv_alloc_extent","xfs_ag_resv_critical","xfs_ag_resv_free","xfs_ag_resv_free","xfs_ag_resv_free_extent","xfs_ag_resv_free_extent","xfs_ag_resv_init","xfs_ag_resv_init","xfs_ag_resv_needed","xfs_ag_resv_needed","xfs_ag_resv_rmapbt_alloc","xfs_ag_resv_rmapbt_alloc","xfs_ag_shrink_space","xfs_agf_read_verify","xfs_agf_verify","xfs_agf_write_verify","xfs_agfl_free_finish_item","xfs_agfl_read_verify","xfs_agfl_size","xfs_agfl_size","xfs_agfl_verify","xfs_agfl_walk","xfs_agfl_walk","xfs_agfl_write_verify","xfs_agi_read_verify","xfs_agi_verify","xfs_agi_write_verify","xfs_agiblock_init","xfs_agino_range","xfs_ail_delete_one","xfs_ail_min_lsn","xfs_ail_push","xfs_ail_push_all","xfs_ail_push_all_sync","xfs_ail_update_finish","xfs_allocbt_alloc_block","xfs_allocbt_calc_size","xfs_allocbt_calc_size","xfs_allocbt_commit_staged_btree","xfs_allocbt_commit_staged_btree","xfs_allocbt_destroy_cur_cache","xfs_allocbt_destroy_cur_cache","xfs_allocbt_dup_cursor","xfs_allocbt_free_block","xfs_allocbt_get_maxrecs","xfs_allocbt_get_minrecs","xfs_allocbt_init_common","xfs_allocbt_init_cursor","xfs_allocbt_init_cursor","xfs_allocbt_init_key_from_rec","xfs_allocbt_init_ptr_from_cur","xfs_allocbt_init_rec_from_cur","xfs_allocbt_keys_contiguous","xfs_allocbt_maxlevels_ondisk","xfs_allocbt_maxlevels_ondisk","xfs_allocbt_maxrecs","xfs_allocbt_maxrecs","xfs_allocbt_read_verify","xfs_allocbt_set_root","xfs_allocbt_stage_cursor","xfs_allocbt_stage_cursor","xfs_allocbt_update_lastrec","xfs_allocbt_verify","xfs_allocbt_write_verify","xfs_ascii_ci_compname","xfs_ascii_ci_compname","xfs_ascii_ci_compname.part.0","xfs_ascii_ci_hashname","xfs_ascii_ci_hashname","xfs_attr3_leaf_add","xfs_attr3_leaf_add","xfs_attr3_leaf_add_work","xfs_attr3_leaf_clearflag","xfs_attr3_leaf_compact","xfs_attr3_leaf_create","xfs_attr3_leaf_figure_balance.isra.0","xfs_attr3_leaf_flipflags","xfs_attr3_leaf_flipflags","xfs_attr3_leaf_getvalue","xfs_attr3_leaf_hdr_from_disk","xfs_attr3_leaf_hdr_from_disk","xfs_attr3_leaf_hdr_to_disk","xfs_attr3_leaf_hdr_to_disk","xfs_attr3_leaf_inactive","xfs_attr3_leaf_inactive","xfs_attr3_leaf_list_int","xfs_attr3_leaf_list_int","xfs_attr3_leaf_lookup_int","xfs_attr3_leaf_lookup_int","xfs_attr3_leaf_moveents.constprop.0","xfs_attr3_leaf_order.isra.0","xfs_attr3_leaf_read","xfs_attr3_leaf_read","xfs_attr3_leaf_read_verify","xfs_attr3_leaf_rebalance.constprop.0","xfs_attr3_leaf_remove","xfs_attr3_leaf_remove","xfs_attr3_leaf_setflag","xfs_attr3_leaf_setflag","xfs_attr3_leaf_split","xfs_attr3_leaf_split","xfs_attr3_leaf_to_node","xfs_attr3_leaf_to_node","xfs_attr3_leaf_to_shortform","xfs_attr3_leaf_to_shortform","xfs_attr3_leaf_toosmall","xfs_attr3_leaf_toosmall","xfs_attr3_leaf_try_add","xfs_attr3_leaf_unbalance","xfs_attr3_leaf_unbalance","xfs_attr3_leaf_verify","xfs_attr3_leaf_write_verify","xfs_attr3_node_inactive","xfs_attr3_rmt_blocks","xfs_attr3_rmt_blocks","xfs_attr3_rmt_hdr_set","xfs_attr3_rmt_read_verify","xfs_attr3_rmt_stale","xfs_attr3_rmt_verify","xfs_attr3_rmt_verify_struct","xfs_attr3_rmt_write_verify","xfs_attr3_root_inactive","xfs_attr_abort_intent","xfs_attr_calc_size","xfs_attr_cancel_item","xfs_attr_change","xfs_attr_change","xfs_attr_copy_value","xfs_attr_copy_value.part.0","xfs_attr_create_done","xfs_attr_create_intent","xfs_attr_defer_add","xfs_attr_finish_item","xfs_attr_fork_remove","xfs_attr_fork_remove","xfs_attr_get","xfs_attr_get","xfs_attr_get_ilocked","xfs_attr_get_ilocked","xfs_attr_inactive","xfs_attr_intent_destroy_cache","xfs_attr_intent_destroy_cache","xfs_attr_is_leaf","xfs_attr_is_leaf","xfs_attr_leaf_get","xfs_attr_leaf_hasname","xfs_attr_leaf_lasthash","xfs_attr_leaf_lasthash","xfs_attr_leaf_list","xfs_attr_leaf_newentsize","xfs_attr_leaf_newentsize","xfs_attr_leaf_order","xfs_attr_leaf_order","xfs_attr_leaf_removename","xfs_attr_list","xfs_attr_list","xfs_attr_list_ilocked","xfs_attr_list_ilocked","xfs_attr_log_item.constprop.0","xfs_attr_match.part.0","xfs_attr_multi_by_handle","xfs_attr_namecheck","xfs_attr_namecheck","xfs_attr_node_addname","xfs_attr_node_addname_find_attr","xfs_attr_node_get","xfs_attr_node_list","xfs_attr_node_list","xfs_attr_node_list_lookup","xfs_attr_node_list_lookup","xfs_attr_node_lookup.constprop.0","xfs_attr_node_remove_attr.isra.0","xfs_attr_put_listent","xfs_attr_recover_work","xfs_attr_relog_intent","xfs_attr_rmt_find_hole","xfs_attr_rmt_find_hole","xfs_attr_rmtval_copyin.constprop.0","xfs_attr_rmtval_copyout","xfs_attr_rmtval_find_space","xfs_attr_rmtval_find_space","xfs_attr_rmtval_get","xfs_attr_rmtval_get","xfs_attr_rmtval_invalidate","xfs_attr_rmtval_invalidate","xfs_attr_rmtval_remove","xfs_attr_rmtval_remove","xfs_attr_rmtval_set_blk","xfs_attr_rmtval_set_blk","xfs_attr_rmtval_set_value","xfs_attr_rmtval_set_value","xfs_attr_rmtval_stale","xfs_attr_rmtval_stale","xfs_attr_set","xfs_attr_set","xfs_attr_set_iter","xfs_attr_set_iter","xfs_attr_sf_findname","xfs_attr_sf_removename","xfs_attr_shortform_add","xfs_attr_shortform_add","xfs_attr_shortform_addname","xfs_attr_shortform_allfit","xfs_attr_shortform_allfit","xfs_attr_shortform_bytesfit","xfs_attr_shortform_bytesfit","xfs_attr_shortform_compare","xfs_attr_shortform_compare","xfs_attr_shortform_create","xfs_attr_shortform_create","xfs_attr_shortform_getvalue","xfs_attr_shortform_getvalue","xfs_attr_shortform_list","xfs_attr_shortform_list","xfs_attr_shortform_to_leaf","xfs_attr_shortform_to_leaf","xfs_attr_shortform_verify","xfs_attr_shortform_verify","xfs_attr_try_sf_addname","xfs_attrd_item_format","xfs_attrd_item_free","xfs_attrd_item_intent","xfs_attrd_item_release","xfs_attrd_item_size","xfs_attri_init","xfs_attri_item_format","xfs_attri_item_free","xfs_attri_item_match","xfs_attri_item_release","xfs_attri_item_size","xfs_attri_item_unpin","xfs_attri_log_nameval_alloc","xfs_attri_recover_work","xfs_attri_release","xfs_attrlist_by_handle","xfs_attrmulti_attr_get","xfs_attrmulti_attr_set","xfs_attrmulti_by_handle","xfs_bitmap_empty","xfs_blkdev_get.constprop.0","xfs_bmap_add_attrfork","xfs_bmap_add_extent_unwritten_real","xfs_bmap_adjacent","xfs_bmap_alloc_account","xfs_bmap_btalloc_low_space","xfs_bmap_can_insert_extents","xfs_bmap_collapse_extents","xfs_bmap_complain_bad_rec","xfs_bmap_compute_attr_offset","xfs_bmap_compute_maxlevels","xfs_bmap_count_blocks","xfs_bmap_count_leaves","xfs_bmap_del_extent_cow","xfs_bmap_del_extent_delay","xfs_bmap_extsize_align","xfs_bmap_finish_one","xfs_bmap_first_unused","xfs_bmap_insert_extents","xfs_bmap_intent_destroy_cache","xfs_bmap_last_before","xfs_bmap_last_extent","xfs_bmap_last_offset","xfs_bmap_local_to_extents_empty","xfs_bmap_longest_free_extent","xfs_bmap_map_extent","xfs_bmap_punch_delalloc_range","xfs_bmap_recover_work","xfs_bmap_relog_intent","xfs_bmap_split_extent","xfs_bmap_trim_cow","xfs_bmap_unmap_extent","xfs_bmap_update_abort_intent","xfs_bmap_update_cancel_item","xfs_bmap_update_create_done","xfs_bmap_update_create_intent","xfs_bmap_update_diff_items","xfs_bmap_update_finish_item","xfs_bmap_update_get_group","xfs_bmap_update_log_item.constprop.0","xfs_bmap_validate_extent","xfs_bmap_validate_extent_raw","xfs_bmapi_convert_delalloc","xfs_bmapi_minleft","xfs_bmapi_read","xfs_bmapi_remap","xfs_bmapi_reserve_delalloc","xfs_bmapi_write","xfs_bmbt_alloc_block","xfs_bmbt_calc_size","xfs_bmbt_calc_size","xfs_bmbt_change_owner","xfs_bmbt_change_owner","xfs_bmbt_commit_staged_btree","xfs_bmbt_destroy_cur_cache","xfs_bmbt_destroy_cur_cache","xfs_bmbt_diff_two_keys","xfs_bmbt_disk_get_all","xfs_bmbt_disk_get_all","xfs_bmbt_disk_get_blockcount","xfs_bmbt_disk_get_blockcount","xfs_bmbt_disk_get_startoff","xfs_bmbt_disk_get_startoff","xfs_bmbt_disk_set_all","xfs_bmbt_disk_set_all","xfs_bmbt_dup_cursor","xfs_bmbt_free_block","xfs_bmbt_get_dmaxrecs","xfs_bmbt_get_maxrecs","xfs_bmbt_get_maxrecs","xfs_bmbt_get_minrecs","xfs_bmbt_init_cursor","xfs_bmbt_maxlevels_ondisk","xfs_bmbt_maxrecs","xfs_bmbt_stage_cursor","xfs_bmbt_to_bmdr","xfs_bmbt_to_iomap","xfs_bmdr_maxrecs","xfs_bmdr_to_bmbt","xfs_break_dax_layouts","xfs_break_layouts","xfs_break_leased_layouts","xfs_bstime_store_compat","xfs_bud_item_format","xfs_bud_item_intent","xfs_bud_item_release","xfs_bud_item_size","xfs_buftarg_drain","xfs_buftarg_wait","xfs_bui_copy_format","xfs_bui_init","xfs_bui_item_format","xfs_bui_item_free","xfs_bui_item_match","xfs_bui_item_release","xfs_bui_item_size","xfs_bui_item_unpin","xfs_bui_release","xfs_bulk_ireq_setup","xfs_bulkstat","xfs_bulkstat_fmt","xfs_bulkstat_health","xfs_bulkstat_iwalk","xfs_bulkstat_one","xfs_bulkstat_one_int","xfs_bulkstat_to_bstat","xfs_calc_addafork_reservation","xfs_calc_attrinval_reservation","xfs_calc_attrrm_reservation","xfs_calc_attrsetm_reservation.isra.0","xfs_calc_attrsetrt_reservation.isra.0","xfs_calc_buf_res","xfs_calc_clear_agi_bucket_reservation.isra.0","xfs_calc_create_resv_modify","xfs_calc_create_tmpfile_reservation","xfs_calc_dquots_per_chunk","xfs_calc_finobt_res","xfs_calc_growdata_reservation","xfs_calc_growrtalloc_reservation","xfs_calc_growrtfree_reservation","xfs_calc_growrtzero_reservation.isra.0","xfs_calc_ichange_reservation.isra.0","xfs_calc_icreate_reservation","xfs_calc_icreate_resv_alloc","xfs_calc_ifree_reservation","xfs_calc_inobt_res","xfs_calc_inode_chunk_res","xfs_calc_inode_res.isra.0","xfs_calc_itruncate_reservation","xfs_calc_itruncate_reservation_minlogsize","xfs_calc_iunlink_add_reservation.isra.0","xfs_calc_iunlink_remove_reservation.isra.0","xfs_calc_link_reservation","xfs_calc_mkdir_reservation","xfs_calc_qm_dqalloc_reservation","xfs_calc_qm_dqalloc_reservation_minlogsize","xfs_calc_qm_setqlim_reservation","xfs_calc_remove_reservation","xfs_calc_rename_reservation","xfs_calc_swrite_reservation.isra.0","xfs_calc_symlink_reservation","xfs_calc_write_reservation","xfs_calc_write_reservation_minlogsize","xfs_can_free_eofblocks","xfs_check_sizes","xfs_check_summary_counts","xfs_cil_prepare_item","xfs_cleanup_inode.isra.0","xfs_cleanup_procfs","xfs_clear_incompat_log_features","xfs_collapse_file_space","xfs_compat_attrlist_by_handle","xfs_compat_attrmulti_by_handle","xfs_compat_growfs_data_copyin","xfs_compat_growfs_rt_copyin","xfs_compat_handlereq_copyin","xfs_compat_handlereq_to_dentry.isra.0","xfs_compat_ioc_fsbulkstat.isra.0","xfs_compat_ioc_fsgeometry_v1","xfs_compute_rextslog","xfs_contig_bits","xfs_corruption_error","xfs_create","xfs_create_tmpfile","xfs_cross_rename","xfs_cud_item_format","xfs_cud_item_intent","xfs_cud_item_release","xfs_cud_item_size","xfs_cui_copy_format","xfs_cui_init","xfs_cui_item_format","xfs_cui_item_free","xfs_cui_item_match","xfs_cui_item_release","xfs_cui_item_size","xfs_cui_item_unpin","xfs_cui_release","xfs_dax_failure_fn","xfs_dax_notify_ddev_failure","xfs_dax_notify_failure","xfs_debugfs_mkdir","xfs_default_attroffset","xfs_default_resblks","xfs_deprecated_dointvec_minmax","xfs_deprecated_dointvec_minmax.cold","xfs_destroy_caches","xfs_destroy_mount_workqueues","xfs_destroy_workqueues","xfs_dev_is_read_only","xfs_dialloc","xfs_diflags_to_iflags","xfs_difree","xfs_dinode_calc_crc","xfs_dinode_verify","xfs_dqblk_repair","xfs_dqblk_verify","xfs_dqlock2","xfs_dquot_alloc","xfs_dquot_disk_alloc","xfs_dquot_disk_read","xfs_dquot_from_disk","xfs_dquot_from_disk_ts","xfs_dquot_set_grace_period","xfs_dquot_set_prealloc_limits","xfs_dquot_set_timeout","xfs_dquot_to_disk","xfs_dquot_to_disk_ts","xfs_dquot_verify","xfs_drain_wait_disable","xfs_drain_wait_enable","xfs_droplink","xfs_efd_item_format","xfs_efd_item_free","xfs_efd_item_intent","xfs_efd_item_release","xfs_efd_item_size","xfs_efi_copy_format","xfs_efi_init","xfs_efi_item_format","xfs_efi_item_free","xfs_efi_item_match","xfs_efi_item_release","xfs_efi_item_size","xfs_efi_item_unpin","xfs_efi_release","xfs_end_io","xfs_eof_alignment","xfs_error_get_cfg","xfs_error_report","xfs_error_sysfs_del","xfs_error_sysfs_init","xfs_file_compat_ioctl","xfs_file_ioctl","xfs_fileattr_get","xfs_fileattr_set","xfs_filestream_create_association","xfs_filestream_deassociate","xfs_filestream_lookup_association","xfs_filestream_mount","xfs_filestream_pick_ag","xfs_filestream_select_ag","xfs_filestream_unmount","xfs_fill_fsxattr","xfs_fill_statvfs_from_dquot","xfs_find_handle","xfs_find_trim_cow_extent","xfs_finish_flags","xfs_finobt_alloc_block","xfs_finobt_calc_reserves","xfs_finobt_free_block","xfs_finobt_set_root","xfs_flags2diflags","xfs_flags2diflags2.isra.0","xfs_flush_inodes","xfs_flush_inodes_worker","xfs_flush_unmap_range","xfs_force_summary_recalc","xfs_forget_acl","xfs_free_agfl_block","xfs_free_buftarg","xfs_free_eofblocks","xfs_free_extent_fix_freelist","xfs_free_extent_later","xfs_free_file_space","xfs_free_perag","xfs_free_unused_perag_range","xfs_freesb","xfs_fsb_to_db","xfs_fsbulkstat_one_fmt","xfs_fsbulkstat_one_fmt_compat","xfs_fsinumbers_fmt","xfs_fsinumbers_fmt_compat","xfs_fsmap_owner_to_rmap","xfs_fsmap_to_internal","xfs_fsop_geom_health","xfs_fstrm_free_func","xfs_generic_create","xfs_get_acl","xfs_get_cowextsz_hint","xfs_get_extsz_hint","xfs_getbmap","xfs_getbmap_report_hole","xfs_getfsmap","xfs_getfsmap_check_keys","xfs_getfsmap_datadev_bnobt","xfs_getfsmap_datadev_bnobt_helper","xfs_getfsmap_datadev_bnobt_query","xfs_getfsmap_datadev_helper","xfs_getfsmap_datadev_rmapbt","xfs_getfsmap_datadev_rmapbt_query","xfs_getfsmap_dev_compare","xfs_getfsmap_helper","xfs_getfsmap_is_shared","xfs_getfsmap_is_valid_device.isra.0","xfs_getfsmap_logdev","xfs_growfs_data","xfs_growfs_data_private.isra.0","xfs_growfs_log","xfs_handle_acceptable","xfs_handle_to_dentry","xfs_handlereq_to_dentry.isra.0","xfs_has_finobt","xfs_has_reflink","xfs_has_rmapbt","xfs_health_unmount","xfs_hex_dump","xfs_ialloc_calc_rootino","xfs_ialloc_check_shrink","xfs_ialloc_count_inodes","xfs_ialloc_has_inodes_at_extent","xfs_ialloc_inode_init","xfs_ialloc_log_agi","xfs_ialloc_read_agi","xfs_ialloc_setup_geometry","xfs_iallocbt_calc_size","xfs_iallocbt_maxlevels_ondisk","xfs_icount_range","xfs_icreate_item_format","xfs_icreate_item_release","xfs_icreate_item_size","xfs_icreate_log","xfs_icwalk","xfs_icwalk_ag","xfs_icwalk_match","xfs_icwalk_match_id","xfs_icwalk_match_id_union","xfs_idata_realloc","xfs_idestroy_fork","xfs_iext_count","xfs_iext_count_may_overflow","xfs_iext_count_upgrade","xfs_iext_destroy","xfs_iext_destroy_node","xfs_iext_first","xfs_iext_get_extent","xfs_iext_insert","xfs_iext_insert_node.constprop.0","xfs_iext_insert_raw","xfs_iext_last","xfs_iext_lookup_extent","xfs_iext_lookup_extent_before","xfs_iext_next","xfs_iext_prev","xfs_iext_rebalance_leaf","xfs_iext_remove","xfs_iext_remove_node","xfs_iext_state_to_fork","xfs_iext_update_extent","xfs_iext_update_node.constprop.0.isra.0","xfs_iextents_copy","xfs_iformat_attr_fork","xfs_iformat_btree","xfs_iformat_data_fork","xfs_iformat_extents","xfs_iformat_local","xfs_ifree","xfs_ifree_cluster","xfs_iget","xfs_iget_cache_hit","xfs_iget_cache_miss","xfs_iget_check_free_state","xfs_iget_recycle","xfs_ilock","xfs_ilock2_io_mmap","xfs_ilock_attr_map_shared","xfs_ilock_data_map_shared","xfs_ilock_demote","xfs_ilock_nowait","xfs_imap","xfs_imap_to_bp","xfs_inactive","xfs_inactive_ifree","xfs_inactive_symlink","xfs_inactive_symlink_rmt","xfs_inactive_truncate","xfs_init_attr_trans","xfs_init_fs_context","xfs_init_local_fork","xfs_init_mount_workqueues","xfs_init_new_inode","xfs_init_procfs","xfs_initialize_perag","xfs_initialize_perag_data","xfs_initxattrs","xfs_inobt_alloc_block","xfs_inobt_btrec_to_irec","xfs_inobt_check_irec","xfs_inobt_commit_staged_btree","xfs_inobt_cur","xfs_inobt_destroy_cur_cache","xfs_inobt_diff_two_keys","xfs_inobt_dup_cursor","xfs_inobt_free_block","xfs_inobt_get_rec","xfs_inobt_init_common","xfs_inobt_init_cursor","xfs_inobt_init_high_key_from_rec","xfs_inobt_init_rec_from_cur","xfs_inobt_insert_rec","xfs_inobt_irec_to_allocmask","xfs_inobt_key_diff","xfs_inobt_keys_contiguous","xfs_inobt_keys_inorder","xfs_inobt_lookup","xfs_inobt_maxrecs","xfs_inobt_read_verify","xfs_inobt_rec_freecount","xfs_inobt_recs_inorder","xfs_inobt_set_root","xfs_inobt_stage_cursor","xfs_inobt_verify","xfs_inobt_walk","xfs_inobt_write_verify","xfs_inodegc_flush","xfs_inodegc_init_percpu","xfs_inodegc_push","xfs_inodegc_queue","xfs_inodegc_queue_all","xfs_inodegc_register_shrinker","xfs_inodegc_set_reclaimable","xfs_inodegc_shrinker_count","xfs_inodegc_shrinker_scan","xfs_inodegc_start","xfs_inodegc_stop","xfs_inodegc_worker","xfs_insert_file_space","xfs_internal_inum","xfs_inumbers","xfs_inumbers_fmt","xfs_inumbers_to_inogrp","xfs_inumbers_walk","xfs_ioc_ag_geometry","xfs_ioc_attr_list","xfs_ioc_attr_put_listent","xfs_ioc_attrmulti_one","xfs_ioc_bulkstat.constprop.0.isra.0","xfs_ioc_fsbulkstat.isra.0","xfs_ioc_fsgeometry","xfs_ioc_fsgetxattra","xfs_ioc_getbmap","xfs_ioc_getfsmap","xfs_ioc_inumbers.constprop.0","xfs_ioc_scrub_metadata","xfs_ioc_setlabel","xfs_ioc_setlabel.cold","xfs_ioc_swapext","xfs_ioc_trim","xfs_ioctl32_bstat_copyin","xfs_ioctl32_bstime_copyin","xfs_ioctl_setattr_xflags","xfs_ip2xflags","xfs_iread_extents","xfs_irele","xfs_iroot_realloc","xfs_itruncate_extents_flags","xfs_iunlink","xfs_iunlink_item_precommit","xfs_iunlink_item_release","xfs_iunlink_item_sort","xfs_iunlink_log_dinode","xfs_iunlink_log_inode","xfs_iunlink_reload_next.isra.0","xfs_iunlink_remove","xfs_iunlink_remove_inode","xfs_iunlink_update_bucket.isra.0","xfs_iunlock","xfs_iunlock2_io_mmap","xfs_iunlock2_remapping","xfs_iunpin_wait","xfs_iwalk","xfs_iwalk_adjust_start","xfs_iwalk_ag","xfs_iwalk_ag_recs","xfs_iwalk_ag_start.constprop.0","xfs_iwalk_ag_work","xfs_iwalk_alloc","xfs_iwalk_free","xfs_iwalk_ichunk_ra","xfs_iwalk_run_callbacks","xfs_iwalk_threaded","xfs_kill_sb","xfs_link","xfs_lock_inodes.constprop.0","xfs_lock_two_inodes","xfs_log_calc_max_attrsetm_res","xfs_log_calc_minimum_size","xfs_log_calc_unit_res","xfs_log_check_lsn","xfs_log_clean","xfs_log_dinode_to_disk","xfs_log_force","xfs_log_force_inode","xfs_log_force_seq","xfs_log_get_max_trans_res","xfs_log_item_in_current_chkpt","xfs_log_item_init","xfs_log_mount","xfs_log_mount_cancel","xfs_log_mount_finish","xfs_log_need_covered.isra.0","xfs_log_quiesce","xfs_log_regrant","xfs_log_reserve","xfs_log_sb","xfs_log_space_wake","xfs_log_ticket_get","xfs_log_ticket_put","xfs_log_ticket_regrant","xfs_log_ticket_ungrant","xfs_log_unmount","xfs_log_unmount_write","xfs_log_work_queue","xfs_log_worker","xfs_log_writable","xfs_lookup","xfs_mod_delalloc","xfs_mod_freecounter","xfs_mode_to_ftype","xfs_mount_free","xfs_mount_reset_sbqflags","xfs_mountfs","xfs_next_bit","xfs_open_by_handle","xfs_open_devices","xfs_panic_mask_proc_handler","xfs_perag_clear_inode_tag","xfs_perag_get","xfs_perag_get_tag","xfs_perag_grab","xfs_perag_grab_tag","xfs_perag_hold","xfs_perag_intent_busy","xfs_perag_intent_drain","xfs_perag_intent_get","xfs_perag_intent_hold","xfs_perag_intent_put","xfs_perag_intent_rele","xfs_perag_put","xfs_perag_rele","xfs_perag_set_inode_tag","xfs_prealloc_blocks","xfs_prep_free_cowblocks","xfs_prepare_shift","xfs_printk_level","xfs_pwork_destroy","xfs_pwork_init","xfs_pwork_poll","xfs_pwork_queue","xfs_pwork_work","xfs_qm_adjust_dqlimits","xfs_qm_adjust_dqtimers","xfs_qm_destroy_quotainfo","xfs_qm_destroy_quotainos","xfs_qm_dqattach","xfs_qm_dqattach_locked","xfs_qm_dqattach_one","xfs_qm_dqdestroy","xfs_qm_dqdetach","xfs_qm_dqflush","xfs_qm_dqfree_one","xfs_qm_dqget","xfs_qm_dqget_cache_lookup","xfs_qm_dqget_checks","xfs_qm_dqget_inode","xfs_qm_dqget_next","xfs_qm_dqget_uncached","xfs_qm_dqpurge","xfs_qm_dqput","xfs_qm_dqread","xfs_qm_dqrele","xfs_qm_dqunpin_wait","xfs_qm_dquot_isolate","xfs_qm_dquot_logitem_committing","xfs_qm_dquot_logitem_format","xfs_qm_dquot_logitem_init","xfs_qm_dquot_logitem_pin","xfs_qm_dquot_logitem_push","xfs_qm_dquot_logitem_release","xfs_qm_dquot_logitem_size","xfs_qm_dquot_logitem_unpin","xfs_qm_dquot_walk.isra.0","xfs_qm_dqusage_adjust","xfs_qm_exit","xfs_qm_fill_state","xfs_qm_flush_one","xfs_qm_id_for_quotatype","xfs_qm_init_dquot_blk","xfs_qm_init_quotainfo","xfs_qm_init_quotainos","xfs_qm_init_timelimits","xfs_qm_mount_quotas","xfs_qm_need_dqattach","xfs_qm_newmount","xfs_qm_qino_alloc","xfs_qm_quotacheck","xfs_qm_quotacheck_dqadjust.constprop.0","xfs_qm_reset_dqcounts.constprop.0","xfs_qm_reset_dqcounts_all","xfs_qm_reset_dqcounts_buf","xfs_qm_scall_getquota","xfs_qm_scall_getquota_fill_qc.constprop.0","xfs_qm_scall_getquota_next","xfs_qm_scall_quotaoff","xfs_qm_scall_quotaon","xfs_qm_scall_setqlim","xfs_qm_scall_trunc_qfile","xfs_qm_scall_trunc_qfiles","xfs_qm_set_defquota","xfs_qm_shrink_count","xfs_qm_shrink_scan","xfs_qm_statvfs","xfs_qm_unmount","xfs_qm_unmount_quotas","xfs_qm_vop_chown","xfs_qm_vop_create_dqattach","xfs_qm_vop_dqalloc","xfs_qm_vop_rename_dqattach","xfs_quota_calc_throttle","xfs_quota_disable","xfs_quota_enable","xfs_quota_flags","xfs_quota_need_throttle","xfs_quota_type","xfs_quota_warn","xfs_readsb","xfs_reclaim_inode","xfs_reclaim_inodes","xfs_reclaim_inodes_count","xfs_reclaim_inodes_nr","xfs_reclaim_work_queue","xfs_reclaim_worker","xfs_recover_inode_owner_change","xfs_refc_block","xfs_refcount_adjust","xfs_refcount_adjust_cow","xfs_refcount_adjust_cow_extents","xfs_refcount_adjust_extents","xfs_refcount_alloc_cow_extent","xfs_refcount_btrec_to_irec","xfs_refcount_check_irec","xfs_refcount_decrease_extent","xfs_refcount_delete","xfs_refcount_find_left_extents","xfs_refcount_find_right_extents","xfs_refcount_find_shared","xfs_refcount_finish_one","xfs_refcount_finish_one_cleanup","xfs_refcount_free_cow_extent","xfs_refcount_get_rec","xfs_refcount_has_records","xfs_refcount_increase_extent","xfs_refcount_insert","xfs_refcount_intent_destroy_cache","xfs_refcount_lookup_eq","xfs_refcount_lookup_ge","xfs_refcount_lookup_le","xfs_refcount_merge_center_extents","xfs_refcount_merge_extents","xfs_refcount_merge_left_extent","xfs_refcount_merge_right_extent","xfs_refcount_query_range","xfs_refcount_query_range_helper","xfs_refcount_recover_cow_leftovers","xfs_refcount_recover_extent","xfs_refcount_recover_work","xfs_refcount_relog_intent","xfs_refcount_split_extent","xfs_refcount_still_have_space","xfs_refcount_update","xfs_refcount_update_abort_intent","xfs_refcount_update_cancel_item","xfs_refcount_update_create_done","xfs_refcount_update_create_intent","xfs_refcount_update_diff_items","xfs_refcount_update_finish_item","xfs_refcount_update_get_group","xfs_refcount_update_log_item.constprop.0","xfs_refcountbt_alloc_block","xfs_refcountbt_calc_reserves","xfs_refcountbt_calc_size","xfs_refcountbt_commit_staged_btree","xfs_refcountbt_compute_maxlevels","xfs_refcountbt_destroy_cur_cache","xfs_refcountbt_diff_two_keys","xfs_refcountbt_dup_cursor","xfs_refcountbt_free_block","xfs_refcountbt_get_maxrecs","xfs_refcountbt_get_minrecs","xfs_refcountbt_init_common","xfs_refcountbt_init_cursor","xfs_refcountbt_init_high_key_from_rec","xfs_refcountbt_init_key_from_rec","xfs_refcountbt_init_ptr_from_cur","xfs_refcountbt_init_rec_from_cur","xfs_refcountbt_key_diff","xfs_refcountbt_keys_contiguous","xfs_refcountbt_keys_inorder","xfs_refcountbt_max_size","xfs_refcountbt_maxlevels_ondisk","xfs_refcountbt_maxrecs","xfs_refcountbt_read_verify","xfs_refcountbt_recs_inorder","xfs_refcountbt_set_root","xfs_refcountbt_stage_cursor","xfs_refcountbt_verify","xfs_refcountbt_write_verify","xfs_reflink_allocate_cow","xfs_reflink_cancel_cow_blocks","xfs_reflink_cancel_cow_range","xfs_reflink_clear_inode_flag","xfs_reflink_convert_cow","xfs_reflink_convert_cow_locked","xfs_reflink_convert_unwritten.isra.0","xfs_reflink_end_cow","xfs_reflink_end_cow_extent","xfs_reflink_fill_cow_hole","xfs_reflink_find_shared","xfs_reflink_inode_has_shared_extents","xfs_reflink_recover_cow","xfs_reflink_remap_blocks","xfs_reflink_remap_extent","xfs_reflink_remap_prep","xfs_reflink_set_inode_flag","xfs_reflink_trim_around_shared","xfs_reflink_try_clear_inode_flag","xfs_reflink_unshare","xfs_reflink_update_dest","xfs_reinit_percpu_counters","xfs_rmap_alloc","xfs_rmap_alloc_extent","xfs_rmap_btrec_to_irec","xfs_rmap_check_irec","xfs_rmap_compare","xfs_rmap_convert","xfs_rmap_convert_extent","xfs_rmap_convert_shared","xfs_rmap_count_owners","xfs_rmap_count_owners_helper","xfs_rmap_delete","xfs_rmap_find_left_neighbor","xfs_rmap_find_left_neighbor_helper","xfs_rmap_finish_one","xfs_rmap_finish_one_cleanup","xfs_rmap_free","xfs_rmap_free_extent","xfs_rmap_get_rec","xfs_rmap_has_other_keys","xfs_rmap_has_records","xfs_rmap_insert","xfs_rmap_intent_destroy_cache","xfs_rmap_lookup_eq","xfs_rmap_lookup_le","xfs_rmap_lookup_le_range","xfs_rmap_lookup_le_range_helper","xfs_rmap_map","xfs_rmap_map_extent","xfs_rmap_map_raw","xfs_rmap_map_shared","xfs_rmap_query_all","xfs_rmap_query_range","xfs_rmap_query_range_helper","xfs_rmap_recover_work","xfs_rmap_relog_intent","xfs_rmap_unmap","xfs_rmap_unmap_extent","xfs_rmap_unmap_shared","xfs_rmap_update","xfs_rmap_update_abort_intent","xfs_rmap_update_cancel_item","xfs_rmap_update_create_done","xfs_rmap_update_create_intent","xfs_rmap_update_diff_items","xfs_rmap_update_finish_item","xfs_rmap_update_get_group","xfs_rmap_update_log_item.constprop.0","xfs_rmapbt_alloc_block","xfs_rmapbt_calc_reserves","xfs_rmapbt_calc_size","xfs_rmapbt_commit_staged_btree","xfs_rmapbt_compute_maxlevels","xfs_rmapbt_destroy_cur_cache","xfs_rmapbt_diff_two_keys","xfs_rmapbt_dup_cursor","xfs_rmapbt_free_block","xfs_rmapbt_get_maxrecs","xfs_rmapbt_get_minrecs","xfs_rmapbt_init_cursor","xfs_rmapbt_init_high_key_from_rec","xfs_rmapbt_init_key_from_rec","xfs_rmapbt_init_ptr_from_cur","xfs_rmapbt_init_rec_from_cur","xfs_rmapbt_key_diff","xfs_rmapbt_keys_contiguous","xfs_rmapbt_keys_inorder","xfs_rmapbt_max_size","xfs_rmapbt_maxlevels_ondisk","xfs_rmapbt_maxrecs","xfs_rmapbt_read_verify","xfs_rmapbt_recs_inorder","xfs_rmapbt_set_root","xfs_rmapbt_stage_cursor","xfs_rmapbt_verify","xfs_rmapbt_write_verify","xfs_rt_mark_healthy","xfs_rt_mark_sick","xfs_rt_measure_sickness","xfs_rud_item_format","xfs_rud_item_intent","xfs_rud_item_release","xfs_rud_item_size","xfs_rui_copy_format","xfs_rui_init","xfs_rui_item_format","xfs_rui_item_free","xfs_rui_item_match","xfs_rui_item_release","xfs_rui_item_size","xfs_rui_item_unpin","xfs_rui_release","xfs_rw_bdev","xfs_save_resvblks","xfs_scrub_metadata","xfs_set_acl","xfs_set_inode_alloc","xfs_set_low_space_thresholds","xfs_setattr_nonsize","xfs_setattr_size","xfs_setfilesize","xfs_setsize_buftarg","xfs_setup_devices","xfs_setup_inode","xfs_setup_iops","xfs_shutdown_devices","xfs_sort_for_rename.constprop.0","xfs_stats_clear_proc_handler","xfs_stats_clearall","xfs_stats_format","xfs_swap_change_owner","xfs_swap_extent_forks.constprop.0","xfs_swap_extent_rmap","xfs_swap_extents","xfs_swap_extents_check_format","xfs_symlink","xfs_symlink_blocks","xfs_symlink_hdr_ok","xfs_symlink_hdr_set","xfs_symlink_local_to_remote","xfs_symlink_read_verify","xfs_symlink_shortform_verify","xfs_symlink_verify","xfs_symlink_write_verify","xfs_sync_sb","xfs_sync_sb_buf","xfs_sysctl_register","xfs_sysctl_unregister","xfs_sysfs_del.constprop.0","xfs_sysfs_object_show","xfs_sysfs_object_store","xfs_sysfs_release","xfs_trans_add_item","xfs_trans_ail_cursor_clear.constprop.0","xfs_trans_ail_cursor_done","xfs_trans_ail_cursor_first","xfs_trans_ail_cursor_init","xfs_trans_ail_cursor_last","xfs_trans_ail_cursor_next","xfs_trans_ail_delete","xfs_trans_ail_destroy","xfs_trans_ail_init","xfs_trans_ail_insert","xfs_trans_ail_update_bulk","xfs_trans_alloc","xfs_trans_alloc_dir","xfs_trans_alloc_dqinfo","xfs_trans_alloc_empty","xfs_trans_alloc_ichange","xfs_trans_alloc_icreate","xfs_trans_alloc_inode","xfs_trans_apply_dquot_deltas","xfs_trans_apply_sb_deltas","xfs_trans_bhold","xfs_trans_bhold_release","xfs_trans_binval","xfs_trans_bjoin","xfs_trans_brelse","xfs_trans_buf_copy_type","xfs_trans_buf_is_dirty","xfs_trans_buf_item_match","xfs_trans_buf_set_type","xfs_trans_cancel","xfs_trans_commit","xfs_trans_committed_bulk","xfs_trans_del_item","xfs_fs_eofblocks_from_user","xfs_trans_dirty_buf","xfs_trans_dqjoin","xfs_trans_dqlockedjoin","xfs_trans_dqresv","xfs_trans_dquot_buf","xfs_trans_dup","xfs_trans_dup_dqinfo","xfs_trans_free","xfs_trans_free_dqinfo","xfs_trans_free_items","xfs_trans_get_buf_map","xfs_trans_get_dqtrx","xfs_trans_getsb","xfs_trans_ichgtime","xfs_trans_ijoin","xfs_trans_init","xfs_trans_inode_alloc_buf","xfs_trans_inode_buf","xfs_trans_log_buf","xfs_trans_log_dquot","xfs_trans_log_inode","xfs_trans_mod_dquot","xfs_trans_mod_dquot.part.0","xfs_trans_mod_dquot_byino","xfs_trans_mod_sb","xfs_trans_ordered_buf","xfs_trans_precommit_sort","xfs_trans_read_buf_map","xfs_trans_reserve","xfs_trans_reserve_more","xfs_trans_reserve_more_inode","xfs_trans_reserve_quota_bydquots","xfs_trans_reserve_quota_icreate","xfs_trans_reserve_quota_nblks","xfs_trans_resv_calc","xfs_trans_roll","xfs_trans_roll_inode","xfs_trans_run_precommits","xfs_trans_stale_inode_buf","xfs_trans_unreserve_and_mod_dquots","xfs_trans_unreserve_and_mod_sb","xfs_trim_extent","xfs_trim_gather_extents","xfs_trim_should_stop","xfs_truncate_page","xfs_unmount_flush_inodes","xfs_unmountfs","xfs_update_alignment","xfs_update_secondary_sbs","xfs_uuid_mount","xfs_uuid_table_free","xfs_uuid_unmount","xfs_validate_ag_length","xfs_validate_new_dalign","xfs_validate_sb_common","xfs_validate_sb_read","xfs_validate_sb_write.isra.0","xfs_validate_stripe_geometry","xfs_verifier_error","xfs_verify_dablk","xfs_verify_dir_ino","xfs_verify_fileext","xfs_verify_fileoff","xfs_verify_fsbext","xfs_verify_fsbno","xfs_verify_icount","xfs_verify_ino","xfs_verify_magic","xfs_verify_magic16","xfs_verify_rtbext","xfs_verify_rtbno","xfs_vn_ci_lookup","xfs_vn_create","xfs_vn_fiemap","xfs_vn_get_link","xfs_vn_getattr","xfs_vn_link","xfs_vn_listxattr","xfs_vn_lookup","xfs_vn_mkdir","xfs_vn_mknod","xfs_vn_rename","xfs_vn_setattr","xfs_vn_setattr_size","xfs_vn_symlink","xfs_vn_tmpfile","xfs_vn_unlink","xfs_vn_update_time","xfs_xattr_get","xfs_xattr_put_listent","xfs_xattr_set","xfs_zero_extent","xfs_zero_range","xfsaild","xfsaild_push"]},{"type":1,"name":"ext4","functions":["ext4_exit_fs","ext4_acl_from_disk","ext4_acl_to_disk.constprop.0","ext4_acquire_dquot","ext4_add_dirent_to_inline","ext4_add_entry","ext4_add_nondir","ext4_apply_options","ext4_attr_show","ext4_attr_store","ext4_begin_enable_verity","ext4_bg_has_super","ext4_bg_num_gdb","ext4_bio_write_page.cold","ext4_break_layouts","ext4_buffered_write_iter","ext4_cache_extents","ext4_calculate_overhead","ext4_can_extents_be_merged.constprop.0","ext4_can_truncate","ext4_change_inode_journal_flag","ext4_check_all_de","ext4_check_blockref","ext4_check_descriptors","ext4_check_feature_compatibility","ext4_check_opt_consistency","ext4_check_quota_consistency.isra.0","ext4_chunk_trans_blocks","ext4_claim_free_clusters","ext4_clear_blocks","ext4_clear_inode","ext4_clear_inode_es","ext4_clear_journal_err","ext4_clear_request_list","ext4_clu_mapped","ext4_collapse_range","ext4_commit_super","ext4_compat_ioctl","ext4_convert_inline_data","ext4_convert_inline_data_nolock","ext4_convert_inline_data_to_extent","ext4_convert_meta_bg","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec","ext4_count_dirs","ext4_count_free","ext4_count_free_clusters","ext4_count_free_inodes","ext4_create","ext4_create_inline_data","ext4_cross_rename","ext4_datasem_ensure_credits","ext4_dax_fault","ext4_dax_huge_fault","ext4_dax_write_iter","ext4_dax_writepages","ext4_decode_error","ext4_delete_entry","ext4_delete_inline_entry","ext4_destroy_inline_data","ext4_destroy_inline_data_nolock","ext4_destroy_inode","ext4_destroy_system_zone","ext4_dir_llseek","ext4_dirblock_csum_verify","ext4_discard_allocated_blocks","ext4_discard_preallocations","ext4_discard_work","ext4_do_update_inode.isra.0","ext4_do_writepages","ext4_double_down_write_data_sem","ext4_double_up_write_data_sem","ext4_drop_inode","ext4_dx_add_entry","ext4_dx_csum","ext4_dx_find_entry","ext4_dx_readdir","ext4_empty_dir","ext4_enable_quotas","ext4_encrypted_get_link","ext4_encrypted_symlink_getattr","ext4_end_bitmap_read","ext4_end_enable_verity","ext4_es_cache_extent","ext4_es_can_be_merged.isra.0","ext4_es_can_be_merged.isra.0.cold","ext4_es_count","ext4_es_delayed_clu","ext4_es_find_extent_range","ext4_es_free_extent","ext4_es_init_tree","ext4_es_insert_delayed_block","ext4_es_insert_extent","ext4_es_is_delayed","ext4_es_is_delayed","ext4_es_is_delonly","ext4_es_is_delonly","ext4_es_is_mapped","ext4_es_lookup_extent","ext4_es_register_shrinker","ext4_es_remove_extent","ext4_es_scan","ext4_es_scan_clu","ext4_es_scan_range","ext4_es_unregister_shrinker","ext4_evict_ea_inode","ext4_evict_inode","ext4_expand_extra_isize","ext4_expand_extra_isize_ea","ext4_expand_inode_array","ext4_fc_add_dentry_tlv","ext4_fc_add_tlv","ext4_fc_cleanup","ext4_fc_commit","ext4_fc_del","ext4_fc_destroy_dentry_cache","ext4_fc_free","ext4_fc_info_show","ext4_fc_init","ext4_fc_init_inode","ext4_fc_mark_ineligible","ext4_fc_perform_commit","ext4_fc_record_modified_inode.isra.0","ext4_fc_record_regions","ext4_fc_replay","ext4_fc_replay_add_range.constprop.0","ext4_fc_replay_check_excluded","ext4_fc_replay_cleanup","ext4_fc_replay_del_range.constprop.0","ext4_fc_replay_inode","ext4_fc_replay_link_internal.isra.0","ext4_fc_replay_scan.isra.0","ext4_fc_reserve_space","ext4_fc_set_bitmaps_and_counters","ext4_fc_start_update","ext4_fc_stop_update","ext4_fc_submit_bh","ext4_fc_track_create","ext4_fc_track_inode","ext4_fc_track_link","ext4_fc_track_range","ext4_fc_track_template.isra.0","ext4_fc_track_unlink","ext4_fc_update_stats","ext4_fc_wait_committing_inode","ext4_fc_write_inode","ext4_fc_write_inode_data","ext4_fc_write_tail","ext4_feat_release","ext4_feature_set_ok","ext4_fill_flex_info","ext4_fill_raw_inode","ext4_fill_super","ext4_flex_group_add","ext4_fname_free_filename","ext4_fname_from_fscrypt_name","ext4_fname_prepare_lookup","ext4_fname_setup_filename","ext4_force_commit","ext4_force_shutdown","ext4_freeze","ext4_fsmap_from_internal","ext4_fsmap_to_internal","ext4_generic_delete_entry","ext4_generic_write_checks","ext4_geometry_check","ext4_get_acl","ext4_get_bitmap.isra.0","ext4_get_block","ext4_get_block_unwritten","ext4_get_branch","ext4_get_context","ext4_get_dev_journal","ext4_get_dquots","ext4_get_dummy_policy","ext4_get_es_cache","ext4_get_fc_inode_loc","ext4_get_first_dir_block.constprop.0","ext4_get_first_inline_block","ext4_get_group_desc","ext4_get_group_info","ext4_get_group_no_and_offset","ext4_get_group_number","ext4_get_ino_and_lblk_bits","ext4_get_inode_loc","ext4_get_inode_usage","ext4_get_io_end","ext4_get_journal_inode","ext4_get_link","ext4_get_max_inline_size","ext4_get_max_inline_size.part.0","ext4_get_parent","ext4_get_projid","ext4_get_reserved_space","ext4_get_tree","ext4_get_verity_descriptor","ext4_get_verity_descriptor_location.constprop.0","ext4_getattr","ext4_getblk","ext4_getblk.cold","ext4_getfsmap","ext4_getfsmap_compare","ext4_getfsmap_datadev","ext4_getfsmap_datadev_helper","ext4_getfsmap_dev_compare","ext4_getfsmap_find_fixed_metadata","ext4_getfsmap_format","ext4_getfsmap_free_fixed_metadata","ext4_getfsmap_helper","ext4_getfsmap_is_valid_device.isra.0","ext4_getfsmap_logdev","ext4_group_add","ext4_group_add_blocks","ext4_group_desc_csum","ext4_group_desc_csum_set","ext4_group_desc_csum_verify","ext4_group_desc_init","ext4_group_extend","ext4_group_extend_no_check","ext4_group_extend_no_check.cold","ext4_handle_dirty_dirblock","ext4_handle_dirty_dx_node","ext4_handle_error","ext4_handle_error.cold","ext4_handle_inode_extension","ext4_has_free_clusters","ext4_has_stable_inodes","ext4_htree_fill_tree","ext4_htree_free_dir_info","ext4_htree_next_block","ext4_htree_store_dirent","ext4_inc_count","ext4_ind_map_blocks","ext4_ind_map_blocks.cold","ext4_ind_migrate","ext4_ind_remove_space","ext4_ind_trans_blocks","ext4_ind_truncate","ext4_ind_truncate_ensure_credits","ext4_init_acl","ext4_init_block_bitmap","ext4_init_block_bitmap.cold","ext4_init_dot_dotdot","ext4_init_fs_context","ext4_init_inode_table","ext4_init_io_end","ext4_init_journal_params","ext4_init_metadata_csum","ext4_init_new_dir","ext4_init_orphan_info","ext4_init_pending_tree","ext4_init_security","ext4_init_symlink_block","ext4_initialize_dirent_tail","ext4_initxattrs","ext4_inline_data_iomap","ext4_inline_data_truncate","ext4_inlinedir_to_tree","ext4_inode_attach_jinode","ext4_inode_bitmap","ext4_inode_bitmap_csum_set","ext4_inode_bitmap_csum_verify","ext4_inode_bitmap_set","ext4_inode_block_valid","ext4_inode_csum","ext4_inode_csum_set","ext4_inode_extension_cleanup","ext4_inode_is_fast_symlink","ext4_inode_journal_mode","ext4_inode_table","ext4_inode_table_set","ext4_inode_to_goal_block","ext4_insert_dentry","ext4_insert_range","ext4_invalidate_folio","ext4_ioc_getfsmap","ext4_ioctl","ext4_ioctl_get_encryption_pwsalt","ext4_ioctl_getuuid","ext4_ioctl_group_add","ext4_ioctl_setflags","ext4_ioctl_setproject","ext4_is_pending","ext4_issue_zeroout","ext4_itable_unused_count","ext4_itable_unused_set","ext4_jbd2_inode_add_write.part.0","ext4_kill_sb","ext4_kvfree_array_rcu","ext4_last_io_end_vec","ext4_lazyinit_thread","ext4_lazyinit_thread.part.0","ext4_link","ext4_list_backups","ext4_listxattr","ext4_llseek","ext4_load_and_init_journal","ext4_load_journal","ext4_load_super","ext4_lookup","ext4_lookup.part.0","ext4_map_blocks","ext4_mb_add_groupinfo","ext4_mb_alloc_groupinfo","ext4_mb_check_limits","ext4_mb_choose_next_group_cr0.constprop.0","ext4_mb_choose_next_group_cr1.constprop.0","ext4_mb_clear_bb","ext4_mb_collect_stats","ext4_mb_complex_scan_group","ext4_mb_discard_group_preallocations","ext4_mb_discard_lg_preallocations","ext4_mb_discard_preallocations_should_retry","ext4_mb_find_by_goal","ext4_mb_free_metadata","ext4_mb_generate_buddy","ext4_mb_generate_from_pa","ext4_mb_good_group","ext4_mb_good_group_nolock","ext4_mb_init","ext4_mb_init.cold","ext4_mb_init_backend","ext4_mb_init_cache","ext4_mb_init_group","ext4_mb_initialize_context","ext4_mb_load_buddy_gfp","ext4_mb_mark_bb","ext4_mb_mark_diskspace_used","ext4_mb_mark_pa_deleted","ext4_mb_new_blocks","ext4_mb_new_blocks_simple","ext4_mb_new_blocks_simple.cold","ext4_mb_new_group_pa","ext4_mb_new_inode_pa","ext4_mb_normalize_request.constprop.0","ext4_mb_pa_adjust_overlap.constprop.0","ext4_mb_pa_callback","ext4_mb_pa_put_free","ext4_mb_prefetch","ext4_mb_prefetch_fini","ext4_mb_regular_allocator","ext4_mb_release","ext4_mb_release_context.isra.0","ext4_mb_release_group_pa.isra.0","ext4_mb_release_inode_pa.isra.0","ext4_mb_scan_aligned","ext4_mb_seq_groups_next","ext4_mb_seq_groups_show","ext4_mb_seq_groups_start","ext4_mb_seq_groups_stop","ext4_mb_seq_structs_summary_next","ext4_mb_seq_structs_summary_show","ext4_mb_seq_structs_summary_start","ext4_mb_seq_structs_summary_stop","ext4_mb_simple_scan_group","ext4_mb_try_best_found","ext4_mb_unload_buddy","ext4_mb_use_best_found","ext4_mb_use_inode_pa","ext4_mb_use_preallocated.constprop.0","ext4_mpage_readpages","ext4_multi_mount_protect","ext4_new_meta_blocks","ext4_nfs_commit_metadata","ext4_nfs_get_inode","ext4_nonda_switch","ext4_normal_submit_inode_data_buffers","ext4_notify_error_sysfs","ext4_num_base_meta_clusters","ext4_num_overhead_clusters","ext4_orphan_add","ext4_orphan_add.cold","ext4_orphan_cleanup","ext4_orphan_del","ext4_orphan_file_add","ext4_orphan_file_block_trigger","ext4_orphan_file_empty","ext4_orphan_get","ext4_page_mkwrite","ext4_parse_param","ext4_prepare_inline_data","ext4_process_freed_data","ext4_process_orphan","ext4_punch_hole","ext4_put_io_end","ext4_put_io_end_defer","ext4_put_super","ext4_put_super.cold","ext4_quota_off","ext4_quota_on","ext4_quota_read","ext4_quota_write","ext4_rcu_ptr_callback","ext4_reconfigure","ext4_register_li_request","ext4_register_sysfs","ext4_release_dir","ext4_release_dquot","ext4_release_file","ext4_release_folio","ext4_release_orphan_info","ext4_release_system_zone","ext4_remove_blocks","ext4_remove_pending","ext4_rename","ext4_rename2","ext4_rename_dir_finish","ext4_rename_dir_prepare.part.0.constprop.0","ext4_rereserve_cluster","ext4_reserve_inode_write","ext4_reset_inode_seed","ext4_resetent","ext4_resize_begin","ext4_resize_end","ext4_resize_fs","ext4_rmdir","ext4_rmdir.part.0","ext4_run_li_request","ext4_sample_last_mounted","ext4_sb_block_valid","ext4_sb_bread","ext4_sb_bread_unmovable","ext4_sb_breadahead_unmovable","ext4_sb_release","ext4_sb_setlabel","ext4_sb_setuuid","ext4_search_dir","ext4_seq_es_shrinker_info_show","ext4_seq_mb_stats_show","ext4_seq_options_show","ext4_set_acl","ext4_set_aops","ext4_set_context","ext4_set_def_opts","ext4_set_inode_flags","ext4_set_iomap","ext4_setattr","ext4_setent","ext4_setup_new_descs","ext4_setup_next_flex_gd","ext4_setup_super","ext4_setup_super.cold","ext4_setup_system_zone","ext4_setup_system_zone.cold","ext4_should_retry_alloc","ext4_show_options","ext4_shutdown","ext4_split_convert_extents","ext4_split_extent","ext4_split_extent_at","ext4_stop_mmpd","ext4_superblock_csum","ext4_superblock_csum_set","ext4_sync_file.cold","ext4_try_add_inline_entry","ext4_try_create_inline_dir","ext4_try_merge_freed_extent.part.0","ext4_try_to_trim_range","ext4_try_to_write_inline_data","ext4_unregister_li_request","ext4_unregister_sysfs","ext4_update_backup_sb","ext4_update_bh_state","ext4_update_dir_count","ext4_update_disksize_before_punch","ext4_update_dx_flag","ext4_update_dynamic_rev","ext4_update_final_de","ext4_update_inline_data","ext4_update_overhead","ext4_update_primary_sb","ext4_update_super","ext4_update_super","ext4_update_super.cold","ext4_update_superblocks_fn","ext4_used_dirs_count","ext4_used_dirs_set","ext4_valid_block_bitmap","ext4_validate_block_bitmap.part.0","ext4_wait_block_bitmap","ext4_walk_page_buffers","ext4_write_inode.cold","ext4_xattr_block_csum","ext4_xattr_block_csum_set","ext4_xattr_block_find","ext4_xattr_block_get","ext4_xattr_block_set","ext4_xattr_cmp","ext4_xattr_create_cache","ext4_xattr_delete_inode","ext4_xattr_destroy_cache","ext4_xattr_free_space","ext4_xattr_get","ext4_xattr_get_block","ext4_xattr_hurd_get","ext4_xattr_hurd_list","ext4_xattr_hurd_set","ext4_xattr_ibody_find","ext4_xattr_ibody_get","ext4_xattr_ibody_set","ext4_xattr_inode_array_free","ext4_xattr_inode_cache_find","ext4_xattr_inode_create","ext4_xattr_inode_dec_ref_all","ext4_xattr_inode_free_quota","ext4_xattr_inode_get","ext4_xattr_inode_get.cold","ext4_xattr_inode_iget","ext4_xattr_inode_inc_ref_all","ext4_xattr_inode_lookup_create","ext4_xattr_inode_read","ext4_xattr_inode_update_ref","ext4_xattr_inode_write","ext4_xattr_list_entries","ext4_xattr_move_to_block","ext4_xattr_release_block","ext4_xattr_security_get","ext4_xattr_security_set","ext4_xattr_set","ext4_xattr_set_credits","ext4_xattr_set_entry","ext4_xattr_set_handle","ext4_xattr_shift_entries","ext4_xattr_trusted_get","ext4_xattr_trusted_list","ext4_xattr_trusted_set","ext4_xattr_user_get","ext4_xattr_user_list","ext4_xattr_user_set","ext4_xattr_value_same.isra.0","ext4_zero_partial_blocks","ext4_zero_range","ext4fs_dirhash"]},{"type":1,"name":"iomap","functions":["iomap_init","iomap_iter_advance","iomap_iter_done"]},{"type":1,"name":"iov","functions":["iov_iter_alignment","iov_iter_advance","iov_iter_init"]},{"type":2,"name":"test_posix","functions":[],"binary_path":"/home/haridev/datacrumbs/build/bin/df_tracer_test"},{"type":1,"name":"os_page_cache","functions":["filemap_write_and_wait_range","fault_in_readable","filemap_get_entry","folio_unlock","__filemap_add_folio","__filemap_fdatawrite_range","__filemap_get_folio","__filemap_remove_folio","__filemap_set_wb_err","__folio_cancel_dirty","__folio_lock","__folio_lock_killable","__folio_lock_or_retry","__folio_mark_dirty","__page_cache_alloc","__readahead_batch","__readahead_folio","__set_page_dirty","__set_page_dirty_nobuffers","find_get_page","find_get_page_flags","find_lock_page","find_or_create_page","find_subpage","i_blocks_per_folio","i_blocks_per_page","inode_drain_writes","linear_page_index","lock_page","noop_dirty_folio","page_cache_alloc","page_cache_async_ra","page_cache_async_readahead","page_cache_next_miss","page_cache_prev_miss","page_cache_ra_unbounded","page_cache_sync_ra","page_cache_sync_readahead","page_file_mapping","page_file_offset","page_mapping","page_mkwrite_check_truncate","page_offset","page_to_pgoff","pagecache_get_page","read_cache_folio","read_cache_page","read_cache_page_gfp","read_mapping_folio","read_mapping_page","readahead_batch_length","readahead_count","readahead_expand","readahead_folio","readahead_gfp_mask","readahead_index","readahead_length","readahead_page","readahead_pos","replace_page_cache_folio","swapcache_mapping","trylock_page","unlock_page","wait_for_stable_page","wait_on_page_locked","wait_on_page_writeback","wake_page_match","write_inode_now"]},{"type":1,"name":"shm","functions":["shmem_init"]},{"type":1,"name":"fscache","functions":["fscache_update_aux"]},{"type":2,"name":"ior","functions":["_dl_relocate_static_pie","_fini","_init","_start"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/ior-3.3.0-ip47j26fw7xxfftdzjvy2h36phgcuypv/bin/ior","include_offsets":false}] +[{"type":4,"name":"custom1","functions":[],"bpf_path":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2},{"type":0,"name":"sys","functions":["fork","sys","ioctl","newfstatat","ni_syscall","old_mmap","old_select","io_getevents","io_getevents_time32","io_pgetevents","io_pgetevents_time32","epoll_create1","epoll_ctl","epoll_pwait","epoll_pwait2","ioprio_set","ioprio_get","umount","mount","pivot_root","chroot","vhangup","pipe2","quotactl","quotactl_fd","getdents64","pselect6","pselect6_time32","ppoll","ppoll_time32","signalfd4","vmsplice","splice","tee","timerfd_create","timerfd_settime","timerfd_gettime","timerfd_gettime32","timerfd_settime32","utimensat","utimensat_time32","acct","capget","capset","personality","waitid","set_tid_address","unshare","futex","futex_time32","get_robust_list","set_robust_list","futex_waitv","futex_wake","futex_wait","futex_requeue","nanosleep","nanosleep_time32","getitimer","setitimer","kexec_load","init_module","delete_module","timer_create","timer_gettime","timer_getoverrun","timer_settime","timer_delete","clock_settime","clock_gettime","clock_getres","clock_nanosleep","timer_gettime32","timer_settime32","clock_settime32","clock_gettime32","clock_getres_time32","clock_nanosleep_time32","syslog","ptrace","sched_setparam","sched_setscheduler","sched_getscheduler","sched_getparam","sched_setaffinity","sched_getaffinity","sched_yield","sched_get_priority_max","sched_get_priority_min","sched_rr_get_interval","sched_rr_get_interval_time32","restart_syscall","kill","tkill","tgkill","sigaltstack","rt_sigsuspend","rt_sigaction","rt_sigprocmask","rt_sigpending","rt_sigtimedwait","rt_sigtimedwait_time32","rt_sigqueueinfo","setpriority","getpriority","reboot","setregid","setgid","setreuid","setuid","setresuid","getresuid","setresgid","getresgid","setfsuid","setfsgid","times","setpgid","getpgid","getsid","setsid","getgroups","setgroups","newuname","sethostname","setdomainname","getrlimit","setrlimit","getrusage","umask","prctl","getcpu","gettimeofday","settimeofday","adjtimex","adjtimex_time32","getpid","getppid","getuid","geteuid","getgid","getegid","gettid","sysinfo","mq_open","mq_unlink","mq_timedsend","mq_timedreceive","mq_notify","mq_getsetattr","mq_timedreceive_time32","mq_timedsend_time32","msgget","old_msgctl","msgctl","msgrcv","msgsnd","semget","semctl","old_semctl","semtimedop","semtimedop_time32","semop","shmget","old_shmctl","shmctl","shmat","shmdt","socket","socketpair","bind","listen","accept","connect","getsockname","getpeername","sendto","recvfrom","setsockopt","getsockopt","shutdown","sendmsg","recvmsg","readahead","brk","add_key","request_key","keyctl","clone","clone3","execve","swapon","swapoff","get_mempolicy","set_mempolicy","rt_tgsigqueueinfo","perf_event_open","accept4","recvmmsg","recvmmsg_time32","wait4","prlimit64","name_to_handle_at","open_by_handle_at","clock_adjtime","clock_adjtime32","setns","sendmmsg","kcmp","finit_module","sched_setattr","sched_getattr","renameat2","seccomp","getrandom","memfd_create","bpf","execveat","userfaultfd","membarrier","mlock2","pkey_mprotect","pkey_alloc","pkey_free","rseq","open_tree","move_mount","mount_setattr","fsopen","fsconfig","fsmount","fspick","pidfd_send_signal","pidfd_getfd","landlock_create_ruleset","landlock_add_rule","landlock_restrict_self","memfd_secret","set_mempolicy_home_node","cachestat","map_shadow_stack","ioperm","pciconfig_read","pciconfig_write","pciconfig_iobase","spu_run","spu_create","chmod","chown","lchown","epoll_create","eventfd","signalfd","sendfile","alarm","getpgrp","pause","time","time32","futimesat_time32","utime32","utimes_time32","select","poll","epoll_wait","recv","send","oldumount","uselib","stime","stime32","sigpending","sigprocmask","sgetmask","ssetmask","signal","nice","kexec_file_load","waitpid","socketcall","old_readdir","gethostname","uname","olduname","ipc"]},{"type":2,"name":"libc","functions":["fnmatch@@GLIBC_2.2.5","sched_getaffinity@@GLIBC_2.3.4","getgrnam_r@@GLIBC_2.2.5","sysctl@GLIBC_2.2.5","forkpty@@GLIBC_2.34","getpwnam_r@@GLIBC_2.2.5","getgrgid_r@@GLIBC_2.2.5","openpty@@GLIBC_2.34","fdetach@GLIBC_2.2.5","gai_error@GLIBC_2.2.5","res_send@@GLIBC_2.34","putmsg@GLIBC_2.2.5","fmemopen@GLIBC_2.2.5","forkpty@GLIBC_2.2.5","getpwuid_r@@GLIBC_2.2.5","res_mailok@@GLIBC_2.34","getspnam_r@@GLIBC_2.2.5","quick_exit@@GLIBC_2.24","logwtmp@@GLIBC_2.34","logout@@GLIBC_2.34","fopencookie@@GLIBC_2.2.5","gai_cancel@@GLIBC_2.34","glob64@GLIBC_2.2.5","getgrent_r@@GLIBC_2.2.5","_getopt_internal_r","frexpf128","res_search@@GLIBC_2.34","_nl_select_era_entry","finitef128_do_not_use","copysignf32x","gai_error@@GLIBC_2.34","copysignf32","getmsg@GLIBC_2.2.5","_nl_get_walt_digit","_create_xid","sstk@GLIBC_2.2.5","_nl_cleanup_time","_itoa_word","_nl_unload_domain","_getopt_long_r","getspent_r@@GLIBC_2.2.5","_getopt_long_only_r","_option_is_end","_IO_str_count","_nl_cleanup_ctype","_des_crypt","_getopt_internal","_openchild","re_string_realloc_buffers","context_reuse","hex2bin","x_putint32","x_getpostn","gai_suspend@@GLIBC_2.34","duplicate_node","bin2hex","tr_break@GLIBC_2.2.5","_nl_init_era_entries.part.0","exec_comm","gethostbyname2_r@@GLIBC_2.2.5","_nl_make_l10nflist.localalias","_nl_find_msg","gethostent_r@@GLIBC_2.2.5","start_thread","get_kernel_syms@GLIBC_2.2.5","get_scope","add_prefixlist","match_prefix","in6aicmp","fini","exchange","parse_branch","parse_expression","authdes_nextverf","re_search_internal","gr_map_free","merge_state_with_log","until_short","get_subexp_sub","clean_state_log_if_needed","canon_doc_option","extend_buffers","check_arrival_expand_ecl_sub","check_node_accept_bytes","sub_epsilon_src_nodes","harmless","pmap_rmtcall@GLIBC_2.2.5","merge_state_array","re_acquire_state_context","w_addword","check_dst_limits","check_halt_state_context","context_send_common","utf8_encode.part.0","build_charclass","pop_fail_stack","time_ifunc","match_ctx_clean","re_dfa_add_node","free_charset","build_upper_buffer","re_node_set_add_intersect","free_state","search_cur_bkref_entry","re_node_set_compare","print_and_abort","internal_getgrouplist","clear_once_control","send_vc","shm_open@GLIBC_2.2.5","fstab_init","lio_listio64@@GLIBC_2.34","_nl_init_alt_digit","parse_rule","free_tree","parse_offset","decode_name","argp_hol","x_putbytes","strcspn_ifunc","ext_match","compute_change","ranged_convert","ydhms_diff","name_to_database_index","binary_hnok","memchr_ifunc","get_mnt_entry","end_pattern","str_append","ptrlist_add__","critical_factorization","argp_doc","gethosts","read_alias_file","authnone_validate","ldexpf32","memcmp_ifunc","strrchr_ifunc","strncat_ifunc","strlen_ifunc","gai_suspend@GLIBC_2.2.5","strcpy_ifunc","re_string_context_at","_int_realloc","next_line","sysmalloc","arena_get_retry","arena_get2.part.0","fetch_number","register_state","des_setparity@GLIBC_2.2.5","ptmalloc_init.part.0","process_long_option","internal_fallocate64","build_wcs_upper_buffer","try_file","get_locked_global","key_call_socket","read_conf_file.isra.0","change_sigmask","check_arrival_expand_ecl","resolv_conf_matches","calc_eclosure_iter","arg_bool","duplicate_node_closure","strspn_ifunc","fts_build","prefixcmp","get_nprocs_cpu_online","initshells","fstab_free","add_request_to_runlist","duplicate_tree","tdestroy_recurse","strpbrk_ifunc","peek_token","glob@GLIBC_2.2.5","argp_args_levels.isra.0","strcmp_ifunc","array_add__","x_setpostn","authdes_refresh","fstab_convert","create_token_tree","realpath_stk","authdes_marshal","check_arrival","fts_alloc.isra.0","internal_fnmatch","x_putlong","expand_bkref_cache","msgctl@@GLIBC_2.2.5","pmap_getport@GLIBC_2.2.5","quick_exit@GLIBC_2.10","authnone_verf","get_next_alias","freeres","sock_eq","hol_cousin_cluster_cmp.isra.0","ftw_dir","check_node_accept","decide_maybe_mmap","vtimes_one.part.0","internal_addseverity","build_trtable","adjust_wide_data","getaliasbyname_r@@GLIBC_2.2.5","alloc_perturb","_nl_get_era_entry","scalbnf64x","print_header","set_binding_values.part.0","get_nproc_stat","update_cur_sifted_state","authdes_destroy","walker","strncpy_ifunc","helper_thread","parse_dollars","authnone_create@GLIBC_2.2.5","scalbnf128","tzset_internal","locked_vfxprintf","wcsrchr_ifunc","_Unwind_GetCFA","get_free_list","new_do_write","wait_on_socket","frexpf32","find_derivation","option_alloc","detach_arena.part.0","_int_malloc","buffer_free","sched_setaffinity@@GLIBC_2.3.4","register_file","key_gendes@GLIBC_2.2.5","skip","send_dg","_res_hconf_trim_domain","gethostbyname3_context","authnone_create_once","decrement_at_index.part.0","lower_subexp","scalbnf32","strncmp_ifunc","isinff128_do_not_use","nrl_domainname","freecache","hol_entry_short_iterate","authdes_pk_create@GLIBC_2.2.5","do_system","getpwent_r@@GLIBC_2.2.5","gethostbyname_r@@GLIBC_2.2.5","unwind_stop","create_thread","_IO_wstrn_overflow","token.part.0","wcsncmp_ifunc","find_module_idx","indent_to","hack_digit","open_socket","getttyname_r","_IO_obstack_xsputn","reopen","peek_token_bracket","fts_sort","asctime_internal","maybe_init","alias_compare","fts_stat.isra.0","ecb_crypt@GLIBC_2.2.5","time_syscall","add_module","sift_states_backward","do_release_shlib","do_release_all","new_composite_name","memset_ifunc","x_destroy","free_category","re_compile_internal","msort_with_tmp.part.0","fmemopen@@GLIBC_2.22","free_dfa_content","try_nocreate","strcat_ifunc","_IO_cookie_read","_IO_cookie_seek","space","_IO_cookie_close","parse_reg_exp","fts_palloc","_IO_fopencookie","_IO_str_finish","_nl_expand_alias","copysignf128","_IO_default_seekpos","_int_free","getpmsg@GLIBC_2.2.5","_IO_getwc","build_charclass_op","rtime@GLIBC_2.2.5","unlock","uselib@GLIBC_2.2.5","bdflush@GLIBC_2.2.5","derivation_compare","object_compare","_res_hconf_init","sched_setaffinity@GLIBC_2.3.3","internal_fnwmatch","_argp_input","end_wpattern","ext_wmatch","pcmp","_nl_archive_subfreeres","check_dst_limits_calc_pos_1","_option_is_short","try_dir","argp_default_parser","pmap_getmaps@GLIBC_2.2.5","_seterr_reply@GLIBC_2.2.5","matches_last_entry","parse_backtick","aio_fsync64@@GLIBC_2.34","perror_internal","maybe_script_execute","add_alias2.part.0","authdes_create@GLIBC_2.2.5","munmap_chunk","hst_map_free","_nl_get_alt_digit","re_node_set_init_union","gai_cancel@GLIBC_2.2.5","usage_argful_short_opt","re_acquire_state","copysignf64x","getpublickey@GLIBC_2.2.5","ldexpf64","check_one_fd","re_compile_fastmap_iter","_nl_parse_alt_digit","authdes_getucred@GLIBC_2.2.5","modff128","_Unwind_ForcedUnwind","re_node_set_merge","check_subexp_matching_top","_nl_explode_name","isnanf128_do_not_use","ftw_startup","key_get_conv@GLIBC_2.2.5","_nl_postload_ctype","scalbnf64","re_search_stub","fattach@GLIBC_2.2.5","hol_entry_qcmp","w_addmem","eval_expr_multdiv","cfree@GLIBC_2.2.5"],"binary_path":"/usr/lib64/libc.so.6"},{"type":2,"name":"hdf5","functions":["H5SL_above","H5SL_add","H5SL_below:0x2794b0","H5SL_close:0x27a240","H5SL_count:0x26f830","H5SL_create:0x26f680","H5SL_destroy:0x27a170","H5SL_find:0x278e80","H5SL_first:0x27a020","H5SL_free:0x27a120","H5SL_greater:0x2788a0","H5SL_init:0x26f5c0","H5SL_insert:0x26f840","H5SL_item:0x27a060","H5SL_iterate:0x27a070","H5SL_last:0x27a050","H5SL_less:0x278260","H5SL_next:0x27a030","H5SL_prev:0x27a040","H5SL_release:0x27a0c0","H5SL_remove:0x26f8f0","H5SL_remove_first:0x2776f0","H5SL_search:0x277c10","H5SL_term_package:0x26f600","H5SM__get_index:0x27b480","H5SM__get_mesg_count_test:0x281610","H5SM__list_free:0x27f4f0","H5SM__message_compare:0x2811c0","H5SM__message_decode:0x281500","H5SM__message_encode:0x2813b0","H5SM__table_free:0x27f4b0","H5SM_can_share:0x27b940","H5SM_delete:0x27d490","H5SM_get_fheap_addr:0x27b780","H5SM_get_info:0x27e590","H5SM_get_refcount:0x27ed00","H5SM_ih_size:0x27ff50","H5SM_init:0x27ada0","H5SM_list_debug:0x27f990","H5SM_reconstitute:0x27ece0","H5SM_table_debug:0x27f530","H5SM_try_share:0x27bc00","H5SM_type_shared:0x27b580","H5T__alloc:0x2831b0","H5T__array_create:0x290bf0","H5T__bit_copy:0x2917f0","H5T__bit_dec:0x2928f0","H5T__bit_find:0x2920e0","H5T__bit_get_d:0x291d20","H5T__bit_inc:0x2927d0","H5T__bit_neg:0x292a00","H5T__bit_set:0x291db0","H5T__bit_set_d:0x291d70","H5T__bit_shift:0x291eb0","H5T__commit:0x294900","H5T__commit_anon:0x2950e0","H5T__commit_named:0x293640","H5T__conv_array:0x301480","H5T__conv_b_b:0x2fc5d0","H5T__conv_double_float:0x2f3330","H5T__conv_double_int:0x2ef570","H5T__conv_double_ldouble:0x2f3b30","H5T__conv_double_llong:0x2f1e10","H5T__conv_double_long:0x2f08f0","H5T__conv_double_schar:0x2ece10","H5T__conv_double_short:0x2ee170","H5T__conv_double_uchar:0x2ed7c0","H5T__conv_double_uint:0x2eff20","H5T__conv_double_ullong:0x2f2780","H5T__conv_double_ulong:0x2f1260","H5T__conv_double_ushort:0x2eeb70","H5T__conv_enum:0x2ff6f0","H5T__conv_enum_numeric:0x2ffce0","H5T__conv_f_f:0x2e2430","H5T__conv_f_i:0x2e43e0","H5T__conv_float_double:0x2ec590","H5T__conv_float_int:0x2e86a0","H5T__conv_float_ldouble:0x2ec9c0","H5T__conv_float_llong:0x2eae70","H5T__conv_float_long:0x2e9750","H5T__conv_float_schar:0x2e5fa0","H5T__conv_float_short:0x2e72f0","H5T__conv_float_uchar:0x2e6940","H5T__conv_float_uint:0x2e8ed0","H5T__conv_float_ullong:0x2eb8c0","H5T__conv_float_ulong:0x2ea1a0","H5T__conv_float_ushort:0x2e7cc0","H5T__conv_i_f:0x299b60","H5T__conv_i_i:0x298db0","H5T__conv_int_double:0x2b45f0","H5T__conv_int_float:0x2b3340","H5T__conv_int_ldouble:0x2b5b30","H5T__conv_int_llong:0x2b2900","H5T__conv_int_long:0x2b1ec0","H5T__conv_int_schar:0x2afdc0","H5T__conv_int_short:0x2b0be0","H5T__conv_int_uchar:0x2b04a0","H5T__conv_int_uint:0x2b1a80","H5T__conv_int_ullong:0x2b2d40","H5T__conv_int_ulong:0x2b2300","H5T__conv_int_ushort:0x2b1330","H5T__conv_ldouble_double:0x2fb570","H5T__conv_ldouble_float:0x2fad20","H5T__conv_ldouble_int:0x2f6960","H5T__conv_ldouble_llong:0x2f95a0","H5T__conv_ldouble_long:0x2f7e20","H5T__conv_ldouble_schar:0x2f3f80","H5T__conv_ldouble_short:0x2f5450","H5T__conv_ldouble_uchar:0x2f49e0","H5T__conv_ldouble_uint:0x2f7390","H5T__conv_ldouble_ullong:0x2fa010","H5T__conv_ldouble_ulong:0x2f8890","H5T__conv_ldouble_ushort:0x2f5ea0","H5T__conv_llong_double:0x2d56f0","H5T__conv_llong_float:0x2d3690","H5T__conv_llong_int:0x2d1cc0","H5T__conv_llong_ldouble:0x2d73e0","H5T__conv_llong_long:0x2d2b80","H5T__conv_llong_schar:0x2cff90","H5T__conv_llong_short:0x2d0df0","H5T__conv_llong_uchar:0x2d06a0","H5T__conv_llong_uint:0x2d2450","H5T__conv_llong_ullong:0x2d3220","H5T__conv_llong_ulong:0x2d2da0","H5T__conv_llong_ushort:0x2d1560","H5T__conv_long_double:0x2c3250","H5T__conv_long_float:0x2c11f0","H5T__conv_long_int:0x2bf820","H5T__conv_long_ldouble:0x2c4f40","H5T__conv_long_llong:0x2c0b50","H5T__conv_long_schar:0x2bdaf0","H5T__conv_long_short:0x2be950","H5T__conv_long_uchar:0x2be200","H5T__conv_long_uint:0x2bffb0","H5T__conv_long_ullong:0x2c0d70","H5T__conv_long_ulong:0x2c06e0","H5T__conv_long_ushort:0x2bf0c0","H5T__conv_noop:0x297600","H5T__conv_order:0x297670","H5T__conv_order_opt:0x297900","H5T__conv_ref:0x2fe7c0","H5T__conv_s_s:0x2fbdc0","H5T__conv_schar_double:0x29e6c0","H5T__conv_schar_float:0x29dc80","H5T__conv_schar_int:0x29be30","H5T__conv_schar_ldouble:0x29f100","H5T__conv_schar_llong:0x29d250","H5T__conv_schar_long:0x29c820","H5T__conv_schar_short:0x29b400","H5T__conv_schar_uchar:0x29afe0","H5T__conv_schar_uint:0x29c260","H5T__conv_schar_ullong:0x29d6a0","H5T__conv_schar_ulong:0x29cc70","H5T__conv_schar_ushort:0x29b850","H5T__conv_short_double:0x2a8260","H5T__conv_short_float:0x2a71e0","H5T__conv_short_int:0x2a5340","H5T__conv_short_ldouble:0x2a92e0","H5T__conv_short_llong:0x2a6790","H5T__conv_short_long:0x2a5d40","H5T__conv_short_schar:0x2a40a0","H5T__conv_short_uchar:0x2a47b0","H5T__conv_short_uint:0x2a5770","H5T__conv_short_ullong:0x2a6be0","H5T__conv_short_ulong:0x2a6190","H5T__conv_short_ushort:0x2a4ef0","H5T__conv_struct:0x2fd780","H5T__conv_struct_opt:0x2fdf30","H5T__conv_struct_subset:0x2fd770","H5T__conv_uchar_double:0x2a2bf0","H5T__conv_uchar_float:0x2a21b0","H5T__conv_uchar_int:0x2a0850","H5T__conv_uchar_ldouble:0x2a3630","H5T__conv_uchar_llong:0x2a1930","H5T__conv_uchar_long:0x2a10b0","H5T__conv_uchar_schar:0x29fb80","H5T__conv_uchar_short:0x29ffd0","H5T__conv_uchar_uint:0x2a0c80","H5T__conv_uchar_ullong:0x2a1d70","H5T__conv_uchar_ulong:0x2a14f0","H5T__conv_uchar_ushort:0x2a0410","H5T__conv_uint_double:0x2bb070","H5T__conv_uint_float:0x2b9e40","H5T__conv_uint_int:0x2b88e0","H5T__conv_uint_ldouble:0x2bc5a0","H5T__conv_uint_llong:0x2b95c0","H5T__conv_uint_long:0x2b8d40","H5T__conv_uint_schar:0x2b7080","H5T__conv_uint_short:0x2b7c90","H5T__conv_uint_uchar:0x2b7670","H5T__conv_uint_ullong:0x2b9a00","H5T__conv_uint_ulong:0x2b9180","H5T__conv_uint_ushort:0x2b82b0","H5T__conv_ullong_double:0x2de570","H5T__conv_ullong_float:0x2dc420","H5T__conv_ullong_int:0x2dacb0","H5T__conv_ullong_ldouble:0x2e0360","H5T__conv_ullong_llong:0x2dbf80","H5T__conv_ullong_long:0x2db880","H5T__conv_ullong_schar:0x2d9430","H5T__conv_ullong_short:0x2da050","H5T__conv_ullong_uchar:0x2d9a40","H5T__conv_ullong_uint:0x2db290","H5T__conv_ullong_ulong:0x2dbd30","H5T__conv_ullong_ushort:0x2da680","H5T__conv_ulong_double:0x2cc0d0","H5T__conv_ulong_float:0x2c9f80","H5T__conv_ulong_int:0x2c8810","H5T__conv_ulong_ldouble:0x2cdec0","H5T__conv_ulong_llong:0x2c9880","H5T__conv_ulong_long:0x2c93e0","H5T__conv_ulong_schar:0x2c6f90","H5T__conv_ulong_short:0x2c7bb0","H5T__conv_ulong_uchar:0x2c75a0","H5T__conv_ulong_uint:0x2c8df0","H5T__conv_ulong_ullong:0x2c9d30","H5T__conv_ulong_ushort:0x2c81e0","H5T__conv_ushort_double:0x2add40","H5T__conv_ushort_float:0x2acd10","H5T__conv_ushort_int:0x2ab3b0","H5T__conv_ushort_ldouble:0x2aed70","H5T__conv_ushort_llong:0x2ac490","H5T__conv_ushort_long:0x2abc10","H5T__conv_ushort_schar:0x2aa310","H5T__conv_ushort_short:0x2aaf10","H5T__conv_ushort_uchar:0x2aa910","H5T__conv_ushort_uint:0x2ab7e0","H5T__conv_ushort_ullong:0x2ac8d0","H5T__conv_ushort_ulong:0x2ac050","H5T__conv_vlen:0x300080","H5T__create:0x28abf0","H5T__enum_create:0x302dd0","H5T__enum_insert:0x303040","H5T__free:0x283af0","H5T__get_array_dims:0x2911b0","H5T__get_array_ndims:0x291050","H5T__get_create_plist:0x294720","H5T__get_member_name:0x3040c0","H5T__get_member_size:0x296610","H5T__get_member_value:0x303450","H5T__get_path_table_npaths:0x290ba0","H5T__init_native_float_types:0x306040","H5T__init_native_internal:0x309e00","H5T__insert:0x2967f0","H5T__open_name:0x295770","H5T__print_path_stats:0x302060","H5T__ref_reclaim:0x30d890","H5T__ref_set_loc:0x30d430","H5T__reverse_order:0x296ef0","H5T__sort_name:0x3047c0","H5T__sort_value:0x304520","H5T__update_packed:0x296780","H5T__upgrade_version:0x2909b0","H5T__visit:0x30dc90","H5T__vlen_create:0x30e520","H5T__vlen_reclaim:0x30ea90","H5T__vlen_set_loc:0x30e820","H5T_already_vol_managed:0x295cf0","H5T_close:0x283d10","H5T_close_real:0x2832c0","H5T_cmp:0x2840a0","H5T_construct_datatype:0x295930","H5T_convert:0x285ab0","H5T_convert_committed_datatype:0x285fa0","H5T_convert_with_ctx:0x2859d0","H5T_copy:0x286f50","H5T_copy_reopen:0x28a200","H5T_debug:0x302070","H5T_decode:0x2864e0","H5T_detect_class:0x2825a0","H5T_encode:0x282cc0","H5T_get_actual_type:0x295b00","H5T_get_class:0x282450","H5T_get_force_conv:0x296ee0","H5T_get_member_offset:0x296140","H5T_get_member_type:0x2965a0","H5T_get_named_type:0x295af0","H5T_get_nmembers:0x303f20","H5T_get_offset:0x30a280","H5T_get_order:0x30ae70","H5T_get_precision:0x30bd20","H5T_get_ref_type:0x2860e0","H5T_get_sign:0x304aa0","H5T_get_size:0x284090","H5T_get_super:0x289e80","H5T_init:0x28b230","H5T_invoke_vol_optional:0x295d00","H5T_is_immutable:0x285f60","H5T_is_named:0x285f70","H5T_is_numeric_with_unusual_unused_bits:0x290bb0","H5T_is_relocatable:0x2908a0","H5T_is_sensible:0x286100","H5T_is_variable_str:0x282800","H5T_is_vl_storage:0x2908e0","H5T_link:0x293ce0","H5T_lock:0x282fc0","H5T_nameof:0x285ed0","H5T_noop_conv:0x285880","H5T_oloc:0x285e40","H5T_open:0x295190","H5T_own_vol_obj:0x290b20","H5T_patch_file:0x290ae0","H5T_patch_vlen_file:0x290b00","H5T_path_bkg:0x2859c0","H5T_path_compound_subset:0x285990","H5T_path_find:0x2885b0","H5T_path_noop:0x285840","H5T_reclaim:0x296e40","H5T_reclaim_cb:0x296db0","H5T_restore_refresh_state:0x295c10","H5T_save_refresh_state:0x295b20","H5T_set_loc:0x286130","H5T_set_version:0x290a20","H5T_term_package:0x281fa0","H5T_top_term_package:0x283500","H5T_unregister:0x284d00","H5T_update_shared:0x2948d0","H5T_vlen_reclaim_elmt:0x30ed60","H5S__extent_copy_real:0x236cc0","H5S__extent_release:0x236670","H5S__get_diminfo_status_test:0x26cc70","H5S__get_rebuild_status_test:0x26cbe0","H5S__hyper_get_op_gen:0x249670","H5S__hyper_project_intersection:0x255f70","H5S__hyper_rebuild:0x250d80","H5S__internal_consistency_test:0x26ccd0","H5S__modify_select:0x25e1a0","H5S__sel_iter_close_cb:0x26c030","H5S__verify_offsets:0x26cd90","Nflock:0x61f30","Pflock:0x61ee0"]},{"type":1,"name":"bio","functions":["bio_get_last_bvec","bio_will_gap","bio_integrity_init"]},{"type":3,"name":"python","functions":[],"binary_path":"/usr/lib64/libpython3.9.so","provider":"python"},{"type":1,"name":"xfs","functions":[]},{"type":1,"name":"ext4","functions":[]},{"type":1,"name":"iomap","functions":[]},{"type":1,"name":"iov","functions":[]},{"type":2,"name":"test_posix","functions":[],"binary_path":"/home/haridev/datacrumbs/build/bin/df_tracer_test"},{"type":1,"name":"os_page_cache","functions":[]},{"type":1,"name":"shm","functions":["shmem_init"]},{"type":1,"name":"fscache","functions":["fscache_update_aux"]},{"type":2,"name":"ior","functions":[],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/ior-3.3.0-ip47j26fw7xxfftdzjvy2h36phgcuypv/bin/ior","include_offsets":false},{"type":1,"name":"lustre","functions":[]},{"type":1,"name":"osc","functions":["osc_queue_async_io","osc_quota_chkdq"]},{"type":1,"name":"ptlrpc","functions":["ldlm_lock_decref_internal","ldlm_lock_decref","ldlm_lock_addref_internal_nolock","ldlm_lock_match_with_skip","ldlm_lock_addref"]}] diff --git a/etc/datacrumbs/data/probes-haridev-lead.json b/etc/datacrumbs/data/probes-haridev-lead.json index 66ddfbe3..4f67dd3c 100644 --- a/etc/datacrumbs/data/probes-haridev-lead.json +++ b/etc/datacrumbs/data/probes-haridev-lead.json @@ -1 +1 @@ -[{"type":4,"name":"custom1","functions":["openat","read","write","close","fallocate","fdatasync","flock","fsync","ftruncate","lseek","pread64","preadv","preadv2","pwrite64","pwritev","pwritev2","readahead","readv","writev","open","openat2"],"bpf_path":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2},{"type":0,"name":"sys","functions":["access","chdir","close","close_range","copy_file_range","creat","dup","dup2","dup3","eventfd2","exit","exit_group","faccessat","faccessat2","fadvise64","fadvise64_64","fallocate","fanotify_init","fanotify_mark","fchdir","fchmod","fchmodat","fchmodat2","fchown","fchownat","fcntl","fdatasync","fgetxattr","flistxattr","flock","fremovexattr","fsetxattr","fstat","fstatfs","fstatfs64","fsync","ftruncate","getcwd","getdents","getxattr","inotify_add_watch","inotify_init","inotify_init1","inotify_rm_watch","io_cancel","io_destroy","io_setup","io_submit","io_uring_enter","io_uring_register","io_uring_setup","lgetxattr","link","linkat","listxattr","llistxattr","llseek","lremovexattr","lseek","lsetxattr","lstat","madvise","mbind","migrate_pages","mincore","mkdir","mkdirat","mknod","mknodat","mlock","mlockall","mmap_pgoff","move_pages","mprotect","mremap","msync","munlock","munlockall","munmap","newfstat","newlstat","newstat","open","openat","openat2","pidfd_open","pipe","pread64","preadv","preadv2","process_madvise","process_mrelease","process_vm_readv","process_vm_writev","pwrite64","pwritev","pwritev2","read","readlink","readlinkat","readv","remap_file_pages","removexattr","rename","renameat","rmdir","sendfile64","setxattr","stat","statfs","statfs64","statx","symlink","symlinkat","sync","sync_file_range","sync_file_range2","syncfs","sysfs","truncate","unlink","unlinkat","ustat","vfork","write","writev"]},{"type":2,"name":"libc","functions":["__GI___fork","__GI___register_atfork","__GI___vfork","__GI_forkpty","__dyn_pthread_atfork","__fork","__forkpty","__libc_fork","__libc_unwind_link_after_fork","__libc_vfork","__malloc_fork_lock_parent","__malloc_fork_unlock_child","__malloc_fork_unlock_parent","__mq_notify_fork_subprocess","__nss_database_fork_prepare_parent","__nss_database_fork_subprocess","__register_atfork","__run_postfork_handlers","__run_prefork_handlers","__timer_fork_subprocess","__unregister_atfork","__vfork","fork","pthread_atfork@GLIBC_2.2.5","vfork"],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false},{"type":2,"name":"hdf5","functions":["H5AC__broadcast_clean_list_cb","H5AC__check_if_write_permitted","H5AC__copy_candidate_list_to_buffer.constprop.0","H5AC__copy_candidate_list_to_buffer_cb","H5AC__flush_entries","H5AC__log_cleaned_entry","H5AC__log_deleted_entry","H5AC__log_dirtied_entry","H5AC__log_flushed_entry","H5AC__log_inserted_entry","H5AC__log_moved_entry","H5AC__propagate_flushed_and_still_clean_entries_list","H5AC__proxy_entry_add_child_cb","H5AC__proxy_entry_free_icr","H5AC__proxy_entry_image_len","H5AC__proxy_entry_notify","H5AC__proxy_entry_remove_child_cb","H5AC__proxy_entry_serialize","H5AC__receive_haddr_list","H5AC__run_sync_point","H5AC__set_sync_point_done_callback","H5AC__set_write_done_callback","H5AC_add_candidate","H5AC_cache_image_pending","H5AC_cork","H5AC_create","H5AC_create_flush_dependency","H5AC_dest","H5AC_destroy_flush_dependency","H5AC_evict","H5AC_evict_tagged_metadata","H5AC_expunge_entry","H5AC_expunge_tag_type_metadata","H5AC_flush","H5AC_flush_tagged_metadata","H5AC_get_cache_auto_resize_config","H5AC_get_cache_flush_in_progress","H5AC_get_cache_hit_rate","H5AC_get_cache_size","H5AC_get_entry_ring","H5AC_get_entry_status","H5AC_get_mdc_image_info","H5AC_get_tag","H5AC_ignore_tags","H5AC_init","H5AC_insert_entry","H5AC_load_cache_image_on_next_protect","H5AC_mark_entry_clean","H5AC_mark_entry_dirty","H5AC_mark_entry_serialized","H5AC_mark_entry_unserialized","H5AC_move_entry","H5AC_pin_protected_entry","H5AC_prep_for_file_close","H5AC_prep_for_file_flush","H5AC_protect","H5AC_proxy_entry_add_child","H5AC_proxy_entry_add_parent","H5AC_proxy_entry_create","H5AC_proxy_entry_dest","H5AC_proxy_entry_remove_child","H5AC_proxy_entry_remove_parent","H5AC_remove_entry","H5AC_reset_cache_hit_rate_stats","H5AC_resize_entry","H5AC_retag_copied_metadata","H5AC_secure_from_file_flush","H5AC_set_cache_auto_resize_config","H5AC_set_ring","H5AC_stats","H5AC_tag","H5AC_term_package","H5AC_unpin_entry","H5AC_unprotect","H5AC_unsettle_entry_ring","H5AC_unsettle_ring","H5AC_validate_cache_image_config","H5AC_validate_config","H5A__attr_cmp_corder_dec","H5A__attr_cmp_corder_inc","H5A__attr_cmp_name_dec","H5A__attr_cmp_name_inc","H5A__attr_copy_file","H5A__attr_iterate_table","H5A__attr_post_copy_file","H5A__attr_release_table","H5A__close","H5A__close_cb","H5A__compact_build_table","H5A__compact_build_table_cb","H5A__copy","H5A__create","H5A__create_api_common","H5A__create_by_name","H5A__create_by_name_api_common","H5A__delete_by_idx","H5A__delete_by_name","H5A__dense_btree2_corder_compare","H5A__dense_btree2_corder_debug","H5A__dense_btree2_corder_decode","H5A__dense_btree2_corder_encode","H5A__dense_btree2_corder_store","H5A__dense_btree2_name_compare","H5A__dense_btree2_name_debug","H5A__dense_btree2_name_decode","H5A__dense_btree2_name_encode","H5A__dense_btree2_name_store","H5A__dense_build_table","H5A__dense_build_table_cb","H5A__dense_copy_fh_cb","H5A__dense_create","H5A__dense_delete","H5A__dense_delete_bt2_cb","H5A__dense_exists","H5A__dense_fh_name_cmp","H5A__dense_fnd_cb","H5A__dense_insert","H5A__dense_iterate","H5A__dense_iterate_bt2_cb","H5A__dense_open","H5A__dense_post_copy_file_all","H5A__dense_post_copy_file_cb","H5A__dense_remove","H5A__dense_remove_bt2_cb","H5A__dense_remove_by_idx","H5A__dense_remove_by_idx_bt2_cb","H5A__dense_rename","H5A__dense_write","H5A__dense_write_bt2_cb","H5A__dense_write_bt2_cb2","H5A__exists_by_name","H5A__get_ainfo","H5A__get_create_plist","H5A__get_info","H5A__get_name","H5A__get_shared_rc_test","H5A__get_type","H5A__is_shared_test","H5A__iterate","H5A__iterate_old","H5A__open","H5A__open_by_idx","H5A__open_by_name","H5A__open_common:0x6a920","H5A__open_common:0x76bf0","H5A__read","H5A__rename_by_name","H5A__set_version","H5A__shared_free","H5A__write","H5A_get_space","H5A_init","H5A_nameof","H5A_oloc","H5A_term_package","H5A_top_term_package","H5A_type","H5Aclose","H5Aclose_async","H5Acreate1","H5Acreate2","H5Acreate_async","H5Acreate_by_name","H5Acreate_by_name_async","H5Adelete","H5Adelete_by_idx","H5Adelete_by_name","H5Aexists","H5Aexists_async","H5Aexists_by_name","H5Aexists_by_name_async","H5Aget_create_plist","H5Aget_info","H5Aget_info_by_idx","H5Aget_info_by_name","H5Aget_name","H5Aget_name_by_idx","H5Aget_num_attrs","H5Aget_space","H5Aget_storage_size","H5Aget_type","H5Aiterate1","H5Aiterate2","H5Aiterate_by_name","H5Aopen","H5Aopen_async","H5Aopen_by_idx","H5Aopen_by_idx_async","H5Aopen_by_name","H5Aopen_by_name_async","H5Aopen_idx","H5Aopen_name","H5Aread","H5Aread_async","H5Arename","H5Arename_async","H5Arename_by_name","H5Arename_by_name_async","H5Awrite","H5Awrite_async","H5B2__cache_hdr_deserialize","H5B2__cache_hdr_free_icr","H5B2__cache_hdr_get_initial_load_size","H5B2__cache_hdr_image_len","H5B2__cache_hdr_notify","H5B2__cache_hdr_serialize","H5B2__cache_hdr_verify_chksum","H5B2__cache_int_deserialize","H5B2__cache_int_free_icr","H5B2__cache_int_get_initial_load_size","H5B2__cache_int_image_len","H5B2__cache_int_notify","H5B2__cache_int_serialize","H5B2__cache_int_verify_chksum","H5B2__cache_leaf_deserialize","H5B2__cache_leaf_free_icr","H5B2__cache_leaf_get_initial_load_size","H5B2__cache_leaf_image_len","H5B2__cache_leaf_notify","H5B2__cache_leaf_serialize","H5B2__cache_leaf_verify_chksum","H5B2__create_flush_depend","H5B2__create_internal","H5B2__create_leaf","H5B2__delete_node","H5B2__delete_node.localalias","H5B2__destroy_flush_depend","H5B2__get_node_depth_test","H5B2__get_node_info_test","H5B2__get_root_addr_test","H5B2__hdr_alloc","H5B2__hdr_create","H5B2__hdr_debug","H5B2__hdr_decr","H5B2__hdr_delete","H5B2__hdr_dirty","H5B2__hdr_free","H5B2__hdr_fuse_decr","H5B2__hdr_fuse_incr","H5B2__hdr_incr","H5B2__hdr_init","H5B2__hdr_protect","H5B2__hdr_unprotect","H5B2__insert","H5B2__insert_internal","H5B2__insert_internal.localalias","H5B2__insert_leaf","H5B2__int_debug","H5B2__internal_free","H5B2__iterate_node","H5B2__iterate_node.localalias","H5B2__leaf_debug","H5B2__leaf_free","H5B2__locate_record","H5B2__merge2","H5B2__merge3","H5B2__neighbor_internal","H5B2__neighbor_internal.localalias","H5B2__neighbor_leaf","H5B2__node_size","H5B2__node_size.localalias","H5B2__protect_internal","H5B2__protect_leaf","H5B2__redistribute2","H5B2__redistribute3","H5B2__remove_internal","H5B2__remove_internal.localalias","H5B2__remove_internal_by_idx","H5B2__remove_internal_by_idx.localalias","H5B2__remove_leaf","H5B2__remove_leaf_by_idx","H5B2__shadow_internal","H5B2__shadow_leaf","H5B2__split1","H5B2__split_root","H5B2__swap_leaf","H5B2__test2_compare","H5B2__test2_debug","H5B2__test2_decode","H5B2__test2_encode","H5B2__test2_store","H5B2__test_compare","H5B2__test_crt_context","H5B2__test_debug","H5B2__test_decode","H5B2__test_dst_context","H5B2__test_encode","H5B2__test_store","H5B2__update_flush_depend","H5B2__update_internal","H5B2__update_internal.localalias","H5B2__update_leaf","H5B2_close","H5B2_create","H5B2_delete","H5B2_depend","H5B2_find","H5B2_get_addr","H5B2_get_nrec","H5B2_index","H5B2_insert","H5B2_iterate","H5B2_modify","H5B2_neighbor","H5B2_open","H5B2_patch_file","H5B2_remove","H5B2_remove_by_idx","H5B2_size","H5B2_stat_info","H5B2_update","H5B__cache_deserialize","H5B__cache_free_icr","H5B__cache_get_initial_load_size","H5B__cache_image_len","H5B__cache_serialize","H5B__get_info_helper","H5B__insert_helper","H5B__iterate_helper","H5B__node_dest","H5B__remove_helper","H5B__verify_structure","H5B_create","H5B_debug","H5B_delete","H5B_delete.localalias","H5B_find","H5B_find.localalias","H5B_get_info","H5B_insert","H5B_iterate","H5B_remove","H5B_shared_free","H5B_shared_new","H5B_valid","H5CX__pop_common","H5CX_free_state","H5CX_get_actual_selection_io_mode","H5CX_get_bkgr_buf","H5CX_get_bkgr_buf_type","H5CX_get_btree_split_ratios","H5CX_get_coll_metadata_read","H5CX_get_data_transform","H5CX_get_dset_min_ohdr_flag","H5CX_get_dt_conv_cb","H5CX_get_dxpl","H5CX_get_encoding","H5CX_get_err_detect","H5CX_get_ext_file_prefix","H5CX_get_filter_cb","H5CX_get_intermediate_group","H5CX_get_io_xfer_mode","H5CX_get_lapl","H5CX_get_libver_bounds","H5CX_get_max_temp_buf","H5CX_get_modify_write_buf","H5CX_get_mpi_coll_datatypes","H5CX_get_mpi_file_flushing","H5CX_get_mpio_chunk_opt_mode","H5CX_get_mpio_chunk_opt_num","H5CX_get_mpio_chunk_opt_ratio","H5CX_get_mpio_coll_opt","H5CX_get_mpio_global_no_coll_cause","H5CX_get_mpio_local_no_coll_cause","H5CX_get_mpio_rank0_bcast","H5CX_get_nlinks","H5CX_get_no_selection_io_cause","H5CX_get_ohdr_flags","H5CX_get_ring","H5CX_get_selection_io_mode","H5CX_get_tag","H5CX_get_tconv_buf","H5CX_get_vds_prefix","H5CX_get_vec_size","H5CX_get_vlen_alloc_info","H5CX_get_vol_connector_prop","H5CX_get_vol_wrap_ctx","H5CX_init","H5CX_is_def_dxpl","H5CX_pop","H5CX_push","H5CX_push_special","H5CX_pushed","H5CX_restore_state","H5CX_retrieve_state","H5CX_set_actual_selection_io_mode","H5CX_set_apl","H5CX_set_coll_metadata_read","H5CX_set_dcpl","H5CX_set_dxpl","H5CX_set_io_xfer_mode","H5CX_set_lapl","H5CX_set_lcpl","H5CX_set_libver_bounds","H5CX_set_loc","H5CX_set_mpi_coll_datatypes","H5CX_set_mpi_file_flushing","H5CX_set_mpio_actual_chunk_opt","H5CX_set_mpio_actual_io_mode","H5CX_set_mpio_coll_opt","H5CX_set_mpio_global_no_coll_cause","H5CX_set_mpio_local_no_coll_cause","H5CX_set_mpio_rank0_bcast","H5CX_set_nlinks","H5CX_set_no_selection_io_cause","H5CX_set_ring","H5CX_set_tag","H5CX_set_vlen_alloc_info","H5CX_set_vol_connector_prop","H5CX_set_vol_wrap_ctx","H5CX_term_package","H5C__auto_adjust_cache_size","H5C__autoadjust__ageout__remove_all_markers","H5C__autoadjust__ageout__remove_excess_markers","H5C__epoch_marker_deserialize","H5C__epoch_marker_free_icr","H5C__epoch_marker_fsf_size","H5C__epoch_marker_get_final_load_size","H5C__epoch_marker_get_initial_load_size","H5C__epoch_marker_image_len","H5C__epoch_marker_notify","H5C__epoch_marker_pre_serialize","H5C__epoch_marker_serialize","H5C__epoch_marker_verify_chksum","H5C__evict_tagged_entries_cb","H5C__expunge_tag_type_metadata_cb","H5C__flash_increase_cache_size","H5C__flush_invalidate_cache","H5C__flush_ring","H5C__flush_single_entry","H5C__flush_tagged_entries_cb","H5C__generate_cache_image","H5C__generate_image","H5C__get_cache_image_config","H5C__image_entry_cmp","H5C__image_stats","H5C__iter_tagged_entries","H5C__iter_tagged_entries_real","H5C__json_tear_down_logging","H5C__json_write_create_cache_log_msg","H5C__json_write_create_fd_log_msg","H5C__json_write_destroy_cache_log_msg","H5C__json_write_destroy_fd_log_msg","H5C__json_write_evict_cache_log_msg","H5C__json_write_expunge_entry_log_msg","H5C__json_write_flush_cache_log_msg","H5C__json_write_insert_entry_log_msg","H5C__json_write_mark_entry_clean_log_msg","H5C__json_write_mark_entry_dirty_log_msg","H5C__json_write_mark_serialized_entry_log_msg","H5C__json_write_mark_unserialized_entry_log_msg","H5C__json_write_move_entry_log_msg","H5C__json_write_pin_entry_log_msg","H5C__json_write_protect_entry_log_msg","H5C__json_write_remove_entry_log_msg","H5C__json_write_resize_entry_log_msg","H5C__json_write_set_cache_config_log_msg","H5C__json_write_start_log_msg","H5C__json_write_stop_log_msg","H5C__json_write_unpin_entry_log_msg","H5C__json_write_unprotect_entry_log_msg","H5C__load_cache_image","H5C__log_json_set_up","H5C__log_trace_set_up","H5C__make_space_in_cache","H5C__pin_entry_from_client.part.0","H5C__prefetched_entry_deserialize","H5C__prefetched_entry_free_icr","H5C__prefetched_entry_fsf_size","H5C__prefetched_entry_get_final_load_size","H5C__prefetched_entry_get_initial_load_size","H5C__prefetched_entry_image_len","H5C__prefetched_entry_notify","H5C__prefetched_entry_pre_serialize","H5C__prefetched_entry_serialize","H5C__prefetched_entry_verify_chksum","H5C__prep_for_file_close__compute_fd_heights_real","H5C__prep_image_for_file_close","H5C__serialize_cache","H5C__serialize_single_entry","H5C__tag_entry","H5C__trace_tear_down_logging","H5C__trace_write_create_fd_log_msg","H5C__trace_write_destroy_fd_log_msg","H5C__trace_write_expunge_entry_log_msg","H5C__trace_write_flush_cache_log_msg","H5C__trace_write_insert_entry_log_msg","H5C__trace_write_mark_entry_clean_log_msg","H5C__trace_write_mark_entry_dirty_log_msg","H5C__trace_write_mark_serialized_entry_log_msg","H5C__trace_write_mark_unserialized_entry_log_msg","H5C__trace_write_move_entry_log_msg","H5C__trace_write_pin_entry_log_msg","H5C__trace_write_protect_entry_log_msg","H5C__trace_write_remove_entry_log_msg","H5C__trace_write_resize_entry_log_msg","H5C__trace_write_set_cache_config_log_msg","H5C__trace_write_unpin_entry_log_msg","H5C__trace_write_unprotect_entry_log_msg","H5C__unpin_entry_from_client","H5C__untag_entry","H5C__verify_cork_tag_test","H5C__verify_cork_tag_test_cb","H5C__verify_len_eoa.isra.0","H5C_apply_candidate_list","H5C_cache_image_pending","H5C_cache_image_status","H5C_clear_coll_entries","H5C_construct_candidate_list__clean_cache","H5C_construct_candidate_list__min_clean","H5C_cork","H5C_create","H5C_create_flush_dependency","H5C_def_auto_resize_rpt_fcn","H5C_dest","H5C_destroy_flush_dependency","H5C_evict","H5C_evict_tagged_entries","H5C_expunge_entry","H5C_expunge_tag_type_metadata","H5C_flush_cache","H5C_flush_tagged_entries","H5C_flush_to_min_clean","H5C_get_aux_ptr","H5C_get_cache_auto_resize_config","H5C_get_cache_flush_in_progress","H5C_get_cache_hit_rate","H5C_get_cache_size","H5C_get_entry_ring","H5C_get_entry_status","H5C_get_evictions_enabled","H5C_get_ignore_tags","H5C_get_logging_status","H5C_get_mdc_image_info","H5C_get_num_objs_corked","H5C_get_tag","H5C_ignore_tags","H5C_insert_entry","H5C_load_cache_image_on_next_protect","H5C_log_set_up","H5C_log_tear_down","H5C_log_write_create_cache_msg","H5C_log_write_create_fd_msg","H5C_log_write_destroy_cache_msg","H5C_log_write_destroy_fd_msg","H5C_log_write_evict_cache_msg","H5C_log_write_expunge_entry_msg","H5C_log_write_flush_cache_msg","H5C_log_write_insert_entry_msg","H5C_log_write_mark_entry_clean_msg","H5C_log_write_mark_entry_dirty_msg","H5C_log_write_mark_serialized_entry_msg","H5C_log_write_mark_unserialized_entry_msg","H5C_log_write_move_entry_msg","H5C_log_write_pin_entry_msg","H5C_log_write_protect_entry_msg","H5C_log_write_remove_entry_msg","H5C_log_write_resize_entry_msg","H5C_log_write_set_cache_config_msg","H5C_log_write_unpin_entry_msg","H5C_log_write_unprotect_entry_msg","H5C_mark_entries_as_clean","H5C_mark_entry_clean","H5C_mark_entry_dirty","H5C_mark_entry_serialized","H5C_mark_entry_unserialized","H5C_move_entry","H5C_pin_protected_entry","H5C_prep_for_file_close","H5C_protect","H5C_remove_entry","H5C_reset_cache_hit_rate_stats","H5C_resize_entry","H5C_retag_entries","H5C_set_cache_auto_resize_config","H5C_set_cache_image_config","H5C_set_evictions_enabled","H5C_set_prefix","H5C_set_slist_enabled","H5C_start_logging","H5C_stats","H5C_stats__reset","H5C_stop_logging","H5C_unpin_entry","H5C_unprotect","H5C_unsettle_entry_ring","H5C_unsettle_ring","H5C_validate_cache_image_config","H5C_validate_resize_config","H5D__alloc_storage","H5D__append_flush_setup.part.0","H5D__bt2_compare","H5D__bt2_crt_context","H5D__bt2_dst_context","H5D__bt2_filt_debug","H5D__bt2_filt_decode","H5D__bt2_filt_encode","H5D__bt2_found_cb","H5D__bt2_idx_close","H5D__bt2_idx_copy_setup","H5D__bt2_idx_copy_shutdown","H5D__bt2_idx_create","H5D__bt2_idx_delete","H5D__bt2_idx_dest","H5D__bt2_idx_dump","H5D__bt2_idx_get_addr","H5D__bt2_idx_init","H5D__bt2_idx_insert","H5D__bt2_idx_is_open","H5D__bt2_idx_is_space_alloc","H5D__bt2_idx_iterate","H5D__bt2_idx_iterate_cb","H5D__bt2_idx_load_metadata","H5D__bt2_idx_open","H5D__bt2_idx_remove","H5D__bt2_idx_reset","H5D__bt2_idx_size","H5D__bt2_mod_cb","H5D__bt2_remove_cb","H5D__bt2_store","H5D__bt2_unfilt_debug","H5D__bt2_unfilt_decode","H5D__bt2_unfilt_encode","H5D__btree2_idx_depend","H5D__btree_cmp2","H5D__btree_cmp3","H5D__btree_debug_key","H5D__btree_decode_key","H5D__btree_encode_key","H5D__btree_found","H5D__btree_get_shared","H5D__btree_idx_close","H5D__btree_idx_copy_setup","H5D__btree_idx_copy_shutdown","H5D__btree_idx_create","H5D__btree_idx_delete","H5D__btree_idx_dest","H5D__btree_idx_dump","H5D__btree_idx_get_addr","H5D__btree_idx_init","H5D__btree_idx_insert","H5D__btree_idx_is_open","H5D__btree_idx_is_space_alloc","H5D__btree_idx_iterate","H5D__btree_idx_iterate_cb","H5D__btree_idx_load_metadata","H5D__btree_idx_open","H5D__btree_idx_remove","H5D__btree_idx_reset","H5D__btree_idx_size","H5D__btree_insert","H5D__btree_new_node","H5D__btree_remove","H5D__btree_shared_create","H5D__btree_shared_free","H5D__build_file_prefix.isra.0","H5D__cache_dataspace_info","H5D__chunk_addrmap","H5D__chunk_addrmap_cb","H5D__chunk_allocate","H5D__chunk_allocated","H5D__chunk_allocated_cb","H5D__chunk_bh_info","H5D__chunk_cache_evict","H5D__chunk_cache_evict.constprop.0","H5D__chunk_cacheable","H5D__chunk_cmp_coll_fill_info","H5D__chunk_construct","H5D__chunk_copy","H5D__chunk_copy_cb","H5D__chunk_create","H5D__chunk_delete","H5D__chunk_dest","H5D__chunk_direct_read","H5D__chunk_direct_write","H5D__chunk_dump_index","H5D__chunk_dump_index_cb","H5D__chunk_file_alloc","H5D__chunk_flush","H5D__chunk_flush_entry","H5D__chunk_flush_entry.constprop.0","H5D__chunk_format_convert","H5D__chunk_format_convert_cb","H5D__chunk_get_offset_copy","H5D__chunk_index_empty","H5D__chunk_index_empty_cb","H5D__chunk_init","H5D__chunk_io_init","H5D__chunk_io_term","H5D__chunk_is_data_cached","H5D__chunk_is_partial_edge_chunk","H5D__chunk_is_space_alloc","H5D__chunk_iter","H5D__chunk_iter_cb","H5D__chunk_lock.constprop.0","H5D__chunk_lookup","H5D__chunk_mdio_init","H5D__chunk_mem_alloc","H5D__chunk_mem_free","H5D__chunk_mem_realloc","H5D__chunk_mem_xfree","H5D__chunk_prune_by_extent","H5D__chunk_read","H5D__chunk_set_info","H5D__chunk_set_info_real","H5D__chunk_set_sizes","H5D__chunk_unlock.constprop.0","H5D__chunk_update_cache","H5D__chunk_update_old_edge_chunks","H5D__chunk_write","H5D__close_cb","H5D__cmp_chunk_redistribute_info","H5D__cmp_chunk_redistribute_info_orig_owner","H5D__cmp_filtered_collective_io_info_entry","H5D__cmp_piece_addr","H5D__collective_read","H5D__collective_write","H5D__compact_construct","H5D__compact_copy","H5D__compact_dest","H5D__compact_fill","H5D__compact_flush","H5D__compact_init","H5D__compact_io_init","H5D__compact_iovv_memmanage_cb","H5D__compact_is_space_alloc","H5D__compact_readvv","H5D__compact_writevv","H5D__compound_opt_read","H5D__contig_alloc","H5D__contig_check","H5D__contig_construct","H5D__contig_copy","H5D__contig_delete","H5D__contig_fill","H5D__contig_flush","H5D__contig_init","H5D__contig_io_init","H5D__contig_io_term","H5D__contig_is_data_cached","H5D__contig_is_space_alloc","H5D__contig_mdio_init","H5D__contig_read","H5D__contig_readvv","H5D__contig_readvv_cb","H5D__contig_readvv_sieve_cb","H5D__contig_write","H5D__contig_writevv","H5D__contig_writevv_cb","H5D__contig_writevv_sieve_cb","H5D__create","H5D__create_named","H5D__current_cache_size_test","H5D__earray_crt_context","H5D__earray_crt_dbg_context","H5D__earray_debug","H5D__earray_decode","H5D__earray_dst_context","H5D__earray_dst_dbg_context","H5D__earray_encode","H5D__earray_fill","H5D__earray_filt_debug","H5D__earray_filt_decode","H5D__earray_filt_encode","H5D__earray_filt_fill","H5D__earray_idx_close","H5D__earray_idx_copy_setup","H5D__earray_idx_copy_shutdown","H5D__earray_idx_create","H5D__earray_idx_delete","H5D__earray_idx_delete_cb","H5D__earray_idx_depend","H5D__earray_idx_dest","H5D__earray_idx_dump","H5D__earray_idx_get_addr","H5D__earray_idx_init","H5D__earray_idx_insert","H5D__earray_idx_is_open","H5D__earray_idx_is_space_alloc","H5D__earray_idx_iterate","H5D__earray_idx_iterate_cb","H5D__earray_idx_load_metadata","H5D__earray_idx_open","H5D__earray_idx_remove","H5D__earray_idx_reset","H5D__earray_idx_resize","H5D__earray_idx_size","H5D__efl_bh_info","H5D__efl_construct","H5D__efl_init","H5D__efl_io_init","H5D__efl_is_space_alloc","H5D__efl_readvv","H5D__efl_readvv_cb","H5D__efl_writevv","H5D__efl_writevv_cb","H5D__farray_crt_context","H5D__farray_crt_dbg_context","H5D__farray_debug","H5D__farray_decode","H5D__farray_dst_context","H5D__farray_dst_dbg_context","H5D__farray_encode","H5D__farray_fill","H5D__farray_filt_debug","H5D__farray_filt_decode","H5D__farray_filt_encode","H5D__farray_filt_fill","H5D__farray_idx_close","H5D__farray_idx_copy_setup","H5D__farray_idx_copy_shutdown","H5D__farray_idx_create","H5D__farray_idx_delete","H5D__farray_idx_delete_cb","H5D__farray_idx_depend","H5D__farray_idx_dest","H5D__farray_idx_dump","H5D__farray_idx_get_addr","H5D__farray_idx_init","H5D__farray_idx_insert","H5D__farray_idx_is_open","H5D__farray_idx_is_space_alloc","H5D__farray_idx_iterate","H5D__farray_idx_iterate_cb","H5D__farray_idx_load_metadata","H5D__farray_idx_open","H5D__farray_idx_remove","H5D__farray_idx_reset","H5D__farray_idx_size","H5D__fill","H5D__fill_init","H5D__fill_refill_vl","H5D__fill_term","H5D__flush","H5D__flush_all_cb","H5D__flush_real","H5D__flush_sieve_buf","H5D__format_convert","H5D__free_piece_info","H5D__gather_file","H5D__gather_mem","H5D__get_chunk_info","H5D__get_chunk_info_by_coord","H5D__get_chunk_info_by_coord_cb","H5D__get_chunk_info_cb","H5D__get_chunk_storage_size","H5D__get_num_chunks","H5D__get_num_chunks_cb","H5D__get_offset","H5D__get_space","H5D__get_space_status","H5D__get_storage_size","H5D__get_type","H5D__init_storage","H5D__inter_collective_io","H5D__ioinfo_adjust","H5D__layout_compact_dirty_test","H5D__layout_contig_size_test","H5D__layout_idx_type_test","H5D__layout_meta_size","H5D__layout_oh_create","H5D__layout_oh_read","H5D__layout_oh_write","H5D__layout_set_io_ops","H5D__layout_set_latest_indexing","H5D__layout_set_version","H5D__layout_type_test","H5D__layout_version_test","H5D__link_chunk_filtered_collective_io","H5D__link_piece_collective_io.constprop.0","H5D__mark","H5D__mpio_collective_filtered_chunk_read.constprop.0","H5D__mpio_collective_filtered_chunk_reinsert","H5D__mpio_collective_filtered_chunk_update","H5D__mpio_collective_filtered_vec_io","H5D__mpio_get_chunk_alloc_info_types.constprop.0","H5D__mpio_get_no_coll_cause_strings","H5D__mpio_opt_possible","H5D__mpio_redistribute_shared_chunks","H5D__mpio_select_read","H5D__mpio_select_write","H5D__mpio_share_chunk_modification_data.constprop.0","H5D__multi_chunk_collective_io","H5D__multi_chunk_filtered_collective_io.constprop.0","H5D__new","H5D__none_idx_close","H5D__none_idx_copy_setup","H5D__none_idx_create","H5D__none_idx_delete","H5D__none_idx_dump","H5D__none_idx_get_addr","H5D__none_idx_is_open","H5D__none_idx_is_space_alloc","H5D__none_idx_iterate","H5D__none_idx_load_metadata","H5D__none_idx_open","H5D__none_idx_remove","H5D__none_idx_reset","H5D__none_idx_size","H5D__nonexistent_readvv","H5D__nonexistent_readvv_cb","H5D__open_name","H5D__piece_file_cb","H5D__piece_io","H5D__piece_mem_cb","H5D__read","H5D__read_api_common","H5D__read_api_common.constprop.0","H5D__refresh","H5D__scatgath_read","H5D__scatgath_read_select","H5D__scatgath_write","H5D__scatgath_write_select","H5D__scatter_file","H5D__scatter_mem","H5D__select_io","H5D__select_read","H5D__select_write","H5D__set_extent","H5D__single_idx_close","H5D__single_idx_copy_setup","H5D__single_idx_create","H5D__single_idx_delete","H5D__single_idx_dump","H5D__single_idx_get_addr","H5D__single_idx_init","H5D__single_idx_insert","H5D__single_idx_is_open","H5D__single_idx_is_space_alloc","H5D__single_idx_iterate","H5D__single_idx_load_metadata","H5D__single_idx_open","H5D__single_idx_remove","H5D__single_idx_reset","H5D__single_idx_size","H5D__typeinfo_init","H5D__typeinfo_init_phase2","H5D__typeinfo_init_phase3.part.0","H5D__virtual_build_source_name.part.0","H5D__virtual_copy","H5D__virtual_copy_layout","H5D__virtual_copy_parsed_name","H5D__virtual_delete","H5D__virtual_flush","H5D__virtual_hold_source_dset_files","H5D__virtual_init","H5D__virtual_io_init","H5D__virtual_is_data_cached","H5D__virtual_is_space_alloc","H5D__virtual_open_source_dset","H5D__virtual_post_io","H5D__virtual_pre_io.isra.0","H5D__virtual_read","H5D__virtual_read_one","H5D__virtual_refresh_source_dset","H5D__virtual_refresh_source_dsets","H5D__virtual_release_source_dset_files","H5D__virtual_reset_layout","H5D__virtual_set_extent_unlim","H5D__virtual_store_layout","H5D__virtual_str_append","H5D__virtual_write","H5D__virtual_write_one","H5D__vlen_get_buf_size","H5D__vlen_get_buf_size_alloc","H5D__vlen_get_buf_size_cb","H5D__vlen_get_buf_size_gen","H5D__vlen_get_buf_size_gen_cb","H5D__write","H5D__write_api_common","H5D__write_api_common.constprop.0","H5D_btree_debug","H5D_chunk_idx_reset","H5D_close","H5D_close.localalias","H5D_flush_all","H5D_get_access_plist","H5D_get_create_plist","H5D_get_dcpl_id","H5D_init","H5D_mult_refresh_close","H5D_mult_refresh_reopen","H5D_nameof","H5D_oloc","H5D_open","H5D_select_io_mem","H5D_term_package","H5D_top_term_package","H5D_virtual_check_mapping_post","H5D_virtual_check_mapping_pre","H5D_virtual_check_min_dims","H5D_virtual_free_parsed_name","H5D_virtual_parse_source_name","H5D_virtual_update_min_dims","H5Dchunk_iter","H5Dclose","H5Dclose_async","H5Dcreate1","H5Dcreate2","H5Dcreate_anon","H5Dcreate_async","H5Ddebug","H5Dextend","H5Dfill","H5Dflush","H5Dformat_convert","H5Dgather","H5Dget_access_plist","H5Dget_chunk_index_type","H5Dget_chunk_info","H5Dget_chunk_info_by_coord","H5Dget_chunk_storage_size","H5Dget_create_plist","H5Dget_num_chunks","H5Dget_offset","H5Dget_space","H5Dget_space_async","H5Dget_space_status","H5Dget_storage_size","H5Dget_type","H5Diterate","H5Dopen1","H5Dopen2","H5Dopen_async","H5Dread","H5Dread_async","H5Dread_chunk","H5Dread_multi","H5Dread_multi_async","H5Drefresh","H5Dscatter","H5Dset_extent","H5Dset_extent_async","H5Dvlen_get_buf_size","H5Dvlen_reclaim","H5Dwrite","H5Dwrite_async","H5Dwrite_chunk","H5Dwrite_multi","H5Dwrite_multi_async","H5EA__cache_dblk_page_deserialize","H5EA__cache_dblk_page_free_icr","H5EA__cache_dblk_page_get_initial_load_size","H5EA__cache_dblk_page_image_len","H5EA__cache_dblk_page_notify","H5EA__cache_dblk_page_serialize","H5EA__cache_dblk_page_verify_chksum","H5EA__cache_dblock_deserialize","H5EA__cache_dblock_free_icr","H5EA__cache_dblock_fsf_size","H5EA__cache_dblock_get_initial_load_size","H5EA__cache_dblock_image_len","H5EA__cache_dblock_notify","H5EA__cache_dblock_serialize","H5EA__cache_dblock_verify_chksum","H5EA__cache_hdr_deserialize","H5EA__cache_hdr_free_icr","H5EA__cache_hdr_get_initial_load_size","H5EA__cache_hdr_image_len","H5EA__cache_hdr_notify","H5EA__cache_hdr_serialize","H5EA__cache_hdr_verify_chksum","H5EA__cache_iblock_deserialize","H5EA__cache_iblock_free_icr","H5EA__cache_iblock_get_initial_load_size","H5EA__cache_iblock_image_len","H5EA__cache_iblock_notify","H5EA__cache_iblock_serialize","H5EA__cache_iblock_verify_chksum","H5EA__cache_sblock_deserialize","H5EA__cache_sblock_free_icr","H5EA__cache_sblock_get_initial_load_size","H5EA__cache_sblock_image_len","H5EA__cache_sblock_notify","H5EA__cache_sblock_serialize","H5EA__cache_sblock_verify_chksum","H5EA__cmp_cparam_test","H5EA__create_flush_depend","H5EA__dblk_page_alloc","H5EA__dblk_page_create","H5EA__dblk_page_dest","H5EA__dblk_page_protect","H5EA__dblk_page_unprotect","H5EA__dblock_alloc","H5EA__dblock_create","H5EA__dblock_debug","H5EA__dblock_delete","H5EA__dblock_dest","H5EA__dblock_protect","H5EA__dblock_sblk_idx","H5EA__dblock_unprotect","H5EA__destroy_flush_depend","H5EA__get_cparam_test","H5EA__hdr_alloc","H5EA__hdr_alloc_elmts","H5EA__hdr_create","H5EA__hdr_debug","H5EA__hdr_decr","H5EA__hdr_delete","H5EA__hdr_dest","H5EA__hdr_free_elmts","H5EA__hdr_fuse_decr","H5EA__hdr_fuse_incr","H5EA__hdr_incr","H5EA__hdr_init","H5EA__hdr_modified","H5EA__hdr_protect","H5EA__hdr_unprotect","H5EA__iblock_alloc","H5EA__iblock_create","H5EA__iblock_debug","H5EA__iblock_delete","H5EA__iblock_dest","H5EA__iblock_protect","H5EA__iblock_unprotect","H5EA__lookup_elmt.constprop.0.isra.0","H5EA__sblock_alloc","H5EA__sblock_create","H5EA__sblock_debug","H5EA__sblock_delete","H5EA__sblock_dest","H5EA__sblock_protect","H5EA__sblock_unprotect","H5EA__test_crt_context","H5EA__test_crt_dbg_context","H5EA__test_debug","H5EA__test_decode","H5EA__test_dst_context","H5EA__test_dst_dbg_context","H5EA__test_encode","H5EA__test_fill","H5EA_close","H5EA_create","H5EA_delete","H5EA_depend","H5EA_get","H5EA_get_addr","H5EA_get_nelmts","H5EA_get_stats","H5EA_iterate","H5EA_open","H5EA_patch_file","H5EA_set","H5ES__cancel","H5ES__cancel_cb","H5ES__close_cb","H5ES__close_failed_cb","H5ES__create","H5ES__event_completed","H5ES__event_free","H5ES__event_new","H5ES__get_err_info","H5ES__get_err_info_cb","H5ES__get_requests","H5ES__get_requests_cb","H5ES__insert_request","H5ES__list_append","H5ES__list_count","H5ES__list_iterate","H5ES__list_remove","H5ES__op_complete","H5ES__wait","H5ES__wait_cb","H5ES_init","H5ES_insert","H5ES_term_package","H5EScancel","H5ESclose","H5EScreate","H5ESfree_err_info","H5ESget_count","H5ESget_err_count","H5ESget_err_info","H5ESget_err_status","H5ESget_op_counter","H5ESget_requests","H5ESinsert_request","H5ESregister_complete_func","H5ESregister_insert_func","H5ESwait","H5E__append_stack","H5E__clear_entries","H5E__clear_stack","H5E__close_msg","H5E__close_msg_cb","H5E__close_stack","H5E__create_msg","H5E__get_auto","H5E__get_class_name","H5E__get_current_stack","H5E__get_msg","H5E__get_num","H5E__pop","H5E__print","H5E__print2","H5E__push_stack","H5E__register_class","H5E__set_auto","H5E__set_current_stack","H5E__set_default_auto","H5E__unregister_class","H5E__walk","H5E__walk1_cb","H5E__walk2_cb","H5E_clear_stack","H5E_dump_api_stack","H5E_init","H5E_pause_stack","H5E_printf_stack","H5E_resume_stack","H5E_term_package","H5Eappend_stack","H5Eauto_is_v2","H5Eclear1","H5Eclear2","H5Eclose_msg","H5Eclose_stack","H5Ecreate_msg","H5Ecreate_stack","H5Eget_auto1","H5Eget_auto2","H5Eget_class_name","H5Eget_current_stack","H5Eget_major","H5Eget_minor","H5Eget_msg","H5Eget_num","H5Eis_paused","H5Epause_stack","H5Epop","H5Eprint1","H5Eprint2","H5Epush1","H5Epush2","H5Eregister_class","H5Eresume_stack","H5Eset_auto1","H5Eset_auto2","H5Eset_current_stack","H5Eunregister_class","H5Ewalk1","H5Ewalk2","H5FA__cache_dblk_page_deserialize","H5FA__cache_dblk_page_free_icr","H5FA__cache_dblk_page_get_initial_load_size","H5FA__cache_dblk_page_image_len","H5FA__cache_dblk_page_notify","H5FA__cache_dblk_page_serialize","H5FA__cache_dblk_page_verify_chksum","H5FA__cache_dblock_deserialize","H5FA__cache_dblock_free_icr","H5FA__cache_dblock_fsf_size","H5FA__cache_dblock_get_initial_load_size","H5FA__cache_dblock_image_len","H5FA__cache_dblock_notify","H5FA__cache_dblock_serialize","H5FA__cache_dblock_verify_chksum","H5FA__cache_hdr_deserialize","H5FA__cache_hdr_free_icr","H5FA__cache_hdr_get_initial_load_size","H5FA__cache_hdr_image_len","H5FA__cache_hdr_notify","H5FA__cache_hdr_serialize","H5FA__cache_hdr_verify_chksum","H5FA__cmp_cparam_test","H5FA__create_flush_depend","H5FA__dblk_page_alloc","H5FA__dblk_page_create","H5FA__dblk_page_dest","H5FA__dblk_page_protect","H5FA__dblk_page_unprotect","H5FA__dblock_alloc","H5FA__dblock_create","H5FA__dblock_debug","H5FA__dblock_delete","H5FA__dblock_dest","H5FA__dblock_protect","H5FA__dblock_unprotect","H5FA__destroy_flush_depend","H5FA__get_cparam_test","H5FA__hdr_alloc","H5FA__hdr_create","H5FA__hdr_debug","H5FA__hdr_decr","H5FA__hdr_delete","H5FA__hdr_dest","H5FA__hdr_fuse_decr","H5FA__hdr_fuse_incr","H5FA__hdr_incr","H5FA__hdr_init","H5FA__hdr_modified","H5FA__hdr_protect","H5FA__hdr_unprotect","H5FA__test_crt_context","H5FA__test_crt_dbg_context","H5FA__test_debug","H5FA__test_decode","H5FA__test_dst_context","H5FA__test_encode","H5FA__test_fill","H5FA_close","H5FA_create","H5FA_delete","H5FA_depend","H5FA_get","H5FA_get_addr","H5FA_get_nelmts","H5FA_get_stats","H5FA_iterate","H5FA_open","H5FA_patch_file","H5FA_set","H5FD__alloc_real","H5FD__copy_plist","H5FD__core_close","H5FD__core_cmp","H5FD__core_delete","H5FD__core_fapl_get","H5FD__core_flush","H5FD__core_flush.part.0","H5FD__core_get_eoa","H5FD__core_get_eof","H5FD__core_get_handle","H5FD__core_lock","H5FD__core_open","H5FD__core_query","H5FD__core_read","H5FD__core_set_eoa","H5FD__core_term","H5FD__core_truncate","H5FD__core_unlock","H5FD__core_write","H5FD__core_write_to_bstore","H5FD__extend","H5FD__family_close","H5FD__family_cmp","H5FD__family_delete","H5FD__family_fapl_copy","H5FD__family_fapl_free","H5FD__family_fapl_get","H5FD__family_flush","H5FD__family_get_default_config","H5FD__family_get_default_printf_filename","H5FD__family_get_eoa","H5FD__family_get_eof","H5FD__family_get_handle","H5FD__family_lock","H5FD__family_open","H5FD__family_query","H5FD__family_read","H5FD__family_sb_decode","H5FD__family_sb_encode","H5FD__family_sb_size","H5FD__family_set_eoa","H5FD__family_term","H5FD__family_truncate","H5FD__family_unlock","H5FD__family_write","H5FD__free_cls","H5FD__free_real","H5FD__get_driver_cb","H5FD__log_alloc","H5FD__log_close","H5FD__log_cmp","H5FD__log_delete","H5FD__log_fapl_copy","H5FD__log_fapl_free","H5FD__log_fapl_get","H5FD__log_free","H5FD__log_get_eoa","H5FD__log_get_eof","H5FD__log_get_handle","H5FD__log_lock","H5FD__log_open","H5FD__log_query","H5FD__log_read","H5FD__log_set_eoa","H5FD__log_term","H5FD__log_truncate","H5FD__log_unlock","H5FD__log_write","H5FD__mpio_close","H5FD__mpio_ctl","H5FD__mpio_delete","H5FD__mpio_flush","H5FD__mpio_get_eoa","H5FD__mpio_get_eof","H5FD__mpio_get_handle","H5FD__mpio_open","H5FD__mpio_query","H5FD__mpio_read","H5FD__mpio_read_selection","H5FD__mpio_read_vector","H5FD__mpio_set_eoa","H5FD__mpio_term","H5FD__mpio_truncate","H5FD__mpio_vector_build_types.constprop.0","H5FD__mpio_write","H5FD__mpio_write_selection","H5FD__mpio_write_vector","H5FD__onion_archival_index_find","H5FD__onion_archival_index_is_valid","H5FD__onion_archival_index_list_sort_cmp","H5FD__onion_close","H5FD__onion_ctl","H5FD__onion_get_eoa","H5FD__onion_get_eof","H5FD__onion_header_decode","H5FD__onion_header_encode","H5FD__onion_history_decode","H5FD__onion_history_encode","H5FD__onion_ingest_header","H5FD__onion_ingest_history","H5FD__onion_ingest_revision_record","H5FD__onion_merge_revision_index_into_archival_index","H5FD__onion_open","H5FD__onion_read","H5FD__onion_revision_index_destroy","H5FD__onion_revision_index_find","H5FD__onion_revision_index_init","H5FD__onion_revision_index_insert","H5FD__onion_revision_record_decode","H5FD__onion_revision_record_encode","H5FD__onion_sb_decode","H5FD__onion_sb_encode","H5FD__onion_sb_size","H5FD__onion_set_eoa","H5FD__onion_term","H5FD__onion_write","H5FD__onion_write_final_history","H5FD__onion_write_header","H5FD__onion_write_history","H5FD__read_selection_translate","H5FD__sec2_close","H5FD__sec2_cmp","H5FD__sec2_ctl","H5FD__sec2_delete","H5FD__sec2_get_eoa","H5FD__sec2_get_eof","H5FD__sec2_get_handle","H5FD__sec2_lock","H5FD__sec2_open","H5FD__sec2_query","H5FD__sec2_read","H5FD__sec2_set_eoa","H5FD__sec2_term","H5FD__sec2_truncate","H5FD__sec2_unlock","H5FD__sec2_write","H5FD__selection_build_types.constprop.0","H5FD__sort_io_req_real.constprop.0","H5FD__splitter_alloc","H5FD__splitter_close","H5FD__splitter_cmp","H5FD__splitter_ctl","H5FD__splitter_delete","H5FD__splitter_fapl_copy","H5FD__splitter_fapl_free","H5FD__splitter_fapl_get","H5FD__splitter_flush","H5FD__splitter_free","H5FD__splitter_get_default_wo_path.constprop.0","H5FD__splitter_get_eoa","H5FD__splitter_get_eof","H5FD__splitter_get_handle","H5FD__splitter_get_type_map","H5FD__splitter_lock","H5FD__splitter_log_error.part.0.isra.0","H5FD__splitter_open","H5FD__splitter_populate_config","H5FD__splitter_query","H5FD__splitter_read","H5FD__splitter_sb_decode","H5FD__splitter_sb_encode","H5FD__splitter_sb_size","H5FD__splitter_set_eoa","H5FD__splitter_term","H5FD__splitter_truncate","H5FD__splitter_unlock","H5FD__splitter_write","H5FD__srt_tmp_cmp","H5FD__supports_swmr_test","H5FD__write_selection_translate","H5FD_alloc","H5FD_check_plugin_load","H5FD_close","H5FD_cmp","H5FD_core_init","H5FD_ctl","H5FD_delete","H5FD_driver_query","H5FD_family_init","H5FD_fapl_get","H5FD_flush","H5FD_free","H5FD_free_driver_info","H5FD_get_base_addr","H5FD_get_class","H5FD_get_class.localalias","H5FD_get_driver_id_by_name","H5FD_get_driver_id_by_value","H5FD_get_eoa","H5FD_get_eof","H5FD_get_feature_flags","H5FD_get_fileno","H5FD_get_fs_type_map","H5FD_get_maxaddr","H5FD_get_mpio_atomicity","H5FD_get_vfd_handle","H5FD_init","H5FD_is_driver_registered_by_name","H5FD_is_driver_registered_by_value","H5FD_locate_signature","H5FD_lock","H5FD_log_init","H5FD_mpi_MPIOff_to_haddr","H5FD_mpi_get_comm","H5FD_mpi_get_file_sync_required","H5FD_mpi_get_info","H5FD_mpi_get_rank","H5FD_mpi_get_size","H5FD_mpi_haddr_to_MPIOff","H5FD_mpio_init","H5FD_multi_alloc","H5FD_multi_close","H5FD_multi_cmp","H5FD_multi_ctl","H5FD_multi_delete","H5FD_multi_fapl_copy","H5FD_multi_fapl_free","H5FD_multi_fapl_get","H5FD_multi_flush","H5FD_multi_free","H5FD_multi_get_eoa","H5FD_multi_get_eof","H5FD_multi_get_handle","H5FD_multi_get_type_map","H5FD_multi_init","H5FD_multi_lock","H5FD_multi_open","H5FD_multi_populate_config","H5FD_multi_query","H5FD_multi_read","H5FD_multi_sb_decode","H5FD_multi_sb_decode.part.0","H5FD_multi_sb_encode","H5FD_multi_sb_size","H5FD_multi_set_eoa","H5FD_multi_term","H5FD_multi_truncate","H5FD_multi_unlock","H5FD_multi_write","H5FD_onion_init","H5FD_open","H5FD_read","H5FD_read_from_selection","H5FD_read_selection","H5FD_read_selection_id","H5FD_read_vector","H5FD_read_vector_from_selection","H5FD_register","H5FD_register_driver_by_name","H5FD_register_driver_by_value","H5FD_sb_encode","H5FD_sb_load","H5FD_sb_size","H5FD_sec2_init","H5FD_set_base_addr","H5FD_set_eoa","H5FD_set_feature_flags","H5FD_set_mpio_atomicity","H5FD_set_paged_aggr","H5FD_sort_selection_io_req","H5FD_sort_vector_io_req","H5FD_split_populate_config.constprop.0","H5FD_splitter_init","H5FD_stdio_alloc","H5FD_stdio_close","H5FD_stdio_cmp","H5FD_stdio_delete","H5FD_stdio_flush","H5FD_stdio_get_eoa","H5FD_stdio_get_eof","H5FD_stdio_get_handle","H5FD_stdio_init","H5FD_stdio_lock","H5FD_stdio_open","H5FD_stdio_query","H5FD_stdio_read","H5FD_stdio_set_eoa","H5FD_stdio_term","H5FD_stdio_truncate","H5FD_stdio_unlock","H5FD_stdio_write","H5FD_term_package","H5FD_truncate","H5FD_try_extend","H5FD_unlock","H5FD_write","H5FD_write_from_selection","H5FD_write_selection","H5FD_write_selection_id","H5FD_write_vector","H5FD_write_vector_from_selection","H5FDalloc","H5FDclose","H5FDcmp","H5FDctl","H5FDdelete","H5FDdriver_query","H5FDflush","H5FDfree","H5FDget_eoa","H5FDget_eof","H5FDget_vfd_handle","H5FDis_driver_registered_by_name","H5FDis_driver_registered_by_value","H5FDlock","H5FDonion_get_revision_count","H5FDopen","H5FDperform_init","H5FDquery","H5FDread","H5FDread_from_selection","H5FDread_selection","H5FDread_vector","H5FDread_vector_from_selection","H5FDregister","H5FDset_eoa","H5FDtruncate","H5FDunlock","H5FDunregister","H5FDwrite","H5FDwrite_from_selection","H5FDwrite_selection","H5FDwrite_vector","H5FDwrite_vector_from_selection","H5FL__blk_create_list.part.0","H5FL__blk_gc_list","H5FL_arr_calloc","H5FL_arr_free","H5FL_arr_malloc","H5FL_arr_realloc","H5FL_blk_calloc","H5FL_blk_free","H5FL_blk_free_block_avail","H5FL_blk_malloc","H5FL_blk_realloc","H5FL_fac_calloc","H5FL_fac_free","H5FL_fac_init","H5FL_fac_malloc","H5FL_fac_term","H5FL_garbage_coll","H5FL_get_free_list_sizes","H5FL_reg_calloc","H5FL_reg_free","H5FL_reg_malloc","H5FL_seq_calloc","H5FL_seq_free","H5FL_seq_malloc","H5FL_seq_realloc","H5FL_set_free_list_limits","H5FL_term_package","H5FO_create","H5FO_delete","H5FO_dest","H5FO_insert","H5FO_mark","H5FO_marked","H5FO_opened","H5FO_top_count","H5FO_top_create","H5FO_top_decr","H5FO_top_dest","H5FO_top_incr","H5FS__cache_hdr_deserialize","H5FS__cache_hdr_free_icr","H5FS__cache_hdr_get_initial_load_size","H5FS__cache_hdr_image_len","H5FS__cache_hdr_notify","H5FS__cache_hdr_pre_serialize","H5FS__cache_hdr_serialize","H5FS__cache_hdr_verify_chksum","H5FS__cache_sinfo_deserialize","H5FS__cache_sinfo_free_icr","H5FS__cache_sinfo_get_initial_load_size","H5FS__cache_sinfo_image_len","H5FS__cache_sinfo_notify","H5FS__cache_sinfo_pre_serialize","H5FS__cache_sinfo_serialize","H5FS__cache_sinfo_verify_chksum","H5FS__cmp_cparam_test","H5FS__create_flush_depend","H5FS__decr","H5FS__destroy_flush_depend","H5FS__dirty","H5FS__get_cparam_test","H5FS__hdr_dest","H5FS__incr","H5FS__iterate_node_cb","H5FS__iterate_sect_cb","H5FS__new","H5FS__sect_init_cls.part.0","H5FS__sect_link","H5FS__sect_merge","H5FS__sect_node_new.part.0","H5FS__sect_remove_real","H5FS__sect_unlink_rest","H5FS__sinfo_dest","H5FS__sinfo_free_node_cb","H5FS__sinfo_free_sect_cb","H5FS__sinfo_lock","H5FS__sinfo_new","H5FS__sinfo_serialize_node_cb","H5FS__sinfo_serialize_sect_cb","H5FS__sinfo_unlock","H5FS__size_node_decr.isra.0","H5FS_alloc_hdr","H5FS_alloc_sect","H5FS_close","H5FS_create","H5FS_debug","H5FS_delete","H5FS_free","H5FS_get_sect_count","H5FS_open","H5FS_sect_add","H5FS_sect_change_class","H5FS_sect_debug","H5FS_sect_find","H5FS_sect_iterate","H5FS_sect_remove","H5FS_sect_stats","H5FS_sect_try_extend","H5FS_sect_try_merge","H5FS_sect_try_shrink_eoa","H5FS_sects_debug","H5FS_size","H5FS_stat_info","H5FS_vfd_alloc_hdr_and_section_info_if_needed","H5F_Kvalue","H5F__accum_adjust","H5F__accum_flush","H5F__accum_free","H5F__accum_read","H5F__accum_reset","H5F__accum_write","H5F__alloc","H5F__build_actual_name","H5F__build_name","H5F__cache_drvrinfo_deserialize","H5F__cache_drvrinfo_free_icr","H5F__cache_drvrinfo_get_final_load_size","H5F__cache_drvrinfo_get_initial_load_size","H5F__cache_drvrinfo_image_len","H5F__cache_drvrinfo_serialize","H5F__cache_superblock_deserialize","H5F__cache_superblock_free_icr","H5F__cache_superblock_get_final_load_size","H5F__cache_superblock_get_initial_load_size","H5F__cache_superblock_image_len","H5F__cache_superblock_serialize","H5F__cache_superblock_verify_chksum","H5F__check_cached_stab_test","H5F__close","H5F__close_cb","H5F__close_mounts","H5F__create_api_common","H5F__delete","H5F__dest","H5F__efc_create","H5F__efc_destroy","H5F__efc_max_nfiles","H5F__efc_open","H5F__efc_open_file","H5F__efc_release","H5F__efc_release_real","H5F__efc_try_close","H5F__efc_try_close_tag1.isra.0","H5F__efc_try_close_tag2.isra.0","H5F__evict_cache_entries","H5F__flush","H5F__flush_api_common","H5F__flush_mounts_recurse","H5F__flush_phase2","H5F__format_convert","H5F__free","H5F__get_all_count_cb","H5F__get_all_ids_cb","H5F__get_cont_info","H5F__get_file_image","H5F__get_info","H5F__get_max_eof_eoa","H5F__get_maxaddr_test","H5F__get_mpi_atomicity","H5F__get_objects_cb","H5F__get_sbe_addr_test","H5F__get_sohm_mesg_count_test","H5F__is_hdf5","H5F__mount_count_ids","H5F__mount_count_ids_recurse","H5F__new","H5F__open_api_common","H5F__parse_file_lock_env_var","H5F__post_open","H5F__post_open_api_common","H5F__reopen","H5F__reopen_api_common","H5F__reparse_file_lock_variable_test","H5F__same_file_test","H5F__set_base_addr","H5F__set_eoa","H5F__set_libver_bounds","H5F__set_mpi_atomicity","H5F__set_paged_aggr","H5F__sfile_add","H5F__sfile_remove","H5F__sfile_search","H5F__start_swmr_write","H5F__super_ext_close","H5F__super_ext_create","H5F__super_ext_open","H5F__super_ext_remove_msg","H5F__super_ext_write_msg","H5F__super_free","H5F__super_init","H5F__super_read","H5F__super_size","H5F__superblock_prefix_decode","H5F__try_extend","H5F__update_super_ext_driver_msg","H5F_addr_decode","H5F_addr_decode_len","H5F_addr_encode","H5F_addr_encode_len","H5F_block_read","H5F_block_write","H5F_coll_md_read","H5F_cwfs_add","H5F_cwfs_advance_heap","H5F_cwfs_find_free_heap","H5F_cwfs_remove_heap","H5F_debug","H5F_decr_nopen_objs","H5F_efc_close","H5F_eoa_dirty","H5F_fake_alloc","H5F_fake_free","H5F_file_id_exists","H5F_flush_mounts","H5F_flush_tagged_metadata","H5F_gc_ref","H5F_get_access_plist","H5F_get_actual_name","H5F_get_alignment","H5F_get_base_addr","H5F_get_checksums","H5F_get_coll_metadata_reads","H5F_get_driver_id","H5F_get_eoa","H5F_get_evict_on_close","H5F_get_extpath","H5F_get_fc_degree","H5F_get_fcpl","H5F_get_file_id","H5F_get_fileno","H5F_get_high_bound","H5F_get_id","H5F_get_intent","H5F_get_low_bound","H5F_get_metadata_read_retry_info","H5F_get_min_dset_ohdr","H5F_get_nmounts","H5F_get_nopen_objs","H5F_get_nrefs","H5F_get_null_fsm_addr","H5F_get_obj_count","H5F_get_obj_ids","H5F_get_open_name","H5F_get_parent","H5F_get_pgend_meta_thres","H5F_get_point_of_no_return","H5F_get_read_attempts","H5F_get_rfic_flags","H5F_get_shared","H5F_get_sohm_addr","H5F_get_sohm_nindexes","H5F_get_sohm_vers","H5F_get_threshold","H5F_get_use_file_locking","H5F_get_vfd_handle","H5F_get_vol_cls","H5F_get_vol_obj","H5F_grp_btree_shared","H5F_has_feature","H5F_has_vector_select_io","H5F_incr_nopen_objs","H5F_init","H5F_is_mount","H5F_is_tmp_addr","H5F_mdc_log_location","H5F_mount","H5F_mpi_get_comm","H5F_mpi_get_file_block_type","H5F_mpi_get_info","H5F_mpi_get_rank","H5F_mpi_get_size","H5F_mpi_retrieve_comm","H5F_object_flush_cb","H5F_open","H5F_prefix_open_file","H5F_rdcc_nbytes","H5F_rdcc_nslots","H5F_rdcc_w0","H5F_same_shared","H5F_set_coll_metadata_reads","H5F_set_grp_btree_shared","H5F_set_min_dset_ohdr","H5F_set_retries","H5F_set_sohm_addr","H5F_set_sohm_nindexes","H5F_set_sohm_vers","H5F_set_store_msg_crt_idx","H5F_sfile_assert_num","H5F_shared_block_read","H5F_shared_block_write","H5F_shared_coll_md_read","H5F_shared_get_coll_metadata_reads","H5F_shared_get_eoa","H5F_shared_get_file_driver","H5F_shared_get_intent","H5F_shared_get_mpi_file_sync_required","H5F_shared_has_feature","H5F_shared_mpi_get_size","H5F_shared_select_read","H5F_shared_select_write","H5F_shared_vector_read","H5F_shared_vector_write","H5F_sieve_buf_size","H5F_sizeof_addr","H5F_sizeof_size","H5F_start_mdc_log_on_access","H5F_store_msg_crt_idx","H5F_super_dirty","H5F_sym_leaf_k","H5F_term_package","H5F_track_metadata_read_retries","H5F_traverse_mount","H5F_try_close","H5F_try_close.localalias","H5F_unmount","H5F_use_mdc_logging","H5F_use_tmp_space","H5Fclear_elink_file_cache","H5Fclose","H5Fclose_async","H5Fcreate","H5Fcreate_async","H5Fdelete","H5Fflush","H5Fflush_async","H5Fformat_convert","H5Fget_access_plist","H5Fget_create_plist","H5Fget_dset_no_attrs_hint","H5Fget_eoa","H5Fget_file_image","H5Fget_fileno","H5Fget_filesize","H5Fget_free_sections","H5Fget_freespace","H5Fget_info1","H5Fget_info2","H5Fget_intent","H5Fget_mdc_config","H5Fget_mdc_hit_rate","H5Fget_mdc_image_info","H5Fget_mdc_logging_status","H5Fget_mdc_size","H5Fget_metadata_read_retry_info","H5Fget_mpi_atomicity","H5Fget_name","H5Fget_obj_count","H5Fget_obj_ids","H5Fget_page_buffering_stats","H5Fget_vfd_handle","H5Fincrement_filesize","H5Fis_accessible","H5Fis_hdf5","H5Fmount","H5Fopen","H5Fopen_async","H5Freopen","H5Freopen_async","H5Freset_mdc_hit_rate_stats","H5Freset_page_buffering_stats","H5Fset_dset_no_attrs_hint","H5Fset_latest_format","H5Fset_libver_bounds","H5Fset_mdc_config","H5Fset_mpi_atomicity","H5Fstart_mdc_logging","H5Fstart_swmr_write","H5Fstop_mdc_logging","H5Funmount","H5G__cache_node_deserialize","H5G__cache_node_free_icr","H5G__cache_node_get_initial_load_size","H5G__cache_node_image_len","H5G__cache_node_serialize","H5G__close_cb","H5G__common_path","H5G__compact_build_table_cb","H5G__compact_get_name_by_idx","H5G__compact_insert","H5G__compact_iterate","H5G__compact_lookup","H5G__compact_lookup_by_idx","H5G__compact_lookup_cb","H5G__compact_remove","H5G__compact_remove_by_idx","H5G__compact_remove_common_cb","H5G__component","H5G__create","H5G__create_named","H5G__dense_btree2_corder_compare","H5G__dense_btree2_corder_debug","H5G__dense_btree2_corder_decode","H5G__dense_btree2_corder_encode","H5G__dense_btree2_corder_store","H5G__dense_btree2_name_compare","H5G__dense_btree2_name_debug","H5G__dense_btree2_name_decode","H5G__dense_btree2_name_encode","H5G__dense_btree2_name_store","H5G__dense_build_table","H5G__dense_build_table_cb","H5G__dense_create","H5G__dense_delete","H5G__dense_fh_name_cmp","H5G__dense_get_name_by_idx","H5G__dense_get_name_by_idx_bt2_cb","H5G__dense_get_name_by_idx_fh_cb","H5G__dense_insert","H5G__dense_iterate","H5G__dense_iterate_bt2_cb","H5G__dense_iterate_fh_cb","H5G__dense_lookup","H5G__dense_lookup_by_idx","H5G__dense_lookup_by_idx_bt2_cb","H5G__dense_lookup_by_idx_fh_cb","H5G__dense_lookup_cb","H5G__dense_remove","H5G__dense_remove_bt2_cb","H5G__dense_remove_by_idx","H5G__dense_remove_by_idx_bt2_cb","H5G__dense_remove_by_idx_fh_cb","H5G__dense_remove_fh_cb","H5G__ent_copy","H5G__ent_debug","H5G__ent_decode_vec","H5G__ent_encode_vec","H5G__ent_reset","H5G__ent_to_link","H5G__free_visit_visited","H5G__get_info_by_idx","H5G__get_info_by_name","H5G__get_name_by_addr_cb","H5G__get_objinfo","H5G__get_objinfo_cb","H5G__has_links_test","H5G__has_stab_test","H5G__is_empty_test","H5G__is_new_dense_test","H5G__iterate_cb","H5G__lheap_size_test","H5G__link_cmp_corder_dec","H5G__link_cmp_corder_inc","H5G__link_cmp_name_dec","H5G__link_cmp_name_inc","H5G__link_iterate_table","H5G__link_name_replace","H5G__link_release_table","H5G__link_sort_table","H5G__link_to_ent","H5G__link_to_loc","H5G__loc_addr","H5G__loc_addr_cb","H5G__loc_exists_cb","H5G__loc_find_by_idx_cb","H5G__loc_find_cb","H5G__loc_get_comment_cb","H5G__loc_info_cb","H5G__loc_insert","H5G__loc_native_info_cb","H5G__loc_set_comment_cb","H5G__name_init","H5G__name_replace_cb","H5G__new_dense_info_test","H5G__node_build_table","H5G__node_by_idx","H5G__node_cmp2","H5G__node_cmp3","H5G__node_copy","H5G__node_create","H5G__node_debug_key","H5G__node_decode_key","H5G__node_encode_key","H5G__node_found","H5G__node_free","H5G__node_get_shared","H5G__node_init","H5G__node_insert","H5G__node_iterate","H5G__node_iterate_size","H5G__node_remove","H5G__node_sumup","H5G__obj_compact_to_dense_cb","H5G__obj_create","H5G__obj_create_real","H5G__obj_get_linfo","H5G__obj_info","H5G__obj_iterate","H5G__obj_lookup","H5G__obj_remove_update_linfo","H5G__obj_stab_to_new_cb","H5G__open_name","H5G__stab_bh_size","H5G__stab_count","H5G__stab_create","H5G__stab_create_components","H5G__stab_delete","H5G__stab_get_name_by_idx","H5G__stab_get_name_by_idx_cb","H5G__stab_insert","H5G__stab_insert_real","H5G__stab_iterate","H5G__stab_lookup","H5G__stab_lookup_by_idx","H5G__stab_lookup_by_idx_cb","H5G__stab_lookup_cb","H5G__stab_remove","H5G__stab_remove_by_idx","H5G__stab_valid","H5G__traverse_real","H5G__traverse_slink_cb","H5G__traverse_special","H5G__user_path_test","H5G__verify_cached_stab_test","H5G__verify_cached_stabs_test","H5G__verify_cached_stabs_test_cb","H5G__visit_cb","H5G_build_fullpath_refstr_str","H5G_close","H5G_ent_decode","H5G_ent_encode","H5G_fileof","H5G_get_create_plist","H5G_get_gcpl_id","H5G_get_name","H5G_get_name_by_addr","H5G_get_shared_count","H5G_init","H5G_iterate","H5G_link_to_info","H5G_loc","H5G_loc_copy","H5G_loc_exists","H5G_loc_find","H5G_loc_find_by_idx","H5G_loc_free","H5G_loc_get_comment","H5G_loc_info","H5G_loc_native_info","H5G_loc_real","H5G_loc_reset","H5G_loc_set_comment","H5G_map_obj_type","H5G_mkroot","H5G_mount","H5G_mounted","H5G_name_copy","H5G_name_free","H5G_name_replace","H5G_name_reset","H5G_name_set","H5G_nameof","H5G_node_close","H5G_node_debug","H5G_normalize","H5G_obj_get_name_by_idx","H5G_obj_insert","H5G_obj_insert.localalias","H5G_obj_lookup_by_idx","H5G_obj_remove","H5G_obj_remove_by_idx","H5G_oloc","H5G_open","H5G_root_free","H5G_root_loc","H5G_rootof","H5G_term_package","H5G_top_term_package","H5G_traverse","H5G_unmount","H5G_visit","H5Gclose","H5Gclose_async","H5Gcreate1","H5Gcreate2","H5Gcreate_anon","H5Gcreate_async","H5Gflush","H5Gget_comment","H5Gget_create_plist","H5Gget_info","H5Gget_info_async","H5Gget_info_by_idx","H5Gget_info_by_idx_async","H5Gget_info_by_name","H5Gget_info_by_name_async","H5Gget_linkval","H5Gget_num_objs","H5Gget_objinfo","H5Gget_objname_by_idx","H5Gget_objtype_by_idx","H5Giterate","H5Glink","H5Glink2","H5Gmove","H5Gmove2","H5Gopen1","H5Gopen2","H5Gopen_async","H5Grefresh","H5Gset_comment","H5Gunlink","H5HF__cache_dblock_deserialize","H5HF__cache_dblock_free_icr","H5HF__cache_dblock_fsf_size","H5HF__cache_dblock_get_initial_load_size","H5HF__cache_dblock_image_len","H5HF__cache_dblock_notify","H5HF__cache_dblock_pre_serialize","H5HF__cache_dblock_serialize","H5HF__cache_dblock_verify_chksum","H5HF__cache_hdr_deserialize","H5HF__cache_hdr_free_icr","H5HF__cache_hdr_get_final_load_size","H5HF__cache_hdr_get_initial_load_size","H5HF__cache_hdr_image_len","H5HF__cache_hdr_pre_serialize","H5HF__cache_hdr_serialize","H5HF__cache_hdr_verify_chksum","H5HF__cache_iblock_deserialize","H5HF__cache_iblock_free_icr","H5HF__cache_iblock_get_initial_load_size","H5HF__cache_iblock_image_len","H5HF__cache_iblock_notify","H5HF__cache_iblock_pre_serialize","H5HF__cache_iblock_serialize","H5HF__cache_iblock_verify_chksum","H5HF__dtable_dest","H5HF__dtable_init","H5HF__dtable_lookup","H5HF__dtable_size_to_row","H5HF__dtable_size_to_rows","H5HF__dtable_span_size","H5HF__hdr_adj_free","H5HF__hdr_adjust_heap","H5HF__hdr_alloc","H5HF__hdr_create","H5HF__hdr_decr","H5HF__hdr_delete","H5HF__hdr_dirty","H5HF__hdr_empty","H5HF__hdr_finish_init","H5HF__hdr_finish_init_phase1","H5HF__hdr_finish_init_phase2","H5HF__hdr_free","H5HF__hdr_fuse_decr","H5HF__hdr_fuse_incr","H5HF__hdr_inc_alloc","H5HF__hdr_inc_iter","H5HF__hdr_incr","H5HF__hdr_protect","H5HF__hdr_reset_iter","H5HF__hdr_reverse_iter","H5HF__hdr_skip_blocks","H5HF__hdr_start_iter","H5HF__hdr_update_iter","H5HF__huge_bt2_crt_context","H5HF__huge_bt2_dir_compare","H5HF__huge_bt2_dir_debug","H5HF__huge_bt2_dir_decode","H5HF__huge_bt2_dir_encode","H5HF__huge_bt2_dir_remove","H5HF__huge_bt2_dir_store","H5HF__huge_bt2_dst_context","H5HF__huge_bt2_filt_dir_compare","H5HF__huge_bt2_filt_dir_debug","H5HF__huge_bt2_filt_dir_decode","H5HF__huge_bt2_filt_dir_encode","H5HF__huge_bt2_filt_dir_found","H5HF__huge_bt2_filt_dir_remove","H5HF__huge_bt2_filt_dir_store","H5HF__huge_bt2_filt_indir_compare","H5HF__huge_bt2_filt_indir_debug","H5HF__huge_bt2_filt_indir_decode","H5HF__huge_bt2_filt_indir_encode","H5HF__huge_bt2_filt_indir_found","H5HF__huge_bt2_filt_indir_remove","H5HF__huge_bt2_filt_indir_store","H5HF__huge_bt2_indir_compare","H5HF__huge_bt2_indir_debug","H5HF__huge_bt2_indir_decode","H5HF__huge_bt2_indir_encode","H5HF__huge_bt2_indir_found","H5HF__huge_bt2_indir_remove","H5HF__huge_bt2_indir_store","H5HF__huge_delete","H5HF__huge_get_obj_len","H5HF__huge_get_obj_off","H5HF__huge_init","H5HF__huge_insert","H5HF__huge_op","H5HF__huge_op_real","H5HF__huge_read","H5HF__huge_remove","H5HF__huge_term","H5HF__huge_write","H5HF__iblock_decr","H5HF__iblock_dirty","H5HF__iblock_incr","H5HF__man_dblock_create","H5HF__man_dblock_delete","H5HF__man_dblock_dest","H5HF__man_dblock_destroy","H5HF__man_dblock_locate","H5HF__man_dblock_new","H5HF__man_dblock_protect","H5HF__man_get_obj_len","H5HF__man_get_obj_off","H5HF__man_iblock_alloc_row","H5HF__man_iblock_attach","H5HF__man_iblock_create","H5HF__man_iblock_delete","H5HF__man_iblock_delete.localalias","H5HF__man_iblock_dest","H5HF__man_iblock_detach","H5HF__man_iblock_detach.localalias","H5HF__man_iblock_entry_addr","H5HF__man_iblock_parent_info","H5HF__man_iblock_protect","H5HF__man_iblock_root_create","H5HF__man_iblock_root_double","H5HF__man_iblock_size","H5HF__man_iblock_size.localalias","H5HF__man_iblock_unprotect","H5HF__man_insert","H5HF__man_iter_curr","H5HF__man_iter_down","H5HF__man_iter_init","H5HF__man_iter_next","H5HF__man_iter_ready","H5HF__man_iter_reset","H5HF__man_iter_set_entry","H5HF__man_iter_start_entry","H5HF__man_iter_start_offset","H5HF__man_iter_up","H5HF__man_op","H5HF__man_op_real","H5HF__man_read","H5HF__man_remove","H5HF__man_write","H5HF__op_read","H5HF__op_write","H5HF__sect_indirect_add","H5HF__sect_indirect_decr","H5HF__sect_indirect_first","H5HF__sect_indirect_free","H5HF__sect_indirect_init_cls","H5HF__sect_indirect_init_rows","H5HF__sect_indirect_new","H5HF__sect_indirect_reduce","H5HF__sect_indirect_revive","H5HF__sect_indirect_serialize","H5HF__sect_indirect_shrink","H5HF__sect_indirect_term_cls","H5HF__sect_indirect_valid.isra.0","H5HF__sect_row_can_merge","H5HF__sect_row_can_shrink","H5HF__sect_row_debug","H5HF__sect_row_deserialize","H5HF__sect_row_first.part.0","H5HF__sect_row_free","H5HF__sect_row_get_iblock","H5HF__sect_row_init_cls","H5HF__sect_row_merge","H5HF__sect_row_reduce","H5HF__sect_row_revive","H5HF__sect_row_serialize","H5HF__sect_row_shrink","H5HF__sect_row_term_cls","H5HF__sect_row_valid","H5HF__sect_single_add","H5HF__sect_single_can_merge","H5HF__sect_single_can_shrink","H5HF__sect_single_dblock_info","H5HF__sect_single_deserialize","H5HF__sect_single_free","H5HF__sect_single_full_dblock","H5HF__sect_single_merge","H5HF__sect_single_new","H5HF__sect_single_reduce","H5HF__sect_single_revive","H5HF__sect_single_shrink","H5HF__sect_single_valid","H5HF__space_add","H5HF__space_close","H5HF__space_create_root","H5HF__space_create_root_cb","H5HF__space_delete","H5HF__space_find","H5HF__space_remove","H5HF__space_revert_root","H5HF__space_revert_root_cb","H5HF__space_sect_change_class","H5HF__space_size","H5HF__space_start","H5HF__tiny_get_obj_len","H5HF__tiny_init","H5HF__tiny_insert","H5HF__tiny_op","H5HF__tiny_read","H5HF__tiny_remove","H5HF_close","H5HF_cmp_cparam_test","H5HF_create","H5HF_dblock_debug","H5HF_dblock_debug_cb","H5HF_delete","H5HF_get_cparam_test","H5HF_get_dblock_free_test","H5HF_get_dblock_size_test","H5HF_get_dtable_max_drows_test","H5HF_get_dtable_width_test","H5HF_get_heap_addr","H5HF_get_huge_info_test","H5HF_get_iblock_max_drows_test","H5HF_get_id_len","H5HF_get_id_off_test","H5HF_get_id_type_test","H5HF_get_max_root_rows","H5HF_get_obj_len","H5HF_get_obj_off","H5HF_get_tiny_info_test","H5HF_hdr_debug","H5HF_hdr_print","H5HF_iblock_debug","H5HF_iblock_print","H5HF_iblock_print.localalias","H5HF_id_print","H5HF_insert","H5HF_op","H5HF_open","H5HF_read","H5HF_remove","H5HF_sects_debug","H5HF_sects_debug_cb","H5HF_size","H5HF_stat_info","H5HF_write","H5HG__cache_heap_deserialize","H5HG__cache_heap_free_icr","H5HG__cache_heap_get_final_load_size","H5HG__cache_heap_get_initial_load_size","H5HG__cache_heap_image_len","H5HG__cache_heap_serialize","H5HG__free","H5HG__protect","H5HG_debug","H5HG_extend","H5HG_get_addr","H5HG_get_free_size","H5HG_get_obj_size","H5HG_get_size","H5HG_insert","H5HG_link","H5HG_read","H5HG_remove","H5HL__cache_datablock_deserialize","H5HL__cache_datablock_free_icr","H5HL__cache_datablock_get_initial_load_size","H5HL__cache_datablock_image_len","H5HL__cache_datablock_notify","H5HL__cache_datablock_serialize","H5HL__cache_prefix_deserialize","H5HL__cache_prefix_free_icr","H5HL__cache_prefix_get_final_load_size","H5HL__cache_prefix_get_initial_load_size","H5HL__cache_prefix_image_len","H5HL__cache_prefix_serialize","H5HL__dblk_dest","H5HL__dblk_new","H5HL__dblk_realloc","H5HL__dec_rc","H5HL__dest","H5HL__fl_deserialize","H5HL__fl_serialize","H5HL__hdr_deserialize","H5HL__inc_rc","H5HL__minimize_heap_space","H5HL__new","H5HL__prfx_dest","H5HL__prfx_new","H5HL_create","H5HL_debug","H5HL_delete","H5HL_get_size","H5HL_heap_get_size","H5HL_heapsize","H5HL_insert","H5HL_offset_into","H5HL_protect","H5HL_remove","H5HL_unprotect","H5I__destroy_type","H5I__find_id","H5I__get_name_test","H5I__get_type_ref","H5I__inc_type_ref","H5I__iterate_pub_cb","H5I__register","H5I__remove_common","H5I__remove_verify","H5I__search_cb","H5I_clear_type","H5I_dec_app_ref","H5I_dec_app_ref_always_close","H5I_dec_app_ref_always_close_async","H5I_dec_app_ref_async","H5I_dec_ref","H5I_dec_type_ref","H5I_dump_ids_for_type","H5I_find_id","H5I_get_ref","H5I_get_type","H5I_inc_ref","H5I_is_file_object","H5I_iterate","H5I_nmembers","H5I_object","H5I_object_verify","H5I_register","H5I_register_type","H5I_register_using_existing_id","H5I_remove","H5I_subst","H5I_term_package","H5Iclear_type","H5Idec_ref","H5Idec_type_ref","H5Idestroy_type","H5Iget_file_id","H5Iget_name","H5Iget_ref","H5Iget_type","H5Iget_type_ref","H5Iinc_ref","H5Iinc_type_ref","H5Iis_valid","H5Iiterate","H5Inmembers","H5Iobject_verify","H5Iregister","H5Iregister_future","H5Iregister_type","H5Iremove_verify","H5Isearch","H5Itype_exists","H5L__create_hard","H5L__create_hard_api_common","H5L__create_real","H5L__create_soft","H5L__create_soft_api_common","H5L__create_ud","H5L__delete","H5L__delete_by_idx","H5L__delete_by_idx_cb","H5L__delete_cb","H5L__exists","H5L__exists_final_cb","H5L__exists_inter_cb","H5L__extern_query","H5L__extern_traverse","H5L__get_info_by_idx","H5L__get_info_by_idx_cb","H5L__get_info_cb","H5L__get_name_by_idx","H5L__get_name_by_idx_cb","H5L__get_val","H5L__get_val_by_idx","H5L__get_val_by_idx_cb","H5L__get_val_cb","H5L__iterate2_shim","H5L__link_cb","H5L__link_copy_file","H5L__move","H5L__move_cb","H5L__move_dest_cb","H5L_exists_tolerant","H5L_find_class","H5L_get_info","H5L_get_ocrt_info","H5L_init","H5L_is_registered","H5L_iterate","H5L_link","H5L_link_object","H5L_register","H5L_register_external","H5L_term_package","H5L_unregister","H5Lcopy","H5Lcreate_external","H5Lcreate_hard","H5Lcreate_hard_async","H5Lcreate_soft","H5Lcreate_soft_async","H5Lcreate_ud","H5Ldelete","H5Ldelete_async","H5Ldelete_by_idx","H5Ldelete_by_idx_async","H5Lexists","H5Lexists_async","H5Lget_info1","H5Lget_info2","H5Lget_info_by_idx1","H5Lget_info_by_idx2","H5Lget_name_by_idx","H5Lget_val","H5Lget_val_by_idx","H5Lis_registered","H5Literate1","H5Literate2","H5Literate_async","H5Literate_by_name1","H5Literate_by_name2","H5Lmove","H5Lregister","H5Lunpack_elink_val","H5Lunregister","H5Lvisit1","H5Lvisit2","H5Lvisit_by_name1","H5Lvisit_by_name2","H5MF__add_sect","H5MF__aggr_absorb","H5MF__aggr_alloc","H5MF__aggr_can_absorb","H5MF__aggr_query","H5MF__aggr_try_extend","H5MF__aggrs_try_shrink_eoa","H5MF__alloc_to_fs_type","H5MF__close_delete_fstype","H5MF__close_shrink_eoa","H5MF__find_sect","H5MF__fsm_is_self_referential","H5MF__fsm_type_is_self_referential","H5MF__open_fstype","H5MF__sect_deserialize","H5MF__sect_free","H5MF__sect_large_can_merge","H5MF__sect_large_can_shrink","H5MF__sect_large_merge","H5MF__sect_large_shrink","H5MF__sect_new","H5MF__sect_simple_can_merge","H5MF__sect_simple_can_shrink","H5MF__sect_simple_merge","H5MF__sect_simple_shrink","H5MF__sect_small_add","H5MF__sect_small_can_merge","H5MF__sect_small_merge","H5MF__sect_split","H5MF__sect_valid","H5MF__sects_cb","H5MF__sects_debug_cb","H5MF__start_fstype","H5MF_aggr_vfd_alloc","H5MF_alloc","H5MF_alloc_tmp","H5MF_close","H5MF_free_aggrs","H5MF_get_free_sections","H5MF_get_freespace","H5MF_init_merge_flags","H5MF_sects_debug","H5MF_settle_meta_data_fsm","H5MF_settle_raw_data_fsm","H5MF_try_close","H5MF_try_extend","H5MF_try_shrink","H5MF_xfree","H5MM_realloc","H5MM_strdup","H5MM_strndup","H5MM_xfree","H5MM_xfree_const","H5MM_xstrdup","H5M__close_cb","H5M_init","H5M_term_package","H5M_top_term_package","H5O__add_gap.constprop.0","H5O__ainfo_copy","H5O__ainfo_copy_file","H5O__ainfo_debug","H5O__ainfo_decode","H5O__ainfo_delete","H5O__ainfo_encode","H5O__ainfo_free","H5O__ainfo_post_copy_file","H5O__ainfo_pre_copy_file","H5O__ainfo_size","H5O__alloc","H5O__alloc_chunk","H5O__alloc_find_best_null","H5O__alloc_msgs","H5O__alloc_null","H5O__are_mdc_flushes_disabled","H5O__attr_bh_info","H5O__attr_copy","H5O__attr_count_real","H5O__attr_create","H5O__attr_delete","H5O__attr_dense_info_test","H5O__attr_exists","H5O__attr_exists_cb","H5O__attr_find_opened_attr","H5O__attr_free","H5O__attr_get_crt_index","H5O__attr_iterate","H5O__attr_link","H5O__attr_open_by_idx","H5O__attr_open_by_idx_cb","H5O__attr_open_by_name","H5O__attr_open_cb","H5O__attr_pre_copy_file","H5O__attr_remove","H5O__attr_remove_by_idx","H5O__attr_remove_cb","H5O__attr_remove_update","H5O__attr_rename","H5O__attr_rename_chk_cb","H5O__attr_rename_mod_cb","H5O__attr_reset","H5O__attr_set_crt_index","H5O__attr_shared_copy_file","H5O__attr_shared_debug","H5O__attr_shared_decode","H5O__attr_shared_delete","H5O__attr_shared_encode","H5O__attr_shared_link","H5O__attr_shared_post_copy_file","H5O__attr_shared_size","H5O__attr_to_dense_cb","H5O__attr_update_shared","H5O__attr_write","H5O__attr_write_cb","H5O__btreek_copy","H5O__btreek_debug","H5O__btreek_decode","H5O__btreek_encode","H5O__btreek_size","H5O__cache_chk_deserialize","H5O__cache_chk_free_icr","H5O__cache_chk_get_initial_load_size","H5O__cache_chk_image_len","H5O__cache_chk_notify","H5O__cache_chk_serialize","H5O__cache_chk_verify_chksum","H5O__cache_deserialize","H5O__cache_free_icr","H5O__cache_get_final_load_size","H5O__cache_get_initial_load_size","H5O__cache_image_len","H5O__cache_notify","H5O__cache_serialize","H5O__cache_verify_chksum","H5O__check_msg_marked_test","H5O__chunk_add","H5O__chunk_delete","H5O__chunk_deserialize","H5O__chunk_dest","H5O__chunk_protect","H5O__chunk_resize","H5O__chunk_serialize","H5O__chunk_unprotect","H5O__chunk_update_idx","H5O__condense_header","H5O__cont_debug","H5O__cont_decode","H5O__cont_delete","H5O__cont_encode","H5O__cont_free","H5O__cont_size","H5O__copy","H5O__copy_api_common","H5O__copy_comm_dt_cmp","H5O__copy_free_addrmap_cb","H5O__copy_free_comm_dt_cb","H5O__copy_header_real","H5O__copy_obj_by_ref","H5O__copy_search_comm_dt_attr_cb","H5O__copy_search_comm_dt_cb","H5O__copy_search_comm_dt_check","H5O__debug_real","H5O__dec_rc","H5O__delete_mesg","H5O__disable_mdc_flushes","H5O__drvinfo_copy","H5O__drvinfo_debug","H5O__drvinfo_decode","H5O__drvinfo_encode","H5O__drvinfo_reset","H5O__drvinfo_size","H5O__dset_bh_info","H5O__dset_create","H5O__dset_flush","H5O__dset_free_copy_file_udata","H5O__dset_get_copy_file_udata","H5O__dset_get_oloc","H5O__dset_isa","H5O__dset_open","H5O__dtype_can_share","H5O__dtype_copy","H5O__dtype_create","H5O__dtype_debug.isra.0","H5O__dtype_decode_helper","H5O__dtype_encode_helper","H5O__dtype_encode_helper.cold","H5O__dtype_free","H5O__dtype_get_oloc","H5O__dtype_isa","H5O__dtype_open","H5O__dtype_pre_copy_file","H5O__dtype_reset","H5O__dtype_set_share","H5O__dtype_shared_copy_file","H5O__dtype_shared_debug","H5O__dtype_shared_decode","H5O__dtype_shared_delete","H5O__dtype_shared_encode","H5O__dtype_shared_link","H5O__dtype_shared_post_copy_file","H5O__dtype_shared_size","H5O__dtype_size.isra.0","H5O__efl_copy","H5O__efl_copy_file","H5O__efl_debug","H5O__efl_decode","H5O__efl_encode","H5O__efl_reset","H5O__efl_size","H5O__eliminate_gap","H5O__enable_mdc_flushes","H5O__expunge_chunks_test","H5O__fill_copy","H5O__fill_debug.constprop.0","H5O__fill_free","H5O__fill_new_shared_copy_file","H5O__fill_new_shared_debug","H5O__fill_new_shared_decode","H5O__fill_new_shared_delete","H5O__fill_new_shared_encode","H5O__fill_new_shared_link","H5O__fill_new_shared_post_copy_file","H5O__fill_new_shared_size","H5O__fill_pre_copy_file","H5O__fill_reset","H5O__fill_shared_copy_file","H5O__fill_shared_debug","H5O__fill_shared_decode","H5O__fill_shared_delete","H5O__fill_shared_encode","H5O__fill_shared_link","H5O__fill_shared_post_copy_file","H5O__fill_shared_size","H5O__flush_msgs","H5O__free","H5O__free_visit_visited","H5O__fsinfo_copy","H5O__fsinfo_debug","H5O__fsinfo_decode","H5O__fsinfo_encode","H5O__fsinfo_free","H5O__fsinfo_size","H5O__get_hdr_info_real","H5O__get_info_old","H5O__get_rc_test","H5O__ginfo_copy","H5O__ginfo_debug","H5O__ginfo_decode","H5O__ginfo_encode","H5O__ginfo_free","H5O__ginfo_size","H5O__group_bh_info","H5O__group_create","H5O__group_free_copy_file_udata","H5O__group_get_copy_file_udata","H5O__group_get_oloc","H5O__group_isa","H5O__group_open","H5O__inc_rc","H5O__is_attr_dense_test","H5O__is_attr_empty_test","H5O__iterate1_adapter","H5O__layout_copy","H5O__layout_copy_file","H5O__layout_debug","H5O__layout_decode","H5O__layout_delete","H5O__layout_encode","H5O__layout_free","H5O__layout_pre_copy_file","H5O__layout_reset","H5O__layout_reset.part.0","H5O__layout_size","H5O__linfo_copy","H5O__linfo_copy.part.0","H5O__linfo_copy_file","H5O__linfo_debug","H5O__linfo_decode","H5O__linfo_delete","H5O__linfo_encode","H5O__linfo_free","H5O__linfo_post_copy_file","H5O__linfo_post_copy_file_cb","H5O__linfo_size","H5O__link_copy","H5O__link_copy_file","H5O__link_debug","H5O__link_decode","H5O__link_encode","H5O__link_free","H5O__link_oh","H5O__link_post_copy_file","H5O__link_pre_copy_file","H5O__link_reset","H5O__link_size","H5O__mdci_copy","H5O__mdci_debug","H5O__mdci_decode","H5O__mdci_delete","H5O__mdci_encode","H5O__mdci_free","H5O__mdci_size","H5O__msg_alloc","H5O__msg_append_real","H5O__msg_copy_file","H5O__msg_count_real","H5O__msg_free_mesg","H5O__msg_get_chunkno_test","H5O__msg_iterate_real","H5O__msg_move_to_new_chunk_test","H5O__msg_remove_cb","H5O__msg_remove_real","H5O__msg_write_real","H5O__mtime_copy","H5O__mtime_debug","H5O__mtime_decode","H5O__mtime_encode","H5O__mtime_free","H5O__mtime_new_decode","H5O__mtime_new_encode","H5O__mtime_new_size","H5O__mtime_size","H5O__name_copy","H5O__name_debug","H5O__name_decode","H5O__name_encode","H5O__name_reset","H5O__name_size","H5O__num_attrs_test","H5O__obj_class","H5O__obj_class_real","H5O__open_by_addr","H5O__open_by_idx","H5O__pline_copy","H5O__pline_free","H5O__pline_pre_copy_file","H5O__pline_reset","H5O__pline_shared_copy_file","H5O__pline_shared_debug","H5O__pline_shared_decode","H5O__pline_shared_delete","H5O__pline_shared_encode","H5O__pline_shared_link","H5O__pline_shared_post_copy_file","H5O__pline_shared_size","H5O__prefix_deserialize","H5O__refcount_copy","H5O__refcount_debug","H5O__refcount_decode","H5O__refcount_encode","H5O__refcount_free","H5O__refcount_pre_copy_file","H5O__refcount_size","H5O__release_mesg","H5O__remove_empty_chunks","H5O__sdspace_copy","H5O__sdspace_free","H5O__sdspace_pre_copy_file","H5O__sdspace_reset","H5O__sdspace_shared_copy_file","H5O__sdspace_shared_debug","H5O__sdspace_shared_decode","H5O__sdspace_shared_delete","H5O__sdspace_shared_encode","H5O__sdspace_shared_link","H5O__sdspace_shared_post_copy_file","H5O__sdspace_shared_size","H5O__shared_copy_file","H5O__shared_debug","H5O__shared_decode","H5O__shared_delete","H5O__shared_encode","H5O__shared_link","H5O__shared_post_copy_file","H5O__shared_size","H5O__shmesg_copy","H5O__shmesg_debug","H5O__shmesg_decode","H5O__shmesg_encode","H5O__shmesg_size","H5O__stab_copy","H5O__stab_copy_file","H5O__stab_debug","H5O__stab_decode","H5O__stab_delete","H5O__stab_encode","H5O__stab_free","H5O__stab_post_copy_file","H5O__stab_size","H5O__unknown_free","H5O__visit","H5O__visit_cb","H5O_apply_ohdr","H5O_attr_iterate_real","H5O_close","H5O_copy_expand_ref","H5O_copy_header_map","H5O_create","H5O_create_ohdr","H5O_debug","H5O_debug_id","H5O_dec_rc_by_loc","H5O_delete","H5O_efl_total_size","H5O_fill_convert","H5O_fill_reset_dyn","H5O_fill_set_version","H5O_flush","H5O_flush_common","H5O_fsinfo_check_version","H5O_fsinfo_set_version","H5O_get_create_plist","H5O_get_hdr_info","H5O_get_info","H5O_get_loc","H5O_get_native_info","H5O_get_nlinks","H5O_get_oh_addr","H5O_get_oh_flags","H5O_get_oh_mtime","H5O_get_oh_version","H5O_get_proxy","H5O_get_rc_and_type","H5O_has_chksum","H5O_init","H5O_link","H5O_link_delete","H5O_loc_copy","H5O_loc_copy_deep","H5O_loc_copy_shallow","H5O_loc_free","H5O_loc_hold_file","H5O_loc_reset","H5O_msg_append_oh","H5O_msg_can_share","H5O_msg_can_share_in_ohdr","H5O_msg_copy","H5O_msg_count","H5O_msg_create","H5O_msg_decode","H5O_msg_delete","H5O_msg_encode","H5O_msg_exists","H5O_msg_exists_oh","H5O_msg_flush","H5O_msg_free","H5O_msg_free_real","H5O_msg_get_crt_index","H5O_msg_get_flags","H5O_msg_is_shared","H5O_msg_iterate","H5O_msg_raw_size","H5O_msg_read","H5O_msg_read_oh","H5O_msg_remove","H5O_msg_remove_op","H5O_msg_reset","H5O_msg_reset_share","H5O_msg_set_share","H5O_msg_size_f","H5O_msg_size_oh","H5O_msg_write","H5O_msg_write_oh","H5O_obj_create","H5O_obj_type","H5O_open","H5O_open_by_loc","H5O_open_name","H5O_pin","H5O_pline_set_version","H5O_protect","H5O_refresh_metadata","H5O_refresh_metadata_reopen","H5O_set_shared","H5O_touch","H5O_touch_oh","H5O_unpin","H5O_unprotect","H5Oare_mdc_flushes_disabled","H5Oclose","H5Oclose_async","H5Ocopy","H5Ocopy_async","H5Odecr_refcount","H5Odisable_mdc_flushes","H5Oenable_mdc_flushes","H5Oexists_by_name","H5Oflush","H5Oflush_async","H5Oget_comment","H5Oget_comment_by_name","H5Oget_info1","H5Oget_info2","H5Oget_info3","H5Oget_info_by_idx1","H5Oget_info_by_idx2","H5Oget_info_by_idx3","H5Oget_info_by_name1","H5Oget_info_by_name2","H5Oget_info_by_name3","H5Oget_info_by_name_async","H5Oget_native_info","H5Oget_native_info_by_idx","H5Oget_native_info_by_name","H5Oincr_refcount","H5Olink","H5Oopen","H5Oopen_async","H5Oopen_by_addr","H5Oopen_by_idx","H5Oopen_by_idx_async","H5Oopen_by_token","H5Orefresh","H5Orefresh_async","H5Oset_comment","H5Oset_comment_by_name","H5Otoken_cmp","H5Otoken_from_str","H5Otoken_to_str","H5Ovisit1","H5Ovisit2","H5Ovisit3","H5Ovisit_by_name1","H5Ovisit_by_name2","H5Ovisit_by_name3","H5PB__dest_cb","H5PB__flush_cb","H5PB__make_space","H5PB_add_new_page","H5PB_create","H5PB_dest","H5PB_enabled","H5PB_flush","H5PB_get_stats","H5PB_print_stats","H5PB_read","H5PB_remove_entry","H5PB_reset_stats","H5PB_update_entry","H5PB_write","H5PL__add_plugin","H5PL__append_path","H5PL__close","H5PL__close_path_table","H5PL__close_plugin_cache","H5PL__create_path_table","H5PL__create_plugin_cache","H5PL__find_plugin_in_cache","H5PL__find_plugin_in_path_table","H5PL__get_num_paths","H5PL__get_path","H5PL__get_plugin_control_mask","H5PL__insert_at","H5PL__insert_path","H5PL__open","H5PL__path_table_iterate","H5PL__prepend_path","H5PL__remove_path","H5PL__replace_path","H5PL__set_plugin_control_mask","H5PL_init","H5PL_iterate","H5PL_load","H5PL_term_package","H5PLappend","H5PLget","H5PLget_loading_state","H5PLinsert","H5PLprepend","H5PLremove","H5PLreplace","H5PLset_loading_state","H5PLsize","H5P__access_class","H5P__access_class.localalias","H5P__add_prop","H5P__class_get","H5P__class_set","H5P__close_class","H5P__close_class_cb","H5P__close_list_cb","H5P__cmp_class","H5P__cmp_plist","H5P__cmp_plist_cb","H5P__cmp_prop.part.0","H5P__copy_merge_comm_dt_list","H5P__copy_pclass","H5P__copy_prop_pclass","H5P__copy_prop_plist","H5P__create_class","H5P__create_prop","H5P__dacc_reg_prop","H5P__dacc_vds_view_dec","H5P__dacc_vds_view_enc","H5P__dapl_efile_pref_close","H5P__dapl_efile_pref_cmp","H5P__dapl_efile_pref_copy","H5P__dapl_efile_pref_dec","H5P__dapl_efile_pref_del","H5P__dapl_efile_pref_enc","H5P__dapl_efile_pref_get","H5P__dapl_efile_pref_set","H5P__dapl_vds_file_pref_close","H5P__dapl_vds_file_pref_cmp","H5P__dapl_vds_file_pref_copy","H5P__dapl_vds_file_pref_dec","H5P__dapl_vds_file_pref_del","H5P__dapl_vds_file_pref_enc","H5P__dapl_vds_file_pref_get","H5P__dapl_vds_file_pref_set","H5P__dcrt_ext_file_list_close","H5P__dcrt_ext_file_list_cmp","H5P__dcrt_ext_file_list_copy","H5P__dcrt_ext_file_list_dec","H5P__dcrt_ext_file_list_del","H5P__dcrt_ext_file_list_enc","H5P__dcrt_ext_file_list_get","H5P__dcrt_ext_file_list_set","H5P__dcrt_fill_value_close","H5P__dcrt_fill_value_copy","H5P__dcrt_fill_value_dec","H5P__dcrt_fill_value_del","H5P__dcrt_fill_value_enc","H5P__dcrt_fill_value_get","H5P__dcrt_fill_value_set","H5P__dcrt_layout_close","H5P__dcrt_layout_cmp","H5P__dcrt_layout_copy","H5P__dcrt_layout_dec","H5P__dcrt_layout_del","H5P__dcrt_layout_enc","H5P__dcrt_layout_get","H5P__dcrt_layout_set","H5P__dcrt_reg_prop","H5P__decode","H5P__decode_bool","H5P__decode_chunk_cache_nbytes","H5P__decode_chunk_cache_nslots","H5P__decode_coll_md_read_flag_t","H5P__decode_double","H5P__decode_hsize_t","H5P__decode_size_t","H5P__decode_uint64_t","H5P__decode_uint8_t","H5P__decode_unsigned","H5P__do_prop_cb1","H5P__dup_prop","H5P__dxfr_bkgr_buf_type_dec","H5P__dxfr_bkgr_buf_type_enc","H5P__dxfr_btree_split_ratio_dec","H5P__dxfr_btree_split_ratio_enc","H5P__dxfr_dset_io_hyp_sel_close","H5P__dxfr_dset_io_hyp_sel_cmp","H5P__dxfr_dset_io_hyp_sel_copy","H5P__dxfr_edc_dec","H5P__dxfr_edc_enc","H5P__dxfr_io_xfer_mode_dec","H5P__dxfr_io_xfer_mode_enc","H5P__dxfr_modify_write_buf_dec","H5P__dxfr_modify_write_buf_enc","H5P__dxfr_mpio_chunk_opt_hard_dec","H5P__dxfr_mpio_chunk_opt_hard_enc","H5P__dxfr_mpio_collective_opt_dec","H5P__dxfr_mpio_collective_opt_enc","H5P__dxfr_reg_prop","H5P__dxfr_selection_io_mode_dec","H5P__dxfr_selection_io_mode_enc","H5P__dxfr_xform_close","H5P__dxfr_xform_cmp","H5P__dxfr_xform_copy","H5P__dxfr_xform_dec","H5P__dxfr_xform_del","H5P__dxfr_xform_enc","H5P__dxfr_xform_get","H5P__dxfr_xform_set","H5P__encode","H5P__encode_bool","H5P__encode_cb","H5P__encode_chunk_cache_nbytes","H5P__encode_chunk_cache_nslots","H5P__encode_coll_md_read_flag_t","H5P__encode_double","H5P__encode_hsize_t","H5P__encode_size_t","H5P__encode_uint64_t","H5P__encode_uint8_t","H5P__encode_unsigned","H5P__exist_pclass","H5P__facc_cache_config_cmp","H5P__facc_cache_config_dec","H5P__facc_cache_config_enc","H5P__facc_cache_image_config_cmp","H5P__facc_cache_image_config_dec","H5P__facc_cache_image_config_enc","H5P__facc_fclose_degree_dec","H5P__facc_fclose_degree_enc","H5P__facc_file_driver_close","H5P__facc_file_driver_cmp","H5P__facc_file_driver_copy","H5P__facc_file_driver_create","H5P__facc_file_driver_del","H5P__facc_file_driver_get","H5P__facc_file_driver_set","H5P__facc_file_image_info_close","H5P__facc_file_image_info_cmp","H5P__facc_file_image_info_copy","H5P__facc_file_image_info_del","H5P__facc_file_image_info_get","H5P__facc_file_image_info_set","H5P__facc_libver_type_dec","H5P__facc_libver_type_enc","H5P__facc_mdc_log_location_close","H5P__facc_mdc_log_location_cmp","H5P__facc_mdc_log_location_copy","H5P__facc_mdc_log_location_dec","H5P__facc_mdc_log_location_del","H5P__facc_mdc_log_location_enc","H5P__facc_mpi_comm_close","H5P__facc_mpi_comm_cmp","H5P__facc_mpi_comm_copy","H5P__facc_mpi_comm_del","H5P__facc_mpi_comm_get","H5P__facc_mpi_comm_set","H5P__facc_mpi_info_close","H5P__facc_mpi_info_cmp","H5P__facc_mpi_info_copy","H5P__facc_mpi_info_del","H5P__facc_mpi_info_get","H5P__facc_mpi_info_set","H5P__facc_multi_type_dec","H5P__facc_multi_type_enc","H5P__facc_reg_prop","H5P__facc_set_def_driver","H5P__facc_vol_close","H5P__facc_vol_cmp","H5P__facc_vol_copy","H5P__facc_vol_create","H5P__facc_vol_del","H5P__facc_vol_get","H5P__facc_vol_set","H5P__fcrt_btree_rank_dec","H5P__fcrt_btree_rank_enc","H5P__fcrt_fspace_strategy_dec","H5P__fcrt_fspace_strategy_enc","H5P__fcrt_reg_prop","H5P__fcrt_shmsg_index_minsize_dec","H5P__fcrt_shmsg_index_minsize_enc","H5P__fcrt_shmsg_index_types_dec","H5P__fcrt_shmsg_index_types_enc","H5P__find_prop_plist","H5P__fmnt_reg_prop","H5P__free_del_name_cb","H5P__free_prop_cb","H5P__gcrt_group_info_dec","H5P__gcrt_group_info_enc","H5P__gcrt_link_info_dec","H5P__gcrt_link_info_enc","H5P__gcrt_reg_prop","H5P__get_cb","H5P__get_class_parent","H5P__get_class_path","H5P__get_class_path.localalias","H5P__get_class_path_test","H5P__get_filter","H5P__get_nprops_plist","H5P__get_size_pclass","H5P__get_size_plist","H5P__iterate_cb","H5P__iterate_pclass","H5P__iterate_pclass_cb","H5P__iterate_plist","H5P__iterate_plist_cb","H5P__iterate_plist_pclass_cb","H5P__lacc_elink_fapl_close","H5P__lacc_elink_fapl_cmp","H5P__lacc_elink_fapl_copy","H5P__lacc_elink_fapl_dec","H5P__lacc_elink_fapl_del","H5P__lacc_elink_fapl_enc","H5P__lacc_elink_fapl_get","H5P__lacc_elink_fapl_set","H5P__lacc_elink_pref_close","H5P__lacc_elink_pref_cmp","H5P__lacc_elink_pref_copy","H5P__lacc_elink_pref_dec","H5P__lacc_elink_pref_del","H5P__lacc_elink_pref_enc","H5P__lacc_elink_pref_get","H5P__lacc_elink_pref_set","H5P__lacc_reg_prop","H5P__lcrt_reg_prop","H5P__macc_reg_prop","H5P__mcrt_reg_prop","H5P__new_plist_of_type","H5P__ocpy_merge_comm_dt_list_close","H5P__ocpy_merge_comm_dt_list_cmp","H5P__ocpy_merge_comm_dt_list_copy","H5P__ocpy_merge_comm_dt_list_dec","H5P__ocpy_merge_comm_dt_list_del","H5P__ocpy_merge_comm_dt_list_enc","H5P__ocpy_merge_comm_dt_list_enc.cold","H5P__ocpy_merge_comm_dt_list_get","H5P__ocpy_merge_comm_dt_list_set","H5P__ocpy_reg_prop","H5P__ocrt_pipeline_close","H5P__ocrt_pipeline_cmp","H5P__ocrt_pipeline_copy","H5P__ocrt_pipeline_dec","H5P__ocrt_pipeline_del","H5P__ocrt_pipeline_enc","H5P__ocrt_pipeline_get","H5P__ocrt_pipeline_set","H5P__ocrt_reg_prop","H5P__open_class_path","H5P__open_class_path_cb","H5P__open_class_path_test","H5P__register","H5P__register_real","H5P__set_layout","H5P__strcrt_char_encoding_dec","H5P__strcrt_char_encoding_enc","H5P__strcrt_reg_prop","H5P__unregister","H5P_class_isa","H5P_close","H5P_copy_plist","H5P_create_id","H5P_exist_plist","H5P_fill_value_cmp","H5P_fill_value_defined","H5P_filter_in_pline","H5P_get","H5P_get_class","H5P_get_class_name","H5P_get_fill_value","H5P_get_filter_by_id","H5P_get_nprops_pclass","H5P_get_plist_id","H5P_ignore_cmp","H5P_init_phase1","H5P_init_phase2","H5P_insert","H5P_is_fill_value_defined","H5P_isa_class","H5P_modify_filter","H5P_object_verify","H5P_peek","H5P_peek_driver","H5P_peek_driver_config_str","H5P_peek_driver_info","H5P_poke","H5P_remove","H5P_reset_vol_class","H5P_set","H5P_set_driver","H5P_set_driver_by_name","H5P_set_driver_by_value","H5P_set_vlen_mem_manager","H5P_set_vol","H5P_term_package","H5Padd_merge_committed_dtype_path","H5Pall_filters_avail","H5Pclose","H5Pclose_class","H5Pcopy","H5Pcopy_prop","H5Pcreate","H5Pcreate_class","H5Pdecode","H5Pencode1","H5Pencode2","H5Pequal","H5Pexist","H5Pfill_value_defined","H5Pfree_merge_committed_dtype_paths","H5Pget","H5Pget_actual_selection_io_mode","H5Pget_alignment","H5Pget_all_coll_metadata_ops","H5Pget_alloc_time","H5Pget_append_flush","H5Pget_attr_creation_order","H5Pget_attr_phase_change","H5Pget_btree_ratios","H5Pget_buffer","H5Pget_cache","H5Pget_char_encoding","H5Pget_chunk","H5Pget_chunk_cache","H5Pget_chunk_opts","H5Pget_class","H5Pget_class_name","H5Pget_class_parent","H5Pget_coll_metadata_write","H5Pget_copy_object","H5Pget_core_write_tracking","H5Pget_create_intermediate_group","H5Pget_data_transform","H5Pget_driver","H5Pget_driver_config_str","H5Pget_driver_info","H5Pget_dset_no_attrs_hint","H5Pget_dxpl_mpio","H5Pget_edc_check","H5Pget_efile_prefix","H5Pget_elink_acc_flags","H5Pget_elink_cb","H5Pget_elink_fapl","H5Pget_elink_file_cache_size","H5Pget_elink_prefix","H5Pget_est_link_info","H5Pget_evict_on_close","H5Pget_external","H5Pget_external_count","H5Pget_family_offset","H5Pget_fapl_core","H5Pget_fapl_family","H5Pget_fapl_mpio","H5Pget_fapl_multi","H5Pget_fapl_onion","H5Pget_fapl_splitter","H5Pget_fclose_degree","H5Pget_file_image","H5Pget_file_image_callbacks","H5Pget_file_locking","H5Pget_file_space","H5Pget_file_space_page_size","H5Pget_file_space_strategy","H5Pget_fill_time","H5Pget_fill_value","H5Pget_filter1","H5Pget_filter2","H5Pget_filter_by_id1","H5Pget_filter_by_id2","H5Pget_gc_references","H5Pget_hyper_vector_size","H5Pget_istore_k","H5Pget_layout","H5Pget_libver_bounds","H5Pget_link_creation_order","H5Pget_link_phase_change","H5Pget_local_heap_size_hint","H5Pget_mcdt_search_cb","H5Pget_mdc_config","H5Pget_mdc_image_config","H5Pget_mdc_log_options","H5Pget_meta_block_size","H5Pget_metadata_read_attempts","H5Pget_modify_write_buf","H5Pget_mpi_params","H5Pget_mpio_actual_chunk_opt_mode","H5Pget_mpio_actual_io_mode","H5Pget_mpio_no_collective_cause","H5Pget_multi_type","H5Pget_nfilters","H5Pget_nlinks","H5Pget_no_selection_io_cause","H5Pget_nprops","H5Pget_obj_track_times","H5Pget_object_flush_cb","H5Pget_page_buffer_size","H5Pget_preserve","H5Pget_relax_file_integrity_checks","H5Pget_selection_io","H5Pget_shared_mesg_index","H5Pget_shared_mesg_nindexes","H5Pget_shared_mesg_phase_change","H5Pget_sieve_buf_size","H5Pget_size","H5Pget_sizes","H5Pget_small_data_block_size","H5Pget_sym_k","H5Pget_type_conv_cb","H5Pget_userblock","H5Pget_version","H5Pget_virtual_count","H5Pget_virtual_dsetname","H5Pget_virtual_filename","H5Pget_virtual_prefix","H5Pget_virtual_printf_gap","H5Pget_virtual_srcspace","H5Pget_virtual_view","H5Pget_virtual_vspace","H5Pget_vlen_mem_manager","H5Pget_vol_cap_flags","H5Pget_vol_id","H5Pget_vol_info","H5Pinsert1","H5Pinsert2","H5Pisa_class","H5Piterate","H5Pmodify_filter","H5Pregister1","H5Pregister2","H5Premove","H5Premove_filter","H5Pset","H5Pset_alignment","H5Pset_all_coll_metadata_ops","H5Pset_alloc_time","H5Pset_append_flush","H5Pset_attr_creation_order","H5Pset_attr_phase_change","H5Pset_btree_ratios","H5Pset_buffer","H5Pset_cache","H5Pset_char_encoding","H5Pset_chunk","H5Pset_chunk_cache","H5Pset_chunk_opts","H5Pset_coll_metadata_write","H5Pset_copy_object","H5Pset_core_write_tracking","H5Pset_create_intermediate_group","H5Pset_data_transform","H5Pset_dataset_io_hyperslab_selection","H5Pset_deflate","H5Pset_driver","H5Pset_driver_by_name","H5Pset_driver_by_value","H5Pset_dset_no_attrs_hint","H5Pset_dxpl_mpio","H5Pset_dxpl_mpio_chunk_opt","H5Pset_dxpl_mpio_chunk_opt_num","H5Pset_dxpl_mpio_chunk_opt_ratio","H5Pset_dxpl_mpio_collective_opt","H5Pset_edc_check","H5Pset_efile_prefix","H5Pset_elink_acc_flags","H5Pset_elink_cb","H5Pset_elink_fapl","H5Pset_elink_file_cache_size","H5Pset_elink_prefix","H5Pset_est_link_info","H5Pset_evict_on_close","H5Pset_external","H5Pset_family_offset","H5Pset_fapl_core","H5Pset_fapl_family","H5Pset_fapl_log","H5Pset_fapl_mpio","H5Pset_fapl_multi","H5Pset_fapl_onion","H5Pset_fapl_sec2","H5Pset_fapl_split","H5Pset_fapl_splitter","H5Pset_fapl_stdio","H5Pset_fclose_degree","H5Pset_file_image","H5Pset_file_image_callbacks","H5Pset_file_locking","H5Pset_file_space","H5Pset_file_space_page_size","H5Pset_file_space_strategy","H5Pset_fill_time","H5Pset_fill_value","H5Pset_filter","H5Pset_filter_callback","H5Pset_fletcher32","H5Pset_gc_references","H5Pset_hyper_vector_size","H5Pset_istore_k","H5Pset_layout","H5Pset_libver_bounds","H5Pset_link_creation_order","H5Pset_link_phase_change","H5Pset_local_heap_size_hint","H5Pset_mcdt_search_cb","H5Pset_mdc_config","H5Pset_mdc_image_config","H5Pset_mdc_log_options","H5Pset_meta_block_size","H5Pset_metadata_read_attempts","H5Pset_modify_write_buf","H5Pset_mpi_params","H5Pset_multi_type","H5Pset_nbit","H5Pset_nlinks","H5Pset_obj_track_times","H5Pset_object_flush_cb","H5Pset_page_buffer_size","H5Pset_preserve","H5Pset_relax_file_integrity_checks","H5Pset_scaleoffset","H5Pset_selection_io","H5Pset_shared_mesg_index","H5Pset_shared_mesg_nindexes","H5Pset_shared_mesg_phase_change","H5Pset_shuffle","H5Pset_sieve_buf_size","H5Pset_sizes","H5Pset_small_data_block_size","H5Pset_sym_k","H5Pset_szip","H5Pset_type_conv_cb","H5Pset_userblock","H5Pset_virtual","H5Pset_virtual_prefix","H5Pset_virtual_printf_gap","H5Pset_virtual_view","H5Pset_vlen_mem_manager","H5Pset_vol","H5Punregister","H5RS__prepare_for_append","H5RS__resize_for_append.part.0","H5RS_acat","H5RS_ancat","H5RS_aputc","H5RS_asprintf_cat","H5RS_cmp","H5RS_create","H5RS_decr","H5RS_dup","H5RS_get_count","H5RS_get_str","H5RS_incr","H5RS_len","H5RS_wrap","H5R__copy","H5R__create_attr","H5R__create_object","H5R__create_region","H5R__decode","H5R__decode_heap","H5R__decode_string","H5R__decode_token_compat","H5R__decode_token_obj_compat","H5R__decode_token_region_compat","H5R__destroy","H5R__encode","H5R__encode_heap","H5R__encode_token_obj_compat","H5R__equal","H5R__get_attr_name","H5R__get_file_name","H5R__get_loc_id","H5R__get_obj_token","H5R__get_region","H5R__get_type","H5R__open_attr_api_common","H5R__open_object_api_common","H5R__open_region_api_common","H5R__reopen_file","H5R__set_loc_id","H5R__set_obj_token","H5R_init","H5Rcopy","H5Rcreate","H5Rcreate_attr","H5Rcreate_object","H5Rcreate_region","H5Rdereference1","H5Rdereference2","H5Rdestroy","H5Requal","H5Rget_attr_name","H5Rget_file_name","H5Rget_name","H5Rget_obj_name","H5Rget_obj_type1","H5Rget_obj_type2","H5Rget_obj_type3","H5Rget_region","H5Rget_type","H5Ropen_attr","H5Ropen_attr_async","H5Ropen_object","H5Ropen_object_async","H5Ropen_region","H5Ropen_region_async","H5SL__insert_common","H5SL__insert_common.cold","H5SL__release_common","H5SL_below","H5SL_close","H5SL_count","H5SL_create","H5SL_destroy","H5SL_find","H5SL_find.cold","H5SL_first","H5SL_free","H5SL_greater","H5SL_init","H5SL_insert","H5SL_item","H5SL_iterate","H5SL_last","H5SL_less","H5SL_next","H5SL_prev","H5SL_release","H5SL_remove","H5SL_remove.cold","H5SL_remove_first","H5SL_search","H5SL_search.cold","H5SL_term_package","H5SM__bt2_convert_to_list_op","H5SM__bt2_crt_context","H5SM__bt2_debug","H5SM__bt2_dst_context","H5SM__bt2_store","H5SM__cache_list_deserialize","H5SM__cache_list_free_icr","H5SM__cache_list_get_initial_load_size","H5SM__cache_list_image_len","H5SM__cache_list_serialize","H5SM__cache_list_verify_chksum","H5SM__cache_table_deserialize","H5SM__cache_table_free_icr","H5SM__cache_table_get_initial_load_size","H5SM__cache_table_image_len","H5SM__cache_table_serialize","H5SM__cache_table_verify_chksum","H5SM__compare_cb","H5SM__compare_iter_op","H5SM__create_list","H5SM__decr_ref","H5SM__delete_index","H5SM__get_index","H5SM__get_mesg_count_test","H5SM__get_refcount_bt2_cb","H5SM__incr_ref","H5SM__list_free","H5SM__message_compare","H5SM__message_decode","H5SM__message_encode","H5SM__read_iter_op","H5SM__read_mesg","H5SM__read_mesg_fh_cb","H5SM__table_free","H5SM_can_share","H5SM_delete","H5SM_get_fheap_addr","H5SM_get_info","H5SM_get_refcount","H5SM_ih_size","H5SM_init","H5SM_list_debug","H5SM_reconstitute","H5SM_table_debug","H5SM_try_share","H5SM_type_shared","H5S__all_adjust_s","H5S__all_adjust_u","H5S__all_bounds","H5S__all_copy","H5S__all_deserialize","H5S__all_intersect_block","H5S__all_is_contiguous","H5S__all_is_regular","H5S__all_is_single","H5S__all_is_valid","H5S__all_iter_block","H5S__all_iter_coords","H5S__all_iter_get_seq_list","H5S__all_iter_has_next_block","H5S__all_iter_init","H5S__all_iter_nelmts","H5S__all_iter_next","H5S__all_iter_next_block","H5S__all_iter_release","H5S__all_offset","H5S__all_project_scalar","H5S__all_project_simple","H5S__all_release","H5S__all_serial_size","H5S__all_serialize","H5S__all_shape_same","H5S__all_unlim_dim","H5S__check_internal_consistency","H5S__check_spans_overlap","H5S__check_spans_tail_ptr","H5S__close_cb","H5S__combine_select","H5S__copy_pnt_list","H5S__extent_copy_real","H5S__extent_release","H5S__fill_in_new_space","H5S__fill_in_select","H5S__generate_hyperslab","H5S__get_diminfo_status_test","H5S__get_rebuild_status_test","H5S__get_select_hyper_blocklist","H5S__hyper_add_disjoint_spans","H5S__hyper_add_span_element_helper.constprop.0","H5S__hyper_adjust_s","H5S__hyper_adjust_s_helper.constprop.0","H5S__hyper_adjust_u","H5S__hyper_adjust_u_helper.constprop.0","H5S__hyper_append_span","H5S__hyper_append_span.constprop.0","H5S__hyper_bounds","H5S__hyper_clip_spans.constprop.0","H5S__hyper_cmp_spans.part.0","H5S__hyper_coord_to_span","H5S__hyper_copy","H5S__hyper_copy_span_helper.part.0","H5S__hyper_deserialize","H5S__hyper_free_span_info","H5S__hyper_generate_spans","H5S__hyper_get_op_gen","H5S__hyper_get_version_enc_size","H5S__hyper_intersect_block","H5S__hyper_intersect_block_helper.constprop.0","H5S__hyper_is_contiguous","H5S__hyper_is_regular","H5S__hyper_is_single","H5S__hyper_is_valid","H5S__hyper_iter_block","H5S__hyper_iter_coords","H5S__hyper_iter_get_seq_list","H5S__hyper_iter_get_seq_list_opt","H5S__hyper_iter_get_seq_list_single","H5S__hyper_iter_has_next_block","H5S__hyper_iter_init","H5S__hyper_iter_nelmts","H5S__hyper_iter_next","H5S__hyper_iter_next_block","H5S__hyper_iter_release","H5S__hyper_make_spans","H5S__hyper_merge_spans_helper","H5S__hyper_new_span.part.0","H5S__hyper_new_span_info.part.0","H5S__hyper_num_elem_non_unlim","H5S__hyper_offset","H5S__hyper_proj_int_build_proj","H5S__hyper_proj_int_iterate","H5S__hyper_project_intersection","H5S__hyper_project_scalar","H5S__hyper_project_simple","H5S__hyper_rebuild","H5S__hyper_rebuild_helper","H5S__hyper_release","H5S__hyper_serial_size","H5S__hyper_serialize","H5S__hyper_serialize_helper","H5S__hyper_shape_same","H5S__hyper_span_blocklist","H5S__hyper_span_nblocks_helper.constprop.0","H5S__hyper_spans_nelem_helper.part.0.constprop.0","H5S__hyper_spans_shape_same","H5S__hyper_spans_shape_same_helper","H5S__hyper_unlim_dim","H5S__hyper_update_diminfo","H5S__internal_consistency_test","H5S__modify_select","H5S__mpio_create_point_datatype","H5S__mpio_reg_hyper_type","H5S__mpio_span_hyper_type","H5S__none_adjust_s","H5S__none_adjust_u","H5S__none_bounds","H5S__none_copy","H5S__none_deserialize","H5S__none_intersect_block","H5S__none_is_contiguous","H5S__none_is_regular","H5S__none_is_single","H5S__none_is_valid","H5S__none_iter_block","H5S__none_iter_coords","H5S__none_iter_get_seq_list","H5S__none_iter_has_next_block","H5S__none_iter_init","H5S__none_iter_nelmts","H5S__none_iter_next","H5S__none_iter_next_block","H5S__none_iter_release","H5S__none_offset","H5S__none_project_scalar","H5S__none_project_simple","H5S__none_release","H5S__none_serial_size","H5S__none_serialize","H5S__none_shape_same","H5S__none_unlim_dim","H5S__obtain_datatype.constprop.0","H5S__point_adjust_s","H5S__point_adjust_u","H5S__point_bounds","H5S__point_copy","H5S__point_deserialize","H5S__point_get_version_enc_size","H5S__point_intersect_block","H5S__point_is_contiguous","H5S__point_is_regular","H5S__point_is_single","H5S__point_is_valid","H5S__point_iter_block","H5S__point_iter_coords","H5S__point_iter_get_seq_list","H5S__point_iter_has_next_block","H5S__point_iter_init","H5S__point_iter_nelmts","H5S__point_iter_next","H5S__point_iter_next_block","H5S__point_iter_release","H5S__point_offset","H5S__point_project_scalar","H5S__point_project_simple","H5S__point_release","H5S__point_serial_size","H5S__point_serialize","H5S__point_shape_same","H5S__point_unlim_dim","H5S__sel_iter_close_cb","H5S__set_regular_hyperslab","H5S__verify_offsets","H5S_append","H5S_close","H5S_combine_hyperslab","H5S_copy","H5S_create","H5S_create_simple","H5S_debug","H5S_decode","H5S_encode","H5S_extent_copy","H5S_extent_equal","H5S_extent_get_dims","H5S_extent_nelem","H5S_get_npoints_max","H5S_get_select_bounds","H5S_get_select_npoints","H5S_get_select_num_elem_non_unlim","H5S_get_select_offset","H5S_get_select_type","H5S_get_select_unlim_dim","H5S_get_simple_extent","H5S_get_simple_extent_dims","H5S_get_simple_extent_ndims","H5S_get_simple_extent_npoints","H5S_get_simple_extent_type","H5S_has_extent","H5S_hyper_add_span_element","H5S_hyper_clip_unlim","H5S_hyper_denormalize_offset","H5S_hyper_get_clip_extent","H5S_hyper_get_clip_extent_match","H5S_hyper_get_first_inc_block","H5S_hyper_get_unlim_block","H5S_hyper_normalize_offset","H5S_init","H5S_mpio_space_type","H5S_read","H5S_sel_iter_close","H5S_select_adjust_s","H5S_select_adjust_u","H5S_select_all","H5S_select_construct_projection","H5S_select_contig_block","H5S_select_copy","H5S_select_deserialize","H5S_select_elements","H5S_select_fill","H5S_select_hyperslab","H5S_select_hyperslab.localalias","H5S_select_intersect_block","H5S_select_is_contiguous","H5S_select_is_regular","H5S_select_is_single","H5S_select_iter_coords","H5S_select_iter_get_seq_list","H5S_select_iter_init","H5S_select_iter_nelmts","H5S_select_iter_next","H5S_select_iter_release","H5S_select_iterate","H5S_select_none","H5S_select_offset","H5S_select_project_intersection","H5S_select_project_scalar","H5S_select_project_simple","H5S_select_release","H5S_select_serial_size","H5S_select_serialize","H5S_select_shape_same","H5S_select_subtract","H5S_select_valid","H5S_set_extent","H5S_set_extent_real","H5S_set_extent_simple","H5S_set_version","H5S_term_package","H5S_top_term_package","H5S_write","H5Sclose","H5Scombine_hyperslab","H5Scombine_select","H5Scopy","H5Screate","H5Screate_simple","H5Sdecode","H5Sencode1","H5Sencode2","H5Sextent_copy","H5Sextent_equal","H5Sget_regular_hyperslab","H5Sget_select_bounds","H5Sget_select_elem_npoints","H5Sget_select_elem_pointlist","H5Sget_select_hyper_blocklist","H5Sget_select_hyper_nblocks","H5Sget_select_npoints","H5Sget_select_type","H5Sget_simple_extent_dims","H5Sget_simple_extent_ndims","H5Sget_simple_extent_npoints","H5Sget_simple_extent_type","H5Sis_regular_hyperslab","H5Sis_simple","H5Smodify_select","H5Soffset_simple","H5Ssel_iter_close","H5Ssel_iter_create","H5Ssel_iter_get_seq_list","H5Ssel_iter_reset","H5Sselect_adjust","H5Sselect_all","H5Sselect_copy","H5Sselect_elements","H5Sselect_hyperslab","H5Sselect_intersect_block","H5Sselect_none","H5Sselect_project_intersection","H5Sselect_shape_same","H5Sselect_valid","H5Sset_extent_none","H5Sset_extent_simple","H5T__alloc","H5T__array_create","H5T__bit_cmp.constprop.0","H5T__bit_copy","H5T__bit_dec","H5T__bit_find","H5T__bit_get_d","H5T__bit_inc","H5T__bit_neg","H5T__bit_set","H5T__bit_set_d","H5T__bit_shift","H5T__close_cb","H5T__commit","H5T__commit_anon","H5T__commit_api_common","H5T__commit_named","H5T__complete_copy","H5T__conv_array","H5T__conv_b_b","H5T__conv_double_float","H5T__conv_double_int","H5T__conv_double_ldouble","H5T__conv_double_ldouble.cold","H5T__conv_double_llong","H5T__conv_double_long","H5T__conv_double_schar","H5T__conv_double_short","H5T__conv_double_uchar","H5T__conv_double_uint","H5T__conv_double_ullong","H5T__conv_double_ulong","H5T__conv_double_ushort","H5T__conv_enum","H5T__conv_enum_free.part.0","H5T__conv_enum_init","H5T__conv_enum_numeric","H5T__conv_f_f","H5T__conv_f_i","H5T__conv_float_double","H5T__conv_float_double.cold","H5T__conv_float_int","H5T__conv_float_ldouble","H5T__conv_float_ldouble.cold","H5T__conv_float_llong","H5T__conv_float_long","H5T__conv_float_schar","H5T__conv_float_short","H5T__conv_float_uchar","H5T__conv_float_uint","H5T__conv_float_ullong","H5T__conv_float_ulong","H5T__conv_float_ushort","H5T__conv_i_f","H5T__conv_i_i","H5T__conv_int_double","H5T__conv_int_float","H5T__conv_int_ldouble","H5T__conv_int_llong","H5T__conv_int_llong.cold","H5T__conv_int_long","H5T__conv_int_long.cold","H5T__conv_int_schar","H5T__conv_int_short","H5T__conv_int_uchar","H5T__conv_int_uint","H5T__conv_int_ullong","H5T__conv_int_ulong","H5T__conv_int_ushort","H5T__conv_ldouble_double","H5T__conv_ldouble_float","H5T__conv_ldouble_int","H5T__conv_ldouble_llong","H5T__conv_ldouble_long","H5T__conv_ldouble_schar","H5T__conv_ldouble_short","H5T__conv_ldouble_uchar","H5T__conv_ldouble_uint","H5T__conv_ldouble_ullong","H5T__conv_ldouble_ulong","H5T__conv_ldouble_ushort","H5T__conv_llong_double","H5T__conv_llong_float","H5T__conv_llong_int","H5T__conv_llong_ldouble","H5T__conv_llong_long","H5T__conv_llong_schar","H5T__conv_llong_short","H5T__conv_llong_uchar","H5T__conv_llong_uint","H5T__conv_llong_ullong","H5T__conv_llong_ulong","H5T__conv_llong_ushort","H5T__conv_long_double","H5T__conv_long_float","H5T__conv_long_int","H5T__conv_long_ldouble","H5T__conv_long_llong","H5T__conv_long_schar","H5T__conv_long_short","H5T__conv_long_uchar","H5T__conv_long_uint","H5T__conv_long_ullong","H5T__conv_long_ulong","H5T__conv_long_ushort","H5T__conv_noop","H5T__conv_order","H5T__conv_order_opt","H5T__conv_ref","H5T__conv_s_s","H5T__conv_schar_double","H5T__conv_schar_float","H5T__conv_schar_int","H5T__conv_schar_int.cold","H5T__conv_schar_ldouble","H5T__conv_schar_llong","H5T__conv_schar_llong.cold","H5T__conv_schar_long","H5T__conv_schar_long.cold","H5T__conv_schar_short","H5T__conv_schar_short.cold","H5T__conv_schar_uchar","H5T__conv_schar_uint","H5T__conv_schar_ullong","H5T__conv_schar_ulong","H5T__conv_schar_ushort","H5T__conv_short_double","H5T__conv_short_float","H5T__conv_short_int","H5T__conv_short_int.cold","H5T__conv_short_ldouble","H5T__conv_short_llong","H5T__conv_short_llong.cold","H5T__conv_short_long","H5T__conv_short_long.cold","H5T__conv_short_schar","H5T__conv_short_uchar","H5T__conv_short_uint","H5T__conv_short_ullong","H5T__conv_short_ulong","H5T__conv_short_ushort","H5T__conv_struct","H5T__conv_struct_free","H5T__conv_struct_init","H5T__conv_struct_opt","H5T__conv_struct_subset","H5T__conv_uchar_double","H5T__conv_uchar_float","H5T__conv_uchar_int","H5T__conv_uchar_int.cold","H5T__conv_uchar_ldouble","H5T__conv_uchar_llong","H5T__conv_uchar_llong.cold","H5T__conv_uchar_long","H5T__conv_uchar_long.cold","H5T__conv_uchar_schar","H5T__conv_uchar_short","H5T__conv_uchar_short.cold","H5T__conv_uchar_uint","H5T__conv_uchar_uint.cold","H5T__conv_uchar_ullong","H5T__conv_uchar_ullong.cold","H5T__conv_uchar_ulong","H5T__conv_uchar_ulong.cold","H5T__conv_uchar_ushort","H5T__conv_uchar_ushort.cold","H5T__conv_uint_double","H5T__conv_uint_float","H5T__conv_uint_int","H5T__conv_uint_ldouble","H5T__conv_uint_llong","H5T__conv_uint_llong.cold","H5T__conv_uint_long","H5T__conv_uint_long.cold","H5T__conv_uint_schar","H5T__conv_uint_short","H5T__conv_uint_uchar","H5T__conv_uint_ullong","H5T__conv_uint_ullong.cold","H5T__conv_uint_ulong","H5T__conv_uint_ulong.cold","H5T__conv_uint_ushort","H5T__conv_ullong_double","H5T__conv_ullong_float","H5T__conv_ullong_int","H5T__conv_ullong_ldouble","H5T__conv_ullong_llong","H5T__conv_ullong_long","H5T__conv_ullong_schar","H5T__conv_ullong_short","H5T__conv_ullong_uchar","H5T__conv_ullong_uint","H5T__conv_ullong_ulong","H5T__conv_ullong_ushort","H5T__conv_ulong_double","H5T__conv_ulong_float","H5T__conv_ulong_int","H5T__conv_ulong_ldouble","H5T__conv_ulong_llong","H5T__conv_ulong_long","H5T__conv_ulong_schar","H5T__conv_ulong_short","H5T__conv_ulong_uchar","H5T__conv_ulong_uint","H5T__conv_ulong_ullong","H5T__conv_ulong_ushort","H5T__conv_ushort_double","H5T__conv_ushort_float","H5T__conv_ushort_int","H5T__conv_ushort_int.cold","H5T__conv_ushort_ldouble","H5T__conv_ushort_llong","H5T__conv_ushort_llong.cold","H5T__conv_ushort_long","H5T__conv_ushort_long.cold","H5T__conv_ushort_schar","H5T__conv_ushort_short","H5T__conv_ushort_uchar","H5T__conv_ushort_uint","H5T__conv_ushort_uint.cold","H5T__conv_ushort_ullong","H5T__conv_ushort_ullong.cold","H5T__conv_ushort_ulong","H5T__conv_ushort_ulong.cold","H5T__conv_vlen","H5T__conv_vlen_nested_free","H5T__copy_all","H5T__copy_transient","H5T__create","H5T__detect_vlen_ref","H5T__enum_create","H5T__enum_insert","H5T__free","H5T__get_array_dims","H5T__get_array_ndims","H5T__get_create_plist","H5T__get_member_name","H5T__get_member_size","H5T__get_member_value","H5T__get_native_type","H5T__get_path_table_npaths","H5T__init_native_float_types","H5T__init_native_internal","H5T__initiate_copy","H5T__insert","H5T__open_api_common","H5T__open_name","H5T__pack","H5T__path_find_real","H5T__path_free","H5T__print_path_stats","H5T__ref_disk_getsize","H5T__ref_disk_isnull","H5T__ref_disk_read","H5T__ref_disk_setnull","H5T__ref_disk_write","H5T__ref_dsetreg_disk_getsize","H5T__ref_dsetreg_disk_isnull","H5T__ref_dsetreg_disk_read","H5T__ref_mem_getsize","H5T__ref_mem_isnull","H5T__ref_mem_read","H5T__ref_mem_setnull","H5T__ref_mem_write","H5T__ref_obj_disk_getsize","H5T__ref_obj_disk_isnull","H5T__ref_obj_disk_read","H5T__ref_reclaim","H5T__ref_set_loc","H5T__register","H5T__register_int","H5T__reverse_order","H5T__set_offset","H5T__set_order","H5T__set_precision","H5T__set_size","H5T__sort_name","H5T__sort_value","H5T__unlock_cb","H5T__update_packed","H5T__upgrade_version","H5T__upgrade_version_cb","H5T__visit","H5T__visit.localalias","H5T__vlen_create","H5T__vlen_disk_delete","H5T__vlen_disk_delete.part.0","H5T__vlen_disk_getlen","H5T__vlen_disk_isnull","H5T__vlen_disk_read","H5T__vlen_disk_setnull","H5T__vlen_disk_write","H5T__vlen_mem_seq_getlen","H5T__vlen_mem_seq_getptr","H5T__vlen_mem_seq_isnull","H5T__vlen_mem_seq_read","H5T__vlen_mem_seq_setnull","H5T__vlen_mem_seq_write","H5T__vlen_mem_str_getlen","H5T__vlen_mem_str_getptr","H5T__vlen_mem_str_isnull","H5T__vlen_mem_str_read","H5T__vlen_mem_str_setnull","H5T__vlen_mem_str_write","H5T__vlen_reclaim","H5T__vlen_set_loc","H5T_already_vol_managed","H5T_close","H5T_close_real","H5T_cmp","H5T_cmp.localalias","H5T_construct_datatype","H5T_convert","H5T_convert_committed_datatype","H5T_convert_with_ctx","H5T_copy","H5T_copy_reopen","H5T_debug","H5T_debug.cold","H5T_debug.localalias","H5T_decode","H5T_detect_class","H5T_detect_class.localalias","H5T_encode","H5T_get_actual_type","H5T_get_class","H5T_get_force_conv","H5T_get_member_offset","H5T_get_member_type","H5T_get_named_type","H5T_get_nmembers","H5T_get_offset","H5T_get_order","H5T_get_order.localalias","H5T_get_precision","H5T_get_ref_type","H5T_get_sign","H5T_get_size","H5T_get_super","H5T_init","H5T_invoke_vol_optional","H5T_is_immutable","H5T_is_named","H5T_is_numeric_with_unusual_unused_bits","H5T_is_relocatable","H5T_is_sensible","H5T_is_variable_str","H5T_is_vl_storage","H5T_link","H5T_lock","H5T_nameof","H5T_noop_conv","H5T_oloc","H5T_open","H5T_own_vol_obj","H5T_patch_file","H5T_patch_vlen_file","H5T_path_bkg","H5T_path_compound_subset","H5T_path_find","H5T_path_match_find_type_with_volobj","H5T_path_noop","H5T_reclaim","H5T_reclaim_cb","H5T_restore_refresh_state","H5T_save_refresh_state","H5T_set_loc","H5T_set_loc.localalias","H5T_set_version","H5T_term_package","H5T_top_term_package","H5T_unregister","H5T_update_shared","H5T_vlen_reclaim_elmt","H5Tarray_create1","H5Tarray_create2","H5Tclose","H5Tclose_async","H5Tcommit1","H5Tcommit2","H5Tcommit_anon","H5Tcommit_async","H5Tcommitted","H5Tcompiler_conv","H5Tconvert","H5Tcopy","H5Tcreate","H5Tdecode","H5Tdetect_class","H5Tencode","H5Tenum_create","H5Tenum_insert","H5Tenum_nameof","H5Tenum_valueof","H5Tequal","H5Tfind","H5Tflush","H5Tget_array_dims1","H5Tget_array_dims2","H5Tget_array_ndims","H5Tget_class","H5Tget_create_plist","H5Tget_cset","H5Tget_ebias","H5Tget_fields","H5Tget_inpad","H5Tget_member_class","H5Tget_member_index","H5Tget_member_name","H5Tget_member_offset","H5Tget_member_type","H5Tget_member_value","H5Tget_native_type","H5Tget_nmembers","H5Tget_norm","H5Tget_offset","H5Tget_order","H5Tget_pad","H5Tget_precision","H5Tget_sign","H5Tget_size","H5Tget_strpad","H5Tget_super","H5Tget_tag","H5Tinsert","H5Tis_variable_str","H5Tlock","H5Topen1","H5Topen2","H5Topen_async","H5Tpack","H5Treclaim","H5Trefresh","H5Tregister","H5Tset_cset","H5Tset_ebias","H5Tset_fields","H5Tset_inpad","H5Tset_norm","H5Tset_offset","H5Tset_order","H5Tset_pad","H5Tset_precision","H5Tset_sign","H5Tset_size","H5Tset_strpad","H5Tset_tag","H5Tunregister","H5Tvlen_create","H5UC_create","H5UC_decr","H5VL__connector_str_to_info","H5VL__file_open_find_connector_cb","H5VL__find_opt_operation","H5VL__free_cls","H5VL__get_connector_cb","H5VL__get_connector_id","H5VL__get_connector_id_by_name","H5VL__get_connector_id_by_value","H5VL__get_connector_name","H5VL__is_connector_registered_by_name","H5VL__is_connector_registered_by_value","H5VL__is_default_conn","H5VL__native_attr_close","H5VL__native_attr_create","H5VL__native_attr_get","H5VL__native_attr_open","H5VL__native_attr_optional","H5VL__native_attr_read","H5VL__native_attr_specific","H5VL__native_attr_write","H5VL__native_blob_get","H5VL__native_blob_put","H5VL__native_blob_specific","H5VL__native_dataset_close","H5VL__native_dataset_create","H5VL__native_dataset_get","H5VL__native_dataset_io_cleanup","H5VL__native_dataset_io_setup","H5VL__native_dataset_open","H5VL__native_dataset_optional","H5VL__native_dataset_read","H5VL__native_dataset_specific","H5VL__native_dataset_write","H5VL__native_datatype_close","H5VL__native_datatype_commit","H5VL__native_datatype_get","H5VL__native_datatype_open","H5VL__native_datatype_specific","H5VL__native_file_close","H5VL__native_file_create","H5VL__native_file_get","H5VL__native_file_open","H5VL__native_file_optional","H5VL__native_file_specific","H5VL__native_get_file_addr_len","H5VL__native_group_close","H5VL__native_group_create","H5VL__native_group_get","H5VL__native_group_open","H5VL__native_group_optional","H5VL__native_group_specific","H5VL__native_introspect_get_cap_flags","H5VL__native_introspect_get_conn_cls","H5VL__native_introspect_opt_query","H5VL__native_link_copy","H5VL__native_link_create","H5VL__native_link_get","H5VL__native_link_move","H5VL__native_link_specific","H5VL__native_object_copy","H5VL__native_object_get","H5VL__native_object_open","H5VL__native_object_optional","H5VL__native_object_specific","H5VL__native_str_to_token","H5VL__native_term","H5VL__native_token_cmp","H5VL__native_token_to_str","H5VL__num_opt_operation","H5VL__peek_connector_id_by_name","H5VL__peek_connector_id_by_value","H5VL__register_connector","H5VL__register_connector_by_class","H5VL__register_connector_by_name","H5VL__register_connector_by_value","H5VL__register_opt_operation","H5VL__reparse_def_vol_conn_variable_test","H5VL__set_def_conn","H5VL__term_opt_operation","H5VL__term_opt_operation_cb","H5VL__unregister_opt_operation","H5VL__wrap_obj","H5VL_attr_close","H5VL_attr_create","H5VL_attr_get","H5VL_attr_open","H5VL_attr_optional","H5VL_attr_read","H5VL_attr_specific","H5VL_attr_write","H5VL_blob_get","H5VL_blob_optional","H5VL_blob_put","H5VL_blob_specific","H5VL_check_plugin_load","H5VL_cmp_connector_cls","H5VL_cmp_connector_info","H5VL_conn_copy","H5VL_conn_dec_rc","H5VL_conn_free","H5VL_conn_inc_rc","H5VL_copy_connector_info","H5VL_create_object","H5VL_create_object_using_vol_id","H5VL_dataset_close","H5VL_dataset_create","H5VL_dataset_get","H5VL_dataset_open","H5VL_dataset_optional","H5VL_dataset_read","H5VL_dataset_specific","H5VL_dataset_write","H5VL_datatype_close","H5VL_datatype_commit","H5VL_datatype_get","H5VL_datatype_open","H5VL_datatype_optional","H5VL_datatype_optional_op","H5VL_datatype_specific","H5VL_dec_vol_wrapper","H5VL_file_close","H5VL_file_create","H5VL_file_get","H5VL_file_is_same","H5VL_file_open","H5VL_file_optional","H5VL_file_specific","H5VL_finish_lib_state","H5VL_free_connector_info","H5VL_free_lib_state","H5VL_free_object","H5VL_free_wrap_ctx","H5VL_get_cap_flags","H5VL_get_wrap_ctx","H5VL_group_close","H5VL_group_create","H5VL_group_get","H5VL_group_open","H5VL_group_optional","H5VL_group_specific","H5VL_inc_vol_wrapper","H5VL_init_phase1","H5VL_init_phase2","H5VL_introspect_get_cap_flags","H5VL_introspect_get_conn_cls","H5VL_introspect_opt_query","H5VL_link_copy","H5VL_link_create","H5VL_link_get","H5VL_link_move","H5VL_link_optional","H5VL_link_specific","H5VL_native_addr_to_token","H5VL_native_get_file_addr_len","H5VL_native_get_file_struct","H5VL_native_register","H5VL_native_token_to_addr","H5VL_new_connector","H5VL_object","H5VL_object_copy","H5VL_object_data","H5VL_object_get","H5VL_object_inc_rc","H5VL_object_is_native","H5VL_object_open","H5VL_object_optional","H5VL_object_specific","H5VL_object_unwrap","H5VL_object_verify","H5VL_optional","H5VL_pass_through_attr_close","H5VL_pass_through_attr_create","H5VL_pass_through_attr_get","H5VL_pass_through_attr_open","H5VL_pass_through_attr_optional","H5VL_pass_through_attr_read","H5VL_pass_through_attr_specific","H5VL_pass_through_attr_write","H5VL_pass_through_blob_get","H5VL_pass_through_blob_optional","H5VL_pass_through_blob_put","H5VL_pass_through_blob_specific","H5VL_pass_through_dataset_close","H5VL_pass_through_dataset_create","H5VL_pass_through_dataset_get","H5VL_pass_through_dataset_open","H5VL_pass_through_dataset_optional","H5VL_pass_through_dataset_read","H5VL_pass_through_dataset_specific","H5VL_pass_through_dataset_write","H5VL_pass_through_datatype_close","H5VL_pass_through_datatype_commit","H5VL_pass_through_datatype_get","H5VL_pass_through_datatype_open","H5VL_pass_through_datatype_optional","H5VL_pass_through_datatype_specific","H5VL_pass_through_file_close","H5VL_pass_through_file_create","H5VL_pass_through_file_get","H5VL_pass_through_file_open","H5VL_pass_through_file_optional","H5VL_pass_through_file_specific","H5VL_pass_through_free_wrap_ctx","H5VL_pass_through_get_object","H5VL_pass_through_get_wrap_ctx","H5VL_pass_through_group_close","H5VL_pass_through_group_create","H5VL_pass_through_group_get","H5VL_pass_through_group_open","H5VL_pass_through_group_optional","H5VL_pass_through_group_specific","H5VL_pass_through_info_cmp","H5VL_pass_through_info_copy","H5VL_pass_through_info_free","H5VL_pass_through_info_to_str","H5VL_pass_through_init","H5VL_pass_through_introspect_get_cap_flags","H5VL_pass_through_introspect_get_conn_cls","H5VL_pass_through_introspect_opt_query","H5VL_pass_through_link_copy","H5VL_pass_through_link_create","H5VL_pass_through_link_get","H5VL_pass_through_link_move","H5VL_pass_through_link_optional","H5VL_pass_through_link_specific","H5VL_pass_through_object_copy","H5VL_pass_through_object_get","H5VL_pass_through_object_open","H5VL_pass_through_object_optional","H5VL_pass_through_object_specific","H5VL_pass_through_optional","H5VL_pass_through_register","H5VL_pass_through_request_cancel","H5VL_pass_through_request_free","H5VL_pass_through_request_notify","H5VL_pass_through_request_optional","H5VL_pass_through_request_specific","H5VL_pass_through_request_wait","H5VL_pass_through_str_to_info","H5VL_pass_through_term","H5VL_pass_through_token_cmp","H5VL_pass_through_token_from_str","H5VL_pass_through_token_to_str","H5VL_pass_through_unwrap_object","H5VL_pass_through_wrap_object","H5VL_register","H5VL_register_using_existing_id","H5VL_register_using_vol_id","H5VL_request_cancel","H5VL_request_free","H5VL_request_notify","H5VL_request_optional","H5VL_request_specific","H5VL_request_wait","H5VL_reset_vol_wrapper","H5VL_restore_lib_state","H5VL_retrieve_lib_state","H5VL_set_vol_wrapper","H5VL_setup_acc_args","H5VL_setup_args","H5VL_setup_idx_args","H5VL_setup_loc_args","H5VL_setup_name_args","H5VL_setup_self_args","H5VL_setup_token_args","H5VL_start_lib_state","H5VL_term_package","H5VL_token_cmp","H5VL_token_from_str","H5VL_token_to_str","H5VL_unwrap_object","H5VL_vol_object","H5VL_vol_object_verify","H5VL_wrap_object","H5VL_wrap_register","H5VLattr_close","H5VLattr_create","H5VLattr_get","H5VLattr_open","H5VLattr_optional","H5VLattr_optional_op","H5VLattr_read","H5VLattr_specific","H5VLattr_write","H5VLblob_get","H5VLblob_optional","H5VLblob_put","H5VLblob_specific","H5VLclose","H5VLcmp_connector_cls","H5VLcmp_connector_info","H5VLconnector_info_to_str","H5VLconnector_str_to_info","H5VLcopy_connector_info","H5VLdataset_close","H5VLdataset_create","H5VLdataset_get","H5VLdataset_open","H5VLdataset_optional","H5VLdataset_optional_op","H5VLdataset_read","H5VLdataset_specific","H5VLdataset_write","H5VLdatatype_close","H5VLdatatype_commit","H5VLdatatype_get","H5VLdatatype_open","H5VLdatatype_optional","H5VLdatatype_optional_op","H5VLdatatype_specific","H5VLfile_close","H5VLfile_create","H5VLfile_get","H5VLfile_open","H5VLfile_optional","H5VLfile_optional_op","H5VLfile_specific","H5VLfind_opt_operation","H5VLfinish_lib_state","H5VLfree_connector_info","H5VLfree_lib_state","H5VLfree_wrap_ctx","H5VLget_cap_flags","H5VLget_connector_id","H5VLget_connector_id_by_name","H5VLget_connector_id_by_value","H5VLget_connector_name","H5VLget_file_type","H5VLget_object","H5VLget_value","H5VLget_wrap_ctx","H5VLgroup_close","H5VLgroup_create","H5VLgroup_get","H5VLgroup_open","H5VLgroup_optional","H5VLgroup_optional_op","H5VLgroup_specific","H5VLinitialize","H5VLintrospect_get_cap_flags","H5VLintrospect_get_conn_cls","H5VLintrospect_opt_query","H5VLis_connector_registered_by_name","H5VLis_connector_registered_by_value","H5VLlink_copy","H5VLlink_create","H5VLlink_get","H5VLlink_move","H5VLlink_optional","H5VLlink_optional_op","H5VLlink_specific","H5VLnative_addr_to_token","H5VLnative_token_to_addr","H5VLobject","H5VLobject_copy","H5VLobject_get","H5VLobject_is_native","H5VLobject_open","H5VLobject_optional","H5VLobject_optional_op","H5VLobject_specific","H5VLoptional","H5VLpeek_connector_id_by_name","H5VLpeek_connector_id_by_value","H5VLquery_optional","H5VLregister_connector","H5VLregister_connector_by_name","H5VLregister_connector_by_value","H5VLregister_opt_operation","H5VLrequest_cancel","H5VLrequest_free","H5VLrequest_notify","H5VLrequest_optional","H5VLrequest_optional_op","H5VLrequest_specific","H5VLrequest_wait","H5VLrestore_lib_state","H5VLretrieve_lib_state","H5VLstart_lib_state","H5VLterminate","H5VLtoken_cmp","H5VLtoken_from_str","H5VLtoken_to_str","H5VLunregister_connector","H5VLunregister_opt_operation","H5VLunwrap_object","H5VLwrap_object","H5VLwrap_register","H5VM_array_calc","H5VM_array_calc_pre","H5VM_array_down","H5VM_array_fill","H5VM_array_offset","H5VM_array_offset_pre","H5VM_chunk_index","H5VM_chunk_index_scaled","H5VM_chunk_scaled","H5VM_hyper_copy","H5VM_hyper_eq","H5VM_hyper_fill","H5VM_hyper_stride","H5VM_memcpyvv","H5VM_opvv","H5VM_stride_copy","H5VM_stride_copy.part.0","H5VM_stride_copy_s","H5VM_stride_fill","H5WB_actual","H5WB_actual_clear","H5WB_unwrap","H5WB_wrap","H5Z__calc_parms_array","H5Z__calc_parms_compound","H5Z__can_apply_nbit","H5Z__can_apply_scaleoffset","H5Z__check_unregister_dset_cb","H5Z__check_unregister_group_cb","H5Z__do_op","H5Z__filter_deflate","H5Z__filter_fletcher32","H5Z__filter_nbit","H5Z__filter_scaleoffset","H5Z__filter_shuffle","H5Z__flush_file_cb","H5Z__get_token","H5Z__nbit_compress_one_array","H5Z__nbit_compress_one_atomic","H5Z__nbit_compress_one_compound","H5Z__nbit_decompress_one_array","H5Z__nbit_decompress_one_atomic","H5Z__nbit_decompress_one_compound","H5Z__new_node.part.0","H5Z__parse_expression","H5Z__parse_factor","H5Z__parse_term","H5Z__prelude_callback","H5Z__prepare_prelude_callback_dcpl","H5Z__scaleoffset_get_type","H5Z__scaleoffset_postdecompress_i","H5Z__scaleoffset_precompress_fd","H5Z__set_local_nbit","H5Z__set_local_scaleoffset","H5Z__set_local_shuffle","H5Z__set_parms_array","H5Z__set_parms_atomic","H5Z__set_parms_compound","H5Z__unregister","H5Z__xform_copy_tree.isra.0","H5Z__xform_destroy_parse_tree.part.0","H5Z__xform_eval_full","H5Z__xform_reduce_tree","H5Z_all_filters_avail","H5Z_append","H5Z_can_apply","H5Z_can_apply_direct","H5Z_delete","H5Z_filter_avail","H5Z_filter_in_pline","H5Z_filter_info","H5Z_find","H5Z_get_filter_info","H5Z_ignore_filters","H5Z_init","H5Z_modify","H5Z_pipeline","H5Z_register","H5Z_set_local","H5Z_set_local_direct","H5Z_term_package","H5Z_xform_copy","H5Z_xform_create","H5Z_xform_destroy","H5Z_xform_eval","H5Z_xform_extract_xform_str","H5Z_xform_noop","H5Zfilter_avail","H5Zget_filter_info","H5Zregister","H5Zunregister","H5__debug_mask","H5__mpi_delete_cb","H5_bandwidth","H5_basename","H5_buffer_dump","H5_build_extpath","H5_checksum_crc","H5_checksum_fletcher32","H5_checksum_lookup3","H5_checksum_metadata","H5_combine_path","H5_default_vfd_init","H5_dirname","H5_get_option","H5_get_time","H5_hash_string","H5_init_library","H5_make_time","H5_mpi_comm_cmp","H5_mpi_comm_dup","H5_mpi_comm_free","H5_mpi_get_bigio_count","H5_mpi_info_cmp","H5_mpi_info_dup","H5_mpi_info_free","H5_mpi_set_bigio_count","H5_mpio_create_large_type","H5_mpio_gatherv_alloc","H5_mpio_gatherv_alloc_simple","H5_mpio_get_file_sync_required","H5_nanosleep","H5_now","H5_now_usec","H5_strcasestr","H5_term_library","H5_term_library.part.0","H5_timer_get_time_string","H5_timer_get_times","H5_timer_get_total_times","H5_timer_init","H5_timer_start","H5_timer_stop","H5_trace","H5_trace_args","H5allocate_memory","H5atclose","H5check_version","H5close","H5dont_atexit","H5free_memory","H5garbage_collect","H5get_free_list_sizes","H5get_libversion","H5is_library_terminating","H5is_library_threadsafe","H5open","H5resize_memory","H5set_free_list_limits","Nflock","Pflock","__do_global_dtors_aux","atexit","compute_next","deregister_tm_clones","frame_dummy","open_members","register_tm_clones"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so","include_offsets":false},{"type":1,"name":"bio","functions":["bio_add_folio","bio_add_folio_nofail","bio_add_hw_folio","bio_add_hw_page","bio_add_page","bio_add_pc_page","bio_add_zone_append_page","bio_alloc_bioset","bio_alloc_cache_prune.constprop.0","bio_alloc_clone","bio_alloc_irq_cache_splice","bio_alloc_map_data","bio_alloc_rescue","bio_associate_blkg","bio_associate_blkg_from_css","bio_associate_blkg_from_page.isra.0","bio_attempt_back_merge","bio_attempt_discard_merge","bio_attempt_front_merge","bio_await_chain","bio_blkcg_css","bio_chain","bio_chain_and_submit","bio_chain_endio","bio_check_pages_dirty","bio_clone_blkg_association","bio_copy_data","bio_copy_data_iter","bio_copy_from_iter","bio_copy_kern_endio","bio_copy_kern_endio_read","bio_copy_user_iov","bio_cpu_dead","bio_dirty_fn","bio_end_io_acct_remapped","bio_endio","bio_free","bio_free_pages","bio_get_page","bio_init","bio_init_clone","bio_integrity_add_page","bio_integrity_advance","bio_integrity_alloc","bio_integrity_clone","bio_integrity_copy_user","bio_integrity_free","bio_integrity_init_user","bio_integrity_map_user","bio_integrity_prep","bio_integrity_prep.cold","bio_integrity_trim","bio_integrity_unmap_user","bio_integrity_unpin_bvec","bio_integrity_verify_fn","bio_iov_bvec_set","bio_iov_iter_get_pages","bio_kmalloc","bio_map_kern_endio","bio_map_user_iov","bio_next_page","bio_poll","bio_post_read_processing","bio_put","bio_reset","bio_set_pages_dirty","bio_split","bio_split_discard","bio_split_rw","bio_split_rw_at","bio_split_to_limits","bio_split_write_zeroes","bio_split_zone_append","bio_start_io_acct","bio_submit_split.part.0","bio_to_wbt_flags","bio_trim","bio_uninit","bio_wait_end_io","bioset_exit","bioset_init","bioset_integrity_create","bioset_integrity_free","biovec_init_pool"]},{"type":3,"name":"python","functions":["function__entry"],"binary_path":"/usr/lib64/libpython3.9.so","provider":"python"},{"type":1,"name":"os_page_cache","functions":["add_to_page_cache_lru","clear_page_dirty_for_io","delete_from_page_cache_batch","end_page_writeback","fault_in_safe_writeable","fault_in_subpage_writeable","fault_in_writeable","filemap_add_folio","filemap_alloc_folio","filemap_check_errors","filemap_fdatawait_keep_errors","filemap_fdatawait_range","filemap_fdatawait_range_keep_errors","filemap_fdatawrite","filemap_fdatawrite_range","filemap_fdatawrite_wbc","filemap_flush","filemap_get_folios","filemap_get_folios_contig","filemap_get_folios_tag","filemap_range_has_page","filemap_range_has_writeback","filemap_release_folio","filemap_remove_folio","folio_account_cleaned","folio_add_wait_queue","folio_clear_dirty_for_io","folio_end_private_2","folio_end_writeback","folio_invalidate","folio_mapping","folio_wait_bit","folio_wait_bit_killable","folio_wait_private_2","folio_wait_private_2_killable","folio_wait_stable","folio_wait_writeback","folio_wait_writeback_killable","grab_cache_page_write_begin","invalidate_inode_pages2","invalidate_inode_pages2_range","invalidate_mapping_pages","kiocb_invalidate_pages","kiocb_invalidate_post_direct_write","kiocb_write_and_wait","mapping_read_folio_gfp","mapping_seek_hole_data"]},{"type":1,"name":"shm","functions":["shmem_charge","shmem_file_setup","shmem_file_setup_with_mnt","shmem_get_folio","shmem_get_unmapped_area","shmem_init_fs_context","shmem_kernel_file_setup","shmem_lock","shmem_partial_swap_usage","shmem_read_folio_gfp","shmem_read_mapping_page_gfp","shmem_swap_usage","shmem_truncate_range","shmem_uncharge","shmem_unlock_mapping","shmem_unuse","shmem_zero_setup"]},{"type":1,"name":"fscache","functions":["__fscache_acquire_cookie","__fscache_acquire_volume","__fscache_begin_read_operation","__fscache_begin_write_operation","__fscache_clear_page_bits","__fscache_invalidate","__fscache_relinquish_cookie","__fscache_relinquish_volume","__fscache_resize_cookie","__fscache_unuse_cookie","__fscache_use_cookie","__fscache_write_to_cache"]},{"type":1,"name":"xfs","functions":["xfs_agfblock_init","xfs_agflblock_init","xfs_align_sparse_ino.isra.0","xfs_alloc_ag_max_usable","xfs_alloc_ag_vextent_exact","xfs_alloc_ag_vextent_locality","xfs_alloc_ag_vextent_near","xfs_alloc_ag_vextent_size","xfs_alloc_ag_vextent_small","xfs_alloc_btrec_to_irec","xfs_alloc_buftarg","xfs_alloc_cancel_autoreap","xfs_alloc_check_irec","xfs_alloc_cntbt_iter","xfs_alloc_commit_autoreap","xfs_alloc_compute_aligned","xfs_alloc_compute_diff","xfs_alloc_compute_maxlevels","xfs_alloc_cur_check","xfs_alloc_cur_finish","xfs_alloc_file_space","xfs_alloc_fix_freelist","xfs_alloc_fix_len","xfs_alloc_fixup_trees","xfs_alloc_get_freelist","xfs_alloc_get_rec","xfs_alloc_has_records","xfs_alloc_log_agf","xfs_alloc_longest_free_extent","xfs_alloc_lookup_eq","xfs_alloc_lookup_ge","xfs_alloc_lookup_le","xfs_alloc_min_freelist","xfs_alloc_put_freelist","xfs_alloc_query_all","xfs_alloc_query_range","xfs_alloc_query_range_helper","xfs_alloc_read_agf","xfs_alloc_read_agfl","xfs_alloc_schedule_autoreap","xfs_alloc_set_aside","xfs_alloc_space_available","xfs_alloc_update","xfs_alloc_update_counters","xfs_alloc_vextent_check_args","xfs_alloc_vextent_exact_bno","xfs_alloc_vextent_finish","xfs_alloc_vextent_first_ag","xfs_alloc_vextent_iterate_ags.constprop.0","xfs_alloc_vextent_near_bno","xfs_alloc_vextent_prepare_ag","xfs_alloc_vextent_start_ag","xfs_alloc_vextent_this_ag","xfs_alloc_walk_iter","xfs_allocfree_block_count","xfs_attr_leaf_entsize","xfs_attr_leaf_try_add","xfs_attr_restore_rmt_blk","xfs_btroot_init","xfs_buf_alert_ratelimited","xfs_buf_alloc_pages","xfs_buf_cmp","xfs_buf_corruption_error","xfs_buf_delwri_cancel","xfs_buf_delwri_pushbuf","xfs_buf_delwri_queue","xfs_buf_delwri_queue_here","xfs_buf_delwri_submit","xfs_buf_delwri_submit_buffers","xfs_buf_delwri_submit_nowait","xfs_buf_dquot_io_fail","xfs_buf_dquot_iodone","xfs_buf_find_insert.constprop.0","xfs_buf_find_lock","xfs_buf_free","xfs_buf_free_callback","xfs_buf_free_pages","xfs_buf_get_map","xfs_buf_get_uncached","xfs_buf_hash_destroy","xfs_buf_hash_init","xfs_buf_hold","xfs_buf_inode_io_fail","xfs_buf_inode_iodone","xfs_buf_ioapply_map","xfs_buf_ioend","xfs_buf_ioend_fail","xfs_buf_ioend_handle_error","xfs_buf_ioend_work","xfs_buf_ioerror_alert","xfs_buf_iowait","xfs_buf_item_committed","xfs_buf_item_committing","xfs_buf_item_dirty_format","xfs_buf_item_done","xfs_buf_item_format","xfs_buf_item_format_segment","xfs_buf_item_free","xfs_buf_item_free_format","xfs_buf_item_get_format","xfs_buf_item_init","xfs_buf_item_log","xfs_buf_item_pin","xfs_buf_item_push","xfs_buf_item_put","xfs_buf_item_release","xfs_buf_item_relse","xfs_buf_item_size","xfs_buf_item_size_segment.isra.0","xfs_buf_item_unpin","xfs_buf_lock","xfs_buf_log_check_iovec","xfs_buf_log_overhead","xfs_buf_offset","xfs_buf_read_map","xfs_buf_read_uncached","xfs_buf_readahead_map","xfs_buf_rele","xfs_buf_reverify","xfs_buf_set_ref","xfs_buf_stale","xfs_buf_trylock","xfs_buf_unlock","xfs_buf_verifier_error","xfs_buf_wait_unpin","xfs_buf_zero","xfs_buffered_write_delalloc_punch","xfs_buffered_write_iomap_begin","xfs_buffered_write_iomap_end","xfs_buftarg_drain_rele","xfs_buftarg_isolate","xfs_buftarg_shrink_count","xfs_buftarg_shrink_scan","xfs_bunmapi","xfs_bunmapi_range","xfs_bwrite","xfs_cntbt_diff_two_keys","xfs_cntbt_init_high_key_from_rec","xfs_cntbt_key_diff","xfs_cntbt_keys_inorder","xfs_cntbt_recs_inorder","xfs_cntroot_init","xfs_da3_blk_link","xfs_da3_blk_unlink.isra.0","xfs_da3_blkinfo_verify","xfs_da3_fixhashpath","xfs_da3_join","xfs_da3_node_add","xfs_da3_node_create","xfs_da3_node_hdr_from_disk","xfs_da3_node_hdr_to_disk","xfs_da3_node_lasthash.isra.0","xfs_da3_node_lookup_int","xfs_da3_node_order.isra.0","xfs_da3_node_read","xfs_da3_node_read_mapped","xfs_da3_node_read_verify","xfs_da3_node_rebalance.constprop.0","xfs_da3_node_remove","xfs_da3_node_set_type","xfs_da3_node_split","xfs_da3_node_toosmall","xfs_da3_node_unbalance","xfs_da3_node_verify","xfs_da3_node_verify_struct","xfs_da3_node_write_verify","xfs_da3_path_shift","xfs_da3_root_join","xfs_da3_root_split","xfs_da3_split","xfs_da3_swap_lastblock","xfs_da_buf_copy","xfs_da_compname","xfs_da_get_buf","xfs_da_grow_inode","xfs_da_grow_inode_int","xfs_da_hashname","xfs_da_mount","xfs_da_read_buf","xfs_da_reada_buf","xfs_da_shrink_inode","xfs_da_state_alloc","xfs_da_state_free","xfs_da_state_kill_altpath","xfs_da_state_reset","xfs_da_unmount","xfs_dabuf_map.constprop.0","xfs_dax_write_iomap_end","xfs_dax_writepages","xfs_dio_write_end_io","xfs_direct_write_iomap_begin","xfs_discard_endio","xfs_discard_endio_work","xfs_discard_extents","xfs_discard_folio","xfs_do_force_shutdown","xfs_dquot_buf_read_verify","xfs_dquot_buf_readahead_verify","xfs_dquot_buf_verify","xfs_dquot_buf_verify_crc.isra.0","xfs_dquot_buf_verify_struct","xfs_dquot_buf_write_verify","xfs_end_ioend","xfs_extent_busy_ag_cmp","xfs_extent_busy_clear","xfs_extent_busy_clear_one","xfs_extent_busy_flush","xfs_extent_busy_insert","xfs_extent_busy_insert_discard","xfs_extent_busy_insert_list","xfs_extent_busy_list_empty","xfs_extent_busy_reuse","xfs_extent_busy_search","xfs_extent_busy_trim","xfs_extent_busy_update_extent","xfs_extent_busy_wait_all","xfs_extent_free_abort_intent","xfs_extent_free_cancel_item","xfs_extent_free_create_done","xfs_extent_free_create_intent","xfs_extent_free_diff_items","xfs_extent_free_finish_item","xfs_extent_free_get_group","xfs_extent_free_log_item.constprop.0","xfs_extent_free_recover_work","xfs_extent_free_relog_intent","xfs_extfree_intent_destroy_cache","xfs_file_buffered_read","xfs_file_buffered_write","xfs_file_dax_read","xfs_file_dax_write","xfs_file_dio_read","xfs_file_dio_write_aligned","xfs_file_dio_write_unaligned","xfs_file_fadvise","xfs_file_fallocate","xfs_file_fsync","xfs_file_llseek","xfs_file_mmap","xfs_file_open","xfs_file_read_iter","xfs_file_readdir","xfs_file_release","xfs_file_remap_range","xfs_file_write_checks","xfs_file_write_iter","xfs_filemap_fault","xfs_filemap_huge_fault","xfs_filemap_page_mkwrite","xfs_filemap_pfn_mkwrite","xfs_finobt_init_ptr_from_cur","xfs_free_ag_extent","xfs_freesp_init_recs.isra.0","xfs_fs_alloc_inode","xfs_fs_commit_blocks","xfs_fs_destroy_inode","xfs_fs_dirty_inode","xfs_fs_drop_inode","xfs_fs_encode_fh","xfs_fs_fh_to_dentry","xfs_fs_fh_to_parent","xfs_fs_fill_super","xfs_fs_free","xfs_fs_free_cached_objects","xfs_fs_freeze","xfs_fs_geometry","xfs_fs_get_dqblk","xfs_fs_get_nextdqblk","xfs_fs_get_parent","xfs_fs_get_quota_state","xfs_fs_get_tree","xfs_fs_get_uuid","xfs_fs_goingdown","xfs_fs_inode_init_once","xfs_fs_map_blocks","xfs_fs_mark_healthy","xfs_fs_mark_sick","xfs_fs_measure_sickness","xfs_fs_nfs_commit_metadata","xfs_fs_nr_cached_objects","xfs_fs_parse_param","xfs_fs_put_super","xfs_fs_reconfigure","xfs_fs_reserve_ag_blocks","xfs_fs_rm_xquota","xfs_fs_set_dqblk","xfs_fs_set_info","xfs_fs_show_options","xfs_fs_shutdown","xfs_fs_statfs","xfs_fs_sync_fs","xfs_fs_unfreeze","xfs_fs_unreserve_ag_blocks","xfs_fs_validate_params","xfs_fs_writable","xfs_ialloc_ag_alloc","xfs_ialloc_count_inodes_rec","xfs_ialloc_count_ondisk","xfs_ialloc_get_rec","xfs_ialloc_next_rec","xfs_iflush","xfs_iflush_abort","xfs_iflush_cluster","xfs_iflush_fork","xfs_iflush_shutdown_abort","xfs_ifork_init_attr","xfs_ifork_init_cow","xfs_ifork_verify_local_attr","xfs_ifork_verify_local_data","xfs_ifork_zap_attr","xfs_ifork_zapped","xfs_ilock_for_iomap","xfs_ilock_iocb_for_write","xfs_inode_alloc","xfs_inode_buf_read_verify","xfs_inode_buf_readahead_verify","xfs_inode_buf_verify","xfs_inode_buf_write_verify","xfs_inode_clear_cowblocks_tag","xfs_inode_clear_eofblocks_tag","xfs_inode_free","xfs_inode_free_callback","xfs_inode_free_cowblocks","xfs_inode_free_eofblocks.constprop.0","xfs_inode_from_disk","xfs_inode_from_disk_ts","xfs_inode_hasattr","xfs_inode_inherit_flags","xfs_inode_init_security","xfs_inode_item_attr_fork_size","xfs_inode_item_committed","xfs_inode_item_committing","xfs_inode_item_data_fork_size","xfs_inode_item_destroy","xfs_inode_item_format","xfs_inode_item_format_attr_fork","xfs_inode_item_format_convert","xfs_inode_item_format_data_fork","xfs_inode_item_init","xfs_inode_item_pin","xfs_inode_item_precommit","xfs_inode_item_push","xfs_inode_item_release","xfs_inode_item_size","xfs_inode_item_sort","xfs_inode_item_unpin","xfs_inode_mark_healthy","xfs_inode_mark_reclaimable","xfs_inode_mark_sick","xfs_inode_measure_sickness","xfs_inode_near_dquot_enforcement","xfs_inode_needs_inactive","xfs_inode_reload_unlinked","xfs_inode_reload_unlinked_bucket","xfs_inode_set_cowblocks_tag","xfs_inode_set_eofblocks_tag","xfs_inode_to_disk","xfs_inode_to_log_dinode","xfs_inode_validate_cowextsize","xfs_inode_validate_extsize","xfs_inode_verifier_error","xfs_iomap_eof_align_last_fsb","xfs_iomap_inode_sequence","xfs_iomap_prealloc_size.constprop.0.isra.0","xfs_iomap_swapfile_activate","xfs_iomap_valid","xfs_iomap_write_direct","xfs_iomap_write_unwritten","xfs_iread_bmbt_block","xfs_lookup_get_search_key","xfs_map_blocks","xfs_mru_cache_create","xfs_mru_cache_delete","xfs_mru_cache_destroy","xfs_mru_cache_done","xfs_mru_cache_init","xfs_mru_cache_insert","xfs_mru_cache_lookup","xfs_mru_cache_remove","xfs_mru_cache_uninit","xfs_nfs_get_inode.isra.0","xfs_prepare_ioend","xfs_read_agf","xfs_read_agi","xfs_read_iomap_begin","xfs_readdir","xfs_readlink","xfs_readlink_bmap_ilocked","xfs_readlink_by_handle","xfs_release","xfs_remove","xfs_rename","xfs_reserve_blocks","xfs_restore_resvblks","xfs_vm_bmap","xfs_vm_read_folio","xfs_vm_readahead","xfs_vm_writepages","xfs_xattr_iomap_begin"]},{"type":1,"name":"ext4","functions":["ext4_alloc_branch","ext4_alloc_da_blocks","ext4_alloc_file_blocks.isra.0","ext4_alloc_flex_bg_array","ext4_alloc_group_tables","ext4_alloc_inode","ext4_alloc_io_end_vec","ext4_append","ext4_block_bitmap","ext4_block_bitmap_csum_set","ext4_block_bitmap_csum_verify","ext4_block_bitmap_set","ext4_block_to_path","ext4_block_write_begin","ext4_block_zero_page_range","ext4_bmap","ext4_bread","ext4_bread_batch","ext4_da_convert_inline_data_to_extent","ext4_da_get_block_prep","ext4_da_map_blocks.constprop.0","ext4_da_release_space","ext4_da_reserve_space","ext4_da_update_reserve_space","ext4_da_write_begin","ext4_da_write_end","ext4_da_write_inline_data_begin","ext4_dio_alignment","ext4_dio_write_checks","ext4_dio_write_end_io","ext4_dio_write_iter","ext4_dirty_folio","ext4_dirty_inode","ext4_end_buffer_io_sync","ext4_end_io_rsv_work","ext4_exit_es","ext4_exit_mballoc","ext4_exit_pageio","ext4_exit_pending","ext4_exit_post_read_processing","ext4_exit_sysfs","ext4_exit_system_zone","ext4_ext_calc_credits_for_single_extent","ext4_ext_check_inode","ext4_ext_clear_bb","ext4_ext_convert_to_initialized","ext4_ext_correct_indexes","ext4_ext_find_goal","ext4_ext_get_access","ext4_ext_grow_indepth","ext4_ext_handle_unwritten_extents","ext4_ext_index_trans_blocks","ext4_ext_init","ext4_ext_insert_extent","ext4_ext_insert_index","ext4_ext_map_blocks","ext4_ext_migrate","ext4_ext_next_allocated_block","ext4_ext_precache","ext4_ext_precache.part.0","ext4_ext_release","ext4_ext_remove_space","ext4_ext_replay_set_iblocks","ext4_ext_replay_shrink_inode","ext4_ext_replay_update_ex","ext4_ext_rm_idx","ext4_ext_rm_leaf","ext4_ext_search_left","ext4_ext_search_right","ext4_ext_shift_extents","ext4_ext_shift_path_extents","ext4_ext_split","ext4_ext_swap_inode_data","ext4_ext_tree_init","ext4_ext_truncate","ext4_ext_try_to_merge","ext4_ext_try_to_merge_right","ext4_ext_try_to_merge_up","ext4_extent_block_csum_set","ext4_fallocate","ext4_fh_to_dentry","ext4_fh_to_parent","ext4_fiemap","ext4_file_getattr","ext4_file_mmap","ext4_file_open","ext4_file_read_iter","ext4_file_write_iter","ext4_fileattr_get","ext4_fileattr_set","ext4_find_dest_de","ext4_find_entry","ext4_find_extent","ext4_find_inline_data_nolock","ext4_find_inline_entry","ext4_find_shared","ext4_finish_convert_inline_dir","ext4_free_blocks","ext4_free_blocks_simple.isra.0","ext4_free_branches","ext4_free_clusters_after_init","ext4_free_data","ext4_free_ext_path","ext4_free_group_clusters","ext4_free_group_clusters_set","ext4_free_in_core_inode","ext4_free_inode","ext4_free_inodes_count","ext4_free_inodes_set","ext4_free_link","ext4_io_submit","ext4_io_submit_init","ext4_iomap_begin","ext4_iomap_begin_report","ext4_iomap_end","ext4_iomap_overwrite_begin","ext4_iomap_swap_activate","ext4_iomap_xattr_begin","ext4_journal_abort_handle.constprop.0","ext4_journal_bmap","ext4_journal_check_start","ext4_journal_commit_callback","ext4_journal_finish_inode_data_buffers","ext4_journal_submit_inode_data_buffers","ext4_journalled_dirty_folio","ext4_journalled_invalidate_folio","ext4_journalled_submit_inode_data_buffers","ext4_journalled_write_end","ext4_journalled_write_inline_data","ext4_journalled_writepage_callback","ext4_journalled_zero_new_buffers","ext4_mark_bitmap_end","ext4_mark_bitmap_end.part.0","ext4_mark_dquot_dirty","ext4_mark_group_bitmap_corrupted","ext4_mark_iloc_dirty","ext4_mark_inode_used","ext4_mark_recovery_complete.constprop.0","ext4_mballoc_query_range","ext4_meta_trans_blocks","ext4_mkdir","ext4_mknod","ext4_move_extents","ext4_read_bh","ext4_read_bh_lock","ext4_read_bh_nowait","ext4_read_block_bitmap","ext4_read_block_bitmap_nowait","ext4_read_folio","ext4_read_inline_data.part.0.isra.0","ext4_read_inline_dir","ext4_read_inline_link","ext4_read_inline_page","ext4_read_inode_bitmap","ext4_read_merkle_tree_page","ext4_readahead","ext4_readdir","ext4_readpage_inline","ext4_release_io_end","ext4_statfs","ext4_swap_extents","ext4_symlink","ext4_sync_file","ext4_sync_fs","ext4_tmpfile","ext4_trim_all_free","ext4_trim_fs","ext4_truncate","ext4_unfreeze","ext4_unlink","ext4_write_begin","ext4_write_dquot","ext4_write_end","ext4_write_info","ext4_write_inline_data","ext4_write_inline_data_end","ext4_write_inode","ext4_write_merkle_tree_block","ext4_writepage","ext4_writepage_cb","ext4_writepage_trans_blocks","ext4_writepages"]},{"type":1,"name":"iomap","functions":["iomap_add_to_ioend","iomap_adjust_read_range.isra.0","iomap_bmap","iomap_dio_complete","iomap_dio_complete_work","iomap_dio_deferred_complete","iomap_dio_inline_iter","iomap_dio_rw","iomap_dio_zero","iomap_dirty_folio","iomap_do_writepage","iomap_fiemap","iomap_file_buffered_write","iomap_file_buffered_write_punch_delalloc","iomap_file_unshare","iomap_finish_ioend","iomap_finish_ioends","iomap_get_folio","iomap_invalidate_folio","iomap_ioend_compare","iomap_ioend_try_merge","iomap_is_partially_uptodate","iomap_iter","iomap_page_mkwrite","iomap_read_end_io","iomap_read_folio","iomap_read_folio_sync","iomap_read_inline_data","iomap_readahead","iomap_readpage_iter","iomap_release_folio","iomap_seek_data","iomap_seek_hole","iomap_sort_ioends","iomap_submit_ioend","iomap_swapfile_activate","iomap_swapfile_add_extent","iomap_swapfile_fail","iomap_swapfile_iter","iomap_to_bh","iomap_to_fiemap","iomap_truncate_page","iomap_unshare_iter","iomap_write_begin","iomap_write_delalloc_release","iomap_write_end","iomap_write_iter","iomap_writepage_map","iomap_writepages","iomap_zero_iter","iomap_zero_range"]},{"type":2,"name":"mpi","functions":["MPIX_Comm_ack_failed","MPIX_Comm_ack_failed.cold","MPIX_Comm_agree","MPIX_Comm_agree.cold","MPIX_Comm_failure_ack","MPIX_Comm_failure_ack.cold","MPIX_Comm_failure_get_acked","MPIX_Comm_failure_get_acked.cold","MPIX_Comm_get_failed","MPIX_Comm_get_failed.cold","MPIX_Comm_iagree","MPIX_Comm_iagree.cold","MPIX_Comm_is_revoked","MPIX_Comm_revoke","MPIX_Comm_revoke.cold","MPIX_Comm_shrink","MPIX_Comm_shrink.cold","MPIX_Query_cuda_support","MPIX_Query_rocm_support","MPI_AINT_ADD_F90","MPI_AINT_DIFF_F90","MPI_Abort","MPI_Accumulate","MPI_Add_error_class","MPI_Add_error_code","MPI_Add_error_string","MPI_Address","MPI_Allgather","MPI_Allgather_init","MPI_Allgatherv","MPI_Allgatherv_init","MPI_Alloc_mem","MPI_Allreduce","MPI_Allreduce_init","MPI_Alltoall","MPI_Alltoall_init","MPI_Alltoallv","MPI_Alltoallv_init","MPI_Alltoallw","MPI_Alltoallw_init","MPI_Attr_delete","MPI_Attr_get","MPI_Attr_put","MPI_Barrier","MPI_Barrier_init","MPI_Bcast","MPI_Bcast_init","MPI_Bsend","MPI_Bsend_init","MPI_Buffer_attach","MPI_Buffer_detach","MPI_COMM_DUP_FN","MPI_COMM_NULL_COPY_FN","MPI_COMM_NULL_DELETE_FN","MPI_CONVERSION_FN_NULL","MPI_Cancel","MPI_Cart_coords","MPI_Cart_create","MPI_Cart_get","MPI_Cart_map","MPI_Cart_rank","MPI_Cart_shift","MPI_Cart_sub","MPI_Cartdim_get","MPI_Close_port","MPI_Comm_accept","MPI_Comm_c2f","MPI_Comm_call_errhandler","MPI_Comm_compare","MPI_Comm_connect","MPI_Comm_create","MPI_Comm_create_errhandler","MPI_Comm_create_from_group","MPI_Comm_create_group","MPI_Comm_create_keyval","MPI_Comm_delete_attr","MPI_Comm_disconnect","MPI_Comm_dup","MPI_Comm_dup_with_info","MPI_Comm_f2c","MPI_Comm_free","MPI_Comm_free_keyval","MPI_Comm_get_attr","MPI_Comm_get_errhandler","MPI_Comm_get_info","MPI_Comm_get_name","MPI_Comm_get_parent","MPI_Comm_group","MPI_Comm_idup","MPI_Comm_idup_with_info","MPI_Comm_join","MPI_Comm_rank","MPI_Comm_remote_group","MPI_Comm_remote_size","MPI_Comm_set_attr","MPI_Comm_set_errhandler","MPI_Comm_set_info","MPI_Comm_set_name","MPI_Comm_size","MPI_Comm_spawn","MPI_Comm_spawn_multiple","MPI_Comm_split","MPI_Comm_split_type","MPI_Comm_test_inter","MPI_Compare_and_swap","MPI_DUP_FN","MPI_Dims_create","MPI_Dist_graph_create","MPI_Dist_graph_create_adjacent","MPI_Dist_graph_neighbors","MPI_Dist_graph_neighbors_count","MPI_Errhandler_c2f","MPI_Errhandler_create","MPI_Errhandler_f2c","MPI_Errhandler_free","MPI_Errhandler_get","MPI_Errhandler_set","MPI_Error_class","MPI_Error_string","MPI_Exscan","MPI_Exscan_init","MPI_Fetch_and_op","MPI_File_c2f","MPI_File_call_errhandler","MPI_File_close","MPI_File_create_errhandler","MPI_File_delete","MPI_File_f2c","MPI_File_get_amode","MPI_File_get_atomicity","MPI_File_get_byte_offset","MPI_File_get_errhandler","MPI_File_get_group","MPI_File_get_info","MPI_File_get_position","MPI_File_get_position_shared","MPI_File_get_size","MPI_File_get_type_extent","MPI_File_get_view","MPI_File_iread","MPI_File_iread_all","MPI_File_iread_at","MPI_File_iread_at_all","MPI_File_iread_shared","MPI_File_iwrite","MPI_File_iwrite_all","MPI_File_iwrite_at","MPI_File_iwrite_at_all","MPI_File_iwrite_shared","MPI_File_open","MPI_File_preallocate","MPI_File_read","MPI_File_read_all","MPI_File_read_all_begin","MPI_File_read_all_end","MPI_File_read_at","MPI_File_read_at_all","MPI_File_read_at_all_begin","MPI_File_read_at_all_end","MPI_File_read_ordered","MPI_File_read_ordered_begin","MPI_File_read_ordered_end","MPI_File_read_shared","MPI_File_seek","MPI_File_seek_shared","MPI_File_set_atomicity","MPI_File_set_errhandler","MPI_File_set_info","MPI_File_set_size","MPI_File_set_view","MPI_File_sync","MPI_File_write","MPI_File_write_all","MPI_File_write_all_begin","MPI_File_write_all_end","MPI_File_write_at","MPI_File_write_at_all","MPI_File_write_at_all_begin","MPI_File_write_at_all_end","MPI_File_write_ordered","MPI_File_write_ordered_begin","MPI_File_write_ordered_end","MPI_File_write_shared","MPI_Finalize","MPI_Finalized","MPI_Free_mem","MPI_Gather","MPI_Gather_init","MPI_Gatherv","MPI_Gatherv_init","MPI_Get","MPI_Get_accumulate","MPI_Get_address","MPI_Get_count","MPI_Get_elements","MPI_Get_elements_x","MPI_Get_library_version","MPI_Get_processor_name","MPI_Get_version","MPI_Graph_create","MPI_Graph_get","MPI_Graph_map","MPI_Graph_neighbors","MPI_Graph_neighbors_count","MPI_Graphdims_get","MPI_Grequest_complete","MPI_Grequest_start","MPI_Group_c2f","MPI_Group_compare","MPI_Group_difference","MPI_Group_excl","MPI_Group_f2c","MPI_Group_free","MPI_Group_from_session_pset","MPI_Group_incl","MPI_Group_intersection","MPI_Group_range_excl","MPI_Group_range_incl","MPI_Group_rank","MPI_Group_size","MPI_Group_translate_ranks","MPI_Group_union","MPI_Iallgather","MPI_Iallgatherv","MPI_Iallreduce","MPI_Ialltoall","MPI_Ialltoallv","MPI_Ialltoallw","MPI_Ibarrier","MPI_Ibcast","MPI_Ibsend","MPI_Iexscan","MPI_Igather","MPI_Igatherv","MPI_Improbe","MPI_Imrecv","MPI_Ineighbor_allgather","MPI_Ineighbor_allgatherv","MPI_Ineighbor_alltoall","MPI_Ineighbor_alltoallv","MPI_Ineighbor_alltoallw","MPI_Info_c2f","MPI_Info_create","MPI_Info_create_env","MPI_Info_delete","MPI_Info_dup","MPI_Info_f2c","MPI_Info_free","MPI_Info_get","MPI_Info_get_nkeys","MPI_Info_get_nthkey","MPI_Info_get_string","MPI_Info_get_valuelen","MPI_Info_set","MPI_Init","MPI_Init_thread","MPI_Initialized","MPI_Intercomm_create","MPI_Intercomm_create_from_groups","MPI_Intercomm_merge","MPI_Iprobe","MPI_Irecv","MPI_Ireduce","MPI_Ireduce_scatter","MPI_Ireduce_scatter_block","MPI_Irsend","MPI_Is_thread_main","MPI_Iscan","MPI_Iscatter","MPI_Iscatterv","MPI_Isend","MPI_Isendrecv","MPI_Isendrecv_replace","MPI_Issend","MPI_Keyval_create","MPI_Keyval_free","MPI_Lookup_name","MPI_Message_c2f","MPI_Message_f2c","MPI_Mprobe","MPI_Mrecv","MPI_NULL_COPY_FN","MPI_NULL_DELETE_FN","MPI_Neighbor_allgather","MPI_Neighbor_allgather_init","MPI_Neighbor_allgatherv","MPI_Neighbor_allgatherv_init","MPI_Neighbor_alltoall","MPI_Neighbor_alltoall_init","MPI_Neighbor_alltoallv","MPI_Neighbor_alltoallv_init","MPI_Neighbor_alltoallw","MPI_Neighbor_alltoallw_init","MPI_Op_c2f","MPI_Op_commutative","MPI_Op_create","MPI_Op_f2c","MPI_Op_free","MPI_Open_port","MPI_Pack","MPI_Pack_external","MPI_Pack_external_size","MPI_Pack_size","MPI_Parrived","MPI_Pcontrol","MPI_Pready","MPI_Pready_list","MPI_Pready_range","MPI_Precv_init","MPI_Probe","MPI_Psend_init","MPI_Publish_name","MPI_Put","MPI_Query_thread","MPI_Raccumulate","MPI_Recv","MPI_Recv_init","MPI_Reduce","MPI_Reduce_init","MPI_Reduce_local","MPI_Reduce_scatter","MPI_Reduce_scatter_block","MPI_Reduce_scatter_block_init","MPI_Reduce_scatter_init","MPI_Register_datarep","MPI_Request_c2f","MPI_Request_f2c","MPI_Request_free","MPI_Request_get_status","MPI_Rget","MPI_Rget_accumulate","MPI_Rput","MPI_Rsend","MPI_Rsend_init","MPI_Scan","MPI_Scan_init","MPI_Scatter","MPI_Scatter_init","MPI_Scatterv","MPI_Scatterv_init","MPI_Send","MPI_Send_init","MPI_Sendrecv","MPI_Sendrecv_replace","MPI_Session_c2f","MPI_Session_call_errhandler","MPI_Session_create_errhandler","MPI_Session_f2c","MPI_Session_finalize","MPI_Session_get_errhandler","MPI_Session_get_info","MPI_Session_get_nth_pset","MPI_Session_get_num_psets","MPI_Session_get_pset_info","MPI_Session_init","MPI_Session_set_errhandler","MPI_Session_set_info","MPI_Ssend","MPI_Ssend_init","MPI_Start","MPI_Startall","MPI_Status_c2f","MPI_Status_c2f08","MPI_Status_f082c","MPI_Status_f082f","MPI_Status_f2c","MPI_Status_f2f08","MPI_Status_set_cancelled","MPI_Status_set_elements","MPI_Status_set_elements_x","MPI_TYPE_DUP_FN","MPI_TYPE_NULL_COPY_FN","MPI_TYPE_NULL_DELETE_FN","MPI_T_category_changed","MPI_T_category_get_categories","MPI_T_category_get_cvars","MPI_T_category_get_index","MPI_T_category_get_info","MPI_T_category_get_num","MPI_T_category_get_pvars","MPI_T_cvar_get_index","MPI_T_cvar_get_info","MPI_T_cvar_get_num","MPI_T_cvar_handle_alloc","MPI_T_cvar_handle_free","MPI_T_cvar_read","MPI_T_cvar_write","MPI_T_enum_get_info","MPI_T_enum_get_item","MPI_T_finalize","MPI_T_init_thread","MPI_T_pvar_get_index","MPI_T_pvar_get_info","MPI_T_pvar_get_num","MPI_T_pvar_handle_alloc","MPI_T_pvar_handle_free","MPI_T_pvar_read","MPI_T_pvar_readreset","MPI_T_pvar_reset","MPI_T_pvar_session_create","MPI_T_pvar_session_free","MPI_T_pvar_start","MPI_T_pvar_stop","MPI_T_pvar_write","MPI_Test","MPI_Test_cancelled","MPI_Testall","MPI_Testany","MPI_Testsome","MPI_Topo_test","MPI_Type_c2f","MPI_Type_commit","MPI_Type_contiguous","MPI_Type_create_darray","MPI_Type_create_f90_complex","MPI_Type_create_f90_integer","MPI_Type_create_f90_real","MPI_Type_create_hindexed","MPI_Type_create_hindexed_block","MPI_Type_create_hvector","MPI_Type_create_indexed_block","MPI_Type_create_keyval","MPI_Type_create_resized","MPI_Type_create_struct","MPI_Type_create_subarray","MPI_Type_delete_attr","MPI_Type_dup","MPI_Type_extent","MPI_Type_f2c","MPI_Type_free","MPI_Type_free_keyval","MPI_Type_get_attr","MPI_Type_get_contents","MPI_Type_get_envelope","MPI_Type_get_extent","MPI_Type_get_extent_x","MPI_Type_get_name","MPI_Type_get_true_extent","MPI_Type_get_true_extent_x","MPI_Type_hindexed","MPI_Type_hvector","MPI_Type_indexed","MPI_Type_lb","MPI_Type_match_size","MPI_Type_set_attr","MPI_Type_set_name","MPI_Type_size","MPI_Type_size_x","MPI_Type_struct","MPI_Type_ub","MPI_Type_vector","MPI_Unpack","MPI_Unpack_external","MPI_Unpublish_name","MPI_WIN_DUP_FN","MPI_WIN_NULL_COPY_FN","MPI_WIN_NULL_DELETE_FN","MPI_WTICK_F90","MPI_WTIME_F90","MPI_Wait","MPI_Waitall","MPI_Waitany","MPI_Waitsome","MPI_Win_allocate","MPI_Win_allocate_shared","MPI_Win_attach","MPI_Win_c2f","MPI_Win_call_errhandler","MPI_Win_complete","MPI_Win_create","MPI_Win_create_dynamic","MPI_Win_create_errhandler","MPI_Win_create_keyval","MPI_Win_delete_attr","MPI_Win_detach","MPI_Win_f2c","MPI_Win_fence","MPI_Win_flush","MPI_Win_flush_all","MPI_Win_flush_local","MPI_Win_flush_local_all","MPI_Win_free","MPI_Win_free_keyval","MPI_Win_get_attr","MPI_Win_get_errhandler","MPI_Win_get_group","MPI_Win_get_info","MPI_Win_get_name","MPI_Win_lock","MPI_Win_lock_all","MPI_Win_post","MPI_Win_set_attr","MPI_Win_set_errhandler","MPI_Win_set_info","MPI_Win_set_name","MPI_Win_shared_query","MPI_Win_start","MPI_Win_sync","MPI_Win_test","MPI_Win_unlock","MPI_Win_unlock_all","MPI_Win_wait","MPI_Wtick","MPI_Wtime","NBC_Comm_neighbors","NBC_Comm_neighbors_count","NBC_Error","NBC_Error.constprop.0:0x12d820","NBC_Error.constprop.0:0x12e380","NBC_Error.constprop.0:0x12ee10","NBC_Error.constprop.0:0x130de0","NBC_Error.constprop.0:0x138c20","NBC_Error.constprop.0:0x13a930","NBC_Error.constprop.0:0x13bee0","NBC_Init_comm","NBC_Progress","NBC_Return_handle","NBC_Sched_barrier","NBC_Sched_commit","NBC_Sched_copy","NBC_Sched_local_recv","NBC_Sched_local_send","NBC_Sched_op","NBC_Sched_recv","NBC_Sched_send","NBC_Sched_unpack","NBC_Schedule_request","NBC_Start","NBC_Start_round","OMPI_Affinity_str","OMPI_Affinity_str.cold","OMPI_C_MPI_COMM_DUP_FN","OMPI_C_MPI_COMM_NULL_COPY_FN","OMPI_C_MPI_COMM_NULL_DELETE_FN","OMPI_C_MPI_DUP_FN","OMPI_C_MPI_NULL_COPY_FN","OMPI_C_MPI_NULL_DELETE_FN","OMPI_C_MPI_TYPE_DUP_FN","OMPI_C_MPI_TYPE_NULL_COPY_FN","OMPI_C_MPI_TYPE_NULL_DELETE_FN","OMPI_C_MPI_WIN_DUP_FN","OMPI_C_MPI_WIN_NULL_COPY_FN","OMPI_C_MPI_WIN_NULL_DELETE_FN","OMPI_TEST_FORTRAN_CONSTANTS","PMPIX_Comm_ack_failed","PMPIX_Comm_ack_failed.cold","PMPIX_Comm_agree","PMPIX_Comm_agree.cold","PMPIX_Comm_failure_ack","PMPIX_Comm_failure_ack.cold","PMPIX_Comm_failure_get_acked","PMPIX_Comm_failure_get_acked.cold","PMPIX_Comm_get_failed","PMPIX_Comm_get_failed.cold","PMPIX_Comm_iagree","PMPIX_Comm_iagree.cold","PMPIX_Comm_is_revoked","PMPIX_Comm_revoke","PMPIX_Comm_revoke.cold","PMPIX_Comm_shrink","PMPIX_Comm_shrink.cold","PMPI_Abort","PMPI_Accumulate","PMPI_Accumulate.cold","PMPI_Add_error_class","PMPI_Add_error_class.cold","PMPI_Add_error_code","PMPI_Add_error_code.cold","PMPI_Add_error_string","PMPI_Address","PMPI_Allgather","PMPI_Allgather.cold","PMPI_Allgather_init","PMPI_Allgather_init.cold","PMPI_Allgatherv","PMPI_Allgatherv.cold","PMPI_Allgatherv_init","PMPI_Allgatherv_init.cold","PMPI_Alloc_mem","PMPI_Allreduce","PMPI_Allreduce.cold","PMPI_Allreduce_init","PMPI_Allreduce_init.cold","PMPI_Alltoall","PMPI_Alltoall.cold","PMPI_Alltoall_init","PMPI_Alltoall_init.cold","PMPI_Alltoallv","PMPI_Alltoallv.cold","PMPI_Alltoallv_init","PMPI_Alltoallv_init.cold","PMPI_Alltoallw","PMPI_Alltoallw.cold","PMPI_Alltoallw_init","PMPI_Alltoallw_init.cold","PMPI_Attr_delete","PMPI_Attr_get","PMPI_Attr_get.cold","PMPI_Attr_put","PMPI_Barrier","PMPI_Barrier.cold","PMPI_Barrier_init","PMPI_Barrier_init.cold","PMPI_Bcast","PMPI_Bcast.cold","PMPI_Bcast_init","PMPI_Bcast_init.cold","PMPI_Bsend","PMPI_Bsend.cold","PMPI_Bsend_init","PMPI_Bsend_init.cold","PMPI_Buffer_attach","PMPI_Buffer_detach","PMPI_Cancel","PMPI_Cancel.cold","PMPI_Cart_coords","PMPI_Cart_coords.cold","PMPI_Cart_create","PMPI_Cart_create.cold","PMPI_Cart_get","PMPI_Cart_get.cold","PMPI_Cart_map","PMPI_Cart_map.cold","PMPI_Cart_rank","PMPI_Cart_rank.cold","PMPI_Cart_shift","PMPI_Cart_shift.cold","PMPI_Cart_sub","PMPI_Cart_sub.cold","PMPI_Cartdim_get","PMPI_Cartdim_get.cold","PMPI_Close_port","PMPI_Close_port.cold","PMPI_Comm_accept","PMPI_Comm_accept.cold","PMPI_Comm_c2f","PMPI_Comm_call_errhandler","PMPI_Comm_call_errhandler.cold","PMPI_Comm_compare","PMPI_Comm_compare.cold","PMPI_Comm_connect","PMPI_Comm_connect.cold","PMPI_Comm_create","PMPI_Comm_create.cold","PMPI_Comm_create_errhandler","PMPI_Comm_create_from_group","PMPI_Comm_create_group","PMPI_Comm_create_group.cold","PMPI_Comm_create_keyval","PMPI_Comm_delete_attr","PMPI_Comm_disconnect","PMPI_Comm_dup","PMPI_Comm_dup.cold","PMPI_Comm_dup_with_info","PMPI_Comm_dup_with_info.cold","PMPI_Comm_f2c","PMPI_Comm_free","PMPI_Comm_free.cold","PMPI_Comm_free_keyval","PMPI_Comm_get_attr","PMPI_Comm_get_errhandler","PMPI_Comm_get_info","PMPI_Comm_get_name","PMPI_Comm_get_parent","PMPI_Comm_group","PMPI_Comm_group.cold","PMPI_Comm_idup","PMPI_Comm_idup.cold","PMPI_Comm_idup_with_info","PMPI_Comm_idup_with_info.cold","PMPI_Comm_join","PMPI_Comm_join.cold","PMPI_Comm_rank","PMPI_Comm_remote_group","PMPI_Comm_remote_size","PMPI_Comm_set_attr","PMPI_Comm_set_errhandler","PMPI_Comm_set_info","PMPI_Comm_set_name","PMPI_Comm_set_name.cold","PMPI_Comm_size","PMPI_Comm_spawn","PMPI_Comm_spawn.cold","PMPI_Comm_spawn_multiple","PMPI_Comm_spawn_multiple.cold","PMPI_Comm_split","PMPI_Comm_split.cold","PMPI_Comm_split_type","PMPI_Comm_split_type.cold","PMPI_Comm_test_inter","PMPI_Compare_and_swap","PMPI_Compare_and_swap.cold","PMPI_Dims_create","PMPI_Dist_graph_create","PMPI_Dist_graph_create.cold","PMPI_Dist_graph_create_adjacent","PMPI_Dist_graph_create_adjacent.cold","PMPI_Dist_graph_neighbors","PMPI_Dist_graph_neighbors.cold","PMPI_Dist_graph_neighbors_count","PMPI_Dist_graph_neighbors_count.cold","PMPI_Errhandler_c2f","PMPI_Errhandler_create","PMPI_Errhandler_f2c","PMPI_Errhandler_free","PMPI_Errhandler_get","PMPI_Errhandler_set","PMPI_Error_class","PMPI_Error_class.cold","PMPI_Error_string","PMPI_Error_string.cold","PMPI_Exscan","PMPI_Exscan.cold","PMPI_Exscan_init","PMPI_Exscan_init.cold","PMPI_Fetch_and_op","PMPI_Fetch_and_op.cold","PMPI_File_c2f","PMPI_File_call_errhandler","PMPI_File_call_errhandler.cold","PMPI_File_close","PMPI_File_close.cold","PMPI_File_create_errhandler","PMPI_File_delete","PMPI_File_delete.cold","PMPI_File_f2c","PMPI_File_get_amode","PMPI_File_get_amode.cold","PMPI_File_get_atomicity","PMPI_File_get_atomicity.cold","PMPI_File_get_byte_offset","PMPI_File_get_byte_offset.cold","PMPI_File_get_errhandler","PMPI_File_get_group","PMPI_File_get_group.cold","PMPI_File_get_info","PMPI_File_get_info.cold","PMPI_File_get_position","PMPI_File_get_position.cold","PMPI_File_get_position_shared","PMPI_File_get_position_shared.cold","PMPI_File_get_size","PMPI_File_get_size.cold","PMPI_File_get_type_extent","PMPI_File_get_type_extent.cold","PMPI_File_get_view","PMPI_File_get_view.cold","PMPI_File_iread","PMPI_File_iread.cold","PMPI_File_iread_all","PMPI_File_iread_all.cold","PMPI_File_iread_at","PMPI_File_iread_at.cold","PMPI_File_iread_at_all","PMPI_File_iread_at_all.cold","PMPI_File_iread_shared","PMPI_File_iread_shared.cold","PMPI_File_iwrite","PMPI_File_iwrite.cold","PMPI_File_iwrite_all","PMPI_File_iwrite_all.cold","PMPI_File_iwrite_at","PMPI_File_iwrite_at.cold","PMPI_File_iwrite_at_all","PMPI_File_iwrite_at_all.cold","PMPI_File_iwrite_shared","PMPI_File_iwrite_shared.cold","PMPI_File_open","PMPI_File_open.cold","PMPI_File_preallocate","PMPI_File_preallocate.cold","PMPI_File_read","PMPI_File_read.cold","PMPI_File_read_all","PMPI_File_read_all.cold","PMPI_File_read_all_begin","PMPI_File_read_all_begin.cold","PMPI_File_read_all_end","PMPI_File_read_all_end.cold","PMPI_File_read_at","PMPI_File_read_at.cold","PMPI_File_read_at_all","PMPI_File_read_at_all.cold","PMPI_File_read_at_all_begin","PMPI_File_read_at_all_begin.cold","PMPI_File_read_at_all_end","PMPI_File_read_at_all_end.cold","PMPI_File_read_ordered","PMPI_File_read_ordered.cold","PMPI_File_read_ordered_begin","PMPI_File_read_ordered_begin.cold","PMPI_File_read_ordered_end","PMPI_File_read_ordered_end.cold","PMPI_File_read_shared","PMPI_File_read_shared.cold","PMPI_File_seek","PMPI_File_seek.cold","PMPI_File_seek_shared","PMPI_File_seek_shared.cold","PMPI_File_set_atomicity","PMPI_File_set_atomicity.cold","PMPI_File_set_errhandler","PMPI_File_set_info","PMPI_File_set_info.cold","PMPI_File_set_size","PMPI_File_set_size.cold","PMPI_File_set_view","PMPI_File_set_view.cold","PMPI_File_sync","PMPI_File_sync.cold","PMPI_File_write","PMPI_File_write.cold","PMPI_File_write_all","PMPI_File_write_all.cold","PMPI_File_write_all_begin","PMPI_File_write_all_begin.cold","PMPI_File_write_all_end","PMPI_File_write_all_end.cold","PMPI_File_write_at","PMPI_File_write_at.cold","PMPI_File_write_at_all","PMPI_File_write_at_all.cold","PMPI_File_write_at_all_begin","PMPI_File_write_at_all_begin.cold","PMPI_File_write_at_all_end","PMPI_File_write_at_all_end.cold","PMPI_File_write_ordered","PMPI_File_write_ordered.cold","PMPI_File_write_ordered_begin","PMPI_File_write_ordered_begin.cold","PMPI_File_write_ordered_end","PMPI_File_write_ordered_end.cold","PMPI_File_write_shared","PMPI_File_write_shared.cold","PMPI_Finalize","PMPI_Finalized","PMPI_Free_mem","PMPI_Gather","PMPI_Gather.cold","PMPI_Gather_init","PMPI_Gather_init.cold","PMPI_Gatherv","PMPI_Gatherv.cold","PMPI_Gatherv_init","PMPI_Gatherv_init.cold","PMPI_Get","PMPI_Get.cold","PMPI_Get_accumulate","PMPI_Get_accumulate.cold","PMPI_Get_address","PMPI_Get_count","PMPI_Get_elements","PMPI_Get_elements_x","PMPI_Get_library_version","PMPI_Get_processor_name","PMPI_Get_version","PMPI_Graph_create","PMPI_Graph_create.cold","PMPI_Graph_get","PMPI_Graph_get.cold","PMPI_Graph_map","PMPI_Graph_map.cold","PMPI_Graph_neighbors","PMPI_Graph_neighbors.cold","PMPI_Graph_neighbors_count","PMPI_Graph_neighbors_count.cold","PMPI_Graphdims_get","PMPI_Graphdims_get.cold","PMPI_Grequest_complete","PMPI_Grequest_start","PMPI_Grequest_start.cold","PMPI_Group_c2f","PMPI_Group_compare","PMPI_Group_difference","PMPI_Group_difference.cold","PMPI_Group_excl","PMPI_Group_excl.cold","PMPI_Group_f2c","PMPI_Group_free","PMPI_Group_free.cold","PMPI_Group_from_session_pset","PMPI_Group_from_session_pset.cold","PMPI_Group_incl","PMPI_Group_incl.cold","PMPI_Group_intersection","PMPI_Group_intersection.cold","PMPI_Group_range_excl","PMPI_Group_range_excl.cold","PMPI_Group_range_incl","PMPI_Group_range_incl.cold","PMPI_Group_rank","PMPI_Group_size","PMPI_Group_translate_ranks","PMPI_Group_translate_ranks.cold","PMPI_Group_union","PMPI_Group_union.cold","PMPI_Iallgather","PMPI_Iallgather.cold","PMPI_Iallgatherv","PMPI_Iallgatherv.cold","PMPI_Iallreduce","PMPI_Iallreduce.cold","PMPI_Ialltoall","PMPI_Ialltoall.cold","PMPI_Ialltoallv","PMPI_Ialltoallv.cold","PMPI_Ialltoallw","PMPI_Ialltoallw.cold","PMPI_Ibarrier","PMPI_Ibarrier.cold","PMPI_Ibcast","PMPI_Ibcast.cold","PMPI_Ibsend","PMPI_Ibsend.cold","PMPI_Iexscan","PMPI_Iexscan.cold","PMPI_Igather","PMPI_Igather.cold","PMPI_Igatherv","PMPI_Igatherv.cold","PMPI_Improbe","PMPI_Improbe.cold","PMPI_Imrecv","PMPI_Imrecv.cold","PMPI_Ineighbor_allgather","PMPI_Ineighbor_allgather.cold","PMPI_Ineighbor_allgatherv","PMPI_Ineighbor_allgatherv.cold","PMPI_Ineighbor_alltoall","PMPI_Ineighbor_alltoall.cold","PMPI_Ineighbor_alltoallv","PMPI_Ineighbor_alltoallv.cold","PMPI_Ineighbor_alltoallw","PMPI_Ineighbor_alltoallw.cold","PMPI_Info_c2f","PMPI_Info_create","PMPI_Info_create_env","PMPI_Info_create_env.cold","PMPI_Info_delete","PMPI_Info_delete.cold","PMPI_Info_dup","PMPI_Info_dup.cold","PMPI_Info_f2c","PMPI_Info_free","PMPI_Info_free.cold","PMPI_Info_get","PMPI_Info_get.cold","PMPI_Info_get_nkeys","PMPI_Info_get_nkeys.cold","PMPI_Info_get_nthkey","PMPI_Info_get_nthkey.cold","PMPI_Info_get_string","PMPI_Info_get_string.cold","PMPI_Info_get_valuelen","PMPI_Info_get_valuelen.cold","PMPI_Info_set","PMPI_Info_set.cold","PMPI_Init","PMPI_Init.cold","PMPI_Init_thread","PMPI_Init_thread.cold","PMPI_Initialized","PMPI_Intercomm_create","PMPI_Intercomm_create.cold","PMPI_Intercomm_create_from_groups","PMPI_Intercomm_merge","PMPI_Intercomm_merge.cold","PMPI_Iprobe","PMPI_Iprobe.cold","PMPI_Irecv","PMPI_Irecv.cold","PMPI_Ireduce","PMPI_Ireduce.cold","PMPI_Ireduce_scatter","PMPI_Ireduce_scatter.cold","PMPI_Ireduce_scatter_block","PMPI_Ireduce_scatter_block.cold","PMPI_Irsend","PMPI_Irsend.cold","PMPI_Is_thread_main","PMPI_Iscan","PMPI_Iscan.cold","PMPI_Iscatter","PMPI_Iscatter.cold","PMPI_Iscatterv","PMPI_Iscatterv.cold","PMPI_Isend","PMPI_Isend.cold","PMPI_Isendrecv","PMPI_Isendrecv.cold","PMPI_Isendrecv_replace","PMPI_Isendrecv_replace.cold","PMPI_Issend","PMPI_Issend.cold","PMPI_Keyval_create","PMPI_Keyval_free","PMPI_Lookup_name","PMPI_Lookup_name.cold","PMPI_Message_c2f","PMPI_Message_f2c","PMPI_Mprobe","PMPI_Mprobe.cold","PMPI_Mrecv","PMPI_Mrecv.cold","PMPI_Neighbor_allgather","PMPI_Neighbor_allgather.cold","PMPI_Neighbor_allgather_init","PMPI_Neighbor_allgather_init.cold","PMPI_Neighbor_allgatherv","PMPI_Neighbor_allgatherv.cold","PMPI_Neighbor_allgatherv_init","PMPI_Neighbor_allgatherv_init.cold","PMPI_Neighbor_alltoall","PMPI_Neighbor_alltoall.cold","PMPI_Neighbor_alltoall_init","PMPI_Neighbor_alltoall_init.cold","PMPI_Neighbor_alltoallv","PMPI_Neighbor_alltoallv.cold","PMPI_Neighbor_alltoallv_init","PMPI_Neighbor_alltoallv_init.cold","PMPI_Neighbor_alltoallw","PMPI_Neighbor_alltoallw.cold","PMPI_Neighbor_alltoallw_init","PMPI_Neighbor_alltoallw_init.cold","PMPI_Op_c2f","PMPI_Op_commutative","PMPI_Op_create","PMPI_Op_f2c","PMPI_Op_free","PMPI_Open_port","PMPI_Open_port.cold","PMPI_Pack","PMPI_Pack.cold","PMPI_Pack_external","PMPI_Pack_external.cold","PMPI_Pack_external_size","PMPI_Pack_external_size.cold","PMPI_Pack_size","PMPI_Parrived","PMPI_Parrived.cold","PMPI_Pcontrol","PMPI_Pready","PMPI_Pready.cold","PMPI_Pready_list","PMPI_Pready_list.cold","PMPI_Pready_range","PMPI_Pready_range.cold","PMPI_Precv_init","PMPI_Precv_init.cold","PMPI_Probe","PMPI_Probe.cold","PMPI_Psend_init","PMPI_Psend_init.cold","PMPI_Publish_name","PMPI_Publish_name.cold","PMPI_Put","PMPI_Put.cold","PMPI_Query_thread","PMPI_Raccumulate","PMPI_Raccumulate.cold","PMPI_Recv","PMPI_Recv.cold","PMPI_Recv_init","PMPI_Recv_init.cold","PMPI_Reduce","PMPI_Reduce.cold","PMPI_Reduce_init","PMPI_Reduce_init.cold","PMPI_Reduce_local","PMPI_Reduce_local.cold","PMPI_Reduce_scatter","PMPI_Reduce_scatter.cold","PMPI_Reduce_scatter_block","PMPI_Reduce_scatter_block.cold","PMPI_Reduce_scatter_block_init","PMPI_Reduce_scatter_block_init.cold","PMPI_Reduce_scatter_init","PMPI_Reduce_scatter_init.cold","PMPI_Register_datarep","PMPI_Register_datarep.cold","PMPI_Request_c2f","PMPI_Request_f2c","PMPI_Request_free","PMPI_Request_free.cold","PMPI_Request_get_status","PMPI_Rget","PMPI_Rget.cold","PMPI_Rget_accumulate","PMPI_Rget_accumulate.cold","PMPI_Rput","PMPI_Rput.cold","PMPI_Rsend","PMPI_Rsend.cold","PMPI_Rsend_init","PMPI_Rsend_init.cold","PMPI_Scan","PMPI_Scan.cold","PMPI_Scan_init","PMPI_Scan_init.cold","PMPI_Scatter","PMPI_Scatter.cold","PMPI_Scatter_init","PMPI_Scatter_init.cold","PMPI_Scatterv","PMPI_Scatterv.cold","PMPI_Scatterv_init","PMPI_Scatterv_init.cold","PMPI_Send","PMPI_Send.cold","PMPI_Send_init","PMPI_Send_init.cold","PMPI_Sendrecv","PMPI_Sendrecv.cold","PMPI_Sendrecv_replace","PMPI_Sendrecv_replace.cold","PMPI_Session_c2f","PMPI_Session_call_errhandler","PMPI_Session_call_errhandler.cold","PMPI_Session_create_errhandler","PMPI_Session_f2c","PMPI_Session_finalize","PMPI_Session_finalize.cold","PMPI_Session_get_errhandler","PMPI_Session_get_errhandler.cold","PMPI_Session_get_info","PMPI_Session_get_nth_pset","PMPI_Session_get_nth_pset.cold","PMPI_Session_get_num_psets","PMPI_Session_get_num_psets.cold","PMPI_Session_get_pset_info","PMPI_Session_get_pset_info.cold","PMPI_Session_init","PMPI_Session_init.cold","PMPI_Session_set_errhandler","PMPI_Session_set_info","PMPI_Ssend","PMPI_Ssend.cold","PMPI_Ssend_init","PMPI_Ssend_init.cold","PMPI_Start","PMPI_Start.cold","PMPI_Startall","PMPI_Status_c2f","PMPI_Status_c2f08","PMPI_Status_f082c","PMPI_Status_f082f","PMPI_Status_f2c","PMPI_Status_f2f08","PMPI_Status_set_cancelled","PMPI_Status_set_elements","PMPI_Status_set_elements_x","PMPI_T_category_changed","PMPI_T_category_get_categories","PMPI_T_category_get_cvars","PMPI_T_category_get_index","PMPI_T_category_get_info","PMPI_T_category_get_num","PMPI_T_category_get_pvars","PMPI_T_cvar_get_index","PMPI_T_cvar_get_info","PMPI_T_cvar_get_num","PMPI_T_cvar_handle_alloc","PMPI_T_cvar_handle_free","PMPI_T_cvar_read","PMPI_T_cvar_write","PMPI_T_enum_get_info","PMPI_T_enum_get_item","PMPI_T_finalize","PMPI_T_init_thread","PMPI_T_pvar_get_index","PMPI_T_pvar_get_info","PMPI_T_pvar_get_num","PMPI_T_pvar_handle_alloc","PMPI_T_pvar_handle_free","PMPI_T_pvar_read","PMPI_T_pvar_readreset","PMPI_T_pvar_reset","PMPI_T_pvar_session_create","PMPI_T_pvar_session_free","PMPI_T_pvar_start","PMPI_T_pvar_stop","PMPI_T_pvar_write","PMPI_Test","PMPI_Test_cancelled","PMPI_Testall","PMPI_Testany","PMPI_Testsome","PMPI_Topo_test","PMPI_Type_c2f","PMPI_Type_commit","PMPI_Type_commit.cold","PMPI_Type_contiguous","PMPI_Type_contiguous.cold","PMPI_Type_create_darray","PMPI_Type_create_darray.cold","PMPI_Type_create_f90_complex","PMPI_Type_create_f90_complex.cold","PMPI_Type_create_f90_integer","PMPI_Type_create_f90_integer.cold","PMPI_Type_create_f90_real","PMPI_Type_create_f90_real.cold","PMPI_Type_create_hindexed","PMPI_Type_create_hindexed.cold","PMPI_Type_create_hindexed_block","PMPI_Type_create_hindexed_block.cold","PMPI_Type_create_hvector","PMPI_Type_create_hvector.cold","PMPI_Type_create_indexed_block","PMPI_Type_create_indexed_block.cold","PMPI_Type_create_keyval","PMPI_Type_create_keyval.cold","PMPI_Type_create_resized","PMPI_Type_create_resized.cold","PMPI_Type_create_struct","PMPI_Type_create_struct.cold","PMPI_Type_create_subarray","PMPI_Type_create_subarray.cold","PMPI_Type_delete_attr","PMPI_Type_dup","PMPI_Type_dup.cold","PMPI_Type_extent","PMPI_Type_f2c","PMPI_Type_free","PMPI_Type_free_keyval","PMPI_Type_get_attr","PMPI_Type_get_contents","PMPI_Type_get_envelope","PMPI_Type_get_envelope.cold","PMPI_Type_get_extent","PMPI_Type_get_extent_x","PMPI_Type_get_name","PMPI_Type_get_true_extent","PMPI_Type_get_true_extent_x","PMPI_Type_hindexed","PMPI_Type_hvector","PMPI_Type_indexed","PMPI_Type_indexed.cold","PMPI_Type_lb","PMPI_Type_match_size","PMPI_Type_set_attr","PMPI_Type_set_name","PMPI_Type_size","PMPI_Type_size_x","PMPI_Type_struct","PMPI_Type_ub","PMPI_Type_vector","PMPI_Type_vector.cold","PMPI_Unpack","PMPI_Unpack.cold","PMPI_Unpack_external","PMPI_Unpack_external.cold","PMPI_Unpublish_name","PMPI_Unpublish_name.cold","PMPI_Wait","PMPI_Waitall","PMPI_Waitany","PMPI_Waitsome","PMPI_Win_allocate","PMPI_Win_allocate_shared","PMPI_Win_allocate_shared.cold","PMPI_Win_attach","PMPI_Win_attach.cold","PMPI_Win_c2f","PMPI_Win_call_errhandler","PMPI_Win_call_errhandler.cold","PMPI_Win_complete","PMPI_Win_complete.cold","PMPI_Win_create","PMPI_Win_create_dynamic","PMPI_Win_create_errhandler","PMPI_Win_create_keyval","PMPI_Win_delete_attr","PMPI_Win_detach","PMPI_Win_detach.cold","PMPI_Win_f2c","PMPI_Win_fence","PMPI_Win_fence.cold","PMPI_Win_flush","PMPI_Win_flush.cold","PMPI_Win_flush_all","PMPI_Win_flush_all.cold","PMPI_Win_flush_local","PMPI_Win_flush_local.cold","PMPI_Win_flush_local_all","PMPI_Win_flush_local_all.cold","PMPI_Win_free","PMPI_Win_free.cold","PMPI_Win_free_keyval","PMPI_Win_get_attr","PMPI_Win_get_errhandler","PMPI_Win_get_group","PMPI_Win_get_group.cold","PMPI_Win_get_info","PMPI_Win_get_info.cold","PMPI_Win_get_name","PMPI_Win_get_name.cold","PMPI_Win_lock","PMPI_Win_lock.cold","PMPI_Win_lock_all","PMPI_Win_lock_all.cold","PMPI_Win_post","PMPI_Win_post.cold","PMPI_Win_set_attr","PMPI_Win_set_errhandler","PMPI_Win_set_info","PMPI_Win_set_info.cold","PMPI_Win_set_name","PMPI_Win_set_name.cold","PMPI_Win_shared_query","PMPI_Win_shared_query.cold","PMPI_Win_start","PMPI_Win_start.cold","PMPI_Win_sync","PMPI_Win_sync.cold","PMPI_Win_test","PMPI_Win_test.cold","PMPI_Win_unlock","PMPI_Win_unlock.cold","PMPI_Win_unlock_all","PMPI_Win_unlock_all.cold","PMPI_Win_wait","PMPI_Win_wait.cold","PMPI_Wtick","PMPI_Wtime","PQ_adjustElementKey","PQ_adjustKey","PQ_decreaseElementKey","PQ_decreaseKey","PQ_delete","PQ_deleteElement","PQ_deleteMax","PQ_deleteMaxElement","PQ_exit","PQ_findMaxElement","PQ_findMaxKey","PQ_free","PQ_increaseElementKey","PQ_increaseKey","PQ_init","PQ_insert","PQ_insertElement","PQ_isEmpty","V_OUTPUT_ERR","__SENDER_BASED_METHOD_COPY","__do_global_dtors_aux","__muldc3","__mulsc3","__mulxc3","__ompi_datatype_allocate","__ompi_datatype_create_from_args","__ompi_datatype_create_from_packed_description.isra.0","__ompi_datatype_pack_description.isra.0","__ompi_datatype_release","_convert_process_name_to_string:0x84d30","_convert_process_name_to_string:0x88400","_convert_string_to_jobid","_convert_string_to_process_name:0x84b80","_convert_string_to_process_name:0x88410","_jobid_print_for_opal","_mca_topo_base_select.part.0","_process_name_compare:0x849c0","_process_name_compare:0x88420","_process_name_print_for_opal:0x84790","_process_name_print_for_opal:0x88450","_release_fn","_vpid_print_for_opal","adapt_close","adapt_constant_reduce_context_construct","adapt_constant_reduce_context_destruct","adapt_module_construct","adapt_module_destruct","adapt_module_enable","adapt_open","adapt_register","alloc_window","append_frag_to_list","attr_subsys_construct","attr_subsys_construct.cold","attr_subsys_destruct","attribute_key_value_construct","avail_coll_compare","avail_io_compare:0x179350","avail_io_compare:0x1799d0","avail_op_compare","avx_component_close","avx_component_init_query","avx_component_op_query","avx_component_open","avx_component_register","backend_abort_aggregate","backend_abort_no_aggregate","basic_register","block","bootstrap_comm","btl_bandwidth_compare","btl_exclusivity_compare","btl_latency_sort_fn","buffer_cleanup","build_level_topology","build_level_topology.cold","build_process_tab_id","check","check_file","check_one_component","close_component","coll_base_comm_construct","coll_base_comm_destruct","coll_base_module_construct","coll_base_module_destruct","comm_method_string","compFunc","compare_attr_sequence","compare_ints","compare_pmix_proc","compare_ranks:0x1da9b0","compare_ranks:0x1ea3b0","compare_uint16_ts","complete_objs_callback","complete_vecs_callback","component_finalize","component_init","component_open","component_query","component_register","component_select","compute_gain","config_window","construct_peers","cost_calc","create_comm","create_dumb_tree","create_threads","create_win","cset2mapstr.constprop.0","cset2str.constprop.0","datatype_duplicate.isra.0","dbl_cmp_inc","delete_group_list","delete_query","delete_select","depth_first","deregister_tm_clones","destruct_topology_cache","dfs","display_sol","distance","dpm_convert.constprop.0","dpm_convert.constprop.1","dynamic_gen2_register","dynamic_register","era_agreement_comm_specific_constructor","era_agreement_comm_specific_destructor","era_agreement_info_constructor","era_agreement_info_destructor","era_bounce_event_cb","era_cb_fn","era_cb_fn.cold","era_check_status","era_combine_agreement_values","era_combine_agreement_values.cold","era_create_agreement_info","era_create_agreement_info.cold","era_decide","era_error_event_cb","era_iagree_req_complete_cb","era_iagree_req_complete_cb.cold","era_iagree_req_free","era_mark_process_failed","era_merge_new_dead_list","era_next_child","era_on_comm_rank_failure","era_tree_fn_binary","era_tree_fn_star","era_tree_fn_string","era_tree_remove_node","era_update_return_value","era_value_constructor","era_value_destructor","evhandler_dereg_callbk","evhandler_reg_callbk:0x7c580","evhandler_reg_callbk:0x884c0","f1","f2","fast_group","fd_event_cb","fd_heartbeat_rdma_cb","fd_heartbeat_recv_cb","fd_heartbeat_request.isra.0","fd_heartbeat_request_cb","fd_heartbeat_send.isra.0","fd_progress","fence_cbfunc","fence_release:0x820f0","fence_release:0x884b0","file_constructor","file_destructor","file_query","file_unquery","fill_null_pointers","fragment_sent_cb","frame_dummy","free_constraint_tree","free_list_child","free_objs_callback","free_tab_child","free_vecs_callback","ftagree_close","ftagree_register","generate_random_sol.isra.0","generate_work_units.constprop.0","generate_work_units.part.0","get_algorithm","get_dynamic_rule","get_module","get_print_name_buffer","get_rsrc_exists","group_list_asc","group_list_dsc","group_list_id","han_close","han_module_enable","han_open","han_register","hash_asc","hb_itor_search","ibcast_request_fini.isra.0","icompar","individual_register:0x16eff0","individual_register:0x21a490","info_constructor","info_destructor","init_by_array","init_query:0x17b980","init_query:0x21f830","init_query:0x233dc0","inter_register","io_base_request_constructor","ireduce_request_fini.isra.0","kpartition_build_level_topology.isra.0","libnbc_close","libnbc_comm_query","libnbc_init_query","libnbc_module_construct","libnbc_module_destruct","libnbc_module_enable","libnbc_open","libnbc_register","list_all_possible_groups","list_all_possible_groups.cold","lockedfile_register","match_one","mca_bml_base_btl_array_construct","mca_bml_base_btl_array_destruct","mca_bml_base_btl_array_reserve","mca_bml_base_close","mca_bml_base_endpoint_construct","mca_bml_base_endpoint_destruct","mca_bml_base_init","mca_bml_base_inited","mca_bml_base_open","mca_bml_base_register","mca_bml_r2_add_btl","mca_bml_r2_add_btls","mca_bml_r2_add_proc","mca_bml_r2_add_procs","mca_bml_r2_allocate_endpoint","mca_bml_r2_component_close","mca_bml_r2_component_fini","mca_bml_r2_component_init","mca_bml_r2_component_open","mca_bml_r2_component_register","mca_bml_r2_compute_endpoint_metrics","mca_bml_r2_compute_endpoint_metrics.cold","mca_bml_r2_del_btl","mca_bml_r2_del_proc_btl","mca_bml_r2_del_procs","mca_bml_r2_del_procs.cold","mca_bml_r2_endpoint_add_btl","mca_bml_r2_finalize","mca_bml_r2_register","mca_bml_r2_register_error","mca_coll_base_alltoall_intra_basic_inplace","mca_coll_base_alltoallv_intra_basic_inplace","mca_coll_base_colltype_to_str","mca_coll_base_comm_select","mca_coll_base_comm_unselect","mca_coll_base_find_available","mca_coll_base_name_to_colltype","mca_coll_base_reduce_local","mca_coll_basic_allgather_inter","mca_coll_basic_allgatherv_inter","mca_coll_basic_allreduce_inter","mca_coll_basic_allreduce_intra","mca_coll_basic_alltoall_inter","mca_coll_basic_alltoallv_inter","mca_coll_basic_alltoallw_inter","mca_coll_basic_alltoallw_intra","mca_coll_basic_alltoallw_intra_inplace.constprop.0","mca_coll_basic_barrier_inter_lin","mca_coll_basic_barrier_intra_log","mca_coll_basic_bcast_lin_inter","mca_coll_basic_bcast_log_inter","mca_coll_basic_bcast_log_intra","mca_coll_basic_comm_query","mca_coll_basic_exscan_inter","mca_coll_basic_exscan_intra","mca_coll_basic_gather_inter","mca_coll_basic_gatherv_inter","mca_coll_basic_gatherv_intra","mca_coll_basic_init_query","mca_coll_basic_module_enable","mca_coll_basic_neighbor_allgather","mca_coll_basic_neighbor_allgatherv","mca_coll_basic_neighbor_alltoall","mca_coll_basic_neighbor_alltoallv","mca_coll_basic_neighbor_alltoallw","mca_coll_basic_reduce_lin_inter","mca_coll_basic_reduce_log_inter","mca_coll_basic_reduce_log_intra","mca_coll_basic_reduce_scatter_block_inter","mca_coll_basic_reduce_scatter_block_intra","mca_coll_basic_reduce_scatter_inter","mca_coll_basic_reduce_scatter_intra","mca_coll_basic_scan_intra","mca_coll_basic_scatter_inter","mca_coll_basic_scatterv_inter","mca_coll_basic_scatterv_intra","mca_coll_ftagree_comm_query","mca_coll_ftagree_construct","mca_coll_ftagree_era_comm_finalize","mca_coll_ftagree_era_comm_init","mca_coll_ftagree_era_finalize","mca_coll_ftagree_era_init","mca_coll_ftagree_era_inter","mca_coll_ftagree_era_intra","mca_coll_ftagree_eta_intra","mca_coll_ftagree_iera_intra","mca_coll_ftagree_iera_intra.cold","mca_coll_ftagree_init_query","mca_coll_ftagree_module_construct","mca_coll_ftagree_module_destruct","mca_coll_ftagree_module_enable","mca_coll_han_algorithm_id_is_valid","mca_coll_han_algorithm_id_to_fn","mca_coll_han_algorithm_id_to_name","mca_coll_han_algorithm_name_to_id","mca_coll_han_allgather_intra","mca_coll_han_allgather_intra_dynamic","mca_coll_han_allgather_intra_simple","mca_coll_han_allgather_lb_task","mca_coll_han_allgather_lg_task","mca_coll_han_allgather_uag_task","mca_coll_han_allgatherv_intra_dynamic","mca_coll_han_allreduce_intra","mca_coll_han_allreduce_intra_dynamic","mca_coll_han_allreduce_intra_simple","mca_coll_han_allreduce_reproducible","mca_coll_han_allreduce_reproducible_decision","mca_coll_han_allreduce_t0_task","mca_coll_han_allreduce_t1_task","mca_coll_han_allreduce_t2_task","mca_coll_han_allreduce_t3_task","mca_coll_han_barrier_intra_dynamic","mca_coll_han_barrier_intra_simple","mca_coll_han_bcast_intra","mca_coll_han_bcast_intra_dynamic","mca_coll_han_bcast_intra_simple","mca_coll_han_bcast_t0_task","mca_coll_han_bcast_t1_task","mca_coll_han_comm_create","mca_coll_han_comm_create_new","mca_coll_han_comm_query","mca_coll_han_component_name_to_id","mca_coll_han_dump_dynamic_rules","mca_coll_han_free_algorithms","mca_coll_han_free_dynamic_rules","mca_coll_han_gather_intra","mca_coll_han_gather_intra_dynamic","mca_coll_han_gather_intra_simple","mca_coll_han_gather_lg_task","mca_coll_han_gather_ug_task","mca_coll_han_get_all_coll_modules","mca_coll_han_init_algorithms","mca_coll_han_init_dynamic_rules","mca_coll_han_init_query","mca_coll_han_is_coll_dynamic_implemented","mca_coll_han_module_construct","mca_coll_han_module_destruct","mca_coll_han_module_disable","mca_coll_han_reduce_intra","mca_coll_han_reduce_intra_dynamic","mca_coll_han_reduce_intra_simple","mca_coll_han_reduce_reproducible","mca_coll_han_reduce_reproducible_decision","mca_coll_han_reduce_t0_task","mca_coll_han_reduce_t1_task","mca_coll_han_scatter_intra","mca_coll_han_scatter_intra_dynamic","mca_coll_han_scatter_intra_simple","mca_coll_han_scatter_ls_task","mca_coll_han_scatter_us_task","mca_coll_han_topo_init","mca_coll_han_topo_lvl_name_to_id","mca_coll_han_topo_lvl_to_str","mca_coll_inter_allgather_inter","mca_coll_inter_allgatherv_inter","mca_coll_inter_allreduce_inter","mca_coll_inter_bcast_inter","mca_coll_inter_comm_query","mca_coll_inter_gather_inter","mca_coll_inter_gatherv_inter","mca_coll_inter_init_query","mca_coll_inter_module_construct","mca_coll_inter_module_destruct","mca_coll_inter_module_enable","mca_coll_inter_reduce_inter","mca_coll_inter_scatter_inter","mca_coll_inter_scatterv_inter","mca_coll_monitoring_allgather","mca_coll_monitoring_allgatherv","mca_coll_monitoring_allreduce","mca_coll_monitoring_alltoall","mca_coll_monitoring_alltoallv","mca_coll_monitoring_alltoallw","mca_coll_monitoring_barrier","mca_coll_monitoring_bcast","mca_coll_monitoring_component_close","mca_coll_monitoring_component_init","mca_coll_monitoring_component_open","mca_coll_monitoring_component_query","mca_coll_monitoring_component_register","mca_coll_monitoring_exscan","mca_coll_monitoring_gather","mca_coll_monitoring_gatherv","mca_coll_monitoring_iallgather","mca_coll_monitoring_iallgatherv","mca_coll_monitoring_iallreduce","mca_coll_monitoring_ialltoall","mca_coll_monitoring_ialltoallv","mca_coll_monitoring_ialltoallw","mca_coll_monitoring_ibarrier","mca_coll_monitoring_ibcast","mca_coll_monitoring_iexscan","mca_coll_monitoring_igather","mca_coll_monitoring_igatherv","mca_coll_monitoring_ineighbor_allgather","mca_coll_monitoring_ineighbor_allgatherv","mca_coll_monitoring_ineighbor_alltoall","mca_coll_monitoring_ineighbor_alltoallv","mca_coll_monitoring_ineighbor_alltoallw","mca_coll_monitoring_ireduce","mca_coll_monitoring_ireduce_scatter","mca_coll_monitoring_ireduce_scatter_block","mca_coll_monitoring_iscan","mca_coll_monitoring_iscatter","mca_coll_monitoring_iscatterv","mca_coll_monitoring_module_disable","mca_coll_monitoring_module_enable","mca_coll_monitoring_neighbor_allgather","mca_coll_monitoring_neighbor_allgatherv","mca_coll_monitoring_neighbor_alltoall","mca_coll_monitoring_neighbor_alltoallv","mca_coll_monitoring_neighbor_alltoallw","mca_coll_monitoring_reduce","mca_coll_monitoring_reduce_scatter","mca_coll_monitoring_reduce_scatter_block","mca_coll_monitoring_scan","mca_coll_monitoring_scatter","mca_coll_monitoring_scatterv","mca_coll_self_allgather_intra","mca_coll_self_allgatherv_intra","mca_coll_self_allreduce_intra","mca_coll_self_alltoall_intra","mca_coll_self_alltoallv_intra","mca_coll_self_alltoallw_intra","mca_coll_self_barrier_intra","mca_coll_self_bcast_intra","mca_coll_self_comm_query","mca_coll_self_exscan_intra","mca_coll_self_gather_intra","mca_coll_self_gatherv_intra","mca_coll_self_init_query","mca_coll_self_module_enable","mca_coll_self_reduce_intra","mca_coll_self_reduce_scatter_intra","mca_coll_self_scan_intra","mca_coll_self_scatter_intra","mca_coll_self_scatterv_intra","mca_coll_sm_allreduce_intra","mca_coll_sm_barrier_intra","mca_coll_sm_bcast_intra","mca_coll_sm_comm_query","mca_coll_sm_init_query","mca_coll_sm_module_construct","mca_coll_sm_module_destruct","mca_coll_sm_module_disable","mca_coll_sm_reduce_intra","mca_coll_sync_bcast","mca_coll_sync_comm_query","mca_coll_sync_exscan","mca_coll_sync_gather","mca_coll_sync_gatherv","mca_coll_sync_init_query","mca_coll_sync_module_construct","mca_coll_sync_module_destruct","mca_coll_sync_module_enable","mca_coll_sync_reduce","mca_coll_sync_reduce_scatter","mca_coll_sync_scan","mca_coll_sync_scatter","mca_coll_sync_scatterv","mca_coll_task_constructor","mca_coll_task_destructor","mca_coll_tuned_module_construct","mca_comm_cid_context_alloc","mca_comm_cid_context_construct","mca_comm_cid_context_destruct","mca_common_monitoring_add_procs","mca_common_monitoring_coll_a2a","mca_common_monitoring_coll_a2o","mca_common_monitoring_coll_cache_name","mca_common_monitoring_coll_cond_release","mca_common_monitoring_coll_finalize","mca_common_monitoring_coll_flush","mca_common_monitoring_coll_flush_all","mca_common_monitoring_coll_get_a2a_count","mca_common_monitoring_coll_get_a2a_size","mca_common_monitoring_coll_get_a2o_count","mca_common_monitoring_coll_get_a2o_size","mca_common_monitoring_coll_get_o2a_count","mca_common_monitoring_coll_get_o2a_size","mca_common_monitoring_coll_messages_notify","mca_common_monitoring_coll_new","mca_common_monitoring_coll_o2a","mca_common_monitoring_coll_release","mca_common_monitoring_coll_reset","mca_common_monitoring_comm_size_notify","mca_common_monitoring_finalize","mca_common_monitoring_flush.part.0","mca_common_monitoring_get_coll_count","mca_common_monitoring_get_coll_size","mca_common_monitoring_get_flush","mca_common_monitoring_get_osc_recv_count","mca_common_monitoring_get_osc_recv_size","mca_common_monitoring_get_osc_sent_count","mca_common_monitoring_get_osc_sent_size","mca_common_monitoring_get_pml_count","mca_common_monitoring_get_pml_size","mca_common_monitoring_init","mca_common_monitoring_notify_flush","mca_common_monitoring_output","mca_common_monitoring_record_coll","mca_common_monitoring_record_osc","mca_common_monitoring_record_pml","mca_common_monitoring_register","mca_common_monitoring_set_flush","mca_common_ompio_alloc_buf","mca_common_ompio_base_file_read_all","mca_common_ompio_buffer_alloc_fini","mca_common_ompio_buffer_alloc_init","mca_common_ompio_buffer_alloc_seg","mca_common_ompio_buffer_free_seg","mca_common_ompio_build_io_array","mca_common_ompio_cart_based_grouping","mca_common_ompio_check_gpu_buf","mca_common_ompio_create_groups","mca_common_ompio_create_incomplete_file_handle","mca_common_ompio_decode_datatype","mca_common_ompio_empty_print_queue","mca_common_ompio_file_close","mca_common_ompio_file_delete","mca_common_ompio_file_get_position","mca_common_ompio_file_get_size","mca_common_ompio_file_iread","mca_common_ompio_file_iread_all","mca_common_ompio_file_iread_at","mca_common_ompio_file_iread_at_all","mca_common_ompio_file_iwrite","mca_common_ompio_file_iwrite_all","mca_common_ompio_file_iwrite_at","mca_common_ompio_file_iwrite_at_all","mca_common_ompio_file_open","mca_common_ompio_file_read","mca_common_ompio_file_read_all","mca_common_ompio_file_read_all.part.0","mca_common_ompio_file_read_at","mca_common_ompio_file_read_at_all","mca_common_ompio_file_read_pipelined","mca_common_ompio_file_write","mca_common_ompio_file_write_all","mca_common_ompio_file_write_all.part.0","mca_common_ompio_file_write_at","mca_common_ompio_file_write_at_all","mca_common_ompio_file_write_pipelined","mca_common_ompio_finalize_initial_grouping","mca_common_ompio_finalize_split","mca_common_ompio_forced_grouping","mca_common_ompio_full_print_queue","mca_common_ompio_fview_based_grouping","mca_common_ompio_initialize_print_queue","mca_common_ompio_merge_groups","mca_common_ompio_merge_initial_groups","mca_common_ompio_prepare_to_group","mca_common_ompio_print_time_info","mca_common_ompio_progress","mca_common_ompio_register_print_entry","mca_common_ompio_register_progress","mca_common_ompio_release_buf","mca_common_ompio_request_alloc","mca_common_ompio_request_cancel","mca_common_ompio_request_construct","mca_common_ompio_request_destruct","mca_common_ompio_request_fini","mca_common_ompio_request_free","mca_common_ompio_request_init","mca_common_ompio_retain_initial_groups","mca_common_ompio_set_aggregator_props","mca_common_ompio_set_callbacks","mca_common_ompio_set_explicit_offset","mca_common_ompio_set_file_defaults","mca_common_ompio_set_view","mca_common_ompio_simple_grouping","mca_common_ompio_split_a_group","mca_common_ompio_split_initial_groups","mca_common_ompio_unregister_print_entry","mca_fbtl_base_check_atomicity","mca_fbtl_base_file_select","mca_fbtl_base_file_unselect","mca_fbtl_base_find_available","mca_fbtl_posix_check_atomicity","mca_fbtl_posix_component_file_query","mca_fbtl_posix_component_file_unquery","mca_fbtl_posix_component_init_query","mca_fbtl_posix_ipreadv","mca_fbtl_posix_ipwritev","mca_fbtl_posix_lock","mca_fbtl_posix_module_finalize","mca_fbtl_posix_module_init","mca_fbtl_posix_preadv","mca_fbtl_posix_progress","mca_fbtl_posix_pwritev","mca_fbtl_posix_request_free","mca_fbtl_posix_unlock","mca_fcoll_base_component_lookup","mca_fcoll_base_file_select","mca_fcoll_base_file_unselect","mca_fcoll_base_find_available","mca_fcoll_base_query_table","mca_fcoll_dynamic_component_file_query","mca_fcoll_dynamic_component_file_unquery","mca_fcoll_dynamic_component_init_query","mca_fcoll_dynamic_file_read_all","mca_fcoll_dynamic_file_write_all","mca_fcoll_dynamic_gen2_break_file_view","mca_fcoll_dynamic_gen2_component_file_query","mca_fcoll_dynamic_gen2_component_file_unquery","mca_fcoll_dynamic_gen2_component_init_query","mca_fcoll_dynamic_gen2_file_read_all","mca_fcoll_dynamic_gen2_file_write_all","mca_fcoll_dynamic_gen2_get_configuration","mca_fcoll_dynamic_gen2_module_finalize","mca_fcoll_dynamic_gen2_module_init","mca_fcoll_dynamic_gen2_split_iov_array","mca_fcoll_dynamic_module_finalize","mca_fcoll_dynamic_module_init","mca_fcoll_individual_component_file_query","mca_fcoll_individual_component_file_unquery","mca_fcoll_individual_component_init_query","mca_fcoll_individual_file_read_all","mca_fcoll_individual_file_write_all","mca_fcoll_individual_module_finalize","mca_fcoll_individual_module_init","mca_fcoll_vulcan_break_file_view","mca_fcoll_vulcan_component_file_query","mca_fcoll_vulcan_component_file_unquery","mca_fcoll_vulcan_component_init_query","mca_fcoll_vulcan_file_read_all","mca_fcoll_vulcan_file_write_all","mca_fcoll_vulcan_get_configuration","mca_fcoll_vulcan_module_finalize","mca_fcoll_vulcan_module_init","mca_fcoll_vulcan_split_iov_array","mca_fs_base_file_close","mca_fs_base_file_delete","mca_fs_base_file_get_size","mca_fs_base_file_select","mca_fs_base_file_set_size","mca_fs_base_file_sync","mca_fs_base_file_unselect","mca_fs_base_find_available","mca_fs_base_get_file_amode","mca_fs_base_get_file_perm","mca_fs_base_get_fstype","mca_fs_base_get_mpi_err","mca_fs_base_get_parent_dir","mca_fs_base_get_real_filename.constprop.0","mca_fs_ufs_component_file_query","mca_fs_ufs_component_file_unquery","mca_fs_ufs_component_init_query","mca_fs_ufs_file_open","mca_fs_ufs_module_finalize","mca_fs_ufs_module_init","mca_io_base_delete","mca_io_base_delete.cold","mca_io_base_file_select","mca_io_base_file_select.cold","mca_io_base_file_select.localalias","mca_io_base_find_available","mca_io_base_open","mca_io_base_register_datarep","mca_io_ompio_file_close","mca_io_ompio_file_get_amode","mca_io_ompio_file_get_atomicity","mca_io_ompio_file_get_byte_offset","mca_io_ompio_file_get_position","mca_io_ompio_file_get_position_shared","mca_io_ompio_file_get_size","mca_io_ompio_file_get_type_extent","mca_io_ompio_file_get_view","mca_io_ompio_file_iread","mca_io_ompio_file_iread_all","mca_io_ompio_file_iread_at","mca_io_ompio_file_iread_at_all","mca_io_ompio_file_iread_shared","mca_io_ompio_file_iwrite","mca_io_ompio_file_iwrite_all","mca_io_ompio_file_iwrite_at","mca_io_ompio_file_iwrite_at_all","mca_io_ompio_file_iwrite_shared","mca_io_ompio_file_open","mca_io_ompio_file_preallocate","mca_io_ompio_file_read","mca_io_ompio_file_read_all","mca_io_ompio_file_read_all_begin","mca_io_ompio_file_read_all_end","mca_io_ompio_file_read_at","mca_io_ompio_file_read_at_all","mca_io_ompio_file_read_at_all_begin","mca_io_ompio_file_read_at_all_end","mca_io_ompio_file_read_ordered","mca_io_ompio_file_read_ordered_begin","mca_io_ompio_file_read_ordered_end","mca_io_ompio_file_read_shared","mca_io_ompio_file_seek","mca_io_ompio_file_seek_shared","mca_io_ompio_file_set_atomicity","mca_io_ompio_file_set_size","mca_io_ompio_file_set_view","mca_io_ompio_file_sync","mca_io_ompio_file_write","mca_io_ompio_file_write_all","mca_io_ompio_file_write_all_begin","mca_io_ompio_file_write_all_end","mca_io_ompio_file_write_at","mca_io_ompio_file_write_at_all","mca_io_ompio_file_write_at_all_begin","mca_io_ompio_file_write_at_all_end","mca_io_ompio_file_write_ordered","mca_io_ompio_file_write_ordered_begin","mca_io_ompio_file_write_ordered_end","mca_io_ompio_file_write_shared","mca_io_ompio_get_mca_parameter_value","mca_monitoring_coll_construct","mca_monitoring_coll_destruct","mca_osc_monitoring_component_finish","mca_osc_monitoring_component_init","mca_osc_monitoring_component_query","mca_osc_monitoring_component_register","mca_osc_monitoring_component_select","mca_part_base_close","mca_part_base_finalize","mca_part_base_open","mca_part_base_precv_request_construct","mca_part_base_prequest_construct","mca_part_base_progress","mca_part_base_psend_request_construct","mca_part_base_register","mca_part_base_select","mca_part_base_select.cold","mca_part_persist_component_close","mca_part_persist_component_fini","mca_part_persist_component_init","mca_part_persist_component_open","mca_part_persist_component_register","mca_part_persist_free:0x1ee0d0","mca_part_persist_free:0x1ee3e0","mca_part_persist_parrived","mca_part_persist_pready","mca_part_persist_precv_init","mca_part_persist_precv_request_construct","mca_part_persist_progress","mca_part_persist_psend_init","mca_part_persist_psend_request_construct","mca_part_persist_request_construct","mca_part_persist_request_destruct","mca_part_persist_start:0x1ed610","mca_part_persist_start:0x1edf30","mca_part_persist_start:0x1ee240","mca_pml_base_bsend_attach","mca_pml_base_bsend_detach","mca_pml_base_bsend_fini","mca_pml_base_bsend_init","mca_pml_base_bsend_request_alloc","mca_pml_base_bsend_request_alloc_buf","mca_pml_base_bsend_request_fini","mca_pml_base_bsend_request_free","mca_pml_base_bsend_request_start","mca_pml_base_close","mca_pml_base_finalize","mca_pml_base_open","mca_pml_base_pml_check_selected","mca_pml_base_pml_check_selected_impl","mca_pml_base_pml_selected","mca_pml_base_progress","mca_pml_base_recv_request_construct","mca_pml_base_recv_request_destruct","mca_pml_base_register","mca_pml_base_request_construct","mca_pml_base_revoke_comm","mca_pml_base_select","mca_pml_base_select.cold","mca_pml_base_send_request_construct","mca_pml_base_send_request_destruct","mca_pml_bsend_alloc_segment","mca_pml_cm_add_comm","mca_pml_cm_add_procs","mca_pml_cm_cancel","mca_pml_cm_component_close","mca_pml_cm_component_fini","mca_pml_cm_component_init","mca_pml_cm_component_open","mca_pml_cm_component_register","mca_pml_cm_del_comm","mca_pml_cm_del_procs","mca_pml_cm_dump","mca_pml_cm_enable","mca_pml_cm_improbe","mca_pml_cm_imrecv","mca_pml_cm_iprobe","mca_pml_cm_irecv","mca_pml_cm_irecv_init","mca_pml_cm_isend","mca_pml_cm_isend_init","mca_pml_cm_mprobe","mca_pml_cm_mrecv","mca_pml_cm_probe","mca_pml_cm_recv","mca_pml_cm_recv_fast_completion","mca_pml_cm_recv_request_completion","mca_pml_cm_recv_request_construct","mca_pml_cm_recv_request_free","mca_pml_cm_request_construct","mca_pml_cm_request_destruct","mca_pml_cm_send","mca_pml_cm_send_request_completion","mca_pml_cm_send_request_construct","mca_pml_cm_send_request_free","mca_pml_cm_start","mca_pml_monitoring_add_comm","mca_pml_monitoring_add_procs","mca_pml_monitoring_component_finish","mca_pml_monitoring_component_init","mca_pml_monitoring_component_open","mca_pml_monitoring_del_comm","mca_pml_monitoring_del_procs","mca_pml_monitoring_dump","mca_pml_monitoring_enable","mca_pml_monitoring_improbe","mca_pml_monitoring_imrecv","mca_pml_monitoring_iprobe","mca_pml_monitoring_irecv","mca_pml_monitoring_irecv_init","mca_pml_monitoring_isend","mca_pml_monitoring_isend_init","mca_pml_monitoring_mprobe","mca_pml_monitoring_mrecv","mca_pml_monitoring_probe","mca_pml_monitoring_recv","mca_pml_monitoring_revoke_comm","mca_pml_monitoring_send","mca_pml_monitoring_start","mca_pml_ob1_accelerator_add_ipc_support","mca_pml_ob1_accelerator_fini","mca_pml_ob1_accelerator_init","mca_pml_ob1_accelerator_need_buffers","mca_pml_ob1_add_comm","mca_pml_ob1_add_procs","mca_pml_ob1_com_btl_comp","mca_pml_ob1_comm_construct","mca_pml_ob1_comm_destruct","mca_pml_ob1_comm_init_size","mca_pml_ob1_comm_proc_construct","mca_pml_ob1_comm_proc_destruct","mca_pml_ob1_comm_size_notify","mca_pml_ob1_component_close","mca_pml_ob1_component_fini","mca_pml_ob1_component_init","mca_pml_ob1_component_open","mca_pml_ob1_component_register","mca_pml_ob1_control_completion","mca_pml_ob1_copy_frag_completion","mca_pml_ob1_del_comm","mca_pml_ob1_del_procs","mca_pml_ob1_dump","mca_pml_ob1_dump_cant_match","mca_pml_ob1_dump_frag_list","mca_pml_ob1_dump_hdr","mca_pml_ob1_enable","mca_pml_ob1_enable_progress","mca_pml_ob1_error_handler","mca_pml_ob1_frag_completion","mca_pml_ob1_get_dtoh_stream","mca_pml_ob1_get_htod_stream","mca_pml_ob1_get_posted_recvq_size","mca_pml_ob1_get_unex_msgq_size","mca_pml_ob1_handle_cid","mca_pml_ob1_improbe","mca_pml_ob1_imrecv","mca_pml_ob1_imrecv.cold","mca_pml_ob1_iprobe","mca_pml_ob1_irecv","mca_pml_ob1_irecv_init","mca_pml_ob1_isend","mca_pml_ob1_isend_init","mca_pml_ob1_match_completion_free","mca_pml_ob1_merge_cant_match","mca_pml_ob1_mprobe","mca_pml_ob1_mrecv","mca_pml_ob1_mrecv.cold","mca_pml_ob1_peer_create","mca_pml_ob1_probe","mca_pml_ob1_process_pending_packets","mca_pml_ob1_process_pending_rdma","mca_pml_ob1_progress","mca_pml_ob1_progress_one_htod_event","mca_pml_ob1_put_completion:0x2057a0","mca_pml_ob1_put_completion:0x20bf00","mca_pml_ob1_rdma_btls","mca_pml_ob1_rdma_btls.cold","mca_pml_ob1_rdma_cuda_btls","mca_pml_ob1_rdma_cuda_btls.cold","mca_pml_ob1_rdma_frag_constructor","mca_pml_ob1_rdma_pipeline_btls","mca_pml_ob1_rdma_pipeline_btls.cold","mca_pml_ob1_rdma_pipeline_btls_count","mca_pml_ob1_rdma_pipeline_btls_count.cold","mca_pml_ob1_record_htod_event","mca_pml_ob1_recv","mca_pml_ob1_recv_ctl_completion","mca_pml_ob1_recv_frag_callback_ack","mca_pml_ob1_recv_frag_callback_cid","mca_pml_ob1_recv_frag_callback_fin","mca_pml_ob1_recv_frag_callback_frag","mca_pml_ob1_recv_frag_callback_match","mca_pml_ob1_recv_frag_callback_put","mca_pml_ob1_recv_frag_callback_rget","mca_pml_ob1_recv_frag_callback_rndv","mca_pml_ob1_recv_frag_match.isra.0","mca_pml_ob1_recv_frag_match_proc.isra.0","mca_pml_ob1_recv_req_start","mca_pml_ob1_recv_request_ack.isra.0","mca_pml_ob1_recv_request_ack_send_btl","mca_pml_ob1_recv_request_cancel","mca_pml_ob1_recv_request_construct","mca_pml_ob1_recv_request_destruct","mca_pml_ob1_recv_request_frag_copy_finished","mca_pml_ob1_recv_request_frag_copy_start","mca_pml_ob1_recv_request_free","mca_pml_ob1_recv_request_get_frag","mca_pml_ob1_recv_request_get_frag_failed","mca_pml_ob1_recv_request_matched_probe","mca_pml_ob1_recv_request_process_pending","mca_pml_ob1_recv_request_progress_frag","mca_pml_ob1_recv_request_progress_match","mca_pml_ob1_recv_request_progress_rget","mca_pml_ob1_recv_request_progress_rget.cold","mca_pml_ob1_recv_request_progress_rndv","mca_pml_ob1_recv_request_put_frag","mca_pml_ob1_recv_request_schedule_once","mca_pml_ob1_revoke_comm","mca_pml_ob1_revoke_comm.localalias","mca_pml_ob1_rget_completion:0x204ec0","mca_pml_ob1_rget_completion:0x209c10","mca_pml_ob1_rndv_completion","mca_pml_ob1_seg_alloc","mca_pml_ob1_seg_free","mca_pml_ob1_send","mca_pml_ob1_send_cid","mca_pml_ob1_send_control_any","mca_pml_ob1_send_control_btl","mca_pml_ob1_send_ctl_completion","mca_pml_ob1_send_fin","mca_pml_ob1_send_inline.constprop.0","mca_pml_ob1_send_request_cancel","mca_pml_ob1_send_request_construct","mca_pml_ob1_send_request_copy_in_out","mca_pml_ob1_send_request_destruct","mca_pml_ob1_send_request_free","mca_pml_ob1_send_request_process_pending","mca_pml_ob1_send_request_put","mca_pml_ob1_send_request_put_frag","mca_pml_ob1_send_request_put_frag_failed","mca_pml_ob1_send_request_schedule_once","mca_pml_ob1_send_request_start_accelerator","mca_pml_ob1_send_request_start_buffered","mca_pml_ob1_send_request_start_copy","mca_pml_ob1_send_request_start_prepare","mca_pml_ob1_send_request_start_rdma","mca_pml_ob1_send_request_start_rndv","mca_pml_ob1_send_request_start_seq.constprop.0","mca_pml_ob1_set_allow_overtake","mca_pml_ob1_start","mca_pml_v_component_close","mca_pml_v_component_finalize","mca_pml_v_component_init","mca_pml_v_component_open","mca_pml_v_component_parasite_close","mca_pml_v_component_parasite_finalize","mca_pml_v_component_register","mca_pml_v_enable","mca_sharedfp_base_close","mca_sharedfp_base_file_select","mca_sharedfp_base_file_unselect","mca_sharedfp_base_find_available","mca_sharedfp_base_open","mca_sharedfp_individual_assign_globaloffset","mca_sharedfp_individual_collaborate_data","mca_sharedfp_individual_component_file_query","mca_sharedfp_individual_component_file_unquery","mca_sharedfp_individual_component_init_query","mca_sharedfp_individual_create_buff","mca_sharedfp_individual_file_close","mca_sharedfp_individual_file_open","mca_sharedfp_individual_get_position","mca_sharedfp_individual_get_timestamps_and_reclengths","mca_sharedfp_individual_getoffset","mca_sharedfp_individual_gettime","mca_sharedfp_individual_insert_headnode","mca_sharedfp_individual_insert_metadata","mca_sharedfp_individual_iread","mca_sharedfp_individual_iwrite","mca_sharedfp_individual_module_finalize","mca_sharedfp_individual_module_init","mca_sharedfp_individual_read","mca_sharedfp_individual_read_ordered","mca_sharedfp_individual_read_ordered_begin","mca_sharedfp_individual_read_ordered_end","mca_sharedfp_individual_seek","mca_sharedfp_individual_sort_timestamps","mca_sharedfp_individual_write","mca_sharedfp_individual_write_metadata_file","mca_sharedfp_individual_write_ordered","mca_sharedfp_individual_write_ordered_begin","mca_sharedfp_individual_write_ordered_end","mca_sharedfp_lockedfile_component_file_query","mca_sharedfp_lockedfile_component_file_unquery","mca_sharedfp_lockedfile_component_init_query","mca_sharedfp_lockedfile_file_close","mca_sharedfp_lockedfile_file_open","mca_sharedfp_lockedfile_get_position","mca_sharedfp_lockedfile_iread","mca_sharedfp_lockedfile_iwrite","mca_sharedfp_lockedfile_module_finalize","mca_sharedfp_lockedfile_module_init","mca_sharedfp_lockedfile_read","mca_sharedfp_lockedfile_read_ordered","mca_sharedfp_lockedfile_read_ordered.cold","mca_sharedfp_lockedfile_read_ordered_begin","mca_sharedfp_lockedfile_read_ordered_begin.cold","mca_sharedfp_lockedfile_read_ordered_end","mca_sharedfp_lockedfile_request_position","mca_sharedfp_lockedfile_seek","mca_sharedfp_lockedfile_write","mca_sharedfp_lockedfile_write_ordered","mca_sharedfp_lockedfile_write_ordered.cold","mca_sharedfp_lockedfile_write_ordered_begin","mca_sharedfp_lockedfile_write_ordered_begin.cold","mca_sharedfp_lockedfile_write_ordered_end","mca_sharedfp_sm_component_file_query","mca_sharedfp_sm_component_file_unquery","mca_sharedfp_sm_component_init_query","mca_sharedfp_sm_file_close","mca_sharedfp_sm_file_open","mca_sharedfp_sm_get_position","mca_sharedfp_sm_iread","mca_sharedfp_sm_iwrite","mca_sharedfp_sm_module_finalize","mca_sharedfp_sm_module_init","mca_sharedfp_sm_read","mca_sharedfp_sm_read_ordered","mca_sharedfp_sm_read_ordered.cold","mca_sharedfp_sm_read_ordered_begin","mca_sharedfp_sm_read_ordered_begin.cold","mca_sharedfp_sm_read_ordered_end","mca_sharedfp_sm_request_position","mca_sharedfp_sm_seek","mca_sharedfp_sm_write","mca_sharedfp_sm_write_ordered","mca_sharedfp_sm_write_ordered.cold","mca_sharedfp_sm_write_ordered_begin","mca_sharedfp_sm_write_ordered_begin.cold","mca_sharedfp_sm_write_ordered_end","mca_topo_base_cart_coords","mca_topo_base_cart_create","mca_topo_base_cart_get","mca_topo_base_cart_map","mca_topo_base_cart_rank","mca_topo_base_cart_shift","mca_topo_base_cart_sub","mca_topo_base_cartdim_get","mca_topo_base_close","mca_topo_base_comm_cart_2_2_0_construct","mca_topo_base_comm_cart_2_2_0_destruct","mca_topo_base_comm_dist_graph_2_2_0_construct","mca_topo_base_comm_dist_graph_2_2_0_destruct","mca_topo_base_comm_graph_2_2_0_construct","mca_topo_base_comm_graph_2_2_0_destruct","mca_topo_base_comm_select","mca_topo_base_dist_graph_create","mca_topo_base_dist_graph_create_adjacent","mca_topo_base_dist_graph_distribute","mca_topo_base_dist_graph_neighbors","mca_topo_base_dist_graph_neighbors_count","mca_topo_base_find_available","mca_topo_base_graph_create","mca_topo_base_graph_get","mca_topo_base_graph_map","mca_topo_base_graph_neighbors","mca_topo_base_graph_neighbors_count","mca_topo_base_graphdims_get","mca_topo_base_group_select","mca_topo_base_lazy_init","mca_topo_base_module_construct","mca_topo_base_module_destruct","mca_topo_base_neighbor_count","mca_topo_base_open","mca_topo_basic_query","mca_topo_treematch_component_register","mca_topo_treematch_dist_graph_create","mca_topo_treematch_dist_graph_create.cold","mca_topo_treematch_query","mca_vprotocol_base_close","mca_vprotocol_base_open","mca_vprotocol_base_parasite","mca_vprotocol_base_request_parasite","mca_vprotocol_base_select","mca_vprotocol_base_set_include_list","mca_vprotocol_pessimist_add_comm","mca_vprotocol_pessimist_add_procs","mca_vprotocol_pessimist_component_close","mca_vprotocol_pessimist_component_finalize","mca_vprotocol_pessimist_component_init","mca_vprotocol_pessimist_component_open","mca_vprotocol_pessimist_component_register","mca_vprotocol_pessimist_del_comm","mca_vprotocol_pessimist_del_procs","mca_vprotocol_pessimist_dump","mca_vprotocol_pessimist_enable","mca_vprotocol_pessimist_iprobe","mca_vprotocol_pessimist_irecv","mca_vprotocol_pessimist_isend","mca_vprotocol_pessimist_isend.cold","mca_vprotocol_pessimist_probe","mca_vprotocol_pessimist_recv","mca_vprotocol_pessimist_request_free","mca_vprotocol_pessimist_send","mca_vprotocol_pessimist_send.cold","mca_vprotocol_pessimist_start","mca_vprotocol_pessimist_test","mca_vprotocol_pessimist_test_all","mca_vprotocol_pessimist_test_any","mca_vprotocol_pessimist_test_some","mca_vprotocol_pessimist_wait_any","mca_vprotocol_pessimist_wait_some","model_callback","module_constructor","module_constructor_1_0_0","mpi_aint_add_f90","mpi_aint_add_f90_","mpi_aint_add_f90__","mpi_aint_diff_f90","mpi_aint_diff_f90_","mpi_aint_diff_f90__","mpi_comm_dup_fn","mpi_comm_dup_fn_","mpi_comm_dup_fn__","mpi_comm_null_copy_fn","mpi_comm_null_copy_fn_","mpi_comm_null_copy_fn__","mpi_comm_null_delete_fn","mpi_comm_null_delete_fn_","mpi_comm_null_delete_fn__","mpi_conversion_fn_null","mpi_conversion_fn_null_","mpi_conversion_fn_null__","mpi_conversion_fn_null_f","mpi_dup_fn","mpi_dup_fn_","mpi_dup_fn__","mpi_null_copy_fn","mpi_null_copy_fn_","mpi_null_copy_fn__","mpi_null_delete_fn","mpi_null_delete_fn_","mpi_null_delete_fn__","mpi_type_dup_fn","mpi_type_dup_fn_","mpi_type_dup_fn__","mpi_type_null_copy_fn","mpi_type_null_copy_fn_","mpi_type_null_copy_fn__","mpi_type_null_delete_fn","mpi_type_null_delete_fn_","mpi_type_null_delete_fn__","mpi_win_dup_fn","mpi_win_dup_fn_","mpi_win_dup_fn__","mpi_win_null_copy_fn","mpi_win_null_copy_fn_","mpi_win_null_copy_fn__","mpi_win_null_delete_fn","mpi_win_null_delete_fn_","mpi_win_null_delete_fn__","mpi_wtick_f90","mpi_wtick_f90_","mpi_wtick_f90__","mpi_wtime_f90","mpi_wtime_f90_","mpi_wtime_f90__","msg_down","msg_down.cold","msg_up","mycompar","myfn","nb_leaves","nb_lines","nbc_allgather_init","nbc_allgather_inter_init","nbc_allgatherv_init","nbc_allgatherv_inter_init","nbc_allreduce_init","nbc_allreduce_init.cold","nbc_allreduce_inter_init","nbc_alltoall_init","nbc_alltoall_inter_init","nbc_alltoallv_init","nbc_alltoallv_inter_init","nbc_alltoallw_init","nbc_alltoallw_inter_init","nbc_barrier_init","nbc_barrier_inter_init","nbc_bcast_init","nbc_bcast_inter_init","nbc_exscan_init","nbc_gather_init","nbc_gather_inter_init","nbc_gatherv_init","nbc_gatherv_inter_init","nbc_neighbor_allgather_init","nbc_neighbor_allgatherv_init","nbc_neighbor_alltoall_init","nbc_neighbor_alltoallv_init","nbc_neighbor_alltoallw_init","nbc_reduce_init","nbc_reduce_inter_init","nbc_reduce_scatter_block_init","nbc_reduce_scatter_block_inter_init","nbc_reduce_scatter_init","nbc_reduce_scatter_inter_init","nbc_req_constructor","nbc_scan_init","nbc_scatter_init","nbc_scatter_inter_init","nbc_scatterv_init","nbc_scatterv_inter_init","nbc_schedule_constructor","nbc_schedule_destructor","next_bucket_elem","node_height","node_mheight","node_pathlen","ompi_attr_copy_all","ompi_attr_create_keyval","ompi_attr_create_keyval_aint","ompi_attr_create_keyval_fint","ompi_attr_create_keyval_impl","ompi_attr_create_predefined_keyvals","ompi_attr_delete","ompi_attr_delete_all","ompi_attr_delete_impl","ompi_attr_delete_predefined_keyvals_for_wm","ompi_attr_free_keyval","ompi_attr_free_predefined","ompi_attr_get_aint","ompi_attr_get_aint.cold","ompi_attr_get_c","ompi_attr_get_c.cold","ompi_attr_get_fint","ompi_attr_get_fint.cold","ompi_attr_get_ref","ompi_attr_put_ref","ompi_attr_set_aint","ompi_attr_set_c","ompi_attr_set_fint","ompi_attr_set_int","ompi_attr_set_predefined_keyvals_for_wm","ompi_attribute_keyval_construct","ompi_attribute_keyval_destruct","ompi_coll_adapt_bcast","ompi_coll_adapt_comm_query","ompi_coll_adapt_ibcast","ompi_coll_adapt_ibcast_fini","ompi_coll_adapt_ibcast_register","ompi_coll_adapt_init_query","ompi_coll_adapt_ireduce","ompi_coll_adapt_ireduce_fini","ompi_coll_adapt_ireduce_register","ompi_coll_adapt_module_cached_topology","ompi_coll_adapt_reduce","ompi_coll_adapt_request_free","ompi_coll_base_agree_noft","ompi_coll_base_allgather_intra_basic_linear","ompi_coll_base_allgather_intra_bruck","ompi_coll_base_allgather_intra_neighborexchange","ompi_coll_base_allgather_intra_recursivedoubling","ompi_coll_base_allgather_intra_ring","ompi_coll_base_allgather_intra_sparbit","ompi_coll_base_allgather_intra_two_procs","ompi_coll_base_allgatherv_intra_basic_default","ompi_coll_base_allgatherv_intra_bruck","ompi_coll_base_allgatherv_intra_neighborexchange","ompi_coll_base_allgatherv_intra_ring","ompi_coll_base_allgatherv_intra_sparbit","ompi_coll_base_allgatherv_intra_two_procs","ompi_coll_base_allreduce_intra_basic_linear","ompi_coll_base_allreduce_intra_nonoverlapping","ompi_coll_base_allreduce_intra_recursivedoubling","ompi_coll_base_allreduce_intra_redscat_allgather","ompi_coll_base_allreduce_intra_ring","ompi_coll_base_allreduce_intra_ring_segmented","ompi_coll_base_alltoall_intra_basic_linear","ompi_coll_base_alltoall_intra_bruck","ompi_coll_base_alltoall_intra_linear_sync","ompi_coll_base_alltoall_intra_pairwise","ompi_coll_base_alltoall_intra_two_procs","ompi_coll_base_alltoallv_intra_basic_linear","ompi_coll_base_alltoallv_intra_pairwise","ompi_coll_base_barrier_intra_basic_linear","ompi_coll_base_barrier_intra_bruck","ompi_coll_base_barrier_intra_doublering","ompi_coll_base_barrier_intra_recursivedoubling","ompi_coll_base_barrier_intra_tree","ompi_coll_base_barrier_intra_two_procs","ompi_coll_base_bcast_intra_basic_linear","ompi_coll_base_bcast_intra_binomial","ompi_coll_base_bcast_intra_bintree","ompi_coll_base_bcast_intra_chain","ompi_coll_base_bcast_intra_generic","ompi_coll_base_bcast_intra_knomial","ompi_coll_base_bcast_intra_pipeline","ompi_coll_base_bcast_intra_scatter_allgather","ompi_coll_base_bcast_intra_scatter_allgather_ring","ompi_coll_base_bcast_intra_split_bintree","ompi_coll_base_comm_get_reqs","ompi_coll_base_exscan_intra_linear","ompi_coll_base_exscan_intra_recursivedoubling","ompi_coll_base_file_getnext_long","ompi_coll_base_file_getnext_size_t","ompi_coll_base_file_getnext_string","ompi_coll_base_file_peek_next_char_is","ompi_coll_base_file_peek_next_char_isdigit","ompi_coll_base_gather_intra_basic_linear","ompi_coll_base_gather_intra_binomial","ompi_coll_base_gather_intra_linear_sync","ompi_coll_base_iagree_noft","ompi_coll_base_reduce_generic","ompi_coll_base_reduce_intra_basic_linear","ompi_coll_base_reduce_intra_binary","ompi_coll_base_reduce_intra_binomial","ompi_coll_base_reduce_intra_chain","ompi_coll_base_reduce_intra_in_order_binary","ompi_coll_base_reduce_intra_pipeline","ompi_coll_base_reduce_intra_redscat_gather","ompi_coll_base_reduce_scatter_block_basic_linear","ompi_coll_base_reduce_scatter_block_intra_butterfly","ompi_coll_base_reduce_scatter_block_intra_recursivedoubling","ompi_coll_base_reduce_scatter_block_intra_recursivehalving","ompi_coll_base_reduce_scatter_intra_basic_recursivehalving","ompi_coll_base_reduce_scatter_intra_butterfly","ompi_coll_base_reduce_scatter_intra_nonoverlapping","ompi_coll_base_reduce_scatter_intra_ring","ompi_coll_base_retain_datatypes","ompi_coll_base_retain_datatypes_w","ompi_coll_base_retain_op","ompi_coll_base_scan_intra_linear","ompi_coll_base_scan_intra_recursivedoubling","ompi_coll_base_scatter_intra_basic_linear","ompi_coll_base_scatter_intra_binomial","ompi_coll_base_scatter_intra_linear_nb","ompi_coll_base_sendrecv_actual","ompi_coll_base_topo_build_bmtree","ompi_coll_base_topo_build_chain","ompi_coll_base_topo_build_in_order_bintree","ompi_coll_base_topo_build_in_order_bmtree","ompi_coll_base_topo_build_kmtree","ompi_coll_base_topo_build_tree","ompi_coll_base_topo_destroy_tree","ompi_coll_base_topo_dump_tree","ompi_coll_han_reorder_gather","ompi_coll_han_request_free","ompi_coll_libnbc_allgather_init","ompi_coll_libnbc_allgather_inter_init","ompi_coll_libnbc_allgatherv_init","ompi_coll_libnbc_allgatherv_inter_init","ompi_coll_libnbc_allreduce_init","ompi_coll_libnbc_allreduce_inter_init","ompi_coll_libnbc_alltoall_init","ompi_coll_libnbc_alltoall_inter_init","ompi_coll_libnbc_alltoallv_init","ompi_coll_libnbc_alltoallv_inter_init","ompi_coll_libnbc_alltoallw_init","ompi_coll_libnbc_alltoallw_inter_init","ompi_coll_libnbc_barrier_init","ompi_coll_libnbc_barrier_inter_init","ompi_coll_libnbc_bcast_init","ompi_coll_libnbc_bcast_inter_init","ompi_coll_libnbc_dict_destroy","ompi_coll_libnbc_dict_itor_destroy","ompi_coll_libnbc_dict_long_cmp","ompi_coll_libnbc_dict_ptr_cmp","ompi_coll_libnbc_dict_str_cmp","ompi_coll_libnbc_dict_uint_cmp","ompi_coll_libnbc_dict_ulong_cmp","ompi_coll_libnbc_exscan_init","ompi_coll_libnbc_gather_init","ompi_coll_libnbc_gather_inter_init","ompi_coll_libnbc_gatherv_init","ompi_coll_libnbc_gatherv_inter_init","ompi_coll_libnbc_hb_dict_itor_new","ompi_coll_libnbc_hb_dict_new","ompi_coll_libnbc_hb_itor_cdata","ompi_coll_libnbc_hb_itor_data","ompi_coll_libnbc_hb_itor_destroy","ompi_coll_libnbc_hb_itor_first","ompi_coll_libnbc_hb_itor_invalidate","ompi_coll_libnbc_hb_itor_key","ompi_coll_libnbc_hb_itor_last","ompi_coll_libnbc_hb_itor_new","ompi_coll_libnbc_hb_itor_next","ompi_coll_libnbc_hb_itor_nextn","ompi_coll_libnbc_hb_itor_prev","ompi_coll_libnbc_hb_itor_prevn","ompi_coll_libnbc_hb_itor_set_data","ompi_coll_libnbc_hb_itor_valid","ompi_coll_libnbc_hb_tree_count","ompi_coll_libnbc_hb_tree_destroy","ompi_coll_libnbc_hb_tree_empty","ompi_coll_libnbc_hb_tree_height","ompi_coll_libnbc_hb_tree_insert","ompi_coll_libnbc_hb_tree_max","ompi_coll_libnbc_hb_tree_mheight","ompi_coll_libnbc_hb_tree_min","ompi_coll_libnbc_hb_tree_new","ompi_coll_libnbc_hb_tree_pathlen","ompi_coll_libnbc_hb_tree_probe","ompi_coll_libnbc_hb_tree_remove","ompi_coll_libnbc_hb_tree_search","ompi_coll_libnbc_hb_tree_walk","ompi_coll_libnbc_iallgather","ompi_coll_libnbc_iallgather_inter","ompi_coll_libnbc_iallgatherv","ompi_coll_libnbc_iallgatherv_inter","ompi_coll_libnbc_iallreduce","ompi_coll_libnbc_iallreduce_inter","ompi_coll_libnbc_ialltoall","ompi_coll_libnbc_ialltoall_inter","ompi_coll_libnbc_ialltoallv","ompi_coll_libnbc_ialltoallv_inter","ompi_coll_libnbc_ialltoallw","ompi_coll_libnbc_ialltoallw_inter","ompi_coll_libnbc_ibarrier","ompi_coll_libnbc_ibarrier_inter","ompi_coll_libnbc_ibcast","ompi_coll_libnbc_ibcast_inter","ompi_coll_libnbc_iexscan","ompi_coll_libnbc_igather","ompi_coll_libnbc_igather_inter","ompi_coll_libnbc_igatherv","ompi_coll_libnbc_igatherv_inter","ompi_coll_libnbc_ineighbor_allgather","ompi_coll_libnbc_ineighbor_allgatherv","ompi_coll_libnbc_ineighbor_alltoall","ompi_coll_libnbc_ineighbor_alltoallv","ompi_coll_libnbc_ineighbor_alltoallw","ompi_coll_libnbc_ireduce","ompi_coll_libnbc_ireduce_inter","ompi_coll_libnbc_ireduce_scatter","ompi_coll_libnbc_ireduce_scatter_block","ompi_coll_libnbc_ireduce_scatter_block_inter","ompi_coll_libnbc_ireduce_scatter_inter","ompi_coll_libnbc_iscan","ompi_coll_libnbc_iscatter","ompi_coll_libnbc_iscatter_inter","ompi_coll_libnbc_iscatterv","ompi_coll_libnbc_iscatterv_inter","ompi_coll_libnbc_neighbor_allgather_init","ompi_coll_libnbc_neighbor_allgatherv_init","ompi_coll_libnbc_neighbor_alltoall_init","ompi_coll_libnbc_neighbor_alltoallv_init","ompi_coll_libnbc_neighbor_alltoallw_init","ompi_coll_libnbc_progress","ompi_coll_libnbc_reduce_init","ompi_coll_libnbc_reduce_inter_init","ompi_coll_libnbc_reduce_scatter_block_init","ompi_coll_libnbc_reduce_scatter_block_inter_init","ompi_coll_libnbc_reduce_scatter_init","ompi_coll_libnbc_reduce_scatter_inter_init","ompi_coll_libnbc_scan_init","ompi_coll_libnbc_scatter_init","ompi_coll_libnbc_scatter_inter_init","ompi_coll_libnbc_scatterv_init","ompi_coll_libnbc_scatterv_inter_init","ompi_coll_sm_lazy_enable","ompi_coll_tuned_allgather_intra_check_forced_init","ompi_coll_tuned_allgather_intra_dec_dynamic","ompi_coll_tuned_allgather_intra_dec_fixed","ompi_coll_tuned_allgather_intra_do_this","ompi_coll_tuned_allgatherv_intra_check_forced_init","ompi_coll_tuned_allgatherv_intra_dec_dynamic","ompi_coll_tuned_allgatherv_intra_dec_fixed","ompi_coll_tuned_allgatherv_intra_do_this","ompi_coll_tuned_allreduce_intra_check_forced_init","ompi_coll_tuned_allreduce_intra_dec_dynamic","ompi_coll_tuned_allreduce_intra_dec_fixed","ompi_coll_tuned_allreduce_intra_do_this","ompi_coll_tuned_alltoall_intra_check_forced_init","ompi_coll_tuned_alltoall_intra_dec_dynamic","ompi_coll_tuned_alltoall_intra_dec_fixed","ompi_coll_tuned_alltoall_intra_do_this","ompi_coll_tuned_alltoallv_intra_check_forced_init","ompi_coll_tuned_alltoallv_intra_dec_dynamic","ompi_coll_tuned_alltoallv_intra_dec_fixed","ompi_coll_tuned_alltoallv_intra_do_this","ompi_coll_tuned_barrier_intra_check_forced_init","ompi_coll_tuned_barrier_intra_dec_dynamic","ompi_coll_tuned_barrier_intra_dec_fixed","ompi_coll_tuned_barrier_intra_do_this","ompi_coll_tuned_bcast_intra_check_forced_init","ompi_coll_tuned_bcast_intra_dec_dynamic","ompi_coll_tuned_bcast_intra_dec_fixed","ompi_coll_tuned_bcast_intra_do_this","ompi_coll_tuned_comm_query","ompi_coll_tuned_dump_alg_rule","ompi_coll_tuned_dump_all_rules","ompi_coll_tuned_dump_com_rule","ompi_coll_tuned_dump_msg_rule","ompi_coll_tuned_exscan_intra_check_forced_init","ompi_coll_tuned_exscan_intra_dec_dynamic","ompi_coll_tuned_exscan_intra_do_this","ompi_coll_tuned_forced_getvalues.isra.0","ompi_coll_tuned_free_all_rules","ompi_coll_tuned_free_coms_in_alg_rule","ompi_coll_tuned_free_msg_rules_in_com_rule","ompi_coll_tuned_gather_intra_check_forced_init","ompi_coll_tuned_gather_intra_dec_dynamic","ompi_coll_tuned_gather_intra_dec_fixed","ompi_coll_tuned_gather_intra_do_this","ompi_coll_tuned_get_com_rule_ptr","ompi_coll_tuned_get_target_method_params","ompi_coll_tuned_init_query","ompi_coll_tuned_mk_alg_rules","ompi_coll_tuned_mk_com_rules","ompi_coll_tuned_mk_msg_rules","ompi_coll_tuned_read_rules_config_file","ompi_coll_tuned_reduce_intra_check_forced_init","ompi_coll_tuned_reduce_intra_dec_dynamic","ompi_coll_tuned_reduce_intra_dec_fixed","ompi_coll_tuned_reduce_intra_do_this","ompi_coll_tuned_reduce_scatter_block_intra_check_forced_init","ompi_coll_tuned_reduce_scatter_block_intra_dec_dynamic","ompi_coll_tuned_reduce_scatter_block_intra_dec_fixed","ompi_coll_tuned_reduce_scatter_block_intra_do_this","ompi_coll_tuned_reduce_scatter_intra_check_forced_init","ompi_coll_tuned_reduce_scatter_intra_dec_dynamic","ompi_coll_tuned_reduce_scatter_intra_dec_fixed","ompi_coll_tuned_reduce_scatter_intra_do_this","ompi_coll_tuned_scan_intra_check_forced_init","ompi_coll_tuned_scan_intra_dec_dynamic","ompi_coll_tuned_scan_intra_do_this","ompi_coll_tuned_scatter_intra_check_forced_init","ompi_coll_tuned_scatter_intra_dec_dynamic","ompi_coll_tuned_scatter_intra_dec_fixed","ompi_coll_tuned_scatter_intra_do_this","ompi_comm_ack_failed_internal","ompi_comm_activate","ompi_comm_activate_nb","ompi_comm_activate_nb_complete","ompi_comm_allgather_emulate_intra","ompi_comm_allreduce_bridged_reduce_complete","ompi_comm_allreduce_bridged_xchng_complete","ompi_comm_allreduce_context_construct","ompi_comm_allreduce_context_destruct","ompi_comm_allreduce_getnextcid","ompi_comm_allreduce_group_broadcast","ompi_comm_allreduce_group_nb","ompi_comm_allreduce_group_recv_complete","ompi_comm_allreduce_inter_bcast","ompi_comm_allreduce_inter_leader_exchange","ompi_comm_allreduce_inter_leader_reduce","ompi_comm_allreduce_inter_nb","ompi_comm_allreduce_intra_bridge_nb","ompi_comm_allreduce_intra_nb","ompi_comm_allreduce_intra_pmix_nb","ompi_comm_allreduce_pmix_reduce_complete","ompi_comm_assert_subscribe","ompi_comm_checkcid","ompi_comm_cid_init","ompi_comm_compare","ompi_comm_construct","ompi_comm_create","ompi_comm_create_from_group","ompi_comm_create_group","ompi_comm_create_w_info","ompi_comm_destruct","ompi_comm_determine_first","ompi_comm_determine_first_auto","ompi_comm_dump","ompi_comm_dup","ompi_comm_dup_fn_f","ompi_comm_dup_with_info","ompi_comm_enable","ompi_comm_failure_ack_internal","ompi_comm_failure_detector_finalize","ompi_comm_failure_detector_init","ompi_comm_failure_detector_register_params","ompi_comm_failure_detector_start","ompi_comm_failure_get_acked_internal","ompi_comm_failure_propagate","ompi_comm_failure_propagator_finalize","ompi_comm_failure_propagator_init","ompi_comm_failure_propagator_local","ompi_comm_failure_propagator_register_params","ompi_comm_finalize","ompi_comm_free","ompi_comm_free.localalias","ompi_comm_ft_allreduce_agree_completion","ompi_comm_ft_allreduce_inter_nb","ompi_comm_ft_allreduce_intra_nb","ompi_comm_ft_allreduce_intra_pmix_nb","ompi_comm_get_failed_internal","ompi_comm_get_remote_cid_from_pmix","ompi_comm_get_rprocs","ompi_comm_group","ompi_comm_idup","ompi_comm_idup_getcid","ompi_comm_idup_with_info","ompi_comm_idup_with_info_activate","ompi_comm_idup_with_info_finish","ompi_comm_init","ompi_comm_init_mpi3","ompi_comm_is_proc_active","ompi_comm_ishrink_check_activate","ompi_comm_ishrink_check_agree","ompi_comm_ishrink_check_cid","ompi_comm_ishrink_check_setrank","ompi_comm_ishrink_internal","ompi_comm_nextcid","ompi_comm_nextcid_check_flag","ompi_comm_nextcid_nb","ompi_comm_null_copy_fn_f","ompi_comm_null_delete_fn_f","ompi_comm_print_cid","ompi_comm_rbcast_bmg","ompi_comm_rbcast_bml_recv_cb","ompi_comm_rbcast_finalize","ompi_comm_rbcast_init","ompi_comm_rbcast_n2","ompi_comm_rbcast_null","ompi_comm_rbcast_register_cb_type","ompi_comm_rbcast_register_params","ompi_comm_rbcast_send_msg","ompi_comm_rbcast_unregister_cb_type","ompi_comm_request_cancel","ompi_comm_request_construct","ompi_comm_request_destruct","ompi_comm_request_fini","ompi_comm_request_free","ompi_comm_request_get","ompi_comm_request_init","ompi_comm_request_progress","ompi_comm_request_progress.cold","ompi_comm_request_return","ompi_comm_request_schedule_append","ompi_comm_request_schedule_append_w_flags","ompi_comm_request_start","ompi_comm_revoke_finalize","ompi_comm_revoke_init","ompi_comm_revoke_internal","ompi_comm_revoke_local","ompi_comm_set","ompi_comm_set_active_poll","ompi_comm_set_allow_overtake","ompi_comm_set_exact_length","ompi_comm_set_lazy_barrier","ompi_comm_set_name","ompi_comm_set_nb","ompi_comm_set_no_any_source","ompi_comm_set_no_any_tag","ompi_comm_set_rank_failed","ompi_comm_shrink_internal","ompi_comm_split","ompi_comm_split_type","ompi_comm_split_type_core","ompi_comm_split_type_get_part.constprop.0","ompi_comm_split_verify","ompi_comm_split_with_info","ompi_comm_start_detector","ompi_datatype_copy_args","ompi_datatype_create","ompi_datatype_create_contiguous","ompi_datatype_create_darray","ompi_datatype_create_from_packed_description","ompi_datatype_create_hindexed","ompi_datatype_create_hindexed_block","ompi_datatype_create_hvector","ompi_datatype_create_indexed","ompi_datatype_create_indexed_block","ompi_datatype_create_struct","ompi_datatype_create_subarray","ompi_datatype_create_vector","ompi_datatype_default_convertors_fini","ompi_datatype_default_convertors_init","ompi_datatype_destroy","ompi_datatype_dump","ompi_datatype_duplicate","ompi_datatype_finalize","ompi_datatype_get_args","ompi_datatype_get_elements","ompi_datatype_get_pack_description","ompi_datatype_get_single_predefined_type_from_args","ompi_datatype_get_single_predefined_type_from_args.localalias","ompi_datatype_init","ompi_datatype_init.cold","ompi_datatype_match_size","ompi_datatype_match_size.cold","ompi_datatype_pack_description_length","ompi_datatype_pack_external","ompi_datatype_pack_external_size","ompi_datatype_print_args","ompi_datatype_release_args","ompi_datatype_set_args","ompi_datatype_sndrcv","ompi_datatype_unpack_external","ompi_debugger_setup_dlls","ompi_dpm_close_port","ompi_dpm_connect_accept","ompi_dpm_disconnect","ompi_dpm_dyn_finalize","ompi_dpm_dyn_init","ompi_dpm_init","ompi_dpm_mark_dyncomm","ompi_dpm_open_port","ompi_dpm_spawn","ompi_dup_fn_f","ompi_errcode_get_mpi_code.part.0","ompi_errcode_get_mpi_code.part.0.cold","ompi_errcode_intern_construct","ompi_errcode_intern_destruct","ompi_errcode_intern_finalize","ompi_errcode_intern_init","ompi_errhandler_callback","ompi_errhandler_construct","ompi_errhandler_create","ompi_errhandler_destruct","ompi_errhandler_event_cb","ompi_errhandler_finalize","ompi_errhandler_free","ompi_errhandler_init","ompi_errhandler_invoke","ompi_errhandler_proc_failed_internal","ompi_errhandler_registration_callback","ompi_errhandler_request_invoke","ompi_errhandler_request_invoke.cold","ompi_fcoll_base_coll_allgather_array","ompi_fcoll_base_coll_allgatherv_array","ompi_fcoll_base_coll_bcast_array","ompi_fcoll_base_coll_gather_array","ompi_fcoll_base_coll_gatherv_array","ompi_fcoll_base_coll_scatterv_array","ompi_fcoll_base_sort_iovec","ompi_file_close","ompi_file_finalize","ompi_file_init","ompi_file_open","ompi_fortran_argv_blank_f2c","ompi_fortran_argv_count_f2c","ompi_fortran_multiple_argvs_f2c","ompi_fortran_string_c2f","ompi_fortran_string_f2c","ompi_grequest_cancel","ompi_grequest_complete","ompi_grequest_construct","ompi_grequest_destruct","ompi_grequest_free","ompi_grequest_invoke_query","ompi_grequest_start","ompi_group_allocate","ompi_group_allocate_bmap","ompi_group_allocate_plist_w_procs","ompi_group_allocate_sporadic","ompi_group_allocate_strided","ompi_group_calc_bmap","ompi_group_calc_plist","ompi_group_calc_sporadic","ompi_group_calc_strided","ompi_group_compare","ompi_group_construct","ompi_group_count_local_peers","ompi_group_decrement_proc_count","ompi_group_dense_overlap","ompi_group_destruct","ompi_group_difference","ompi_group_div_ceil","ompi_group_dump","ompi_group_excl","ompi_group_finalize","ompi_group_flatten","ompi_group_free","ompi_group_from_pset","ompi_group_have_remote_peers","ompi_group_incl","ompi_group_incl_bmap","ompi_group_incl_plist","ompi_group_incl_spor","ompi_group_incl_strided","ompi_group_increment_proc_count","ompi_group_init","ompi_group_intersection","ompi_group_minloc","ompi_group_overlap","ompi_group_range_excl","ompi_group_range_incl","ompi_group_to_proc_name_array","ompi_group_translate_ranks","ompi_group_translate_ranks_bmap","ompi_group_translate_ranks_bmap_reverse","ompi_group_translate_ranks_sporadic","ompi_group_translate_ranks_sporadic_reverse","ompi_group_translate_ranks_strided","ompi_group_translate_ranks_strided_reverse","ompi_group_union","ompi_hook_base_close","ompi_hook_base_deregister_callbacks","ompi_hook_base_mpi_finalize_bottom","ompi_hook_base_mpi_finalize_top","ompi_hook_base_mpi_finalized_bottom","ompi_hook_base_mpi_finalized_top","ompi_hook_base_mpi_init_bottom","ompi_hook_base_mpi_init_error","ompi_hook_base_mpi_init_thread_bottom","ompi_hook_base_mpi_init_thread_top","ompi_hook_base_mpi_init_top","ompi_hook_base_mpi_init_top_post_opal","ompi_hook_base_mpi_initialized_bottom","ompi_hook_base_mpi_initialized_top","ompi_hook_base_open","ompi_hook_base_register","ompi_hook_base_register_callbacks","ompi_hook_comm_method_component_close","ompi_hook_comm_method_component_open","ompi_hook_comm_method_component_register","ompi_hook_comm_method_mpi_finalize_top","ompi_hook_comm_method_mpi_init_bottom","ompi_info_allocate","ompi_info_close_components","ompi_info_delete","ompi_info_dup","ompi_info_free","ompi_info_get","ompi_info_get_bool","ompi_info_get_nkeys","ompi_info_get_nthkey","ompi_info_get_value_enum","ompi_info_get_valuelen","ompi_info_register_framework_params","ompi_info_register_types","ompi_info_set","ompi_info_set_value_enum","ompi_info_show_ompi_version","ompi_init_preconnect_mpi","ompi_initial_errhandler_init","ompi_instance_construct","ompi_instance_destruct","ompi_instance_get_nth_pset","ompi_instance_get_num_psets","ompi_instance_get_num_psets_complete","ompi_instance_get_pset_info","ompi_instance_group_pmix_pset","ompi_instance_group_shared","ompi_instance_print_error.part.0","ompi_instance_refresh_pmix_psets","ompi_intercomm_create","ompi_intercomm_create_from_groups","ompi_interlib_declare","ompi_io_ompio_generate_current_file_view","ompi_io_ompio_generate_current_file_view.cold","ompi_io_ompio_sort_offlen","ompi_isendrecv_complete_func","ompi_isendrecv_context_constructor","ompi_isendrecv_context_destructor","ompi_isendrecv_replace_complete_func","ompi_message_constructor","ompi_message_finalize","ompi_message_init","ompi_mirror_perm","ompi_mpi_abort","ompi_mpi_dynamics_disable","ompi_mpi_dynamics_finalize","ompi_mpi_dynamics_is_enabled","ompi_mpi_errclass_add","ompi_mpi_errcode_add","ompi_mpi_errcode_construct","ompi_mpi_errcode_destruct","ompi_mpi_errcode_finalize","ompi_mpi_errcode_init","ompi_mpi_errnum_add_string","ompi_mpi_errors_abort_comm_handler","ompi_mpi_errors_abort_file_handler","ompi_mpi_errors_abort_win_handler","ompi_mpi_errors_are_fatal_comm_handler","ompi_mpi_errors_are_fatal_file_handler","ompi_mpi_errors_are_fatal_instance_handler","ompi_mpi_errors_are_fatal_win_handler","ompi_mpi_errors_return_comm_handler","ompi_mpi_errors_return_file_handler","ompi_mpi_errors_return_instance_handler","ompi_mpi_errors_return_win_handler","ompi_mpi_finalize","ompi_mpi_init","ompi_mpi_instance_cleanup_pml","ompi_mpi_instance_finalize","ompi_mpi_instance_finalize_common","ompi_mpi_instance_init","ompi_mpi_instance_init_common","ompi_mpi_instance_release","ompi_mpi_instance_retain","ompi_mpi_register_params","ompi_mpi_thread_level","ompi_mpiext_fini","ompi_mpiext_init","ompi_mpiinfo_finalize","ompi_mpiinfo_init","ompi_mpiinfo_init_env","ompi_mpit_lock","ompi_mpit_unlock","ompi_mtl_base_close","ompi_mtl_base_select","ompi_null_copy_fn_f","ompi_null_delete_fn_f","ompi_op_avx_2buff_add_double_avx","ompi_op_avx_2buff_add_double_avx2","ompi_op_avx_2buff_add_double_avx512","ompi_op_avx_2buff_add_float_avx","ompi_op_avx_2buff_add_float_avx2","ompi_op_avx_2buff_add_float_avx512","ompi_op_avx_2buff_band_int16_t_avx","ompi_op_avx_2buff_band_int16_t_avx2","ompi_op_avx_2buff_band_int16_t_avx512","ompi_op_avx_2buff_band_int32_t_avx","ompi_op_avx_2buff_band_int32_t_avx2","ompi_op_avx_2buff_band_int32_t_avx512","ompi_op_avx_2buff_band_int64_t_avx","ompi_op_avx_2buff_band_int64_t_avx2","ompi_op_avx_2buff_band_int64_t_avx512","ompi_op_avx_2buff_band_int8_t_avx","ompi_op_avx_2buff_band_int8_t_avx2","ompi_op_avx_2buff_band_int8_t_avx512","ompi_op_avx_2buff_band_uint16_t_avx","ompi_op_avx_2buff_band_uint16_t_avx2","ompi_op_avx_2buff_band_uint16_t_avx512","ompi_op_avx_2buff_band_uint32_t_avx","ompi_op_avx_2buff_band_uint32_t_avx2","ompi_op_avx_2buff_band_uint32_t_avx512","ompi_op_avx_2buff_band_uint64_t_avx","ompi_op_avx_2buff_band_uint64_t_avx2","ompi_op_avx_2buff_band_uint64_t_avx512","ompi_op_avx_2buff_band_uint8_t_avx","ompi_op_avx_2buff_band_uint8_t_avx2","ompi_op_avx_2buff_band_uint8_t_avx512","ompi_op_avx_2buff_bor_int16_t_avx","ompi_op_avx_2buff_bor_int16_t_avx2","ompi_op_avx_2buff_bor_int16_t_avx512","ompi_op_avx_2buff_bor_int32_t_avx","ompi_op_avx_2buff_bor_int32_t_avx2","ompi_op_avx_2buff_bor_int32_t_avx512","ompi_op_avx_2buff_bor_int64_t_avx","ompi_op_avx_2buff_bor_int64_t_avx2","ompi_op_avx_2buff_bor_int64_t_avx512","ompi_op_avx_2buff_bor_int8_t_avx","ompi_op_avx_2buff_bor_int8_t_avx2","ompi_op_avx_2buff_bor_int8_t_avx512","ompi_op_avx_2buff_bor_uint16_t_avx","ompi_op_avx_2buff_bor_uint16_t_avx2","ompi_op_avx_2buff_bor_uint16_t_avx512","ompi_op_avx_2buff_bor_uint32_t_avx","ompi_op_avx_2buff_bor_uint32_t_avx2","ompi_op_avx_2buff_bor_uint32_t_avx512","ompi_op_avx_2buff_bor_uint64_t_avx","ompi_op_avx_2buff_bor_uint64_t_avx2","ompi_op_avx_2buff_bor_uint64_t_avx512","ompi_op_avx_2buff_bor_uint8_t_avx","ompi_op_avx_2buff_bor_uint8_t_avx2","ompi_op_avx_2buff_bor_uint8_t_avx512","ompi_op_avx_2buff_bxor_int16_t_avx","ompi_op_avx_2buff_bxor_int16_t_avx2","ompi_op_avx_2buff_bxor_int16_t_avx512","ompi_op_avx_2buff_bxor_int32_t_avx","ompi_op_avx_2buff_bxor_int32_t_avx2","ompi_op_avx_2buff_bxor_int32_t_avx512","ompi_op_avx_2buff_bxor_int64_t_avx","ompi_op_avx_2buff_bxor_int64_t_avx2","ompi_op_avx_2buff_bxor_int64_t_avx512","ompi_op_avx_2buff_bxor_int8_t_avx","ompi_op_avx_2buff_bxor_int8_t_avx2","ompi_op_avx_2buff_bxor_int8_t_avx512","ompi_op_avx_2buff_bxor_uint16_t_avx","ompi_op_avx_2buff_bxor_uint16_t_avx2","ompi_op_avx_2buff_bxor_uint16_t_avx512","ompi_op_avx_2buff_bxor_uint32_t_avx","ompi_op_avx_2buff_bxor_uint32_t_avx2","ompi_op_avx_2buff_bxor_uint32_t_avx512","ompi_op_avx_2buff_bxor_uint64_t_avx","ompi_op_avx_2buff_bxor_uint64_t_avx2","ompi_op_avx_2buff_bxor_uint64_t_avx512","ompi_op_avx_2buff_bxor_uint8_t_avx","ompi_op_avx_2buff_bxor_uint8_t_avx2","ompi_op_avx_2buff_bxor_uint8_t_avx512","ompi_op_avx_2buff_max_double_avx","ompi_op_avx_2buff_max_double_avx2","ompi_op_avx_2buff_max_double_avx512","ompi_op_avx_2buff_max_float_avx","ompi_op_avx_2buff_max_float_avx2","ompi_op_avx_2buff_max_float_avx512","ompi_op_avx_2buff_max_int16_t_avx","ompi_op_avx_2buff_max_int16_t_avx2","ompi_op_avx_2buff_max_int16_t_avx512","ompi_op_avx_2buff_max_int32_t_avx","ompi_op_avx_2buff_max_int32_t_avx2","ompi_op_avx_2buff_max_int32_t_avx512","ompi_op_avx_2buff_max_int64_t_avx512","ompi_op_avx_2buff_max_int8_t_avx","ompi_op_avx_2buff_max_int8_t_avx2","ompi_op_avx_2buff_max_int8_t_avx512","ompi_op_avx_2buff_max_uint16_t_avx","ompi_op_avx_2buff_max_uint16_t_avx2","ompi_op_avx_2buff_max_uint16_t_avx512","ompi_op_avx_2buff_max_uint32_t_avx","ompi_op_avx_2buff_max_uint32_t_avx2","ompi_op_avx_2buff_max_uint32_t_avx512","ompi_op_avx_2buff_max_uint64_t_avx512","ompi_op_avx_2buff_max_uint8_t_avx","ompi_op_avx_2buff_max_uint8_t_avx2","ompi_op_avx_2buff_max_uint8_t_avx512","ompi_op_avx_2buff_min_double_avx","ompi_op_avx_2buff_min_double_avx2","ompi_op_avx_2buff_min_double_avx512","ompi_op_avx_2buff_min_float_avx","ompi_op_avx_2buff_min_float_avx2","ompi_op_avx_2buff_min_float_avx512","ompi_op_avx_2buff_min_int16_t_avx","ompi_op_avx_2buff_min_int16_t_avx2","ompi_op_avx_2buff_min_int16_t_avx512","ompi_op_avx_2buff_min_int32_t_avx","ompi_op_avx_2buff_min_int32_t_avx2","ompi_op_avx_2buff_min_int32_t_avx512","ompi_op_avx_2buff_min_int64_t_avx512","ompi_op_avx_2buff_min_int8_t_avx","ompi_op_avx_2buff_min_int8_t_avx2","ompi_op_avx_2buff_min_int8_t_avx512","ompi_op_avx_2buff_min_uint16_t_avx","ompi_op_avx_2buff_min_uint16_t_avx2","ompi_op_avx_2buff_min_uint16_t_avx512","ompi_op_avx_2buff_min_uint32_t_avx","ompi_op_avx_2buff_min_uint32_t_avx2","ompi_op_avx_2buff_min_uint32_t_avx512","ompi_op_avx_2buff_min_uint64_t_avx512","ompi_op_avx_2buff_min_uint8_t_avx","ompi_op_avx_2buff_min_uint8_t_avx2","ompi_op_avx_2buff_min_uint8_t_avx512","ompi_op_avx_2buff_mul_double_avx","ompi_op_avx_2buff_mul_double_avx2","ompi_op_avx_2buff_mul_double_avx512","ompi_op_avx_2buff_mul_float_avx","ompi_op_avx_2buff_mul_float_avx2","ompi_op_avx_2buff_mul_float_avx512","ompi_op_avx_2buff_prod_int16_t_avx","ompi_op_avx_2buff_prod_int16_t_avx2","ompi_op_avx_2buff_prod_int16_t_avx512","ompi_op_avx_2buff_prod_int32_t_avx","ompi_op_avx_2buff_prod_int32_t_avx2","ompi_op_avx_2buff_prod_int32_t_avx512","ompi_op_avx_2buff_prod_int64_t_avx512","ompi_op_avx_2buff_prod_int8_t_avx","ompi_op_avx_2buff_prod_int8_t_avx2","ompi_op_avx_2buff_prod_int8_t_avx512","ompi_op_avx_2buff_prod_uint16_t_avx","ompi_op_avx_2buff_prod_uint16_t_avx2","ompi_op_avx_2buff_prod_uint16_t_avx512","ompi_op_avx_2buff_prod_uint32_t_avx","ompi_op_avx_2buff_prod_uint32_t_avx2","ompi_op_avx_2buff_prod_uint32_t_avx512","ompi_op_avx_2buff_prod_uint64_t_avx512","ompi_op_avx_2buff_prod_uint8_t_avx","ompi_op_avx_2buff_prod_uint8_t_avx2","ompi_op_avx_2buff_prod_uint8_t_avx512","ompi_op_avx_2buff_sum_int16_t_avx","ompi_op_avx_2buff_sum_int16_t_avx2","ompi_op_avx_2buff_sum_int16_t_avx512","ompi_op_avx_2buff_sum_int32_t_avx","ompi_op_avx_2buff_sum_int32_t_avx2","ompi_op_avx_2buff_sum_int32_t_avx512","ompi_op_avx_2buff_sum_int64_t_avx","ompi_op_avx_2buff_sum_int64_t_avx2","ompi_op_avx_2buff_sum_int64_t_avx512","ompi_op_avx_2buff_sum_int8_t_avx","ompi_op_avx_2buff_sum_int8_t_avx2","ompi_op_avx_2buff_sum_int8_t_avx512","ompi_op_avx_2buff_sum_uint16_t_avx","ompi_op_avx_2buff_sum_uint16_t_avx2","ompi_op_avx_2buff_sum_uint16_t_avx512","ompi_op_avx_2buff_sum_uint32_t_avx","ompi_op_avx_2buff_sum_uint32_t_avx2","ompi_op_avx_2buff_sum_uint32_t_avx512","ompi_op_avx_2buff_sum_uint64_t_avx","ompi_op_avx_2buff_sum_uint64_t_avx2","ompi_op_avx_2buff_sum_uint64_t_avx512","ompi_op_avx_2buff_sum_uint8_t_avx","ompi_op_avx_2buff_sum_uint8_t_avx2","ompi_op_avx_2buff_sum_uint8_t_avx512","ompi_op_avx_3buff_add_double_avx","ompi_op_avx_3buff_add_double_avx2","ompi_op_avx_3buff_add_double_avx512","ompi_op_avx_3buff_add_float_avx","ompi_op_avx_3buff_add_float_avx2","ompi_op_avx_3buff_add_float_avx512","ompi_op_avx_3buff_and_int16_t_avx","ompi_op_avx_3buff_and_int16_t_avx2","ompi_op_avx_3buff_and_int16_t_avx512","ompi_op_avx_3buff_and_int32_t_avx","ompi_op_avx_3buff_and_int32_t_avx2","ompi_op_avx_3buff_and_int32_t_avx512","ompi_op_avx_3buff_and_int64_t_avx","ompi_op_avx_3buff_and_int64_t_avx2","ompi_op_avx_3buff_and_int64_t_avx512","ompi_op_avx_3buff_and_int8_t_avx","ompi_op_avx_3buff_and_int8_t_avx2","ompi_op_avx_3buff_and_int8_t_avx512","ompi_op_avx_3buff_and_uint16_t_avx","ompi_op_avx_3buff_and_uint16_t_avx2","ompi_op_avx_3buff_and_uint16_t_avx512","ompi_op_avx_3buff_and_uint32_t_avx","ompi_op_avx_3buff_and_uint32_t_avx2","ompi_op_avx_3buff_and_uint32_t_avx512","ompi_op_avx_3buff_and_uint64_t_avx","ompi_op_avx_3buff_and_uint64_t_avx2","ompi_op_avx_3buff_and_uint64_t_avx512","ompi_op_avx_3buff_and_uint8_t_avx","ompi_op_avx_3buff_and_uint8_t_avx2","ompi_op_avx_3buff_and_uint8_t_avx512","ompi_op_avx_3buff_max_double_avx","ompi_op_avx_3buff_max_double_avx2","ompi_op_avx_3buff_max_double_avx512","ompi_op_avx_3buff_max_float_avx","ompi_op_avx_3buff_max_float_avx2","ompi_op_avx_3buff_max_float_avx512","ompi_op_avx_3buff_max_int16_t_avx","ompi_op_avx_3buff_max_int16_t_avx2","ompi_op_avx_3buff_max_int16_t_avx512","ompi_op_avx_3buff_max_int32_t_avx","ompi_op_avx_3buff_max_int32_t_avx2","ompi_op_avx_3buff_max_int32_t_avx512","ompi_op_avx_3buff_max_int64_t_avx512","ompi_op_avx_3buff_max_int8_t_avx","ompi_op_avx_3buff_max_int8_t_avx2","ompi_op_avx_3buff_max_int8_t_avx512","ompi_op_avx_3buff_max_uint16_t_avx","ompi_op_avx_3buff_max_uint16_t_avx2","ompi_op_avx_3buff_max_uint16_t_avx512","ompi_op_avx_3buff_max_uint32_t_avx","ompi_op_avx_3buff_max_uint32_t_avx2","ompi_op_avx_3buff_max_uint32_t_avx512","ompi_op_avx_3buff_max_uint64_t_avx512","ompi_op_avx_3buff_max_uint8_t_avx","ompi_op_avx_3buff_max_uint8_t_avx2","ompi_op_avx_3buff_max_uint8_t_avx512","ompi_op_avx_3buff_min_double_avx","ompi_op_avx_3buff_min_double_avx2","ompi_op_avx_3buff_min_double_avx512","ompi_op_avx_3buff_min_float_avx","ompi_op_avx_3buff_min_float_avx2","ompi_op_avx_3buff_min_float_avx512","ompi_op_avx_3buff_min_int16_t_avx","ompi_op_avx_3buff_min_int16_t_avx2","ompi_op_avx_3buff_min_int16_t_avx512","ompi_op_avx_3buff_min_int32_t_avx","ompi_op_avx_3buff_min_int32_t_avx2","ompi_op_avx_3buff_min_int32_t_avx512","ompi_op_avx_3buff_min_int64_t_avx512","ompi_op_avx_3buff_min_int8_t_avx","ompi_op_avx_3buff_min_int8_t_avx2","ompi_op_avx_3buff_min_int8_t_avx512","ompi_op_avx_3buff_min_uint16_t_avx","ompi_op_avx_3buff_min_uint16_t_avx2","ompi_op_avx_3buff_min_uint16_t_avx512","ompi_op_avx_3buff_min_uint32_t_avx","ompi_op_avx_3buff_min_uint32_t_avx2","ompi_op_avx_3buff_min_uint32_t_avx512","ompi_op_avx_3buff_min_uint64_t_avx512","ompi_op_avx_3buff_min_uint8_t_avx","ompi_op_avx_3buff_min_uint8_t_avx2","ompi_op_avx_3buff_min_uint8_t_avx512","ompi_op_avx_3buff_mul_double_avx","ompi_op_avx_3buff_mul_double_avx2","ompi_op_avx_3buff_mul_double_avx512","ompi_op_avx_3buff_mul_float_avx","ompi_op_avx_3buff_mul_float_avx2","ompi_op_avx_3buff_mul_float_avx512","ompi_op_avx_3buff_or_int16_t_avx","ompi_op_avx_3buff_or_int16_t_avx2","ompi_op_avx_3buff_or_int16_t_avx512","ompi_op_avx_3buff_or_int32_t_avx","ompi_op_avx_3buff_or_int32_t_avx2","ompi_op_avx_3buff_or_int32_t_avx512","ompi_op_avx_3buff_or_int64_t_avx","ompi_op_avx_3buff_or_int64_t_avx2","ompi_op_avx_3buff_or_int64_t_avx512","ompi_op_avx_3buff_or_int8_t_avx","ompi_op_avx_3buff_or_int8_t_avx2","ompi_op_avx_3buff_or_int8_t_avx512","ompi_op_avx_3buff_or_uint16_t_avx","ompi_op_avx_3buff_or_uint16_t_avx2","ompi_op_avx_3buff_or_uint16_t_avx512","ompi_op_avx_3buff_or_uint32_t_avx","ompi_op_avx_3buff_or_uint32_t_avx2","ompi_op_avx_3buff_or_uint32_t_avx512","ompi_op_avx_3buff_or_uint64_t_avx","ompi_op_avx_3buff_or_uint64_t_avx2","ompi_op_avx_3buff_or_uint64_t_avx512","ompi_op_avx_3buff_or_uint8_t_avx","ompi_op_avx_3buff_or_uint8_t_avx2","ompi_op_avx_3buff_or_uint8_t_avx512","ompi_op_avx_3buff_prod_int16_t_avx","ompi_op_avx_3buff_prod_int16_t_avx2","ompi_op_avx_3buff_prod_int16_t_avx512","ompi_op_avx_3buff_prod_int32_t_avx","ompi_op_avx_3buff_prod_int32_t_avx2","ompi_op_avx_3buff_prod_int32_t_avx512","ompi_op_avx_3buff_prod_int64_t_avx512","ompi_op_avx_3buff_prod_int8_t_avx","ompi_op_avx_3buff_prod_int8_t_avx2","ompi_op_avx_3buff_prod_int8_t_avx512","ompi_op_avx_3buff_prod_uint16_t_avx","ompi_op_avx_3buff_prod_uint16_t_avx2","ompi_op_avx_3buff_prod_uint16_t_avx512","ompi_op_avx_3buff_prod_uint32_t_avx","ompi_op_avx_3buff_prod_uint32_t_avx2","ompi_op_avx_3buff_prod_uint32_t_avx512","ompi_op_avx_3buff_prod_uint64_t_avx512","ompi_op_avx_3buff_prod_uint8_t_avx","ompi_op_avx_3buff_prod_uint8_t_avx2","ompi_op_avx_3buff_prod_uint8_t_avx512","ompi_op_avx_3buff_sum_int16_t_avx","ompi_op_avx_3buff_sum_int16_t_avx2","ompi_op_avx_3buff_sum_int16_t_avx512","ompi_op_avx_3buff_sum_int32_t_avx","ompi_op_avx_3buff_sum_int32_t_avx2","ompi_op_avx_3buff_sum_int32_t_avx512","ompi_op_avx_3buff_sum_int64_t_avx","ompi_op_avx_3buff_sum_int64_t_avx2","ompi_op_avx_3buff_sum_int64_t_avx512","ompi_op_avx_3buff_sum_int8_t_avx","ompi_op_avx_3buff_sum_int8_t_avx2","ompi_op_avx_3buff_sum_int8_t_avx512","ompi_op_avx_3buff_sum_uint16_t_avx","ompi_op_avx_3buff_sum_uint16_t_avx2","ompi_op_avx_3buff_sum_uint16_t_avx512","ompi_op_avx_3buff_sum_uint32_t_avx","ompi_op_avx_3buff_sum_uint32_t_avx2","ompi_op_avx_3buff_sum_uint32_t_avx512","ompi_op_avx_3buff_sum_uint64_t_avx","ompi_op_avx_3buff_sum_uint64_t_avx2","ompi_op_avx_3buff_sum_uint64_t_avx512","ompi_op_avx_3buff_sum_uint8_t_avx","ompi_op_avx_3buff_sum_uint8_t_avx2","ompi_op_avx_3buff_sum_uint8_t_avx512","ompi_op_avx_3buff_xor_int16_t_avx","ompi_op_avx_3buff_xor_int16_t_avx2","ompi_op_avx_3buff_xor_int16_t_avx512","ompi_op_avx_3buff_xor_int32_t_avx","ompi_op_avx_3buff_xor_int32_t_avx2","ompi_op_avx_3buff_xor_int32_t_avx512","ompi_op_avx_3buff_xor_int64_t_avx","ompi_op_avx_3buff_xor_int64_t_avx2","ompi_op_avx_3buff_xor_int64_t_avx512","ompi_op_avx_3buff_xor_int8_t_avx","ompi_op_avx_3buff_xor_int8_t_avx2","ompi_op_avx_3buff_xor_int8_t_avx512","ompi_op_avx_3buff_xor_uint16_t_avx","ompi_op_avx_3buff_xor_uint16_t_avx2","ompi_op_avx_3buff_xor_uint16_t_avx512","ompi_op_avx_3buff_xor_uint32_t_avx","ompi_op_avx_3buff_xor_uint32_t_avx2","ompi_op_avx_3buff_xor_uint32_t_avx512","ompi_op_avx_3buff_xor_uint64_t_avx","ompi_op_avx_3buff_xor_uint64_t_avx2","ompi_op_avx_3buff_xor_uint64_t_avx512","ompi_op_avx_3buff_xor_uint8_t_avx","ompi_op_avx_3buff_xor_uint8_t_avx2","ompi_op_avx_3buff_xor_uint8_t_avx512","ompi_op_base_2buff_band_byte","ompi_op_base_2buff_band_fortran_integer","ompi_op_base_2buff_band_fortran_integer1","ompi_op_base_2buff_band_fortran_integer2","ompi_op_base_2buff_band_fortran_integer4","ompi_op_base_2buff_band_fortran_integer8","ompi_op_base_2buff_band_int16_t","ompi_op_base_2buff_band_int32_t","ompi_op_base_2buff_band_int64_t","ompi_op_base_2buff_band_int8_t","ompi_op_base_2buff_band_long","ompi_op_base_2buff_band_uint16_t","ompi_op_base_2buff_band_uint32_t","ompi_op_base_2buff_band_uint64_t","ompi_op_base_2buff_band_uint8_t","ompi_op_base_2buff_band_unsigned_long","ompi_op_base_2buff_bor_byte","ompi_op_base_2buff_bor_fortran_integer","ompi_op_base_2buff_bor_fortran_integer1","ompi_op_base_2buff_bor_fortran_integer2","ompi_op_base_2buff_bor_fortran_integer4","ompi_op_base_2buff_bor_fortran_integer8","ompi_op_base_2buff_bor_int16_t","ompi_op_base_2buff_bor_int32_t","ompi_op_base_2buff_bor_int64_t","ompi_op_base_2buff_bor_int8_t","ompi_op_base_2buff_bor_long","ompi_op_base_2buff_bor_uint16_t","ompi_op_base_2buff_bor_uint32_t","ompi_op_base_2buff_bor_uint64_t","ompi_op_base_2buff_bor_uint8_t","ompi_op_base_2buff_bor_unsigned_long","ompi_op_base_2buff_bxor_byte","ompi_op_base_2buff_bxor_fortran_integer","ompi_op_base_2buff_bxor_fortran_integer1","ompi_op_base_2buff_bxor_fortran_integer2","ompi_op_base_2buff_bxor_fortran_integer4","ompi_op_base_2buff_bxor_fortran_integer8","ompi_op_base_2buff_bxor_int16_t","ompi_op_base_2buff_bxor_int32_t","ompi_op_base_2buff_bxor_int64_t","ompi_op_base_2buff_bxor_int8_t","ompi_op_base_2buff_bxor_long","ompi_op_base_2buff_bxor_uint16_t","ompi_op_base_2buff_bxor_uint32_t","ompi_op_base_2buff_bxor_uint64_t","ompi_op_base_2buff_bxor_uint8_t","ompi_op_base_2buff_bxor_unsigned_long","ompi_op_base_2buff_land_bool","ompi_op_base_2buff_land_fortran_logical","ompi_op_base_2buff_land_int16_t","ompi_op_base_2buff_land_int32_t","ompi_op_base_2buff_land_int64_t","ompi_op_base_2buff_land_int8_t","ompi_op_base_2buff_land_long","ompi_op_base_2buff_land_uint16_t","ompi_op_base_2buff_land_uint32_t","ompi_op_base_2buff_land_uint64_t","ompi_op_base_2buff_land_uint8_t","ompi_op_base_2buff_land_unsigned_long","ompi_op_base_2buff_lor_bool","ompi_op_base_2buff_lor_fortran_logical","ompi_op_base_2buff_lor_int16_t","ompi_op_base_2buff_lor_int32_t","ompi_op_base_2buff_lor_int64_t","ompi_op_base_2buff_lor_int8_t","ompi_op_base_2buff_lor_long","ompi_op_base_2buff_lor_uint16_t","ompi_op_base_2buff_lor_uint32_t","ompi_op_base_2buff_lor_uint64_t","ompi_op_base_2buff_lor_uint8_t","ompi_op_base_2buff_lor_unsigned_long","ompi_op_base_2buff_lxor_bool","ompi_op_base_2buff_lxor_fortran_logical","ompi_op_base_2buff_lxor_int16_t","ompi_op_base_2buff_lxor_int32_t","ompi_op_base_2buff_lxor_int64_t","ompi_op_base_2buff_lxor_int8_t","ompi_op_base_2buff_lxor_long","ompi_op_base_2buff_lxor_uint16_t","ompi_op_base_2buff_lxor_uint32_t","ompi_op_base_2buff_lxor_uint64_t","ompi_op_base_2buff_lxor_uint8_t","ompi_op_base_2buff_lxor_unsigned_long","ompi_op_base_2buff_max_double","ompi_op_base_2buff_max_float","ompi_op_base_2buff_max_fortran_double_precision","ompi_op_base_2buff_max_fortran_integer","ompi_op_base_2buff_max_fortran_integer1","ompi_op_base_2buff_max_fortran_integer2","ompi_op_base_2buff_max_fortran_integer4","ompi_op_base_2buff_max_fortran_integer8","ompi_op_base_2buff_max_fortran_real","ompi_op_base_2buff_max_fortran_real16","ompi_op_base_2buff_max_fortran_real4","ompi_op_base_2buff_max_fortran_real8","ompi_op_base_2buff_max_int16_t","ompi_op_base_2buff_max_int32_t","ompi_op_base_2buff_max_int64_t","ompi_op_base_2buff_max_int8_t","ompi_op_base_2buff_max_long","ompi_op_base_2buff_max_long_double","ompi_op_base_2buff_max_uint16_t","ompi_op_base_2buff_max_uint32_t","ompi_op_base_2buff_max_uint64_t","ompi_op_base_2buff_max_uint8_t","ompi_op_base_2buff_max_unsigned_long","ompi_op_base_2buff_maxloc_2double_precision","ompi_op_base_2buff_maxloc_2int","ompi_op_base_2buff_maxloc_2integer","ompi_op_base_2buff_maxloc_2real","ompi_op_base_2buff_maxloc_double_int","ompi_op_base_2buff_maxloc_float_int","ompi_op_base_2buff_maxloc_long_double_int","ompi_op_base_2buff_maxloc_long_int","ompi_op_base_2buff_maxloc_short_int","ompi_op_base_2buff_min_double","ompi_op_base_2buff_min_float","ompi_op_base_2buff_min_fortran_double_precision","ompi_op_base_2buff_min_fortran_integer","ompi_op_base_2buff_min_fortran_integer1","ompi_op_base_2buff_min_fortran_integer2","ompi_op_base_2buff_min_fortran_integer4","ompi_op_base_2buff_min_fortran_integer8","ompi_op_base_2buff_min_fortran_real","ompi_op_base_2buff_min_fortran_real16","ompi_op_base_2buff_min_fortran_real4","ompi_op_base_2buff_min_fortran_real8","ompi_op_base_2buff_min_int16_t","ompi_op_base_2buff_min_int32_t","ompi_op_base_2buff_min_int64_t","ompi_op_base_2buff_min_int8_t","ompi_op_base_2buff_min_long","ompi_op_base_2buff_min_long_double","ompi_op_base_2buff_min_uint16_t","ompi_op_base_2buff_min_uint32_t","ompi_op_base_2buff_min_uint64_t","ompi_op_base_2buff_min_uint8_t","ompi_op_base_2buff_min_unsigned_long","ompi_op_base_2buff_minloc_2double_precision","ompi_op_base_2buff_minloc_2int","ompi_op_base_2buff_minloc_2integer","ompi_op_base_2buff_minloc_2real","ompi_op_base_2buff_minloc_double_int","ompi_op_base_2buff_minloc_float_int","ompi_op_base_2buff_minloc_long_double_int","ompi_op_base_2buff_minloc_long_int","ompi_op_base_2buff_minloc_short_int","ompi_op_base_2buff_prod_c_double_complex","ompi_op_base_2buff_prod_c_float_complex","ompi_op_base_2buff_prod_c_long_double_complex","ompi_op_base_2buff_prod_double","ompi_op_base_2buff_prod_float","ompi_op_base_2buff_prod_fortran_double_precision","ompi_op_base_2buff_prod_fortran_integer","ompi_op_base_2buff_prod_fortran_integer1","ompi_op_base_2buff_prod_fortran_integer2","ompi_op_base_2buff_prod_fortran_integer4","ompi_op_base_2buff_prod_fortran_integer8","ompi_op_base_2buff_prod_fortran_real","ompi_op_base_2buff_prod_fortran_real16","ompi_op_base_2buff_prod_fortran_real4","ompi_op_base_2buff_prod_fortran_real8","ompi_op_base_2buff_prod_int16_t","ompi_op_base_2buff_prod_int32_t","ompi_op_base_2buff_prod_int64_t","ompi_op_base_2buff_prod_int8_t","ompi_op_base_2buff_prod_long","ompi_op_base_2buff_prod_long_double","ompi_op_base_2buff_prod_uint16_t","ompi_op_base_2buff_prod_uint32_t","ompi_op_base_2buff_prod_uint64_t","ompi_op_base_2buff_prod_uint8_t","ompi_op_base_2buff_prod_unsigned_long","ompi_op_base_2buff_sum_c_double_complex","ompi_op_base_2buff_sum_c_float_complex","ompi_op_base_2buff_sum_c_long_double_complex","ompi_op_base_2buff_sum_double","ompi_op_base_2buff_sum_float","ompi_op_base_2buff_sum_fortran_double_precision","ompi_op_base_2buff_sum_fortran_integer","ompi_op_base_2buff_sum_fortran_integer1","ompi_op_base_2buff_sum_fortran_integer2","ompi_op_base_2buff_sum_fortran_integer4","ompi_op_base_2buff_sum_fortran_integer8","ompi_op_base_2buff_sum_fortran_real","ompi_op_base_2buff_sum_fortran_real16","ompi_op_base_2buff_sum_fortran_real4","ompi_op_base_2buff_sum_fortran_real8","ompi_op_base_2buff_sum_int16_t","ompi_op_base_2buff_sum_int32_t","ompi_op_base_2buff_sum_int64_t","ompi_op_base_2buff_sum_int8_t","ompi_op_base_2buff_sum_long","ompi_op_base_2buff_sum_long_double","ompi_op_base_2buff_sum_uint16_t","ompi_op_base_2buff_sum_uint32_t","ompi_op_base_2buff_sum_uint64_t","ompi_op_base_2buff_sum_uint8_t","ompi_op_base_2buff_sum_unsigned_long","ompi_op_base_3buff_band_byte","ompi_op_base_3buff_band_fortran_integer","ompi_op_base_3buff_band_fortran_integer1","ompi_op_base_3buff_band_fortran_integer2","ompi_op_base_3buff_band_fortran_integer4","ompi_op_base_3buff_band_fortran_integer8","ompi_op_base_3buff_band_int16_t","ompi_op_base_3buff_band_int32_t","ompi_op_base_3buff_band_int64_t","ompi_op_base_3buff_band_int8_t","ompi_op_base_3buff_band_long","ompi_op_base_3buff_band_uint16_t","ompi_op_base_3buff_band_uint32_t","ompi_op_base_3buff_band_uint64_t","ompi_op_base_3buff_band_uint8_t","ompi_op_base_3buff_band_unsigned_long","ompi_op_base_3buff_bor_byte","ompi_op_base_3buff_bor_fortran_integer","ompi_op_base_3buff_bor_fortran_integer1","ompi_op_base_3buff_bor_fortran_integer2","ompi_op_base_3buff_bor_fortran_integer4","ompi_op_base_3buff_bor_fortran_integer8","ompi_op_base_3buff_bor_int16_t","ompi_op_base_3buff_bor_int32_t","ompi_op_base_3buff_bor_int64_t","ompi_op_base_3buff_bor_int8_t","ompi_op_base_3buff_bor_long","ompi_op_base_3buff_bor_uint16_t","ompi_op_base_3buff_bor_uint32_t","ompi_op_base_3buff_bor_uint64_t","ompi_op_base_3buff_bor_uint8_t","ompi_op_base_3buff_bor_unsigned_long","ompi_op_base_3buff_bxor_byte","ompi_op_base_3buff_bxor_fortran_integer","ompi_op_base_3buff_bxor_fortran_integer1","ompi_op_base_3buff_bxor_fortran_integer2","ompi_op_base_3buff_bxor_fortran_integer4","ompi_op_base_3buff_bxor_fortran_integer8","ompi_op_base_3buff_bxor_int16_t","ompi_op_base_3buff_bxor_int32_t","ompi_op_base_3buff_bxor_int64_t","ompi_op_base_3buff_bxor_int8_t","ompi_op_base_3buff_bxor_long","ompi_op_base_3buff_bxor_uint16_t","ompi_op_base_3buff_bxor_uint32_t","ompi_op_base_3buff_bxor_uint64_t","ompi_op_base_3buff_bxor_uint8_t","ompi_op_base_3buff_bxor_unsigned_long","ompi_op_base_3buff_land_bool","ompi_op_base_3buff_land_fortran_logical","ompi_op_base_3buff_land_int16_t","ompi_op_base_3buff_land_int32_t","ompi_op_base_3buff_land_int64_t","ompi_op_base_3buff_land_int8_t","ompi_op_base_3buff_land_long","ompi_op_base_3buff_land_uint16_t","ompi_op_base_3buff_land_uint32_t","ompi_op_base_3buff_land_uint64_t","ompi_op_base_3buff_land_uint8_t","ompi_op_base_3buff_land_unsigned_long","ompi_op_base_3buff_lor_bool","ompi_op_base_3buff_lor_fortran_logical","ompi_op_base_3buff_lor_int16_t","ompi_op_base_3buff_lor_int32_t","ompi_op_base_3buff_lor_int64_t","ompi_op_base_3buff_lor_int8_t","ompi_op_base_3buff_lor_long","ompi_op_base_3buff_lor_uint16_t","ompi_op_base_3buff_lor_uint32_t","ompi_op_base_3buff_lor_uint64_t","ompi_op_base_3buff_lor_uint8_t","ompi_op_base_3buff_lor_unsigned_long","ompi_op_base_3buff_lxor_bool","ompi_op_base_3buff_lxor_fortran_logical","ompi_op_base_3buff_lxor_int16_t","ompi_op_base_3buff_lxor_int32_t","ompi_op_base_3buff_lxor_int64_t","ompi_op_base_3buff_lxor_int8_t","ompi_op_base_3buff_lxor_long","ompi_op_base_3buff_lxor_uint16_t","ompi_op_base_3buff_lxor_uint32_t","ompi_op_base_3buff_lxor_uint64_t","ompi_op_base_3buff_lxor_uint8_t","ompi_op_base_3buff_lxor_unsigned_long","ompi_op_base_3buff_max_double","ompi_op_base_3buff_max_float","ompi_op_base_3buff_max_fortran_double_precision","ompi_op_base_3buff_max_fortran_integer","ompi_op_base_3buff_max_fortran_integer1","ompi_op_base_3buff_max_fortran_integer2","ompi_op_base_3buff_max_fortran_integer4","ompi_op_base_3buff_max_fortran_integer8","ompi_op_base_3buff_max_fortran_real","ompi_op_base_3buff_max_fortran_real16","ompi_op_base_3buff_max_fortran_real4","ompi_op_base_3buff_max_fortran_real8","ompi_op_base_3buff_max_int16_t","ompi_op_base_3buff_max_int32_t","ompi_op_base_3buff_max_int64_t","ompi_op_base_3buff_max_int8_t","ompi_op_base_3buff_max_long","ompi_op_base_3buff_max_long_double","ompi_op_base_3buff_max_uint16_t","ompi_op_base_3buff_max_uint32_t","ompi_op_base_3buff_max_uint64_t","ompi_op_base_3buff_max_uint8_t","ompi_op_base_3buff_max_unsigned_long","ompi_op_base_3buff_maxloc_2double_precision","ompi_op_base_3buff_maxloc_2int","ompi_op_base_3buff_maxloc_2integer","ompi_op_base_3buff_maxloc_2real","ompi_op_base_3buff_maxloc_double_int","ompi_op_base_3buff_maxloc_float_int","ompi_op_base_3buff_maxloc_long_double_int","ompi_op_base_3buff_maxloc_long_int","ompi_op_base_3buff_maxloc_short_int","ompi_op_base_3buff_min_double","ompi_op_base_3buff_min_float","ompi_op_base_3buff_min_fortran_double_precision","ompi_op_base_3buff_min_fortran_integer","ompi_op_base_3buff_min_fortran_integer1","ompi_op_base_3buff_min_fortran_integer2","ompi_op_base_3buff_min_fortran_integer4","ompi_op_base_3buff_min_fortran_integer8","ompi_op_base_3buff_min_fortran_real","ompi_op_base_3buff_min_fortran_real16","ompi_op_base_3buff_min_fortran_real4","ompi_op_base_3buff_min_fortran_real8","ompi_op_base_3buff_min_int16_t","ompi_op_base_3buff_min_int32_t","ompi_op_base_3buff_min_int64_t","ompi_op_base_3buff_min_int8_t","ompi_op_base_3buff_min_long","ompi_op_base_3buff_min_long_double","ompi_op_base_3buff_min_uint16_t","ompi_op_base_3buff_min_uint32_t","ompi_op_base_3buff_min_uint64_t","ompi_op_base_3buff_min_uint8_t","ompi_op_base_3buff_min_unsigned_long","ompi_op_base_3buff_minloc_2double_precision","ompi_op_base_3buff_minloc_2int","ompi_op_base_3buff_minloc_2integer","ompi_op_base_3buff_minloc_2real","ompi_op_base_3buff_minloc_double_int","ompi_op_base_3buff_minloc_float_int","ompi_op_base_3buff_minloc_long_double_int","ompi_op_base_3buff_minloc_long_int","ompi_op_base_3buff_minloc_short_int","ompi_op_base_3buff_prod_c_double_complex","ompi_op_base_3buff_prod_c_float_complex","ompi_op_base_3buff_prod_c_long_double_complex","ompi_op_base_3buff_prod_double","ompi_op_base_3buff_prod_float","ompi_op_base_3buff_prod_fortran_double_precision","ompi_op_base_3buff_prod_fortran_integer","ompi_op_base_3buff_prod_fortran_integer1","ompi_op_base_3buff_prod_fortran_integer2","ompi_op_base_3buff_prod_fortran_integer4","ompi_op_base_3buff_prod_fortran_integer8","ompi_op_base_3buff_prod_fortran_real","ompi_op_base_3buff_prod_fortran_real16","ompi_op_base_3buff_prod_fortran_real4","ompi_op_base_3buff_prod_fortran_real8","ompi_op_base_3buff_prod_int16_t","ompi_op_base_3buff_prod_int32_t","ompi_op_base_3buff_prod_int64_t","ompi_op_base_3buff_prod_int8_t","ompi_op_base_3buff_prod_long","ompi_op_base_3buff_prod_long_double","ompi_op_base_3buff_prod_uint16_t","ompi_op_base_3buff_prod_uint32_t","ompi_op_base_3buff_prod_uint64_t","ompi_op_base_3buff_prod_uint8_t","ompi_op_base_3buff_prod_unsigned_long","ompi_op_base_3buff_sum_c_double_complex","ompi_op_base_3buff_sum_c_float_complex","ompi_op_base_3buff_sum_c_long_double_complex","ompi_op_base_3buff_sum_double","ompi_op_base_3buff_sum_float","ompi_op_base_3buff_sum_fortran_double_precision","ompi_op_base_3buff_sum_fortran_integer","ompi_op_base_3buff_sum_fortran_integer1","ompi_op_base_3buff_sum_fortran_integer2","ompi_op_base_3buff_sum_fortran_integer4","ompi_op_base_3buff_sum_fortran_integer8","ompi_op_base_3buff_sum_fortran_real","ompi_op_base_3buff_sum_fortran_real16","ompi_op_base_3buff_sum_fortran_real4","ompi_op_base_3buff_sum_fortran_real8","ompi_op_base_3buff_sum_int16_t","ompi_op_base_3buff_sum_int32_t","ompi_op_base_3buff_sum_int64_t","ompi_op_base_3buff_sum_int8_t","ompi_op_base_3buff_sum_long","ompi_op_base_3buff_sum_long_double","ompi_op_base_3buff_sum_uint16_t","ompi_op_base_3buff_sum_uint32_t","ompi_op_base_3buff_sum_uint64_t","ompi_op_base_3buff_sum_uint8_t","ompi_op_base_3buff_sum_unsigned_long","ompi_op_base_find_available","ompi_op_base_op_select","ompi_op_construct","ompi_op_create_user","ompi_op_destruct","ompi_op_finalize","ompi_op_init","ompi_op_reduce:0x103bf0","ompi_op_reduce:0x105a40","ompi_op_reduce:0x109a40","ompi_op_reduce:0x11a690","ompi_op_reduce:0x11d440","ompi_op_reduce:0x128cd0","ompi_op_reduce:0x153a70","ompi_op_reduce:0x15a800","ompi_op_reduce:0x15ce80","ompi_op_reduce:0x15ed30","ompi_op_reduce:0x1642a0","ompi_op_reduce:0x1c2ff0","ompi_op_reduce:0x1ce8e0","ompi_op_reduce:0x1e8750","ompi_op_reduce:0x5eb80","ompi_op_reduce:0xef780","ompi_op_reduce:0xf6ab0","ompi_op_reduce:0xfc2b0","ompi_op_reduce:0xff940","ompi_op_set_java_callback","ompi_osc_base_finalize","ompi_osc_base_find_available","ompi_osc_base_get_primitive_type_info","ompi_osc_base_process_op","ompi_osc_base_select","ompi_osc_base_set_memory_alignment","ompi_osc_base_sndrcv_op","ompi_osc_get_data_blocking","ompi_osc_get_data_complete","ompi_osc_module_add_peer","ompi_osc_monitoring_portals4_accumulate","ompi_osc_monitoring_portals4_attach","ompi_osc_monitoring_portals4_compare_and_swap","ompi_osc_monitoring_portals4_complete","ompi_osc_monitoring_portals4_detach","ompi_osc_monitoring_portals4_fence","ompi_osc_monitoring_portals4_fetch_and_op","ompi_osc_monitoring_portals4_flush","ompi_osc_monitoring_portals4_flush_all","ompi_osc_monitoring_portals4_flush_local","ompi_osc_monitoring_portals4_flush_local_all","ompi_osc_monitoring_portals4_free","ompi_osc_monitoring_portals4_get","ompi_osc_monitoring_portals4_get_accumulate","ompi_osc_monitoring_portals4_lock","ompi_osc_monitoring_portals4_lock_all","ompi_osc_monitoring_portals4_post","ompi_osc_monitoring_portals4_put","ompi_osc_monitoring_portals4_raccumulate","ompi_osc_monitoring_portals4_rget","ompi_osc_monitoring_portals4_rget_accumulate","ompi_osc_monitoring_portals4_rput","ompi_osc_monitoring_portals4_set_template","ompi_osc_monitoring_portals4_start","ompi_osc_monitoring_portals4_sync","ompi_osc_monitoring_portals4_test","ompi_osc_monitoring_portals4_unlock","ompi_osc_monitoring_portals4_unlock_all","ompi_osc_monitoring_portals4_wait","ompi_osc_monitoring_rdma_accumulate","ompi_osc_monitoring_rdma_attach","ompi_osc_monitoring_rdma_compare_and_swap","ompi_osc_monitoring_rdma_complete","ompi_osc_monitoring_rdma_detach","ompi_osc_monitoring_rdma_fence","ompi_osc_monitoring_rdma_fetch_and_op","ompi_osc_monitoring_rdma_flush","ompi_osc_monitoring_rdma_flush_all","ompi_osc_monitoring_rdma_flush_local","ompi_osc_monitoring_rdma_flush_local_all","ompi_osc_monitoring_rdma_free","ompi_osc_monitoring_rdma_get","ompi_osc_monitoring_rdma_get_accumulate","ompi_osc_monitoring_rdma_lock","ompi_osc_monitoring_rdma_lock_all","ompi_osc_monitoring_rdma_post","ompi_osc_monitoring_rdma_put","ompi_osc_monitoring_rdma_raccumulate","ompi_osc_monitoring_rdma_rget","ompi_osc_monitoring_rdma_rget_accumulate","ompi_osc_monitoring_rdma_rput","ompi_osc_monitoring_rdma_set_template","ompi_osc_monitoring_rdma_start","ompi_osc_monitoring_rdma_sync","ompi_osc_monitoring_rdma_test","ompi_osc_monitoring_rdma_unlock","ompi_osc_monitoring_rdma_unlock_all","ompi_osc_monitoring_rdma_wait","ompi_osc_monitoring_sm_accumulate","ompi_osc_monitoring_sm_attach","ompi_osc_monitoring_sm_compare_and_swap","ompi_osc_monitoring_sm_complete","ompi_osc_monitoring_sm_detach","ompi_osc_monitoring_sm_fence","ompi_osc_monitoring_sm_fetch_and_op","ompi_osc_monitoring_sm_flush","ompi_osc_monitoring_sm_flush_all","ompi_osc_monitoring_sm_flush_local","ompi_osc_monitoring_sm_flush_local_all","ompi_osc_monitoring_sm_free","ompi_osc_monitoring_sm_get","ompi_osc_monitoring_sm_get_accumulate","ompi_osc_monitoring_sm_lock","ompi_osc_monitoring_sm_lock_all","ompi_osc_monitoring_sm_post","ompi_osc_monitoring_sm_put","ompi_osc_monitoring_sm_raccumulate","ompi_osc_monitoring_sm_rget","ompi_osc_monitoring_sm_rget_accumulate","ompi_osc_monitoring_sm_rput","ompi_osc_monitoring_sm_set_template","ompi_osc_monitoring_sm_start","ompi_osc_monitoring_sm_sync","ompi_osc_monitoring_sm_test","ompi_osc_monitoring_sm_unlock","ompi_osc_monitoring_sm_unlock_all","ompi_osc_monitoring_sm_wait","ompi_osc_monitoring_ucx_accumulate","ompi_osc_monitoring_ucx_attach","ompi_osc_monitoring_ucx_compare_and_swap","ompi_osc_monitoring_ucx_complete","ompi_osc_monitoring_ucx_detach","ompi_osc_monitoring_ucx_fence","ompi_osc_monitoring_ucx_fetch_and_op","ompi_osc_monitoring_ucx_flush","ompi_osc_monitoring_ucx_flush_all","ompi_osc_monitoring_ucx_flush_local","ompi_osc_monitoring_ucx_flush_local_all","ompi_osc_monitoring_ucx_free","ompi_osc_monitoring_ucx_get","ompi_osc_monitoring_ucx_get_accumulate","ompi_osc_monitoring_ucx_lock","ompi_osc_monitoring_ucx_lock_all","ompi_osc_monitoring_ucx_post","ompi_osc_monitoring_ucx_put","ompi_osc_monitoring_ucx_raccumulate","ompi_osc_monitoring_ucx_rget","ompi_osc_monitoring_ucx_rget_accumulate","ompi_osc_monitoring_ucx_rput","ompi_osc_monitoring_ucx_set_template","ompi_osc_monitoring_ucx_start","ompi_osc_monitoring_ucx_sync","ompi_osc_monitoring_ucx_test","ompi_osc_monitoring_ucx_unlock","ompi_osc_monitoring_ucx_unlock_all","ompi_osc_monitoring_ucx_wait","ompi_osc_rdma_accumulate","ompi_osc_rdma_add_attachment","ompi_osc_rdma_atomic_complete","ompi_osc_rdma_attach","ompi_osc_rdma_btl_op.constprop.0","ompi_osc_rdma_cas_put_complete","ompi_osc_rdma_check_posts","ompi_osc_rdma_compare_and_swap","ompi_osc_rdma_compare_and_swap.cold","ompi_osc_rdma_complete_atomic","ompi_osc_rdma_component_finalize","ompi_osc_rdma_component_init","ompi_osc_rdma_component_query","ompi_osc_rdma_component_register","ompi_osc_rdma_component_select","ompi_osc_rdma_demand_lock_peer","ompi_osc_rdma_detach","ompi_osc_rdma_fence_atomic","ompi_osc_rdma_fetch_and_op","ompi_osc_rdma_find_dynamic_region","ompi_osc_rdma_flush","ompi_osc_rdma_flush_all","ompi_osc_rdma_flush_local","ompi_osc_rdma_flush_local_all","ompi_osc_rdma_frag_alloc","ompi_osc_rdma_frag_alloc.constprop.0:0x1dafc0","ompi_osc_rdma_frag_alloc.constprop.0:0x1dd090","ompi_osc_rdma_frag_alloc.constprop.0:0x1e0770","ompi_osc_rdma_free","ompi_osc_rdma_gacc_amo.constprop.0","ompi_osc_rdma_gacc_master","ompi_osc_rdma_gacc_master_cleanup","ompi_osc_rdma_gacc_master_cleanup.cold","ompi_osc_rdma_get","ompi_osc_rdma_get_accumulate","ompi_osc_rdma_get_complete","ompi_osc_rdma_get_contig","ompi_osc_rdma_get_partial","ompi_osc_rdma_get_peers","ompi_osc_rdma_handle_fini","ompi_osc_rdma_handle_init","ompi_osc_rdma_initialize_region.isra.0","ompi_osc_rdma_lock_all_atomic","ompi_osc_rdma_lock_atomic","ompi_osc_rdma_lock_atomic_internal","ompi_osc_rdma_lock_release_exclusive.constprop.0.isra.0","ompi_osc_rdma_lock_release_exclusive.constprop.0.isra.0.cold","ompi_osc_rdma_master_noncontig","ompi_osc_rdma_new_peer","ompi_osc_rdma_new_peer.cold","ompi_osc_rdma_peer_accumulate_cleanup","ompi_osc_rdma_peer_accumulate_cleanup.cold","ompi_osc_rdma_peer_basic_construct","ompi_osc_rdma_peer_basic_destruct","ompi_osc_rdma_peer_btl_endpoint","ompi_osc_rdma_peer_construct","ompi_osc_rdma_peer_destruct","ompi_osc_rdma_peer_dynamic_construct","ompi_osc_rdma_peer_dynamic_destruct","ompi_osc_rdma_peer_lookup","ompi_osc_rdma_peer_setup","ompi_osc_rdma_pending_op_construct","ompi_osc_rdma_pending_op_destruct","ompi_osc_rdma_post_atomic","ompi_osc_rdma_put","ompi_osc_rdma_put_complete","ompi_osc_rdma_put_complete_flush","ompi_osc_rdma_put_contig","ompi_osc_rdma_pvar_read","ompi_osc_rdma_raccumulate","ompi_osc_rdma_release_peers","ompi_osc_rdma_request_complete:0x1c62b0","ompi_osc_rdma_request_complete:0x1cee10","ompi_osc_rdma_rget","ompi_osc_rdma_rget_accumulate","ompi_osc_rdma_rget_accumulate_internal","ompi_osc_rdma_rget_accumulate_internal.cold","ompi_osc_rdma_rput","ompi_osc_rdma_set_no_lock_info","ompi_osc_rdma_start_atomic","ompi_osc_rdma_sync","ompi_osc_rdma_sync_allocate","ompi_osc_rdma_sync_constructor","ompi_osc_rdma_sync_destructor","ompi_osc_rdma_sync_pscw_peer","ompi_osc_rdma_sync_return","ompi_osc_rdma_test_atomic","ompi_osc_rdma_unlock_all_atomic","ompi_osc_rdma_unlock_all_atomic.cold","ompi_osc_rdma_unlock_atomic","ompi_osc_rdma_unlock_atomic.cold","ompi_osc_rdma_wait_atomic","ompi_osc_sm_accumulate","ompi_osc_sm_attach","ompi_osc_sm_compare_and_swap","ompi_osc_sm_complete","ompi_osc_sm_detach","ompi_osc_sm_fence","ompi_osc_sm_fetch_and_op","ompi_osc_sm_flush","ompi_osc_sm_flush_all","ompi_osc_sm_flush_local","ompi_osc_sm_flush_local_all","ompi_osc_sm_free","ompi_osc_sm_get","ompi_osc_sm_get_accumulate","ompi_osc_sm_get_info","ompi_osc_sm_group_ranks","ompi_osc_sm_lock","ompi_osc_sm_lock_all","ompi_osc_sm_post","ompi_osc_sm_put","ompi_osc_sm_raccumulate","ompi_osc_sm_rget","ompi_osc_sm_rget_accumulate","ompi_osc_sm_rput","ompi_osc_sm_set_info","ompi_osc_sm_shared_query","ompi_osc_sm_start","ompi_osc_sm_sync","ompi_osc_sm_test","ompi_osc_sm_unlock","ompi_osc_sm_unlock_all","ompi_osc_sm_wait","ompi_pmix_print_id","ompi_pmix_print_name","ompi_pmix_snprintf_jobid","ompi_pml_ob1_append_frag_to_ordered_list","ompi_pml_ob1_check_cantmatch_for_match","ompi_pml_v_output_close","ompi_pml_v_output_open","ompi_proc_all","ompi_proc_allocate","ompi_proc_compare_vid","ompi_proc_complete_init","ompi_proc_complete_init_single","ompi_proc_construct","ompi_proc_destruct","ompi_proc_finalize","ompi_proc_find","ompi_proc_find_and_add","ompi_proc_for_name","ompi_proc_get_allocated","ompi_proc_init","ompi_proc_lookup","ompi_proc_pack","ompi_proc_refresh","ompi_proc_self","ompi_proc_unpack","ompi_proc_world","ompi_proc_world_size","ompi_rbcast_bml_send_complete_cb","ompi_report_comm_methods","ompi_request_check_same_instance","ompi_request_construct","ompi_request_default_test","ompi_request_default_test_all","ompi_request_default_test_any","ompi_request_default_test_some","ompi_request_default_wait","ompi_request_default_wait_all","ompi_request_default_wait_any","ompi_request_default_wait_some","ompi_request_destruct","ompi_request_empty_free","ompi_request_finalize","ompi_request_init","ompi_request_is_failed_fn","ompi_request_null_cancel","ompi_request_null_free","ompi_request_persistent_noop_create","ompi_request_persistent_noop_free","ompi_request_wait_completion:0x1f3e20","ompi_request_wait_completion:0x1f56c0","ompi_request_wait_completion:0x1f7c70","ompi_request_wait_completion:0x212b80","ompi_request_wait_completion:0x5d7f0","ompi_rounddown","ompi_rte_abort","ompi_rte_abort_peers","ompi_rte_breakpoint","ompi_rte_compare_name_fields","ompi_rte_convert_process_name_to_string","ompi_rte_convert_string_to_process_name","ompi_rte_finalize","ompi_rte_init","ompi_rte_wait_for_debugger","ompi_seq_tracker_check_duplicate","ompi_seq_tracker_construct","ompi_seq_tracker_copy","ompi_seq_tracker_destruct","ompi_seq_tracker_insert","ompi_set_group_rank","ompi_show_all_mca_params","ompi_test_fortran_constants","ompi_test_fortran_constants_","ompi_test_fortran_constants__","ompi_test_fortran_constants_f","ompi_type_dup_fn_f","ompi_type_null_copy_fn_f","ompi_type_null_delete_fn_f","ompi_vprotocol_pessimist_delivery_replay","ompi_vprotocol_pessimist_event_logger_connect","ompi_vprotocol_pessimist_event_logger_connect.cold","ompi_vprotocol_pessimist_event_logger_disconnect","ompi_vprotocol_pessimist_matching_replay","ompi_vprotocol_pessimist_sender_based_alloc","ompi_vprotocol_pessimist_sender_based_finalize","ompi_vprotocol_pessimist_sender_based_init","ompi_win_allocate","ompi_win_allocate_shared","ompi_win_construct","ompi_win_create","ompi_win_create_dynamic","ompi_win_destruct","ompi_win_dup_fn_f","ompi_win_finalize","ompi_win_free","ompi_win_get_name","ompi_win_group","ompi_win_init","ompi_win_null_copy_fn_f","ompi_win_null_delete_fn_f","ompi_win_set_name","ompit_opal_to_mpit_error","ompit_var_type_to_datatype","opal_free_list_wait","opal_free_list_wait.constprop.0:0x1f8730","opal_free_list_wait.constprop.0:0x1fbad0","open_component","optimize_arity","partial_aggregate_aff_mat","partial_exhaustive_search","partial_update_val","rankkeycompare","recurs_select_independent_groups","recv_cb:0x1613b0","recv_cb:0x1647d0","recv_request_pml_complete","reduce_inorder","register_component:0x1686b0","register_component:0x175430","register_component:0x17baa0","register_datarep","register_tm_clones","release_objs_callback","release_vecs_callback","request_cancel:0x127800","request_cancel:0x1da890","request_construct:0x127810","request_construct:0x1da8a0","request_free:0x127b50","request_free:0x1da910","request_start","result_request","retreive_size","retreive_size.cold","save_ptr","select_independent_groups","self_register","send_cb:0x160b60","send_cb:0x163f50","send_msg","send_msg.cold","send_request_pml_complete","set_handler_default","set_value","shuffle_init.constprop.0:0x16bb70","shuffle_init.constprop.0:0x16f180","sm_close","sm_module_enable","sm_register:0x108080","sm_register:0x215be0","sync_register","tab_cmp","tgt_to_tm","thread_loop","tm_bucket_grouping","tm_build_affinity_mat","tm_build_synthetic_topology","tm_build_tree_from_topology","tm_calloc","tm_close_verbose_file","tm_complete_obj_weight","tm_compute_mapping","tm_compute_nb_leaves_from_level","tm_create_work","tm_destroy_work","tm_display_arity","tm_display_other_heuristics","tm_display_solution","tm_display_tab","tm_display_topology","tm_enable_oversubscribing","tm_fiboTreeDel","tm_fiboTreeExit","tm_fiboTreeFree","tm_fiboTreeInit","tm_fiboTreeMin","tm_fill_tab","tm_finalize","tm_free","tm_free_affinity_mat","tm_free_solution","tm_free_topology","tm_free_tree","tm_genrand_int31","tm_genrand_int32","tm_genrand_real1","tm_genrand_real2","tm_genrand_real3","tm_genrand_res53","tm_get_exhaustive_search_flag","tm_get_greedy_flag","tm_get_local_topology_with_hwloc","tm_get_local_topology_with_hwloc.cold","tm_get_nb_threads","tm_get_numbering","tm_get_time","tm_get_verbose_level","tm_get_verbose_output","tm_in_tab","tm_init_genrand","tm_intCIV_get","tm_intCIV_init","tm_intCIV_isInitialized","tm_intCIV_set","tm_int_cmp_inc","tm_kPartitioning","tm_kpartition","tm_kpartition.cold","tm_kpartition_build_tree_from_topology","tm_load_aff_mat","tm_load_topology","tm_load_topology.cold","tm_malloc","tm_map_MPIPP","tm_map_Packed","tm_map_RR","tm_map_topology","tm_mem_check","tm_nb_processing_units","tm_new_affinity_mat","tm_open_verbose_file","tm_optimize_topology","tm_print_1D_tab","tm_realloc","tm_set_exhaustive_search_flag","tm_set_greedy_flag","tm_set_max_nb_threads","tm_set_node","tm_set_numbering","tm_set_verbose_level","tm_submit_work","tm_terminate_thread_pool","tm_test_main","tm_time_diff","tm_topology_add_binding_constraints","tm_topology_set_binding_constraints","tm_try_add_edge","tm_update_val","tm_wait_work_completion","treematch_module_constructor","treematch_module_destructor","tuned_close","tuned_module_enable","tuned_open","tuned_register","vprotocol_pessimist_delivery_log","vprotocol_pessimist_request_construct","vprotocol_pessimist_request_no_free","vulcan_register","weighted_degree_dsc","write_init","write_init.constprop.0"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/openmpi-5.0.7-y6xplmqxukxsuvvwnv2jqvztli5rhevm/lib/libmpi.so.40","include_offsets":false},{"type":2,"name":"ior","functions":["AllocResults","CheckFileSize","CheckForOutliers","CheckRunSettings","CompareBuffers","CountErrors","CreateTest","CurrentTimeString","DUMMY_Close","DUMMY_Create","DUMMY_Delete","DUMMY_Fsync","DUMMY_GetFileSize","DUMMY_Open","DUMMY_Sync","DUMMY_Xfer","DUMMY_access","DUMMY_check_params","DUMMY_getVersion","DUMMY_mkdir","DUMMY_options","DUMMY_rmdir","DUMMY_stat","DUMMY_statfs","DecodeDirective","DelaySecs","DestroyTest","DestroyTests","DisplayFreespace","DisplayOutliers","DistributeHints","DumpBuffer","ExtractHint","FailMessage","FillBuffer","FillIncompressibleBuffer","FreeResults","GetNumNodes","GetNumTasks","GetNumTasksOnNode0","GetOffsetArrayRandom","GetOffsetArraySequential","GetPlatformName","GetTestFileName","GetTimeStamp","HDF5_Access","HDF5_Close","HDF5_Create","HDF5_Delete","HDF5_Fsync","HDF5_GetFileSize","HDF5_GetVersion","HDF5_Open","HDF5_Xfer","HDF5_options","HogMemory","HumanReadable","InitTests","MMAP_Close","MMAP_Create","MMAP_Fsync","MMAP_Open","MMAP_Xfer","MMAP_options","MPIIO_Access","MPIIO_Close","MPIIO_Create","MPIIO_Delete","MPIIO_Fsync","MPIIO_GetFileSize","MPIIO_GetVersion","MPIIO_Open","MPIIO_Xfer","NodeMemoryStringToBytes","POSIX_Close","POSIX_Create","POSIX_Delete","POSIX_Fsync","POSIX_GetFileSize","POSIX_Mknod","POSIX_Open","POSIX_Sync","POSIX_Xfer","POSIX_options","PPDouble","ParseCommandLine","ParseFileName","ParseLine","PrependDir","PrintArrayEnd","PrintArrayNamedStart","PrintArrayStart","PrintEndSection","PrintHeader","PrintIndent","PrintKeyVal","PrintKeyValDouble","PrintKeyValEnd","PrintKeyValInt","PrintKeyValStart","PrintLongSummaryAllTests","PrintLongSummaryHeader","PrintLongSummaryOneOperation","PrintLongSummaryOneTest","PrintNamedArrayStart","PrintNamedSectionStart","PrintNextToken","PrintReducedResult","PrintRemoveTiming","PrintRepeatEnd","PrintRepeatStart","PrintShortSummary","PrintStartSection","PrintTableHeader","PrintTestEnds","PrintTimestamp","QueryNodeMapping","ReadConfigScript","ReadStoneWallingIterations","ReduceIterResults","Regex","RemoveFile","SeedRandGen","SetHints","SetupDataSet","ShowFileSystemSize","ShowHints","ShowSetup","ShowTestEnd","ShowTestStart","StoreStoneWallingIterations","StringToBytes","TestIoSys","TimeDeviation","ValidateTests","WriteOrRead","WriteOrReadSingle","WriteTimes","XferBuffersFree","XferBuffersSetup","__do_global_dtors_aux","aiori_count","aiori_default","aiori_finalize","aiori_get_version","aiori_initialize","aiori_posix_access","aiori_posix_mkdir","aiori_posix_rmdir","aiori_posix_stat","aiori_posix_statfs","aiori_select","aiori_supported_apis","airoi_create_all_module_options","airoi_update_module_options","aligned_buffer_alloc","aligned_buffer_free","bw_ops_values","bw_values","contains_only","createGlobalOptions","decodeDirectiveWrapper","deregister_tm_clones","file_hits_histogram","frame_dummy","init_IOR_Param_t","init_clock","init_or_fini","init_or_fini_internal","ior_main","ior_mmap_file","ior_run","main","malloc_and_touch","mean_of_array_of_doubles","ops_values","option_parse","option_parse_key_value","option_parse_str","option_parse_token","option_print_current","option_print_help","print_current_option_section","print_help_section","print_option_value","print_value","register_tm_clones","safeMalloc","set_o_direct_flag","string_to_bytes","test_time_elapsed","updateParsedOptions"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/ior-3.3.0-ip47j26fw7xxfftdzjvy2h36phgcuypv/bin/ior","include_offsets":false}] +[{"type":4,"name":"custom1","functions":["openat","read","write","close","fallocate","fdatasync","flock","fsync","ftruncate","lseek","pread64","preadv","preadv2","pwrite64","pwritev","pwritev2","readahead","readv","writev","open","openat2"],"bpf_path":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2},{"type":0,"name":"sys","functions":["access","chdir","close","close_range","copy_file_range","creat","dup","dup2","dup3","eventfd2","exit","exit_group","faccessat","faccessat2","fadvise64","fadvise64_64","fallocate","fanotify_init","fanotify_mark","fchdir","fchmod","fchmodat","fchmodat2","fchown","fchownat","fcntl","fdatasync","fgetxattr","flistxattr","flock","fremovexattr","fsetxattr","fstat","fstatfs","fstatfs64","fsync","ftruncate","getcwd","getdents","getxattr","inotify_add_watch","inotify_init","inotify_init1","inotify_rm_watch","io_cancel","io_destroy","io_setup","io_submit","io_uring_enter","io_uring_register","io_uring_setup","lgetxattr","link","linkat","listxattr","llistxattr","llseek","lremovexattr","lseek","lsetxattr","lstat","madvise","mbind","migrate_pages","mincore","mkdir","mkdirat","mknod","mknodat","mlock","mlockall","mmap_pgoff","move_pages","mprotect","mremap","msync","munlock","munlockall","munmap","newfstat","newlstat","newstat","open","openat","openat2","pidfd_open","pipe","pread64","preadv","preadv2","process_madvise","process_mrelease","process_vm_readv","process_vm_writev","pwrite64","pwritev","pwritev2","read","readlink","readlinkat","readv","remap_file_pages","removexattr","rename","renameat","rmdir","sendfile64","setxattr","stat","statfs","statfs64","statx","symlink","symlinkat","sync","sync_file_range","sync_file_range2","syncfs","sysfs","truncate","unlink","unlinkat","ustat","vfork","write","writev"]},{"type":2,"name":"libc","functions":["__GI___fork","__GI___register_atfork","__GI___vfork","__GI_forkpty","__dyn_pthread_atfork","__fork","__forkpty","__libc_fork","__libc_unwind_link_after_fork","__libc_vfork","__malloc_fork_lock_parent","__malloc_fork_unlock_child","__malloc_fork_unlock_parent","__mq_notify_fork_subprocess","__nss_database_fork_prepare_parent","__nss_database_fork_subprocess","__register_atfork","__run_postfork_handlers","__run_prefork_handlers","__timer_fork_subprocess","__unregister_atfork","__vfork","fork","pthread_atfork@GLIBC_2.2.5","vfork"],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false},{"type":2,"name":"hdf5","functions":["H5AC__broadcast_clean_list_cb","H5AC__check_if_write_permitted","H5AC__copy_candidate_list_to_buffer.constprop.0","H5AC__copy_candidate_list_to_buffer_cb","H5AC__flush_entries","H5AC__log_cleaned_entry","H5AC__log_deleted_entry","H5AC__log_dirtied_entry","H5AC__log_flushed_entry","H5AC__log_inserted_entry","H5AC__log_moved_entry","H5AC__propagate_flushed_and_still_clean_entries_list","H5AC__proxy_entry_add_child_cb","H5AC__proxy_entry_free_icr","H5AC__proxy_entry_image_len","H5AC__proxy_entry_notify","H5AC__proxy_entry_remove_child_cb","H5AC__proxy_entry_serialize","H5AC__receive_haddr_list","H5AC__run_sync_point","H5AC__set_sync_point_done_callback","H5AC__set_write_done_callback","H5AC_add_candidate","H5AC_cache_image_pending","H5AC_cork","H5AC_create","H5AC_create_flush_dependency","H5AC_dest","H5AC_destroy_flush_dependency","H5AC_evict","H5AC_evict_tagged_metadata","H5AC_expunge_entry","H5AC_expunge_tag_type_metadata","H5AC_flush","H5AC_flush_tagged_metadata","H5AC_get_cache_auto_resize_config","H5AC_get_cache_flush_in_progress","H5AC_get_cache_hit_rate","H5AC_get_cache_size","H5AC_get_entry_ring","H5AC_get_entry_status","H5AC_get_mdc_image_info","H5AC_get_tag","H5AC_ignore_tags","H5AC_init","H5AC_insert_entry","H5AC_load_cache_image_on_next_protect","H5AC_mark_entry_clean","H5AC_mark_entry_dirty","H5AC_mark_entry_serialized","H5AC_mark_entry_unserialized","H5AC_move_entry","H5AC_pin_protected_entry","H5AC_prep_for_file_close","H5AC_prep_for_file_flush","H5AC_protect","H5AC_proxy_entry_add_child","H5AC_proxy_entry_add_parent","H5AC_proxy_entry_create","H5AC_proxy_entry_dest","H5AC_proxy_entry_remove_child","H5AC_proxy_entry_remove_parent","H5AC_remove_entry","H5AC_reset_cache_hit_rate_stats","H5AC_resize_entry","H5AC_retag_copied_metadata","H5AC_secure_from_file_flush","H5AC_set_cache_auto_resize_config","H5AC_set_ring","H5AC_stats","H5AC_tag","H5AC_term_package","H5AC_unpin_entry","H5AC_unprotect","H5AC_unsettle_entry_ring","H5AC_unsettle_ring","H5AC_validate_cache_image_config","H5AC_validate_config","H5A__attr_cmp_corder_dec","H5A__attr_cmp_corder_inc","H5A__attr_cmp_name_dec","H5A__attr_cmp_name_inc","H5A__attr_copy_file","H5A__attr_iterate_table","H5A__attr_post_copy_file","H5A__attr_release_table","H5A__close","H5A__close_cb","H5A__compact_build_table","H5A__compact_build_table_cb","H5A__copy","H5A__create","H5A__create_api_common","H5A__create_by_name","H5A__create_by_name_api_common","H5A__delete_by_idx","H5A__delete_by_name","H5A__dense_btree2_corder_compare","H5A__dense_btree2_corder_debug","H5A__dense_btree2_corder_decode","H5A__dense_btree2_corder_encode","H5A__dense_btree2_corder_store","H5A__dense_btree2_name_compare","H5A__dense_btree2_name_debug","H5A__dense_btree2_name_decode","H5A__dense_btree2_name_encode","H5A__dense_btree2_name_store","H5A__dense_build_table","H5A__dense_build_table_cb","H5A__dense_copy_fh_cb","H5A__dense_create","H5A__dense_delete","H5A__dense_delete_bt2_cb","H5A__dense_exists","H5A__dense_fh_name_cmp","H5A__dense_fnd_cb","H5A__dense_insert","H5A__dense_iterate","H5A__dense_iterate_bt2_cb","H5A__dense_open","H5A__dense_post_copy_file_all","H5A__dense_post_copy_file_cb","H5A__dense_remove","H5A__dense_remove_bt2_cb","H5A__dense_remove_by_idx","H5A__dense_remove_by_idx_bt2_cb","H5A__dense_rename","H5A__dense_write","H5A__dense_write_bt2_cb","H5A__dense_write_bt2_cb2","H5A__exists_by_name","H5A__get_ainfo","H5A__get_create_plist","H5A__get_info","H5A__get_name","H5A__get_shared_rc_test","H5A__get_type","H5A__is_shared_test","H5A__iterate","H5A__iterate_old","H5A__open","H5A__open_by_idx","H5A__open_by_name","H5A__open_common:0x6a920","H5A__open_common:0x76bf0","H5A__read","H5A__rename_by_name","H5A__set_version","H5A__shared_free","H5A__write","H5A_get_space","H5A_init","H5A_nameof","H5A_oloc","H5A_term_package","H5A_top_term_package","H5A_type","H5Aclose","H5Aclose_async","H5Acreate1","H5Acreate2","H5Acreate_async","H5Acreate_by_name","H5Acreate_by_name_async","H5Adelete","H5Adelete_by_idx","H5Adelete_by_name","H5Aexists","H5Aexists_async","H5Aexists_by_name","H5Aexists_by_name_async","H5Aget_create_plist","H5Aget_info","H5Aget_info_by_idx","H5Aget_info_by_name","H5Aget_name","H5Aget_name_by_idx","H5Aget_num_attrs","H5Aget_space","H5Aget_storage_size","H5Aget_type","H5Aiterate1","H5Aiterate2","H5Aiterate_by_name","H5Aopen","H5Aopen_async","H5Aopen_by_idx","H5Aopen_by_idx_async","H5Aopen_by_name","H5Aopen_by_name_async","H5Aopen_idx","H5Aopen_name","H5Aread","H5Aread_async","H5Arename","H5Arename_async","H5Arename_by_name","H5Arename_by_name_async","H5Awrite","H5Awrite_async","H5B2__cache_hdr_deserialize","H5B2__cache_hdr_free_icr","H5B2__cache_hdr_get_initial_load_size","H5B2__cache_hdr_image_len","H5B2__cache_hdr_notify","H5B2__cache_hdr_serialize","H5B2__cache_hdr_verify_chksum","H5B2__cache_int_deserialize","H5B2__cache_int_free_icr","H5B2__cache_int_get_initial_load_size","H5B2__cache_int_image_len","H5B2__cache_int_notify","H5B2__cache_int_serialize","H5B2__cache_int_verify_chksum","H5B2__cache_leaf_deserialize","H5B2__cache_leaf_free_icr","H5B2__cache_leaf_get_initial_load_size","H5B2__cache_leaf_image_len","H5B2__cache_leaf_notify","H5B2__cache_leaf_serialize","H5B2__cache_leaf_verify_chksum","H5B2__create_flush_depend","H5B2__create_internal","H5B2__create_leaf","H5B2__delete_node","H5B2__delete_node.localalias","H5B2__destroy_flush_depend","H5B2__get_node_depth_test","H5B2__get_node_info_test","H5B2__get_root_addr_test","H5B2__hdr_alloc","H5B2__hdr_create","H5B2__hdr_debug","H5B2__hdr_decr","H5B2__hdr_delete","H5B2__hdr_dirty","H5B2__hdr_free","H5B2__hdr_fuse_decr","H5B2__hdr_fuse_incr","H5B2__hdr_incr","H5B2__hdr_init","H5B2__hdr_protect","H5B2__hdr_unprotect","H5B2__insert","H5B2__insert_internal","H5B2__insert_internal.localalias","H5B2__insert_leaf","H5B2__int_debug","H5B2__internal_free","H5B2__iterate_node","H5B2__iterate_node.localalias","H5B2__leaf_debug","H5B2__leaf_free","H5B2__locate_record","H5B2__merge2","H5B2__merge3","H5B2__neighbor_internal","H5B2__neighbor_internal.localalias","H5B2__neighbor_leaf","H5B2__node_size","H5B2__node_size.localalias","H5B2__protect_internal","H5B2__protect_leaf","H5B2__redistribute2","H5B2__redistribute3","H5B2__remove_internal","H5B2__remove_internal.localalias","H5B2__remove_internal_by_idx","H5B2__remove_internal_by_idx.localalias","H5B2__remove_leaf","H5B2__remove_leaf_by_idx","H5B2__shadow_internal","H5B2__shadow_leaf","H5B2__split1","H5B2__split_root","H5B2__swap_leaf","H5B2__test2_compare","H5B2__test2_debug","H5B2__test2_decode","H5B2__test2_encode","H5B2__test2_store","H5B2__test_compare","H5B2__test_crt_context","H5B2__test_debug","H5B2__test_decode","H5B2__test_dst_context","H5B2__test_encode","H5B2__test_store","H5B2__update_flush_depend","H5B2__update_internal","H5B2__update_internal.localalias","H5B2__update_leaf","H5B2_close","H5B2_create","H5B2_delete","H5B2_depend","H5B2_find","H5B2_get_addr","H5B2_get_nrec","H5B2_index","H5B2_insert","H5B2_iterate","H5B2_modify","H5B2_neighbor","H5B2_open","H5B2_patch_file","H5B2_remove","H5B2_remove_by_idx","H5B2_size","H5B2_stat_info","H5B2_update","H5B__cache_deserialize","H5B__cache_free_icr","H5B__cache_get_initial_load_size","H5B__cache_image_len","H5B__cache_serialize","H5B__get_info_helper","H5B__insert_helper","H5B__iterate_helper","H5B__node_dest","H5B__remove_helper","H5B__verify_structure","H5B_create","H5B_debug","H5B_delete","H5B_delete.localalias","H5B_find","H5B_find.localalias","H5B_get_info","H5B_insert","H5B_iterate","H5B_remove","H5B_shared_free","H5B_shared_new","H5B_valid","H5CX__pop_common","H5CX_free_state","H5CX_get_actual_selection_io_mode","H5CX_get_bkgr_buf","H5CX_get_bkgr_buf_type","H5CX_get_btree_split_ratios","H5CX_get_coll_metadata_read","H5CX_get_data_transform","H5CX_get_dset_min_ohdr_flag","H5CX_get_dt_conv_cb","H5CX_get_dxpl","H5CX_get_encoding","H5CX_get_err_detect","H5CX_get_ext_file_prefix","H5CX_get_filter_cb","H5CX_get_intermediate_group","H5CX_get_io_xfer_mode","H5CX_get_lapl","H5CX_get_libver_bounds","H5CX_get_max_temp_buf","H5CX_get_modify_write_buf","H5CX_get_mpi_coll_datatypes","H5CX_get_mpi_file_flushing","H5CX_get_mpio_chunk_opt_mode","H5CX_get_mpio_chunk_opt_num","H5CX_get_mpio_chunk_opt_ratio","H5CX_get_mpio_coll_opt","H5CX_get_mpio_global_no_coll_cause","H5CX_get_mpio_local_no_coll_cause","H5CX_get_mpio_rank0_bcast","H5CX_get_nlinks","H5CX_get_no_selection_io_cause","H5CX_get_ohdr_flags","H5CX_get_ring","H5CX_get_selection_io_mode","H5CX_get_tag","H5CX_get_tconv_buf","H5CX_get_vds_prefix","H5CX_get_vec_size","H5CX_get_vlen_alloc_info","H5CX_get_vol_connector_prop","H5CX_get_vol_wrap_ctx","H5CX_init","H5CX_is_def_dxpl","H5CX_pop","H5CX_push","H5CX_push_special","H5CX_pushed","H5CX_restore_state","H5CX_retrieve_state","H5CX_set_actual_selection_io_mode","H5CX_set_apl","H5CX_set_coll_metadata_read","H5CX_set_dcpl","H5CX_set_dxpl","H5CX_set_io_xfer_mode","H5CX_set_lapl","H5CX_set_lcpl","H5CX_set_libver_bounds","H5CX_set_loc","H5CX_set_mpi_coll_datatypes","H5CX_set_mpi_file_flushing","H5CX_set_mpio_actual_chunk_opt","H5CX_set_mpio_actual_io_mode","H5CX_set_mpio_coll_opt","H5CX_set_mpio_global_no_coll_cause","H5CX_set_mpio_local_no_coll_cause","H5CX_set_mpio_rank0_bcast","H5CX_set_nlinks","H5CX_set_no_selection_io_cause","H5CX_set_ring","H5CX_set_tag","H5CX_set_vlen_alloc_info","H5CX_set_vol_connector_prop","H5CX_set_vol_wrap_ctx","H5CX_term_package","H5C__auto_adjust_cache_size","H5C__autoadjust__ageout__remove_all_markers","H5C__autoadjust__ageout__remove_excess_markers","H5C__epoch_marker_deserialize","H5C__epoch_marker_free_icr","H5C__epoch_marker_fsf_size","H5C__epoch_marker_get_final_load_size","H5C__epoch_marker_get_initial_load_size","H5C__epoch_marker_image_len","H5C__epoch_marker_notify","H5C__epoch_marker_pre_serialize","H5C__epoch_marker_serialize","H5C__epoch_marker_verify_chksum","H5C__evict_tagged_entries_cb","H5C__expunge_tag_type_metadata_cb","H5C__flash_increase_cache_size","H5C__flush_invalidate_cache","H5C__flush_ring","H5C__flush_single_entry","H5C__flush_tagged_entries_cb","H5C__generate_cache_image","H5C__generate_image","H5C__get_cache_image_config","H5C__image_entry_cmp","H5C__image_stats","H5C__iter_tagged_entries","H5C__iter_tagged_entries_real","H5C__json_tear_down_logging","H5C__json_write_create_cache_log_msg","H5C__json_write_create_fd_log_msg","H5C__json_write_destroy_cache_log_msg","H5C__json_write_destroy_fd_log_msg","H5C__json_write_evict_cache_log_msg","H5C__json_write_expunge_entry_log_msg","H5C__json_write_flush_cache_log_msg","H5C__json_write_insert_entry_log_msg","H5C__json_write_mark_entry_clean_log_msg","H5C__json_write_mark_entry_dirty_log_msg","H5C__json_write_mark_serialized_entry_log_msg","H5C__json_write_mark_unserialized_entry_log_msg","H5C__json_write_move_entry_log_msg","H5C__json_write_pin_entry_log_msg","H5C__json_write_protect_entry_log_msg","H5C__json_write_remove_entry_log_msg","H5C__json_write_resize_entry_log_msg","H5C__json_write_set_cache_config_log_msg","H5C__json_write_start_log_msg","H5C__json_write_stop_log_msg","H5C__json_write_unpin_entry_log_msg","H5C__json_write_unprotect_entry_log_msg","H5C__load_cache_image","H5C__log_json_set_up","H5C__log_trace_set_up","H5C__make_space_in_cache","H5C__pin_entry_from_client.part.0","H5C__prefetched_entry_deserialize","H5C__prefetched_entry_free_icr","H5C__prefetched_entry_fsf_size","H5C__prefetched_entry_get_final_load_size","H5C__prefetched_entry_get_initial_load_size","H5C__prefetched_entry_image_len","H5C__prefetched_entry_notify","H5C__prefetched_entry_pre_serialize","H5C__prefetched_entry_serialize","H5C__prefetched_entry_verify_chksum","H5C__prep_for_file_close__compute_fd_heights_real","H5C__prep_image_for_file_close","H5C__serialize_cache","H5C__serialize_single_entry","H5C__tag_entry","H5C__trace_tear_down_logging","H5C__trace_write_create_fd_log_msg","H5C__trace_write_destroy_fd_log_msg","H5C__trace_write_expunge_entry_log_msg","H5C__trace_write_flush_cache_log_msg","H5C__trace_write_insert_entry_log_msg","H5C__trace_write_mark_entry_clean_log_msg","H5C__trace_write_mark_entry_dirty_log_msg","H5C__trace_write_mark_serialized_entry_log_msg","H5C__trace_write_mark_unserialized_entry_log_msg","H5C__trace_write_move_entry_log_msg","H5C__trace_write_pin_entry_log_msg","H5C__trace_write_protect_entry_log_msg","H5C__trace_write_remove_entry_log_msg","H5C__trace_write_resize_entry_log_msg","H5C__trace_write_set_cache_config_log_msg","H5C__trace_write_unpin_entry_log_msg","H5C__trace_write_unprotect_entry_log_msg","H5C__unpin_entry_from_client","H5C__untag_entry","H5C__verify_cork_tag_test","H5C__verify_cork_tag_test_cb","H5C__verify_len_eoa.isra.0","H5C_apply_candidate_list","H5C_cache_image_pending","H5C_cache_image_status","H5C_clear_coll_entries","H5C_construct_candidate_list__clean_cache","H5C_construct_candidate_list__min_clean","H5C_cork","H5C_create","H5C_create_flush_dependency","H5C_def_auto_resize_rpt_fcn","H5C_dest","H5C_destroy_flush_dependency","H5C_evict","H5C_evict_tagged_entries","H5C_expunge_entry","H5C_expunge_tag_type_metadata","H5C_flush_cache","H5C_flush_tagged_entries","H5C_flush_to_min_clean","H5C_get_aux_ptr","H5C_get_cache_auto_resize_config","H5C_get_cache_flush_in_progress","H5C_get_cache_hit_rate","H5C_get_cache_size","H5C_get_entry_ring","H5C_get_entry_status","H5C_get_evictions_enabled","H5C_get_ignore_tags","H5C_get_logging_status","H5C_get_mdc_image_info","H5C_get_num_objs_corked","H5C_get_tag","H5C_ignore_tags","H5C_insert_entry","H5C_load_cache_image_on_next_protect","H5C_log_set_up","H5C_log_tear_down","H5C_log_write_create_cache_msg","H5C_log_write_create_fd_msg","H5C_log_write_destroy_cache_msg","H5C_log_write_destroy_fd_msg","H5C_log_write_evict_cache_msg","H5C_log_write_expunge_entry_msg","H5C_log_write_flush_cache_msg","H5C_log_write_insert_entry_msg","H5C_log_write_mark_entry_clean_msg","H5C_log_write_mark_entry_dirty_msg","H5C_log_write_mark_serialized_entry_msg","H5C_log_write_mark_unserialized_entry_msg","H5C_log_write_move_entry_msg","H5C_log_write_pin_entry_msg","H5C_log_write_protect_entry_msg","H5C_log_write_remove_entry_msg","H5C_log_write_resize_entry_msg","H5C_log_write_set_cache_config_msg","H5C_log_write_unpin_entry_msg","H5C_log_write_unprotect_entry_msg","H5C_mark_entries_as_clean","H5C_mark_entry_clean","H5C_mark_entry_dirty","H5C_mark_entry_serialized","H5C_mark_entry_unserialized","H5C_move_entry","H5C_pin_protected_entry","H5C_prep_for_file_close","H5C_protect","H5C_remove_entry","H5C_reset_cache_hit_rate_stats","H5C_resize_entry","H5C_retag_entries","H5C_set_cache_auto_resize_config","H5C_set_cache_image_config","H5C_set_evictions_enabled","H5C_set_prefix","H5C_set_slist_enabled","H5C_start_logging","H5C_stats","H5C_stats__reset","H5C_stop_logging","H5C_unpin_entry","H5C_unprotect","H5C_unsettle_entry_ring","H5C_unsettle_ring","H5C_validate_cache_image_config","H5C_validate_resize_config","H5D__alloc_storage","H5D__append_flush_setup.part.0","H5D__bt2_compare","H5D__bt2_crt_context","H5D__bt2_dst_context","H5D__bt2_filt_debug","H5D__bt2_filt_decode","H5D__bt2_filt_encode","H5D__bt2_found_cb","H5D__bt2_idx_close","H5D__bt2_idx_copy_setup","H5D__bt2_idx_copy_shutdown","H5D__bt2_idx_create","H5D__bt2_idx_delete","H5D__bt2_idx_dest","H5D__bt2_idx_dump","H5D__bt2_idx_get_addr","H5D__bt2_idx_init","H5D__bt2_idx_insert","H5D__bt2_idx_is_open","H5D__bt2_idx_is_space_alloc","H5D__bt2_idx_iterate","H5D__bt2_idx_iterate_cb","H5D__bt2_idx_load_metadata","H5D__bt2_idx_open","H5D__bt2_idx_remove","H5D__bt2_idx_reset","H5D__bt2_idx_size","H5D__bt2_mod_cb","H5D__bt2_remove_cb","H5D__bt2_store","H5D__bt2_unfilt_debug","H5D__bt2_unfilt_decode","H5D__bt2_unfilt_encode","H5D__btree2_idx_depend","H5D__btree_cmp2","H5D__btree_cmp3","H5D__btree_debug_key","H5D__btree_decode_key","H5D__btree_encode_key","H5D__btree_found","H5D__btree_get_shared","H5D__btree_idx_close","H5D__btree_idx_copy_setup","H5D__btree_idx_copy_shutdown","H5D__btree_idx_create","H5D__btree_idx_delete","H5D__btree_idx_dest","H5D__btree_idx_dump","H5D__btree_idx_get_addr","H5D__btree_idx_init","H5D__btree_idx_insert","H5D__btree_idx_is_open","H5D__btree_idx_is_space_alloc","H5D__btree_idx_iterate","H5D__btree_idx_iterate_cb","H5D__btree_idx_load_metadata","H5D__btree_idx_open","H5D__btree_idx_remove","H5D__btree_idx_reset","H5D__btree_idx_size","H5D__btree_insert","H5D__btree_new_node","H5D__btree_remove","H5D__btree_shared_create","H5D__btree_shared_free","H5D__build_file_prefix.isra.0","H5D__cache_dataspace_info","H5D__chunk_addrmap","H5D__chunk_addrmap_cb","H5D__chunk_allocate","H5D__chunk_allocated","H5D__chunk_allocated_cb","H5D__chunk_bh_info","H5D__chunk_cache_evict","H5D__chunk_cache_evict.constprop.0","H5D__chunk_cacheable","H5D__chunk_cmp_coll_fill_info","H5D__chunk_construct","H5D__chunk_copy","H5D__chunk_copy_cb","H5D__chunk_create","H5D__chunk_delete","H5D__chunk_dest","H5D__chunk_direct_read","H5D__chunk_direct_write","H5D__chunk_dump_index","H5D__chunk_dump_index_cb","H5D__chunk_file_alloc","H5D__chunk_flush","H5D__chunk_flush_entry","H5D__chunk_flush_entry.constprop.0","H5D__chunk_format_convert","H5D__chunk_format_convert_cb","H5D__chunk_get_offset_copy","H5D__chunk_index_empty","H5D__chunk_index_empty_cb","H5D__chunk_init","H5D__chunk_io_init","H5D__chunk_io_term","H5D__chunk_is_data_cached","H5D__chunk_is_partial_edge_chunk","H5D__chunk_is_space_alloc","H5D__chunk_iter","H5D__chunk_iter_cb","H5D__chunk_lock.constprop.0","H5D__chunk_lookup","H5D__chunk_mdio_init","H5D__chunk_mem_alloc","H5D__chunk_mem_free","H5D__chunk_mem_realloc","H5D__chunk_mem_xfree","H5D__chunk_prune_by_extent","H5D__chunk_read","H5D__chunk_set_info","H5D__chunk_set_info_real","H5D__chunk_set_sizes","H5D__chunk_unlock.constprop.0","H5D__chunk_update_cache","H5D__chunk_update_old_edge_chunks","H5D__chunk_write","H5D__close_cb","H5D__cmp_chunk_redistribute_info","H5D__cmp_chunk_redistribute_info_orig_owner","H5D__cmp_filtered_collective_io_info_entry","H5D__cmp_piece_addr","H5D__collective_read","H5D__collective_write","H5D__compact_construct","H5D__compact_copy","H5D__compact_dest","H5D__compact_fill","H5D__compact_flush","H5D__compact_init","H5D__compact_io_init","H5D__compact_iovv_memmanage_cb","H5D__compact_is_space_alloc","H5D__compact_readvv","H5D__compact_writevv","H5D__compound_opt_read","H5D__contig_alloc","H5D__contig_check","H5D__contig_construct","H5D__contig_copy","H5D__contig_delete","H5D__contig_fill","H5D__contig_flush","H5D__contig_init","H5D__contig_io_init","H5D__contig_io_term","H5D__contig_is_data_cached","H5D__contig_is_space_alloc","H5D__contig_mdio_init","H5D__contig_read","H5D__contig_readvv","H5D__contig_readvv_cb","H5D__contig_readvv_sieve_cb","H5D__contig_write","H5D__contig_writevv","H5D__contig_writevv_cb","H5D__contig_writevv_sieve_cb","H5D__create","H5D__create_named","H5D__current_cache_size_test","H5D__earray_crt_context","H5D__earray_crt_dbg_context","H5D__earray_debug","H5D__earray_decode","H5D__earray_dst_context","H5D__earray_dst_dbg_context","H5D__earray_encode","H5D__earray_fill","H5D__earray_filt_debug","H5D__earray_filt_decode","H5D__earray_filt_encode","H5D__earray_filt_fill","H5D__earray_idx_close","H5D__earray_idx_copy_setup","H5D__earray_idx_copy_shutdown","H5D__earray_idx_create","H5D__earray_idx_delete","H5D__earray_idx_delete_cb","H5D__earray_idx_depend","H5D__earray_idx_dest","H5D__earray_idx_dump","H5D__earray_idx_get_addr","H5D__earray_idx_init","H5D__earray_idx_insert","H5D__earray_idx_is_open","H5D__earray_idx_is_space_alloc","H5D__earray_idx_iterate","H5D__earray_idx_iterate_cb","H5D__earray_idx_load_metadata","H5D__earray_idx_open","H5D__earray_idx_remove","H5D__earray_idx_reset","H5D__earray_idx_resize","H5D__earray_idx_size","H5D__efl_bh_info","H5D__efl_construct","H5D__efl_init","H5D__efl_io_init","H5D__efl_is_space_alloc","H5D__efl_readvv","H5D__efl_readvv_cb","H5D__efl_writevv","H5D__efl_writevv_cb","H5D__farray_crt_context","H5D__farray_crt_dbg_context","H5D__farray_debug","H5D__farray_decode","H5D__farray_dst_context","H5D__farray_dst_dbg_context","H5D__farray_encode","H5D__farray_fill","H5D__farray_filt_debug","H5D__farray_filt_decode","H5D__farray_filt_encode","H5D__farray_filt_fill","H5D__farray_idx_close","H5D__farray_idx_copy_setup","H5D__farray_idx_copy_shutdown","H5D__farray_idx_create","H5D__farray_idx_delete","H5D__farray_idx_delete_cb","H5D__farray_idx_depend","H5D__farray_idx_dest","H5D__farray_idx_dump","H5D__farray_idx_get_addr","H5D__farray_idx_init","H5D__farray_idx_insert","H5D__farray_idx_is_open","H5D__farray_idx_is_space_alloc","H5D__farray_idx_iterate","H5D__farray_idx_iterate_cb","H5D__farray_idx_load_metadata","H5D__farray_idx_open","H5D__farray_idx_remove","H5D__farray_idx_reset","H5D__farray_idx_size","H5D__fill","H5D__fill_init","H5D__fill_refill_vl","H5D__fill_term","H5D__flush","H5D__flush_all_cb","H5D__flush_real","H5D__flush_sieve_buf","H5D__format_convert","H5D__free_piece_info","H5D__gather_file","H5D__gather_mem","H5D__get_chunk_info","H5D__get_chunk_info_by_coord","H5D__get_chunk_info_by_coord_cb","H5D__get_chunk_info_cb","H5D__get_chunk_storage_size","H5D__get_num_chunks","H5D__get_num_chunks_cb","H5D__get_offset","H5D__get_space","H5D__get_space_status","H5D__get_storage_size","H5D__get_type","H5D__init_storage","H5D__inter_collective_io","H5D__ioinfo_adjust","H5D__layout_compact_dirty_test","H5D__layout_contig_size_test","H5D__layout_idx_type_test","H5D__layout_meta_size","H5D__layout_oh_create","H5D__layout_oh_read","H5D__layout_oh_write","H5D__layout_set_io_ops","H5D__layout_set_latest_indexing","H5D__layout_set_version","H5D__layout_type_test","H5D__layout_version_test","H5D__link_chunk_filtered_collective_io","H5D__link_piece_collective_io.constprop.0","H5D__mark","H5D__mpio_collective_filtered_chunk_read.constprop.0","H5D__mpio_collective_filtered_chunk_reinsert","H5D__mpio_collective_filtered_chunk_update","H5D__mpio_collective_filtered_vec_io","H5D__mpio_get_chunk_alloc_info_types.constprop.0","H5D__mpio_get_no_coll_cause_strings","H5D__mpio_opt_possible","H5D__mpio_redistribute_shared_chunks","H5D__mpio_select_read","H5D__mpio_select_write","H5D__mpio_share_chunk_modification_data.constprop.0","H5D__multi_chunk_collective_io","H5D__multi_chunk_filtered_collective_io.constprop.0","H5D__new","H5D__none_idx_close","H5D__none_idx_copy_setup","H5D__none_idx_create","H5D__none_idx_delete","H5D__none_idx_dump","H5D__none_idx_get_addr","H5D__none_idx_is_open","H5D__none_idx_is_space_alloc","H5D__none_idx_iterate","H5D__none_idx_load_metadata","H5D__none_idx_open","H5D__none_idx_remove","H5D__none_idx_reset","H5D__none_idx_size","H5D__nonexistent_readvv","H5D__nonexistent_readvv_cb","H5D__open_name","H5D__piece_file_cb","H5D__piece_io","H5D__piece_mem_cb","H5D__read","H5D__read_api_common","H5D__read_api_common.constprop.0","H5D__refresh","H5D__scatgath_read","H5D__scatgath_read_select","H5D__scatgath_write","H5D__scatgath_write_select","H5D__scatter_file","H5D__scatter_mem","H5D__select_io","H5D__select_read","H5D__select_write","H5D__set_extent","H5D__single_idx_close","H5D__single_idx_copy_setup","H5D__single_idx_create","H5D__single_idx_delete","H5D__single_idx_dump","H5D__single_idx_get_addr","H5D__single_idx_init","H5D__single_idx_insert","H5D__single_idx_is_open","H5D__single_idx_is_space_alloc","H5D__single_idx_iterate","H5D__single_idx_load_metadata","H5D__single_idx_open","H5D__single_idx_remove","H5D__single_idx_reset","H5D__single_idx_size","H5D__typeinfo_init","H5D__typeinfo_init_phase2","H5D__typeinfo_init_phase3.part.0","H5D__virtual_build_source_name.part.0","H5D__virtual_copy","H5D__virtual_copy_layout","H5D__virtual_copy_parsed_name","H5D__virtual_delete","H5D__virtual_flush","H5D__virtual_hold_source_dset_files","H5D__virtual_init","H5D__virtual_io_init","H5D__virtual_is_data_cached","H5D__virtual_is_space_alloc","H5D__virtual_open_source_dset","H5D__virtual_post_io","H5D__virtual_pre_io.isra.0","H5D__virtual_read","H5D__virtual_read_one","H5D__virtual_refresh_source_dset","H5D__virtual_refresh_source_dsets","H5D__virtual_release_source_dset_files","H5D__virtual_reset_layout","H5D__virtual_set_extent_unlim","H5D__virtual_store_layout","H5D__virtual_str_append","H5D__virtual_write","H5D__virtual_write_one","H5D__vlen_get_buf_size","H5D__vlen_get_buf_size_alloc","H5D__vlen_get_buf_size_cb","H5D__vlen_get_buf_size_gen","H5D__vlen_get_buf_size_gen_cb","H5D__write","H5D__write_api_common","H5D__write_api_common.constprop.0","H5D_btree_debug","H5D_chunk_idx_reset","H5D_close","H5D_close.localalias","H5D_flush_all","H5D_get_access_plist","H5D_get_create_plist","H5D_get_dcpl_id","H5D_init","H5D_mult_refresh_close","H5D_mult_refresh_reopen","H5D_nameof","H5D_oloc","H5D_open","H5D_select_io_mem","H5D_term_package","H5D_top_term_package","H5D_virtual_check_mapping_post","H5D_virtual_check_mapping_pre","H5D_virtual_check_min_dims","H5D_virtual_free_parsed_name","H5D_virtual_parse_source_name","H5D_virtual_update_min_dims","H5Dchunk_iter","H5Dclose","H5Dclose_async","H5Dcreate1","H5Dcreate2","H5Dcreate_anon","H5Dcreate_async","H5Ddebug","H5Dextend","H5Dfill","H5Dflush","H5Dformat_convert","H5Dgather","H5Dget_access_plist","H5Dget_chunk_index_type","H5Dget_chunk_info","H5Dget_chunk_info_by_coord","H5Dget_chunk_storage_size","H5Dget_create_plist","H5Dget_num_chunks","H5Dget_offset","H5Dget_space","H5Dget_space_async","H5Dget_space_status","H5Dget_storage_size","H5Dget_type","H5Diterate","H5Dopen1","H5Dopen2","H5Dopen_async","H5Dread","H5Dread_async","H5Dread_chunk","H5Dread_multi","H5Dread_multi_async","H5Drefresh","H5Dscatter","H5Dset_extent","H5Dset_extent_async","H5Dvlen_get_buf_size","H5Dvlen_reclaim","H5Dwrite","H5Dwrite_async","H5Dwrite_chunk","H5Dwrite_multi","H5Dwrite_multi_async","H5EA__cache_dblk_page_deserialize","H5EA__cache_dblk_page_free_icr","H5EA__cache_dblk_page_get_initial_load_size","H5EA__cache_dblk_page_image_len","H5EA__cache_dblk_page_notify","H5EA__cache_dblk_page_serialize","H5EA__cache_dblk_page_verify_chksum","H5EA__cache_dblock_deserialize","H5EA__cache_dblock_free_icr","H5EA__cache_dblock_fsf_size","H5EA__cache_dblock_get_initial_load_size","H5EA__cache_dblock_image_len","H5EA__cache_dblock_notify","H5EA__cache_dblock_serialize","H5EA__cache_dblock_verify_chksum","H5EA__cache_hdr_deserialize","H5EA__cache_hdr_free_icr","H5EA__cache_hdr_get_initial_load_size","H5EA__cache_hdr_image_len","H5EA__cache_hdr_notify","H5EA__cache_hdr_serialize","H5EA__cache_hdr_verify_chksum","H5EA__cache_iblock_deserialize","H5EA__cache_iblock_free_icr","H5EA__cache_iblock_get_initial_load_size","H5EA__cache_iblock_image_len","H5EA__cache_iblock_notify","H5EA__cache_iblock_serialize","H5EA__cache_iblock_verify_chksum","H5EA__cache_sblock_deserialize","H5EA__cache_sblock_free_icr","H5EA__cache_sblock_get_initial_load_size","H5EA__cache_sblock_image_len","H5EA__cache_sblock_notify","H5EA__cache_sblock_serialize","H5EA__cache_sblock_verify_chksum","H5EA__cmp_cparam_test","H5EA__create_flush_depend","H5EA__dblk_page_alloc","H5EA__dblk_page_create","H5EA__dblk_page_dest","H5EA__dblk_page_protect","H5EA__dblk_page_unprotect","H5EA__dblock_alloc","H5EA__dblock_create","H5EA__dblock_debug","H5EA__dblock_delete","H5EA__dblock_dest","H5EA__dblock_protect","H5EA__dblock_sblk_idx","H5EA__dblock_unprotect","H5EA__destroy_flush_depend","H5EA__get_cparam_test","H5EA__hdr_alloc","H5EA__hdr_alloc_elmts","H5EA__hdr_create","H5EA__hdr_debug","H5EA__hdr_decr","H5EA__hdr_delete","H5EA__hdr_dest","H5EA__hdr_free_elmts","H5EA__hdr_fuse_decr","H5EA__hdr_fuse_incr","H5EA__hdr_incr","H5EA__hdr_init","H5EA__hdr_modified","H5EA__hdr_protect","H5EA__hdr_unprotect","H5EA__iblock_alloc","H5EA__iblock_create","H5EA__iblock_debug","H5EA__iblock_delete","H5EA__iblock_dest","H5EA__iblock_protect","H5EA__iblock_unprotect","H5EA__lookup_elmt.constprop.0.isra.0","H5EA__sblock_alloc","H5EA__sblock_create","H5EA__sblock_debug","H5EA__sblock_delete","H5EA__sblock_dest","H5EA__sblock_protect","H5EA__sblock_unprotect","H5EA__test_crt_context","H5EA__test_crt_dbg_context","H5EA__test_debug","H5EA__test_decode","H5EA__test_dst_context","H5EA__test_dst_dbg_context","H5EA__test_encode","H5EA__test_fill","H5EA_close","H5EA_create","H5EA_delete","H5EA_depend","H5EA_get","H5EA_get_addr","H5EA_get_nelmts","H5EA_get_stats","H5EA_iterate","H5EA_open","H5EA_patch_file","H5EA_set","H5ES__cancel","H5ES__cancel_cb","H5ES__close_cb","H5ES__close_failed_cb","H5ES__create","H5ES__event_completed","H5ES__event_free","H5ES__event_new","H5ES__get_err_info","H5ES__get_err_info_cb","H5ES__get_requests","H5ES__get_requests_cb","H5ES__insert_request","H5ES__list_append","H5ES__list_count","H5ES__list_iterate","H5ES__list_remove","H5ES__op_complete","H5ES__wait","H5ES__wait_cb","H5ES_init","H5ES_insert","H5ES_term_package","H5EScancel","H5ESclose","H5EScreate","H5ESfree_err_info","H5ESget_count","H5ESget_err_count","H5ESget_err_info","H5ESget_err_status","H5ESget_op_counter","H5ESget_requests","H5ESinsert_request","H5ESregister_complete_func","H5ESregister_insert_func","H5ESwait","H5E__append_stack","H5E__clear_entries","H5E__clear_stack","H5E__close_msg","H5E__close_msg_cb","H5E__close_stack","H5E__create_msg","H5E__get_auto","H5E__get_class_name","H5E__get_current_stack","H5E__get_msg","H5E__get_num","H5E__pop","H5E__print","H5E__print2","H5E__push_stack","H5E__register_class","H5E__set_auto","H5E__set_current_stack","H5E__set_default_auto","H5E__unregister_class","H5E__walk","H5E__walk1_cb","H5E__walk2_cb","H5E_clear_stack","H5E_dump_api_stack","H5E_init","H5E_pause_stack","H5E_printf_stack","H5E_resume_stack","H5E_term_package","H5Eappend_stack","H5Eauto_is_v2","H5Eclear1","H5Eclear2","H5Eclose_msg","H5Eclose_stack","H5Ecreate_msg","H5Ecreate_stack","H5Eget_auto1","H5Eget_auto2","H5Eget_class_name","H5Eget_current_stack","H5Eget_major","H5Eget_minor","H5Eget_msg","H5Eget_num","H5Eis_paused","H5Epause_stack","H5Epop","H5Eprint1","H5Eprint2","H5Epush1","H5Epush2","H5Eregister_class","H5Eresume_stack","H5Eset_auto1","H5Eset_auto2","H5Eset_current_stack","H5Eunregister_class","H5Ewalk1","H5Ewalk2","H5FA__cache_dblk_page_deserialize","H5FA__cache_dblk_page_free_icr","H5FA__cache_dblk_page_get_initial_load_size","H5FA__cache_dblk_page_image_len","H5FA__cache_dblk_page_notify","H5FA__cache_dblk_page_serialize","H5FA__cache_dblk_page_verify_chksum","H5FA__cache_dblock_deserialize","H5FA__cache_dblock_free_icr","H5FA__cache_dblock_fsf_size","H5FA__cache_dblock_get_initial_load_size","H5FA__cache_dblock_image_len","H5FA__cache_dblock_notify","H5FA__cache_dblock_serialize","H5FA__cache_dblock_verify_chksum","H5FA__cache_hdr_deserialize","H5FA__cache_hdr_free_icr","H5FA__cache_hdr_get_initial_load_size","H5FA__cache_hdr_image_len","H5FA__cache_hdr_notify","H5FA__cache_hdr_serialize","H5FA__cache_hdr_verify_chksum","H5FA__cmp_cparam_test","H5FA__create_flush_depend","H5FA__dblk_page_alloc","H5FA__dblk_page_create","H5FA__dblk_page_dest","H5FA__dblk_page_protect","H5FA__dblk_page_unprotect","H5FA__dblock_alloc","H5FA__dblock_create","H5FA__dblock_debug","H5FA__dblock_delete","H5FA__dblock_dest","H5FA__dblock_protect","H5FA__dblock_unprotect","H5FA__destroy_flush_depend","H5FA__get_cparam_test","H5FA__hdr_alloc","H5FA__hdr_create","H5FA__hdr_debug","H5FA__hdr_decr","H5FA__hdr_delete","H5FA__hdr_dest","H5FA__hdr_fuse_decr","H5FA__hdr_fuse_incr","H5FA__hdr_incr","H5FA__hdr_init","H5FA__hdr_modified","H5FA__hdr_protect","H5FA__hdr_unprotect","H5FA__test_crt_context","H5FA__test_crt_dbg_context","H5FA__test_debug","H5FA__test_decode","H5FA__test_dst_context","H5FA__test_encode","H5FA__test_fill","H5FA_close","H5FA_create","H5FA_delete","H5FA_depend","H5FA_get","H5FA_get_addr","H5FA_get_nelmts","H5FA_get_stats","H5FA_iterate","H5FA_open","H5FA_patch_file","H5FA_set","H5FD__alloc_real","H5FD__copy_plist","H5FD__core_close","H5FD__core_cmp","H5FD__core_delete","H5FD__core_fapl_get","H5FD__core_flush","H5FD__core_flush.part.0","H5FD__core_get_eoa","H5FD__core_get_eof","H5FD__core_get_handle","H5FD__core_lock","H5FD__core_open","H5FD__core_query","H5FD__core_read","H5FD__core_set_eoa","H5FD__core_term","H5FD__core_truncate","H5FD__core_unlock","H5FD__core_write","H5FD__core_write_to_bstore","H5FD__extend","H5FD__family_close","H5FD__family_cmp","H5FD__family_delete","H5FD__family_fapl_copy","H5FD__family_fapl_free","H5FD__family_fapl_get","H5FD__family_flush","H5FD__family_get_default_config","H5FD__family_get_default_printf_filename","H5FD__family_get_eoa","H5FD__family_get_eof","H5FD__family_get_handle","H5FD__family_lock","H5FD__family_open","H5FD__family_query","H5FD__family_read","H5FD__family_sb_decode","H5FD__family_sb_encode","H5FD__family_sb_size","H5FD__family_set_eoa","H5FD__family_term","H5FD__family_truncate","H5FD__family_unlock","H5FD__family_write","H5FD__free_cls","H5FD__free_real","H5FD__get_driver_cb","H5FD__log_alloc","H5FD__log_close","H5FD__log_cmp","H5FD__log_delete","H5FD__log_fapl_copy","H5FD__log_fapl_free","H5FD__log_fapl_get","H5FD__log_free","H5FD__log_get_eoa","H5FD__log_get_eof","H5FD__log_get_handle","H5FD__log_lock","H5FD__log_open","H5FD__log_query","H5FD__log_read","H5FD__log_set_eoa","H5FD__log_term","H5FD__log_truncate","H5FD__log_unlock","H5FD__log_write","H5FD__mpio_close","H5FD__mpio_ctl","H5FD__mpio_delete","H5FD__mpio_flush","H5FD__mpio_get_eoa","H5FD__mpio_get_eof","H5FD__mpio_get_handle","H5FD__mpio_open","H5FD__mpio_query","H5FD__mpio_read","H5FD__mpio_read_selection","H5FD__mpio_read_vector","H5FD__mpio_set_eoa","H5FD__mpio_term","H5FD__mpio_truncate","H5FD__mpio_vector_build_types.constprop.0","H5FD__mpio_write","H5FD__mpio_write_selection","H5FD__mpio_write_vector","H5FD__onion_archival_index_find","H5FD__onion_archival_index_is_valid","H5FD__onion_archival_index_list_sort_cmp","H5FD__onion_close","H5FD__onion_ctl","H5FD__onion_get_eoa","H5FD__onion_get_eof","H5FD__onion_header_decode","H5FD__onion_header_encode","H5FD__onion_history_decode","H5FD__onion_history_encode","H5FD__onion_ingest_header","H5FD__onion_ingest_history","H5FD__onion_ingest_revision_record","H5FD__onion_merge_revision_index_into_archival_index","H5FD__onion_open","H5FD__onion_read","H5FD__onion_revision_index_destroy","H5FD__onion_revision_index_find","H5FD__onion_revision_index_init","H5FD__onion_revision_index_insert","H5FD__onion_revision_record_decode","H5FD__onion_revision_record_encode","H5FD__onion_sb_decode","H5FD__onion_sb_encode","H5FD__onion_sb_size","H5FD__onion_set_eoa","H5FD__onion_term","H5FD__onion_write","H5FD__onion_write_final_history","H5FD__onion_write_header","H5FD__onion_write_history","H5FD__read_selection_translate","H5FD__sec2_close","H5FD__sec2_cmp","H5FD__sec2_ctl","H5FD__sec2_delete","H5FD__sec2_get_eoa","H5FD__sec2_get_eof","H5FD__sec2_get_handle","H5FD__sec2_lock","H5FD__sec2_open","H5FD__sec2_query","H5FD__sec2_read","H5FD__sec2_set_eoa","H5FD__sec2_term","H5FD__sec2_truncate","H5FD__sec2_unlock","H5FD__sec2_write","H5FD__selection_build_types.constprop.0","H5FD__sort_io_req_real.constprop.0","H5FD__splitter_alloc","H5FD__splitter_close","H5FD__splitter_cmp","H5FD__splitter_ctl","H5FD__splitter_delete","H5FD__splitter_fapl_copy","H5FD__splitter_fapl_free","H5FD__splitter_fapl_get","H5FD__splitter_flush","H5FD__splitter_free","H5FD__splitter_get_default_wo_path.constprop.0","H5FD__splitter_get_eoa","H5FD__splitter_get_eof","H5FD__splitter_get_handle","H5FD__splitter_get_type_map","H5FD__splitter_lock","H5FD__splitter_log_error.part.0.isra.0","H5FD__splitter_open","H5FD__splitter_populate_config","H5FD__splitter_query","H5FD__splitter_read","H5FD__splitter_sb_decode","H5FD__splitter_sb_encode","H5FD__splitter_sb_size","H5FD__splitter_set_eoa","H5FD__splitter_term","H5FD__splitter_truncate","H5FD__splitter_unlock","H5FD__splitter_write","H5FD__srt_tmp_cmp","H5FD__supports_swmr_test","H5FD__write_selection_translate","H5FD_alloc","H5FD_check_plugin_load","H5FD_close","H5FD_cmp","H5FD_core_init","H5FD_ctl","H5FD_delete","H5FD_driver_query","H5FD_family_init","H5FD_fapl_get","H5FD_flush","H5FD_free","H5FD_free_driver_info","H5FD_get_base_addr","H5FD_get_class","H5FD_get_class.localalias","H5FD_get_driver_id_by_name","H5FD_get_driver_id_by_value","H5FD_get_eoa","H5FD_get_eof","H5FD_get_feature_flags","H5FD_get_fileno","H5FD_get_fs_type_map","H5FD_get_maxaddr","H5FD_get_mpio_atomicity","H5FD_get_vfd_handle","H5FD_init","H5FD_is_driver_registered_by_name","H5FD_is_driver_registered_by_value","H5FD_locate_signature","H5FD_lock","H5FD_log_init","H5FD_mpi_MPIOff_to_haddr","H5FD_mpi_get_comm","H5FD_mpi_get_file_sync_required","H5FD_mpi_get_info","H5FD_mpi_get_rank","H5FD_mpi_get_size","H5FD_mpi_haddr_to_MPIOff","H5FD_mpio_init","H5FD_multi_alloc","H5FD_multi_close","H5FD_multi_cmp","H5FD_multi_ctl","H5FD_multi_delete","H5FD_multi_fapl_copy","H5FD_multi_fapl_free","H5FD_multi_fapl_get","H5FD_multi_flush","H5FD_multi_free","H5FD_multi_get_eoa","H5FD_multi_get_eof","H5FD_multi_get_handle","H5FD_multi_get_type_map","H5FD_multi_init","H5FD_multi_lock","H5FD_multi_open","H5FD_multi_populate_config","H5FD_multi_query","H5FD_multi_read","H5FD_multi_sb_decode","H5FD_multi_sb_decode.part.0","H5FD_multi_sb_encode","H5FD_multi_sb_size","H5FD_multi_set_eoa","H5FD_multi_term","H5FD_multi_truncate","H5FD_multi_unlock","H5FD_multi_write","H5FD_onion_init","H5FD_open","H5FD_read","H5FD_read_from_selection","H5FD_read_selection","H5FD_read_selection_id","H5FD_read_vector","H5FD_read_vector_from_selection","H5FD_register","H5FD_register_driver_by_name","H5FD_register_driver_by_value","H5FD_sb_encode","H5FD_sb_load","H5FD_sb_size","H5FD_sec2_init","H5FD_set_base_addr","H5FD_set_eoa","H5FD_set_feature_flags","H5FD_set_mpio_atomicity","H5FD_set_paged_aggr","H5FD_sort_selection_io_req","H5FD_sort_vector_io_req","H5FD_split_populate_config.constprop.0","H5FD_splitter_init","H5FD_stdio_alloc","H5FD_stdio_close","H5FD_stdio_cmp","H5FD_stdio_delete","H5FD_stdio_flush","H5FD_stdio_get_eoa","H5FD_stdio_get_eof","H5FD_stdio_get_handle","H5FD_stdio_init","H5FD_stdio_lock","H5FD_stdio_open","H5FD_stdio_query","H5FD_stdio_read","H5FD_stdio_set_eoa","H5FD_stdio_term","H5FD_stdio_truncate","H5FD_stdio_unlock","H5FD_stdio_write","H5FD_term_package","H5FD_truncate","H5FD_try_extend","H5FD_unlock","H5FD_write","H5FD_write_from_selection","H5FD_write_selection","H5FD_write_selection_id","H5FD_write_vector","H5FD_write_vector_from_selection","H5FDalloc","H5FDclose","H5FDcmp","H5FDctl","H5FDdelete","H5FDdriver_query","H5FDflush","H5FDfree","H5FDget_eoa","H5FDget_eof","H5FDget_vfd_handle","H5FDis_driver_registered_by_name","H5FDis_driver_registered_by_value","H5FDlock","H5FDonion_get_revision_count","H5FDopen","H5FDperform_init","H5FDquery","H5FDread","H5FDread_from_selection","H5FDread_selection","H5FDread_vector","H5FDread_vector_from_selection","H5FDregister","H5FDset_eoa","H5FDtruncate","H5FDunlock","H5FDunregister","H5FDwrite","H5FDwrite_from_selection","H5FDwrite_selection","H5FDwrite_vector","H5FDwrite_vector_from_selection","H5FL__blk_create_list.part.0","H5FL__blk_gc_list","H5FL_arr_calloc","H5FL_arr_free","H5FL_arr_malloc","H5FL_arr_realloc","H5FL_blk_calloc","H5FL_blk_free","H5FL_blk_free_block_avail","H5FL_blk_malloc","H5FL_blk_realloc","H5FL_fac_calloc","H5FL_fac_free","H5FL_fac_init","H5FL_fac_malloc","H5FL_fac_term","H5FL_garbage_coll","H5FL_get_free_list_sizes","H5FL_reg_calloc","H5FL_reg_free","H5FL_reg_malloc","H5FL_seq_calloc","H5FL_seq_free","H5FL_seq_malloc","H5FL_seq_realloc","H5FL_set_free_list_limits","H5FL_term_package","H5FO_create","H5FO_delete","H5FO_dest","H5FO_insert","H5FO_mark","H5FO_marked","H5FO_opened","H5FO_top_count","H5FO_top_create","H5FO_top_decr","H5FO_top_dest","H5FO_top_incr","H5FS__cache_hdr_deserialize","H5FS__cache_hdr_free_icr","H5FS__cache_hdr_get_initial_load_size","H5FS__cache_hdr_image_len","H5FS__cache_hdr_notify","H5FS__cache_hdr_pre_serialize","H5FS__cache_hdr_serialize","H5FS__cache_hdr_verify_chksum","H5FS__cache_sinfo_deserialize","H5FS__cache_sinfo_free_icr","H5FS__cache_sinfo_get_initial_load_size","H5FS__cache_sinfo_image_len","H5FS__cache_sinfo_notify","H5FS__cache_sinfo_pre_serialize","H5FS__cache_sinfo_serialize","H5FS__cache_sinfo_verify_chksum","H5FS__cmp_cparam_test","H5FS__create_flush_depend","H5FS__decr","H5FS__destroy_flush_depend","H5FS__dirty","H5FS__get_cparam_test","H5FS__hdr_dest","H5FS__incr","H5FS__iterate_node_cb","H5FS__iterate_sect_cb","H5FS__new","H5FS__sect_init_cls.part.0","H5FS__sect_link","H5FS__sect_merge","H5FS__sect_node_new.part.0","H5FS__sect_remove_real","H5FS__sect_unlink_rest","H5FS__sinfo_dest","H5FS__sinfo_free_node_cb","H5FS__sinfo_free_sect_cb","H5FS__sinfo_lock","H5FS__sinfo_new","H5FS__sinfo_serialize_node_cb","H5FS__sinfo_serialize_sect_cb","H5FS__sinfo_unlock","H5FS__size_node_decr.isra.0","H5FS_alloc_hdr","H5FS_alloc_sect","H5FS_close","H5FS_create","H5FS_debug","H5FS_delete","H5FS_free","H5FS_get_sect_count","H5FS_open","H5FS_sect_add","H5FS_sect_change_class","H5FS_sect_debug","H5FS_sect_find","H5FS_sect_iterate","H5FS_sect_remove","H5FS_sect_stats","H5FS_sect_try_extend","H5FS_sect_try_merge","H5FS_sect_try_shrink_eoa","H5FS_sects_debug","H5FS_size","H5FS_stat_info","H5FS_vfd_alloc_hdr_and_section_info_if_needed","H5F_Kvalue","H5F__accum_adjust","H5F__accum_flush","H5F__accum_free","H5F__accum_read","H5F__accum_reset","H5F__accum_write","H5F__alloc","H5F__build_actual_name","H5F__build_name","H5F__cache_drvrinfo_deserialize","H5F__cache_drvrinfo_free_icr","H5F__cache_drvrinfo_get_final_load_size","H5F__cache_drvrinfo_get_initial_load_size","H5F__cache_drvrinfo_image_len","H5F__cache_drvrinfo_serialize","H5F__cache_superblock_deserialize","H5F__cache_superblock_free_icr","H5F__cache_superblock_get_final_load_size","H5F__cache_superblock_get_initial_load_size","H5F__cache_superblock_image_len","H5F__cache_superblock_serialize","H5F__cache_superblock_verify_chksum","H5F__check_cached_stab_test","H5F__close","H5F__close_cb","H5F__close_mounts","H5F__create_api_common","H5F__delete","H5F__dest","H5F__efc_create","H5F__efc_destroy","H5F__efc_max_nfiles","H5F__efc_open","H5F__efc_open_file","H5F__efc_release","H5F__efc_release_real","H5F__efc_try_close","H5F__efc_try_close_tag1.isra.0","H5F__efc_try_close_tag2.isra.0","H5F__evict_cache_entries","H5F__flush","H5F__flush_api_common","H5F__flush_mounts_recurse","H5F__flush_phase2","H5F__format_convert","H5F__free","H5F__get_all_count_cb","H5F__get_all_ids_cb","H5F__get_cont_info","H5F__get_file_image","H5F__get_info","H5F__get_max_eof_eoa","H5F__get_maxaddr_test","H5F__get_mpi_atomicity","H5F__get_objects_cb","H5F__get_sbe_addr_test","H5F__get_sohm_mesg_count_test","H5F__is_hdf5","H5F__mount_count_ids","H5F__mount_count_ids_recurse","H5F__new","H5F__open_api_common","H5F__parse_file_lock_env_var","H5F__post_open","H5F__post_open_api_common","H5F__reopen","H5F__reopen_api_common","H5F__reparse_file_lock_variable_test","H5F__same_file_test","H5F__set_base_addr","H5F__set_eoa","H5F__set_libver_bounds","H5F__set_mpi_atomicity","H5F__set_paged_aggr","H5F__sfile_add","H5F__sfile_remove","H5F__sfile_search","H5F__start_swmr_write","H5F__super_ext_close","H5F__super_ext_create","H5F__super_ext_open","H5F__super_ext_remove_msg","H5F__super_ext_write_msg","H5F__super_free","H5F__super_init","H5F__super_read","H5F__super_size","H5F__superblock_prefix_decode","H5F__try_extend","H5F__update_super_ext_driver_msg","H5F_addr_decode","H5F_addr_decode_len","H5F_addr_encode","H5F_addr_encode_len","H5F_block_read","H5F_block_write","H5F_coll_md_read","H5F_cwfs_add","H5F_cwfs_advance_heap","H5F_cwfs_find_free_heap","H5F_cwfs_remove_heap","H5F_debug","H5F_decr_nopen_objs","H5F_efc_close","H5F_eoa_dirty","H5F_fake_alloc","H5F_fake_free","H5F_file_id_exists","H5F_flush_mounts","H5F_flush_tagged_metadata","H5F_gc_ref","H5F_get_access_plist","H5F_get_actual_name","H5F_get_alignment","H5F_get_base_addr","H5F_get_checksums","H5F_get_coll_metadata_reads","H5F_get_driver_id","H5F_get_eoa","H5F_get_evict_on_close","H5F_get_extpath","H5F_get_fc_degree","H5F_get_fcpl","H5F_get_file_id","H5F_get_fileno","H5F_get_high_bound","H5F_get_id","H5F_get_intent","H5F_get_low_bound","H5F_get_metadata_read_retry_info","H5F_get_min_dset_ohdr","H5F_get_nmounts","H5F_get_nopen_objs","H5F_get_nrefs","H5F_get_null_fsm_addr","H5F_get_obj_count","H5F_get_obj_ids","H5F_get_open_name","H5F_get_parent","H5F_get_pgend_meta_thres","H5F_get_point_of_no_return","H5F_get_read_attempts","H5F_get_rfic_flags","H5F_get_shared","H5F_get_sohm_addr","H5F_get_sohm_nindexes","H5F_get_sohm_vers","H5F_get_threshold","H5F_get_use_file_locking","H5F_get_vfd_handle","H5F_get_vol_cls","H5F_get_vol_obj","H5F_grp_btree_shared","H5F_has_feature","H5F_has_vector_select_io","H5F_incr_nopen_objs","H5F_init","H5F_is_mount","H5F_is_tmp_addr","H5F_mdc_log_location","H5F_mount","H5F_mpi_get_comm","H5F_mpi_get_file_block_type","H5F_mpi_get_info","H5F_mpi_get_rank","H5F_mpi_get_size","H5F_mpi_retrieve_comm","H5F_object_flush_cb","H5F_open","H5F_prefix_open_file","H5F_rdcc_nbytes","H5F_rdcc_nslots","H5F_rdcc_w0","H5F_same_shared","H5F_set_coll_metadata_reads","H5F_set_grp_btree_shared","H5F_set_min_dset_ohdr","H5F_set_retries","H5F_set_sohm_addr","H5F_set_sohm_nindexes","H5F_set_sohm_vers","H5F_set_store_msg_crt_idx","H5F_sfile_assert_num","H5F_shared_block_read","H5F_shared_block_write","H5F_shared_coll_md_read","H5F_shared_get_coll_metadata_reads","H5F_shared_get_eoa","H5F_shared_get_file_driver","H5F_shared_get_intent","H5F_shared_get_mpi_file_sync_required","H5F_shared_has_feature","H5F_shared_mpi_get_size","H5F_shared_select_read","H5F_shared_select_write","H5F_shared_vector_read","H5F_shared_vector_write","H5F_sieve_buf_size","H5F_sizeof_addr","H5F_sizeof_size","H5F_start_mdc_log_on_access","H5F_store_msg_crt_idx","H5F_super_dirty","H5F_sym_leaf_k","H5F_term_package","H5F_track_metadata_read_retries","H5F_traverse_mount","H5F_try_close","H5F_try_close.localalias","H5F_unmount","H5F_use_mdc_logging","H5F_use_tmp_space","H5Fclear_elink_file_cache","H5Fclose","H5Fclose_async","H5Fcreate","H5Fcreate_async","H5Fdelete","H5Fflush","H5Fflush_async","H5Fformat_convert","H5Fget_access_plist","H5Fget_create_plist","H5Fget_dset_no_attrs_hint","H5Fget_eoa","H5Fget_file_image","H5Fget_fileno","H5Fget_filesize","H5Fget_free_sections","H5Fget_freespace","H5Fget_info1","H5Fget_info2","H5Fget_intent","H5Fget_mdc_config","H5Fget_mdc_hit_rate","H5Fget_mdc_image_info","H5Fget_mdc_logging_status","H5Fget_mdc_size","H5Fget_metadata_read_retry_info","H5Fget_mpi_atomicity","H5Fget_name","H5Fget_obj_count","H5Fget_obj_ids","H5Fget_page_buffering_stats","H5Fget_vfd_handle","H5Fincrement_filesize","H5Fis_accessible","H5Fis_hdf5","H5Fmount","H5Fopen","H5Fopen_async","H5Freopen","H5Freopen_async","H5Freset_mdc_hit_rate_stats","H5Freset_page_buffering_stats","H5Fset_dset_no_attrs_hint","H5Fset_latest_format","H5Fset_libver_bounds","H5Fset_mdc_config","H5Fset_mpi_atomicity","H5Fstart_mdc_logging","H5Fstart_swmr_write","H5Fstop_mdc_logging","H5Funmount","H5G__cache_node_deserialize","H5G__cache_node_free_icr","H5G__cache_node_get_initial_load_size","H5G__cache_node_image_len","H5G__cache_node_serialize","H5G__close_cb","H5G__common_path","H5G__compact_build_table_cb","H5G__compact_get_name_by_idx","H5G__compact_insert","H5G__compact_iterate","H5G__compact_lookup","H5G__compact_lookup_by_idx","H5G__compact_lookup_cb","H5G__compact_remove","H5G__compact_remove_by_idx","H5G__compact_remove_common_cb","H5G__component","H5G__create","H5G__create_named","H5G__dense_btree2_corder_compare","H5G__dense_btree2_corder_debug","H5G__dense_btree2_corder_decode","H5G__dense_btree2_corder_encode","H5G__dense_btree2_corder_store","H5G__dense_btree2_name_compare","H5G__dense_btree2_name_debug","H5G__dense_btree2_name_decode","H5G__dense_btree2_name_encode","H5G__dense_btree2_name_store","H5G__dense_build_table","H5G__dense_build_table_cb","H5G__dense_create","H5G__dense_delete","H5G__dense_fh_name_cmp","H5G__dense_get_name_by_idx","H5G__dense_get_name_by_idx_bt2_cb","H5G__dense_get_name_by_idx_fh_cb","H5G__dense_insert","H5G__dense_iterate","H5G__dense_iterate_bt2_cb","H5G__dense_iterate_fh_cb","H5G__dense_lookup","H5G__dense_lookup_by_idx","H5G__dense_lookup_by_idx_bt2_cb","H5G__dense_lookup_by_idx_fh_cb","H5G__dense_lookup_cb","H5G__dense_remove","H5G__dense_remove_bt2_cb","H5G__dense_remove_by_idx","H5G__dense_remove_by_idx_bt2_cb","H5G__dense_remove_by_idx_fh_cb","H5G__dense_remove_fh_cb","H5G__ent_copy","H5G__ent_debug","H5G__ent_decode_vec","H5G__ent_encode_vec","H5G__ent_reset","H5G__ent_to_link","H5G__free_visit_visited","H5G__get_info_by_idx","H5G__get_info_by_name","H5G__get_name_by_addr_cb","H5G__get_objinfo","H5G__get_objinfo_cb","H5G__has_links_test","H5G__has_stab_test","H5G__is_empty_test","H5G__is_new_dense_test","H5G__iterate_cb","H5G__lheap_size_test","H5G__link_cmp_corder_dec","H5G__link_cmp_corder_inc","H5G__link_cmp_name_dec","H5G__link_cmp_name_inc","H5G__link_iterate_table","H5G__link_name_replace","H5G__link_release_table","H5G__link_sort_table","H5G__link_to_ent","H5G__link_to_loc","H5G__loc_addr","H5G__loc_addr_cb","H5G__loc_exists_cb","H5G__loc_find_by_idx_cb","H5G__loc_find_cb","H5G__loc_get_comment_cb","H5G__loc_info_cb","H5G__loc_insert","H5G__loc_native_info_cb","H5G__loc_set_comment_cb","H5G__name_init","H5G__name_replace_cb","H5G__new_dense_info_test","H5G__node_build_table","H5G__node_by_idx","H5G__node_cmp2","H5G__node_cmp3","H5G__node_copy","H5G__node_create","H5G__node_debug_key","H5G__node_decode_key","H5G__node_encode_key","H5G__node_found","H5G__node_free","H5G__node_get_shared","H5G__node_init","H5G__node_insert","H5G__node_iterate","H5G__node_iterate_size","H5G__node_remove","H5G__node_sumup","H5G__obj_compact_to_dense_cb","H5G__obj_create","H5G__obj_create_real","H5G__obj_get_linfo","H5G__obj_info","H5G__obj_iterate","H5G__obj_lookup","H5G__obj_remove_update_linfo","H5G__obj_stab_to_new_cb","H5G__open_name","H5G__stab_bh_size","H5G__stab_count","H5G__stab_create","H5G__stab_create_components","H5G__stab_delete","H5G__stab_get_name_by_idx","H5G__stab_get_name_by_idx_cb","H5G__stab_insert","H5G__stab_insert_real","H5G__stab_iterate","H5G__stab_lookup","H5G__stab_lookup_by_idx","H5G__stab_lookup_by_idx_cb","H5G__stab_lookup_cb","H5G__stab_remove","H5G__stab_remove_by_idx","H5G__stab_valid","H5G__traverse_real","H5G__traverse_slink_cb","H5G__traverse_special","H5G__user_path_test","H5G__verify_cached_stab_test","H5G__verify_cached_stabs_test","H5G__verify_cached_stabs_test_cb","H5G__visit_cb","H5G_build_fullpath_refstr_str","H5G_close","H5G_ent_decode","H5G_ent_encode","H5G_fileof","H5G_get_create_plist","H5G_get_gcpl_id","H5G_get_name","H5G_get_name_by_addr","H5G_get_shared_count","H5G_init","H5G_iterate","H5G_link_to_info","H5G_loc","H5G_loc_copy","H5G_loc_exists","H5G_loc_find","H5G_loc_find_by_idx","H5G_loc_free","H5G_loc_get_comment","H5G_loc_info","H5G_loc_native_info","H5G_loc_real","H5G_loc_reset","H5G_loc_set_comment","H5G_map_obj_type","H5G_mkroot","H5G_mount","H5G_mounted","H5G_name_copy","H5G_name_free","H5G_name_replace","H5G_name_reset","H5G_name_set","H5G_nameof","H5G_node_close","H5G_node_debug","H5G_normalize","H5G_obj_get_name_by_idx","H5G_obj_insert","H5G_obj_insert.localalias","H5G_obj_lookup_by_idx","H5G_obj_remove","H5G_obj_remove_by_idx","H5G_oloc","H5G_open","H5G_root_free","H5G_root_loc","H5G_rootof","H5G_term_package","H5G_top_term_package","H5G_traverse","H5G_unmount","H5G_visit","H5Gclose","H5Gclose_async","H5Gcreate1","H5Gcreate2","H5Gcreate_anon","H5Gcreate_async","H5Gflush","H5Gget_comment","H5Gget_create_plist","H5Gget_info","H5Gget_info_async","H5Gget_info_by_idx","H5Gget_info_by_idx_async","H5Gget_info_by_name","H5Gget_info_by_name_async","H5Gget_linkval","H5Gget_num_objs","H5Gget_objinfo","H5Gget_objname_by_idx","H5Gget_objtype_by_idx","H5Giterate","H5Glink","H5Glink2","H5Gmove","H5Gmove2","H5Gopen1","H5Gopen2","H5Gopen_async","H5Grefresh","H5Gset_comment","H5Gunlink","H5HF__cache_dblock_deserialize","H5HF__cache_dblock_free_icr","H5HF__cache_dblock_fsf_size","H5HF__cache_dblock_get_initial_load_size","H5HF__cache_dblock_image_len","H5HF__cache_dblock_notify","H5HF__cache_dblock_pre_serialize","H5HF__cache_dblock_serialize","H5HF__cache_dblock_verify_chksum","H5HF__cache_hdr_deserialize","H5HF__cache_hdr_free_icr","H5HF__cache_hdr_get_final_load_size","H5HF__cache_hdr_get_initial_load_size","H5HF__cache_hdr_image_len","H5HF__cache_hdr_pre_serialize","H5HF__cache_hdr_serialize","H5HF__cache_hdr_verify_chksum","H5HF__cache_iblock_deserialize","H5HF__cache_iblock_free_icr","H5HF__cache_iblock_get_initial_load_size","H5HF__cache_iblock_image_len","H5HF__cache_iblock_notify","H5HF__cache_iblock_pre_serialize","H5HF__cache_iblock_serialize","H5HF__cache_iblock_verify_chksum","H5HF__dtable_dest","H5HF__dtable_init","H5HF__dtable_lookup","H5HF__dtable_size_to_row","H5HF__dtable_size_to_rows","H5HF__dtable_span_size","H5HF__hdr_adj_free","H5HF__hdr_adjust_heap","H5HF__hdr_alloc","H5HF__hdr_create","H5HF__hdr_decr","H5HF__hdr_delete","H5HF__hdr_dirty","H5HF__hdr_empty","H5HF__hdr_finish_init","H5HF__hdr_finish_init_phase1","H5HF__hdr_finish_init_phase2","H5HF__hdr_free","H5HF__hdr_fuse_decr","H5HF__hdr_fuse_incr","H5HF__hdr_inc_alloc","H5HF__hdr_inc_iter","H5HF__hdr_incr","H5HF__hdr_protect","H5HF__hdr_reset_iter","H5HF__hdr_reverse_iter","H5HF__hdr_skip_blocks","H5HF__hdr_start_iter","H5HF__hdr_update_iter","H5HF__huge_bt2_crt_context","H5HF__huge_bt2_dir_compare","H5HF__huge_bt2_dir_debug","H5HF__huge_bt2_dir_decode","H5HF__huge_bt2_dir_encode","H5HF__huge_bt2_dir_remove","H5HF__huge_bt2_dir_store","H5HF__huge_bt2_dst_context","H5HF__huge_bt2_filt_dir_compare","H5HF__huge_bt2_filt_dir_debug","H5HF__huge_bt2_filt_dir_decode","H5HF__huge_bt2_filt_dir_encode","H5HF__huge_bt2_filt_dir_found","H5HF__huge_bt2_filt_dir_remove","H5HF__huge_bt2_filt_dir_store","H5HF__huge_bt2_filt_indir_compare","H5HF__huge_bt2_filt_indir_debug","H5HF__huge_bt2_filt_indir_decode","H5HF__huge_bt2_filt_indir_encode","H5HF__huge_bt2_filt_indir_found","H5HF__huge_bt2_filt_indir_remove","H5HF__huge_bt2_filt_indir_store","H5HF__huge_bt2_indir_compare","H5HF__huge_bt2_indir_debug","H5HF__huge_bt2_indir_decode","H5HF__huge_bt2_indir_encode","H5HF__huge_bt2_indir_found","H5HF__huge_bt2_indir_remove","H5HF__huge_bt2_indir_store","H5HF__huge_delete","H5HF__huge_get_obj_len","H5HF__huge_get_obj_off","H5HF__huge_init","H5HF__huge_insert","H5HF__huge_op","H5HF__huge_op_real","H5HF__huge_read","H5HF__huge_remove","H5HF__huge_term","H5HF__huge_write","H5HF__iblock_decr","H5HF__iblock_dirty","H5HF__iblock_incr","H5HF__man_dblock_create","H5HF__man_dblock_delete","H5HF__man_dblock_dest","H5HF__man_dblock_destroy","H5HF__man_dblock_locate","H5HF__man_dblock_new","H5HF__man_dblock_protect","H5HF__man_get_obj_len","H5HF__man_get_obj_off","H5HF__man_iblock_alloc_row","H5HF__man_iblock_attach","H5HF__man_iblock_create","H5HF__man_iblock_delete","H5HF__man_iblock_delete.localalias","H5HF__man_iblock_dest","H5HF__man_iblock_detach","H5HF__man_iblock_detach.localalias","H5HF__man_iblock_entry_addr","H5HF__man_iblock_parent_info","H5HF__man_iblock_protect","H5HF__man_iblock_root_create","H5HF__man_iblock_root_double","H5HF__man_iblock_size","H5HF__man_iblock_size.localalias","H5HF__man_iblock_unprotect","H5HF__man_insert","H5HF__man_iter_curr","H5HF__man_iter_down","H5HF__man_iter_init","H5HF__man_iter_next","H5HF__man_iter_ready","H5HF__man_iter_reset","H5HF__man_iter_set_entry","H5HF__man_iter_start_entry","H5HF__man_iter_start_offset","H5HF__man_iter_up","H5HF__man_op","H5HF__man_op_real","H5HF__man_read","H5HF__man_remove","H5HF__man_write","H5HF__op_read","H5HF__op_write","H5HF__sect_indirect_add","H5HF__sect_indirect_decr","H5HF__sect_indirect_first","H5HF__sect_indirect_free","H5HF__sect_indirect_init_cls","H5HF__sect_indirect_init_rows","H5HF__sect_indirect_new","H5HF__sect_indirect_reduce","H5HF__sect_indirect_revive","H5HF__sect_indirect_serialize","H5HF__sect_indirect_shrink","H5HF__sect_indirect_term_cls","H5HF__sect_indirect_valid.isra.0","H5HF__sect_row_can_merge","H5HF__sect_row_can_shrink","H5HF__sect_row_debug","H5HF__sect_row_deserialize","H5HF__sect_row_first.part.0","H5HF__sect_row_free","H5HF__sect_row_get_iblock","H5HF__sect_row_init_cls","H5HF__sect_row_merge","H5HF__sect_row_reduce","H5HF__sect_row_revive","H5HF__sect_row_serialize","H5HF__sect_row_shrink","H5HF__sect_row_term_cls","H5HF__sect_row_valid","H5HF__sect_single_add","H5HF__sect_single_can_merge","H5HF__sect_single_can_shrink","H5HF__sect_single_dblock_info","H5HF__sect_single_deserialize","H5HF__sect_single_free","H5HF__sect_single_full_dblock","H5HF__sect_single_merge","H5HF__sect_single_new","H5HF__sect_single_reduce","H5HF__sect_single_revive","H5HF__sect_single_shrink","H5HF__sect_single_valid","H5HF__space_add","H5HF__space_close","H5HF__space_create_root","H5HF__space_create_root_cb","H5HF__space_delete","H5HF__space_find","H5HF__space_remove","H5HF__space_revert_root","H5HF__space_revert_root_cb","H5HF__space_sect_change_class","H5HF__space_size","H5HF__space_start","H5HF__tiny_get_obj_len","H5HF__tiny_init","H5HF__tiny_insert","H5HF__tiny_op","H5HF__tiny_read","H5HF__tiny_remove","H5HF_close","H5HF_cmp_cparam_test","H5HF_create","H5HF_dblock_debug","H5HF_dblock_debug_cb","H5HF_delete","H5HF_get_cparam_test","H5HF_get_dblock_free_test","H5HF_get_dblock_size_test","H5HF_get_dtable_max_drows_test","H5HF_get_dtable_width_test","H5HF_get_heap_addr","H5HF_get_huge_info_test","H5HF_get_iblock_max_drows_test","H5HF_get_id_len","H5HF_get_id_off_test","H5HF_get_id_type_test","H5HF_get_max_root_rows","H5HF_get_obj_len","H5HF_get_obj_off","H5HF_get_tiny_info_test","H5HF_hdr_debug","H5HF_hdr_print","H5HF_iblock_debug","H5HF_iblock_print","H5HF_iblock_print.localalias","H5HF_id_print","H5HF_insert","H5HF_op","H5HF_open","H5HF_read","H5HF_remove","H5HF_sects_debug","H5HF_sects_debug_cb","H5HF_size","H5HF_stat_info","H5HF_write","H5HG__cache_heap_deserialize","H5HG__cache_heap_free_icr","H5HG__cache_heap_get_final_load_size","H5HG__cache_heap_get_initial_load_size","H5HG__cache_heap_image_len","H5HG__cache_heap_serialize","H5HG__free","H5HG__protect","H5HG_debug","H5HG_extend","H5HG_get_addr","H5HG_get_free_size","H5HG_get_obj_size","H5HG_get_size","H5HG_insert","H5HG_link","H5HG_read","H5HG_remove","H5HL__cache_datablock_deserialize","H5HL__cache_datablock_free_icr","H5HL__cache_datablock_get_initial_load_size","H5HL__cache_datablock_image_len","H5HL__cache_datablock_notify","H5HL__cache_datablock_serialize","H5HL__cache_prefix_deserialize","H5HL__cache_prefix_free_icr","H5HL__cache_prefix_get_final_load_size","H5HL__cache_prefix_get_initial_load_size","H5HL__cache_prefix_image_len","H5HL__cache_prefix_serialize","H5HL__dblk_dest","H5HL__dblk_new","H5HL__dblk_realloc","H5HL__dec_rc","H5HL__dest","H5HL__fl_deserialize","H5HL__fl_serialize","H5HL__hdr_deserialize","H5HL__inc_rc","H5HL__minimize_heap_space","H5HL__new","H5HL__prfx_dest","H5HL__prfx_new","H5HL_create","H5HL_debug","H5HL_delete","H5HL_get_size","H5HL_heap_get_size","H5HL_heapsize","H5HL_insert","H5HL_offset_into","H5HL_protect","H5HL_remove","H5HL_unprotect","H5I__destroy_type","H5I__find_id","H5I__get_name_test","H5I__get_type_ref","H5I__inc_type_ref","H5I__iterate_pub_cb","H5I__register","H5I__remove_common","H5I__remove_verify","H5I__search_cb","H5I_clear_type","H5I_dec_app_ref","H5I_dec_app_ref_always_close","H5I_dec_app_ref_always_close_async","H5I_dec_app_ref_async","H5I_dec_ref","H5I_dec_type_ref","H5I_dump_ids_for_type","H5I_find_id","H5I_get_ref","H5I_get_type","H5I_inc_ref","H5I_is_file_object","H5I_iterate","H5I_nmembers","H5I_object","H5I_object_verify","H5I_register","H5I_register_type","H5I_register_using_existing_id","H5I_remove","H5I_subst","H5I_term_package","H5Iclear_type","H5Idec_ref","H5Idec_type_ref","H5Idestroy_type","H5Iget_file_id","H5Iget_name","H5Iget_ref","H5Iget_type","H5Iget_type_ref","H5Iinc_ref","H5Iinc_type_ref","H5Iis_valid","H5Iiterate","H5Inmembers","H5Iobject_verify","H5Iregister","H5Iregister_future","H5Iregister_type","H5Iremove_verify","H5Isearch","H5Itype_exists","H5L__create_hard","H5L__create_hard_api_common","H5L__create_real","H5L__create_soft","H5L__create_soft_api_common","H5L__create_ud","H5L__delete","H5L__delete_by_idx","H5L__delete_by_idx_cb","H5L__delete_cb","H5L__exists","H5L__exists_final_cb","H5L__exists_inter_cb","H5L__extern_query","H5L__extern_traverse","H5L__get_info_by_idx","H5L__get_info_by_idx_cb","H5L__get_info_cb","H5L__get_name_by_idx","H5L__get_name_by_idx_cb","H5L__get_val","H5L__get_val_by_idx","H5L__get_val_by_idx_cb","H5L__get_val_cb","H5L__iterate2_shim","H5L__link_cb","H5L__link_copy_file","H5L__move","H5L__move_cb","H5L__move_dest_cb","H5L_exists_tolerant","H5L_find_class","H5L_get_info","H5L_get_ocrt_info","H5L_init","H5L_is_registered","H5L_iterate","H5L_link","H5L_link_object","H5L_register","H5L_register_external","H5L_term_package","H5L_unregister","H5Lcopy","H5Lcreate_external","H5Lcreate_hard","H5Lcreate_hard_async","H5Lcreate_soft","H5Lcreate_soft_async","H5Lcreate_ud","H5Ldelete","H5Ldelete_async","H5Ldelete_by_idx","H5Ldelete_by_idx_async","H5Lexists","H5Lexists_async","H5Lget_info1","H5Lget_info2","H5Lget_info_by_idx1","H5Lget_info_by_idx2","H5Lget_name_by_idx","H5Lget_val","H5Lget_val_by_idx","H5Lis_registered","H5Literate1","H5Literate2","H5Literate_async","H5Literate_by_name1","H5Literate_by_name2","H5Lmove","H5Lregister","H5Lunpack_elink_val","H5Lunregister","H5Lvisit1","H5Lvisit2","H5Lvisit_by_name1","H5Lvisit_by_name2","H5MF__add_sect","H5MF__aggr_absorb","H5MF__aggr_alloc","H5MF__aggr_can_absorb","H5MF__aggr_query","H5MF__aggr_try_extend","H5MF__aggrs_try_shrink_eoa","H5MF__alloc_to_fs_type","H5MF__close_delete_fstype","H5MF__close_shrink_eoa","H5MF__find_sect","H5MF__fsm_is_self_referential","H5MF__fsm_type_is_self_referential","H5MF__open_fstype","H5MF__sect_deserialize","H5MF__sect_free","H5MF__sect_large_can_merge","H5MF__sect_large_can_shrink","H5MF__sect_large_merge","H5MF__sect_large_shrink","H5MF__sect_new","H5MF__sect_simple_can_merge","H5MF__sect_simple_can_shrink","H5MF__sect_simple_merge","H5MF__sect_simple_shrink","H5MF__sect_small_add","H5MF__sect_small_can_merge","H5MF__sect_small_merge","H5MF__sect_split","H5MF__sect_valid","H5MF__sects_cb","H5MF__sects_debug_cb","H5MF__start_fstype","H5MF_aggr_vfd_alloc","H5MF_alloc","H5MF_alloc_tmp","H5MF_close","H5MF_free_aggrs","H5MF_get_free_sections","H5MF_get_freespace","H5MF_init_merge_flags","H5MF_sects_debug","H5MF_settle_meta_data_fsm","H5MF_settle_raw_data_fsm","H5MF_try_close","H5MF_try_extend","H5MF_try_shrink","H5MF_xfree","H5MM_realloc","H5MM_strdup","H5MM_strndup","H5MM_xfree","H5MM_xfree_const","H5MM_xstrdup","H5M__close_cb","H5M_init","H5M_term_package","H5M_top_term_package","H5O__add_gap.constprop.0","H5O__ainfo_copy","H5O__ainfo_copy_file","H5O__ainfo_debug","H5O__ainfo_decode","H5O__ainfo_delete","H5O__ainfo_encode","H5O__ainfo_free","H5O__ainfo_post_copy_file","H5O__ainfo_pre_copy_file","H5O__ainfo_size","H5O__alloc","H5O__alloc_chunk","H5O__alloc_find_best_null","H5O__alloc_msgs","H5O__alloc_null","H5O__are_mdc_flushes_disabled","H5O__attr_bh_info","H5O__attr_copy","H5O__attr_count_real","H5O__attr_create","H5O__attr_delete","H5O__attr_dense_info_test","H5O__attr_exists","H5O__attr_exists_cb","H5O__attr_find_opened_attr","H5O__attr_free","H5O__attr_get_crt_index","H5O__attr_iterate","H5O__attr_link","H5O__attr_open_by_idx","H5O__attr_open_by_idx_cb","H5O__attr_open_by_name","H5O__attr_open_cb","H5O__attr_pre_copy_file","H5O__attr_remove","H5O__attr_remove_by_idx","H5O__attr_remove_cb","H5O__attr_remove_update","H5O__attr_rename","H5O__attr_rename_chk_cb","H5O__attr_rename_mod_cb","H5O__attr_reset","H5O__attr_set_crt_index","H5O__attr_shared_copy_file","H5O__attr_shared_debug","H5O__attr_shared_decode","H5O__attr_shared_delete","H5O__attr_shared_encode","H5O__attr_shared_link","H5O__attr_shared_post_copy_file","H5O__attr_shared_size","H5O__attr_to_dense_cb","H5O__attr_update_shared","H5O__attr_write","H5O__attr_write_cb","H5O__btreek_copy","H5O__btreek_debug","H5O__btreek_decode","H5O__btreek_encode","H5O__btreek_size","H5O__cache_chk_deserialize","H5O__cache_chk_free_icr","H5O__cache_chk_get_initial_load_size","H5O__cache_chk_image_len","H5O__cache_chk_notify","H5O__cache_chk_serialize","H5O__cache_chk_verify_chksum","H5O__cache_deserialize","H5O__cache_free_icr","H5O__cache_get_final_load_size","H5O__cache_get_initial_load_size","H5O__cache_image_len","H5O__cache_notify","H5O__cache_serialize","H5O__cache_verify_chksum","H5O__check_msg_marked_test","H5O__chunk_add","H5O__chunk_delete","H5O__chunk_deserialize","H5O__chunk_dest","H5O__chunk_protect","H5O__chunk_resize","H5O__chunk_serialize","H5O__chunk_unprotect","H5O__chunk_update_idx","H5O__condense_header","H5O__cont_debug","H5O__cont_decode","H5O__cont_delete","H5O__cont_encode","H5O__cont_free","H5O__cont_size","H5O__copy","H5O__copy_api_common","H5O__copy_comm_dt_cmp","H5O__copy_free_addrmap_cb","H5O__copy_free_comm_dt_cb","H5O__copy_header_real","H5O__copy_obj_by_ref","H5O__copy_search_comm_dt_attr_cb","H5O__copy_search_comm_dt_cb","H5O__copy_search_comm_dt_check","H5O__debug_real","H5O__dec_rc","H5O__delete_mesg","H5O__disable_mdc_flushes","H5O__drvinfo_copy","H5O__drvinfo_debug","H5O__drvinfo_decode","H5O__drvinfo_encode","H5O__drvinfo_reset","H5O__drvinfo_size","H5O__dset_bh_info","H5O__dset_create","H5O__dset_flush","H5O__dset_free_copy_file_udata","H5O__dset_get_copy_file_udata","H5O__dset_get_oloc","H5O__dset_isa","H5O__dset_open","H5O__dtype_can_share","H5O__dtype_copy","H5O__dtype_create","H5O__dtype_debug.isra.0","H5O__dtype_decode_helper","H5O__dtype_encode_helper","H5O__dtype_encode_helper.cold","H5O__dtype_free","H5O__dtype_get_oloc","H5O__dtype_isa","H5O__dtype_open","H5O__dtype_pre_copy_file","H5O__dtype_reset","H5O__dtype_set_share","H5O__dtype_shared_copy_file","H5O__dtype_shared_debug","H5O__dtype_shared_decode","H5O__dtype_shared_delete","H5O__dtype_shared_encode","H5O__dtype_shared_link","H5O__dtype_shared_post_copy_file","H5O__dtype_shared_size","H5O__dtype_size.isra.0","H5O__efl_copy","H5O__efl_copy_file","H5O__efl_debug","H5O__efl_decode","H5O__efl_encode","H5O__efl_reset","H5O__efl_size","H5O__eliminate_gap","H5O__enable_mdc_flushes","H5O__expunge_chunks_test","H5O__fill_copy","H5O__fill_debug.constprop.0","H5O__fill_free","H5O__fill_new_shared_copy_file","H5O__fill_new_shared_debug","H5O__fill_new_shared_decode","H5O__fill_new_shared_delete","H5O__fill_new_shared_encode","H5O__fill_new_shared_link","H5O__fill_new_shared_post_copy_file","H5O__fill_new_shared_size","H5O__fill_pre_copy_file","H5O__fill_reset","H5O__fill_shared_copy_file","H5O__fill_shared_debug","H5O__fill_shared_decode","H5O__fill_shared_delete","H5O__fill_shared_encode","H5O__fill_shared_link","H5O__fill_shared_post_copy_file","H5O__fill_shared_size","H5O__flush_msgs","H5O__free","H5O__free_visit_visited","H5O__fsinfo_copy","H5O__fsinfo_debug","H5O__fsinfo_decode","H5O__fsinfo_encode","H5O__fsinfo_free","H5O__fsinfo_size","H5O__get_hdr_info_real","H5O__get_info_old","H5O__get_rc_test","H5O__ginfo_copy","H5O__ginfo_debug","H5O__ginfo_decode","H5O__ginfo_encode","H5O__ginfo_free","H5O__ginfo_size","H5O__group_bh_info","H5O__group_create","H5O__group_free_copy_file_udata","H5O__group_get_copy_file_udata","H5O__group_get_oloc","H5O__group_isa","H5O__group_open","H5O__inc_rc","H5O__is_attr_dense_test","H5O__is_attr_empty_test","H5O__iterate1_adapter","H5O__layout_copy","H5O__layout_copy_file","H5O__layout_debug","H5O__layout_decode","H5O__layout_delete","H5O__layout_encode","H5O__layout_free","H5O__layout_pre_copy_file","H5O__layout_reset","H5O__layout_reset.part.0","H5O__layout_size","H5O__linfo_copy","H5O__linfo_copy.part.0","H5O__linfo_copy_file","H5O__linfo_debug","H5O__linfo_decode","H5O__linfo_delete","H5O__linfo_encode","H5O__linfo_free","H5O__linfo_post_copy_file","H5O__linfo_post_copy_file_cb","H5O__linfo_size","H5O__link_copy","H5O__link_copy_file","H5O__link_debug","H5O__link_decode","H5O__link_encode","H5O__link_free","H5O__link_oh","H5O__link_post_copy_file","H5O__link_pre_copy_file","H5O__link_reset","H5O__link_size","H5O__mdci_copy","H5O__mdci_debug","H5O__mdci_decode","H5O__mdci_delete","H5O__mdci_encode","H5O__mdci_free","H5O__mdci_size","H5O__msg_alloc","H5O__msg_append_real","H5O__msg_copy_file","H5O__msg_count_real","H5O__msg_free_mesg","H5O__msg_get_chunkno_test","H5O__msg_iterate_real","H5O__msg_move_to_new_chunk_test","H5O__msg_remove_cb","H5O__msg_remove_real","H5O__msg_write_real","H5O__mtime_copy","H5O__mtime_debug","H5O__mtime_decode","H5O__mtime_encode","H5O__mtime_free","H5O__mtime_new_decode","H5O__mtime_new_encode","H5O__mtime_new_size","H5O__mtime_size","H5O__name_copy","H5O__name_debug","H5O__name_decode","H5O__name_encode","H5O__name_reset","H5O__name_size","H5O__num_attrs_test","H5O__obj_class","H5O__obj_class_real","H5O__open_by_addr","H5O__open_by_idx","H5O__pline_copy","H5O__pline_free","H5O__pline_pre_copy_file","H5O__pline_reset","H5O__pline_shared_copy_file","H5O__pline_shared_debug","H5O__pline_shared_decode","H5O__pline_shared_delete","H5O__pline_shared_encode","H5O__pline_shared_link","H5O__pline_shared_post_copy_file","H5O__pline_shared_size","H5O__prefix_deserialize","H5O__refcount_copy","H5O__refcount_debug","H5O__refcount_decode","H5O__refcount_encode","H5O__refcount_free","H5O__refcount_pre_copy_file","H5O__refcount_size","H5O__release_mesg","H5O__remove_empty_chunks","H5O__sdspace_copy","H5O__sdspace_free","H5O__sdspace_pre_copy_file","H5O__sdspace_reset","H5O__sdspace_shared_copy_file","H5O__sdspace_shared_debug","H5O__sdspace_shared_decode","H5O__sdspace_shared_delete","H5O__sdspace_shared_encode","H5O__sdspace_shared_link","H5O__sdspace_shared_post_copy_file","H5O__sdspace_shared_size","H5O__shared_copy_file","H5O__shared_debug","H5O__shared_decode","H5O__shared_delete","H5O__shared_encode","H5O__shared_link","H5O__shared_post_copy_file","H5O__shared_size","H5O__shmesg_copy","H5O__shmesg_debug","H5O__shmesg_decode","H5O__shmesg_encode","H5O__shmesg_size","H5O__stab_copy","H5O__stab_copy_file","H5O__stab_debug","H5O__stab_decode","H5O__stab_delete","H5O__stab_encode","H5O__stab_free","H5O__stab_post_copy_file","H5O__stab_size","H5O__unknown_free","H5O__visit","H5O__visit_cb","H5O_apply_ohdr","H5O_attr_iterate_real","H5O_close","H5O_copy_expand_ref","H5O_copy_header_map","H5O_create","H5O_create_ohdr","H5O_debug","H5O_debug_id","H5O_dec_rc_by_loc","H5O_delete","H5O_efl_total_size","H5O_fill_convert","H5O_fill_reset_dyn","H5O_fill_set_version","H5O_flush","H5O_flush_common","H5O_fsinfo_check_version","H5O_fsinfo_set_version","H5O_get_create_plist","H5O_get_hdr_info","H5O_get_info","H5O_get_loc","H5O_get_native_info","H5O_get_nlinks","H5O_get_oh_addr","H5O_get_oh_flags","H5O_get_oh_mtime","H5O_get_oh_version","H5O_get_proxy","H5O_get_rc_and_type","H5O_has_chksum","H5O_init","H5O_link","H5O_link_delete","H5O_loc_copy","H5O_loc_copy_deep","H5O_loc_copy_shallow","H5O_loc_free","H5O_loc_hold_file","H5O_loc_reset","H5O_msg_append_oh","H5O_msg_can_share","H5O_msg_can_share_in_ohdr","H5O_msg_copy","H5O_msg_count","H5O_msg_create","H5O_msg_decode","H5O_msg_delete","H5O_msg_encode","H5O_msg_exists","H5O_msg_exists_oh","H5O_msg_flush","H5O_msg_free","H5O_msg_free_real","H5O_msg_get_crt_index","H5O_msg_get_flags","H5O_msg_is_shared","H5O_msg_iterate","H5O_msg_raw_size","H5O_msg_read","H5O_msg_read_oh","H5O_msg_remove","H5O_msg_remove_op","H5O_msg_reset","H5O_msg_reset_share","H5O_msg_set_share","H5O_msg_size_f","H5O_msg_size_oh","H5O_msg_write","H5O_msg_write_oh","H5O_obj_create","H5O_obj_type","H5O_open","H5O_open_by_loc","H5O_open_name","H5O_pin","H5O_pline_set_version","H5O_protect","H5O_refresh_metadata","H5O_refresh_metadata_reopen","H5O_set_shared","H5O_touch","H5O_touch_oh","H5O_unpin","H5O_unprotect","H5Oare_mdc_flushes_disabled","H5Oclose","H5Oclose_async","H5Ocopy","H5Ocopy_async","H5Odecr_refcount","H5Odisable_mdc_flushes","H5Oenable_mdc_flushes","H5Oexists_by_name","H5Oflush","H5Oflush_async","H5Oget_comment","H5Oget_comment_by_name","H5Oget_info1","H5Oget_info2","H5Oget_info3","H5Oget_info_by_idx1","H5Oget_info_by_idx2","H5Oget_info_by_idx3","H5Oget_info_by_name1","H5Oget_info_by_name2","H5Oget_info_by_name3","H5Oget_info_by_name_async","H5Oget_native_info","H5Oget_native_info_by_idx","H5Oget_native_info_by_name","H5Oincr_refcount","H5Olink","H5Oopen","H5Oopen_async","H5Oopen_by_addr","H5Oopen_by_idx","H5Oopen_by_idx_async","H5Oopen_by_token","H5Orefresh","H5Orefresh_async","H5Oset_comment","H5Oset_comment_by_name","H5Otoken_cmp","H5Otoken_from_str","H5Otoken_to_str","H5Ovisit1","H5Ovisit2","H5Ovisit3","H5Ovisit_by_name1","H5Ovisit_by_name2","H5Ovisit_by_name3","H5PB__dest_cb","H5PB__flush_cb","H5PB__make_space","H5PB_add_new_page","H5PB_create","H5PB_dest","H5PB_enabled","H5PB_flush","H5PB_get_stats","H5PB_print_stats","H5PB_read","H5PB_remove_entry","H5PB_reset_stats","H5PB_update_entry","H5PB_write","H5PL__add_plugin","H5PL__append_path","H5PL__close","H5PL__close_path_table","H5PL__close_plugin_cache","H5PL__create_path_table","H5PL__create_plugin_cache","H5PL__find_plugin_in_cache","H5PL__find_plugin_in_path_table","H5PL__get_num_paths","H5PL__get_path","H5PL__get_plugin_control_mask","H5PL__insert_at","H5PL__insert_path","H5PL__open","H5PL__path_table_iterate","H5PL__prepend_path","H5PL__remove_path","H5PL__replace_path","H5PL__set_plugin_control_mask","H5PL_init","H5PL_iterate","H5PL_load","H5PL_term_package","H5PLappend","H5PLget","H5PLget_loading_state","H5PLinsert","H5PLprepend","H5PLremove","H5PLreplace","H5PLset_loading_state","H5PLsize","H5P__access_class","H5P__access_class.localalias","H5P__add_prop","H5P__class_get","H5P__class_set","H5P__close_class","H5P__close_class_cb","H5P__close_list_cb","H5P__cmp_class","H5P__cmp_plist","H5P__cmp_plist_cb","H5P__cmp_prop.part.0","H5P__copy_merge_comm_dt_list","H5P__copy_pclass","H5P__copy_prop_pclass","H5P__copy_prop_plist","H5P__create_class","H5P__create_prop","H5P__dacc_reg_prop","H5P__dacc_vds_view_dec","H5P__dacc_vds_view_enc","H5P__dapl_efile_pref_close","H5P__dapl_efile_pref_cmp","H5P__dapl_efile_pref_copy","H5P__dapl_efile_pref_dec","H5P__dapl_efile_pref_del","H5P__dapl_efile_pref_enc","H5P__dapl_efile_pref_get","H5P__dapl_efile_pref_set","H5P__dapl_vds_file_pref_close","H5P__dapl_vds_file_pref_cmp","H5P__dapl_vds_file_pref_copy","H5P__dapl_vds_file_pref_dec","H5P__dapl_vds_file_pref_del","H5P__dapl_vds_file_pref_enc","H5P__dapl_vds_file_pref_get","H5P__dapl_vds_file_pref_set","H5P__dcrt_ext_file_list_close","H5P__dcrt_ext_file_list_cmp","H5P__dcrt_ext_file_list_copy","H5P__dcrt_ext_file_list_dec","H5P__dcrt_ext_file_list_del","H5P__dcrt_ext_file_list_enc","H5P__dcrt_ext_file_list_get","H5P__dcrt_ext_file_list_set","H5P__dcrt_fill_value_close","H5P__dcrt_fill_value_copy","H5P__dcrt_fill_value_dec","H5P__dcrt_fill_value_del","H5P__dcrt_fill_value_enc","H5P__dcrt_fill_value_get","H5P__dcrt_fill_value_set","H5P__dcrt_layout_close","H5P__dcrt_layout_cmp","H5P__dcrt_layout_copy","H5P__dcrt_layout_dec","H5P__dcrt_layout_del","H5P__dcrt_layout_enc","H5P__dcrt_layout_get","H5P__dcrt_layout_set","H5P__dcrt_reg_prop","H5P__decode","H5P__decode_bool","H5P__decode_chunk_cache_nbytes","H5P__decode_chunk_cache_nslots","H5P__decode_coll_md_read_flag_t","H5P__decode_double","H5P__decode_hsize_t","H5P__decode_size_t","H5P__decode_uint64_t","H5P__decode_uint8_t","H5P__decode_unsigned","H5P__do_prop_cb1","H5P__dup_prop","H5P__dxfr_bkgr_buf_type_dec","H5P__dxfr_bkgr_buf_type_enc","H5P__dxfr_btree_split_ratio_dec","H5P__dxfr_btree_split_ratio_enc","H5P__dxfr_dset_io_hyp_sel_close","H5P__dxfr_dset_io_hyp_sel_cmp","H5P__dxfr_dset_io_hyp_sel_copy","H5P__dxfr_edc_dec","H5P__dxfr_edc_enc","H5P__dxfr_io_xfer_mode_dec","H5P__dxfr_io_xfer_mode_enc","H5P__dxfr_modify_write_buf_dec","H5P__dxfr_modify_write_buf_enc","H5P__dxfr_mpio_chunk_opt_hard_dec","H5P__dxfr_mpio_chunk_opt_hard_enc","H5P__dxfr_mpio_collective_opt_dec","H5P__dxfr_mpio_collective_opt_enc","H5P__dxfr_reg_prop","H5P__dxfr_selection_io_mode_dec","H5P__dxfr_selection_io_mode_enc","H5P__dxfr_xform_close","H5P__dxfr_xform_cmp","H5P__dxfr_xform_copy","H5P__dxfr_xform_dec","H5P__dxfr_xform_del","H5P__dxfr_xform_enc","H5P__dxfr_xform_get","H5P__dxfr_xform_set","H5P__encode","H5P__encode_bool","H5P__encode_cb","H5P__encode_chunk_cache_nbytes","H5P__encode_chunk_cache_nslots","H5P__encode_coll_md_read_flag_t","H5P__encode_double","H5P__encode_hsize_t","H5P__encode_size_t","H5P__encode_uint64_t","H5P__encode_uint8_t","H5P__encode_unsigned","H5P__exist_pclass","H5P__facc_cache_config_cmp","H5P__facc_cache_config_dec","H5P__facc_cache_config_enc","H5P__facc_cache_image_config_cmp","H5P__facc_cache_image_config_dec","H5P__facc_cache_image_config_enc","H5P__facc_fclose_degree_dec","H5P__facc_fclose_degree_enc","H5P__facc_file_driver_close","H5P__facc_file_driver_cmp","H5P__facc_file_driver_copy","H5P__facc_file_driver_create","H5P__facc_file_driver_del","H5P__facc_file_driver_get","H5P__facc_file_driver_set","H5P__facc_file_image_info_close","H5P__facc_file_image_info_cmp","H5P__facc_file_image_info_copy","H5P__facc_file_image_info_del","H5P__facc_file_image_info_get","H5P__facc_file_image_info_set","H5P__facc_libver_type_dec","H5P__facc_libver_type_enc","H5P__facc_mdc_log_location_close","H5P__facc_mdc_log_location_cmp","H5P__facc_mdc_log_location_copy","H5P__facc_mdc_log_location_dec","H5P__facc_mdc_log_location_del","H5P__facc_mdc_log_location_enc","H5P__facc_mpi_comm_close","H5P__facc_mpi_comm_cmp","H5P__facc_mpi_comm_copy","H5P__facc_mpi_comm_del","H5P__facc_mpi_comm_get","H5P__facc_mpi_comm_set","H5P__facc_mpi_info_close","H5P__facc_mpi_info_cmp","H5P__facc_mpi_info_copy","H5P__facc_mpi_info_del","H5P__facc_mpi_info_get","H5P__facc_mpi_info_set","H5P__facc_multi_type_dec","H5P__facc_multi_type_enc","H5P__facc_reg_prop","H5P__facc_set_def_driver","H5P__facc_vol_close","H5P__facc_vol_cmp","H5P__facc_vol_copy","H5P__facc_vol_create","H5P__facc_vol_del","H5P__facc_vol_get","H5P__facc_vol_set","H5P__fcrt_btree_rank_dec","H5P__fcrt_btree_rank_enc","H5P__fcrt_fspace_strategy_dec","H5P__fcrt_fspace_strategy_enc","H5P__fcrt_reg_prop","H5P__fcrt_shmsg_index_minsize_dec","H5P__fcrt_shmsg_index_minsize_enc","H5P__fcrt_shmsg_index_types_dec","H5P__fcrt_shmsg_index_types_enc","H5P__find_prop_plist","H5P__fmnt_reg_prop","H5P__free_del_name_cb","H5P__free_prop_cb","H5P__gcrt_group_info_dec","H5P__gcrt_group_info_enc","H5P__gcrt_link_info_dec","H5P__gcrt_link_info_enc","H5P__gcrt_reg_prop","H5P__get_cb","H5P__get_class_parent","H5P__get_class_path","H5P__get_class_path.localalias","H5P__get_class_path_test","H5P__get_filter","H5P__get_nprops_plist","H5P__get_size_pclass","H5P__get_size_plist","H5P__iterate_cb","H5P__iterate_pclass","H5P__iterate_pclass_cb","H5P__iterate_plist","H5P__iterate_plist_cb","H5P__iterate_plist_pclass_cb","H5P__lacc_elink_fapl_close","H5P__lacc_elink_fapl_cmp","H5P__lacc_elink_fapl_copy","H5P__lacc_elink_fapl_dec","H5P__lacc_elink_fapl_del","H5P__lacc_elink_fapl_enc","H5P__lacc_elink_fapl_get","H5P__lacc_elink_fapl_set","H5P__lacc_elink_pref_close","H5P__lacc_elink_pref_cmp","H5P__lacc_elink_pref_copy","H5P__lacc_elink_pref_dec","H5P__lacc_elink_pref_del","H5P__lacc_elink_pref_enc","H5P__lacc_elink_pref_get","H5P__lacc_elink_pref_set","H5P__lacc_reg_prop","H5P__lcrt_reg_prop","H5P__macc_reg_prop","H5P__mcrt_reg_prop","H5P__new_plist_of_type","H5P__ocpy_merge_comm_dt_list_close","H5P__ocpy_merge_comm_dt_list_cmp","H5P__ocpy_merge_comm_dt_list_copy","H5P__ocpy_merge_comm_dt_list_dec","H5P__ocpy_merge_comm_dt_list_del","H5P__ocpy_merge_comm_dt_list_enc","H5P__ocpy_merge_comm_dt_list_enc.cold","H5P__ocpy_merge_comm_dt_list_get","H5P__ocpy_merge_comm_dt_list_set","H5P__ocpy_reg_prop","H5P__ocrt_pipeline_close","H5P__ocrt_pipeline_cmp","H5P__ocrt_pipeline_copy","H5P__ocrt_pipeline_dec","H5P__ocrt_pipeline_del","H5P__ocrt_pipeline_enc","H5P__ocrt_pipeline_get","H5P__ocrt_pipeline_set","H5P__ocrt_reg_prop","H5P__open_class_path","H5P__open_class_path_cb","H5P__open_class_path_test","H5P__register","H5P__register_real","H5P__set_layout","H5P__strcrt_char_encoding_dec","H5P__strcrt_char_encoding_enc","H5P__strcrt_reg_prop","H5P__unregister","H5P_class_isa","H5P_close","H5P_copy_plist","H5P_create_id","H5P_exist_plist","H5P_fill_value_cmp","H5P_fill_value_defined","H5P_filter_in_pline","H5P_get","H5P_get_class","H5P_get_class_name","H5P_get_fill_value","H5P_get_filter_by_id","H5P_get_nprops_pclass","H5P_get_plist_id","H5P_ignore_cmp","H5P_init_phase1","H5P_init_phase2","H5P_insert","H5P_is_fill_value_defined","H5P_isa_class","H5P_modify_filter","H5P_object_verify","H5P_peek","H5P_peek_driver","H5P_peek_driver_config_str","H5P_peek_driver_info","H5P_poke","H5P_remove","H5P_reset_vol_class","H5P_set","H5P_set_driver","H5P_set_driver_by_name","H5P_set_driver_by_value","H5P_set_vlen_mem_manager","H5P_set_vol","H5P_term_package","H5Padd_merge_committed_dtype_path","H5Pall_filters_avail","H5Pclose","H5Pclose_class","H5Pcopy","H5Pcopy_prop","H5Pcreate","H5Pcreate_class","H5Pdecode","H5Pencode1","H5Pencode2","H5Pequal","H5Pexist","H5Pfill_value_defined","H5Pfree_merge_committed_dtype_paths","H5Pget","H5Pget_actual_selection_io_mode","H5Pget_alignment","H5Pget_all_coll_metadata_ops","H5Pget_alloc_time","H5Pget_append_flush","H5Pget_attr_creation_order","H5Pget_attr_phase_change","H5Pget_btree_ratios","H5Pget_buffer","H5Pget_cache","H5Pget_char_encoding","H5Pget_chunk","H5Pget_chunk_cache","H5Pget_chunk_opts","H5Pget_class","H5Pget_class_name","H5Pget_class_parent","H5Pget_coll_metadata_write","H5Pget_copy_object","H5Pget_core_write_tracking","H5Pget_create_intermediate_group","H5Pget_data_transform","H5Pget_driver","H5Pget_driver_config_str","H5Pget_driver_info","H5Pget_dset_no_attrs_hint","H5Pget_dxpl_mpio","H5Pget_edc_check","H5Pget_efile_prefix","H5Pget_elink_acc_flags","H5Pget_elink_cb","H5Pget_elink_fapl","H5Pget_elink_file_cache_size","H5Pget_elink_prefix","H5Pget_est_link_info","H5Pget_evict_on_close","H5Pget_external","H5Pget_external_count","H5Pget_family_offset","H5Pget_fapl_core","H5Pget_fapl_family","H5Pget_fapl_mpio","H5Pget_fapl_multi","H5Pget_fapl_onion","H5Pget_fapl_splitter","H5Pget_fclose_degree","H5Pget_file_image","H5Pget_file_image_callbacks","H5Pget_file_locking","H5Pget_file_space","H5Pget_file_space_page_size","H5Pget_file_space_strategy","H5Pget_fill_time","H5Pget_fill_value","H5Pget_filter1","H5Pget_filter2","H5Pget_filter_by_id1","H5Pget_filter_by_id2","H5Pget_gc_references","H5Pget_hyper_vector_size","H5Pget_istore_k","H5Pget_layout","H5Pget_libver_bounds","H5Pget_link_creation_order","H5Pget_link_phase_change","H5Pget_local_heap_size_hint","H5Pget_mcdt_search_cb","H5Pget_mdc_config","H5Pget_mdc_image_config","H5Pget_mdc_log_options","H5Pget_meta_block_size","H5Pget_metadata_read_attempts","H5Pget_modify_write_buf","H5Pget_mpi_params","H5Pget_mpio_actual_chunk_opt_mode","H5Pget_mpio_actual_io_mode","H5Pget_mpio_no_collective_cause","H5Pget_multi_type","H5Pget_nfilters","H5Pget_nlinks","H5Pget_no_selection_io_cause","H5Pget_nprops","H5Pget_obj_track_times","H5Pget_object_flush_cb","H5Pget_page_buffer_size","H5Pget_preserve","H5Pget_relax_file_integrity_checks","H5Pget_selection_io","H5Pget_shared_mesg_index","H5Pget_shared_mesg_nindexes","H5Pget_shared_mesg_phase_change","H5Pget_sieve_buf_size","H5Pget_size","H5Pget_sizes","H5Pget_small_data_block_size","H5Pget_sym_k","H5Pget_type_conv_cb","H5Pget_userblock","H5Pget_version","H5Pget_virtual_count","H5Pget_virtual_dsetname","H5Pget_virtual_filename","H5Pget_virtual_prefix","H5Pget_virtual_printf_gap","H5Pget_virtual_srcspace","H5Pget_virtual_view","H5Pget_virtual_vspace","H5Pget_vlen_mem_manager","H5Pget_vol_cap_flags","H5Pget_vol_id","H5Pget_vol_info","H5Pinsert1","H5Pinsert2","H5Pisa_class","H5Piterate","H5Pmodify_filter","H5Pregister1","H5Pregister2","H5Premove","H5Premove_filter","H5Pset","H5Pset_alignment","H5Pset_all_coll_metadata_ops","H5Pset_alloc_time","H5Pset_append_flush","H5Pset_attr_creation_order","H5Pset_attr_phase_change","H5Pset_btree_ratios","H5Pset_buffer","H5Pset_cache","H5Pset_char_encoding","H5Pset_chunk","H5Pset_chunk_cache","H5Pset_chunk_opts","H5Pset_coll_metadata_write","H5Pset_copy_object","H5Pset_core_write_tracking","H5Pset_create_intermediate_group","H5Pset_data_transform","H5Pset_dataset_io_hyperslab_selection","H5Pset_deflate","H5Pset_driver","H5Pset_driver_by_name","H5Pset_driver_by_value","H5Pset_dset_no_attrs_hint","H5Pset_dxpl_mpio","H5Pset_dxpl_mpio_chunk_opt","H5Pset_dxpl_mpio_chunk_opt_num","H5Pset_dxpl_mpio_chunk_opt_ratio","H5Pset_dxpl_mpio_collective_opt","H5Pset_edc_check","H5Pset_efile_prefix","H5Pset_elink_acc_flags","H5Pset_elink_cb","H5Pset_elink_fapl","H5Pset_elink_file_cache_size","H5Pset_elink_prefix","H5Pset_est_link_info","H5Pset_evict_on_close","H5Pset_external","H5Pset_family_offset","H5Pset_fapl_core","H5Pset_fapl_family","H5Pset_fapl_log","H5Pset_fapl_mpio","H5Pset_fapl_multi","H5Pset_fapl_onion","H5Pset_fapl_sec2","H5Pset_fapl_split","H5Pset_fapl_splitter","H5Pset_fapl_stdio","H5Pset_fclose_degree","H5Pset_file_image","H5Pset_file_image_callbacks","H5Pset_file_locking","H5Pset_file_space","H5Pset_file_space_page_size","H5Pset_file_space_strategy","H5Pset_fill_time","H5Pset_fill_value","H5Pset_filter","H5Pset_filter_callback","H5Pset_fletcher32","H5Pset_gc_references","H5Pset_hyper_vector_size","H5Pset_istore_k","H5Pset_layout","H5Pset_libver_bounds","H5Pset_link_creation_order","H5Pset_link_phase_change","H5Pset_local_heap_size_hint","H5Pset_mcdt_search_cb","H5Pset_mdc_config","H5Pset_mdc_image_config","H5Pset_mdc_log_options","H5Pset_meta_block_size","H5Pset_metadata_read_attempts","H5Pset_modify_write_buf","H5Pset_mpi_params","H5Pset_multi_type","H5Pset_nbit","H5Pset_nlinks","H5Pset_obj_track_times","H5Pset_object_flush_cb","H5Pset_page_buffer_size","H5Pset_preserve","H5Pset_relax_file_integrity_checks","H5Pset_scaleoffset","H5Pset_selection_io","H5Pset_shared_mesg_index","H5Pset_shared_mesg_nindexes","H5Pset_shared_mesg_phase_change","H5Pset_shuffle","H5Pset_sieve_buf_size","H5Pset_sizes","H5Pset_small_data_block_size","H5Pset_sym_k","H5Pset_szip","H5Pset_type_conv_cb","H5Pset_userblock","H5Pset_virtual","H5Pset_virtual_prefix","H5Pset_virtual_printf_gap","H5Pset_virtual_view","H5Pset_vlen_mem_manager","H5Pset_vol","H5Punregister","H5RS__prepare_for_append","H5RS__resize_for_append.part.0","H5RS_acat","H5RS_ancat","H5RS_aputc","H5RS_asprintf_cat","H5RS_cmp","H5RS_create","H5RS_decr","H5RS_dup","H5RS_get_count","H5RS_get_str","H5RS_incr","H5RS_len","H5RS_wrap","H5R__copy","H5R__create_attr","H5R__create_object","H5R__create_region","H5R__decode","H5R__decode_heap","H5R__decode_string","H5R__decode_token_compat","H5R__decode_token_obj_compat","H5R__decode_token_region_compat","H5R__destroy","H5R__encode","H5R__encode_heap","H5R__encode_token_obj_compat","H5R__equal","H5R__get_attr_name","H5R__get_file_name","H5R__get_loc_id","H5R__get_obj_token","H5R__get_region","H5R__get_type","H5R__open_attr_api_common","H5R__open_object_api_common","H5R__open_region_api_common","H5R__reopen_file","H5R__set_loc_id","H5R__set_obj_token","H5R_init","H5Rcopy","H5Rcreate","H5Rcreate_attr","H5Rcreate_object","H5Rcreate_region","H5Rdereference1","H5Rdereference2","H5Rdestroy","H5Requal","H5Rget_attr_name","H5Rget_file_name","H5Rget_name","H5Rget_obj_name","H5Rget_obj_type1","H5Rget_obj_type2","H5Rget_obj_type3","H5Rget_region","H5Rget_type","H5Ropen_attr","H5Ropen_attr_async","H5Ropen_object","H5Ropen_object_async","H5Ropen_region","H5Ropen_region_async","H5SL__insert_common","H5SL__insert_common.cold","H5SL__release_common","H5SL_below","H5SL_close","H5SL_count","H5SL_create","H5SL_destroy","H5SL_find","H5SL_find.cold","H5SL_first","H5SL_free","H5SL_greater","H5SL_init","H5SL_insert","H5SL_item","H5SL_iterate","H5SL_last","H5SL_less","H5SL_next","H5SL_prev","H5SL_release","H5SL_remove","H5SL_remove.cold","H5SL_remove_first","H5SL_search","H5SL_search.cold","H5SL_term_package","H5SM__bt2_convert_to_list_op","H5SM__bt2_crt_context","H5SM__bt2_debug","H5SM__bt2_dst_context","H5SM__bt2_store","H5SM__cache_list_deserialize","H5SM__cache_list_free_icr","H5SM__cache_list_get_initial_load_size","H5SM__cache_list_image_len","H5SM__cache_list_serialize","H5SM__cache_list_verify_chksum","H5SM__cache_table_deserialize","H5SM__cache_table_free_icr","H5SM__cache_table_get_initial_load_size","H5SM__cache_table_image_len","H5SM__cache_table_serialize","H5SM__cache_table_verify_chksum","H5SM__compare_cb","H5SM__compare_iter_op","H5SM__create_list","H5SM__decr_ref","H5SM__delete_index","H5SM__get_index","H5SM__get_mesg_count_test","H5SM__get_refcount_bt2_cb","H5SM__incr_ref","H5SM__list_free","H5SM__message_compare","H5SM__message_decode","H5SM__message_encode","H5SM__read_iter_op","H5SM__read_mesg","H5SM__read_mesg_fh_cb","H5SM__table_free","H5SM_can_share","H5SM_delete","H5SM_get_fheap_addr","H5SM_get_info","H5SM_get_refcount","H5SM_ih_size","H5SM_init","H5SM_list_debug","H5SM_reconstitute","H5SM_table_debug","H5SM_try_share","H5SM_type_shared","H5S__all_adjust_s","H5S__all_adjust_u","H5S__all_bounds","H5S__all_copy","H5S__all_deserialize","H5S__all_intersect_block","H5S__all_is_contiguous","H5S__all_is_regular","H5S__all_is_single","H5S__all_is_valid","H5S__all_iter_block","H5S__all_iter_coords","H5S__all_iter_get_seq_list","H5S__all_iter_has_next_block","H5S__all_iter_init","H5S__all_iter_nelmts","H5S__all_iter_next","H5S__all_iter_next_block","H5S__all_iter_release","H5S__all_offset","H5S__all_project_scalar","H5S__all_project_simple","H5S__all_release","H5S__all_serial_size","H5S__all_serialize","H5S__all_shape_same","H5S__all_unlim_dim","H5S__check_internal_consistency","H5S__check_spans_overlap","H5S__check_spans_tail_ptr","H5S__close_cb","H5S__combine_select","H5S__copy_pnt_list","H5S__extent_copy_real","H5S__extent_release","H5S__fill_in_new_space","H5S__fill_in_select","H5S__generate_hyperslab","H5S__get_diminfo_status_test","H5S__get_rebuild_status_test","H5S__get_select_hyper_blocklist","H5S__hyper_add_disjoint_spans","H5S__hyper_add_span_element_helper.constprop.0","H5S__hyper_adjust_s","H5S__hyper_adjust_s_helper.constprop.0","H5S__hyper_adjust_u","H5S__hyper_adjust_u_helper.constprop.0","H5S__hyper_append_span","H5S__hyper_append_span.constprop.0","H5S__hyper_bounds","H5S__hyper_clip_spans.constprop.0","H5S__hyper_cmp_spans.part.0","H5S__hyper_coord_to_span","H5S__hyper_copy","H5S__hyper_copy_span_helper.part.0","H5S__hyper_deserialize","H5S__hyper_free_span_info","H5S__hyper_generate_spans","H5S__hyper_get_op_gen","H5S__hyper_get_version_enc_size","H5S__hyper_intersect_block","H5S__hyper_intersect_block_helper.constprop.0","H5S__hyper_is_contiguous","H5S__hyper_is_regular","H5S__hyper_is_single","H5S__hyper_is_valid","H5S__hyper_iter_block","H5S__hyper_iter_coords","H5S__hyper_iter_get_seq_list","H5S__hyper_iter_get_seq_list_opt","H5S__hyper_iter_get_seq_list_single","H5S__hyper_iter_has_next_block","H5S__hyper_iter_init","H5S__hyper_iter_nelmts","H5S__hyper_iter_next","H5S__hyper_iter_next_block","H5S__hyper_iter_release","H5S__hyper_make_spans","H5S__hyper_merge_spans_helper","H5S__hyper_new_span.part.0","H5S__hyper_new_span_info.part.0","H5S__hyper_num_elem_non_unlim","H5S__hyper_offset","H5S__hyper_proj_int_build_proj","H5S__hyper_proj_int_iterate","H5S__hyper_project_intersection","H5S__hyper_project_scalar","H5S__hyper_project_simple","H5S__hyper_rebuild","H5S__hyper_rebuild_helper","H5S__hyper_release","H5S__hyper_serial_size","H5S__hyper_serialize","H5S__hyper_serialize_helper","H5S__hyper_shape_same","H5S__hyper_span_blocklist","H5S__hyper_span_nblocks_helper.constprop.0","H5S__hyper_spans_nelem_helper.part.0.constprop.0","H5S__hyper_spans_shape_same","H5S__hyper_spans_shape_same_helper","H5S__hyper_unlim_dim","H5S__hyper_update_diminfo","H5S__internal_consistency_test","H5S__modify_select","H5S__mpio_create_point_datatype","H5S__mpio_reg_hyper_type","H5S__mpio_span_hyper_type","H5S__none_adjust_s","H5S__none_adjust_u","H5S__none_bounds","H5S__none_copy","H5S__none_deserialize","H5S__none_intersect_block","H5S__none_is_contiguous","H5S__none_is_regular","H5S__none_is_single","H5S__none_is_valid","H5S__none_iter_block","H5S__none_iter_coords","H5S__none_iter_get_seq_list","H5S__none_iter_has_next_block","H5S__none_iter_init","H5S__none_iter_nelmts","H5S__none_iter_next","H5S__none_iter_next_block","H5S__none_iter_release","H5S__none_offset","H5S__none_project_scalar","H5S__none_project_simple","H5S__none_release","H5S__none_serial_size","H5S__none_serialize","H5S__none_shape_same","H5S__none_unlim_dim","H5S__obtain_datatype.constprop.0","H5S__point_adjust_s","H5S__point_adjust_u","H5S__point_bounds","H5S__point_copy","H5S__point_deserialize","H5S__point_get_version_enc_size","H5S__point_intersect_block","H5S__point_is_contiguous","H5S__point_is_regular","H5S__point_is_single","H5S__point_is_valid","H5S__point_iter_block","H5S__point_iter_coords","H5S__point_iter_get_seq_list","H5S__point_iter_has_next_block","H5S__point_iter_init","H5S__point_iter_nelmts","H5S__point_iter_next","H5S__point_iter_next_block","H5S__point_iter_release","H5S__point_offset","H5S__point_project_scalar","H5S__point_project_simple","H5S__point_release","H5S__point_serial_size","H5S__point_serialize","H5S__point_shape_same","H5S__point_unlim_dim","H5S__sel_iter_close_cb","H5S__set_regular_hyperslab","H5S__verify_offsets","H5S_append","H5S_close","H5S_combine_hyperslab","H5S_copy","H5S_create","H5S_create_simple","H5S_debug","H5S_decode","H5S_encode","H5S_extent_copy","H5S_extent_equal","H5S_extent_get_dims","H5S_extent_nelem","H5S_get_npoints_max","H5S_get_select_bounds","H5S_get_select_npoints","H5S_get_select_num_elem_non_unlim","H5S_get_select_offset","H5S_get_select_type","H5S_get_select_unlim_dim","H5S_get_simple_extent","H5S_get_simple_extent_dims","H5S_get_simple_extent_ndims","H5S_get_simple_extent_npoints","H5S_get_simple_extent_type","H5S_has_extent","H5S_hyper_add_span_element","H5S_hyper_clip_unlim","H5S_hyper_denormalize_offset","H5S_hyper_get_clip_extent","H5S_hyper_get_clip_extent_match","H5S_hyper_get_first_inc_block","H5S_hyper_get_unlim_block","H5S_hyper_normalize_offset","H5S_init","H5S_mpio_space_type","H5S_read","H5S_sel_iter_close","H5S_select_adjust_s","H5S_select_adjust_u","H5S_select_all","H5S_select_construct_projection","H5S_select_contig_block","H5S_select_copy","H5S_select_deserialize","H5S_select_elements","H5S_select_fill","H5S_select_hyperslab","H5S_select_hyperslab.localalias","H5S_select_intersect_block","H5S_select_is_contiguous","H5S_select_is_regular","H5S_select_is_single","H5S_select_iter_coords","H5S_select_iter_get_seq_list","H5S_select_iter_init","H5S_select_iter_nelmts","H5S_select_iter_next","H5S_select_iter_release","H5S_select_iterate","H5S_select_none","H5S_select_offset","H5S_select_project_intersection","H5S_select_project_scalar","H5S_select_project_simple","H5S_select_release","H5S_select_serial_size","H5S_select_serialize","H5S_select_shape_same","H5S_select_subtract","H5S_select_valid","H5S_set_extent","H5S_set_extent_real","H5S_set_extent_simple","H5S_set_version","H5S_term_package","H5S_top_term_package","H5S_write","H5Sclose","H5Scombine_hyperslab","H5Scombine_select","H5Scopy","H5Screate","H5Screate_simple","H5Sdecode","H5Sencode1","H5Sencode2","H5Sextent_copy","H5Sextent_equal","H5Sget_regular_hyperslab","H5Sget_select_bounds","H5Sget_select_elem_npoints","H5Sget_select_elem_pointlist","H5Sget_select_hyper_blocklist","H5Sget_select_hyper_nblocks","H5Sget_select_npoints","H5Sget_select_type","H5Sget_simple_extent_dims","H5Sget_simple_extent_ndims","H5Sget_simple_extent_npoints","H5Sget_simple_extent_type","H5Sis_regular_hyperslab","H5Sis_simple","H5Smodify_select","H5Soffset_simple","H5Ssel_iter_close","H5Ssel_iter_create","H5Ssel_iter_get_seq_list","H5Ssel_iter_reset","H5Sselect_adjust","H5Sselect_all","H5Sselect_copy","H5Sselect_elements","H5Sselect_hyperslab","H5Sselect_intersect_block","H5Sselect_none","H5Sselect_project_intersection","H5Sselect_shape_same","H5Sselect_valid","H5Sset_extent_none","H5Sset_extent_simple","H5T__alloc","H5T__array_create","H5T__bit_cmp.constprop.0","H5T__bit_copy","H5T__bit_dec","H5T__bit_find","H5T__bit_get_d","H5T__bit_inc","H5T__bit_neg","H5T__bit_set","H5T__bit_set_d","H5T__bit_shift","H5T__close_cb","H5T__commit","H5T__commit_anon","H5T__commit_api_common","H5T__commit_named","H5T__complete_copy","H5T__conv_array","H5T__conv_b_b","H5T__conv_double_float","H5T__conv_double_int","H5T__conv_double_ldouble","H5T__conv_double_ldouble.cold","H5T__conv_double_llong","H5T__conv_double_long","H5T__conv_double_schar","H5T__conv_double_short","H5T__conv_double_uchar","H5T__conv_double_uint","H5T__conv_double_ullong","H5T__conv_double_ulong","H5T__conv_double_ushort","H5T__conv_enum","H5T__conv_enum_free.part.0","H5T__conv_enum_init","H5T__conv_enum_numeric","H5T__conv_f_f","H5T__conv_f_i","H5T__conv_float_double","H5T__conv_float_double.cold","H5T__conv_float_int","H5T__conv_float_ldouble","H5T__conv_float_ldouble.cold","H5T__conv_float_llong","H5T__conv_float_long","H5T__conv_float_schar","H5T__conv_float_short","H5T__conv_float_uchar","H5T__conv_float_uint","H5T__conv_float_ullong","H5T__conv_float_ulong","H5T__conv_float_ushort","H5T__conv_i_f","H5T__conv_i_i","H5T__conv_int_double","H5T__conv_int_float","H5T__conv_int_ldouble","H5T__conv_int_llong","H5T__conv_int_llong.cold","H5T__conv_int_long","H5T__conv_int_long.cold","H5T__conv_int_schar","H5T__conv_int_short","H5T__conv_int_uchar","H5T__conv_int_uint","H5T__conv_int_ullong","H5T__conv_int_ulong","H5T__conv_int_ushort","H5T__conv_ldouble_double","H5T__conv_ldouble_float","H5T__conv_ldouble_int","H5T__conv_ldouble_llong","H5T__conv_ldouble_long","H5T__conv_ldouble_schar","H5T__conv_ldouble_short","H5T__conv_ldouble_uchar","H5T__conv_ldouble_uint","H5T__conv_ldouble_ullong","H5T__conv_ldouble_ulong","H5T__conv_ldouble_ushort","H5T__conv_llong_double","H5T__conv_llong_float","H5T__conv_llong_int","H5T__conv_llong_ldouble","H5T__conv_llong_long","H5T__conv_llong_schar","H5T__conv_llong_short","H5T__conv_llong_uchar","H5T__conv_llong_uint","H5T__conv_llong_ullong","H5T__conv_llong_ulong","H5T__conv_llong_ushort","H5T__conv_long_double","H5T__conv_long_float","H5T__conv_long_int","H5T__conv_long_ldouble","H5T__conv_long_llong","H5T__conv_long_schar","H5T__conv_long_short","H5T__conv_long_uchar","H5T__conv_long_uint","H5T__conv_long_ullong","H5T__conv_long_ulong","H5T__conv_long_ushort","H5T__conv_noop","H5T__conv_order","H5T__conv_order_opt","H5T__conv_ref","H5T__conv_s_s","H5T__conv_schar_double","H5T__conv_schar_float","H5T__conv_schar_int","H5T__conv_schar_int.cold","H5T__conv_schar_ldouble","H5T__conv_schar_llong","H5T__conv_schar_llong.cold","H5T__conv_schar_long","H5T__conv_schar_long.cold","H5T__conv_schar_short","H5T__conv_schar_short.cold","H5T__conv_schar_uchar","H5T__conv_schar_uint","H5T__conv_schar_ullong","H5T__conv_schar_ulong","H5T__conv_schar_ushort","H5T__conv_short_double","H5T__conv_short_float","H5T__conv_short_int","H5T__conv_short_int.cold","H5T__conv_short_ldouble","H5T__conv_short_llong","H5T__conv_short_llong.cold","H5T__conv_short_long","H5T__conv_short_long.cold","H5T__conv_short_schar","H5T__conv_short_uchar","H5T__conv_short_uint","H5T__conv_short_ullong","H5T__conv_short_ulong","H5T__conv_short_ushort","H5T__conv_struct","H5T__conv_struct_free","H5T__conv_struct_init","H5T__conv_struct_opt","H5T__conv_struct_subset","H5T__conv_uchar_double","H5T__conv_uchar_float","H5T__conv_uchar_int","H5T__conv_uchar_int.cold","H5T__conv_uchar_ldouble","H5T__conv_uchar_llong","H5T__conv_uchar_llong.cold","H5T__conv_uchar_long","H5T__conv_uchar_long.cold","H5T__conv_uchar_schar","H5T__conv_uchar_short","H5T__conv_uchar_short.cold","H5T__conv_uchar_uint","H5T__conv_uchar_uint.cold","H5T__conv_uchar_ullong","H5T__conv_uchar_ullong.cold","H5T__conv_uchar_ulong","H5T__conv_uchar_ulong.cold","H5T__conv_uchar_ushort","H5T__conv_uchar_ushort.cold","H5T__conv_uint_double","H5T__conv_uint_float","H5T__conv_uint_int","H5T__conv_uint_ldouble","H5T__conv_uint_llong","H5T__conv_uint_llong.cold","H5T__conv_uint_long","H5T__conv_uint_long.cold","H5T__conv_uint_schar","H5T__conv_uint_short","H5T__conv_uint_uchar","H5T__conv_uint_ullong","H5T__conv_uint_ullong.cold","H5T__conv_uint_ulong","H5T__conv_uint_ulong.cold","H5T__conv_uint_ushort","H5T__conv_ullong_double","H5T__conv_ullong_float","H5T__conv_ullong_int","H5T__conv_ullong_ldouble","H5T__conv_ullong_llong","H5T__conv_ullong_long","H5T__conv_ullong_schar","H5T__conv_ullong_short","H5T__conv_ullong_uchar","H5T__conv_ullong_uint","H5T__conv_ullong_ulong","H5T__conv_ullong_ushort","H5T__conv_ulong_double","H5T__conv_ulong_float","H5T__conv_ulong_int","H5T__conv_ulong_ldouble","H5T__conv_ulong_llong","H5T__conv_ulong_long","H5T__conv_ulong_schar","H5T__conv_ulong_short","H5T__conv_ulong_uchar","H5T__conv_ulong_uint","H5T__conv_ulong_ullong","H5T__conv_ulong_ushort","H5T__conv_ushort_double","H5T__conv_ushort_float","H5T__conv_ushort_int","H5T__conv_ushort_int.cold","H5T__conv_ushort_ldouble","H5T__conv_ushort_llong","H5T__conv_ushort_llong.cold","H5T__conv_ushort_long","H5T__conv_ushort_long.cold","H5T__conv_ushort_schar","H5T__conv_ushort_short","H5T__conv_ushort_uchar","H5T__conv_ushort_uint","H5T__conv_ushort_uint.cold","H5T__conv_ushort_ullong","H5T__conv_ushort_ullong.cold","H5T__conv_ushort_ulong","H5T__conv_ushort_ulong.cold","H5T__conv_vlen","H5T__conv_vlen_nested_free","H5T__copy_all","H5T__copy_transient","H5T__create","H5T__detect_vlen_ref","H5T__enum_create","H5T__enum_insert","H5T__free","H5T__get_array_dims","H5T__get_array_ndims","H5T__get_create_plist","H5T__get_member_name","H5T__get_member_size","H5T__get_member_value","H5T__get_native_type","H5T__get_path_table_npaths","H5T__init_native_float_types","H5T__init_native_internal","H5T__initiate_copy","H5T__insert","H5T__open_api_common","H5T__open_name","H5T__pack","H5T__path_find_real","H5T__path_free","H5T__print_path_stats","H5T__ref_disk_getsize","H5T__ref_disk_isnull","H5T__ref_disk_read","H5T__ref_disk_setnull","H5T__ref_disk_write","H5T__ref_dsetreg_disk_getsize","H5T__ref_dsetreg_disk_isnull","H5T__ref_dsetreg_disk_read","H5T__ref_mem_getsize","H5T__ref_mem_isnull","H5T__ref_mem_read","H5T__ref_mem_setnull","H5T__ref_mem_write","H5T__ref_obj_disk_getsize","H5T__ref_obj_disk_isnull","H5T__ref_obj_disk_read","H5T__ref_reclaim","H5T__ref_set_loc","H5T__register","H5T__register_int","H5T__reverse_order","H5T__set_offset","H5T__set_order","H5T__set_precision","H5T__set_size","H5T__sort_name","H5T__sort_value","H5T__unlock_cb","H5T__update_packed","H5T__upgrade_version","H5T__upgrade_version_cb","H5T__visit","H5T__visit.localalias","H5T__vlen_create","H5T__vlen_disk_delete","H5T__vlen_disk_delete.part.0","H5T__vlen_disk_getlen","H5T__vlen_disk_isnull","H5T__vlen_disk_read","H5T__vlen_disk_setnull","H5T__vlen_disk_write","H5T__vlen_mem_seq_getlen","H5T__vlen_mem_seq_getptr","H5T__vlen_mem_seq_isnull","H5T__vlen_mem_seq_read","H5T__vlen_mem_seq_setnull","H5T__vlen_mem_seq_write","H5T__vlen_mem_str_getlen","H5T__vlen_mem_str_getptr","H5T__vlen_mem_str_isnull","H5T__vlen_mem_str_read","H5T__vlen_mem_str_setnull","H5T__vlen_mem_str_write","H5T__vlen_reclaim","H5T__vlen_set_loc","H5T_already_vol_managed","H5T_close","H5T_close_real","H5T_cmp","H5T_cmp.localalias","H5T_construct_datatype","H5T_convert","H5T_convert_committed_datatype","H5T_convert_with_ctx","H5T_copy","H5T_copy_reopen","H5T_debug","H5T_debug.cold","H5T_debug.localalias","H5T_decode","H5T_detect_class","H5T_detect_class.localalias","H5T_encode","H5T_get_actual_type","H5T_get_class","H5T_get_force_conv","H5T_get_member_offset","H5T_get_member_type","H5T_get_named_type","H5T_get_nmembers","H5T_get_offset","H5T_get_order","H5T_get_order.localalias","H5T_get_precision","H5T_get_ref_type","H5T_get_sign","H5T_get_size","H5T_get_super","H5T_init","H5T_invoke_vol_optional","H5T_is_immutable","H5T_is_named","H5T_is_numeric_with_unusual_unused_bits","H5T_is_relocatable","H5T_is_sensible","H5T_is_variable_str","H5T_is_vl_storage","H5T_link","H5T_lock","H5T_nameof","H5T_noop_conv","H5T_oloc","H5T_open","H5T_own_vol_obj","H5T_patch_file","H5T_patch_vlen_file","H5T_path_bkg","H5T_path_compound_subset","H5T_path_find","H5T_path_match_find_type_with_volobj","H5T_path_noop","H5T_reclaim","H5T_reclaim_cb","H5T_restore_refresh_state","H5T_save_refresh_state","H5T_set_loc","H5T_set_loc.localalias","H5T_set_version","H5T_term_package","H5T_top_term_package","H5T_unregister","H5T_update_shared","H5T_vlen_reclaim_elmt","H5Tarray_create1","H5Tarray_create2","H5Tclose","H5Tclose_async","H5Tcommit1","H5Tcommit2","H5Tcommit_anon","H5Tcommit_async","H5Tcommitted","H5Tcompiler_conv","H5Tconvert","H5Tcopy","H5Tcreate","H5Tdecode","H5Tdetect_class","H5Tencode","H5Tenum_create","H5Tenum_insert","H5Tenum_nameof","H5Tenum_valueof","H5Tequal","H5Tfind","H5Tflush","H5Tget_array_dims1","H5Tget_array_dims2","H5Tget_array_ndims","H5Tget_class","H5Tget_create_plist","H5Tget_cset","H5Tget_ebias","H5Tget_fields","H5Tget_inpad","H5Tget_member_class","H5Tget_member_index","H5Tget_member_name","H5Tget_member_offset","H5Tget_member_type","H5Tget_member_value","H5Tget_native_type","H5Tget_nmembers","H5Tget_norm","H5Tget_offset","H5Tget_order","H5Tget_pad","H5Tget_precision","H5Tget_sign","H5Tget_size","H5Tget_strpad","H5Tget_super","H5Tget_tag","H5Tinsert","H5Tis_variable_str","H5Tlock","H5Topen1","H5Topen2","H5Topen_async","H5Tpack","H5Treclaim","H5Trefresh","H5Tregister","H5Tset_cset","H5Tset_ebias","H5Tset_fields","H5Tset_inpad","H5Tset_norm","H5Tset_offset","H5Tset_order","H5Tset_pad","H5Tset_precision","H5Tset_sign","H5Tset_size","H5Tset_strpad","H5Tset_tag","H5Tunregister","H5Tvlen_create","H5UC_create","H5UC_decr","H5VL__connector_str_to_info","H5VL__file_open_find_connector_cb","H5VL__find_opt_operation","H5VL__free_cls","H5VL__get_connector_cb","H5VL__get_connector_id","H5VL__get_connector_id_by_name","H5VL__get_connector_id_by_value","H5VL__get_connector_name","H5VL__is_connector_registered_by_name","H5VL__is_connector_registered_by_value","H5VL__is_default_conn","H5VL__native_attr_close","H5VL__native_attr_create","H5VL__native_attr_get","H5VL__native_attr_open","H5VL__native_attr_optional","H5VL__native_attr_read","H5VL__native_attr_specific","H5VL__native_attr_write","H5VL__native_blob_get","H5VL__native_blob_put","H5VL__native_blob_specific","H5VL__native_dataset_close","H5VL__native_dataset_create","H5VL__native_dataset_get","H5VL__native_dataset_io_cleanup","H5VL__native_dataset_io_setup","H5VL__native_dataset_open","H5VL__native_dataset_optional","H5VL__native_dataset_read","H5VL__native_dataset_specific","H5VL__native_dataset_write","H5VL__native_datatype_close","H5VL__native_datatype_commit","H5VL__native_datatype_get","H5VL__native_datatype_open","H5VL__native_datatype_specific","H5VL__native_file_close","H5VL__native_file_create","H5VL__native_file_get","H5VL__native_file_open","H5VL__native_file_optional","H5VL__native_file_specific","H5VL__native_get_file_addr_len","H5VL__native_group_close","H5VL__native_group_create","H5VL__native_group_get","H5VL__native_group_open","H5VL__native_group_optional","H5VL__native_group_specific","H5VL__native_introspect_get_cap_flags","H5VL__native_introspect_get_conn_cls","H5VL__native_introspect_opt_query","H5VL__native_link_copy","H5VL__native_link_create","H5VL__native_link_get","H5VL__native_link_move","H5VL__native_link_specific","H5VL__native_object_copy","H5VL__native_object_get","H5VL__native_object_open","H5VL__native_object_optional","H5VL__native_object_specific","H5VL__native_str_to_token","H5VL__native_term","H5VL__native_token_cmp","H5VL__native_token_to_str","H5VL__num_opt_operation","H5VL__peek_connector_id_by_name","H5VL__peek_connector_id_by_value","H5VL__register_connector","H5VL__register_connector_by_class","H5VL__register_connector_by_name","H5VL__register_connector_by_value","H5VL__register_opt_operation","H5VL__reparse_def_vol_conn_variable_test","H5VL__set_def_conn","H5VL__term_opt_operation","H5VL__term_opt_operation_cb","H5VL__unregister_opt_operation","H5VL__wrap_obj","H5VL_attr_close","H5VL_attr_create","H5VL_attr_get","H5VL_attr_open","H5VL_attr_optional","H5VL_attr_read","H5VL_attr_specific","H5VL_attr_write","H5VL_blob_get","H5VL_blob_optional","H5VL_blob_put","H5VL_blob_specific","H5VL_check_plugin_load","H5VL_cmp_connector_cls","H5VL_cmp_connector_info","H5VL_conn_copy","H5VL_conn_dec_rc","H5VL_conn_free","H5VL_conn_inc_rc","H5VL_copy_connector_info","H5VL_create_object","H5VL_create_object_using_vol_id","H5VL_dataset_close","H5VL_dataset_create","H5VL_dataset_get","H5VL_dataset_open","H5VL_dataset_optional","H5VL_dataset_read","H5VL_dataset_specific","H5VL_dataset_write","H5VL_datatype_close","H5VL_datatype_commit","H5VL_datatype_get","H5VL_datatype_open","H5VL_datatype_optional","H5VL_datatype_optional_op","H5VL_datatype_specific","H5VL_dec_vol_wrapper","H5VL_file_close","H5VL_file_create","H5VL_file_get","H5VL_file_is_same","H5VL_file_open","H5VL_file_optional","H5VL_file_specific","H5VL_finish_lib_state","H5VL_free_connector_info","H5VL_free_lib_state","H5VL_free_object","H5VL_free_wrap_ctx","H5VL_get_cap_flags","H5VL_get_wrap_ctx","H5VL_group_close","H5VL_group_create","H5VL_group_get","H5VL_group_open","H5VL_group_optional","H5VL_group_specific","H5VL_inc_vol_wrapper","H5VL_init_phase1","H5VL_init_phase2","H5VL_introspect_get_cap_flags","H5VL_introspect_get_conn_cls","H5VL_introspect_opt_query","H5VL_link_copy","H5VL_link_create","H5VL_link_get","H5VL_link_move","H5VL_link_optional","H5VL_link_specific","H5VL_native_addr_to_token","H5VL_native_get_file_addr_len","H5VL_native_get_file_struct","H5VL_native_register","H5VL_native_token_to_addr","H5VL_new_connector","H5VL_object","H5VL_object_copy","H5VL_object_data","H5VL_object_get","H5VL_object_inc_rc","H5VL_object_is_native","H5VL_object_open","H5VL_object_optional","H5VL_object_specific","H5VL_object_unwrap","H5VL_object_verify","H5VL_optional","H5VL_pass_through_attr_close","H5VL_pass_through_attr_create","H5VL_pass_through_attr_get","H5VL_pass_through_attr_open","H5VL_pass_through_attr_optional","H5VL_pass_through_attr_read","H5VL_pass_through_attr_specific","H5VL_pass_through_attr_write","H5VL_pass_through_blob_get","H5VL_pass_through_blob_optional","H5VL_pass_through_blob_put","H5VL_pass_through_blob_specific","H5VL_pass_through_dataset_close","H5VL_pass_through_dataset_create","H5VL_pass_through_dataset_get","H5VL_pass_through_dataset_open","H5VL_pass_through_dataset_optional","H5VL_pass_through_dataset_read","H5VL_pass_through_dataset_specific","H5VL_pass_through_dataset_write","H5VL_pass_through_datatype_close","H5VL_pass_through_datatype_commit","H5VL_pass_through_datatype_get","H5VL_pass_through_datatype_open","H5VL_pass_through_datatype_optional","H5VL_pass_through_datatype_specific","H5VL_pass_through_file_close","H5VL_pass_through_file_create","H5VL_pass_through_file_get","H5VL_pass_through_file_open","H5VL_pass_through_file_optional","H5VL_pass_through_file_specific","H5VL_pass_through_free_wrap_ctx","H5VL_pass_through_get_object","H5VL_pass_through_get_wrap_ctx","H5VL_pass_through_group_close","H5VL_pass_through_group_create","H5VL_pass_through_group_get","H5VL_pass_through_group_open","H5VL_pass_through_group_optional","H5VL_pass_through_group_specific","H5VL_pass_through_info_cmp","H5VL_pass_through_info_copy","H5VL_pass_through_info_free","H5VL_pass_through_info_to_str","H5VL_pass_through_init","H5VL_pass_through_introspect_get_cap_flags","H5VL_pass_through_introspect_get_conn_cls","H5VL_pass_through_introspect_opt_query","H5VL_pass_through_link_copy","H5VL_pass_through_link_create","H5VL_pass_through_link_get","H5VL_pass_through_link_move","H5VL_pass_through_link_optional","H5VL_pass_through_link_specific","H5VL_pass_through_object_copy","H5VL_pass_through_object_get","H5VL_pass_through_object_open","H5VL_pass_through_object_optional","H5VL_pass_through_object_specific","H5VL_pass_through_optional","H5VL_pass_through_register","H5VL_pass_through_request_cancel","H5VL_pass_through_request_free","H5VL_pass_through_request_notify","H5VL_pass_through_request_optional","H5VL_pass_through_request_specific","H5VL_pass_through_request_wait","H5VL_pass_through_str_to_info","H5VL_pass_through_term","H5VL_pass_through_token_cmp","H5VL_pass_through_token_from_str","H5VL_pass_through_token_to_str","H5VL_pass_through_unwrap_object","H5VL_pass_through_wrap_object","H5VL_register","H5VL_register_using_existing_id","H5VL_register_using_vol_id","H5VL_request_cancel","H5VL_request_free","H5VL_request_notify","H5VL_request_optional","H5VL_request_specific","H5VL_request_wait","H5VL_reset_vol_wrapper","H5VL_restore_lib_state","H5VL_retrieve_lib_state","H5VL_set_vol_wrapper","H5VL_setup_acc_args","H5VL_setup_args","H5VL_setup_idx_args","H5VL_setup_loc_args","H5VL_setup_name_args","H5VL_setup_self_args","H5VL_setup_token_args","H5VL_start_lib_state","H5VL_term_package","H5VL_token_cmp","H5VL_token_from_str","H5VL_token_to_str","H5VL_unwrap_object","H5VL_vol_object","H5VL_vol_object_verify","H5VL_wrap_object","H5VL_wrap_register","H5VLattr_close","H5VLattr_create","H5VLattr_get","H5VLattr_open","H5VLattr_optional","H5VLattr_optional_op","H5VLattr_read","H5VLattr_specific","H5VLattr_write","H5VLblob_get","H5VLblob_optional","H5VLblob_put","H5VLblob_specific","H5VLclose","H5VLcmp_connector_cls","H5VLcmp_connector_info","H5VLconnector_info_to_str","H5VLconnector_str_to_info","H5VLcopy_connector_info","H5VLdataset_close","H5VLdataset_create","H5VLdataset_get","H5VLdataset_open","H5VLdataset_optional","H5VLdataset_optional_op","H5VLdataset_read","H5VLdataset_specific","H5VLdataset_write","H5VLdatatype_close","H5VLdatatype_commit","H5VLdatatype_get","H5VLdatatype_open","H5VLdatatype_optional","H5VLdatatype_optional_op","H5VLdatatype_specific","H5VLfile_close","H5VLfile_create","H5VLfile_get","H5VLfile_open","H5VLfile_optional","H5VLfile_optional_op","H5VLfile_specific","H5VLfind_opt_operation","H5VLfinish_lib_state","H5VLfree_connector_info","H5VLfree_lib_state","H5VLfree_wrap_ctx","H5VLget_cap_flags","H5VLget_connector_id","H5VLget_connector_id_by_name","H5VLget_connector_id_by_value","H5VLget_connector_name","H5VLget_file_type","H5VLget_object","H5VLget_value","H5VLget_wrap_ctx","H5VLgroup_close","H5VLgroup_create","H5VLgroup_get","H5VLgroup_open","H5VLgroup_optional","H5VLgroup_optional_op","H5VLgroup_specific","H5VLinitialize","H5VLintrospect_get_cap_flags","H5VLintrospect_get_conn_cls","H5VLintrospect_opt_query","H5VLis_connector_registered_by_name","H5VLis_connector_registered_by_value","H5VLlink_copy","H5VLlink_create","H5VLlink_get","H5VLlink_move","H5VLlink_optional","H5VLlink_optional_op","H5VLlink_specific","H5VLnative_addr_to_token","H5VLnative_token_to_addr","H5VLobject","H5VLobject_copy","H5VLobject_get","H5VLobject_is_native","H5VLobject_open","H5VLobject_optional","H5VLobject_optional_op","H5VLobject_specific","H5VLoptional","H5VLpeek_connector_id_by_name","H5VLpeek_connector_id_by_value","H5VLquery_optional","H5VLregister_connector","H5VLregister_connector_by_name","H5VLregister_connector_by_value","H5VLregister_opt_operation","H5VLrequest_cancel","H5VLrequest_free","H5VLrequest_notify","H5VLrequest_optional","H5VLrequest_optional_op","H5VLrequest_specific","H5VLrequest_wait","H5VLrestore_lib_state","H5VLretrieve_lib_state","H5VLstart_lib_state","H5VLterminate","H5VLtoken_cmp","H5VLtoken_from_str","H5VLtoken_to_str","H5VLunregister_connector","H5VLunregister_opt_operation","H5VLunwrap_object","H5VLwrap_object","H5VLwrap_register","H5VM_array_calc","H5VM_array_calc_pre","H5VM_array_down","H5VM_array_fill","H5VM_array_offset","H5VM_array_offset_pre","H5VM_chunk_index","H5VM_chunk_index_scaled","H5VM_chunk_scaled","H5VM_hyper_copy","H5VM_hyper_eq","H5VM_hyper_fill","H5VM_hyper_stride","H5VM_memcpyvv","H5VM_opvv","H5VM_stride_copy","H5VM_stride_copy.part.0","H5VM_stride_copy_s","H5VM_stride_fill","H5WB_actual","H5WB_actual_clear","H5WB_unwrap","H5WB_wrap","H5Z__calc_parms_array","H5Z__calc_parms_compound","H5Z__can_apply_nbit","H5Z__can_apply_scaleoffset","H5Z__check_unregister_dset_cb","H5Z__check_unregister_group_cb","H5Z__do_op","H5Z__filter_deflate","H5Z__filter_fletcher32","H5Z__filter_nbit","H5Z__filter_scaleoffset","H5Z__filter_shuffle","H5Z__flush_file_cb","H5Z__get_token","H5Z__nbit_compress_one_array","H5Z__nbit_compress_one_atomic","H5Z__nbit_compress_one_compound","H5Z__nbit_decompress_one_array","H5Z__nbit_decompress_one_atomic","H5Z__nbit_decompress_one_compound","H5Z__new_node.part.0","H5Z__parse_expression","H5Z__parse_factor","H5Z__parse_term","H5Z__prelude_callback","H5Z__prepare_prelude_callback_dcpl","H5Z__scaleoffset_get_type","H5Z__scaleoffset_postdecompress_i","H5Z__scaleoffset_precompress_fd","H5Z__set_local_nbit","H5Z__set_local_scaleoffset","H5Z__set_local_shuffle","H5Z__set_parms_array","H5Z__set_parms_atomic","H5Z__set_parms_compound","H5Z__unregister","H5Z__xform_copy_tree.isra.0","H5Z__xform_destroy_parse_tree.part.0","H5Z__xform_eval_full","H5Z__xform_reduce_tree","H5Z_all_filters_avail","H5Z_append","H5Z_can_apply","H5Z_can_apply_direct","H5Z_delete","H5Z_filter_avail","H5Z_filter_in_pline","H5Z_filter_info","H5Z_find","H5Z_get_filter_info","H5Z_ignore_filters","H5Z_init","H5Z_modify","H5Z_pipeline","H5Z_register","H5Z_set_local","H5Z_set_local_direct","H5Z_term_package","H5Z_xform_copy","H5Z_xform_create","H5Z_xform_destroy","H5Z_xform_eval","H5Z_xform_extract_xform_str","H5Z_xform_noop","H5Zfilter_avail","H5Zget_filter_info","H5Zregister","H5Zunregister","H5__debug_mask","H5__mpi_delete_cb","H5_bandwidth","H5_basename","H5_buffer_dump","H5_build_extpath","H5_checksum_crc","H5_checksum_fletcher32","H5_checksum_lookup3","H5_checksum_metadata","H5_combine_path","H5_default_vfd_init","H5_dirname","H5_get_option","H5_get_time","H5_hash_string","H5_init_library","H5_make_time","H5_mpi_comm_cmp","H5_mpi_comm_dup","H5_mpi_comm_free","H5_mpi_get_bigio_count","H5_mpi_info_cmp","H5_mpi_info_dup","H5_mpi_info_free","H5_mpi_set_bigio_count","H5_mpio_create_large_type","H5_mpio_gatherv_alloc","H5_mpio_gatherv_alloc_simple","H5_mpio_get_file_sync_required","H5_nanosleep","H5_now","H5_now_usec","H5_strcasestr","H5_term_library","H5_term_library.part.0","H5_timer_get_time_string","H5_timer_get_times","H5_timer_get_total_times","H5_timer_init","H5_timer_start","H5_timer_stop","H5_trace","H5_trace_args","H5allocate_memory","H5atclose","H5check_version","H5close","H5dont_atexit","H5free_memory","H5garbage_collect","H5get_free_list_sizes","H5get_libversion","H5is_library_terminating","H5is_library_threadsafe","H5open","H5resize_memory","H5set_free_list_limits","Nflock","Pflock","__do_global_dtors_aux","atexit","compute_next","deregister_tm_clones","frame_dummy","open_members","register_tm_clones"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so","include_offsets":false},{"type":1,"name":"bio","functions":["bio_add_folio","bio_add_folio_nofail","bio_add_hw_folio","bio_add_hw_page","bio_add_page","bio_add_pc_page","bio_add_zone_append_page","bio_alloc_bioset","bio_alloc_cache_prune.constprop.0","bio_alloc_clone","bio_alloc_irq_cache_splice","bio_alloc_map_data","bio_alloc_rescue","bio_associate_blkg","bio_associate_blkg_from_css","bio_associate_blkg_from_page.isra.0","bio_attempt_back_merge","bio_attempt_discard_merge","bio_attempt_front_merge","bio_await_chain","bio_blkcg_css","bio_chain","bio_chain_and_submit","bio_chain_endio","bio_check_pages_dirty","bio_clone_blkg_association","bio_copy_data","bio_copy_data_iter","bio_copy_from_iter","bio_copy_kern_endio","bio_copy_kern_endio_read","bio_copy_user_iov","bio_cpu_dead","bio_dirty_fn","bio_end_io_acct_remapped","bio_endio","bio_free","bio_free_pages","bio_get_page","bio_init","bio_init_clone","bio_integrity_add_page","bio_integrity_advance","bio_integrity_alloc","bio_integrity_clone","bio_integrity_copy_user","bio_integrity_free","bio_integrity_init_user","bio_integrity_map_user","bio_integrity_prep","bio_integrity_prep.cold","bio_integrity_trim","bio_integrity_unmap_user","bio_integrity_unpin_bvec","bio_integrity_verify_fn","bio_iov_bvec_set","bio_iov_iter_get_pages","bio_kmalloc","bio_map_kern_endio","bio_map_user_iov","bio_next_page","bio_poll","bio_post_read_processing","bio_put","bio_reset","bio_set_pages_dirty","bio_split","bio_split_discard","bio_split_rw","bio_split_rw_at","bio_split_to_limits","bio_split_write_zeroes","bio_split_zone_append","bio_start_io_acct","bio_submit_split.part.0","bio_to_wbt_flags","bio_trim","bio_uninit","bio_wait_end_io","bioset_exit","bioset_init","bioset_integrity_create","bioset_integrity_free","biovec_init_pool"]},{"type":3,"name":"python","functions":["function__entry"],"binary_path":"/usr/lib64/libpython3.9.so","provider":"python"},{"type":1,"name":"os_page_cache","functions":["add_to_page_cache_lru","clear_page_dirty_for_io","delete_from_page_cache_batch","end_page_writeback","fault_in_safe_writeable","fault_in_subpage_writeable","fault_in_writeable","filemap_add_folio","filemap_alloc_folio","filemap_check_errors","filemap_fdatawait_keep_errors","filemap_fdatawait_range","filemap_fdatawait_range_keep_errors","filemap_fdatawrite","filemap_fdatawrite_range","filemap_fdatawrite_wbc","filemap_flush","filemap_get_folios","filemap_get_folios_contig","filemap_get_folios_tag","filemap_range_has_page","filemap_range_has_writeback","filemap_release_folio","filemap_remove_folio","folio_account_cleaned","folio_add_wait_queue","folio_clear_dirty_for_io","folio_end_private_2","folio_end_writeback","folio_invalidate","folio_mapping","folio_wait_bit","folio_wait_bit_killable","folio_wait_private_2","folio_wait_private_2_killable","folio_wait_stable","folio_wait_writeback","folio_wait_writeback_killable","grab_cache_page_write_begin","invalidate_inode_pages2","invalidate_inode_pages2_range","invalidate_mapping_pages","kiocb_invalidate_pages","kiocb_invalidate_post_direct_write","kiocb_write_and_wait","mapping_read_folio_gfp","mapping_seek_hole_data"]},{"type":1,"name":"shm","functions":["shmem_charge","shmem_file_setup","shmem_file_setup_with_mnt","shmem_get_folio","shmem_get_unmapped_area","shmem_init_fs_context","shmem_kernel_file_setup","shmem_lock","shmem_partial_swap_usage","shmem_read_folio_gfp","shmem_read_mapping_page_gfp","shmem_swap_usage","shmem_truncate_range","shmem_uncharge","shmem_unlock_mapping","shmem_unuse","shmem_zero_setup"]},{"type":1,"name":"fscache","functions":["__fscache_acquire_cookie","__fscache_acquire_volume","__fscache_begin_read_operation","__fscache_begin_write_operation","__fscache_clear_page_bits","__fscache_invalidate","__fscache_relinquish_cookie","__fscache_relinquish_volume","__fscache_resize_cookie","__fscache_unuse_cookie","__fscache_use_cookie","__fscache_write_to_cache"]},{"type":1,"name":"xfs","functions":["xfs_agfblock_init","xfs_agflblock_init","xfs_align_sparse_ino.isra.0","xfs_alloc_ag_max_usable","xfs_alloc_ag_vextent_exact","xfs_alloc_ag_vextent_locality","xfs_alloc_ag_vextent_near","xfs_alloc_ag_vextent_size","xfs_alloc_ag_vextent_small","xfs_alloc_btrec_to_irec","xfs_alloc_buftarg","xfs_alloc_cancel_autoreap","xfs_alloc_check_irec","xfs_alloc_cntbt_iter","xfs_alloc_commit_autoreap","xfs_alloc_compute_aligned","xfs_alloc_compute_diff","xfs_alloc_compute_maxlevels","xfs_alloc_cur_check","xfs_alloc_cur_finish","xfs_alloc_file_space","xfs_alloc_fix_freelist","xfs_alloc_fix_len","xfs_alloc_fixup_trees","xfs_alloc_get_freelist","xfs_alloc_get_rec","xfs_alloc_has_records","xfs_alloc_log_agf","xfs_alloc_longest_free_extent","xfs_alloc_lookup_eq","xfs_alloc_lookup_ge","xfs_alloc_lookup_le","xfs_alloc_min_freelist","xfs_alloc_put_freelist","xfs_alloc_query_all","xfs_alloc_query_range","xfs_alloc_query_range_helper","xfs_alloc_read_agf","xfs_alloc_read_agfl","xfs_alloc_schedule_autoreap","xfs_alloc_set_aside","xfs_alloc_space_available","xfs_alloc_update","xfs_alloc_update_counters","xfs_alloc_vextent_check_args","xfs_alloc_vextent_exact_bno","xfs_alloc_vextent_finish","xfs_alloc_vextent_first_ag","xfs_alloc_vextent_iterate_ags.constprop.0","xfs_alloc_vextent_near_bno","xfs_alloc_vextent_prepare_ag","xfs_alloc_vextent_start_ag","xfs_alloc_vextent_this_ag","xfs_alloc_walk_iter","xfs_allocfree_block_count","xfs_attr_leaf_entsize","xfs_attr_leaf_try_add","xfs_attr_restore_rmt_blk","xfs_btroot_init","xfs_buf_alert_ratelimited","xfs_buf_alloc_pages","xfs_buf_cmp","xfs_buf_corruption_error","xfs_buf_delwri_cancel","xfs_buf_delwri_pushbuf","xfs_buf_delwri_queue","xfs_buf_delwri_queue_here","xfs_buf_delwri_submit","xfs_buf_delwri_submit_buffers","xfs_buf_delwri_submit_nowait","xfs_buf_dquot_io_fail","xfs_buf_dquot_iodone","xfs_buf_find_insert.constprop.0","xfs_buf_find_lock","xfs_buf_free","xfs_buf_free_callback","xfs_buf_free_pages","xfs_buf_get_map","xfs_buf_get_uncached","xfs_buf_hash_destroy","xfs_buf_hash_init","xfs_buf_hold","xfs_buf_inode_io_fail","xfs_buf_inode_iodone","xfs_buf_ioapply_map","xfs_buf_ioend","xfs_buf_ioend_fail","xfs_buf_ioend_handle_error","xfs_buf_ioend_work","xfs_buf_ioerror_alert","xfs_buf_iowait","xfs_buf_item_committed","xfs_buf_item_committing","xfs_buf_item_dirty_format","xfs_buf_item_done","xfs_buf_item_format","xfs_buf_item_format_segment","xfs_buf_item_free","xfs_buf_item_free_format","xfs_buf_item_get_format","xfs_buf_item_init","xfs_buf_item_log","xfs_buf_item_pin","xfs_buf_item_push","xfs_buf_item_put","xfs_buf_item_release","xfs_buf_item_relse","xfs_buf_item_size","xfs_buf_item_size_segment.isra.0","xfs_buf_item_unpin","xfs_buf_lock","xfs_buf_log_check_iovec","xfs_buf_log_overhead","xfs_buf_offset","xfs_buf_read_map","xfs_buf_read_uncached","xfs_buf_readahead_map","xfs_buf_rele","xfs_buf_reverify","xfs_buf_set_ref","xfs_buf_stale","xfs_buf_trylock","xfs_buf_unlock","xfs_buf_verifier_error","xfs_buf_wait_unpin","xfs_buf_zero","xfs_buffered_write_delalloc_punch","xfs_buffered_write_iomap_begin","xfs_buffered_write_iomap_end","xfs_buftarg_drain_rele","xfs_buftarg_isolate","xfs_buftarg_shrink_count","xfs_buftarg_shrink_scan","xfs_bunmapi","xfs_bunmapi_range","xfs_bwrite","xfs_cntbt_diff_two_keys","xfs_cntbt_init_high_key_from_rec","xfs_cntbt_key_diff","xfs_cntbt_keys_inorder","xfs_cntbt_recs_inorder","xfs_cntroot_init","xfs_da3_blk_link","xfs_da3_blk_unlink.isra.0","xfs_da3_blkinfo_verify","xfs_da3_fixhashpath","xfs_da3_join","xfs_da3_node_add","xfs_da3_node_create","xfs_da3_node_hdr_from_disk","xfs_da3_node_hdr_to_disk","xfs_da3_node_lasthash.isra.0","xfs_da3_node_lookup_int","xfs_da3_node_order.isra.0","xfs_da3_node_read","xfs_da3_node_read_mapped","xfs_da3_node_read_verify","xfs_da3_node_rebalance.constprop.0","xfs_da3_node_remove","xfs_da3_node_set_type","xfs_da3_node_split","xfs_da3_node_toosmall","xfs_da3_node_unbalance","xfs_da3_node_verify","xfs_da3_node_verify_struct","xfs_da3_node_write_verify","xfs_da3_path_shift","xfs_da3_root_join","xfs_da3_root_split","xfs_da3_split","xfs_da3_swap_lastblock","xfs_da_buf_copy","xfs_da_compname","xfs_da_get_buf","xfs_da_grow_inode","xfs_da_grow_inode_int","xfs_da_hashname","xfs_da_mount","xfs_da_read_buf","xfs_da_reada_buf","xfs_da_shrink_inode","xfs_da_state_alloc","xfs_da_state_free","xfs_da_state_kill_altpath","xfs_da_state_reset","xfs_da_unmount","xfs_dabuf_map.constprop.0","xfs_dax_write_iomap_end","xfs_dax_writepages","xfs_dio_write_end_io","xfs_direct_write_iomap_begin","xfs_discard_endio","xfs_discard_endio_work","xfs_discard_extents","xfs_discard_folio","xfs_do_force_shutdown","xfs_dquot_buf_read_verify","xfs_dquot_buf_readahead_verify","xfs_dquot_buf_verify","xfs_dquot_buf_verify_crc.isra.0","xfs_dquot_buf_verify_struct","xfs_dquot_buf_write_verify","xfs_end_ioend","xfs_extent_busy_ag_cmp","xfs_extent_busy_clear","xfs_extent_busy_clear_one","xfs_extent_busy_flush","xfs_extent_busy_insert","xfs_extent_busy_insert_discard","xfs_extent_busy_insert_list","xfs_extent_busy_list_empty","xfs_extent_busy_reuse","xfs_extent_busy_search","xfs_extent_busy_trim","xfs_extent_busy_update_extent","xfs_extent_busy_wait_all","xfs_extent_free_abort_intent","xfs_extent_free_cancel_item","xfs_extent_free_create_done","xfs_extent_free_create_intent","xfs_extent_free_diff_items","xfs_extent_free_finish_item","xfs_extent_free_get_group","xfs_extent_free_log_item.constprop.0","xfs_extent_free_recover_work","xfs_extent_free_relog_intent","xfs_extfree_intent_destroy_cache","xfs_file_buffered_read","xfs_file_buffered_write","xfs_file_dax_read","xfs_file_dax_write","xfs_file_dio_read","xfs_file_dio_write_aligned","xfs_file_dio_write_unaligned","xfs_file_fadvise","xfs_file_fallocate","xfs_file_fsync","xfs_file_llseek","xfs_file_mmap","xfs_file_open","xfs_file_read_iter","xfs_file_readdir","xfs_file_release","xfs_file_remap_range","xfs_file_write_checks","xfs_file_write_iter","xfs_filemap_fault","xfs_filemap_huge_fault","xfs_filemap_page_mkwrite","xfs_filemap_pfn_mkwrite","xfs_finobt_init_ptr_from_cur","xfs_free_ag_extent","xfs_freesp_init_recs.isra.0","xfs_fs_alloc_inode","xfs_fs_commit_blocks","xfs_fs_destroy_inode","xfs_fs_dirty_inode","xfs_fs_drop_inode","xfs_fs_encode_fh","xfs_fs_fh_to_dentry","xfs_fs_fh_to_parent","xfs_fs_fill_super","xfs_fs_free","xfs_fs_free_cached_objects","xfs_fs_freeze","xfs_fs_geometry","xfs_fs_get_dqblk","xfs_fs_get_nextdqblk","xfs_fs_get_parent","xfs_fs_get_quota_state","xfs_fs_get_tree","xfs_fs_get_uuid","xfs_fs_goingdown","xfs_fs_inode_init_once","xfs_fs_map_blocks","xfs_fs_mark_healthy","xfs_fs_mark_sick","xfs_fs_measure_sickness","xfs_fs_nfs_commit_metadata","xfs_fs_nr_cached_objects","xfs_fs_parse_param","xfs_fs_put_super","xfs_fs_reconfigure","xfs_fs_reserve_ag_blocks","xfs_fs_rm_xquota","xfs_fs_set_dqblk","xfs_fs_set_info","xfs_fs_show_options","xfs_fs_shutdown","xfs_fs_statfs","xfs_fs_sync_fs","xfs_fs_unfreeze","xfs_fs_unreserve_ag_blocks","xfs_fs_validate_params","xfs_fs_writable","xfs_ialloc_ag_alloc","xfs_ialloc_count_inodes_rec","xfs_ialloc_count_ondisk","xfs_ialloc_get_rec","xfs_ialloc_next_rec","xfs_iflush","xfs_iflush_abort","xfs_iflush_cluster","xfs_iflush_fork","xfs_iflush_shutdown_abort","xfs_ifork_init_attr","xfs_ifork_init_cow","xfs_ifork_verify_local_attr","xfs_ifork_verify_local_data","xfs_ifork_zap_attr","xfs_ifork_zapped","xfs_ilock_for_iomap","xfs_ilock_iocb_for_write","xfs_inode_alloc","xfs_inode_buf_read_verify","xfs_inode_buf_readahead_verify","xfs_inode_buf_verify","xfs_inode_buf_write_verify","xfs_inode_clear_cowblocks_tag","xfs_inode_clear_eofblocks_tag","xfs_inode_free","xfs_inode_free_callback","xfs_inode_free_cowblocks","xfs_inode_free_eofblocks.constprop.0","xfs_inode_from_disk","xfs_inode_from_disk_ts","xfs_inode_hasattr","xfs_inode_inherit_flags","xfs_inode_init_security","xfs_inode_item_attr_fork_size","xfs_inode_item_committed","xfs_inode_item_committing","xfs_inode_item_data_fork_size","xfs_inode_item_destroy","xfs_inode_item_format","xfs_inode_item_format_attr_fork","xfs_inode_item_format_convert","xfs_inode_item_format_data_fork","xfs_inode_item_init","xfs_inode_item_pin","xfs_inode_item_precommit","xfs_inode_item_push","xfs_inode_item_release","xfs_inode_item_size","xfs_inode_item_sort","xfs_inode_item_unpin","xfs_inode_mark_healthy","xfs_inode_mark_reclaimable","xfs_inode_mark_sick","xfs_inode_measure_sickness","xfs_inode_near_dquot_enforcement","xfs_inode_needs_inactive","xfs_inode_reload_unlinked","xfs_inode_reload_unlinked_bucket","xfs_inode_set_cowblocks_tag","xfs_inode_set_eofblocks_tag","xfs_inode_to_disk","xfs_inode_to_log_dinode","xfs_inode_validate_cowextsize","xfs_inode_validate_extsize","xfs_inode_verifier_error","xfs_iomap_eof_align_last_fsb","xfs_iomap_inode_sequence","xfs_iomap_prealloc_size.constprop.0.isra.0","xfs_iomap_swapfile_activate","xfs_iomap_valid","xfs_iomap_write_direct","xfs_iomap_write_unwritten","xfs_iread_bmbt_block","xfs_lookup_get_search_key","xfs_map_blocks","xfs_mru_cache_create","xfs_mru_cache_delete","xfs_mru_cache_destroy","xfs_mru_cache_done","xfs_mru_cache_init","xfs_mru_cache_insert","xfs_mru_cache_lookup","xfs_mru_cache_remove","xfs_mru_cache_uninit","xfs_nfs_get_inode.isra.0","xfs_prepare_ioend","xfs_read_agf","xfs_read_agi","xfs_read_iomap_begin","xfs_readdir","xfs_readlink","xfs_readlink_bmap_ilocked","xfs_readlink_by_handle","xfs_release","xfs_remove","xfs_rename","xfs_reserve_blocks","xfs_restore_resvblks","xfs_vm_bmap","xfs_vm_read_folio","xfs_vm_readahead","xfs_vm_writepages","xfs_xattr_iomap_begin"]},{"type":1,"name":"ext4","functions":["ext4_alloc_branch","ext4_alloc_da_blocks","ext4_alloc_file_blocks.isra.0","ext4_alloc_flex_bg_array","ext4_alloc_group_tables","ext4_alloc_inode","ext4_alloc_io_end_vec","ext4_append","ext4_block_bitmap","ext4_block_bitmap_csum_set","ext4_block_bitmap_csum_verify","ext4_block_bitmap_set","ext4_block_to_path","ext4_block_write_begin","ext4_block_zero_page_range","ext4_bmap","ext4_bread","ext4_bread_batch","ext4_da_convert_inline_data_to_extent","ext4_da_get_block_prep","ext4_da_map_blocks.constprop.0","ext4_da_release_space","ext4_da_reserve_space","ext4_da_update_reserve_space","ext4_da_write_begin","ext4_da_write_end","ext4_da_write_inline_data_begin","ext4_dio_alignment","ext4_dio_write_checks","ext4_dio_write_end_io","ext4_dio_write_iter","ext4_dirty_folio","ext4_dirty_inode","ext4_end_buffer_io_sync","ext4_end_io_rsv_work","ext4_exit_es","ext4_exit_mballoc","ext4_exit_pageio","ext4_exit_pending","ext4_exit_post_read_processing","ext4_exit_sysfs","ext4_exit_system_zone","ext4_ext_calc_credits_for_single_extent","ext4_ext_check_inode","ext4_ext_clear_bb","ext4_ext_convert_to_initialized","ext4_ext_correct_indexes","ext4_ext_find_goal","ext4_ext_get_access","ext4_ext_grow_indepth","ext4_ext_handle_unwritten_extents","ext4_ext_index_trans_blocks","ext4_ext_init","ext4_ext_insert_extent","ext4_ext_insert_index","ext4_ext_map_blocks","ext4_ext_migrate","ext4_ext_next_allocated_block","ext4_ext_precache","ext4_ext_precache.part.0","ext4_ext_release","ext4_ext_remove_space","ext4_ext_replay_set_iblocks","ext4_ext_replay_shrink_inode","ext4_ext_replay_update_ex","ext4_ext_rm_idx","ext4_ext_rm_leaf","ext4_ext_search_left","ext4_ext_search_right","ext4_ext_shift_extents","ext4_ext_shift_path_extents","ext4_ext_split","ext4_ext_swap_inode_data","ext4_ext_tree_init","ext4_ext_truncate","ext4_ext_try_to_merge","ext4_ext_try_to_merge_right","ext4_ext_try_to_merge_up","ext4_extent_block_csum_set","ext4_fallocate","ext4_fh_to_dentry","ext4_fh_to_parent","ext4_fiemap","ext4_file_getattr","ext4_file_mmap","ext4_file_open","ext4_file_read_iter","ext4_file_write_iter","ext4_fileattr_get","ext4_fileattr_set","ext4_find_dest_de","ext4_find_entry","ext4_find_extent","ext4_find_inline_data_nolock","ext4_find_inline_entry","ext4_find_shared","ext4_finish_convert_inline_dir","ext4_free_blocks","ext4_free_blocks_simple.isra.0","ext4_free_branches","ext4_free_clusters_after_init","ext4_free_data","ext4_free_ext_path","ext4_free_group_clusters","ext4_free_group_clusters_set","ext4_free_in_core_inode","ext4_free_inode","ext4_free_inodes_count","ext4_free_inodes_set","ext4_free_link","ext4_io_submit","ext4_io_submit_init","ext4_iomap_begin","ext4_iomap_begin_report","ext4_iomap_end","ext4_iomap_overwrite_begin","ext4_iomap_swap_activate","ext4_iomap_xattr_begin","ext4_journal_abort_handle.constprop.0","ext4_journal_bmap","ext4_journal_check_start","ext4_journal_commit_callback","ext4_journal_finish_inode_data_buffers","ext4_journal_submit_inode_data_buffers","ext4_journalled_dirty_folio","ext4_journalled_invalidate_folio","ext4_journalled_submit_inode_data_buffers","ext4_journalled_write_end","ext4_journalled_write_inline_data","ext4_journalled_writepage_callback","ext4_journalled_zero_new_buffers","ext4_mark_bitmap_end","ext4_mark_bitmap_end.part.0","ext4_mark_dquot_dirty","ext4_mark_group_bitmap_corrupted","ext4_mark_iloc_dirty","ext4_mark_inode_used","ext4_mark_recovery_complete.constprop.0","ext4_mballoc_query_range","ext4_meta_trans_blocks","ext4_mkdir","ext4_mknod","ext4_move_extents","ext4_read_bh","ext4_read_bh_lock","ext4_read_bh_nowait","ext4_read_block_bitmap","ext4_read_block_bitmap_nowait","ext4_read_folio","ext4_read_inline_data.part.0.isra.0","ext4_read_inline_dir","ext4_read_inline_link","ext4_read_inline_page","ext4_read_inode_bitmap","ext4_read_merkle_tree_page","ext4_readahead","ext4_readdir","ext4_readpage_inline","ext4_release_io_end","ext4_statfs","ext4_swap_extents","ext4_symlink","ext4_sync_file","ext4_sync_fs","ext4_tmpfile","ext4_trim_all_free","ext4_trim_fs","ext4_truncate","ext4_unfreeze","ext4_unlink","ext4_write_begin","ext4_write_dquot","ext4_write_end","ext4_write_info","ext4_write_inline_data","ext4_write_inline_data_end","ext4_write_inode","ext4_write_merkle_tree_block","ext4_writepage","ext4_writepage_cb","ext4_writepage_trans_blocks","ext4_writepages"]},{"type":1,"name":"iomap","functions":["iomap_add_to_ioend","iomap_adjust_read_range.isra.0","iomap_bmap","iomap_dio_complete","iomap_dio_complete_work","iomap_dio_deferred_complete","iomap_dio_inline_iter","iomap_dio_rw","iomap_dio_zero","iomap_dirty_folio","iomap_do_writepage","iomap_fiemap","iomap_file_buffered_write","iomap_file_buffered_write_punch_delalloc","iomap_file_unshare","iomap_finish_ioend","iomap_finish_ioends","iomap_get_folio","iomap_invalidate_folio","iomap_ioend_compare","iomap_ioend_try_merge","iomap_is_partially_uptodate","iomap_iter","iomap_page_mkwrite","iomap_read_end_io","iomap_read_folio","iomap_read_folio_sync","iomap_read_inline_data","iomap_readahead","iomap_readpage_iter","iomap_release_folio","iomap_seek_data","iomap_seek_hole","iomap_sort_ioends","iomap_submit_ioend","iomap_swapfile_activate","iomap_swapfile_add_extent","iomap_swapfile_fail","iomap_swapfile_iter","iomap_to_bh","iomap_to_fiemap","iomap_truncate_page","iomap_unshare_iter","iomap_write_begin","iomap_write_delalloc_release","iomap_write_end","iomap_write_iter","iomap_writepage_map","iomap_writepages","iomap_zero_iter","iomap_zero_range"]},{"type":2,"name":"mpi","functions":["MPIX_Comm_ack_failed","MPIX_Comm_ack_failed.cold","MPIX_Comm_agree","MPIX_Comm_agree.cold","MPIX_Comm_failure_ack","MPIX_Comm_failure_ack.cold","MPIX_Comm_failure_get_acked","MPIX_Comm_failure_get_acked.cold","MPIX_Comm_get_failed","MPIX_Comm_get_failed.cold","MPIX_Comm_iagree","MPIX_Comm_iagree.cold","MPIX_Comm_is_revoked","MPIX_Comm_revoke","MPIX_Comm_revoke.cold","MPIX_Comm_shrink","MPIX_Comm_shrink.cold","MPIX_Query_cuda_support","MPIX_Query_rocm_support","MPI_AINT_ADD_F90","MPI_AINT_DIFF_F90","MPI_Abort","MPI_Accumulate","MPI_Add_error_class","MPI_Add_error_code","MPI_Add_error_string","MPI_Address","MPI_Allgather","MPI_Allgather_init","MPI_Allgatherv","MPI_Allgatherv_init","MPI_Alloc_mem","MPI_Allreduce","MPI_Allreduce_init","MPI_Alltoall","MPI_Alltoall_init","MPI_Alltoallv","MPI_Alltoallv_init","MPI_Alltoallw","MPI_Alltoallw_init","MPI_Attr_delete","MPI_Attr_get","MPI_Attr_put","MPI_Barrier","MPI_Barrier_init","MPI_Bcast","MPI_Bcast_init","MPI_Bsend","MPI_Bsend_init","MPI_Buffer_attach","MPI_Buffer_detach","MPI_COMM_DUP_FN","MPI_COMM_NULL_COPY_FN","MPI_COMM_NULL_DELETE_FN","MPI_CONVERSION_FN_NULL","MPI_Cancel","MPI_Cart_coords","MPI_Cart_create","MPI_Cart_get","MPI_Cart_map","MPI_Cart_rank","MPI_Cart_shift","MPI_Cart_sub","MPI_Cartdim_get","MPI_Close_port","MPI_Comm_accept","MPI_Comm_c2f","MPI_Comm_call_errhandler","MPI_Comm_compare","MPI_Comm_connect","MPI_Comm_create","MPI_Comm_create_errhandler","MPI_Comm_create_from_group","MPI_Comm_create_group","MPI_Comm_create_keyval","MPI_Comm_delete_attr","MPI_Comm_disconnect","MPI_Comm_dup","MPI_Comm_dup_with_info","MPI_Comm_f2c","MPI_Comm_free","MPI_Comm_free_keyval","MPI_Comm_get_attr","MPI_Comm_get_errhandler","MPI_Comm_get_info","MPI_Comm_get_name","MPI_Comm_get_parent","MPI_Comm_group","MPI_Comm_idup","MPI_Comm_idup_with_info","MPI_Comm_join","MPI_Comm_rank","MPI_Comm_remote_group","MPI_Comm_remote_size","MPI_Comm_set_attr","MPI_Comm_set_errhandler","MPI_Comm_set_info","MPI_Comm_set_name","MPI_Comm_size","MPI_Comm_spawn","MPI_Comm_spawn_multiple","MPI_Comm_split","MPI_Comm_split_type","MPI_Comm_test_inter","MPI_Compare_and_swap","MPI_DUP_FN","MPI_Dims_create","MPI_Dist_graph_create","MPI_Dist_graph_create_adjacent","MPI_Dist_graph_neighbors","MPI_Dist_graph_neighbors_count","MPI_Errhandler_c2f","MPI_Errhandler_create","MPI_Errhandler_f2c","MPI_Errhandler_free","MPI_Errhandler_get","MPI_Errhandler_set","MPI_Error_class","MPI_Error_string","MPI_Exscan","MPI_Exscan_init","MPI_Fetch_and_op","MPI_File_c2f","MPI_File_call_errhandler","MPI_File_close","MPI_File_create_errhandler","MPI_File_delete","MPI_File_f2c","MPI_File_get_amode","MPI_File_get_atomicity","MPI_File_get_byte_offset","MPI_File_get_errhandler","MPI_File_get_group","MPI_File_get_info","MPI_File_get_position","MPI_File_get_position_shared","MPI_File_get_size","MPI_File_get_type_extent","MPI_File_get_view","MPI_File_iread","MPI_File_iread_all","MPI_File_iread_at","MPI_File_iread_at_all","MPI_File_iread_shared","MPI_File_iwrite","MPI_File_iwrite_all","MPI_File_iwrite_at","MPI_File_iwrite_at_all","MPI_File_iwrite_shared","MPI_File_open","MPI_File_preallocate","MPI_File_read","MPI_File_read_all","MPI_File_read_all_begin","MPI_File_read_all_end","MPI_File_read_at","MPI_File_read_at_all","MPI_File_read_at_all_begin","MPI_File_read_at_all_end","MPI_File_read_ordered","MPI_File_read_ordered_begin","MPI_File_read_ordered_end","MPI_File_read_shared","MPI_File_seek","MPI_File_seek_shared","MPI_File_set_atomicity","MPI_File_set_errhandler","MPI_File_set_info","MPI_File_set_size","MPI_File_set_view","MPI_File_sync","MPI_File_write","MPI_File_write_all","MPI_File_write_all_begin","MPI_File_write_all_end","MPI_File_write_at","MPI_File_write_at_all","MPI_File_write_at_all_begin","MPI_File_write_at_all_end","MPI_File_write_ordered","MPI_File_write_ordered_begin","MPI_File_write_ordered_end","MPI_File_write_shared","MPI_Finalize","MPI_Finalized","MPI_Free_mem","MPI_Gather","MPI_Gather_init","MPI_Gatherv","MPI_Gatherv_init","MPI_Get","MPI_Get_accumulate","MPI_Get_address","MPI_Get_count","MPI_Get_elements","MPI_Get_elements_x","MPI_Get_library_version","MPI_Get_processor_name","MPI_Get_version","MPI_Graph_create","MPI_Graph_get","MPI_Graph_map","MPI_Graph_neighbors","MPI_Graph_neighbors_count","MPI_Graphdims_get","MPI_Grequest_complete","MPI_Grequest_start","MPI_Group_c2f","MPI_Group_compare","MPI_Group_difference","MPI_Group_excl","MPI_Group_f2c","MPI_Group_free","MPI_Group_from_session_pset","MPI_Group_incl","MPI_Group_intersection","MPI_Group_range_excl","MPI_Group_range_incl","MPI_Group_rank","MPI_Group_size","MPI_Group_translate_ranks","MPI_Group_union","MPI_Iallgather","MPI_Iallgatherv","MPI_Iallreduce","MPI_Ialltoall","MPI_Ialltoallv","MPI_Ialltoallw","MPI_Ibarrier","MPI_Ibcast","MPI_Ibsend","MPI_Iexscan","MPI_Igather","MPI_Igatherv","MPI_Improbe","MPI_Imrecv","MPI_Ineighbor_allgather","MPI_Ineighbor_allgatherv","MPI_Ineighbor_alltoall","MPI_Ineighbor_alltoallv","MPI_Ineighbor_alltoallw","MPI_Info_c2f","MPI_Info_create","MPI_Info_create_env","MPI_Info_delete","MPI_Info_dup","MPI_Info_f2c","MPI_Info_free","MPI_Info_get","MPI_Info_get_nkeys","MPI_Info_get_nthkey","MPI_Info_get_string","MPI_Info_get_valuelen","MPI_Info_set","MPI_Init","MPI_Init_thread","MPI_Initialized","MPI_Intercomm_create","MPI_Intercomm_create_from_groups","MPI_Intercomm_merge","MPI_Iprobe","MPI_Irecv","MPI_Ireduce","MPI_Ireduce_scatter","MPI_Ireduce_scatter_block","MPI_Irsend","MPI_Is_thread_main","MPI_Iscan","MPI_Iscatter","MPI_Iscatterv","MPI_Isend","MPI_Isendrecv","MPI_Isendrecv_replace","MPI_Issend","MPI_Keyval_create","MPI_Keyval_free","MPI_Lookup_name","MPI_Message_c2f","MPI_Message_f2c","MPI_Mprobe","MPI_Mrecv","MPI_NULL_COPY_FN","MPI_NULL_DELETE_FN","MPI_Neighbor_allgather","MPI_Neighbor_allgather_init","MPI_Neighbor_allgatherv","MPI_Neighbor_allgatherv_init","MPI_Neighbor_alltoall","MPI_Neighbor_alltoall_init","MPI_Neighbor_alltoallv","MPI_Neighbor_alltoallv_init","MPI_Neighbor_alltoallw","MPI_Neighbor_alltoallw_init","MPI_Op_c2f","MPI_Op_commutative","MPI_Op_create","MPI_Op_f2c","MPI_Op_free","MPI_Open_port","MPI_Pack","MPI_Pack_external","MPI_Pack_external_size","MPI_Pack_size","MPI_Parrived","MPI_Pcontrol","MPI_Pready","MPI_Pready_list","MPI_Pready_range","MPI_Precv_init","MPI_Probe","MPI_Psend_init","MPI_Publish_name","MPI_Put","MPI_Query_thread","MPI_Raccumulate","MPI_Recv","MPI_Recv_init","MPI_Reduce","MPI_Reduce_init","MPI_Reduce_local","MPI_Reduce_scatter","MPI_Reduce_scatter_block","MPI_Reduce_scatter_block_init","MPI_Reduce_scatter_init","MPI_Register_datarep","MPI_Request_c2f","MPI_Request_f2c","MPI_Request_free","MPI_Request_get_status","MPI_Rget","MPI_Rget_accumulate","MPI_Rput","MPI_Rsend","MPI_Rsend_init","MPI_Scan","MPI_Scan_init","MPI_Scatter","MPI_Scatter_init","MPI_Scatterv","MPI_Scatterv_init","MPI_Send","MPI_Send_init","MPI_Sendrecv","MPI_Sendrecv_replace","MPI_Session_c2f","MPI_Session_call_errhandler","MPI_Session_create_errhandler","MPI_Session_f2c","MPI_Session_finalize","MPI_Session_get_errhandler","MPI_Session_get_info","MPI_Session_get_nth_pset","MPI_Session_get_num_psets","MPI_Session_get_pset_info","MPI_Session_init","MPI_Session_set_errhandler","MPI_Session_set_info","MPI_Ssend","MPI_Ssend_init","MPI_Start","MPI_Startall","MPI_Status_c2f","MPI_Status_c2f08","MPI_Status_f082c","MPI_Status_f082f","MPI_Status_f2c","MPI_Status_f2f08","MPI_Status_set_cancelled","MPI_Status_set_elements","MPI_Status_set_elements_x","MPI_TYPE_DUP_FN","MPI_TYPE_NULL_COPY_FN","MPI_TYPE_NULL_DELETE_FN","MPI_T_category_changed","MPI_T_category_get_categories","MPI_T_category_get_cvars","MPI_T_category_get_index","MPI_T_category_get_info","MPI_T_category_get_num","MPI_T_category_get_pvars","MPI_T_cvar_get_index","MPI_T_cvar_get_info","MPI_T_cvar_get_num","MPI_T_cvar_handle_alloc","MPI_T_cvar_handle_free","MPI_T_cvar_read","MPI_T_cvar_write","MPI_T_enum_get_info","MPI_T_enum_get_item","MPI_T_finalize","MPI_T_init_thread","MPI_T_pvar_get_index","MPI_T_pvar_get_info","MPI_T_pvar_get_num","MPI_T_pvar_handle_alloc","MPI_T_pvar_handle_free","MPI_T_pvar_read","MPI_T_pvar_readreset","MPI_T_pvar_reset","MPI_T_pvar_session_create","MPI_T_pvar_session_free","MPI_T_pvar_start","MPI_T_pvar_stop","MPI_T_pvar_write","MPI_Test","MPI_Test_cancelled","MPI_Testall","MPI_Testany","MPI_Testsome","MPI_Topo_test","MPI_Type_c2f","MPI_Type_commit","MPI_Type_contiguous","MPI_Type_create_darray","MPI_Type_create_f90_complex","MPI_Type_create_f90_integer","MPI_Type_create_f90_real","MPI_Type_create_hindexed","MPI_Type_create_hindexed_block","MPI_Type_create_hvector","MPI_Type_create_indexed_block","MPI_Type_create_keyval","MPI_Type_create_resized","MPI_Type_create_struct","MPI_Type_create_subarray","MPI_Type_delete_attr","MPI_Type_dup","MPI_Type_extent","MPI_Type_f2c","MPI_Type_free","MPI_Type_free_keyval","MPI_Type_get_attr","MPI_Type_get_contents","MPI_Type_get_envelope","MPI_Type_get_extent","MPI_Type_get_extent_x","MPI_Type_get_name","MPI_Type_get_true_extent","MPI_Type_get_true_extent_x","MPI_Type_hindexed","MPI_Type_hvector","MPI_Type_indexed","MPI_Type_lb","MPI_Type_match_size","MPI_Type_set_attr","MPI_Type_set_name","MPI_Type_size","MPI_Type_size_x","MPI_Type_struct","MPI_Type_ub","MPI_Type_vector","MPI_Unpack","MPI_Unpack_external","MPI_Unpublish_name","MPI_WIN_DUP_FN","MPI_WIN_NULL_COPY_FN","MPI_WIN_NULL_DELETE_FN","MPI_WTICK_F90","MPI_WTIME_F90","MPI_Wait","MPI_Waitall","MPI_Waitany","MPI_Waitsome","MPI_Win_allocate","MPI_Win_allocate_shared","MPI_Win_attach","MPI_Win_c2f","MPI_Win_call_errhandler","MPI_Win_complete","MPI_Win_create","MPI_Win_create_dynamic","MPI_Win_create_errhandler","MPI_Win_create_keyval","MPI_Win_delete_attr","MPI_Win_detach","MPI_Win_f2c","MPI_Win_fence","MPI_Win_flush","MPI_Win_flush_all","MPI_Win_flush_local","MPI_Win_flush_local_all","MPI_Win_free","MPI_Win_free_keyval","MPI_Win_get_attr","MPI_Win_get_errhandler","MPI_Win_get_group","MPI_Win_get_info","MPI_Win_get_name","MPI_Win_lock","MPI_Win_lock_all","MPI_Win_post","MPI_Win_set_attr","MPI_Win_set_errhandler","MPI_Win_set_info","MPI_Win_set_name","MPI_Win_shared_query","MPI_Win_start","MPI_Win_sync","MPI_Win_test","MPI_Win_unlock","MPI_Win_unlock_all","MPI_Win_wait","MPI_Wtick","MPI_Wtime","NBC_Comm_neighbors","NBC_Comm_neighbors_count","NBC_Error","NBC_Error.constprop.0:0x12d820","NBC_Error.constprop.0:0x12e380","NBC_Error.constprop.0:0x12ee10","NBC_Error.constprop.0:0x130de0","NBC_Error.constprop.0:0x138c20","NBC_Error.constprop.0:0x13a930","NBC_Error.constprop.0:0x13bee0","NBC_Init_comm","NBC_Progress","NBC_Return_handle","NBC_Sched_barrier","NBC_Sched_commit","NBC_Sched_copy","NBC_Sched_local_recv","NBC_Sched_local_send","NBC_Sched_op","NBC_Sched_recv","NBC_Sched_send","NBC_Sched_unpack","NBC_Schedule_request","NBC_Start","NBC_Start_round","OMPI_Affinity_str","OMPI_Affinity_str.cold","OMPI_C_MPI_COMM_DUP_FN","OMPI_C_MPI_COMM_NULL_COPY_FN","OMPI_C_MPI_COMM_NULL_DELETE_FN","OMPI_C_MPI_DUP_FN","OMPI_C_MPI_NULL_COPY_FN","OMPI_C_MPI_NULL_DELETE_FN","OMPI_C_MPI_TYPE_DUP_FN","OMPI_C_MPI_TYPE_NULL_COPY_FN","OMPI_C_MPI_TYPE_NULL_DELETE_FN","OMPI_C_MPI_WIN_DUP_FN","OMPI_C_MPI_WIN_NULL_COPY_FN","OMPI_C_MPI_WIN_NULL_DELETE_FN","OMPI_TEST_FORTRAN_CONSTANTS","PMPIX_Comm_ack_failed","PMPIX_Comm_ack_failed.cold","PMPIX_Comm_agree","PMPIX_Comm_agree.cold","PMPIX_Comm_failure_ack","PMPIX_Comm_failure_ack.cold","PMPIX_Comm_failure_get_acked","PMPIX_Comm_failure_get_acked.cold","PMPIX_Comm_get_failed","PMPIX_Comm_get_failed.cold","PMPIX_Comm_iagree","PMPIX_Comm_iagree.cold","PMPIX_Comm_is_revoked","PMPIX_Comm_revoke","PMPIX_Comm_revoke.cold","PMPIX_Comm_shrink","PMPIX_Comm_shrink.cold","PMPI_Abort","PMPI_Accumulate","PMPI_Accumulate.cold","PMPI_Add_error_class","PMPI_Add_error_class.cold","PMPI_Add_error_code","PMPI_Add_error_code.cold","PMPI_Add_error_string","PMPI_Address","PMPI_Allgather","PMPI_Allgather.cold","PMPI_Allgather_init","PMPI_Allgather_init.cold","PMPI_Allgatherv","PMPI_Allgatherv.cold","PMPI_Allgatherv_init","PMPI_Allgatherv_init.cold","PMPI_Alloc_mem","PMPI_Allreduce","PMPI_Allreduce.cold","PMPI_Allreduce_init","PMPI_Allreduce_init.cold","PMPI_Alltoall","PMPI_Alltoall.cold","PMPI_Alltoall_init","PMPI_Alltoall_init.cold","PMPI_Alltoallv","PMPI_Alltoallv.cold","PMPI_Alltoallv_init","PMPI_Alltoallv_init.cold","PMPI_Alltoallw","PMPI_Alltoallw.cold","PMPI_Alltoallw_init","PMPI_Alltoallw_init.cold","PMPI_Attr_delete","PMPI_Attr_get","PMPI_Attr_get.cold","PMPI_Attr_put","PMPI_Barrier","PMPI_Barrier.cold","PMPI_Barrier_init","PMPI_Barrier_init.cold","PMPI_Bcast","PMPI_Bcast.cold","PMPI_Bcast_init","PMPI_Bcast_init.cold","PMPI_Bsend","PMPI_Bsend.cold","PMPI_Bsend_init","PMPI_Bsend_init.cold","PMPI_Buffer_attach","PMPI_Buffer_detach","PMPI_Cancel","PMPI_Cancel.cold","PMPI_Cart_coords","PMPI_Cart_coords.cold","PMPI_Cart_create","PMPI_Cart_create.cold","PMPI_Cart_get","PMPI_Cart_get.cold","PMPI_Cart_map","PMPI_Cart_map.cold","PMPI_Cart_rank","PMPI_Cart_rank.cold","PMPI_Cart_shift","PMPI_Cart_shift.cold","PMPI_Cart_sub","PMPI_Cart_sub.cold","PMPI_Cartdim_get","PMPI_Cartdim_get.cold","PMPI_Close_port","PMPI_Close_port.cold","PMPI_Comm_accept","PMPI_Comm_accept.cold","PMPI_Comm_c2f","PMPI_Comm_call_errhandler","PMPI_Comm_call_errhandler.cold","PMPI_Comm_compare","PMPI_Comm_compare.cold","PMPI_Comm_connect","PMPI_Comm_connect.cold","PMPI_Comm_create","PMPI_Comm_create.cold","PMPI_Comm_create_errhandler","PMPI_Comm_create_from_group","PMPI_Comm_create_group","PMPI_Comm_create_group.cold","PMPI_Comm_create_keyval","PMPI_Comm_delete_attr","PMPI_Comm_disconnect","PMPI_Comm_dup","PMPI_Comm_dup.cold","PMPI_Comm_dup_with_info","PMPI_Comm_dup_with_info.cold","PMPI_Comm_f2c","PMPI_Comm_free","PMPI_Comm_free.cold","PMPI_Comm_free_keyval","PMPI_Comm_get_attr","PMPI_Comm_get_errhandler","PMPI_Comm_get_info","PMPI_Comm_get_name","PMPI_Comm_get_parent","PMPI_Comm_group","PMPI_Comm_group.cold","PMPI_Comm_idup","PMPI_Comm_idup.cold","PMPI_Comm_idup_with_info","PMPI_Comm_idup_with_info.cold","PMPI_Comm_join","PMPI_Comm_join.cold","PMPI_Comm_rank","PMPI_Comm_remote_group","PMPI_Comm_remote_size","PMPI_Comm_set_attr","PMPI_Comm_set_errhandler","PMPI_Comm_set_info","PMPI_Comm_set_name","PMPI_Comm_set_name.cold","PMPI_Comm_size","PMPI_Comm_spawn","PMPI_Comm_spawn.cold","PMPI_Comm_spawn_multiple","PMPI_Comm_spawn_multiple.cold","PMPI_Comm_split","PMPI_Comm_split.cold","PMPI_Comm_split_type","PMPI_Comm_split_type.cold","PMPI_Comm_test_inter","PMPI_Compare_and_swap","PMPI_Compare_and_swap.cold","PMPI_Dims_create","PMPI_Dist_graph_create","PMPI_Dist_graph_create.cold","PMPI_Dist_graph_create_adjacent","PMPI_Dist_graph_create_adjacent.cold","PMPI_Dist_graph_neighbors","PMPI_Dist_graph_neighbors.cold","PMPI_Dist_graph_neighbors_count","PMPI_Dist_graph_neighbors_count.cold","PMPI_Errhandler_c2f","PMPI_Errhandler_create","PMPI_Errhandler_f2c","PMPI_Errhandler_free","PMPI_Errhandler_get","PMPI_Errhandler_set","PMPI_Error_class","PMPI_Error_class.cold","PMPI_Error_string","PMPI_Error_string.cold","PMPI_Exscan","PMPI_Exscan.cold","PMPI_Exscan_init","PMPI_Exscan_init.cold","PMPI_Fetch_and_op","PMPI_Fetch_and_op.cold","PMPI_File_c2f","PMPI_File_call_errhandler","PMPI_File_call_errhandler.cold","PMPI_File_close","PMPI_File_close.cold","PMPI_File_create_errhandler","PMPI_File_delete","PMPI_File_delete.cold","PMPI_File_f2c","PMPI_File_get_amode","PMPI_File_get_amode.cold","PMPI_File_get_atomicity","PMPI_File_get_atomicity.cold","PMPI_File_get_byte_offset","PMPI_File_get_byte_offset.cold","PMPI_File_get_errhandler","PMPI_File_get_group","PMPI_File_get_group.cold","PMPI_File_get_info","PMPI_File_get_info.cold","PMPI_File_get_position","PMPI_File_get_position.cold","PMPI_File_get_position_shared","PMPI_File_get_position_shared.cold","PMPI_File_get_size","PMPI_File_get_size.cold","PMPI_File_get_type_extent","PMPI_File_get_type_extent.cold","PMPI_File_get_view","PMPI_File_get_view.cold","PMPI_File_iread","PMPI_File_iread.cold","PMPI_File_iread_all","PMPI_File_iread_all.cold","PMPI_File_iread_at","PMPI_File_iread_at.cold","PMPI_File_iread_at_all","PMPI_File_iread_at_all.cold","PMPI_File_iread_shared","PMPI_File_iread_shared.cold","PMPI_File_iwrite","PMPI_File_iwrite.cold","PMPI_File_iwrite_all","PMPI_File_iwrite_all.cold","PMPI_File_iwrite_at","PMPI_File_iwrite_at.cold","PMPI_File_iwrite_at_all","PMPI_File_iwrite_at_all.cold","PMPI_File_iwrite_shared","PMPI_File_iwrite_shared.cold","PMPI_File_open","PMPI_File_open.cold","PMPI_File_preallocate","PMPI_File_preallocate.cold","PMPI_File_read","PMPI_File_read.cold","PMPI_File_read_all","PMPI_File_read_all.cold","PMPI_File_read_all_begin","PMPI_File_read_all_begin.cold","PMPI_File_read_all_end","PMPI_File_read_all_end.cold","PMPI_File_read_at","PMPI_File_read_at.cold","PMPI_File_read_at_all","PMPI_File_read_at_all.cold","PMPI_File_read_at_all_begin","PMPI_File_read_at_all_begin.cold","PMPI_File_read_at_all_end","PMPI_File_read_at_all_end.cold","PMPI_File_read_ordered","PMPI_File_read_ordered.cold","PMPI_File_read_ordered_begin","PMPI_File_read_ordered_begin.cold","PMPI_File_read_ordered_end","PMPI_File_read_ordered_end.cold","PMPI_File_read_shared","PMPI_File_read_shared.cold","PMPI_File_seek","PMPI_File_seek.cold","PMPI_File_seek_shared","PMPI_File_seek_shared.cold","PMPI_File_set_atomicity","PMPI_File_set_atomicity.cold","PMPI_File_set_errhandler","PMPI_File_set_info","PMPI_File_set_info.cold","PMPI_File_set_size","PMPI_File_set_size.cold","PMPI_File_set_view","PMPI_File_set_view.cold","PMPI_File_sync","PMPI_File_sync.cold","PMPI_File_write","PMPI_File_write.cold","PMPI_File_write_all","PMPI_File_write_all.cold","PMPI_File_write_all_begin","PMPI_File_write_all_begin.cold","PMPI_File_write_all_end","PMPI_File_write_all_end.cold","PMPI_File_write_at","PMPI_File_write_at.cold","PMPI_File_write_at_all","PMPI_File_write_at_all.cold","PMPI_File_write_at_all_begin","PMPI_File_write_at_all_begin.cold","PMPI_File_write_at_all_end","PMPI_File_write_at_all_end.cold","PMPI_File_write_ordered","PMPI_File_write_ordered.cold","PMPI_File_write_ordered_begin","PMPI_File_write_ordered_begin.cold","PMPI_File_write_ordered_end","PMPI_File_write_ordered_end.cold","PMPI_File_write_shared","PMPI_File_write_shared.cold","PMPI_Finalize","PMPI_Finalized","PMPI_Free_mem","PMPI_Gather","PMPI_Gather.cold","PMPI_Gather_init","PMPI_Gather_init.cold","PMPI_Gatherv","PMPI_Gatherv.cold","PMPI_Gatherv_init","PMPI_Gatherv_init.cold","PMPI_Get","PMPI_Get.cold","PMPI_Get_accumulate","PMPI_Get_accumulate.cold","PMPI_Get_address","PMPI_Get_count","PMPI_Get_elements","PMPI_Get_elements_x","PMPI_Get_library_version","PMPI_Get_processor_name","PMPI_Get_version","PMPI_Graph_create","PMPI_Graph_create.cold","PMPI_Graph_get","PMPI_Graph_get.cold","PMPI_Graph_map","PMPI_Graph_map.cold","PMPI_Graph_neighbors","PMPI_Graph_neighbors.cold","PMPI_Graph_neighbors_count","PMPI_Graph_neighbors_count.cold","PMPI_Graphdims_get","PMPI_Graphdims_get.cold","PMPI_Grequest_complete","PMPI_Grequest_start","PMPI_Grequest_start.cold","PMPI_Group_c2f","PMPI_Group_compare","PMPI_Group_difference","PMPI_Group_difference.cold","PMPI_Group_excl","PMPI_Group_excl.cold","PMPI_Group_f2c","PMPI_Group_free","PMPI_Group_free.cold","PMPI_Group_from_session_pset","PMPI_Group_from_session_pset.cold","PMPI_Group_incl","PMPI_Group_incl.cold","PMPI_Group_intersection","PMPI_Group_intersection.cold","PMPI_Group_range_excl","PMPI_Group_range_excl.cold","PMPI_Group_range_incl","PMPI_Group_range_incl.cold","PMPI_Group_rank","PMPI_Group_size","PMPI_Group_translate_ranks","PMPI_Group_translate_ranks.cold","PMPI_Group_union","PMPI_Group_union.cold","PMPI_Iallgather","PMPI_Iallgather.cold","PMPI_Iallgatherv","PMPI_Iallgatherv.cold","PMPI_Iallreduce","PMPI_Iallreduce.cold","PMPI_Ialltoall","PMPI_Ialltoall.cold","PMPI_Ialltoallv","PMPI_Ialltoallv.cold","PMPI_Ialltoallw","PMPI_Ialltoallw.cold","PMPI_Ibarrier","PMPI_Ibarrier.cold","PMPI_Ibcast","PMPI_Ibcast.cold","PMPI_Ibsend","PMPI_Ibsend.cold","PMPI_Iexscan","PMPI_Iexscan.cold","PMPI_Igather","PMPI_Igather.cold","PMPI_Igatherv","PMPI_Igatherv.cold","PMPI_Improbe","PMPI_Improbe.cold","PMPI_Imrecv","PMPI_Imrecv.cold","PMPI_Ineighbor_allgather","PMPI_Ineighbor_allgather.cold","PMPI_Ineighbor_allgatherv","PMPI_Ineighbor_allgatherv.cold","PMPI_Ineighbor_alltoall","PMPI_Ineighbor_alltoall.cold","PMPI_Ineighbor_alltoallv","PMPI_Ineighbor_alltoallv.cold","PMPI_Ineighbor_alltoallw","PMPI_Ineighbor_alltoallw.cold","PMPI_Info_c2f","PMPI_Info_create","PMPI_Info_create_env","PMPI_Info_create_env.cold","PMPI_Info_delete","PMPI_Info_delete.cold","PMPI_Info_dup","PMPI_Info_dup.cold","PMPI_Info_f2c","PMPI_Info_free","PMPI_Info_free.cold","PMPI_Info_get","PMPI_Info_get.cold","PMPI_Info_get_nkeys","PMPI_Info_get_nkeys.cold","PMPI_Info_get_nthkey","PMPI_Info_get_nthkey.cold","PMPI_Info_get_string","PMPI_Info_get_string.cold","PMPI_Info_get_valuelen","PMPI_Info_get_valuelen.cold","PMPI_Info_set","PMPI_Info_set.cold","PMPI_Init","PMPI_Init.cold","PMPI_Init_thread","PMPI_Init_thread.cold","PMPI_Initialized","PMPI_Intercomm_create","PMPI_Intercomm_create.cold","PMPI_Intercomm_create_from_groups","PMPI_Intercomm_merge","PMPI_Intercomm_merge.cold","PMPI_Iprobe","PMPI_Iprobe.cold","PMPI_Irecv","PMPI_Irecv.cold","PMPI_Ireduce","PMPI_Ireduce.cold","PMPI_Ireduce_scatter","PMPI_Ireduce_scatter.cold","PMPI_Ireduce_scatter_block","PMPI_Ireduce_scatter_block.cold","PMPI_Irsend","PMPI_Irsend.cold","PMPI_Is_thread_main","PMPI_Iscan","PMPI_Iscan.cold","PMPI_Iscatter","PMPI_Iscatter.cold","PMPI_Iscatterv","PMPI_Iscatterv.cold","PMPI_Isend","PMPI_Isend.cold","PMPI_Isendrecv","PMPI_Isendrecv.cold","PMPI_Isendrecv_replace","PMPI_Isendrecv_replace.cold","PMPI_Issend","PMPI_Issend.cold","PMPI_Keyval_create","PMPI_Keyval_free","PMPI_Lookup_name","PMPI_Lookup_name.cold","PMPI_Message_c2f","PMPI_Message_f2c","PMPI_Mprobe","PMPI_Mprobe.cold","PMPI_Mrecv","PMPI_Mrecv.cold","PMPI_Neighbor_allgather","PMPI_Neighbor_allgather.cold","PMPI_Neighbor_allgather_init","PMPI_Neighbor_allgather_init.cold","PMPI_Neighbor_allgatherv","PMPI_Neighbor_allgatherv.cold","PMPI_Neighbor_allgatherv_init","PMPI_Neighbor_allgatherv_init.cold","PMPI_Neighbor_alltoall","PMPI_Neighbor_alltoall.cold","PMPI_Neighbor_alltoall_init","PMPI_Neighbor_alltoall_init.cold","PMPI_Neighbor_alltoallv","PMPI_Neighbor_alltoallv.cold","PMPI_Neighbor_alltoallv_init","PMPI_Neighbor_alltoallv_init.cold","PMPI_Neighbor_alltoallw","PMPI_Neighbor_alltoallw.cold","PMPI_Neighbor_alltoallw_init","PMPI_Neighbor_alltoallw_init.cold","PMPI_Op_c2f","PMPI_Op_commutative","PMPI_Op_create","PMPI_Op_f2c","PMPI_Op_free","PMPI_Open_port","PMPI_Open_port.cold","PMPI_Pack","PMPI_Pack.cold","PMPI_Pack_external","PMPI_Pack_external.cold","PMPI_Pack_external_size","PMPI_Pack_external_size.cold","PMPI_Pack_size","PMPI_Parrived","PMPI_Parrived.cold","PMPI_Pcontrol","PMPI_Pready","PMPI_Pready.cold","PMPI_Pready_list","PMPI_Pready_list.cold","PMPI_Pready_range","PMPI_Pready_range.cold","PMPI_Precv_init","PMPI_Precv_init.cold","PMPI_Probe","PMPI_Probe.cold","PMPI_Psend_init","PMPI_Psend_init.cold","PMPI_Publish_name","PMPI_Publish_name.cold","PMPI_Put","PMPI_Put.cold","PMPI_Query_thread","PMPI_Raccumulate","PMPI_Raccumulate.cold","PMPI_Recv","PMPI_Recv.cold","PMPI_Recv_init","PMPI_Recv_init.cold","PMPI_Reduce","PMPI_Reduce.cold","PMPI_Reduce_init","PMPI_Reduce_init.cold","PMPI_Reduce_local","PMPI_Reduce_local.cold","PMPI_Reduce_scatter","PMPI_Reduce_scatter.cold","PMPI_Reduce_scatter_block","PMPI_Reduce_scatter_block.cold","PMPI_Reduce_scatter_block_init","PMPI_Reduce_scatter_block_init.cold","PMPI_Reduce_scatter_init","PMPI_Reduce_scatter_init.cold","PMPI_Register_datarep","PMPI_Register_datarep.cold","PMPI_Request_c2f","PMPI_Request_f2c","PMPI_Request_free","PMPI_Request_free.cold","PMPI_Request_get_status","PMPI_Rget","PMPI_Rget.cold","PMPI_Rget_accumulate","PMPI_Rget_accumulate.cold","PMPI_Rput","PMPI_Rput.cold","PMPI_Rsend","PMPI_Rsend.cold","PMPI_Rsend_init","PMPI_Rsend_init.cold","PMPI_Scan","PMPI_Scan.cold","PMPI_Scan_init","PMPI_Scan_init.cold","PMPI_Scatter","PMPI_Scatter.cold","PMPI_Scatter_init","PMPI_Scatter_init.cold","PMPI_Scatterv","PMPI_Scatterv.cold","PMPI_Scatterv_init","PMPI_Scatterv_init.cold","PMPI_Send","PMPI_Send.cold","PMPI_Send_init","PMPI_Send_init.cold","PMPI_Sendrecv","PMPI_Sendrecv.cold","PMPI_Sendrecv_replace","PMPI_Sendrecv_replace.cold","PMPI_Session_c2f","PMPI_Session_call_errhandler","PMPI_Session_call_errhandler.cold","PMPI_Session_create_errhandler","PMPI_Session_f2c","PMPI_Session_finalize","PMPI_Session_finalize.cold","PMPI_Session_get_errhandler","PMPI_Session_get_errhandler.cold","PMPI_Session_get_info","PMPI_Session_get_nth_pset","PMPI_Session_get_nth_pset.cold","PMPI_Session_get_num_psets","PMPI_Session_get_num_psets.cold","PMPI_Session_get_pset_info","PMPI_Session_get_pset_info.cold","PMPI_Session_init","PMPI_Session_init.cold","PMPI_Session_set_errhandler","PMPI_Session_set_info","PMPI_Ssend","PMPI_Ssend.cold","PMPI_Ssend_init","PMPI_Ssend_init.cold","PMPI_Start","PMPI_Start.cold","PMPI_Startall","PMPI_Status_c2f","PMPI_Status_c2f08","PMPI_Status_f082c","PMPI_Status_f082f","PMPI_Status_f2c","PMPI_Status_f2f08","PMPI_Status_set_cancelled","PMPI_Status_set_elements","PMPI_Status_set_elements_x","PMPI_T_category_changed","PMPI_T_category_get_categories","PMPI_T_category_get_cvars","PMPI_T_category_get_index","PMPI_T_category_get_info","PMPI_T_category_get_num","PMPI_T_category_get_pvars","PMPI_T_cvar_get_index","PMPI_T_cvar_get_info","PMPI_T_cvar_get_num","PMPI_T_cvar_handle_alloc","PMPI_T_cvar_handle_free","PMPI_T_cvar_read","PMPI_T_cvar_write","PMPI_T_enum_get_info","PMPI_T_enum_get_item","PMPI_T_finalize","PMPI_T_init_thread","PMPI_T_pvar_get_index","PMPI_T_pvar_get_info","PMPI_T_pvar_get_num","PMPI_T_pvar_handle_alloc","PMPI_T_pvar_handle_free","PMPI_T_pvar_read","PMPI_T_pvar_readreset","PMPI_T_pvar_reset","PMPI_T_pvar_session_create","PMPI_T_pvar_session_free","PMPI_T_pvar_start","PMPI_T_pvar_stop","PMPI_T_pvar_write","PMPI_Test","PMPI_Test_cancelled","PMPI_Testall","PMPI_Testany","PMPI_Testsome","PMPI_Topo_test","PMPI_Type_c2f","PMPI_Type_commit","PMPI_Type_commit.cold","PMPI_Type_contiguous","PMPI_Type_contiguous.cold","PMPI_Type_create_darray","PMPI_Type_create_darray.cold","PMPI_Type_create_f90_complex","PMPI_Type_create_f90_complex.cold","PMPI_Type_create_f90_integer","PMPI_Type_create_f90_integer.cold","PMPI_Type_create_f90_real","PMPI_Type_create_f90_real.cold","PMPI_Type_create_hindexed","PMPI_Type_create_hindexed.cold","PMPI_Type_create_hindexed_block","PMPI_Type_create_hindexed_block.cold","PMPI_Type_create_hvector","PMPI_Type_create_hvector.cold","PMPI_Type_create_indexed_block","PMPI_Type_create_indexed_block.cold","PMPI_Type_create_keyval","PMPI_Type_create_keyval.cold","PMPI_Type_create_resized","PMPI_Type_create_resized.cold","PMPI_Type_create_struct","PMPI_Type_create_struct.cold","PMPI_Type_create_subarray","PMPI_Type_create_subarray.cold","PMPI_Type_delete_attr","PMPI_Type_dup","PMPI_Type_dup.cold","PMPI_Type_extent","PMPI_Type_f2c","PMPI_Type_free","PMPI_Type_free_keyval","PMPI_Type_get_attr","PMPI_Type_get_contents","PMPI_Type_get_envelope","PMPI_Type_get_envelope.cold","PMPI_Type_get_extent","PMPI_Type_get_extent_x","PMPI_Type_get_name","PMPI_Type_get_true_extent","PMPI_Type_get_true_extent_x","PMPI_Type_hindexed","PMPI_Type_hvector","PMPI_Type_indexed","PMPI_Type_indexed.cold","PMPI_Type_lb","PMPI_Type_match_size","PMPI_Type_set_attr","PMPI_Type_set_name","PMPI_Type_size","PMPI_Type_size_x","PMPI_Type_struct","PMPI_Type_ub","PMPI_Type_vector","PMPI_Type_vector.cold","PMPI_Unpack","PMPI_Unpack.cold","PMPI_Unpack_external","PMPI_Unpack_external.cold","PMPI_Unpublish_name","PMPI_Unpublish_name.cold","PMPI_Wait","PMPI_Waitall","PMPI_Waitany","PMPI_Waitsome","PMPI_Win_allocate","PMPI_Win_allocate_shared","PMPI_Win_allocate_shared.cold","PMPI_Win_attach","PMPI_Win_attach.cold","PMPI_Win_c2f","PMPI_Win_call_errhandler","PMPI_Win_call_errhandler.cold","PMPI_Win_complete","PMPI_Win_complete.cold","PMPI_Win_create","PMPI_Win_create_dynamic","PMPI_Win_create_errhandler","PMPI_Win_create_keyval","PMPI_Win_delete_attr","PMPI_Win_detach","PMPI_Win_detach.cold","PMPI_Win_f2c","PMPI_Win_fence","PMPI_Win_fence.cold","PMPI_Win_flush","PMPI_Win_flush.cold","PMPI_Win_flush_all","PMPI_Win_flush_all.cold","PMPI_Win_flush_local","PMPI_Win_flush_local.cold","PMPI_Win_flush_local_all","PMPI_Win_flush_local_all.cold","PMPI_Win_free","PMPI_Win_free.cold","PMPI_Win_free_keyval","PMPI_Win_get_attr","PMPI_Win_get_errhandler","PMPI_Win_get_group","PMPI_Win_get_group.cold","PMPI_Win_get_info","PMPI_Win_get_info.cold","PMPI_Win_get_name","PMPI_Win_get_name.cold","PMPI_Win_lock","PMPI_Win_lock.cold","PMPI_Win_lock_all","PMPI_Win_lock_all.cold","PMPI_Win_post","PMPI_Win_post.cold","PMPI_Win_set_attr","PMPI_Win_set_errhandler","PMPI_Win_set_info","PMPI_Win_set_info.cold","PMPI_Win_set_name","PMPI_Win_set_name.cold","PMPI_Win_shared_query","PMPI_Win_shared_query.cold","PMPI_Win_start","PMPI_Win_start.cold","PMPI_Win_sync","PMPI_Win_sync.cold","PMPI_Win_test","PMPI_Win_test.cold","PMPI_Win_unlock","PMPI_Win_unlock.cold","PMPI_Win_unlock_all","PMPI_Win_unlock_all.cold","PMPI_Win_wait","PMPI_Win_wait.cold","PMPI_Wtick","PMPI_Wtime","PQ_adjustElementKey","PQ_adjustKey","PQ_decreaseElementKey","PQ_decreaseKey","PQ_delete","PQ_deleteElement","PQ_deleteMax","PQ_deleteMaxElement","PQ_exit","PQ_findMaxElement","PQ_findMaxKey","PQ_free","PQ_increaseElementKey","PQ_increaseKey","PQ_init","PQ_insert","PQ_insertElement","PQ_isEmpty","V_OUTPUT_ERR","__SENDER_BASED_METHOD_COPY","__do_global_dtors_aux","__muldc3","__mulsc3","__mulxc3","__ompi_datatype_allocate","__ompi_datatype_create_from_args","__ompi_datatype_create_from_packed_description.isra.0","__ompi_datatype_pack_description.isra.0","__ompi_datatype_release","_convert_process_name_to_string:0x84d30","_convert_process_name_to_string:0x88400","_convert_string_to_jobid","_convert_string_to_process_name:0x84b80","_convert_string_to_process_name:0x88410","_jobid_print_for_opal","_mca_topo_base_select.part.0","_process_name_compare:0x849c0","_process_name_compare:0x88420","_process_name_print_for_opal:0x84790","_process_name_print_for_opal:0x88450","_release_fn","_vpid_print_for_opal","adapt_close","adapt_constant_reduce_context_construct","adapt_constant_reduce_context_destruct","adapt_module_construct","adapt_module_destruct","adapt_module_enable","adapt_open","adapt_register","alloc_window","append_frag_to_list","attr_subsys_construct","attr_subsys_construct.cold","attr_subsys_destruct","attribute_key_value_construct","avail_coll_compare","avail_io_compare:0x179350","avail_io_compare:0x1799d0","avail_op_compare","avx_component_close","avx_component_init_query","avx_component_op_query","avx_component_open","avx_component_register","backend_abort_aggregate","backend_abort_no_aggregate","basic_register","block","bootstrap_comm","btl_bandwidth_compare","btl_exclusivity_compare","btl_latency_sort_fn","buffer_cleanup","build_level_topology","build_level_topology.cold","build_process_tab_id","check","check_file","check_one_component","close_component","coll_base_comm_construct","coll_base_comm_destruct","coll_base_module_construct","coll_base_module_destruct","comm_method_string","compFunc","compare_attr_sequence","compare_ints","compare_pmix_proc","compare_ranks:0x1da9b0","compare_ranks:0x1ea3b0","compare_uint16_ts","complete_objs_callback","complete_vecs_callback","component_finalize","component_init","component_open","component_query","component_register","component_select","compute_gain","config_window","construct_peers","cost_calc","create_comm","create_dumb_tree","create_threads","create_win","cset2mapstr.constprop.0","cset2str.constprop.0","datatype_duplicate.isra.0","dbl_cmp_inc","delete_group_list","delete_query","delete_select","depth_first","deregister_tm_clones","destruct_topology_cache","dfs","display_sol","distance","dpm_convert.constprop.0","dpm_convert.constprop.1","dynamic_gen2_register","dynamic_register","era_agreement_comm_specific_constructor","era_agreement_comm_specific_destructor","era_agreement_info_constructor","era_agreement_info_destructor","era_bounce_event_cb","era_cb_fn","era_cb_fn.cold","era_check_status","era_combine_agreement_values","era_combine_agreement_values.cold","era_create_agreement_info","era_create_agreement_info.cold","era_decide","era_error_event_cb","era_iagree_req_complete_cb","era_iagree_req_complete_cb.cold","era_iagree_req_free","era_mark_process_failed","era_merge_new_dead_list","era_next_child","era_on_comm_rank_failure","era_tree_fn_binary","era_tree_fn_star","era_tree_fn_string","era_tree_remove_node","era_update_return_value","era_value_constructor","era_value_destructor","evhandler_dereg_callbk","evhandler_reg_callbk:0x7c580","evhandler_reg_callbk:0x884c0","f1","f2","fast_group","fd_event_cb","fd_heartbeat_rdma_cb","fd_heartbeat_recv_cb","fd_heartbeat_request.isra.0","fd_heartbeat_request_cb","fd_heartbeat_send.isra.0","fd_progress","fence_cbfunc","fence_release:0x820f0","fence_release:0x884b0","file_constructor","file_destructor","file_query","file_unquery","fill_null_pointers","fragment_sent_cb","frame_dummy","free_constraint_tree","free_list_child","free_objs_callback","free_tab_child","free_vecs_callback","ftagree_close","ftagree_register","generate_random_sol.isra.0","generate_work_units.constprop.0","generate_work_units.part.0","get_algorithm","get_dynamic_rule","get_module","get_print_name_buffer","get_rsrc_exists","group_list_asc","group_list_dsc","group_list_id","han_close","han_module_enable","han_open","han_register","hash_asc","hb_itor_search","ibcast_request_fini.isra.0","icompar","individual_register:0x16eff0","individual_register:0x21a490","info_constructor","info_destructor","init_by_array","init_query:0x17b980","init_query:0x21f830","init_query:0x233dc0","inter_register","io_base_request_constructor","ireduce_request_fini.isra.0","kpartition_build_level_topology.isra.0","libnbc_close","libnbc_comm_query","libnbc_init_query","libnbc_module_construct","libnbc_module_destruct","libnbc_module_enable","libnbc_open","libnbc_register","list_all_possible_groups","list_all_possible_groups.cold","lockedfile_register","match_one","mca_bml_base_btl_array_construct","mca_bml_base_btl_array_destruct","mca_bml_base_btl_array_reserve","mca_bml_base_close","mca_bml_base_endpoint_construct","mca_bml_base_endpoint_destruct","mca_bml_base_init","mca_bml_base_inited","mca_bml_base_open","mca_bml_base_register","mca_bml_r2_add_btl","mca_bml_r2_add_btls","mca_bml_r2_add_proc","mca_bml_r2_add_procs","mca_bml_r2_allocate_endpoint","mca_bml_r2_component_close","mca_bml_r2_component_fini","mca_bml_r2_component_init","mca_bml_r2_component_open","mca_bml_r2_component_register","mca_bml_r2_compute_endpoint_metrics","mca_bml_r2_compute_endpoint_metrics.cold","mca_bml_r2_del_btl","mca_bml_r2_del_proc_btl","mca_bml_r2_del_procs","mca_bml_r2_del_procs.cold","mca_bml_r2_endpoint_add_btl","mca_bml_r2_finalize","mca_bml_r2_register","mca_bml_r2_register_error","mca_coll_base_alltoall_intra_basic_inplace","mca_coll_base_alltoallv_intra_basic_inplace","mca_coll_base_colltype_to_str","mca_coll_base_comm_select","mca_coll_base_comm_unselect","mca_coll_base_find_available","mca_coll_base_name_to_colltype","mca_coll_base_reduce_local","mca_coll_basic_allgather_inter","mca_coll_basic_allgatherv_inter","mca_coll_basic_allreduce_inter","mca_coll_basic_allreduce_intra","mca_coll_basic_alltoall_inter","mca_coll_basic_alltoallv_inter","mca_coll_basic_alltoallw_inter","mca_coll_basic_alltoallw_intra","mca_coll_basic_alltoallw_intra_inplace.constprop.0","mca_coll_basic_barrier_inter_lin","mca_coll_basic_barrier_intra_log","mca_coll_basic_bcast_lin_inter","mca_coll_basic_bcast_log_inter","mca_coll_basic_bcast_log_intra","mca_coll_basic_comm_query","mca_coll_basic_exscan_inter","mca_coll_basic_exscan_intra","mca_coll_basic_gather_inter","mca_coll_basic_gatherv_inter","mca_coll_basic_gatherv_intra","mca_coll_basic_init_query","mca_coll_basic_module_enable","mca_coll_basic_neighbor_allgather","mca_coll_basic_neighbor_allgatherv","mca_coll_basic_neighbor_alltoall","mca_coll_basic_neighbor_alltoallv","mca_coll_basic_neighbor_alltoallw","mca_coll_basic_reduce_lin_inter","mca_coll_basic_reduce_log_inter","mca_coll_basic_reduce_log_intra","mca_coll_basic_reduce_scatter_block_inter","mca_coll_basic_reduce_scatter_block_intra","mca_coll_basic_reduce_scatter_inter","mca_coll_basic_reduce_scatter_intra","mca_coll_basic_scan_intra","mca_coll_basic_scatter_inter","mca_coll_basic_scatterv_inter","mca_coll_basic_scatterv_intra","mca_coll_ftagree_comm_query","mca_coll_ftagree_construct","mca_coll_ftagree_era_comm_finalize","mca_coll_ftagree_era_comm_init","mca_coll_ftagree_era_finalize","mca_coll_ftagree_era_init","mca_coll_ftagree_era_inter","mca_coll_ftagree_era_intra","mca_coll_ftagree_eta_intra","mca_coll_ftagree_iera_intra","mca_coll_ftagree_iera_intra.cold","mca_coll_ftagree_init_query","mca_coll_ftagree_module_construct","mca_coll_ftagree_module_destruct","mca_coll_ftagree_module_enable","mca_coll_han_algorithm_id_is_valid","mca_coll_han_algorithm_id_to_fn","mca_coll_han_algorithm_id_to_name","mca_coll_han_algorithm_name_to_id","mca_coll_han_allgather_intra","mca_coll_han_allgather_intra_dynamic","mca_coll_han_allgather_intra_simple","mca_coll_han_allgather_lb_task","mca_coll_han_allgather_lg_task","mca_coll_han_allgather_uag_task","mca_coll_han_allgatherv_intra_dynamic","mca_coll_han_allreduce_intra","mca_coll_han_allreduce_intra_dynamic","mca_coll_han_allreduce_intra_simple","mca_coll_han_allreduce_reproducible","mca_coll_han_allreduce_reproducible_decision","mca_coll_han_allreduce_t0_task","mca_coll_han_allreduce_t1_task","mca_coll_han_allreduce_t2_task","mca_coll_han_allreduce_t3_task","mca_coll_han_barrier_intra_dynamic","mca_coll_han_barrier_intra_simple","mca_coll_han_bcast_intra","mca_coll_han_bcast_intra_dynamic","mca_coll_han_bcast_intra_simple","mca_coll_han_bcast_t0_task","mca_coll_han_bcast_t1_task","mca_coll_han_comm_create","mca_coll_han_comm_create_new","mca_coll_han_comm_query","mca_coll_han_component_name_to_id","mca_coll_han_dump_dynamic_rules","mca_coll_han_free_algorithms","mca_coll_han_free_dynamic_rules","mca_coll_han_gather_intra","mca_coll_han_gather_intra_dynamic","mca_coll_han_gather_intra_simple","mca_coll_han_gather_lg_task","mca_coll_han_gather_ug_task","mca_coll_han_get_all_coll_modules","mca_coll_han_init_algorithms","mca_coll_han_init_dynamic_rules","mca_coll_han_init_query","mca_coll_han_is_coll_dynamic_implemented","mca_coll_han_module_construct","mca_coll_han_module_destruct","mca_coll_han_module_disable","mca_coll_han_reduce_intra","mca_coll_han_reduce_intra_dynamic","mca_coll_han_reduce_intra_simple","mca_coll_han_reduce_reproducible","mca_coll_han_reduce_reproducible_decision","mca_coll_han_reduce_t0_task","mca_coll_han_reduce_t1_task","mca_coll_han_scatter_intra","mca_coll_han_scatter_intra_dynamic","mca_coll_han_scatter_intra_simple","mca_coll_han_scatter_ls_task","mca_coll_han_scatter_us_task","mca_coll_han_topo_init","mca_coll_han_topo_lvl_name_to_id","mca_coll_han_topo_lvl_to_str","mca_coll_inter_allgather_inter","mca_coll_inter_allgatherv_inter","mca_coll_inter_allreduce_inter","mca_coll_inter_bcast_inter","mca_coll_inter_comm_query","mca_coll_inter_gather_inter","mca_coll_inter_gatherv_inter","mca_coll_inter_init_query","mca_coll_inter_module_construct","mca_coll_inter_module_destruct","mca_coll_inter_module_enable","mca_coll_inter_reduce_inter","mca_coll_inter_scatter_inter","mca_coll_inter_scatterv_inter","mca_coll_monitoring_allgather","mca_coll_monitoring_allgatherv","mca_coll_monitoring_allreduce","mca_coll_monitoring_alltoall","mca_coll_monitoring_alltoallv","mca_coll_monitoring_alltoallw","mca_coll_monitoring_barrier","mca_coll_monitoring_bcast","mca_coll_monitoring_component_close","mca_coll_monitoring_component_init","mca_coll_monitoring_component_open","mca_coll_monitoring_component_query","mca_coll_monitoring_component_register","mca_coll_monitoring_exscan","mca_coll_monitoring_gather","mca_coll_monitoring_gatherv","mca_coll_monitoring_iallgather","mca_coll_monitoring_iallgatherv","mca_coll_monitoring_iallreduce","mca_coll_monitoring_ialltoall","mca_coll_monitoring_ialltoallv","mca_coll_monitoring_ialltoallw","mca_coll_monitoring_ibarrier","mca_coll_monitoring_ibcast","mca_coll_monitoring_iexscan","mca_coll_monitoring_igather","mca_coll_monitoring_igatherv","mca_coll_monitoring_ineighbor_allgather","mca_coll_monitoring_ineighbor_allgatherv","mca_coll_monitoring_ineighbor_alltoall","mca_coll_monitoring_ineighbor_alltoallv","mca_coll_monitoring_ineighbor_alltoallw","mca_coll_monitoring_ireduce","mca_coll_monitoring_ireduce_scatter","mca_coll_monitoring_ireduce_scatter_block","mca_coll_monitoring_iscan","mca_coll_monitoring_iscatter","mca_coll_monitoring_iscatterv","mca_coll_monitoring_module_disable","mca_coll_monitoring_module_enable","mca_coll_monitoring_neighbor_allgather","mca_coll_monitoring_neighbor_allgatherv","mca_coll_monitoring_neighbor_alltoall","mca_coll_monitoring_neighbor_alltoallv","mca_coll_monitoring_neighbor_alltoallw","mca_coll_monitoring_reduce","mca_coll_monitoring_reduce_scatter","mca_coll_monitoring_reduce_scatter_block","mca_coll_monitoring_scan","mca_coll_monitoring_scatter","mca_coll_monitoring_scatterv","mca_coll_self_allgather_intra","mca_coll_self_allgatherv_intra","mca_coll_self_allreduce_intra","mca_coll_self_alltoall_intra","mca_coll_self_alltoallv_intra","mca_coll_self_alltoallw_intra","mca_coll_self_barrier_intra","mca_coll_self_bcast_intra","mca_coll_self_comm_query","mca_coll_self_exscan_intra","mca_coll_self_gather_intra","mca_coll_self_gatherv_intra","mca_coll_self_init_query","mca_coll_self_module_enable","mca_coll_self_reduce_intra","mca_coll_self_reduce_scatter_intra","mca_coll_self_scan_intra","mca_coll_self_scatter_intra","mca_coll_self_scatterv_intra","mca_coll_sm_allreduce_intra","mca_coll_sm_barrier_intra","mca_coll_sm_bcast_intra","mca_coll_sm_comm_query","mca_coll_sm_init_query","mca_coll_sm_module_construct","mca_coll_sm_module_destruct","mca_coll_sm_module_disable","mca_coll_sm_reduce_intra","mca_coll_sync_bcast","mca_coll_sync_comm_query","mca_coll_sync_exscan","mca_coll_sync_gather","mca_coll_sync_gatherv","mca_coll_sync_init_query","mca_coll_sync_module_construct","mca_coll_sync_module_destruct","mca_coll_sync_module_enable","mca_coll_sync_reduce","mca_coll_sync_reduce_scatter","mca_coll_sync_scan","mca_coll_sync_scatter","mca_coll_sync_scatterv","mca_coll_task_constructor","mca_coll_task_destructor","mca_coll_tuned_module_construct","mca_comm_cid_context_alloc","mca_comm_cid_context_construct","mca_comm_cid_context_destruct","mca_common_monitoring_add_procs","mca_common_monitoring_coll_a2a","mca_common_monitoring_coll_a2o","mca_common_monitoring_coll_cache_name","mca_common_monitoring_coll_cond_release","mca_common_monitoring_coll_finalize","mca_common_monitoring_coll_flush","mca_common_monitoring_coll_flush_all","mca_common_monitoring_coll_get_a2a_count","mca_common_monitoring_coll_get_a2a_size","mca_common_monitoring_coll_get_a2o_count","mca_common_monitoring_coll_get_a2o_size","mca_common_monitoring_coll_get_o2a_count","mca_common_monitoring_coll_get_o2a_size","mca_common_monitoring_coll_messages_notify","mca_common_monitoring_coll_new","mca_common_monitoring_coll_o2a","mca_common_monitoring_coll_release","mca_common_monitoring_coll_reset","mca_common_monitoring_comm_size_notify","mca_common_monitoring_finalize","mca_common_monitoring_flush.part.0","mca_common_monitoring_get_coll_count","mca_common_monitoring_get_coll_size","mca_common_monitoring_get_flush","mca_common_monitoring_get_osc_recv_count","mca_common_monitoring_get_osc_recv_size","mca_common_monitoring_get_osc_sent_count","mca_common_monitoring_get_osc_sent_size","mca_common_monitoring_get_pml_count","mca_common_monitoring_get_pml_size","mca_common_monitoring_init","mca_common_monitoring_notify_flush","mca_common_monitoring_output","mca_common_monitoring_record_coll","mca_common_monitoring_record_osc","mca_common_monitoring_record_pml","mca_common_monitoring_register","mca_common_monitoring_set_flush","mca_common_ompio_alloc_buf","mca_common_ompio_base_file_read_all","mca_common_ompio_buffer_alloc_fini","mca_common_ompio_buffer_alloc_init","mca_common_ompio_buffer_alloc_seg","mca_common_ompio_buffer_free_seg","mca_common_ompio_build_io_array","mca_common_ompio_cart_based_grouping","mca_common_ompio_check_gpu_buf","mca_common_ompio_create_groups","mca_common_ompio_create_incomplete_file_handle","mca_common_ompio_decode_datatype","mca_common_ompio_empty_print_queue","mca_common_ompio_file_close","mca_common_ompio_file_delete","mca_common_ompio_file_get_position","mca_common_ompio_file_get_size","mca_common_ompio_file_iread","mca_common_ompio_file_iread_all","mca_common_ompio_file_iread_at","mca_common_ompio_file_iread_at_all","mca_common_ompio_file_iwrite","mca_common_ompio_file_iwrite_all","mca_common_ompio_file_iwrite_at","mca_common_ompio_file_iwrite_at_all","mca_common_ompio_file_open","mca_common_ompio_file_read","mca_common_ompio_file_read_all","mca_common_ompio_file_read_all.part.0","mca_common_ompio_file_read_at","mca_common_ompio_file_read_at_all","mca_common_ompio_file_read_pipelined","mca_common_ompio_file_write","mca_common_ompio_file_write_all","mca_common_ompio_file_write_all.part.0","mca_common_ompio_file_write_at","mca_common_ompio_file_write_at_all","mca_common_ompio_file_write_pipelined","mca_common_ompio_finalize_initial_grouping","mca_common_ompio_finalize_split","mca_common_ompio_forced_grouping","mca_common_ompio_full_print_queue","mca_common_ompio_fview_based_grouping","mca_common_ompio_initialize_print_queue","mca_common_ompio_merge_groups","mca_common_ompio_merge_initial_groups","mca_common_ompio_prepare_to_group","mca_common_ompio_print_time_info","mca_common_ompio_progress","mca_common_ompio_register_print_entry","mca_common_ompio_register_progress","mca_common_ompio_release_buf","mca_common_ompio_request_alloc","mca_common_ompio_request_cancel","mca_common_ompio_request_construct","mca_common_ompio_request_destruct","mca_common_ompio_request_fini","mca_common_ompio_request_free","mca_common_ompio_request_init","mca_common_ompio_retain_initial_groups","mca_common_ompio_set_aggregator_props","mca_common_ompio_set_callbacks","mca_common_ompio_set_explicit_offset","mca_common_ompio_set_file_defaults","mca_common_ompio_set_view","mca_common_ompio_simple_grouping","mca_common_ompio_split_a_group","mca_common_ompio_split_initial_groups","mca_common_ompio_unregister_print_entry","mca_fbtl_base_check_atomicity","mca_fbtl_base_file_select","mca_fbtl_base_file_unselect","mca_fbtl_base_find_available","mca_fbtl_posix_check_atomicity","mca_fbtl_posix_component_file_query","mca_fbtl_posix_component_file_unquery","mca_fbtl_posix_component_init_query","mca_fbtl_posix_ipreadv","mca_fbtl_posix_ipwritev","mca_fbtl_posix_lock","mca_fbtl_posix_module_finalize","mca_fbtl_posix_module_init","mca_fbtl_posix_preadv","mca_fbtl_posix_progress","mca_fbtl_posix_pwritev","mca_fbtl_posix_request_free","mca_fbtl_posix_unlock","mca_fcoll_base_component_lookup","mca_fcoll_base_file_select","mca_fcoll_base_file_unselect","mca_fcoll_base_find_available","mca_fcoll_base_query_table","mca_fcoll_dynamic_component_file_query","mca_fcoll_dynamic_component_file_unquery","mca_fcoll_dynamic_component_init_query","mca_fcoll_dynamic_file_read_all","mca_fcoll_dynamic_file_write_all","mca_fcoll_dynamic_gen2_break_file_view","mca_fcoll_dynamic_gen2_component_file_query","mca_fcoll_dynamic_gen2_component_file_unquery","mca_fcoll_dynamic_gen2_component_init_query","mca_fcoll_dynamic_gen2_file_read_all","mca_fcoll_dynamic_gen2_file_write_all","mca_fcoll_dynamic_gen2_get_configuration","mca_fcoll_dynamic_gen2_module_finalize","mca_fcoll_dynamic_gen2_module_init","mca_fcoll_dynamic_gen2_split_iov_array","mca_fcoll_dynamic_module_finalize","mca_fcoll_dynamic_module_init","mca_fcoll_individual_component_file_query","mca_fcoll_individual_component_file_unquery","mca_fcoll_individual_component_init_query","mca_fcoll_individual_file_read_all","mca_fcoll_individual_file_write_all","mca_fcoll_individual_module_finalize","mca_fcoll_individual_module_init","mca_fcoll_vulcan_break_file_view","mca_fcoll_vulcan_component_file_query","mca_fcoll_vulcan_component_file_unquery","mca_fcoll_vulcan_component_init_query","mca_fcoll_vulcan_file_read_all","mca_fcoll_vulcan_file_write_all","mca_fcoll_vulcan_get_configuration","mca_fcoll_vulcan_module_finalize","mca_fcoll_vulcan_module_init","mca_fcoll_vulcan_split_iov_array","mca_fs_base_file_close","mca_fs_base_file_delete","mca_fs_base_file_get_size","mca_fs_base_file_select","mca_fs_base_file_set_size","mca_fs_base_file_sync","mca_fs_base_file_unselect","mca_fs_base_find_available","mca_fs_base_get_file_amode","mca_fs_base_get_file_perm","mca_fs_base_get_fstype","mca_fs_base_get_mpi_err","mca_fs_base_get_parent_dir","mca_fs_base_get_real_filename.constprop.0","mca_fs_ufs_component_file_query","mca_fs_ufs_component_file_unquery","mca_fs_ufs_component_init_query","mca_fs_ufs_file_open","mca_fs_ufs_module_finalize","mca_fs_ufs_module_init","mca_io_base_delete","mca_io_base_delete.cold","mca_io_base_file_select","mca_io_base_file_select.cold","mca_io_base_file_select.localalias","mca_io_base_find_available","mca_io_base_open","mca_io_base_register_datarep","mca_io_ompio_file_close","mca_io_ompio_file_get_amode","mca_io_ompio_file_get_atomicity","mca_io_ompio_file_get_byte_offset","mca_io_ompio_file_get_position","mca_io_ompio_file_get_position_shared","mca_io_ompio_file_get_size","mca_io_ompio_file_get_type_extent","mca_io_ompio_file_get_view","mca_io_ompio_file_iread","mca_io_ompio_file_iread_all","mca_io_ompio_file_iread_at","mca_io_ompio_file_iread_at_all","mca_io_ompio_file_iread_shared","mca_io_ompio_file_iwrite","mca_io_ompio_file_iwrite_all","mca_io_ompio_file_iwrite_at","mca_io_ompio_file_iwrite_at_all","mca_io_ompio_file_iwrite_shared","mca_io_ompio_file_open","mca_io_ompio_file_preallocate","mca_io_ompio_file_read","mca_io_ompio_file_read_all","mca_io_ompio_file_read_all_begin","mca_io_ompio_file_read_all_end","mca_io_ompio_file_read_at","mca_io_ompio_file_read_at_all","mca_io_ompio_file_read_at_all_begin","mca_io_ompio_file_read_at_all_end","mca_io_ompio_file_read_ordered","mca_io_ompio_file_read_ordered_begin","mca_io_ompio_file_read_ordered_end","mca_io_ompio_file_read_shared","mca_io_ompio_file_seek","mca_io_ompio_file_seek_shared","mca_io_ompio_file_set_atomicity","mca_io_ompio_file_set_size","mca_io_ompio_file_set_view","mca_io_ompio_file_sync","mca_io_ompio_file_write","mca_io_ompio_file_write_all","mca_io_ompio_file_write_all_begin","mca_io_ompio_file_write_all_end","mca_io_ompio_file_write_at","mca_io_ompio_file_write_at_all","mca_io_ompio_file_write_at_all_begin","mca_io_ompio_file_write_at_all_end","mca_io_ompio_file_write_ordered","mca_io_ompio_file_write_ordered_begin","mca_io_ompio_file_write_ordered_end","mca_io_ompio_file_write_shared","mca_io_ompio_get_mca_parameter_value","mca_monitoring_coll_construct","mca_monitoring_coll_destruct","mca_osc_monitoring_component_finish","mca_osc_monitoring_component_init","mca_osc_monitoring_component_query","mca_osc_monitoring_component_register","mca_osc_monitoring_component_select","mca_part_base_close","mca_part_base_finalize","mca_part_base_open","mca_part_base_precv_request_construct","mca_part_base_prequest_construct","mca_part_base_progress","mca_part_base_psend_request_construct","mca_part_base_register","mca_part_base_select","mca_part_base_select.cold","mca_part_persist_component_close","mca_part_persist_component_fini","mca_part_persist_component_init","mca_part_persist_component_open","mca_part_persist_component_register","mca_part_persist_free:0x1ee0d0","mca_part_persist_free:0x1ee3e0","mca_part_persist_parrived","mca_part_persist_pready","mca_part_persist_precv_init","mca_part_persist_precv_request_construct","mca_part_persist_progress","mca_part_persist_psend_init","mca_part_persist_psend_request_construct","mca_part_persist_request_construct","mca_part_persist_request_destruct","mca_part_persist_start:0x1ed610","mca_part_persist_start:0x1edf30","mca_part_persist_start:0x1ee240","mca_pml_base_bsend_attach","mca_pml_base_bsend_detach","mca_pml_base_bsend_fini","mca_pml_base_bsend_init","mca_pml_base_bsend_request_alloc","mca_pml_base_bsend_request_alloc_buf","mca_pml_base_bsend_request_fini","mca_pml_base_bsend_request_free","mca_pml_base_bsend_request_start","mca_pml_base_close","mca_pml_base_finalize","mca_pml_base_open","mca_pml_base_pml_check_selected","mca_pml_base_pml_check_selected_impl","mca_pml_base_pml_selected","mca_pml_base_progress","mca_pml_base_recv_request_construct","mca_pml_base_recv_request_destruct","mca_pml_base_register","mca_pml_base_request_construct","mca_pml_base_revoke_comm","mca_pml_base_select","mca_pml_base_select.cold","mca_pml_base_send_request_construct","mca_pml_base_send_request_destruct","mca_pml_bsend_alloc_segment","mca_pml_cm_add_comm","mca_pml_cm_add_procs","mca_pml_cm_cancel","mca_pml_cm_component_close","mca_pml_cm_component_fini","mca_pml_cm_component_init","mca_pml_cm_component_open","mca_pml_cm_component_register","mca_pml_cm_del_comm","mca_pml_cm_del_procs","mca_pml_cm_dump","mca_pml_cm_enable","mca_pml_cm_improbe","mca_pml_cm_imrecv","mca_pml_cm_iprobe","mca_pml_cm_irecv","mca_pml_cm_irecv_init","mca_pml_cm_isend","mca_pml_cm_isend_init","mca_pml_cm_mprobe","mca_pml_cm_mrecv","mca_pml_cm_probe","mca_pml_cm_recv","mca_pml_cm_recv_fast_completion","mca_pml_cm_recv_request_completion","mca_pml_cm_recv_request_construct","mca_pml_cm_recv_request_free","mca_pml_cm_request_construct","mca_pml_cm_request_destruct","mca_pml_cm_send","mca_pml_cm_send_request_completion","mca_pml_cm_send_request_construct","mca_pml_cm_send_request_free","mca_pml_cm_start","mca_pml_monitoring_add_comm","mca_pml_monitoring_add_procs","mca_pml_monitoring_component_finish","mca_pml_monitoring_component_init","mca_pml_monitoring_component_open","mca_pml_monitoring_del_comm","mca_pml_monitoring_del_procs","mca_pml_monitoring_dump","mca_pml_monitoring_enable","mca_pml_monitoring_improbe","mca_pml_monitoring_imrecv","mca_pml_monitoring_iprobe","mca_pml_monitoring_irecv","mca_pml_monitoring_irecv_init","mca_pml_monitoring_isend","mca_pml_monitoring_isend_init","mca_pml_monitoring_mprobe","mca_pml_monitoring_mrecv","mca_pml_monitoring_probe","mca_pml_monitoring_recv","mca_pml_monitoring_revoke_comm","mca_pml_monitoring_send","mca_pml_monitoring_start","mca_pml_ob1_accelerator_add_ipc_support","mca_pml_ob1_accelerator_fini","mca_pml_ob1_accelerator_init","mca_pml_ob1_accelerator_need_buffers","mca_pml_ob1_add_comm","mca_pml_ob1_add_procs","mca_pml_ob1_com_btl_comp","mca_pml_ob1_comm_construct","mca_pml_ob1_comm_destruct","mca_pml_ob1_comm_init_size","mca_pml_ob1_comm_proc_construct","mca_pml_ob1_comm_proc_destruct","mca_pml_ob1_comm_size_notify","mca_pml_ob1_component_close","mca_pml_ob1_component_fini","mca_pml_ob1_component_init","mca_pml_ob1_component_open","mca_pml_ob1_component_register","mca_pml_ob1_control_completion","mca_pml_ob1_copy_frag_completion","mca_pml_ob1_del_comm","mca_pml_ob1_del_procs","mca_pml_ob1_dump","mca_pml_ob1_dump_cant_match","mca_pml_ob1_dump_frag_list","mca_pml_ob1_dump_hdr","mca_pml_ob1_enable","mca_pml_ob1_enable_progress","mca_pml_ob1_error_handler","mca_pml_ob1_frag_completion","mca_pml_ob1_get_dtoh_stream","mca_pml_ob1_get_htod_stream","mca_pml_ob1_get_posted_recvq_size","mca_pml_ob1_get_unex_msgq_size","mca_pml_ob1_handle_cid","mca_pml_ob1_improbe","mca_pml_ob1_imrecv","mca_pml_ob1_imrecv.cold","mca_pml_ob1_iprobe","mca_pml_ob1_irecv","mca_pml_ob1_irecv_init","mca_pml_ob1_isend","mca_pml_ob1_isend_init","mca_pml_ob1_match_completion_free","mca_pml_ob1_merge_cant_match","mca_pml_ob1_mprobe","mca_pml_ob1_mrecv","mca_pml_ob1_mrecv.cold","mca_pml_ob1_peer_create","mca_pml_ob1_probe","mca_pml_ob1_process_pending_packets","mca_pml_ob1_process_pending_rdma","mca_pml_ob1_progress","mca_pml_ob1_progress_one_htod_event","mca_pml_ob1_put_completion:0x2057a0","mca_pml_ob1_put_completion:0x20bf00","mca_pml_ob1_rdma_btls","mca_pml_ob1_rdma_btls.cold","mca_pml_ob1_rdma_cuda_btls","mca_pml_ob1_rdma_cuda_btls.cold","mca_pml_ob1_rdma_frag_constructor","mca_pml_ob1_rdma_pipeline_btls","mca_pml_ob1_rdma_pipeline_btls.cold","mca_pml_ob1_rdma_pipeline_btls_count","mca_pml_ob1_rdma_pipeline_btls_count.cold","mca_pml_ob1_record_htod_event","mca_pml_ob1_recv","mca_pml_ob1_recv_ctl_completion","mca_pml_ob1_recv_frag_callback_ack","mca_pml_ob1_recv_frag_callback_cid","mca_pml_ob1_recv_frag_callback_fin","mca_pml_ob1_recv_frag_callback_frag","mca_pml_ob1_recv_frag_callback_match","mca_pml_ob1_recv_frag_callback_put","mca_pml_ob1_recv_frag_callback_rget","mca_pml_ob1_recv_frag_callback_rndv","mca_pml_ob1_recv_frag_match.isra.0","mca_pml_ob1_recv_frag_match_proc.isra.0","mca_pml_ob1_recv_req_start","mca_pml_ob1_recv_request_ack.isra.0","mca_pml_ob1_recv_request_ack_send_btl","mca_pml_ob1_recv_request_cancel","mca_pml_ob1_recv_request_construct","mca_pml_ob1_recv_request_destruct","mca_pml_ob1_recv_request_frag_copy_finished","mca_pml_ob1_recv_request_frag_copy_start","mca_pml_ob1_recv_request_free","mca_pml_ob1_recv_request_get_frag","mca_pml_ob1_recv_request_get_frag_failed","mca_pml_ob1_recv_request_matched_probe","mca_pml_ob1_recv_request_process_pending","mca_pml_ob1_recv_request_progress_frag","mca_pml_ob1_recv_request_progress_match","mca_pml_ob1_recv_request_progress_rget","mca_pml_ob1_recv_request_progress_rget.cold","mca_pml_ob1_recv_request_progress_rndv","mca_pml_ob1_recv_request_put_frag","mca_pml_ob1_recv_request_schedule_once","mca_pml_ob1_revoke_comm","mca_pml_ob1_revoke_comm.localalias","mca_pml_ob1_rget_completion:0x204ec0","mca_pml_ob1_rget_completion:0x209c10","mca_pml_ob1_rndv_completion","mca_pml_ob1_seg_alloc","mca_pml_ob1_seg_free","mca_pml_ob1_send","mca_pml_ob1_send_cid","mca_pml_ob1_send_control_any","mca_pml_ob1_send_control_btl","mca_pml_ob1_send_ctl_completion","mca_pml_ob1_send_fin","mca_pml_ob1_send_inline.constprop.0","mca_pml_ob1_send_request_cancel","mca_pml_ob1_send_request_construct","mca_pml_ob1_send_request_copy_in_out","mca_pml_ob1_send_request_destruct","mca_pml_ob1_send_request_free","mca_pml_ob1_send_request_process_pending","mca_pml_ob1_send_request_put","mca_pml_ob1_send_request_put_frag","mca_pml_ob1_send_request_put_frag_failed","mca_pml_ob1_send_request_schedule_once","mca_pml_ob1_send_request_start_accelerator","mca_pml_ob1_send_request_start_buffered","mca_pml_ob1_send_request_start_copy","mca_pml_ob1_send_request_start_prepare","mca_pml_ob1_send_request_start_rdma","mca_pml_ob1_send_request_start_rndv","mca_pml_ob1_send_request_start_seq.constprop.0","mca_pml_ob1_set_allow_overtake","mca_pml_ob1_start","mca_pml_v_component_close","mca_pml_v_component_finalize","mca_pml_v_component_init","mca_pml_v_component_open","mca_pml_v_component_parasite_close","mca_pml_v_component_parasite_finalize","mca_pml_v_component_register","mca_pml_v_enable","mca_sharedfp_base_close","mca_sharedfp_base_file_select","mca_sharedfp_base_file_unselect","mca_sharedfp_base_find_available","mca_sharedfp_base_open","mca_sharedfp_individual_assign_globaloffset","mca_sharedfp_individual_collaborate_data","mca_sharedfp_individual_component_file_query","mca_sharedfp_individual_component_file_unquery","mca_sharedfp_individual_component_init_query","mca_sharedfp_individual_create_buff","mca_sharedfp_individual_file_close","mca_sharedfp_individual_file_open","mca_sharedfp_individual_get_position","mca_sharedfp_individual_get_timestamps_and_reclengths","mca_sharedfp_individual_getoffset","mca_sharedfp_individual_gettime","mca_sharedfp_individual_insert_headnode","mca_sharedfp_individual_insert_metadata","mca_sharedfp_individual_iread","mca_sharedfp_individual_iwrite","mca_sharedfp_individual_module_finalize","mca_sharedfp_individual_module_init","mca_sharedfp_individual_read","mca_sharedfp_individual_read_ordered","mca_sharedfp_individual_read_ordered_begin","mca_sharedfp_individual_read_ordered_end","mca_sharedfp_individual_seek","mca_sharedfp_individual_sort_timestamps","mca_sharedfp_individual_write","mca_sharedfp_individual_write_metadata_file","mca_sharedfp_individual_write_ordered","mca_sharedfp_individual_write_ordered_begin","mca_sharedfp_individual_write_ordered_end","mca_sharedfp_lockedfile_component_file_query","mca_sharedfp_lockedfile_component_file_unquery","mca_sharedfp_lockedfile_component_init_query","mca_sharedfp_lockedfile_file_close","mca_sharedfp_lockedfile_file_open","mca_sharedfp_lockedfile_get_position","mca_sharedfp_lockedfile_iread","mca_sharedfp_lockedfile_iwrite","mca_sharedfp_lockedfile_module_finalize","mca_sharedfp_lockedfile_module_init","mca_sharedfp_lockedfile_read","mca_sharedfp_lockedfile_read_ordered","mca_sharedfp_lockedfile_read_ordered.cold","mca_sharedfp_lockedfile_read_ordered_begin","mca_sharedfp_lockedfile_read_ordered_begin.cold","mca_sharedfp_lockedfile_read_ordered_end","mca_sharedfp_lockedfile_request_position","mca_sharedfp_lockedfile_seek","mca_sharedfp_lockedfile_write","mca_sharedfp_lockedfile_write_ordered","mca_sharedfp_lockedfile_write_ordered.cold","mca_sharedfp_lockedfile_write_ordered_begin","mca_sharedfp_lockedfile_write_ordered_begin.cold","mca_sharedfp_lockedfile_write_ordered_end","mca_sharedfp_sm_component_file_query","mca_sharedfp_sm_component_file_unquery","mca_sharedfp_sm_component_init_query","mca_sharedfp_sm_file_close","mca_sharedfp_sm_file_open","mca_sharedfp_sm_get_position","mca_sharedfp_sm_iread","mca_sharedfp_sm_iwrite","mca_sharedfp_sm_module_finalize","mca_sharedfp_sm_module_init","mca_sharedfp_sm_read","mca_sharedfp_sm_read_ordered","mca_sharedfp_sm_read_ordered.cold","mca_sharedfp_sm_read_ordered_begin","mca_sharedfp_sm_read_ordered_begin.cold","mca_sharedfp_sm_read_ordered_end","mca_sharedfp_sm_request_position","mca_sharedfp_sm_seek","mca_sharedfp_sm_write","mca_sharedfp_sm_write_ordered","mca_sharedfp_sm_write_ordered.cold","mca_sharedfp_sm_write_ordered_begin","mca_sharedfp_sm_write_ordered_begin.cold","mca_sharedfp_sm_write_ordered_end","mca_topo_base_cart_coords","mca_topo_base_cart_create","mca_topo_base_cart_get","mca_topo_base_cart_map","mca_topo_base_cart_rank","mca_topo_base_cart_shift","mca_topo_base_cart_sub","mca_topo_base_cartdim_get","mca_topo_base_close","mca_topo_base_comm_cart_2_2_0_construct","mca_topo_base_comm_cart_2_2_0_destruct","mca_topo_base_comm_dist_graph_2_2_0_construct","mca_topo_base_comm_dist_graph_2_2_0_destruct","mca_topo_base_comm_graph_2_2_0_construct","mca_topo_base_comm_graph_2_2_0_destruct","mca_topo_base_comm_select","mca_topo_base_dist_graph_create","mca_topo_base_dist_graph_create_adjacent","mca_topo_base_dist_graph_distribute","mca_topo_base_dist_graph_neighbors","mca_topo_base_dist_graph_neighbors_count","mca_topo_base_find_available","mca_topo_base_graph_create","mca_topo_base_graph_get","mca_topo_base_graph_map","mca_topo_base_graph_neighbors","mca_topo_base_graph_neighbors_count","mca_topo_base_graphdims_get","mca_topo_base_group_select","mca_topo_base_lazy_init","mca_topo_base_module_construct","mca_topo_base_module_destruct","mca_topo_base_neighbor_count","mca_topo_base_open","mca_topo_basic_query","mca_topo_treematch_component_register","mca_topo_treematch_dist_graph_create","mca_topo_treematch_dist_graph_create.cold","mca_topo_treematch_query","mca_vprotocol_base_close","mca_vprotocol_base_open","mca_vprotocol_base_parasite","mca_vprotocol_base_request_parasite","mca_vprotocol_base_select","mca_vprotocol_base_set_include_list","mca_vprotocol_pessimist_add_comm","mca_vprotocol_pessimist_add_procs","mca_vprotocol_pessimist_component_close","mca_vprotocol_pessimist_component_finalize","mca_vprotocol_pessimist_component_init","mca_vprotocol_pessimist_component_open","mca_vprotocol_pessimist_component_register","mca_vprotocol_pessimist_del_comm","mca_vprotocol_pessimist_del_procs","mca_vprotocol_pessimist_dump","mca_vprotocol_pessimist_enable","mca_vprotocol_pessimist_iprobe","mca_vprotocol_pessimist_irecv","mca_vprotocol_pessimist_isend","mca_vprotocol_pessimist_isend.cold","mca_vprotocol_pessimist_probe","mca_vprotocol_pessimist_recv","mca_vprotocol_pessimist_request_free","mca_vprotocol_pessimist_send","mca_vprotocol_pessimist_send.cold","mca_vprotocol_pessimist_start","mca_vprotocol_pessimist_test","mca_vprotocol_pessimist_test_all","mca_vprotocol_pessimist_test_any","mca_vprotocol_pessimist_test_some","mca_vprotocol_pessimist_wait_any","mca_vprotocol_pessimist_wait_some","model_callback","module_constructor","module_constructor_1_0_0","mpi_aint_add_f90","mpi_aint_add_f90_","mpi_aint_add_f90__","mpi_aint_diff_f90","mpi_aint_diff_f90_","mpi_aint_diff_f90__","mpi_comm_dup_fn","mpi_comm_dup_fn_","mpi_comm_dup_fn__","mpi_comm_null_copy_fn","mpi_comm_null_copy_fn_","mpi_comm_null_copy_fn__","mpi_comm_null_delete_fn","mpi_comm_null_delete_fn_","mpi_comm_null_delete_fn__","mpi_conversion_fn_null","mpi_conversion_fn_null_","mpi_conversion_fn_null__","mpi_conversion_fn_null_f","mpi_dup_fn","mpi_dup_fn_","mpi_dup_fn__","mpi_null_copy_fn","mpi_null_copy_fn_","mpi_null_copy_fn__","mpi_null_delete_fn","mpi_null_delete_fn_","mpi_null_delete_fn__","mpi_type_dup_fn","mpi_type_dup_fn_","mpi_type_dup_fn__","mpi_type_null_copy_fn","mpi_type_null_copy_fn_","mpi_type_null_copy_fn__","mpi_type_null_delete_fn","mpi_type_null_delete_fn_","mpi_type_null_delete_fn__","mpi_win_dup_fn","mpi_win_dup_fn_","mpi_win_dup_fn__","mpi_win_null_copy_fn","mpi_win_null_copy_fn_","mpi_win_null_copy_fn__","mpi_win_null_delete_fn","mpi_win_null_delete_fn_","mpi_win_null_delete_fn__","mpi_wtick_f90","mpi_wtick_f90_","mpi_wtick_f90__","mpi_wtime_f90","mpi_wtime_f90_","mpi_wtime_f90__","msg_down","msg_down.cold","msg_up","mycompar","myfn","nb_leaves","nb_lines","nbc_allgather_init","nbc_allgather_inter_init","nbc_allgatherv_init","nbc_allgatherv_inter_init","nbc_allreduce_init","nbc_allreduce_init.cold","nbc_allreduce_inter_init","nbc_alltoall_init","nbc_alltoall_inter_init","nbc_alltoallv_init","nbc_alltoallv_inter_init","nbc_alltoallw_init","nbc_alltoallw_inter_init","nbc_barrier_init","nbc_barrier_inter_init","nbc_bcast_init","nbc_bcast_inter_init","nbc_exscan_init","nbc_gather_init","nbc_gather_inter_init","nbc_gatherv_init","nbc_gatherv_inter_init","nbc_neighbor_allgather_init","nbc_neighbor_allgatherv_init","nbc_neighbor_alltoall_init","nbc_neighbor_alltoallv_init","nbc_neighbor_alltoallw_init","nbc_reduce_init","nbc_reduce_inter_init","nbc_reduce_scatter_block_init","nbc_reduce_scatter_block_inter_init","nbc_reduce_scatter_init","nbc_reduce_scatter_inter_init","nbc_req_constructor","nbc_scan_init","nbc_scatter_init","nbc_scatter_inter_init","nbc_scatterv_init","nbc_scatterv_inter_init","nbc_schedule_constructor","nbc_schedule_destructor","next_bucket_elem","node_height","node_mheight","node_pathlen","ompi_attr_copy_all","ompi_attr_create_keyval","ompi_attr_create_keyval_aint","ompi_attr_create_keyval_fint","ompi_attr_create_keyval_impl","ompi_attr_create_predefined_keyvals","ompi_attr_delete","ompi_attr_delete_all","ompi_attr_delete_impl","ompi_attr_delete_predefined_keyvals_for_wm","ompi_attr_free_keyval","ompi_attr_free_predefined","ompi_attr_get_aint","ompi_attr_get_aint.cold","ompi_attr_get_c","ompi_attr_get_c.cold","ompi_attr_get_fint","ompi_attr_get_fint.cold","ompi_attr_get_ref","ompi_attr_put_ref","ompi_attr_set_aint","ompi_attr_set_c","ompi_attr_set_fint","ompi_attr_set_int","ompi_attr_set_predefined_keyvals_for_wm","ompi_attribute_keyval_construct","ompi_attribute_keyval_destruct","ompi_coll_adapt_bcast","ompi_coll_adapt_comm_query","ompi_coll_adapt_ibcast","ompi_coll_adapt_ibcast_fini","ompi_coll_adapt_ibcast_register","ompi_coll_adapt_init_query","ompi_coll_adapt_ireduce","ompi_coll_adapt_ireduce_fini","ompi_coll_adapt_ireduce_register","ompi_coll_adapt_module_cached_topology","ompi_coll_adapt_reduce","ompi_coll_adapt_request_free","ompi_coll_base_agree_noft","ompi_coll_base_allgather_intra_basic_linear","ompi_coll_base_allgather_intra_bruck","ompi_coll_base_allgather_intra_neighborexchange","ompi_coll_base_allgather_intra_recursivedoubling","ompi_coll_base_allgather_intra_ring","ompi_coll_base_allgather_intra_sparbit","ompi_coll_base_allgather_intra_two_procs","ompi_coll_base_allgatherv_intra_basic_default","ompi_coll_base_allgatherv_intra_bruck","ompi_coll_base_allgatherv_intra_neighborexchange","ompi_coll_base_allgatherv_intra_ring","ompi_coll_base_allgatherv_intra_sparbit","ompi_coll_base_allgatherv_intra_two_procs","ompi_coll_base_allreduce_intra_basic_linear","ompi_coll_base_allreduce_intra_nonoverlapping","ompi_coll_base_allreduce_intra_recursivedoubling","ompi_coll_base_allreduce_intra_redscat_allgather","ompi_coll_base_allreduce_intra_ring","ompi_coll_base_allreduce_intra_ring_segmented","ompi_coll_base_alltoall_intra_basic_linear","ompi_coll_base_alltoall_intra_bruck","ompi_coll_base_alltoall_intra_linear_sync","ompi_coll_base_alltoall_intra_pairwise","ompi_coll_base_alltoall_intra_two_procs","ompi_coll_base_alltoallv_intra_basic_linear","ompi_coll_base_alltoallv_intra_pairwise","ompi_coll_base_barrier_intra_basic_linear","ompi_coll_base_barrier_intra_bruck","ompi_coll_base_barrier_intra_doublering","ompi_coll_base_barrier_intra_recursivedoubling","ompi_coll_base_barrier_intra_tree","ompi_coll_base_barrier_intra_two_procs","ompi_coll_base_bcast_intra_basic_linear","ompi_coll_base_bcast_intra_binomial","ompi_coll_base_bcast_intra_bintree","ompi_coll_base_bcast_intra_chain","ompi_coll_base_bcast_intra_generic","ompi_coll_base_bcast_intra_knomial","ompi_coll_base_bcast_intra_pipeline","ompi_coll_base_bcast_intra_scatter_allgather","ompi_coll_base_bcast_intra_scatter_allgather_ring","ompi_coll_base_bcast_intra_split_bintree","ompi_coll_base_comm_get_reqs","ompi_coll_base_exscan_intra_linear","ompi_coll_base_exscan_intra_recursivedoubling","ompi_coll_base_file_getnext_long","ompi_coll_base_file_getnext_size_t","ompi_coll_base_file_getnext_string","ompi_coll_base_file_peek_next_char_is","ompi_coll_base_file_peek_next_char_isdigit","ompi_coll_base_gather_intra_basic_linear","ompi_coll_base_gather_intra_binomial","ompi_coll_base_gather_intra_linear_sync","ompi_coll_base_iagree_noft","ompi_coll_base_reduce_generic","ompi_coll_base_reduce_intra_basic_linear","ompi_coll_base_reduce_intra_binary","ompi_coll_base_reduce_intra_binomial","ompi_coll_base_reduce_intra_chain","ompi_coll_base_reduce_intra_in_order_binary","ompi_coll_base_reduce_intra_pipeline","ompi_coll_base_reduce_intra_redscat_gather","ompi_coll_base_reduce_scatter_block_basic_linear","ompi_coll_base_reduce_scatter_block_intra_butterfly","ompi_coll_base_reduce_scatter_block_intra_recursivedoubling","ompi_coll_base_reduce_scatter_block_intra_recursivehalving","ompi_coll_base_reduce_scatter_intra_basic_recursivehalving","ompi_coll_base_reduce_scatter_intra_butterfly","ompi_coll_base_reduce_scatter_intra_nonoverlapping","ompi_coll_base_reduce_scatter_intra_ring","ompi_coll_base_retain_datatypes","ompi_coll_base_retain_datatypes_w","ompi_coll_base_retain_op","ompi_coll_base_scan_intra_linear","ompi_coll_base_scan_intra_recursivedoubling","ompi_coll_base_scatter_intra_basic_linear","ompi_coll_base_scatter_intra_binomial","ompi_coll_base_scatter_intra_linear_nb","ompi_coll_base_sendrecv_actual","ompi_coll_base_topo_build_bmtree","ompi_coll_base_topo_build_chain","ompi_coll_base_topo_build_in_order_bintree","ompi_coll_base_topo_build_in_order_bmtree","ompi_coll_base_topo_build_kmtree","ompi_coll_base_topo_build_tree","ompi_coll_base_topo_destroy_tree","ompi_coll_base_topo_dump_tree","ompi_coll_han_reorder_gather","ompi_coll_han_request_free","ompi_coll_libnbc_allgather_init","ompi_coll_libnbc_allgather_inter_init","ompi_coll_libnbc_allgatherv_init","ompi_coll_libnbc_allgatherv_inter_init","ompi_coll_libnbc_allreduce_init","ompi_coll_libnbc_allreduce_inter_init","ompi_coll_libnbc_alltoall_init","ompi_coll_libnbc_alltoall_inter_init","ompi_coll_libnbc_alltoallv_init","ompi_coll_libnbc_alltoallv_inter_init","ompi_coll_libnbc_alltoallw_init","ompi_coll_libnbc_alltoallw_inter_init","ompi_coll_libnbc_barrier_init","ompi_coll_libnbc_barrier_inter_init","ompi_coll_libnbc_bcast_init","ompi_coll_libnbc_bcast_inter_init","ompi_coll_libnbc_dict_destroy","ompi_coll_libnbc_dict_itor_destroy","ompi_coll_libnbc_dict_long_cmp","ompi_coll_libnbc_dict_ptr_cmp","ompi_coll_libnbc_dict_str_cmp","ompi_coll_libnbc_dict_uint_cmp","ompi_coll_libnbc_dict_ulong_cmp","ompi_coll_libnbc_exscan_init","ompi_coll_libnbc_gather_init","ompi_coll_libnbc_gather_inter_init","ompi_coll_libnbc_gatherv_init","ompi_coll_libnbc_gatherv_inter_init","ompi_coll_libnbc_hb_dict_itor_new","ompi_coll_libnbc_hb_dict_new","ompi_coll_libnbc_hb_itor_cdata","ompi_coll_libnbc_hb_itor_data","ompi_coll_libnbc_hb_itor_destroy","ompi_coll_libnbc_hb_itor_first","ompi_coll_libnbc_hb_itor_invalidate","ompi_coll_libnbc_hb_itor_key","ompi_coll_libnbc_hb_itor_last","ompi_coll_libnbc_hb_itor_new","ompi_coll_libnbc_hb_itor_next","ompi_coll_libnbc_hb_itor_nextn","ompi_coll_libnbc_hb_itor_prev","ompi_coll_libnbc_hb_itor_prevn","ompi_coll_libnbc_hb_itor_set_data","ompi_coll_libnbc_hb_itor_valid","ompi_coll_libnbc_hb_tree_count","ompi_coll_libnbc_hb_tree_destroy","ompi_coll_libnbc_hb_tree_empty","ompi_coll_libnbc_hb_tree_height","ompi_coll_libnbc_hb_tree_insert","ompi_coll_libnbc_hb_tree_max","ompi_coll_libnbc_hb_tree_mheight","ompi_coll_libnbc_hb_tree_min","ompi_coll_libnbc_hb_tree_new","ompi_coll_libnbc_hb_tree_pathlen","ompi_coll_libnbc_hb_tree_probe","ompi_coll_libnbc_hb_tree_remove","ompi_coll_libnbc_hb_tree_search","ompi_coll_libnbc_hb_tree_walk","ompi_coll_libnbc_iallgather","ompi_coll_libnbc_iallgather_inter","ompi_coll_libnbc_iallgatherv","ompi_coll_libnbc_iallgatherv_inter","ompi_coll_libnbc_iallreduce","ompi_coll_libnbc_iallreduce_inter","ompi_coll_libnbc_ialltoall","ompi_coll_libnbc_ialltoall_inter","ompi_coll_libnbc_ialltoallv","ompi_coll_libnbc_ialltoallv_inter","ompi_coll_libnbc_ialltoallw","ompi_coll_libnbc_ialltoallw_inter","ompi_coll_libnbc_ibarrier","ompi_coll_libnbc_ibarrier_inter","ompi_coll_libnbc_ibcast","ompi_coll_libnbc_ibcast_inter","ompi_coll_libnbc_iexscan","ompi_coll_libnbc_igather","ompi_coll_libnbc_igather_inter","ompi_coll_libnbc_igatherv","ompi_coll_libnbc_igatherv_inter","ompi_coll_libnbc_ineighbor_allgather","ompi_coll_libnbc_ineighbor_allgatherv","ompi_coll_libnbc_ineighbor_alltoall","ompi_coll_libnbc_ineighbor_alltoallv","ompi_coll_libnbc_ineighbor_alltoallw","ompi_coll_libnbc_ireduce","ompi_coll_libnbc_ireduce_inter","ompi_coll_libnbc_ireduce_scatter","ompi_coll_libnbc_ireduce_scatter_block","ompi_coll_libnbc_ireduce_scatter_block_inter","ompi_coll_libnbc_ireduce_scatter_inter","ompi_coll_libnbc_iscan","ompi_coll_libnbc_iscatter","ompi_coll_libnbc_iscatter_inter","ompi_coll_libnbc_iscatterv","ompi_coll_libnbc_iscatterv_inter","ompi_coll_libnbc_neighbor_allgather_init","ompi_coll_libnbc_neighbor_allgatherv_init","ompi_coll_libnbc_neighbor_alltoall_init","ompi_coll_libnbc_neighbor_alltoallv_init","ompi_coll_libnbc_neighbor_alltoallw_init","ompi_coll_libnbc_progress","ompi_coll_libnbc_reduce_init","ompi_coll_libnbc_reduce_inter_init","ompi_coll_libnbc_reduce_scatter_block_init","ompi_coll_libnbc_reduce_scatter_block_inter_init","ompi_coll_libnbc_reduce_scatter_init","ompi_coll_libnbc_reduce_scatter_inter_init","ompi_coll_libnbc_scan_init","ompi_coll_libnbc_scatter_init","ompi_coll_libnbc_scatter_inter_init","ompi_coll_libnbc_scatterv_init","ompi_coll_libnbc_scatterv_inter_init","ompi_coll_sm_lazy_enable","ompi_coll_tuned_allgather_intra_check_forced_init","ompi_coll_tuned_allgather_intra_dec_dynamic","ompi_coll_tuned_allgather_intra_dec_fixed","ompi_coll_tuned_allgather_intra_do_this","ompi_coll_tuned_allgatherv_intra_check_forced_init","ompi_coll_tuned_allgatherv_intra_dec_dynamic","ompi_coll_tuned_allgatherv_intra_dec_fixed","ompi_coll_tuned_allgatherv_intra_do_this","ompi_coll_tuned_allreduce_intra_check_forced_init","ompi_coll_tuned_allreduce_intra_dec_dynamic","ompi_coll_tuned_allreduce_intra_dec_fixed","ompi_coll_tuned_allreduce_intra_do_this","ompi_coll_tuned_alltoall_intra_check_forced_init","ompi_coll_tuned_alltoall_intra_dec_dynamic","ompi_coll_tuned_alltoall_intra_dec_fixed","ompi_coll_tuned_alltoall_intra_do_this","ompi_coll_tuned_alltoallv_intra_check_forced_init","ompi_coll_tuned_alltoallv_intra_dec_dynamic","ompi_coll_tuned_alltoallv_intra_dec_fixed","ompi_coll_tuned_alltoallv_intra_do_this","ompi_coll_tuned_barrier_intra_check_forced_init","ompi_coll_tuned_barrier_intra_dec_dynamic","ompi_coll_tuned_barrier_intra_dec_fixed","ompi_coll_tuned_barrier_intra_do_this","ompi_coll_tuned_bcast_intra_check_forced_init","ompi_coll_tuned_bcast_intra_dec_dynamic","ompi_coll_tuned_bcast_intra_dec_fixed","ompi_coll_tuned_bcast_intra_do_this","ompi_coll_tuned_comm_query","ompi_coll_tuned_dump_alg_rule","ompi_coll_tuned_dump_all_rules","ompi_coll_tuned_dump_com_rule","ompi_coll_tuned_dump_msg_rule","ompi_coll_tuned_exscan_intra_check_forced_init","ompi_coll_tuned_exscan_intra_dec_dynamic","ompi_coll_tuned_exscan_intra_do_this","ompi_coll_tuned_forced_getvalues.isra.0","ompi_coll_tuned_free_all_rules","ompi_coll_tuned_free_coms_in_alg_rule","ompi_coll_tuned_free_msg_rules_in_com_rule","ompi_coll_tuned_gather_intra_check_forced_init","ompi_coll_tuned_gather_intra_dec_dynamic","ompi_coll_tuned_gather_intra_dec_fixed","ompi_coll_tuned_gather_intra_do_this","ompi_coll_tuned_get_com_rule_ptr","ompi_coll_tuned_get_target_method_params","ompi_coll_tuned_init_query","ompi_coll_tuned_mk_alg_rules","ompi_coll_tuned_mk_com_rules","ompi_coll_tuned_mk_msg_rules","ompi_coll_tuned_read_rules_config_file","ompi_coll_tuned_reduce_intra_check_forced_init","ompi_coll_tuned_reduce_intra_dec_dynamic","ompi_coll_tuned_reduce_intra_dec_fixed","ompi_coll_tuned_reduce_intra_do_this","ompi_coll_tuned_reduce_scatter_block_intra_check_forced_init","ompi_coll_tuned_reduce_scatter_block_intra_dec_dynamic","ompi_coll_tuned_reduce_scatter_block_intra_dec_fixed","ompi_coll_tuned_reduce_scatter_block_intra_do_this","ompi_coll_tuned_reduce_scatter_intra_check_forced_init","ompi_coll_tuned_reduce_scatter_intra_dec_dynamic","ompi_coll_tuned_reduce_scatter_intra_dec_fixed","ompi_coll_tuned_reduce_scatter_intra_do_this","ompi_coll_tuned_scan_intra_check_forced_init","ompi_coll_tuned_scan_intra_dec_dynamic","ompi_coll_tuned_scan_intra_do_this","ompi_coll_tuned_scatter_intra_check_forced_init","ompi_coll_tuned_scatter_intra_dec_dynamic","ompi_coll_tuned_scatter_intra_dec_fixed","ompi_coll_tuned_scatter_intra_do_this","ompi_comm_ack_failed_internal","ompi_comm_activate","ompi_comm_activate_nb","ompi_comm_activate_nb_complete","ompi_comm_allgather_emulate_intra","ompi_comm_allreduce_bridged_reduce_complete","ompi_comm_allreduce_bridged_xchng_complete","ompi_comm_allreduce_context_construct","ompi_comm_allreduce_context_destruct","ompi_comm_allreduce_getnextcid","ompi_comm_allreduce_group_broadcast","ompi_comm_allreduce_group_nb","ompi_comm_allreduce_group_recv_complete","ompi_comm_allreduce_inter_bcast","ompi_comm_allreduce_inter_leader_exchange","ompi_comm_allreduce_inter_leader_reduce","ompi_comm_allreduce_inter_nb","ompi_comm_allreduce_intra_bridge_nb","ompi_comm_allreduce_intra_nb","ompi_comm_allreduce_intra_pmix_nb","ompi_comm_allreduce_pmix_reduce_complete","ompi_comm_assert_subscribe","ompi_comm_checkcid","ompi_comm_cid_init","ompi_comm_compare","ompi_comm_construct","ompi_comm_create","ompi_comm_create_from_group","ompi_comm_create_group","ompi_comm_create_w_info","ompi_comm_destruct","ompi_comm_determine_first","ompi_comm_determine_first_auto","ompi_comm_dump","ompi_comm_dup","ompi_comm_dup_fn_f","ompi_comm_dup_with_info","ompi_comm_enable","ompi_comm_failure_ack_internal","ompi_comm_failure_detector_finalize","ompi_comm_failure_detector_init","ompi_comm_failure_detector_register_params","ompi_comm_failure_detector_start","ompi_comm_failure_get_acked_internal","ompi_comm_failure_propagate","ompi_comm_failure_propagator_finalize","ompi_comm_failure_propagator_init","ompi_comm_failure_propagator_local","ompi_comm_failure_propagator_register_params","ompi_comm_finalize","ompi_comm_free","ompi_comm_free.localalias","ompi_comm_ft_allreduce_agree_completion","ompi_comm_ft_allreduce_inter_nb","ompi_comm_ft_allreduce_intra_nb","ompi_comm_ft_allreduce_intra_pmix_nb","ompi_comm_get_failed_internal","ompi_comm_get_remote_cid_from_pmix","ompi_comm_get_rprocs","ompi_comm_group","ompi_comm_idup","ompi_comm_idup_getcid","ompi_comm_idup_with_info","ompi_comm_idup_with_info_activate","ompi_comm_idup_with_info_finish","ompi_comm_init","ompi_comm_init_mpi3","ompi_comm_is_proc_active","ompi_comm_ishrink_check_activate","ompi_comm_ishrink_check_agree","ompi_comm_ishrink_check_cid","ompi_comm_ishrink_check_setrank","ompi_comm_ishrink_internal","ompi_comm_nextcid","ompi_comm_nextcid_check_flag","ompi_comm_nextcid_nb","ompi_comm_null_copy_fn_f","ompi_comm_null_delete_fn_f","ompi_comm_print_cid","ompi_comm_rbcast_bmg","ompi_comm_rbcast_bml_recv_cb","ompi_comm_rbcast_finalize","ompi_comm_rbcast_init","ompi_comm_rbcast_n2","ompi_comm_rbcast_null","ompi_comm_rbcast_register_cb_type","ompi_comm_rbcast_register_params","ompi_comm_rbcast_send_msg","ompi_comm_rbcast_unregister_cb_type","ompi_comm_request_cancel","ompi_comm_request_construct","ompi_comm_request_destruct","ompi_comm_request_fini","ompi_comm_request_free","ompi_comm_request_get","ompi_comm_request_init","ompi_comm_request_progress","ompi_comm_request_progress.cold","ompi_comm_request_return","ompi_comm_request_schedule_append","ompi_comm_request_schedule_append_w_flags","ompi_comm_request_start","ompi_comm_revoke_finalize","ompi_comm_revoke_init","ompi_comm_revoke_internal","ompi_comm_revoke_local","ompi_comm_set","ompi_comm_set_active_poll","ompi_comm_set_allow_overtake","ompi_comm_set_exact_length","ompi_comm_set_lazy_barrier","ompi_comm_set_name","ompi_comm_set_nb","ompi_comm_set_no_any_source","ompi_comm_set_no_any_tag","ompi_comm_set_rank_failed","ompi_comm_shrink_internal","ompi_comm_split","ompi_comm_split_type","ompi_comm_split_type_core","ompi_comm_split_type_get_part.constprop.0","ompi_comm_split_verify","ompi_comm_split_with_info","ompi_comm_start_detector","ompi_datatype_copy_args","ompi_datatype_create","ompi_datatype_create_contiguous","ompi_datatype_create_darray","ompi_datatype_create_from_packed_description","ompi_datatype_create_hindexed","ompi_datatype_create_hindexed_block","ompi_datatype_create_hvector","ompi_datatype_create_indexed","ompi_datatype_create_indexed_block","ompi_datatype_create_struct","ompi_datatype_create_subarray","ompi_datatype_create_vector","ompi_datatype_default_convertors_fini","ompi_datatype_default_convertors_init","ompi_datatype_destroy","ompi_datatype_dump","ompi_datatype_duplicate","ompi_datatype_finalize","ompi_datatype_get_args","ompi_datatype_get_elements","ompi_datatype_get_pack_description","ompi_datatype_get_single_predefined_type_from_args","ompi_datatype_get_single_predefined_type_from_args.localalias","ompi_datatype_init","ompi_datatype_init.cold","ompi_datatype_match_size","ompi_datatype_match_size.cold","ompi_datatype_pack_description_length","ompi_datatype_pack_external","ompi_datatype_pack_external_size","ompi_datatype_print_args","ompi_datatype_release_args","ompi_datatype_set_args","ompi_datatype_sndrcv","ompi_datatype_unpack_external","ompi_debugger_setup_dlls","ompi_dpm_close_port","ompi_dpm_connect_accept","ompi_dpm_disconnect","ompi_dpm_dyn_finalize","ompi_dpm_dyn_init","ompi_dpm_init","ompi_dpm_mark_dyncomm","ompi_dpm_open_port","ompi_dpm_spawn","ompi_dup_fn_f","ompi_errcode_get_mpi_code.part.0","ompi_errcode_get_mpi_code.part.0.cold","ompi_errcode_intern_construct","ompi_errcode_intern_destruct","ompi_errcode_intern_finalize","ompi_errcode_intern_init","ompi_errhandler_callback","ompi_errhandler_construct","ompi_errhandler_create","ompi_errhandler_destruct","ompi_errhandler_event_cb","ompi_errhandler_finalize","ompi_errhandler_free","ompi_errhandler_init","ompi_errhandler_invoke","ompi_errhandler_proc_failed_internal","ompi_errhandler_registration_callback","ompi_errhandler_request_invoke","ompi_errhandler_request_invoke.cold","ompi_fcoll_base_coll_allgather_array","ompi_fcoll_base_coll_allgatherv_array","ompi_fcoll_base_coll_bcast_array","ompi_fcoll_base_coll_gather_array","ompi_fcoll_base_coll_gatherv_array","ompi_fcoll_base_coll_scatterv_array","ompi_fcoll_base_sort_iovec","ompi_file_close","ompi_file_finalize","ompi_file_init","ompi_file_open","ompi_fortran_argv_blank_f2c","ompi_fortran_argv_count_f2c","ompi_fortran_multiple_argvs_f2c","ompi_fortran_string_c2f","ompi_fortran_string_f2c","ompi_grequest_cancel","ompi_grequest_complete","ompi_grequest_construct","ompi_grequest_destruct","ompi_grequest_free","ompi_grequest_invoke_query","ompi_grequest_start","ompi_group_allocate","ompi_group_allocate_bmap","ompi_group_allocate_plist_w_procs","ompi_group_allocate_sporadic","ompi_group_allocate_strided","ompi_group_calc_bmap","ompi_group_calc_plist","ompi_group_calc_sporadic","ompi_group_calc_strided","ompi_group_compare","ompi_group_construct","ompi_group_count_local_peers","ompi_group_decrement_proc_count","ompi_group_dense_overlap","ompi_group_destruct","ompi_group_difference","ompi_group_div_ceil","ompi_group_dump","ompi_group_excl","ompi_group_finalize","ompi_group_flatten","ompi_group_free","ompi_group_from_pset","ompi_group_have_remote_peers","ompi_group_incl","ompi_group_incl_bmap","ompi_group_incl_plist","ompi_group_incl_spor","ompi_group_incl_strided","ompi_group_increment_proc_count","ompi_group_init","ompi_group_intersection","ompi_group_minloc","ompi_group_overlap","ompi_group_range_excl","ompi_group_range_incl","ompi_group_to_proc_name_array","ompi_group_translate_ranks","ompi_group_translate_ranks_bmap","ompi_group_translate_ranks_bmap_reverse","ompi_group_translate_ranks_sporadic","ompi_group_translate_ranks_sporadic_reverse","ompi_group_translate_ranks_strided","ompi_group_translate_ranks_strided_reverse","ompi_group_union","ompi_hook_base_close","ompi_hook_base_deregister_callbacks","ompi_hook_base_mpi_finalize_bottom","ompi_hook_base_mpi_finalize_top","ompi_hook_base_mpi_finalized_bottom","ompi_hook_base_mpi_finalized_top","ompi_hook_base_mpi_init_bottom","ompi_hook_base_mpi_init_error","ompi_hook_base_mpi_init_thread_bottom","ompi_hook_base_mpi_init_thread_top","ompi_hook_base_mpi_init_top","ompi_hook_base_mpi_init_top_post_opal","ompi_hook_base_mpi_initialized_bottom","ompi_hook_base_mpi_initialized_top","ompi_hook_base_open","ompi_hook_base_register","ompi_hook_base_register_callbacks","ompi_hook_comm_method_component_close","ompi_hook_comm_method_component_open","ompi_hook_comm_method_component_register","ompi_hook_comm_method_mpi_finalize_top","ompi_hook_comm_method_mpi_init_bottom","ompi_info_allocate","ompi_info_close_components","ompi_info_delete","ompi_info_dup","ompi_info_free","ompi_info_get","ompi_info_get_bool","ompi_info_get_nkeys","ompi_info_get_nthkey","ompi_info_get_value_enum","ompi_info_get_valuelen","ompi_info_register_framework_params","ompi_info_register_types","ompi_info_set","ompi_info_set_value_enum","ompi_info_show_ompi_version","ompi_init_preconnect_mpi","ompi_initial_errhandler_init","ompi_instance_construct","ompi_instance_destruct","ompi_instance_get_nth_pset","ompi_instance_get_num_psets","ompi_instance_get_num_psets_complete","ompi_instance_get_pset_info","ompi_instance_group_pmix_pset","ompi_instance_group_shared","ompi_instance_print_error.part.0","ompi_instance_refresh_pmix_psets","ompi_intercomm_create","ompi_intercomm_create_from_groups","ompi_interlib_declare","ompi_io_ompio_generate_current_file_view","ompi_io_ompio_generate_current_file_view.cold","ompi_io_ompio_sort_offlen","ompi_isendrecv_complete_func","ompi_isendrecv_context_constructor","ompi_isendrecv_context_destructor","ompi_isendrecv_replace_complete_func","ompi_message_constructor","ompi_message_finalize","ompi_message_init","ompi_mirror_perm","ompi_mpi_abort","ompi_mpi_dynamics_disable","ompi_mpi_dynamics_finalize","ompi_mpi_dynamics_is_enabled","ompi_mpi_errclass_add","ompi_mpi_errcode_add","ompi_mpi_errcode_construct","ompi_mpi_errcode_destruct","ompi_mpi_errcode_finalize","ompi_mpi_errcode_init","ompi_mpi_errnum_add_string","ompi_mpi_errors_abort_comm_handler","ompi_mpi_errors_abort_file_handler","ompi_mpi_errors_abort_win_handler","ompi_mpi_errors_are_fatal_comm_handler","ompi_mpi_errors_are_fatal_file_handler","ompi_mpi_errors_are_fatal_instance_handler","ompi_mpi_errors_are_fatal_win_handler","ompi_mpi_errors_return_comm_handler","ompi_mpi_errors_return_file_handler","ompi_mpi_errors_return_instance_handler","ompi_mpi_errors_return_win_handler","ompi_mpi_finalize","ompi_mpi_init","ompi_mpi_instance_cleanup_pml","ompi_mpi_instance_finalize","ompi_mpi_instance_finalize_common","ompi_mpi_instance_init","ompi_mpi_instance_init_common","ompi_mpi_instance_release","ompi_mpi_instance_retain","ompi_mpi_register_params","ompi_mpi_thread_level","ompi_mpiext_fini","ompi_mpiext_init","ompi_mpiinfo_finalize","ompi_mpiinfo_init","ompi_mpiinfo_init_env","ompi_mpit_lock","ompi_mpit_unlock","ompi_mtl_base_close","ompi_mtl_base_select","ompi_null_copy_fn_f","ompi_null_delete_fn_f","ompi_op_avx_2buff_add_double_avx","ompi_op_avx_2buff_add_double_avx2","ompi_op_avx_2buff_add_double_avx512","ompi_op_avx_2buff_add_float_avx","ompi_op_avx_2buff_add_float_avx2","ompi_op_avx_2buff_add_float_avx512","ompi_op_avx_2buff_band_int16_t_avx","ompi_op_avx_2buff_band_int16_t_avx2","ompi_op_avx_2buff_band_int16_t_avx512","ompi_op_avx_2buff_band_int32_t_avx","ompi_op_avx_2buff_band_int32_t_avx2","ompi_op_avx_2buff_band_int32_t_avx512","ompi_op_avx_2buff_band_int64_t_avx","ompi_op_avx_2buff_band_int64_t_avx2","ompi_op_avx_2buff_band_int64_t_avx512","ompi_op_avx_2buff_band_int8_t_avx","ompi_op_avx_2buff_band_int8_t_avx2","ompi_op_avx_2buff_band_int8_t_avx512","ompi_op_avx_2buff_band_uint16_t_avx","ompi_op_avx_2buff_band_uint16_t_avx2","ompi_op_avx_2buff_band_uint16_t_avx512","ompi_op_avx_2buff_band_uint32_t_avx","ompi_op_avx_2buff_band_uint32_t_avx2","ompi_op_avx_2buff_band_uint32_t_avx512","ompi_op_avx_2buff_band_uint64_t_avx","ompi_op_avx_2buff_band_uint64_t_avx2","ompi_op_avx_2buff_band_uint64_t_avx512","ompi_op_avx_2buff_band_uint8_t_avx","ompi_op_avx_2buff_band_uint8_t_avx2","ompi_op_avx_2buff_band_uint8_t_avx512","ompi_op_avx_2buff_bor_int16_t_avx","ompi_op_avx_2buff_bor_int16_t_avx2","ompi_op_avx_2buff_bor_int16_t_avx512","ompi_op_avx_2buff_bor_int32_t_avx","ompi_op_avx_2buff_bor_int32_t_avx2","ompi_op_avx_2buff_bor_int32_t_avx512","ompi_op_avx_2buff_bor_int64_t_avx","ompi_op_avx_2buff_bor_int64_t_avx2","ompi_op_avx_2buff_bor_int64_t_avx512","ompi_op_avx_2buff_bor_int8_t_avx","ompi_op_avx_2buff_bor_int8_t_avx2","ompi_op_avx_2buff_bor_int8_t_avx512","ompi_op_avx_2buff_bor_uint16_t_avx","ompi_op_avx_2buff_bor_uint16_t_avx2","ompi_op_avx_2buff_bor_uint16_t_avx512","ompi_op_avx_2buff_bor_uint32_t_avx","ompi_op_avx_2buff_bor_uint32_t_avx2","ompi_op_avx_2buff_bor_uint32_t_avx512","ompi_op_avx_2buff_bor_uint64_t_avx","ompi_op_avx_2buff_bor_uint64_t_avx2","ompi_op_avx_2buff_bor_uint64_t_avx512","ompi_op_avx_2buff_bor_uint8_t_avx","ompi_op_avx_2buff_bor_uint8_t_avx2","ompi_op_avx_2buff_bor_uint8_t_avx512","ompi_op_avx_2buff_bxor_int16_t_avx","ompi_op_avx_2buff_bxor_int16_t_avx2","ompi_op_avx_2buff_bxor_int16_t_avx512","ompi_op_avx_2buff_bxor_int32_t_avx","ompi_op_avx_2buff_bxor_int32_t_avx2","ompi_op_avx_2buff_bxor_int32_t_avx512","ompi_op_avx_2buff_bxor_int64_t_avx","ompi_op_avx_2buff_bxor_int64_t_avx2","ompi_op_avx_2buff_bxor_int64_t_avx512","ompi_op_avx_2buff_bxor_int8_t_avx","ompi_op_avx_2buff_bxor_int8_t_avx2","ompi_op_avx_2buff_bxor_int8_t_avx512","ompi_op_avx_2buff_bxor_uint16_t_avx","ompi_op_avx_2buff_bxor_uint16_t_avx2","ompi_op_avx_2buff_bxor_uint16_t_avx512","ompi_op_avx_2buff_bxor_uint32_t_avx","ompi_op_avx_2buff_bxor_uint32_t_avx2","ompi_op_avx_2buff_bxor_uint32_t_avx512","ompi_op_avx_2buff_bxor_uint64_t_avx","ompi_op_avx_2buff_bxor_uint64_t_avx2","ompi_op_avx_2buff_bxor_uint64_t_avx512","ompi_op_avx_2buff_bxor_uint8_t_avx","ompi_op_avx_2buff_bxor_uint8_t_avx2","ompi_op_avx_2buff_bxor_uint8_t_avx512","ompi_op_avx_2buff_max_double_avx","ompi_op_avx_2buff_max_double_avx2","ompi_op_avx_2buff_max_double_avx512","ompi_op_avx_2buff_max_float_avx","ompi_op_avx_2buff_max_float_avx2","ompi_op_avx_2buff_max_float_avx512","ompi_op_avx_2buff_max_int16_t_avx","ompi_op_avx_2buff_max_int16_t_avx2","ompi_op_avx_2buff_max_int16_t_avx512","ompi_op_avx_2buff_max_int32_t_avx","ompi_op_avx_2buff_max_int32_t_avx2","ompi_op_avx_2buff_max_int32_t_avx512","ompi_op_avx_2buff_max_int64_t_avx512","ompi_op_avx_2buff_max_int8_t_avx","ompi_op_avx_2buff_max_int8_t_avx2","ompi_op_avx_2buff_max_int8_t_avx512","ompi_op_avx_2buff_max_uint16_t_avx","ompi_op_avx_2buff_max_uint16_t_avx2","ompi_op_avx_2buff_max_uint16_t_avx512","ompi_op_avx_2buff_max_uint32_t_avx","ompi_op_avx_2buff_max_uint32_t_avx2","ompi_op_avx_2buff_max_uint32_t_avx512","ompi_op_avx_2buff_max_uint64_t_avx512","ompi_op_avx_2buff_max_uint8_t_avx","ompi_op_avx_2buff_max_uint8_t_avx2","ompi_op_avx_2buff_max_uint8_t_avx512","ompi_op_avx_2buff_min_double_avx","ompi_op_avx_2buff_min_double_avx2","ompi_op_avx_2buff_min_double_avx512","ompi_op_avx_2buff_min_float_avx","ompi_op_avx_2buff_min_float_avx2","ompi_op_avx_2buff_min_float_avx512","ompi_op_avx_2buff_min_int16_t_avx","ompi_op_avx_2buff_min_int16_t_avx2","ompi_op_avx_2buff_min_int16_t_avx512","ompi_op_avx_2buff_min_int32_t_avx","ompi_op_avx_2buff_min_int32_t_avx2","ompi_op_avx_2buff_min_int32_t_avx512","ompi_op_avx_2buff_min_int64_t_avx512","ompi_op_avx_2buff_min_int8_t_avx","ompi_op_avx_2buff_min_int8_t_avx2","ompi_op_avx_2buff_min_int8_t_avx512","ompi_op_avx_2buff_min_uint16_t_avx","ompi_op_avx_2buff_min_uint16_t_avx2","ompi_op_avx_2buff_min_uint16_t_avx512","ompi_op_avx_2buff_min_uint32_t_avx","ompi_op_avx_2buff_min_uint32_t_avx2","ompi_op_avx_2buff_min_uint32_t_avx512","ompi_op_avx_2buff_min_uint64_t_avx512","ompi_op_avx_2buff_min_uint8_t_avx","ompi_op_avx_2buff_min_uint8_t_avx2","ompi_op_avx_2buff_min_uint8_t_avx512","ompi_op_avx_2buff_mul_double_avx","ompi_op_avx_2buff_mul_double_avx2","ompi_op_avx_2buff_mul_double_avx512","ompi_op_avx_2buff_mul_float_avx","ompi_op_avx_2buff_mul_float_avx2","ompi_op_avx_2buff_mul_float_avx512","ompi_op_avx_2buff_prod_int16_t_avx","ompi_op_avx_2buff_prod_int16_t_avx2","ompi_op_avx_2buff_prod_int16_t_avx512","ompi_op_avx_2buff_prod_int32_t_avx","ompi_op_avx_2buff_prod_int32_t_avx2","ompi_op_avx_2buff_prod_int32_t_avx512","ompi_op_avx_2buff_prod_int64_t_avx512","ompi_op_avx_2buff_prod_int8_t_avx","ompi_op_avx_2buff_prod_int8_t_avx2","ompi_op_avx_2buff_prod_int8_t_avx512","ompi_op_avx_2buff_prod_uint16_t_avx","ompi_op_avx_2buff_prod_uint16_t_avx2","ompi_op_avx_2buff_prod_uint16_t_avx512","ompi_op_avx_2buff_prod_uint32_t_avx","ompi_op_avx_2buff_prod_uint32_t_avx2","ompi_op_avx_2buff_prod_uint32_t_avx512","ompi_op_avx_2buff_prod_uint64_t_avx512","ompi_op_avx_2buff_prod_uint8_t_avx","ompi_op_avx_2buff_prod_uint8_t_avx2","ompi_op_avx_2buff_prod_uint8_t_avx512","ompi_op_avx_2buff_sum_int16_t_avx","ompi_op_avx_2buff_sum_int16_t_avx2","ompi_op_avx_2buff_sum_int16_t_avx512","ompi_op_avx_2buff_sum_int32_t_avx","ompi_op_avx_2buff_sum_int32_t_avx2","ompi_op_avx_2buff_sum_int32_t_avx512","ompi_op_avx_2buff_sum_int64_t_avx","ompi_op_avx_2buff_sum_int64_t_avx2","ompi_op_avx_2buff_sum_int64_t_avx512","ompi_op_avx_2buff_sum_int8_t_avx","ompi_op_avx_2buff_sum_int8_t_avx2","ompi_op_avx_2buff_sum_int8_t_avx512","ompi_op_avx_2buff_sum_uint16_t_avx","ompi_op_avx_2buff_sum_uint16_t_avx2","ompi_op_avx_2buff_sum_uint16_t_avx512","ompi_op_avx_2buff_sum_uint32_t_avx","ompi_op_avx_2buff_sum_uint32_t_avx2","ompi_op_avx_2buff_sum_uint32_t_avx512","ompi_op_avx_2buff_sum_uint64_t_avx","ompi_op_avx_2buff_sum_uint64_t_avx2","ompi_op_avx_2buff_sum_uint64_t_avx512","ompi_op_avx_2buff_sum_uint8_t_avx","ompi_op_avx_2buff_sum_uint8_t_avx2","ompi_op_avx_2buff_sum_uint8_t_avx512","ompi_op_avx_3buff_add_double_avx","ompi_op_avx_3buff_add_double_avx2","ompi_op_avx_3buff_add_double_avx512","ompi_op_avx_3buff_add_float_avx","ompi_op_avx_3buff_add_float_avx2","ompi_op_avx_3buff_add_float_avx512","ompi_op_avx_3buff_and_int16_t_avx","ompi_op_avx_3buff_and_int16_t_avx2","ompi_op_avx_3buff_and_int16_t_avx512","ompi_op_avx_3buff_and_int32_t_avx","ompi_op_avx_3buff_and_int32_t_avx2","ompi_op_avx_3buff_and_int32_t_avx512","ompi_op_avx_3buff_and_int64_t_avx","ompi_op_avx_3buff_and_int64_t_avx2","ompi_op_avx_3buff_and_int64_t_avx512","ompi_op_avx_3buff_and_int8_t_avx","ompi_op_avx_3buff_and_int8_t_avx2","ompi_op_avx_3buff_and_int8_t_avx512","ompi_op_avx_3buff_and_uint16_t_avx","ompi_op_avx_3buff_and_uint16_t_avx2","ompi_op_avx_3buff_and_uint16_t_avx512","ompi_op_avx_3buff_and_uint32_t_avx","ompi_op_avx_3buff_and_uint32_t_avx2","ompi_op_avx_3buff_and_uint32_t_avx512","ompi_op_avx_3buff_and_uint64_t_avx","ompi_op_avx_3buff_and_uint64_t_avx2","ompi_op_avx_3buff_and_uint64_t_avx512","ompi_op_avx_3buff_and_uint8_t_avx","ompi_op_avx_3buff_and_uint8_t_avx2","ompi_op_avx_3buff_and_uint8_t_avx512","ompi_op_avx_3buff_max_double_avx","ompi_op_avx_3buff_max_double_avx2","ompi_op_avx_3buff_max_double_avx512","ompi_op_avx_3buff_max_float_avx","ompi_op_avx_3buff_max_float_avx2","ompi_op_avx_3buff_max_float_avx512","ompi_op_avx_3buff_max_int16_t_avx","ompi_op_avx_3buff_max_int16_t_avx2","ompi_op_avx_3buff_max_int16_t_avx512","ompi_op_avx_3buff_max_int32_t_avx","ompi_op_avx_3buff_max_int32_t_avx2","ompi_op_avx_3buff_max_int32_t_avx512","ompi_op_avx_3buff_max_int64_t_avx512","ompi_op_avx_3buff_max_int8_t_avx","ompi_op_avx_3buff_max_int8_t_avx2","ompi_op_avx_3buff_max_int8_t_avx512","ompi_op_avx_3buff_max_uint16_t_avx","ompi_op_avx_3buff_max_uint16_t_avx2","ompi_op_avx_3buff_max_uint16_t_avx512","ompi_op_avx_3buff_max_uint32_t_avx","ompi_op_avx_3buff_max_uint32_t_avx2","ompi_op_avx_3buff_max_uint32_t_avx512","ompi_op_avx_3buff_max_uint64_t_avx512","ompi_op_avx_3buff_max_uint8_t_avx","ompi_op_avx_3buff_max_uint8_t_avx2","ompi_op_avx_3buff_max_uint8_t_avx512","ompi_op_avx_3buff_min_double_avx","ompi_op_avx_3buff_min_double_avx2","ompi_op_avx_3buff_min_double_avx512","ompi_op_avx_3buff_min_float_avx","ompi_op_avx_3buff_min_float_avx2","ompi_op_avx_3buff_min_float_avx512","ompi_op_avx_3buff_min_int16_t_avx","ompi_op_avx_3buff_min_int16_t_avx2","ompi_op_avx_3buff_min_int16_t_avx512","ompi_op_avx_3buff_min_int32_t_avx","ompi_op_avx_3buff_min_int32_t_avx2","ompi_op_avx_3buff_min_int32_t_avx512","ompi_op_avx_3buff_min_int64_t_avx512","ompi_op_avx_3buff_min_int8_t_avx","ompi_op_avx_3buff_min_int8_t_avx2","ompi_op_avx_3buff_min_int8_t_avx512","ompi_op_avx_3buff_min_uint16_t_avx","ompi_op_avx_3buff_min_uint16_t_avx2","ompi_op_avx_3buff_min_uint16_t_avx512","ompi_op_avx_3buff_min_uint32_t_avx","ompi_op_avx_3buff_min_uint32_t_avx2","ompi_op_avx_3buff_min_uint32_t_avx512","ompi_op_avx_3buff_min_uint64_t_avx512","ompi_op_avx_3buff_min_uint8_t_avx","ompi_op_avx_3buff_min_uint8_t_avx2","ompi_op_avx_3buff_min_uint8_t_avx512","ompi_op_avx_3buff_mul_double_avx","ompi_op_avx_3buff_mul_double_avx2","ompi_op_avx_3buff_mul_double_avx512","ompi_op_avx_3buff_mul_float_avx","ompi_op_avx_3buff_mul_float_avx2","ompi_op_avx_3buff_mul_float_avx512","ompi_op_avx_3buff_or_int16_t_avx","ompi_op_avx_3buff_or_int16_t_avx2","ompi_op_avx_3buff_or_int16_t_avx512","ompi_op_avx_3buff_or_int32_t_avx","ompi_op_avx_3buff_or_int32_t_avx2","ompi_op_avx_3buff_or_int32_t_avx512","ompi_op_avx_3buff_or_int64_t_avx","ompi_op_avx_3buff_or_int64_t_avx2","ompi_op_avx_3buff_or_int64_t_avx512","ompi_op_avx_3buff_or_int8_t_avx","ompi_op_avx_3buff_or_int8_t_avx2","ompi_op_avx_3buff_or_int8_t_avx512","ompi_op_avx_3buff_or_uint16_t_avx","ompi_op_avx_3buff_or_uint16_t_avx2","ompi_op_avx_3buff_or_uint16_t_avx512","ompi_op_avx_3buff_or_uint32_t_avx","ompi_op_avx_3buff_or_uint32_t_avx2","ompi_op_avx_3buff_or_uint32_t_avx512","ompi_op_avx_3buff_or_uint64_t_avx","ompi_op_avx_3buff_or_uint64_t_avx2","ompi_op_avx_3buff_or_uint64_t_avx512","ompi_op_avx_3buff_or_uint8_t_avx","ompi_op_avx_3buff_or_uint8_t_avx2","ompi_op_avx_3buff_or_uint8_t_avx512","ompi_op_avx_3buff_prod_int16_t_avx","ompi_op_avx_3buff_prod_int16_t_avx2","ompi_op_avx_3buff_prod_int16_t_avx512","ompi_op_avx_3buff_prod_int32_t_avx","ompi_op_avx_3buff_prod_int32_t_avx2","ompi_op_avx_3buff_prod_int32_t_avx512","ompi_op_avx_3buff_prod_int64_t_avx512","ompi_op_avx_3buff_prod_int8_t_avx","ompi_op_avx_3buff_prod_int8_t_avx2","ompi_op_avx_3buff_prod_int8_t_avx512","ompi_op_avx_3buff_prod_uint16_t_avx","ompi_op_avx_3buff_prod_uint16_t_avx2","ompi_op_avx_3buff_prod_uint16_t_avx512","ompi_op_avx_3buff_prod_uint32_t_avx","ompi_op_avx_3buff_prod_uint32_t_avx2","ompi_op_avx_3buff_prod_uint32_t_avx512","ompi_op_avx_3buff_prod_uint64_t_avx512","ompi_op_avx_3buff_prod_uint8_t_avx","ompi_op_avx_3buff_prod_uint8_t_avx2","ompi_op_avx_3buff_prod_uint8_t_avx512","ompi_op_avx_3buff_sum_int16_t_avx","ompi_op_avx_3buff_sum_int16_t_avx2","ompi_op_avx_3buff_sum_int16_t_avx512","ompi_op_avx_3buff_sum_int32_t_avx","ompi_op_avx_3buff_sum_int32_t_avx2","ompi_op_avx_3buff_sum_int32_t_avx512","ompi_op_avx_3buff_sum_int64_t_avx","ompi_op_avx_3buff_sum_int64_t_avx2","ompi_op_avx_3buff_sum_int64_t_avx512","ompi_op_avx_3buff_sum_int8_t_avx","ompi_op_avx_3buff_sum_int8_t_avx2","ompi_op_avx_3buff_sum_int8_t_avx512","ompi_op_avx_3buff_sum_uint16_t_avx","ompi_op_avx_3buff_sum_uint16_t_avx2","ompi_op_avx_3buff_sum_uint16_t_avx512","ompi_op_avx_3buff_sum_uint32_t_avx","ompi_op_avx_3buff_sum_uint32_t_avx2","ompi_op_avx_3buff_sum_uint32_t_avx512","ompi_op_avx_3buff_sum_uint64_t_avx","ompi_op_avx_3buff_sum_uint64_t_avx2","ompi_op_avx_3buff_sum_uint64_t_avx512","ompi_op_avx_3buff_sum_uint8_t_avx","ompi_op_avx_3buff_sum_uint8_t_avx2","ompi_op_avx_3buff_sum_uint8_t_avx512","ompi_op_avx_3buff_xor_int16_t_avx","ompi_op_avx_3buff_xor_int16_t_avx2","ompi_op_avx_3buff_xor_int16_t_avx512","ompi_op_avx_3buff_xor_int32_t_avx","ompi_op_avx_3buff_xor_int32_t_avx2","ompi_op_avx_3buff_xor_int32_t_avx512","ompi_op_avx_3buff_xor_int64_t_avx","ompi_op_avx_3buff_xor_int64_t_avx2","ompi_op_avx_3buff_xor_int64_t_avx512","ompi_op_avx_3buff_xor_int8_t_avx","ompi_op_avx_3buff_xor_int8_t_avx2","ompi_op_avx_3buff_xor_int8_t_avx512","ompi_op_avx_3buff_xor_uint16_t_avx","ompi_op_avx_3buff_xor_uint16_t_avx2","ompi_op_avx_3buff_xor_uint16_t_avx512","ompi_op_avx_3buff_xor_uint32_t_avx","ompi_op_avx_3buff_xor_uint32_t_avx2","ompi_op_avx_3buff_xor_uint32_t_avx512","ompi_op_avx_3buff_xor_uint64_t_avx","ompi_op_avx_3buff_xor_uint64_t_avx2","ompi_op_avx_3buff_xor_uint64_t_avx512","ompi_op_avx_3buff_xor_uint8_t_avx","ompi_op_avx_3buff_xor_uint8_t_avx2","ompi_op_avx_3buff_xor_uint8_t_avx512","ompi_op_base_2buff_band_byte","ompi_op_base_2buff_band_fortran_integer","ompi_op_base_2buff_band_fortran_integer1","ompi_op_base_2buff_band_fortran_integer2","ompi_op_base_2buff_band_fortran_integer4","ompi_op_base_2buff_band_fortran_integer8","ompi_op_base_2buff_band_int16_t","ompi_op_base_2buff_band_int32_t","ompi_op_base_2buff_band_int64_t","ompi_op_base_2buff_band_int8_t","ompi_op_base_2buff_band_long","ompi_op_base_2buff_band_uint16_t","ompi_op_base_2buff_band_uint32_t","ompi_op_base_2buff_band_uint64_t","ompi_op_base_2buff_band_uint8_t","ompi_op_base_2buff_band_unsigned_long","ompi_op_base_2buff_bor_byte","ompi_op_base_2buff_bor_fortran_integer","ompi_op_base_2buff_bor_fortran_integer1","ompi_op_base_2buff_bor_fortran_integer2","ompi_op_base_2buff_bor_fortran_integer4","ompi_op_base_2buff_bor_fortran_integer8","ompi_op_base_2buff_bor_int16_t","ompi_op_base_2buff_bor_int32_t","ompi_op_base_2buff_bor_int64_t","ompi_op_base_2buff_bor_int8_t","ompi_op_base_2buff_bor_long","ompi_op_base_2buff_bor_uint16_t","ompi_op_base_2buff_bor_uint32_t","ompi_op_base_2buff_bor_uint64_t","ompi_op_base_2buff_bor_uint8_t","ompi_op_base_2buff_bor_unsigned_long","ompi_op_base_2buff_bxor_byte","ompi_op_base_2buff_bxor_fortran_integer","ompi_op_base_2buff_bxor_fortran_integer1","ompi_op_base_2buff_bxor_fortran_integer2","ompi_op_base_2buff_bxor_fortran_integer4","ompi_op_base_2buff_bxor_fortran_integer8","ompi_op_base_2buff_bxor_int16_t","ompi_op_base_2buff_bxor_int32_t","ompi_op_base_2buff_bxor_int64_t","ompi_op_base_2buff_bxor_int8_t","ompi_op_base_2buff_bxor_long","ompi_op_base_2buff_bxor_uint16_t","ompi_op_base_2buff_bxor_uint32_t","ompi_op_base_2buff_bxor_uint64_t","ompi_op_base_2buff_bxor_uint8_t","ompi_op_base_2buff_bxor_unsigned_long","ompi_op_base_2buff_land_bool","ompi_op_base_2buff_land_fortran_logical","ompi_op_base_2buff_land_int16_t","ompi_op_base_2buff_land_int32_t","ompi_op_base_2buff_land_int64_t","ompi_op_base_2buff_land_int8_t","ompi_op_base_2buff_land_long","ompi_op_base_2buff_land_uint16_t","ompi_op_base_2buff_land_uint32_t","ompi_op_base_2buff_land_uint64_t","ompi_op_base_2buff_land_uint8_t","ompi_op_base_2buff_land_unsigned_long","ompi_op_base_2buff_lor_bool","ompi_op_base_2buff_lor_fortran_logical","ompi_op_base_2buff_lor_int16_t","ompi_op_base_2buff_lor_int32_t","ompi_op_base_2buff_lor_int64_t","ompi_op_base_2buff_lor_int8_t","ompi_op_base_2buff_lor_long","ompi_op_base_2buff_lor_uint16_t","ompi_op_base_2buff_lor_uint32_t","ompi_op_base_2buff_lor_uint64_t","ompi_op_base_2buff_lor_uint8_t","ompi_op_base_2buff_lor_unsigned_long","ompi_op_base_2buff_lxor_bool","ompi_op_base_2buff_lxor_fortran_logical","ompi_op_base_2buff_lxor_int16_t","ompi_op_base_2buff_lxor_int32_t","ompi_op_base_2buff_lxor_int64_t","ompi_op_base_2buff_lxor_int8_t","ompi_op_base_2buff_lxor_long","ompi_op_base_2buff_lxor_uint16_t","ompi_op_base_2buff_lxor_uint32_t","ompi_op_base_2buff_lxor_uint64_t","ompi_op_base_2buff_lxor_uint8_t","ompi_op_base_2buff_lxor_unsigned_long","ompi_op_base_2buff_max_double","ompi_op_base_2buff_max_float","ompi_op_base_2buff_max_fortran_double_precision","ompi_op_base_2buff_max_fortran_integer","ompi_op_base_2buff_max_fortran_integer1","ompi_op_base_2buff_max_fortran_integer2","ompi_op_base_2buff_max_fortran_integer4","ompi_op_base_2buff_max_fortran_integer8","ompi_op_base_2buff_max_fortran_real","ompi_op_base_2buff_max_fortran_real16","ompi_op_base_2buff_max_fortran_real4","ompi_op_base_2buff_max_fortran_real8","ompi_op_base_2buff_max_int16_t","ompi_op_base_2buff_max_int32_t","ompi_op_base_2buff_max_int64_t","ompi_op_base_2buff_max_int8_t","ompi_op_base_2buff_max_long","ompi_op_base_2buff_max_long_double","ompi_op_base_2buff_max_uint16_t","ompi_op_base_2buff_max_uint32_t","ompi_op_base_2buff_max_uint64_t","ompi_op_base_2buff_max_uint8_t","ompi_op_base_2buff_max_unsigned_long","ompi_op_base_2buff_maxloc_2double_precision","ompi_op_base_2buff_maxloc_2int","ompi_op_base_2buff_maxloc_2integer","ompi_op_base_2buff_maxloc_2real","ompi_op_base_2buff_maxloc_double_int","ompi_op_base_2buff_maxloc_float_int","ompi_op_base_2buff_maxloc_long_double_int","ompi_op_base_2buff_maxloc_long_int","ompi_op_base_2buff_maxloc_short_int","ompi_op_base_2buff_min_double","ompi_op_base_2buff_min_float","ompi_op_base_2buff_min_fortran_double_precision","ompi_op_base_2buff_min_fortran_integer","ompi_op_base_2buff_min_fortran_integer1","ompi_op_base_2buff_min_fortran_integer2","ompi_op_base_2buff_min_fortran_integer4","ompi_op_base_2buff_min_fortran_integer8","ompi_op_base_2buff_min_fortran_real","ompi_op_base_2buff_min_fortran_real16","ompi_op_base_2buff_min_fortran_real4","ompi_op_base_2buff_min_fortran_real8","ompi_op_base_2buff_min_int16_t","ompi_op_base_2buff_min_int32_t","ompi_op_base_2buff_min_int64_t","ompi_op_base_2buff_min_int8_t","ompi_op_base_2buff_min_long","ompi_op_base_2buff_min_long_double","ompi_op_base_2buff_min_uint16_t","ompi_op_base_2buff_min_uint32_t","ompi_op_base_2buff_min_uint64_t","ompi_op_base_2buff_min_uint8_t","ompi_op_base_2buff_min_unsigned_long","ompi_op_base_2buff_minloc_2double_precision","ompi_op_base_2buff_minloc_2int","ompi_op_base_2buff_minloc_2integer","ompi_op_base_2buff_minloc_2real","ompi_op_base_2buff_minloc_double_int","ompi_op_base_2buff_minloc_float_int","ompi_op_base_2buff_minloc_long_double_int","ompi_op_base_2buff_minloc_long_int","ompi_op_base_2buff_minloc_short_int","ompi_op_base_2buff_prod_c_double_complex","ompi_op_base_2buff_prod_c_float_complex","ompi_op_base_2buff_prod_c_long_double_complex","ompi_op_base_2buff_prod_double","ompi_op_base_2buff_prod_float","ompi_op_base_2buff_prod_fortran_double_precision","ompi_op_base_2buff_prod_fortran_integer","ompi_op_base_2buff_prod_fortran_integer1","ompi_op_base_2buff_prod_fortran_integer2","ompi_op_base_2buff_prod_fortran_integer4","ompi_op_base_2buff_prod_fortran_integer8","ompi_op_base_2buff_prod_fortran_real","ompi_op_base_2buff_prod_fortran_real16","ompi_op_base_2buff_prod_fortran_real4","ompi_op_base_2buff_prod_fortran_real8","ompi_op_base_2buff_prod_int16_t","ompi_op_base_2buff_prod_int32_t","ompi_op_base_2buff_prod_int64_t","ompi_op_base_2buff_prod_int8_t","ompi_op_base_2buff_prod_long","ompi_op_base_2buff_prod_long_double","ompi_op_base_2buff_prod_uint16_t","ompi_op_base_2buff_prod_uint32_t","ompi_op_base_2buff_prod_uint64_t","ompi_op_base_2buff_prod_uint8_t","ompi_op_base_2buff_prod_unsigned_long","ompi_op_base_2buff_sum_c_double_complex","ompi_op_base_2buff_sum_c_float_complex","ompi_op_base_2buff_sum_c_long_double_complex","ompi_op_base_2buff_sum_double","ompi_op_base_2buff_sum_float","ompi_op_base_2buff_sum_fortran_double_precision","ompi_op_base_2buff_sum_fortran_integer","ompi_op_base_2buff_sum_fortran_integer1","ompi_op_base_2buff_sum_fortran_integer2","ompi_op_base_2buff_sum_fortran_integer4","ompi_op_base_2buff_sum_fortran_integer8","ompi_op_base_2buff_sum_fortran_real","ompi_op_base_2buff_sum_fortran_real16","ompi_op_base_2buff_sum_fortran_real4","ompi_op_base_2buff_sum_fortran_real8","ompi_op_base_2buff_sum_int16_t","ompi_op_base_2buff_sum_int32_t","ompi_op_base_2buff_sum_int64_t","ompi_op_base_2buff_sum_int8_t","ompi_op_base_2buff_sum_long","ompi_op_base_2buff_sum_long_double","ompi_op_base_2buff_sum_uint16_t","ompi_op_base_2buff_sum_uint32_t","ompi_op_base_2buff_sum_uint64_t","ompi_op_base_2buff_sum_uint8_t","ompi_op_base_2buff_sum_unsigned_long","ompi_op_base_3buff_band_byte","ompi_op_base_3buff_band_fortran_integer","ompi_op_base_3buff_band_fortran_integer1","ompi_op_base_3buff_band_fortran_integer2","ompi_op_base_3buff_band_fortran_integer4","ompi_op_base_3buff_band_fortran_integer8","ompi_op_base_3buff_band_int16_t","ompi_op_base_3buff_band_int32_t","ompi_op_base_3buff_band_int64_t","ompi_op_base_3buff_band_int8_t","ompi_op_base_3buff_band_long","ompi_op_base_3buff_band_uint16_t","ompi_op_base_3buff_band_uint32_t","ompi_op_base_3buff_band_uint64_t","ompi_op_base_3buff_band_uint8_t","ompi_op_base_3buff_band_unsigned_long","ompi_op_base_3buff_bor_byte","ompi_op_base_3buff_bor_fortran_integer","ompi_op_base_3buff_bor_fortran_integer1","ompi_op_base_3buff_bor_fortran_integer2","ompi_op_base_3buff_bor_fortran_integer4","ompi_op_base_3buff_bor_fortran_integer8","ompi_op_base_3buff_bor_int16_t","ompi_op_base_3buff_bor_int32_t","ompi_op_base_3buff_bor_int64_t","ompi_op_base_3buff_bor_int8_t","ompi_op_base_3buff_bor_long","ompi_op_base_3buff_bor_uint16_t","ompi_op_base_3buff_bor_uint32_t","ompi_op_base_3buff_bor_uint64_t","ompi_op_base_3buff_bor_uint8_t","ompi_op_base_3buff_bor_unsigned_long","ompi_op_base_3buff_bxor_byte","ompi_op_base_3buff_bxor_fortran_integer","ompi_op_base_3buff_bxor_fortran_integer1","ompi_op_base_3buff_bxor_fortran_integer2","ompi_op_base_3buff_bxor_fortran_integer4","ompi_op_base_3buff_bxor_fortran_integer8","ompi_op_base_3buff_bxor_int16_t","ompi_op_base_3buff_bxor_int32_t","ompi_op_base_3buff_bxor_int64_t","ompi_op_base_3buff_bxor_int8_t","ompi_op_base_3buff_bxor_long","ompi_op_base_3buff_bxor_uint16_t","ompi_op_base_3buff_bxor_uint32_t","ompi_op_base_3buff_bxor_uint64_t","ompi_op_base_3buff_bxor_uint8_t","ompi_op_base_3buff_bxor_unsigned_long","ompi_op_base_3buff_land_bool","ompi_op_base_3buff_land_fortran_logical","ompi_op_base_3buff_land_int16_t","ompi_op_base_3buff_land_int32_t","ompi_op_base_3buff_land_int64_t","ompi_op_base_3buff_land_int8_t","ompi_op_base_3buff_land_long","ompi_op_base_3buff_land_uint16_t","ompi_op_base_3buff_land_uint32_t","ompi_op_base_3buff_land_uint64_t","ompi_op_base_3buff_land_uint8_t","ompi_op_base_3buff_land_unsigned_long","ompi_op_base_3buff_lor_bool","ompi_op_base_3buff_lor_fortran_logical","ompi_op_base_3buff_lor_int16_t","ompi_op_base_3buff_lor_int32_t","ompi_op_base_3buff_lor_int64_t","ompi_op_base_3buff_lor_int8_t","ompi_op_base_3buff_lor_long","ompi_op_base_3buff_lor_uint16_t","ompi_op_base_3buff_lor_uint32_t","ompi_op_base_3buff_lor_uint64_t","ompi_op_base_3buff_lor_uint8_t","ompi_op_base_3buff_lor_unsigned_long","ompi_op_base_3buff_lxor_bool","ompi_op_base_3buff_lxor_fortran_logical","ompi_op_base_3buff_lxor_int16_t","ompi_op_base_3buff_lxor_int32_t","ompi_op_base_3buff_lxor_int64_t","ompi_op_base_3buff_lxor_int8_t","ompi_op_base_3buff_lxor_long","ompi_op_base_3buff_lxor_uint16_t","ompi_op_base_3buff_lxor_uint32_t","ompi_op_base_3buff_lxor_uint64_t","ompi_op_base_3buff_lxor_uint8_t","ompi_op_base_3buff_lxor_unsigned_long","ompi_op_base_3buff_max_double","ompi_op_base_3buff_max_float","ompi_op_base_3buff_max_fortran_double_precision","ompi_op_base_3buff_max_fortran_integer","ompi_op_base_3buff_max_fortran_integer1","ompi_op_base_3buff_max_fortran_integer2","ompi_op_base_3buff_max_fortran_integer4","ompi_op_base_3buff_max_fortran_integer8","ompi_op_base_3buff_max_fortran_real","ompi_op_base_3buff_max_fortran_real16","ompi_op_base_3buff_max_fortran_real4","ompi_op_base_3buff_max_fortran_real8","ompi_op_base_3buff_max_int16_t","ompi_op_base_3buff_max_int32_t","ompi_op_base_3buff_max_int64_t","ompi_op_base_3buff_max_int8_t","ompi_op_base_3buff_max_long","ompi_op_base_3buff_max_long_double","ompi_op_base_3buff_max_uint16_t","ompi_op_base_3buff_max_uint32_t","ompi_op_base_3buff_max_uint64_t","ompi_op_base_3buff_max_uint8_t","ompi_op_base_3buff_max_unsigned_long","ompi_op_base_3buff_maxloc_2double_precision","ompi_op_base_3buff_maxloc_2int","ompi_op_base_3buff_maxloc_2integer","ompi_op_base_3buff_maxloc_2real","ompi_op_base_3buff_maxloc_double_int","ompi_op_base_3buff_maxloc_float_int","ompi_op_base_3buff_maxloc_long_double_int","ompi_op_base_3buff_maxloc_long_int","ompi_op_base_3buff_maxloc_short_int","ompi_op_base_3buff_min_double","ompi_op_base_3buff_min_float","ompi_op_base_3buff_min_fortran_double_precision","ompi_op_base_3buff_min_fortran_integer","ompi_op_base_3buff_min_fortran_integer1","ompi_op_base_3buff_min_fortran_integer2","ompi_op_base_3buff_min_fortran_integer4","ompi_op_base_3buff_min_fortran_integer8","ompi_op_base_3buff_min_fortran_real","ompi_op_base_3buff_min_fortran_real16","ompi_op_base_3buff_min_fortran_real4","ompi_op_base_3buff_min_fortran_real8","ompi_op_base_3buff_min_int16_t","ompi_op_base_3buff_min_int32_t","ompi_op_base_3buff_min_int64_t","ompi_op_base_3buff_min_int8_t","ompi_op_base_3buff_min_long","ompi_op_base_3buff_min_long_double","ompi_op_base_3buff_min_uint16_t","ompi_op_base_3buff_min_uint32_t","ompi_op_base_3buff_min_uint64_t","ompi_op_base_3buff_min_uint8_t","ompi_op_base_3buff_min_unsigned_long","ompi_op_base_3buff_minloc_2double_precision","ompi_op_base_3buff_minloc_2int","ompi_op_base_3buff_minloc_2integer","ompi_op_base_3buff_minloc_2real","ompi_op_base_3buff_minloc_double_int","ompi_op_base_3buff_minloc_float_int","ompi_op_base_3buff_minloc_long_double_int","ompi_op_base_3buff_minloc_long_int","ompi_op_base_3buff_minloc_short_int","ompi_op_base_3buff_prod_c_double_complex","ompi_op_base_3buff_prod_c_float_complex","ompi_op_base_3buff_prod_c_long_double_complex","ompi_op_base_3buff_prod_double","ompi_op_base_3buff_prod_float","ompi_op_base_3buff_prod_fortran_double_precision","ompi_op_base_3buff_prod_fortran_integer","ompi_op_base_3buff_prod_fortran_integer1","ompi_op_base_3buff_prod_fortran_integer2","ompi_op_base_3buff_prod_fortran_integer4","ompi_op_base_3buff_prod_fortran_integer8","ompi_op_base_3buff_prod_fortran_real","ompi_op_base_3buff_prod_fortran_real16","ompi_op_base_3buff_prod_fortran_real4","ompi_op_base_3buff_prod_fortran_real8","ompi_op_base_3buff_prod_int16_t","ompi_op_base_3buff_prod_int32_t","ompi_op_base_3buff_prod_int64_t","ompi_op_base_3buff_prod_int8_t","ompi_op_base_3buff_prod_long","ompi_op_base_3buff_prod_long_double","ompi_op_base_3buff_prod_uint16_t","ompi_op_base_3buff_prod_uint32_t","ompi_op_base_3buff_prod_uint64_t","ompi_op_base_3buff_prod_uint8_t","ompi_op_base_3buff_prod_unsigned_long","ompi_op_base_3buff_sum_c_double_complex","ompi_op_base_3buff_sum_c_float_complex","ompi_op_base_3buff_sum_c_long_double_complex","ompi_op_base_3buff_sum_double","ompi_op_base_3buff_sum_float","ompi_op_base_3buff_sum_fortran_double_precision","ompi_op_base_3buff_sum_fortran_integer","ompi_op_base_3buff_sum_fortran_integer1","ompi_op_base_3buff_sum_fortran_integer2","ompi_op_base_3buff_sum_fortran_integer4","ompi_op_base_3buff_sum_fortran_integer8","ompi_op_base_3buff_sum_fortran_real","ompi_op_base_3buff_sum_fortran_real16","ompi_op_base_3buff_sum_fortran_real4","ompi_op_base_3buff_sum_fortran_real8","ompi_op_base_3buff_sum_int16_t","ompi_op_base_3buff_sum_int32_t","ompi_op_base_3buff_sum_int64_t","ompi_op_base_3buff_sum_int8_t","ompi_op_base_3buff_sum_long","ompi_op_base_3buff_sum_long_double","ompi_op_base_3buff_sum_uint16_t","ompi_op_base_3buff_sum_uint32_t","ompi_op_base_3buff_sum_uint64_t","ompi_op_base_3buff_sum_uint8_t","ompi_op_base_3buff_sum_unsigned_long","ompi_op_base_find_available","ompi_op_base_op_select","ompi_op_construct","ompi_op_create_user","ompi_op_destruct","ompi_op_finalize","ompi_op_init","ompi_op_reduce:0x103bf0","ompi_op_reduce:0x105a40","ompi_op_reduce:0x109a40","ompi_op_reduce:0x11a690","ompi_op_reduce:0x11d440","ompi_op_reduce:0x128cd0","ompi_op_reduce:0x153a70","ompi_op_reduce:0x15a800","ompi_op_reduce:0x15ce80","ompi_op_reduce:0x15ed30","ompi_op_reduce:0x1642a0","ompi_op_reduce:0x1c2ff0","ompi_op_reduce:0x1ce8e0","ompi_op_reduce:0x1e8750","ompi_op_reduce:0x5eb80","ompi_op_reduce:0xef780","ompi_op_reduce:0xf6ab0","ompi_op_reduce:0xfc2b0","ompi_op_reduce:0xff940","ompi_op_set_java_callback","ompi_osc_base_finalize","ompi_osc_base_find_available","ompi_osc_base_get_primitive_type_info","ompi_osc_base_process_op","ompi_osc_base_select","ompi_osc_base_set_memory_alignment","ompi_osc_base_sndrcv_op","ompi_osc_get_data_blocking","ompi_osc_get_data_complete","ompi_osc_module_add_peer","ompi_osc_monitoring_portals4_accumulate","ompi_osc_monitoring_portals4_attach","ompi_osc_monitoring_portals4_compare_and_swap","ompi_osc_monitoring_portals4_complete","ompi_osc_monitoring_portals4_detach","ompi_osc_monitoring_portals4_fence","ompi_osc_monitoring_portals4_fetch_and_op","ompi_osc_monitoring_portals4_flush","ompi_osc_monitoring_portals4_flush_all","ompi_osc_monitoring_portals4_flush_local","ompi_osc_monitoring_portals4_flush_local_all","ompi_osc_monitoring_portals4_free","ompi_osc_monitoring_portals4_get","ompi_osc_monitoring_portals4_get_accumulate","ompi_osc_monitoring_portals4_lock","ompi_osc_monitoring_portals4_lock_all","ompi_osc_monitoring_portals4_post","ompi_osc_monitoring_portals4_put","ompi_osc_monitoring_portals4_raccumulate","ompi_osc_monitoring_portals4_rget","ompi_osc_monitoring_portals4_rget_accumulate","ompi_osc_monitoring_portals4_rput","ompi_osc_monitoring_portals4_set_template","ompi_osc_monitoring_portals4_start","ompi_osc_monitoring_portals4_sync","ompi_osc_monitoring_portals4_test","ompi_osc_monitoring_portals4_unlock","ompi_osc_monitoring_portals4_unlock_all","ompi_osc_monitoring_portals4_wait","ompi_osc_monitoring_rdma_accumulate","ompi_osc_monitoring_rdma_attach","ompi_osc_monitoring_rdma_compare_and_swap","ompi_osc_monitoring_rdma_complete","ompi_osc_monitoring_rdma_detach","ompi_osc_monitoring_rdma_fence","ompi_osc_monitoring_rdma_fetch_and_op","ompi_osc_monitoring_rdma_flush","ompi_osc_monitoring_rdma_flush_all","ompi_osc_monitoring_rdma_flush_local","ompi_osc_monitoring_rdma_flush_local_all","ompi_osc_monitoring_rdma_free","ompi_osc_monitoring_rdma_get","ompi_osc_monitoring_rdma_get_accumulate","ompi_osc_monitoring_rdma_lock","ompi_osc_monitoring_rdma_lock_all","ompi_osc_monitoring_rdma_post","ompi_osc_monitoring_rdma_put","ompi_osc_monitoring_rdma_raccumulate","ompi_osc_monitoring_rdma_rget","ompi_osc_monitoring_rdma_rget_accumulate","ompi_osc_monitoring_rdma_rput","ompi_osc_monitoring_rdma_set_template","ompi_osc_monitoring_rdma_start","ompi_osc_monitoring_rdma_sync","ompi_osc_monitoring_rdma_test","ompi_osc_monitoring_rdma_unlock","ompi_osc_monitoring_rdma_unlock_all","ompi_osc_monitoring_rdma_wait","ompi_osc_monitoring_sm_accumulate","ompi_osc_monitoring_sm_attach","ompi_osc_monitoring_sm_compare_and_swap","ompi_osc_monitoring_sm_complete","ompi_osc_monitoring_sm_detach","ompi_osc_monitoring_sm_fence","ompi_osc_monitoring_sm_fetch_and_op","ompi_osc_monitoring_sm_flush","ompi_osc_monitoring_sm_flush_all","ompi_osc_monitoring_sm_flush_local","ompi_osc_monitoring_sm_flush_local_all","ompi_osc_monitoring_sm_free","ompi_osc_monitoring_sm_get","ompi_osc_monitoring_sm_get_accumulate","ompi_osc_monitoring_sm_lock","ompi_osc_monitoring_sm_lock_all","ompi_osc_monitoring_sm_post","ompi_osc_monitoring_sm_put","ompi_osc_monitoring_sm_raccumulate","ompi_osc_monitoring_sm_rget","ompi_osc_monitoring_sm_rget_accumulate","ompi_osc_monitoring_sm_rput","ompi_osc_monitoring_sm_set_template","ompi_osc_monitoring_sm_start","ompi_osc_monitoring_sm_sync","ompi_osc_monitoring_sm_test","ompi_osc_monitoring_sm_unlock","ompi_osc_monitoring_sm_unlock_all","ompi_osc_monitoring_sm_wait","ompi_osc_monitoring_ucx_accumulate","ompi_osc_monitoring_ucx_attach","ompi_osc_monitoring_ucx_compare_and_swap","ompi_osc_monitoring_ucx_complete","ompi_osc_monitoring_ucx_detach","ompi_osc_monitoring_ucx_fence","ompi_osc_monitoring_ucx_fetch_and_op","ompi_osc_monitoring_ucx_flush","ompi_osc_monitoring_ucx_flush_all","ompi_osc_monitoring_ucx_flush_local","ompi_osc_monitoring_ucx_flush_local_all","ompi_osc_monitoring_ucx_free","ompi_osc_monitoring_ucx_get","ompi_osc_monitoring_ucx_get_accumulate","ompi_osc_monitoring_ucx_lock","ompi_osc_monitoring_ucx_lock_all","ompi_osc_monitoring_ucx_post","ompi_osc_monitoring_ucx_put","ompi_osc_monitoring_ucx_raccumulate","ompi_osc_monitoring_ucx_rget","ompi_osc_monitoring_ucx_rget_accumulate","ompi_osc_monitoring_ucx_rput","ompi_osc_monitoring_ucx_set_template","ompi_osc_monitoring_ucx_start","ompi_osc_monitoring_ucx_sync","ompi_osc_monitoring_ucx_test","ompi_osc_monitoring_ucx_unlock","ompi_osc_monitoring_ucx_unlock_all","ompi_osc_monitoring_ucx_wait","ompi_osc_rdma_accumulate","ompi_osc_rdma_add_attachment","ompi_osc_rdma_atomic_complete","ompi_osc_rdma_attach","ompi_osc_rdma_btl_op.constprop.0","ompi_osc_rdma_cas_put_complete","ompi_osc_rdma_check_posts","ompi_osc_rdma_compare_and_swap","ompi_osc_rdma_compare_and_swap.cold","ompi_osc_rdma_complete_atomic","ompi_osc_rdma_component_finalize","ompi_osc_rdma_component_init","ompi_osc_rdma_component_query","ompi_osc_rdma_component_register","ompi_osc_rdma_component_select","ompi_osc_rdma_demand_lock_peer","ompi_osc_rdma_detach","ompi_osc_rdma_fence_atomic","ompi_osc_rdma_fetch_and_op","ompi_osc_rdma_find_dynamic_region","ompi_osc_rdma_flush","ompi_osc_rdma_flush_all","ompi_osc_rdma_flush_local","ompi_osc_rdma_flush_local_all","ompi_osc_rdma_frag_alloc","ompi_osc_rdma_frag_alloc.constprop.0:0x1dafc0","ompi_osc_rdma_frag_alloc.constprop.0:0x1dd090","ompi_osc_rdma_frag_alloc.constprop.0:0x1e0770","ompi_osc_rdma_free","ompi_osc_rdma_gacc_amo.constprop.0","ompi_osc_rdma_gacc_master","ompi_osc_rdma_gacc_master_cleanup","ompi_osc_rdma_gacc_master_cleanup.cold","ompi_osc_rdma_get","ompi_osc_rdma_get_accumulate","ompi_osc_rdma_get_complete","ompi_osc_rdma_get_contig","ompi_osc_rdma_get_partial","ompi_osc_rdma_get_peers","ompi_osc_rdma_handle_fini","ompi_osc_rdma_handle_init","ompi_osc_rdma_initialize_region.isra.0","ompi_osc_rdma_lock_all_atomic","ompi_osc_rdma_lock_atomic","ompi_osc_rdma_lock_atomic_internal","ompi_osc_rdma_lock_release_exclusive.constprop.0.isra.0","ompi_osc_rdma_lock_release_exclusive.constprop.0.isra.0.cold","ompi_osc_rdma_master_noncontig","ompi_osc_rdma_new_peer","ompi_osc_rdma_new_peer.cold","ompi_osc_rdma_peer_accumulate_cleanup","ompi_osc_rdma_peer_accumulate_cleanup.cold","ompi_osc_rdma_peer_basic_construct","ompi_osc_rdma_peer_basic_destruct","ompi_osc_rdma_peer_btl_endpoint","ompi_osc_rdma_peer_construct","ompi_osc_rdma_peer_destruct","ompi_osc_rdma_peer_dynamic_construct","ompi_osc_rdma_peer_dynamic_destruct","ompi_osc_rdma_peer_lookup","ompi_osc_rdma_peer_setup","ompi_osc_rdma_pending_op_construct","ompi_osc_rdma_pending_op_destruct","ompi_osc_rdma_post_atomic","ompi_osc_rdma_put","ompi_osc_rdma_put_complete","ompi_osc_rdma_put_complete_flush","ompi_osc_rdma_put_contig","ompi_osc_rdma_pvar_read","ompi_osc_rdma_raccumulate","ompi_osc_rdma_release_peers","ompi_osc_rdma_request_complete:0x1c62b0","ompi_osc_rdma_request_complete:0x1cee10","ompi_osc_rdma_rget","ompi_osc_rdma_rget_accumulate","ompi_osc_rdma_rget_accumulate_internal","ompi_osc_rdma_rget_accumulate_internal.cold","ompi_osc_rdma_rput","ompi_osc_rdma_set_no_lock_info","ompi_osc_rdma_start_atomic","ompi_osc_rdma_sync","ompi_osc_rdma_sync_allocate","ompi_osc_rdma_sync_constructor","ompi_osc_rdma_sync_destructor","ompi_osc_rdma_sync_pscw_peer","ompi_osc_rdma_sync_return","ompi_osc_rdma_test_atomic","ompi_osc_rdma_unlock_all_atomic","ompi_osc_rdma_unlock_all_atomic.cold","ompi_osc_rdma_unlock_atomic","ompi_osc_rdma_unlock_atomic.cold","ompi_osc_rdma_wait_atomic","ompi_osc_sm_accumulate","ompi_osc_sm_attach","ompi_osc_sm_compare_and_swap","ompi_osc_sm_complete","ompi_osc_sm_detach","ompi_osc_sm_fence","ompi_osc_sm_fetch_and_op","ompi_osc_sm_flush","ompi_osc_sm_flush_all","ompi_osc_sm_flush_local","ompi_osc_sm_flush_local_all","ompi_osc_sm_free","ompi_osc_sm_get","ompi_osc_sm_get_accumulate","ompi_osc_sm_get_info","ompi_osc_sm_group_ranks","ompi_osc_sm_lock","ompi_osc_sm_lock_all","ompi_osc_sm_post","ompi_osc_sm_put","ompi_osc_sm_raccumulate","ompi_osc_sm_rget","ompi_osc_sm_rget_accumulate","ompi_osc_sm_rput","ompi_osc_sm_set_info","ompi_osc_sm_shared_query","ompi_osc_sm_start","ompi_osc_sm_sync","ompi_osc_sm_test","ompi_osc_sm_unlock","ompi_osc_sm_unlock_all","ompi_osc_sm_wait","ompi_pmix_print_id","ompi_pmix_print_name","ompi_pmix_snprintf_jobid","ompi_pml_ob1_append_frag_to_ordered_list","ompi_pml_ob1_check_cantmatch_for_match","ompi_pml_v_output_close","ompi_pml_v_output_open","ompi_proc_all","ompi_proc_allocate","ompi_proc_compare_vid","ompi_proc_complete_init","ompi_proc_complete_init_single","ompi_proc_construct","ompi_proc_destruct","ompi_proc_finalize","ompi_proc_find","ompi_proc_find_and_add","ompi_proc_for_name","ompi_proc_get_allocated","ompi_proc_init","ompi_proc_lookup","ompi_proc_pack","ompi_proc_refresh","ompi_proc_self","ompi_proc_unpack","ompi_proc_world","ompi_proc_world_size","ompi_rbcast_bml_send_complete_cb","ompi_report_comm_methods","ompi_request_check_same_instance","ompi_request_construct","ompi_request_default_test","ompi_request_default_test_all","ompi_request_default_test_any","ompi_request_default_test_some","ompi_request_default_wait","ompi_request_default_wait_all","ompi_request_default_wait_any","ompi_request_default_wait_some","ompi_request_destruct","ompi_request_empty_free","ompi_request_finalize","ompi_request_init","ompi_request_is_failed_fn","ompi_request_null_cancel","ompi_request_null_free","ompi_request_persistent_noop_create","ompi_request_persistent_noop_free","ompi_request_wait_completion:0x1f3e20","ompi_request_wait_completion:0x1f56c0","ompi_request_wait_completion:0x1f7c70","ompi_request_wait_completion:0x212b80","ompi_request_wait_completion:0x5d7f0","ompi_rounddown","ompi_rte_abort","ompi_rte_abort_peers","ompi_rte_breakpoint","ompi_rte_compare_name_fields","ompi_rte_convert_process_name_to_string","ompi_rte_convert_string_to_process_name","ompi_rte_finalize","ompi_rte_init","ompi_rte_wait_for_debugger","ompi_seq_tracker_check_duplicate","ompi_seq_tracker_construct","ompi_seq_tracker_copy","ompi_seq_tracker_destruct","ompi_seq_tracker_insert","ompi_set_group_rank","ompi_show_all_mca_params","ompi_test_fortran_constants","ompi_test_fortran_constants_","ompi_test_fortran_constants__","ompi_test_fortran_constants_f","ompi_type_dup_fn_f","ompi_type_null_copy_fn_f","ompi_type_null_delete_fn_f","ompi_vprotocol_pessimist_delivery_replay","ompi_vprotocol_pessimist_event_logger_connect","ompi_vprotocol_pessimist_event_logger_connect.cold","ompi_vprotocol_pessimist_event_logger_disconnect","ompi_vprotocol_pessimist_matching_replay","ompi_vprotocol_pessimist_sender_based_alloc","ompi_vprotocol_pessimist_sender_based_finalize","ompi_vprotocol_pessimist_sender_based_init","ompi_win_allocate","ompi_win_allocate_shared","ompi_win_construct","ompi_win_create","ompi_win_create_dynamic","ompi_win_destruct","ompi_win_dup_fn_f","ompi_win_finalize","ompi_win_free","ompi_win_get_name","ompi_win_group","ompi_win_init","ompi_win_null_copy_fn_f","ompi_win_null_delete_fn_f","ompi_win_set_name","ompit_opal_to_mpit_error","ompit_var_type_to_datatype","opal_free_list_wait","opal_free_list_wait.constprop.0:0x1f8730","opal_free_list_wait.constprop.0:0x1fbad0","open_component","optimize_arity","partial_aggregate_aff_mat","partial_exhaustive_search","partial_update_val","rankkeycompare","recurs_select_independent_groups","recv_cb:0x1613b0","recv_cb:0x1647d0","recv_request_pml_complete","reduce_inorder","register_component:0x1686b0","register_component:0x175430","register_component:0x17baa0","register_datarep","register_tm_clones","release_objs_callback","release_vecs_callback","request_cancel:0x127800","request_cancel:0x1da890","request_construct:0x127810","request_construct:0x1da8a0","request_free:0x127b50","request_free:0x1da910","request_start","result_request","retreive_size","retreive_size.cold","save_ptr","select_independent_groups","self_register","send_cb:0x160b60","send_cb:0x163f50","send_msg","send_msg.cold","send_request_pml_complete","set_handler_default","set_value","shuffle_init.constprop.0:0x16bb70","shuffle_init.constprop.0:0x16f180","sm_close","sm_module_enable","sm_register:0x108080","sm_register:0x215be0","sync_register","tab_cmp","tgt_to_tm","thread_loop","tm_bucket_grouping","tm_build_affinity_mat","tm_build_synthetic_topology","tm_build_tree_from_topology","tm_calloc","tm_close_verbose_file","tm_complete_obj_weight","tm_compute_mapping","tm_compute_nb_leaves_from_level","tm_create_work","tm_destroy_work","tm_display_arity","tm_display_other_heuristics","tm_display_solution","tm_display_tab","tm_display_topology","tm_enable_oversubscribing","tm_fiboTreeDel","tm_fiboTreeExit","tm_fiboTreeFree","tm_fiboTreeInit","tm_fiboTreeMin","tm_fill_tab","tm_finalize","tm_free","tm_free_affinity_mat","tm_free_solution","tm_free_topology","tm_free_tree","tm_genrand_int31","tm_genrand_int32","tm_genrand_real1","tm_genrand_real2","tm_genrand_real3","tm_genrand_res53","tm_get_exhaustive_search_flag","tm_get_greedy_flag","tm_get_local_topology_with_hwloc","tm_get_local_topology_with_hwloc.cold","tm_get_nb_threads","tm_get_numbering","tm_get_time","tm_get_verbose_level","tm_get_verbose_output","tm_in_tab","tm_init_genrand","tm_intCIV_get","tm_intCIV_init","tm_intCIV_isInitialized","tm_intCIV_set","tm_int_cmp_inc","tm_kPartitioning","tm_kpartition","tm_kpartition.cold","tm_kpartition_build_tree_from_topology","tm_load_aff_mat","tm_load_topology","tm_load_topology.cold","tm_malloc","tm_map_MPIPP","tm_map_Packed","tm_map_RR","tm_map_topology","tm_mem_check","tm_nb_processing_units","tm_new_affinity_mat","tm_open_verbose_file","tm_optimize_topology","tm_print_1D_tab","tm_realloc","tm_set_exhaustive_search_flag","tm_set_greedy_flag","tm_set_max_nb_threads","tm_set_node","tm_set_numbering","tm_set_verbose_level","tm_submit_work","tm_terminate_thread_pool","tm_test_main","tm_time_diff","tm_topology_add_binding_constraints","tm_topology_set_binding_constraints","tm_try_add_edge","tm_update_val","tm_wait_work_completion","treematch_module_constructor","treematch_module_destructor","tuned_close","tuned_module_enable","tuned_open","tuned_register","vprotocol_pessimist_delivery_log","vprotocol_pessimist_request_construct","vprotocol_pessimist_request_no_free","vulcan_register","weighted_degree_dsc","write_init","write_init.constprop.0"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/openmpi-5.0.7-y6xplmqxukxsuvvwnv2jqvztli5rhevm/lib/libmpi.so.40","include_offsets":false},{"type":2,"name":"ior","functions":["AllocResults","CheckFileSize","CheckForOutliers","CheckRunSettings","CompareBuffers","CountErrors","CreateTest","CurrentTimeString","DUMMY_Close","DUMMY_Create","DUMMY_Delete","DUMMY_Fsync","DUMMY_GetFileSize","DUMMY_Open","DUMMY_Sync","DUMMY_Xfer","DUMMY_access","DUMMY_check_params","DUMMY_getVersion","DUMMY_mkdir","DUMMY_options","DUMMY_rmdir","DUMMY_stat","DUMMY_statfs","DecodeDirective","DelaySecs","DestroyTest","DestroyTests","DisplayFreespace","DisplayOutliers","DistributeHints","DumpBuffer","ExtractHint","FailMessage","FillBuffer","FillIncompressibleBuffer","FreeResults","GetNumNodes","GetNumTasks","GetNumTasksOnNode0","GetOffsetArrayRandom","GetOffsetArraySequential","GetPlatformName","GetTestFileName","GetTimeStamp","HDF5_Access","HDF5_Close","HDF5_Create","HDF5_Delete","HDF5_Fsync","HDF5_GetFileSize","HDF5_GetVersion","HDF5_Open","HDF5_Xfer","HDF5_options","HogMemory","HumanReadable","InitTests","MMAP_Close","MMAP_Create","MMAP_Fsync","MMAP_Open","MMAP_Xfer","MMAP_options","MPIIO_Access","MPIIO_Close","MPIIO_Create","MPIIO_Delete","MPIIO_Fsync","MPIIO_GetFileSize","MPIIO_GetVersion","MPIIO_Open","MPIIO_Xfer","NodeMemoryStringToBytes","POSIX_Close","POSIX_Create","POSIX_Delete","POSIX_Fsync","POSIX_GetFileSize","POSIX_Mknod","POSIX_Open","POSIX_Sync","POSIX_Xfer","POSIX_options","PPDouble","ParseCommandLine","ParseFileName","ParseLine","PrependDir","PrintArrayEnd","PrintArrayNamedStart","PrintArrayStart","PrintEndSection","PrintHeader","PrintIndent","PrintKeyVal","PrintKeyValDouble","PrintKeyValEnd","PrintKeyValInt","PrintKeyValStart","PrintLongSummaryAllTests","PrintLongSummaryHeader","PrintLongSummaryOneOperation","PrintLongSummaryOneTest","PrintNamedArrayStart","PrintNamedSectionStart","PrintNextToken","PrintReducedResult","PrintRemoveTiming","PrintRepeatEnd","PrintRepeatStart","PrintShortSummary","PrintStartSection","PrintTableHeader","PrintTestEnds","PrintTimestamp","QueryNodeMapping","ReadConfigScript","ReadStoneWallingIterations","ReduceIterResults","Regex","RemoveFile","SeedRandGen","SetHints","SetupDataSet","ShowFileSystemSize","ShowHints","ShowSetup","ShowTestEnd","ShowTestStart","StoreStoneWallingIterations","StringToBytes","TestIoSys","TimeDeviation","ValidateTests","WriteOrRead","WriteOrReadSingle","WriteTimes","XferBuffersFree","XferBuffersSetup","__do_global_dtors_aux","aiori_count","aiori_default","aiori_finalize","aiori_get_version","aiori_initialize","aiori_posix_access","aiori_posix_mkdir","aiori_posix_rmdir","aiori_posix_stat","aiori_posix_statfs","aiori_select","aiori_supported_apis","airoi_create_all_module_options","airoi_update_module_options","aligned_buffer_alloc","aligned_buffer_free","bw_ops_values","bw_values","contains_only","createGlobalOptions","decodeDirectiveWrapper","deregister_tm_clones","file_hits_histogram","frame_dummy","init_IOR_Param_t","init_clock","init_or_fini","init_or_fini_internal","ior_main","ior_mmap_file","ior_run","main","malloc_and_touch","mean_of_array_of_doubles","ops_values","option_parse","option_parse_key_value","option_parse_str","option_parse_token","option_print_current","option_print_help","print_current_option_section","print_help_section","print_option_value","print_value","register_tm_clones","safeMalloc","set_o_direct_flag","string_to_bytes","test_time_elapsed","updateParsedOptions"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/ior-3.3.0-ip47j26fw7xxfftdzjvy2h36phgcuypv/bin/ior","include_offsets":false},{"type":1,"name":"lustre","functions":["cap_drop"]}] diff --git a/etc/datacrumbs/data/probes-invalid-haridev-lead.json b/etc/datacrumbs/data/probes-invalid-haridev-lead.json index e38f0cab..fd9f7654 100644 --- a/etc/datacrumbs/data/probes-invalid-haridev-lead.json +++ b/etc/datacrumbs/data/probes-invalid-haridev-lead.json @@ -1 +1 @@ -[{"type":4,"name":"custom1","functions":[],"bpf_path":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2},{"type":0,"name":"sys","functions":[]},{"type":1,"name":"os_page_cache","functions":[]},{"type":1,"name":"lustre","functions":["__pfx___pcc_inode_create","__pfx___pcc_layout_invalidate.part.0.constprop.0","__pfx___sa_make_ready","__pfx_alloc_rw_stats_info","__pfx_blocksize_show","__pfx_can_populate_pages.isra.0","__pfx_cap_drop","__pfx_cfs_cdebug_show.part.0.constprop.0:0x1b60","__pfx_cfs_cdebug_show.part.0.constprop.0:0x2b120","__pfx_cfs_cdebug_show.part.0.constprop.0:0x480c0","__pfx_cfs_cdebug_show.part.0.constprop.0:0x4b040","__pfx_cfs_cdebug_show.part.0.constprop.0:0x54740","__pfx_cfs_cdebug_show.part.0.constprop.0:0x57840","__pfx_cfs_cdebug_show.part.0.constprop.0:0x60ab0","__pfx_cfs_cdebug_show.part.0.constprop.0:0x612b0","__pfx_cfs_cdebug_show.part.0.constprop.0:0x6a0b0","__pfx_cfs_cdebug_show.part.0.constprop.0:0x6cad0","__pfx_cfs_cdebug_show.part.0.constprop.0:0x73ad0","__pfx_cfs_cdebug_show.part.0.constprop.0:0x7f620","__pfx_cfs_cdebug_show.part.0.constprop.0:0x82e50","__pfx_cfs_cdebug_show.part.0.constprop.0:0xea90","__pfx_cfs_cpt_bind_workqueue.constprop.0","__pfx_cfs_match_wildcard","__pfx_cfs_race.constprop.0","__pfx_checksums_show","__pfx_checksums_store","__pfx_cl_falloc","__pfx_cl_fid_build_gen","__pfx_cl_fid_build_ino","__pfx_cl_file_inode_init","__pfx_cl_get_grouplock","__pfx_cl_glimpse_lock","__pfx_cl_glimpse_size0","__pfx_cl_init_ea_size.isra.0","__pfx_cl_inode2vvp","__pfx_cl_inode_fini","__pfx_cl_io_get","__pfx_cl_ocd_update","__pfx_cl_put_grouplock","__pfx_cl_sb_fini","__pfx_cl_sb_init","__pfx_cl_setattr_ost","__pfx_cl_sync_file_range","__pfx_cleanup_module","__pfx_client_common_fill_super","__pfx_client_type_show","__pfx_copy_and_ct_start.constprop.0","__pfx_default_easize_show","__pfx_default_easize_store","__pfx_dirty_cnt","__pfx_do_release_page.constprop.0","__pfx_fast_read_show","__pfx_fast_read_store","__pfx_file_heat_show","__pfx_file_heat_store","__pfx_file_read_confine_iter","__pfx_filesfree_show","__pfx_filestotal_show","__pfx_foreign_symlink_alloc_and_copy_prefix","__pfx_foreign_symlink_enable_show","__pfx_foreign_symlink_enable_store","__pfx_foreign_symlink_prefix_show","__pfx_foreign_symlink_prefix_store","__pfx_foreign_symlink_upcall_info_store","__pfx_foreign_symlink_upcall_show","__pfx_foreign_symlink_upcall_store","__pfx_free_dentry_data","__pfx_fstype_show","__pfx_get_hsm_state.constprop.0","__pfx_get_uuid2int","__pfx_get_xattr_type","__pfx_has_same_mount_namespace","__pfx_heat_decay_percentage_show","__pfx_heat_decay_percentage_store","__pfx_heat_period_second_show","__pfx_heat_period_second_store","__pfx_init_module","__pfx_inode_cache_show","__pfx_inode_cache_store","__pfx_is_first_dirent","__pfx_kbytesavail_show","__pfx_kbytesfree_show","__pfx_kbytestotal_show","__pfx_kickoff_async_readahead","__pfx_lazystatfs_show","__pfx_lazystatfs_store","__pfx_ll_agl_add","__pfx_ll_agl_thread","__pfx_ll_agl_trigger","__pfx_ll_alloc_inode","__pfx_ll_atomic_open","__pfx_ll_authorize_statahead","__pfx_ll_check_swap_layouts_validity","__pfx_ll_cl_add","__pfx_ll_cl_find","__pfx_ll_cl_remove","__pfx_ll_clear_inode","__pfx_ll_close_inode_openhandle","__pfx_ll_compute_rootsquash_state","__pfx_ll_copy_user_md","__pfx_ll_create_it","__pfx_ll_create_nd","__pfx_ll_create_node","__pfx_ll_d_init","__pfx_ll_data_version","__pfx_ll_dcompare","__pfx_ll_ddelete","__pfx_ll_deauthorize_statahead","__pfx_ll_debugfs_register_super","__pfx_ll_debugfs_unregister_super","__pfx_ll_delete_inode","__pfx_ll_dentry_init_security","__pfx_ll_destroy_inode","__pfx_ll_dir_clear_lsm_md","__pfx_ll_dir_flush","__pfx_ll_dir_get_default_layout","__pfx_ll_dir_get_parent_fid","__pfx_ll_dir_getstripe","__pfx_ll_dir_getstripe_default","__pfx_ll_dir_ioctl","__pfx_ll_dir_open","__pfx_ll_dir_read","__pfx_ll_dir_release","__pfx_ll_dir_seek","__pfx_ll_dir_setdirstripe","__pfx_ll_dir_setstripe","__pfx_ll_direct_IO","__pfx_ll_direct_IO_impl","__pfx_ll_direct_rw_pages","__pfx_ll_dirty_page_discard_warn","__pfx_ll_display_extents_info","__pfx_ll_do_fiemap","__pfx_ll_do_tiny_write","__pfx_ll_dom_finish_open","__pfx_ll_dom_lock_cancel","__pfx_ll_dom_read_folio","__pfx_ll_dom_readpage","__pfx_ll_dput_later","__pfx_ll_drop_inode","__pfx_ll_dummy_context","__pfx_ll_empty_dir","__pfx_ll_encode_fh","__pfx_ll_fallocate","__pfx_ll_fault","__pfx_ll_fault0","__pfx_ll_fault_io_init","__pfx_ll_fh_to_dentry","__pfx_ll_fh_to_parent","__pfx_ll_fid2path","__pfx_ll_fiemap","__pfx_ll_file_data_put.part.0","__pfx_ll_file_flock","__pfx_ll_file_futimes_3","__pfx_ll_file_getstripe","__pfx_ll_file_io_generic","__pfx_ll_file_ioctl","__pfx_ll_file_lock_ahead","__pfx_ll_file_mmap","__pfx_ll_file_noflock","__pfx_ll_file_open","__pfx_ll_file_open_encrypt","__pfx_ll_file_read_iter","__pfx_ll_file_release","__pfx_ll_file_seek","__pfx_ll_file_set_lease","__pfx_ll_file_unlock_lease","__pfx_ll_file_write_iter","__pfx_ll_filemap_fault","__pfx_ll_filemap_get_one_page_contig","__pfx_ll_filename_enc_seq_show","__pfx_ll_filename_enc_seq_write","__pfx_ll_filename_enc_single_open","__pfx_ll_fill_super","__pfx_ll_find_alias","__pfx_ll_finish_md_op_data","__pfx_ll_flush","__pfx_ll_flush_ctx","__pfx_ll_fname_disk_to_usr","__pfx_ll_foreign_dir_lookup","__pfx_ll_foreign_get_link","__pfx_ll_foreign_is_openable","__pfx_ll_foreign_is_removable","__pfx_ll_foreign_put_link","__pfx_ll_foreign_readlink_internal","__pfx_ll_foreign_symlink_default_parse","__pfx_ll_foreign_symlink_getattr","__pfx_ll_foreign_symlink_upcall_parse","__pfx_ll_free_rw_stats_info","__pfx_ll_free_sbi.isra.0","__pfx_ll_fsync","__pfx_ll_get_acl","__pfx_ll_get_acl_common","__pfx_ll_get_context","__pfx_ll_get_default_mdsize","__pfx_ll_get_dir_page","__pfx_ll_get_fid_by_name","__pfx_ll_get_grouplock","__pfx_ll_get_inode_acl","__pfx_ll_get_link","__pfx_ll_get_max_mdsize","__pfx_ll_get_mdt_idx","__pfx_ll_get_mdt_idx_by_fid","__pfx_ll_get_name","__pfx_ll_get_obd_name","__pfx_ll_get_parent","__pfx_ll_getattr","__pfx_ll_getattr_dentry","__pfx_ll_getattr_link","__pfx_ll_getname","__pfx_ll_getparent","__pfx_ll_getxattr_lov","__pfx_ll_have_md_lock","__pfx_ll_heat_add","__pfx_ll_hsm_import","__pfx_ll_hsm_release","__pfx_ll_hsm_state_set","__pfx_ll_i2gids","__pfx_ll_i2suppgid","__pfx_ll_iget","__pfx_ll_iget_anon_dir","__pfx_ll_iget_for_nfs.constprop.0","__pfx_ll_init_lsm_md","__pfx_ll_init_sbi","__pfx_ll_initxattrs","__pfx_ll_inode2fid.part.0:0x1ad0","__pfx_ll_inode2fid.part.0:0x2abb0","__pfx_ll_inode2fid.part.0:0x4b000","__pfx_ll_inode2fid.part.0:0x54700","__pfx_ll_inode2fid.part.0:0x61270","__pfx_ll_inode2fid.part.0:0x7f5e0","__pfx_ll_inode2fid.part.0:0xe9d0","__pfx_ll_inode_destroy_callback","__pfx_ll_inode_from_resource_lock","__pfx_ll_inode_init_security","__pfx_ll_inode_notifysecctx","__pfx_ll_inode_permission","__pfx_ll_inode_revalidate","__pfx_ll_inode_size_lock","__pfx_ll_inode_size_unlock","__pfx_ll_intent_drop_lock","__pfx_ll_intent_drop_lock.part.0","__pfx_ll_intent_file_open","__pfx_ll_intent_release","__pfx_ll_invalidate_folio","__pfx_ll_io_init","__pfx_ll_io_read_page","__pfx_ll_io_set_mirror","__pfx_ll_io_zero_page","__pfx_ll_ioc_copy_end","__pfx_ll_ioc_copy_start","__pfx_ll_ioc_data_version","__pfx_ll_iocontrol","__pfx_ll_ioctl_check_project","__pfx_ll_ioctl_fsgetxattr","__pfx_ll_ioctl_fssetxattr","__pfx_ll_ioctl_project","__pfx_ll_iterate","__pfx_ll_kill_super","__pfx_ll_ladvise.constprop.0","__pfx_ll_ladvise_sanity.isra.0","__pfx_ll_layout_conf","__pfx_ll_layout_fetch","__pfx_ll_layout_intent","__pfx_ll_layout_lock_set","__pfx_ll_layout_refresh","__pfx_ll_layout_restore","__pfx_ll_layout_write_intent","__pfx_ll_lease_close_intent","__pfx_ll_lease_file_resync","__pfx_ll_lease_och_acquire","__pfx_ll_lease_open","__pfx_ll_link","__pfx_ll_linkea_decode","__pfx_ll_listxattr","__pfx_ll_lli_init","__pfx_ll_local_open","__pfx_ll_lock_cancel_bits","__pfx_ll_lookup_finish_locks","__pfx_ll_lookup_it","__pfx_ll_lookup_it_finish.constprop.0","__pfx_ll_lookup_nd","__pfx_ll_lov_getstripe_ea_info","__pfx_ll_lov_setea","__pfx_ll_lov_setstripe","__pfx_ll_lov_setstripe_ea_info","__pfx_ll_lseek","__pfx_ll_manage_foreign","__pfx_ll_manage_foreign_dir","__pfx_ll_manage_foreign_file","__pfx_ll_max_cached_mb_seq_show","__pfx_ll_max_cached_mb_seq_write","__pfx_ll_max_cached_mb_single_open","__pfx_ll_md_blocking_ast","__pfx_ll_md_blocking_lease_ast","__pfx_ll_md_close","__pfx_ll_md_need_convert","__pfx_ll_md_real_close","__pfx_ll_md_setattr","__pfx_ll_merge_attr","__pfx_ll_merge_md_attr","__pfx_ll_migrate","__pfx_ll_migrate_folio","__pfx_ll_mkdir","__pfx_ll_mknod","__pfx_ll_new_node","__pfx_ll_nfs_get_name_filldir","__pfx_ll_nosquash_nids_seq_show","__pfx_ll_nosquash_nids_seq_write","__pfx_ll_nosquash_nids_single_open","__pfx_ll_obd_statfs","__pfx_ll_och_fill","__pfx_ll_old_b64_enc_seq_show","__pfx_ll_old_b64_enc_seq_write","__pfx_ll_old_b64_enc_single_open","__pfx_ll_open_cleanup","__pfx_ll_options.isra.0","__pfx_ll_page_mkwrite","__pfx_ll_page_mkwrite0.constprop.0","__pfx_ll_pcc_seq_show","__pfx_ll_pcc_seq_write","__pfx_ll_pcc_single_open","__pfx_ll_prep_inode","__pfx_ll_prep_md_op_data","__pfx_ll_prepare_close","__pfx_ll_prepare_partial_page","__pfx_ll_prune_aliases","__pfx_ll_prune_negative_children","__pfx_ll_put_grouplock.isra.0","__pfx_ll_put_link","__pfx_ll_put_super","__pfx_ll_ra_count_get.constprop.0","__pfx_ll_ra_count_put","__pfx_ll_ra_stats_inc","__pfx_ll_ras_enter","__pfx_ll_read_ahead_page","__pfx_ll_read_ahead_pages","__pfx_ll_read_cache_page.constprop.0","__pfx_ll_read_folio","__pfx_ll_read_inode2","__pfx_ll_readahead.constprop.0","__pfx_ll_readahead_file_kms","__pfx_ll_readahead_handle_work","__pfx_ll_readahead_init","__pfx_ll_readlink_internal.constprop.0","__pfx_ll_readpage","__pfx_ll_readpages","__pfx_ll_release","__pfx_ll_release_folio","__pfx_ll_release_openhandle","__pfx_ll_release_page","__pfx_ll_remount_fs","__pfx_ll_rename","__pfx_ll_revalidate_d_crypto","__pfx_ll_revalidate_dentry","__pfx_ll_revalidate_it_finish","__pfx_ll_revalidate_statahead","__pfx_ll_rmdir","__pfx_ll_rmdir_entry","__pfx_ll_rmfid","__pfx_ll_root_squash_seq_show","__pfx_ll_root_squash_seq_write","__pfx_ll_root_squash_single_open","__pfx_ll_rw_extents_stats_pp_seq_show","__pfx_ll_rw_extents_stats_pp_seq_write","__pfx_ll_rw_extents_stats_pp_single_open","__pfx_ll_rw_extents_stats_seq_show","__pfx_ll_rw_extents_stats_seq_write","__pfx_ll_rw_extents_stats_single_open","__pfx_ll_rw_offset_stats_seq_show","__pfx_ll_rw_offset_stats_seq_write","__pfx_ll_rw_offset_stats_single_open","__pfx_ll_rw_stats_tally","__pfx_ll_sai_alloc","__pfx_ll_sai_free","__pfx_ll_sai_put","__pfx_ll_sb_has_test_dummy_encryption","__pfx_ll_sbi_flags_seq_show","__pfx_ll_sbi_flags_single_open","__pfx_ll_sbi_has_encrypt","__pfx_ll_sbi_has_name_encrypt","__pfx_ll_sbi_set_encrypt","__pfx_ll_sbi_set_name_encrypt","__pfx_ll_secctx_name_free","__pfx_ll_secctx_name_get","__pfx_ll_secctx_name_store","__pfx_ll_security_secctx_name_filter","__pfx_ll_select_file_operations","__pfx_ll_set_acl","__pfx_ll_set_context","__pfx_ll_set_default_mdsize","__pfx_ll_set_encflags","__pfx_ll_set_inode","__pfx_ll_set_lock_data.constprop.0:0x5b620","__pfx_ll_set_lock_data.constprop.0:0x62560","__pfx_ll_set_lock_data:0x11720","__pfx_ll_set_lock_data:0x4b5a0","__pfx_ll_set_lock_data:0x960","__pfx_ll_set_project","__pfx_ll_setattr","__pfx_ll_setattr_raw","__pfx_ll_setstripe_ea","__pfx_ll_setup_filename","__pfx_ll_show_options","__pfx_ll_site_stats_seq_show","__pfx_ll_site_stats_single_open","__pfx_ll_splice_alias","__pfx_ll_start_agl","__pfx_ll_start_statahead","__pfx_ll_statahead_interpret","__pfx_ll_statahead_stats_seq_show","__pfx_ll_statahead_stats_single_open","__pfx_ll_statahead_thread","__pfx_ll_statfs","__pfx_ll_statfs_internal","__pfx_ll_statfs_project.constprop.0","__pfx_ll_stats_ops_tally","__pfx_ll_stats_pid_write","__pfx_ll_stop_agl","__pfx_ll_swap_layouts","__pfx_ll_swap_layouts_close","__pfx_ll_symlink","__pfx_ll_take_md_lock","__pfx_ll_test_inode","__pfx_ll_test_inode_by_fid","__pfx_ll_thread_key_fini","__pfx_ll_thread_key_init","__pfx_ll_track_file_opens","__pfx_ll_truncate_inode_pages_final","__pfx_ll_umount_begin","__pfx_ll_unlink","__pfx_ll_unlock_md_op_lsm","__pfx_ll_unstable_stats_seq_show","__pfx_ll_unstable_stats_seq_write","__pfx_ll_unstable_stats_single_open","__pfx_ll_update_default_lsm_md","__pfx_ll_update_dir_depth","__pfx_ll_update_inode","__pfx_ll_update_inode_flags","__pfx_ll_update_lsm_md","__pfx_ll_update_times","__pfx_ll_vm_close","__pfx_ll_vm_open","__pfx_ll_write_begin","__pfx_ll_write_end","__pfx_ll_writepage","__pfx_ll_writepages","__pfx_ll_xattr_cache_add","__pfx_ll_xattr_cache_del.constprop.0","__pfx_ll_xattr_cache_destroy","__pfx_ll_xattr_cache_destroy_locked","__pfx_ll_xattr_cache_empty","__pfx_ll_xattr_cache_find","__pfx_ll_xattr_cache_get","__pfx_ll_xattr_cache_init","__pfx_ll_xattr_cache_insert","__pfx_ll_xattr_cache_list","__pfx_ll_xattr_cache_refill","__pfx_ll_xattr_find_get_lock","__pfx_ll_xattr_fini","__pfx_ll_xattr_get","__pfx_ll_xattr_get_common","__pfx_ll_xattr_init","__pfx_ll_xattr_list","__pfx_ll_xattr_set","__pfx_ll_xattr_set_common","__pfx_llcrypt_free_ctx","__pfx_llcrypt_require_key","__pfx_llite_kobj_release","__pfx_llite_tunables_register","__pfx_llite_tunables_unregister","__pfx_lsm_md_dump","__pfx_lustre_fill_super","__pfx_lustre_kill_super","__pfx_lustre_mount","__pfx_max_easize_show","__pfx_max_read_ahead_async_active_show","__pfx_max_read_ahead_async_active_store","__pfx_max_read_ahead_mb_show","__pfx_max_read_ahead_mb_store","__pfx_max_read_ahead_per_file_mb_show","__pfx_max_read_ahead_per_file_mb_store","__pfx_max_read_ahead_whole_mb_show","__pfx_max_read_ahead_whole_mb_store","__pfx_mkwrite_commit_callback","__pfx_obd_connect.constprop.0","__pfx_obd_disconnect.isra.0","__pfx_obd_get_info.constprop.0:0x2650","__pfx_obd_get_info.constprop.0:0x2c120","__pfx_obd_get_info.constprop.0:0x69180","__pfx_obd_iocontrol.constprop.0:0x2bdb0","__pfx_obd_iocontrol.constprop.0:0x57870","__pfx_obd_iocontrol.constprop.0:0x74a70","__pfx_obd_iocontrol:0x10460","__pfx_obd_iocontrol:0x22e0","__pfx_obd_quotactl","__pfx_obd_set_info_async.constprop.0:0x2c490","__pfx_obd_set_info_async.constprop.0:0x492e0","__pfx_obd_statfs.constprop.0","__pfx_opencache_max_ms_show","__pfx_opencache_max_ms_store","__pfx_opencache_threshold_count_show","__pfx_opencache_threshold_count_store","__pfx_opencache_threshold_ms_show","__pfx_opencache_threshold_ms_store","__pfx_our_vma","__pfx_page_list_sanity_check.constprop.0","__pfx_parallel_dio_show","__pfx_parallel_dio_store","__pfx_pathname_is_valid","__pfx_pcc_cmd_fini.part.0","__pfx_pcc_cmd_handle","__pfx_pcc_cmd_parse.constprop.0","__pfx_pcc_conds_parse","__pfx_pcc_conjunction_free","__pfx_pcc_copy_data","__pfx_pcc_create_attach_cleanup","__pfx_pcc_dataset_add","__pfx_pcc_dataset_get","__pfx_pcc_dataset_match_get","__pfx_pcc_dataset_put","__pfx_pcc_dataset_rule_fini","__pfx_pcc_dataset_rule_init","__pfx_pcc_expression_free","__pfx_pcc_expression_parse","__pfx_pcc_fault","__pfx_pcc_fid2dataset_path.constprop.0.isra.0","__pfx_pcc_file_init","__pfx_pcc_file_mmap","__pfx_pcc_file_open","__pfx_pcc_file_read_iter","__pfx_pcc_file_release","__pfx_pcc_file_splice_read","__pfx_pcc_file_write_iter","__pfx_pcc_fname_list_add","__pfx_pcc_fname_list_free","__pfx_pcc_fsync","__pfx_pcc_get_layout_info","__pfx_pcc_hsm_remove","__pfx_pcc_id_list_free","__pfx_pcc_id_list_parse","__pfx_pcc_id_parse","__pfx_pcc_inode_attach_set.constprop.0","__pfx_pcc_inode_create","__pfx_pcc_inode_create_fini","__pfx_pcc_inode_free","__pfx_pcc_inode_getattr","__pfx_pcc_inode_put","__pfx_pcc_inode_remove.isra.0","__pfx_pcc_inode_reset_iattr","__pfx_pcc_inode_setattr","__pfx_pcc_io_fini","__pfx_pcc_io_init","__pfx_pcc_ioctl_detach","__pfx_pcc_ioctl_state","__pfx_pcc_layout_invalidate","__pfx_pcc_layout_xattr_set.isra.0","__pfx_pcc_lookup","__pfx_pcc_mkdir_p.constprop.0","__pfx_pcc_page_mkwrite","__pfx_pcc_parse_value_pair","__pfx_pcc_parse_value_pairs","__pfx_pcc_readwrite_attach","__pfx_pcc_readwrite_attach_fini","__pfx_pcc_remove_datasets","__pfx_pcc_rule_conds_free","__pfx_pcc_super_dump","__pfx_pcc_super_fini","__pfx_pcc_super_init","__pfx_pcc_try_auto_attach","__pfx_pcc_try_dataset_attach.constprop.0","__pfx_pcc_vm_close","__pfx_pcc_vm_open","__pfx_policy_from_vma","__pfx_posix_acl_release.part.0","__pfx_quotactl_ioctl","__pfx_ras_detect_read_pattern","__pfx_ras_reset","__pfx_ras_stride_increase_window","__pfx_ras_stride_reset","__pfx_ras_update","__pfx_read_ahead_async_file_threshold_mb_show","__pfx_read_ahead_async_file_threshold_mb_store","__pfx_read_ahead_range_kb_show","__pfx_read_ahead_range_kb_store","__pfx_read_in_stride_window","__pfx_revalidate_statahead_dentry","__pfx_ria_page_count","__pfx_sa_alloc","__pfx_sa_fini_data","__pfx_sa_free","__pfx_sa_handle_callback","__pfx_sa_instantiate","__pfx_sa_lookup","__pfx_sa_make_ready","__pfx_sa_prep_data","__pfx_sa_revalidate","__pfx_sa_statahead","__pfx_sbi_kobj_release","__pfx_search_inode_for_lustre","__pfx_start_statahead_thread","__pfx_stat_blocksize_show","__pfx_stat_blocksize_store","__pfx_statahead_agl_show","__pfx_statahead_agl_store","__pfx_statahead_max_show","__pfx_statahead_max_store","__pfx_statahead_running_max_show","__pfx_statahead_running_max_store","__pfx_statfs_max_age_show","__pfx_statfs_max_age_store","__pfx_stats_track_gid_show","__pfx_stats_track_gid_store","__pfx_stats_track_pid_show","__pfx_stats_track_pid_store","__pfx_stats_track_ppid_show","__pfx_stats_track_ppid_store","__pfx_stride_byte_count","__pfx_tiny_write_show","__pfx_tiny_write_store","__pfx_trunc_sem_down_read","__pfx_trunc_sem_down_write","__pfx_uuid_show","__pfx_volatile_ref_file","__pfx_vvp_attr_get","__pfx_vvp_attr_update","__pfx_vvp_conf_set","__pfx_vvp_device_alloc","__pfx_vvp_device_fini","__pfx_vvp_device_free","__pfx_vvp_device_init","__pfx_vvp_dump_pgcache_seq_open","__pfx_vvp_dump_pgcache_seq_release","__pfx_vvp_global_fini","__pfx_vvp_global_init","__pfx_vvp_io_advance","__pfx_vvp_io_commit_sync","__pfx_vvp_io_fault_end","__pfx_vvp_io_fault_fini","__pfx_vvp_io_fault_iter_init","__pfx_vvp_io_fault_lock","__pfx_vvp_io_fault_start","__pfx_vvp_io_fini","__pfx_vvp_io_fsync_start","__pfx_vvp_io_init","__pfx_vvp_io_kernel_fault","__pfx_vvp_io_lseek_end","__pfx_vvp_io_lseek_lock","__pfx_vvp_io_lseek_start","__pfx_vvp_io_one_lock_index","__pfx_vvp_io_read_ahead","__pfx_vvp_io_read_iter_init","__pfx_vvp_io_read_lock","__pfx_vvp_io_read_start","__pfx_vvp_io_rw_end","__pfx_vvp_io_rw_lock","__pfx_vvp_io_setattr_end","__pfx_vvp_io_setattr_fini","__pfx_vvp_io_setattr_iter_init","__pfx_vvp_io_setattr_lock","__pfx_vvp_io_setattr_start","__pfx_vvp_io_write_commit","__pfx_vvp_io_write_iter_fini","__pfx_vvp_io_write_iter_init","__pfx_vvp_io_write_lock","__pfx_vvp_io_write_start","__pfx_vvp_key_init_generic.constprop.0","__pfx_vvp_mmap_locks","__pfx_vvp_object_alloc","__pfx_vvp_object_free","__pfx_vvp_object_free_rcu","__pfx_vvp_object_glimpse","__pfx_vvp_object_init","__pfx_vvp_object_invariant","__pfx_vvp_object_print","__pfx_vvp_page_completion_read","__pfx_vvp_page_completion_write","__pfx_vvp_page_delete","__pfx_vvp_page_discard","__pfx_vvp_page_init","__pfx_vvp_pgcache_current","__pfx_vvp_pgcache_next","__pfx_vvp_pgcache_page_show.constprop.0","__pfx_vvp_pgcache_show","__pfx_vvp_pgcache_start","__pfx_vvp_pgcache_stop","__pfx_vvp_prep_size","__pfx_vvp_prune","__pfx_vvp_req_attr_set","__pfx_vvp_session_key_fini","__pfx_vvp_session_key_init","__pfx_vvp_set_batch_dirty","__pfx_vvp_thread_key_fini","__pfx_vvp_thread_key_init","__pfx_vvp_type_fini","__pfx_vvp_type_init","__pfx_vvp_type_start","__pfx_vvp_type_stop","__pfx_vvp_vmpage_error","__pfx_write_commit_callback","__pfx_xattr_cache_show","__pfx_xattr_cache_store","__pfx_xattr_type_filter","__pfx_zero_user_segments.constprop.0","cap_drop","cfs_cdebug_show.part.0.constprop.0:0x1b70","cfs_cdebug_show.part.0.constprop.0:0x2b130","cfs_cdebug_show.part.0.constprop.0:0x480d0","cfs_cdebug_show.part.0.constprop.0:0x4b050","cfs_cdebug_show.part.0.constprop.0:0x54750","cfs_cdebug_show.part.0.constprop.0:0x57850","cfs_cdebug_show.part.0.constprop.0:0x60ac0","cfs_cdebug_show.part.0.constprop.0:0x612c0","cfs_cdebug_show.part.0.constprop.0:0x6a0c0","cfs_cdebug_show.part.0.constprop.0:0x6cae0","cfs_cdebug_show.part.0.constprop.0:0x73ae0","cfs_cdebug_show.part.0.constprop.0:0x7f630","cfs_cdebug_show.part.0.constprop.0:0x82e60","cfs_cdebug_show.part.0.constprop.0:0xeaa0","cfs_cpt_bind_workqueue.constprop.0","cfs_race.constprop.0","cleanup_module","init_module","ll_dom_read_folio","ll_dom_readpage","ll_inode2fid.part.0:0x1ae0","ll_inode2fid.part.0:0x2abc0","ll_inode2fid.part.0:0x4b010","ll_inode2fid.part.0:0x54710","ll_inode2fid.part.0:0x61280","ll_inode2fid.part.0:0x7f5f0","ll_inode2fid.part.0:0xe9e0","ll_read_cache_page.constprop.0","ll_readlink_internal.constprop.0.cold","ll_sai_free","ll_set_lock_data.constprop.0:0x5b630","ll_set_lock_data.constprop.0:0x62570","ll_set_lock_data:0x11730","ll_set_lock_data:0x4b5b0","ll_set_lock_data:0x970","llcrypt_require_key","lsm_md_dump","lustre_exit","lustre_init","obd_connect.constprop.0","obd_disconnect.isra.0","obd_get_info.constprop.0:0x2660","obd_get_info.constprop.0:0x2c130","obd_get_info.constprop.0:0x69190","obd_iocontrol.constprop.0:0x2bdc0","obd_iocontrol.constprop.0:0x57880","obd_iocontrol.constprop.0:0x74a80","obd_iocontrol:0x10470","obd_iocontrol:0x22f0","obd_quotactl","obd_set_info_async.constprop.0:0x2c4a0","obd_set_info_async.constprop.0:0x492f0","obd_statfs.constprop.0","posix_acl_release.part.0","trunc_sem_down_read","trunc_sem_down_write","zero_user_segments.constprop.0"]},{"type":2,"name":"mpiio","functions":[],"binary_path":"/opt/toss/openmpi/4.1/gnu/lib/libmpi.so","include_offsets":false},{"type":2,"name":"ior","functions":[],"binary_path":"/home/haridev/software/ior/install/bin/ior","include_offsets":false}] +[{"type":4,"name":"custom1","functions":[],"bpf_path":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/home/haridev/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2},{"type":0,"name":"sys","functions":[]},{"type":1,"name":"os_page_cache","functions":["page_cache_sync_readahead"]},{"type":1,"name":"lustre","functions":["cap_drop","cleanup_module","init_module","ll_dom_read_folio","ll_dom_readpage","ll_sai_free","llcrypt_require_key","lsm_md_dump","lustre_exit","lustre_init","obd_quotactl","posix_acl_release.part.0","trunc_sem_down_read","trunc_sem_down_write"]},{"type":1,"name":"mdc","functions":["cfs_delete_from_page_cache","cleanup_module","init_module","mdc_attr_pack","mdc_clear_replay_flag.part.0","mdc_exit","mdc_init","mdc_read_folio_remote","obd_notify","obd_quotactl"]},{"type":1,"name":"mgc","functions":["cleanup_module","init_module","mgc_exit","mgc_init"]},{"type":1,"name":"osc","functions":["_compound_head","cleanup_module","ext_flags","init_module","libcfs_nidstr","obd_notify","osc_exit","osc_init","osc_release_bounce_pages","ostid_id","ostid_seq"]},{"type":1,"name":"ptlrpc","functions":["cfs_race","cleanup_module","cpumask_weight","dt_delete","dt_insert","enc_pools_alloc","enc_pools_free","exp_connect_healthy","exp_finished","exp_finished_or_from_mdt","exp_lock_replay_healthy","exp_req_replay_healthy_or_from_mdt","exp_vbr_healthy","init_module","lcd_cpu_to_le","lcd_le_to_cpu","ldlm_callback_errmsg","ldlm_flock_destroy","ldlm_plain_compat_queue","libcfs_nid2str","lsd_cpu_to_le","lsd_le_to_cpu","obd_cksum_type_unpack","obd_commitrw","obd_connect","obd_disconnect","obd_preprw","obd_reconnect","ost_fid_from_resid","ostid_id","ostid_seq","page_from_bulkdesc","page_from_pagearray","ptlrpc_exit","ptlrpc_init","ptlrpc_release_bulk_noop","ptlrpc_req_drop_rs.part.0","ptlrpc_set_producer","tgt_fmd_put_nolock"]},{"type":2,"name":"mpi","functions":[],"binary_path":"/opt/toss/openmpi/4.1/gnu/lib/libmpi.so","include_offsets":false},{"type":2,"name":"ior","functions":[],"binary_path":"/home/haridev/software/ior/install/bin/ior","include_offsets":false},{"type":1,"name":"iomap","functions":["iomap_init","iomap_iter_advance","iomap_iter_done"]},{"type":1,"name":"xfs","functions":["xfs_ag_resv_rmapbt_alloc","xfs_attri_log_nameval_alloc","xfs_attri_recover_work","xfs_buf_lookup.constprop.0","xfs_bui_copy_format","xfs_cui_copy_format","xfs_defer_pending_cancel_work","xfs_fs_eofblocks_from_user","xfs_has_finobt","xfs_has_reflink","xfs_has_rmapbt","xfs_icount_range","xfs_iext_count","xfs_inobt_maxlevels_ondisk","xfs_internal_inum","xfs_rui_copy_format","xfs_sysfs_del.constprop.0","xfs_sysfs_release","xfs_verify_fsbno","xfs_verify_ino","xfs_verify_rtbno"]}] diff --git a/etc/datacrumbs/systemd/datacrumbs@.service.in b/etc/datacrumbs/systemd/datacrumbs@.service.in index 658ae80e..36d5ea40 100644 --- a/etc/datacrumbs/systemd/datacrumbs@.service.in +++ b/etc/datacrumbs/systemd/datacrumbs@.service.in @@ -4,15 +4,17 @@ After=network.target [Service] Type=forking -ExecStart=@DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_server_run.sh --verbose --composite-name %i -ExecStop=@DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_server_stop.sh --verbose --composite-name %i +ExecStart=@DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_server_run.sh --verbose +ExecStop=@DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_server_stop.sh --verbose User=root # Optional: RemainAfterExit=no -PIDFile=/run/datacrumbs.pid +# Copy PIDFile path to project yaml +PIDFile=@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@/datacrumbs-systemd-%i.pid TimeoutStartSec=10min TimeoutStopSec=5min -EnvironmentFile=/run/datacrumbs.env +# Copy ENVFile path to project yaml +EnvironmentFile=@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@/datacrumbs-%i.env [Install] WantedBy=multi-user.target \ No newline at end of file diff --git a/infrastructure/docker/Dockerfile b/infrastructure/docker/Dockerfile index 1deb1045..e0149e73 100644 --- a/infrastructure/docker/Dockerfile +++ b/infrastructure/docker/Dockerfile @@ -13,6 +13,7 @@ RUN . /opt/rh/gcc-toolset-11/enable && \ -DDATACRUMBS_KERNEL_HEADERS_PATH=/usr/src/kernels/4.18.0-348.7.1.el8_5.x86_64 \ -DCMAKE_PREFIX_PATH=/usr/lib64/openmpi \ -DCMAKE_INSTALL_PREFIX=/opt/datacrumbs-install \ + -DDATACRUMBS_CONFIGURED_RUN_DIR=/tmp \ /opt/datacrumbs/ && \ make -j $(nproc) && \ make install diff --git a/infrastructure/docker/build-multiarch.sh b/infrastructure/docker/build-multiarch.sh index 97b418dc..7e7cd574 100755 --- a/infrastructure/docker/build-multiarch.sh +++ b/infrastructure/docker/build-multiarch.sh @@ -16,73 +16,81 @@ PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}" # Parse command line arguments PUSH=false LOAD=false +RUN=false print_usage() { - echo "Usage: $0 [OPTIONS]" - echo "" - echo "Options:" - echo " --push Push the built images to the registry" - echo " --load Load the image into local Docker (only works for single platform)" - echo " --platform ARCH Comma-separated list of platforms (default: linux/amd64,linux/arm64)" - echo " --tag TAG Image tag (default: latest)" - echo " --name NAME Image name (default: datacrumbs)" - echo " --registry REG Registry URL (default: docker.io)" - echo " --username USER Registry username (default: hdevarajan92)" - echo " -h, --help Show this help message" - echo "" - echo "Examples:" - echo " $0 --push # Build and push multi-arch images" - echo " $0 --load --platform linux/amd64 # Build and load amd64 only" - echo " $0 --push --tag v1.0.0 --name myimage # Custom tag and name" + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " --push Push the built images to the registry" + echo " --load Load the image into local Docker (only works for single platform)" + echo " --platform ARCH Comma-separated list of platforms (default: linux/amd64,linux/arm64)" + echo " --tag TAG Image tag (default: latest)" + echo " --name NAME Image name (default: datacrumbs)" + echo " --run Run the container after loading (implies --load)" + echo " --registry REG Registry URL (default: docker.io)" + echo " --username USER Registry username (default: hdevarajan92)" + echo " -h, --help Show this help message" + echo "" + echo "Examples:" + echo " $0 --push # Build and push multi-arch images" + echo " $0 --load --platform linux/amd64 # Build and load amd64 only" + echo " $0 --run --platform linux/amd64 # Build, load and run container" + echo " $0 --push --tag v1.0.0 --name myimage # Custom tag and name" } while [[ $# -gt 0 ]]; do - case $1 in - --push) - PUSH=true - shift - ;; - --load) - LOAD=true - shift - ;; - --platform) - PLATFORMS="$2" - shift 2 - ;; - --tag) - IMAGE_TAG="$2" - shift 2 - ;; - --name) - IMAGE_NAME="$2" - shift 2 - ;; - --registry) - REGISTRY="$2" - shift 2 - ;; - --username) - USERNAME="$2" - shift 2 - ;; - -h|--help) - print_usage - exit 0 - ;; - *) - echo "Unknown option: $1" - print_usage - exit 1 - ;; - esac + case $1 in + --push) + PUSH=true + shift + ;; + --load) + LOAD=true + shift + ;; + --run) + RUN=true + LOAD=true + shift + ;; + --platform) + PLATFORMS="$2" + shift 2 + ;; + --tag) + IMAGE_TAG="$2" + shift 2 + ;; + --name) + IMAGE_NAME="$2" + shift 2 + ;; + --registry) + REGISTRY="$2" + shift 2 + ;; + --username) + USERNAME="$2" + shift 2 + ;; + -h | --help) + print_usage + exit 0 + ;; + *) + echo "Unknown option: $1" + print_usage + exit 1 + ;; + esac done # Construct full image name if [ "$REGISTRY" = "docker.io" ]; then - FULL_IMAGE_NAME="${USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}" + FULL_IMAGE_NAME="${USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}" else - FULL_IMAGE_NAME="${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}" + FULL_IMAGE_NAME="${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}" fi echo "======================================" @@ -97,19 +105,19 @@ echo "======================================" echo "" # Check if Docker Buildx is available -if ! docker buildx version &> /dev/null; then - echo "Error: Docker Buildx is not available. Please install Docker Buildx." - exit 1 +if ! docker buildx version &>/dev/null; then + echo "Error: Docker Buildx is not available. Please install Docker Buildx." + exit 1 fi # Create a new builder instance if it doesn't exist BUILDER_NAME="datacrumbs-multiarch-builder" -if ! docker buildx inspect "$BUILDER_NAME" &> /dev/null; then - echo "Creating new buildx builder: $BUILDER_NAME" - docker buildx create --name "$BUILDER_NAME" --use --platform "$PLATFORMS" +if ! docker buildx inspect "$BUILDER_NAME" &>/dev/null; then + echo "Creating new buildx builder: $BUILDER_NAME" + docker buildx create --name "$BUILDER_NAME" --use --platform "$PLATFORMS" else - echo "Using existing buildx builder: $BUILDER_NAME" - docker buildx use "$BUILDER_NAME" + echo "Using existing buildx builder: $BUILDER_NAME" + docker buildx use "$BUILDER_NAME" fi # Bootstrap the builder @@ -123,24 +131,24 @@ BUILD_CMD+=" -t ${FULL_IMAGE_NAME}" BUILD_CMD+=" -f ${DOCKERFILE}" if [ "$PUSH" = true ] && [ "$LOAD" = true ]; then - echo "Error: Cannot use --push and --load together. Use --load for single platform only." - exit 1 + echo "Error: Cannot use --push and --load together. Use --load for single platform only." + exit 1 fi if [ "$PUSH" = true ]; then - BUILD_CMD+=" --push" - echo "Images will be pushed to registry after build." + BUILD_CMD+=" --push" + echo "Images will be pushed to registry after build." elif [ "$LOAD" = true ]; then - BUILD_CMD+=" --load" - echo "Image will be loaded into local Docker." - if [[ "$PLATFORMS" == *","* ]]; then - echo "Warning: --load only works with a single platform. Building first platform only." - PLATFORMS=$(echo "$PLATFORMS" | cut -d',' -f1) - BUILD_CMD="docker buildx build --platform ${PLATFORMS} -t ${FULL_IMAGE_NAME} -f ${DOCKERFILE} --load" - fi + BUILD_CMD+=" --load" + echo "Image will be loaded into local Docker." + if [[ "$PLATFORMS" == *","* ]]; then + echo "Warning: --load only works with a single platform. Building first platform only." + PLATFORMS=$(echo "$PLATFORMS" | cut -d',' -f1) + BUILD_CMD="docker buildx build --platform ${PLATFORMS} -t ${FULL_IMAGE_NAME} -f ${DOCKERFILE} --load" + fi else - echo "Note: Images will be built but not pushed or loaded." - echo "Use --push to push to registry or --load to load locally." + echo "Note: Images will be built but not pushed or loaded." + echo "Use --push to push to registry or --load to load locally." fi BUILD_CMD+=" ." @@ -158,28 +166,56 @@ cd "$REPO_ROOT" eval "$BUILD_CMD" if [ $? -eq 0 ]; then + echo "" + echo "======================================" + echo "Build completed successfully!" + echo "======================================" + echo "Image: ${FULL_IMAGE_NAME}" + echo "Platforms: ${PLATFORMS}" + + if [ "$PUSH" = true ]; then + echo "" + echo "Images have been pushed to the registry." + echo "You can pull them with:" + echo " docker pull ${FULL_IMAGE_NAME}" + elif [ "$LOAD" = true ]; then echo "" - echo "======================================" - echo "Build completed successfully!" - echo "======================================" - echo "Image: ${FULL_IMAGE_NAME}" - echo "Platforms: ${PLATFORMS}" - - if [ "$PUSH" = true ]; then - echo "" - echo "Images have been pushed to the registry." - echo "You can pull them with:" - echo " docker pull ${FULL_IMAGE_NAME}" - elif [ "$LOAD" = true ]; then - echo "" - echo "Image has been loaded into local Docker." - echo "You can run it with:" - echo " docker run -it ${FULL_IMAGE_NAME}" + echo "Image has been loaded into local Docker." + if [ "$RUN" = true ]; then + echo "" + echo "Starting container with workspace mounted at /opt/datacrumbs..." + docker run -ti --privileged --cap-add sys_admin --cap-add sys_ptrace \ + --net=host --pid=host --hostname docker \ + -v /lib/modules/:/lib/modules:ro \ + -v /sys/kernel/debug/:/sys/kernel/debug:rw \ + -v /sys/fs/bpf:/sys/fs/bpf \ + -v "$(pwd):/opt/datacrumbs" -w /opt/datacrumbs \ + ${FULL_IMAGE_NAME} + else + echo "" + echo "To run with current workspace mounted (replaces built version in container):" + echo " docker run -ti --privileged --cap-add sys_admin --cap-add sys_ptrace \\" + echo " --net=host --pid=host --hostname docker \\" + echo " -v /lib/modules/:/lib/modules:ro \\" + echo " -v /sys/kernel/debug/:/sys/kernel/debug:rw \\" + echo " -v /sys/fs/bpf:/sys/fs/bpf \\" + echo " -v \"\$(pwd):/opt/datacrumbs\" -w /opt/datacrumbs \\" + echo " ${FULL_IMAGE_NAME}" + echo "" + echo "To run with workspace mounted at /workspace (keeps built version):" + echo " docker run -ti --privileged --cap-add sys_admin --cap-add sys_ptrace \\" + echo " --net=host --pid=host --hostname docker \\" + echo " -v /lib/modules/:/lib/modules:ro \\" + echo " -v /sys/kernel/debug/:/sys/kernel/debug:rw \\" + echo " -v /sys/fs/bpf:/sys/fs/bpf \\" + echo " -v \"\$(pwd):/workspace\" -w /workspace \\" + echo " ${FULL_IMAGE_NAME}" fi + fi else - echo "" - echo "======================================" - echo "Build failed!" - echo "======================================" - exit 1 + echo "" + echo "======================================" + echo "Build failed!" + echo "======================================" + exit 1 fi diff --git a/notes.MD b/notes.MD index fd811ca5..9909f654 100644 --- a/notes.MD +++ b/notes.MD @@ -21,7 +21,7 @@ for i in {3..6} {9..11}; do done ``` ```bash -for i in 2 {4..6} {9..11}; do +for i in {2..6} {9..11}; do echo "Copying prolog and epilog files into server:lead${i}" sudo ssh lead${i} rm /etc/flux/system/prolog-job-manager.d/datacrumbs* sudo ssh lead${i} rm /etc/flux/system/epilog.d/datacrumbs* @@ -53,7 +53,7 @@ sudo ssh lead${i} << 'EOF' rm /etc/systemd/system/datacrumbs.service EOF done -for i in 2 {4..6} {9..11}; do +for i in 2; do sudo ssh lead${i} << 'EOF' /admin/scripts/flux_reconfig.sh flux config reload @@ -61,10 +61,10 @@ EOF done ``` ```bash -for i in 2 {4..6} {9..11}; do +for i in {2..6} {9..11}; do echo Checking lead${i} sudo ssh lead${i} << 'EOF' -systemctl daemon-reload +chmod 777 /p/ssd EOF done ``` @@ -111,4 +111,19 @@ flux run -N $nodes --tasks-per-node 16 ~/software/ior/install/bin/ior -t 1m -b 1 flux run -N $nodes --tasks-per-node 16 ~/software/ior/install/bin/ior -a MPIIO -t 1m -b 16m -F -o /tmp/file2 flux run -N $nodes --tasks-per-node 16 ~/software/ior/install/bin/ior -c -t 1m -b 16m -F -o /tmp/file2 -z flux run -N $nodes --tasks-per-node 16 ~/software/ior/install/bin/ior -t 1m -b 16m -F -o /tmp/file2 +``` + +```bash +mkfs /dev/sda +DIR=/p/ssd +pdsh -g compute mkdir -p $DIR +pdsh -g compute 'mount /dev/sda $DIR' +pdsh -g compute 'chmod 777 $DIR' +``` + +```bash +for i in {0..16}; do +done +flux run -n 1 ~/software/ior/install/bin/ior -o /p/ssd/test -t 1g -b 64g +flux run -n 16 ~/software/ior/install/bin/ior -o /p/ssd/test -t 32m -b 4g ``` \ No newline at end of file diff --git a/scripts/datacrumbs/datacrumbs_args.in b/scripts/datacrumbs/datacrumbs_args.in index 9cfaed8d..1c7c3115 100755 --- a/scripts/datacrumbs/datacrumbs_args.in +++ b/scripts/datacrumbs/datacrumbs_args.in @@ -6,30 +6,30 @@ set -eo pipefail SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Fallback to script directory if placeholder wasn't substituted if [[ -z "$SCRIPT_DIR" || "$SCRIPT_DIR" == @DATACRUMBS_INSTALL_BINARYDIR@ ]]; then - SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)" + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)" fi # Load logging script if available; warn but do not exit if missing if [[ -f "$SCRIPT_DIR/datacrumbs_logging" ]]; then - source "$SCRIPT_DIR/datacrumbs_logging" + source "$SCRIPT_DIR/datacrumbs_logging" else - echo "Error: datacrumbs_logging not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_logging not found in $SCRIPT_DIR" + exit 1 fi # Ensure GNU getopt is available dc__ensure_gnu_getopt() { - if ! command -v getopt >/dev/null 2>&1; then - error "'getopt' not found. Please install GNU getopt." - return 127 - fi - # GNU getopt returns status 4 with --test/-T - getopt --test >/dev/null 2>&1 - local rc=$? - if [[ $rc -ne 4 ]]; then - error "Enhanced GNU getopt not available. Please install GNU getopt." - return 127 - fi + if ! command -v getopt >/dev/null 2>&1; then + error "'getopt' not found. Please install GNU getopt." + return 127 + fi + # GNU getopt returns status 4 with --test/-T + getopt --test >/dev/null 2>&1 + local rc=$? + if [[ $rc -ne 4 ]]; then + error "Enhanced GNU getopt not available. Please install GNU getopt." + return 127 + fi } # Case helpers @@ -38,147 +38,177 @@ dc__lower() { tr '[:upper:]' '[:lower:]'; } # Make VAR name from prefix + long option (convert - to _ and uppercase) dc__make_var_name() { - local prefix="$1" opt="$2" - local p u - p="$(echo -n "$prefix" | dc__upper)" - u="$(echo -n "$opt" | tr '-' '_' | dc__upper)" - printf "%s_%s" "$p" "$u" + local prefix="$1" opt="$2" + local p u + p="$(echo -n "$prefix" | dc__upper)" + u="$(echo -n "$opt" | tr '-' '_' | dc__upper)" + printf "%s_%s" "$p" "$u" } # Make global (unprefixed) VAR name from long option dc__make_global_var_name() { - local opt="$1" - echo -n "$opt" | tr '-' '_' | dc__upper + local opt="$1" + echo -n "$opt" | tr '-' '_' | dc__upper } # Declare a global variable name and set value dc__setvar() { - local varname="$1" val="${2-}" - declare -g "$varname" - printf -v "$varname" '%s' "$val" + local varname="$1" val="${2-}" + declare -g "$varname" + printf -v "$varname" '%s' "$val" } # Declare a global variable but preserve existing value if already set dc__declvar_preserve() { - local varname="$1" def="${2-}" - declare -g "$varname" - if [[ "${!varname+x}" != x ]]; then - printf -v "$varname" '%s' "$def" - fi + local varname="$1" def="${2-}" + declare -g "$varname" + if [[ "${!varname+x}" != x ]]; then + printf -v "$varname" '%s' "$def" + fi } # Bind per-prefix spec arrays via namerefs # NOTE: declare -n without 'local' so namerefs are visible to caller dc__bind_spec() { - local prefix="$1" - declare -gn N="__dc_${prefix}_names" - declare -gn R="__dc_${prefix}_reqs" - declare -gn T="__dc_${prefix}_types" - declare -gn D="__dc_${prefix}_descs" - declare -gn V="__dc_${prefix}_varnames" - declare -gn DF="__dc_${prefix}_defs" - declare -gn IDX="__dc_${prefix}_index_by_name" - declare -gn PN="__dc_${prefix}_pos_names" - declare -gn PR="__dc_${prefix}_pos_reqs" - declare -gn PD="__dc_${prefix}_pos_descs" - declare -gn PV="__dc_${prefix}_pos_varnames" - declare -gn SUBCMDS="__dc_${prefix}_subcommands" - declare -gn SUBCMD_OPT="__dc_${prefix}_subcommand_option" + local prefix="$1" + declare -gn N="__dc_${prefix}_names" + declare -gn R="__dc_${prefix}_reqs" + declare -gn T="__dc_${prefix}_types" + declare -gn D="__dc_${prefix}_descs" + declare -gn V="__dc_${prefix}_varnames" + declare -gn DF="__dc_${prefix}_defs" + declare -gn IDX="__dc_${prefix}_index_by_name" + declare -gn PN="__dc_${prefix}_pos_names" + declare -gn PR="__dc_${prefix}_pos_reqs" + declare -gn PD="__dc_${prefix}_pos_descs" + declare -gn PV="__dc_${prefix}_pos_varnames" + declare -gn SUBCMDS="__dc_${prefix}_subcommands" + declare -gn SUBCMD_OPT="__dc_${prefix}_subcommand_option" } # Initialize per-prefix argument spec arrays and add common options # Usage: dc_args_init PREFIX dc_args_init() { - local prefix="$1" - [[ -z "$prefix" ]] && { error "dc_args_init: missing prefix"; return 64; } - - # Define the arrays for this prefix - declare -ga "__dc_${prefix}_names=()" - declare -ga "__dc_${prefix}_reqs=()" - declare -ga "__dc_${prefix}_types=()" - declare -ga "__dc_${prefix}_descs=()" - declare -ga "__dc_${prefix}_varnames=()" - declare -ga "__dc_${prefix}_defs=()" - declare -gA "__dc_${prefix}_index_by_name=()" - - # Positional arguments spec (names, req flags, descriptions, varnames) - declare -ga "__dc_${prefix}_pos_names=()" - declare -ga "__dc_${prefix}_pos_reqs=()" - declare -ga "__dc_${prefix}_pos_descs=()" - declare -ga "__dc_${prefix}_pos_varnames=()" - - # Subcommand support: store conditional requirements - # Maps option names to required subcommand values and their required options - declare -gA "__dc_${prefix}_subcommands=()" - declare -g "__dc_${prefix}_subcommand_option=" - - # Add common inherited options (optional bools) for every app - dc__ensure_common_options "$prefix" + local prefix="$1" + [[ -z "$prefix" ]] && { + error "dc_args_init: missing prefix" + return 64 + } + + # Define the arrays for this prefix + declare -ga "__dc_${prefix}_names=()" + declare -ga "__dc_${prefix}_reqs=()" + declare -ga "__dc_${prefix}_types=()" + declare -ga "__dc_${prefix}_descs=()" + declare -ga "__dc_${prefix}_varnames=()" + declare -ga "__dc_${prefix}_defs=()" + declare -gA "__dc_${prefix}_index_by_name=()" + + # Positional arguments spec (names, req flags, descriptions, varnames) + declare -ga "__dc_${prefix}_pos_names=()" + declare -ga "__dc_${prefix}_pos_reqs=()" + declare -ga "__dc_${prefix}_pos_descs=()" + declare -ga "__dc_${prefix}_pos_varnames=()" + + # Subcommand support: store conditional requirements + # Maps option names to required subcommand values and their required options + declare -gA "__dc_${prefix}_subcommands=()" + declare -g "__dc_${prefix}_subcommand_option=" + + # Add common inherited options (optional bools) for every app + dc__ensure_common_options "$prefix" } # Core adder (nameref-based, reliable) dc__add_option_core() { - local prefix="$1" opt="$2" req="$3" desc="$4" type="$5" varname="$6" default="${7-}" - dc__bind_spec "$prefix" - # Avoid duplicate option registration - if [[ -n "${IDX[$opt]+_}" ]]; then - return 0 - fi - local i; i="${#N[@]}" - N[i]="$opt"; R[i]="$req"; T[i]="$type"; D[i]="$desc"; V[i]="$varname"; DF[i]="$default" - IDX["$opt"]="$i" - # Do not force initial value; allow parse to set defaults and normalize - dc__declvar_preserve "$varname" "" + local prefix="$1" opt="$2" req="$3" desc="$4" type="$5" varname="$6" default="${7-}" + dc__bind_spec "$prefix" + # Avoid duplicate option registration + if [[ -n "${IDX[$opt]+_}" ]]; then + return 0 + fi + local i + i="${#N[@]}" + N[i]="$opt" + R[i]="$req" + T[i]="$type" + D[i]="$desc" + V[i]="$varname" + DF[i]="$default" + IDX["$opt"]="$i" + # Do not force initial value; allow parse to set defaults and normalize + dc__declvar_preserve "$varname" "" } # Add an option to the spec: NAME MANDATORY|OPTIONAL DESCRIPTION [TYPE] # TYPE defaults to "string". Supported: string, int, bool dc_args_add_option() { - local prefix="$1" opt="$2" req="$3" desc="$4" type="${5:-string}" default="${6-}" - [[ -z "$prefix" || -z "$opt" || -z "$req" ]] && { error "dc_args_add_option: missing args"; exit 1; } - case "$req" in - MANDATORY|OPTIONAL) ;; - *) error "dc_args_add_option: req must be MANDATORY or OPTIONAL"; exit 1;; - esac - case "$type" in - string|int|bool) ;; - *) error "dc_args_add_option: unsupported type '$type'"; exit 1;; - esac - local var; var="$(dc__make_var_name "$prefix" "$opt")" - dc__add_option_core "$prefix" "$opt" "$req" "$desc" "$type" "$var" "$default" + local prefix="$1" opt="$2" req="$3" desc="$4" type="${5:-string}" default="${6-}" + [[ -z "$prefix" || -z "$opt" || -z "$req" ]] && { + error "dc_args_add_option: missing args" + exit 1 + } + case "$req" in + MANDATORY | OPTIONAL) ;; + *) + error "dc_args_add_option: req must be MANDATORY or OPTIONAL" + exit 1 + ;; + esac + case "$type" in + string | int | bool) ;; + *) + error "dc_args_add_option: unsupported type '$type'" + exit 1 + ;; + esac + local var + var="$(dc__make_var_name "$prefix" "$opt")" + dc__add_option_core "$prefix" "$opt" "$req" "$desc" "$type" "$var" "$default" } # Add a positional argument to the spec: NAME MANDATORY|OPTIONAL DESCRIPTION dc_args_add_positional() { - local prefix="$1" name="$2" req="$3" desc="$4" - [[ -z "$prefix" || -z "$name" || -z "$req" ]] && { error "dc_args_add_positional: missing args"; return 64; } - case "$req" in - MANDATORY|OPTIONAL) ;; - *) error "dc_args_add_positional: req must be MANDATORY or OPTIONAL"; return 64;; - esac - dc__bind_spec "$prefix" - local i; i="${#PN[@]}" - PN[i]="$name"; PR[i]="$req"; PD[i]="$desc" - local var; var="$(dc__make_var_name "$prefix" "$name")" - PV[i]="$var" - dc__declvar_preserve "$var" "" + local prefix="$1" name="$2" req="$3" desc="$4" + [[ -z "$prefix" || -z "$name" || -z "$req" ]] && { + error "dc_args_add_positional: missing args" + return 64 + } + case "$req" in + MANDATORY | OPTIONAL) ;; + *) + error "dc_args_add_positional: req must be MANDATORY or OPTIONAL" + return 64 + ;; + esac + dc__bind_spec "$prefix" + local i + i="${#PN[@]}" + PN[i]="$name" + PR[i]="$req" + PD[i]="$desc" + local var + var="$(dc__make_var_name "$prefix" "$name")" + PV[i]="$var" + dc__declvar_preserve "$var" "" } # Add global inherited bool (unprefixed) if missing dc__add_global_bool() { - local prefix="$1" opt="$2" desc="$3" - dc__bind_spec "$prefix" - if [[ -n "${IDX[$opt]+_}" ]]; then return 0; fi - local var; var="$(dc__make_global_var_name "$opt")" - dc__add_option_core "$prefix" "$opt" "OPTIONAL" "$desc" "bool" "$var" "" + local prefix="$1" opt="$2" desc="$3" + dc__bind_spec "$prefix" + if [[ -n "${IDX[$opt]+_}" ]]; then return 0; fi + local var + var="$(dc__make_global_var_name "$opt")" + dc__add_option_core "$prefix" "$opt" "OPTIONAL" "$desc" "bool" "$var" "" } # Ensure the common inherited options exist for this prefix dc__ensure_common_options() { - local prefix="$1" - dc__add_global_bool "$prefix" "verbose" "Enable verbose output" - dc__add_global_bool "$prefix" "quiet" "Suppress non-error output" - dc__add_global_bool "$prefix" "dry-run" "Show what would be done, without making changes" - dc__add_global_bool "$prefix" "help" "Show this help and exit" + local prefix="$1" + dc__add_global_bool "$prefix" "verbose" "Enable verbose output" + dc__add_global_bool "$prefix" "quiet" "Suppress non-error output" + dc__add_global_bool "$prefix" "dry-run" "Show what would be done, without making changes" + dc__add_global_bool "$prefix" "help" "Show this help and exit" } # Register subcommand-specific required options @@ -186,368 +216,438 @@ dc__ensure_common_options() { # Example: dc_args_add_subcommand "MYAPP" "action" "compose" "name" "probes" # When --action=compose, then --name and --probes become MANDATORY dc_args_add_subcommand() { - local prefix="$1" option="$2" value="$3" - shift 3 - local required_opts=("$@") - - [[ -z "$prefix" || -z "$option" || -z "$value" ]] && { - error "dc_args_add_subcommand: missing prefix, option, or value" - return 64 - } - - dc__bind_spec "$prefix" - - # Store the subcommand option if not already set - if [[ -z "$SUBCMD_OPT" ]]; then - SUBCMD_OPT="$option" - elif [[ "$SUBCMD_OPT" != "$option" ]]; then - error "dc_args_add_subcommand: cannot use multiple subcommand options ($SUBCMD_OPT vs $option)" - return 64 - fi - - # Store the required options for this subcommand value - # Format: "value:opt1,opt2,opt3" - local opts_str - opts_str="$(IFS=','; echo "${required_opts[*]}")" - SUBCMDS["$value"]="$opts_str" + local prefix="$1" option="$2" value="$3" + shift 3 + local required_opts=("$@") + + [[ -z "$prefix" || -z "$option" || -z "$value" ]] && { + error "dc_args_add_subcommand: missing prefix, option, or value" + return 64 + } + + dc__bind_spec "$prefix" + + # Store the subcommand option if not already set + if [[ -z "$SUBCMD_OPT" ]]; then + SUBCMD_OPT="$option" + elif [[ "$SUBCMD_OPT" != "$option" ]]; then + error "dc_args_add_subcommand: cannot use multiple subcommand options ($SUBCMD_OPT vs $option)" + return 64 + fi + + # Store the required options for this subcommand value + # Format: "value:opt1,opt2,opt3" + local opts_str + opts_str="$( + IFS=',' + echo "${required_opts[*]}" + )" + SUBCMDS["$value"]="$opts_str" } # Build long option string for getopt dc__build_longopts() { - local prefix="$1" - dc__bind_spec "$prefix" - local i long="" - for ((i=0; i<${#N[@]}; ++i)); do - if [[ "${T[i]}" == "bool" ]]; then - long+="${N[i]}," - else - long+="${N[i]}:," - fi - done - printf "%s" "${long%,}" + local prefix="$1" + dc__bind_spec "$prefix" + local i long="" + for ((i = 0; i < ${#N[@]}; ++i)); do + if [[ "${T[i]}" == "bool" ]]; then + long+="${N[i]}," + else + long+="${N[i]}:," + fi + done + printf "%s" "${long%,}" } # Print usage with positional suffix and grouped options dc_args_usage() { - local prefix="$1" prog="$2" - [[ -z "$prog" ]] && prog="$0" - dc__bind_spec "$prefix" - - local i pos_usage="" - for ((i=0; i<${#PN[@]}; ++i)); do - if [[ "${PR[i]}" == "MANDATORY" ]]; then - pos_usage+=" ${PN[i]}" - else - pos_usage+=" [${PN[i]}]" - fi - done - - log "Usage: $prog [OPTIONS]${pos_usage} -- [args...]" - log "" - local print_group - print_group() { - local want="$1" header="$2" - local any=0 i - for ((i=0; i<${#N[@]}; ++i)); do - if [[ "${R[i]}" == "$want" ]]; then - (( any==0 )) && { log "$header"; any=1; } - # Determine conditional requirement note based on subcommands - local note="" - if [[ -n "$SUBCMD_OPT" ]]; then - local __vals=() - local __k - for __k in "${!SUBCMDS[@]}"; do - local __opts_str="${SUBCMDS[$__k]}" - IFS=',' read -ra __opts <<< "$__opts_str" - local __o - for __o in "${__opts[@]}"; do - if [[ "$__o" == "${N[i]}" ]]; then - __vals+=("$__k") - break - fi - done - done - if (( ${#__vals[@]} > 0 )); then - local __vals_joined - IFS='|' read -r __vals_joined <<< "${__vals[*]}" - note=" (required when --$SUBCMD_OPT=$__vals_joined)" - fi - fi - if [[ "${T[i]}" == "bool" ]]; then - log " --%-18s %s%s\n" "${N[i]}" "${D[i]}" "$note" - else - log " --%-18s %s%s\n" "${N[i]} <${T[i]}>" "${D[i]}" "$note" - fi - fi - done - (( any==1 )) && log "" - } - print_group "MANDATORY" "Mandatory options:" - print_group "OPTIONAL" "Optional options:" - - if (( ${#PN[@]} > 0 )); then - log "Positional arguments:" - for ((i=0; i<${#PN[@]}; ++i)); do - log " %-20s %s" "${PN[i]}" "${PD[i]}" - done - log "" - fi + local prefix="$1" prog="$2" + [[ -z "$prog" ]] && prog="$0" + dc__bind_spec "$prefix" + + local i pos_usage="" + for ((i = 0; i < ${#PN[@]}; ++i)); do + if [[ "${PR[i]}" == "MANDATORY" ]]; then + pos_usage+=" ${PN[i]}" + else + pos_usage+=" [${PN[i]}]" + fi + done + + log "Usage: $prog [OPTIONS]${pos_usage} -- [args...]" + log "" + local print_group + print_group() { + local want="$1" header="$2" + local any=0 i + for ((i = 0; i < ${#N[@]}; ++i)); do + if [[ "${R[i]}" == "$want" ]]; then + ((any == 0)) && { + log "$header" + any=1 + } + # Determine conditional requirement note based on subcommands + local note="" + if [[ -n "$SUBCMD_OPT" ]]; then + local __vals=() + local __k + for __k in "${!SUBCMDS[@]}"; do + local __opts_str="${SUBCMDS[$__k]}" + IFS=',' read -ra __opts <<<"$__opts_str" + local __o + for __o in "${__opts[@]}"; do + if [[ "$__o" == "${N[i]}" ]]; then + __vals+=("$__k") + break + fi + done + done + if ((${#__vals[@]} > 0)); then + # Check if the subcommand option is a bool type + local __subcmd_idx="${IDX[$SUBCMD_OPT]}" + local __subcmd_type="${T[$__subcmd_idx]}" + + if [[ "$__subcmd_type" == "bool" ]]; then + # For bool, just show --option without =value + note=" (required when --$SUBCMD_OPT)" + else + # For non-bool, show --option=value1|value2 + local __vals_joined + IFS='|' read -r __vals_joined <<<"${__vals[*]}" + note=" (required when --$SUBCMD_OPT=$__vals_joined)" + fi + fi + fi + if [[ "${T[i]}" == "bool" ]]; then + log " --%-18s %s%s\n" "${N[i]}" "${D[i]}" "$note" + else + log " --%-18s %s%s\n" "${N[i]} <${T[i]}>" "${D[i]}" "$note" + fi + fi + done + ((any == 1)) && log "" + } + print_group "MANDATORY" "Mandatory options:" + print_group "OPTIONAL" "Optional options:" + + if ((${#PN[@]} > 0)); then + log "Positional arguments:" + for ((i = 0; i < ${#PN[@]}; ++i)); do + log " %-20s %s" "${PN[i]}" "${PD[i]}" + done + log "" + fi } dc_args_show_help() { - local prefix="$1" prog="$2" - [[ -z "$prefix" ]] && { log "dc_args_show_help: missing prefix"; exit 1; } - [[ -z "$prog" ]] && prog="$0" - dc_args_usage "$prefix" "$prog" + local prefix="$1" prog="$2" + [[ -z "$prefix" ]] && { + log "dc_args_show_help: missing prefix" + exit 1 + } + [[ -z "$prog" ]] && prog="$0" + dc_args_usage "$prefix" "$prog" } dc__normalize_bool_var() { - local varname="$1" v lc - v="${!varname}" - lc="$(echo -n "${v:-}" | dc__lower)" - case "$lc" in - 1|true|t|yes|y|on) dc__setvar "$varname" "1" ;; - 0|false|f|no|n|off|"") dc__setvar "$varname" "0" ;; - *) dc__setvar "$varname" "0" ;; - esac + local varname="$1" v lc + v="${!varname}" + lc="$(echo -n "${v:-}" | dc__lower)" + case "$lc" in + 1 | true | t | yes | y | on) dc__setvar "$varname" "1" ;; + 0 | false | f | no | n | off | "") dc__setvar "$varname" "0" ;; + *) dc__setvar "$varname" "0" ;; + esac } dc__validate_value() { - local type="$1" value="$2" - case "$type" in - int) - [[ "$value" =~ ^-?[0-9]+$ ]] || { error "expects integer, got '$value'"; return 1; } - ;; - string|bool|*) ;; - esac - return 0 + local type="$1" value="$2" + case "$type" in + int) + [[ "$value" =~ ^-?[0-9]+$ ]] || { + error "expects integer, got '$value'" + return 1 + } + ;; + string | bool | *) ;; + esac + return 0 } dc_args_parse() { - local prefix="$1" prog="$2"; shift 2 || true - - dc__ensure_gnu_getopt || return $? - - local longopts; longopts="$(dc__build_longopts "$prefix")" - local parsed - if ! parsed="$(getopt --name "$prog" --options "" --longoptions "$longopts" -- "$@")"; then - log "" - dc_args_usage "$prefix" "$prog" - exit 1 - fi - eval "set -- $parsed" - - dc__bind_spec "$prefix" - local i var - for ((i=0; i<${#N[@]}; ++i)); do - var="${V[i]}" - if [[ "${T[i]}" == "bool" ]]; then - # If a non-empty value already exists (e.g., from environment), normalize it. - if [[ -n "${!var-}" ]]; then - dc__normalize_bool_var "$var" - else - # Otherwise, initialize from default if provided; fallback to 0. - if [[ -n "${DF[i]-}" ]]; then - dc__setvar "$var" "${DF[i]}" - dc__normalize_bool_var "$var" - else - dc__setvar "$var" "0" - fi - fi - else - # Initialize non-bool to default if provided; else empty - if [[ -n "${DF[i]-}" ]]; then - dc__setvar "$var" "${DF[i]}" - else - dc__setvar "$var" "" - fi - fi - done - - while true; do - case "$1" in - --) - shift; break ;; - --*) - local opt="${1#--}" - local idx="${IDX[$opt]}" - local type varname - type="${T[idx]}"; varname="${V[idx]}" - if [[ "$type" == "bool" ]]; then - dc__setvar "$varname" "1"; shift - else - if [[ -z "${2-}" ]]; then - error "--$opt requires a value" - log "" - dc_args_usage "$prefix" "$prog" - exit 1 - fi - if ! err="$(dc__validate_value "$type" "$2" 2>&1)"; then - error "--$opt $err" - log "" - dc_args_usage "$prefix" "$prog" - exit 1 - fi - dc__setvar "$varname" "$2"; shift 2 - fi - ;; - *) break ;; - esac - done - - local argsvar; argsvar="$(echo -n "${prefix}_ARGS" | dc__upper)" - declare -ga "$argsvar" - local -n __dc_args_ref="$argsvar" - __dc_args_ref=() - while (( $# )); do __dc_args_ref+=("$1"); shift; done - - local missing_pos=() - for ((i=0; i<${#PN[@]}; ++i)); do - local name="${PN[i]}" req="${PR[i]}" pvar="${PV[i]}" - local val="${__dc_args_ref[i]-}" - dc__setvar "$pvar" "${val-}" - if [[ "$req" == "MANDATORY" && -z "${val-}" ]]; then missing_pos+=("$name"); fi - done - if (( ${#missing_pos[@]} > 0 )); then - error "missing mandatory positional argument(s): ${missing_pos[*]}" - log "" - dc_args_usage "$prefix" "$prog" - exit 1 - fi - - # Defaults were initialized prior to parsing; no further action needed here. - - if [[ "${HELP:-0}" == "1" ]]; then dc_args_show_help "$prefix" "$prog"; exit 0; fi - - if [[ "${QUIET:-0}" == "1" ]]; then dc__setvar "VERBOSE" "0"; fi - if [[ "${VERBOSE:-0}" == "1" ]]; then dc__setvar "QUIET" "0"; fi - - local missing=() - for ((i=0; i<${#N[@]}; ++i)); do - if [[ "${R[i]}" == "MANDATORY" ]]; then - var="${V[i]}"; local v; v="${!var}" - if [[ "${T[i]}" == "bool" ]]; then [[ "$v" == "1" ]] || missing+=("--${N[i]}"); - else [[ -n "$v" ]] || missing+=("--${N[i]}"); fi - fi - done - if (( ${#missing[@]} > 0 )); then - error "missing mandatory option(s): ${missing[*]}" - log "" - dc_args_usage "$prefix" "$prog" - exit 1 - fi - - # Validate subcommand-specific requirements - if [[ -n "$SUBCMD_OPT" ]]; then - # Get the subcommand option's variable name and value - local subcmd_var; subcmd_var="$(dc__make_var_name "$prefix" "$SUBCMD_OPT")" - local subcmd_val; subcmd_val="${!subcmd_var}" - - # Check if this subcommand value has specific requirements - if [[ -n "${SUBCMDS[$subcmd_val]+_}" ]]; then - local required_opts_str="${SUBCMDS[$subcmd_val]}" - IFS=',' read -ra required_opts <<< "$required_opts_str" - - local subcmd_missing=() - for req_opt in "${required_opts[@]}"; do - # Find this option in the spec - if [[ -n "${IDX[$req_opt]+_}" ]]; then - local req_idx="${IDX[$req_opt]}" - local req_var="${V[req_idx]}" - local req_val="${!req_var}" - - if [[ -z "$req_val" ]]; then - subcmd_missing+=("--$req_opt") - fi - fi - done - - if (( ${#subcmd_missing[@]} > 0 )); then - error "subcommand '$subcmd_val' requires: ${subcmd_missing[*]}" - log "" - dc_args_usage "$prefix" "$prog" - exit 1 - fi - fi - fi - - if [[ "${VERBOSE:-0}" == "1" ]]; then - dc_args_pretty_print "$prefix" "$prog" - fi + local prefix="$1" prog="$2" + shift 2 || true + + dc__ensure_gnu_getopt || return $? + + local longopts + longopts="$(dc__build_longopts "$prefix")" + local parsed + if ! parsed="$(getopt --name "$prog" --options "" --longoptions "$longopts" -- "$@")"; then + log "" + dc_args_usage "$prefix" "$prog" + exit 1 + fi + eval "set -- $parsed" + + dc__bind_spec "$prefix" + local i var + for ((i = 0; i < ${#N[@]}; ++i)); do + var="${V[i]}" + if [[ "${T[i]}" == "bool" ]]; then + # If a non-empty value already exists (e.g., from environment), normalize it. + if [[ -n "${!var-}" ]]; then + dc__normalize_bool_var "$var" + else + # Otherwise, initialize from default if provided; fallback to 0. + if [[ -n "${DF[i]-}" ]]; then + dc__setvar "$var" "${DF[i]}" + dc__normalize_bool_var "$var" + else + dc__setvar "$var" "0" + fi + fi + else + # Initialize non-bool to default if provided; else empty + if [[ -n "${DF[i]-}" ]]; then + dc__setvar "$var" "${DF[i]}" + else + dc__setvar "$var" "" + fi + fi + done + + while true; do + case "$1" in + --) + shift + break + ;; + --*) + local opt="${1#--}" + local idx="${IDX[$opt]}" + local type varname + type="${T[idx]}" + varname="${V[idx]}" + if [[ "$type" == "bool" ]]; then + dc__setvar "$varname" "1" + shift + else + if [[ -z "${2-}" ]]; then + error "--$opt requires a value" + log "" + dc_args_usage "$prefix" "$prog" + exit 1 + fi + if ! err="$(dc__validate_value "$type" "$2" 2>&1)"; then + error "--$opt $err" + log "" + dc_args_usage "$prefix" "$prog" + exit 1 + fi + dc__setvar "$varname" "$2" + shift 2 + fi + ;; + *) break ;; + esac + done + + local argsvar + argsvar="$(echo -n "${prefix}_ARGS" | dc__upper)" + declare -ga "$argsvar" + local -n __dc_args_ref="$argsvar" + __dc_args_ref=() + while (($#)); do + __dc_args_ref+=("$1") + shift + done + + local missing_pos=() + for ((i = 0; i < ${#PN[@]}; ++i)); do + local name="${PN[i]}" req="${PR[i]}" pvar="${PV[i]}" + local val="${__dc_args_ref[i]-}" + dc__setvar "$pvar" "${val-}" + if [[ "$req" == "MANDATORY" && -z "${val-}" ]]; then missing_pos+=("$name"); fi + done + if ((${#missing_pos[@]} > 0)); then + error "missing mandatory positional argument(s): ${missing_pos[*]}" + log "" + dc_args_usage "$prefix" "$prog" + exit 1 + fi + + # Defaults were initialized prior to parsing; no further action needed here. + + if [[ "${HELP:-0}" == "1" ]]; then + dc_args_show_help "$prefix" "$prog" + exit 0 + fi + + if [[ "${QUIET:-0}" == "1" ]]; then dc__setvar "VERBOSE" "0"; fi + if [[ "${VERBOSE:-0}" == "1" ]]; then dc__setvar "QUIET" "0"; fi + + local missing=() + for ((i = 0; i < ${#N[@]}; ++i)); do + if [[ "${R[i]}" == "MANDATORY" ]]; then + var="${V[i]}" + local v + v="${!var}" + if [[ "${T[i]}" == "bool" ]]; then + [[ "$v" == "1" ]] || missing+=("--${N[i]}") + else [[ -n "$v" ]] || missing+=("--${N[i]}"); fi + fi + done + if ((${#missing[@]} > 0)); then + error "missing mandatory option(s): ${missing[*]}" + log "" + dc_args_usage "$prefix" "$prog" + exit 1 + fi + + # Validate subcommand-specific requirements + if [[ -n "$SUBCMD_OPT" ]]; then + # Get the subcommand option's variable name and value + local subcmd_var + subcmd_var="$(dc__make_var_name "$prefix" "$SUBCMD_OPT")" + local subcmd_val + subcmd_val="${!subcmd_var}" + + # Check if this subcommand value has specific requirements + if [[ -n "${SUBCMDS[$subcmd_val]+_}" ]]; then + local required_opts_str="${SUBCMDS[$subcmd_val]}" + IFS=',' read -ra required_opts <<<"$required_opts_str" + + local subcmd_missing=() + for req_opt in "${required_opts[@]}"; do + # Find this option in the spec + if [[ -n "${IDX[$req_opt]+_}" ]]; then + local req_idx="${IDX[$req_opt]}" + local req_var="${V[req_idx]}" + local req_val="${!req_var}" + + if [[ -z "$req_val" ]]; then + subcmd_missing+=("--$req_opt") + fi + fi + done + + if ((${#subcmd_missing[@]} > 0)); then + error "subcommand '$subcmd_val' requires: ${subcmd_missing[*]}" + log "" + dc_args_usage "$prefix" "$prog" + exit 1 + fi + fi + fi + + if [[ "${VERBOSE:-0}" == "1" ]]; then + dc_args_pretty_print "$prefix" "$prog" + fi } dc_args_pretty_print() { - local prefix="$1" prog="$2"; [[ -z "$prefix" ]] && { error "dc_args_pretty_print: missing prefix"; return 64; } - [[ -z "$prog" ]] && prog="$0" - dc__bind_spec "$prefix" - debug "$prog arguments:"; debug "" - local i max=0; for ((i=0; i<${#N[@]}; ++i)); do (( ${#N[i]}>max )) && max=${#N[i]}; done - local print_group - print_group() { - local want="$1" header="$2" any=0 - for ((i=0; i<${#N[@]}; ++i)); do - if [[ "${R[i]}" == "$want" ]]; then - (( any==0 )) && { debug "$header"; any=1; } - local var val disp; var="${V[i]}"; val="${!var}"; disp="" - # Compute conditional requirement note for this option (if any) - local note="" - if [[ -n "$SUBCMD_OPT" ]]; then - local __vals=() __k - for __k in "${!SUBCMDS[@]}"; do - local __opts_str="${SUBCMDS[$__k]}" - IFS=',' read -ra __opts <<< "$__opts_str" - local __o - for __o in "${__opts[@]}"; do - if [[ "$__o" == "${N[i]}" ]]; then - __vals+=("$__k") - break - fi - done - done - if (( ${#__vals[@]} > 0 )); then - local __joined=""; local __idx - for __idx in "${!__vals[@]}"; do - [[ "$__idx" -gt 0 ]] && __joined+="|" - __joined+="${__vals[$__idx]}" - done - note=" (required when --$SUBCMD_OPT=$__joined)" - fi - fi - - if [[ "${T[i]}" == "bool" ]]; then - if [[ "$val" == "1" ]]; then val="true"; else val="false"; fi - debug " --%-*s : %s%s" "$max" "${N[i]}" "$val" "$note" - else - # Prefer actual value; if empty, fall back to default (if any) for display - if [[ -n "$val" ]]; then - disp="$val" - elif [[ -n "${DF[i]-}" ]]; then - disp="${DF[i]}" - else - disp="" - fi - if [[ -z "$disp" ]]; then - debug " --%-*s : %s%s" "$max" "${N[i]}" "" "$note" - else - local qv - printf -v qv "%q" "$disp" - debug " --%-*s : %s%s" "$max" "${N[i]}" "$qv" "$note" - fi - fi - fi - done; (( any==1 )) && debug "" - } - print_group "MANDATORY" "Mandatory options:"; print_group "OPTIONAL" "Optional options:" - local argsvar; argsvar="$(echo -n "${prefix}_ARGS" | dc__upper)"; local -n __dc_args_ref="$argsvar" - if (( ${#__dc_args_ref[@]} > 0 )); then - debug "Positional arguments:" - for ((i=0; i<${#__dc_args_ref[@]}; ++i)); do - local q - printf -v q "%q" "${__dc_args_ref[i]}" - debug " [%d] %s" "$i" "$q" - done - debug "" - fi + local prefix="$1" prog="$2" + [[ -z "$prefix" ]] && { + error "dc_args_pretty_print: missing prefix" + return 64 + } + [[ -z "$prog" ]] && prog="$0" + dc__bind_spec "$prefix" + debug "$prog arguments:" + debug "" + local i max=0 + for ((i = 0; i < ${#N[@]}; ++i)); do ((${#N[i]} > max)) && max=${#N[i]}; done + local print_group + print_group() { + local want="$1" header="$2" any=0 + for ((i = 0; i < ${#N[@]}; ++i)); do + if [[ "${R[i]}" == "$want" ]]; then + ((any == 0)) && { + debug "$header" + any=1 + } + local var val disp + var="${V[i]}" + val="${!var}" + disp="" + # Compute conditional requirement note for this option (if any) + local note="" + if [[ -n "$SUBCMD_OPT" ]]; then + local __vals=() __k + for __k in "${!SUBCMDS[@]}"; do + local __opts_str="${SUBCMDS[$__k]}" + IFS=',' read -ra __opts <<<"$__opts_str" + local __o + for __o in "${__opts[@]}"; do + if [[ "$__o" == "${N[i]}" ]]; then + __vals+=("$__k") + break + fi + done + done + if ((${#__vals[@]} > 0)); then + # Check if the subcommand option is a bool type + local __subcmd_idx="${IDX[$SUBCMD_OPT]}" + local __subcmd_type="${T[$__subcmd_idx]}" + + if [[ "$__subcmd_type" == "bool" ]]; then + # For bool, just show --option without =value + note=" (required when --$SUBCMD_OPT)" + else + # For non-bool, show --option=value1|value2|... + local __joined="" + local __idx + for __idx in "${!__vals[@]}"; do + [[ "$__idx" -gt 0 ]] && __joined+="|" + __joined+="${__vals[$__idx]}" + done + note=" (required when --$SUBCMD_OPT=$__joined)" + fi + fi + fi + + if [[ "${T[i]}" == "bool" ]]; then + if [[ "$val" == "1" ]]; then val="true"; else val="false"; fi + debug " --%-*s : %s%s" "$max" "${N[i]}" "$val" "$note" + else + # Prefer actual value; if empty, fall back to default (if any) for display + if [[ -n "$val" ]]; then + disp="$val" + elif [[ -n "${DF[i]-}" ]]; then + disp="${DF[i]}" + else + disp="" + fi + if [[ -z "$disp" ]]; then + debug " --%-*s : %s%s" "$max" "${N[i]}" "" "$note" + else + local qv + printf -v qv "%q" "$disp" + debug " --%-*s : %s%s" "$max" "${N[i]}" "$qv" "$note" + fi + fi + fi + done + if ((any == 1)); then + debug "" + fi + } + print_group "MANDATORY" "Mandatory options:" + print_group "OPTIONAL" "Optional options:" + local argsvar + argsvar="$(echo -n "${prefix}_ARGS" | dc__upper)" + local -n __dc_args_ref="$argsvar" + if ((${#__dc_args_ref[@]} > 0)); then + debug "Positional arguments:" + for ((i = 0; i < ${#__dc_args_ref[@]}; ++i)); do + local q + printf -v q "%q" "${__dc_args_ref[i]}" + debug " [%d] %s" "$i" "$q" + done + debug "" + fi } # Example: @@ -558,7 +658,7 @@ dc_args_pretty_print() { # dc_args_pretty_print "MYAPP" "myprog" # dc_args_usage "MYAPP" "myprog" # echo "$MYAPP_INPUT" "$MYAPP_COUNT" "$VERBOSE" "$QUIET" "$DRY_RUN" -# +# # Example with subcommands: # dc_args_init "MYAPP" # dc_args_add_option "MYAPP" "user" "MANDATORY" "User name" "string" diff --git a/scripts/datacrumbs/datacrumbs_compose.in b/scripts/datacrumbs/datacrumbs_compose.in index 505f7980..17d957e8 100755 --- a/scripts/datacrumbs/datacrumbs_compose.in +++ b/scripts/datacrumbs/datacrumbs_compose.in @@ -6,26 +6,26 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Load argument parser if [[ -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - source "$SCRIPT_DIR/datacrumbs_args" + source "$SCRIPT_DIR/datacrumbs_args" else - error "datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + error "datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi APP="DATACRUMBS_COMPOSE" dc_args_init "$APP" -dc_args_add_option "$APP" "action" "MANDATORY" "Action to perform: discover or compose" "string" -dc_args_add_option "$APP" "name" "OPTIONAL" "Composable name (required for compose)" "string" -dc_args_add_option "$APP" "probes" "OPTIONAL" "Comma-separated probe list (required for compose)" "string" +dc_args_add_option "$APP" "action" "MANDATORY" "Action to perform: discover or compose" "string" +dc_args_add_option "$APP" "name" "OPTIONAL" "Composable name (required for compose)" "string" +dc_args_add_option "$APP" "probes" "OPTIONAL" "Comma-separated probe list (required for compose)" "string" dc_args_add_subcommand "$APP" "action" "compose" "name" "probes" # If --help was requested, show help using the already-registered spec and exit for __dc_a in "$@"; do - [[ "$__dc_a" == "--" ]] && break - if [[ "$__dc_a" == "--help" ]]; then - dc_args_show_help "$APP" "datacrumbs_compose" - exit 0 - fi + [[ "$__dc_a" == "--" ]] && break + if [[ "$__dc_a" == "--help" ]]; then + dc_args_show_help "$APP" "datacrumbs_compose" + exit 0 + fi done dc_args_parse "$APP" "datacrumbs_compose" "$@" @@ -34,9 +34,9 @@ ACTION="${DATACRUMBS_COMPOSE_ACTION}" # Validate action if [[ "$ACTION" != "compose" && "$ACTION" != "discover" ]]; then - error "--action must be either 'compose' or 'discover'." - dc_args_show_help "$APP" "datacrumbs_compose" - exit 1 + error "--action must be either 'compose' or 'discover'." + dc_args_show_help "$APP" "datacrumbs_compose" + exit 1 fi dc_args_pretty_print "$APP" "datacrumbs_compose" @@ -49,63 +49,63 @@ check_sudo_user # Dry run support DRY_RUN_MODE=0 if [[ -n "${DRY_RUN}" && "${DRY_RUN}" != "0" ]]; then - DRY_RUN_MODE=1 - log "Dry-run mode active. Commands will be printed but not executed." + DRY_RUN_MODE=1 + log "Dry-run mode active. Commands will be printed but not executed." fi run() { - if [[ "$DRY_RUN_MODE" -eq 1 ]]; then - printf "[DRY-RUN]" - printf " %q" "$@" - printf "\n" - return 0 - else - "$@" - fi + if [[ "$DRY_RUN_MODE" == "1" ]]; then + printf "[DRY-RUN]" + printf " %q" "$@" + printf "\n" + return 0 + else + "$@" + fi } PROBE_OBJECTS_DIR="$DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR" if [[ "$ACTION" == "discover" ]]; then - log "Discovering probe objects in $PROBE_OBJECTS_DIR..." - for file in "$PROBE_OBJECTS_DIR"/*.o; do - fname=$(basename "$file") - if [[ "$fname" != "common.o" && "$fname" != "datacrumbs.bpf.o" && "$fname" != "init.o" ]]; then - log "${fname%.o}" - fi - done + log "Discovering probe objects in $PROBE_OBJECTS_DIR..." + for file in "$PROBE_OBJECTS_DIR"/*.o; do + fname=$(basename "$file") + if [[ "$fname" != "common.o" && "$fname" != "datacrumbs.bpf.o" && "$fname" != "init.o" ]]; then + log "${fname%.o}" + fi + done elif [[ "$ACTION" == "compose" ]]; then - COMPOSABLE_NAME="${DATACRUMBS_COMPOSE_NAME}" - PROBES="${DATACRUMBS_COMPOSE_PROBES}" - - if [[ -z "$COMPOSABLE_NAME" || -z "$PROBES" ]]; then - error "--name and --probes are required for --action compose" - dc_args_pretty_print "$APP" "datacrumbs_compose" - exit 1 - fi - - IFS=',' read -ra PROBES_ARRAY <<< "$PROBES" - for probe in "${PROBES_ARRAY[@]}"; do - probe_file="${PROBE_OBJECTS_DIR}/${probe}.o" - if [[ ! -f "$probe_file" ]]; then - error "Probe object '$probe_file' not found." - exit 1 - fi - done - - log "Composing $COMPOSABLE_NAME for: ${DATACRUMBS_USER}" - BUILD_DIR="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_$(date +%s%N)" - if [[ -d "${BUILD_DIR}" ]]; then - warn "Cleaning existing build directory: ${BUILD_DIR}" - run rm -rf "${BUILD_DIR}" - fi - - log "Creating build directory: ${BUILD_DIR}" - run mkdir -p "${BUILD_DIR}" - run chown "${DATACRUMBS_USER}:${DATACRUMBS_USER}" "${BUILD_DIR}" - - log "Running build process as ${DATACRUMBS_USER}" - run su - ${DATACRUMBS_USER} << 'EOF' + COMPOSABLE_NAME="${DATACRUMBS_COMPOSE_NAME}" + PROBES="${DATACRUMBS_COMPOSE_PROBES}" + + if [[ -z "$COMPOSABLE_NAME" || -z "$PROBES" ]]; then + error "--name and --probes are required for --action compose" + dc_args_pretty_print "$APP" "datacrumbs_compose" + exit 1 + fi + + IFS=',' read -ra PROBES_ARRAY <<<"$PROBES" + for probe in "${PROBES_ARRAY[@]}"; do + probe_file="${PROBE_OBJECTS_DIR}/${probe}.o" + if [[ ! -f "$probe_file" ]]; then + error "Probe object '$probe_file' not found." + exit 1 + fi + done + + log "Composing $COMPOSABLE_NAME for: ${DATACRUMBS_USER}" + BUILD_DIR="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_$(date +%s%N)" + if [[ -d "${BUILD_DIR}" ]]; then + warn "Cleaning existing build directory: ${BUILD_DIR}" + run rm -rf "${BUILD_DIR}" + fi + + log "Creating build directory: ${BUILD_DIR}" + run mkdir -p "${BUILD_DIR}" + run chown "${DATACRUMBS_USER}:${DATACRUMBS_USER}" "${BUILD_DIR}" + + log "Running build process as ${DATACRUMBS_USER}" + run su - ${DATACRUMBS_USER} <<'EOF' set -e cp -r '${DATACRUMBS_INSTALL_COMPOSABLE_DIR}/'* '${BUILD_DIR}/' @CMAKE_COMMAND@ -B'${BUILD_DIR}/build' -DCMAKE_INSTALL_PREFIX='${BUILD_DIR}/install' \ @@ -116,23 +116,23 @@ elif [[ "$ACTION" == "compose" ]]; then @CMAKE_COMMAND@ --build '${BUILD_DIR}/build' --target all -- -j @CMAKE_COMMAND@ --install '${BUILD_DIR}/build' EOF - if [[ $? -ne 0 ]]; then - error "Build process failed" - run rm -rf "${BUILD_DIR}" - exit 1 - fi - - log "Copying final binary to client bin" - run sudo -u ${DATACRUMBS_INSTALL_USER} mkdir -p "${DATACRUMBS_CLIENT_BIN}" - run rm -f "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" - run cp "${BUILD_DIR}/install/sbin/datacrumbs_${COMPOSABLE_NAME}" "${DATACRUMBS_CLIENT_BIN}" - run chown ${DATACRUMBS_USER}:${DATACRUMBS_USER} "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" - run chmod u+xr,o-rwx,g-rwx "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" - run rm -rf "${BUILD_DIR}" - debug "Created composable binary at ${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" - log "Compose action completed successfully" + if [[ $? -ne 0 ]]; then + error "Build process failed" + run rm -rf "${BUILD_DIR}" + exit 1 + fi + + log "Copying final binary to client bin" + run sudo -u ${DATACRUMBS_INSTALL_USER} mkdir -p "${DATACRUMBS_CLIENT_BIN}" + run rm -f "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" + run cp "${BUILD_DIR}/install/sbin/datacrumbs_${COMPOSABLE_NAME}" "${DATACRUMBS_CLIENT_BIN}" + run chown ${DATACRUMBS_USER}:${DATACRUMBS_USER} "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" + run chmod u+xr,o-rwx,g-rwx "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" + run rm -rf "${BUILD_DIR}" + debug "Created composable binary at ${DATACRUMBS_CLIENT_BIN}/datacrumbs_${COMPOSABLE_NAME}" + log "Compose action completed successfully" else - error "Invalid usage" - dc_args_pretty_print "$APP" "datacrumbs_compose" - exit 1 -fi \ No newline at end of file + error "Invalid usage" + dc_args_pretty_print "$APP" "datacrumbs_compose" + exit 1 +fi diff --git a/scripts/datacrumbs/datacrumbs_compose_run.in b/scripts/datacrumbs/datacrumbs_compose_run.in index 0de03bbb..ddfb894d 100755 --- a/scripts/datacrumbs/datacrumbs_compose_run.in +++ b/scripts/datacrumbs/datacrumbs_compose_run.in @@ -6,8 +6,8 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Check if datacrumbs_args exists in scripts directory if [[ ! -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - echo "Error: datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi # Source argument parser @@ -15,7 +15,7 @@ source "$SCRIPT_DIR/datacrumbs_args" # Initialize argument parser for this script dc_args_init "DATACRUMBS_COMPOSE_RUN" -dc_args_add_option "DATACRUMBS_COMPOSE_RUN" "composite_name" "MANDATORY" "Composable name" "string" +dc_args_add_option "DATACRUMBS_COMPOSE_RUN" "composite_name" "MANDATORY" "Composable name" "string" "${DATACRUMBS_COMPOSABLE_NAME}" dc_args_add_option "DATACRUMBS_COMPOSE_RUN" "app" "MANDATORY" "App command" "string" dc_args_add_option "DATACRUMBS_COMPOSE_RUN" "enable_mpi" "OPTIONAL" "switch to enable MPI" "bool" "0" dc_args_add_option "DATACRUMBS_COMPOSE_RUN" "nodes" "OPTIONAL" "Set number of nodes" "int" "1" @@ -23,14 +23,13 @@ dc_args_add_option "DATACRUMBS_COMPOSE_RUN" "ppn" "OPTIONAL" "Set processes per dc_args_add_subcommand "DATACRUMBS_COMPOSE_RUN" "enable_mpi" "1" "nodes" "ppn" # The rest of the arguments are arbitrary and will be captured as APP_ARGS - # Parse arguments dc_args_parse "DATACRUMBS_COMPOSE_RUN" "$0" "$@" if [[ $? -ne 0 ]]; then - echo "Error: Argument parsing failed." - show_help - exit 1 + echo "Error: Argument parsing failed." + show_help + exit 1 fi DATACRUMBS_COMPOSABLE_NAME="${DATACRUMBS_COMPOSE_RUN_COMPOSITE_NAME:-}" @@ -40,41 +39,48 @@ export DATACRUMBS_JOB_ENABLE_MPI=${DATACRUMBS_COMPOSE_RUN_ENABLE_MPI:-0} export DATACRUMBS_JOB_NODES=${DATACRUMBS_COMPOSE_RUN_NODES:-1} export DATACRUMBS_JOB_PPN=${DATACRUMBS_COMPOSE_RUN_PPN:-1} -if [[ -z "$DATACRUMBS_COMPOSABLE_NAME" ]]; then - echo "Error: COMPOSITE_NAME argument is required." - show_help - exit 1 +if [[ -z "$DATACRUMBS_COMPOSABLE_NAME" || "$DATACRUMBS_COMPOSABLE_NAME" == "NONE" ]]; then + echo "Error: COMPOSITE_NAME argument is required." + show_help + exit 1 fi if [[ -z "${DATACRUMBS_COMPOSE_RUN_APP}" ]]; then - echo "Error: APP command is required." - show_help - exit 1 + echo "Error: APP command is required." + show_help + exit 1 +fi + +if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSABLE_NAME}"; then + error "Invalid composable name: ${DATACRUMBS_COMPOSABLE_NAME}" + exit 1 fi # Convert APP_CMD string into array, splitting on spaces -read -ra APP_CMD <<< "${DATACRUMBS_COMPOSE_RUN_APP}" +read -ra APP_CMD <<<"${DATACRUMBS_COMPOSE_RUN_APP}" # Load environment source "$SCRIPT_DIR/datacrumbs_setup" +if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSABLE_NAME}"; then + error "Invalid composable name: ${DATACRUMBS_COMPOSABLE_NAME}" + exit 1 +fi + check_regular_user log "Running cmd: ${APP_CMD[*]} as USER = $DATACRUMBS_USER using composable $DATACRUMBS_COMPOSABLE_NAME" if [[ -z "$DRY_RUN" ]]; then - datacrumbs_init "$DATACRUMBS_USER" "$DATACRUMBS_TRACE_DIR" + datacrumbs_init "$DATACRUMBS_USER" "$DATACRUMBS_TRACE_DIR" fi -RUNID=${!DATACRUMBS_JOB_ID_VAR} -RUNID=${RUNID:-1000} -DATACRUMBS_LOG_FILE=${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${RUNID}.log -READY_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_${RUNID}.ready" -debug "RUNID: $RUNID" +debug "DATACRUMBS_SERVER_RUN_ID: $DATACRUMBS_SERVER_RUN_ID" debug "DATACRUMBS_JOB_ID_VAR: $DATACRUMBS_JOB_ID_VAR" debug "value DATACRUMBS_JOB_ID_VAR: ${!DATACRUMBS_JOB_ID_VAR}" debug "DATACRUMBS_LOG_FILE: $DATACRUMBS_LOG_FILE" -debug "READY_FILE: $READY_FILE" +debug "DATACRUMBS_SERVER_READY_FILE: $DATACRUMBS_SERVER_READY_FILE" + exec=("${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_compose_wrapper" "${DATACRUMBS_COMPOSABLE_NAME}") debug "Starting datacrumbs server with exec: ${exec[*]}" datacrumbs_start_server "${exec[*]}" @@ -86,11 +92,11 @@ log "Finished App" debug "Stopping datacrumbs server with exec: ${exec[*]}" datacrumbs_stop_server "${exec[*]}" $PROG_NAME if [[ "$DRY_RUN" == "1" ]]; then - debug "[DRY_RUN] Would print datacrumbs status" - debug "[DRY_RUN] Would finalize datacrumbs for user: $DATACRUMBS_USER" + debug "[DRY_RUN] Would print datacrumbs status" + debug "[DRY_RUN] Would finalize datacrumbs for user: $DATACRUMBS_USER" else - debug "Printing datacrumbs status" - datacrumbs_print_status - debug "Finalizing datacrumbs for user: $DATACRUMBS_USER" - datacrumbs_finalize "$DATACRUMBS_USER" + debug "Printing datacrumbs status" + datacrumbs_print_status + debug "Finalizing datacrumbs for user: $DATACRUMBS_USER" + datacrumbs_finalize "$DATACRUMBS_USER" fi diff --git a/scripts/datacrumbs/datacrumbs_compose_wrapper.in b/scripts/datacrumbs/datacrumbs_compose_wrapper.in index a4cac7ac..6940b393 100755 --- a/scripts/datacrumbs/datacrumbs_compose_wrapper.in +++ b/scripts/datacrumbs/datacrumbs_compose_wrapper.in @@ -12,4 +12,9 @@ check_sudo_user DATACRUMBS_COMPOSABLE_NAME=$1 shift -${DATACRUMBS_CLIENT_BIN}/datacrumbs_${DATACRUMBS_COMPOSABLE_NAME} $@ \ No newline at end of file +if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSABLE_NAME}"; then + error "Invalid composable name: ${DATACRUMBS_COMPOSABLE_NAME}" + exit 1 +fi + +${DATACRUMBS_CLIENT_BIN}/datacrumbs_${DATACRUMBS_COMPOSABLE_NAME} $@ diff --git a/scripts/datacrumbs/datacrumbs_create_log_dir.in b/scripts/datacrumbs/datacrumbs_create_log_dir.in index de9b5c58..03a91693 100755 --- a/scripts/datacrumbs/datacrumbs_create_log_dir.in +++ b/scripts/datacrumbs/datacrumbs_create_log_dir.in @@ -6,20 +6,30 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Check if datacrumbs_args exists in scripts directory if [[ ! -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - echo "Error: datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi # Source argument parser source "$SCRIPT_DIR/datacrumbs_args" -dc_args_init "DATACRUMBS" -dc_args_parse "DATACRUMBS" "datacrumbs_run" "$@" +APP="DATACRUMBS_CREATE_LOG_DIR" +dc_args_init "$APP" +# If --help was requested, show help using the already-registered spec and exit +for __dc_a in "$@"; do + [[ "$__dc_a" == "--" ]] && break + if [[ "$__dc_a" == "--help" ]]; then + dc_args_show_help "$APP" "datacrumbs_create_log_dir" + exit 0 + fi +done + +dc_args_parse "$APP" "datacrumbs_create_log_dir" "$@" if [[ $? -ne 0 ]]; then - echo "Error: Argument parsing failed." - show_help - exit 1 + echo "Error: Argument parsing failed." + show_help + exit 1 fi PROG_NAME=$(basename "$0") @@ -29,4 +39,4 @@ source $SCRIPT_DIR/datacrumbs_setup check_install_user mkdir -p $DATACRUMBS_TRACE_DIR -log "Created log directory: $DATACRUMBS_TRACE_DIR" \ No newline at end of file +log "Created log directory: $DATACRUMBS_TRACE_DIR" diff --git a/scripts/datacrumbs/datacrumbs_logging.in b/scripts/datacrumbs/datacrumbs_logging.in index ca34d473..a93db94b 100755 --- a/scripts/datacrumbs/datacrumbs_logging.in +++ b/scripts/datacrumbs/datacrumbs_logging.in @@ -3,27 +3,67 @@ set -eo pipefail log() { - if [[ "${QUIET:-0}" == "0" ]]; then - printf "[INFO $(date '+%Y-%m-%d %H:%M:%S')] $@" - printf "\n" - fi + if [[ "${QUIET:-0}" == "0" ]]; then + printf "[INFO $(date '+%Y-%m-%d %H:%M:%S')] $@" + printf "\n" + fi } debug() { - if [[ "${VERBOSE:-0}" == "1" ]] && [[ "${QUIET:-1}" == "0" ]]; then - printf "[DEBUG $(date '+%Y-%m-%d %H:%M:%S')] $@" - printf "\n" - fi + if [[ "${VERBOSE:-0}" == "1" ]] && [[ "${QUIET:-1}" == "0" ]]; then + printf "[DEBUG $(date '+%Y-%m-%d %H:%M:%S')] $@" + printf "\n" + fi } error() { - printf "[ERROR $(date '+%Y-%m-%d %H:%M:%S')] $@" >&2 - printf "\n" >&2 + printf "[ERROR $(date '+%Y-%m-%d %H:%M:%S')] $@" >&2 + printf "\n" >&2 } warn() { - if [[ "${QUIET:-1}" != "" ]] && [[ "${QUIET:-1}" == "0" ]]; then - printf "[WARN $(date '+%Y-%m-%d %H:%M:%S')] $@" >&2 - printf "\n" >&2 - fi + if [[ "${QUIET:-1}" != "" ]] && [[ "${QUIET:-1}" == "0" ]]; then + printf "[WARN $(date '+%Y-%m-%d %H:%M:%S')] $@" >&2 + printf "\n" >&2 + fi +} + +log_system() { + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] $@" + else + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S')] $@" + fi +} + +log_user() { + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + flux job raise --severity=7 ${FLUX_JOB_ID} "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] $@" + else + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S')] $@" + fi +} + +warn_user() { + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then + logger "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] $@" + else + logger "[WARN $(date '+%Y-%m-%d %H:%M:%S')] $@" + fi +} + +error_user() { + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then + logger "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] $@" + else + logger "[ERROR $(date '+%Y-%m-%d %H:%M:%S')] $@" + fi } diff --git a/scripts/datacrumbs/datacrumbs_run.in b/scripts/datacrumbs/datacrumbs_run.in index 9c22eff2..4c19fe08 100755 --- a/scripts/datacrumbs/datacrumbs_run.in +++ b/scripts/datacrumbs/datacrumbs_run.in @@ -6,8 +6,8 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Check if datacrumbs_args exists in scripts directory if [[ ! -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - echo "Error: datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi # Source argument parser @@ -20,18 +20,18 @@ dc_args_add_option "DATACRUMBS" "nodes" "OPTIONAL" "Set number of nodes" "int" " dc_args_add_option "DATACRUMBS" "ppn" "OPTIONAL" "Set processes per node" "int" "1" dc_args_add_subcommand "DATACRUMBS" "enable_mpi" "1" "nodes" "ppn" -dc_args_parse "DATACRUMBS" "datacrumbs_run" "$@" +dc_args_parse "DATACRUMBS" "datacrumbs_run" "$@" || true if [[ $? -ne 0 ]]; then - echo "Error: Argument parsing failed." - dc_args_show_help "DATACRUMBS" "datacrumbs_run" - exit 1 + echo "Error: Argument parsing failed." + dc_args_show_help "DATACRUMBS" "datacrumbs_run" + exit 1 fi if [[ -z "${DATACRUMBS_APP}" ]]; then - echo "Error: APP command is required." - dc_args_show_help "DATACRUMBS" "datacrumbs_run" - exit 1 + echo "Error: APP command is required." + dc_args_show_help "DATACRUMBS" "datacrumbs_run" + exit 1 fi export DATACRUMBS_JOB_ENABLE_MPI=${DATACRUMBS_ENABLE_MPI:-0} @@ -39,7 +39,7 @@ export DATACRUMBS_JOB_NODES=${DATACRUMBS_NODES:-1} export DATACRUMBS_JOB_PPN=${DATACRUMBS_PPN:-1} # Convert APP_CMD string into array, splitting on spaces -read -ra APP_CMD <<< "${DATACRUMBS_APP}" +read -ra APP_CMD <<<"${DATACRUMBS_APP}" PROG_NAME=$(basename "$0") @@ -47,29 +47,39 @@ source $SCRIPT_DIR/datacrumbs_setup check_regular_user +# Build args to pass to server scripts +server_args=() +if [[ "${DATACRUMBS_JOB_ENABLE_MPI}" == "1" ]]; then + server_args+=("--enable-mpi") + server_args+=("--nodes" "${DATACRUMBS_JOB_NODES}") + server_args+=("--ppn" "${DATACRUMBS_JOB_PPN}") +fi +if [[ "${VERBOSE:-0}" == "1" ]]; then + server_args+=("--verbose") +fi +if [[ "${QUIET:-0}" == "1" ]]; then + server_args+=("--quiet") +fi +if [[ "${DRY_RUN:-0}" == "1" ]]; then + server_args+=("--dry-run") +fi +SERVER_RUN_BIN=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs_server_run.sh +SERVER_STOP_BIN=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs_server_stop.sh -RUNID=${!DATACRUMBS_JOB_ID_VAR} -RUNID=${RUNID:-1000} -DATACRUMBS_LOG_FILE=${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${RUNID}.log -READY_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_${RUNID}.ready" -debug "RUNID: $RUNID" -debug "DATACRUMBS_JOB_ID_VAR: $DATACRUMBS_JOB_ID_VAR" -debug "value DATACRUMBS_JOB_ID_VAR: ${!DATACRUMBS_JOB_ID_VAR}" -debug "DATACRUMBS_LOG_FILE: $DATACRUMBS_LOG_FILE" -debug "READY_FILE: $READY_FILE" -datacrumbs_init $DATACRUMBS_USER $DATACRUMBS_TRACE_DIR - - -echo "Running cmd: ${APP_CMD[*]} as USER = $DATACRUMBS_USER and storing traces in $DATACRUMBS_TRACE_DIR and log file $DATACRUMBS_LOG_FILE" -datacrumbs_start_server @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs - +echo "Starting DataCrumbs server via: $SERVER_RUN_BIN ${server_args[*]}" +sudo "$SERVER_RUN_BIN" "${server_args[@]}" +if [[ $? -ne 0 ]]; then + echo "Error: Failed to start DataCrumbs server" + exit 1 +fi log "Running App: ${APP_CMD[*]}" job_launch "${APP_CMD[@]}" log "Finished App" -datacrumbs_stop_server @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs $PROG_NAME - -datacrumbs_print_status - -datacrumbs_finalize $DATACRUMBS_USER $DATACRUMBS_TRACE_DIR +echo "Stopping DataCrumbs server via: $SERVER_STOP_BIN ${server_args[*]}" +sudo "$SERVER_STOP_BIN" "${server_args[@]}" +if [[ $? -ne 0 ]]; then + echo "Error: Failed to stop DataCrumbs server" + exit 1 +fi diff --git a/scripts/datacrumbs/datacrumbs_run_validator.in b/scripts/datacrumbs/datacrumbs_run_validator.in index 95214cb3..e3c8917b 100755 --- a/scripts/datacrumbs/datacrumbs_run_validator.in +++ b/scripts/datacrumbs/datacrumbs_run_validator.in @@ -4,6 +4,14 @@ set -eo pipefail SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ +# Source argument parser +source "$SCRIPT_DIR/datacrumbs_args" + +dc_args_init "DATACRUMBS_VALIDATOR" +dc_args_add_subcommand "DATACRUMBS_VALIDATOR" "enable_mpi" "1" "nodes" "ppn" + +dc_args_parse "DATACRUMBS_VALIDATOR" "datacrumbs_run_validator" "$@" + source $SCRIPT_DIR/datacrumbs_setup check_root_user @@ -23,4 +31,4 @@ log "Running compact.sh..." chown @DATACRUMBS_INSTALL_USER@:@DATACRUMBS_INSTALL_USER@ * -log "Script completed." \ No newline at end of file +log "Script completed." diff --git a/scripts/datacrumbs/datacrumbs_salloc.in b/scripts/datacrumbs/datacrumbs_salloc.in new file mode 100755 index 00000000..bf8533e4 --- /dev/null +++ b/scripts/datacrumbs/datacrumbs_salloc.in @@ -0,0 +1,117 @@ +#!/bin/bash + +function usage() { + echo "Usage: $0 [SLURM_OPTIONS] [--datacrumbs-composite NAME]" + echo "" + echo "Datacrumbs salloc wrapper - adds datacrumbs metadata to enable Datacrumbs" + echo "" + echo "DATACRUMBS-SPECIFIC OPTIONS:" + echo " --datacrumbs-composite NAME Set a custom name for job tracking" + echo " (default: NONE)" + echo " --datacrumbs-enable Enable datacrumbs tracking" + echo "" + echo "NOTE" + echo " * The --comment flag is reserved for internal use" + echo "" + echo "EXAMPLES:" + echo " $0 -N 2 -p compute" + echo " $0 --datacrumbs-enable --datacrumbs-composite xfs_pagecache -N 1" + echo " $0 --datacrumbs-enable -t 1:00:00" + echo "" + echo "For comprehensive SLURM options, run: salloc -h" + exit 1 +} + +source @DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_setup + +DATACRUMBS_DRY_RUN=${DATACRUMBS_INPUT_DRY_RUN:-"no"} +if [[ ${DATACRUMBS_DRY_RUN} == "yes" ]]; then + warn_user "Dry run enabled" +fi + +# NOTE: must maintain a set of salloc to handle differently +# SALLOC_FLAGS=( comment: h help: ) +# NOTE: This is a placeholder to automatically generate the flag parsing +# right now it just keeps track of which flags to handle internally +# we probably don't need the getopt parsing since we are not overriding any salloc flags +# DATACRUMBS_FLAGS=(datacrumbs-composite datacrumbs-enable) +# EXCEPTION_FLAGS=(comment) +# SHORT_FLAG=$(printf '%s' "${SALLOC_FLAGS[@]//*:/}") +# LONG_FLAG=$( +# IFS=, +# echo "${SALLOC_FLAGS[*]}" ) +# PARSED=$(getopt -o "${SHORT_FLAG}" -l "${LONG_FLAG}" -n "$0" -- "$@") +# [[ $? -ne 0 ]] && echo "Parsing flags error " && exit 1 +# eval set -- "$PARSED" + +DATACRUMBS_ARGS=() +unset USER_COMMENT USER_COMPOSE +USER_ENABLE="no" +USER_COMPOSE=$(get_default_datacrumbs_composite_name) + +while [[ $# -gt 0 ]]; do + case "$1" in + # NOTE: have to manually add for each exception flag + --comment) + error "The system has disabled comments feature" + exit 1 + ;; + # NOTE: have to manually add for each internal flag + --datacrumbs-composite) + USER_COMPOSE=$2 + shift 2 + ;; + # NOTE: have to manually add for each internal flag + --datacrumbs-enable) + USER_ENABLE="yes" + shift 1 + ;; + --) + shift + break + ;; + -h | --help) usage ;; + *) + DATACRUMBS_ARGS+=("$1") + shift + ;; + esac +done +DATACRUMBS_ARGS+=("$@") + +if [[ -n "${USER_COMPOSE}" ]] && [[ "${USER_COMPOSE}" != "NONE" ]] && ! validate_datacrumbs_composite_name "${USER_COMPOSE}"; then + error "Not a valid datacrumbs composite name: ${USER_COMPOSE}" + exit 1 +fi + +USER_COMPOSE="${USER_COMPOSE// /}" +if [[ -z "${USER_COMPOSE}" ]]; then + USER_COMPOSE=$(get_default_datacrumbs_composite_name) +fi + +DATACRUMBS_COMPOSABLE_NAME="${USER_COMPOSE}" +DATACRUMBS_ENABLED="${USER_ENABLE}" + +DATACRUMBS_INPUTS=$(jq -n -c \ + --arg enable "${DATACRUMBS_ENABLED}" \ + --arg composite "${DATACRUMBS_COMPOSABLE_NAME}" \ + '{datacrumbs: {enable: $enable, composite: $composite}}') +# INFO: Validating JSON +echo "${DATACRUMBS_INPUTS}" | jq . || { + error "Invalid JSON: ${DATACRUMBS_INPUTS}" + exit 1 +} + +# INFO: Add the datacrumbs metadata as a comment +DATACRUMBS_ARGS+=(--comment "${DATACRUMBS_INPUTS}") + +info "Datacrumbs inputs: ${DATACRUMBS_INPUTS}" +info "Datacrumbs args: ${DATACRUMBS_ARGS[*]}" +if [[ ${DATACRUMBS_DRY_RUN} == "yes" ]]; then + info "Dry run enabled, exiting before salloc" + info "salloc ${DATACRUMBS_ARGS[*]}" + exit 0 +fi + +info "salloc ${DATACRUMBS_ARGS[*]}" +exec salloc "${DATACRUMBS_ARGS[@]}" diff --git a/scripts/datacrumbs/datacrumbs_server_run.sh.in b/scripts/datacrumbs/datacrumbs_server_run.sh.in index 43fd2c1c..6960ff72 100755 --- a/scripts/datacrumbs/datacrumbs_server_run.sh.in +++ b/scripts/datacrumbs/datacrumbs_server_run.sh.in @@ -6,15 +6,15 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Check if datacrumbs_args exists in scripts directory if [[ ! -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - echo "Error: datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi # Source argument parser source "$SCRIPT_DIR/datacrumbs_args" dc_args_init "DATACRUMBS" -dc_args_add_option "DATACRUMBS" "composite-name" "OPTIONAL" "Composable name" "string" +dc_args_add_option "DATACRUMBS" "composite-name" "OPTIONAL" "Composable name" "string" "$DATACRUMBS_COMPOSABLE_NAME" dc_args_add_option "DATACRUMBS" "enable-mpi" "OPTIONAL" "switch to enable MPI" "bool" "0" dc_args_add_option "DATACRUMBS" "nodes" "OPTIONAL" "Set number of nodes" "int" "1" dc_args_add_option "DATACRUMBS" "ppn" "OPTIONAL" "Set processes per node" "int" "1" @@ -23,9 +23,9 @@ dc_args_add_subcommand "DATACRUMBS" "enable-mpi" "1" "nodes" "ppn" dc_args_parse "DATACRUMBS" "datacrumbs_run" "$@" if [[ $? -ne 0 ]]; then - echo "Error: Argument parsing failed." - show_help - exit 1 + echo "Error: Argument parsing failed." + show_help + exit 1 fi export DATACRUMBS_JOB_ENABLE_MPI=${DATACRUMBS_ENABLE_MPI:-0} @@ -37,31 +37,26 @@ PROG_NAME=$(basename "$0") source $SCRIPT_DIR/datacrumbs_setup if [[ "$DATACRUMBS_COMPOSITE_NAME" != "" ]] && [[ "$DATACRUMBS_COMPOSITE_NAME" != "NONE" ]]; then - if [[ ! -f "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${DATACRUMBS_COMPOSITE_NAME}" ]]; then - error "Composite ${DATACRUMBS_COMPOSITE_NAME} not found for ${DATACRUMBS_USER}" - exit 1 - fi + if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSITE_NAME}"; then + error "Invalid composable name: ${DATACRUMBS_COMPOSITE_NAME}" + exit 1 + fi fi - check_sudo_user -RUNID=${!DATACRUMBS_JOB_ID_VAR} -RUNID=${RUNID:-1000} -DATACRUMBS_LOG_FILE=${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${RUNID}.log -READY_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_${RUNID}.ready" -debug "RUNID: $RUNID" +debug "DATACRUMBS_SERVER_RUN_ID: $DATACRUMBS_SERVER_RUN_ID" debug "DATACRUMBS_JOB_ID_VAR: $DATACRUMBS_JOB_ID_VAR" debug "value DATACRUMBS_JOB_ID_VAR: ${!DATACRUMBS_JOB_ID_VAR}" debug "DATACRUMBS_LOG_FILE: $DATACRUMBS_LOG_FILE" -debug "READY_FILE: $READY_FILE" +debug "DATACRUMBS_SERVER_READY_FILE: $DATACRUMBS_SERVER_READY_FILE" log "Running as USER = $DATACRUMBS_USER and storing traces in $DATACRUMBS_TRACE_DIR and log file $DATACRUMBS_LOG_FILE" datacrumbs_init $DATACRUMBS_USER $DATACRUMBS_TRACE_DIR exec=() if [[ "$DATACRUMBS_COMPOSITE_NAME" != "" ]] && [[ "$DATACRUMBS_COMPOSITE_NAME" != "NONE" ]]; then - exec=("${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_compose_wrapper" "${DATACRUMBS_COMPOSITE_NAME}") + exec=("${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_compose_wrapper" "${DATACRUMBS_COMPOSITE_NAME}") else - exec=(@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs) + exec=(@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs) fi datacrumbs_start_server "${exec[*]}" diff --git a/scripts/datacrumbs/datacrumbs_server_stop.sh.in b/scripts/datacrumbs/datacrumbs_server_stop.sh.in index e39ea18d..296c4590 100755 --- a/scripts/datacrumbs/datacrumbs_server_stop.sh.in +++ b/scripts/datacrumbs/datacrumbs_server_stop.sh.in @@ -6,15 +6,15 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Check if datacrumbs_args exists in scripts directory if [[ ! -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - echo "Error: datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi # Source argument parser source "$SCRIPT_DIR/datacrumbs_args" dc_args_init "DATACRUMBS" -dc_args_add_option "DATACRUMBS" "composite-name" "OPTIONAL" "Composable name" "string" +dc_args_add_option "DATACRUMBS" "composite-name" "OPTIONAL" "Composable name" "string" "$DATACRUMBS_COMPOSABLE_NAME" dc_args_add_option "DATACRUMBS" "enable-mpi" "OPTIONAL" "switch to enable MPI" "bool" "0" dc_args_add_option "DATACRUMBS" "nodes" "OPTIONAL" "Set number of nodes" "int" "1" dc_args_add_option "DATACRUMBS" "ppn" "OPTIONAL" "Set processes per node" "int" "1" @@ -23,50 +23,43 @@ dc_args_add_subcommand "DATACRUMBS" "enable-mpi" "1" "nodes" "ppn" dc_args_parse "DATACRUMBS" "datacrumbs_run" "$@" if [[ $? -ne 0 ]]; then - echo "Error: Argument parsing failed." - show_help - exit 1 + echo "Error: Argument parsing failed." + show_help + exit 1 fi export DATACRUMBS_JOB_ENABLE_MPI=${DATACRUMBS_ENABLE_MPI:-0} export DATACRUMBS_JOB_NODES=${DATACRUMBS_NODES:-1} export DATACRUMBS_JOB_PPN=${DATACRUMBS_PPN:-1} - PROG_NAME=$(basename "$0") source $SCRIPT_DIR/datacrumbs_setup if [[ "$DATACRUMBS_COMPOSITE_NAME" != "" ]] && [[ "$DATACRUMBS_COMPOSITE_NAME" != "NONE" ]]; then - if [[ ! -f "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${DATACRUMBS_COMPOSITE_NAME}" ]]; then - error "Composite ${DATACRUMBS_COMPOSITE_NAME} not found for ${DATACRUMBS_USER}" - exit 1 - fi + if [[ ! -f "${DATACRUMBS_CLIENT_BIN}/datacrumbs_${DATACRUMBS_COMPOSITE_NAME}" ]]; then + error "Composite ${DATACRUMBS_COMPOSITE_NAME} not found for ${DATACRUMBS_USER}" + exit 1 + fi fi # Convert APP_CMD string into array, splitting on spaces -read -ra APP_CMD <<< "${DATACRUMBS_APP}" - +read -ra APP_CMD <<<"${DATACRUMBS_APP}" check_sudo_user - -RUNID=${!DATACRUMBS_JOB_ID_VAR} -RUNID=${RUNID:-1000} -DATACRUMBS_LOG_FILE=${DATACRUMBS_LOG_DIR:-/tmp}/datacrumbs_${DATACRUMBS_USER}_${RUNID}.log -READY_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_${RUNID}.ready" -debug "RUNID: $RUNID" +debug "DATACRUMBS_SERVER_RUN_ID: $DATACRUMBS_SERVER_RUN_ID" debug "DATACRUMBS_JOB_ID_VAR: $DATACRUMBS_JOB_ID_VAR" debug "value DATACRUMBS_JOB_ID_VAR: ${!DATACRUMBS_JOB_ID_VAR}" debug "DATACRUMBS_LOG_FILE: $DATACRUMBS_LOG_FILE" -debug "READY_FILE: $READY_FILE" +debug "DATACRUMBS_SERVER_READY_FILE: $DATACRUMBS_SERVER_READY_FILE" echo "Running cmd: ${APP_CMD[*]} as USER = $DATACRUMBS_USER and storing traces in $DATACRUMBS_TRACE_DIR and log file $DATACRUMBS_LOG_FILE" exec=() if [[ "$DATACRUMBS_COMPOSITE_NAME" != "" ]] && [[ "$DATACRUMBS_COMPOSITE_NAME" != "NONE" ]]; then - exec=("${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_compose_wrapper" "${DATACRUMBS_COMPOSITE_NAME}") + exec=("${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_compose_wrapper" "${DATACRUMBS_COMPOSITE_NAME}") else - exec=(@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs) + exec=(@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs) fi datacrumbs_stop_server "${exec[*]}" $PROG_NAME diff --git a/scripts/datacrumbs/datacrumbs_service_common.sh.in b/scripts/datacrumbs/datacrumbs_service_common.sh.in index 1726021e..98c9e595 100755 --- a/scripts/datacrumbs/datacrumbs_service_common.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_common.sh.in @@ -2,42 +2,141 @@ set -e pipefail -FLUX_DATACRUMBS=$(flux job info $FLUX_JOB_ID jobspec | jq -r .attributes.system.datacrumbs) +source @DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_setup -warn_user() { - ## post exception to flux log, cancel job - flux job raise --severity=1 ${FLUX_JOB_ID} "datacrumbs-prolog: $@" +function get_general_datacrumbs_enabled() { + local enabled=${DATACRUMBS_ENABLED:-0} + enabled_value="no" + if [[ "${enabled}" -eq "1" ]]; then + enabled_value="yes" + fi + log_system "get_general_datacrumbs_enabled returned enabled:${enabled_value}" + echo "${enabled_value}" } -if [[ ${FLUX_DATACRUMBS} == "null" ]]; then - logger "User hasn't requested datacrumbs feature, exiting." - return 1 -fi -FLUX_DATACRUMBS=$(flux job info $FLUX_JOB_ID jobspec | jq -r .attributes.system.datacrumbs.enable) -if [[ ${FLUX_DATACRUMBS} == "null" || "${FLUX_DATACRUMBS}" != "yes" ]]; then - logger "User hasn't requested datacrumbs feature, exiting." - return 1 -fi - -FLUX_DATACRUMBS_COMPOSE=$(flux job info $FLUX_JOB_ID jobspec | jq -r .attributes.system.datacrumbs.composite) -if [[ ${FLUX_DATACRUMBS_COMPOSE} == "null" || ${FLUX_DATACRUMBS_COMPOSE} == "" ]]; then - DATACRUMBS_COMPOSABLE_NAME="NONE" - logger "User hasn't requested datacrumbs' composite feature using ${DATACRUMBS_COMPOSABLE_NAME}." -else - DATACRUMBS_COMPOSABLE_NAME=${FLUX_DATACRUMBS_COMPOSE} - if [[ -n "$FLUX_JOB_USERID" ]]; then - DATACRUMBS_USER=$(id -nu $FLUX_JOB_USERID) +function get_flux_datacrumbs_enabled() { + local enabled=$(flux job info $FLUX_JOB_ID jobspec 2>/dev/null | jq -r .attributes.system.datacrumbs 2>/dev/null) + enabled_value="no" + if [[ ${enabled} == "null" ]]; then + log_system "User hasn't requested datacrumbs feature enabled:${enabled}, exiting." + else + FLUX_DATACRUMBS=$(flux job info $FLUX_JOB_ID jobspec 2>/dev/null | jq -r .attributes.system.datacrumbs.enable 2>/dev/null) + if [[ ${FLUX_DATACRUMBS} == "null" || "${FLUX_DATACRUMBS}" != "yes" ]]; then + log_system "User hasn't requested datacrumbs feature FLUX_DATACRUMBS:${FLUX_DATACRUMBS}, exiting." + else + enabled_value="yes" fi - if [[ ! -f "@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/@PROJECT_NAME@/@CMAKE_INSTALL_SBINDIR@/${DATACRUMBS_USER}/datacrumbs_${DATACRUMBS_COMPOSABLE_NAME}" ]]; then - warn_user "Error: Composable name ${DATACRUMBS_COMPOSABLE_NAME} does not exist." - return 1 + fi + log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" + echo "${enabled_value}" +} + +function get_slurm_comment() { + local slurm_job_comment=$(scontrol show job $SLURM_JOB_ID | grep -i comment | awk -F'=' '{print $2}') + echo $slurm_job_comment +} + +function get_slurm_datacrumbs_enabled() { + enabled_value="no" + local slurm_job_comment=$(get_slurm_comment) + # NOTE: If SLURM_JOB_COMMENT which is a JSON + # of format {datacrumbs: {enable: "yes|no", composite: name}}. + # says datacrumbs enable is yes, else remains the same. + if [[ $(echo ${slurm_job_comment} | jq -r .datacrumbs.enable 2>/dev/null) == "yes" ]]; then + enabled_value="yes" + fi + log_system "get_slurm_datacrumbs_enabled returned enabled:${enabled_value}" + echo "${enabled_value}" +} + +function get_datacrumbs_enabled() { + local enabled="no" + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + enabled=$(get_flux_datacrumbs_enabled) + elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then + local slurm_job_comment=$(get_slurm_comment) + log_system "Slurm comment: $slurm_job_comment" + enabled=$(get_slurm_datacrumbs_enabled) + else + enabled=$(get_general_datacrumbs_enabled) + fi + log_system "get_datacrumbs_enabled returned enabled:${enabled}" + echo "${enabled}" +} + +function get_flux_datacrumbs_composite_name() { + local composite_name=$(flux job info $FLUX_JOB_ID jobspec | jq -r .attributes.system.datacrumbs.composite 2>/dev/null) + if [[ ${composite_name} == "null" || ${composite_name} == "" ]]; then + log_system "User hasn't requested datacrumbs' composite feature using ${composite_name}.""ERROR" + else + log_system "User has requested datacrumbs' composite feature using ${composite_name}." + fi + log_system "get_flux_datacrumbs_composite_name returned composite_name:${composite_name}" + echo "${composite_name}" +} + +function get_slurm_datacrumbs_composite_name() { + local composite_name=$(get_default_datacrumbs_composite_name) + local slurm_job_comment=$(get_slurm_comment) + local slurm_composite="$(echo ${slurm_job_comment} | jq -r .datacrumbs.composite 2>/dev/null)" + if [[ + ${slurm_composite} == "" || + ${slurm_composite} == "NONE" || + ${slurm_composite} == "null" || + ${slurm_composite} == $(get_default_datacrumbs_composite_name) ]] \ + ; then + log_system "User hasn't requested datacrumbs' composite feature using ${composite_name}" + else + log_system "User has requested datacrumbs' composite feature using ${composite_name}." + fi + log_system "get_slurm_datacrumbs_composite_name returned composite_name:${composite_name}" + echo "${composite_name}" +} + +function get_general_datacrumbs_composite_name() { + local composite_name=$(get_default_datacrumbs_composite_name) + if [[ ${DATACRUMBS_COMPOSITE_NAME} == "null" || ${composite_name} == "" ]]; then + log_system "User hasn't requested datacrumbs' composite feature using ${composite_name}." + else + log_system "User has requested datacrumbs' composite feature using ${composite_name}." + fi + log_system "get_general_datacrumbs_composite_name returned composite_name:${composite_name}" + echo "${composite_name}" +} + +function get_datacrumbs_composite_name() { + local name=$(get_default_datacrumbs_composite_name) + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + name=$(get_flux_datacrumbs_composite_name) + elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then + name=$(get_slurm_datacrumbs_composite_name) + else + name=$(get_general_datacrumbs_composite_name) + fi + if [[ "${name}" != "$(get_default_datacrumbs_composite_name)" && "${name}" != "ERROR" ]]; then + if ! validate_datacrumbs_composite_name "${name}"; then + name="ERROR" fi - logger "User has requested datacrumbs' composite feature using ${DATACRUMBS_COMPOSABLE_NAME}." -fi + fi + log_system "get_datacrumbs_composite_name returned name:${name}" + echo "${name}" +} -if [[ ! ${DATACRUMBS_COMPOSABLE_NAME} =~ ^[a-zA-Z_]+$ ]]; then - warn_user "Error: DATACRUMBS_COMPOSABLE_NAME: ${DATACRUMBS_COMPOSABLE_NAME} contains invalid characters. Only alphabets and underscores are allowed." - return 1 +DATACRUMBS_ENABLED=$(get_datacrumbs_enabled) +if [[ "${DATACRUMBS_ENABLED}" != "yes" ]]; then + log_system "User hasn't requested datacrumbs feature, exiting." + return 1 +fi +DATACRUMBS_COMPOSABLE_NAME=$(get_datacrumbs_composite_name) +if [[ "${DATACRUMBS_COMPOSABLE_NAME}" == "ERROR" ]]; then + return 1 +fi +if [[ "${DATACRUMBS_COMPOSABLE_NAME}" == "$(get_default_datacrumbs_composite_name)" ]]; then + log_user "Running system datacrumbs" +else + log_user "Running a composite datacrumbs with name: ${DATACRUMBS_COMPOSABLE_NAME}" fi -export DATACRUMBS_COMPOSABLE_NAME \ No newline at end of file +readonly DATACRUMBS_COMPOSABLE_NAME +export DATACRUMBS_COMPOSABLE_NAME +export DATACRUMBS_USER diff --git a/scripts/datacrumbs/datacrumbs_service_run.sh.in b/scripts/datacrumbs/datacrumbs_service_run.sh.in index d49b083d..82044695 100755 --- a/scripts/datacrumbs/datacrumbs_service_run.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_run.sh.in @@ -4,9 +4,9 @@ set -e pipefail source @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_service_common.sh if [[ $? -eq 0 ]]; then - umask 022 - printenv > /run/datacrumbs.env - echo datacrumbs_service_run "Starting datacrumbs service run script on job ${FLUX_JOB_ID}" - sudo systemctl start datacrumbs@$DATACRUMBS_COMPOSABLE_NAME.service + umask 022 + printenv >/run/datacrumbs.env + echo datacrumbs_service_run "Starting datacrumbs service run script on job ${DATACRUMBS_SERVER_RUN_ID}" + sudo systemctl start datacrumbs@${DATACRUMBS_SERVER_RUN_ID}.service fi -exit 0 \ No newline at end of file +exit 0 diff --git a/scripts/datacrumbs/datacrumbs_service_stop.sh.in b/scripts/datacrumbs/datacrumbs_service_stop.sh.in index f7cf54a4..43174611 100755 --- a/scripts/datacrumbs/datacrumbs_service_stop.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_stop.sh.in @@ -4,7 +4,7 @@ set -e pipefail source @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_service_common.sh if [[ $? -eq 0 ]]; then - sudo systemctl stop datacrumbs@$DATACRUMBS_COMPOSABLE_NAME.service + sudo systemctl stop datacrumbs@${DATACRUMBS_SERVER_RUN_ID}.service + sudo rm ${DATACRUMBS_SERVER_ENV_FILE} fi exit 0 - diff --git a/scripts/datacrumbs/datacrumbs_setup.in b/scripts/datacrumbs/datacrumbs_setup.in index abfb3b12..b8987134 100755 --- a/scripts/datacrumbs/datacrumbs_setup.in +++ b/scripts/datacrumbs/datacrumbs_setup.in @@ -3,62 +3,71 @@ set -eo pipefail if [[ -z "${BASH_VERSION}" ]]; then - error "This script requires bash" - exit 1 + error "This script requires bash" + exit 1 fi SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ CONFIG_FILE=@DATACRUMBS_INSTALL_ETC_CONFIGSDIR@/project.env.local - source ${SCRIPT_DIR}/datacrumbs_utility +if [[ "$(id -u)" != "0" ]]; then + export DATACRUMBS_IS_ROOT=0 + export DATACRUMBS_USER=$(id -un) +else + export DATACRUMBS_IS_ROOT=1 + export DATACRUMBS_USER=$SUDO_USER + if [[ -z "$DATACRUMBS_USER" ]]; then + DATACRUMBS_USER=$USER + debug "User is root." + fi + if [[ -z "$DATACRUMBS_USER" ]] || [[ "$DATACRUMBS_USER" = "root" ]]; then + DATACRUMBS_USER=$(get_actual_user) + fi +fi + +readonly DATACRUMBS_IS_ROOT +readonly DATACRUMBS_USER + if [[ "${DATACRUMBS_ENV_LOADED:-0}" == "0" ]]; then - if [[ "$(id -u)" != "0" ]]; then - export DATACRUMBS_IS_ROOT=0 - export DATACRUMBS_USER=$(id -un) - else - export DATACRUMBS_IS_ROOT=1 - export DATACRUMBS_USER=$SUDO_USER - if [[ -z "$DATACRUMBS_USER" ]]; then - DATACRUMBS_USER=$USER - debug "User is root." - fi - if [[ -z "$DATACRUMBS_USER" ]] || [[ "$DATACRUMBS_USER" = "root" ]]; then - if [[ -n "$FLUX_JOB_USERID" ]]; then - DATACRUMBS_USER=$(id -nu $FLUX_JOB_USERID) - fi - fi - fi - - readonly DATACRUMBS_IS_ROOT - readonly DATACRUMBS_USER - if command -v direnv &> /dev/null; then - eval "$(direnv exec ${CONFIG_FILE%/*} bash -c 'source ${CONFIG_FILE}; env')" - else - source ${CONFIG_FILE} - fi - log "After loading env file for $DATACRUMBS_USER" - YEAR=$(date +%y) - MONTH=$(date +%m) - DAY=$(date +%d) - export DATACRUMBS_TRACE_DIR=$(echo "$DATACRUMBS_TRACE_DIR_PATTERN" | sed "s|%YY%|$YEAR|g; s|%MM%|$MONTH|g; s|%DD%|$DAY|g") - readonly DATACRUMBS_TRACE_DIR - debug "Log directory set to $DATACRUMBS_TRACE_DIR" - export DATACRUMBS_ENV_LOADED=1 - readonly DATACRUMBS_ENV_LOADED + if command -v direnv &>/dev/null; then + eval "$(direnv exec ${CONFIG_FILE%/*} bash -c 'source ${CONFIG_FILE}; env')" + else + source ${CONFIG_FILE} + fi + log "After loading env file for $DATACRUMBS_USER" + YEAR=$(date +%y) + MONTH=$(date +%m) + DAY=$(date +%d) + export DATACRUMBS_TRACE_DIR=$(echo "$DATACRUMBS_TRACE_DIR_PATTERN" | sed "s|%YY%|$YEAR|g; s|%MM%|$MONTH|g; s|%DD%|$DAY|g") + readonly DATACRUMBS_TRACE_DIR + debug "Log directory set to $DATACRUMBS_TRACE_DIR" + + mkdir -p "${DATACRUMBS_SERVER_RUN_DIR}" 2>/dev/null + + export DATACRUMBS_ENV_LOADED=1 + readonly DATACRUMBS_ENV_LOADED + + if command -v module &>/dev/null; then + export DATACRUMBS_MODULE_AVAILABLE=1 + else + export DATACRUMBS_MODULE_AVAILABLE=0 + fi + readonly DATACRUMBS_MODULE_AVAILABLE + + eval $DATACRUMBS_SERVER_PREAMBLE - eval $DATACRUMBS_SERVER_PREAMBLE fi if [[ "$DATACRUMBS_MODULE_AVAILABLE" == "1" ]] && [[ "$DATACRUMBS_SERVER_MODULE" == "1" ]]; then - if ! module is-loaded datacrumbs/@DATACRUMBS_RELEASE_VERSION_STRING@; then - module use @DATACRUMBS_INSTALL_ETC_MODULESDIR@ - module load datacrumbs/@DATACRUMBS_RELEASE_VERSION_STRING@ - fi + if ! module is-loaded datacrumbs/@DATACRUMBS_RELEASE_VERSION_STRING@; then + module use @DATACRUMBS_INSTALL_ETC_MODULESDIR@ + module load datacrumbs/@DATACRUMBS_RELEASE_VERSION_STRING@ + fi else - export PATH="$DATACRUMBS_INSTALL_BIN_DIR:$DATACRUMBS_INSTALL_SBIN_DIR:$PATH" - export LD_LIBRARY_PATH="$DATACRUMBS_INSTALL_LIB_DIR:@DEPENDENCY_LIBRARY_DIRS_COLON@:$LD_LIBRARY_PATH" + export PATH="$DATACRUMBS_INSTALL_BIN_DIR:$DATACRUMBS_INSTALL_SBIN_DIR:$PATH" + export LD_LIBRARY_PATH="$DATACRUMBS_INSTALL_LIB_DIR:@DEPENDENCY_LIBRARY_DIRS_COLON@:$LD_LIBRARY_PATH" fi ulimit -n $(ulimit -H -n) @@ -72,4 +81,4 @@ alias datacrumbs_stop='sudo @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_stop' alias datacrumbs_compose='sudo @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_compose' alias datacrumbs_compose_discover='sudo @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_compose --action discover' alias datacrumbs_wrap='sudo @DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_wrap' -alias datacrumbs_create_log_dir='@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_create_log_dir' \ No newline at end of file +alias datacrumbs_create_log_dir='@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_create_log_dir' diff --git a/scripts/datacrumbs/datacrumbs_stop.in b/scripts/datacrumbs/datacrumbs_stop.in index 27fce534..d6b53c25 100755 --- a/scripts/datacrumbs/datacrumbs_stop.in +++ b/scripts/datacrumbs/datacrumbs_stop.in @@ -9,14 +9,13 @@ PROG_NAME=$1 # Load environment source "$SCRIPT_DIR/datacrumbs_setup" - if [[ "$DATACRUMBS_IS_ROOT" != "1" ]]; then - error "This script should be run as root." - exit 1 + error "This script should be run as root." + exit 1 fi if [[ "$PROG_NAME" == "" ]]; then - ps -aef | grep 'datacrumbs' | grep ${DATACRUMBS_USER} | awk '{print $2}' | xargs kill -9 + ps -aef | grep 'datacrumbs' | grep ${DATACRUMBS_USER} | awk '{print $2}' | xargs kill -9 else - ps -aef | grep 'datacrumbs' | grep ${DATACRUMBS_USER} | grep -v $PROG_NAME | awk '{print $2}' | xargs kill -9 -fi \ No newline at end of file + ps -aef | grep 'datacrumbs' | grep ${DATACRUMBS_USER} | grep -v $PROG_NAME | awk '{print $2}' | xargs kill -9 +fi diff --git a/scripts/datacrumbs/datacrumbs_track.in b/scripts/datacrumbs/datacrumbs_track.in index 0c622424..2f47056c 100755 --- a/scripts/datacrumbs/datacrumbs_track.in +++ b/scripts/datacrumbs/datacrumbs_track.in @@ -6,8 +6,8 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Check if datacrumbs_args exists in scripts directory if [[ ! -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - echo "Error: datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi # Source argument parser @@ -20,8 +20,8 @@ dc_args_parse "DC_TRACK" "datacrumbs_track" "$@" EXECUTABLE="$DC_TRACK_EXECUTABLE" if [[ -z "$EXECUTABLE" ]]; then - dc_args_usage "DC_TRACK" "datacrumbs_track" - exit 1 + dc_args_usage "DC_TRACK" "datacrumbs_track" + exit 1 fi source $SCRIPT_DIR/datacrumbs_setup @@ -30,35 +30,40 @@ check_regular_user log "Checking executable: $EXECUTABLE" if [[ "$DRY_RUN" == "1" ]]; then - log "[DRY RUN] Check if executable is valid: $EXECUTABLE" - MAIN_PROGRAM="$EXECUTABLE" + log "[DRY RUN] Check if executable is valid: $EXECUTABLE" + MAIN_PROGRAM="$EXECUTABLE" else - if [[ -x "$EXECUTABLE" ]]; then - MAIN_PROGRAM="$EXECUTABLE" - log "Found executable at: $MAIN_PROGRAM" - elif MAIN_PROGRAM="$(which "$EXECUTABLE" 2>/dev/null)"; [[ -x "$MAIN_PROGRAM" ]]; then - log "Found executable in PATH: $MAIN_PROGRAM" - elif MAIN_PROGRAM="$(realpath "$EXECUTABLE" 2>/dev/null)"; [[ -x "$MAIN_PROGRAM" ]]; then - log "Found executable at realpath: $MAIN_PROGRAM" - else - error "Executable '$EXECUTABLE' not found." - exit 1 - fi + if [[ -x "$EXECUTABLE" ]]; then + MAIN_PROGRAM="$EXECUTABLE" + log "Found executable at: $MAIN_PROGRAM" + elif + MAIN_PROGRAM="$(which "$EXECUTABLE" 2>/dev/null)" + [[ -x "$MAIN_PROGRAM" ]] + then + log "Found executable in PATH: $MAIN_PROGRAM" + elif + MAIN_PROGRAM="$(realpath "$EXECUTABLE" 2>/dev/null)" + [[ -x "$MAIN_PROGRAM" ]] + then + log "Found executable at realpath: $MAIN_PROGRAM" + else + error "Executable '$EXECUTABLE' not found." + exit 1 + fi fi - if [[ "$DRY_RUN" == "1" ]]; then - log "[DRY RUN] Checking for patchelf command" + log "[DRY RUN] Checking for patchelf command" else - if ! command -v patchelf >/dev/null 2>&1; then - error "'patchelf' not found. Please install it and ensure it is in your PATH." - exit 1 - fi + if ! command -v patchelf >/dev/null 2>&1; then + error "'patchelf' not found. Please install it and ensure it is in your PATH." + exit 1 + fi fi debug "Adding needed library: ${DATACRUMBS_CLIENT_LIB} to $MAIN_PROGRAM" if [[ "$DRY_RUN" == "1" ]]; then - log "[DRY RUN] Patching $MAIN_PROGRAM with patchelf --add-needed ${DATACRUMBS_CLIENT_LIB}" + log "[DRY RUN] Patching $MAIN_PROGRAM with patchelf --add-needed ${DATACRUMBS_CLIENT_LIB}" else -datacrumbs_run_command "Unable to patch $MAIN_PROGRAM" patchelf --add-needed ${DATACRUMBS_CLIENT_LIB} "$MAIN_PROGRAM" + datacrumbs_run_command "Unable to patch $MAIN_PROGRAM" patchelf --add-needed ${DATACRUMBS_CLIENT_LIB} "$MAIN_PROGRAM" fi -log "Enabling tracking of $EXECUTABLE completed." \ No newline at end of file +log "Enabling tracking of $EXECUTABLE completed." diff --git a/scripts/datacrumbs/datacrumbs_untrack.in b/scripts/datacrumbs/datacrumbs_untrack.in index b4f9dd6d..5b9f9a54 100755 --- a/scripts/datacrumbs/datacrumbs_untrack.in +++ b/scripts/datacrumbs/datacrumbs_untrack.in @@ -6,8 +6,8 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Check if datacrumbs_args exists in scripts directory if [[ ! -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - echo "Error: datacrumbs_args not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_args not found in $SCRIPT_DIR" + exit 1 fi # Source argument parser @@ -20,8 +20,8 @@ dc_args_parse "DC_UNTRACK" "datacrumbs_untrack" "$@" EXECUTABLE="$DC_UNTRACK_EXECUTABLE" if [[ -z "$EXECUTABLE" ]]; then - dc_args_show_help "DC_UNTRACK" "$@" - exit 1 + dc_args_show_help "DC_UNTRACK" "$@" + exit 1 fi source $SCRIPT_DIR/datacrumbs_setup @@ -30,37 +30,41 @@ check_regular_user log "Checking executable: $EXECUTABLE" if [[ "$DRY_RUN" == "1" ]]; then - log "[DRY RUN] Check if executable is valid: $EXECUTABLE" - MAIN_PROGRAM="$EXECUTABLE" + log "[DRY RUN] Check if executable is valid: $EXECUTABLE" + MAIN_PROGRAM="$EXECUTABLE" else - if [[ -x "$EXECUTABLE" ]]; then - MAIN_PROGRAM="$EXECUTABLE" - log "Found executable: $MAIN_PROGRAM" - elif MAIN_PROGRAM="$(which "$EXECUTABLE" 2>/dev/null)"; [[ -x "$MAIN_PROGRAM" ]]; then - log "Found executable via which: $MAIN_PROGRAM" - elif MAIN_PROGRAM="$(realpath "$EXECUTABLE" 2>/dev/null)"; [[ -x "$MAIN_PROGRAM" ]]; then - log "Found executable via realpath: $MAIN_PROGRAM" - else - error "Executable '$EXECUTABLE' not found." - exit 1 - fi + if [[ -x "$EXECUTABLE" ]]; then + MAIN_PROGRAM="$EXECUTABLE" + log "Found executable: $MAIN_PROGRAM" + elif + MAIN_PROGRAM="$(which "$EXECUTABLE" 2>/dev/null)" + [[ -x "$MAIN_PROGRAM" ]] + then + log "Found executable via which: $MAIN_PROGRAM" + elif + MAIN_PROGRAM="$(realpath "$EXECUTABLE" 2>/dev/null)" + [[ -x "$MAIN_PROGRAM" ]] + then + log "Found executable via realpath: $MAIN_PROGRAM" + else + error "Executable '$EXECUTABLE' not found." + exit 1 + fi fi - - if [[ "$DRY_RUN" == "1" ]]; then - log "[DRY RUN] Checking for patchelf command" + log "[DRY RUN] Checking for patchelf command" else - if ! command -v patchelf >/dev/null 2>&1; then - error "'patchelf' not found. Please install it and ensure it is in your PATH." - exit 1 - fi + if ! command -v patchelf >/dev/null 2>&1; then + error "'patchelf' not found. Please install it and ensure it is in your PATH." + exit 1 + fi fi debug "Removing dependency '${DATACRUMBS_CLIENT_LIB}' from '$MAIN_PROGRAM'..." if [[ "$DRY_RUN" == "1" ]]; then - log "[DRY RUN] Patching $MAIN_PROGRAM with patchelf --remove-needed ${DATACRUMBS_CLIENT_LIB}" + log "[DRY RUN] Patching $MAIN_PROGRAM with patchelf --remove-needed ${DATACRUMBS_CLIENT_LIB}" else - datacrumbs_run_command "Unable to patch $MAIN_PROGRAM" patchelf --remove-needed ${DATACRUMBS_CLIENT_LIB} "$MAIN_PROGRAM" + datacrumbs_run_command "Unable to patch $MAIN_PROGRAM" patchelf --remove-needed ${DATACRUMBS_CLIENT_LIB} "$MAIN_PROGRAM" fi -log "Disabling tracking of $EXECUTABLE completed." \ No newline at end of file +log "Disabling tracking of $EXECUTABLE completed." diff --git a/scripts/datacrumbs/datacrumbs_utility.in b/scripts/datacrumbs/datacrumbs_utility.in index bbd8adcb..80a6d122 100755 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ b/scripts/datacrumbs/datacrumbs_utility.in @@ -6,237 +6,288 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ # Load logging script if [[ -f "$SCRIPT_DIR/datacrumbs_logging" ]]; then - source "$SCRIPT_DIR/datacrumbs_logging" + source "$SCRIPT_DIR/datacrumbs_logging" else - echo "Error: datacrumbs_logging not found in $SCRIPT_DIR" - exit 1 + echo "Error: datacrumbs_logging not found in $SCRIPT_DIR" + exit 1 fi function datacrumbs_run_command() { - local err_msg="$1" - shift - if [[ "${DRY_RUN:-0}" == "1" ]]; then - log "[DRY RUN] Would run: $*" - return 0 - fi - "$@" - local status=$? - if [[ $status -ne 0 ]]; then - log "Error: $err_msg" - exit $status - fi + local err_msg="$1" + shift + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would run: $*" + return 0 + fi + "$@" + local status=$? + if [[ $status -ne 0 ]]; then + log "Error: $err_msg" + exit $status + fi } # Usage example: # datacrumbs_run_command "Failed to list directory" ls /nonexistent/path function datacrumbs_finalize() { - if [[ "${DRY_RUN:-0}" == "1" ]]; then - log "[DRY RUN] Would finalize for user: $DATACRUMBS_USER, log path: $DATACRUMBS_TRACE_DIR" - return 0 - fi + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would finalize for user: $DATACRUMBS_USER, log path: $DATACRUMBS_TRACE_DIR" + return 0 + fi } function datacrumbs_init() { - if [[ "${DRY_RUN:-0}" == "1" ]]; then - log "[DRY RUN] Would create log directory: ${DATACRUMBS_TRACE_DIR}" - return 0 - fi - if [[ ! -d "${DATACRUMBS_TRACE_DIR}" ]]; then - mkdir -p "${DATACRUMBS_TRACE_DIR}" - if [[ $? -ne 0 ]]; then - error "Failed to create trace directory: ${DATACRUMBS_TRACE_DIR}" - exit 1 - fi - chown "$DATACRUMBS_INSTALL_USER:$DATACRUMBS_INSTALL_USER" "${DATACRUMBS_TRACE_DIR}" - fi + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would create log directory: ${DATACRUMBS_TRACE_DIR}" + return 0 + fi + if [[ ! -d "${DATACRUMBS_TRACE_DIR}" ]]; then + mkdir -p "${DATACRUMBS_TRACE_DIR}" + if [[ $? -ne 0 ]]; then + error "Failed to create trace directory: ${DATACRUMBS_TRACE_DIR}" + exit 1 + fi + chown "$DATACRUMBS_INSTALL_USER:$DATACRUMBS_INSTALL_USER" "${DATACRUMBS_TRACE_DIR}" + fi } function datacrumbs_start_server() { - if [[ "$RUNID" == "1000" ]]; then - RUNID=$(date +"%Y-%m-%d-%H-%M-%S") - fi - READY_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_${RUNID}.ready" - exec=$1 - exec=($exec) - if [[ -z "$DATACRUMBS_TRACE_DIR" ]]; then - error "DATACRUMBS_TRACE_DIR is empty. Please set the trace directory." - exit 1 - fi - common_cmd=("$DATACRUMBS_INSTALL_HOST" "--user" "$DATACRUMBS_USER" "--config_path" "$DATACRUMBS_INSTALL_CONFIGS_DIR" "--data_dir" "$DATACRUMBS_INSTALL_DATA_DIR" "--trace_log_dir" "$DATACRUMBS_TRACE_DIR" --run_id "$RUNID") - cmd=("${exec[@]}" "run" "${common_cmd[@]}") - WAIT_INTERVAL=2 - ELAPSED=0 - - log "Starting Server: ${cmd[*]}" - if [[ "${DRY_RUN:-0}" == "1" ]]; then - server_launch "${cmd[@]}" - else - server_launch "${cmd[@]}" > $DATACRUMBS_LOG_FILE 2>&1 & - PID=$! - echo $PID > "$DATACRUMBS_SERVER_PID_FILE" - log "Service started with PID: $PID" - chown ${DATACRUMBS_USER}:${DATACRUMBS_USER} $DATACRUMBS_LOG_FILE - fi - - if [[ "${DRY_RUN:-0}" == "1" ]]; then - log "[DRY RUN] Would wait for ready file: $READY_FILE (DATACRUMBS_SERVER_LOAD_TIMEOUT: $DATACRUMBS_SERVER_LOAD_TIMEOUT seconds)" - return 0 - fi - - - while [[ ! -f "$READY_FILE" ]]; do - sleep $WAIT_INTERVAL - log "Waiting for ${ELAPSED} seconds $Server..." - ELAPSED=$((ELAPSED + WAIT_INTERVAL)) - if [[ $ELAPSED -ge $DATACRUMBS_SERVER_LOAD_TIMEOUT ]]; then - log "DATACRUMBS_SERVER_LOAD_TIMEOUT waiting for $READY_FILE" - server_launch $DATACRUMBS_INSTALL_SBIN_DIR/datacrumbs_stop - cat $DATACRUMBS_LOG_FILE - exit 1 - fi - done - echo $RUNID > "$DATACRUMBS_SERVER_RUNID_FILE" - log "Started server" + if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then + mkdir -p "$DATACRUMBS_SERVER_RUN_DIR" + else + sudo mkdir -p "$DATACRUMBS_SERVER_RUN_DIR" + fi + if [[ ! -w "$DATACRUMBS_SERVER_RUN_DIR" ]]; then + warn "Cannot write to DATACRUMBS_SERVER_RUN_DIR: $DATACRUMBS_SERVER_RUN_DIR. Trying sudo." + sudo mkdir -p "$DATACRUMBS_SERVER_RUN_DIR" + fi + exec=$1 + exec=($exec) + if [[ -z "$DATACRUMBS_TRACE_DIR" ]]; then + error "DATACRUMBS_TRACE_DIR is empty. Please set the trace directory." + exit 1 + fi + common_cmd=("$DATACRUMBS_INSTALL_HOST" "--user" "$DATACRUMBS_USER" "--config_path" "$DATACRUMBS_INSTALL_CONFIGS_DIR" "--data_dir" "$DATACRUMBS_INSTALL_DATA_DIR" "--trace_log_dir" "$DATACRUMBS_TRACE_DIR" --run_id "$DATACRUMBS_SERVER_RUN_ID") + cmd=("${exec[@]}" "run" "${common_cmd[@]}") + WAIT_INTERVAL=2 + ELAPSED=0 + + log "Starting Server: ${cmd[*]}" + if [[ "${DRY_RUN:-0}" == "1" ]]; then + server_launch "${cmd[@]}" + else + server_launch "${cmd[@]}" >$DATACRUMBS_LOG_FILE 2>&1 & + PID=$! + echo $PID >"$DATACRUMBS_SERVER_SYSTEMD_PID_FILE" + log "Service started with PID: $PID" + chown ${DATACRUMBS_USER}:${DATACRUMBS_USER} $DATACRUMBS_LOG_FILE + fi + + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would wait for ready file: $DATACRUMBS_SERVER_READY_FILE (DATACRUMBS_SERVER_LOAD_TIMEOUT: $DATACRUMBS_SERVER_LOAD_TIMEOUT seconds)" + return 0 + fi + + while [[ ! -f "$DATACRUMBS_SERVER_READY_FILE" ]]; do + sleep $WAIT_INTERVAL + log "Waiting for ${ELAPSED} seconds $Server..." + ELAPSED=$((ELAPSED + WAIT_INTERVAL)) + if [[ $ELAPSED -ge $DATACRUMBS_SERVER_LOAD_TIMEOUT ]]; then + log "DATACRUMBS_SERVER_LOAD_TIMEOUT waiting for $DATACRUMBS_SERVER_READY_FILE" + server_launch $DATACRUMBS_INSTALL_SBIN_DIR/datacrumbs_stop + cat $DATACRUMBS_LOG_FILE + exit 1 + fi + done + echo $DATACRUMBS_SERVER_RUN_ID >"${DATACRUMBS_SERVER_RUN_ID_FILE}" + log "Started server" } function datacrumbs_stop_server() { - exec=$1 - prog_name=$2 - if [[ "$RUNID" == "1000" ]] && [[ -f "$DATACRUMBS_SERVER_RUNID_FILE" ]]; then - RUNID=$(cat "$DATACRUMBS_SERVER_RUNID_FILE" 2>/dev/null) - fi - READY_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/datacrumbs_${DATACRUMBS_USER}_${RUNID}.ready" - exec=($exec) - common_cmd=("$DATACRUMBS_INSTALL_HOST" "--user" "$DATACRUMBS_USER" "--config_path" "$DATACRUMBS_INSTALL_CONFIGS_DIR" "--data_dir" "$DATACRUMBS_INSTALL_DATA_DIR" "--trace_log_dir" "$DATACRUMBS_TRACE_DIR" --run_id "$RUNID") - cmd=("${exec[@]}" "stop" "${common_cmd[@]}") - - - log "Stopping Server: ${cmd[*]}" - if [[ "${DRY_RUN:-0}" == "1" ]]; then - server_launch "${cmd[@]}" - else - server_launch "${cmd[@]}" >> $DATACRUMBS_LOG_FILE 2>&1 - fi - - if [[ "${DRY_RUN:-0}" == "1" ]]; then - log "[DRY RUN] Would find and kill process(es) with RUNID ${RUNID}" - log "[DRY RUN] Would remove ready file: $READY_FILE" - return 0 - fi - SERVER_PID=$(cat "$DATACRUMBS_SERVER_PID_FILE") - # SERVER_PID=$(ps aux | grep "${RUNID}" | grep -v grep | grep -v "${prog_name}" | awk '{print $2}') - if [[ -n "$SERVER_PID" ]]; then - log "Found process(es) with RUNID ${RUNID}: $SERVER_PID. Killing them." - if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then - ${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_stop "${prog_name}" - else - sudo ${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_stop "${prog_name}" - fi - cat "${DATACRUMBS_LOG_FILE}" - fi - rm -f "${READY_FILE}" - rm -f "${DATACRUMBS_SERVER_RUNID_FILE}" - log "Stopped server" + exec=$1 + prog_name=$2 + exec=($exec) + common_cmd=("$DATACRUMBS_INSTALL_HOST" "--user" "$DATACRUMBS_USER" "--config_path" "$DATACRUMBS_INSTALL_CONFIGS_DIR" "--data_dir" "$DATACRUMBS_INSTALL_DATA_DIR" "--trace_log_dir" "$DATACRUMBS_TRACE_DIR" --run_id "$DATACRUMBS_SERVER_RUN_ID") + cmd=("${exec[@]}" "stop" "${common_cmd[@]}") + + log "Stopping Server: ${cmd[*]}" + if [[ "${DRY_RUN:-0}" == "1" ]]; then + server_launch "${cmd[@]}" + else + server_launch "${cmd[@]}" >>$DATACRUMBS_LOG_FILE 2>&1 + fi + + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would find and kill process(es) with DATACRUMBS_SERVER_RUN_ID ${DATACRUMBS_SERVER_RUN_ID}" + log "[DRY RUN] Would remove ready file: $DATACRUMBS_SERVER_READY_FILE" + return 0 + fi + SERVER_PID=$(cat "$DATACRUMBS_SERVER_PID_FILE" 2>/dev/null || true) + # SERVER_PID=$(ps aux | grep "${RUNID}" | grep -v grep | grep -v "${prog_name}" | awk '{print $2}') + if [[ -n "$SERVER_PID" ]]; then + log "Found process(es) with DATACRUMBS_SERVER_RUN_ID ${DATACRUMBS_SERVER_RUN_ID}: $SERVER_PID. Killing them." + if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then + ${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_stop "${prog_name}" + else + sudo ${DATACRUMBS_INSTALL_SBIN_DIR}/datacrumbs_stop "${prog_name}" + fi + cat "${DATACRUMBS_LOG_FILE}" + fi + rm -f "${DATACRUMBS_SERVER_READY_FILE}" + rm -f "${DATACRUMBS_SERVER_RUN_ID_FILE}" + rm -f "${DATACRUMBS_SERVER_PID_FILE}" + rm -f "${DATACRUMBS_SERVER_SYSTEMD_PID_FILE}" + log "Stopped server" } function datacrumbs_print_status() { - if [[ "$RUNID" == "1000" ]] && [[ -f "$DATACRUMBS_SERVER_RUNID_FILE" ]]; then - RUNID=$(cat "$DATACRUMBS_SERVER_RUNID_FILE" 2>/dev/null) - fi - local status_file="/tmp/datacrumbs_${DATACRUMBS_USER}_status_${RUNID}.json" - if [[ "${DRY_RUN:-0}" == "1" ]]; then - log "[DRY RUN] Would print status from: $status_file" - log "[DRY RUN] Would remove status file: $status_file" - return 0 - fi - - if [[ ! -f "$status_file" ]]; then - log "Status file not found: $status_file" - return 1 - fi - - local trace_file total_events_captured events_failed - trace_file=$(jq -r '.trace_file' "$status_file") - total_events_captured=$(jq -r '.total_events_captured' "$status_file") - events_failed=$(jq -r '.events_failed' "$status_file") - - log "trace_file: $trace_file" - log "total_events_captured: $total_events_captured" - log "events_failed: $events_failed" - rm -f "$status_file" + local status_file=${DATACRUMBS_SERVER_STATUS_FILE} + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would print status from: $status_file" + log "[DRY RUN] Would remove status file: $status_file" + return 0 + fi + + if [[ ! -f "$status_file" ]]; then + log "Status file not found: $status_file" + return 1 + fi + + local trace_file total_events_captured events_failed + trace_file=$(jq -r '.trace_file' "$status_file") + total_events_captured=$(jq -r '.total_events_captured' "$status_file") + events_failed=$(jq -r '.events_failed' "$status_file") + + log "trace_file: $trace_file" + log "total_events_captured: $total_events_captured" + log "events_failed: $events_failed" + rm -f "$status_file" } function check_regular_user() { - if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then - error "This script should be run as a regular user, not as root." - exit 1 - fi + if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then + error "This script should be run as a regular user, not as root." + exit 1 + fi } function check_sudo_user() { - if [[ "$DATACRUMBS_IS_ROOT" != "1" ]]; then - error "This script should be run as root." - exit 1 -fi + if [[ "$DATACRUMBS_IS_ROOT" != "1" ]]; then + error "This script should be run as root." + exit 1 + fi } function check_install_user() { - if [[ "${DATACRUMBS_USER}" != "${DATACRUMBS_INSTALL_USER}" ]]; then - error "DATACRUMBS_USER does not match DATACRUMBS_INSTALL_USER: ${DATACRUMBS_USER}" - exit 1 - fi + if [[ "${DATACRUMBS_USER}" != "${DATACRUMBS_INSTALL_USER}" ]]; then + error "DATACRUMBS_USER does not match DATACRUMBS_INSTALL_USER: ${DATACRUMBS_USER}" + exit 1 + fi } function job_launch() { - local cmd=() - if [[ -z "${DATACRUMBS_JOB_ENABLE_MPI}" || "${DATACRUMBS_JOB_ENABLE_MPI}" == "1" ]]; then - debug "Launching job with MPI" - cmd=(${DATACRUMBS_JOB_RUN} "${DATACRUMBS_JOB_NODE_FLAG}" "${DATACRUMBS_JOB_NODES}" "${DATACRUMBS_JOB_PPN_FLAG}" "${DATACRUMBS_JOB_PPN}" ${DATACRUMBS_JOB_OTHER_FLAGS} "$@") - else - debug "Launching job without MPI" - cmd=("$@") - fi - if [[ "${DRY_RUN:-0}" == "1" ]]; then - log "[DRY RUN] Would launch job: ${cmd[*]}" - return 0 - fi - log "Launching job command: ${cmd[*]}" - "${cmd[@]}" + local cmd=() + if [[ -z "${DATACRUMBS_JOB_ENABLE_MPI}" || "${DATACRUMBS_JOB_ENABLE_MPI}" == "1" ]]; then + debug "Launching job with MPI" + cmd=(${DATACRUMBS_JOB_RUN} "${DATACRUMBS_JOB_NODE_FLAG}" "${DATACRUMBS_JOB_NODES}" "${DATACRUMBS_JOB_PPN_FLAG}" "${DATACRUMBS_JOB_PPN}" ${DATACRUMBS_JOB_OTHER_FLAGS} "$@") + else + debug "Launching job without MPI" + cmd=("$@") + fi + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would launch job: ${cmd[*]}" + return 0 + fi + log "Launching job command: ${cmd[*]}" + "${cmd[@]}" } function server_launch() { - local mpi_cmd=() - if [[ -z "${DATACRUMBS_JOB_ENABLE_MPI}" || "${DATACRUMBS_JOB_ENABLE_MPI}" == "1" ]]; then - debug "Launching server with MPI" - mpi_cmd=(${DATACRUMBS_JOB_RUN} "${DATACRUMBS_JOB_NODE_FLAG}" "${DATACRUMBS_JOB_NODES}" "${DATACRUMBS_JOB_PPN_FLAG}" "1" ${DATACRUMBS_JOB_OTHER_FLAGS}) - else - debug "Launching server without MPI" - mpi_cmd=() - fi - if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then - cmd=("${mpi_cmd[@]}" "$@") - else - cmd=("${mpi_cmd[@]}" "sudo" "$@") - fi - if [[ -z "${DATACRUMBS_JOB_ENABLE_MPI}" || "${DATACRUMBS_JOB_ENABLE_MPI}" == "1" ]]; then - debug "Launching server with MPI" - cmd=( "${cmd[@]}" ) - else - debug "Launching server without MPI" - cmd=( "${cmd[@]}" --disable_mpi) - fi - if [[ "${DRY_RUN:-0}" -eq 1 ]]; then - log "[DRY RUN] Would launch server: ${cmd[*]}" - return 0 - fi - log "Launching server command: ${cmd[*]}" - "${cmd[@]}" -} - -if command -v module &> /dev/null -then - export DATACRUMBS_MODULE_AVAILABLE=1 -else - export DATACRUMBS_MODULE_AVAILABLE=0 -fi \ No newline at end of file + local mpi_cmd=() + if [[ -z "${DATACRUMBS_JOB_ENABLE_MPI}" || "${DATACRUMBS_JOB_ENABLE_MPI}" == "1" ]]; then + debug "Launching server with MPI" + mpi_cmd=(${DATACRUMBS_JOB_RUN} "${DATACRUMBS_JOB_NODE_FLAG}" "${DATACRUMBS_JOB_NODES}" "${DATACRUMBS_JOB_PPN_FLAG}" "1" ${DATACRUMBS_JOB_OTHER_FLAGS}) + else + debug "Launching server without MPI" + mpi_cmd=() + fi + if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then + cmd=("${mpi_cmd[@]}" "$@") + else + cmd=("${mpi_cmd[@]}" "sudo" "$@") + fi + if [[ -z "${DATACRUMBS_JOB_ENABLE_MPI}" || "${DATACRUMBS_JOB_ENABLE_MPI}" == "1" ]]; then + debug "Launching server with MPI" + cmd=("${cmd[@]}") + else + debug "Launching server without MPI" + cmd=("${cmd[@]}" --disable-mpi) + fi + if [[ "${DRY_RUN:-0}" == "1" ]]; then + log "[DRY RUN] Would launch server: ${cmd[*]}" + return 0 + fi + log "Launching server command: ${cmd[*]}" + "${cmd[@]}" +} + +function get_actual_user() { + local user=$(whoami) + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + if [[ -n "$FLUX_JOB_USERID" ]]; then + user=$(id -nu $FLUX_JOB_USERID) + fi + elif [[ "SLURM" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + if [[ -n "$SLURM_JOB_UID" ]]; then + user=$(id -nu $SLURM_JOB_UID) + fi + fi + log_system "get_actual_user returned user:${user}" + echo "${user}" +} + +function check_composite_location() { + local name="$1" + local selected_location="" + local user_location=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/@PROJECT_NAME@/@CMAKE_INSTALL_SBINDIR@/${DATACRUMBS_USER}/datacrumbs_${name} + local system_location=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/@PROJECT_NAME@/@CMAKE_INSTALL_SBINDIR@/${DATACRUMBS_INSTALL_USER}/datacrumbs_${name} + if [[ -f "${user_location}" ]]; then + selected_location="${user_location}" + elif [[ -f "${system_location}" ]]; then + selected_location="${system_location}" + else + selected_location="NA" + fi + log_system "check_composite_location for name:${name} selected_location:${selected_location}" + echo "${selected_location}" +} + +function validate_datacrumbs_enable_value() { + local value="$1" + if [[ "$value" == "yes" || "$value" == "no" ]]; then + return 0 + else + return 1 + fi +} + +function validate_datacrumbs_composite_name() { + local name="$1" + return_code=0 + if [[ ! ${name} =~ ^[a-zA-Z_]+$ ]]; then + warn_user "Error: DATACRUMBS_COMPOSABLE_NAME: ${name} contains invalid characters. Only alphabets and underscores are allowed." + return_code=1 + fi + local selected_location=$(check_composite_location "${name}") + if [[ ${return_code} -eq 0 && "${selected_location}" == "NA" ]]; then + warn_user "Error: Composable name ${name} does not exist." + return_code=1 + fi + log_system "validate_datacrumbs_composite_name validated name:${name} return_code:${return_code}" + return ${return_code} +} + +function get_default_datacrumbs_composite_name() { + echo "NONE" +} diff --git a/scripts/datacrumbs/datacrumbs_wrap.in b/scripts/datacrumbs/datacrumbs_wrap.in index 4b77e718..92e93081 100755 --- a/scripts/datacrumbs/datacrumbs_wrap.in +++ b/scripts/datacrumbs/datacrumbs_wrap.in @@ -7,8 +7,8 @@ SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ source $SCRIPT_DIR/datacrumbs_setup if [[ "$DATACRUMBS_IS_ROOT" == "1" ]]; then - error "This script should be run as a regular user, not as root." - exit 1 + error "This script should be run as a regular user, not as root." + exit 1 fi -LD_PRELOAD=${DATACRUMBS_CLIENT_LIB} "$@" \ No newline at end of file +LD_PRELOAD=${DATACRUMBS_CLIENT_LIB} "$@" diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh index 53972794..68af1278 100755 --- a/scripts/docker-build.sh +++ b/scripts/docker-build.sh @@ -19,88 +19,88 @@ NC='\033[0m' # No Color # Function to print colored output print_status() { - echo -e "${GREEN}[INFO]${NC} $1" + echo -e "${GREEN}[INFO]${NC} $1" } print_warning() { - echo -e "${YELLOW}[WARNING]${NC} $1" + echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { - echo -e "${RED}[ERROR]${NC} $1" + echo -e "${RED}[ERROR]${NC} $1" } # Check if we're in the correct directory if [[ ! -f "$DOCKERFILE_PATH" ]]; then - print_error "Dockerfile not found at $DOCKERFILE_PATH" - print_error "Please run this script from the datacrumbs root directory" - exit 1 + print_error "Dockerfile not found at $DOCKERFILE_PATH" + print_error "Please run this script from the datacrumbs root directory" + exit 1 fi # Function to show usage usage() { - echo "Usage: $0 [OPTIONS]" - echo "Options:" - echo " -u, --username USERNAME Docker Hub username (default: $DOCKER_HUB_USERNAME)" - echo " -v, --version VERSION Image version tag (default: $VERSION)" - echo " -p, --push Push to Docker Hub after building" - echo " -h, --help Show this help message" - echo "" - echo "Environment variables:" - echo " DOCKER_HUB_USERNAME Docker Hub username" - echo " VERSION Image version tag" - echo "" - echo "Examples:" - echo " $0 # Build image locally" - echo " $0 -u myusername -v v1.0 # Build with specific username and version" - echo " $0 -p # Build and push to Docker Hub" + echo "Usage: $0 [OPTIONS]" + echo "Options:" + echo " -u, --username USERNAME Docker Hub username (default: $DOCKER_HUB_USERNAME)" + echo " -v, --version VERSION Image version tag (default: $VERSION)" + echo " -p, --push Push to Docker Hub after building" + echo " -h, --help Show this help message" + echo "" + echo "Environment variables:" + echo " DOCKER_HUB_USERNAME Docker Hub username" + echo " VERSION Image version tag" + echo "" + echo "Examples:" + echo " $0 # Build image locally" + echo " $0 -u myusername -v v1.0 # Build with specific username and version" + echo " $0 -p # Build and push to Docker Hub" } # Parse command line arguments PUSH_TO_HUB=false while [[ $# -gt 0 ]]; do - case $1 in - -u|--username) - DOCKER_HUB_USERNAME="$2" - shift 2 - ;; - -v|--version) - VERSION="$2" - shift 2 - ;; - -p|--push) - PUSH_TO_HUB=true - shift - ;; - -h|--help) - usage - exit 0 - ;; - *) - print_error "Unknown option: $1" - usage - exit 1 - ;; - esac + case $1 in + -u | --username) + DOCKER_HUB_USERNAME="$2" + shift 2 + ;; + -v | --version) + VERSION="$2" + shift 2 + ;; + -p | --push) + PUSH_TO_HUB=true + shift + ;; + -h | --help) + usage + exit 0 + ;; + *) + print_error "Unknown option: $1" + usage + exit 1 + ;; + esac done # Validate Docker Hub username if pushing if [[ "$PUSH_TO_HUB" = true ]] && [[ "$DOCKER_HUB_USERNAME" = "your-dockerhub-username" ]]; then - print_error "Please provide a valid Docker Hub username with -u or set DOCKER_HUB_USERNAME environment variable" - exit 1 + print_error "Please provide a valid Docker Hub username with -u or set DOCKER_HUB_USERNAME environment variable" + exit 1 fi # Detect container runtime (Docker or Podman) if command -v podman >/dev/null 2>&1 && ! command -v docker >/dev/null 2>&1; then - CONTAINER_CMD="podman" - print_status "Using Podman as container runtime" + CONTAINER_CMD="podman" + print_status "Using Podman as container runtime" elif command -v docker >/dev/null 2>&1; then - CONTAINER_CMD="docker" - print_status "Using Docker as container runtime" + CONTAINER_CMD="docker" + print_status "Using Docker as container runtime" else - print_error "Neither Docker nor Podman found. Please install one of them." - exit 1 + print_error "Neither Docker nor Podman found. Please install one of them." + exit 1 fi # Image tags @@ -114,78 +114,78 @@ print_status "Dockerfile: $DOCKERFILE_PATH" # Build the Docker image if $CONTAINER_CMD build -f "$DOCKERFILE_PATH" -t "$LOCAL_TAG" .; then - print_status "✅ Docker image built successfully: $LOCAL_TAG" + print_status "✅ Docker image built successfully: $LOCAL_TAG" else - print_error "❌ Failed to build Docker image" - exit 1 + print_error "❌ Failed to build Docker image" + exit 1 fi # Tag for Docker Hub if pushing if [[ "$PUSH_TO_HUB" = true ]]; then - print_status "Tagging image for Docker Hub..." - - # Tag with version - if $CONTAINER_CMD tag "$LOCAL_TAG" "$HUB_TAG"; then - print_status "✅ Tagged as $HUB_TAG" + print_status "Tagging image for Docker Hub..." + + # Tag with version + if $CONTAINER_CMD tag "$LOCAL_TAG" "$HUB_TAG"; then + print_status "✅ Tagged as $HUB_TAG" + else + print_error "❌ Failed to tag image for Docker Hub" + exit 1 + fi + + # Tag as latest if version is not already latest + if [[ "$VERSION" != "latest" ]]; then + if $CONTAINER_CMD tag "$LOCAL_TAG" "$HUB_LATEST_TAG"; then + print_status "✅ Tagged as $HUB_LATEST_TAG" else - print_error "❌ Failed to tag image for Docker Hub" - exit 1 - fi - - # Tag as latest if version is not already latest - if [[ "$VERSION" != "latest" ]]; then - if $CONTAINER_CMD tag "$LOCAL_TAG" "$HUB_LATEST_TAG"; then - print_status "✅ Tagged as $HUB_LATEST_TAG" - else - print_error "❌ Failed to tag image as latest" - exit 1 - fi + print_error "❌ Failed to tag image as latest" + exit 1 fi - - print_status "Pushing to Docker Hub..." - print_warning "Make sure you're logged into Docker Hub (run 'docker login docker.io' for Podman)" - print_warning "Make sure the repository '$DOCKER_HUB_USERNAME/datacrumbs' exists on Docker Hub" - - # Check if we're using podman - PUSH_CMD="$CONTAINER_CMD push" - - # Push version tag - if $PUSH_CMD "$HUB_TAG"; then - print_status "✅ Pushed $HUB_TAG" + fi + + print_status "Pushing to Docker Hub..." + print_warning "Make sure you're logged into Docker Hub (run 'docker login docker.io' for Podman)" + print_warning "Make sure the repository '$DOCKER_HUB_USERNAME/datacrumbs' exists on Docker Hub" + + # Check if we're using podman + PUSH_CMD="$CONTAINER_CMD push" + + # Push version tag + if $PUSH_CMD "$HUB_TAG"; then + print_status "✅ Pushed $HUB_TAG" + else + print_error "❌ Failed to push $HUB_TAG" + print_error "Please ensure:" + print_error "1. You're logged in: docker login docker.io (or podman login docker.io)" + print_error "2. Repository exists: https://hub.docker.com/r/$DOCKER_HUB_USERNAME/datacrumbs" + print_error "3. You have push permissions to the repository" + exit 1 + fi + + # Push latest tag if different from version + if [[ "$VERSION" != "latest" ]]; then + if $PUSH_CMD "$HUB_LATEST_TAG"; then + print_status "✅ Pushed $HUB_LATEST_TAG" else - print_error "❌ Failed to push $HUB_TAG" - print_error "Please ensure:" - print_error "1. You're logged in: docker login docker.io (or podman login docker.io)" - print_error "2. Repository exists: https://hub.docker.com/r/$DOCKER_HUB_USERNAME/datacrumbs" - print_error "3. You have push permissions to the repository" - exit 1 - fi - - # Push latest tag if different from version - if [[ "$VERSION" != "latest" ]]; then - if $PUSH_CMD "$HUB_LATEST_TAG"; then - print_status "✅ Pushed $HUB_LATEST_TAG" - else - print_error "❌ Failed to push $HUB_LATEST_TAG" - exit 1 - fi - fi - - print_status "🎉 Successfully pushed DataCrumbs image to Docker Hub!" - echo "" - echo "Your image is now available at:" - echo " docker pull $HUB_TAG" - if [[ "$VERSION" != "latest" ]]; then - echo " docker pull $HUB_LATEST_TAG" + print_error "❌ Failed to push $HUB_LATEST_TAG" + exit 1 fi + fi + + print_status "🎉 Successfully pushed DataCrumbs image to Docker Hub!" + echo "" + echo "Your image is now available at:" + echo " docker pull $HUB_TAG" + if [[ "$VERSION" != "latest" ]]; then + echo " docker pull $HUB_LATEST_TAG" + fi else - print_status "🎉 Successfully built DataCrumbs image locally!" - echo "" - echo "To run the container:" - echo " $CONTAINER_CMD run -it --privileged --cap-add=ALL $LOCAL_TAG" - echo "" - echo "To push to Docker Hub, run:" - echo " $0 -u -p" + print_status "🎉 Successfully built DataCrumbs image locally!" + echo "" + echo "To run the container:" + echo " $CONTAINER_CMD run -it --privileged --cap-add=ALL $LOCAL_TAG" + echo "" + echo "To push to Docker Hub, run:" + echo " $0 -u -p" fi echo "" diff --git a/scripts/formatting/autoformat.sh b/scripts/formatting/autoformat.sh index b397ab82..3e50cea5 100755 --- a/scripts/formatting/autoformat.sh +++ b/scripts/formatting/autoformat.sh @@ -2,41 +2,51 @@ clang_format_exe="clang-format" if [[ $# -ge 1 ]]; then - clang_format_exe="$1" + clang_format_exe="$1" fi SUPPORTED_CLANG_FORMAT_VERSION="19.1.7" -if [ command -v $clang_format_exe >/dev/null 2>&1 ]; then - echo "You must have 'clang-format' in PATH to use 'autoformat.sh'" - exit 1 +if ! command -v $clang_format_exe >/dev/null 2>&1; then + echo "You must have 'clang-format' in PATH to use 'autoformat.sh'" + exit 1 fi clang_format_version_str=$($clang_format_exe --version) clang_format_version=$(echo "$clang_format_version_str" | grep -oP 'clang-format version \K\d+(\.\d+)+') if [ "$clang_format_version" != "$SUPPORTED_CLANG_FORMAT_VERSION" ]; then - echo "WARNING: the .clang-format file in this repo is designed for version 18.1.8." - echo " You are running with clang-format v$clang_format_version." - echo " The resulting formatting is highly likely to be incorrect." + echo "WARNING: the .clang-format file in this repo is designed for version 18.1.8." + echo " You are running with clang-format v$clang_format_version." + echo " The resulting formatting is highly likely to be incorrect." fi -if [ command -v find >/dev/null 2>&1 ]; then - echo "You must have 'find' in PATH to use 'autoformat.sh'" - exit 1 +if ! command -v find >/dev/null 2>&1; then + echo "You must have 'find' in PATH to use 'autoformat.sh'" + exit 1 fi -if [ command -v dirname >/dev/null 2>&1 ]; then - echo "You must have 'dirname' in PATH to use 'autoformat.sh'" - exit 1 +if ! command -v dirname >/dev/null 2>&1; then + echo "You must have 'dirname' in PATH to use 'autoformat.sh'" + exit 1 fi -if [ command -v xargs >/dev/null 2>&1 ]; then - echo "You must have 'dirname' in PATH to use 'autoformat.sh'" - exit 1 +if ! command -v xargs >/dev/null 2>&1; then + echo "You must have 'xargs' in PATH to use 'autoformat.sh'" + exit 1 fi -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +if ! command -v shfmt >/dev/null 2>&1; then + echo "You must have 'shfmt' in PATH to use 'autoformat.sh'" + exit 1 +fi + +if ! command -v cmake-format >/dev/null 2>&1; then + echo "You must have 'cmake-format' in PATH to use 'autoformat.sh'" + exit 1 +fi + +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) curr_dir=$(pwd) @@ -44,16 +54,14 @@ cd $SCRIPT_DIR cd .. cd .. -echo "Formatting C/C++ code in 'src'" -find src \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe -i -echo "Formatting C/C++ code in 'etc/datacrumbs/plugins'" -find etc/datacrumbs/plugins \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe -i +echo "Check formatting of C/C++ code in '.'" +find . \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) \( -path "./src/*" -o -path "./tools/*" -o -path "./tests/*" -o -path "./etc/datacrumbs/plugins/*" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe -i -echo "Formatting C/C++ code in 'tests'" -find tests \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe -i +echo "Formatting shell scripts in '.'" +find . \( -name "*.sh" -o -name "*.in" \) \( -path "./etc/datacrumbs/data/*" -o -path "./infrastructure/docker/*" -o -path "./scripts/datacrumbs/*" -o -path "./tests/*" -o -path "./tools/*" \) -not -path "*.txt.in" -print0 | xargs -0 shfmt -w -echo "Formatting C/C++ code in 'tools'" -find tools \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe -i +echo "Formatting CMake files in '.'" +find . \( -name "CMakeLists.txt*" -o -name "*.cmake" \) \( -path "./src/*" -o -path "./tools/*" -o -path "./tests/*" -o -path "./cmake/*" \) -print0 | xargs -0 cmake-format -i -cd $curr_dir \ No newline at end of file +cd $curr_dir diff --git a/scripts/formatting/check-formatting.sh b/scripts/formatting/check-formatting.sh index ed8a1c37..7f677e44 100755 --- a/scripts/formatting/check-formatting.sh +++ b/scripts/formatting/check-formatting.sh @@ -2,41 +2,51 @@ clang_format_exe="clang-format" if [[ $# -ge 1 ]]; then - clang_format_exe="$1" + clang_format_exe="$1" fi SUPPORTED_CLANG_FORMAT_VERSION="19.1.7" -if [ command -v $clang_format_exe >/dev/null 2>&1 ]; then - echo "You must have 'clang-format' in PATH to use 'check-formatting.sh'" - exit 1 +if [ command -v $clang_format_exe ] >/dev/null 2>&1; then + echo "You must have 'clang-format' in PATH to use 'check-formatting.sh'" + exit 1 fi clang_format_version_str=$($clang_format_exe --version) clang_format_version=$(echo "$clang_format_version_str" | grep -oP 'clang-format version \K\d+(\.\d+)+') if [ "$clang_format_version" != "$SUPPORTED_CLANG_FORMAT_VERSION" ]; then - echo "WARNING: the .clang-format file in this repo is designed for version $SUPPORTED_CLANG_FORMAT_VERSION." - echo " You are running with clang-format v$clang_format_version." - echo " The resulting check is highly likely to be incorrect." + echo "WARNING: the .clang-format file in this repo is designed for version $SUPPORTED_CLANG_FORMAT_VERSION." + echo " You are running with clang-format v$clang_format_version." + echo " The resulting check is highly likely to be incorrect." fi -if [ command -v find >/dev/null 2>&1 ]; then - echo "You must have 'find' in PATH to use 'check-formatting.sh'" - exit 1 +if [ command -v find ] >/dev/null 2>&1; then + echo "You must have 'find' in PATH to use 'check-formatting.sh'" + exit 1 fi -if [ command -v dirname >/dev/null 2>&1 ]; then - echo "You must have 'dirname' in PATH to use 'check-formatting.sh'" - exit 1 +if [ command -v dirname ] >/dev/null 2>&1; then + echo "You must have 'dirname' in PATH to use 'check-formatting.sh'" + exit 1 fi -if [ command -v xargs >/dev/null 2>&1 ]; then - echo "You must have 'dirname' in PATH to use 'check-formatting.sh'" - exit 1 +if [ command -v xargs ] >/dev/null 2>&1; then + echo "You must have 'dirname' in PATH to use 'check-formatting.sh'" + exit 1 fi -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +if ! command -v shfmt >/dev/null 2>&1; then + echo "You must have 'shfmt' in PATH to use 'check-formatting.sh'" + exit 1 +fi + +if ! command -v cmake-format >/dev/null 2>&1; then + echo "You must have 'cmake-format' in PATH to use 'check-formatting.sh'" + exit 1 +fi + +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) curr_dir=$(pwd) @@ -44,28 +54,24 @@ cd $SCRIPT_DIR cd .. cd .. -echo "Check formatting of C/C++ code in 'src'" -find src \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe --dry-run -Werror +echo "Check formatting of C/C++ code in '.'" +find . \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) \( -path "./src/*" -o -path "./tools/*" -o -path "./tests/*" -o -path "./etc/datacrumbs/plugins/*" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe --dry-run --Werror src_check_rc=$? -echo "Check formatting of C/C++ code in 'etc/datacrumbs/plugins'" -find etc/datacrumbs/plugins \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe --dry-run -Werror -plugins_check_rc=$? - -echo "Check formatting of C/C++ code in 'tests'" -find tests \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe --dry-run -Werror -tests_check_rc=$? +echo "Check formatting of shell scripts in '.'" +find . \( -name "*.sh" -o -name "*.in" \) \( -path "./etc/datacrumbs/data/*" -o -path "./infrastructure/docker/*" -o -path "./scripts/datacrumbs/*" -o -path "./tests/*" -o -path "./tools/*" \) -not -path "*.txt.in" -print0 | xargs -0 shfmt -d +shell_check_rc=$? -echo "Check formatting of C/C++ code in 'tools'" -find tools \( -name "*.c" -o -name "*.cpp" -o -name "*.h" -o -name "*.hpp" \) -print0 | xargs -0 -P "$(nproc)" $clang_format_exe --dry-run -Werror -tools_check_rc=$? +echo "Check formatting of CMake files in '.'" +find . \( -name "CMakeLists.txt*" -o -name "*.cmake" \) \( -path "./src/*" -o -path "./tools/*" -o -path "./tests/*" -o -path "./cmake/*" \) -print0 | xargs -0 cmake-format --check +cmake_check_rc=$? cd $curr_dir -if [ $src_check_rc -ne 0 ] || [ $plugins_check_rc -ne 0 ] || [ $tests_check_rc -ne 0 ] || [ $tools_check_rc -ne 0 ]; then - echo "Some formatting checks failed. Please run 'autoformat.sh' to fix the issues." - exit 2 +if [ $src_check_rc -ne 0 ] || [ $shell_check_rc -ne 0 ] || [ $cmake_check_rc -ne 0 ]; then + echo "Some formatting checks failed. Please run 'autoformat.sh' to fix the issues." + exit 2 else - echo "All checks passed successfully." - exit 0 -fi \ No newline at end of file + echo "All checks passed successfully." + exit 0 +fi diff --git a/src/datacrumbs/common/configuration_manager.cpp b/src/datacrumbs/common/configuration_manager.cpp index 9ff7b293..0d948797 100644 --- a/src/datacrumbs/common/configuration_manager.cpp +++ b/src/datacrumbs/common/configuration_manager.cpp @@ -97,14 +97,14 @@ ArgumentParser::ArgumentParser(int argc, char** argv, ExecutableType exe_type) { } else if (arg == "--log_dir" && i + 1 < argc) { log_dir = argv[++i]; DC_LOG_DEBUG("[ArgumentParser] Log directory set to: %s", log_dir->c_str()); - } else if (arg == "--disable_mpi") { + } else if (arg == "--disable-mpi") { disable_mpi = true; DC_LOG_DEBUG("[ArgumentParser] disable_mpi set to: %s", disable_mpi ? "true" : "false"); } else if (arg == "--help" || arg == "-h") { DC_LOG_PRINT( "Usage: %s [--run_id ] [--trace_log_dir ] " "[--config_path ] [--user ] [--data_dir " - "] [--inclusion_path ] [--log_dir ]", + "] [--inclusion_path ] [--log_dir ] [--disable-mpi]", argv[0]); exit(0); } else { @@ -220,6 +220,8 @@ ConfigurationManager::ConfigurationManager(int argc, char** argv, bool print, std::shared_ptr probe; + DC_LOG_DEBUG("[ConfigurationManager] Capture probe enable_explorer set to: %s", + probe->enable_explorer ? "true" : "false"); // Handle each capture probe type switch (type) { case CaptureType::HEADER: { @@ -343,6 +345,11 @@ ConfigurationManager::ConfigurationManager(int argc, char** argv, bool print, throw std::invalid_argument("Unknown CaptureType in configuration: " + probe_node["type"].as()); } + if (probe_node["enable_explorer"]) { + probe->enable_explorer = probe_node["enable_explorer"].as(); + } else { + probe->enable_explorer = true; // Default to true if not specified + } // Parse probe type if (probe_node["probe"]) { auto probe_type_str = probe_node["probe"].as(); diff --git a/src/datacrumbs/common/data_structures.h b/src/datacrumbs/common/data_structures.h index 56a45071..b7d299d3 100644 --- a/src/datacrumbs/common/data_structures.h +++ b/src/datacrumbs/common/data_structures.h @@ -393,6 +393,7 @@ class CaptureProbe { std::string regex; // Regex pattern for matching std::string name; // Name of the capture probe ProbeType probe_type; // Type of probe associated with the capture + bool enable_explorer; // Flag to enable explorer for this capture probe }; // Capture probe for kernel symbols diff --git a/src/datacrumbs/common/logging.h b/src/datacrumbs/common/logging.h index 2e0f06f5..f5d83d1e 100644 --- a/src/datacrumbs/common/logging.h +++ b/src/datacrumbs/common/logging.h @@ -150,20 +150,40 @@ namespace datacrumbs::logging_internal { inline void log_progress(const std::string& message, size_t current, size_t total) { using namespace std::chrono; static auto start_time = steady_clock::now(); + static size_t last_printed = 0; + constexpr size_t PRINT_INTERVAL = 10000; // Print every 10K events + + // Only print every PRINT_INTERVAL events or when done + if (current != total && (current - last_printed) < PRINT_INTERVAL) { + return; + } + + last_printed = current; float percent = (total > 0) ? (100.0f * current / total) : 0.0f; auto now = steady_clock::now(); double elapsed = duration_cast>(now - start_time).count(); double rate = (elapsed > 0.0) ? (current / elapsed) : 0.0; +#ifdef LOG_TO_FILE + // For file logging, write complete lines without \r to avoid log file bloat + DC_LOG_PRINT("%s [%zu/%zu] %d%% completed | %.2fs elapsed | %.2f events/s", message.c_str(), + current, total, static_cast(percent), elapsed, rate); +#else + // For console logging, use \r for in-place updates DC_LOG_PRINT_NO_NEW_LINE("\r%s [%zu/%zu] %d%% completed | %.2fs elapsed | %.2f events/s", message.c_str(), current, total, static_cast(percent), elapsed, rate); +#endif if (current == total) { +#ifndef LOG_TO_FILE + DC_LOG_PRINT(""); // Print newline to finish the progress line +#endif DC_LOG_PRINT("%s done. Total time: %.2fs, Avg rate: %.2f events/s", message.c_str(), elapsed, rate); start_time = steady_clock::now(); // Reset for next progress + last_printed = 0; } } @@ -171,6 +191,16 @@ inline void log_progress(const std::string& message, size_t current) { using namespace std::chrono; static auto start_time = steady_clock::now(); static std::mutex mtx; + static size_t last_printed = 0; + constexpr size_t PRINT_INTERVAL = 10000; // Print every 10K events + + // Only print every PRINT_INTERVAL events + if ((current - last_printed) < PRINT_INTERVAL) { + return; + } + + last_printed = current; + auto now = steady_clock::now(); double elapsed = duration_cast>(now - start_time).count(); double rate = (elapsed > 0.0) ? (current / elapsed) : 0.0; @@ -220,10 +250,17 @@ inline void log_progress(const std::string& message, size_t current) { current_str.resize(current_str.find('.') != std::string::npos ? current_str.find('.') + 3 : current_str.size()); current_str += multiplier; + +#ifdef LOG_TO_FILE + // For file logging, write complete lines without \r to avoid log file bloat + DC_LOG_PRINT("%s [%s events] | %s elapsed | %s events/s", message.c_str(), current_str.c_str(), + elapsed_str, rate_str.c_str()); +#else + // For console logging, use \r for in-place updates DC_LOG_PRINT_NO_NEW_LINE( "\r \r%s [%s events] | %s elapsed | %s events/s ", message.c_str(), current_str.c_str(), elapsed_str, rate_str.c_str()); - // Optionally, print newline if desired when called with a special value +#endif } } // namespace datacrumbs::logging_internal // Progress logging macro diff --git a/src/datacrumbs/common/utils.h b/src/datacrumbs/common/utils.h index 7959050f..b2b37aa8 100644 --- a/src/datacrumbs/common/utils.h +++ b/src/datacrumbs/common/utils.h @@ -150,5 +150,66 @@ class Timer { double elapsed_time; // Accumulated elapsed time in seconds }; +// Function to remove non-UTF8 characters from a string +inline std::string remove_non_utf8(const std::string& input) { + DC_LOG_TRACE("Start remove_non_utf8, input size: %zu", input.size()); + std::string result; + result.reserve(input.size()); + + for (size_t i = 0; i < input.size();) { + unsigned char byte = static_cast(input[i]); + + // Single-byte UTF-8 character (0xxxxxxx) + if (byte <= 0x7F) { + // Only keep characters valid for filenames/paths + if ((byte >= 'A' && byte <= 'Z') || (byte >= 'a' && byte <= 'z') || + (byte >= '0' && byte <= '9') || byte == '_' || byte == '-' || byte == '.' || + byte == '/') { + result += input[i]; + } else { + DC_LOG_DEBUG("Skipping invalid filename character 0x%02X at position %zu", byte, i); + } + i++; + } + // Multi-byte UTF-8 character + else if ((byte & 0xE0) == 0xC0) { // 2-byte (110xxxxx) + if (i + 1 < input.size() && (static_cast(input[i + 1]) & 0xC0) == 0x80) { + result += input.substr(i, 2); + i += 2; + } else { + DC_LOG_DEBUG("Invalid 2-byte UTF-8 sequence at position %zu", i); + i++; + } + } else if ((byte & 0xF0) == 0xE0) { // 3-byte (1110xxxx) + if (i + 2 < input.size() && (static_cast(input[i + 1]) & 0xC0) == 0x80 && + (static_cast(input[i + 2]) & 0xC0) == 0x80) { + result += input.substr(i, 3); + i += 3; + } else { + DC_LOG_DEBUG("Invalid 3-byte UTF-8 sequence at position %zu", i); + i++; + } + } else if ((byte & 0xF8) == 0xF0) { // 4-byte (11110xxx) + if (i + 3 < input.size() && (static_cast(input[i + 1]) & 0xC0) == 0x80 && + (static_cast(input[i + 2]) & 0xC0) == 0x80 && + (static_cast(input[i + 3]) & 0xC0) == 0x80) { + result += input.substr(i, 4); + i += 4; + } else { + DC_LOG_DEBUG("Invalid 4-byte UTF-8 sequence at position %zu", i); + i++; + } + } else { + // Invalid UTF-8 start byte + DC_LOG_DEBUG("Invalid UTF-8 start byte 0x%02X at position %zu", byte, i); + i++; + } + } + + DC_LOG_DEBUG("remove_non_utf8 completed, output size: %zu", result.size()); + DC_LOG_TRACE("End remove_non_utf8"); + return result; +} + } // namespace utils } // namespace datacrumbs \ No newline at end of file diff --git a/src/datacrumbs/composable/CMakeLists.txt.in b/src/datacrumbs/composable/CMakeLists.txt.in index e9b041ac..b4c0f217 100644 --- a/src/datacrumbs/composable/CMakeLists.txt.in +++ b/src/datacrumbs/composable/CMakeLists.txt.in @@ -20,22 +20,35 @@ load_build_variables() # Set Options # ------------------------------------------------------------------------------ -set(DATACRUMBS_NAME "$ENV{USER}" CACHE STRING "Name of the Datacrumbs package") -set(DATACRUMBS_PROBES "" CACHE STRING "List of probes to include in the Datacrumbs package") -set(DATACRUMBS_CLIENT_OBJECTS_DIR "$ENV{DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR}" CACHE STRING "Path to the Datacrumbs client objects directory") - +set(DATACRUMBS_NAME + "$ENV{USER}" + CACHE STRING "Name of the Datacrumbs package" +) +set(DATACRUMBS_PROBES + "" + CACHE STRING "List of probes to include in the Datacrumbs package" +) +set(DATACRUMBS_CLIENT_OBJECTS_DIR + "$ENV{DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR}" + CACHE STRING "Path to the Datacrumbs client objects directory" +) # ------------------------------------------------------------------------------ # Validate Probes # ------------------------------------------------------------------------------ # Convert comma-separated DATACRUMBS_PROBES into a list -string(REPLACE "," ";" DATACRUMBS_PROBES_LIST "${DATACRUMBS_PROBES}") +string( + REPLACE "," + ";" + DATACRUMBS_PROBES_LIST + "${DATACRUMBS_PROBES}" +) # Append .o to each probe name in DATACRUMBS_PROBES_LIST set(DATACRUMBS_PROBES_OBJECTS) foreach(probe ${DATACRUMBS_PROBES_LIST}) - list(APPEND DATACRUMBS_PROBES_OBJECTS "${probe}.o") + list(APPEND DATACRUMBS_PROBES_OBJECTS "${probe}.o") endforeach() message(STATUS "User gave ${DATACRUMBS_PROBES_OBJECTS}") @@ -48,37 +61,106 @@ message(STATUS "We have ${ALL_OBJECT_FILES}") set(EXCLUDED_OBJECTS "init.o" "datacrumbs.bpf.o" "common.o") set(FILTERED_OBJECT_FILES) foreach(obj_file ${ALL_OBJECT_FILES}) - get_filename_component(obj_name "${obj_file}" NAME) - list(FIND EXCLUDED_OBJECTS "${obj_name}" EXCLUDED_IDX) - if(EXCLUDED_IDX EQUAL -1) - list(APPEND FILTERED_OBJECT_FILES "${obj_name}") - endif() + get_filename_component(obj_name "${obj_file}" NAME) + list( + FIND + EXCLUDED_OBJECTS + "${obj_name}" + EXCLUDED_IDX + ) + if(EXCLUDED_IDX EQUAL -1) + list(APPEND FILTERED_OBJECT_FILES "${obj_name}") + endif() endforeach() # Check that all DATACRUMBS_PROBES_OBJECTS are present in FILTERED_OBJECT_FILES set(MISSING_OBJECTS) foreach(probe_obj ${DATACRUMBS_PROBES_OBJECTS}) - list(FIND FILTERED_OBJECT_FILES "${probe_obj}" FOUND_IDX) - if(FOUND_IDX EQUAL -1) - list(APPEND MISSING_OBJECTS "${probe_obj}") - endif() + list( + FIND + FILTERED_OBJECT_FILES + "${probe_obj}" + FOUND_IDX + ) + if(FOUND_IDX EQUAL -1) + list(APPEND MISSING_OBJECTS "${probe_obj}") + endif() endforeach() if(MISSING_OBJECTS) - message(FATAL_ERROR "Missing probe object files in ${DATACRUMBS_CLIENT_OBJECTS_DIR}: ${MISSING_OBJECTS}") + message( + FATAL_ERROR "Missing probe object files in ${DATACRUMBS_CLIENT_OBJECTS_DIR}: ${MISSING_OBJECTS}" + ) endif() # Prepend DATACRUMBS_CLIENT_OBJECTS_DIR/ to each element of DATACRUMBS_PROBES_OBJECTS set(DATACRUMBS_PROBES_OBJECTS_FULL) foreach(probe_obj ${DATACRUMBS_PROBES_OBJECTS}) - list(APPEND DATACRUMBS_PROBES_OBJECTS_FULL "${DATACRUMBS_CLIENT_OBJECTS_DIR}/${probe_obj}") + list(APPEND DATACRUMBS_PROBES_OBJECTS_FULL "${DATACRUMBS_CLIENT_OBJECTS_DIR}/${probe_obj}") endforeach() # ------------------------------------------------------------------------------ # Find all dependencies # ------------------------------------------------------------------------------ -set(yaml-cpp_DIR @YAML_CPP_CMAKE_DIR@) -include_dependencies() +# LIBBPF +include_directories(@LIBBPF_INCLUDEDIR@) +link_directories(@LIBBPF_LIBRARY_DIRS@) +set(LIBBPF_VERSION @LIBBPF_VERSION@) +# YAML_CPP +include_directories(@YAML_CPP_INCLUDE_DIR@) +link_directories(@YAML_CPP_LIBRARY_DIR@) +set(yaml-cpp_VERSION @yaml-cpp_VERSION@) +# LLVM +include_directories(@LLVM_INCLUDE_DIRS@) +link_directories(@LLVM_LIBRARY_DIRS@) +set(CLANG_EXECUTABLE @CLANG_EXECUTABLE@) +set(CLANG_VERSION_OUTPUT @CLANG_VERSION_OUTPUT@) +set(LLVM_VERSION @LLVM_VERSION@) +# JSON_C +include_directories(@json-c_INCLUDE_DIR@) +link_directories(@json-c_LIBRARY_DIR@) +set(json-c_CONSIDERED_VERSIONS @json-c_CONSIDERED_VERSIONS@) +# ZLIB +include_directories(@ZLIB_INCLUDE_DIRS@) +link_directories(@ZLIB_LIBRARY_DIRS@) +set(ZLIB_VERSION @ZLIB_VERSION@) +# MPI +include_directories(@MPI_CXX_INCLUDE_DIRS@) +link_directories(@MPI_CXX_LIBRARY_DIR@) +set(MPI_CXX_VERSION @MPI_CXX_VERSION@) +# Dependencies +set(DEPENDENCY_LIB @DEPENDENCY_LIB@) +set(DEPENDENCY_LIBRARY_DIRS @DEPENDENCY_LIBRARY_DIRS@) +set(CMAKE_INSTALL_RPATH "${DEPENDENCY_LIBRARY_DIRS}") +set(CMAKE_BUILD_RPATH "${DEPENDENCY_LIBRARY_DIRS}") + +# print found packages +message( + STATUS + " - Found libbpf:${LIBBPF_VERSION} at include:${LIBBPF_INCLUDEDIR} lib:${LIBBPF_LIBRARY_DIRS}" +) +message( + STATUS + " - Found yaml-cpp:${yaml-cpp_VERSION} at include:${YAML_CPP_INCLUDE_DIR} lib:${YAML_CPP_LIBRARY_DIR}" +) +message( + STATUS + " - Found llvm:${LLVM_VERSION} at include:${LLVM_INCLUDE_DIRS} lib:${LLVM_LIBRARY_DIRS} clang:${CLANG_EXECUTABLE}" +) +message( + STATUS + " - Found json-c:${json-c_CONSIDERED_VERSIONS} at include:${json-c_INCLUDE_DIR} lib:${json-c_LIBRARY_DIR}" +) +message( + STATUS + " - Found zlib:${ZLIB_VERSION} at include:${ZLIB_INCLUDE_DIRS} lib:${ZLIB_LIBRARY_DIRS}" +) +message( + STATUS + " - Found mpi:${MPI_CXX_VERSION} at include:${MPI_CXX_INCLUDE_DIRS} lib:${MPI_CXX_LIBRARY_DIR}" +) +message(STATUS " - DEPENDENCY_LIBRARY_DIRS for RPATH:${DEPENDENCY_LIBRARY_DIRS}") +message(STATUS " - DEPENDENCY_LIB for linking :${DEPENDENCY_LIB}") # ------------------------------------------------------------------------------ # Build composite object file @@ -87,7 +169,8 @@ include_dependencies() file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/objects/) set(BPF_OUTPUT ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/objects/datacrumbs.bpf.o) -# Prepend DATACRUMBS_CLIENT_OBJECTS_DIR to common.o and init.o and add to DATACRUMBS_PROBES_OBJECTS_FULL +# Prepend DATACRUMBS_CLIENT_OBJECTS_DIR to common.o and init.o and add to +# DATACRUMBS_PROBES_OBJECTS_FULL list(PREPEND DATACRUMBS_PROBES_OBJECTS_FULL "${DATACRUMBS_CLIENT_OBJECTS_DIR}/common.o") list(APPEND DATACRUMBS_PROBES_OBJECTS_FULL "${DATACRUMBS_CLIENT_OBJECTS_DIR}/init.o") @@ -95,11 +178,13 @@ message(STATUS "Compiling ${DATACRUMBS_PROBES_OBJECTS_FULL}") # Link all object files into a single object file add_custom_command( - OUTPUT ${BPF_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "Linking all BPF objects into ${BPF_OUTPUT} (timed)" - COMMAND /usr/bin/time -f "Elapsed time for linking: %E" @BPFTOOL_EXECUTABLE@ gen object ${BPF_OUTPUT} ${DATACRUMBS_PROBES_OBJECTS_FULL} - COMMENT "Linking all BPF objects into ${BPF_OUTPUT} (timed)" - VERBATIM + OUTPUT ${BPF_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan + "Linking all BPF objects into ${BPF_OUTPUT} (timed)" + COMMAND /usr/bin/time -f "Elapsed time for linking: %E" @BPFTOOL_EXECUTABLE@ gen object + ${BPF_OUTPUT} ${DATACRUMBS_PROBES_OBJECTS_FULL} + COMMENT "Linking all BPF objects into ${BPF_OUTPUT} (timed)" + VERBATIM ) add_custom_target(datacrumbs_bpf ALL DEPENDS ${BPF_OUTPUT}) @@ -108,12 +193,12 @@ add_custom_target(datacrumbs_bpf ALL DEPENDS ${BPF_OUTPUT}) set(BPF_SKEL_OUTPUT ${CMAKE_BINARY_DIR}/include/datacrumbs/composable/bpf/datacrumbs.skel.h) add_custom_command( - OUTPUT ${BPF_SKEL_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/include/datacrumbs/composable/bpf/ - COMMAND @BPFTOOL_EXECUTABLE@ gen skeleton ${BPF_OUTPUT} > ${BPF_SKEL_OUTPUT} - DEPENDS ${BPF_OUTPUT} - COMMENT "Generating BPF skeleton: ${BPF_SKEL_OUTPUT}" - VERBATIM + OUTPUT ${BPF_SKEL_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/include/datacrumbs/composable/bpf/ + COMMAND @BPFTOOL_EXECUTABLE@ gen skeleton ${BPF_OUTPUT} > ${BPF_SKEL_OUTPUT} + DEPENDS ${BPF_OUTPUT} + COMMENT "Generating BPF skeleton: ${BPF_SKEL_OUTPUT}" + VERBATIM ) add_custom_target(datacrumbs_bpf_skel ALL DEPENDS ${BPF_SKEL_OUTPUT}) add_dependencies(datacrumbs_bpf_skel datacrumbs_bpf) @@ -124,11 +209,16 @@ add_dependencies(datacrumbs_bpf_skel datacrumbs_bpf) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) include_directories(${CMAKE_CURRENT_BINARY_DIR}/include) -set(DATACRUMBS_COMPOSABLE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/composable/process/server.cpp) -add_executable(@PROJECT_NAME@_${DATACRUMBS_NAME} ${DATACRUMBS_COMPOSABLE_SRC} ${BPF_SKEL_OUTPUT}) -target_link_libraries(@PROJECT_NAME@_${DATACRUMBS_NAME} ${DEPENDENCY_LIB} @DATACRUMBS_INSTALL_LIB_DIR@/libdatacrumbs_obj.so) +set(DATACRUMBS_COMPOSABLE_SRC + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/composable/process/server.cpp +) +add_executable(@PROJECT_NAME@_${DATACRUMBS_NAME} ${DATACRUMBS_COMPOSABLE_SRC} ${BPF_SKEL_OUTPUT}) +target_link_libraries( + @PROJECT_NAME@_${DATACRUMBS_NAME} ${DEPENDENCY_LIB} + @DATACRUMBS_INSTALL_LIB_DIR@/libdatacrumbs_obj.so +) add_dependencies(@PROJECT_NAME@_${DATACRUMBS_NAME} datacrumbs_bpf_skel) # Install the main processing executable into DATACRUMBS_INSTALL_BINARYDIR install(TARGETS @PROJECT_NAME@_${DATACRUMBS_NAME} - RUNTIME DESTINATION "${DATACRUMBS_INSTALL_SBINARYDIR}" -) \ No newline at end of file + RUNTIME DESTINATION "${DATACRUMBS_INSTALL_SBINARYDIR}" +) diff --git a/src/datacrumbs/explorer/mechanism/elf_capture.cpp b/src/datacrumbs/explorer/mechanism/elf_capture.cpp index 5364fda5..0d4c3e7c 100644 --- a/src/datacrumbs/explorer/mechanism/elf_capture.cpp +++ b/src/datacrumbs/explorer/mechanism/elf_capture.cpp @@ -93,7 +93,7 @@ std::vector ElfSymbolExtractor::extract_symbols() { if (symbols_map.find(name) == symbols_map.end()) { symbols_map[name] = std::unordered_set(); } - if (!name.empty()) { + if (!name.empty() && name.find(':') == std::string::npos) { char buffer[32]; unsigned long offset = static_cast( syms[j].st_value); // TODO(Hari): Explore if i have to relocate for virtual address diff --git a/src/datacrumbs/explorer/probe_explorer.cpp b/src/datacrumbs/explorer/probe_explorer.cpp index 93277e51..12d5c1f0 100644 --- a/src/datacrumbs/explorer/probe_explorer.cpp +++ b/src/datacrumbs/explorer/probe_explorer.cpp @@ -135,6 +135,8 @@ std::vector> ProbeExplorer::extractProbes() { } } + auto existingProbesMap = loadExistingProbes(); + static std::unordered_set global_function_names; std::vector> probes; // Iterate over all capture probes from configuration @@ -163,7 +165,65 @@ std::vector> ProbeExplorer::extractProbes() { DC_LOG_ERROR("Unknown probe type encountered in extractProbes()"); throw std::runtime_error("Unknown probe type encountered in extractProbes()"); } + if (!capture_probe->enable_explorer) { + // Check if probe already exists and can be reused + auto existingProbeIt = existingProbesMap.find(capture_probe->name); + if (existingProbeIt != existingProbesMap.end()) { + DC_LOG_INFO("Found existing probe '%s', reusing it", capture_probe->name.c_str()); + auto existingProbe = existingProbeIt->second; + + // Copy fields from existing probe to new probe + probe->name = existingProbe->name; + probe->functions = existingProbe->functions; + // Copy type-specific fields based on probe type + switch (capture_probe->probe_type) { + case ProbeType::UPROBE: + if (auto existingUprobe = std::dynamic_pointer_cast(existingProbe)) { + if (auto uprobe = std::dynamic_pointer_cast(probe)) { + uprobe->binary_path = existingUprobe->binary_path; + uprobe->include_offsets = existingUprobe->include_offsets; + } + } + break; + case ProbeType::USDT: + if (auto existingUsdtProbe = std::dynamic_pointer_cast(existingProbe)) { + if (auto usdtProbe = std::dynamic_pointer_cast(probe)) { + usdtProbe->binary_path = existingUsdtProbe->binary_path; + usdtProbe->provider = existingUsdtProbe->provider; + } + } + break; + case ProbeType::CUSTOM: + if (auto existingCustomProbe = std::dynamic_pointer_cast(existingProbe)) { + if (auto customProbe = std::dynamic_pointer_cast(probe)) { + customProbe->bpf_path = existingCustomProbe->bpf_path; + customProbe->start_event_id = existingCustomProbe->start_event_id; + customProbe->process_header = existingCustomProbe->process_header; + customProbe->event_type = existingCustomProbe->event_type; + } + } + break; + default: + // For SYSCALLS and KPROBE, no additional fields to copy + break; + } + DC_LOG_INFO("Reused existing probe: %s", probe->name.c_str()); + + // Validate the existing probe and add it to the list + if (probe->validate()) { + DC_LOG_INFO("Valid probe reused: %s", probe->name.c_str()); + probes.push_back(probe); + continue; // Skip the rest of the processing for this probe + } else { + DC_LOG_WARN("Existing probe '%s' failed validation, will extract fresh", + probe->name.c_str()); + } + } else { + DC_LOG_INFO("No existing probe found for '%s', will extract fresh", + capture_probe->name.c_str()); + } + } // Extract function names based on capture type switch (capture_probe->type) { case CaptureType::HEADER: @@ -505,6 +565,173 @@ void ProbeExplorer::create_exclusion_file(std::vector> pr DC_LOG_TRACE("ProbeExplorer::create_exclusion_file - end"); } +// Loads existing probes from JSON file and builds a map for querying +std::unordered_map> ProbeExplorer::loadExistingProbes() { + DC_LOG_TRACE("ProbeExplorer::loadExistingProbes - start"); + std::unordered_map> existingProbesMap; + + if (!configManager_->probe_file_path.empty() && + std::filesystem::exists(configManager_->probe_file_path)) { + std::ifstream ifs(configManager_->probe_file_path); + if (ifs.is_open()) { + std::string content((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + json_object* jobj = json_tokener_parse(content.c_str()); + + if (jobj && json_object_get_type(jobj) == json_type_array) { + int arr_len = json_object_array_length(jobj); + for (int i = 0; i < arr_len; ++i) { + json_object* probe_obj = json_object_array_get_idx(jobj, i); + if (!probe_obj) { + DC_LOG_WARN("Probe object at index %d is null", i); + continue; + } + + json_object* name_obj = nullptr; + json_object* type_obj = nullptr; + + if (json_object_object_get_ex(probe_obj, "name", &name_obj) && + json_object_object_get_ex(probe_obj, "type", &type_obj) && + json_object_get_type(name_obj) == json_type_string && + json_object_get_type(type_obj) == json_type_int) { + std::string probe_name = json_object_get_string(name_obj); + ProbeType probe_type = static_cast(json_object_get_int(type_obj)); + + std::shared_ptr probe; + + // Create appropriate probe type based on the type field + switch (probe_type) { + case ProbeType::UPROBE: + probe = std::make_shared(); + probe->type = ProbeType::UPROBE; + break; + case ProbeType::SYSCALLS: + probe = std::make_shared(); + probe->type = ProbeType::SYSCALLS; + break; + case ProbeType::USDT: + probe = std::make_shared(); + probe->type = ProbeType::USDT; + break; + case ProbeType::KPROBE: + probe = std::make_shared(); + probe->type = ProbeType::KPROBE; + break; + case ProbeType::CUSTOM: + probe = std::make_shared(); + probe->type = ProbeType::CUSTOM; + break; + default: + DC_LOG_WARN("Unknown probe type '%d' for probe '%s'", static_cast(probe_type), + probe_name.c_str()); + continue; + } + + probe->name = probe_name; + + // Load functions array if present + json_object* funcs_obj = nullptr; + if (json_object_object_get_ex(probe_obj, "functions", &funcs_obj) && + json_object_get_type(funcs_obj) == json_type_array) { + int func_len = json_object_array_length(funcs_obj); + for (int j = 0; j < func_len; ++j) { + json_object* func_obj = json_object_array_get_idx(funcs_obj, j); + if (func_obj && json_object_get_type(func_obj) == json_type_string) { + probe->functions.push_back(json_object_get_string(func_obj)); + } + } + } + + // Load type-specific fields + switch (probe_type) { + case ProbeType::UPROBE: + if (auto uprobe = std::dynamic_pointer_cast(probe)) { + json_object* binary_path_obj = nullptr; + json_object* include_offsets_obj = nullptr; + if (json_object_object_get_ex(probe_obj, "binary_path", &binary_path_obj) && + json_object_get_type(binary_path_obj) == json_type_string) { + uprobe->binary_path = json_object_get_string(binary_path_obj); + } + if (json_object_object_get_ex(probe_obj, "include_offsets", + &include_offsets_obj) && + json_object_get_type(include_offsets_obj) == json_type_boolean) { + uprobe->include_offsets = json_object_get_boolean(include_offsets_obj); + } + } + break; + case ProbeType::USDT: + if (auto usdtProbe = std::dynamic_pointer_cast(probe)) { + json_object* binary_path_obj = nullptr; + json_object* provider_obj = nullptr; + if (json_object_object_get_ex(probe_obj, "binary_path", &binary_path_obj) && + json_object_get_type(binary_path_obj) == json_type_string) { + usdtProbe->binary_path = json_object_get_string(binary_path_obj); + } + if (json_object_object_get_ex(probe_obj, "provider", &provider_obj) && + json_object_get_type(provider_obj) == json_type_string) { + usdtProbe->provider = json_object_get_string(provider_obj); + } + } + break; + case ProbeType::CUSTOM: + if (auto customProbe = std::dynamic_pointer_cast(probe)) { + json_object* bpf_path_obj = nullptr; + json_object* start_event_id_obj = nullptr; + json_object* process_header_obj = nullptr; + json_object* event_type_obj = nullptr; + + if (json_object_object_get_ex(probe_obj, "bpf_path", &bpf_path_obj) && + json_object_get_type(bpf_path_obj) == json_type_string) { + customProbe->bpf_path = json_object_get_string(bpf_path_obj); + } + if (json_object_object_get_ex(probe_obj, "start_event_id", &start_event_id_obj) && + json_object_get_type(start_event_id_obj) == json_type_int) { + customProbe->start_event_id = json_object_get_int(start_event_id_obj); + } + if (json_object_object_get_ex(probe_obj, "process_header", &process_header_obj) && + json_object_get_type(process_header_obj) == json_type_string) { + customProbe->process_header = json_object_get_string(process_header_obj); + } + if (json_object_object_get_ex(probe_obj, "event_type", &event_type_obj) && + json_object_get_type(event_type_obj) == json_type_int) { + customProbe->event_type = json_object_get_int(event_type_obj); + } + } + break; + case ProbeType::SYSCALLS: + case ProbeType::KPROBE: + // No additional fields to load for these types + break; + default: + // Already handled above, should not reach here + break; + } + + existingProbesMap[probe_name] = probe; + DC_LOG_DEBUG("Loaded existing probe: %s with %zu functions", probe_name.c_str(), + probe->functions.size()); + } else { + DC_LOG_WARN("Probe at index %d missing required 'name' or 'type' field", i); + } + } + } else { + DC_LOG_WARN("Existing probe file is not a valid JSON array"); + } + + if (jobj) json_object_put(jobj); + } else { + DC_LOG_ERROR("Failed to open existing probe file: %s", + configManager_->probe_file_path.string().c_str()); + } + } else { + DC_LOG_INFO("No existing probe file found at: %s", + configManager_->probe_file_path.string().c_str()); + } + + DC_LOG_INFO("Loaded %zu existing probes", existingProbesMap.size()); + DC_LOG_TRACE("ProbeExplorer::loadExistingProbes - end"); + return existingProbesMap; +} + // Writes extracted probes to a JSON file and returns the probe list std::vector> ProbeExplorer::writeProbesToJson() { DC_LOG_TRACE("ProbeExplorer::writeProbesToJson - start"); diff --git a/src/datacrumbs/explorer/probe_explorer.h b/src/datacrumbs/explorer/probe_explorer.h index 40c57c0f..2ec25b4a 100644 --- a/src/datacrumbs/explorer/probe_explorer.h +++ b/src/datacrumbs/explorer/probe_explorer.h @@ -42,6 +42,9 @@ class ProbeExplorer { // Returns a vector of shared pointers to Probe objects std::vector> writeProbesToJson(); + // Loads existing probes from a JSON file + std::unordered_map> loadExistingProbes(); + bool has_invalid_probes_ = false; // Flag to indicate if any invalid probes were found private: diff --git a/src/datacrumbs/server/bpf/common.h b/src/datacrumbs/server/bpf/common.h index 669885cc..b743ca22 100644 --- a/src/datacrumbs/server/bpf/common.h +++ b/src/datacrumbs/server/bpf/common.h @@ -31,7 +31,6 @@ DATACRUMBS_TRIE_EXTERN(inclusion_path_trie, struct string_t, struct string_t); static inline __attribute__((always_inline)) u32 hash_str(const char* str, size_t len) { u32 hash = 5381; -#pragma unroll for (int i = 0; i < 128; ++i) { if (i >= len) break; hash = ((hash << 5) + hash) + str[i]; diff --git a/src/datacrumbs/server/process/event_processor.cpp b/src/datacrumbs/server/process/event_processor.cpp index 1ab96f9f..2fb9ed8b 100644 --- a/src/datacrumbs/server/process/event_processor.cpp +++ b/src/datacrumbs/server/process/event_processor.cpp @@ -148,9 +148,9 @@ int EventProcessor::handle_event(void* data, size_t data_sz) { DC_LOG_WARN("No category found for event_id %llu", event->event_id); } DC_LOG_TRACE("handle_event: end"); - std::string progress_msg = - "Processed events failed: " + std::to_string(failed_events) + " current:"; - if (configManager_->mpi_rank == 0) DC_LOG_PROGRESS_SINGLE(progress_msg.c_str(), event_index); + // std::string progress_msg = + // "Processed events failed: " + std::to_string(failed_events) + " current:"; + // if (configManager_->mpi_rank == 0) DC_LOG_PROGRESS_SINGLE(progress_msg.c_str(), event_index); return 0; } int EventProcessor::update_filename(const char* filename, unsigned int hash) { @@ -158,9 +158,11 @@ int EventProcessor::update_filename(const char* filename, unsigned int hash) { DC_LOG_DEBUG("Filename %s with hash %u already processed, skipping", filename, hash); return 0; // Skip if already processed } + auto file_str = utils::remove_non_utf8(filename); + processed_hashes_.insert(hash); // Mark this hash as processed auto args = new DataCrumbsArgs(); - args->emplace("value", std::string(filename)); + args->emplace("value", file_str); args->emplace("hash", hash); auto event = new datacrumbs::EventWithId(METADATA_EVENT, event_index.fetch_add(1), 0, 0, 0, 0, 0, args); @@ -170,6 +172,7 @@ int EventProcessor::update_filename(const char* filename, unsigned int hash) { return 0; } int EventProcessor::finalize() { + DC_LOG_PRINT("Collected %d events and failed %d events", event_index.load(), failed_events); auto writer_ = datacrumbs::Singleton::get_instance(); if (writer_) { writer_->finalize(); diff --git a/src/datacrumbs/server/process/server.impl.cpp b/src/datacrumbs/server/process/server.impl.cpp index 70f011e5..a75c6bbe 100644 --- a/src/datacrumbs/server/process/server.impl.cpp +++ b/src/datacrumbs/server/process/server.impl.cpp @@ -519,17 +519,27 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event // Main event polling loop signal(SIGINT, sig_handler); if (event_processor->configManager_->mpi_rank == 0) { - std::string ready_file = std::string(DATACRUMBS_INSTALL_RUNSTATEDIR) + "/datacrumbs_" + - event_processor->configManager_->user + "_" + - event_processor->configManager_->run_id + ".ready"; + std::string ready_file; + const char* env_ready_file = getenv("DATACRUMBS_SERVER_READY_FILE"); + if (env_ready_file) { + ready_file = std::string(env_ready_file); + } else { + ready_file = std::string(DATACRUMBS_INSTALL_RUNSTATEDIR) + "/datacrumbs-" + + event_processor->configManager_->run_id + ".ready"; + } std::ofstream ofs_ready(ready_file); ofs_ready << "ready" << std::endl; ofs_ready.close(); - auto pwd = getpwnam(event_processor->configManager_->user.c_str()); - uid_t uid = pwd ? pwd->pw_uid : static_cast(-1); - gid_t gid = pwd ? pwd->pw_gid : static_cast(-1); - chown(ready_file.c_str(), uid, gid); - chmod(ready_file.c_str(), 0660); + if (ready_file.substr(0, 4) != "/run" && ready_file.substr(0, 8) != "/var/run") { + auto pwd = getpwnam(event_processor->configManager_->user.c_str()); + auto uid = pwd ? pwd->pw_uid : static_cast(-1); + auto gid = pwd ? pwd->pw_gid : static_cast(-1); + chown(ready_file.c_str(), uid, gid); + chmod(ready_file.c_str(), 0660); + } + DC_LOG_INFO("Ready file created: %s for user:%s on %d nodes", ready_file.c_str(), + event_processor->configManager_->user.c_str(), + event_processor->configManager_->mpi_size); DC_LOG_PRINT("Server running on %d nodes. Ready to run the code.", event_processor->configManager_->mpi_size); } @@ -777,8 +787,14 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event DC_LOG_PRINT("Total events: sum=%d, min=%d, max=%d", global_total_events_sum, global_total_events_min, global_total_events_max); // Write status info to JSON file for postprocessing - std::string status_file = "/tmp/datacrumbs_" + event_processor->configManager_->user + - "_status_" + event_processor->configManager_->run_id + ".json"; + std::string status_file; + const char* env_statusfile = getenv("DATACRUMBS_SERVER_STATUS_FILE"); + if (env_statusfile) { + status_file = std::string(env_statusfile); + } else { + status_file = std::string(DATACRUMBS_INSTALL_RUNSTATEDIR) + "/datacrumbs-" + + event_processor->configManager_->run_id + ".json"; + } struct json_object* status_json = json_object_new_object(); json_object_object_add( status_json, "trace_file", @@ -792,11 +808,13 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event DC_LOG_ERROR("Failed to write status file: %s", status_file.c_str()); } json_object_put(status_json); - auto pwd = getpwnam(event_processor->configManager_->user.c_str()); - auto uid = pwd ? pwd->pw_uid : static_cast(-1); - auto gid = pwd ? pwd->pw_gid : static_cast(-1); - chown(status_file.c_str(), uid, gid); - chmod(status_file.c_str(), 0660); + if (status_file.substr(0, 4) != "/run" && status_file.substr(0, 8) != "/var/run") { + auto pwd = getpwnam(event_processor->configManager_->user.c_str()); + auto uid = pwd ? pwd->pw_uid : static_cast(-1); + auto gid = pwd ? pwd->pw_gid : static_cast(-1); + chown(status_file.c_str(), uid, gid); + chmod(status_file.c_str(), 0660); + } } DC_LOG_TRACE("main: end"); @@ -810,9 +828,14 @@ static int main_call(int argc, char** argv) { event_processor.configManager_->load_mpi_configurations(); } - std::string hostname = get_hostname(); - std::string pidfile = event_processor.configManager_->log_dir + "/datacrumbs_" + hostname + "_" + - event_processor.configManager_->run_id + ".pid"; + std::string pidfile; + const char* env_pidfile = getenv("DATACRUMBS_SERVER_PID_FILE"); + if (env_pidfile) { + pidfile = std::string(env_pidfile); + } else { + pidfile = std::string(DATACRUMBS_INSTALL_RUNSTATEDIR) + "/datacrumbs-" + + event_processor.configManager_->run_id + ".pid"; + } int return_code = 0; if (event_processor.configManager_->mpi_rank == 0 && @@ -824,6 +847,7 @@ static int main_call(int argc, char** argv) { return_code = main_process(argc, argv, &event_processor, false); } else if (event_processor.configManager_->exe_mode == datacrumbs::ExecutableMode::START) { daemonize(); + std::string hostname = get_hostname(); std::string logfile = event_processor.configManager_->log_dir + "/datacrumbs_" + event_processor.configManager_->user + "_" + hostname + "_" + event_processor.configManager_->run_id + ".log"; diff --git a/src/datacrumbs/validator/probe_validator.cpp b/src/datacrumbs/validator/probe_validator.cpp index 8f216bc7..4f5c2121 100644 --- a/src/datacrumbs/validator/probe_validator.cpp +++ b/src/datacrumbs/validator/probe_validator.cpp @@ -10,21 +10,84 @@ #include // Logging header #include // std headers +#include #include +#include #include #include #include #include +#include +#include #include #include #include #include #include #include -#include #include + namespace datacrumbs { + +// Function to pretty print invalid probes categorized by probe name +void prettyPrintInvalidProbes( + const std::unordered_map>& invalid_function_names, + size_t total_probes, size_t invalid_probes) { + std::cout << "\n"; + std::cout << "╔════════════════════════════════════════════════════════════════════════════╗\n"; + std::cout << "║ PROBE VALIDATION SUMMARY ║\n"; + std::cout << "╠════════════════════════════════════════════════════════════════════════════╣\n"; + std::cout << "║ Total Probes: " << std::setw(58) << std::left << total_probes << "║\n"; + std::cout << "║ Invalid Probes: " << std::setw(58) << std::left << invalid_probes << "║\n"; + std::cout << "║ Valid Probes: " << std::setw(58) << std::left << (total_probes - invalid_probes) + << "║\n"; + std::cout << "╚════════════════════════════════════════════════════════════════════════════╝\n"; + + if (invalid_function_names.empty()) { + std::cout << "\n✅ All probes validated successfully!\n\n"; + return; + } + + std::cout << "\n"; + std::cout << "╔═══════════════════════════════════════════════════════════════════════════╗\n"; + std::cout << "║ INVALID PROBES BY CATEGORY ║\n"; + std::cout << "╚════════════════════════════════════════════════════════════════════════════╝\n"; + + for (const auto& [category, functions] : invalid_function_names) { + std::cout << "\n┌─ Category: " << category << " (" << functions.size() << " invalid)\n"; + std::cout << "│\n"; + + // Show first 10 invalid functions for each category + size_t max_display = std::min(10, functions.size()); + for (size_t i = 0; i < max_display; ++i) { + std::cout << "│ ✗ " << functions[i] << "\n"; + } + + if (functions.size() > max_display) { + std::cout << "│ ... and " << (functions.size() - max_display) << " more\n"; + } + std::cout << "└─────────────────────────────────────────────────────────────────────────────\n"; + } + + std::cout << "\n"; +} + +// Function to set memory limit to 2GB +bool setMemoryLimit(size_t limit_mb = 2048) { + struct rlimit limit; + limit.rlim_cur = limit_mb * 1024 * 1024; // 2GB in bytes + limit.rlim_max = limit_mb * 1024 * 1024; // 2GB in bytes + + if (setrlimit(RLIMIT_AS, &limit) != 0) { + DC_LOG_ERROR("Failed to set memory limit: %s", strerror(errno)); + return false; + } + + DC_LOG_INFO("Memory limit set to %zu MB", limit_mb); + return true; +} + class ProbeValidator { public: ProbeValidator(int argc, char** argv) { @@ -45,6 +108,16 @@ class ProbeValidator { DC_LOG_ERROR("Failed to read probes file: %s", probesFile.c_str()); return invalid_function_names; } + + // Use RAII wrapper for automatic cleanup + auto json_cleanup = [](struct json_object* ptr) { + if (ptr) { + json_object_put(ptr); + } + }; + std::unique_ptr json_guard(probesJson, + json_cleanup); + int arr_len = json_object_array_length(probesJson); DC_LOG_INFO("[ProbeGenerator] Number of probes: %d", arr_len); struct bpf_program* kprobe_prog = bpf_object__find_program_by_name(skel->obj, "kprobe_test"); @@ -70,12 +143,12 @@ class ProbeValidator { std::atomic atomic_invalid_probes{0}; std::atomic atomic_current_probe{0}; - auto validate_func = [&](const Probe& probe, const std::string& func, - struct json_object* jprobe) { + auto validate_func = [&](const std::string& probe_name, ProbeType probe_type, + const std::string& func, struct json_object* jprobe) { atomic_current_probe++; DC_LOG_PROGRESS("Validating probe", atomic_current_probe.load(), total_probes); bool is_invalid = false; - if (probe.type == ProbeType::KPROBE) { + if (probe_type == ProbeType::KPROBE) { struct bpf_kprobe_opts opts = { .sz = sizeof(struct bpf_kprobe_opts), }; @@ -85,7 +158,7 @@ class ProbeValidator { } else { bpf_link__destroy(link); } - } else if (probe.type == ProbeType::UPROBE) { + } else if (probe_type == ProbeType::UPROBE) { auto uprobe = UProbe::fromJson(jprobe); std::string function_name, offset; auto pos = func.find(':'); @@ -109,7 +182,7 @@ class ProbeValidator { } else { bpf_link__destroy(link); } - } else if (probe.type == ProbeType::SYSCALLS) { + } else if (probe_type == ProbeType::SYSCALLS) { struct bpf_ksyscall_opts opts = { .sz = sizeof(struct bpf_ksyscall_opts), }; @@ -123,7 +196,7 @@ class ProbeValidator { if (is_invalid) { atomic_invalid_probes++; std::lock_guard lock(invalid_mutex); - invalid_function_names[probe.name].push_back(func); + invalid_function_names[probe_name].push_back(func); } }; @@ -134,7 +207,9 @@ class ProbeValidator { std::mutex queue_mutex; std::condition_variable cv; bool done = false; - std::queue> task_queue; + + // Store probe_name, probe_type, function_name, and json_object + std::queue> task_queue; // Producer: enqueue all validation tasks for (int i = 0; i < arr_len; ++i) { @@ -143,7 +218,8 @@ class ProbeValidator { for (size_t func_index = 0; func_index < probe.functions.size(); ++func_index) { const auto& func = probe.functions[func_index]; std::lock_guard lock(queue_mutex); - task_queue.emplace(probe, func, jprobe); + // Store copies of probe.name and probe.type to avoid race conditions + task_queue.emplace(probe.name, probe.type, func, jprobe); } } @@ -151,7 +227,6 @@ class ProbeValidator { for (size_t i = 0; i < num_workers; ++i) { workers.emplace_back([&]() { while (true) { - std::tuple task; { std::unique_lock lock(queue_mutex); cv.wait(lock, [&]() { return !task_queue.empty() || done; }); @@ -161,10 +236,19 @@ class ProbeValidator { else continue; } - // Move declaration and initialization together to avoid default construction - auto task = std::move(task_queue.front()); + // Extract data from the queue with proper copies + auto& front_task = task_queue.front(); + std::string probe_name = std::get<0>(front_task); + ProbeType probe_type = std::get<1>(front_task); + std::string func = std::get<2>(front_task); + struct json_object* jprobe = std::get<3>(front_task); task_queue.pop(); - validate_func(std::get<0>(task), std::get<1>(task), std::get<2>(task)); + + // Release lock before validation (which can be slow) + lock.unlock(); + + // Now validate with copied data + validate_func(probe_name, probe_type, func, jprobe); } } }); @@ -180,6 +264,21 @@ class ProbeValidator { for (auto& t : workers) t.join(); invalid_probes = atomic_invalid_probes.load(); + + // Verify counts match - diagnostic check + size_t total_invalid_stored = 0; + for (const auto& [name, functions] : invalid_function_names) { + total_invalid_stored += functions.size(); + } + + if (total_invalid_stored != invalid_probes) { + DC_LOG_ERROR("Race condition detected! Invalid probes counted: %zu, but stored: %zu", + invalid_probes, total_invalid_stored); + } else { + DC_LOG_INFO("Validation counts verified: %zu invalid probes counted and stored", + invalid_probes); + } + return invalid_function_names; } size_t total_probes() const { return configManager_->category_map.size(); } @@ -191,13 +290,26 @@ class ProbeValidator { } // namespace datacrumbs int main(int argc, char** argv) { + // Set memory limit to 2GB + if (!datacrumbs::setMemoryLimit(2048)) { + DC_LOG_ERROR("Failed to set memory limit, continuing anyway..."); + } + auto configManager_ = datacrumbs::Singleton::get_instance(argc, argv); + struct validator* skel = validator__open_and_load(); if (!skel) { DC_LOG_ERROR("Failed to open and load datacrumbs_validator BPF skeleton"); return 1; } + + // Use RAII for skeleton cleanup + auto skel_cleanup = [](struct validator* s) { + if (s) validator__destroy(s); + }; + std::unique_ptr skel_guard(skel, skel_cleanup); + size_t invalid_probes = 0; try { datacrumbs::ProbeValidator validator(argc, argv); @@ -206,6 +318,10 @@ int main(int argc, char** argv) { invalid_probes = validator.invalid_probes; DC_LOG_INFO("\nProbe validation completed: total_probes=%zu, invalid_probes=%zu", total_probes, invalid_probes); + + // Pretty print the invalid probes categorized by category + datacrumbs::prettyPrintInvalidProbes(invalid_function_names, total_probes, invalid_probes); + struct json_object* invalid_probesJson = json_object_from_file(configManager_->probe_file_path.c_str()); // Iterate over probesJson array, clear functions attribute for all probes, then add invalid @@ -249,10 +365,8 @@ int main(int argc, char** argv) { chmod(configManager_->probe_invalid_file_path.c_str(), 0640); } catch (const std::exception& ex) { DC_LOG_ERROR("Exception: %s", ex.what()); - validator__destroy(skel); return -1; } - validator__destroy(skel); return invalid_probes > 0 ? -1 : 0; } \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9e2b7392..313733c8 100755 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,2 +1,2 @@ add_subdirectory(unittests) -add_subdirectory(benchmarks/ior) \ No newline at end of file +add_subdirectory(benchmarks/ior) diff --git a/tests/benchmarks/ior/CMakeLists.txt b/tests/benchmarks/ior/CMakeLists.txt index 93e7a3ea..efbf7c55 100644 --- a/tests/benchmarks/ior/CMakeLists.txt +++ b/tests/benchmarks/ior/CMakeLists.txt @@ -1,62 +1,45 @@ -find_program(IOR_EXECUTABLE NAMES ior PATHS ENV PATH) +find_program( + IOR_EXECUTABLE + NAMES ior + PATHS ENV PATH +) if(IOR_EXECUTABLE) - message(STATUS "Found IOR: ${IOR_EXECUTABLE}") - set(ENABLE_IOR_TESTS ON) + message(STATUS "Found IOR: ${IOR_EXECUTABLE}") + set(ENABLE_IOR_TESTS ON) else() - message(STATUS "IOR binary not found. IOR tests will be disabled.") - set(ENABLE_IOR_TESTS OFF) + message(STATUS "IOR binary not found. IOR tests will be disabled.") + set(ENABLE_IOR_TESTS OFF) endif() -set(DATACRUMBS_TEST_DIR "/tmp" CACHE STRING "Directory for Datacrumbs test files") +set(DATACRUMBS_TEST_DIR + "/tmp" + CACHE STRING "Directory for Datacrumbs test files" +) if(ENABLE_IOR_TESTS AND ENABLE_MPIRUN_TEST) - add_test( - NAME ior_posix_file_per_process - COMMAND ${MPIRUN_EXECUTABLE} -np 16 - -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} - ${IOR_EXECUTABLE} - -a POSIX - -F - -t 1m - -b 32m - -o ${DATACRUMBS_TEST_DIR}/ior_testfile - ) - add_test( - NAME ior_mpiio_collective_shared - COMMAND ${MPIRUN_EXECUTABLE} -np 16 - -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} - ${IOR_EXECUTABLE} - -a MPIIO - -c - -t 1m - -b 32m - -w -r - -o ${DATACRUMBS_TEST_DIR}/ior_mpiio_testfile - ) - add_test( - NAME ior_hdf5_collective_shared - COMMAND ${MPIRUN_EXECUTABLE} -np 16 - -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} - ${IOR_EXECUTABLE} - -a HDF5 - -C - -t 1m - -b 32m - -w -r - -o ${DATACRUMBS_TEST_DIR}/ior_hdf5_collective_testfile - ) + add_test( + NAME ior_posix_file_per_process + COMMAND ${MPIRUN_EXECUTABLE} -np 16 -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} + ${IOR_EXECUTABLE} -a POSIX -F -t 1m -b 32m -o ${DATACRUMBS_TEST_DIR}/ior_testfile + ) + add_test( + NAME ior_mpiio_collective_shared + COMMAND + ${MPIRUN_EXECUTABLE} -np 16 -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} ${IOR_EXECUTABLE} -a + MPIIO -c -t 1m -b 32m -w -r -o ${DATACRUMBS_TEST_DIR}/ior_mpiio_testfile + ) + add_test( + NAME ior_hdf5_collective_shared + COMMAND + ${MPIRUN_EXECUTABLE} -np 16 -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} ${IOR_EXECUTABLE} -a + HDF5 -C -t 1m -b 32m -w -r -o ${DATACRUMBS_TEST_DIR}/ior_hdf5_collective_testfile + ) - add_test( - NAME ior_hdf5_file_per_process - COMMAND ${MPIRUN_EXECUTABLE} -np 16 - -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} - ${IOR_EXECUTABLE} - -a HDF5 - -F - -t 1m - -b 32m - -w -r - -o ${DATACRUMBS_TEST_DIR}/ior_hdf5_fpp_testfile - ) + add_test( + NAME ior_hdf5_file_per_process + COMMAND + ${MPIRUN_EXECUTABLE} -np 16 -x LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO} ${IOR_EXECUTABLE} -a + HDF5 -F -t 1m -b 32m -w -r -o ${DATACRUMBS_TEST_DIR}/ior_hdf5_fpp_testfile + ) endif() diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt index 005aae41..bbe09f72 100644 --- a/tests/unittests/CMakeLists.txt +++ b/tests/unittests/CMakeLists.txt @@ -1 +1 @@ -add_subdirectory(io_tests) \ No newline at end of file +add_subdirectory(io_tests) diff --git a/tests/unittests/io_tests/CMakeLists.txt b/tests/unittests/io_tests/CMakeLists.txt index 0e5e72cf..46d0aa5e 100644 --- a/tests/unittests/io_tests/CMakeLists.txt +++ b/tests/unittests/io_tests/CMakeLists.txt @@ -1,18 +1,18 @@ find_package(MPI) if(MPI_FOUND) - find_program(MPIRUN_EXECUTABLE mpirun) + find_program(MPIRUN_EXECUTABLE mpirun) - if(MPIRUN_EXECUTABLE) - message(STATUS "Found mpirun: ${MPIRUN_EXECUTABLE}") - set(ENABLE_MPIRUN_TEST ON) - else() - message(STATUS "mpirun binary not found. mpirun tests will be disabled.") - set(ENABLE_MPIRUN_TEST OFF) - endif() + if(MPIRUN_EXECUTABLE) + message(STATUS "Found mpirun: ${MPIRUN_EXECUTABLE}") + set(ENABLE_MPIRUN_TEST ON) + else() + message(STATUS "mpirun binary not found. mpirun tests will be disabled.") + set(ENABLE_MPIRUN_TEST OFF) + endif() - add_executable(df_tracer_test test.cpp) - target_link_libraries(df_tracer_test MPI::MPI_CXX) - add_executable(df_tracer_test_stdio test_stdio.cpp) - target_link_libraries(df_tracer_test_stdio MPI::MPI_CXX) -endif() \ No newline at end of file + add_executable(df_tracer_test test.cpp) + target_link_libraries(df_tracer_test MPI::MPI_CXX) + add_executable(df_tracer_test_stdio test_stdio.cpp) + target_link_libraries(df_tracer_test_stdio MPI::MPI_CXX) +endif() diff --git a/tests/unittests/io_tests/scripts/ior.sh b/tests/unittests/io_tests/scripts/ior.sh index dd2fcd9e..3a88748e 100755 --- a/tests/unittests/io_tests/scripts/ior.sh +++ b/tests/unittests/io_tests/scripts/ior.sh @@ -1,5 +1,5 @@ #!/bin/bash -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" &>/dev/null && pwd 2>/dev/null)" echo $SCRIPT_DIR TEST_DIR=$(dirname $SCRIPT_DIR) PROJECT_DIR=$(dirname $TEST_DIR) @@ -68,8 +68,7 @@ for i in {1..10}; do elapsed_time=$((end_time - start_time)) echo "Time taken for write iteration:$i: ${elapsed_time} seconds" sleep 10 - if [ "$DROP_CACHES" -eq "1" ]; - then + if [ "$DROP_CACHES" -eq "1" ]; then echo "Clean Cache" sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" fi @@ -78,4 +77,4 @@ for i in {1..10}; do mpirun -n 24 $LD_PRELOAD_ARG ${IOR_DIR}/bin/ior ${configuration} -r elapsed_time=$((end_time - start_time)) echo "Time taken for read iteration:$i: ${elapsed_time} seconds" -done \ No newline at end of file +done diff --git a/tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh b/tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh index d7ee739c..f63aeac2 100755 --- a/tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh +++ b/tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh @@ -1,5 +1,5 @@ #!/bin/bash -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" &>/dev/null && pwd 2>/dev/null)" echo $SCRIPT_DIR TEST_DIR=$(dirname $SCRIPT_DIR) PROJECT_DIR=$(dirname $TEST_DIR) @@ -15,6 +15,6 @@ rm -rf $DATA_DIR/* BLOCK=32m PROC=40 ts=1m -cmd=(mpirun -np ${PROC} -x LD_PRELOAD=$DATACRUMBS_SO ${IOR_INSTALL_DIR}/bin/ior -o=${DATA_DIR}/test-${ts} -b=${BLOCK} -i=1 -t=${ts} -a=HDF5 -F) +cmd=(mpirun -np ${PROC} -x LD_PRELOAD=$DATACRUMBS_SO ${IOR_INSTALL_DIR}/bin/ior -o=${DATA_DIR}/test-${ts} -b=${BLOCK} -i=1 -t=${ts} -a=HDF5 -F) echo "${cmd[@]}" -"${cmd[@]}" \ No newline at end of file +"${cmd[@]}" diff --git a/tests/unittests/io_tests/scripts/ior_mpiio.sh b/tests/unittests/io_tests/scripts/ior_mpiio.sh index 9c282b49..2ab862c6 100755 --- a/tests/unittests/io_tests/scripts/ior_mpiio.sh +++ b/tests/unittests/io_tests/scripts/ior_mpiio.sh @@ -1,5 +1,5 @@ #!/bin/bash -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" &>/dev/null && pwd 2>/dev/null)" echo $SCRIPT_DIR TEST_DIR=$(dirname $SCRIPT_DIR) PROJECT_DIR=$(dirname $TEST_DIR) @@ -15,6 +15,6 @@ rm -rf $DATA_DIR/* BLOCK=32m PROC=10 ts=1m -cmd=(mpirun -np ${PROC} -x LD_PRELOAD=$DATACRUMBS_SO ${IOR_INSTALL_DIR}/bin/ior -o=${DATA_DIR}/test-${ts} -b=${BLOCK} -i=1 -t=${ts} -a=MPIIO -c) +cmd=(mpirun -np ${PROC} -x LD_PRELOAD=$DATACRUMBS_SO ${IOR_INSTALL_DIR}/bin/ior -o=${DATA_DIR}/test-${ts} -b=${BLOCK} -i=1 -t=${ts} -a=MPIIO -c) echo "${cmd[@]}" -"${cmd[@]}" \ No newline at end of file +"${cmd[@]}" diff --git a/tests/unittests/io_tests/scripts/test_posix.sh b/tests/unittests/io_tests/scripts/test_posix.sh index ad4bb715..37d48dbc 100755 --- a/tests/unittests/io_tests/scripts/test_posix.sh +++ b/tests/unittests/io_tests/scripts/test_posix.sh @@ -1,5 +1,5 @@ #!/bin/bash -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" &>/dev/null && pwd 2>/dev/null)" echo $SCRIPT_DIR TEST_DIR=$(dirname $SCRIPT_DIR) PROJECT_DIR=$(dirname $TEST_DIR) @@ -26,8 +26,7 @@ if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then rm -rf $DATA_DIR/* fi -for TSKB in $((1*1024)); #1 4 16 64 256 1024 4096 16384 65536 262144 -do +for TSKB in $((1 * 1024)); do #1 4 16 64 256 1024 4096 16384 65536 262144 TS=$((TSKB * 1024)) if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then cmd=(${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} 0 ${DIRECTIO}) @@ -40,10 +39,8 @@ do fi if [ "$TEST_CASE" -eq "1" ] || [ "$TEST_CASE" -eq "2" ]; then sleep 5 - cmd=( ${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} 1 ${DIRECTIO}) + cmd=(${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} 1 ${DIRECTIO}) echo "${cmd[@]}" LD_PRELOAD=${DATACRUMBS_SO} "${cmd[@]}" fi done - - diff --git a/tests/unittests/io_tests/scripts/test_posix_overhead.sh b/tests/unittests/io_tests/scripts/test_posix_overhead.sh index 2b608321..96bd3c8a 100755 --- a/tests/unittests/io_tests/scripts/test_posix_overhead.sh +++ b/tests/unittests/io_tests/scripts/test_posix_overhead.sh @@ -1,5 +1,5 @@ #!/bin/bash -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" &>/dev/null && pwd 2>/dev/null)" echo $SCRIPT_DIR TEST_DIR=$(dirname $SCRIPT_DIR) PROJECT_DIR=$(dirname $TEST_DIR) @@ -20,20 +20,16 @@ if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then fi echo "Base" -TS=$((1*1024 * 1024)) -for i in {1..5}; -do -cmd="mpirun -np ${PROC} --use-hwthread-cpus ${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} ${TEST_CASE} ${DIRECTIO}" -# echo $cmd -$cmd +TS=$((1 * 1024 * 1024)) +for i in {1..5}; do + cmd="mpirun -np ${PROC} --use-hwthread-cpus ${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} ${TEST_CASE} ${DIRECTIO}" + # echo $cmd + $cmd done sleep 5 echo "DataCrums" -for i in {1..5}; -do -cmd="mpirun -np ${PROC} --use-hwthread-cpus -x LD_PRELOAD=${DATACRUMBS_SO} ${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} ${TEST_CASE} ${DIRECTIO}" -# echo $cmd -$cmd +for i in {1..5}; do + cmd="mpirun -np ${PROC} --use-hwthread-cpus -x LD_PRELOAD=${DATACRUMBS_SO} ${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} ${TEST_CASE} ${DIRECTIO}" + # echo $cmd + $cmd done - - diff --git a/tests/unittests/io_tests/scripts/test_posix_read.sh b/tests/unittests/io_tests/scripts/test_posix_read.sh index 3c91c394..fcd45454 100755 --- a/tests/unittests/io_tests/scripts/test_posix_read.sh +++ b/tests/unittests/io_tests/scripts/test_posix_read.sh @@ -1,5 +1,5 @@ #!/bin/bash -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" &>/dev/null && pwd 2>/dev/null)" echo $SCRIPT_DIR TEST_DIR=$(dirname $SCRIPT_DIR) PROJECT_DIR=$(dirname $TEST_DIR) @@ -26,8 +26,7 @@ if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then rm -rf $DATA_DIR/* fi -for TSKB in $((1*1024)); #1 4 16 64 256 1024 4096 16384 65536 262144 -do +for TSKB in $((1 * 1024)); do #1 4 16 64 256 1024 4096 16384 65536 262144 TS=$((TSKB * 1024)) cmd="mpirun -np ${PROC} --use-hwthread-cpus -x ${PROJECT_DIR}/build/tests/df_tracer_test ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} 0 ${DIRECTIO}" echo $cmd @@ -49,5 +48,3 @@ do echo $cmd $cmd done - - diff --git a/tests/unittests/io_tests/scripts/test_stdio.sh b/tests/unittests/io_tests/scripts/test_stdio.sh index 3a247898..096020b0 100755 --- a/tests/unittests/io_tests/scripts/test_stdio.sh +++ b/tests/unittests/io_tests/scripts/test_stdio.sh @@ -1,5 +1,5 @@ #!/bin/bash -SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]:-$0}"; )" &> /dev/null && pwd 2> /dev/null; )"; +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]:-$0}")" &>/dev/null && pwd 2>/dev/null)" echo $SCRIPT_DIR TEST_DIR=$(dirname $SCRIPT_DIR) PROJECT_DIR=$(dirname $TEST_DIR) @@ -19,13 +19,10 @@ if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then rm -rf $DATA_DIR/* fi -for TSKB in $((1*1024)); #1 4 16 64 256 1024 4096 16384 65536 262144 -do +for TSKB in $((1 * 1024)); do #1 4 16 64 256 1024 4096 16384 65536 262144 TS=$((TSKB * 1024)) cmd="mpirun -np ${PROC} --use-hwthread-cpus -x LD_PRELOAD=${DATACRUMBS_SO} ${PROJECT_DIR}/build/tests/df_tracer_test_stdio ${NUM_FILES} ${NUM_OPS} ${TS} ${DATA_DIR} ${TEST_CASE} ${DIRECTIO}" echo $cmd $cmd sleep 5 done - - diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 15142a33..f3d33bf2 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -8,4 +8,4 @@ add_executable(aggregate_trace aggregate_trace.cpp) target_link_libraries(aggregate_trace PRIVATE json-c::json-c ZLIB::ZLIB) add_executable(callgraph_creator callgraph_vis.cpp) -target_link_libraries(callgraph_creator PRIVATE json-c::json-c ZLIB::ZLIB) \ No newline at end of file +target_link_libraries(callgraph_creator PRIVATE json-c::json-c ZLIB::ZLIB) diff --git a/tools/analyze_trace.sh b/tools/analyze_trace.sh index bb989917..8f913580 100755 --- a/tools/analyze_trace.sh +++ b/tools/analyze_trace.sh @@ -2,28 +2,28 @@ # Function to echo with timestamp log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" } # Check if file is provided as argument if [ $# -eq 0 ]; then - log "Usage: $0 " - exit 1 + log "Usage: $0 " + exit 1 fi INPUT_FILE="$1" # Check if file exists if [ ! -f "$INPUT_FILE" ]; then - log "Error: File '$INPUT_FILE' not found" - exit 1 + log "Error: File '$INPUT_FILE' not found" + exit 1 fi # Create temporary file without brackets TEMP_FILE=$(mktemp) log "Removing brackets from input file..." -sed '1d;$d' "$INPUT_FILE" | sed 's/,$//' > "$TEMP_FILE" +sed '1d;$d' "$INPUT_FILE" | sed 's/,$//' >"$TEMP_FILE" # Declare associative arrays for calculations declare -A total_dur @@ -34,18 +34,18 @@ log "Processing JSON records..." # Read each line and process with jq # Count total lines for progress bar -total_lines=$(wc -l < "$TEMP_FILE") +total_lines=$(wc -l <"$TEMP_FILE") current_line=0 # Use GNU parallel and jq to process lines in parallel and aggregate results process_line() { - line="$1" - name=$(echo "$line" | jq -r '.name // empty') - cat=$(echo "$line" | jq -r '.cat // empty') - dur=$(echo "$line" | jq -r '.dur // 0') - if [[ -n "$name" && "$name" != "null" ]]; then - echo "$name|$cat|$dur" - fi + line="$1" + name=$(echo "$line" | jq -r '.name // empty') + cat=$(echo "$line" | jq -r '.cat // empty') + dur=$(echo "$line" | jq -r '.dur // 0') + if [[ -n "$name" && "$name" != "null" ]]; then + echo "$name|$cat|$dur" + fi } export -f process_line @@ -54,27 +54,27 @@ log "Processing JSON records in parallel with progress bar..." # Function to update progress bar update_progress() { - local progress=$1 - local total=$2 - local start_time=$3 - local width=40 - local percent=$((progress * 100 / total)) - local filled=$((progress * width / total)) - local empty=$((width - filled)) - local now elapsed eta - - now=$(date +%s) - elapsed=$((now - start_time)) - if ((progress > 0)); then - eta=$(( (elapsed * (total - progress)) / progress )) - else - eta=0 - fi - - printf "\r[" - printf "%0.s#" $(seq 1 $filled) - printf "%0.s-" $(seq 1 $empty) - printf "] %3d%% (%d/%d) Elapsed: %ds ETA: %ds" "$percent" "$progress" "$total" "$elapsed" "$eta" + local progress=$1 + local total=$2 + local start_time=$3 + local width=40 + local percent=$((progress * 100 / total)) + local filled=$((progress * width / total)) + local empty=$((width - filled)) + local now elapsed eta + + now=$(date +%s) + elapsed=$((now - start_time)) + if ((progress > 0)); then + eta=$(((elapsed * (total - progress)) / progress)) + else + eta=0 + fi + + printf "\r[" + printf "%0.s#" $(seq 1 $filled) + printf "%0.s-" $(seq 1 $empty) + printf "] %3d%% (%d/%d) Elapsed: %ds ETA: %ds" "$percent" "$progress" "$total" "$elapsed" "$eta" } # Process lines in parallel and show progress bar @@ -89,8 +89,8 @@ mkfifo "$PIPE" # Start a background job to process lines and write to results ( - cat "$TEMP_FILE" | parallel --pipe --block 1M --jobs "$(nproc)" --line-buffer \ - 'while read -r line; do process_line "$line"; done' > "$PIPE" + cat "$TEMP_FILE" | parallel --pipe --block 1M --jobs "$(nproc)" --line-buffer \ + 'while read -r line; do process_line "$line"; done' >"$PIPE" ) & # In the awk aggregation, add sumsq @@ -130,16 +130,16 @@ END { for (name in total_dur) { printf "%s|%s|%d|%d|%d\n", name, category[name], count[name], total_dur[name], sumsq[name] } -}' "$PIPE" > "$TEMP_FILE.results" +}' "$PIPE" >"$TEMP_FILE.results" # Read results into associative arrays (add sumsq) declare -A sumsq while IFS='|' read -r name cat cnt tdur ssq; do - total_dur["$name"]=$tdur - count["$name"]=$cnt - category["$name"]="$cat" - sumsq["$name"]=$ssq -done < "$TEMP_FILE.results" + total_dur["$name"]=$tdur + count["$name"]=$cnt + category["$name"]="$cat" + sumsq["$name"]=$ssq +done <"$TEMP_FILE.results" # Prepare output directory and file SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -150,37 +150,37 @@ OUTPUT_FILE="$OUTPUT_DIR/${INPUT_BASENAME}.log" # Output results to both stdout and file { - echo - log "Results:" - echo "==============================================================================================" - printf "%-30s %-15s %-10s %-15s %-15s %-15s\n" "Function Name" "Category" "Count" "Total Duration" "Avg Duration" "Std Duration" - echo "==============================================================================================" - - for name in $(for n in "${!total_dur[@]}"; do - printf "%s|%d\n" "$n" "${total_dur[$n]}" - done | sort -t'|' -k2,2n | cut -d'|' -f1); do - avg_dur=0 - std_dur=0 - if [[ ${count[$name]} -gt 0 ]]; then - avg_dur=$((total_dur[$name] / count[$name])) - # stddev = sqrt((sumsq / count) - (avg^2)) - sumsq_val=${sumsq[$name]} - cnt=${count[$name]} - avg_float=$(awk "BEGIN {print ${total_dur[$name]}/$cnt}") - mean_sq=$(awk "BEGIN {print $avg_float * $avg_float}") - var=$(awk "BEGIN {print ($sumsq_val/$cnt) - $mean_sq}") - std_dur=$(awk "BEGIN {if ($var<0) print 0; else print sqrt($var)}") - fi - - printf "%-30s %-15s %-10d %-15d %-15.2f %-15.2f\n" \ - "$name" \ - "${category[$name]}" \ - "${count[$name]}" \ - "${total_dur[$name]}" \ - "$avg_dur" \ - "$std_dur" - done - - echo "==============================================================================================" - log "Total unique functions: ${#total_dur[@]}" + echo + log "Results:" + echo "==============================================================================================" + printf "%-30s %-15s %-10s %-15s %-15s %-15s\n" "Function Name" "Category" "Count" "Total Duration" "Avg Duration" "Std Duration" + echo "==============================================================================================" + + for name in $(for n in "${!total_dur[@]}"; do + printf "%s|%d\n" "$n" "${total_dur[$n]}" + done | sort -t'|' -k2,2n | cut -d'|' -f1); do + avg_dur=0 + std_dur=0 + if [[ ${count[$name]} -gt 0 ]]; then + avg_dur=$((total_dur[$name] / count[$name])) + # stddev = sqrt((sumsq / count) - (avg^2)) + sumsq_val=${sumsq[$name]} + cnt=${count[$name]} + avg_float=$(awk "BEGIN {print ${total_dur[$name]}/$cnt}") + mean_sq=$(awk "BEGIN {print $avg_float * $avg_float}") + var=$(awk "BEGIN {print ($sumsq_val/$cnt) - $mean_sq}") + std_dur=$(awk "BEGIN {if ($var<0) print 0; else print sqrt($var)}") + fi + + printf "%-30s %-15s %-10d %-15d %-15.2f %-15.2f\n" \ + "$name" \ + "${category[$name]}" \ + "${count[$name]}" \ + "${total_dur[$name]}" \ + "$avg_dur" \ + "$std_dur" + done + + echo "==============================================================================================" + log "Total unique functions: ${#total_dur[@]}" } | tee "$OUTPUT_FILE" diff --git a/tools/separator.sh b/tools/separator.sh index 0dba93bd..18ae0ec3 100755 --- a/tools/separator.sh +++ b/tools/separator.sh @@ -6,16 +6,16 @@ # 1. Validate input if [ -z "$1" ]; then - echo "Error: No input file specified." - echo "Usage: $0 " - exit 1 + echo "Error: No input file specified." + echo "Usage: $0 " + exit 1 fi input_file="$1" if [ ! -f "$input_file" ]; then - echo "Error: File '$input_file' not found." - exit 1 + echo "Error: File '$input_file' not found." + exit 1 fi echo "Processing file: $input_file" @@ -25,20 +25,20 @@ unique_pids=$(grep -oP '"pid":\K[0-9]+' "$input_file" | sort -u) # Check if any PIDs were found if [ -z "$unique_pids" ]; then - echo "No PIDs found in the file. Exiting." - exit 0 + echo "No PIDs found in the file. Exiting." + exit 0 fi echo "Found unique PIDs: $unique_pids" # 3. Loop through each unique PID and create a corresponding output file. for pid in $unique_pids; do - # Define the output filename based on the pid - output_file="output_${pid}.pfw" - echo "-> Creating file for PID $pid: $output_file" + # Define the output filename based on the pid + output_file="output_${pid}.pfw" + echo "-> Creating file for PID $pid: $output_file" - # 4. Use grep to find all lines containing the exact PID and save them to the new file. - grep "\"pid\":${pid}[,]" "$input_file" > "$output_file" + # 4. Use grep to find all lines containing the exact PID and save them to the new file. + grep "\"pid\":${pid}[,]" "$input_file" >"$output_file" done echo "Splitting complete." diff --git a/valgrind.supp b/valgrind.supp new file mode 100644 index 00000000..1f6aaa78 --- /dev/null +++ b/valgrind.supp @@ -0,0 +1,34 @@ +# Valgrind suppression file for probe_validator +# This file helps suppress known false positives in BPF/libbpf libraries + +{ + libbpf_allocation + Memcheck:Leak + match-leak-kinds: definite,indirect + ... + fun:*bpf* +} + +{ + json_c_allocation + Memcheck:Leak + match-leak-kinds: definite,indirect + ... + fun:*json* +} + +{ + glibc_dl_allocation + Memcheck:Leak + match-leak-kinds: definite,indirect + ... + fun:_dl_* +} + +{ + pthread_allocation + Memcheck:Leak + match-leak-kinds: definite,indirect + ... + fun:pthread_* +} \ No newline at end of file