From bc94649007f91a7087f45390b5a86a59dc15343d Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Thu, 6 Nov 2025 16:34:57 -0800 Subject: [PATCH 01/19] feat: arg parsing improvements and lustre configurations 1. Enhance argument parsing and logging, add UTF-8 character removal, and update dependency handling 2. Tested Lustre configurations 3. Improved validation case to handle all cases 4. reduced logging to avoid blowing up log files --- .vscode/settings.json | 3 - CMakeLists.txt | 6 +- cmake/modules/datacrumbs-utils.cmake | 9 +- etc/datacrumbs/configs/lead.yaml | 33 +++- .../data/probes-exclusion-haridev-lead.json | 2 +- etc/datacrumbs/data/probes-haridev-lead.json | 2 +- .../data/probes-invalid-haridev-lead.json | 2 +- notes.MD | 23 ++- scripts/datacrumbs/datacrumbs_args.in | 38 +++-- scripts/datacrumbs/datacrumbs_compose.in | 2 +- .../datacrumbs/datacrumbs_create_log_dir.in | 16 +- .../datacrumbs/datacrumbs_run_validator.in | 8 + scripts/datacrumbs/datacrumbs_utility.in | 77 +++++----- .../common/configuration_manager.cpp | 4 +- src/datacrumbs/common/logging.h | 39 ++++- src/datacrumbs/common/utils.h | 61 ++++++++ src/datacrumbs/composable/CMakeLists.txt.in | 43 +++++- .../explorer/mechanism/elf_capture.cpp | 2 +- .../server/process/event_processor.cpp | 11 +- src/datacrumbs/validator/probe_validator.cpp | 144 ++++++++++++++++-- valgrind.supp | 34 +++++ 21 files changed, 469 insertions(+), 90 deletions(-) create mode 100644 valgrind.supp 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 index 2f26e1fc..77277f42 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -795,15 +795,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/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 8653cdd4..eb68d0a1 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -31,6 +31,8 @@ macro(include_dependencies) 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}) @@ -94,7 +96,7 @@ macro(include_dependencies) 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) + include_directories(${json-c_INCLUDE_DIR}) list(APPEND DEPENDENCY_LIBRARY_DIRS ${json-c_LIBRARY_DIR}) set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -ljson-c) else() @@ -105,7 +107,7 @@ macro(include_dependencies) 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) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -lz) else() message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] zlib is needed for ${PROJECT_NAME} build") endif() @@ -119,11 +121,13 @@ macro(include_dependencies) 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) @@ -152,6 +156,7 @@ macro(include_dependencies) 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) 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/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/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..adf6c221 100755 --- a/scripts/datacrumbs/datacrumbs_args.in +++ b/scripts/datacrumbs/datacrumbs_args.in @@ -268,9 +268,19 @@ dc_args_usage() { done done if (( ${#__vals[@]} > 0 )); then - local __vals_joined - IFS='|' read -r __vals_joined <<< "${__vals[*]}" - note=" (required when --$SUBCMD_OPT=$__vals_joined)" + # 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 @@ -505,12 +515,22 @@ dc_args_pretty_print() { 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)" + # 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 diff --git a/scripts/datacrumbs/datacrumbs_compose.in b/scripts/datacrumbs/datacrumbs_compose.in index 505f7980..ae272db7 100755 --- a/scripts/datacrumbs/datacrumbs_compose.in +++ b/scripts/datacrumbs/datacrumbs_compose.in @@ -54,7 +54,7 @@ if [[ -n "${DRY_RUN}" && "${DRY_RUN}" != "0" ]]; then fi run() { - if [[ "$DRY_RUN_MODE" -eq 1 ]]; then + if [[ "$DRY_RUN_MODE" == "1" ]]; then printf "[DRY-RUN]" printf " %q" "$@" printf "\n" diff --git a/scripts/datacrumbs/datacrumbs_create_log_dir.in b/scripts/datacrumbs/datacrumbs_create_log_dir.in index de9b5c58..9bdd1db1 100755 --- a/scripts/datacrumbs/datacrumbs_create_log_dir.in +++ b/scripts/datacrumbs/datacrumbs_create_log_dir.in @@ -13,9 +13,19 @@ 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 diff --git a/scripts/datacrumbs/datacrumbs_run_validator.in b/scripts/datacrumbs/datacrumbs_run_validator.in index 95214cb3..d4b8c106 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 diff --git a/scripts/datacrumbs/datacrumbs_utility.in b/scripts/datacrumbs/datacrumbs_utility.in index bbd8adcb..34282d0c 100755 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ b/scripts/datacrumbs/datacrumbs_utility.in @@ -53,20 +53,25 @@ function datacrumbs_init() { } 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 + 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 @@ -119,25 +124,27 @@ function datacrumbs_stop_server() { 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" + 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() { @@ -224,9 +231,9 @@ function server_launch() { cmd=( "${cmd[@]}" ) else debug "Launching server without MPI" - cmd=( "${cmd[@]}" --disable_mpi) + cmd=( "${cmd[@]}" --disable-mpi) fi - if [[ "${DRY_RUN:-0}" -eq 1 ]]; then + if [[ "${DRY_RUN:-0}" == "1" ]]; then log "[DRY RUN] Would launch server: ${cmd[*]}" return 0 fi diff --git a/src/datacrumbs/common/configuration_manager.cpp b/src/datacrumbs/common/configuration_manager.cpp index 9ff7b293..7642d2b5 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 { 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..8c3291b3 100644 --- a/src/datacrumbs/composable/CMakeLists.txt.in +++ b/src/datacrumbs/composable/CMakeLists.txt.in @@ -77,8 +77,47 @@ 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 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/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/validator/probe_validator.cpp b/src/datacrumbs/validator/probe_validator.cpp index 8f216bc7..4e2148d2 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/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 From e847bfcf7892c9aa8700ad5e323f1ba97eba763b Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Thu, 13 Nov 2025 12:28:51 -0800 Subject: [PATCH 02/19] Added slurm integration 1. Generalized scheduler implementation to be updated by any user. 2. Specialized implementation for prolog and epilog script for slurm and flux and general. --- .clang-format | 2 +- CMakeLists.txt | 24 + cmake/configure_files/datacrumbs_config.h.in | 2 +- cmake/modules/datacrumbs-utils.cmake | 59 +- docs/slurm_integration.rst | 911 ++++++++++++++++++ etc/datacrumbs/configs/project.env.local.in | 65 +- etc/datacrumbs/systemd/datacrumbs@.service.in | 10 +- scripts/datacrumbs/datacrumbs_compose_run.in | 21 +- .../datacrumbs/datacrumbs_compose_wrapper.in | 5 + scripts/datacrumbs/datacrumbs_logging.in | 40 + scripts/datacrumbs/datacrumbs_run.in | 8 +- scripts/datacrumbs/datacrumbs_salloc.in | 118 +++ .../datacrumbs/datacrumbs_server_run.sh.in | 16 +- .../datacrumbs/datacrumbs_server_stop.sh.in | 10 +- .../datacrumbs_service_common.sh.in | 157 ++- .../datacrumbs/datacrumbs_service_stop.sh.in | 3 +- scripts/datacrumbs/datacrumbs_setup.in | 15 +- scripts/datacrumbs/datacrumbs_utility.in | 87 +- src/datacrumbs/server/process/server.impl.cpp | 60 +- 19 files changed, 1488 insertions(+), 125 deletions(-) mode change 100755 => 100644 CMakeLists.txt create mode 100644 docs/slurm_integration.rst create mode 100755 scripts/datacrumbs/datacrumbs_salloc.in 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/CMakeLists.txt b/CMakeLists.txt old mode 100755 new mode 100644 index 77277f42..83c6de7e --- 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_SCHEDULER_TYPE "FLUX" CACHE STRING "Scheduler type for datacrumbs (FLUX, SLURM, OPENMPI, or NONE)") +set_property(CACHE DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE: ${DATACRUMBS_SCHEDULER_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}") @@ -775,6 +790,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\")") 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 eb68d0a1..1c86f0fb 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -264,6 +264,59 @@ macro(derive_configurations) 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_SCHEDULER_TYPE STREQUAL "NONE") + message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") + endif() + endif() + + if (DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + endif() + endif() + + if (DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") + endif() + endif() + + if (DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") + endif() + endif() + + + endmacro(derive_configurations) macro(find_system_details) @@ -463,7 +516,11 @@ macro(load_build_variables) 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_RUNSTATEDIR /${CMAKE_INSTALL_RUNSTATEDIR}) + 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) 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/etc/datacrumbs/configs/project.env.local.in b/etc/datacrumbs/configs/project.env.local.in index 7886148f..b68d6a0f 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_SCHEDULER_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/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/scripts/datacrumbs/datacrumbs_compose_run.in b/scripts/datacrumbs/datacrumbs_compose_run.in index 0de03bbb..186087a5 100755 --- a/scripts/datacrumbs/datacrumbs_compose_run.in +++ b/scripts/datacrumbs/datacrumbs_compose_run.in @@ -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" @@ -40,7 +40,7 @@ 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 +if [[ -z "$DATACRUMBS_COMPOSABLE_NAME" || "$DATACRUMBS_COMPOSABLE_NAME" == "NONE" ]]; then echo "Error: COMPOSITE_NAME argument is required." show_help exit 1 @@ -52,6 +52,11 @@ if [[ -z "${DATACRUMBS_COMPOSE_RUN_APP}" ]]; then 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}" @@ -66,15 +71,15 @@ if [[ -z "$DRY_RUN" ]]; then 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[*]}" diff --git a/scripts/datacrumbs/datacrumbs_compose_wrapper.in b/scripts/datacrumbs/datacrumbs_compose_wrapper.in index a4cac7ac..0046d6ac 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 +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} $@ \ No newline at end of file diff --git a/scripts/datacrumbs/datacrumbs_logging.in b/scripts/datacrumbs/datacrumbs_logging.in index ca34d473..87bcaf8a 100755 --- a/scripts/datacrumbs/datacrumbs_logging.in +++ b/scripts/datacrumbs/datacrumbs_logging.in @@ -27,3 +27,43 @@ warn() { printf "\n" >&2 fi } + +log_system() { + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=7 ${FLUX_JOB_ID} "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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..406dd7b0 100755 --- a/scripts/datacrumbs/datacrumbs_run.in +++ b/scripts/datacrumbs/datacrumbs_run.in @@ -49,15 +49,11 @@ check_regular_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" datacrumbs_init $DATACRUMBS_USER $DATACRUMBS_TRACE_DIR diff --git a/scripts/datacrumbs/datacrumbs_salloc.in b/scripts/datacrumbs/datacrumbs_salloc.in new file mode 100755 index 00000000..83bff2d4 --- /dev/null +++ b/scripts/datacrumbs/datacrumbs_salloc.in @@ -0,0 +1,118 @@ +#!/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..8c589e11 100755 --- a/scripts/datacrumbs/datacrumbs_server_run.sh.in +++ b/scripts/datacrumbs/datacrumbs_server_run.sh.in @@ -14,7 +14,7 @@ fi 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" @@ -37,24 +37,20 @@ 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}" + 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=() diff --git a/scripts/datacrumbs/datacrumbs_server_stop.sh.in b/scripts/datacrumbs/datacrumbs_server_stop.sh.in index e39ea18d..4fc81d82 100755 --- a/scripts/datacrumbs/datacrumbs_server_stop.sh.in +++ b/scripts/datacrumbs/datacrumbs_server_stop.sh.in @@ -14,7 +14,7 @@ fi 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" @@ -51,15 +51,11 @@ 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=() diff --git a/scripts/datacrumbs/datacrumbs_service_common.sh.in b/scripts/datacrumbs/datacrumbs_service_common.sh.in index 1726021e..9de2d14d 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 +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 + fi + log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" + echo "${enabled_value}" +} -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_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_SCHEDULER_TYPE@" ]]; then + enabled=$(get_flux_datacrumbs_enabled) + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then + name=$(get_flux_datacrumbs_composite_name) + elif [[ "@DATACRUMBS_SCHEDULER_TYPE@" == "SLURM" ]]; then + name=$(get_slurm_datacrumbs_composite_name) + else + name=$(get_general_datacrumbs_composite_name) 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 + if [[ "${name}" != "$(get_default_datacrumbs_composite_name)" && "${name}" != "ERROR" ]]; then + if ! validate_datacrumbs_composite_name "${name}"; then + name="ERROR" + fi fi - logger "User has requested datacrumbs' composite feature using ${DATACRUMBS_COMPOSABLE_NAME}." -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." +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_stop.sh.in b/scripts/datacrumbs/datacrumbs_service_stop.sh.in index f7cf54a4..f604ddb4 100755 --- a/scripts/datacrumbs/datacrumbs_service_stop.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_stop.sh.in @@ -4,7 +4,8 @@ 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..ffab738e 100755 --- a/scripts/datacrumbs/datacrumbs_setup.in +++ b/scripts/datacrumbs/datacrumbs_setup.in @@ -25,9 +25,7 @@ if [[ "${DATACRUMBS_ENV_LOADED:-0}" == "0" ]]; then 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 + DATACRUMBS_USER=$(get_actual_user) fi fi @@ -45,10 +43,21 @@ if [[ "${DATACRUMBS_ENV_LOADED:-0}" == "0" ]]; then 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 + fi if [[ "$DATACRUMBS_MODULE_AVAILABLE" == "1" ]] && [[ "$DATACRUMBS_SERVER_MODULE" == "1" ]]; then diff --git a/scripts/datacrumbs/datacrumbs_utility.in b/scripts/datacrumbs/datacrumbs_utility.in index 34282d0c..96f1db27 100755 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ b/scripts/datacrumbs/datacrumbs_utility.in @@ -79,43 +79,38 @@ function datacrumbs_start_server() { else server_launch "${cmd[@]}" > $DATACRUMBS_LOG_FILE 2>&1 & PID=$! - echo $PID > "$DATACRUMBS_SERVER_PID_FILE" + 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: $READY_FILE (DATACRUMBS_SERVER_LOAD_TIMEOUT: $DATACRUMBS_SERVER_LOAD_TIMEOUT seconds)" + 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 "$READY_FILE" ]]; do + 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 $READY_FILE" + 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 $RUNID > "$DATACRUMBS_SERVER_RUNID_FILE" + 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") + 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 @@ -148,10 +143,7 @@ function datacrumbs_stop_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" + 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" @@ -241,9 +233,62 @@ function server_launch() { "${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 +function get_actual_user() { + local user=$(whoami) + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + if [[ -n "$FLUX_JOB_USERID" ]]; then + user=$(id -nu $FLUX_JOB_USERID) + fi + elif [[ "SLURM" == "@DATACRUMBS_SCHEDULER_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/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"; From d84bb578ae2d773f83cbc98fb526ed141f4ec58e Mon Sep 17 00:00:00 2001 From: Hariharan Date: Sun, 16 Nov 2025 18:25:33 +0000 Subject: [PATCH 03/19] Enhance probe management by adding enable_explorer flag and loading existing probes from JSON --- .devcontainer/devcontainer.json | 2 +- CMakeLists.txt | 2 + etc/datacrumbs/configs/docker.yaml | 3 +- infrastructure/docker/build-multiarch.sh | 41 +++- scripts/datacrumbs/datacrumbs_compose_run.in | 65 ++--- scripts/datacrumbs/datacrumbs_run.in | 46 ++-- scripts/datacrumbs/datacrumbs_setup.in | 32 ++- .../common/configuration_manager.cpp | 7 + src/datacrumbs/common/data_structures.h | 1 + src/datacrumbs/explorer/probe_explorer.cpp | 227 ++++++++++++++++++ src/datacrumbs/explorer/probe_explorer.h | 3 + src/datacrumbs/server/bpf/common.h | 1 - 12 files changed, 363 insertions(+), 67 deletions(-) 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/CMakeLists.txt b/CMakeLists.txt index 83c6de7e..3cc9d90e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -602,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} 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/infrastructure/docker/build-multiarch.sh b/infrastructure/docker/build-multiarch.sh index 97b418dc..dd1bb2c5 100755 --- a/infrastructure/docker/build-multiarch.sh +++ b/infrastructure/docker/build-multiarch.sh @@ -16,6 +16,7 @@ PLATFORMS="${PLATFORMS:-linux/amd64,linux/arm64}" # Parse command line arguments PUSH=false LOAD=false +RUN=false print_usage() { echo "Usage: $0 [OPTIONS]" @@ -23,6 +24,7 @@ print_usage() { 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 " --run Run the container after loading (implies --load)" 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)" @@ -33,6 +35,7 @@ print_usage() { 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" } @@ -46,6 +49,11 @@ while [[ $# -gt 0 ]]; do LOAD=true shift ;; + --run) + RUN=true + LOAD=true + shift + ;; --platform) PLATFORMS="$2" shift 2 @@ -173,8 +181,37 @@ if [ $? -eq 0 ]; then 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}" + + 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 "" diff --git a/scripts/datacrumbs/datacrumbs_compose_run.in b/scripts/datacrumbs/datacrumbs_compose_run.in index 186087a5..3a934836 100755 --- a/scripts/datacrumbs/datacrumbs_compose_run.in +++ b/scripts/datacrumbs/datacrumbs_compose_run.in @@ -52,50 +52,57 @@ if [[ -z "${DATACRUMBS_COMPOSE_RUN_APP}" ]]; then 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}" # 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" +# Build args to pass to server scripts +server_args=() +if [[ -n "${DATACRUMBS_COMPOSABLE_NAME}" && "${DATACRUMBS_COMPOSABLE_NAME}" != "NONE" ]]; then + server_args+=("--composite-name" "${DATACRUMBS_COMPOSABLE_NAME}") +fi +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 -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 "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[*]}" +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 +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" -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" -else - debug "Printing datacrumbs status" - datacrumbs_print_status - debug "Finalizing datacrumbs for user: $DATACRUMBS_USER" - datacrumbs_finalize "$DATACRUMBS_USER" +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.in b/scripts/datacrumbs/datacrumbs_run.in index 406dd7b0..5182aa36 100755 --- a/scripts/datacrumbs/datacrumbs_run.in +++ b/scripts/datacrumbs/datacrumbs_run.in @@ -47,25 +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 -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 "DATACRUMBS_SERVER_READY_FILE: $DATACRUMBS_SERVER_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_setup.in b/scripts/datacrumbs/datacrumbs_setup.in index ffab738e..03a290aa 100755 --- a/scripts/datacrumbs/datacrumbs_setup.in +++ b/scripts/datacrumbs/datacrumbs_setup.in @@ -13,24 +13,22 @@ CONFIG_FILE=@DATACRUMBS_INSTALL_ETC_CONFIGSDIR@/project.env.local source ${SCRIPT_DIR}/datacrumbs_utility -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 - DATACRUMBS_USER=$(get_actual_user) - fi +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 - - readonly DATACRUMBS_IS_ROOT - readonly DATACRUMBS_USER +fi + +if [[ "${DATACRUMBS_ENV_LOADED:-0}" == "0" ]]; then if command -v direnv &> /dev/null; then eval "$(direnv exec ${CONFIG_FILE%/*} bash -c 'source ${CONFIG_FILE}; env')" else diff --git a/src/datacrumbs/common/configuration_manager.cpp b/src/datacrumbs/common/configuration_manager.cpp index 7642d2b5..0d948797 100644 --- a/src/datacrumbs/common/configuration_manager.cpp +++ b/src/datacrumbs/common/configuration_manager.cpp @@ -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/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]; From 078a19c652b8e37d6a1a41f52f31d3152f5244fe Mon Sep 17 00:00:00 2001 From: Hariharan Date: Fri, 21 Nov 2025 20:03:27 +0000 Subject: [PATCH 04/19] added initial docs 1. Build instructions 2. Required dependencies 3. Deployment options --- .gitignore | 6 +- CMakeLists.txt | 2 +- docs/DataCrumbs_IPDPS_26-2.pdf | Bin 0 -> 1104026 bytes docs/_static/custom.css | 58 ++ docs/app.rst | 28 - docs/build.rst | 848 +++++++++++++++-- docs/composability.rst | 597 ++++++++++++ docs/conf.py | 23 +- docs/dependencies.rst | 485 ++++++++++ docs/deployment.rst | 595 ++++++++++++ docs/ebpf_background.rst | 166 ++++ docs/flux_integration.rst | 670 ++++++++++++++ docs/index.rst | 40 +- docs/integration.rst | 762 ++++++++++++++++ docs/introduction.rst | 101 +++ docs/run.rst | 344 ++++++- docs/setup.rst | 1551 ++++++++++++++++++++++++++++++++ docs/tuo.rst | 20 - docs/usage.rst | 832 +++++++++++++++++ 19 files changed, 6979 insertions(+), 149 deletions(-) create mode 100644 docs/DataCrumbs_IPDPS_26-2.pdf create mode 100644 docs/_static/custom.css delete mode 100644 docs/app.rst mode change 100644 => 100755 docs/build.rst create mode 100755 docs/composability.rst create mode 100755 docs/dependencies.rst create mode 100755 docs/deployment.rst create mode 100755 docs/ebpf_background.rst create mode 100755 docs/flux_integration.rst create mode 100755 docs/integration.rst create mode 100755 docs/introduction.rst mode change 100644 => 100755 docs/run.rst create mode 100755 docs/setup.rst delete mode 100644 docs/tuo.rst create mode 100755 docs/usage.rst 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/CMakeLists.txt b/CMakeLists.txt index 3cc9d90e..655f1283 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -439,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 diff --git a/docs/DataCrumbs_IPDPS_26-2.pdf b/docs/DataCrumbs_IPDPS_26-2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..53e649b15686278de0a118e8e3d13432972803b8 GIT binary patch literal 1104026 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

JH27tz*l%k0jy;n0~|=Q1LCP0O76`zD@+3O?9 z)6KqlDs=8bk8q(roYWGYWPeF3Ge}n5^$T&2&$16Dr6-;DKvFr36}8;H$?>AA;4^0D zazT9-)bBCMAORX#FF96oogHk}20qoO(*uUCg?(Z`qLMQqst3osN~j;qv8y;6!QaQ@ zFt#GJhD~161_DJrV3BX{rBQkJIJ#f?t>Xmjk!u6oq(JTG$iJ?%bzU+b(GqOqRU~8Z z#0gh+SMP25y4O#4u{g?g9j1~HKtTxAkBasPt618vi^zn@7Ag;|n$*zEhV5yQc+U{D$XuJ#ERJ} zh#*-N3ioz(+z{&>q^vfxU1gZx^eV0SDbxj)##K|tw6{jH&9$7s4Zd-?UK6Fv>ijG_ z^y)h5a#O=SAOJEa!d`h{T_}jv$gSpj9t@S6{~G`>aZ1DpO+xbsy4P*efutO7@xScO zK|Vpr+p+wEdDJOxX<2g@<0ZY>y31`*3#W4Va}#*$oZ{ljU=qHOPR*~?G&Z~Xa=0j5 zuQn>q@p?~UqU)y{Z$o>M5YRq*+AHqW(Tp|z~ ziJ!)+$)2jJ_f(5^>GBMR%Lp2==|!M^sqb-Y9JOil)LP#c)`Wiv_FsiCBRfFO+-ID$ z;P9-DIoObK^1`iW?)U8NV#99e`UP;Y;494}XCQ6uyJx{DA+07GOPcbC@yop4wIHIk zzdawm*rr;)T%dU;xugL91EUY$i@w@nqoQ z)sV{Ya1<|~F8E36SA@QfA`3LTCk|M+s3KRn*m{Bue>}XbFj=lW+NPRo=nj`(J+g7XdLa8(j6X%H)9kC%X4MG-VaxnT<|+gI zLd3-pBX%9y1s_{TATnMC33>)3ZPHv!M;c)>;nczz!XIDsxcdOf4(Okl$w!v9u_^qE z;(RGv{qCK}j_o^>w=2L;y1-Fq3@EzE=i3P)YEe)u! zg_1_E{VMgPG?RVYMTUc?HAX~|jNY3x$!e1ybO&^M@MZQ$pV}Iz3w4nVpt);t!;vwi zT0z_gW$yMk53cq*FKoXi>TTg=wQWiJS)^L{Cwy=ZgLaL zjDKcLb2%g5h#rxovx}WMHJC%P0fK|NZfnytrq{r{n10b0=)~cd9Gv_qQJ0;OMR1Qm z5sLS9J_stwXhUB${c;(n3e%{}A8%*iDF_y1;QGz6!a{MeB?)YDiEv{!D*+LWJE$Hx z2VMn!wk$gqDoAlMz%esf|MpoeKg3x#KdN`|y!YO>#9r>afr9&vFyPoQ83kC(%m0s? z?M_Q;v)Ov|*+!7C=P;3@2*JWi6*Yf}15Sa#?rUqX_lgGh1bLA%o(Kj%VK~g-=E4FDNx~>36q0_%Qqp0niQN2=fy(A|^l-exmnn31bQdZ5Wc1F*W| zFg~{1xJBujjCr9dv5pG+9_U(?u5znqt1UmgwV9*-e3KtX>yUd-ozKp+&>&-zqSR-2w12l zt_PooRgJj*Wox4X2PhqNv*PX^ocRY zc7K1k;PC_6uA=OFAD54pBfQE=q z?5&3SL55XHPGzlnTwzYs&RvWmd*(LZt;q17H@f!DilmkdgU702SO^Eg6S9L|L*w~U z^jz5h<}!VlRD&cNgM2U=?JEo;usuernn}4HvZ1TXcNE-XRc?TD&iCq24fCd z_lg}-VcB#;tP~?L1go*oQ$I?&{ygDP6`5emqFT3Gf`+qYG4Wy?sG1<$5rsFm2ZidZSl(!Y2e|Z#3N?G~%cYP!h?0 zllScJ@!}c%?ZI*UN*6T1~c4EBeu7*&%@+0uVkCij5P^xeky;>2&})0 zUrh#dbg_11rt@2UUaC?$xuA(o8P?GD%QRJX@_RhgwdjD9ozK&epvxezZ*5vj>BCT| zEK9Erk&#S|XTb%TCU4$HDmo`!SFxU`vKA2IK+g>dHoPF*3-*dE+9*ILYBBO~28q{m zZ=O452J6hZL6rwhL1ObbL|0Ie5kdR|V&R=n%s=g!C00_q5DMF}!vq$1ms0%BB4YR) z4%tAx3k`;v%uQv(gK!UY#PxKJCbXLP9>Tf%P$rPO!OBye=nJ~?Id%M%OgS9@hMeU#}qZ;HmHMi}X+PJ+9nH>Vp&m)d~R6!+H4RfA8H zAQ7#!4t6Fk7fUU=I!Umv%{56eTMh3Lq&9{6TbY|8vXi#ImZ%9lCQz0VsF*%djLAwo z-m%;TiONuhf-fb5Uf{hT_gOeF61qo^v;8CUnD!mr;3z_#&ykvQzRAs`5pm?DA`AB( z=SUfe?$k}tgBNR5^cd{w41Z!%J|8b7fp~!7dmp%QXd5yYjkIf!$1&AR5%64kBL&U) zNU1CllVW;4@`h>%6Su>M!jKED#fqqJQ{uKE*H)R+%uuFK`3)yyUf;qT1tU7c)=Iq_ z#vMK#$!`f}P@?@f`DiThkkpzsi>N}?Vy1+AOvZHj^$UImm?)@p=5`*YY;`R2x4ZN8 zqH4^RpsV1E64PlK(`?~)3k{&&J)h~=gEEhl4Bla*T(BurDfq8Wt96K)<4E$=0Twv8 znQveV6K3clO$j4d^{~N<2Ebwpf_G{W%>BhQD?pWy$^i+1GIK9wpdnzOW9)Sp_&N7F zp~(PeGF@g}!S@#WfSg;G{f*Q0V8{5))q(^vi?SoZKi%h9SVM8x1b~8uSsTE?k*NY# zVrIj0C`R+MDjro6a-~ojUNe(ifbn6J3!6znv8rk2l9ay_Yv|q^Bzm$78AB03!*k^T z>|a=NdZDj1#U$mvLio!3#fbSdpFEHL#B($U+fUZ|s)@fA=?;|M)~H;4DtdoYm#eT?cx|*EFND%gXG* z6z>?J7UIQIU2SpaunLlItgMdb=fv3#&A4{0DX@EHXpJXALm=o`m(e~ z0ATw;baLF&iowIKi}Bl?yw=X&t>)3iU(up*u+AIVW@1Q4xF7W(_fInR6Q?O`IRR`$ z-qx_3I*uJGyR(KTt&C+0@o)qm#2;`I;fZ}+^*Ljr?uYdf<0nz;sm7?;OhMrMJ^!`mE6TbnwcPzX!zeY1tP5p>a zWD05fz^2Dhj@e-cOOF_jQDUOFG~rnyV~A&=9EMm`5esG=uw6NKb-U_ZFjKH{iR2Ti zM#ejhWzP?S&QifYIV`F)iA%=LXi2}Qd3Gwe)mHs@sgZ}CDwGO#5d%6aUOPAeuJiPZ zyP-vt!7CW*+MqBWH$*^z@a0#j7|RpQqBtuJSat>By3W38#Nh>#{%c_nWgKwKC>smv zXAZud3Q+*JsUwd!6~PsKru5t@?XDDPs`hhk*dqEO`6>#~eaHl8h@uj&Sy7@n;6#pQ zx9x_~rMT4SjRZ!ig?Oe=oPwwr+hjOXV=nz?mF~~*6j;w8|108aa(F@VX^=PGwr|dB z!((mHZv=1Zi8wQ?5Wh936{^lrhP7KgPKQ#e;SuphlIY2luxEGR3Tv5c3VB%MDj{nk zF0iKDJiv(v-d}4kH;`&QJUotR<0q31VVuDqH~K>bgFR#&@cl62e<|unc>6P4uY*%X z8DYhD{i52iUxC1n^@4ha=PlbU3TKu%VWl)(%G{YsmIv1PE3z+}N~gAZ3B~!^*1l#o zdQU<9=K5LPw) z3$Fnr644@D59?XkgNG5f( z8omrINn4sglqtv?A8KCub%*UX8Bi?yxU;6f|0)VgcINYukG#f)M${KGv-l_l;-_Ph z)b2Kf8T4`W*S}s-QzT{45Bf~S`a}V!H%iy9xUBi?s1`n~APqcN_ZEoRsbYj?2A88G zmS14AGx2`*Leizi&RWMZW%|Tih|*Td64Ny|%`l+rScKG}c9LY{gE6uvc{F-gq$7ud zB8~1JpmzaFKWe$QcBt?~3@I0p^fZrvGek0cmP^ZCItfl%QP^rIlg9pqU)?c3WT+8o z@PjRhN*_7dq6k?mKT)~Lfnz6c>hD!sll(ZNJE^`GHY?k7A{mli@A6Vwc$r=q+2@iN zPfn?`$gndF^sQ?aO_^&I@*7IR#N!;(wYb%2)f3t*Q9^y!)gf-URE$l*)8!(RE}Sh z2HOb=jYML>cR{5+iaR2ZJI)G(FN%+=OZomYhR#h#&aF|e=#sBP&P+$vBk{l%vHJME zKJ0*Hm$x_%$xw@J03n(RksoX%JaS~PlfM)&E8hN>Rsa^}at<;AB%=$};Sp61~Lek%+BJryaLx^bZ6au1c*fy@&s&kBbGDKN)Imv+N^05Fkl zs!OquolP|!jb`t2(sp7VX>9{$|D$WSM1t-1-%!U!gbvge>_A@H*6cfbug;1#d~RH5 zT!WNm!Rvxt}6rYzd(K;_jc&rh-6($ z3nKYtU_+4GrS>tYVJe&&{eaq1M;BHFk66|fbb(9Xyu=t84nd#DJ3DDwE3d>3g6C8& zPSDKTvd4<;+-Bo~J7<(pFk@cH$Zl0-ICaR6-`GNe3d`c?)*jJ#- z&GwG20wVtBL9QqeB_XSPX}=VUz8gW`r}ncNLpQ$);zpLWmb!=Cvj}fcWwjN5_$U~9 zYVT7c?d~ZY)q|Qluo`!qW>}LS^Id3uA?kUd8_|&p`Ijs-$U-KItbN4hpp%GLABLE$ z4uT6HQxd~xZWE2iAxqwTAv@CkCb9-niVR4zMv5Tp3^F;IRN5y)l#^*pXQsd03t479 z^HF35+$M4}_ph(JckPr?4;0QcbVl8)6M%D=gMejEauyBvi1aU0vQ(%US1(M7i%MMB z7P>v;0v;_*_xGm|DiR$kTr-vsH|f2M>{P@mX;7OFn1y;=Q!k0%Zf>x}KifJt2slF` z5H$4FdSaL4ibmw{d6(p;GXynsU^=S()9VJyJBHR6d)gdPNpdl4^#?%io%52pSyzU1 z=l)&ikGG2UT_2-kG^d2)!jdi+UWu0>t8`SoPOp-< zUd3#KnHj5mBUKT0&44p%LggMKHGYSgo>eQPqqooRnt|;3mqwNGbHO5Q`kxZJbh~BR z#~TqwI<~m95!7q&zWDk~$zBKZk=bK)zm<}9u_jx|I#fpezD3t1(srg#`Xd zDXkbA8fzEx(_MM_V3vXUrvfln4^QoS@-OcSUy42aOpzYyg;l&ga6OdSZhJG^e}>f% zr{g*sSWiqY%N5*d6ea5D*(8}&oNvrhFijW(8znV{H1IO$12a(3?OCZ}p;)_2=zry*7$>Rs zS7j(A`IO9OR>?DY;J1(F!U-yWC>$x2=z3Ic|IXMTzE@P?nOYLSHDkGXqf)v`Ia3IbabFl(x~W~wqOb`>-qH?ESTc=nP++d5bARe7{$%# zi?>D_LZu__Yk{zH{sUU5+Y^;xBxNjGJi{?4JLIz24~HamW;~d$|75dM1O%~1n|-A4 zHM604;`VdlIn1aHMzbJZu0yl;a^;fIV+uN2O(4CJ(0kj4+v2UItxtX=b~}?RrLAljJ40jO@oVWTFO{TBgX-YfUTmeH?prd)TuJ0gne;-q#u)dIb$#{O z2~~ky>uHH3Qvgs`O#*LBl7tZ&C=kFlq$4-XX{!o3X`5&C+(pOP%f2mLEjxE+9N1o} ze@QHx3M>C9EXGd~ruySh2bz(`Dl@wFUA{|n%pcNX%bG~qFtWYCgG33~o&W9+FsOoJ z4PKqG1&NsCGz3BX2}YFzuCkJ6gx=bNo11dPQx@(oeI6|6bcMeY%fQ*Tf6U27g-I-g z)!eT+9%j}eRPmHKGeohZN0`H&;N;g?pFS@b1>XoDd|GKuK%Q_)1c(j@b}C#z7@axW zTUM~Prv~d-+Q}8Lihn6*9VmTrN>$F=yWsJ2(3EIro7=}AEbM9-PE?EVt5S;A=asJK(oGZYqO8H$ME6{aS6G8HXmyyO)bvXa8ejoZiy$2z_XP4 zBs(UjCBr~xBa46QcMIe7qrizjUu)-Cf?&S*#H}uig$IS2j>d&)z}jS+k=OT1@B)2a z$9gE5dfCD_uK93>9OEn2jSgq`I-h9@J)%{UtYhQ)^$!v4UAdJ^tD9|A2rn>xWOaab$T^~T=(yOh#XvX1efyb=6M`;0v%OQP)H-hsJvHJW@I2OgYbGske}5W5f&B`u2iR}8g&tcrWyUkEL`f`qUVV%bfzC+~ z%?cMjUypcJyjmr> z3)H5r#a7S_Qh&?qgfi?Lgt_?igHR7Ts1OK2*{N%-dA?76!uW%-CFPeEJ+Gmv1@IoV zlyb3OcY?`If9f$dg$|S1v`FVUfzqB}krZCWn7lg(5@OZ6wg~|hN-iT1M*=(q=sE~& zP9)Dvj5A|RgAizzH0f3w`gQhK(@)Svf=GXs95F`W`X|GrZ0jg`&)1{;9eRce3cakA zB1EbP-~uty!v{q~Ux4ktGnTn()mFX1zI44H0NWfsHKF>`RSZ-vC^tpTZl05uv~E2s zpYBI_LF?>%$=}q6snM`%U!G!+?2!p0-X<1)o!tbfPs+yZ??N+KGX85&*!Rm%=-shy zhye<8tPY^;6wmcBhqKQ5^HvJ^-1hPzg2w@U^@|ri=nvIPue*mKnJ1S;2wM`mVgW`g z^q|%siHT*GCallA4l%OvH9-jLMs+de!d=jz3hI1za?!c;;!_U8sO&eev``|% z#p^SZ3BPt@EOxSvz;`L!B>w`-JOSJbMmkv7wmZ{AAl}T{;;o87Gp4yedPZ<{apc!M z)7#O`>xO5OO=CxB2dy7}!ekNjXwtMu#FuH#T;=8%u(;NLL|MMC|w2_}=}sU5x>L zwU=o6e#RW8=!b$@HgF!9SG8Xa`qxhpy?$jq*i zZhpj6;XCQ7wl|J$!`KsESH5WU}Z;QT1XtkR6CK}FJbfs~D5xCDh&=8y} zcK2^^q6TFy;=RB`^R!C^>+Sef5u%s#qme4Gg4}QC&HG!P{gGG zmlPo?1Rb-qbsHdrgjp|M_VP5Hc2#jBo4G0wddOY9(587CmWbeWQ$oXG_Oib>v<)dN zOZTPZAdCTOrOAmi3GmM5&u@+(!Wjd&55{@z9X$J{^qC54p%Aw3rKMp?_wspl#8|lW zs2wG-(%QoGL_J{vf1}`S-bJPX597`i(vffIj3!@aFS;wx)fut&m3GdLykqa-t9bN{ z!4fSXgO+DW*@P05aILHN8v>(w7MrcoLZ~(!seK87e95q!4XAJwG*J`=6CRV?!b~B& zqrQm?r{eSXI;G0WzXToWxwPf!)Y|{Gr1;TD8jNVQ{6j8JA~ZoeoN$C66?z=<_S4_> zVw*amnjE5HAa^Vx+HyqY+?Q}B@%IyAme!0CnZRqQv2`dfrr z5;yu)hKAn9N0!xry->H7iw9q+^z;Z%M+);^)jl6SBW>BCAyX*qeHNlSL5Ysd5dP}E zl+{0?W*~`J-(vYo7mxPOE80{dUkd%jEzRkdN9MYkK`G`bfrP<9LA4~48iEwJQV!~j zROLd1vNi`bx1;Z14;e?Dfr4j#h3$FcIR|Q3O`*jnV1em*67CMCwTlMX^H=yjoJ1Zv z$ULPGJSddT`Y_L3RaIN6S!qBS&U2Gi*!84x8kawSlYjM0jhiCV249`fBFrN(U~ zOqEfegvV^1ZCVWuR!dgoPX~UQOV1j$0ov>L%BPlFZ^oRB|E?!)9L5O$7}Wwghng?J+J#g zAiW1Nfi|%930Gqyu8r=yWKr2Sw$vxgAKLoLaiy_iHY>C}3+t%si;63(> z%+uYx=ow2?>qBH@>H?FlG%mrj8bL1nbo*wWiAQL z`k@@3UYNya(Ue%V3+3fVPtHvE0e1CJg65VCepr3(a4J`yi81mL!WJ>j`^^lI8Vg^q z4u+pEcC1p*o{aweD-Qk%~(>wEvFaC(y)2ma0(B#9FBd5oh64$z|%1x|6Y23}p z*IMNggUQqO$Gz(vb$+t}!Per(g~`sF2Vc*-dEt|)&AKbjTm8>0Yog=ip8Lr)h+69& z!(WT$Xf}vx^8CPZg)#ZD_P9_%Lw|)iu3dRb&>2nor2M!bg*oHwAcX)070NV_DC|y_ z-z2-{3;uuYr9ekwq|K=>`^=e|j#AKtw3?b&G3MskC~u?u4Sud0C9iurd!HMHQHKob z*n+pPF-Ke!Px`3#Ac#&`9cWwrVy)opX4Qk!x3vP%x66J;cxmZRx{y}m-AH9+T)?;O zRWU6TZANw&z{N0{r4vIA0+cST+)Z;1!d$+3=yzvXn&_8bSWA=B>t^awD1dYR1%g#5 z9Vg&cf!ErA&}+eKt_DgfB@|-VRmKr~lL1W6i6o}uRI3qg{fWi66K1ohH?;`I+X7Iw}E>+{WSq_C&df=Ycd^_LH0fjgW~Og(>Z}}`tW6NUfP!(cRK#F z-@?5Xma{2P!7hEF$?<+pB8UW&Aniq|w{zO*m2gfie8ws3aPV}8PdW80kpBHI#`U+w z$hj2G7pS-u2XdI(V0H*Grnxq*iIvIOuD+ID4zhZxaf)RyHl|#yZ9Vn9 zKn|PUk)GI?+>Q6rt4}OzDoXFCDjco-op*G31$6&x3uNjF1R!CD!C*&O$i*Q)_5-=f zZUY{89syDTaB~B=F)*2tyddQ$XkesLdjakL@S(}D`j=4hO-&8;j`l#}^Ps3#HrD1p zaJ9SorjV}}s6cAmN`O*6rflnM;OAqY2R?Z(HyUmj|F*<*EdJr`&Ec)F@k=>#6acpw z!0g%&h9sX7CNGJx5#Yq!08H6|y`i4|i6Q}R-|ATZiE@LWWQtF23h#%9s&8xtEsvP` z)k>K3qcFwibM^yw`*Jod{eyJNkk!_m7=q8BObOLwx9a=|b;^m?QGrD0I;B}M@B!*QT94ML(BCPuQdKPowB?v~~5rAIa2*YwX>I0g^QE`mp=)kee7jMNkrSMQ8iL#-%ZH zph5UoctC@Z$XA55#*z7Dq;pkUvidomXMSV-#2(_To%LfOwKP9*n3@@mpfhky=Z27Y+wq~*kNop zfMU3XIsc{25PTu)#t81Hj%Vv(qOl*Kr#Ym?I0q#$sgx4`9;B$RU{@fOz-#SeU+3XpjH8?CaB6NXOY<# zH=x$+>7qQ)VIzfjQ$5+K%u{FfOKM1lEAO@&PMf9!Uo#4MfVbM zQ)T=K;h%EjBE(54`v{0tts1gTL>x<4UXbGB_AFB%HkgykJ#F^B9^3L46-8TW4*4(y zEn0SyKtclai!3J{+O*se(-gY#9AiH)L+gY)d0;fj=FIjKx3QtGJ#D95Q1OmO$?rz{ ze!(FnW8X^YjI3!<>o6+qROi;?$~$x#xAVGp8-(NYgBVU+`+b-3tYC(S{X}8=^pU0^ zgGKVYlXftd2`j@!m-_9R&|}__1H2~&!+e0i3}QIW^_kZ!Ik4kFE{QNo9`~i2O;6;q z)539b7_oO9I6U`GPnvUTwP667*cnsWyKLPUzAa`Fu#nKy>e9CPFCLgAT1s9=63Y7r``#U5tv6 z443C852n316~Fv1VUk4bqyeIO(~B%_lADDQ_>FN*aNit8(^g4}++pL?=W2#HDq^&o z7nb{$0H!K;pzW0Md4cjPry(R*`An-JURpmSm|bNN9)Of$;XbK!-_9J)Tv3sQ3r=Zb zy#8{uin`?2j4`YO@Bm`wl14fFbAv*Ik>U8()c#>q|$PD{KD~}jm1w;+!j+Y<%!^4S7vS`M)v5^;`K7SDh4w5Wds-%-KvUt<@bh>zz?8}JJSI>>l5nqG@Mg8*5ZljcEtiy6V z8=|bsY0s>11~slzOR(G^?Q@9RAdDw5?Ha_7%OkrNhb^^hKVz+qPY;IuoqV}hDK9xf zr{Ob8>=RU>a7DgTU(PAbl{-ck|AdV-5y7j?%lFT$2!GocAzo+?Dv}LRMMHC;GqzgW z$9+Ya>Oc<+B2Ci!LzcL5fd zP(R^TKTyQ+JYNz7=lXHE4RIg6EeF{`~AWxaXT8O~BOgA`Tzy(iyGA9!<|gy?O8 zTW&^@eWeGHf7=55FB@mwqkfeTb0a)y8LiE)C(AA>iV%Oy$PET=5WP=AQK7F zX?r|KbSDuTtzYxh^-{)e^jO{$srsI|_gm4}XxzTM^$5W$99QtA>VgC3GyR=-vNE)a zX27K-f%ER~U&6m3vnXE>GImcevX4PzQti}8vlB6HnNOkUIha1xwivc7_4*a@3I!@j zWjb5caxT`cbunS2{jp84x*GE*TSLfD4CtLvtFPzECp`ta(_FXB`?NubnS|GR>wsqr zq2|F8f5E5#^|uFNaZ}?$`9pU_mWqQ);R7M<_kIXXZF8N@*gdJBOn_AJz!1jw^vzXj zFJfQJ+m@Ao5)N8kieG0}TT^93s0?E4IN5a?LDK{IjE6FY^RD1q>kPzmHXxRLTx+tH{+1&= za+9Qb*@Y)RA=xav?Sfc5OhphM-|vk3BW3aVX3a!glJ=KPSeBD86FNc4FJQLUlHCg-c1#n^Yp(oZV>?==g8IG$jv z*n#SdE*()Up(-z}PMi7?sqdF=0yR6L9KRvaZL>xZo@+4*RA8)-yrLuBm9HUSA`{Pf ztaWl6;Mmur&)Q+;yStA@$Mi^ghDlXnWpWwNp90d7UD@}!`BW#bj*uF7OJ~Esjr&Y-dJkRL(inrRYwip5r`x{{R z>GA18RB{8?Y22FMd%cv|q3u94i#UG^JrjNy9LnYER#a)PMbe*%_pVay6v^VaCkZl8 zvafkxJ6e|lUC>lda-+>C+3XjzC;Gz}ms1+tnSh;23@&rRJqaUJo<#Qm2k|$aNBy6$ zPQc<-oQX&NJj}vx*E+Gs6@;+8R}G#>uaz}Aq`PaMUu2V}U2145VQ-NLibt_T-R4lr z^NW4)Nxt8n(=xRy@ynijW@H*MhFRXGwF`btDfD_I`9BRueb5j^24>;zNV)PgDxCz- z_GYP~Y54R(_#?4b1UFYij@%5LY_!c6&x#&*bk-{~x~1qs7~A1!i>6jQ#-fK6pjAkl z5#njV^ctEoavNi07w7TSWA99oQH>*lNy(?FalRD;X;=Z>d9_epwyC z=3}o_XzP<5*hd^BpU1S2s|ie$y8)dSKIcR-lBwsXkH#JNmDI$0QABwsvF~T66gm*| zTwt#t#$MvYxqM<`gTkbQ;y7Dh5tO~P+jnEOE!(?CGoW<(J_JCBI~JmXGfZQFj=aGOG3 zCjLjw{iIr(Qn9CGr>M*j+)-jBb@uwbE)^4b~R@T)H3Wj}eR9}i z94?G@N=oqy3+3Z5;1K_gkgdd@M!l3Htk*YmJc$LBh~Qnv%7TDNZ+`?+m*!iPq5cAk zc(g`^O;UxEytc!eaqjC`9XMS2d^{N$!>u%NMqL625^WPGgnWs+Xtq0kchOSW!A@uT z$ts||uhxLZ#44Mgcmzup()sO{uH=l$3^JLLNoS7|&bvd0($v2@h~Obce9x1Ax?ai0 zSijLS18{rm)31yF#ajP(bYK3wJo&dq1}WJ z&f8+1p%l#1-t6~exe*r?J@1fvJ`oJ1fPd=qIxXCmL~S)2wqS%zaM~CMMxardp+GhJ zkg=6jJ4pKEX64=b_0yC3#Nq3y@^O7!$Mka89h9NKKkN&;XN_c~SxZBl`WxF*=gkK= zo9S8>Pfc!Jzm2;@qDgAC(Kkc43ldYHvq@paz`_a(^sWzX0{h-BNQBxATlcy+=hjFT zz8bn9y?1^gHX0oZA#?G4((TH?FUe-?on6Lp3N{i7@Eg|S;u|le%H2z#voojRcg5&r zMB6nW^h+g>Z2-LYFAs<*DC8_IcT*04B?#%q49c1>>{cf@aMF5sPn)US(A>7{t5<+G z>T<~*EjSlm{ifI0lvBCUVg~hjxOCG!XN79d=E1I#%Nn>coz>g|kBQBOsc#~D;H^R} zUB)iD$RbvHwza^o_gF64=)l|8LhNw_oyd;whzCEmbj1;+&jjfDC>co z_WLYPFDmV}R7p;p)KJr^T1WLQ1-AdoIh}==d#y=a1Xn*ux?iR`pVqi=UkYix#5|?P zyvdaQ5R0l>X}ym{V0tOl9A??(wB*Q(c*^6h8G=y6wH8QP9ULVCRc-cndt2~TH3M4^ zJc*;=6i1%xoBbJ4UF`dX{B|^L%&ddq6Nqn_$Dv})&Dps`_Y6fJPt)E^kN`Zc9GhAS zw#qS;XYvl$&S`KvYSqQ|W(jG$*t4pQBWE@TAAs=@p(8~7Y>Y}HP7QvQmYvoyt)^tN zt<34z6-tm9u4X<{+p=|96^9#BR&ti$@+Lnh!;U38v&{fnSjB*!$0$3c#-z5`?$i}Q za`pvmA@mrko{BqHKfjx;nF2nr;k~?9^}uZ;aSq#dYk@_0TT53_hR3@F*OdLFly7b{ z?Z)(b8AwIeB%_-clmUME%_Zy22jfK1GVL(#JN632(D&EuuQ}iO+F_gm?B#~gerxP- zd<&@zY}#}IP3X}pSz-gBfTw}-s^29Uxe#yG=ZuIw=}8X@2Dd}PfJS7V!`bP;LUuqU z7;h4R1Eqqu9a~hsy_96pFfY?XOm;7mEe+lCMhQt3NxPuA*VTGB?mBi#vgKE1&XR9A zzL^|9&O}qJw=w+lFcqZemNm|jIUWmFx`WY1W`o!#Yw6-S7uf{B|0)>f6SQ7()< zl2bO#$y~Sbl>7wT;N$B%_#rQ*lZ={66jQ*7Yx^usQCr+C*3R!Ve#*`5tN?{>p(>BM z@MQ3UqDFclVMIy89Xw8vb2r+ic@x~s-ylLhFPIMdWyZdFmKh>j=aTagsfgtt0!444 zFNSCam99s}z#8ssZ-`1kB0Z)Udao*CcDC3`H(o4N3<+UDNM2SYh8gXOz+4iltU*~u zZyTk_X4XcdwK0#l6s$PoPY>{3Ql-s6EAmwRv!Y?wN&4=AWW%qWtJ+x*;j%hUSEO@U zy0VtW8@^ZIvE!81Vy-W&8#iP$Ef3+Q3KpKTL71@<*PJXuY~4sH0N@KdDadwL`e;&5 zgLr*({;?hrc<9my?Fn|1mBU4w-yToGJ63)+rA6=>FeFrj_DKnDgh1NVeE1?}?qJoy z8WjZ@RZd$}>x{2+lB(t;zlZaMP=uOi$M)Sk9(fwwce&Dv!$PQo`4KP7HzObPP7gUJt zOA5DTe;}sulq_q0b^7PS07pv(YO} z(fCy9FS=@|@Z)6wRAKkey)0rqotS+)9G+J8+k2L>%QyKM4aN?vT%+?Vevf}{oJwCNpvho%=@oZ6G zffD=CF*vYg_DXD~8sInOWar{y>muvLHiI3MrTs6kG*7o}64e7L7<8-Aj{0{>Ko`o) zd$7@gvvOAhHp$n6x@lF*M?X2zT|K{w8Qpg~Lh25BdSXk8qhcdrzXa1=!lw5Tp<-2lV*BFLH)-kahaXI)E`w? zF&shAS$E^d!^d^%i-hL!FTiOHh*BL^oPn6SsK=K|FUd`4k+x1^I%k)b5HwePMqcGjK zDdZqvfuhKoquK8U-5AxGJV-pg=C&}oJU5$I5LSjFz2Zd-4r+|Wx4;OJ4_thC7mSj$ zo;{kVeOh8?yr?#h9oAWFruD0ssO?Z^m{c~m0Asoh!WDb}25FMUP%f{v!d!`K@{t@s$%?89Z6FI%1I3K22%kMwavW~qa$fz zBq#1tz|^i5ke)O$^P?16eR+qNh)()Lz+p%HL!%*&^thI%T!5OLCV>5DD~o8ZcRN3b zqV!D6#7p+j>(a_dcG5lRspStxx z_Tk%&U=TN?sFZVmRs<7%>CohfJsF(WLzt_dpgLd-_+QwK%rRHPKm?sG&0XeL!Cp)* z! zr+!GyvafN*qmvw`CCSKFc+_=|S~V<#a!QoM`)?4vbSbo8YvjqPt6qA%QVk?`YVZ8q zU$)lN*(>o+MM=2lDN)*&reI_--wXjm zq}34v&ZU9n-HFafBEHIUBuz+CXOqz+G3mVoH&XkYSB+XZBZiC|DnL+u^Wu|)pq>O} zFhZK0_pT<;*xctEYjjf+?+xPE`$nDqg6%{3uTVSAGmJXNnu7=Fw1U^2DSx^UzWH>_ zlT=+^zX;~?+9ueB3FAmR!jg4)$+7KF;3gt1v*YJWLBmSNhSyHnWD&Z3m z3wxw9snZiTt%+>#9F#8Om1N_n8((94&NA`5TuVyW zidd+d)a^#a${aS7DOhVXDLYGiL%vgq3+w?s8McU-h57-9Y%(oS&R;73F)ca!>?Slq(8`V!@2Xi#eB1^`m`pk;MwzUS zrbHb+IosO@_^YsK7Xa_gT_uYG9ditG%eAUk_LT9U%eOt=vSZwkXqIwkLq8!{bLZZ> z_Yx->tQEa3ULZdYK?)TfFa)a@ZT+~r5x818W&%|HOiyGVBFc5vCJ(VL+YgKfvvSoS+B-ebnbjbW4o%# z69El`{yR7EAOppK7~HP!H6HGJzhevvpN1+sz!pt)9;m-xU8FpeL#Hy-?ikLu86UnH zgA-TEs}H|>b*r+Y`m~;6tucQ^U?ChM_Fimk-%#T7i#%P765hqhkZYel(Dw^YboNz2 zyD}$6A85_;6s z^CfaY4kZn~Xl^a%3GTgmx*T~H!7vgr8WBg3R|x60-+P`%*jh21VX4p6-pG(Sc7L2xSjr?8%8~lJ$qVIwDh8Tgt9Rb;Td>7kjRo;02>2J(f!~B8R zJu6jv0G0ol1s|j+T$BSAinqczyVeVl)n_!kcvuf4b%Tx)d3{I|d98GvM`x$o@Od6X zEq&)vzY>qcHm&%^j9$p=W@DKhZWPJudD96{m|^U+%SlPIrd4a@ zG(S*&*M#3kfW`uyKiOzpWluSC-KTBsk$z%ykvmEhJY!izvQ0l0{j%k?IIJ@l>;7I@ zk>bXOEc&a-wJGX_H-T@S)w5U=FKX`=O#cO}r60oFB_el9L)5>x;rgf32Y;?r#RZR#X{MtZO+CJPtltGZi7)<9+e3bQ} z_!_$3_jJ7h5et?+IY(i0d(zS2BTd5cwhU07?fIy77aVj2m(b{eyOGPMn>JaE>vL`J zUizTTcNz;JYikThb`ZSCvVmB!Re^a&X;yf1dv;+8xeF)x&xXt}#9UJ~5xsY$+^d%L zgIe1cgfwdnpkJikY0F&%qi98Uuy<+fy#2weTlIlVIWxnNll60|Z&S#4rB5=IKfckB z=2+?VDt|(8iV=;1TjgwK_CpaJ5*l98O~&HyxI9p#`EmYKv^lD*6)r# zF-P;@*Ix8y{77;Ce1{z(GXRE|8`)>of+vg!H2TFpI17wJ8J9T;vZ6nE=4ZGY9mK-v zZDD1k)C98T;_%$%P_(IcvDhTf%f0;api3<{Wxq0&^IZFzC$D__-mkcs^|TFPA(XB@ z>UGWs_t%f4$UbPGogL)knx_sIrGNvZn`neoo zeth!dJ2sQPjT)Bj()zW?pdr*th zN}V6tM{OV2A!%|zdZMQeS9SwGf>>1pFFV=&Oh$i)G_nn=>RJ4KPiCPBCEyU{O@AGB zdi_#Y^a}TK3>vtb1R_4D;?)yGoc!E8y1E}9r7%L&%Xo)JQZL4u9D7%MF+%Wz9kvui zoT3fZI;%1E=`e;ZBw~|xHoLpF94XKpoewq=+OeE8?P)O?MC=tJ!ENO$f$r6{Tj%iT1MXm*Y>)aN{qM9~ysW*ik01`6G1ItbGd0M#>;fKXb!7JGfjtQr(fJz*?r z8V<#0>|1$Xd!@lQwnu`g__B;KLg5n*x`R5?8(rz`xn10!WKs3A`bh->Q#9L`Rg6bc z!uA#3O4L|zJ4tErapAP*3vsDvs@p?vJhDbs4jBE$1G5GVJwL&@AYK*=WHP%oXRevC zs5BP7D(cXEz8iGxpvpub%W~%*wg`PLI2ROJ#ozr-?A^>5R0V{`+FuEFg&G)vfJBy# zCUJoYWSP>vpT`DwUl^Lde&cnlNO8(Nc@VIWE*9Q_AUWl=Z8u6jq6^%GmTn>UnZDQ;Ls?)(xAOqC<3Q7r$Ym4eU-*hn?`2 z$nXbyY60O4)y*v5>XeB$#p!p4vraOdY`lhh$9%eGgQsfrtX6TW(6pVt6^{PN3x9%S zE=E}E#P(%Y-*U&JT6OxGI9-2QDT#R(F#J5Ey_Qg9s3Mg{d2@VKRi6s20EEATp5wdR{Sl;8zFn7UsE#46zeD$`!mRTV+@(X&ici#ox2eK+gu5g0+yfOI?#8m3^^Z}Cao`!YctcBygg#c5xtqv)ElTg&@{ zeUl6f3IVA@im0JXzx}NU^P*VHUbl94!s8QlKUZ18234oK?=w!6qZQ0EBiS$_e2${T z(!~~Chznn(*i{2?{KISm42prH=;N)+y_?xEc5V=Wi1deARre>pUurXL-wCIjD%3Je z6+Tl^|_tvK|gnbk?ldE4!W*E-%l zTd$Q8j(FrN4GuMljqD)F)CK354wsS7)bI`Ktn4t@XMc$b{!V!f+-)sS$fnLp-!&=5II!8x&M%EJ3 zVQXdGuyFyt+r3cb%P^O-ONq-FiP7oUm%d)JRqu2p8#&~4963$(O3J_!<@PRVDiNwkGpcBYPfx1%YS(*?0|P^E19lkdYtMV zcNgzkSIZSeG$9sIyn4T@ zGjXfQMdQ+6B%TuLjltEmTILt#PEy?fmAAa<$P=@PC4DETSqNZVxs&hACg^(<;iIo+ zNU$l3LPXI<@WHF_TCE#e5OR{N1|!O|-DJjBs`FT|ts9}m0+eXs!_^Hw|SfSAlR+KQ$y0MGso}#$gKViopOfEg6EVAIm^s1!_#GYb-zblr=?I=AWy3j z$Jeijk^yRnqA;f@Yq)8jPErLT6>Pv;PPx81mwmxFoaIhLKobL*6au+)XVAQ zi+tRRR>qJ*`LN0S&ZVYSXF{jiYUG3^R`z2AYGB3ZJG#1w3Rd@lr0<}9)E+Di`b~Zm zm}Q*J&pvj>aTt4~X>FZl!-ZN-=U!qh@xT|x%t4?1_fM8T?xfe3B!^f z!`fNPKs+6#br1D6O=t-Z)y1L1Bn*b;i{ACNMI^upTqfo6J)#V_ip;Du>!rRmD!;M? zKEI#V>wf#1a;$Qka4dU8K&aVZkP`Ao@0t4jo7Lz&jsUU!L6VE|Yk~&&M5WJy55!ls zu=`V;d`vaGs|~p#VJF#f5}bW`4lQc@G|8N$Hq3vuW%J8vLHK%s9UrE#1t>8$8S%(U zMr0`G6RYw0h2pqSdoc4X0=+=wNHp{zYy2zt_BI%^E}n` zjvqW(uUr7~iDaTpKgPYR%~r)FIIFeJXKe9Wd_pDAq}w+}uehQHgh7;f&7p~3Ml&>L zb5H~N3h*JZM^78n$R=-K>YOCq9~` zIE@$(`nm)$&L!hNEf3HPR17>mi2yOZaLT)S+O)YBAT8y_%z*>8Et zNZfYENU$h9i;Vji;)T^^*li4KgPaz4Ii=ln3k|GvI?|(|$*ugpqU}$ZVPCvQMiISS z9RsM%T@&W`_~p#$AlEo3U%{+cZvF$87oi!-;r?*3mYh>5-v(DactKIQp5hzCsluPi_s-$uQI9+?9s4 z->B=0*zhi&&1Q3sv<*tN!s}tskw|;_0&C*>8)l`ojM$x~ETol)e1hU~KAX_?wGVdR zdZ|v#u#hhVXYI;l2Vp(b9cc;m_N4-Qu4?I^gs*2^CW6MIBf9`r>hlY~KuO9$;{>s! z5;n>ha0!25z<{Z{z}l+n92#OQGLTNqCEiA$g5)fF(Gsrw31lJ*GmP41^n|a zx4`ZJzDtw3@_+>KhNhp`5b;=isy+Xm}zAav;k6X=d`wR>@v>du@R^coh5$JY6onp z`K={~9;=x!0OL~c7F`)F`cQ<0?;tWLsy!8)+Q)q(q!mwQ2ROzv@B#GG&7v%oOc#w#y5r0prGwR{eq4-!MTl0ycWz{`Zw^ei{t;A89X?Qwo= zs19xnr)06JObpJ2!row-jpk9bj}V%69Y0aK!Xq#-oHZ4ew5m0o0>yNYW@%Bl;igmk9Es_09T)nU64s&eLvv=m*^+eayOsF{goBNbuVtg*|BaPVQo;8j8jumGBK5R z#W0tSl4R!9g-&bu8`|?q*6DcQe8SQaH4!9)>pV^;ki^0&sL!T(3OT-HP%<+u#^^>c z<~y;tY=GjF1Re;q1346{V9#NX%#8`tF^3)|sjX~`(7exlzs>Z*-~y(khx6v53{X8M z`jVA6ptI1{xwlyQeyH#Zzu?;%!;rmsEnS4B`ArXLvv5Y#!J4N>VkqN8LHlo^fvnay zKXTlrK^3B`{Z0;!WF(Hs_;*a*w_`aWU16wF(&1Nce>3nx0&%H_m82z+`xZVLLf|}% z(8XtBcc=R=MP@S%OhVFW^K0R!Qp{`vN9HZ-BHY{jv(2jJHQiLR(ho||fzG1g3+X0CzNCwbNQ**mGC-h`06f^=OI(h0zG>QALFurR?sU*S1U- zJ~kJ-^ufk#FY(fxMy4p_id5Wb5*w1t&hjRO>9XD<3E9z2IH4sSGl<3;y{-Z@I4{-C zD>JRSt*FpYX(a~FL}egM5zj-uH13)iNh(90o>8Jrb8_WtIC99xL(=NOX50%b*lHB6 zEuDHYfZ7p1=a=O5JI_&@Re3463j40T6p%YCS7U_9>_mw*waJ+J(2xT;SoMRA5_tZ7 zN+TgiF4Vkcs8H=W{P74kOWsksUXK-|CFL9DoAJyA6hH3melpWThq|1uSOqC|Hn?xO z)He;tH5RxoD^h5HBODSvWE)`7adr#*r>=#)F_hvG*{Ad92z}Xie0S$I3C)IeBb<7H z2H{F*G~{EexwIbE4v)3bjeK7K^4JY^a=gR)X(7_roEYmEkBY2j|BfFS+{Uc0U5s2LSi4tHE1a+XG=1O~w@&qKSG4>Ohri1@52IGne zK(Pc(*GC;BN0{f`i5yH714CwKqvz;+a@VeBNFsS8NUi1B#*B+9>4dZ;vU(bbRju(6{Kl7Tt`QV@!m}GwaSC2AdHVR)>xC3 zNe-h1xNo-%21Wu;k;o6%(GfXi5AAVxmuPUH?5{TDE_;$JE5U8XS5)U+V4altYA}I; z16~F3O|YP=+h7@8FEYDg9dz8RlDm+2Xk#&$#)~Z;^rqL2-wR+M9V}o9+U57zb*pO! z#n9PQtwz$(aMmW>Qm`?V=CRn1meW#Vg0nA|mWJ@#I;vo*H$zxrPm8bx%9e&iNxNKU zoOgey1BqFAX`G%8OvwwW-SzA&68dYr?ez!VZ~0QMPKX=cJ-NtR3Ir#8XEw)}5?y~m znRJ&`f+16+Rd`}z;K;}IMjjVf3w!*AWA(fKXXRAmrWoqLt1m@@(rde* zHN2<=BPQi!^E9-6I%|HlGu7vDWCg0I`6PB^5Xlxeaom7lUHwWjM6;1IZ>&TS&!Ei`|1(I`= ziS7Oi*t{uAJ`}avKGLOv{{7iG5^sU|o$J+myEx!26PafmsWb_>%w1xfDGp!xT+Wrs zZ44R^7G;QhDI#?nlxdNAfJMu!ZUXli2<71;vJppEXuHx#&uo$029$Z7W^SK9yu5&; zf4K*7UD05VA?lm3cW8(9yY+Up&JK9A*Rb6?9uEPxKj;9r5drMaI$g)V<_+QfU`%Pdh}e79!@?+OvBC zlMKW@>qVKC{Z|agFCPbBYWKt6X6lGGaG(0_Z%!Iw-@~{xKXuzxEF~Z=-9Cg7d`&{o zX(s~e(V*(}pZexj7`%W5F!>S#D zrEhjka1K2C{I$Z;D8XCv)N)U^_u7_}>hsH&1gL43+K0Q$NJbfPan-OUnawZ4kbax6#d;g! z9nn4Cy3ur(@`33eF!eJy$nVVv=(Zg2E|_9TuOCrQ~2w z-{y~neM1bo(Z&UXxeiXD=IlCN>m z7j4sYX$sMyrRMv_`0w!_1eAW|%pFvdi@n`2rzOoQva>SG%i{{70 zWKQI%sP_3Pp{Ek z5Wp~AiDOlF*soYonB59aBD^Vz2m*g)z-B#v&>A@v4$B#tA~AL^GNnHNQhtt^U)7>g zkn-{YtxA=G$f1Zc8*fUgq+3o_?tJAs4t`|CE$b7w|!Z7fnZc$p3dx-q6(%mlQkxg&KdkmmH!Fy zGv-;C>hAA5$bQXs%0!0u^7N!oLQECiZBEv9%-r-XyAkhKQZ(sX)rhY zpe|GpoU)rey@$su9sNarjc;1g1^a3?HL6jBz%cNXYL#P@ix`jNH{2&GX0L?5L=T()Da~Eq1 zSRAU8#b5u3=yVh8jJ9w<0i%O>!I5mdeurj&j9kFYwQyB#1c0CInE=so1%2C}r$C@i zFuJMta3BDF;2M?Pv74_tsue@?GT+ddm(6&(pI3GmSUDL!M^~ZiC9;3m_Qa*i8;*d7{LLU;bFk4R0QXsP zikEhj%Ug-^b9~|nPX((b;kGWSF)XIF#sT7a?f1`g1Z5P#P2IPF02;_Uajl;4 zI-Q?56fcQ=5gS*QM1|f~*Qj6Zya51?)6b3OrS%!lEtV!r^R;K_6QQj0%8)fS(ZJ7|V=D z&~ft_$V#S)uwi^83zvMdWoU2_BH6@Ahwv=F*CrN4H$8~x1VfO-iT2T#8+g8l$k3{g-4T7I4w z#rZ+?fCdj_xw9yT7~I-t6lEJ=@yM}i9MK15Dqe}TOvqSkCuv8wK#M4Z$)ijxc)d{N zE=z&}2Hw?a&9UKT`M=0I$6jF=pgAAoKDKS!wr$(CZQHhO+qP}n>f0twnx}tYzwKrw znYp$=DB{YCaLzGge->gWh1qO=R1UXyBHQzLky7~p6W$SEE803Gb-^PZGyc+vNABSj z?E&HAUCJ99;`2}grh)trFSAw-lS2391e2yn0+BfMz+Rk}i#E`7QQ zpekjAh+sV#{~-w$osp??`Nvsu18U?sxD%;dh;wU|a-FVDGAax&WMrG5i2z8NLoo(V&1b84ih zHr7AXcBhA6HS|w_aV^|yfTIz=OgwqE@Xjsi`@9+v}Ka_KrNH^MjIbP3y&=8g8tCtq=vVS3J`{=>?V# z>yezYHQET&y6962TCDWi@U$?$I+0%*q_=*``?A#mkH=YhmbX~MGQ`Ko>W z_W_~s6hc7r2CrFGY_BLICv@>Ug4qWUs_fe;T^P=Y08n zuE^<_U`|_U+q)`nfTf(CXXGeAJ--_9TtNA{B_BE-_fYdtA9lqzJos0ev4WH-@`cyy ztKE@mDkKq#2ha}&H~D?qz_HS_DFPDqZS_I`>adXK9x06TUydb_q+m(O=1FtXHfOrP zfySTAbGBXbtE3hAQE1cGFm&NCAZ6+yn{CC-Ok=#Rc7?SC43uNM+6}~xbre%c6ai+l zSbX&2XZUssPekO>+E2i+2l)j^V7HIIIcFe*KmyeeQR&cFzwW>5XRWje56PbStmD8x zux1VUAnHWYxi%*gVt7sQ<2*+e!_k?|gJ>p&6Fdes)=ATKh*JY&KAoq4d~H?8%eJY# zASCAf1DG9=rt=Y{BuCbrxs0`&T0JaHegI2Aw7<+lg4sM)7!`fu9Q+e5!tddi$1bM- zKn!_6u|t%bywk`f_!rE@*&t~x3uF3a_-O$7U;b`ND$Q$@20uY?nxiTef7L4n`ljk^ z2(`-F@E_%ZwJs`s!BeN1&RmruI zWxC_G1FtU+Jj}z6|LM4&He5T#lE?}5Ss$~3p_bOg)~=L6mnDs}#YDf+2L;iLn7yw( zj=qBhjtx`!ZT4LlM@*H`2K8xB)qa%?d{X{Y8CMqdUU>V(nVw{wumFEx6`b^?ryT(=UR1FLQ8ntZ znelvn>@Qw7PZcs(BWgW5lI|R=_nC`x^AH{xtU&i)>j|xa2Kr>sZbrJQSxzVpxE^aI z$Y$xK{bC_zJNm7nP{9HfLthaqig&0Lm$WO0uu;%e7X_x#0-wVId3Yg5MF>Vt-K_{d z$V{krUWBeC0Z;OC<1hIh=I%Zz{gOESfq^3;0z+&bzRapEhO}z~blg|+N z@J3r;DHI&YG@0H&2eRIF{L$$7yA&%}K^S5rq?`Voct<)7i~~aQm-cN47(5<;4;`#5 zkDl3ls9paTCH{82fUNz6*ki8ihVM=g5)W@eD4nS5r@?x55yECfb8nt}I$d&lBIFiR zvH*>0On6r%DPwSy#1%u-OF5$V>6FwxGbJlEuwC-O z;~`j}w`R$(6+3ty{_;H^wRqt(j=wg6GT%>7|EOD_Yh7j@Ko&b9BJubHGxp=Zh9rPD zGHfH%i*{bSo3;4?=?_Tyjdzfio4J)it+tAuz-6LUq$L}-#70edsa2b$6c9({%tet5OBFz1{^Fio$>)UpLlTZ#czm$q>Ul;Ro!+txCGOC*_!y| zP2RmqoZW2?>7NMCfK1M`lpl4b35Uezu*3qIn#zqCRcZCY7A4y`>*%(%^7WHHt~MdT zKg%j?<%B=3rpk&Tifkk@2w%t^Ph7Goq$T&^OD6k|V8My&8LG=1>E7eDX1Ap-HpUa= z;!b(=Bqzic_u&lMV((F7CnURkL5V$%mY_8Mm1uH~INn+D-MnwWUN~jbBq=ZA z%6SME>+*l!GdE#ufOBgxw}DYLqsrk0Myw~1GL_9f`J&*kqQ`x}mAZLfHNg$fe-?~1 zg5ya=a13CHAHXBKN^x@%-hAuT4TlH$#motTpM&x6yP}+j#P!GeY7q>-WI+942_Kg- zw1a!7hLi-^#-{6RXJh>X@k+&AEh}DVSv&t@8aMS-t;?bjh4OhmXykNYt3Iy>{Xr>E z;uF*mzEAaVHC{%(SMq>f6*CwvJ9Wf8l~6#E3LNx2sH-B@YTIUJ%wQTR=KW>Z^=kvU z3O+HHG&L=r2qU)8*zO8g-BKktog~``J?i5dl0bHv+BE1GRWs{A90G-S=qkg*67c=( zJG=E>u_)gxFW)os9mM!Px%PQavAs9%p|jIP(bu7E?~8!M|BmG^leY?jRIq#0RBf?W z-PB7%Y+0cUv{FLuf~oy*`y{$w-3Y?zVRQ4BgEI^pf-Lt2$ezhq^8sjmq{B?FwhYp(jsX36LIjp^8S+>!u>VM-r&Z;hZ?wE* zVVt0wDqom~)qSN|`w&RoL-VpN^kISKl~RdR z$jzqJ=wWQb)I3&=b$}S1-inDWwX6~f?F1n4(FM2IV%nLbYpz|zm#lQrx1 zN^M>BPTM}!9md`T+o32N43zaWH)16{M5QyH(;&|I;ObaY$#j;x80R^B?Oe2M*@-MZ zq6L6T;#N%&fi|)0I`GG;*=nd_v3(1E&v7Af-K1ZvpHbS}6I1Z-`}*g1PLq>0K=iGz zh->qw;3MXNdgq?bw$m<_E5zR?m%Pj8#J?W$*0k0%!^)bjS6zaBJP#riU|L+M8V?vK zz!D;MwTF2uo5!&+7&dH&=XE}Yw3pWkl2dS0XJ+Q7nG(a>7PaP^ya%Li8HIxG0RGh1 zw=%B3hh;1#3=r=}K~R;qc#Ff)nmKdYCgZaGqN7wim5!HA#Yg_3wr>zmzSUOfM(CFi_7pFW{OTO&@2$kGrT$*g^6d<$7w0^ zq(s$QlXlxJo3uQg-w`d3R3q+UYQz2{g|t8;#FcjB(Hg5t&%xcNeGefF^i(<7V`Xth zFhighpN)txzu$SQ@Y^JF#%V|$sc+iWVOijh1Di~bo|j}**FL^RfQ#lh{}M}CQq!;Z z=B)1W(Ub5&*L;^akQ0zA`fhj;MEcO8tL7VH9l*)^>XpOBW9n@g&Ik{v#5#|siD-kM zJK&L4d6j++!213uVF*NX=b4kVIboirIYIS1itDf8^}PD6n9FiukZ|x*gpXZ@bSM6b zfE`;0QfDaP6_TTtT~-XZf>3^AfcPEUs#d{GHvXkb{*EDmrO<8wpS6ftG`|T!RiR@P z$z7okJl;Ihy)6_{DO-(9lJD z-|?zFIo%N#RcKT@MYhgdnh_g*^-&@=iG;djox=m&935wcgp|JP6Vl9YLc{_kk#P=) zAI9;Sgc#0ox)S8<_N27u-8#pn373f)HhC==P%E&&k9>eDJ|(H9)5LF4=%3EM1UlUf zF%gDJOs4^<>CadwI$-L7Bt5oajT;@C4@RWtI9_hEY!Yx9(K0|JJI&iPz zNNj|qHGF=cm|mQC7$s(dfv<_DfIH@Ja(Pp&MJrI$6f3?{kr{xqO$nyj7MB+d*Sb5C z6EXX)#OtHv^*!4PaN#77kfpFj>i^vYc;RWu9MmJRi5$E}3YeIJIxkSc)-1Ji#Gw%V z5?n@_3Fe3w=d0_h&wn4z=eJwZiQ6L#s6p@C?E^)H!aLhTDx~A2@=RZt{Ov;WS72v) zvO&>Zy2`K5IgOereilHy8g^9NLRCV{ZP+-_8urZ>Yw(N@OK7MGb{W2t#4(VThSZ zj)wqx7I*4oem(EW3oE&VjT6GSbVL$o5+)W~SUBsY? zk;$+ynua0e#UQ*wN=!v)o$v}Gg6B0usaHk^^lt<~CK<%ZVjs*tEss$OhUw+}8)JIh zC~ASpQ%vePB~|+;}gE=+)Og350vh!R{0SFu0+p5>g4zh(yjleDeHrhwfUeNm4hl3)^O<&DS*UZ zDe2sc7&-^@owvTz3&!0i9Hz_s@$@%ek`rEaH2z0}i~nP8E<19jITlO|QacE9=H!aT z0@ZvD1NBrcxU%;dNL0^2N5=dTf4q&NP^h?r`e~K}7*FXnh!uY(ei!9tG4HMp%|k zE7#`=df~l5$5ON_wmkshoAKP9x-KK~hJ~UqpZ$mg)t7ZPLayp%Ry~Z zn?zRXepW*R_WmlXdoGEyK1{xHATAc^nb?)}{QBa%6aaJB2}XJT4igzExumtYq2UjH za7o8sMRWc;^?stbf0Rv|WVUVpOy~Pxt)La#<#V#yS!@8J0vjl>SlS2nRF_b&brn|m z$He}yzp#>@Qq-WF-I-1)G5C1yRc*tR{ZA_pC&h;u1qBF6oq(Xe&UmIM)q@D0O#}qwu8vV^0khgD+uRJn9#V<-Peg3mUs% zLL?&gVko?A&JG?ui{sYJs_2$$riF$VKwkYQK2vZ}p;IYCV9;wK_n+esKm9J&Arsay)7SsMGYiKlWpdirSj*KasqC-OBSD&kl^)b zJngiZi6U%LCSNw{d$BhR($5i54Dk)z&cqvOkQ>`HSVOK7u{Y#T0cq#oBGTkHZQ zV9ySMd;Sl4_9l6MOb=$f3*1uS?oih-8Tq=s;Jt{}@^_b#dV~K%tw#kCE3ucUo*)pQ z@AK#`RRe}brr1oNuE6GY^BHD8uoq{Ru#GSkG=a8ceJ%Nwf~k=N#kEW^DQiC4Q7`d@ z*K)-c@({9=Z~?G6u56~?^tQ6`^<4onkeeg*3qP7Otwe)&OG-bp?C7p4V9Jg~Pa}}& z_6i;nuY<@v{{gr3=;*eN6A=+76KP2=>}E?q3UHo7OMGnCjKmHQ_1!LrKEYE|#G~Pn zpEkqn?Y=NN8mU+mUZLPsLBj+t(8pvfxHrNmOfl|2bdX+PsM(R)j$6f#_K~mvA8yE* zL`mQyL^t@Rc&y`^2hV|<_|xkrVa2ii;KYCC{ZJsGpd92fN%yyLESv{f7a_qt!(*<# z+^qprH4HPKo-0KxQY%5^Qe|#ofx2rH$*6fl?+wV3CZ(D7X*lPZVl=HTV8(XSJa_5_ zlvh9fkS~_4R#6mVz&N< zLH0NPz(8f}O?3HVL#mAhE+9E`M~zhB5Xs6m1Cex}v^$+0Q5;wiwDimcpwY{&4<5r% zQnBV*v82$5)eQ4&sR^*tX9K6^vZ4ebow^+yizKFa&A_?3n}YuW)XzO+ZYYvufw>NagJu;K8AtGR%X?>!7r?BcfFe(k#*Qt0viD9GbXeZ=`qzDUy3%SFd5$lr0M z(Z@=4{xZJ~SBH4B621~L>Qynl{7N9;ebB5k=q~GqV&uL}ow@pWy0_)u13aYg;|Uzl zw$V?97!|?KPj6r@ayjkOWb}ww76fs-x7gVXB3KSwY9oMjNnyjv@MvM@v9=){r;R&% zpk^T)kh?x@zJDi2{!_yujxWth^t;k)IeG~5yO@^=owT56IKt!ho)T$KXi(oOMvLe) zeZ*Hymp!y6U?`7FQx1V*ym99H$MlA+dd1;OY$E-tb=++_YPr?3YO}{d1czd;|W`meD9WT$J98NPCP;r2KD zY%SLcnYHz{v!Xa&Tg>lIyMuG)<^|?MFtrZv1@_BNk$-#7Raa8XwK$LH&0J!_7B7ob z?s!LWFY{A_y}8ue{!#t~PXw4t=PPo9PVpr!Qdh%bZBPb^l&9&MP^peRrn^4gdOE$d zZS6<&#!>pcr7iRFho7E29UV6Ntn{~|+cdCM!P>tYe%hRG0FnFe1`|Ae1WgX5eTy#@ zDq;zO`AuQ9t^NH=P%i!_{)kopx+^}X)!w)(cn?$PLAkiaNf2nDfa zWtDuxXx{_7O-L9JpOz|AiUysz{U{daIb(}hUCVboLnf2AS{7|eH4;aU^E^ZQHl&AC zJ2xrH_ur@WDHM^MDQ?q2WSRnIlunE$5B3`x5{4s{$V!5#cg=5d-)v%nad37$4>VaL zb2I?zr#gNVopoUdG84PcoREqBZ^jciXa47@EWox*juKY~e)16J@|78;pQ>eyG2?DI z+RNai50-GzuA=GSGNbin=uX( zjM|6Ky==%Vr!txzgX>vxJ0BcFWWr1pQa9nNw}TK9`Ug>YOsY}^MQ>+~bxv_?DZl0( zNYM)Vl|E~8@i6ojokd6~W^Hc9F}bP#Z}PKA1v#hi*guCY|4bAT#mD((5JIMn1zeR@ znf)#lN=U%BdfWqi>vZ0Fus~?l%U1jib{G|h(A7_)q|5z7Y6wN_x!;4qK+>VJ*p`ne z{ffjsBAqp?)mIcve>W8m|G%H`Ywql0KUVtDw5u1AD?_Cs3N=8F8;r={>+8$#@!1$7 zHrkkq{89V)GnAVo4rLnF@sEK3Wyk3ENP1^lfXg5I~2<) zCMFynz-6aH-a;SRAJp||DhkD46{a}`O{3Ycj%bYzey2^bA!8=Q4w8N446eN#Uwnqs zFvV5E*A7rJ+vpGaR9L4sl-%~0{$y_`x%ldTxea6`K$sH7%ukjf5J#ZVqxLqlI<@`< z1_q21`M&pU3YU3SAuj)l9vhzm&EVT<>yu=!gD+Osl1a*BlL}p3V^A|_yWSAD{gWMi zz8;}_{8?21o*z(SO@Q-uAkE#T(F+u^X_Lp4bx3qBnVYl>9BSmB&Nw-eA0rcjQvq(n z3kDvX_?t4F_F(uQw|2d{{(ID@zB@B?<{feMWuD`xleg7o$bp~hw}VvEm6@^yhO|@mx~nT>kSV(I`?I{+&=dz7 z7bXtY@wRr4UU482Uv9)-mqb)J$Aact0rVWacIUb}qu2|<CuNzk`$ECP5zR8hq(m+}B=DbUr56h;>KJU{F7tR;{esDMDM0UUkrH;C%~ z-6}6v+&aMy)N}N)Y2{THifzVHO$WnOY8}V=G1-=gnD(wpNtcx$V;UKKHkP#>xACX(GB8k7nO>qOA0+Io{?aVbJAw zs5CMnVs!B%PSGjDUSC;E1kX@tN2&7q0A@6MyzsjuwHOfZR=zV>e7#_TG-&a)XKG-x zzjA2Ux{u7gFT?O_EaA4~6qJI5cIqOPVh0a)*4Ao^pUrBUOLKJpqmxZH%8$zuHP=N_ zh&MPBF9!p1*zFi(M?0rZvmanvQy&qPGZS6jNa2&7=4hu zHIj=I%ngI_m$iiXA6v*r9q&kq2YFt#BKg*ygKB~Y4}r8iGlg7c+pK^xya=r&kxhP= z+0~i&Y9e)B_INaVY}m)AI%I~ulxQiT*LsLTX?9h+yzp^gAFLlYv77@c$Bn5yk;P0m zI{__14pcJttkPq^L8>Iy$11cYY)Jm%lHmmtQinc`?xS@__{6N!dw}#<7>MU#z(DFt zPvCa#S{ps#G%+_DwySGE3^I|c2{>7tUc3(+FnL}_SpU1ZdquCbQl&~O6Y3_BCM<;G zppr=I@ScjS@__W7zS*0hP3m|j#8n)KYHsz^ii5Yi@o%YLh^e1R`yO+JF0LHzpfocS zxmU?#47xF6o)c1du-R+hg?lAw_|(`1!-xQ>U)sC5M40Y_94Kwqy@eDjtkufO zuD8K-shqQRSs{EA|Mw+-EDLz#FL~7M7 zVj9Z1Z#|lKpFqn(*IH*CvzC4}{6@4BF;#5~oA5(y33w@qO##kH33l&Bn1iNvC98Wp z4DlyZDy(r$zK8+mifS|bfOCp0!yEphPKk1Z(CFcfDGgY|)A+HAXn5Z&8YVrv((Jle z^$&VJ+y+g#KldYmBiZZm0bLC~%>7yYDgICHM}4#k&_YT}QfmvhO<_hIpc5X`Xz19p%x1c|u^ z>r9&!5Nw_$eibZwS?bB!Jn~whaOa1Nq8boq;1qjuqI(#&Xxwl{yi_6d0OC0={o1cQ zs#)De{F0wHyS8pngUJ|#9vTDz%aMLHsh+fD+cL<~@&!xDj&Ar^EM*gWqZQ$~0YlLg zmM!)6c0Oe@rjl306PB1fmc|Mu?om!&SC9t`s~kFgA|=_kWUA&=x4yf=mVr61kUt$} z=oc{n6)tY$SNts_19+KdkMGlHQ;>5d<(M$Bz8Vo!rns8WZ=fstFOx17emJeSKm#z9 z{?MQ1IBevbIbsi}^@l(G%_!UUxN*ntQ^ZGJtr&U~Y-!WaTxU)OvzwrmWDJuE_cD|< zu4KjP=iMG_cXR`{x2M%yFX%ISVv*{cm_Avj8H{1^i7u5VFq)%x2?Wze#9J#YtzyqV z_HhAwyJYDf)J{c{p{tPQx@}AsVsh~F)gb5aOtD_#TAO@`l#SnEF~;-V_Gjuu>R0_N zu~}%#cmkX&vea&cUWG&Kw6M&2er0%q#X z+5A)e#@61p{tyT>zd9Qhg_FelRJ%mYweXMrtL-%sZ8>SY&z|hDTScTYrBOp4SWFpd zCy0qWm`U2LD|8rYfPp}_po?W}14HF7Bj+06Cf2pk`Rld^#$=>x(_bjN)7{G1=oiwyT& zsnxHC4}~TKgQLbq@UjDKHf{7OrO|84adS2iAtq9Hn}f?6Dce#^^%^|EHXur|j?9I?UIORhh-ddeiZ zeN?5^cnH+utgw=F_Fa(5>E0}CFx+>wOLPW?7ah#7gM2?!_CcW)-?Q_%rRJv3oODd? zb9yo9K48Oy<%UA|m7;B=7H2GsbipR4VSo#bfcj>^N9M=2CV8ExLdreC&Jf^Uoyj`z z!%bso^Um~km(tQXxQMF=K+uz~RBM7m4_xulO=2RGbt1ctCvX94Pfiq07Df$3m;{sb zLjo-?O0?$6>=%_AtS*5soGH8N52CuzGu6u?*?$u)_p>46-DR~I@;!RDY^wW@NPt## z66`WO+&OP62-mIK^RSB>*GU5`QM{&x6l+P{ElZPciy6(!7##aCwGdw8QqF*04YZXm znthq{BvrLy*v9f)Zj=hgxPAO0skUo{uUWHKMs3LSH!>TR=2ML99!D z>GPDh3UmejGm#~5tl2@x0%{SH>3(bv8Jf#-=mpC>9X3(DD|3rB>?)i|W8s0lhy;v% zA5a3u|ATgxGbx9~NMs!Jhd~*v@x{fc6yRph%lZ~ota(-NsGQ>Q84;WvzSjA5>3q>C z7r>F1&?&+C8;iazswI2RgfJDQmj)6Yt9X)i#WRj$S_ZdRE$rD>-@ zsUIj#Z(?JWB;OSb+OY5eV)tzjM2dI71?_*<`9Iuy`Ar5i(1NduCx#0DU`X9pN*=5e zK5F4?&_7gU&sfoQP2C#T-wIXu$h~oa#nQSjmu}en{C>Ht*V1N`2|xt7pB*NOL#%g7 z&zE>`o7zU0etiB#H3Yyj8v&bRhCq5ll{_A}R#5t!0$J}c9avaU%&GOH=YCt*8pvS| zN1lL*B8sG(7EZ*^9@UF-R=Nx4gNt>T+zd3OLy}H`Md6#w zsR|+KCJwe>&A|KWiNmhQ6~MY4&DQZDWA5!|dbU`uuNMbpjQ+EAn5OmqQZDm`LCLmr zotoQy;+=J&#XXU#9bsVjP=n7D4e(m>Vv#>5aHy3vceWf+I-JtfThP1BeH&Bvv+)a{ zODC>6FSvT=tkyqq>IC!Ca8V~StmJETwUXqaFX!TuIRBpcSt!GtJ%M1gqTr;{we-?# zaKbp;DW?Kv0d^YUQwn1a_G3pj(36(4#OC2E!_gA;-^%LK(rE2b^+$a??*am6NL0bCoBX@Q4r*B7DhFBl*s(ngxkbG0QMQuk+vVh&e{pvT)r@s)NODsjS!J~ zMgdAc`M(FzV;LfyLi5R9x-H3$Gq+uZnQT3tDO2QYJ@}RUaD9bsoxU{e$dkdX4}7A? zFg6;<(4au9$X;?Exm8>%!{B!v;OkgN&h9>heEj>@WAhKJ%xWfkAkzv9{!OREw=E+Q zG7|AdsW8J5c<`zqQDq}e!Ki!i6J63ZIX4uz>AgA^Va0|XThnXtu8Zn$05cXf`oKF26QHR`N%UBaOee(0ImTxfGV{1kAveBg82DTbE0N4$3}kco!t_IGd| zy`Grzo;UVPXCJDa$1$Ip$Zq6f_)FBn;;v|U4Iax-nPs%mMm^ocUydJ;^JC>Rh7?+Z zq{4jdLg7*ZiiaB`!l^veayNAE2;d)42Bkxuq>3gfNgDrLMBTsA9ER<-Mo84fq2ZFZ z`ul@8fD#=m)5o1GL%p$K4?OY8M@W^IRZpiEaAze*gR*6lk|1q(7XvB!$64O4jdaZM z*fB|*HW*thvJQFm5NmfGP#^+um(dO)GO&$3Op9bUwK|W44RzzAnVM<2#ffuSW-dqdE5{#++F#K7O3Pp;ZkbI zHmp|-EN*Wqvm{A7@G>&y_Df3atzgrmr##~|&UbV2)N4tJxd)VSCQI&_rsi1%zH>V% zIjI|tr%sTywv~|T$?F6(Zf_QIb^h6YNLowN{r~jB<#hpDt64J}p(2G?K+0^nLaq|z z>cU$hN$Th#1{vo{q_jn5uq$SZvxx#xh{R-)rVcc&s8zVXNT^-y`Y&za{;U?0v{l+g z7c&P1M6Vw*pU%~tP3v#LKzTkEsGdgrmr#srWyMqP6LQL?*UQPmizlmpJM{7363Jxo zc<~Z!rh307#p@GMskCRO#5YYb0}e!LJ`}}@mTLhbsf*6_+jC>0?W=Xfb%{+XNs6>L#xCtJoM7Z}&l4s&P z-{TJ1**Qm2)AvJlhjI$>=NkM0w1teax9FZ4wzba9#qYGWsuo3+-eG@Ipqx*U^BFT* zQzy^>R~xV8K-cUUIHovIfd&E&v7+6NJE|Z9kk}Zblf3{Lj{M4=ZZD|H40Ba`JhCj4 zLISfFL=vcUms8|13Nvf)QQ758MBqd1s8!cw(%u>zBKHOLHm*z!kYWzo+BL{)&838r zw>R21H03NA_L3uMDM<+wq|RzwgP(6gjbZVMUHloGZr(fsG7&;23>VGC+BM+2i*JLd z|JX~q3eBapX%8Me89JFe_KkNzO5Vpg{TFUA8}y&lEN_Z#{QaVc-3WDjirt~k)FbiJ zNgAbLM|z&Rm=fIaBx@W0jposN{gAy@$zB}q#~S-IGUbr;fSW;Htq6Pi9TQdWdLS5| zzpGxt6>nLaGdHSmlVpkFPhn1!sz6XPNSGGYwAPG4tO;jKC z9c-^OxUQs#8#|lj*)~d-L?=_RVUlSEPHwBJ5Q(fNqp-PsXVQ1HVw(-o|7G#x7pjgt zd2m$}Y}t{`SX^ORre0{db75@J^_|rL)RT9-(B^^Wn&ITWmV76o7Iu9aVlhV@)p=RN z#f4Zl=m1ObU;(h)<9RNE!m77u2Bz1E)@n+zm&f;@toR^Fq@}gxzyWSc$LUPP2kZ`d zmu!;8Ix&>UN{$WqJ-5V$Nf<&J8UG>IUVQ|N)5#h$+{B)+2=&|yj33`cayF0#KB{e@kn zQBA56GxW3Oxc(AnDbsQta;uxI)TgM~3~puzBi_{{C6-&tCN+;qkDU{-adw4P^p)WW zDtaXBLLux0wsR!0eAmZI|_d6 zdcNoM?25EWnY}LU762_0!x2qT=MttreL9yqnX+5l*1`LtV1vchK-~~!Fclra+4+0V ztN_Y6U1%o`L^(n{ z6>;BZl||l$!+n8u)zu0by7LrMGsf_B#hxe!68DMdBnT@vHp*kHW_O7 zbD{cD%WtYkN>A%jN5uNlmr|8GXz14^^&_gM?0EetCd%NDQlRoA)lkBI5bLXjk{Wp~ zef9ftcan_H;5`jtCr_f9rMX~Q!LE={e8I99CXB6wZlM&y=6m(N8NtA}EWX#?Du6{4 z3i03PTJw@918C1oSP&Z){qKOiiS`q)wf?@z&->S=w_spW=a4FSB)!Q zlZP~p&ZnVpbb?HT`6W_$X)#GIx6#SbV;Zy9vzK2y5t)A`+;mG$a_PLG@q(>m%`}pi zB#yrJ!M)`z^vI5CWj{J#Vz6!^!P7~6LxLwGCl@zXE*XnMVzPk)%Mw$fx3ZC{p6>rW zRv^nBAnm*LPZR{pO0X=viuNlXeL;s#d||jUN}l+B#H6#(-D$r?el1nqm4T5*$_2UX zwRGTONNiH(g0!h3o4!}ELz#i$x;*VX*!&c)B2+nIX?= zLoMk(&&3asws#fXVCz7@XTI7-gHA$2UKbstw|n>;i=1fgD^KySn?DCM z{+{!x0 zzK7AARZhMG25j&gp<}&ZiL>={l#v?88NrpNXbxC6h*SsjJW1pYOwD+8?Rwm9DUREn z=Ub@*TIjMv8!A7aSU1I5}ih(3lrUO(-!ReNqXQ8ne$=>U69ifN32V{rkx> zuoN=4FGXM&t*!efmR(s6;3AixX5n9PYar|ZNAyV&@Pv^IXDIml$EvJ-r0pB(hL1tx zh)YO_KRvK^Mz)tgTJ$rrVPWo>TOVzfbc{xs*m75j!?F}AQFR6`=6oy)!{(JIa z{O@=uxgf@GIST5+&W_}=L|yo!T#U%y_UWE#*G?zJ{YU+Euc;>(2~dpCrxwgr41;N{ z+L%+=Osvhi>{#4b;*B!kF*X9JY=@38gqR{Oa#8*#@;Gr!1~$L}g9yoGJK9VR^GM6_ z`L~ua!TS<0l9eR;>$gUh($1vn;)v_fD)Dnf2lHI%bDH}jJWc*p?fRjyym+Xi5IN7d ze|}oY*gn#jcG%b+G*~AnR|(VR|A_SY2+hzqgIL3Sj78&UKmIL?-l9cKSAFAd<6k1p zn{t>&oAECKi+rjrNqspcY2$a3TGpAI@r@smsiJ(m6%esNx&BCFozvg%N;(D#Y79*= zBBhBOyN*!}Wjv7UTdBMIc26b=TPQo&5a8tNePW46O9`n9yfP4cg}{kini!6xeSui) zLZ}^!NEXAx8F2bY`3!mL=F{jBntt=A2MT4N-O&;gQv+X|8NpUf%x@6xtp+=#-k#A= z@AfE+SL_~WSXm#9RGrP>3qfVMvxBE5GLT?!5GL&NGLs4(*y5TqQX>2JjPCyf&0wM( z7DE-lW7@l((MjNUhTWdUSJJNu47Mt0=m>$(&kT`TBqw2t1&TBf52fPRNcmbg*8|VgSDWSDB%k3n) zpD^v39hDpdkR~5~V$U|8x98L?_Vf}#dI|)g^Jnhngny8I@-p+8Ej6GeT9jj_o7K<`)`#}+MSctessp$mTSsZ=!HW&m$rxNqS&Kr2&7CAVrakYqwx|d zHK0cZMTJYRc_G9NZJXDSy4|M(cz>{<-3K;d7%0>C90j$-Ca;Jx4)T^v1qD(Z9l`B7 zIm=crQ>~{B$}|842fU!<@Dx9TZL3Xs5*nQ@mQ57alX^LI7EBh45_@p6D#rQuQQQ0Y z&ARehu8vOohASBz5?mCk#y`3~K4v>MUl5r%&=*Lbh0<2pdrwi>Ue=cDAqZU4Zno3* z2j>0=DcnEFC|8W-;!UXGz9%lUPbigzwH#%n!QG$5zV;blu1-ZV)Dxo}N6-9(AT@Pt zEA#ruagn4TEk@a%3xbLs0sWnhKRx(6cDSp5T&28;X&fV_t>=$YuicH^ZnF;@LO~QH z0a#9{O9TnpWa;nH#mBA?7aeeA8gbq>84%$no7Mad*#RdwKXtNNWojip+v^eEF+%HH z3;{!%;DTw_kKb>=Naf;3Tl0g1#vtNk$y?Rt855Z_8}f&3Ihb>-@ZJh@oMTbL`cIkL zt0Dnc2*dF_18)!Z??498@Y=-1T} z02Qtq2BT}_Jt6EeEB_IxNc@f7>DV+(-;OX&-G$Y5w`@(iuWmz4nxsN?AD0$J%9xY2 zSnQQlyP0OEiV}R-NeqjwRq*QiutVQ=59)t^NkERh@D)-CZ>uKs2%H|xmg(I7H4%sPHO3O32+Q}EJihT*V4b!bw6 zPJ)&qMc`=c>FXM4F3wCntPoV%#N_E`qIP>=wg{{>?Fy8(Fx5xVODok1nD*7kDDJnU zIkoZHEJ>mPbiQXx;y3IF#}}p%#Nc55FU3;-s6^QL!py%qn8vvl0ehzhl=XboV~}h! zmJ$3S#4t=zBI>;1y-~0^T)+Tb-!G2-K6vS3JP;>uzf${C!dFedq;{ZfoE{T!*;84# zqfgucA6&HPPx{A|0rTl7#+3?93nEuMz--AF4KhGmVwq=R6J`~|)4V{v`xK0YJ;16# z?lDTYSF?9n(he%&1C3!$q29j4A4*ucvqdl+4?M?n%%|yt!iNN$>-SA2%9lvYAv+jy zpHD~-VDa$VmHXGqXFq589N!oSSYdlit)%Ss6z82vSHmltWHZfa>m=~lachySfdd7> z*2L&)mVb7BD7k*KEM8p~fz~#W0W`Om!50u=1UAQ}O)8>zXyJVTRMkXB zc;lp<(OaSXk8vKe8px4lAE;W^-kE|tA<5!zWKYvQmA;uqLpXlzI zAeim;4raIiMqP^m^Sf*di|qp-Xb0N(^}|Zds4LdX!z&tZ1?mx-t0uA_5C++iSD<~Q_e`sSga*}MQbS13gw zr_2p(?VB_8Gs1@CGlcT!JJhzNPcJ=|{Iqn)$-BZr0P2=R^izik&5ZTSVBu6eZmE`=1K*OZIP643^H^4GERg?2 z);lc;!vt-%-EZ5rZQHhO+qP}nwr$(CZQJ`lm_0G`%`H?^L}gY!xmJvmE1i@>3_8FY zke*~B-hECyJ;9anvf5w2&cR>#G$zEN36;2GlEZB)nR?qaubD_d`+0=%M}hV;xZDXC z#^th11K*e-OGH5+?>Z%$5NU4YD9rp`&o)je&MkQKwT815>s8v~X6@qc0g!(W2(~R7 zIMy|=;ud&V;|f`u^O(u@nLBpLSu|@3g~sE8sT@8FI0U`Bs(g{hFoWDKg7T^Umq@Vm{GcBp$ zt*XO8D^g{99)45C7(#r3i-u6N;QcXQpP4i1==?=!##m4rU@4qTTD$~d#=ln4UsM5U z3=gus9QrhY9Pn;~k(J08kT!Up=H!$XhHp{+4YFh+9@9Jp&FrtEgirJMQYr%^hS4or zRFLdUAU~+pYTEm@JQPgLeLs4Fe@wwAeV>3}M6s036aGB?b6}L`Gdfk7@3hWel zYU+RV)bL2^E4;ai$6aMB#3u<0x$AN#v=wH}V0n}tOFpQ7VBpY*RE0O)E4Zn5Er;{H{VI}rOV{bY8zk5xDR*@TLAX1cZU)E8ALyRux&2cT6%a(h1gq9nP zL_F<9R5MHoh(nPq^-7L6MiUd7eQu)0DRtzq^JoFTNue()$wH5gKKV)1Xwg6F`dUhG zVAdfuAweOgV2qt-OtUaLUG(p21asAaAOM%eSB%?wNge~^#Zg6Q=c9oz>Fi`m~IIU_*(fXfJ4yWE65 zOLWnu6yCsYIovLaziPvRO5+B8<2B`65`}EArV{Z z;Qe0%Xp$4keDqwtUwRX}=XC3aeKJblxE;2!Vc`8JDK+S2cVvEdDAvbEp3=cu@)5!Z zRZSOrK^TZ!I@ z`+8{sNi2b3eKrc~zJt^Me&KPq+C9PsBA2yX6BGM5a>v8u6munC*9gx0i_`~X*q96$>m0TgTDi69047V59`cB9bF=~b zKEm>TGM&;-%g>2(&?yrfUQEz!oMu0aDlWcD(WGqRNENYq)>b>Amf<(+e(x%w>Eb~0 zMlpvUI1V2zO|nbTCgEG9TZBx46wC??+Y|Vww2j-z7tN84)9D)3TFwL@!wW z=V+nopIGam4@S7b;$2wk&S-pUAeO3N*ziQbKhdWfexf9#wnaDxl85bhSD6+{oxT! z3u~ZZNSyI#4VBWt&w1WFqRn{4z}wY@Vqc?v+QJ_aysX!l1-=`^evkl=A?Aa90r`)J zR&U0MmMDZHYh+LX(aU1wCR8&$P2!H+&Ip9?^}C`pBalJ3n#f^D=g^PpyT`t$-m+IS zh~}letl?{>>4j%DdjS}p5L?W5}y(<^qj|-%MSazbWMVY$k}iwGmR4wqs+6jtl#MvvN70J`f#O~j@T0va#wis2Ab#OipV)m5t>0HaWFomB z93+BaYI}gY1MBE8H73O~QD+Ovp6WT5q6*p1BmzOiJd=Loyb-{8nqHmY;AF)@rK4=Q zy4LUJ8c1M_&xAVSwyQa%C}T&^KiNZ5PDIOfx!|rTMgJ&=eMrFS=#rb88BO9N(W_GU zb*0SsXkcPjTFL4OaAoK`YYuuLpfDy3%f2yBZL(x+_2U<)6vb`0G~X157MPm{rOzD6 zu`(^W0tRb&kMS-V}cV-SPZ1GjqoRI<3n$a(}`&0W6S8pYA zKG}X6?FE%dl@0`uUbPKirhev#@s$_bGaWKH0w-w}#$w1{i|!KwCyy-w*(WaIIc8C^ z$nnrs#!Z=ix(E?>PM+ZJ%p^Mxhd6I_VG#F=SxQoZ_{Zbiv2vEQn7!rX8k+aQ*os0Qq0h0hn_{5*?jssxTMh>vEr4QaDAW2`G=-8ZX$F8F@S^;SzA0$*dqQmeaDMkiF#5Wke=uG|ZnK5Z zT9er#&kl%fp1P_H6Ewpj$H03KByaG?nv+V0Qu&ly4#K|A*}$1l>a~}CNig(9mjNN& zA0OFgpYAFE`8o|h6O4%pUIZ+@NL}v-6ai|1G!hFrljD*GCe4Ph%=$zZ)PqzYO+3TZ z-*?A6R`{6r(Bq&+gO+?T;0T}`lb9f=Bn12_37XZ9{4**dItm9jvEbBtBLy+n7=R1n zep1r-sK$#6JZ>%uk3Yp;lIDmo3t`o2@KT{aCsarAy_k{wo&o!x991(`JCWy8qXg z-@pfa$ZSL-LN&x<9C|m=wRS@VzJr#oeaav{S){26$&@iKyJT29*pp zw6!OEY{pggp8kq??w59(5MlTk4BO{`^x`9an{&5&!>N86EYci$D83TAhs)9NqL<&C0{BGIINr_+I?he;R1?9^h z=ifO)08Pl2PqbO04#UZjyzQ-^`!!_!{wv)mJpC}fguPhPt(=QR<(7QHesV@YNK@Y2XMU7iNUpd5WRP28{IK6^&|;WE^4!P$ zagInXFb~H1uU17lxBho`>ZZ))GG+p>rEfP?+ks2bD*M|wX8 z!D|sohJ{Y=Ombx1X-7bcZf@g}MZxcb8MA&U&M4Q@&_w?A$PbO0l9;r?eMX9|S@w&rE_>{9M(kNHKS|$yaG& zxM%)p|8n5>_0H99eA*{tPGhIzD%ErFGWiwMDU56PoZ!R50r6ftDbudr1+5yqWW_>D z9EEA3jsLJ*Uq#&DaI228uA2VV8OGyrDUjMuq_h?^&(?QNd|GXMyyF2>FC(ow+>{l8 z0ZQ_N1DBcOmkfX$o#F}X^v$^@x6f$J+|#Zhv8eSFgqYg@ z&d$GMYd6C;RKi-!Me#WMxAq2x4K6q9))9oWD>0PF3qjw*HyQr+>X|CPcdci*96Pk* zii~ydN_hm1*Os~><>p3}YfFY*Q#TKqUjW2~?^|Z#I31y*Wj?c!*M+S3YHkB)k8LzL zoz^4LlU0r&2{fd}ZAQUJstmxQi&00MV-|?f>mLmF)Hj)~lVbvdlhB4d$wqfPf7@>V zdAq>xSFt{^i^H3iD~#Jz{~P%ItQt$^gGYsz*f>%~n&ze$?a)lf-x;c{4FnI(MaF_) zT;fAwRN6gP{Kr2qZ(U?MI2>jH3HC&Z%cOu(-z! zOI>QTL>HUdiU9^E$H1sv-r;kzr8n+yHk*RVXOag&Cp3N&Kw#v4FGlDAQ4)dTV;)Sn?khraLQnCI76>}*+8 zOrU`Gfm~b|k3Eu~^2R(xze>tH7h1NfY!n{wlZ7`UEp5WgvTFmj4g`s(N|K)l*;?3m zscKE=bO%DD*QQ9eM1iS21b)G}K&fZ8^m{98ZTZ&Tp_2s-Vj;24l#}xeyo&J3#ZNuL zn)pi0ERgdkv7*b8e@(9H9zF}a<-Vw@$6pW-(~az6F$I0(Zed0<)Kih`0=JrYJS-|`oA_Q~eS|D+NL@lT2$y6=-u$lE zQiRE`0?U@qL|wACA30N&G5sw%FvxVR5o$FS zb+dt^c$aobh?ICT770Jp#%9ys=GW{hhQlfTw_n(GKlqp7z$-c(-^V0SP6^WHOO7?M zajOJ*z{jf_08anPV(#3Yq4P5b4UPmf3FbL(|3JQH&3|Wk#Ca42K{LgusQs+HSkz5C zvZntAS?pCCf)$9O%s{{5f-VJDk)jiRv?ZpHx9A;YKWh9+E<+Py92i7`6Fsezz1hOG zA3$A5mQlXp_| z2Zptj_qV4UEG+-N`uCLd0OTu-f->H2RBw~w=8JRjnKO7?;lTpb5ZJ4z6`Tl%0>9C~ zam8a&%ZI4CU4`wu2B&1lDYKhnXx{m_Esf)2Viz}FXw40VUf*CsZ-W9Ok*%@DtSyWL z9Z)L^d3InuW{v|hWo=4?%;t+JKJ7{tpCbM`zl$}d71~m`>7PzH`LTG0Qcq?eAaQW< z6zy0wpJ_77uYbZ?(RvAQeu;Ci3U)jqN)S?IaFx>*s@9-ib76&ggH+R6APW2(c4yq4 z*UqyiZi?8YWza@Rm0|nE1j^qmEa00R!Y~NwAm41(Jhj!xV>{YPYL!eG-@>Uu7U%uP zji@mWJGf_fGL=&vfe|j0$1b~8Y(U0LFhEmY<7I1pNL>1-N}NY-DY-T#k88)fKF7C& z+X=}^w;fWUdB@22EpK0E7?r+F%(Z6H?1H3Z^=iUAprkH1ok-Tq7*t4aG&>QmZ<`2Y zML6`h4q)z56hzm6xJiSY47gg76Sxex5tN*(Y#x`_qSL;IykKnz&TASXmFYzmtgoQ1 zI}yd)*gM5yY!OWI3aXG>!+F~VW6UXuoym+v`Z-ePN4?fEd~&jM8)pCiHWf)-cgM=* zD|MdF#JAa3H^T8(cP+czYBtNv{RY6@9}S^L|&0Iw*lknaiO)?$Ng>)&l&| zLqxAK@V@{VJO+wUYn7ZuHnV)rXz|;s4G+pO1F0hMaWnFTYROv0_YYpzM>f#o+Wjzd z_O~vx0xrQAwtCd4d|M5ZQPfV`J{AR3im!6P$A3t7sl3r+XdX5*OxlMbG1I9RfoM0m zC~o&{uXQwQp2;P^W3V9{33J{C%cVaYK?}!`GG+frQ^+>{PqTclgUW>j;XiAn!WJ~r zFuU4TM&>7{R+PBt6c=nzl4L>14R(hx{y)#oP5y(MgOB#O@^j%^jZg4Ab&I9`LhkR{ zs;=Vf?W1%jYXHkUPak4X&Nk`{KboOfe1MC00U|rFMK(ov&porV>~@j+*QnWiFJtkO z0`=b+0?ohmW+;$Ka^|VGG(GuLzE~>eh9p9_)_C<`oTOHXb9{z}^lmNxUd>~7-uVMXURxmPTml3wg(7Tu z7Js;BXXqc_s?jVWEFcC(lMi_p6~+}Rm+x~uC*qweHMZ&<^@RiI(=8BF z=LnP#V{N}nXDZi`(V@o!Knw0vs!rv($fHU4zX**5mV0tRs_weQZx)^w zCOC>P+prYE6@x0(MR`#7eA?Tr!q9$lGw>Z$6wz=UL1E~slQtMPC=(8~4@hIOIM=>s zE%s$RVh609@heK}){i?qrLc<|kM06>ob5y@oQ2{^J{nH}?&@hN%{W?}cLaHB)W=DH zs_rB#*r&&AU`oK!h_Bi9Q4q?LEmE5heSr5Pc4M<|>*fumrPM_{_8Ck)O{_{vCA30h zh#7#%rJedHXJj$fRZfK;>0O*5j*qYpLlgJsj=N&c(U}%m8al&CcGJMdgFAO1=&UMU zu4`v#Ju7r+L6n3uGBi{RLfWqx$0AK8!nGh3RV@DWU+Hi^SHm~}K`t={gywBB!6Iz= z;oD)u2*s1y6<~Yk#bUv{Fs;GxefRp$s8eGNU<6dGe3?_^bA-Jt^xxu#9jSPVQ?L#L zL_WVsJ)6h>q5y`O0A~X0+ZP5cathv$6zKAS!O{M$iC$kzB@9?sK{qUKG=vQOOs}fZ zO06euibyVTG4ZdLWzv5Dy;*$JO2Xq{9}=ndmJ*e5kOq6`zFC||A(ZUBIRdOqq>2Fr zh2yHgC?3z49|kQ1yt4f%<2T9(-=G+rB3Fk&lFtGHLn(ChW5mfU3qZr0V^yTVKs?+D z()?%Lk&Ft)`L7Ow%qcpX!i@iZCrhwcD-&H~44b73QFP1%XUSBE4F{?w($aklJq%D; zci?~OE9$0OV|*(69^@#cPH2vsJVPf{T5`5Ro?3ijJ4?ftDGy91w9M};BsI3V`*%sov{cPW_R|VFp=_f9M`V4xKC8l$cw6{-y zu;uBp`pAy+6?`Efu&M_NBG8twPGkZ_m@wDaw*ne1)9UlQR6j*r8!Y?IV|^}j5u0gT zqvGcV!*)zLk#Nj**`c?8WiVQelP{K z>~3l51$5)rK}AFrn?T6U`lpk0g$w7cRn)K?CK>r}4e@7&y2_kJdRbLAoNu$mE<~=% z6p2UH!LiTY=ION-L!WJvCreSW?94O%Gwux1T`zZc(m7^orjT-b)1xJCcoWfRJroh} zg#cJQmkUd`riWV~-(o|?oJ_3yMQee+52DhbZsX$}8Io9pk*-g3G)q=8`*V`~9Dcrq z{!%~{p{aP0$p)C4f;kjC|G z!ZytlmaI$bF8ysIxNln+C%&kLZv$N>0+_J7A>z`5#Dh?TBz8VE8%nuux8Gh*tf<}N z8LWXm+8nB}A4{LV+Z~`&T_V@MuJTxwPJ)*;PNPXiL66Wias7!5 zjyHtL2Uv?ms4XuMZO(my)3DxvE(KJ_t=9)$Q32*vxD(gs<5zkEl_2U3%HITj=3C&I zYKRr3QvFcqKEj>RvNRP+Xls`x47q#urHspzCu|*id^Li_dE_ z!(+Yc1dC*XEL!%_uhR;DZhFQq6YiAPo*qrdXl+R6(c@I&k>V zqm%pvca0Vf4hDIIg3*10P&SS~>+>}dqRqq_gS!p~e(tX4 zKl(fv49fJN&6t*KNYvu z5(S`DoTUV)n9M67hbgDf5}xn&tfNygT1FwM*wD>bWy@t;%yvEMEF;Ibh&IqE5X@U3 zcvA1aui^**smgs0?VRu^#g$V&7EXW1%^tr_ch~~13G<5`yzIGz z6O*1G){5k44I3bv#hVnnx^}nROjEvLLlUc8y&)JazvZUxZ54z@R~A+a=Mcp|=-4r^ zC+6_FxCR$`6ZRDLjI}$_4tzB)c7T!+ZdiKdb@`ujahgz^>sggrw8L*X75B5)%|C1A zDl5ho06ra@dtQI5+Ytw3SMDaLx1wphL0nhLyL&tyHuj_0BmeRTxo$0m88Q=@D$dcKBPOukpC(<>P9`(NIgt68wTTCpd2;Hc+T%U{FDA24%mO z0K}Y|MrA=?RMuFm4+1C*B6G&(^5Ip4@iZd~97KPE0UyS{u=xX`+xU`8+(K3~&o9$q zG}GA8&a=nR;17TX(Z%z(?jBl-y203l91-jg6p?o~u{E~{2*t?q~V z)Qqq+)cZjOs#H>8fK}18MoEQ|sjuJ~<3>PpwJM}TNT=Z_g&-f=)yh13fW9oW{{g0) zKI>2fQvDmKRCn|DvnWN|Lg$XEN^l+7psaK#T&MCW<=re__&RZ%cQshQkg#GnF>*<% zZjXbGXM9vIP?|+71U?xCxlaFFihv0A5LqQ%Nqy5Kls(Fmk^=)_6N8yO9`Khri z*WJoIAR!Tj^jOQ4qCc^xcPKsi_TMC&9W$t%0K*6{ys-S#xNpb8;MR~j$_%ZPv)Yv@ ze;#8^pAK7V+F^S>*bc)<>*MsYN^)zF(y4e{N1>|^)(?k8cMIhXhI@?Wr^PDokb6fZQ z&i>m%GFS?yFN<#GO6!Rx0`w@YfC(cwrWNe>A%g@dp4J=0x6Z2N&1|mydYD0Y2{&tG z3=7I{Y(2A^uEtwGDl#>~V%8W{FkueUX!fvK>)19WqXx%5*ZO17mpS7Alw9o1?(ek* z7|{JITjXlLO#O`eLDDT-=)!!m)nPP^LKr=tUZBm+2%P0Z-BF zV@s^P(V8Fg;A9Q_lkz1J_}*V27s1wOya1h8!)-tm`b5av+Rkdvr}v*-U>(jBY=lOL zr*4niI02SeD`50{r+ca7pm@)53~{*f{;GP=6TWv zWW$BF)nebi%8ixC8W7ed_S))Z!EsrPp+m(X>~;Z&^p0p7hv{rQ`J=DfInNp68y$Bn z<$G=<6!N*}hBAp_I1%>6qK!p1^_P;Y1+gS8Ju~)plG|)yVw^0Q&CfSj8gH;{1kPmM zg{+6cJ*x^;rzKp^(bkks|7_D3@nfBxQhI|v_|RfJiL0pX*<|V^$GSc|&t?GbB$^z$ z5Jx6mrY*R7jR4~7)`{aTrJa|yX=bm*#tyu}JbFY2FhKuidN=*HRFCAihbEoIIvURQqZo9D3a35sm?Q zee>39Ux*f1r_WnxBi*A;d1~2aA>ZZ@j<6Bt7YU3?&C#)KmPl*g$L@GA6?7D*!WcVl zYaE%+219hld{Va_lWajbL${}KI<{a>FX;U^F&y(t!LAUW1QsB*&Fnr75ZzJD%20DG z$18JmviRr&pQ}E~ED&Okp~%_lbGMYVMnVxX9tmr1aEI~l6t(+X*!=RIJ7`w!%eJ-x zFPFA)ej%TNh42RkXX)Z~-iRx0Ik(#jEnmvXaa@ca3 zWTy1*Jr?v0Dq@;T6HQZ_Uf=wtYa%i^H?fZ6h9yU|aUXA@3-o<~&U2aMkcixO5I4?} zf8=s;s~X?3i&8Njb4&&YjApD&_o^6Gm*}I_+_zg5E(rH^GO#$jYZYuW?@5C#kz&Mn zrhdxRI29cmRdG1phj&z3L_2zuY z`UhSULQ!YMtPy+nGVf?IWIMec+O}8Jz7hqp?0Cr!U*QJJ&Mkf3%<8EBD$5>!3&{DB ztLX^7k|(G)v3}O^Jn04jLH7+dy0EX0af^j*S^6FeI(`o?pIU-nO6l%WS*~u%E8}o+8~2MW{`1NFzpMEd)3%-t9@2(T+yz0`%zvzdn|rv-E=OAk)rC)3=URaRy8$GGSH`v=&1UP~ z$2!IM!xg~797%W}Lt`%o8MyGY!_QIoEqD`xJ6}c|41UR?$ZaHGqrjG>5|VyRPwfN@ZRMGNT%j#-O4?O4#uI(_FiCTPpd z5$-}wm3_^GjclE535!{F@6(?t4Tc|l)(B+3gW>`q73b*?7=4;&1z5lTWdubfo8ZDa zw=J}2Wy_;u;G8ppDvi0;pt^)jKSs1IKt-)De}JfeYw$FKe|(rys2vhRlv0C8&p+zx zom&wHCvE+uVQ-E2B}NvvBlhaT#g(x@E6!L<6<2o1Gdd#_TKuhV68FF3lq|8KzvlN^ zJj!?Ke0ig(Yc0K*JuS{m+|nWr{0CstR#L$^qGv$nHFLV3Q1I-?mTZ}X`< znZ70kCdDIJRqwt3BgvZ^^f*)&&m2+JlL+q@xZl!OEr@#f z;t9Sl#cvO_{fEBMX-=frnBPkI(Y4B_{;WZ=qJ56FZZC_J5M$R=WQC3vFZLu zh6jXM16xv$Lr7Q@46Dc?)uH_cu0NKSbN_xp74^**i*)VYwCE$1MZNgMhU}%o+YoKW zzeDQ?(KzN_ZTFpsns3`qSu-`Ohu&VX2)Y&BizoxoTo=6Wnir#en)h9k>-<|uLGDkA z&|LaK^{<%Cj&{2{?y5;J<7u-~!bT%`4IGF*w}-JLO;A7Xhh2mBVD1X3D7&j9|9crj zY3Z*AGxj?T0;-El3dJ1=+~a-$g3R*j$N@ec$G4IhcgA7sdc2z!zYjv#oY*lH<2fs? z-Zb%&XS@k~nFur1QAbX&#gPeYFK6cM&(Ez#u`3c0W|6p~7mqD%xVh=nq76$dn& z09`~ika6~VU-H;1@qMaih~%UZjXmWY4Cb z@hB=lci83H60jDtzMfgp)v;=Po{)}@vp(5ys@%1o+Z;HzTmP9RJ&}!ib`hKMHr=(7 zGn<87st-JEQYt>%pQ4C4j{MB^crw-PFKvr*)Z5Q++><~&%@c~P<5ba#C8Y+;%a! z%9g_uNSx8#;}LHVy9H+O@pLy<>X2#Bo;4uTF&fyajyq&_vudOJbZ`S9M=V^AhB-VD zo((r^A=80ac52S0QUl~yH=x=_Ja!I+%0hxKfTV9Qj%UDGlOyl`-qBS^N-uTN4Vz>p z`|=95J8#n%uSW(1d}JPmJ0AD*&V$sd;`f^3CH^+V>!?25rR(e|15Gul2)gKH4)4ni zB?Huj`5`^-$+kwO{y zAOva-u^GR)+IP7W0HLqZvHLxfkq{A!Za6499NR70`A&j2>puuG(RNAdT<2tn0#ir$ z7zyLCA6>PE5D)B$QG@AADu`kVw%AFAHG-}rDeXb^F1Ft}cGc)u{ znJ;X&gLc&4p(XW-vV>>;pn!Eyi%raOtvZB{n0uwZo$$?_wdfnhCjRo_tcBhqvtX+c zld1gL66I6LW@;mi|0!SY?t4cY++eRl)WTq59@VR`xb$|1x+|}`Gs6tAivZ4~PhaF3 zg}SXxt-eM+@(pr>B(!zt`$c#Ku#-}w?Nn&)qKYHI?Nx0sv81W&Q_KO&mBR>t_Td44 zONS)~OhUj+n$oh2R4MTmF@iVh-fP@7CH4~#1w672>)G0N0I{;)1(KQ!-H(NdLsi5Q z#GolRU7uaoj76GHe8cGgrgism>RItghyvnvlZ?K7hCpD02H}xvqx3<3L^?f2qbx|r}`00qKBs5TeEE-(T-rW>lWkMspf|t){>%2U=dk!!)xua2N4aJ3NfSq+Pb{1>F_94m>_ zuB5+WMYXuR{`?>GKB#4XXHy#Lp(Fc?dAP# z>tne^qG*9?19~cFeA6)dT|=|=h{k`0XZf)W#?6nBp>5qTN)OK*NaQp=i&-6_rPliQ z-nN2rM2wlKvFt|cszdnC_kSrsKR%QLAPW;!DE;uiBr~zKZB$?JFjoeXd^e4P0580e>F-M;z)G<8cNmv_M&cuts#4$5dZ+7PuiLWx55;9BLi_6 z?XU4ZDo*1+Dh{0zDM5#iRuL~h!hV;xeyvP2E2Zc(pqCe%3P0FI(TG7$kK%DBa2bS*%>er8%8tSlY*>$bUv5X8NL zT&C{Jty2SPkL%7=;~*kis8TB9T*w3Hz+W!_spq}vp*8>LU?_?dK+AI^>G>J^fddUp zQEx-Zr@)-v(rEMU=8H=>MXd^r0j@6U!-#Y(mf7iou%Lcae=nWy9xH*85ToWv>njhG z^H=`mC(F3Hu0yFYI_Oz?sp)HukPxb*=G@mzpj*T{^CmM!oz;-u;3Vw<7^N7y*0kje z6mz2&t2t%y=+buvzU=mtV!qKR=4{H_`Nx!$N1o%N1(r&^zyC*S$J=>L=)U{fRH%}) z!blE$2+%iMnsE}+0N1Jk)0iJ^N3b7X`f>wILvYBV%p+6{5l_kZ(Xx=zk-Z=WW@ ziI@{~O3kyWfgVyTBE=yKM4Q0XuGK^|^&?Z$#nnBcK`_9Cy8=Lg>D^C`E^B1-Cu^Fu zCNT$XLZj;7u6)OGA?0daoJ#!2t8`mykgC|k>qSf~sl)W^&jZY2iO2`CA;{Y!=x92F z7|^>!x_*`J zQKebb{dY(qHnu5K0$pMxW}!(6cp^cZqyV0j`Xz+Tc}Q8**mbHmtm zCl^ix1SN-E$_F|3;By2hwfptTG%}=|N{THxDP;qN*^$*{KCjvS7}X^lY5wDyB`yRD z+Cfi{2O5v>5bA@Ft-lZ_EV0lUSeGH$~Z1`6@iF zxDb3V_yn8A!e>Rw5rlLVD@~7c9$=1e+shGJ=!zGOGXmeGWCGdEgvi!~adPR<9gub; zs?8Wwb_0mZt8$RhIF^PbS4=_Hd}I`5Am01t;vN|aKKOgj#2PrMzrIv4nwJS9k5{w8 zxd^FJjJ~GH`ADzzfgu%SfTP>ju(bcWiyxZTP0@!Jlw7~ORWoS8Vq_ZEjZ_dalP%$p zOfSS*&3=-&YfRvCqHR_Luwd0j3G&Dmda&3eWm0UWFaVu*Vd~?MK~KciN4eZ=qz!`R zln8gTf93UMRTiAP^nq>P_V4g~!tmfb3vf^dA!aQyhfl`}lq88am21tl_{r%yVWZ~h zvfKuT@Ae{Vb~yQoeZey2EHe2^#qz3Zqb1JlAlJMpW#eNlBOa-8V&&Xof!M5m_;p&2 z;$6CBeApuz<-6l(@01&#e(QyMg~P7a zMld6GY11!ye`DcKdC*s6#IA(mpDQ_g?-?rGK%F|{Mkh4=fIC>sAqBQMFLOEp}q@=-b`qsPN{P9*=jKRiVr*_ zQ-f8O8WbzNSo0cl$AH;&`b5?WBDuynXbtXE^ zKo}gBc{l( z?J87t$p0kC7DXTYbr}VrUlF+YO9klB%UhL7-EqlABly`qOg1>zZ|B6MBZl+Pckpkp zY!lxeraoA3z6IbWza74Rsi7FY_V-FbuTE#vHQ5+KyPhz>q|}?sIAG2X(nZzT%#7Jk zBUqN63-8rGx9jSQnB+NoTm*Yh1!%P1#;3Wdm!#7@{RvSo=wNY&T@b!}DY>ek>3am= zW57C@m5TsRIS7`>I2sq`;8rXA0u;|mb@RZyRos#X)KHXvbttvAR8n;lyBa5@)NS&o zqDkT^$}74c{^Sa7y@}83u(byac9Wp}O&nJ#g~x^Slh)cfC)_<-bt-SqFcU6K6~XZx zMo1UQ^rlA-W$?trDD1fK#e|N)MuJE!o+u;ju`F%^+ru-!J|Kh`EE>pQi&%j7Qi(oK zQ_~wEGamD|-#*8h{YcOZ7_1=0lVdcW(5<7 zJ;r}1@-A&@szi7_gc!RY-%#SN0n4DM@I2 zU<5#9iFX2%v<66r&Z}+ ziDMcWIXcBQ&{Qf=6K9Syo|DaSsYeQk59D$981l|U;;32|0)qNN(H=HB_F_(z^Kio4`cqh zLG^gFK&F$dVcx|4KeD*$l2P=Mc7Sy~mu5mgBCNX`)}G10u76177ByZBP&gC7l(q{@RI@*0W;TL|A9^_ zFshN86`HJAg1j`1`)1IbqV0T z`sc;o=hS?BBSEmBa5I_d>Gr*rbYF|hes3N{;`yoJcC8H`%rnO`t+-Zi3G+cn!{EmHGNJK)Z*tirI3lyb1Q?`WL-<2^}lsR^O(2^YS*rESM29@HzPeTU)n#;JtMKcRrU?I=n(yAROJFFnC9P5q5)pt)0tTtmJ1|H(#`A3CJT?@HG- zZJrk&zyOI=*L5W+HaIDR?-|FXdV?GWF}b^v0JkYhZF^5`7WJ5oQad0uAjB;c`g3P& zl}86R%+g$a-~x<7P;QAg)P++-5YnI^S6Fh_<@^Oz7e*F7)W zMk%-#zWfIUU}S%f_aA%;S6KLamzQ!^kQ~9ub#T!Jh~7J-4qKSY$xXReG+mq-Ud|rb zzn@QLNElPR>elYtMWQ=;_>|F$+;3xX7%>OpE|^O1Bl_}?A3dz8iZ9lY^*FE>A?)lb zC%Gm1WyE6HQ*X8;B+y@-5|fQXf<80zjo8k%FQEgYd$Q2_33qn}!$p6U1S1q-{B~}) z$eP~H;xfgGrq&^@Ko~5}bo0TA*O)b2fG06%vdCecOW5??wWwF7Rmd2p;O$39`k=)A zHgbX$rEiO@*4GqgReP4|>t5$Es{f#MD{2kAKzY1>CZxxflHAJ9Er%m)U6&CtHiNuW zP_J5#6RYRAPn$0E=K_6vxXD^>Y#R;L&57 z&?PBWVy^?NvrJ_wSh9)pyl5gL<8A+tOciIV^Mm`sH-G0r^yZ~j%ED^(DI19u-eF&e z^CH)>+K?WpwyPC=kKv^?_KLc)%JzLI!^8-?sqk*EKA3cnRBr&WQLH<&t8uL}4>QB` zUd)H~J^u~D)+9+xs;cde$ZqCF@v0IdSqVS^R0Tzm^a}=M1cUp^=ICc3`RddkzXPH2 zkA5}IEH%J{MmH1NKazrpbw%NqXsZ_*)z)xFCqfXFDkzK(Q` zO{oCKf!PSB^Gf<3h^~5y;zwMCf|g_WA}tJq{;Z6AhezTA{P7C+P^s+* zeJaqqTrMcJ9^E!;9#=B^-6X2L1Y?;YCD6JP7ZYJ!&f!@RyVLBqVjSQ1<1aP|^YRGl z^ho)FHA!iO8dME~14FPId_i#;X4lIb+qL8V0-A59wUWK^>P5BlRO?)9C;5*V z1L0?9UK_6!Kl)R?&v0S->Aww?6qo^l1C&1of4xPOTTGV8H5fdST|Z4fX{5J~ zSc@em;Er+DvOXq`TcRu$sG}Ot*~(CsD{D5@4M?QR2|slEA?vRr)mlSAySBbYB*j_u zoB&5axWBK}X%sl1(TaIFKWt5KqZP;XFQ!0eXcG1eG_4)0qSTH~|rTCW7+Hu{riFhj0WFTU}!a}^$N zg>_6th4=OvCtaz2`__pm`%Ca9;4>nZ>z4sQ8RO(WB9OZfp$PqOlP%P)*yrRw(8!JB)(vpb{jX+54w6A8kfD!-% zczE~j&;?qyKj`ff6uYG*tgTDL@70bnCX^4a&q%{nP36#B ztv2FDX=(4Uy0UOKJ^eshV-rR6lke|$N(8eoCR?hl{E8d4W1`NO0?-lM*@sW$oUqui zufooU=r^mGNQj)yig1E%cP?Q85!TP$CDHx69~KLbDo($}I|dv{ZQS*?Xw?^LFvtUl zPpxl@V;d|-8=6Dj3fNDs^2WXG( zQ4d|-f2UAYm&m*!U0R=NWlrX7YHfb}JKwK1a{llbINX1V@DS}0stf7Rm!`j@{Kn`d zEwh-64|i88o_H3>nHW{6b@4XA$EOZT|4AguCNqU*!U=Pd@}hXE%FIseL~~TgCaMVy zj8d_Cjs;Hc>;C59EC7Fi*Y&y#gX%Rv%R+#*IAJDe!b+GixYe<3W-$KGRx-a&|8U2| z5{FOAb~*aqeFP(NqnfP8n+r$%z7(w=py6jBs-sNQ{>*GlVVvQL&C_tI15m1@3D$#G zE&F(4m)K49>ey*SUuI+zg5d57l3kr{10aTRk^zb$j%@Q+hznp892s&Cx@D)%v2JZu z*;dkXYnFvf>+YhDt;E@WD-@x?gv*VH371RYtbK|-#8Q1F1=vQ2jgOFF8U-&Y!1Mt? zLJL-4pCBX@P%X87S|(f18r$;ZXv~rVcj{0sX6A{FgM3R zC^*>5?GN~Iy&IA`3IjIw3>PYcs&QZ?Gm*?G=P#Z=lSK*UM>4p)2;osfvAYq+y^jF# zC8mnV51j1{~jpx&<}*z{V}c`AHBF&chTv^&PyKhk!1(5@#1Rl-_+EUlbIyfrpq# z+6LhL`4y8t*=wt}3H9mr(4WkPIS(Y*D#gWY0DbVZyM$duec_P}uWH-XrNiEI7 z6ZZE+5~Q*0H}o&|&Roms)6USt0MqwX<VNk8Y( za2`i9w=UZdVPCAe^ru9B{fnUm+RQF%eld_b-JNA684vtk#+IJgeCv&Fz04WCsE@-_ zS}1MRRd;l|at~~!0D3Lod_?4tta8i^%Z)Z;)jSU75DsrW3w9!7Tn&Jgl7m~Fjs44; z>-+C_kgvJ4a_2PoEd$trT3~-czh9%7gfc=ZMsN>S;_g3izYGwKf96&C?@ek@tC5u1 z_oD>PqHwqXNl1ls;V&hdtIqTRBiHYFII?G7Z_1N5OuDj5gUGf=lGFn}@RXHZJ66R9 zOlaQ!Y=t5jDkP+q3~2?r4~)RpW8v%tQd?~&v`683QgR(%x9jZ>xFVB^*WS3a#a?@ zFv<7Z*#u79x!bJT&qmE*kdg)Cdc<2z!5}RMn?zwH!{61?>IrBQ#&sp}Inzx@XGNzs zt$FC+KXHw~t5)|!&Z3$c<{2*)Vmp!zJ(y<}^vD0BHW203HG^=zNv%*Q0DL#}6~s~c zw2dcnik;nDRiZhK3FGOc(XxYg#!mR!0%o0BXXBh%Ml6CxX+d}QZ=hG!dT7Dkf{I!W zB`KloA`6RTOo=jtoQzoKBqW7ciZ;fMZ^#*_jAS=DI;942qL*xyKBE{nf&-XAg$G^F)TfH2^WAZ?4b6l33 zL|S^Y4zkCc&aL-jt&<$tQ>i}riAM}(gD<8&MJA`r7o;d9(h9ZO-hRQvQBw7($G;~a zEo@0P?6VoNIumv?sX*&b;wQK{B{D%kz|qH|!hRh%J*l{^p)VWRe)~=z^Ccb?aD{ZC zbhIg|(kc>26;^==M!fN$wV)Ub`x9*59^{L&y(SJhvd#!#^8$QIGID+?Uax+N#-48- zzc_=Bcz#S_z5xoOz}?Ja6dx}gDqtR_Q1mcQl~wMzdnXWI-Hk2P#*1}Xb}$w0u}LT% z)8^z9)MJNi{FfR-ni^7b_2W>>ex+#8Wj5_Cdra2zyNgO}v}mb)CQA`GpKj>bl(+k7 z{N6W=D)ss<@i%RWY8P?O^^Qc*r_|yLY2_|AWo%9a2VU+LWUNLqxm}*PDRNFMG>JkV zuCZ105=5O`&3tRc*ck-lRqx{~ejbs6>KkUavKdnEURc@w{v85!$I{Kl2AmxRn&4`6 zwJXMjS?h&6QynJg>gcBk0qH^@Ae~ z){VHZ%faSQnM+$ZT#iOze_f+hNEok~C`?Gyx!UWu+l+=6*; z@;f+1cZdz)sXuKu^f=@6c+h|U@Nf5mJc8bDB$K?y&!Stu$AsCAAUwjz>#7&rEOiGZ zj{QL2Sp0m3!9xL8YC*O@!CU@xv6^;{JsF~=%yN7TJ4p-^7+Yc!WE2TjY#G4dKWv6k zht;D0Xc9Eb_A3da+LzLP?q?ye=1EK_KDOIN8ex()#>=5eJXWx zzjt4~EemD3@0WWo`hjbw(DiQwL*@Ea1KxQ~Tq@&HaXg@FjeTTY1Lm-*0)*q~O^sK)huj zK-4{AvM5n0tmeVVdnBE5{g5%5Vy%o=gJgFKGsUmf5|8a>BccwG7oFSQh>g0#9^efee=ZJLRH-$4;UO-WZB*+bherd1E>OwS@ zrj9>PB0&k22!N#_T=P;Z%xPwT%Wri`X%X6ahzi+7Z!B@FhBFS$F#TDB+r-St`ez1h zhn!amFroEBs+zv9Mm-Zaj!`PfQX6yCX0TP@EgKXs7#{TZ=xr(C>Y?U21*GPUhww`S zk6+<41E#r$1Kta?5wZ=qcfnuL07HyYniP2^@ZP6k8ca%V?HyH|&RX`N}oSr|>PxX+3xguCKV$1PQ~G12g~Tl2jtyunCb zJh7Tu{=)!8ZO1~A#Y|KrN7%9NY?Xh8HvYTltm?k9Qql`Mkn;ZhC?Uk7%}Ud+tG1Rt z-e?l~7lQx6!fdD=**$)IE1BHO!9ia-C*SUqGPxqoQ)uq26MU8Ih)2Ya31e1MW%xFGFKn-1`0o7ad zjIP;T{Nie@ffizDp6~a8Xo*+P+o#=SZ@)|*K#tK4i=36;|FJB7)SfMn@SLSyFdyVEmQZlr_z7o=g+?n z1EZ2M&2OJ0v*vVd{d zMpVRynhQ4Q8T+Kw3?y?Nka(WV2K0QmUZeG-Q0GPNh^B~uEtxe09kvR&$ep&Cj3qZn z+I;;cGOJWsE*D=UBKT)1q$E5}F0m;u4rzO#TE&`-4!-#(5fRd z+_fLd-RXYllH>@Ix&tEru7Fnn zGF_55oy|TLh|4|+d7IzC8QN)6x$#MR<}+{!+bk&@S$@*%$@JDPG!Fqm``P7hlJ%4u zChQAoJEU&CUe$Epx+~(r)Q>yAmoGPK`NJMSOYqY7RVg4y3JOk`FNm!i26^AEdT{CX zYuC^LO0HPiL>3_+rC`(U31QakDFZL!q8>{2nDBDMj-7{6J*qVx)<6r&>S#;mQK&ki zm6gCFkXsO1`KS!jhzTCmo!$R?tyBVQVgV+MUm(CvtgNYrJ6F!@#AM(z760JV!jJ#t z8!TU$s?s%Fx3p0&s9Y8ntv$eLVhe_2Jq(7ONsWrsj)M* zoTR->8%dbuVsb>l6%zC9%fhHvp9HA=gmif~M&piJgn5~43$RD4N#NOL^Yu&m^`0OO zzJKN=aB0|4PeLajs4-umRmo@-vyLPl*8WPgS~RgYrZ_$n5g6`uXg!goe1GhbO*~8q z<=g0?Pu`JVOQ>sK-Ci*!vZvXUc<^lA&LmHaRy4PlWAQ|M(i@V4t)|9ePeD6+bDmku z6=MBlf{~cf$@?DsCZ^iRqdxe!nVc9@*hs4Emrq9U9uWiRGMiTMKShr(!k zNWV4|juEWz;f{b+^9B{7U&SEnCx`9yw_pU(HG%rHwW`h$=cDh&)FA(6Wx8DVNwcF6 zJxT=5-xa0cZhNCp9d(P2L1mawi2X=2(Ad#Fn0j9S8`PSc)Snz}T>`7(h?j0XIR+Dl zwaav1sc_(%(io!v6;97s$XIMYyOO)IP2m$wENzav$OkCQPjBDWDAN!Bf{dz8BUR7E z!>8G_Xk65@Tb}e>)gq)ip!T3&?B{NEJ|d~zae+HD@|oXX(lwRCVS;YKe@rt%{@~mj zHoQu;&Ayq1APk-^#k!vN$az%q1Dg9`IVgvDI4vp5(T3A~*<0bmSi+t)>bwrni)^i( zV6;N`R7H^mFNnIn)wQJc!q6HyYniTFd#mawTz7oSQ-{PeHjE^bCo;+jfZG}@S}@7f zdQ|*-p+`A&E+K>Apu94hf7>Cn3CA2WcK*102d)-6gAij(c=a%w?n5J{YViVRPV>4o$jR1F<6_`EY^7I^ zoc5pehkrhDiSAgLQ}0pTdG~HYbpRipeieO1PWIhcvuT6-xX84BSM=G1ktwXym*I%F zuTdKcZ+qdS#W&QlDSI%L+C06lw6`Nt|1R#aq5@oT{Q>Y;d2Q9^XQvBfe0G z2r7T9`Jf1~ENh!k$2P4uj)W#<9!ZyKkDH`EAi4e_PGIGy*Cq_w2%j{E7mD(5Bw>;n zAp(ycP%hIt{0F5-upzg8pY9?KjQn#n!C+ea&9kf(jaKY2PuEJS3lJPs<*#1l)H_Sj z_!VTC7(09aEsSzn1mqC*uQ90?+hjZhAN#C6I&yUZ`V<*PQRElH-D?DDU2a)x0XC_F z_qydY%S55oqGMscJy?xaNOl5j+QP6!R}=7ySLPF=V9Z=CvY=j{MJq@f9<3Flr^Z{V zL$mg?R#!$}pIBcfelMEpu!mzNI!S3bOu4J!hj??Kdw>Pm#loZtSDj-_fj{ z{a)CF^xICXx9uW_;DK5vnM7$BEN6Zqi~6HCKO6jefsh~63(zEceGO9`*>pLYpn};n z95pwi8F*-{=3r5h(nm}d6Ye@@Gx zrSF$!Hl1!|zq87O#|lkKk>R8qwe@Ko6?>|~c>LGP8@n55MX}zSJ@+-DIMvzS6W=Fs zhC8;+KZ(fKgnsX^KFN>hPh&*@KBa-Kxy`4Sl~aqcekz=yQ~)DSlLy>t`XcWJhkMAK zxX>CdZDjAno*>bv%l#EK!C+1FOV>@BALHq&$swi5ORJ>v`V*94UyI zT{u56XlFSP34yx%)2->i zGo!k&5J?I(p%@UKcJbRK1O-HCq{W=KVcKz*xJj&h-`gN+i;stot4KEjxc1`qizoqHeX$Th7O9>S_!m^St zIro?4+|7Oe(R*XmF)t>r32=nO+TM%Qh0j;(Wm? ziLo^HPg<)do754czr@eMp!-amLhZgt!6sC$?U$?X}icfRwq-q zlUANQ(#UUP*&4xBvl+eT9I-=Pl@!^?+o3*C79{P1gd0zz$X#tU%>LqK>yxMAQ!$pJ zXO69}=^Iw1(Qr5-4Vy3on}l-@*PvKzh$?Xa-U(uc=8M(t91cQ!E0O&7b8?VK{rJ$3 zm6O0)e*R+k#*H2hsSyL>L>R@|vw=>Lo{)LNJNl#{x^R~M*EU(CJ?2ED76FcK?9V?~ z>-q#0&*x1kX6qcC@~yVh%8!5=$@~%OxT?_(s-B7Atu-E$P-I9OpG+wi_jhUF`AaGp z5>p|Qi4N>Q>kHP|W(bs={{9CcFs#pMs*q?4%SAYE$W$nz_Ko?sK>H96JLA!dKE!;2 zPwyM~q_UjM>n0VAWhqn7(T8|4nl+xFaQ^{3H>6%w)pov@V( z6!@8U$sjmD92#o_4_Zcx3;`%HwpujAmK-q)k?!$wq9q~o-fkwZ2H==758Gv|?*XPe zPvs~k^?+jXNP1A#Zd7Tb*v{xmHN*8s+rqM0*H&Y2<`K@3mQw(#^(eB8dq*wz;R%Z- zpy>Kdg%P&3auf2K!B;UTc@W4981!hyTsdkm8qP`nG?PL5IK+^jPi4rb(?vW3m^qWRi0cIu zsJ!9~ig>bt)}f31+?8)PzMMHnvjhx1!UFeIhL=Hv{42&iu3qnQ+@W$WyNk&2V?W>; zdUaMxD(yl#+l0T-_=(#>k*kp#w_YbSDBA(DZMm`XADIoDjN9^6o>3Qxk^Q=+XUomZ zA_8h*Uu!cc#kHDiv`*WQ80x>3Rg3zjFTe6AL9S*E`N#(&|VIb+%<{X`ZZG zKQ2<6(4)^GUC0%}T-$53CYHo?%0rNV@6lu)(=U!WE9bB7(=Uj|_VfynoiFt7?g1u3 znBGkCI78KZ*o(~c1;>n6UJdm|GcHY8iI`kM{@IAotTWrXama$XC)y68>e#z|hT#gm zK*a%IXE!iE5;Th>YOwA!_yC_KNU!Uqe@M-^9XelKK4Jp=YA;ZD;t#6G(^F$ViG}_y zdK@egP2ztmn;q1@D3kqe>vG{I&pOsLs-{3*dNv|8ak_Io(Y`!XkB)x4DKR@f$<2s! zLrv6Yj_~@}12Vi}Q;8LQt_oM{tM{$%M)B)7nr%oJaB?`VPJ3O3bXZWQtgth1=f`NN z#caI~WF-H%#eLdVLH~WYk-Zt?#QlBENyVX$?&&)lBPi5L_6?TK{JZxt{$MAeo{Uk% zGY=%h-EB++&V-Y7YUEmviZX%jHsM`_i@A2#0BFZ>3WuOLtss|>l0bH94hQt&m-~+3d|1y7;wN^tR<^m5yl;xx=cS)OVw&d(5NAA>vw!4 z9Rq6r?Eu)qd09Gse&IJGWgZAW6{Jb#hjzS*f=N5ux5E7jW*{WcO?RlAKbW@kRJRK}X zz1%I?SiWOM9w>piNF?u7rOq>53QI683e~c}>njtp!M)g5vHjulhXC}-QHsLkeNYYf zrk)VqWcWC{K;)Z5E(-5t=r3HBCiPdtyJX}hsVKgk+7(B0FZ)}TQiTB44#!&V$iRvl z3}xzk?n}7yHU;EixfIRv4Aw7w1ii?FT(8b!gP0sF1pwKtatk{4W;V6@r^~r5 zs9LZ{GcrB9*}3eK`HLh1L~cxx|2EF>_HVXrDZc5taU?yF>>jZ zCC}B-eN*bFOuxvIwnuB&0v#Gjc|`|hf6w|;Y)ur7gS^|3HZj|^SbO+b^| zd1>6>oKR>CH+&LsvJ+A?D9GKJlBJP)XpWaUUWq|8dJvRmD-F9uK2rWSqyGUgG9|YT zvi&}p7+GIEj!b|cWnOvxA(oH{hRVUMhf+ou(?Gj5nePa#R^>veS7jEV= z6MNW+N*+f6vMCU2G{T*j2C1*3f)vbl?R^?NR`@57WX_%><$vQ}LZVRG=F4wo{o9UN zLRT_flxKr6bcahUZ|h2=MpZI%np!<@UWA)xB;7M~e%0^35ic!kJpf(@`L?ly4m9Jg zJL^dQ+$v+>uYW+gCP#ySz%|kU7Ww&igWMtv_$8k(R5el?^@OTR$!3i>bZ={x+3w@A zA#KH!(Fwny)!75sWSq>)M{s$9phYPd5sL5LCAoDIPx%sb6M)zKCuSnh{azPZ;&zv- zqyF3|TW{Q|gpewv4^@<-i;xS4kko5pZOhh^T2xuf~k_Nan ze~A5|Pi2!w+4B7_nk{!<363yGsFvGX<7kN`>Fgq)X@oKNp{a{V2e6|p!}x+>*t-@v zmJOJ!pi6Ht+D)SEc!fNTmc@po5iocmV8 zxrnIN^c|Rb+ofTG`0yt%o`};9Y%6{Wy-GOjY@wjTieAD2aZnv*_wE2F4wDOSs0K&^ zYi^XS0A833Lpj_O_I*V5Wp5Vi(wfF@Ld2mfTGH zdEWN-rylJ&S8R|~v`>ltpRw}Hy_>1DX&MaJA!X2S^kvoz&Eu~>>I=|Us<$>e#1HJ> zP^1rW;?zJj2Bb(15SZ%T5|WHG#CKM`5X^*_aJeSNr%omb9Ft?w)z<{|j%Q7JxkXDv zGZy>-@CB?|J1S}h#k;0^1j13pI;O)z#StG83#@Ib1z;Qtt${SOmHa2EZ8DM1?8O?PfxGr#Qun}30T&WpzOULYA#vd>ZNz#^f`jZQ|Tm@S=! z|7vHxKYE^c%$$O_xXGdH3OL#5Hisg?#y?GWN07?H6#*?{s#KIrVyjUbN=%r&%-?_i zYiV(QIj;hGcgF!0ayp*0@>ydQ^n)GU$Hu59DE|Hg81Wg2z<1!EO+gT}H)Kn&CW;|C zVg^>RnlV0c%Ss1@|MuyyIi4xwRH;e^@lL-rekK!!_oD4i*&MP}u1ra$NcY0PbMvp{ znGFBGeN3q`3Np?qm^EB`$9E)TySvq!t<~VAvJQUj+a_$xiOXPtC0ji5L0CJTsKc8P zOp$v#@T={yj~YMkqHP1X z3Frbi9%-j`qR(=$w?_nd0i!bi=A9pn1cKdWW^(wftE7r7EACPRx@N9}CmBFF+zJ39 z`}fzAmy4xXk8LWoeiNs&OcSXDr{&=|h3w<*>G<&ZFT0t7TtoGDaj~i)%`QC#Fbm3j zNXYKJBwDLPlU7@^`Yys5*~ro(?nbYj&=k`$i~m^G8ZFB~KXt&HG{3*akkdY08CKn+ z+eIO*s&P~j|G1m0Du*d^kjY^h=Bh%PMV&2fhu+RTbblX7x0^j8ojvka|Gk=U?&-I1 z)Fhkru8_A^9&%?u7n6=V!e^s=%Qi9)ry$B*RxAyEOtQwvAAA2jFz5q!n({6dHC>w(=Oogez;bj_$w$KOLjiRhzoKzEdhI%w!P^Uzz!A(=$7PGeY z9;c20um!4U34)`bJXxmC*5%yNW=~N1zW>;ti#Sbyj77ONP15v5sdy8PFuyLA_7WGn z^i*Pmo(Zvr9$5VxO5;|KsVxd-b?&1+Y%DCP#jGWc-1m*#pe^1au#1u1gV--?4it}v z9F~7ra~M|=9eaF=NSQs6fpiYtFp<`87onU?8OHlE8Y}c0IT+F19subM+JdP)sff`N9%&@k?mFJH z$Ie6gp&TIENM~J>sSMpLIZt}Zumd{xs}EO(&C{Lw5~}etBS{X<{++w^Ebi$Hf_OH$Tq|DN?XwU7xtoP6K%l)@x}Nn9@k<{6c$6PBwt2U% zSwP@^CE8w+t-gYfvj6ImN=S1<*#oT9ZO>f_iy(puM+-g`ON2OTN(cJo1KR+dN|zKq z_hN@6bYC1YC^0=jO6fIuMA$VU6n@AyQCz;NjHF>2bO`VUPeU>eP5U<@up|Q?wKeXQ z{}^koqKp3g_6eKsL(aQhbu_8PVysOcqsZ|+ahLNz+R-6|Tznjv{FlV{ONj`v(1XLx z-k9~omJF>yU(`$WwCYmN{A;WL7mL*6cBjhe#b)$sbA`pl-?C8hJevn3E--Fx6H7l1_mqb#N3KY~~d?qBt_Jn8AI+LlXWxwKp>Y?neDmL`z;q+(a5q-ci| z^MRU+32QufK}eMIh2Gq0c7HJVU#g;tt_kungm6M;o5D;toHD^XO~H1XGQ1q{b`rPn z5$$Fo`O&jG@r;t3E`XgA#`O%vtMOcSOhkGNBm8`nMBCUcxL~l00LW$POM>(zu^!Zc z=Mw|^`xmBv@rp0_9`l_fCQc>Z+p0vOpd70@$kR$|wuD~}wq&GO)N#qxyNKCpgv`nFS>v-ZNyb!;Bh!sJI?E1e`Iv&?xBzH3q8D1#k~4~T zCva_nkZh|usp^dNcO)5 zdfkl$Im2Dt(E)nIvsWs6`#3udw-iWN$w#MYaHxP2ulMn z+JCI?Mb$P{T)lPs3^pT~bZb4)cek}NVnwlf%9x*z@Ya}84P)PZ03}y%HYUy>U#nQz zrE060&lW^{k?^nr&fAzM=~DJ0;IoVJ(C=v{Piybd|GlD?t6>*YO{F-39W5TW42c~Q z*;#4(U{?7K(jr{g=OBGR#1WzLc@9-kv(`X68-~Cb7Zms)z+5g_6;rh4?xCSdLx?b) zT%hfIAEtGo+cPNg&h!zAC=|4|CFlzDYRP(^u!TZ>yQY%rHer3aBk+POT<`jP%$eo| zGDz36(67CYF-0k-eC&#xV*)sHL8$p7qp^#T;ip9@zoL2gwKgfgOLMq}{3Mtw=RfRT zrU6#0AJ;s|@*o5Yi54zdYxrRCUCw;~Kz2Mmck`OAN;-7K{ue4V6f$e&Le4@rs=0uh z`cS4ZMHaqcde*EcLe#BcE!?5J{^s?|h6+^6Fr;k*Sa5!PAuR^J*HsiBVRE)o&l#Qj z-g;aVAAH9nph+E=hf1mC{L9<@qy@87W|wUUzDUfj4l-Pt3!nq&qlKsm^AY9!I*a{b9*D=FBAC#2bOKBp1=YV&niE>2D&p6q|f-p%Otf4&uqOoc(EkH6;Vi9Nw z`VVQr3VOLXqnJy&yRiaNZWL>hE>n@#d6@>0`TbBuSzCKlEfZ{nhGD@CqBWB`g?S?~ zh#=_CO!*wT&3(FuzUwTN{C*rHy?n$cO`E$Y?`L=wliFGBGStJL`76_6=(`v4snRT$ zUAF$j8sEf(KQNbC49XE7C-e8PJZ#RSnU~)F_z+wv0E{qZ8pJxl)Ae5tYCd&Ax{$ei zpa9bHrx!l2s>Wdbkwd@S5g$5ZBttF2pF2zz1iIM2iV#4q>%5~8V-IjHknjzYE46?mW@C+g9&a7X}3xAun9}|Iqmtr|h^)A1@!g(PbP(?ig$@emAuAn}Z0^0oI-&oKPyoA+ z2v!_5mT~QZ18-p*qPD9Yl7@Nshw+^jrVF|o+1l*!XD()oP%7++$%IomxUky!QF5(K zlb{Oo^1MGE)}@f`L@Rg5`0m<~fq6R9WZ}N7i5oSTQdtnibg40ojtLb5FYA;@5p*uU z5f1Bmeo&+VuDV{Ui#6@?C1lQqM-j@}hqP|Fhc#%pH5vB)*6QZDVo})3tHB1QKf9)D%YU9^D zzSIR!yrq%8BECU%)`T-j1HqhrP#3(C+DMB0*EgHsi_k*zf~d&fFt>@AE%Q6ad|Yw5Fdq5%HO00Ou@g6&U~%IoSQq?p zqtZ7gJQx2t(;J>C%dYuf?S+4Bs*Ziw32!d?vZQmSru9)5h$_VCB0h}SG$YYg61fZc z{!LPYr-O4sDUlwlggvXbmL7LiNtMq=5eG7Zk4B1Xr~on-!V`oCm2&$=gnhrANt!SY z(L-fvP%*zSNuZL{iTn!Uq#mBhpY7%vCpNd1G7;D-!0p|=>u9Ehv zN(X+SzE_cVlky;Pz|3pgF%$u}2{G9zG ziMHEZC||*|ocRz;McOSUU0If9n4-02OtaW~Fq?CN4zTiB{}h1WIkVXeaVUjpEjGf;oQp40D=lS@)k;ApUrpQcUq zG81faaT25TWG*d%R zd7E#|u-JVl-&6awdM9E#98jgb_c~u^?$F5{4%N||Pc3bKY`|22i|;vqjRITb#R?wK zz!KtbC+4K%&nBVpnED)*Iw;Qxe!0xmZzs)&slk9ThEFIiVOGC|sl()JxRzoD2!8}c z==+{tOd$$0FiJ~g{B0AP+n9tw0~dG=;Z5R`&}_NtJ1K)R908#R87*_<`2h{J7xi7# zERZ8$wyI_3>nClR>kRT&Jc#JKBS*+f{E3iVi>jIjhm?ArqUq>AMGBHP+C2^=eA$OH z?+j*g#w=iT9FFb4kHxMgD^ho+EHDmsCV+d>3g)EXt^Vv(TFRO+WGM58#X(+3AK0Ng zW?58(`?9_x!JJivHhWb`in!j^MKl4USJ6Hb9y{zwn9fXX!zYxs9Hq(xrIO{M0QiH1 z!`+Xbc0p;mia}{AxwUbkNGbUbyy`uwK?Ce%xII~LjOC+Xhq`a&c+V?`+@2e;hMhHx6G&lRpXWZJGs7vvzIV?{uF6U^c-Hk+CAUaIWeL%N0irs2}`Nsxjr;M(ym z5~8<=;B1Kxv`vEv!Mha^GGNx-W=08@=~8ICS6^m=H-n>*bHjoyMTKM&(ofMNtbe_Z zz=8@8u-)H=8g@7C&U*k3T6VJ6i@@ELQR5rHBTtp5m-20e5;k*ChRXIwAaWuP`xEd^qE1dE_#L5IqP2EBn zn3To>IwSx|5xHCbRYR;sRK#x;gUxZ=d>w#befbk>$cV4wac&*u#OS>LfJob5OX9@U zXS7`X>sBB|g9B?BQuQpgWxWt@wTX`sDry%p*V_Ad-(0nHu_U9*5UZaGRCX9Kf8W?Dk@K! zdK;SOf^biM1(XPDLF)M?fZ!41n5pJ}N^(o^XD zau4-!`qbiyjQnydYS5D=?BHg&q&x|A?Mcgu)Rn#dK5#StuzNsuZDhxs&&fqdQLti} zBp_V@TC(qAVNv8v651(t4G(8hDBq$6G`CFnIz4&=*C(wpb|FZX-Xr|mD{PWCV|c<# zFz#=I}LUv2}*qG@WYA!uH3;|Aui0t6ZVNDb+4av517zR(rMsEql7 zDxBT}xqmC>m05)z@5ikyO;0p_sz{u~2bwe29h52fG=MIkI1k8$i(1`&+pvk4zo^>Q zT4Qli?;YN+qP}nPIl~M$98hhhdWa<=O6T!Rn@C{t*0?n8P6mfxfZx4u-ZZ}GT{Hl z>vdg5Sj2((x1<^WO8TP;Bd1r9*gCWI=us_(TqAZx7Jx`g+CYssKddX5-4pU)87%SL zI=xb|ZRH3QQaoI&0NCM!E`%;wWG&e}X$Q1mg3VSgC#(whjx~$iFyhv@QZ5^6JI8*M z!ElBUyRsn+SCt=wgkPe(r|_^gOm^o=Y?&O1qdfA222a6es}96hH^faF@Qwr|qAS0h zJgt0k249w?_wJYSBX4p)&{d4U*@_FQ5 zXp`u3o1-cHgMnOe9E145l8jYEVXN;+Bq7?)$k!X>q#Z z@yM~%)4=UD;m`J)U=xp~!jCJ^HS*36{x8%u7pUaAVNrX|4BhhbwBTWi91r@!&0P{B z0}QX$arf@qhJxm$uRyRnkhP)CBCi-c#>4?BfRM@Nh;)hDQ(9vkS95tNst^bG*13Fi*>meOtvDptCY%(_) z@JfN>^zyQ%{(kZu7Mtk^Tv*a1=V;cWxSu{B6n>=8h!d8ihhC|gE;Scf4uEE=lDYoa zMBW52!y7(3j8EWi-zCk)dN@JPz$r)POG=(Tnld{!`}|uMk-f{S5n9d8G_%ojfPy7z zbUBC&e3@s_(#QLjEUP;__g8El&G=NuylVYOP!7^PlBlV7c@LqdR2)RIXU<=NR#qQd)} zxYDXfBc@vXx@t0K#=55fGe9QITVEUTic?8(1pqlf#=myr(UsnMRu|dkIR1q!2Rb(> zOKZsVLriLa?WYHMo9vX!K~DEG{0zDo^9ADYQ0i-_$$w1xZ~Sx6mkv@o zz0Pi36Zw|KfWD}&+&%IMbOUzyx6iHXK_l;Wuy6I3FG3HBkBc5#Y|RK$8uhyKN^8W# zPD;^Bxu_FS9s#|>Lm|VoyFs}Scin+IkBzWZGUBv}m9_d^9EMsw(Pq3Gfw$!2&hha= ztI6CmwYs{~QAe6u%Dv>qd{WONIkL~xPL{r7GK+ja!q;j9ZnF$#9|GD{uDgfKTHw|` z_VDr*#@#Pyx>e_~S5n+aJf5{^b>?^RnEoa2uPN^o7)k#{dubG+9;oBTy?BA%J)q(Y z#L7P5ID-Y%`rD1XId!wIr-Z4F$g0}QC2jeoBd!Qx7KO2f<2nDYo8ZhYHn0t4h0h`O zh;kyHKj_cm7Qo}b_=S>v`-PIqdJk7sGsBKUsBQHHXWX9$x6|5sld+B*FcIVPwlhgG zjNomxSNqQJJQJO~Sa|hd=Ua4m!76JObsD_IkjR_vA(BW#cD5}#c^AQqv$$xu zObVTguEQKTl=)puaD&%mk&0JfZDDB=8%czu~9vhe)!!8+yCwaRJ%#Q_I zO>tisTXx9W@N%|Ubr`e3g<{bp^y(eR|E?21m3s6165t_VYav_}Gan#431{~D+c?Md z@ds=orXl-Y&!-2fIPln@J@;MlE(0-ZHpy1Y2!~M^d=NtfaO#WjU;7rIWrBnAq0S61 z)aB3)--iEb42y~nawK2LCkNsp?TpzRb4(>CjC?CCu*WP<+%J_1G^dH>_UISKnzO^H^Btskhy2YbXM?j z)}3%^HCbBN1#=TrbcKmlzdQ`k6dK1@!gB7{FJPwu4CRYgrVIaOb0l$Vhhp$z-b1P8 zh-6!`0;VJZmeS~l^}@meEi9&4djHO<_!{l}v;3iZs}cWs;OP!AQ-6*%EB{r`cPGcq zZS%VG#*li{&bFceeO5-W-XCGd{Zr@RL6F9m#7-#hlDBcw6&h))MpfY{a-Ba-VU-;Y zIs$MM`L8JVyK0nCdOAqzOW((mAmMW+whWlU3}^j+QGnY_+fyT1NZ}ti5)t*HdKMo1 z`^<-^s#XxVkAlosrMvH|s2}H>tbOcuG{6smmATcnaw|=Z1$AcwGtZ$%w_Peq>K&oBrfB zZ!MRx4`p(%d%f)+YU^SHHBu^3g>=K9DiwHbtS)!y36@CbZ|ID7fB|N6>W{<#N=~ZO zW+PQ*3OMy@iV9MOZ%&kzos1@juC>j@*t^KC6o)Wz#qD~^dR~X+urvR599g&ebCI%2 zMvJf*AYrp{%`1EoOpw*U`BKP+ z{!6~;^$EsGwF)fDEru)w8J*?1-^o8T@eUL`#1Glg>Z2G^E&qtBaYs}`E9_7UDE!C| zyI@W_@`5az^34`CGZgHaqIXUK*Q4D45r2@rVa^mFNwN;F2lH8Kzpn2pi93f~wA;j0 z0Sftc9f(RQni@h_^nMZG%nIX6naj?X^5huH^h4#J%;)pcR+_ECXK?#?BVwlSJ+t|D z@9VM~n9g;entf9abOmc>Z^hd<)?qf}-@YIHq0Wd*5Ii6vi~MWqiwxY9@1KtPGtkOh zfR=69yT0=!kzf=21gQQ?6^cG5>d5W@1r#t@LCd?)pi98Flj0mI1oD>PVaUk&a2wLf zp_ASYm=(etRAHm6)7Va{;&FOUQ6I;hn1)`|ATlzjEEKY zq{?gTS<^t`uthy&P{tfgJtadmdmrT&EvQ}QE4utKtL&{I`cmC#;pX;)sN4zA-Iy%G zNcae~v?WuKV_NUePbRI{4hj+&00g)cBFTPMM~ru}^kXNvms1sV!C=`dqzveTW?z7N zxp-S-h(?@_jp)9bX9`_e;#-2kC*{`~)P_4|o8%n^ra=~>!Ox-fG%4=0lbZns_oHX} zhm4f)g#HVwdtphXatF8(j#^%9TDd^)|5vR^Fg>c@kMD4RGeqPcW_&jo!gRj+4ex6_ zq6fthdGT4=jy6V9MO|A+D4|62R6SH{(eE}u`-gyYix8n$}*pRi=d6iYZtZr>?!u7&=c7u64Gens8I%56WP8TUs) zL(!(^&Y;tB@1t0^iDnlCiK0nS@TH0nmWmZzmjWh@k~bCaV0SF4yl@*(1fyGQ_Jq^zF2fcm?Netrj}*sah?}qw-IC`B z#4BYu3dz#T_Gu@v@jUjf~!=> zzb`;pinRS)CNHK{7S~ceUlTo&7F%fyrC8~3*DEQv4MdxO^ISje`&FV$j~MEw(w)D~DNl2*OY-Mw|r0e-q!fdQcUw7fBtX zd+JnUzUNDnE8*#{-O~fNj_4~T%i2ITr%`Zhr`!vK6r4Rz)uMMYv^PxN2}l}1i8&}7 zM}&k!o`f=2B#>ejAzW-a?siHL7&6Z*0pW3Fdi8C}t|}&cP5f8z(U+LBEa~eJs_-WX zw6ad=b%zw%uiP;$M7v|+AfF2xE@wR=>d9=D*|7Y+0D8wfo7P^6iyWYCOzdN}|7?YR zrSTlCd905<7>5*g<$g-uROJ73EHSZ0qzok^*3k!lxSgyrhwpboy2lVGhKg63q~{i~ zIU3}62V_yr*5oyo#~-B4Oqd? zmcdj%o{uUma>?sfh~EpwjbY-TUOaF6wcnX-uP~)9o#X+SsToX53a22U={XAA62v|z zn^bmoG&-&dZlKqvc6Knvda`jolA>)MYl9T#YtU$-gU@zgvYb7(Vg1<^JlN~fHF-Mk zIlt}JK-z24?mW(v3@y|5(`J4DAco2D7wFX&e;xQ+#&jkw)rIbC9x!7wePk<*4xjH3 z5@BoALBz`O0*+EPm(&bL6DfL95~MLSlB`v3;enjo(3_NRl9JUfd>q1^;UGH>@KKYlp!u zkm3Iwx=-l$JOi&nFc5*=o;%m~Vt*quI`wH+yVWMMj5iQGvKPp6y*AEaqq*-SBR1cY z?^1>@!K1MNbA}H4xFQFst;Z#M{=Tk|D&zI3^_U&J6bJ%OLs%A{C{l{~xl$@laVPAw zxDpj*UpG|;H$@><;51KZ`W)l~yRin1;QutOl2n{0LbXU5u_n)n%E-aU0%0V9A0M(f z^phLup_8VhDw)Ur|BdjPpJJ43;2GD+f9+2k> z4}zy2yOM`x@1KQM|D$*e*-Rth2AwQmY%DgU^F`BNp|2MT=8Ob$@M#Wq5}QuZqQc^S z)g67^MHbq%Y8SBY!ZoH`$s{d43_sjObgU)Lz*yb!Poek0S&6r9Y%xlN--ep|XIvomDLYQ@icY!*h-(37dYQEIQKD<_6esgg-1l^LgVLl=!X>84aOD2uHyo396}%Wjo3X`y|jaD6S{${F7KQPt-a9H%Ay z6{{?p?0v%w1})>KcZ!)ak_KH4NlRE-FWZ-JPxy)$ZF=nweM5;T*fGUq{69G8YYn4p zw>l6RvhgfB6{TdEC&uW1N^rm1kejA4s0PbigoD3fheuMui6tl z`HFvRUq9+LCBRihsrIGh-|3^{H6pSW-?)^N>!5ex1;VbX2)>@kd|ML1K5ckWxnvU)LtU?Zm)`k+LpR zIkB^iyzN=1F@5B%^?ewiFjXqIrnknNqj2`+_+|FxK66oJS*3OTI@fn5+qqQdtl8u8 z&SAEE>x%CuxR11L0^5E@1B<$Gk-xo305nb0)uM{Ps2?IE-J_{F3}(txfmHLHG}+had_)?DB97zUg>ChH4U(&5Bvn@xxjrCd4lrI9x3(uQaBJju>FtB ziPP=jK_!s_)u|Sj^ipnf!xIpC+s7f~xv$0DIF7r=G-3`=YFPplAtj5)&X}u5Va#qO z(k4%UHy!dU`N66Wiw>4rJ!o@C|7}{su3*6lXTr(XzFOb^*K-V_6={V2UmAE~iM$22 zWE~#(#~DFH?KdnN^#*HV%5^+^wbZ6UuA0 zw3n1^w1J~ia9!sE2l!k{YcWWoK2Xb`VMGDEmWz<6TdY3lym_vS z0|h4M>c_m-Y{M+4MZGKm0NI|;V_pUM=?)V5&{aw5C$M&dzBm=Q6CK!n7PsabpQTVs zs?~4Y{1bOioTw^)puqigML_O_QsQ+u{E0l)+d=amVYuV)zVl1wi&Z1+TrG~twn615 zv$W&@K|w276*@5y$0WJP0|L)(?ra|fs|{AROtbi$c5CNuQz)6vg-`ZW(d7&GJW!k+ z){H@l82g>rGbX~uYGm#{4=k3LIr4lP}1+M+UGIHvCp}?Nn zLD{umtY$AXesj$xynwJP9Bo-;mNphku}@1EberazxukRG{h5%W)&$l^Twlb`sV=9B zCzZ!sM`)^v_8cBQ_3naeg)|UFo)7E@Top;n}UZJXt z1k_K8B(w#s4?jO5XS3w_vG{ie5y31ymmxDyh)*AGWN;~l^cfq*f!>TKnq=B=29hs~ zJCAB-d9*MeotEv$NtNof337*m{5id1dAU?M;bhm@amIO{(jb>43`E#`RvrxP=s7giwz<$U01lLA$gqN80(r+^e&O|(8Tg$CA&=&?#CtcwWSlj69X=vx zEmg??s<6iZMSz7`I*x|BW`m!VWUA#XshDVfXG}yTU!a$|(xY02idWbDt-0)9a--vOEyW&ib6S z696)x8~;)gM_L0Uzh|RRk;On5x4MSpok9a}QkK^PD`w{)6_nJ9BOjEoFb*cvDG>2} zUzMY5fU|Ni@9?PE?w+Dc*!l_o@HqBJ%uM^$vS=q!I%x;k#u!2In?@BL1F78Pq`SUP zN*fZv2G(x&Wk)pZTjt3${cjSAY{fuR$J}IJzUiIMI%##e3>l?(xA5K*<3UsI8AqbR0acmX@qF?xXOuj}MmCkj;=thN6h~w^cgK}|xm(;J)mPRKO9M~Mp|mQAcrZ%#o|U@Y!$xFi%YhvsI7FA>Sv zr-Pq@23F-$YZwk?`vdJcymRjImvV)n_PI{l)zKfIf<>!|MXKez7$a6WGNI{3g)lRz z3GHjq8xXtXT?^#lQBKS6rup^&V~k64o;n_dAcz7Pv?>22X{HrEuo9J_T`v$5lGwLL z+s-f$Co0Ai(S5r3-vT@@zwKFJ2L5QIUC7umnod8Ezk)^xRaSg;`}Jtfl%TTHE}ebO zReK75e(_TOQBb1(^&6{+k%E(*O)6DJr;%n3Ji~Z8mcBtc8+<&?Oy>W^j`jE3-zVW5 zm)1^*>v)&nmjw|6Kj_N6p2}cY-zd*BVPCeIXEJUc*vtHmnn?$65d;m}8AiK-D_*MX zKjF>Lc2>9eZ;i%C@VZ(HmcCwoJ*1yg;cGggs6xDoi9-*O&_2R7hwXjTdWH8Hl>zVX z3fsF!Bx6}YQMeJe6)J@27ix3=T59HFyfCcoIq7U?LR$^Yr9E=}StM{mEO0KP3?Zm? zh7s|dC^BXPD@2CO10OmjtMOEL4`GktbGv9#mWc`?zsrPVXzjGvyP`0xcg!q@GE4Cw z`#0`fVc?Mgk#?x3gMj!0(tYY3g67qL?>9$JcF*_frVxqkLGbzxjlpc2VoQ>b-Ye`p zcoZR-rP*Oe^8z)+lKi14XB}c|_zV7NX#Ph)XM~`B1i!9gf?8YVIUJm28C-U`q%v%8 z3RQj3uHu6?BFUC|g$bNcn2nC*uTi>1aW1vIvzvF1&z4p3GBE%et<^caN9O?{sKTxA zQB+R5nqe-n89Bwz!hWpjieCAriIJ;)jHzD^uLoqz^ApJ#MJEnTx4kIQnsmcs|r_JM^4b&w*0w!_s}+(HxaJPM z5%GOzT*bYizf|I2cDFQ9LSvHoyp14oi7|_zU7+P*Fu{dO8dWmDO%5-yi&L{&PB{-Jyub(yO%rdE;!QuIOkg7}fMbaAhgNv7?>zTASG3 z=|Fkg*~^9{3ed@o0lzv8E;Bg1-x>2G7z&IVo+mDO{LpEnS@1r)i&>AuXnwjMT(T(@ zH7@asu*8ziE4FxouGXsg=$eQ{LQAn=n~P)p-<-G`?fXKfzNo4at*)gqxu;b}hFaRg z!WrrO@_Cjj%=hI46)aD-93n7(00C>7a85OphD#VQ2)D@;qLdxBxC}025QLNrxw4ci zU@w-1FLL0^EBKs9ae_lSH$*gz>8}*|=asKSssWzQa`OT0MKHffZ&{s;0b9WD))7*R z65Zp-el1NyF8;X&-b`-=gr|*=TVLJyd2zZ9=CI0c#TBu~Ii4{38fYsQ-CZA`Lj0Ia z$5CzsmAjF2!Yq+(&U<)aH{B%Xa4>EQ7juSTL5H^^ zr1?#uks+qZ1oM$>2_0e@nv6>=QnC!wOw+k0%q~0PUCe0=H_*LW0#x1$!3S$}s52nZ zKt_H?kBk)4_rG{QO4oh>wsOEbyq-Sq9YWabhb$*c`nVgMWg`uEC@OOr-sXK3uSI-w zs`VCi!QJ$fQI`k&h>_=s3FOi}DiGK;v%vJP!IU605UEIP)OA5HUjw39B2X-dC|xSQ zvhzcIq0Mt+^ELU2l76GF3Nm1);eQaK)2syP%o$qyXrL! zyL8#lwPOl`HZd0^Q2f&ah12%}ggZWteop69KA&Jn@)j0|;3P<{Vbh>E{^N^Bbv2eG z8-!brch22FP*`w}1{Pmp0rqw{2$c#>`C$=7V2qEGsKZa}n$JGmfmFX&-8dphz;>ku z(RNnPpOkvydW{pnYlEJZ{dF+%%4SiuH)-LQ8J22+Xk?5nnR($uV3@|+G(`ASs~d5W zq%?p)H&%Bzg1vj5*Jaolnzq?&F0qFQ%1>Z!S#pW5_YZ5*C}g^YVHY%WI_PKX66(rg z^yjb90qGp!*YG6bdI-2iVpqETTx3MU=Bk{36L2Y!7VMqv8+D+=%gN{nDyCg@3n8i; zzI#!dxtgJq^lBg|h$FtiY@fxoy0{7ZUoU{6ro!68<97~=kK6j={A;bO#nxhdXuA5c zDnCyA)bh9XRxSK<1wEjXUolw#23T1#jn@3ispBQcym+FXwf3hNXD ztN7K5uJt`ZSkEAqJvN)xXL5DOH^`015%ek>mEe62coN&no26iwT63M84Nq>CAm#@9=ODsv7|t7Av57&%jFrAFY8QX!q z5K-Q%1jZ>`CKy=>Dn=|yGg+QXRi$CaS!N4DT^+ULLw_hGmgrN9j21&C`6l62B?Ivo z>29JcRq^>_)tBYPhvx97agOg*se!O76(Kr+%aR(aIs3s3KAg52YBe=hVIeAnV>$*S z^Zu<#AQye$K35*SR$^6;`>?0zTVl{Z5Q(EQ*qCeC!A@(60v^Me}c~*~_Zsm40TWl>+ps0})P>mg5qzekHu~+~COz=r-y_&SInp3QZ+?0`NSg*JrRu=3 z$sgqUJk#+P*x|%QAn6KPsF2f|3lRG<-aUKSZ#)o4rMY&T zlOil2C@Qsz{&_S&q-&@xJzc@^OFg zfgA64ZA>gMlFcy%nW(^F>*mL-q>yI>yISzVNrC_M&CN4`Ocn=0ynH6CF3T`rq9_(mTS4jxxS>3VtaOAm9 z?N7wq$MAv{17uJ$zIg>ciYr=SyfXB|Kw(a_Jqmo1E>G62ZSGQ&x6s}cpAmhExwHtM z{gRB_c9>v}r391XzSarRN*ot)^#QZ)>J|{5>O#v^&9q-CY^{vEnt&Di9E#Xf75RM0 zw0&wU79@>7lF3D{P0GdmmIG(!;pf z_vVnLHolfUm`LSKl<5q+e0z};xbohqk4qm)ocB17=EDiK+|kY z0kbhra(v0_-?6A|jKra+{-Xyrc?}P~tQ6;b1Y7<}M;DAnwqot(FSIo%R2$nDSDM88 z65d`!%tC0CqWZZ=nTVf|;@8mrBcF-I6M;mo-7ZC`xptim(7EePW+fXe3K zqw(^8a5FWks1Y(9fFV96W~Q72?spt~u-8=-Ub;>~YfHjhEB1;*%JE zT49H`ogxp^k0p%oBFR?qrvJQYpuOb8$ zcmy+06Z?|g1go~UDyztcwe9bCO zjr6UFPe~SB1-wA<_gXd-8ilaAP}7>L zWHuFYZUS(?PW$-*bPS_&hLN$VK2*6$9`*hinORAvU*h%5r8eGWbu}`UugyeR;7pY5mw2H-^&iAk*z}ROB|}0OcvAm zbd0OyuAt+_n*Zb7&YL#9lZfB2Tq}idp{4-O`qH2Laj$%~x zE2PLy7`Mb2YmiJlN)CpnihVYpAQH9>5#&wo|3W8*BDGumM>4%nXrJIG4ReSvDFg=^ zFr(#mAg+3X*tyYMD?cPhi;}zJm4%3s7GF4Hc$G-gdI&P?quU{ql#H|1=ekWcoBz3x zk*P3GZ2!gpGY8kaK+dA|HK@8<7%Xf0*`J7*I-G)(WhV6eje#S${B{hOx z?V{3~fH&EcY(CrhY&_6LhOb&e=i>_%k)DPc+Mq10|2^mjs(EM+ya%o$mmj;WM9k{( z?rg9Kt1%xYP#~t;RJ{PNxX3_KN%%diZQb1g8*W&_l09$+j;$;zdKBb&rh(8%DQLo< zQf$33NOvwsQF}d|OvQk3U4%c6rljKunkOqk?cT_4V%YSivp{C^l?H@Ni(?zD^9#b_3oO5{I?Q9g8j>9R8)N)D=4sc== z_>0>4#veK;9?^qi`bjs+!wFQw+2X-m(w{0UDyCLfSaBwN@PlnDIkBQZ($r{}C=3g5 zh9AE|#nURG(5R8HhRauArpP4uj4KC-b*8D{2sPOC0uW3$ZggCZC+|Z)J!1y>&fOIT zq_Y8jrYcYYzGKOkiKIUg^{O&Ph%VL`eL4pTc!ckI-+N6A&2HqyU6;brYqBEsGaAB_ zVBDJbMY%n9vjDxWi6lobsCay40~b_oCY*s~isuuZoiI|wV4kgOF#wC9U&r{Q%4@*XJf9Q|}?EY$6j^(-ma7y_Trm{LZ zOZ=OKnsd;(aNgPBa-kc-%R?vc8u`xWLrrO(>#iD|4d5FCnXc}NK;c+BB#2QX&3IuQ zsYaoq(>2sgaF6uD(;hqmJtn})+J=YiE_?K|pw!JRFr;CvOFdC*BA^-YJRK~!3}S5i9mM=~uc zvu;4WnC=p*7kCnLhagB)F@W_!Hp15_Y|=1slxF=XOMOF)h<5f;wds!qvBR|11UcBg z`hYM`LjoGOqeA?LL4#OJFXSEhObg6i6Ge{4>RMy@a67D(&}&QHBr#kQ{Bmq^CU>i4 zJa~>n1f8PPFb`gh>KY3WS=*`17&CB|P$NdQwrsH>)4$+F7kI2NTcH<^XmM_A=fD!> z{y^fR!12+4Q{~O%{HX>5{dGUI54Yvj1|frPZ>*bTC|7m^_H`BMLBhMCKbG{eE5Ba{ zhgr^L$u<@;mvU;2Y_=b>l@2Z9z~drqT!)1tei*?F`=F&}_Bhcyqk@)Z0~Zi_+y41yy|Y_9z84rNUNIh8av}f;^i$v zpfFrjyjHiuE9UZ6ru=dRn zwWlVB%fc8B~r1jgaq`2lxz1H=z*Nqp5nAu;n+WNsI?c`oQAP<-VFJtQ2kVo~ zC@~x=J@&*aufCEjztuj<7eg1vHc0gWvEj%&u={pa;{=`U<{ zg_MZD&L7lUPkmr7lpq~=6H0qWQhO^Y6d-}MevGWkcW9dNeol8El6<_#);RaR3Oq{k z%{L9R*h(l&^rmMKsmT)0g0cOA-0Rj?n7+Rb$s#x+InKQHkBz z+Zd+?=1Ny^g0~9FO`$@D>9H%ne$G*QVu67-8hm%a{eLEL=3H~9T#jzNH%Fdtt%=Xn zhZ^vP?}44c@;Z5`WHY%$R50OaS?gYyX1P}f#JGLDftZvt&O91-ZKXpN{}X^0Qyg5L z0mh1+cu(WNt2=sZRgbp+B7r3Gy-i44^5wVh60W-I!-a^`v>mPR(#j&R7A3}$sBzMD zfQ;FPIbvwsrrUcScCL4^T9R`KU3?BahU%ff#R9N|t(!>uJq+5H=tcf|oEcFUwuUGz z{18`=xcqq;Ch~R!k+Y2L%jyTAfn;^wOftV;_<;wkr~Ks#R>eEi|Ed`kvfGgmh2lfP zZwk$Z3oz&d%;a8+eh4Px)|F`4#Lx*wd7lWw6WW(}A>HA>`ra;p9cbCq;0R!>6Nfmd zw1P)9>FUI-<(7JwEd~*8@Um#pma4`lYVdPf04FC?V|*xyGbx|uTG)A_Vb*6JTk=Go z0EJTew78nuj#I+ixGm!ro?fn=UBdtK=Z%EF9~WM~7?_7|hE<5X$)CcF_7?wac@^YI z@7u;@?rx;+>m%9Nov7`|2Hdc&Ke6SfcB(tDx4;;Uq^9=F4_|Fu_a9lV&J~qyeXW01ED@A_?BsYzkGlwi>OEx4X$9d zs-BeZ)P|X5_FdN3_){k+Ao-?&o z2#ocu_Cqfx?8-*X@Bo6nP@4tvf1Yhfq!Dl2CswqBZ#Ba z6NYB9x##!q4{GXZtc4ci(#nT^R`incyxT^kFuM$NKb|FuT4Q1a7x&4PdJ?<#PwBy= z+L{982zmO8kxhoH5dR!{Z80v%k}xpzQ4vMqW=oD!+BaFkrNVa_x++C;EAq9#A-U#^ z)wZUPS|DINhKO4L?a(0VI!++Ujso=PRT7ldsQfxG;0s65r z9{2Wf#1RE!KcI<4J3iI8cF9=k+ZAV9CVwpuPWD(T+bBZ@O_GOnfevgwiL8NB1gr*k zU}J34FwXX;U(oi%f+dYVem*kz_*)um+X73wT?a_0fmX;$p z>h~oFhJ~Tiu)xy++6@dolR3J!YZOWQn#1B+MO}CF`@S}{yrh!CHL()abOw#+)A#!W z5sHVGpbzf!;O{P_x(QP~aWlHg%4?coBHBJiI@!FyH9LQNs_lQ7Wv>Ol5r&{1xwiFY z60D<{w$UizkKd0ra_wosK#H~w{D&M^@Q2t3;a?g`NO6|xNNjNzRxbWYIX)9Zs7~}t z7LW*p<>K(8VJ{Lt^)r zKEH!>S9s<0Xt5ENf;v^V$hGOH6>M-}Np2a-XZY&ZAR<Mfx^bR_2yAMXTCn8fd^u7zV zAzI?nY|je6pF8dt%)@bq)y9;6r$xHuS_!GXq~SOg)^I@H3W${~!X8JoWp2B`yJh2) zR+lplicgVs^7o%)M*i#de4xay*X!Rz!7jjCWqrzSr?jH!V_{xnNLP(CK&{w?k})V5 zbu&7_=M1atwgj=jOu?4X6fZbfC-*_^s22POOvr~`zL=Jh+(Av4%}1?CP9qG7YXHr< z9;{KyY$+5%)zU;WKhbI@$q>oB8X%gyFXaVDP8W}bOC=T zdX9^xhBnkm_p(V47M5V}ped_<^)LP@lYaVz)t-eAn-a;&G_kjrrRjlq#tv{s1(Q_ zI}u)PQ8%cek4Fv6>$uIX!C%&X)CfrIO21LLm8<4*XsqBDE00SV#sfGz?9VPY$5%i% z?{~wiXsq|IKgR{1P&Zjrb=WXg-{HzwsVzUL*Rm1V873?be;j*ec3}typ53CRb>QFW z30zz~nP~f7BwX_-?#VfFj-1W}nCJc*Y@Pp-9boQlh{dQ3N(Pk;MjUb3|_ zFm0ap)H1;eOPUg(c$hq04XVm=rW+j^(!ntc*zU9K;ejy6E}+PEaz?2mv^>VM%!t0? zhC{rTWJKSZ(cun_iulN3sgv?Du_>Fu3W<{_W7D{E#b3#AdN{+HAFml#@k`-;y<9+I zZuP5j>U$lAi8@}d919grJRBB@XwTw*TTntEc{y&&ipq&)oN}?d5Fu|B%MZ+i!i>Dcd`AbhQAl{h}0TC*>d=TSxR$J4fsUrDD7#FpM^sGlQuZyC>6 zxaGgC#>T7VzH71Fw+PPP$3Wv}<+lheCK3BB^xcP}o7^&ofD&lL){p-3_+`b3K%|;q zPp}2BvTNWVMNFJANVA9e4B)mkvaQVn)k$=Pp~nw#W0L;~*D)y0$(8~!yMCX8I)h~$ z53$n-r~?XGwV?>nL08L$IG91Nb9*ArHdYpt?7@%XH*Ui&d)LZ-^V4F;HI^mqU<=p< z0lum=39R^rUqT#^M20S+m&|=@nIDm~W&tm%l4Ar|BLU&qC~w7}^#l-x=Gv)+K*oQ} zb)*^iQgH&Xul?B8B~M2IpiLtIW+kmW5&r}B!si|V5%@UmoNZo+|6sv>TFZ3d8d~dx zc_>fjJB81e$#;!7R1VCrb4yca+Fv<*NaaFQ(=5J}>qBo}z9^Z*WmwJW{=iAu8mN_< zhrVPYek8^c()ASoH8b**nlTqSvr4)!fq;ZXilHn0&o8=zV{1zh^IvpKV8@%-MY zBeQ32xM9|QWPnP-HJZaP`@2!sDp!gzer>eKa7}oJ z>g>QwwDn9Eh{0~uShs= zB~j+~(aUZ_`NIcZ@uiMB7D@`}C+o51IvaId+OY#!(LSm|4^r&?3|}qTm$@B;#jZRX zwn`_K>5Lb{fAxeGD<2yThn|KAf2J4NmZX`{#k&kKt1L0$(2ag!5~9qBz)1ebIP+fJ zJZ&A8g+b{{9Pdx_Rwc#u<>3C#59@@u{_07l7D=ieOQ9ot8Gx8)Nv_ZUT|lD0Gn$+sF4pN7zhUlJ=q4T4-Dw6oZc(D^^Kl~nf907_9?}}%Dcq()&*h}4jZHN@%)}!$ zuXoDY3^JQ^AJBh;yiF%E7Sxhb4YOST)5c6V>=v@ub$m1Br;FV)%U$+F0i6iOVM!qP z&=-h6B{6!9hMd~d-H&qoA)O#D>cFr2_K}@*L*KEoh%<-BR~ z+yqB!HVd1&4x)4fr;`jb0yOS*N0Yf(G-UD`!bLiI8@i`;tW zS3Fo?=yxP4259Jdjmlus7^spA^W4W+Ux`J1<@{2`d#t&ML1nW>%mNVH;9fHgLERzY zwE^-=I1g~%a$yENXJt;nD!rxRBm+Y>qa20zv2~fjCl9m9i=3k>4`d(ze7$fGP@&tJ z8js(|5=KajFV37DtmEqmtf@{Yw4}X1Ek6CGZAe)c84w{E=|k?*1;ZeIw%jK8EbC?e&k~J(%CmlN!ucJZdAOH5``!C=p@dT&?Xc_S$b*IsfTFh*Gyqw& zpM2TXp)>Oz!2rU{&6L{a?dg`6zEgAl0E9B~=mkYgrX~MMb@i}3D`7MAb_UvU0}_3o zDz$2$5uCyyjQVk321VE8@_qXNew8g1+$5yjzOSAA>!IoTP9qBB0n6)NUK8&{q@qy?SZ|9!PAIjUJ;#LpYCai%2$4wTK*{VFcwgzs!TA}&kCq;&!X z^{E|pUlxR}s22zh1V%X9Gmx7ACItxedoc5=tnz}RgxPuytN}^?G&gPJQHw& z-@tcmfLH^S{IO_uKX12Q5uY%ZdV}a7$XY%0qULJ4E zk#5k@Tst2d1M98E@W^kO+4GzXPBbp?DZVjui4}!pTyLz>wpCt-G2dqqpkz9BA~GF1 zKAR$XC0|}#iSl^X|%q;r)EHsvAh{l=BGfa^U0dcBssa;z|S=Jx=37%85XF2|w za(x);nV!&ufjkF?Gq#D6e5kPZjA3=T!OP#$Jp*;_jF73tKix(5c}HF$yRNziB~XK9GAlr z*gZ%Rk@J5fVE!DH>0J(O)A0ZI6v1{(G*NfI{;UMefR-JG%?o?xU9Q_Ss;S$G2rZqJ z_v5ylTPMsk{NQlu)#B+4UjzuGX^rD0d+qUubRPST682(-%WKDL@z~o$C3ST=Z>Nb# zo+ZfF`qHLJ)lMawz;~x;S|PPxhvGGNm!%OkVEm&S$H%24iVpUHVrsIXv-it>g<_cH z3B8RyfClTX1s->8tC$bfG#y0^&9INNnbqPEn2uo9R{j;G83ZneE741wX=F-`d7PD1 zh7BC$M}0vaa;ic=tN~wF`$OVfU9Ijj|`=0n{e9G5M@?l6k!#$e znHb@d9zC0Bcb02ZCik?WvW%1|4;Fg3V~!tfj;N1Uz_BI5m#XcB zvxz=r-FWx^TNQ{H;&JD8fx!eSY%8LAmNgy59xTI+KIs-el;*-r(d-%VCiS2h0SFuw)8q86CejV-cMl zj_~QAdUUWn2kQ@CZM)S(Z0n}3ExmxpTlRI&1o63j6pQSL$;c0M4w(drs#V?c35JP} zPyaRSRUcE&)E-z<@fkI@j1fOD)XS5eCevt0%i?PiFbe;ZCe`ZaFRG z)RPhlB4G#+4W>8S$uz3L#(ZmB1oEQrNxcUMy@E|(69^B)1f#@tbN^#KC44k7VF|V7 zNLea^t5cygfA;CVm$UXRy7;6HxAd#ZR@?N_*u(!m&On)AGue>MqN z6^a_XFI3HJV_35__j)%xz!JTFK|ZQ9DLX~#$X}pzX(;(F5H&P1!S1eFN}|%94`q4l zrJtXn^W`{=EWAa$BpQ^sbcWd32cHX*bl197taYMQ382V^sf|i@Od^)WHa^fFmyF!U zZn=20$k57V8q4PrOO~I7$}hP*Kvkr2&US;{zUC>b?Kc!NLYNMyoQ819H|gf?XDol1 z|IPF!AfTT5J~sto%xGT;zXWgJ06p=+?RL7_~*S~a;Lhi3(JOGCmJRXrX^=$xgQ zQe$j8e>mH5xHj8i-+*^CT#1cIx_gK471d+ie2=wDa~il$6vDTXDv94kF*H#`u<|K{ zDxQ8@B7`Ax(iZaJZ0Cut4lYloE7W=u`dSj*LfS_{KvcYJCymmf$Yq^%h1Nm+>u3Y_ znyQAa@%`(}9pajyG3{AW*ayR41}Pmu!~K??Ib#h-rlfCPs3EUb^n%V^2pPy;qy-lk z5`lTALgf;5@%(Si!$hSI!fKm)Q-I` zH^@r!kfYgmV>{sR+c9@YBHAqU(*Uhzdk7GWSZ&_)yB5+Rg3RpH!7(qdc{kBYUppehM*kH5)3vnwQ6u{f zMe3;MVNalK?uigwX>W4(vHro^i5r6UYvZQK)XpUl<*X#oNSs0B{0+u>67X07E^E_h z81{4f2HJ=OM2>MUTz185Mv+k)`o};;^Cm>Ib={|wamZoP^VPQA@7e0sNC9 zb=9d!AT2!@Q3+51%!;m_k0<-tX~a0*?~9-al#@45N-1;vO#$(0D;{#6IN^}B1iM@+ zYXywqYz{H{PF?PCwf-XPGAn`(>CL>#GPQLpx?sS-mVo5at^H4j&V76u|G(jvV0n`s z$1n!Ro@>AyeH>TQyRVW*FqgS24c=t-cvkzmfZk^$F~>YM0qz{a^immbK8{XzZi$Vq zGoi7IOXIKHj<+Ehb834_-LuX*@!MxZO{V?row_<9e7ycV?GNMa2{m?hO-F1fY|O}c zb1WudMv3TSy&$}4!_5&BKF4C)zYu^(-&(xRql&`We_ z;Z7SfPOH~$4nnwP#43=6|CaDrGY`c}Jb)||X~l>OSoUc}GL-~mnnSJFDh#EEbylNgR#}xX1@VfTaPsm_K{DlXA^n`H z7O|bKFag1ckpWxccD7`!M=hI^VsQ*@L}CU=R502?_pJ?I0r8_KhTo1b43p-Wh}T^b zzp`RTrMQ#Q+hmZr&agrvfr-#OI*bsU_&p_RwjrAZ@ESPE0YTt8BQ$qBhdpQSo3U51RS{$>0gK;sQtPA@;JD^<$#qzy9 zID|uL^J2Q(Y@LPb9~)@vA}AGGPXn>+33=njaotDD3Z5`Ca#Ddc8;n3YufINJ4kU8{ z#~E|Z=`D9cSeLVSW{;@3JHc`K$R-9Uf7`b9360dIuAe7*E3zqKp7`P~zAI{WGf}80 zzo(9FOSDsq0lbp|Q4a|D%>+w6w~<%$Xz{ud8~q7S+p%}*@vcqtEg%UMU!lMYM%;L- zO(K`)t3m18#k;w#fJPFqm=p^SYVbr0%O@}X;*r3?O@)>_-KXkABQ8yWCo>y9ZX@eH=O@uCUTD|*a)Jq*bS`U%>A_`}G>&H`F*?8TZg8zbiRewAO@nA&W!eG544|E`7F){Q1^{2J%ihkINToSO}_*mxT06InYWged% zXg8tt-6}nECn5LDK3e+h?}2NG1KLk==r6AiFLw0NfzNepdJ+Cy@+y z(os6Hxjd8fUpKmV*&z#LNHgd4?Pi@1imXcy0G0M-fUg(BP|K1i zY?m-y>`-={O3Vc=z9Id#<)?7}lq`z>^Yk5r@c``JU;cO%+K*fMwTL-5us60NH(4`Z z$RwZfwgoxj7vQ?)5dnXQ1nsFo=u#*Ej_6qPa&;_E+#-;(GZ9|8Fd*8g(8T#tm7fxe zbpt`SxTR4GhY(;wag}tq$=cRtIE2BW(wKqMcesb}*!j4MlbjUF0V~qAtGNB5lB-Ro zo4~4qugQS}x>PlkRpZhkipBd=VTEE9J!a}tO28QUZ({crWMJ?6d?3*y#QOSZ@N#!&KM}{CKvmYM*l+Puk5n z2)sS(Pib*jSc`v;k^eB-$MS|6BPR14HnJTRweNuCoG4BhTn6)_X$kv%pP&zcRrqPB z;h)T+`itSq=*Fi0Q-4X+)gltWU4RV8y&p->!BAqSvM*)$mXd0Sn>INHIGxX=zKSKSp~3`lGDXrdKH2NuU4c&Y5yvM?Hr>?+{k5SSs=xALg-ED z(nI)lNLX^Tx#;!jZ%+xWu{A>Ful(4gW@J-nI`Hpa&ZS&z*A@#Aph&n7uS<*vvub(k zzr!|QjYhWtMA?C3x43v%mz;|>>f+Jj=&1WYahbP+o?;S zi?>7w*AI`~j1s<>)tB%WvKWOBq~y+8EAq{11Qt_!NQ?$pPsK}t9$7zxXr!hvX2&@t zUvkBD_W@i23PphLqlI(3-deyZXqDnS3GVr|g9GYyWPDP;F1Ict^$Txlg<= zD9gIXx~e1hTPF(~qGhFbm}6^Bz>j#%S=hd~1LXO+0jE6>kK_&zuOZrgKIt^?!ChVK zbCUZsm6~hNpl^kSd;yo0{Xg%Os`zZtL`V?%_QdODb!;D@F~cNCzU|`PX2<2xO`d^U zpY#W*ptC+sbD}8yFtxp?{nvGBj;kQL3Ze_R0UV{8a$nde_7i`z>d1L+M8w6y)iWWG zsa~ot0mxYuBpxIY;4hh34?%)C(^2XaP4W_7BAF90Ax3Y%O~ZTN!o4|25gJ$0P7Y;m z#e8+}v_AO{SuG3*HT;r%1NoX(HO=FN+7?J?9|Y4)t~i%yDGCSa zPa!*_ynqA0ytLM<5gBSiAP^CWdyt~5=KJaWX#9J4_CYSw#C1)C)M z*`!Z1a`H^7y(K*ggne9*{nh?0w$o#$ECS`(NJ=3Aoz-_0szgTFp9s2swMkl;SPP%4-Z~2R9MFlThSFVc~(8 zV6c`{Xhn5W(ow8o53~7ogB$P%@Ou-d41WNn)qmdnJ{C7`t&gF6xCEDJ z_yiO}GOj&`ga$HTp*dKOKf=qlV1#mG5UiBYd1&XMC-WM5G>6> zI8`fP!6zB7W?E$2{R?P%QO~`;oq(_a-&>5*@z8_^iOuM{UPavUTn)Jb+G{Df365F( zVuInWvM}^!RBQO61bgYfP*-)1p;P6lXmQiSZTk5r+}JU-FtzFXo*zmG$lp$^{(Rcr zw4Kz8)(KjrflLI#%F$G1K*!H@u9)Dw-zOml|5W)TeHb4E>z_yN;<>`s02e`~uu`PC zk5q{kEGlCai6o-tqSCGN~$aRcMbJrYo@kaVGgY& zwx!uEEYgMUGm11%+JyGuTF{FJ1VE#(?}tu>95@7ZM=zLWXUMP^9>_F9whu*wy_AIV zS~7d~SYGiw+W6xS1ta?fH1bfYCY8oMKX#TYCnFIohO8WZ7#u@4yr)D{a}O>qnJkHOL!fjaXX9XB)$XyXOCH!=0We}&(<*M znVuLPw7FYux$Bw|aPSrUwVqXEbd5IU4!m`%QH(V;kYFVv4-=7fcU$OTT{H7fxb0&L z%xvk--QE?Cz0);(6{(>cdq!=bA;I+13jTrkSMZ_TMgD@tSbqm8@eadAr*5jFVsZ#R z&x?ePApdeV6h(tbxomd>zZobrYjtz4XJY?M&>>$c`Eo9Wfkk|8!;ZAikJvwmk@k$n ztM0AGm7N};a;I^9T4@|+P|%cV4YA4a!*bG~1*f~>UG4F${VVJqD$SQIWoQu-nY3U@ zrx>;yg}Wz{^ehl#4+`iG2krU6D9KmJtBd3{WMffwX6Q6`r}9LerKRFl5}KlVde;lyKO!2mf?#h<6ie@wsPX>L#A&*8*1@)MQ<9uP|Heu}bx zTp9&{39upnM)IJ)w8&$wX|wO&Nvxh+ZwTJM=7zrKmEjdkkB0{R3G=vJ5iJ}DWyKl) zrrdvk;GN^#X)Trr=#0#m<@8aqzxpT4%&0K_`4XFEen`FApglo4pL=~)&mpn>131XW z8Kgphz#izcztqX#MkUW0J;7EvBO8!Fq6eSt4MWYF)JuY{6^qN)1$19EWZhV`i0wSF zAPlc8(%Rx;G^USFrt1d)d8WUx3y~cf57#*=aL%iW|7In}XGrW@WnYkiLbpfcsPWr1k&Oo6uuIgwz?qkXPKw0l8x2M_?45 z?NC)y`^DEHvDKouJa}Y_T#dICbiL|+v(zoy2k%Yyf$gg#wSppNqdizgSKfiyYJMi? z0Ol(Gg49Q7g5r3>#UsU%knxJFbHE6scJB+#9)Qg_b5|DQ4JMfbOa1f??#70P5tY5B z9|G0YF+t!B0F4F#%sZ?Y6o%quk$5OdY=49dtHSSL~v&Jvf4pvYc=!q`&6=C*@~fum{DRN&f0XfP8UE@M}`qi2W=u+u*akE0NJ7@V5pnUNOc|#8%_v@K2#;l?YJ|j>~s0b~H!@4%rNcq9j92K6cA#o=?G39e<_>C1*xp(IDm52yXw||l zIk+;9VP~3eyn-UMBF5hocpiggj3WR_^>!eh5n^>uZ|`rZQo#TaeiNdU=wsHQ`-BM= z_np1(JY$4xn;nB;0&p%jXPgb;Ow=0uc%?@4rN4P=~isZbO zYIN7-1sB4_m#6)?%Pwuxf3L(#+ra!M`nO}Vx0f{2#{|_74!Np{Odlp0wMKf*!M-h5 zjx1wUv|lVZ6cCVOI$!`V3a&X;!cemkMq#8Z^porosh#VHZ3{f+`y2U##)yb*06~Q= zGNfO{5Xu0}VOhYlc&K6nq8&w!+)C*5+*gPBpDV6zlv9yfJEhl}C=$8?ar$}^52LTr0$j=dXKIxMf8~fg0r`icV_L4C=doWrK|6Kv zU-j0w=h{OY^>Kv*PX$guwD3iDA^oiwblxt=&u73~2!8_<2hoDrzd3Lg=6D*Su%*oA z+z7Mj%^bnZj-7X(EpO6@FtLU>rU^p!$g*<6pO}8o2z<#$Upka(go&7hJtvv*5869{ z(l9vE1P}#9_ZV}ef)kk5mw70tqq8&fJYSy5X%b&x9C70Lfcg?x&o^`B{@t_J4bpDW z=xiJU^VVUstGBsVPElpPQQhpP3-mWx5@s2NlPqN0G$}#Hl*~GS<(yAx2$a?c$X5(DM$ol{hLQq*S;j4iUrE zo(ejm-b zCEv)(>L4P}L~ltzS;4a!zB%W#!v|xrKEqXY+w=9VDQ@-Vv+~UC)Nbg= zF+aoTWM%2t18QYMJEH5!WSzu$Of}HzL<0)fc!(wqcVZ?B1@K3@2$L3pt}mE&LS1)J zR>Sh>6`07Xe~Rh}pschCn%A$#T7$qM%G#dRPD}H$RgC&(77Ze%8<3ofMPY{1_*yb? z>L+9`H(nK$d><;L`VcC03cZTFrK+BwxUn_Z702XtW=j?N^M!>80={!LEtM-BeLqk& zyxBzN$VCaoaO%S?x=xDAaqZCxv{_|3NAK1X^Bl4h;S9UETU^eCFvSIIMBR7&m7E1; z)a}kHU`ic5_1UCi;`77#ky+Ppp##A|PFXYzGOT!iGtiT~kSV~ffr3rC|Hw~kS0X-< zrenq4{8hVKh3i1}@$s!r6tjRej5a zHK>`g8A3Ikd(TNbWHt#NVs%LsZn9xtHyS`?13psq`WmkO){j5k1=(r2zYQb5j#Ph` zG441M78=Qr1-fDU3w>uBepZnjDktZEEGbB#9pKqsxPfwkJ33y9!K1+}ue2wjt zDQ?_5toL)&@oTM@nt21AsH4Vui@kN&9RQ% z9mgroPe&xe><&O1rX9dRvESTI%4W!b&PjSWj}2PR^3gK`=V*Zat2g>rqQF}>E0Ywx zd=n0Q@sI9uk)C#^a5fk0t2KjG7U1dIUlkdh6@w4$QN(7iy{1zX4fvs_XkC2xqAkbB zYHck?Nb*LTco-6EPH_5uFxdQ-i6P^>4cEFR2pKl&ar1*qN0hJbK#GVcIVCTH_=0qZ zZb7Jfe9Hgpp%Q8X0dE*emWfz1IKlyzH2GV+OJZ>IDoR}sJq6qj-dA{~$eg>^F)_>QlfG%_IJd9J{1&qwvBosO4qjX|?!Im^O) z7`aC&nas6&EX6q=X9O+e-k3cN1`rSM=9*LCM8G`ZHtut0v(AzD8 zqXE!T0mvbnG|UeiI}4YDI5Ze5!);aZFMrA9%l2MqeVr&&fSVx=R@MGNhFQ*mo`9bh z>Pm4>#s4L=@f|X~k~ik-5Hey*k=O9_%*HOqTxvw^XrHZhs02$IK?f(24qdfL@z)Y5 z;CD~m<<<&j86}le>-b?WQ+PAOEXCEcwefLY;+#a%JLdS4_~zK;;VDYOJrLV~g)<)0*TQJnbM+yZ2PBMj3ij4oCxE|RS*X``O z!J*Eh$lR_q)qm1j73PNDL4V~1abmKt8mkvXm6ce%!@L`RY-tgYaEbSyR28wZP~#A3 z0f90w3m=!OBov~3u1p>$hG~BVK)*;>6iCEC##yP-HWuLwqoOV&T}7M!g3qnk75b!5T?G2K<+RV^;Q%Gu zCZOR?H7fJcbl9UfZN3-x;=mj2dd?Q7&gsk4M`PskG-!I4RyC9vLUu&$DdR=nZGhD2 zmYThtuQ91p;et-Axi)8>j7omZo;e$6GRI}2>o6Mo+^JMi^18$_86{3fZIN+E?`4A& zv}2-joAHdl_HZCL8xw=8Bj@rT{F6o9I1LP}T7F_C!?Zep7q3vz7c7V$E(p5P;#1=8 zR_Pl&2opBDDY`&g#%K4*2{x0^!fqNSo!%?**szrj&|3&r1s2@_)J}!EQzSo+#2a5w z+T(4!NqT8HkH{&_$-ASSd!=s%YZ(KY!>>}HWsYR65%_D1Ka}F^yb?8N;;BzNVz04E zmLh>LFFjlnjwN0kZv2XNa;xKkAr9hV$s2}GR0JyGE>tybiikh4viYAOR^_R%XrO&3 zZl3J3K+9Zcdtce`pVveQx-dd7eE z0@k&*quC{Biv$}TJLk&PsWzevla8k;b z);)S4%SUj<>MMssFKYm1G7@(4%6#46vcPrk@vTbPR3vo_OWIa3SKYBt_utX=J)Rsf zi6!bW66MJO{wPaM2T;b~=PT+FD{E70D%iMLz}{_LNLKk9xPihri7e|%wijOr+FMX=QV(M!1~j?3gQT0I`Jw)w4LFx zwJF&xfvrlk&47$Nbx-Fux=K;4zn~hBEdz`_lMvp#7NZ;P9^9#HfsqKeAnId&!PT9N z?QotP0(g*W#15Wm;)MkDC4L*E>(iVkiy7DyEJf+bUIrtWf_+Slks+5Q83256M2rw-*SJIdN>(Ze+n*OnAOHfByKb{v(4^~9tlk6Kqoh|Y{uNc0lGD3<{}ds z_%D#MNw|xRDCOA%U=oB6$%Z8KUx>m9EyH&zk+8bGzKq-cBeFn!z)1j-^vlxZ_Xv~E z={zwp)x>98DP#B5Eo_%1k1R6oN z*C~?s(3E9rGTjSHGGlq7e`01-He;|bX^cSWttn~wzs~}wC2LIi&3S+(ozQ7Dd(xn% z#L2v>#Gvg(5FXGtLx0|Q!*5@wqIiwj)mL44+lz7eZ)#Fc`#l!CG??Z`+yes+@r6%Z zevn5=oQhL!jG(JU5nTodI&+2!7YtuB)HUj6{re9I(IUM00O1Ua7-h{vru;j)iqVf~ zN76efXvT+6@Pw&AnO`8IQ@Hhka)t^9{z9=>+_Fz1qs**(P9gc7|0Pj`%k$J|+k z?;L*H;3ZsvYET*KM<{Z{Y?&4-lGfjVmsUmxjI^}}!0HW|NeFS=qsO!Jo3)06(`hp{ zrY!dQ1CAQ##I2b{e?PIvDr66blDywT**S}6+DebbCpq{%PAXcpWnpShN}wA-*1RrH zaajovn5bD89{fTL)HT*U;*OYnNl!$r2Ytww(DOBf)$;P&;OOFvXd(De)h>fWoV?6z zsW!3*b`u83D$rg`4dWl4J<@G01_Jw*`^o6D|0xRUUe&4^X5_9gC(bZauZeg}57HQhfh<{hpWkh9TZ)9a4FHB`_XLM*WATc*JHXtudWo~D5Xfhx%Ff%eZI3O=fWo~D5 zXfq%%ATLa1ZfA68ATcmAGdDCKK0XR_baG{3Z3=jtq`3ufB}=j;C}u86SIo?;5;HS1 zGcz+YGnJT`nVFfHsl+8NNmK9jcK_|3`De61 zC*){i;QVJq*ueP@T*l6pK-SKcfQgNOiGh=uos*UM&jlmXKY@0RoCJb)h6Ktcwzej= z&M>4xcJ>~Q7G~zoe=p_YPVleQ2n;<4XE*FFeb zY>iDE|8P3mI1$*H5}5vh+PPWSnh}UPnwStM*_k@K8918!p*AwHbuw|{{5Kjgd1(R) zF%w%8M+0jDc^5-#3!{G`DGA&xoX!96{mGSyyOD|gUmGPbur(%-6P5lq5{mx{=AXWF z{|5Mb_a?^wAp8p_YUgNXLO@~e>}=0TPyg2vrhkplIhoSgnmAMbo3qlNmH(uXftltn z%ksBn{oAtrZQ1{}-~YB8e_2L`e^1q)5k{JS)Pdk1Tm37RKMDS?NdAH_FflRxw;|F0 ziHTIi)>z2S#^z7yoM0Fk2#hU^oCyp~%q(nS=>MWp_OLf0U?ea$G5yEAjDfSGg*$;3 z104ecBLTx-zkgln{K<&1ovpRUf5Bx9Y)lB~g+xS!m6WLeLzn*o2@2Y|6L`@wGJIzu zpk-$IPQb><&Pc$>z{o=2^Y4`M1{VKMNDTkwE@5kGN5Juq$c{~5jOKXgq%@wcui z3I3f)*3S7)RS78mFC?n{C(HkHW&Y*;mmswnSQ-A$n*1}v`2Qu#zg_<~HU8yA_ZRtp zqr<R{k#{I7w(rj1-29sismm;3c=Y#+sUf>1&jTs*VawIeA^Vj0pniRrmY ze~jZ7Jp^%ZcZE(iKzsG!DgJCI84gH52U8J#@OP(^Sw=Y>lGe6(jCjE$+k6Vek_ZjG z$u*E~hIq(vBuK8#Yr=(1MyG8X6M}MUmlv+%a;f;@&hzl_C{ye-BUshZuyszj>0GS@ zQu$(|`?~0rE`93D@o@nr1+vE%vlTnHTLOE^*>$7H%@Oc6Iv+ICTM2xg6wdFL(8ZoN zJ)Gk9fYxn0?br+zbX$~Jpe=_ zQ8vQNasdyg`a-lt%T3I_J@u3yh31Va=dv4kD z`6lt)s$Sa~ZWc%vwl}7&&j}%aJs@ShT^gh(Q#25hRZkQKQ)}(onBMKPkX9g|fw>Jh zSh;A$^M(YiRc05v<_BZ@>z;L#q&~ZA73_Q;VSVAC*^UR_B&Qwf3&Z<|3WwJP*hzT6 zR*o`>@*$c-BcZeqe#4Y>SbGE>2tVd9zpEq?S6=G$)wj;Kqy{yU-&4g7E4QUzGTfS^ z2_#@an533l0c0;H^Cb;B8m;_9bYz(vzd4d^8s9%?_co6BlVS*(={TKXi~2WfZ_o%k?59A*TJz zw9o!QEF?=bv=3EaQ;L1}d7_F7g&Uk0MgNn}i_jGQ1c>;tT&clMai6omlPxCas@!}F zg2crmFibPe1iVUIi+se=I)!V3In=?;l<&k(135wBCm^l~XQ_PerP@?^h%YqE3TgiTXj`fnB#YiC6<=Zv|7d@}L&{-HVTF zQr0t`GU7Qz-Id&tU^Mr2<`AAwA}Znc(_r5lQFO2^Nx6^^gO4d0&$JIi$)@wvspjS( z;^e1w_ZKYw05d8;Z@jL9#A7Q2?La1L;OTMV&cNm}Z!0myyfU|AY$A!XrT-8W9V?(R zKnng~gLrtQvJ1uOJf?N5u02O^+5@=jLhyz z{>s)K5&Utn=&S0^<2Ie-nfa50D}cG?Ml=G&s18IVpC9aOw}-WWC7U=gcMm}+X7YE5 z)?wR_$3~;nkBk;d4~l-lm4{p5WrziCRZdUECf->B#dc0H!G``Z-3+!3#u6k88Ip}s%cQ$c_ZNMm-^Y!wF>3lL%Tq9G;e zal*?DW&86Zs(kQg+KK!!2t}-=&LUA1#+PXGGTb~`KF_JhrFK_%Inx!#`nIn`us91bn7;HE`1%`LkkfUV?m zK8VZ9F$)JsP@~T4M=TG*GTKJ@-H1?c+1iyLlLpfE&IZxbg`Q7!8P6$hv^60?!Z(E> ze?*C)*xP%^l90ez2CFf>LnBZ6lQ;|e8`m~JnzZK>m&tc;6QcpL$3s!PqA2IF0AxqN#j1yMH`4_?TXrm-+?X3>%VE z%hR_cuQLUUub^Lusc1GyY;l3wwn>=V!m1}Q;8XAH4aOKe7`iIZYQN(i!6fCkA?7_$ zR>nis-;CG0J${|y~~%0Lr0dWYfX zY||P67nqXg82^@&pvbBQFcFm2F3t@ZvIKP)gY9y)uDyHmLR5BDWA>~CN55aaSMwO8*OJjp#+ayW!3p=_Z&sy%X{>Z+sE|*USUCX15El@l zoD7DYy}L!bfxpstIBShKOiRH0T$patk~o^_#e#a6iU=c;)jWx;iD}6Bw&(1aIcSMo zr@lBB6jQbExNBSc!M95x#X{8vNVQ#cQe4?t@zYCGi~dA5>GU+8c^mcDsN8#OF?=uE z%-iQsq0~UYeX=BfZEP|;XFjV3TL^fc;8TQP*dLg=7P(_)O&(at^tp%Z&$c~>KrtN8 zt8XiGe-=AZxCEN_L}R%zGMdL~t4WD7ny?JILXUy!PX%)tm;x)s`LJ~fi!){06DF9j zTIj4~`xUyDL_G6pmo5ESn-GdNxYMtU3Sqj+#TedX*ksmfaeB$OY zE|v82gLdpGVY_d^z07Le?3i$@GrG9Q7xr6U+>@jfY-aaOuk@L749)z*N8@6hTBd{g zZnwA!RIGXiylUCEV3YZx00Q@@~c$2osNg`&#aBB|niILi;F&8-Wc2I)*t7ZaF| zrE}57yasK|;niAgShJkgMjwQW7}_%wrXfsUbZwDBD(N%gvzw)&_OtZVi^n<^8O$QYkUnG+Ya_yq1 zk{nCDoIfHp>OL4G7$9(J-jw6TIni#a6RvDOfG%>d2f z0k0R}v*HkfP=Nj#+HnDlW}K7^hn#agQ74o)Srix5rTrrG%KoG$Yyi^*)wQvt%b2Fw zpv%08$a8=DhYt^!;M>kVFSWq4`N5$}9bfNz`Jiqxz(3QO;QPQ24z7U*Cm^ld{mX+h z3^kr|$~_8J!njV4ZL{*Z4o7l%++)3Z&xT1BxQW5uStn@-iAh*@mTw8oA#TQZgn@%+ zOFIf8s8?*%=?80;_CbUgZUWNSIg`dCAR+|T27?Pzffl;&8zlA z*~OC~5A@M6UJTaBt3r+z{HPQHgyBoR;kujw?N9-!7qX{a#Z+*5rR5aA{Q#TSs(wT^ z8eP)w&uniTwAs<*d?ke4JAiA9p#u^$8D;rAUXa(9fnUFLDVD=>;pAi?Sv(g&+N=pl zTyn@X=aZztl7a>xkU8ZrM53Af?0AF_t4rkFn1EH_g&|{oB3?)v<|DW(_nbxuUfa&G zm7EPhpZbW1=?L%tP70@7^huwHf$umvD5}*oigtWex$n}T{1oNe+`E&pl zrvfP;eSi2V^)iJRVZ6`n0pi6~z9EZ9blO zZp%;Bkt^~BPc+dTC1cb=n{!a5{Wf)yzn+9D=PY{tNnr1l>7@wmbP1x!u)4=ch60)v~ z6OOaK@K5R@$3FI7#s?X0?g=kNs&T>5$m_Aey^akFxvsD8h#?_9)nZt(AnW~Qngbki zK}3j%hOIM*aJMaFBOWAVR!%fi_Eebe(0GPzr<3T|?eE~igr`TA2Cn*sQaO!pP;kF_ zlkJ#Vfac^5ik}bKPHK;|Jp_FS|t?s)O+Sq=k zc~tQ6W+VIM;V2au6*&R@8bXY@M2(SZ<)*7S^J2O^5eMDc7q;vi6aY{_ufI5(#u_bs zXQ&QJ7;flLW+IxdGH+>lF?cA}eD)4qYQ6q$F)K+OzVU3eom}d{)bjRd$fxY@B2}RW0WZ&V_W7O?(ss4%~*b zBHN9uChxF@KP!)_y_xq9+4UMQs0Y)#ikRps3Y~p9`OoiD;g02J4R9lsaM0_Gk20ca=321 zw~r>t?dF@ODKN#4gf9n58s)`DHkZafQ!7HfX|C8R3#29{E;0*O_d`5J>3|3Zp3s2k zZm?tPDs3APS)vBP-`CFWVV<}Ha^uH@JP|(MAo4GI;o)yY+eT~3BN}O@5LAwcXhJLE z{UUPinc{qFy|Y)9tQNbqYthdQ(UiP!Me7YOPR&N;otXS~Z@6czg9QS0wdCeGl6|^9 z%IN_sMPEpP{)qMT(M7BirKwaiG`*bv=z+E*qIKozhK!VeV4nGW_`Q%x`D)YMOc|7euX;r1u}q zsT((!;~JT;;Jl6-SX<_twfomJm#N$2$jD7OgD)(TpL?YR3G@Y)GPX&kLZ3PQEGD1Cg?MjVX8EJzKf zNB~?EzN?=x3_h8NNS0sm{=(0tZ!E--4JMlN<_f**mV%T8V5iQrt_-)41#W3nTYF9~!om?ilalxN6L{se{{ljUm_p?4hy?de5wc)4`t+F^r?0YMNxKLC#(aTS&B;&fgP4Q%nk5 zf>pv6+50CE(Oj5Vj55%Rb>ZD3vtLR%V9mzRsD$HND>u0?A_oY_*wO&cQDenHE@_gW z$6KM|bZSa4d9kK+u3dcwF(GBL+9{Er>WNeCN)FURO(3j9Nz`+;upRR<+OX>r@19Zx zdq((+l-?=LrvC!XGORnAvIw?>bl#5VH304#E|lpr`l z5_g}qzvOsVYBNiJz$NatLJm*+v%gzkFDm41FV=`{RxRq0J%U;3wkl~b7eN|fK<#T^ z3NKuVg&FNVmdXdBKSxMN{^+^z?c!BOszEN2XXfC?PbH90CHK?AsAtWAgmog+TXTgM zPXl__u^`9sn<#=gNcmDWRVlQLuXD5Jlj$v%9$2T~bWf?_V<%UH7_%@y6rLO#4G^g0 zi>t{9am@tuQ6ov;mOq1f~$Tk9WAo! zY(r(VFxeO=zuy)x;l#~C)}m4|_b&Sjs~ z383UK?FM#(#TRhsd4RuRUS|iAf6jw7U6})n5WJujxAXljzvmfzLfzAm|AosXM5QvK zaFz+KxJX7M*E(fa?8S~43YVGwEu>(8^?hT(w1;NUj-0zy=fze_mQvuY{89`5i1ygt6Pi;R-#cWy=k ziKhD`q6%#w{J6d(E(c@Mtk%hTZxX2`v}KD-H`v91@Wje%^|FeYk^pEgCn)X$w8*xn zwH1K#+`apkcGh&N>XU=Y@6XtVm07E9tP|#5wVj$m^Wey%@0Xx;veA~J((SmA)kqS> zB(#~oUfz*sF~|Il7E#=?BZs54;6Cn#k~F4sJMSXV1jHHV;jZHXM6 zkith8IL2=U+%e|nwjU{*!7Hr3__q#_jDZ`rpGaAYOH7sNFxT11 zd7;~Fqx*A3cy16w$*v`hejw69%vy&D=1G-1+Tc=xE^$PBRsjY7e4ezCkKV{aqXaHD zDMJcvA#K!!q?Z8><*I^Wit8V8^3jvT8>!}cIE^#*9~^6;;uUvWQ6%zhgwC{n&}L(M z&2R+!xkc1Dn`jkO`4O+He=4#-z@;Rh6g??mkkupD{df#iO+sXb2@n!d1ARFK5P&^8PvE!(SvU&HReVFvJ5Zvt(b_5hr&SA3f-V zs7wKE;)h(TTlu@7Kanc!bFRUp_LQj5$CIR102mR)U-$I!ktf=2^6G?=aU|CwYEFdD zO$yBlXuyqVN%s0P1Q~PCzi32eJdqtN8!Si5o3zz$!Mv-FaCTx_w(kdsraAKE>F|Cu z9ul76WJF!HRtLp0tV>b{Cl?rR$h9>F^?Ee7^(E?#^-^jrX$-&Py#=F%O}F96FnxUq zDu~Kn$vaBZfS!_(oJ_CKHFr>>03Uc4(!@|vglDHO#elv6u-;Ew4DKt+2+Hk6haef43qY1<>;b%QO=56T9U?^uB&{ zHD?5v^*nu@g@JPfqUTeXouE|dxLQ5&e02t)mK5;Np|VaS-i&0B=@y|!&jzoGxVZgx z9*6{OiFAqLsSw_Hdvm)&6iX&hxg@A*=ehX+s;Ds$^uwhNCtJjjo6}IlYM+?eS)Ozq z?9cbe3I&u2LhJ&t%+Ke#2s&w|(J}Y4u@XKFNNWQHm6DD70HU9h(^8kyON(~*0zKgf z7R@276l})gRDj6skL&oT5+OP8ReMH`Nse##(Hux!uCt&sRtnC@zm3Pu1N?P{+^ejo z9O}Q8@%B>_uZ$+Yxh#1mBexg~w4vb70ZLMkRtU(L5eApL&u4t2M6{TDRcowDFsy|= zmPl}#=xp|m7-Kq~sv;S|8D2k)pC+3o7I*tI7xP{?%8ylw!VBaw`!)!$^OIzh% z<8mQ{+k3?w2p~mE5Ej59f__vl#QqjsFOVaC(D!*hP)`WfSp8rtuUz|F>)j*=@&Ip# zff`X_=fjrQdfQ7vYnD{a+cM};}fmK;sC-Ok9k zQr$$;Uu?q3hUec!PzM*MRKEBFJVJrwgb?Zu`q&B~XD4vEyh>+w2TB@SF^Dh7vGy$r zS;Eo8PJZK?jy8n=anpxOcdo+Z_YH6@I~ONi;#&iyFI>%g}_LQkmRHvB2%%xh!P0A{aOc!j%_}DC0l#UZ4Ga zC%M-Z=yTD=FJDe`3io2>gumz#R5|$r!>_2J=ui)ohhZ4#XP5V4SIVhM-LOniy_FXf zQnXpO)K%|0PKqUq)hu&0{}71uk&RMMeHlc|#m7%^FshBK(7k}!O8z;td;c$*8>3z!K&%^FGU<~(D%Ma>PudWs|GP3fb(|xQwtld#I zjnhB|^ngMeS0WQozZf%Ia?dUqh71#Xqu!=y*S}l@?X5bs_{^&QW3WK9_^_XfA{&K{ zHrkMlPo&P9r?&G{f$g%+L@Zh}%38jo%%`lkus>GD0Nk&{Z45x&*Gb{K5Qg$S<7$BE z7UxG@*pss*$$1VF|b{^%{uCy~JfrNVx(9bl2uF z$+OEu(R>mNbf2`0D3d%!8x7NvS?OSFZl*Qv^c+^zDvtks1CxJ=;9xEOt(vh2<0P|p z2a;%l#^@!$&u;2%a|m4QFpULe_0Dn6ipJymvV?(^L(2g(pEl(O1t8P3?gIKDNE%qv zsH7ze?0%I33RvTk0}8k%qoVCqO(^CvbQC!ny|RRT#-D2E?SQ5_DYu?}j%+V8IE5_# z8_nA(vz*w_67!GThgTvP-iHL#W=8TVPXX*o;p*>k5&4^5Xh0V=#h#Y(eQ#Qm;E5{+= z5lAtG)>}stWJjv?i)T2#ZJYK@q`5DG=Qx2!WCqj;%P`((iOG?&>HB^*eu)4yyo7@s zON0E%OZ@TkP=h7%A@Vz??$E(ys!jIwOe7(AsXG^gqac270c571Hp&y7V3y$C+vgE zU-_4QV3Hi#8kA>wsC5CjG%-K39|dXbNw=X*>##=;MnmDfPw5n62Y%qk2T@d%y+t@*{DO8gfP8jGOA1_n^$_f2VZ(ODO0uQ_Buu(&#JZs zBz9WXyF?j|!7%&q4kWgkN9q5Y5u40_YKJ*cM-tINgcbWHe;1$5Nnl1@4$ly8tr z8SC(-ryYC-_5PT)F2bZCQrTX^23;3kOrCw`9=rFwmbL{B{$rk9*nR3d6|Fk@(1E>M z!2iPQ1QIr~t}J(7UYGN@HaxTe#aZmqjp+N(@$zEx)xkZRT=Xr_PAL0@Sl(#jDdT!2 z2FKQYw8D(QSq+()V`y2kr@v1OqT%)H?jdt{kkwawETLTZRbWNl9?$c*Bbp716 zcLQ~GA3rcn;jIcdGpRJ+jLyD$95EI=^;J`(A}2vL<+YuHn8tg#pL3NN{5waWpaGt8Al1DIsQ4JF{1)&?goPL&#C+iYX_`6`%6!!F{vET*vM9^qKX5b8zQbmXTvgk<9>9}I(t z*C6M@CmSF*sf*E-zn%-SPwYq8*dV*SG+zFqh$l9>0d&0#ac7QuRStbI=`VqfGvG}g zC(D!pG0YsPg|@QkCN$tVS3OTx_|-C;?E>DGR>^ewppcGCqZ1Spk!I5gj=49$AkXdS zFUcLnPQfTTE(yEPLw_Sh>Y7SmB zOGv$|D#Lqh`ZIlL1a`#??F@VywKRLg6c!OA-}@r`fL9wa-?4>QR*7NTW2h7mq92dn znk?9l#_**?$g&mb=lwY*^%M@x&-$*4Qoj-n96GUAb-|MIc<<&DG*tM!KfLOF=X}& z&nSZlh94j`<{TP(+YPzcxZ6Xv?$EbO-fqK4zkUb(VkY#*FLTfv$A822f1_Ex6Y|g{ zlwFe7_A`at_$^b$@oi1|K9Xsm2wddVDGaVtVd+zT-lw>$RGIn*{x+K}mU*nhu#=#e zMKxA7nMkNMsOsXVR&u7!LXo3*{lk#{EvzDCQyeoz$+i+gqj?KKp5qL`chy0aN zQrz762zNalS`^*J(bGjTE%2jStY#$N2u$^Mt7zt3& zdD#TmRj2e~&947qE@52)4{k_zz-a|I=CY76DozM^eH=I@#gBBRB5gQjUlP+T3G&Wc zIoC#IF!uBf+RC~J?5(T)CSV-BT0CkRXYh!-RMxHLUFmR+E31xu6Je;f0yfkd#Ht7t zgHnObQ(7VM@x(IfyOb19?o7<5?GOspsTffX)j!=Od4L+?{PEH-EF5vNQWjr$;hLlW zUAC!l+?L_1W|O2|?}HCpy(UVvq6>xW8(OLBfm))#wQ9T}vibnYxsZ;D+x%=R-o;V* z-WY40+K%+H%v7;=Q8QE0Y53%E2iuk$c@@PPoKDG|YA-Go3O8oS54zIFBOOmxsjopp z`dkHB#jLMY+hH>LzPw2JjO-G^YR1u}NE*A;(j?fq=(rOk zq&(BX292eqLPdF%Keu>a|YOjNiP6)5&BWCx|7dMgViuZ2>TVV5)@E{CvS9v=iPPqK;Fh7tUsRSG6og8P=5;MxcXo*Bgy1RvMv!( zVZo&Wkq)Pl7D%ofq{3Er(`0Q%fHl3T}v)gb2gQ1GNbzN=9Z8#S9(0|l2^Dj zY{dHa$WzBIgF~HWN5|vY}$i z;kvf(j0m|}4#dg+Qgf!`{4c*l(IUu~lmr?mlvF=IA3?oRwT_Q?QbyP$%7e9f=V!o* zYmE$j9p)fqy3h8B!H>f@5}=wuRsE zdPE(SE)TxodM9^BW4xY58=URjVKYTF9Y&{6nz~#CyNZ5Y}kL zJ%H~tbN2g+rDBFDwF;|qhiPf}0!Vcy_^l}Fb}7Ur5p8(RvD``B;qqX0!JvaF(mFF4 z!@O>FbcwCO&7NtC$(3?h5_}#7U-mJD+DwB};MMp#UHLPkH8Z)zwm6ITm;JWB1(Ej> z;Q7v1c2;#j5O!o!gHdwtr8aP)j0L|X8lq415Ygo1q!PMNP--OG=UtbE`#Ca$QTHVy*2hM>=5QyD>e(>Om5htG%>oWZfZoGoPi6B zF*o0=~h)u6jiWu4rQG_kybbwSO23{w$p zl%cCj?2YXfY3{haSw(l)CpG8m8wXGHEkF_g^O!;b5ySOK*IscLufcsb5{cefLz~C7 z)#&T#!ChERx9Qin$+UNU&b{bH_Y-)Gw_RL6L4E^FvDp8T@PGrYK37y5jYerAHqzEF zv2n<(dRPz#d!Xr^z(oka!!Cm zUkI|o8}g(**yC3;w&k+=`Kgpha^2^%^kT1k>mG7c!?JJ-QQ;IgCT2o9f$V&hw`gv$ z`86EGu;!z+^|%l2Js+>x!jr@)kJqv{!_o9&bV(jjp`?bFzXm53c5cWl%65M|=NxEv z@;QBq{$7Ia<#$K|$_AiE;3k_a+iI%Y;JS)@A2Uc+#8++c0K zVbPIWNtQIN*AnX#(U`^WtAdN1t{|ZzR56|_kv<%%jnjmXLI=_$35o_Kr>)j{`PYscQ2J+*uzARVLrd&|wnPhGC(Ea>_k})$ow;5%3X(VEM)An4U+dp1ljL?Q-7|6<<=&y&6FMEe|0|miG4(y;fOvE`kS$yi33FiCl4q8cdBS<3OU_=($W< zF|+S=ARn$-Tf}?=(d8DAf>vo$6LR~-#5%hrqu;QcUcj@SSN#P7I`XuCY+wNxVNtDR z#X#CG$ZC9|hR0rub*u7!xyybk!I;{f*MLF5+4q)+2H0$LE+C*JM7(36y=t>}yu6;< z6wZyR>8JvMn6wgE20v2E2C`A$5d$}D_2Y)c+G9$Bi@M|k_KLn`O+(JPGFWF)UOY^~ zt<3SQe)Re~V6nSO92e$qP%rEj%X)ktLs^M;)giRYCw&o*g@)2)83CDl=7gT9#MZrM z>3JMNT4fElrJ$q|Br>t%@XU4(4iL5p1=VV+riLIq>OB2}$f-7U{lON>4n1t&7Avw0k zb(BXXd)1QSqfZ!>rjzz6TUL@@gq4>QNR07@CK6!Bs1|;k{3VW#*|;3CXBQ^vGu+6m( z{VC%M;-UGqYAxj)25Non4}mrvTiLZF9veH{MtNEo@mO<~s%nQIfi&+x%5wSUt^$;& zQ~xo}l&IiE$m-pdr<2DmB88H}-)tq0XUC>0L=rkCZ~u*tq|4`cj}-<;S6aO;dOisZ z$Le+i+|I(QEL*1c_vZHL9dQW=NN*d=8n0X8j{4Jmf|An+lgV&$NTEEsRx;C;y~iAC z#*G|nfPt|(#U(P;iTf`uul>FW$g)uV+?gsN80Cuk;jn`E5MSb%`-0U<6FF{@^RC1a zTk=9L*<5?Kt0dA0WLb)$L!R*L1h`~~(`OLp#cqM;~#>L2QVH zRGjJaUKqwRf-L#UzEge`{oRkVUwS8q&N6g^%mvKrxbYkm`j4elyVr7TIm*QYVm=c3w8|5-8izRwc&9B%3Pv!axm-z@ zsMQ8oG#AK&@(L|-bQ`vdE*nq=x@kzL$H&PFS(&_7$LKUku7mU>7fB3X#>lxzc62i* zIEi_o)N)^oq-Eu23(|J_Q7uNuR6)2}HCJEYTl8W$Zy_4$6WFqpTeKl;C7WtkH%_!G zgTJcb$?#D&)t_7)!Y^+_iEttR&V*YPb6E(I=Ru0Sr#R2XE~W?uPq?6rG>3LEt|hIH zPAF>QCtuOMZ3K{w~lZjsRj=UOwQjC%Vl7 zd`_-a4CtB{P6?r>f5w@&E19F9nM9#n?*MKY@eE2f+81MkqsHr80Iq2jUbOuv!x)g$EA^n#*&|JwP`Pc$Xk9zwgv zT@QStsfmq(3R%JTzOJmF6HgwNUx< zmJ8I*#pA->=4QF)>h754*t;{F!YE!FLAs!J{T6yR$Kr^W_36D-nRvzXN;T>Lvy^FN zkS8X`LH)3vETn5c%N-Z{VjF{n#b4rLmq`Edq&|EV@2l@V#Ubp3$h0xHxl$vrLXQI`zaj5s(% zmyn0n#cW@3MdIwso^^v14iQEu)pYcCl` zGFBVOlGI98?lAX9s2bX_P~Xc(lCkon{t!+g`}wyx#+?41+%dY7*r#daS*HkL?Gn(aw} zhZ97gstPktI;^Khz9iWnad-6#z+*K(0L_rWI*VFjtQ=#5ueQRXe)uos0?R z?Q=jzC?3g}xvfLIluwtZwXNol>Ma1SqS&pG@ducK> z)QTQ*SW=mZ#m2CCRsx$A{2o4+;8Q(&b}-f^*srPW{?bv~XK!1F4}stp6SQe(&n@W0 z)i_s{(GTqfu<%nQ>iINGVPX{mxpr>{q|mj1oNGEz9#ZgAr@cfibDqn+L}M7zVeHtr z6$dS~w5uvL#ZX@X85=uT>MP=)5xu9MyGE?8gwA~TPP7oj%3$fwIrdm7hvUWKX9x3x zv$ZiBavsn~9afRSs#`;BnXSLKT|2hdP^cvHsX0+vo=A@3g)KZU##D6L?MdN$LJq^W zgEmi!IYbWdn>-{Gz6wEf4!sFo;N7n^Zh*+6CAg8}xMjxfGSCn}_q)rn?#_MnI!2dY zXiV+$$|hx6i4atg^^-9fwiB#E91~i7PB8o344Zf@G4^z|lXWdOA)yzm0URVJTik{* zhmLR%(>t$CFq<(yA(zv1@xuMuWYB#5Jd}G?-aq@&j8{(MGtoDYWu`m=;VRJn1ZDbjsQEay` z?V14h526vAkb|kfcXzup`{WFgg2rr^?#U7A%BA%e|D5f#Q6A;56~L}LVMsiZ36XT7 zuAc_mjdv5#6(^)(_0Ke_!h5Tul%8FC$~(DrC=)Q+hzfE_-#vc<5j%(M1DbdK0pN3kD;AWcoTH0{@%5 z$gYFR&WxI{SR#slqWR*$_$pdI{a;+1(~>9(v?Lq5ZQHhO+qP}nwr$(CZQHi3xi?}S zX3kHnSeaE(vC12|x_$fuq5+*NM+CDkulnbtWTMtVy?cbOZ)Hu~qA&LJm1SL9tLDSp z3fwG}GRzIE5~miDbVdo?Nn&*Fa4`Dbo}l}A?=Oxb%B1qJ0+9CJ=%jpoD%|nS-`2=4 zuC=eWp&cD9%||xU?CZM8r+0XqlWO2AW@APujZ~qvs;cr5=Ycq)Qsao7JxVwX9iGdE z=m&Qry*44jj*{$5#I(ijm|}BJs(SW)U;ZJkSrO_)E3h3Ul4U|D{K3Nh^OoViJ8Ts7twI!k>0^S%9>$rlxT#vE=QPDzqFE=@%8~|_Q5i+cqVuJcEQYH;f z|5B+ONh_+lB(McIOVA)mGcA0R&!!a73DOvF8;g}Dl-Q6;53qgXCIGaRrN+6x)5+Oh zae=|akvNe@Ce^l-waSRJEN4LCI{jk{CFsw<^}KS#IYIwp^)D#;2V%QbL* z(~`Us5#c|2)d|nY6xzD$emULEOHZF`Wu5-xX(67gWeh6?j1x<=V#Rd@&1v&whq%-s zbgeaPgIkeYG>a(6%QVybVKM;U?<$j`S2m`vdVHQTRtxa55)pP|+3vcCbbr6&&Kn4= z4IW^XCcAI!(4o{cdf2YUdUEX?wmj)*hOLi)RfQ5=weAK<4boOX`Fx@U2M=lil0v<} zWn#6S!N9JSE)(J7OSb2V^_l?aXjF}Fy>ObNDiwd#D+cg@VJA@OhHIwIvGF^0(T zBu33^9W(;E9IofuC=%wG= zSXGBnM`Sb8fg34O)!+B@+!kE~e}z1(@f+P#SG5g(cl#)Y&EM_gEuFmu;~_U3ryuD5K%P<1kat?O1peO-dXAvJt3_S7N~Zt3p<{nLS*1S1pDr zX##R5bP!KIph5_W&EHUPW2+ve8xt2v@L<`MNnO&YdGZck z5SIwVaM=Xj-ReJ?b!)gB%Z>KTGbteo{kFKe?D@G~j85XD3<^^~Vbx7Kj6IEcwTRYlqS9UF^|s){Dc&jiIR*1g|EDKAg}RDXWl?%jk@=Ohq#UHaJl`Tk0yOII%LL+p#U8{VRk0O_ z&pOpmJ_@U2@Y&f;pLsx(k9+RlBu<)mKKH^m1}WdFngf);tlzCDn=g-Y*Q|xJdU&lg=A;ksPd99uAFsO$NhRJ0#!PY+9%e(!EXoc83J-509o4?Q#7O@PZlzk~ zk=CrW7ZMEqK-aFsi#|%rNx(t2gHa{MNXm2A8lyYZ=Sy!&sh|F+iCn<3b+qHP;m_1FpDA?Wnjt%R%FRj&4sFZv6$}xJ@)>WR5??~oje4A9PO~hXZowq>% zo6Rh2ds;M$`~;SiM_*Pw7d2dz?^5WE+JAuFgeP^~5*~WJ?nCjSa}>B=Etd!PqH^1G z<+4f0M=WnxrNA?0#uT3{)-`+P5Q7ZP;dPyAua2VO$WwJg=R!6#;M-g<_%^U_N(Arc z&f2Cm9R`>VsA|4bP69CU$)F=g7t_g9f1^s57WQ)u&T@RKyeB!BnO=4L7XS_?TLm@L zs_aH)u_$BC7ihkoDgbN3tCE?h)a=XBDQ+N4x|_-{NRD?5c$)59$z|V z4s|RUaWE4x1T|X+vq7o1(}eTo@}jjIk9&eLKGi&~M#08`sq^Bf-L`Mr1{=3RP)bTl zTM0a7<~^p`#++KX1-R;IR9OTm3GGFV zvEj0JEk)KVk=L>&aG?w#tgcSbI9PY%TCk50AU)#$`>~zw3jqxkVH|i+E05o^-SAt& z{^@ClU$g_>BP*H?!x26*2?-sc$%kWy^X`Nb6gA31Kq*(KG(fv*tL!(z3G~<_UFU}) z)AuUDcMvFm&2Q-$8B_7GQ_Q*SA)sORzy>Zmk!~VB%C&>BCqF9^g_qf5yea*q{fVDe zbI~%@bp#DFc6o;^BWM&Ie`_qfvBfo)u4(Tu3mnpMEj7TaZ0WsE}XD()Gg|!y^+95O?0ivAkI}R8NCSx<8UI78KYf zV{dOnJxxC%+ss+1#TA!4r<7H=|?6M0$({cj}IhGUkReMol zAj+^xIZecbBY}1ndp2Y=McZMtG^m2|Golpn2IgfZ?OA9@LBw&-ayH2v%AnQ(>dC2| zg!xm@rnR_Hq^60(sJw}$(i!(3GgzP5`a5J-v=8T5c+m`O?{m!JpFV5r*dopAT;nsEn@Q;NL@EceWE1Yw zDm>QRL5QW-^0*Vi^!R?4-IkU~`Ne%>R|l)7c7Xq~ViU{BKs%VOE(E?fZ0tZ;W3(b3 zcBpag;yuVovH|)gY|AeZTqn$V1ph65EK||Er}O30jBL5*D3qIj!hvYr^Sy%wsT&D- zSKsARdYCOnd+BUI-n7}blD3?0Qj3fZ0thIKo~XKb3Z~6RkPt4Y##I~TNJE3NSTYzw zYCumFUyc3!^81n+h9qdo1+g(*I%!BHe+y`Y%HU}y%#~=_K+3@FRdcJ`P2%#Pk+}Di z*>`0doM29$k|-=J3D8wN6x+}$#mV>?iCSYXIAlT8t0uS|`lro2fzNA)nQpw|1^*VO zkV=B%2Oo}l0Y){m9{Pg~?Y)5=Q3$S$(|?A+PdMmBZt|Z59DqJXD2sz;t00=?qc3K< zpNZ%b*!t}NQS#5^p=N8lXQ%kwGh?~NN}RGY9hE|ricVt`shIp=5bpre##X8wPQ6N( z#_f+E+V{^Xii`=|H@!$ft2Bnuc+ZGe!%Kp;_va2{)39yDVe6n`Ay);hU!9ZI$usrU z>ioQn>6k-EVz;Md76ECMKk{9LBZxOtQ_*_g>*QnsZoUjdg{JRcjN$CVRkNvw`tuvH zkDO}QEMKo<2H`W;PTfGQbp7j~(JPP2s-U!<&vqeAP~SqI-T{;vgS5NUE%3tAa&6K< zivY#D`3-hLoc`d*x^ft%yX&&%uE1r1@wbX0%S#^C^v+Y7Ca~u44-v%hII*8eHGbXfA3FeYIZ&fX^KmBqU%#1-9$LvP zIA7uP*9CrI&P$HL@JGJIMD0KQm-0*f`Q#$;i;V75iSk72-`rDz$%j^6U2N0UAUj=1 zMJ3c^Zd=q!4le&)?AjY>BC};SDzc6))O;y6;LR=N%Q=EL1m7!6lg(DSrj> zC=vR#AkZ#IcnY{6Rao2%Ly=~>Alnh-W%T3Pw%ez5YbeEy6hzv?vN9PgGn;T^*VlE} zmg%(0Jle)`hnMix5;fR-GGNE==e4UE#Df&=lxQvTGlZC_%#fPe-X}uiIMqv3Mtjb; z?2;9t*dVHUhI~|?q&9*)iUkp5eJWy@SVc*cADgle{B;>kU^k8fNzYA&rQ&FZ_!eu4 z*73c}t#JfgVMiWbXlHe38u&`4{5hY@D_aK!yog6DB0Usbnd9EEz*_mVjuR58s0SRH z>K_Me#EoT+z4M5ELkGtNm{px&1_9SNN%sr2aQfkOM{Ti{jFcr>V2GC#y(>7barbYP zAwIq#SG7Mtb({kNqpyFBz|I;;OB)CL)Hge_|0{a2Zjif79Mo@`SHtD2+rou)@WNbK zYETI6lS&xv1O3n1lG$9eE3JvvS1#>iBW?xF0*!Ugk41+pFqN8xq1{BnyW z^pcKh&>q!PctEV=dfRWMyt(6G+^!l_>LIjolDY_W`sLdN+@uB}t57H{mt2Y{7y^M5 zK?j+xN8KeG6~v6ZB{kDx+~Bb_UMa8O8(P1H3KcUPrux5hs3K58w~AyaC4Z!h%6}*b z!Q=s=mn->$Re3pD8;T7?>Ea4S5i=MFP-p;5K(oKSZtOh!uSb%sqRGjs=+>dsasWH{ zL{h(0sYxfE@)25nwrpm2fnpjh5=3*$l=S~WIB-_od?hh+Qqa#o%vn|mu)z&)s8%Rz zt82PV?ZODX&@r~_*zMQ8@=rf~#0#R)Vb^`zwbY}GE->OPzUC%nG4Iq!e4g+f1_p%}$L8zo4zN(sRsq<_xY@8dr zveE0@u!_iR?s-WKH@D#__+3p3C&z<)b6uz{Pt#L}lJHzx>wl$pK;zpod zC$dFLQcou85Zpm};}cBH|J;|eioGB})*n1$G&uT$FWfkg{^Mh^jx|@;Y`O11AAv40 z64U7YEK5<8zmJX6Q}rfW3(ei(;PYCFM{QgB^wL1D>S_%^OnPBYzyZjE!q55{=7$Bm zON&)V@r!_{4(RP#`RUm?GD(qT*AQ&>jpkqdVdiI2;hQHoz8^PqCN@p#=`KDqcKSJr zzlVY(;$vO?T$!fV1ZN!?6vO3F=^n*Go{;d2QLwm;6%cWPSYG@S>wM=d2w<9%pfwzE` z>hUsccc(1Rffn;0nyy+Ix^)cOxJCI1%&4xqBbt1Ydx@K_;g7)JirfM1=;Oi2{_>l` zP#N2f;P}KQJynn4A;#z#6prc}!5^5(m9*1;Lfjn>E~pjjgILYKvZ|Y{)=QQyOh@k| zS@OPtUOuqqk=jNVk`zB|D|*7u=%V18JG&c&&2}gsWclur)ow%B4cMh*rqsqz&JJbo z3)N$z?pLUo$0L~)8$89fGfdE+&#V1C>Ah}I+QOM@Pdn!`&47d_(*b12S1KcvP)sET z5;0fXotvfm6Q{6OmqybhgKIj{)B=Skkb|`D?C>tfg?PuwGfB^iSc_LpU3pa$n!u;w zP;^?Xsa2F{TA4h=b2L8^*0iPo-&b+T{I1ppm)R_`>-wXqN$Ju#fb2GidUMe~E0Odf zq1ug}#D42Jo8m4OODPlITVTscY{4p9 z9IWpC8r7&$^&k%op8RJoO6A{#O;Cod+X^e6PbQ|IJEg)&A#z_9QW<@p1$d50i8r}V zq5VvLox4wJR*x?lz(7YHrI0Y8|d6{7Y0vyPjm7O%>_W{e&Kc(>y&o+cS-H z++^-Gx=mQrM4IWX67ep1+K~=JXL48siQ_@OC?M|R(!J66E2Q>7<}sllh14leS$P5& z5B1XR)kgC>qOM%OxWDqY&6Lel`uM~vGAf^vzGmukURkVZ0u4fgf`AhI!3Ryl1$uwv zXd6vxA`ABD%|98jnIF9TTT62*lXmdAX@Ylh^rUl@6)&AB!iqTjU2Gzn+pCgm6wzD@ zrKOWpCi|$Wg8p&wmEL|-TR~#OQKBeWyu@zQJIjhT8AhR7eK$qrAee$Fh)k0V3Pb=2 zVcA>06$8u$6ohYOs~0?Y4tySl_>(CW*0?5L#DELHOc%WIUERq-{PW19T3KtCG<_am zrg+ouXknWhGNJEKY7o~aL1<+)gv`O*>#!{~O2Ovm6#J!UUF-VD`;hr*aOA8-%t*5X zkm+P~$s~ofyBRH8*c6p88y@xx@3&C+*Sdg>reyn#4DJ>RY^4v0Di4)zu%+7QKeztz zNLT_a(la+1TApZTh_KBvp0s#XI30v$MF0y{ZImF7Y@r8>c@~nJ(CerOGSvJQ+w-3g z@{FcOHK>7E{-ncCkE5D7=~HCCUm2c~6L4{fXug`emXS$Lp(F8C&i}Nkbp87HIKxjw zF7ulc6c(c4#a>hGzWQDLYuDY-F6zzVuw9y&(-yDZg}50@HlNhgdV^asM)^q0w?06} zq|wFhjA5y63l+@k?aRY!TAGe?1+N(tM5qUEosLY!@X~D_p|-d;u}MJuF5~Cvumx)= zn$XLbfeLB5{D?Kn)Cz&9kih|R>bJ>`VF`*IyF-j3+5uaN$OKQh&PASLcWw^zDj#(0 zy1aIV}` z()dY!@U+v#or9o|5r}ugu(%i6t18SEj&j2V&VZwHGYJ94Zw(NHlxRJ(vnyS~v_vZT zS>10bAQiO!m`s!%!hw`ir@x`UWX%SZmp0_m!+uKtOBU#kr+4@cf&5&ONi zpy;@-YVo%gwO&{og(a5qpv`{$9u&RJy_-1B^h%479a*D z?_dgzmY_ps;y#l!uUc~BFKB_y-P%b%Kyz1yHeR0&G&?m?%-D9HygJ&0nB=r}B9<=V zrPry)ZAci?qXh8%RBWyG5C5DHK_oWGSA^ojoXV2oF{DOV(Rg%HC^EW6W}S%1HrsQ> zqR`sbZA779iOhlsuL`+}-^LR3^&$}gH4YAxlG4-cX&w7&_;;f+R;lt-R6R#Xgy^yv zcM2tKg$R0@Z+~6zFp^>)p|6FLqe;9|wi-)S&?Z{qT6-=43$vt+MR6k@2Q(qfB%a-y zTGKD$zx~F=Lr%?&y7#a%W8j?!mtB49F@Z*{4do-?mLO=d{D3PRs=zFF`d)!|lGFZm(Id7aTz!c zyAV90P1mn&xV5~At6!7bw=1wQ8}<`Bc=vj`fK#aSn%U`B#1B3q_J`Ob2?{3gaVRfq zvVd3;)vU1IGAj-iSFJh9sCZ$*oJ>?Ml#@~2jgtYM#Q zu#g#a@&HpqOVjJcNy8?R`B1+(`w+c#u{Zw#8l)6#=t|NWv_`%%P8#wR2H}K%l$5+s zl5WTf+)1kchG`c0j^BjkdFUoO7!El&TpeC`M5t-ZEh42BnZ*%BI4yu?O!Y;b@B}}) zJEIeLa6$}D4>e56!63IQ%Q$LDDN1({m~T%^qOnlIf-3F=hwOl=U*uKTwmEl_x6|BL#qLlubcDG zweDv34pXoMk`oJ|)`9Vcr*PH8W6dm%wuwE*HJ*VujSq$^F>ge0_NIw5?R>1LUd}ui zJ6}VhDeBC=z=7&g)X6T+&Q|csVZ+8yR#`$C26{aAsRHsP5K4Pka#zOBMA%KioR<8Jrt85zwE(H zMJF5C-`ANcaMg|pBVAu_6)NOQ*I6AvJ$c6qZ5~Lj8BXqNjeU_#0P;Ar$J%M{p8{E0 z_+SfP$hhLm%fBl2cEV4~bE0*Jp9q}WyLsF7WB!iKT$;hV=j@jBPZgO+4p1kCDTCS1 zi5$09w58yH(xaV-S<%c(*In10JYO{U3YUw=95u6OcecYmk%~>_^BIq$v$KI@L9WtTei3 z$YiIF0Jil*G>_Q}{OT-G5Cb}dK|R9X_rv}kwn|VNPBMO99o~FcQq-elV;%)b#BoB> z!DB;)@bdd@Yw!3^w3@HnXo>v>(DA~C zz&ZqT7zj@C%r6Ye1y;KZ`lR9ko=x7p&mBBuPR|2Se9-%S0p|TSGSkrGFdw{L&R)Aj zSW&UxWE5j;HGr$C3YYi0FzmG7J7}K*sTNdNdSDJrRQFg0c1T<(UaN4Wpo7J3Qww)4 zeNukM`DkW0?;d?#leZW@(ALf7!EA#gwANH5HV1NrI)^S?hFYTSZGfe(OpUVSmS33~IDooDJ{#;D z=$}4!HJrhGN{Ou!Dg23g`Tr72&HkC;>dH2bQszYI<1{JRmy@epJ27rYD#$Vz1rl0k zM9qMK7c?u{_kFskb#5Ww4yCWqh4hgR~SAsSK0Jj&!abq;cJet6Gp9^3YyS2|u(6jGQ>BzVz zE0#|sLvj5UYrs?xHT)I*4&P(E_JMcaU!rE&o{dGGlfr#sNw?%9`$DC?Gj?lh!oO0e zPwc`OapWdW?(T;w?#=ya7eV>1Rwj!-RA&lPfL7IaGsN>h=kwIu8gutLEqU}K`Qq-~ z76MueXwfxS@tQHKJ7ubxPCMz~#zBo}rhktH)GjVKpl!C!y+n#ub;Y zuPPz8jmOlcRYLcf2tm!!3IZ%0dbtDOa1jDgn?CJgHS!DUZu7?s{=)!hgNxv6e1p9X zFe^=x2x&BT0~zjat4gg(>}?LQ!EmcPj%^z`G3JEGy0G?(lkdpGG)Zp?2-104;s_A^ zAADdHSL{UU0(@g&fhyySNRf6D;k=8YyBEHcH!|G0sXMFH$Wj@zCw1tsyh3BE(@rO< z>-( zGMbnXljUn-n@ui_U7VTywR@Jkb1H~?3Xa0v*Y3P2)}N~HfY^c(T(DDorhe_y_6i!f zz~%lUniNtALAxH&ueSMEFOy#uVoA)CJmIQduXfUW;)!&J;HXdzK%{2t6;|ci-k$d1 z5l|D90#xy*bI{Qi{`lQQiIIwxy}+2SsJT5H&WE7IL0A{`aZgUY=3|CT{X?eyYI(;@ zrT7{Z&^Nx2QdE2bve9EesvZ}AV&A5?LU8zGWS}~a$`%&W^1L| z8r|_jSeNxQu=5^+nTV>9OvC4*E-I!bh*24XfG2Z{&w2ZBc5?sRtt{G z*4>{+u=st1MWb{)B+cm&*>?cP3}S@TT*Loh?;=}mi%G$>!N^%H<7EXp>N^0Z14+8r z592*y)h=PlOiOcLJ6u(&>iEPi!H=XHn?uEDM zA0g99|0~8Oc>Sx~6nZ624=2QjMSdTJ=-|mV6E4tvzu%{pKTx8C?0aZ12hAKtDpy|~ zz#}axVgirb3GclSv}+4>R1cXo+O-w_R>lXUnTL!bys>FFpc^E!#`h#CRksJrnE&0# z&O5T97Mf%2Q|fRk$VchWO6C3eiv{_sf#bn`EDbg*u;PpfzZ!$$31K*%XW;F@{vGH* zpmmvyZzD>XAMDmj(p@$HTde2mdcW`ccak5A!wBG9jMu2rwYSx6+0^pm&MES}tP^eRo;u%v-JBg0*!5Y> zwktgK%gS&Rl|Iv~a?Kg4&OI|O9LGFM4P3m_M|C=ezK`k1Q{@aM;bQB~H zX9B;rpW}MT`_>7)mqBaMeSNqiJlIVfd<7qRpiGLh|Gq4M|634Y9_Lb6;CGQg+K>Mp zK)=c|531GPM5JYRzUfWS1j8+1nQSAwCZ@ zS56)*U5t%p+O>xqxPTz4J$T0VTyN7}}P z)@r2NT}dbC#m1)J*6%b*Ax9&C;boMlPOZEjV=a#LCJf-Pat^fO{D8A#5tBx`Nw%-J z_)B)Ch;&p>y0TPk(lJRZx5Ru%j&&Ua`qqr8ULC4DyBiZmwc4&m2TUp9>(LNxvF#}s z4-A_~Iw3sYO*z^HhXO`?J+lM9)Rn!p`ySGg3m6oHmzVRXyBq%XxD%OYyyYIR#J8pO zb(cfS`YBqewz0TqR6mCJ+d(2Ed6`g% zh$d$E;e}g_${<@9vZ>$($gVei+asg5ZfVnIV@&&>`aje6!Ifzo?rS%5$rRmT>ClJj zPV(V?^tkOPbFK{#K~-ZC5=1dWX!GISe;60lgOy&khjbZxP9Dr8WtP&XvO+e3A(M)5 zBbxKjtrb9g@vb_CdQ9w?<32A?^>%Q>lJ`SA=L-;?zZ-VW=4ki>iD`!opn&|WXYZTp zE~}G{D$tQr3ulsc?8BQZWg6FmUZISd*YR4|9!b+)1tZebJ%OvF0Gl)R-D;)33<8a= zp4)tNJEnZ@8z6-Cofaj=AyCUhXO=`NjlCc5uhZiyDjKT(l~$(A#!0l{`I=}ZClo^K zrgI>4mlpe7Tz~>WwjWO>bRhh*PvB$Yo)6j7B^qFO(nPX(vL!$b5B&_x4}+Nb`(8o5~TEcF0hS|y5N<2x#E#IAO7 zK~5AdmiTkq@=jlx>!EV#;j~LAz#nUjX`L0v3-X=oTtkh?*&ZR*#wC1A@fcQh62AYE zbZd0E71$RZIEm|tfn&8cH)TM@Y3=e5E@ayQ0w@p(OW95}cg%uvtr zt01$xb}N$WNy;NT{21U=7FECHRf66t6HHV?ty|j)Bhe}9RyC)%kN|dbm+%~hvkuTX zbNgEicdLJ#ooXA6N_{Css@cgE@w{5B8B;3tk;s(_ZspgZp_WH@0!4gO|EO$S;xWqY zpjv@1)*KoZSxL4Rg_IKtVOnl$z4)0cTB^tR?Hr@2jbKd}{G@lkh+$XXe^-vfiNj{u z5s>T8eSj-~HyD$la$2JS^wXvDh?Ql^2sonn74Xr&9V`NOxX|4*FbC>JZ<{SHyM!7+ zkh0$OefynL1NtU`xAipV4hl21;hfjsuK7A>T2a0fx8^VgyL?G z0UzNZ*}AIoHUfZT&Ku?^)h+z(p1RF7`GKDx=t|cXRi}}1pyzsbFJ8H2Pp-dxk6C6#FVUDUdQqpZR!++#r zqzs2HZ+bE6J()>RnJ`B(*vEcdwc7jONy?Lt3SCD}9!=urX%krR+&dWM=K`Lw5?Q#U zW%);Ms?t&yv+?m=(b}r-v0=-vR=_UJ2$&spwf?!sB??Tu(K;1j@JD0AGZl%8B-?VN z{c3#B0kK8sE}EEzvxB0&hl~Q#vj+J>5Z0y3%|E&tP&6Z{MSj`_cLBc|m0N#;v$In< zwnwxNifufhd`iPrV6TH*PN|oQ(edqFa!SY&5Ou!B3^eNMf(5bZJPz}O3!o7CR6Ux7 zHNl@S=eN!_pcJ`7-F)tD@a{AVV%!Rn$cU>Gzi+9|j7D{ACq8822gmBJ*ZxFhuVDR- z@T@}@bK1Sou5QIj>$vVkLBkIU>+A3aY2K8>G}?@R5m@9?ZAt3O;UK!WAC`ZG@=A#8 z8c3GE;`Vt5%ZW|QWQif0@)}Ru^J8NF-AaEBIC&;4pEQH|Wd{n$)hvb`J;Dk0JBdSP z`kBNZu>LmC&KSIH;tsTnVlG;Xg}B;5nrA%6JyG=_Nc2A`jsbXGle8T2)~aKov?2fF z9w0;jMl53%O(p(Q&CmH28&!E=MB>Zem)fuxnvSr7QgO{3h>JUhY`=i>_AWDtU$tc) z4{Q!-F&2l-)ipTPmUDeu5}U}*FG{g#3bb%7g)?r-E%U6bMC5BXh2JBp#9axSLlK8W zMB*bY&vNPPmIQ}u0|C%P&P!oO35i8%BO7uLp+#<$w&wOZ?D#N1Yv&9`;ESsDpgFPsc zN=Fsh(ix}TFs{Uz~UhD{W{?V{;m{xc8hnQCPgz{ta%Nki5qh`J{Z?I5eHdEFt2}tOArRtC?N^@q+l?R8fbLmTdQMH`uU`_R@^LEMIQ3 zZR7D>D^8bLY6bT1NPLAEs*qIyh4|AX(MIJG8W!D?9RV8ik=?Q6n_hBskh+}tm&tLpOKx~i(A0~C9*h``&W zn^YvojF>}dMjs~YahC?`My|h%3%tf9fz(HCwgC?X{v<=+J>PUn?DxuggHZsiyDHHy zRKv-+Ic^>KOG$?G5z<-D%@oO_NK-^!NI48FY<74>-3sAH@)v@OZ+*#{-vCA{K(!CA zuSZYSXiM8N$*6OI?_jg1St>*%MqZqYhjU~+wV7>k7Ggh>Nd@#2!}3Cl-?4ndPXI@D zytytnM!9v;N1NMO1xYzB!^2zUB=yHjVnvsk$1I0P-OCl@GFi`HpAS1L(B?aANFcq+jE6l z*uO$4%4=ayp*!Gz6?=ne8`|IA_dy1#R8nDpRnfIZNrjTBuVo~ONw=Q{7$!KRK@g{C zK2aD2EsQwB<|CWKzFxV9N(IEE2%0k=Ni5dmE>0IOi9d>#8J8|yAVylA@jM9giIX=U za?Ef6b7kPWQeqW0iupIA6GA3$Npl#vk5Io z-~*DJjZndEbcmqsj5?S})~ko0Io@t5WX1C+k{>N-$uXh)7AGW^r~VRgA{;B9Mb$C< z>|laX0O$&E+;fTOeu!n&EL@?C4-=ZpVM`?=vm;9b6(anA-XuhApFXAMqh?d9l2r}* zVsiBI>(sVz1j8D>oIaMQw=MBK6&Wk9o6ArQC#x~e*K87ZpK;PIjyt1Q8ZsiOqmjx- z==f6{_6BfL%yI7Dw8yR&k55C6fn=aIL%l8keJ!P9w1^CwN0uRH44ZS0*0DzlR?p#J z(j^yr#x%F`)N-0++5Ut^D8GG4K-ayWk8z%GKI_cd8k470A}q@cA4XqlID&$eM@LdT zQ-}fSEfWupt-O?827~g)sNd!fEH<9E7hKz8AOC%=X_RCftF@sIUfM!007{~Jo*d<` z3=W`6>!Ef?zM5(=Y5?=~=tcy?C#p6y5(ML67XWY`XCJ0WqlQRRSaT!Hk{Q3$M_@{` z0oSJfyuGU7O}#c9P6v+7vi&-0$xml7GB=u7f_DH`nP$yTJ^V9wVAO@{8Cv&c}elyG+U zOuQ52T7u#+H*ji(wG<5#-pq0_9>86%c=w^D+K%?+p*L(KjQk4{Md2xuZj;@>kOZ!U zgtoi)oV*r$mpfWn5u_I-nb?ZiZ}(fBI!#x{5#gYdj<=K{gd z(GD0Z8f5^uF|6)6M{fDu@10o^L1dYmK!Ix~W^%KaP#3s@kBrFfRcFeRdPLYZmB5M5 zVdtmVwxWl2+S_Yn97X7~{pa+$ja&k`R8Q&B#)62Y-c6cS21SVt?qgUlxJ$^C5Cuk# z+*MUg!Z1%J_TFo1Ybj2UpD{MELk`Fm0Z}^&r!37QSq9n6^NqOFQ#|jw>sk^rO^5ZW z>5CCx%3b1S<2tB!nk$`LE2IQJkVYdMS~9BE#1x)Ek&PM1w$4439WI zR~4|?)q9Q+49pRMlGc&3rgSTe(N&s%;&ZcThX6lFu5p-5${H>#LJG9?ddu{@e2QYG z8Xp6!jn9r4#HIF4i2aM;iV2^uXRGB~1;AX8N=}>4$k6XjU=gj8^shc|DcWRC4YfA* zb>Sc{7K7LtU!qTm{bql#eQODi)G*LAKf)cX3Y+##=EKRfrDOYpn4_E%A`P5OB_iD? zh_0=@N5WR&owD?rjSwGJkV5%E=3&Zqq|Wq@8j~)aZoERzJv~(RFB6`73L~13P|_Y2 zQKY5@oY~C5kQT!(RY|UZ;XNE0-&}H>rQRSseL| zme;@2AP~vIoipeb?;k8i>mjHMDeuP}(}g61&fu=H_9V6$S8+soBQk~x{GfAPb2m41)X|Uclc~#)MuhXq%LnJ5C>n)U?IIUeuZtP?upBGo1W4Jz9G$HM-nHb8e+B|)uE z6Kmk2<{(Yu-Sg!>rExI%`rg1?9yQJ6(O!z<_yQJowg**L-uYJPvtqN zv17Agq1m`eXbiY2;jBzYa-Hv{-!%TwjlVc*Ne4|#-;Uo4>LD6M)D-w+$ee49E^(3a z{sm|Ni{McuO;Pz4$`OzrqqOCYI#`(H4~r^t^QMF)6r;Ei?MKBfdDtd5GjWXQ)6#pA z=J&=>ALTjeQN>DRi~6ChGtBlOpJejaJ8vAwUFPAncui>k=!8O&U%}% z!42p0Y?v}NtX>4mZRiD}+S#CkC`5xo&qf$k@rV{|uP_zYV42{@;&L)~!k{J+qOD$- z7IJB#{r|iCE?>-j*pwJx6bhpj6-DTW*(B4Bf13;{rjzg4NpN= zLktV`O#Xy0(91j@8Ce)Mgq^3wlVk28Z4%tVUPPGEt*s~Pm8TmlvDw%WY|=AI${NU^ ztKKM(nb%&FL><}8bjG@Ppxw*UbzhW2|E8{Qt5Ti-3Th97*?!W<)iQZ%HC(pHo(67n zNu@{RNK^1D6yEkQ0~gL$-`QzO;4(t1(DosNN)TEPnvWpsSZiAhx%6{k`n zDhOLsULrHkuE%t$Wn$*);l@F$}f}VEvuTm zbb#T~@1&$#-Yuh!uTkIMCqo6C1Mi2z%Pb6Q@J7v;VG%AdY_bPQUJN3i*(5$2CKRYn z^gN!mI#|!S`er*d$DSd;zW=;mHeU1E?*_Q3!J&w^VR1Gjju};xC(4Ifd^FiqPjZG&3`evDyp1)wi40ETC0u z%zqQl_LIrnt=^S;?KPunnd^KFZKP80V%m z&UkUy1aIZ5#9a0g%R*3e7-CmKje!?>>6c8AHvT~9m9E<-F>e@?jp`76bNX@ve!ZtX z&h*6cxSRL+LpL1y$EgJ~@f61AD-xiExTsiyC%ilBEgOzbS9jXrJJnf|B^W?C<5Dxb zQ+>LeKpnv({1VWA+OYmj)TCH1zmD*z`CmfblyXRT2(IH?kK5FKg<4_{rIpE-^^_9L z48k~OgS)zyH#-@SHNwMUMgcAdtVGTPpfxk{6ld}viEV+*F5(3+N~%se(U3-sbBIxd zHD->cNDhoPuKA`MhyO^Km1TT?%*xhtZ13x!=eP(nwvZAEyhUA$6o8kUqCJ@CtfI3M zRwBvf)H?~q*ob&VZHl72$=rg42St<$-#^=HnI%ze?ZRbk^T;X4n1k5SEk0ho@tWvR z-1rkl3LQK*E)e^sb^DX^DM$@<7x%2mia3s|Q?rN$+Er)^irPVd9QHrJia})rWVR5F zna(uMK$59NI0{td&%?$pAB_;p5sde(r`#dEgNWKe>B;AF(V@;J>mIW38zE!(zi+qP}nu35Hi+qP}nwr$(CefN31>l;SIh>XnETW5Cd zNw!4cFs>n=Oo2az{aQ7u+sFv=UsZ(Y}t-kxP@aR|~N zFzgQ;ocPK|Di{y>0d3YWt@r`*At5wMe#-8y!)H-L5NVx%Dm)KM&>1UFmG?fz45NNEO>_z(ZXO7cTo08$h+_l>c zB4Ix`9V-WVpa23TaHNvP-*en%C)AE#nBBu8TL>!!fv*b-(!E9iaY37 zq2yOtL#jRZ$JtcoZhT|aZ_z-vuA^uSDq|5qVJAQ>A63ub+6g;hNmrGxi5r40s?E=U zR_ZiDqfW#Una=y8akSRcrDPw(5AVAOr{@r_e8E;9dW-vl*g;_R5$_{Qw?}7SQ&FF` z00pjuJ^VZf;(ev*#o*bVDkJwck%_F{BtI}lGnpBsmpTnfUHY}%f-sYn{^4ec$!tXB z(_A^{Kj?G^8Y=nhbGAk)6Av2HEvEA7zoHD+#EPTfExoJXt{SiyR7x$jD7~7(n}Ft? zY>6lj6>LINsKpqu!^N9uq~cQS9q&rtX=5FW@^y8Y>G2puEj%oezS10EN9Dqcdd49( z>Zp^0PD%!u<)?fM;VR1^xr_x}NdZ}NK#jp=3Z8;Zpm+qcklA?|h&23sm9Ef|-hXAT zsS|#Xxj`bMzudn1*Gj-7M<8y-{*WBW_SJ{H9M#qYA4ZlBmZQQk?(%MF7q^9kQ@|Rr_=uUSIj6JB>QT@HeW|SQw(PqRUUQ#mML@V9`Ejmk1Yz_LhY+GKief>t9c+Y(k>3s##>RqzPMh-asy)6f zXMmX49s=-2&j1art)O#PmA0%%#(6^roM*(wDPi=h#+`qC&vV7X7f@W*@Aqy#on3h7 zA21;s5!R5f+zK^R_z^mh)(La~5;d%c#=i*eI|LkLZ1uC;0I<){VZzg z+Gjwt!EG+D(-lA!2g(BgA-R(&3;(Dy>S73U=Ovv%hItt){=71~ESv{_=#%qDO{` zW#d~)c~d)Un0hig=xmKTcA#}H1Tt&)3$#lQOGLOJxaEeI1?GkM?O-FGxuDU8O&0t`1K4f)v;k)DSeSRcnUorB~BE?TM3SH4+S2>ce>T5bi zf0e<$bxJV2UA=ncm55m_?vP-=^)w}BWTo6Azt-#BN)gilMDADr9ynlXP;+qU>f%r` zQ)DB5I>!nlBmCs97*Lpn(i?ef32<-(RftKB4V;*D#Bm?`4uA&BHVN!u>%%Tl1}k^L zW^a%2N!KSerkB)lV8*4rLgDW@JiWJ|ATFTwt29JhUZQ3e6fAM(LveRS188nA=c+05 zcPL${snW0@kzh7B?ivD(+>_kIZWhd)Oo8fBhs;aQv4U-tb$UVfWt?X&vcKSjzOLXH zE!QBA0Z<`rEzFb`nX~5h^}=xYl3d#dvGG^+f8G~5f>m-#MW&ttpLaBW_$D`gA$zts%@5pb zk*O5beD#ROIdkZT25u11Xd6xFv-ws<_CXec&FyQk&C$*?&>d$e=D&G7>hG%ES{q#h zg>G-1r5eneh&2Y9RU=}$lEkQ74Qt784sEFoWVXB$&q(r6MMj!x*W4joDfmXCY*6^j z3zOq&QGGNa*oXc++3+h~r4-KQ;|rex{t?hUnG{z6+e}z7^fA~#Li#As76EP>&Grq3 z(A-XOW(`H2mNV4LpAnL1&^S%Lnb~8*t|ln@us8w^Y(Mt~jX;yF=a`j%=8l}Vx?=&o zy}Z8(gxX~ku3a{tU0GfX9M_%I8WS4qwjiwa!Gv51F9#z{ejqB2Rw;ileGNIn5{jn` zh^3YIW`L}%*S{_Nyz9EZ`vzOkSvG__vCzoPUEhh0c8jku1#)6(K~ai~!b)~q%2{Ej z-V7YZCWzDQ37vwE-n|__zC=)S1HC(zO9JF!P0CympyX5Z58Uw@kX0&(tD z^3tcsiv#=|dYox~ig~d=YPfV@FxA%79lyY@AZR`CAnRlb(7+DoTeGP~o6Sp6!5#kI zrO(V=WXC;>R&x=LGLNZR3ys7op{;g7IN4J~!qOrrTX~HKK%U=$l~w^!yCy0Cqi&e# zb(y9pVF{XJR0Nn_oL_gu0}!ka9_cyJaq$451IYJeHDGMA9F^040CZ-FPvKLrvbtNk z1zO`^Tl2Em8qu{`40>v$?{QkW3k2*)9h){KBtg?3)XI(sJO9_H}|G7@rRpD-QIzc-MQ;$+=WfO*#P`U z;+4AAg*S#$_ylVy&{V;eh0QRCp+j%9k9C>uvW;DY?4j}&R}=^>0X>MH0gS0z(~6K| z;e%9q=sxGB*12K)TAQ`pGlP02t6-O9`zNt}jd-lSDrL*LG}<0<%sdn?lQHOaO<%=Q z=n(GZLi{D)-kY4<%rJ3oesx=kr2$lksmWq-IfW|$banG{ncKph3dX_FdW%O{%$y+W zapwz9a0cM6rL8{$Efa)@(cJ7i4noW!1zSQT@mrvj*EVwwwsuN$!lGt7XSX$&`tCTq z(&U+1m4Rz*h?c2OX%im8NX(E_`4FL85m;6hF@}ZB&My0gB-q z(RO%YgR0@Ysi-B_i+q$U@UK9d3}Gy#eyluu!G}XS*4Zu)Sdv*0KR_s~8kWQRn>NM7 z;0vLl8pLV9A8!wDY)3v-bmtF}~&&w$Lm&IY_^!QX8u$#iX3mmqG=PYx+tOPj1 zl0}i*#JVh1X_F9923;j84U7VK!kAS$aMPXvd7EbmRUTz?A#HBv0&`WO@VDj7d`AA` zRZuYCFDNubG5`(YiVPuOe=^(-s3!Y2ucjS^p#upS|IbUsvnZmEzwynJ?kTZVS!7bg zh%cRJMBdDm@ ztpK3&jxay`DB7hOTTH_fn=xAoSZt#AEi%$qLM{)%s!bcqMKl**4en8ejJF!g$6XCV zGhr3w-Y0>!4&GJQtYu|?;loEh&x}6?)J66mbrG~AqNR@ zq=Eb(?wzM82L!bw5Wnl4j<79e>u(t4e&Y`eRL9=LcKEF_ag=YT*4SpHlP$gKSc0^x z*(!Z)1CVJvtS4qsjFsk%iuM1ht3&W@BM$%&4L3tNDq(C!*azp0nkTgMPBuY8Bv>Il z7i4~5&-Orz?ZAY%Gt{RmiwCPLIB>G4vfBZYz4eX?vYQ`CSDy4m=?kzTMcVwsaiieH zOpK0q);a)nWgF8hc$B|aYMd2)wrdeqBEI437zJ?<6Z%MadZ?TCYi_HCF@2d4E z<5X&CxU2J<&K0oFL0|e znv-uMJ|vE8QD>=SjYVm)rT6XbeERI!vev?{nrYP}sPxBYyOmTK zJp~NHFKB>6eOI0i-5ja)xYb^4%^c;s$ate%oJiTnE21gsAq)iQ`#ic!)qtgyEjAOZ zcq4_PYY&B>9C-WbK1~1#w&<49m&ZEjWDYYY836$3dM)FgP47#ACOZ>aO4^a_z?UqU z*Z_ilrNFf!-Npw~_nmKU_Ug@5)n}>ea~0Ie^i9mUn}gbY&w$HXv5l5rPsTO&#W1La z-3N`A%IuDw&h{L#<{Vtf8ju9Wn)ceqB<~3+^FuoNFicG2t5@N_H37HXzN|NN*9FVbWW5WzJLg@pYOf04qgyJt6D7I3)SE1?X* zpWJN$1Gkl9kV0s}N;%sRC?%-rSS?l-LNW3;nABxgNX#eH>lO-$k^N*=`DH&#Vv>W^ z)1wH1F5*&Hjni?bPhf9$U- z$Ht8m9wYq#Q$Vc0_6af%yMIx5h2D>P1AzPXyMa&T5Dz;%e2nY0CLfooKd97d6*aXf6<;L+qi#a6)I^L-BvobzE&ES_CmHo+GY8K#fd z%l&0TM@N)*KSrf?sUH0$wJGFpI`1|7I-DPK0Dg)c?2uizH6h=G?^f+`nmM<+V+9O+ zwW1=zWPm`+?iiGSX=QQlv2HnNl-in+mwvTBGN#u|tkm4)$R)TO6JfEVv2O7-$iTi^ z`yw2cmO9(buYG}|ke>BkqZWjlmF`h#T0RC;ya7O1Oo^AJfu{QJTBcL~oOl{10v0X_ z%T)EbTCr2^S5EsN=`nVPQS2*u0yh@;HKs+)Q*z9M9Xh>Br~#xUtL|E_8EOo3y}L=d zA)_3i9s>hUxZ)FJT!RU^ToPP>39J2kz&rG6~ z;W?01H`xcHRo`F2VfoXfYNnE#XSthHozvcH9sPI@Y_n}h+Ph^ak(qE}N#*8gZ|Qv$ zsNC6kYxT*&>}#%YI`fsz&V2buz73y%E_7>z6qlAmg4HyFw6nOLc=rIwYaLGC%&DVO zmh&S7&Z0r4;0=S{^JVC|oE<2UU8rEWPvBFJW?#OgdA_h7vuQfY{b(#RE9|kJ_i;7E zu0WIRwveVK>u5u1N9fX?loA(lo?eD1II$ys28Yp?>s^)B{H=DIGG_Q8QsCuJ9P=PZ zaBAz=#paGO!?~ql!*3ToX3Uh16&E|OFiPUcUf-*H-oJY&@~=v50}#{%pJ#b0HG}Ks zzqInPtnz`!+&zm|of_KB&qVd;+!3@#OgZCoMI^4QFP?m=z@6%g{C zl{DUh!F9gOA$y)XvS9 zI)L!;Vsbx%83qKi?1CbI>0VD&g4K!CjXYSp>jJblMELXXF8p&uc{=kRyxnpup`gp^ zPzY=)RT&a0VE5YL$10!bIxYz zC?4B?ex4?6BLa}$?PDjnkD{(a9?rM%(B_yPRWwJNVOe%XsdSteJdBwvjY{xHp3TK{##KbvUVrhpJ&Hxagr}x+q z_q44Vf3E8Up~sQDUH>BXjvX;Ali+=o-2c&z`k50Egrot*g6UI24KeVm_8W(da030%>^pT7fjuCgBhR^SgQh_stE~jAl-f-RPvAMbawk z93D21Yb+fowc?k`Df(FN2`JeTH%pBs;hS|b{e0jo=TLU zWe*GYc&A^X@_BvgB7ly=yI#9R@8vq&Mat>_nd`s%u50nH zb4G>jCCPrOJI*lp%L(zx{aTEuf&Y^Mu0ls7i2XgTYFw=$r~TcHesNo#{Hr#;EfzhxcS0 zppNW;I=z)?dO0R(KT^rYi@N@*%3;uZS`ekgKO!1qVQ0kpkDxR=mFUeV1SGW1fTR$Q zwpSJWt`C^G;dO9ro#Rp?(xNlO&sy{3Zz2x1R1^0rHrh=aQ0KX#Mlh+s>(nJgDSscn zwIp=kXSL-D5kz+cx6zUKvc9LSmK3C#KH2ZwI;0@ z0m^3QCF&-y1{=4hzyNm7CoVD}K>v^(&fmh*&xqPzKt2rJbxg64o;5@rFOPWsd{oK$ z^M@v^piqmJ6@N%=0TfkKG$DZ2Gd0kTX{j3rWANvq*tFm1C|B;xhoC^Fo2RHw zI^kQ8Qw22T>209SFdd?^uZxd_fTB<`W&EgKHfv{1R5!6GRcb5w$MfWY3BDIpa8(}K z_0+7Zs_`s+e%4vi>n66xk;EjT>1VTXtB&JDwD$T&0t|Vv@FC^`P$8gbFfUz8W_lUiqib5XYih zVyY#1xIfUQQtCWd_4N0un<&F3`_mAGKD3n8JPddj;+ujcJ<(hq@}%M*F5 z=f(c>rX7YNWq>;89Bwv-ZWIFqTgUqa3Z8oOXZEGqtDD6(zN0l39yp{nR= zM&e)XgT<>s(YqIv=zNi)uPCuJf~mEztLVi&n1emdH1uoxIH5fprHN{8bjNE*|RwH zMn+d`2P^(qMJAo6o+|NtMP7625GRHe%s8s6EF=`vJRX!W$8ZS?Q?)y)7et9lXLg8( zNS-Y9GKf&+S3=|Cj{^ZodP|?Far5ksBjK#hF1oitRA!-=#EtKb_uB{tZugJ8wUMQk zb`=j4Fhw&SKddOKJ{E{q`KwEP%mIJjMyUnhoAY08Koxomo-Hu_g-ecun5AE0T-h;*tc0>XD(zOZ>v=9O;CIZ`q zwj}*7;~kt4Insd{jhykKg^nj(n1pUyJ!*FJx=y0!5qQv*JPdf<7c+eqq#*vF<2`_0 z$g+#T<}f1FW*px#q(w(Udau;Is5&HuE+U@DFy|7}@a8Z!-@8y3UlA1JKs|GM!gM?u zLNUs`^*5!07w9DN%$o5iDAs^L_YaI9HKvgqlilbYRd(B2Xj>F!72kH;Hl?EraM)6# z{H9S}`nN}Xhzj|Cf<72tka_Ht_%u$-%x?ao@NobvdN+!VE1`K}xaV^w{|2Tlal+5( zm+k}2tKu|%L1ryqjD-{?J3^U=L{IpEmCFt|LS3Rb_n|Qu{_1hj^ox1K8pl`9LfEW= z4#tX|J29W?CL40SW$E=pEt{-RKWH@eP3IRt>5?%4qT}d~q`* zsnr&b+fth_C7PBcFYLlwi)U*|ATlwWC@}R}pa(tQk775(k@Q=9g_+)^Cvzz++Po5(pqyFb9A{SCQ{Hz*2EZT81- zxf5${l!w@@D{#+G?_^v*Kc(jc2>$OQbV&ojhrp9dm{b`RO}FA^UHf|obMa^kwAVy? z`Pabf6<_?Js{+Wt12@C}EH?4^g^+)2ozgdS(GFr#5K;-x@w`$l2B4N8BWlDpLnoog z2W_B*9T)#iIqih$#AtGFV%uL-U_H`_j$t%s9r*LnGn- zj~OAojuL=Oz~cKBcO5c=E3wsx7|0qWL-q`vyvy(+Bz#a>1L4tZm-?)Q8K!e3jHCCk zX4mvN7d|k8%d-}pQ(12$Xg}>vmO6ZTTwNtdLvO48rCH>q2jF*J{9()Yxy9XhEj(stSdTTGgx-5^3nAseU@Q zlZ=1`@-P#sPjK&C`IbvS4s&0m#GzDTQx%epA>@R7;uzjoU&1jRS(2~Bgcjd~tQqPp z)8BTKoiVAkgbrsK4hVratgeEQl=NT5v_xGzv(@)q?tt~0Bk5kkDR|)Zsn<*IOn;I> z=}yw>l->0xa9n2(aV(Su1!;UA$t0FUhbOE&IG~Yl75K(|rP=1$^$t2^+#2A=?F{*vcTz?^tTGXJ`pIuJz{GsrQJs}M;p^60BrD~FFU@>#4|eRhOyzE|JLqRoy}ZM z@rZmXI>l@$yjYSYpcR_VEeu?^-amfj#b}1(LB}kblVM5WP|1ZBD0iUv$&FIcFKkxu zsjHOfPTY0)iSjtr61Wah;Qj{ncblVnT-5+U3hGI`d|elg8vn_#lRa`+d#?Jb13Py` zr%=`6G;mMnp{TD_=^?Rtf)w>-RDi#2;`nSt@!dcrPZNXe8WVc6_n)MToPh?%gvUQ{hu(iX z7H38ZPOb8Fj2HUvpxIv#8{*-rYt~EWYk1RDm>a8_n)lpQM1I8BcQ*(eol zib8c@2`0jlUD)bY=x9bNZUIuhHsrUS{XCnL5fBXlE-})F5?knOj{LZ?rATua*93fQ z=^k4U4u8Qv-^pjiqt$LRj3g)ES)9e1B-M9oSW|FcU^)(!3LRbdhhDzs2o`lLN$$rDBa@AUI|Jt`jU)Xvd;B)GHg_vB z_UQE?aFrroZ1=jkpXj;(d#q~SyO*dZ=47!{Vl^?79$VSD7iGoNhOZ4;izR+!i7-A` z%qBogQMXE~Ln5i39W16cew`7em7rU2qiS>fb&tpXgaU^wSbA;^FLFW@gfJ?F)(6+G zC|ke89bA@DnbiO2=EuRX!Ly3w;|+i2LrwmA&N(_`8)}jX(K(%WWf6{y8gvQ3F^pw9 ztg>0F=%b!-d?e~+?lnE}Ad5d33LPBw-#Lh|d*rm}`iKrxOB{2dY&jBOQx^cXwXnO; znAR|srhae~F51Ly*+3w9*cUK+_e6e|FqdLQ$=@QnC6B9!_@}+D%`IQHt!^>hF-y z-E^o{98EfjL(8ZPk*kMTh#-`;`H9bioy5Z09EOJgb@zNO4Jka~+ZvRyF=t&9{Qr(4 z82V^PM}i+HEBG+B+=*}4z@xDORa!69Vnyaq^l$@)AlfmEL(@b>&39D3tYVuQ>1#14 zGRD`X8mZ*qq^vVpVT~CX@bon?B4oskRMwYaY8-aiB>r(vVolc2vkpG1AUgM?*QCH7Ck^qaX*VbAkV80f%NRw*Td z)ho+#2E}(}Nqr5LsaXb^Hnq6;9`a>9IW$uHv8JFC?K`y8oHNbB%#X0=utfZ&>fJW# z3-}tw_7L_V_wNrXd29}6eR%np{KvENSJS!nllA})B}p(3m+ViWtXCN3Ns>AQfF|Uj zM$NrrtPr0_FKF1*B45QX2}borgBM>jR-!7b(>6Dm5b>{?h<^v9Fu8bu-f)lAGCz4N zCFOVUqg5IxI%FkEdqKSS2}VMpIYD&pAA<%*wcAFmiS+6*YbNS6o*fJ%mM6)IJA$zh z-?rc<*5&0fIk&$^s*R>o%H|2gfHv^1O5A?ppH3r2i9^5}$)eD44x>FOhuQiCw&pqc zdMZ&Q*L#H#4byUBlQvEKSd~@`;3n>`9Vc5{p)fmp91P7=e_oe9@0sK7(n7hlR|epW zilb&?$wh^|pvZ!aKKRark62SA>!4BZHDf{~LP10TGc3;vA1SpyU6lC&O#)*3=P!no7lo zaZ~?NkCwUtCz^|3CA$(_V{X!D@UbBeyuT%2=1|zcLskaVNRq|mbAn-DvUU(9%yd2% zcZY_T2{@jI*gCdOG(3<8qrm_t(4wC>Tur7okJE|el0@OQdJ+qAV0a=NYf-yw=p%vC z(I@ii-)T&e1gKtS6hKq1Y_J9f)LB$Ax8ogcnc1dA18n7=om5I29GXsw$5cL+sODp$ z$9Tbu-x^s2eF9B{z?JkFb-@v`l)<0P3QYgCp70uIpic(fW~8e^7!`?o|IL1eF^y+( zoJ&+)Y37f}6+%$?20JQrth4AyzN#goEh|7c_kxyYOz;GV-7tA8piy^)J6eLVE=T1sHz9)hPHIC{+W-V;MP)jeUlf070w#ljqszG^m;}FH8FMO#erU<4(={ z+6qfNZhm#xpp&pTi*EcbkdtkIaiK!zwS`^f4SRAvZfZ0Mj)di1d0NmUR?1Nyd>&V1 ztED$=aRFNMhDmc4D)rt*Xt}+Z0gF6!?5-W^lGHtJ4X&=X3Mcw8|MS0=VWw`qEkus1 z)r}4JCqBQrY0M@KD6e&Qly^8s_+Vai*ua9b?@D3rY#Xtl(E&N;Wy@FbYckRV6biAp z*W$df7plX@-}YzPc!?be-XK1y3&XP3YZ?Lt65aXsSmOl$@QY$9gk3r-3S2e zMu1qC5r-x$sw2(A@N%4!9fiNa@69%Jhk3C!irg|lGSDZiwv)RwdTFJX^{_x&-NJh& z@chdYqo*z@)5X2m*0`GH2#FV}myPEUvH-2cb|^PVO(>+6It2gM0NUh)G9NwHQWjSi zf-ff=Uc0WGP?l|p*E>yquan-A0|@r!T}2+q6(4k$%2@?#M-^C{v4bo3ef=Pej<@h! z*v?c@KV(6~v`QiyCzftqiiO~70r{Uk6GzGHoiVUo&FZFR7^)Tasnc1@&!AUJI5_s1 zW1G&WIG7i>odf!2Ws-)q5(+I1`q-bDy9pVH@N45DTdTcE!m-S zwFdZbG_G*)*7N61Subyzob}#@1NFp)O{Vs9YPr&-;xngZS zj$s~?3QA>BDoy!Bm}Jyf-o8Lj7SIiQ*67XLdVoIT7e_phE*%d!|`p3++SDS^icDdEeOer7Pq9O2t0NDo_Nu|0^10w zRn1_064<$3Yjz8Q&H!#VwkRti)pN3MT~1fbd@x!c&jrF>r(#FTY&+mxp#x7HN1Qo^ z9AM!iSHim&r)JJJnotU=MY z>Zbl#EP~E6bU3E;)iwJSRod^Vb~JOL-u>q$ody?u{mZg-<-{7N`wK@`didjb#ci}K z^^yJ6C{_psDu-|w7gbqD2D-C>g+Ys`)z0PID_8H5xwAzT-QM59s=Y3<1xny`5biUk zPtsH1JQJ1Iw@11oE2~|TB3x9{drqMCwPxHfgS^IqtZ;~0zoN4Uy&=Fkrzt>=7 zq4pHN%`SC4MKe9k-BJd_mO+E>r&c8wLP~cU5v|pQ;|o;R!*Sl`B01>?K>IS&>m?lU7jdi#&0pOk=Ue%9i+;&n;-tBbpI>=Ci)Mr;` zO}6lR>>eI`MLRPXbmo|9iZG!0g6`<*dC%csu=*MzZW3m`soy=Sq85S19B~pPndGAG zH>ddYyaO?W?dbJ1LHp1|FXVWjQ%f=DCtu#9hV6f#<|I50+nl{P0C5u|64y%~hJ=E@s$|18A46G+{in6yQXTenz z5I^p`sk?kL{)uN{D(AxwnobbtWPK5Y7go$V%=_yPJR0bZB}k9!7E`$n0%V)Y1pZdE z3;3`m!ccG$|3~J=av`P+`8A3=Bw3uFa>3^{XNT)qZ;EACHQzQARmy`kz^^ycYhb|N zIZ5l345~}L4kY?0dAF~u>YTlg`g*d;WC=OQhz?rK^d32&c)~lUO-KKb<`GWn2{m~E zS;GLpgzySgLgH4sLfy7nKiXLYfYNJiVI~e4>tYduaf8b9I4vpuQS2pUjs&|9R;`90 z9r|-Zp=lSN?X*`f9-noK*Vogld7JwY=1sr7kV(nPyyBI%udxQ2zs|vH!T`)7CT<&} z+nvNBLlO9M_%hnwjmal-YEDQ>^r??!KwKQtBtpM28-=P&|*)TjRqf04@e%qV=>!mi+) zW<7m!ZA5=k#&$dHM~i#JL|?y>^&+~m362M-dk5jSyd5+cm0OjyDh@xE2I#gQmIGqp zNILHZpZOL4${L+UKd?2}x+^Xc0pNgiK!ojM90SX;?E1|cCaMWUC>ar z{1V#a%{ekvKzwzC2T0b!;jL(S4IaxG}%R*QfyBNJPXg=iL4GNOcM}--^d|1fPiqm zYDO>u6@Z#C90+2$l3AgSp&VhiBi~!g70asK%^|TkDZ2theP6+E@*OtZe)f{r$%%g| z9Z;Ho)P~Wy49Y!|c{8q)MHoW4GWQ~JrhkBhS&%?ntB6t#BAyE_r58a0F+2UaNU^Up zIAX&EF}uc#OW1f6wNkkAZPP{ued^pFHqeLF=V5d?CU78*jtOoj+LG6{w*sOwF)2Bc zhpB8gc(9}D>N^=AAa*BZS`}WtI(REQQ_G00r5o5r zNq?nq-FOs6&=Jhf2#cF5Mkezl6%y5$yaN*@7bZev7P9K^BebV_6a&bF zb)IvJ7QgN=g%ipRv-aFkkbH{+rs%AU_<~PWVYaR-j5xGauu?nHe%*54@yTYkW4*CV zaf4&ZP=Xs+`m6ryc`TL{3&e;%3!Hf4r&@`P;Cmm72>1{eJy%tUve{QpEYX&GFUEL9473h8(yz4xd z)#0n$Jr)(tGfDMUym(*}<4!8ulC$bD-CuQ){JIa~NA?9DmXA@FE|Yzm;~NHgi8O|r z%9Kh3FifMnH(?Sal8VCEY-D;5X3$bed zu@h_*e|ktl2L9^AyVrK1BNtK|H3`h{4HQ%E#`zCa6(6Ip?&#&& z?A8wn$P%1!^c5`da%|h>rA@HoUWwEtg@+#;jiu<{_YH-RVeE7YAsimoVeCG&twIhbm$+k1XW6*hLy(m;;l2Q#u=`bZhB30$L{}{y1Y? zc%PH5BlGI*X2pn?w*cl2SfJvHAWuiN>Ml<(bhwT$Y$gu_fe^RY+Z>fdjs2z+?ibS~ zsF0wdnc5a-QN7t2qtZPf`(-|d^GMoY{6RNkcxLQPLD)96I|5wbve|#hQ(c>lwL`Qm zF<3&)br4_va^!j1(Ax$5;sR|8bx}sY6`bA4YCJUZkZ@0O3wW7FW2#l(tnak^YN~BS z5wE;(Bdce{hEX$LS9KZfzaO+xz>XdO)p6cS*(}t|Kf2`~9w-v0G44sVsZjc`VYH95 z2fLn;II98Y>t^BGtaODU;cHgM2BG40pOqk|38e0E?@)NP#4#AX-Ib4gGTa=$=`$G@ zD)+dnks%@=?emk;#Q-#2*$wUorV*XsW{>042eMj;nr@?cvM0eD_Qt`BD&2CXH(x;v zcX$MCc~>Q3VdFn1%391?wdmY<$1#qIWoAFdl2Hxy%}0#?-)@N;cBMy4K~@$0UQxw6 zA8zACtVo;m3CkkYEPkmPMa%`zSo?)JO933fI17t5nD9e7blo)oAc^|3oHU&C_Xh?< ziKS=4=_5BXxO+=>a1iG2f&+LF?9vCsde-9<7`pgq2OokyI%*y$N20RebRj?&z1?7b*2yIxD2F&TVT}Ep%Hojr5e4tib4kV z9wxN9=^`TZDB-y)@iJT6>?BI8{{7rN3@U_Sve$PpA*IAYK~YmlB9JJX0vzL-<(9yx zq1N<5>RQSg_#UzUuq$2N%xq0SIm9dxdfO)h7P}g?zRmajdU^vZ|t>Gf{F(}uo>)h;!Ra{c?Mbewi104i! zEv%Tl?LRSsRP%G=l>Hnhl-IUqLdwAHU@nC;s*b{jg#-m}*9~(h{xhGBOcRk-cVdU^ z?vS19S<&aSa^cdOcz_FZp#7odZ`&blMnfv+fIeXe+me}0+{exiG?Bv|w^yx@R~GEN z#vW&8w!+L?#I37Jr#_4#*JOL)dD3L==V0$(cYEws9jok66 zMGwHpe z+;<`HenrBdS&$#imZM-!m580MN2BemSOXSJ6WTkIL_xum2ZfF&8Qc`O7w<)diMPiU zVH_QA%vlSZ9aE1Q5uxw({cYIrq= zI%y;@Kihg&Is+;szwLgnp|2DnqeR*O15whX+V_lFc5pz>t97?^vrlKN+of=)72%}q zgyZ59vOIjTh2YxAr1l{pRAF@;A@KjmI;SmRv|zoqZQHhO+qP}nwr$(CZQK2~ZRd=P zTqHZsur8`reV8OzZ2Z`{`MaTYpLLu)mWwz$V0NFOXvP{J0`7~6ue9r2F^{blaE)$f z>~BQke#?{RL|DNAM}!hfU|hK1!>EO0>1EZ!yA+)tI^b&scAG(*R_gIU$f)AU#xH(B zzyYtiZxG81fyz_rarNlSHtGGo5snKcU<_o@vY`rue7IN4F89yVx(F>>sYUh`a>o3g z5=>lXZ+{mEGnK{uBd6BvP|5@%?Uz1CqaK|S2vQ#y4XcsOZ;EX12G~Q}ab=^z_s7_8 zaCGqd%-xSFmY6wNoSS&$plj3S-}Iu(24aGB)m8qjO|imchSxjvXtwL7gV>qFOu zWR~g$9$Sni)+;}Q?t;i{K{eS=q*?l7NEuiKIu->%jlV_ig7!d)ia%O7fGHUllc2uJ zFN)b>Qn7d&=2+=Va~oE%Jgv!>e+Jh!SOr5qn=%Bwo6{@;&_l)Zz+KweW`UC7%>yEV z4l(y4g)fIE`^JF1YNOtQw~C0@W&Kl7BNng&?hI;&MVrq@ZtgZZjFGT~A{gMn+Lt)9 z4F3m^n(cZ6*U&O$@GQUB;j0XCd`#m&uk_xb2845@MR#@y+*Y`L!Zqgfm6xH@+=^A6 zZs908m$$mafuw;HKBdWBkz*W%dj{yskiN6l^`bdt!HAy}c8CzV7T0mivL{h+Qirm1 zS!0&77f)=NBP{P>m^C?mw95oL$JuK3a0r&pXDi#o&?;4xu0*U!Nn@vEuL+>q)PomX zzFHl+*R|rb1|d+68&d{V>rrv*tWEFs<=MIu>TxF<&K(4f4c2c`z=omyP1qj- zqoQd*?Y|uWTR1OE$ImbPW~9sm(>TxO8l9D2^&K#3`=F?OymDip)u;eX9yue`T<#g8 zG0)`XB@r-D7k6nzH5u!>i7_sVJS_Q)9i?<3T3%7z5cNw_EceIdEBfcCUbj9M#BBYt z-SRmt-bI(-KOmx|_ zG$)FYy-~rIK5TJvkOfCt&lI6^iPdv_%J~*&3qS>)VU(#nQ@aS?Ey!1)y#ob<>f2Qx z=&D|UzmF|Z`+xEAwn)@r;jqsqcn$aeqG!_UWX_=$R*g249N;2S(QgQhCzM8WYQ_XCG{N0IInyNQ&ECs1c+VAjvV5s%hv^F5`ng$MiZ% z3}O=xOqVe0$HR%Q339eemL%2!7m3#!`3ua5H_}J{!(IB}aBEojVoeoZzHrY2#@c1h z7$k3HkL@vk?}+8hkl^|RX+EUraMIfpNqg zH~CMG8^NgqZK1HI?@Pd2)Tw~UtWG+$%3)mYwYxEN*ub6|9YD0EptG!im}qPWgCM-PozilEIDJh2!CJV-b}yZW zn5#Fhs?dl=2SCS6U{d6A2>fue4E2A@4DPt{<*&U(l#Lp$#@4I?%|J)>Ia=}1|_>y^Syhq2zN4DiUr_a`AH7m=xJfBWp6LI8sh?y5Q>_iVbN4ggj8AqYZv&RiaC!|z>{Lu)FtsOpA- zZc|Zoe7f}bN;{v>Kl9EFJ3jbEcsqNSuPObHBVPO`f~$uN$pRpCdt z``N-M3&5Yn!|y?m5KX967*qcg|K>0t!BqQ$K@1R>(leLZ%dI{4JZzq;Sk>Q|_9gb>3zc0S(O7DZ4P@g(M1_{aav z1o)Y%Km_=XCGo5nnj44V8v;g|#ipPa zqSokItGJ~!ojv=qj9^V$_^9cS<(f~hzPmrP=w_9}?gA9VjtUwX@OwjWczsqorPS{r zv>^FgJh2@0nLMAHKV2h)ZQ9hPILewfDR07|7_12Z5RN7fiEG+KbS9$w<}+kQ+J0kY znsGGZC2j~H%N1)z)b=>7Fh}vGhxYDkp%PZYYfrM@OoDW#DLVcUJ)vLj8hYljTbJAg z(p<}BqF^%XysSFC>G!=gJDB(soU0y5mT`~(F%vZrE~+cylKmztO3fGMQs>gqT5Ozd zXC8NaG8xqQxam|zta}9RG^e>Eor;1mKH-R^5cE@i~KBKW$&hfTy7wUY{v;%yHcI`5Lb89y+`vw>y;&tpc|HL0%=LGycPZbUl^y@qzuoTE z?t|UiSiwX~+h6m#^G1xMkS~!4PT&DMp7nl}sE=%^!P@(?P|9ighj`7!o1^GtZ2@!zsAfpG z5u7QYY5-3JO0R#6isCYnjl&lms)auFgQt2kI>F(uVBy}}*WG(tVAdQts)2#aUZWlX z3lLmI<5%a<1u?d0oVP+I>nAhiEv-JJOzOw!y{ z<&SgX0shmz3=5luSHBZ@DDA9cwNI_*Kfpcky1HEV=1G)UT|*sDTXpTGul7s zCp|Z)jS(5yJCsctDj*(xt^=(Jte>YJ>@V>7j~90h2*1epZf}+DV0psR>yYA2Q2lo( zZADR~HzYpoj&ikq8KaAiL-A9`TZ|FA{w_bZ8GqeyQIl+U%|FpP(^j zl{1u#n@rTHU#r1yV_7vAHLHbn1+|H=+l*So_-1nt`Hg_V z)w2>QSf)FMp^3=iuYr2-_trPMSQ^n|WOe-84_i0%*Za)$UOexf;9yfAgtvKgDXgO@ z=r*!Ae#lg}aGYNbnBni4gHK(QVxAMLW6~bu!FJc5I~N(fkA~oK+=8Ws_znGnb}-3Vt>9efc?)|0 zlCyn-ZHa9VsY499dfIl+I;u@LME&72niU2$lEaGBOiIdsdwPFT+8pW}Ik1B-*yP5! zj@18om~#tQ`Jdt)^{PQk{rb!@%Qw)&I>A?2Y(>B`=s{(IWgMrAbF0n;*iyRTifZ=M zPj%`npfq?NFwQ2Ww^-qdBoi4Udd(a#9U6T43mn!lJs+P4Ju@BMON2@ z8m0@>ntD;yC;0&4MqQ!k8v-84vR+dmReB3h#MWQFdcS`c9>C>yfv;50tZrTdkm+UJ zeV&*lu`2BR>BtDU6zKqYD`#0JEvrp2_EV^{Kn)x6BIr00^RDuRBcP3$b{X4pWf;=* zB_{C7z5D7a{;#3GAlQtl6+LsgiR=*zrehta?0K z^XB`wWVZE-IU;!k_>@QhzDOVA;$cbCjyV5D%s-}0?^$5`-2S_gMfu|aM_PVa=Bbi} zqCbRslB7YRY||WT4ijRUpK^zTxR?dVT2-7nb&CG&vvz?U$9k8sKmn(}F<{h>o#^l! zU3X}@K*(H=ppKF{`xVJ?dS`)cvQbnB?vhz?;@r%2ak)jHd1%;)O@r9%+Xh9>)k3QfWYuF$=5}3KWeAT_!P*9FiR0feP92BXAlrS zicI7@pM-OzHtzObDa|COYMIa;;KaL|=tu}>ch?%Ci*Y89n8MB$Js(__MIfDf=ATp_ z=;t`YEU=ZR*!Zjn0lr4qap2l@SND15(U9-0h<9vT&iRiW{V!hW8acGPU3T>VIY7q0 zA92HRQ`-poHnJvj@=;Mjr*5TOgyJSM;~xV6OK+e2U-V=qHd2|R!?fsQ4ax+bz=_kI zxJyiyWwxg7NV5G5h`H*e&wuI~fD-K7*wIh~Z-Dl~ef&lyZ0(o5D$u)JcR7p%k`G&$z_| zP%MXwhnK)#>XNZTX>qS=Xl{+}^;cF&0&`z`K9)(()#*w1`QwVpFDfUy8vk=5g zpO!2EJ^cQ5)$_T)g@HvX-Iw|vE0#TYoXi)@%c$3e{FQ z`?Uy=*YqLh%v#bQ)juc{zMp)0!>t-NF}x8QIXu5#)fU?4oeKv{DC&w4TVyK8Y+&ta0`?Y5*q_4lBU=#bk?DINzS@qk1QE%=U z|MNp#hIUH&32r;_0w?gXfkwK}pU=UH3w?3z!SkttJMpZ06fz2Ip=Mj0j-_LGH?f4rplF&r$;$EVh^x`JWTOp>iM2!lWs zons!knIL``d&L_OuBm1=Cp3IFrbfy8tNTz2ZfsJwsv9*QPv zncSoEl=mD}Tm5P!2C7dP*;$hKb<(UJYf6?-MCLrPibv^;DTj=&o+_Q-Wa=8|&~v;p zHeQB{m=CF}%PJ(1@B#peehuO6Fo+JzBmtj2R))zU&j!x7i}W+%-w}iStp5xhjj%6np(~)|S6L^cZK{vv3UvdP> z-!ir*OVRV7LXf2^Ahle96E}mAKw=Qu+I{7t_2y1vVyMGa09%u4zcidyK1x;61dAYA zIPjo?cm`*xmp|DM9p#k;m&HK+iI$WiHmu@Z9s?T_AzhY0a$+e7d^sEt`}MX zOGZLEtw?J>f36G7k;+5fXu7mxX%vfzjh7qZR2psnq?NUA`!t1C%wn>lCKU?nf>as_ zlpXq${@Q0H;@}jxZ-68)iJ_H4h!a0J5GM4}+Kq~=$ITe{KaA$n3(Ce_kEZYFq#1jA zU=)%a{muP-(C3M2ty}{xLOMz-Qd(6LI)3h$8yJ3IBatAKlByV0rM%ZIk_ojvz&MhU z&>g)+Hw_6ft8Jfi7B>F9hZxmnvgmngu>+sZ){Q+qXdLorfP zz-*j^9w@pxz>^1Izet0|G0ivFZqty-nyQOX}c1aP|xALZaxm`K}~t7 z>H^J3!LtSD-)dIf-hZlej~q#HP*6&1>d&Bab|AX z`j%uaRURws)Ne^Xri$yoXQC3dcekB)HcZx9Afu`8CKylj!RQGh<|Ma!=Cp>m*nEKi z{iqC@McQ{#s%~n3XWRw;)8odvfg`XPfc-+kgR|a*bHUv&jHQM;-MH$%7=jC66!4&W zHQ#e2({~Vt%B&(+f1R+s;Q76ycF`k^pG;1Ukk{CZXm79sU@rcvn-;1zPO~Fl_Y-O8 z{#ms_kVVCG{#-32mCkwC*8=Tn2$kGE2}1BE9cxr?9Rs698~XG~ARd$jy)gKvhj7xq zGv$gBqi7wXT32EREjJr0k3}wBmbw99MlhI~Uuf4ojwXvdCtzj4CiNKiOS#hU>Jt?v zOic^X^V1AWIXzTfFR2L!@eEpDOCr^M4Ay|J-#OS8EKKW?k072lqBR&j^H2GMK$bX7 zzPaExeUL;iSg2<(W45v1hkISy)Zxx$Ah7D{-$GARisnl~-LNmslo`#p`P@Xc7F-yu{Z-{xSd> zW6Vp2eXsw`Ab)9w7@N$-B?bkoc5NxRE`7Lw)R5vijeTr2**7&WOB#U{R|&_9>3IZQ z`{y1*w6G*zK35UVYyP2>3;D5#8Nlbudseb&`5cR}WBsh* zq~wErF)^R-ebEs0JxqNNs%q#SS(m7?1*MW#IGXEcn~!Y)DJ)EvW;22xm)PZ7Qd9?; zE99FbL)_flg%`iWwhK7qJTo&6Ym~$6-SX*H0T_=E8Rc$wyctua>16+V*1&vpzS~V=L-bw*T{ei5F;ZL z29&uq-zn1M+?8)M`SaUwpwe!2NDQ&Z$LE@xemJ`MqeulfW`GN75*chRat96*o8*v! z_-e7wFo0B~+jzs^IYh0f|Hub0_eI~;fmFFsCG|y?7x3TchcN#NU0XV(xuhIhs`ez@ z#n}U=eNMgD1O)LL>};I5Y)x-292C!*#kvDO2)#?h?O% z9XXdMk)GfQ>h!g!SWK&Ah)*X(64jk1%e&j^F_?4*p0QWmsam~h*kP(j_KX

kMu}3iu@NvGsKtQIW4AoROs~XQ=a<_OIk9lD$$a7XtJ(Qf6#V z=JNq-iAbUht1rDuIMlF%*V0Qu97NwV_ZKq~dSuWsM6@lBUY-`~s&J)q3SYZds-{_Q z68gLsS{KGXvwIcz+Nqe)*B-TMF9xXQM)O(`OY*aFN^NIuTD4?JY34ENI5YWwJ>wSW;aXX9I-E4)>iWlZvgF6-Rkr(gUTd~}J%+F<0rTjXq3P&U&);wv?rbnAp zFyZ&=-ml9f#gm`)jL6$84KqcdOx<|Cv2;V-nE^7OfC*t}GOQW_yJV1iv-6`@)rwuD z-Ri9zjX!u&Lba<6rEkq5J)02_VBWm=|#e4 z6|re4457Xa|76@0_U(5*A<(j!8$a#0!Pb@nYZbUZE}c1MLr#K`1n<0%aIY1#F$qo^ zVs>{g-Cv{DieVMm#A8_hA)rdc+YzrY60JIb&6Z_FNNB-5vgBEn8aAOCo*A1y;R`y< z8=+<%S1PU!c}6Z8j``BAKtJsuilq7+XiTW6qgEx-5b}aVCKLqKHW$-_i3$gG>~ws9 z;OO@0>Of2=nUppYy+6K!h-#_`b7%ZYCoAc&rrj*7*Z`ox_rPLykG>~{UuG9PA|Qno z$YZ0V9YPCYwp_xEJFiY6*Z=Vc+Fqn2P>HYDX-gg`r^pY8f9jL(aO99qO?2GEpr%2K zdOkACB=`gF@$;NQ^P-IC!bHsl}565GN802tKu}~iQ2@HeB;$F z2e52B$#rGK!edU$1R*ytCGCS=9T@}Aa)!)u6B=VV&dKN3cPyqUQd%^%W?yMSEd)8_h0eQ#$fb*6emoR5ILZ3nKbg>-BzSn;<+*M zhqv#t!m@zS?1{COoW6hvM^bX|4K|VSFRxx@7`jvR~WB`mFVE?tC?q zNUkpNye_&WUBzzie5;|2FeDNFn(_i;Qna4iCv+%7*xK7Mvf>n_hd?-|;qD3bG^=D} zhu%~5(Y-o{-D`<9YE+mRiM!xY!y7*};?S*tZ$F>&1OkkGGBW1Tn2RTLYZgqtAWt0% zM;B|vSlD6biGoit_w&l~Ey4O|Z*;!3B_O5LPOZf~&fjZ;S%3O6oM0?}LW-H2`Xz0~ zWiuZZZp=o+1c1EXIE|!Ul93~C`Hj`~1K?W0eb23c8QJNU*T18vh?H;2$Ng7-REM@5 zKwra9S4;vnspJs30A^B)sEPPMsk@c)GW-_8rgX2Df!N4C6M9rU+f$;5=0IwiF;JPs z(J8b6&WO@Qg=tovQp2Mzj@V*JE&XT8Og@se%iV;_;5*@D^ zv%-nCs!tp@mTlMDgt`){3QU^bS%NRbgJubfuds~Xu~qbQgGUwM#WK+9Zw&&%8QV2y z`$~jC5>{VZY+bY<-h4`D-(FAk;kJZ`5HzOmlO@d64U^g^o|TIxNa=(U7H+hq-HHaW z{5z&@P_{-fgs?)OsU$TQDhU3f`h>9hW~^k9^|J{MoegGHJOsbj*f-KCZozHW#klt4 zI(1nR@Qhd`0o$F$;n@05bht8@N;2u#F8i+{PH;m9@0jYVg~(#~Ikn$!8tTPBW1TQOJuh9otLbl4 z`TDbC*#c+HU85}2jt$ySJ2mt!gvNXH(PEYYbv@~YV^1$b-EJsr*t0t@+|ul?3d-u1 zN`D|4t1Irj9X7kQ6*{Z8Hav(l5{Du=b#p1;wmvH~oy`|`o8R?hQgRO@7Uv@LMy4%u z5rbgauXW153ta+x{RiCql)zr`iI_r0=Ls0@u%Hkb@KpY^m1W4ZwEeH}hm^`i61ML! zk6k1=QJ=JzSE_(Q@1^U+7(=977V{smUn6+;hG0%DVLyzvc8@f{OQ3_n96=^cMaCy- z%Vv*e)goKUf7&VskuvAC$cZ_hzIR@0*z<9L47Vn<+@eSn+?Jy+G)2EITs6>fm}$lp z!TV3)$=!wLP=G2ER%8up@W#pxZD|Bi7)A&U3X+V3bg~2}6~2j8u!Qu8LEFKBxiqAX zsM~otLjjwPu49MfS8qToT$9Q5pOnK^2A+8>)X`pR`w|&~SK|%RjupZ!`P1^p)GHI$ zb9^OQ3$ekMjnNuH9Thw7)(JSOyUCigm3YIl9D@Fv`dh?7XI4UY=>Mi9bTN*v*{ie| zuPYQ9Vmfs3kfloRQ&Zf7*WJIo`m=?Vd~W>MmbzNp^udE~IN+^gpM!dvM?A(s zTv#GBE^RqHaV=J4{0gT{fc>LZOi7-+%ga=<0U1auNy5m~dQ1A0o6b8XPJXErGfbzS zezZYPu3EgVqT&eN-%t^knhV0Eg)`_&GDZc-(?09%nj6%&_0d|{5K*(p0KrHe9ISu% zuSf-GUZTz2BYSaP`WR`Gc84GN2&xlB`VJ5w*Q!tYz1+IZ9szUa{w1qn0~8?%&1J`< z-$f6${mg1Zz7Z9ZgQ}K+W7&KHGE*f;lMiKgMTn7##`t&{uuoSj zD1+BlKW)P)jCD&}5HJ%VsIgU3S;sUWa zM>6lz2j{wtvNkn!ZReCv6tC!hNdKt}ydmS)vrX0$_W-v40WS*YO+0jt(K|fv$KisH zg>!Y$K`5E@45F4NLN!(=sB_K1LTVkncc5G9ru;?UloUg*a5LyQjaelLUP%R+W50z{=q! zANvDt5{7wSW|T+WE|8;|K=SOsX4|NLdfXj;wSogQj+F$HJNa@1^EVL0D~@Wg+8aF< ztJq8HpJLcwI^i*?T+rNDftLI|cb)f#Z@c%)4^5S%!SuNK3iEifqg&%{dZIfwov)om zO926>dBq6@KI@f;wD*U4RM+Sz5V;>v@+owo>%!xZr1*e(i_G6p9A zjJgl$U!JjN`&bpYkLR@)p6d8PC_gqN`c?9FG!0I!ntMhZ^EL!c%(t~T^6QTcW#E`z zJm9n<2%4ci&zn!Rg@Y-eo%277WA7=j^MeU}x_7@v<_f+69h3DZ(Jh!`huf4xSC;VM zV7M4U;oV_lvX^ZfFR4_*c&J}Z5L`J zA?WE-!-lm3DS!}Kxp?O9C`4k@0146Nn0sZb{`n?cA9#&petC31QUDsl+dg%_V_}6} z9B{l~X7f5fOpb!dT7a}PajlPH>=B59k}BliPiss%9T)H3aH!2EG#L`nJSU%$M#~2{ zP;CRH_zwo3b5$T6g_m7)+fWVT9M@&24O%ra~PeJ|j0nZx_muT^)?9y9{ znky2=YMIi6;msxghH}9?m0o{>JMa*e_P&@Q_^C11S;cl6=c21e>8SDKq2a@}hxn)e zY&v*h`*`fp8>~KyZBS7_9>`UIQA7@F^f0WbX{6p~9|K3p@(29{#_&ThI1LYS+ zc*NI+@6sP(GG71mT{zB2*%b`yD%IL2C(sqA9@}DOXj8c~b}T^Mx3b*$%0fF{M0kNa z$vr~Zt<~3S_&rcy$}tM#Er&JNdYz4DiK7tO%N(Yv)EixbfoPCmm**cCQyrS_C2rt|WUzsBg4Zkm6@rcU97>S$CdwJ2{m&{uRiz9ft#DtrV^))0~ zpESibwjJMM!beqjTyWI!V4w*ao`-UHExU(&WB+@~U~#T*tG0 zNX#id-lgdWt@3mENg(vE!J(`eMyq0KQGj=+I=Eo|YcFOy1J?IfK}Nx4sewKs&AO-c_o|>dO8UM1G?P`v8sS&XmAj3V}ygskLMsL=~oTmo{w4S*&E6X@Dk&yL4@@I0k0suN+nQ*f!d1@CzCVEk3Zt7)k zAYTrQs`IuhhuL7a;~6AjighNR_UB?h^Kp=plbM4vyjd-Q8{jW1GvUPc4mqN*Jc8(@ z7$u*rzFCDo+0lKI$E2Hm)=uP)9jQw+kVNchNIEz@uGp5_g*nwqfa+F64L7C;lgS~H zu-r_=qM$xafm$tS{Favn;;=(H!Bu$TV5*cx8 z%jheX&jQgXMK!Exgm5qzBaa%9GqWMb3|B|HvJ^i02}(4w^Ya_N4pt1IaSLZ-rQc%y z88xDQ6vsQw5H`JiYS;e_nu2*r{AC?rAC!LJ4Emg+N;6kSd>oa4nr z4`eVgrdn$h1TmMH8G$}Q&xeM6-_~pgf8i~F6Pz`=d*;`xogs8LV@1{y*LVz>`?&JT zS(X&z!DoG zafdRn3v6I-LcE}dY*Ca>7tB|nj;GmW74p5G&S@?kTl#l*yVD>dut>0dP=Zh}dtg@riX6)$hSHLFM0v91R(`Yu37V&zwnA7U^av9G_)Ece3(&wd&0z1=5uX>o>>8O5ti z0wijdhcl9$ggDx(q~DZapLR(q2Bsd$Pk+_zaWJ+cdz1rK()f+{fIrg1oQmP6Fx6FR zeh4-%sB%itNl6;RtzF!vVn1ga+p$r(ehR?TA#<9fIETlGhHAbB9LX7Nkzk9GQaGE*3XQ&C&XQ?ZPuwS!xcmQ#kA%a+iqvXr>M=cMEYf)S z+bv>D59EjZTc7cXkr+D~v{G8>_{_h!E2&eG$Z4jl#G+2i0p|?H4AJj3$~&cFTqH;= zv2f)o@Vsb}hnK65gmTNIQDX;MAq!zLA;6Jr8CZmru(X38VCI3SYi^2&F|8xCY{?eU zPrkq3DG|)Vm~5%G@+LpCdQqMV)Dd$E>62~^3 ztJo%naP9>7xL%4$=AsG?S43sgOFoIT&d~=NytDG&EVGWUmahH1xB&)viWM}E+>HuL ze76+I)3X%v=0#kGAKV-4{a?L%PC1lPlRPM=;FyMP>ua~E2!mR15GG^A6&M&aT_zWYDRU4vPAnNo&Q7jpm}cOWL<~yxMV9MIlkY22Oqr2 z&4)^dUCU~aRxCX);AiEg`H3!SexDjCdRAbUh$ry)@>1`sO#xb?UlL4_^kKUfm_MCL zogz`LU1<~QrC4ExCWn!#bFineG}mO_`>h&6E8}h8?^KLI&+GkLkEN(+EUe3) zQiS4hP{!XF+TAQ=S1+%k4Q55PbR^3%qStgmVOfx>G?;k|?Z^pW=m~`)Jo7G*UDJcW zT-eundR8+bz>33dm=DH^{%v;5T=ZE)pQ?xr!H13?`t(x25NPGf&1-va(ZiXn7wRZI99gLI3Q$@9|P5w5!5={5uIS%VN0^t@?6`1%{Z=( zc^aQK#YtZ?{Zi0NxMewYC~k{fNu-UI88fB7aUvK^HXi8t{q|207CpAo?Oj(I0Km~WTY17x} z_qf@A!Wi`_2N0}~{izMZ9XN?~F~RdtZ$Wv?>h`#*WDZr%({%#peP*3{aZ@SqydfPl zdPj>(DLCNAZQrJ*o;aSZFrB0|9K&{2d1Dv;){U}FE}d{F%^X=Z$y4`52Ml;UWt`s5j(m+t~;+A?2|VmNB`CMwnP6K86r=(*r-k{X67`VC zfp^taNoX7$W_d{C63BLi+<5;Z>(F5nL_mXLhwEZ@eWvs%i-`j*YNsKBVYKz?{RV>{ zQi7{Ygqs-JjQI?;-}*<42;YJqpV7&&!gFQzWj=|o-lWK00?90YuAvKEn|qArCoMbf zUmhR6>pHWMShaC<0isvlXFn%vjoTW z*5Di>KKwjbkRuNZkZU|v29^lqZ-5vnfF_lLfW z?x7Oz6;A+W#Uaw`1&}GPFQjGE`*yqeim`6t;!jBV z6P);^?>{YSXlk?US!uv7ARK%QPbAt@4#$<~FcQSPue)Dj;9b8#N&n35@f|U!zY=5N z*iQ5@t&hZsW2T@UtkJ^XLa2g}FWNc%$as(}W9*Z#edB(M*07;pE^&rR%6e@U12T$_ ziTsx^iBUz8y{g87V3m$U1i%?w!E%jCntSVknb4-57!D};p0GLD zq*ec~d|BQ?hH^*;yUoZQR-UL0LNo{pU&biQ~xBM{5k>cTi z=})6BZ8M|cjkdiC5d<0Gi{=>ev_3zpY+{bPGsZCr&$tSVg_@cI6nxvJ=-+P*rnt#6 zq3ErA%KxrP(*BYR9lNpD^+1vf_#T#>im2#7mjP|su_w3dKa?)I#=vZSxtGph!gMD? zqn$3jZtlUn)zfZ|xXJtmM&8xwkElDY3kluF&^<`IgX|Wy=Sjf+l*Kl*F2-T#wzmz3 zbvoH%y_eSCs2~ZXZYV2VzSI?-hy}hQ36V?CGu4hQ$3BNI)^~E?9QpM)kCB6}=u1x< z0T!Lcc;qaEoL$eQm^|_H(t`2H;pOuI0gcP~O~3AHUX;;3p5fji1n7x1+GSmm`&R@r z33yU~YqR(OT(+XDc+wHIN4H`i0SA)#rX}%)s%5N=MoF|72Ac#6_RH5)UiS;!_Xq8R zWA}yz3O``*c&u(q&Jl>uXvMFDnK}$ie2h+67WGv^ z7_{Qpdywzh2BDIxvf!2ylm~h;*iblw-i!q{1l^YP*Q$t_u@}!Nx&*AB&naG?yP2Yp zvzaEC%ty#Lmf(+KSTx#l3oM+K5kJfzlip_)w;oPONx|tnFkRvyXfXdBi;g6L%tsB= zRDni;#o{Et3U>LCR1+}4_b=Ce$~&p9awF=BXdPypgQzzaP(iw)S=t41U!cbPV@#0C z#j9lt5<;&kubR;uHVTu;Uzf0QA9AWvUZSLt?vPmU+k-&>LFd7yDz36oFrJK80J^8; z^JZ?Zv6(^=J; zKJmoBt*RhqAj^IQ`C4`WUe6@0N(dKAyk3KxmTxMZqYc#}S=*&yd%xUB&bQbUZ(3jO zqc9bucC{VlL1ew5m+qdO$WH+x&J~E%-F-DawK_lmwJmj&^N5a~ck+Lna495|D!^j$ z1VNv#u^BL_GZP;6L4E<@Mpd--A32JhMV6)Enj9`;81W5c=asY?{p*8BAtANxpMnGk zz8`pgRpMEj|SWmTOg`ag&G%mJi?p|O%7vxx4i_e9LVkyh#09D6%6ge0;4HYKT z2^$-qlA}7ZRVdkdyAE;E{@Te zOJk1YZOYr-YrnwDie709c|c1YuFoS(%7@OJ(vC9ScihIbs}OO7@=K;1{VINc$LIwe z=Bn}|7zG?@Hp39Xv5e>fc?x#hzgdOBx2zAxiM906oRoRZ<>FFzKJHig3-Mg;12UIL z9!(YH*;?UP$2esZL7>mVT6a5;5My5vexAlc4D$}bv~GmxrZ6ExnuHs>wagjRE*QU` zRk&dc;{TlEPGHi{%5&HNIAqnmYC2xf?-NXDv6ZL8)(sw@DGE}dA+gnrN2Ql5-cDgQ zb2YoFB3W}-m@70l`-s>mk!f??k6W;nKP0O?ReQjf>tg=g2POiiU^;+e9)3@2ysP-c zbOZqHkD=xY`Fzr$1m7}73zCS@BEunxZ!db5bbXRUnv z-0#JNduM$l!uWJ^K1av})B@P)nprw@UU3g(@-p`@5;Uj}QdcT{O)c1Nq1*}Vf)BrQ z9_i=z%bQA>HyKPeT@&oq&kvOnW1PWGcIwGWuCHF2j8o{Rx zLz-_u!l4Lx9ulDA-g?vVXFEl5e1xG@^~}z{w-R$f5o6L%?mXykX zn{{GnZ2;&sF0p39CW*@102_`C34rQ>3iTc@QDZOuyyh=)N6ws>?bn`@8F%EktkCLJ zfMl)r$lI<0sv#x-1OaEBqL|oaImLPs|4e~4nCg@PV7o=qXZRF?S@(MrTw^DX2yD|q zPeu^k$zI=UqHiYG_)7GC(KE>Lc7l#E`4k&Yx@RRe-zfRqP||D(mKP}4B^K{n+=rfG z(BfZb#G75J@HsXI6q8rNCBVO3G63wuA6aGCxxHN78BIkx1snP!`cu=qX%M>CM@fMh z!Y3D5xVXqy5FS`MPr^1r=B-)MsWRG>P;CTKQE>7#yp}ct=gi}7=iqN^ z*`B=uv}`M8!^5I7P^5Hi1dlE)+?UxgcBjdy1(zy88#Dj;pCLcM&Cwt*FpqJ@^r@G& zvq3*u=a<{aha)hBY?hsB1~6wSQd4Wp3o35@hF=~-IY|)a#Bqz$J&*QFJ{2xn6!!VP zjZA2ewzq?FqIc)-nK!*MN4hMy_aV=fB}lZx|JTjDij<$u=5-!*)>)Ijwi(Z|F_lSRMhB*F%su`+U9p0 z6LN`QJkdGg{_s|k`6{Ggjfi_fX>>i=+nFx6rLc(e-*@{Y@lqM9f;E1DWl&v#fx}9c z2OJYtQxvC#*HvUQU>aSTAzHgK)|e04$4j+uU^`{m1l#F-&AEtG1Zccsv25HdJw+y` zpqh_J@Edb2Z^Z~^wR(0 z>KwL&VR#_jwr$(CZQHhO+qT}eZQHhO+n9eAGmGyQabEUTYjIXPo{jZ|7u@448uGS{@ z9N~k#8ZRMDN8~w5O{8i-qpw4yBBz8_we&D#or70tyceh<4UKm&6bz}rE;f1mSl6gn zbRL6iZA;daDk;Of=b|^(Iw9<3f?VNCuZgDK+BhkFhFgmOKF2JRJ&x;v&b!1B-nxu& zbDU=PBvqon<3V}f=<0l28AGU3+e-1S`QX9)hW+bL)1te4hSM^?;#jH_qotBsvHIo_BwdFc)#EVG5;#@)BCDt!T$XISa_P1YZ=$rm?8`^f;BD|g`axX%HwNB^m3aG+NhXj3?yk#|%027r_A-yZUZbb&_ZU%D3jo872w#xjbc{8oD+z zU>=-9r)4Az`umO~ge*W=`Px)f;Enqr^S&TQ%34>GVvUp66$)JsM9cAPBd8Y^fOeXm z)c`@aN@ zm*Mpw#X|2|u#-tu`E75@)YOMDCyyKPu|TPooO?VGtRNkULrY6E$H+SAPlYJ$Fo4Ur zL6~FMOu|uDx=9Icx6K1mb7RJ!CGmB;`C~XkqO8DjVnwjbgE#YjBQ5n5&%5oqm4r^y zW1_|}c(@Ecl!)pTIueX22~E-Q=rvn|`V)H);2ajg7<1-|OAKHV;td^OX=-bEzc_2! zMzI_kG^Za}lGxC;TF_a;K&LH9ukxmVLuWgBA3s%S``cxwo_?&?XvpAF)Yfv zog{*KY%f>bN?lQ-^rd|Ifw4y+eDVBR>iA@ts5eMOoug5Qz(gKc=oo^8883x&B7dV7 zEIpahKXPrB;661pq0!R=o*Tjrvgmmxzo*a^ZSOP z=ZR=XqJifL%i&}}kz;G6O9WSliJHE_knwi z`Amt#@@ue}YqL_F)B#CzSWFoxXv-&3h(kd9)XJNyrTTs9LFjk(52?(;^<$DX;QBV4 zMyI09xo*wJA^A+RCq*WX8y}T0v@bH47ZAYQ^j98Uiycb{9pR+^>6=}v?l*`3Ts1uv zG)4kcxVn#D3ABt1;AfpZzRx~PkK;PO55<(rzET%}@{5p2RbEEAmc5XAyIae2Y_$7~ z3D20Zg=~@Tj6cW;r>AXNDHZRsTHOLIn?hK#-yt}6XRGQU0GY1S&K(Z+jrX{-%?kl(nki za=wx9S~tRe3fx$Y4zQK{7!x$t#>OxD^xG+rg<9|M(CxL0JO)yI?o)mq@Y|^?7kH}3 zJ&RBEkxP^kCEtEF{BQ~+x(ZoE_Lc%s7)NC>Wd{qt!viXYv5mC&XM0(#*g+tagj9mW zfmyi_+wPwX_NSL9qf+JX`aGAcY_#VRl1cr(h&(r|B#d}_iCFN0ANe2O0*S^+#vl!- zA1YK{0&@6*4&w^9Hl#0G8|6L)*aj2qe44M z%XXVPWtbHDYe_cZ-*+tB_6!`SwR@dt)Ns^TPsW_~8Ug>fC6kYX(g#gp^nZ&@u)V_R zGiD5#3iXKrb=pXNOb9Hy!jl;Y#Y^lMp-j+a)>ST(tCTsp+uQ?GQMzT!46nt44bKaM z@GnK*NGr}<80msxJzO>QLl;#t$SGfP;Mnij7^{%MQ$1nRuy{jTu5C5pq2MxXJvVih z8TyvXZ@g)Sb?86mw)Hs1Dzr1=*jcj5Dk86|lfiT|W;>;b(q%!<$zHiG6hXI+UhOvZ zM2xVW*b?R^x{u=urSt(P$2qbu8a^{Fxiooy5zVS(g{vYqAC4VRJu47FBLmPP#Bz zu~Mqv-B5@2=W_52l&)s^uW+_=sf?_m#OX9_Dh0k>nRID9_|Fun3UF3q7rL!N)y6-R z_sOzjsBPT z>({hQkDQ-y_n8W6%2@;c7$e+(I@yyh=qbhfpUni?s5Nf&vHIj;ozNpeQ-)^`f%B`V zD|rLRI;ynL^iXU3^qlZysMRn*BwcL1G4FK}uBa zGfTTAo+PW5=Cqz-otiX!2Q$Vc75l(eZoTiCu&gw|Ay z_6&W5(5E{7EQzxZh;*ka#%sQ7HLS@enbR(*Sy>5k=>Wb$Zu32I>kH&=dhyz3(fAm* z$HOaBAmR$H!O)I3%oCb_n$%_pn;SVVm-U3C#(~)xABhQ+n?Ffw3Kws`mK;7|K$(qo)KVxM#xf;nkIk9Q3y>H{w}?X#EAHRT8|c=C@T z^xb?T`4^fzmqOB^rRuv=uCTRfJ2Vg4t`0I$^huW+WOr~P(BDSP&l1*Ls#fI!R81i(8Z)j9 z54h`pK5&SNX!O*bTYID1yK6U{7nRa1@f+{@)BrcfoyGZp0;MJAuVr`f17kJ{i@U$s zA)1b~w80Pv<)LhPBd4G!#e)Fna9lzeHY(A^i|jCepd;Aq zlWMk%JqMT8Y)PvHz^$sP#O1D*nmegNXXq;|LNr(`5p0A{b&`{GGkoG)D?9{0_2v(G z@k7pQ3FxlXg<#g?8edbmGD$m+m9_DYgTO=4WQkkiNhzoZQv0Wvdo_QJ0Bk!B6GUQg zx4hxTFy7ZKwa#R}8k#)-6i}3E&fbFCLem$^?qssLcEfzT^p&J+z->+EtZ`dw`MdN? z@o9dMu?YmeY++}!Fe&Z~1%APgteh8-_n@?Ixs{;eT!9!?z*ujmgCUz9-&}{qe$|2J zG~5Yv#8EYsD61pD9zy^&pSOO8bEMaWN^U0YuMb2w z?0;jULveFiA)uVhoIihB)IBts>hQBsM;G?G-)AqRX~B1_|2L(+i#QU}m4%X(L-Em~ zMy|cA73v-RqYPZc=%8O7AI%?%zp%MEC|%@v&@bi`gRAu$_X>Pr$16D(LI|S==W9NmO$Q6c|CW!j>0W*iGUctszT%L$EE0E?;nn{A z6V`1kd5ZaJR~X7*_lo8uQs+2vjxm7CcM&qtLq2mO^?BMq4O*VCjh8IeyJ8wA~PR6V2 zDYWu*_sB+y;S%m>D_XcibnL86p~nadI7YX?VF7_c@J&+JWHo&pm-DIApd18g%PQ*W z*1tMQgcla4Yg_S3--XwE`biWbOQy&T-vN;>ddj7wCsZ{e0td&m-ZcV)b-$C#*s~5r#7+oZ$_NM(Se@ z0&*fnHTl`i=m1MVw7>fX1$8KC_jKQn`bc}j)xe%e-xLAyEB2|Zr0u+2sK^|uP}SjA8R`un?>jIi zXWj_8`c44wH=bxQVH3YA)qtlGELfqwv!XtC8sZPv9wk0M7A=$zI;>2d8NO0&K&fO@ zMp!$Bn?5u!t$8C*;c%MFseMjd`^i6lu|48?lR}*^qTCQ0J!EqQsk~M&kmqYY65u6h zd{!AEzr^=KZ+hbqqmk1dsNJCWD`lJZNG!N^TGp8NXofMm&KPnWm#aDE>o8v~SwIvJ zk=(f#0u4W*y2IIlN-)z%BOexk5f?rPhDeyc!AdiL_$PFepJMC8GU5(|FIEiFtI`y% z0pHb3*eXUeq!q|1$)n7H5hMR5=CI!L9?vi{Jr`uN5~xmg zLYPe%TU97rh!R4J21c5~_02DoR`9tmZyk3*h+;5!#@6+hQ(Q<0x4BDn4$D;s=#sVl zOI}!yX}iA7?v@&o!ya3YZ~T1!#JhW`#OriZ&`;BE4pZy%FrizSy4<$nrg_iF5Mw?= zgBxolYUJ7w5&TNO8BT&qKssLU$@niR+gaQm1tnF-{-&gm1k?vbgF9@G+@U;LRnYHj}QT(!``9!(SF%IUn+KNhd%H{49Q!~Z{DrNrIyds$HTi-7n zf~1&z#*E{vV(WR_6UBx0*xmjW@Vy$ALSehwKZpZg!r~Hn2HyJ`^ z-R+;u)m4a;TV3PG*`2EyMepTj#m7b@sE}xi zDA*0~@h1DGf7Lwf6k&saFLwAcvZ2O%@k$N}sNQ4&ek8Pt`k-ehkM~Max#>F^O4F2_ zM=zlo!-72I^CE>iHv>*l>(auw=lH%56@t7Hoe_THL@%>!kjvTsxE7g(B>43gJBZ@by+v{ zfD>eZBW2@II1Cz94+!Qt6SfhrtwJ>G@J`@{(EmCReUqDR;`H{rJ3tWPhauQjDkd{} zB}bddaus}pl3>BvEyMze+`l2}YJ{baM&9+_c;Rsexfobs6oN zyv-||-k_TMtfSl?apVlb+qK_xq`Y!mR?ASuQ9b4|MJwe)_OMx6f=hJOv~>qJt`MV8 zCVC)AGW%GHZNj9)(gKBL4n%SnI^7aU1ITsAGpZ%5inr~vX{SV)F@1@;(alQ5T|*mq z-bG>iZ=8>lrB2`6YLHxb=TyUk{(F-yDwCjXmCtWT)Mgw9%Y}VveJaF`8}EK}zh0=u zERS@7^n&MOcpi;T6qrTwU=re2nHl%bB@H(dji;G|dw7v1-0>!dyOZxY>&~BK0i8m^ z-2t=R8%Vu~WtwpN5D8z)MKo(m(9AamZ)8@>{zF~W1fWI;XJNb>(A9Oo9;}mnNO99I z8O;Xe!w_#>8<1`sOp@8SAZ(YBiBmeNXUh&mxilFN(%KVZS<`IyoXfX7wi!5aI}LVu ziLtG+eb)n-on(}OdLa(ppjfq^%5{Tf6su&8JoaAkX-3vgKl*6#8+Jsf!QZ)IndK(E z91-e_Ae2D}jApEL-wsR>II=23^Ay~9+a++Ssd?;HN8`}m=%&%3?i8IU@$)8^=vMFf zPjKY?wFn?BP59?n(UR;Zc3GMW-k0maYx{Jp=^O{Y2%DBvif9@BFdRB`>x z$`2d`>sR`pq;Zdn@eYN5g)cnC9v?A(Ubr#~A+0_UQ76{fLg3`ysS|98E2YsFztX`J z*N^F@+_ND%8Xx!(qX*@zu&dzyhWa-FiV~A zRkc+-5?9*@yCR~oSC3*djU1&3-+;6@`ec}XgSNUtLMq3xw=#+ng(e-DXTbawI?fEy z8Zl1wQM=paYz4-5+nim?=62(GGMiQkuA&p1UJu#I3PHNHC%oRlc3S}!SrfgfBGmx<4q5TE(#n;4HY-du=CtjfJGrhD%CV@BBP|uopA@S zcs3%b?~h@%80{%)R3?TZZgQE!dIRg@+_sftXQrWauK0&(?npKcR_noXjS*z}*|;Mn zaKeye@6wUk%BMsLdz1tvR9MA;!exn+C-Jm0`->@3I=$#F%t&+$c&hhnSAWqXW{G)qLc zs;Yzjt56QpYz3O|CIT_i5#;sbQ(SxFwCT(i9gAKnk>7C zwpYgk+ZFZTH)#vM&GJLbFhtj8mZ(cj9W(QRh%Js4EWaaC^oYoAIx>zGNCN=JNj#+x zeTJ!Pn~)Wi@Bhoba_XLO6if5{6taoE@F7*baOO~y6kuc2Z4WzR%EtV1sPK{+dCd;r z!w+&bnN44M$!WZfXS30k@b~TLAh_IR^ZMZl`^^4ar?PPzG#5xQ?mgTybl~M=&9E_{ z=I5ZCbKOJf0$F7JLoa%OCG;9`{7t`Sg$w|6FWiMO=*6LXsmM&ZxV0QqVJ$$D{ZC-( z>}9Fv*8)jO7AdvFzO@rc{Lv`Nf!z9A5Y=;`R>4g-G&}c)&!)#y+5Nr&M~{?fx4tz} z5_W*4jmAk0P+5FbC>}P|@;w8U;V>TaQM+EIZ<-d);Y}b~1QM-S8!x?0mL@{Qvc_6l zDgAc2h#;aCyoPGNkwufSLL^Q~-LwK~Ko9cq{gNB)nG%E@bj;=1N@%wfu&wj-3OimP zZ<$=uQIbAaIA}s+924>H8-i{gzv>vd&^+>_UU$L!may;Xt^hD{s1qj>G-{f^zwGsL zQd!VGpk_ohH^{wH8id`0f|=0N?Hw@`lyGYuZt-%6gXS!})quPDP*~n=z&kwBz{huT zz@w?-QRDFP+Yd?1b-1cx;v6b|VV&#e9d+%3l4s*}#$;VLT$^vrPz8MA3%f8oi&k7d zIgq$D@gHv|3EsR=T8vxF0BaiqyKD zx<_)2;YQj@kmC&sKz$md+D84AI;~2%3SwjnY`Rcr8mreVnP9(E!69cM>zi_NC&gkb zP&tl+hj|ut<-jaq=xyJ`?r|?pDG2x$kM7R61u&n|Qi~v=ls!On83XJrYGQ5c(QXC7 z^Xg*zBnRv`;X)+9mXixcZ9&3$YM?D!2qq;{wTn@>9LMrO*6%Jkoi@bXz|A{>f~pEd zSSL)~86v*fyJwxoE4)a-p+9hiFqW#oifb-keb&^sfb6t&Qx;?2={wG?YHtjb=+p~w932))u-nM`!b z5l=c)J(noS>b022wDNU)-f|7&jbxkd#Kue4CJgU`*tGM+Tj>OSr!ZblbAT^!fT(T{ z!Grfq^m`nw!Z?$S7+ni;|1a9SmT!dhGXB|ma_j*&l@A7nDdkv@NWjPUvnSbr5;1pk z`8(=Tu?a~!r@0MFB*1!QQVmzGY(@|QmM zgYomx>j!#$;r!k*+ND(xgD6j=#*Hj@TT*oYECLwpJy8M*C}c zD*FC{Ha%(U4!R0Day5<`BVTx*Ah>PoXoZQ1!o1;)*XaJfCZ339Y4c1~Q?wokNy4R0 zX}8II0PIW&<<&;vCc-WoU9yi}ajcRWdih#wG=5FPR7Gls8w-NX3DC8T|J>TWbTG+X z2Pi~><9blZj^+GlTj5~?LO;`gZK;7~3u@705qn)?cFJ#zflbqXXHe#-;t0UOMeBeE zOM6jn!;H9xJZ}5!?ewHe32dD(uE00q5mKjWMq{)YC)#&3Ra~<%q!~8hGUJR9;7*d> zCLz~SK|(kiD-KUcCXTy#o6W_I^r)EH+`!ckt9^Nu)P`taa0u z7|1&aOPx;q7*af}0)9-t)D1|A6OcG^5n;)M|KoCR} zrpEm`76!KlUTvn4E8?-0dNErxp(`jX!;AB@t2TyJeB8A4Xl)(;=x#8+GGwrSnB1|U zjlo*qPDc7XGn1C$`bh2n%C_+o9cqCC-w3TL>&=NZVOc)6e8#-g0$y=T>89S89M359 zpPrXMr%TQt`P0m?S|sD&3Q+eVxNw@SgA`_WN0cU4y$mEEOim$lHbDzT? z70LazEm;TMj~cL5vCdR-z)JoQaQ}RMxr$dw!z&v5Wo=T-`iKM$%kVl%KV6s8ZmFb^ zhDiqt26M!{5_^1CY-NN|Mpu2u(9Nom`ZW7V8IDnZG%)VnpY;VYgzr$!i zeHGveZ+g_CDn`TOA-`}G?6q(p@G{aEV8%O*F_x?2hzKGpZ&x3}!ietbZo%Ce3abEk zf=CD|ibw06#Bm=G!F&T<|KzuszOR*f^8{Kz6?Y_tI%K-F0EF&blXg$&@OfGkLqn`$ z5q<LW0~x8T4)=@``{%))Y9;CE+$D!6{;ypS|d1wMc^zxh=B0I-?DW*K{C_CBQD0)-M9aC z9^DgNRsl8RqGT`80Yko|>R-Wgk9&Np4sjos1Ue!XfNS6k`{lC7Y%g#Fd_U1)qIpdG zgi9*9boyaJlrtg_krG%|KJGq_^iHKSo}y}>8=KGkhldNVr$qI&Z zz?1+CVj5)qrg-)hPhRVE)+R|;jKQGY&sneWWX1KJZRKR4CU~~`U;s@wy=or*Qpxmp z>?&%(VRoaeVj89V;#AbC<}wJcA%&UrGonfmSRZ(Bx>wsv5=|5KB($ewwv1@_K+bht z=gmvcdj`vrz$kINqtt~SKaJ2QdK)FBZqkL7qd@_al&ODmPK(KuU{0Jj$|0qTj9JN9 zI~#;x(CEW8~t$ajOa#&i8OGi^4VhR*NIDku*<0@X`i|?;}HL~*Q^YR1A%v&ba|eE zS>)4%0#d(MX4jH1ZhIHJU3@0nxbyeFIR zO20dcj?OXXGBfM4_z)sjw*+v)3X5IaF1u0hlfQN$Qu<_9s6H#vYA0N&VcC=VM31_H zD(on5Cql#B59Fh2#>ZyQjO)SvMT-;@ZFPHCXKI9?!dw3nIvt!fWwi`L2GX0gghBO1 zqquzc=YV?<(m-oD0zc3nV$WG$A1oozUz#C6{YO!v&rmO$1zEB?%L(`qckSg}O+5i< z9Fs!^=EV!RWuvJ~(ZlDP0wkC}?oJ?-EUteaEV0VL?l=nNbd1CgcQCCVtJZ`d1Tl}TP5m;_)0DQ3v{hL{H?U7lS(G{>&gZPPpk z9TdKHPd?xo(MEG3^gHD(F>qGjWGzZY(`izSOzG*;$bj52)zfE_Lk^(CrSUb!pPJN7 zs4G_rM(Qg-5tHQy7im5FNN?)&H0xjrq5_0VP;!h!FB~QRePdE9y3saA(z{)rbPo0dR0j{&j zxzIiX-88O$^^+vot=bQ#EQx@_mEPPO!i?u1V`c(7y@S}Z8r+K1`x^gj@n)updCwjM9_xfe?K=A6x0xfBdJ;?*A@`0nM??j)+4G}+J zTRrCGJ8vEjOZ@0B3Y4QL#mqvJ9sbYrrZJ!g)J2^k-Po5$uBERCCK*$1UQl{51dklZ;iKjl*M(`X_9Fp9MRo8SQOb?LG6ZD4Yhcd*VT>2YyoXFb zFK$aVBuVEpesy~_6(aFia1xo`2u>wK;@!)g0zaeXcJ(P`rm5hwF|i5bxoeK2H$3-8 z4Y!>48NHP^n{oe6&t_R}%c8~69oH|XL_7UR3%ZCn_J)OL*4{ckun%{BtCrQ?k6@6lEi&oJoOwa0R<9eG=u zsb;S%EF0|_pj4K7`6U*AcXTh-NLW*QI5N4DZ@Hp>ggQ^?bQmT354}4k%=BEkpz_D> zAKz_N@`7n8#e}}xO(JQ&&+LY!H7VS~+4GNwe&80Ul`4L36qyo9lWlv^`_IKKefg2( zrhe&+=*K@F0azHk_sw4mr*A+A*OjSY2~~HIv~ldVomS1dZ5^_| ztPx(7SS*PY3 zC!o?t_?J8!Qi{e+z*6R^sCYIaLdn<7!`84B8KI08-9%c7-63@LY37gi-W7AJ#HJ}_ zD5tGSyy7%X1{I`RCHileBn-w;nj2z4hpg265L$58;yFO)U*$MqD2JA?ie{b6$A;b3 z?!4|N>wwW7tMEGf$fKRbVN)`ah&Jg8A&kiF5tBUTS3^n{|0KZfgDL zY|fI&a-wV_A&EUMvvCI|Ug;hkW<`u-hd2*Z48hf?NWXKixXxt-yrN`bx|d)I*zhAv zw=`?W-P*2F=0x41DsOZU?6x`~tv#1S?WuARSk6MljDIGq?o-c>ytfDNCC-m)VX7x3 zidBA`_V~4$?j)+NW`W!r;8%h&z6AgZ|Jx>+T5o{LB9UQ?pP5{h7k@D1(gUPk79ww~ z{^XvragSt@pwe1*HCrKQvQ*Tl_^&D!T}f&kCJ-8AP5xS18B<6}G*EfBA%$%bm>_YPWvUNRZ z$+{{wYiWWdIAcne4*}gi^Y=R4JrBWQWjj-}j&CKD3HB8CU#D-;?T{4`Zo-CNh=RX2 z6A`^nRNkF<{Ro?HWNny?SNM|M;~a{}yWZyt(2!UD;r_!exMlV}B+b+lo1!;&L1oZZ z1Gx53AQACm)0ZrduWY!%r{OyV?W-2Y+o{{IzowAZOE!J`)^Sor51dsE9D{%;w12{ba~g=T{`E?;qTsaftseDE@M@$-%q zCW~zBfnxhvzvPVxuG*ZAy6IpmOiCU>`s^NV8?pqd%Z!vc>x@=m8~gVA8gxn?ijI5X z7^UzHkS%QLEb=R7?;l*I)}3(rw|a1TG4WJpYazb@K^a-IR>Qx7OVm2-c~zohg_{Jb zvTDTflAv-SQKM`xDTknrS~3%VY(riCNqH3hCjyqXJUQEH^gesw>(*z<&s^u!7e{Yq z%-zNx+$CZ@8L{?HqN;TDCi02`?e$T{GW)6TQvr&sO8Cr=hD>PP0rQp#>7qL*NEG2T z)@lF!u}a$iFaQz3nwY}Ja=Q7dcs+54rx;9m;iK-82;}Yf&H+^H0hr(w9A6DNAO8Pi zZ=L?9-Ae5M8_sEYF1T)y@)Wi7w{armK*>IzUZ6AX9fQvlpQACkX2k;MA!_!aMPXI- zvX@bA4M}`jHh#^t!KTs#e!Clxt9VSF!ba2oq;X`wtPz5t zvAuMxxULR6(fh~yBLBG)>0%k%0D6$8+<3cbXe}hhg>6>18!_7`_C6RUiWzr`C#eU{ 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

n6q+BBW$-P*u^5MlpLKMTf!= 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

9hvDoj7@(!~pVln(2NC%(Q`A@^$HrPJ%eU&H63b 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 z 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
D*rrU`P1d7aDXY!&NO`v;q2ZTj?;a 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

D?sTvOR~{cL7Gcee70gvi4OKceZ7 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

st-f}dZBsOdT(o2WiIisA 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 OqcDOpGKOo71pfzx^Vrw` literal 0 HcmV?d00001 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..db951567 --- 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_SCHEDULER_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_SCHEDULER_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_SCHEDULER_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/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 From f6a8428186d48f1d534de846ff2a18b03c3bbe6c Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Fri, 28 Nov 2025 17:40:45 -0800 Subject: [PATCH 05/19] add linting for sh and cmake files. --- .cmake-format | 7 + .editorconfig | 17 + .github/workflows/format-check.yml | 15 + .shellcheckrc | 15 + cmake/modules/datacrumbs-utils.cmake | 1142 ++++++++++------- etc/datacrumbs/data/compact.sh | 6 +- infrastructure/docker/Dockerfile | 1 + infrastructure/docker/build-multiarch.sh | 269 ++-- scripts/datacrumbs/datacrumbs_args.in | 1028 ++++++++------- scripts/datacrumbs/datacrumbs_compose.in | 162 +-- scripts/datacrumbs/datacrumbs_compose_run.in | 86 +- .../datacrumbs/datacrumbs_compose_wrapper.in | 6 +- .../datacrumbs/datacrumbs_create_log_dir.in | 12 +- scripts/datacrumbs/datacrumbs_logging.in | 84 +- scripts/datacrumbs/datacrumbs_run.in | 40 +- .../datacrumbs/datacrumbs_run_validator.in | 2 +- scripts/datacrumbs/datacrumbs_salloc.in | 1 - .../datacrumbs/datacrumbs_server_run.sh.in | 25 +- .../datacrumbs/datacrumbs_server_stop.sh.in | 27 +- .../datacrumbs_service_common.sh.in | 118 +- .../datacrumbs/datacrumbs_service_run.sh.in | 10 +- .../datacrumbs/datacrumbs_service_stop.sh.in | 5 +- scripts/datacrumbs/datacrumbs_setup.in | 85 +- scripts/datacrumbs/datacrumbs_stop.in | 11 +- scripts/datacrumbs/datacrumbs_track.in | 57 +- scripts/datacrumbs/datacrumbs_untrack.in | 58 +- scripts/datacrumbs/datacrumbs_utility.in | 369 +++--- scripts/datacrumbs/datacrumbs_wrap.in | 6 +- scripts/docker-build.sh | 228 ++-- scripts/formatting/autoformat.sh | 60 +- scripts/formatting/check-formatting.sh | 76 +- src/datacrumbs/composable/CMakeLists.txt.in | 131 +- tests/CMakeLists.txt | 2 +- tests/benchmarks/ior/CMakeLists.txt | 89 +- tests/unittests/CMakeLists.txt | 2 +- tests/unittests/io_tests/CMakeLists.txt | 26 +- tests/unittests/io_tests/scripts/ior.sh | 7 +- .../io_tests/scripts/ior_hdf5_fpp.sh | 6 +- tests/unittests/io_tests/scripts/ior_mpiio.sh | 6 +- .../unittests/io_tests/scripts/test_posix.sh | 9 +- .../io_tests/scripts/test_posix_overhead.sh | 24 +- .../io_tests/scripts/test_posix_read.sh | 7 +- .../unittests/io_tests/scripts/test_stdio.sh | 7 +- tools/CMakeLists.txt | 2 +- tools/analyze_trace.sh | 152 +-- tools/separator.sh | 24 +- 46 files changed, 2425 insertions(+), 2097 deletions(-) create mode 100644 .cmake-format create mode 100644 .editorconfig create mode 100644 .shellcheckrc 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/.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/.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/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 1c86f0fb..2091fdc4 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -1,527 +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() - - 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() - - 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(${yaml-cpp_FOUND}) - get_filename_component(YAML_CPP_INCLUDE_DIR "${YAML_CPP_INCLUDE_DIR}" ABSOLUTE) - include_directories(${YAML_CPP_INCLUDE_DIR}) - - 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() - - 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() - 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() - 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() - - 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}) + # ------------------------------------------------------------------------------ + # 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() + + 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(${yaml-cpp_FOUND}) + get_filename_component(YAML_CPP_INCLUDE_DIR "${YAML_CPP_INCLUDE_DIR}" ABSOLUTE) + include_directories(${YAML_CPP_INCLUDE_DIR}) + + 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() + + 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}] mpi 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 + ) + + # 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() - 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(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") + 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) - 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 + 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}" ) - - # 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_SCHEDULER_TYPE STREQUAL "NONE") - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") - endif() - endif() - - if (DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - endif() - endif() - - if (DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") - endif() - endif() - - if (DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") - endif() - endif() - - + 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_SCHEDULER_TYPE STREQUAL "NONE" + ) + message( + FATAL_ERROR + "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") + endif() + endif() + + if(DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + endif() + endif() + + if(DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") + endif() + endif() + + if(DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") + endif() + endif() 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") - 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(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") + 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) endmacro(load_build_variables) 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/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 dd1bb2c5..7e7cd574 100755 --- a/infrastructure/docker/build-multiarch.sh +++ b/infrastructure/docker/build-multiarch.sh @@ -19,78 +19,78 @@ 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 " --run Run the container after loading (implies --load)" - 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 --run --platform linux/amd64 # Build, load and run container" - 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 - ;; - --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 + 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 "======================================" @@ -105,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 @@ -131,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+=" ." @@ -166,57 +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." - - 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 + 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/scripts/datacrumbs/datacrumbs_args.in b/scripts/datacrumbs/datacrumbs_args.in index adf6c221..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,388 +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 - # 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 + 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 - # 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; (( 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: @@ -578,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 ae272db7..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" == "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 3a934836..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 @@ -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:-}" @@ -41,68 +40,63 @@ export DATACRUMBS_JOB_NODES=${DATACRUMBS_COMPOSE_RUN_NODES:-1} export DATACRUMBS_JOB_PPN=${DATACRUMBS_COMPOSE_RUN_PPN:-1} if [[ -z "$DATACRUMBS_COMPOSABLE_NAME" || "$DATACRUMBS_COMPOSABLE_NAME" == "NONE" ]]; then - echo "Error: COMPOSITE_NAME argument is required." - show_help - exit 1 + 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 + 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" -# Build args to pass to server scripts -server_args=() -if [[ -n "${DATACRUMBS_COMPOSABLE_NAME}" && "${DATACRUMBS_COMPOSABLE_NAME}" != "NONE" ]]; then - server_args+=("--composite-name" "${DATACRUMBS_COMPOSABLE_NAME}") -fi -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") +if [[ -z "$DRY_RUN" ]]; then + datacrumbs_init "$DATACRUMBS_USER" "$DATACRUMBS_TRACE_DIR" 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 +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 "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[*]}" -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" -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 +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" +else + 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 0046d6ac..6940b393 100755 --- a/scripts/datacrumbs/datacrumbs_compose_wrapper.in +++ b/scripts/datacrumbs/datacrumbs_compose_wrapper.in @@ -13,8 +13,8 @@ DATACRUMBS_COMPOSABLE_NAME=$1 shift if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSABLE_NAME}"; then - error "Invalid composable name: ${DATACRUMBS_COMPOSABLE_NAME}" - exit 1 + error "Invalid composable name: ${DATACRUMBS_COMPOSABLE_NAME}" + exit 1 fi -${DATACRUMBS_CLIENT_BIN}/datacrumbs_${DATACRUMBS_COMPOSABLE_NAME} $@ \ No newline at end of file +${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 9bdd1db1..03a91693 100755 --- a/scripts/datacrumbs/datacrumbs_create_log_dir.in +++ b/scripts/datacrumbs/datacrumbs_create_log_dir.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 @@ -27,9 +27,9 @@ 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") @@ -39,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 87bcaf8a..caddcedc 100755 --- a/scripts/datacrumbs/datacrumbs_logging.in +++ b/scripts/datacrumbs/datacrumbs_logging.in @@ -3,67 +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_SCHEDULER_TYPE@" ]]; then - logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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 + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=7 ${FLUX_JOB_ID} "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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 + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=7 ${FLUX_JOB_ID} "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=1 ${FLUX_JOB_ID} "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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 + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=1 ${FLUX_JOB_ID} "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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 + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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 5182aa36..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") @@ -50,18 +50,18 @@ 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}") + 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") + server_args+=("--verbose") fi if [[ "${QUIET:-0}" == "1" ]]; then - server_args+=("--quiet") + server_args+=("--quiet") fi if [[ "${DRY_RUN:-0}" == "1" ]]; then - server_args+=("--dry-run") + server_args+=("--dry-run") fi SERVER_RUN_BIN=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs_server_run.sh @@ -70,8 +70,8 @@ SERVER_STOP_BIN=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs_server 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 + echo "Error: Failed to start DataCrumbs server" + exit 1 fi log "Running App: ${APP_CMD[*]}" job_launch "${APP_CMD[@]}" @@ -80,6 +80,6 @@ log "Finished App" 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 + 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 d4b8c106..e3c8917b 100755 --- a/scripts/datacrumbs/datacrumbs_run_validator.in +++ b/scripts/datacrumbs/datacrumbs_run_validator.in @@ -31,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 index 83bff2d4..bf8533e4 100755 --- a/scripts/datacrumbs/datacrumbs_salloc.in +++ b/scripts/datacrumbs/datacrumbs_salloc.in @@ -1,6 +1,5 @@ #!/bin/bash - function usage() { echo "Usage: $0 [SLURM_OPTIONS] [--datacrumbs-composite NAME]" echo "" diff --git a/scripts/datacrumbs/datacrumbs_server_run.sh.in b/scripts/datacrumbs/datacrumbs_server_run.sh.in index 8c589e11..6960ff72 100755 --- a/scripts/datacrumbs/datacrumbs_server_run.sh.in +++ b/scripts/datacrumbs/datacrumbs_server_run.sh.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 @@ -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,15 +37,14 @@ PROG_NAME=$(basename "$0") source $SCRIPT_DIR/datacrumbs_setup if [[ "$DATACRUMBS_COMPOSITE_NAME" != "" ]] && [[ "$DATACRUMBS_COMPOSITE_NAME" != "NONE" ]]; then - if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSITE_NAME}"; then - error "Invalid composable name: ${DATACRUMBS_COMPOSITE_NAME}" - 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 - + 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}" @@ -55,9 +54,9 @@ log "Running as USER = $DATACRUMBS_USER and storing traces in $DATACRUMBS_TRACE_ 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 4fc81d82..296c4590 100755 --- a/scripts/datacrumbs/datacrumbs_server_stop.sh.in +++ b/scripts/datacrumbs/datacrumbs_server_stop.sh.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 @@ -23,34 +23,31 @@ 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 - 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}" @@ -60,9 +57,9 @@ echo "Running cmd: ${APP_CMD[*]} as USER = $DATACRUMBS_USER and storing traces i 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 9de2d14d..883a78ad 100755 --- a/scripts/datacrumbs/datacrumbs_service_common.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_common.sh.in @@ -5,30 +5,30 @@ set -e pipefail source @DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_setup 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}" + 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}" } 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." + 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 - 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 + enabled_value="yes" fi - log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" - echo "${enabled_value}" + fi + log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" + echo "${enabled_value}" } function get_slurm_comment() { @@ -50,36 +50,36 @@ function get_slurm_datacrumbs_enabled() { } function get_datacrumbs_enabled() { - local enabled="no" - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then - enabled=$(get_flux_datacrumbs_enabled) - elif [[ "@DATACRUMBS_SCHEDULER_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}" + local enabled="no" + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + enabled=$(get_flux_datacrumbs_enabled) + elif [[ "@DATACRUMBS_SCHEDULER_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}" + 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 [[ + if [[ ${slurm_composite} == "" || ${slurm_composite} == "NONE" || ${slurm_composite} == "null" || @@ -105,36 +105,36 @@ function get_general_datacrumbs_composite_name() { } function get_datacrumbs_composite_name() { - local name=$(get_default_datacrumbs_composite_name) - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then - name=$(get_flux_datacrumbs_composite_name) - elif [[ "@DATACRUMBS_SCHEDULER_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 + local name=$(get_default_datacrumbs_composite_name) + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + name=$(get_flux_datacrumbs_composite_name) + elif [[ "@DATACRUMBS_SCHEDULER_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 - log_system "get_datacrumbs_composite_name returned name:${name}" - echo "${name}" + fi + log_system "get_datacrumbs_composite_name returned name:${name}" + echo "${name}" } DATACRUMBS_ENABLED=$(get_datacrumbs_enabled) if [[ "${DATACRUMBS_ENABLED}" != "yes" ]]; then - log_system "User hasn't requested datacrumbs feature, exiting." - return 1 + 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 + return 1 fi if [[ "${DATACRUMBS_COMPOSABLE_NAME}" == "$(get_default_datacrumbs_composite_name)" ]]; then - log_user "Running system datacrumbs" + log_user "Running system datacrumbs" else - log_user "Running a composite datacrumbs with name: ${DATACRUMBS_COMPOSABLE_NAME}" + log_user "Running a composite datacrumbs with name: ${DATACRUMBS_COMPOSABLE_NAME}" fi readonly DATACRUMBS_COMPOSABLE_NAME 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 f604ddb4..43174611 100755 --- a/scripts/datacrumbs/datacrumbs_service_stop.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_stop.sh.in @@ -4,8 +4,7 @@ set -e pipefail source @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_service_common.sh if [[ $? -eq 0 ]]; then - sudo systemctl stop datacrumbs@${DATACRUMBS_SERVER_RUN_ID}.service - sudo rm ${DATACRUMBS_SERVER_ENV_FILE} + 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 03a290aa..a9381dd4 100755 --- a/scripts/datacrumbs/datacrumbs_setup.in +++ b/scripts/datacrumbs/datacrumbs_setup.in @@ -3,69 +3,68 @@ 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) + 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 + 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 if [[ "${DATACRUMBS_ENV_LOADED:-0}" == "0" ]]; then - 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" + 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 + mkdir -p "${DATACRUMBS_SERVER_RUN_DIR}" 2>/dev/null - export DATACRUMBS_ENV_LOADED=1 - readonly DATACRUMBS_ENV_LOADED + 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 + 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) @@ -79,4 +78,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 96f1db27..d31ee639 100755 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ b/scripts/datacrumbs/datacrumbs_utility.in @@ -6,50 +6,50 @@ 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() { @@ -73,51 +73,50 @@ function datacrumbs_start_server() { 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 + 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" + 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 - 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[@]}") + 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 + 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}" @@ -143,152 +142,152 @@ function datacrumbs_stop_server() { } function datacrumbs_print_status() { - 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 + 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 + 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") + 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" + 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}" == "1" ]]; then - log "[DRY RUN] Would launch server: ${cmd[*]}" - return 0 - fi - log "Launching server command: ${cmd[*]}" - "${cmd[@]}" + 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_SCHEDULER_TYPE@" ]]; then - if [[ -n "$FLUX_JOB_USERID" ]]; then - user=$(id -nu $FLUX_JOB_USERID) - fi - elif [[ "SLURM" == "@DATACRUMBS_SCHEDULER_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}" + local user=$(whoami) + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + if [[ -n "$FLUX_JOB_USERID" ]]; then + user=$(id -nu $FLUX_JOB_USERID) + fi + elif [[ "SLURM" == "@DATACRUMBS_SCHEDULER_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}" + 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 + 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} + 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" + 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/composable/CMakeLists.txt.in b/src/datacrumbs/composable/CMakeLists.txt.in index 8c3291b3..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,30 +61,42 @@ 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() # ------------------------------------------------------------------------------ @@ -110,12 +135,30 @@ 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 + " - 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}") @@ -126,7 +169,8 @@ message(STATUS " - DEPENDENCY_LIB for linking :${DEPENDENCY_LIB}") 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") @@ -134,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}) @@ -147,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) @@ -163,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/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." From e8211c2405c16c4a05ac754902e90058ced46b0f Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Thu, 12 Mar 2026 17:50:53 +0000 Subject: [PATCH 06/19] Fixed PR Changes - Formatting on probe_validator.cpp - Change DATACRUMBS_SCHEDULER_TYPE -> DATACRUMBS_LAUNCHER_TYPE - Make DATACRUMBS_IS_ROOT and DATACRUMBS_USER readonly --- CMakeLists.txt | 6 ++-- cmake/modules/datacrumbs-utils.cmake | 28 +++++++++---------- docs/build.rst | 6 ++-- etc/datacrumbs/configs/project.env.local.in | 2 +- scripts/datacrumbs/datacrumbs_logging.in | 16 +++++------ .../datacrumbs_service_common.sh.in | 8 +++--- scripts/datacrumbs/datacrumbs_setup.in | 3 ++ scripts/datacrumbs/datacrumbs_utility.in | 4 +-- src/datacrumbs/validator/probe_validator.cpp | 2 +- 9 files changed, 39 insertions(+), 36 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 655f1283..9e1e5983 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,8 +86,8 @@ set(DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS "1000" CACHE STRING "Threshold in set(DATACRUMBS_TIME_INTERVAL_NS "1000000" CACHE STRING "Profiling time interval in nanosecond") # Scheduling Options -set(DATACRUMBS_SCHEDULER_TYPE "FLUX" CACHE STRING "Scheduler type for datacrumbs (FLUX, SLURM, OPENMPI, or NONE)") -set_property(CACHE DATACRUMBS_SCHEDULER_TYPE PROPERTY STRINGS FLUX SLURM OPENMPI NONE) +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") @@ -149,7 +149,7 @@ 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_SCHEDULER_TYPE: ${DATACRUMBS_SCHEDULER_TYPE}") +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}") diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 2091fdc4..3f0eb4ee 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -349,50 +349,50 @@ macro(derive_configurations) OR DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE" OR DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE" ) - AND DATACRUMBS_SCHEDULER_TYPE 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_SCHEDULER_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" + "[${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_SCHEDULER_TYPE STREQUAL "SLURM") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") endif() endif() if(DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") endif() endif() if(DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") endif() endif() if(DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + if(DATACRUMBS_LAUNCHER_TYPE STREQUAL "SLURM") set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "OPENMPI") set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + elseif(DATACRUMBS_LAUNCHER_TYPE STREQUAL "FLUX") set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") endif() endif() diff --git a/docs/build.rst b/docs/build.rst index db951567..13bab59a 100755 --- a/docs/build.rst +++ b/docs/build.rst @@ -433,7 +433,7 @@ The following table lists all available CMake configuration options: * - **Scheduler Integration** - - - * - ``DATACRUMBS_SCHEDULER_TYPE`` + * - ``DATACRUMBS_LAUNCHER_TYPE`` - ``FLUX`` - Job scheduler type for multi-node support. Values: ``FLUX``, ``SLURM``, ``OPENMPI``, ``NONE`` * - ``DATACRUMBS_SCHEDULER_JOBID_ENV_VAR`` @@ -503,7 +503,7 @@ Configuration Examples cmake -DCMAKE_INSTALL_PREFIX=$PREFIX \ -DDATACRUMBS_HOST=tuolumne \ -DDATACRUMBS_USER=$USER \ - -DDATACRUMBS_SCHEDULER_TYPE=FLUX \ + -DDATACRUMBS_LAUNCHER_TYPE=FLUX \ -DDATACRUMBS_CONFIGURED_TRACE_DIR=/lustre/traces \ -DDATACRUMBS_CONFIGURED_LOG_DIR=/lustre/logs \ -DBPFTOOL_EXECUTABLE=$PREFIX/sbin/bpftool \ @@ -725,7 +725,7 @@ Configure CMake arguments: -DBPFTOOL_EXECUTABLE=$PREFIX/sbin/bpftool -DDATACRUMBS_HOST=tuolumne -DDATACRUMBS_USER=$USER - -DDATACRUMBS_SCHEDULER_TYPE=FLUX + -DDATACRUMBS_LAUNCHER_TYPE=FLUX -DDATACRUMBS_CONFIGURED_TRACE_DIR=/p/lustre1/$USER/traces -DDATACRUMBS_CONFIGURED_LOG_DIR=/p/lustre1/$USER/logs ) diff --git a/etc/datacrumbs/configs/project.env.local.in b/etc/datacrumbs/configs/project.env.local.in index b68d6a0f..e727eaab 100644 --- a/etc/datacrumbs/configs/project.env.local.in +++ b/etc/datacrumbs/configs/project.env.local.in @@ -49,7 +49,7 @@ export DATACRUMBS_TRACE_DIR_PATTERN=@DATACRUMBS_CONFIGURED_TRACE_DIR@/%YY%/%MM%/ readonly DATACRUMBS_TRACE_DIR_PATTERN # Job -export DATACRUMBS_JOB_SCHEDULER=@DATACRUMBS_SCHEDULER_TYPE@ +export DATACRUMBS_JOB_SCHEDULER=@DATACRUMBS_LAUNCHER_TYPE@ readonly DATACRUMBS_JOB_SCHEDULER export DATACRUMBS_JOB_RUN=@DATACRUMBS_SCHEDULER_RUN_CMD@ readonly DATACRUMBS_JOB_RUN diff --git a/scripts/datacrumbs/datacrumbs_logging.in b/scripts/datacrumbs/datacrumbs_logging.in index caddcedc..a93db94b 100755 --- a/scripts/datacrumbs/datacrumbs_logging.in +++ b/scripts/datacrumbs/datacrumbs_logging.in @@ -29,9 +29,9 @@ warn() { } log_system() { - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_TYPE@" == "SLURM" ]]; then + 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')] $@" @@ -39,9 +39,9 @@ log_system() { } log_user() { - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + 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_SCHEDULER_TYPE@" == "SLURM" ]]; then + 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')] $@" @@ -49,9 +49,9 @@ log_user() { } warn_user() { - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + 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_SCHEDULER_TYPE@" == "SLURM" ]]; then + 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')] $@" @@ -59,9 +59,9 @@ warn_user() { } error_user() { - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + 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_SCHEDULER_TYPE@" == "SLURM" ]]; then + 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')] $@" diff --git a/scripts/datacrumbs/datacrumbs_service_common.sh.in b/scripts/datacrumbs/datacrumbs_service_common.sh.in index 883a78ad..98c9e595 100755 --- a/scripts/datacrumbs/datacrumbs_service_common.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_common.sh.in @@ -51,9 +51,9 @@ function get_slurm_datacrumbs_enabled() { function get_datacrumbs_enabled() { local enabled="no" - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then enabled=$(get_flux_datacrumbs_enabled) - elif [[ "@DATACRUMBS_SCHEDULER_TYPE@" == "SLURM" ]]; then + 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) @@ -106,9 +106,9 @@ function get_general_datacrumbs_composite_name() { function get_datacrumbs_composite_name() { local name=$(get_default_datacrumbs_composite_name) - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then name=$(get_flux_datacrumbs_composite_name) - elif [[ "@DATACRUMBS_SCHEDULER_TYPE@" == "SLURM" ]]; then + elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then name=$(get_slurm_datacrumbs_composite_name) else name=$(get_general_datacrumbs_composite_name) diff --git a/scripts/datacrumbs/datacrumbs_setup.in b/scripts/datacrumbs/datacrumbs_setup.in index a9381dd4..ad15f838 100755 --- a/scripts/datacrumbs/datacrumbs_setup.in +++ b/scripts/datacrumbs/datacrumbs_setup.in @@ -27,6 +27,9 @@ else fi fi +readonly DATACRUMBS_IS_ROOT +readonly DATACRUMBS_USER + if [[ "${DATACRUMBS_ENV_LOADED:-0}" == "0" ]]; then if command -v direnv &>/dev/null; then eval "$(direnv exec ${CONFIG_FILE%/*} bash -c 'source ${CONFIG_FILE}; env')" diff --git a/scripts/datacrumbs/datacrumbs_utility.in b/scripts/datacrumbs/datacrumbs_utility.in index d31ee639..80a6d122 100755 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ b/scripts/datacrumbs/datacrumbs_utility.in @@ -234,11 +234,11 @@ function server_launch() { function get_actual_user() { local user=$(whoami) - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then if [[ -n "$FLUX_JOB_USERID" ]]; then user=$(id -nu $FLUX_JOB_USERID) fi - elif [[ "SLURM" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + elif [[ "SLURM" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then if [[ -n "$SLURM_JOB_UID" ]]; then user=$(id -nu $SLURM_JOB_UID) fi diff --git a/src/datacrumbs/validator/probe_validator.cpp b/src/datacrumbs/validator/probe_validator.cpp index 4e2148d2..4f5c2121 100644 --- a/src/datacrumbs/validator/probe_validator.cpp +++ b/src/datacrumbs/validator/probe_validator.cpp @@ -50,7 +50,7 @@ void prettyPrintInvalidProbes( } std::cout << "\n"; - std::cout << "╔════════════════════════════════════════════════════════════════════════════╗\n"; + std::cout << "╔═══════════════════════════════════════════════════════════════════════════╗\n"; std::cout << "║ INVALID PROBES BY CATEGORY ║\n"; std::cout << "╚════════════════════════════════════════════════════════════════════════════╝\n"; From d0e7275c082dd969dbb10243384e35fe602bf49d Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Thu, 6 Nov 2025 16:34:57 -0800 Subject: [PATCH 07/19] feat: arg parsing improvements and lustre configurations 1. Enhance argument parsing and logging, add UTF-8 character removal, and update dependency handling 2. Tested Lustre configurations 3. Improved validation case to handle all cases 4. reduced logging to avoid blowing up log files --- cmake/modules/datacrumbs-utils.cmake | 132 +++++------- scripts/datacrumbs/datacrumbs_args.in | 212 +++++++++---------- scripts/datacrumbs/datacrumbs_compose.in | 16 +- scripts/datacrumbs/datacrumbs_utility.in | 52 ++--- src/datacrumbs/composable/CMakeLists.txt.in | 30 +-- src/datacrumbs/validator/probe_validator.cpp | 2 +- 6 files changed, 192 insertions(+), 252 deletions(-) diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 3f0eb4ee..a1e811a6 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -30,15 +30,12 @@ macro(include_dependencies) 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() + # 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}) + set(PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH}) # include all links if(LIBBPF_FOUND) @@ -110,47 +107,47 @@ macro(include_dependencies) 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(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(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() - - 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() + 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}) @@ -161,43 +158,20 @@ macro(include_dependencies) 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() + # 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) diff --git a/scripts/datacrumbs/datacrumbs_args.in b/scripts/datacrumbs/datacrumbs_args.in index 1c7c3115..728a6029 100755 --- a/scripts/datacrumbs/datacrumbs_args.in +++ b/scripts/datacrumbs/datacrumbs_args.in @@ -275,61 +275,58 @@ dc_args_usage() { 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:" + 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:" @@ -548,65 +545,52 @@ dc_args_parse() { } 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 - # 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 + 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 diff --git a/scripts/datacrumbs/datacrumbs_compose.in b/scripts/datacrumbs/datacrumbs_compose.in index 17d957e8..d24e8e2e 100755 --- a/scripts/datacrumbs/datacrumbs_compose.in +++ b/scripts/datacrumbs/datacrumbs_compose.in @@ -54,14 +54,14 @@ if [[ -n "${DRY_RUN}" && "${DRY_RUN}" != "0" ]]; then fi run() { - if [[ "$DRY_RUN_MODE" == "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" diff --git a/scripts/datacrumbs/datacrumbs_utility.in b/scripts/datacrumbs/datacrumbs_utility.in index 80a6d122..14841338 100755 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ b/scripts/datacrumbs/datacrumbs_utility.in @@ -204,32 +204,32 @@ function job_launch() { } 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}" == "1" ]]; then - log "[DRY RUN] Would launch server: ${cmd[*]}" - return 0 - fi - log "Launching server command: ${cmd[*]}" - "${cmd[@]}" + 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() { diff --git a/src/datacrumbs/composable/CMakeLists.txt.in b/src/datacrumbs/composable/CMakeLists.txt.in index b4c0f217..95de7e6a 100644 --- a/src/datacrumbs/composable/CMakeLists.txt.in +++ b/src/datacrumbs/composable/CMakeLists.txt.in @@ -135,30 +135,12 @@ 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 " - 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}") diff --git a/src/datacrumbs/validator/probe_validator.cpp b/src/datacrumbs/validator/probe_validator.cpp index 4f5c2121..4e2148d2 100644 --- a/src/datacrumbs/validator/probe_validator.cpp +++ b/src/datacrumbs/validator/probe_validator.cpp @@ -50,7 +50,7 @@ void prettyPrintInvalidProbes( } std::cout << "\n"; - std::cout << "╔═══════════════════════════════════════════════════════════════════════════╗\n"; + std::cout << "╔════════════════════════════════════════════════════════════════════════════╗\n"; std::cout << "║ INVALID PROBES BY CATEGORY ║\n"; std::cout << "╚════════════════════════════════════════════════════════════════════════════╝\n"; From ea0305020b3f55497a05f912a2040006a8965e1b Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Thu, 13 Nov 2025 12:28:51 -0800 Subject: [PATCH 08/19] Added slurm integration 1. Generalized scheduler implementation to be updated by any user. 2. Specialized implementation for prolog and epilog script for slurm and flux and general. --- CMakeLists.txt | 1 + cmake/modules/datacrumbs-utils.cmake | 131 ++++++++---------- etc/datacrumbs/configs/project.env.local.in | 2 +- scripts/datacrumbs/datacrumbs_compose_run.in | 5 + scripts/datacrumbs/datacrumbs_logging.in | 40 ++++++ .../datacrumbs/datacrumbs_server_run.sh.in | 1 - .../datacrumbs_service_common.sh.in | 118 ++++++++-------- 7 files changed, 163 insertions(+), 135 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e1e5983..e8e44f84 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,6 +63,7 @@ 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") +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)") diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index a1e811a6..dfaf6d3a 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -313,63 +313,59 @@ macro(derive_configurations) 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() + 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_SCHEDULER_TYPE STREQUAL "NONE") + message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_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") + if (DATACRUMBS_SCHEDULER_JOBID_ENV_VAR STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") + endif() endif() - 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") + if (DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + endif() endif() - 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") + if (DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") + endif() endif() - 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") + if (DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") + endif() endif() - endif() + + endmacro(derive_configurations) @@ -636,31 +632,18 @@ macro(load_build_variables) 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(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) diff --git a/etc/datacrumbs/configs/project.env.local.in b/etc/datacrumbs/configs/project.env.local.in index e727eaab..b68d6a0f 100644 --- a/etc/datacrumbs/configs/project.env.local.in +++ b/etc/datacrumbs/configs/project.env.local.in @@ -49,7 +49,7 @@ export DATACRUMBS_TRACE_DIR_PATTERN=@DATACRUMBS_CONFIGURED_TRACE_DIR@/%YY%/%MM%/ readonly DATACRUMBS_TRACE_DIR_PATTERN # Job -export DATACRUMBS_JOB_SCHEDULER=@DATACRUMBS_LAUNCHER_TYPE@ +export DATACRUMBS_JOB_SCHEDULER=@DATACRUMBS_SCHEDULER_TYPE@ readonly DATACRUMBS_JOB_SCHEDULER export DATACRUMBS_JOB_RUN=@DATACRUMBS_SCHEDULER_RUN_CMD@ readonly DATACRUMBS_JOB_RUN diff --git a/scripts/datacrumbs/datacrumbs_compose_run.in b/scripts/datacrumbs/datacrumbs_compose_run.in index ddfb894d..d103f30b 100755 --- a/scripts/datacrumbs/datacrumbs_compose_run.in +++ b/scripts/datacrumbs/datacrumbs_compose_run.in @@ -56,6 +56,11 @@ if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSABLE_NAME}"; then 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}" diff --git a/scripts/datacrumbs/datacrumbs_logging.in b/scripts/datacrumbs/datacrumbs_logging.in index a93db94b..075199a2 100755 --- a/scripts/datacrumbs/datacrumbs_logging.in +++ b/scripts/datacrumbs/datacrumbs_logging.in @@ -67,3 +67,43 @@ error_user() { logger "[ERROR $(date '+%Y-%m-%d %H:%M:%S')] $@" fi } + +log_system() { + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=7 ${FLUX_JOB_ID} "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then + flux job raise --severity=1 ${FLUX_JOB_ID} "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" + elif [[ "@DATACRUMBS_SCHEDULER_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_server_run.sh.in b/scripts/datacrumbs/datacrumbs_server_run.sh.in index 6960ff72..b6bb1d01 100755 --- a/scripts/datacrumbs/datacrumbs_server_run.sh.in +++ b/scripts/datacrumbs/datacrumbs_server_run.sh.in @@ -44,7 +44,6 @@ if [[ "$DATACRUMBS_COMPOSITE_NAME" != "" ]] && [[ "$DATACRUMBS_COMPOSITE_NAME" ! fi check_sudo_user - 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}" diff --git a/scripts/datacrumbs/datacrumbs_service_common.sh.in b/scripts/datacrumbs/datacrumbs_service_common.sh.in index 98c9e595..9de2d14d 100755 --- a/scripts/datacrumbs/datacrumbs_service_common.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_common.sh.in @@ -5,30 +5,30 @@ set -e pipefail source @DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_setup 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}" + 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}" } 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." + 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 - enabled_value="yes" + 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 fi - fi - log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" - echo "${enabled_value}" + log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" + echo "${enabled_value}" } function get_slurm_comment() { @@ -50,36 +50,36 @@ function get_slurm_datacrumbs_enabled() { } 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}" + local enabled="no" + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + enabled=$(get_flux_datacrumbs_enabled) + elif [[ "@DATACRUMBS_SCHEDULER_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}" + 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 [[ + if [[ ${slurm_composite} == "" || ${slurm_composite} == "NONE" || ${slurm_composite} == "null" || @@ -105,36 +105,36 @@ function get_general_datacrumbs_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" + local name=$(get_default_datacrumbs_composite_name) + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + name=$(get_flux_datacrumbs_composite_name) + elif [[ "@DATACRUMBS_SCHEDULER_TYPE@" == "SLURM" ]]; then + name=$(get_slurm_datacrumbs_composite_name) + else + name=$(get_general_datacrumbs_composite_name) fi - fi - log_system "get_datacrumbs_composite_name returned name:${name}" - echo "${name}" + if [[ "${name}" != "$(get_default_datacrumbs_composite_name)" && "${name}" != "ERROR" ]]; then + if ! validate_datacrumbs_composite_name "${name}"; then + name="ERROR" + fi + fi + log_system "get_datacrumbs_composite_name returned name:${name}" + echo "${name}" } DATACRUMBS_ENABLED=$(get_datacrumbs_enabled) if [[ "${DATACRUMBS_ENABLED}" != "yes" ]]; then - log_system "User hasn't requested datacrumbs feature, exiting." - return 1 + 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 + return 1 fi if [[ "${DATACRUMBS_COMPOSABLE_NAME}" == "$(get_default_datacrumbs_composite_name)" ]]; then - log_user "Running system datacrumbs" + log_user "Running system datacrumbs" else - log_user "Running a composite datacrumbs with name: ${DATACRUMBS_COMPOSABLE_NAME}" + log_user "Running a composite datacrumbs with name: ${DATACRUMBS_COMPOSABLE_NAME}" fi readonly DATACRUMBS_COMPOSABLE_NAME From 268963b73f05eba2d87e083d383319aa78381ebc Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Fri, 28 Nov 2025 17:40:45 -0800 Subject: [PATCH 09/19] add linting for sh and cmake files. --- cmake/modules/datacrumbs-utils.cmake | 261 ++++++++++-------- scripts/datacrumbs/datacrumbs_args.in | 216 ++++++++------- scripts/datacrumbs/datacrumbs_compose.in | 16 +- scripts/datacrumbs/datacrumbs_compose_run.in | 10 +- scripts/datacrumbs/datacrumbs_logging.in | 56 +--- .../datacrumbs_service_common.sh.in | 118 ++++---- .../datacrumbs/datacrumbs_service_run.sh.in | 8 +- scripts/datacrumbs/datacrumbs_utility.in | 63 ++--- src/datacrumbs/composable/CMakeLists.txt.in | 30 +- 9 files changed, 407 insertions(+), 371 deletions(-) diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index dfaf6d3a..2091fdc4 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -30,12 +30,15 @@ macro(include_dependencies) 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() + # 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}) + set(PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH}) # include all links if(LIBBPF_FOUND) @@ -107,47 +110,47 @@ macro(include_dependencies) 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(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(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() - - 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() + 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}) @@ -158,20 +161,43 @@ macro(include_dependencies) 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() + # 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) @@ -313,59 +339,63 @@ macro(derive_configurations) set(KERNEL_VERSION_PATCH "0") endif() - set(DATACRUMBS_CMAKE_KERNEL_VERSION "(${KERNEL_VERSION_MAJOR}, ${KERNEL_VERSION_MINOR}, ${KERNEL_VERSION_PATCH})") + 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_SCHEDULER_TYPE STREQUAL "NONE") - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_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() + # 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_SCHEDULER_TYPE STREQUAL "NONE" + ) + message( + FATAL_ERROR + "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") - endif() + if(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "SLURM_JOB_ID") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "OMPI_COMM_WORLD_RANK") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR "FLUX_JOB_ID") endif() + endif() - if (DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - endif() + if(DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") endif() + endif() - if (DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") - endif() + if(DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") endif() + endif() - if (DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") - endif() + if(DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") + if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") + set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") + set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") + elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") + set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") endif() - - + endif() endmacro(derive_configurations) @@ -632,18 +662,31 @@ macro(load_build_variables) 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(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) diff --git a/scripts/datacrumbs/datacrumbs_args.in b/scripts/datacrumbs/datacrumbs_args.in index 728a6029..3ab704bd 100755 --- a/scripts/datacrumbs/datacrumbs_args.in +++ b/scripts/datacrumbs/datacrumbs_args.in @@ -275,58 +275,61 @@ dc_args_usage() { 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:" + 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:" @@ -545,52 +548,65 @@ dc_args_parse() { } 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 - # 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 + 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 @@ -614,9 +630,7 @@ dc_args_pretty_print() { fi fi done - if ((any == 1)); then - debug "" - fi + ((any == 1)) && debug "" } print_group "MANDATORY" "Mandatory options:" print_group "OPTIONAL" "Optional options:" diff --git a/scripts/datacrumbs/datacrumbs_compose.in b/scripts/datacrumbs/datacrumbs_compose.in index d24e8e2e..17d957e8 100755 --- a/scripts/datacrumbs/datacrumbs_compose.in +++ b/scripts/datacrumbs/datacrumbs_compose.in @@ -54,14 +54,14 @@ if [[ -n "${DRY_RUN}" && "${DRY_RUN}" != "0" ]]; then fi run() { - if [[ "$DRY_RUN_MODE" == "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" diff --git a/scripts/datacrumbs/datacrumbs_compose_run.in b/scripts/datacrumbs/datacrumbs_compose_run.in index d103f30b..bfbb98de 100755 --- a/scripts/datacrumbs/datacrumbs_compose_run.in +++ b/scripts/datacrumbs/datacrumbs_compose_run.in @@ -56,9 +56,15 @@ if ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSABLE_NAME}"; then exit 1 fi +# Convert APP_CMD string into array, splitting on spaces +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 + error "Invalid composable name: ${DATACRUMBS_COMPOSABLE_NAME}" + exit 1 fi # Convert APP_CMD string into array, splitting on spaces diff --git a/scripts/datacrumbs/datacrumbs_logging.in b/scripts/datacrumbs/datacrumbs_logging.in index 075199a2..caddcedc 100755 --- a/scripts/datacrumbs/datacrumbs_logging.in +++ b/scripts/datacrumbs/datacrumbs_logging.in @@ -29,9 +29,9 @@ warn() { } log_system() { - if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_LAUNCHER_TYPE@" == "SLURM" ]]; then + elif [[ "@DATACRUMBS_SCHEDULER_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')] $@" @@ -39,9 +39,9 @@ log_system() { } log_user() { - if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_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 + elif [[ "@DATACRUMBS_SCHEDULER_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')] $@" @@ -49,9 +49,9 @@ log_user() { } warn_user() { - if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_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 + elif [[ "@DATACRUMBS_SCHEDULER_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')] $@" @@ -59,51 +59,11 @@ warn_user() { } error_user() { - if [[ "FLUX" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_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 + elif [[ "@DATACRUMBS_SCHEDULER_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 } - -log_system() { - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then - logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=7 ${FLUX_JOB_ID} "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=1 ${FLUX_JOB_ID} "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=1 ${FLUX_JOB_ID} "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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_service_common.sh.in b/scripts/datacrumbs/datacrumbs_service_common.sh.in index 9de2d14d..883a78ad 100755 --- a/scripts/datacrumbs/datacrumbs_service_common.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_common.sh.in @@ -5,30 +5,30 @@ set -e pipefail source @DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_setup 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}" + 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}" } 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." + 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 - 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 + enabled_value="yes" fi - log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" - echo "${enabled_value}" + fi + log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" + echo "${enabled_value}" } function get_slurm_comment() { @@ -50,36 +50,36 @@ function get_slurm_datacrumbs_enabled() { } function get_datacrumbs_enabled() { - local enabled="no" - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then - enabled=$(get_flux_datacrumbs_enabled) - elif [[ "@DATACRUMBS_SCHEDULER_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}" + local enabled="no" + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + enabled=$(get_flux_datacrumbs_enabled) + elif [[ "@DATACRUMBS_SCHEDULER_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}" + 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 [[ + if [[ ${slurm_composite} == "" || ${slurm_composite} == "NONE" || ${slurm_composite} == "null" || @@ -105,36 +105,36 @@ function get_general_datacrumbs_composite_name() { } function get_datacrumbs_composite_name() { - local name=$(get_default_datacrumbs_composite_name) - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then - name=$(get_flux_datacrumbs_composite_name) - elif [[ "@DATACRUMBS_SCHEDULER_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 + local name=$(get_default_datacrumbs_composite_name) + if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then + name=$(get_flux_datacrumbs_composite_name) + elif [[ "@DATACRUMBS_SCHEDULER_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 - log_system "get_datacrumbs_composite_name returned name:${name}" - echo "${name}" + fi + log_system "get_datacrumbs_composite_name returned name:${name}" + echo "${name}" } DATACRUMBS_ENABLED=$(get_datacrumbs_enabled) if [[ "${DATACRUMBS_ENABLED}" != "yes" ]]; then - log_system "User hasn't requested datacrumbs feature, exiting." - return 1 + 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 + return 1 fi if [[ "${DATACRUMBS_COMPOSABLE_NAME}" == "$(get_default_datacrumbs_composite_name)" ]]; then - log_user "Running system datacrumbs" + log_user "Running system datacrumbs" else - log_user "Running a composite datacrumbs with name: ${DATACRUMBS_COMPOSABLE_NAME}" + log_user "Running a composite datacrumbs with name: ${DATACRUMBS_COMPOSABLE_NAME}" fi readonly DATACRUMBS_COMPOSABLE_NAME diff --git a/scripts/datacrumbs/datacrumbs_service_run.sh.in b/scripts/datacrumbs/datacrumbs_service_run.sh.in index 82044695..e973fb13 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 ${DATACRUMBS_SERVER_RUN_ID}" - sudo systemctl start datacrumbs@${DATACRUMBS_SERVER_RUN_ID}.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 diff --git a/scripts/datacrumbs/datacrumbs_utility.in b/scripts/datacrumbs/datacrumbs_utility.in index 14841338..500c5d24 100755 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ b/scripts/datacrumbs/datacrumbs_utility.in @@ -53,11 +53,6 @@ function datacrumbs_init() { } function datacrumbs_start_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" @@ -123,7 +118,7 @@ function datacrumbs_stop_server() { 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=$(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 DATACRUMBS_SERVER_RUN_ID ${DATACRUMBS_SERVER_RUN_ID}: $SERVER_PID. Killing them." @@ -204,41 +199,41 @@ function job_launch() { } 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}" == "1" ]]; then - log "[DRY RUN] Would launch server: ${cmd[*]}" - return 0 - fi - log "Launching server command: ${cmd[*]}" - "${cmd[@]}" + 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 [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then if [[ -n "$FLUX_JOB_USERID" ]]; then user=$(id -nu $FLUX_JOB_USERID) fi - elif [[ "SLURM" == "@DATACRUMBS_LAUNCHER_TYPE@" ]]; then + elif [[ "SLURM" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then if [[ -n "$SLURM_JOB_UID" ]]; then user=$(id -nu $SLURM_JOB_UID) fi diff --git a/src/datacrumbs/composable/CMakeLists.txt.in b/src/datacrumbs/composable/CMakeLists.txt.in index 95de7e6a..b4c0f217 100644 --- a/src/datacrumbs/composable/CMakeLists.txt.in +++ b/src/datacrumbs/composable/CMakeLists.txt.in @@ -135,12 +135,30 @@ 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 + " - 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}") From c509dfcf2533dd4d348d4637148faf5241627acf Mon Sep 17 00:00:00 2001 From: Neeraj Rajesh Date: Thu, 19 Feb 2026 15:41:39 -0600 Subject: [PATCH 10/19] docs(index): add slurm_integration to advanced topics toc --- docs/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.rst b/docs/index.rst index a0e705e4..45ff42b3 100755 --- a/docs/index.rst +++ b/docs/index.rst @@ -39,6 +39,7 @@ analysis of application I/O behavior at scale. :caption: Advanced Topics flux_integration + slurm_integration .. toctree:: :maxdepth: 2 From 3cf84f500ab1c1a5557544b2e93dcdebc0b8dd5f Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Thu, 19 Mar 2026 09:58:29 -0700 Subject: [PATCH 11/19] feat: changed datacrumbs generation based logic to dynamic probe atttach. 1. Reduces the footprint of sudo review code. 2. Removes unneccessary scripts only support systemd in sudo. 3. Creates a system configuration and secrete to sign user probes. 4. No predefined probes, everything is a probe submitted by user. 5. Validation of probe is on runtime and we maintain invalid list. 6. Updated documentation. 7. No MPI dependency. 8. All other features moved to utils. 9. Composability replaced with user input of probes. 10. Include utils part of build for ease of deployment no direct dependency. --- .devcontainer/devcontainer.json | 42 - .github/workflows/docker-build-test.yml | 257 +- .github/workflows/format-check.yml | 14 +- .gitignore | 3 +- .vscode/launch.json | 39 - .vscode/settings.json | 91 - CMakeLists.txt | 754 +-- analysis/analysis.ipynb | 5050 ----------------- analysis/analysis_dfanalyzer.ipynb | 1756 ------ analysis/dfanalyzer.README.md | 13 - analysis/relevant_functions.ipynb | 1379 ----- analysis/requirements.txt | 16 - analysis/trace_analysis.ipynb | 1825 ------ analysis/trace_analysis_important_fn.ipynb | 634 --- cmake/configure_files/datacrumbs_config.h.in | 21 +- cmake/modules/datacrumbs-utils.cmake | 233 +- .../run_system_configurator_if_missing.cmake | 33 + docs/build.rst | 961 +--- docs/composability.rst | 666 +-- docs/deployment.rst | 631 +- docs/flux_integration.rst | 686 +-- docs/index.rst | 32 +- docs/integration.rst | 767 +-- docs/run.rst | 354 +- docs/setup.rst | 1564 +---- docs/slurm_integration.rst | 931 +-- docs/usage.rst | 829 +-- etc/datacrumbs/configs/corona.yaml | 6 - etc/datacrumbs/configs/docker-toss.yaml | 31 - etc/datacrumbs/configs/docker.yaml | 24 - etc/datacrumbs/configs/ebpf.yaml | 9 - etc/datacrumbs/configs/hdf.yaml | 61 - etc/datacrumbs/configs/lead-us.yaml | 6 - etc/datacrumbs/configs/lead.yaml | 61 - etc/datacrumbs/configs/project.env.local.in | 93 - etc/datacrumbs/configs/quokka.yaml | 6 - etc/datacrumbs/configs/tuolumne-mpiio.yaml | 16 - etc/datacrumbs/configs/tuolumne.yaml | 6 - etc/datacrumbs/data/.gitattributes | 3 - etc/datacrumbs/data/categories-cc-ebpf.json | 1 - .../data/categories-dhari-quokka.json | 1 - .../data/categories-haridev-corona.json | 1 - .../data/categories-haridev-lead-us.json | 1 - .../data/categories-haridev-lead.json | 1 - .../categories-haridev-tuolumne-mpiio.json | 1 - .../data/categories-haridev-tuolumne.json | 1 - .../data/categories-root-docker.json | 1 - etc/datacrumbs/data/compact.sh | 6 - .../data/manual-probes-haridev-lead-us.json | 1 - .../data/manual-probes-haridev-lead.json | 1 - .../manual-probes-haridev-tuolumne-mpiio.json | 1 - etc/datacrumbs/data/probes-cc-ebpf.json | 1 - etc/datacrumbs/data/probes-dhari-quokka.json | 1 - .../data/probes-exclusion-cc-ebpf.json | 1 - .../data/probes-exclusion-dhari-quokka.json | 1 - .../probes-exclusion-haridev-lead-us.json | 1 - .../data/probes-exclusion-haridev-lead.json | 1 - ...obes-exclusion-haridev-tuolumne-mpiio.json | 1 - .../probes-exclusion-haridev-tuolumne.json | 1 - .../data/probes-exclusion-root-docker.json | 1 - .../data/probes-haridev-corona.json | 1 - .../data/probes-haridev-lead-us.json | 1 - etc/datacrumbs/data/probes-haridev-lead.json | 1 - .../data/probes-haridev-tuolumne-mpiio.json | 1 - .../data/probes-haridev-tuolumne.json | 1 - .../data/probes-invalid-haridev-lead-us.json | 1 - .../data/probes-invalid-haridev-lead.json | 1 - etc/datacrumbs/data/probes-root-docker.json | 1 - etc/datacrumbs/data/sorter.py | 49 - etc/datacrumbs/data/temp.json | 0 etc/datacrumbs/flux/cli/plugins/datacrumbs.py | 29 +- etc/datacrumbs/logs/.gitignore | 1 - etc/datacrumbs/modulefiles/module.lua.in | 54 - .../plugins/custom_probes/custom_probes.h.in | 10 + .../custom_probes/custom_probes_process.h.in | 10 + etc/datacrumbs/systemd/datacrumbs@.service.in | 27 +- .../systemd/datacrumbs_sign_probes.service.in | 13 + etc/datacrumbs/systems/README.ares.md | 113 - etc/datacrumbs/systems/README.chameleon.md | 87 - etc/datacrumbs/systems/README.lead2.md | 97 - etc/datacrumbs/systems/README.md | 149 - etc/datacrumbs/systems/README.quokka.md | 167 - etc/datacrumbs/systems/README.wombat.md | 97 - infrastructure/docker/Dockerfile | 34 - infrastructure/docker/Dockerfile.build | 116 - infrastructure/docker/README.md | 5 - infrastructure/docker/build-multiarch.sh | 221 - infrastructure/docker/test_run.sh | 79 +- infrastructure/lima/README.md | 95 - infrastructure/lima/ebpf.yaml | 64 - scripts/datacrumbs/datacrumbs_args.in | 668 --- scripts/datacrumbs/datacrumbs_compose.in | 138 - scripts/datacrumbs/datacrumbs_compose_run.in | 113 - .../datacrumbs/datacrumbs_compose_wrapper.in | 20 - .../datacrumbs/datacrumbs_create_log_dir.in | 42 - scripts/datacrumbs/datacrumbs_logging.in | 69 - scripts/datacrumbs/datacrumbs_run.in | 85 - .../datacrumbs/datacrumbs_run_validator.in | 34 - scripts/datacrumbs/datacrumbs_salloc.in | 117 - .../datacrumbs/datacrumbs_server_run.sh.in | 61 - .../datacrumbs/datacrumbs_server_stop.sh.in | 69 - .../datacrumbs_service_common.sh.in | 392 +- .../datacrumbs/datacrumbs_service_run.sh.in | 13 +- .../datacrumbs/datacrumbs_service_stop.sh.in | 12 +- scripts/datacrumbs/datacrumbs_setup.in | 84 - scripts/datacrumbs/datacrumbs_stop.in | 21 - scripts/datacrumbs/datacrumbs_track.in | 69 - scripts/datacrumbs/datacrumbs_untrack.in | 70 - scripts/datacrumbs/datacrumbs_utility.in | 288 - scripts/datacrumbs/datacrumbs_wrap.in | 14 - scripts/docker-build.sh | 193 - scripts/formatting/autoformat.sh | 22 +- scripts/formatting/check-formatting.sh | 28 +- src/datacrumbs/client/library.cpp | 65 - src/datacrumbs/client/library.h | 20 - .../common/configuration_manager.cpp | 671 --- src/datacrumbs/common/configuration_manager.h | 167 - src/datacrumbs/common/data_structures.h | 138 +- src/datacrumbs/common/enumerations.h | 39 - src/datacrumbs/common/logging.h | 382 +- src/datacrumbs/common/probe_file.h | 284 + .../common/runtime_configuration_manager.cpp | 531 ++ .../common/runtime_configuration_manager.h | 71 + src/datacrumbs/common/singleton.h | 31 +- src/datacrumbs/common/typedefs.h | 9 + src/datacrumbs/composable/CMakeLists.txt.in | 224 - src/datacrumbs/composable/process/server.cpp | 7 - .../explorer/mechanism/elf_capture.cpp | 150 - .../explorer/mechanism/elf_capture.h | 65 - .../explorer/mechanism/header_capture.cpp | 61 - .../explorer/mechanism/header_capture.h | 48 - .../explorer/mechanism/ksym_capture.cpp | 14 - .../explorer/mechanism/ksym_capture.h | 82 - .../explorer/mechanism/usdt_functions.h | 36 - src/datacrumbs/explorer/probe_explorer.cpp | 835 --- src/datacrumbs/explorer/probe_explorer.h | 55 - src/datacrumbs/generator/generator.cpp | 346 -- src/datacrumbs/generator/generator.h | 92 - .../generator/mechanisms/kprobe_generator.h | 80 - .../generator/mechanisms/syscall_generator.h | 76 - .../generator/mechanisms/uprobe_generator.h | 97 - .../generator/mechanisms/usdt_generator.h | 80 - src/datacrumbs/server/bpf/common.c | 8 + src/datacrumbs/server/bpf/common.h | 358 +- src/datacrumbs/server/bpf/generic.bpf.c | 58 + src/datacrumbs/server/bpf/init.bpf.c | 61 +- src/datacrumbs/server/bpf/main.bpf.c | 9 +- src/datacrumbs/server/bpf/shared.h | 41 +- .../server/process/event_processor.cpp | 70 +- .../server/process/event_processor.h | 8 +- .../server/process/processing/general_event.h | 5 +- .../server/process/processing/usdt_event.h | 8 +- src/datacrumbs/server/process/server.impl.cpp | 913 ++- .../server/process/writer/chrome_writer.cpp | 268 +- .../server/process/writer/chrome_writer.h | 3 +- src/datacrumbs/signer/sign_probes_service.cpp | 259 + src/datacrumbs/signer/sign_probes_service.h | 28 + .../signer/sign_probes_service_main.cpp | 6 + .../system_configurator.cpp | 144 + .../system_configurator/system_configurator.h | 20 + .../system_configurator_main.cpp | 6 + src/datacrumbs/validator/bpf/probe.bpf.c | 24 - src/datacrumbs/validator/probe_validator.cpp | 372 -- tests/CMakeLists.txt | 2 - tests/apps/Montage/MontageExec.template.sh | 66 - tests/apps/Montage/README.md | 20 - tests/apps/Montage/gcc-11-montage-v6.1.patch | 120 - tests/apps/Montage/setup_montage.sh | 65 - tests/benchmarks/ior/CMakeLists.txt | 45 - tests/output/buffered_write.png | Bin 90965 -> 0 bytes tests/output/direct_write.png | Bin 88288 -> 0 bytes tests/poc/bpf-core/.gitignore | 5 - tests/poc/bpf-core/Makefile | 28 - tests/poc/bpf-core/example.c | 62 - tests/poc/bpf-core/example.generic.bpf.c | 19 - tests/poc/bpf-core/example.generic.bpf.h | 60 - tests/poc/bpf-core/example.h | 9 - tests/poc/bpf-core/example.kprobe.bpf.c | 12 - tests/poc/bpf-core/example.syscall.bpf.c | 11 - tests/poc/bpf-core/example.uprobe.bpf.c | 12 - tests/poc/bpf-core/example.usdt.bpf.c | 11 - tests/poc/bpf-time/.gitignore | 7 - tests/poc/bpf-time/Makefile | 56 - tests/poc/bpf-time/malloc.bpf.c | 30 - tests/poc/bpf-time/malloc.c | 38 - tests/poc/bpf-time/victim.c | 16 - tests/poc/notes.MD | 7 - tests/poc/test.c | 4 - tests/poc/test.py | 13 - tests/poc/uprobes.py | 379 -- tests/unittests/CMakeLists.txt | 1 - .../component/compress_decompress_zlib.cpp | 133 - .../unittests/component/elf_capture_test.cpp | 24 - .../component/header_capture_test.cpp | 18 - .../unittests/component/ksym_capture_test.cpp | 14 - .../component/probe_explorer_test.cpp | 25 - tests/unittests/io_tests/CMakeLists.txt | 18 - tests/unittests/io_tests/images/read.png | Bin 35310 -> 0 bytes tests/unittests/io_tests/images/write.png | Bin 74095 -> 0 bytes tests/unittests/io_tests/scripts/ior.sh | 80 - .../io_tests/scripts/ior_hdf5_fpp.sh | 20 - tests/unittests/io_tests/scripts/ior_mpiio.sh | 20 - .../unittests/io_tests/scripts/test_posix.sh | 46 - .../io_tests/scripts/test_posix_overhead.sh | 35 - .../io_tests/scripts/test_posix_read.sh | 50 - .../unittests/io_tests/scripts/test_stdio.sh | 28 - tests/unittests/io_tests/test.cpp | 232 - tests/unittests/io_tests/test.py | 25 - tests/unittests/io_tests/test_stdio.cpp | 137 - tools/CMakeLists.txt | 11 - tools/README.md | 27 - tools/aggregate_trace.cpp | 154 - tools/analyze_trace.sh | 186 - tools/callgraph_vis.cpp | 506 -- tools/decompression.h | 63 - tools/examples/imageoutput.png | Bin 2090276 -> 0 bytes tools/examples/textoutput.txt | 115 - tools/separator.sh | 44 - 218 files changed, 4498 insertions(+), 30112 deletions(-) delete mode 100644 .devcontainer/devcontainer.json delete mode 100755 .vscode/launch.json delete mode 100755 .vscode/settings.json delete mode 100755 analysis/analysis.ipynb delete mode 100644 analysis/analysis_dfanalyzer.ipynb delete mode 100644 analysis/dfanalyzer.README.md delete mode 100755 analysis/relevant_functions.ipynb delete mode 100755 analysis/requirements.txt delete mode 100755 analysis/trace_analysis.ipynb delete mode 100755 analysis/trace_analysis_important_fn.ipynb create mode 100644 cmake/run_system_configurator_if_missing.cmake mode change 100755 => 100644 docs/build.rst mode change 100755 => 100644 docs/composability.rst mode change 100755 => 100644 docs/deployment.rst mode change 100755 => 100644 docs/flux_integration.rst mode change 100755 => 100644 docs/index.rst mode change 100755 => 100644 docs/integration.rst mode change 100755 => 100644 docs/run.rst mode change 100755 => 100644 docs/setup.rst mode change 100755 => 100644 docs/usage.rst delete mode 100755 etc/datacrumbs/configs/corona.yaml delete mode 100755 etc/datacrumbs/configs/docker-toss.yaml delete mode 100755 etc/datacrumbs/configs/docker.yaml delete mode 100755 etc/datacrumbs/configs/ebpf.yaml delete mode 100644 etc/datacrumbs/configs/hdf.yaml delete mode 100755 etc/datacrumbs/configs/lead-us.yaml delete mode 100755 etc/datacrumbs/configs/lead.yaml delete mode 100644 etc/datacrumbs/configs/project.env.local.in delete mode 100755 etc/datacrumbs/configs/quokka.yaml delete mode 100755 etc/datacrumbs/configs/tuolumne-mpiio.yaml delete mode 100755 etc/datacrumbs/configs/tuolumne.yaml delete mode 100644 etc/datacrumbs/data/.gitattributes delete mode 100644 etc/datacrumbs/data/categories-cc-ebpf.json delete mode 100644 etc/datacrumbs/data/categories-dhari-quokka.json delete mode 100644 etc/datacrumbs/data/categories-haridev-corona.json delete mode 100644 etc/datacrumbs/data/categories-haridev-lead-us.json delete mode 100644 etc/datacrumbs/data/categories-haridev-lead.json delete mode 100644 etc/datacrumbs/data/categories-haridev-tuolumne-mpiio.json delete mode 100644 etc/datacrumbs/data/categories-haridev-tuolumne.json delete mode 100644 etc/datacrumbs/data/categories-root-docker.json delete mode 100755 etc/datacrumbs/data/compact.sh delete mode 100644 etc/datacrumbs/data/manual-probes-haridev-lead-us.json delete mode 100644 etc/datacrumbs/data/manual-probes-haridev-lead.json delete mode 100644 etc/datacrumbs/data/manual-probes-haridev-tuolumne-mpiio.json delete mode 100644 etc/datacrumbs/data/probes-cc-ebpf.json delete mode 100644 etc/datacrumbs/data/probes-dhari-quokka.json delete mode 100644 etc/datacrumbs/data/probes-exclusion-cc-ebpf.json delete mode 100644 etc/datacrumbs/data/probes-exclusion-dhari-quokka.json delete mode 100644 etc/datacrumbs/data/probes-exclusion-haridev-lead-us.json delete mode 100644 etc/datacrumbs/data/probes-exclusion-haridev-lead.json delete mode 100644 etc/datacrumbs/data/probes-exclusion-haridev-tuolumne-mpiio.json delete mode 100644 etc/datacrumbs/data/probes-exclusion-haridev-tuolumne.json delete mode 100644 etc/datacrumbs/data/probes-exclusion-root-docker.json delete mode 100644 etc/datacrumbs/data/probes-haridev-corona.json delete mode 100644 etc/datacrumbs/data/probes-haridev-lead-us.json delete mode 100644 etc/datacrumbs/data/probes-haridev-lead.json delete mode 100644 etc/datacrumbs/data/probes-haridev-tuolumne-mpiio.json delete mode 100644 etc/datacrumbs/data/probes-haridev-tuolumne.json delete mode 100644 etc/datacrumbs/data/probes-invalid-haridev-lead-us.json delete mode 100644 etc/datacrumbs/data/probes-invalid-haridev-lead.json delete mode 100644 etc/datacrumbs/data/probes-root-docker.json delete mode 100644 etc/datacrumbs/data/sorter.py delete mode 100644 etc/datacrumbs/data/temp.json delete mode 100644 etc/datacrumbs/logs/.gitignore delete mode 100644 etc/datacrumbs/modulefiles/module.lua.in create mode 100644 etc/datacrumbs/plugins/custom_probes/custom_probes.h.in create mode 100644 etc/datacrumbs/plugins/custom_probes/custom_probes_process.h.in create mode 100644 etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in delete mode 100644 etc/datacrumbs/systems/README.ares.md delete mode 100755 etc/datacrumbs/systems/README.chameleon.md delete mode 100755 etc/datacrumbs/systems/README.lead2.md delete mode 100755 etc/datacrumbs/systems/README.md delete mode 100644 etc/datacrumbs/systems/README.quokka.md delete mode 100755 etc/datacrumbs/systems/README.wombat.md delete mode 100644 infrastructure/docker/Dockerfile delete mode 100644 infrastructure/docker/Dockerfile.build delete mode 100644 infrastructure/docker/README.md delete mode 100755 infrastructure/docker/build-multiarch.sh delete mode 100755 infrastructure/lima/README.md delete mode 100755 infrastructure/lima/ebpf.yaml delete mode 100755 scripts/datacrumbs/datacrumbs_args.in delete mode 100755 scripts/datacrumbs/datacrumbs_compose.in delete mode 100755 scripts/datacrumbs/datacrumbs_compose_run.in delete mode 100755 scripts/datacrumbs/datacrumbs_compose_wrapper.in delete mode 100755 scripts/datacrumbs/datacrumbs_create_log_dir.in delete mode 100755 scripts/datacrumbs/datacrumbs_logging.in delete mode 100755 scripts/datacrumbs/datacrumbs_run.in delete mode 100755 scripts/datacrumbs/datacrumbs_run_validator.in delete mode 100755 scripts/datacrumbs/datacrumbs_salloc.in delete mode 100755 scripts/datacrumbs/datacrumbs_server_run.sh.in delete mode 100755 scripts/datacrumbs/datacrumbs_server_stop.sh.in mode change 100755 => 100644 scripts/datacrumbs/datacrumbs_service_common.sh.in delete mode 100755 scripts/datacrumbs/datacrumbs_setup.in delete mode 100755 scripts/datacrumbs/datacrumbs_stop.in delete mode 100755 scripts/datacrumbs/datacrumbs_track.in delete mode 100755 scripts/datacrumbs/datacrumbs_untrack.in delete mode 100755 scripts/datacrumbs/datacrumbs_utility.in delete mode 100755 scripts/datacrumbs/datacrumbs_wrap.in delete mode 100755 scripts/docker-build.sh delete mode 100755 src/datacrumbs/client/library.cpp delete mode 100755 src/datacrumbs/client/library.h delete mode 100644 src/datacrumbs/common/configuration_manager.cpp delete mode 100644 src/datacrumbs/common/configuration_manager.h create mode 100644 src/datacrumbs/common/probe_file.h create mode 100644 src/datacrumbs/common/runtime_configuration_manager.cpp create mode 100644 src/datacrumbs/common/runtime_configuration_manager.h delete mode 100644 src/datacrumbs/composable/CMakeLists.txt.in delete mode 100644 src/datacrumbs/composable/process/server.cpp delete mode 100644 src/datacrumbs/explorer/mechanism/elf_capture.cpp delete mode 100644 src/datacrumbs/explorer/mechanism/elf_capture.h delete mode 100644 src/datacrumbs/explorer/mechanism/header_capture.cpp delete mode 100644 src/datacrumbs/explorer/mechanism/header_capture.h delete mode 100644 src/datacrumbs/explorer/mechanism/ksym_capture.cpp delete mode 100644 src/datacrumbs/explorer/mechanism/ksym_capture.h delete mode 100644 src/datacrumbs/explorer/mechanism/usdt_functions.h delete mode 100644 src/datacrumbs/explorer/probe_explorer.cpp delete mode 100644 src/datacrumbs/explorer/probe_explorer.h delete mode 100644 src/datacrumbs/generator/generator.cpp delete mode 100644 src/datacrumbs/generator/generator.h delete mode 100644 src/datacrumbs/generator/mechanisms/kprobe_generator.h delete mode 100644 src/datacrumbs/generator/mechanisms/syscall_generator.h delete mode 100644 src/datacrumbs/generator/mechanisms/uprobe_generator.h delete mode 100644 src/datacrumbs/generator/mechanisms/usdt_generator.h create mode 100644 src/datacrumbs/server/bpf/generic.bpf.c create mode 100644 src/datacrumbs/signer/sign_probes_service.cpp create mode 100644 src/datacrumbs/signer/sign_probes_service.h create mode 100644 src/datacrumbs/signer/sign_probes_service_main.cpp create mode 100644 src/datacrumbs/system_configurator/system_configurator.cpp create mode 100644 src/datacrumbs/system_configurator/system_configurator.h create mode 100644 src/datacrumbs/system_configurator/system_configurator_main.cpp delete mode 100644 src/datacrumbs/validator/bpf/probe.bpf.c delete mode 100644 src/datacrumbs/validator/probe_validator.cpp delete mode 100755 tests/CMakeLists.txt delete mode 100755 tests/apps/Montage/MontageExec.template.sh delete mode 100644 tests/apps/Montage/README.md delete mode 100644 tests/apps/Montage/gcc-11-montage-v6.1.patch delete mode 100755 tests/apps/Montage/setup_montage.sh delete mode 100644 tests/benchmarks/ior/CMakeLists.txt delete mode 100755 tests/output/buffered_write.png delete mode 100755 tests/output/direct_write.png delete mode 100644 tests/poc/bpf-core/.gitignore delete mode 100644 tests/poc/bpf-core/Makefile delete mode 100644 tests/poc/bpf-core/example.c delete mode 100644 tests/poc/bpf-core/example.generic.bpf.c delete mode 100644 tests/poc/bpf-core/example.generic.bpf.h delete mode 100644 tests/poc/bpf-core/example.h delete mode 100644 tests/poc/bpf-core/example.kprobe.bpf.c delete mode 100644 tests/poc/bpf-core/example.syscall.bpf.c delete mode 100644 tests/poc/bpf-core/example.uprobe.bpf.c delete mode 100644 tests/poc/bpf-core/example.usdt.bpf.c delete mode 100644 tests/poc/bpf-time/.gitignore delete mode 100644 tests/poc/bpf-time/Makefile delete mode 100644 tests/poc/bpf-time/malloc.bpf.c delete mode 100644 tests/poc/bpf-time/malloc.c delete mode 100644 tests/poc/bpf-time/victim.c delete mode 100644 tests/poc/notes.MD delete mode 100644 tests/poc/test.c delete mode 100755 tests/poc/test.py delete mode 100755 tests/poc/uprobes.py delete mode 100644 tests/unittests/CMakeLists.txt delete mode 100644 tests/unittests/component/compress_decompress_zlib.cpp delete mode 100644 tests/unittests/component/elf_capture_test.cpp delete mode 100644 tests/unittests/component/header_capture_test.cpp delete mode 100644 tests/unittests/component/ksym_capture_test.cpp delete mode 100644 tests/unittests/component/probe_explorer_test.cpp delete mode 100644 tests/unittests/io_tests/CMakeLists.txt delete mode 100755 tests/unittests/io_tests/images/read.png delete mode 100755 tests/unittests/io_tests/images/write.png delete mode 100755 tests/unittests/io_tests/scripts/ior.sh delete mode 100755 tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh delete mode 100755 tests/unittests/io_tests/scripts/ior_mpiio.sh delete mode 100755 tests/unittests/io_tests/scripts/test_posix.sh delete mode 100755 tests/unittests/io_tests/scripts/test_posix_overhead.sh delete mode 100755 tests/unittests/io_tests/scripts/test_posix_read.sh delete mode 100755 tests/unittests/io_tests/scripts/test_stdio.sh delete mode 100755 tests/unittests/io_tests/test.cpp delete mode 100755 tests/unittests/io_tests/test.py delete mode 100644 tests/unittests/io_tests/test_stdio.cpp delete mode 100644 tools/CMakeLists.txt delete mode 100644 tools/README.md delete mode 100644 tools/aggregate_trace.cpp delete mode 100755 tools/analyze_trace.sh delete mode 100644 tools/callgraph_vis.cpp delete mode 100644 tools/decompression.h delete mode 100644 tools/examples/imageoutput.png delete mode 100644 tools/examples/textoutput.txt delete mode 100755 tools/separator.sh diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 4e36bad5..00000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,42 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the -// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile -{ - "name": "Existing Dockerfile", - "build": { - // 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": "../infrastructure/docker/Dockerfile", - }, - "runArgs": [ - "-ti", - // "-v", - // "/usr/src:/usr/src:ro", - "-v", - "/lib/modules/:/lib/modules:ro", - "-v", - "/sys/kernel/debug/:/sys/kernel/debug:rw", - "--net=host", - "--pid=host", - "--privileged", - "--cap-add", - "sys_admin", - "--cap-add", - "sys_ptrace", - "--hostname", - "docker", - "--privileged", - "-v", - "/sys/fs/bpf:/sys/fs/bpf" - ] - // Features to add to the dev container. More info: https://containers.dev/features. - // "features": {}, - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - // Uncomment the next line to run commands after the container is created. - // "postCreateCommand": "cat /etc/os-release", - // Configure tool-specific properties. - // "customizations": {}, - // Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root. - // "remoteUser": "devcontainer" -} \ No newline at end of file diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml index 56b582b0..2bdfc3cd 100644 --- a/.github/workflows/docker-build-test.yml +++ b/.github/workflows/docker-build-test.yml @@ -1,4 +1,4 @@ -name: Docker Build and Test +name: VM Build and Flow Test on: push: @@ -7,43 +7,234 @@ on: workflow_dispatch: env: - DOCKER_IMAGE_NAME: datacrumbs-test - DOCKER_TAG: latest + BUILD_DIR: /tmp/dc-build + INSTALL_PREFIX: /tmp/dc-install + CONFIG_YAML: /tmp/dc-install/etc/datacrumbs/configs/docker.yaml + PROBE_FILE: /tmp/datacrumbs-ci-probes.json.gz + JOB_ID: "1" + LOG_DIR: /tmp/datacrumbs-logs + TRACE_DIR: /tmp/datacrumbs-traces + OUT_FILE: /tmp/datacrumbs-ci-output.bin + BPFTOOL_SOURCE_REF: v7.5.0 + BPFTOOLS_PREFIX: /tmp/dc-bpftools jobs: - docker-build-and-test: - runs-on: ubuntu-latest + vm-build-and-test: + runs-on: ubuntu-24.04 steps: - - name: Checkout repository + - name: Checkout datacrumbs uses: actions/checkout@v4 with: + path: datacrumbs submodules: recursive - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build Docker image - run: | - docker buildx build \ - --cache-from=type=gha \ - --cache-to=type=gha,mode=max \ - --load \ - -t ${{ env.DOCKER_IMAGE_NAME }}:${{ env.DOCKER_TAG }} \ - -f infrastructure/docker/Dockerfile \ - . - - - name: Run DataCrumbs tests - run: | - docker run --rm \ - -v /lib/modules/:/lib/modules:ro \ - -v /sys/kernel/debug/:/sys/kernel/debug:rw \ - --net=host \ - --pid=host \ - --privileged \ - --cap-add sys_admin \ - --cap-add sys_ptrace \ - --hostname docker \ - -v /sys/fs/bpf:/sys/fs/bpf \ - ${{ env.DOCKER_IMAGE_NAME }}:${{ env.DOCKER_TAG }} \ - bash -c /opt/datacrumbs/infrastructure/docker/test_run.sh + - name: Checkout datacrumbs-utils + uses: actions/checkout@v4 + with: + repository: llnl/datacrumbs-utils + ref: main + fetch-depth: 1 + path: datacrumbs-utils + + - name: Install base build and runtime dependencies + run: | + set -euo pipefail + sudo apt-get update + sudo apt-get install -y \ + build-essential \ + cmake \ + git \ + pkg-config \ + clang \ + clang-17 \ + llvm \ + llvm-17 \ + llvm-dev \ + libclang-dev \ + libclang-17-dev \ + libelf-dev \ + libssl-dev \ + libcap-dev \ + libyaml-cpp-dev \ + libjson-c-dev \ + zlib1g-dev \ + jq \ + patchelf \ + python3 \ + openmpi-bin \ + libopenmpi-dev + if [[ ! -d "/usr/src/linux-headers-$(uname -r)" ]]; then + sudo apt-get install -y "linux-headers-$(uname -r)" || sudo apt-get install -y linux-headers-generic + fi + + - name: Build and stage libbpf and bpftool from source + run: | + set -euo pipefail + workdir="${RUNNER_TEMP}/bpftool-src" + prefix="${BPFTOOLS_PREFIX}" + rm -rf "${workdir}" "${prefix}" + mkdir -p "${prefix}" + git clone https://github.com/libbpf/bpftool.git "${workdir}" + pushd "${workdir}" + git checkout tags/${BPFTOOL_SOURCE_REF} -b "${BPFTOOL_SOURCE_REF}" + git submodule update --init --recursive + + pushd libbpf + git checkout tags/v1.5.0 -b v1.5.0 + cd src + DESTDIR="${prefix}" make install -j"$(nproc)" + popd + + cd src + DESTDIR="${prefix}" make install -j"$(nproc)" + popd + + for staged_root in "${prefix}/usr/local" "${prefix}/usr"; do + if [[ ! -d "${staged_root}" ]]; then + continue + fi + for dir in include lib lib64 libexec bin sbin; do + if [[ -d "${staged_root}/${dir}" ]]; then + mkdir -p "${prefix}/${dir}" + find "${staged_root}/${dir}" -mindepth 1 -maxdepth 1 -exec mv {} "${prefix}/${dir}" \; + fi + done + done + rm -rf "${prefix}/usr" + + bpftool_path="" + if [[ -x "${prefix}/sbin/bpftool" ]]; then + bpftool_path="${prefix}/sbin/bpftool" + elif [[ -x "${prefix}/bin/bpftool" ]]; then + bpftool_path="${prefix}/bin/bpftool" + else + echo "bpftool was not staged under ${prefix}" >&2 + find "${prefix}" -maxdepth 4 -type f -name bpftool -print >&2 || true + exit 1 + fi + + libbpf_pc=$(find "${prefix}" -path '*/pkgconfig/libbpf.pc' -print -quit) + if [[ -z "${libbpf_pc}" ]]; then + echo "libbpf.pc was not staged under ${prefix}" >&2 + find "${prefix}" -maxdepth 5 -type f -name 'libbpf*' -print >&2 || true + exit 1 + fi + + sed -i "s|^prefix=.*|prefix=${prefix}|" "${libbpf_pc}" + echo "Using staged bpftool: ${bpftool_path}" + echo "Using staged libbpf.pc: ${libbpf_pc}" + cat "${libbpf_pc}" + + - name: Export source-built bpftool and libbpf environment + run: | + set -euo pipefail + echo "PATH=${BPFTOOLS_PREFIX}/bin:${BPFTOOLS_PREFIX}/sbin:${PATH}" >> "${GITHUB_ENV}" + echo "LD_LIBRARY_PATH=${BPFTOOLS_PREFIX}/lib:${BPFTOOLS_PREFIX}/lib64:${LD_LIBRARY_PATH:-}" >> "${GITHUB_ENV}" + echo "CMAKE_PREFIX_PATH=${BPFTOOLS_PREFIX}:${CMAKE_PREFIX_PATH:-}" >> "${GITHUB_ENV}" + echo "PKG_CONFIG_PATH=${BPFTOOLS_PREFIX}/lib/pkgconfig:${BPFTOOLS_PREFIX}/lib64/pkgconfig:${PKG_CONFIG_PATH:-}" >> "${GITHUB_ENV}" + + - name: Verify runner supports systemd services + run: | + set -euo pipefail + systemctl --version + test -d /run/systemd/system + + - name: Record datacrumbs-utils revision + run: | + set -euo pipefail + echo "DATACRUMBS_UTILS_REF=$(git -C "${GITHUB_WORKSPACE}/datacrumbs-utils" rev-parse HEAD)" >> "${GITHUB_ENV}" + + - name: Configure datacrumbs + run: | + set -euo pipefail + cmake -S "${GITHUB_WORKSPACE}/datacrumbs" -B "${BUILD_DIR}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ + -DBPFTOOL_EXECUTABLE="$(command -v bpftool)" \ + -DDATACRUMBS_HOST=docker \ + -DDATACRUMBS_SCHEDULER_TYPE=SLURM \ + -DDATACRUMBS_USER="${USER}" \ + -DDATACRUMBS_INSTALL_USER="${USER}" \ + -DDATACRUMBS_CONFIGURED_LOG_DIR="${LOG_DIR}" \ + -DDATACRUMBS_CONFIGURED_TRACE_DIR="${TRACE_DIR}" \ + -DDATACRUMBS_KERNEL_HEADERS_PATH="/usr/src/linux-headers-$(uname -r)" \ + -DDATACRUMBS_UTILS_GIT_REPOSITORY="file://${GITHUB_WORKSPACE}/datacrumbs-utils" \ + -DDATACRUMBS_UTILS_GIT_REF="${DATACRUMBS_UTILS_REF}" + + - name: Build datacrumbs + run: | + set -euo pipefail + cmake --build "${BUILD_DIR}" -j"$(nproc)" + + - name: Install datacrumbs + run: | + set -euo pipefail + sudo cmake --install "${BUILD_DIR}" + + - name: Run system configurator explicitly + run: | + set -euo pipefail + sudo "${INSTALL_PREFIX}/bin/datacrumbs_system_configurator" + + - name: Install and start systemd units + run: | + set -euo pipefail + sudo ln -sf "${INSTALL_PREFIX}/etc/datacrumbs/systemd/datacrumbs_sign_probes.service" /etc/systemd/system/datacrumbs_sign_probes.service + sudo ln -sf "${INSTALL_PREFIX}/etc/datacrumbs/systemd/datacrumbs@.service" /etc/systemd/system/datacrumbs@.service + sudo systemctl daemon-reload + sudo systemctl enable --now datacrumbs_sign_probes.service + sudo systemctl status --no-pager datacrumbs_sign_probes.service + + - name: Generate signed probes + run: | + set -euo pipefail + test -f "${CONFIG_YAML}" + rm -f "${PROBE_FILE}" + "${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator" "${CONFIG_YAML}" "${PROBE_FILE}" + test -s "${PROBE_FILE}" + + - name: Run datacrumbs wrapper flow and verify logs + run: | + set -euo pipefail + service_user="${USER}" + log_file="${LOG_DIR}/datacrumbs_${service_user}_${JOB_ID}_$(hostname).log" + + cleanup() { + "${INSTALL_PREFIX}/bin/datacrumbs_service_wrapper" stop "${JOB_ID}" "${service_user}" "${PROBE_FILE}" || true + sudo systemctl status --no-pager "datacrumbs@${JOB_ID}.service" || true + sudo journalctl -u "datacrumbs@${JOB_ID}.service" --no-pager -n 200 || true + sudo journalctl -u datacrumbs_sign_probes.service --no-pager -n 200 || true + } + trap cleanup EXIT + + rm -f "${OUT_FILE}" + "${INSTALL_PREFIX}/bin/datacrumbs_service_wrapper" start "${JOB_ID}" "${service_user}" "${PROBE_FILE}" + sudo systemctl is-active --quiet "datacrumbs@${JOB_ID}.service" + + "${INSTALL_PREFIX}/bin/datacrumbs_wrap" \ + dd if=/dev/zero of="${OUT_FILE}" bs=1M count=16 status=none + + test -f "${OUT_FILE}" + test "$(wc -c <"${OUT_FILE}")" = "16777216" + + sleep 5 + "${INSTALL_PREFIX}/bin/datacrumbs_service_wrapper" stop "${JOB_ID}" "${service_user}" "${PROBE_FILE}" + trap - EXIT + + ! sudo systemctl is-active --quiet "datacrumbs@${JOB_ID}.service" + test -s "${log_file}" + grep -q . "${log_file}" + tail -n 50 "${log_file}" + + - name: Upload datacrumbs logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: datacrumbs-ubuntu-24.04-logs + path: | + /tmp/datacrumbs-logs + /tmp/datacrumbs-traces + /tmp/datacrumbs-ci-probes.json.gz + /tmp/datacrumbs-ci-output.bin + if-no-files-found: ignore diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 47c797b2..275d72b8 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -12,6 +12,16 @@ jobs: steps: - uses: actions/checkout@v4 + with: + path: datacrumbs + + - name: Checkout datacrumbs-utils + uses: actions/checkout@v4 + with: + repository: llnl/datacrumbs-utils + ref: main + fetch-depth: 1 + path: datacrumbs-utils - name: Set up Go uses: actions/setup-go@v5 @@ -33,8 +43,8 @@ jobs: - name: Install cmake-format run: | sudo apt-get install -y python3-pip - sudo pip3 install cmake-format + sudo pip3 install cmakelang PyYAML - name: Test formatting run: | - ./scripts/formatting/check-formatting.sh /usr/bin/clang-format-19 \ No newline at end of file + ./datacrumbs-utils/scripts/formatting/check-formatting.sh /usr/bin/clang-format-19 ./datacrumbs diff --git a/.gitignore b/.gitignore index bd7f5899..dee36476 100755 --- a/.gitignore +++ b/.gitignore @@ -82,4 +82,5 @@ deps # Sphinx documentation builds docs/_build/ -docs/_static/__pycache__/ \ No newline at end of file +docs/_static/__pycache__/ +.vscode \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100755 index 5aa19655..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "type": "lldb", - "request": "launch", - "name": "Launch", - "program": "/usr/workspace/haridev/datacrumbs/deps/install/bin/bpftime", - "args": [ - "--install-location", - "/usr/WS2/haridev/datacrumbs/deps/install/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" - ], - "env": { - "BPFTIME_SHM_MEMORY_MB": "10240", - "BPFTIME_MAX_FD_COUNT": "128000", - "LD_LIBRARY_PATH": "/usr/workspace/haridev/datacrumbs/deps/install/lib:/usr/workspace/haridev/datacrumbs/build/lib:/usr/workspace/haridev/datacrumbs/build/deps/install/lib:/opt/cray/pe/gcc/11.2.0/snos/lib64:/opt/cray/pe/lib64:/opt/cray/lib64:/opt/cray/pe/papi/7.2.0.2/lib64:/opt/cray/libfabric/2.1/lib64" - }, - "cwd": "${workspaceFolder}", - "initCommands": [ - "settings set target.process.follow-fork-mode child" - ] - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100755 index 6d343ec1..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "editor.formatOnSave": true, - "files.associations": { - "string": "cpp", - "numbers": "c", - "example.h": "c", - "stdexcept": "cpp", - "cctype": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "csignal": "cpp", - "cstdarg": "cpp", - "cstddef": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "ctime": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "any": "cpp", - "array": "cpp", - "atomic": "cpp", - "strstream": "cpp", - "bit": "cpp", - "bitset": "cpp", - "charconv": "cpp", - "chrono": "cpp", - "cinttypes": "cpp", - "codecvt": "cpp", - "compare": "cpp", - "complex": "cpp", - "concepts": "cpp", - "condition_variable": "cpp", - "cstdint": "cpp", - "deque": "cpp", - "forward_list": "cpp", - "list": "cpp", - "map": "cpp", - "set": "cpp", - "unordered_map": "cpp", - "unordered_set": "cpp", - "vector": "cpp", - "exception": "cpp", - "algorithm": "cpp", - "functional": "cpp", - "iterator": "cpp", - "memory": "cpp", - "memory_resource": "cpp", - "numeric": "cpp", - "optional": "cpp", - "random": "cpp", - "ratio": "cpp", - "regex": "cpp", - "string_view": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "utility": "cpp", - "fstream": "cpp", - "initializer_list": "cpp", - "iomanip": "cpp", - "iosfwd": "cpp", - "iostream": "cpp", - "istream": "cpp", - "limits": "cpp", - "mutex": "cpp", - "new": "cpp", - "ostream": "cpp", - "semaphore": "cpp", - "shared_mutex": "cpp", - "span": "cpp", - "sstream": "cpp", - "stop_token": "cpp", - "streambuf": "cpp", - "thread": "cpp", - "typeindex": "cpp", - "typeinfo": "cpp", - "valarray": "cpp", - "variant": "cpp", - "*.inc": "cpp", - "shared.h": "c", - "common.h": "c", - "format": "cpp", - "text_encoding": "cpp", - "example.generic.bpf.h": "c", - "sysio.bpf.h": "c", - "macros.bpf.h": "c", - "bpf_core_read.h": "c", - "bpf_helpers.h": "c" - } -} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index e8e44f84..c97dacc4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,30 +50,65 @@ set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${CMAKE_BINARY_DIR} ${CMAKE_INSTALL_P include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) include_directories(${CMAKE_BINARY_DIR}/include) -include_directories(${DATACRUMBS_INSTALL_LIBEXEC}) include_directories(${CMAKE_BINARY_DIR}/libexec) +find_package(Python3 COMPONENTS Interpreter REQUIRED) +include(ExternalProject) + +set(_DATACRUMBS_UTILS_GITHUB_REPOSITORY_DEFAULT + "https://github.com/LLNL/datacrumbs-utils.git" +) + +set( + DATACRUMBS_UTILS_GIT_REPOSITORY + "${_DATACRUMBS_UTILS_GITHUB_REPOSITORY_DEFAULT}" + CACHE STRING "GitHub repository URL for datacrumbs-utils" FORCE +) +set( + DATACRUMBS_UTILS_GIT_REF + "main" + CACHE STRING "Git branch, tag, or commit used for datacrumbs-utils bootstrap" +) +set( + DATACRUMBS_UTILS_SOURCE_DIR + "${CMAKE_BINARY_DIR}/_deps/datacrumbs-utils-src" + CACHE PATH "Path to the datacrumbs-utils source tree" FORCE +) +set( + DATACRUMBS_UTILS_BUILD_DIR + "${CMAKE_BINARY_DIR}/_deps/datacrumbs-utils-build" + CACHE PATH "Path to the datacrumbs-utils build tree" FORCE +) +set( + DATACRUMBS_UTILS_INSTALL_PREFIX + "${CMAKE_INSTALL_PREFIX}" + CACHE PATH "Path to the datacrumbs-utils install prefix" +) + # ------------------------------------------------------------------------------ # Options for CMake # ------------------------------------------------------------------------------ option(DATACRUMBS_BPFTIME_COMPATIBLE "Enable compatibility with bpftime" OFF) option(DATACRUMBS_ENABLE_OPT "Enable tracing" ON) 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") -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)") set_property(CACHE DATACRUMBS_MODE_STR PROPERTY STRINGS TRACE PROFILE) # options for managing installation set(BPFTOOL_EXECUTABLE "NONE" CACHE STRING "Path to bpftool executable") -set(DATACRUMBS_HOST "NONE" CACHE STRING "Host name for datacrumbs (numbers will be stripped if not set)") -set(DATACRUMBS_USER "$ENV{USER}" CACHE STRING "User name for datacrumbs (default: current environment user)") -set(DATACRUMBS_INSTALL_USER "$ENV{USER}" CACHE STRING "Installation user name for datacrumbs (used in file naming)") + +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") +set(DATACRUMBS_HOST "NONE" CACHE STRING "Host name for datacrumbs") +set(DATACRUMBS_USER "$ENV{USER}" CACHE STRING "User name for datacrumbs") +set(DATACRUMBS_INSTALL_USER "$ENV{USER}" CACHE STRING "Installation user name for datacrumbs") +set(DATACRUMBS_SCHEDULER_TYPE "FLUX" CACHE STRING "Scheduler type for datacrumbs") +set_property(CACHE DATACRUMBS_SCHEDULER_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_RUN_EXTRA_ARGS "" CACHE STRING "Scheduler run extra args") # Configure Make steps option(DATACRUMBS_SKIP_PROBE_EXPLORING "Skip building the probe explorer executable" OFF) @@ -81,27 +116,16 @@ option(DATACRUMBS_SKIP_PROBE_GENERATION "Skip building the probe generator execu # Tracing Options set(DATACRUMBS_TRACE_RINGBUF_SIZE_MB "16" CACHE STRING "Ring buffer size in MB for BPF tracing") +set(DATACRUMBS_MAX_RUNTIME_FUNCTIONS "16384" CACHE STRING "Maximum number of runtime functions supported in one probes file") set(DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS "1000" CACHE STRING "Threshold in microseconds for skipping events") # 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) -set(DATACRUMBS_KERNEL_VERSION "" CACHE STRING "Kernel version") -set(DATACRUMBS_KERNEL_HEADERS_PATH "" CACHE STRING "Path to the kernel headers directory") option(DATACRUMBS_BUILD_ONLY "Build only the datacrumbs library without installation" OFF) -set(DATACRUMBS_KERNEL_PATH "" CACHE STRING "Path to the kernel source directory") # ------------------------------------------------------------------------------ # Derive CMake variables based on options @@ -116,6 +140,83 @@ derive_configurations() find_system_details() # ------------------------------------------------------------------------------ +set(DATACRUMBS_INSTALL_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}") +set(DATACRUMBS_INSTALL_HOST "${DATACRUMBS_HOST}") +set(DATACRUMBS_INSTALL_CONFIGS_DIR "${DATACRUMBS_INSTALL_ETC_CONFIGSDIR}") +set(DATACRUMBS_INSTALL_SHARED_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/datacrumbs/data") +set(DATACRUMBS_INSTALL_DATA_DIR "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}") +set(DATACRUMBS_SYSTEM_PROBE_FILE + "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/system-probe-${DATACRUMBS_INSTALL_USER}-${DATACRUMBS_HOST}.json.gz" +) +set(DATACRUMBS_PROBE_SECRET_FILE + "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/.datacrumbs-probe-secret" +) +set(DATACRUMBS_SIGN_PROBES_SOCKET_PATH + "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/datacrumbs-sign-probes.sock" +) +set(DATACRUMBS_TRACE_DIR_PATTERN "${DATACRUMBS_CONFIGURED_TRACE_DIR}/%YY%/%MM%/%DD%") +set(DATACRUMBS_CLIENT_LIB "${DATACRUMBS_UTILS_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libdatacrumbs_client.so") +set(DATACRUMBS_JOB_SCHEDULER "${DATACRUMBS_SCHEDULER_TYPE}") +set(DATACRUMBS_JOB_OTHER_FLAGS "${DATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS}") +set(DATACRUMBS_JOB_ID_VAR "${DATACRUMBS_SCHEDULER_JOBID_ENV_VAR}") +if(DATACRUMBS_ENABLE_INCLUSION_PATH) + set(DATACRUMBS_INCLUSION_PATHS "${DATACRUMBS_INCLUSION_PATH}") +else() + set(DATACRUMBS_INCLUSION_PATHS "") +endif() +set(DATACRUMBS_SERVER_RUN_DIR "${DATACRUMBS_INSTALL_RUNSTATEDIR}/datacrumbs") +set(DATACRUMBS_SERVER_RUN_ID_FILE "${DATACRUMBS_SERVER_RUN_DIR}/datacrumbs.runid") + +set(DATACRUMBS_SYSTEM_CONFIGURATION_DEFINE_KEYS + DATACRUMBS_INSTALL_PREFIX + DATACRUMBS_INSTALL_HOST + DATACRUMBS_INSTALL_USER + DATACRUMBS_INSTALL_BIN_DIR + DATACRUMBS_INSTALL_SBIN_DIR + DATACRUMBS_INSTALL_LIB_DIR + DATACRUMBS_INSTALL_LIBEXEC_DIR + DATACRUMBS_INSTALL_ETC_DIR + DATACRUMBS_INSTALL_DATA_DIR + DATACRUMBS_INSTALL_MODULES_DIR + DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR + DATACRUMBS_CLIENT_LIB + DATACRUMBS_JOB_SCHEDULER + DATACRUMBS_JOB_OTHER_FLAGS + DATACRUMBS_JOB_ID_VAR + DATACRUMBS_SERVER_RUN_DIR + DATACRUMBS_CONFIGURED_TRACE_DIR + DATACRUMBS_USER + DATACRUMBS_INCLUSION_PATHS + DATACRUMBS_KERNEL_UNAME_R + DATACRUMBS_KERNEL_HEADERS_PATH + DATACRUMBS_LIBC_SO +) + +set(DATACRUMBS_INSTALL_PREFIX "${DATACRUMBS_INSTALL_PREFIX_PATH}") +set(DATACRUMBS_INSTALL_BIN_DIR "${DATACRUMBS_INSTALL_BINARYDIR}") +set(DATACRUMBS_INSTALL_SBIN_DIR "${DATACRUMBS_INSTALL_SBINARYDIR}") +set(DATACRUMBS_INSTALL_LIBEXEC_DIR "${DATACRUMBS_INSTALL_LIBEXEC}") +set(DATACRUMBS_INSTALL_ETC_DIR "${DATACRUMBS_INSTALL_SYSCONFDIR}") +set(DATACRUMBS_INSTALL_MODULES_DIR "${DATACRUMBS_INSTALL_ETC_MODULESDIR}") +set(DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR "${DATACRUMBS_INSTALL_LIBEXEC}/objects") + +set(DATACRUMBS_SYSTEM_CONFIGURATION_DEFINES "") +foreach(_dc_key IN LISTS DATACRUMBS_SYSTEM_CONFIGURATION_DEFINE_KEYS) + if(NOT DEFINED ${_dc_key}) + continue() + endif() + set(_dc_value "${${_dc_key}}") + if("${_dc_value}" STREQUAL "") + continue() + endif() + if(_dc_value MATCHES "^[+-]?[0-9]+$") + string(APPEND DATACRUMBS_SYSTEM_CONFIGURATION_DEFINES "#define ${_dc_key} ${_dc_value}\n") + else() + string(REPLACE "\\" "\\\\" _dc_escaped "${_dc_value}") + string(REPLACE "\"" "\\\"" _dc_escaped "${_dc_escaped}") + string(APPEND DATACRUMBS_SYSTEM_CONFIGURATION_DEFINES "#define ${_dc_key} \"${_dc_escaped}\"\n") + endif() +endforeach() # ------------------------------------------------------------------------------ # Generate Header file for all sources with compile definitions @@ -126,6 +227,7 @@ message(STATUS " - DATACRUMBS_BPFTIME_COMPATIBLE: ${DATACRUMBS_BPFTI message(STATUS " - DATACRUMBS_MODE: ${DATACRUMBS_MODE}") message(STATUS " - DATACRUMBS_ENABLE: ${DATACRUMBS_ENABLE}") message(STATUS " - DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS: ${DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS}") +message(STATUS " - DATACRUMBS_MAX_RUNTIME_FUNCTIONS: ${DATACRUMBS_MAX_RUNTIME_FUNCTIONS}") message(STATUS " - DATACRUMBS_TRACE_ALL_PROCESSES: ${DATACRUMBS_TRACE_ALL_PROCESSES}") message(STATUS " - DATACRUMBS_TIME_INTERVAL_NS: ${DATACRUMBS_TIME_INTERVAL_NS}") message(STATUS " - DATACRUMBS_BPF_PRINT_ENABLE_FLAG: ${DATACRUMBS_BPF_PRINT_ENABLE_FLAG}") @@ -135,7 +237,6 @@ message(STATUS " - DATACRUMBS_TRACE_RINGBUF_SIZE_MB: ${DATACRUMBS_TR message(STATUS " - DATACRUMBS_SRC_GEN_PATH: ${DATACRUMBS_SRC_GEN_PATH}") message(STATUS " - DATACRUMBS_LIBC_SO: ${DATACRUMBS_LIBC_SO}") -message(STATUS " - DATACRUMBS_BUILD_CLIENT_SO: ${DATACRUMBS_BUILD_CLIENT_SO}") message(STATUS " - DATACRUMBS_CONFIG_PATH: ${DATACRUMBS_CONFIG_PATH}") message(STATUS " - DATACRUMBS_LOG_DIR: ${DATACRUMBS_LOG_DIR}") @@ -145,49 +246,24 @@ message(STATUS " - Kernel Version: ${KERNEL_VERSION_MAJOR}.${KERNEL_ message(STATUS " - DATACRUMBS_BUILD_ONLY: ${DATACRUMBS_BUILD_ONLY}") message(STATUS " - DATACRUMBS_INSTALL_USER: ${DATACRUMBS_INSTALL_USER}") message(STATUS " - DATACRUMBS_USER: ${DATACRUMBS_USER}") -message(STATUS " - DATACRUMBS_KERNEL_VERSION: ${DATACRUMBS_KERNEL_VERSION}") message(STATUS " - Found kernel headers at: ${DATACRUMBS_KERNEL_HEADERS_PATH}") 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}") -endif() - -if(NOT EXISTS "${DATACRUMBS_CONFIGURED_LOG_DIR}") - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] DATACRUMBS_CONFIGURED_LOG_DIR does not exist: ${DATACRUMBS_CONFIGURED_LOG_DIR}") -endif() +message(STATUS " - DATACRUMBS_SYSTEM_PROBE_FILE: ${DATACRUMBS_SYSTEM_PROBE_FILE}") +message(STATUS " - DATACRUMBS_PROBE_SECRET_FILE: ${DATACRUMBS_PROBE_SECRET_FILE}") # ------------------------------------------------------------------------------ # Configure output files for build # ------------------------------------------------------------------------------ configure_file("${CMAKE_SOURCE_DIR}/cmake/configure_files/datacrumbs_config.h.in" "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/datacrumbs/datacrumbs_config.h" @ONLY) -configure_file("${CMAKE_SOURCE_DIR}/cmake/configure_files/datacrumbs_config.h.in" - "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/include/datacrumbs/datacrumbs_config.h" @ONLY) -install(FILES "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/datacrumbs/datacrumbs_config.h" - DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/composable/include/datacrumbs/") - -configure_file("${CMAKE_SOURCE_DIR}/etc/datacrumbs/configs/${DATACRUMBS_HOST}.yaml" - "${CMAKE_CONFIG_OUTPUT_DIRECTORY}/${DATACRUMBS_HOST}.yaml" @ONLY) - -file(GLOB _DATACRUMBS_DATA_FILES_COPY - "${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/data/*${DATACRUMBS_USER}-${DATACRUMBS_HOST}*.json" -) - -if(_DATACRUMBS_DATA_FILES_COPY) - file(COPY ${_DATACRUMBS_DATA_FILES_COPY} - DESTINATION "${CMAKE_DATA_OUTPUT_DIRECTORY}" - ) -else() - message(WARNING "[${UPPER_PROJECT_NAME}] No data files to copy for user '${DATACRUMBS_USER}' and host '${DATACRUMBS_HOST}'") -endif() +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/plugins/custom_probes/custom_probes.h.in" + "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/custom_probes.h" @ONLY) +configure_file("${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/plugins/custom_probes/custom_probes_process.h.in" + "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/custom_probes_process.h" @ONLY) # ------------------------------------------------------------------------------ # Make output directories @@ -195,8 +271,6 @@ endif() file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/server/process/) file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/server/bpf/objects/) file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/server/bpf/src/) -file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/validator/bpf/objects/) -file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/validator/bpf/src/) file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/objects/) # ------------------------------------------------------------------------------ @@ -206,6 +280,62 @@ file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/objects/) # ------------------------------------------------------------------------------ include_dependencies() +ExternalProject_Add( + datacrumbs_utils_external + PREFIX "${CMAKE_BINARY_DIR}/_deps/datacrumbs-utils" + GIT_REPOSITORY "${DATACRUMBS_UTILS_GIT_REPOSITORY}" + GIT_TAG "${DATACRUMBS_UTILS_GIT_REF}" + GIT_SHALLOW FALSE + GIT_REMOTE_UPDATE_STRATEGY CHECKOUT + GIT_SUBMODULES "" + GIT_SUBMODULES_RECURSE FALSE + UPDATE_DISCONNECTED FALSE + SOURCE_DIR "${DATACRUMBS_UTILS_SOURCE_DIR}" + BINARY_DIR "${DATACRUMBS_UTILS_BUILD_DIR}" + INSTALL_DIR "${DATACRUMBS_UTILS_INSTALL_PREFIX}" + CMAKE_ARGS + "-DCMAKE_INSTALL_PREFIX=${DATACRUMBS_UTILS_INSTALL_PREFIX}" + "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/bin" + "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR}" + "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR}" + "-DCMAKE_INCLUDE_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/include" + "-DCMAKE_CONFIG_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/configs" + "-DCMAKE_DATA_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/data" + "-DCMAKE_LIBEXEC_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/libexec/${PROJECT_NAME}" + "-DCMAKE_ETC_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}" + "-DCMAKE_MODULES_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/modulefiles" + "-DCMAKE_FLUX_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/flux" + "-DCMAKE_SYSTEMD_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/systemd" + "-DDATACRUMBS_PROJECT_PATH=${CMAKE_CURRENT_SOURCE_DIR}" + "-DDATACRUMBS_UTILS_PROJECT_PATH=" + "-DDATACRUMBS_HOST=${DATACRUMBS_HOST}" + "-DDATACRUMBS_USER=${DATACRUMBS_USER}" + "-DDATACRUMBS_INSTALL_USER=${DATACRUMBS_INSTALL_USER}" + "-DDATACRUMBS_INCLUSION_PATH=${DATACRUMBS_INCLUSION_PATH}" + "-DDATACRUMBS_CONFIGURED_TRACE_DIR=${DATACRUMBS_CONFIGURED_TRACE_DIR}" + "-DDATACRUMBS_CONFIGURED_LOG_DIR=${DATACRUMBS_CONFIGURED_LOG_DIR}" + "-DDATACRUMBS_CONFIGURED_RUN_DIR=${DATACRUMBS_CONFIGURED_RUN_DIR}" + "-DDATACRUMBS_SCHEDULER_TYPE=${DATACRUMBS_SCHEDULER_TYPE}" + "-DDATACRUMBS_SCHEDULER_JOBID_ENV_VAR=${DATACRUMBS_SCHEDULER_JOBID_ENV_VAR}" + "-DDATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS=${DATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS}" + "-DDATACRUMBS_LOG_LEVEL_STR=${DATACRUMBS_LOG_LEVEL_STR}" + "-DDATACRUMBS_MODE_STR=${DATACRUMBS_MODE_STR}" + "-DDATACRUMBS_ENABLE_OPT=${DATACRUMBS_ENABLE_OPT}" + "-DDATACRUMBS_TRACE_ALL_PROCESSES_OPT=${DATACRUMBS_TRACE_ALL_PROCESSES_OPT}" + "-DDATACRUMBS_BPF_PRINT_ENABLE=${DATACRUMBS_BPF_PRINT_ENABLE}" + "-DDATACRUMBS_KERNEL_HEADERS_PATH=${DATACRUMBS_KERNEL_HEADERS_PATH}" + "-DDATACRUMBS_KERNEL_VERSION=${DATACRUMBS_KERNEL_VERSION}" + BUILD_COMMAND + "${CMAKE_COMMAND}" --build "" --clean-first + INSTALL_COMMAND + "${CMAKE_COMMAND}" --build "" --target install + USES_TERMINAL_DOWNLOAD TRUE + USES_TERMINAL_UPDATE TRUE + USES_TERMINAL_BUILD TRUE +) + +add_custom_target(datacrumbs_utils_install DEPENDS datacrumbs_utils_external) + # print_all_variables() # ------------------------------------------------------------------------------ @@ -213,79 +343,47 @@ include_dependencies() # Sources for Datacrumbs Components # ------------------------------------------------------------------------------ set(DATACRUMBS_COMMON_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/configuration_manager.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/configuration_manager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/data_structures.h ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/enumerations.h ) -# Datacrumbs client -set(DATACRUMBS_CLIENT_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/client/library.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/client/library.h) -add_library(${PROJECT_NAME}_client SHARED ${DATACRUMBS_CLIENT_SRC}) -message(STATUS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) -set_target_properties(${PROJECT_NAME}_client PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} +set(DATACRUMBS_SYSTEM_CONFIGURATOR_SRC + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/system_configurator/system_configurator_main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/system_configurator/system_configurator.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/system_configurator/system_configurator.h ) -install(TARGETS ${PROJECT_NAME}_client - LIBRARY DESTINATION ${DATACRUMBS_INSTALL_LIB_DIR} +set(DATACRUMBS_SIGN_PROBES_SERVICE_SRC + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/signer/sign_probes_service_main.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/signer/sign_probes_service.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/signer/sign_probes_service.h ) -# Datacrumbs explorer -set(DATACRUMBS_EXPLORER_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/probe_explorer.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/probe_explorer.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/mechanism/elf_capture.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/mechanism/elf_capture.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/mechanism/header_capture.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/mechanism/header_capture.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/mechanism/ksym_capture.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/mechanism/ksym_capture.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/explorer/mechanism/usdt_functions.h -) -add_executable(${PROJECT_NAME}_explorer ${DATACRUMBS_EXPLORER_SRC} ${DATACRUMBS_COMMON_SRC}) -target_link_libraries(${PROJECT_NAME}_explorer ${DEPENDENCY_LIB}) -add_dependencies(${PROJECT_NAME}_explorer ${PROJECT_NAME}_client clean_all) - -if(NOT DEFINED DATACRUMBS_SKIP_PROBE_EXPLORING OR NOT DATACRUMBS_SKIP_PROBE_EXPLORING) - add_custom_target(run_explorer - COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}_explorer ${DATACRUMBS_HOST} ${DATACRUMBS_VARS} - DEPENDS ${PROJECT_NAME}_explorer - COMMENT "Running ${PROJECT_NAME}_explorer with argument '${DATACRUMBS_HOST}'" - ) -else() - add_custom_target(run_explorer - COMMAND ${CMAKE_COMMAND} -E echo "Dummy run_explorer target skipped probe exploration" - COMMENT "Dummy run_explorer target: probe exploration is skipped" - ) -endif() - -add_dependencies(run_explorer ${PROJECT_NAME}_client) - -# Datacrumbs generator -set(DATACRUMBS_GENERATOR_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/generator/generator.cpp +add_executable(datacrumbs_system_configurator ${DATACRUMBS_SYSTEM_CONFIGURATOR_SRC} ${DATACRUMBS_COMMON_SRC}) +target_link_libraries(datacrumbs_system_configurator ${DEPENDENCY_LIB}) +add_dependencies(datacrumbs_system_configurator datacrumbs_utils_install) +install(TARGETS datacrumbs_system_configurator + RUNTIME DESTINATION "${DATACRUMBS_INSTALL_BINARYDIR}" ) -add_executable(${PROJECT_NAME}_generator ${DATACRUMBS_GENERATOR_SRC} ${DATACRUMBS_COMMON_SRC}) -target_link_libraries(${PROJECT_NAME}_generator ${DEPENDENCY_LIB}) -add_dependencies(${PROJECT_NAME}_generator ${PROJECT_NAME}_explorer) -if(NOT DEFINED DATACRUMBS_SKIP_PROBE_GENERATION OR NOT DATACRUMBS_SKIP_PROBE_GENERATION) - add_custom_target(run_generator - COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}_generator ${DATACRUMBS_HOST} ${DATACRUMBS_VARS} - DEPENDS ${PROJECT_NAME}_generator - COMMENT "Running ${PROJECT_NAME}_generator with argument '${DATACRUMBS_HOST}'" - ) - add_dependencies(${PROJECT_NAME}_generator ${PROJECT_NAME}_explorer) - add_dependencies(run_generator run_explorer) -else() - add_custom_target(run_generator - COMMAND ${CMAKE_COMMAND} -E echo "Dummy run_generator target skipped probe generation" - COMMENT "Dummy run_generator target: probe generation is skipped" - ) -endif() +add_executable(datacrumbs_sign_probes ${DATACRUMBS_SIGN_PROBES_SERVICE_SRC} ${DATACRUMBS_COMMON_SRC}) +target_link_libraries(datacrumbs_sign_probes ${DEPENDENCY_LIB}) +add_dependencies(datacrumbs_sign_probes datacrumbs_utils_install run_system_configurator) +install(TARGETS datacrumbs_sign_probes + RUNTIME DESTINATION "${DATACRUMBS_INSTALL_BINARYDIR}" +) -add_dependencies(${PROJECT_NAME}_generator ${PROJECT_NAME}_explorer) -add_dependencies(run_generator run_explorer) +add_custom_target( + run_system_configurator ALL + COMMAND + ${CMAKE_COMMAND} + -DDATACRUMBS_SYSTEM_PROBE_FILE=${DATACRUMBS_SYSTEM_PROBE_FILE} + -DDATACRUMBS_PROBE_SECRET_FILE=${DATACRUMBS_PROBE_SECRET_FILE} + -DDATACRUMBS_SYSTEM_CONFIGURATOR_BIN=$ + -P + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run_system_configurator_if_missing.cmake + DEPENDS datacrumbs_system_configurator datacrumbs_utils_install + COMMENT "Generating install-time system configuration and probe secret" +) # Generate vmlinux.h from vmlinux BTF set(VMLINUX_HEADER "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/datacrumbs/server/bpf/vmlinux.h") @@ -315,51 +413,36 @@ set(DATACRUMBS_BPF_INCLUDE_PATHS ${DATACRUMBS_INSTALL_LIBEXEC} ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/src + ${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/plugins/custom_probes ) -set(DATACRUMBS_BPF_INCLUDE_FLAGS "") - -foreach(path IN LISTS DATACRUMBS_BPF_INCLUDE_PATHS) - list(APPEND DATACRUMBS_BPF_INCLUDE_FLAGS -I${path}) -endforeach() - -# Read the YAML config file and extract the list of probe names under capture_probes -file(READ "${DATACRUMBS_CONFIG_PATH}/${DATACRUMBS_HOST}.yaml" DATACRUMBS_CONFIG_YAML) - -# Extract the capture_probes block and get all names under it -set(DATACRUMBS_CAPTURE_PROBES_LIST "") - -# Find the capture_probes block -string(REGEX MATCH "capture_probes:[^\n]*\n([^\n]*\n)*" _CAPTURE_PROBES_BLOCK "${DATACRUMBS_CONFIG_YAML}") - -# Split the _CAPTURE_PROBES_BLOCK into lines -string(REPLACE "\n" ";" _CAPTURE_PROBES_LINES "${_CAPTURE_PROBES_BLOCK}") - -# If any line in _CAPTURE_PROBES_LINES contains 'name:', add it to _CAPTURE_PROBES_NAME_LINES -set(_CAPTURE_PROBES_NAME_LINES "") -foreach(_line ${_CAPTURE_PROBES_LINES}) - if(_line MATCHES "^[ ]*-[ ]*name:[ ]*") - list(APPEND _CAPTURE_PROBES_NAME_LINES "${_line}") +set(DATACRUMBS_MULTIARCH_INCLUDE_CANDIDATES + /usr/include/${CMAKE_LIBRARY_ARCHITECTURE} + /usr/include/x86_64-linux-gnu + /usr/include/aarch64-linux-gnu +) +foreach(path IN LISTS DATACRUMBS_MULTIARCH_INCLUDE_CANDIDATES) + if(EXISTS "${path}/asm/errno.h") + list(APPEND DATACRUMBS_BPF_INCLUDE_PATHS ${path}) + break() endif() endforeach() -foreach(_line ${_CAPTURE_PROBES_NAME_LINES}) - string(REGEX REPLACE "^[ ]*-[ ]*name:[ ]*" "" _probe_name "${_line}") +set(DATACRUMBS_BPF_INCLUDE_FLAGS "") - # message(STATUS "[${UPPER_PROJECT_NAME}] Capture probe name: ${_probe_name}") - list(APPEND DATACRUMBS_CAPTURE_PROBES_LIST "${_probe_name}") -endforeach() +file( + GLOB_RECURSE DATACRUMBS_CUSTOM_BPF_PLUGIN_FILES + "${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/plugins/custom_probes/*.h" + "${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/plugins/custom_probes/*.c" +) -message(STATUS "[${UPPER_PROJECT_NAME}] Capture probes: ${DATACRUMBS_CAPTURE_PROBES_LIST}") +foreach(path IN LISTS DATACRUMBS_BPF_INCLUDE_PATHS) + list(APPEND DATACRUMBS_BPF_INCLUDE_FLAGS -I${path}) +endforeach() list(APPEND DATACRUMBS_BPF_EXTRA_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/bpf/common.c) list(APPEND DATACRUMBS_BPF_EXTRA_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/bpf/init.bpf.c) - -# For each probe in DATACRUMBS_CAPTURE_PROBES_LIST, add probename.bpf.c to DATACRUMBS_BPF_EXTRA_SOURCES -foreach(_probe_name ${DATACRUMBS_CAPTURE_PROBES_LIST}) - set(_probe_bpf_c "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/server/bpf/src/${_probe_name}.bpf.c") - list(APPEND DATACRUMBS_BPF_EXTRA_SOURCES "${_probe_bpf_c}") -endforeach() +list(APPEND DATACRUMBS_BPF_EXTRA_SOURCES ${BPF_SOURCE}) # Find all .c source files in ${CMAKE_BINARY_DIR}/libexec/datacrumbs/server/bpf set(DATACRUMBS_BPF_OBJECTS "") @@ -378,7 +461,7 @@ foreach(BPF_SRC_FILE ${DATACRUMBS_BPF_EXTRA_SOURCES}) ${DATACRUMBS_BPF_INCLUDE_FLAGS} -c ${BPF_SRC_FILE} -o ${BPF_OBJ_FILE} - DEPENDS ${BPF_SRC_FILE} vmlinux_header run_generator + DEPENDS ${BPF_SRC_FILE} ${DATACRUMBS_CUSTOM_BPF_PLUGIN_FILES} vmlinux_header COMMENT "Compiling BPF object: ${BPF_OBJ_FILE} (timed)" VERBATIM ) @@ -390,6 +473,11 @@ endforeach() string(REPLACE ";" " " DATACRUMBS_BPF_OBJECTS_STR "${DATACRUMBS_BPF_OBJECTS}") +add_custom_target(datacrumbs_bpf_force_clean + COMMAND ${CMAKE_COMMAND} -E rm -f ${DATACRUMBS_BPF_OBJECTS} ${BPF_OUTPUT} ${BPF_SKEL_OUTPUT} + COMMENT "Removing stale BPF objects and skeleton before rebuild" +) + # Link all object files into a single object file add_custom_command( OUTPUT ${BPF_OUTPUT} @@ -402,9 +490,8 @@ add_custom_command( add_custom_target(datacrumbs_bpf ALL DEPENDS ${BPF_OUTPUT}) -if(NOT DEFINED DATACRUMBS_SKIP_PROBE_GENERATION OR NOT DATACRUMBS_SKIP_PROBE_GENERATION) - add_dependencies(datacrumbs_bpf vmlinux_header run_generator) -endif() +add_dependencies(datacrumbs_bpf vmlinux_header) +add_dependencies(datacrumbs_bpf datacrumbs_bpf_force_clean) # Generate Skeleton header for Datacrumbs set(BPF_SKEL_OUTPUT ${CMAKE_BINARY_DIR}/include/datacrumbs/server/bpf/datacrumbs.skel.h) @@ -421,6 +508,8 @@ add_dependencies(datacrumbs_bpf_skel datacrumbs_bpf) # Build object file with everything except server.cpp set(DATACRUMBS_PROCESS_EVENTS_OBJ_SRC + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/runtime_configuration_manager.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/runtime_configuration_manager.h ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/process/writer/chrome_writer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/process/event_processor.cpp ${DATACRUMBS_COMMON_SRC} @@ -436,12 +525,12 @@ target_link_libraries(datacrumbs_obj ${DEPENDENCY_LIB}) install(TARGETS datacrumbs_obj LIBRARY DESTINATION ${DATACRUMBS_INSTALL_LIB_DIR} ) -add_dependencies(datacrumbs_obj datacrumbs_bpf_skel) +add_dependencies(datacrumbs_obj datacrumbs_utils_install datacrumbs_bpf_skel run_system_configurator) # Build the final executable by linking server.cpp and the object library add_executable(${PROJECT_NAME} ${DATACRUMBS_SERVER_SRC}) target_link_libraries(${PROJECT_NAME} datacrumbs_obj ${DEPENDENCY_LIB}) -add_dependencies(${PROJECT_NAME} datacrumbs_bpf_skel datacrumbs_obj) +add_dependencies(${PROJECT_NAME} datacrumbs_utils_install datacrumbs_bpf_skel datacrumbs_obj run_system_configurator) # Install the main processing executable into DATACRUMBS_INSTALL_BINARYDIR install(TARGETS ${PROJECT_NAME} @@ -453,173 +542,15 @@ install(FILES ${BPF_OUTPUT} DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/objects" ) -set(DATACRUMBS_VALIDATE_BPF_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/validator/bpf/probe.bpf.c -) -set(DATACRUMBS_VALIDATE_BPF_OBJ_FILE ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/validator/bpf/objects/probe.bpf.o) -add_custom_command( - OUTPUT ${DATACRUMBS_VALIDATE_BPF_OBJ_FILE} - COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "Compiling BPF object: ${DATACRUMBS_VALIDATE_BPF_OBJ_FILE} (timed)" - COMMAND /usr/bin/time -f "Elapsed time for ${DATACRUMBS_VALIDATE_BPF_OBJ_FILE}: %E" ${CLANG_EXECUTABLE} - -target bpf - -D__TARGET_ARCH_${DATACRUMBS_ARCH} - -Wall -g -O2 - ${DATACRUMBS_BPF_INCLUDE_FLAGS} - -c ${DATACRUMBS_VALIDATE_BPF_SRC} - -o ${DATACRUMBS_VALIDATE_BPF_OBJ_FILE} - DEPENDS ${DATACRUMBS_VALIDATE_BPF_SRC} vmlinux_header - COMMENT "Compiling BPF object: ${DATACRUMBS_VALIDATE_BPF_OBJ_FILE} (timed)" - VERBATIM -) - -set(DATACRUMBS_VALIDATOR_BPF_OUTPUT ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/objects/validator.o) - -add_custom_command( - OUTPUT ${DATACRUMBS_VALIDATOR_BPF_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "Linking all BPF objects into ${DATACRUMBS_VALIDATOR_BPF_OUTPUT} (timed)" - COMMAND /usr/bin/time -f "Elapsed time for linking: %E" ${BPFTOOL_EXECUTABLE} gen object ${DATACRUMBS_VALIDATOR_BPF_OUTPUT} ${DATACRUMBS_VALIDATE_BPF_OBJ_FILE} - DEPENDS ${DATACRUMBS_VALIDATE_BPF_OBJ_FILE} - COMMENT "Linking all BPF objects into ${DATACRUMBS_VALIDATOR_BPF_OUTPUT} (timed)" - VERBATIM -) -add_custom_target(datacrumbs_validator_bpf ALL DEPENDS ${DATACRUMBS_VALIDATOR_BPF_OUTPUT}) -add_dependencies(datacrumbs_validator_bpf vmlinux_header) - -# Generate Skeleton header for Datacrumbs -set(DATACRUMBS_VALIDATOR_BPF_SKEL_OUTPUT ${CMAKE_BINARY_DIR}/include/datacrumbs/validator/bpf/datacrumbs_validator.skel.h) -add_custom_command( - OUTPUT ${DATACRUMBS_VALIDATOR_BPF_SKEL_OUTPUT} - COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/include/datacrumbs/validator/bpf - COMMAND ${BPFTOOL_EXECUTABLE} gen skeleton ${DATACRUMBS_VALIDATOR_BPF_OUTPUT} > ${DATACRUMBS_VALIDATOR_BPF_SKEL_OUTPUT} - DEPENDS ${DATACRUMBS_VALIDATOR_BPF_OUTPUT} - COMMENT "Generating BPF skeleton: ${DATACRUMBS_VALIDATOR_BPF_SKEL_OUTPUT}" - VERBATIM -) -add_custom_target(datacrumbs_validator_bpf_skel ALL DEPENDS ${DATACRUMBS_VALIDATOR_BPF_SKEL_OUTPUT}) -add_dependencies(datacrumbs_validator_bpf_skel datacrumbs_validator_bpf) - -# Processing Executable -set(DATACRUMBS_VALIDATOR_SRC - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/validator/probe_validator.cpp - ${DATACRUMBS_VALIDATOR_BPF_SKEL_OUTPUT} -) -add_executable(${PROJECT_NAME}_validator ${DATACRUMBS_VALIDATOR_SRC} ${DATACRUMBS_COMMON_SRC}) -target_link_libraries(${PROJECT_NAME}_validator ${DEPENDENCY_LIB}) -add_dependencies(${PROJECT_NAME}_validator datacrumbs_validator_bpf_skel) -add_dependencies(${PROJECT_NAME}_validator datacrumbs_bpf_skel) - -# Install the main processing executable into DATACRUMBS_INSTALL_BINARYDIR -install(TARGETS ${PROJECT_NAME}_validator - RUNTIME DESTINATION "${DATACRUMBS_INSTALL_SBINARYDIR}" -) - # ------------------------------------------------------------------------------ # Custom executables for Datacrumbs # ------------------------------------------------------------------------------ -if(NOT DEFINED DATACRUMBS_SKIP_PROBE_GENERATION OR NOT DATACRUMBS_SKIP_PROBE_GENERATION) - add_custom_target(clean_all - COMMAND ${CMAKE_COMMAND} -E rm -rf - ${BPF_OUTPUT} - ${BPF_SKEL_OUTPUT} - ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/datacrumbs - COMMENT "Cleaning BPF build artifacts (ignoring if cannot remove)" - ) -else() - add_custom_target(clean_all - COMMAND ${CMAKE_COMMAND} -E echo "Dummy clean_all target skipped cleaning BPF build artifacts" - COMMENT "Dummy clean_all target: skipping cleaning BPF build artifacts" - ) -endif() - -# ------------------------------------------------------------------------------ -# Install Files -# ------------------------------------------------------------------------------ - -# Compose cmake file -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/composable) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/datacrumbs-utils.cmake" - "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/cmake/modules/datacrumbs-utils.cmake" @ONLY) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/composable/CMakeLists.txt.in" - "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/CMakeLists.txt" @ONLY) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/composable/process/server.cpp" - "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/src/datacrumbs/composable/process/server.cpp" @ONLY) -install(FILES "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/cmake/modules/datacrumbs-utils.cmake" - DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/composable/cmake/modules" -) -install(FILES "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/CMakeLists.txt" - DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/composable" -) -install(FILES "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/composable/src/datacrumbs/composable/process/server.cpp" - DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/composable/src/datacrumbs/composable/process" -) -install(FILES "${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/server/process/generated_process.h" - DESTINATION "${DATACRUMBS_INSTALL_LIBEXEC}/composable/include/datacrumbs/server/process" -) - -# Install src and header files for composable components -set(DATACRUMBS_PUBLIC_HEADER_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/process/event_processor.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/process/writer/chrome_writer.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/process/compress/zlib_compressor.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/configuration_manager.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/data_structures.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/enumerations.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/logging.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/utils.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/constants.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/typedefs.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/bpf/shared.h - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/bpf/compat/map.h -) -set(DATACRUMBS_PUBLIC_SRC_FILES - ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/server/process/server.impl.cpp -) - -datacrumbs_composable_install_headers("${DATACRUMBS_PUBLIC_HEADER_FILES}") -datacrumbs_composable_install_src("${DATACRUMBS_PUBLIC_SRC_FILES}") - -# Install project configuration file -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/configs/project.env.local.in ${CMAKE_CONFIG_OUTPUT_DIRECTORY}/project.env.local @ONLY) -install( - FILES - ${CMAKE_CONFIG_OUTPUT_DIRECTORY}/project.env.local - DESTINATION - ${DATACRUMBS_INSTALL_ETC_CONFIGSDIR} -) - -# Install host-specific config YAML -set(_DATACRUMBS_HOST_CONFIG "${CMAKE_CONFIG_OUTPUT_DIRECTORY}/${DATACRUMBS_HOST}.yaml") - -if(EXISTS "${_DATACRUMBS_HOST_CONFIG}") - install(FILES "${_DATACRUMBS_HOST_CONFIG}" - DESTINATION "${DATACRUMBS_INSTALL_ETC_CONFIGSDIR}" - ) -else() - message(WARNING "[${UPPER_PROJECT_NAME}] Host config not found: ${_DATACRUMBS_HOST_CONFIG}; skipping install") -endif() - -# Install host/user specific data JSON files -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} - DESTINATION "${DATACRUMBS_INSTALL_DATADIR}" - ) -else() - message(WARNING "[${UPPER_PROJECT_NAME}] No data files matching pattern for user '${DATACRUMBS_USER}' and host '${DATACRUMBS_HOST}' found; skipping install.") -endif() - -# Module file -configure_file("${CMAKE_SOURCE_DIR}/etc/datacrumbs/modulefiles/module.lua.in" - "${CMAKE_MODULES_OUTPUT_DIRECTORY}/${PROJECT_NAME}/${DATACRUMBS_RELEASE_VERSION_STRING}.lua" @ONLY) - -install(FILES "${CMAKE_MODULES_OUTPUT_DIRECTORY}/${PROJECT_NAME}/${DATACRUMBS_RELEASE_VERSION_STRING}.lua" - DESTINATION "${DATACRUMBS_INSTALL_ETC_MODULESDIR}/${PROJECT_NAME}" +add_custom_target(clean_all + COMMAND ${CMAKE_COMMAND} -E rm -rf + ${BPF_OUTPUT} + ${BPF_SKEL_OUTPUT} + ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/datacrumbs + COMMENT "Cleaning BPF build artifacts (ignoring if cannot remove)" ) # flux cli plugin file @@ -630,141 +561,18 @@ install(FILES "${CMAKE_FLUX_OUTPUT_DIRECTORY}/cli/plugins/datacrumbs.py" DESTINATION "${DATACRUMBS_INSTALL_ETC_FLUX}/cli/plugins" ) -# ------------------------------------------------------------------------------ -# Install Datacrumbs scripts -# ------------------------------------------------------------------------------ -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_setup.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_setup @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_setup - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_utility.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_utility @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_utility - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_args.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_args @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_args - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_logging.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_logging @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_logging - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_run.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_run @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_run - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_run_validator.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_run_validator @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_run_validator - DESTINATION - ${DATACRUMBS_INSTALL_SBINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_track.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_track @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_track - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_untrack.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_untrack @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_untrack - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_wrap.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_wrap @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_wrap - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_compose.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_compose @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_compose - DESTINATION - ${DATACRUMBS_INSTALL_SBINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_compose_run.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_compose_run @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_compose_run - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_stop.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_stop @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_stop - DESTINATION - ${DATACRUMBS_INSTALL_SBINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_compose_wrapper.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_compose_wrapper @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_compose_wrapper - DESTINATION - ${DATACRUMBS_INSTALL_SBINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_create_log_dir.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_create_log_dir @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_create_log_dir - DESTINATION - ${DATACRUMBS_INSTALL_BINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_server_run.sh.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_server_run.sh @ONLY) -install( - PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_server_run.sh - DESTINATION - ${DATACRUMBS_INSTALL_SBINARYDIR} -) - -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/scripts/datacrumbs/datacrumbs_server_stop.sh.in ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_server_stop.sh @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/systemd/datacrumbs@.service.in ${CMAKE_SYSTEMD_OUTPUT_DIRECTORY}/datacrumbs@.service @ONLY) install( PROGRAMS - ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_server_stop.sh + ${CMAKE_SYSTEMD_OUTPUT_DIRECTORY}/datacrumbs@.service DESTINATION - ${DATACRUMBS_INSTALL_SBINARYDIR} + ${DATACRUMBS_INSTALL_ETC_SYSTEMD} ) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/systemd/datacrumbs@.service.in ${CMAKE_SYSTEMD_OUTPUT_DIRECTORY}/datacrumbs@.service @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in ${CMAKE_SYSTEMD_OUTPUT_DIRECTORY}/datacrumbs_sign_probes.service @ONLY) install( PROGRAMS - ${CMAKE_SYSTEMD_OUTPUT_DIRECTORY}/datacrumbs@.service + ${CMAKE_SYSTEMD_OUTPUT_DIRECTORY}/datacrumbs_sign_probes.service DESTINATION ${DATACRUMBS_INSTALL_ETC_SYSTEMD} ) @@ -793,51 +601,9 @@ 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\")") -# ------------------------------------------------------------------------------ -# Run configurations for DataCrumbs executables. -# ------------------------------------------------------------------------------ -enable_testing() - -# set(DATACRUMBS_VARS --user ${DATACRUMBS_USER} --config_path ${CMAKE_CONFIG_OUTPUT_DIRECTORY} --data_dir ${CMAKE_CURRENT_SOURCE_DIR}/etc/datacrumbs/data --trace_log_dir $ENV{HOME}/logs) -add_test(NAME datacrumbs_validator COMMAND ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/datacrumbs_validator ${DATACRUMBS_HOST} ${DATACRUMBS_VARS}) -set_tests_properties(datacrumbs_validator PROPERTIES DEPENDS ${PROJECT_NAME}_validator) - -add_test(NAME datacrumbs_pretest COMMAND bash -c "ulimit -n 4096") - -set(DATACRUMBS_VARS --user ${DATACRUMBS_USER} --config_path ${DATACRUMBS_INSTALL_SYSCONFDIR}/configs --data_dir ${DATACRUMBS_INSTALL_SYSCONFDIR}/data --trace_log_dir $ENV{HOME}/logs) - -if(NOT DATACRUMBS_INCLUSION_PATH STREQUAL "NONE") - set(DATACRUMBS_VARS ${DATACRUMBS_VARS} --inclusion_path ${DATACRUMBS_INCLUSION_PATH}) -endif() - -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 ${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 ${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}) - -add_subdirectory(tools) -add_subdirectory(tests) - add_test(NAME test_simple_dd COMMAND bash -c "dd if=/dev/zero of=/tmp/img_temp.bat bs=1M count=16" ) -set_tests_properties(test_simple_dd PROPERTIES ENVIRONMENT "LD_PRELOAD=${DATACRUMBS_BUILD_CLIENT_SO}") \ No newline at end of file diff --git a/analysis/analysis.ipynb b/analysis/analysis.ipynb deleted file mode 100755 index c282353f..00000000 --- a/analysis/analysis.ipynb +++ /dev/null @@ -1,5050 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Analysis for DFProfiler\n", - "\n", - "This is a simple analysis notebook for dfprofiler." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import json\n", - "import dask\n", - "import os\n", - "from pathlib import Path\n", - "from glob import glob\n", - "import zindex_py as zindex" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "import dask.dataframe as dd\n", - "from dask.distributed import Client, LocalCluster, progress, wait, get_client\n", - "from dask.distributed import Future, get_client" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Project Variables" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "app_root = str(Path(os.getcwd()).parent)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "logging.basicConfig(\n", - " level=logging.DEBUG,\n", - " handlers=[\n", - " logging.StreamHandler(),\n", - " ],\n", - " format=\"%(asctime)s [%(levelname)s]: %(message)s in %(pathname)s:%(lineno)d\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Dask Local Cluster" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-10-17 11:06:37,945 [DEBUG]: Using selector: EpollSelector in /collab/usr/gapps/python/build/spack-toss4.1/var/spack/environments/python/._view/75prb56irmif5ejtirjthpx6kq3gqo52/lib/python3.9/asyncio/selector_events.py:54\n", - "2024-10-17 11:06:40,897 [INFO]: Initialized Client with 4 workers and link http://127.0.0.1:8787/status in /var/tmp/haridev/ipykernel_2289341/1637310826.py:4\n" - ] - } - ], - "source": [ - "workers=4\n", - "cluster = LocalCluster(n_workers=workers) # Launches a scheduler and workers locally\n", - "client = Client(cluster) # Connect to distributed cluster and override default\n", - "logging.info(f\"Initialized Client with {workers} workers and link {client.dashboard_link}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/usr/WS2/haridev/datacrumbs/tests/output/case-write-simple/profile.pfw.gz']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "file=f\"{app_root}/tests/output/case-write-simple/profile.pfw.gz\"\n", - "file_pattern = glob(file)\n", - "file_pattern" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Function to load trace data" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def create_index(filename):\n", - " index_file = f\"{filename}.zindex\"\n", - " if not os.path.exists(index_file):\n", - " status = zindex.create_index(filename, index_file=f\"file:{index_file}\",\n", - " regex=\"id:\\b([0-9]+)\", numeric=True, unique=True, debug=False, verbose=False)\n", - " logging.debug(f\"Creating Index for {filename} returned {status}\")\n", - " return filename\n", - "\n", - "def get_linenumber(filename):\n", - " index_file = f\"{filename}.zindex\"\n", - " line_number = zindex.get_max_line(filename, index_file=index_file, debug=False, verbose=False)\n", - " logging.debug(f\" The {filename} has {line_number} lines\")\n", - " return (filename, line_number)\n", - "\n", - "def get_size(filename):\n", - " conf = get_dft_configuration()\n", - " if filename.endswith('.pfw'):\n", - " size = os.stat(filename).st_size\n", - " elif filename.endswith('.pfw.gz'):\n", - " index_file = f\"{filename}.zindex\"\n", - " line_number = zindex.get_max_line(filename, index_file=index_file,debug=False, verbose=False)\n", - " size = line_number * 256\n", - " logging.debug(f\" The {filename} has {size/1024**3} GB size\")\n", - " return int(size)\n", - "\n", - "\n", - "def generate_line_batches(filename, max_line):\n", - " batch_size = 16*1024\n", - " for start in range(0, max_line, batch_size):\n", - " end = min((start + batch_size - 1) , (max_line - 1))\n", - " logging.debug(f\"Created a batch for {filename} from [{start}, {end}] lines\")\n", - " yield filename, start, end\n", - "\n", - "def load_indexed_gzip_files(filename, start, end):\n", - " index_file = f\"{filename}.zindex\"\n", - " json_lines = zindex.zquery(filename, index_file=index_file,\n", - " raw=f\"select a.line from LineOffsets a where a.line >= {start} AND a.line <= {end};\", debug=False, verbose=False)\n", - " logging.debug(f\"Read {len(json_lines)} json lines for [{start}, {end}]\")\n", - " return json_lines" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "def load_profile(line):\n", - " d = {}\n", - " if line is not None and line !=\"\" and len(line) > 0 and \"[\" != line[0] and line != \"\\n\" :\n", - " try:\n", - " unicode_line = ''.join([i if ord(i) < 128 else '#' for i in line])\n", - " val = json.loads(unicode_line)\n", - " d[\"pid\"] = val[\"pid\"]\n", - " d[\"tid\"] = val[\"tid\"]\n", - " d[\"ts_us\"] = int(val[\"ts\"])\n", - " d[\"filename\"] = \"NA\"\n", - " if \"args\" in val:\n", - " if \"time\" in val[\"args\"]:\n", - " d[\"dur_sec\"] = float(val[\"args\"][\"time\"])\n", - " if \"freq\" in val[\"args\"]:\n", - " d[\"freq\"] = val[\"args\"][\"freq\"]\n", - " if \"size_sum\" in val[\"args\"]:\n", - " d[\"size_bytes\"] = val[\"args\"][\"size_sum\"]\n", - " if \"fname\" in val[\"args\"] and val[\"args\"][\"fname\"]:\n", - " d[\"filename\"] = val[\"args\"][\"fname\"]\n", - " d[\"func_id\"] = val[\"name\"]\n", - " d[\"cat\"] = val[\"cat\"]\n", - " except Exception as error:\n", - " logging.error(f\"Processing {line} failed with {error}\")\n", - " return d" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Dask Dataframe" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-10-17 11:10:16,802 [INFO]: Created index for 1 files in /var/tmp/haridev/ipykernel_2289341/405840175.py:3\n", - "2024-10-17 11:10:16,806 [INFO]: Total size of all files are bytes in /var/tmp/haridev/ipykernel_2289341/405840175.py:5\n", - "2024-10-17 11:10:16,845 [INFO]: Max lines per file are [('/usr/WS2/haridev/datacrumbs/tests/output/case-write-simple/profile.pfw.gz', 963)] in /var/tmp/haridev/ipykernel_2289341/405840175.py:7\n", - "2024-10-17 11:10:16,847 [DEBUG]: Created a batch for /usr/WS2/haridev/datacrumbs/tests/output/case-write-simple/profile.pfw.gz from [0, 962] lines in /var/tmp/haridev/ipykernel_2289341/2639451476.py:31\n", - "2024-10-17 11:10:16,848 [INFO]: Loading 1 batches out of 1 files and has 963 lines overall in /var/tmp/haridev/ipykernel_2289341/405840175.py:15\n" - ] - } - ], - "source": [ - "if len(file_pattern) > 0:\n", - " dask.bag.from_sequence(file_pattern).map(create_index).compute()\n", - " logging.info(f\"Created index for {len(file_pattern)} files\")\n", - " total_size = dask.bag.from_sequence(file_pattern).map(get_size).sum()\n", - " logging.info(f\"Total size of all files are {total_size} bytes\")\n", - " max_line_numbers = dask.bag.from_sequence(file_pattern).map(get_linenumber).compute()\n", - " logging.info(f\"Max lines per file are {max_line_numbers}\")\n", - " json_line_delayed = []\n", - " total_lines = 0\n", - " for filename, max_line in max_line_numbers:\n", - " total_lines += max_line\n", - " for _, start, end in generate_line_batches(filename, max_line):\n", - " json_line_delayed.append((filename, start, end))\n", - "\n", - " logging.info(f\"Loading {len(json_line_delayed)} batches out of {len(file_pattern)} files and has {total_lines} lines overall\")\n", - " json_line_bags = []\n", - " for filename, start, end in json_line_delayed:\n", - " num_lines = end - start + 1\n", - " json_line_bags.append(dask.delayed(load_indexed_gzip_files, nout=num_lines)(filename, start, end))\n", - " json_lines = dask.bag.concat(json_line_bags)\n", - " pfw_bag = json_lines.map(load_profile).filter(lambda x: \"ts_us\" in x)\n", - " pfw_bag.take(1)" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "columns = {'pid': \"uint64[pyarrow]\", 'tid': \"uint64[pyarrow]\",\n", - " 'ts_us': \"uint64[pyarrow]\", 'dur_sec': \"float32[pyarrow]\", \n", - " 'freq': \"uint64[pyarrow]\", 'size_bytes': \"uint64[pyarrow]\", 'func_id': \"string[pyarrow]\", \n", - " 'filename': \"string[pyarrow]\", \n", - " 'cat': \"string[pyarrow]\"}" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "events = pfw_bag.to_dataframe(meta=columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [], - "source": [ - "events = events.repartition(npartitions=1).persist()\n", - "_ = wait(events)" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pidtidts_usdur_secfreqsize_bytesfunc_idfilenamecat
07755775500.0000041832read/lib/x86_64-linux-gnu/libcrypto.so.3sys
17755775500.0000083<NA>vfs_readNAvfs
27755775500.0000176<NA>closeNAc
37755775500.00020260<NA>blk_account_io_merge_bio [kernel]NAext4
47755775500.00004333<NA>ext4_inode_journal_mode [kernel]NAext4
..............................
9567755775510000000.04943247<NA>filemap_get_entry [kernel]NAvfs
9577755775510000000.00001523<NA>profile_tick [kernel]NAvfs
9587755775510000000.0000062<NA>remote_function [kernel]NAvfs
9597755775510000000.0000011<NA>apparmor_mmap_file [kernel]NAvfs
9607755775510000000.0000283<NA>freeNAc
\n", - "

961 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " pid tid ts_us dur_sec freq size_bytes \\\n", - "0 7755 7755 0 0.000004 1 832 \n", - "1 7755 7755 0 0.000008 3 \n", - "2 7755 7755 0 0.000017 6 \n", - "3 7755 7755 0 0.000202 60 \n", - "4 7755 7755 0 0.000043 33 \n", - ".. ... ... ... ... ... ... \n", - "956 7755 7755 1000000 0.049432 47 \n", - "957 7755 7755 1000000 0.000015 23 \n", - "958 7755 7755 1000000 0.000006 2 \n", - "959 7755 7755 1000000 0.000001 1 \n", - "960 7755 7755 1000000 0.000028 3 \n", - "\n", - " func_id filename \\\n", - "0 read /lib/x86_64-linux-gnu/libcrypto.so.3 \n", - "1 vfs_read NA \n", - "2 close NA \n", - "3 blk_account_io_merge_bio [kernel] NA \n", - "4 ext4_inode_journal_mode [kernel] NA \n", - ".. ... ... \n", - "956 filemap_get_entry [kernel] NA \n", - "957 profile_tick [kernel] NA \n", - "958 remote_function [kernel] NA \n", - "959 apparmor_mmap_file [kernel] NA \n", - "960 free NA \n", - "\n", - " cat \n", - "0 sys \n", - "1 vfs \n", - "2 c \n", - "3 ext4 \n", - "4 ext4 \n", - ".. ... \n", - "956 vfs \n", - "957 vfs \n", - "958 vfs \n", - "959 vfs \n", - "960 c \n", - "\n", - "[961 rows x 9 columns]" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.compute()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0\n", - "1 1000000\n", - "Name: ts_us, dtype: uint64[pyarrow]" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events[\"ts_us\"].unique().compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 /lib/x86_64-linux-gnu/libcrypto.so.3\n", - "1 NA\n", - "2 /lib/x86_64-linux-gnu/libgmp.so.10\n", - "3 /usr/lib/x86_64-linux-gnu/openmpi/lib/libpsm_i...\n", - "4 /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3...\n", - " ... \n", - "119 /usr/lib/x86_64-linux-gnu/openmpi/lib/libpsm2....\n", - "120 /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3...\n", - "121 /home/cc/.openmpi/components\n", - "122 /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3...\n", - "123 /home/cc/datacrumbs/build/data/file_0_0.dat\n", - "Name: filename, Length: 124, dtype: string" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.filename.unique().compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pidtidts_usdur_secfreqsize_bytesfunc_idfilenamecat
8937755775510000000.0000081<NA>openat/home/cc/datacrumbs/build/data/file_0_0.datsys
9017755775510000000.0000021<NA>close/home/cc/datacrumbs/build/data/file_0_0.datsys
9407755775510000000.0000071<NA>write/home/cc/datacrumbs/build/data/file_0_0.datsys
\n", - "
" - ], - "text/plain": [ - " pid tid ts_us dur_sec freq size_bytes func_id \\\n", - "893 7755 7755 1000000 0.000008 1 openat \n", - "901 7755 7755 1000000 0.000002 1 close \n", - "940 7755 7755 1000000 0.000007 1 write \n", - "\n", - " filename cat \n", - "893 /home/cc/datacrumbs/build/data/file_0_0.dat sys \n", - "901 /home/cc/datacrumbs/build/data/file_0_0.dat sys \n", - "940 /home/cc/datacrumbs/build/data/file_0_0.dat sys " - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.query(\"filename.str.contains('\\.dat')\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "events[\"name\"] = events[\"cat\"] + \" \" + events[\"func_id\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ts_usnamefilenamedur_sec
430c writeNA0.00019
470ext4 __ext4_journal_get_write_access [kernel]NA0.000046
5570sys writeNA0.0001
5620vfs __mnt_drop_write_file [kernel]NA0.000002
5630vfs __mnt_want_write_file [kernel]NA0.000001
6340vfs vfs_writeNA0.000089
6621000000c writeNA0.000331
6671000000ext4 __ext4_journal_get_write_access [kernel]NA0.000015
7021000000ext4 generic_write_checks [kernel]NA0.000012
7341000000os_cache generic_write_checks [kernel]NA0.000004
7751000000sys write/home/cc/datacrumbs/build/data/file_0_0.dat0.00001
7761000000sys writeNA0.000157
8051000000vfs generic_write_checks [kernel]NA0.000018
8261000000vfs vfs_writeNA0.000149
\n", - "
" - ], - "text/plain": [ - " ts_us name \\\n", - "43 0 c write \n", - "47 0 ext4 __ext4_journal_get_write_access [kernel] \n", - "557 0 sys write \n", - "562 0 vfs __mnt_drop_write_file [kernel] \n", - "563 0 vfs __mnt_want_write_file [kernel] \n", - "634 0 vfs vfs_write \n", - "662 1000000 c write \n", - "667 1000000 ext4 __ext4_journal_get_write_access [kernel] \n", - "702 1000000 ext4 generic_write_checks [kernel] \n", - "734 1000000 os_cache generic_write_checks [kernel] \n", - "775 1000000 sys write \n", - "776 1000000 sys write \n", - "805 1000000 vfs generic_write_checks [kernel] \n", - "826 1000000 vfs vfs_write \n", - "\n", - " filename dur_sec \n", - "43 NA 0.00019 \n", - "47 NA 0.000046 \n", - "557 NA 0.0001 \n", - "562 NA 0.000002 \n", - "563 NA 0.000001 \n", - "634 NA 0.000089 \n", - "662 NA 0.000331 \n", - "667 NA 0.000015 \n", - "702 NA 0.000012 \n", - "734 NA 0.000004 \n", - "775 /home/cc/datacrumbs/build/data/file_0_0.dat 0.00001 \n", - "776 NA 0.000157 \n", - "805 NA 0.000018 \n", - "826 NA 0.000149 " - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "value = events.groupby([\"ts_us\",\"name\",\"filename\"])[[\"dur_sec\"]].sum()\n", - "per = value / value.sum()\n", - "per.reset_index().query(\"name.str.contains('write') and dur_sec > 0.0\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['Memory virtual_memory',\n", - " 'Disk io_stat',\n", - " 'Network snetio',\n", - " 'CPU utilization',\n", - " 'os_cache truncate_inode_pages_range',\n", - " 'sys openat',\n", - " 'map page_add_file_rmap',\n", - " 'map uprobe_munmap',\n", - " 'vfs ext4_getattr',\n", - " 'os_cache page_counter_cancel',\n", - " 'sys lseek',\n", - " 'sys close',\n", - " 'vfs vfs_getattr_nosec',\n", - " 'map __libc_realloc',\n", - " 'os_cache obj_cgroup_uncharge_pages',\n", - " 'map dma_direct_map_sg',\n", - " 'c malloc',\n", - " 'vfs ext4_inode_attach_jinode',\n", - " 'os_cache free_unref_page_prepare',\n", - " 'c shm_open',\n", - " 'sys read',\n", - " 'map fileno',\n", - " 'c fileno',\n", - " 'os_cache filemap_get_read_batch',\n", - " 'map ext4_sb_block_valid',\n", - " 'c close',\n", - " 'map vm_unmapped_area',\n", - " 'map llseek',\n", - " 'map next_uptodate_page',\n", - " 'map fcntl',\n", - " 'os_cache page_rmapping',\n", - " 'map tlb_batch_pages_flush',\n", - " 'ext4 ext4_sample_last_mounted',\n", - " 'map shm_open',\n", - " 'map htab_map_update_elem',\n", - " 'map page_rmapping',\n", - " 'map _start',\n", - " 'c mmap64',\n", - " 'os_cache free_unref_page_commit',\n", - " 'os_cache balance_dirty_pages_ratelimited_flags',\n", - " 'os_cache mark_page_accessed',\n", - " 'map cap_mmap_file',\n", - " 'os_cache should_fail_alloc_page',\n", - " 'map map_id_up',\n", - " 'map cfree',\n", - " 'map __htab_map_lookup_elem',\n", - " 'c realloc',\n", - " 'c mmap',\n", - " 'vfs rw_verify_area',\n", - " 'os_cache block_dirty_folio',\n", - " 'map filemap_free_folio',\n", - " 'map ext4_file_mmap',\n", - " 'c open',\n", - " 'map vmap_pages_pud_range',\n", - " 'map __libc_calloc',\n", - " 'ext4 ext4_dx_readdir',\n", - " 'ext4 filemap_get_entry',\n", - " 'map __pte_offset_map',\n", - " 'map do_vmi_munmap',\n", - " 'os_cache vma_set_page_prot',\n", - " 'map filemap_map_pmd',\n", - " 'ext4 ext4_get_group_desc',\n", - " 'os_cache tlb_batch_pages_flush',\n", - " 'ext4 ext4_release_file',\n", - " 'map close',\n", - " 'c shm_unlink',\n", - " 'sys mmap',\n", - " 'ext4 ext4_file_mmap',\n", - " 'os_cache __pte_offset_map',\n", - " 'map __libc_malloc',\n", - " 'vfs free_unref_page_list',\n", - " 'map free_unref_page_commit',\n", - " 'os_cache next_uptodate_page',\n", - " 'c read',\n", - " 'map get_mmap_base',\n", - " 'vfs vfs_open',\n", - " 'os_cache prep_compound_page',\n", - " 'os_cache is_file_shm_hugepages',\n", - " 'c free',\n", - " 'ext4 free_unref_page_list',\n", - " 'map read',\n", - " 'map userfaultfd_unmap_prep',\n", - " 'os_cache unmap_page_range',\n", - " 'map filemap_read',\n", - " 'map cap_mmap_addr',\n", - " 'map userfaultfd_unmap_complete',\n", - " 'ext4 ext4_sb_block_valid',\n", - " 'c fileno_unlocked',\n", - " 'ext4 filemap_get_read_batch',\n", - " 'os_cache page_add_file_rmap',\n", - " 'ext4 ext4_es_lookup_extent',\n", - " 'map page_remove_rmap',\n", - " 'ext4 ext4_convert_inline_data',\n", - " 'os_cache find_timens_vvar_page',\n", - " 'os_cache free_unref_page_list',\n", - " 'c open64',\n", - " 'os_cache __mod_zone_page_state',\n", - " 'map filemap_get_entry',\n", - " 'map vma_set_page_prot',\n", - " 'os_cache mod_node_page_state',\n", - " 'map open64',\n", - " 'c lseek',\n", - " 'map arch_get_unmapped_area_topdown',\n", - " 'map free_unref_page_list',\n", - " 'os_cache vm_normal_page',\n", - " 'ext4 ext4_getattr',\n", - " 'os_cache unlock_page',\n", - " 'c calloc',\n", - " 'os_cache hugepage_vma_check',\n", - " 'os_cache __tlb_remove_page_size',\n", - " 'ext4 __mod_node_page_state',\n", - " 'map folio_mapping',\n", - " 'map __tlb_remove_page_size',\n", - " 'ext4 ext4_htree_store_dirent',\n", - " 'ext4 ext4_inode_journal_mode',\n", - " 'vfs vfs_unlink',\n", - " 'ext4 ext4_release_dir',\n", - " 'ext4 ext4_inode_csum',\n", - " 'vfs filemap_get_read_batch',\n", - " 'vfs filemap_read',\n", - " 'map apparmor_mmap_file',\n", - " 'app _init',\n", - " 'map [unknown]',\n", - " 'os_cache page_remove_rmap',\n", - " 'map uprobe_mmap',\n", - " 'ext4 ext4_fc_track_inode',\n", - " 'map mmap64',\n", - " 'os_cache page_counter_try_charge',\n", - " 'os_cache vmap_pages_pud_range',\n", - " 'vfs ext4_sample_last_mounted',\n", - " 'map ima_file_mmap',\n", - " 'os_cache mark_buffer_dirty',\n", - " 'block folio_mapping',\n", - " 'vfs vfs_statx',\n", - " 'map filemap_get_read_batch',\n", - " 'map shmem_mmap',\n", - " 'map get_page_from_freelist',\n", - " 'os_cache pagerange_is_ram_callback',\n", - " 'map free_vmap_area_rb_augment_cb_rotate',\n", - " 'c fcntl',\n", - " 'vfs page_counter_try_charge',\n", - " 'c lseek64',\n", - " 'ext4 ext4_inode_attach_jinode',\n", - " 'ext4 filemap_read',\n", - " 'os_cache get_page_from_freelist',\n", - " 'map main',\n", - " 'ext4 ext4_ioctl',\n", - " 'os_cache copy_to_page',\n", - " 'map unmap_page_range',\n", - " 'sys write',\n", - " 'os_cache page_frag_free',\n", - " 'block block_dirty_folio',\n", - " 'map shm_unlink',\n", - " 'map __mod_node_page_state',\n", - " 'os_cache folio_mapping',\n", - " 'os_cache __memcg_kmem_charge_page',\n", - " 'map ext4_inode_csum',\n", - " 'ext4 folio_mapping',\n", - " 'ext4 ext4_journal_check_start',\n", - " 'vfs __mod_node_page_state',\n", - " 'map __blk_bios_map_sg',\n", - " 'ext4 ext4_nonda_switch',\n", - " 'map nft_bitmap_lookup',\n", - " 'map read_pages',\n", - " 'os_cache __mod_node_page_state',\n", - " 'ext4 block_dirty_folio',\n", - " 'map insert_vmap_area.constprop.0',\n", - " 'ext4 ext4_inode_table',\n", - " 'os_cache __bio_add_page',\n", - " 'os_cache bvec_try_merge_page',\n", - " 'os_cache page_cpupid_xchg_last',\n", - " 'map map_id_range_down',\n", - " 'map native_set_fixmap',\n", - " 'os_cache read_pages',\n", - " 'map __write',\n", - " 'map obj_cgroup_uncharge_pages',\n", - " 'os_cache dma_direct_map_sg',\n", - " 'c write',\n", - " 'vfs obj_cgroup_uncharge_pages',\n", - " 'sys fcntl',\n", - " 'ext4 __bio_add_page',\n", - " 'ext4 ext4_initialize_dirent_tail',\n", - " 'ext4 ext4_has_free_clusters',\n", - " 'sys statfs',\n", - " 'map ext4_wait_block_bitmap',\n", - " 'ext4 ext4_handle_dirty_dirblock',\n", - " 'ext4 ext4_group_desc_csum',\n", - " 'ext4 ext4_ext_try_to_merge_right',\n", - " 'ext4 ext4_free_group_clusters_set',\n", - " 'ext4 ext4_inode_to_goal_block',\n", - " 'ext4 ext4_block_bitmap',\n", - " 'ext4 bvec_try_merge_page',\n", - " 'ext4 ext4_ext_get_access',\n", - " 'ext4 ext4_fc_track_range',\n", - " 'ext4 ext4_inode_bitmap',\n", - " 'ext4 ext4_init_dot_dotdot',\n", - " 'ext4 ext4_free_inodes_set',\n", - " 'map dma_direct_unmap_sg',\n", - " 'map ext4_es_delayed_clu',\n", - " 'map ext4_block_bitmap_csum_set',\n", - " 'map ext4_fc_track_range',\n", - " 'map ext4_inode_bitmap_csum_set',\n", - " 'ext4 ext4_ext_search_left',\n", - " 'ext4 ext4_itable_unused_count',\n", - " 'ext4 ext4_get_group_no_and_offset',\n", - " 'ext4 ext4_mb_check_limits',\n", - " 'ext4 ext4_wait_block_bitmap',\n", - " 'ext4 ext4_init_acl',\n", - " 'ext4 ext4_es_can_be_merged.isra.0',\n", - " 'map ext4_block_bitmap',\n", - " 'ext4 ext4_es_delayed_clu',\n", - " 'vfs node_page_state',\n", - " 'ext4 ext4_fname_setup_ci_filename',\n", - " 'ext4 ext4_fname_free_filename',\n", - " 'map ext4_inode_bitmap',\n", - " 'vfs ext4_fc_track_create',\n", - " 'ext4 ext4_free_inodes_count',\n", - " 'ext4 ext4_es_insert_extent',\n", - " 'ext4 ext4_free_group_clusters',\n", - " 'vfs ext4_fname_free_filename',\n", - " 'ext4 ext4_fc_init_inode',\n", - " 'ext4 ext4_match',\n", - " 'ext4 ext4_used_dirs_count',\n", - " 'ext4 ext4_set_inode_flags',\n", - " 'ext4 ext4_inode_bitmap_csum_set',\n", - " 'ext4 ext4_used_dirs_set',\n", - " 'ext4 ext4_mb_normalize_request.constprop.0',\n", - " 'os_cache filemap_get_entry',\n", - " 'ext4 ext4_get_dummy_policy',\n", - " 'ext4 ext4_fc_track_create',\n", - " 'ext4 ext4_xattr_block_get',\n", - " 'os_cache free_tail_page_prepare',\n", - " 'ext4 ext4_mb_use_preallocated.constprop.0',\n", - " 'map filemap_update_page',\n", - " 'map ext4_es_insert_extent',\n", - " 'ext4 ext4_cache_extents',\n", - " 'ext4 ext4_mb_pa_put_free',\n", - " 'ext4 ext4_xattr_ibody_get',\n", - " 'ext4 ext4_mb_use_best_found',\n", - " 'vfs ext4_get_dummy_policy',\n", - " 'ext4 ext4_insert_dentry',\n", - " 'vfs vfs_statfs.part.0.isra.0',\n", - " 'ext4 ext4_mb_unload_buddy',\n", - " 'os_cache node_page_state',\n", - " 'ext4 ext4_ext_correct_indexes',\n", - " 'ext4 ext4_block_bitmap_csum_set',\n", - " 'ext4 ext4_es_find_extent_range',\n", - " 'ext4 ext4_itable_unused_set',\n", - " 'ext4 ext4_mb_collect_stats',\n", - " 'ext4 ext4_ext_search_right',\n", - " 'os_cache mpage_end_io',\n", - " 'ext4 ext4_init_pending_tree',\n", - " 'os_cache balance_dirty_pages',\n", - " 'vfs map_id_up',\n", - " 'ext4 ext4_get_group_info',\n", - " 'sys ftruncate',\n", - " 'ext4 ext4_es_init_tree',\n", - " 'ext4 ext4_init_security',\n", - " 'map map_cmd_status.constprop.0',\n", - " 'ext4 ext4_fname_from_fscrypt_name',\n", - " 'ext4 ext4_ext_try_to_merge_up',\n", - " 'map ext4_get_group_info',\n", - " 'ext4 ext4_inc_count',\n", - " 'os_cache page_cache_ra_order',\n", - " 'map page_counter_cancel',\n", - " 'ext4 ext4_es_cache_extent',\n", - " 'os_cache wake_page_function',\n", - " 'os_cache node_page_state_pages',\n", - " 'os_cache __page_cache_release',\n", - " 'os_cache filemap_update_page',\n", - " 'map page_cache_ra_order',\n", - " 'os_cache sum_zone_node_page_state',\n", - " 'ext4 ext4_es_free_extent',\n", - " 'map wake_page_function',\n", - " 'map __mod_zone_page_state',\n", - " 'os_cache page_cache_next_miss',\n", - " 'map ext4_es_cache_extent',\n", - " 'map mpage_end_io',\n", - " 'c posix_memalign',\n", - " 'map ext4_es_can_be_merged.isra.0',\n", - " 'app _Z10gen_randomB5cxx11i',\n", - " 'map gen_random[abi:cxx11](int)',\n", - " 'map posix_memalign',\n", - " 'os_cache vmalloc_to_page',\n", - " 'ext4 mod_node_page_state',\n", - " 'map __bio_add_page',\n", - " 'ext4 ext4_dirblock_csum_verify',\n", - " 'map page_frag_free',\n", - " 'map bvec_try_merge_page',\n", - " 'map dma_unmap_page_attrs',\n", - " 'os_cache dma_unmap_page_attrs',\n", - " 'ext4 page_frag_free',\n", - " 'os_cache native_set_fixmap',\n", - " 'ext4 mpage_end_io',\n", - " 'map vmalloc_to_page',\n", - " 'map dma_map_page_attrs',\n", - " 'os_cache dma_map_page_attrs',\n", - " 'ext4 vmalloc_to_page',\n", - " 'ext4 page_counter_cancel',\n", - " 'ext4 ext4_mb_pa_callback',\n", - " 'ext4 obj_cgroup_uncharge_pages',\n", - " 'ext4 dma_unmap_page_attrs',\n", - " 'ext4 page_counter_try_charge',\n", - " 'c munmap',\n", - " 'map __munmap',\n", - " 'app _fini',\n", - " 'app main']" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "all_events = list(events[\"name\"].unique().compute())\n", - "all_events" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [], - "source": [ - "events[\"cat\"].unique().compute()\n", - "ignore_category = [\"Memory\", \"Network\", \"Disk\", \"CPU\", \"app\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['vfs ext4_getattr',\n", - " 'vfs ext4_inode_attach_jinode',\n", - " 'map ext4_sb_block_valid',\n", - " 'ext4 ext4_sample_last_mounted',\n", - " 'map ext4_file_mmap',\n", - " 'ext4 ext4_dx_readdir',\n", - " 'ext4 filemap_get_entry',\n", - " 'ext4 ext4_get_group_desc',\n", - " 'ext4 ext4_release_file',\n", - " 'ext4 ext4_file_mmap',\n", - " 'ext4 free_unref_page_list',\n", - " 'ext4 ext4_sb_block_valid',\n", - " 'ext4 filemap_get_read_batch',\n", - " 'ext4 ext4_es_lookup_extent',\n", - " 'ext4 ext4_convert_inline_data',\n", - " 'ext4 ext4_getattr',\n", - " 'ext4 __mod_node_page_state',\n", - " 'ext4 ext4_htree_store_dirent',\n", - " 'ext4 ext4_inode_journal_mode',\n", - " 'ext4 ext4_release_dir',\n", - " 'ext4 ext4_inode_csum',\n", - " 'ext4 ext4_fc_track_inode',\n", - " 'vfs ext4_sample_last_mounted',\n", - " 'ext4 ext4_inode_attach_jinode',\n", - " 'ext4 filemap_read',\n", - " 'ext4 ext4_ioctl',\n", - " 'map ext4_inode_csum',\n", - " 'ext4 folio_mapping',\n", - " 'ext4 ext4_journal_check_start',\n", - " 'ext4 ext4_nonda_switch',\n", - " 'ext4 block_dirty_folio',\n", - " 'ext4 ext4_inode_table',\n", - " 'ext4 __bio_add_page',\n", - " 'ext4 ext4_initialize_dirent_tail',\n", - " 'ext4 ext4_has_free_clusters',\n", - " 'map ext4_wait_block_bitmap',\n", - " 'ext4 ext4_handle_dirty_dirblock',\n", - " 'ext4 ext4_group_desc_csum',\n", - " 'ext4 ext4_ext_try_to_merge_right',\n", - " 'ext4 ext4_free_group_clusters_set',\n", - " 'ext4 ext4_inode_to_goal_block',\n", - " 'ext4 ext4_block_bitmap',\n", - " 'ext4 bvec_try_merge_page',\n", - " 'ext4 ext4_ext_get_access',\n", - " 'ext4 ext4_fc_track_range',\n", - " 'ext4 ext4_inode_bitmap',\n", - " 'ext4 ext4_init_dot_dotdot',\n", - " 'ext4 ext4_free_inodes_set',\n", - " 'map ext4_es_delayed_clu',\n", - " 'map ext4_block_bitmap_csum_set',\n", - " 'map ext4_fc_track_range',\n", - " 'map ext4_inode_bitmap_csum_set',\n", - " 'ext4 ext4_ext_search_left',\n", - " 'ext4 ext4_itable_unused_count',\n", - " 'ext4 ext4_get_group_no_and_offset',\n", - " 'ext4 ext4_mb_check_limits',\n", - " 'ext4 ext4_wait_block_bitmap',\n", - " 'ext4 ext4_init_acl',\n", - " 'ext4 ext4_es_can_be_merged.isra.0',\n", - " 'map ext4_block_bitmap',\n", - " 'ext4 ext4_es_delayed_clu',\n", - " 'ext4 ext4_fname_setup_ci_filename',\n", - " 'ext4 ext4_fname_free_filename',\n", - " 'map ext4_inode_bitmap',\n", - " 'vfs ext4_fc_track_create',\n", - " 'ext4 ext4_free_inodes_count',\n", - " 'ext4 ext4_es_insert_extent',\n", - " 'ext4 ext4_free_group_clusters',\n", - " 'vfs ext4_fname_free_filename',\n", - " 'ext4 ext4_fc_init_inode',\n", - " 'ext4 ext4_match',\n", - " 'ext4 ext4_used_dirs_count',\n", - " 'ext4 ext4_set_inode_flags',\n", - " 'ext4 ext4_inode_bitmap_csum_set',\n", - " 'ext4 ext4_used_dirs_set',\n", - " 'ext4 ext4_mb_normalize_request.constprop.0',\n", - " 'ext4 ext4_get_dummy_policy',\n", - " 'ext4 ext4_fc_track_create',\n", - " 'ext4 ext4_xattr_block_get',\n", - " 'ext4 ext4_mb_use_preallocated.constprop.0',\n", - " 'map ext4_es_insert_extent',\n", - " 'ext4 ext4_cache_extents',\n", - " 'ext4 ext4_mb_pa_put_free',\n", - " 'ext4 ext4_xattr_ibody_get',\n", - " 'ext4 ext4_mb_use_best_found',\n", - " 'vfs ext4_get_dummy_policy',\n", - " 'ext4 ext4_insert_dentry',\n", - " 'ext4 ext4_mb_unload_buddy',\n", - " 'ext4 ext4_ext_correct_indexes',\n", - " 'ext4 ext4_block_bitmap_csum_set',\n", - " 'ext4 ext4_es_find_extent_range',\n", - " 'ext4 ext4_itable_unused_set',\n", - " 'ext4 ext4_mb_collect_stats',\n", - " 'ext4 ext4_ext_search_right',\n", - " 'ext4 ext4_init_pending_tree',\n", - " 'ext4 ext4_get_group_info',\n", - " 'ext4 ext4_es_init_tree',\n", - " 'ext4 ext4_init_security',\n", - " 'ext4 ext4_fname_from_fscrypt_name',\n", - " 'ext4 ext4_ext_try_to_merge_up',\n", - " 'map ext4_get_group_info',\n", - " 'ext4 ext4_inc_count',\n", - " 'ext4 ext4_es_cache_extent',\n", - " 'ext4 ext4_es_free_extent',\n", - " 'map ext4_es_cache_extent',\n", - " 'map ext4_es_can_be_merged.isra.0',\n", - " 'ext4 mod_node_page_state',\n", - " 'ext4 ext4_dirblock_csum_verify',\n", - " 'ext4 page_frag_free',\n", - " 'ext4 mpage_end_io',\n", - " 'ext4 vmalloc_to_page',\n", - " 'ext4 page_counter_cancel',\n", - " 'ext4 ext4_mb_pa_callback',\n", - " 'ext4 obj_cgroup_uncharge_pages',\n", - " 'ext4 dma_unmap_page_attrs',\n", - " 'ext4 page_counter_try_charge',\n", - " 'c malloc',\n", - " 'c shm_open',\n", - " 'c fileno',\n", - " 'c close',\n", - " 'c mmap64',\n", - " 'c realloc',\n", - " 'c mmap',\n", - " 'c open',\n", - " 'c shm_unlink',\n", - " 'c read',\n", - " 'c free',\n", - " 'c fileno_unlocked',\n", - " 'c open64',\n", - " 'c lseek',\n", - " 'c calloc',\n", - " 'c fcntl',\n", - " 'c lseek64',\n", - " 'c write',\n", - " 'c posix_memalign',\n", - " 'c munmap',\n", - " 'vfs ext4_getattr',\n", - " 'vfs vfs_getattr_nosec',\n", - " 'vfs ext4_inode_attach_jinode',\n", - " 'vfs rw_verify_area',\n", - " 'vfs free_unref_page_list',\n", - " 'vfs vfs_open',\n", - " 'vfs vfs_unlink',\n", - " 'vfs filemap_get_read_batch',\n", - " 'vfs filemap_read',\n", - " 'vfs ext4_sample_last_mounted',\n", - " 'vfs vfs_statx',\n", - " 'vfs page_counter_try_charge',\n", - " 'vfs __mod_node_page_state',\n", - " 'vfs obj_cgroup_uncharge_pages',\n", - " 'vfs node_page_state',\n", - " 'vfs ext4_fc_track_create',\n", - " 'vfs ext4_fname_free_filename',\n", - " 'vfs ext4_get_dummy_policy',\n", - " 'vfs vfs_statfs.part.0.isra.0',\n", - " 'vfs map_id_up',\n", - " 'sys openat',\n", - " 'sys lseek',\n", - " 'sys close',\n", - " 'sys read',\n", - " 'sys mmap',\n", - " 'sys write',\n", - " 'sys fcntl',\n", - " 'sys statfs',\n", - " 'sys ftruncate',\n", - " 'block folio_mapping',\n", - " 'block block_dirty_folio',\n", - " 'os_cache truncate_inode_pages_range',\n", - " 'os_cache page_counter_cancel',\n", - " 'os_cache obj_cgroup_uncharge_pages',\n", - " 'os_cache free_unref_page_prepare',\n", - " 'os_cache filemap_get_read_batch',\n", - " 'os_cache page_rmapping',\n", - " 'os_cache free_unref_page_commit',\n", - " 'os_cache balance_dirty_pages_ratelimited_flags',\n", - " 'os_cache mark_page_accessed',\n", - " 'os_cache should_fail_alloc_page',\n", - " 'os_cache block_dirty_folio',\n", - " 'os_cache vma_set_page_prot',\n", - " 'os_cache tlb_batch_pages_flush',\n", - " 'os_cache __pte_offset_map',\n", - " 'os_cache next_uptodate_page',\n", - " 'os_cache prep_compound_page',\n", - " 'os_cache is_file_shm_hugepages',\n", - " 'os_cache unmap_page_range',\n", - " 'os_cache page_add_file_rmap',\n", - " 'os_cache find_timens_vvar_page',\n", - " 'os_cache free_unref_page_list',\n", - " 'os_cache __mod_zone_page_state',\n", - " 'os_cache mod_node_page_state',\n", - " 'os_cache vm_normal_page',\n", - " 'os_cache unlock_page',\n", - " 'os_cache hugepage_vma_check',\n", - " 'os_cache __tlb_remove_page_size',\n", - " 'os_cache page_remove_rmap',\n", - " 'os_cache page_counter_try_charge',\n", - " 'os_cache vmap_pages_pud_range',\n", - " 'os_cache mark_buffer_dirty',\n", - " 'os_cache pagerange_is_ram_callback',\n", - " 'os_cache get_page_from_freelist',\n", - " 'os_cache copy_to_page',\n", - " 'os_cache page_frag_free',\n", - " 'os_cache folio_mapping',\n", - " 'os_cache __memcg_kmem_charge_page',\n", - " 'os_cache __mod_node_page_state',\n", - " 'os_cache __bio_add_page',\n", - " 'os_cache bvec_try_merge_page',\n", - " 'os_cache page_cpupid_xchg_last',\n", - " 'os_cache read_pages',\n", - " 'os_cache dma_direct_map_sg',\n", - " 'os_cache filemap_get_entry',\n", - " 'os_cache free_tail_page_prepare',\n", - " 'os_cache node_page_state',\n", - " 'os_cache mpage_end_io',\n", - " 'os_cache balance_dirty_pages',\n", - " 'os_cache page_cache_ra_order',\n", - " 'os_cache wake_page_function',\n", - " 'os_cache node_page_state_pages',\n", - " 'os_cache __page_cache_release',\n", - " 'os_cache filemap_update_page',\n", - " 'os_cache sum_zone_node_page_state',\n", - " 'os_cache page_cache_next_miss',\n", - " 'os_cache vmalloc_to_page',\n", - " 'os_cache dma_unmap_page_attrs',\n", - " 'os_cache native_set_fixmap',\n", - " 'os_cache dma_map_page_attrs']" - ] - }, - "execution_count": 52, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ext4_events = [s for s in all_events if \"ext4\" in s]\n", - "libc_events = [s for s in all_events if \"c \" in s]\n", - "vfs_events = [s for s in all_events if \"vfs \" in s]\n", - "sys_events = [s for s in all_events if \"sys \" in s]\n", - "block_events = [s for s in all_events if \"block \" in s]\n", - "os_cache_events = [s for s in all_events if \"os_cache \" in s]\n", - "final_events = []\n", - "final_events.extend(ext4_events)\n", - "final_events.extend(libc_events)\n", - "final_events.extend(vfs_events)\n", - "final_events.extend(sys_events)\n", - "final_events.extend(block_events)\n", - "final_events.extend(os_cache_events)\n", - "final_events" - ] - }, - { - "cell_type": "code", - "execution_count": 53, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pidtidts_usdur_secfreqsize_bytesfunc_idfilenamecatnamets
117357153571500.0000264<NA>truncate_inode_pages_range<NA>os_cacheos_cache truncate_inode_pages_range0.0
118357213572100.0000231<NA>openat/usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3...syssys openat0.0
119357193571900.0000161<NA>openat/lib/x86_64-linux-gnu/libnl-3.so.200syssys openat0.0
120357093570900.0145191855<NA>page_add_file_rmap<NA>mapmap page_add_file_rmap0.0
121357213572100.002097414<NA>uprobe_munmap<NA>mapmap uprobe_munmap0.0
....................................
1096035709357092670000000.00066271<NA>page_remove_rmap<NA>mapmap page_remove_rmap267.0
1096135700357002670000000.001197132<NA>userfaultfd_unmap_complete<NA>mapmap userfaultfd_unmap_complete267.0
1096235699356992670000000.00685407<NA>__tlb_remove_page_size<NA>mapmap __tlb_remove_page_size267.0
1096335704357042670000000.0000071<NA>rw_verify_area<NA>vfsvfs rw_verify_area267.0
1096435700357002670000000.000011<NA>close/usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3...syssys close267.0
\n", - "

136683 rows × 11 columns

\n", - "
" - ], - "text/plain": [ - " pid tid ts_us dur_sec freq size_bytes \\\n", - "117 35715 35715 0 0.000026 4 \n", - "118 35721 35721 0 0.000023 1 \n", - "119 35719 35719 0 0.000016 1 \n", - "120 35709 35709 0 0.014519 1855 \n", - "121 35721 35721 0 0.002097 414 \n", - "... ... ... ... ... ... ... \n", - "10960 35709 35709 267000000 0.000662 71 \n", - "10961 35700 35700 267000000 0.001197 132 \n", - "10962 35699 35699 267000000 0.00685 407 \n", - "10963 35704 35704 267000000 0.000007 1 \n", - "10964 35700 35700 267000000 0.00001 1 \n", - "\n", - " func_id \\\n", - "117 truncate_inode_pages_range \n", - "118 openat \n", - "119 openat \n", - "120 page_add_file_rmap \n", - "121 uprobe_munmap \n", - "... ... \n", - "10960 page_remove_rmap \n", - "10961 userfaultfd_unmap_complete \n", - "10962 __tlb_remove_page_size \n", - "10963 rw_verify_area \n", - "10964 close \n", - "\n", - " filename cat \\\n", - "117 os_cache \n", - "118 /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3... sys \n", - "119 /lib/x86_64-linux-gnu/libnl-3.so.200 sys \n", - "120 map \n", - "121 map \n", - "... ... ... \n", - "10960 map \n", - "10961 map \n", - "10962 map \n", - "10963 vfs \n", - "10964 /usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3... sys \n", - "\n", - " name ts \n", - "117 os_cache truncate_inode_pages_range 0.0 \n", - "118 sys openat 0.0 \n", - "119 sys openat 0.0 \n", - "120 map page_add_file_rmap 0.0 \n", - "121 map uprobe_munmap 0.0 \n", - "... ... ... \n", - "10960 map page_remove_rmap 267.0 \n", - "10961 map userfaultfd_unmap_complete 267.0 \n", - "10962 map __tlb_remove_page_size 267.0 \n", - "10963 vfs rw_verify_area 267.0 \n", - "10964 sys close 267.0 \n", - "\n", - "[136683 rows x 11 columns]" - ] - }, - "execution_count": 53, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "selected_events = events[~events[\"cat\"].isin(ignore_category)].compute()\n", - "selected_events[\"ts\"] = selected_events[\"ts_us\"] / 1e6\n", - "selected_events" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "dur_sec float[pyarrow]\n", - "dtype: object\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dur_sec
name
c free0.34961
c malloc0.234928
ext4 bvec_try_merge_page1.305948
ext4 ext4_es_lookup_extent0.147238
ext4 ext4_sb_block_valid0.932424
map __blk_bios_map_sg0.435246
map __htab_map_lookup_elem1.062591
map __libc_malloc0.106732
map __mod_node_page_state59.376499
map __mod_zone_page_state0.712339
map __pte_offset_map0.123062
map cfree0.158957
map dma_direct_map_sg2.600709
map dma_direct_unmap_sg0.410997
map ext4_sb_block_valid0.395382
map filemap_get_read_batch2.537251
map filemap_update_page23.466135
map folio_mapping9.006821
map free_unref_page_list1.780231
map get_page_from_freelist35.535213
map mpage_end_io0.105389
os_cache __bio_add_page1.540607
os_cache __mod_node_page_state36.519188
os_cache __mod_zone_page_state10.450335
os_cache bvec_try_merge_page26.216103
os_cache copy_to_page0.238805
os_cache dma_direct_map_sg4.68793
os_cache filemap_get_read_batch1.174538
os_cache filemap_update_page23.468897
os_cache free_unref_page_list1.826042
os_cache get_page_from_freelist56.969387
os_cache mpage_end_io0.10971
os_cache page_counter_try_charge0.153043
os_cache should_fail_alloc_page9.169541
\n", - "
" - ], - "text/plain": [ - " dur_sec\n", - "name \n", - "c free 0.34961\n", - "c malloc 0.234928\n", - "ext4 bvec_try_merge_page 1.305948\n", - "ext4 ext4_es_lookup_extent 0.147238\n", - "ext4 ext4_sb_block_valid 0.932424\n", - "map __blk_bios_map_sg 0.435246\n", - "map __htab_map_lookup_elem 1.062591\n", - "map __libc_malloc 0.106732\n", - "map __mod_node_page_state 59.376499\n", - "map __mod_zone_page_state 0.712339\n", - "map __pte_offset_map 0.123062\n", - "map cfree 0.158957\n", - "map dma_direct_map_sg 2.600709\n", - "map dma_direct_unmap_sg 0.410997\n", - "map ext4_sb_block_valid 0.395382\n", - "map filemap_get_read_batch 2.537251\n", - "map filemap_update_page 23.466135\n", - "map folio_mapping 9.006821\n", - "map free_unref_page_list 1.780231\n", - "map get_page_from_freelist 35.535213\n", - "map mpage_end_io 0.105389\n", - "os_cache __bio_add_page 1.540607\n", - "os_cache __mod_node_page_state 36.519188\n", - "os_cache __mod_zone_page_state 10.450335\n", - "os_cache bvec_try_merge_page 26.216103\n", - "os_cache copy_to_page 0.238805\n", - "os_cache dma_direct_map_sg 4.68793\n", - "os_cache filemap_get_read_batch 1.174538\n", - "os_cache filemap_update_page 23.468897\n", - "os_cache free_unref_page_list 1.826042\n", - "os_cache get_page_from_freelist 56.969387\n", - "os_cache mpage_end_io 0.10971\n", - "os_cache page_counter_try_charge 0.153043\n", - "os_cache should_fail_alloc_page 9.169541" - ] - }, - "execution_count": 55, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "value = selected_events.groupby([\"name\",\"pid\"])[[\"dur_sec\"]].sum().groupby(\"name\").max()\n", - "per = value\n", - "print(per.dtypes)\n", - "per = per.query(\"dur_sec > 0.1\")\n", - "per" - ] - }, - { - "cell_type": "code", - "execution_count": 194, - "metadata": {}, - "outputs": [], - "source": [ - "grouped_events = selected_events.groupby([\"ts\",\"name\"])[\"dur_sec\"].sum()\n", - "grouped_events = grouped_events.reset_index()" - ] - }, - { - "cell_type": "code", - "execution_count": 195, - "metadata": {}, - "outputs": [], - "source": [ - "selected_functions = list(grouped_events[\"name\"].unique())" - ] - }, - { - "cell_type": "code", - "execution_count": 196, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
tsnamedur_secblock block_devnodeblock block_dirty_folioblock block_ueventblock mark_buffer_dirtyc callocc closec fcntl...vfs vfs_unlinkc posix_memalignblock block_invalidate_folioext4 ext4_da_release_spaceext4 ext4_discard_preallocationsext4 ext4_free_blocksext4 ext4_remove_blocksext4 ext4_truncatevfs ext4_da_release_spacevfs vfs_rmdir
00.0block block_devnode0.0000040.0000040.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
10.0block block_dirty_folio0.0000410.00.0000410.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
20.0block block_uevent0.0000030.00.00.0000030.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
30.0block mark_buffer_dirty0.0000060.00.00.00.0000060.00.00.0...0.00.00.00.00.00.00.00.00.00.0
40.0c calloc0.029090.00.00.00.00.029090.00.0...0.00.00.00.00.00.00.00.00.00.0
..................................................................
15116.0vfs vfs_getattr_nosec0.0001320.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
15216.0vfs vfs_open0.000020.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
15316.0vfs vfs_rmdir0.000020.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.00002
15416.0vfs vfs_statx0.000030.00.00.00.00.00.00.0...0.00.00.00.00.00.00.00.00.00.0
15516.0vfs vfs_unlink0.0000950.00.00.00.00.00.00.0...0.0000950.00.00.00.00.00.00.00.00.0
\n", - "

156 rows × 65 columns

\n", - "
" - ], - "text/plain": [ - " ts name dur_sec block block_devnode \\\n", - "0 0.0 block block_devnode 0.000004 0.000004 \n", - "1 0.0 block block_dirty_folio 0.000041 0.0 \n", - "2 0.0 block block_uevent 0.000003 0.0 \n", - "3 0.0 block mark_buffer_dirty 0.000006 0.0 \n", - "4 0.0 c calloc 0.02909 0.0 \n", - ".. ... ... ... ... \n", - "151 16.0 vfs vfs_getattr_nosec 0.000132 0.0 \n", - "152 16.0 vfs vfs_open 0.00002 0.0 \n", - "153 16.0 vfs vfs_rmdir 0.00002 0.0 \n", - "154 16.0 vfs vfs_statx 0.00003 0.0 \n", - "155 16.0 vfs vfs_unlink 0.000095 0.0 \n", - "\n", - " block block_dirty_folio block block_uevent block mark_buffer_dirty \\\n", - "0 0.0 0.0 0.0 \n", - "1 0.000041 0.0 0.0 \n", - "2 0.0 0.000003 0.0 \n", - "3 0.0 0.0 0.000006 \n", - "4 0.0 0.0 0.0 \n", - ".. ... ... ... \n", - "151 0.0 0.0 0.0 \n", - "152 0.0 0.0 0.0 \n", - "153 0.0 0.0 0.0 \n", - "154 0.0 0.0 0.0 \n", - "155 0.0 0.0 0.0 \n", - "\n", - " c calloc c close c fcntl ... vfs vfs_unlink c posix_memalign \\\n", - "0 0.0 0.0 0.0 ... 0.0 0.0 \n", - "1 0.0 0.0 0.0 ... 0.0 0.0 \n", - "2 0.0 0.0 0.0 ... 0.0 0.0 \n", - "3 0.0 0.0 0.0 ... 0.0 0.0 \n", - "4 0.02909 0.0 0.0 ... 0.0 0.0 \n", - ".. ... ... ... ... ... ... \n", - "151 0.0 0.0 0.0 ... 0.0 0.0 \n", - "152 0.0 0.0 0.0 ... 0.0 0.0 \n", - "153 0.0 0.0 0.0 ... 0.0 0.0 \n", - "154 0.0 0.0 0.0 ... 0.0 0.0 \n", - "155 0.0 0.0 0.0 ... 0.000095 0.0 \n", - "\n", - " block block_invalidate_folio ext4 ext4_da_release_space \\\n", - "0 0.0 0.0 \n", - "1 0.0 0.0 \n", - "2 0.0 0.0 \n", - "3 0.0 0.0 \n", - "4 0.0 0.0 \n", - ".. ... ... \n", - "151 0.0 0.0 \n", - "152 0.0 0.0 \n", - "153 0.0 0.0 \n", - "154 0.0 0.0 \n", - "155 0.0 0.0 \n", - "\n", - " ext4 ext4_discard_preallocations ext4 ext4_free_blocks \\\n", - "0 0.0 0.0 \n", - "1 0.0 0.0 \n", - "2 0.0 0.0 \n", - "3 0.0 0.0 \n", - "4 0.0 0.0 \n", - ".. ... ... \n", - "151 0.0 0.0 \n", - "152 0.0 0.0 \n", - "153 0.0 0.0 \n", - "154 0.0 0.0 \n", - "155 0.0 0.0 \n", - "\n", - " ext4 ext4_remove_blocks ext4 ext4_truncate vfs ext4_da_release_space \\\n", - "0 0.0 0.0 0.0 \n", - "1 0.0 0.0 0.0 \n", - "2 0.0 0.0 0.0 \n", - "3 0.0 0.0 0.0 \n", - "4 0.0 0.0 0.0 \n", - ".. ... ... ... \n", - "151 0.0 0.0 0.0 \n", - "152 0.0 0.0 0.0 \n", - "153 0.0 0.0 0.0 \n", - "154 0.0 0.0 0.0 \n", - "155 0.0 0.0 0.0 \n", - "\n", - " vfs vfs_rmdir \n", - "0 0.0 \n", - "1 0.0 \n", - "2 0.0 \n", - "3 0.0 \n", - "4 0.0 \n", - ".. ... \n", - "151 0.0 \n", - "152 0.0 \n", - "153 0.00002 \n", - "154 0.0 \n", - "155 0.0 \n", - "\n", - "[156 rows x 65 columns]" - ] - }, - "execution_count": 196, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "for fn in selected_functions:\n", - " grouped_events[fn] = 0\n", - " grouped_events[fn] = grouped_events[fn].mask(fn == grouped_events[\"name\"], grouped_events[\"dur_sec\"])\n", - "grouped_events" - ] - }, - { - "cell_type": "code", - "execution_count": 197, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "block block_devnode 0.0\n", - "block block_dirty_folio 0.000001\n", - "block block_uevent 0.0\n", - "block mark_buffer_dirty 0.0\n", - "c calloc 0.000783\n", - " ... \n", - "ext4 ext4_free_blocks 0.000002\n", - "ext4 ext4_remove_blocks 0.000002\n", - "ext4 ext4_truncate 0.000003\n", - "vfs ext4_da_release_space 0.0\n", - "vfs vfs_rmdir 0.0\n", - "Length: 62, dtype: double[pyarrow]" - ] - }, - "execution_count": 197, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "final_df = grouped_events.groupby(\"ts\")[selected_functions].sum()\n", - "value = final_df.sum()\n", - "per = value / value.sum()\n", - "per.T" - ] - }, - { - "cell_type": "code", - "execution_count": 198, - "metadata": {}, - "outputs": [ - { - "ename": "AttributeError", - "evalue": "'bool' object has no attribute 'any'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[198], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mper\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mT\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mpie\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfigsize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m5\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/datacrumbs/venv/lib/python3.10/site-packages/pandas/plotting/_core.py:1030\u001b[0m, in \u001b[0;36mPlotAccessor.__call__\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1027\u001b[0m label_name \u001b[38;5;241m=\u001b[39m label_kw \u001b[38;5;129;01mor\u001b[39;00m data\u001b[38;5;241m.\u001b[39mcolumns\n\u001b[1;32m 1028\u001b[0m data\u001b[38;5;241m.\u001b[39mcolumns \u001b[38;5;241m=\u001b[39m label_name\n\u001b[0;32m-> 1030\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mplot_backend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkind\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mkind\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/datacrumbs/venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/__init__.py:70\u001b[0m, in \u001b[0;36mplot\u001b[0;34m(data, kind, **kwargs)\u001b[0m\n\u001b[1;32m 68\u001b[0m ax \u001b[38;5;241m=\u001b[39m plt\u001b[38;5;241m.\u001b[39mgca()\n\u001b[1;32m 69\u001b[0m kwargs[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124max\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mgetattr\u001b[39m(ax, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mleft_ax\u001b[39m\u001b[38;5;124m\"\u001b[39m, ax)\n\u001b[0;32m---> 70\u001b[0m plot_obj \u001b[38;5;241m=\u001b[39m \u001b[43mPLOT_CLASSES\u001b[49m\u001b[43m[\u001b[49m\u001b[43mkind\u001b[49m\u001b[43m]\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 71\u001b[0m plot_obj\u001b[38;5;241m.\u001b[39mgenerate()\n\u001b[1;32m 72\u001b[0m plot_obj\u001b[38;5;241m.\u001b[39mdraw()\n", - "File \u001b[0;32m~/datacrumbs/venv/lib/python3.10/site-packages/pandas/plotting/_matplotlib/core.py:2051\u001b[0m, in \u001b[0;36mPiePlot.__init__\u001b[0;34m(self, data, kind, **kwargs)\u001b[0m\n\u001b[1;32m 2049\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, data, kind\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 2050\u001b[0m data \u001b[38;5;241m=\u001b[39m data\u001b[38;5;241m.\u001b[39mfillna(value\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m-> 2051\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m<\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43many\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43many\u001b[49m():\n\u001b[1;32m 2052\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_kind\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m plot doesn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt allow negative values\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 2053\u001b[0m MPLPlot\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, data, kind\u001b[38;5;241m=\u001b[39mkind, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "\u001b[0;31mAttributeError\u001b[0m: 'bool' object has no attribute 'any'" - ] - } - ], - "source": [ - "\n", - "per.T.plot(kind='pie', figsize=(5, 5))" - ] - }, - { - "cell_type": "code", - "execution_count": 199, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Time (sec)')" - ] - }, - "execution_count": 199, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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6hyPRmBgIBwcHLSPBwwYAA8PD/zyyy/51hkbGwsLCwvY29vrtDs7OyMlJQUHDx7Mc9tdu3bB398fFSpU0DmXXbp0gUqlwokTJwAA3333HSRJwty5c/We49ke7goVKgAAYmJi8q2biMwLwy4R0TOqVaum89jJyQkA4OXlpdeecyzurVu3kJiYiEqVKsHNzU3n68mTJ4iOjgYABAQEoH///pg/fz5cXV3xyiuvICQkBEqlslD1xcXF4Z133kHlypVhY2MDNzc3eHt7AwASExMLdTzW1tbaYR15HY9G7dq1dR5LkoRatWppxz4X1dtvv406deqgZ8+eqFq1KkaOHIlff/1VZ51bt27h119/1TuPmvG/mnN5+/ZteHp6wsXFpcD9iqfjq58NwURk3jhml4joGXK5vNDtIscFamq1GpUqVcL27dtz3V4zVliSJISGhuLs2bP46aefsH//fowcORKffvopzp49q9cT+qxBgwbh9OnTmDZtGho3bgx7e3uo1Wr06NEj1xs35FZ3XsconrngriQqVqyIrKwsJCcn6/QMV6pUCVeuXMH+/fuxb98+7Nu3DyEhIQgMDMTmzZsBZJ/Lrl27Yvr06bk+d506dYpcjybIPxvyici8MewSkVkry148Hx8fHDp0CG3bts33wi2NVq1aoVWrVli8eDG+/vprvPHGG9ixYwdGjx6dZ93x8fE4fPgw5s+fjzlz5mjbb9269dyO41nPPrcQAv/884/2grm81KtXD0D2rAzPrqtQKNC7d2/07t0barUab7/9Nr744gvMnj0btWrVgo+PD548eZLrTA45+fj4YP/+/YiLiyuwdzc8PBwAUL9+/XzXIyLzwmEMRGTW7OzsAKBM7qA2aNAgqFQqLFy4UG9ZVlaWtob4+Hi9HtTGjRsDgHYog62tLQD9ujU9ss9un3N2gudty5YtSE5O1j4ODQ1FVFQUevbsme92rVu3BgC9KcCenSJNJpNpw7Dm+AcNGoQzZ85g//79es+bkJCArKwsAED//v0hhMD8+fP11nv2HP3222+QJElbFxGVD+zZJSKz1qxZMwDAhx9+iCFDhsDS0hK9e/fWhuDnKSAgAGPHjsVHH32EK1euoFu3brC0tMStW7ewa9curF69GgMGDMDmzZsRHByMV199FT4+PkhOTsaXX34JR0dH9OrVC0D2RWgvvPACdu7ciTp16sDFxQW+vr7w9fVF+/btsWzZMmRmZqJKlSo4cOCAtteyNLi4uKBdu3YYMWIEHj16hFWrVqFWrVp466238t2uZs2a8PX1xaFDh7RzCAPZF8zFxcWhU6dOqFq1Ku7evYu1a9eicePG2l7XadOm4ccff8TLL7+M4cOHo1mzZkhJScG1a9cQGhqKiIgIuLq6omPHjnjzzTexZs0a3Lp1SzuUIywsDB07dsTEiRO1+z148CDatm2LihUrls6JIiKjxLBLRGatRYsWWLhwIdavX49ff/0VarUa4eHhpRJ2AWD9+vVo1qwZvvjiC3zwwQewsLBAjRo1MHToULRt2xZAdig+f/48duzYgUePHsHJyQktW7bE9u3btReaAcBXX32FoKAgTJ48GRkZGZg7dy58fX3x9ddfIygoCJ9//jmEEOjWrRv27dsHT0/PUjmmDz74AL///js++ugjJCcno3PnzggODtb2Pudn5MiRmDNnDtLS0rRDO4YOHYoNGzYgODgYCQkJcHd3x+DBgzFv3jzIZNkfONra2uL48eNYsmQJdu3ahS1btsDR0RF16tTB/PnztRcNAtl3aWvUqBE2btyIadOmwcnJCc2bN0ebNm206yQmJuLAgQMIDg5+zmeHiIydJJ7n1QhERGQ2jh07ho4dO2LXrl0YMGBAsZ4jMTERNWvWxLJly3SmOitrq1atwrJly3D79u1CjacmIvPBMbtERFRqnJycMH36dCxfvjzXmSLKQmZmJlasWIFZs2Yx6BKVQxzGQEREpWrGjBmYMWOGwfZvaWmJe/fuGWz/RGRY7NklIiIiIrPFMbtEREREZLbYs0tEREREZothl4iIiIjMFsMuEREREZkthl0iIiIiMlsMu0RERERkthh2iYiIiMhsMewSERERkdli2CUiIiIis8WwS0RERERm6/8OyywUo7ienQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "plt.figure()\n", - "plt.rcParams.update({'font.size': 12})\n", - "ax = final_df.query(\"ts > 1\")[[\"c write\", \"sys write\", \"ext4 ext4_file_write_iter\",\"vfs rw_verify_area\"]].plot(figsize=(8,4),marker='x');\n", - "ax.set_xlabel(\"timestamp (sec)\")\n", - "ax.set_ylabel(\"Time (sec)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 200, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Time (sec)')" - ] - }, - "execution_count": 200, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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desc5tUtV64ccXF33jxuhZY960KHt/6dfiz75++THa8Xg9DQUEaMGMGIESOIjY2ladOmTJ482eFMdEOHDqVv377s3r2bxYsX06RJE+rVq5djX3fffTd33303kydP5uuvv+bhhx9myZIlPPXUUwXOVb16dVJSUujcufMN1/v222/x8PDg119/dehFXrBggcN6VapUwWq1cuLECYfe3KNHjxY4mxBCCOHqPOs2wsI69ImZzo5SrArVs1u/fn2++uor4uPjWbBgAZcvX3b4Bvvp06cJCgq6ZSFLPavFsdDNFvG6rd1qKZYYFouFxMREh7aQkBDCwsIchgIA9OjRg6CgIN599102btyYY1aO+Pj4HL2ojRs3Bsixr/waNGgQ27dv59dff82xLCEhAbPZDNhOV61pGhbLv8ctKiqKFStW5LgPAB999JFD+7WzOgghhBClRcjdtu/VqHSNhIsxTk5TfArVs/v222/Tu3dve0F77733Onxh7aeffqJFixa3JuGd4EYnjCjGHt3k5GQqVqzIgAEDaNSoET4+Pvz222/s3r2b//3vfw7rGgwGHnzwQT7++GP0ej0PPfSQw/IvvviC2bNn079/f6pXr05ycjKffvopfn5+9OzZs1D5XnvtNVauXMl9993HsGHDaNasGampqfz5559ERkYSFRVFUFAQvXr14v3336d79+4MGTKE2NhYZs2aRY0aNTh48KB9f40bN+ahhx5i9uzZJCYm0rp1a9atW8c///xTqHxCCCGEKwuoWosL7gqVqXFhx0YC+j7o7EjFolDFbvZJBtauXUtAQACDBw+2L4uPj6ddu3YOX2ATJYOXlxcjRoxgzZo1fPfdd1itVmrUqMHs2bN57rnncqw/dOhQPv74Yzp16kRoaKjDsoiICHbt2sWSJUu4ePEi/v7+tGzZksWLF+f65bP85tu4cSNTpkxh+fLlfPnll/j5+VGrVi0mTJiAv78/AB07dmT+/Pn83//9Hy+99BLh4eG8++67REVFORS7AJ9//jnBwcEsXryYFStW0LFjR3766Sf7FGZCCCFEaaL83eCShbQ//4A7pNi9ZfPsliaFnmf3DpM9T+2XX37Jo48+6uw4QohiIH//hCjZ/uzTGrdj8aS1qUOzz753dpwiuaXz7KYV4bRyRdlWuLZPP/0UHx8f7r//fmdHEUIIIUQ+WK5+Emu4g8bs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X69u3bq0b9+eZs2aERgYyJ49e4iMjOSFF17I920NHTqUL7/8kldeeYVdu3bRtm1bUlNT+e233xgxYgR9+/alV69evP/++3Tv3p0hQ4YQGxvLrFmzqFGjBgcPHrTvq0aNGrz11lu88847tG3blvvvvx+j0cju3bsJCwtj6tSpBToOr732GitXruS+++6zT0uWmprKn3/+SWRkJFFRUQQFBRVon/nl5+dHu3bteO+998jKyqJChQqsWbOGU6dOFXqfnp6erFq1io4dO9KjRw82btx40zGn1zt16hR9+vShe/fubN++na+++oohQ4bQqJFtrsauXbvaeyifeeYZUlJS+PTTTwkJCXEowMqVK8eLL77I//73P/v+Dhw4wOrVqwkKCnIYHnGrHoc6depQvXp1Ro8eTXR0NH5+fnz77bc5epIBPvroI9q0aUPTpk0ZPnw44eHhREVF8dNPP7F//34ApkyZwpo1a4iIiGD48OHcddddxMTEsHz5crZs2UJAQEC+sz/11FNcuXKFjh07UrFiRU6fPs3MmTNp3Lgxd911F5C/19usWbNo06YNDRo04Omnn6ZatWpcvHiR7du3c+7cOQ4cOADYTgq0aNEiunfvzosvvmifeqxKlSoOrykhROlX/p72RAEqU8elf45SrvbNv/dSIhVmqoe+ffsqnU6nhgwZombMmKEWLlyY66WkKuzUY6XF3r17Vbdu3ZSPj4/y8vJSHTp0cJhCSymlJk2apFq2bKkCAgKUp6enqlOnjpo8ebLKzMws0G2lpaWpt956S4WHhyuDwaDKly+vBgwY4DD12fz581XNmjWV0WhUderUUQsWLLBPh3W9zz//XDVp0kQZjUZVpkwZFRERodauXWtfXqVKlVyncIqIiFAREREObcnJyWrMmDGqRo0ayt3dXQUFBanWrVur6dOn3/R+5nU7gHr++ecd2k6dOqUANW3aNHvbuXPnVP/+/VVAQIDy9/dXAwcOVOfPn1eAGjdunH297ONw6dKlHLd17dRj2eLi4lTdunVV+fLl1fHjx294H66/jcOHD6sBAwYoX19fVaZMGfXCCy/keA2sXLlSNWzYUHl4eKiqVauqd9991z7F3LVTWpnNZjV27FhVvnx55enpqTp27Kj+/vtvVbZsWfXss8867LMoj8O1Dh8+rDp37qx8fHxUUFCQevrpp9WBAwcUoBYs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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "plt.figure()\n", - "plt.rcParams.update({'font.size': 12})\n", - "ax = final_df.query(\"ts > 1\")[[\"c read\", \"sys read\", \"os_cache mark_page_accessed\", \"vfs rw_verify_area\"]].plot(figsize=(8,4),marker='x');\n", - "ax.set_xlabel(\"Timestamp (sec)\")\n", - "ax.set_ylabel(\"Time (sec)\")" - ] - }, - { - "cell_type": "code", - "execution_count": 63, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "c read 14.954187\n", - "sys read 14.917816\n", - "os_cache mark_page_accessed 0.003194\n", - "vfs rw_verify_area 14.911553\n", - "dtype: double[pyarrow]" - ] - }, - "execution_count": 63, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "final_df[[\"c read\", \"sys read\", \"os_cache mark_page_accessed\",\"vfs rw_verify_area\"]].sum()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pidtidts_usdur_secfreqsize_bytesfunc_idfilenamecat
859378183781800.082555112015<NA>ext4_da_write_begin<NA>ext4
936378183781800.00009930<NA>write<NA>c
1425378183781800.00006530240write<NA>sys
2491378183781800.002582437<NA>write<NA>c
2607378183781800.001801437458227712write/home/cc/dfprofiler/build/data/file_0_0.datsys
..............................
55853781837818270000000.1454480467<NA>ext4_da_write_end<NA>ext4
55883781837818270000000.000016371write<NA>sys
55903781837818270000000.00197315<NA>write<NA>c
56023781837818270000000.0678980467<NA>ext4_da_write_begin<NA>ext4
56103781837818270000000.000023<NA>write<NA>c
\n", - "

164 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " pid tid ts_us dur_sec freq size_bytes \\\n", - "859 37818 37818 0 0.082555 112015 \n", - "936 37818 37818 0 0.000099 30 \n", - "1425 37818 37818 0 0.000065 30 240 \n", - "2491 37818 37818 0 0.002582 437 \n", - "2607 37818 37818 0 0.001801 437 458227712 \n", - "... ... ... ... ... ... ... \n", - "5585 37818 37818 27000000 0.14544 80467 \n", - "5588 37818 37818 27000000 0.000016 3 71 \n", - "5590 37818 37818 27000000 0.00197 315 \n", - "5602 37818 37818 27000000 0.06789 80467 \n", - "5610 37818 37818 27000000 0.00002 3 \n", - "\n", - " func_id filename cat \n", - "859 ext4_da_write_begin ext4 \n", - "936 write c \n", - "1425 write sys \n", - "2491 write c \n", - "2607 write /home/cc/dfprofiler/build/data/file_0_0.dat sys \n", - "... ... ... ... \n", - "5585 ext4_da_write_end ext4 \n", - "5588 write sys \n", - "5590 write c \n", - "5602 ext4_da_write_begin ext4 \n", - "5610 write c \n", - "\n", - "[164 rows x 9 columns]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.query(\"func_id.str.contains('write')\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.float64(31.676917175762355)" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "total_io = events[\"size_bytes\"].sum().compute() / (1024**3)\n", - "total_io" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-07-22 01:24:23,458 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 9400d42321dba2557730a45dee920254 initialized by task ('shuffle-transfer-9400d42321dba2557730a45dee920254', 0) executed on worker tcp://127.0.0.1:40747\n", - "2024-07-22 01:24:23,932 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 9400d42321dba2557730a45dee920254 deactivated due to stimulus 'task-finished-1721611463.9289641'\n", - "2024-07-22 01:24:24,677 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle a7bbad67b47d71bd4cb36976c19a97a4 initialized by task ('shuffle-transfer-a7bbad67b47d71bd4cb36976c19a97a4', 0) executed on worker tcp://127.0.0.1:40747\n", - "2024-07-22 01:24:25,071 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle a7bbad67b47d71bd4cb36976c19a97a4 deactivated due to stimulus 'task-finished-1721611465.0678325'\n", - "2024-07-22 01:24:25,193 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 1a5a179e368417d8ea2ef928c4c79562 initialized by task ('shuffle-transfer-1a5a179e368417d8ea2ef928c4c79562', 0) executed on worker tcp://127.0.0.1:40747\n", - "2024-07-22 01:24:25,246 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 1a5a179e368417d8ea2ef928c4c79562 deactivated due to stimulus 'task-finished-1721611465.244113'\n", - "2024-07-22 01:24:25,366 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 6683756322d2e2bf9a7ae4dfb831bbe8 initialized by task ('shuffle-transfer-6683756322d2e2bf9a7ae4dfb831bbe8', 0) executed on worker tcp://127.0.0.1:40747\n", - "2024-07-22 01:24:25,761 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 6683756322d2e2bf9a7ae4dfb831bbe8 deactivated due to stimulus 'task-finished-1721611465.7567058'\n" - ] - }, - { - "data": { - "text/plain": [ - "0 /sys/devices/system/cpu/cpu15/cpufreq/cpuinfo_...\n", - "1 /sys/bus/pci/devices/0000:85:0f.7/config\n", - "2 /sys/devices/system/cpu/cpu12/cache/index0/size\n", - "3 /sys/devices/system/cpu/cpu17/topology/die_cpus\n", - "4 /sys/bus/pci/devices/0000:85:11.2/config\n", - " ... \n", - "1922 /sys/bus/pci/devices/0000:00:11.5/current_link...\n", - "1923 /sys/devices/system/cpu/cpu18/cache/index5/sha...\n", - "1924 /home/cc/spack/opt/spack/linux-ubuntu22.04-sky...\n", - "1925 /sys/devices/system/cpu/cpu32/cache/index4/sha...\n", - "1926 /tmp/ompi.ebpf.1000/jf.0/2967207936\n", - "Name: filename, Length: 1927, dtype: string" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "filenames = events[\"filename\"].unique().compute()\n", - "filenames" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(1.675211951136589, 35457.0)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "read_write_time = events.query(\"size_bytes > 0\").groupby([\"pid\",\"tid\", \"ts_us\"])[[\"freq\",\"dur_sec\"]].sum().groupby([\"ts_us\"]).agg({\"freq\":sum,\"dur_sec\":max}).sum().compute()\n", - "read_write_time[\"dur_sec\"], read_write_time[\"freq\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Bandwidth is 18.909199611589667 GB/s\n" - ] - } - ], - "source": [ - "print(\"Bandwidth is {} GB/s\".format(total_io / read_write_time['dur_sec']))" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pidtidts_usdur_secfreqsize_bytesfunc_idfilenamecat
55473781837818260000000.001643379397410304write/home/cc/dfprofiler/build/data/file_0_0.datsys
55483781837818260000000.000698379<NA>lseek64<NA>c
55493781837818260000000.08135396986<NA>ext4_da_write_begin<NA>ext4
55503781837818260000000.04046797000<NA>ext4_da_reserve_space<NA>ext4
55513781837818260000000.037071379397410304read/home/cc/dfprofiler/build/data/file_0_0.datsys
55523781837818260000000.05310997006<NA>mark_buffer_dirty<NA>os_cache
55533781837818260000000.0787997014<NA>mark_buffer_dirty<NA>block
55543781837818260000000.000483758<NA>rw_verify_area<NA>vfs
55553781837818260000000.17326397020<NA>ext4_da_write_end<NA>ext4
55563781837818260000000.001427379<NA>mark_buffer_dirty<NA>vfs
55573781837818260000000.037668379<NA>read<NA>c
55583781837818260000000.000238379<NA>lseek<NA>sys
55593781837818260000000.000795379<NA>lseek<NA>c
55603781837818260000000.002336379<NA>write<NA>c
55613781837818260000000.000904379<NA>ext4_file_write_iter<NA>ext4
55623781837818260000000.036838379<NA>rw_verify_area<NA>vfs
55633781837818260000000.000845189198180864write/home/cc/dfprofiler/build/data/file_0_0.datsys
55643781837818260000000.000339188<NA>lseek64<NA>c
55653781837818260000000.04051248231<NA>ext4_da_write_begin<NA>ext4
55663781837818260000000.02011448181<NA>ext4_da_reserve_space<NA>ext4
55673781837818260000000.018482188197132288read/home/cc/dfprofiler/build/data/file_0_0.datsys
55683781837818260000000.02626248083<NA>mark_buffer_dirty<NA>os_cache
55693781837818260000000.03906148045<NA>mark_buffer_dirty<NA>block
55703781837818260000000.000233374<NA>rw_verify_area<NA>vfs
55713781837818260000000.08619847948<NA>ext4_da_write_end<NA>ext4
55723781837818260000000.000724187<NA>mark_buffer_dirty<NA>vfs
55733781837818260000000.018684187<NA>read<NA>c
55743781837818260000000.000116187<NA>lseek<NA>sys
55753781837818260000000.000382186<NA>lseek<NA>c
55763781837818260000000.001176186<NA>write<NA>c
55773781837818260000000.000443186<NA>ext4_file_write_iter<NA>ext4
55783781837818260000000.018155186<NA>rw_verify_area<NA>vfs
\n", - "
" - ], - "text/plain": [ - " pid tid ts_us dur_sec freq size_bytes \\\n", - "5547 37818 37818 26000000 0.001643 379 397410304 \n", - "5548 37818 37818 26000000 0.000698 379 \n", - "5549 37818 37818 26000000 0.081353 96986 \n", - "5550 37818 37818 26000000 0.040467 97000 \n", - "5551 37818 37818 26000000 0.037071 379 397410304 \n", - "5552 37818 37818 26000000 0.053109 97006 \n", - "5553 37818 37818 26000000 0.07879 97014 \n", - "5554 37818 37818 26000000 0.000483 758 \n", - "5555 37818 37818 26000000 0.173263 97020 \n", - "5556 37818 37818 26000000 0.001427 379 \n", - "5557 37818 37818 26000000 0.037668 379 \n", - "5558 37818 37818 26000000 0.000238 379 \n", - "5559 37818 37818 26000000 0.000795 379 \n", - "5560 37818 37818 26000000 0.002336 379 \n", - "5561 37818 37818 26000000 0.000904 379 \n", - "5562 37818 37818 26000000 0.036838 379 \n", - "5563 37818 37818 26000000 0.000845 189 198180864 \n", - "5564 37818 37818 26000000 0.000339 188 \n", - "5565 37818 37818 26000000 0.040512 48231 \n", - "5566 37818 37818 26000000 0.020114 48181 \n", - "5567 37818 37818 26000000 0.018482 188 197132288 \n", - "5568 37818 37818 26000000 0.026262 48083 \n", - "5569 37818 37818 26000000 0.039061 48045 \n", - "5570 37818 37818 26000000 0.000233 374 \n", - "5571 37818 37818 26000000 0.086198 47948 \n", - "5572 37818 37818 26000000 0.000724 187 \n", - "5573 37818 37818 26000000 0.018684 187 \n", - "5574 37818 37818 26000000 0.000116 187 \n", - "5575 37818 37818 26000000 0.000382 186 \n", - "5576 37818 37818 26000000 0.001176 186 \n", - "5577 37818 37818 26000000 0.000443 186 \n", - "5578 37818 37818 26000000 0.018155 186 \n", - "\n", - " func_id filename \\\n", - "5547 write /home/cc/dfprofiler/build/data/file_0_0.dat \n", - "5548 lseek64 \n", - "5549 ext4_da_write_begin \n", - "5550 ext4_da_reserve_space \n", - "5551 read /home/cc/dfprofiler/build/data/file_0_0.dat \n", - "5552 mark_buffer_dirty \n", - "5553 mark_buffer_dirty \n", - "5554 rw_verify_area \n", - "5555 ext4_da_write_end \n", - "5556 mark_buffer_dirty \n", - "5557 read \n", - "5558 lseek \n", - "5559 lseek \n", - "5560 write \n", - "5561 ext4_file_write_iter \n", - "5562 rw_verify_area \n", - "5563 write /home/cc/dfprofiler/build/data/file_0_0.dat \n", - "5564 lseek64 \n", - "5565 ext4_da_write_begin \n", - "5566 ext4_da_reserve_space \n", - "5567 read /home/cc/dfprofiler/build/data/file_0_0.dat \n", - "5568 mark_buffer_dirty \n", - "5569 mark_buffer_dirty \n", - "5570 rw_verify_area \n", - "5571 ext4_da_write_end \n", - "5572 mark_buffer_dirty \n", - "5573 read \n", - "5574 lseek \n", - "5575 lseek \n", - "5576 write \n", - "5577 ext4_file_write_iter \n", - "5578 rw_verify_area \n", - "\n", - " cat \n", - "5547 sys \n", - "5548 c \n", - "5549 ext4 \n", - "5550 ext4 \n", - "5551 sys \n", - "5552 os_cache \n", - "5553 block \n", - "5554 vfs \n", - "5555 ext4 \n", - "5556 vfs \n", - "5557 c \n", - "5558 sys \n", - "5559 c \n", - "5560 c \n", - "5561 ext4 \n", - "5562 vfs \n", - "5563 sys \n", - "5564 c \n", - "5565 ext4 \n", - "5566 ext4 \n", - "5567 sys \n", - "5568 os_cache \n", - "5569 block \n", - "5570 vfs \n", - "5571 ext4 \n", - "5572 vfs \n", - "5573 c \n", - "5574 sys \n", - "5575 c \n", - "5576 c \n", - "5577 ext4 \n", - "5578 vfs " - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.query(\"ts_us == 26000000\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pidtidts_usdur_secfreqsize_bytesfunc_idfilenamecat
1378183781800.000013164read/sys/bus/pci/devices/0000:85:0f.7/configsys
3378183781800.00000218read/sys/devices/system/cpu/cpu15/cpufreq/cpuinfo_...sys
5378183781800.000013164read/sys/bus/pci/devices/0000:85:11.2/configsys
13378183781800.00000219read/sys/bus/pci/devices/0000:01:00.1/classsys
16378183781800.000009164read/sys/bus/pci/devices/0000:00:05.2/configsys
..............................
55573781837818260000000.037668379<NA>read<NA>c
55673781837818260000000.018482188197132288read/home/cc/dfprofiler/build/data/file_0_0.datsys
55733781837818260000000.018684187<NA>read<NA>c
55793781837818270000000.031017315330301440read/home/cc/dfprofiler/build/data/file_0_0.datsys
56013781837818270000000.031514315<NA>read<NA>c
\n", - "

1610 rows × 9 columns

\n", - "
" - ], - "text/plain": [ - " pid tid ts_us dur_sec freq size_bytes func_id \\\n", - "1 37818 37818 0 0.000013 1 64 read \n", - "3 37818 37818 0 0.000002 1 8 read \n", - "5 37818 37818 0 0.000013 1 64 read \n", - "13 37818 37818 0 0.000002 1 9 read \n", - "16 37818 37818 0 0.000009 1 64 read \n", - "... ... ... ... ... ... ... ... \n", - "5557 37818 37818 26000000 0.037668 379 read \n", - "5567 37818 37818 26000000 0.018482 188 197132288 read \n", - "5573 37818 37818 26000000 0.018684 187 read \n", - "5579 37818 37818 27000000 0.031017 315 330301440 read \n", - "5601 37818 37818 27000000 0.031514 315 read \n", - "\n", - " filename cat \n", - "1 /sys/bus/pci/devices/0000:85:0f.7/config sys \n", - "3 /sys/devices/system/cpu/cpu15/cpufreq/cpuinfo_... sys \n", - "5 /sys/bus/pci/devices/0000:85:11.2/config sys \n", - "13 /sys/bus/pci/devices/0000:01:00.1/class sys \n", - "16 /sys/bus/pci/devices/0000:00:05.2/config sys \n", - "... ... ... \n", - "5557 c \n", - "5567 /home/cc/dfprofiler/build/data/file_0_0.dat sys \n", - "5573 c \n", - "5579 /home/cc/dfprofiler/build/data/file_0_0.dat sys \n", - "5601 c \n", - "\n", - "[1610 rows x 9 columns]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.query(\"func_id.str.contains('read')\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pidtidts_usdur_secfreqsize_bytesfunc_idfilenamecat
55153781837818240000000.081968147784<NA>mark_buffer_dirty<NA>os_cache
55163781837818240000000.058051577<NA>read<NA>c
55173781837818240000000.001194577<NA>lseek<NA>c
55183781837818240000000.003649578<NA>write<NA>c
55193781837818240000000.000367577<NA>lseek<NA>sys
55203781837818240000000.001403578<NA>ext4_file_write_iter<NA>ext4
55213781837818240000000.125021147783<NA>ext4_da_write_begin<NA>ext4
55223781837818240000000.062439147783<NA>ext4_da_reserve_space<NA>ext4
55233781837818240000000.001049577<NA>lseek64<NA>c
55243781837818240000000.002207578<NA>mark_buffer_dirty<NA>vfs
55253781837818240000000.056767577<NA>rw_verify_area<NA>vfs
55263781837818240000000.12207147784<NA>mark_buffer_dirty<NA>block
55273781837818240000000.057129577605028352read/home/cc/dfprofiler/build/data/file_0_0.datsys
55283781837818240000000.0007541154<NA>rw_verify_area<NA>vfs
55293781837818240000000.002554578606076928write/home/cc/dfprofiler/build/data/file_0_0.datsys
55303781837818240000000.268658147784<NA>ext4_da_write_end<NA>ext4
\n", - "
" - ], - "text/plain": [ - " pid tid ts_us dur_sec freq size_bytes \\\n", - "5515 37818 37818 24000000 0.081968 147784 \n", - "5516 37818 37818 24000000 0.058051 577 \n", - "5517 37818 37818 24000000 0.001194 577 \n", - "5518 37818 37818 24000000 0.003649 578 \n", - "5519 37818 37818 24000000 0.000367 577 \n", - "5520 37818 37818 24000000 0.001403 578 \n", - "5521 37818 37818 24000000 0.125021 147783 \n", - "5522 37818 37818 24000000 0.062439 147783 \n", - "5523 37818 37818 24000000 0.001049 577 \n", - "5524 37818 37818 24000000 0.002207 578 \n", - "5525 37818 37818 24000000 0.056767 577 \n", - "5526 37818 37818 24000000 0.12207 147784 \n", - "5527 37818 37818 24000000 0.057129 577 605028352 \n", - "5528 37818 37818 24000000 0.000754 1154 \n", - "5529 37818 37818 24000000 0.002554 578 606076928 \n", - "5530 37818 37818 24000000 0.268658 147784 \n", - "\n", - " func_id filename \\\n", - "5515 mark_buffer_dirty \n", - "5516 read \n", - "5517 lseek \n", - "5518 write \n", - "5519 lseek \n", - "5520 ext4_file_write_iter \n", - "5521 ext4_da_write_begin \n", - "5522 ext4_da_reserve_space \n", - "5523 lseek64 \n", - "5524 mark_buffer_dirty \n", - "5525 rw_verify_area \n", - "5526 mark_buffer_dirty \n", - "5527 read /home/cc/dfprofiler/build/data/file_0_0.dat \n", - "5528 rw_verify_area \n", - "5529 write /home/cc/dfprofiler/build/data/file_0_0.dat \n", - "5530 ext4_da_write_end \n", - "\n", - " cat \n", - "5515 os_cache \n", - "5516 c \n", - "5517 c \n", - "5518 c \n", - "5519 sys \n", - "5520 ext4 \n", - "5521 ext4 \n", - "5522 ext4 \n", - "5523 c \n", - "5524 vfs \n", - "5525 vfs \n", - "5526 block \n", - "5527 sys \n", - "5528 vfs \n", - "5529 sys \n", - "5530 ext4 " - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.query(\"ts_us == 24000000\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 close\n", - "1 read\n", - "2 openat\n", - "3 vfs_open\n", - "4 vfs_statfs.part.0.isra.0\n", - "5 open64\n", - "6 statfs\n", - "7 mark_buffer_dirty\n", - "8 ext4_file_open\n", - "9 open\n", - "10 vfs_unlink\n", - "11 ext4_da_write_begin\n", - "12 write\n", - "13 malloc\n", - "14 ext4_da_reserve_space\n", - "15 shm_open\n", - "16 fcntl\n", - "17 realloc\n", - "18 vfs_statx\n", - "19 fileno\n", - "20 mmap64\n", - "21 vfs_getattr_nosec\n", - "22 lseek\n", - "23 calloc\n", - "24 PMPI_Comm_size\n", - "25 rw_verify_area\n", - "26 PMPI_Init\n", - "27 _Z10gen_randomB5cxx11i\n", - "28 fdopen\n", - "29 posix_memalign\n", - "30 vfs_readlink\n", - "31 ext4_file_write_iter\n", - "32 free\n", - "33 munmap\n", - "34 _init\n", - "35 mark_page_accessed\n", - "36 readlinkat\n", - "37 fileno_unlocked\n", - "38 mmap\n", - "39 ext4_da_write_end\n", - "40 lseek64\n", - "41 shm_unlink\n", - "42 PMPI_Comm_rank\n", - "43 ftruncate\n", - "44 main\n", - "45 _fini\n", - "46 PMPI_Finalize\n", - "47 PMPI_Reduce\n", - "Name: func_id, dtype: string" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events[\"func_id\"].unique().compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 _Z10gen_randomB5cxx11i\n", - "1 _init\n", - "2 main\n", - "3 _fini\n", - "Name: func_id, dtype: string" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.query(\"cat == 'app'\")[\"func_id\"].unique().compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 PMPI_Comm_size\n", - "1 PMPI_Init\n", - "2 PMPI_Comm_rank\n", - "3 PMPI_Finalize\n", - "4 PMPI_Reduce\n", - "Name: func_id, dtype: string" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "events.query(\"cat == 'mpi'\")[\"func_id\"].unique().compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
catfunc_idfreqdur_sec
0app_Z10gen_randomB5cxx11i10.018685
1app_fini10.000003
2app_init10.000006
3appmain10.000006
4blockmark_buffer_dirty41526773.251503
5ccalloc34480.009626
6cclose15410.004579
7cfcntl40.000009
8cfdopen20.000009
9cfileno70.000028
10cfileno_unlocked70.000025
11cfree203110.055431
12clseek162130.033272
13clseek64162340.029236
14cmalloc268490.078281
15cmmap40.000029
16cmmap6440.000027
17cmunmap20.000032
18copen150.000091
19copen64150.000085
20cposix_memalign10.000006
21cread191981.634286
22crealloc126970.034448
23cshm_open10.000004
24cshm_unlink10.000004
25cwrite162530.100557
26ext4ext4_da_reserve_space41527701.679127
27ext4ext4_da_write_begin41504763.321167
28ext4ext4_da_write_end41521687.193426
29ext4ext4_file_open80.000007
30ext4ext4_file_write_iter162310.037478
31mpiPMPI_Comm_rank10.000003
32mpiPMPI_Comm_size10.000003
33mpiPMPI_Finalize10.000006
34mpiPMPI_Init10.000006
35mpiPMPI_Reduce40.000053
36os_cachemark_buffer_dirty41546562.143389
37os_cachemark_page_accessed10.000001
38sysclose15670.001399
39sysfcntl260.000013
40sysftruncate10.000005
41syslseek162260.010057
42sysmmap40.00002
43sysopenat19360.004989
44sysread192071.605098
45sysreadlinkat140.000019
46sysstatfs50.00001
47syswrite162500.070114
48vfsext4_file_open80.000012
49vfsmark_buffer_dirty158960.0593
50vfsrw_verify_area546881.614767
51vfsvfs_getattr_nosec1260.000113
52vfsvfs_open15520.001705
53vfsvfs_readlink140.000014
54vfsvfs_statfs.part.0.isra.030.000002
55vfsvfs_statx320.000141
56vfsvfs_unlink10.000002
\n", - "
" - ], - "text/plain": [ - " cat func_id freq dur_sec\n", - "0 app _Z10gen_randomB5cxx11i 1 0.018685\n", - "1 app _fini 1 0.000003\n", - "2 app _init 1 0.000006\n", - "3 app main 1 0.000006\n", - "4 block mark_buffer_dirty 4152677 3.251503\n", - "5 c calloc 3448 0.009626\n", - "6 c close 1541 0.004579\n", - "7 c fcntl 4 0.000009\n", - "8 c fdopen 2 0.000009\n", - "9 c fileno 7 0.000028\n", - "10 c fileno_unlocked 7 0.000025\n", - "11 c free 20311 0.055431\n", - "12 c lseek 16213 0.033272\n", - "13 c lseek64 16234 0.029236\n", - "14 c malloc 26849 0.078281\n", - "15 c mmap 4 0.000029\n", - "16 c mmap64 4 0.000027\n", - "17 c munmap 2 0.000032\n", - "18 c open 15 0.000091\n", - "19 c open64 15 0.000085\n", - "20 c posix_memalign 1 0.000006\n", - "21 c read 19198 1.634286\n", - "22 c realloc 12697 0.034448\n", - "23 c shm_open 1 0.000004\n", - "24 c shm_unlink 1 0.000004\n", - "25 c write 16253 0.100557\n", - "26 ext4 ext4_da_reserve_space 4152770 1.679127\n", - "27 ext4 ext4_da_write_begin 4150476 3.321167\n", - "28 ext4 ext4_da_write_end 4152168 7.193426\n", - "29 ext4 ext4_file_open 8 0.000007\n", - "30 ext4 ext4_file_write_iter 16231 0.037478\n", - "31 mpi PMPI_Comm_rank 1 0.000003\n", - "32 mpi PMPI_Comm_size 1 0.000003\n", - "33 mpi PMPI_Finalize 1 0.000006\n", - "34 mpi PMPI_Init 1 0.000006\n", - "35 mpi PMPI_Reduce 4 0.000053\n", - "36 os_cache mark_buffer_dirty 4154656 2.143389\n", - "37 os_cache mark_page_accessed 1 0.000001\n", - "38 sys close 1567 0.001399\n", - "39 sys fcntl 26 0.000013\n", - "40 sys ftruncate 1 0.000005\n", - "41 sys lseek 16226 0.010057\n", - "42 sys mmap 4 0.00002\n", - "43 sys openat 1936 0.004989\n", - "44 sys read 19207 1.605098\n", - "45 sys readlinkat 14 0.000019\n", - "46 sys statfs 5 0.00001\n", - "47 sys write 16250 0.070114\n", - "48 vfs ext4_file_open 8 0.000012\n", - "49 vfs mark_buffer_dirty 15896 0.0593\n", - "50 vfs rw_verify_area 54688 1.614767\n", - "51 vfs vfs_getattr_nosec 126 0.000113\n", - "52 vfs vfs_open 1552 0.001705\n", - "53 vfs vfs_readlink 14 0.000014\n", - "54 vfs vfs_statfs.part.0.isra.0 3 0.000002\n", - "55 vfs vfs_statx 32 0.000141\n", - "56 vfs vfs_unlink 1 0.000002" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "functions = events.groupby([\"func_id\", \"cat\", \"pid\",\"tid\", \"ts_us\"])[[\"freq\",\"dur_sec\"]].sum().groupby([\"func_id\", \"cat\", \"ts_us\"]).agg({\"freq\":sum,\"dur_sec\":max}).groupby([ \"cat\",\"func_id\"]).sum()\n", - "functions = functions.reset_index()\n", - "functions.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
catfunc_idfreqdur_sec
25cwrite162530.100557
\n", - "
" - ], - "text/plain": [ - " cat func_id freq dur_sec\n", - "25 c write 16253 0.100557" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "num_writes = functions.query(\"func_id == 'write' and cat == 'c'\")\n", - "num_writes.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
catfunc_idfreqdur_sec
30ext4ext4_file_write_iter162310.037478
\n", - "
" - ], - "text/plain": [ - " cat func_id freq dur_sec\n", - "30 ext4 ext4_file_write_iter 16231 0.037478" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "num_writes_ext4 = functions.query(\"func_id.str.contains('ext4_file_write_iter') and cat == 'ext4'\")\n", - "num_writes_ext4.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
catfunc_idfreqdur_sec
36os_cachemark_buffer_dirty41546562.143389
\n", - "
" - ], - "text/plain": [ - " cat func_id freq dur_sec\n", - "36 os_cache mark_buffer_dirty 4154656 2.143389" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "num_writes_os_cache = functions.query(\"func_id.str.contains('mark_buffer_dirty') and cat == 'os_cache'\")\n", - "num_writes_os_cache.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
catfunc_idfreqdur_sec
21cread191981.634286
\n", - "
" - ], - "text/plain": [ - " cat func_id freq dur_sec\n", - "21 c read 19198 1.634286" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "num_reads = functions.query(\"func_id == 'read' and cat == 'c'\")\n", - "num_reads.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
catfunc_idfreqdur_sec
\n", - "
" - ], - "text/plain": [ - "Empty DataFrame\n", - "Columns: [cat, func_id, freq, dur_sec]\n", - "Index: []" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "num_reads_ext4 = functions.query(\"func_id.str.contains('read') and cat == 'ext4'\")\n", - "num_reads_ext4.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
catfunc_idfreqdur_sec
37os_cachemark_page_accessed10.000001
\n", - "
" - ], - "text/plain": [ - " cat func_id freq dur_sec\n", - "37 os_cache mark_page_accessed 1 0.000001" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "num_writes_os_cache = functions.query(\"func_id.str.contains('mark_page_accessed') and cat == 'os_cache'\")\n", - "num_writes_os_cache.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [], - "source": [ - "min_ts, max_ts = dask.compute(events[\"ts_us\"].min(), events[\"ts_us\"].max())" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Application Time 27.0 seconds\n" - ] - } - ], - "source": [ - "print(f\"Application Time {(max_ts - min_ts) / 1e6} seconds\")" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.int64(21039362)" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "total_calls = events.freq.sum().compute()\n", - "total_calls" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "np.int64(55236)" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "system_calls = events.query(\"cat == 'sys'\")[\"freq\"].sum().compute()\n", - "system_calls" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Events captured per system call 380.89944963429645\n" - ] - }, - { - "ename": "", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", - "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", - "\u001b[1;31mClick
here for more info. \n", - "\u001b[1;31mView Jupyter log for further details." - ] - } - ], - "source": [ - "print(f\"Events captured per system call {total_calls/system_calls}\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/analysis/analysis_dfanalyzer.ipynb b/analysis/analysis_dfanalyzer.ipynb deleted file mode 100644 index 76752e8b..00000000 --- a/analysis/analysis_dfanalyzer.ipynb +++ /dev/null @@ -1,1756 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "e44656f6", - "metadata": {}, - "source": [ - "# DataCrumbs Analysis " - ] - }, - { - "cell_type": "markdown", - "id": "72c2c690", - "metadata": {}, - "source": [ - "### Run Analysis" - ] - }, - { - "cell_type": "markdown", - "id": "4bad5fec", - "metadata": {}, - "source": [ - "Finaly, we initialize the DFAnalyzer with the specified configuration and run the trace analysis to generate summarized I/O statistics and views for further exploration." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "a2a121a6", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-07-10 09:35:53,229 - distributed.diskutils - INFO - Found stale lock file and directory '/tmp/dfanalyzer-haridev/0/dask-worker-space/worker-_pifuahu', purging\n", - "2025-07-10 09:35:53,229 - distributed.diskutils - INFO - Found stale lock file and directory '/tmp/dfanalyzer-haridev/0/dask-worker-space/worker-qbpq_gad', purging\n", - "2025-07-10 09:35:53,229 - distributed.diskutils - INFO - Found stale lock file and directory '/tmp/dfanalyzer-haridev/0/dask-worker-space/worker-goxraqnd', purging\n", - "2025-07-10 09:35:53,229 - distributed.diskutils - INFO - Found stale lock file and directory '/tmp/dfanalyzer-haridev/0/dask-worker-space/worker-girbwgyd', purging\n" - ] - } - ], - "source": [ - "from dfanalyzer import init_with_hydra\n", - "\n", - "percentile = 0.9\n", - "time_granularity = 5e6 # 5 seconds\n", - "trace_path = f\"/home/haridev/data/lead2-trace-buff-ts.pfw.gz\"\n", - "view_types = [\"time_range\", \"proc_name\"]\n", - "\n", - "dfa = init_with_hydra(\n", - " hydra_overrides=[\n", - " 'analyzer=dftracer',\n", - " 'analyzer.checkpoint=False',\n", - " f\"analyzer.time_granularity={time_granularity}\",\n", - " f\"percentile={percentile}\",\n", - " f\"trace_path={trace_path}\",\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "cd41ae66", - "metadata": {}, - "source": [ - "We access the underlying Dask client via our Python API." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "446d8a9e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "
\n", - "
\n", - "

Client

\n", - "

Client-f26f66a2-5dab-11f0-878e-001e67e6cbcd

\n", - " \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", - " Dashboard: http://127.0.0.1:8787/status\n", - "
\n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "

Cluster Info

\n", - "
\n", - "
\n", - "
\n", - "
\n", - "

LocalCluster

\n", - "

a64b2568

\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - "\n", - " \n", - "
\n", - " Dashboard: http://127.0.0.1:8787/status\n", - " \n", - " Workers: 4\n", - "
\n", - " Total threads: 16\n", - " \n", - " Total memory: 0 B\n", - "
Status: runningUsing processes: True
\n", - "\n", - "
\n", - " \n", - "

Scheduler Info

\n", - "
\n", - "\n", - "
\n", - "
\n", - "
\n", - "
\n", - "

Scheduler

\n", - "

Scheduler-60e41a3d-5eef-44b0-adaa-63c4a92b3e30

\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
\n", - " Comm: tcp://127.0.0.1:45585\n", - " \n", - " Workers: 4\n", - "
\n", - " Dashboard: http://127.0.0.1:8787/status\n", - " \n", - " Total threads: 16\n", - "
\n", - " Started: Just now\n", - " \n", - " Total memory: 0 B\n", - "
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "

Workers

\n", - "
\n", - "\n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "

Worker: 0

\n", - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - "\n", - " \n", - "\n", - "
\n", - " Comm: tcp://127.0.0.1:39895\n", - " \n", - " Total threads: 4\n", - "
\n", - " Dashboard: http://127.0.0.1:40011/status\n", - " \n", - " Memory: 0 B\n", - "
\n", - " Nanny: tcp://127.0.0.1:37123\n", - "
\n", - " Local directory: /tmp/dfanalyzer-haridev/0/dask-worker-space/worker-j864x91a\n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "

Worker: 1

\n", - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - "\n", - " \n", - "\n", - "
\n", - " Comm: tcp://127.0.0.1:45839\n", - " \n", - " Total threads: 4\n", - "
\n", - " Dashboard: http://127.0.0.1:42765/status\n", - " \n", - " Memory: 0 B\n", - "
\n", - " Nanny: tcp://127.0.0.1:36275\n", - "
\n", - " Local directory: /tmp/dfanalyzer-haridev/0/dask-worker-space/worker-_922mrv0\n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "

Worker: 2

\n", - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - "\n", - " \n", - "\n", - "
\n", - " Comm: tcp://127.0.0.1:43165\n", - " \n", - " Total threads: 4\n", - "
\n", - " Dashboard: http://127.0.0.1:36445/status\n", - " \n", - " Memory: 0 B\n", - "
\n", - " Nanny: tcp://127.0.0.1:36133\n", - "
\n", - " Local directory: /tmp/dfanalyzer-haridev/0/dask-worker-space/worker-mlqztygw\n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "

Worker: 3

\n", - "
\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - "\n", - " \n", - "\n", - "
\n", - " Comm: tcp://127.0.0.1:41863\n", - " \n", - " Total threads: 4\n", - "
\n", - " Dashboard: http://127.0.0.1:34087/status\n", - " \n", - " Memory: 0 B\n", - "
\n", - " Nanny: tcp://127.0.0.1:39921\n", - "
\n", - " Local directory: /tmp/dfanalyzer-haridev/0/dask-worker-space/worker-88w57vr0\n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "\n", - "
\n", - "
\n", - "\n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - "\n", - "
\n", - "
" - ], - "text/plain": [ - "" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dfa.client" - ] - }, - { - "cell_type": "markdown", - "id": "654800f6", - "metadata": {}, - "source": [ - "We run the analysis via the `analyze_trace` function as follows." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "9eaff180", - "metadata": {}, - "outputs": [], - "source": [ - "result = dfa.analyzer.read_trace(trace_path=trace_path)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "cad23554", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 mm\n", - "1 os_page_cache\n", - "2 test_posix\n", - "3 swap\n", - "4 vfs\n", - "5 sys\n", - "6 shm\n", - "7 xfs\n", - "8 iomap\n", - "Name: cat, dtype: string" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result[\"cat\"].unique().compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "c52cebc9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
func_namecattypepidtidtime_starttime_endtimetintervaltime_range...io_catphasesizecompute_timecheckpoint_timeread_timehashvaluefile_namehost_name
10067openatsys0663496634997418183979251940.507011<NA>19...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
10134writesys0663496634997964119981556630.191544<NA>19...604096<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
10201closesys0663496634998165689982618900.096201<NA>19...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
3972openatsys06639566395524092895052409564620.027512<NA>1048...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
4031readsys06639566395524099635452411427750.146421<NA>1048...604096<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
4045closesys06639566395524115179852411797310.027933<NA>1048...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
14524openatsys06640266402538849573853889888870.493149<NA>1077...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
14638writesys06640266402538902769153892754340.247743<NA>1077...6016384<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
14706closesys06640266402538928434053893968850.112545<NA>1077...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
8491openatsys0664326643210530408462105304361420.02768<NA>2106...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
8587readsys0664326643210530475700105306392370.163537<NA>2106...6016384<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
8601closesys0664326643210530648226105306755520.027326<NA>2106...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
2760openatsys0664396643910675716170106761897210.473551<NA>2135...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
2994writesys0664396643910676229391106765994220.370031<NA>2135...6065536<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
3061closesys0664396643910676608004106767050970.097093<NA>2135...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
13309openatsys0664686646815820058089158200840950.026006<NA>3164...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
13489readsys0664686646815820122889158203763930.253504<NA>3164...6065536<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
13503closesys0664686646815820385756158204136080.027852<NA>3164...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
7956openatsys0664756647515966307370159667946610.487291<NA>3193...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
8734writesys0664756647515966822884159676371740.81429<NA>3193...60262144<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
8801closesys0664756647515967646025159677444460.098421<NA>3193...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
2946openatsys0665046650421116369222211163975360.028314<NA>4223...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
3526readsys0665046650421116427173211170733550.646182<NA>4223...60262144<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
3540closesys0665046650421117083017211171188210.035804<NA>4223...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
15538openatsys0665206652021266245024212667246400.479616<NA>4253...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
2048writesys0665206652021266752945212693745042.621559<NA>4253...601048576<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
2115closesys0665206652021269383975212694853080.101333<NA>4253...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
13814openatsys0665506655026414028598264140568220.028224<NA>5282...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
15918readsys0665506655026414084675264161549462.070271<NA>5282...601048576<NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
15932closesys0665506655026416164308264161917510.027443<NA>5283...60<NA><NA><NA><NA><NA><NA>/scratch/haridev/data/file_0_0.datlead2
\n", - "

30 rows × 22 columns

\n", - "
" - ], - "text/plain": [ - " func_name cat type pid tid time_start time_end time \\\n", - "10067 openat sys 0 66349 66349 97418183 97925194 0.507011 \n", - "10134 write sys 0 66349 66349 97964119 98155663 0.191544 \n", - "10201 close sys 0 66349 66349 98165689 98261890 0.096201 \n", - "3972 openat sys 0 66395 66395 5240928950 5240956462 0.027512 \n", - "4031 read sys 0 66395 66395 5240996354 5241142775 0.146421 \n", - "4045 close sys 0 66395 66395 5241151798 5241179731 0.027933 \n", - "14524 openat sys 0 66402 66402 5388495738 5388988887 0.493149 \n", - "14638 write sys 0 66402 66402 5389027691 5389275434 0.247743 \n", - "14706 close sys 0 66402 66402 5389284340 5389396885 0.112545 \n", - "8491 openat sys 0 66432 66432 10530408462 10530436142 0.02768 \n", - "8587 read sys 0 66432 66432 10530475700 10530639237 0.163537 \n", - "8601 close sys 0 66432 66432 10530648226 10530675552 0.027326 \n", - "2760 openat sys 0 66439 66439 10675716170 10676189721 0.473551 \n", - "2994 write sys 0 66439 66439 10676229391 10676599422 0.370031 \n", - "3061 close sys 0 66439 66439 10676608004 10676705097 0.097093 \n", - "13309 openat sys 0 66468 66468 15820058089 15820084095 0.026006 \n", - "13489 read sys 0 66468 66468 15820122889 15820376393 0.253504 \n", - "13503 close sys 0 66468 66468 15820385756 15820413608 0.027852 \n", - "7956 openat sys 0 66475 66475 15966307370 15966794661 0.487291 \n", - "8734 write sys 0 66475 66475 15966822884 15967637174 0.81429 \n", - "8801 close sys 0 66475 66475 15967646025 15967744446 0.098421 \n", - "2946 openat sys 0 66504 66504 21116369222 21116397536 0.028314 \n", - "3526 read sys 0 66504 66504 21116427173 21117073355 0.646182 \n", - "3540 close sys 0 66504 66504 21117083017 21117118821 0.035804 \n", - "15538 openat sys 0 66520 66520 21266245024 21266724640 0.479616 \n", - "2048 write sys 0 66520 66520 21266752945 21269374504 2.621559 \n", - "2115 close sys 0 66520 66520 21269383975 21269485308 0.101333 \n", - "13814 openat sys 0 66550 66550 26414028598 26414056822 0.028224 \n", - "15918 read sys 0 66550 66550 26414084675 26416154946 2.070271 \n", - "15932 close sys 0 66550 66550 26416164308 26416191751 0.027443 \n", - "\n", - " tinterval time_range ... io_cat phase size compute_time \\\n", - "10067 19 ... 6 0 \n", - "10134 19 ... 6 0 4096 \n", - "10201 19 ... 6 0 \n", - "3972 1048 ... 6 0 \n", - "4031 1048 ... 6 0 4096 \n", - "4045 1048 ... 6 0 \n", - "14524 1077 ... 6 0 \n", - "14638 1077 ... 6 0 16384 \n", - "14706 1077 ... 6 0 \n", - "8491 2106 ... 6 0 \n", - "8587 2106 ... 6 0 16384 \n", - "8601 2106 ... 6 0 \n", - "2760 2135 ... 6 0 \n", - "2994 2135 ... 6 0 65536 \n", - "3061 2135 ... 6 0 \n", - "13309 3164 ... 6 0 \n", - "13489 3164 ... 6 0 65536 \n", - "13503 3164 ... 6 0 \n", - "7956 3193 ... 6 0 \n", - "8734 3193 ... 6 0 262144 \n", - "8801 3193 ... 6 0 \n", - "2946 4223 ... 6 0 \n", - "3526 4223 ... 6 0 262144 \n", - "3540 4223 ... 6 0 \n", - "15538 4253 ... 6 0 \n", - "2048 4253 ... 6 0 1048576 \n", - "2115 4253 ... 6 0 \n", - "13814 5282 ... 6 0 \n", - "15918 5282 ... 6 0 1048576 \n", - "15932 5283 ... 6 0 \n", - "\n", - " checkpoint_time read_time hash value \\\n", - "10067 \n", - "10134 \n", - "10201 \n", - "3972 \n", - "4031 \n", - "4045 \n", - "14524 \n", - "14638 \n", - "14706 \n", - "8491 \n", - "8587 \n", - "8601 \n", - "2760 \n", - "2994 \n", - "3061 \n", - "13309 \n", - "13489 \n", - "13503 \n", - "7956 \n", - "8734 \n", - "8801 \n", - "2946 \n", - "3526 \n", - "3540 \n", - "15538 \n", - "2048 \n", - "2115 \n", - "13814 \n", - "15918 \n", - "15932 \n", - "\n", - " file_name host_name \n", - "10067 /scratch/haridev/data/file_0_0.dat lead2 \n", - "10134 /scratch/haridev/data/file_0_0.dat lead2 \n", - "10201 /scratch/haridev/data/file_0_0.dat lead2 \n", - "3972 /scratch/haridev/data/file_0_0.dat lead2 \n", - "4031 /scratch/haridev/data/file_0_0.dat lead2 \n", - "4045 /scratch/haridev/data/file_0_0.dat lead2 \n", - "14524 /scratch/haridev/data/file_0_0.dat lead2 \n", - "14638 /scratch/haridev/data/file_0_0.dat lead2 \n", - "14706 /scratch/haridev/data/file_0_0.dat lead2 \n", - "8491 /scratch/haridev/data/file_0_0.dat lead2 \n", - "8587 /scratch/haridev/data/file_0_0.dat lead2 \n", - "8601 /scratch/haridev/data/file_0_0.dat lead2 \n", - "2760 /scratch/haridev/data/file_0_0.dat lead2 \n", - "2994 /scratch/haridev/data/file_0_0.dat lead2 \n", - "3061 /scratch/haridev/data/file_0_0.dat lead2 \n", - "13309 /scratch/haridev/data/file_0_0.dat lead2 \n", - "13489 /scratch/haridev/data/file_0_0.dat lead2 \n", - "13503 /scratch/haridev/data/file_0_0.dat lead2 \n", - "7956 /scratch/haridev/data/file_0_0.dat lead2 \n", - "8734 /scratch/haridev/data/file_0_0.dat lead2 \n", - "8801 /scratch/haridev/data/file_0_0.dat lead2 \n", - "2946 /scratch/haridev/data/file_0_0.dat lead2 \n", - "3526 /scratch/haridev/data/file_0_0.dat lead2 \n", - "3540 /scratch/haridev/data/file_0_0.dat lead2 \n", - "15538 /scratch/haridev/data/file_0_0.dat lead2 \n", - "2048 /scratch/haridev/data/file_0_0.dat lead2 \n", - "2115 /scratch/haridev/data/file_0_0.dat lead2 \n", - "13814 /scratch/haridev/data/file_0_0.dat lead2 \n", - "15918 /scratch/haridev/data/file_0_0.dat lead2 \n", - "15932 /scratch/haridev/data/file_0_0.dat lead2 \n", - "\n", - "[30 rows x 22 columns]" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result.query(\"cat == 'sys' and file_name.str.contains('file_0')\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "7e96ff9e", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cattime
func_name
rw_verify_area10.000319
xfs_da_hashname10.000382
folio_unlock10.000383
current_time10.000394
setattr_should_drop_suidgid10.000394
folio_add_lru10.000452
filemap_get_entry10.000461
generic_write_check_limits10.000566
xfs_mod_freecounter20.000676
xfs_iext_state_to_fork10.000845
iomap_file_buffered_write_punch_delalloc10.000855
xfs_mod_delalloc10.000867
xfs_qm_need_dqattach10.000876
xfs_iomap_valid10.000887
xfs_trans_reserve_quota_nblks10.000889
xfs_iext_last10.00089
xfs_get_extsz_hint10.000916
xfs_bmbt_to_iomap10.000929
xfs_iext_lookup_extent10.000976
xfs_ilock30.000981
xfs_attr_get_ilocked10.000991
xfs_break_leased_layouts10.001006
fault_in_readable10.001007
xfs_ifork_zapped10.00107
xfs_iext_insert_raw10.001099
xfs_iunlock30.001114
xfs_iread_extents10.001121
xfs_iext_get_extent20.001426
filemap_alloc_folio10.001633
xfs_ilock_attr_map_shared10.001662
xfs_ilock_for_iomap10.001845
xfs_iext_prev10.002931
generic_write_checks10.002947
xfs_buffered_write_iomap_end10.003027
xfs_qm_dqattach10.003101
filemap_add_folio10.003518
iomap_write_end10.004942
xfs_iext_insert10.005131
xfs_attr_get10.008774
xfs_xattr_get10.01346
iomap_write_begin10.01487
kiocb_modified10.019694
xfs_bmapi_reserve_delalloc10.02068
xfs_file_write_checks10.029521
xfs_buffered_write_iomap_begin10.040716
iomap_iter20.048068
iomap_write_iter10.091954
iomap_file_buffered_write10.144
xfs_file_buffered_write10.179982
xfs_file_write_iter10.18275
vfs_write10.185793
write10.191544
\n", - "
" - ], - "text/plain": [ - " cat time\n", - "func_name \n", - "rw_verify_area 1 0.000319\n", - "xfs_da_hashname 1 0.000382\n", - "folio_unlock 1 0.000383\n", - "current_time 1 0.000394\n", - "setattr_should_drop_suidgid 1 0.000394\n", - "folio_add_lru 1 0.000452\n", - "filemap_get_entry 1 0.000461\n", - "generic_write_check_limits 1 0.000566\n", - "xfs_mod_freecounter 2 0.000676\n", - "xfs_iext_state_to_fork 1 0.000845\n", - "iomap_file_buffered_write_punch_delalloc 1 0.000855\n", - "xfs_mod_delalloc 1 0.000867\n", - "xfs_qm_need_dqattach 1 0.000876\n", - "xfs_iomap_valid 1 0.000887\n", - "xfs_trans_reserve_quota_nblks 1 0.000889\n", - "xfs_iext_last 1 0.00089\n", - "xfs_get_extsz_hint 1 0.000916\n", - "xfs_bmbt_to_iomap 1 0.000929\n", - "xfs_iext_lookup_extent 1 0.000976\n", - "xfs_ilock 3 0.000981\n", - "xfs_attr_get_ilocked 1 0.000991\n", - "xfs_break_leased_layouts 1 0.001006\n", - "fault_in_readable 1 0.001007\n", - "xfs_ifork_zapped 1 0.00107\n", - "xfs_iext_insert_raw 1 0.001099\n", - "xfs_iunlock 3 0.001114\n", - "xfs_iread_extents 1 0.001121\n", - "xfs_iext_get_extent 2 0.001426\n", - "filemap_alloc_folio 1 0.001633\n", - "xfs_ilock_attr_map_shared 1 0.001662\n", - "xfs_ilock_for_iomap 1 0.001845\n", - "xfs_iext_prev 1 0.002931\n", - "generic_write_checks 1 0.002947\n", - "xfs_buffered_write_iomap_end 1 0.003027\n", - "xfs_qm_dqattach 1 0.003101\n", - "filemap_add_folio 1 0.003518\n", - "iomap_write_end 1 0.004942\n", - "xfs_iext_insert 1 0.005131\n", - "xfs_attr_get 1 0.008774\n", - "xfs_xattr_get 1 0.01346\n", - "iomap_write_begin 1 0.01487\n", - "kiocb_modified 1 0.019694\n", - "xfs_bmapi_reserve_delalloc 1 0.02068\n", - "xfs_file_write_checks 1 0.029521\n", - "xfs_buffered_write_iomap_begin 1 0.040716\n", - "iomap_iter 2 0.048068\n", - "iomap_write_iter 1 0.091954\n", - "iomap_file_buffered_write 1 0.144\n", - "xfs_file_buffered_write 1 0.179982\n", - "xfs_file_write_iter 1 0.18275\n", - "vfs_write 1 0.185793\n", - "write 1 0.191544" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result.query(\"time_start >= 97964119 and time_end <=98155663\").groupby([\"func_name\"]).agg({'cat': 'count', 'time': 'sum'}).sort_values('time').compute()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e7eb7447", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.21" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/analysis/dfanalyzer.README.md b/analysis/dfanalyzer.README.md deleted file mode 100644 index 68d3fe06..00000000 --- a/analysis/dfanalyzer.README.md +++ /dev/null @@ -1,13 +0,0 @@ - - -```bash -export DFANALYZER_DIR=/home/haridev/dfanalyzer -git clone https://github.com/LLNL/dfanalyzer ${DFANALYZER_DIR} - -python -m venv ./dfanalyzer-env -source ./dfanalyzer-env/bin/activate - -cd ${DFANALYZER_DIR} -pip install -r . notebooks/requirements.txt -cd - -``` \ No newline at end of file diff --git a/analysis/relevant_functions.ipynb b/analysis/relevant_functions.ipynb deleted file mode 100755 index 783007b9..00000000 --- a/analysis/relevant_functions.ipynb +++ /dev/null @@ -1,1379 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Analysis for DataCrumbs\n", - "\n", - "This is a simple analysis notebook for Datacrumbs." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import json\n", - "import dask\n", - "import os\n", - "from pathlib import Path\n", - "from glob import glob\n", - "import math\n", - "import zindex_py as zindex\n", - "import numpy as np\n", - "import intervals as I\n", - "import pandas as pd\n", - "from tqdm.notebook import trange, tqdm\n", - "from sklearn.decomposition import PCA\n", - "from sklearn.preprocessing import StandardScaler" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import dask.dataframe as dd\n", - "from dask.distributed import Client, LocalCluster, progress, wait, get_client\n", - "from dask.distributed import Future, get_client" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Project Variables" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "app_root = str(Path(os.getcwd()).parent)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "logging.basicConfig(\n", - " level=logging.INFO,\n", - " handlers=[\n", - " logging.StreamHandler(),\n", - " ],\n", - " format=\"%(asctime)s [%(levelname)s]: %(message)s in %(pathname)s:%(lineno)d\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Dask Local Cluster" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-11-10 12:37:37,089 [INFO]: Initialized Client with 16 workers and link http://127.0.0.1:8787/status in /var/tmp/haridev/ipykernel_359281/3142773904.py:4\n" - ] - } - ], - "source": [ - "workers=16\n", - "cluster = LocalCluster(n_workers=workers) # Launches a scheduler and workers locally\n", - "client = Client(cluster) # Connect to distributed cluster and override default\n", - "logging.info(f\"Initialized Client with {workers} workers and link {client.dashboard_link}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['/usr/workspace/haridev/xio//logs/ior/ior_4k.pfw.gz',\n", - " '/usr/workspace/haridev/xio//logs/ior/ior_16k-64k.pfw.gz',\n", - " '/usr/workspace/haridev/xio//logs/ior/ior-1mb-4mb.pfw.gz',\n", - " '/usr/workspace/haridev/xio//logs/ior/ior-256k.pfw.gz',\n", - " '/usr/workspace/haridev/xio//logs/ior/ior-256k-multiple-interfaces.pfw.gz',\n", - " '/usr/workspace/haridev/xio//logs/ior/ior-hdf5-256k.pfw.gz']" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "import os \n", - "is_trace = True\n", - "folder=\"/usr/workspace/haridev/xio/\"\n", - "file=f\"{folder}/logs/ior/*.pfw.gz\"\n", - "file_pattern = glob(file)\n", - "file_pattern" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Function to load trace data" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def create_index(filename):\n", - " index_file = f\"{filename}.zindex\"\n", - " if not os.path.exists(index_file):\n", - " status = zindex.create_index(filename, index_file=f\"file:{index_file}\",\n", - " regex=\"id:\\b([0-9]+)\", numeric=True, unique=True, debug=False, verbose=False)\n", - " logging.debug(f\"Creating Index for {filename} returned {status}\")\n", - " return filename\n", - "\n", - "def get_linenumber(filename):\n", - " index_file = f\"{filename}.zindex\"\n", - " line_number = zindex.get_max_line(filename, index_file=index_file, debug=False, verbose=False)\n", - " logging.debug(f\" The {filename} has {line_number} lines\")\n", - " return (filename, line_number)\n", - "\n", - "def get_size(filename):\n", - " if filename.endswith('.pfw'):\n", - " size = os.stat(filename).st_size\n", - " elif filename.endswith('.pfw.gz'):\n", - " index_file = f\"{filename}.zindex\"\n", - " line_number = zindex.get_max_line(filename, index_file=index_file,debug=False, verbose=False)\n", - " size = line_number * 256\n", - " logging.debug(f\" The {filename} has {size/1024**3} GB size\")\n", - " return int(size)\n", - "\n", - "\n", - "def generate_line_batches(filename, max_line):\n", - " batch_size = 16*1024\n", - " for start in range(0, max_line, batch_size):\n", - " end = min((start + batch_size - 1) , (max_line - 1))\n", - " logging.debug(f\"Created a batch for {filename} from [{start}, {end}] lines\")\n", - " yield filename, start, end\n", - "\n", - "def load_indexed_gzip_files(filename, start, end):\n", - " index_file = f\"{filename}.zindex\"\n", - " json_lines = zindex.zquery(filename, index_file=index_file,\n", - " raw=f\"select a.line from LineOffsets a where a.line >= {start} AND a.line <= {end};\", debug=False, verbose=False)\n", - " logging.debug(f\"Read {len(json_lines)} json lines for [{start}, {end}]\")\n", - " return json_lines" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "def load_profile(line):\n", - " d = {}\n", - " if line is not None and line !=\"\" and len(line) > 0 and \"[\" != line[0] and line != \"\\n\" :\n", - " try:\n", - " unicode_line = ''.join([i if ord(i) < 128 else '#' for i in line])\n", - " val = json.loads(unicode_line)\n", - " if \"pid\" in d:\n", - " d[\"pid\"] = val[\"pid\"]\n", - " if \"tid\" in d:\n", - " d[\"tid\"] = val[\"tid\"]\n", - " if \"ts\" in d:\n", - " d[\"ts_us\"] = int(val[\"ts\"])\n", - " d[\"filename\"] = \"NA\"\n", - " if \"args\" in val:\n", - " if \"time\" in val[\"args\"]:\n", - " d[\"dur_sec\"] = float(val[\"args\"][\"time\"])\n", - " if \"freq\" in val[\"args\"]:\n", - " d[\"freq\"] = val[\"args\"][\"freq\"]\n", - " if \"size_sum\" in val[\"args\"]:\n", - " d[\"size_bytes\"] = val[\"args\"][\"size_sum\"]\n", - " if \"fname\" in val[\"args\"] and val[\"args\"][\"fname\"]:\n", - " d[\"filename\"] = val[\"args\"][\"fname\"]\n", - " d[\"func_id\"] = val[\"name\"]\n", - " d[\"cat\"] = val[\"cat\"]\n", - " except Exception as error:\n", - " logging.error(f\"Processing {line} failed with {error}\")\n", - " return d\n", - "\n", - "\n", - "def load_trace(line):\n", - " d = {}\n", - " if line is not None and line !=\"\" and len(line) > 0 and \"[\" != line[0] and line != \"\\n\" :\n", - " try:\n", - " unicode_line = ''.join([i if ord(i) < 128 else '#' for i in line])\n", - " val = json.loads(unicode_line)\n", - " d[\"name\"] = val[\"name\"]\n", - " d[\"cat\"] = val[\"cat\"]\n", - " if \"pid\" in val:\n", - " d[\"pid\"] = val[\"pid\"]\n", - " if \"tid\" in val:\n", - " d[\"tid\"] = val[\"tid\"]\n", - " d[\"ts\"] = 0\n", - " d[\"dur\"] = 0\n", - " if \"ts\" in val:\n", - " d[\"ts\"] = int(val[\"ts\"])\n", - " d[\"te\"] = int(val[\"ts\"])\n", - " d[\"dur\"] = 1\n", - " if \"dur\" in val:\n", - " d[\"dur\"] = int(val[\"dur\"])\n", - " if \"args\" in val and \"hhash\" in val[\"args\"]: \n", - " d[\"hhash\"] = val[\"args\"][\"hhash\"]\n", - " if \"ts\" in val:\n", - " interval = I.closedopen(d[\"ts\"], d[\"ts\"] + 1)\n", - " if d[\"dur\"] > 0:\n", - " d[\"te\"] = int(val[\"ts\"]) + d[\"dur\"]\n", - " interval = I.closedopen(d[\"ts\"], d[\"ts\"] + d[\"dur\"])\n", - " d[\"interval\"] = I.to_string(interval)\n", - " if val[\"ph\"] != \"M\":\n", - " d[\"type\"] = 0 \n", - " if \"args\" in val: \n", - " if \"hhash\" in val[\"args\"]:\n", - " d[\"hhash\"] = val[\"args\"][\"hhash\"]\n", - " if \"size_sum\" in val[\"args\"]:\n", - " d[\"size\"] = val[\"args\"][\"size_sum\"]\n", - " if \"fhash\" in val[\"args\"]:\n", - " d[\"fhash\"] = val[\"args\"][\"fhash\"]\n", - " else:\n", - " if val[\"name\"] == \"FH\":\n", - " d[\"type\"] = 1\n", - " if \"args\" in val:\n", - " if \"name\" in val[\"args\"]:\n", - " d[\"name\"] = val[\"args\"][\"name\"]\n", - " if \"value\" in val[\"args\"]:\n", - " d[\"hash\"] = val[\"args\"][\"value\"]\n", - " elif val[\"name\"] == \"HH\":\n", - " d[\"type\"] = 2\n", - " if \"args\" in val:\n", - " if \"name\" in val[\"args\"]:\n", - " d[\"name\"] = val[\"args\"][\"name\"]\n", - " if \"value\" in val[\"args\"]:\n", - " d[\"hash\"] = val[\"args\"][\"value\"]\n", - " \n", - " except Exception as error:\n", - " logging.error(f\"Processing {line} failed with {error}\")\n", - " return d" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Dask Dataframe" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-11-10 12:37:37,416 [INFO]: Created index for 6 files in /var/tmp/haridev/ipykernel_359281/864066620.py:3\n", - "2024-11-10 12:37:37,533 [INFO]: Total size of all files are bytes in /var/tmp/haridev/ipykernel_359281/864066620.py:6\n", - "2024-11-10 12:37:37,588 [INFO]: Max lines per file are [('/usr/workspace/haridev/xio//logs/ior/ior_4k.pfw.gz', 7565244), ('/usr/workspace/haridev/xio//logs/ior/ior_16k-64k.pfw.gz', 9788674), ('/usr/workspace/haridev/xio//logs/ior/ior-1mb-4mb.pfw.gz', 34785028), ('/usr/workspace/haridev/xio//logs/ior/ior-256k.pfw.gz', 9397525), ('/usr/workspace/haridev/xio//logs/ior/ior-256k-multiple-interfaces.pfw.gz', 60400779), ('/usr/workspace/haridev/xio//logs/ior/ior-hdf5-256k.pfw.gz', 25153457)] in /var/tmp/haridev/ipykernel_359281/864066620.py:8\n", - "2024-11-10 12:37:37,615 [INFO]: Loading 8981 batches out of 6 files and has 147090707 lines overall in /var/tmp/haridev/ipykernel_359281/864066620.py:16\n" - ] - } - ], - "source": [ - "if len(file_pattern) > 0:\n", - " dask.bag.from_sequence(file_pattern).map(create_index).compute()\n", - " logging.info(f\"Created index for {len(file_pattern)} files\")\n", - " total_size = dask.bag.from_sequence(file_pattern).map(get_size).sum()\n", - " n_partition = math.ceil(total_size.compute() / (128 * 1024 ** 2))\n", - " logging.info(f\"Total size of all files are {total_size} bytes\")\n", - " max_line_numbers = dask.bag.from_sequence(file_pattern).map(get_linenumber).compute()\n", - " logging.info(f\"Max lines per file are {max_line_numbers}\")\n", - " json_line_delayed = []\n", - " total_lines = 0\n", - " for filename, max_line in max_line_numbers:\n", - " total_lines += max_line\n", - " for _, start, end in generate_line_batches(filename, max_line):\n", - " json_line_delayed.append((filename, start, end))\n", - "\n", - " logging.info(f\"Loading {len(json_line_delayed)} batches out of {len(file_pattern)} files and has {total_lines} lines overall\")\n", - " json_line_bags = []\n", - " for filename, start, end in json_line_delayed:\n", - " num_lines = end - start + 1\n", - " json_line_bags.append(dask.delayed(load_indexed_gzip_files, nout=num_lines)(filename, start, end))\n", - " json_lines = dask.bag.concat(json_line_bags)\n", - " if is_trace:\n", - " pfw_bag = json_lines.map(load_trace).filter(lambda x: \"name\" in x)\n", - " else:\n", - " pfw_bag = json_lines.map(load_profile).filter(lambda x: \"func_id\" in x)\n", - " pfw_bag.take(1)" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "if is_trace:\n", - " columns = {'hhash': \"string[pyarrow]\", 'pid': \"uint64[pyarrow]\", 'tid': \"uint64[pyarrow]\",\n", - " 'cat': \"string[pyarrow]\", 'name': \"string[pyarrow]\", 'type': \"uint8[pyarrow]\",\n", - " 'ts': \"uint64[pyarrow]\", 'te': \"uint64[pyarrow]\", 'dur': \"uint64[pyarrow]\", 'interval': \"string[pyarrow]\", \n", - " 'size': \"uint64[pyarrow]\", 'fhash': \"string[pyarrow]\", 'hash': \"string[pyarrow]\", \n", - " }\n", - "else:\n", - " columns = {'pid': \"uint64[pyarrow]\", 'tid': \"uint64[pyarrow]\",\n", - " 'ts_us': \"uint64[pyarrow]\", 'dur_sec': \"float32[pyarrow]\", \n", - " 'freq': \"uint64[pyarrow]\", 'size_bytes': \"uint64[pyarrow]\", 'name': \"string[pyarrow]\", \n", - " 'filename': \"string[pyarrow]\", \n", - " 'cat': \"string[pyarrow]\"}" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "events = pfw_bag.to_dataframe(meta=columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "events = events.repartition(npartitions=n_partition).persist()\n", - "_ = wait(events)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "fhash = events.query(\"type == 1\")[[\"name\",\"hash\"]]\n", - "hhash = events.query(\"type == 2\")[[\"name\",\"hash\"]]\n", - "event = events.query(\"type == 0\")\n", - "fhashes = fhash.query(\"name.str.contains('test.bat')\").compute()[\"hash\"]\n", - "fhashes = fhashes.to_list()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
hhashpidtidcatnametypetstedurintervalsizefhashhash
3368ecd9cccc050c9e893ab33b1a228fe76d1588215882sysopenat054485598965448937723377827[5448559896,5448937723)<NA>3c30b6298abfeb121cd313effdb92256<NA>
3374ecd9cccc050c9e893ab33b1a228fe76d1588215882syslseek0544895605954489655549495[5448956059,5448965554)<NA>3c30b6298abfeb121cd313effdb92256<NA>
3609ecd9cccc050c9e893ab33b1a228fe76d1588215882syswrite054489706865449450628479942[5448970686,5449450628)163843c30b6298abfeb121cd313effdb92256<NA>
3613ecd9cccc050c9e893ab33b1a228fe76d1588215882syslseek0544946910854494733144206[5449469108,5449473314)<NA>3c30b6298abfeb121cd313effdb92256<NA>
3858ecd9cccc050c9e893ab33b1a228fe76d1588215882syswrite054494777195449874977397258[5449477719,5449874977)163843c30b6298abfeb121cd313effdb92256<NA>
..........................................
60ecd9cccc050c9e893ab33b1a228fe76d252574252574syspread640771545283031677154539913411161025[7715452830316,7715453991341)2621441.438620452325829e+19<NA>
2302ecd9cccc050c9e893ab33b1a228fe76d252574252574syspread640771572983278377157364397616606978[7715729832783,7715736439761)2621441.438620452325829e+19<NA>
4070ecd9cccc050c9e893ab33b1a228fe76d252574252574syspread640771595225333777159558732213619884[7715952253337,7715955873221)2621441.438620452325829e+19<NA>
4437ecd9cccc050c9e893ab33b1a228fe76d252574252574syspread640771599810826577160017262453617980[7715998108265,7716001726245)2621441.438620452325829e+19<NA>
6850ecd9cccc050c9e893ab33b1a228fe76d252574252574syspread640771630310597877163042591711153193[7716303105978,7716304259171)2621441.438620452325829e+19<NA>
\n", - "

853152 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " hhash pid tid cat name type \\\n", - "3368 ecd9cccc050c9e893ab33b1a228fe76d 15882 15882 sys openat 0 \n", - "3374 ecd9cccc050c9e893ab33b1a228fe76d 15882 15882 sys lseek 0 \n", - "3609 ecd9cccc050c9e893ab33b1a228fe76d 15882 15882 sys write 0 \n", - "3613 ecd9cccc050c9e893ab33b1a228fe76d 15882 15882 sys lseek 0 \n", - "3858 ecd9cccc050c9e893ab33b1a228fe76d 15882 15882 sys write 0 \n", - "... ... ... ... ... ... ... \n", - "60 ecd9cccc050c9e893ab33b1a228fe76d 252574 252574 sys pread64 0 \n", - "2302 ecd9cccc050c9e893ab33b1a228fe76d 252574 252574 sys pread64 0 \n", - "4070 ecd9cccc050c9e893ab33b1a228fe76d 252574 252574 sys pread64 0 \n", - "4437 ecd9cccc050c9e893ab33b1a228fe76d 252574 252574 sys pread64 0 \n", - "6850 ecd9cccc050c9e893ab33b1a228fe76d 252574 252574 sys pread64 0 \n", - "\n", - " ts te dur interval \\\n", - "3368 5448559896 5448937723 377827 [5448559896,5448937723) \n", - "3374 5448956059 5448965554 9495 [5448956059,5448965554) \n", - "3609 5448970686 5449450628 479942 [5448970686,5449450628) \n", - "3613 5449469108 5449473314 4206 [5449469108,5449473314) \n", - "3858 5449477719 5449874977 397258 [5449477719,5449874977) \n", - "... ... ... ... ... \n", - "60 7715452830316 7715453991341 1161025 [7715452830316,7715453991341) \n", - "2302 7715729832783 7715736439761 6606978 [7715729832783,7715736439761) \n", - "4070 7715952253337 7715955873221 3619884 [7715952253337,7715955873221) \n", - "4437 7715998108265 7716001726245 3617980 [7715998108265,7716001726245) \n", - "6850 7716303105978 7716304259171 1153193 [7716303105978,7716304259171) \n", - "\n", - " size fhash hash \n", - "3368 3c30b6298abfeb121cd313effdb92256 \n", - "3374 3c30b6298abfeb121cd313effdb92256 \n", - "3609 16384 3c30b6298abfeb121cd313effdb92256 \n", - "3613 3c30b6298abfeb121cd313effdb92256 \n", - "3858 16384 3c30b6298abfeb121cd313effdb92256 \n", - "... ... ... ... \n", - "60 262144 1.438620452325829e+19 \n", - "2302 262144 1.438620452325829e+19 \n", - "4070 262144 1.438620452325829e+19 \n", - "4437 262144 1.438620452325829e+19 \n", - "6850 262144 1.438620452325829e+19 \n", - "\n", - "[853152 rows x 13 columns]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "interesting_events = event.query(\"fhash.isin(@value)\", local_dict={\"value\": fhashes}).sort_values(\"ts\")\n", - "interesting_events.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/dask_expr/_shuffle.py:1394: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " mins = mins.bfill()\n", - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/dask_expr/_shuffle.py:1395: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " maxes = maxes.bfill()\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-11-10 12:48:52,787 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 37391b081af65c2e45cbae88ab710187 initialized by task ('shuffle-transfer-37391b081af65c2e45cbae88ab710187', 131) executed on worker tcp://127.0.0.1:37081\n", - "2024-11-10 12:48:56,682 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 37391b081af65c2e45cbae88ab710187 deactivated due to stimulus 'task-finished-1731271736.6801343'\n", - "2024-11-10 12:49:01,471 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle dc3f970979eefcc3a5816445870e8dec initialized by task ('shuffle-transfer-dc3f970979eefcc3a5816445870e8dec', 115) executed on worker tcp://127.0.0.1:37481\n", - "2024-11-10 12:49:04,341 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle dc3f970979eefcc3a5816445870e8dec deactivated due to stimulus 'task-finished-1731271744.3392837'\n", - "2024-11-10 12:49:09,948 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle dbe2eb22ff8fe1d84f492ee06d99a2f2 initialized by task ('shuffle-transfer-dbe2eb22ff8fe1d84f492ee06d99a2f2', 107) executed on worker tcp://127.0.0.1:40355\n", - "2024-11-10 12:50:23,323 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle dbe2eb22ff8fe1d84f492ee06d99a2f2 deactivated due to stimulus 'task-finished-1731271820.2580884'\n", - "2024-11-10 13:10:44,574 - distributed.nanny.memory - WARNING - Worker tcp://127.0.0.1:42569 (pid=359475) exceeded 95% memory budget. Restarting...\n", - "2024-11-10 13:10:46,564 - distributed.scheduler - ERROR - Couldn't gather keys: {('repartitiontofewer-485467e32aa272cee3e20d60ed366f46', 0): 'forgotten'}\n", - "2024-11-10 13:10:51,640 - distributed.scheduler - WARNING - Removing worker 'tcp://127.0.0.1:42569' caused the cluster to lose already computed task(s), which will be recomputed elsewhere: {('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 99), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 224), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 102), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 233), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 65), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 248), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 187), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 141), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 31), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 165), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 110), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 119), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 238), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 58), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 195), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 253), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 155), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 274), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 100), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 127), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 5), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 255), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 209), ('repartitiontofewer-ae258baaee3a3964352a8af406c1ba0f', 148)} (stimulus_id='handle-worker-cleanup-1731273051.6402755')\n", - "2024-11-10 13:10:51,872 - distributed.nanny - WARNING - Restarting worker\n", - "2024-11-10 13:11:08,221 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 992cdf4445c9ef9ded9e534b91389564 initialized by task ('shuffle-transfer-992cdf4445c9ef9ded9e534b91389564', 38) executed on worker tcp://127.0.0.1:44841\n", - "2024-11-10 13:11:55,561 - distributed.shuffle._scheduler_plugin - WARNING - Shuffle 992cdf4445c9ef9ded9e534b91389564 deactivated due to stimulus 'task-finished-1731273115.5558321'\n" - ] - }, - { - "data": { - "text/plain": [ - "0 1\n", - "1 1\n", - "2 16384\n", - "3 1\n", - "4 16384\n", - " ... \n", - "853147 262144\n", - "853148 262144\n", - "853149 262144\n", - "853150 262144\n", - "853151 262144\n", - "Name: size, Length: 853152, dtype: uint64[pyarrow]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "interesting_events[\"combined_name\"] = interesting_events[\"name\"] + \"-\" + interesting_events[\"cat\"]\n", - "ts_events = interesting_events[[\"size\"]].compute().reset_index().drop(\"index\", axis=1)\n", - "ts_events[\"size\"].fillna(value=1.0)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/dask_expr/_shuffle.py:1394: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " mins = mins.bfill()\n", - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/dask_expr/_shuffle.py:1395: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " maxes = maxes.bfill()\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
intervalname
3368[5448559896,5448937723)openat
3374[5448956059,5448965554)lseek
3609[5448970686,5449450628)write
3613[5449469108,5449473314)lseek
3858[5449477719,5449874977)write
.........
60[7715452830316,7715453991341)pread64
2302[7715729832783,7715736439761)pread64
4070[7715952253337,7715955873221)pread64
4437[7715998108265,7716001726245)pread64
6850[7716303105978,7716304259171)pread64
\n", - "

853152 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " interval name\n", - "3368 [5448559896,5448937723) openat\n", - "3374 [5448956059,5448965554) lseek\n", - "3609 [5448970686,5449450628) write\n", - "3613 [5449469108,5449473314) lseek\n", - "3858 [5449477719,5449874977) write\n", - "... ... ...\n", - "60 [7715452830316,7715453991341) pread64\n", - "2302 [7715729832783,7715736439761) pread64\n", - "4070 [7715952253337,7715955873221) pread64\n", - "4437 [7715998108265,7716001726245) pread64\n", - "6850 [7716303105978,7716304259171) pread64\n", - "\n", - "[853152 rows x 2 columns]" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "interesting_intervals = interesting_events[[\"interval\",\"name\"]].compute()\n", - "interesting_intervals" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# interesting_events[\"interval\"] = interesting_events.apply(lambda x: I.to_string(I.closed(x[\"ts\"], x[\"ts\"]+x[\"dur\"])), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/dask_expr/_shuffle.py:1394: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " mins = mins.bfill()\n", - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/dask_expr/_shuffle.py:1395: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " maxes = maxes.bfill()\n" - ] - }, - { - "data": { - "text/plain": [ - "([[5448559896,5448937723),\n", - " [5448956059,5448965554),\n", - " [5448970686,5449450628),\n", - " [5449469108,5449473314),\n", - " [5449477719,5449874977),\n", - " [5449884999,5449888787),\n", - " [5449892961,5450252184),\n", - " [5450261489,5450264918),\n", - " [5450268966,5450631486),\n", - " [5450640553,5450644029)],\n", - " 422948)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def group_func(df):\n", - " val = I.empty()\n", - " for index, value in df.items():\n", - " if str(value) != 'NA':\n", - " pad_interval = I.from_string(str(value), int)\n", - " val = val.union(pad_interval)\n", - " logging.debug(f\"Grouped Range into {val}\")\n", - " return I.to_string(val)\n", - "def union_portions():\n", - " return dd.Aggregation(\n", - " 'union_portions',\n", - " chunk=lambda s: s.apply(group_func),\n", - " agg=lambda s: s.apply(group_func)\n", - " )\n", - "relevant_intervals = interesting_events[[\"interval\"]].reduction(chunk=lambda s: s.apply(group_func), aggregate=lambda s1: s1.apply(group_func))[\"interval\"].compute()\n", - "relevant_intervals = I.from_string(relevant_intervals, int)\n", - "relevant_intervals_list = list(relevant_intervals)\n", - "relevant_intervals_list[:10], len(relevant_intervals_list)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(5448559896, 7716304259171)" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "min_ts = relevant_intervals_list[0].lower\n", - "max_te = relevant_intervals_list[-1].upper\n", - "min_ts, max_te" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [], - "source": [ - "filtered_events = event.query(f\"ts >= {min_ts - 1e5} and te <= {max_te + 1e5} and dur > 0\")\n", - "# filtered_events = event" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "# filtered_events[\"combined_name\"] = filtered_events[\"name\"] + \"-\" + filtered_events[\"cat\"]\n", - "# event_batch_per_sys_call = set()\n", - "# rows = list(interesting_intervals.iterrows())\n", - "# count = 0\n", - "# ops_map = {}\n", - "# ops_counter = 0\n", - "# for index, row in tqdm(rows):\n", - "# interval = I.from_string(row[\"interval\"], int)\n", - "# ops = row[\"name\"]\n", - "# a_overlaps_b = f\"(ts >= {interval.lower} and ts <= {interval.upper}) or (te >= {interval.lower} and te <= {interval.upper})\"\n", - "# b_overlaps_a = f\"({interval.lower} >= ts and {interval.lower} <= te) or ({interval.upper} >= ts and {interval.upper} <= te)\"\n", - "# batch = filtered_events.query(f\"{a_overlaps_b} or {b_overlaps_a}\")[\"combined_name\"].unique().compute()\n", - "# event_batch_per_sys_call.update(batch)\n", - "# count += 1\n" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-11-10 13:11:43,068 - distributed.worker.state_machine - WARNING - Async instruction for > ended with CancelledError\n", - "2024-11-10 13:11:43,098 - distributed.worker.state_machine - WARNING - Async instruction for > ended with CancelledError\n", - "2024-11-10 13:11:43,098 - distributed.worker.state_machine - WARNING - Async instruction for > ended with CancelledError\n", - "2024-11-10 13:11:43,769 - distributed.worker - ERROR - Failed to communicate with scheduler during heartbeat.\n", - "Traceback (most recent call last):\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/core.py\", line 1423, in _connect\n", - " comm = await connect(\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/comm/core.py\", line 342, in connect\n", - " comm = await wait_for(\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/utils.py\", line 1957, in wait_for\n", - " return await asyncio.wait_for(fut, timeout)\n", - " File \"/collab/usr/gapps/python/build/spack-toss4.1/var/spack/environments/python/._view/75prb56irmif5ejtirjthpx6kq3gqo52/lib/python3.9/asyncio/tasks.py\", line 466, in wait_for\n", - " await waiter\n", - "asyncio.exceptions.CancelledError\n", - "\n", - "During handling of the above exception, another exception occurred:\n", - "\n", - "Traceback (most recent call last):\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/core.py\", line 1533, in connect\n", - " return connect_attempt.result()\n", - "asyncio.exceptions.CancelledError\n", - "\n", - "During handling of the above exception, another exception occurred:\n", - "\n", - "Traceback (most recent call last):\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/worker.py\", line 1250, in heartbeat\n", - " response = await retry_operation(\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/utils_comm.py\", line 459, in retry_operation\n", - " return await retry(\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/utils_comm.py\", line 438, in retry\n", - " return await coro()\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/core.py\", line 1251, in send_recv_from_rpc\n", - " comm = await self.pool.connect(self.addr)\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/core.py\", line 1535, in connect\n", - " raise CommClosedError(reason)\n", - "distributed.comm.core.CommClosedError: ConnectionPool closing.\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
dur
catname
kernelext4_get_inode_loc1252881
ext4_set_aops647
ext4_create533
ext4_da_get_block_prep1239086
__mnt_want_write_file102686
.........
hdf5H5C_flush_cache1
H5C_apply_candidate_list1
H5ES_term_package1
H5FD_locate_signature15
H5S_mpio_space_type2108
\n", - "

1356 rows × 1 columns

\n", - "
" - ], - "text/plain": [ - " dur\n", - "cat name \n", - "kernel ext4_get_inode_loc 1252881\n", - " ext4_set_aops 647\n", - " ext4_create 533\n", - " ext4_da_get_block_prep 1239086\n", - " __mnt_want_write_file 102686\n", - "... ...\n", - "hdf5 H5C_flush_cache 1\n", - " H5C_apply_candidate_list 1\n", - " H5ES_term_package 1\n", - " H5FD_locate_signature 15\n", - " H5S_mpio_space_type 2108\n", - "\n", - "[1356 rows x 1 columns]" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unique_functions = filtered_events.groupby([\"cat\",\"name\"]).agg({\"dur\":\"count\"}).compute()\n", - "unique_functions" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['kernel', 'sys', 'os_cache', 'vfs'])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "function_cat = {}\n", - "ignore_user_categories = ['hdf5', 'c', 'mpi', \"sys\"]\n", - "for cat, value in unique_functions.index:\n", - " if cat not in ignore_user_categories:\n", - " if cat not in function_cat:\n", - " function_cat[cat]=set()\n", - " function_cat[cat].add(value)\n", - "function_cat.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "def set_default(obj):\n", - " if isinstance(obj, set):\n", - " return list(obj)\n", - " raise TypeError\n", - "function_file = f\"{app_root}/datacrumbs/configs/function.json\"\n", - "with open(function_file, 'w') as convert_file: \n", - " convert_file.write(json.dumps(function_cat, default=set_default))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-11-10 11:59:09,448 [ERROR]: Task exception was never retrieved\n", - "future: .wait() done, defined at /usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/client.py:2391> exception=AllExit()> in /collab/usr/gapps/python/build/spack-toss4.1/var/spack/environments/python/._view/75prb56irmif5ejtirjthpx6kq3gqo52/lib/python3.9/asyncio/base_events.py:1753\n", - "Traceback (most recent call last):\n", - " File \"/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/client.py\", line 2400, in wait\n", - " raise AllExit()\n", - "distributed.client.AllExit\n", - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/client.py:3357: UserWarning: Sending large graph of size 863.67 MiB.\n", - "This may cause some slowdown.\n", - "Consider scattering data ahead of time and using futures.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "batch_columns_list = dask.compute(event_batch_per_sys_call)\n", - "batch_columns_list" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "merged_df = None\n", - "count = 0\n", - "for batch in tqdm(event_batch_per_sys_call):\n", - " if merged_df is not None:\n", - " merged_df = merged_df.merge(batch, how='outer', on=\"combined_name\",suffixes=('', f\"_{count}\"))\n", - " else:\n", - " merged_df = batch\n", - " count += 1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "merged_df.columns" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "dataset = merged_df.transpose()\n", - "df = dataset.reset_index().drop(\"index\", axis=1)\n", - "df[\"op_name\"] = \"UNKNOWN\"\n", - "for key, value in ops_map.items():\n", - " df[\"op_name\"] = df[\"op_name\"].mask(df[\"op\"].eq(value), key)\n", - "df[\"op_name\"].unique()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "final_dataset = df.merge(ts_events, how='outer', left_index=True, right_index=True)\n", - "final_dataset[\"BW\"] = final_dataset[f\"size\"] / (1024**2) / (final_dataset[f\"{ops}-sys\"] / 1e9)\n", - "final_dataset.drop([f\"{ops}-sys\", \"size\"], inplace=True, axis=1)\n", - "final_dataset.columns" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [], - "source": [ - "output_file\n", - "final_dataset[\"op\"] = ops" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [], - "source": [ - "final_dataset.to_json(path_or_buf=f\"{output_file}\",orient='records', lines=True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "output_file=\"/usr/workspace/haridev/xio/output/jslines/write_ops-64_ts-64m-RAW-DIRECT.pfw.gz.jsonl\"\n", - "ops=\"write\"" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "from glob import glob\n", - "files = glob(f\"{output_file}\")\n", - "final_dataset_l = []\n", - "for file in files:\n", - " final_dataset_l.append(dd.read_json(file))\n", - "final_dataset = dd.concat(final_dataset_l).compute().reset_index().drop(\"index\", axis=1)\n", - "final_dataset[\"BW\"] = final_dataset[f\"transfer_size\"] / (1024**2) / (final_dataset[f\"{ops}-sys\"]/1e9)\n", - "final_dataset[\"op\"] = ops\n", - "final_dataset.to_json(path_or_buf=f\"{output_file}\",orient='records', lines=True)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## make the number of relevance features dynamic.\n", - "\n", - "1. Add up the importance score to reach 95%.\n", - "2. Add Transfer size\n", - "3. Split features into layers and do this analysis per layer.\n", - "4. Correlation\n", - " 1. correlation matrix.\n", - " 2. PCA\n", - " 3. Lasso Regression (L1)\n", - " 4. Auto regression\n", - "5. SHAPLEY value (feature importance)\n", - " 1. Tree SHAP\n", - "6. How portable are the interfaces (do not overfit)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. Tanzima for better models\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## models\n", - "- sequential training: gradient boost\n", - "- " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/analysis/requirements.txt b/analysis/requirements.txt deleted file mode 100755 index 4bb21256..00000000 --- a/analysis/requirements.txt +++ /dev/null @@ -1,16 +0,0 @@ -dask[dataframe]>=2023.5.0 -distributed -matplotlib>=3.7.3 -numpy>=1.24.3 -pyarrow>=12.0.1 -rich>=13.6.0 -jupyterlab -jupyter-server-proxy -ipywidgets -pandas>=2.0.3 -zindex_py==0.0.2 -tqdm -scikit-learn -seaborn -jsonlines -python-intervals \ No newline at end of file diff --git a/analysis/trace_analysis.ipynb b/analysis/trace_analysis.ipynb deleted file mode 100755 index a94eaf4d..00000000 --- a/analysis/trace_analysis.ipynb +++ /dev/null @@ -1,1825 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Analysis for DataCrumbs\n", - "\n", - "This is a simple analysis notebook for Datacrumbs." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "import json\n", - "import dask\n", - "import os\n", - "from pathlib import Path\n", - "from glob import glob\n", - "import math\n", - "import zindex_py as zindex\n", - "import numpy as np\n", - "import intervals as I\n", - "import pandas as pd\n", - "from tqdm.notebook import trange, tqdm\n", - "from sklearn.decomposition import PCA\n", - "from sklearn.preprocessing import StandardScaler" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import dask.dataframe as dd\n", - "from dask.distributed import Client, LocalCluster, progress, wait, get_client\n", - "from dask.distributed import Future, get_client" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Project Variables" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "app_root = str(Path(os.getcwd()).parent)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "logging.basicConfig(\n", - " level=logging.INFO,\n", - " handlers=[\n", - " logging.StreamHandler(),\n", - " ],\n", - " format=\"%(asctime)s [%(levelname)s]: %(message)s in %(pathname)s:%(lineno)d\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Setup Dask Local Cluster" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/usr/workspace/haridev/datacrumbs/venv/lib/python3.9/site-packages/distributed/node.py:182: UserWarning: Port 8787 is already in use.\n", - "Perhaps you already have a cluster running?\n", - "Hosting the HTTP server on port 39457 instead\n", - " warnings.warn(\n", - "2024-11-08 10:50:12,354 [INFO]: Initialized Client with 16 workers and link http://127.0.0.1:39457/status in /var/tmp/haridev/ipykernel_3664668/3142773904.py:4\n" - ] - } - ], - "source": [ - "workers=16\n", - "cluster = LocalCluster(n_workers=workers) # Launches a scheduler and workers locally\n", - "client = Client(cluster) # Connect to distributed cluster and override default\n", - "logging.info(f\"Initialized Client with {workers} workers and link {client.dashboard_link}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Start Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(['/usr/workspace/haridev/xio//ops-32_files-8/RAW-BUF.pfw.gz'],\n", - " '/usr/workspace/haridev/xio//output/jslines/all_ops-32_files-8-RAW-BUF.pfw.gz.jsonl')" - ] - }, - "execution_count": 50, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "import os \n", - "is_trace = True\n", - "ops=\"openat\"\n", - "folder=\"/usr/workspace/haridev/xio/\"\n", - "output=f\"{folder}/output/jslines\"\n", - "file=f\"{folder}/ops-32_files-8/RAW-BUF.pfw.gz\"\n", - "# file=f\"{app_root}/tests/output/ops-64_ts-64m/RAW-BUFFERED.pfw.gz\"\n", - "output_file=f\"{output}/all_\"+os.path.basename(os.path.dirname(file))+\"-\"+ os.path.basename(file) + \".jsonl\"\n", - "file_pattern = glob(file)\n", - "file_pattern, output_file" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Function to load trace data" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "def create_index(filename):\n", - " index_file = f\"{filename}.zindex\"\n", - " if not os.path.exists(index_file):\n", - " status = zindex.create_index(filename, index_file=f\"file:{index_file}\",\n", - " regex=\"id:\\b([0-9]+)\", numeric=True, unique=True, debug=False, verbose=False)\n", - " logging.debug(f\"Creating Index for {filename} returned {status}\")\n", - " return filename\n", - "\n", - "def get_linenumber(filename):\n", - " index_file = f\"{filename}.zindex\"\n", - " line_number = zindex.get_max_line(filename, index_file=index_file, debug=False, verbose=False)\n", - " logging.debug(f\" The {filename} has {line_number} lines\")\n", - " return (filename, line_number)\n", - "\n", - "def get_size(filename):\n", - " if filename.endswith('.pfw'):\n", - " size = os.stat(filename).st_size\n", - " elif filename.endswith('.pfw.gz'):\n", - " index_file = f\"{filename}.zindex\"\n", - " line_number = zindex.get_max_line(filename, index_file=index_file,debug=False, verbose=False)\n", - " size = line_number * 256\n", - " logging.debug(f\" The {filename} has {size/1024**3} GB size\")\n", - " return int(size)\n", - "\n", - "\n", - "def generate_line_batches(filename, max_line):\n", - " batch_size = 16*1024\n", - " for start in range(0, max_line, batch_size):\n", - " end = min((start + batch_size - 1) , (max_line - 1))\n", - " logging.debug(f\"Created a batch for {filename} from [{start}, {end}] lines\")\n", - " yield filename, start, end\n", - "\n", - "def load_indexed_gzip_files(filename, start, end):\n", - " index_file = f\"{filename}.zindex\"\n", - " json_lines = zindex.zquery(filename, index_file=index_file,\n", - " raw=f\"select a.line from LineOffsets a where a.line >= {start} AND a.line <= {end};\", debug=False, verbose=False)\n", - " logging.debug(f\"Read {len(json_lines)} json lines for [{start}, {end}]\")\n", - " return json_lines" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "def load_profile(line):\n", - " d = {}\n", - " if line is not None and line !=\"\" and len(line) > 0 and \"[\" != line[0] and line != \"\\n\" :\n", - " try:\n", - " unicode_line = ''.join([i if ord(i) < 128 else '#' for i in line])\n", - " val = json.loads(unicode_line)\n", - " if \"pid\" in d:\n", - " d[\"pid\"] = val[\"pid\"]\n", - " if \"tid\" in d:\n", - " d[\"tid\"] = val[\"tid\"]\n", - " if \"ts\" in d:\n", - " d[\"ts_us\"] = int(val[\"ts\"])\n", - " d[\"filename\"] = \"NA\"\n", - " if \"args\" in val:\n", - " if \"time\" in val[\"args\"]:\n", - " d[\"dur_sec\"] = float(val[\"args\"][\"time\"])\n", - " if \"freq\" in val[\"args\"]:\n", - " d[\"freq\"] = val[\"args\"][\"freq\"]\n", - " if \"size_sum\" in val[\"args\"]:\n", - " d[\"size_bytes\"] = val[\"args\"][\"size_sum\"]\n", - " if \"fname\" in val[\"args\"] and val[\"args\"][\"fname\"]:\n", - " d[\"filename\"] = val[\"args\"][\"fname\"]\n", - " d[\"func_id\"] = val[\"name\"]\n", - " d[\"cat\"] = val[\"cat\"]\n", - " except Exception as error:\n", - " logging.error(f\"Processing {line} failed with {error}\")\n", - " return d\n", - "\n", - "\n", - "def load_trace(line):\n", - " d = {}\n", - " if line is not None and line !=\"\" and len(line) > 0 and \"[\" != line[0] and line != \"\\n\" :\n", - " try:\n", - " unicode_line = ''.join([i if ord(i) < 128 else '#' for i in line])\n", - " val = json.loads(unicode_line)\n", - " d[\"name\"] = val[\"name\"]\n", - " d[\"cat\"] = val[\"cat\"]\n", - " if \"pid\" in val:\n", - " d[\"pid\"] = val[\"pid\"]\n", - " if \"tid\" in val:\n", - " d[\"tid\"] = val[\"tid\"]\n", - " d[\"ts\"] = 0\n", - " d[\"dur\"] = 0\n", - " if \"ts\" in val:\n", - " d[\"ts\"] = int(val[\"ts\"])\n", - " d[\"te\"] = int(val[\"ts\"])\n", - " d[\"dur\"] = 1\n", - " if \"dur\" in val:\n", - " d[\"dur\"] = int(val[\"dur\"])\n", - " if \"args\" in val and \"hhash\" in val[\"args\"]: \n", - " d[\"hhash\"] = val[\"args\"][\"hhash\"]\n", - " if \"ts\" in val:\n", - " interval = I.closedopen(d[\"ts\"], d[\"ts\"] + 1)\n", - " if d[\"dur\"] > 0:\n", - " d[\"te\"] = int(val[\"ts\"]) + d[\"dur\"]\n", - " interval = I.closedopen(d[\"ts\"], d[\"ts\"] + d[\"dur\"])\n", - " d[\"interval\"] = I.to_string(interval)\n", - " if val[\"ph\"] != \"M\":\n", - " d[\"type\"] = 0 \n", - " if \"args\" in val: \n", - " if \"hhash\" in val[\"args\"]:\n", - " d[\"hhash\"] = val[\"args\"][\"hhash\"]\n", - " if \"size_sum\" in val[\"args\"]:\n", - " d[\"size\"] = val[\"args\"][\"size_sum\"]\n", - " if \"fhash\" in val[\"args\"]:\n", - " d[\"fhash\"] = val[\"args\"][\"fhash\"]\n", - " else:\n", - " if val[\"name\"] == \"FH\":\n", - " d[\"type\"] = 1\n", - " if \"args\" in val:\n", - " if \"name\" in val[\"args\"]:\n", - " d[\"name\"] = val[\"args\"][\"name\"]\n", - " if \"value\" in val[\"args\"]:\n", - " d[\"hash\"] = val[\"args\"][\"value\"]\n", - " elif val[\"name\"] == \"HH\":\n", - " d[\"type\"] = 2\n", - " if \"args\" in val:\n", - " if \"name\" in val[\"args\"]:\n", - " d[\"name\"] = val[\"args\"][\"name\"]\n", - " if \"value\" in val[\"args\"]:\n", - " d[\"hash\"] = val[\"args\"][\"value\"]\n", - " \n", - " except Exception as error:\n", - " logging.error(f\"Processing {line} failed with {error}\")\n", - " return d" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create Dask Dataframe" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2024-11-08 10:50:17,308 [INFO]: Created index for 1 files in /var/tmp/haridev/ipykernel_3664668/864066620.py:3\n", - "2024-11-08 10:50:17,487 [INFO]: Total size of all files are bytes in /var/tmp/haridev/ipykernel_3664668/864066620.py:6\n", - "2024-11-08 10:50:17,569 [INFO]: Max lines per file are [('/usr/workspace/haridev/xio//ops-32_files-8/RAW-BUF.pfw.gz', 4906748)] in /var/tmp/haridev/ipykernel_3664668/864066620.py:8\n", - "2024-11-08 10:50:17,571 [INFO]: Loading 300 batches out of 1 files and has 4906748 lines overall in /var/tmp/haridev/ipykernel_3664668/864066620.py:16\n" - ] - } - ], - "source": [ - "if len(file_pattern) > 0:\n", - " dask.bag.from_sequence(file_pattern).map(create_index).compute()\n", - " logging.info(f\"Created index for {len(file_pattern)} files\")\n", - " total_size = dask.bag.from_sequence(file_pattern).map(get_size).sum()\n", - " n_partition = math.ceil(total_size.compute() / (128 * 1024 ** 2))\n", - " logging.info(f\"Total size of all files are {total_size} bytes\")\n", - " max_line_numbers = dask.bag.from_sequence(file_pattern).map(get_linenumber).compute()\n", - " logging.info(f\"Max lines per file are {max_line_numbers}\")\n", - " json_line_delayed = []\n", - " total_lines = 0\n", - " for filename, max_line in max_line_numbers:\n", - " total_lines += max_line\n", - " for _, start, end in generate_line_batches(filename, max_line):\n", - " json_line_delayed.append((filename, start, end))\n", - "\n", - " logging.info(f\"Loading {len(json_line_delayed)} batches out of {len(file_pattern)} files and has {total_lines} lines overall\")\n", - " json_line_bags = []\n", - " for filename, start, end in json_line_delayed:\n", - " num_lines = end - start + 1\n", - " json_line_bags.append(dask.delayed(load_indexed_gzip_files, nout=num_lines)(filename, start, end))\n", - " json_lines = dask.bag.concat(json_line_bags)\n", - " if is_trace:\n", - " pfw_bag = json_lines.map(load_trace).filter(lambda x: \"name\" in x)\n", - " else:\n", - " pfw_bag = json_lines.map(load_profile).filter(lambda x: \"func_id\" in x)\n", - " pfw_bag.take(1)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "if is_trace:\n", - " columns = {'hhash': \"string[pyarrow]\", 'pid': \"uint64[pyarrow]\", 'tid': \"uint64[pyarrow]\",\n", - " 'cat': \"string[pyarrow]\", 'name': \"string[pyarrow]\", 'type': \"uint8[pyarrow]\",\n", - " 'ts': \"uint64[pyarrow]\", 'te': \"uint64[pyarrow]\", 'dur': \"uint64[pyarrow]\", 'interval': \"string[pyarrow]\", \n", - " 'size': \"uint64[pyarrow]\", 'fhash': \"string[pyarrow]\", 'hash': \"string[pyarrow]\", \n", - " }\n", - "else:\n", - " columns = {'pid': \"uint64[pyarrow]\", 'tid': \"uint64[pyarrow]\",\n", - " 'ts_us': \"uint64[pyarrow]\", 'dur_sec': \"float32[pyarrow]\", \n", - " 'freq': \"uint64[pyarrow]\", 'size_bytes': \"uint64[pyarrow]\", 'name': \"string[pyarrow]\", \n", - " 'filename': \"string[pyarrow]\", \n", - " 'cat': \"string[pyarrow]\"}" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "events = pfw_bag.to_dataframe(meta=columns)" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "events = events.repartition(npartitions=n_partition).persist()\n", - "_ = wait(events)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "fhash = events.query(\"type == 1\")[[\"name\",\"hash\"]]\n", - "hhash = events.query(\"type == 2\")[[\"name\",\"hash\"]]\n", - "event = events.query(\"type == 0\")\n", - "fhashes = fhash.query(\"name.str.contains('file_0')\").compute()[\"hash\"]\n", - "fhashes = fhashes.to_list()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
namehash
1780/home/cc/datacrumbs/build/data/file_0_0.dat2337428835aa42fa0d2764000f669460
4468/home/cc/datacrumbs/build/data/file_0_1.dat288f886adbe25d76fe445beb9911af78
7179/home/cc/datacrumbs/build/data/file_0_2.datec6c04037b2c4f483dc3c933ec088cc8
9858/home/cc/datacrumbs/build/data/file_0_3.dat176264bd47969d9f55d0a6d5b8021e21
12604/home/cc/datacrumbs/build/data/file_0_4.datedea10a5c821e90758563992efb303dc
15252/home/cc/datacrumbs/build/data/file_0_5.datc072c6a531057c46d034ace752f465e5
1555/home/cc/datacrumbs/build/data/file_0_6.datdf67ba39da3433bf9d33ddd244ea8a7a
4278/home/cc/datacrumbs/build/data/file_0_7.dat4399451135d75f5c5be27cd4057b34c8
\n", - "
" - ], - "text/plain": [ - " name \\\n", - "1780 /home/cc/datacrumbs/build/data/file_0_0.dat \n", - "4468 /home/cc/datacrumbs/build/data/file_0_1.dat \n", - "7179 /home/cc/datacrumbs/build/data/file_0_2.dat \n", - "9858 /home/cc/datacrumbs/build/data/file_0_3.dat \n", - "12604 /home/cc/datacrumbs/build/data/file_0_4.dat \n", - "15252 /home/cc/datacrumbs/build/data/file_0_5.dat \n", - "1555 /home/cc/datacrumbs/build/data/file_0_6.dat \n", - "4278 /home/cc/datacrumbs/build/data/file_0_7.dat \n", - "\n", - " hash \n", - "1780 2337428835aa42fa0d2764000f669460 \n", - "4468 288f886adbe25d76fe445beb9911af78 \n", - "7179 ec6c04037b2c4f483dc3c933ec088cc8 \n", - "9858 176264bd47969d9f55d0a6d5b8021e21 \n", - "12604 edea10a5c821e90758563992efb303dc \n", - "15252 c072c6a531057c46d034ace752f465e5 \n", - "1555 df67ba39da3433bf9d33ddd244ea8a7a \n", - "4278 4399451135d75f5c5be27cd4057b34c8 " - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fhash.query(\"name.str.contains('file_0')\").compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
hhashpidtidcatnametypetstedurintervalsizefhashhash
1781ecd9cccc050c9e893ab33b1a228fe76d102273102273sysopenat0460296305460586748290443[460296305,460586748)<NA>2337428835aa42fa0d2764000f669460<NA>
1861ecd9cccc050c9e893ab33b1a228fe76d102273102273syswrite0461657534461898426240892[461657534,461898426)10242337428835aa42fa0d2764000f669460<NA>
1897ecd9cccc050c9e893ab33b1a228fe76d102273102273sysread046192906046198969160631[461929060,461989691)10242337428835aa42fa0d2764000f669460<NA>
1958ecd9cccc050c9e893ab33b1a228fe76d102273102273syswrite0463052970463166181113211[463052970,463166181)10242337428835aa42fa0d2764000f669460<NA>
1976ecd9cccc050c9e893ab33b1a228fe76d102273102273sysread046318594946320934423395[463185949,463209344)10242337428835aa42fa0d2764000f669460<NA>
..........................................
9825ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015732545505615732548348428428[157325455056,157325483484)163844399451135d75f5c5be27cd4057b34c8<NA>
9921ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015732741854715732749929380746[157327418547,157327499293)163844399451135d75f5c5be27cd4057b34c8<NA>
9983ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015732929872215732932571426992[157329298722,157329325714)163844399451135d75f5c5be27cd4057b34c8<NA>
10047ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015733118867115733128655497883[157331188671,157331286554)163844399451135d75f5c5be27cd4057b34c8<NA>
10049ecd9cccc050c9e893ab33b1a228fe76d103600103600sysclose01573312909941573312952614267[157331290994,157331295261)<NA>4399451135d75f5c5be27cd4057b34c8<NA>
\n", - "

12416 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " hhash pid tid cat name type \\\n", - "1781 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys openat 0 \n", - "1861 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys write 0 \n", - "1897 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys read 0 \n", - "1958 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys write 0 \n", - "1976 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys read 0 \n", - "... ... ... ... ... ... ... \n", - "9825 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "9921 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "9983 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "10047 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "10049 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys close 0 \n", - "\n", - " ts te dur interval size \\\n", - "1781 460296305 460586748 290443 [460296305,460586748) \n", - "1861 461657534 461898426 240892 [461657534,461898426) 1024 \n", - "1897 461929060 461989691 60631 [461929060,461989691) 1024 \n", - "1958 463052970 463166181 113211 [463052970,463166181) 1024 \n", - "1976 463185949 463209344 23395 [463185949,463209344) 1024 \n", - "... ... ... ... ... ... \n", - "9825 157325455056 157325483484 28428 [157325455056,157325483484) 16384 \n", - "9921 157327418547 157327499293 80746 [157327418547,157327499293) 16384 \n", - "9983 157329298722 157329325714 26992 [157329298722,157329325714) 16384 \n", - "10047 157331188671 157331286554 97883 [157331188671,157331286554) 16384 \n", - "10049 157331290994 157331295261 4267 [157331290994,157331295261) \n", - "\n", - " fhash hash \n", - "1781 2337428835aa42fa0d2764000f669460 \n", - "1861 2337428835aa42fa0d2764000f669460 \n", - "1897 2337428835aa42fa0d2764000f669460 \n", - "1958 2337428835aa42fa0d2764000f669460 \n", - "1976 2337428835aa42fa0d2764000f669460 \n", - "... ... ... \n", - "9825 4399451135d75f5c5be27cd4057b34c8 \n", - "9921 4399451135d75f5c5be27cd4057b34c8 \n", - "9983 4399451135d75f5c5be27cd4057b34c8 \n", - "10047 4399451135d75f5c5be27cd4057b34c8 \n", - "10049 4399451135d75f5c5be27cd4057b34c8 \n", - "\n", - "[12416 rows x 13 columns]" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "event.query(\"fhash.isin(@value)\", local_dict={\"value\": fhashes}).compute()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Analysis" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
hhashpidtidcatnametypetstedurintervalsizefhashhash
1781ecd9cccc050c9e893ab33b1a228fe76d102273102273sysopenat0460296305460586748290443[460296305,460586748)<NA>2337428835aa42fa0d2764000f669460<NA>
1861ecd9cccc050c9e893ab33b1a228fe76d102273102273syswrite0461657534461898426240892[461657534,461898426)10242337428835aa42fa0d2764000f669460<NA>
1897ecd9cccc050c9e893ab33b1a228fe76d102273102273sysread046192906046198969160631[461929060,461989691)10242337428835aa42fa0d2764000f669460<NA>
1958ecd9cccc050c9e893ab33b1a228fe76d102273102273syswrite0463052970463166181113211[463052970,463166181)10242337428835aa42fa0d2764000f669460<NA>
1976ecd9cccc050c9e893ab33b1a228fe76d102273102273sysread046318594946320934423395[463185949,463209344)10242337428835aa42fa0d2764000f669460<NA>
..........................................
9825ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015732545505615732548348428428[157325455056,157325483484)163844399451135d75f5c5be27cd4057b34c8<NA>
9921ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015732741854715732749929380746[157327418547,157327499293)163844399451135d75f5c5be27cd4057b34c8<NA>
9983ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015732929872215732932571426992[157329298722,157329325714)163844399451135d75f5c5be27cd4057b34c8<NA>
10047ecd9cccc050c9e893ab33b1a228fe76d103600103600sysread015733118867115733128655497883[157331188671,157331286554)163844399451135d75f5c5be27cd4057b34c8<NA>
10049ecd9cccc050c9e893ab33b1a228fe76d103600103600sysclose01573312909941573312952614267[157331290994,157331295261)<NA>4399451135d75f5c5be27cd4057b34c8<NA>
\n", - "

12416 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " hhash pid tid cat name type \\\n", - "1781 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys openat 0 \n", - "1861 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys write 0 \n", - "1897 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys read 0 \n", - "1958 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys write 0 \n", - "1976 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 sys read 0 \n", - "... ... ... ... ... ... ... \n", - "9825 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "9921 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "9983 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "10047 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys read 0 \n", - "10049 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 sys close 0 \n", - "\n", - " ts te dur interval size \\\n", - "1781 460296305 460586748 290443 [460296305,460586748) \n", - "1861 461657534 461898426 240892 [461657534,461898426) 1024 \n", - "1897 461929060 461989691 60631 [461929060,461989691) 1024 \n", - "1958 463052970 463166181 113211 [463052970,463166181) 1024 \n", - "1976 463185949 463209344 23395 [463185949,463209344) 1024 \n", - "... ... ... ... ... ... \n", - "9825 157325455056 157325483484 28428 [157325455056,157325483484) 16384 \n", - "9921 157327418547 157327499293 80746 [157327418547,157327499293) 16384 \n", - "9983 157329298722 157329325714 26992 [157329298722,157329325714) 16384 \n", - "10047 157331188671 157331286554 97883 [157331188671,157331286554) 16384 \n", - "10049 157331290994 157331295261 4267 [157331290994,157331295261) \n", - "\n", - " fhash hash \n", - "1781 2337428835aa42fa0d2764000f669460 \n", - "1861 2337428835aa42fa0d2764000f669460 \n", - "1897 2337428835aa42fa0d2764000f669460 \n", - "1958 2337428835aa42fa0d2764000f669460 \n", - "1976 2337428835aa42fa0d2764000f669460 \n", - "... ... ... \n", - "9825 4399451135d75f5c5be27cd4057b34c8 \n", - "9921 4399451135d75f5c5be27cd4057b34c8 \n", - "9983 4399451135d75f5c5be27cd4057b34c8 \n", - "10047 4399451135d75f5c5be27cd4057b34c8 \n", - "10049 4399451135d75f5c5be27cd4057b34c8 \n", - "\n", - "[12416 rows x 13 columns]" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "\n", - "interesting_events = event.query(\"fhash.isin(@value)\", local_dict={\"value\": fhashes}).sort_values(\"ts\")\n", - "interesting_events.compute()" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 1\n", - "1 1024\n", - "2 1024\n", - "3 1024\n", - "4 1024\n", - " ... \n", - "12411 16384\n", - "12412 16384\n", - "12413 16384\n", - "12414 16384\n", - "12415 1\n", - "Name: size, Length: 12416, dtype: uint64[pyarrow]" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "interesting_events[\"combined_name\"] = interesting_events[\"name\"] + \"-\" + interesting_events[\"cat\"]\n", - "ts_events = interesting_events[[\"size\"]].compute().reset_index().drop(\"index\", axis=1)\n", - "ts_events[\"size\"].fillna(value=1.0)" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
intervalname
1781[460296305,460586748)openat
1861[461657534,461898426)write
1897[461929060,461989691)read
1958[463052970,463166181)write
1976[463185949,463209344)read
.........
9825[157325455056,157325483484)read
9921[157327418547,157327499293)read
9983[157329298722,157329325714)read
10047[157331188671,157331286554)read
10049[157331290994,157331295261)close
\n", - "

12416 rows × 2 columns

\n", - "
" - ], - "text/plain": [ - " interval name\n", - "1781 [460296305,460586748) openat\n", - "1861 [461657534,461898426) write\n", - "1897 [461929060,461989691) read\n", - "1958 [463052970,463166181) write\n", - "1976 [463185949,463209344) read\n", - "... ... ...\n", - "9825 [157325455056,157325483484) read\n", - "9921 [157327418547,157327499293) read\n", - "9983 [157329298722,157329325714) read\n", - "10047 [157331188671,157331286554) read\n", - "10049 [157331290994,157331295261) close\n", - "\n", - "[12416 rows x 2 columns]" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "interesting_intervals = interesting_events[[\"interval\",\"name\"]].compute()\n", - "interesting_intervals" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [], - "source": [ - "\n", - "# interesting_events[\"interval\"] = interesting_events.apply(lambda x: I.to_string(I.closed(x[\"ts\"], x[\"ts\"]+x[\"dur\"])), axis=1)" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "([[460296305,460586748),\n", - " [461657534,461898426),\n", - " [461929060,461989691),\n", - " [463052970,463166181),\n", - " [463185949,463209344),\n", - " [464270483,464347630),\n", - " [464367094,464391244),\n", - " [465452044,465529545),\n", - " [465542671,465557657),\n", - " [466617931,466787067)],\n", - " 12416)" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def group_func(df):\n", - " val = I.empty()\n", - " for index, value in df.items():\n", - " if str(value) != 'NA':\n", - " pad_interval = I.from_string(str(value), int)\n", - " val = val.union(pad_interval)\n", - " logging.debug(f\"Grouped Range into {val}\")\n", - " return I.to_string(val)\n", - "def union_portions():\n", - " return dd.Aggregation(\n", - " 'union_portions',\n", - " chunk=lambda s: s.apply(group_func),\n", - " agg=lambda s: s.apply(group_func)\n", - " )\n", - "relevant_intervals = interesting_events[[\"interval\"]].reduction(chunk=lambda s: s.apply(group_func), aggregate=lambda s1: s1.apply(group_func))[\"interval\"].compute()\n", - "relevant_intervals = I.from_string(relevant_intervals, int)\n", - "relevant_intervals_list = list(relevant_intervals)\n", - "relevant_intervals_list[:10], len(relevant_intervals_list)" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(460296305, 157331295261)" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "min_ts = relevant_intervals_list[0].lower\n", - "max_te = relevant_intervals_list[-1].upper\n", - "min_ts, max_te" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
hhashpidtidcatnametypetstedurintervalsizefhashhash
1587ecd9cccc050c9e893ab33b1a228fe76d102273102273kernel__mod_node_page_state0460196345460196775430[460196345,460196775)<NA><NA><NA>
1590ecd9cccc050c9e893ab33b1a228fe76d102273102273kernelnext_uptodate_page0460198409460198925516[460198409,460198925)<NA><NA><NA>
1591ecd9cccc050c9e893ab33b1a228fe76d102273102273kernel__mod_node_page_state0460201504460201812308[460201504,460201812)<NA><NA><NA>
1592ecd9cccc050c9e893ab33b1a228fe76d102273102273kernel__mod_lruvec_page_state04602006874602021611474[460200687,460202161)<NA><NA><NA>
1593ecd9cccc050c9e893ab33b1a228fe76d102273102273kernelpage_add_file_rmap04601997944602024672673[460199794,460202467)<NA><NA><NA>
..........................................
10056ecd9cccc050c9e893ab33b1a228fe76d103600103600kernel__mod_node_page_state0157331383211157331383943732[157331383211,157331383943)<NA><NA><NA>
10057ecd9cccc050c9e893ab33b1a228fe76d103600103600kernel__mod_zone_page_state0157331385911157331386579668[157331385911,157331386579)<NA><NA><NA>
10058ecd9cccc050c9e893ab33b1a228fe76d103600103600kernel__mod_node_page_state0157331388446157331389308862[157331388446,157331389308)<NA><NA><NA>
10059ecd9cccc050c9e893ab33b1a228fe76d103600103600kernel__mod_zone_page_state0157331391133157331391930797[157331391133,157331391930)<NA><NA><NA>
10060ecd9cccc050c9e893ab33b1a228fe76d103600103600kernel__mod_node_page_state0157331393759157331394674915[157331393759,157331394674)<NA><NA><NA>
\n", - "

4759821 rows × 13 columns

\n", - "
" - ], - "text/plain": [ - " hhash pid tid cat \\\n", - "1587 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 kernel \n", - "1590 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 kernel \n", - "1591 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 kernel \n", - "1592 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 kernel \n", - "1593 ecd9cccc050c9e893ab33b1a228fe76d 102273 102273 kernel \n", - "... ... ... ... ... \n", - "10056 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 kernel \n", - "10057 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 kernel \n", - "10058 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 kernel \n", - "10059 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 kernel \n", - "10060 ecd9cccc050c9e893ab33b1a228fe76d 103600 103600 kernel \n", - "\n", - " name type ts te dur \\\n", - "1587 __mod_node_page_state 0 460196345 460196775 430 \n", - "1590 next_uptodate_page 0 460198409 460198925 516 \n", - "1591 __mod_node_page_state 0 460201504 460201812 308 \n", - "1592 __mod_lruvec_page_state 0 460200687 460202161 1474 \n", - "1593 page_add_file_rmap 0 460199794 460202467 2673 \n", - "... ... ... ... ... ... \n", - "10056 __mod_node_page_state 0 157331383211 157331383943 732 \n", - "10057 __mod_zone_page_state 0 157331385911 157331386579 668 \n", - "10058 __mod_node_page_state 0 157331388446 157331389308 862 \n", - "10059 __mod_zone_page_state 0 157331391133 157331391930 797 \n", - "10060 __mod_node_page_state 0 157331393759 157331394674 915 \n", - "\n", - " interval size fhash hash \n", - "1587 [460196345,460196775) \n", - "1590 [460198409,460198925) \n", - "1591 [460201504,460201812) \n", - "1592 [460200687,460202161) \n", - "1593 [460199794,460202467) \n", - "... ... ... ... ... \n", - "10056 [157331383211,157331383943) \n", - "10057 [157331385911,157331386579) \n", - "10058 [157331388446,157331389308) \n", - "10059 [157331391133,157331391930) \n", - "10060 [157331393759,157331394674) \n", - "\n", - "[4759821 rows x 13 columns]" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "filtered_events = event.query(f\"ts >= {min_ts - 1e5} and te <= {max_te + 1e5} and dur > 0\")\n", - "filtered_events.compute()\n", - "# filtered_events = event" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 49, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "33dc0a4b74ff49a4ac4d24b14950b16f", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/12416 [00:00= {interval.lower} and ts <= {interval.upper}) or (te >= {interval.lower} and te <= {interval.upper})\"\n", - " b_overlaps_a = f\"({interval.lower} >= ts and {interval.lower} <= te) or ({interval.upper} >= ts and {interval.upper} <= te)\"\n", - " batch = filtered_events.query(f\"{a_overlaps_b} or {b_overlaps_a}\")[[\"combined_name\", \"dur\"]].groupby(\"combined_name\").sum().compute()\n", - " if ops in ops_map:\n", - " op_value = ops_map[ops]\n", - " else:\n", - " ops_counter += 1\n", - " op_value = ops_counter\n", - " ops_map[ops] = op_value\n", - " batch.loc['op'] = [op_value]\n", - " event_batch_per_sys_call.append(batch)\n", - " count += 1\n" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "869f3992b63f4e7793f67139003e4146", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/11 [00:00 1 and values[0] not in all_mapped_functions:\n", - " # print(values[0])\n", - " missed_mapping.add(values[0])\n", - " return missed_mapping\n", - "\n", - "def print_mapping(missed_mapping):\n", - " for index, col in enumerate(missed_mapping):\n", - " if index % 10 == 9:\n", - " print(f\"\\\"{col}\\\",\")\n", - " else:\n", - " print(f\"\\\"{col}\\\", \", end=\"\")\n", - " \n", - "def find_most_related_functions(category, ddf, columns, variance_target):\n", - " ignore_columns = [\"write-sys\",\"main\", \"read-sys\",\"write\",\"open64\",\"open\", ]\n", - " y_columns = [\"BW\"]\n", - " x_columns = []\n", - " for column in columns:\n", - " if column not in ignore_columns:\n", - " col = ddf.columns[ddf.columns.str.contains(column)]\n", - " if len(col) > 0:\n", - " x_columns.append(col[0])\n", - " # print(x_columns)\n", - " if len(x_columns) < 1:\n", - " return 0, 0, [], (0, 0, 0)\n", - " x = ddf.loc[:, x_columns].values\n", - " y = ddf.loc[:, y_columns].values\n", - " regressor = RandomForestRegressor(n_estimators=100, random_state=0, oob_score=True)\n", - " _ = regressor.fit(x, y.ravel())\n", - " oob_score = regressor.oob_score_\n", - " # print(f'Out-of-Bag Score: {oob_score}')\n", - "\n", - " # Making predictions on the same data or new data\n", - " predictions = regressor.predict(x)\n", - "\n", - " # Evaluating the model\n", - " mse = mean_absolute_percentage_error(y, predictions)\n", - " # print(f'Mean Squared Error: {mse}')\n", - "\n", - " r2 = r2_score(y, predictions)\n", - " # print(f'R-squared: {r2}')\n", - " \n", - " f_i = list(zip(x_columns,regressor.feature_importances_))\n", - " f_i.sort(reverse=True, key = lambda x : x[1])\n", - " variances = [x[1] for x in f_i]\n", - " required_values = (np.cumsum(variances)<=variance_target).argmin() + 1\n", - " most_f_i = f_i[:required_values]\n", - " most_important_features = [x[0] for x in most_f_i]\n", - " \n", - " # print(category, np.sum(variances[:required_values]), required_values, most_important_features)\n", - " return np.sum(variances[:required_values]), required_values, most_important_features, (oob_score, mse, r2)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Check for missed Mapping" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "Checking missed mapping for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-64_ts-64m-RAW-DIRECT.pfw.gz.jsonl\n", - "\"write\", \n", - "\n", - "Checking missed mapping for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-32_files-8-RAW-BUF.pfw.gz.jsonl\n", - "\n", - "\n", - "Checking missed mapping for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-32_files-8-RAW-DIRECT.pfw.gz.jsonl\n", - "\n", - "\n", - "Checking missed mapping for dataset /usr/workspace/haridev/xio//output/jslines/read_ops-32_files-8-RAW-DIRECT.pfw.gz.jsonl\n", - "\"main\", \n", - "\n", - "Checking missed mapping for dataset /usr/workspace/haridev/xio//output/jslines/read_ops-32_files-8-RAW-BUF.pfw.gz.jsonl\n", - "\"main\", \n", - "\n", - "Checking missed mapping for dataset /usr/workspace/haridev/xio//output/jslines/openat_ops-32_files-8-RAW-BUF.pfw.gz.jsonl\n", - "\"open64\", \"main\", \"open\", \n", - "\n", - "Checking missed mapping for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-64_ts-64m-RAW-BUFFERED.pfw.gz.jsonl\n", - "\"write\", " - ] - } - ], - "source": [ - "all_mapped_functions = flatten_mapped_function(function_mapping)\n", - "\n", - "for trace in analysis_files:\n", - " print(f\"\\n\\nChecking missed mapping for dataset {trace}\")\n", - " ddf = load_trace(trace)\n", - " missed_mapping = get_missed_mapping(ddf, all_mapped_functions)\n", - " print_mapping(missed_mapping)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Build a ML model" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "Creating model for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-64_ts-64m-RAW-DIRECT.pfw.gz.jsonl\n", - "1 /9 important features in vfs gives variance:99.76 % r2:0.96 mape:0.00 \n", - "11 /195 important features in ext4 gives variance:99.00 % r2:0.95 mape:0.00 \n", - "20 /63 important features in page_cache gives variance:99.14 % r2:0.86 mape:0.02 \n", - "2 /3 important features in vm gives variance:100.00% r2:0.15 mape:0.03 \n", - "1 /1 important features in profile gives variance:100.00% r2:0.81 mape:0.02 \n", - "0 /6 important features in file_cache gives variance:0.00 % r2:0.00 mape:0.00 \n", - "1 /2 important features in sched gives variance:100.00% r2:0.77 mape:0.02 \n", - "2 /4 important features in mount gives variance:100.00% r2:0.82 mape:0.02 \n", - "1 /1 important features in dentry gives variance:100.00% r2:0.78 mape:0.02 \n", - "0 /1 important features in ima gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /4 important features in security gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in apparmor gives variance:100.00% r2:0.78 mape:0.02 \n", - "2 /6 important features in crypto gives variance:99.53 % r2:0.80 mape:0.02 \n", - "2 /9 important features in memory gives variance:99.32 % r2:0.81 mape:0.02 \n", - "36 /43 important features in bio gives variance:99.29 % r2:0.86 mape:0.01 \n", - "0 /1 important features in quota gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in block gives variance:100.00% r2:0.84 mape:0.02 \n", - "3 /3 important features in direct-io gives variance:100.00% r2:0.84 mape:0.02 \n", - "\n", - "\n", - "Creating model for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-32_files-8-RAW-BUF.pfw.gz.jsonl\n", - "4 /9 important features in vfs gives variance:99.97 % r2:0.99 mape:0.05 \n", - "25 /195 important features in ext4 gives variance:99.10 % r2:0.99 mape:0.03 \n", - "19 /63 important features in page_cache gives variance:99.91 % r2:0.99 mape:0.05 \n", - "2 /3 important features in vm gives variance:100.00% r2:0.78 mape:0.30 \n", - "1 /1 important features in profile gives variance:100.00% r2:0.02 mape:0.68 \n", - "1 /6 important features in file_cache gives variance:100.00% r2:0.00 mape:0.69 \n", - "1 /2 important features in sched gives variance:100.00% r2:0.02 mape:0.68 \n", - "2 /4 important features in mount gives variance:100.00% r2:0.27 mape:0.50 \n", - "1 /1 important features in dentry gives variance:100.00% r2:0.50 mape:0.48 \n", - "0 /1 important features in ima gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /4 important features in security gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in apparmor gives variance:100.00% r2:0.90 mape:0.22 \n", - "1 /6 important features in crypto gives variance:100.00% r2:0.00 mape:0.69 \n", - "3 /9 important features in memory gives variance:100.00% r2:0.13 mape:0.64 \n", - "0 /43 important features in bio gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in quota gives variance:0.00 % r2:0.00 mape:0.00 \n", - "1 /6 important features in block gives variance:100.00% r2:0.02 mape:0.68 \n", - "0 /3 important features in direct-io gives variance:0.00 % r2:0.00 mape:0.00 \n", - "\n", - "\n", - "Creating model for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-32_files-8-RAW-DIRECT.pfw.gz.jsonl\n", - "4 /9 important features in vfs gives variance:99.99 % r2:0.99 mape:0.10 \n", - "49 /195 important features in ext4 gives variance:99.03 % r2:1.00 mape:0.05 \n", - "4 /63 important features in page_cache gives variance:99.25 % r2:1.00 mape:0.01 \n", - "2 /3 important features in vm gives variance:100.00% r2:0.99 mape:0.13 \n", - "1 /1 important features in profile gives variance:100.00% r2:0.01 mape:2.10 \n", - "1 /6 important features in file_cache gives variance:100.00% r2:0.00 mape:2.13 \n", - "1 /2 important features in sched gives variance:100.00% r2:0.01 mape:2.10 \n", - "2 /4 important features in mount gives variance:100.00% r2:0.33 mape:1.54 \n", - "1 /1 important features in dentry gives variance:100.00% r2:0.55 mape:1.36 \n", - "0 /1 important features in ima gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /4 important features in security gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in apparmor gives variance:100.00% r2:0.86 mape:0.68 \n", - "2 /6 important features in crypto gives variance:100.00% r2:0.84 mape:0.44 \n", - "1 /9 important features in memory gives variance:100.00% r2:0.94 mape:0.44 \n", - "22 /43 important features in bio gives variance:99.38 % r2:1.00 mape:0.02 \n", - "0 /1 important features in quota gives variance:0.00 % r2:0.00 mape:0.00 \n", - "2 /6 important features in block gives variance:100.00% r2:0.03 mape:2.06 \n", - "2 /3 important features in direct-io gives variance:100.00% r2:0.99 mape:0.08 \n", - "\n", - "\n", - "Creating model for dataset /usr/workspace/haridev/xio//output/jslines/read_ops-32_files-8-RAW-DIRECT.pfw.gz.jsonl\n", - "2 /9 important features in vfs gives variance:100.00% r2:1.00 mape:0.09 \n", - "8 /195 important features in ext4 gives variance:99.03 % r2:1.00 mape:0.02 \n", - "6 /63 important features in page_cache gives variance:99.90 % r2:0.99 mape:0.06 \n", - "3 /3 important features in vm gives variance:100.00% r2:0.00 mape:1.94 \n", - "1 /1 important features in profile gives variance:100.00% r2:0.01 mape:1.94 \n", - "1 /6 important features in file_cache gives variance:100.00% r2:0.00 mape:1.94 \n", - "1 /2 important features in sched gives variance:100.00% r2:0.01 mape:1.94 \n", - "0 /4 important features in mount gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in dentry gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in ima gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /4 important features in security gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in apparmor gives variance:100.00% r2:0.86 mape:0.60 \n", - "2 /6 important features in crypto gives variance:100.00% r2:0.57 mape:1.02 \n", - "1 /9 important features in memory gives variance:99.91 % r2:0.87 mape:0.41 \n", - "24 /43 important features in bio gives variance:99.37 % r2:0.95 mape:0.08 \n", - "0 /1 important features in quota gives variance:0.00 % r2:0.00 mape:0.00 \n", - "1 /6 important features in block gives variance:100.00% r2:0.00 mape:1.94 \n", - "1 /3 important features in direct-io gives variance:100.00% r2:0.91 mape:0.27 \n", - "\n", - "\n", - "Creating model for dataset /usr/workspace/haridev/xio//output/jslines/read_ops-32_files-8-RAW-BUF.pfw.gz.jsonl\n", - "2 /9 important features in vfs gives variance:100.00% r2:0.95 mape:0.40 \n", - "14 /195 important features in ext4 gives variance:99.11 % r2:0.85 mape:0.47 \n", - "3 /63 important features in page_cache gives variance:99.96 % r2:0.88 mape:0.52 \n", - "2 /3 important features in vm gives variance:100.00% r2:0.00 mape:2.54 \n", - "1 /1 important features in profile gives variance:100.00% r2:0.00 mape:2.53 \n", - "4 /6 important features in file_cache gives variance:100.00% r2:0.98 mape:0.22 \n", - "1 /2 important features in sched gives variance:100.00% r2:0.00 mape:2.53 \n", - "0 /4 important features in mount gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in dentry gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in ima gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /4 important features in security gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in apparmor gives variance:100.00% r2:0.87 mape:0.82 \n", - "0 /6 important features in crypto gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /9 important features in memory gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /43 important features in bio gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in quota gives variance:0.00 % r2:0.00 mape:0.00 \n", - "1 /6 important features in block gives variance:100.00% r2:0.00 mape:2.53 \n", - "0 /3 important features in direct-io gives variance:0.00 % r2:0.00 mape:0.00 \n", - "\n", - "\n", - "Creating model for dataset /usr/workspace/haridev/xio//output/jslines/openat_ops-32_files-8-RAW-BUF.pfw.gz.jsonl\n", - "1 /9 important features in vfs gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /195 important features in ext4 gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /63 important features in page_cache gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /3 important features in vm gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /1 important features in profile gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /6 important features in file_cache gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /2 important features in sched gives variance:0.00 % r2:1.00 mape:0.00 \n", - "0 /4 important features in mount gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in dentry gives variance:0.00 % r2:0.00 mape:0.00 \n", - "1 /1 important features in ima gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /4 important features in security gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /6 important features in apparmor gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /6 important features in crypto gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /9 important features in memory gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /43 important features in bio gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /1 important features in quota gives variance:0.00 % r2:1.00 mape:0.00 \n", - "1 /6 important features in block gives variance:0.00 % r2:1.00 mape:0.00 \n", - "0 /3 important features in direct-io gives variance:0.00 % r2:0.00 mape:0.00 \n", - "\n", - "\n", - "Creating model for dataset /usr/workspace/haridev/xio//output/jslines/write_ops-64_ts-64m-RAW-BUFFERED.pfw.gz.jsonl\n", - "4 /9 important features in vfs gives variance:100.00% r2:0.85 mape:0.01 \n", - "35 /195 important features in ext4 gives variance:99.42 % r2:0.85 mape:0.01 \n", - "24 /63 important features in page_cache gives variance:99.97 % r2:0.85 mape:0.02 \n", - "2 /3 important features in vm gives variance:100.00% r2:0.85 mape:0.01 \n", - "1 /1 important features in profile gives variance:100.00% r2:0.85 mape:0.01 \n", - "0 /6 important features in file_cache gives variance:0.00 % r2:0.00 mape:0.00 \n", - "2 /2 important features in sched gives variance:100.00% r2:0.76 mape:0.04 \n", - "2 /4 important features in mount gives variance:100.00% r2:0.83 mape:0.02 \n", - "1 /1 important features in dentry gives variance:100.00% r2:0.85 mape:0.01 \n", - "0 /1 important features in ima gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /4 important features in security gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in apparmor gives variance:100.00% r2:0.79 mape:0.04 \n", - "1 /6 important features in crypto gives variance:100.00% r2:0.85 mape:0.01 \n", - "2 /9 important features in memory gives variance:100.00% r2:0.85 mape:0.01 \n", - "0 /43 important features in bio gives variance:0.00 % r2:0.00 mape:0.00 \n", - "0 /1 important features in quota gives variance:0.00 % r2:0.00 mape:0.00 \n", - "3 /6 important features in block gives variance:99.50 % r2:0.85 mape:0.02 \n", - "0 /3 important features in direct-io gives variance:0.00 % r2:0.00 mape:0.00 \n", - "Total relevant features are 191\n" - ] - } - ], - "source": [ - "\n", - "variance_target = 0.99\n", - "min_variance_target = 0\n", - "final_relevant_columns = set()\n", - "for trace in analysis_files:\n", - " \n", - " print(f\"\\n\\nCreating model for dataset {trace}\")\n", - " ddf = load_trace(trace)\n", - " ddf = clean_data(ddf).compute()\n", - " # print(ddf)\n", - " for category, columns in function_mapping.items():\n", - " explained_variance, number_of_features, features, model_parameters = find_most_related_functions(category, ddf, columns, variance_target)\n", - " #if number_of_features > 0 and min_variance_target <= explained_variance:\n", - " print(f\"{number_of_features: >3} / {len(columns): >3} important features in {category: >10} gives variance:{explained_variance*100.0:>6,.2f}% r2:{model_parameters[2]:>3,.2f} mape:{model_parameters[1]:>10,.2f} \")# group with {features}\")\n", - " # break\n", - " final_relevant_columns.update(set(features))\n", - "\n", - "print(f\"Total relevant features are {len(final_relevant_columns)}\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Creating model for all datasets\n", - " 4 / 9 important features in vfs gives variance: 99.62% r2:0.97 mape: 0.17 \n", - " 24 / 195 important features in ext4 gives variance: 99.06% r2:0.90 mape:1,086,605,791,059.25 \n", - " 8 / 63 important features in page_cache gives variance: 99.01% r2:0.92 mape: 0.16 \n", - " 2 / 3 important features in vm gives variance: 99.83% r2:0.03 mape:269,134,177,061,929.91 \n", - " 1 / 1 important features in profile gives variance:100.00% r2:0.00 mape:2,135,581,151,074,132.50 \n", - " 4 / 6 important features in file_cache gives variance: 99.95% r2:0.95 mape: 1.22 \n", - " 1 / 2 important features in sched gives variance: 99.85% r2:0.00 mape:2,448,190,913,318,968.50 \n", - " 2 / 4 important features in mount gives variance: 99.80% r2:0.03 mape:2,907,466,409,796,931.50 \n", - " 1 / 1 important features in dentry gives variance:100.00% r2:0.12 mape:4,102,043,887,920,672.50 \n", - " 1 / 1 important features in ima gives variance:100.00% r2:0.00 mape: 3.39 \n", - " 3 / 4 important features in security gives variance:100.00% r2:0.00 mape: 3.39 \n", - " 3 / 6 important features in apparmor gives variance: 99.99% r2:0.88 mape: 0.92 \n", - " 3 / 6 important features in crypto gives variance: 99.82% r2:0.11 mape: 2.20 \n", - " 4 / 9 important features in memory gives variance:100.00% r2:0.12 mape: 2.03 \n", - " 14 / 43 important features in bio gives variance: 99.19% r2:0.12 mape:2,528,907,973,526,278.50 \n", - " 1 / 1 important features in quota gives variance:100.00% r2:0.00 mape: 3.39 \n", - " 2 / 6 important features in block gives variance: 99.89% r2:0.00 mape:2,454,417,987,904,099.50 \n", - " 2 / 3 important features in direct-io gives variance: 99.91% r2:0.11 mape:3,957,355,232,226,829.00 \n" - ] - } - ], - "source": [ - "\n", - "print(f\"Creating model for all datasets\")\n", - "ddf = load_traces(output_file)\n", - "ddf = clean_data(ddf)\n", - "# print(ddf)\n", - "for category, columns in function_mapping.items():\n", - " explained_variance, number_of_features, features, model_parameters = find_most_related_functions(category, ddf, columns, variance_target)\n", - " #if number_of_features > 0 and min_variance_target <= explained_variance:\n", - " print(f\"{number_of_features: >3} / {len(columns): >3} important features in {category: >10} gives variance:{explained_variance*100.0:>6,.2f}% r2:{model_parameters[2]:>3,.2f} mape:{model_parameters[1]:>10,.2f} \")# group with {features}\")\n", - " # break\n", - " final_relevant_columns.update(set(features))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## make the number of relevance features dynamic.\n", - "1. Correlation\n", - " 1. correlation matrix.\n", - " 2. PCA\n", - " 3. Lasso Regression (L1)\n", - " 4. Auto regression\n", - "2. SHAPLEY value (feature importance)\n", - " 1. Tree SHAP\n", - "3. How portable are the interfaces (do not overfit)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. Tanzima for better models\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## models\n", - "- sequential training: gradient boost\n", - "- " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/cmake/configure_files/datacrumbs_config.h.in b/cmake/configure_files/datacrumbs_config.h.in index 24e361e0..8c2cdb61 100644 --- a/cmake/configure_files/datacrumbs_config.h.in +++ b/cmake/configure_files/datacrumbs_config.h.in @@ -18,9 +18,13 @@ #cmakedefine DATACRUMBS_ENABLE @DATACRUMBS_ENABLE@ #cmakedefine DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS @DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS@ #cmakedefine DATACRUMBS_TRACE_RINGBUF_SIZE_MB @DATACRUMBS_TRACE_RINGBUF_SIZE_MB@ +#cmakedefine DATACRUMBS_MAX_RUNTIME_FUNCTIONS @DATACRUMBS_MAX_RUNTIME_FUNCTIONS@ #ifndef DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS #define DATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS 0 #endif +#ifndef DATACRUMBS_MAX_RUNTIME_FUNCTIONS +#define DATACRUMBS_MAX_RUNTIME_FUNCTIONS 16384 +#endif #cmakedefine DATACRUMBS_TRACE_ALL_PROCESSES @DATACRUMBS_TRACE_ALL_PROCESSES@ #ifndef DATACRUMBS_TRACE_ALL_PROCESSES #define DATACRUMBS_TRACE_ALL_PROCESSES 0 @@ -37,12 +41,20 @@ #cmakedefine DATACRUMBS_TIME_INTERVAL_NS @DATACRUMBS_TIME_INTERVAL_NS@ #cmakedefine DATACRUMBS_SRC_GEN_PATH "@DATACRUMBS_SRC_GEN_PATH@" #cmakedefine DATACRUMBS_LIBC_SO "@DATACRUMBS_LIBC_SO@" -#cmakedefine DATACRUMBS_BUILD_CLIENT_SO "@DATACRUMBS_BUILD_CLIENT_SO@" #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@/@PROJECT_NAME@" +#define DATACRUMBS_INSTALL_PREFIX_PATH "@DATACRUMBS_INSTALL_PREFIX_PATH@" +#define DATACRUMBS_INSTALL_CONFIGS_DIR "@DATACRUMBS_INSTALL_CONFIGS_DIR@" +#define DATACRUMBS_INSTALL_SHARED_DATA_DIR "@DATACRUMBS_INSTALL_SHARED_DATA_DIR@" +#define DATACRUMBS_SYSTEM_PROBE_FILE "@DATACRUMBS_SYSTEM_PROBE_FILE@" +#define DATACRUMBS_PROBE_SECRET_FILE "@DATACRUMBS_PROBE_SECRET_FILE@" +#define DATACRUMBS_SIGN_PROBES_SOCKET_PATH "@DATACRUMBS_SIGN_PROBES_SOCKET_PATH@" +#define DATACRUMBS_TRACE_DIR_PATTERN "@DATACRUMBS_TRACE_DIR_PATTERN@" +#define DATACRUMBS_SERVER_RUN_DIR "@DATACRUMBS_SERVER_RUN_DIR@" +#define DATACRUMBS_SERVER_RUN_ID_FILE "@DATACRUMBS_SERVER_RUN_ID_FILE@" +#cmakedefine DATACRUMBS_INSTALL_RUNSTATEDIR "@DATACRUMBS_INSTALL_RUNSTATEDIR@" #cmakedefine DATACRUMBS_ENABLE_INCLUSION_PATH @DATACRUMBS_ENABLE_INCLUSION_PATH@ #ifndef DATACRUMBS_ENABLE_INCLUSION_PATH @@ -56,6 +68,9 @@ #define DATACRUMBS_KERNEL_VERSION_MINOR ((DATACRUMBS_KERNEL_VERSION / 100) % 1000) #define DATACRUMBS_KERNEL_VERSION_PATCH (DATACRUMBS_KERNEL_VERSION % 100) +/* Install-time system configuration */ +@DATACRUMBS_SYSTEM_CONFIGURATION_DEFINES@ + /* clang-format on */ -#endif // DATACRUMBS_CONFIG_HPP \ No newline at end of file +#endif // DATACRUMBS_CONFIG_HPP diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 2091fdc4..3ae360b9 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -18,17 +18,27 @@ macro(include_dependencies) 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(PkgConfig QUIET) + if(PkgConfig_FOUND) + execute_process( + COMMAND ${PKG_CONFIG_EXECUTABLE} --version + RESULT_VARIABLE _DATACRUMBS_PKGCONFIG_RESULT + OUTPUT_QUIET ERROR_QUIET + ) + if(_DATACRUMBS_PKGCONFIG_RESULT EQUAL 0) + pkg_check_modules(LIBBPF QUIET libbpf) + else() + message( + WARNING + "[${UPPER_PROJECT_NAME}] pkg-config is present but not executable; falling back to direct libbpf lookup" + ) + set(PkgConfig_FOUND FALSE) + endif() + endif() find_package(LLVM REQUIRED CONFIG COMPONENTS Clang) find_package(json-c REQUIRED) + find_package(OpenSSL REQUIRED) find_package(ZLIB REQUIRED) - find_package( - MPI REQUIRED - COMPONENTS CXX - QUIET - ) # all validator if(LIBBPF_VERSION VERSION_LESS "1.0.0") @@ -64,22 +74,28 @@ macro(include_dependencies) -lelf ) else() - message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] libbpf not found!") - endif() - - if(${yaml-cpp_FOUND}) - get_filename_component(YAML_CPP_INCLUDE_DIR "${YAML_CPP_INCLUDE_DIR}" ABSOLUTE) - include_directories(${YAML_CPP_INCLUDE_DIR}) - - 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) + find_path(LIBBPF_INCLUDEDIR bpf/libbpf.h) + find_library(LIBBPF_LIBRARY bpf) + find_library(LIBELF_LIBRARY elf) + if(LIBBPF_INCLUDEDIR + AND LIBBPF_LIBRARY + AND LIBELF_LIBRARY + ) + get_filename_component(LIBBPF_LIBRARY_DIRS "${LIBBPF_LIBRARY}" DIRECTORY) + include_directories(${LIBBPF_INCLUDEDIR}) + link_directories(${LIBBPF_LIBRARY_DIRS}) + list(APPEND DEPENDENCY_LIBRARY_DIRS ${LIBBPF_LIBRARY_DIRS}) + set(DEPENDENCY_LIB + ${DEPENDENCY_LIB} + -L${LIBBPF_LIBRARY_DIRS} + -lbpf + -lelf + ) + set(LIBBPF_FOUND TRUE) + set(LIBBPF_VERSION "unknown") + else() + message(FATAL_ERROR "[${UPPER_PROJECT_NAME}] libbpf not found!") 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) @@ -120,6 +136,13 @@ macro(include_dependencies) message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] json-c is needed for ${PROJECT_NAME} build") endif() + if(OpenSSL_FOUND) + include_directories(${OPENSSL_INCLUDE_DIR}) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} OpenSSL::Crypto) + else() + message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] OpenSSL is needed for ${PROJECT_NAME} build") + endif() + if(ZLIB_FOUND) include_directories(${ZLIB_INCLUDE_DIRS}) get_filename_component(ZLIB_LIBRARY_DIRS "${ZLIB_LIBRARIES}/../" ABSOLUTE) @@ -129,35 +152,6 @@ macro(include_dependencies) 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() - - 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") - endif() - list(APPEND DEPENDENCY_LIBRARY_DIRS ${DATACRUMBS_INSTALL_LIB_DIR}) list(REMOVE_DUPLICATES DEPENDENCY_LIBRARY_DIRS) @@ -166,10 +160,6 @@ macro(include_dependencies) 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}" @@ -182,10 +172,6 @@ macro(include_dependencies) 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( @@ -281,8 +267,6 @@ macro(derive_configurations) 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) @@ -294,7 +278,9 @@ macro(derive_configurations) set(DATACRUMBS_ENABLE 0) endif() - set(DATACRUMBS_PROJECT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + if(NOT DEFINED DATACRUMBS_PROJECT_PATH OR DATACRUMBS_PROJECT_PATH STREQUAL "") + set(DATACRUMBS_PROJECT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) + endif() # Detect system kernel version: major, minor, patch execute_process( @@ -343,17 +329,12 @@ macro(derive_configurations) "(${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_SCHEDULER_TYPE STREQUAL "NONE" + if(DATACRUMBS_SCHEDULER_JOBID_ENV_VAR STREQUAL "NONE" AND DATACRUMBS_SCHEDULER_TYPE STREQUAL + "NONE" ) message( FATAL_ERROR - "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_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" + "[${UPPER_PROJECT_NAME}] Incomplete scheduler configuration. Either use a predefined scheduler option by setting DATACRUMBS_SCHEDULER_TYPE, or set DATACRUMBS_SCHEDULER_JOBID_ENV_VAR" ) endif() @@ -367,36 +348,6 @@ macro(derive_configurations) endif() endif() - if(DATACRUMBS_SCHEDULER_NODES_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_NODES_CMD_OPT "-N") - endif() - endif() - - if(DATACRUMBS_SCHEDULER_PPN_CMD_OPT STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--ntasks-per-node") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--map-by ppr:") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_PPN_CMD_OPT "--tasks-per-node") - endif() - endif() - - if(DATACRUMBS_SCHEDULER_RUN_CMD STREQUAL "NONE") - if(DATACRUMBS_SCHEDULER_TYPE STREQUAL "SLURM") - set(DATACRUMBS_SCHEDULER_RUN_CMD "srun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "OPENMPI") - set(DATACRUMBS_SCHEDULER_RUN_CMD "mpirun") - elseif(DATACRUMBS_SCHEDULER_TYPE STREQUAL "FLUX") - set(DATACRUMBS_SCHEDULER_RUN_CMD "flux run") - endif() - endif() - endmacro(derive_configurations) macro(find_system_details) @@ -585,36 +536,58 @@ function(datacrumbs_composable_install_src public_src) 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." - ) + if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/bin + CACHE PATH "Single Directory for all Executables." + ) + endif() + if(NOT CMAKE_INCLUDE_OUTPUT_DIRECTORY) + set(CMAKE_INCLUDE_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/include + CACHE PATH "Store the headers." + ) + endif() + if(NOT CMAKE_CONFIG_OUTPUT_DIRECTORY) + set(CMAKE_CONFIG_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/configs + CACHE PATH "Store the configuration generated." + ) + endif() + if(NOT CMAKE_DATA_OUTPUT_DIRECTORY) + set(CMAKE_DATA_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/data + CACHE PATH "Store the data generated." + ) + endif() 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 CMAKE_LIBRARY_OUTPUT_DIRECTORY) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR} + CACHE PATH "Single Directory for all Libraries" + ) + endif() + if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY + ${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR} + CACHE PATH "Single Directory for all static libraries." + ) + endif() + if(NOT CMAKE_LIBEXEC_OUTPUT_DIRECTORY) + set(CMAKE_LIBEXEC_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/libexec/${PROJECT_NAME}) + endif() + if(NOT CMAKE_ETC_OUTPUT_DIRECTORY) + set(CMAKE_ETC_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}) + endif() + if(NOT CMAKE_MODULES_OUTPUT_DIRECTORY) + set(CMAKE_MODULES_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/modulefiles) + endif() + if(NOT CMAKE_FLUX_OUTPUT_DIRECTORY) + set(CMAKE_FLUX_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/flux) + endif() + if(NOT CMAKE_SYSTEMD_OUTPUT_DIRECTORY) + set(CMAKE_SYSTEMD_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/systemd) + endif() if(NOT DATACRUMBS_BUILD_ONLY) # Get installation directories -- these get used in various places; best to just make them diff --git a/cmake/run_system_configurator_if_missing.cmake b/cmake/run_system_configurator_if_missing.cmake new file mode 100644 index 00000000..8f2f2717 --- /dev/null +++ b/cmake/run_system_configurator_if_missing.cmake @@ -0,0 +1,33 @@ +if(NOT DEFINED DATACRUMBS_SYSTEM_PROBE_FILE) + message(FATAL_ERROR "DATACRUMBS_SYSTEM_PROBE_FILE is required") +endif() + +if(NOT DEFINED DATACRUMBS_PROBE_SECRET_FILE) + message(FATAL_ERROR "DATACRUMBS_PROBE_SECRET_FILE is required") +endif() + +if(NOT DEFINED DATACRUMBS_SYSTEM_CONFIGURATOR_BIN) + message(FATAL_ERROR "DATACRUMBS_SYSTEM_CONFIGURATOR_BIN is required") +endif() + +if(EXISTS "${DATACRUMBS_SYSTEM_PROBE_FILE}" AND EXISTS "${DATACRUMBS_PROBE_SECRET_FILE}") + message( + STATUS "Install-time system configuration and secret already exist; skipping configurator" + ) + return() +endif() + +if(EXISTS "${DATACRUMBS_SYSTEM_PROBE_FILE}") + message(STATUS "Install-time system configuration already exists; skipping configurator") + return() +endif() + +execute_process(COMMAND "${DATACRUMBS_SYSTEM_CONFIGURATOR_BIN}" RESULT_VARIABLE _dc_config_result) + +if(NOT + _dc_config_result + EQUAL + 0 +) + message(FATAL_ERROR "datacrumbs_system_configurator failed with exit code ${_dc_config_result}") +endif() diff --git a/docs/build.rst b/docs/build.rst old mode 100755 new mode 100644 index 13bab59a..4f514e37 --- a/docs/build.rst +++ b/docs/build.rst @@ -1,920 +1,131 @@ -================= +=================== Building DataCrumbs -================= +=================== -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. +This page describes the supported build flow after the `datacrumbs` and +`datacrumbs-utils` split. -Prerequisites -============= +What Gets Built Where +===================== -Before building, ensure all dependencies are installed as described in the :doc:`dependencies` section. +`datacrumbs` now owns: -Quick verification: +- the runtime executable +- the BPF object and skeleton +- install-time system configuration generation +- the trusted probe-signing service and its systemd unit +- the systemd unit and scheduler service scripts -.. 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 +`datacrumbs-utils` now owns: - # Verify bpftool - bpftool version +- `datacrumbs_probe_configurator` +- `libdatacrumbs_client.so` +- preload and patching wrappers +- test and tooling subdirectories -Core Requirements ------------------ +When you build `datacrumbs`, it bootstraps `datacrumbs-utils` with +`ExternalProject_Add` into the same install prefix. -**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: +Quick Start +=========== .. code-block:: bash git clone https://github.com/LLNL/datacrumbs.git cd datacrumbs - export DATACRUMBS_DIR=$(realpath .) - -Standard Build Process -====================== -Basic Build ------------ + cmake -S . -B build -DCMAKE_INSTALL_PREFIX=/path/to/install + cmake --build build -j$(nproc) + cmake --install build -The simplest build uses default configuration: +The `datacrumbs-utils` source checkout and build tree are placed under: -.. code-block:: bash - - # Create build directory - mkdir build - cd build - - # Configure with CMake - cmake -DCMAKE_INSTALL_PREFIX=/path/to/install .. - - # Build - make -j$(nproc) +- `build/_deps/datacrumbs-utils-src` +- `build/_deps/datacrumbs-utils-build` - # Install - make install +Its runtime, library, include, and config outputs are redirected into the main +`datacrumbs/build` tree so both projects share one build artifact layout. -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 +Important Configure Options =========================== -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 - -Build and Install Dependencies -------------------------------- - -The following dependencies are required for building DataCrumbs: - -**Runtime Dependencies:** - -* 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 - - git clone https://github.com/libbpf/bpftool.git - 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))) - if [[ "$bpf_install_dir" != "$PREFIX" ]]; then - mv $bpf_install_dir/include $PREFIX - 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 - - echo "libbpf.so:" - find $PREFIX -name libbpf.so - - echo "libbpf.pc:" - find $PREFIX -name libbpf.pc - - echo "bpftool:" - find $PREFIX -name bpftool - -Expected output (with PREFIX=/home/user/install): - -.. code-block:: text - - bpf.h: - /home/user/install/include/bpf/bpf.h - - libbpf.so: - /home/user/install/lib/libbpf.so - - 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. - -**4. Install Remaining Dependencies: json-c, yaml-cpp, llvm** - -**Recommended: Use Spack** - -.. code-block:: bash - - git clone https://github.com/spack/spack.git - . spack/share/spack/setup-env.sh - spack install json-c cppyaml llvm - -**If Spack is not available:** - -* **LLVM:** Install via your package manager - - - Fedora/RHEL: - .. code-block:: bash - - sudo dnf install llvm-devel - - - Ubuntu/Debian: - .. code-block:: bash +Common options include: - sudo apt-get install llvm-dev +- `DATACRUMBS_HOST` +- `DATACRUMBS_USER` +- `DATACRUMBS_INSTALL_USER` +- `DATACRUMBS_KERNEL_HEADERS_PATH` +- `DATACRUMBS_TRACE_ALL_PROCESSES_OPT` +- `DATACRUMBS_MAX_RUNTIME_FUNCTIONS` +- `DATACRUMBS_UTILS_GIT_REPOSITORY` +- `DATACRUMBS_UTILS_GIT_REF` -* **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 - mkdir build && cd build - cmake -DCMAKE_INSTALL_PREFIX=$PREFIX .. - make -j - make install -j - popd - -* **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 - mkdir build && cd build - cmake -DCMAKE_INSTALL_PREFIX=$PREFIX .. - make -j - make install -j - popd - -**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 - -**6. (Optional) BPFTime for Userspace Tracing** - -For experimental userspace eBPF support: - -.. 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 - -Configure BPFTime environment: - -.. code-block:: bash - - export BPFTIME_SHM_MEMORY_MB=10240 - export BPFTIME_MAX_FD_COUNT=128000 - -Build DataCrumbs with Custom Prefix ------------------------------------- - -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 - - cmake_args=( - -DCMAKE_PREFIX_PATH=$PREFIX - -DCMAKE_INSTALL_PREFIX=$PREFIX - -DBPFTOOL_EXECUTABLE=$PREFIX/sbin/bpftool - -DDATACRUMBS_HOST=$(hostname) - -DDATACRUMBS_USER=${USER} - ) - -If you want to use a custom host name or user, set them explicitly: - -.. code-block:: bash - - # cmake_args+=(-DDATACRUMBS_HOST=) - # cmake_args+=(-DDATACRUMBS_USER=) - -**3. Build and Install** - -.. code-block:: bash - - 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:** +Example: .. 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:** + cmake -S . -B build \ + -DCMAKE_INSTALL_PREFIX=/opt/datacrumbs-install \ + -DDATACRUMBS_HOST=lead2 \ + -DDATACRUMBS_USER=root \ + -DDATACRUMBS_INSTALL_USER=haridev -.. code-block:: bash +Install-Time System Configuration +================================= - cmake -DDATACRUMBS_LOG_LEVEL_STR=DEBUG \ - -DDATACRUMBS_BPF_PRINT_ENABLE=ON \ - .. +The system configurator moved from `datacrumbs-utils` into `datacrumbs`. -**Profiling mode with reduced overhead:** +During the `datacrumbs` build/install flow: -.. code-block:: bash +- `datacrumbs_system_configurator` is built from the `datacrumbs` tree +- it writes the install-time system configuration and probe secret if they are + missing +- it does not recreate them on every build - cmake -DDATACRUMBS_MODE_STR=PROFILE \ - -DDATACRUMBS_TIME_INTERVAL_NS=10000000 \ - -DDATACRUMBS_SKIP_SMALL_EVENTS_THRESHOLD_NS=10000 \ - .. +Generated files: -Important Notes ---------------- +- `/share/datacrumbs/data/system-probe--.json.gz` +- `/share/datacrumbs/data/.datacrumbs-probe-secret` -.. important:: - **DATACRUMBS_HOST Configuration File** +The secret is stored in `share/datacrumbs/data`, not under `etc`. +It is intended to be readable only by `root`. - A configuration file named ``.yaml`` **must exist** in ``etc/datacrumbs/configs/`` for the specified hostname. - This is the most common build error. You can: +Login-node signing service +========================== - - 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 +Probe generation now relies on a trusted signer service on the login node: -.. warning:: - **Performance Impact** +- executable: `/bin/datacrumbs_sign_probes` +- unit: `/etc/datacrumbs/systemd/datacrumbs_sign_probes.service` - - ``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 +That service runs as `root`, owns the secret, and signs probe +documents on behalf of `datacrumbs_probe_configurator`. +It only accepts requests from the installed `datacrumbs_probe_configurator_exec` +binary, and the HMAC covers the signed probe document metadata plus the +categories payload so post-sign tampering is detected. The configurator sends +only the canonical signing payload to the signer service and writes the final +probe document locally. -Docker Build +Dependencies ============ -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) -============================== +The `datacrumbs` runtime no longer depends on `yaml-cpp`. -Lima provides a Linux VM environment on macOS for eBPF development. +The major runtime dependencies are: -Initial Setup -------------- +- libbpf +- libelf +- zlib +- OpenSSL +- json-c -.. 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 +`datacrumbs-utils` still uses `yaml-cpp` for host YAML configuration handling. - # Clean BPF artifacts - make clean_all +Notes +===== - # Clean everything - make clean +- `composable` runtime components are no longer part of the active build. +- `datacrumbs_explorer`, `datacrumbs_generator`, and `datacrumbs_client` are no + longer built by `datacrumbs`. +- BPF changes are force-cleaned during the `datacrumbs` build to avoid stale + skeleton issues. diff --git a/docs/composability.rst b/docs/composability.rst old mode 100755 new mode 100644 index ff99c707..93916bfc --- a/docs/composability.rst +++ b/docs/composability.rst @@ -1,597 +1,225 @@ -=================== -Composability Guide -=================== +===================== +Composable Probe Sets +===================== -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. +DataCrumbs still supports composability, but the mechanism is different now. -Overview -======== +Users no longer build composable runtime binaries. Instead, they compose probe +sets in YAML, run `datacrumbs_probe_configurator`, and produce a signed +`probes.json.gz` file that `datacrumbs` loads at runtime. -During the build and installation process, DataCrumbs: +Composable flow +=============== -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 +The supported composition flow is: -This modular approach allows users to: +1. write or copy a probe YAML +2. define the probe categories you want in `capture_probes` +3. run `datacrumbs_probe_configurator` +4. run `datacrumbs` with the generated signed probes file -- 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 ----------------- +Example: .. code-block:: bash - # Start server with custom configuration - sudo datacrumbs_server_run.sh --composite-name hdf5_only + datacrumbs_probe_configurator \ + /etc/datacrumbs/configs/lead.yaml \ + /tmp/lead-probes.json.gz - # Run application (uses custom config) - datacrumbs_track --executable ./hdf5_app - ./hdf5_app + datacrumbs /tmp/lead-probes.json.gz 1 - # Stop server - sudo datacrumbs_server_stop.sh --composite-name hdf5_only +What the YAML does +================== -With Service Mode ------------------ +The YAML is now the composition surface. It tells the probe configurator which +probe groups to discover and include in the signed runtime file. -.. code-block:: bash +The main top-level field is: - # Set environment variable for service - export DATACRUMBS_COMPOSABLE_NAME=mpiio_only +- `capture_probes` - # Start service - sudo datacrumbs_service_run.sh +Each entry defines one logical probe group, for example: - # Applications will use the mpiio_only configuration +- a syscall set +- a kernel symbol set +- a userspace library symbol set +- a USDT provider +- a custom probe bundle -With Flux Integration ---------------------- +Minimal example +=============== -.. code-block:: bash +This is a small uprobe-based composition: - # Submit job with custom configuration - flux run --datacrumbs-enable --datacrumbs-composite=posix_hdf5 \ - -N 4 -n 32 ./parallel_app +.. code-block:: yaml - # Or with default configuration - flux run --datacrumbs-enable -N 4 -n 32 ./parallel_app + name: example + capture_probes: + - name: libc + probe: uprobe + type: binary + file: /usr/lib64/libc.so.6 + regex: (?!.*_)(?!.*cold).* -Command Reference: datacrumbs_compose -====================================== +That tells the probe configurator to: -**Synopsis:** +- inspect `libc.so.6` +- keep symbols matching the regex +- add them to the signed probes file under category `libc` -.. code-block:: bash +Common probe entry patterns +=========================== - datacrumbs_compose --action ACTION [OPTIONS] +Userspace binary uprobes +------------------------ -**Required Arguments:** +.. code-block:: yaml -``--action ACTION`` - Action to perform: + capture_probes: + - name: libc + probe: uprobe + type: binary + file: /usr/lib64/libc.so.6 + regex: "open.*|read.*|write.*" - - ``discover``: List all available probes - - ``compose``: Create a new composable configuration +Kernel probes +------------- -**Optional Arguments:** +Header-backed kernel probes: -``--name NAME`` - Name for the composable configuration (required for ``compose`` action) +.. code-block:: yaml - - Must contain only alphanumeric characters and underscores - - Will create binary: ``datacrumbs_`` + capture_probes: + - name: os_page_cache + probe: kprobe + type: header + file: /path/to/kernel/headers/include/linux/pagemap.h + enable_explorer: false -``--probes PROBES`` - Comma-separated list of probe names (required for ``compose`` action) +Syscalls +-------- - - No spaces between probe names - - Probe names must exist (use ``discover`` to list) +System call probe groups are defined as normal capture entries in the host YAML. +The configurator resolves syscall names and signatures into the runtime probes +file. -``--verbose`` - Enable verbose output +USDT probes +----------- -``--quiet`` - Suppress informational messages +.. code-block:: yaml -``--dry-run`` - Show what would be done without executing + capture_probes: + - name: python + probe: usdt + type: usdt + binary_path: /lib64/libpython3.6m.so.1.0 + provider: python -**Examples:** +Custom probes +------------- -.. code-block:: bash +Custom probe bundles can still be described in YAML for probe generation: - # Discover available probes - sudo datacrumbs_compose --action discover +.. code-block:: yaml - # Create simple configuration - sudo datacrumbs_compose --action compose \ - --name basic_io \ - --probes custom1,sys,os_page_cache + capture_probes: + - name: custom1 + probe: custom + type: custom + file: /path/to/custom.bpf.c + probes: /path/to/probes.json + process_header: /path/to/custom_process.h + event_type: 2 - # Create with verbose output - sudo datacrumbs_compose --action compose \ - --name debug_config \ - --probes custom1,sys,os_page_cache \ - --verbose +Custom probe plugin headers are currently scaffolded statically in the source +tree. The active default custom sys-io include remains commented out in the BPF +aggregator, so custom entries are part of probe generation, but not the default +runtime build path unless the site wires them in. - # Dry run to see what would happen - sudo datacrumbs_compose --action compose \ - --name test_config \ - --probes custom1 \ - --dry-run +How to create your own composition +================================== -Composable Binary Locations -============================ +The practical way to create a custom composition is: -Composable binaries are installed per-user: +1. start from an installed host YAML such as: -.. code-block:: text + - `/etc/datacrumbs/configs/docker.yaml` + - `/etc/datacrumbs/configs/lead.yaml` - /libexec/datacrumbs/sbin//datacrumbs_ +2. copy it to a site- or workload-specific file +3. remove probe groups you do not want +4. tighten regex filters for the ones you do want +5. run the probe configurator 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 + cp /etc/datacrumbs/configs/docker.yaml ./my-io.yaml -Managing Composables -==================== - -Listing Composables -------------------- - -List all composable configurations for the current user: +Edit `my-io.yaml`, then generate probes: .. code-block:: bash - ls $PREFIX/libexec/datacrumbs/sbin/$USER/ - -Removing Composables --------------------- + systemctl status datacrumbs_sign_probes.service + datacrumbs_probe_configurator ./my-io.yaml /tmp/my-io-probes.json.gz -Remove a composable configuration: +Then run: .. 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 -============================= + datacrumbs /tmp/my-io-probes.json.gz myrun -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 +Argument metadata +================= -Common Configuration Patterns -============================== +The probe configurator now also derives `function_arguments` metadata where +possible: -System Call Level ------------------ +- syscalls from headers +- uprobes from DWARF plus source parsing +- kprobes from BTF where available -Trace only low-level system calls: +That metadata is carried into the signed probes file and used by the generic +runtime capture path to populate `args:{...}` in output events. -.. 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 +Runtime limits +============== - Error: Probe object 'invalid_probe.o' not found. +Probe generation validates the total number of attachable runtime functions +against `DATACRUMBS_MAX_RUNTIME_FUNCTIONS`. -**Solution**: Run ``discover`` to see available probes: +If the selection is too large: -.. code-block:: bash +- the probe configurator warns near the limit +- the probe configurator fails when over the limit +- runtime also rejects oversized probe files before attach - sudo datacrumbs_compose --action discover +Invalid probe carry-forward +=========================== -Invalid Configuration Name --------------------------- +Runtime-discovered attach failures are stored in: .. 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 --------------- + /share/datacrumbs/data/probes-invalid--.json.gz -If composable build fails: +That invalid-probe database is reused so later runs do not keep retrying known +bad targets. -.. 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 +Migration note ============== -Programmatic Composition ------------------------- - -Create multiple configurations programmatically: - -.. code-block:: bash - - #!/bin/bash +If you still have scripts or notes referring to: - # 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 +- `datacrumbs_compose` +- `datacrumbs_compose_run` +- generated composable binaries - # 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 +replace them with: - # Submit Flux job with custom configuration - flux run --datacrumbs-enable \ - --datacrumbs-composite=workflow_trace \ - -N 8 -n 64 \ - ./parallel_workflow +- a YAML file +- `datacrumbs_probe_configurator` +- `datacrumbs_sign_probes.service` on the login node +- a signed `probes.json.gz` +- `datacrumbs [run-id]` diff --git a/docs/deployment.rst b/docs/deployment.rst old mode 100755 new mode 100644 index b9abca9b..c1b9a764 --- a/docs/deployment.rst +++ b/docs/deployment.rst @@ -1,595 +1,122 @@ -=================== +================== 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. +This page describes the supported deployment model after the runtime and utility +split. -Deployment Overview -=================== +Recommended deployment model +============================ -There are two primary deployment approaches: +The supported production path is scheduler-managed systemd service startup. -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 +At a high level: -.. list-table:: Deployment Method Comparison - :header-rows: 1 - :widths: 25 35 40 +1. install `datacrumbs` +2. let `datacrumbs` bootstrap and install `datacrumbs-utils` into the same + prefix +3. register `datacrumbs@.service` on compute nodes +4. register `datacrumbs_sign_probes.service` on login nodes +5. install Flux or SLURM prolog and epilog hooks +6. generate signed probe files with `datacrumbs_probe_configurator` +7. submit jobs with DataCrumbs metadata containing `probe_file` - * - 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 +Installed runtime assets ======================== -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 +Key files provided by the install: -Test Scheduler Integration ---------------------------- +- `/sbin/datacrumbs` +- `/etc/datacrumbs/systemd/datacrumbs@.service` +- `/etc/datacrumbs/systemd/datacrumbs_sign_probes.service` +- `/sbin/datacrumbs_service_run.sh` +- `/sbin/datacrumbs_service_stop.sh` +- `/share/datacrumbs/data/system-probe--.json.gz` +- `/share/datacrumbs/data/.datacrumbs-probe-secret` -.. 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: +Key utility assets installed into the same prefix: -.. code-block:: bash - - # View service status - sudo systemctl status datacrumbs@${USER} +- `/bin/datacrumbs_probe_configurator` +- `/bin/datacrumbs_wrap` +- `/bin/datacrumbs_track` +- `/bin/datacrumbs_untrack` +- `/bin/datacrumbs_salloc` +- `/bin/datacrumbs_sbatch` +- `/bin/datacrumbs_service_wrapper` - # View service logs - sudo journalctl -u datacrumbs@${USER} -f +Systemd deployment +================== -Check prolog/epilog execution: +Register the unit on each target node: .. 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** + sudo ln -sf /etc/datacrumbs/systemd/datacrumbs@.service \ + /etc/systemd/system/datacrumbs@.service + sudo systemctl daemon-reload -.. code-block:: bash +The unit: - # Check sudoers configuration - sudo visudo -c -f /etc/sudoers.d/datacrumbs +- runs `datacrumbs` in the foreground with `Type=simple` +- waits for readiness through a ready file +- logs to `${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVICE_RUN_ID}_$(hostname).log` +- stops with `SIGINT` +- does not auto-restart on failure - # Verify user is in allowed group - groups $USER +Login-node signing deployment +============================= -**Prolog/epilog scripts not executing** +Register the signer service on login nodes: .. code-block:: bash - # Flux: Check plugin configuration - flux config get job-manager.plugins + sudo ln -sf /etc/datacrumbs/systemd/datacrumbs_sign_probes.service \ + /etc/systemd/system/datacrumbs_sign_probes.service + sudo systemctl daemon-reload + sudo systemctl enable --now datacrumbs_sign_probes.service - # Slurm: Check slurm.conf - grep -i prolog /etc/slurm/slurm.conf +This service must be running before users call `datacrumbs_probe_configurator`. - # Verify script permissions - ls -la /etc/flux/system/prolog-job-manager.d/ - ls -la /etc/slurm/prolog.d/ +Flux and SLURM deployment +========================= -**Systemd service fails to start** +Use the scheduler-specific pages for the full configuration: -.. code-block:: bash +- :doc:`flux_integration` +- :doc:`slurm_integration` - # Check service status - sudo systemctl status datacrumbs@${USER} +Both schedulers now use the same core model: - # View detailed logs - sudo journalctl -xe -u datacrumbs@${USER} +- job metadata contains `probe_file` +- prolog starts `datacrumbs@.service` +- epilog stops `datacrumbs@.service` - # Verify service file - sudo systemctl cat datacrumbs@.service +Interactive and test deployment +=============================== -**Traces not being generated** +For testing outside a real scheduler: .. 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 + datacrumbs_service_wrapper start 1 /path/to/probes.json.gz + datacrumbs_service_wrapper stop 1 /path/to/probes.json.gz -Cleanup and Uninstallation -=========================== - -Remove sudoers configuration: +For direct single-node runs without systemd: .. code-block:: bash - sudo rm /etc/sudoers.d/datacrumbs - -Remove Flux integration: - -.. code-block:: bash + datacrumbs /path/to/probes.json.gz 1 + datacrumbs_wrap ./myapp - # 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 +What is no longer the deployment model +====================================== -Remove Slurm integration: +The following older approaches are no longer the supported deployment story: -.. code-block:: bash +- `sudo datacrumbs_server_run.sh` +- `sudo datacrumbs_server_stop.sh` +- composable runtime binaries +- explorer/generator-driven runtime composition - 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 +If a site still has wrappers around those paths, they should be migrated to the +systemd service plus signed probe file workflow. diff --git a/docs/flux_integration.rst b/docs/flux_integration.rst old mode 100755 new mode 100644 index d77a1b80..8d0fb5e2 --- a/docs/flux_integration.rst +++ b/docs/flux_integration.rst @@ -1,670 +1,84 @@ -============================ -Flux Scheduler Integration -============================ +======================== +Flux 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. +Flux integration is now based on job metadata carrying a signed probes file and +the `datacrumbs@.service` systemd unit. -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 +Current Flow ============ -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. +1. User generates a signed probes file. +2. User submits with: -Step 1: Enable Flux Prolog/Epilog ----------------------------------- + .. code-block:: bash -Edit the Flux job manager configuration file on the broker node: + flux run --datacrumbs-enable --datacrumbs-probe-file /path/to/probes.json.gz ... -.. code-block:: bash - - # On Flux broker-0 node - sudo vi /etc/flux/system/conf.d/job-manager.toml +3. The Flux plugin writes job metadata containing: -Add or ensure the following configuration: + .. code-block:: json -.. code-block:: toml + {"datacrumbs":{"enable":"yes","probe_file":"/path/to/probes.json.gz"}} - [job-manager] +4. Flux prolog runs `datacrumbs_service_run.sh`. +5. The script resolves the job id, user, and probe file, writes + `datacrumbs-.env`, and starts `datacrumbs@.service`. +6. The systemd unit waits until the ready file exists. +7. Flux epilog runs `datacrumbs_service_stop.sh`, which stops the service and + waits for it to exit. - # Enable prolog execution - prolog.command = [ - "/etc/flux/system/prolog-job-manager.d/*", - ] +Installed components +==================== - # Enable epilog execution - epilog.command = [ - "/etc/flux/system/epilog.d/*", - ] +- login node: + - `/etc/datacrumbs/systemd/datacrumbs_sign_probes.service` +- `/etc/datacrumbs/systemd/datacrumbs@.service` +- `/sbin/datacrumbs_service_run.sh` +- `/sbin/datacrumbs_service_stop.sh` +- `/etc/datacrumbs/flux/cli/plugins/datacrumbs.py` -Step 2: Install Systemd Service --------------------------------- +Login-node prerequisite +======================= -Install the DataCrumbs systemd service file on all compute nodes: - -**Service file location:** ``/etc/datacrumbs/systemd/datacrumbs@.service`` +Before users generate probe files for Flux jobs, the trusted signing service +must be running on the login node: .. 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 ln -sf /etc/datacrumbs/systemd/datacrumbs_sign_probes.service \ + /etc/systemd/system/datacrumbs_sign_probes.service sudo systemctl daemon-reload + sudo systemctl enable --now datacrumbs_sign_probes.service - # 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: +Deploying the unit +================== .. 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 ln -sf /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 +Plugin behavior =============== -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 +The Flux plugin now uses `probe_file`, not `composite`, as the runtime selector. -Service Won't Stop ------------------- +Expected CLI options: -**Symptom**: Epilog fails, service remains running +- `--datacrumbs-enable` +- `--datacrumbs-probe-file PATH` -**Cause**: Server process not responding +Testing without a real Flux prolog +================================== -**Solution**: +Use the installed service wrapper: .. 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 + datacrumbs_service_wrapper start 1 /path/to/probes.json.gz + datacrumbs_service_wrapper stop 1 /path/to/probes.json.gz - # In datacrumbs_service_run.sh - # Only trace for specific users - if [[ ! \" user1 user2 user3 \" =~ \" $FLUX_JOB_USER \" ]]; then - exit 0 # Skip tracing - fi +This fabricates the expected Flux metadata so the service-common path can be +tested without modifying the real prolog scripts. diff --git a/docs/index.rst b/docs/index.rst old mode 100755 new mode 100644 index 45ff42b3..cb03c78e --- a/docs/index.rst +++ b/docs/index.rst @@ -1,15 +1,17 @@ -.. 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. - =============================================================================== 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. +DataCrumbs is the runtime side of the DataCrumbs stack. It loads signed probe +descriptions, attaches generic BPF programs to runtime-selected functions, and +writes DFTracer output. + +The current split is: + +- `datacrumbs`: runtime daemon, BPF programs, system configuration generation, + and scheduler service integration +- `datacrumbs-utils`: probe builder, client library, wrappers, tests, and + developer tooling .. toctree:: :maxdepth: 2 @@ -21,29 +23,24 @@ analysis of application I/O behavior at scale. .. toctree:: :maxdepth: 2 - :caption: Building and Setup + :caption: Build and Operation build setup - -.. toctree:: - :maxdepth: 2 - :caption: User Guide - usage integration - composability + run .. toctree:: :maxdepth: 2 - :caption: Advanced Topics + :caption: Scheduler Integration flux_integration slurm_integration .. toctree:: :maxdepth: 2 - :caption: Legacy Documentation + :caption: Legacy Notes overview @@ -54,4 +51,3 @@ Indices and tables * :ref:`genindex` * :ref:`modindex` * :ref:`search` - diff --git a/docs/integration.rst b/docs/integration.rst old mode 100755 new mode 100644 index f4f6f72d..8cf54f96 --- a/docs/integration.rst +++ b/docs/integration.rst @@ -1,762 +1,79 @@ -========================= +======================= Application Integration -========================= +======================= -DataCrumbs provides multiple methods for integrating tracing into your applications without requiring source code modifications. +DataCrumbs integrates with applications through the client library provided by +`datacrumbs-utils`. -Integration Methods -=================== +Supported Integration Paths +=========================== -DataCrumbs supports three primary integration methods: +1. `datacrumbs_wrap` +2. `datacrumbs_track` +3. scheduler-managed service startup plus wrapped or tracked applications -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 +`datacrumbs_run` is no longer an automatic local wrapper around the daemon. It +is now a multi-node helper that starts `datacrumbs@.service` over SSH +on a node list. -.. 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. +datacrumbs_wrap +=============== -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:** +This is the simplest integration path: .. code-block:: bash - datacrumbs_track --executable PATH [OPTIONS] - -**Arguments:** - -``--executable PATH`` - Path to the executable to instrument (required) - -**Common Options:** + datacrumbs_wrap ./myapp arg1 arg2 -``--verbose`` - Enable detailed output showing each step of the tracking process +It prepends `libdatacrumbs_client.so` to `LD_PRELOAD` and then executes the +command. -``--quiet`` - Suppress informational messages +datacrumbs_track +================ -``--dry-run`` - Show what would be done without modifying the binary - -**Examples:** +For dynamic ELF executables you want to instrument persistently: .. 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 +This adds `libdatacrumbs_client.so` to the binary's dependency list. The +application can still run normally when DataCrumbs is not active. -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:** +Undo the patch with: .. 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 +Scheduler-managed service flow ============================== -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 +On Flux and SLURM systems, the normal production path is: -Rebuild DataCrumbs after configuration changes. +1. generate a signed probes file +2. submit a job with DataCrumbs metadata containing `probe_file` +3. prolog starts `datacrumbs@.service` +4. application runs through the client library +5. epilog stops the service -Pattern 2: Multi-Stage Pipeline Tracing ----------------------------------------- - -Trace complex pipelines with multiple stages: +Testing the service flow without a real prolog is possible through: .. 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 + datacrumbs_service_wrapper start + datacrumbs_service_wrapper stop -Pattern 3: Mixed Integration ------------------------------ +Multi-node service control +========================== -Combine different methods for different components: +Use `datacrumbs_run` and `datacrumbs_stop` when you want to start or stop the +systemd service on a list of nodes directly: .. 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 + datacrumbs_run --node-list "node[1-4]" --probe-file /tmp/probes.json.gz --run-id myrun + datacrumbs_stop --node-list "node[1-4]" --run-id myrun - # All three stages traced - sudo datacrumbs_server_stop.sh +These commands do not generate probes themselves and do not wrap the workload. +They only coordinate service lifecycle across nodes. diff --git a/docs/run.rst b/docs/run.rst old mode 100755 new mode 100644 index a39d934f..02f1cf03 --- a/docs/run.rst +++ b/docs/run.rst @@ -1,364 +1,94 @@ -=============== +================== Running DataCrumbs -=============== +================== -This guide describes how to run DataCrumbs tests and trace applications, including examples with IOR benchmarking. +This page shows the supported runtime flow after probe generation. -Basic Test Execution -==================== - -Running Tests with CTest ------------------------- - -1. **Navigate to the build directory:** - - .. code-block:: bash - - cd $DATACRUMBS_DIR/build - -2. **List all available tests:** - - .. code-block:: bash - - ctest -N - -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. - -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. - -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. - -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 +Single-node direct run +====================== -**Example 2: Read Performance Test** +Start DataCrumbs directly: .. 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 + sudo datacrumbs /path/to/probes.json.gz 1 -**Example 3: Collective I/O Test** +Then run an application through the client library: .. 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. + datacrumbs_wrap dd if=/dev/zero of=/tmp/out.bin bs=1M count=16 status=none -**Example 4: Random I/O Test** +Stop the runtime with `Ctrl-C` or: .. 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 + kill -INT -The ``-z`` flag enables random I/O instead of sequential. +Systemd-managed run +=================== -**Example 5: Shared File Test** +When using the installed `datacrumbs@.service`, first write the per-run +environment file through the scheduler service scripts or the test wrapper, then +start the unit: .. 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 + systemctl start datacrumbs@1.service -Without the ``-F`` flag, all processes use a single shared file. +Logs for the service go to: -Analyzing IOR Traces --------------------- - -After running IOR with DataCrumbs, analyze the generated traces: - -.. code-block:: bash +.. code-block:: text - # 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) + ${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVICE_RUN_ID}_$(hostname).log -**Using DFTracer Utilities**: +Use standard systemd tools for debugging: .. 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/ + systemctl status datacrumbs@1.service + journalctl -u datacrumbs@1.service -**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 +Testing and smoke runs ====================== -Trace and Log Directory Configuration --------------------------------------- - -**Trace Directory** (Administrator Only): +The active utility smoke test in `datacrumbs-utils` runs `dd` through +`datacrumbs_wrap`. -The trace directory is configured by the system administrator during installation and **cannot be changed by users at runtime**. +Example: .. 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% + ctest --test-dir --output-on-failure -R datacrumbs_utils_dd_preload -**Log Directory**: +IOR example +=========== -Log directory may be configurable depending on administrator settings: +Generate a probes file that includes the workload you care about, start the +runtime, and then launch IOR through the client library. .. 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 ------------------------ + sudo datacrumbs /tmp/ior-probes.json.gz ior-test + datacrumbs_wrap ior -a POSIX -b 1m -t 256k -s 16 -F -**Administrator Configuration Only** +Scheduler examples +================== -Path filtering must be configured at build time by the system administrator: +Flux: .. 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 -=============== + flux run --datacrumbs-enable --datacrumbs-probe-file /tmp/probes.json.gz -N 2 -n 4 ./myapp -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: +SLURM interactive allocation: .. 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" + datacrumbs_salloc --datacrumbs-enable --datacrumbs-probe-file /tmp/probes.json.gz -N 2 -Performance Impact ------------------- - -To reduce tracing overhead: +SLURM batch: .. 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 + datacrumbs_sbatch --datacrumbs-enable --datacrumbs-probe-file /tmp/probes.json.gz job.sh diff --git a/docs/setup.rst b/docs/setup.rst old mode 100755 new mode 100644 index 9dad8442..2a7b4b93 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -1,1551 +1,125 @@ -==================== -Environment Setup -==================== +================= +Runtime Setup +================= -After building and installing DataCrumbs, you need to set up your environment to use the tools. +This page covers the runtime layout that `datacrumbs` expects after install. -Setup Script Overview -===================== - -DataCrumbs provides a ``datacrumbs_setup`` script that configures the environment for running tracing sessions. +Environment and Module Setup +============================ -Basic Setup -=========== +The user-facing setup helpers now live in `datacrumbs-utils`, but they are +installed into the shared DataCrumbs prefix. -Source the setup script to configure your environment: +Typical setup: .. code-block:: bash - # If using environment modules - module use /path/to/install/etc/datacrumbs/modulefiles + module use /etc/datacrumbs/lmod/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. +or: .. code-block:: bash - datacrumbs_compose_run --composite-name myconfig + source /bin/datacrumbs_setup -Server Management ------------------ +Important Runtime Inputs +======================== -``datacrumbs_stop`` -^^^^^^^^^^^^^^^^^^^ +At runtime, `datacrumbs` needs: -Stop the DataCrumbs server (requires sudo). +- a signed probes file passed on the command line +- the installed system configuration file +- the installed probe secret -.. code-block:: bash - - datacrumbs_stop +Those installed files are: -``datacrumbs_compose`` -^^^^^^^^^^^^^^^^^^^^^^ +- `/share/datacrumbs/data/system-probe--.json.gz` +- `/share/datacrumbs/data/.datacrumbs-probe-secret` -Manage composable configurations (requires sudo). - -.. code-block:: bash +On login nodes, probe generation also depends on: - sudo datacrumbs_compose --action discover +- `/etc/datacrumbs/systemd/datacrumbs_sign_probes.service` -Utility Commands ----------------- - -``datacrumbs_wrap`` -^^^^^^^^^^^^^^^^^^^ +Direct Runtime Invocation +========================= -Run a command with LD_PRELOAD-based tracing (requires sudo). +The current runtime interface is: .. code-block:: bash - datacrumbs_wrap myapp arg1 arg2 + datacrumbs [run-id] -``datacrumbs_create_log_dir`` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +If `run-id` is omitted, DataCrumbs resolves it in this order: -Create date-based log directory structure. +1. explicit CLI argument +2. environment variable named by `DATACRUMBS_JOB_ID_VAR` +3. generated timestamp -.. code-block:: bash - - datacrumbs_create_log_dir - -Configuration Files +Trace and Run 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 --------------- +Runtime configuration derives and manages: -All data files are stored in: ``/etc/datacrumbs/data/`` +- trace directory from `DATACRUMBS_TRACE_DIR_PATTERN` +- run-id file from `DATACRUMBS_SERVER_RUN_ID_FILE` +- ready file from `DATACRUMBS_SERVER_RUN_DIR` -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**: +The ready file is: .. 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 + /datacrumbs-.ready -**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 +It is written once the daemon reaches the ready point and removed on shutdown. Resource Limits =============== -DataCrumbs automatically configures system resource limits for optimal eBPF operation: - -File Descriptors ----------------- +During startup, `datacrumbs` raises these soft limits to their hard limits on a +best-effort basis: -.. 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 +- `RLIMIT_NOFILE` +- `RLIMIT_AS` +- `RLIMIT_MEMLOCK` - # 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 +Service Logs ============ -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 ---------------- +When launched through `datacrumbs@.service`, stdout and stderr are +redirected to: -.. 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:: text -.. code-block:: bash + ${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVICE_RUN_ID}_$(hostname).log - # Verify module path - module use /path/to/install/etc/datacrumbs/modulefiles +Runtime-Detected Invalid Probes +=============================== - # List available modules - module avail datacrumbs +Failed runtime attach targets are recorded to a compressed invalid-probe +database: -Resource Limit Errors ---------------------- +.. code-block:: text -.. code-block:: bash + /share/datacrumbs/data/probes-invalid--.json.gz - # Check current limits - ulimit -a +This file is written with mode `0400` and owned by `root`. - # Increase if needed (as root) - sudo pam_limits.so +Probe signing service +===================== -Configuration File Errors -------------------------- +`datacrumbs_probe_configurator` no longer signs probe files directly with a +shared user-readable secret. Instead, it connects to the trusted login-node +signer service: .. code-block:: bash - # Verify configuration files exist - ls $PREFIX/etc/datacrumbs/configs/ + sudo ln -sf /etc/datacrumbs/systemd/datacrumbs_sign_probes.service \ + /etc/systemd/system/datacrumbs_sign_probes.service + sudo systemctl daemon-reload + sudo systemctl enable --now datacrumbs_sign_probes.service - # Check YAML syntax - python3 -c "import yaml; yaml.safe_load(open('config.yaml'))" +That service runs as `root`. +It only accepts local requests from the installed +`datacrumbs_probe_configurator_exec` binary. +Subsequent runs use it to skip known invalid targets before attach. diff --git a/docs/slurm_integration.rst b/docs/slurm_integration.rst index 19b61497..a4be44e6 100644 --- a/docs/slurm_integration.rst +++ b/docs/slurm_integration.rst @@ -1,911 +1,84 @@ -============================ -SLURM Scheduler Integration -============================ +======================== +SLURM 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. +SLURM integration uses the same systemd service model as Flux, with job metadata +stored in the SLURM comment field. -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 +Current Flow ============ -When a SLURM job is submitted with ``datacrumbs_salloc --datacrumbs-enable ``, the following sequence occurs: +1. User generates a signed probes file. +2. User submits through `datacrumbs_salloc` or `datacrumbs_sbatch`: -1. **Job Submission Phase**: + .. code-block:: bash - - 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 + datacrumbs_salloc --datacrumbs-enable --datacrumbs-probe-file /path/to/probes.json.gz -N 2 + datacrumbs_sbatch --datacrumbs-enable --datacrumbs-probe-file /path/to/probes.json.gz job.sh -2. **Prolog Phase** (before job starts): +3. The wrapper injects JSON into `--comment`: - - ``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 + .. code-block:: json -3. **Execution Phase**: + {"datacrumbs":{"enable":"yes","probe_file":"/path/to/probes.json.gz"}} - - Application runs normally with tracing active - - eBPF probes capture I/O events - - Events are written to trace files +4. SLURM prolog runs `datacrumbs_service_run.sh`. +5. The script parses the SLURM comment, validates that the probe file is + readable by the submitting user, writes `datacrumbs-.env`, and starts + `datacrumbs@.service`. +6. SLURM epilog runs `datacrumbs_service_stop.sh`, which stops the service and + waits for it to exit. -4. **Epilog Phase** (after job completes): +Installed components +==================== - - ``datacrumbs_service_stop.sh`` is executed - - Systemd service is stopped and disabled - - Server flushes remaining events - - Trace files are finalized +- login node: + - `/etc/datacrumbs/systemd/datacrumbs_sign_probes.service` +- `/etc/datacrumbs/systemd/datacrumbs@.service` +- `/sbin/datacrumbs_service_run.sh` +- `/sbin/datacrumbs_service_stop.sh` +- `/bin/datacrumbs_salloc` +- `/bin/datacrumbs_sbatch` -Installation Steps -================== - -.. note:: - Installation requires root/administrator privileges on all compute nodes. - -Step 1: Enable SLURM Prolog/Epilog ------------------------------------ +Login-node prerequisite +======================= -Edit the SLURM configuration file on the controller node: +Before users generate probe files for SLURM jobs, the trusted signing service +must be running on the login 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 ln -sf /etc/datacrumbs/systemd/datacrumbs_sign_probes.service \ + /etc/systemd/system/datacrumbs_sign_probes.service sudo systemctl daemon-reload + sudo systemctl enable --now datacrumbs_sign_probes.service - # 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: +Deploying the unit +================== .. 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 ln -sf /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 +Notes ===== -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 +- The service scripts now support only `FLUX` and `SLURM`. Any other scheduler + type is treated as an error. +- The job metadata must contain `probe_file`. The legacy `probes` key is no + longer used. - # Multi-node allocation - datacrumbs_salloc --datacrumbs-enable -N 4 -n 32 +Testing without a real SLURM prolog +=================================== - # 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: +Use the installed service wrapper: .. 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 + datacrumbs_service_wrapper start 1 /path/to/probes.json.gz + datacrumbs_service_wrapper stop 1 /path/to/probes.json.gz -For additional support or questions about SLURM integration, consult your system administrator or refer to the DataCrumbs GitHub repository. +This fabricates the expected SLURM metadata and exercises the same +service-common path used by the real prolog and epilog scripts. diff --git a/docs/usage.rst b/docs/usage.rst old mode 100755 new mode 100644 index b9e986dd..51f5e722 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -1,832 +1,115 @@ -================= +=============== 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: +Supported usage now centers on three pieces: -.. code-block:: bash +- generate a signed probes file with `datacrumbs_probe_configurator` +- start `datacrumbs` directly or through `datacrumbs@.service` +- launch workloads through `datacrumbs_wrap` or tracked binaries - # 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 +Quick Start =========== -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:** +1. Generate probes: .. code-block:: bash - datacrumbs_run --app "COMMAND" [OPTIONS] - -**Required Arguments:** - -``--app "COMMAND"`` - Application command with arguments (quoted) - -**Optional Arguments:** + # login-node prerequisite + systemctl status datacrumbs_sign_probes.service -``--enable_mpi`` - Enable MPI support (default: disabled) + datacrumbs_probe_configurator \ + /etc/datacrumbs/configs/.yaml \ + /tmp/probes.json.gz -``--nodes N`` - Number of nodes for MPI execution (default: 1) - -``--ppn N`` - Processes per node for MPI execution (default: 1) - -**Examples:** +2. Start DataCrumbs: .. 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 + sudo datacrumbs /tmp/probes.json.gz myrun -**Log Files**: - -Logs are saved to ``$DATACRUMBS_LOG_DIR``: +3. Run an application through the client library: .. 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. + datacrumbs_wrap dd if=/dev/zero of=/tmp/out.bin bs=1M count=1 status=none -**Prerequisites**: Applications must be instrumented before the server can trace them. +Direct Runtime Mode +=================== -Starting the Server -------------------- +The supported CLI is: .. 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 + datacrumbs [run-id] -Starting with Composable Configuration -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Example: .. code-block:: bash - sudo datacrumbs_server_run.sh --composite-name myconfig + sudo datacrumbs /home/user/lead-probes.json.gz 1 -Instrumenting Applications --------------------------- +The output trace path is derived from the installed system configuration and the +active run id. -**Before** running the server, instrument your applications: +Because the probe-signing secret is root-owned and used again for runtime +verification, direct CLI execution is now a root-only path. Normal multi-user +deployments should prefer `datacrumbs@.service`. -.. 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 +Application Integration Modes +============================= -Running Applications +Tracked ELF binaries -------------------- -With the server running and applications instrumented: +Use `datacrumbs_track` to patch a dynamic executable so +`libdatacrumbs_client.so` is loaded automatically: .. code-block:: bash - # Run tracked binary + datacrumbs_track --executable ./myapp ./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 ------------------------- +Remove the patch with: .. 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 + datacrumbs_untrack --executable ./myapp -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 +LD_PRELOAD wrapping ------------------- -.. 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 -------------- +Use `datacrumbs_wrap` for ad hoc execution: .. 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 + datacrumbs_wrap ./myapp arg1 arg2 -Missing Events --------------- +`datacrumbs_wrap` is also the normal path for simple smoke tests and container +checks. -.. code-block:: bash +Systemd service mode +==================== - # 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 ----------------------------------- +The runtime is designed to work cleanly under: .. 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 + systemctl start datacrumbs@.service + systemctl stop datacrumbs@.service -Example 2: Trace MPI-IO Application ------------------------------------- +The unit waits for readiness through the ready file and stop does not return +until the unit becomes inactive. -.. code-block:: bash +Scheduler metadata +================== - # 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 +Flux and SLURM now pass only one DataCrumbs-specific runtime input in their job +metadata: -Example 3: Long-Running Server -------------------------------- +.. code-block:: json -.. 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 + {"datacrumbs":{"enable":"yes","probe_file":"/path/to/probes.json.gz"}} - # 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 +The legacy `composite` and `probes` metadata fields are no longer part of the +supported flow. diff --git a/etc/datacrumbs/configs/corona.yaml b/etc/datacrumbs/configs/corona.yaml deleted file mode 100755 index c0bfd5b4..00000000 --- a/etc/datacrumbs/configs/corona.yaml +++ /dev/null @@ -1,6 +0,0 @@ -capture_probes: - - name: sys - probe: syscalls - type: header - file: /usr/src/kernels/@DATACRUMBS_KERNEL_UNAME_R@/include/linux/syscalls.h - regex: sys_.* \ No newline at end of file diff --git a/etc/datacrumbs/configs/docker-toss.yaml b/etc/datacrumbs/configs/docker-toss.yaml deleted file mode 100755 index 2cfbf79c..00000000 --- a/etc/datacrumbs/configs/docker-toss.yaml +++ /dev/null @@ -1,31 +0,0 @@ -capture_probes: - - name: custom1 - start_event_id: 100000 - probe: custom - type: custom - file: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c - probes: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/probes.json - process_header: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h - event_type: 2 - - name: libc - probe: uprobe - type: binary - file: @DATACRUMBS_LIBC_SO@ - regex: .*fork.* - - name: python - probe: usdt - type: usdt - binary_path: /lib64/libpython3.6m.so.1.0 - provider: python - - name: os_page_cache - probe: kprobe - type: header - file: /usr/src/kernels/@DATACRUMBS_KERNEL_UNAME_R@/include/linux/pagemap.h - - name: shm - probe: kprobe - type: header - file: /usr/src/kernels/@DATACRUMBS_KERNEL_UNAME_R@/include/linux/shmem_fs.h - - name: iomap - probe: kprobe - type: ksym - regex: ^iomap(?!.*cold).* \ No newline at end of file diff --git a/etc/datacrumbs/configs/docker.yaml b/etc/datacrumbs/configs/docker.yaml deleted file mode 100755 index 3ff6db14..00000000 --- a/etc/datacrumbs/configs/docker.yaml +++ /dev/null @@ -1,24 +0,0 @@ -capture_probes: - - name: custom1 - start_event_id: 100000 - probe: custom - type: custom - file: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c - probes: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/probes.json - process_header: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h - event_type: 2 - - name: libc - probe: uprobe - type: binary - file: @DATACRUMBS_LIBC_SO@ - regex: .*fork.* - - name: python - probe: usdt - type: usdt - binary_path: /lib64/libpython3.6m.so.1.0 - provider: python - - name: os_page_cache - probe: kprobe - type: header - file: @DATACRUMBS_KERNEL_HEADERS_PATH@/include/linux/pagemap.h - enable_explorer: false \ No newline at end of file diff --git a/etc/datacrumbs/configs/ebpf.yaml b/etc/datacrumbs/configs/ebpf.yaml deleted file mode 100755 index 8cdff5ed..00000000 --- a/etc/datacrumbs/configs/ebpf.yaml +++ /dev/null @@ -1,9 +0,0 @@ -capture_probes: - - name: custom1 - start_event_id: 100000 - probe: custom - type: custom - file: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c - probes: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/probes.json - process_header: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h - event_type: 2 \ No newline at end of file diff --git a/etc/datacrumbs/configs/hdf.yaml b/etc/datacrumbs/configs/hdf.yaml deleted file mode 100644 index a19a34c9..00000000 --- a/etc/datacrumbs/configs/hdf.yaml +++ /dev/null @@ -1,61 +0,0 @@ -capture_probes: - - name: vol - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5VL.* - - name: h5ac - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5AC.* - - name: h5a - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5A(?!C).* - - name: h5b - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5B.* - - name: h5d - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5D.* - - name: h5f - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5F.* - # - name: h5general - # probe: uprobe - # type: binary - # file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - # regex: H5_.* - # - name: h5i - # probe: uprobe - # type: binary - # file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - # regex: H5I.* - - name: h5t - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5T.* - - name: h5s - probe: uprobe - type: binary - file: /home/haridev/spack/opt/spack/linux-haswell/hdf5-1.14.5-ul6ejhuh527dwwbgwi3ij6soj2pikw2u/lib/libhdf5.so - regex: H5S.* - # - name: mpi - # probe: uprobe - # type: binary - # file: /usr/lib/x86_64-linux-gnu/libmpi.so.40 - # regex: .* - # - name: h5bench - # probe: uprobe - # type: binary - # file: /home/cc/apps/h5bench/bin/h5bench_write - # regex: ^(?!__).* \ No newline at end of file diff --git a/etc/datacrumbs/configs/lead-us.yaml b/etc/datacrumbs/configs/lead-us.yaml deleted file mode 100755 index cc8db22d..00000000 --- a/etc/datacrumbs/configs/lead-us.yaml +++ /dev/null @@ -1,6 +0,0 @@ -capture_probes: - - name: libc - probe: uprobe - type: binary - file: @DATACRUMBS_LIBC_SO@ - regex: (?!.*_)(?!.*cold)(?!.*time)(?!.*grant)(?!.*poll)(?!.*signal)(?!.*harm)(?!.*hasm).* \ No newline at end of file diff --git a/etc/datacrumbs/configs/lead.yaml b/etc/datacrumbs/configs/lead.yaml deleted file mode 100755 index 16c5f971..00000000 --- a/etc/datacrumbs/configs/lead.yaml +++ /dev/null @@ -1,61 +0,0 @@ -capture_probes: - - name: custom1 - start_event_id: 100000 - probe: custom - type: custom - file: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c - probes: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/probes.json - process_header: @DATACRUMBS_PROJECT_PATH@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h - event_type: 2 - - name: sys - probe: syscalls - type: header - file: /usr/src/kernels/@DATACRUMBS_KERNEL_UNAME_R@/include/linux/syscalls.h - regex: sys_.* - - name: os_page_cache - probe: kprobe - type: header - file: /usr/src/kernels/@DATACRUMBS_KERNEL_UNAME_R@/include/linux/pagemap.h - - name: lustre - probe: kprobe - type: binary - file: /usr/lib/modules/5.14.0-570.55.1.1toss.t5.x86_64/weak-updates/lustre/fs/lustre.ko - 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 - regex: .* - - name: ior - probe: uprobe - type: binary - file: /home/haridev/software/ior/install/bin/ior - 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 deleted file mode 100644 index b68d6a0f..00000000 --- a/etc/datacrumbs/configs/project.env.local.in +++ /dev/null @@ -1,93 +0,0 @@ -# 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@ -readonly DATACRUMBS_INSTALL_USER -export DATACRUMBS_INSTALL_PREFIX=@CMAKE_INSTALL_PREFIX@ -readonly DATACRUMBS_INSTALL_PREFIX -export DATACRUMBS_INSTALL_BIN_DIR=${DATACRUMBS_INSTALL_PREFIX}/@CMAKE_INSTALL_BINDIR@ -readonly DATACRUMBS_INSTALL_BIN_DIR -export DATACRUMBS_INSTALL_SBIN_DIR=${DATACRUMBS_INSTALL_PREFIX}/@CMAKE_INSTALL_SBINDIR@ -readonly DATACRUMBS_INSTALL_SBIN_DIR -export DATACRUMBS_INSTALL_LIB_DIR=${DATACRUMBS_INSTALL_PREFIX}/@CMAKE_INSTALL_LIBDIR@ -readonly DATACRUMBS_INSTALL_LIB_DIR -export DATACRUMBS_INSTALL_LIBEXEC_DIR=${DATACRUMBS_INSTALL_PREFIX}/@CMAKE_INSTALL_LIBEXECDIR@/@PROJECT_NAME@ -readonly DATACRUMBS_INSTALL_LIBEXEC_DIR -export DATACRUMBS_INSTALL_ETC_DIR=${DATACRUMBS_INSTALL_PREFIX}/@CMAKE_INSTALL_SYSCONFDIR@/@PROJECT_NAME@ -readonly DATACRUMBS_INSTALL_ETC_DIR -export DATACRUMBS_INSTALL_CONFIGS_DIR=${DATACRUMBS_INSTALL_ETC_DIR}/@CMAKE_INSTALL_CONFIGS_DIR@ -readonly DATACRUMBS_INSTALL_CONFIGS_DIR -export DATACRUMBS_INSTALL_DATA_DIR=${DATACRUMBS_INSTALL_ETC_DIR}/@CMAKE_INSTALL_DATA_DIR@ -readonly DATACRUMBS_INSTALL_DATA_DIR -export DATACRUMBS_INSTALL_MODULES_DIR=${DATACRUMBS_INSTALL_ETC_DIR}/@CMAKE_INSTALL_MODULES_DIR@ -readonly DATACRUMBS_INSTALL_MODULES_DIR -export DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR=${DATACRUMBS_INSTALL_LIBEXEC_DIR}/objects -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 - -# Job -export DATACRUMBS_JOB_SCHEDULER=@DATACRUMBS_SCHEDULER_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_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_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 - -# 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/configs/quokka.yaml b/etc/datacrumbs/configs/quokka.yaml deleted file mode 100755 index c0bfd5b4..00000000 --- a/etc/datacrumbs/configs/quokka.yaml +++ /dev/null @@ -1,6 +0,0 @@ -capture_probes: - - name: sys - probe: syscalls - type: header - file: /usr/src/kernels/@DATACRUMBS_KERNEL_UNAME_R@/include/linux/syscalls.h - regex: sys_.* \ No newline at end of file diff --git a/etc/datacrumbs/configs/tuolumne-mpiio.yaml b/etc/datacrumbs/configs/tuolumne-mpiio.yaml deleted file mode 100755 index 58648e02..00000000 --- a/etc/datacrumbs/configs/tuolumne-mpiio.yaml +++ /dev/null @@ -1,16 +0,0 @@ -capture_probes: - - name: mpi-api - probe: uprobe - type: binary - file: /opt/cray/pe/lib64/libmpi_cray.so.12 - regex: PMPI.* - - name: mpii - probe: uprobe - type: binary - file: /opt/cray/pe/lib64/libmpi_cray.so.12 - regex: MPII.* - - name: mpi-rest - probe: uprobe - type: binary - file: /opt/cray/pe/lib64/libmpi_cray.so.12 - regex: .* \ No newline at end of file diff --git a/etc/datacrumbs/configs/tuolumne.yaml b/etc/datacrumbs/configs/tuolumne.yaml deleted file mode 100755 index cc8db22d..00000000 --- a/etc/datacrumbs/configs/tuolumne.yaml +++ /dev/null @@ -1,6 +0,0 @@ -capture_probes: - - name: libc - probe: uprobe - type: binary - file: @DATACRUMBS_LIBC_SO@ - regex: (?!.*_)(?!.*cold)(?!.*time)(?!.*grant)(?!.*poll)(?!.*signal)(?!.*harm)(?!.*hasm).* \ No newline at end of file diff --git a/etc/datacrumbs/data/.gitattributes b/etc/datacrumbs/data/.gitattributes deleted file mode 100644 index 445a0650..00000000 --- a/etc/datacrumbs/data/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -*.json filter=lineignore -*.pfw filter=lineignore -*.pfw.gz filter=lineignore \ No newline at end of file diff --git a/etc/datacrumbs/data/categories-cc-ebpf.json b/etc/datacrumbs/data/categories-cc-ebpf.json deleted file mode 100644 index 55bbaf7a..00000000 --- a/etc/datacrumbs/data/categories-cc-ebpf.json +++ /dev/null @@ -1 +0,0 @@ -{"100020":{"probe_name":"custom1","function_name":"openat2"},"100019":{"probe_name":"custom1","function_name":"open"},"100018":{"probe_name":"custom1","function_name":"writev"},"100017":{"probe_name":"custom1","function_name":"readv"},"100016":{"probe_name":"custom1","function_name":"readahead"},"100015":{"probe_name":"custom1","function_name":"pwritev2"},"100014":{"probe_name":"custom1","function_name":"pwritev"},"100013":{"probe_name":"custom1","function_name":"pwrite64"},"100012":{"probe_name":"custom1","function_name":"preadv2"},"0":{"probe_name":"M","function_name":"SH"},"100009":{"probe_name":"custom1","function_name":"lseek"},"100000":{"probe_name":"custom1","function_name":"openat"},"100001":{"probe_name":"custom1","function_name":"read"},"100002":{"probe_name":"custom1","function_name":"write"},"100003":{"probe_name":"custom1","function_name":"close"},"100004":{"probe_name":"custom1","function_name":"fallocate"},"100005":{"probe_name":"custom1","function_name":"fdatasync"},"100006":{"probe_name":"custom1","function_name":"flock"},"100007":{"probe_name":"custom1","function_name":"fsync"},"100008":{"probe_name":"custom1","function_name":"ftruncate"},"100010":{"probe_name":"custom1","function_name":"pread64"},"100011":{"probe_name":"custom1","function_name":"preadv"}} diff --git a/etc/datacrumbs/data/categories-dhari-quokka.json b/etc/datacrumbs/data/categories-dhari-quokka.json deleted file mode 100644 index f6b497b1..00000000 --- a/etc/datacrumbs/data/categories-dhari-quokka.json +++ /dev/null @@ -1 +0,0 @@ -{"1125":{"probe_name":"sys","function_name":"writev"},"1124":{"probe_name":"sys","function_name":"write"},"1055":{"probe_name":"sys","function_name":"llistxattr"},"1054":{"probe_name":"sys","function_name":"listxattr"},"1053":{"probe_name":"sys","function_name":"linkat"},"1052":{"probe_name":"sys","function_name":"link"},"1051":{"probe_name":"sys","function_name":"lgetxattr"},"1050":{"probe_name":"sys","function_name":"io_uring_setup"},"1049":{"probe_name":"sys","function_name":"io_uring_register"},"1048":{"probe_name":"sys","function_name":"io_uring_enter"},"1047":{"probe_name":"sys","function_name":"io_submit"},"1046":{"probe_name":"sys","function_name":"io_setup"},"1045":{"probe_name":"sys","function_name":"io_destroy"},"1044":{"probe_name":"sys","function_name":"io_cancel"},"1043":{"probe_name":"sys","function_name":"inotify_rm_watch"},"1042":{"probe_name":"sys","function_name":"inotify_init1"},"1041":{"probe_name":"sys","function_name":"inotify_init"},"1040":{"probe_name":"sys","function_name":"inotify_add_watch"},"1039":{"probe_name":"sys","function_name":"getxattr"},"1038":{"probe_name":"sys","function_name":"getdents"},"1037":{"probe_name":"sys","function_name":"getcwd"},"1036":{"probe_name":"sys","function_name":"ftruncate"},"1035":{"probe_name":"sys","function_name":"fsync"},"1034":{"probe_name":"sys","function_name":"fstatfs64"},"1033":{"probe_name":"sys","function_name":"fstatfs"},"1032":{"probe_name":"sys","function_name":"fstat"},"1031":{"probe_name":"sys","function_name":"fsetxattr"},"1027":{"probe_name":"sys","function_name":"fgetxattr"},"1026":{"probe_name":"sys","function_name":"fdatasync"},"1009":{"probe_name":"sys","function_name":"eventfd2"},"1008":{"probe_name":"sys","function_name":"dup3"},"1007":{"probe_name":"sys","function_name":"dup2"},"1006":{"probe_name":"sys","function_name":"dup"},"1000":{"probe_name":"sys","function_name":"access"},"1005":{"probe_name":"sys","function_name":"creat"},"1030":{"probe_name":"sys","function_name":"fremovexattr"},"2":{"probe_name":"DC","function_name":"end"},"1018":{"probe_name":"sys","function_name":"fanotify_mark"},"1017":{"probe_name":"sys","function_name":"fanotify_init"},"1029":{"probe_name":"sys","function_name":"flock"},"1":{"probe_name":"DC","function_name":"start"},"1002":{"probe_name":"sys","function_name":"close"},"1004":{"probe_name":"sys","function_name":"copy_file_range"},"1016":{"probe_name":"sys","function_name":"fallocate"},"1028":{"probe_name":"sys","function_name":"flistxattr"},"0":{"probe_name":"M","function_name":"SH"},"1001":{"probe_name":"sys","function_name":"chdir"},"1003":{"probe_name":"sys","function_name":"close_range"},"1015":{"probe_name":"sys","function_name":"fadvise64_64"},"1010":{"probe_name":"sys","function_name":"exit"},"1011":{"probe_name":"sys","function_name":"exit_group"},"1012":{"probe_name":"sys","function_name":"faccessat"},"1013":{"probe_name":"sys","function_name":"faccessat2"},"1014":{"probe_name":"sys","function_name":"fadvise64"},"1019":{"probe_name":"sys","function_name":"fchdir"},"1020":{"probe_name":"sys","function_name":"fchmod"},"1021":{"probe_name":"sys","function_name":"fchmodat"},"1022":{"probe_name":"sys","function_name":"fchmodat2"},"1023":{"probe_name":"sys","function_name":"fchown"},"1024":{"probe_name":"sys","function_name":"fchownat"},"1025":{"probe_name":"sys","function_name":"fcntl"},"1056":{"probe_name":"sys","function_name":"llseek"},"1057":{"probe_name":"sys","function_name":"lremovexattr"},"1058":{"probe_name":"sys","function_name":"lseek"},"1059":{"probe_name":"sys","function_name":"lsetxattr"},"1060":{"probe_name":"sys","function_name":"lstat"},"1061":{"probe_name":"sys","function_name":"madvise"},"1062":{"probe_name":"sys","function_name":"mbind"},"1063":{"probe_name":"sys","function_name":"migrate_pages"},"1064":{"probe_name":"sys","function_name":"mincore"},"1065":{"probe_name":"sys","function_name":"mkdir"},"1066":{"probe_name":"sys","function_name":"mkdirat"},"1067":{"probe_name":"sys","function_name":"mknod"},"1068":{"probe_name":"sys","function_name":"mknodat"},"1069":{"probe_name":"sys","function_name":"mlock"},"1070":{"probe_name":"sys","function_name":"mlockall"},"1071":{"probe_name":"sys","function_name":"mmap_pgoff"},"1072":{"probe_name":"sys","function_name":"move_pages"},"1073":{"probe_name":"sys","function_name":"mprotect"},"1074":{"probe_name":"sys","function_name":"mremap"},"1075":{"probe_name":"sys","function_name":"msync"},"1076":{"probe_name":"sys","function_name":"munlock"},"1077":{"probe_name":"sys","function_name":"munlockall"},"1078":{"probe_name":"sys","function_name":"munmap"},"1079":{"probe_name":"sys","function_name":"newfstat"},"1080":{"probe_name":"sys","function_name":"newlstat"},"1081":{"probe_name":"sys","function_name":"newstat"},"1082":{"probe_name":"sys","function_name":"open"},"1083":{"probe_name":"sys","function_name":"openat"},"1084":{"probe_name":"sys","function_name":"openat2"},"1085":{"probe_name":"sys","function_name":"pidfd_open"},"1086":{"probe_name":"sys","function_name":"pipe"},"1087":{"probe_name":"sys","function_name":"pread64"},"1088":{"probe_name":"sys","function_name":"preadv"},"1089":{"probe_name":"sys","function_name":"preadv2"},"1090":{"probe_name":"sys","function_name":"process_madvise"},"1091":{"probe_name":"sys","function_name":"process_mrelease"},"1092":{"probe_name":"sys","function_name":"process_vm_readv"},"1093":{"probe_name":"sys","function_name":"process_vm_writev"},"1094":{"probe_name":"sys","function_name":"pwrite64"},"1095":{"probe_name":"sys","function_name":"pwritev"},"1096":{"probe_name":"sys","function_name":"pwritev2"},"1097":{"probe_name":"sys","function_name":"read"},"1098":{"probe_name":"sys","function_name":"readlink"},"1099":{"probe_name":"sys","function_name":"readlinkat"},"1100":{"probe_name":"sys","function_name":"readv"},"1101":{"probe_name":"sys","function_name":"remap_file_pages"},"1102":{"probe_name":"sys","function_name":"removexattr"},"1103":{"probe_name":"sys","function_name":"rename"},"1104":{"probe_name":"sys","function_name":"renameat"},"1105":{"probe_name":"sys","function_name":"rmdir"},"1106":{"probe_name":"sys","function_name":"sendfile64"},"1107":{"probe_name":"sys","function_name":"setxattr"},"1108":{"probe_name":"sys","function_name":"stat"},"1109":{"probe_name":"sys","function_name":"statfs"},"1110":{"probe_name":"sys","function_name":"statfs64"},"1111":{"probe_name":"sys","function_name":"statx"},"1112":{"probe_name":"sys","function_name":"symlink"},"1113":{"probe_name":"sys","function_name":"symlinkat"},"1114":{"probe_name":"sys","function_name":"sync"},"1115":{"probe_name":"sys","function_name":"sync_file_range"},"1116":{"probe_name":"sys","function_name":"sync_file_range2"},"1117":{"probe_name":"sys","function_name":"syncfs"},"1118":{"probe_name":"sys","function_name":"sysfs"},"1119":{"probe_name":"sys","function_name":"truncate"},"1120":{"probe_name":"sys","function_name":"unlink"},"1121":{"probe_name":"sys","function_name":"unlinkat"},"1122":{"probe_name":"sys","function_name":"ustat"},"1123":{"probe_name":"sys","function_name":"vfork"}} diff --git a/etc/datacrumbs/data/categories-haridev-corona.json b/etc/datacrumbs/data/categories-haridev-corona.json deleted file mode 100644 index d511ffba..00000000 --- a/etc/datacrumbs/data/categories-haridev-corona.json +++ /dev/null @@ -1 +0,0 @@ -{"1362":{"probe_name":"sys","function_name":"writev"},"1361":{"probe_name":"sys","function_name":"write"},"1360":{"probe_name":"sys","function_name":"waitpid"},"1359":{"probe_name":"sys","function_name":"waitid"},"1358":{"probe_name":"sys","function_name":"wait4"},"1357":{"probe_name":"sys","function_name":"vmsplice"},"1356":{"probe_name":"sys","function_name":"vhangup"},"1355":{"probe_name":"sys","function_name":"utimes"},"1354":{"probe_name":"sys","function_name":"utimensat"},"1353":{"probe_name":"sys","function_name":"utime"},"1352":{"probe_name":"sys","function_name":"ustat"},"1351":{"probe_name":"sys","function_name":"userfaultfd"},"1350":{"probe_name":"sys","function_name":"uselib"},"1349":{"probe_name":"sys","function_name":"unshare"},"1348":{"probe_name":"sys","function_name":"unlinkat"},"1347":{"probe_name":"sys","function_name":"unlink"},"1346":{"probe_name":"sys","function_name":"uname"},"1345":{"probe_name":"sys","function_name":"umount"},"1344":{"probe_name":"sys","function_name":"umask"},"1343":{"probe_name":"sys","function_name":"truncate"},"1342":{"probe_name":"sys","function_name":"tkill"},"1341":{"probe_name":"sys","function_name":"times"},"1340":{"probe_name":"sys","function_name":"timerfd_settime"},"1339":{"probe_name":"sys","function_name":"timerfd_gettime"},"1338":{"probe_name":"sys","function_name":"timerfd_create"},"1337":{"probe_name":"sys","function_name":"timer_settime"},"1336":{"probe_name":"sys","function_name":"timer_gettime"},"1335":{"probe_name":"sys","function_name":"timer_getoverrun"},"1334":{"probe_name":"sys","function_name":"timer_delete"},"1333":{"probe_name":"sys","function_name":"timer_create"},"1332":{"probe_name":"sys","function_name":"time"},"1331":{"probe_name":"sys","function_name":"tgkill"},"1160":{"probe_name":"sys","function_name":"mq_notify"},"1159":{"probe_name":"sys","function_name":"mq_getsetattr"},"1158":{"probe_name":"sys","function_name":"mprotect"},"1157":{"probe_name":"sys","function_name":"move_pages"},"1156":{"probe_name":"sys","function_name":"move_mount"},"1155":{"probe_name":"sys","function_name":"mount"},"1154":{"probe_name":"sys","function_name":"mmap_pgoff"},"1153":{"probe_name":"sys","function_name":"mlockall"},"1152":{"probe_name":"sys","function_name":"mlock2"},"1151":{"probe_name":"sys","function_name":"mlock"},"1150":{"probe_name":"sys","function_name":"mknodat"},"1149":{"probe_name":"sys","function_name":"mknod"},"1148":{"probe_name":"sys","function_name":"mkdirat"},"1147":{"probe_name":"sys","function_name":"mkdir"},"1146":{"probe_name":"sys","function_name":"mincore"},"1145":{"probe_name":"sys","function_name":"migrate_pages"},"1144":{"probe_name":"sys","function_name":"memfd_create"},"1143":{"probe_name":"sys","function_name":"membarrier"},"1142":{"probe_name":"sys","function_name":"mbind"},"1141":{"probe_name":"sys","function_name":"madvise"},"1140":{"probe_name":"sys","function_name":"lstat"},"1139":{"probe_name":"sys","function_name":"lsetxattr"},"1138":{"probe_name":"sys","function_name":"lseek"},"1137":{"probe_name":"sys","function_name":"lremovexattr"},"1136":{"probe_name":"sys","function_name":"lookup_dcookie"},"1135":{"probe_name":"sys","function_name":"llseek"},"1134":{"probe_name":"sys","function_name":"llistxattr"},"1133":{"probe_name":"sys","function_name":"listxattr"},"1132":{"probe_name":"sys","function_name":"listen"},"1131":{"probe_name":"sys","function_name":"linkat"},"1130":{"probe_name":"sys","function_name":"link"},"1129":{"probe_name":"sys","function_name":"lgetxattr"},"1128":{"probe_name":"sys","function_name":"lchown"},"1127":{"probe_name":"sys","function_name":"kill"},"1126":{"probe_name":"sys","function_name":"keyctl"},"1125":{"probe_name":"sys","function_name":"kexec_load"},"1124":{"probe_name":"sys","function_name":"kexec_file_load"},"1123":{"probe_name":"sys","function_name":"kcmp"},"1122":{"probe_name":"sys","function_name":"ipc"},"1121":{"probe_name":"sys","function_name":"ioprio_set"},"1120":{"probe_name":"sys","function_name":"ioprio_get"},"1119":{"probe_name":"sys","function_name":"ioperm"},"1118":{"probe_name":"sys","function_name":"ioctl"},"1117":{"probe_name":"sys","function_name":"io_uring_setup"},"1116":{"probe_name":"sys","function_name":"io_uring_register"},"1115":{"probe_name":"sys","function_name":"io_uring_enter"},"1114":{"probe_name":"sys","function_name":"io_submit"},"103":{"probe_name":"libc","function_name":"__GI___vfork"},"1113":{"probe_name":"sys","function_name":"io_setup"},"102":{"probe_name":"libc","function_name":"__GI___fork"},"1112":{"probe_name":"sys","function_name":"io_pgetevents"},"101":{"probe_name":"sys","function_name":"vfork"},"1111":{"probe_name":"sys","function_name":"io_getevents"},"100":{"probe_name":"sys","function_name":"fork"},"1110":{"probe_name":"sys","function_name":"io_destroy"},"1109":{"probe_name":"sys","function_name":"io_cancel"},"1108":{"probe_name":"sys","function_name":"inotify_rm_watch"},"1107":{"probe_name":"sys","function_name":"inotify_init1"},"1106":{"probe_name":"sys","function_name":"inotify_init"},"1101":{"probe_name":"sys","function_name":"gettimeofday"},"1100":{"probe_name":"sys","function_name":"gettid"},"1099":{"probe_name":"sys","function_name":"getsockopt"},"1098":{"probe_name":"sys","function_name":"getsockname"},"1097":{"probe_name":"sys","function_name":"getsid"},"1096":{"probe_name":"sys","function_name":"getrusage"},"1095":{"probe_name":"sys","function_name":"getrlimit"},"1094":{"probe_name":"sys","function_name":"getresuid"},"1093":{"probe_name":"sys","function_name":"getresgid"},"1092":{"probe_name":"sys","function_name":"getrandom"},"1091":{"probe_name":"sys","function_name":"getpriority"},"1090":{"probe_name":"sys","function_name":"getppid"},"1089":{"probe_name":"sys","function_name":"getpid"},"1088":{"probe_name":"sys","function_name":"getpgrp"},"1087":{"probe_name":"sys","function_name":"getpgid"},"1086":{"probe_name":"sys","function_name":"getpeername"},"1085":{"probe_name":"sys","function_name":"getitimer"},"1084":{"probe_name":"sys","function_name":"gethostname"},"1083":{"probe_name":"sys","function_name":"getgroups"},"1082":{"probe_name":"sys","function_name":"getgid"},"1081":{"probe_name":"sys","function_name":"geteuid"},"1080":{"probe_name":"sys","function_name":"getegid"},"1079":{"probe_name":"sys","function_name":"getdents64"},"1078":{"probe_name":"sys","function_name":"getdents"},"1077":{"probe_name":"sys","function_name":"getcwd"},"1076":{"probe_name":"sys","function_name":"getcpu"},"1075":{"probe_name":"sys","function_name":"get_robust_list"},"1074":{"probe_name":"sys","function_name":"get_mempolicy"},"1073":{"probe_name":"sys","function_name":"futimesat"},"1030":{"probe_name":"sys","function_name":"dup2"},"1029":{"probe_name":"sys","function_name":"dup"},"1024":{"probe_name":"sys","function_name":"close_range"},"1023":{"probe_name":"sys","function_name":"close"},"1022":{"probe_name":"sys","function_name":"clone"},"1021":{"probe_name":"sys","function_name":"clock_settime"},"1020":{"probe_name":"sys","function_name":"clock_nanosleep"},"1019":{"probe_name":"sys","function_name":"clock_gettime"},"1018":{"probe_name":"sys","function_name":"clock_getres"},"1017":{"probe_name":"sys","function_name":"clock_adjtime"},"1016":{"probe_name":"sys","function_name":"chroot"},"1015":{"probe_name":"sys","function_name":"chown"},"1014":{"probe_name":"sys","function_name":"chmod"},"1013":{"probe_name":"sys","function_name":"chdir"},"1012":{"probe_name":"sys","function_name":"capset"},"1011":{"probe_name":"sys","function_name":"capget"},"0":{"probe_name":"M","function_name":"SH"},"1000":{"probe_name":"sys","function_name":"accept"},"1027":{"probe_name":"sys","function_name":"creat"},"1104":{"probe_name":"sys","function_name":"init_module"},"1050":{"probe_name":"sys","function_name":"fchdir"},"1003":{"probe_name":"sys","function_name":"acct"},"1028":{"probe_name":"sys","function_name":"delete_module"},"1105":{"probe_name":"sys","function_name":"inotify_add_watch"},"1051":{"probe_name":"sys","function_name":"fchmod"},"1004":{"probe_name":"sys","function_name":"add_key"},"1025":{"probe_name":"sys","function_name":"connect"},"1102":{"probe_name":"sys","function_name":"getuid"},"1048":{"probe_name":"sys","function_name":"fanotify_init"},"1001":{"probe_name":"sys","function_name":"accept4"},"1026":{"probe_name":"sys","function_name":"copy_file_range"},"1103":{"probe_name":"sys","function_name":"getxattr"},"1049":{"probe_name":"sys","function_name":"fanotify_mark"},"1002":{"probe_name":"sys","function_name":"access"},"1005":{"probe_name":"sys","function_name":"adjtimex"},"1006":{"probe_name":"sys","function_name":"alarm"},"1007":{"probe_name":"sys","function_name":"bdflush"},"1008":{"probe_name":"sys","function_name":"bind"},"1009":{"probe_name":"sys","function_name":"bpf"},"1010":{"probe_name":"sys","function_name":"brk"},"1031":{"probe_name":"sys","function_name":"dup3"},"1032":{"probe_name":"sys","function_name":"epoll_create"},"1033":{"probe_name":"sys","function_name":"epoll_create1"},"1034":{"probe_name":"sys","function_name":"epoll_ctl"},"1035":{"probe_name":"sys","function_name":"epoll_pwait"},"1036":{"probe_name":"sys","function_name":"epoll_wait"},"1037":{"probe_name":"sys","function_name":"eventfd"},"1038":{"probe_name":"sys","function_name":"eventfd2"},"1039":{"probe_name":"sys","function_name":"execve"},"1040":{"probe_name":"sys","function_name":"execveat"},"1041":{"probe_name":"sys","function_name":"exit"},"1042":{"probe_name":"sys","function_name":"exit_group"},"1043":{"probe_name":"sys","function_name":"faccessat"},"1044":{"probe_name":"sys","function_name":"faccessat2"},"1045":{"probe_name":"sys","function_name":"fadvise64"},"1046":{"probe_name":"sys","function_name":"fadvise64_64"},"1047":{"probe_name":"sys","function_name":"fallocate"},"1052":{"probe_name":"sys","function_name":"fchmodat"},"1053":{"probe_name":"sys","function_name":"fchown"},"1054":{"probe_name":"sys","function_name":"fchownat"},"1055":{"probe_name":"sys","function_name":"fcntl"},"1056":{"probe_name":"sys","function_name":"fdatasync"},"1057":{"probe_name":"sys","function_name":"fgetxattr"},"1058":{"probe_name":"sys","function_name":"finit_module"},"1059":{"probe_name":"sys","function_name":"flistxattr"},"1060":{"probe_name":"sys","function_name":"flock"},"1061":{"probe_name":"sys","function_name":"fremovexattr"},"1062":{"probe_name":"sys","function_name":"fsconfig"},"1063":{"probe_name":"sys","function_name":"fsetxattr"},"1064":{"probe_name":"sys","function_name":"fsmount"},"1065":{"probe_name":"sys","function_name":"fsopen"},"1066":{"probe_name":"sys","function_name":"fspick"},"1067":{"probe_name":"sys","function_name":"fstat"},"1068":{"probe_name":"sys","function_name":"fstatfs"},"1069":{"probe_name":"sys","function_name":"fstatfs64"},"1070":{"probe_name":"sys","function_name":"fsync"},"1071":{"probe_name":"sys","function_name":"ftruncate"},"1072":{"probe_name":"sys","function_name":"futex"},"1161":{"probe_name":"sys","function_name":"mq_open"},"1162":{"probe_name":"sys","function_name":"mq_timedreceive"},"1163":{"probe_name":"sys","function_name":"mq_timedsend"},"1164":{"probe_name":"sys","function_name":"mq_unlink"},"1165":{"probe_name":"sys","function_name":"mremap"},"1166":{"probe_name":"sys","function_name":"msgctl"},"1167":{"probe_name":"sys","function_name":"msgget"},"1168":{"probe_name":"sys","function_name":"msgrcv"},"1169":{"probe_name":"sys","function_name":"msgsnd"},"1170":{"probe_name":"sys","function_name":"msync"},"1171":{"probe_name":"sys","function_name":"munlock"},"1172":{"probe_name":"sys","function_name":"munlockall"},"1173":{"probe_name":"sys","function_name":"munmap"},"1174":{"probe_name":"sys","function_name":"name_to_handle_at"},"1175":{"probe_name":"sys","function_name":"nanosleep"},"1176":{"probe_name":"sys","function_name":"newfstat"},"1177":{"probe_name":"sys","function_name":"newfstatat"},"1178":{"probe_name":"sys","function_name":"newlstat"},"1179":{"probe_name":"sys","function_name":"newstat"},"1180":{"probe_name":"sys","function_name":"newuname"},"1181":{"probe_name":"sys","function_name":"ni_syscall"},"1182":{"probe_name":"sys","function_name":"nice"},"1183":{"probe_name":"sys","function_name":"old_mmap"},"1184":{"probe_name":"sys","function_name":"old_readdir"},"1185":{"probe_name":"sys","function_name":"old_select"},"1186":{"probe_name":"sys","function_name":"oldumount"},"1187":{"probe_name":"sys","function_name":"olduname"},"1188":{"probe_name":"sys","function_name":"open"},"1189":{"probe_name":"sys","function_name":"open_by_handle_at"},"1190":{"probe_name":"sys","function_name":"open_tree"},"1191":{"probe_name":"sys","function_name":"openat"},"1192":{"probe_name":"sys","function_name":"openat2"},"1193":{"probe_name":"sys","function_name":"pause"},"1194":{"probe_name":"sys","function_name":"pciconfig_iobase"},"1195":{"probe_name":"sys","function_name":"pciconfig_read"},"1196":{"probe_name":"sys","function_name":"pciconfig_write"},"1197":{"probe_name":"sys","function_name":"perf_event_open"},"1198":{"probe_name":"sys","function_name":"personality"},"1199":{"probe_name":"sys","function_name":"pidfd_send_signal"},"1200":{"probe_name":"sys","function_name":"pipe"},"1201":{"probe_name":"sys","function_name":"pipe2"},"1202":{"probe_name":"sys","function_name":"pivot_root"},"1203":{"probe_name":"sys","function_name":"pkey_alloc"},"1204":{"probe_name":"sys","function_name":"pkey_free"},"1205":{"probe_name":"sys","function_name":"pkey_mprotect"},"1206":{"probe_name":"sys","function_name":"poll"},"1207":{"probe_name":"sys","function_name":"ppoll"},"1208":{"probe_name":"sys","function_name":"prctl"},"1209":{"probe_name":"sys","function_name":"pread64"},"1210":{"probe_name":"sys","function_name":"preadv"},"1211":{"probe_name":"sys","function_name":"preadv2"},"1212":{"probe_name":"sys","function_name":"prlimit64"},"1213":{"probe_name":"sys","function_name":"process_vm_readv"},"1214":{"probe_name":"sys","function_name":"process_vm_writev"},"1215":{"probe_name":"sys","function_name":"pselect6"},"1216":{"probe_name":"sys","function_name":"ptrace"},"1217":{"probe_name":"sys","function_name":"pwrite64"},"1218":{"probe_name":"sys","function_name":"pwritev"},"1219":{"probe_name":"sys","function_name":"pwritev2"},"1220":{"probe_name":"sys","function_name":"quotactl"},"1221":{"probe_name":"sys","function_name":"read"},"1222":{"probe_name":"sys","function_name":"readahead"},"1223":{"probe_name":"sys","function_name":"readlink"},"1224":{"probe_name":"sys","function_name":"readlinkat"},"1225":{"probe_name":"sys","function_name":"readv"},"1226":{"probe_name":"sys","function_name":"reboot"},"1227":{"probe_name":"sys","function_name":"recv"},"1228":{"probe_name":"sys","function_name":"recvfrom"},"1229":{"probe_name":"sys","function_name":"recvmmsg"},"1230":{"probe_name":"sys","function_name":"recvmsg"},"1231":{"probe_name":"sys","function_name":"remap_file_pages"},"1232":{"probe_name":"sys","function_name":"removexattr"},"1233":{"probe_name":"sys","function_name":"rename"},"1234":{"probe_name":"sys","function_name":"renameat"},"1235":{"probe_name":"sys","function_name":"renameat2"},"1236":{"probe_name":"sys","function_name":"request_key"},"1237":{"probe_name":"sys","function_name":"restart_syscall"},"1238":{"probe_name":"sys","function_name":"rmdir"},"1239":{"probe_name":"sys","function_name":"rseq"},"1240":{"probe_name":"sys","function_name":"rt_sigaction"},"1241":{"probe_name":"sys","function_name":"rt_sigpending"},"1242":{"probe_name":"sys","function_name":"rt_sigprocmask"},"1243":{"probe_name":"sys","function_name":"rt_sigqueueinfo"},"1244":{"probe_name":"sys","function_name":"rt_sigsuspend"},"1245":{"probe_name":"sys","function_name":"rt_sigtimedwait"},"1246":{"probe_name":"sys","function_name":"rt_tgsigqueueinfo"},"1247":{"probe_name":"sys","function_name":"sched_get_priority_max"},"1248":{"probe_name":"sys","function_name":"sched_get_priority_min"},"1249":{"probe_name":"sys","function_name":"sched_getaffinity"},"1250":{"probe_name":"sys","function_name":"sched_getattr"},"1251":{"probe_name":"sys","function_name":"sched_getparam"},"1252":{"probe_name":"sys","function_name":"sched_getscheduler"},"1253":{"probe_name":"sys","function_name":"sched_rr_get_interval"},"1254":{"probe_name":"sys","function_name":"sched_setaffinity"},"1255":{"probe_name":"sys","function_name":"sched_setattr"},"1256":{"probe_name":"sys","function_name":"sched_setparam"},"1257":{"probe_name":"sys","function_name":"sched_setscheduler"},"1258":{"probe_name":"sys","function_name":"sched_yield"},"1259":{"probe_name":"sys","function_name":"seccomp"},"1260":{"probe_name":"sys","function_name":"select"},"1261":{"probe_name":"sys","function_name":"semctl"},"1262":{"probe_name":"sys","function_name":"semget"},"1263":{"probe_name":"sys","function_name":"semop"},"1264":{"probe_name":"sys","function_name":"semtimedop"},"1265":{"probe_name":"sys","function_name":"send"},"1266":{"probe_name":"sys","function_name":"sendfile"},"1267":{"probe_name":"sys","function_name":"sendfile64"},"1268":{"probe_name":"sys","function_name":"sendmmsg"},"1269":{"probe_name":"sys","function_name":"sendmsg"},"1270":{"probe_name":"sys","function_name":"sendto"},"1271":{"probe_name":"sys","function_name":"set_mempolicy"},"1272":{"probe_name":"sys","function_name":"set_robust_list"},"1273":{"probe_name":"sys","function_name":"set_tid_address"},"1274":{"probe_name":"sys","function_name":"setdomainname"},"1275":{"probe_name":"sys","function_name":"setfsgid"},"1276":{"probe_name":"sys","function_name":"setfsuid"},"1277":{"probe_name":"sys","function_name":"setgid"},"1278":{"probe_name":"sys","function_name":"setgroups"},"1279":{"probe_name":"sys","function_name":"sethostname"},"1280":{"probe_name":"sys","function_name":"setitimer"},"1281":{"probe_name":"sys","function_name":"setns"},"1282":{"probe_name":"sys","function_name":"setpgid"},"1283":{"probe_name":"sys","function_name":"setpriority"},"1284":{"probe_name":"sys","function_name":"setregid"},"1285":{"probe_name":"sys","function_name":"setresgid"},"1286":{"probe_name":"sys","function_name":"setresuid"},"1287":{"probe_name":"sys","function_name":"setreuid"},"1288":{"probe_name":"sys","function_name":"setrlimit"},"1289":{"probe_name":"sys","function_name":"setsid"},"1290":{"probe_name":"sys","function_name":"setsockopt"},"1291":{"probe_name":"sys","function_name":"settimeofday"},"1292":{"probe_name":"sys","function_name":"setuid"},"1293":{"probe_name":"sys","function_name":"setxattr"},"1294":{"probe_name":"sys","function_name":"sgetmask"},"1295":{"probe_name":"sys","function_name":"shmat"},"1296":{"probe_name":"sys","function_name":"shmctl"},"1297":{"probe_name":"sys","function_name":"shmdt"},"1298":{"probe_name":"sys","function_name":"shmget"},"1299":{"probe_name":"sys","function_name":"shutdown"},"1300":{"probe_name":"sys","function_name":"sigaltstack"},"1301":{"probe_name":"sys","function_name":"signal"},"1302":{"probe_name":"sys","function_name":"signalfd"},"1303":{"probe_name":"sys","function_name":"signalfd4"},"1304":{"probe_name":"sys","function_name":"sigpending"},"1305":{"probe_name":"sys","function_name":"sigprocmask"},"1306":{"probe_name":"sys","function_name":"socket"},"1307":{"probe_name":"sys","function_name":"socketcall"},"1308":{"probe_name":"sys","function_name":"socketpair"},"1309":{"probe_name":"sys","function_name":"splice"},"1310":{"probe_name":"sys","function_name":"spu_create"},"1311":{"probe_name":"sys","function_name":"spu_run"},"1312":{"probe_name":"sys","function_name":"ssetmask"},"1313":{"probe_name":"sys","function_name":"stat"},"1314":{"probe_name":"sys","function_name":"statfs"},"1315":{"probe_name":"sys","function_name":"statfs64"},"1316":{"probe_name":"sys","function_name":"statx"},"1317":{"probe_name":"sys","function_name":"stime"},"1318":{"probe_name":"sys","function_name":"swapoff"},"1319":{"probe_name":"sys","function_name":"swapon"},"1320":{"probe_name":"sys","function_name":"symlink"},"1321":{"probe_name":"sys","function_name":"symlinkat"},"1322":{"probe_name":"sys","function_name":"sync"},"1323":{"probe_name":"sys","function_name":"sync_file_range"},"1324":{"probe_name":"sys","function_name":"sync_file_range2"},"1325":{"probe_name":"sys","function_name":"syncfs"},"1326":{"probe_name":"sys","function_name":"sysctl"},"1327":{"probe_name":"sys","function_name":"sysfs"},"1328":{"probe_name":"sys","function_name":"sysinfo"},"1329":{"probe_name":"sys","function_name":"syslog"},"1330":{"probe_name":"sys","function_name":"tee"}} diff --git a/etc/datacrumbs/data/categories-haridev-lead-us.json b/etc/datacrumbs/data/categories-haridev-lead-us.json deleted file mode 100644 index 22ab3a72..00000000 --- a/etc/datacrumbs/data/categories-haridev-lead-us.json +++ /dev/null @@ -1 +0,0 @@ -{"1933":{"probe_name":"libc","function_name":"wscanf"},"1932":{"probe_name":"libc","function_name":"writev"},"1931":{"probe_name":"libc","function_name":"writeunix:0x1476a0"},"1930":{"probe_name":"libc","function_name":"writeunix:0x146dd0"},"1929":{"probe_name":"libc","function_name":"writetcp:0x14cbc0"},"1928":{"probe_name":"libc","function_name":"writetcp:0x149760"},"1927":{"probe_name":"libc","function_name":"write"},"1926":{"probe_name":"libc","function_name":"wprintf"},"1925":{"probe_name":"libc","function_name":"wordfree"},"1924":{"probe_name":"libc","function_name":"wordexp"},"1923":{"probe_name":"libc","function_name":"wmempcpy"},"1922":{"probe_name":"libc","function_name":"wmemmove"},"1921":{"probe_name":"libc","function_name":"wmemcpy"},"1920":{"probe_name":"libc","function_name":"wcwidth"},"1919":{"probe_name":"libc","function_name":"wctype"},"1918":{"probe_name":"libc","function_name":"wctrans"},"1917":{"probe_name":"libc","function_name":"wctomb"},"1916":{"probe_name":"libc","function_name":"wctob"},"1915":{"probe_name":"libc","function_name":"wcsxfrm"},"1914":{"probe_name":"libc","function_name":"wcswidth"},"1913":{"probe_name":"libc","function_name":"wcswcs"},"1912":{"probe_name":"libc","function_name":"wcstouq"},"1911":{"probe_name":"libc","function_name":"wcstoumax"},"1910":{"probe_name":"libc","function_name":"wcstoull"},"1909":{"probe_name":"libc","function_name":"wcstoul"},"1908":{"probe_name":"libc","function_name":"wcstoq"},"1907":{"probe_name":"libc","function_name":"wcstombs"},"1906":{"probe_name":"libc","function_name":"wcstoll"},"1905":{"probe_name":"libc","function_name":"wcstold"},"1904":{"probe_name":"libc","function_name":"wcstol"},"1903":{"probe_name":"libc","function_name":"wcstok"},"1902":{"probe_name":"libc","function_name":"wcstoimax"},"1901":{"probe_name":"libc","function_name":"wcstof64x"},"1900":{"probe_name":"libc","function_name":"wcstof64"},"1899":{"probe_name":"libc","function_name":"wcstof32x"},"1898":{"probe_name":"libc","function_name":"wcstof32"},"1897":{"probe_name":"libc","function_name":"wcstof128"},"1896":{"probe_name":"libc","function_name":"wcstof"},"1895":{"probe_name":"libc","function_name":"wcstod"},"1894":{"probe_name":"libc","function_name":"wcsstr"},"1893":{"probe_name":"libc","function_name":"wcsspn"},"1892":{"probe_name":"libc","function_name":"wcsrtombs"},"1891":{"probe_name":"libc","function_name":"wcspbrk"},"1890":{"probe_name":"libc","function_name":"wcsnrtombs"},"1889":{"probe_name":"libc","function_name":"wcsncpy"},"1888":{"probe_name":"libc","function_name":"wcsncat"},"1887":{"probe_name":"libc","function_name":"wcsncasecmp"},"1886":{"probe_name":"libc","function_name":"wcsdup"},"1885":{"probe_name":"libc","function_name":"wcscspn"},"1884":{"probe_name":"libc","function_name":"wcscoll"},"1883":{"probe_name":"libc","function_name":"wcschrnul"},"1882":{"probe_name":"libc","function_name":"wcscat"},"1881":{"probe_name":"libc","function_name":"wcscasecmp"},"1880":{"probe_name":"libc","function_name":"wcrtomb"},"1879":{"probe_name":"libc","function_name":"wcpncpy"},"1878":{"probe_name":"libc","function_name":"wcpcpy"},"1877":{"probe_name":"libc","function_name":"warnx"},"1876":{"probe_name":"libc","function_name":"warn"},"1875":{"probe_name":"libc","function_name":"walker"},"1874":{"probe_name":"libc","function_name":"waitpid"},"1873":{"probe_name":"libc","function_name":"waitid"},"1872":{"probe_name":"libc","function_name":"wait4"},"1871":{"probe_name":"libc","function_name":"wait3"},"1870":{"probe_name":"libc","function_name":"wait"},"1869":{"probe_name":"libc","function_name":"vwscanf"},"1868":{"probe_name":"libc","function_name":"vwprintf"},"1867":{"probe_name":"libc","function_name":"vwarnx"},"1866":{"probe_name":"libc","function_name":"vwarn"},"1865":{"probe_name":"libc","function_name":"vsyslog"},"1864":{"probe_name":"libc","function_name":"vswscanf"},"1863":{"probe_name":"libc","function_name":"vswprintf"},"1862":{"probe_name":"libc","function_name":"vsscanf"},"1861":{"probe_name":"libc","function_name":"vsprintf"},"1860":{"probe_name":"libc","function_name":"vsnprintf"},"1859":{"probe_name":"libc","function_name":"vscanf"},"1858":{"probe_name":"libc","function_name":"vprintf"},"1857":{"probe_name":"libc","function_name":"vmsplice"},"1856":{"probe_name":"libc","function_name":"vlimit"},"1855":{"probe_name":"libc","function_name":"vhangup"},"1854":{"probe_name":"libc","function_name":"vfwscanf"},"1853":{"probe_name":"libc","function_name":"vfwprintf"},"1852":{"probe_name":"libc","function_name":"vfscanf"},"1851":{"probe_name":"libc","function_name":"vfprintf"},"1850":{"probe_name":"libc","function_name":"vfork"},"1849":{"probe_name":"libc","function_name":"versionsort64"},"1848":{"probe_name":"libc","function_name":"versionsort"},"1847":{"probe_name":"libc","function_name":"verrx"},"1846":{"probe_name":"libc","function_name":"verr"},"1845":{"probe_name":"libc","function_name":"vdprintf"},"1844":{"probe_name":"libc","function_name":"vasprintf"},"1843":{"probe_name":"libc","function_name":"valloc"},"1842":{"probe_name":"libc","function_name":"utmpxname"},"1841":{"probe_name":"libc","function_name":"utmpname"},"1840":{"probe_name":"libc","function_name":"usleep"},"1839":{"probe_name":"libc","function_name":"uselocale"},"1838":{"probe_name":"libc","function_name":"updwtmpx"},"1837":{"probe_name":"libc","function_name":"updwtmp"},"1836":{"probe_name":"libc","function_name":"unshare"},"1835":{"probe_name":"libc","function_name":"unsetenv"},"1834":{"probe_name":"libc","function_name":"unlockpt"},"1833":{"probe_name":"libc","function_name":"unlock"},"1832":{"probe_name":"libc","function_name":"unlinkat"},"1831":{"probe_name":"libc","function_name":"unlink"},"1830":{"probe_name":"libc","function_name":"universal"},"1829":{"probe_name":"libc","function_name":"ungetwc"},"1828":{"probe_name":"libc","function_name":"ungetc"},"1827":{"probe_name":"libc","function_name":"uname"},"1826":{"probe_name":"libc","function_name":"umount2"},"1825":{"probe_name":"libc","function_name":"umount"},"1824":{"probe_name":"libc","function_name":"umask"},"1823":{"probe_name":"libc","function_name":"ulimit"},"1822":{"probe_name":"libc","function_name":"ulckpwdf"},"1821":{"probe_name":"libc","function_name":"ualarm"},"1820":{"probe_name":"libc","function_name":"tzset"},"1819":{"probe_name":"libc","function_name":"twalk"},"1818":{"probe_name":"libc","function_name":"ttyslot"},"1817":{"probe_name":"libc","function_name":"ttyname"},"1816":{"probe_name":"libc","function_name":"tsearch"},"1815":{"probe_name":"libc","function_name":"try"},"1814":{"probe_name":"libc","function_name":"truncate64"},"1813":{"probe_name":"libc","function_name":"truncate"},"1812":{"probe_name":"libc","function_name":"trecurse"},"1811":{"probe_name":"libc","function_name":"transcmp"},"1810":{"probe_name":"libc","function_name":"towupper"},"1809":{"probe_name":"libc","function_name":"towlower"},"1808":{"probe_name":"libc","function_name":"towctrans"},"1807":{"probe_name":"libc","function_name":"toupper"},"1806":{"probe_name":"libc","function_name":"tolower"},"1805":{"probe_name":"libc","function_name":"token.part.0"},"1804":{"probe_name":"libc","function_name":"toascii"},"1803":{"probe_name":"libc","function_name":"tmpnam"},"1802":{"probe_name":"libc","function_name":"tmpfile64"},"1801":{"probe_name":"libc","function_name":"tgkill"},"1800":{"probe_name":"libc","function_name":"tfind"},"1799":{"probe_name":"libc","function_name":"textdomain"},"1798":{"probe_name":"libc","function_name":"tempnam"},"1797":{"probe_name":"libc","function_name":"telldir"},"1796":{"probe_name":"libc","function_name":"tee"},"1795":{"probe_name":"libc","function_name":"tdestroy"},"1794":{"probe_name":"libc","function_name":"tdelete"},"1793":{"probe_name":"libc","function_name":"tcsetpgrp"},"1792":{"probe_name":"libc","function_name":"tcsetattr"},"1791":{"probe_name":"libc","function_name":"tcsendbreak"},"1790":{"probe_name":"libc","function_name":"tcgetsid"},"1789":{"probe_name":"libc","function_name":"tcgetpgrp"},"1788":{"probe_name":"libc","function_name":"tcgetattr"},"1787":{"probe_name":"libc","function_name":"tcflush"},"1786":{"probe_name":"libc","function_name":"tcflow"},"1785":{"probe_name":"libc","function_name":"tcdrain"},"1784":{"probe_name":"libc","function_name":"systrim.constprop.0"},"1783":{"probe_name":"libc","function_name":"system"},"1782":{"probe_name":"libc","function_name":"sysmalloc"},"1781":{"probe_name":"libc","function_name":"syslog"},"1780":{"probe_name":"libc","function_name":"sysinfo"},"1779":{"probe_name":"libc","function_name":"sysconf"},"1778":{"probe_name":"libc","function_name":"syscall"},"1777":{"probe_name":"libc","function_name":"syncfs"},"1776":{"probe_name":"libc","function_name":"sync"},"1775":{"probe_name":"libc","function_name":"symlinkat"},"1774":{"probe_name":"libc","function_name":"symlink"},"1773":{"probe_name":"libc","function_name":"swscanf"},"1772":{"probe_name":"libc","function_name":"swprintf"},"1771":{"probe_name":"libc","function_name":"swapon"},"1770":{"probe_name":"libc","function_name":"swapoff"},"1769":{"probe_name":"libc","function_name":"swapcontext"},"1768":{"probe_name":"libc","function_name":"swab"},"1767":{"probe_name":"libc","function_name":"stty"},"1766":{"probe_name":"libc","function_name":"strxfrm"},"1765":{"probe_name":"libc","function_name":"strverscmp"},"1764":{"probe_name":"libc","function_name":"strtouq"},"1763":{"probe_name":"libc","function_name":"strtoumax"},"1762":{"probe_name":"libc","function_name":"strtoull"},"1761":{"probe_name":"libc","function_name":"strtoul"},"1760":{"probe_name":"libc","function_name":"strtoq"},"1759":{"probe_name":"libc","function_name":"strtoll"},"1758":{"probe_name":"libc","function_name":"strtold"},"1757":{"probe_name":"libc","function_name":"strtol"},"1756":{"probe_name":"libc","function_name":"strtok"},"1755":{"probe_name":"libc","function_name":"strtoimax"},"1754":{"probe_name":"libc","function_name":"strtof64x"},"1753":{"probe_name":"libc","function_name":"strtof64"},"1752":{"probe_name":"libc","function_name":"strtof32x"},"1751":{"probe_name":"libc","function_name":"strtof32"},"1750":{"probe_name":"libc","function_name":"strtof128"},"1749":{"probe_name":"libc","function_name":"strtof"},"1748":{"probe_name":"libc","function_name":"strtod"},"1747":{"probe_name":"libc","function_name":"strsep"},"1746":{"probe_name":"libc","function_name":"strndup"},"1745":{"probe_name":"libc","function_name":"strfry"},"1744":{"probe_name":"libc","function_name":"strfroml"},"1743":{"probe_name":"libc","function_name":"strfromf64x"},"1742":{"probe_name":"libc","function_name":"strfromf64"},"1741":{"probe_name":"libc","function_name":"strfromf32x"},"1740":{"probe_name":"libc","function_name":"strfromf32"},"1739":{"probe_name":"libc","function_name":"strfromf128"},"1738":{"probe_name":"libc","function_name":"strfromf"},"1737":{"probe_name":"libc","function_name":"strfromd"},"1736":{"probe_name":"libc","function_name":"strfmon"},"1735":{"probe_name":"libc","function_name":"strerror"},"1734":{"probe_name":"libc","function_name":"strdup"},"1733":{"probe_name":"libc","function_name":"strcoll"},"1732":{"probe_name":"libc","function_name":"strcasestr"},"1731":{"probe_name":"libc","function_name":"statx"},"1730":{"probe_name":"libc","function_name":"statvfs64"},"1729":{"probe_name":"libc","function_name":"statvfs"},"1728":{"probe_name":"libc","function_name":"statfs64"},"1727":{"probe_name":"libc","function_name":"statfs"},"1726":{"probe_name":"libc","function_name":"stat64"},"1725":{"probe_name":"libc","function_name":"stat"},"1724":{"probe_name":"libc","function_name":"sscanf"},"1723":{"probe_name":"libc","function_name":"srandom"},"1722":{"probe_name":"libc","function_name":"srand48"},"1721":{"probe_name":"libc","function_name":"srand"},"1720":{"probe_name":"libc","function_name":"sprofil"},"1719":{"probe_name":"libc","function_name":"sprintf"},"1718":{"probe_name":"libc","function_name":"splice"},"1717":{"probe_name":"libc","function_name":"space"},"1716":{"probe_name":"libc","function_name":"socketpair"},"1715":{"probe_name":"libc","function_name":"socket"},"1714":{"probe_name":"libc","function_name":"sockatmark"},"1713":{"probe_name":"libc","function_name":"snprintf"},"1712":{"probe_name":"libc","function_name":"sleep"},"1711":{"probe_name":"libc","function_name":"skip"},"1710":{"probe_name":"libc","function_name":"sigwaitinfo"},"1709":{"probe_name":"libc","function_name":"sigwait"},"1708":{"probe_name":"libc","function_name":"sigsuspend"},"1707":{"probe_name":"libc","function_name":"sigstack"},"1706":{"probe_name":"libc","function_name":"sigsetmask"},"1705":{"probe_name":"libc","function_name":"sigset"},"1704":{"probe_name":"libc","function_name":"sigreturn"},"1703":{"probe_name":"libc","function_name":"sigrelse"},"1702":{"probe_name":"libc","function_name":"sigqueue"},"1701":{"probe_name":"libc","function_name":"sigprocmask"},"1700":{"probe_name":"libc","function_name":"sigpending"},"1699":{"probe_name":"libc","function_name":"sigpause"},"1698":{"probe_name":"libc","function_name":"sigorset"},"1697":{"probe_name":"libc","function_name":"siglongjmp"},"1696":{"probe_name":"libc","function_name":"sigismember"},"1695":{"probe_name":"libc","function_name":"sigisemptyset"},"1694":{"probe_name":"libc","function_name":"siginterrupt"},"1693":{"probe_name":"libc","function_name":"sigignore"},"1692":{"probe_name":"libc","function_name":"sighold"},"1691":{"probe_name":"libc","function_name":"siggetmask"},"1690":{"probe_name":"libc","function_name":"sigfillset"},"1689":{"probe_name":"libc","function_name":"sigemptyset"},"1688":{"probe_name":"libc","function_name":"sigdelset"},"1687":{"probe_name":"libc","function_name":"sigblock"},"1686":{"probe_name":"libc","function_name":"sigandset"},"1685":{"probe_name":"libc","function_name":"sigaltstack"},"1684":{"probe_name":"libc","function_name":"sigaddset"},"1683":{"probe_name":"libc","function_name":"sigaction"},"1682":{"probe_name":"libc","function_name":"shutdown"},"1681":{"probe_name":"libc","function_name":"shmget"},"1680":{"probe_name":"libc","function_name":"shmdt"},"1679":{"probe_name":"libc","function_name":"shmat"},"1678":{"probe_name":"libc","function_name":"sgetspent"},"1677":{"probe_name":"libc","function_name":"sgetsgent"},"1676":{"probe_name":"libc","function_name":"setxattr"},"1675":{"probe_name":"libc","function_name":"setvbuf"},"1674":{"probe_name":"libc","function_name":"setutxent"},"1673":{"probe_name":"libc","function_name":"setutent"},"1672":{"probe_name":"libc","function_name":"setusershell"},"1671":{"probe_name":"libc","function_name":"setuid"},"1670":{"probe_name":"libc","function_name":"setttyent"},"1669":{"probe_name":"libc","function_name":"setstate"},"1668":{"probe_name":"libc","function_name":"setspent"},"1667":{"probe_name":"libc","function_name":"setsourcefilter"},"1666":{"probe_name":"libc","function_name":"setsockopt"},"1665":{"probe_name":"libc","function_name":"setsid"},"1664":{"probe_name":"libc","function_name":"setsgent"},"1663":{"probe_name":"libc","function_name":"setservent"},"1662":{"probe_name":"libc","function_name":"setrpcent"},"1661":{"probe_name":"libc","function_name":"setrlimit64"},"1660":{"probe_name":"libc","function_name":"setrlimit"},"1659":{"probe_name":"libc","function_name":"setreuid"},"1658":{"probe_name":"libc","function_name":"setresuid"},"1657":{"probe_name":"libc","function_name":"setresgid"},"1656":{"probe_name":"libc","function_name":"setregid"},"1655":{"probe_name":"libc","function_name":"setpwent"},"1654":{"probe_name":"libc","function_name":"setprotoent"},"1653":{"probe_name":"libc","function_name":"setpriority"},"1652":{"probe_name":"libc","function_name":"setpgrp"},"1651":{"probe_name":"libc","function_name":"setpgid"},"1650":{"probe_name":"libc","function_name":"setns"},"1649":{"probe_name":"libc","function_name":"setnetgrent"},"1648":{"probe_name":"libc","function_name":"setnetent"},"1647":{"probe_name":"libc","function_name":"setmntent"},"1646":{"probe_name":"libc","function_name":"setlogmask"},"1645":{"probe_name":"libc","function_name":"setlogin"},"1644":{"probe_name":"libc","function_name":"setlocale"},"1643":{"probe_name":"libc","function_name":"setlinebuf"},"1642":{"probe_name":"libc","function_name":"setjmp"},"1641":{"probe_name":"libc","function_name":"setipv4sourcefilter"},"1640":{"probe_name":"libc","function_name":"sethostname"},"1639":{"probe_name":"libc","function_name":"sethostid"},"1638":{"probe_name":"libc","function_name":"sethostent"},"1637":{"probe_name":"libc","function_name":"setgroups"},"1636":{"probe_name":"libc","function_name":"setgrent"},"1635":{"probe_name":"libc","function_name":"setgid"},"1634":{"probe_name":"libc","function_name":"setfsuid"},"1633":{"probe_name":"libc","function_name":"setfsgid"},"1632":{"probe_name":"libc","function_name":"setfsent"},"1631":{"probe_name":"libc","function_name":"seteuid"},"1630":{"probe_name":"libc","function_name":"setenv"},"1629":{"probe_name":"libc","function_name":"setegid"},"1628":{"probe_name":"libc","function_name":"setdomainname"},"1627":{"probe_name":"libc","function_name":"setcontext"},"1626":{"probe_name":"libc","function_name":"setbuffer"},"1625":{"probe_name":"libc","function_name":"setbuf"},"1624":{"probe_name":"libc","function_name":"setaliasent"},"1623":{"probe_name":"libc","function_name":"sendto"},"1622":{"probe_name":"libc","function_name":"sendmsg"},"1621":{"probe_name":"libc","function_name":"sendmmsg"},"1620":{"probe_name":"libc","function_name":"sendfile64"},"1619":{"probe_name":"libc","function_name":"sendfile"},"1618":{"probe_name":"libc","function_name":"send"},"1617":{"probe_name":"libc","function_name":"semop"},"1616":{"probe_name":"libc","function_name":"semget"},"1615":{"probe_name":"libc","function_name":"select"},"1614":{"probe_name":"libc","function_name":"seekdir"},"1613":{"probe_name":"libc","function_name":"seed48"},"1612":{"probe_name":"libc","function_name":"scopecmp"},"1611":{"probe_name":"libc","function_name":"scanf"},"1610":{"probe_name":"libc","function_name":"scandirat64"},"1609":{"probe_name":"libc","function_name":"scandirat"},"1608":{"probe_name":"libc","function_name":"scandir64"},"1607":{"probe_name":"libc","function_name":"scandir"},"1606":{"probe_name":"libc","function_name":"scalbnl"},"1605":{"probe_name":"libc","function_name":"scalbnf64x"},"1604":{"probe_name":"libc","function_name":"scalbnf64"},"1603":{"probe_name":"libc","function_name":"scalbnf32x"},"1602":{"probe_name":"libc","function_name":"scalbnf32"},"1601":{"probe_name":"libc","function_name":"scalbnf128"},"1600":{"probe_name":"libc","function_name":"scalbnf"},"1599":{"probe_name":"libc","function_name":"scalbn"},"1598":{"probe_name":"libc","function_name":"sbrk"},"1597":{"probe_name":"libc","function_name":"ruserpass"},"1596":{"probe_name":"libc","function_name":"ruserok"},"1595":{"probe_name":"libc","function_name":"rresvport"},"1594":{"probe_name":"libc","function_name":"rpmatch"},"1593":{"probe_name":"libc","function_name":"rmdir"},"1592":{"probe_name":"libc","function_name":"rexec"},"1591":{"probe_name":"libc","function_name":"rewinddir"},"1590":{"probe_name":"libc","function_name":"rewind"},"1589":{"probe_name":"libc","function_name":"revoke"},"1588":{"probe_name":"libc","function_name":"reopen"},"1587":{"probe_name":"libc","function_name":"renameat2"},"1586":{"probe_name":"libc","function_name":"renameat"},"1585":{"probe_name":"libc","function_name":"rename"},"1584":{"probe_name":"libc","function_name":"remque"},"1583":{"probe_name":"libc","function_name":"removexattr"},"1582":{"probe_name":"libc","function_name":"remove"},"1581":{"probe_name":"libc","function_name":"regfree"},"1580":{"probe_name":"libc","function_name":"regerror"},"1579":{"probe_name":"libc","function_name":"regcomp"},"1578":{"probe_name":"libc","function_name":"recvmsg"},"1577":{"probe_name":"libc","function_name":"recvmmsg"},"1576":{"probe_name":"libc","function_name":"recvfrom"},"1575":{"probe_name":"libc","function_name":"recv"},"1574":{"probe_name":"libc","function_name":"reboot"},"1573":{"probe_name":"libc","function_name":"reallocarray"},"1572":{"probe_name":"libc","function_name":"realloc"},"1571":{"probe_name":"libc","function_name":"readv"},"1570":{"probe_name":"libc","function_name":"readunix:0x147810"},"1569":{"probe_name":"libc","function_name":"readunix:0x146e50"},"1568":{"probe_name":"libc","function_name":"readtcp:0x14cc30"},"1567":{"probe_name":"libc","function_name":"readtcp:0x1497e0"},"1566":{"probe_name":"libc","function_name":"readlinkat"},"1565":{"probe_name":"libc","function_name":"readlink"},"1564":{"probe_name":"libc","function_name":"readdir64"},"1563":{"probe_name":"libc","function_name":"readdir"},"1562":{"probe_name":"libc","function_name":"readahead"},"1561":{"probe_name":"libc","function_name":"read"},"1560":{"probe_name":"libc","function_name":"rcmd"},"1559":{"probe_name":"libc","function_name":"random"},"1558":{"probe_name":"libc","function_name":"rand"},"1557":{"probe_name":"libc","function_name":"raise"},"1556":{"probe_name":"libc","function_name":"quotactl"},"1555":{"probe_name":"libc","function_name":"qsort"},"1554":{"probe_name":"libc","function_name":"qgcvt"},"1553":{"probe_name":"libc","function_name":"qfcvt"},"1552":{"probe_name":"libc","function_name":"qecvt"},"1551":{"probe_name":"libc","function_name":"pwritev64v2"},"1550":{"probe_name":"libc","function_name":"pwritev64"},"1549":{"probe_name":"libc","function_name":"pwritev2"},"1548":{"probe_name":"libc","function_name":"pwritev"},"1547":{"probe_name":"libc","function_name":"pwrite64"},"1546":{"probe_name":"libc","function_name":"pwrite"},"1545":{"probe_name":"libc","function_name":"pvalloc"},"1544":{"probe_name":"libc","function_name":"putwchar"},"1543":{"probe_name":"libc","function_name":"putwc"},"1542":{"probe_name":"libc","function_name":"putw"},"1541":{"probe_name":"libc","function_name":"pututxline"},"1540":{"probe_name":"libc","function_name":"pututline"},"1539":{"probe_name":"libc","function_name":"putspent"},"1538":{"probe_name":"libc","function_name":"putsgent"},"1253":{"probe_name":"libc","function_name":"gethostbyname"},"1252":{"probe_name":"libc","function_name":"gethostbyaddr"},"1251":{"probe_name":"libc","function_name":"getgroups"},"1250":{"probe_name":"libc","function_name":"getgrouplist"},"1249":{"probe_name":"libc","function_name":"getgrnam"},"1248":{"probe_name":"libc","function_name":"getgrgid"},"1247":{"probe_name":"libc","function_name":"getgrent"},"1246":{"probe_name":"libc","function_name":"getgid"},"1245":{"probe_name":"libc","function_name":"getfsspec"},"1244":{"probe_name":"libc","function_name":"getfsfile"},"1243":{"probe_name":"libc","function_name":"getfsent"},"1242":{"probe_name":"libc","function_name":"geteuid"},"1241":{"probe_name":"libc","function_name":"getenv"},"1240":{"probe_name":"libc","function_name":"getentropy"},"1239":{"probe_name":"libc","function_name":"getegid"},"1238":{"probe_name":"libc","function_name":"getdtablesize"},"1237":{"probe_name":"libc","function_name":"getdomainname"},"1236":{"probe_name":"libc","function_name":"getdirentries64"},"1235":{"probe_name":"libc","function_name":"getdirentries"},"1234":{"probe_name":"libc","function_name":"getdents64"},"1233":{"probe_name":"libc","function_name":"getdelim"},"1232":{"probe_name":"libc","function_name":"getdate"},"1231":{"probe_name":"libc","function_name":"getcwd"},"1230":{"probe_name":"libc","function_name":"getcpu"},"1229":{"probe_name":"libc","function_name":"getcontext"},"1228":{"probe_name":"libc","function_name":"getchar"},"1227":{"probe_name":"libc","function_name":"getc"},"1226":{"probe_name":"libc","function_name":"getauxval"},"1225":{"probe_name":"libc","function_name":"getaliasent"},"1224":{"probe_name":"libc","function_name":"getaliasbyname"},"1223":{"probe_name":"libc","function_name":"getaddrinfo"},"1222":{"probe_name":"libc","function_name":"gcvt"},"1221":{"probe_name":"libc","function_name":"fwscanf"},"1220":{"probe_name":"libc","function_name":"fwrite"},"1219":{"probe_name":"libc","function_name":"fwprintf"},"1218":{"probe_name":"libc","function_name":"fwide"},"1217":{"probe_name":"libc","function_name":"funlockfile"},"1216":{"probe_name":"libc","function_name":"ftw64"},"1215":{"probe_name":"libc","function_name":"ftw"},"1214":{"probe_name":"libc","function_name":"ftrylockfile"},"1213":{"probe_name":"libc","function_name":"ftruncate64"},"1212":{"probe_name":"libc","function_name":"ftruncate"},"1211":{"probe_name":"libc","function_name":"ftok"},"1210":{"probe_name":"libc","function_name":"ftello64"},"1209":{"probe_name":"libc","function_name":"ftello"},"1208":{"probe_name":"libc","function_name":"ftell"},"1207":{"probe_name":"libc","function_name":"fsync"},"1206":{"probe_name":"libc","function_name":"fstatvfs64"},"1205":{"probe_name":"libc","function_name":"fstatvfs"},"1204":{"probe_name":"libc","function_name":"fstatfs64"},"1203":{"probe_name":"libc","function_name":"fstatfs"},"1202":{"probe_name":"libc","function_name":"fstatat64"},"1201":{"probe_name":"libc","function_name":"fstatat"},"1200":{"probe_name":"libc","function_name":"fstat64"},"1199":{"probe_name":"libc","function_name":"fstat"},"1198":{"probe_name":"libc","function_name":"fsetxattr"},"1197":{"probe_name":"libc","function_name":"fseeko64"},"1196":{"probe_name":"libc","function_name":"fseeko"},"1195":{"probe_name":"libc","function_name":"fseek"},"1194":{"probe_name":"libc","function_name":"fscanf"},"1193":{"probe_name":"libc","function_name":"frexpl"},"1192":{"probe_name":"libc","function_name":"frexpf64x"},"1191":{"probe_name":"libc","function_name":"frexpf64"},"1190":{"probe_name":"libc","function_name":"frexpf32x"},"1189":{"probe_name":"libc","function_name":"frexpf32"},"1188":{"probe_name":"libc","function_name":"frexpf128"},"1187":{"probe_name":"libc","function_name":"frexpf"},"1186":{"probe_name":"libc","function_name":"frexp"},"1185":{"probe_name":"libc","function_name":"freopen64"},"1184":{"probe_name":"libc","function_name":"freopen"},"1183":{"probe_name":"libc","function_name":"fremovexattr"},"1182":{"probe_name":"libc","function_name":"freeres"},"1181":{"probe_name":"libc","function_name":"freelocale"},"1180":{"probe_name":"libc","function_name":"freeifaddrs"},"1179":{"probe_name":"libc","function_name":"freecache"},"1178":{"probe_name":"libc","function_name":"freeaddrinfo"},"1177":{"probe_name":"libc","function_name":"free"},"1176":{"probe_name":"libc","function_name":"fread"},"1175":{"probe_name":"libc","function_name":"fputws"},"1174":{"probe_name":"libc","function_name":"fputwc"},"1173":{"probe_name":"libc","function_name":"fputs"},"1172":{"probe_name":"libc","function_name":"fputc"},"1171":{"probe_name":"libc","function_name":"fprintf"},"1170":{"probe_name":"libc","function_name":"fpathconf"},"1169":{"probe_name":"libc","function_name":"fork"},"1168":{"probe_name":"libc","function_name":"fopen64"},"1167":{"probe_name":"libc","function_name":"fmtmsg"},"1166":{"probe_name":"libc","function_name":"flockfile"},"1165":{"probe_name":"libc","function_name":"flock"},"1164":{"probe_name":"libc","function_name":"flistxattr"},"1163":{"probe_name":"libc","function_name":"finitel"},"1162":{"probe_name":"libc","function_name":"finitef"},"1161":{"probe_name":"libc","function_name":"finite"},"1160":{"probe_name":"libc","function_name":"fini"},"1159":{"probe_name":"libc","function_name":"fileno"},"1158":{"probe_name":"libc","function_name":"fgetxattr"},"1157":{"probe_name":"libc","function_name":"fgetws"},"1156":{"probe_name":"libc","function_name":"fgetwc"},"1155":{"probe_name":"libc","function_name":"fgetspent"},"1154":{"probe_name":"libc","function_name":"fgetsgent"},"1153":{"probe_name":"libc","function_name":"fgets"},"1152":{"probe_name":"libc","function_name":"fgetpwent"},"1151":{"probe_name":"libc","function_name":"fgetgrent"},"1150":{"probe_name":"libc","function_name":"fgetc"},"1149":{"probe_name":"libc","function_name":"ffsll"},"1148":{"probe_name":"libc","function_name":"ffsl"},"1147":{"probe_name":"libc","function_name":"ffs"},"1146":{"probe_name":"libc","function_name":"fflush"},"1145":{"probe_name":"libc","function_name":"fexecve"},"1144":{"probe_name":"libc","function_name":"ferror"},"1143":{"probe_name":"libc","function_name":"feof"},"1142":{"probe_name":"libc","function_name":"fdopendir"},"1141":{"probe_name":"libc","function_name":"fdatasync"},"1140":{"probe_name":"libc","function_name":"fcvt"},"1139":{"probe_name":"libc","function_name":"fcntl64"},"1138":{"probe_name":"libc","function_name":"fcntl"},"1137":{"probe_name":"libc","function_name":"fcloseall"},"1136":{"probe_name":"libc","function_name":"fchownat"},"1135":{"probe_name":"libc","function_name":"fchown"},"1134":{"probe_name":"libc","function_name":"fchmodat"},"1133":{"probe_name":"libc","function_name":"fchmod"},"1132":{"probe_name":"libc","function_name":"fchflags"},"1131":{"probe_name":"libc","function_name":"fchdir"},"1130":{"probe_name":"libc","function_name":"fallocate64"},"1129":{"probe_name":"libc","function_name":"fallocate"},"1128":{"probe_name":"libc","function_name":"faccessat"},"1127":{"probe_name":"libc","function_name":"exit"},"1126":{"probe_name":"libc","function_name":"execvpe"},"1125":{"probe_name":"libc","function_name":"execvp"},"1124":{"probe_name":"libc","function_name":"execveat"},"1055":{"probe_name":"libc","function_name":"clock"},"1054":{"probe_name":"libc","function_name":"clearerr"},"1053":{"probe_name":"libc","function_name":"clearenv"},"1052":{"probe_name":"libc","function_name":"cleanup:0x943c0"},"1051":{"probe_name":"libc","function_name":"cleanup:0x8ba90"},"1050":{"probe_name":"libc","function_name":"chroot"},"1049":{"probe_name":"libc","function_name":"chown"},"1048":{"probe_name":"libc","function_name":"chmod"},"1047":{"probe_name":"libc","function_name":"chflags"},"1046":{"probe_name":"libc","function_name":"chdir"},"1045":{"probe_name":"libc","function_name":"cfsetspeed"},"1044":{"probe_name":"libc","function_name":"cfsetospeed"},"1043":{"probe_name":"libc","function_name":"cfsetispeed"},"1042":{"probe_name":"libc","function_name":"cfmakeraw"},"1041":{"probe_name":"libc","function_name":"cfgetospeed"},"1040":{"probe_name":"libc","function_name":"cfgetispeed"},"1039":{"probe_name":"libc","function_name":"catopen"},"1038":{"probe_name":"libc","function_name":"catgets"},"1037":{"probe_name":"libc","function_name":"catclose"},"1036":{"probe_name":"libc","function_name":"capset"},"1035":{"probe_name":"libc","function_name":"capget"},"1034":{"probe_name":"libc","function_name":"calloc"},"1033":{"probe_name":"libc","function_name":"callback"},"1032":{"probe_name":"libc","function_name":"c32rtomb"},"1031":{"probe_name":"libc","function_name":"c16rtomb"},"1027":{"probe_name":"libc","function_name":"brk"},"1026":{"probe_name":"libc","function_name":"bindtextdomain"},"1009":{"probe_name":"libc","function_name":"alarm"},"1008":{"probe_name":"libc","function_name":"addseverity"},"1007":{"probe_name":"libc","function_name":"addmntent"},"1006":{"probe_name":"libc","function_name":"acct"},"1000":{"probe_name":"libc","function_name":"a64l"},"1005":{"probe_name":"libc","function_name":"access"},"1030":{"probe_name":"libc","function_name":"bzero"},"1084":{"probe_name":"libc","function_name":"div"},"1018":{"probe_name":"libc","function_name":"atol"},"1017":{"probe_name":"libc","function_name":"atoi"},"1029":{"probe_name":"libc","function_name":"btowc"},"1083":{"probe_name":"libc","function_name":"dirname"},"1002":{"probe_name":"libc","function_name":"abs"},"1004":{"probe_name":"libc","function_name":"accept4"},"1016":{"probe_name":"libc","function_name":"atof"},"1028":{"probe_name":"libc","function_name":"bsearch"},"1082":{"probe_name":"libc","function_name":"dirfd"},"1001":{"probe_name":"libc","function_name":"abort"},"1003":{"probe_name":"libc","function_name":"accept"},"1015":{"probe_name":"libc","function_name":"asprintf"},"1010":{"probe_name":"libc","function_name":"allocate:0x105510"},"1011":{"probe_name":"libc","function_name":"allocate:0x122220"},"1012":{"probe_name":"libc","function_name":"alphasort"},"1013":{"probe_name":"libc","function_name":"alphasort64"},"1014":{"probe_name":"libc","function_name":"arg"},"1019":{"probe_name":"libc","function_name":"atoll"},"1020":{"probe_name":"libc","function_name":"backtrace"},"1021":{"probe_name":"libc","function_name":"basename"},"1022":{"probe_name":"libc","function_name":"bcopy"},"1023":{"probe_name":"libc","function_name":"bin2hex"},"1024":{"probe_name":"libc","function_name":"bind"},"1025":{"probe_name":"libc","function_name":"bindresvport"},"1056":{"probe_name":"libc","function_name":"clone"},"1057":{"probe_name":"libc","function_name":"clone3"},"1058":{"probe_name":"libc","function_name":"close"},"1059":{"probe_name":"libc","function_name":"closedir"},"1060":{"probe_name":"libc","function_name":"closefrom"},"1061":{"probe_name":"libc","function_name":"closelog"},"1062":{"probe_name":"libc","function_name":"comma"},"1063":{"probe_name":"libc","function_name":"confstr"},"1064":{"probe_name":"libc","function_name":"connect"},"1065":{"probe_name":"libc","function_name":"copysign"},"1066":{"probe_name":"libc","function_name":"copysignf"},"1067":{"probe_name":"libc","function_name":"copysignf128"},"1068":{"probe_name":"libc","function_name":"copysignf32"},"1069":{"probe_name":"libc","function_name":"copysignf32x"},"1070":{"probe_name":"libc","function_name":"copysignf64"},"1071":{"probe_name":"libc","function_name":"copysignf64x"},"1072":{"probe_name":"libc","function_name":"copysignl"},"1073":{"probe_name":"libc","function_name":"creat"},"1074":{"probe_name":"libc","function_name":"creat64"},"1075":{"probe_name":"libc","function_name":"ctermid"},"1076":{"probe_name":"libc","function_name":"cuserid"},"1077":{"probe_name":"libc","function_name":"daemon"},"1078":{"probe_name":"libc","function_name":"dcgettext"},"1079":{"probe_name":"libc","function_name":"dcngettext"},"1080":{"probe_name":"libc","function_name":"deallocate"},"1081":{"probe_name":"libc","function_name":"dgettext"},"1085":{"probe_name":"libc","function_name":"dngettext"},"1086":{"probe_name":"libc","function_name":"dprintf"},"1087":{"probe_name":"libc","function_name":"drand48"},"1088":{"probe_name":"libc","function_name":"dup"},"1089":{"probe_name":"libc","function_name":"dup2"},"1090":{"probe_name":"libc","function_name":"dup3"},"1091":{"probe_name":"libc","function_name":"duplocale"},"1092":{"probe_name":"libc","function_name":"dysize"},"1093":{"probe_name":"libc","function_name":"eaccess"},"1094":{"probe_name":"libc","function_name":"ecvt"},"1095":{"probe_name":"libc","function_name":"endaliasent"},"1096":{"probe_name":"libc","function_name":"endfsent"},"1097":{"probe_name":"libc","function_name":"endgrent"},"1098":{"probe_name":"libc","function_name":"endhostent"},"1099":{"probe_name":"libc","function_name":"endmntent"},"1100":{"probe_name":"libc","function_name":"endnetent"},"1101":{"probe_name":"libc","function_name":"endnetgrent"},"1102":{"probe_name":"libc","function_name":"endprotoent"},"1103":{"probe_name":"libc","function_name":"endpwent"},"1104":{"probe_name":"libc","function_name":"endrpcent"},"1105":{"probe_name":"libc","function_name":"endservent"},"1106":{"probe_name":"libc","function_name":"endsgent"},"1107":{"probe_name":"libc","function_name":"endspent"},"1108":{"probe_name":"libc","function_name":"endttyent"},"0":{"probe_name":"M","function_name":"SH"},"1109":{"probe_name":"libc","function_name":"endusershell"},"1":{"probe_name":"DC","function_name":"start"},"1110":{"probe_name":"libc","function_name":"endutent"},"2":{"probe_name":"DC","function_name":"end"},"1111":{"probe_name":"libc","function_name":"endutxent"},"1112":{"probe_name":"libc","function_name":"erand48"},"1113":{"probe_name":"libc","function_name":"err"},"1114":{"probe_name":"libc","function_name":"error"},"1115":{"probe_name":"libc","function_name":"errx"},"1116":{"probe_name":"libc","function_name":"euidaccess"},"1117":{"probe_name":"libc","function_name":"eventfd"},"1118":{"probe_name":"libc","function_name":"exchange"},"1119":{"probe_name":"libc","function_name":"execl"},"1120":{"probe_name":"libc","function_name":"execle"},"1121":{"probe_name":"libc","function_name":"execlp"},"1122":{"probe_name":"libc","function_name":"execv"},"1123":{"probe_name":"libc","function_name":"execve"},"1254":{"probe_name":"libc","function_name":"gethostbyname2"},"1255":{"probe_name":"libc","function_name":"gethostent"},"1256":{"probe_name":"libc","function_name":"gethostid"},"1257":{"probe_name":"libc","function_name":"gethostname"},"1258":{"probe_name":"libc","function_name":"gethosts"},"1259":{"probe_name":"libc","function_name":"getifaddrs"},"1260":{"probe_name":"libc","function_name":"getipv4sourcefilter"},"1261":{"probe_name":"libc","function_name":"getline"},"1262":{"probe_name":"libc","function_name":"getloadavg"},"1263":{"probe_name":"libc","function_name":"getlogin"},"1264":{"probe_name":"libc","function_name":"getmntent"},"1265":{"probe_name":"libc","function_name":"getnameinfo"},"1266":{"probe_name":"libc","function_name":"getnetbyaddr"},"1267":{"probe_name":"libc","function_name":"getnetbyname"},"1268":{"probe_name":"libc","function_name":"getnetent"},"1269":{"probe_name":"libc","function_name":"getnetgrent"},"1270":{"probe_name":"libc","function_name":"getopt"},"1271":{"probe_name":"libc","function_name":"getpagesize"},"1272":{"probe_name":"libc","function_name":"getpass"},"1273":{"probe_name":"libc","function_name":"getpeername"},"1274":{"probe_name":"libc","function_name":"getpgid"},"1275":{"probe_name":"libc","function_name":"getpgrp"},"1276":{"probe_name":"libc","function_name":"getpid"},"1277":{"probe_name":"libc","function_name":"getppid"},"1278":{"probe_name":"libc","function_name":"getpriority"},"1279":{"probe_name":"libc","function_name":"getprotobyname"},"1280":{"probe_name":"libc","function_name":"getprotobynumber"},"1281":{"probe_name":"libc","function_name":"getprotoent"},"1282":{"probe_name":"libc","function_name":"getpt"},"1283":{"probe_name":"libc","function_name":"getpw"},"1284":{"probe_name":"libc","function_name":"getpwent"},"1285":{"probe_name":"libc","function_name":"getpwnam"},"1286":{"probe_name":"libc","function_name":"getpwuid"},"1287":{"probe_name":"libc","function_name":"getrandom"},"1288":{"probe_name":"libc","function_name":"getresgid"},"1289":{"probe_name":"libc","function_name":"getresuid"},"1290":{"probe_name":"libc","function_name":"getrlimit"},"1291":{"probe_name":"libc","function_name":"getrlimit64"},"1292":{"probe_name":"libc","function_name":"getrpcbyname"},"1293":{"probe_name":"libc","function_name":"getrpcbynumber"},"1294":{"probe_name":"libc","function_name":"getrpcent"},"1295":{"probe_name":"libc","function_name":"getrusage"},"1296":{"probe_name":"libc","function_name":"gets"},"1297":{"probe_name":"libc","function_name":"getservbyname"},"1298":{"probe_name":"libc","function_name":"getservbyport"},"1299":{"probe_name":"libc","function_name":"getservent"},"1300":{"probe_name":"libc","function_name":"getsgent"},"1301":{"probe_name":"libc","function_name":"getsid"},"1302":{"probe_name":"libc","function_name":"getsockname"},"1303":{"probe_name":"libc","function_name":"getsockopt"},"1304":{"probe_name":"libc","function_name":"getsourcefilter"},"1305":{"probe_name":"libc","function_name":"getspent"},"1306":{"probe_name":"libc","function_name":"getspnam"},"1307":{"probe_name":"libc","function_name":"getsubopt"},"1308":{"probe_name":"libc","function_name":"gettext"},"1309":{"probe_name":"libc","function_name":"gettid"},"1310":{"probe_name":"libc","function_name":"getttyent"},"1311":{"probe_name":"libc","function_name":"getttynam"},"1312":{"probe_name":"libc","function_name":"getuid"},"1313":{"probe_name":"libc","function_name":"getusershell"},"1314":{"probe_name":"libc","function_name":"getutent"},"1315":{"probe_name":"libc","function_name":"getutid"},"1316":{"probe_name":"libc","function_name":"getutline"},"1317":{"probe_name":"libc","function_name":"getutmp"},"1318":{"probe_name":"libc","function_name":"getutmpx"},"1319":{"probe_name":"libc","function_name":"getutxent"},"1320":{"probe_name":"libc","function_name":"getutxid"},"1321":{"probe_name":"libc","function_name":"getutxline"},"1322":{"probe_name":"libc","function_name":"getw"},"1323":{"probe_name":"libc","function_name":"getwc"},"1324":{"probe_name":"libc","function_name":"getwchar"},"1325":{"probe_name":"libc","function_name":"getwd"},"1326":{"probe_name":"libc","function_name":"getxattr"},"1327":{"probe_name":"libc","function_name":"globfree"},"1328":{"probe_name":"libc","function_name":"globfree64"},"1329":{"probe_name":"libc","function_name":"gtty"},"1330":{"probe_name":"libc","function_name":"hcreate"},"1331":{"probe_name":"libc","function_name":"hdestroy"},"1332":{"probe_name":"libc","function_name":"herror"},"1333":{"probe_name":"libc","function_name":"hex2bin"},"1334":{"probe_name":"libc","function_name":"hsearch"},"1335":{"probe_name":"libc","function_name":"hstrerror"},"1336":{"probe_name":"libc","function_name":"htonl"},"1337":{"probe_name":"libc","function_name":"htons"},"1338":{"probe_name":"libc","function_name":"iconv"},"1339":{"probe_name":"libc","function_name":"imaxabs"},"1340":{"probe_name":"libc","function_name":"imaxdiv"},"1341":{"probe_name":"libc","function_name":"in6aicmp"},"1342":{"probe_name":"libc","function_name":"init"},"1343":{"probe_name":"libc","function_name":"initgroups"},"1344":{"probe_name":"libc","function_name":"initshells"},"1345":{"probe_name":"libc","function_name":"initstate"},"1346":{"probe_name":"libc","function_name":"innetgr"},"1347":{"probe_name":"libc","function_name":"insert.part.0"},"1348":{"probe_name":"libc","function_name":"insque"},"1349":{"probe_name":"libc","function_name":"ioctl"},"1350":{"probe_name":"libc","function_name":"ioperm"},"1351":{"probe_name":"libc","function_name":"iopl"},"1352":{"probe_name":"libc","function_name":"iruserfopen"},"1353":{"probe_name":"libc","function_name":"iruserok"},"1354":{"probe_name":"libc","function_name":"isalnum"},"1355":{"probe_name":"libc","function_name":"isalpha"},"1356":{"probe_name":"libc","function_name":"isascii"},"1357":{"probe_name":"libc","function_name":"isatty"},"1358":{"probe_name":"libc","function_name":"isblank"},"1359":{"probe_name":"libc","function_name":"iscntrl"},"1360":{"probe_name":"libc","function_name":"isctype"},"1361":{"probe_name":"libc","function_name":"isdigit"},"1362":{"probe_name":"libc","function_name":"isfdtype"},"1363":{"probe_name":"libc","function_name":"isgraph"},"1364":{"probe_name":"libc","function_name":"isinf"},"1365":{"probe_name":"libc","function_name":"isinff"},"1366":{"probe_name":"libc","function_name":"isinfl"},"1367":{"probe_name":"libc","function_name":"islower"},"1368":{"probe_name":"libc","function_name":"isnan"},"1369":{"probe_name":"libc","function_name":"isnanf"},"1370":{"probe_name":"libc","function_name":"isnanl"},"1371":{"probe_name":"libc","function_name":"isprint"},"1372":{"probe_name":"libc","function_name":"ispunct"},"1373":{"probe_name":"libc","function_name":"isspace"},"1374":{"probe_name":"libc","function_name":"isupper"},"1375":{"probe_name":"libc","function_name":"iswalnum"},"1376":{"probe_name":"libc","function_name":"iswalpha"},"1377":{"probe_name":"libc","function_name":"iswblank"},"1378":{"probe_name":"libc","function_name":"iswcntrl"},"1379":{"probe_name":"libc","function_name":"iswctype"},"1380":{"probe_name":"libc","function_name":"iswdigit"},"1381":{"probe_name":"libc","function_name":"iswgraph"},"1382":{"probe_name":"libc","function_name":"iswlower"},"1383":{"probe_name":"libc","function_name":"iswprint"},"1384":{"probe_name":"libc","function_name":"iswpunct"},"1385":{"probe_name":"libc","function_name":"iswspace"},"1386":{"probe_name":"libc","function_name":"iswupper"},"1387":{"probe_name":"libc","function_name":"iswxdigit"},"1388":{"probe_name":"libc","function_name":"isxdigit"},"1389":{"probe_name":"libc","function_name":"jrand48"},"1390":{"probe_name":"libc","function_name":"kill"},"1391":{"probe_name":"libc","function_name":"killpg"},"1392":{"probe_name":"libc","function_name":"klogctl"},"1393":{"probe_name":"libc","function_name":"l64a"},"1394":{"probe_name":"libc","function_name":"labs"},"1395":{"probe_name":"libc","function_name":"lchmod"},"1396":{"probe_name":"libc","function_name":"lchown"},"1397":{"probe_name":"libc","function_name":"lckpwdf"},"1398":{"probe_name":"libc","function_name":"lcong48"},"1399":{"probe_name":"libc","function_name":"ldexp"},"1400":{"probe_name":"libc","function_name":"ldexpf"},"1401":{"probe_name":"libc","function_name":"ldexpf128"},"1402":{"probe_name":"libc","function_name":"ldexpf32"},"1403":{"probe_name":"libc","function_name":"ldexpf32x"},"1404":{"probe_name":"libc","function_name":"ldexpf64"},"1405":{"probe_name":"libc","function_name":"ldexpf64x"},"1406":{"probe_name":"libc","function_name":"ldexpl"},"1407":{"probe_name":"libc","function_name":"ldiv"},"1408":{"probe_name":"libc","function_name":"lfind"},"1409":{"probe_name":"libc","function_name":"lgetxattr"},"1410":{"probe_name":"libc","function_name":"link"},"1411":{"probe_name":"libc","function_name":"linkat"},"1412":{"probe_name":"libc","function_name":"listen"},"1413":{"probe_name":"libc","function_name":"listxattr"},"1414":{"probe_name":"libc","function_name":"llabs"},"1415":{"probe_name":"libc","function_name":"lldiv"},"1416":{"probe_name":"libc","function_name":"llistxattr"},"1417":{"probe_name":"libc","function_name":"lockf"},"1418":{"probe_name":"libc","function_name":"lockf64"},"1419":{"probe_name":"libc","function_name":"longjmp"},"1420":{"probe_name":"libc","function_name":"lrand48"},"1421":{"probe_name":"libc","function_name":"lremovexattr"},"1422":{"probe_name":"libc","function_name":"lsearch"},"1423":{"probe_name":"libc","function_name":"lseek"},"1424":{"probe_name":"libc","function_name":"lseek64"},"1425":{"probe_name":"libc","function_name":"lsetxattr"},"1426":{"probe_name":"libc","function_name":"lstat"},"1427":{"probe_name":"libc","function_name":"lstat64"},"1428":{"probe_name":"libc","function_name":"madvise"},"1429":{"probe_name":"libc","function_name":"makecontext"},"1430":{"probe_name":"libc","function_name":"mallinfo"},"1431":{"probe_name":"libc","function_name":"mallinfo2"},"1432":{"probe_name":"libc","function_name":"malloc"},"1433":{"probe_name":"libc","function_name":"mallopt"},"1434":{"probe_name":"libc","function_name":"mblen"},"1435":{"probe_name":"libc","function_name":"mbrlen"},"1436":{"probe_name":"libc","function_name":"mbrtoc16"},"1437":{"probe_name":"libc","function_name":"mbrtoc32"},"1438":{"probe_name":"libc","function_name":"mbrtowc"},"1439":{"probe_name":"libc","function_name":"mbsinit"},"1440":{"probe_name":"libc","function_name":"mbsnrtowcs"},"1441":{"probe_name":"libc","function_name":"mbsrtowcs"},"1442":{"probe_name":"libc","function_name":"mbstowcs"},"1443":{"probe_name":"libc","function_name":"mbtowc"},"1444":{"probe_name":"libc","function_name":"mcheck"},"1445":{"probe_name":"libc","function_name":"mcount"},"1446":{"probe_name":"libc","function_name":"memalign"},"1447":{"probe_name":"libc","function_name":"memccpy"},"1448":{"probe_name":"libc","function_name":"memfrob"},"1449":{"probe_name":"libc","function_name":"memmem"},"1450":{"probe_name":"libc","function_name":"mincore"},"1451":{"probe_name":"libc","function_name":"mkdir"},"1452":{"probe_name":"libc","function_name":"mkdirat"},"1453":{"probe_name":"libc","function_name":"mkdtemp"},"1454":{"probe_name":"libc","function_name":"mkfifo"},"1455":{"probe_name":"libc","function_name":"mkfifoat"},"1456":{"probe_name":"libc","function_name":"mknod"},"1457":{"probe_name":"libc","function_name":"mknodat"},"1458":{"probe_name":"libc","function_name":"mkostemp"},"1459":{"probe_name":"libc","function_name":"mkostemp64"},"1460":{"probe_name":"libc","function_name":"mkostemps"},"1461":{"probe_name":"libc","function_name":"mkostemps64"},"1462":{"probe_name":"libc","function_name":"mkstemp"},"1463":{"probe_name":"libc","function_name":"mkstemp64"},"1464":{"probe_name":"libc","function_name":"mkstemps"},"1465":{"probe_name":"libc","function_name":"mkstemps64"},"1466":{"probe_name":"libc","function_name":"mktemp"},"1467":{"probe_name":"libc","function_name":"mlock"},"1468":{"probe_name":"libc","function_name":"mlock2"},"1469":{"probe_name":"libc","function_name":"mlockall"},"1470":{"probe_name":"libc","function_name":"mmap"},"1471":{"probe_name":"libc","function_name":"mmap64"},"1472":{"probe_name":"libc","function_name":"modf"},"1473":{"probe_name":"libc","function_name":"modff"},"1474":{"probe_name":"libc","function_name":"modff128"},"1475":{"probe_name":"libc","function_name":"modff32"},"1476":{"probe_name":"libc","function_name":"modff32x"},"1477":{"probe_name":"libc","function_name":"modff64"},"1478":{"probe_name":"libc","function_name":"modff64x"},"1479":{"probe_name":"libc","function_name":"modfl"},"1480":{"probe_name":"libc","function_name":"moncontrol"},"1481":{"probe_name":"libc","function_name":"monstartup"},"1482":{"probe_name":"libc","function_name":"mount"},"1483":{"probe_name":"libc","function_name":"mprobe"},"1484":{"probe_name":"libc","function_name":"mprotect"},"1485":{"probe_name":"libc","function_name":"mrand48"},"1486":{"probe_name":"libc","function_name":"mremap"},"1487":{"probe_name":"libc","function_name":"msgget"},"1488":{"probe_name":"libc","function_name":"msgrcv"},"1489":{"probe_name":"libc","function_name":"msgsnd"},"1490":{"probe_name":"libc","function_name":"msync"},"1491":{"probe_name":"libc","function_name":"mtrace"},"1492":{"probe_name":"libc","function_name":"munlock"},"1493":{"probe_name":"libc","function_name":"munlockall"},"1494":{"probe_name":"libc","function_name":"munmap"},"1495":{"probe_name":"libc","function_name":"muntrace"},"1496":{"probe_name":"libc","function_name":"nanosleep"},"1497":{"probe_name":"libc","function_name":"newlocale"},"1498":{"probe_name":"libc","function_name":"ngettext"},"1499":{"probe_name":"libc","function_name":"nice"},"1500":{"probe_name":"libc","function_name":"nrand48"},"1501":{"probe_name":"libc","function_name":"ntohl"},"1502":{"probe_name":"libc","function_name":"ntohs"},"1503":{"probe_name":"libc","function_name":"open"},"1504":{"probe_name":"libc","function_name":"open64"},"1505":{"probe_name":"libc","function_name":"openat"},"1506":{"probe_name":"libc","function_name":"openat64"},"1507":{"probe_name":"libc","function_name":"opendir"},"1508":{"probe_name":"libc","function_name":"openlog"},"1509":{"probe_name":"libc","function_name":"pathconf"},"1510":{"probe_name":"libc","function_name":"pause"},"1511":{"probe_name":"libc","function_name":"pcmp"},"1512":{"probe_name":"libc","function_name":"perror"},"1513":{"probe_name":"libc","function_name":"personality"},"1514":{"probe_name":"libc","function_name":"pipe"},"1515":{"probe_name":"libc","function_name":"pipe2"},"1516":{"probe_name":"libc","function_name":"prctl"},"1517":{"probe_name":"libc","function_name":"pread"},"1518":{"probe_name":"libc","function_name":"pread64"},"1519":{"probe_name":"libc","function_name":"preadv"},"1520":{"probe_name":"libc","function_name":"preadv2"},"1521":{"probe_name":"libc","function_name":"preadv64"},"1522":{"probe_name":"libc","function_name":"preadv64v2"},"1523":{"probe_name":"libc","function_name":"prefixcmp"},"1524":{"probe_name":"libc","function_name":"printf"},"1525":{"probe_name":"libc","function_name":"prlimit"},"1526":{"probe_name":"libc","function_name":"prlimit64"},"1527":{"probe_name":"libc","function_name":"profil"},"1528":{"probe_name":"libc","function_name":"pselect"},"1529":{"probe_name":"libc","function_name":"psiginfo"},"1530":{"probe_name":"libc","function_name":"ptrace"},"1531":{"probe_name":"libc","function_name":"ptsname"},"1532":{"probe_name":"libc","function_name":"putc"},"1533":{"probe_name":"libc","function_name":"putchar"},"1534":{"probe_name":"libc","function_name":"putenv"},"1535":{"probe_name":"libc","function_name":"putgrent"},"1536":{"probe_name":"libc","function_name":"putpwent"},"1537":{"probe_name":"libc","function_name":"puts"}} diff --git a/etc/datacrumbs/data/categories-haridev-lead.json b/etc/datacrumbs/data/categories-haridev-lead.json deleted file mode 100644 index bacb22c5..00000000 --- a/etc/datacrumbs/data/categories-haridev-lead.json +++ /dev/null @@ -1 +0,0 @@ -{"11869":{"probe_name":"ior","function_name":"updateParsedOptions"},"11868":{"probe_name":"ior","function_name":"test_time_elapsed"},"11867":{"probe_name":"ior","function_name":"string_to_bytes"},"11866":{"probe_name":"ior","function_name":"set_o_direct_flag"},"11865":{"probe_name":"ior","function_name":"safeMalloc"},"11864":{"probe_name":"ior","function_name":"register_tm_clones"},"11863":{"probe_name":"ior","function_name":"print_value"},"11862":{"probe_name":"ior","function_name":"print_option_value"},"11861":{"probe_name":"ior","function_name":"print_help_section"},"11860":{"probe_name":"ior","function_name":"print_current_option_section"},"11859":{"probe_name":"ior","function_name":"option_print_help"},"11858":{"probe_name":"ior","function_name":"option_print_current"},"11857":{"probe_name":"ior","function_name":"option_parse_token"},"11856":{"probe_name":"ior","function_name":"option_parse_str"},"11855":{"probe_name":"ior","function_name":"option_parse_key_value"},"11854":{"probe_name":"ior","function_name":"option_parse"},"11853":{"probe_name":"ior","function_name":"ops_values"},"11852":{"probe_name":"ior","function_name":"mean_of_array_of_doubles"},"11851":{"probe_name":"ior","function_name":"malloc_and_touch"},"11850":{"probe_name":"ior","function_name":"main"},"11849":{"probe_name":"ior","function_name":"ior_run"},"11848":{"probe_name":"ior","function_name":"ior_mmap_file"},"11847":{"probe_name":"ior","function_name":"ior_main"},"11846":{"probe_name":"ior","function_name":"init_or_fini_internal"},"11845":{"probe_name":"ior","function_name":"init_or_fini"},"11844":{"probe_name":"ior","function_name":"init_clock"},"11843":{"probe_name":"ior","function_name":"init_IOR_Param_t"},"11842":{"probe_name":"ior","function_name":"frame_dummy"},"11841":{"probe_name":"ior","function_name":"file_hits_histogram"},"11840":{"probe_name":"ior","function_name":"deregister_tm_clones"},"11839":{"probe_name":"ior","function_name":"decodeDirectiveWrapper"},"11838":{"probe_name":"ior","function_name":"createGlobalOptions"},"11837":{"probe_name":"ior","function_name":"contains_only"},"11836":{"probe_name":"ior","function_name":"bw_values"},"11835":{"probe_name":"ior","function_name":"bw_ops_values"},"11834":{"probe_name":"ior","function_name":"aligned_buffer_free"},"11833":{"probe_name":"ior","function_name":"aligned_buffer_alloc"},"11832":{"probe_name":"ior","function_name":"airoi_update_module_options"},"11831":{"probe_name":"ior","function_name":"airoi_create_all_module_options"},"11830":{"probe_name":"ior","function_name":"aiori_supported_apis"},"11829":{"probe_name":"ior","function_name":"aiori_select"},"11828":{"probe_name":"ior","function_name":"aiori_posix_statfs"},"11827":{"probe_name":"ior","function_name":"aiori_posix_stat"},"11826":{"probe_name":"ior","function_name":"aiori_posix_rmdir"},"11825":{"probe_name":"ior","function_name":"aiori_posix_mkdir"},"11824":{"probe_name":"ior","function_name":"aiori_posix_access"},"11823":{"probe_name":"ior","function_name":"aiori_initialize"},"11822":{"probe_name":"ior","function_name":"aiori_get_version"},"11821":{"probe_name":"ior","function_name":"aiori_finalize"},"11820":{"probe_name":"ior","function_name":"aiori_default"},"11819":{"probe_name":"ior","function_name":"aiori_count"},"11818":{"probe_name":"ior","function_name":"__do_global_dtors_aux"},"11817":{"probe_name":"ior","function_name":"XferBuffersSetup"},"11816":{"probe_name":"ior","function_name":"XferBuffersFree"},"11815":{"probe_name":"ior","function_name":"WriteTimes"},"11814":{"probe_name":"ior","function_name":"WriteOrReadSingle"},"11813":{"probe_name":"ior","function_name":"WriteOrRead"},"11812":{"probe_name":"ior","function_name":"ValidateTests"},"11811":{"probe_name":"ior","function_name":"TimeDeviation"},"11810":{"probe_name":"ior","function_name":"TestIoSys"},"11809":{"probe_name":"ior","function_name":"StringToBytes"},"11808":{"probe_name":"ior","function_name":"StoreStoneWallingIterations"},"11807":{"probe_name":"ior","function_name":"ShowTestStart"},"11806":{"probe_name":"ior","function_name":"ShowTestEnd"},"11805":{"probe_name":"ior","function_name":"ShowSetup"},"11804":{"probe_name":"ior","function_name":"ShowHints"},"11803":{"probe_name":"ior","function_name":"ShowFileSystemSize"},"11802":{"probe_name":"ior","function_name":"SetupDataSet"},"11801":{"probe_name":"ior","function_name":"SetHints"},"11800":{"probe_name":"ior","function_name":"SeedRandGen"},"11799":{"probe_name":"ior","function_name":"RemoveFile"},"11798":{"probe_name":"ior","function_name":"Regex"},"11797":{"probe_name":"ior","function_name":"ReduceIterResults"},"11796":{"probe_name":"ior","function_name":"ReadStoneWallingIterations"},"11795":{"probe_name":"ior","function_name":"ReadConfigScript"},"11794":{"probe_name":"ior","function_name":"QueryNodeMapping"},"11793":{"probe_name":"ior","function_name":"PrintTimestamp"},"11792":{"probe_name":"ior","function_name":"PrintTestEnds"},"11791":{"probe_name":"ior","function_name":"PrintTableHeader"},"11790":{"probe_name":"ior","function_name":"PrintStartSection"},"11789":{"probe_name":"ior","function_name":"PrintShortSummary"},"11788":{"probe_name":"ior","function_name":"PrintRepeatStart"},"11787":{"probe_name":"ior","function_name":"PrintRepeatEnd"},"11786":{"probe_name":"ior","function_name":"PrintRemoveTiming"},"11785":{"probe_name":"ior","function_name":"PrintReducedResult"},"11784":{"probe_name":"ior","function_name":"PrintNextToken"},"11783":{"probe_name":"ior","function_name":"PrintNamedSectionStart"},"11782":{"probe_name":"ior","function_name":"PrintNamedArrayStart"},"11781":{"probe_name":"ior","function_name":"PrintLongSummaryOneTest"},"11780":{"probe_name":"ior","function_name":"PrintLongSummaryOneOperation"},"11779":{"probe_name":"ior","function_name":"PrintLongSummaryHeader"},"11778":{"probe_name":"ior","function_name":"PrintLongSummaryAllTests"},"11777":{"probe_name":"ior","function_name":"PrintKeyValStart"},"11776":{"probe_name":"ior","function_name":"PrintKeyValInt"},"11775":{"probe_name":"ior","function_name":"PrintKeyValEnd"},"11774":{"probe_name":"ior","function_name":"PrintKeyValDouble"},"11773":{"probe_name":"ior","function_name":"PrintKeyVal"},"11772":{"probe_name":"ior","function_name":"PrintIndent"},"11771":{"probe_name":"ior","function_name":"PrintHeader"},"11770":{"probe_name":"ior","function_name":"PrintEndSection"},"11769":{"probe_name":"ior","function_name":"PrintArrayStart"},"11768":{"probe_name":"ior","function_name":"PrintArrayNamedStart"},"11767":{"probe_name":"ior","function_name":"PrintArrayEnd"},"11766":{"probe_name":"ior","function_name":"PrependDir"},"11765":{"probe_name":"ior","function_name":"ParseLine"},"11764":{"probe_name":"ior","function_name":"ParseFileName"},"11763":{"probe_name":"ior","function_name":"ParseCommandLine"},"11762":{"probe_name":"ior","function_name":"PPDouble"},"11761":{"probe_name":"ior","function_name":"POSIX_options"},"11760":{"probe_name":"ior","function_name":"POSIX_Xfer"},"11759":{"probe_name":"ior","function_name":"POSIX_Sync"},"11758":{"probe_name":"ior","function_name":"POSIX_Open"},"11757":{"probe_name":"ior","function_name":"POSIX_Mknod"},"11756":{"probe_name":"ior","function_name":"POSIX_GetFileSize"},"11755":{"probe_name":"ior","function_name":"POSIX_Fsync"},"11754":{"probe_name":"ior","function_name":"POSIX_Delete"},"11753":{"probe_name":"ior","function_name":"POSIX_Create"},"11752":{"probe_name":"ior","function_name":"POSIX_Close"},"11751":{"probe_name":"ior","function_name":"NodeMemoryStringToBytes"},"11750":{"probe_name":"ior","function_name":"MPIIO_Xfer"},"11749":{"probe_name":"ior","function_name":"MPIIO_Open"},"11748":{"probe_name":"ior","function_name":"MPIIO_GetVersion"},"11747":{"probe_name":"ior","function_name":"MPIIO_GetFileSize"},"11746":{"probe_name":"ior","function_name":"MPIIO_Fsync"},"11745":{"probe_name":"ior","function_name":"MPIIO_Delete"},"11744":{"probe_name":"ior","function_name":"MPIIO_Create"},"11743":{"probe_name":"ior","function_name":"MPIIO_Close"},"11742":{"probe_name":"ior","function_name":"MPIIO_Access"},"11741":{"probe_name":"ior","function_name":"MMAP_options"},"11740":{"probe_name":"ior","function_name":"MMAP_Xfer"},"11739":{"probe_name":"ior","function_name":"MMAP_Open"},"11738":{"probe_name":"ior","function_name":"MMAP_Fsync"},"11737":{"probe_name":"ior","function_name":"MMAP_Create"},"11736":{"probe_name":"ior","function_name":"MMAP_Close"},"11735":{"probe_name":"ior","function_name":"InitTests"},"11734":{"probe_name":"ior","function_name":"HumanReadable"},"11733":{"probe_name":"ior","function_name":"HogMemory"},"11732":{"probe_name":"ior","function_name":"HDF5_options"},"11731":{"probe_name":"ior","function_name":"HDF5_Xfer"},"11730":{"probe_name":"ior","function_name":"HDF5_Open"},"11729":{"probe_name":"ior","function_name":"HDF5_GetVersion"},"11728":{"probe_name":"ior","function_name":"HDF5_GetFileSize"},"11727":{"probe_name":"ior","function_name":"HDF5_Fsync"},"11726":{"probe_name":"ior","function_name":"HDF5_Delete"},"11725":{"probe_name":"ior","function_name":"HDF5_Create"},"11724":{"probe_name":"ior","function_name":"HDF5_Close"},"11723":{"probe_name":"ior","function_name":"HDF5_Access"},"11722":{"probe_name":"ior","function_name":"GetTimeStamp"},"11721":{"probe_name":"ior","function_name":"GetTestFileName"},"11720":{"probe_name":"ior","function_name":"GetPlatformName"},"11719":{"probe_name":"ior","function_name":"GetOffsetArraySequential"},"11718":{"probe_name":"ior","function_name":"GetOffsetArrayRandom"},"11717":{"probe_name":"ior","function_name":"GetNumTasksOnNode0"},"11716":{"probe_name":"ior","function_name":"GetNumTasks"},"11715":{"probe_name":"ior","function_name":"GetNumNodes"},"11714":{"probe_name":"ior","function_name":"FreeResults"},"11713":{"probe_name":"ior","function_name":"FillIncompressibleBuffer"},"11712":{"probe_name":"ior","function_name":"FillBuffer"},"11711":{"probe_name":"ior","function_name":"FailMessage"},"11710":{"probe_name":"ior","function_name":"ExtractHint"},"11709":{"probe_name":"ior","function_name":"DumpBuffer"},"11708":{"probe_name":"ior","function_name":"DistributeHints"},"11707":{"probe_name":"ior","function_name":"DisplayOutliers"},"11706":{"probe_name":"ior","function_name":"DisplayFreespace"},"11705":{"probe_name":"ior","function_name":"DestroyTests"},"11704":{"probe_name":"ior","function_name":"DestroyTest"},"11703":{"probe_name":"ior","function_name":"DelaySecs"},"11702":{"probe_name":"ior","function_name":"DecodeDirective"},"11701":{"probe_name":"ior","function_name":"DUMMY_statfs"},"11700":{"probe_name":"ior","function_name":"DUMMY_stat"},"11699":{"probe_name":"ior","function_name":"DUMMY_rmdir"},"11698":{"probe_name":"ior","function_name":"DUMMY_options"},"11697":{"probe_name":"ior","function_name":"DUMMY_mkdir"},"11696":{"probe_name":"ior","function_name":"DUMMY_getVersion"},"11695":{"probe_name":"ior","function_name":"DUMMY_check_params"},"11694":{"probe_name":"ior","function_name":"DUMMY_access"},"11693":{"probe_name":"ior","function_name":"DUMMY_Xfer"},"11692":{"probe_name":"ior","function_name":"DUMMY_Sync"},"11691":{"probe_name":"ior","function_name":"DUMMY_Open"},"11690":{"probe_name":"ior","function_name":"DUMMY_GetFileSize"},"11689":{"probe_name":"ior","function_name":"DUMMY_Fsync"},"11688":{"probe_name":"ior","function_name":"DUMMY_Delete"},"11687":{"probe_name":"ior","function_name":"DUMMY_Create"},"11686":{"probe_name":"ior","function_name":"DUMMY_Close"},"11685":{"probe_name":"ior","function_name":"CurrentTimeString"},"11684":{"probe_name":"ior","function_name":"CreateTest"},"11683":{"probe_name":"ior","function_name":"CountErrors"},"11682":{"probe_name":"ior","function_name":"CompareBuffers"},"11681":{"probe_name":"ior","function_name":"CheckRunSettings"},"11680":{"probe_name":"ior","function_name":"CheckForOutliers"},"11679":{"probe_name":"ior","function_name":"CheckFileSize"},"11678":{"probe_name":"ior","function_name":"AllocResults"},"11677":{"probe_name":"mpi","function_name":"write_init.constprop.0"},"11676":{"probe_name":"mpi","function_name":"write_init"},"11675":{"probe_name":"mpi","function_name":"weighted_degree_dsc"},"11674":{"probe_name":"mpi","function_name":"vulcan_register"},"11673":{"probe_name":"mpi","function_name":"vprotocol_pessimist_request_no_free"},"11672":{"probe_name":"mpi","function_name":"vprotocol_pessimist_request_construct"},"11671":{"probe_name":"mpi","function_name":"vprotocol_pessimist_delivery_log"},"11670":{"probe_name":"mpi","function_name":"tuned_register"},"11669":{"probe_name":"mpi","function_name":"tuned_open"},"11668":{"probe_name":"mpi","function_name":"tuned_module_enable"},"11667":{"probe_name":"mpi","function_name":"tuned_close"},"11666":{"probe_name":"mpi","function_name":"treematch_module_destructor"},"11665":{"probe_name":"mpi","function_name":"treematch_module_constructor"},"11664":{"probe_name":"mpi","function_name":"tm_wait_work_completion"},"11663":{"probe_name":"mpi","function_name":"tm_update_val"},"11662":{"probe_name":"mpi","function_name":"tm_try_add_edge"},"11661":{"probe_name":"mpi","function_name":"tm_topology_set_binding_constraints"},"11660":{"probe_name":"mpi","function_name":"tm_topology_add_binding_constraints"},"11659":{"probe_name":"mpi","function_name":"tm_time_diff"},"11658":{"probe_name":"mpi","function_name":"tm_test_main"},"11657":{"probe_name":"mpi","function_name":"tm_terminate_thread_pool"},"11656":{"probe_name":"mpi","function_name":"tm_submit_work"},"11655":{"probe_name":"mpi","function_name":"tm_set_verbose_level"},"11654":{"probe_name":"mpi","function_name":"tm_set_numbering"},"11653":{"probe_name":"mpi","function_name":"tm_set_node"},"11652":{"probe_name":"mpi","function_name":"tm_set_max_nb_threads"},"11651":{"probe_name":"mpi","function_name":"tm_set_greedy_flag"},"11650":{"probe_name":"mpi","function_name":"tm_set_exhaustive_search_flag"},"11649":{"probe_name":"mpi","function_name":"tm_realloc"},"11648":{"probe_name":"mpi","function_name":"tm_print_1D_tab"},"11647":{"probe_name":"mpi","function_name":"tm_optimize_topology"},"11646":{"probe_name":"mpi","function_name":"tm_open_verbose_file"},"11645":{"probe_name":"mpi","function_name":"tm_new_affinity_mat"},"11644":{"probe_name":"mpi","function_name":"tm_nb_processing_units"},"11643":{"probe_name":"mpi","function_name":"tm_mem_check"},"11642":{"probe_name":"mpi","function_name":"tm_map_topology"},"11641":{"probe_name":"mpi","function_name":"tm_map_RR"},"11640":{"probe_name":"mpi","function_name":"tm_map_Packed"},"11639":{"probe_name":"mpi","function_name":"tm_map_MPIPP"},"11638":{"probe_name":"mpi","function_name":"tm_malloc"},"11637":{"probe_name":"mpi","function_name":"tm_load_topology.cold"},"11636":{"probe_name":"mpi","function_name":"tm_load_topology"},"11635":{"probe_name":"mpi","function_name":"tm_load_aff_mat"},"11634":{"probe_name":"mpi","function_name":"tm_kpartition_build_tree_from_topology"},"11633":{"probe_name":"mpi","function_name":"tm_kpartition.cold"},"11632":{"probe_name":"mpi","function_name":"tm_kpartition"},"11631":{"probe_name":"mpi","function_name":"tm_kPartitioning"},"11630":{"probe_name":"mpi","function_name":"tm_int_cmp_inc"},"11629":{"probe_name":"mpi","function_name":"tm_intCIV_set"},"11628":{"probe_name":"mpi","function_name":"tm_intCIV_isInitialized"},"11627":{"probe_name":"mpi","function_name":"tm_intCIV_init"},"11626":{"probe_name":"mpi","function_name":"tm_intCIV_get"},"11625":{"probe_name":"mpi","function_name":"tm_init_genrand"},"11624":{"probe_name":"mpi","function_name":"tm_in_tab"},"11623":{"probe_name":"mpi","function_name":"tm_get_verbose_output"},"11622":{"probe_name":"mpi","function_name":"tm_get_verbose_level"},"11621":{"probe_name":"mpi","function_name":"tm_get_time"},"11620":{"probe_name":"mpi","function_name":"tm_get_numbering"},"11619":{"probe_name":"mpi","function_name":"tm_get_nb_threads"},"11618":{"probe_name":"mpi","function_name":"tm_get_local_topology_with_hwloc.cold"},"11617":{"probe_name":"mpi","function_name":"tm_get_local_topology_with_hwloc"},"11616":{"probe_name":"mpi","function_name":"tm_get_greedy_flag"},"11615":{"probe_name":"mpi","function_name":"tm_get_exhaustive_search_flag"},"11614":{"probe_name":"mpi","function_name":"tm_genrand_res53"},"11613":{"probe_name":"mpi","function_name":"tm_genrand_real3"},"11612":{"probe_name":"mpi","function_name":"tm_genrand_real2"},"11611":{"probe_name":"mpi","function_name":"tm_genrand_real1"},"11610":{"probe_name":"mpi","function_name":"tm_genrand_int32"},"11609":{"probe_name":"mpi","function_name":"tm_genrand_int31"},"11608":{"probe_name":"mpi","function_name":"tm_free_tree"},"11607":{"probe_name":"mpi","function_name":"tm_free_topology"},"11606":{"probe_name":"mpi","function_name":"tm_free_solution"},"11605":{"probe_name":"mpi","function_name":"tm_free_affinity_mat"},"11604":{"probe_name":"mpi","function_name":"tm_free"},"11603":{"probe_name":"mpi","function_name":"tm_finalize"},"11602":{"probe_name":"mpi","function_name":"tm_fill_tab"},"11601":{"probe_name":"mpi","function_name":"tm_fiboTreeMin"},"11600":{"probe_name":"mpi","function_name":"tm_fiboTreeInit"},"11599":{"probe_name":"mpi","function_name":"tm_fiboTreeFree"},"11598":{"probe_name":"mpi","function_name":"tm_fiboTreeExit"},"11597":{"probe_name":"mpi","function_name":"tm_fiboTreeDel"},"11596":{"probe_name":"mpi","function_name":"tm_enable_oversubscribing"},"11595":{"probe_name":"mpi","function_name":"tm_display_topology"},"11594":{"probe_name":"mpi","function_name":"tm_display_tab"},"11593":{"probe_name":"mpi","function_name":"tm_display_solution"},"11592":{"probe_name":"mpi","function_name":"tm_display_other_heuristics"},"11591":{"probe_name":"mpi","function_name":"tm_display_arity"},"11590":{"probe_name":"mpi","function_name":"tm_destroy_work"},"11589":{"probe_name":"mpi","function_name":"tm_create_work"},"11588":{"probe_name":"mpi","function_name":"tm_compute_nb_leaves_from_level"},"11587":{"probe_name":"mpi","function_name":"tm_compute_mapping"},"11586":{"probe_name":"mpi","function_name":"tm_complete_obj_weight"},"11585":{"probe_name":"mpi","function_name":"tm_close_verbose_file"},"11584":{"probe_name":"mpi","function_name":"tm_calloc"},"11583":{"probe_name":"mpi","function_name":"tm_build_tree_from_topology"},"11582":{"probe_name":"mpi","function_name":"tm_build_synthetic_topology"},"11581":{"probe_name":"mpi","function_name":"tm_build_affinity_mat"},"11580":{"probe_name":"mpi","function_name":"tm_bucket_grouping"},"11579":{"probe_name":"mpi","function_name":"thread_loop"},"11578":{"probe_name":"mpi","function_name":"tgt_to_tm"},"11577":{"probe_name":"mpi","function_name":"tab_cmp"},"11576":{"probe_name":"mpi","function_name":"sync_register"},"11575":{"probe_name":"mpi","function_name":"sm_register:0x215be0"},"11574":{"probe_name":"mpi","function_name":"sm_register:0x108080"},"11573":{"probe_name":"mpi","function_name":"sm_module_enable"},"11572":{"probe_name":"mpi","function_name":"sm_close"},"11571":{"probe_name":"mpi","function_name":"shuffle_init.constprop.0:0x16f180"},"11570":{"probe_name":"mpi","function_name":"shuffle_init.constprop.0:0x16bb70"},"11569":{"probe_name":"mpi","function_name":"set_value"},"11568":{"probe_name":"mpi","function_name":"set_handler_default"},"11567":{"probe_name":"mpi","function_name":"send_request_pml_complete"},"11566":{"probe_name":"mpi","function_name":"send_msg.cold"},"11565":{"probe_name":"mpi","function_name":"send_msg"},"11564":{"probe_name":"mpi","function_name":"send_cb:0x163f50"},"11563":{"probe_name":"mpi","function_name":"send_cb:0x160b60"},"11562":{"probe_name":"mpi","function_name":"self_register"},"11561":{"probe_name":"mpi","function_name":"select_independent_groups"},"11560":{"probe_name":"mpi","function_name":"save_ptr"},"11559":{"probe_name":"mpi","function_name":"retreive_size.cold"},"11558":{"probe_name":"mpi","function_name":"retreive_size"},"11557":{"probe_name":"mpi","function_name":"result_request"},"11556":{"probe_name":"mpi","function_name":"request_start"},"11555":{"probe_name":"mpi","function_name":"request_free:0x1da910"},"11554":{"probe_name":"mpi","function_name":"request_free:0x127b50"},"11553":{"probe_name":"mpi","function_name":"request_construct:0x1da8a0"},"11552":{"probe_name":"mpi","function_name":"request_construct:0x127810"},"11551":{"probe_name":"mpi","function_name":"request_cancel:0x1da890"},"11550":{"probe_name":"mpi","function_name":"request_cancel:0x127800"},"11549":{"probe_name":"mpi","function_name":"release_vecs_callback"},"11548":{"probe_name":"mpi","function_name":"release_objs_callback"},"11547":{"probe_name":"mpi","function_name":"register_tm_clones"},"11546":{"probe_name":"mpi","function_name":"register_datarep"},"11545":{"probe_name":"mpi","function_name":"register_component:0x17baa0"},"11544":{"probe_name":"mpi","function_name":"register_component:0x175430"},"11543":{"probe_name":"mpi","function_name":"register_component:0x1686b0"},"11542":{"probe_name":"mpi","function_name":"reduce_inorder"},"11541":{"probe_name":"mpi","function_name":"recv_request_pml_complete"},"11540":{"probe_name":"mpi","function_name":"recv_cb:0x1647d0"},"11539":{"probe_name":"mpi","function_name":"recv_cb:0x1613b0"},"11538":{"probe_name":"mpi","function_name":"recurs_select_independent_groups"},"11537":{"probe_name":"mpi","function_name":"rankkeycompare"},"11536":{"probe_name":"mpi","function_name":"partial_update_val"},"11535":{"probe_name":"mpi","function_name":"partial_exhaustive_search"},"11534":{"probe_name":"mpi","function_name":"partial_aggregate_aff_mat"},"11533":{"probe_name":"mpi","function_name":"optimize_arity"},"11532":{"probe_name":"mpi","function_name":"open_component"},"11531":{"probe_name":"mpi","function_name":"opal_free_list_wait.constprop.0:0x1fbad0"},"11530":{"probe_name":"mpi","function_name":"opal_free_list_wait.constprop.0:0x1f8730"},"11529":{"probe_name":"mpi","function_name":"opal_free_list_wait"},"11528":{"probe_name":"mpi","function_name":"ompit_var_type_to_datatype"},"11527":{"probe_name":"mpi","function_name":"ompit_opal_to_mpit_error"},"11526":{"probe_name":"mpi","function_name":"ompi_win_set_name"},"11525":{"probe_name":"mpi","function_name":"ompi_win_null_delete_fn_f"},"11524":{"probe_name":"mpi","function_name":"ompi_win_null_copy_fn_f"},"11523":{"probe_name":"mpi","function_name":"ompi_win_init"},"11522":{"probe_name":"mpi","function_name":"ompi_win_group"},"11521":{"probe_name":"mpi","function_name":"ompi_win_get_name"},"11520":{"probe_name":"mpi","function_name":"ompi_win_free"},"11519":{"probe_name":"mpi","function_name":"ompi_win_finalize"},"11518":{"probe_name":"mpi","function_name":"ompi_win_dup_fn_f"},"11517":{"probe_name":"mpi","function_name":"ompi_win_destruct"},"11516":{"probe_name":"mpi","function_name":"ompi_win_create_dynamic"},"11515":{"probe_name":"mpi","function_name":"ompi_win_create"},"11514":{"probe_name":"mpi","function_name":"ompi_win_construct"},"11513":{"probe_name":"mpi","function_name":"ompi_win_allocate_shared"},"11512":{"probe_name":"mpi","function_name":"ompi_win_allocate"},"11511":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_sender_based_init"},"11510":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_sender_based_finalize"},"11509":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_sender_based_alloc"},"11508":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_matching_replay"},"11507":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_event_logger_disconnect"},"11506":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_event_logger_connect.cold"},"11505":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_event_logger_connect"},"11504":{"probe_name":"mpi","function_name":"ompi_vprotocol_pessimist_delivery_replay"},"11503":{"probe_name":"mpi","function_name":"ompi_type_null_delete_fn_f"},"11502":{"probe_name":"mpi","function_name":"ompi_type_null_copy_fn_f"},"11501":{"probe_name":"mpi","function_name":"ompi_type_dup_fn_f"},"11500":{"probe_name":"mpi","function_name":"ompi_test_fortran_constants_f"},"11499":{"probe_name":"mpi","function_name":"ompi_test_fortran_constants__"},"11498":{"probe_name":"mpi","function_name":"ompi_test_fortran_constants_"},"11497":{"probe_name":"mpi","function_name":"ompi_test_fortran_constants"},"11496":{"probe_name":"mpi","function_name":"ompi_show_all_mca_params"},"11495":{"probe_name":"mpi","function_name":"ompi_set_group_rank"},"11494":{"probe_name":"mpi","function_name":"ompi_seq_tracker_insert"},"11493":{"probe_name":"mpi","function_name":"ompi_seq_tracker_destruct"},"11492":{"probe_name":"mpi","function_name":"ompi_seq_tracker_copy"},"11491":{"probe_name":"mpi","function_name":"ompi_seq_tracker_construct"},"11490":{"probe_name":"mpi","function_name":"ompi_seq_tracker_check_duplicate"},"11489":{"probe_name":"mpi","function_name":"ompi_rte_wait_for_debugger"},"11488":{"probe_name":"mpi","function_name":"ompi_rte_init"},"11487":{"probe_name":"mpi","function_name":"ompi_rte_finalize"},"11486":{"probe_name":"mpi","function_name":"ompi_rte_convert_string_to_process_name"},"11485":{"probe_name":"mpi","function_name":"ompi_rte_convert_process_name_to_string"},"11484":{"probe_name":"mpi","function_name":"ompi_rte_compare_name_fields"},"11483":{"probe_name":"mpi","function_name":"ompi_rte_breakpoint"},"11482":{"probe_name":"mpi","function_name":"ompi_rte_abort_peers"},"11481":{"probe_name":"mpi","function_name":"ompi_rte_abort"},"11480":{"probe_name":"mpi","function_name":"ompi_rounddown"},"11479":{"probe_name":"mpi","function_name":"ompi_request_wait_completion:0x5d7f0"},"11478":{"probe_name":"mpi","function_name":"ompi_request_wait_completion:0x212b80"},"11477":{"probe_name":"mpi","function_name":"ompi_request_wait_completion:0x1f7c70"},"11476":{"probe_name":"mpi","function_name":"ompi_request_wait_completion:0x1f56c0"},"11475":{"probe_name":"mpi","function_name":"ompi_request_wait_completion:0x1f3e20"},"11474":{"probe_name":"mpi","function_name":"ompi_request_persistent_noop_free"},"11473":{"probe_name":"mpi","function_name":"ompi_request_persistent_noop_create"},"11472":{"probe_name":"mpi","function_name":"ompi_request_null_free"},"11471":{"probe_name":"mpi","function_name":"ompi_request_null_cancel"},"11470":{"probe_name":"mpi","function_name":"ompi_request_is_failed_fn"},"11469":{"probe_name":"mpi","function_name":"ompi_request_init"},"11468":{"probe_name":"mpi","function_name":"ompi_request_finalize"},"11467":{"probe_name":"mpi","function_name":"ompi_request_empty_free"},"11466":{"probe_name":"mpi","function_name":"ompi_request_destruct"},"11465":{"probe_name":"mpi","function_name":"ompi_request_default_wait_some"},"11464":{"probe_name":"mpi","function_name":"ompi_request_default_wait_any"},"11463":{"probe_name":"mpi","function_name":"ompi_request_default_wait_all"},"11462":{"probe_name":"mpi","function_name":"ompi_request_default_wait"},"11461":{"probe_name":"mpi","function_name":"ompi_request_default_test_some"},"11460":{"probe_name":"mpi","function_name":"ompi_request_default_test_any"},"11459":{"probe_name":"mpi","function_name":"ompi_request_default_test_all"},"11458":{"probe_name":"mpi","function_name":"ompi_request_default_test"},"11457":{"probe_name":"mpi","function_name":"ompi_request_construct"},"11456":{"probe_name":"mpi","function_name":"ompi_request_check_same_instance"},"11455":{"probe_name":"mpi","function_name":"ompi_report_comm_methods"},"11454":{"probe_name":"mpi","function_name":"ompi_rbcast_bml_send_complete_cb"},"11453":{"probe_name":"mpi","function_name":"ompi_proc_world_size"},"11452":{"probe_name":"mpi","function_name":"ompi_proc_world"},"11451":{"probe_name":"mpi","function_name":"ompi_proc_unpack"},"11450":{"probe_name":"mpi","function_name":"ompi_proc_self"},"11449":{"probe_name":"mpi","function_name":"ompi_proc_refresh"},"11448":{"probe_name":"mpi","function_name":"ompi_proc_pack"},"11447":{"probe_name":"mpi","function_name":"ompi_proc_lookup"},"11446":{"probe_name":"mpi","function_name":"ompi_proc_init"},"11445":{"probe_name":"mpi","function_name":"ompi_proc_get_allocated"},"11444":{"probe_name":"mpi","function_name":"ompi_proc_for_name"},"11443":{"probe_name":"mpi","function_name":"ompi_proc_find_and_add"},"11442":{"probe_name":"mpi","function_name":"ompi_proc_find"},"11441":{"probe_name":"mpi","function_name":"ompi_proc_finalize"},"11440":{"probe_name":"mpi","function_name":"ompi_proc_destruct"},"11439":{"probe_name":"mpi","function_name":"ompi_proc_construct"},"11438":{"probe_name":"mpi","function_name":"ompi_proc_complete_init_single"},"11437":{"probe_name":"mpi","function_name":"ompi_proc_complete_init"},"11436":{"probe_name":"mpi","function_name":"ompi_proc_compare_vid"},"11435":{"probe_name":"mpi","function_name":"ompi_proc_allocate"},"11434":{"probe_name":"mpi","function_name":"ompi_proc_all"},"11433":{"probe_name":"mpi","function_name":"ompi_pml_v_output_open"},"11432":{"probe_name":"mpi","function_name":"ompi_pml_v_output_close"},"11431":{"probe_name":"mpi","function_name":"ompi_pml_ob1_check_cantmatch_for_match"},"11430":{"probe_name":"mpi","function_name":"ompi_pml_ob1_append_frag_to_ordered_list"},"11429":{"probe_name":"mpi","function_name":"ompi_pmix_snprintf_jobid"},"11428":{"probe_name":"mpi","function_name":"ompi_pmix_print_name"},"11427":{"probe_name":"mpi","function_name":"ompi_pmix_print_id"},"11426":{"probe_name":"mpi","function_name":"ompi_osc_sm_wait"},"11425":{"probe_name":"mpi","function_name":"ompi_osc_sm_unlock_all"},"11424":{"probe_name":"mpi","function_name":"ompi_osc_sm_unlock"},"11423":{"probe_name":"mpi","function_name":"ompi_osc_sm_test"},"11422":{"probe_name":"mpi","function_name":"ompi_osc_sm_sync"},"11421":{"probe_name":"mpi","function_name":"ompi_osc_sm_start"},"11420":{"probe_name":"mpi","function_name":"ompi_osc_sm_shared_query"},"11419":{"probe_name":"mpi","function_name":"ompi_osc_sm_set_info"},"11418":{"probe_name":"mpi","function_name":"ompi_osc_sm_rput"},"11417":{"probe_name":"mpi","function_name":"ompi_osc_sm_rget_accumulate"},"11416":{"probe_name":"mpi","function_name":"ompi_osc_sm_rget"},"11415":{"probe_name":"mpi","function_name":"ompi_osc_sm_raccumulate"},"11414":{"probe_name":"mpi","function_name":"ompi_osc_sm_put"},"11413":{"probe_name":"mpi","function_name":"ompi_osc_sm_post"},"11412":{"probe_name":"mpi","function_name":"ompi_osc_sm_lock_all"},"11411":{"probe_name":"mpi","function_name":"ompi_osc_sm_lock"},"11410":{"probe_name":"mpi","function_name":"ompi_osc_sm_group_ranks"},"11409":{"probe_name":"mpi","function_name":"ompi_osc_sm_get_info"},"11408":{"probe_name":"mpi","function_name":"ompi_osc_sm_get_accumulate"},"11407":{"probe_name":"mpi","function_name":"ompi_osc_sm_get"},"11406":{"probe_name":"mpi","function_name":"ompi_osc_sm_free"},"11405":{"probe_name":"mpi","function_name":"ompi_osc_sm_flush_local_all"},"11404":{"probe_name":"mpi","function_name":"ompi_osc_sm_flush_local"},"11403":{"probe_name":"mpi","function_name":"ompi_osc_sm_flush_all"},"11402":{"probe_name":"mpi","function_name":"ompi_osc_sm_flush"},"11401":{"probe_name":"mpi","function_name":"ompi_osc_sm_fetch_and_op"},"11400":{"probe_name":"mpi","function_name":"ompi_osc_sm_fence"},"11399":{"probe_name":"mpi","function_name":"ompi_osc_sm_detach"},"11398":{"probe_name":"mpi","function_name":"ompi_osc_sm_complete"},"11397":{"probe_name":"mpi","function_name":"ompi_osc_sm_compare_and_swap"},"11396":{"probe_name":"mpi","function_name":"ompi_osc_sm_attach"},"11395":{"probe_name":"mpi","function_name":"ompi_osc_sm_accumulate"},"11394":{"probe_name":"mpi","function_name":"ompi_osc_rdma_wait_atomic"},"11393":{"probe_name":"mpi","function_name":"ompi_osc_rdma_unlock_atomic.cold"},"11392":{"probe_name":"mpi","function_name":"ompi_osc_rdma_unlock_atomic"},"11391":{"probe_name":"mpi","function_name":"ompi_osc_rdma_unlock_all_atomic.cold"},"11390":{"probe_name":"mpi","function_name":"ompi_osc_rdma_unlock_all_atomic"},"11389":{"probe_name":"mpi","function_name":"ompi_osc_rdma_test_atomic"},"11388":{"probe_name":"mpi","function_name":"ompi_osc_rdma_sync_return"},"11387":{"probe_name":"mpi","function_name":"ompi_osc_rdma_sync_pscw_peer"},"11386":{"probe_name":"mpi","function_name":"ompi_osc_rdma_sync_destructor"},"11385":{"probe_name":"mpi","function_name":"ompi_osc_rdma_sync_constructor"},"11384":{"probe_name":"mpi","function_name":"ompi_osc_rdma_sync_allocate"},"11383":{"probe_name":"mpi","function_name":"ompi_osc_rdma_sync"},"11382":{"probe_name":"mpi","function_name":"ompi_osc_rdma_start_atomic"},"11381":{"probe_name":"mpi","function_name":"ompi_osc_rdma_set_no_lock_info"},"11380":{"probe_name":"mpi","function_name":"ompi_osc_rdma_rput"},"11379":{"probe_name":"mpi","function_name":"ompi_osc_rdma_rget_accumulate_internal.cold"},"11378":{"probe_name":"mpi","function_name":"ompi_osc_rdma_rget_accumulate_internal"},"11377":{"probe_name":"mpi","function_name":"ompi_osc_rdma_rget_accumulate"},"11376":{"probe_name":"mpi","function_name":"ompi_osc_rdma_rget"},"11375":{"probe_name":"mpi","function_name":"ompi_osc_rdma_request_complete:0x1cee10"},"11374":{"probe_name":"mpi","function_name":"ompi_osc_rdma_request_complete:0x1c62b0"},"11373":{"probe_name":"mpi","function_name":"ompi_osc_rdma_release_peers"},"11372":{"probe_name":"mpi","function_name":"ompi_osc_rdma_raccumulate"},"11371":{"probe_name":"mpi","function_name":"ompi_osc_rdma_pvar_read"},"11370":{"probe_name":"mpi","function_name":"ompi_osc_rdma_put_contig"},"11369":{"probe_name":"mpi","function_name":"ompi_osc_rdma_put_complete_flush"},"11368":{"probe_name":"mpi","function_name":"ompi_osc_rdma_put_complete"},"11367":{"probe_name":"mpi","function_name":"ompi_osc_rdma_put"},"11366":{"probe_name":"mpi","function_name":"ompi_osc_rdma_post_atomic"},"11365":{"probe_name":"mpi","function_name":"ompi_osc_rdma_pending_op_destruct"},"11364":{"probe_name":"mpi","function_name":"ompi_osc_rdma_pending_op_construct"},"11363":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_setup"},"11362":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_lookup"},"11361":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_dynamic_destruct"},"11360":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_dynamic_construct"},"11359":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_destruct"},"11358":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_construct"},"11357":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_btl_endpoint"},"11356":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_basic_destruct"},"11355":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_basic_construct"},"11354":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_accumulate_cleanup.cold"},"11353":{"probe_name":"mpi","function_name":"ompi_osc_rdma_peer_accumulate_cleanup"},"11352":{"probe_name":"mpi","function_name":"ompi_osc_rdma_new_peer.cold"},"11351":{"probe_name":"mpi","function_name":"ompi_osc_rdma_new_peer"},"11350":{"probe_name":"mpi","function_name":"ompi_osc_rdma_master_noncontig"},"11349":{"probe_name":"mpi","function_name":"ompi_osc_rdma_lock_release_exclusive.constprop.0.isra.0.cold"},"11348":{"probe_name":"mpi","function_name":"ompi_osc_rdma_lock_release_exclusive.constprop.0.isra.0"},"11347":{"probe_name":"mpi","function_name":"ompi_osc_rdma_lock_atomic_internal"},"11346":{"probe_name":"mpi","function_name":"ompi_osc_rdma_lock_atomic"},"11345":{"probe_name":"mpi","function_name":"ompi_osc_rdma_lock_all_atomic"},"11344":{"probe_name":"mpi","function_name":"ompi_osc_rdma_initialize_region.isra.0"},"11343":{"probe_name":"mpi","function_name":"ompi_osc_rdma_handle_init"},"11342":{"probe_name":"mpi","function_name":"ompi_osc_rdma_handle_fini"},"11341":{"probe_name":"mpi","function_name":"ompi_osc_rdma_get_peers"},"11340":{"probe_name":"mpi","function_name":"ompi_osc_rdma_get_partial"},"11339":{"probe_name":"mpi","function_name":"ompi_osc_rdma_get_contig"},"11338":{"probe_name":"mpi","function_name":"ompi_osc_rdma_get_complete"},"11337":{"probe_name":"mpi","function_name":"ompi_osc_rdma_get_accumulate"},"11336":{"probe_name":"mpi","function_name":"ompi_osc_rdma_get"},"11335":{"probe_name":"mpi","function_name":"ompi_osc_rdma_gacc_master_cleanup.cold"},"11334":{"probe_name":"mpi","function_name":"ompi_osc_rdma_gacc_master_cleanup"},"11333":{"probe_name":"mpi","function_name":"ompi_osc_rdma_gacc_master"},"11332":{"probe_name":"mpi","function_name":"ompi_osc_rdma_gacc_amo.constprop.0"},"11331":{"probe_name":"mpi","function_name":"ompi_osc_rdma_free"},"11330":{"probe_name":"mpi","function_name":"ompi_osc_rdma_frag_alloc.constprop.0:0x1e0770"},"11329":{"probe_name":"mpi","function_name":"ompi_osc_rdma_frag_alloc.constprop.0:0x1dd090"},"11328":{"probe_name":"mpi","function_name":"ompi_osc_rdma_frag_alloc.constprop.0:0x1dafc0"},"11327":{"probe_name":"mpi","function_name":"ompi_osc_rdma_frag_alloc"},"11326":{"probe_name":"mpi","function_name":"ompi_osc_rdma_flush_local_all"},"11325":{"probe_name":"mpi","function_name":"ompi_osc_rdma_flush_local"},"11324":{"probe_name":"mpi","function_name":"ompi_osc_rdma_flush_all"},"11323":{"probe_name":"mpi","function_name":"ompi_osc_rdma_flush"},"11322":{"probe_name":"mpi","function_name":"ompi_osc_rdma_find_dynamic_region"},"11321":{"probe_name":"mpi","function_name":"ompi_osc_rdma_fetch_and_op"},"11320":{"probe_name":"mpi","function_name":"ompi_osc_rdma_fence_atomic"},"11319":{"probe_name":"mpi","function_name":"ompi_osc_rdma_detach"},"11318":{"probe_name":"mpi","function_name":"ompi_osc_rdma_demand_lock_peer"},"11317":{"probe_name":"mpi","function_name":"ompi_osc_rdma_component_select"},"11316":{"probe_name":"mpi","function_name":"ompi_osc_rdma_component_register"},"11315":{"probe_name":"mpi","function_name":"ompi_osc_rdma_component_query"},"11314":{"probe_name":"mpi","function_name":"ompi_osc_rdma_component_init"},"11313":{"probe_name":"mpi","function_name":"ompi_osc_rdma_component_finalize"},"11312":{"probe_name":"mpi","function_name":"ompi_osc_rdma_complete_atomic"},"11311":{"probe_name":"mpi","function_name":"ompi_osc_rdma_compare_and_swap.cold"},"11310":{"probe_name":"mpi","function_name":"ompi_osc_rdma_compare_and_swap"},"11309":{"probe_name":"mpi","function_name":"ompi_osc_rdma_check_posts"},"11308":{"probe_name":"mpi","function_name":"ompi_osc_rdma_cas_put_complete"},"11307":{"probe_name":"mpi","function_name":"ompi_osc_rdma_btl_op.constprop.0"},"11306":{"probe_name":"mpi","function_name":"ompi_osc_rdma_attach"},"11305":{"probe_name":"mpi","function_name":"ompi_osc_rdma_atomic_complete"},"11304":{"probe_name":"mpi","function_name":"ompi_osc_rdma_add_attachment"},"11303":{"probe_name":"mpi","function_name":"ompi_osc_rdma_accumulate"},"11302":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_wait"},"11301":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_unlock_all"},"11300":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_unlock"},"11299":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_test"},"11298":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_sync"},"11297":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_start"},"11296":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_set_template"},"11295":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_rput"},"11294":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_rget_accumulate"},"11293":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_rget"},"11292":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_raccumulate"},"11291":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_put"},"11290":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_post"},"11289":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_lock_all"},"11288":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_lock"},"11287":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_get_accumulate"},"11286":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_get"},"11285":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_free"},"11284":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_flush_local_all"},"11283":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_flush_local"},"11282":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_flush_all"},"11281":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_flush"},"11280":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_fetch_and_op"},"11279":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_fence"},"11278":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_detach"},"11277":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_complete"},"11276":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_compare_and_swap"},"11275":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_attach"},"11274":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_ucx_accumulate"},"11273":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_wait"},"11272":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_unlock_all"},"11271":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_unlock"},"11270":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_test"},"11269":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_sync"},"11268":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_start"},"11267":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_set_template"},"11266":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_rput"},"11265":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_rget_accumulate"},"11264":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_rget"},"11263":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_raccumulate"},"11262":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_put"},"11261":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_post"},"11260":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_lock_all"},"11259":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_lock"},"11258":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_get_accumulate"},"11257":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_get"},"11256":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_free"},"11255":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_flush_local_all"},"11254":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_flush_local"},"11253":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_flush_all"},"11252":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_flush"},"11251":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_fetch_and_op"},"6064":{"probe_name":"hdf5","function_name":"H5VL_vol_object_verify"},"6063":{"probe_name":"hdf5","function_name":"H5VL_vol_object"},"6062":{"probe_name":"hdf5","function_name":"H5VL_unwrap_object"},"6061":{"probe_name":"hdf5","function_name":"H5VL_token_to_str"},"6060":{"probe_name":"hdf5","function_name":"H5VL_token_from_str"},"6059":{"probe_name":"hdf5","function_name":"H5VL_token_cmp"},"6058":{"probe_name":"hdf5","function_name":"H5VL_term_package"},"6057":{"probe_name":"hdf5","function_name":"H5VL_start_lib_state"},"6056":{"probe_name":"hdf5","function_name":"H5VL_setup_token_args"},"6055":{"probe_name":"hdf5","function_name":"H5VL_setup_self_args"},"6054":{"probe_name":"hdf5","function_name":"H5VL_setup_name_args"},"6053":{"probe_name":"hdf5","function_name":"H5VL_setup_loc_args"},"6052":{"probe_name":"hdf5","function_name":"H5VL_setup_idx_args"},"6051":{"probe_name":"hdf5","function_name":"H5VL_setup_args"},"6050":{"probe_name":"hdf5","function_name":"H5VL_setup_acc_args"},"6049":{"probe_name":"hdf5","function_name":"H5VL_set_vol_wrapper"},"6048":{"probe_name":"hdf5","function_name":"H5VL_retrieve_lib_state"},"6047":{"probe_name":"hdf5","function_name":"H5VL_restore_lib_state"},"6046":{"probe_name":"hdf5","function_name":"H5VL_reset_vol_wrapper"},"6045":{"probe_name":"hdf5","function_name":"H5VL_request_wait"},"6044":{"probe_name":"hdf5","function_name":"H5VL_request_specific"},"6043":{"probe_name":"hdf5","function_name":"H5VL_request_optional"},"6042":{"probe_name":"hdf5","function_name":"H5VL_request_notify"},"6041":{"probe_name":"hdf5","function_name":"H5VL_request_free"},"6040":{"probe_name":"hdf5","function_name":"H5VL_request_cancel"},"6039":{"probe_name":"hdf5","function_name":"H5VL_register_using_vol_id"},"6038":{"probe_name":"hdf5","function_name":"H5VL_register_using_existing_id"},"6037":{"probe_name":"hdf5","function_name":"H5VL_register"},"6036":{"probe_name":"hdf5","function_name":"H5VL_pass_through_wrap_object"},"6035":{"probe_name":"hdf5","function_name":"H5VL_pass_through_unwrap_object"},"6034":{"probe_name":"hdf5","function_name":"H5VL_pass_through_token_to_str"},"6033":{"probe_name":"hdf5","function_name":"H5VL_pass_through_token_from_str"},"6032":{"probe_name":"hdf5","function_name":"H5VL_pass_through_token_cmp"},"6031":{"probe_name":"hdf5","function_name":"H5VL_pass_through_term"},"6030":{"probe_name":"hdf5","function_name":"H5VL_pass_through_str_to_info"},"6029":{"probe_name":"hdf5","function_name":"H5VL_pass_through_request_wait"},"6028":{"probe_name":"hdf5","function_name":"H5VL_pass_through_request_specific"},"6027":{"probe_name":"hdf5","function_name":"H5VL_pass_through_request_optional"},"6026":{"probe_name":"hdf5","function_name":"H5VL_pass_through_request_notify"},"6025":{"probe_name":"hdf5","function_name":"H5VL_pass_through_request_free"},"6024":{"probe_name":"hdf5","function_name":"H5VL_pass_through_request_cancel"},"6023":{"probe_name":"hdf5","function_name":"H5VL_pass_through_register"},"6022":{"probe_name":"hdf5","function_name":"H5VL_pass_through_optional"},"6021":{"probe_name":"hdf5","function_name":"H5VL_pass_through_object_specific"},"6020":{"probe_name":"hdf5","function_name":"H5VL_pass_through_object_optional"},"6019":{"probe_name":"hdf5","function_name":"H5VL_pass_through_object_open"},"6018":{"probe_name":"hdf5","function_name":"H5VL_pass_through_object_get"},"6017":{"probe_name":"hdf5","function_name":"H5VL_pass_through_object_copy"},"6016":{"probe_name":"hdf5","function_name":"H5VL_pass_through_link_specific"},"6015":{"probe_name":"hdf5","function_name":"H5VL_pass_through_link_optional"},"6014":{"probe_name":"hdf5","function_name":"H5VL_pass_through_link_move"},"6013":{"probe_name":"hdf5","function_name":"H5VL_pass_through_link_get"},"6012":{"probe_name":"hdf5","function_name":"H5VL_pass_through_link_create"},"6011":{"probe_name":"hdf5","function_name":"H5VL_pass_through_link_copy"},"6010":{"probe_name":"hdf5","function_name":"H5VL_pass_through_introspect_opt_query"},"6009":{"probe_name":"hdf5","function_name":"H5VL_pass_through_introspect_get_conn_cls"},"6008":{"probe_name":"hdf5","function_name":"H5VL_pass_through_introspect_get_cap_flags"},"6007":{"probe_name":"hdf5","function_name":"H5VL_pass_through_init"},"6006":{"probe_name":"hdf5","function_name":"H5VL_pass_through_info_to_str"},"6005":{"probe_name":"hdf5","function_name":"H5VL_pass_through_info_free"},"6004":{"probe_name":"hdf5","function_name":"H5VL_pass_through_info_copy"},"6003":{"probe_name":"hdf5","function_name":"H5VL_pass_through_info_cmp"},"6002":{"probe_name":"hdf5","function_name":"H5VL_pass_through_group_specific"},"6001":{"probe_name":"hdf5","function_name":"H5VL_pass_through_group_optional"},"6000":{"probe_name":"hdf5","function_name":"H5VL_pass_through_group_open"},"5999":{"probe_name":"hdf5","function_name":"H5VL_pass_through_group_get"},"5998":{"probe_name":"hdf5","function_name":"H5VL_pass_through_group_create"},"5997":{"probe_name":"hdf5","function_name":"H5VL_pass_through_group_close"},"5996":{"probe_name":"hdf5","function_name":"H5VL_pass_through_get_wrap_ctx"},"5995":{"probe_name":"hdf5","function_name":"H5VL_pass_through_get_object"},"5994":{"probe_name":"hdf5","function_name":"H5VL_pass_through_free_wrap_ctx"},"5993":{"probe_name":"hdf5","function_name":"H5VL_pass_through_file_specific"},"5992":{"probe_name":"hdf5","function_name":"H5VL_pass_through_file_optional"},"5991":{"probe_name":"hdf5","function_name":"H5VL_pass_through_file_open"},"5990":{"probe_name":"hdf5","function_name":"H5VL_pass_through_file_get"},"5989":{"probe_name":"hdf5","function_name":"H5VL_pass_through_file_create"},"5988":{"probe_name":"hdf5","function_name":"H5VL_pass_through_file_close"},"5987":{"probe_name":"hdf5","function_name":"H5VL_pass_through_datatype_specific"},"5986":{"probe_name":"hdf5","function_name":"H5VL_pass_through_datatype_optional"},"5985":{"probe_name":"hdf5","function_name":"H5VL_pass_through_datatype_open"},"5984":{"probe_name":"hdf5","function_name":"H5VL_pass_through_datatype_get"},"5983":{"probe_name":"hdf5","function_name":"H5VL_pass_through_datatype_commit"},"5982":{"probe_name":"hdf5","function_name":"H5VL_pass_through_datatype_close"},"5981":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_write"},"5980":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_specific"},"5979":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_read"},"5978":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_optional"},"5977":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_open"},"5976":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_get"},"5975":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_create"},"5974":{"probe_name":"hdf5","function_name":"H5VL_pass_through_dataset_close"},"5973":{"probe_name":"hdf5","function_name":"H5VL_pass_through_blob_specific"},"5972":{"probe_name":"hdf5","function_name":"H5VL_pass_through_blob_put"},"5971":{"probe_name":"hdf5","function_name":"H5VL_pass_through_blob_optional"},"5970":{"probe_name":"hdf5","function_name":"H5VL_pass_through_blob_get"},"5969":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_write"},"5968":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_specific"},"5967":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_read"},"5966":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_optional"},"5965":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_open"},"5964":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_get"},"5963":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_create"},"5962":{"probe_name":"hdf5","function_name":"H5VL_pass_through_attr_close"},"5961":{"probe_name":"hdf5","function_name":"H5VL_optional"},"5960":{"probe_name":"hdf5","function_name":"H5VL_object_verify"},"5959":{"probe_name":"hdf5","function_name":"H5VL_object_unwrap"},"5958":{"probe_name":"hdf5","function_name":"H5VL_object_specific"},"5957":{"probe_name":"hdf5","function_name":"H5VL_object_optional"},"5956":{"probe_name":"hdf5","function_name":"H5VL_object_open"},"5955":{"probe_name":"hdf5","function_name":"H5VL_object_is_native"},"5954":{"probe_name":"hdf5","function_name":"H5VL_object_inc_rc"},"5953":{"probe_name":"hdf5","function_name":"H5VL_object_get"},"5952":{"probe_name":"hdf5","function_name":"H5VL_object_data"},"5951":{"probe_name":"hdf5","function_name":"H5VL_object_copy"},"5950":{"probe_name":"hdf5","function_name":"H5VL_object"},"5949":{"probe_name":"hdf5","function_name":"H5VL_new_connector"},"5948":{"probe_name":"hdf5","function_name":"H5VL_native_token_to_addr"},"5947":{"probe_name":"hdf5","function_name":"H5VL_native_register"},"5946":{"probe_name":"hdf5","function_name":"H5VL_native_get_file_struct"},"5945":{"probe_name":"hdf5","function_name":"H5VL_native_get_file_addr_len"},"5944":{"probe_name":"hdf5","function_name":"H5VL_native_addr_to_token"},"5943":{"probe_name":"hdf5","function_name":"H5VL_link_specific"},"5942":{"probe_name":"hdf5","function_name":"H5VL_link_optional"},"5941":{"probe_name":"hdf5","function_name":"H5VL_link_move"},"5940":{"probe_name":"hdf5","function_name":"H5VL_link_get"},"5939":{"probe_name":"hdf5","function_name":"H5VL_link_create"},"5938":{"probe_name":"hdf5","function_name":"H5VL_link_copy"},"5937":{"probe_name":"hdf5","function_name":"H5VL_introspect_opt_query"},"5936":{"probe_name":"hdf5","function_name":"H5VL_introspect_get_conn_cls"},"5935":{"probe_name":"hdf5","function_name":"H5VL_introspect_get_cap_flags"},"5934":{"probe_name":"hdf5","function_name":"H5VL_init_phase2"},"5933":{"probe_name":"hdf5","function_name":"H5VL_init_phase1"},"5932":{"probe_name":"hdf5","function_name":"H5VL_inc_vol_wrapper"},"5931":{"probe_name":"hdf5","function_name":"H5VL_group_specific"},"5930":{"probe_name":"hdf5","function_name":"H5VL_group_optional"},"5929":{"probe_name":"hdf5","function_name":"H5VL_group_open"},"5928":{"probe_name":"hdf5","function_name":"H5VL_group_get"},"5927":{"probe_name":"hdf5","function_name":"H5VL_group_create"},"5926":{"probe_name":"hdf5","function_name":"H5VL_group_close"},"5925":{"probe_name":"hdf5","function_name":"H5VL_get_wrap_ctx"},"5924":{"probe_name":"hdf5","function_name":"H5VL_get_cap_flags"},"5923":{"probe_name":"hdf5","function_name":"H5VL_free_wrap_ctx"},"5922":{"probe_name":"hdf5","function_name":"H5VL_free_object"},"5921":{"probe_name":"hdf5","function_name":"H5VL_free_lib_state"},"5920":{"probe_name":"hdf5","function_name":"H5VL_free_connector_info"},"5919":{"probe_name":"hdf5","function_name":"H5VL_finish_lib_state"},"5918":{"probe_name":"hdf5","function_name":"H5VL_file_specific"},"5917":{"probe_name":"hdf5","function_name":"H5VL_file_optional"},"5916":{"probe_name":"hdf5","function_name":"H5VL_file_open"},"5915":{"probe_name":"hdf5","function_name":"H5VL_file_is_same"},"5914":{"probe_name":"hdf5","function_name":"H5VL_file_get"},"5913":{"probe_name":"hdf5","function_name":"H5VL_file_create"},"5912":{"probe_name":"hdf5","function_name":"H5VL_file_close"},"5911":{"probe_name":"hdf5","function_name":"H5VL_dec_vol_wrapper"},"5910":{"probe_name":"hdf5","function_name":"H5VL_datatype_specific"},"5909":{"probe_name":"hdf5","function_name":"H5VL_datatype_optional_op"},"5908":{"probe_name":"hdf5","function_name":"H5VL_datatype_optional"},"5907":{"probe_name":"hdf5","function_name":"H5VL_datatype_open"},"5906":{"probe_name":"hdf5","function_name":"H5VL_datatype_get"},"5905":{"probe_name":"hdf5","function_name":"H5VL_datatype_commit"},"5904":{"probe_name":"hdf5","function_name":"H5VL_datatype_close"},"5903":{"probe_name":"hdf5","function_name":"H5VL_dataset_write"},"5902":{"probe_name":"hdf5","function_name":"H5VL_dataset_specific"},"5901":{"probe_name":"hdf5","function_name":"H5VL_dataset_read"},"5900":{"probe_name":"hdf5","function_name":"H5VL_dataset_optional"},"5899":{"probe_name":"hdf5","function_name":"H5VL_dataset_open"},"5898":{"probe_name":"hdf5","function_name":"H5VL_dataset_get"},"5897":{"probe_name":"hdf5","function_name":"H5VL_dataset_create"},"5896":{"probe_name":"hdf5","function_name":"H5VL_dataset_close"},"5895":{"probe_name":"hdf5","function_name":"H5VL_create_object_using_vol_id"},"5894":{"probe_name":"hdf5","function_name":"H5VL_create_object"},"5893":{"probe_name":"hdf5","function_name":"H5VL_copy_connector_info"},"5892":{"probe_name":"hdf5","function_name":"H5VL_conn_inc_rc"},"5891":{"probe_name":"hdf5","function_name":"H5VL_conn_free"},"5890":{"probe_name":"hdf5","function_name":"H5VL_conn_dec_rc"},"5889":{"probe_name":"hdf5","function_name":"H5VL_conn_copy"},"5888":{"probe_name":"hdf5","function_name":"H5VL_cmp_connector_info"},"5887":{"probe_name":"hdf5","function_name":"H5VL_cmp_connector_cls"},"5886":{"probe_name":"hdf5","function_name":"H5VL_check_plugin_load"},"5885":{"probe_name":"hdf5","function_name":"H5VL_blob_specific"},"5884":{"probe_name":"hdf5","function_name":"H5VL_blob_put"},"5883":{"probe_name":"hdf5","function_name":"H5VL_blob_optional"},"5882":{"probe_name":"hdf5","function_name":"H5VL_blob_get"},"5881":{"probe_name":"hdf5","function_name":"H5VL_attr_write"},"5880":{"probe_name":"hdf5","function_name":"H5VL_attr_specific"},"5879":{"probe_name":"hdf5","function_name":"H5VL_attr_read"},"5878":{"probe_name":"hdf5","function_name":"H5VL_attr_optional"},"5877":{"probe_name":"hdf5","function_name":"H5VL_attr_open"},"5876":{"probe_name":"hdf5","function_name":"H5VL_attr_get"},"5875":{"probe_name":"hdf5","function_name":"H5VL_attr_create"},"5874":{"probe_name":"hdf5","function_name":"H5VL_attr_close"},"5873":{"probe_name":"hdf5","function_name":"H5VL__wrap_obj"},"5872":{"probe_name":"hdf5","function_name":"H5VL__unregister_opt_operation"},"5871":{"probe_name":"hdf5","function_name":"H5VL__term_opt_operation_cb"},"5870":{"probe_name":"hdf5","function_name":"H5VL__term_opt_operation"},"5869":{"probe_name":"hdf5","function_name":"H5VL__set_def_conn"},"5868":{"probe_name":"hdf5","function_name":"H5VL__reparse_def_vol_conn_variable_test"},"5867":{"probe_name":"hdf5","function_name":"H5VL__register_opt_operation"},"5866":{"probe_name":"hdf5","function_name":"H5VL__register_connector_by_value"},"5865":{"probe_name":"hdf5","function_name":"H5VL__register_connector_by_name"},"5864":{"probe_name":"hdf5","function_name":"H5VL__register_connector_by_class"},"5863":{"probe_name":"hdf5","function_name":"H5VL__register_connector"},"5862":{"probe_name":"hdf5","function_name":"H5VL__peek_connector_id_by_value"},"5861":{"probe_name":"hdf5","function_name":"H5VL__peek_connector_id_by_name"},"5860":{"probe_name":"hdf5","function_name":"H5VL__num_opt_operation"},"5859":{"probe_name":"hdf5","function_name":"H5VL__native_token_to_str"},"5858":{"probe_name":"hdf5","function_name":"H5VL__native_token_cmp"},"5857":{"probe_name":"hdf5","function_name":"H5VL__native_term"},"5856":{"probe_name":"hdf5","function_name":"H5VL__native_str_to_token"},"5855":{"probe_name":"hdf5","function_name":"H5VL__native_object_specific"},"5854":{"probe_name":"hdf5","function_name":"H5VL__native_object_optional"},"5853":{"probe_name":"hdf5","function_name":"H5VL__native_object_open"},"5852":{"probe_name":"hdf5","function_name":"H5VL__native_object_get"},"5851":{"probe_name":"hdf5","function_name":"H5VL__native_object_copy"},"5850":{"probe_name":"hdf5","function_name":"H5VL__native_link_specific"},"5849":{"probe_name":"hdf5","function_name":"H5VL__native_link_move"},"5848":{"probe_name":"hdf5","function_name":"H5VL__native_link_get"},"5847":{"probe_name":"hdf5","function_name":"H5VL__native_link_create"},"5846":{"probe_name":"hdf5","function_name":"H5VL__native_link_copy"},"5845":{"probe_name":"hdf5","function_name":"H5VL__native_introspect_opt_query"},"5844":{"probe_name":"hdf5","function_name":"H5VL__native_introspect_get_conn_cls"},"5843":{"probe_name":"hdf5","function_name":"H5VL__native_introspect_get_cap_flags"},"5842":{"probe_name":"hdf5","function_name":"H5VL__native_group_specific"},"5841":{"probe_name":"hdf5","function_name":"H5VL__native_group_optional"},"5840":{"probe_name":"hdf5","function_name":"H5VL__native_group_open"},"5839":{"probe_name":"hdf5","function_name":"H5VL__native_group_get"},"5838":{"probe_name":"hdf5","function_name":"H5VL__native_group_create"},"5837":{"probe_name":"hdf5","function_name":"H5VL__native_group_close"},"5836":{"probe_name":"hdf5","function_name":"H5VL__native_get_file_addr_len"},"5835":{"probe_name":"hdf5","function_name":"H5VL__native_file_specific"},"5834":{"probe_name":"hdf5","function_name":"H5VL__native_file_optional"},"5833":{"probe_name":"hdf5","function_name":"H5VL__native_file_open"},"5832":{"probe_name":"hdf5","function_name":"H5VL__native_file_get"},"5831":{"probe_name":"hdf5","function_name":"H5VL__native_file_create"},"5830":{"probe_name":"hdf5","function_name":"H5VL__native_file_close"},"5829":{"probe_name":"hdf5","function_name":"H5VL__native_datatype_specific"},"5828":{"probe_name":"hdf5","function_name":"H5VL__native_datatype_open"},"5827":{"probe_name":"hdf5","function_name":"H5VL__native_datatype_get"},"5826":{"probe_name":"hdf5","function_name":"H5VL__native_datatype_commit"},"5825":{"probe_name":"hdf5","function_name":"H5VL__native_datatype_close"},"5824":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_write"},"5823":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_specific"},"5822":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_read"},"5821":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_optional"},"5820":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_open"},"5819":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_io_setup"},"5818":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_io_cleanup"},"5817":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_get"},"5816":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_create"},"5815":{"probe_name":"hdf5","function_name":"H5VL__native_dataset_close"},"5814":{"probe_name":"hdf5","function_name":"H5VL__native_blob_specific"},"5813":{"probe_name":"hdf5","function_name":"H5VL__native_blob_put"},"5812":{"probe_name":"hdf5","function_name":"H5VL__native_blob_get"},"5811":{"probe_name":"hdf5","function_name":"H5VL__native_attr_write"},"5810":{"probe_name":"hdf5","function_name":"H5VL__native_attr_specific"},"5809":{"probe_name":"hdf5","function_name":"H5VL__native_attr_read"},"5808":{"probe_name":"hdf5","function_name":"H5VL__native_attr_optional"},"5807":{"probe_name":"hdf5","function_name":"H5VL__native_attr_open"},"5806":{"probe_name":"hdf5","function_name":"H5VL__native_attr_get"},"5805":{"probe_name":"hdf5","function_name":"H5VL__native_attr_create"},"5804":{"probe_name":"hdf5","function_name":"H5VL__native_attr_close"},"5803":{"probe_name":"hdf5","function_name":"H5VL__is_default_conn"},"5802":{"probe_name":"hdf5","function_name":"H5VL__is_connector_registered_by_value"},"5801":{"probe_name":"hdf5","function_name":"H5VL__is_connector_registered_by_name"},"5800":{"probe_name":"hdf5","function_name":"H5VL__get_connector_name"},"5799":{"probe_name":"hdf5","function_name":"H5VL__get_connector_id_by_value"},"5798":{"probe_name":"hdf5","function_name":"H5VL__get_connector_id_by_name"},"5797":{"probe_name":"hdf5","function_name":"H5VL__get_connector_id"},"5796":{"probe_name":"hdf5","function_name":"H5VL__get_connector_cb"},"5795":{"probe_name":"hdf5","function_name":"H5VL__free_cls"},"5794":{"probe_name":"hdf5","function_name":"H5VL__find_opt_operation"},"5793":{"probe_name":"hdf5","function_name":"H5VL__file_open_find_connector_cb"},"5792":{"probe_name":"hdf5","function_name":"H5VL__connector_str_to_info"},"5791":{"probe_name":"hdf5","function_name":"H5UC_decr"},"5790":{"probe_name":"hdf5","function_name":"H5UC_create"},"5789":{"probe_name":"hdf5","function_name":"H5Tvlen_create"},"5788":{"probe_name":"hdf5","function_name":"H5Tunregister"},"5787":{"probe_name":"hdf5","function_name":"H5Tset_tag"},"5786":{"probe_name":"hdf5","function_name":"H5Tset_strpad"},"5785":{"probe_name":"hdf5","function_name":"H5Tset_size"},"5784":{"probe_name":"hdf5","function_name":"H5Tset_sign"},"5783":{"probe_name":"hdf5","function_name":"H5Tset_precision"},"5782":{"probe_name":"hdf5","function_name":"H5Tset_pad"},"5781":{"probe_name":"hdf5","function_name":"H5Tset_order"},"5780":{"probe_name":"hdf5","function_name":"H5Tset_offset"},"5779":{"probe_name":"hdf5","function_name":"H5Tset_norm"},"5778":{"probe_name":"hdf5","function_name":"H5Tset_inpad"},"5777":{"probe_name":"hdf5","function_name":"H5Tset_fields"},"5776":{"probe_name":"hdf5","function_name":"H5Tset_ebias"},"5775":{"probe_name":"hdf5","function_name":"H5Tset_cset"},"5774":{"probe_name":"hdf5","function_name":"H5Tregister"},"5773":{"probe_name":"hdf5","function_name":"H5Trefresh"},"5772":{"probe_name":"hdf5","function_name":"H5Treclaim"},"5771":{"probe_name":"hdf5","function_name":"H5Tpack"},"5770":{"probe_name":"hdf5","function_name":"H5Topen_async"},"5769":{"probe_name":"hdf5","function_name":"H5Topen2"},"5768":{"probe_name":"hdf5","function_name":"H5Topen1"},"5767":{"probe_name":"hdf5","function_name":"H5Tlock"},"5766":{"probe_name":"hdf5","function_name":"H5Tis_variable_str"},"5765":{"probe_name":"hdf5","function_name":"H5Tinsert"},"5764":{"probe_name":"hdf5","function_name":"H5Tget_tag"},"5763":{"probe_name":"hdf5","function_name":"H5Tget_super"},"5762":{"probe_name":"hdf5","function_name":"H5Tget_strpad"},"5761":{"probe_name":"hdf5","function_name":"H5Tget_size"},"5760":{"probe_name":"hdf5","function_name":"H5Tget_sign"},"5759":{"probe_name":"hdf5","function_name":"H5Tget_precision"},"5758":{"probe_name":"hdf5","function_name":"H5Tget_pad"},"5757":{"probe_name":"hdf5","function_name":"H5Tget_order"},"5756":{"probe_name":"hdf5","function_name":"H5Tget_offset"},"5755":{"probe_name":"hdf5","function_name":"H5Tget_norm"},"5754":{"probe_name":"hdf5","function_name":"H5Tget_nmembers"},"5753":{"probe_name":"hdf5","function_name":"H5Tget_native_type"},"5752":{"probe_name":"hdf5","function_name":"H5Tget_member_value"},"5751":{"probe_name":"hdf5","function_name":"H5Tget_member_type"},"5750":{"probe_name":"hdf5","function_name":"H5Tget_member_offset"},"5749":{"probe_name":"hdf5","function_name":"H5Tget_member_name"},"5748":{"probe_name":"hdf5","function_name":"H5Tget_member_index"},"5747":{"probe_name":"hdf5","function_name":"H5Tget_member_class"},"5746":{"probe_name":"hdf5","function_name":"H5Tget_inpad"},"5745":{"probe_name":"hdf5","function_name":"H5Tget_fields"},"5744":{"probe_name":"hdf5","function_name":"H5Tget_ebias"},"5743":{"probe_name":"hdf5","function_name":"H5Tget_cset"},"5742":{"probe_name":"hdf5","function_name":"H5Tget_create_plist"},"5741":{"probe_name":"hdf5","function_name":"H5Tget_class"},"5740":{"probe_name":"hdf5","function_name":"H5Tget_array_ndims"},"5739":{"probe_name":"hdf5","function_name":"H5Tget_array_dims2"},"5738":{"probe_name":"hdf5","function_name":"H5Tget_array_dims1"},"5737":{"probe_name":"hdf5","function_name":"H5Tflush"},"5736":{"probe_name":"hdf5","function_name":"H5Tfind"},"5735":{"probe_name":"hdf5","function_name":"H5Tequal"},"5734":{"probe_name":"hdf5","function_name":"H5Tenum_valueof"},"5733":{"probe_name":"hdf5","function_name":"H5Tenum_nameof"},"5732":{"probe_name":"hdf5","function_name":"H5Tenum_insert"},"5731":{"probe_name":"hdf5","function_name":"H5Tenum_create"},"5730":{"probe_name":"hdf5","function_name":"H5Tencode"},"5729":{"probe_name":"hdf5","function_name":"H5Tdetect_class"},"5728":{"probe_name":"hdf5","function_name":"H5Tdecode"},"5727":{"probe_name":"hdf5","function_name":"H5Tcreate"},"5726":{"probe_name":"hdf5","function_name":"H5Tcopy"},"5725":{"probe_name":"hdf5","function_name":"H5Tconvert"},"5724":{"probe_name":"hdf5","function_name":"H5Tcompiler_conv"},"5723":{"probe_name":"hdf5","function_name":"H5Tcommitted"},"5722":{"probe_name":"hdf5","function_name":"H5Tcommit_async"},"5721":{"probe_name":"hdf5","function_name":"H5Tcommit_anon"},"5720":{"probe_name":"hdf5","function_name":"H5Tcommit2"},"5719":{"probe_name":"hdf5","function_name":"H5Tcommit1"},"5718":{"probe_name":"hdf5","function_name":"H5Tclose_async"},"5717":{"probe_name":"hdf5","function_name":"H5Tclose"},"5716":{"probe_name":"hdf5","function_name":"H5Tarray_create2"},"5715":{"probe_name":"hdf5","function_name":"H5Tarray_create1"},"5714":{"probe_name":"hdf5","function_name":"H5T_vlen_reclaim_elmt"},"5713":{"probe_name":"hdf5","function_name":"H5T_update_shared"},"5712":{"probe_name":"hdf5","function_name":"H5T_unregister"},"5711":{"probe_name":"hdf5","function_name":"H5T_top_term_package"},"5710":{"probe_name":"hdf5","function_name":"H5T_term_package"},"5709":{"probe_name":"hdf5","function_name":"H5T_set_version"},"5708":{"probe_name":"hdf5","function_name":"H5T_set_loc.localalias"},"5707":{"probe_name":"hdf5","function_name":"H5T_set_loc"},"5706":{"probe_name":"hdf5","function_name":"H5T_save_refresh_state"},"5705":{"probe_name":"hdf5","function_name":"H5T_restore_refresh_state"},"5704":{"probe_name":"hdf5","function_name":"H5T_reclaim_cb"},"5703":{"probe_name":"hdf5","function_name":"H5T_reclaim"},"5702":{"probe_name":"hdf5","function_name":"H5T_path_noop"},"5701":{"probe_name":"hdf5","function_name":"H5T_path_match_find_type_with_volobj"},"5700":{"probe_name":"hdf5","function_name":"H5T_path_find"},"5699":{"probe_name":"hdf5","function_name":"H5T_path_compound_subset"},"5698":{"probe_name":"hdf5","function_name":"H5T_path_bkg"},"5697":{"probe_name":"hdf5","function_name":"H5T_patch_vlen_file"},"5696":{"probe_name":"hdf5","function_name":"H5T_patch_file"},"5695":{"probe_name":"hdf5","function_name":"H5T_own_vol_obj"},"5694":{"probe_name":"hdf5","function_name":"H5T_open"},"5693":{"probe_name":"hdf5","function_name":"H5T_oloc"},"5692":{"probe_name":"hdf5","function_name":"H5T_noop_conv"},"5691":{"probe_name":"hdf5","function_name":"H5T_nameof"},"5690":{"probe_name":"hdf5","function_name":"H5T_lock"},"5689":{"probe_name":"hdf5","function_name":"H5T_link"},"5688":{"probe_name":"hdf5","function_name":"H5T_is_vl_storage"},"5687":{"probe_name":"hdf5","function_name":"H5T_is_variable_str"},"5686":{"probe_name":"hdf5","function_name":"H5T_is_sensible"},"5685":{"probe_name":"hdf5","function_name":"H5T_is_relocatable"},"5684":{"probe_name":"hdf5","function_name":"H5T_is_numeric_with_unusual_unused_bits"},"5683":{"probe_name":"hdf5","function_name":"H5T_is_named"},"5682":{"probe_name":"hdf5","function_name":"H5T_is_immutable"},"5681":{"probe_name":"hdf5","function_name":"H5T_invoke_vol_optional"},"5680":{"probe_name":"hdf5","function_name":"H5T_init"},"5679":{"probe_name":"hdf5","function_name":"H5T_get_super"},"5678":{"probe_name":"hdf5","function_name":"H5T_get_size"},"5677":{"probe_name":"hdf5","function_name":"H5T_get_sign"},"5676":{"probe_name":"hdf5","function_name":"H5T_get_ref_type"},"5675":{"probe_name":"hdf5","function_name":"H5T_get_precision"},"5674":{"probe_name":"hdf5","function_name":"H5T_get_order.localalias"},"5673":{"probe_name":"hdf5","function_name":"H5T_get_order"},"5672":{"probe_name":"hdf5","function_name":"H5T_get_offset"},"5671":{"probe_name":"hdf5","function_name":"H5T_get_nmembers"},"5670":{"probe_name":"hdf5","function_name":"H5T_get_named_type"},"5669":{"probe_name":"hdf5","function_name":"H5T_get_member_type"},"5668":{"probe_name":"hdf5","function_name":"H5T_get_member_offset"},"5667":{"probe_name":"hdf5","function_name":"H5T_get_force_conv"},"5666":{"probe_name":"hdf5","function_name":"H5T_get_class"},"5665":{"probe_name":"hdf5","function_name":"H5T_get_actual_type"},"5664":{"probe_name":"hdf5","function_name":"H5T_encode"},"5663":{"probe_name":"hdf5","function_name":"H5T_detect_class.localalias"},"5662":{"probe_name":"hdf5","function_name":"H5T_detect_class"},"5661":{"probe_name":"hdf5","function_name":"H5T_decode"},"5660":{"probe_name":"hdf5","function_name":"H5T_debug.localalias"},"5659":{"probe_name":"hdf5","function_name":"H5T_debug.cold"},"5658":{"probe_name":"hdf5","function_name":"H5T_debug"},"5657":{"probe_name":"hdf5","function_name":"H5T_copy_reopen"},"5656":{"probe_name":"hdf5","function_name":"H5T_copy"},"5655":{"probe_name":"hdf5","function_name":"H5T_convert_with_ctx"},"5654":{"probe_name":"hdf5","function_name":"H5T_convert_committed_datatype"},"5653":{"probe_name":"hdf5","function_name":"H5T_convert"},"5652":{"probe_name":"hdf5","function_name":"H5T_construct_datatype"},"5651":{"probe_name":"hdf5","function_name":"H5T_cmp.localalias"},"5650":{"probe_name":"hdf5","function_name":"H5T_cmp"},"5649":{"probe_name":"hdf5","function_name":"H5T_close_real"},"5648":{"probe_name":"hdf5","function_name":"H5T_close"},"5647":{"probe_name":"hdf5","function_name":"H5T_already_vol_managed"},"5646":{"probe_name":"hdf5","function_name":"H5T__vlen_set_loc"},"5645":{"probe_name":"hdf5","function_name":"H5T__vlen_reclaim"},"5644":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_str_write"},"5643":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_str_setnull"},"5642":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_str_read"},"5641":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_str_isnull"},"5640":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_str_getptr"},"5639":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_str_getlen"},"5638":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_seq_write"},"5637":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_seq_setnull"},"5636":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_seq_read"},"5635":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_seq_isnull"},"5634":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_seq_getptr"},"5633":{"probe_name":"hdf5","function_name":"H5T__vlen_mem_seq_getlen"},"5632":{"probe_name":"hdf5","function_name":"H5T__vlen_disk_write"},"5631":{"probe_name":"hdf5","function_name":"H5T__vlen_disk_setnull"},"5630":{"probe_name":"hdf5","function_name":"H5T__vlen_disk_read"},"5629":{"probe_name":"hdf5","function_name":"H5T__vlen_disk_isnull"},"5628":{"probe_name":"hdf5","function_name":"H5T__vlen_disk_getlen"},"5627":{"probe_name":"hdf5","function_name":"H5T__vlen_disk_delete.part.0"},"5626":{"probe_name":"hdf5","function_name":"H5T__vlen_disk_delete"},"5625":{"probe_name":"hdf5","function_name":"H5T__vlen_create"},"5624":{"probe_name":"hdf5","function_name":"H5T__visit.localalias"},"5623":{"probe_name":"hdf5","function_name":"H5T__visit"},"5622":{"probe_name":"hdf5","function_name":"H5T__upgrade_version_cb"},"5621":{"probe_name":"hdf5","function_name":"H5T__upgrade_version"},"5620":{"probe_name":"hdf5","function_name":"H5T__update_packed"},"5619":{"probe_name":"hdf5","function_name":"H5T__unlock_cb"},"5618":{"probe_name":"hdf5","function_name":"H5T__sort_value"},"5617":{"probe_name":"hdf5","function_name":"H5T__sort_name"},"5616":{"probe_name":"hdf5","function_name":"H5T__set_size"},"5615":{"probe_name":"hdf5","function_name":"H5T__set_precision"},"5614":{"probe_name":"hdf5","function_name":"H5T__set_order"},"5613":{"probe_name":"hdf5","function_name":"H5T__set_offset"},"5612":{"probe_name":"hdf5","function_name":"H5T__reverse_order"},"5611":{"probe_name":"hdf5","function_name":"H5T__register_int"},"5610":{"probe_name":"hdf5","function_name":"H5T__register"},"5609":{"probe_name":"hdf5","function_name":"H5T__ref_set_loc"},"5608":{"probe_name":"hdf5","function_name":"H5T__ref_reclaim"},"5607":{"probe_name":"hdf5","function_name":"H5T__ref_obj_disk_read"},"5606":{"probe_name":"hdf5","function_name":"H5T__ref_obj_disk_isnull"},"5605":{"probe_name":"hdf5","function_name":"H5T__ref_obj_disk_getsize"},"5604":{"probe_name":"hdf5","function_name":"H5T__ref_mem_write"},"5603":{"probe_name":"hdf5","function_name":"H5T__ref_mem_setnull"},"5602":{"probe_name":"hdf5","function_name":"H5T__ref_mem_read"},"5601":{"probe_name":"hdf5","function_name":"H5T__ref_mem_isnull"},"5600":{"probe_name":"hdf5","function_name":"H5T__ref_mem_getsize"},"5599":{"probe_name":"hdf5","function_name":"H5T__ref_dsetreg_disk_read"},"5598":{"probe_name":"hdf5","function_name":"H5T__ref_dsetreg_disk_isnull"},"5597":{"probe_name":"hdf5","function_name":"H5T__ref_dsetreg_disk_getsize"},"5596":{"probe_name":"hdf5","function_name":"H5T__ref_disk_write"},"5595":{"probe_name":"hdf5","function_name":"H5T__ref_disk_setnull"},"5594":{"probe_name":"hdf5","function_name":"H5T__ref_disk_read"},"5593":{"probe_name":"hdf5","function_name":"H5T__ref_disk_isnull"},"5592":{"probe_name":"hdf5","function_name":"H5T__ref_disk_getsize"},"5591":{"probe_name":"hdf5","function_name":"H5T__print_path_stats"},"5590":{"probe_name":"hdf5","function_name":"H5T__path_free"},"5589":{"probe_name":"hdf5","function_name":"H5T__path_find_real"},"5588":{"probe_name":"hdf5","function_name":"H5T__pack"},"5587":{"probe_name":"hdf5","function_name":"H5T__open_name"},"5586":{"probe_name":"hdf5","function_name":"H5T__open_api_common"},"5585":{"probe_name":"hdf5","function_name":"H5T__insert"},"5584":{"probe_name":"hdf5","function_name":"H5T__initiate_copy"},"5583":{"probe_name":"hdf5","function_name":"H5T__init_native_internal"},"5582":{"probe_name":"hdf5","function_name":"H5T__init_native_float_types"},"5581":{"probe_name":"hdf5","function_name":"H5T__get_path_table_npaths"},"5580":{"probe_name":"hdf5","function_name":"H5T__get_native_type"},"5579":{"probe_name":"hdf5","function_name":"H5T__get_member_value"},"5578":{"probe_name":"hdf5","function_name":"H5T__get_member_size"},"5577":{"probe_name":"hdf5","function_name":"H5T__get_member_name"},"5576":{"probe_name":"hdf5","function_name":"H5T__get_create_plist"},"5575":{"probe_name":"hdf5","function_name":"H5T__get_array_ndims"},"5574":{"probe_name":"hdf5","function_name":"H5T__get_array_dims"},"5573":{"probe_name":"hdf5","function_name":"H5T__free"},"5572":{"probe_name":"hdf5","function_name":"H5T__enum_insert"},"5571":{"probe_name":"hdf5","function_name":"H5T__enum_create"},"5570":{"probe_name":"hdf5","function_name":"H5T__detect_vlen_ref"},"5569":{"probe_name":"hdf5","function_name":"H5T__create"},"5568":{"probe_name":"hdf5","function_name":"H5T__copy_transient"},"5567":{"probe_name":"hdf5","function_name":"H5T__copy_all"},"5566":{"probe_name":"hdf5","function_name":"H5T__conv_vlen_nested_free"},"5565":{"probe_name":"hdf5","function_name":"H5T__conv_vlen"},"5564":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_ulong.cold"},"5563":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_ulong"},"5562":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_ullong.cold"},"5561":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_ullong"},"5560":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_uint.cold"},"5559":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_uint"},"5558":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_uchar"},"5557":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_short"},"5556":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_schar"},"5555":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_long.cold"},"5554":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_long"},"5553":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_llong.cold"},"5552":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_llong"},"5551":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_ldouble"},"5550":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_int.cold"},"5549":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_int"},"5548":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_float"},"5547":{"probe_name":"hdf5","function_name":"H5T__conv_ushort_double"},"5546":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_ushort"},"5545":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_ullong"},"5544":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_uint"},"5543":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_uchar"},"5542":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_short"},"5541":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_schar"},"5540":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_long"},"5539":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_llong"},"5538":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_ldouble"},"5537":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_int"},"5536":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_float"},"5535":{"probe_name":"hdf5","function_name":"H5T__conv_ulong_double"},"5534":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_ushort"},"5533":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_ulong"},"5532":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_uint"},"5531":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_uchar"},"5530":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_short"},"5529":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_schar"},"5528":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_long"},"5527":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_llong"},"5526":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_ldouble"},"5525":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_int"},"5524":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_float"},"5523":{"probe_name":"hdf5","function_name":"H5T__conv_ullong_double"},"5522":{"probe_name":"hdf5","function_name":"H5T__conv_uint_ushort"},"5521":{"probe_name":"hdf5","function_name":"H5T__conv_uint_ulong.cold"},"5520":{"probe_name":"hdf5","function_name":"H5T__conv_uint_ulong"},"5519":{"probe_name":"hdf5","function_name":"H5T__conv_uint_ullong.cold"},"5518":{"probe_name":"hdf5","function_name":"H5T__conv_uint_ullong"},"5517":{"probe_name":"hdf5","function_name":"H5T__conv_uint_uchar"},"5516":{"probe_name":"hdf5","function_name":"H5T__conv_uint_short"},"5515":{"probe_name":"hdf5","function_name":"H5T__conv_uint_schar"},"5514":{"probe_name":"hdf5","function_name":"H5T__conv_uint_long.cold"},"5513":{"probe_name":"hdf5","function_name":"H5T__conv_uint_long"},"5512":{"probe_name":"hdf5","function_name":"H5T__conv_uint_llong.cold"},"5511":{"probe_name":"hdf5","function_name":"H5T__conv_uint_llong"},"5510":{"probe_name":"hdf5","function_name":"H5T__conv_uint_ldouble"},"5509":{"probe_name":"hdf5","function_name":"H5T__conv_uint_int"},"5508":{"probe_name":"hdf5","function_name":"H5T__conv_uint_float"},"5507":{"probe_name":"hdf5","function_name":"H5T__conv_uint_double"},"5506":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_ushort.cold"},"5505":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_ushort"},"5504":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_ulong.cold"},"5503":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_ulong"},"5502":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_ullong.cold"},"5501":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_ullong"},"5500":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_uint.cold"},"5499":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_uint"},"5498":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_short.cold"},"5497":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_short"},"5496":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_schar"},"5495":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_long.cold"},"5494":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_long"},"5493":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_llong.cold"},"5492":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_llong"},"5491":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_ldouble"},"5490":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_int.cold"},"5489":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_int"},"5488":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_float"},"5487":{"probe_name":"hdf5","function_name":"H5T__conv_uchar_double"},"5486":{"probe_name":"hdf5","function_name":"H5T__conv_struct_subset"},"5485":{"probe_name":"hdf5","function_name":"H5T__conv_struct_opt"},"5484":{"probe_name":"hdf5","function_name":"H5T__conv_struct_init"},"5483":{"probe_name":"hdf5","function_name":"H5T__conv_struct_free"},"5482":{"probe_name":"hdf5","function_name":"H5T__conv_struct"},"5481":{"probe_name":"hdf5","function_name":"H5T__conv_short_ushort"},"5480":{"probe_name":"hdf5","function_name":"H5T__conv_short_ulong"},"5479":{"probe_name":"hdf5","function_name":"H5T__conv_short_ullong"},"5478":{"probe_name":"hdf5","function_name":"H5T__conv_short_uint"},"5477":{"probe_name":"hdf5","function_name":"H5T__conv_short_uchar"},"5476":{"probe_name":"hdf5","function_name":"H5T__conv_short_schar"},"5475":{"probe_name":"hdf5","function_name":"H5T__conv_short_long.cold"},"5474":{"probe_name":"hdf5","function_name":"H5T__conv_short_long"},"5473":{"probe_name":"hdf5","function_name":"H5T__conv_short_llong.cold"},"5472":{"probe_name":"hdf5","function_name":"H5T__conv_short_llong"},"5471":{"probe_name":"hdf5","function_name":"H5T__conv_short_ldouble"},"5470":{"probe_name":"hdf5","function_name":"H5T__conv_short_int.cold"},"5469":{"probe_name":"hdf5","function_name":"H5T__conv_short_int"},"5468":{"probe_name":"hdf5","function_name":"H5T__conv_short_float"},"5467":{"probe_name":"hdf5","function_name":"H5T__conv_short_double"},"5466":{"probe_name":"hdf5","function_name":"H5T__conv_schar_ushort"},"5465":{"probe_name":"hdf5","function_name":"H5T__conv_schar_ulong"},"5464":{"probe_name":"hdf5","function_name":"H5T__conv_schar_ullong"},"5463":{"probe_name":"hdf5","function_name":"H5T__conv_schar_uint"},"5462":{"probe_name":"hdf5","function_name":"H5T__conv_schar_uchar"},"5461":{"probe_name":"hdf5","function_name":"H5T__conv_schar_short.cold"},"5460":{"probe_name":"hdf5","function_name":"H5T__conv_schar_short"},"5459":{"probe_name":"hdf5","function_name":"H5T__conv_schar_long.cold"},"5458":{"probe_name":"hdf5","function_name":"H5T__conv_schar_long"},"5457":{"probe_name":"hdf5","function_name":"H5T__conv_schar_llong.cold"},"5456":{"probe_name":"hdf5","function_name":"H5T__conv_schar_llong"},"5455":{"probe_name":"hdf5","function_name":"H5T__conv_schar_ldouble"},"5454":{"probe_name":"hdf5","function_name":"H5T__conv_schar_int.cold"},"5453":{"probe_name":"hdf5","function_name":"H5T__conv_schar_int"},"5452":{"probe_name":"hdf5","function_name":"H5T__conv_schar_float"},"5451":{"probe_name":"hdf5","function_name":"H5T__conv_schar_double"},"5450":{"probe_name":"hdf5","function_name":"H5T__conv_s_s"},"5449":{"probe_name":"hdf5","function_name":"H5T__conv_ref"},"5448":{"probe_name":"hdf5","function_name":"H5T__conv_order_opt"},"5447":{"probe_name":"hdf5","function_name":"H5T__conv_order"},"5446":{"probe_name":"hdf5","function_name":"H5T__conv_noop"},"5445":{"probe_name":"hdf5","function_name":"H5T__conv_long_ushort"},"5444":{"probe_name":"hdf5","function_name":"H5T__conv_long_ulong"},"5443":{"probe_name":"hdf5","function_name":"H5T__conv_long_ullong"},"5442":{"probe_name":"hdf5","function_name":"H5T__conv_long_uint"},"5441":{"probe_name":"hdf5","function_name":"H5T__conv_long_uchar"},"5440":{"probe_name":"hdf5","function_name":"H5T__conv_long_short"},"5439":{"probe_name":"hdf5","function_name":"H5T__conv_long_schar"},"5438":{"probe_name":"hdf5","function_name":"H5T__conv_long_llong"},"5437":{"probe_name":"hdf5","function_name":"H5T__conv_long_ldouble"},"5436":{"probe_name":"hdf5","function_name":"H5T__conv_long_int"},"5435":{"probe_name":"hdf5","function_name":"H5T__conv_long_float"},"5434":{"probe_name":"hdf5","function_name":"H5T__conv_long_double"},"5433":{"probe_name":"hdf5","function_name":"H5T__conv_llong_ushort"},"5432":{"probe_name":"hdf5","function_name":"H5T__conv_llong_ulong"},"5431":{"probe_name":"hdf5","function_name":"H5T__conv_llong_ullong"},"5430":{"probe_name":"hdf5","function_name":"H5T__conv_llong_uint"},"5429":{"probe_name":"hdf5","function_name":"H5T__conv_llong_uchar"},"5428":{"probe_name":"hdf5","function_name":"H5T__conv_llong_short"},"5427":{"probe_name":"hdf5","function_name":"H5T__conv_llong_schar"},"5426":{"probe_name":"hdf5","function_name":"H5T__conv_llong_long"},"5425":{"probe_name":"hdf5","function_name":"H5T__conv_llong_ldouble"},"5424":{"probe_name":"hdf5","function_name":"H5T__conv_llong_int"},"5423":{"probe_name":"hdf5","function_name":"H5T__conv_llong_float"},"5422":{"probe_name":"hdf5","function_name":"H5T__conv_llong_double"},"5421":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_ushort"},"5420":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_ulong"},"5419":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_ullong"},"5418":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_uint"},"5417":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_uchar"},"5416":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_short"},"5415":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_schar"},"5414":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_long"},"5413":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_llong"},"5412":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_int"},"5411":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_float"},"5410":{"probe_name":"hdf5","function_name":"H5T__conv_ldouble_double"},"5409":{"probe_name":"hdf5","function_name":"H5T__conv_int_ushort"},"5408":{"probe_name":"hdf5","function_name":"H5T__conv_int_ulong"},"5407":{"probe_name":"hdf5","function_name":"H5T__conv_int_ullong"},"5406":{"probe_name":"hdf5","function_name":"H5T__conv_int_uint"},"5405":{"probe_name":"hdf5","function_name":"H5T__conv_int_uchar"},"5404":{"probe_name":"hdf5","function_name":"H5T__conv_int_short"},"5403":{"probe_name":"hdf5","function_name":"H5T__conv_int_schar"},"5402":{"probe_name":"hdf5","function_name":"H5T__conv_int_long.cold"},"5401":{"probe_name":"hdf5","function_name":"H5T__conv_int_long"},"5400":{"probe_name":"hdf5","function_name":"H5T__conv_int_llong.cold"},"5399":{"probe_name":"hdf5","function_name":"H5T__conv_int_llong"},"5398":{"probe_name":"hdf5","function_name":"H5T__conv_int_ldouble"},"5397":{"probe_name":"hdf5","function_name":"H5T__conv_int_float"},"5396":{"probe_name":"hdf5","function_name":"H5T__conv_int_double"},"5395":{"probe_name":"hdf5","function_name":"H5T__conv_i_i"},"5394":{"probe_name":"hdf5","function_name":"H5T__conv_i_f"},"5393":{"probe_name":"hdf5","function_name":"H5T__conv_float_ushort"},"5392":{"probe_name":"hdf5","function_name":"H5T__conv_float_ulong"},"5391":{"probe_name":"hdf5","function_name":"H5T__conv_float_ullong"},"5390":{"probe_name":"hdf5","function_name":"H5T__conv_float_uint"},"5389":{"probe_name":"hdf5","function_name":"H5T__conv_float_uchar"},"5388":{"probe_name":"hdf5","function_name":"H5T__conv_float_short"},"5387":{"probe_name":"hdf5","function_name":"H5T__conv_float_schar"},"5386":{"probe_name":"hdf5","function_name":"H5T__conv_float_long"},"5385":{"probe_name":"hdf5","function_name":"H5T__conv_float_llong"},"5384":{"probe_name":"hdf5","function_name":"H5T__conv_float_ldouble.cold"},"5383":{"probe_name":"hdf5","function_name":"H5T__conv_float_ldouble"},"5382":{"probe_name":"hdf5","function_name":"H5T__conv_float_int"},"5381":{"probe_name":"hdf5","function_name":"H5T__conv_float_double.cold"},"5380":{"probe_name":"hdf5","function_name":"H5T__conv_float_double"},"5379":{"probe_name":"hdf5","function_name":"H5T__conv_f_i"},"5378":{"probe_name":"hdf5","function_name":"H5T__conv_f_f"},"5377":{"probe_name":"hdf5","function_name":"H5T__conv_enum_numeric"},"5376":{"probe_name":"hdf5","function_name":"H5T__conv_enum_init"},"5375":{"probe_name":"hdf5","function_name":"H5T__conv_enum_free.part.0"},"5374":{"probe_name":"hdf5","function_name":"H5T__conv_enum"},"5373":{"probe_name":"hdf5","function_name":"H5T__conv_double_ushort"},"5372":{"probe_name":"hdf5","function_name":"H5T__conv_double_ulong"},"5371":{"probe_name":"hdf5","function_name":"H5T__conv_double_ullong"},"5370":{"probe_name":"hdf5","function_name":"H5T__conv_double_uint"},"5369":{"probe_name":"hdf5","function_name":"H5T__conv_double_uchar"},"5368":{"probe_name":"hdf5","function_name":"H5T__conv_double_short"},"5367":{"probe_name":"hdf5","function_name":"H5T__conv_double_schar"},"5366":{"probe_name":"hdf5","function_name":"H5T__conv_double_long"},"5365":{"probe_name":"hdf5","function_name":"H5T__conv_double_llong"},"5364":{"probe_name":"hdf5","function_name":"H5T__conv_double_ldouble.cold"},"5363":{"probe_name":"hdf5","function_name":"H5T__conv_double_ldouble"},"5362":{"probe_name":"hdf5","function_name":"H5T__conv_double_int"},"5361":{"probe_name":"hdf5","function_name":"H5T__conv_double_float"},"5360":{"probe_name":"hdf5","function_name":"H5T__conv_b_b"},"5359":{"probe_name":"hdf5","function_name":"H5T__conv_array"},"5358":{"probe_name":"hdf5","function_name":"H5T__complete_copy"},"5357":{"probe_name":"hdf5","function_name":"H5T__commit_named"},"5356":{"probe_name":"hdf5","function_name":"H5T__commit_api_common"},"5355":{"probe_name":"hdf5","function_name":"H5T__commit_anon"},"5354":{"probe_name":"hdf5","function_name":"H5T__commit"},"5353":{"probe_name":"hdf5","function_name":"H5T__close_cb"},"5352":{"probe_name":"hdf5","function_name":"H5T__bit_shift"},"5351":{"probe_name":"hdf5","function_name":"H5T__bit_set_d"},"5350":{"probe_name":"hdf5","function_name":"H5T__bit_set"},"5349":{"probe_name":"hdf5","function_name":"H5T__bit_neg"},"5348":{"probe_name":"hdf5","function_name":"H5T__bit_inc"},"5347":{"probe_name":"hdf5","function_name":"H5T__bit_get_d"},"5346":{"probe_name":"hdf5","function_name":"H5T__bit_find"},"5345":{"probe_name":"hdf5","function_name":"H5T__bit_dec"},"5344":{"probe_name":"hdf5","function_name":"H5T__bit_copy"},"5343":{"probe_name":"hdf5","function_name":"H5T__bit_cmp.constprop.0"},"5342":{"probe_name":"hdf5","function_name":"H5T__array_create"},"5341":{"probe_name":"hdf5","function_name":"H5T__alloc"},"5340":{"probe_name":"hdf5","function_name":"H5Sset_extent_simple"},"5339":{"probe_name":"hdf5","function_name":"H5Sset_extent_none"},"5338":{"probe_name":"hdf5","function_name":"H5Sselect_valid"},"5337":{"probe_name":"hdf5","function_name":"H5Sselect_shape_same"},"5336":{"probe_name":"hdf5","function_name":"H5Sselect_project_intersection"},"5335":{"probe_name":"hdf5","function_name":"H5Sselect_none"},"5334":{"probe_name":"hdf5","function_name":"H5Sselect_intersect_block"},"5333":{"probe_name":"hdf5","function_name":"H5Sselect_hyperslab"},"5332":{"probe_name":"hdf5","function_name":"H5Sselect_elements"},"5331":{"probe_name":"hdf5","function_name":"H5Sselect_copy"},"5330":{"probe_name":"hdf5","function_name":"H5Sselect_all"},"5329":{"probe_name":"hdf5","function_name":"H5Sselect_adjust"},"5328":{"probe_name":"hdf5","function_name":"H5Ssel_iter_reset"},"5327":{"probe_name":"hdf5","function_name":"H5Ssel_iter_get_seq_list"},"5326":{"probe_name":"hdf5","function_name":"H5Ssel_iter_create"},"5325":{"probe_name":"hdf5","function_name":"H5Ssel_iter_close"},"5324":{"probe_name":"hdf5","function_name":"H5Soffset_simple"},"5323":{"probe_name":"hdf5","function_name":"H5Smodify_select"},"5322":{"probe_name":"hdf5","function_name":"H5Sis_simple"},"5321":{"probe_name":"hdf5","function_name":"H5Sis_regular_hyperslab"},"5320":{"probe_name":"hdf5","function_name":"H5Sget_simple_extent_type"},"5319":{"probe_name":"hdf5","function_name":"H5Sget_simple_extent_npoints"},"5318":{"probe_name":"hdf5","function_name":"H5Sget_simple_extent_ndims"},"5317":{"probe_name":"hdf5","function_name":"H5Sget_simple_extent_dims"},"5316":{"probe_name":"hdf5","function_name":"H5Sget_select_type"},"5315":{"probe_name":"hdf5","function_name":"H5Sget_select_npoints"},"5314":{"probe_name":"hdf5","function_name":"H5Sget_select_hyper_nblocks"},"5313":{"probe_name":"hdf5","function_name":"H5Sget_select_hyper_blocklist"},"5312":{"probe_name":"hdf5","function_name":"H5Sget_select_elem_pointlist"},"5311":{"probe_name":"hdf5","function_name":"H5Sget_select_elem_npoints"},"5310":{"probe_name":"hdf5","function_name":"H5Sget_select_bounds"},"5309":{"probe_name":"hdf5","function_name":"H5Sget_regular_hyperslab"},"5308":{"probe_name":"hdf5","function_name":"H5Sextent_equal"},"5307":{"probe_name":"hdf5","function_name":"H5Sextent_copy"},"5306":{"probe_name":"hdf5","function_name":"H5Sencode2"},"5305":{"probe_name":"hdf5","function_name":"H5Sencode1"},"5304":{"probe_name":"hdf5","function_name":"H5Sdecode"},"5303":{"probe_name":"hdf5","function_name":"H5Screate_simple"},"5302":{"probe_name":"hdf5","function_name":"H5Screate"},"5301":{"probe_name":"hdf5","function_name":"H5Scopy"},"5300":{"probe_name":"hdf5","function_name":"H5Scombine_select"},"5299":{"probe_name":"hdf5","function_name":"H5Scombine_hyperslab"},"5298":{"probe_name":"hdf5","function_name":"H5Sclose"},"5297":{"probe_name":"hdf5","function_name":"H5S_write"},"5296":{"probe_name":"hdf5","function_name":"H5S_top_term_package"},"5295":{"probe_name":"hdf5","function_name":"H5S_term_package"},"5294":{"probe_name":"hdf5","function_name":"H5S_set_version"},"5293":{"probe_name":"hdf5","function_name":"H5S_set_extent_simple"},"5292":{"probe_name":"hdf5","function_name":"H5S_set_extent_real"},"5291":{"probe_name":"hdf5","function_name":"H5S_set_extent"},"5290":{"probe_name":"hdf5","function_name":"H5S_select_valid"},"5289":{"probe_name":"hdf5","function_name":"H5S_select_subtract"},"5288":{"probe_name":"hdf5","function_name":"H5S_select_shape_same"},"5287":{"probe_name":"hdf5","function_name":"H5S_select_serialize"},"5286":{"probe_name":"hdf5","function_name":"H5S_select_serial_size"},"5285":{"probe_name":"hdf5","function_name":"H5S_select_release"},"5284":{"probe_name":"hdf5","function_name":"H5S_select_project_simple"},"5283":{"probe_name":"hdf5","function_name":"H5S_select_project_scalar"},"5282":{"probe_name":"hdf5","function_name":"H5S_select_project_intersection"},"5281":{"probe_name":"hdf5","function_name":"H5S_select_offset"},"5280":{"probe_name":"hdf5","function_name":"H5S_select_none"},"5279":{"probe_name":"hdf5","function_name":"H5S_select_iterate"},"5278":{"probe_name":"hdf5","function_name":"H5S_select_iter_release"},"5277":{"probe_name":"hdf5","function_name":"H5S_select_iter_next"},"5276":{"probe_name":"hdf5","function_name":"H5S_select_iter_nelmts"},"5275":{"probe_name":"hdf5","function_name":"H5S_select_iter_init"},"5274":{"probe_name":"hdf5","function_name":"H5S_select_iter_get_seq_list"},"5273":{"probe_name":"hdf5","function_name":"H5S_select_iter_coords"},"5272":{"probe_name":"hdf5","function_name":"H5S_select_is_single"},"5271":{"probe_name":"hdf5","function_name":"H5S_select_is_regular"},"5270":{"probe_name":"hdf5","function_name":"H5S_select_is_contiguous"},"5269":{"probe_name":"hdf5","function_name":"H5S_select_intersect_block"},"5268":{"probe_name":"hdf5","function_name":"H5S_select_hyperslab.localalias"},"5267":{"probe_name":"hdf5","function_name":"H5S_select_hyperslab"},"5266":{"probe_name":"hdf5","function_name":"H5S_select_fill"},"5265":{"probe_name":"hdf5","function_name":"H5S_select_elements"},"5264":{"probe_name":"hdf5","function_name":"H5S_select_deserialize"},"5263":{"probe_name":"hdf5","function_name":"H5S_select_copy"},"5262":{"probe_name":"hdf5","function_name":"H5S_select_contig_block"},"5261":{"probe_name":"hdf5","function_name":"H5S_select_construct_projection"},"5260":{"probe_name":"hdf5","function_name":"H5S_select_all"},"5259":{"probe_name":"hdf5","function_name":"H5S_select_adjust_u"},"5258":{"probe_name":"hdf5","function_name":"H5S_select_adjust_s"},"5257":{"probe_name":"hdf5","function_name":"H5S_sel_iter_close"},"5256":{"probe_name":"hdf5","function_name":"H5S_read"},"5255":{"probe_name":"hdf5","function_name":"H5S_mpio_space_type"},"5254":{"probe_name":"hdf5","function_name":"H5S_init"},"5253":{"probe_name":"hdf5","function_name":"H5S_hyper_normalize_offset"},"5252":{"probe_name":"hdf5","function_name":"H5S_hyper_get_unlim_block"},"5251":{"probe_name":"hdf5","function_name":"H5S_hyper_get_first_inc_block"},"5250":{"probe_name":"hdf5","function_name":"H5S_hyper_get_clip_extent_match"},"5249":{"probe_name":"hdf5","function_name":"H5S_hyper_get_clip_extent"},"5248":{"probe_name":"hdf5","function_name":"H5S_hyper_denormalize_offset"},"5247":{"probe_name":"hdf5","function_name":"H5S_hyper_clip_unlim"},"5246":{"probe_name":"hdf5","function_name":"H5S_hyper_add_span_element"},"5245":{"probe_name":"hdf5","function_name":"H5S_has_extent"},"5244":{"probe_name":"hdf5","function_name":"H5S_get_simple_extent_type"},"5243":{"probe_name":"hdf5","function_name":"H5S_get_simple_extent_npoints"},"5242":{"probe_name":"hdf5","function_name":"H5S_get_simple_extent_ndims"},"5241":{"probe_name":"hdf5","function_name":"H5S_get_simple_extent_dims"},"5240":{"probe_name":"hdf5","function_name":"H5S_get_simple_extent"},"5239":{"probe_name":"hdf5","function_name":"H5S_get_select_unlim_dim"},"5238":{"probe_name":"hdf5","function_name":"H5S_get_select_type"},"5237":{"probe_name":"hdf5","function_name":"H5S_get_select_offset"},"5236":{"probe_name":"hdf5","function_name":"H5S_get_select_num_elem_non_unlim"},"5235":{"probe_name":"hdf5","function_name":"H5S_get_select_npoints"},"5234":{"probe_name":"hdf5","function_name":"H5S_get_select_bounds"},"5233":{"probe_name":"hdf5","function_name":"H5S_get_npoints_max"},"5232":{"probe_name":"hdf5","function_name":"H5S_extent_nelem"},"5231":{"probe_name":"hdf5","function_name":"H5S_extent_get_dims"},"5230":{"probe_name":"hdf5","function_name":"H5S_extent_equal"},"5229":{"probe_name":"hdf5","function_name":"H5S_extent_copy"},"5228":{"probe_name":"hdf5","function_name":"H5S_encode"},"5227":{"probe_name":"hdf5","function_name":"H5S_decode"},"5226":{"probe_name":"hdf5","function_name":"H5S_debug"},"5225":{"probe_name":"hdf5","function_name":"H5S_create_simple"},"5224":{"probe_name":"hdf5","function_name":"H5S_create"},"5223":{"probe_name":"hdf5","function_name":"H5S_copy"},"5222":{"probe_name":"hdf5","function_name":"H5S_combine_hyperslab"},"5221":{"probe_name":"hdf5","function_name":"H5S_close"},"5220":{"probe_name":"hdf5","function_name":"H5S_append"},"5219":{"probe_name":"hdf5","function_name":"H5S__verify_offsets"},"5218":{"probe_name":"hdf5","function_name":"H5S__set_regular_hyperslab"},"5217":{"probe_name":"hdf5","function_name":"H5S__sel_iter_close_cb"},"5216":{"probe_name":"hdf5","function_name":"H5S__point_unlim_dim"},"5215":{"probe_name":"hdf5","function_name":"H5S__point_shape_same"},"5214":{"probe_name":"hdf5","function_name":"H5S__point_serialize"},"5213":{"probe_name":"hdf5","function_name":"H5S__point_serial_size"},"5212":{"probe_name":"hdf5","function_name":"H5S__point_release"},"5211":{"probe_name":"hdf5","function_name":"H5S__point_project_simple"},"5210":{"probe_name":"hdf5","function_name":"H5S__point_project_scalar"},"5209":{"probe_name":"hdf5","function_name":"H5S__point_offset"},"5208":{"probe_name":"hdf5","function_name":"H5S__point_iter_release"},"5207":{"probe_name":"hdf5","function_name":"H5S__point_iter_next_block"},"5206":{"probe_name":"hdf5","function_name":"H5S__point_iter_next"},"5205":{"probe_name":"hdf5","function_name":"H5S__point_iter_nelmts"},"5204":{"probe_name":"hdf5","function_name":"H5S__point_iter_init"},"5203":{"probe_name":"hdf5","function_name":"H5S__point_iter_has_next_block"},"5202":{"probe_name":"hdf5","function_name":"H5S__point_iter_get_seq_list"},"5201":{"probe_name":"hdf5","function_name":"H5S__point_iter_coords"},"5200":{"probe_name":"hdf5","function_name":"H5S__point_iter_block"},"5199":{"probe_name":"hdf5","function_name":"H5S__point_is_valid"},"5198":{"probe_name":"hdf5","function_name":"H5S__point_is_single"},"5197":{"probe_name":"hdf5","function_name":"H5S__point_is_regular"},"5196":{"probe_name":"hdf5","function_name":"H5S__point_is_contiguous"},"5195":{"probe_name":"hdf5","function_name":"H5S__point_intersect_block"},"5194":{"probe_name":"hdf5","function_name":"H5S__point_get_version_enc_size"},"5193":{"probe_name":"hdf5","function_name":"H5S__point_deserialize"},"5192":{"probe_name":"hdf5","function_name":"H5S__point_copy"},"5191":{"probe_name":"hdf5","function_name":"H5S__point_bounds"},"5190":{"probe_name":"hdf5","function_name":"H5S__point_adjust_u"},"5189":{"probe_name":"hdf5","function_name":"H5S__point_adjust_s"},"5188":{"probe_name":"hdf5","function_name":"H5S__obtain_datatype.constprop.0"},"5187":{"probe_name":"hdf5","function_name":"H5S__none_unlim_dim"},"5186":{"probe_name":"hdf5","function_name":"H5S__none_shape_same"},"5185":{"probe_name":"hdf5","function_name":"H5S__none_serialize"},"5184":{"probe_name":"hdf5","function_name":"H5S__none_serial_size"},"5183":{"probe_name":"hdf5","function_name":"H5S__none_release"},"5182":{"probe_name":"hdf5","function_name":"H5S__none_project_simple"},"5181":{"probe_name":"hdf5","function_name":"H5S__none_project_scalar"},"5180":{"probe_name":"hdf5","function_name":"H5S__none_offset"},"5179":{"probe_name":"hdf5","function_name":"H5S__none_iter_release"},"5178":{"probe_name":"hdf5","function_name":"H5S__none_iter_next_block"},"5177":{"probe_name":"hdf5","function_name":"H5S__none_iter_next"},"5176":{"probe_name":"hdf5","function_name":"H5S__none_iter_nelmts"},"5175":{"probe_name":"hdf5","function_name":"H5S__none_iter_init"},"5174":{"probe_name":"hdf5","function_name":"H5S__none_iter_has_next_block"},"5173":{"probe_name":"hdf5","function_name":"H5S__none_iter_get_seq_list"},"5172":{"probe_name":"hdf5","function_name":"H5S__none_iter_coords"},"5171":{"probe_name":"hdf5","function_name":"H5S__none_iter_block"},"5170":{"probe_name":"hdf5","function_name":"H5S__none_is_valid"},"5169":{"probe_name":"hdf5","function_name":"H5S__none_is_single"},"5168":{"probe_name":"hdf5","function_name":"H5S__none_is_regular"},"5167":{"probe_name":"hdf5","function_name":"H5S__none_is_contiguous"},"5166":{"probe_name":"hdf5","function_name":"H5S__none_intersect_block"},"5165":{"probe_name":"hdf5","function_name":"H5S__none_deserialize"},"5164":{"probe_name":"hdf5","function_name":"H5S__none_copy"},"5163":{"probe_name":"hdf5","function_name":"H5S__none_bounds"},"5162":{"probe_name":"hdf5","function_name":"H5S__none_adjust_u"},"5161":{"probe_name":"hdf5","function_name":"H5S__none_adjust_s"},"5160":{"probe_name":"hdf5","function_name":"H5S__mpio_span_hyper_type"},"5159":{"probe_name":"hdf5","function_name":"H5S__mpio_reg_hyper_type"},"5158":{"probe_name":"hdf5","function_name":"H5S__mpio_create_point_datatype"},"5157":{"probe_name":"hdf5","function_name":"H5S__modify_select"},"5156":{"probe_name":"hdf5","function_name":"H5S__internal_consistency_test"},"5155":{"probe_name":"hdf5","function_name":"H5S__hyper_update_diminfo"},"5154":{"probe_name":"hdf5","function_name":"H5S__hyper_unlim_dim"},"5153":{"probe_name":"hdf5","function_name":"H5S__hyper_spans_shape_same_helper"},"5152":{"probe_name":"hdf5","function_name":"H5S__hyper_spans_shape_same"},"5151":{"probe_name":"hdf5","function_name":"H5S__hyper_spans_nelem_helper.part.0.constprop.0"},"5150":{"probe_name":"hdf5","function_name":"H5S__hyper_span_nblocks_helper.constprop.0"},"5149":{"probe_name":"hdf5","function_name":"H5S__hyper_span_blocklist"},"5148":{"probe_name":"hdf5","function_name":"H5S__hyper_shape_same"},"5147":{"probe_name":"hdf5","function_name":"H5S__hyper_serialize_helper"},"5146":{"probe_name":"hdf5","function_name":"H5S__hyper_serialize"},"5145":{"probe_name":"hdf5","function_name":"H5S__hyper_serial_size"},"5144":{"probe_name":"hdf5","function_name":"H5S__hyper_release"},"5143":{"probe_name":"hdf5","function_name":"H5S__hyper_rebuild_helper"},"5142":{"probe_name":"hdf5","function_name":"H5S__hyper_rebuild"},"5141":{"probe_name":"hdf5","function_name":"H5S__hyper_project_simple"},"5140":{"probe_name":"hdf5","function_name":"H5S__hyper_project_scalar"},"5139":{"probe_name":"hdf5","function_name":"H5S__hyper_project_intersection"},"5138":{"probe_name":"hdf5","function_name":"H5S__hyper_proj_int_iterate"},"5137":{"probe_name":"hdf5","function_name":"H5S__hyper_proj_int_build_proj"},"5136":{"probe_name":"hdf5","function_name":"H5S__hyper_offset"},"5135":{"probe_name":"hdf5","function_name":"H5S__hyper_num_elem_non_unlim"},"5134":{"probe_name":"hdf5","function_name":"H5S__hyper_new_span_info.part.0"},"5133":{"probe_name":"hdf5","function_name":"H5S__hyper_new_span.part.0"},"5132":{"probe_name":"hdf5","function_name":"H5S__hyper_merge_spans_helper"},"5131":{"probe_name":"hdf5","function_name":"H5S__hyper_make_spans"},"5130":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_release"},"5129":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_next_block"},"5128":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_next"},"5127":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_nelmts"},"5126":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_init"},"5125":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_has_next_block"},"5124":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_get_seq_list_single"},"5123":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_get_seq_list_opt"},"5122":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_get_seq_list"},"5121":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_coords"},"5120":{"probe_name":"hdf5","function_name":"H5S__hyper_iter_block"},"5119":{"probe_name":"hdf5","function_name":"H5S__hyper_is_valid"},"5118":{"probe_name":"hdf5","function_name":"H5S__hyper_is_single"},"5117":{"probe_name":"hdf5","function_name":"H5S__hyper_is_regular"},"5116":{"probe_name":"hdf5","function_name":"H5S__hyper_is_contiguous"},"5115":{"probe_name":"hdf5","function_name":"H5S__hyper_intersect_block_helper.constprop.0"},"5114":{"probe_name":"hdf5","function_name":"H5S__hyper_intersect_block"},"5113":{"probe_name":"hdf5","function_name":"H5S__hyper_get_version_enc_size"},"5112":{"probe_name":"hdf5","function_name":"H5S__hyper_get_op_gen"},"5111":{"probe_name":"hdf5","function_name":"H5S__hyper_generate_spans"},"5110":{"probe_name":"hdf5","function_name":"H5S__hyper_free_span_info"},"5109":{"probe_name":"hdf5","function_name":"H5S__hyper_deserialize"},"5108":{"probe_name":"hdf5","function_name":"H5S__hyper_copy_span_helper.part.0"},"5107":{"probe_name":"hdf5","function_name":"H5S__hyper_copy"},"5106":{"probe_name":"hdf5","function_name":"H5S__hyper_coord_to_span"},"5105":{"probe_name":"hdf5","function_name":"H5S__hyper_cmp_spans.part.0"},"5104":{"probe_name":"hdf5","function_name":"H5S__hyper_clip_spans.constprop.0"},"5103":{"probe_name":"hdf5","function_name":"H5S__hyper_bounds"},"5102":{"probe_name":"hdf5","function_name":"H5S__hyper_append_span.constprop.0"},"5101":{"probe_name":"hdf5","function_name":"H5S__hyper_append_span"},"5100":{"probe_name":"hdf5","function_name":"H5S__hyper_adjust_u_helper.constprop.0"},"5099":{"probe_name":"hdf5","function_name":"H5S__hyper_adjust_u"},"5098":{"probe_name":"hdf5","function_name":"H5S__hyper_adjust_s_helper.constprop.0"},"5097":{"probe_name":"hdf5","function_name":"H5S__hyper_adjust_s"},"5096":{"probe_name":"hdf5","function_name":"H5S__hyper_add_span_element_helper.constprop.0"},"5095":{"probe_name":"hdf5","function_name":"H5S__hyper_add_disjoint_spans"},"5094":{"probe_name":"hdf5","function_name":"H5S__get_select_hyper_blocklist"},"5093":{"probe_name":"hdf5","function_name":"H5S__get_rebuild_status_test"},"5092":{"probe_name":"hdf5","function_name":"H5S__get_diminfo_status_test"},"5091":{"probe_name":"hdf5","function_name":"H5S__generate_hyperslab"},"5090":{"probe_name":"hdf5","function_name":"H5S__fill_in_select"},"5089":{"probe_name":"hdf5","function_name":"H5S__fill_in_new_space"},"5088":{"probe_name":"hdf5","function_name":"H5S__extent_release"},"5086":{"probe_name":"hdf5","function_name":"H5S__copy_pnt_list"},"5085":{"probe_name":"hdf5","function_name":"H5S__combine_select"},"5084":{"probe_name":"hdf5","function_name":"H5S__close_cb"},"5083":{"probe_name":"hdf5","function_name":"H5S__check_spans_tail_ptr"},"5082":{"probe_name":"hdf5","function_name":"H5S__check_spans_overlap"},"5081":{"probe_name":"hdf5","function_name":"H5S__check_internal_consistency"},"5080":{"probe_name":"hdf5","function_name":"H5S__all_unlim_dim"},"5079":{"probe_name":"hdf5","function_name":"H5S__all_shape_same"},"5078":{"probe_name":"hdf5","function_name":"H5S__all_serialize"},"5077":{"probe_name":"hdf5","function_name":"H5S__all_serial_size"},"5076":{"probe_name":"hdf5","function_name":"H5S__all_release"},"5075":{"probe_name":"hdf5","function_name":"H5S__all_project_simple"},"5074":{"probe_name":"hdf5","function_name":"H5S__all_project_scalar"},"5073":{"probe_name":"hdf5","function_name":"H5S__all_offset"},"5072":{"probe_name":"hdf5","function_name":"H5S__all_iter_release"},"5071":{"probe_name":"hdf5","function_name":"H5S__all_iter_next_block"},"5070":{"probe_name":"hdf5","function_name":"H5S__all_iter_next"},"5069":{"probe_name":"hdf5","function_name":"H5S__all_iter_nelmts"},"5068":{"probe_name":"hdf5","function_name":"H5S__all_iter_init"},"5067":{"probe_name":"hdf5","function_name":"H5S__all_iter_has_next_block"},"5066":{"probe_name":"hdf5","function_name":"H5S__all_iter_get_seq_list"},"5065":{"probe_name":"hdf5","function_name":"H5S__all_iter_coords"},"5064":{"probe_name":"hdf5","function_name":"H5S__all_iter_block"},"5063":{"probe_name":"hdf5","function_name":"H5S__all_is_valid"},"5062":{"probe_name":"hdf5","function_name":"H5S__all_is_single"},"5061":{"probe_name":"hdf5","function_name":"H5S__all_is_regular"},"5060":{"probe_name":"hdf5","function_name":"H5S__all_is_contiguous"},"5059":{"probe_name":"hdf5","function_name":"H5S__all_intersect_block"},"5058":{"probe_name":"hdf5","function_name":"H5S__all_deserialize"},"5057":{"probe_name":"hdf5","function_name":"H5S__all_copy"},"5056":{"probe_name":"hdf5","function_name":"H5S__all_bounds"},"5055":{"probe_name":"hdf5","function_name":"H5S__all_adjust_u"},"5054":{"probe_name":"hdf5","function_name":"H5S__all_adjust_s"},"5053":{"probe_name":"hdf5","function_name":"H5SM_type_shared"},"5052":{"probe_name":"hdf5","function_name":"H5SM_try_share"},"5051":{"probe_name":"hdf5","function_name":"H5SM_table_debug"},"5050":{"probe_name":"hdf5","function_name":"H5SM_reconstitute"},"5049":{"probe_name":"hdf5","function_name":"H5SM_list_debug"},"5048":{"probe_name":"hdf5","function_name":"H5SM_init"},"5047":{"probe_name":"hdf5","function_name":"H5SM_ih_size"},"5046":{"probe_name":"hdf5","function_name":"H5SM_get_refcount"},"5045":{"probe_name":"hdf5","function_name":"H5SM_get_info"},"5044":{"probe_name":"hdf5","function_name":"H5SM_get_fheap_addr"},"5043":{"probe_name":"hdf5","function_name":"H5SM_delete"},"5042":{"probe_name":"hdf5","function_name":"H5SM_can_share"},"5041":{"probe_name":"hdf5","function_name":"H5SM__table_free"},"5040":{"probe_name":"hdf5","function_name":"H5SM__read_mesg_fh_cb"},"5039":{"probe_name":"hdf5","function_name":"H5SM__read_mesg"},"5038":{"probe_name":"hdf5","function_name":"H5SM__read_iter_op"},"5037":{"probe_name":"hdf5","function_name":"H5SM__message_encode"},"5036":{"probe_name":"hdf5","function_name":"H5SM__message_decode"},"5035":{"probe_name":"hdf5","function_name":"H5SM__message_compare"},"5034":{"probe_name":"hdf5","function_name":"H5SM__list_free"},"5033":{"probe_name":"hdf5","function_name":"H5SM__incr_ref"},"5032":{"probe_name":"hdf5","function_name":"H5SM__get_refcount_bt2_cb"},"5031":{"probe_name":"hdf5","function_name":"H5SM__get_mesg_count_test"},"5030":{"probe_name":"hdf5","function_name":"H5SM__get_index"},"5029":{"probe_name":"hdf5","function_name":"H5SM__delete_index"},"5028":{"probe_name":"hdf5","function_name":"H5SM__decr_ref"},"5027":{"probe_name":"hdf5","function_name":"H5SM__create_list"},"5026":{"probe_name":"hdf5","function_name":"H5SM__compare_iter_op"},"5025":{"probe_name":"hdf5","function_name":"H5SM__compare_cb"},"5024":{"probe_name":"hdf5","function_name":"H5SM__cache_table_verify_chksum"},"5023":{"probe_name":"hdf5","function_name":"H5SM__cache_table_serialize"},"5022":{"probe_name":"hdf5","function_name":"H5SM__cache_table_image_len"},"5021":{"probe_name":"hdf5","function_name":"H5SM__cache_table_get_initial_load_size"},"5020":{"probe_name":"hdf5","function_name":"H5SM__cache_table_free_icr"},"5019":{"probe_name":"hdf5","function_name":"H5SM__cache_table_deserialize"},"5018":{"probe_name":"hdf5","function_name":"H5SM__cache_list_verify_chksum"},"5017":{"probe_name":"hdf5","function_name":"H5SM__cache_list_serialize"},"5016":{"probe_name":"hdf5","function_name":"H5SM__cache_list_image_len"},"5015":{"probe_name":"hdf5","function_name":"H5SM__cache_list_get_initial_load_size"},"5014":{"probe_name":"hdf5","function_name":"H5SM__cache_list_free_icr"},"5013":{"probe_name":"hdf5","function_name":"H5SM__cache_list_deserialize"},"5012":{"probe_name":"hdf5","function_name":"H5SM__bt2_store"},"5011":{"probe_name":"hdf5","function_name":"H5SM__bt2_dst_context"},"5010":{"probe_name":"hdf5","function_name":"H5SM__bt2_debug"},"5009":{"probe_name":"hdf5","function_name":"H5SM__bt2_crt_context"},"5008":{"probe_name":"hdf5","function_name":"H5SM__bt2_convert_to_list_op"},"5007":{"probe_name":"hdf5","function_name":"H5SL_term_package"},"5006":{"probe_name":"hdf5","function_name":"H5SL_search.cold"},"5005":{"probe_name":"hdf5","function_name":"H5SL_search"},"5004":{"probe_name":"hdf5","function_name":"H5SL_remove_first"},"5003":{"probe_name":"hdf5","function_name":"H5SL_remove.cold"},"5002":{"probe_name":"hdf5","function_name":"H5SL_remove"},"5001":{"probe_name":"hdf5","function_name":"H5SL_release"},"5000":{"probe_name":"hdf5","function_name":"H5SL_prev"},"4999":{"probe_name":"hdf5","function_name":"H5SL_next"},"4998":{"probe_name":"hdf5","function_name":"H5SL_less"},"4997":{"probe_name":"hdf5","function_name":"H5SL_last"},"4996":{"probe_name":"hdf5","function_name":"H5SL_iterate"},"4995":{"probe_name":"hdf5","function_name":"H5SL_item"},"4994":{"probe_name":"hdf5","function_name":"H5SL_insert"},"4993":{"probe_name":"hdf5","function_name":"H5SL_init"},"4992":{"probe_name":"hdf5","function_name":"H5SL_greater"},"4991":{"probe_name":"hdf5","function_name":"H5SL_free"},"4990":{"probe_name":"hdf5","function_name":"H5SL_first"},"4989":{"probe_name":"hdf5","function_name":"H5SL_find.cold"},"4988":{"probe_name":"hdf5","function_name":"H5SL_find"},"4987":{"probe_name":"hdf5","function_name":"H5SL_destroy"},"4986":{"probe_name":"hdf5","function_name":"H5SL_create"},"4985":{"probe_name":"hdf5","function_name":"H5SL_count"},"4984":{"probe_name":"hdf5","function_name":"H5SL_close"},"4983":{"probe_name":"hdf5","function_name":"H5SL_below"},"4982":{"probe_name":"hdf5","function_name":"H5SL__release_common"},"4981":{"probe_name":"hdf5","function_name":"H5SL__insert_common.cold"},"4980":{"probe_name":"hdf5","function_name":"H5SL__insert_common"},"4979":{"probe_name":"hdf5","function_name":"H5Ropen_region_async"},"4978":{"probe_name":"hdf5","function_name":"H5Ropen_region"},"4977":{"probe_name":"hdf5","function_name":"H5Ropen_object_async"},"4976":{"probe_name":"hdf5","function_name":"H5Ropen_object"},"4975":{"probe_name":"hdf5","function_name":"H5Ropen_attr_async"},"4974":{"probe_name":"hdf5","function_name":"H5Ropen_attr"},"4973":{"probe_name":"hdf5","function_name":"H5Rget_type"},"4972":{"probe_name":"hdf5","function_name":"H5Rget_region"},"4971":{"probe_name":"hdf5","function_name":"H5Rget_obj_type3"},"4970":{"probe_name":"hdf5","function_name":"H5Rget_obj_type2"},"4969":{"probe_name":"hdf5","function_name":"H5Rget_obj_type1"},"4968":{"probe_name":"hdf5","function_name":"H5Rget_obj_name"},"4967":{"probe_name":"hdf5","function_name":"H5Rget_name"},"4966":{"probe_name":"hdf5","function_name":"H5Rget_file_name"},"4965":{"probe_name":"hdf5","function_name":"H5Rget_attr_name"},"4964":{"probe_name":"hdf5","function_name":"H5Requal"},"4963":{"probe_name":"hdf5","function_name":"H5Rdestroy"},"4962":{"probe_name":"hdf5","function_name":"H5Rdereference2"},"4961":{"probe_name":"hdf5","function_name":"H5Rdereference1"},"4960":{"probe_name":"hdf5","function_name":"H5Rcreate_region"},"4959":{"probe_name":"hdf5","function_name":"H5Rcreate_object"},"4958":{"probe_name":"hdf5","function_name":"H5Rcreate_attr"},"4957":{"probe_name":"hdf5","function_name":"H5Rcreate"},"4956":{"probe_name":"hdf5","function_name":"H5Rcopy"},"4955":{"probe_name":"hdf5","function_name":"H5R_init"},"4954":{"probe_name":"hdf5","function_name":"H5R__set_obj_token"},"4953":{"probe_name":"hdf5","function_name":"H5R__set_loc_id"},"4952":{"probe_name":"hdf5","function_name":"H5R__reopen_file"},"4951":{"probe_name":"hdf5","function_name":"H5R__open_region_api_common"},"4950":{"probe_name":"hdf5","function_name":"H5R__open_object_api_common"},"4949":{"probe_name":"hdf5","function_name":"H5R__open_attr_api_common"},"4948":{"probe_name":"hdf5","function_name":"H5R__get_type"},"4947":{"probe_name":"hdf5","function_name":"H5R__get_region"},"4946":{"probe_name":"hdf5","function_name":"H5R__get_obj_token"},"4945":{"probe_name":"hdf5","function_name":"H5R__get_loc_id"},"4944":{"probe_name":"hdf5","function_name":"H5R__get_file_name"},"4943":{"probe_name":"hdf5","function_name":"H5R__get_attr_name"},"4942":{"probe_name":"hdf5","function_name":"H5R__equal"},"4941":{"probe_name":"hdf5","function_name":"H5R__encode_token_obj_compat"},"4940":{"probe_name":"hdf5","function_name":"H5R__encode_heap"},"4939":{"probe_name":"hdf5","function_name":"H5R__encode"},"4938":{"probe_name":"hdf5","function_name":"H5R__destroy"},"4937":{"probe_name":"hdf5","function_name":"H5R__decode_token_region_compat"},"4936":{"probe_name":"hdf5","function_name":"H5R__decode_token_obj_compat"},"4935":{"probe_name":"hdf5","function_name":"H5R__decode_token_compat"},"4934":{"probe_name":"hdf5","function_name":"H5R__decode_string"},"4933":{"probe_name":"hdf5","function_name":"H5R__decode_heap"},"4932":{"probe_name":"hdf5","function_name":"H5R__decode"},"4931":{"probe_name":"hdf5","function_name":"H5R__create_region"},"4930":{"probe_name":"hdf5","function_name":"H5R__create_object"},"4929":{"probe_name":"hdf5","function_name":"H5R__create_attr"},"4928":{"probe_name":"hdf5","function_name":"H5R__copy"},"4927":{"probe_name":"hdf5","function_name":"H5RS_wrap"},"4926":{"probe_name":"hdf5","function_name":"H5RS_len"},"4925":{"probe_name":"hdf5","function_name":"H5RS_incr"},"4924":{"probe_name":"hdf5","function_name":"H5RS_get_str"},"4923":{"probe_name":"hdf5","function_name":"H5RS_get_count"},"4922":{"probe_name":"hdf5","function_name":"H5RS_dup"},"4921":{"probe_name":"hdf5","function_name":"H5RS_decr"},"4920":{"probe_name":"hdf5","function_name":"H5RS_create"},"4919":{"probe_name":"hdf5","function_name":"H5RS_cmp"},"4918":{"probe_name":"hdf5","function_name":"H5RS_asprintf_cat"},"4917":{"probe_name":"hdf5","function_name":"H5RS_aputc"},"4916":{"probe_name":"hdf5","function_name":"H5RS_ancat"},"4915":{"probe_name":"hdf5","function_name":"H5RS_acat"},"4914":{"probe_name":"hdf5","function_name":"H5RS__resize_for_append.part.0"},"4913":{"probe_name":"hdf5","function_name":"H5RS__prepare_for_append"},"4912":{"probe_name":"hdf5","function_name":"H5Punregister"},"4911":{"probe_name":"hdf5","function_name":"H5Pset_vol"},"4910":{"probe_name":"hdf5","function_name":"H5Pset_vlen_mem_manager"},"4909":{"probe_name":"hdf5","function_name":"H5Pset_virtual_view"},"4908":{"probe_name":"hdf5","function_name":"H5Pset_virtual_printf_gap"},"4907":{"probe_name":"hdf5","function_name":"H5Pset_virtual_prefix"},"4906":{"probe_name":"hdf5","function_name":"H5Pset_virtual"},"4905":{"probe_name":"hdf5","function_name":"H5Pset_userblock"},"4904":{"probe_name":"hdf5","function_name":"H5Pset_type_conv_cb"},"4903":{"probe_name":"hdf5","function_name":"H5Pset_szip"},"4902":{"probe_name":"hdf5","function_name":"H5Pset_sym_k"},"4901":{"probe_name":"hdf5","function_name":"H5Pset_small_data_block_size"},"4900":{"probe_name":"hdf5","function_name":"H5Pset_sizes"},"4899":{"probe_name":"hdf5","function_name":"H5Pset_sieve_buf_size"},"4898":{"probe_name":"hdf5","function_name":"H5Pset_shuffle"},"4897":{"probe_name":"hdf5","function_name":"H5Pset_shared_mesg_phase_change"},"4896":{"probe_name":"hdf5","function_name":"H5Pset_shared_mesg_nindexes"},"4895":{"probe_name":"hdf5","function_name":"H5Pset_shared_mesg_index"},"4894":{"probe_name":"hdf5","function_name":"H5Pset_selection_io"},"4893":{"probe_name":"hdf5","function_name":"H5Pset_scaleoffset"},"4892":{"probe_name":"hdf5","function_name":"H5Pset_relax_file_integrity_checks"},"4891":{"probe_name":"hdf5","function_name":"H5Pset_preserve"},"4890":{"probe_name":"hdf5","function_name":"H5Pset_page_buffer_size"},"4889":{"probe_name":"hdf5","function_name":"H5Pset_object_flush_cb"},"4888":{"probe_name":"hdf5","function_name":"H5Pset_obj_track_times"},"4887":{"probe_name":"hdf5","function_name":"H5Pset_nlinks"},"4886":{"probe_name":"hdf5","function_name":"H5Pset_nbit"},"4885":{"probe_name":"hdf5","function_name":"H5Pset_multi_type"},"4884":{"probe_name":"hdf5","function_name":"H5Pset_mpi_params"},"4883":{"probe_name":"hdf5","function_name":"H5Pset_modify_write_buf"},"4882":{"probe_name":"hdf5","function_name":"H5Pset_metadata_read_attempts"},"4881":{"probe_name":"hdf5","function_name":"H5Pset_meta_block_size"},"4880":{"probe_name":"hdf5","function_name":"H5Pset_mdc_log_options"},"4879":{"probe_name":"hdf5","function_name":"H5Pset_mdc_image_config"},"4878":{"probe_name":"hdf5","function_name":"H5Pset_mdc_config"},"4877":{"probe_name":"hdf5","function_name":"H5Pset_mcdt_search_cb"},"4876":{"probe_name":"hdf5","function_name":"H5Pset_local_heap_size_hint"},"4875":{"probe_name":"hdf5","function_name":"H5Pset_link_phase_change"},"4874":{"probe_name":"hdf5","function_name":"H5Pset_link_creation_order"},"4873":{"probe_name":"hdf5","function_name":"H5Pset_libver_bounds"},"4872":{"probe_name":"hdf5","function_name":"H5Pset_layout"},"4871":{"probe_name":"hdf5","function_name":"H5Pset_istore_k"},"4870":{"probe_name":"hdf5","function_name":"H5Pset_hyper_vector_size"},"4869":{"probe_name":"hdf5","function_name":"H5Pset_gc_references"},"4868":{"probe_name":"hdf5","function_name":"H5Pset_fletcher32"},"4867":{"probe_name":"hdf5","function_name":"H5Pset_filter_callback"},"4866":{"probe_name":"hdf5","function_name":"H5Pset_filter"},"4865":{"probe_name":"hdf5","function_name":"H5Pset_fill_value"},"4864":{"probe_name":"hdf5","function_name":"H5Pset_fill_time"},"4863":{"probe_name":"hdf5","function_name":"H5Pset_file_space_strategy"},"4862":{"probe_name":"hdf5","function_name":"H5Pset_file_space_page_size"},"4861":{"probe_name":"hdf5","function_name":"H5Pset_file_space"},"4860":{"probe_name":"hdf5","function_name":"H5Pset_file_locking"},"4859":{"probe_name":"hdf5","function_name":"H5Pset_file_image_callbacks"},"4858":{"probe_name":"hdf5","function_name":"H5Pset_file_image"},"4857":{"probe_name":"hdf5","function_name":"H5Pset_fclose_degree"},"4856":{"probe_name":"hdf5","function_name":"H5Pset_fapl_stdio"},"4855":{"probe_name":"hdf5","function_name":"H5Pset_fapl_splitter"},"4854":{"probe_name":"hdf5","function_name":"H5Pset_fapl_split"},"4853":{"probe_name":"hdf5","function_name":"H5Pset_fapl_sec2"},"4852":{"probe_name":"hdf5","function_name":"H5Pset_fapl_onion"},"4851":{"probe_name":"hdf5","function_name":"H5Pset_fapl_multi"},"4850":{"probe_name":"hdf5","function_name":"H5Pset_fapl_mpio"},"4849":{"probe_name":"hdf5","function_name":"H5Pset_fapl_log"},"4848":{"probe_name":"hdf5","function_name":"H5Pset_fapl_family"},"4847":{"probe_name":"hdf5","function_name":"H5Pset_fapl_core"},"4846":{"probe_name":"hdf5","function_name":"H5Pset_family_offset"},"4845":{"probe_name":"hdf5","function_name":"H5Pset_external"},"4844":{"probe_name":"hdf5","function_name":"H5Pset_evict_on_close"},"4843":{"probe_name":"hdf5","function_name":"H5Pset_est_link_info"},"4842":{"probe_name":"hdf5","function_name":"H5Pset_elink_prefix"},"4841":{"probe_name":"hdf5","function_name":"H5Pset_elink_file_cache_size"},"4840":{"probe_name":"hdf5","function_name":"H5Pset_elink_fapl"},"4839":{"probe_name":"hdf5","function_name":"H5Pset_elink_cb"},"4838":{"probe_name":"hdf5","function_name":"H5Pset_elink_acc_flags"},"4837":{"probe_name":"hdf5","function_name":"H5Pset_efile_prefix"},"4836":{"probe_name":"hdf5","function_name":"H5Pset_edc_check"},"4835":{"probe_name":"hdf5","function_name":"H5Pset_dxpl_mpio_collective_opt"},"4834":{"probe_name":"hdf5","function_name":"H5Pset_dxpl_mpio_chunk_opt_ratio"},"4833":{"probe_name":"hdf5","function_name":"H5Pset_dxpl_mpio_chunk_opt_num"},"4832":{"probe_name":"hdf5","function_name":"H5Pset_dxpl_mpio_chunk_opt"},"4831":{"probe_name":"hdf5","function_name":"H5Pset_dxpl_mpio"},"4830":{"probe_name":"hdf5","function_name":"H5Pset_dset_no_attrs_hint"},"4829":{"probe_name":"hdf5","function_name":"H5Pset_driver_by_value"},"4828":{"probe_name":"hdf5","function_name":"H5Pset_driver_by_name"},"4827":{"probe_name":"hdf5","function_name":"H5Pset_driver"},"4826":{"probe_name":"hdf5","function_name":"H5Pset_deflate"},"4825":{"probe_name":"hdf5","function_name":"H5Pset_dataset_io_hyperslab_selection"},"4824":{"probe_name":"hdf5","function_name":"H5Pset_data_transform"},"4823":{"probe_name":"hdf5","function_name":"H5Pset_create_intermediate_group"},"4822":{"probe_name":"hdf5","function_name":"H5Pset_core_write_tracking"},"4821":{"probe_name":"hdf5","function_name":"H5Pset_copy_object"},"4820":{"probe_name":"hdf5","function_name":"H5Pset_coll_metadata_write"},"4819":{"probe_name":"hdf5","function_name":"H5Pset_chunk_opts"},"4818":{"probe_name":"hdf5","function_name":"H5Pset_chunk_cache"},"4817":{"probe_name":"hdf5","function_name":"H5Pset_chunk"},"4816":{"probe_name":"hdf5","function_name":"H5Pset_char_encoding"},"4815":{"probe_name":"hdf5","function_name":"H5Pset_cache"},"4814":{"probe_name":"hdf5","function_name":"H5Pset_buffer"},"4813":{"probe_name":"hdf5","function_name":"H5Pset_btree_ratios"},"4812":{"probe_name":"hdf5","function_name":"H5Pset_attr_phase_change"},"4811":{"probe_name":"hdf5","function_name":"H5Pset_attr_creation_order"},"4810":{"probe_name":"hdf5","function_name":"H5Pset_append_flush"},"4809":{"probe_name":"hdf5","function_name":"H5Pset_alloc_time"},"4808":{"probe_name":"hdf5","function_name":"H5Pset_all_coll_metadata_ops"},"4807":{"probe_name":"hdf5","function_name":"H5Pset_alignment"},"4806":{"probe_name":"hdf5","function_name":"H5Pset"},"4805":{"probe_name":"hdf5","function_name":"H5Premove_filter"},"4804":{"probe_name":"hdf5","function_name":"H5Premove"},"4803":{"probe_name":"hdf5","function_name":"H5Pregister2"},"4802":{"probe_name":"hdf5","function_name":"H5Pregister1"},"4801":{"probe_name":"hdf5","function_name":"H5Pmodify_filter"},"4800":{"probe_name":"hdf5","function_name":"H5Piterate"},"4799":{"probe_name":"hdf5","function_name":"H5Pisa_class"},"4798":{"probe_name":"hdf5","function_name":"H5Pinsert2"},"4797":{"probe_name":"hdf5","function_name":"H5Pinsert1"},"4796":{"probe_name":"hdf5","function_name":"H5Pget_vol_info"},"4795":{"probe_name":"hdf5","function_name":"H5Pget_vol_id"},"4794":{"probe_name":"hdf5","function_name":"H5Pget_vol_cap_flags"},"4793":{"probe_name":"hdf5","function_name":"H5Pget_vlen_mem_manager"},"4792":{"probe_name":"hdf5","function_name":"H5Pget_virtual_vspace"},"4791":{"probe_name":"hdf5","function_name":"H5Pget_virtual_view"},"4790":{"probe_name":"hdf5","function_name":"H5Pget_virtual_srcspace"},"4789":{"probe_name":"hdf5","function_name":"H5Pget_virtual_printf_gap"},"4788":{"probe_name":"hdf5","function_name":"H5Pget_virtual_prefix"},"4787":{"probe_name":"hdf5","function_name":"H5Pget_virtual_filename"},"4786":{"probe_name":"hdf5","function_name":"H5Pget_virtual_dsetname"},"4785":{"probe_name":"hdf5","function_name":"H5Pget_virtual_count"},"4784":{"probe_name":"hdf5","function_name":"H5Pget_version"},"4783":{"probe_name":"hdf5","function_name":"H5Pget_userblock"},"4782":{"probe_name":"hdf5","function_name":"H5Pget_type_conv_cb"},"4781":{"probe_name":"hdf5","function_name":"H5Pget_sym_k"},"4780":{"probe_name":"hdf5","function_name":"H5Pget_small_data_block_size"},"4779":{"probe_name":"hdf5","function_name":"H5Pget_sizes"},"4778":{"probe_name":"hdf5","function_name":"H5Pget_size"},"4777":{"probe_name":"hdf5","function_name":"H5Pget_sieve_buf_size"},"4776":{"probe_name":"hdf5","function_name":"H5Pget_shared_mesg_phase_change"},"4775":{"probe_name":"hdf5","function_name":"H5Pget_shared_mesg_nindexes"},"4774":{"probe_name":"hdf5","function_name":"H5Pget_shared_mesg_index"},"4773":{"probe_name":"hdf5","function_name":"H5Pget_selection_io"},"4772":{"probe_name":"hdf5","function_name":"H5Pget_relax_file_integrity_checks"},"4771":{"probe_name":"hdf5","function_name":"H5Pget_preserve"},"4770":{"probe_name":"hdf5","function_name":"H5Pget_page_buffer_size"},"4769":{"probe_name":"hdf5","function_name":"H5Pget_object_flush_cb"},"4768":{"probe_name":"hdf5","function_name":"H5Pget_obj_track_times"},"4767":{"probe_name":"hdf5","function_name":"H5Pget_nprops"},"4766":{"probe_name":"hdf5","function_name":"H5Pget_no_selection_io_cause"},"4765":{"probe_name":"hdf5","function_name":"H5Pget_nlinks"},"4764":{"probe_name":"hdf5","function_name":"H5Pget_nfilters"},"4763":{"probe_name":"hdf5","function_name":"H5Pget_multi_type"},"4762":{"probe_name":"hdf5","function_name":"H5Pget_mpio_no_collective_cause"},"4761":{"probe_name":"hdf5","function_name":"H5Pget_mpio_actual_io_mode"},"4760":{"probe_name":"hdf5","function_name":"H5Pget_mpio_actual_chunk_opt_mode"},"4759":{"probe_name":"hdf5","function_name":"H5Pget_mpi_params"},"4758":{"probe_name":"hdf5","function_name":"H5Pget_modify_write_buf"},"4757":{"probe_name":"hdf5","function_name":"H5Pget_metadata_read_attempts"},"4756":{"probe_name":"hdf5","function_name":"H5Pget_meta_block_size"},"4755":{"probe_name":"hdf5","function_name":"H5Pget_mdc_log_options"},"4754":{"probe_name":"hdf5","function_name":"H5Pget_mdc_image_config"},"4753":{"probe_name":"hdf5","function_name":"H5Pget_mdc_config"},"4752":{"probe_name":"hdf5","function_name":"H5Pget_mcdt_search_cb"},"4751":{"probe_name":"hdf5","function_name":"H5Pget_local_heap_size_hint"},"4750":{"probe_name":"hdf5","function_name":"H5Pget_link_phase_change"},"4749":{"probe_name":"hdf5","function_name":"H5Pget_link_creation_order"},"4748":{"probe_name":"hdf5","function_name":"H5Pget_libver_bounds"},"4747":{"probe_name":"hdf5","function_name":"H5Pget_layout"},"4746":{"probe_name":"hdf5","function_name":"H5Pget_istore_k"},"4745":{"probe_name":"hdf5","function_name":"H5Pget_hyper_vector_size"},"4744":{"probe_name":"hdf5","function_name":"H5Pget_gc_references"},"4743":{"probe_name":"hdf5","function_name":"H5Pget_filter_by_id2"},"4742":{"probe_name":"hdf5","function_name":"H5Pget_filter_by_id1"},"4741":{"probe_name":"hdf5","function_name":"H5Pget_filter2"},"4740":{"probe_name":"hdf5","function_name":"H5Pget_filter1"},"4739":{"probe_name":"hdf5","function_name":"H5Pget_fill_value"},"4738":{"probe_name":"hdf5","function_name":"H5Pget_fill_time"},"4737":{"probe_name":"hdf5","function_name":"H5Pget_file_space_strategy"},"4736":{"probe_name":"hdf5","function_name":"H5Pget_file_space_page_size"},"4735":{"probe_name":"hdf5","function_name":"H5Pget_file_space"},"4734":{"probe_name":"hdf5","function_name":"H5Pget_file_locking"},"4733":{"probe_name":"hdf5","function_name":"H5Pget_file_image_callbacks"},"4732":{"probe_name":"hdf5","function_name":"H5Pget_file_image"},"4731":{"probe_name":"hdf5","function_name":"H5Pget_fclose_degree"},"4730":{"probe_name":"hdf5","function_name":"H5Pget_fapl_splitter"},"4729":{"probe_name":"hdf5","function_name":"H5Pget_fapl_onion"},"4728":{"probe_name":"hdf5","function_name":"H5Pget_fapl_multi"},"4727":{"probe_name":"hdf5","function_name":"H5Pget_fapl_mpio"},"4726":{"probe_name":"hdf5","function_name":"H5Pget_fapl_family"},"4725":{"probe_name":"hdf5","function_name":"H5Pget_fapl_core"},"4724":{"probe_name":"hdf5","function_name":"H5Pget_family_offset"},"4723":{"probe_name":"hdf5","function_name":"H5Pget_external_count"},"4722":{"probe_name":"hdf5","function_name":"H5Pget_external"},"4721":{"probe_name":"hdf5","function_name":"H5Pget_evict_on_close"},"4720":{"probe_name":"hdf5","function_name":"H5Pget_est_link_info"},"4719":{"probe_name":"hdf5","function_name":"H5Pget_elink_prefix"},"4718":{"probe_name":"hdf5","function_name":"H5Pget_elink_file_cache_size"},"4717":{"probe_name":"hdf5","function_name":"H5Pget_elink_fapl"},"4716":{"probe_name":"hdf5","function_name":"H5Pget_elink_cb"},"4715":{"probe_name":"hdf5","function_name":"H5Pget_elink_acc_flags"},"4714":{"probe_name":"hdf5","function_name":"H5Pget_efile_prefix"},"4713":{"probe_name":"hdf5","function_name":"H5Pget_edc_check"},"4712":{"probe_name":"hdf5","function_name":"H5Pget_dxpl_mpio"},"4711":{"probe_name":"hdf5","function_name":"H5Pget_dset_no_attrs_hint"},"4710":{"probe_name":"hdf5","function_name":"H5Pget_driver_info"},"4709":{"probe_name":"hdf5","function_name":"H5Pget_driver_config_str"},"4708":{"probe_name":"hdf5","function_name":"H5Pget_driver"},"4707":{"probe_name":"hdf5","function_name":"H5Pget_data_transform"},"4706":{"probe_name":"hdf5","function_name":"H5Pget_create_intermediate_group"},"4705":{"probe_name":"hdf5","function_name":"H5Pget_core_write_tracking"},"4704":{"probe_name":"hdf5","function_name":"H5Pget_copy_object"},"4703":{"probe_name":"hdf5","function_name":"H5Pget_coll_metadata_write"},"4702":{"probe_name":"hdf5","function_name":"H5Pget_class_parent"},"4701":{"probe_name":"hdf5","function_name":"H5Pget_class_name"},"4700":{"probe_name":"hdf5","function_name":"H5Pget_class"},"4699":{"probe_name":"hdf5","function_name":"H5Pget_chunk_opts"},"4698":{"probe_name":"hdf5","function_name":"H5Pget_chunk_cache"},"4697":{"probe_name":"hdf5","function_name":"H5Pget_chunk"},"4696":{"probe_name":"hdf5","function_name":"H5Pget_char_encoding"},"4695":{"probe_name":"hdf5","function_name":"H5Pget_cache"},"4694":{"probe_name":"hdf5","function_name":"H5Pget_buffer"},"4693":{"probe_name":"hdf5","function_name":"H5Pget_btree_ratios"},"4692":{"probe_name":"hdf5","function_name":"H5Pget_attr_phase_change"},"4691":{"probe_name":"hdf5","function_name":"H5Pget_attr_creation_order"},"4690":{"probe_name":"hdf5","function_name":"H5Pget_append_flush"},"4689":{"probe_name":"hdf5","function_name":"H5Pget_alloc_time"},"4688":{"probe_name":"hdf5","function_name":"H5Pget_all_coll_metadata_ops"},"4687":{"probe_name":"hdf5","function_name":"H5Pget_alignment"},"4686":{"probe_name":"hdf5","function_name":"H5Pget_actual_selection_io_mode"},"4685":{"probe_name":"hdf5","function_name":"H5Pget"},"4684":{"probe_name":"hdf5","function_name":"H5Pfree_merge_committed_dtype_paths"},"4683":{"probe_name":"hdf5","function_name":"H5Pfill_value_defined"},"4682":{"probe_name":"hdf5","function_name":"H5Pexist"},"4681":{"probe_name":"hdf5","function_name":"H5Pequal"},"4680":{"probe_name":"hdf5","function_name":"H5Pencode2"},"4679":{"probe_name":"hdf5","function_name":"H5Pencode1"},"4678":{"probe_name":"hdf5","function_name":"H5Pdecode"},"4677":{"probe_name":"hdf5","function_name":"H5Pcreate_class"},"4676":{"probe_name":"hdf5","function_name":"H5Pcreate"},"4675":{"probe_name":"hdf5","function_name":"H5Pcopy_prop"},"4674":{"probe_name":"hdf5","function_name":"H5Pcopy"},"4673":{"probe_name":"hdf5","function_name":"H5Pclose_class"},"4672":{"probe_name":"hdf5","function_name":"H5Pclose"},"4671":{"probe_name":"hdf5","function_name":"H5Pall_filters_avail"},"4670":{"probe_name":"hdf5","function_name":"H5Padd_merge_committed_dtype_path"},"4669":{"probe_name":"hdf5","function_name":"H5P_term_package"},"4668":{"probe_name":"hdf5","function_name":"H5P_set_vol"},"4667":{"probe_name":"hdf5","function_name":"H5P_set_vlen_mem_manager"},"4666":{"probe_name":"hdf5","function_name":"H5P_set_driver_by_value"},"4665":{"probe_name":"hdf5","function_name":"H5P_set_driver_by_name"},"4664":{"probe_name":"hdf5","function_name":"H5P_set_driver"},"4663":{"probe_name":"hdf5","function_name":"H5P_set"},"4662":{"probe_name":"hdf5","function_name":"H5P_reset_vol_class"},"4661":{"probe_name":"hdf5","function_name":"H5P_remove"},"4660":{"probe_name":"hdf5","function_name":"H5P_poke"},"4659":{"probe_name":"hdf5","function_name":"H5P_peek_driver_info"},"4658":{"probe_name":"hdf5","function_name":"H5P_peek_driver_config_str"},"4657":{"probe_name":"hdf5","function_name":"H5P_peek_driver"},"4656":{"probe_name":"hdf5","function_name":"H5P_peek"},"4655":{"probe_name":"hdf5","function_name":"H5P_object_verify"},"4654":{"probe_name":"hdf5","function_name":"H5P_modify_filter"},"4653":{"probe_name":"hdf5","function_name":"H5P_isa_class"},"4652":{"probe_name":"hdf5","function_name":"H5P_is_fill_value_defined"},"4651":{"probe_name":"hdf5","function_name":"H5P_insert"},"4650":{"probe_name":"hdf5","function_name":"H5P_init_phase2"},"4649":{"probe_name":"hdf5","function_name":"H5P_init_phase1"},"4648":{"probe_name":"hdf5","function_name":"H5P_ignore_cmp"},"4647":{"probe_name":"hdf5","function_name":"H5P_get_plist_id"},"4646":{"probe_name":"hdf5","function_name":"H5P_get_nprops_pclass"},"4645":{"probe_name":"hdf5","function_name":"H5P_get_filter_by_id"},"4644":{"probe_name":"hdf5","function_name":"H5P_get_fill_value"},"4643":{"probe_name":"hdf5","function_name":"H5P_get_class_name"},"4642":{"probe_name":"hdf5","function_name":"H5P_get_class"},"4641":{"probe_name":"hdf5","function_name":"H5P_get"},"4640":{"probe_name":"hdf5","function_name":"H5P_filter_in_pline"},"4639":{"probe_name":"hdf5","function_name":"H5P_fill_value_defined"},"4638":{"probe_name":"hdf5","function_name":"H5P_fill_value_cmp"},"4637":{"probe_name":"hdf5","function_name":"H5P_exist_plist"},"4636":{"probe_name":"hdf5","function_name":"H5P_create_id"},"4635":{"probe_name":"hdf5","function_name":"H5P_copy_plist"},"4634":{"probe_name":"hdf5","function_name":"H5P_close"},"4633":{"probe_name":"hdf5","function_name":"H5P_class_isa"},"4632":{"probe_name":"hdf5","function_name":"H5P__unregister"},"4631":{"probe_name":"hdf5","function_name":"H5P__strcrt_reg_prop"},"4630":{"probe_name":"hdf5","function_name":"H5P__strcrt_char_encoding_enc"},"4629":{"probe_name":"hdf5","function_name":"H5P__strcrt_char_encoding_dec"},"4628":{"probe_name":"hdf5","function_name":"H5P__set_layout"},"4627":{"probe_name":"hdf5","function_name":"H5P__register_real"},"4626":{"probe_name":"hdf5","function_name":"H5P__register"},"4625":{"probe_name":"hdf5","function_name":"H5P__open_class_path_test"},"4624":{"probe_name":"hdf5","function_name":"H5P__open_class_path_cb"},"4623":{"probe_name":"hdf5","function_name":"H5P__open_class_path"},"4622":{"probe_name":"hdf5","function_name":"H5P__ocrt_reg_prop"},"4621":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_set"},"4620":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_get"},"4619":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_enc"},"4618":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_del"},"4617":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_dec"},"4616":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_copy"},"4615":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_cmp"},"4614":{"probe_name":"hdf5","function_name":"H5P__ocrt_pipeline_close"},"4613":{"probe_name":"hdf5","function_name":"H5P__ocpy_reg_prop"},"4612":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_set"},"4611":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_get"},"4610":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_enc.cold"},"4609":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_enc"},"4608":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_del"},"4607":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_dec"},"4606":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_copy"},"4605":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_cmp"},"4604":{"probe_name":"hdf5","function_name":"H5P__ocpy_merge_comm_dt_list_close"},"4603":{"probe_name":"hdf5","function_name":"H5P__new_plist_of_type"},"4602":{"probe_name":"hdf5","function_name":"H5P__mcrt_reg_prop"},"4601":{"probe_name":"hdf5","function_name":"H5P__macc_reg_prop"},"4600":{"probe_name":"hdf5","function_name":"H5P__lcrt_reg_prop"},"4599":{"probe_name":"hdf5","function_name":"H5P__lacc_reg_prop"},"4598":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_set"},"4597":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_get"},"4596":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_enc"},"4595":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_del"},"4594":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_dec"},"4593":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_copy"},"4592":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_cmp"},"4591":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_pref_close"},"4590":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_set"},"4589":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_get"},"4588":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_enc"},"4587":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_del"},"4586":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_dec"},"4585":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_copy"},"4584":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_cmp"},"4583":{"probe_name":"hdf5","function_name":"H5P__lacc_elink_fapl_close"},"4582":{"probe_name":"hdf5","function_name":"H5P__iterate_plist_pclass_cb"},"4581":{"probe_name":"hdf5","function_name":"H5P__iterate_plist_cb"},"4580":{"probe_name":"hdf5","function_name":"H5P__iterate_plist"},"4579":{"probe_name":"hdf5","function_name":"H5P__iterate_pclass_cb"},"4578":{"probe_name":"hdf5","function_name":"H5P__iterate_pclass"},"4577":{"probe_name":"hdf5","function_name":"H5P__iterate_cb"},"4576":{"probe_name":"hdf5","function_name":"H5P__get_size_plist"},"4575":{"probe_name":"hdf5","function_name":"H5P__get_size_pclass"},"4574":{"probe_name":"hdf5","function_name":"H5P__get_nprops_plist"},"4573":{"probe_name":"hdf5","function_name":"H5P__get_filter"},"4572":{"probe_name":"hdf5","function_name":"H5P__get_class_path_test"},"4571":{"probe_name":"hdf5","function_name":"H5P__get_class_path.localalias"},"4570":{"probe_name":"hdf5","function_name":"H5P__get_class_path"},"4569":{"probe_name":"hdf5","function_name":"H5P__get_class_parent"},"4568":{"probe_name":"hdf5","function_name":"H5P__get_cb"},"4567":{"probe_name":"hdf5","function_name":"H5P__gcrt_reg_prop"},"4566":{"probe_name":"hdf5","function_name":"H5P__gcrt_link_info_enc"},"4565":{"probe_name":"hdf5","function_name":"H5P__gcrt_link_info_dec"},"4564":{"probe_name":"hdf5","function_name":"H5P__gcrt_group_info_enc"},"4563":{"probe_name":"hdf5","function_name":"H5P__gcrt_group_info_dec"},"4562":{"probe_name":"hdf5","function_name":"H5P__free_prop_cb"},"4561":{"probe_name":"hdf5","function_name":"H5P__free_del_name_cb"},"4560":{"probe_name":"hdf5","function_name":"H5P__fmnt_reg_prop"},"4559":{"probe_name":"hdf5","function_name":"H5P__find_prop_plist"},"4558":{"probe_name":"hdf5","function_name":"H5P__fcrt_shmsg_index_types_enc"},"4557":{"probe_name":"hdf5","function_name":"H5P__fcrt_shmsg_index_types_dec"},"4556":{"probe_name":"hdf5","function_name":"H5P__fcrt_shmsg_index_minsize_enc"},"4555":{"probe_name":"hdf5","function_name":"H5P__fcrt_shmsg_index_minsize_dec"},"4554":{"probe_name":"hdf5","function_name":"H5P__fcrt_reg_prop"},"4553":{"probe_name":"hdf5","function_name":"H5P__fcrt_fspace_strategy_enc"},"4552":{"probe_name":"hdf5","function_name":"H5P__fcrt_fspace_strategy_dec"},"4551":{"probe_name":"hdf5","function_name":"H5P__fcrt_btree_rank_enc"},"4550":{"probe_name":"hdf5","function_name":"H5P__fcrt_btree_rank_dec"},"4549":{"probe_name":"hdf5","function_name":"H5P__facc_vol_set"},"4548":{"probe_name":"hdf5","function_name":"H5P__facc_vol_get"},"4547":{"probe_name":"hdf5","function_name":"H5P__facc_vol_del"},"4546":{"probe_name":"hdf5","function_name":"H5P__facc_vol_create"},"4545":{"probe_name":"hdf5","function_name":"H5P__facc_vol_copy"},"4544":{"probe_name":"hdf5","function_name":"H5P__facc_vol_cmp"},"4543":{"probe_name":"hdf5","function_name":"H5P__facc_vol_close"},"4542":{"probe_name":"hdf5","function_name":"H5P__facc_set_def_driver"},"4541":{"probe_name":"hdf5","function_name":"H5P__facc_reg_prop"},"4540":{"probe_name":"hdf5","function_name":"H5P__facc_multi_type_enc"},"4539":{"probe_name":"hdf5","function_name":"H5P__facc_multi_type_dec"},"4538":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_info_set"},"4537":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_info_get"},"4536":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_info_del"},"4535":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_info_copy"},"4534":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_info_cmp"},"4533":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_info_close"},"4532":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_comm_set"},"4531":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_comm_get"},"4530":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_comm_del"},"4529":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_comm_copy"},"4528":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_comm_cmp"},"4527":{"probe_name":"hdf5","function_name":"H5P__facc_mpi_comm_close"},"4526":{"probe_name":"hdf5","function_name":"H5P__facc_mdc_log_location_enc"},"4525":{"probe_name":"hdf5","function_name":"H5P__facc_mdc_log_location_del"},"4524":{"probe_name":"hdf5","function_name":"H5P__facc_mdc_log_location_dec"},"4523":{"probe_name":"hdf5","function_name":"H5P__facc_mdc_log_location_copy"},"4522":{"probe_name":"hdf5","function_name":"H5P__facc_mdc_log_location_cmp"},"4521":{"probe_name":"hdf5","function_name":"H5P__facc_mdc_log_location_close"},"4520":{"probe_name":"hdf5","function_name":"H5P__facc_libver_type_enc"},"4519":{"probe_name":"hdf5","function_name":"H5P__facc_libver_type_dec"},"4518":{"probe_name":"hdf5","function_name":"H5P__facc_file_image_info_set"},"4517":{"probe_name":"hdf5","function_name":"H5P__facc_file_image_info_get"},"4516":{"probe_name":"hdf5","function_name":"H5P__facc_file_image_info_del"},"4515":{"probe_name":"hdf5","function_name":"H5P__facc_file_image_info_copy"},"4514":{"probe_name":"hdf5","function_name":"H5P__facc_file_image_info_cmp"},"4513":{"probe_name":"hdf5","function_name":"H5P__facc_file_image_info_close"},"4512":{"probe_name":"hdf5","function_name":"H5P__facc_file_driver_set"},"4511":{"probe_name":"hdf5","function_name":"H5P__facc_file_driver_get"},"4510":{"probe_name":"hdf5","function_name":"H5P__facc_file_driver_del"},"4509":{"probe_name":"hdf5","function_name":"H5P__facc_file_driver_create"},"4508":{"probe_name":"hdf5","function_name":"H5P__facc_file_driver_copy"},"4507":{"probe_name":"hdf5","function_name":"H5P__facc_file_driver_cmp"},"4506":{"probe_name":"hdf5","function_name":"H5P__facc_file_driver_close"},"4505":{"probe_name":"hdf5","function_name":"H5P__facc_fclose_degree_enc"},"4504":{"probe_name":"hdf5","function_name":"H5P__facc_fclose_degree_dec"},"4503":{"probe_name":"hdf5","function_name":"H5P__facc_cache_image_config_enc"},"4502":{"probe_name":"hdf5","function_name":"H5P__facc_cache_image_config_dec"},"4501":{"probe_name":"hdf5","function_name":"H5P__facc_cache_image_config_cmp"},"4500":{"probe_name":"hdf5","function_name":"H5P__facc_cache_config_enc"},"4499":{"probe_name":"hdf5","function_name":"H5P__facc_cache_config_dec"},"4498":{"probe_name":"hdf5","function_name":"H5P__facc_cache_config_cmp"},"4497":{"probe_name":"hdf5","function_name":"H5P__exist_pclass"},"4496":{"probe_name":"hdf5","function_name":"H5P__encode_unsigned"},"4495":{"probe_name":"hdf5","function_name":"H5P__encode_uint8_t"},"4494":{"probe_name":"hdf5","function_name":"H5P__encode_uint64_t"},"4493":{"probe_name":"hdf5","function_name":"H5P__encode_size_t"},"4492":{"probe_name":"hdf5","function_name":"H5P__encode_hsize_t"},"4491":{"probe_name":"hdf5","function_name":"H5P__encode_double"},"4490":{"probe_name":"hdf5","function_name":"H5P__encode_coll_md_read_flag_t"},"4489":{"probe_name":"hdf5","function_name":"H5P__encode_chunk_cache_nslots"},"4488":{"probe_name":"hdf5","function_name":"H5P__encode_chunk_cache_nbytes"},"4487":{"probe_name":"hdf5","function_name":"H5P__encode_cb"},"4486":{"probe_name":"hdf5","function_name":"H5P__encode_bool"},"4485":{"probe_name":"hdf5","function_name":"H5P__encode"},"4484":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_set"},"4483":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_get"},"4482":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_enc"},"4481":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_del"},"4480":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_dec"},"4479":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_copy"},"4478":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_cmp"},"4477":{"probe_name":"hdf5","function_name":"H5P__dxfr_xform_close"},"4476":{"probe_name":"hdf5","function_name":"H5P__dxfr_selection_io_mode_enc"},"4475":{"probe_name":"hdf5","function_name":"H5P__dxfr_selection_io_mode_dec"},"4474":{"probe_name":"hdf5","function_name":"H5P__dxfr_reg_prop"},"4473":{"probe_name":"hdf5","function_name":"H5P__dxfr_mpio_collective_opt_enc"},"4472":{"probe_name":"hdf5","function_name":"H5P__dxfr_mpio_collective_opt_dec"},"4471":{"probe_name":"hdf5","function_name":"H5P__dxfr_mpio_chunk_opt_hard_enc"},"4470":{"probe_name":"hdf5","function_name":"H5P__dxfr_mpio_chunk_opt_hard_dec"},"4469":{"probe_name":"hdf5","function_name":"H5P__dxfr_modify_write_buf_enc"},"4468":{"probe_name":"hdf5","function_name":"H5P__dxfr_modify_write_buf_dec"},"4467":{"probe_name":"hdf5","function_name":"H5P__dxfr_io_xfer_mode_enc"},"4466":{"probe_name":"hdf5","function_name":"H5P__dxfr_io_xfer_mode_dec"},"4465":{"probe_name":"hdf5","function_name":"H5P__dxfr_edc_enc"},"4464":{"probe_name":"hdf5","function_name":"H5P__dxfr_edc_dec"},"4463":{"probe_name":"hdf5","function_name":"H5P__dxfr_dset_io_hyp_sel_copy"},"4462":{"probe_name":"hdf5","function_name":"H5P__dxfr_dset_io_hyp_sel_cmp"},"4461":{"probe_name":"hdf5","function_name":"H5P__dxfr_dset_io_hyp_sel_close"},"4460":{"probe_name":"hdf5","function_name":"H5P__dxfr_btree_split_ratio_enc"},"4459":{"probe_name":"hdf5","function_name":"H5P__dxfr_btree_split_ratio_dec"},"4458":{"probe_name":"hdf5","function_name":"H5P__dxfr_bkgr_buf_type_enc"},"4457":{"probe_name":"hdf5","function_name":"H5P__dxfr_bkgr_buf_type_dec"},"4456":{"probe_name":"hdf5","function_name":"H5P__dup_prop"},"4455":{"probe_name":"hdf5","function_name":"H5P__do_prop_cb1"},"4454":{"probe_name":"hdf5","function_name":"H5P__decode_unsigned"},"4453":{"probe_name":"hdf5","function_name":"H5P__decode_uint8_t"},"4452":{"probe_name":"hdf5","function_name":"H5P__decode_uint64_t"},"4451":{"probe_name":"hdf5","function_name":"H5P__decode_size_t"},"4450":{"probe_name":"hdf5","function_name":"H5P__decode_hsize_t"},"4449":{"probe_name":"hdf5","function_name":"H5P__decode_double"},"4448":{"probe_name":"hdf5","function_name":"H5P__decode_coll_md_read_flag_t"},"4447":{"probe_name":"hdf5","function_name":"H5P__decode_chunk_cache_nslots"},"4446":{"probe_name":"hdf5","function_name":"H5P__decode_chunk_cache_nbytes"},"4445":{"probe_name":"hdf5","function_name":"H5P__decode_bool"},"4444":{"probe_name":"hdf5","function_name":"H5P__decode"},"4443":{"probe_name":"hdf5","function_name":"H5P__dcrt_reg_prop"},"4442":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_set"},"4441":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_get"},"4440":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_enc"},"4439":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_del"},"4438":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_dec"},"4437":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_copy"},"4436":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_cmp"},"4435":{"probe_name":"hdf5","function_name":"H5P__dcrt_layout_close"},"4434":{"probe_name":"hdf5","function_name":"H5P__dcrt_fill_value_set"},"4433":{"probe_name":"hdf5","function_name":"H5P__dcrt_fill_value_get"},"4432":{"probe_name":"hdf5","function_name":"H5P__dcrt_fill_value_enc"},"4431":{"probe_name":"hdf5","function_name":"H5P__dcrt_fill_value_del"},"4430":{"probe_name":"hdf5","function_name":"H5P__dcrt_fill_value_dec"},"4429":{"probe_name":"hdf5","function_name":"H5P__dcrt_fill_value_copy"},"4428":{"probe_name":"hdf5","function_name":"H5P__dcrt_fill_value_close"},"4427":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_set"},"4426":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_get"},"4425":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_enc"},"4424":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_del"},"4423":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_dec"},"4422":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_copy"},"4421":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_cmp"},"4420":{"probe_name":"hdf5","function_name":"H5P__dcrt_ext_file_list_close"},"4419":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_set"},"4418":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_get"},"4417":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_enc"},"4416":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_del"},"4415":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_dec"},"4414":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_copy"},"4413":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_cmp"},"4412":{"probe_name":"hdf5","function_name":"H5P__dapl_vds_file_pref_close"},"4411":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_set"},"4410":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_get"},"4409":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_enc"},"4408":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_del"},"4407":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_dec"},"4406":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_copy"},"4405":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_cmp"},"4404":{"probe_name":"hdf5","function_name":"H5P__dapl_efile_pref_close"},"4403":{"probe_name":"hdf5","function_name":"H5P__dacc_vds_view_enc"},"4402":{"probe_name":"hdf5","function_name":"H5P__dacc_vds_view_dec"},"4401":{"probe_name":"hdf5","function_name":"H5P__dacc_reg_prop"},"4400":{"probe_name":"hdf5","function_name":"H5P__create_prop"},"4399":{"probe_name":"hdf5","function_name":"H5P__create_class"},"4398":{"probe_name":"hdf5","function_name":"H5P__copy_prop_plist"},"4397":{"probe_name":"hdf5","function_name":"H5P__copy_prop_pclass"},"4396":{"probe_name":"hdf5","function_name":"H5P__copy_pclass"},"4395":{"probe_name":"hdf5","function_name":"H5P__copy_merge_comm_dt_list"},"4394":{"probe_name":"hdf5","function_name":"H5P__cmp_prop.part.0"},"4393":{"probe_name":"hdf5","function_name":"H5P__cmp_plist_cb"},"4392":{"probe_name":"hdf5","function_name":"H5P__cmp_plist"},"4391":{"probe_name":"hdf5","function_name":"H5P__cmp_class"},"4390":{"probe_name":"hdf5","function_name":"H5P__close_list_cb"},"4389":{"probe_name":"hdf5","function_name":"H5P__close_class_cb"},"4388":{"probe_name":"hdf5","function_name":"H5P__close_class"},"4387":{"probe_name":"hdf5","function_name":"H5P__class_set"},"4386":{"probe_name":"hdf5","function_name":"H5P__class_get"},"4385":{"probe_name":"hdf5","function_name":"H5P__add_prop"},"4384":{"probe_name":"hdf5","function_name":"H5P__access_class.localalias"},"4383":{"probe_name":"hdf5","function_name":"H5P__access_class"},"4382":{"probe_name":"hdf5","function_name":"H5PLsize"},"4381":{"probe_name":"hdf5","function_name":"H5PLset_loading_state"},"4380":{"probe_name":"hdf5","function_name":"H5PLreplace"},"4379":{"probe_name":"hdf5","function_name":"H5PLremove"},"4378":{"probe_name":"hdf5","function_name":"H5PLprepend"},"4377":{"probe_name":"hdf5","function_name":"H5PLinsert"},"4376":{"probe_name":"hdf5","function_name":"H5PLget_loading_state"},"4375":{"probe_name":"hdf5","function_name":"H5PLget"},"4374":{"probe_name":"hdf5","function_name":"H5PLappend"},"4373":{"probe_name":"hdf5","function_name":"H5PL_term_package"},"4372":{"probe_name":"hdf5","function_name":"H5PL_load"},"4371":{"probe_name":"hdf5","function_name":"H5PL_iterate"},"4370":{"probe_name":"hdf5","function_name":"H5PL_init"},"4369":{"probe_name":"hdf5","function_name":"H5PL__set_plugin_control_mask"},"4368":{"probe_name":"hdf5","function_name":"H5PL__replace_path"},"4367":{"probe_name":"hdf5","function_name":"H5PL__remove_path"},"4366":{"probe_name":"hdf5","function_name":"H5PL__prepend_path"},"4365":{"probe_name":"hdf5","function_name":"H5PL__path_table_iterate"},"4364":{"probe_name":"hdf5","function_name":"H5PL__open"},"4363":{"probe_name":"hdf5","function_name":"H5PL__insert_path"},"4362":{"probe_name":"hdf5","function_name":"H5PL__insert_at"},"4361":{"probe_name":"hdf5","function_name":"H5PL__get_plugin_control_mask"},"4360":{"probe_name":"hdf5","function_name":"H5PL__get_path"},"4359":{"probe_name":"hdf5","function_name":"H5PL__get_num_paths"},"4358":{"probe_name":"hdf5","function_name":"H5PL__find_plugin_in_path_table"},"4357":{"probe_name":"hdf5","function_name":"H5PL__find_plugin_in_cache"},"4356":{"probe_name":"hdf5","function_name":"H5PL__create_plugin_cache"},"4355":{"probe_name":"hdf5","function_name":"H5PL__create_path_table"},"4354":{"probe_name":"hdf5","function_name":"H5PL__close_plugin_cache"},"4353":{"probe_name":"hdf5","function_name":"H5PL__close_path_table"},"4352":{"probe_name":"hdf5","function_name":"H5PL__close"},"4351":{"probe_name":"hdf5","function_name":"H5PL__append_path"},"4350":{"probe_name":"hdf5","function_name":"H5PL__add_plugin"},"4349":{"probe_name":"hdf5","function_name":"H5PB_write"},"4348":{"probe_name":"hdf5","function_name":"H5PB_update_entry"},"4347":{"probe_name":"hdf5","function_name":"H5PB_reset_stats"},"4346":{"probe_name":"hdf5","function_name":"H5PB_remove_entry"},"4345":{"probe_name":"hdf5","function_name":"H5PB_read"},"4344":{"probe_name":"hdf5","function_name":"H5PB_print_stats"},"4343":{"probe_name":"hdf5","function_name":"H5PB_get_stats"},"4342":{"probe_name":"hdf5","function_name":"H5PB_flush"},"4341":{"probe_name":"hdf5","function_name":"H5PB_enabled"},"4340":{"probe_name":"hdf5","function_name":"H5PB_dest"},"4339":{"probe_name":"hdf5","function_name":"H5PB_create"},"4338":{"probe_name":"hdf5","function_name":"H5PB_add_new_page"},"4337":{"probe_name":"hdf5","function_name":"H5PB__make_space"},"4336":{"probe_name":"hdf5","function_name":"H5PB__flush_cb"},"4335":{"probe_name":"hdf5","function_name":"H5PB__dest_cb"},"4334":{"probe_name":"hdf5","function_name":"H5Ovisit_by_name3"},"4333":{"probe_name":"hdf5","function_name":"H5Ovisit_by_name2"},"4332":{"probe_name":"hdf5","function_name":"H5Ovisit_by_name1"},"4331":{"probe_name":"hdf5","function_name":"H5Ovisit3"},"4330":{"probe_name":"hdf5","function_name":"H5Ovisit2"},"4329":{"probe_name":"hdf5","function_name":"H5Ovisit1"},"4328":{"probe_name":"hdf5","function_name":"H5Otoken_to_str"},"4327":{"probe_name":"hdf5","function_name":"H5Otoken_from_str"},"4326":{"probe_name":"hdf5","function_name":"H5Otoken_cmp"},"4325":{"probe_name":"hdf5","function_name":"H5Oset_comment_by_name"},"4324":{"probe_name":"hdf5","function_name":"H5Oset_comment"},"4323":{"probe_name":"hdf5","function_name":"H5Orefresh_async"},"4322":{"probe_name":"hdf5","function_name":"H5Orefresh"},"4321":{"probe_name":"hdf5","function_name":"H5Oopen_by_token"},"4320":{"probe_name":"hdf5","function_name":"H5Oopen_by_idx_async"},"4319":{"probe_name":"hdf5","function_name":"H5Oopen_by_idx"},"4318":{"probe_name":"hdf5","function_name":"H5Oopen_by_addr"},"4317":{"probe_name":"hdf5","function_name":"H5Oopen_async"},"4316":{"probe_name":"hdf5","function_name":"H5Oopen"},"4315":{"probe_name":"hdf5","function_name":"H5Olink"},"4314":{"probe_name":"hdf5","function_name":"H5Oincr_refcount"},"4313":{"probe_name":"hdf5","function_name":"H5Oget_native_info_by_name"},"4312":{"probe_name":"hdf5","function_name":"H5Oget_native_info_by_idx"},"4311":{"probe_name":"hdf5","function_name":"H5Oget_native_info"},"4310":{"probe_name":"hdf5","function_name":"H5Oget_info_by_name_async"},"4309":{"probe_name":"hdf5","function_name":"H5Oget_info_by_name3"},"4308":{"probe_name":"hdf5","function_name":"H5Oget_info_by_name2"},"4307":{"probe_name":"hdf5","function_name":"H5Oget_info_by_name1"},"4306":{"probe_name":"hdf5","function_name":"H5Oget_info_by_idx3"},"4305":{"probe_name":"hdf5","function_name":"H5Oget_info_by_idx2"},"4304":{"probe_name":"hdf5","function_name":"H5Oget_info_by_idx1"},"4303":{"probe_name":"hdf5","function_name":"H5Oget_info3"},"4302":{"probe_name":"hdf5","function_name":"H5Oget_info2"},"4301":{"probe_name":"hdf5","function_name":"H5Oget_info1"},"4300":{"probe_name":"hdf5","function_name":"H5Oget_comment_by_name"},"4299":{"probe_name":"hdf5","function_name":"H5Oget_comment"},"4298":{"probe_name":"hdf5","function_name":"H5Oflush_async"},"4297":{"probe_name":"hdf5","function_name":"H5Oflush"},"4296":{"probe_name":"hdf5","function_name":"H5Oexists_by_name"},"4295":{"probe_name":"hdf5","function_name":"H5Oenable_mdc_flushes"},"4294":{"probe_name":"hdf5","function_name":"H5Odisable_mdc_flushes"},"4293":{"probe_name":"hdf5","function_name":"H5Odecr_refcount"},"4292":{"probe_name":"hdf5","function_name":"H5Ocopy_async"},"4291":{"probe_name":"hdf5","function_name":"H5Ocopy"},"4290":{"probe_name":"hdf5","function_name":"H5Oclose_async"},"4289":{"probe_name":"hdf5","function_name":"H5Oclose"},"4288":{"probe_name":"hdf5","function_name":"H5Oare_mdc_flushes_disabled"},"4287":{"probe_name":"hdf5","function_name":"H5O_unprotect"},"4286":{"probe_name":"hdf5","function_name":"H5O_unpin"},"4285":{"probe_name":"hdf5","function_name":"H5O_touch_oh"},"4284":{"probe_name":"hdf5","function_name":"H5O_touch"},"4283":{"probe_name":"hdf5","function_name":"H5O_set_shared"},"4282":{"probe_name":"hdf5","function_name":"H5O_refresh_metadata_reopen"},"4281":{"probe_name":"hdf5","function_name":"H5O_refresh_metadata"},"4280":{"probe_name":"hdf5","function_name":"H5O_protect"},"4279":{"probe_name":"hdf5","function_name":"H5O_pline_set_version"},"4278":{"probe_name":"hdf5","function_name":"H5O_pin"},"4277":{"probe_name":"hdf5","function_name":"H5O_open_name"},"4276":{"probe_name":"hdf5","function_name":"H5O_open_by_loc"},"4275":{"probe_name":"hdf5","function_name":"H5O_open"},"4274":{"probe_name":"hdf5","function_name":"H5O_obj_type"},"4273":{"probe_name":"hdf5","function_name":"H5O_obj_create"},"4272":{"probe_name":"hdf5","function_name":"H5O_msg_write_oh"},"4271":{"probe_name":"hdf5","function_name":"H5O_msg_write"},"4270":{"probe_name":"hdf5","function_name":"H5O_msg_size_oh"},"4269":{"probe_name":"hdf5","function_name":"H5O_msg_size_f"},"4268":{"probe_name":"hdf5","function_name":"H5O_msg_set_share"},"4267":{"probe_name":"hdf5","function_name":"H5O_msg_reset_share"},"4266":{"probe_name":"hdf5","function_name":"H5O_msg_reset"},"4265":{"probe_name":"hdf5","function_name":"H5O_msg_remove_op"},"4264":{"probe_name":"hdf5","function_name":"H5O_msg_remove"},"4263":{"probe_name":"hdf5","function_name":"H5O_msg_read_oh"},"4262":{"probe_name":"hdf5","function_name":"H5O_msg_read"},"4261":{"probe_name":"hdf5","function_name":"H5O_msg_raw_size"},"4260":{"probe_name":"hdf5","function_name":"H5O_msg_iterate"},"4259":{"probe_name":"hdf5","function_name":"H5O_msg_is_shared"},"4258":{"probe_name":"hdf5","function_name":"H5O_msg_get_flags"},"4257":{"probe_name":"hdf5","function_name":"H5O_msg_get_crt_index"},"4256":{"probe_name":"hdf5","function_name":"H5O_msg_free_real"},"4255":{"probe_name":"hdf5","function_name":"H5O_msg_free"},"4254":{"probe_name":"hdf5","function_name":"H5O_msg_flush"},"4253":{"probe_name":"hdf5","function_name":"H5O_msg_exists_oh"},"4252":{"probe_name":"hdf5","function_name":"H5O_msg_exists"},"4251":{"probe_name":"hdf5","function_name":"H5O_msg_encode"},"4250":{"probe_name":"hdf5","function_name":"H5O_msg_delete"},"4249":{"probe_name":"hdf5","function_name":"H5O_msg_decode"},"4248":{"probe_name":"hdf5","function_name":"H5O_msg_create"},"4247":{"probe_name":"hdf5","function_name":"H5O_msg_count"},"4246":{"probe_name":"hdf5","function_name":"H5O_msg_copy"},"4245":{"probe_name":"hdf5","function_name":"H5O_msg_can_share_in_ohdr"},"4244":{"probe_name":"hdf5","function_name":"H5O_msg_can_share"},"4243":{"probe_name":"hdf5","function_name":"H5O_msg_append_oh"},"4242":{"probe_name":"hdf5","function_name":"H5O_loc_reset"},"4241":{"probe_name":"hdf5","function_name":"H5O_loc_hold_file"},"4240":{"probe_name":"hdf5","function_name":"H5O_loc_free"},"4239":{"probe_name":"hdf5","function_name":"H5O_loc_copy_shallow"},"4238":{"probe_name":"hdf5","function_name":"H5O_loc_copy_deep"},"4237":{"probe_name":"hdf5","function_name":"H5O_loc_copy"},"4236":{"probe_name":"hdf5","function_name":"H5O_link_delete"},"4235":{"probe_name":"hdf5","function_name":"H5O_link"},"4234":{"probe_name":"hdf5","function_name":"H5O_init"},"4233":{"probe_name":"hdf5","function_name":"H5O_has_chksum"},"4232":{"probe_name":"hdf5","function_name":"H5O_get_rc_and_type"},"4231":{"probe_name":"hdf5","function_name":"H5O_get_proxy"},"4230":{"probe_name":"hdf5","function_name":"H5O_get_oh_version"},"4229":{"probe_name":"hdf5","function_name":"H5O_get_oh_mtime"},"4228":{"probe_name":"hdf5","function_name":"H5O_get_oh_flags"},"4227":{"probe_name":"hdf5","function_name":"H5O_get_oh_addr"},"4226":{"probe_name":"hdf5","function_name":"H5O_get_nlinks"},"4225":{"probe_name":"hdf5","function_name":"H5O_get_native_info"},"4224":{"probe_name":"hdf5","function_name":"H5O_get_loc"},"4223":{"probe_name":"hdf5","function_name":"H5O_get_info"},"4222":{"probe_name":"hdf5","function_name":"H5O_get_hdr_info"},"4221":{"probe_name":"hdf5","function_name":"H5O_get_create_plist"},"4220":{"probe_name":"hdf5","function_name":"H5O_fsinfo_set_version"},"4219":{"probe_name":"hdf5","function_name":"H5O_fsinfo_check_version"},"4218":{"probe_name":"hdf5","function_name":"H5O_flush_common"},"4217":{"probe_name":"hdf5","function_name":"H5O_flush"},"4216":{"probe_name":"hdf5","function_name":"H5O_fill_set_version"},"4215":{"probe_name":"hdf5","function_name":"H5O_fill_reset_dyn"},"4214":{"probe_name":"hdf5","function_name":"H5O_fill_convert"},"4213":{"probe_name":"hdf5","function_name":"H5O_efl_total_size"},"4212":{"probe_name":"hdf5","function_name":"H5O_delete"},"4211":{"probe_name":"hdf5","function_name":"H5O_dec_rc_by_loc"},"4210":{"probe_name":"hdf5","function_name":"H5O_debug_id"},"4209":{"probe_name":"hdf5","function_name":"H5O_debug"},"4208":{"probe_name":"hdf5","function_name":"H5O_create_ohdr"},"4207":{"probe_name":"hdf5","function_name":"H5O_create"},"4206":{"probe_name":"hdf5","function_name":"H5O_copy_header_map"},"4205":{"probe_name":"hdf5","function_name":"H5O_copy_expand_ref"},"4204":{"probe_name":"hdf5","function_name":"H5O_close"},"4203":{"probe_name":"hdf5","function_name":"H5O_attr_iterate_real"},"4202":{"probe_name":"hdf5","function_name":"H5O_apply_ohdr"},"4201":{"probe_name":"hdf5","function_name":"H5O__visit_cb"},"4200":{"probe_name":"hdf5","function_name":"H5O__visit"},"4199":{"probe_name":"hdf5","function_name":"H5O__unknown_free"},"4198":{"probe_name":"hdf5","function_name":"H5O__stab_size"},"4197":{"probe_name":"hdf5","function_name":"H5O__stab_post_copy_file"},"4196":{"probe_name":"hdf5","function_name":"H5O__stab_free"},"4195":{"probe_name":"hdf5","function_name":"H5O__stab_encode"},"4194":{"probe_name":"hdf5","function_name":"H5O__stab_delete"},"4193":{"probe_name":"hdf5","function_name":"H5O__stab_decode"},"4192":{"probe_name":"hdf5","function_name":"H5O__stab_debug"},"4191":{"probe_name":"hdf5","function_name":"H5O__stab_copy_file"},"4190":{"probe_name":"hdf5","function_name":"H5O__stab_copy"},"4189":{"probe_name":"hdf5","function_name":"H5O__shmesg_size"},"4188":{"probe_name":"hdf5","function_name":"H5O__shmesg_encode"},"4187":{"probe_name":"hdf5","function_name":"H5O__shmesg_decode"},"4186":{"probe_name":"hdf5","function_name":"H5O__shmesg_debug"},"4185":{"probe_name":"hdf5","function_name":"H5O__shmesg_copy"},"4184":{"probe_name":"hdf5","function_name":"H5O__shared_size"},"4183":{"probe_name":"hdf5","function_name":"H5O__shared_post_copy_file"},"4182":{"probe_name":"hdf5","function_name":"H5O__shared_link"},"4181":{"probe_name":"hdf5","function_name":"H5O__shared_encode"},"4180":{"probe_name":"hdf5","function_name":"H5O__shared_delete"},"4179":{"probe_name":"hdf5","function_name":"H5O__shared_decode"},"4178":{"probe_name":"hdf5","function_name":"H5O__shared_debug"},"4177":{"probe_name":"hdf5","function_name":"H5O__shared_copy_file"},"4176":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_size"},"4175":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_post_copy_file"},"4174":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_link"},"4173":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_encode"},"4172":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_delete"},"4171":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_decode"},"4170":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_debug"},"4169":{"probe_name":"hdf5","function_name":"H5O__sdspace_shared_copy_file"},"4168":{"probe_name":"hdf5","function_name":"H5O__sdspace_reset"},"4167":{"probe_name":"hdf5","function_name":"H5O__sdspace_pre_copy_file"},"4166":{"probe_name":"hdf5","function_name":"H5O__sdspace_free"},"4165":{"probe_name":"hdf5","function_name":"H5O__sdspace_copy"},"4164":{"probe_name":"hdf5","function_name":"H5O__remove_empty_chunks"},"4163":{"probe_name":"hdf5","function_name":"H5O__release_mesg"},"4162":{"probe_name":"hdf5","function_name":"H5O__refcount_size"},"4161":{"probe_name":"hdf5","function_name":"H5O__refcount_pre_copy_file"},"4160":{"probe_name":"hdf5","function_name":"H5O__refcount_free"},"4159":{"probe_name":"hdf5","function_name":"H5O__refcount_encode"},"4158":{"probe_name":"hdf5","function_name":"H5O__refcount_decode"},"4157":{"probe_name":"hdf5","function_name":"H5O__refcount_debug"},"4156":{"probe_name":"hdf5","function_name":"H5O__refcount_copy"},"4155":{"probe_name":"hdf5","function_name":"H5O__prefix_deserialize"},"4154":{"probe_name":"hdf5","function_name":"H5O__pline_shared_size"},"4153":{"probe_name":"hdf5","function_name":"H5O__pline_shared_post_copy_file"},"4152":{"probe_name":"hdf5","function_name":"H5O__pline_shared_link"},"4151":{"probe_name":"hdf5","function_name":"H5O__pline_shared_encode"},"4150":{"probe_name":"hdf5","function_name":"H5O__pline_shared_delete"},"4149":{"probe_name":"hdf5","function_name":"H5O__pline_shared_decode"},"4148":{"probe_name":"hdf5","function_name":"H5O__pline_shared_debug"},"4147":{"probe_name":"hdf5","function_name":"H5O__pline_shared_copy_file"},"4146":{"probe_name":"hdf5","function_name":"H5O__pline_reset"},"4145":{"probe_name":"hdf5","function_name":"H5O__pline_pre_copy_file"},"4144":{"probe_name":"hdf5","function_name":"H5O__pline_free"},"4143":{"probe_name":"hdf5","function_name":"H5O__pline_copy"},"4142":{"probe_name":"hdf5","function_name":"H5O__open_by_idx"},"4141":{"probe_name":"hdf5","function_name":"H5O__open_by_addr"},"4140":{"probe_name":"hdf5","function_name":"H5O__obj_class_real"},"4139":{"probe_name":"hdf5","function_name":"H5O__obj_class"},"4138":{"probe_name":"hdf5","function_name":"H5O__num_attrs_test"},"4137":{"probe_name":"hdf5","function_name":"H5O__name_size"},"4136":{"probe_name":"hdf5","function_name":"H5O__name_reset"},"4135":{"probe_name":"hdf5","function_name":"H5O__name_encode"},"4134":{"probe_name":"hdf5","function_name":"H5O__name_decode"},"4133":{"probe_name":"hdf5","function_name":"H5O__name_debug"},"4132":{"probe_name":"hdf5","function_name":"H5O__name_copy"},"4131":{"probe_name":"hdf5","function_name":"H5O__mtime_size"},"4130":{"probe_name":"hdf5","function_name":"H5O__mtime_new_size"},"4129":{"probe_name":"hdf5","function_name":"H5O__mtime_new_encode"},"4128":{"probe_name":"hdf5","function_name":"H5O__mtime_new_decode"},"4127":{"probe_name":"hdf5","function_name":"H5O__mtime_free"},"4126":{"probe_name":"hdf5","function_name":"H5O__mtime_encode"},"4125":{"probe_name":"hdf5","function_name":"H5O__mtime_decode"},"4124":{"probe_name":"hdf5","function_name":"H5O__mtime_debug"},"4123":{"probe_name":"hdf5","function_name":"H5O__mtime_copy"},"4122":{"probe_name":"hdf5","function_name":"H5O__msg_write_real"},"4121":{"probe_name":"hdf5","function_name":"H5O__msg_remove_real"},"4120":{"probe_name":"hdf5","function_name":"H5O__msg_remove_cb"},"4119":{"probe_name":"hdf5","function_name":"H5O__msg_move_to_new_chunk_test"},"4118":{"probe_name":"hdf5","function_name":"H5O__msg_iterate_real"},"4117":{"probe_name":"hdf5","function_name":"H5O__msg_get_chunkno_test"},"4116":{"probe_name":"hdf5","function_name":"H5O__msg_free_mesg"},"4115":{"probe_name":"hdf5","function_name":"H5O__msg_count_real"},"4114":{"probe_name":"hdf5","function_name":"H5O__msg_copy_file"},"4113":{"probe_name":"hdf5","function_name":"H5O__msg_append_real"},"4112":{"probe_name":"hdf5","function_name":"H5O__msg_alloc"},"4111":{"probe_name":"hdf5","function_name":"H5O__mdci_size"},"4110":{"probe_name":"hdf5","function_name":"H5O__mdci_free"},"4109":{"probe_name":"hdf5","function_name":"H5O__mdci_encode"},"4108":{"probe_name":"hdf5","function_name":"H5O__mdci_delete"},"4107":{"probe_name":"hdf5","function_name":"H5O__mdci_decode"},"4106":{"probe_name":"hdf5","function_name":"H5O__mdci_debug"},"4105":{"probe_name":"hdf5","function_name":"H5O__mdci_copy"},"4104":{"probe_name":"hdf5","function_name":"H5O__link_size"},"4103":{"probe_name":"hdf5","function_name":"H5O__link_reset"},"4102":{"probe_name":"hdf5","function_name":"H5O__link_pre_copy_file"},"4101":{"probe_name":"hdf5","function_name":"H5O__link_post_copy_file"},"4100":{"probe_name":"hdf5","function_name":"H5O__link_oh"},"4099":{"probe_name":"hdf5","function_name":"H5O__link_free"},"4098":{"probe_name":"hdf5","function_name":"H5O__link_encode"},"4097":{"probe_name":"hdf5","function_name":"H5O__link_decode"},"4096":{"probe_name":"hdf5","function_name":"H5O__link_debug"},"4095":{"probe_name":"hdf5","function_name":"H5O__link_copy_file"},"4094":{"probe_name":"hdf5","function_name":"H5O__link_copy"},"4093":{"probe_name":"hdf5","function_name":"H5O__linfo_size"},"4092":{"probe_name":"hdf5","function_name":"H5O__linfo_post_copy_file_cb"},"4091":{"probe_name":"hdf5","function_name":"H5O__linfo_post_copy_file"},"4090":{"probe_name":"hdf5","function_name":"H5O__linfo_free"},"4089":{"probe_name":"hdf5","function_name":"H5O__linfo_encode"},"4088":{"probe_name":"hdf5","function_name":"H5O__linfo_delete"},"4087":{"probe_name":"hdf5","function_name":"H5O__linfo_decode"},"4086":{"probe_name":"hdf5","function_name":"H5O__linfo_debug"},"4085":{"probe_name":"hdf5","function_name":"H5O__linfo_copy_file"},"4084":{"probe_name":"hdf5","function_name":"H5O__linfo_copy.part.0"},"4083":{"probe_name":"hdf5","function_name":"H5O__linfo_copy"},"4082":{"probe_name":"hdf5","function_name":"H5O__layout_size"},"4081":{"probe_name":"hdf5","function_name":"H5O__layout_reset.part.0"},"4080":{"probe_name":"hdf5","function_name":"H5O__layout_reset"},"4079":{"probe_name":"hdf5","function_name":"H5O__layout_pre_copy_file"},"4078":{"probe_name":"hdf5","function_name":"H5O__layout_free"},"4077":{"probe_name":"hdf5","function_name":"H5O__layout_encode"},"4076":{"probe_name":"hdf5","function_name":"H5O__layout_delete"},"4075":{"probe_name":"hdf5","function_name":"H5O__layout_decode"},"4074":{"probe_name":"hdf5","function_name":"H5O__layout_debug"},"4073":{"probe_name":"hdf5","function_name":"H5O__layout_copy_file"},"4072":{"probe_name":"hdf5","function_name":"H5O__layout_copy"},"4071":{"probe_name":"hdf5","function_name":"H5O__iterate1_adapter"},"4070":{"probe_name":"hdf5","function_name":"H5O__is_attr_empty_test"},"4069":{"probe_name":"hdf5","function_name":"H5O__is_attr_dense_test"},"4068":{"probe_name":"hdf5","function_name":"H5O__inc_rc"},"4067":{"probe_name":"hdf5","function_name":"H5O__group_open"},"4066":{"probe_name":"hdf5","function_name":"H5O__group_isa"},"4065":{"probe_name":"hdf5","function_name":"H5O__group_get_oloc"},"4064":{"probe_name":"hdf5","function_name":"H5O__group_get_copy_file_udata"},"4063":{"probe_name":"hdf5","function_name":"H5O__group_free_copy_file_udata"},"4062":{"probe_name":"hdf5","function_name":"H5O__group_create"},"4061":{"probe_name":"hdf5","function_name":"H5O__group_bh_info"},"4060":{"probe_name":"hdf5","function_name":"H5O__ginfo_size"},"4059":{"probe_name":"hdf5","function_name":"H5O__ginfo_free"},"4058":{"probe_name":"hdf5","function_name":"H5O__ginfo_encode"},"4057":{"probe_name":"hdf5","function_name":"H5O__ginfo_decode"},"4056":{"probe_name":"hdf5","function_name":"H5O__ginfo_debug"},"4055":{"probe_name":"hdf5","function_name":"H5O__ginfo_copy"},"4054":{"probe_name":"hdf5","function_name":"H5O__get_rc_test"},"4053":{"probe_name":"hdf5","function_name":"H5O__get_info_old"},"4052":{"probe_name":"hdf5","function_name":"H5O__get_hdr_info_real"},"4051":{"probe_name":"hdf5","function_name":"H5O__fsinfo_size"},"4050":{"probe_name":"hdf5","function_name":"H5O__fsinfo_free"},"4049":{"probe_name":"hdf5","function_name":"H5O__fsinfo_encode"},"4048":{"probe_name":"hdf5","function_name":"H5O__fsinfo_decode"},"4047":{"probe_name":"hdf5","function_name":"H5O__fsinfo_debug"},"4046":{"probe_name":"hdf5","function_name":"H5O__fsinfo_copy"},"4045":{"probe_name":"hdf5","function_name":"H5O__free_visit_visited"},"4044":{"probe_name":"hdf5","function_name":"H5O__free"},"4043":{"probe_name":"hdf5","function_name":"H5O__flush_msgs"},"4042":{"probe_name":"hdf5","function_name":"H5O__fill_shared_size"},"4041":{"probe_name":"hdf5","function_name":"H5O__fill_shared_post_copy_file"},"4040":{"probe_name":"hdf5","function_name":"H5O__fill_shared_link"},"4039":{"probe_name":"hdf5","function_name":"H5O__fill_shared_encode"},"4038":{"probe_name":"hdf5","function_name":"H5O__fill_shared_delete"},"4037":{"probe_name":"hdf5","function_name":"H5O__fill_shared_decode"},"4036":{"probe_name":"hdf5","function_name":"H5O__fill_shared_debug"},"4035":{"probe_name":"hdf5","function_name":"H5O__fill_shared_copy_file"},"4034":{"probe_name":"hdf5","function_name":"H5O__fill_reset"},"4033":{"probe_name":"hdf5","function_name":"H5O__fill_pre_copy_file"},"4032":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_size"},"4031":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_post_copy_file"},"4030":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_link"},"4029":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_encode"},"4028":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_delete"},"4027":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_decode"},"4026":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_debug"},"4025":{"probe_name":"hdf5","function_name":"H5O__fill_new_shared_copy_file"},"4024":{"probe_name":"hdf5","function_name":"H5O__fill_free"},"4023":{"probe_name":"hdf5","function_name":"H5O__fill_debug.constprop.0"},"4022":{"probe_name":"hdf5","function_name":"H5O__fill_copy"},"4021":{"probe_name":"hdf5","function_name":"H5O__expunge_chunks_test"},"4020":{"probe_name":"hdf5","function_name":"H5O__enable_mdc_flushes"},"4019":{"probe_name":"hdf5","function_name":"H5O__eliminate_gap"},"4018":{"probe_name":"hdf5","function_name":"H5O__efl_size"},"4017":{"probe_name":"hdf5","function_name":"H5O__efl_reset"},"4016":{"probe_name":"hdf5","function_name":"H5O__efl_encode"},"4015":{"probe_name":"hdf5","function_name":"H5O__efl_decode"},"4014":{"probe_name":"hdf5","function_name":"H5O__efl_debug"},"4013":{"probe_name":"hdf5","function_name":"H5O__efl_copy_file"},"4012":{"probe_name":"hdf5","function_name":"H5O__efl_copy"},"4011":{"probe_name":"hdf5","function_name":"H5O__dtype_size.isra.0"},"4010":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_size"},"4009":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_post_copy_file"},"4008":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_link"},"4007":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_encode"},"4006":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_delete"},"4005":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_decode"},"4004":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_debug"},"4003":{"probe_name":"hdf5","function_name":"H5O__dtype_shared_copy_file"},"4002":{"probe_name":"hdf5","function_name":"H5O__dtype_set_share"},"4001":{"probe_name":"hdf5","function_name":"H5O__dtype_reset"},"4000":{"probe_name":"hdf5","function_name":"H5O__dtype_pre_copy_file"},"3999":{"probe_name":"hdf5","function_name":"H5O__dtype_open"},"3998":{"probe_name":"hdf5","function_name":"H5O__dtype_isa"},"3997":{"probe_name":"hdf5","function_name":"H5O__dtype_get_oloc"},"3996":{"probe_name":"hdf5","function_name":"H5O__dtype_free"},"3995":{"probe_name":"hdf5","function_name":"H5O__dtype_encode_helper.cold"},"3994":{"probe_name":"hdf5","function_name":"H5O__dtype_encode_helper"},"3993":{"probe_name":"hdf5","function_name":"H5O__dtype_decode_helper"},"3992":{"probe_name":"hdf5","function_name":"H5O__dtype_debug.isra.0"},"3991":{"probe_name":"hdf5","function_name":"H5O__dtype_create"},"3990":{"probe_name":"hdf5","function_name":"H5O__dtype_copy"},"3989":{"probe_name":"hdf5","function_name":"H5O__dtype_can_share"},"3988":{"probe_name":"hdf5","function_name":"H5O__dset_open"},"3987":{"probe_name":"hdf5","function_name":"H5O__dset_isa"},"3986":{"probe_name":"hdf5","function_name":"H5O__dset_get_oloc"},"3985":{"probe_name":"hdf5","function_name":"H5O__dset_get_copy_file_udata"},"3984":{"probe_name":"hdf5","function_name":"H5O__dset_free_copy_file_udata"},"3983":{"probe_name":"hdf5","function_name":"H5O__dset_flush"},"3982":{"probe_name":"hdf5","function_name":"H5O__dset_create"},"3981":{"probe_name":"hdf5","function_name":"H5O__dset_bh_info"},"3980":{"probe_name":"hdf5","function_name":"H5O__drvinfo_size"},"3979":{"probe_name":"hdf5","function_name":"H5O__drvinfo_reset"},"3978":{"probe_name":"hdf5","function_name":"H5O__drvinfo_encode"},"3977":{"probe_name":"hdf5","function_name":"H5O__drvinfo_decode"},"3976":{"probe_name":"hdf5","function_name":"H5O__drvinfo_debug"},"3975":{"probe_name":"hdf5","function_name":"H5O__drvinfo_copy"},"3974":{"probe_name":"hdf5","function_name":"H5O__disable_mdc_flushes"},"3973":{"probe_name":"hdf5","function_name":"H5O__delete_mesg"},"3972":{"probe_name":"hdf5","function_name":"H5O__dec_rc"},"3971":{"probe_name":"hdf5","function_name":"H5O__debug_real"},"3970":{"probe_name":"hdf5","function_name":"H5O__copy_search_comm_dt_check"},"3969":{"probe_name":"hdf5","function_name":"H5O__copy_search_comm_dt_cb"},"3968":{"probe_name":"hdf5","function_name":"H5O__copy_search_comm_dt_attr_cb"},"3967":{"probe_name":"hdf5","function_name":"H5O__copy_obj_by_ref"},"3966":{"probe_name":"hdf5","function_name":"H5O__copy_header_real"},"3965":{"probe_name":"hdf5","function_name":"H5O__copy_free_comm_dt_cb"},"3964":{"probe_name":"hdf5","function_name":"H5O__copy_free_addrmap_cb"},"3963":{"probe_name":"hdf5","function_name":"H5O__copy_comm_dt_cmp"},"3962":{"probe_name":"hdf5","function_name":"H5O__copy_api_common"},"3961":{"probe_name":"hdf5","function_name":"H5O__copy"},"3960":{"probe_name":"hdf5","function_name":"H5O__cont_size"},"3959":{"probe_name":"hdf5","function_name":"H5O__cont_free"},"3958":{"probe_name":"hdf5","function_name":"H5O__cont_encode"},"3957":{"probe_name":"hdf5","function_name":"H5O__cont_delete"},"3956":{"probe_name":"hdf5","function_name":"H5O__cont_decode"},"3955":{"probe_name":"hdf5","function_name":"H5O__cont_debug"},"3954":{"probe_name":"hdf5","function_name":"H5O__condense_header"},"3953":{"probe_name":"hdf5","function_name":"H5O__chunk_update_idx"},"3952":{"probe_name":"hdf5","function_name":"H5O__chunk_unprotect"},"3951":{"probe_name":"hdf5","function_name":"H5O__chunk_serialize"},"3950":{"probe_name":"hdf5","function_name":"H5O__chunk_resize"},"3949":{"probe_name":"hdf5","function_name":"H5O__chunk_protect"},"3948":{"probe_name":"hdf5","function_name":"H5O__chunk_dest"},"3947":{"probe_name":"hdf5","function_name":"H5O__chunk_deserialize"},"3946":{"probe_name":"hdf5","function_name":"H5O__chunk_delete"},"3945":{"probe_name":"hdf5","function_name":"H5O__chunk_add"},"3944":{"probe_name":"hdf5","function_name":"H5O__check_msg_marked_test"},"3943":{"probe_name":"hdf5","function_name":"H5O__cache_verify_chksum"},"3942":{"probe_name":"hdf5","function_name":"H5O__cache_serialize"},"3941":{"probe_name":"hdf5","function_name":"H5O__cache_notify"},"3940":{"probe_name":"hdf5","function_name":"H5O__cache_image_len"},"3939":{"probe_name":"hdf5","function_name":"H5O__cache_get_initial_load_size"},"3938":{"probe_name":"hdf5","function_name":"H5O__cache_get_final_load_size"},"3937":{"probe_name":"hdf5","function_name":"H5O__cache_free_icr"},"3936":{"probe_name":"hdf5","function_name":"H5O__cache_deserialize"},"3935":{"probe_name":"hdf5","function_name":"H5O__cache_chk_verify_chksum"},"3934":{"probe_name":"hdf5","function_name":"H5O__cache_chk_serialize"},"3933":{"probe_name":"hdf5","function_name":"H5O__cache_chk_notify"},"3932":{"probe_name":"hdf5","function_name":"H5O__cache_chk_image_len"},"3931":{"probe_name":"hdf5","function_name":"H5O__cache_chk_get_initial_load_size"},"3930":{"probe_name":"hdf5","function_name":"H5O__cache_chk_free_icr"},"3929":{"probe_name":"hdf5","function_name":"H5O__cache_chk_deserialize"},"3928":{"probe_name":"hdf5","function_name":"H5O__btreek_size"},"3927":{"probe_name":"hdf5","function_name":"H5O__btreek_encode"},"3926":{"probe_name":"hdf5","function_name":"H5O__btreek_decode"},"3925":{"probe_name":"hdf5","function_name":"H5O__btreek_debug"},"3924":{"probe_name":"hdf5","function_name":"H5O__btreek_copy"},"3923":{"probe_name":"hdf5","function_name":"H5O__attr_write_cb"},"3922":{"probe_name":"hdf5","function_name":"H5O__attr_write"},"3921":{"probe_name":"hdf5","function_name":"H5O__attr_update_shared"},"3920":{"probe_name":"hdf5","function_name":"H5O__attr_to_dense_cb"},"3919":{"probe_name":"hdf5","function_name":"H5O__attr_shared_size"},"3918":{"probe_name":"hdf5","function_name":"H5O__attr_shared_post_copy_file"},"3917":{"probe_name":"hdf5","function_name":"H5O__attr_shared_link"},"3916":{"probe_name":"hdf5","function_name":"H5O__attr_shared_encode"},"3915":{"probe_name":"hdf5","function_name":"H5O__attr_shared_delete"},"3914":{"probe_name":"hdf5","function_name":"H5O__attr_shared_decode"},"3913":{"probe_name":"hdf5","function_name":"H5O__attr_shared_debug"},"3912":{"probe_name":"hdf5","function_name":"H5O__attr_shared_copy_file"},"3911":{"probe_name":"hdf5","function_name":"H5O__attr_set_crt_index"},"3910":{"probe_name":"hdf5","function_name":"H5O__attr_reset"},"3909":{"probe_name":"hdf5","function_name":"H5O__attr_rename_mod_cb"},"3908":{"probe_name":"hdf5","function_name":"H5O__attr_rename_chk_cb"},"3907":{"probe_name":"hdf5","function_name":"H5O__attr_rename"},"3906":{"probe_name":"hdf5","function_name":"H5O__attr_remove_update"},"3905":{"probe_name":"hdf5","function_name":"H5O__attr_remove_cb"},"3904":{"probe_name":"hdf5","function_name":"H5O__attr_remove_by_idx"},"3903":{"probe_name":"hdf5","function_name":"H5O__attr_remove"},"3902":{"probe_name":"hdf5","function_name":"H5O__attr_pre_copy_file"},"3901":{"probe_name":"hdf5","function_name":"H5O__attr_open_cb"},"3900":{"probe_name":"hdf5","function_name":"H5O__attr_open_by_name"},"3899":{"probe_name":"hdf5","function_name":"H5O__attr_open_by_idx_cb"},"3898":{"probe_name":"hdf5","function_name":"H5O__attr_open_by_idx"},"3897":{"probe_name":"hdf5","function_name":"H5O__attr_link"},"3896":{"probe_name":"hdf5","function_name":"H5O__attr_iterate"},"3895":{"probe_name":"hdf5","function_name":"H5O__attr_get_crt_index"},"3894":{"probe_name":"hdf5","function_name":"H5O__attr_free"},"3893":{"probe_name":"hdf5","function_name":"H5O__attr_find_opened_attr"},"3892":{"probe_name":"hdf5","function_name":"H5O__attr_exists_cb"},"3891":{"probe_name":"hdf5","function_name":"H5O__attr_exists"},"3890":{"probe_name":"hdf5","function_name":"H5O__attr_dense_info_test"},"3889":{"probe_name":"hdf5","function_name":"H5O__attr_delete"},"3888":{"probe_name":"hdf5","function_name":"H5O__attr_create"},"3887":{"probe_name":"hdf5","function_name":"H5O__attr_count_real"},"3886":{"probe_name":"hdf5","function_name":"H5O__attr_copy"},"3885":{"probe_name":"hdf5","function_name":"H5O__attr_bh_info"},"3884":{"probe_name":"hdf5","function_name":"H5O__are_mdc_flushes_disabled"},"3883":{"probe_name":"hdf5","function_name":"H5O__alloc_null"},"3882":{"probe_name":"hdf5","function_name":"H5O__alloc_msgs"},"3881":{"probe_name":"hdf5","function_name":"H5O__alloc_find_best_null"},"3880":{"probe_name":"hdf5","function_name":"H5O__alloc_chunk"},"3879":{"probe_name":"hdf5","function_name":"H5O__alloc"},"3878":{"probe_name":"hdf5","function_name":"H5O__ainfo_size"},"3877":{"probe_name":"hdf5","function_name":"H5O__ainfo_pre_copy_file"},"3876":{"probe_name":"hdf5","function_name":"H5O__ainfo_post_copy_file"},"3875":{"probe_name":"hdf5","function_name":"H5O__ainfo_free"},"3874":{"probe_name":"hdf5","function_name":"H5O__ainfo_encode"},"3873":{"probe_name":"hdf5","function_name":"H5O__ainfo_delete"},"3872":{"probe_name":"hdf5","function_name":"H5O__ainfo_decode"},"3871":{"probe_name":"hdf5","function_name":"H5O__ainfo_debug"},"3870":{"probe_name":"hdf5","function_name":"H5O__ainfo_copy_file"},"3869":{"probe_name":"hdf5","function_name":"H5O__ainfo_copy"},"3868":{"probe_name":"hdf5","function_name":"H5O__add_gap.constprop.0"},"3867":{"probe_name":"hdf5","function_name":"H5M_top_term_package"},"3866":{"probe_name":"hdf5","function_name":"H5M_term_package"},"3865":{"probe_name":"hdf5","function_name":"H5M_init"},"3864":{"probe_name":"hdf5","function_name":"H5M__close_cb"},"3863":{"probe_name":"hdf5","function_name":"H5MM_xstrdup"},"3862":{"probe_name":"hdf5","function_name":"H5MM_xfree_const"},"3861":{"probe_name":"hdf5","function_name":"H5MM_xfree"},"3860":{"probe_name":"hdf5","function_name":"H5MM_strndup"},"3859":{"probe_name":"hdf5","function_name":"H5MM_strdup"},"3858":{"probe_name":"hdf5","function_name":"H5MM_realloc"},"3857":{"probe_name":"hdf5","function_name":"H5MF_xfree"},"3856":{"probe_name":"hdf5","function_name":"H5MF_try_shrink"},"3855":{"probe_name":"hdf5","function_name":"H5MF_try_extend"},"3854":{"probe_name":"hdf5","function_name":"H5MF_try_close"},"3853":{"probe_name":"hdf5","function_name":"H5MF_settle_raw_data_fsm"},"3852":{"probe_name":"hdf5","function_name":"H5MF_settle_meta_data_fsm"},"3851":{"probe_name":"hdf5","function_name":"H5MF_sects_debug"},"3850":{"probe_name":"hdf5","function_name":"H5MF_init_merge_flags"},"3849":{"probe_name":"hdf5","function_name":"H5MF_get_freespace"},"3848":{"probe_name":"hdf5","function_name":"H5MF_get_free_sections"},"3847":{"probe_name":"hdf5","function_name":"H5MF_free_aggrs"},"3846":{"probe_name":"hdf5","function_name":"H5MF_close"},"3845":{"probe_name":"hdf5","function_name":"H5MF_alloc_tmp"},"3844":{"probe_name":"hdf5","function_name":"H5MF_alloc"},"3843":{"probe_name":"hdf5","function_name":"H5MF_aggr_vfd_alloc"},"3842":{"probe_name":"hdf5","function_name":"H5MF__start_fstype"},"3841":{"probe_name":"hdf5","function_name":"H5MF__sects_debug_cb"},"3840":{"probe_name":"hdf5","function_name":"H5MF__sects_cb"},"3839":{"probe_name":"hdf5","function_name":"H5MF__sect_valid"},"3838":{"probe_name":"hdf5","function_name":"H5MF__sect_split"},"3837":{"probe_name":"hdf5","function_name":"H5MF__sect_small_merge"},"3836":{"probe_name":"hdf5","function_name":"H5MF__sect_small_can_merge"},"3835":{"probe_name":"hdf5","function_name":"H5MF__sect_small_add"},"3834":{"probe_name":"hdf5","function_name":"H5MF__sect_simple_shrink"},"3833":{"probe_name":"hdf5","function_name":"H5MF__sect_simple_merge"},"3832":{"probe_name":"hdf5","function_name":"H5MF__sect_simple_can_shrink"},"3831":{"probe_name":"hdf5","function_name":"H5MF__sect_simple_can_merge"},"3830":{"probe_name":"hdf5","function_name":"H5MF__sect_new"},"3829":{"probe_name":"hdf5","function_name":"H5MF__sect_large_shrink"},"3828":{"probe_name":"hdf5","function_name":"H5MF__sect_large_merge"},"3827":{"probe_name":"hdf5","function_name":"H5MF__sect_large_can_shrink"},"3826":{"probe_name":"hdf5","function_name":"H5MF__sect_large_can_merge"},"3825":{"probe_name":"hdf5","function_name":"H5MF__sect_free"},"3824":{"probe_name":"hdf5","function_name":"H5MF__sect_deserialize"},"3823":{"probe_name":"hdf5","function_name":"H5MF__open_fstype"},"3822":{"probe_name":"hdf5","function_name":"H5MF__fsm_type_is_self_referential"},"3821":{"probe_name":"hdf5","function_name":"H5MF__fsm_is_self_referential"},"3820":{"probe_name":"hdf5","function_name":"H5MF__find_sect"},"3819":{"probe_name":"hdf5","function_name":"H5MF__close_shrink_eoa"},"3818":{"probe_name":"hdf5","function_name":"H5MF__close_delete_fstype"},"3817":{"probe_name":"hdf5","function_name":"H5MF__alloc_to_fs_type"},"3816":{"probe_name":"hdf5","function_name":"H5MF__aggrs_try_shrink_eoa"},"3815":{"probe_name":"hdf5","function_name":"H5MF__aggr_try_extend"},"3814":{"probe_name":"hdf5","function_name":"H5MF__aggr_query"},"3813":{"probe_name":"hdf5","function_name":"H5MF__aggr_can_absorb"},"3812":{"probe_name":"hdf5","function_name":"H5MF__aggr_alloc"},"3811":{"probe_name":"hdf5","function_name":"H5MF__aggr_absorb"},"3810":{"probe_name":"hdf5","function_name":"H5MF__add_sect"},"3809":{"probe_name":"hdf5","function_name":"H5Lvisit_by_name2"},"3808":{"probe_name":"hdf5","function_name":"H5Lvisit_by_name1"},"3807":{"probe_name":"hdf5","function_name":"H5Lvisit2"},"3806":{"probe_name":"hdf5","function_name":"H5Lvisit1"},"3805":{"probe_name":"hdf5","function_name":"H5Lunregister"},"3804":{"probe_name":"hdf5","function_name":"H5Lunpack_elink_val"},"3803":{"probe_name":"hdf5","function_name":"H5Lregister"},"3802":{"probe_name":"hdf5","function_name":"H5Lmove"},"3801":{"probe_name":"hdf5","function_name":"H5Literate_by_name2"},"3800":{"probe_name":"hdf5","function_name":"H5Literate_by_name1"},"3799":{"probe_name":"hdf5","function_name":"H5Literate_async"},"3798":{"probe_name":"hdf5","function_name":"H5Literate2"},"3797":{"probe_name":"hdf5","function_name":"H5Literate1"},"3796":{"probe_name":"hdf5","function_name":"H5Lis_registered"},"3795":{"probe_name":"hdf5","function_name":"H5Lget_val_by_idx"},"3794":{"probe_name":"hdf5","function_name":"H5Lget_val"},"3793":{"probe_name":"hdf5","function_name":"H5Lget_name_by_idx"},"3792":{"probe_name":"hdf5","function_name":"H5Lget_info_by_idx2"},"3791":{"probe_name":"hdf5","function_name":"H5Lget_info_by_idx1"},"3790":{"probe_name":"hdf5","function_name":"H5Lget_info2"},"3789":{"probe_name":"hdf5","function_name":"H5Lget_info1"},"3788":{"probe_name":"hdf5","function_name":"H5Lexists_async"},"3787":{"probe_name":"hdf5","function_name":"H5Lexists"},"3786":{"probe_name":"hdf5","function_name":"H5Ldelete_by_idx_async"},"3785":{"probe_name":"hdf5","function_name":"H5Ldelete_by_idx"},"3784":{"probe_name":"hdf5","function_name":"H5Ldelete_async"},"3783":{"probe_name":"hdf5","function_name":"H5Ldelete"},"3782":{"probe_name":"hdf5","function_name":"H5Lcreate_ud"},"3781":{"probe_name":"hdf5","function_name":"H5Lcreate_soft_async"},"3780":{"probe_name":"hdf5","function_name":"H5Lcreate_soft"},"3779":{"probe_name":"hdf5","function_name":"H5Lcreate_hard_async"},"3778":{"probe_name":"hdf5","function_name":"H5Lcreate_hard"},"3777":{"probe_name":"hdf5","function_name":"H5Lcreate_external"},"3776":{"probe_name":"hdf5","function_name":"H5Lcopy"},"3775":{"probe_name":"hdf5","function_name":"H5L_unregister"},"3774":{"probe_name":"hdf5","function_name":"H5L_term_package"},"3773":{"probe_name":"hdf5","function_name":"H5L_register_external"},"3772":{"probe_name":"hdf5","function_name":"H5L_register"},"3771":{"probe_name":"hdf5","function_name":"H5L_link_object"},"3770":{"probe_name":"hdf5","function_name":"H5L_link"},"3769":{"probe_name":"hdf5","function_name":"H5L_iterate"},"3768":{"probe_name":"hdf5","function_name":"H5L_is_registered"},"3767":{"probe_name":"hdf5","function_name":"H5L_init"},"3766":{"probe_name":"hdf5","function_name":"H5L_get_ocrt_info"},"3765":{"probe_name":"hdf5","function_name":"H5L_get_info"},"3764":{"probe_name":"hdf5","function_name":"H5L_find_class"},"3763":{"probe_name":"hdf5","function_name":"H5L_exists_tolerant"},"3762":{"probe_name":"hdf5","function_name":"H5L__move_dest_cb"},"3761":{"probe_name":"hdf5","function_name":"H5L__move_cb"},"3760":{"probe_name":"hdf5","function_name":"H5L__move"},"3759":{"probe_name":"hdf5","function_name":"H5L__link_copy_file"},"3758":{"probe_name":"hdf5","function_name":"H5L__link_cb"},"3757":{"probe_name":"hdf5","function_name":"H5L__iterate2_shim"},"3756":{"probe_name":"hdf5","function_name":"H5L__get_val_cb"},"3755":{"probe_name":"hdf5","function_name":"H5L__get_val_by_idx_cb"},"3754":{"probe_name":"hdf5","function_name":"H5L__get_val_by_idx"},"3753":{"probe_name":"hdf5","function_name":"H5L__get_val"},"3752":{"probe_name":"hdf5","function_name":"H5L__get_name_by_idx_cb"},"3751":{"probe_name":"hdf5","function_name":"H5L__get_name_by_idx"},"3750":{"probe_name":"hdf5","function_name":"H5L__get_info_cb"},"3749":{"probe_name":"hdf5","function_name":"H5L__get_info_by_idx_cb"},"3748":{"probe_name":"hdf5","function_name":"H5L__get_info_by_idx"},"3747":{"probe_name":"hdf5","function_name":"H5L__extern_traverse"},"3746":{"probe_name":"hdf5","function_name":"H5L__extern_query"},"3745":{"probe_name":"hdf5","function_name":"H5L__exists_inter_cb"},"3744":{"probe_name":"hdf5","function_name":"H5L__exists_final_cb"},"3743":{"probe_name":"hdf5","function_name":"H5L__exists"},"3742":{"probe_name":"hdf5","function_name":"H5L__delete_cb"},"3741":{"probe_name":"hdf5","function_name":"H5L__delete_by_idx_cb"},"3740":{"probe_name":"hdf5","function_name":"H5L__delete_by_idx"},"3739":{"probe_name":"hdf5","function_name":"H5L__delete"},"3738":{"probe_name":"hdf5","function_name":"H5L__create_ud"},"3737":{"probe_name":"hdf5","function_name":"H5L__create_soft_api_common"},"3736":{"probe_name":"hdf5","function_name":"H5L__create_soft"},"3735":{"probe_name":"hdf5","function_name":"H5L__create_real"},"3734":{"probe_name":"hdf5","function_name":"H5L__create_hard_api_common"},"3733":{"probe_name":"hdf5","function_name":"H5L__create_hard"},"3732":{"probe_name":"hdf5","function_name":"H5Itype_exists"},"3731":{"probe_name":"hdf5","function_name":"H5Isearch"},"3730":{"probe_name":"hdf5","function_name":"H5Iremove_verify"},"3729":{"probe_name":"hdf5","function_name":"H5Iregister_type"},"3728":{"probe_name":"hdf5","function_name":"H5Iregister_future"},"3727":{"probe_name":"hdf5","function_name":"H5Iregister"},"3726":{"probe_name":"hdf5","function_name":"H5Iobject_verify"},"3725":{"probe_name":"hdf5","function_name":"H5Inmembers"},"3724":{"probe_name":"hdf5","function_name":"H5Iiterate"},"3723":{"probe_name":"hdf5","function_name":"H5Iis_valid"},"3722":{"probe_name":"hdf5","function_name":"H5Iinc_type_ref"},"3721":{"probe_name":"hdf5","function_name":"H5Iinc_ref"},"3720":{"probe_name":"hdf5","function_name":"H5Iget_type_ref"},"3719":{"probe_name":"hdf5","function_name":"H5Iget_type"},"3718":{"probe_name":"hdf5","function_name":"H5Iget_ref"},"3717":{"probe_name":"hdf5","function_name":"H5Iget_name"},"3716":{"probe_name":"hdf5","function_name":"H5Iget_file_id"},"3715":{"probe_name":"hdf5","function_name":"H5Idestroy_type"},"3714":{"probe_name":"hdf5","function_name":"H5Idec_type_ref"},"3713":{"probe_name":"hdf5","function_name":"H5Idec_ref"},"3712":{"probe_name":"hdf5","function_name":"H5Iclear_type"},"3711":{"probe_name":"hdf5","function_name":"H5I_term_package"},"3710":{"probe_name":"hdf5","function_name":"H5I_subst"},"3709":{"probe_name":"hdf5","function_name":"H5I_remove"},"3708":{"probe_name":"hdf5","function_name":"H5I_register_using_existing_id"},"3707":{"probe_name":"hdf5","function_name":"H5I_register_type"},"3706":{"probe_name":"hdf5","function_name":"H5I_register"},"3705":{"probe_name":"hdf5","function_name":"H5I_object_verify"},"3704":{"probe_name":"hdf5","function_name":"H5I_object"},"3703":{"probe_name":"hdf5","function_name":"H5I_nmembers"},"3702":{"probe_name":"hdf5","function_name":"H5I_iterate"},"3701":{"probe_name":"hdf5","function_name":"H5I_is_file_object"},"3700":{"probe_name":"hdf5","function_name":"H5I_inc_ref"},"3699":{"probe_name":"hdf5","function_name":"H5I_get_type"},"3698":{"probe_name":"hdf5","function_name":"H5I_get_ref"},"3697":{"probe_name":"hdf5","function_name":"H5I_find_id"},"3696":{"probe_name":"hdf5","function_name":"H5I_dump_ids_for_type"},"3695":{"probe_name":"hdf5","function_name":"H5I_dec_type_ref"},"3694":{"probe_name":"hdf5","function_name":"H5I_dec_ref"},"3693":{"probe_name":"hdf5","function_name":"H5I_dec_app_ref_async"},"3692":{"probe_name":"hdf5","function_name":"H5I_dec_app_ref_always_close_async"},"3691":{"probe_name":"hdf5","function_name":"H5I_dec_app_ref_always_close"},"3690":{"probe_name":"hdf5","function_name":"H5I_dec_app_ref"},"3689":{"probe_name":"hdf5","function_name":"H5I_clear_type"},"3688":{"probe_name":"hdf5","function_name":"H5I__search_cb"},"3687":{"probe_name":"hdf5","function_name":"H5I__remove_verify"},"3686":{"probe_name":"hdf5","function_name":"H5I__remove_common"},"3685":{"probe_name":"hdf5","function_name":"H5I__register"},"3684":{"probe_name":"hdf5","function_name":"H5I__iterate_pub_cb"},"3683":{"probe_name":"hdf5","function_name":"H5I__inc_type_ref"},"3682":{"probe_name":"hdf5","function_name":"H5I__get_type_ref"},"3681":{"probe_name":"hdf5","function_name":"H5I__get_name_test"},"3680":{"probe_name":"hdf5","function_name":"H5I__find_id"},"3679":{"probe_name":"hdf5","function_name":"H5I__destroy_type"},"3678":{"probe_name":"hdf5","function_name":"H5HL_unprotect"},"3677":{"probe_name":"hdf5","function_name":"H5HL_remove"},"3676":{"probe_name":"hdf5","function_name":"H5HL_protect"},"3675":{"probe_name":"hdf5","function_name":"H5HL_offset_into"},"3674":{"probe_name":"hdf5","function_name":"H5HL_insert"},"3673":{"probe_name":"hdf5","function_name":"H5HL_heapsize"},"3672":{"probe_name":"hdf5","function_name":"H5HL_heap_get_size"},"3671":{"probe_name":"hdf5","function_name":"H5HL_get_size"},"3670":{"probe_name":"hdf5","function_name":"H5HL_delete"},"3669":{"probe_name":"hdf5","function_name":"H5HL_debug"},"3668":{"probe_name":"hdf5","function_name":"H5HL_create"},"3667":{"probe_name":"hdf5","function_name":"H5HL__prfx_new"},"3666":{"probe_name":"hdf5","function_name":"H5HL__prfx_dest"},"3665":{"probe_name":"hdf5","function_name":"H5HL__new"},"3664":{"probe_name":"hdf5","function_name":"H5HL__minimize_heap_space"},"3663":{"probe_name":"hdf5","function_name":"H5HL__inc_rc"},"3662":{"probe_name":"hdf5","function_name":"H5HL__hdr_deserialize"},"3661":{"probe_name":"hdf5","function_name":"H5HL__fl_serialize"},"3660":{"probe_name":"hdf5","function_name":"H5HL__fl_deserialize"},"3659":{"probe_name":"hdf5","function_name":"H5HL__dest"},"3658":{"probe_name":"hdf5","function_name":"H5HL__dec_rc"},"3657":{"probe_name":"hdf5","function_name":"H5HL__dblk_realloc"},"3656":{"probe_name":"hdf5","function_name":"H5HL__dblk_new"},"3655":{"probe_name":"hdf5","function_name":"H5HL__dblk_dest"},"3654":{"probe_name":"hdf5","function_name":"H5HL__cache_prefix_serialize"},"3653":{"probe_name":"hdf5","function_name":"H5HL__cache_prefix_image_len"},"3652":{"probe_name":"hdf5","function_name":"H5HL__cache_prefix_get_initial_load_size"},"3651":{"probe_name":"hdf5","function_name":"H5HL__cache_prefix_get_final_load_size"},"3650":{"probe_name":"hdf5","function_name":"H5HL__cache_prefix_free_icr"},"3649":{"probe_name":"hdf5","function_name":"H5HL__cache_prefix_deserialize"},"3648":{"probe_name":"hdf5","function_name":"H5HL__cache_datablock_serialize"},"3647":{"probe_name":"hdf5","function_name":"H5HL__cache_datablock_notify"},"3646":{"probe_name":"hdf5","function_name":"H5HL__cache_datablock_image_len"},"3645":{"probe_name":"hdf5","function_name":"H5HL__cache_datablock_get_initial_load_size"},"3644":{"probe_name":"hdf5","function_name":"H5HL__cache_datablock_free_icr"},"3643":{"probe_name":"hdf5","function_name":"H5HL__cache_datablock_deserialize"},"3642":{"probe_name":"hdf5","function_name":"H5HG_remove"},"3641":{"probe_name":"hdf5","function_name":"H5HG_read"},"3640":{"probe_name":"hdf5","function_name":"H5HG_link"},"3639":{"probe_name":"hdf5","function_name":"H5HG_insert"},"3638":{"probe_name":"hdf5","function_name":"H5HG_get_size"},"3637":{"probe_name":"hdf5","function_name":"H5HG_get_obj_size"},"3636":{"probe_name":"hdf5","function_name":"H5HG_get_free_size"},"3635":{"probe_name":"hdf5","function_name":"H5HG_get_addr"},"3634":{"probe_name":"hdf5","function_name":"H5HG_extend"},"3633":{"probe_name":"hdf5","function_name":"H5HG_debug"},"3632":{"probe_name":"hdf5","function_name":"H5HG__protect"},"3631":{"probe_name":"hdf5","function_name":"H5HG__free"},"3630":{"probe_name":"hdf5","function_name":"H5HG__cache_heap_serialize"},"3629":{"probe_name":"hdf5","function_name":"H5HG__cache_heap_image_len"},"3628":{"probe_name":"hdf5","function_name":"H5HG__cache_heap_get_initial_load_size"},"3627":{"probe_name":"hdf5","function_name":"H5HG__cache_heap_get_final_load_size"},"3626":{"probe_name":"hdf5","function_name":"H5HG__cache_heap_free_icr"},"3625":{"probe_name":"hdf5","function_name":"H5HG__cache_heap_deserialize"},"3624":{"probe_name":"hdf5","function_name":"H5HF_write"},"3623":{"probe_name":"hdf5","function_name":"H5HF_stat_info"},"3622":{"probe_name":"hdf5","function_name":"H5HF_size"},"3621":{"probe_name":"hdf5","function_name":"H5HF_sects_debug_cb"},"3620":{"probe_name":"hdf5","function_name":"H5HF_sects_debug"},"3619":{"probe_name":"hdf5","function_name":"H5HF_remove"},"3618":{"probe_name":"hdf5","function_name":"H5HF_read"},"3617":{"probe_name":"hdf5","function_name":"H5HF_open"},"3616":{"probe_name":"hdf5","function_name":"H5HF_op"},"3615":{"probe_name":"hdf5","function_name":"H5HF_insert"},"3614":{"probe_name":"hdf5","function_name":"H5HF_id_print"},"3613":{"probe_name":"hdf5","function_name":"H5HF_iblock_print.localalias"},"3612":{"probe_name":"hdf5","function_name":"H5HF_iblock_print"},"3611":{"probe_name":"hdf5","function_name":"H5HF_iblock_debug"},"3610":{"probe_name":"hdf5","function_name":"H5HF_hdr_print"},"3609":{"probe_name":"hdf5","function_name":"H5HF_hdr_debug"},"3608":{"probe_name":"hdf5","function_name":"H5HF_get_tiny_info_test"},"3607":{"probe_name":"hdf5","function_name":"H5HF_get_obj_off"},"3606":{"probe_name":"hdf5","function_name":"H5HF_get_obj_len"},"3605":{"probe_name":"hdf5","function_name":"H5HF_get_max_root_rows"},"3604":{"probe_name":"hdf5","function_name":"H5HF_get_id_type_test"},"3603":{"probe_name":"hdf5","function_name":"H5HF_get_id_off_test"},"3602":{"probe_name":"hdf5","function_name":"H5HF_get_id_len"},"3601":{"probe_name":"hdf5","function_name":"H5HF_get_iblock_max_drows_test"},"3600":{"probe_name":"hdf5","function_name":"H5HF_get_huge_info_test"},"3599":{"probe_name":"hdf5","function_name":"H5HF_get_heap_addr"},"3598":{"probe_name":"hdf5","function_name":"H5HF_get_dtable_width_test"},"3597":{"probe_name":"hdf5","function_name":"H5HF_get_dtable_max_drows_test"},"3596":{"probe_name":"hdf5","function_name":"H5HF_get_dblock_size_test"},"3595":{"probe_name":"hdf5","function_name":"H5HF_get_dblock_free_test"},"3594":{"probe_name":"hdf5","function_name":"H5HF_get_cparam_test"},"3593":{"probe_name":"hdf5","function_name":"H5HF_delete"},"3592":{"probe_name":"hdf5","function_name":"H5HF_dblock_debug_cb"},"3591":{"probe_name":"hdf5","function_name":"H5HF_dblock_debug"},"3590":{"probe_name":"hdf5","function_name":"H5HF_create"},"3589":{"probe_name":"hdf5","function_name":"H5HF_cmp_cparam_test"},"3588":{"probe_name":"hdf5","function_name":"H5HF_close"},"3587":{"probe_name":"hdf5","function_name":"H5HF__tiny_remove"},"3586":{"probe_name":"hdf5","function_name":"H5HF__tiny_read"},"3585":{"probe_name":"hdf5","function_name":"H5HF__tiny_op"},"3584":{"probe_name":"hdf5","function_name":"H5HF__tiny_insert"},"3583":{"probe_name":"hdf5","function_name":"H5HF__tiny_init"},"3582":{"probe_name":"hdf5","function_name":"H5HF__tiny_get_obj_len"},"3581":{"probe_name":"hdf5","function_name":"H5HF__space_start"},"3580":{"probe_name":"hdf5","function_name":"H5HF__space_size"},"3579":{"probe_name":"hdf5","function_name":"H5HF__space_sect_change_class"},"3578":{"probe_name":"hdf5","function_name":"H5HF__space_revert_root_cb"},"3577":{"probe_name":"hdf5","function_name":"H5HF__space_revert_root"},"3576":{"probe_name":"hdf5","function_name":"H5HF__space_remove"},"3575":{"probe_name":"hdf5","function_name":"H5HF__space_find"},"3574":{"probe_name":"hdf5","function_name":"H5HF__space_delete"},"3573":{"probe_name":"hdf5","function_name":"H5HF__space_create_root_cb"},"3572":{"probe_name":"hdf5","function_name":"H5HF__space_create_root"},"3571":{"probe_name":"hdf5","function_name":"H5HF__space_close"},"3570":{"probe_name":"hdf5","function_name":"H5HF__space_add"},"3569":{"probe_name":"hdf5","function_name":"H5HF__sect_single_valid"},"3568":{"probe_name":"hdf5","function_name":"H5HF__sect_single_shrink"},"3567":{"probe_name":"hdf5","function_name":"H5HF__sect_single_revive"},"3566":{"probe_name":"hdf5","function_name":"H5HF__sect_single_reduce"},"3565":{"probe_name":"hdf5","function_name":"H5HF__sect_single_new"},"3564":{"probe_name":"hdf5","function_name":"H5HF__sect_single_merge"},"3563":{"probe_name":"hdf5","function_name":"H5HF__sect_single_full_dblock"},"3562":{"probe_name":"hdf5","function_name":"H5HF__sect_single_free"},"3561":{"probe_name":"hdf5","function_name":"H5HF__sect_single_deserialize"},"3560":{"probe_name":"hdf5","function_name":"H5HF__sect_single_dblock_info"},"3559":{"probe_name":"hdf5","function_name":"H5HF__sect_single_can_shrink"},"3558":{"probe_name":"hdf5","function_name":"H5HF__sect_single_can_merge"},"3557":{"probe_name":"hdf5","function_name":"H5HF__sect_single_add"},"3556":{"probe_name":"hdf5","function_name":"H5HF__sect_row_valid"},"3555":{"probe_name":"hdf5","function_name":"H5HF__sect_row_term_cls"},"3554":{"probe_name":"hdf5","function_name":"H5HF__sect_row_shrink"},"3553":{"probe_name":"hdf5","function_name":"H5HF__sect_row_serialize"},"3552":{"probe_name":"hdf5","function_name":"H5HF__sect_row_revive"},"3551":{"probe_name":"hdf5","function_name":"H5HF__sect_row_reduce"},"3550":{"probe_name":"hdf5","function_name":"H5HF__sect_row_merge"},"3549":{"probe_name":"hdf5","function_name":"H5HF__sect_row_init_cls"},"3548":{"probe_name":"hdf5","function_name":"H5HF__sect_row_get_iblock"},"3547":{"probe_name":"hdf5","function_name":"H5HF__sect_row_free"},"3546":{"probe_name":"hdf5","function_name":"H5HF__sect_row_first.part.0"},"3545":{"probe_name":"hdf5","function_name":"H5HF__sect_row_deserialize"},"3544":{"probe_name":"hdf5","function_name":"H5HF__sect_row_debug"},"3543":{"probe_name":"hdf5","function_name":"H5HF__sect_row_can_shrink"},"3542":{"probe_name":"hdf5","function_name":"H5HF__sect_row_can_merge"},"3541":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_valid.isra.0"},"3540":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_term_cls"},"3539":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_shrink"},"3538":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_serialize"},"3537":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_revive"},"3536":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_reduce"},"3535":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_new"},"3534":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_init_rows"},"3533":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_init_cls"},"3532":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_free"},"3531":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_first"},"3530":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_decr"},"3529":{"probe_name":"hdf5","function_name":"H5HF__sect_indirect_add"},"3528":{"probe_name":"hdf5","function_name":"H5HF__op_write"},"3527":{"probe_name":"hdf5","function_name":"H5HF__op_read"},"3526":{"probe_name":"hdf5","function_name":"H5HF__man_write"},"3525":{"probe_name":"hdf5","function_name":"H5HF__man_remove"},"3524":{"probe_name":"hdf5","function_name":"H5HF__man_read"},"3523":{"probe_name":"hdf5","function_name":"H5HF__man_op_real"},"3522":{"probe_name":"hdf5","function_name":"H5HF__man_op"},"3521":{"probe_name":"hdf5","function_name":"H5HF__man_iter_up"},"3520":{"probe_name":"hdf5","function_name":"H5HF__man_iter_start_offset"},"3519":{"probe_name":"hdf5","function_name":"H5HF__man_iter_start_entry"},"3518":{"probe_name":"hdf5","function_name":"H5HF__man_iter_set_entry"},"3517":{"probe_name":"hdf5","function_name":"H5HF__man_iter_reset"},"3516":{"probe_name":"hdf5","function_name":"H5HF__man_iter_ready"},"3515":{"probe_name":"hdf5","function_name":"H5HF__man_iter_next"},"3514":{"probe_name":"hdf5","function_name":"H5HF__man_iter_init"},"3513":{"probe_name":"hdf5","function_name":"H5HF__man_iter_down"},"3512":{"probe_name":"hdf5","function_name":"H5HF__man_iter_curr"},"3511":{"probe_name":"hdf5","function_name":"H5HF__man_insert"},"3510":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_unprotect"},"3509":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_size.localalias"},"3508":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_size"},"3507":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_root_double"},"3506":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_root_create"},"3505":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_protect"},"3504":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_parent_info"},"3503":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_entry_addr"},"3502":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_detach.localalias"},"3501":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_detach"},"3500":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_dest"},"3499":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_delete.localalias"},"3498":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_delete"},"3497":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_create"},"3496":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_attach"},"3495":{"probe_name":"hdf5","function_name":"H5HF__man_iblock_alloc_row"},"3494":{"probe_name":"hdf5","function_name":"H5HF__man_get_obj_off"},"3493":{"probe_name":"hdf5","function_name":"H5HF__man_get_obj_len"},"3492":{"probe_name":"hdf5","function_name":"H5HF__man_dblock_protect"},"3491":{"probe_name":"hdf5","function_name":"H5HF__man_dblock_new"},"3490":{"probe_name":"hdf5","function_name":"H5HF__man_dblock_locate"},"3489":{"probe_name":"hdf5","function_name":"H5HF__man_dblock_destroy"},"3488":{"probe_name":"hdf5","function_name":"H5HF__man_dblock_dest"},"3487":{"probe_name":"hdf5","function_name":"H5HF__man_dblock_delete"},"3486":{"probe_name":"hdf5","function_name":"H5HF__man_dblock_create"},"3485":{"probe_name":"hdf5","function_name":"H5HF__iblock_incr"},"3484":{"probe_name":"hdf5","function_name":"H5HF__iblock_dirty"},"3483":{"probe_name":"hdf5","function_name":"H5HF__iblock_decr"},"3482":{"probe_name":"hdf5","function_name":"H5HF__huge_write"},"3481":{"probe_name":"hdf5","function_name":"H5HF__huge_term"},"3480":{"probe_name":"hdf5","function_name":"H5HF__huge_remove"},"3479":{"probe_name":"hdf5","function_name":"H5HF__huge_read"},"3478":{"probe_name":"hdf5","function_name":"H5HF__huge_op_real"},"3477":{"probe_name":"hdf5","function_name":"H5HF__huge_op"},"3476":{"probe_name":"hdf5","function_name":"H5HF__huge_insert"},"3475":{"probe_name":"hdf5","function_name":"H5HF__huge_init"},"3474":{"probe_name":"hdf5","function_name":"H5HF__huge_get_obj_off"},"3473":{"probe_name":"hdf5","function_name":"H5HF__huge_get_obj_len"},"3472":{"probe_name":"hdf5","function_name":"H5HF__huge_delete"},"3471":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_indir_store"},"3470":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_indir_remove"},"3469":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_indir_found"},"3468":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_indir_encode"},"3467":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_indir_decode"},"3466":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_indir_debug"},"3465":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_indir_compare"},"3464":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_indir_store"},"3463":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_indir_remove"},"3462":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_indir_found"},"3461":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_indir_encode"},"3460":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_indir_decode"},"3459":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_indir_debug"},"3458":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_indir_compare"},"3457":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_dir_store"},"3456":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_dir_remove"},"3455":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_dir_found"},"3454":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_dir_encode"},"3453":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_dir_decode"},"3452":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_dir_debug"},"3451":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_filt_dir_compare"},"3450":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_dst_context"},"3449":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_dir_store"},"3448":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_dir_remove"},"3447":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_dir_encode"},"3446":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_dir_decode"},"3445":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_dir_debug"},"3444":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_dir_compare"},"3443":{"probe_name":"hdf5","function_name":"H5HF__huge_bt2_crt_context"},"3442":{"probe_name":"hdf5","function_name":"H5HF__hdr_update_iter"},"3441":{"probe_name":"hdf5","function_name":"H5HF__hdr_start_iter"},"3440":{"probe_name":"hdf5","function_name":"H5HF__hdr_skip_blocks"},"3439":{"probe_name":"hdf5","function_name":"H5HF__hdr_reverse_iter"},"3438":{"probe_name":"hdf5","function_name":"H5HF__hdr_reset_iter"},"3437":{"probe_name":"hdf5","function_name":"H5HF__hdr_protect"},"3436":{"probe_name":"hdf5","function_name":"H5HF__hdr_incr"},"3435":{"probe_name":"hdf5","function_name":"H5HF__hdr_inc_iter"},"3434":{"probe_name":"hdf5","function_name":"H5HF__hdr_inc_alloc"},"3433":{"probe_name":"hdf5","function_name":"H5HF__hdr_fuse_incr"},"3432":{"probe_name":"hdf5","function_name":"H5HF__hdr_fuse_decr"},"3431":{"probe_name":"hdf5","function_name":"H5HF__hdr_free"},"3430":{"probe_name":"hdf5","function_name":"H5HF__hdr_finish_init_phase2"},"3429":{"probe_name":"hdf5","function_name":"H5HF__hdr_finish_init_phase1"},"3428":{"probe_name":"hdf5","function_name":"H5HF__hdr_finish_init"},"3427":{"probe_name":"hdf5","function_name":"H5HF__hdr_empty"},"3426":{"probe_name":"hdf5","function_name":"H5HF__hdr_dirty"},"3425":{"probe_name":"hdf5","function_name":"H5HF__hdr_delete"},"3424":{"probe_name":"hdf5","function_name":"H5HF__hdr_decr"},"3423":{"probe_name":"hdf5","function_name":"H5HF__hdr_create"},"3422":{"probe_name":"hdf5","function_name":"H5HF__hdr_alloc"},"3421":{"probe_name":"hdf5","function_name":"H5HF__hdr_adjust_heap"},"3420":{"probe_name":"hdf5","function_name":"H5HF__hdr_adj_free"},"3419":{"probe_name":"hdf5","function_name":"H5HF__dtable_span_size"},"3418":{"probe_name":"hdf5","function_name":"H5HF__dtable_size_to_rows"},"3417":{"probe_name":"hdf5","function_name":"H5HF__dtable_size_to_row"},"3416":{"probe_name":"hdf5","function_name":"H5HF__dtable_lookup"},"3415":{"probe_name":"hdf5","function_name":"H5HF__dtable_init"},"3414":{"probe_name":"hdf5","function_name":"H5HF__dtable_dest"},"3413":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_verify_chksum"},"3412":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_serialize"},"3411":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_pre_serialize"},"3410":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_notify"},"3409":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_image_len"},"3408":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_get_initial_load_size"},"3407":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_free_icr"},"3406":{"probe_name":"hdf5","function_name":"H5HF__cache_iblock_deserialize"},"3405":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_verify_chksum"},"3404":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_serialize"},"3403":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_pre_serialize"},"3402":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_image_len"},"3401":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_get_initial_load_size"},"3400":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_get_final_load_size"},"3399":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_free_icr"},"3398":{"probe_name":"hdf5","function_name":"H5HF__cache_hdr_deserialize"},"3397":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_verify_chksum"},"3396":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_serialize"},"3395":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_pre_serialize"},"3394":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_notify"},"3393":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_image_len"},"3392":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_get_initial_load_size"},"3391":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_fsf_size"},"3390":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_free_icr"},"3389":{"probe_name":"hdf5","function_name":"H5HF__cache_dblock_deserialize"},"3388":{"probe_name":"hdf5","function_name":"H5Gunlink"},"3387":{"probe_name":"hdf5","function_name":"H5Gset_comment"},"3386":{"probe_name":"hdf5","function_name":"H5Grefresh"},"3385":{"probe_name":"hdf5","function_name":"H5Gopen_async"},"3384":{"probe_name":"hdf5","function_name":"H5Gopen2"},"3383":{"probe_name":"hdf5","function_name":"H5Gopen1"},"3382":{"probe_name":"hdf5","function_name":"H5Gmove2"},"3381":{"probe_name":"hdf5","function_name":"H5Gmove"},"3380":{"probe_name":"hdf5","function_name":"H5Glink2"},"3379":{"probe_name":"hdf5","function_name":"H5Glink"},"3378":{"probe_name":"hdf5","function_name":"H5Giterate"},"3377":{"probe_name":"hdf5","function_name":"H5Gget_objtype_by_idx"},"3376":{"probe_name":"hdf5","function_name":"H5Gget_objname_by_idx"},"3375":{"probe_name":"hdf5","function_name":"H5Gget_objinfo"},"3374":{"probe_name":"hdf5","function_name":"H5Gget_num_objs"},"3373":{"probe_name":"hdf5","function_name":"H5Gget_linkval"},"3372":{"probe_name":"hdf5","function_name":"H5Gget_info_by_name_async"},"3371":{"probe_name":"hdf5","function_name":"H5Gget_info_by_name"},"3370":{"probe_name":"hdf5","function_name":"H5Gget_info_by_idx_async"},"3369":{"probe_name":"hdf5","function_name":"H5Gget_info_by_idx"},"3368":{"probe_name":"hdf5","function_name":"H5Gget_info_async"},"3346":{"probe_name":"hdf5","function_name":"H5G_obj_remove"},"3345":{"probe_name":"hdf5","function_name":"H5G_obj_lookup_by_idx"},"3344":{"probe_name":"hdf5","function_name":"H5G_obj_insert.localalias"},"3343":{"probe_name":"hdf5","function_name":"H5G_obj_insert"},"3342":{"probe_name":"hdf5","function_name":"H5G_obj_get_name_by_idx"},"3341":{"probe_name":"hdf5","function_name":"H5G_normalize"},"3340":{"probe_name":"hdf5","function_name":"H5G_node_debug"},"3339":{"probe_name":"hdf5","function_name":"H5G_node_close"},"3338":{"probe_name":"hdf5","function_name":"H5G_nameof"},"3337":{"probe_name":"hdf5","function_name":"H5G_name_set"},"3336":{"probe_name":"hdf5","function_name":"H5G_name_reset"},"3335":{"probe_name":"hdf5","function_name":"H5G_name_replace"},"2086":{"probe_name":"hdf5","function_name":"H5D__typeinfo_init"},"2085":{"probe_name":"hdf5","function_name":"H5D__single_idx_size"},"2084":{"probe_name":"hdf5","function_name":"H5D__single_idx_reset"},"2083":{"probe_name":"hdf5","function_name":"H5D__single_idx_remove"},"2082":{"probe_name":"hdf5","function_name":"H5D__single_idx_open"},"2081":{"probe_name":"hdf5","function_name":"H5D__single_idx_load_metadata"},"2080":{"probe_name":"hdf5","function_name":"H5D__single_idx_iterate"},"2079":{"probe_name":"hdf5","function_name":"H5D__single_idx_is_space_alloc"},"2078":{"probe_name":"hdf5","function_name":"H5D__single_idx_is_open"},"2077":{"probe_name":"hdf5","function_name":"H5D__single_idx_insert"},"2076":{"probe_name":"hdf5","function_name":"H5D__single_idx_init"},"2075":{"probe_name":"hdf5","function_name":"H5D__single_idx_get_addr"},"2074":{"probe_name":"hdf5","function_name":"H5D__single_idx_dump"},"2073":{"probe_name":"hdf5","function_name":"H5D__single_idx_delete"},"2072":{"probe_name":"hdf5","function_name":"H5D__single_idx_create"},"2071":{"probe_name":"hdf5","function_name":"H5D__single_idx_copy_setup"},"2070":{"probe_name":"hdf5","function_name":"H5D__single_idx_close"},"2069":{"probe_name":"hdf5","function_name":"H5D__set_extent"},"2068":{"probe_name":"hdf5","function_name":"H5D__select_write"},"2067":{"probe_name":"hdf5","function_name":"H5D__select_read"},"2066":{"probe_name":"hdf5","function_name":"H5D__select_io"},"2065":{"probe_name":"hdf5","function_name":"H5D__scatter_mem"},"2064":{"probe_name":"hdf5","function_name":"H5D__scatter_file"},"2063":{"probe_name":"hdf5","function_name":"H5D__scatgath_write_select"},"2062":{"probe_name":"hdf5","function_name":"H5D__scatgath_write"},"2061":{"probe_name":"hdf5","function_name":"H5D__scatgath_read_select"},"2060":{"probe_name":"hdf5","function_name":"H5D__scatgath_read"},"2059":{"probe_name":"hdf5","function_name":"H5D__refresh"},"2058":{"probe_name":"hdf5","function_name":"H5D__read_api_common.constprop.0"},"2057":{"probe_name":"hdf5","function_name":"H5D__read_api_common"},"2056":{"probe_name":"hdf5","function_name":"H5D__read"},"2055":{"probe_name":"hdf5","function_name":"H5D__piece_mem_cb"},"2054":{"probe_name":"hdf5","function_name":"H5D__piece_io"},"2053":{"probe_name":"hdf5","function_name":"H5D__piece_file_cb"},"2052":{"probe_name":"hdf5","function_name":"H5D__open_name"},"2051":{"probe_name":"hdf5","function_name":"H5D__nonexistent_readvv_cb"},"2050":{"probe_name":"hdf5","function_name":"H5D__nonexistent_readvv"},"2049":{"probe_name":"hdf5","function_name":"H5D__none_idx_size"},"2048":{"probe_name":"hdf5","function_name":"H5D__none_idx_reset"},"2047":{"probe_name":"hdf5","function_name":"H5D__none_idx_remove"},"2046":{"probe_name":"hdf5","function_name":"H5D__none_idx_open"},"2045":{"probe_name":"hdf5","function_name":"H5D__none_idx_load_metadata"},"2044":{"probe_name":"hdf5","function_name":"H5D__none_idx_iterate"},"2043":{"probe_name":"hdf5","function_name":"H5D__none_idx_is_space_alloc"},"2042":{"probe_name":"hdf5","function_name":"H5D__none_idx_is_open"},"2041":{"probe_name":"hdf5","function_name":"H5D__none_idx_get_addr"},"2040":{"probe_name":"hdf5","function_name":"H5D__none_idx_dump"},"2039":{"probe_name":"hdf5","function_name":"H5D__none_idx_delete"},"2038":{"probe_name":"hdf5","function_name":"H5D__none_idx_create"},"2037":{"probe_name":"hdf5","function_name":"H5D__none_idx_copy_setup"},"2036":{"probe_name":"hdf5","function_name":"H5D__none_idx_close"},"2035":{"probe_name":"hdf5","function_name":"H5D__new"},"2034":{"probe_name":"hdf5","function_name":"H5D__multi_chunk_filtered_collective_io.constprop.0"},"2033":{"probe_name":"hdf5","function_name":"H5D__multi_chunk_collective_io"},"2032":{"probe_name":"hdf5","function_name":"H5D__mpio_share_chunk_modification_data.constprop.0"},"2031":{"probe_name":"hdf5","function_name":"H5D__mpio_select_write"},"2030":{"probe_name":"hdf5","function_name":"H5D__mpio_select_read"},"2029":{"probe_name":"hdf5","function_name":"H5D__mpio_redistribute_shared_chunks"},"2028":{"probe_name":"hdf5","function_name":"H5D__mpio_opt_possible"},"2027":{"probe_name":"hdf5","function_name":"H5D__mpio_get_no_coll_cause_strings"},"2026":{"probe_name":"hdf5","function_name":"H5D__mpio_get_chunk_alloc_info_types.constprop.0"},"2025":{"probe_name":"hdf5","function_name":"H5D__mpio_collective_filtered_vec_io"},"2024":{"probe_name":"hdf5","function_name":"H5D__mpio_collective_filtered_chunk_update"},"2023":{"probe_name":"hdf5","function_name":"H5D__mpio_collective_filtered_chunk_reinsert"},"2022":{"probe_name":"hdf5","function_name":"H5D__mpio_collective_filtered_chunk_read.constprop.0"},"2021":{"probe_name":"hdf5","function_name":"H5D__mark"},"2020":{"probe_name":"hdf5","function_name":"H5D__link_piece_collective_io.constprop.0"},"2019":{"probe_name":"hdf5","function_name":"H5D__link_chunk_filtered_collective_io"},"2018":{"probe_name":"hdf5","function_name":"H5D__layout_version_test"},"2017":{"probe_name":"hdf5","function_name":"H5D__layout_type_test"},"2016":{"probe_name":"hdf5","function_name":"H5D__layout_set_version"},"2015":{"probe_name":"hdf5","function_name":"H5D__layout_set_latest_indexing"},"2014":{"probe_name":"hdf5","function_name":"H5D__layout_set_io_ops"},"2013":{"probe_name":"hdf5","function_name":"H5D__layout_oh_write"},"2012":{"probe_name":"hdf5","function_name":"H5D__layout_oh_read"},"2011":{"probe_name":"hdf5","function_name":"H5D__layout_oh_create"},"2010":{"probe_name":"hdf5","function_name":"H5D__layout_meta_size"},"2009":{"probe_name":"hdf5","function_name":"H5D__layout_idx_type_test"},"2008":{"probe_name":"hdf5","function_name":"H5D__layout_contig_size_test"},"2007":{"probe_name":"hdf5","function_name":"H5D__layout_compact_dirty_test"},"2006":{"probe_name":"hdf5","function_name":"H5D__ioinfo_adjust"},"2005":{"probe_name":"hdf5","function_name":"H5D__inter_collective_io"},"2004":{"probe_name":"hdf5","function_name":"H5D__init_storage"},"2003":{"probe_name":"hdf5","function_name":"H5D__get_type"},"2002":{"probe_name":"hdf5","function_name":"H5D__get_storage_size"},"2001":{"probe_name":"hdf5","function_name":"H5D__get_space_status"},"2000":{"probe_name":"hdf5","function_name":"H5D__get_space"},"1999":{"probe_name":"hdf5","function_name":"H5D__get_offset"},"1998":{"probe_name":"hdf5","function_name":"H5D__get_num_chunks_cb"},"1997":{"probe_name":"hdf5","function_name":"H5D__get_num_chunks"},"1996":{"probe_name":"hdf5","function_name":"H5D__get_chunk_storage_size"},"1995":{"probe_name":"hdf5","function_name":"H5D__get_chunk_info_cb"},"1994":{"probe_name":"hdf5","function_name":"H5D__get_chunk_info_by_coord_cb"},"1993":{"probe_name":"hdf5","function_name":"H5D__get_chunk_info_by_coord"},"1992":{"probe_name":"hdf5","function_name":"H5D__get_chunk_info"},"1991":{"probe_name":"hdf5","function_name":"H5D__gather_mem"},"1990":{"probe_name":"hdf5","function_name":"H5D__gather_file"},"1989":{"probe_name":"hdf5","function_name":"H5D__free_piece_info"},"1988":{"probe_name":"hdf5","function_name":"H5D__format_convert"},"1987":{"probe_name":"hdf5","function_name":"H5D__flush_sieve_buf"},"1986":{"probe_name":"hdf5","function_name":"H5D__flush_real"},"1985":{"probe_name":"hdf5","function_name":"H5D__flush_all_cb"},"1984":{"probe_name":"hdf5","function_name":"H5D__flush"},"1983":{"probe_name":"hdf5","function_name":"H5D__fill_term"},"1982":{"probe_name":"hdf5","function_name":"H5D__fill_refill_vl"},"1981":{"probe_name":"hdf5","function_name":"H5D__fill_init"},"1980":{"probe_name":"hdf5","function_name":"H5D__fill"},"1979":{"probe_name":"hdf5","function_name":"H5D__farray_idx_size"},"1978":{"probe_name":"hdf5","function_name":"H5D__farray_idx_reset"},"1977":{"probe_name":"hdf5","function_name":"H5D__farray_idx_remove"},"1976":{"probe_name":"hdf5","function_name":"H5D__farray_idx_open"},"1975":{"probe_name":"hdf5","function_name":"H5D__farray_idx_load_metadata"},"1974":{"probe_name":"hdf5","function_name":"H5D__farray_idx_iterate_cb"},"1973":{"probe_name":"hdf5","function_name":"H5D__farray_idx_iterate"},"1972":{"probe_name":"hdf5","function_name":"H5D__farray_idx_is_space_alloc"},"1971":{"probe_name":"hdf5","function_name":"H5D__farray_idx_is_open"},"1970":{"probe_name":"hdf5","function_name":"H5D__farray_idx_insert"},"1969":{"probe_name":"hdf5","function_name":"H5D__farray_idx_init"},"1968":{"probe_name":"hdf5","function_name":"H5D__farray_idx_get_addr"},"1967":{"probe_name":"hdf5","function_name":"H5D__farray_idx_dump"},"1966":{"probe_name":"hdf5","function_name":"H5D__farray_idx_dest"},"1965":{"probe_name":"hdf5","function_name":"H5D__farray_idx_depend"},"1964":{"probe_name":"hdf5","function_name":"H5D__farray_idx_delete_cb"},"1963":{"probe_name":"hdf5","function_name":"H5D__farray_idx_delete"},"1962":{"probe_name":"hdf5","function_name":"H5D__farray_idx_create"},"1961":{"probe_name":"hdf5","function_name":"H5D__farray_idx_copy_shutdown"},"1960":{"probe_name":"hdf5","function_name":"H5D__farray_idx_copy_setup"},"1959":{"probe_name":"hdf5","function_name":"H5D__farray_idx_close"},"1958":{"probe_name":"hdf5","function_name":"H5D__farray_filt_fill"},"1957":{"probe_name":"hdf5","function_name":"H5D__farray_filt_encode"},"1956":{"probe_name":"hdf5","function_name":"H5D__farray_filt_decode"},"1955":{"probe_name":"hdf5","function_name":"H5D__farray_filt_debug"},"1954":{"probe_name":"hdf5","function_name":"H5D__farray_fill"},"1953":{"probe_name":"hdf5","function_name":"H5D__farray_encode"},"1952":{"probe_name":"hdf5","function_name":"H5D__farray_dst_dbg_context"},"1951":{"probe_name":"hdf5","function_name":"H5D__farray_dst_context"},"1950":{"probe_name":"hdf5","function_name":"H5D__farray_decode"},"1949":{"probe_name":"hdf5","function_name":"H5D__farray_debug"},"1948":{"probe_name":"hdf5","function_name":"H5D__farray_crt_dbg_context"},"1947":{"probe_name":"hdf5","function_name":"H5D__farray_crt_context"},"1946":{"probe_name":"hdf5","function_name":"H5D__efl_writevv_cb"},"1945":{"probe_name":"hdf5","function_name":"H5D__efl_writevv"},"1944":{"probe_name":"hdf5","function_name":"H5D__efl_readvv_cb"},"1943":{"probe_name":"hdf5","function_name":"H5D__efl_readvv"},"1942":{"probe_name":"hdf5","function_name":"H5D__efl_is_space_alloc"},"1941":{"probe_name":"hdf5","function_name":"H5D__efl_io_init"},"1940":{"probe_name":"hdf5","function_name":"H5D__efl_init"},"1939":{"probe_name":"hdf5","function_name":"H5D__efl_construct"},"1938":{"probe_name":"hdf5","function_name":"H5D__efl_bh_info"},"1937":{"probe_name":"hdf5","function_name":"H5D__earray_idx_size"},"1936":{"probe_name":"hdf5","function_name":"H5D__earray_idx_resize"},"1935":{"probe_name":"hdf5","function_name":"H5D__earray_idx_reset"},"1934":{"probe_name":"hdf5","function_name":"H5D__earray_idx_remove"},"1933":{"probe_name":"hdf5","function_name":"H5D__earray_idx_open"},"1932":{"probe_name":"hdf5","function_name":"H5D__earray_idx_load_metadata"},"1931":{"probe_name":"hdf5","function_name":"H5D__earray_idx_iterate_cb"},"1930":{"probe_name":"hdf5","function_name":"H5D__earray_idx_iterate"},"1929":{"probe_name":"hdf5","function_name":"H5D__earray_idx_is_space_alloc"},"1928":{"probe_name":"hdf5","function_name":"H5D__earray_idx_is_open"},"1927":{"probe_name":"hdf5","function_name":"H5D__earray_idx_insert"},"1926":{"probe_name":"hdf5","function_name":"H5D__earray_idx_init"},"1925":{"probe_name":"hdf5","function_name":"H5D__earray_idx_get_addr"},"1924":{"probe_name":"hdf5","function_name":"H5D__earray_idx_dump"},"1923":{"probe_name":"hdf5","function_name":"H5D__earray_idx_dest"},"1922":{"probe_name":"hdf5","function_name":"H5D__earray_idx_depend"},"1921":{"probe_name":"hdf5","function_name":"H5D__earray_idx_delete_cb"},"1920":{"probe_name":"hdf5","function_name":"H5D__earray_idx_delete"},"1919":{"probe_name":"hdf5","function_name":"H5D__earray_idx_create"},"1918":{"probe_name":"hdf5","function_name":"H5D__earray_idx_copy_shutdown"},"1917":{"probe_name":"hdf5","function_name":"H5D__earray_idx_copy_setup"},"1916":{"probe_name":"hdf5","function_name":"H5D__earray_idx_close"},"1915":{"probe_name":"hdf5","function_name":"H5D__earray_filt_fill"},"1914":{"probe_name":"hdf5","function_name":"H5D__earray_filt_encode"},"1913":{"probe_name":"hdf5","function_name":"H5D__earray_filt_decode"},"1912":{"probe_name":"hdf5","function_name":"H5D__earray_filt_debug"},"1911":{"probe_name":"hdf5","function_name":"H5D__earray_fill"},"1910":{"probe_name":"hdf5","function_name":"H5D__earray_encode"},"1909":{"probe_name":"hdf5","function_name":"H5D__earray_dst_dbg_context"},"1908":{"probe_name":"hdf5","function_name":"H5D__earray_dst_context"},"1907":{"probe_name":"hdf5","function_name":"H5D__earray_decode"},"1906":{"probe_name":"hdf5","function_name":"H5D__earray_debug"},"1905":{"probe_name":"hdf5","function_name":"H5D__earray_crt_dbg_context"},"1904":{"probe_name":"hdf5","function_name":"H5D__earray_crt_context"},"1903":{"probe_name":"hdf5","function_name":"H5D__current_cache_size_test"},"1902":{"probe_name":"hdf5","function_name":"H5D__create_named"},"1901":{"probe_name":"hdf5","function_name":"H5D__create"},"1900":{"probe_name":"hdf5","function_name":"H5D__contig_writevv_sieve_cb"},"1899":{"probe_name":"hdf5","function_name":"H5D__contig_writevv_cb"},"1898":{"probe_name":"hdf5","function_name":"H5D__contig_writevv"},"1897":{"probe_name":"hdf5","function_name":"H5D__contig_write"},"1896":{"probe_name":"hdf5","function_name":"H5D__contig_readvv_sieve_cb"},"1895":{"probe_name":"hdf5","function_name":"H5D__contig_readvv_cb"},"1894":{"probe_name":"hdf5","function_name":"H5D__contig_readvv"},"1893":{"probe_name":"hdf5","function_name":"H5D__contig_read"},"1892":{"probe_name":"hdf5","function_name":"H5D__contig_mdio_init"},"1891":{"probe_name":"hdf5","function_name":"H5D__contig_is_space_alloc"},"1890":{"probe_name":"hdf5","function_name":"H5D__contig_is_data_cached"},"1889":{"probe_name":"hdf5","function_name":"H5D__contig_io_term"},"1888":{"probe_name":"hdf5","function_name":"H5D__contig_io_init"},"1887":{"probe_name":"hdf5","function_name":"H5D__contig_init"},"1886":{"probe_name":"hdf5","function_name":"H5D__contig_flush"},"1885":{"probe_name":"hdf5","function_name":"H5D__contig_fill"},"1884":{"probe_name":"hdf5","function_name":"H5D__contig_delete"},"1883":{"probe_name":"hdf5","function_name":"H5D__contig_copy"},"1882":{"probe_name":"hdf5","function_name":"H5D__contig_construct"},"1881":{"probe_name":"hdf5","function_name":"H5D__contig_check"},"1880":{"probe_name":"hdf5","function_name":"H5D__contig_alloc"},"1879":{"probe_name":"hdf5","function_name":"H5D__compound_opt_read"},"1878":{"probe_name":"hdf5","function_name":"H5D__compact_writevv"},"1877":{"probe_name":"hdf5","function_name":"H5D__compact_readvv"},"1876":{"probe_name":"hdf5","function_name":"H5D__compact_is_space_alloc"},"1875":{"probe_name":"hdf5","function_name":"H5D__compact_iovv_memmanage_cb"},"1874":{"probe_name":"hdf5","function_name":"H5D__compact_io_init"},"1873":{"probe_name":"hdf5","function_name":"H5D__compact_init"},"1872":{"probe_name":"hdf5","function_name":"H5D__compact_flush"},"1871":{"probe_name":"hdf5","function_name":"H5D__compact_fill"},"1870":{"probe_name":"hdf5","function_name":"H5D__compact_dest"},"1869":{"probe_name":"hdf5","function_name":"H5D__compact_copy"},"1868":{"probe_name":"hdf5","function_name":"H5D__compact_construct"},"1867":{"probe_name":"hdf5","function_name":"H5D__collective_write"},"1866":{"probe_name":"hdf5","function_name":"H5D__collective_read"},"1865":{"probe_name":"hdf5","function_name":"H5D__cmp_piece_addr"},"1864":{"probe_name":"hdf5","function_name":"H5D__cmp_filtered_collective_io_info_entry"},"1863":{"probe_name":"hdf5","function_name":"H5D__cmp_chunk_redistribute_info_orig_owner"},"1862":{"probe_name":"hdf5","function_name":"H5D__cmp_chunk_redistribute_info"},"1861":{"probe_name":"hdf5","function_name":"H5D__close_cb"},"1860":{"probe_name":"hdf5","function_name":"H5D__chunk_write"},"1859":{"probe_name":"hdf5","function_name":"H5D__chunk_update_old_edge_chunks"},"1858":{"probe_name":"hdf5","function_name":"H5D__chunk_update_cache"},"1857":{"probe_name":"hdf5","function_name":"H5D__chunk_unlock.constprop.0"},"1856":{"probe_name":"hdf5","function_name":"H5D__chunk_set_sizes"},"1855":{"probe_name":"hdf5","function_name":"H5D__chunk_set_info_real"},"1854":{"probe_name":"hdf5","function_name":"H5D__chunk_set_info"},"1853":{"probe_name":"hdf5","function_name":"H5D__chunk_read"},"1852":{"probe_name":"hdf5","function_name":"H5D__chunk_prune_by_extent"},"1851":{"probe_name":"hdf5","function_name":"H5D__chunk_mem_xfree"},"1850":{"probe_name":"hdf5","function_name":"H5D__chunk_mem_realloc"},"1849":{"probe_name":"hdf5","function_name":"H5D__chunk_mem_free"},"1848":{"probe_name":"hdf5","function_name":"H5D__chunk_mem_alloc"},"1847":{"probe_name":"hdf5","function_name":"H5D__chunk_mdio_init"},"1846":{"probe_name":"hdf5","function_name":"H5D__chunk_lookup"},"1845":{"probe_name":"hdf5","function_name":"H5D__chunk_lock.constprop.0"},"1844":{"probe_name":"hdf5","function_name":"H5D__chunk_iter_cb"},"1843":{"probe_name":"hdf5","function_name":"H5D__chunk_iter"},"1842":{"probe_name":"hdf5","function_name":"H5D__chunk_is_space_alloc"},"1841":{"probe_name":"hdf5","function_name":"H5D__chunk_is_partial_edge_chunk"},"1840":{"probe_name":"hdf5","function_name":"H5D__chunk_is_data_cached"},"1839":{"probe_name":"hdf5","function_name":"H5D__chunk_io_term"},"1838":{"probe_name":"hdf5","function_name":"H5D__chunk_io_init"},"1837":{"probe_name":"hdf5","function_name":"H5D__chunk_init"},"1836":{"probe_name":"hdf5","function_name":"H5D__chunk_index_empty_cb"},"1835":{"probe_name":"hdf5","function_name":"H5D__chunk_index_empty"},"1834":{"probe_name":"hdf5","function_name":"H5D__chunk_get_offset_copy"},"1833":{"probe_name":"hdf5","function_name":"H5D__chunk_format_convert_cb"},"1832":{"probe_name":"hdf5","function_name":"H5D__chunk_format_convert"},"1831":{"probe_name":"hdf5","function_name":"H5D__chunk_flush_entry.constprop.0"},"1830":{"probe_name":"hdf5","function_name":"H5D__chunk_flush_entry"},"1829":{"probe_name":"hdf5","function_name":"H5D__chunk_flush"},"1828":{"probe_name":"hdf5","function_name":"H5D__chunk_file_alloc"},"1827":{"probe_name":"hdf5","function_name":"H5D__chunk_dump_index_cb"},"1826":{"probe_name":"hdf5","function_name":"H5D__chunk_dump_index"},"1825":{"probe_name":"hdf5","function_name":"H5D__chunk_direct_write"},"1824":{"probe_name":"hdf5","function_name":"H5D__chunk_direct_read"},"1823":{"probe_name":"hdf5","function_name":"H5D__chunk_dest"},"1822":{"probe_name":"hdf5","function_name":"H5D__chunk_delete"},"1821":{"probe_name":"hdf5","function_name":"H5D__chunk_create"},"1820":{"probe_name":"hdf5","function_name":"H5D__chunk_copy_cb"},"1819":{"probe_name":"hdf5","function_name":"H5D__chunk_copy"},"1818":{"probe_name":"hdf5","function_name":"H5D__chunk_construct"},"1817":{"probe_name":"hdf5","function_name":"H5D__chunk_cmp_coll_fill_info"},"1816":{"probe_name":"hdf5","function_name":"H5D__chunk_cacheable"},"1815":{"probe_name":"hdf5","function_name":"H5D__chunk_cache_evict.constprop.0"},"1814":{"probe_name":"hdf5","function_name":"H5D__chunk_cache_evict"},"1813":{"probe_name":"hdf5","function_name":"H5D__chunk_bh_info"},"1812":{"probe_name":"hdf5","function_name":"H5D__chunk_allocated_cb"},"1811":{"probe_name":"hdf5","function_name":"H5D__chunk_allocated"},"1810":{"probe_name":"hdf5","function_name":"H5D__chunk_allocate"},"1809":{"probe_name":"hdf5","function_name":"H5D__chunk_addrmap_cb"},"1808":{"probe_name":"hdf5","function_name":"H5D__chunk_addrmap"},"1807":{"probe_name":"hdf5","function_name":"H5D__cache_dataspace_info"},"1806":{"probe_name":"hdf5","function_name":"H5D__build_file_prefix.isra.0"},"1805":{"probe_name":"hdf5","function_name":"H5D__btree_shared_free"},"1804":{"probe_name":"hdf5","function_name":"H5D__btree_shared_create"},"1803":{"probe_name":"hdf5","function_name":"H5D__btree_remove"},"1802":{"probe_name":"hdf5","function_name":"H5D__btree_new_node"},"1801":{"probe_name":"hdf5","function_name":"H5D__btree_insert"},"1800":{"probe_name":"hdf5","function_name":"H5D__btree_idx_size"},"1799":{"probe_name":"hdf5","function_name":"H5D__btree_idx_reset"},"1798":{"probe_name":"hdf5","function_name":"H5D__btree_idx_remove"},"1797":{"probe_name":"hdf5","function_name":"H5D__btree_idx_open"},"1796":{"probe_name":"hdf5","function_name":"H5D__btree_idx_load_metadata"},"1795":{"probe_name":"hdf5","function_name":"H5D__btree_idx_iterate_cb"},"1794":{"probe_name":"hdf5","function_name":"H5D__btree_idx_iterate"},"1793":{"probe_name":"hdf5","function_name":"H5D__btree_idx_is_space_alloc"},"1792":{"probe_name":"hdf5","function_name":"H5D__btree_idx_is_open"},"1791":{"probe_name":"hdf5","function_name":"H5D__btree_idx_insert"},"1790":{"probe_name":"hdf5","function_name":"H5D__btree_idx_init"},"1789":{"probe_name":"hdf5","function_name":"H5D__btree_idx_get_addr"},"1788":{"probe_name":"hdf5","function_name":"H5D__btree_idx_dump"},"1787":{"probe_name":"hdf5","function_name":"H5D__btree_idx_dest"},"1786":{"probe_name":"hdf5","function_name":"H5D__btree_idx_delete"},"1785":{"probe_name":"hdf5","function_name":"H5D__btree_idx_create"},"1784":{"probe_name":"hdf5","function_name":"H5D__btree_idx_copy_shutdown"},"1783":{"probe_name":"hdf5","function_name":"H5D__btree_idx_copy_setup"},"1782":{"probe_name":"hdf5","function_name":"H5D__btree_idx_close"},"1781":{"probe_name":"hdf5","function_name":"H5D__btree_get_shared"},"1780":{"probe_name":"hdf5","function_name":"H5D__btree_found"},"1779":{"probe_name":"hdf5","function_name":"H5D__btree_encode_key"},"1778":{"probe_name":"hdf5","function_name":"H5D__btree_decode_key"},"1777":{"probe_name":"hdf5","function_name":"H5D__btree_debug_key"},"1776":{"probe_name":"hdf5","function_name":"H5D__btree_cmp3"},"1775":{"probe_name":"hdf5","function_name":"H5D__btree_cmp2"},"1774":{"probe_name":"hdf5","function_name":"H5D__btree2_idx_depend"},"1773":{"probe_name":"hdf5","function_name":"H5D__bt2_unfilt_encode"},"1772":{"probe_name":"hdf5","function_name":"H5D__bt2_unfilt_decode"},"1771":{"probe_name":"hdf5","function_name":"H5D__bt2_unfilt_debug"},"1770":{"probe_name":"hdf5","function_name":"H5D__bt2_store"},"1769":{"probe_name":"hdf5","function_name":"H5D__bt2_remove_cb"},"1768":{"probe_name":"hdf5","function_name":"H5D__bt2_mod_cb"},"1767":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_size"},"1766":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_reset"},"1765":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_remove"},"1764":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_open"},"1763":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_load_metadata"},"1762":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_iterate_cb"},"1761":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_iterate"},"1760":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_is_space_alloc"},"1759":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_is_open"},"1758":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_insert"},"1757":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_init"},"1756":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_get_addr"},"1755":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_dump"},"1754":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_dest"},"1753":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_delete"},"1752":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_create"},"1751":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_copy_shutdown"},"1750":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_copy_setup"},"1749":{"probe_name":"hdf5","function_name":"H5D__bt2_idx_close"},"1748":{"probe_name":"hdf5","function_name":"H5D__bt2_found_cb"},"1747":{"probe_name":"hdf5","function_name":"H5D__bt2_filt_encode"},"1746":{"probe_name":"hdf5","function_name":"H5D__bt2_filt_decode"},"1745":{"probe_name":"hdf5","function_name":"H5D__bt2_filt_debug"},"1744":{"probe_name":"hdf5","function_name":"H5D__bt2_dst_context"},"1743":{"probe_name":"hdf5","function_name":"H5D__bt2_crt_context"},"1742":{"probe_name":"hdf5","function_name":"H5D__bt2_compare"},"1741":{"probe_name":"hdf5","function_name":"H5D__append_flush_setup.part.0"},"1740":{"probe_name":"hdf5","function_name":"H5D__alloc_storage"},"1739":{"probe_name":"hdf5","function_name":"H5C_validate_resize_config"},"1738":{"probe_name":"hdf5","function_name":"H5C_validate_cache_image_config"},"1737":{"probe_name":"hdf5","function_name":"H5C_unsettle_ring"},"1736":{"probe_name":"hdf5","function_name":"H5C_unsettle_entry_ring"},"1735":{"probe_name":"hdf5","function_name":"H5C_unprotect"},"1734":{"probe_name":"hdf5","function_name":"H5C_unpin_entry"},"1733":{"probe_name":"hdf5","function_name":"H5C_stop_logging"},"1732":{"probe_name":"hdf5","function_name":"H5C_stats__reset"},"1731":{"probe_name":"hdf5","function_name":"H5C_stats"},"1730":{"probe_name":"hdf5","function_name":"H5C_start_logging"},"1729":{"probe_name":"hdf5","function_name":"H5C_set_slist_enabled"},"1728":{"probe_name":"hdf5","function_name":"H5C_set_prefix"},"1727":{"probe_name":"hdf5","function_name":"H5C_set_evictions_enabled"},"1726":{"probe_name":"hdf5","function_name":"H5C_set_cache_image_config"},"1725":{"probe_name":"hdf5","function_name":"H5C_set_cache_auto_resize_config"},"1724":{"probe_name":"hdf5","function_name":"H5C_retag_entries"},"1723":{"probe_name":"hdf5","function_name":"H5C_resize_entry"},"1722":{"probe_name":"hdf5","function_name":"H5C_reset_cache_hit_rate_stats"},"1721":{"probe_name":"hdf5","function_name":"H5C_remove_entry"},"1720":{"probe_name":"hdf5","function_name":"H5C_protect"},"1719":{"probe_name":"hdf5","function_name":"H5C_prep_for_file_close"},"1718":{"probe_name":"hdf5","function_name":"H5C_pin_protected_entry"},"1717":{"probe_name":"hdf5","function_name":"H5C_move_entry"},"1716":{"probe_name":"hdf5","function_name":"H5C_mark_entry_unserialized"},"1715":{"probe_name":"hdf5","function_name":"H5C_mark_entry_serialized"},"1714":{"probe_name":"hdf5","function_name":"H5C_mark_entry_dirty"},"1713":{"probe_name":"hdf5","function_name":"H5C_mark_entry_clean"},"1712":{"probe_name":"hdf5","function_name":"H5C_mark_entries_as_clean"},"1711":{"probe_name":"hdf5","function_name":"H5C_log_write_unprotect_entry_msg"},"1710":{"probe_name":"hdf5","function_name":"H5C_log_write_unpin_entry_msg"},"1709":{"probe_name":"hdf5","function_name":"H5C_log_write_set_cache_config_msg"},"1708":{"probe_name":"hdf5","function_name":"H5C_log_write_resize_entry_msg"},"1707":{"probe_name":"hdf5","function_name":"H5C_log_write_remove_entry_msg"},"1706":{"probe_name":"hdf5","function_name":"H5C_log_write_protect_entry_msg"},"1705":{"probe_name":"hdf5","function_name":"H5C_log_write_pin_entry_msg"},"1704":{"probe_name":"hdf5","function_name":"H5C_log_write_move_entry_msg"},"1703":{"probe_name":"hdf5","function_name":"H5C_log_write_mark_unserialized_entry_msg"},"1702":{"probe_name":"hdf5","function_name":"H5C_log_write_mark_serialized_entry_msg"},"1701":{"probe_name":"hdf5","function_name":"H5C_log_write_mark_entry_dirty_msg"},"1700":{"probe_name":"hdf5","function_name":"H5C_log_write_mark_entry_clean_msg"},"1699":{"probe_name":"hdf5","function_name":"H5C_log_write_insert_entry_msg"},"1698":{"probe_name":"hdf5","function_name":"H5C_log_write_flush_cache_msg"},"1697":{"probe_name":"hdf5","function_name":"H5C_log_write_expunge_entry_msg"},"1696":{"probe_name":"hdf5","function_name":"H5C_log_write_evict_cache_msg"},"1695":{"probe_name":"hdf5","function_name":"H5C_log_write_destroy_fd_msg"},"1694":{"probe_name":"hdf5","function_name":"H5C_log_write_destroy_cache_msg"},"1693":{"probe_name":"hdf5","function_name":"H5C_log_write_create_fd_msg"},"1692":{"probe_name":"hdf5","function_name":"H5C_log_write_create_cache_msg"},"1691":{"probe_name":"hdf5","function_name":"H5C_log_tear_down"},"1690":{"probe_name":"hdf5","function_name":"H5C_log_set_up"},"1689":{"probe_name":"hdf5","function_name":"H5C_load_cache_image_on_next_protect"},"1688":{"probe_name":"hdf5","function_name":"H5C_insert_entry"},"1687":{"probe_name":"hdf5","function_name":"H5C_ignore_tags"},"1686":{"probe_name":"hdf5","function_name":"H5C_get_tag"},"1685":{"probe_name":"hdf5","function_name":"H5C_get_num_objs_corked"},"1684":{"probe_name":"hdf5","function_name":"H5C_get_mdc_image_info"},"1683":{"probe_name":"hdf5","function_name":"H5C_get_logging_status"},"1682":{"probe_name":"hdf5","function_name":"H5C_get_ignore_tags"},"1681":{"probe_name":"hdf5","function_name":"H5C_get_evictions_enabled"},"1680":{"probe_name":"hdf5","function_name":"H5C_get_entry_status"},"1679":{"probe_name":"hdf5","function_name":"H5C_get_entry_ring"},"1678":{"probe_name":"hdf5","function_name":"H5C_get_cache_size"},"1677":{"probe_name":"hdf5","function_name":"H5C_get_cache_hit_rate"},"1676":{"probe_name":"hdf5","function_name":"H5C_get_cache_flush_in_progress"},"1675":{"probe_name":"hdf5","function_name":"H5C_get_cache_auto_resize_config"},"1674":{"probe_name":"hdf5","function_name":"H5C_get_aux_ptr"},"1673":{"probe_name":"hdf5","function_name":"H5C_flush_to_min_clean"},"1672":{"probe_name":"hdf5","function_name":"H5C_flush_tagged_entries"},"1671":{"probe_name":"hdf5","function_name":"H5C_flush_cache"},"1670":{"probe_name":"hdf5","function_name":"H5C_expunge_tag_type_metadata"},"1669":{"probe_name":"hdf5","function_name":"H5C_expunge_entry"},"1668":{"probe_name":"hdf5","function_name":"H5C_evict_tagged_entries"},"1667":{"probe_name":"hdf5","function_name":"H5C_evict"},"1666":{"probe_name":"hdf5","function_name":"H5C_destroy_flush_dependency"},"1665":{"probe_name":"hdf5","function_name":"H5C_dest"},"1664":{"probe_name":"hdf5","function_name":"H5C_def_auto_resize_rpt_fcn"},"1663":{"probe_name":"hdf5","function_name":"H5C_create_flush_dependency"},"1662":{"probe_name":"hdf5","function_name":"H5C_create"},"1661":{"probe_name":"hdf5","function_name":"H5C_cork"},"1660":{"probe_name":"hdf5","function_name":"H5C_construct_candidate_list__min_clean"},"1659":{"probe_name":"hdf5","function_name":"H5C_construct_candidate_list__clean_cache"},"1658":{"probe_name":"hdf5","function_name":"H5C_clear_coll_entries"},"1657":{"probe_name":"hdf5","function_name":"H5C_cache_image_status"},"1656":{"probe_name":"hdf5","function_name":"H5C_cache_image_pending"},"1655":{"probe_name":"hdf5","function_name":"H5C_apply_candidate_list"},"1654":{"probe_name":"hdf5","function_name":"H5C__verify_len_eoa.isra.0"},"1653":{"probe_name":"hdf5","function_name":"H5C__verify_cork_tag_test_cb"},"1652":{"probe_name":"hdf5","function_name":"H5C__verify_cork_tag_test"},"1651":{"probe_name":"hdf5","function_name":"H5C__untag_entry"},"1650":{"probe_name":"hdf5","function_name":"H5C__unpin_entry_from_client"},"1649":{"probe_name":"hdf5","function_name":"H5C__trace_write_unprotect_entry_log_msg"},"1648":{"probe_name":"hdf5","function_name":"H5C__trace_write_unpin_entry_log_msg"},"1647":{"probe_name":"hdf5","function_name":"H5C__trace_write_set_cache_config_log_msg"},"1646":{"probe_name":"hdf5","function_name":"H5C__trace_write_resize_entry_log_msg"},"1645":{"probe_name":"hdf5","function_name":"H5C__trace_write_remove_entry_log_msg"},"1644":{"probe_name":"hdf5","function_name":"H5C__trace_write_protect_entry_log_msg"},"1643":{"probe_name":"hdf5","function_name":"H5C__trace_write_pin_entry_log_msg"},"1642":{"probe_name":"hdf5","function_name":"H5C__trace_write_move_entry_log_msg"},"1641":{"probe_name":"hdf5","function_name":"H5C__trace_write_mark_unserialized_entry_log_msg"},"1640":{"probe_name":"hdf5","function_name":"H5C__trace_write_mark_serialized_entry_log_msg"},"1639":{"probe_name":"hdf5","function_name":"H5C__trace_write_mark_entry_dirty_log_msg"},"1638":{"probe_name":"hdf5","function_name":"H5C__trace_write_mark_entry_clean_log_msg"},"1637":{"probe_name":"hdf5","function_name":"H5C__trace_write_insert_entry_log_msg"},"1636":{"probe_name":"hdf5","function_name":"H5C__trace_write_flush_cache_log_msg"},"1635":{"probe_name":"hdf5","function_name":"H5C__trace_write_expunge_entry_log_msg"},"1634":{"probe_name":"hdf5","function_name":"H5C__trace_write_destroy_fd_log_msg"},"1633":{"probe_name":"hdf5","function_name":"H5C__trace_write_create_fd_log_msg"},"1632":{"probe_name":"hdf5","function_name":"H5C__trace_tear_down_logging"},"1631":{"probe_name":"hdf5","function_name":"H5C__tag_entry"},"1630":{"probe_name":"hdf5","function_name":"H5C__serialize_single_entry"},"1629":{"probe_name":"hdf5","function_name":"H5C__serialize_cache"},"1628":{"probe_name":"hdf5","function_name":"H5C__prep_image_for_file_close"},"1627":{"probe_name":"hdf5","function_name":"H5C__prep_for_file_close__compute_fd_heights_real"},"1626":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_verify_chksum"},"1625":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_serialize"},"1624":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_pre_serialize"},"1623":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_notify"},"1622":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_image_len"},"1621":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_get_initial_load_size"},"1620":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_get_final_load_size"},"1619":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_fsf_size"},"1618":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_free_icr"},"1617":{"probe_name":"hdf5","function_name":"H5C__prefetched_entry_deserialize"},"1616":{"probe_name":"hdf5","function_name":"H5C__pin_entry_from_client.part.0"},"1615":{"probe_name":"hdf5","function_name":"H5C__make_space_in_cache"},"1614":{"probe_name":"hdf5","function_name":"H5C__log_trace_set_up"},"1613":{"probe_name":"hdf5","function_name":"H5C__log_json_set_up"},"1612":{"probe_name":"hdf5","function_name":"H5C__load_cache_image"},"1611":{"probe_name":"hdf5","function_name":"H5C__json_write_unprotect_entry_log_msg"},"1610":{"probe_name":"hdf5","function_name":"H5C__json_write_unpin_entry_log_msg"},"1609":{"probe_name":"hdf5","function_name":"H5C__json_write_stop_log_msg"},"1608":{"probe_name":"hdf5","function_name":"H5C__json_write_start_log_msg"},"1607":{"probe_name":"hdf5","function_name":"H5C__json_write_set_cache_config_log_msg"},"1606":{"probe_name":"hdf5","function_name":"H5C__json_write_resize_entry_log_msg"},"1605":{"probe_name":"hdf5","function_name":"H5C__json_write_remove_entry_log_msg"},"1604":{"probe_name":"hdf5","function_name":"H5C__json_write_protect_entry_log_msg"},"1603":{"probe_name":"hdf5","function_name":"H5C__json_write_pin_entry_log_msg"},"1602":{"probe_name":"hdf5","function_name":"H5C__json_write_move_entry_log_msg"},"1601":{"probe_name":"hdf5","function_name":"H5C__json_write_mark_unserialized_entry_log_msg"},"1600":{"probe_name":"hdf5","function_name":"H5C__json_write_mark_serialized_entry_log_msg"},"1599":{"probe_name":"hdf5","function_name":"H5C__json_write_mark_entry_dirty_log_msg"},"1598":{"probe_name":"hdf5","function_name":"H5C__json_write_mark_entry_clean_log_msg"},"1597":{"probe_name":"hdf5","function_name":"H5C__json_write_insert_entry_log_msg"},"1596":{"probe_name":"hdf5","function_name":"H5C__json_write_flush_cache_log_msg"},"1595":{"probe_name":"hdf5","function_name":"H5C__json_write_expunge_entry_log_msg"},"1594":{"probe_name":"hdf5","function_name":"H5C__json_write_evict_cache_log_msg"},"1593":{"probe_name":"hdf5","function_name":"H5C__json_write_destroy_fd_log_msg"},"1592":{"probe_name":"hdf5","function_name":"H5C__json_write_destroy_cache_log_msg"},"1591":{"probe_name":"hdf5","function_name":"H5C__json_write_create_fd_log_msg"},"1590":{"probe_name":"hdf5","function_name":"H5C__json_write_create_cache_log_msg"},"1589":{"probe_name":"hdf5","function_name":"H5C__json_tear_down_logging"},"1588":{"probe_name":"hdf5","function_name":"H5C__iter_tagged_entries_real"},"1587":{"probe_name":"hdf5","function_name":"H5C__iter_tagged_entries"},"1586":{"probe_name":"hdf5","function_name":"H5C__image_stats"},"1585":{"probe_name":"hdf5","function_name":"H5C__image_entry_cmp"},"1584":{"probe_name":"hdf5","function_name":"H5C__get_cache_image_config"},"1583":{"probe_name":"hdf5","function_name":"H5C__generate_image"},"1582":{"probe_name":"hdf5","function_name":"H5C__generate_cache_image"},"1581":{"probe_name":"hdf5","function_name":"H5C__flush_tagged_entries_cb"},"1580":{"probe_name":"hdf5","function_name":"H5C__flush_single_entry"},"1579":{"probe_name":"hdf5","function_name":"H5C__flush_ring"},"1578":{"probe_name":"hdf5","function_name":"H5C__flush_invalidate_cache"},"1577":{"probe_name":"hdf5","function_name":"H5C__flash_increase_cache_size"},"1576":{"probe_name":"hdf5","function_name":"H5C__expunge_tag_type_metadata_cb"},"1575":{"probe_name":"hdf5","function_name":"H5C__evict_tagged_entries_cb"},"1574":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_verify_chksum"},"1573":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_serialize"},"1572":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_pre_serialize"},"1571":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_notify"},"1570":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_image_len"},"1569":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_get_initial_load_size"},"1568":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_get_final_load_size"},"1567":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_fsf_size"},"1566":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_free_icr"},"1565":{"probe_name":"hdf5","function_name":"H5C__epoch_marker_deserialize"},"1564":{"probe_name":"hdf5","function_name":"H5C__autoadjust__ageout__remove_excess_markers"},"1563":{"probe_name":"hdf5","function_name":"H5C__autoadjust__ageout__remove_all_markers"},"1562":{"probe_name":"hdf5","function_name":"H5C__auto_adjust_cache_size"},"1561":{"probe_name":"hdf5","function_name":"H5CX_term_package"},"1560":{"probe_name":"hdf5","function_name":"H5CX_set_vol_wrap_ctx"},"1559":{"probe_name":"hdf5","function_name":"H5CX_set_vol_connector_prop"},"1558":{"probe_name":"hdf5","function_name":"H5CX_set_vlen_alloc_info"},"1557":{"probe_name":"hdf5","function_name":"H5CX_set_tag"},"1556":{"probe_name":"hdf5","function_name":"H5CX_set_ring"},"1555":{"probe_name":"hdf5","function_name":"H5CX_set_no_selection_io_cause"},"1554":{"probe_name":"hdf5","function_name":"H5CX_set_nlinks"},"1553":{"probe_name":"hdf5","function_name":"H5CX_set_mpio_rank0_bcast"},"1552":{"probe_name":"hdf5","function_name":"H5CX_set_mpio_local_no_coll_cause"},"1551":{"probe_name":"hdf5","function_name":"H5CX_set_mpio_global_no_coll_cause"},"1550":{"probe_name":"hdf5","function_name":"H5CX_set_mpio_coll_opt"},"1549":{"probe_name":"hdf5","function_name":"H5CX_set_mpio_actual_io_mode"},"1548":{"probe_name":"hdf5","function_name":"H5CX_set_mpio_actual_chunk_opt"},"1547":{"probe_name":"hdf5","function_name":"H5CX_set_mpi_file_flushing"},"1546":{"probe_name":"hdf5","function_name":"H5CX_set_mpi_coll_datatypes"},"1545":{"probe_name":"hdf5","function_name":"H5CX_set_loc"},"1544":{"probe_name":"hdf5","function_name":"H5CX_set_libver_bounds"},"1543":{"probe_name":"hdf5","function_name":"H5CX_set_lcpl"},"1542":{"probe_name":"hdf5","function_name":"H5CX_set_lapl"},"1541":{"probe_name":"hdf5","function_name":"H5CX_set_io_xfer_mode"},"1540":{"probe_name":"hdf5","function_name":"H5CX_set_dxpl"},"1539":{"probe_name":"hdf5","function_name":"H5CX_set_dcpl"},"1538":{"probe_name":"hdf5","function_name":"H5CX_set_coll_metadata_read"},"1537":{"probe_name":"hdf5","function_name":"H5CX_set_apl"},"1536":{"probe_name":"hdf5","function_name":"H5CX_set_actual_selection_io_mode"},"1535":{"probe_name":"hdf5","function_name":"H5CX_retrieve_state"},"1534":{"probe_name":"hdf5","function_name":"H5CX_restore_state"},"1533":{"probe_name":"hdf5","function_name":"H5CX_pushed"},"1532":{"probe_name":"hdf5","function_name":"H5CX_push_special"},"1531":{"probe_name":"hdf5","function_name":"H5CX_push"},"1530":{"probe_name":"hdf5","function_name":"H5CX_pop"},"1529":{"probe_name":"hdf5","function_name":"H5CX_is_def_dxpl"},"1528":{"probe_name":"hdf5","function_name":"H5CX_init"},"1527":{"probe_name":"hdf5","function_name":"H5CX_get_vol_wrap_ctx"},"1526":{"probe_name":"hdf5","function_name":"H5CX_get_vol_connector_prop"},"1525":{"probe_name":"hdf5","function_name":"H5CX_get_vlen_alloc_info"},"1524":{"probe_name":"hdf5","function_name":"H5CX_get_vec_size"},"1523":{"probe_name":"hdf5","function_name":"H5CX_get_vds_prefix"},"1522":{"probe_name":"hdf5","function_name":"H5CX_get_tconv_buf"},"1521":{"probe_name":"hdf5","function_name":"H5CX_get_tag"},"1520":{"probe_name":"hdf5","function_name":"H5CX_get_selection_io_mode"},"1519":{"probe_name":"hdf5","function_name":"H5CX_get_ring"},"1234":{"probe_name":"hdf5","function_name":"H5A__attr_iterate_table"},"1233":{"probe_name":"hdf5","function_name":"H5A__attr_copy_file"},"1232":{"probe_name":"hdf5","function_name":"H5A__attr_cmp_name_inc"},"1231":{"probe_name":"hdf5","function_name":"H5A__attr_cmp_name_dec"},"1230":{"probe_name":"hdf5","function_name":"H5A__attr_cmp_corder_inc"},"1229":{"probe_name":"hdf5","function_name":"H5A__attr_cmp_corder_dec"},"1228":{"probe_name":"hdf5","function_name":"H5AC_validate_config"},"1227":{"probe_name":"hdf5","function_name":"H5AC_validate_cache_image_config"},"1226":{"probe_name":"hdf5","function_name":"H5AC_unsettle_ring"},"1225":{"probe_name":"hdf5","function_name":"H5AC_unsettle_entry_ring"},"1224":{"probe_name":"hdf5","function_name":"H5AC_unprotect"},"1223":{"probe_name":"hdf5","function_name":"H5AC_unpin_entry"},"1222":{"probe_name":"hdf5","function_name":"H5AC_term_package"},"1221":{"probe_name":"hdf5","function_name":"H5AC_tag"},"1220":{"probe_name":"hdf5","function_name":"H5AC_stats"},"1219":{"probe_name":"hdf5","function_name":"H5AC_set_ring"},"1218":{"probe_name":"hdf5","function_name":"H5AC_set_cache_auto_resize_config"},"1217":{"probe_name":"hdf5","function_name":"H5AC_secure_from_file_flush"},"1216":{"probe_name":"hdf5","function_name":"H5AC_retag_copied_metadata"},"1215":{"probe_name":"hdf5","function_name":"H5AC_resize_entry"},"1214":{"probe_name":"hdf5","function_name":"H5AC_reset_cache_hit_rate_stats"},"1213":{"probe_name":"hdf5","function_name":"H5AC_remove_entry"},"1212":{"probe_name":"hdf5","function_name":"H5AC_proxy_entry_remove_parent"},"1211":{"probe_name":"hdf5","function_name":"H5AC_proxy_entry_remove_child"},"1210":{"probe_name":"hdf5","function_name":"H5AC_proxy_entry_dest"},"1209":{"probe_name":"hdf5","function_name":"H5AC_proxy_entry_create"},"1208":{"probe_name":"hdf5","function_name":"H5AC_proxy_entry_add_parent"},"1207":{"probe_name":"hdf5","function_name":"H5AC_proxy_entry_add_child"},"1206":{"probe_name":"hdf5","function_name":"H5AC_protect"},"1205":{"probe_name":"hdf5","function_name":"H5AC_prep_for_file_flush"},"1204":{"probe_name":"hdf5","function_name":"H5AC_prep_for_file_close"},"1203":{"probe_name":"hdf5","function_name":"H5AC_pin_protected_entry"},"1202":{"probe_name":"hdf5","function_name":"H5AC_move_entry"},"1201":{"probe_name":"hdf5","function_name":"H5AC_mark_entry_unserialized"},"1200":{"probe_name":"hdf5","function_name":"H5AC_mark_entry_serialized"},"1199":{"probe_name":"hdf5","function_name":"H5AC_mark_entry_dirty"},"1198":{"probe_name":"hdf5","function_name":"H5AC_mark_entry_clean"},"1197":{"probe_name":"hdf5","function_name":"H5AC_load_cache_image_on_next_protect"},"1196":{"probe_name":"hdf5","function_name":"H5AC_insert_entry"},"1195":{"probe_name":"hdf5","function_name":"H5AC_init"},"1194":{"probe_name":"hdf5","function_name":"H5AC_ignore_tags"},"1193":{"probe_name":"hdf5","function_name":"H5AC_get_tag"},"1192":{"probe_name":"hdf5","function_name":"H5AC_get_mdc_image_info"},"1191":{"probe_name":"hdf5","function_name":"H5AC_get_entry_status"},"1190":{"probe_name":"hdf5","function_name":"H5AC_get_entry_ring"},"1189":{"probe_name":"hdf5","function_name":"H5AC_get_cache_size"},"1188":{"probe_name":"hdf5","function_name":"H5AC_get_cache_hit_rate"},"1187":{"probe_name":"hdf5","function_name":"H5AC_get_cache_flush_in_progress"},"1186":{"probe_name":"hdf5","function_name":"H5AC_get_cache_auto_resize_config"},"1185":{"probe_name":"hdf5","function_name":"H5AC_flush_tagged_metadata"},"1184":{"probe_name":"hdf5","function_name":"H5AC_flush"},"1183":{"probe_name":"hdf5","function_name":"H5AC_expunge_tag_type_metadata"},"1182":{"probe_name":"hdf5","function_name":"H5AC_expunge_entry"},"1181":{"probe_name":"hdf5","function_name":"H5AC_evict_tagged_metadata"},"1180":{"probe_name":"hdf5","function_name":"H5AC_evict"},"1179":{"probe_name":"hdf5","function_name":"H5AC_destroy_flush_dependency"},"1178":{"probe_name":"hdf5","function_name":"H5AC_dest"},"1177":{"probe_name":"hdf5","function_name":"H5AC_create_flush_dependency"},"1176":{"probe_name":"hdf5","function_name":"H5AC_create"},"1175":{"probe_name":"hdf5","function_name":"H5AC_cork"},"1174":{"probe_name":"hdf5","function_name":"H5AC_cache_image_pending"},"1173":{"probe_name":"hdf5","function_name":"H5AC_add_candidate"},"1172":{"probe_name":"hdf5","function_name":"H5AC__set_write_done_callback"},"1171":{"probe_name":"hdf5","function_name":"H5AC__set_sync_point_done_callback"},"1170":{"probe_name":"hdf5","function_name":"H5AC__run_sync_point"},"1169":{"probe_name":"hdf5","function_name":"H5AC__receive_haddr_list"},"1168":{"probe_name":"hdf5","function_name":"H5AC__proxy_entry_serialize"},"1167":{"probe_name":"hdf5","function_name":"H5AC__proxy_entry_remove_child_cb"},"1166":{"probe_name":"hdf5","function_name":"H5AC__proxy_entry_notify"},"1165":{"probe_name":"hdf5","function_name":"H5AC__proxy_entry_image_len"},"1164":{"probe_name":"hdf5","function_name":"H5AC__proxy_entry_free_icr"},"1163":{"probe_name":"hdf5","function_name":"H5AC__proxy_entry_add_child_cb"},"1162":{"probe_name":"hdf5","function_name":"H5AC__propagate_flushed_and_still_clean_entries_list"},"1161":{"probe_name":"hdf5","function_name":"H5AC__log_moved_entry"},"1160":{"probe_name":"hdf5","function_name":"H5AC__log_inserted_entry"},"1159":{"probe_name":"hdf5","function_name":"H5AC__log_flushed_entry"},"1158":{"probe_name":"hdf5","function_name":"H5AC__log_dirtied_entry"},"1157":{"probe_name":"hdf5","function_name":"H5AC__log_deleted_entry"},"1156":{"probe_name":"hdf5","function_name":"H5AC__log_cleaned_entry"},"1155":{"probe_name":"hdf5","function_name":"H5AC__flush_entries"},"1154":{"probe_name":"hdf5","function_name":"H5AC__copy_candidate_list_to_buffer_cb"},"1153":{"probe_name":"hdf5","function_name":"H5AC__copy_candidate_list_to_buffer.constprop.0"},"1152":{"probe_name":"hdf5","function_name":"H5AC__check_if_write_permitted"},"1151":{"probe_name":"hdf5","function_name":"H5AC__broadcast_clean_list_cb"},"1150":{"probe_name":"libc","function_name":"vfork"},"1149":{"probe_name":"libc","function_name":"pthread_atfork@GLIBC_2.2.5"},"1148":{"probe_name":"libc","function_name":"fork"},"1147":{"probe_name":"libc","function_name":"__vfork"},"1146":{"probe_name":"libc","function_name":"__unregister_atfork"},"1145":{"probe_name":"libc","function_name":"__timer_fork_subprocess"},"1144":{"probe_name":"libc","function_name":"__run_prefork_handlers"},"1143":{"probe_name":"libc","function_name":"__run_postfork_handlers"},"1142":{"probe_name":"libc","function_name":"__register_atfork"},"1141":{"probe_name":"libc","function_name":"__nss_database_fork_subprocess"},"1140":{"probe_name":"libc","function_name":"__nss_database_fork_prepare_parent"},"1139":{"probe_name":"libc","function_name":"__mq_notify_fork_subprocess"},"1138":{"probe_name":"libc","function_name":"__malloc_fork_unlock_parent"},"1137":{"probe_name":"libc","function_name":"__malloc_fork_unlock_child"},"1136":{"probe_name":"libc","function_name":"__malloc_fork_lock_parent"},"1135":{"probe_name":"libc","function_name":"__libc_vfork"},"1134":{"probe_name":"libc","function_name":"__libc_unwind_link_after_fork"},"1133":{"probe_name":"libc","function_name":"__libc_fork"},"1132":{"probe_name":"libc","function_name":"__forkpty"},"1131":{"probe_name":"libc","function_name":"__fork"},"1130":{"probe_name":"libc","function_name":"__dyn_pthread_atfork"},"1129":{"probe_name":"libc","function_name":"__GI_forkpty"},"1128":{"probe_name":"libc","function_name":"__GI___vfork"},"1127":{"probe_name":"libc","function_name":"__GI___register_atfork"},"1126":{"probe_name":"libc","function_name":"__GI___fork"},"1125":{"probe_name":"sys","function_name":"writev"},"1124":{"probe_name":"sys","function_name":"write"},"1123":{"probe_name":"sys","function_name":"vfork"},"1122":{"probe_name":"sys","function_name":"ustat"},"1121":{"probe_name":"sys","function_name":"unlinkat"},"1120":{"probe_name":"sys","function_name":"unlink"},"1119":{"probe_name":"sys","function_name":"truncate"},"1118":{"probe_name":"sys","function_name":"sysfs"},"1117":{"probe_name":"sys","function_name":"syncfs"},"1116":{"probe_name":"sys","function_name":"sync_file_range2"},"1115":{"probe_name":"sys","function_name":"sync_file_range"},"1114":{"probe_name":"sys","function_name":"sync"},"1113":{"probe_name":"sys","function_name":"symlinkat"},"1112":{"probe_name":"sys","function_name":"symlink"},"1111":{"probe_name":"sys","function_name":"statx"},"1110":{"probe_name":"sys","function_name":"statfs64"},"1108":{"probe_name":"sys","function_name":"stat"},"1107":{"probe_name":"sys","function_name":"setxattr"},"1106":{"probe_name":"sys","function_name":"sendfile64"},"1105":{"probe_name":"sys","function_name":"rmdir"},"1036":{"probe_name":"sys","function_name":"ftruncate"},"1035":{"probe_name":"sys","function_name":"fsync"},"1034":{"probe_name":"sys","function_name":"fstatfs64"},"1033":{"probe_name":"sys","function_name":"fstatfs"},"1032":{"probe_name":"sys","function_name":"fstat"},"1031":{"probe_name":"sys","function_name":"fsetxattr"},"1030":{"probe_name":"sys","function_name":"fremovexattr"},"1029":{"probe_name":"sys","function_name":"flock"},"1027":{"probe_name":"sys","function_name":"fgetxattr"},"1026":{"probe_name":"sys","function_name":"fdatasync"},"3367":{"probe_name":"hdf5","function_name":"H5Gget_info"},"100020":{"probe_name":"custom1","function_name":"openat2"},"7563":{"probe_name":"mpi","function_name":"MPI_Type_get_contents"},"1025":{"probe_name":"sys","function_name":"fcntl"},"3366":{"probe_name":"hdf5","function_name":"H5Gget_create_plist"},"100019":{"probe_name":"custom1","function_name":"open"},"7562":{"probe_name":"mpi","function_name":"MPI_Type_get_attr"},"1024":{"probe_name":"sys","function_name":"fchownat"},"3365":{"probe_name":"hdf5","function_name":"H5Gget_comment"},"100018":{"probe_name":"custom1","function_name":"writev"},"7561":{"probe_name":"mpi","function_name":"MPI_Type_free_keyval"},"1023":{"probe_name":"sys","function_name":"fchown"},"3364":{"probe_name":"hdf5","function_name":"H5Gflush"},"100017":{"probe_name":"custom1","function_name":"readv"},"7560":{"probe_name":"mpi","function_name":"MPI_Type_free"},"1022":{"probe_name":"sys","function_name":"fchmodat2"},"3363":{"probe_name":"hdf5","function_name":"H5Gcreate_async"},"100016":{"probe_name":"custom1","function_name":"readahead"},"7559":{"probe_name":"mpi","function_name":"MPI_Type_f2c"},"1021":{"probe_name":"sys","function_name":"fchmodat"},"3362":{"probe_name":"hdf5","function_name":"H5Gcreate_anon"},"100015":{"probe_name":"custom1","function_name":"pwritev2"},"7558":{"probe_name":"mpi","function_name":"MPI_Type_extent"},"1020":{"probe_name":"sys","function_name":"fchmod"},"3361":{"probe_name":"hdf5","function_name":"H5Gcreate2"},"100014":{"probe_name":"custom1","function_name":"pwritev"},"7557":{"probe_name":"mpi","function_name":"MPI_Type_dup"},"1019":{"probe_name":"sys","function_name":"fchdir"},"3360":{"probe_name":"hdf5","function_name":"H5Gcreate1"},"100013":{"probe_name":"custom1","function_name":"pwrite64"},"7556":{"probe_name":"mpi","function_name":"MPI_Type_delete_attr"},"1009":{"probe_name":"sys","function_name":"eventfd2"},"3350":{"probe_name":"hdf5","function_name":"H5G_root_free"},"100003":{"probe_name":"custom1","function_name":"close"},"7546":{"probe_name":"mpi","function_name":"MPI_Type_create_f90_integer"},"1078":{"probe_name":"sys","function_name":"munmap"},"1008":{"probe_name":"sys","function_name":"dup3"},"3349":{"probe_name":"hdf5","function_name":"H5G_open"},"100002":{"probe_name":"custom1","function_name":"write"},"7545":{"probe_name":"mpi","function_name":"MPI_Type_create_f90_complex"},"1077":{"probe_name":"sys","function_name":"munlockall"},"1005":{"probe_name":"sys","function_name":"creat"},"1004":{"probe_name":"sys","function_name":"copy_file_range"},"1002":{"probe_name":"sys","function_name":"close"},"1001":{"probe_name":"sys","function_name":"chdir"},"1000":{"probe_name":"sys","function_name":"access"},"1007":{"probe_name":"sys","function_name":"dup2"},"3348":{"probe_name":"hdf5","function_name":"H5G_oloc"},"100001":{"probe_name":"custom1","function_name":"read"},"7544":{"probe_name":"mpi","function_name":"MPI_Type_create_darray"},"1076":{"probe_name":"sys","function_name":"munlock"},"1003":{"probe_name":"sys","function_name":"close_range"},"1028":{"probe_name":"sys","function_name":"flistxattr"},"1109":{"probe_name":"sys","function_name":"statfs"},"5087":{"probe_name":"hdf5","function_name":"H5S__extent_copy_real"},"0":{"probe_name":"M","function_name":"SH"},"10273":{"probe_name":"mpi","function_name":"ompi_group_to_proc_name_array"},"2357":{"probe_name":"hdf5","function_name":"H5E_init"},"1082":{"probe_name":"sys","function_name":"open"},"1016":{"probe_name":"sys","function_name":"fallocate"},"3357":{"probe_name":"hdf5","function_name":"H5G_visit"},"100010":{"probe_name":"custom1","function_name":"pread64"},"7553":{"probe_name":"mpi","function_name":"MPI_Type_create_resized"},"1010":{"probe_name":"sys","function_name":"exit"},"3351":{"probe_name":"hdf5","function_name":"H5G_root_loc"},"100004":{"probe_name":"custom1","function_name":"fallocate"},"7547":{"probe_name":"mpi","function_name":"MPI_Type_create_f90_real"},"1067":{"probe_name":"sys","function_name":"mknod"},"1079":{"probe_name":"sys","function_name":"newfstat"},"1006":{"probe_name":"sys","function_name":"dup"},"3347":{"probe_name":"hdf5","function_name":"H5G_obj_remove_by_idx"},"100000":{"probe_name":"custom1","function_name":"openat"},"7543":{"probe_name":"mpi","function_name":"MPI_Type_contiguous"},"1011":{"probe_name":"sys","function_name":"exit_group"},"3352":{"probe_name":"hdf5","function_name":"H5G_rootof"},"100005":{"probe_name":"custom1","function_name":"fdatasync"},"7548":{"probe_name":"mpi","function_name":"MPI_Type_create_hindexed"},"1068":{"probe_name":"sys","function_name":"mknodat"},"1080":{"probe_name":"sys","function_name":"newlstat"},"1012":{"probe_name":"sys","function_name":"faccessat"},"3353":{"probe_name":"hdf5","function_name":"H5G_term_package"},"100006":{"probe_name":"custom1","function_name":"flock"},"7549":{"probe_name":"mpi","function_name":"MPI_Type_create_hindexed_block"},"1069":{"probe_name":"sys","function_name":"mlock"},"1081":{"probe_name":"sys","function_name":"newstat"},"1013":{"probe_name":"sys","function_name":"faccessat2"},"3354":{"probe_name":"hdf5","function_name":"H5G_top_term_package"},"100007":{"probe_name":"custom1","function_name":"fsync"},"7550":{"probe_name":"mpi","function_name":"MPI_Type_create_hvector"},"1070":{"probe_name":"sys","function_name":"mlockall"},"1014":{"probe_name":"sys","function_name":"fadvise64"},"3355":{"probe_name":"hdf5","function_name":"H5G_traverse"},"100008":{"probe_name":"custom1","function_name":"ftruncate"},"7551":{"probe_name":"mpi","function_name":"MPI_Type_create_indexed_block"},"1071":{"probe_name":"sys","function_name":"mmap_pgoff"},"1083":{"probe_name":"sys","function_name":"openat"},"1015":{"probe_name":"sys","function_name":"fadvise64_64"},"3356":{"probe_name":"hdf5","function_name":"H5G_unmount"},"100009":{"probe_name":"custom1","function_name":"lseek"},"7552":{"probe_name":"mpi","function_name":"MPI_Type_create_keyval"},"1072":{"probe_name":"sys","function_name":"move_pages"},"1084":{"probe_name":"sys","function_name":"openat2"},"1073":{"probe_name":"sys","function_name":"mprotect"},"1085":{"probe_name":"sys","function_name":"pidfd_open"},"1017":{"probe_name":"sys","function_name":"fanotify_init"},"3358":{"probe_name":"hdf5","function_name":"H5Gclose"},"100011":{"probe_name":"custom1","function_name":"preadv"},"7554":{"probe_name":"mpi","function_name":"MPI_Type_create_struct"},"1074":{"probe_name":"sys","function_name":"mremap"},"1086":{"probe_name":"sys","function_name":"pipe"},"1018":{"probe_name":"sys","function_name":"fanotify_mark"},"3359":{"probe_name":"hdf5","function_name":"H5Gclose_async"},"100012":{"probe_name":"custom1","function_name":"preadv2"},"7555":{"probe_name":"mpi","function_name":"MPI_Type_create_subarray"},"1075":{"probe_name":"sys","function_name":"msync"},"1087":{"probe_name":"sys","function_name":"pread64"},"1037":{"probe_name":"sys","function_name":"getcwd"},"1038":{"probe_name":"sys","function_name":"getdents"},"1039":{"probe_name":"sys","function_name":"getxattr"},"1040":{"probe_name":"sys","function_name":"inotify_add_watch"},"1041":{"probe_name":"sys","function_name":"inotify_init"},"1042":{"probe_name":"sys","function_name":"inotify_init1"},"1043":{"probe_name":"sys","function_name":"inotify_rm_watch"},"1044":{"probe_name":"sys","function_name":"io_cancel"},"1045":{"probe_name":"sys","function_name":"io_destroy"},"1046":{"probe_name":"sys","function_name":"io_setup"},"1047":{"probe_name":"sys","function_name":"io_submit"},"1048":{"probe_name":"sys","function_name":"io_uring_enter"},"1049":{"probe_name":"sys","function_name":"io_uring_register"},"1050":{"probe_name":"sys","function_name":"io_uring_setup"},"1051":{"probe_name":"sys","function_name":"lgetxattr"},"1052":{"probe_name":"sys","function_name":"link"},"1053":{"probe_name":"sys","function_name":"linkat"},"1054":{"probe_name":"sys","function_name":"listxattr"},"1055":{"probe_name":"sys","function_name":"llistxattr"},"1056":{"probe_name":"sys","function_name":"llseek"},"1057":{"probe_name":"sys","function_name":"lremovexattr"},"1058":{"probe_name":"sys","function_name":"lseek"},"1059":{"probe_name":"sys","function_name":"lsetxattr"},"1060":{"probe_name":"sys","function_name":"lstat"},"1061":{"probe_name":"sys","function_name":"madvise"},"1062":{"probe_name":"sys","function_name":"mbind"},"1063":{"probe_name":"sys","function_name":"migrate_pages"},"1064":{"probe_name":"sys","function_name":"mincore"},"1065":{"probe_name":"sys","function_name":"mkdir"},"1066":{"probe_name":"sys","function_name":"mkdirat"},"1088":{"probe_name":"sys","function_name":"preadv"},"1089":{"probe_name":"sys","function_name":"preadv2"},"1090":{"probe_name":"sys","function_name":"process_madvise"},"1091":{"probe_name":"sys","function_name":"process_mrelease"},"1092":{"probe_name":"sys","function_name":"process_vm_readv"},"1093":{"probe_name":"sys","function_name":"process_vm_writev"},"1094":{"probe_name":"sys","function_name":"pwrite64"},"1095":{"probe_name":"sys","function_name":"pwritev"},"1096":{"probe_name":"sys","function_name":"pwritev2"},"1097":{"probe_name":"sys","function_name":"read"},"1098":{"probe_name":"sys","function_name":"readlink"},"1099":{"probe_name":"sys","function_name":"readlinkat"},"1100":{"probe_name":"sys","function_name":"readv"},"1101":{"probe_name":"sys","function_name":"remap_file_pages"},"1102":{"probe_name":"sys","function_name":"removexattr"},"1103":{"probe_name":"sys","function_name":"rename"},"1104":{"probe_name":"sys","function_name":"renameat"},"1235":{"probe_name":"hdf5","function_name":"H5A__attr_post_copy_file"},"1236":{"probe_name":"hdf5","function_name":"H5A__attr_release_table"},"1237":{"probe_name":"hdf5","function_name":"H5A__close"},"1238":{"probe_name":"hdf5","function_name":"H5A__close_cb"},"1239":{"probe_name":"hdf5","function_name":"H5A__compact_build_table"},"1240":{"probe_name":"hdf5","function_name":"H5A__compact_build_table_cb"},"1241":{"probe_name":"hdf5","function_name":"H5A__copy"},"1242":{"probe_name":"hdf5","function_name":"H5A__create"},"1243":{"probe_name":"hdf5","function_name":"H5A__create_api_common"},"1244":{"probe_name":"hdf5","function_name":"H5A__create_by_name"},"1245":{"probe_name":"hdf5","function_name":"H5A__create_by_name_api_common"},"1246":{"probe_name":"hdf5","function_name":"H5A__delete_by_idx"},"1247":{"probe_name":"hdf5","function_name":"H5A__delete_by_name"},"1248":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_corder_compare"},"1249":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_corder_debug"},"1250":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_corder_decode"},"1251":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_corder_encode"},"1252":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_corder_store"},"1253":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_name_compare"},"1254":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_name_debug"},"1255":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_name_decode"},"1256":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_name_encode"},"1257":{"probe_name":"hdf5","function_name":"H5A__dense_btree2_name_store"},"1258":{"probe_name":"hdf5","function_name":"H5A__dense_build_table"},"1259":{"probe_name":"hdf5","function_name":"H5A__dense_build_table_cb"},"1260":{"probe_name":"hdf5","function_name":"H5A__dense_copy_fh_cb"},"1261":{"probe_name":"hdf5","function_name":"H5A__dense_create"},"1262":{"probe_name":"hdf5","function_name":"H5A__dense_delete"},"1263":{"probe_name":"hdf5","function_name":"H5A__dense_delete_bt2_cb"},"1264":{"probe_name":"hdf5","function_name":"H5A__dense_exists"},"1265":{"probe_name":"hdf5","function_name":"H5A__dense_fh_name_cmp"},"1266":{"probe_name":"hdf5","function_name":"H5A__dense_fnd_cb"},"1267":{"probe_name":"hdf5","function_name":"H5A__dense_insert"},"1268":{"probe_name":"hdf5","function_name":"H5A__dense_iterate"},"1269":{"probe_name":"hdf5","function_name":"H5A__dense_iterate_bt2_cb"},"1270":{"probe_name":"hdf5","function_name":"H5A__dense_open"},"1271":{"probe_name":"hdf5","function_name":"H5A__dense_post_copy_file_all"},"1272":{"probe_name":"hdf5","function_name":"H5A__dense_post_copy_file_cb"},"1273":{"probe_name":"hdf5","function_name":"H5A__dense_remove"},"1274":{"probe_name":"hdf5","function_name":"H5A__dense_remove_bt2_cb"},"1275":{"probe_name":"hdf5","function_name":"H5A__dense_remove_by_idx"},"1276":{"probe_name":"hdf5","function_name":"H5A__dense_remove_by_idx_bt2_cb"},"1277":{"probe_name":"hdf5","function_name":"H5A__dense_rename"},"1278":{"probe_name":"hdf5","function_name":"H5A__dense_write"},"1279":{"probe_name":"hdf5","function_name":"H5A__dense_write_bt2_cb"},"1280":{"probe_name":"hdf5","function_name":"H5A__dense_write_bt2_cb2"},"1281":{"probe_name":"hdf5","function_name":"H5A__exists_by_name"},"1282":{"probe_name":"hdf5","function_name":"H5A__get_ainfo"},"1283":{"probe_name":"hdf5","function_name":"H5A__get_create_plist"},"1284":{"probe_name":"hdf5","function_name":"H5A__get_info"},"1285":{"probe_name":"hdf5","function_name":"H5A__get_name"},"1286":{"probe_name":"hdf5","function_name":"H5A__get_shared_rc_test"},"1287":{"probe_name":"hdf5","function_name":"H5A__get_type"},"1288":{"probe_name":"hdf5","function_name":"H5A__is_shared_test"},"1289":{"probe_name":"hdf5","function_name":"H5A__iterate"},"1290":{"probe_name":"hdf5","function_name":"H5A__iterate_old"},"1291":{"probe_name":"hdf5","function_name":"H5A__open"},"1292":{"probe_name":"hdf5","function_name":"H5A__open_by_idx"},"1293":{"probe_name":"hdf5","function_name":"H5A__open_by_name"},"1294":{"probe_name":"hdf5","function_name":"H5A__open_common:0x6a920"},"1295":{"probe_name":"hdf5","function_name":"H5A__open_common:0x76bf0"},"1296":{"probe_name":"hdf5","function_name":"H5A__read"},"1297":{"probe_name":"hdf5","function_name":"H5A__rename_by_name"},"1298":{"probe_name":"hdf5","function_name":"H5A__set_version"},"1299":{"probe_name":"hdf5","function_name":"H5A__shared_free"},"1300":{"probe_name":"hdf5","function_name":"H5A__write"},"1301":{"probe_name":"hdf5","function_name":"H5A_get_space"},"1302":{"probe_name":"hdf5","function_name":"H5A_init"},"1303":{"probe_name":"hdf5","function_name":"H5A_nameof"},"1304":{"probe_name":"hdf5","function_name":"H5A_oloc"},"1305":{"probe_name":"hdf5","function_name":"H5A_term_package"},"1306":{"probe_name":"hdf5","function_name":"H5A_top_term_package"},"1307":{"probe_name":"hdf5","function_name":"H5A_type"},"1308":{"probe_name":"hdf5","function_name":"H5Aclose"},"1309":{"probe_name":"hdf5","function_name":"H5Aclose_async"},"1310":{"probe_name":"hdf5","function_name":"H5Acreate1"},"1311":{"probe_name":"hdf5","function_name":"H5Acreate2"},"1312":{"probe_name":"hdf5","function_name":"H5Acreate_async"},"1313":{"probe_name":"hdf5","function_name":"H5Acreate_by_name"},"1314":{"probe_name":"hdf5","function_name":"H5Acreate_by_name_async"},"1315":{"probe_name":"hdf5","function_name":"H5Adelete"},"1316":{"probe_name":"hdf5","function_name":"H5Adelete_by_idx"},"1317":{"probe_name":"hdf5","function_name":"H5Adelete_by_name"},"1318":{"probe_name":"hdf5","function_name":"H5Aexists"},"1319":{"probe_name":"hdf5","function_name":"H5Aexists_async"},"1320":{"probe_name":"hdf5","function_name":"H5Aexists_by_name"},"1321":{"probe_name":"hdf5","function_name":"H5Aexists_by_name_async"},"1322":{"probe_name":"hdf5","function_name":"H5Aget_create_plist"},"1323":{"probe_name":"hdf5","function_name":"H5Aget_info"},"1324":{"probe_name":"hdf5","function_name":"H5Aget_info_by_idx"},"1325":{"probe_name":"hdf5","function_name":"H5Aget_info_by_name"},"1326":{"probe_name":"hdf5","function_name":"H5Aget_name"},"1327":{"probe_name":"hdf5","function_name":"H5Aget_name_by_idx"},"1328":{"probe_name":"hdf5","function_name":"H5Aget_num_attrs"},"1329":{"probe_name":"hdf5","function_name":"H5Aget_space"},"1330":{"probe_name":"hdf5","function_name":"H5Aget_storage_size"},"1331":{"probe_name":"hdf5","function_name":"H5Aget_type"},"1332":{"probe_name":"hdf5","function_name":"H5Aiterate1"},"1333":{"probe_name":"hdf5","function_name":"H5Aiterate2"},"1334":{"probe_name":"hdf5","function_name":"H5Aiterate_by_name"},"1335":{"probe_name":"hdf5","function_name":"H5Aopen"},"1336":{"probe_name":"hdf5","function_name":"H5Aopen_async"},"1337":{"probe_name":"hdf5","function_name":"H5Aopen_by_idx"},"1338":{"probe_name":"hdf5","function_name":"H5Aopen_by_idx_async"},"1339":{"probe_name":"hdf5","function_name":"H5Aopen_by_name"},"1340":{"probe_name":"hdf5","function_name":"H5Aopen_by_name_async"},"1341":{"probe_name":"hdf5","function_name":"H5Aopen_idx"},"1342":{"probe_name":"hdf5","function_name":"H5Aopen_name"},"1343":{"probe_name":"hdf5","function_name":"H5Aread"},"1344":{"probe_name":"hdf5","function_name":"H5Aread_async"},"1345":{"probe_name":"hdf5","function_name":"H5Arename"},"1346":{"probe_name":"hdf5","function_name":"H5Arename_async"},"1347":{"probe_name":"hdf5","function_name":"H5Arename_by_name"},"1348":{"probe_name":"hdf5","function_name":"H5Arename_by_name_async"},"1349":{"probe_name":"hdf5","function_name":"H5Awrite"},"1350":{"probe_name":"hdf5","function_name":"H5Awrite_async"},"1351":{"probe_name":"hdf5","function_name":"H5B2__cache_hdr_deserialize"},"1352":{"probe_name":"hdf5","function_name":"H5B2__cache_hdr_free_icr"},"1353":{"probe_name":"hdf5","function_name":"H5B2__cache_hdr_get_initial_load_size"},"1354":{"probe_name":"hdf5","function_name":"H5B2__cache_hdr_image_len"},"1355":{"probe_name":"hdf5","function_name":"H5B2__cache_hdr_notify"},"1356":{"probe_name":"hdf5","function_name":"H5B2__cache_hdr_serialize"},"1357":{"probe_name":"hdf5","function_name":"H5B2__cache_hdr_verify_chksum"},"1358":{"probe_name":"hdf5","function_name":"H5B2__cache_int_deserialize"},"1359":{"probe_name":"hdf5","function_name":"H5B2__cache_int_free_icr"},"1360":{"probe_name":"hdf5","function_name":"H5B2__cache_int_get_initial_load_size"},"1361":{"probe_name":"hdf5","function_name":"H5B2__cache_int_image_len"},"1362":{"probe_name":"hdf5","function_name":"H5B2__cache_int_notify"},"1363":{"probe_name":"hdf5","function_name":"H5B2__cache_int_serialize"},"1364":{"probe_name":"hdf5","function_name":"H5B2__cache_int_verify_chksum"},"1365":{"probe_name":"hdf5","function_name":"H5B2__cache_leaf_deserialize"},"1366":{"probe_name":"hdf5","function_name":"H5B2__cache_leaf_free_icr"},"1367":{"probe_name":"hdf5","function_name":"H5B2__cache_leaf_get_initial_load_size"},"1368":{"probe_name":"hdf5","function_name":"H5B2__cache_leaf_image_len"},"1369":{"probe_name":"hdf5","function_name":"H5B2__cache_leaf_notify"},"1370":{"probe_name":"hdf5","function_name":"H5B2__cache_leaf_serialize"},"1371":{"probe_name":"hdf5","function_name":"H5B2__cache_leaf_verify_chksum"},"1372":{"probe_name":"hdf5","function_name":"H5B2__create_flush_depend"},"1373":{"probe_name":"hdf5","function_name":"H5B2__create_internal"},"1374":{"probe_name":"hdf5","function_name":"H5B2__create_leaf"},"1375":{"probe_name":"hdf5","function_name":"H5B2__delete_node"},"1376":{"probe_name":"hdf5","function_name":"H5B2__delete_node.localalias"},"1377":{"probe_name":"hdf5","function_name":"H5B2__destroy_flush_depend"},"1378":{"probe_name":"hdf5","function_name":"H5B2__get_node_depth_test"},"1379":{"probe_name":"hdf5","function_name":"H5B2__get_node_info_test"},"1380":{"probe_name":"hdf5","function_name":"H5B2__get_root_addr_test"},"1381":{"probe_name":"hdf5","function_name":"H5B2__hdr_alloc"},"1382":{"probe_name":"hdf5","function_name":"H5B2__hdr_create"},"1383":{"probe_name":"hdf5","function_name":"H5B2__hdr_debug"},"1384":{"probe_name":"hdf5","function_name":"H5B2__hdr_decr"},"1385":{"probe_name":"hdf5","function_name":"H5B2__hdr_delete"},"1386":{"probe_name":"hdf5","function_name":"H5B2__hdr_dirty"},"1387":{"probe_name":"hdf5","function_name":"H5B2__hdr_free"},"1388":{"probe_name":"hdf5","function_name":"H5B2__hdr_fuse_decr"},"1389":{"probe_name":"hdf5","function_name":"H5B2__hdr_fuse_incr"},"1390":{"probe_name":"hdf5","function_name":"H5B2__hdr_incr"},"1391":{"probe_name":"hdf5","function_name":"H5B2__hdr_init"},"1392":{"probe_name":"hdf5","function_name":"H5B2__hdr_protect"},"1393":{"probe_name":"hdf5","function_name":"H5B2__hdr_unprotect"},"1394":{"probe_name":"hdf5","function_name":"H5B2__insert"},"1395":{"probe_name":"hdf5","function_name":"H5B2__insert_internal"},"1396":{"probe_name":"hdf5","function_name":"H5B2__insert_internal.localalias"},"1397":{"probe_name":"hdf5","function_name":"H5B2__insert_leaf"},"1398":{"probe_name":"hdf5","function_name":"H5B2__int_debug"},"1399":{"probe_name":"hdf5","function_name":"H5B2__internal_free"},"1400":{"probe_name":"hdf5","function_name":"H5B2__iterate_node"},"1401":{"probe_name":"hdf5","function_name":"H5B2__iterate_node.localalias"},"1402":{"probe_name":"hdf5","function_name":"H5B2__leaf_debug"},"1403":{"probe_name":"hdf5","function_name":"H5B2__leaf_free"},"1404":{"probe_name":"hdf5","function_name":"H5B2__locate_record"},"1405":{"probe_name":"hdf5","function_name":"H5B2__merge2"},"1406":{"probe_name":"hdf5","function_name":"H5B2__merge3"},"1407":{"probe_name":"hdf5","function_name":"H5B2__neighbor_internal"},"1408":{"probe_name":"hdf5","function_name":"H5B2__neighbor_internal.localalias"},"1409":{"probe_name":"hdf5","function_name":"H5B2__neighbor_leaf"},"1410":{"probe_name":"hdf5","function_name":"H5B2__node_size"},"1411":{"probe_name":"hdf5","function_name":"H5B2__node_size.localalias"},"1412":{"probe_name":"hdf5","function_name":"H5B2__protect_internal"},"1413":{"probe_name":"hdf5","function_name":"H5B2__protect_leaf"},"1414":{"probe_name":"hdf5","function_name":"H5B2__redistribute2"},"1415":{"probe_name":"hdf5","function_name":"H5B2__redistribute3"},"1416":{"probe_name":"hdf5","function_name":"H5B2__remove_internal"},"1417":{"probe_name":"hdf5","function_name":"H5B2__remove_internal.localalias"},"1418":{"probe_name":"hdf5","function_name":"H5B2__remove_internal_by_idx"},"1419":{"probe_name":"hdf5","function_name":"H5B2__remove_internal_by_idx.localalias"},"1420":{"probe_name":"hdf5","function_name":"H5B2__remove_leaf"},"1421":{"probe_name":"hdf5","function_name":"H5B2__remove_leaf_by_idx"},"1422":{"probe_name":"hdf5","function_name":"H5B2__shadow_internal"},"1423":{"probe_name":"hdf5","function_name":"H5B2__shadow_leaf"},"1424":{"probe_name":"hdf5","function_name":"H5B2__split1"},"1425":{"probe_name":"hdf5","function_name":"H5B2__split_root"},"1426":{"probe_name":"hdf5","function_name":"H5B2__swap_leaf"},"1427":{"probe_name":"hdf5","function_name":"H5B2__test2_compare"},"1428":{"probe_name":"hdf5","function_name":"H5B2__test2_debug"},"1429":{"probe_name":"hdf5","function_name":"H5B2__test2_decode"},"1430":{"probe_name":"hdf5","function_name":"H5B2__test2_encode"},"1431":{"probe_name":"hdf5","function_name":"H5B2__test2_store"},"1432":{"probe_name":"hdf5","function_name":"H5B2__test_compare"},"1433":{"probe_name":"hdf5","function_name":"H5B2__test_crt_context"},"1434":{"probe_name":"hdf5","function_name":"H5B2__test_debug"},"1435":{"probe_name":"hdf5","function_name":"H5B2__test_decode"},"1436":{"probe_name":"hdf5","function_name":"H5B2__test_dst_context"},"1437":{"probe_name":"hdf5","function_name":"H5B2__test_encode"},"1438":{"probe_name":"hdf5","function_name":"H5B2__test_store"},"1439":{"probe_name":"hdf5","function_name":"H5B2__update_flush_depend"},"1440":{"probe_name":"hdf5","function_name":"H5B2__update_internal"},"1441":{"probe_name":"hdf5","function_name":"H5B2__update_internal.localalias"},"1442":{"probe_name":"hdf5","function_name":"H5B2__update_leaf"},"1443":{"probe_name":"hdf5","function_name":"H5B2_close"},"1444":{"probe_name":"hdf5","function_name":"H5B2_create"},"1445":{"probe_name":"hdf5","function_name":"H5B2_delete"},"1446":{"probe_name":"hdf5","function_name":"H5B2_depend"},"1447":{"probe_name":"hdf5","function_name":"H5B2_find"},"1448":{"probe_name":"hdf5","function_name":"H5B2_get_addr"},"1449":{"probe_name":"hdf5","function_name":"H5B2_get_nrec"},"1450":{"probe_name":"hdf5","function_name":"H5B2_index"},"1451":{"probe_name":"hdf5","function_name":"H5B2_insert"},"1452":{"probe_name":"hdf5","function_name":"H5B2_iterate"},"1453":{"probe_name":"hdf5","function_name":"H5B2_modify"},"1454":{"probe_name":"hdf5","function_name":"H5B2_neighbor"},"1455":{"probe_name":"hdf5","function_name":"H5B2_open"},"1456":{"probe_name":"hdf5","function_name":"H5B2_patch_file"},"1457":{"probe_name":"hdf5","function_name":"H5B2_remove"},"1458":{"probe_name":"hdf5","function_name":"H5B2_remove_by_idx"},"1459":{"probe_name":"hdf5","function_name":"H5B2_size"},"1460":{"probe_name":"hdf5","function_name":"H5B2_stat_info"},"1461":{"probe_name":"hdf5","function_name":"H5B2_update"},"1462":{"probe_name":"hdf5","function_name":"H5B__cache_deserialize"},"1463":{"probe_name":"hdf5","function_name":"H5B__cache_free_icr"},"1464":{"probe_name":"hdf5","function_name":"H5B__cache_get_initial_load_size"},"1465":{"probe_name":"hdf5","function_name":"H5B__cache_image_len"},"1466":{"probe_name":"hdf5","function_name":"H5B__cache_serialize"},"1467":{"probe_name":"hdf5","function_name":"H5B__get_info_helper"},"1468":{"probe_name":"hdf5","function_name":"H5B__insert_helper"},"1469":{"probe_name":"hdf5","function_name":"H5B__iterate_helper"},"1470":{"probe_name":"hdf5","function_name":"H5B__node_dest"},"1471":{"probe_name":"hdf5","function_name":"H5B__remove_helper"},"1472":{"probe_name":"hdf5","function_name":"H5B__verify_structure"},"1473":{"probe_name":"hdf5","function_name":"H5B_create"},"1474":{"probe_name":"hdf5","function_name":"H5B_debug"},"1475":{"probe_name":"hdf5","function_name":"H5B_delete"},"1476":{"probe_name":"hdf5","function_name":"H5B_delete.localalias"},"1477":{"probe_name":"hdf5","function_name":"H5B_find"},"1478":{"probe_name":"hdf5","function_name":"H5B_find.localalias"},"1479":{"probe_name":"hdf5","function_name":"H5B_get_info"},"1480":{"probe_name":"hdf5","function_name":"H5B_insert"},"1481":{"probe_name":"hdf5","function_name":"H5B_iterate"},"1482":{"probe_name":"hdf5","function_name":"H5B_remove"},"1483":{"probe_name":"hdf5","function_name":"H5B_shared_free"},"1484":{"probe_name":"hdf5","function_name":"H5B_shared_new"},"1485":{"probe_name":"hdf5","function_name":"H5B_valid"},"1486":{"probe_name":"hdf5","function_name":"H5CX__pop_common"},"1487":{"probe_name":"hdf5","function_name":"H5CX_free_state"},"1488":{"probe_name":"hdf5","function_name":"H5CX_get_actual_selection_io_mode"},"1489":{"probe_name":"hdf5","function_name":"H5CX_get_bkgr_buf"},"1490":{"probe_name":"hdf5","function_name":"H5CX_get_bkgr_buf_type"},"1491":{"probe_name":"hdf5","function_name":"H5CX_get_btree_split_ratios"},"1492":{"probe_name":"hdf5","function_name":"H5CX_get_coll_metadata_read"},"1493":{"probe_name":"hdf5","function_name":"H5CX_get_data_transform"},"1494":{"probe_name":"hdf5","function_name":"H5CX_get_dset_min_ohdr_flag"},"1495":{"probe_name":"hdf5","function_name":"H5CX_get_dt_conv_cb"},"1496":{"probe_name":"hdf5","function_name":"H5CX_get_dxpl"},"1497":{"probe_name":"hdf5","function_name":"H5CX_get_encoding"},"1498":{"probe_name":"hdf5","function_name":"H5CX_get_err_detect"},"1499":{"probe_name":"hdf5","function_name":"H5CX_get_ext_file_prefix"},"1500":{"probe_name":"hdf5","function_name":"H5CX_get_filter_cb"},"1501":{"probe_name":"hdf5","function_name":"H5CX_get_intermediate_group"},"1502":{"probe_name":"hdf5","function_name":"H5CX_get_io_xfer_mode"},"1503":{"probe_name":"hdf5","function_name":"H5CX_get_lapl"},"1504":{"probe_name":"hdf5","function_name":"H5CX_get_libver_bounds"},"1505":{"probe_name":"hdf5","function_name":"H5CX_get_max_temp_buf"},"1506":{"probe_name":"hdf5","function_name":"H5CX_get_modify_write_buf"},"1507":{"probe_name":"hdf5","function_name":"H5CX_get_mpi_coll_datatypes"},"1508":{"probe_name":"hdf5","function_name":"H5CX_get_mpi_file_flushing"},"1509":{"probe_name":"hdf5","function_name":"H5CX_get_mpio_chunk_opt_mode"},"1510":{"probe_name":"hdf5","function_name":"H5CX_get_mpio_chunk_opt_num"},"1511":{"probe_name":"hdf5","function_name":"H5CX_get_mpio_chunk_opt_ratio"},"1512":{"probe_name":"hdf5","function_name":"H5CX_get_mpio_coll_opt"},"1513":{"probe_name":"hdf5","function_name":"H5CX_get_mpio_global_no_coll_cause"},"1514":{"probe_name":"hdf5","function_name":"H5CX_get_mpio_local_no_coll_cause"},"1515":{"probe_name":"hdf5","function_name":"H5CX_get_mpio_rank0_bcast"},"1516":{"probe_name":"hdf5","function_name":"H5CX_get_nlinks"},"1517":{"probe_name":"hdf5","function_name":"H5CX_get_no_selection_io_cause"},"1518":{"probe_name":"hdf5","function_name":"H5CX_get_ohdr_flags"},"2087":{"probe_name":"hdf5","function_name":"H5D__typeinfo_init_phase2"},"2088":{"probe_name":"hdf5","function_name":"H5D__typeinfo_init_phase3.part.0"},"2089":{"probe_name":"hdf5","function_name":"H5D__virtual_build_source_name.part.0"},"2090":{"probe_name":"hdf5","function_name":"H5D__virtual_copy"},"2091":{"probe_name":"hdf5","function_name":"H5D__virtual_copy_layout"},"2092":{"probe_name":"hdf5","function_name":"H5D__virtual_copy_parsed_name"},"2093":{"probe_name":"hdf5","function_name":"H5D__virtual_delete"},"2094":{"probe_name":"hdf5","function_name":"H5D__virtual_flush"},"2095":{"probe_name":"hdf5","function_name":"H5D__virtual_hold_source_dset_files"},"2096":{"probe_name":"hdf5","function_name":"H5D__virtual_init"},"2097":{"probe_name":"hdf5","function_name":"H5D__virtual_io_init"},"2098":{"probe_name":"hdf5","function_name":"H5D__virtual_is_data_cached"},"2099":{"probe_name":"hdf5","function_name":"H5D__virtual_is_space_alloc"},"2100":{"probe_name":"hdf5","function_name":"H5D__virtual_open_source_dset"},"2101":{"probe_name":"hdf5","function_name":"H5D__virtual_post_io"},"2102":{"probe_name":"hdf5","function_name":"H5D__virtual_pre_io.isra.0"},"2103":{"probe_name":"hdf5","function_name":"H5D__virtual_read"},"2104":{"probe_name":"hdf5","function_name":"H5D__virtual_read_one"},"2105":{"probe_name":"hdf5","function_name":"H5D__virtual_refresh_source_dset"},"2106":{"probe_name":"hdf5","function_name":"H5D__virtual_refresh_source_dsets"},"2107":{"probe_name":"hdf5","function_name":"H5D__virtual_release_source_dset_files"},"2108":{"probe_name":"hdf5","function_name":"H5D__virtual_reset_layout"},"2109":{"probe_name":"hdf5","function_name":"H5D__virtual_set_extent_unlim"},"2110":{"probe_name":"hdf5","function_name":"H5D__virtual_store_layout"},"2111":{"probe_name":"hdf5","function_name":"H5D__virtual_str_append"},"2112":{"probe_name":"hdf5","function_name":"H5D__virtual_write"},"2113":{"probe_name":"hdf5","function_name":"H5D__virtual_write_one"},"2114":{"probe_name":"hdf5","function_name":"H5D__vlen_get_buf_size"},"2115":{"probe_name":"hdf5","function_name":"H5D__vlen_get_buf_size_alloc"},"2116":{"probe_name":"hdf5","function_name":"H5D__vlen_get_buf_size_cb"},"2117":{"probe_name":"hdf5","function_name":"H5D__vlen_get_buf_size_gen"},"2118":{"probe_name":"hdf5","function_name":"H5D__vlen_get_buf_size_gen_cb"},"2119":{"probe_name":"hdf5","function_name":"H5D__write"},"2120":{"probe_name":"hdf5","function_name":"H5D__write_api_common"},"2121":{"probe_name":"hdf5","function_name":"H5D__write_api_common.constprop.0"},"2122":{"probe_name":"hdf5","function_name":"H5D_btree_debug"},"2123":{"probe_name":"hdf5","function_name":"H5D_chunk_idx_reset"},"2124":{"probe_name":"hdf5","function_name":"H5D_close"},"2125":{"probe_name":"hdf5","function_name":"H5D_close.localalias"},"2126":{"probe_name":"hdf5","function_name":"H5D_flush_all"},"2127":{"probe_name":"hdf5","function_name":"H5D_get_access_plist"},"2128":{"probe_name":"hdf5","function_name":"H5D_get_create_plist"},"2129":{"probe_name":"hdf5","function_name":"H5D_get_dcpl_id"},"2130":{"probe_name":"hdf5","function_name":"H5D_init"},"2131":{"probe_name":"hdf5","function_name":"H5D_mult_refresh_close"},"2132":{"probe_name":"hdf5","function_name":"H5D_mult_refresh_reopen"},"2133":{"probe_name":"hdf5","function_name":"H5D_nameof"},"2134":{"probe_name":"hdf5","function_name":"H5D_oloc"},"2135":{"probe_name":"hdf5","function_name":"H5D_open"},"2136":{"probe_name":"hdf5","function_name":"H5D_select_io_mem"},"2137":{"probe_name":"hdf5","function_name":"H5D_term_package"},"2138":{"probe_name":"hdf5","function_name":"H5D_top_term_package"},"2139":{"probe_name":"hdf5","function_name":"H5D_virtual_check_mapping_post"},"2140":{"probe_name":"hdf5","function_name":"H5D_virtual_check_mapping_pre"},"2141":{"probe_name":"hdf5","function_name":"H5D_virtual_check_min_dims"},"2142":{"probe_name":"hdf5","function_name":"H5D_virtual_free_parsed_name"},"2143":{"probe_name":"hdf5","function_name":"H5D_virtual_parse_source_name"},"2144":{"probe_name":"hdf5","function_name":"H5D_virtual_update_min_dims"},"2145":{"probe_name":"hdf5","function_name":"H5Dchunk_iter"},"2146":{"probe_name":"hdf5","function_name":"H5Dclose"},"2147":{"probe_name":"hdf5","function_name":"H5Dclose_async"},"2148":{"probe_name":"hdf5","function_name":"H5Dcreate1"},"2149":{"probe_name":"hdf5","function_name":"H5Dcreate2"},"2150":{"probe_name":"hdf5","function_name":"H5Dcreate_anon"},"2151":{"probe_name":"hdf5","function_name":"H5Dcreate_async"},"2152":{"probe_name":"hdf5","function_name":"H5Ddebug"},"2153":{"probe_name":"hdf5","function_name":"H5Dextend"},"2154":{"probe_name":"hdf5","function_name":"H5Dfill"},"2155":{"probe_name":"hdf5","function_name":"H5Dflush"},"2156":{"probe_name":"hdf5","function_name":"H5Dformat_convert"},"2157":{"probe_name":"hdf5","function_name":"H5Dgather"},"2158":{"probe_name":"hdf5","function_name":"H5Dget_access_plist"},"2159":{"probe_name":"hdf5","function_name":"H5Dget_chunk_index_type"},"2160":{"probe_name":"hdf5","function_name":"H5Dget_chunk_info"},"2161":{"probe_name":"hdf5","function_name":"H5Dget_chunk_info_by_coord"},"2162":{"probe_name":"hdf5","function_name":"H5Dget_chunk_storage_size"},"2163":{"probe_name":"hdf5","function_name":"H5Dget_create_plist"},"2164":{"probe_name":"hdf5","function_name":"H5Dget_num_chunks"},"2165":{"probe_name":"hdf5","function_name":"H5Dget_offset"},"2166":{"probe_name":"hdf5","function_name":"H5Dget_space"},"2167":{"probe_name":"hdf5","function_name":"H5Dget_space_async"},"2168":{"probe_name":"hdf5","function_name":"H5Dget_space_status"},"2169":{"probe_name":"hdf5","function_name":"H5Dget_storage_size"},"2170":{"probe_name":"hdf5","function_name":"H5Dget_type"},"2171":{"probe_name":"hdf5","function_name":"H5Diterate"},"2172":{"probe_name":"hdf5","function_name":"H5Dopen1"},"2173":{"probe_name":"hdf5","function_name":"H5Dopen2"},"2174":{"probe_name":"hdf5","function_name":"H5Dopen_async"},"2175":{"probe_name":"hdf5","function_name":"H5Dread"},"2176":{"probe_name":"hdf5","function_name":"H5Dread_async"},"2177":{"probe_name":"hdf5","function_name":"H5Dread_chunk"},"2178":{"probe_name":"hdf5","function_name":"H5Dread_multi"},"2179":{"probe_name":"hdf5","function_name":"H5Dread_multi_async"},"2180":{"probe_name":"hdf5","function_name":"H5Drefresh"},"2181":{"probe_name":"hdf5","function_name":"H5Dscatter"},"2182":{"probe_name":"hdf5","function_name":"H5Dset_extent"},"2183":{"probe_name":"hdf5","function_name":"H5Dset_extent_async"},"2184":{"probe_name":"hdf5","function_name":"H5Dvlen_get_buf_size"},"2185":{"probe_name":"hdf5","function_name":"H5Dvlen_reclaim"},"2186":{"probe_name":"hdf5","function_name":"H5Dwrite"},"2187":{"probe_name":"hdf5","function_name":"H5Dwrite_async"},"2188":{"probe_name":"hdf5","function_name":"H5Dwrite_chunk"},"2189":{"probe_name":"hdf5","function_name":"H5Dwrite_multi"},"2190":{"probe_name":"hdf5","function_name":"H5Dwrite_multi_async"},"2191":{"probe_name":"hdf5","function_name":"H5EA__cache_dblk_page_deserialize"},"2192":{"probe_name":"hdf5","function_name":"H5EA__cache_dblk_page_free_icr"},"2193":{"probe_name":"hdf5","function_name":"H5EA__cache_dblk_page_get_initial_load_size"},"2194":{"probe_name":"hdf5","function_name":"H5EA__cache_dblk_page_image_len"},"2195":{"probe_name":"hdf5","function_name":"H5EA__cache_dblk_page_notify"},"2196":{"probe_name":"hdf5","function_name":"H5EA__cache_dblk_page_serialize"},"2197":{"probe_name":"hdf5","function_name":"H5EA__cache_dblk_page_verify_chksum"},"2198":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_deserialize"},"2199":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_free_icr"},"2200":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_fsf_size"},"2201":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_get_initial_load_size"},"2202":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_image_len"},"2203":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_notify"},"2204":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_serialize"},"2205":{"probe_name":"hdf5","function_name":"H5EA__cache_dblock_verify_chksum"},"2206":{"probe_name":"hdf5","function_name":"H5EA__cache_hdr_deserialize"},"2207":{"probe_name":"hdf5","function_name":"H5EA__cache_hdr_free_icr"},"2208":{"probe_name":"hdf5","function_name":"H5EA__cache_hdr_get_initial_load_size"},"2209":{"probe_name":"hdf5","function_name":"H5EA__cache_hdr_image_len"},"2210":{"probe_name":"hdf5","function_name":"H5EA__cache_hdr_notify"},"2211":{"probe_name":"hdf5","function_name":"H5EA__cache_hdr_serialize"},"2212":{"probe_name":"hdf5","function_name":"H5EA__cache_hdr_verify_chksum"},"2213":{"probe_name":"hdf5","function_name":"H5EA__cache_iblock_deserialize"},"2214":{"probe_name":"hdf5","function_name":"H5EA__cache_iblock_free_icr"},"2215":{"probe_name":"hdf5","function_name":"H5EA__cache_iblock_get_initial_load_size"},"2216":{"probe_name":"hdf5","function_name":"H5EA__cache_iblock_image_len"},"2217":{"probe_name":"hdf5","function_name":"H5EA__cache_iblock_notify"},"2218":{"probe_name":"hdf5","function_name":"H5EA__cache_iblock_serialize"},"2219":{"probe_name":"hdf5","function_name":"H5EA__cache_iblock_verify_chksum"},"2220":{"probe_name":"hdf5","function_name":"H5EA__cache_sblock_deserialize"},"2221":{"probe_name":"hdf5","function_name":"H5EA__cache_sblock_free_icr"},"2222":{"probe_name":"hdf5","function_name":"H5EA__cache_sblock_get_initial_load_size"},"2223":{"probe_name":"hdf5","function_name":"H5EA__cache_sblock_image_len"},"2224":{"probe_name":"hdf5","function_name":"H5EA__cache_sblock_notify"},"2225":{"probe_name":"hdf5","function_name":"H5EA__cache_sblock_serialize"},"2226":{"probe_name":"hdf5","function_name":"H5EA__cache_sblock_verify_chksum"},"2227":{"probe_name":"hdf5","function_name":"H5EA__cmp_cparam_test"},"2228":{"probe_name":"hdf5","function_name":"H5EA__create_flush_depend"},"2229":{"probe_name":"hdf5","function_name":"H5EA__dblk_page_alloc"},"2230":{"probe_name":"hdf5","function_name":"H5EA__dblk_page_create"},"2231":{"probe_name":"hdf5","function_name":"H5EA__dblk_page_dest"},"2232":{"probe_name":"hdf5","function_name":"H5EA__dblk_page_protect"},"2233":{"probe_name":"hdf5","function_name":"H5EA__dblk_page_unprotect"},"2234":{"probe_name":"hdf5","function_name":"H5EA__dblock_alloc"},"2235":{"probe_name":"hdf5","function_name":"H5EA__dblock_create"},"2236":{"probe_name":"hdf5","function_name":"H5EA__dblock_debug"},"2237":{"probe_name":"hdf5","function_name":"H5EA__dblock_delete"},"2238":{"probe_name":"hdf5","function_name":"H5EA__dblock_dest"},"2239":{"probe_name":"hdf5","function_name":"H5EA__dblock_protect"},"2240":{"probe_name":"hdf5","function_name":"H5EA__dblock_sblk_idx"},"2241":{"probe_name":"hdf5","function_name":"H5EA__dblock_unprotect"},"2242":{"probe_name":"hdf5","function_name":"H5EA__destroy_flush_depend"},"2243":{"probe_name":"hdf5","function_name":"H5EA__get_cparam_test"},"2244":{"probe_name":"hdf5","function_name":"H5EA__hdr_alloc"},"2245":{"probe_name":"hdf5","function_name":"H5EA__hdr_alloc_elmts"},"2246":{"probe_name":"hdf5","function_name":"H5EA__hdr_create"},"2247":{"probe_name":"hdf5","function_name":"H5EA__hdr_debug"},"2248":{"probe_name":"hdf5","function_name":"H5EA__hdr_decr"},"2249":{"probe_name":"hdf5","function_name":"H5EA__hdr_delete"},"2250":{"probe_name":"hdf5","function_name":"H5EA__hdr_dest"},"2251":{"probe_name":"hdf5","function_name":"H5EA__hdr_free_elmts"},"2252":{"probe_name":"hdf5","function_name":"H5EA__hdr_fuse_decr"},"2253":{"probe_name":"hdf5","function_name":"H5EA__hdr_fuse_incr"},"2254":{"probe_name":"hdf5","function_name":"H5EA__hdr_incr"},"2255":{"probe_name":"hdf5","function_name":"H5EA__hdr_init"},"2256":{"probe_name":"hdf5","function_name":"H5EA__hdr_modified"},"2257":{"probe_name":"hdf5","function_name":"H5EA__hdr_protect"},"2258":{"probe_name":"hdf5","function_name":"H5EA__hdr_unprotect"},"2259":{"probe_name":"hdf5","function_name":"H5EA__iblock_alloc"},"2260":{"probe_name":"hdf5","function_name":"H5EA__iblock_create"},"2261":{"probe_name":"hdf5","function_name":"H5EA__iblock_debug"},"2262":{"probe_name":"hdf5","function_name":"H5EA__iblock_delete"},"2263":{"probe_name":"hdf5","function_name":"H5EA__iblock_dest"},"2264":{"probe_name":"hdf5","function_name":"H5EA__iblock_protect"},"2265":{"probe_name":"hdf5","function_name":"H5EA__iblock_unprotect"},"2266":{"probe_name":"hdf5","function_name":"H5EA__lookup_elmt.constprop.0.isra.0"},"2267":{"probe_name":"hdf5","function_name":"H5EA__sblock_alloc"},"2268":{"probe_name":"hdf5","function_name":"H5EA__sblock_create"},"2269":{"probe_name":"hdf5","function_name":"H5EA__sblock_debug"},"2270":{"probe_name":"hdf5","function_name":"H5EA__sblock_delete"},"2271":{"probe_name":"hdf5","function_name":"H5EA__sblock_dest"},"2272":{"probe_name":"hdf5","function_name":"H5EA__sblock_protect"},"2273":{"probe_name":"hdf5","function_name":"H5EA__sblock_unprotect"},"2274":{"probe_name":"hdf5","function_name":"H5EA__test_crt_context"},"2275":{"probe_name":"hdf5","function_name":"H5EA__test_crt_dbg_context"},"2276":{"probe_name":"hdf5","function_name":"H5EA__test_debug"},"2277":{"probe_name":"hdf5","function_name":"H5EA__test_decode"},"2278":{"probe_name":"hdf5","function_name":"H5EA__test_dst_context"},"2279":{"probe_name":"hdf5","function_name":"H5EA__test_dst_dbg_context"},"2280":{"probe_name":"hdf5","function_name":"H5EA__test_encode"},"2281":{"probe_name":"hdf5","function_name":"H5EA__test_fill"},"2282":{"probe_name":"hdf5","function_name":"H5EA_close"},"2283":{"probe_name":"hdf5","function_name":"H5EA_create"},"2284":{"probe_name":"hdf5","function_name":"H5EA_delete"},"2285":{"probe_name":"hdf5","function_name":"H5EA_depend"},"2286":{"probe_name":"hdf5","function_name":"H5EA_get"},"2287":{"probe_name":"hdf5","function_name":"H5EA_get_addr"},"2288":{"probe_name":"hdf5","function_name":"H5EA_get_nelmts"},"2289":{"probe_name":"hdf5","function_name":"H5EA_get_stats"},"2290":{"probe_name":"hdf5","function_name":"H5EA_iterate"},"2291":{"probe_name":"hdf5","function_name":"H5EA_open"},"2292":{"probe_name":"hdf5","function_name":"H5EA_patch_file"},"2293":{"probe_name":"hdf5","function_name":"H5EA_set"},"2294":{"probe_name":"hdf5","function_name":"H5ES__cancel"},"2295":{"probe_name":"hdf5","function_name":"H5ES__cancel_cb"},"2296":{"probe_name":"hdf5","function_name":"H5ES__close_cb"},"2297":{"probe_name":"hdf5","function_name":"H5ES__close_failed_cb"},"2298":{"probe_name":"hdf5","function_name":"H5ES__create"},"2299":{"probe_name":"hdf5","function_name":"H5ES__event_completed"},"2300":{"probe_name":"hdf5","function_name":"H5ES__event_free"},"2301":{"probe_name":"hdf5","function_name":"H5ES__event_new"},"2302":{"probe_name":"hdf5","function_name":"H5ES__get_err_info"},"2303":{"probe_name":"hdf5","function_name":"H5ES__get_err_info_cb"},"2304":{"probe_name":"hdf5","function_name":"H5ES__get_requests"},"2305":{"probe_name":"hdf5","function_name":"H5ES__get_requests_cb"},"2306":{"probe_name":"hdf5","function_name":"H5ES__insert_request"},"2307":{"probe_name":"hdf5","function_name":"H5ES__list_append"},"2308":{"probe_name":"hdf5","function_name":"H5ES__list_count"},"2309":{"probe_name":"hdf5","function_name":"H5ES__list_iterate"},"2310":{"probe_name":"hdf5","function_name":"H5ES__list_remove"},"2311":{"probe_name":"hdf5","function_name":"H5ES__op_complete"},"2312":{"probe_name":"hdf5","function_name":"H5ES__wait"},"2313":{"probe_name":"hdf5","function_name":"H5ES__wait_cb"},"2314":{"probe_name":"hdf5","function_name":"H5ES_init"},"2315":{"probe_name":"hdf5","function_name":"H5ES_insert"},"2316":{"probe_name":"hdf5","function_name":"H5ES_term_package"},"2317":{"probe_name":"hdf5","function_name":"H5EScancel"},"2318":{"probe_name":"hdf5","function_name":"H5ESclose"},"2319":{"probe_name":"hdf5","function_name":"H5EScreate"},"2320":{"probe_name":"hdf5","function_name":"H5ESfree_err_info"},"2321":{"probe_name":"hdf5","function_name":"H5ESget_count"},"2322":{"probe_name":"hdf5","function_name":"H5ESget_err_count"},"2323":{"probe_name":"hdf5","function_name":"H5ESget_err_info"},"2324":{"probe_name":"hdf5","function_name":"H5ESget_err_status"},"2325":{"probe_name":"hdf5","function_name":"H5ESget_op_counter"},"2326":{"probe_name":"hdf5","function_name":"H5ESget_requests"},"2327":{"probe_name":"hdf5","function_name":"H5ESinsert_request"},"2328":{"probe_name":"hdf5","function_name":"H5ESregister_complete_func"},"2329":{"probe_name":"hdf5","function_name":"H5ESregister_insert_func"},"2330":{"probe_name":"hdf5","function_name":"H5ESwait"},"2331":{"probe_name":"hdf5","function_name":"H5E__append_stack"},"2332":{"probe_name":"hdf5","function_name":"H5E__clear_entries"},"2333":{"probe_name":"hdf5","function_name":"H5E__clear_stack"},"2334":{"probe_name":"hdf5","function_name":"H5E__close_msg"},"2335":{"probe_name":"hdf5","function_name":"H5E__close_msg_cb"},"2336":{"probe_name":"hdf5","function_name":"H5E__close_stack"},"2337":{"probe_name":"hdf5","function_name":"H5E__create_msg"},"2338":{"probe_name":"hdf5","function_name":"H5E__get_auto"},"2339":{"probe_name":"hdf5","function_name":"H5E__get_class_name"},"2340":{"probe_name":"hdf5","function_name":"H5E__get_current_stack"},"2341":{"probe_name":"hdf5","function_name":"H5E__get_msg"},"2342":{"probe_name":"hdf5","function_name":"H5E__get_num"},"2343":{"probe_name":"hdf5","function_name":"H5E__pop"},"2344":{"probe_name":"hdf5","function_name":"H5E__print"},"2345":{"probe_name":"hdf5","function_name":"H5E__print2"},"2346":{"probe_name":"hdf5","function_name":"H5E__push_stack"},"2347":{"probe_name":"hdf5","function_name":"H5E__register_class"},"2348":{"probe_name":"hdf5","function_name":"H5E__set_auto"},"2349":{"probe_name":"hdf5","function_name":"H5E__set_current_stack"},"2350":{"probe_name":"hdf5","function_name":"H5E__set_default_auto"},"2351":{"probe_name":"hdf5","function_name":"H5E__unregister_class"},"2352":{"probe_name":"hdf5","function_name":"H5E__walk"},"2353":{"probe_name":"hdf5","function_name":"H5E__walk1_cb"},"2354":{"probe_name":"hdf5","function_name":"H5E__walk2_cb"},"2355":{"probe_name":"hdf5","function_name":"H5E_clear_stack"},"2356":{"probe_name":"hdf5","function_name":"H5E_dump_api_stack"},"2358":{"probe_name":"hdf5","function_name":"H5E_pause_stack"},"2359":{"probe_name":"hdf5","function_name":"H5E_printf_stack"},"2360":{"probe_name":"hdf5","function_name":"H5E_resume_stack"},"2361":{"probe_name":"hdf5","function_name":"H5E_term_package"},"2362":{"probe_name":"hdf5","function_name":"H5Eappend_stack"},"2363":{"probe_name":"hdf5","function_name":"H5Eauto_is_v2"},"2364":{"probe_name":"hdf5","function_name":"H5Eclear1"},"2365":{"probe_name":"hdf5","function_name":"H5Eclear2"},"2366":{"probe_name":"hdf5","function_name":"H5Eclose_msg"},"2367":{"probe_name":"hdf5","function_name":"H5Eclose_stack"},"2368":{"probe_name":"hdf5","function_name":"H5Ecreate_msg"},"2369":{"probe_name":"hdf5","function_name":"H5Ecreate_stack"},"2370":{"probe_name":"hdf5","function_name":"H5Eget_auto1"},"2371":{"probe_name":"hdf5","function_name":"H5Eget_auto2"},"2372":{"probe_name":"hdf5","function_name":"H5Eget_class_name"},"2373":{"probe_name":"hdf5","function_name":"H5Eget_current_stack"},"2374":{"probe_name":"hdf5","function_name":"H5Eget_major"},"2375":{"probe_name":"hdf5","function_name":"H5Eget_minor"},"2376":{"probe_name":"hdf5","function_name":"H5Eget_msg"},"2377":{"probe_name":"hdf5","function_name":"H5Eget_num"},"2378":{"probe_name":"hdf5","function_name":"H5Eis_paused"},"2379":{"probe_name":"hdf5","function_name":"H5Epause_stack"},"2380":{"probe_name":"hdf5","function_name":"H5Epop"},"2381":{"probe_name":"hdf5","function_name":"H5Eprint1"},"2382":{"probe_name":"hdf5","function_name":"H5Eprint2"},"2383":{"probe_name":"hdf5","function_name":"H5Epush1"},"2384":{"probe_name":"hdf5","function_name":"H5Epush2"},"2385":{"probe_name":"hdf5","function_name":"H5Eregister_class"},"2386":{"probe_name":"hdf5","function_name":"H5Eresume_stack"},"2387":{"probe_name":"hdf5","function_name":"H5Eset_auto1"},"2388":{"probe_name":"hdf5","function_name":"H5Eset_auto2"},"2389":{"probe_name":"hdf5","function_name":"H5Eset_current_stack"},"2390":{"probe_name":"hdf5","function_name":"H5Eunregister_class"},"2391":{"probe_name":"hdf5","function_name":"H5Ewalk1"},"2392":{"probe_name":"hdf5","function_name":"H5Ewalk2"},"2393":{"probe_name":"hdf5","function_name":"H5FA__cache_dblk_page_deserialize"},"2394":{"probe_name":"hdf5","function_name":"H5FA__cache_dblk_page_free_icr"},"2395":{"probe_name":"hdf5","function_name":"H5FA__cache_dblk_page_get_initial_load_size"},"2396":{"probe_name":"hdf5","function_name":"H5FA__cache_dblk_page_image_len"},"2397":{"probe_name":"hdf5","function_name":"H5FA__cache_dblk_page_notify"},"2398":{"probe_name":"hdf5","function_name":"H5FA__cache_dblk_page_serialize"},"2399":{"probe_name":"hdf5","function_name":"H5FA__cache_dblk_page_verify_chksum"},"2400":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_deserialize"},"2401":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_free_icr"},"2402":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_fsf_size"},"2403":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_get_initial_load_size"},"2404":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_image_len"},"2405":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_notify"},"2406":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_serialize"},"2407":{"probe_name":"hdf5","function_name":"H5FA__cache_dblock_verify_chksum"},"2408":{"probe_name":"hdf5","function_name":"H5FA__cache_hdr_deserialize"},"2409":{"probe_name":"hdf5","function_name":"H5FA__cache_hdr_free_icr"},"2410":{"probe_name":"hdf5","function_name":"H5FA__cache_hdr_get_initial_load_size"},"2411":{"probe_name":"hdf5","function_name":"H5FA__cache_hdr_image_len"},"2412":{"probe_name":"hdf5","function_name":"H5FA__cache_hdr_notify"},"2413":{"probe_name":"hdf5","function_name":"H5FA__cache_hdr_serialize"},"2414":{"probe_name":"hdf5","function_name":"H5FA__cache_hdr_verify_chksum"},"2415":{"probe_name":"hdf5","function_name":"H5FA__cmp_cparam_test"},"2416":{"probe_name":"hdf5","function_name":"H5FA__create_flush_depend"},"2417":{"probe_name":"hdf5","function_name":"H5FA__dblk_page_alloc"},"2418":{"probe_name":"hdf5","function_name":"H5FA__dblk_page_create"},"2419":{"probe_name":"hdf5","function_name":"H5FA__dblk_page_dest"},"2420":{"probe_name":"hdf5","function_name":"H5FA__dblk_page_protect"},"2421":{"probe_name":"hdf5","function_name":"H5FA__dblk_page_unprotect"},"2422":{"probe_name":"hdf5","function_name":"H5FA__dblock_alloc"},"2423":{"probe_name":"hdf5","function_name":"H5FA__dblock_create"},"2424":{"probe_name":"hdf5","function_name":"H5FA__dblock_debug"},"2425":{"probe_name":"hdf5","function_name":"H5FA__dblock_delete"},"2426":{"probe_name":"hdf5","function_name":"H5FA__dblock_dest"},"2427":{"probe_name":"hdf5","function_name":"H5FA__dblock_protect"},"2428":{"probe_name":"hdf5","function_name":"H5FA__dblock_unprotect"},"2429":{"probe_name":"hdf5","function_name":"H5FA__destroy_flush_depend"},"2430":{"probe_name":"hdf5","function_name":"H5FA__get_cparam_test"},"2431":{"probe_name":"hdf5","function_name":"H5FA__hdr_alloc"},"2432":{"probe_name":"hdf5","function_name":"H5FA__hdr_create"},"2433":{"probe_name":"hdf5","function_name":"H5FA__hdr_debug"},"2434":{"probe_name":"hdf5","function_name":"H5FA__hdr_decr"},"2435":{"probe_name":"hdf5","function_name":"H5FA__hdr_delete"},"2436":{"probe_name":"hdf5","function_name":"H5FA__hdr_dest"},"2437":{"probe_name":"hdf5","function_name":"H5FA__hdr_fuse_decr"},"2438":{"probe_name":"hdf5","function_name":"H5FA__hdr_fuse_incr"},"2439":{"probe_name":"hdf5","function_name":"H5FA__hdr_incr"},"2440":{"probe_name":"hdf5","function_name":"H5FA__hdr_init"},"2441":{"probe_name":"hdf5","function_name":"H5FA__hdr_modified"},"2442":{"probe_name":"hdf5","function_name":"H5FA__hdr_protect"},"2443":{"probe_name":"hdf5","function_name":"H5FA__hdr_unprotect"},"2444":{"probe_name":"hdf5","function_name":"H5FA__test_crt_context"},"2445":{"probe_name":"hdf5","function_name":"H5FA__test_crt_dbg_context"},"2446":{"probe_name":"hdf5","function_name":"H5FA__test_debug"},"2447":{"probe_name":"hdf5","function_name":"H5FA__test_decode"},"2448":{"probe_name":"hdf5","function_name":"H5FA__test_dst_context"},"2449":{"probe_name":"hdf5","function_name":"H5FA__test_encode"},"2450":{"probe_name":"hdf5","function_name":"H5FA__test_fill"},"2451":{"probe_name":"hdf5","function_name":"H5FA_close"},"2452":{"probe_name":"hdf5","function_name":"H5FA_create"},"2453":{"probe_name":"hdf5","function_name":"H5FA_delete"},"2454":{"probe_name":"hdf5","function_name":"H5FA_depend"},"2455":{"probe_name":"hdf5","function_name":"H5FA_get"},"2456":{"probe_name":"hdf5","function_name":"H5FA_get_addr"},"2457":{"probe_name":"hdf5","function_name":"H5FA_get_nelmts"},"2458":{"probe_name":"hdf5","function_name":"H5FA_get_stats"},"2459":{"probe_name":"hdf5","function_name":"H5FA_iterate"},"2460":{"probe_name":"hdf5","function_name":"H5FA_open"},"2461":{"probe_name":"hdf5","function_name":"H5FA_patch_file"},"2462":{"probe_name":"hdf5","function_name":"H5FA_set"},"2463":{"probe_name":"hdf5","function_name":"H5FD__alloc_real"},"2464":{"probe_name":"hdf5","function_name":"H5FD__copy_plist"},"2465":{"probe_name":"hdf5","function_name":"H5FD__core_close"},"2466":{"probe_name":"hdf5","function_name":"H5FD__core_cmp"},"2467":{"probe_name":"hdf5","function_name":"H5FD__core_delete"},"2468":{"probe_name":"hdf5","function_name":"H5FD__core_fapl_get"},"2469":{"probe_name":"hdf5","function_name":"H5FD__core_flush"},"2470":{"probe_name":"hdf5","function_name":"H5FD__core_flush.part.0"},"2471":{"probe_name":"hdf5","function_name":"H5FD__core_get_eoa"},"2472":{"probe_name":"hdf5","function_name":"H5FD__core_get_eof"},"2473":{"probe_name":"hdf5","function_name":"H5FD__core_get_handle"},"2474":{"probe_name":"hdf5","function_name":"H5FD__core_lock"},"2475":{"probe_name":"hdf5","function_name":"H5FD__core_open"},"2476":{"probe_name":"hdf5","function_name":"H5FD__core_query"},"2477":{"probe_name":"hdf5","function_name":"H5FD__core_read"},"2478":{"probe_name":"hdf5","function_name":"H5FD__core_set_eoa"},"2479":{"probe_name":"hdf5","function_name":"H5FD__core_term"},"2480":{"probe_name":"hdf5","function_name":"H5FD__core_truncate"},"2481":{"probe_name":"hdf5","function_name":"H5FD__core_unlock"},"2482":{"probe_name":"hdf5","function_name":"H5FD__core_write"},"2483":{"probe_name":"hdf5","function_name":"H5FD__core_write_to_bstore"},"2484":{"probe_name":"hdf5","function_name":"H5FD__extend"},"2485":{"probe_name":"hdf5","function_name":"H5FD__family_close"},"2486":{"probe_name":"hdf5","function_name":"H5FD__family_cmp"},"2487":{"probe_name":"hdf5","function_name":"H5FD__family_delete"},"2488":{"probe_name":"hdf5","function_name":"H5FD__family_fapl_copy"},"2489":{"probe_name":"hdf5","function_name":"H5FD__family_fapl_free"},"2490":{"probe_name":"hdf5","function_name":"H5FD__family_fapl_get"},"2491":{"probe_name":"hdf5","function_name":"H5FD__family_flush"},"2492":{"probe_name":"hdf5","function_name":"H5FD__family_get_default_config"},"2493":{"probe_name":"hdf5","function_name":"H5FD__family_get_default_printf_filename"},"2494":{"probe_name":"hdf5","function_name":"H5FD__family_get_eoa"},"2495":{"probe_name":"hdf5","function_name":"H5FD__family_get_eof"},"2496":{"probe_name":"hdf5","function_name":"H5FD__family_get_handle"},"2497":{"probe_name":"hdf5","function_name":"H5FD__family_lock"},"2498":{"probe_name":"hdf5","function_name":"H5FD__family_open"},"2499":{"probe_name":"hdf5","function_name":"H5FD__family_query"},"2500":{"probe_name":"hdf5","function_name":"H5FD__family_read"},"2501":{"probe_name":"hdf5","function_name":"H5FD__family_sb_decode"},"2502":{"probe_name":"hdf5","function_name":"H5FD__family_sb_encode"},"2503":{"probe_name":"hdf5","function_name":"H5FD__family_sb_size"},"2504":{"probe_name":"hdf5","function_name":"H5FD__family_set_eoa"},"2505":{"probe_name":"hdf5","function_name":"H5FD__family_term"},"2506":{"probe_name":"hdf5","function_name":"H5FD__family_truncate"},"2507":{"probe_name":"hdf5","function_name":"H5FD__family_unlock"},"2508":{"probe_name":"hdf5","function_name":"H5FD__family_write"},"2509":{"probe_name":"hdf5","function_name":"H5FD__free_cls"},"2510":{"probe_name":"hdf5","function_name":"H5FD__free_real"},"2511":{"probe_name":"hdf5","function_name":"H5FD__get_driver_cb"},"2512":{"probe_name":"hdf5","function_name":"H5FD__log_alloc"},"2513":{"probe_name":"hdf5","function_name":"H5FD__log_close"},"2514":{"probe_name":"hdf5","function_name":"H5FD__log_cmp"},"2515":{"probe_name":"hdf5","function_name":"H5FD__log_delete"},"2516":{"probe_name":"hdf5","function_name":"H5FD__log_fapl_copy"},"2517":{"probe_name":"hdf5","function_name":"H5FD__log_fapl_free"},"2518":{"probe_name":"hdf5","function_name":"H5FD__log_fapl_get"},"2519":{"probe_name":"hdf5","function_name":"H5FD__log_free"},"2520":{"probe_name":"hdf5","function_name":"H5FD__log_get_eoa"},"2521":{"probe_name":"hdf5","function_name":"H5FD__log_get_eof"},"2522":{"probe_name":"hdf5","function_name":"H5FD__log_get_handle"},"2523":{"probe_name":"hdf5","function_name":"H5FD__log_lock"},"2524":{"probe_name":"hdf5","function_name":"H5FD__log_open"},"2525":{"probe_name":"hdf5","function_name":"H5FD__log_query"},"2526":{"probe_name":"hdf5","function_name":"H5FD__log_read"},"2527":{"probe_name":"hdf5","function_name":"H5FD__log_set_eoa"},"2528":{"probe_name":"hdf5","function_name":"H5FD__log_term"},"2529":{"probe_name":"hdf5","function_name":"H5FD__log_truncate"},"2530":{"probe_name":"hdf5","function_name":"H5FD__log_unlock"},"2531":{"probe_name":"hdf5","function_name":"H5FD__log_write"},"2532":{"probe_name":"hdf5","function_name":"H5FD__mpio_close"},"2533":{"probe_name":"hdf5","function_name":"H5FD__mpio_ctl"},"2534":{"probe_name":"hdf5","function_name":"H5FD__mpio_delete"},"2535":{"probe_name":"hdf5","function_name":"H5FD__mpio_flush"},"2536":{"probe_name":"hdf5","function_name":"H5FD__mpio_get_eoa"},"2537":{"probe_name":"hdf5","function_name":"H5FD__mpio_get_eof"},"2538":{"probe_name":"hdf5","function_name":"H5FD__mpio_get_handle"},"2539":{"probe_name":"hdf5","function_name":"H5FD__mpio_open"},"2540":{"probe_name":"hdf5","function_name":"H5FD__mpio_query"},"2541":{"probe_name":"hdf5","function_name":"H5FD__mpio_read"},"2542":{"probe_name":"hdf5","function_name":"H5FD__mpio_read_selection"},"2543":{"probe_name":"hdf5","function_name":"H5FD__mpio_read_vector"},"2544":{"probe_name":"hdf5","function_name":"H5FD__mpio_set_eoa"},"2545":{"probe_name":"hdf5","function_name":"H5FD__mpio_term"},"2546":{"probe_name":"hdf5","function_name":"H5FD__mpio_truncate"},"2547":{"probe_name":"hdf5","function_name":"H5FD__mpio_vector_build_types.constprop.0"},"2548":{"probe_name":"hdf5","function_name":"H5FD__mpio_write"},"2549":{"probe_name":"hdf5","function_name":"H5FD__mpio_write_selection"},"2550":{"probe_name":"hdf5","function_name":"H5FD__mpio_write_vector"},"2551":{"probe_name":"hdf5","function_name":"H5FD__onion_archival_index_find"},"2552":{"probe_name":"hdf5","function_name":"H5FD__onion_archival_index_is_valid"},"2553":{"probe_name":"hdf5","function_name":"H5FD__onion_archival_index_list_sort_cmp"},"2554":{"probe_name":"hdf5","function_name":"H5FD__onion_close"},"2555":{"probe_name":"hdf5","function_name":"H5FD__onion_ctl"},"2556":{"probe_name":"hdf5","function_name":"H5FD__onion_get_eoa"},"2557":{"probe_name":"hdf5","function_name":"H5FD__onion_get_eof"},"2558":{"probe_name":"hdf5","function_name":"H5FD__onion_header_decode"},"2559":{"probe_name":"hdf5","function_name":"H5FD__onion_header_encode"},"2560":{"probe_name":"hdf5","function_name":"H5FD__onion_history_decode"},"2561":{"probe_name":"hdf5","function_name":"H5FD__onion_history_encode"},"2562":{"probe_name":"hdf5","function_name":"H5FD__onion_ingest_header"},"2563":{"probe_name":"hdf5","function_name":"H5FD__onion_ingest_history"},"2564":{"probe_name":"hdf5","function_name":"H5FD__onion_ingest_revision_record"},"2565":{"probe_name":"hdf5","function_name":"H5FD__onion_merge_revision_index_into_archival_index"},"2566":{"probe_name":"hdf5","function_name":"H5FD__onion_open"},"2567":{"probe_name":"hdf5","function_name":"H5FD__onion_read"},"2568":{"probe_name":"hdf5","function_name":"H5FD__onion_revision_index_destroy"},"2569":{"probe_name":"hdf5","function_name":"H5FD__onion_revision_index_find"},"2570":{"probe_name":"hdf5","function_name":"H5FD__onion_revision_index_init"},"2571":{"probe_name":"hdf5","function_name":"H5FD__onion_revision_index_insert"},"2572":{"probe_name":"hdf5","function_name":"H5FD__onion_revision_record_decode"},"2573":{"probe_name":"hdf5","function_name":"H5FD__onion_revision_record_encode"},"2574":{"probe_name":"hdf5","function_name":"H5FD__onion_sb_decode"},"2575":{"probe_name":"hdf5","function_name":"H5FD__onion_sb_encode"},"2576":{"probe_name":"hdf5","function_name":"H5FD__onion_sb_size"},"2577":{"probe_name":"hdf5","function_name":"H5FD__onion_set_eoa"},"2578":{"probe_name":"hdf5","function_name":"H5FD__onion_term"},"2579":{"probe_name":"hdf5","function_name":"H5FD__onion_write"},"2580":{"probe_name":"hdf5","function_name":"H5FD__onion_write_final_history"},"2581":{"probe_name":"hdf5","function_name":"H5FD__onion_write_header"},"2582":{"probe_name":"hdf5","function_name":"H5FD__onion_write_history"},"2583":{"probe_name":"hdf5","function_name":"H5FD__read_selection_translate"},"2584":{"probe_name":"hdf5","function_name":"H5FD__sec2_close"},"2585":{"probe_name":"hdf5","function_name":"H5FD__sec2_cmp"},"2586":{"probe_name":"hdf5","function_name":"H5FD__sec2_ctl"},"2587":{"probe_name":"hdf5","function_name":"H5FD__sec2_delete"},"2588":{"probe_name":"hdf5","function_name":"H5FD__sec2_get_eoa"},"2589":{"probe_name":"hdf5","function_name":"H5FD__sec2_get_eof"},"2590":{"probe_name":"hdf5","function_name":"H5FD__sec2_get_handle"},"2591":{"probe_name":"hdf5","function_name":"H5FD__sec2_lock"},"2592":{"probe_name":"hdf5","function_name":"H5FD__sec2_open"},"2593":{"probe_name":"hdf5","function_name":"H5FD__sec2_query"},"2594":{"probe_name":"hdf5","function_name":"H5FD__sec2_read"},"2595":{"probe_name":"hdf5","function_name":"H5FD__sec2_set_eoa"},"2596":{"probe_name":"hdf5","function_name":"H5FD__sec2_term"},"2597":{"probe_name":"hdf5","function_name":"H5FD__sec2_truncate"},"2598":{"probe_name":"hdf5","function_name":"H5FD__sec2_unlock"},"2599":{"probe_name":"hdf5","function_name":"H5FD__sec2_write"},"2600":{"probe_name":"hdf5","function_name":"H5FD__selection_build_types.constprop.0"},"2601":{"probe_name":"hdf5","function_name":"H5FD__sort_io_req_real.constprop.0"},"2602":{"probe_name":"hdf5","function_name":"H5FD__splitter_alloc"},"2603":{"probe_name":"hdf5","function_name":"H5FD__splitter_close"},"2604":{"probe_name":"hdf5","function_name":"H5FD__splitter_cmp"},"2605":{"probe_name":"hdf5","function_name":"H5FD__splitter_ctl"},"2606":{"probe_name":"hdf5","function_name":"H5FD__splitter_delete"},"2607":{"probe_name":"hdf5","function_name":"H5FD__splitter_fapl_copy"},"2608":{"probe_name":"hdf5","function_name":"H5FD__splitter_fapl_free"},"2609":{"probe_name":"hdf5","function_name":"H5FD__splitter_fapl_get"},"2610":{"probe_name":"hdf5","function_name":"H5FD__splitter_flush"},"2611":{"probe_name":"hdf5","function_name":"H5FD__splitter_free"},"2612":{"probe_name":"hdf5","function_name":"H5FD__splitter_get_default_wo_path.constprop.0"},"2613":{"probe_name":"hdf5","function_name":"H5FD__splitter_get_eoa"},"2614":{"probe_name":"hdf5","function_name":"H5FD__splitter_get_eof"},"2615":{"probe_name":"hdf5","function_name":"H5FD__splitter_get_handle"},"2616":{"probe_name":"hdf5","function_name":"H5FD__splitter_get_type_map"},"2617":{"probe_name":"hdf5","function_name":"H5FD__splitter_lock"},"2618":{"probe_name":"hdf5","function_name":"H5FD__splitter_log_error.part.0.isra.0"},"2619":{"probe_name":"hdf5","function_name":"H5FD__splitter_open"},"2620":{"probe_name":"hdf5","function_name":"H5FD__splitter_populate_config"},"2621":{"probe_name":"hdf5","function_name":"H5FD__splitter_query"},"2622":{"probe_name":"hdf5","function_name":"H5FD__splitter_read"},"2623":{"probe_name":"hdf5","function_name":"H5FD__splitter_sb_decode"},"2624":{"probe_name":"hdf5","function_name":"H5FD__splitter_sb_encode"},"2625":{"probe_name":"hdf5","function_name":"H5FD__splitter_sb_size"},"2626":{"probe_name":"hdf5","function_name":"H5FD__splitter_set_eoa"},"2627":{"probe_name":"hdf5","function_name":"H5FD__splitter_term"},"2628":{"probe_name":"hdf5","function_name":"H5FD__splitter_truncate"},"2629":{"probe_name":"hdf5","function_name":"H5FD__splitter_unlock"},"2630":{"probe_name":"hdf5","function_name":"H5FD__splitter_write"},"2631":{"probe_name":"hdf5","function_name":"H5FD__srt_tmp_cmp"},"2632":{"probe_name":"hdf5","function_name":"H5FD__supports_swmr_test"},"2633":{"probe_name":"hdf5","function_name":"H5FD__write_selection_translate"},"2634":{"probe_name":"hdf5","function_name":"H5FD_alloc"},"2635":{"probe_name":"hdf5","function_name":"H5FD_check_plugin_load"},"2636":{"probe_name":"hdf5","function_name":"H5FD_close"},"2637":{"probe_name":"hdf5","function_name":"H5FD_cmp"},"2638":{"probe_name":"hdf5","function_name":"H5FD_core_init"},"2639":{"probe_name":"hdf5","function_name":"H5FD_ctl"},"2640":{"probe_name":"hdf5","function_name":"H5FD_delete"},"2641":{"probe_name":"hdf5","function_name":"H5FD_driver_query"},"2642":{"probe_name":"hdf5","function_name":"H5FD_family_init"},"2643":{"probe_name":"hdf5","function_name":"H5FD_fapl_get"},"2644":{"probe_name":"hdf5","function_name":"H5FD_flush"},"2645":{"probe_name":"hdf5","function_name":"H5FD_free"},"2646":{"probe_name":"hdf5","function_name":"H5FD_free_driver_info"},"2647":{"probe_name":"hdf5","function_name":"H5FD_get_base_addr"},"2648":{"probe_name":"hdf5","function_name":"H5FD_get_class"},"2649":{"probe_name":"hdf5","function_name":"H5FD_get_class.localalias"},"2650":{"probe_name":"hdf5","function_name":"H5FD_get_driver_id_by_name"},"2651":{"probe_name":"hdf5","function_name":"H5FD_get_driver_id_by_value"},"2652":{"probe_name":"hdf5","function_name":"H5FD_get_eoa"},"2653":{"probe_name":"hdf5","function_name":"H5FD_get_eof"},"2654":{"probe_name":"hdf5","function_name":"H5FD_get_feature_flags"},"2655":{"probe_name":"hdf5","function_name":"H5FD_get_fileno"},"2656":{"probe_name":"hdf5","function_name":"H5FD_get_fs_type_map"},"2657":{"probe_name":"hdf5","function_name":"H5FD_get_maxaddr"},"2658":{"probe_name":"hdf5","function_name":"H5FD_get_mpio_atomicity"},"2659":{"probe_name":"hdf5","function_name":"H5FD_get_vfd_handle"},"2660":{"probe_name":"hdf5","function_name":"H5FD_init"},"2661":{"probe_name":"hdf5","function_name":"H5FD_is_driver_registered_by_name"},"2662":{"probe_name":"hdf5","function_name":"H5FD_is_driver_registered_by_value"},"2663":{"probe_name":"hdf5","function_name":"H5FD_locate_signature"},"2664":{"probe_name":"hdf5","function_name":"H5FD_lock"},"2665":{"probe_name":"hdf5","function_name":"H5FD_log_init"},"2666":{"probe_name":"hdf5","function_name":"H5FD_mpi_MPIOff_to_haddr"},"2667":{"probe_name":"hdf5","function_name":"H5FD_mpi_get_comm"},"2668":{"probe_name":"hdf5","function_name":"H5FD_mpi_get_file_sync_required"},"2669":{"probe_name":"hdf5","function_name":"H5FD_mpi_get_info"},"2670":{"probe_name":"hdf5","function_name":"H5FD_mpi_get_rank"},"2671":{"probe_name":"hdf5","function_name":"H5FD_mpi_get_size"},"2672":{"probe_name":"hdf5","function_name":"H5FD_mpi_haddr_to_MPIOff"},"2673":{"probe_name":"hdf5","function_name":"H5FD_mpio_init"},"2674":{"probe_name":"hdf5","function_name":"H5FD_multi_alloc"},"2675":{"probe_name":"hdf5","function_name":"H5FD_multi_close"},"2676":{"probe_name":"hdf5","function_name":"H5FD_multi_cmp"},"2677":{"probe_name":"hdf5","function_name":"H5FD_multi_ctl"},"2678":{"probe_name":"hdf5","function_name":"H5FD_multi_delete"},"2679":{"probe_name":"hdf5","function_name":"H5FD_multi_fapl_copy"},"2680":{"probe_name":"hdf5","function_name":"H5FD_multi_fapl_free"},"2681":{"probe_name":"hdf5","function_name":"H5FD_multi_fapl_get"},"2682":{"probe_name":"hdf5","function_name":"H5FD_multi_flush"},"2683":{"probe_name":"hdf5","function_name":"H5FD_multi_free"},"2684":{"probe_name":"hdf5","function_name":"H5FD_multi_get_eoa"},"2685":{"probe_name":"hdf5","function_name":"H5FD_multi_get_eof"},"2686":{"probe_name":"hdf5","function_name":"H5FD_multi_get_handle"},"2687":{"probe_name":"hdf5","function_name":"H5FD_multi_get_type_map"},"2688":{"probe_name":"hdf5","function_name":"H5FD_multi_init"},"2689":{"probe_name":"hdf5","function_name":"H5FD_multi_lock"},"2690":{"probe_name":"hdf5","function_name":"H5FD_multi_open"},"2691":{"probe_name":"hdf5","function_name":"H5FD_multi_populate_config"},"2692":{"probe_name":"hdf5","function_name":"H5FD_multi_query"},"2693":{"probe_name":"hdf5","function_name":"H5FD_multi_read"},"2694":{"probe_name":"hdf5","function_name":"H5FD_multi_sb_decode"},"2695":{"probe_name":"hdf5","function_name":"H5FD_multi_sb_decode.part.0"},"2696":{"probe_name":"hdf5","function_name":"H5FD_multi_sb_encode"},"2697":{"probe_name":"hdf5","function_name":"H5FD_multi_sb_size"},"2698":{"probe_name":"hdf5","function_name":"H5FD_multi_set_eoa"},"2699":{"probe_name":"hdf5","function_name":"H5FD_multi_term"},"2700":{"probe_name":"hdf5","function_name":"H5FD_multi_truncate"},"2701":{"probe_name":"hdf5","function_name":"H5FD_multi_unlock"},"2702":{"probe_name":"hdf5","function_name":"H5FD_multi_write"},"2703":{"probe_name":"hdf5","function_name":"H5FD_onion_init"},"2704":{"probe_name":"hdf5","function_name":"H5FD_open"},"2705":{"probe_name":"hdf5","function_name":"H5FD_read"},"2706":{"probe_name":"hdf5","function_name":"H5FD_read_from_selection"},"2707":{"probe_name":"hdf5","function_name":"H5FD_read_selection"},"2708":{"probe_name":"hdf5","function_name":"H5FD_read_selection_id"},"2709":{"probe_name":"hdf5","function_name":"H5FD_read_vector"},"2710":{"probe_name":"hdf5","function_name":"H5FD_read_vector_from_selection"},"2711":{"probe_name":"hdf5","function_name":"H5FD_register"},"2712":{"probe_name":"hdf5","function_name":"H5FD_register_driver_by_name"},"2713":{"probe_name":"hdf5","function_name":"H5FD_register_driver_by_value"},"2714":{"probe_name":"hdf5","function_name":"H5FD_sb_encode"},"2715":{"probe_name":"hdf5","function_name":"H5FD_sb_load"},"2716":{"probe_name":"hdf5","function_name":"H5FD_sb_size"},"2717":{"probe_name":"hdf5","function_name":"H5FD_sec2_init"},"2718":{"probe_name":"hdf5","function_name":"H5FD_set_base_addr"},"2719":{"probe_name":"hdf5","function_name":"H5FD_set_eoa"},"2720":{"probe_name":"hdf5","function_name":"H5FD_set_feature_flags"},"2721":{"probe_name":"hdf5","function_name":"H5FD_set_mpio_atomicity"},"2722":{"probe_name":"hdf5","function_name":"H5FD_set_paged_aggr"},"2723":{"probe_name":"hdf5","function_name":"H5FD_sort_selection_io_req"},"2724":{"probe_name":"hdf5","function_name":"H5FD_sort_vector_io_req"},"2725":{"probe_name":"hdf5","function_name":"H5FD_split_populate_config.constprop.0"},"2726":{"probe_name":"hdf5","function_name":"H5FD_splitter_init"},"2727":{"probe_name":"hdf5","function_name":"H5FD_stdio_alloc"},"2728":{"probe_name":"hdf5","function_name":"H5FD_stdio_close"},"2729":{"probe_name":"hdf5","function_name":"H5FD_stdio_cmp"},"2730":{"probe_name":"hdf5","function_name":"H5FD_stdio_delete"},"2731":{"probe_name":"hdf5","function_name":"H5FD_stdio_flush"},"2732":{"probe_name":"hdf5","function_name":"H5FD_stdio_get_eoa"},"2733":{"probe_name":"hdf5","function_name":"H5FD_stdio_get_eof"},"2734":{"probe_name":"hdf5","function_name":"H5FD_stdio_get_handle"},"2735":{"probe_name":"hdf5","function_name":"H5FD_stdio_init"},"2736":{"probe_name":"hdf5","function_name":"H5FD_stdio_lock"},"2737":{"probe_name":"hdf5","function_name":"H5FD_stdio_open"},"2738":{"probe_name":"hdf5","function_name":"H5FD_stdio_query"},"2739":{"probe_name":"hdf5","function_name":"H5FD_stdio_read"},"2740":{"probe_name":"hdf5","function_name":"H5FD_stdio_set_eoa"},"2741":{"probe_name":"hdf5","function_name":"H5FD_stdio_term"},"2742":{"probe_name":"hdf5","function_name":"H5FD_stdio_truncate"},"2743":{"probe_name":"hdf5","function_name":"H5FD_stdio_unlock"},"2744":{"probe_name":"hdf5","function_name":"H5FD_stdio_write"},"2745":{"probe_name":"hdf5","function_name":"H5FD_term_package"},"2746":{"probe_name":"hdf5","function_name":"H5FD_truncate"},"2747":{"probe_name":"hdf5","function_name":"H5FD_try_extend"},"2748":{"probe_name":"hdf5","function_name":"H5FD_unlock"},"2749":{"probe_name":"hdf5","function_name":"H5FD_write"},"2750":{"probe_name":"hdf5","function_name":"H5FD_write_from_selection"},"2751":{"probe_name":"hdf5","function_name":"H5FD_write_selection"},"2752":{"probe_name":"hdf5","function_name":"H5FD_write_selection_id"},"2753":{"probe_name":"hdf5","function_name":"H5FD_write_vector"},"2754":{"probe_name":"hdf5","function_name":"H5FD_write_vector_from_selection"},"2755":{"probe_name":"hdf5","function_name":"H5FDalloc"},"2756":{"probe_name":"hdf5","function_name":"H5FDclose"},"2757":{"probe_name":"hdf5","function_name":"H5FDcmp"},"2758":{"probe_name":"hdf5","function_name":"H5FDctl"},"2759":{"probe_name":"hdf5","function_name":"H5FDdelete"},"2760":{"probe_name":"hdf5","function_name":"H5FDdriver_query"},"2761":{"probe_name":"hdf5","function_name":"H5FDflush"},"2762":{"probe_name":"hdf5","function_name":"H5FDfree"},"2763":{"probe_name":"hdf5","function_name":"H5FDget_eoa"},"2764":{"probe_name":"hdf5","function_name":"H5FDget_eof"},"2765":{"probe_name":"hdf5","function_name":"H5FDget_vfd_handle"},"2766":{"probe_name":"hdf5","function_name":"H5FDis_driver_registered_by_name"},"2767":{"probe_name":"hdf5","function_name":"H5FDis_driver_registered_by_value"},"2768":{"probe_name":"hdf5","function_name":"H5FDlock"},"2769":{"probe_name":"hdf5","function_name":"H5FDonion_get_revision_count"},"2770":{"probe_name":"hdf5","function_name":"H5FDopen"},"2771":{"probe_name":"hdf5","function_name":"H5FDperform_init"},"2772":{"probe_name":"hdf5","function_name":"H5FDquery"},"2773":{"probe_name":"hdf5","function_name":"H5FDread"},"2774":{"probe_name":"hdf5","function_name":"H5FDread_from_selection"},"2775":{"probe_name":"hdf5","function_name":"H5FDread_selection"},"2776":{"probe_name":"hdf5","function_name":"H5FDread_vector"},"2777":{"probe_name":"hdf5","function_name":"H5FDread_vector_from_selection"},"2778":{"probe_name":"hdf5","function_name":"H5FDregister"},"2779":{"probe_name":"hdf5","function_name":"H5FDset_eoa"},"2780":{"probe_name":"hdf5","function_name":"H5FDtruncate"},"2781":{"probe_name":"hdf5","function_name":"H5FDunlock"},"2782":{"probe_name":"hdf5","function_name":"H5FDunregister"},"2783":{"probe_name":"hdf5","function_name":"H5FDwrite"},"2784":{"probe_name":"hdf5","function_name":"H5FDwrite_from_selection"},"2785":{"probe_name":"hdf5","function_name":"H5FDwrite_selection"},"2786":{"probe_name":"hdf5","function_name":"H5FDwrite_vector"},"2787":{"probe_name":"hdf5","function_name":"H5FDwrite_vector_from_selection"},"2788":{"probe_name":"hdf5","function_name":"H5FL__blk_create_list.part.0"},"2789":{"probe_name":"hdf5","function_name":"H5FL__blk_gc_list"},"2790":{"probe_name":"hdf5","function_name":"H5FL_arr_calloc"},"2791":{"probe_name":"hdf5","function_name":"H5FL_arr_free"},"2792":{"probe_name":"hdf5","function_name":"H5FL_arr_malloc"},"2793":{"probe_name":"hdf5","function_name":"H5FL_arr_realloc"},"2794":{"probe_name":"hdf5","function_name":"H5FL_blk_calloc"},"2795":{"probe_name":"hdf5","function_name":"H5FL_blk_free"},"2796":{"probe_name":"hdf5","function_name":"H5FL_blk_free_block_avail"},"2797":{"probe_name":"hdf5","function_name":"H5FL_blk_malloc"},"2798":{"probe_name":"hdf5","function_name":"H5FL_blk_realloc"},"2799":{"probe_name":"hdf5","function_name":"H5FL_fac_calloc"},"2800":{"probe_name":"hdf5","function_name":"H5FL_fac_free"},"2801":{"probe_name":"hdf5","function_name":"H5FL_fac_init"},"2802":{"probe_name":"hdf5","function_name":"H5FL_fac_malloc"},"2803":{"probe_name":"hdf5","function_name":"H5FL_fac_term"},"2804":{"probe_name":"hdf5","function_name":"H5FL_garbage_coll"},"2805":{"probe_name":"hdf5","function_name":"H5FL_get_free_list_sizes"},"2806":{"probe_name":"hdf5","function_name":"H5FL_reg_calloc"},"2807":{"probe_name":"hdf5","function_name":"H5FL_reg_free"},"2808":{"probe_name":"hdf5","function_name":"H5FL_reg_malloc"},"2809":{"probe_name":"hdf5","function_name":"H5FL_seq_calloc"},"2810":{"probe_name":"hdf5","function_name":"H5FL_seq_free"},"2811":{"probe_name":"hdf5","function_name":"H5FL_seq_malloc"},"2812":{"probe_name":"hdf5","function_name":"H5FL_seq_realloc"},"2813":{"probe_name":"hdf5","function_name":"H5FL_set_free_list_limits"},"2814":{"probe_name":"hdf5","function_name":"H5FL_term_package"},"2815":{"probe_name":"hdf5","function_name":"H5FO_create"},"2816":{"probe_name":"hdf5","function_name":"H5FO_delete"},"2817":{"probe_name":"hdf5","function_name":"H5FO_dest"},"2818":{"probe_name":"hdf5","function_name":"H5FO_insert"},"2819":{"probe_name":"hdf5","function_name":"H5FO_mark"},"2820":{"probe_name":"hdf5","function_name":"H5FO_marked"},"2821":{"probe_name":"hdf5","function_name":"H5FO_opened"},"2822":{"probe_name":"hdf5","function_name":"H5FO_top_count"},"2823":{"probe_name":"hdf5","function_name":"H5FO_top_create"},"2824":{"probe_name":"hdf5","function_name":"H5FO_top_decr"},"2825":{"probe_name":"hdf5","function_name":"H5FO_top_dest"},"2826":{"probe_name":"hdf5","function_name":"H5FO_top_incr"},"2827":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_deserialize"},"2828":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_free_icr"},"2829":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_get_initial_load_size"},"2830":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_image_len"},"2831":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_notify"},"2832":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_pre_serialize"},"2833":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_serialize"},"2834":{"probe_name":"hdf5","function_name":"H5FS__cache_hdr_verify_chksum"},"2835":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_deserialize"},"2836":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_free_icr"},"2837":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_get_initial_load_size"},"2838":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_image_len"},"2839":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_notify"},"2840":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_pre_serialize"},"2841":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_serialize"},"2842":{"probe_name":"hdf5","function_name":"H5FS__cache_sinfo_verify_chksum"},"2843":{"probe_name":"hdf5","function_name":"H5FS__cmp_cparam_test"},"2844":{"probe_name":"hdf5","function_name":"H5FS__create_flush_depend"},"2845":{"probe_name":"hdf5","function_name":"H5FS__decr"},"2846":{"probe_name":"hdf5","function_name":"H5FS__destroy_flush_depend"},"2847":{"probe_name":"hdf5","function_name":"H5FS__dirty"},"2848":{"probe_name":"hdf5","function_name":"H5FS__get_cparam_test"},"2849":{"probe_name":"hdf5","function_name":"H5FS__hdr_dest"},"2850":{"probe_name":"hdf5","function_name":"H5FS__incr"},"2851":{"probe_name":"hdf5","function_name":"H5FS__iterate_node_cb"},"2852":{"probe_name":"hdf5","function_name":"H5FS__iterate_sect_cb"},"2853":{"probe_name":"hdf5","function_name":"H5FS__new"},"2854":{"probe_name":"hdf5","function_name":"H5FS__sect_init_cls.part.0"},"2855":{"probe_name":"hdf5","function_name":"H5FS__sect_link"},"2856":{"probe_name":"hdf5","function_name":"H5FS__sect_merge"},"2857":{"probe_name":"hdf5","function_name":"H5FS__sect_node_new.part.0"},"2858":{"probe_name":"hdf5","function_name":"H5FS__sect_remove_real"},"2859":{"probe_name":"hdf5","function_name":"H5FS__sect_unlink_rest"},"2860":{"probe_name":"hdf5","function_name":"H5FS__sinfo_dest"},"2861":{"probe_name":"hdf5","function_name":"H5FS__sinfo_free_node_cb"},"2862":{"probe_name":"hdf5","function_name":"H5FS__sinfo_free_sect_cb"},"2863":{"probe_name":"hdf5","function_name":"H5FS__sinfo_lock"},"2864":{"probe_name":"hdf5","function_name":"H5FS__sinfo_new"},"2865":{"probe_name":"hdf5","function_name":"H5FS__sinfo_serialize_node_cb"},"2866":{"probe_name":"hdf5","function_name":"H5FS__sinfo_serialize_sect_cb"},"2867":{"probe_name":"hdf5","function_name":"H5FS__sinfo_unlock"},"2868":{"probe_name":"hdf5","function_name":"H5FS__size_node_decr.isra.0"},"2869":{"probe_name":"hdf5","function_name":"H5FS_alloc_hdr"},"2870":{"probe_name":"hdf5","function_name":"H5FS_alloc_sect"},"2871":{"probe_name":"hdf5","function_name":"H5FS_close"},"2872":{"probe_name":"hdf5","function_name":"H5FS_create"},"2873":{"probe_name":"hdf5","function_name":"H5FS_debug"},"2874":{"probe_name":"hdf5","function_name":"H5FS_delete"},"2875":{"probe_name":"hdf5","function_name":"H5FS_free"},"2876":{"probe_name":"hdf5","function_name":"H5FS_get_sect_count"},"2877":{"probe_name":"hdf5","function_name":"H5FS_open"},"2878":{"probe_name":"hdf5","function_name":"H5FS_sect_add"},"2879":{"probe_name":"hdf5","function_name":"H5FS_sect_change_class"},"2880":{"probe_name":"hdf5","function_name":"H5FS_sect_debug"},"2881":{"probe_name":"hdf5","function_name":"H5FS_sect_find"},"2882":{"probe_name":"hdf5","function_name":"H5FS_sect_iterate"},"2883":{"probe_name":"hdf5","function_name":"H5FS_sect_remove"},"2884":{"probe_name":"hdf5","function_name":"H5FS_sect_stats"},"2885":{"probe_name":"hdf5","function_name":"H5FS_sect_try_extend"},"2886":{"probe_name":"hdf5","function_name":"H5FS_sect_try_merge"},"2887":{"probe_name":"hdf5","function_name":"H5FS_sect_try_shrink_eoa"},"2888":{"probe_name":"hdf5","function_name":"H5FS_sects_debug"},"2889":{"probe_name":"hdf5","function_name":"H5FS_size"},"2890":{"probe_name":"hdf5","function_name":"H5FS_stat_info"},"2891":{"probe_name":"hdf5","function_name":"H5FS_vfd_alloc_hdr_and_section_info_if_needed"},"2892":{"probe_name":"hdf5","function_name":"H5F_Kvalue"},"2893":{"probe_name":"hdf5","function_name":"H5F__accum_adjust"},"2894":{"probe_name":"hdf5","function_name":"H5F__accum_flush"},"2895":{"probe_name":"hdf5","function_name":"H5F__accum_free"},"2896":{"probe_name":"hdf5","function_name":"H5F__accum_read"},"2897":{"probe_name":"hdf5","function_name":"H5F__accum_reset"},"2898":{"probe_name":"hdf5","function_name":"H5F__accum_write"},"2899":{"probe_name":"hdf5","function_name":"H5F__alloc"},"2900":{"probe_name":"hdf5","function_name":"H5F__build_actual_name"},"2901":{"probe_name":"hdf5","function_name":"H5F__build_name"},"2902":{"probe_name":"hdf5","function_name":"H5F__cache_drvrinfo_deserialize"},"2903":{"probe_name":"hdf5","function_name":"H5F__cache_drvrinfo_free_icr"},"2904":{"probe_name":"hdf5","function_name":"H5F__cache_drvrinfo_get_final_load_size"},"2905":{"probe_name":"hdf5","function_name":"H5F__cache_drvrinfo_get_initial_load_size"},"2906":{"probe_name":"hdf5","function_name":"H5F__cache_drvrinfo_image_len"},"2907":{"probe_name":"hdf5","function_name":"H5F__cache_drvrinfo_serialize"},"2908":{"probe_name":"hdf5","function_name":"H5F__cache_superblock_deserialize"},"2909":{"probe_name":"hdf5","function_name":"H5F__cache_superblock_free_icr"},"2910":{"probe_name":"hdf5","function_name":"H5F__cache_superblock_get_final_load_size"},"2911":{"probe_name":"hdf5","function_name":"H5F__cache_superblock_get_initial_load_size"},"2912":{"probe_name":"hdf5","function_name":"H5F__cache_superblock_image_len"},"2913":{"probe_name":"hdf5","function_name":"H5F__cache_superblock_serialize"},"2914":{"probe_name":"hdf5","function_name":"H5F__cache_superblock_verify_chksum"},"2915":{"probe_name":"hdf5","function_name":"H5F__check_cached_stab_test"},"2916":{"probe_name":"hdf5","function_name":"H5F__close"},"2917":{"probe_name":"hdf5","function_name":"H5F__close_cb"},"2918":{"probe_name":"hdf5","function_name":"H5F__close_mounts"},"2919":{"probe_name":"hdf5","function_name":"H5F__create_api_common"},"2920":{"probe_name":"hdf5","function_name":"H5F__delete"},"2921":{"probe_name":"hdf5","function_name":"H5F__dest"},"2922":{"probe_name":"hdf5","function_name":"H5F__efc_create"},"2923":{"probe_name":"hdf5","function_name":"H5F__efc_destroy"},"2924":{"probe_name":"hdf5","function_name":"H5F__efc_max_nfiles"},"2925":{"probe_name":"hdf5","function_name":"H5F__efc_open"},"2926":{"probe_name":"hdf5","function_name":"H5F__efc_open_file"},"2927":{"probe_name":"hdf5","function_name":"H5F__efc_release"},"2928":{"probe_name":"hdf5","function_name":"H5F__efc_release_real"},"2929":{"probe_name":"hdf5","function_name":"H5F__efc_try_close"},"2930":{"probe_name":"hdf5","function_name":"H5F__efc_try_close_tag1.isra.0"},"2931":{"probe_name":"hdf5","function_name":"H5F__efc_try_close_tag2.isra.0"},"2932":{"probe_name":"hdf5","function_name":"H5F__evict_cache_entries"},"2933":{"probe_name":"hdf5","function_name":"H5F__flush"},"2934":{"probe_name":"hdf5","function_name":"H5F__flush_api_common"},"2935":{"probe_name":"hdf5","function_name":"H5F__flush_mounts_recurse"},"2936":{"probe_name":"hdf5","function_name":"H5F__flush_phase2"},"2937":{"probe_name":"hdf5","function_name":"H5F__format_convert"},"2938":{"probe_name":"hdf5","function_name":"H5F__free"},"2939":{"probe_name":"hdf5","function_name":"H5F__get_all_count_cb"},"2940":{"probe_name":"hdf5","function_name":"H5F__get_all_ids_cb"},"2941":{"probe_name":"hdf5","function_name":"H5F__get_cont_info"},"2942":{"probe_name":"hdf5","function_name":"H5F__get_file_image"},"2943":{"probe_name":"hdf5","function_name":"H5F__get_info"},"2944":{"probe_name":"hdf5","function_name":"H5F__get_max_eof_eoa"},"2945":{"probe_name":"hdf5","function_name":"H5F__get_maxaddr_test"},"2946":{"probe_name":"hdf5","function_name":"H5F__get_mpi_atomicity"},"2947":{"probe_name":"hdf5","function_name":"H5F__get_objects_cb"},"2948":{"probe_name":"hdf5","function_name":"H5F__get_sbe_addr_test"},"2949":{"probe_name":"hdf5","function_name":"H5F__get_sohm_mesg_count_test"},"2950":{"probe_name":"hdf5","function_name":"H5F__is_hdf5"},"2951":{"probe_name":"hdf5","function_name":"H5F__mount_count_ids"},"2952":{"probe_name":"hdf5","function_name":"H5F__mount_count_ids_recurse"},"2953":{"probe_name":"hdf5","function_name":"H5F__new"},"2954":{"probe_name":"hdf5","function_name":"H5F__open_api_common"},"2955":{"probe_name":"hdf5","function_name":"H5F__parse_file_lock_env_var"},"2956":{"probe_name":"hdf5","function_name":"H5F__post_open"},"2957":{"probe_name":"hdf5","function_name":"H5F__post_open_api_common"},"2958":{"probe_name":"hdf5","function_name":"H5F__reopen"},"2959":{"probe_name":"hdf5","function_name":"H5F__reopen_api_common"},"2960":{"probe_name":"hdf5","function_name":"H5F__reparse_file_lock_variable_test"},"2961":{"probe_name":"hdf5","function_name":"H5F__same_file_test"},"2962":{"probe_name":"hdf5","function_name":"H5F__set_base_addr"},"2963":{"probe_name":"hdf5","function_name":"H5F__set_eoa"},"2964":{"probe_name":"hdf5","function_name":"H5F__set_libver_bounds"},"2965":{"probe_name":"hdf5","function_name":"H5F__set_mpi_atomicity"},"2966":{"probe_name":"hdf5","function_name":"H5F__set_paged_aggr"},"2967":{"probe_name":"hdf5","function_name":"H5F__sfile_add"},"2968":{"probe_name":"hdf5","function_name":"H5F__sfile_remove"},"2969":{"probe_name":"hdf5","function_name":"H5F__sfile_search"},"2970":{"probe_name":"hdf5","function_name":"H5F__start_swmr_write"},"2971":{"probe_name":"hdf5","function_name":"H5F__super_ext_close"},"2972":{"probe_name":"hdf5","function_name":"H5F__super_ext_create"},"2973":{"probe_name":"hdf5","function_name":"H5F__super_ext_open"},"2974":{"probe_name":"hdf5","function_name":"H5F__super_ext_remove_msg"},"2975":{"probe_name":"hdf5","function_name":"H5F__super_ext_write_msg"},"2976":{"probe_name":"hdf5","function_name":"H5F__super_free"},"2977":{"probe_name":"hdf5","function_name":"H5F__super_init"},"2978":{"probe_name":"hdf5","function_name":"H5F__super_read"},"2979":{"probe_name":"hdf5","function_name":"H5F__super_size"},"2980":{"probe_name":"hdf5","function_name":"H5F__superblock_prefix_decode"},"2981":{"probe_name":"hdf5","function_name":"H5F__try_extend"},"2982":{"probe_name":"hdf5","function_name":"H5F__update_super_ext_driver_msg"},"2983":{"probe_name":"hdf5","function_name":"H5F_addr_decode"},"2984":{"probe_name":"hdf5","function_name":"H5F_addr_decode_len"},"2985":{"probe_name":"hdf5","function_name":"H5F_addr_encode"},"2986":{"probe_name":"hdf5","function_name":"H5F_addr_encode_len"},"2987":{"probe_name":"hdf5","function_name":"H5F_block_read"},"2988":{"probe_name":"hdf5","function_name":"H5F_block_write"},"2989":{"probe_name":"hdf5","function_name":"H5F_coll_md_read"},"2990":{"probe_name":"hdf5","function_name":"H5F_cwfs_add"},"2991":{"probe_name":"hdf5","function_name":"H5F_cwfs_advance_heap"},"2992":{"probe_name":"hdf5","function_name":"H5F_cwfs_find_free_heap"},"2993":{"probe_name":"hdf5","function_name":"H5F_cwfs_remove_heap"},"2994":{"probe_name":"hdf5","function_name":"H5F_debug"},"2995":{"probe_name":"hdf5","function_name":"H5F_decr_nopen_objs"},"2996":{"probe_name":"hdf5","function_name":"H5F_efc_close"},"2997":{"probe_name":"hdf5","function_name":"H5F_eoa_dirty"},"2998":{"probe_name":"hdf5","function_name":"H5F_fake_alloc"},"2999":{"probe_name":"hdf5","function_name":"H5F_fake_free"},"3000":{"probe_name":"hdf5","function_name":"H5F_file_id_exists"},"3001":{"probe_name":"hdf5","function_name":"H5F_flush_mounts"},"3002":{"probe_name":"hdf5","function_name":"H5F_flush_tagged_metadata"},"3003":{"probe_name":"hdf5","function_name":"H5F_gc_ref"},"3004":{"probe_name":"hdf5","function_name":"H5F_get_access_plist"},"3005":{"probe_name":"hdf5","function_name":"H5F_get_actual_name"},"3006":{"probe_name":"hdf5","function_name":"H5F_get_alignment"},"3007":{"probe_name":"hdf5","function_name":"H5F_get_base_addr"},"3008":{"probe_name":"hdf5","function_name":"H5F_get_checksums"},"3009":{"probe_name":"hdf5","function_name":"H5F_get_coll_metadata_reads"},"3010":{"probe_name":"hdf5","function_name":"H5F_get_driver_id"},"3011":{"probe_name":"hdf5","function_name":"H5F_get_eoa"},"3012":{"probe_name":"hdf5","function_name":"H5F_get_evict_on_close"},"3013":{"probe_name":"hdf5","function_name":"H5F_get_extpath"},"3014":{"probe_name":"hdf5","function_name":"H5F_get_fc_degree"},"3015":{"probe_name":"hdf5","function_name":"H5F_get_fcpl"},"3016":{"probe_name":"hdf5","function_name":"H5F_get_file_id"},"3017":{"probe_name":"hdf5","function_name":"H5F_get_fileno"},"3018":{"probe_name":"hdf5","function_name":"H5F_get_high_bound"},"3019":{"probe_name":"hdf5","function_name":"H5F_get_id"},"3020":{"probe_name":"hdf5","function_name":"H5F_get_intent"},"3021":{"probe_name":"hdf5","function_name":"H5F_get_low_bound"},"3022":{"probe_name":"hdf5","function_name":"H5F_get_metadata_read_retry_info"},"3023":{"probe_name":"hdf5","function_name":"H5F_get_min_dset_ohdr"},"3024":{"probe_name":"hdf5","function_name":"H5F_get_nmounts"},"3025":{"probe_name":"hdf5","function_name":"H5F_get_nopen_objs"},"3026":{"probe_name":"hdf5","function_name":"H5F_get_nrefs"},"3027":{"probe_name":"hdf5","function_name":"H5F_get_null_fsm_addr"},"3028":{"probe_name":"hdf5","function_name":"H5F_get_obj_count"},"3029":{"probe_name":"hdf5","function_name":"H5F_get_obj_ids"},"3030":{"probe_name":"hdf5","function_name":"H5F_get_open_name"},"3031":{"probe_name":"hdf5","function_name":"H5F_get_parent"},"3032":{"probe_name":"hdf5","function_name":"H5F_get_pgend_meta_thres"},"3033":{"probe_name":"hdf5","function_name":"H5F_get_point_of_no_return"},"3034":{"probe_name":"hdf5","function_name":"H5F_get_read_attempts"},"3035":{"probe_name":"hdf5","function_name":"H5F_get_rfic_flags"},"3036":{"probe_name":"hdf5","function_name":"H5F_get_shared"},"3037":{"probe_name":"hdf5","function_name":"H5F_get_sohm_addr"},"3038":{"probe_name":"hdf5","function_name":"H5F_get_sohm_nindexes"},"3039":{"probe_name":"hdf5","function_name":"H5F_get_sohm_vers"},"3040":{"probe_name":"hdf5","function_name":"H5F_get_threshold"},"3041":{"probe_name":"hdf5","function_name":"H5F_get_use_file_locking"},"3042":{"probe_name":"hdf5","function_name":"H5F_get_vfd_handle"},"3043":{"probe_name":"hdf5","function_name":"H5F_get_vol_cls"},"3044":{"probe_name":"hdf5","function_name":"H5F_get_vol_obj"},"3045":{"probe_name":"hdf5","function_name":"H5F_grp_btree_shared"},"3046":{"probe_name":"hdf5","function_name":"H5F_has_feature"},"3047":{"probe_name":"hdf5","function_name":"H5F_has_vector_select_io"},"3048":{"probe_name":"hdf5","function_name":"H5F_incr_nopen_objs"},"3049":{"probe_name":"hdf5","function_name":"H5F_init"},"3050":{"probe_name":"hdf5","function_name":"H5F_is_mount"},"3051":{"probe_name":"hdf5","function_name":"H5F_is_tmp_addr"},"3052":{"probe_name":"hdf5","function_name":"H5F_mdc_log_location"},"3053":{"probe_name":"hdf5","function_name":"H5F_mount"},"3054":{"probe_name":"hdf5","function_name":"H5F_mpi_get_comm"},"3055":{"probe_name":"hdf5","function_name":"H5F_mpi_get_file_block_type"},"3056":{"probe_name":"hdf5","function_name":"H5F_mpi_get_info"},"3057":{"probe_name":"hdf5","function_name":"H5F_mpi_get_rank"},"3058":{"probe_name":"hdf5","function_name":"H5F_mpi_get_size"},"3059":{"probe_name":"hdf5","function_name":"H5F_mpi_retrieve_comm"},"3060":{"probe_name":"hdf5","function_name":"H5F_object_flush_cb"},"3061":{"probe_name":"hdf5","function_name":"H5F_open"},"3062":{"probe_name":"hdf5","function_name":"H5F_prefix_open_file"},"3063":{"probe_name":"hdf5","function_name":"H5F_rdcc_nbytes"},"3064":{"probe_name":"hdf5","function_name":"H5F_rdcc_nslots"},"3065":{"probe_name":"hdf5","function_name":"H5F_rdcc_w0"},"3066":{"probe_name":"hdf5","function_name":"H5F_same_shared"},"3067":{"probe_name":"hdf5","function_name":"H5F_set_coll_metadata_reads"},"3068":{"probe_name":"hdf5","function_name":"H5F_set_grp_btree_shared"},"3069":{"probe_name":"hdf5","function_name":"H5F_set_min_dset_ohdr"},"3070":{"probe_name":"hdf5","function_name":"H5F_set_retries"},"3071":{"probe_name":"hdf5","function_name":"H5F_set_sohm_addr"},"3072":{"probe_name":"hdf5","function_name":"H5F_set_sohm_nindexes"},"3073":{"probe_name":"hdf5","function_name":"H5F_set_sohm_vers"},"3074":{"probe_name":"hdf5","function_name":"H5F_set_store_msg_crt_idx"},"3075":{"probe_name":"hdf5","function_name":"H5F_sfile_assert_num"},"3076":{"probe_name":"hdf5","function_name":"H5F_shared_block_read"},"3077":{"probe_name":"hdf5","function_name":"H5F_shared_block_write"},"3078":{"probe_name":"hdf5","function_name":"H5F_shared_coll_md_read"},"3079":{"probe_name":"hdf5","function_name":"H5F_shared_get_coll_metadata_reads"},"3080":{"probe_name":"hdf5","function_name":"H5F_shared_get_eoa"},"3081":{"probe_name":"hdf5","function_name":"H5F_shared_get_file_driver"},"3082":{"probe_name":"hdf5","function_name":"H5F_shared_get_intent"},"3083":{"probe_name":"hdf5","function_name":"H5F_shared_get_mpi_file_sync_required"},"3084":{"probe_name":"hdf5","function_name":"H5F_shared_has_feature"},"3085":{"probe_name":"hdf5","function_name":"H5F_shared_mpi_get_size"},"3086":{"probe_name":"hdf5","function_name":"H5F_shared_select_read"},"3087":{"probe_name":"hdf5","function_name":"H5F_shared_select_write"},"3088":{"probe_name":"hdf5","function_name":"H5F_shared_vector_read"},"3089":{"probe_name":"hdf5","function_name":"H5F_shared_vector_write"},"3090":{"probe_name":"hdf5","function_name":"H5F_sieve_buf_size"},"3091":{"probe_name":"hdf5","function_name":"H5F_sizeof_addr"},"3092":{"probe_name":"hdf5","function_name":"H5F_sizeof_size"},"3093":{"probe_name":"hdf5","function_name":"H5F_start_mdc_log_on_access"},"3094":{"probe_name":"hdf5","function_name":"H5F_store_msg_crt_idx"},"3095":{"probe_name":"hdf5","function_name":"H5F_super_dirty"},"3096":{"probe_name":"hdf5","function_name":"H5F_sym_leaf_k"},"3097":{"probe_name":"hdf5","function_name":"H5F_term_package"},"3098":{"probe_name":"hdf5","function_name":"H5F_track_metadata_read_retries"},"3099":{"probe_name":"hdf5","function_name":"H5F_traverse_mount"},"3100":{"probe_name":"hdf5","function_name":"H5F_try_close"},"3101":{"probe_name":"hdf5","function_name":"H5F_try_close.localalias"},"3102":{"probe_name":"hdf5","function_name":"H5F_unmount"},"3103":{"probe_name":"hdf5","function_name":"H5F_use_mdc_logging"},"3104":{"probe_name":"hdf5","function_name":"H5F_use_tmp_space"},"3105":{"probe_name":"hdf5","function_name":"H5Fclear_elink_file_cache"},"3106":{"probe_name":"hdf5","function_name":"H5Fclose"},"3107":{"probe_name":"hdf5","function_name":"H5Fclose_async"},"3108":{"probe_name":"hdf5","function_name":"H5Fcreate"},"3109":{"probe_name":"hdf5","function_name":"H5Fcreate_async"},"3110":{"probe_name":"hdf5","function_name":"H5Fdelete"},"3111":{"probe_name":"hdf5","function_name":"H5Fflush"},"3112":{"probe_name":"hdf5","function_name":"H5Fflush_async"},"3113":{"probe_name":"hdf5","function_name":"H5Fformat_convert"},"3114":{"probe_name":"hdf5","function_name":"H5Fget_access_plist"},"3115":{"probe_name":"hdf5","function_name":"H5Fget_create_plist"},"3116":{"probe_name":"hdf5","function_name":"H5Fget_dset_no_attrs_hint"},"3117":{"probe_name":"hdf5","function_name":"H5Fget_eoa"},"3118":{"probe_name":"hdf5","function_name":"H5Fget_file_image"},"3119":{"probe_name":"hdf5","function_name":"H5Fget_fileno"},"3120":{"probe_name":"hdf5","function_name":"H5Fget_filesize"},"3121":{"probe_name":"hdf5","function_name":"H5Fget_free_sections"},"3122":{"probe_name":"hdf5","function_name":"H5Fget_freespace"},"3123":{"probe_name":"hdf5","function_name":"H5Fget_info1"},"3124":{"probe_name":"hdf5","function_name":"H5Fget_info2"},"3125":{"probe_name":"hdf5","function_name":"H5Fget_intent"},"3126":{"probe_name":"hdf5","function_name":"H5Fget_mdc_config"},"3127":{"probe_name":"hdf5","function_name":"H5Fget_mdc_hit_rate"},"3128":{"probe_name":"hdf5","function_name":"H5Fget_mdc_image_info"},"3129":{"probe_name":"hdf5","function_name":"H5Fget_mdc_logging_status"},"3130":{"probe_name":"hdf5","function_name":"H5Fget_mdc_size"},"3131":{"probe_name":"hdf5","function_name":"H5Fget_metadata_read_retry_info"},"3132":{"probe_name":"hdf5","function_name":"H5Fget_mpi_atomicity"},"3133":{"probe_name":"hdf5","function_name":"H5Fget_name"},"3134":{"probe_name":"hdf5","function_name":"H5Fget_obj_count"},"3135":{"probe_name":"hdf5","function_name":"H5Fget_obj_ids"},"3136":{"probe_name":"hdf5","function_name":"H5Fget_page_buffering_stats"},"3137":{"probe_name":"hdf5","function_name":"H5Fget_vfd_handle"},"3138":{"probe_name":"hdf5","function_name":"H5Fincrement_filesize"},"3139":{"probe_name":"hdf5","function_name":"H5Fis_accessible"},"3140":{"probe_name":"hdf5","function_name":"H5Fis_hdf5"},"3141":{"probe_name":"hdf5","function_name":"H5Fmount"},"3142":{"probe_name":"hdf5","function_name":"H5Fopen"},"3143":{"probe_name":"hdf5","function_name":"H5Fopen_async"},"3144":{"probe_name":"hdf5","function_name":"H5Freopen"},"3145":{"probe_name":"hdf5","function_name":"H5Freopen_async"},"3146":{"probe_name":"hdf5","function_name":"H5Freset_mdc_hit_rate_stats"},"3147":{"probe_name":"hdf5","function_name":"H5Freset_page_buffering_stats"},"3148":{"probe_name":"hdf5","function_name":"H5Fset_dset_no_attrs_hint"},"3149":{"probe_name":"hdf5","function_name":"H5Fset_latest_format"},"3150":{"probe_name":"hdf5","function_name":"H5Fset_libver_bounds"},"3151":{"probe_name":"hdf5","function_name":"H5Fset_mdc_config"},"3152":{"probe_name":"hdf5","function_name":"H5Fset_mpi_atomicity"},"3153":{"probe_name":"hdf5","function_name":"H5Fstart_mdc_logging"},"3154":{"probe_name":"hdf5","function_name":"H5Fstart_swmr_write"},"3155":{"probe_name":"hdf5","function_name":"H5Fstop_mdc_logging"},"3156":{"probe_name":"hdf5","function_name":"H5Funmount"},"3157":{"probe_name":"hdf5","function_name":"H5G__cache_node_deserialize"},"3158":{"probe_name":"hdf5","function_name":"H5G__cache_node_free_icr"},"3159":{"probe_name":"hdf5","function_name":"H5G__cache_node_get_initial_load_size"},"3160":{"probe_name":"hdf5","function_name":"H5G__cache_node_image_len"},"3161":{"probe_name":"hdf5","function_name":"H5G__cache_node_serialize"},"3162":{"probe_name":"hdf5","function_name":"H5G__close_cb"},"3163":{"probe_name":"hdf5","function_name":"H5G__common_path"},"3164":{"probe_name":"hdf5","function_name":"H5G__compact_build_table_cb"},"3165":{"probe_name":"hdf5","function_name":"H5G__compact_get_name_by_idx"},"3166":{"probe_name":"hdf5","function_name":"H5G__compact_insert"},"3167":{"probe_name":"hdf5","function_name":"H5G__compact_iterate"},"3168":{"probe_name":"hdf5","function_name":"H5G__compact_lookup"},"3169":{"probe_name":"hdf5","function_name":"H5G__compact_lookup_by_idx"},"3170":{"probe_name":"hdf5","function_name":"H5G__compact_lookup_cb"},"3171":{"probe_name":"hdf5","function_name":"H5G__compact_remove"},"3172":{"probe_name":"hdf5","function_name":"H5G__compact_remove_by_idx"},"3173":{"probe_name":"hdf5","function_name":"H5G__compact_remove_common_cb"},"3174":{"probe_name":"hdf5","function_name":"H5G__component"},"3175":{"probe_name":"hdf5","function_name":"H5G__create"},"3176":{"probe_name":"hdf5","function_name":"H5G__create_named"},"3177":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_corder_compare"},"3178":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_corder_debug"},"3179":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_corder_decode"},"3180":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_corder_encode"},"3181":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_corder_store"},"3182":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_name_compare"},"3183":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_name_debug"},"3184":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_name_decode"},"3185":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_name_encode"},"3186":{"probe_name":"hdf5","function_name":"H5G__dense_btree2_name_store"},"3187":{"probe_name":"hdf5","function_name":"H5G__dense_build_table"},"3188":{"probe_name":"hdf5","function_name":"H5G__dense_build_table_cb"},"3189":{"probe_name":"hdf5","function_name":"H5G__dense_create"},"3190":{"probe_name":"hdf5","function_name":"H5G__dense_delete"},"3191":{"probe_name":"hdf5","function_name":"H5G__dense_fh_name_cmp"},"3192":{"probe_name":"hdf5","function_name":"H5G__dense_get_name_by_idx"},"3193":{"probe_name":"hdf5","function_name":"H5G__dense_get_name_by_idx_bt2_cb"},"3194":{"probe_name":"hdf5","function_name":"H5G__dense_get_name_by_idx_fh_cb"},"3195":{"probe_name":"hdf5","function_name":"H5G__dense_insert"},"3196":{"probe_name":"hdf5","function_name":"H5G__dense_iterate"},"3197":{"probe_name":"hdf5","function_name":"H5G__dense_iterate_bt2_cb"},"3198":{"probe_name":"hdf5","function_name":"H5G__dense_iterate_fh_cb"},"3199":{"probe_name":"hdf5","function_name":"H5G__dense_lookup"},"3200":{"probe_name":"hdf5","function_name":"H5G__dense_lookup_by_idx"},"3201":{"probe_name":"hdf5","function_name":"H5G__dense_lookup_by_idx_bt2_cb"},"3202":{"probe_name":"hdf5","function_name":"H5G__dense_lookup_by_idx_fh_cb"},"3203":{"probe_name":"hdf5","function_name":"H5G__dense_lookup_cb"},"3204":{"probe_name":"hdf5","function_name":"H5G__dense_remove"},"3205":{"probe_name":"hdf5","function_name":"H5G__dense_remove_bt2_cb"},"3206":{"probe_name":"hdf5","function_name":"H5G__dense_remove_by_idx"},"3207":{"probe_name":"hdf5","function_name":"H5G__dense_remove_by_idx_bt2_cb"},"3208":{"probe_name":"hdf5","function_name":"H5G__dense_remove_by_idx_fh_cb"},"3209":{"probe_name":"hdf5","function_name":"H5G__dense_remove_fh_cb"},"3210":{"probe_name":"hdf5","function_name":"H5G__ent_copy"},"3211":{"probe_name":"hdf5","function_name":"H5G__ent_debug"},"3212":{"probe_name":"hdf5","function_name":"H5G__ent_decode_vec"},"3213":{"probe_name":"hdf5","function_name":"H5G__ent_encode_vec"},"3214":{"probe_name":"hdf5","function_name":"H5G__ent_reset"},"3215":{"probe_name":"hdf5","function_name":"H5G__ent_to_link"},"3216":{"probe_name":"hdf5","function_name":"H5G__free_visit_visited"},"3217":{"probe_name":"hdf5","function_name":"H5G__get_info_by_idx"},"3218":{"probe_name":"hdf5","function_name":"H5G__get_info_by_name"},"3219":{"probe_name":"hdf5","function_name":"H5G__get_name_by_addr_cb"},"3220":{"probe_name":"hdf5","function_name":"H5G__get_objinfo"},"3221":{"probe_name":"hdf5","function_name":"H5G__get_objinfo_cb"},"3222":{"probe_name":"hdf5","function_name":"H5G__has_links_test"},"3223":{"probe_name":"hdf5","function_name":"H5G__has_stab_test"},"3224":{"probe_name":"hdf5","function_name":"H5G__is_empty_test"},"3225":{"probe_name":"hdf5","function_name":"H5G__is_new_dense_test"},"3226":{"probe_name":"hdf5","function_name":"H5G__iterate_cb"},"3227":{"probe_name":"hdf5","function_name":"H5G__lheap_size_test"},"3228":{"probe_name":"hdf5","function_name":"H5G__link_cmp_corder_dec"},"3229":{"probe_name":"hdf5","function_name":"H5G__link_cmp_corder_inc"},"3230":{"probe_name":"hdf5","function_name":"H5G__link_cmp_name_dec"},"3231":{"probe_name":"hdf5","function_name":"H5G__link_cmp_name_inc"},"3232":{"probe_name":"hdf5","function_name":"H5G__link_iterate_table"},"3233":{"probe_name":"hdf5","function_name":"H5G__link_name_replace"},"3234":{"probe_name":"hdf5","function_name":"H5G__link_release_table"},"3235":{"probe_name":"hdf5","function_name":"H5G__link_sort_table"},"3236":{"probe_name":"hdf5","function_name":"H5G__link_to_ent"},"3237":{"probe_name":"hdf5","function_name":"H5G__link_to_loc"},"3238":{"probe_name":"hdf5","function_name":"H5G__loc_addr"},"3239":{"probe_name":"hdf5","function_name":"H5G__loc_addr_cb"},"3240":{"probe_name":"hdf5","function_name":"H5G__loc_exists_cb"},"3241":{"probe_name":"hdf5","function_name":"H5G__loc_find_by_idx_cb"},"3242":{"probe_name":"hdf5","function_name":"H5G__loc_find_cb"},"3243":{"probe_name":"hdf5","function_name":"H5G__loc_get_comment_cb"},"3244":{"probe_name":"hdf5","function_name":"H5G__loc_info_cb"},"3245":{"probe_name":"hdf5","function_name":"H5G__loc_insert"},"3246":{"probe_name":"hdf5","function_name":"H5G__loc_native_info_cb"},"3247":{"probe_name":"hdf5","function_name":"H5G__loc_set_comment_cb"},"3248":{"probe_name":"hdf5","function_name":"H5G__name_init"},"3249":{"probe_name":"hdf5","function_name":"H5G__name_replace_cb"},"3250":{"probe_name":"hdf5","function_name":"H5G__new_dense_info_test"},"3251":{"probe_name":"hdf5","function_name":"H5G__node_build_table"},"3252":{"probe_name":"hdf5","function_name":"H5G__node_by_idx"},"3253":{"probe_name":"hdf5","function_name":"H5G__node_cmp2"},"3254":{"probe_name":"hdf5","function_name":"H5G__node_cmp3"},"3255":{"probe_name":"hdf5","function_name":"H5G__node_copy"},"3256":{"probe_name":"hdf5","function_name":"H5G__node_create"},"3257":{"probe_name":"hdf5","function_name":"H5G__node_debug_key"},"3258":{"probe_name":"hdf5","function_name":"H5G__node_decode_key"},"3259":{"probe_name":"hdf5","function_name":"H5G__node_encode_key"},"3260":{"probe_name":"hdf5","function_name":"H5G__node_found"},"3261":{"probe_name":"hdf5","function_name":"H5G__node_free"},"3262":{"probe_name":"hdf5","function_name":"H5G__node_get_shared"},"3263":{"probe_name":"hdf5","function_name":"H5G__node_init"},"3264":{"probe_name":"hdf5","function_name":"H5G__node_insert"},"3265":{"probe_name":"hdf5","function_name":"H5G__node_iterate"},"3266":{"probe_name":"hdf5","function_name":"H5G__node_iterate_size"},"3267":{"probe_name":"hdf5","function_name":"H5G__node_remove"},"3268":{"probe_name":"hdf5","function_name":"H5G__node_sumup"},"3269":{"probe_name":"hdf5","function_name":"H5G__obj_compact_to_dense_cb"},"3270":{"probe_name":"hdf5","function_name":"H5G__obj_create"},"3271":{"probe_name":"hdf5","function_name":"H5G__obj_create_real"},"3272":{"probe_name":"hdf5","function_name":"H5G__obj_get_linfo"},"3273":{"probe_name":"hdf5","function_name":"H5G__obj_info"},"3274":{"probe_name":"hdf5","function_name":"H5G__obj_iterate"},"3275":{"probe_name":"hdf5","function_name":"H5G__obj_lookup"},"3276":{"probe_name":"hdf5","function_name":"H5G__obj_remove_update_linfo"},"3277":{"probe_name":"hdf5","function_name":"H5G__obj_stab_to_new_cb"},"3278":{"probe_name":"hdf5","function_name":"H5G__open_name"},"3279":{"probe_name":"hdf5","function_name":"H5G__stab_bh_size"},"3280":{"probe_name":"hdf5","function_name":"H5G__stab_count"},"3281":{"probe_name":"hdf5","function_name":"H5G__stab_create"},"3282":{"probe_name":"hdf5","function_name":"H5G__stab_create_components"},"3283":{"probe_name":"hdf5","function_name":"H5G__stab_delete"},"3284":{"probe_name":"hdf5","function_name":"H5G__stab_get_name_by_idx"},"3285":{"probe_name":"hdf5","function_name":"H5G__stab_get_name_by_idx_cb"},"3286":{"probe_name":"hdf5","function_name":"H5G__stab_insert"},"3287":{"probe_name":"hdf5","function_name":"H5G__stab_insert_real"},"3288":{"probe_name":"hdf5","function_name":"H5G__stab_iterate"},"3289":{"probe_name":"hdf5","function_name":"H5G__stab_lookup"},"3290":{"probe_name":"hdf5","function_name":"H5G__stab_lookup_by_idx"},"3291":{"probe_name":"hdf5","function_name":"H5G__stab_lookup_by_idx_cb"},"3292":{"probe_name":"hdf5","function_name":"H5G__stab_lookup_cb"},"3293":{"probe_name":"hdf5","function_name":"H5G__stab_remove"},"3294":{"probe_name":"hdf5","function_name":"H5G__stab_remove_by_idx"},"3295":{"probe_name":"hdf5","function_name":"H5G__stab_valid"},"3296":{"probe_name":"hdf5","function_name":"H5G__traverse_real"},"3297":{"probe_name":"hdf5","function_name":"H5G__traverse_slink_cb"},"3298":{"probe_name":"hdf5","function_name":"H5G__traverse_special"},"3299":{"probe_name":"hdf5","function_name":"H5G__user_path_test"},"3300":{"probe_name":"hdf5","function_name":"H5G__verify_cached_stab_test"},"3301":{"probe_name":"hdf5","function_name":"H5G__verify_cached_stabs_test"},"3302":{"probe_name":"hdf5","function_name":"H5G__verify_cached_stabs_test_cb"},"3303":{"probe_name":"hdf5","function_name":"H5G__visit_cb"},"3304":{"probe_name":"hdf5","function_name":"H5G_build_fullpath_refstr_str"},"3305":{"probe_name":"hdf5","function_name":"H5G_close"},"3306":{"probe_name":"hdf5","function_name":"H5G_ent_decode"},"3307":{"probe_name":"hdf5","function_name":"H5G_ent_encode"},"3308":{"probe_name":"hdf5","function_name":"H5G_fileof"},"3309":{"probe_name":"hdf5","function_name":"H5G_get_create_plist"},"3310":{"probe_name":"hdf5","function_name":"H5G_get_gcpl_id"},"3311":{"probe_name":"hdf5","function_name":"H5G_get_name"},"3312":{"probe_name":"hdf5","function_name":"H5G_get_name_by_addr"},"3313":{"probe_name":"hdf5","function_name":"H5G_get_shared_count"},"3314":{"probe_name":"hdf5","function_name":"H5G_init"},"3315":{"probe_name":"hdf5","function_name":"H5G_iterate"},"3316":{"probe_name":"hdf5","function_name":"H5G_link_to_info"},"3317":{"probe_name":"hdf5","function_name":"H5G_loc"},"3318":{"probe_name":"hdf5","function_name":"H5G_loc_copy"},"3319":{"probe_name":"hdf5","function_name":"H5G_loc_exists"},"3320":{"probe_name":"hdf5","function_name":"H5G_loc_find"},"3321":{"probe_name":"hdf5","function_name":"H5G_loc_find_by_idx"},"3322":{"probe_name":"hdf5","function_name":"H5G_loc_free"},"3323":{"probe_name":"hdf5","function_name":"H5G_loc_get_comment"},"3324":{"probe_name":"hdf5","function_name":"H5G_loc_info"},"3325":{"probe_name":"hdf5","function_name":"H5G_loc_native_info"},"3326":{"probe_name":"hdf5","function_name":"H5G_loc_real"},"3327":{"probe_name":"hdf5","function_name":"H5G_loc_reset"},"3328":{"probe_name":"hdf5","function_name":"H5G_loc_set_comment"},"3329":{"probe_name":"hdf5","function_name":"H5G_map_obj_type"},"3330":{"probe_name":"hdf5","function_name":"H5G_mkroot"},"3331":{"probe_name":"hdf5","function_name":"H5G_mount"},"3332":{"probe_name":"hdf5","function_name":"H5G_mounted"},"3333":{"probe_name":"hdf5","function_name":"H5G_name_copy"},"3334":{"probe_name":"hdf5","function_name":"H5G_name_free"},"6065":{"probe_name":"hdf5","function_name":"H5VL_wrap_object"},"6066":{"probe_name":"hdf5","function_name":"H5VL_wrap_register"},"6067":{"probe_name":"hdf5","function_name":"H5VLattr_close"},"6068":{"probe_name":"hdf5","function_name":"H5VLattr_create"},"6069":{"probe_name":"hdf5","function_name":"H5VLattr_get"},"6070":{"probe_name":"hdf5","function_name":"H5VLattr_open"},"6071":{"probe_name":"hdf5","function_name":"H5VLattr_optional"},"6072":{"probe_name":"hdf5","function_name":"H5VLattr_optional_op"},"6073":{"probe_name":"hdf5","function_name":"H5VLattr_read"},"6074":{"probe_name":"hdf5","function_name":"H5VLattr_specific"},"6075":{"probe_name":"hdf5","function_name":"H5VLattr_write"},"6076":{"probe_name":"hdf5","function_name":"H5VLblob_get"},"6077":{"probe_name":"hdf5","function_name":"H5VLblob_optional"},"6078":{"probe_name":"hdf5","function_name":"H5VLblob_put"},"6079":{"probe_name":"hdf5","function_name":"H5VLblob_specific"},"6080":{"probe_name":"hdf5","function_name":"H5VLclose"},"6081":{"probe_name":"hdf5","function_name":"H5VLcmp_connector_cls"},"6082":{"probe_name":"hdf5","function_name":"H5VLcmp_connector_info"},"6083":{"probe_name":"hdf5","function_name":"H5VLconnector_info_to_str"},"6084":{"probe_name":"hdf5","function_name":"H5VLconnector_str_to_info"},"6085":{"probe_name":"hdf5","function_name":"H5VLcopy_connector_info"},"6086":{"probe_name":"hdf5","function_name":"H5VLdataset_close"},"6087":{"probe_name":"hdf5","function_name":"H5VLdataset_create"},"6088":{"probe_name":"hdf5","function_name":"H5VLdataset_get"},"6089":{"probe_name":"hdf5","function_name":"H5VLdataset_open"},"6090":{"probe_name":"hdf5","function_name":"H5VLdataset_optional"},"6091":{"probe_name":"hdf5","function_name":"H5VLdataset_optional_op"},"6092":{"probe_name":"hdf5","function_name":"H5VLdataset_read"},"6093":{"probe_name":"hdf5","function_name":"H5VLdataset_specific"},"6094":{"probe_name":"hdf5","function_name":"H5VLdataset_write"},"6095":{"probe_name":"hdf5","function_name":"H5VLdatatype_close"},"6096":{"probe_name":"hdf5","function_name":"H5VLdatatype_commit"},"6097":{"probe_name":"hdf5","function_name":"H5VLdatatype_get"},"6098":{"probe_name":"hdf5","function_name":"H5VLdatatype_open"},"6099":{"probe_name":"hdf5","function_name":"H5VLdatatype_optional"},"6100":{"probe_name":"hdf5","function_name":"H5VLdatatype_optional_op"},"6101":{"probe_name":"hdf5","function_name":"H5VLdatatype_specific"},"6102":{"probe_name":"hdf5","function_name":"H5VLfile_close"},"6103":{"probe_name":"hdf5","function_name":"H5VLfile_create"},"6104":{"probe_name":"hdf5","function_name":"H5VLfile_get"},"6105":{"probe_name":"hdf5","function_name":"H5VLfile_open"},"6106":{"probe_name":"hdf5","function_name":"H5VLfile_optional"},"6107":{"probe_name":"hdf5","function_name":"H5VLfile_optional_op"},"6108":{"probe_name":"hdf5","function_name":"H5VLfile_specific"},"6109":{"probe_name":"hdf5","function_name":"H5VLfind_opt_operation"},"6110":{"probe_name":"hdf5","function_name":"H5VLfinish_lib_state"},"6111":{"probe_name":"hdf5","function_name":"H5VLfree_connector_info"},"6112":{"probe_name":"hdf5","function_name":"H5VLfree_lib_state"},"6113":{"probe_name":"hdf5","function_name":"H5VLfree_wrap_ctx"},"6114":{"probe_name":"hdf5","function_name":"H5VLget_cap_flags"},"6115":{"probe_name":"hdf5","function_name":"H5VLget_connector_id"},"6116":{"probe_name":"hdf5","function_name":"H5VLget_connector_id_by_name"},"6117":{"probe_name":"hdf5","function_name":"H5VLget_connector_id_by_value"},"6118":{"probe_name":"hdf5","function_name":"H5VLget_connector_name"},"6119":{"probe_name":"hdf5","function_name":"H5VLget_file_type"},"6120":{"probe_name":"hdf5","function_name":"H5VLget_object"},"6121":{"probe_name":"hdf5","function_name":"H5VLget_value"},"6122":{"probe_name":"hdf5","function_name":"H5VLget_wrap_ctx"},"6123":{"probe_name":"hdf5","function_name":"H5VLgroup_close"},"6124":{"probe_name":"hdf5","function_name":"H5VLgroup_create"},"6125":{"probe_name":"hdf5","function_name":"H5VLgroup_get"},"6126":{"probe_name":"hdf5","function_name":"H5VLgroup_open"},"6127":{"probe_name":"hdf5","function_name":"H5VLgroup_optional"},"6128":{"probe_name":"hdf5","function_name":"H5VLgroup_optional_op"},"6129":{"probe_name":"hdf5","function_name":"H5VLgroup_specific"},"6130":{"probe_name":"hdf5","function_name":"H5VLinitialize"},"6131":{"probe_name":"hdf5","function_name":"H5VLintrospect_get_cap_flags"},"6132":{"probe_name":"hdf5","function_name":"H5VLintrospect_get_conn_cls"},"6133":{"probe_name":"hdf5","function_name":"H5VLintrospect_opt_query"},"6134":{"probe_name":"hdf5","function_name":"H5VLis_connector_registered_by_name"},"6135":{"probe_name":"hdf5","function_name":"H5VLis_connector_registered_by_value"},"6136":{"probe_name":"hdf5","function_name":"H5VLlink_copy"},"6137":{"probe_name":"hdf5","function_name":"H5VLlink_create"},"6138":{"probe_name":"hdf5","function_name":"H5VLlink_get"},"6139":{"probe_name":"hdf5","function_name":"H5VLlink_move"},"6140":{"probe_name":"hdf5","function_name":"H5VLlink_optional"},"6141":{"probe_name":"hdf5","function_name":"H5VLlink_optional_op"},"6142":{"probe_name":"hdf5","function_name":"H5VLlink_specific"},"6143":{"probe_name":"hdf5","function_name":"H5VLnative_addr_to_token"},"6144":{"probe_name":"hdf5","function_name":"H5VLnative_token_to_addr"},"6145":{"probe_name":"hdf5","function_name":"H5VLobject"},"6146":{"probe_name":"hdf5","function_name":"H5VLobject_copy"},"6147":{"probe_name":"hdf5","function_name":"H5VLobject_get"},"6148":{"probe_name":"hdf5","function_name":"H5VLobject_is_native"},"6149":{"probe_name":"hdf5","function_name":"H5VLobject_open"},"6150":{"probe_name":"hdf5","function_name":"H5VLobject_optional"},"6151":{"probe_name":"hdf5","function_name":"H5VLobject_optional_op"},"6152":{"probe_name":"hdf5","function_name":"H5VLobject_specific"},"6153":{"probe_name":"hdf5","function_name":"H5VLoptional"},"6154":{"probe_name":"hdf5","function_name":"H5VLpeek_connector_id_by_name"},"6155":{"probe_name":"hdf5","function_name":"H5VLpeek_connector_id_by_value"},"6156":{"probe_name":"hdf5","function_name":"H5VLquery_optional"},"6157":{"probe_name":"hdf5","function_name":"H5VLregister_connector"},"6158":{"probe_name":"hdf5","function_name":"H5VLregister_connector_by_name"},"6159":{"probe_name":"hdf5","function_name":"H5VLregister_connector_by_value"},"6160":{"probe_name":"hdf5","function_name":"H5VLregister_opt_operation"},"6161":{"probe_name":"hdf5","function_name":"H5VLrequest_cancel"},"6162":{"probe_name":"hdf5","function_name":"H5VLrequest_free"},"6163":{"probe_name":"hdf5","function_name":"H5VLrequest_notify"},"6164":{"probe_name":"hdf5","function_name":"H5VLrequest_optional"},"6165":{"probe_name":"hdf5","function_name":"H5VLrequest_optional_op"},"6166":{"probe_name":"hdf5","function_name":"H5VLrequest_specific"},"6167":{"probe_name":"hdf5","function_name":"H5VLrequest_wait"},"6168":{"probe_name":"hdf5","function_name":"H5VLrestore_lib_state"},"6169":{"probe_name":"hdf5","function_name":"H5VLretrieve_lib_state"},"6170":{"probe_name":"hdf5","function_name":"H5VLstart_lib_state"},"6171":{"probe_name":"hdf5","function_name":"H5VLterminate"},"6172":{"probe_name":"hdf5","function_name":"H5VLtoken_cmp"},"6173":{"probe_name":"hdf5","function_name":"H5VLtoken_from_str"},"6174":{"probe_name":"hdf5","function_name":"H5VLtoken_to_str"},"6175":{"probe_name":"hdf5","function_name":"H5VLunregister_connector"},"6176":{"probe_name":"hdf5","function_name":"H5VLunregister_opt_operation"},"6177":{"probe_name":"hdf5","function_name":"H5VLunwrap_object"},"6178":{"probe_name":"hdf5","function_name":"H5VLwrap_object"},"6179":{"probe_name":"hdf5","function_name":"H5VLwrap_register"},"6180":{"probe_name":"hdf5","function_name":"H5VM_array_calc"},"6181":{"probe_name":"hdf5","function_name":"H5VM_array_calc_pre"},"6182":{"probe_name":"hdf5","function_name":"H5VM_array_down"},"6183":{"probe_name":"hdf5","function_name":"H5VM_array_fill"},"6184":{"probe_name":"hdf5","function_name":"H5VM_array_offset"},"6185":{"probe_name":"hdf5","function_name":"H5VM_array_offset_pre"},"6186":{"probe_name":"hdf5","function_name":"H5VM_chunk_index"},"6187":{"probe_name":"hdf5","function_name":"H5VM_chunk_index_scaled"},"6188":{"probe_name":"hdf5","function_name":"H5VM_chunk_scaled"},"6189":{"probe_name":"hdf5","function_name":"H5VM_hyper_copy"},"6190":{"probe_name":"hdf5","function_name":"H5VM_hyper_eq"},"6191":{"probe_name":"hdf5","function_name":"H5VM_hyper_fill"},"6192":{"probe_name":"hdf5","function_name":"H5VM_hyper_stride"},"6193":{"probe_name":"hdf5","function_name":"H5VM_memcpyvv"},"6194":{"probe_name":"hdf5","function_name":"H5VM_opvv"},"6195":{"probe_name":"hdf5","function_name":"H5VM_stride_copy"},"6196":{"probe_name":"hdf5","function_name":"H5VM_stride_copy.part.0"},"6197":{"probe_name":"hdf5","function_name":"H5VM_stride_copy_s"},"6198":{"probe_name":"hdf5","function_name":"H5VM_stride_fill"},"6199":{"probe_name":"hdf5","function_name":"H5WB_actual"},"6200":{"probe_name":"hdf5","function_name":"H5WB_actual_clear"},"6201":{"probe_name":"hdf5","function_name":"H5WB_unwrap"},"6202":{"probe_name":"hdf5","function_name":"H5WB_wrap"},"6203":{"probe_name":"hdf5","function_name":"H5Z__calc_parms_array"},"6204":{"probe_name":"hdf5","function_name":"H5Z__calc_parms_compound"},"6205":{"probe_name":"hdf5","function_name":"H5Z__can_apply_nbit"},"6206":{"probe_name":"hdf5","function_name":"H5Z__can_apply_scaleoffset"},"6207":{"probe_name":"hdf5","function_name":"H5Z__check_unregister_dset_cb"},"6208":{"probe_name":"hdf5","function_name":"H5Z__check_unregister_group_cb"},"6209":{"probe_name":"hdf5","function_name":"H5Z__do_op"},"6210":{"probe_name":"hdf5","function_name":"H5Z__filter_deflate"},"6211":{"probe_name":"hdf5","function_name":"H5Z__filter_fletcher32"},"6212":{"probe_name":"hdf5","function_name":"H5Z__filter_nbit"},"6213":{"probe_name":"hdf5","function_name":"H5Z__filter_scaleoffset"},"6214":{"probe_name":"hdf5","function_name":"H5Z__filter_shuffle"},"6215":{"probe_name":"hdf5","function_name":"H5Z__flush_file_cb"},"6216":{"probe_name":"hdf5","function_name":"H5Z__get_token"},"6217":{"probe_name":"hdf5","function_name":"H5Z__nbit_compress_one_array"},"6218":{"probe_name":"hdf5","function_name":"H5Z__nbit_compress_one_atomic"},"6219":{"probe_name":"hdf5","function_name":"H5Z__nbit_compress_one_compound"},"6220":{"probe_name":"hdf5","function_name":"H5Z__nbit_decompress_one_array"},"6221":{"probe_name":"hdf5","function_name":"H5Z__nbit_decompress_one_atomic"},"6222":{"probe_name":"hdf5","function_name":"H5Z__nbit_decompress_one_compound"},"6223":{"probe_name":"hdf5","function_name":"H5Z__new_node.part.0"},"6224":{"probe_name":"hdf5","function_name":"H5Z__parse_expression"},"6225":{"probe_name":"hdf5","function_name":"H5Z__parse_factor"},"6226":{"probe_name":"hdf5","function_name":"H5Z__parse_term"},"6227":{"probe_name":"hdf5","function_name":"H5Z__prelude_callback"},"6228":{"probe_name":"hdf5","function_name":"H5Z__prepare_prelude_callback_dcpl"},"6229":{"probe_name":"hdf5","function_name":"H5Z__scaleoffset_get_type"},"6230":{"probe_name":"hdf5","function_name":"H5Z__scaleoffset_postdecompress_i"},"6231":{"probe_name":"hdf5","function_name":"H5Z__scaleoffset_precompress_fd"},"6232":{"probe_name":"hdf5","function_name":"H5Z__set_local_nbit"},"6233":{"probe_name":"hdf5","function_name":"H5Z__set_local_scaleoffset"},"6234":{"probe_name":"hdf5","function_name":"H5Z__set_local_shuffle"},"6235":{"probe_name":"hdf5","function_name":"H5Z__set_parms_array"},"6236":{"probe_name":"hdf5","function_name":"H5Z__set_parms_atomic"},"6237":{"probe_name":"hdf5","function_name":"H5Z__set_parms_compound"},"6238":{"probe_name":"hdf5","function_name":"H5Z__unregister"},"6239":{"probe_name":"hdf5","function_name":"H5Z__xform_copy_tree.isra.0"},"6240":{"probe_name":"hdf5","function_name":"H5Z__xform_destroy_parse_tree.part.0"},"6241":{"probe_name":"hdf5","function_name":"H5Z__xform_eval_full"},"6242":{"probe_name":"hdf5","function_name":"H5Z__xform_reduce_tree"},"6243":{"probe_name":"hdf5","function_name":"H5Z_all_filters_avail"},"6244":{"probe_name":"hdf5","function_name":"H5Z_append"},"6245":{"probe_name":"hdf5","function_name":"H5Z_can_apply"},"6246":{"probe_name":"hdf5","function_name":"H5Z_can_apply_direct"},"6247":{"probe_name":"hdf5","function_name":"H5Z_delete"},"6248":{"probe_name":"hdf5","function_name":"H5Z_filter_avail"},"6249":{"probe_name":"hdf5","function_name":"H5Z_filter_in_pline"},"6250":{"probe_name":"hdf5","function_name":"H5Z_filter_info"},"6251":{"probe_name":"hdf5","function_name":"H5Z_find"},"6252":{"probe_name":"hdf5","function_name":"H5Z_get_filter_info"},"6253":{"probe_name":"hdf5","function_name":"H5Z_ignore_filters"},"6254":{"probe_name":"hdf5","function_name":"H5Z_init"},"6255":{"probe_name":"hdf5","function_name":"H5Z_modify"},"6256":{"probe_name":"hdf5","function_name":"H5Z_pipeline"},"6257":{"probe_name":"hdf5","function_name":"H5Z_register"},"6258":{"probe_name":"hdf5","function_name":"H5Z_set_local"},"6259":{"probe_name":"hdf5","function_name":"H5Z_set_local_direct"},"6260":{"probe_name":"hdf5","function_name":"H5Z_term_package"},"6261":{"probe_name":"hdf5","function_name":"H5Z_xform_copy"},"6262":{"probe_name":"hdf5","function_name":"H5Z_xform_create"},"6263":{"probe_name":"hdf5","function_name":"H5Z_xform_destroy"},"6264":{"probe_name":"hdf5","function_name":"H5Z_xform_eval"},"6265":{"probe_name":"hdf5","function_name":"H5Z_xform_extract_xform_str"},"6266":{"probe_name":"hdf5","function_name":"H5Z_xform_noop"},"6267":{"probe_name":"hdf5","function_name":"H5Zfilter_avail"},"6268":{"probe_name":"hdf5","function_name":"H5Zget_filter_info"},"6269":{"probe_name":"hdf5","function_name":"H5Zregister"},"6270":{"probe_name":"hdf5","function_name":"H5Zunregister"},"6271":{"probe_name":"hdf5","function_name":"H5__debug_mask"},"6272":{"probe_name":"hdf5","function_name":"H5__mpi_delete_cb"},"6273":{"probe_name":"hdf5","function_name":"H5_bandwidth"},"6274":{"probe_name":"hdf5","function_name":"H5_basename"},"6275":{"probe_name":"hdf5","function_name":"H5_buffer_dump"},"6276":{"probe_name":"hdf5","function_name":"H5_build_extpath"},"6277":{"probe_name":"hdf5","function_name":"H5_checksum_crc"},"6278":{"probe_name":"hdf5","function_name":"H5_checksum_fletcher32"},"6279":{"probe_name":"hdf5","function_name":"H5_checksum_lookup3"},"6280":{"probe_name":"hdf5","function_name":"H5_checksum_metadata"},"6281":{"probe_name":"hdf5","function_name":"H5_combine_path"},"6282":{"probe_name":"hdf5","function_name":"H5_default_vfd_init"},"6283":{"probe_name":"hdf5","function_name":"H5_dirname"},"6284":{"probe_name":"hdf5","function_name":"H5_get_option"},"6285":{"probe_name":"hdf5","function_name":"H5_get_time"},"6286":{"probe_name":"hdf5","function_name":"H5_hash_string"},"6287":{"probe_name":"hdf5","function_name":"H5_init_library"},"6288":{"probe_name":"hdf5","function_name":"H5_make_time"},"6289":{"probe_name":"hdf5","function_name":"H5_mpi_comm_cmp"},"6290":{"probe_name":"hdf5","function_name":"H5_mpi_comm_dup"},"6291":{"probe_name":"hdf5","function_name":"H5_mpi_comm_free"},"6292":{"probe_name":"hdf5","function_name":"H5_mpi_get_bigio_count"},"6293":{"probe_name":"hdf5","function_name":"H5_mpi_info_cmp"},"6294":{"probe_name":"hdf5","function_name":"H5_mpi_info_dup"},"6295":{"probe_name":"hdf5","function_name":"H5_mpi_info_free"},"6296":{"probe_name":"hdf5","function_name":"H5_mpi_set_bigio_count"},"6297":{"probe_name":"hdf5","function_name":"H5_mpio_create_large_type"},"6298":{"probe_name":"hdf5","function_name":"H5_mpio_gatherv_alloc"},"6299":{"probe_name":"hdf5","function_name":"H5_mpio_gatherv_alloc_simple"},"6300":{"probe_name":"hdf5","function_name":"H5_mpio_get_file_sync_required"},"6301":{"probe_name":"hdf5","function_name":"H5_nanosleep"},"6302":{"probe_name":"hdf5","function_name":"H5_now"},"6303":{"probe_name":"hdf5","function_name":"H5_now_usec"},"6304":{"probe_name":"hdf5","function_name":"H5_strcasestr"},"6305":{"probe_name":"hdf5","function_name":"H5_term_library"},"6306":{"probe_name":"hdf5","function_name":"H5_term_library.part.0"},"6307":{"probe_name":"hdf5","function_name":"H5_timer_get_time_string"},"6308":{"probe_name":"hdf5","function_name":"H5_timer_get_times"},"6309":{"probe_name":"hdf5","function_name":"H5_timer_get_total_times"},"6310":{"probe_name":"hdf5","function_name":"H5_timer_init"},"6311":{"probe_name":"hdf5","function_name":"H5_timer_start"},"6312":{"probe_name":"hdf5","function_name":"H5_timer_stop"},"6313":{"probe_name":"hdf5","function_name":"H5_trace"},"6314":{"probe_name":"hdf5","function_name":"H5_trace_args"},"6315":{"probe_name":"hdf5","function_name":"H5allocate_memory"},"6316":{"probe_name":"hdf5","function_name":"H5atclose"},"6317":{"probe_name":"hdf5","function_name":"H5check_version"},"6318":{"probe_name":"hdf5","function_name":"H5close"},"6319":{"probe_name":"hdf5","function_name":"H5dont_atexit"},"6320":{"probe_name":"hdf5","function_name":"H5free_memory"},"6321":{"probe_name":"hdf5","function_name":"H5garbage_collect"},"6322":{"probe_name":"hdf5","function_name":"H5get_free_list_sizes"},"6323":{"probe_name":"hdf5","function_name":"H5get_libversion"},"6324":{"probe_name":"hdf5","function_name":"H5is_library_terminating"},"6325":{"probe_name":"hdf5","function_name":"H5is_library_threadsafe"},"6326":{"probe_name":"hdf5","function_name":"H5open"},"6327":{"probe_name":"hdf5","function_name":"H5resize_memory"},"6328":{"probe_name":"hdf5","function_name":"H5set_free_list_limits"},"6329":{"probe_name":"hdf5","function_name":"Nflock"},"6330":{"probe_name":"hdf5","function_name":"Pflock"},"6331":{"probe_name":"hdf5","function_name":"__do_global_dtors_aux"},"6332":{"probe_name":"hdf5","function_name":"atexit"},"6333":{"probe_name":"hdf5","function_name":"compute_next"},"6334":{"probe_name":"hdf5","function_name":"deregister_tm_clones"},"6335":{"probe_name":"hdf5","function_name":"frame_dummy"},"6336":{"probe_name":"hdf5","function_name":"open_members"},"6337":{"probe_name":"hdf5","function_name":"register_tm_clones"},"6338":{"probe_name":"bio","function_name":"bio_add_folio"},"6339":{"probe_name":"bio","function_name":"bio_add_folio_nofail"},"6340":{"probe_name":"bio","function_name":"bio_add_hw_folio"},"6341":{"probe_name":"bio","function_name":"bio_add_hw_page"},"6342":{"probe_name":"bio","function_name":"bio_add_page"},"6343":{"probe_name":"bio","function_name":"bio_add_pc_page"},"6344":{"probe_name":"bio","function_name":"bio_add_zone_append_page"},"6345":{"probe_name":"bio","function_name":"bio_alloc_bioset"},"6346":{"probe_name":"bio","function_name":"bio_alloc_cache_prune.constprop.0"},"6347":{"probe_name":"bio","function_name":"bio_alloc_clone"},"6348":{"probe_name":"bio","function_name":"bio_alloc_irq_cache_splice"},"6349":{"probe_name":"bio","function_name":"bio_alloc_map_data"},"6350":{"probe_name":"bio","function_name":"bio_alloc_rescue"},"6351":{"probe_name":"bio","function_name":"bio_associate_blkg"},"6352":{"probe_name":"bio","function_name":"bio_associate_blkg_from_css"},"6353":{"probe_name":"bio","function_name":"bio_associate_blkg_from_page.isra.0"},"6354":{"probe_name":"bio","function_name":"bio_attempt_back_merge"},"6355":{"probe_name":"bio","function_name":"bio_attempt_discard_merge"},"6356":{"probe_name":"bio","function_name":"bio_attempt_front_merge"},"6357":{"probe_name":"bio","function_name":"bio_await_chain"},"6358":{"probe_name":"bio","function_name":"bio_blkcg_css"},"6359":{"probe_name":"bio","function_name":"bio_chain"},"6360":{"probe_name":"bio","function_name":"bio_chain_and_submit"},"6361":{"probe_name":"bio","function_name":"bio_chain_endio"},"6362":{"probe_name":"bio","function_name":"bio_check_pages_dirty"},"6363":{"probe_name":"bio","function_name":"bio_clone_blkg_association"},"6364":{"probe_name":"bio","function_name":"bio_copy_data"},"6365":{"probe_name":"bio","function_name":"bio_copy_data_iter"},"6366":{"probe_name":"bio","function_name":"bio_copy_from_iter"},"6367":{"probe_name":"bio","function_name":"bio_copy_kern_endio"},"6368":{"probe_name":"bio","function_name":"bio_copy_kern_endio_read"},"6369":{"probe_name":"bio","function_name":"bio_copy_user_iov"},"6370":{"probe_name":"bio","function_name":"bio_cpu_dead"},"6371":{"probe_name":"bio","function_name":"bio_dirty_fn"},"6372":{"probe_name":"bio","function_name":"bio_end_io_acct_remapped"},"6373":{"probe_name":"bio","function_name":"bio_endio"},"6374":{"probe_name":"bio","function_name":"bio_free"},"6375":{"probe_name":"bio","function_name":"bio_free_pages"},"6376":{"probe_name":"bio","function_name":"bio_get_page"},"6377":{"probe_name":"bio","function_name":"bio_init"},"6378":{"probe_name":"bio","function_name":"bio_init_clone"},"6379":{"probe_name":"bio","function_name":"bio_integrity_add_page"},"6380":{"probe_name":"bio","function_name":"bio_integrity_advance"},"6381":{"probe_name":"bio","function_name":"bio_integrity_alloc"},"6382":{"probe_name":"bio","function_name":"bio_integrity_clone"},"6383":{"probe_name":"bio","function_name":"bio_integrity_copy_user"},"6384":{"probe_name":"bio","function_name":"bio_integrity_free"},"6385":{"probe_name":"bio","function_name":"bio_integrity_init_user"},"6386":{"probe_name":"bio","function_name":"bio_integrity_map_user"},"6387":{"probe_name":"bio","function_name":"bio_integrity_prep"},"6388":{"probe_name":"bio","function_name":"bio_integrity_prep.cold"},"6389":{"probe_name":"bio","function_name":"bio_integrity_trim"},"6390":{"probe_name":"bio","function_name":"bio_integrity_unmap_user"},"6391":{"probe_name":"bio","function_name":"bio_integrity_unpin_bvec"},"6392":{"probe_name":"bio","function_name":"bio_integrity_verify_fn"},"6393":{"probe_name":"bio","function_name":"bio_iov_bvec_set"},"6394":{"probe_name":"bio","function_name":"bio_iov_iter_get_pages"},"6395":{"probe_name":"bio","function_name":"bio_kmalloc"},"6396":{"probe_name":"bio","function_name":"bio_map_kern_endio"},"6397":{"probe_name":"bio","function_name":"bio_map_user_iov"},"6398":{"probe_name":"bio","function_name":"bio_next_page"},"6399":{"probe_name":"bio","function_name":"bio_poll"},"6400":{"probe_name":"bio","function_name":"bio_post_read_processing"},"6401":{"probe_name":"bio","function_name":"bio_put"},"6402":{"probe_name":"bio","function_name":"bio_reset"},"6403":{"probe_name":"bio","function_name":"bio_set_pages_dirty"},"6404":{"probe_name":"bio","function_name":"bio_split"},"6405":{"probe_name":"bio","function_name":"bio_split_discard"},"6406":{"probe_name":"bio","function_name":"bio_split_rw"},"6407":{"probe_name":"bio","function_name":"bio_split_rw_at"},"6408":{"probe_name":"bio","function_name":"bio_split_to_limits"},"6409":{"probe_name":"bio","function_name":"bio_split_write_zeroes"},"6410":{"probe_name":"bio","function_name":"bio_split_zone_append"},"6411":{"probe_name":"bio","function_name":"bio_start_io_acct"},"6412":{"probe_name":"bio","function_name":"bio_submit_split.part.0"},"6413":{"probe_name":"bio","function_name":"bio_to_wbt_flags"},"6414":{"probe_name":"bio","function_name":"bio_trim"},"6415":{"probe_name":"bio","function_name":"bio_uninit"},"6416":{"probe_name":"bio","function_name":"bio_wait_end_io"},"6417":{"probe_name":"bio","function_name":"bioset_exit"},"6418":{"probe_name":"bio","function_name":"bioset_init"},"6419":{"probe_name":"bio","function_name":"bioset_integrity_create"},"6420":{"probe_name":"bio","function_name":"bioset_integrity_free"},"6421":{"probe_name":"bio","function_name":"biovec_init_pool"},"6422":{"probe_name":"python","function_name":"function__entry"},"6423":{"probe_name":"os_page_cache","function_name":"add_to_page_cache_lru"},"6424":{"probe_name":"os_page_cache","function_name":"clear_page_dirty_for_io"},"6425":{"probe_name":"os_page_cache","function_name":"delete_from_page_cache_batch"},"6426":{"probe_name":"os_page_cache","function_name":"end_page_writeback"},"6427":{"probe_name":"os_page_cache","function_name":"fault_in_safe_writeable"},"6428":{"probe_name":"os_page_cache","function_name":"fault_in_subpage_writeable"},"6429":{"probe_name":"os_page_cache","function_name":"fault_in_writeable"},"6430":{"probe_name":"os_page_cache","function_name":"filemap_add_folio"},"6431":{"probe_name":"os_page_cache","function_name":"filemap_alloc_folio"},"6432":{"probe_name":"os_page_cache","function_name":"filemap_check_errors"},"6433":{"probe_name":"os_page_cache","function_name":"filemap_fdatawait_keep_errors"},"6434":{"probe_name":"os_page_cache","function_name":"filemap_fdatawait_range"},"6435":{"probe_name":"os_page_cache","function_name":"filemap_fdatawait_range_keep_errors"},"6436":{"probe_name":"os_page_cache","function_name":"filemap_fdatawrite"},"6437":{"probe_name":"os_page_cache","function_name":"filemap_fdatawrite_range"},"6438":{"probe_name":"os_page_cache","function_name":"filemap_fdatawrite_wbc"},"6439":{"probe_name":"os_page_cache","function_name":"filemap_flush"},"6440":{"probe_name":"os_page_cache","function_name":"filemap_get_folios"},"6441":{"probe_name":"os_page_cache","function_name":"filemap_get_folios_contig"},"6442":{"probe_name":"os_page_cache","function_name":"filemap_get_folios_tag"},"6443":{"probe_name":"os_page_cache","function_name":"filemap_range_has_page"},"6444":{"probe_name":"os_page_cache","function_name":"filemap_range_has_writeback"},"6445":{"probe_name":"os_page_cache","function_name":"filemap_release_folio"},"6446":{"probe_name":"os_page_cache","function_name":"filemap_remove_folio"},"6447":{"probe_name":"os_page_cache","function_name":"folio_account_cleaned"},"6448":{"probe_name":"os_page_cache","function_name":"folio_add_wait_queue"},"6449":{"probe_name":"os_page_cache","function_name":"folio_clear_dirty_for_io"},"6450":{"probe_name":"os_page_cache","function_name":"folio_end_private_2"},"6451":{"probe_name":"os_page_cache","function_name":"folio_end_writeback"},"6452":{"probe_name":"os_page_cache","function_name":"folio_invalidate"},"6453":{"probe_name":"os_page_cache","function_name":"folio_mapping"},"6454":{"probe_name":"os_page_cache","function_name":"folio_wait_bit"},"6455":{"probe_name":"os_page_cache","function_name":"folio_wait_bit_killable"},"6456":{"probe_name":"os_page_cache","function_name":"folio_wait_private_2"},"6457":{"probe_name":"os_page_cache","function_name":"folio_wait_private_2_killable"},"6458":{"probe_name":"os_page_cache","function_name":"folio_wait_stable"},"6459":{"probe_name":"os_page_cache","function_name":"folio_wait_writeback"},"6460":{"probe_name":"os_page_cache","function_name":"folio_wait_writeback_killable"},"6461":{"probe_name":"os_page_cache","function_name":"grab_cache_page_write_begin"},"6462":{"probe_name":"os_page_cache","function_name":"invalidate_inode_pages2"},"6463":{"probe_name":"os_page_cache","function_name":"invalidate_inode_pages2_range"},"6464":{"probe_name":"os_page_cache","function_name":"invalidate_mapping_pages"},"6465":{"probe_name":"os_page_cache","function_name":"kiocb_invalidate_pages"},"6466":{"probe_name":"os_page_cache","function_name":"kiocb_invalidate_post_direct_write"},"6467":{"probe_name":"os_page_cache","function_name":"kiocb_write_and_wait"},"6468":{"probe_name":"os_page_cache","function_name":"mapping_read_folio_gfp"},"6469":{"probe_name":"os_page_cache","function_name":"mapping_seek_hole_data"},"6470":{"probe_name":"shm","function_name":"shmem_charge"},"6471":{"probe_name":"shm","function_name":"shmem_file_setup"},"6472":{"probe_name":"shm","function_name":"shmem_file_setup_with_mnt"},"6473":{"probe_name":"shm","function_name":"shmem_get_folio"},"6474":{"probe_name":"shm","function_name":"shmem_get_unmapped_area"},"6475":{"probe_name":"shm","function_name":"shmem_init_fs_context"},"6476":{"probe_name":"shm","function_name":"shmem_kernel_file_setup"},"6477":{"probe_name":"shm","function_name":"shmem_lock"},"6478":{"probe_name":"shm","function_name":"shmem_partial_swap_usage"},"6479":{"probe_name":"shm","function_name":"shmem_read_folio_gfp"},"6480":{"probe_name":"shm","function_name":"shmem_read_mapping_page_gfp"},"6481":{"probe_name":"shm","function_name":"shmem_swap_usage"},"6482":{"probe_name":"shm","function_name":"shmem_truncate_range"},"6483":{"probe_name":"shm","function_name":"shmem_uncharge"},"6484":{"probe_name":"shm","function_name":"shmem_unlock_mapping"},"6485":{"probe_name":"shm","function_name":"shmem_unuse"},"6486":{"probe_name":"shm","function_name":"shmem_zero_setup"},"6487":{"probe_name":"fscache","function_name":"__fscache_acquire_cookie"},"6488":{"probe_name":"fscache","function_name":"__fscache_acquire_volume"},"6489":{"probe_name":"fscache","function_name":"__fscache_begin_read_operation"},"6490":{"probe_name":"fscache","function_name":"__fscache_begin_write_operation"},"6491":{"probe_name":"fscache","function_name":"__fscache_clear_page_bits"},"6492":{"probe_name":"fscache","function_name":"__fscache_invalidate"},"6493":{"probe_name":"fscache","function_name":"__fscache_relinquish_cookie"},"6494":{"probe_name":"fscache","function_name":"__fscache_relinquish_volume"},"6495":{"probe_name":"fscache","function_name":"__fscache_resize_cookie"},"6496":{"probe_name":"fscache","function_name":"__fscache_unuse_cookie"},"6497":{"probe_name":"fscache","function_name":"__fscache_use_cookie"},"6498":{"probe_name":"fscache","function_name":"__fscache_write_to_cache"},"6499":{"probe_name":"xfs","function_name":"xfs_agfblock_init"},"6500":{"probe_name":"xfs","function_name":"xfs_agflblock_init"},"6501":{"probe_name":"xfs","function_name":"xfs_align_sparse_ino.isra.0"},"6502":{"probe_name":"xfs","function_name":"xfs_alloc_ag_max_usable"},"6503":{"probe_name":"xfs","function_name":"xfs_alloc_ag_vextent_exact"},"6504":{"probe_name":"xfs","function_name":"xfs_alloc_ag_vextent_locality"},"6505":{"probe_name":"xfs","function_name":"xfs_alloc_ag_vextent_near"},"6506":{"probe_name":"xfs","function_name":"xfs_alloc_ag_vextent_size"},"6507":{"probe_name":"xfs","function_name":"xfs_alloc_ag_vextent_small"},"6508":{"probe_name":"xfs","function_name":"xfs_alloc_btrec_to_irec"},"6509":{"probe_name":"xfs","function_name":"xfs_alloc_buftarg"},"6510":{"probe_name":"xfs","function_name":"xfs_alloc_cancel_autoreap"},"6511":{"probe_name":"xfs","function_name":"xfs_alloc_check_irec"},"6512":{"probe_name":"xfs","function_name":"xfs_alloc_cntbt_iter"},"6513":{"probe_name":"xfs","function_name":"xfs_alloc_commit_autoreap"},"6514":{"probe_name":"xfs","function_name":"xfs_alloc_compute_aligned"},"6515":{"probe_name":"xfs","function_name":"xfs_alloc_compute_diff"},"6516":{"probe_name":"xfs","function_name":"xfs_alloc_compute_maxlevels"},"6517":{"probe_name":"xfs","function_name":"xfs_alloc_cur_check"},"6518":{"probe_name":"xfs","function_name":"xfs_alloc_cur_finish"},"6519":{"probe_name":"xfs","function_name":"xfs_alloc_file_space"},"6520":{"probe_name":"xfs","function_name":"xfs_alloc_fix_freelist"},"6521":{"probe_name":"xfs","function_name":"xfs_alloc_fix_len"},"6522":{"probe_name":"xfs","function_name":"xfs_alloc_fixup_trees"},"6523":{"probe_name":"xfs","function_name":"xfs_alloc_get_freelist"},"6524":{"probe_name":"xfs","function_name":"xfs_alloc_get_rec"},"6525":{"probe_name":"xfs","function_name":"xfs_alloc_has_records"},"6526":{"probe_name":"xfs","function_name":"xfs_alloc_log_agf"},"6527":{"probe_name":"xfs","function_name":"xfs_alloc_longest_free_extent"},"6528":{"probe_name":"xfs","function_name":"xfs_alloc_lookup_eq"},"6529":{"probe_name":"xfs","function_name":"xfs_alloc_lookup_ge"},"6530":{"probe_name":"xfs","function_name":"xfs_alloc_lookup_le"},"6531":{"probe_name":"xfs","function_name":"xfs_alloc_min_freelist"},"6532":{"probe_name":"xfs","function_name":"xfs_alloc_put_freelist"},"6533":{"probe_name":"xfs","function_name":"xfs_alloc_query_all"},"6534":{"probe_name":"xfs","function_name":"xfs_alloc_query_range"},"6535":{"probe_name":"xfs","function_name":"xfs_alloc_query_range_helper"},"6536":{"probe_name":"xfs","function_name":"xfs_alloc_read_agf"},"6537":{"probe_name":"xfs","function_name":"xfs_alloc_read_agfl"},"6538":{"probe_name":"xfs","function_name":"xfs_alloc_schedule_autoreap"},"6539":{"probe_name":"xfs","function_name":"xfs_alloc_set_aside"},"6540":{"probe_name":"xfs","function_name":"xfs_alloc_space_available"},"6541":{"probe_name":"xfs","function_name":"xfs_alloc_update"},"6542":{"probe_name":"xfs","function_name":"xfs_alloc_update_counters"},"6543":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_check_args"},"6544":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_exact_bno"},"6545":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_finish"},"6546":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_first_ag"},"6547":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_iterate_ags.constprop.0"},"6548":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_near_bno"},"6549":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_prepare_ag"},"6550":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_start_ag"},"6551":{"probe_name":"xfs","function_name":"xfs_alloc_vextent_this_ag"},"6552":{"probe_name":"xfs","function_name":"xfs_alloc_walk_iter"},"6553":{"probe_name":"xfs","function_name":"xfs_allocfree_block_count"},"6554":{"probe_name":"xfs","function_name":"xfs_attr_leaf_entsize"},"6555":{"probe_name":"xfs","function_name":"xfs_attr_leaf_try_add"},"6556":{"probe_name":"xfs","function_name":"xfs_attr_restore_rmt_blk"},"6557":{"probe_name":"xfs","function_name":"xfs_btroot_init"},"6558":{"probe_name":"xfs","function_name":"xfs_buf_alert_ratelimited"},"6559":{"probe_name":"xfs","function_name":"xfs_buf_alloc_pages"},"6560":{"probe_name":"xfs","function_name":"xfs_buf_cmp"},"6561":{"probe_name":"xfs","function_name":"xfs_buf_corruption_error"},"6562":{"probe_name":"xfs","function_name":"xfs_buf_delwri_cancel"},"6563":{"probe_name":"xfs","function_name":"xfs_buf_delwri_pushbuf"},"6564":{"probe_name":"xfs","function_name":"xfs_buf_delwri_queue"},"6565":{"probe_name":"xfs","function_name":"xfs_buf_delwri_queue_here"},"6566":{"probe_name":"xfs","function_name":"xfs_buf_delwri_submit"},"6567":{"probe_name":"xfs","function_name":"xfs_buf_delwri_submit_buffers"},"6568":{"probe_name":"xfs","function_name":"xfs_buf_delwri_submit_nowait"},"6569":{"probe_name":"xfs","function_name":"xfs_buf_dquot_io_fail"},"6570":{"probe_name":"xfs","function_name":"xfs_buf_dquot_iodone"},"6571":{"probe_name":"xfs","function_name":"xfs_buf_find_insert.constprop.0"},"6572":{"probe_name":"xfs","function_name":"xfs_buf_find_lock"},"6573":{"probe_name":"xfs","function_name":"xfs_buf_free"},"6574":{"probe_name":"xfs","function_name":"xfs_buf_free_callback"},"6575":{"probe_name":"xfs","function_name":"xfs_buf_free_pages"},"6576":{"probe_name":"xfs","function_name":"xfs_buf_get_map"},"6577":{"probe_name":"xfs","function_name":"xfs_buf_get_uncached"},"6578":{"probe_name":"xfs","function_name":"xfs_buf_hash_destroy"},"6579":{"probe_name":"xfs","function_name":"xfs_buf_hash_init"},"6580":{"probe_name":"xfs","function_name":"xfs_buf_hold"},"6581":{"probe_name":"xfs","function_name":"xfs_buf_inode_io_fail"},"6582":{"probe_name":"xfs","function_name":"xfs_buf_inode_iodone"},"6583":{"probe_name":"xfs","function_name":"xfs_buf_ioapply_map"},"6584":{"probe_name":"xfs","function_name":"xfs_buf_ioend"},"6585":{"probe_name":"xfs","function_name":"xfs_buf_ioend_fail"},"6586":{"probe_name":"xfs","function_name":"xfs_buf_ioend_handle_error"},"6587":{"probe_name":"xfs","function_name":"xfs_buf_ioend_work"},"6588":{"probe_name":"xfs","function_name":"xfs_buf_ioerror_alert"},"6589":{"probe_name":"xfs","function_name":"xfs_buf_iowait"},"6590":{"probe_name":"xfs","function_name":"xfs_buf_item_committed"},"6591":{"probe_name":"xfs","function_name":"xfs_buf_item_committing"},"6592":{"probe_name":"xfs","function_name":"xfs_buf_item_dirty_format"},"6593":{"probe_name":"xfs","function_name":"xfs_buf_item_done"},"6594":{"probe_name":"xfs","function_name":"xfs_buf_item_format"},"6595":{"probe_name":"xfs","function_name":"xfs_buf_item_format_segment"},"6596":{"probe_name":"xfs","function_name":"xfs_buf_item_free"},"6597":{"probe_name":"xfs","function_name":"xfs_buf_item_free_format"},"6598":{"probe_name":"xfs","function_name":"xfs_buf_item_get_format"},"6599":{"probe_name":"xfs","function_name":"xfs_buf_item_init"},"6600":{"probe_name":"xfs","function_name":"xfs_buf_item_log"},"6601":{"probe_name":"xfs","function_name":"xfs_buf_item_pin"},"6602":{"probe_name":"xfs","function_name":"xfs_buf_item_push"},"6603":{"probe_name":"xfs","function_name":"xfs_buf_item_put"},"6604":{"probe_name":"xfs","function_name":"xfs_buf_item_release"},"6605":{"probe_name":"xfs","function_name":"xfs_buf_item_relse"},"6606":{"probe_name":"xfs","function_name":"xfs_buf_item_size"},"6607":{"probe_name":"xfs","function_name":"xfs_buf_item_size_segment.isra.0"},"6608":{"probe_name":"xfs","function_name":"xfs_buf_item_unpin"},"6609":{"probe_name":"xfs","function_name":"xfs_buf_lock"},"6610":{"probe_name":"xfs","function_name":"xfs_buf_log_check_iovec"},"6611":{"probe_name":"xfs","function_name":"xfs_buf_log_overhead"},"6612":{"probe_name":"xfs","function_name":"xfs_buf_offset"},"6613":{"probe_name":"xfs","function_name":"xfs_buf_read_map"},"6614":{"probe_name":"xfs","function_name":"xfs_buf_read_uncached"},"6615":{"probe_name":"xfs","function_name":"xfs_buf_readahead_map"},"6616":{"probe_name":"xfs","function_name":"xfs_buf_rele"},"6617":{"probe_name":"xfs","function_name":"xfs_buf_reverify"},"6618":{"probe_name":"xfs","function_name":"xfs_buf_set_ref"},"6619":{"probe_name":"xfs","function_name":"xfs_buf_stale"},"6620":{"probe_name":"xfs","function_name":"xfs_buf_trylock"},"6621":{"probe_name":"xfs","function_name":"xfs_buf_unlock"},"6622":{"probe_name":"xfs","function_name":"xfs_buf_verifier_error"},"6623":{"probe_name":"xfs","function_name":"xfs_buf_wait_unpin"},"6624":{"probe_name":"xfs","function_name":"xfs_buf_zero"},"6625":{"probe_name":"xfs","function_name":"xfs_buffered_write_delalloc_punch"},"6626":{"probe_name":"xfs","function_name":"xfs_buffered_write_iomap_begin"},"6627":{"probe_name":"xfs","function_name":"xfs_buffered_write_iomap_end"},"6628":{"probe_name":"xfs","function_name":"xfs_buftarg_drain_rele"},"6629":{"probe_name":"xfs","function_name":"xfs_buftarg_isolate"},"6630":{"probe_name":"xfs","function_name":"xfs_buftarg_shrink_count"},"6631":{"probe_name":"xfs","function_name":"xfs_buftarg_shrink_scan"},"6632":{"probe_name":"xfs","function_name":"xfs_bunmapi"},"6633":{"probe_name":"xfs","function_name":"xfs_bunmapi_range"},"6634":{"probe_name":"xfs","function_name":"xfs_bwrite"},"6635":{"probe_name":"xfs","function_name":"xfs_cntbt_diff_two_keys"},"6636":{"probe_name":"xfs","function_name":"xfs_cntbt_init_high_key_from_rec"},"6637":{"probe_name":"xfs","function_name":"xfs_cntbt_key_diff"},"6638":{"probe_name":"xfs","function_name":"xfs_cntbt_keys_inorder"},"6639":{"probe_name":"xfs","function_name":"xfs_cntbt_recs_inorder"},"6640":{"probe_name":"xfs","function_name":"xfs_cntroot_init"},"6641":{"probe_name":"xfs","function_name":"xfs_da3_blk_link"},"6642":{"probe_name":"xfs","function_name":"xfs_da3_blk_unlink.isra.0"},"6643":{"probe_name":"xfs","function_name":"xfs_da3_blkinfo_verify"},"6644":{"probe_name":"xfs","function_name":"xfs_da3_fixhashpath"},"6645":{"probe_name":"xfs","function_name":"xfs_da3_join"},"6646":{"probe_name":"xfs","function_name":"xfs_da3_node_add"},"6647":{"probe_name":"xfs","function_name":"xfs_da3_node_create"},"6648":{"probe_name":"xfs","function_name":"xfs_da3_node_hdr_from_disk"},"6649":{"probe_name":"xfs","function_name":"xfs_da3_node_hdr_to_disk"},"6650":{"probe_name":"xfs","function_name":"xfs_da3_node_lasthash.isra.0"},"6651":{"probe_name":"xfs","function_name":"xfs_da3_node_lookup_int"},"6652":{"probe_name":"xfs","function_name":"xfs_da3_node_order.isra.0"},"6653":{"probe_name":"xfs","function_name":"xfs_da3_node_read"},"6654":{"probe_name":"xfs","function_name":"xfs_da3_node_read_mapped"},"6655":{"probe_name":"xfs","function_name":"xfs_da3_node_read_verify"},"6656":{"probe_name":"xfs","function_name":"xfs_da3_node_rebalance.constprop.0"},"6657":{"probe_name":"xfs","function_name":"xfs_da3_node_remove"},"6658":{"probe_name":"xfs","function_name":"xfs_da3_node_set_type"},"6659":{"probe_name":"xfs","function_name":"xfs_da3_node_split"},"6660":{"probe_name":"xfs","function_name":"xfs_da3_node_toosmall"},"6661":{"probe_name":"xfs","function_name":"xfs_da3_node_unbalance"},"6662":{"probe_name":"xfs","function_name":"xfs_da3_node_verify"},"6663":{"probe_name":"xfs","function_name":"xfs_da3_node_verify_struct"},"6664":{"probe_name":"xfs","function_name":"xfs_da3_node_write_verify"},"6665":{"probe_name":"xfs","function_name":"xfs_da3_path_shift"},"6666":{"probe_name":"xfs","function_name":"xfs_da3_root_join"},"6667":{"probe_name":"xfs","function_name":"xfs_da3_root_split"},"6668":{"probe_name":"xfs","function_name":"xfs_da3_split"},"6669":{"probe_name":"xfs","function_name":"xfs_da3_swap_lastblock"},"6670":{"probe_name":"xfs","function_name":"xfs_da_buf_copy"},"6671":{"probe_name":"xfs","function_name":"xfs_da_compname"},"6672":{"probe_name":"xfs","function_name":"xfs_da_get_buf"},"6673":{"probe_name":"xfs","function_name":"xfs_da_grow_inode"},"6674":{"probe_name":"xfs","function_name":"xfs_da_grow_inode_int"},"6675":{"probe_name":"xfs","function_name":"xfs_da_hashname"},"6676":{"probe_name":"xfs","function_name":"xfs_da_mount"},"6677":{"probe_name":"xfs","function_name":"xfs_da_read_buf"},"6678":{"probe_name":"xfs","function_name":"xfs_da_reada_buf"},"6679":{"probe_name":"xfs","function_name":"xfs_da_shrink_inode"},"6680":{"probe_name":"xfs","function_name":"xfs_da_state_alloc"},"6681":{"probe_name":"xfs","function_name":"xfs_da_state_free"},"6682":{"probe_name":"xfs","function_name":"xfs_da_state_kill_altpath"},"6683":{"probe_name":"xfs","function_name":"xfs_da_state_reset"},"6684":{"probe_name":"xfs","function_name":"xfs_da_unmount"},"6685":{"probe_name":"xfs","function_name":"xfs_dabuf_map.constprop.0"},"6686":{"probe_name":"xfs","function_name":"xfs_dax_write_iomap_end"},"6687":{"probe_name":"xfs","function_name":"xfs_dax_writepages"},"6688":{"probe_name":"xfs","function_name":"xfs_dio_write_end_io"},"6689":{"probe_name":"xfs","function_name":"xfs_direct_write_iomap_begin"},"6690":{"probe_name":"xfs","function_name":"xfs_discard_endio"},"6691":{"probe_name":"xfs","function_name":"xfs_discard_endio_work"},"6692":{"probe_name":"xfs","function_name":"xfs_discard_extents"},"6693":{"probe_name":"xfs","function_name":"xfs_discard_folio"},"6694":{"probe_name":"xfs","function_name":"xfs_do_force_shutdown"},"6695":{"probe_name":"xfs","function_name":"xfs_dquot_buf_read_verify"},"6696":{"probe_name":"xfs","function_name":"xfs_dquot_buf_readahead_verify"},"6697":{"probe_name":"xfs","function_name":"xfs_dquot_buf_verify"},"6698":{"probe_name":"xfs","function_name":"xfs_dquot_buf_verify_crc.isra.0"},"6699":{"probe_name":"xfs","function_name":"xfs_dquot_buf_verify_struct"},"6700":{"probe_name":"xfs","function_name":"xfs_dquot_buf_write_verify"},"6701":{"probe_name":"xfs","function_name":"xfs_end_ioend"},"6702":{"probe_name":"xfs","function_name":"xfs_extent_busy_ag_cmp"},"6703":{"probe_name":"xfs","function_name":"xfs_extent_busy_clear"},"6704":{"probe_name":"xfs","function_name":"xfs_extent_busy_clear_one"},"6705":{"probe_name":"xfs","function_name":"xfs_extent_busy_flush"},"6706":{"probe_name":"xfs","function_name":"xfs_extent_busy_insert"},"6707":{"probe_name":"xfs","function_name":"xfs_extent_busy_insert_discard"},"6708":{"probe_name":"xfs","function_name":"xfs_extent_busy_insert_list"},"6709":{"probe_name":"xfs","function_name":"xfs_extent_busy_list_empty"},"6710":{"probe_name":"xfs","function_name":"xfs_extent_busy_reuse"},"6711":{"probe_name":"xfs","function_name":"xfs_extent_busy_search"},"6712":{"probe_name":"xfs","function_name":"xfs_extent_busy_trim"},"6713":{"probe_name":"xfs","function_name":"xfs_extent_busy_update_extent"},"6714":{"probe_name":"xfs","function_name":"xfs_extent_busy_wait_all"},"6715":{"probe_name":"xfs","function_name":"xfs_extent_free_abort_intent"},"6716":{"probe_name":"xfs","function_name":"xfs_extent_free_cancel_item"},"6717":{"probe_name":"xfs","function_name":"xfs_extent_free_create_done"},"6718":{"probe_name":"xfs","function_name":"xfs_extent_free_create_intent"},"6719":{"probe_name":"xfs","function_name":"xfs_extent_free_diff_items"},"6720":{"probe_name":"xfs","function_name":"xfs_extent_free_finish_item"},"6721":{"probe_name":"xfs","function_name":"xfs_extent_free_get_group"},"6722":{"probe_name":"xfs","function_name":"xfs_extent_free_log_item.constprop.0"},"6723":{"probe_name":"xfs","function_name":"xfs_extent_free_recover_work"},"6724":{"probe_name":"xfs","function_name":"xfs_extent_free_relog_intent"},"6725":{"probe_name":"xfs","function_name":"xfs_extfree_intent_destroy_cache"},"6726":{"probe_name":"xfs","function_name":"xfs_file_buffered_read"},"6727":{"probe_name":"xfs","function_name":"xfs_file_buffered_write"},"6728":{"probe_name":"xfs","function_name":"xfs_file_dax_read"},"6729":{"probe_name":"xfs","function_name":"xfs_file_dax_write"},"6730":{"probe_name":"xfs","function_name":"xfs_file_dio_read"},"6731":{"probe_name":"xfs","function_name":"xfs_file_dio_write_aligned"},"6732":{"probe_name":"xfs","function_name":"xfs_file_dio_write_unaligned"},"6733":{"probe_name":"xfs","function_name":"xfs_file_fadvise"},"6734":{"probe_name":"xfs","function_name":"xfs_file_fallocate"},"6735":{"probe_name":"xfs","function_name":"xfs_file_fsync"},"6736":{"probe_name":"xfs","function_name":"xfs_file_llseek"},"6737":{"probe_name":"xfs","function_name":"xfs_file_mmap"},"6738":{"probe_name":"xfs","function_name":"xfs_file_open"},"6739":{"probe_name":"xfs","function_name":"xfs_file_read_iter"},"6740":{"probe_name":"xfs","function_name":"xfs_file_readdir"},"6741":{"probe_name":"xfs","function_name":"xfs_file_release"},"6742":{"probe_name":"xfs","function_name":"xfs_file_remap_range"},"6743":{"probe_name":"xfs","function_name":"xfs_file_write_checks"},"6744":{"probe_name":"xfs","function_name":"xfs_file_write_iter"},"6745":{"probe_name":"xfs","function_name":"xfs_filemap_fault"},"6746":{"probe_name":"xfs","function_name":"xfs_filemap_huge_fault"},"6747":{"probe_name":"xfs","function_name":"xfs_filemap_page_mkwrite"},"6748":{"probe_name":"xfs","function_name":"xfs_filemap_pfn_mkwrite"},"6749":{"probe_name":"xfs","function_name":"xfs_finobt_init_ptr_from_cur"},"6750":{"probe_name":"xfs","function_name":"xfs_free_ag_extent"},"6751":{"probe_name":"xfs","function_name":"xfs_freesp_init_recs.isra.0"},"6752":{"probe_name":"xfs","function_name":"xfs_fs_alloc_inode"},"6753":{"probe_name":"xfs","function_name":"xfs_fs_commit_blocks"},"6754":{"probe_name":"xfs","function_name":"xfs_fs_destroy_inode"},"6755":{"probe_name":"xfs","function_name":"xfs_fs_dirty_inode"},"6756":{"probe_name":"xfs","function_name":"xfs_fs_drop_inode"},"6757":{"probe_name":"xfs","function_name":"xfs_fs_encode_fh"},"6758":{"probe_name":"xfs","function_name":"xfs_fs_fh_to_dentry"},"6759":{"probe_name":"xfs","function_name":"xfs_fs_fh_to_parent"},"6760":{"probe_name":"xfs","function_name":"xfs_fs_fill_super"},"6761":{"probe_name":"xfs","function_name":"xfs_fs_free"},"6762":{"probe_name":"xfs","function_name":"xfs_fs_free_cached_objects"},"6763":{"probe_name":"xfs","function_name":"xfs_fs_freeze"},"6764":{"probe_name":"xfs","function_name":"xfs_fs_geometry"},"6765":{"probe_name":"xfs","function_name":"xfs_fs_get_dqblk"},"6766":{"probe_name":"xfs","function_name":"xfs_fs_get_nextdqblk"},"6767":{"probe_name":"xfs","function_name":"xfs_fs_get_parent"},"6768":{"probe_name":"xfs","function_name":"xfs_fs_get_quota_state"},"6769":{"probe_name":"xfs","function_name":"xfs_fs_get_tree"},"6770":{"probe_name":"xfs","function_name":"xfs_fs_get_uuid"},"6771":{"probe_name":"xfs","function_name":"xfs_fs_goingdown"},"6772":{"probe_name":"xfs","function_name":"xfs_fs_inode_init_once"},"6773":{"probe_name":"xfs","function_name":"xfs_fs_map_blocks"},"6774":{"probe_name":"xfs","function_name":"xfs_fs_mark_healthy"},"6775":{"probe_name":"xfs","function_name":"xfs_fs_mark_sick"},"6776":{"probe_name":"xfs","function_name":"xfs_fs_measure_sickness"},"6777":{"probe_name":"xfs","function_name":"xfs_fs_nfs_commit_metadata"},"6778":{"probe_name":"xfs","function_name":"xfs_fs_nr_cached_objects"},"6779":{"probe_name":"xfs","function_name":"xfs_fs_parse_param"},"6780":{"probe_name":"xfs","function_name":"xfs_fs_put_super"},"6781":{"probe_name":"xfs","function_name":"xfs_fs_reconfigure"},"6782":{"probe_name":"xfs","function_name":"xfs_fs_reserve_ag_blocks"},"6783":{"probe_name":"xfs","function_name":"xfs_fs_rm_xquota"},"6784":{"probe_name":"xfs","function_name":"xfs_fs_set_dqblk"},"6785":{"probe_name":"xfs","function_name":"xfs_fs_set_info"},"6786":{"probe_name":"xfs","function_name":"xfs_fs_show_options"},"6787":{"probe_name":"xfs","function_name":"xfs_fs_shutdown"},"6788":{"probe_name":"xfs","function_name":"xfs_fs_statfs"},"6789":{"probe_name":"xfs","function_name":"xfs_fs_sync_fs"},"6790":{"probe_name":"xfs","function_name":"xfs_fs_unfreeze"},"6791":{"probe_name":"xfs","function_name":"xfs_fs_unreserve_ag_blocks"},"6792":{"probe_name":"xfs","function_name":"xfs_fs_validate_params"},"6793":{"probe_name":"xfs","function_name":"xfs_fs_writable"},"6794":{"probe_name":"xfs","function_name":"xfs_ialloc_ag_alloc"},"6795":{"probe_name":"xfs","function_name":"xfs_ialloc_count_inodes_rec"},"6796":{"probe_name":"xfs","function_name":"xfs_ialloc_count_ondisk"},"6797":{"probe_name":"xfs","function_name":"xfs_ialloc_get_rec"},"6798":{"probe_name":"xfs","function_name":"xfs_ialloc_next_rec"},"6799":{"probe_name":"xfs","function_name":"xfs_iflush"},"6800":{"probe_name":"xfs","function_name":"xfs_iflush_abort"},"6801":{"probe_name":"xfs","function_name":"xfs_iflush_cluster"},"6802":{"probe_name":"xfs","function_name":"xfs_iflush_fork"},"6803":{"probe_name":"xfs","function_name":"xfs_iflush_shutdown_abort"},"6804":{"probe_name":"xfs","function_name":"xfs_ifork_init_attr"},"6805":{"probe_name":"xfs","function_name":"xfs_ifork_init_cow"},"6806":{"probe_name":"xfs","function_name":"xfs_ifork_verify_local_attr"},"6807":{"probe_name":"xfs","function_name":"xfs_ifork_verify_local_data"},"6808":{"probe_name":"xfs","function_name":"xfs_ifork_zap_attr"},"6809":{"probe_name":"xfs","function_name":"xfs_ifork_zapped"},"6810":{"probe_name":"xfs","function_name":"xfs_ilock_for_iomap"},"6811":{"probe_name":"xfs","function_name":"xfs_ilock_iocb_for_write"},"6812":{"probe_name":"xfs","function_name":"xfs_inode_alloc"},"6813":{"probe_name":"xfs","function_name":"xfs_inode_buf_read_verify"},"6814":{"probe_name":"xfs","function_name":"xfs_inode_buf_readahead_verify"},"6815":{"probe_name":"xfs","function_name":"xfs_inode_buf_verify"},"6816":{"probe_name":"xfs","function_name":"xfs_inode_buf_write_verify"},"6817":{"probe_name":"xfs","function_name":"xfs_inode_clear_cowblocks_tag"},"6818":{"probe_name":"xfs","function_name":"xfs_inode_clear_eofblocks_tag"},"6819":{"probe_name":"xfs","function_name":"xfs_inode_free"},"6820":{"probe_name":"xfs","function_name":"xfs_inode_free_callback"},"6821":{"probe_name":"xfs","function_name":"xfs_inode_free_cowblocks"},"6822":{"probe_name":"xfs","function_name":"xfs_inode_free_eofblocks.constprop.0"},"6823":{"probe_name":"xfs","function_name":"xfs_inode_from_disk"},"6824":{"probe_name":"xfs","function_name":"xfs_inode_from_disk_ts"},"6825":{"probe_name":"xfs","function_name":"xfs_inode_hasattr"},"6826":{"probe_name":"xfs","function_name":"xfs_inode_inherit_flags"},"6827":{"probe_name":"xfs","function_name":"xfs_inode_init_security"},"6828":{"probe_name":"xfs","function_name":"xfs_inode_item_attr_fork_size"},"6829":{"probe_name":"xfs","function_name":"xfs_inode_item_committed"},"6830":{"probe_name":"xfs","function_name":"xfs_inode_item_committing"},"6831":{"probe_name":"xfs","function_name":"xfs_inode_item_data_fork_size"},"6832":{"probe_name":"xfs","function_name":"xfs_inode_item_destroy"},"6833":{"probe_name":"xfs","function_name":"xfs_inode_item_format"},"6834":{"probe_name":"xfs","function_name":"xfs_inode_item_format_attr_fork"},"6835":{"probe_name":"xfs","function_name":"xfs_inode_item_format_convert"},"6836":{"probe_name":"xfs","function_name":"xfs_inode_item_format_data_fork"},"6837":{"probe_name":"xfs","function_name":"xfs_inode_item_init"},"6838":{"probe_name":"xfs","function_name":"xfs_inode_item_pin"},"6839":{"probe_name":"xfs","function_name":"xfs_inode_item_precommit"},"6840":{"probe_name":"xfs","function_name":"xfs_inode_item_push"},"6841":{"probe_name":"xfs","function_name":"xfs_inode_item_release"},"6842":{"probe_name":"xfs","function_name":"xfs_inode_item_size"},"6843":{"probe_name":"xfs","function_name":"xfs_inode_item_sort"},"6844":{"probe_name":"xfs","function_name":"xfs_inode_item_unpin"},"6845":{"probe_name":"xfs","function_name":"xfs_inode_mark_healthy"},"6846":{"probe_name":"xfs","function_name":"xfs_inode_mark_reclaimable"},"6847":{"probe_name":"xfs","function_name":"xfs_inode_mark_sick"},"6848":{"probe_name":"xfs","function_name":"xfs_inode_measure_sickness"},"6849":{"probe_name":"xfs","function_name":"xfs_inode_near_dquot_enforcement"},"6850":{"probe_name":"xfs","function_name":"xfs_inode_needs_inactive"},"6851":{"probe_name":"xfs","function_name":"xfs_inode_reload_unlinked"},"6852":{"probe_name":"xfs","function_name":"xfs_inode_reload_unlinked_bucket"},"6853":{"probe_name":"xfs","function_name":"xfs_inode_set_cowblocks_tag"},"6854":{"probe_name":"xfs","function_name":"xfs_inode_set_eofblocks_tag"},"6855":{"probe_name":"xfs","function_name":"xfs_inode_to_disk"},"6856":{"probe_name":"xfs","function_name":"xfs_inode_to_log_dinode"},"6857":{"probe_name":"xfs","function_name":"xfs_inode_validate_cowextsize"},"6858":{"probe_name":"xfs","function_name":"xfs_inode_validate_extsize"},"6859":{"probe_name":"xfs","function_name":"xfs_inode_verifier_error"},"6860":{"probe_name":"xfs","function_name":"xfs_iomap_eof_align_last_fsb"},"6861":{"probe_name":"xfs","function_name":"xfs_iomap_inode_sequence"},"6862":{"probe_name":"xfs","function_name":"xfs_iomap_prealloc_size.constprop.0.isra.0"},"6863":{"probe_name":"xfs","function_name":"xfs_iomap_swapfile_activate"},"6864":{"probe_name":"xfs","function_name":"xfs_iomap_valid"},"6865":{"probe_name":"xfs","function_name":"xfs_iomap_write_direct"},"6866":{"probe_name":"xfs","function_name":"xfs_iomap_write_unwritten"},"6867":{"probe_name":"xfs","function_name":"xfs_iread_bmbt_block"},"6868":{"probe_name":"xfs","function_name":"xfs_lookup_get_search_key"},"6869":{"probe_name":"xfs","function_name":"xfs_map_blocks"},"6870":{"probe_name":"xfs","function_name":"xfs_mru_cache_create"},"6871":{"probe_name":"xfs","function_name":"xfs_mru_cache_delete"},"6872":{"probe_name":"xfs","function_name":"xfs_mru_cache_destroy"},"6873":{"probe_name":"xfs","function_name":"xfs_mru_cache_done"},"6874":{"probe_name":"xfs","function_name":"xfs_mru_cache_init"},"6875":{"probe_name":"xfs","function_name":"xfs_mru_cache_insert"},"6876":{"probe_name":"xfs","function_name":"xfs_mru_cache_lookup"},"6877":{"probe_name":"xfs","function_name":"xfs_mru_cache_remove"},"6878":{"probe_name":"xfs","function_name":"xfs_mru_cache_uninit"},"6879":{"probe_name":"xfs","function_name":"xfs_nfs_get_inode.isra.0"},"6880":{"probe_name":"xfs","function_name":"xfs_prepare_ioend"},"6881":{"probe_name":"xfs","function_name":"xfs_read_agf"},"6882":{"probe_name":"xfs","function_name":"xfs_read_agi"},"6883":{"probe_name":"xfs","function_name":"xfs_read_iomap_begin"},"6884":{"probe_name":"xfs","function_name":"xfs_readdir"},"6885":{"probe_name":"xfs","function_name":"xfs_readlink"},"6886":{"probe_name":"xfs","function_name":"xfs_readlink_bmap_ilocked"},"6887":{"probe_name":"xfs","function_name":"xfs_readlink_by_handle"},"6888":{"probe_name":"xfs","function_name":"xfs_release"},"6889":{"probe_name":"xfs","function_name":"xfs_remove"},"6890":{"probe_name":"xfs","function_name":"xfs_rename"},"6891":{"probe_name":"xfs","function_name":"xfs_reserve_blocks"},"6892":{"probe_name":"xfs","function_name":"xfs_restore_resvblks"},"6893":{"probe_name":"xfs","function_name":"xfs_vm_bmap"},"6894":{"probe_name":"xfs","function_name":"xfs_vm_read_folio"},"6895":{"probe_name":"xfs","function_name":"xfs_vm_readahead"},"6896":{"probe_name":"xfs","function_name":"xfs_vm_writepages"},"6897":{"probe_name":"xfs","function_name":"xfs_xattr_iomap_begin"},"6898":{"probe_name":"ext4","function_name":"ext4_alloc_branch"},"6899":{"probe_name":"ext4","function_name":"ext4_alloc_da_blocks"},"6900":{"probe_name":"ext4","function_name":"ext4_alloc_file_blocks.isra.0"},"6901":{"probe_name":"ext4","function_name":"ext4_alloc_flex_bg_array"},"6902":{"probe_name":"ext4","function_name":"ext4_alloc_group_tables"},"6903":{"probe_name":"ext4","function_name":"ext4_alloc_inode"},"6904":{"probe_name":"ext4","function_name":"ext4_alloc_io_end_vec"},"6905":{"probe_name":"ext4","function_name":"ext4_append"},"6906":{"probe_name":"ext4","function_name":"ext4_block_bitmap"},"6907":{"probe_name":"ext4","function_name":"ext4_block_bitmap_csum_set"},"6908":{"probe_name":"ext4","function_name":"ext4_block_bitmap_csum_verify"},"6909":{"probe_name":"ext4","function_name":"ext4_block_bitmap_set"},"6910":{"probe_name":"ext4","function_name":"ext4_block_to_path"},"6911":{"probe_name":"ext4","function_name":"ext4_block_write_begin"},"6912":{"probe_name":"ext4","function_name":"ext4_block_zero_page_range"},"6913":{"probe_name":"ext4","function_name":"ext4_bmap"},"6914":{"probe_name":"ext4","function_name":"ext4_bread"},"6915":{"probe_name":"ext4","function_name":"ext4_bread_batch"},"6916":{"probe_name":"ext4","function_name":"ext4_da_convert_inline_data_to_extent"},"6917":{"probe_name":"ext4","function_name":"ext4_da_get_block_prep"},"6918":{"probe_name":"ext4","function_name":"ext4_da_map_blocks.constprop.0"},"6919":{"probe_name":"ext4","function_name":"ext4_da_release_space"},"6920":{"probe_name":"ext4","function_name":"ext4_da_reserve_space"},"6921":{"probe_name":"ext4","function_name":"ext4_da_update_reserve_space"},"6922":{"probe_name":"ext4","function_name":"ext4_da_write_begin"},"6923":{"probe_name":"ext4","function_name":"ext4_da_write_end"},"6924":{"probe_name":"ext4","function_name":"ext4_da_write_inline_data_begin"},"6925":{"probe_name":"ext4","function_name":"ext4_dio_alignment"},"6926":{"probe_name":"ext4","function_name":"ext4_dio_write_checks"},"6927":{"probe_name":"ext4","function_name":"ext4_dio_write_end_io"},"6928":{"probe_name":"ext4","function_name":"ext4_dio_write_iter"},"6929":{"probe_name":"ext4","function_name":"ext4_dirty_folio"},"6930":{"probe_name":"ext4","function_name":"ext4_dirty_inode"},"6931":{"probe_name":"ext4","function_name":"ext4_end_buffer_io_sync"},"6932":{"probe_name":"ext4","function_name":"ext4_end_io_rsv_work"},"6933":{"probe_name":"ext4","function_name":"ext4_exit_es"},"6934":{"probe_name":"ext4","function_name":"ext4_exit_mballoc"},"6935":{"probe_name":"ext4","function_name":"ext4_exit_pageio"},"6936":{"probe_name":"ext4","function_name":"ext4_exit_pending"},"6937":{"probe_name":"ext4","function_name":"ext4_exit_post_read_processing"},"6938":{"probe_name":"ext4","function_name":"ext4_exit_sysfs"},"6939":{"probe_name":"ext4","function_name":"ext4_exit_system_zone"},"6940":{"probe_name":"ext4","function_name":"ext4_ext_calc_credits_for_single_extent"},"6941":{"probe_name":"ext4","function_name":"ext4_ext_check_inode"},"6942":{"probe_name":"ext4","function_name":"ext4_ext_clear_bb"},"6943":{"probe_name":"ext4","function_name":"ext4_ext_convert_to_initialized"},"6944":{"probe_name":"ext4","function_name":"ext4_ext_correct_indexes"},"6945":{"probe_name":"ext4","function_name":"ext4_ext_find_goal"},"6946":{"probe_name":"ext4","function_name":"ext4_ext_get_access"},"6947":{"probe_name":"ext4","function_name":"ext4_ext_grow_indepth"},"6948":{"probe_name":"ext4","function_name":"ext4_ext_handle_unwritten_extents"},"6949":{"probe_name":"ext4","function_name":"ext4_ext_index_trans_blocks"},"6950":{"probe_name":"ext4","function_name":"ext4_ext_init"},"6951":{"probe_name":"ext4","function_name":"ext4_ext_insert_extent"},"6952":{"probe_name":"ext4","function_name":"ext4_ext_insert_index"},"6953":{"probe_name":"ext4","function_name":"ext4_ext_map_blocks"},"6954":{"probe_name":"ext4","function_name":"ext4_ext_migrate"},"6955":{"probe_name":"ext4","function_name":"ext4_ext_next_allocated_block"},"6956":{"probe_name":"ext4","function_name":"ext4_ext_precache"},"6957":{"probe_name":"ext4","function_name":"ext4_ext_precache.part.0"},"6958":{"probe_name":"ext4","function_name":"ext4_ext_release"},"6959":{"probe_name":"ext4","function_name":"ext4_ext_remove_space"},"6960":{"probe_name":"ext4","function_name":"ext4_ext_replay_set_iblocks"},"6961":{"probe_name":"ext4","function_name":"ext4_ext_replay_shrink_inode"},"6962":{"probe_name":"ext4","function_name":"ext4_ext_replay_update_ex"},"6963":{"probe_name":"ext4","function_name":"ext4_ext_rm_idx"},"6964":{"probe_name":"ext4","function_name":"ext4_ext_rm_leaf"},"6965":{"probe_name":"ext4","function_name":"ext4_ext_search_left"},"6966":{"probe_name":"ext4","function_name":"ext4_ext_search_right"},"6967":{"probe_name":"ext4","function_name":"ext4_ext_shift_extents"},"6968":{"probe_name":"ext4","function_name":"ext4_ext_shift_path_extents"},"6969":{"probe_name":"ext4","function_name":"ext4_ext_split"},"6970":{"probe_name":"ext4","function_name":"ext4_ext_swap_inode_data"},"6971":{"probe_name":"ext4","function_name":"ext4_ext_tree_init"},"6972":{"probe_name":"ext4","function_name":"ext4_ext_truncate"},"6973":{"probe_name":"ext4","function_name":"ext4_ext_try_to_merge"},"6974":{"probe_name":"ext4","function_name":"ext4_ext_try_to_merge_right"},"6975":{"probe_name":"ext4","function_name":"ext4_ext_try_to_merge_up"},"6976":{"probe_name":"ext4","function_name":"ext4_extent_block_csum_set"},"6977":{"probe_name":"ext4","function_name":"ext4_fallocate"},"6978":{"probe_name":"ext4","function_name":"ext4_fh_to_dentry"},"6979":{"probe_name":"ext4","function_name":"ext4_fh_to_parent"},"6980":{"probe_name":"ext4","function_name":"ext4_fiemap"},"6981":{"probe_name":"ext4","function_name":"ext4_file_getattr"},"6982":{"probe_name":"ext4","function_name":"ext4_file_mmap"},"6983":{"probe_name":"ext4","function_name":"ext4_file_open"},"6984":{"probe_name":"ext4","function_name":"ext4_file_read_iter"},"6985":{"probe_name":"ext4","function_name":"ext4_file_write_iter"},"6986":{"probe_name":"ext4","function_name":"ext4_fileattr_get"},"6987":{"probe_name":"ext4","function_name":"ext4_fileattr_set"},"6988":{"probe_name":"ext4","function_name":"ext4_find_dest_de"},"6989":{"probe_name":"ext4","function_name":"ext4_find_entry"},"6990":{"probe_name":"ext4","function_name":"ext4_find_extent"},"6991":{"probe_name":"ext4","function_name":"ext4_find_inline_data_nolock"},"6992":{"probe_name":"ext4","function_name":"ext4_find_inline_entry"},"6993":{"probe_name":"ext4","function_name":"ext4_find_shared"},"6994":{"probe_name":"ext4","function_name":"ext4_finish_convert_inline_dir"},"6995":{"probe_name":"ext4","function_name":"ext4_free_blocks"},"6996":{"probe_name":"ext4","function_name":"ext4_free_blocks_simple.isra.0"},"6997":{"probe_name":"ext4","function_name":"ext4_free_branches"},"6998":{"probe_name":"ext4","function_name":"ext4_free_clusters_after_init"},"6999":{"probe_name":"ext4","function_name":"ext4_free_data"},"7000":{"probe_name":"ext4","function_name":"ext4_free_ext_path"},"7001":{"probe_name":"ext4","function_name":"ext4_free_group_clusters"},"7002":{"probe_name":"ext4","function_name":"ext4_free_group_clusters_set"},"7003":{"probe_name":"ext4","function_name":"ext4_free_in_core_inode"},"7004":{"probe_name":"ext4","function_name":"ext4_free_inode"},"7005":{"probe_name":"ext4","function_name":"ext4_free_inodes_count"},"7006":{"probe_name":"ext4","function_name":"ext4_free_inodes_set"},"7007":{"probe_name":"ext4","function_name":"ext4_free_link"},"7008":{"probe_name":"ext4","function_name":"ext4_io_submit"},"7009":{"probe_name":"ext4","function_name":"ext4_io_submit_init"},"7010":{"probe_name":"ext4","function_name":"ext4_iomap_begin"},"7011":{"probe_name":"ext4","function_name":"ext4_iomap_begin_report"},"7012":{"probe_name":"ext4","function_name":"ext4_iomap_end"},"7013":{"probe_name":"ext4","function_name":"ext4_iomap_overwrite_begin"},"7014":{"probe_name":"ext4","function_name":"ext4_iomap_swap_activate"},"7015":{"probe_name":"ext4","function_name":"ext4_iomap_xattr_begin"},"7016":{"probe_name":"ext4","function_name":"ext4_journal_abort_handle.constprop.0"},"7017":{"probe_name":"ext4","function_name":"ext4_journal_bmap"},"7018":{"probe_name":"ext4","function_name":"ext4_journal_check_start"},"7019":{"probe_name":"ext4","function_name":"ext4_journal_commit_callback"},"7020":{"probe_name":"ext4","function_name":"ext4_journal_finish_inode_data_buffers"},"7021":{"probe_name":"ext4","function_name":"ext4_journal_submit_inode_data_buffers"},"7022":{"probe_name":"ext4","function_name":"ext4_journalled_dirty_folio"},"7023":{"probe_name":"ext4","function_name":"ext4_journalled_invalidate_folio"},"7024":{"probe_name":"ext4","function_name":"ext4_journalled_submit_inode_data_buffers"},"7025":{"probe_name":"ext4","function_name":"ext4_journalled_write_end"},"7026":{"probe_name":"ext4","function_name":"ext4_journalled_write_inline_data"},"7027":{"probe_name":"ext4","function_name":"ext4_journalled_writepage_callback"},"7028":{"probe_name":"ext4","function_name":"ext4_journalled_zero_new_buffers"},"7029":{"probe_name":"ext4","function_name":"ext4_mark_bitmap_end"},"7030":{"probe_name":"ext4","function_name":"ext4_mark_bitmap_end.part.0"},"7031":{"probe_name":"ext4","function_name":"ext4_mark_dquot_dirty"},"7032":{"probe_name":"ext4","function_name":"ext4_mark_group_bitmap_corrupted"},"7033":{"probe_name":"ext4","function_name":"ext4_mark_iloc_dirty"},"7034":{"probe_name":"ext4","function_name":"ext4_mark_inode_used"},"7035":{"probe_name":"ext4","function_name":"ext4_mark_recovery_complete.constprop.0"},"7036":{"probe_name":"ext4","function_name":"ext4_mballoc_query_range"},"7037":{"probe_name":"ext4","function_name":"ext4_meta_trans_blocks"},"7038":{"probe_name":"ext4","function_name":"ext4_mkdir"},"7039":{"probe_name":"ext4","function_name":"ext4_mknod"},"7040":{"probe_name":"ext4","function_name":"ext4_move_extents"},"7041":{"probe_name":"ext4","function_name":"ext4_read_bh"},"7042":{"probe_name":"ext4","function_name":"ext4_read_bh_lock"},"7043":{"probe_name":"ext4","function_name":"ext4_read_bh_nowait"},"7044":{"probe_name":"ext4","function_name":"ext4_read_block_bitmap"},"7045":{"probe_name":"ext4","function_name":"ext4_read_block_bitmap_nowait"},"7046":{"probe_name":"ext4","function_name":"ext4_read_folio"},"7047":{"probe_name":"ext4","function_name":"ext4_read_inline_data.part.0.isra.0"},"7048":{"probe_name":"ext4","function_name":"ext4_read_inline_dir"},"7049":{"probe_name":"ext4","function_name":"ext4_read_inline_link"},"7050":{"probe_name":"ext4","function_name":"ext4_read_inline_page"},"7051":{"probe_name":"ext4","function_name":"ext4_read_inode_bitmap"},"7052":{"probe_name":"ext4","function_name":"ext4_read_merkle_tree_page"},"7053":{"probe_name":"ext4","function_name":"ext4_readahead"},"7054":{"probe_name":"ext4","function_name":"ext4_readdir"},"7055":{"probe_name":"ext4","function_name":"ext4_readpage_inline"},"7056":{"probe_name":"ext4","function_name":"ext4_release_io_end"},"7057":{"probe_name":"ext4","function_name":"ext4_statfs"},"7058":{"probe_name":"ext4","function_name":"ext4_swap_extents"},"7059":{"probe_name":"ext4","function_name":"ext4_symlink"},"7060":{"probe_name":"ext4","function_name":"ext4_sync_file"},"7061":{"probe_name":"ext4","function_name":"ext4_sync_fs"},"7062":{"probe_name":"ext4","function_name":"ext4_tmpfile"},"7063":{"probe_name":"ext4","function_name":"ext4_trim_all_free"},"7064":{"probe_name":"ext4","function_name":"ext4_trim_fs"},"7065":{"probe_name":"ext4","function_name":"ext4_truncate"},"7066":{"probe_name":"ext4","function_name":"ext4_unfreeze"},"7067":{"probe_name":"ext4","function_name":"ext4_unlink"},"7068":{"probe_name":"ext4","function_name":"ext4_write_begin"},"7069":{"probe_name":"ext4","function_name":"ext4_write_dquot"},"7070":{"probe_name":"ext4","function_name":"ext4_write_end"},"7071":{"probe_name":"ext4","function_name":"ext4_write_info"},"7072":{"probe_name":"ext4","function_name":"ext4_write_inline_data"},"7073":{"probe_name":"ext4","function_name":"ext4_write_inline_data_end"},"7074":{"probe_name":"ext4","function_name":"ext4_write_inode"},"7075":{"probe_name":"ext4","function_name":"ext4_write_merkle_tree_block"},"7076":{"probe_name":"ext4","function_name":"ext4_writepage"},"7077":{"probe_name":"ext4","function_name":"ext4_writepage_cb"},"7078":{"probe_name":"ext4","function_name":"ext4_writepage_trans_blocks"},"7079":{"probe_name":"ext4","function_name":"ext4_writepages"},"7080":{"probe_name":"iomap","function_name":"iomap_add_to_ioend"},"7081":{"probe_name":"iomap","function_name":"iomap_adjust_read_range.isra.0"},"7082":{"probe_name":"iomap","function_name":"iomap_bmap"},"7083":{"probe_name":"iomap","function_name":"iomap_dio_complete"},"7084":{"probe_name":"iomap","function_name":"iomap_dio_complete_work"},"7085":{"probe_name":"iomap","function_name":"iomap_dio_deferred_complete"},"7086":{"probe_name":"iomap","function_name":"iomap_dio_inline_iter"},"7087":{"probe_name":"iomap","function_name":"iomap_dio_rw"},"7088":{"probe_name":"iomap","function_name":"iomap_dio_zero"},"7089":{"probe_name":"iomap","function_name":"iomap_dirty_folio"},"7090":{"probe_name":"iomap","function_name":"iomap_do_writepage"},"7091":{"probe_name":"iomap","function_name":"iomap_fiemap"},"7092":{"probe_name":"iomap","function_name":"iomap_file_buffered_write"},"7093":{"probe_name":"iomap","function_name":"iomap_file_buffered_write_punch_delalloc"},"7094":{"probe_name":"iomap","function_name":"iomap_file_unshare"},"7095":{"probe_name":"iomap","function_name":"iomap_finish_ioend"},"7096":{"probe_name":"iomap","function_name":"iomap_finish_ioends"},"7097":{"probe_name":"iomap","function_name":"iomap_get_folio"},"7098":{"probe_name":"iomap","function_name":"iomap_invalidate_folio"},"7099":{"probe_name":"iomap","function_name":"iomap_ioend_compare"},"7100":{"probe_name":"iomap","function_name":"iomap_ioend_try_merge"},"7101":{"probe_name":"iomap","function_name":"iomap_is_partially_uptodate"},"7102":{"probe_name":"iomap","function_name":"iomap_iter"},"7103":{"probe_name":"iomap","function_name":"iomap_page_mkwrite"},"7104":{"probe_name":"iomap","function_name":"iomap_read_end_io"},"7105":{"probe_name":"iomap","function_name":"iomap_read_folio"},"7106":{"probe_name":"iomap","function_name":"iomap_read_folio_sync"},"7107":{"probe_name":"iomap","function_name":"iomap_read_inline_data"},"7108":{"probe_name":"iomap","function_name":"iomap_readahead"},"7109":{"probe_name":"iomap","function_name":"iomap_readpage_iter"},"7110":{"probe_name":"iomap","function_name":"iomap_release_folio"},"7111":{"probe_name":"iomap","function_name":"iomap_seek_data"},"7112":{"probe_name":"iomap","function_name":"iomap_seek_hole"},"7113":{"probe_name":"iomap","function_name":"iomap_sort_ioends"},"7114":{"probe_name":"iomap","function_name":"iomap_submit_ioend"},"7115":{"probe_name":"iomap","function_name":"iomap_swapfile_activate"},"7116":{"probe_name":"iomap","function_name":"iomap_swapfile_add_extent"},"7117":{"probe_name":"iomap","function_name":"iomap_swapfile_fail"},"7118":{"probe_name":"iomap","function_name":"iomap_swapfile_iter"},"7119":{"probe_name":"iomap","function_name":"iomap_to_bh"},"7120":{"probe_name":"iomap","function_name":"iomap_to_fiemap"},"7121":{"probe_name":"iomap","function_name":"iomap_truncate_page"},"7122":{"probe_name":"iomap","function_name":"iomap_unshare_iter"},"7123":{"probe_name":"iomap","function_name":"iomap_write_begin"},"7124":{"probe_name":"iomap","function_name":"iomap_write_delalloc_release"},"7125":{"probe_name":"iomap","function_name":"iomap_write_end"},"7126":{"probe_name":"iomap","function_name":"iomap_write_iter"},"7127":{"probe_name":"iomap","function_name":"iomap_writepage_map"},"7128":{"probe_name":"iomap","function_name":"iomap_writepages"},"7129":{"probe_name":"iomap","function_name":"iomap_zero_iter"},"7130":{"probe_name":"iomap","function_name":"iomap_zero_range"},"7131":{"probe_name":"mpi","function_name":"MPIX_Comm_ack_failed"},"7132":{"probe_name":"mpi","function_name":"MPIX_Comm_ack_failed.cold"},"7133":{"probe_name":"mpi","function_name":"MPIX_Comm_agree"},"7134":{"probe_name":"mpi","function_name":"MPIX_Comm_agree.cold"},"7135":{"probe_name":"mpi","function_name":"MPIX_Comm_failure_ack"},"7136":{"probe_name":"mpi","function_name":"MPIX_Comm_failure_ack.cold"},"7137":{"probe_name":"mpi","function_name":"MPIX_Comm_failure_get_acked"},"7138":{"probe_name":"mpi","function_name":"MPIX_Comm_failure_get_acked.cold"},"7139":{"probe_name":"mpi","function_name":"MPIX_Comm_get_failed"},"7140":{"probe_name":"mpi","function_name":"MPIX_Comm_get_failed.cold"},"7141":{"probe_name":"mpi","function_name":"MPIX_Comm_iagree"},"7142":{"probe_name":"mpi","function_name":"MPIX_Comm_iagree.cold"},"7143":{"probe_name":"mpi","function_name":"MPIX_Comm_is_revoked"},"7144":{"probe_name":"mpi","function_name":"MPIX_Comm_revoke"},"7145":{"probe_name":"mpi","function_name":"MPIX_Comm_revoke.cold"},"7146":{"probe_name":"mpi","function_name":"MPIX_Comm_shrink"},"7147":{"probe_name":"mpi","function_name":"MPIX_Comm_shrink.cold"},"7148":{"probe_name":"mpi","function_name":"MPIX_Query_cuda_support"},"7149":{"probe_name":"mpi","function_name":"MPIX_Query_rocm_support"},"7150":{"probe_name":"mpi","function_name":"MPI_AINT_ADD_F90"},"7151":{"probe_name":"mpi","function_name":"MPI_AINT_DIFF_F90"},"7152":{"probe_name":"mpi","function_name":"MPI_Abort"},"7153":{"probe_name":"mpi","function_name":"MPI_Accumulate"},"7154":{"probe_name":"mpi","function_name":"MPI_Add_error_class"},"7155":{"probe_name":"mpi","function_name":"MPI_Add_error_code"},"7156":{"probe_name":"mpi","function_name":"MPI_Add_error_string"},"7157":{"probe_name":"mpi","function_name":"MPI_Address"},"7158":{"probe_name":"mpi","function_name":"MPI_Allgather"},"7159":{"probe_name":"mpi","function_name":"MPI_Allgather_init"},"7160":{"probe_name":"mpi","function_name":"MPI_Allgatherv"},"7161":{"probe_name":"mpi","function_name":"MPI_Allgatherv_init"},"7162":{"probe_name":"mpi","function_name":"MPI_Alloc_mem"},"7163":{"probe_name":"mpi","function_name":"MPI_Allreduce"},"7164":{"probe_name":"mpi","function_name":"MPI_Allreduce_init"},"7165":{"probe_name":"mpi","function_name":"MPI_Alltoall"},"7166":{"probe_name":"mpi","function_name":"MPI_Alltoall_init"},"7167":{"probe_name":"mpi","function_name":"MPI_Alltoallv"},"7168":{"probe_name":"mpi","function_name":"MPI_Alltoallv_init"},"7169":{"probe_name":"mpi","function_name":"MPI_Alltoallw"},"7170":{"probe_name":"mpi","function_name":"MPI_Alltoallw_init"},"7171":{"probe_name":"mpi","function_name":"MPI_Attr_delete"},"7172":{"probe_name":"mpi","function_name":"MPI_Attr_get"},"7173":{"probe_name":"mpi","function_name":"MPI_Attr_put"},"7174":{"probe_name":"mpi","function_name":"MPI_Barrier"},"7175":{"probe_name":"mpi","function_name":"MPI_Barrier_init"},"7176":{"probe_name":"mpi","function_name":"MPI_Bcast"},"7177":{"probe_name":"mpi","function_name":"MPI_Bcast_init"},"7178":{"probe_name":"mpi","function_name":"MPI_Bsend"},"7179":{"probe_name":"mpi","function_name":"MPI_Bsend_init"},"7180":{"probe_name":"mpi","function_name":"MPI_Buffer_attach"},"7181":{"probe_name":"mpi","function_name":"MPI_Buffer_detach"},"7182":{"probe_name":"mpi","function_name":"MPI_COMM_DUP_FN"},"7183":{"probe_name":"mpi","function_name":"MPI_COMM_NULL_COPY_FN"},"7184":{"probe_name":"mpi","function_name":"MPI_COMM_NULL_DELETE_FN"},"7185":{"probe_name":"mpi","function_name":"MPI_CONVERSION_FN_NULL"},"7186":{"probe_name":"mpi","function_name":"MPI_Cancel"},"7187":{"probe_name":"mpi","function_name":"MPI_Cart_coords"},"7188":{"probe_name":"mpi","function_name":"MPI_Cart_create"},"7189":{"probe_name":"mpi","function_name":"MPI_Cart_get"},"7190":{"probe_name":"mpi","function_name":"MPI_Cart_map"},"7191":{"probe_name":"mpi","function_name":"MPI_Cart_rank"},"7192":{"probe_name":"mpi","function_name":"MPI_Cart_shift"},"7193":{"probe_name":"mpi","function_name":"MPI_Cart_sub"},"7194":{"probe_name":"mpi","function_name":"MPI_Cartdim_get"},"7195":{"probe_name":"mpi","function_name":"MPI_Close_port"},"7196":{"probe_name":"mpi","function_name":"MPI_Comm_accept"},"7197":{"probe_name":"mpi","function_name":"MPI_Comm_c2f"},"7198":{"probe_name":"mpi","function_name":"MPI_Comm_call_errhandler"},"7199":{"probe_name":"mpi","function_name":"MPI_Comm_compare"},"7200":{"probe_name":"mpi","function_name":"MPI_Comm_connect"},"7201":{"probe_name":"mpi","function_name":"MPI_Comm_create"},"7202":{"probe_name":"mpi","function_name":"MPI_Comm_create_errhandler"},"7203":{"probe_name":"mpi","function_name":"MPI_Comm_create_from_group"},"7204":{"probe_name":"mpi","function_name":"MPI_Comm_create_group"},"7205":{"probe_name":"mpi","function_name":"MPI_Comm_create_keyval"},"7206":{"probe_name":"mpi","function_name":"MPI_Comm_delete_attr"},"7207":{"probe_name":"mpi","function_name":"MPI_Comm_disconnect"},"7208":{"probe_name":"mpi","function_name":"MPI_Comm_dup"},"7209":{"probe_name":"mpi","function_name":"MPI_Comm_dup_with_info"},"7210":{"probe_name":"mpi","function_name":"MPI_Comm_f2c"},"7211":{"probe_name":"mpi","function_name":"MPI_Comm_free"},"7212":{"probe_name":"mpi","function_name":"MPI_Comm_free_keyval"},"7213":{"probe_name":"mpi","function_name":"MPI_Comm_get_attr"},"7214":{"probe_name":"mpi","function_name":"MPI_Comm_get_errhandler"},"7215":{"probe_name":"mpi","function_name":"MPI_Comm_get_info"},"7216":{"probe_name":"mpi","function_name":"MPI_Comm_get_name"},"7217":{"probe_name":"mpi","function_name":"MPI_Comm_get_parent"},"7218":{"probe_name":"mpi","function_name":"MPI_Comm_group"},"7219":{"probe_name":"mpi","function_name":"MPI_Comm_idup"},"7220":{"probe_name":"mpi","function_name":"MPI_Comm_idup_with_info"},"7221":{"probe_name":"mpi","function_name":"MPI_Comm_join"},"7222":{"probe_name":"mpi","function_name":"MPI_Comm_rank"},"7223":{"probe_name":"mpi","function_name":"MPI_Comm_remote_group"},"7224":{"probe_name":"mpi","function_name":"MPI_Comm_remote_size"},"7225":{"probe_name":"mpi","function_name":"MPI_Comm_set_attr"},"7226":{"probe_name":"mpi","function_name":"MPI_Comm_set_errhandler"},"7227":{"probe_name":"mpi","function_name":"MPI_Comm_set_info"},"7228":{"probe_name":"mpi","function_name":"MPI_Comm_set_name"},"7229":{"probe_name":"mpi","function_name":"MPI_Comm_size"},"7230":{"probe_name":"mpi","function_name":"MPI_Comm_spawn"},"7231":{"probe_name":"mpi","function_name":"MPI_Comm_spawn_multiple"},"7232":{"probe_name":"mpi","function_name":"MPI_Comm_split"},"7233":{"probe_name":"mpi","function_name":"MPI_Comm_split_type"},"7234":{"probe_name":"mpi","function_name":"MPI_Comm_test_inter"},"7235":{"probe_name":"mpi","function_name":"MPI_Compare_and_swap"},"7236":{"probe_name":"mpi","function_name":"MPI_DUP_FN"},"7237":{"probe_name":"mpi","function_name":"MPI_Dims_create"},"7238":{"probe_name":"mpi","function_name":"MPI_Dist_graph_create"},"7239":{"probe_name":"mpi","function_name":"MPI_Dist_graph_create_adjacent"},"7240":{"probe_name":"mpi","function_name":"MPI_Dist_graph_neighbors"},"7241":{"probe_name":"mpi","function_name":"MPI_Dist_graph_neighbors_count"},"7242":{"probe_name":"mpi","function_name":"MPI_Errhandler_c2f"},"7243":{"probe_name":"mpi","function_name":"MPI_Errhandler_create"},"7244":{"probe_name":"mpi","function_name":"MPI_Errhandler_f2c"},"7245":{"probe_name":"mpi","function_name":"MPI_Errhandler_free"},"7246":{"probe_name":"mpi","function_name":"MPI_Errhandler_get"},"7247":{"probe_name":"mpi","function_name":"MPI_Errhandler_set"},"7248":{"probe_name":"mpi","function_name":"MPI_Error_class"},"7249":{"probe_name":"mpi","function_name":"MPI_Error_string"},"7250":{"probe_name":"mpi","function_name":"MPI_Exscan"},"7251":{"probe_name":"mpi","function_name":"MPI_Exscan_init"},"7252":{"probe_name":"mpi","function_name":"MPI_Fetch_and_op"},"7253":{"probe_name":"mpi","function_name":"MPI_File_c2f"},"7254":{"probe_name":"mpi","function_name":"MPI_File_call_errhandler"},"7255":{"probe_name":"mpi","function_name":"MPI_File_close"},"7256":{"probe_name":"mpi","function_name":"MPI_File_create_errhandler"},"7257":{"probe_name":"mpi","function_name":"MPI_File_delete"},"7258":{"probe_name":"mpi","function_name":"MPI_File_f2c"},"7259":{"probe_name":"mpi","function_name":"MPI_File_get_amode"},"7260":{"probe_name":"mpi","function_name":"MPI_File_get_atomicity"},"7261":{"probe_name":"mpi","function_name":"MPI_File_get_byte_offset"},"7262":{"probe_name":"mpi","function_name":"MPI_File_get_errhandler"},"7263":{"probe_name":"mpi","function_name":"MPI_File_get_group"},"7264":{"probe_name":"mpi","function_name":"MPI_File_get_info"},"7265":{"probe_name":"mpi","function_name":"MPI_File_get_position"},"7266":{"probe_name":"mpi","function_name":"MPI_File_get_position_shared"},"7267":{"probe_name":"mpi","function_name":"MPI_File_get_size"},"7268":{"probe_name":"mpi","function_name":"MPI_File_get_type_extent"},"7269":{"probe_name":"mpi","function_name":"MPI_File_get_view"},"7270":{"probe_name":"mpi","function_name":"MPI_File_iread"},"7271":{"probe_name":"mpi","function_name":"MPI_File_iread_all"},"7272":{"probe_name":"mpi","function_name":"MPI_File_iread_at"},"7273":{"probe_name":"mpi","function_name":"MPI_File_iread_at_all"},"7274":{"probe_name":"mpi","function_name":"MPI_File_iread_shared"},"7275":{"probe_name":"mpi","function_name":"MPI_File_iwrite"},"7276":{"probe_name":"mpi","function_name":"MPI_File_iwrite_all"},"7277":{"probe_name":"mpi","function_name":"MPI_File_iwrite_at"},"7278":{"probe_name":"mpi","function_name":"MPI_File_iwrite_at_all"},"7279":{"probe_name":"mpi","function_name":"MPI_File_iwrite_shared"},"7280":{"probe_name":"mpi","function_name":"MPI_File_open"},"7281":{"probe_name":"mpi","function_name":"MPI_File_preallocate"},"7282":{"probe_name":"mpi","function_name":"MPI_File_read"},"7283":{"probe_name":"mpi","function_name":"MPI_File_read_all"},"7284":{"probe_name":"mpi","function_name":"MPI_File_read_all_begin"},"7285":{"probe_name":"mpi","function_name":"MPI_File_read_all_end"},"7286":{"probe_name":"mpi","function_name":"MPI_File_read_at"},"7287":{"probe_name":"mpi","function_name":"MPI_File_read_at_all"},"7288":{"probe_name":"mpi","function_name":"MPI_File_read_at_all_begin"},"7289":{"probe_name":"mpi","function_name":"MPI_File_read_at_all_end"},"7290":{"probe_name":"mpi","function_name":"MPI_File_read_ordered"},"7291":{"probe_name":"mpi","function_name":"MPI_File_read_ordered_begin"},"7292":{"probe_name":"mpi","function_name":"MPI_File_read_ordered_end"},"7293":{"probe_name":"mpi","function_name":"MPI_File_read_shared"},"7294":{"probe_name":"mpi","function_name":"MPI_File_seek"},"7295":{"probe_name":"mpi","function_name":"MPI_File_seek_shared"},"7296":{"probe_name":"mpi","function_name":"MPI_File_set_atomicity"},"7297":{"probe_name":"mpi","function_name":"MPI_File_set_errhandler"},"7298":{"probe_name":"mpi","function_name":"MPI_File_set_info"},"7299":{"probe_name":"mpi","function_name":"MPI_File_set_size"},"7300":{"probe_name":"mpi","function_name":"MPI_File_set_view"},"7301":{"probe_name":"mpi","function_name":"MPI_File_sync"},"7302":{"probe_name":"mpi","function_name":"MPI_File_write"},"7303":{"probe_name":"mpi","function_name":"MPI_File_write_all"},"7304":{"probe_name":"mpi","function_name":"MPI_File_write_all_begin"},"7305":{"probe_name":"mpi","function_name":"MPI_File_write_all_end"},"7306":{"probe_name":"mpi","function_name":"MPI_File_write_at"},"7307":{"probe_name":"mpi","function_name":"MPI_File_write_at_all"},"7308":{"probe_name":"mpi","function_name":"MPI_File_write_at_all_begin"},"7309":{"probe_name":"mpi","function_name":"MPI_File_write_at_all_end"},"7310":{"probe_name":"mpi","function_name":"MPI_File_write_ordered"},"7311":{"probe_name":"mpi","function_name":"MPI_File_write_ordered_begin"},"7312":{"probe_name":"mpi","function_name":"MPI_File_write_ordered_end"},"7313":{"probe_name":"mpi","function_name":"MPI_File_write_shared"},"7314":{"probe_name":"mpi","function_name":"MPI_Finalize"},"7315":{"probe_name":"mpi","function_name":"MPI_Finalized"},"7316":{"probe_name":"mpi","function_name":"MPI_Free_mem"},"7317":{"probe_name":"mpi","function_name":"MPI_Gather"},"7318":{"probe_name":"mpi","function_name":"MPI_Gather_init"},"7319":{"probe_name":"mpi","function_name":"MPI_Gatherv"},"7320":{"probe_name":"mpi","function_name":"MPI_Gatherv_init"},"7321":{"probe_name":"mpi","function_name":"MPI_Get"},"7322":{"probe_name":"mpi","function_name":"MPI_Get_accumulate"},"7323":{"probe_name":"mpi","function_name":"MPI_Get_address"},"7324":{"probe_name":"mpi","function_name":"MPI_Get_count"},"7325":{"probe_name":"mpi","function_name":"MPI_Get_elements"},"7326":{"probe_name":"mpi","function_name":"MPI_Get_elements_x"},"7327":{"probe_name":"mpi","function_name":"MPI_Get_library_version"},"7328":{"probe_name":"mpi","function_name":"MPI_Get_processor_name"},"7329":{"probe_name":"mpi","function_name":"MPI_Get_version"},"7330":{"probe_name":"mpi","function_name":"MPI_Graph_create"},"7331":{"probe_name":"mpi","function_name":"MPI_Graph_get"},"7332":{"probe_name":"mpi","function_name":"MPI_Graph_map"},"7333":{"probe_name":"mpi","function_name":"MPI_Graph_neighbors"},"7334":{"probe_name":"mpi","function_name":"MPI_Graph_neighbors_count"},"7335":{"probe_name":"mpi","function_name":"MPI_Graphdims_get"},"7336":{"probe_name":"mpi","function_name":"MPI_Grequest_complete"},"7337":{"probe_name":"mpi","function_name":"MPI_Grequest_start"},"7338":{"probe_name":"mpi","function_name":"MPI_Group_c2f"},"7339":{"probe_name":"mpi","function_name":"MPI_Group_compare"},"7340":{"probe_name":"mpi","function_name":"MPI_Group_difference"},"7341":{"probe_name":"mpi","function_name":"MPI_Group_excl"},"7342":{"probe_name":"mpi","function_name":"MPI_Group_f2c"},"7343":{"probe_name":"mpi","function_name":"MPI_Group_free"},"7344":{"probe_name":"mpi","function_name":"MPI_Group_from_session_pset"},"7345":{"probe_name":"mpi","function_name":"MPI_Group_incl"},"7346":{"probe_name":"mpi","function_name":"MPI_Group_intersection"},"7347":{"probe_name":"mpi","function_name":"MPI_Group_range_excl"},"7348":{"probe_name":"mpi","function_name":"MPI_Group_range_incl"},"7349":{"probe_name":"mpi","function_name":"MPI_Group_rank"},"7350":{"probe_name":"mpi","function_name":"MPI_Group_size"},"7351":{"probe_name":"mpi","function_name":"MPI_Group_translate_ranks"},"7352":{"probe_name":"mpi","function_name":"MPI_Group_union"},"7353":{"probe_name":"mpi","function_name":"MPI_Iallgather"},"7354":{"probe_name":"mpi","function_name":"MPI_Iallgatherv"},"7355":{"probe_name":"mpi","function_name":"MPI_Iallreduce"},"7356":{"probe_name":"mpi","function_name":"MPI_Ialltoall"},"7357":{"probe_name":"mpi","function_name":"MPI_Ialltoallv"},"7358":{"probe_name":"mpi","function_name":"MPI_Ialltoallw"},"7359":{"probe_name":"mpi","function_name":"MPI_Ibarrier"},"7360":{"probe_name":"mpi","function_name":"MPI_Ibcast"},"7361":{"probe_name":"mpi","function_name":"MPI_Ibsend"},"7362":{"probe_name":"mpi","function_name":"MPI_Iexscan"},"7363":{"probe_name":"mpi","function_name":"MPI_Igather"},"7364":{"probe_name":"mpi","function_name":"MPI_Igatherv"},"7365":{"probe_name":"mpi","function_name":"MPI_Improbe"},"7366":{"probe_name":"mpi","function_name":"MPI_Imrecv"},"7367":{"probe_name":"mpi","function_name":"MPI_Ineighbor_allgather"},"7368":{"probe_name":"mpi","function_name":"MPI_Ineighbor_allgatherv"},"7369":{"probe_name":"mpi","function_name":"MPI_Ineighbor_alltoall"},"7370":{"probe_name":"mpi","function_name":"MPI_Ineighbor_alltoallv"},"7371":{"probe_name":"mpi","function_name":"MPI_Ineighbor_alltoallw"},"7372":{"probe_name":"mpi","function_name":"MPI_Info_c2f"},"7373":{"probe_name":"mpi","function_name":"MPI_Info_create"},"7374":{"probe_name":"mpi","function_name":"MPI_Info_create_env"},"7375":{"probe_name":"mpi","function_name":"MPI_Info_delete"},"7376":{"probe_name":"mpi","function_name":"MPI_Info_dup"},"7377":{"probe_name":"mpi","function_name":"MPI_Info_f2c"},"7378":{"probe_name":"mpi","function_name":"MPI_Info_free"},"7379":{"probe_name":"mpi","function_name":"MPI_Info_get"},"7380":{"probe_name":"mpi","function_name":"MPI_Info_get_nkeys"},"7381":{"probe_name":"mpi","function_name":"MPI_Info_get_nthkey"},"7382":{"probe_name":"mpi","function_name":"MPI_Info_get_string"},"7383":{"probe_name":"mpi","function_name":"MPI_Info_get_valuelen"},"7384":{"probe_name":"mpi","function_name":"MPI_Info_set"},"7385":{"probe_name":"mpi","function_name":"MPI_Init"},"7386":{"probe_name":"mpi","function_name":"MPI_Init_thread"},"7387":{"probe_name":"mpi","function_name":"MPI_Initialized"},"7388":{"probe_name":"mpi","function_name":"MPI_Intercomm_create"},"7389":{"probe_name":"mpi","function_name":"MPI_Intercomm_create_from_groups"},"7390":{"probe_name":"mpi","function_name":"MPI_Intercomm_merge"},"7391":{"probe_name":"mpi","function_name":"MPI_Iprobe"},"7392":{"probe_name":"mpi","function_name":"MPI_Irecv"},"7393":{"probe_name":"mpi","function_name":"MPI_Ireduce"},"7394":{"probe_name":"mpi","function_name":"MPI_Ireduce_scatter"},"7395":{"probe_name":"mpi","function_name":"MPI_Ireduce_scatter_block"},"7396":{"probe_name":"mpi","function_name":"MPI_Irsend"},"7397":{"probe_name":"mpi","function_name":"MPI_Is_thread_main"},"7398":{"probe_name":"mpi","function_name":"MPI_Iscan"},"7399":{"probe_name":"mpi","function_name":"MPI_Iscatter"},"7400":{"probe_name":"mpi","function_name":"MPI_Iscatterv"},"7401":{"probe_name":"mpi","function_name":"MPI_Isend"},"7402":{"probe_name":"mpi","function_name":"MPI_Isendrecv"},"7403":{"probe_name":"mpi","function_name":"MPI_Isendrecv_replace"},"7404":{"probe_name":"mpi","function_name":"MPI_Issend"},"7405":{"probe_name":"mpi","function_name":"MPI_Keyval_create"},"7406":{"probe_name":"mpi","function_name":"MPI_Keyval_free"},"7407":{"probe_name":"mpi","function_name":"MPI_Lookup_name"},"7408":{"probe_name":"mpi","function_name":"MPI_Message_c2f"},"7409":{"probe_name":"mpi","function_name":"MPI_Message_f2c"},"7410":{"probe_name":"mpi","function_name":"MPI_Mprobe"},"7411":{"probe_name":"mpi","function_name":"MPI_Mrecv"},"7412":{"probe_name":"mpi","function_name":"MPI_NULL_COPY_FN"},"7413":{"probe_name":"mpi","function_name":"MPI_NULL_DELETE_FN"},"7414":{"probe_name":"mpi","function_name":"MPI_Neighbor_allgather"},"7415":{"probe_name":"mpi","function_name":"MPI_Neighbor_allgather_init"},"7416":{"probe_name":"mpi","function_name":"MPI_Neighbor_allgatherv"},"7417":{"probe_name":"mpi","function_name":"MPI_Neighbor_allgatherv_init"},"7418":{"probe_name":"mpi","function_name":"MPI_Neighbor_alltoall"},"7419":{"probe_name":"mpi","function_name":"MPI_Neighbor_alltoall_init"},"7420":{"probe_name":"mpi","function_name":"MPI_Neighbor_alltoallv"},"7421":{"probe_name":"mpi","function_name":"MPI_Neighbor_alltoallv_init"},"7422":{"probe_name":"mpi","function_name":"MPI_Neighbor_alltoallw"},"7423":{"probe_name":"mpi","function_name":"MPI_Neighbor_alltoallw_init"},"7424":{"probe_name":"mpi","function_name":"MPI_Op_c2f"},"7425":{"probe_name":"mpi","function_name":"MPI_Op_commutative"},"7426":{"probe_name":"mpi","function_name":"MPI_Op_create"},"7427":{"probe_name":"mpi","function_name":"MPI_Op_f2c"},"7428":{"probe_name":"mpi","function_name":"MPI_Op_free"},"7429":{"probe_name":"mpi","function_name":"MPI_Open_port"},"7430":{"probe_name":"mpi","function_name":"MPI_Pack"},"7431":{"probe_name":"mpi","function_name":"MPI_Pack_external"},"7432":{"probe_name":"mpi","function_name":"MPI_Pack_external_size"},"7433":{"probe_name":"mpi","function_name":"MPI_Pack_size"},"7434":{"probe_name":"mpi","function_name":"MPI_Parrived"},"7435":{"probe_name":"mpi","function_name":"MPI_Pcontrol"},"7436":{"probe_name":"mpi","function_name":"MPI_Pready"},"7437":{"probe_name":"mpi","function_name":"MPI_Pready_list"},"7438":{"probe_name":"mpi","function_name":"MPI_Pready_range"},"7439":{"probe_name":"mpi","function_name":"MPI_Precv_init"},"7440":{"probe_name":"mpi","function_name":"MPI_Probe"},"7441":{"probe_name":"mpi","function_name":"MPI_Psend_init"},"7442":{"probe_name":"mpi","function_name":"MPI_Publish_name"},"7443":{"probe_name":"mpi","function_name":"MPI_Put"},"7444":{"probe_name":"mpi","function_name":"MPI_Query_thread"},"7445":{"probe_name":"mpi","function_name":"MPI_Raccumulate"},"7446":{"probe_name":"mpi","function_name":"MPI_Recv"},"7447":{"probe_name":"mpi","function_name":"MPI_Recv_init"},"7448":{"probe_name":"mpi","function_name":"MPI_Reduce"},"7449":{"probe_name":"mpi","function_name":"MPI_Reduce_init"},"7450":{"probe_name":"mpi","function_name":"MPI_Reduce_local"},"7451":{"probe_name":"mpi","function_name":"MPI_Reduce_scatter"},"7452":{"probe_name":"mpi","function_name":"MPI_Reduce_scatter_block"},"7453":{"probe_name":"mpi","function_name":"MPI_Reduce_scatter_block_init"},"7454":{"probe_name":"mpi","function_name":"MPI_Reduce_scatter_init"},"7455":{"probe_name":"mpi","function_name":"MPI_Register_datarep"},"7456":{"probe_name":"mpi","function_name":"MPI_Request_c2f"},"7457":{"probe_name":"mpi","function_name":"MPI_Request_f2c"},"7458":{"probe_name":"mpi","function_name":"MPI_Request_free"},"7459":{"probe_name":"mpi","function_name":"MPI_Request_get_status"},"7460":{"probe_name":"mpi","function_name":"MPI_Rget"},"7461":{"probe_name":"mpi","function_name":"MPI_Rget_accumulate"},"7462":{"probe_name":"mpi","function_name":"MPI_Rput"},"7463":{"probe_name":"mpi","function_name":"MPI_Rsend"},"7464":{"probe_name":"mpi","function_name":"MPI_Rsend_init"},"7465":{"probe_name":"mpi","function_name":"MPI_Scan"},"7466":{"probe_name":"mpi","function_name":"MPI_Scan_init"},"7467":{"probe_name":"mpi","function_name":"MPI_Scatter"},"7468":{"probe_name":"mpi","function_name":"MPI_Scatter_init"},"7469":{"probe_name":"mpi","function_name":"MPI_Scatterv"},"7470":{"probe_name":"mpi","function_name":"MPI_Scatterv_init"},"7471":{"probe_name":"mpi","function_name":"MPI_Send"},"7472":{"probe_name":"mpi","function_name":"MPI_Send_init"},"7473":{"probe_name":"mpi","function_name":"MPI_Sendrecv"},"7474":{"probe_name":"mpi","function_name":"MPI_Sendrecv_replace"},"7475":{"probe_name":"mpi","function_name":"MPI_Session_c2f"},"7476":{"probe_name":"mpi","function_name":"MPI_Session_call_errhandler"},"7477":{"probe_name":"mpi","function_name":"MPI_Session_create_errhandler"},"7478":{"probe_name":"mpi","function_name":"MPI_Session_f2c"},"7479":{"probe_name":"mpi","function_name":"MPI_Session_finalize"},"7480":{"probe_name":"mpi","function_name":"MPI_Session_get_errhandler"},"7481":{"probe_name":"mpi","function_name":"MPI_Session_get_info"},"7482":{"probe_name":"mpi","function_name":"MPI_Session_get_nth_pset"},"7483":{"probe_name":"mpi","function_name":"MPI_Session_get_num_psets"},"7484":{"probe_name":"mpi","function_name":"MPI_Session_get_pset_info"},"7485":{"probe_name":"mpi","function_name":"MPI_Session_init"},"7486":{"probe_name":"mpi","function_name":"MPI_Session_set_errhandler"},"7487":{"probe_name":"mpi","function_name":"MPI_Session_set_info"},"7488":{"probe_name":"mpi","function_name":"MPI_Ssend"},"7489":{"probe_name":"mpi","function_name":"MPI_Ssend_init"},"7490":{"probe_name":"mpi","function_name":"MPI_Start"},"7491":{"probe_name":"mpi","function_name":"MPI_Startall"},"7492":{"probe_name":"mpi","function_name":"MPI_Status_c2f"},"7493":{"probe_name":"mpi","function_name":"MPI_Status_c2f08"},"7494":{"probe_name":"mpi","function_name":"MPI_Status_f082c"},"7495":{"probe_name":"mpi","function_name":"MPI_Status_f082f"},"7496":{"probe_name":"mpi","function_name":"MPI_Status_f2c"},"7497":{"probe_name":"mpi","function_name":"MPI_Status_f2f08"},"7498":{"probe_name":"mpi","function_name":"MPI_Status_set_cancelled"},"7499":{"probe_name":"mpi","function_name":"MPI_Status_set_elements"},"7500":{"probe_name":"mpi","function_name":"MPI_Status_set_elements_x"},"7501":{"probe_name":"mpi","function_name":"MPI_TYPE_DUP_FN"},"7502":{"probe_name":"mpi","function_name":"MPI_TYPE_NULL_COPY_FN"},"7503":{"probe_name":"mpi","function_name":"MPI_TYPE_NULL_DELETE_FN"},"7504":{"probe_name":"mpi","function_name":"MPI_T_category_changed"},"7505":{"probe_name":"mpi","function_name":"MPI_T_category_get_categories"},"7506":{"probe_name":"mpi","function_name":"MPI_T_category_get_cvars"},"7507":{"probe_name":"mpi","function_name":"MPI_T_category_get_index"},"7508":{"probe_name":"mpi","function_name":"MPI_T_category_get_info"},"7509":{"probe_name":"mpi","function_name":"MPI_T_category_get_num"},"7510":{"probe_name":"mpi","function_name":"MPI_T_category_get_pvars"},"7511":{"probe_name":"mpi","function_name":"MPI_T_cvar_get_index"},"7512":{"probe_name":"mpi","function_name":"MPI_T_cvar_get_info"},"7513":{"probe_name":"mpi","function_name":"MPI_T_cvar_get_num"},"7514":{"probe_name":"mpi","function_name":"MPI_T_cvar_handle_alloc"},"7515":{"probe_name":"mpi","function_name":"MPI_T_cvar_handle_free"},"7516":{"probe_name":"mpi","function_name":"MPI_T_cvar_read"},"7517":{"probe_name":"mpi","function_name":"MPI_T_cvar_write"},"7518":{"probe_name":"mpi","function_name":"MPI_T_enum_get_info"},"7519":{"probe_name":"mpi","function_name":"MPI_T_enum_get_item"},"7520":{"probe_name":"mpi","function_name":"MPI_T_finalize"},"7521":{"probe_name":"mpi","function_name":"MPI_T_init_thread"},"7522":{"probe_name":"mpi","function_name":"MPI_T_pvar_get_index"},"7523":{"probe_name":"mpi","function_name":"MPI_T_pvar_get_info"},"7524":{"probe_name":"mpi","function_name":"MPI_T_pvar_get_num"},"7525":{"probe_name":"mpi","function_name":"MPI_T_pvar_handle_alloc"},"7526":{"probe_name":"mpi","function_name":"MPI_T_pvar_handle_free"},"7527":{"probe_name":"mpi","function_name":"MPI_T_pvar_read"},"7528":{"probe_name":"mpi","function_name":"MPI_T_pvar_readreset"},"7529":{"probe_name":"mpi","function_name":"MPI_T_pvar_reset"},"7530":{"probe_name":"mpi","function_name":"MPI_T_pvar_session_create"},"7531":{"probe_name":"mpi","function_name":"MPI_T_pvar_session_free"},"7532":{"probe_name":"mpi","function_name":"MPI_T_pvar_start"},"7533":{"probe_name":"mpi","function_name":"MPI_T_pvar_stop"},"7534":{"probe_name":"mpi","function_name":"MPI_T_pvar_write"},"7535":{"probe_name":"mpi","function_name":"MPI_Test"},"7536":{"probe_name":"mpi","function_name":"MPI_Test_cancelled"},"7537":{"probe_name":"mpi","function_name":"MPI_Testall"},"7538":{"probe_name":"mpi","function_name":"MPI_Testany"},"7539":{"probe_name":"mpi","function_name":"MPI_Testsome"},"7540":{"probe_name":"mpi","function_name":"MPI_Topo_test"},"7541":{"probe_name":"mpi","function_name":"MPI_Type_c2f"},"7542":{"probe_name":"mpi","function_name":"MPI_Type_commit"},"7564":{"probe_name":"mpi","function_name":"MPI_Type_get_envelope"},"7565":{"probe_name":"mpi","function_name":"MPI_Type_get_extent"},"7566":{"probe_name":"mpi","function_name":"MPI_Type_get_extent_x"},"7567":{"probe_name":"mpi","function_name":"MPI_Type_get_name"},"7568":{"probe_name":"mpi","function_name":"MPI_Type_get_true_extent"},"7569":{"probe_name":"mpi","function_name":"MPI_Type_get_true_extent_x"},"7570":{"probe_name":"mpi","function_name":"MPI_Type_hindexed"},"7571":{"probe_name":"mpi","function_name":"MPI_Type_hvector"},"7572":{"probe_name":"mpi","function_name":"MPI_Type_indexed"},"7573":{"probe_name":"mpi","function_name":"MPI_Type_lb"},"7574":{"probe_name":"mpi","function_name":"MPI_Type_match_size"},"7575":{"probe_name":"mpi","function_name":"MPI_Type_set_attr"},"7576":{"probe_name":"mpi","function_name":"MPI_Type_set_name"},"7577":{"probe_name":"mpi","function_name":"MPI_Type_size"},"7578":{"probe_name":"mpi","function_name":"MPI_Type_size_x"},"7579":{"probe_name":"mpi","function_name":"MPI_Type_struct"},"7580":{"probe_name":"mpi","function_name":"MPI_Type_ub"},"7581":{"probe_name":"mpi","function_name":"MPI_Type_vector"},"7582":{"probe_name":"mpi","function_name":"MPI_Unpack"},"7583":{"probe_name":"mpi","function_name":"MPI_Unpack_external"},"7584":{"probe_name":"mpi","function_name":"MPI_Unpublish_name"},"7585":{"probe_name":"mpi","function_name":"MPI_WIN_DUP_FN"},"7586":{"probe_name":"mpi","function_name":"MPI_WIN_NULL_COPY_FN"},"7587":{"probe_name":"mpi","function_name":"MPI_WIN_NULL_DELETE_FN"},"7588":{"probe_name":"mpi","function_name":"MPI_WTICK_F90"},"7589":{"probe_name":"mpi","function_name":"MPI_WTIME_F90"},"7590":{"probe_name":"mpi","function_name":"MPI_Wait"},"7591":{"probe_name":"mpi","function_name":"MPI_Waitall"},"7592":{"probe_name":"mpi","function_name":"MPI_Waitany"},"7593":{"probe_name":"mpi","function_name":"MPI_Waitsome"},"7594":{"probe_name":"mpi","function_name":"MPI_Win_allocate"},"7595":{"probe_name":"mpi","function_name":"MPI_Win_allocate_shared"},"7596":{"probe_name":"mpi","function_name":"MPI_Win_attach"},"7597":{"probe_name":"mpi","function_name":"MPI_Win_c2f"},"7598":{"probe_name":"mpi","function_name":"MPI_Win_call_errhandler"},"7599":{"probe_name":"mpi","function_name":"MPI_Win_complete"},"7600":{"probe_name":"mpi","function_name":"MPI_Win_create"},"7601":{"probe_name":"mpi","function_name":"MPI_Win_create_dynamic"},"7602":{"probe_name":"mpi","function_name":"MPI_Win_create_errhandler"},"7603":{"probe_name":"mpi","function_name":"MPI_Win_create_keyval"},"7604":{"probe_name":"mpi","function_name":"MPI_Win_delete_attr"},"7605":{"probe_name":"mpi","function_name":"MPI_Win_detach"},"7606":{"probe_name":"mpi","function_name":"MPI_Win_f2c"},"7607":{"probe_name":"mpi","function_name":"MPI_Win_fence"},"7608":{"probe_name":"mpi","function_name":"MPI_Win_flush"},"7609":{"probe_name":"mpi","function_name":"MPI_Win_flush_all"},"7610":{"probe_name":"mpi","function_name":"MPI_Win_flush_local"},"7611":{"probe_name":"mpi","function_name":"MPI_Win_flush_local_all"},"7612":{"probe_name":"mpi","function_name":"MPI_Win_free"},"7613":{"probe_name":"mpi","function_name":"MPI_Win_free_keyval"},"7614":{"probe_name":"mpi","function_name":"MPI_Win_get_attr"},"7615":{"probe_name":"mpi","function_name":"MPI_Win_get_errhandler"},"7616":{"probe_name":"mpi","function_name":"MPI_Win_get_group"},"7617":{"probe_name":"mpi","function_name":"MPI_Win_get_info"},"7618":{"probe_name":"mpi","function_name":"MPI_Win_get_name"},"7619":{"probe_name":"mpi","function_name":"MPI_Win_lock"},"7620":{"probe_name":"mpi","function_name":"MPI_Win_lock_all"},"7621":{"probe_name":"mpi","function_name":"MPI_Win_post"},"7622":{"probe_name":"mpi","function_name":"MPI_Win_set_attr"},"7623":{"probe_name":"mpi","function_name":"MPI_Win_set_errhandler"},"7624":{"probe_name":"mpi","function_name":"MPI_Win_set_info"},"7625":{"probe_name":"mpi","function_name":"MPI_Win_set_name"},"7626":{"probe_name":"mpi","function_name":"MPI_Win_shared_query"},"7627":{"probe_name":"mpi","function_name":"MPI_Win_start"},"7628":{"probe_name":"mpi","function_name":"MPI_Win_sync"},"7629":{"probe_name":"mpi","function_name":"MPI_Win_test"},"7630":{"probe_name":"mpi","function_name":"MPI_Win_unlock"},"7631":{"probe_name":"mpi","function_name":"MPI_Win_unlock_all"},"7632":{"probe_name":"mpi","function_name":"MPI_Win_wait"},"7633":{"probe_name":"mpi","function_name":"MPI_Wtick"},"7634":{"probe_name":"mpi","function_name":"MPI_Wtime"},"7635":{"probe_name":"mpi","function_name":"NBC_Comm_neighbors"},"7636":{"probe_name":"mpi","function_name":"NBC_Comm_neighbors_count"},"7637":{"probe_name":"mpi","function_name":"NBC_Error"},"7638":{"probe_name":"mpi","function_name":"NBC_Error.constprop.0:0x12d820"},"7639":{"probe_name":"mpi","function_name":"NBC_Error.constprop.0:0x12e380"},"7640":{"probe_name":"mpi","function_name":"NBC_Error.constprop.0:0x12ee10"},"7641":{"probe_name":"mpi","function_name":"NBC_Error.constprop.0:0x130de0"},"7642":{"probe_name":"mpi","function_name":"NBC_Error.constprop.0:0x138c20"},"7643":{"probe_name":"mpi","function_name":"NBC_Error.constprop.0:0x13a930"},"7644":{"probe_name":"mpi","function_name":"NBC_Error.constprop.0:0x13bee0"},"7645":{"probe_name":"mpi","function_name":"NBC_Init_comm"},"7646":{"probe_name":"mpi","function_name":"NBC_Progress"},"7647":{"probe_name":"mpi","function_name":"NBC_Return_handle"},"7648":{"probe_name":"mpi","function_name":"NBC_Sched_barrier"},"7649":{"probe_name":"mpi","function_name":"NBC_Sched_commit"},"7650":{"probe_name":"mpi","function_name":"NBC_Sched_copy"},"7651":{"probe_name":"mpi","function_name":"NBC_Sched_local_recv"},"7652":{"probe_name":"mpi","function_name":"NBC_Sched_local_send"},"7653":{"probe_name":"mpi","function_name":"NBC_Sched_op"},"7654":{"probe_name":"mpi","function_name":"NBC_Sched_recv"},"7655":{"probe_name":"mpi","function_name":"NBC_Sched_send"},"7656":{"probe_name":"mpi","function_name":"NBC_Sched_unpack"},"7657":{"probe_name":"mpi","function_name":"NBC_Schedule_request"},"7658":{"probe_name":"mpi","function_name":"NBC_Start"},"7659":{"probe_name":"mpi","function_name":"NBC_Start_round"},"7660":{"probe_name":"mpi","function_name":"OMPI_Affinity_str"},"7661":{"probe_name":"mpi","function_name":"OMPI_Affinity_str.cold"},"7662":{"probe_name":"mpi","function_name":"OMPI_C_MPI_COMM_DUP_FN"},"7663":{"probe_name":"mpi","function_name":"OMPI_C_MPI_COMM_NULL_COPY_FN"},"7664":{"probe_name":"mpi","function_name":"OMPI_C_MPI_COMM_NULL_DELETE_FN"},"7665":{"probe_name":"mpi","function_name":"OMPI_C_MPI_DUP_FN"},"7666":{"probe_name":"mpi","function_name":"OMPI_C_MPI_NULL_COPY_FN"},"7667":{"probe_name":"mpi","function_name":"OMPI_C_MPI_NULL_DELETE_FN"},"7668":{"probe_name":"mpi","function_name":"OMPI_C_MPI_TYPE_DUP_FN"},"7669":{"probe_name":"mpi","function_name":"OMPI_C_MPI_TYPE_NULL_COPY_FN"},"7670":{"probe_name":"mpi","function_name":"OMPI_C_MPI_TYPE_NULL_DELETE_FN"},"7671":{"probe_name":"mpi","function_name":"OMPI_C_MPI_WIN_DUP_FN"},"7672":{"probe_name":"mpi","function_name":"OMPI_C_MPI_WIN_NULL_COPY_FN"},"7673":{"probe_name":"mpi","function_name":"OMPI_C_MPI_WIN_NULL_DELETE_FN"},"7674":{"probe_name":"mpi","function_name":"OMPI_TEST_FORTRAN_CONSTANTS"},"7675":{"probe_name":"mpi","function_name":"PMPIX_Comm_ack_failed"},"7676":{"probe_name":"mpi","function_name":"PMPIX_Comm_ack_failed.cold"},"7677":{"probe_name":"mpi","function_name":"PMPIX_Comm_agree"},"7678":{"probe_name":"mpi","function_name":"PMPIX_Comm_agree.cold"},"7679":{"probe_name":"mpi","function_name":"PMPIX_Comm_failure_ack"},"7680":{"probe_name":"mpi","function_name":"PMPIX_Comm_failure_ack.cold"},"7681":{"probe_name":"mpi","function_name":"PMPIX_Comm_failure_get_acked"},"7682":{"probe_name":"mpi","function_name":"PMPIX_Comm_failure_get_acked.cold"},"7683":{"probe_name":"mpi","function_name":"PMPIX_Comm_get_failed"},"7684":{"probe_name":"mpi","function_name":"PMPIX_Comm_get_failed.cold"},"7685":{"probe_name":"mpi","function_name":"PMPIX_Comm_iagree"},"7686":{"probe_name":"mpi","function_name":"PMPIX_Comm_iagree.cold"},"7687":{"probe_name":"mpi","function_name":"PMPIX_Comm_is_revoked"},"7688":{"probe_name":"mpi","function_name":"PMPIX_Comm_revoke"},"7689":{"probe_name":"mpi","function_name":"PMPIX_Comm_revoke.cold"},"7690":{"probe_name":"mpi","function_name":"PMPIX_Comm_shrink"},"7691":{"probe_name":"mpi","function_name":"PMPIX_Comm_shrink.cold"},"7692":{"probe_name":"mpi","function_name":"PMPI_Abort"},"7693":{"probe_name":"mpi","function_name":"PMPI_Accumulate"},"7694":{"probe_name":"mpi","function_name":"PMPI_Accumulate.cold"},"7695":{"probe_name":"mpi","function_name":"PMPI_Add_error_class"},"7696":{"probe_name":"mpi","function_name":"PMPI_Add_error_class.cold"},"7697":{"probe_name":"mpi","function_name":"PMPI_Add_error_code"},"7698":{"probe_name":"mpi","function_name":"PMPI_Add_error_code.cold"},"7699":{"probe_name":"mpi","function_name":"PMPI_Add_error_string"},"7700":{"probe_name":"mpi","function_name":"PMPI_Address"},"7701":{"probe_name":"mpi","function_name":"PMPI_Allgather"},"7702":{"probe_name":"mpi","function_name":"PMPI_Allgather.cold"},"7703":{"probe_name":"mpi","function_name":"PMPI_Allgather_init"},"7704":{"probe_name":"mpi","function_name":"PMPI_Allgather_init.cold"},"7705":{"probe_name":"mpi","function_name":"PMPI_Allgatherv"},"7706":{"probe_name":"mpi","function_name":"PMPI_Allgatherv.cold"},"7707":{"probe_name":"mpi","function_name":"PMPI_Allgatherv_init"},"7708":{"probe_name":"mpi","function_name":"PMPI_Allgatherv_init.cold"},"7709":{"probe_name":"mpi","function_name":"PMPI_Alloc_mem"},"7710":{"probe_name":"mpi","function_name":"PMPI_Allreduce"},"7711":{"probe_name":"mpi","function_name":"PMPI_Allreduce.cold"},"7712":{"probe_name":"mpi","function_name":"PMPI_Allreduce_init"},"7713":{"probe_name":"mpi","function_name":"PMPI_Allreduce_init.cold"},"7714":{"probe_name":"mpi","function_name":"PMPI_Alltoall"},"7715":{"probe_name":"mpi","function_name":"PMPI_Alltoall.cold"},"7716":{"probe_name":"mpi","function_name":"PMPI_Alltoall_init"},"7717":{"probe_name":"mpi","function_name":"PMPI_Alltoall_init.cold"},"7718":{"probe_name":"mpi","function_name":"PMPI_Alltoallv"},"7719":{"probe_name":"mpi","function_name":"PMPI_Alltoallv.cold"},"7720":{"probe_name":"mpi","function_name":"PMPI_Alltoallv_init"},"7721":{"probe_name":"mpi","function_name":"PMPI_Alltoallv_init.cold"},"7722":{"probe_name":"mpi","function_name":"PMPI_Alltoallw"},"7723":{"probe_name":"mpi","function_name":"PMPI_Alltoallw.cold"},"7724":{"probe_name":"mpi","function_name":"PMPI_Alltoallw_init"},"7725":{"probe_name":"mpi","function_name":"PMPI_Alltoallw_init.cold"},"7726":{"probe_name":"mpi","function_name":"PMPI_Attr_delete"},"7727":{"probe_name":"mpi","function_name":"PMPI_Attr_get"},"7728":{"probe_name":"mpi","function_name":"PMPI_Attr_get.cold"},"7729":{"probe_name":"mpi","function_name":"PMPI_Attr_put"},"7730":{"probe_name":"mpi","function_name":"PMPI_Barrier"},"7731":{"probe_name":"mpi","function_name":"PMPI_Barrier.cold"},"7732":{"probe_name":"mpi","function_name":"PMPI_Barrier_init"},"7733":{"probe_name":"mpi","function_name":"PMPI_Barrier_init.cold"},"7734":{"probe_name":"mpi","function_name":"PMPI_Bcast"},"7735":{"probe_name":"mpi","function_name":"PMPI_Bcast.cold"},"7736":{"probe_name":"mpi","function_name":"PMPI_Bcast_init"},"7737":{"probe_name":"mpi","function_name":"PMPI_Bcast_init.cold"},"7738":{"probe_name":"mpi","function_name":"PMPI_Bsend"},"7739":{"probe_name":"mpi","function_name":"PMPI_Bsend.cold"},"7740":{"probe_name":"mpi","function_name":"PMPI_Bsend_init"},"7741":{"probe_name":"mpi","function_name":"PMPI_Bsend_init.cold"},"7742":{"probe_name":"mpi","function_name":"PMPI_Buffer_attach"},"7743":{"probe_name":"mpi","function_name":"PMPI_Buffer_detach"},"7744":{"probe_name":"mpi","function_name":"PMPI_Cancel"},"7745":{"probe_name":"mpi","function_name":"PMPI_Cancel.cold"},"7746":{"probe_name":"mpi","function_name":"PMPI_Cart_coords"},"7747":{"probe_name":"mpi","function_name":"PMPI_Cart_coords.cold"},"7748":{"probe_name":"mpi","function_name":"PMPI_Cart_create"},"7749":{"probe_name":"mpi","function_name":"PMPI_Cart_create.cold"},"7750":{"probe_name":"mpi","function_name":"PMPI_Cart_get"},"7751":{"probe_name":"mpi","function_name":"PMPI_Cart_get.cold"},"7752":{"probe_name":"mpi","function_name":"PMPI_Cart_map"},"7753":{"probe_name":"mpi","function_name":"PMPI_Cart_map.cold"},"7754":{"probe_name":"mpi","function_name":"PMPI_Cart_rank"},"7755":{"probe_name":"mpi","function_name":"PMPI_Cart_rank.cold"},"7756":{"probe_name":"mpi","function_name":"PMPI_Cart_shift"},"7757":{"probe_name":"mpi","function_name":"PMPI_Cart_shift.cold"},"7758":{"probe_name":"mpi","function_name":"PMPI_Cart_sub"},"7759":{"probe_name":"mpi","function_name":"PMPI_Cart_sub.cold"},"7760":{"probe_name":"mpi","function_name":"PMPI_Cartdim_get"},"7761":{"probe_name":"mpi","function_name":"PMPI_Cartdim_get.cold"},"7762":{"probe_name":"mpi","function_name":"PMPI_Close_port"},"7763":{"probe_name":"mpi","function_name":"PMPI_Close_port.cold"},"7764":{"probe_name":"mpi","function_name":"PMPI_Comm_accept"},"7765":{"probe_name":"mpi","function_name":"PMPI_Comm_accept.cold"},"7766":{"probe_name":"mpi","function_name":"PMPI_Comm_c2f"},"7767":{"probe_name":"mpi","function_name":"PMPI_Comm_call_errhandler"},"7768":{"probe_name":"mpi","function_name":"PMPI_Comm_call_errhandler.cold"},"7769":{"probe_name":"mpi","function_name":"PMPI_Comm_compare"},"7770":{"probe_name":"mpi","function_name":"PMPI_Comm_compare.cold"},"7771":{"probe_name":"mpi","function_name":"PMPI_Comm_connect"},"7772":{"probe_name":"mpi","function_name":"PMPI_Comm_connect.cold"},"7773":{"probe_name":"mpi","function_name":"PMPI_Comm_create"},"7774":{"probe_name":"mpi","function_name":"PMPI_Comm_create.cold"},"7775":{"probe_name":"mpi","function_name":"PMPI_Comm_create_errhandler"},"7776":{"probe_name":"mpi","function_name":"PMPI_Comm_create_from_group"},"7777":{"probe_name":"mpi","function_name":"PMPI_Comm_create_group"},"7778":{"probe_name":"mpi","function_name":"PMPI_Comm_create_group.cold"},"7779":{"probe_name":"mpi","function_name":"PMPI_Comm_create_keyval"},"7780":{"probe_name":"mpi","function_name":"PMPI_Comm_delete_attr"},"7781":{"probe_name":"mpi","function_name":"PMPI_Comm_disconnect"},"7782":{"probe_name":"mpi","function_name":"PMPI_Comm_dup"},"7783":{"probe_name":"mpi","function_name":"PMPI_Comm_dup.cold"},"7784":{"probe_name":"mpi","function_name":"PMPI_Comm_dup_with_info"},"7785":{"probe_name":"mpi","function_name":"PMPI_Comm_dup_with_info.cold"},"7786":{"probe_name":"mpi","function_name":"PMPI_Comm_f2c"},"7787":{"probe_name":"mpi","function_name":"PMPI_Comm_free"},"7788":{"probe_name":"mpi","function_name":"PMPI_Comm_free.cold"},"7789":{"probe_name":"mpi","function_name":"PMPI_Comm_free_keyval"},"7790":{"probe_name":"mpi","function_name":"PMPI_Comm_get_attr"},"7791":{"probe_name":"mpi","function_name":"PMPI_Comm_get_errhandler"},"7792":{"probe_name":"mpi","function_name":"PMPI_Comm_get_info"},"7793":{"probe_name":"mpi","function_name":"PMPI_Comm_get_name"},"7794":{"probe_name":"mpi","function_name":"PMPI_Comm_get_parent"},"7795":{"probe_name":"mpi","function_name":"PMPI_Comm_group"},"7796":{"probe_name":"mpi","function_name":"PMPI_Comm_group.cold"},"7797":{"probe_name":"mpi","function_name":"PMPI_Comm_idup"},"7798":{"probe_name":"mpi","function_name":"PMPI_Comm_idup.cold"},"7799":{"probe_name":"mpi","function_name":"PMPI_Comm_idup_with_info"},"7800":{"probe_name":"mpi","function_name":"PMPI_Comm_idup_with_info.cold"},"7801":{"probe_name":"mpi","function_name":"PMPI_Comm_join"},"7802":{"probe_name":"mpi","function_name":"PMPI_Comm_join.cold"},"7803":{"probe_name":"mpi","function_name":"PMPI_Comm_rank"},"7804":{"probe_name":"mpi","function_name":"PMPI_Comm_remote_group"},"7805":{"probe_name":"mpi","function_name":"PMPI_Comm_remote_size"},"7806":{"probe_name":"mpi","function_name":"PMPI_Comm_set_attr"},"7807":{"probe_name":"mpi","function_name":"PMPI_Comm_set_errhandler"},"7808":{"probe_name":"mpi","function_name":"PMPI_Comm_set_info"},"7809":{"probe_name":"mpi","function_name":"PMPI_Comm_set_name"},"7810":{"probe_name":"mpi","function_name":"PMPI_Comm_set_name.cold"},"7811":{"probe_name":"mpi","function_name":"PMPI_Comm_size"},"7812":{"probe_name":"mpi","function_name":"PMPI_Comm_spawn"},"7813":{"probe_name":"mpi","function_name":"PMPI_Comm_spawn.cold"},"7814":{"probe_name":"mpi","function_name":"PMPI_Comm_spawn_multiple"},"7815":{"probe_name":"mpi","function_name":"PMPI_Comm_spawn_multiple.cold"},"7816":{"probe_name":"mpi","function_name":"PMPI_Comm_split"},"7817":{"probe_name":"mpi","function_name":"PMPI_Comm_split.cold"},"7818":{"probe_name":"mpi","function_name":"PMPI_Comm_split_type"},"7819":{"probe_name":"mpi","function_name":"PMPI_Comm_split_type.cold"},"7820":{"probe_name":"mpi","function_name":"PMPI_Comm_test_inter"},"7821":{"probe_name":"mpi","function_name":"PMPI_Compare_and_swap"},"7822":{"probe_name":"mpi","function_name":"PMPI_Compare_and_swap.cold"},"7823":{"probe_name":"mpi","function_name":"PMPI_Dims_create"},"7824":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_create"},"7825":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_create.cold"},"7826":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_create_adjacent"},"7827":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_create_adjacent.cold"},"7828":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_neighbors"},"7829":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_neighbors.cold"},"7830":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_neighbors_count"},"7831":{"probe_name":"mpi","function_name":"PMPI_Dist_graph_neighbors_count.cold"},"7832":{"probe_name":"mpi","function_name":"PMPI_Errhandler_c2f"},"7833":{"probe_name":"mpi","function_name":"PMPI_Errhandler_create"},"7834":{"probe_name":"mpi","function_name":"PMPI_Errhandler_f2c"},"7835":{"probe_name":"mpi","function_name":"PMPI_Errhandler_free"},"7836":{"probe_name":"mpi","function_name":"PMPI_Errhandler_get"},"7837":{"probe_name":"mpi","function_name":"PMPI_Errhandler_set"},"7838":{"probe_name":"mpi","function_name":"PMPI_Error_class"},"7839":{"probe_name":"mpi","function_name":"PMPI_Error_class.cold"},"7840":{"probe_name":"mpi","function_name":"PMPI_Error_string"},"7841":{"probe_name":"mpi","function_name":"PMPI_Error_string.cold"},"7842":{"probe_name":"mpi","function_name":"PMPI_Exscan"},"7843":{"probe_name":"mpi","function_name":"PMPI_Exscan.cold"},"7844":{"probe_name":"mpi","function_name":"PMPI_Exscan_init"},"7845":{"probe_name":"mpi","function_name":"PMPI_Exscan_init.cold"},"7846":{"probe_name":"mpi","function_name":"PMPI_Fetch_and_op"},"7847":{"probe_name":"mpi","function_name":"PMPI_Fetch_and_op.cold"},"7848":{"probe_name":"mpi","function_name":"PMPI_File_c2f"},"7849":{"probe_name":"mpi","function_name":"PMPI_File_call_errhandler"},"7850":{"probe_name":"mpi","function_name":"PMPI_File_call_errhandler.cold"},"7851":{"probe_name":"mpi","function_name":"PMPI_File_close"},"7852":{"probe_name":"mpi","function_name":"PMPI_File_close.cold"},"7853":{"probe_name":"mpi","function_name":"PMPI_File_create_errhandler"},"7854":{"probe_name":"mpi","function_name":"PMPI_File_delete"},"7855":{"probe_name":"mpi","function_name":"PMPI_File_delete.cold"},"7856":{"probe_name":"mpi","function_name":"PMPI_File_f2c"},"7857":{"probe_name":"mpi","function_name":"PMPI_File_get_amode"},"7858":{"probe_name":"mpi","function_name":"PMPI_File_get_amode.cold"},"7859":{"probe_name":"mpi","function_name":"PMPI_File_get_atomicity"},"7860":{"probe_name":"mpi","function_name":"PMPI_File_get_atomicity.cold"},"7861":{"probe_name":"mpi","function_name":"PMPI_File_get_byte_offset"},"7862":{"probe_name":"mpi","function_name":"PMPI_File_get_byte_offset.cold"},"7863":{"probe_name":"mpi","function_name":"PMPI_File_get_errhandler"},"7864":{"probe_name":"mpi","function_name":"PMPI_File_get_group"},"7865":{"probe_name":"mpi","function_name":"PMPI_File_get_group.cold"},"7866":{"probe_name":"mpi","function_name":"PMPI_File_get_info"},"7867":{"probe_name":"mpi","function_name":"PMPI_File_get_info.cold"},"7868":{"probe_name":"mpi","function_name":"PMPI_File_get_position"},"7869":{"probe_name":"mpi","function_name":"PMPI_File_get_position.cold"},"7870":{"probe_name":"mpi","function_name":"PMPI_File_get_position_shared"},"7871":{"probe_name":"mpi","function_name":"PMPI_File_get_position_shared.cold"},"7872":{"probe_name":"mpi","function_name":"PMPI_File_get_size"},"7873":{"probe_name":"mpi","function_name":"PMPI_File_get_size.cold"},"7874":{"probe_name":"mpi","function_name":"PMPI_File_get_type_extent"},"7875":{"probe_name":"mpi","function_name":"PMPI_File_get_type_extent.cold"},"7876":{"probe_name":"mpi","function_name":"PMPI_File_get_view"},"7877":{"probe_name":"mpi","function_name":"PMPI_File_get_view.cold"},"7878":{"probe_name":"mpi","function_name":"PMPI_File_iread"},"7879":{"probe_name":"mpi","function_name":"PMPI_File_iread.cold"},"7880":{"probe_name":"mpi","function_name":"PMPI_File_iread_all"},"7881":{"probe_name":"mpi","function_name":"PMPI_File_iread_all.cold"},"7882":{"probe_name":"mpi","function_name":"PMPI_File_iread_at"},"7883":{"probe_name":"mpi","function_name":"PMPI_File_iread_at.cold"},"7884":{"probe_name":"mpi","function_name":"PMPI_File_iread_at_all"},"7885":{"probe_name":"mpi","function_name":"PMPI_File_iread_at_all.cold"},"7886":{"probe_name":"mpi","function_name":"PMPI_File_iread_shared"},"7887":{"probe_name":"mpi","function_name":"PMPI_File_iread_shared.cold"},"7888":{"probe_name":"mpi","function_name":"PMPI_File_iwrite"},"7889":{"probe_name":"mpi","function_name":"PMPI_File_iwrite.cold"},"7890":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_all"},"7891":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_all.cold"},"7892":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_at"},"7893":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_at.cold"},"7894":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_at_all"},"7895":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_at_all.cold"},"7896":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_shared"},"7897":{"probe_name":"mpi","function_name":"PMPI_File_iwrite_shared.cold"},"7898":{"probe_name":"mpi","function_name":"PMPI_File_open"},"7899":{"probe_name":"mpi","function_name":"PMPI_File_open.cold"},"7900":{"probe_name":"mpi","function_name":"PMPI_File_preallocate"},"7901":{"probe_name":"mpi","function_name":"PMPI_File_preallocate.cold"},"7902":{"probe_name":"mpi","function_name":"PMPI_File_read"},"7903":{"probe_name":"mpi","function_name":"PMPI_File_read.cold"},"7904":{"probe_name":"mpi","function_name":"PMPI_File_read_all"},"7905":{"probe_name":"mpi","function_name":"PMPI_File_read_all.cold"},"7906":{"probe_name":"mpi","function_name":"PMPI_File_read_all_begin"},"7907":{"probe_name":"mpi","function_name":"PMPI_File_read_all_begin.cold"},"7908":{"probe_name":"mpi","function_name":"PMPI_File_read_all_end"},"7909":{"probe_name":"mpi","function_name":"PMPI_File_read_all_end.cold"},"7910":{"probe_name":"mpi","function_name":"PMPI_File_read_at"},"7911":{"probe_name":"mpi","function_name":"PMPI_File_read_at.cold"},"7912":{"probe_name":"mpi","function_name":"PMPI_File_read_at_all"},"7913":{"probe_name":"mpi","function_name":"PMPI_File_read_at_all.cold"},"7914":{"probe_name":"mpi","function_name":"PMPI_File_read_at_all_begin"},"7915":{"probe_name":"mpi","function_name":"PMPI_File_read_at_all_begin.cold"},"7916":{"probe_name":"mpi","function_name":"PMPI_File_read_at_all_end"},"7917":{"probe_name":"mpi","function_name":"PMPI_File_read_at_all_end.cold"},"7918":{"probe_name":"mpi","function_name":"PMPI_File_read_ordered"},"7919":{"probe_name":"mpi","function_name":"PMPI_File_read_ordered.cold"},"7920":{"probe_name":"mpi","function_name":"PMPI_File_read_ordered_begin"},"7921":{"probe_name":"mpi","function_name":"PMPI_File_read_ordered_begin.cold"},"7922":{"probe_name":"mpi","function_name":"PMPI_File_read_ordered_end"},"7923":{"probe_name":"mpi","function_name":"PMPI_File_read_ordered_end.cold"},"7924":{"probe_name":"mpi","function_name":"PMPI_File_read_shared"},"7925":{"probe_name":"mpi","function_name":"PMPI_File_read_shared.cold"},"7926":{"probe_name":"mpi","function_name":"PMPI_File_seek"},"7927":{"probe_name":"mpi","function_name":"PMPI_File_seek.cold"},"7928":{"probe_name":"mpi","function_name":"PMPI_File_seek_shared"},"7929":{"probe_name":"mpi","function_name":"PMPI_File_seek_shared.cold"},"7930":{"probe_name":"mpi","function_name":"PMPI_File_set_atomicity"},"7931":{"probe_name":"mpi","function_name":"PMPI_File_set_atomicity.cold"},"7932":{"probe_name":"mpi","function_name":"PMPI_File_set_errhandler"},"7933":{"probe_name":"mpi","function_name":"PMPI_File_set_info"},"7934":{"probe_name":"mpi","function_name":"PMPI_File_set_info.cold"},"7935":{"probe_name":"mpi","function_name":"PMPI_File_set_size"},"7936":{"probe_name":"mpi","function_name":"PMPI_File_set_size.cold"},"7937":{"probe_name":"mpi","function_name":"PMPI_File_set_view"},"7938":{"probe_name":"mpi","function_name":"PMPI_File_set_view.cold"},"7939":{"probe_name":"mpi","function_name":"PMPI_File_sync"},"7940":{"probe_name":"mpi","function_name":"PMPI_File_sync.cold"},"7941":{"probe_name":"mpi","function_name":"PMPI_File_write"},"7942":{"probe_name":"mpi","function_name":"PMPI_File_write.cold"},"7943":{"probe_name":"mpi","function_name":"PMPI_File_write_all"},"7944":{"probe_name":"mpi","function_name":"PMPI_File_write_all.cold"},"7945":{"probe_name":"mpi","function_name":"PMPI_File_write_all_begin"},"7946":{"probe_name":"mpi","function_name":"PMPI_File_write_all_begin.cold"},"7947":{"probe_name":"mpi","function_name":"PMPI_File_write_all_end"},"7948":{"probe_name":"mpi","function_name":"PMPI_File_write_all_end.cold"},"7949":{"probe_name":"mpi","function_name":"PMPI_File_write_at"},"7950":{"probe_name":"mpi","function_name":"PMPI_File_write_at.cold"},"7951":{"probe_name":"mpi","function_name":"PMPI_File_write_at_all"},"7952":{"probe_name":"mpi","function_name":"PMPI_File_write_at_all.cold"},"7953":{"probe_name":"mpi","function_name":"PMPI_File_write_at_all_begin"},"7954":{"probe_name":"mpi","function_name":"PMPI_File_write_at_all_begin.cold"},"7955":{"probe_name":"mpi","function_name":"PMPI_File_write_at_all_end"},"7956":{"probe_name":"mpi","function_name":"PMPI_File_write_at_all_end.cold"},"7957":{"probe_name":"mpi","function_name":"PMPI_File_write_ordered"},"7958":{"probe_name":"mpi","function_name":"PMPI_File_write_ordered.cold"},"7959":{"probe_name":"mpi","function_name":"PMPI_File_write_ordered_begin"},"7960":{"probe_name":"mpi","function_name":"PMPI_File_write_ordered_begin.cold"},"7961":{"probe_name":"mpi","function_name":"PMPI_File_write_ordered_end"},"7962":{"probe_name":"mpi","function_name":"PMPI_File_write_ordered_end.cold"},"7963":{"probe_name":"mpi","function_name":"PMPI_File_write_shared"},"7964":{"probe_name":"mpi","function_name":"PMPI_File_write_shared.cold"},"7965":{"probe_name":"mpi","function_name":"PMPI_Finalize"},"7966":{"probe_name":"mpi","function_name":"PMPI_Finalized"},"7967":{"probe_name":"mpi","function_name":"PMPI_Free_mem"},"7968":{"probe_name":"mpi","function_name":"PMPI_Gather"},"7969":{"probe_name":"mpi","function_name":"PMPI_Gather.cold"},"7970":{"probe_name":"mpi","function_name":"PMPI_Gather_init"},"7971":{"probe_name":"mpi","function_name":"PMPI_Gather_init.cold"},"7972":{"probe_name":"mpi","function_name":"PMPI_Gatherv"},"7973":{"probe_name":"mpi","function_name":"PMPI_Gatherv.cold"},"7974":{"probe_name":"mpi","function_name":"PMPI_Gatherv_init"},"7975":{"probe_name":"mpi","function_name":"PMPI_Gatherv_init.cold"},"7976":{"probe_name":"mpi","function_name":"PMPI_Get"},"7977":{"probe_name":"mpi","function_name":"PMPI_Get.cold"},"7978":{"probe_name":"mpi","function_name":"PMPI_Get_accumulate"},"7979":{"probe_name":"mpi","function_name":"PMPI_Get_accumulate.cold"},"7980":{"probe_name":"mpi","function_name":"PMPI_Get_address"},"7981":{"probe_name":"mpi","function_name":"PMPI_Get_count"},"7982":{"probe_name":"mpi","function_name":"PMPI_Get_elements"},"7983":{"probe_name":"mpi","function_name":"PMPI_Get_elements_x"},"7984":{"probe_name":"mpi","function_name":"PMPI_Get_library_version"},"7985":{"probe_name":"mpi","function_name":"PMPI_Get_processor_name"},"7986":{"probe_name":"mpi","function_name":"PMPI_Get_version"},"7987":{"probe_name":"mpi","function_name":"PMPI_Graph_create"},"7988":{"probe_name":"mpi","function_name":"PMPI_Graph_create.cold"},"7989":{"probe_name":"mpi","function_name":"PMPI_Graph_get"},"7990":{"probe_name":"mpi","function_name":"PMPI_Graph_get.cold"},"7991":{"probe_name":"mpi","function_name":"PMPI_Graph_map"},"7992":{"probe_name":"mpi","function_name":"PMPI_Graph_map.cold"},"7993":{"probe_name":"mpi","function_name":"PMPI_Graph_neighbors"},"7994":{"probe_name":"mpi","function_name":"PMPI_Graph_neighbors.cold"},"7995":{"probe_name":"mpi","function_name":"PMPI_Graph_neighbors_count"},"7996":{"probe_name":"mpi","function_name":"PMPI_Graph_neighbors_count.cold"},"7997":{"probe_name":"mpi","function_name":"PMPI_Graphdims_get"},"7998":{"probe_name":"mpi","function_name":"PMPI_Graphdims_get.cold"},"7999":{"probe_name":"mpi","function_name":"PMPI_Grequest_complete"},"8000":{"probe_name":"mpi","function_name":"PMPI_Grequest_start"},"8001":{"probe_name":"mpi","function_name":"PMPI_Grequest_start.cold"},"8002":{"probe_name":"mpi","function_name":"PMPI_Group_c2f"},"8003":{"probe_name":"mpi","function_name":"PMPI_Group_compare"},"8004":{"probe_name":"mpi","function_name":"PMPI_Group_difference"},"8005":{"probe_name":"mpi","function_name":"PMPI_Group_difference.cold"},"8006":{"probe_name":"mpi","function_name":"PMPI_Group_excl"},"8007":{"probe_name":"mpi","function_name":"PMPI_Group_excl.cold"},"8008":{"probe_name":"mpi","function_name":"PMPI_Group_f2c"},"8009":{"probe_name":"mpi","function_name":"PMPI_Group_free"},"8010":{"probe_name":"mpi","function_name":"PMPI_Group_free.cold"},"8011":{"probe_name":"mpi","function_name":"PMPI_Group_from_session_pset"},"8012":{"probe_name":"mpi","function_name":"PMPI_Group_from_session_pset.cold"},"8013":{"probe_name":"mpi","function_name":"PMPI_Group_incl"},"8014":{"probe_name":"mpi","function_name":"PMPI_Group_incl.cold"},"8015":{"probe_name":"mpi","function_name":"PMPI_Group_intersection"},"8016":{"probe_name":"mpi","function_name":"PMPI_Group_intersection.cold"},"8017":{"probe_name":"mpi","function_name":"PMPI_Group_range_excl"},"8018":{"probe_name":"mpi","function_name":"PMPI_Group_range_excl.cold"},"8019":{"probe_name":"mpi","function_name":"PMPI_Group_range_incl"},"8020":{"probe_name":"mpi","function_name":"PMPI_Group_range_incl.cold"},"8021":{"probe_name":"mpi","function_name":"PMPI_Group_rank"},"8022":{"probe_name":"mpi","function_name":"PMPI_Group_size"},"8023":{"probe_name":"mpi","function_name":"PMPI_Group_translate_ranks"},"8024":{"probe_name":"mpi","function_name":"PMPI_Group_translate_ranks.cold"},"8025":{"probe_name":"mpi","function_name":"PMPI_Group_union"},"8026":{"probe_name":"mpi","function_name":"PMPI_Group_union.cold"},"8027":{"probe_name":"mpi","function_name":"PMPI_Iallgather"},"8028":{"probe_name":"mpi","function_name":"PMPI_Iallgather.cold"},"8029":{"probe_name":"mpi","function_name":"PMPI_Iallgatherv"},"8030":{"probe_name":"mpi","function_name":"PMPI_Iallgatherv.cold"},"8031":{"probe_name":"mpi","function_name":"PMPI_Iallreduce"},"8032":{"probe_name":"mpi","function_name":"PMPI_Iallreduce.cold"},"8033":{"probe_name":"mpi","function_name":"PMPI_Ialltoall"},"8034":{"probe_name":"mpi","function_name":"PMPI_Ialltoall.cold"},"8035":{"probe_name":"mpi","function_name":"PMPI_Ialltoallv"},"8036":{"probe_name":"mpi","function_name":"PMPI_Ialltoallv.cold"},"8037":{"probe_name":"mpi","function_name":"PMPI_Ialltoallw"},"8038":{"probe_name":"mpi","function_name":"PMPI_Ialltoallw.cold"},"8039":{"probe_name":"mpi","function_name":"PMPI_Ibarrier"},"8040":{"probe_name":"mpi","function_name":"PMPI_Ibarrier.cold"},"8041":{"probe_name":"mpi","function_name":"PMPI_Ibcast"},"8042":{"probe_name":"mpi","function_name":"PMPI_Ibcast.cold"},"8043":{"probe_name":"mpi","function_name":"PMPI_Ibsend"},"8044":{"probe_name":"mpi","function_name":"PMPI_Ibsend.cold"},"8045":{"probe_name":"mpi","function_name":"PMPI_Iexscan"},"8046":{"probe_name":"mpi","function_name":"PMPI_Iexscan.cold"},"8047":{"probe_name":"mpi","function_name":"PMPI_Igather"},"8048":{"probe_name":"mpi","function_name":"PMPI_Igather.cold"},"8049":{"probe_name":"mpi","function_name":"PMPI_Igatherv"},"8050":{"probe_name":"mpi","function_name":"PMPI_Igatherv.cold"},"8051":{"probe_name":"mpi","function_name":"PMPI_Improbe"},"8052":{"probe_name":"mpi","function_name":"PMPI_Improbe.cold"},"8053":{"probe_name":"mpi","function_name":"PMPI_Imrecv"},"8054":{"probe_name":"mpi","function_name":"PMPI_Imrecv.cold"},"8055":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_allgather"},"8056":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_allgather.cold"},"8057":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_allgatherv"},"8058":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_allgatherv.cold"},"8059":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_alltoall"},"8060":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_alltoall.cold"},"8061":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_alltoallv"},"8062":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_alltoallv.cold"},"8063":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_alltoallw"},"8064":{"probe_name":"mpi","function_name":"PMPI_Ineighbor_alltoallw.cold"},"8065":{"probe_name":"mpi","function_name":"PMPI_Info_c2f"},"8066":{"probe_name":"mpi","function_name":"PMPI_Info_create"},"8067":{"probe_name":"mpi","function_name":"PMPI_Info_create_env"},"8068":{"probe_name":"mpi","function_name":"PMPI_Info_create_env.cold"},"8069":{"probe_name":"mpi","function_name":"PMPI_Info_delete"},"8070":{"probe_name":"mpi","function_name":"PMPI_Info_delete.cold"},"8071":{"probe_name":"mpi","function_name":"PMPI_Info_dup"},"8072":{"probe_name":"mpi","function_name":"PMPI_Info_dup.cold"},"8073":{"probe_name":"mpi","function_name":"PMPI_Info_f2c"},"8074":{"probe_name":"mpi","function_name":"PMPI_Info_free"},"8075":{"probe_name":"mpi","function_name":"PMPI_Info_free.cold"},"8076":{"probe_name":"mpi","function_name":"PMPI_Info_get"},"8077":{"probe_name":"mpi","function_name":"PMPI_Info_get.cold"},"8078":{"probe_name":"mpi","function_name":"PMPI_Info_get_nkeys"},"8079":{"probe_name":"mpi","function_name":"PMPI_Info_get_nkeys.cold"},"8080":{"probe_name":"mpi","function_name":"PMPI_Info_get_nthkey"},"8081":{"probe_name":"mpi","function_name":"PMPI_Info_get_nthkey.cold"},"8082":{"probe_name":"mpi","function_name":"PMPI_Info_get_string"},"8083":{"probe_name":"mpi","function_name":"PMPI_Info_get_string.cold"},"8084":{"probe_name":"mpi","function_name":"PMPI_Info_get_valuelen"},"8085":{"probe_name":"mpi","function_name":"PMPI_Info_get_valuelen.cold"},"8086":{"probe_name":"mpi","function_name":"PMPI_Info_set"},"8087":{"probe_name":"mpi","function_name":"PMPI_Info_set.cold"},"8088":{"probe_name":"mpi","function_name":"PMPI_Init"},"8089":{"probe_name":"mpi","function_name":"PMPI_Init.cold"},"8090":{"probe_name":"mpi","function_name":"PMPI_Init_thread"},"8091":{"probe_name":"mpi","function_name":"PMPI_Init_thread.cold"},"8092":{"probe_name":"mpi","function_name":"PMPI_Initialized"},"8093":{"probe_name":"mpi","function_name":"PMPI_Intercomm_create"},"8094":{"probe_name":"mpi","function_name":"PMPI_Intercomm_create.cold"},"8095":{"probe_name":"mpi","function_name":"PMPI_Intercomm_create_from_groups"},"8096":{"probe_name":"mpi","function_name":"PMPI_Intercomm_merge"},"8097":{"probe_name":"mpi","function_name":"PMPI_Intercomm_merge.cold"},"8098":{"probe_name":"mpi","function_name":"PMPI_Iprobe"},"8099":{"probe_name":"mpi","function_name":"PMPI_Iprobe.cold"},"8100":{"probe_name":"mpi","function_name":"PMPI_Irecv"},"8101":{"probe_name":"mpi","function_name":"PMPI_Irecv.cold"},"8102":{"probe_name":"mpi","function_name":"PMPI_Ireduce"},"8103":{"probe_name":"mpi","function_name":"PMPI_Ireduce.cold"},"8104":{"probe_name":"mpi","function_name":"PMPI_Ireduce_scatter"},"8105":{"probe_name":"mpi","function_name":"PMPI_Ireduce_scatter.cold"},"8106":{"probe_name":"mpi","function_name":"PMPI_Ireduce_scatter_block"},"8107":{"probe_name":"mpi","function_name":"PMPI_Ireduce_scatter_block.cold"},"8108":{"probe_name":"mpi","function_name":"PMPI_Irsend"},"8109":{"probe_name":"mpi","function_name":"PMPI_Irsend.cold"},"8110":{"probe_name":"mpi","function_name":"PMPI_Is_thread_main"},"8111":{"probe_name":"mpi","function_name":"PMPI_Iscan"},"8112":{"probe_name":"mpi","function_name":"PMPI_Iscan.cold"},"8113":{"probe_name":"mpi","function_name":"PMPI_Iscatter"},"8114":{"probe_name":"mpi","function_name":"PMPI_Iscatter.cold"},"8115":{"probe_name":"mpi","function_name":"PMPI_Iscatterv"},"8116":{"probe_name":"mpi","function_name":"PMPI_Iscatterv.cold"},"8117":{"probe_name":"mpi","function_name":"PMPI_Isend"},"8118":{"probe_name":"mpi","function_name":"PMPI_Isend.cold"},"8119":{"probe_name":"mpi","function_name":"PMPI_Isendrecv"},"8120":{"probe_name":"mpi","function_name":"PMPI_Isendrecv.cold"},"8121":{"probe_name":"mpi","function_name":"PMPI_Isendrecv_replace"},"8122":{"probe_name":"mpi","function_name":"PMPI_Isendrecv_replace.cold"},"8123":{"probe_name":"mpi","function_name":"PMPI_Issend"},"8124":{"probe_name":"mpi","function_name":"PMPI_Issend.cold"},"8125":{"probe_name":"mpi","function_name":"PMPI_Keyval_create"},"8126":{"probe_name":"mpi","function_name":"PMPI_Keyval_free"},"8127":{"probe_name":"mpi","function_name":"PMPI_Lookup_name"},"8128":{"probe_name":"mpi","function_name":"PMPI_Lookup_name.cold"},"8129":{"probe_name":"mpi","function_name":"PMPI_Message_c2f"},"8130":{"probe_name":"mpi","function_name":"PMPI_Message_f2c"},"8131":{"probe_name":"mpi","function_name":"PMPI_Mprobe"},"8132":{"probe_name":"mpi","function_name":"PMPI_Mprobe.cold"},"8133":{"probe_name":"mpi","function_name":"PMPI_Mrecv"},"8134":{"probe_name":"mpi","function_name":"PMPI_Mrecv.cold"},"8135":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgather"},"8136":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgather.cold"},"8137":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgather_init"},"8138":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgather_init.cold"},"8139":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgatherv"},"8140":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgatherv.cold"},"8141":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgatherv_init"},"8142":{"probe_name":"mpi","function_name":"PMPI_Neighbor_allgatherv_init.cold"},"8143":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoall"},"8144":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoall.cold"},"8145":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoall_init"},"8146":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoall_init.cold"},"8147":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallv"},"8148":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallv.cold"},"8149":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallv_init"},"8150":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallv_init.cold"},"8151":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallw"},"8152":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallw.cold"},"8153":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallw_init"},"8154":{"probe_name":"mpi","function_name":"PMPI_Neighbor_alltoallw_init.cold"},"8155":{"probe_name":"mpi","function_name":"PMPI_Op_c2f"},"8156":{"probe_name":"mpi","function_name":"PMPI_Op_commutative"},"8157":{"probe_name":"mpi","function_name":"PMPI_Op_create"},"8158":{"probe_name":"mpi","function_name":"PMPI_Op_f2c"},"8159":{"probe_name":"mpi","function_name":"PMPI_Op_free"},"8160":{"probe_name":"mpi","function_name":"PMPI_Open_port"},"8161":{"probe_name":"mpi","function_name":"PMPI_Open_port.cold"},"8162":{"probe_name":"mpi","function_name":"PMPI_Pack"},"8163":{"probe_name":"mpi","function_name":"PMPI_Pack.cold"},"8164":{"probe_name":"mpi","function_name":"PMPI_Pack_external"},"8165":{"probe_name":"mpi","function_name":"PMPI_Pack_external.cold"},"8166":{"probe_name":"mpi","function_name":"PMPI_Pack_external_size"},"8167":{"probe_name":"mpi","function_name":"PMPI_Pack_external_size.cold"},"8168":{"probe_name":"mpi","function_name":"PMPI_Pack_size"},"8169":{"probe_name":"mpi","function_name":"PMPI_Parrived"},"8170":{"probe_name":"mpi","function_name":"PMPI_Parrived.cold"},"8171":{"probe_name":"mpi","function_name":"PMPI_Pcontrol"},"8172":{"probe_name":"mpi","function_name":"PMPI_Pready"},"8173":{"probe_name":"mpi","function_name":"PMPI_Pready.cold"},"8174":{"probe_name":"mpi","function_name":"PMPI_Pready_list"},"8175":{"probe_name":"mpi","function_name":"PMPI_Pready_list.cold"},"8176":{"probe_name":"mpi","function_name":"PMPI_Pready_range"},"8177":{"probe_name":"mpi","function_name":"PMPI_Pready_range.cold"},"8178":{"probe_name":"mpi","function_name":"PMPI_Precv_init"},"8179":{"probe_name":"mpi","function_name":"PMPI_Precv_init.cold"},"8180":{"probe_name":"mpi","function_name":"PMPI_Probe"},"8181":{"probe_name":"mpi","function_name":"PMPI_Probe.cold"},"8182":{"probe_name":"mpi","function_name":"PMPI_Psend_init"},"8183":{"probe_name":"mpi","function_name":"PMPI_Psend_init.cold"},"8184":{"probe_name":"mpi","function_name":"PMPI_Publish_name"},"8185":{"probe_name":"mpi","function_name":"PMPI_Publish_name.cold"},"8186":{"probe_name":"mpi","function_name":"PMPI_Put"},"8187":{"probe_name":"mpi","function_name":"PMPI_Put.cold"},"8188":{"probe_name":"mpi","function_name":"PMPI_Query_thread"},"8189":{"probe_name":"mpi","function_name":"PMPI_Raccumulate"},"8190":{"probe_name":"mpi","function_name":"PMPI_Raccumulate.cold"},"8191":{"probe_name":"mpi","function_name":"PMPI_Recv"},"8192":{"probe_name":"mpi","function_name":"PMPI_Recv.cold"},"8193":{"probe_name":"mpi","function_name":"PMPI_Recv_init"},"8194":{"probe_name":"mpi","function_name":"PMPI_Recv_init.cold"},"8195":{"probe_name":"mpi","function_name":"PMPI_Reduce"},"8196":{"probe_name":"mpi","function_name":"PMPI_Reduce.cold"},"8197":{"probe_name":"mpi","function_name":"PMPI_Reduce_init"},"8198":{"probe_name":"mpi","function_name":"PMPI_Reduce_init.cold"},"8199":{"probe_name":"mpi","function_name":"PMPI_Reduce_local"},"8200":{"probe_name":"mpi","function_name":"PMPI_Reduce_local.cold"},"8201":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter"},"8202":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter.cold"},"8203":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter_block"},"8204":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter_block.cold"},"8205":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter_block_init"},"8206":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter_block_init.cold"},"8207":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter_init"},"8208":{"probe_name":"mpi","function_name":"PMPI_Reduce_scatter_init.cold"},"8209":{"probe_name":"mpi","function_name":"PMPI_Register_datarep"},"8210":{"probe_name":"mpi","function_name":"PMPI_Register_datarep.cold"},"8211":{"probe_name":"mpi","function_name":"PMPI_Request_c2f"},"8212":{"probe_name":"mpi","function_name":"PMPI_Request_f2c"},"8213":{"probe_name":"mpi","function_name":"PMPI_Request_free"},"8214":{"probe_name":"mpi","function_name":"PMPI_Request_free.cold"},"8215":{"probe_name":"mpi","function_name":"PMPI_Request_get_status"},"8216":{"probe_name":"mpi","function_name":"PMPI_Rget"},"8217":{"probe_name":"mpi","function_name":"PMPI_Rget.cold"},"8218":{"probe_name":"mpi","function_name":"PMPI_Rget_accumulate"},"8219":{"probe_name":"mpi","function_name":"PMPI_Rget_accumulate.cold"},"8220":{"probe_name":"mpi","function_name":"PMPI_Rput"},"8221":{"probe_name":"mpi","function_name":"PMPI_Rput.cold"},"8222":{"probe_name":"mpi","function_name":"PMPI_Rsend"},"8223":{"probe_name":"mpi","function_name":"PMPI_Rsend.cold"},"8224":{"probe_name":"mpi","function_name":"PMPI_Rsend_init"},"8225":{"probe_name":"mpi","function_name":"PMPI_Rsend_init.cold"},"8226":{"probe_name":"mpi","function_name":"PMPI_Scan"},"8227":{"probe_name":"mpi","function_name":"PMPI_Scan.cold"},"8228":{"probe_name":"mpi","function_name":"PMPI_Scan_init"},"8229":{"probe_name":"mpi","function_name":"PMPI_Scan_init.cold"},"8230":{"probe_name":"mpi","function_name":"PMPI_Scatter"},"8231":{"probe_name":"mpi","function_name":"PMPI_Scatter.cold"},"8232":{"probe_name":"mpi","function_name":"PMPI_Scatter_init"},"8233":{"probe_name":"mpi","function_name":"PMPI_Scatter_init.cold"},"8234":{"probe_name":"mpi","function_name":"PMPI_Scatterv"},"8235":{"probe_name":"mpi","function_name":"PMPI_Scatterv.cold"},"8236":{"probe_name":"mpi","function_name":"PMPI_Scatterv_init"},"8237":{"probe_name":"mpi","function_name":"PMPI_Scatterv_init.cold"},"8238":{"probe_name":"mpi","function_name":"PMPI_Send"},"8239":{"probe_name":"mpi","function_name":"PMPI_Send.cold"},"8240":{"probe_name":"mpi","function_name":"PMPI_Send_init"},"8241":{"probe_name":"mpi","function_name":"PMPI_Send_init.cold"},"8242":{"probe_name":"mpi","function_name":"PMPI_Sendrecv"},"8243":{"probe_name":"mpi","function_name":"PMPI_Sendrecv.cold"},"8244":{"probe_name":"mpi","function_name":"PMPI_Sendrecv_replace"},"8245":{"probe_name":"mpi","function_name":"PMPI_Sendrecv_replace.cold"},"8246":{"probe_name":"mpi","function_name":"PMPI_Session_c2f"},"8247":{"probe_name":"mpi","function_name":"PMPI_Session_call_errhandler"},"8248":{"probe_name":"mpi","function_name":"PMPI_Session_call_errhandler.cold"},"8249":{"probe_name":"mpi","function_name":"PMPI_Session_create_errhandler"},"8250":{"probe_name":"mpi","function_name":"PMPI_Session_f2c"},"8251":{"probe_name":"mpi","function_name":"PMPI_Session_finalize"},"8252":{"probe_name":"mpi","function_name":"PMPI_Session_finalize.cold"},"8253":{"probe_name":"mpi","function_name":"PMPI_Session_get_errhandler"},"8254":{"probe_name":"mpi","function_name":"PMPI_Session_get_errhandler.cold"},"8255":{"probe_name":"mpi","function_name":"PMPI_Session_get_info"},"8256":{"probe_name":"mpi","function_name":"PMPI_Session_get_nth_pset"},"8257":{"probe_name":"mpi","function_name":"PMPI_Session_get_nth_pset.cold"},"8258":{"probe_name":"mpi","function_name":"PMPI_Session_get_num_psets"},"8259":{"probe_name":"mpi","function_name":"PMPI_Session_get_num_psets.cold"},"8260":{"probe_name":"mpi","function_name":"PMPI_Session_get_pset_info"},"8261":{"probe_name":"mpi","function_name":"PMPI_Session_get_pset_info.cold"},"8262":{"probe_name":"mpi","function_name":"PMPI_Session_init"},"8263":{"probe_name":"mpi","function_name":"PMPI_Session_init.cold"},"8264":{"probe_name":"mpi","function_name":"PMPI_Session_set_errhandler"},"8265":{"probe_name":"mpi","function_name":"PMPI_Session_set_info"},"8266":{"probe_name":"mpi","function_name":"PMPI_Ssend"},"8267":{"probe_name":"mpi","function_name":"PMPI_Ssend.cold"},"8268":{"probe_name":"mpi","function_name":"PMPI_Ssend_init"},"8269":{"probe_name":"mpi","function_name":"PMPI_Ssend_init.cold"},"8270":{"probe_name":"mpi","function_name":"PMPI_Start"},"8271":{"probe_name":"mpi","function_name":"PMPI_Start.cold"},"8272":{"probe_name":"mpi","function_name":"PMPI_Startall"},"8273":{"probe_name":"mpi","function_name":"PMPI_Status_c2f"},"8274":{"probe_name":"mpi","function_name":"PMPI_Status_c2f08"},"8275":{"probe_name":"mpi","function_name":"PMPI_Status_f082c"},"8276":{"probe_name":"mpi","function_name":"PMPI_Status_f082f"},"8277":{"probe_name":"mpi","function_name":"PMPI_Status_f2c"},"8278":{"probe_name":"mpi","function_name":"PMPI_Status_f2f08"},"8279":{"probe_name":"mpi","function_name":"PMPI_Status_set_cancelled"},"8280":{"probe_name":"mpi","function_name":"PMPI_Status_set_elements"},"8281":{"probe_name":"mpi","function_name":"PMPI_Status_set_elements_x"},"8282":{"probe_name":"mpi","function_name":"PMPI_T_category_changed"},"8283":{"probe_name":"mpi","function_name":"PMPI_T_category_get_categories"},"8284":{"probe_name":"mpi","function_name":"PMPI_T_category_get_cvars"},"8285":{"probe_name":"mpi","function_name":"PMPI_T_category_get_index"},"8286":{"probe_name":"mpi","function_name":"PMPI_T_category_get_info"},"8287":{"probe_name":"mpi","function_name":"PMPI_T_category_get_num"},"8288":{"probe_name":"mpi","function_name":"PMPI_T_category_get_pvars"},"8289":{"probe_name":"mpi","function_name":"PMPI_T_cvar_get_index"},"8290":{"probe_name":"mpi","function_name":"PMPI_T_cvar_get_info"},"8291":{"probe_name":"mpi","function_name":"PMPI_T_cvar_get_num"},"8292":{"probe_name":"mpi","function_name":"PMPI_T_cvar_handle_alloc"},"8293":{"probe_name":"mpi","function_name":"PMPI_T_cvar_handle_free"},"8294":{"probe_name":"mpi","function_name":"PMPI_T_cvar_read"},"8295":{"probe_name":"mpi","function_name":"PMPI_T_cvar_write"},"8296":{"probe_name":"mpi","function_name":"PMPI_T_enum_get_info"},"8297":{"probe_name":"mpi","function_name":"PMPI_T_enum_get_item"},"8298":{"probe_name":"mpi","function_name":"PMPI_T_finalize"},"8299":{"probe_name":"mpi","function_name":"PMPI_T_init_thread"},"8300":{"probe_name":"mpi","function_name":"PMPI_T_pvar_get_index"},"8301":{"probe_name":"mpi","function_name":"PMPI_T_pvar_get_info"},"8302":{"probe_name":"mpi","function_name":"PMPI_T_pvar_get_num"},"8303":{"probe_name":"mpi","function_name":"PMPI_T_pvar_handle_alloc"},"8304":{"probe_name":"mpi","function_name":"PMPI_T_pvar_handle_free"},"8305":{"probe_name":"mpi","function_name":"PMPI_T_pvar_read"},"8306":{"probe_name":"mpi","function_name":"PMPI_T_pvar_readreset"},"8307":{"probe_name":"mpi","function_name":"PMPI_T_pvar_reset"},"8308":{"probe_name":"mpi","function_name":"PMPI_T_pvar_session_create"},"8309":{"probe_name":"mpi","function_name":"PMPI_T_pvar_session_free"},"8310":{"probe_name":"mpi","function_name":"PMPI_T_pvar_start"},"8311":{"probe_name":"mpi","function_name":"PMPI_T_pvar_stop"},"8312":{"probe_name":"mpi","function_name":"PMPI_T_pvar_write"},"8313":{"probe_name":"mpi","function_name":"PMPI_Test"},"8314":{"probe_name":"mpi","function_name":"PMPI_Test_cancelled"},"8315":{"probe_name":"mpi","function_name":"PMPI_Testall"},"8316":{"probe_name":"mpi","function_name":"PMPI_Testany"},"8317":{"probe_name":"mpi","function_name":"PMPI_Testsome"},"8318":{"probe_name":"mpi","function_name":"PMPI_Topo_test"},"8319":{"probe_name":"mpi","function_name":"PMPI_Type_c2f"},"8320":{"probe_name":"mpi","function_name":"PMPI_Type_commit"},"8321":{"probe_name":"mpi","function_name":"PMPI_Type_commit.cold"},"8322":{"probe_name":"mpi","function_name":"PMPI_Type_contiguous"},"8323":{"probe_name":"mpi","function_name":"PMPI_Type_contiguous.cold"},"8324":{"probe_name":"mpi","function_name":"PMPI_Type_create_darray"},"8325":{"probe_name":"mpi","function_name":"PMPI_Type_create_darray.cold"},"8326":{"probe_name":"mpi","function_name":"PMPI_Type_create_f90_complex"},"8327":{"probe_name":"mpi","function_name":"PMPI_Type_create_f90_complex.cold"},"8328":{"probe_name":"mpi","function_name":"PMPI_Type_create_f90_integer"},"8329":{"probe_name":"mpi","function_name":"PMPI_Type_create_f90_integer.cold"},"8330":{"probe_name":"mpi","function_name":"PMPI_Type_create_f90_real"},"8331":{"probe_name":"mpi","function_name":"PMPI_Type_create_f90_real.cold"},"8332":{"probe_name":"mpi","function_name":"PMPI_Type_create_hindexed"},"8333":{"probe_name":"mpi","function_name":"PMPI_Type_create_hindexed.cold"},"8334":{"probe_name":"mpi","function_name":"PMPI_Type_create_hindexed_block"},"8335":{"probe_name":"mpi","function_name":"PMPI_Type_create_hindexed_block.cold"},"8336":{"probe_name":"mpi","function_name":"PMPI_Type_create_hvector"},"8337":{"probe_name":"mpi","function_name":"PMPI_Type_create_hvector.cold"},"8338":{"probe_name":"mpi","function_name":"PMPI_Type_create_indexed_block"},"8339":{"probe_name":"mpi","function_name":"PMPI_Type_create_indexed_block.cold"},"8340":{"probe_name":"mpi","function_name":"PMPI_Type_create_keyval"},"8341":{"probe_name":"mpi","function_name":"PMPI_Type_create_keyval.cold"},"8342":{"probe_name":"mpi","function_name":"PMPI_Type_create_resized"},"8343":{"probe_name":"mpi","function_name":"PMPI_Type_create_resized.cold"},"8344":{"probe_name":"mpi","function_name":"PMPI_Type_create_struct"},"8345":{"probe_name":"mpi","function_name":"PMPI_Type_create_struct.cold"},"8346":{"probe_name":"mpi","function_name":"PMPI_Type_create_subarray"},"8347":{"probe_name":"mpi","function_name":"PMPI_Type_create_subarray.cold"},"8348":{"probe_name":"mpi","function_name":"PMPI_Type_delete_attr"},"8349":{"probe_name":"mpi","function_name":"PMPI_Type_dup"},"8350":{"probe_name":"mpi","function_name":"PMPI_Type_dup.cold"},"8351":{"probe_name":"mpi","function_name":"PMPI_Type_extent"},"8352":{"probe_name":"mpi","function_name":"PMPI_Type_f2c"},"8353":{"probe_name":"mpi","function_name":"PMPI_Type_free"},"8354":{"probe_name":"mpi","function_name":"PMPI_Type_free_keyval"},"8355":{"probe_name":"mpi","function_name":"PMPI_Type_get_attr"},"8356":{"probe_name":"mpi","function_name":"PMPI_Type_get_contents"},"8357":{"probe_name":"mpi","function_name":"PMPI_Type_get_envelope"},"8358":{"probe_name":"mpi","function_name":"PMPI_Type_get_envelope.cold"},"8359":{"probe_name":"mpi","function_name":"PMPI_Type_get_extent"},"8360":{"probe_name":"mpi","function_name":"PMPI_Type_get_extent_x"},"8361":{"probe_name":"mpi","function_name":"PMPI_Type_get_name"},"8362":{"probe_name":"mpi","function_name":"PMPI_Type_get_true_extent"},"8363":{"probe_name":"mpi","function_name":"PMPI_Type_get_true_extent_x"},"8364":{"probe_name":"mpi","function_name":"PMPI_Type_hindexed"},"8365":{"probe_name":"mpi","function_name":"PMPI_Type_hvector"},"8366":{"probe_name":"mpi","function_name":"PMPI_Type_indexed"},"8367":{"probe_name":"mpi","function_name":"PMPI_Type_indexed.cold"},"8368":{"probe_name":"mpi","function_name":"PMPI_Type_lb"},"8369":{"probe_name":"mpi","function_name":"PMPI_Type_match_size"},"8370":{"probe_name":"mpi","function_name":"PMPI_Type_set_attr"},"8371":{"probe_name":"mpi","function_name":"PMPI_Type_set_name"},"8372":{"probe_name":"mpi","function_name":"PMPI_Type_size"},"8373":{"probe_name":"mpi","function_name":"PMPI_Type_size_x"},"8374":{"probe_name":"mpi","function_name":"PMPI_Type_struct"},"8375":{"probe_name":"mpi","function_name":"PMPI_Type_ub"},"8376":{"probe_name":"mpi","function_name":"PMPI_Type_vector"},"8377":{"probe_name":"mpi","function_name":"PMPI_Type_vector.cold"},"8378":{"probe_name":"mpi","function_name":"PMPI_Unpack"},"8379":{"probe_name":"mpi","function_name":"PMPI_Unpack.cold"},"8380":{"probe_name":"mpi","function_name":"PMPI_Unpack_external"},"8381":{"probe_name":"mpi","function_name":"PMPI_Unpack_external.cold"},"8382":{"probe_name":"mpi","function_name":"PMPI_Unpublish_name"},"8383":{"probe_name":"mpi","function_name":"PMPI_Unpublish_name.cold"},"8384":{"probe_name":"mpi","function_name":"PMPI_Wait"},"8385":{"probe_name":"mpi","function_name":"PMPI_Waitall"},"8386":{"probe_name":"mpi","function_name":"PMPI_Waitany"},"8387":{"probe_name":"mpi","function_name":"PMPI_Waitsome"},"8388":{"probe_name":"mpi","function_name":"PMPI_Win_allocate"},"8389":{"probe_name":"mpi","function_name":"PMPI_Win_allocate_shared"},"8390":{"probe_name":"mpi","function_name":"PMPI_Win_allocate_shared.cold"},"8391":{"probe_name":"mpi","function_name":"PMPI_Win_attach"},"8392":{"probe_name":"mpi","function_name":"PMPI_Win_attach.cold"},"8393":{"probe_name":"mpi","function_name":"PMPI_Win_c2f"},"8394":{"probe_name":"mpi","function_name":"PMPI_Win_call_errhandler"},"8395":{"probe_name":"mpi","function_name":"PMPI_Win_call_errhandler.cold"},"8396":{"probe_name":"mpi","function_name":"PMPI_Win_complete"},"8397":{"probe_name":"mpi","function_name":"PMPI_Win_complete.cold"},"8398":{"probe_name":"mpi","function_name":"PMPI_Win_create"},"8399":{"probe_name":"mpi","function_name":"PMPI_Win_create_dynamic"},"8400":{"probe_name":"mpi","function_name":"PMPI_Win_create_errhandler"},"8401":{"probe_name":"mpi","function_name":"PMPI_Win_create_keyval"},"8402":{"probe_name":"mpi","function_name":"PMPI_Win_delete_attr"},"8403":{"probe_name":"mpi","function_name":"PMPI_Win_detach"},"8404":{"probe_name":"mpi","function_name":"PMPI_Win_detach.cold"},"8405":{"probe_name":"mpi","function_name":"PMPI_Win_f2c"},"8406":{"probe_name":"mpi","function_name":"PMPI_Win_fence"},"8407":{"probe_name":"mpi","function_name":"PMPI_Win_fence.cold"},"8408":{"probe_name":"mpi","function_name":"PMPI_Win_flush"},"8409":{"probe_name":"mpi","function_name":"PMPI_Win_flush.cold"},"8410":{"probe_name":"mpi","function_name":"PMPI_Win_flush_all"},"8411":{"probe_name":"mpi","function_name":"PMPI_Win_flush_all.cold"},"8412":{"probe_name":"mpi","function_name":"PMPI_Win_flush_local"},"8413":{"probe_name":"mpi","function_name":"PMPI_Win_flush_local.cold"},"8414":{"probe_name":"mpi","function_name":"PMPI_Win_flush_local_all"},"8415":{"probe_name":"mpi","function_name":"PMPI_Win_flush_local_all.cold"},"8416":{"probe_name":"mpi","function_name":"PMPI_Win_free"},"8417":{"probe_name":"mpi","function_name":"PMPI_Win_free.cold"},"8418":{"probe_name":"mpi","function_name":"PMPI_Win_free_keyval"},"8419":{"probe_name":"mpi","function_name":"PMPI_Win_get_attr"},"8420":{"probe_name":"mpi","function_name":"PMPI_Win_get_errhandler"},"8421":{"probe_name":"mpi","function_name":"PMPI_Win_get_group"},"8422":{"probe_name":"mpi","function_name":"PMPI_Win_get_group.cold"},"8423":{"probe_name":"mpi","function_name":"PMPI_Win_get_info"},"8424":{"probe_name":"mpi","function_name":"PMPI_Win_get_info.cold"},"8425":{"probe_name":"mpi","function_name":"PMPI_Win_get_name"},"8426":{"probe_name":"mpi","function_name":"PMPI_Win_get_name.cold"},"8427":{"probe_name":"mpi","function_name":"PMPI_Win_lock"},"8428":{"probe_name":"mpi","function_name":"PMPI_Win_lock.cold"},"8429":{"probe_name":"mpi","function_name":"PMPI_Win_lock_all"},"8430":{"probe_name":"mpi","function_name":"PMPI_Win_lock_all.cold"},"8431":{"probe_name":"mpi","function_name":"PMPI_Win_post"},"8432":{"probe_name":"mpi","function_name":"PMPI_Win_post.cold"},"8433":{"probe_name":"mpi","function_name":"PMPI_Win_set_attr"},"8434":{"probe_name":"mpi","function_name":"PMPI_Win_set_errhandler"},"8435":{"probe_name":"mpi","function_name":"PMPI_Win_set_info"},"8436":{"probe_name":"mpi","function_name":"PMPI_Win_set_info.cold"},"8437":{"probe_name":"mpi","function_name":"PMPI_Win_set_name"},"8438":{"probe_name":"mpi","function_name":"PMPI_Win_set_name.cold"},"8439":{"probe_name":"mpi","function_name":"PMPI_Win_shared_query"},"8440":{"probe_name":"mpi","function_name":"PMPI_Win_shared_query.cold"},"8441":{"probe_name":"mpi","function_name":"PMPI_Win_start"},"8442":{"probe_name":"mpi","function_name":"PMPI_Win_start.cold"},"8443":{"probe_name":"mpi","function_name":"PMPI_Win_sync"},"8444":{"probe_name":"mpi","function_name":"PMPI_Win_sync.cold"},"8445":{"probe_name":"mpi","function_name":"PMPI_Win_test"},"8446":{"probe_name":"mpi","function_name":"PMPI_Win_test.cold"},"8447":{"probe_name":"mpi","function_name":"PMPI_Win_unlock"},"8448":{"probe_name":"mpi","function_name":"PMPI_Win_unlock.cold"},"8449":{"probe_name":"mpi","function_name":"PMPI_Win_unlock_all"},"8450":{"probe_name":"mpi","function_name":"PMPI_Win_unlock_all.cold"},"8451":{"probe_name":"mpi","function_name":"PMPI_Win_wait"},"8452":{"probe_name":"mpi","function_name":"PMPI_Win_wait.cold"},"8453":{"probe_name":"mpi","function_name":"PMPI_Wtick"},"8454":{"probe_name":"mpi","function_name":"PMPI_Wtime"},"8455":{"probe_name":"mpi","function_name":"PQ_adjustElementKey"},"8456":{"probe_name":"mpi","function_name":"PQ_adjustKey"},"8457":{"probe_name":"mpi","function_name":"PQ_decreaseElementKey"},"8458":{"probe_name":"mpi","function_name":"PQ_decreaseKey"},"8459":{"probe_name":"mpi","function_name":"PQ_delete"},"8460":{"probe_name":"mpi","function_name":"PQ_deleteElement"},"8461":{"probe_name":"mpi","function_name":"PQ_deleteMax"},"8462":{"probe_name":"mpi","function_name":"PQ_deleteMaxElement"},"8463":{"probe_name":"mpi","function_name":"PQ_exit"},"8464":{"probe_name":"mpi","function_name":"PQ_findMaxElement"},"8465":{"probe_name":"mpi","function_name":"PQ_findMaxKey"},"8466":{"probe_name":"mpi","function_name":"PQ_free"},"8467":{"probe_name":"mpi","function_name":"PQ_increaseElementKey"},"8468":{"probe_name":"mpi","function_name":"PQ_increaseKey"},"8469":{"probe_name":"mpi","function_name":"PQ_init"},"8470":{"probe_name":"mpi","function_name":"PQ_insert"},"8471":{"probe_name":"mpi","function_name":"PQ_insertElement"},"8472":{"probe_name":"mpi","function_name":"PQ_isEmpty"},"8473":{"probe_name":"mpi","function_name":"V_OUTPUT_ERR"},"8474":{"probe_name":"mpi","function_name":"__SENDER_BASED_METHOD_COPY"},"8475":{"probe_name":"mpi","function_name":"__do_global_dtors_aux"},"8476":{"probe_name":"mpi","function_name":"__muldc3"},"8477":{"probe_name":"mpi","function_name":"__mulsc3"},"8478":{"probe_name":"mpi","function_name":"__mulxc3"},"8479":{"probe_name":"mpi","function_name":"__ompi_datatype_allocate"},"8480":{"probe_name":"mpi","function_name":"__ompi_datatype_create_from_args"},"8481":{"probe_name":"mpi","function_name":"__ompi_datatype_create_from_packed_description.isra.0"},"8482":{"probe_name":"mpi","function_name":"__ompi_datatype_pack_description.isra.0"},"8483":{"probe_name":"mpi","function_name":"__ompi_datatype_release"},"8484":{"probe_name":"mpi","function_name":"_convert_process_name_to_string:0x84d30"},"8485":{"probe_name":"mpi","function_name":"_convert_process_name_to_string:0x88400"},"8486":{"probe_name":"mpi","function_name":"_convert_string_to_jobid"},"8487":{"probe_name":"mpi","function_name":"_convert_string_to_process_name:0x84b80"},"8488":{"probe_name":"mpi","function_name":"_convert_string_to_process_name:0x88410"},"8489":{"probe_name":"mpi","function_name":"_jobid_print_for_opal"},"8490":{"probe_name":"mpi","function_name":"_mca_topo_base_select.part.0"},"8491":{"probe_name":"mpi","function_name":"_process_name_compare:0x849c0"},"8492":{"probe_name":"mpi","function_name":"_process_name_compare:0x88420"},"8493":{"probe_name":"mpi","function_name":"_process_name_print_for_opal:0x84790"},"8494":{"probe_name":"mpi","function_name":"_process_name_print_for_opal:0x88450"},"8495":{"probe_name":"mpi","function_name":"_release_fn"},"8496":{"probe_name":"mpi","function_name":"_vpid_print_for_opal"},"8497":{"probe_name":"mpi","function_name":"adapt_close"},"8498":{"probe_name":"mpi","function_name":"adapt_constant_reduce_context_construct"},"8499":{"probe_name":"mpi","function_name":"adapt_constant_reduce_context_destruct"},"8500":{"probe_name":"mpi","function_name":"adapt_module_construct"},"8501":{"probe_name":"mpi","function_name":"adapt_module_destruct"},"8502":{"probe_name":"mpi","function_name":"adapt_module_enable"},"8503":{"probe_name":"mpi","function_name":"adapt_open"},"8504":{"probe_name":"mpi","function_name":"adapt_register"},"8505":{"probe_name":"mpi","function_name":"alloc_window"},"8506":{"probe_name":"mpi","function_name":"append_frag_to_list"},"8507":{"probe_name":"mpi","function_name":"attr_subsys_construct"},"8508":{"probe_name":"mpi","function_name":"attr_subsys_construct.cold"},"8509":{"probe_name":"mpi","function_name":"attr_subsys_destruct"},"8510":{"probe_name":"mpi","function_name":"attribute_key_value_construct"},"8511":{"probe_name":"mpi","function_name":"avail_coll_compare"},"8512":{"probe_name":"mpi","function_name":"avail_io_compare:0x179350"},"8513":{"probe_name":"mpi","function_name":"avail_io_compare:0x1799d0"},"8514":{"probe_name":"mpi","function_name":"avail_op_compare"},"8515":{"probe_name":"mpi","function_name":"avx_component_close"},"8516":{"probe_name":"mpi","function_name":"avx_component_init_query"},"8517":{"probe_name":"mpi","function_name":"avx_component_op_query"},"8518":{"probe_name":"mpi","function_name":"avx_component_open"},"8519":{"probe_name":"mpi","function_name":"avx_component_register"},"8520":{"probe_name":"mpi","function_name":"backend_abort_aggregate"},"8521":{"probe_name":"mpi","function_name":"backend_abort_no_aggregate"},"8522":{"probe_name":"mpi","function_name":"basic_register"},"8523":{"probe_name":"mpi","function_name":"block"},"8524":{"probe_name":"mpi","function_name":"bootstrap_comm"},"8525":{"probe_name":"mpi","function_name":"btl_bandwidth_compare"},"8526":{"probe_name":"mpi","function_name":"btl_exclusivity_compare"},"8527":{"probe_name":"mpi","function_name":"btl_latency_sort_fn"},"8528":{"probe_name":"mpi","function_name":"buffer_cleanup"},"8529":{"probe_name":"mpi","function_name":"build_level_topology"},"8530":{"probe_name":"mpi","function_name":"build_level_topology.cold"},"8531":{"probe_name":"mpi","function_name":"build_process_tab_id"},"8532":{"probe_name":"mpi","function_name":"check"},"8533":{"probe_name":"mpi","function_name":"check_file"},"8534":{"probe_name":"mpi","function_name":"check_one_component"},"8535":{"probe_name":"mpi","function_name":"close_component"},"8536":{"probe_name":"mpi","function_name":"coll_base_comm_construct"},"8537":{"probe_name":"mpi","function_name":"coll_base_comm_destruct"},"8538":{"probe_name":"mpi","function_name":"coll_base_module_construct"},"8539":{"probe_name":"mpi","function_name":"coll_base_module_destruct"},"8540":{"probe_name":"mpi","function_name":"comm_method_string"},"8541":{"probe_name":"mpi","function_name":"compFunc"},"8542":{"probe_name":"mpi","function_name":"compare_attr_sequence"},"8543":{"probe_name":"mpi","function_name":"compare_ints"},"8544":{"probe_name":"mpi","function_name":"compare_pmix_proc"},"8545":{"probe_name":"mpi","function_name":"compare_ranks:0x1da9b0"},"8546":{"probe_name":"mpi","function_name":"compare_ranks:0x1ea3b0"},"8547":{"probe_name":"mpi","function_name":"compare_uint16_ts"},"8548":{"probe_name":"mpi","function_name":"complete_objs_callback"},"8549":{"probe_name":"mpi","function_name":"complete_vecs_callback"},"8550":{"probe_name":"mpi","function_name":"component_finalize"},"8551":{"probe_name":"mpi","function_name":"component_init"},"8552":{"probe_name":"mpi","function_name":"component_open"},"8553":{"probe_name":"mpi","function_name":"component_query"},"8554":{"probe_name":"mpi","function_name":"component_register"},"8555":{"probe_name":"mpi","function_name":"component_select"},"8556":{"probe_name":"mpi","function_name":"compute_gain"},"8557":{"probe_name":"mpi","function_name":"config_window"},"8558":{"probe_name":"mpi","function_name":"construct_peers"},"8559":{"probe_name":"mpi","function_name":"cost_calc"},"8560":{"probe_name":"mpi","function_name":"create_comm"},"8561":{"probe_name":"mpi","function_name":"create_dumb_tree"},"8562":{"probe_name":"mpi","function_name":"create_threads"},"8563":{"probe_name":"mpi","function_name":"create_win"},"8564":{"probe_name":"mpi","function_name":"cset2mapstr.constprop.0"},"8565":{"probe_name":"mpi","function_name":"cset2str.constprop.0"},"8566":{"probe_name":"mpi","function_name":"datatype_duplicate.isra.0"},"8567":{"probe_name":"mpi","function_name":"dbl_cmp_inc"},"8568":{"probe_name":"mpi","function_name":"delete_group_list"},"8569":{"probe_name":"mpi","function_name":"delete_query"},"8570":{"probe_name":"mpi","function_name":"delete_select"},"8571":{"probe_name":"mpi","function_name":"depth_first"},"8572":{"probe_name":"mpi","function_name":"deregister_tm_clones"},"8573":{"probe_name":"mpi","function_name":"destruct_topology_cache"},"8574":{"probe_name":"mpi","function_name":"dfs"},"8575":{"probe_name":"mpi","function_name":"display_sol"},"8576":{"probe_name":"mpi","function_name":"distance"},"8577":{"probe_name":"mpi","function_name":"dpm_convert.constprop.0"},"8578":{"probe_name":"mpi","function_name":"dpm_convert.constprop.1"},"8579":{"probe_name":"mpi","function_name":"dynamic_gen2_register"},"8580":{"probe_name":"mpi","function_name":"dynamic_register"},"8581":{"probe_name":"mpi","function_name":"era_agreement_comm_specific_constructor"},"8582":{"probe_name":"mpi","function_name":"era_agreement_comm_specific_destructor"},"8583":{"probe_name":"mpi","function_name":"era_agreement_info_constructor"},"8584":{"probe_name":"mpi","function_name":"era_agreement_info_destructor"},"8585":{"probe_name":"mpi","function_name":"era_bounce_event_cb"},"8586":{"probe_name":"mpi","function_name":"era_cb_fn"},"8587":{"probe_name":"mpi","function_name":"era_cb_fn.cold"},"8588":{"probe_name":"mpi","function_name":"era_check_status"},"8589":{"probe_name":"mpi","function_name":"era_combine_agreement_values"},"8590":{"probe_name":"mpi","function_name":"era_combine_agreement_values.cold"},"8591":{"probe_name":"mpi","function_name":"era_create_agreement_info"},"8592":{"probe_name":"mpi","function_name":"era_create_agreement_info.cold"},"8593":{"probe_name":"mpi","function_name":"era_decide"},"8594":{"probe_name":"mpi","function_name":"era_error_event_cb"},"8595":{"probe_name":"mpi","function_name":"era_iagree_req_complete_cb"},"8596":{"probe_name":"mpi","function_name":"era_iagree_req_complete_cb.cold"},"8597":{"probe_name":"mpi","function_name":"era_iagree_req_free"},"8598":{"probe_name":"mpi","function_name":"era_mark_process_failed"},"8599":{"probe_name":"mpi","function_name":"era_merge_new_dead_list"},"8600":{"probe_name":"mpi","function_name":"era_next_child"},"8601":{"probe_name":"mpi","function_name":"era_on_comm_rank_failure"},"8602":{"probe_name":"mpi","function_name":"era_tree_fn_binary"},"8603":{"probe_name":"mpi","function_name":"era_tree_fn_star"},"8604":{"probe_name":"mpi","function_name":"era_tree_fn_string"},"8605":{"probe_name":"mpi","function_name":"era_tree_remove_node"},"8606":{"probe_name":"mpi","function_name":"era_update_return_value"},"8607":{"probe_name":"mpi","function_name":"era_value_constructor"},"8608":{"probe_name":"mpi","function_name":"era_value_destructor"},"8609":{"probe_name":"mpi","function_name":"evhandler_dereg_callbk"},"8610":{"probe_name":"mpi","function_name":"evhandler_reg_callbk:0x7c580"},"8611":{"probe_name":"mpi","function_name":"evhandler_reg_callbk:0x884c0"},"8612":{"probe_name":"mpi","function_name":"f1"},"8613":{"probe_name":"mpi","function_name":"f2"},"8614":{"probe_name":"mpi","function_name":"fast_group"},"8615":{"probe_name":"mpi","function_name":"fd_event_cb"},"8616":{"probe_name":"mpi","function_name":"fd_heartbeat_rdma_cb"},"8617":{"probe_name":"mpi","function_name":"fd_heartbeat_recv_cb"},"8618":{"probe_name":"mpi","function_name":"fd_heartbeat_request.isra.0"},"8619":{"probe_name":"mpi","function_name":"fd_heartbeat_request_cb"},"8620":{"probe_name":"mpi","function_name":"fd_heartbeat_send.isra.0"},"8621":{"probe_name":"mpi","function_name":"fd_progress"},"8622":{"probe_name":"mpi","function_name":"fence_cbfunc"},"8623":{"probe_name":"mpi","function_name":"fence_release:0x820f0"},"8624":{"probe_name":"mpi","function_name":"fence_release:0x884b0"},"8625":{"probe_name":"mpi","function_name":"file_constructor"},"8626":{"probe_name":"mpi","function_name":"file_destructor"},"8627":{"probe_name":"mpi","function_name":"file_query"},"8628":{"probe_name":"mpi","function_name":"file_unquery"},"8629":{"probe_name":"mpi","function_name":"fill_null_pointers"},"8630":{"probe_name":"mpi","function_name":"fragment_sent_cb"},"8631":{"probe_name":"mpi","function_name":"frame_dummy"},"8632":{"probe_name":"mpi","function_name":"free_constraint_tree"},"8633":{"probe_name":"mpi","function_name":"free_list_child"},"8634":{"probe_name":"mpi","function_name":"free_objs_callback"},"8635":{"probe_name":"mpi","function_name":"free_tab_child"},"8636":{"probe_name":"mpi","function_name":"free_vecs_callback"},"8637":{"probe_name":"mpi","function_name":"ftagree_close"},"8638":{"probe_name":"mpi","function_name":"ftagree_register"},"8639":{"probe_name":"mpi","function_name":"generate_random_sol.isra.0"},"8640":{"probe_name":"mpi","function_name":"generate_work_units.constprop.0"},"8641":{"probe_name":"mpi","function_name":"generate_work_units.part.0"},"8642":{"probe_name":"mpi","function_name":"get_algorithm"},"8643":{"probe_name":"mpi","function_name":"get_dynamic_rule"},"8644":{"probe_name":"mpi","function_name":"get_module"},"8645":{"probe_name":"mpi","function_name":"get_print_name_buffer"},"8646":{"probe_name":"mpi","function_name":"get_rsrc_exists"},"8647":{"probe_name":"mpi","function_name":"group_list_asc"},"8648":{"probe_name":"mpi","function_name":"group_list_dsc"},"8649":{"probe_name":"mpi","function_name":"group_list_id"},"8650":{"probe_name":"mpi","function_name":"han_close"},"8651":{"probe_name":"mpi","function_name":"han_module_enable"},"8652":{"probe_name":"mpi","function_name":"han_open"},"8653":{"probe_name":"mpi","function_name":"han_register"},"8654":{"probe_name":"mpi","function_name":"hash_asc"},"8655":{"probe_name":"mpi","function_name":"hb_itor_search"},"8656":{"probe_name":"mpi","function_name":"ibcast_request_fini.isra.0"},"8657":{"probe_name":"mpi","function_name":"icompar"},"8658":{"probe_name":"mpi","function_name":"individual_register:0x16eff0"},"8659":{"probe_name":"mpi","function_name":"individual_register:0x21a490"},"8660":{"probe_name":"mpi","function_name":"info_constructor"},"8661":{"probe_name":"mpi","function_name":"info_destructor"},"8662":{"probe_name":"mpi","function_name":"init_by_array"},"8663":{"probe_name":"mpi","function_name":"init_query:0x17b980"},"8664":{"probe_name":"mpi","function_name":"init_query:0x21f830"},"8665":{"probe_name":"mpi","function_name":"init_query:0x233dc0"},"8666":{"probe_name":"mpi","function_name":"inter_register"},"8667":{"probe_name":"mpi","function_name":"io_base_request_constructor"},"8668":{"probe_name":"mpi","function_name":"ireduce_request_fini.isra.0"},"8669":{"probe_name":"mpi","function_name":"kpartition_build_level_topology.isra.0"},"8670":{"probe_name":"mpi","function_name":"libnbc_close"},"8671":{"probe_name":"mpi","function_name":"libnbc_comm_query"},"8672":{"probe_name":"mpi","function_name":"libnbc_init_query"},"8673":{"probe_name":"mpi","function_name":"libnbc_module_construct"},"8674":{"probe_name":"mpi","function_name":"libnbc_module_destruct"},"8675":{"probe_name":"mpi","function_name":"libnbc_module_enable"},"8676":{"probe_name":"mpi","function_name":"libnbc_open"},"8677":{"probe_name":"mpi","function_name":"libnbc_register"},"8678":{"probe_name":"mpi","function_name":"list_all_possible_groups"},"8679":{"probe_name":"mpi","function_name":"list_all_possible_groups.cold"},"8680":{"probe_name":"mpi","function_name":"lockedfile_register"},"8681":{"probe_name":"mpi","function_name":"match_one"},"8682":{"probe_name":"mpi","function_name":"mca_bml_base_btl_array_construct"},"8683":{"probe_name":"mpi","function_name":"mca_bml_base_btl_array_destruct"},"8684":{"probe_name":"mpi","function_name":"mca_bml_base_btl_array_reserve"},"8685":{"probe_name":"mpi","function_name":"mca_bml_base_close"},"8686":{"probe_name":"mpi","function_name":"mca_bml_base_endpoint_construct"},"8687":{"probe_name":"mpi","function_name":"mca_bml_base_endpoint_destruct"},"8688":{"probe_name":"mpi","function_name":"mca_bml_base_init"},"8689":{"probe_name":"mpi","function_name":"mca_bml_base_inited"},"8690":{"probe_name":"mpi","function_name":"mca_bml_base_open"},"8691":{"probe_name":"mpi","function_name":"mca_bml_base_register"},"8692":{"probe_name":"mpi","function_name":"mca_bml_r2_add_btl"},"8693":{"probe_name":"mpi","function_name":"mca_bml_r2_add_btls"},"8694":{"probe_name":"mpi","function_name":"mca_bml_r2_add_proc"},"8695":{"probe_name":"mpi","function_name":"mca_bml_r2_add_procs"},"8696":{"probe_name":"mpi","function_name":"mca_bml_r2_allocate_endpoint"},"8697":{"probe_name":"mpi","function_name":"mca_bml_r2_component_close"},"8698":{"probe_name":"mpi","function_name":"mca_bml_r2_component_fini"},"8699":{"probe_name":"mpi","function_name":"mca_bml_r2_component_init"},"8700":{"probe_name":"mpi","function_name":"mca_bml_r2_component_open"},"8701":{"probe_name":"mpi","function_name":"mca_bml_r2_component_register"},"8702":{"probe_name":"mpi","function_name":"mca_bml_r2_compute_endpoint_metrics"},"8703":{"probe_name":"mpi","function_name":"mca_bml_r2_compute_endpoint_metrics.cold"},"8704":{"probe_name":"mpi","function_name":"mca_bml_r2_del_btl"},"8705":{"probe_name":"mpi","function_name":"mca_bml_r2_del_proc_btl"},"8706":{"probe_name":"mpi","function_name":"mca_bml_r2_del_procs"},"8707":{"probe_name":"mpi","function_name":"mca_bml_r2_del_procs.cold"},"8708":{"probe_name":"mpi","function_name":"mca_bml_r2_endpoint_add_btl"},"8709":{"probe_name":"mpi","function_name":"mca_bml_r2_finalize"},"8710":{"probe_name":"mpi","function_name":"mca_bml_r2_register"},"8711":{"probe_name":"mpi","function_name":"mca_bml_r2_register_error"},"8712":{"probe_name":"mpi","function_name":"mca_coll_base_alltoall_intra_basic_inplace"},"8713":{"probe_name":"mpi","function_name":"mca_coll_base_alltoallv_intra_basic_inplace"},"8714":{"probe_name":"mpi","function_name":"mca_coll_base_colltype_to_str"},"8715":{"probe_name":"mpi","function_name":"mca_coll_base_comm_select"},"8716":{"probe_name":"mpi","function_name":"mca_coll_base_comm_unselect"},"8717":{"probe_name":"mpi","function_name":"mca_coll_base_find_available"},"8718":{"probe_name":"mpi","function_name":"mca_coll_base_name_to_colltype"},"8719":{"probe_name":"mpi","function_name":"mca_coll_base_reduce_local"},"8720":{"probe_name":"mpi","function_name":"mca_coll_basic_allgather_inter"},"8721":{"probe_name":"mpi","function_name":"mca_coll_basic_allgatherv_inter"},"8722":{"probe_name":"mpi","function_name":"mca_coll_basic_allreduce_inter"},"8723":{"probe_name":"mpi","function_name":"mca_coll_basic_allreduce_intra"},"8724":{"probe_name":"mpi","function_name":"mca_coll_basic_alltoall_inter"},"8725":{"probe_name":"mpi","function_name":"mca_coll_basic_alltoallv_inter"},"8726":{"probe_name":"mpi","function_name":"mca_coll_basic_alltoallw_inter"},"8727":{"probe_name":"mpi","function_name":"mca_coll_basic_alltoallw_intra"},"8728":{"probe_name":"mpi","function_name":"mca_coll_basic_alltoallw_intra_inplace.constprop.0"},"8729":{"probe_name":"mpi","function_name":"mca_coll_basic_barrier_inter_lin"},"8730":{"probe_name":"mpi","function_name":"mca_coll_basic_barrier_intra_log"},"8731":{"probe_name":"mpi","function_name":"mca_coll_basic_bcast_lin_inter"},"8732":{"probe_name":"mpi","function_name":"mca_coll_basic_bcast_log_inter"},"8733":{"probe_name":"mpi","function_name":"mca_coll_basic_bcast_log_intra"},"8734":{"probe_name":"mpi","function_name":"mca_coll_basic_comm_query"},"8735":{"probe_name":"mpi","function_name":"mca_coll_basic_exscan_inter"},"8736":{"probe_name":"mpi","function_name":"mca_coll_basic_exscan_intra"},"8737":{"probe_name":"mpi","function_name":"mca_coll_basic_gather_inter"},"8738":{"probe_name":"mpi","function_name":"mca_coll_basic_gatherv_inter"},"8739":{"probe_name":"mpi","function_name":"mca_coll_basic_gatherv_intra"},"8740":{"probe_name":"mpi","function_name":"mca_coll_basic_init_query"},"8741":{"probe_name":"mpi","function_name":"mca_coll_basic_module_enable"},"8742":{"probe_name":"mpi","function_name":"mca_coll_basic_neighbor_allgather"},"8743":{"probe_name":"mpi","function_name":"mca_coll_basic_neighbor_allgatherv"},"8744":{"probe_name":"mpi","function_name":"mca_coll_basic_neighbor_alltoall"},"8745":{"probe_name":"mpi","function_name":"mca_coll_basic_neighbor_alltoallv"},"8746":{"probe_name":"mpi","function_name":"mca_coll_basic_neighbor_alltoallw"},"8747":{"probe_name":"mpi","function_name":"mca_coll_basic_reduce_lin_inter"},"8748":{"probe_name":"mpi","function_name":"mca_coll_basic_reduce_log_inter"},"8749":{"probe_name":"mpi","function_name":"mca_coll_basic_reduce_log_intra"},"8750":{"probe_name":"mpi","function_name":"mca_coll_basic_reduce_scatter_block_inter"},"8751":{"probe_name":"mpi","function_name":"mca_coll_basic_reduce_scatter_block_intra"},"8752":{"probe_name":"mpi","function_name":"mca_coll_basic_reduce_scatter_inter"},"8753":{"probe_name":"mpi","function_name":"mca_coll_basic_reduce_scatter_intra"},"8754":{"probe_name":"mpi","function_name":"mca_coll_basic_scan_intra"},"8755":{"probe_name":"mpi","function_name":"mca_coll_basic_scatter_inter"},"8756":{"probe_name":"mpi","function_name":"mca_coll_basic_scatterv_inter"},"8757":{"probe_name":"mpi","function_name":"mca_coll_basic_scatterv_intra"},"8758":{"probe_name":"mpi","function_name":"mca_coll_ftagree_comm_query"},"8759":{"probe_name":"mpi","function_name":"mca_coll_ftagree_construct"},"8760":{"probe_name":"mpi","function_name":"mca_coll_ftagree_era_comm_finalize"},"8761":{"probe_name":"mpi","function_name":"mca_coll_ftagree_era_comm_init"},"8762":{"probe_name":"mpi","function_name":"mca_coll_ftagree_era_finalize"},"8763":{"probe_name":"mpi","function_name":"mca_coll_ftagree_era_init"},"8764":{"probe_name":"mpi","function_name":"mca_coll_ftagree_era_inter"},"8765":{"probe_name":"mpi","function_name":"mca_coll_ftagree_era_intra"},"8766":{"probe_name":"mpi","function_name":"mca_coll_ftagree_eta_intra"},"8767":{"probe_name":"mpi","function_name":"mca_coll_ftagree_iera_intra"},"8768":{"probe_name":"mpi","function_name":"mca_coll_ftagree_iera_intra.cold"},"8769":{"probe_name":"mpi","function_name":"mca_coll_ftagree_init_query"},"8770":{"probe_name":"mpi","function_name":"mca_coll_ftagree_module_construct"},"8771":{"probe_name":"mpi","function_name":"mca_coll_ftagree_module_destruct"},"8772":{"probe_name":"mpi","function_name":"mca_coll_ftagree_module_enable"},"8773":{"probe_name":"mpi","function_name":"mca_coll_han_algorithm_id_is_valid"},"8774":{"probe_name":"mpi","function_name":"mca_coll_han_algorithm_id_to_fn"},"8775":{"probe_name":"mpi","function_name":"mca_coll_han_algorithm_id_to_name"},"8776":{"probe_name":"mpi","function_name":"mca_coll_han_algorithm_name_to_id"},"8777":{"probe_name":"mpi","function_name":"mca_coll_han_allgather_intra"},"8778":{"probe_name":"mpi","function_name":"mca_coll_han_allgather_intra_dynamic"},"8779":{"probe_name":"mpi","function_name":"mca_coll_han_allgather_intra_simple"},"8780":{"probe_name":"mpi","function_name":"mca_coll_han_allgather_lb_task"},"8781":{"probe_name":"mpi","function_name":"mca_coll_han_allgather_lg_task"},"8782":{"probe_name":"mpi","function_name":"mca_coll_han_allgather_uag_task"},"8783":{"probe_name":"mpi","function_name":"mca_coll_han_allgatherv_intra_dynamic"},"8784":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_intra"},"8785":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_intra_dynamic"},"8786":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_intra_simple"},"8787":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_reproducible"},"8788":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_reproducible_decision"},"8789":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_t0_task"},"8790":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_t1_task"},"8791":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_t2_task"},"8792":{"probe_name":"mpi","function_name":"mca_coll_han_allreduce_t3_task"},"8793":{"probe_name":"mpi","function_name":"mca_coll_han_barrier_intra_dynamic"},"8794":{"probe_name":"mpi","function_name":"mca_coll_han_barrier_intra_simple"},"8795":{"probe_name":"mpi","function_name":"mca_coll_han_bcast_intra"},"8796":{"probe_name":"mpi","function_name":"mca_coll_han_bcast_intra_dynamic"},"8797":{"probe_name":"mpi","function_name":"mca_coll_han_bcast_intra_simple"},"8798":{"probe_name":"mpi","function_name":"mca_coll_han_bcast_t0_task"},"8799":{"probe_name":"mpi","function_name":"mca_coll_han_bcast_t1_task"},"8800":{"probe_name":"mpi","function_name":"mca_coll_han_comm_create"},"8801":{"probe_name":"mpi","function_name":"mca_coll_han_comm_create_new"},"8802":{"probe_name":"mpi","function_name":"mca_coll_han_comm_query"},"8803":{"probe_name":"mpi","function_name":"mca_coll_han_component_name_to_id"},"8804":{"probe_name":"mpi","function_name":"mca_coll_han_dump_dynamic_rules"},"8805":{"probe_name":"mpi","function_name":"mca_coll_han_free_algorithms"},"8806":{"probe_name":"mpi","function_name":"mca_coll_han_free_dynamic_rules"},"8807":{"probe_name":"mpi","function_name":"mca_coll_han_gather_intra"},"8808":{"probe_name":"mpi","function_name":"mca_coll_han_gather_intra_dynamic"},"8809":{"probe_name":"mpi","function_name":"mca_coll_han_gather_intra_simple"},"8810":{"probe_name":"mpi","function_name":"mca_coll_han_gather_lg_task"},"8811":{"probe_name":"mpi","function_name":"mca_coll_han_gather_ug_task"},"8812":{"probe_name":"mpi","function_name":"mca_coll_han_get_all_coll_modules"},"8813":{"probe_name":"mpi","function_name":"mca_coll_han_init_algorithms"},"8814":{"probe_name":"mpi","function_name":"mca_coll_han_init_dynamic_rules"},"8815":{"probe_name":"mpi","function_name":"mca_coll_han_init_query"},"8816":{"probe_name":"mpi","function_name":"mca_coll_han_is_coll_dynamic_implemented"},"8817":{"probe_name":"mpi","function_name":"mca_coll_han_module_construct"},"8818":{"probe_name":"mpi","function_name":"mca_coll_han_module_destruct"},"8819":{"probe_name":"mpi","function_name":"mca_coll_han_module_disable"},"8820":{"probe_name":"mpi","function_name":"mca_coll_han_reduce_intra"},"8821":{"probe_name":"mpi","function_name":"mca_coll_han_reduce_intra_dynamic"},"8822":{"probe_name":"mpi","function_name":"mca_coll_han_reduce_intra_simple"},"8823":{"probe_name":"mpi","function_name":"mca_coll_han_reduce_reproducible"},"8824":{"probe_name":"mpi","function_name":"mca_coll_han_reduce_reproducible_decision"},"8825":{"probe_name":"mpi","function_name":"mca_coll_han_reduce_t0_task"},"8826":{"probe_name":"mpi","function_name":"mca_coll_han_reduce_t1_task"},"8827":{"probe_name":"mpi","function_name":"mca_coll_han_scatter_intra"},"8828":{"probe_name":"mpi","function_name":"mca_coll_han_scatter_intra_dynamic"},"8829":{"probe_name":"mpi","function_name":"mca_coll_han_scatter_intra_simple"},"8830":{"probe_name":"mpi","function_name":"mca_coll_han_scatter_ls_task"},"8831":{"probe_name":"mpi","function_name":"mca_coll_han_scatter_us_task"},"8832":{"probe_name":"mpi","function_name":"mca_coll_han_topo_init"},"8833":{"probe_name":"mpi","function_name":"mca_coll_han_topo_lvl_name_to_id"},"8834":{"probe_name":"mpi","function_name":"mca_coll_han_topo_lvl_to_str"},"8835":{"probe_name":"mpi","function_name":"mca_coll_inter_allgather_inter"},"8836":{"probe_name":"mpi","function_name":"mca_coll_inter_allgatherv_inter"},"8837":{"probe_name":"mpi","function_name":"mca_coll_inter_allreduce_inter"},"8838":{"probe_name":"mpi","function_name":"mca_coll_inter_bcast_inter"},"8839":{"probe_name":"mpi","function_name":"mca_coll_inter_comm_query"},"8840":{"probe_name":"mpi","function_name":"mca_coll_inter_gather_inter"},"8841":{"probe_name":"mpi","function_name":"mca_coll_inter_gatherv_inter"},"8842":{"probe_name":"mpi","function_name":"mca_coll_inter_init_query"},"8843":{"probe_name":"mpi","function_name":"mca_coll_inter_module_construct"},"8844":{"probe_name":"mpi","function_name":"mca_coll_inter_module_destruct"},"8845":{"probe_name":"mpi","function_name":"mca_coll_inter_module_enable"},"8846":{"probe_name":"mpi","function_name":"mca_coll_inter_reduce_inter"},"8847":{"probe_name":"mpi","function_name":"mca_coll_inter_scatter_inter"},"8848":{"probe_name":"mpi","function_name":"mca_coll_inter_scatterv_inter"},"8849":{"probe_name":"mpi","function_name":"mca_coll_monitoring_allgather"},"8850":{"probe_name":"mpi","function_name":"mca_coll_monitoring_allgatherv"},"8851":{"probe_name":"mpi","function_name":"mca_coll_monitoring_allreduce"},"8852":{"probe_name":"mpi","function_name":"mca_coll_monitoring_alltoall"},"8853":{"probe_name":"mpi","function_name":"mca_coll_monitoring_alltoallv"},"8854":{"probe_name":"mpi","function_name":"mca_coll_monitoring_alltoallw"},"8855":{"probe_name":"mpi","function_name":"mca_coll_monitoring_barrier"},"8856":{"probe_name":"mpi","function_name":"mca_coll_monitoring_bcast"},"8857":{"probe_name":"mpi","function_name":"mca_coll_monitoring_component_close"},"8858":{"probe_name":"mpi","function_name":"mca_coll_monitoring_component_init"},"8859":{"probe_name":"mpi","function_name":"mca_coll_monitoring_component_open"},"8860":{"probe_name":"mpi","function_name":"mca_coll_monitoring_component_query"},"8861":{"probe_name":"mpi","function_name":"mca_coll_monitoring_component_register"},"8862":{"probe_name":"mpi","function_name":"mca_coll_monitoring_exscan"},"8863":{"probe_name":"mpi","function_name":"mca_coll_monitoring_gather"},"8864":{"probe_name":"mpi","function_name":"mca_coll_monitoring_gatherv"},"8865":{"probe_name":"mpi","function_name":"mca_coll_monitoring_iallgather"},"8866":{"probe_name":"mpi","function_name":"mca_coll_monitoring_iallgatherv"},"8867":{"probe_name":"mpi","function_name":"mca_coll_monitoring_iallreduce"},"8868":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ialltoall"},"8869":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ialltoallv"},"8870":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ialltoallw"},"8871":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ibarrier"},"8872":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ibcast"},"8873":{"probe_name":"mpi","function_name":"mca_coll_monitoring_iexscan"},"8874":{"probe_name":"mpi","function_name":"mca_coll_monitoring_igather"},"8875":{"probe_name":"mpi","function_name":"mca_coll_monitoring_igatherv"},"8876":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ineighbor_allgather"},"8877":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ineighbor_allgatherv"},"8878":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ineighbor_alltoall"},"8879":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ineighbor_alltoallv"},"8880":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ineighbor_alltoallw"},"8881":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ireduce"},"8882":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ireduce_scatter"},"8883":{"probe_name":"mpi","function_name":"mca_coll_monitoring_ireduce_scatter_block"},"8884":{"probe_name":"mpi","function_name":"mca_coll_monitoring_iscan"},"8885":{"probe_name":"mpi","function_name":"mca_coll_monitoring_iscatter"},"8886":{"probe_name":"mpi","function_name":"mca_coll_monitoring_iscatterv"},"8887":{"probe_name":"mpi","function_name":"mca_coll_monitoring_module_disable"},"8888":{"probe_name":"mpi","function_name":"mca_coll_monitoring_module_enable"},"8889":{"probe_name":"mpi","function_name":"mca_coll_monitoring_neighbor_allgather"},"8890":{"probe_name":"mpi","function_name":"mca_coll_monitoring_neighbor_allgatherv"},"8891":{"probe_name":"mpi","function_name":"mca_coll_monitoring_neighbor_alltoall"},"8892":{"probe_name":"mpi","function_name":"mca_coll_monitoring_neighbor_alltoallv"},"8893":{"probe_name":"mpi","function_name":"mca_coll_monitoring_neighbor_alltoallw"},"8894":{"probe_name":"mpi","function_name":"mca_coll_monitoring_reduce"},"8895":{"probe_name":"mpi","function_name":"mca_coll_monitoring_reduce_scatter"},"8896":{"probe_name":"mpi","function_name":"mca_coll_monitoring_reduce_scatter_block"},"8897":{"probe_name":"mpi","function_name":"mca_coll_monitoring_scan"},"8898":{"probe_name":"mpi","function_name":"mca_coll_monitoring_scatter"},"8899":{"probe_name":"mpi","function_name":"mca_coll_monitoring_scatterv"},"8900":{"probe_name":"mpi","function_name":"mca_coll_self_allgather_intra"},"8901":{"probe_name":"mpi","function_name":"mca_coll_self_allgatherv_intra"},"8902":{"probe_name":"mpi","function_name":"mca_coll_self_allreduce_intra"},"8903":{"probe_name":"mpi","function_name":"mca_coll_self_alltoall_intra"},"8904":{"probe_name":"mpi","function_name":"mca_coll_self_alltoallv_intra"},"8905":{"probe_name":"mpi","function_name":"mca_coll_self_alltoallw_intra"},"8906":{"probe_name":"mpi","function_name":"mca_coll_self_barrier_intra"},"8907":{"probe_name":"mpi","function_name":"mca_coll_self_bcast_intra"},"8908":{"probe_name":"mpi","function_name":"mca_coll_self_comm_query"},"8909":{"probe_name":"mpi","function_name":"mca_coll_self_exscan_intra"},"8910":{"probe_name":"mpi","function_name":"mca_coll_self_gather_intra"},"8911":{"probe_name":"mpi","function_name":"mca_coll_self_gatherv_intra"},"8912":{"probe_name":"mpi","function_name":"mca_coll_self_init_query"},"8913":{"probe_name":"mpi","function_name":"mca_coll_self_module_enable"},"8914":{"probe_name":"mpi","function_name":"mca_coll_self_reduce_intra"},"8915":{"probe_name":"mpi","function_name":"mca_coll_self_reduce_scatter_intra"},"8916":{"probe_name":"mpi","function_name":"mca_coll_self_scan_intra"},"8917":{"probe_name":"mpi","function_name":"mca_coll_self_scatter_intra"},"8918":{"probe_name":"mpi","function_name":"mca_coll_self_scatterv_intra"},"8919":{"probe_name":"mpi","function_name":"mca_coll_sm_allreduce_intra"},"8920":{"probe_name":"mpi","function_name":"mca_coll_sm_barrier_intra"},"8921":{"probe_name":"mpi","function_name":"mca_coll_sm_bcast_intra"},"8922":{"probe_name":"mpi","function_name":"mca_coll_sm_comm_query"},"8923":{"probe_name":"mpi","function_name":"mca_coll_sm_init_query"},"8924":{"probe_name":"mpi","function_name":"mca_coll_sm_module_construct"},"8925":{"probe_name":"mpi","function_name":"mca_coll_sm_module_destruct"},"8926":{"probe_name":"mpi","function_name":"mca_coll_sm_module_disable"},"8927":{"probe_name":"mpi","function_name":"mca_coll_sm_reduce_intra"},"8928":{"probe_name":"mpi","function_name":"mca_coll_sync_bcast"},"8929":{"probe_name":"mpi","function_name":"mca_coll_sync_comm_query"},"8930":{"probe_name":"mpi","function_name":"mca_coll_sync_exscan"},"8931":{"probe_name":"mpi","function_name":"mca_coll_sync_gather"},"8932":{"probe_name":"mpi","function_name":"mca_coll_sync_gatherv"},"8933":{"probe_name":"mpi","function_name":"mca_coll_sync_init_query"},"8934":{"probe_name":"mpi","function_name":"mca_coll_sync_module_construct"},"8935":{"probe_name":"mpi","function_name":"mca_coll_sync_module_destruct"},"8936":{"probe_name":"mpi","function_name":"mca_coll_sync_module_enable"},"8937":{"probe_name":"mpi","function_name":"mca_coll_sync_reduce"},"8938":{"probe_name":"mpi","function_name":"mca_coll_sync_reduce_scatter"},"8939":{"probe_name":"mpi","function_name":"mca_coll_sync_scan"},"8940":{"probe_name":"mpi","function_name":"mca_coll_sync_scatter"},"8941":{"probe_name":"mpi","function_name":"mca_coll_sync_scatterv"},"8942":{"probe_name":"mpi","function_name":"mca_coll_task_constructor"},"8943":{"probe_name":"mpi","function_name":"mca_coll_task_destructor"},"8944":{"probe_name":"mpi","function_name":"mca_coll_tuned_module_construct"},"8945":{"probe_name":"mpi","function_name":"mca_comm_cid_context_alloc"},"8946":{"probe_name":"mpi","function_name":"mca_comm_cid_context_construct"},"8947":{"probe_name":"mpi","function_name":"mca_comm_cid_context_destruct"},"8948":{"probe_name":"mpi","function_name":"mca_common_monitoring_add_procs"},"8949":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_a2a"},"8950":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_a2o"},"8951":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_cache_name"},"8952":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_cond_release"},"8953":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_finalize"},"8954":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_flush"},"8955":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_flush_all"},"8956":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_get_a2a_count"},"8957":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_get_a2a_size"},"8958":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_get_a2o_count"},"8959":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_get_a2o_size"},"8960":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_get_o2a_count"},"8961":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_get_o2a_size"},"8962":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_messages_notify"},"8963":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_new"},"8964":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_o2a"},"8965":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_release"},"8966":{"probe_name":"mpi","function_name":"mca_common_monitoring_coll_reset"},"8967":{"probe_name":"mpi","function_name":"mca_common_monitoring_comm_size_notify"},"8968":{"probe_name":"mpi","function_name":"mca_common_monitoring_finalize"},"8969":{"probe_name":"mpi","function_name":"mca_common_monitoring_flush.part.0"},"8970":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_coll_count"},"8971":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_coll_size"},"8972":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_flush"},"8973":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_osc_recv_count"},"8974":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_osc_recv_size"},"8975":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_osc_sent_count"},"8976":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_osc_sent_size"},"8977":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_pml_count"},"8978":{"probe_name":"mpi","function_name":"mca_common_monitoring_get_pml_size"},"8979":{"probe_name":"mpi","function_name":"mca_common_monitoring_init"},"8980":{"probe_name":"mpi","function_name":"mca_common_monitoring_notify_flush"},"8981":{"probe_name":"mpi","function_name":"mca_common_monitoring_output"},"8982":{"probe_name":"mpi","function_name":"mca_common_monitoring_record_coll"},"8983":{"probe_name":"mpi","function_name":"mca_common_monitoring_record_osc"},"8984":{"probe_name":"mpi","function_name":"mca_common_monitoring_record_pml"},"8985":{"probe_name":"mpi","function_name":"mca_common_monitoring_register"},"8986":{"probe_name":"mpi","function_name":"mca_common_monitoring_set_flush"},"8987":{"probe_name":"mpi","function_name":"mca_common_ompio_alloc_buf"},"8988":{"probe_name":"mpi","function_name":"mca_common_ompio_base_file_read_all"},"8989":{"probe_name":"mpi","function_name":"mca_common_ompio_buffer_alloc_fini"},"8990":{"probe_name":"mpi","function_name":"mca_common_ompio_buffer_alloc_init"},"8991":{"probe_name":"mpi","function_name":"mca_common_ompio_buffer_alloc_seg"},"8992":{"probe_name":"mpi","function_name":"mca_common_ompio_buffer_free_seg"},"8993":{"probe_name":"mpi","function_name":"mca_common_ompio_build_io_array"},"8994":{"probe_name":"mpi","function_name":"mca_common_ompio_cart_based_grouping"},"8995":{"probe_name":"mpi","function_name":"mca_common_ompio_check_gpu_buf"},"8996":{"probe_name":"mpi","function_name":"mca_common_ompio_create_groups"},"8997":{"probe_name":"mpi","function_name":"mca_common_ompio_create_incomplete_file_handle"},"8998":{"probe_name":"mpi","function_name":"mca_common_ompio_decode_datatype"},"8999":{"probe_name":"mpi","function_name":"mca_common_ompio_empty_print_queue"},"9000":{"probe_name":"mpi","function_name":"mca_common_ompio_file_close"},"9001":{"probe_name":"mpi","function_name":"mca_common_ompio_file_delete"},"9002":{"probe_name":"mpi","function_name":"mca_common_ompio_file_get_position"},"9003":{"probe_name":"mpi","function_name":"mca_common_ompio_file_get_size"},"9004":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iread"},"9005":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iread_all"},"9006":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iread_at"},"9007":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iread_at_all"},"9008":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iwrite"},"9009":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iwrite_all"},"9010":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iwrite_at"},"9011":{"probe_name":"mpi","function_name":"mca_common_ompio_file_iwrite_at_all"},"9012":{"probe_name":"mpi","function_name":"mca_common_ompio_file_open"},"9013":{"probe_name":"mpi","function_name":"mca_common_ompio_file_read"},"9014":{"probe_name":"mpi","function_name":"mca_common_ompio_file_read_all"},"9015":{"probe_name":"mpi","function_name":"mca_common_ompio_file_read_all.part.0"},"9016":{"probe_name":"mpi","function_name":"mca_common_ompio_file_read_at"},"9017":{"probe_name":"mpi","function_name":"mca_common_ompio_file_read_at_all"},"9018":{"probe_name":"mpi","function_name":"mca_common_ompio_file_read_pipelined"},"9019":{"probe_name":"mpi","function_name":"mca_common_ompio_file_write"},"9020":{"probe_name":"mpi","function_name":"mca_common_ompio_file_write_all"},"9021":{"probe_name":"mpi","function_name":"mca_common_ompio_file_write_all.part.0"},"9022":{"probe_name":"mpi","function_name":"mca_common_ompio_file_write_at"},"9023":{"probe_name":"mpi","function_name":"mca_common_ompio_file_write_at_all"},"9024":{"probe_name":"mpi","function_name":"mca_common_ompio_file_write_pipelined"},"9025":{"probe_name":"mpi","function_name":"mca_common_ompio_finalize_initial_grouping"},"9026":{"probe_name":"mpi","function_name":"mca_common_ompio_finalize_split"},"9027":{"probe_name":"mpi","function_name":"mca_common_ompio_forced_grouping"},"9028":{"probe_name":"mpi","function_name":"mca_common_ompio_full_print_queue"},"9029":{"probe_name":"mpi","function_name":"mca_common_ompio_fview_based_grouping"},"9030":{"probe_name":"mpi","function_name":"mca_common_ompio_initialize_print_queue"},"9031":{"probe_name":"mpi","function_name":"mca_common_ompio_merge_groups"},"9032":{"probe_name":"mpi","function_name":"mca_common_ompio_merge_initial_groups"},"9033":{"probe_name":"mpi","function_name":"mca_common_ompio_prepare_to_group"},"9034":{"probe_name":"mpi","function_name":"mca_common_ompio_print_time_info"},"9035":{"probe_name":"mpi","function_name":"mca_common_ompio_progress"},"9036":{"probe_name":"mpi","function_name":"mca_common_ompio_register_print_entry"},"9037":{"probe_name":"mpi","function_name":"mca_common_ompio_register_progress"},"9038":{"probe_name":"mpi","function_name":"mca_common_ompio_release_buf"},"9039":{"probe_name":"mpi","function_name":"mca_common_ompio_request_alloc"},"9040":{"probe_name":"mpi","function_name":"mca_common_ompio_request_cancel"},"9041":{"probe_name":"mpi","function_name":"mca_common_ompio_request_construct"},"9042":{"probe_name":"mpi","function_name":"mca_common_ompio_request_destruct"},"9043":{"probe_name":"mpi","function_name":"mca_common_ompio_request_fini"},"9044":{"probe_name":"mpi","function_name":"mca_common_ompio_request_free"},"9045":{"probe_name":"mpi","function_name":"mca_common_ompio_request_init"},"9046":{"probe_name":"mpi","function_name":"mca_common_ompio_retain_initial_groups"},"9047":{"probe_name":"mpi","function_name":"mca_common_ompio_set_aggregator_props"},"9048":{"probe_name":"mpi","function_name":"mca_common_ompio_set_callbacks"},"9049":{"probe_name":"mpi","function_name":"mca_common_ompio_set_explicit_offset"},"9050":{"probe_name":"mpi","function_name":"mca_common_ompio_set_file_defaults"},"9051":{"probe_name":"mpi","function_name":"mca_common_ompio_set_view"},"9052":{"probe_name":"mpi","function_name":"mca_common_ompio_simple_grouping"},"9053":{"probe_name":"mpi","function_name":"mca_common_ompio_split_a_group"},"9054":{"probe_name":"mpi","function_name":"mca_common_ompio_split_initial_groups"},"9055":{"probe_name":"mpi","function_name":"mca_common_ompio_unregister_print_entry"},"9056":{"probe_name":"mpi","function_name":"mca_fbtl_base_check_atomicity"},"9057":{"probe_name":"mpi","function_name":"mca_fbtl_base_file_select"},"9058":{"probe_name":"mpi","function_name":"mca_fbtl_base_file_unselect"},"9059":{"probe_name":"mpi","function_name":"mca_fbtl_base_find_available"},"9060":{"probe_name":"mpi","function_name":"mca_fbtl_posix_check_atomicity"},"9061":{"probe_name":"mpi","function_name":"mca_fbtl_posix_component_file_query"},"9062":{"probe_name":"mpi","function_name":"mca_fbtl_posix_component_file_unquery"},"9063":{"probe_name":"mpi","function_name":"mca_fbtl_posix_component_init_query"},"9064":{"probe_name":"mpi","function_name":"mca_fbtl_posix_ipreadv"},"9065":{"probe_name":"mpi","function_name":"mca_fbtl_posix_ipwritev"},"9066":{"probe_name":"mpi","function_name":"mca_fbtl_posix_lock"},"9067":{"probe_name":"mpi","function_name":"mca_fbtl_posix_module_finalize"},"9068":{"probe_name":"mpi","function_name":"mca_fbtl_posix_module_init"},"9069":{"probe_name":"mpi","function_name":"mca_fbtl_posix_preadv"},"9070":{"probe_name":"mpi","function_name":"mca_fbtl_posix_progress"},"9071":{"probe_name":"mpi","function_name":"mca_fbtl_posix_pwritev"},"9072":{"probe_name":"mpi","function_name":"mca_fbtl_posix_request_free"},"9073":{"probe_name":"mpi","function_name":"mca_fbtl_posix_unlock"},"9074":{"probe_name":"mpi","function_name":"mca_fcoll_base_component_lookup"},"9075":{"probe_name":"mpi","function_name":"mca_fcoll_base_file_select"},"9076":{"probe_name":"mpi","function_name":"mca_fcoll_base_file_unselect"},"9077":{"probe_name":"mpi","function_name":"mca_fcoll_base_find_available"},"9078":{"probe_name":"mpi","function_name":"mca_fcoll_base_query_table"},"9079":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_component_file_query"},"9080":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_component_file_unquery"},"9081":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_component_init_query"},"9082":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_file_read_all"},"9083":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_file_write_all"},"9084":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_break_file_view"},"9085":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_component_file_query"},"9086":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_component_file_unquery"},"9087":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_component_init_query"},"9088":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_file_read_all"},"9089":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_file_write_all"},"9090":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_get_configuration"},"9091":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_module_finalize"},"9092":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_module_init"},"9093":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_gen2_split_iov_array"},"9094":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_module_finalize"},"9095":{"probe_name":"mpi","function_name":"mca_fcoll_dynamic_module_init"},"9096":{"probe_name":"mpi","function_name":"mca_fcoll_individual_component_file_query"},"9097":{"probe_name":"mpi","function_name":"mca_fcoll_individual_component_file_unquery"},"9098":{"probe_name":"mpi","function_name":"mca_fcoll_individual_component_init_query"},"9099":{"probe_name":"mpi","function_name":"mca_fcoll_individual_file_read_all"},"9100":{"probe_name":"mpi","function_name":"mca_fcoll_individual_file_write_all"},"9101":{"probe_name":"mpi","function_name":"mca_fcoll_individual_module_finalize"},"9102":{"probe_name":"mpi","function_name":"mca_fcoll_individual_module_init"},"9103":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_break_file_view"},"9104":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_component_file_query"},"9105":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_component_file_unquery"},"9106":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_component_init_query"},"9107":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_file_read_all"},"9108":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_file_write_all"},"9109":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_get_configuration"},"9110":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_module_finalize"},"9111":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_module_init"},"9112":{"probe_name":"mpi","function_name":"mca_fcoll_vulcan_split_iov_array"},"9113":{"probe_name":"mpi","function_name":"mca_fs_base_file_close"},"9114":{"probe_name":"mpi","function_name":"mca_fs_base_file_delete"},"9115":{"probe_name":"mpi","function_name":"mca_fs_base_file_get_size"},"9116":{"probe_name":"mpi","function_name":"mca_fs_base_file_select"},"9117":{"probe_name":"mpi","function_name":"mca_fs_base_file_set_size"},"9118":{"probe_name":"mpi","function_name":"mca_fs_base_file_sync"},"9119":{"probe_name":"mpi","function_name":"mca_fs_base_file_unselect"},"9120":{"probe_name":"mpi","function_name":"mca_fs_base_find_available"},"9121":{"probe_name":"mpi","function_name":"mca_fs_base_get_file_amode"},"9122":{"probe_name":"mpi","function_name":"mca_fs_base_get_file_perm"},"9123":{"probe_name":"mpi","function_name":"mca_fs_base_get_fstype"},"9124":{"probe_name":"mpi","function_name":"mca_fs_base_get_mpi_err"},"9125":{"probe_name":"mpi","function_name":"mca_fs_base_get_parent_dir"},"9126":{"probe_name":"mpi","function_name":"mca_fs_base_get_real_filename.constprop.0"},"9127":{"probe_name":"mpi","function_name":"mca_fs_ufs_component_file_query"},"9128":{"probe_name":"mpi","function_name":"mca_fs_ufs_component_file_unquery"},"9129":{"probe_name":"mpi","function_name":"mca_fs_ufs_component_init_query"},"9130":{"probe_name":"mpi","function_name":"mca_fs_ufs_file_open"},"9131":{"probe_name":"mpi","function_name":"mca_fs_ufs_module_finalize"},"9132":{"probe_name":"mpi","function_name":"mca_fs_ufs_module_init"},"9133":{"probe_name":"mpi","function_name":"mca_io_base_delete"},"9134":{"probe_name":"mpi","function_name":"mca_io_base_delete.cold"},"9135":{"probe_name":"mpi","function_name":"mca_io_base_file_select"},"9136":{"probe_name":"mpi","function_name":"mca_io_base_file_select.cold"},"9137":{"probe_name":"mpi","function_name":"mca_io_base_file_select.localalias"},"9138":{"probe_name":"mpi","function_name":"mca_io_base_find_available"},"9139":{"probe_name":"mpi","function_name":"mca_io_base_open"},"9140":{"probe_name":"mpi","function_name":"mca_io_base_register_datarep"},"9141":{"probe_name":"mpi","function_name":"mca_io_ompio_file_close"},"9142":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_amode"},"9143":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_atomicity"},"9144":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_byte_offset"},"9145":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_position"},"9146":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_position_shared"},"9147":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_size"},"9148":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_type_extent"},"9149":{"probe_name":"mpi","function_name":"mca_io_ompio_file_get_view"},"9150":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iread"},"9151":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iread_all"},"9152":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iread_at"},"9153":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iread_at_all"},"9154":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iread_shared"},"9155":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iwrite"},"9156":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iwrite_all"},"9157":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iwrite_at"},"9158":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iwrite_at_all"},"9159":{"probe_name":"mpi","function_name":"mca_io_ompio_file_iwrite_shared"},"9160":{"probe_name":"mpi","function_name":"mca_io_ompio_file_open"},"9161":{"probe_name":"mpi","function_name":"mca_io_ompio_file_preallocate"},"9162":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read"},"9163":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_all"},"9164":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_all_begin"},"9165":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_all_end"},"9166":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_at"},"9167":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_at_all"},"9168":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_at_all_begin"},"9169":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_at_all_end"},"9170":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_ordered"},"9171":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_ordered_begin"},"9172":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_ordered_end"},"9173":{"probe_name":"mpi","function_name":"mca_io_ompio_file_read_shared"},"9174":{"probe_name":"mpi","function_name":"mca_io_ompio_file_seek"},"9175":{"probe_name":"mpi","function_name":"mca_io_ompio_file_seek_shared"},"9176":{"probe_name":"mpi","function_name":"mca_io_ompio_file_set_atomicity"},"9177":{"probe_name":"mpi","function_name":"mca_io_ompio_file_set_size"},"9178":{"probe_name":"mpi","function_name":"mca_io_ompio_file_set_view"},"9179":{"probe_name":"mpi","function_name":"mca_io_ompio_file_sync"},"9180":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write"},"9181":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_all"},"9182":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_all_begin"},"9183":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_all_end"},"9184":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_at"},"9185":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_at_all"},"9186":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_at_all_begin"},"9187":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_at_all_end"},"9188":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_ordered"},"9189":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_ordered_begin"},"9190":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_ordered_end"},"9191":{"probe_name":"mpi","function_name":"mca_io_ompio_file_write_shared"},"9192":{"probe_name":"mpi","function_name":"mca_io_ompio_get_mca_parameter_value"},"9193":{"probe_name":"mpi","function_name":"mca_monitoring_coll_construct"},"9194":{"probe_name":"mpi","function_name":"mca_monitoring_coll_destruct"},"9195":{"probe_name":"mpi","function_name":"mca_osc_monitoring_component_finish"},"9196":{"probe_name":"mpi","function_name":"mca_osc_monitoring_component_init"},"9197":{"probe_name":"mpi","function_name":"mca_osc_monitoring_component_query"},"9198":{"probe_name":"mpi","function_name":"mca_osc_monitoring_component_register"},"9199":{"probe_name":"mpi","function_name":"mca_osc_monitoring_component_select"},"9200":{"probe_name":"mpi","function_name":"mca_part_base_close"},"9201":{"probe_name":"mpi","function_name":"mca_part_base_finalize"},"9202":{"probe_name":"mpi","function_name":"mca_part_base_open"},"9203":{"probe_name":"mpi","function_name":"mca_part_base_precv_request_construct"},"9204":{"probe_name":"mpi","function_name":"mca_part_base_prequest_construct"},"9205":{"probe_name":"mpi","function_name":"mca_part_base_progress"},"9206":{"probe_name":"mpi","function_name":"mca_part_base_psend_request_construct"},"9207":{"probe_name":"mpi","function_name":"mca_part_base_register"},"9208":{"probe_name":"mpi","function_name":"mca_part_base_select"},"9209":{"probe_name":"mpi","function_name":"mca_part_base_select.cold"},"9210":{"probe_name":"mpi","function_name":"mca_part_persist_component_close"},"9211":{"probe_name":"mpi","function_name":"mca_part_persist_component_fini"},"9212":{"probe_name":"mpi","function_name":"mca_part_persist_component_init"},"9213":{"probe_name":"mpi","function_name":"mca_part_persist_component_open"},"9214":{"probe_name":"mpi","function_name":"mca_part_persist_component_register"},"9215":{"probe_name":"mpi","function_name":"mca_part_persist_free:0x1ee0d0"},"9216":{"probe_name":"mpi","function_name":"mca_part_persist_free:0x1ee3e0"},"9217":{"probe_name":"mpi","function_name":"mca_part_persist_parrived"},"9218":{"probe_name":"mpi","function_name":"mca_part_persist_pready"},"9219":{"probe_name":"mpi","function_name":"mca_part_persist_precv_init"},"9220":{"probe_name":"mpi","function_name":"mca_part_persist_precv_request_construct"},"9221":{"probe_name":"mpi","function_name":"mca_part_persist_progress"},"9222":{"probe_name":"mpi","function_name":"mca_part_persist_psend_init"},"9223":{"probe_name":"mpi","function_name":"mca_part_persist_psend_request_construct"},"9224":{"probe_name":"mpi","function_name":"mca_part_persist_request_construct"},"9225":{"probe_name":"mpi","function_name":"mca_part_persist_request_destruct"},"9226":{"probe_name":"mpi","function_name":"mca_part_persist_start:0x1ed610"},"9227":{"probe_name":"mpi","function_name":"mca_part_persist_start:0x1edf30"},"9228":{"probe_name":"mpi","function_name":"mca_part_persist_start:0x1ee240"},"9229":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_attach"},"9230":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_detach"},"9231":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_fini"},"9232":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_init"},"9233":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_request_alloc"},"9234":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_request_alloc_buf"},"9235":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_request_fini"},"9236":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_request_free"},"9237":{"probe_name":"mpi","function_name":"mca_pml_base_bsend_request_start"},"9238":{"probe_name":"mpi","function_name":"mca_pml_base_close"},"9239":{"probe_name":"mpi","function_name":"mca_pml_base_finalize"},"9240":{"probe_name":"mpi","function_name":"mca_pml_base_open"},"9241":{"probe_name":"mpi","function_name":"mca_pml_base_pml_check_selected"},"9242":{"probe_name":"mpi","function_name":"mca_pml_base_pml_check_selected_impl"},"9243":{"probe_name":"mpi","function_name":"mca_pml_base_pml_selected"},"9244":{"probe_name":"mpi","function_name":"mca_pml_base_progress"},"9245":{"probe_name":"mpi","function_name":"mca_pml_base_recv_request_construct"},"9246":{"probe_name":"mpi","function_name":"mca_pml_base_recv_request_destruct"},"9247":{"probe_name":"mpi","function_name":"mca_pml_base_register"},"9248":{"probe_name":"mpi","function_name":"mca_pml_base_request_construct"},"9249":{"probe_name":"mpi","function_name":"mca_pml_base_revoke_comm"},"9250":{"probe_name":"mpi","function_name":"mca_pml_base_select"},"9251":{"probe_name":"mpi","function_name":"mca_pml_base_select.cold"},"9252":{"probe_name":"mpi","function_name":"mca_pml_base_send_request_construct"},"9253":{"probe_name":"mpi","function_name":"mca_pml_base_send_request_destruct"},"9254":{"probe_name":"mpi","function_name":"mca_pml_bsend_alloc_segment"},"9255":{"probe_name":"mpi","function_name":"mca_pml_cm_add_comm"},"9256":{"probe_name":"mpi","function_name":"mca_pml_cm_add_procs"},"9257":{"probe_name":"mpi","function_name":"mca_pml_cm_cancel"},"9258":{"probe_name":"mpi","function_name":"mca_pml_cm_component_close"},"9259":{"probe_name":"mpi","function_name":"mca_pml_cm_component_fini"},"9260":{"probe_name":"mpi","function_name":"mca_pml_cm_component_init"},"9261":{"probe_name":"mpi","function_name":"mca_pml_cm_component_open"},"9262":{"probe_name":"mpi","function_name":"mca_pml_cm_component_register"},"9263":{"probe_name":"mpi","function_name":"mca_pml_cm_del_comm"},"9264":{"probe_name":"mpi","function_name":"mca_pml_cm_del_procs"},"9265":{"probe_name":"mpi","function_name":"mca_pml_cm_dump"},"9266":{"probe_name":"mpi","function_name":"mca_pml_cm_enable"},"9267":{"probe_name":"mpi","function_name":"mca_pml_cm_improbe"},"9268":{"probe_name":"mpi","function_name":"mca_pml_cm_imrecv"},"9269":{"probe_name":"mpi","function_name":"mca_pml_cm_iprobe"},"9270":{"probe_name":"mpi","function_name":"mca_pml_cm_irecv"},"9271":{"probe_name":"mpi","function_name":"mca_pml_cm_irecv_init"},"9272":{"probe_name":"mpi","function_name":"mca_pml_cm_isend"},"9273":{"probe_name":"mpi","function_name":"mca_pml_cm_isend_init"},"9274":{"probe_name":"mpi","function_name":"mca_pml_cm_mprobe"},"9275":{"probe_name":"mpi","function_name":"mca_pml_cm_mrecv"},"9276":{"probe_name":"mpi","function_name":"mca_pml_cm_probe"},"9277":{"probe_name":"mpi","function_name":"mca_pml_cm_recv"},"9278":{"probe_name":"mpi","function_name":"mca_pml_cm_recv_fast_completion"},"9279":{"probe_name":"mpi","function_name":"mca_pml_cm_recv_request_completion"},"9280":{"probe_name":"mpi","function_name":"mca_pml_cm_recv_request_construct"},"9281":{"probe_name":"mpi","function_name":"mca_pml_cm_recv_request_free"},"9282":{"probe_name":"mpi","function_name":"mca_pml_cm_request_construct"},"9283":{"probe_name":"mpi","function_name":"mca_pml_cm_request_destruct"},"9284":{"probe_name":"mpi","function_name":"mca_pml_cm_send"},"9285":{"probe_name":"mpi","function_name":"mca_pml_cm_send_request_completion"},"9286":{"probe_name":"mpi","function_name":"mca_pml_cm_send_request_construct"},"9287":{"probe_name":"mpi","function_name":"mca_pml_cm_send_request_free"},"9288":{"probe_name":"mpi","function_name":"mca_pml_cm_start"},"9289":{"probe_name":"mpi","function_name":"mca_pml_monitoring_add_comm"},"9290":{"probe_name":"mpi","function_name":"mca_pml_monitoring_add_procs"},"9291":{"probe_name":"mpi","function_name":"mca_pml_monitoring_component_finish"},"9292":{"probe_name":"mpi","function_name":"mca_pml_monitoring_component_init"},"9293":{"probe_name":"mpi","function_name":"mca_pml_monitoring_component_open"},"9294":{"probe_name":"mpi","function_name":"mca_pml_monitoring_del_comm"},"9295":{"probe_name":"mpi","function_name":"mca_pml_monitoring_del_procs"},"9296":{"probe_name":"mpi","function_name":"mca_pml_monitoring_dump"},"9297":{"probe_name":"mpi","function_name":"mca_pml_monitoring_enable"},"9298":{"probe_name":"mpi","function_name":"mca_pml_monitoring_improbe"},"9299":{"probe_name":"mpi","function_name":"mca_pml_monitoring_imrecv"},"9300":{"probe_name":"mpi","function_name":"mca_pml_monitoring_iprobe"},"9301":{"probe_name":"mpi","function_name":"mca_pml_monitoring_irecv"},"9302":{"probe_name":"mpi","function_name":"mca_pml_monitoring_irecv_init"},"9303":{"probe_name":"mpi","function_name":"mca_pml_monitoring_isend"},"9304":{"probe_name":"mpi","function_name":"mca_pml_monitoring_isend_init"},"9305":{"probe_name":"mpi","function_name":"mca_pml_monitoring_mprobe"},"9306":{"probe_name":"mpi","function_name":"mca_pml_monitoring_mrecv"},"9307":{"probe_name":"mpi","function_name":"mca_pml_monitoring_probe"},"9308":{"probe_name":"mpi","function_name":"mca_pml_monitoring_recv"},"9309":{"probe_name":"mpi","function_name":"mca_pml_monitoring_revoke_comm"},"9310":{"probe_name":"mpi","function_name":"mca_pml_monitoring_send"},"9311":{"probe_name":"mpi","function_name":"mca_pml_monitoring_start"},"9312":{"probe_name":"mpi","function_name":"mca_pml_ob1_accelerator_add_ipc_support"},"9313":{"probe_name":"mpi","function_name":"mca_pml_ob1_accelerator_fini"},"9314":{"probe_name":"mpi","function_name":"mca_pml_ob1_accelerator_init"},"9315":{"probe_name":"mpi","function_name":"mca_pml_ob1_accelerator_need_buffers"},"9316":{"probe_name":"mpi","function_name":"mca_pml_ob1_add_comm"},"9317":{"probe_name":"mpi","function_name":"mca_pml_ob1_add_procs"},"9318":{"probe_name":"mpi","function_name":"mca_pml_ob1_com_btl_comp"},"9319":{"probe_name":"mpi","function_name":"mca_pml_ob1_comm_construct"},"9320":{"probe_name":"mpi","function_name":"mca_pml_ob1_comm_destruct"},"9321":{"probe_name":"mpi","function_name":"mca_pml_ob1_comm_init_size"},"9322":{"probe_name":"mpi","function_name":"mca_pml_ob1_comm_proc_construct"},"9323":{"probe_name":"mpi","function_name":"mca_pml_ob1_comm_proc_destruct"},"9324":{"probe_name":"mpi","function_name":"mca_pml_ob1_comm_size_notify"},"9325":{"probe_name":"mpi","function_name":"mca_pml_ob1_component_close"},"9326":{"probe_name":"mpi","function_name":"mca_pml_ob1_component_fini"},"9327":{"probe_name":"mpi","function_name":"mca_pml_ob1_component_init"},"9328":{"probe_name":"mpi","function_name":"mca_pml_ob1_component_open"},"9329":{"probe_name":"mpi","function_name":"mca_pml_ob1_component_register"},"9330":{"probe_name":"mpi","function_name":"mca_pml_ob1_control_completion"},"9331":{"probe_name":"mpi","function_name":"mca_pml_ob1_copy_frag_completion"},"9332":{"probe_name":"mpi","function_name":"mca_pml_ob1_del_comm"},"9333":{"probe_name":"mpi","function_name":"mca_pml_ob1_del_procs"},"9334":{"probe_name":"mpi","function_name":"mca_pml_ob1_dump"},"9335":{"probe_name":"mpi","function_name":"mca_pml_ob1_dump_cant_match"},"9336":{"probe_name":"mpi","function_name":"mca_pml_ob1_dump_frag_list"},"9337":{"probe_name":"mpi","function_name":"mca_pml_ob1_dump_hdr"},"9338":{"probe_name":"mpi","function_name":"mca_pml_ob1_enable"},"9339":{"probe_name":"mpi","function_name":"mca_pml_ob1_enable_progress"},"9340":{"probe_name":"mpi","function_name":"mca_pml_ob1_error_handler"},"9341":{"probe_name":"mpi","function_name":"mca_pml_ob1_frag_completion"},"9342":{"probe_name":"mpi","function_name":"mca_pml_ob1_get_dtoh_stream"},"9343":{"probe_name":"mpi","function_name":"mca_pml_ob1_get_htod_stream"},"9344":{"probe_name":"mpi","function_name":"mca_pml_ob1_get_posted_recvq_size"},"9345":{"probe_name":"mpi","function_name":"mca_pml_ob1_get_unex_msgq_size"},"9346":{"probe_name":"mpi","function_name":"mca_pml_ob1_handle_cid"},"9347":{"probe_name":"mpi","function_name":"mca_pml_ob1_improbe"},"9348":{"probe_name":"mpi","function_name":"mca_pml_ob1_imrecv"},"9349":{"probe_name":"mpi","function_name":"mca_pml_ob1_imrecv.cold"},"9350":{"probe_name":"mpi","function_name":"mca_pml_ob1_iprobe"},"9351":{"probe_name":"mpi","function_name":"mca_pml_ob1_irecv"},"9352":{"probe_name":"mpi","function_name":"mca_pml_ob1_irecv_init"},"9353":{"probe_name":"mpi","function_name":"mca_pml_ob1_isend"},"9354":{"probe_name":"mpi","function_name":"mca_pml_ob1_isend_init"},"9355":{"probe_name":"mpi","function_name":"mca_pml_ob1_match_completion_free"},"9356":{"probe_name":"mpi","function_name":"mca_pml_ob1_merge_cant_match"},"9357":{"probe_name":"mpi","function_name":"mca_pml_ob1_mprobe"},"9358":{"probe_name":"mpi","function_name":"mca_pml_ob1_mrecv"},"9359":{"probe_name":"mpi","function_name":"mca_pml_ob1_mrecv.cold"},"9360":{"probe_name":"mpi","function_name":"mca_pml_ob1_peer_create"},"9361":{"probe_name":"mpi","function_name":"mca_pml_ob1_probe"},"9362":{"probe_name":"mpi","function_name":"mca_pml_ob1_process_pending_packets"},"9363":{"probe_name":"mpi","function_name":"mca_pml_ob1_process_pending_rdma"},"9364":{"probe_name":"mpi","function_name":"mca_pml_ob1_progress"},"9365":{"probe_name":"mpi","function_name":"mca_pml_ob1_progress_one_htod_event"},"9366":{"probe_name":"mpi","function_name":"mca_pml_ob1_put_completion:0x2057a0"},"9367":{"probe_name":"mpi","function_name":"mca_pml_ob1_put_completion:0x20bf00"},"9368":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_btls"},"9369":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_btls.cold"},"9370":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_cuda_btls"},"9371":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_cuda_btls.cold"},"9372":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_frag_constructor"},"9373":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_pipeline_btls"},"9374":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_pipeline_btls.cold"},"9375":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_pipeline_btls_count"},"9376":{"probe_name":"mpi","function_name":"mca_pml_ob1_rdma_pipeline_btls_count.cold"},"9377":{"probe_name":"mpi","function_name":"mca_pml_ob1_record_htod_event"},"9378":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv"},"9379":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_ctl_completion"},"9380":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_ack"},"9381":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_cid"},"9382":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_fin"},"9383":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_frag"},"9384":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_match"},"9385":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_put"},"9386":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_rget"},"9387":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_callback_rndv"},"9388":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_match.isra.0"},"9389":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_frag_match_proc.isra.0"},"9390":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_req_start"},"9391":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_ack.isra.0"},"9392":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_ack_send_btl"},"9393":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_cancel"},"9394":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_construct"},"9395":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_destruct"},"9396":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_frag_copy_finished"},"9397":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_frag_copy_start"},"9398":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_free"},"9399":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_get_frag"},"9400":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_get_frag_failed"},"9401":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_matched_probe"},"9402":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_process_pending"},"9403":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_progress_frag"},"9404":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_progress_match"},"9405":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_progress_rget"},"9406":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_progress_rget.cold"},"9407":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_progress_rndv"},"9408":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_put_frag"},"9409":{"probe_name":"mpi","function_name":"mca_pml_ob1_recv_request_schedule_once"},"9410":{"probe_name":"mpi","function_name":"mca_pml_ob1_revoke_comm"},"9411":{"probe_name":"mpi","function_name":"mca_pml_ob1_revoke_comm.localalias"},"9412":{"probe_name":"mpi","function_name":"mca_pml_ob1_rget_completion:0x204ec0"},"9413":{"probe_name":"mpi","function_name":"mca_pml_ob1_rget_completion:0x209c10"},"9414":{"probe_name":"mpi","function_name":"mca_pml_ob1_rndv_completion"},"9415":{"probe_name":"mpi","function_name":"mca_pml_ob1_seg_alloc"},"9416":{"probe_name":"mpi","function_name":"mca_pml_ob1_seg_free"},"9417":{"probe_name":"mpi","function_name":"mca_pml_ob1_send"},"9418":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_cid"},"9419":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_control_any"},"9420":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_control_btl"},"9421":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_ctl_completion"},"9422":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_fin"},"9423":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_inline.constprop.0"},"9424":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_cancel"},"9425":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_construct"},"9426":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_copy_in_out"},"9427":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_destruct"},"9428":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_free"},"9429":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_process_pending"},"9430":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_put"},"9431":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_put_frag"},"9432":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_put_frag_failed"},"9433":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_schedule_once"},"9434":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_start_accelerator"},"9435":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_start_buffered"},"9436":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_start_copy"},"9437":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_start_prepare"},"9438":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_start_rdma"},"9439":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_start_rndv"},"9440":{"probe_name":"mpi","function_name":"mca_pml_ob1_send_request_start_seq.constprop.0"},"9441":{"probe_name":"mpi","function_name":"mca_pml_ob1_set_allow_overtake"},"9442":{"probe_name":"mpi","function_name":"mca_pml_ob1_start"},"9443":{"probe_name":"mpi","function_name":"mca_pml_v_component_close"},"9444":{"probe_name":"mpi","function_name":"mca_pml_v_component_finalize"},"9445":{"probe_name":"mpi","function_name":"mca_pml_v_component_init"},"9446":{"probe_name":"mpi","function_name":"mca_pml_v_component_open"},"9447":{"probe_name":"mpi","function_name":"mca_pml_v_component_parasite_close"},"9448":{"probe_name":"mpi","function_name":"mca_pml_v_component_parasite_finalize"},"9449":{"probe_name":"mpi","function_name":"mca_pml_v_component_register"},"9450":{"probe_name":"mpi","function_name":"mca_pml_v_enable"},"9451":{"probe_name":"mpi","function_name":"mca_sharedfp_base_close"},"9452":{"probe_name":"mpi","function_name":"mca_sharedfp_base_file_select"},"9453":{"probe_name":"mpi","function_name":"mca_sharedfp_base_file_unselect"},"9454":{"probe_name":"mpi","function_name":"mca_sharedfp_base_find_available"},"9455":{"probe_name":"mpi","function_name":"mca_sharedfp_base_open"},"9456":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_assign_globaloffset"},"9457":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_collaborate_data"},"9458":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_component_file_query"},"9459":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_component_file_unquery"},"9460":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_component_init_query"},"9461":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_create_buff"},"9462":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_file_close"},"9463":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_file_open"},"9464":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_get_position"},"9465":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_get_timestamps_and_reclengths"},"9466":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_getoffset"},"9467":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_gettime"},"9468":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_insert_headnode"},"9469":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_insert_metadata"},"9470":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_iread"},"9471":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_iwrite"},"9472":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_module_finalize"},"9473":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_module_init"},"9474":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_read"},"9475":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_read_ordered"},"9476":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_read_ordered_begin"},"9477":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_read_ordered_end"},"9478":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_seek"},"9479":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_sort_timestamps"},"9480":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_write"},"9481":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_write_metadata_file"},"9482":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_write_ordered"},"9483":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_write_ordered_begin"},"9484":{"probe_name":"mpi","function_name":"mca_sharedfp_individual_write_ordered_end"},"9485":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_component_file_query"},"9486":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_component_file_unquery"},"9487":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_component_init_query"},"9488":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_file_close"},"9489":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_file_open"},"9490":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_get_position"},"9491":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_iread"},"9492":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_iwrite"},"9493":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_module_finalize"},"9494":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_module_init"},"9495":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_read"},"9496":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_read_ordered"},"9497":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_read_ordered.cold"},"9498":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_read_ordered_begin"},"9499":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_read_ordered_begin.cold"},"9500":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_read_ordered_end"},"9501":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_request_position"},"9502":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_seek"},"9503":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_write"},"9504":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_write_ordered"},"9505":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_write_ordered.cold"},"9506":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_write_ordered_begin"},"9507":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_write_ordered_begin.cold"},"9508":{"probe_name":"mpi","function_name":"mca_sharedfp_lockedfile_write_ordered_end"},"9509":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_component_file_query"},"9510":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_component_file_unquery"},"9511":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_component_init_query"},"9512":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_file_close"},"9513":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_file_open"},"9514":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_get_position"},"9515":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_iread"},"9516":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_iwrite"},"9517":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_module_finalize"},"9518":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_module_init"},"9519":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_read"},"9520":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_read_ordered"},"9521":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_read_ordered.cold"},"9522":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_read_ordered_begin"},"9523":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_read_ordered_begin.cold"},"9524":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_read_ordered_end"},"9525":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_request_position"},"9526":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_seek"},"9527":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_write"},"9528":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_write_ordered"},"9529":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_write_ordered.cold"},"9530":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_write_ordered_begin"},"9531":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_write_ordered_begin.cold"},"9532":{"probe_name":"mpi","function_name":"mca_sharedfp_sm_write_ordered_end"},"9533":{"probe_name":"mpi","function_name":"mca_topo_base_cart_coords"},"9534":{"probe_name":"mpi","function_name":"mca_topo_base_cart_create"},"9535":{"probe_name":"mpi","function_name":"mca_topo_base_cart_get"},"9536":{"probe_name":"mpi","function_name":"mca_topo_base_cart_map"},"9537":{"probe_name":"mpi","function_name":"mca_topo_base_cart_rank"},"9538":{"probe_name":"mpi","function_name":"mca_topo_base_cart_shift"},"9539":{"probe_name":"mpi","function_name":"mca_topo_base_cart_sub"},"9540":{"probe_name":"mpi","function_name":"mca_topo_base_cartdim_get"},"9541":{"probe_name":"mpi","function_name":"mca_topo_base_close"},"9542":{"probe_name":"mpi","function_name":"mca_topo_base_comm_cart_2_2_0_construct"},"9543":{"probe_name":"mpi","function_name":"mca_topo_base_comm_cart_2_2_0_destruct"},"9544":{"probe_name":"mpi","function_name":"mca_topo_base_comm_dist_graph_2_2_0_construct"},"9545":{"probe_name":"mpi","function_name":"mca_topo_base_comm_dist_graph_2_2_0_destruct"},"9546":{"probe_name":"mpi","function_name":"mca_topo_base_comm_graph_2_2_0_construct"},"9547":{"probe_name":"mpi","function_name":"mca_topo_base_comm_graph_2_2_0_destruct"},"9548":{"probe_name":"mpi","function_name":"mca_topo_base_comm_select"},"9549":{"probe_name":"mpi","function_name":"mca_topo_base_dist_graph_create"},"9550":{"probe_name":"mpi","function_name":"mca_topo_base_dist_graph_create_adjacent"},"9551":{"probe_name":"mpi","function_name":"mca_topo_base_dist_graph_distribute"},"9552":{"probe_name":"mpi","function_name":"mca_topo_base_dist_graph_neighbors"},"9553":{"probe_name":"mpi","function_name":"mca_topo_base_dist_graph_neighbors_count"},"9554":{"probe_name":"mpi","function_name":"mca_topo_base_find_available"},"9555":{"probe_name":"mpi","function_name":"mca_topo_base_graph_create"},"9556":{"probe_name":"mpi","function_name":"mca_topo_base_graph_get"},"9557":{"probe_name":"mpi","function_name":"mca_topo_base_graph_map"},"9558":{"probe_name":"mpi","function_name":"mca_topo_base_graph_neighbors"},"9559":{"probe_name":"mpi","function_name":"mca_topo_base_graph_neighbors_count"},"9560":{"probe_name":"mpi","function_name":"mca_topo_base_graphdims_get"},"9561":{"probe_name":"mpi","function_name":"mca_topo_base_group_select"},"9562":{"probe_name":"mpi","function_name":"mca_topo_base_lazy_init"},"9563":{"probe_name":"mpi","function_name":"mca_topo_base_module_construct"},"9564":{"probe_name":"mpi","function_name":"mca_topo_base_module_destruct"},"9565":{"probe_name":"mpi","function_name":"mca_topo_base_neighbor_count"},"9566":{"probe_name":"mpi","function_name":"mca_topo_base_open"},"9567":{"probe_name":"mpi","function_name":"mca_topo_basic_query"},"9568":{"probe_name":"mpi","function_name":"mca_topo_treematch_component_register"},"9569":{"probe_name":"mpi","function_name":"mca_topo_treematch_dist_graph_create"},"9570":{"probe_name":"mpi","function_name":"mca_topo_treematch_dist_graph_create.cold"},"9571":{"probe_name":"mpi","function_name":"mca_topo_treematch_query"},"9572":{"probe_name":"mpi","function_name":"mca_vprotocol_base_close"},"9573":{"probe_name":"mpi","function_name":"mca_vprotocol_base_open"},"9574":{"probe_name":"mpi","function_name":"mca_vprotocol_base_parasite"},"9575":{"probe_name":"mpi","function_name":"mca_vprotocol_base_request_parasite"},"9576":{"probe_name":"mpi","function_name":"mca_vprotocol_base_select"},"9577":{"probe_name":"mpi","function_name":"mca_vprotocol_base_set_include_list"},"9578":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_add_comm"},"9579":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_add_procs"},"9580":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_component_close"},"9581":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_component_finalize"},"9582":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_component_init"},"9583":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_component_open"},"9584":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_component_register"},"9585":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_del_comm"},"9586":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_del_procs"},"9587":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_dump"},"9588":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_enable"},"9589":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_iprobe"},"9590":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_irecv"},"9591":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_isend"},"9592":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_isend.cold"},"9593":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_probe"},"9594":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_recv"},"9595":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_request_free"},"9596":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_send"},"9597":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_send.cold"},"9598":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_start"},"9599":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_test"},"9600":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_test_all"},"9601":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_test_any"},"9602":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_test_some"},"9603":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_wait_any"},"9604":{"probe_name":"mpi","function_name":"mca_vprotocol_pessimist_wait_some"},"9605":{"probe_name":"mpi","function_name":"model_callback"},"9606":{"probe_name":"mpi","function_name":"module_constructor"},"9607":{"probe_name":"mpi","function_name":"module_constructor_1_0_0"},"9608":{"probe_name":"mpi","function_name":"mpi_aint_add_f90"},"9609":{"probe_name":"mpi","function_name":"mpi_aint_add_f90_"},"9610":{"probe_name":"mpi","function_name":"mpi_aint_add_f90__"},"9611":{"probe_name":"mpi","function_name":"mpi_aint_diff_f90"},"9612":{"probe_name":"mpi","function_name":"mpi_aint_diff_f90_"},"9613":{"probe_name":"mpi","function_name":"mpi_aint_diff_f90__"},"9614":{"probe_name":"mpi","function_name":"mpi_comm_dup_fn"},"9615":{"probe_name":"mpi","function_name":"mpi_comm_dup_fn_"},"9616":{"probe_name":"mpi","function_name":"mpi_comm_dup_fn__"},"9617":{"probe_name":"mpi","function_name":"mpi_comm_null_copy_fn"},"9618":{"probe_name":"mpi","function_name":"mpi_comm_null_copy_fn_"},"9619":{"probe_name":"mpi","function_name":"mpi_comm_null_copy_fn__"},"9620":{"probe_name":"mpi","function_name":"mpi_comm_null_delete_fn"},"9621":{"probe_name":"mpi","function_name":"mpi_comm_null_delete_fn_"},"9622":{"probe_name":"mpi","function_name":"mpi_comm_null_delete_fn__"},"9623":{"probe_name":"mpi","function_name":"mpi_conversion_fn_null"},"9624":{"probe_name":"mpi","function_name":"mpi_conversion_fn_null_"},"9625":{"probe_name":"mpi","function_name":"mpi_conversion_fn_null__"},"9626":{"probe_name":"mpi","function_name":"mpi_conversion_fn_null_f"},"9627":{"probe_name":"mpi","function_name":"mpi_dup_fn"},"9628":{"probe_name":"mpi","function_name":"mpi_dup_fn_"},"9629":{"probe_name":"mpi","function_name":"mpi_dup_fn__"},"9630":{"probe_name":"mpi","function_name":"mpi_null_copy_fn"},"9631":{"probe_name":"mpi","function_name":"mpi_null_copy_fn_"},"9632":{"probe_name":"mpi","function_name":"mpi_null_copy_fn__"},"9633":{"probe_name":"mpi","function_name":"mpi_null_delete_fn"},"9634":{"probe_name":"mpi","function_name":"mpi_null_delete_fn_"},"9635":{"probe_name":"mpi","function_name":"mpi_null_delete_fn__"},"9636":{"probe_name":"mpi","function_name":"mpi_type_dup_fn"},"9637":{"probe_name":"mpi","function_name":"mpi_type_dup_fn_"},"9638":{"probe_name":"mpi","function_name":"mpi_type_dup_fn__"},"9639":{"probe_name":"mpi","function_name":"mpi_type_null_copy_fn"},"9640":{"probe_name":"mpi","function_name":"mpi_type_null_copy_fn_"},"9641":{"probe_name":"mpi","function_name":"mpi_type_null_copy_fn__"},"9642":{"probe_name":"mpi","function_name":"mpi_type_null_delete_fn"},"9643":{"probe_name":"mpi","function_name":"mpi_type_null_delete_fn_"},"9644":{"probe_name":"mpi","function_name":"mpi_type_null_delete_fn__"},"9645":{"probe_name":"mpi","function_name":"mpi_win_dup_fn"},"9646":{"probe_name":"mpi","function_name":"mpi_win_dup_fn_"},"9647":{"probe_name":"mpi","function_name":"mpi_win_dup_fn__"},"9648":{"probe_name":"mpi","function_name":"mpi_win_null_copy_fn"},"9649":{"probe_name":"mpi","function_name":"mpi_win_null_copy_fn_"},"9650":{"probe_name":"mpi","function_name":"mpi_win_null_copy_fn__"},"9651":{"probe_name":"mpi","function_name":"mpi_win_null_delete_fn"},"9652":{"probe_name":"mpi","function_name":"mpi_win_null_delete_fn_"},"9653":{"probe_name":"mpi","function_name":"mpi_win_null_delete_fn__"},"9654":{"probe_name":"mpi","function_name":"mpi_wtick_f90"},"9655":{"probe_name":"mpi","function_name":"mpi_wtick_f90_"},"9656":{"probe_name":"mpi","function_name":"mpi_wtick_f90__"},"9657":{"probe_name":"mpi","function_name":"mpi_wtime_f90"},"9658":{"probe_name":"mpi","function_name":"mpi_wtime_f90_"},"9659":{"probe_name":"mpi","function_name":"mpi_wtime_f90__"},"9660":{"probe_name":"mpi","function_name":"msg_down"},"9661":{"probe_name":"mpi","function_name":"msg_down.cold"},"9662":{"probe_name":"mpi","function_name":"msg_up"},"9663":{"probe_name":"mpi","function_name":"mycompar"},"9664":{"probe_name":"mpi","function_name":"myfn"},"9665":{"probe_name":"mpi","function_name":"nb_leaves"},"9666":{"probe_name":"mpi","function_name":"nb_lines"},"9667":{"probe_name":"mpi","function_name":"nbc_allgather_init"},"9668":{"probe_name":"mpi","function_name":"nbc_allgather_inter_init"},"9669":{"probe_name":"mpi","function_name":"nbc_allgatherv_init"},"9670":{"probe_name":"mpi","function_name":"nbc_allgatherv_inter_init"},"9671":{"probe_name":"mpi","function_name":"nbc_allreduce_init"},"9672":{"probe_name":"mpi","function_name":"nbc_allreduce_init.cold"},"9673":{"probe_name":"mpi","function_name":"nbc_allreduce_inter_init"},"9674":{"probe_name":"mpi","function_name":"nbc_alltoall_init"},"9675":{"probe_name":"mpi","function_name":"nbc_alltoall_inter_init"},"9676":{"probe_name":"mpi","function_name":"nbc_alltoallv_init"},"9677":{"probe_name":"mpi","function_name":"nbc_alltoallv_inter_init"},"9678":{"probe_name":"mpi","function_name":"nbc_alltoallw_init"},"9679":{"probe_name":"mpi","function_name":"nbc_alltoallw_inter_init"},"9680":{"probe_name":"mpi","function_name":"nbc_barrier_init"},"9681":{"probe_name":"mpi","function_name":"nbc_barrier_inter_init"},"9682":{"probe_name":"mpi","function_name":"nbc_bcast_init"},"9683":{"probe_name":"mpi","function_name":"nbc_bcast_inter_init"},"9684":{"probe_name":"mpi","function_name":"nbc_exscan_init"},"9685":{"probe_name":"mpi","function_name":"nbc_gather_init"},"9686":{"probe_name":"mpi","function_name":"nbc_gather_inter_init"},"9687":{"probe_name":"mpi","function_name":"nbc_gatherv_init"},"9688":{"probe_name":"mpi","function_name":"nbc_gatherv_inter_init"},"9689":{"probe_name":"mpi","function_name":"nbc_neighbor_allgather_init"},"9690":{"probe_name":"mpi","function_name":"nbc_neighbor_allgatherv_init"},"9691":{"probe_name":"mpi","function_name":"nbc_neighbor_alltoall_init"},"9692":{"probe_name":"mpi","function_name":"nbc_neighbor_alltoallv_init"},"9693":{"probe_name":"mpi","function_name":"nbc_neighbor_alltoallw_init"},"9694":{"probe_name":"mpi","function_name":"nbc_reduce_init"},"9695":{"probe_name":"mpi","function_name":"nbc_reduce_inter_init"},"9696":{"probe_name":"mpi","function_name":"nbc_reduce_scatter_block_init"},"9697":{"probe_name":"mpi","function_name":"nbc_reduce_scatter_block_inter_init"},"9698":{"probe_name":"mpi","function_name":"nbc_reduce_scatter_init"},"9699":{"probe_name":"mpi","function_name":"nbc_reduce_scatter_inter_init"},"9700":{"probe_name":"mpi","function_name":"nbc_req_constructor"},"9701":{"probe_name":"mpi","function_name":"nbc_scan_init"},"9702":{"probe_name":"mpi","function_name":"nbc_scatter_init"},"9703":{"probe_name":"mpi","function_name":"nbc_scatter_inter_init"},"9704":{"probe_name":"mpi","function_name":"nbc_scatterv_init"},"9705":{"probe_name":"mpi","function_name":"nbc_scatterv_inter_init"},"9706":{"probe_name":"mpi","function_name":"nbc_schedule_constructor"},"9707":{"probe_name":"mpi","function_name":"nbc_schedule_destructor"},"9708":{"probe_name":"mpi","function_name":"next_bucket_elem"},"9709":{"probe_name":"mpi","function_name":"node_height"},"9710":{"probe_name":"mpi","function_name":"node_mheight"},"9711":{"probe_name":"mpi","function_name":"node_pathlen"},"9712":{"probe_name":"mpi","function_name":"ompi_attr_copy_all"},"9713":{"probe_name":"mpi","function_name":"ompi_attr_create_keyval"},"9714":{"probe_name":"mpi","function_name":"ompi_attr_create_keyval_aint"},"9715":{"probe_name":"mpi","function_name":"ompi_attr_create_keyval_fint"},"9716":{"probe_name":"mpi","function_name":"ompi_attr_create_keyval_impl"},"9717":{"probe_name":"mpi","function_name":"ompi_attr_create_predefined_keyvals"},"9718":{"probe_name":"mpi","function_name":"ompi_attr_delete"},"9719":{"probe_name":"mpi","function_name":"ompi_attr_delete_all"},"9720":{"probe_name":"mpi","function_name":"ompi_attr_delete_impl"},"9721":{"probe_name":"mpi","function_name":"ompi_attr_delete_predefined_keyvals_for_wm"},"9722":{"probe_name":"mpi","function_name":"ompi_attr_free_keyval"},"9723":{"probe_name":"mpi","function_name":"ompi_attr_free_predefined"},"9724":{"probe_name":"mpi","function_name":"ompi_attr_get_aint"},"9725":{"probe_name":"mpi","function_name":"ompi_attr_get_aint.cold"},"9726":{"probe_name":"mpi","function_name":"ompi_attr_get_c"},"9727":{"probe_name":"mpi","function_name":"ompi_attr_get_c.cold"},"9728":{"probe_name":"mpi","function_name":"ompi_attr_get_fint"},"9729":{"probe_name":"mpi","function_name":"ompi_attr_get_fint.cold"},"9730":{"probe_name":"mpi","function_name":"ompi_attr_get_ref"},"9731":{"probe_name":"mpi","function_name":"ompi_attr_put_ref"},"9732":{"probe_name":"mpi","function_name":"ompi_attr_set_aint"},"9733":{"probe_name":"mpi","function_name":"ompi_attr_set_c"},"9734":{"probe_name":"mpi","function_name":"ompi_attr_set_fint"},"9735":{"probe_name":"mpi","function_name":"ompi_attr_set_int"},"9736":{"probe_name":"mpi","function_name":"ompi_attr_set_predefined_keyvals_for_wm"},"9737":{"probe_name":"mpi","function_name":"ompi_attribute_keyval_construct"},"9738":{"probe_name":"mpi","function_name":"ompi_attribute_keyval_destruct"},"9739":{"probe_name":"mpi","function_name":"ompi_coll_adapt_bcast"},"9740":{"probe_name":"mpi","function_name":"ompi_coll_adapt_comm_query"},"9741":{"probe_name":"mpi","function_name":"ompi_coll_adapt_ibcast"},"9742":{"probe_name":"mpi","function_name":"ompi_coll_adapt_ibcast_fini"},"9743":{"probe_name":"mpi","function_name":"ompi_coll_adapt_ibcast_register"},"9744":{"probe_name":"mpi","function_name":"ompi_coll_adapt_init_query"},"9745":{"probe_name":"mpi","function_name":"ompi_coll_adapt_ireduce"},"9746":{"probe_name":"mpi","function_name":"ompi_coll_adapt_ireduce_fini"},"9747":{"probe_name":"mpi","function_name":"ompi_coll_adapt_ireduce_register"},"9748":{"probe_name":"mpi","function_name":"ompi_coll_adapt_module_cached_topology"},"9749":{"probe_name":"mpi","function_name":"ompi_coll_adapt_reduce"},"9750":{"probe_name":"mpi","function_name":"ompi_coll_adapt_request_free"},"9751":{"probe_name":"mpi","function_name":"ompi_coll_base_agree_noft"},"9752":{"probe_name":"mpi","function_name":"ompi_coll_base_allgather_intra_basic_linear"},"9753":{"probe_name":"mpi","function_name":"ompi_coll_base_allgather_intra_bruck"},"9754":{"probe_name":"mpi","function_name":"ompi_coll_base_allgather_intra_neighborexchange"},"9755":{"probe_name":"mpi","function_name":"ompi_coll_base_allgather_intra_recursivedoubling"},"9756":{"probe_name":"mpi","function_name":"ompi_coll_base_allgather_intra_ring"},"9757":{"probe_name":"mpi","function_name":"ompi_coll_base_allgather_intra_sparbit"},"9758":{"probe_name":"mpi","function_name":"ompi_coll_base_allgather_intra_two_procs"},"9759":{"probe_name":"mpi","function_name":"ompi_coll_base_allgatherv_intra_basic_default"},"9760":{"probe_name":"mpi","function_name":"ompi_coll_base_allgatherv_intra_bruck"},"9761":{"probe_name":"mpi","function_name":"ompi_coll_base_allgatherv_intra_neighborexchange"},"9762":{"probe_name":"mpi","function_name":"ompi_coll_base_allgatherv_intra_ring"},"9763":{"probe_name":"mpi","function_name":"ompi_coll_base_allgatherv_intra_sparbit"},"9764":{"probe_name":"mpi","function_name":"ompi_coll_base_allgatherv_intra_two_procs"},"9765":{"probe_name":"mpi","function_name":"ompi_coll_base_allreduce_intra_basic_linear"},"9766":{"probe_name":"mpi","function_name":"ompi_coll_base_allreduce_intra_nonoverlapping"},"9767":{"probe_name":"mpi","function_name":"ompi_coll_base_allreduce_intra_recursivedoubling"},"9768":{"probe_name":"mpi","function_name":"ompi_coll_base_allreduce_intra_redscat_allgather"},"9769":{"probe_name":"mpi","function_name":"ompi_coll_base_allreduce_intra_ring"},"9770":{"probe_name":"mpi","function_name":"ompi_coll_base_allreduce_intra_ring_segmented"},"9771":{"probe_name":"mpi","function_name":"ompi_coll_base_alltoall_intra_basic_linear"},"9772":{"probe_name":"mpi","function_name":"ompi_coll_base_alltoall_intra_bruck"},"9773":{"probe_name":"mpi","function_name":"ompi_coll_base_alltoall_intra_linear_sync"},"9774":{"probe_name":"mpi","function_name":"ompi_coll_base_alltoall_intra_pairwise"},"9775":{"probe_name":"mpi","function_name":"ompi_coll_base_alltoall_intra_two_procs"},"9776":{"probe_name":"mpi","function_name":"ompi_coll_base_alltoallv_intra_basic_linear"},"9777":{"probe_name":"mpi","function_name":"ompi_coll_base_alltoallv_intra_pairwise"},"9778":{"probe_name":"mpi","function_name":"ompi_coll_base_barrier_intra_basic_linear"},"9779":{"probe_name":"mpi","function_name":"ompi_coll_base_barrier_intra_bruck"},"9780":{"probe_name":"mpi","function_name":"ompi_coll_base_barrier_intra_doublering"},"9781":{"probe_name":"mpi","function_name":"ompi_coll_base_barrier_intra_recursivedoubling"},"9782":{"probe_name":"mpi","function_name":"ompi_coll_base_barrier_intra_tree"},"9783":{"probe_name":"mpi","function_name":"ompi_coll_base_barrier_intra_two_procs"},"9784":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_basic_linear"},"9785":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_binomial"},"9786":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_bintree"},"9787":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_chain"},"9788":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_generic"},"9789":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_knomial"},"9790":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_pipeline"},"9791":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_scatter_allgather"},"9792":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_scatter_allgather_ring"},"9793":{"probe_name":"mpi","function_name":"ompi_coll_base_bcast_intra_split_bintree"},"9794":{"probe_name":"mpi","function_name":"ompi_coll_base_comm_get_reqs"},"9795":{"probe_name":"mpi","function_name":"ompi_coll_base_exscan_intra_linear"},"9796":{"probe_name":"mpi","function_name":"ompi_coll_base_exscan_intra_recursivedoubling"},"9797":{"probe_name":"mpi","function_name":"ompi_coll_base_file_getnext_long"},"9798":{"probe_name":"mpi","function_name":"ompi_coll_base_file_getnext_size_t"},"9799":{"probe_name":"mpi","function_name":"ompi_coll_base_file_getnext_string"},"9800":{"probe_name":"mpi","function_name":"ompi_coll_base_file_peek_next_char_is"},"9801":{"probe_name":"mpi","function_name":"ompi_coll_base_file_peek_next_char_isdigit"},"9802":{"probe_name":"mpi","function_name":"ompi_coll_base_gather_intra_basic_linear"},"9803":{"probe_name":"mpi","function_name":"ompi_coll_base_gather_intra_binomial"},"9804":{"probe_name":"mpi","function_name":"ompi_coll_base_gather_intra_linear_sync"},"9805":{"probe_name":"mpi","function_name":"ompi_coll_base_iagree_noft"},"9806":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_generic"},"9807":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_intra_basic_linear"},"9808":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_intra_binary"},"9809":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_intra_binomial"},"9810":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_intra_chain"},"9811":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_intra_in_order_binary"},"9812":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_intra_pipeline"},"9813":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_intra_redscat_gather"},"9814":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_block_basic_linear"},"9815":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_block_intra_butterfly"},"9816":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_block_intra_recursivedoubling"},"9817":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_block_intra_recursivehalving"},"9818":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_intra_basic_recursivehalving"},"9819":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_intra_butterfly"},"9820":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_intra_nonoverlapping"},"9821":{"probe_name":"mpi","function_name":"ompi_coll_base_reduce_scatter_intra_ring"},"9822":{"probe_name":"mpi","function_name":"ompi_coll_base_retain_datatypes"},"9823":{"probe_name":"mpi","function_name":"ompi_coll_base_retain_datatypes_w"},"9824":{"probe_name":"mpi","function_name":"ompi_coll_base_retain_op"},"9825":{"probe_name":"mpi","function_name":"ompi_coll_base_scan_intra_linear"},"9826":{"probe_name":"mpi","function_name":"ompi_coll_base_scan_intra_recursivedoubling"},"9827":{"probe_name":"mpi","function_name":"ompi_coll_base_scatter_intra_basic_linear"},"9828":{"probe_name":"mpi","function_name":"ompi_coll_base_scatter_intra_binomial"},"9829":{"probe_name":"mpi","function_name":"ompi_coll_base_scatter_intra_linear_nb"},"9830":{"probe_name":"mpi","function_name":"ompi_coll_base_sendrecv_actual"},"9831":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_build_bmtree"},"9832":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_build_chain"},"9833":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_build_in_order_bintree"},"9834":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_build_in_order_bmtree"},"9835":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_build_kmtree"},"9836":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_build_tree"},"9837":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_destroy_tree"},"9838":{"probe_name":"mpi","function_name":"ompi_coll_base_topo_dump_tree"},"9839":{"probe_name":"mpi","function_name":"ompi_coll_han_reorder_gather"},"9840":{"probe_name":"mpi","function_name":"ompi_coll_han_request_free"},"9841":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_allgather_init"},"9842":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_allgather_inter_init"},"9843":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_allgatherv_init"},"9844":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_allgatherv_inter_init"},"9845":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_allreduce_init"},"9846":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_allreduce_inter_init"},"9847":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_alltoall_init"},"9848":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_alltoall_inter_init"},"9849":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_alltoallv_init"},"9850":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_alltoallv_inter_init"},"9851":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_alltoallw_init"},"9852":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_alltoallw_inter_init"},"9853":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_barrier_init"},"9854":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_barrier_inter_init"},"9855":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_bcast_init"},"9856":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_bcast_inter_init"},"9857":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_dict_destroy"},"9858":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_dict_itor_destroy"},"9859":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_dict_long_cmp"},"9860":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_dict_ptr_cmp"},"9861":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_dict_str_cmp"},"9862":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_dict_uint_cmp"},"9863":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_dict_ulong_cmp"},"9864":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_exscan_init"},"9865":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_gather_init"},"9866":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_gather_inter_init"},"9867":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_gatherv_init"},"9868":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_gatherv_inter_init"},"9869":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_dict_itor_new"},"9870":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_dict_new"},"9871":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_cdata"},"9872":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_data"},"9873":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_destroy"},"9874":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_first"},"9875":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_invalidate"},"9876":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_key"},"9877":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_last"},"9878":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_new"},"9879":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_next"},"9880":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_nextn"},"9881":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_prev"},"9882":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_prevn"},"9883":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_set_data"},"9884":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_itor_valid"},"9885":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_count"},"9886":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_destroy"},"9887":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_empty"},"9888":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_height"},"9889":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_insert"},"9890":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_max"},"9891":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_mheight"},"9892":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_min"},"9893":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_new"},"9894":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_pathlen"},"9895":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_probe"},"9896":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_remove"},"9897":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_search"},"9898":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_hb_tree_walk"},"9899":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iallgather"},"9900":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iallgather_inter"},"9901":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iallgatherv"},"9902":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iallgatherv_inter"},"9903":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iallreduce"},"9904":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iallreduce_inter"},"9905":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ialltoall"},"9906":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ialltoall_inter"},"9907":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ialltoallv"},"9908":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ialltoallv_inter"},"9909":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ialltoallw"},"9910":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ialltoallw_inter"},"9911":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ibarrier"},"9912":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ibarrier_inter"},"9913":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ibcast"},"9914":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ibcast_inter"},"9915":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iexscan"},"9916":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_igather"},"9917":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_igather_inter"},"9918":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_igatherv"},"9919":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_igatherv_inter"},"9920":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ineighbor_allgather"},"9921":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ineighbor_allgatherv"},"9922":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ineighbor_alltoall"},"9923":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ineighbor_alltoallv"},"9924":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ineighbor_alltoallw"},"9925":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ireduce"},"9926":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ireduce_inter"},"9927":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ireduce_scatter"},"9928":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ireduce_scatter_block"},"9929":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ireduce_scatter_block_inter"},"9930":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_ireduce_scatter_inter"},"9931":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iscan"},"9932":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iscatter"},"9933":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iscatter_inter"},"9934":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iscatterv"},"9935":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_iscatterv_inter"},"9936":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_neighbor_allgather_init"},"9937":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_neighbor_allgatherv_init"},"9938":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_neighbor_alltoall_init"},"9939":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_neighbor_alltoallv_init"},"9940":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_neighbor_alltoallw_init"},"9941":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_progress"},"9942":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_reduce_init"},"9943":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_reduce_inter_init"},"9944":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_reduce_scatter_block_init"},"9945":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_reduce_scatter_block_inter_init"},"9946":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_reduce_scatter_init"},"9947":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_reduce_scatter_inter_init"},"9948":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_scan_init"},"9949":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_scatter_init"},"9950":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_scatter_inter_init"},"9951":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_scatterv_init"},"9952":{"probe_name":"mpi","function_name":"ompi_coll_libnbc_scatterv_inter_init"},"9953":{"probe_name":"mpi","function_name":"ompi_coll_sm_lazy_enable"},"9954":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgather_intra_check_forced_init"},"9955":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgather_intra_dec_dynamic"},"9956":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgather_intra_dec_fixed"},"9957":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgather_intra_do_this"},"9958":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgatherv_intra_check_forced_init"},"9959":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgatherv_intra_dec_dynamic"},"9960":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgatherv_intra_dec_fixed"},"9961":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allgatherv_intra_do_this"},"9962":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allreduce_intra_check_forced_init"},"9963":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allreduce_intra_dec_dynamic"},"9964":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allreduce_intra_dec_fixed"},"9965":{"probe_name":"mpi","function_name":"ompi_coll_tuned_allreduce_intra_do_this"},"9966":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoall_intra_check_forced_init"},"9967":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoall_intra_dec_dynamic"},"9968":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoall_intra_dec_fixed"},"9969":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoall_intra_do_this"},"9970":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoallv_intra_check_forced_init"},"9971":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoallv_intra_dec_dynamic"},"9972":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoallv_intra_dec_fixed"},"9973":{"probe_name":"mpi","function_name":"ompi_coll_tuned_alltoallv_intra_do_this"},"9974":{"probe_name":"mpi","function_name":"ompi_coll_tuned_barrier_intra_check_forced_init"},"9975":{"probe_name":"mpi","function_name":"ompi_coll_tuned_barrier_intra_dec_dynamic"},"9976":{"probe_name":"mpi","function_name":"ompi_coll_tuned_barrier_intra_dec_fixed"},"9977":{"probe_name":"mpi","function_name":"ompi_coll_tuned_barrier_intra_do_this"},"9978":{"probe_name":"mpi","function_name":"ompi_coll_tuned_bcast_intra_check_forced_init"},"9979":{"probe_name":"mpi","function_name":"ompi_coll_tuned_bcast_intra_dec_dynamic"},"9980":{"probe_name":"mpi","function_name":"ompi_coll_tuned_bcast_intra_dec_fixed"},"9981":{"probe_name":"mpi","function_name":"ompi_coll_tuned_bcast_intra_do_this"},"9982":{"probe_name":"mpi","function_name":"ompi_coll_tuned_comm_query"},"9983":{"probe_name":"mpi","function_name":"ompi_coll_tuned_dump_alg_rule"},"9984":{"probe_name":"mpi","function_name":"ompi_coll_tuned_dump_all_rules"},"9985":{"probe_name":"mpi","function_name":"ompi_coll_tuned_dump_com_rule"},"9986":{"probe_name":"mpi","function_name":"ompi_coll_tuned_dump_msg_rule"},"9987":{"probe_name":"mpi","function_name":"ompi_coll_tuned_exscan_intra_check_forced_init"},"9988":{"probe_name":"mpi","function_name":"ompi_coll_tuned_exscan_intra_dec_dynamic"},"9989":{"probe_name":"mpi","function_name":"ompi_coll_tuned_exscan_intra_do_this"},"9990":{"probe_name":"mpi","function_name":"ompi_coll_tuned_forced_getvalues.isra.0"},"9991":{"probe_name":"mpi","function_name":"ompi_coll_tuned_free_all_rules"},"9992":{"probe_name":"mpi","function_name":"ompi_coll_tuned_free_coms_in_alg_rule"},"9993":{"probe_name":"mpi","function_name":"ompi_coll_tuned_free_msg_rules_in_com_rule"},"9994":{"probe_name":"mpi","function_name":"ompi_coll_tuned_gather_intra_check_forced_init"},"9995":{"probe_name":"mpi","function_name":"ompi_coll_tuned_gather_intra_dec_dynamic"},"9996":{"probe_name":"mpi","function_name":"ompi_coll_tuned_gather_intra_dec_fixed"},"9997":{"probe_name":"mpi","function_name":"ompi_coll_tuned_gather_intra_do_this"},"9998":{"probe_name":"mpi","function_name":"ompi_coll_tuned_get_com_rule_ptr"},"9999":{"probe_name":"mpi","function_name":"ompi_coll_tuned_get_target_method_params"},"10000":{"probe_name":"mpi","function_name":"ompi_coll_tuned_init_query"},"10001":{"probe_name":"mpi","function_name":"ompi_coll_tuned_mk_alg_rules"},"10002":{"probe_name":"mpi","function_name":"ompi_coll_tuned_mk_com_rules"},"10003":{"probe_name":"mpi","function_name":"ompi_coll_tuned_mk_msg_rules"},"10004":{"probe_name":"mpi","function_name":"ompi_coll_tuned_read_rules_config_file"},"10005":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_intra_check_forced_init"},"10006":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_intra_dec_dynamic"},"10007":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_intra_dec_fixed"},"10008":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_intra_do_this"},"10009":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_block_intra_check_forced_init"},"10010":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_block_intra_dec_dynamic"},"10011":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_block_intra_dec_fixed"},"10012":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_block_intra_do_this"},"10013":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_intra_check_forced_init"},"10014":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_intra_dec_dynamic"},"10015":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_intra_dec_fixed"},"10016":{"probe_name":"mpi","function_name":"ompi_coll_tuned_reduce_scatter_intra_do_this"},"10017":{"probe_name":"mpi","function_name":"ompi_coll_tuned_scan_intra_check_forced_init"},"10018":{"probe_name":"mpi","function_name":"ompi_coll_tuned_scan_intra_dec_dynamic"},"10019":{"probe_name":"mpi","function_name":"ompi_coll_tuned_scan_intra_do_this"},"10020":{"probe_name":"mpi","function_name":"ompi_coll_tuned_scatter_intra_check_forced_init"},"10021":{"probe_name":"mpi","function_name":"ompi_coll_tuned_scatter_intra_dec_dynamic"},"10022":{"probe_name":"mpi","function_name":"ompi_coll_tuned_scatter_intra_dec_fixed"},"10023":{"probe_name":"mpi","function_name":"ompi_coll_tuned_scatter_intra_do_this"},"10024":{"probe_name":"mpi","function_name":"ompi_comm_ack_failed_internal"},"10025":{"probe_name":"mpi","function_name":"ompi_comm_activate"},"10026":{"probe_name":"mpi","function_name":"ompi_comm_activate_nb"},"10027":{"probe_name":"mpi","function_name":"ompi_comm_activate_nb_complete"},"10028":{"probe_name":"mpi","function_name":"ompi_comm_allgather_emulate_intra"},"10029":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_bridged_reduce_complete"},"10030":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_bridged_xchng_complete"},"10031":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_context_construct"},"10032":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_context_destruct"},"10033":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_getnextcid"},"10034":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_group_broadcast"},"10035":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_group_nb"},"10036":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_group_recv_complete"},"10037":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_inter_bcast"},"10038":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_inter_leader_exchange"},"10039":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_inter_leader_reduce"},"10040":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_inter_nb"},"10041":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_intra_bridge_nb"},"10042":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_intra_nb"},"10043":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_intra_pmix_nb"},"10044":{"probe_name":"mpi","function_name":"ompi_comm_allreduce_pmix_reduce_complete"},"10045":{"probe_name":"mpi","function_name":"ompi_comm_assert_subscribe"},"10046":{"probe_name":"mpi","function_name":"ompi_comm_checkcid"},"10047":{"probe_name":"mpi","function_name":"ompi_comm_cid_init"},"10048":{"probe_name":"mpi","function_name":"ompi_comm_compare"},"10049":{"probe_name":"mpi","function_name":"ompi_comm_construct"},"10050":{"probe_name":"mpi","function_name":"ompi_comm_create"},"10051":{"probe_name":"mpi","function_name":"ompi_comm_create_from_group"},"10052":{"probe_name":"mpi","function_name":"ompi_comm_create_group"},"10053":{"probe_name":"mpi","function_name":"ompi_comm_create_w_info"},"10054":{"probe_name":"mpi","function_name":"ompi_comm_destruct"},"10055":{"probe_name":"mpi","function_name":"ompi_comm_determine_first"},"10056":{"probe_name":"mpi","function_name":"ompi_comm_determine_first_auto"},"10057":{"probe_name":"mpi","function_name":"ompi_comm_dump"},"10058":{"probe_name":"mpi","function_name":"ompi_comm_dup"},"10059":{"probe_name":"mpi","function_name":"ompi_comm_dup_fn_f"},"10060":{"probe_name":"mpi","function_name":"ompi_comm_dup_with_info"},"10061":{"probe_name":"mpi","function_name":"ompi_comm_enable"},"10062":{"probe_name":"mpi","function_name":"ompi_comm_failure_ack_internal"},"10063":{"probe_name":"mpi","function_name":"ompi_comm_failure_detector_finalize"},"10064":{"probe_name":"mpi","function_name":"ompi_comm_failure_detector_init"},"10065":{"probe_name":"mpi","function_name":"ompi_comm_failure_detector_register_params"},"10066":{"probe_name":"mpi","function_name":"ompi_comm_failure_detector_start"},"10067":{"probe_name":"mpi","function_name":"ompi_comm_failure_get_acked_internal"},"10068":{"probe_name":"mpi","function_name":"ompi_comm_failure_propagate"},"10069":{"probe_name":"mpi","function_name":"ompi_comm_failure_propagator_finalize"},"10070":{"probe_name":"mpi","function_name":"ompi_comm_failure_propagator_init"},"10071":{"probe_name":"mpi","function_name":"ompi_comm_failure_propagator_local"},"10072":{"probe_name":"mpi","function_name":"ompi_comm_failure_propagator_register_params"},"10073":{"probe_name":"mpi","function_name":"ompi_comm_finalize"},"10074":{"probe_name":"mpi","function_name":"ompi_comm_free"},"10075":{"probe_name":"mpi","function_name":"ompi_comm_free.localalias"},"10076":{"probe_name":"mpi","function_name":"ompi_comm_ft_allreduce_agree_completion"},"10077":{"probe_name":"mpi","function_name":"ompi_comm_ft_allreduce_inter_nb"},"10078":{"probe_name":"mpi","function_name":"ompi_comm_ft_allreduce_intra_nb"},"10079":{"probe_name":"mpi","function_name":"ompi_comm_ft_allreduce_intra_pmix_nb"},"10080":{"probe_name":"mpi","function_name":"ompi_comm_get_failed_internal"},"10081":{"probe_name":"mpi","function_name":"ompi_comm_get_remote_cid_from_pmix"},"10082":{"probe_name":"mpi","function_name":"ompi_comm_get_rprocs"},"10083":{"probe_name":"mpi","function_name":"ompi_comm_group"},"10084":{"probe_name":"mpi","function_name":"ompi_comm_idup"},"10085":{"probe_name":"mpi","function_name":"ompi_comm_idup_getcid"},"10086":{"probe_name":"mpi","function_name":"ompi_comm_idup_with_info"},"10087":{"probe_name":"mpi","function_name":"ompi_comm_idup_with_info_activate"},"10088":{"probe_name":"mpi","function_name":"ompi_comm_idup_with_info_finish"},"10089":{"probe_name":"mpi","function_name":"ompi_comm_init"},"10090":{"probe_name":"mpi","function_name":"ompi_comm_init_mpi3"},"10091":{"probe_name":"mpi","function_name":"ompi_comm_is_proc_active"},"10092":{"probe_name":"mpi","function_name":"ompi_comm_ishrink_check_activate"},"10093":{"probe_name":"mpi","function_name":"ompi_comm_ishrink_check_agree"},"10094":{"probe_name":"mpi","function_name":"ompi_comm_ishrink_check_cid"},"10095":{"probe_name":"mpi","function_name":"ompi_comm_ishrink_check_setrank"},"10096":{"probe_name":"mpi","function_name":"ompi_comm_ishrink_internal"},"10097":{"probe_name":"mpi","function_name":"ompi_comm_nextcid"},"10098":{"probe_name":"mpi","function_name":"ompi_comm_nextcid_check_flag"},"10099":{"probe_name":"mpi","function_name":"ompi_comm_nextcid_nb"},"10100":{"probe_name":"mpi","function_name":"ompi_comm_null_copy_fn_f"},"10101":{"probe_name":"mpi","function_name":"ompi_comm_null_delete_fn_f"},"10102":{"probe_name":"mpi","function_name":"ompi_comm_print_cid"},"10103":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_bmg"},"10104":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_bml_recv_cb"},"10105":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_finalize"},"10106":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_init"},"10107":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_n2"},"10108":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_null"},"10109":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_register_cb_type"},"10110":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_register_params"},"10111":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_send_msg"},"10112":{"probe_name":"mpi","function_name":"ompi_comm_rbcast_unregister_cb_type"},"10113":{"probe_name":"mpi","function_name":"ompi_comm_request_cancel"},"10114":{"probe_name":"mpi","function_name":"ompi_comm_request_construct"},"10115":{"probe_name":"mpi","function_name":"ompi_comm_request_destruct"},"10116":{"probe_name":"mpi","function_name":"ompi_comm_request_fini"},"10117":{"probe_name":"mpi","function_name":"ompi_comm_request_free"},"10118":{"probe_name":"mpi","function_name":"ompi_comm_request_get"},"10119":{"probe_name":"mpi","function_name":"ompi_comm_request_init"},"10120":{"probe_name":"mpi","function_name":"ompi_comm_request_progress"},"10121":{"probe_name":"mpi","function_name":"ompi_comm_request_progress.cold"},"10122":{"probe_name":"mpi","function_name":"ompi_comm_request_return"},"10123":{"probe_name":"mpi","function_name":"ompi_comm_request_schedule_append"},"10124":{"probe_name":"mpi","function_name":"ompi_comm_request_schedule_append_w_flags"},"10125":{"probe_name":"mpi","function_name":"ompi_comm_request_start"},"10126":{"probe_name":"mpi","function_name":"ompi_comm_revoke_finalize"},"10127":{"probe_name":"mpi","function_name":"ompi_comm_revoke_init"},"10128":{"probe_name":"mpi","function_name":"ompi_comm_revoke_internal"},"10129":{"probe_name":"mpi","function_name":"ompi_comm_revoke_local"},"10130":{"probe_name":"mpi","function_name":"ompi_comm_set"},"10131":{"probe_name":"mpi","function_name":"ompi_comm_set_active_poll"},"10132":{"probe_name":"mpi","function_name":"ompi_comm_set_allow_overtake"},"10133":{"probe_name":"mpi","function_name":"ompi_comm_set_exact_length"},"10134":{"probe_name":"mpi","function_name":"ompi_comm_set_lazy_barrier"},"10135":{"probe_name":"mpi","function_name":"ompi_comm_set_name"},"10136":{"probe_name":"mpi","function_name":"ompi_comm_set_nb"},"10137":{"probe_name":"mpi","function_name":"ompi_comm_set_no_any_source"},"10138":{"probe_name":"mpi","function_name":"ompi_comm_set_no_any_tag"},"10139":{"probe_name":"mpi","function_name":"ompi_comm_set_rank_failed"},"10140":{"probe_name":"mpi","function_name":"ompi_comm_shrink_internal"},"10141":{"probe_name":"mpi","function_name":"ompi_comm_split"},"10142":{"probe_name":"mpi","function_name":"ompi_comm_split_type"},"10143":{"probe_name":"mpi","function_name":"ompi_comm_split_type_core"},"10144":{"probe_name":"mpi","function_name":"ompi_comm_split_type_get_part.constprop.0"},"10145":{"probe_name":"mpi","function_name":"ompi_comm_split_verify"},"10146":{"probe_name":"mpi","function_name":"ompi_comm_split_with_info"},"10147":{"probe_name":"mpi","function_name":"ompi_comm_start_detector"},"10148":{"probe_name":"mpi","function_name":"ompi_datatype_copy_args"},"10149":{"probe_name":"mpi","function_name":"ompi_datatype_create"},"10150":{"probe_name":"mpi","function_name":"ompi_datatype_create_contiguous"},"10151":{"probe_name":"mpi","function_name":"ompi_datatype_create_darray"},"10152":{"probe_name":"mpi","function_name":"ompi_datatype_create_from_packed_description"},"10153":{"probe_name":"mpi","function_name":"ompi_datatype_create_hindexed"},"10154":{"probe_name":"mpi","function_name":"ompi_datatype_create_hindexed_block"},"10155":{"probe_name":"mpi","function_name":"ompi_datatype_create_hvector"},"10156":{"probe_name":"mpi","function_name":"ompi_datatype_create_indexed"},"10157":{"probe_name":"mpi","function_name":"ompi_datatype_create_indexed_block"},"10158":{"probe_name":"mpi","function_name":"ompi_datatype_create_struct"},"10159":{"probe_name":"mpi","function_name":"ompi_datatype_create_subarray"},"10160":{"probe_name":"mpi","function_name":"ompi_datatype_create_vector"},"10161":{"probe_name":"mpi","function_name":"ompi_datatype_default_convertors_fini"},"10162":{"probe_name":"mpi","function_name":"ompi_datatype_default_convertors_init"},"10163":{"probe_name":"mpi","function_name":"ompi_datatype_destroy"},"10164":{"probe_name":"mpi","function_name":"ompi_datatype_dump"},"10165":{"probe_name":"mpi","function_name":"ompi_datatype_duplicate"},"10166":{"probe_name":"mpi","function_name":"ompi_datatype_finalize"},"10167":{"probe_name":"mpi","function_name":"ompi_datatype_get_args"},"10168":{"probe_name":"mpi","function_name":"ompi_datatype_get_elements"},"10169":{"probe_name":"mpi","function_name":"ompi_datatype_get_pack_description"},"10170":{"probe_name":"mpi","function_name":"ompi_datatype_get_single_predefined_type_from_args"},"10171":{"probe_name":"mpi","function_name":"ompi_datatype_get_single_predefined_type_from_args.localalias"},"10172":{"probe_name":"mpi","function_name":"ompi_datatype_init"},"10173":{"probe_name":"mpi","function_name":"ompi_datatype_init.cold"},"10174":{"probe_name":"mpi","function_name":"ompi_datatype_match_size"},"10175":{"probe_name":"mpi","function_name":"ompi_datatype_match_size.cold"},"10176":{"probe_name":"mpi","function_name":"ompi_datatype_pack_description_length"},"10177":{"probe_name":"mpi","function_name":"ompi_datatype_pack_external"},"10178":{"probe_name":"mpi","function_name":"ompi_datatype_pack_external_size"},"10179":{"probe_name":"mpi","function_name":"ompi_datatype_print_args"},"10180":{"probe_name":"mpi","function_name":"ompi_datatype_release_args"},"10181":{"probe_name":"mpi","function_name":"ompi_datatype_set_args"},"10182":{"probe_name":"mpi","function_name":"ompi_datatype_sndrcv"},"10183":{"probe_name":"mpi","function_name":"ompi_datatype_unpack_external"},"10184":{"probe_name":"mpi","function_name":"ompi_debugger_setup_dlls"},"10185":{"probe_name":"mpi","function_name":"ompi_dpm_close_port"},"10186":{"probe_name":"mpi","function_name":"ompi_dpm_connect_accept"},"10187":{"probe_name":"mpi","function_name":"ompi_dpm_disconnect"},"10188":{"probe_name":"mpi","function_name":"ompi_dpm_dyn_finalize"},"10189":{"probe_name":"mpi","function_name":"ompi_dpm_dyn_init"},"10190":{"probe_name":"mpi","function_name":"ompi_dpm_init"},"10191":{"probe_name":"mpi","function_name":"ompi_dpm_mark_dyncomm"},"10192":{"probe_name":"mpi","function_name":"ompi_dpm_open_port"},"10193":{"probe_name":"mpi","function_name":"ompi_dpm_spawn"},"10194":{"probe_name":"mpi","function_name":"ompi_dup_fn_f"},"10195":{"probe_name":"mpi","function_name":"ompi_errcode_get_mpi_code.part.0"},"10196":{"probe_name":"mpi","function_name":"ompi_errcode_get_mpi_code.part.0.cold"},"10197":{"probe_name":"mpi","function_name":"ompi_errcode_intern_construct"},"10198":{"probe_name":"mpi","function_name":"ompi_errcode_intern_destruct"},"10199":{"probe_name":"mpi","function_name":"ompi_errcode_intern_finalize"},"10200":{"probe_name":"mpi","function_name":"ompi_errcode_intern_init"},"10201":{"probe_name":"mpi","function_name":"ompi_errhandler_callback"},"10202":{"probe_name":"mpi","function_name":"ompi_errhandler_construct"},"10203":{"probe_name":"mpi","function_name":"ompi_errhandler_create"},"10204":{"probe_name":"mpi","function_name":"ompi_errhandler_destruct"},"10205":{"probe_name":"mpi","function_name":"ompi_errhandler_event_cb"},"10206":{"probe_name":"mpi","function_name":"ompi_errhandler_finalize"},"10207":{"probe_name":"mpi","function_name":"ompi_errhandler_free"},"10208":{"probe_name":"mpi","function_name":"ompi_errhandler_init"},"10209":{"probe_name":"mpi","function_name":"ompi_errhandler_invoke"},"10210":{"probe_name":"mpi","function_name":"ompi_errhandler_proc_failed_internal"},"10211":{"probe_name":"mpi","function_name":"ompi_errhandler_registration_callback"},"10212":{"probe_name":"mpi","function_name":"ompi_errhandler_request_invoke"},"10213":{"probe_name":"mpi","function_name":"ompi_errhandler_request_invoke.cold"},"10214":{"probe_name":"mpi","function_name":"ompi_fcoll_base_coll_allgather_array"},"10215":{"probe_name":"mpi","function_name":"ompi_fcoll_base_coll_allgatherv_array"},"10216":{"probe_name":"mpi","function_name":"ompi_fcoll_base_coll_bcast_array"},"10217":{"probe_name":"mpi","function_name":"ompi_fcoll_base_coll_gather_array"},"10218":{"probe_name":"mpi","function_name":"ompi_fcoll_base_coll_gatherv_array"},"10219":{"probe_name":"mpi","function_name":"ompi_fcoll_base_coll_scatterv_array"},"10220":{"probe_name":"mpi","function_name":"ompi_fcoll_base_sort_iovec"},"10221":{"probe_name":"mpi","function_name":"ompi_file_close"},"10222":{"probe_name":"mpi","function_name":"ompi_file_finalize"},"10223":{"probe_name":"mpi","function_name":"ompi_file_init"},"10224":{"probe_name":"mpi","function_name":"ompi_file_open"},"10225":{"probe_name":"mpi","function_name":"ompi_fortran_argv_blank_f2c"},"10226":{"probe_name":"mpi","function_name":"ompi_fortran_argv_count_f2c"},"10227":{"probe_name":"mpi","function_name":"ompi_fortran_multiple_argvs_f2c"},"10228":{"probe_name":"mpi","function_name":"ompi_fortran_string_c2f"},"10229":{"probe_name":"mpi","function_name":"ompi_fortran_string_f2c"},"10230":{"probe_name":"mpi","function_name":"ompi_grequest_cancel"},"10231":{"probe_name":"mpi","function_name":"ompi_grequest_complete"},"10232":{"probe_name":"mpi","function_name":"ompi_grequest_construct"},"10233":{"probe_name":"mpi","function_name":"ompi_grequest_destruct"},"10234":{"probe_name":"mpi","function_name":"ompi_grequest_free"},"10235":{"probe_name":"mpi","function_name":"ompi_grequest_invoke_query"},"10236":{"probe_name":"mpi","function_name":"ompi_grequest_start"},"10237":{"probe_name":"mpi","function_name":"ompi_group_allocate"},"10238":{"probe_name":"mpi","function_name":"ompi_group_allocate_bmap"},"10239":{"probe_name":"mpi","function_name":"ompi_group_allocate_plist_w_procs"},"10240":{"probe_name":"mpi","function_name":"ompi_group_allocate_sporadic"},"10241":{"probe_name":"mpi","function_name":"ompi_group_allocate_strided"},"10242":{"probe_name":"mpi","function_name":"ompi_group_calc_bmap"},"10243":{"probe_name":"mpi","function_name":"ompi_group_calc_plist"},"10244":{"probe_name":"mpi","function_name":"ompi_group_calc_sporadic"},"10245":{"probe_name":"mpi","function_name":"ompi_group_calc_strided"},"10246":{"probe_name":"mpi","function_name":"ompi_group_compare"},"10247":{"probe_name":"mpi","function_name":"ompi_group_construct"},"10248":{"probe_name":"mpi","function_name":"ompi_group_count_local_peers"},"10249":{"probe_name":"mpi","function_name":"ompi_group_decrement_proc_count"},"10250":{"probe_name":"mpi","function_name":"ompi_group_dense_overlap"},"10251":{"probe_name":"mpi","function_name":"ompi_group_destruct"},"10252":{"probe_name":"mpi","function_name":"ompi_group_difference"},"10253":{"probe_name":"mpi","function_name":"ompi_group_div_ceil"},"10254":{"probe_name":"mpi","function_name":"ompi_group_dump"},"10255":{"probe_name":"mpi","function_name":"ompi_group_excl"},"10256":{"probe_name":"mpi","function_name":"ompi_group_finalize"},"10257":{"probe_name":"mpi","function_name":"ompi_group_flatten"},"10258":{"probe_name":"mpi","function_name":"ompi_group_free"},"10259":{"probe_name":"mpi","function_name":"ompi_group_from_pset"},"10260":{"probe_name":"mpi","function_name":"ompi_group_have_remote_peers"},"10261":{"probe_name":"mpi","function_name":"ompi_group_incl"},"10262":{"probe_name":"mpi","function_name":"ompi_group_incl_bmap"},"10263":{"probe_name":"mpi","function_name":"ompi_group_incl_plist"},"10264":{"probe_name":"mpi","function_name":"ompi_group_incl_spor"},"10265":{"probe_name":"mpi","function_name":"ompi_group_incl_strided"},"10266":{"probe_name":"mpi","function_name":"ompi_group_increment_proc_count"},"10267":{"probe_name":"mpi","function_name":"ompi_group_init"},"10268":{"probe_name":"mpi","function_name":"ompi_group_intersection"},"10269":{"probe_name":"mpi","function_name":"ompi_group_minloc"},"10270":{"probe_name":"mpi","function_name":"ompi_group_overlap"},"10271":{"probe_name":"mpi","function_name":"ompi_group_range_excl"},"10272":{"probe_name":"mpi","function_name":"ompi_group_range_incl"},"10274":{"probe_name":"mpi","function_name":"ompi_group_translate_ranks"},"10275":{"probe_name":"mpi","function_name":"ompi_group_translate_ranks_bmap"},"10276":{"probe_name":"mpi","function_name":"ompi_group_translate_ranks_bmap_reverse"},"10277":{"probe_name":"mpi","function_name":"ompi_group_translate_ranks_sporadic"},"10278":{"probe_name":"mpi","function_name":"ompi_group_translate_ranks_sporadic_reverse"},"10279":{"probe_name":"mpi","function_name":"ompi_group_translate_ranks_strided"},"10280":{"probe_name":"mpi","function_name":"ompi_group_translate_ranks_strided_reverse"},"10281":{"probe_name":"mpi","function_name":"ompi_group_union"},"10282":{"probe_name":"mpi","function_name":"ompi_hook_base_close"},"10283":{"probe_name":"mpi","function_name":"ompi_hook_base_deregister_callbacks"},"10284":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_finalize_bottom"},"10285":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_finalize_top"},"10286":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_finalized_bottom"},"10287":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_finalized_top"},"10288":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_init_bottom"},"10289":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_init_error"},"10290":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_init_thread_bottom"},"10291":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_init_thread_top"},"10292":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_init_top"},"10293":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_init_top_post_opal"},"10294":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_initialized_bottom"},"10295":{"probe_name":"mpi","function_name":"ompi_hook_base_mpi_initialized_top"},"10296":{"probe_name":"mpi","function_name":"ompi_hook_base_open"},"10297":{"probe_name":"mpi","function_name":"ompi_hook_base_register"},"10298":{"probe_name":"mpi","function_name":"ompi_hook_base_register_callbacks"},"10299":{"probe_name":"mpi","function_name":"ompi_hook_comm_method_component_close"},"10300":{"probe_name":"mpi","function_name":"ompi_hook_comm_method_component_open"},"10301":{"probe_name":"mpi","function_name":"ompi_hook_comm_method_component_register"},"10302":{"probe_name":"mpi","function_name":"ompi_hook_comm_method_mpi_finalize_top"},"10303":{"probe_name":"mpi","function_name":"ompi_hook_comm_method_mpi_init_bottom"},"10304":{"probe_name":"mpi","function_name":"ompi_info_allocate"},"10305":{"probe_name":"mpi","function_name":"ompi_info_close_components"},"10306":{"probe_name":"mpi","function_name":"ompi_info_delete"},"10307":{"probe_name":"mpi","function_name":"ompi_info_dup"},"10308":{"probe_name":"mpi","function_name":"ompi_info_free"},"10309":{"probe_name":"mpi","function_name":"ompi_info_get"},"10310":{"probe_name":"mpi","function_name":"ompi_info_get_bool"},"10311":{"probe_name":"mpi","function_name":"ompi_info_get_nkeys"},"10312":{"probe_name":"mpi","function_name":"ompi_info_get_nthkey"},"10313":{"probe_name":"mpi","function_name":"ompi_info_get_value_enum"},"10314":{"probe_name":"mpi","function_name":"ompi_info_get_valuelen"},"10315":{"probe_name":"mpi","function_name":"ompi_info_register_framework_params"},"10316":{"probe_name":"mpi","function_name":"ompi_info_register_types"},"10317":{"probe_name":"mpi","function_name":"ompi_info_set"},"10318":{"probe_name":"mpi","function_name":"ompi_info_set_value_enum"},"10319":{"probe_name":"mpi","function_name":"ompi_info_show_ompi_version"},"10320":{"probe_name":"mpi","function_name":"ompi_init_preconnect_mpi"},"10321":{"probe_name":"mpi","function_name":"ompi_initial_errhandler_init"},"10322":{"probe_name":"mpi","function_name":"ompi_instance_construct"},"10323":{"probe_name":"mpi","function_name":"ompi_instance_destruct"},"10324":{"probe_name":"mpi","function_name":"ompi_instance_get_nth_pset"},"10325":{"probe_name":"mpi","function_name":"ompi_instance_get_num_psets"},"10326":{"probe_name":"mpi","function_name":"ompi_instance_get_num_psets_complete"},"10327":{"probe_name":"mpi","function_name":"ompi_instance_get_pset_info"},"10328":{"probe_name":"mpi","function_name":"ompi_instance_group_pmix_pset"},"10329":{"probe_name":"mpi","function_name":"ompi_instance_group_shared"},"10330":{"probe_name":"mpi","function_name":"ompi_instance_print_error.part.0"},"10331":{"probe_name":"mpi","function_name":"ompi_instance_refresh_pmix_psets"},"10332":{"probe_name":"mpi","function_name":"ompi_intercomm_create"},"10333":{"probe_name":"mpi","function_name":"ompi_intercomm_create_from_groups"},"10334":{"probe_name":"mpi","function_name":"ompi_interlib_declare"},"10335":{"probe_name":"mpi","function_name":"ompi_io_ompio_generate_current_file_view"},"10336":{"probe_name":"mpi","function_name":"ompi_io_ompio_generate_current_file_view.cold"},"10337":{"probe_name":"mpi","function_name":"ompi_io_ompio_sort_offlen"},"10338":{"probe_name":"mpi","function_name":"ompi_isendrecv_complete_func"},"10339":{"probe_name":"mpi","function_name":"ompi_isendrecv_context_constructor"},"10340":{"probe_name":"mpi","function_name":"ompi_isendrecv_context_destructor"},"10341":{"probe_name":"mpi","function_name":"ompi_isendrecv_replace_complete_func"},"10342":{"probe_name":"mpi","function_name":"ompi_message_constructor"},"10343":{"probe_name":"mpi","function_name":"ompi_message_finalize"},"10344":{"probe_name":"mpi","function_name":"ompi_message_init"},"10345":{"probe_name":"mpi","function_name":"ompi_mirror_perm"},"10346":{"probe_name":"mpi","function_name":"ompi_mpi_abort"},"10347":{"probe_name":"mpi","function_name":"ompi_mpi_dynamics_disable"},"10348":{"probe_name":"mpi","function_name":"ompi_mpi_dynamics_finalize"},"10349":{"probe_name":"mpi","function_name":"ompi_mpi_dynamics_is_enabled"},"10350":{"probe_name":"mpi","function_name":"ompi_mpi_errclass_add"},"10351":{"probe_name":"mpi","function_name":"ompi_mpi_errcode_add"},"10352":{"probe_name":"mpi","function_name":"ompi_mpi_errcode_construct"},"10353":{"probe_name":"mpi","function_name":"ompi_mpi_errcode_destruct"},"10354":{"probe_name":"mpi","function_name":"ompi_mpi_errcode_finalize"},"10355":{"probe_name":"mpi","function_name":"ompi_mpi_errcode_init"},"10356":{"probe_name":"mpi","function_name":"ompi_mpi_errnum_add_string"},"10357":{"probe_name":"mpi","function_name":"ompi_mpi_errors_abort_comm_handler"},"10358":{"probe_name":"mpi","function_name":"ompi_mpi_errors_abort_file_handler"},"10359":{"probe_name":"mpi","function_name":"ompi_mpi_errors_abort_win_handler"},"10360":{"probe_name":"mpi","function_name":"ompi_mpi_errors_are_fatal_comm_handler"},"10361":{"probe_name":"mpi","function_name":"ompi_mpi_errors_are_fatal_file_handler"},"10362":{"probe_name":"mpi","function_name":"ompi_mpi_errors_are_fatal_instance_handler"},"10363":{"probe_name":"mpi","function_name":"ompi_mpi_errors_are_fatal_win_handler"},"10364":{"probe_name":"mpi","function_name":"ompi_mpi_errors_return_comm_handler"},"10365":{"probe_name":"mpi","function_name":"ompi_mpi_errors_return_file_handler"},"10366":{"probe_name":"mpi","function_name":"ompi_mpi_errors_return_instance_handler"},"10367":{"probe_name":"mpi","function_name":"ompi_mpi_errors_return_win_handler"},"10368":{"probe_name":"mpi","function_name":"ompi_mpi_finalize"},"10369":{"probe_name":"mpi","function_name":"ompi_mpi_init"},"10370":{"probe_name":"mpi","function_name":"ompi_mpi_instance_cleanup_pml"},"10371":{"probe_name":"mpi","function_name":"ompi_mpi_instance_finalize"},"10372":{"probe_name":"mpi","function_name":"ompi_mpi_instance_finalize_common"},"10373":{"probe_name":"mpi","function_name":"ompi_mpi_instance_init"},"10374":{"probe_name":"mpi","function_name":"ompi_mpi_instance_init_common"},"10375":{"probe_name":"mpi","function_name":"ompi_mpi_instance_release"},"10376":{"probe_name":"mpi","function_name":"ompi_mpi_instance_retain"},"10377":{"probe_name":"mpi","function_name":"ompi_mpi_register_params"},"10378":{"probe_name":"mpi","function_name":"ompi_mpi_thread_level"},"10379":{"probe_name":"mpi","function_name":"ompi_mpiext_fini"},"10380":{"probe_name":"mpi","function_name":"ompi_mpiext_init"},"10381":{"probe_name":"mpi","function_name":"ompi_mpiinfo_finalize"},"10382":{"probe_name":"mpi","function_name":"ompi_mpiinfo_init"},"10383":{"probe_name":"mpi","function_name":"ompi_mpiinfo_init_env"},"10384":{"probe_name":"mpi","function_name":"ompi_mpit_lock"},"10385":{"probe_name":"mpi","function_name":"ompi_mpit_unlock"},"10386":{"probe_name":"mpi","function_name":"ompi_mtl_base_close"},"10387":{"probe_name":"mpi","function_name":"ompi_mtl_base_select"},"10388":{"probe_name":"mpi","function_name":"ompi_null_copy_fn_f"},"10389":{"probe_name":"mpi","function_name":"ompi_null_delete_fn_f"},"10390":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_add_double_avx"},"10391":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_add_double_avx2"},"10392":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_add_double_avx512"},"10393":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_add_float_avx"},"10394":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_add_float_avx2"},"10395":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_add_float_avx512"},"10396":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int16_t_avx"},"10397":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int16_t_avx2"},"10398":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int16_t_avx512"},"10399":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int32_t_avx"},"10400":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int32_t_avx2"},"10401":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int32_t_avx512"},"10402":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int64_t_avx"},"10403":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int64_t_avx2"},"10404":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int64_t_avx512"},"10405":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int8_t_avx"},"10406":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int8_t_avx2"},"10407":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_int8_t_avx512"},"10408":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint16_t_avx"},"10409":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint16_t_avx2"},"10410":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint16_t_avx512"},"10411":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint32_t_avx"},"10412":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint32_t_avx2"},"10413":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint32_t_avx512"},"10414":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint64_t_avx"},"10415":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint64_t_avx2"},"10416":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint64_t_avx512"},"10417":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint8_t_avx"},"10418":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint8_t_avx2"},"10419":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_band_uint8_t_avx512"},"10420":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int16_t_avx"},"10421":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int16_t_avx2"},"10422":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int16_t_avx512"},"10423":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int32_t_avx"},"10424":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int32_t_avx2"},"10425":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int32_t_avx512"},"10426":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int64_t_avx"},"10427":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int64_t_avx2"},"10428":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int64_t_avx512"},"10429":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int8_t_avx"},"10430":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int8_t_avx2"},"10431":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_int8_t_avx512"},"10432":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint16_t_avx"},"10433":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint16_t_avx2"},"10434":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint16_t_avx512"},"10435":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint32_t_avx"},"10436":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint32_t_avx2"},"10437":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint32_t_avx512"},"10438":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint64_t_avx"},"10439":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint64_t_avx2"},"10440":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint64_t_avx512"},"10441":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint8_t_avx"},"10442":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint8_t_avx2"},"10443":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bor_uint8_t_avx512"},"10444":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int16_t_avx"},"10445":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int16_t_avx2"},"10446":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int16_t_avx512"},"10447":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int32_t_avx"},"10448":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int32_t_avx2"},"10449":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int32_t_avx512"},"10450":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int64_t_avx"},"10451":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int64_t_avx2"},"10452":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int64_t_avx512"},"10453":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int8_t_avx"},"10454":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int8_t_avx2"},"10455":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_int8_t_avx512"},"10456":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint16_t_avx"},"10457":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint16_t_avx2"},"10458":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint16_t_avx512"},"10459":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint32_t_avx"},"10460":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint32_t_avx2"},"10461":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint32_t_avx512"},"10462":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint64_t_avx"},"10463":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint64_t_avx2"},"10464":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint64_t_avx512"},"10465":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint8_t_avx"},"10466":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint8_t_avx2"},"10467":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_bxor_uint8_t_avx512"},"10468":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_double_avx"},"10469":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_double_avx2"},"10470":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_double_avx512"},"10471":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_float_avx"},"10472":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_float_avx2"},"10473":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_float_avx512"},"10474":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int16_t_avx"},"10475":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int16_t_avx2"},"10476":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int16_t_avx512"},"10477":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int32_t_avx"},"10478":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int32_t_avx2"},"10479":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int32_t_avx512"},"10480":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int64_t_avx512"},"10481":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int8_t_avx"},"10482":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int8_t_avx2"},"10483":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_int8_t_avx512"},"10484":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint16_t_avx"},"10485":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint16_t_avx2"},"10486":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint16_t_avx512"},"10487":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint32_t_avx"},"10488":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint32_t_avx2"},"10489":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint32_t_avx512"},"10490":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint64_t_avx512"},"10491":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint8_t_avx"},"10492":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint8_t_avx2"},"10493":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_max_uint8_t_avx512"},"10494":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_double_avx"},"10495":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_double_avx2"},"10496":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_double_avx512"},"10497":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_float_avx"},"10498":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_float_avx2"},"10499":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_float_avx512"},"10500":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int16_t_avx"},"10501":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int16_t_avx2"},"10502":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int16_t_avx512"},"10503":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int32_t_avx"},"10504":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int32_t_avx2"},"10505":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int32_t_avx512"},"10506":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int64_t_avx512"},"10507":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int8_t_avx"},"10508":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int8_t_avx2"},"10509":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_int8_t_avx512"},"10510":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint16_t_avx"},"10511":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint16_t_avx2"},"10512":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint16_t_avx512"},"10513":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint32_t_avx"},"10514":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint32_t_avx2"},"10515":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint32_t_avx512"},"10516":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint64_t_avx512"},"10517":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint8_t_avx"},"10518":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint8_t_avx2"},"10519":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_min_uint8_t_avx512"},"10520":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_mul_double_avx"},"10521":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_mul_double_avx2"},"10522":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_mul_double_avx512"},"10523":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_mul_float_avx"},"10524":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_mul_float_avx2"},"10525":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_mul_float_avx512"},"10526":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int16_t_avx"},"10527":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int16_t_avx2"},"10528":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int16_t_avx512"},"10529":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int32_t_avx"},"10530":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int32_t_avx2"},"10531":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int32_t_avx512"},"10532":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int64_t_avx512"},"10533":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int8_t_avx"},"10534":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int8_t_avx2"},"10535":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_int8_t_avx512"},"10536":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint16_t_avx"},"10537":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint16_t_avx2"},"10538":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint16_t_avx512"},"10539":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint32_t_avx"},"10540":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint32_t_avx2"},"10541":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint32_t_avx512"},"10542":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint64_t_avx512"},"10543":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint8_t_avx"},"10544":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint8_t_avx2"},"10545":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_prod_uint8_t_avx512"},"10546":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int16_t_avx"},"10547":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int16_t_avx2"},"10548":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int16_t_avx512"},"10549":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int32_t_avx"},"10550":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int32_t_avx2"},"10551":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int32_t_avx512"},"10552":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int64_t_avx"},"10553":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int64_t_avx2"},"10554":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int64_t_avx512"},"10555":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int8_t_avx"},"10556":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int8_t_avx2"},"10557":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_int8_t_avx512"},"10558":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint16_t_avx"},"10559":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint16_t_avx2"},"10560":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint16_t_avx512"},"10561":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint32_t_avx"},"10562":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint32_t_avx2"},"10563":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint32_t_avx512"},"10564":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint64_t_avx"},"10565":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint64_t_avx2"},"10566":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint64_t_avx512"},"10567":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint8_t_avx"},"10568":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint8_t_avx2"},"10569":{"probe_name":"mpi","function_name":"ompi_op_avx_2buff_sum_uint8_t_avx512"},"10570":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_add_double_avx"},"10571":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_add_double_avx2"},"10572":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_add_double_avx512"},"10573":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_add_float_avx"},"10574":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_add_float_avx2"},"10575":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_add_float_avx512"},"10576":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int16_t_avx"},"10577":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int16_t_avx2"},"10578":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int16_t_avx512"},"10579":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int32_t_avx"},"10580":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int32_t_avx2"},"10581":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int32_t_avx512"},"10582":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int64_t_avx"},"10583":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int64_t_avx2"},"10584":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int64_t_avx512"},"10585":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int8_t_avx"},"10586":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int8_t_avx2"},"10587":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_int8_t_avx512"},"10588":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint16_t_avx"},"10589":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint16_t_avx2"},"10590":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint16_t_avx512"},"10591":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint32_t_avx"},"10592":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint32_t_avx2"},"10593":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint32_t_avx512"},"10594":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint64_t_avx"},"10595":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint64_t_avx2"},"10596":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint64_t_avx512"},"10597":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint8_t_avx"},"10598":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint8_t_avx2"},"10599":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_and_uint8_t_avx512"},"10600":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_double_avx"},"10601":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_double_avx2"},"10602":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_double_avx512"},"10603":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_float_avx"},"10604":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_float_avx2"},"10605":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_float_avx512"},"10606":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int16_t_avx"},"10607":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int16_t_avx2"},"10608":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int16_t_avx512"},"10609":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int32_t_avx"},"10610":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int32_t_avx2"},"10611":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int32_t_avx512"},"10612":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int64_t_avx512"},"10613":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int8_t_avx"},"10614":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int8_t_avx2"},"10615":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_int8_t_avx512"},"10616":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint16_t_avx"},"10617":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint16_t_avx2"},"10618":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint16_t_avx512"},"10619":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint32_t_avx"},"10620":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint32_t_avx2"},"10621":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint32_t_avx512"},"10622":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint64_t_avx512"},"10623":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint8_t_avx"},"10624":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint8_t_avx2"},"10625":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_max_uint8_t_avx512"},"10626":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_double_avx"},"10627":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_double_avx2"},"10628":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_double_avx512"},"10629":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_float_avx"},"10630":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_float_avx2"},"10631":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_float_avx512"},"10632":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int16_t_avx"},"10633":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int16_t_avx2"},"10634":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int16_t_avx512"},"10635":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int32_t_avx"},"10636":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int32_t_avx2"},"10637":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int32_t_avx512"},"10638":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int64_t_avx512"},"10639":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int8_t_avx"},"10640":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int8_t_avx2"},"10641":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_int8_t_avx512"},"10642":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint16_t_avx"},"10643":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint16_t_avx2"},"10644":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint16_t_avx512"},"10645":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint32_t_avx"},"10646":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint32_t_avx2"},"10647":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint32_t_avx512"},"10648":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint64_t_avx512"},"10649":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint8_t_avx"},"10650":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint8_t_avx2"},"10651":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_min_uint8_t_avx512"},"10652":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_mul_double_avx"},"10653":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_mul_double_avx2"},"10654":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_mul_double_avx512"},"10655":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_mul_float_avx"},"10656":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_mul_float_avx2"},"10657":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_mul_float_avx512"},"10658":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int16_t_avx"},"10659":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int16_t_avx2"},"10660":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int16_t_avx512"},"10661":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int32_t_avx"},"10662":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int32_t_avx2"},"10663":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int32_t_avx512"},"10664":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int64_t_avx"},"10665":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int64_t_avx2"},"10666":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int64_t_avx512"},"10667":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int8_t_avx"},"10668":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int8_t_avx2"},"10669":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_int8_t_avx512"},"10670":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint16_t_avx"},"10671":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint16_t_avx2"},"10672":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint16_t_avx512"},"10673":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint32_t_avx"},"10674":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint32_t_avx2"},"10675":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint32_t_avx512"},"10676":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint64_t_avx"},"10677":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint64_t_avx2"},"10678":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint64_t_avx512"},"10679":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint8_t_avx"},"10680":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint8_t_avx2"},"10681":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_or_uint8_t_avx512"},"10682":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int16_t_avx"},"10683":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int16_t_avx2"},"10684":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int16_t_avx512"},"10685":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int32_t_avx"},"10686":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int32_t_avx2"},"10687":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int32_t_avx512"},"10688":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int64_t_avx512"},"10689":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int8_t_avx"},"10690":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int8_t_avx2"},"10691":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_int8_t_avx512"},"10692":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint16_t_avx"},"10693":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint16_t_avx2"},"10694":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint16_t_avx512"},"10695":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint32_t_avx"},"10696":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint32_t_avx2"},"10697":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint32_t_avx512"},"10698":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint64_t_avx512"},"10699":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint8_t_avx"},"10700":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint8_t_avx2"},"10701":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_prod_uint8_t_avx512"},"10702":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int16_t_avx"},"10703":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int16_t_avx2"},"10704":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int16_t_avx512"},"10705":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int32_t_avx"},"10706":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int32_t_avx2"},"10707":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int32_t_avx512"},"10708":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int64_t_avx"},"10709":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int64_t_avx2"},"10710":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int64_t_avx512"},"10711":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int8_t_avx"},"10712":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int8_t_avx2"},"10713":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_int8_t_avx512"},"10714":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint16_t_avx"},"10715":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint16_t_avx2"},"10716":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint16_t_avx512"},"10717":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint32_t_avx"},"10718":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint32_t_avx2"},"10719":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint32_t_avx512"},"10720":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint64_t_avx"},"10721":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint64_t_avx2"},"10722":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint64_t_avx512"},"10723":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint8_t_avx"},"10724":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint8_t_avx2"},"10725":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_sum_uint8_t_avx512"},"10726":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int16_t_avx"},"10727":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int16_t_avx2"},"10728":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int16_t_avx512"},"10729":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int32_t_avx"},"10730":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int32_t_avx2"},"10731":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int32_t_avx512"},"10732":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int64_t_avx"},"10733":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int64_t_avx2"},"10734":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int64_t_avx512"},"10735":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int8_t_avx"},"10736":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int8_t_avx2"},"10737":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_int8_t_avx512"},"10738":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint16_t_avx"},"10739":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint16_t_avx2"},"10740":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint16_t_avx512"},"10741":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint32_t_avx"},"10742":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint32_t_avx2"},"10743":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint32_t_avx512"},"10744":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint64_t_avx"},"10745":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint64_t_avx2"},"10746":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint64_t_avx512"},"10747":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint8_t_avx"},"10748":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint8_t_avx2"},"10749":{"probe_name":"mpi","function_name":"ompi_op_avx_3buff_xor_uint8_t_avx512"},"10750":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_byte"},"10751":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_fortran_integer"},"10752":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_fortran_integer1"},"10753":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_fortran_integer2"},"10754":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_fortran_integer4"},"10755":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_fortran_integer8"},"10756":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_int16_t"},"10757":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_int32_t"},"10758":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_int64_t"},"10759":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_int8_t"},"10760":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_long"},"10761":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_uint16_t"},"10762":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_uint32_t"},"10763":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_uint64_t"},"10764":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_uint8_t"},"10765":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_band_unsigned_long"},"10766":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_byte"},"10767":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_fortran_integer"},"10768":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_fortran_integer1"},"10769":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_fortran_integer2"},"10770":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_fortran_integer4"},"10771":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_fortran_integer8"},"10772":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_int16_t"},"10773":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_int32_t"},"10774":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_int64_t"},"10775":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_int8_t"},"10776":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_long"},"10777":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_uint16_t"},"10778":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_uint32_t"},"10779":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_uint64_t"},"10780":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_uint8_t"},"10781":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bor_unsigned_long"},"10782":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_byte"},"10783":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_fortran_integer"},"10784":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_fortran_integer1"},"10785":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_fortran_integer2"},"10786":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_fortran_integer4"},"10787":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_fortran_integer8"},"10788":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_int16_t"},"10789":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_int32_t"},"10790":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_int64_t"},"10791":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_int8_t"},"10792":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_long"},"10793":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_uint16_t"},"10794":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_uint32_t"},"10795":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_uint64_t"},"10796":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_uint8_t"},"10797":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_bxor_unsigned_long"},"10798":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_bool"},"10799":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_fortran_logical"},"10800":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_int16_t"},"10801":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_int32_t"},"10802":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_int64_t"},"10803":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_int8_t"},"10804":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_long"},"10805":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_uint16_t"},"10806":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_uint32_t"},"10807":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_uint64_t"},"10808":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_uint8_t"},"10809":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_land_unsigned_long"},"10810":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_bool"},"10811":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_fortran_logical"},"10812":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_int16_t"},"10813":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_int32_t"},"10814":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_int64_t"},"10815":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_int8_t"},"10816":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_long"},"10817":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_uint16_t"},"10818":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_uint32_t"},"10819":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_uint64_t"},"10820":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_uint8_t"},"10821":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lor_unsigned_long"},"10822":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_bool"},"10823":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_fortran_logical"},"10824":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_int16_t"},"10825":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_int32_t"},"10826":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_int64_t"},"10827":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_int8_t"},"10828":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_long"},"10829":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_uint16_t"},"10830":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_uint32_t"},"10831":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_uint64_t"},"10832":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_uint8_t"},"10833":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_lxor_unsigned_long"},"10834":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_double"},"10835":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_float"},"10836":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_double_precision"},"10837":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_integer"},"10838":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_integer1"},"10839":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_integer2"},"10840":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_integer4"},"10841":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_integer8"},"10842":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_real"},"10843":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_real16"},"10844":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_real4"},"10845":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_fortran_real8"},"10846":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_int16_t"},"10847":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_int32_t"},"10848":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_int64_t"},"10849":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_int8_t"},"10850":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_long"},"10851":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_long_double"},"10852":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_uint16_t"},"10853":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_uint32_t"},"10854":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_uint64_t"},"10855":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_uint8_t"},"10856":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_max_unsigned_long"},"10857":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_2double_precision"},"10858":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_2int"},"10859":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_2integer"},"10860":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_2real"},"10861":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_double_int"},"10862":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_float_int"},"10863":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_long_double_int"},"10864":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_long_int"},"10865":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_maxloc_short_int"},"10866":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_double"},"10867":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_float"},"10868":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_double_precision"},"10869":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_integer"},"10870":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_integer1"},"10871":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_integer2"},"10872":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_integer4"},"10873":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_integer8"},"10874":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_real"},"10875":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_real16"},"10876":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_real4"},"10877":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_fortran_real8"},"10878":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_int16_t"},"10879":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_int32_t"},"10880":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_int64_t"},"10881":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_int8_t"},"10882":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_long"},"10883":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_long_double"},"10884":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_uint16_t"},"10885":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_uint32_t"},"10886":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_uint64_t"},"10887":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_uint8_t"},"10888":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_min_unsigned_long"},"10889":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_2double_precision"},"10890":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_2int"},"10891":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_2integer"},"10892":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_2real"},"10893":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_double_int"},"10894":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_float_int"},"10895":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_long_double_int"},"10896":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_long_int"},"10897":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_minloc_short_int"},"10898":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_c_double_complex"},"10899":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_c_float_complex"},"10900":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_c_long_double_complex"},"10901":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_double"},"10902":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_float"},"10903":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_double_precision"},"10904":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_integer"},"10905":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_integer1"},"10906":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_integer2"},"10907":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_integer4"},"10908":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_integer8"},"10909":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_real"},"10910":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_real16"},"10911":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_real4"},"10912":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_fortran_real8"},"10913":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_int16_t"},"10914":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_int32_t"},"10915":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_int64_t"},"10916":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_int8_t"},"10917":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_long"},"10918":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_long_double"},"10919":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_uint16_t"},"10920":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_uint32_t"},"10921":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_uint64_t"},"10922":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_uint8_t"},"10923":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_prod_unsigned_long"},"10924":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_c_double_complex"},"10925":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_c_float_complex"},"10926":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_c_long_double_complex"},"10927":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_double"},"10928":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_float"},"10929":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_double_precision"},"10930":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_integer"},"10931":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_integer1"},"10932":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_integer2"},"10933":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_integer4"},"10934":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_integer8"},"10935":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_real"},"10936":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_real16"},"10937":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_real4"},"10938":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_fortran_real8"},"10939":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_int16_t"},"10940":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_int32_t"},"10941":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_int64_t"},"10942":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_int8_t"},"10943":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_long"},"10944":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_long_double"},"10945":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_uint16_t"},"10946":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_uint32_t"},"10947":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_uint64_t"},"10948":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_uint8_t"},"10949":{"probe_name":"mpi","function_name":"ompi_op_base_2buff_sum_unsigned_long"},"10950":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_byte"},"10951":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_fortran_integer"},"10952":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_fortran_integer1"},"10953":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_fortran_integer2"},"10954":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_fortran_integer4"},"10955":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_fortran_integer8"},"10956":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_int16_t"},"10957":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_int32_t"},"10958":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_int64_t"},"10959":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_int8_t"},"10960":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_long"},"10961":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_uint16_t"},"10962":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_uint32_t"},"10963":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_uint64_t"},"10964":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_uint8_t"},"10965":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_band_unsigned_long"},"10966":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_byte"},"10967":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_fortran_integer"},"10968":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_fortran_integer1"},"10969":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_fortran_integer2"},"10970":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_fortran_integer4"},"10971":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_fortran_integer8"},"10972":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_int16_t"},"10973":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_int32_t"},"10974":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_int64_t"},"10975":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_int8_t"},"10976":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_long"},"10977":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_uint16_t"},"10978":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_uint32_t"},"10979":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_uint64_t"},"10980":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_uint8_t"},"10981":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bor_unsigned_long"},"10982":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_byte"},"10983":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_fortran_integer"},"10984":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_fortran_integer1"},"10985":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_fortran_integer2"},"10986":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_fortran_integer4"},"10987":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_fortran_integer8"},"10988":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_int16_t"},"10989":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_int32_t"},"10990":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_int64_t"},"10991":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_int8_t"},"10992":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_long"},"10993":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_uint16_t"},"10994":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_uint32_t"},"10995":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_uint64_t"},"10996":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_uint8_t"},"10997":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_bxor_unsigned_long"},"10998":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_bool"},"10999":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_fortran_logical"},"11000":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_int16_t"},"11001":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_int32_t"},"11002":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_int64_t"},"11003":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_int8_t"},"11004":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_long"},"11005":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_uint16_t"},"11006":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_uint32_t"},"11007":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_uint64_t"},"11008":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_uint8_t"},"11009":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_land_unsigned_long"},"11010":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_bool"},"11011":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_fortran_logical"},"11012":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_int16_t"},"11013":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_int32_t"},"11014":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_int64_t"},"11015":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_int8_t"},"11016":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_long"},"11017":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_uint16_t"},"11018":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_uint32_t"},"11019":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_uint64_t"},"11020":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_uint8_t"},"11021":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lor_unsigned_long"},"11022":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_bool"},"11023":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_fortran_logical"},"11024":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_int16_t"},"11025":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_int32_t"},"11026":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_int64_t"},"11027":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_int8_t"},"11028":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_long"},"11029":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_uint16_t"},"11030":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_uint32_t"},"11031":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_uint64_t"},"11032":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_uint8_t"},"11033":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_lxor_unsigned_long"},"11034":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_double"},"11035":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_float"},"11036":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_double_precision"},"11037":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_integer"},"11038":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_integer1"},"11039":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_integer2"},"11040":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_integer4"},"11041":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_integer8"},"11042":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_real"},"11043":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_real16"},"11044":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_real4"},"11045":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_fortran_real8"},"11046":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_int16_t"},"11047":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_int32_t"},"11048":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_int64_t"},"11049":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_int8_t"},"11050":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_long"},"11051":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_long_double"},"11052":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_uint16_t"},"11053":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_uint32_t"},"11054":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_uint64_t"},"11055":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_uint8_t"},"11056":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_max_unsigned_long"},"11057":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_2double_precision"},"11058":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_2int"},"11059":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_2integer"},"11060":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_2real"},"11061":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_double_int"},"11062":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_float_int"},"11063":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_long_double_int"},"11064":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_long_int"},"11065":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_maxloc_short_int"},"11066":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_double"},"11067":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_float"},"11068":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_double_precision"},"11069":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_integer"},"11070":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_integer1"},"11071":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_integer2"},"11072":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_integer4"},"11073":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_integer8"},"11074":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_real"},"11075":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_real16"},"11076":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_real4"},"11077":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_fortran_real8"},"11078":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_int16_t"},"11079":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_int32_t"},"11080":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_int64_t"},"11081":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_int8_t"},"11082":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_long"},"11083":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_long_double"},"11084":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_uint16_t"},"11085":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_uint32_t"},"11086":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_uint64_t"},"11087":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_uint8_t"},"11088":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_min_unsigned_long"},"11089":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_2double_precision"},"11090":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_2int"},"11091":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_2integer"},"11092":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_2real"},"11093":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_double_int"},"11094":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_float_int"},"11095":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_long_double_int"},"11096":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_long_int"},"11097":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_minloc_short_int"},"11098":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_c_double_complex"},"11099":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_c_float_complex"},"11100":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_c_long_double_complex"},"11101":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_double"},"11102":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_float"},"11103":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_double_precision"},"11104":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_integer"},"11105":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_integer1"},"11106":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_integer2"},"11107":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_integer4"},"11108":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_integer8"},"11109":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_real"},"11110":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_real16"},"11111":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_real4"},"11112":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_fortran_real8"},"11113":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_int16_t"},"11114":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_int32_t"},"11115":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_int64_t"},"11116":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_int8_t"},"11117":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_long"},"11118":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_long_double"},"11119":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_uint16_t"},"11120":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_uint32_t"},"11121":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_uint64_t"},"11122":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_uint8_t"},"11123":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_prod_unsigned_long"},"11124":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_c_double_complex"},"11125":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_c_float_complex"},"11126":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_c_long_double_complex"},"11127":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_double"},"11128":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_float"},"11129":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_double_precision"},"11130":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_integer"},"11131":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_integer1"},"11132":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_integer2"},"11133":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_integer4"},"11134":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_integer8"},"11135":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_real"},"11136":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_real16"},"11137":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_real4"},"11138":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_fortran_real8"},"11139":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_int16_t"},"11140":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_int32_t"},"11141":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_int64_t"},"11142":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_int8_t"},"11143":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_long"},"11144":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_long_double"},"11145":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_uint16_t"},"11146":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_uint32_t"},"11147":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_uint64_t"},"11148":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_uint8_t"},"11149":{"probe_name":"mpi","function_name":"ompi_op_base_3buff_sum_unsigned_long"},"11150":{"probe_name":"mpi","function_name":"ompi_op_base_find_available"},"11151":{"probe_name":"mpi","function_name":"ompi_op_base_op_select"},"11152":{"probe_name":"mpi","function_name":"ompi_op_construct"},"11153":{"probe_name":"mpi","function_name":"ompi_op_create_user"},"11154":{"probe_name":"mpi","function_name":"ompi_op_destruct"},"11155":{"probe_name":"mpi","function_name":"ompi_op_finalize"},"11156":{"probe_name":"mpi","function_name":"ompi_op_init"},"11157":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x103bf0"},"11158":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x105a40"},"11159":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x109a40"},"11160":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x11a690"},"11161":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x11d440"},"11162":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x128cd0"},"11163":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x153a70"},"11164":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x15a800"},"11165":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x15ce80"},"11166":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x15ed30"},"11167":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x1642a0"},"11168":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x1c2ff0"},"11169":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x1ce8e0"},"11170":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x1e8750"},"11171":{"probe_name":"mpi","function_name":"ompi_op_reduce:0x5eb80"},"11172":{"probe_name":"mpi","function_name":"ompi_op_reduce:0xef780"},"11173":{"probe_name":"mpi","function_name":"ompi_op_reduce:0xf6ab0"},"11174":{"probe_name":"mpi","function_name":"ompi_op_reduce:0xfc2b0"},"11175":{"probe_name":"mpi","function_name":"ompi_op_reduce:0xff940"},"11176":{"probe_name":"mpi","function_name":"ompi_op_set_java_callback"},"11177":{"probe_name":"mpi","function_name":"ompi_osc_base_finalize"},"11178":{"probe_name":"mpi","function_name":"ompi_osc_base_find_available"},"11179":{"probe_name":"mpi","function_name":"ompi_osc_base_get_primitive_type_info"},"11180":{"probe_name":"mpi","function_name":"ompi_osc_base_process_op"},"11181":{"probe_name":"mpi","function_name":"ompi_osc_base_select"},"11182":{"probe_name":"mpi","function_name":"ompi_osc_base_set_memory_alignment"},"11183":{"probe_name":"mpi","function_name":"ompi_osc_base_sndrcv_op"},"11184":{"probe_name":"mpi","function_name":"ompi_osc_get_data_blocking"},"11185":{"probe_name":"mpi","function_name":"ompi_osc_get_data_complete"},"11186":{"probe_name":"mpi","function_name":"ompi_osc_module_add_peer"},"11187":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_accumulate"},"11188":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_attach"},"11189":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_compare_and_swap"},"11190":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_complete"},"11191":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_detach"},"11192":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_fence"},"11193":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_fetch_and_op"},"11194":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_flush"},"11195":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_flush_all"},"11196":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_flush_local"},"11197":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_flush_local_all"},"11198":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_free"},"11199":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_get"},"11200":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_get_accumulate"},"11201":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_lock"},"11202":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_lock_all"},"11203":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_post"},"11204":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_put"},"11205":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_raccumulate"},"11206":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_rget"},"11207":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_rget_accumulate"},"11208":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_rput"},"11209":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_set_template"},"11210":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_start"},"11211":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_sync"},"11212":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_test"},"11213":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_unlock"},"11214":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_unlock_all"},"11215":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_portals4_wait"},"11216":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_accumulate"},"11217":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_attach"},"11218":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_compare_and_swap"},"11219":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_complete"},"11220":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_detach"},"11221":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_fence"},"11222":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_fetch_and_op"},"11223":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_flush"},"11224":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_flush_all"},"11225":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_flush_local"},"11226":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_flush_local_all"},"11227":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_free"},"11228":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_get"},"11229":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_get_accumulate"},"11230":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_lock"},"11231":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_lock_all"},"11232":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_post"},"11233":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_put"},"11234":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_raccumulate"},"11235":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_rget"},"11236":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_rget_accumulate"},"11237":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_rput"},"11238":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_set_template"},"11239":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_start"},"11240":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_sync"},"11241":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_test"},"11242":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_unlock"},"11243":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_unlock_all"},"11244":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_rdma_wait"},"11245":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_accumulate"},"11246":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_attach"},"11247":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_compare_and_swap"},"11248":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_complete"},"11249":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_detach"},"11250":{"probe_name":"mpi","function_name":"ompi_osc_monitoring_sm_fence"}} diff --git a/etc/datacrumbs/data/categories-haridev-tuolumne-mpiio.json b/etc/datacrumbs/data/categories-haridev-tuolumne-mpiio.json deleted file mode 100644 index 2827b603..00000000 --- a/etc/datacrumbs/data/categories-haridev-tuolumne-mpiio.json +++ /dev/null @@ -1 +0,0 @@ -{"9267":{"probe_name":"mpi-rest","function_name":"xpmem_seglist_lookup"},"9266":{"probe_name":"mpi-rest","function_name":"xorshift_rand"},"9265":{"probe_name":"mpi-rest","function_name":"win_unlock_proc"},"9264":{"probe_name":"mpi-rest","function_name":"win_unlock_done"},"9263":{"probe_name":"mpi-rest","function_name":"win_shm_alloc_impl.isra.0"},"9262":{"probe_name":"mpi-rest","function_name":"win_set_per_win_sync"},"9261":{"probe_name":"mpi-rest","function_name":"win_set_info.constprop.0"},"9260":{"probe_name":"mpi-rest","function_name":"win_lock_req_proc"},"9259":{"probe_name":"mpi-rest","function_name":"win_lock_advance"},"9258":{"probe_name":"mpi-rest","function_name":"win_init.constprop.0"},"9257":{"probe_name":"mpi-rest","function_name":"win_init"},"9256":{"probe_name":"mpi-rest","function_name":"win_finalize.isra.0.cold"},"9255":{"probe_name":"mpi-rest","function_name":"win_finalize.isra.0"},"9254":{"probe_name":"mpi-rest","function_name":"win_allgather"},"9253":{"probe_name":"mpi-rest","function_name":"wildmat"},"9252":{"probe_name":"mpi-rest","function_name":"waitall_enqueue_cb.cold"},"9251":{"probe_name":"mpi-rest","function_name":"waitall_enqueue_cb"},"9250":{"probe_name":"mpi-rest","function_name":"wait_enqueue_cb"},"9249":{"probe_name":"mpi-rest","function_name":"vtx_issue.constprop.0"},"9248":{"probe_name":"mpi-rest","function_name":"view_state_get_next_len"},"9247":{"probe_name":"mpi-rest","function_name":"view_state_get_cur_sz"},"9246":{"probe_name":"mpi-rest","function_name":"view_state_add_region"},"9245":{"probe_name":"mpi-rest","function_name":"vector_pack_to_iov"},"9244":{"probe_name":"mpi-rest","function_name":"vector_m2m.cold"},"9243":{"probe_name":"mpi-rest","function_name":"vector_m2m"},"9242":{"probe_name":"mpi-rest","function_name":"validate_tree"},"9241":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7bc36c"},"9240":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7b84bf"},"9239":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7b80b1"},"9238":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7b6da7"},"9237":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7b2c94"},"9236":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7af591"},"9235":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7aee8a"},"9234":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7ad10b"},"9233":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7a948e"},"9232":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7a1dbc"},"9231":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7a0d2d"},"9230":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7a08c1"},"9229":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x79f0d7"},"9228":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x79dc0f"},"9227":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x796b65"},"9226":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x793501"},"9225":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x78469d"},"9224":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x783be4"},"9223":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x781eaa"},"9222":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x77ac2d"},"9221":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x777c7e"},"9220":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7753aa"},"9219":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x77131c"},"9218":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x76e324"},"9217":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x76c9ab"},"9216":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x761f57"},"9215":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x75e632"},"9214":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x75d51e"},"9213":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x75a474"},"9212":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x758f9e"},"9211":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x758e6b"},"9210":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x756b22"},"9209":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x75047a"},"9208":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x74057a"},"9207":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x73e237"},"9206":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x73c070"},"9205":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x739ca9"},"9204":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x737b67"},"9203":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7354b6"},"9202":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x731334"},"9201":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x72f583"},"9200":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x72d421"},"9199":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x72af50"},"9198":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x728d5b"},"9197":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7265f4"},"9196":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x72362f"},"9195":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x7213ac"},"9194":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x71ef5c"},"9193":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x71cbbf"},"9192":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x71a841"},"9191":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x718361"},"9190":{"probe_name":"mpi-rest","function_name":"utarray_str_dtor:0x716bad"},"9189":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7bc314"},"9188":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7b8467"},"9187":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7b8059"},"9186":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7b6d4f"},"9185":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7b2c3c"},"9184":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7af539"},"9183":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7aee32"},"9182":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7ad0b3"},"9181":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7a9436"},"9180":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7a1d64"},"9179":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7a0cd5"},"9178":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7a0869"},"9177":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x79f07f"},"9176":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x79dbb7"},"9175":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x796b0d"},"9174":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7934a9"},"9173":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x784645"},"9172":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x783b8c"},"9171":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x781e52"},"9170":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x77abd5"},"9169":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x777c26"},"9168":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x775352"},"9167":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7712c4"},"9166":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x76e2cc"},"9165":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x76c953"},"9164":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x761eff"},"9163":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x75e5da"},"9162":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x75d4c6"},"9161":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x75a41c"},"9160":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x758f46"},"9159":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x758e13"},"9158":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x756aca"},"9157":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x750422"},"9156":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x740522"},"9155":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x73e1df"},"9154":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x73c018"},"9153":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x739c51"},"9152":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x737b0f"},"9151":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x73545e"},"9150":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7312dc"},"9149":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x72f52b"},"9148":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x72d3c9"},"9147":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x72aef8"},"9146":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x728d03"},"9145":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x72659c"},"9144":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x7235d7"},"9143":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x721354"},"9142":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x71ef04"},"9141":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x71cb67"},"9140":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x71a7e9"},"9139":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x718309"},"9138":{"probe_name":"mpi-rest","function_name":"utarray_str_cpy:0x716b55"},"9137":{"probe_name":"mpi-rest","function_name":"uses_generic_write"},"9136":{"probe_name":"mpi-rest","function_name":"uses_generic_read"},"9135":{"probe_name":"mpi-rest","function_name":"update_type_vector.cold"},"9134":{"probe_name":"mpi-rest","function_name":"update_type_vector"},"9133":{"probe_name":"mpi-rest","function_name":"update_type_indexed.cold"},"9132":{"probe_name":"mpi-rest","function_name":"update_type_indexed"},"9131":{"probe_name":"mpi-rest","function_name":"update_type_blockindexed.cold"},"9130":{"probe_name":"mpi-rest","function_name":"update_type_blockindexed"},"9129":{"probe_name":"mpi-rest","function_name":"update_nic_preferences.part.0"},"9128":{"probe_name":"mpi-rest","function_name":"update_multi_nic_hints.part.0"},"9127":{"probe_name":"mpi-rest","function_name":"ull_maxloc_op_func"},"9126":{"probe_name":"mpi-rest","function_name":"type_struct.part.0"},"9125":{"probe_name":"mpi-rest","function_name":"type_size_is_zero.cold"},"9124":{"probe_name":"mpi-rest","function_name":"type_size_is_zero"},"9123":{"probe_name":"mpi-rest","function_name":"type_cyclic"},"9122":{"probe_name":"mpi-rest","function_name":"type_create_contiguous_x"},"9121":{"probe_name":"mpi-rest","function_name":"type_block"},"9120":{"probe_name":"mpi-rest","function_name":"trvalid"},"9119":{"probe_name":"mpi-rest","function_name":"trstrdup"},"9118":{"probe_name":"mpi-rest","function_name":"trrealloc"},"9117":{"probe_name":"mpi-rest","function_name":"trmunmap"},"9116":{"probe_name":"mpi-rest","function_name":"trmmap"},"9115":{"probe_name":"mpi-rest","function_name":"trmalloc"},"9114":{"probe_name":"mpi-rest","function_name":"trfree"},"9113":{"probe_name":"mpi-rest","function_name":"tree_add_child"},"9112":{"probe_name":"mpi-rest","function_name":"trdump"},"9111":{"probe_name":"mpi-rest","function_name":"trcalloc"},"9110":{"probe_name":"mpi-rest","function_name":"trace_write"},"9109":{"probe_name":"mpi-rest","function_name":"trace_read"},"9108":{"probe_name":"mpi-rest","function_name":"trace_misc"},"9107":{"probe_name":"mpi-rest","function_name":"token_copy"},"9106":{"probe_name":"mpi-rest","function_name":"string_replace_all_occurrences_with_char"},"9105":{"probe_name":"mpi-rest","function_name":"str_to_uint64"},"9104":{"probe_name":"mpi-rest","function_name":"str_to_int"},"9103":{"probe_name":"mpi-rest","function_name":"stat"},"9102":{"probe_name":"mpi-rest","function_name":"src_mlut_to_mlut.isra.0"},"9101":{"probe_name":"mpi-rest","function_name":"src_map_to_lut.isra.0"},"9100":{"probe_name":"mpi-rest","function_name":"sprintbuf"},"9099":{"probe_name":"mpi-rest","function_name":"sorttype_compare"},"9098":{"probe_name":"mpi-rest","function_name":"shared_mem_coll_dump_dir"},"9097":{"probe_name":"mpi-rest","function_name":"setup_single_nic"},"9096":{"probe_name":"mpi-rest","function_name":"setstripe_args_init"},"9095":{"probe_name":"mpi-rest","function_name":"set_rma_fi_info"},"9094":{"probe_name":"mpi-rest","function_name":"set_map.isra.0"},"9093":{"probe_name":"mpi-rest","function_name":"send_enqueue_cb:0x5dde10"},"9092":{"probe_name":"mpi-rest","function_name":"send_enqueue_cb:0x576130"},"9091":{"probe_name":"mpi-rest","function_name":"sched_test_length"},"9090":{"probe_name":"mpi-rest","function_name":"sched_get_cid_nonblock"},"9089":{"probe_name":"mpi-rest","function_name":"sched_dump"},"9088":{"probe_name":"mpi-rest","function_name":"sched_cb_gcn_copy_mask"},"9087":{"probe_name":"mpi-rest","function_name":"sched_cb_gcn_bcast"},"9086":{"probe_name":"mpi-rest","function_name":"sched_cb_gcn_allocate_cid.cold"},"9085":{"probe_name":"mpi-rest","function_name":"sched_cb_gcn_allocate_cid"},"9084":{"probe_name":"mpi-rest","function_name":"sched_cb_commit_comm"},"9083":{"probe_name":"mpi-rest","function_name":"sched_add_ref"},"9082":{"probe_name":"mpi-rest","function_name":"romio_statfs"},"9081":{"probe_name":"mpi-rest","function_name":"right"},"9080":{"probe_name":"mpi-rest","function_name":"reset_shared_state"},"9079":{"probe_name":"mpi-rest","function_name":"release_temp_buffer"},"9078":{"probe_name":"mpi-rest","function_name":"register_tm_clones"},"9077":{"probe_name":"mpi-rest","function_name":"recv_target_cmpl_cb.cold"},"9076":{"probe_name":"mpi-rest","function_name":"recv_target_cmpl_cb"},"9075":{"probe_name":"mpi-rest","function_name":"recv_stream_cleanup_cb"},"9074":{"probe_name":"mpi-rest","function_name":"recv_enqueue_cb:0x5d6da0"},"9073":{"probe_name":"mpi-rest","function_name":"recv_enqueue_cb:0x56ef40"},"9072":{"probe_name":"mpi-rest","function_name":"read_config_files.constprop.0"},"9071":{"probe_name":"mpi-rest","function_name":"quoted_printf"},"9070":{"probe_name":"mpi-rest","function_name":"put_target_cmpl_cb.cold"},"9069":{"probe_name":"mpi-rest","function_name":"put_target_cmpl_cb"},"9068":{"probe_name":"mpi-rest","function_name":"put_ex"},"9067":{"probe_name":"mpi-rest","function_name":"put_dt_target_cmpl_cb"},"9066":{"probe_name":"mpi-rest","function_name":"prune_tree"},"9065":{"probe_name":"mpi-rest","function_name":"progress_fn"},"9064":{"probe_name":"mpi-rest","function_name":"process_pre_req"},"9063":{"probe_name":"mpi-rest","function_name":"printbuf_reset"},"9062":{"probe_name":"mpi-rest","function_name":"printbuf_new"},"9061":{"probe_name":"mpi-rest","function_name":"printbuf_memset"},"9060":{"probe_name":"mpi-rest","function_name":"printbuf_memappend"},"9059":{"probe_name":"mpi-rest","function_name":"printbuf_free"},"9058":{"probe_name":"mpi-rest","function_name":"printbuf_extend"},"9057":{"probe_name":"mpi-rest","function_name":"print_heap"},"9056":{"probe_name":"mpi-rest","function_name":"post_client_comm"},"9055":{"probe_name":"mpi-rest","function_name":"post_aggregator_comm"},"9054":{"probe_name":"mpi-rest","function_name":"part_send_data_target_cmpl_cb"},"9053":{"probe_name":"mpi-rest","function_name":"part_req_create.cold"},"9052":{"probe_name":"mpi-rest","function_name":"part_req_create"},"9051":{"probe_name":"mpi-rest","function_name":"parse_targets"},"9050":{"probe_name":"mpi-rest","function_name":"parse_json_tree"},"9049":{"probe_name":"mpi-rest","function_name":"parent"},"9048":{"probe_name":"mpi-rest","function_name":"pairtypes_finalize_cb"},"9047":{"probe_name":"mpi-rest","function_name":"optimized_get.part.0"},"9046":{"probe_name":"mpi-rest","function_name":"optbalance"},"9045":{"probe_name":"mpi-rest","function_name":"ofi_am_post_recv.part.0.constprop.0.isra.0"},"9044":{"probe_name":"mpi-rest","function_name":"num_children.cold"},"9043":{"probe_name":"mpi-rest","function_name":"num_children"},"9042":{"probe_name":"mpi-rest","function_name":"nonContigSourceDataBufferAdvance"},"9041":{"probe_name":"mpi-rest","function_name":"nid_compare"},"9040":{"probe_name":"mpi-rest","function_name":"next_token"},"9039":{"probe_name":"mpi-rest","function_name":"network_split_by_minsize"},"9038":{"probe_name":"mpi-rest","function_name":"my_consensus"},"9037":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x7b5bb3"},"9036":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x79f6cd"},"9035":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x79dee3"},"9034":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x795971"},"9033":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x776a8a"},"9032":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x76d130"},"9031":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x760d84"},"9030":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x74f286"},"9029":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x73f386"},"9028":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x73d043"},"9027":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x73ae7c"},"9026":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x738ab5"},"9025":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x736973"},"9024":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x7342c2"},"9023":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x730140"},"9022":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x72e38f"},"9021":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x72c22d"},"9020":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x729d5c"},"9019":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x727b67"},"9018":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x725400"},"9017":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x72243b"},"9016":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x7201b8"},"9015":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x71dd68"},"9014":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x71b9cb"},"9013":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x71964d"},"9012":{"probe_name":"mpi-rest","function_name":"mpiio_cray_interval_stats_flush_NEW:0x71716d"},"9011":{"probe_name":"mpi-rest","function_name":"mpidi_cray_ofi_hwcoll_hndl_create"},"9010":{"probe_name":"mpi-rest","function_name":"mpid_cray_pmi_init"},"9009":{"probe_name":"mpi-rest","function_name":"mpid_cray_pmi_get_numpes_on_smp"},"9008":{"probe_name":"mpi-rest","function_name":"mpid_cray_pmi_get_nidlist_ptr.part.0"},"9007":{"probe_name":"mpi-rest","function_name":"mpid_cray_pmi_get_nidlist_ptr"},"9006":{"probe_name":"mpi-rest","function_name":"mpid_cray_pmi_finalize"},"9005":{"probe_name":"mpi-rest","function_name":"mpi_to_pmi_keyvals"},"9004":{"probe_name":"mpi-rest","function_name":"mlut_update_avt_reference"},"9003":{"probe_name":"mpi-rest","function_name":"mergesort_lpidarray"},"9002":{"probe_name":"mpi-rest","function_name":"mc_set_syslog"},"9001":{"probe_name":"mpi-rest","function_name":"mc_set_debug"},"9000":{"probe_name":"mpi-rest","function_name":"mc_info"},"8999":{"probe_name":"mpi-rest","function_name":"mc_get_debug"},"8998":{"probe_name":"mpi-rest","function_name":"mc_error"},"8997":{"probe_name":"mpi-rest","function_name":"mc_debug"},"8996":{"probe_name":"mpi-rest","function_name":"match_this_proc"},"8995":{"probe_name":"mpi-rest","function_name":"match_procs"},"8994":{"probe_name":"mpi-rest","function_name":"make_stats_type"},"8993":{"probe_name":"mpi-rest","function_name":"lstat"},"8992":{"probe_name":"mpi-rest","function_name":"locate_context_bit"},"8991":{"probe_name":"mpi-rest","function_name":"load_acc_hint"},"8990":{"probe_name":"mpi-rest","function_name":"llapi_ladvise_lock"},"8989":{"probe_name":"mpi-rest","function_name":"lh_table_resize"},"8988":{"probe_name":"mpi-rest","function_name":"lh_table_new"},"8987":{"probe_name":"mpi-rest","function_name":"lh_table_lookup_ex"},"8986":{"probe_name":"mpi-rest","function_name":"lh_table_lookup_entry_w_hash"},"8985":{"probe_name":"mpi-rest","function_name":"lh_table_lookup_entry"},"8984":{"probe_name":"mpi-rest","function_name":"lh_table_length"},"8983":{"probe_name":"mpi-rest","function_name":"lh_table_insert_w_hash"},"8982":{"probe_name":"mpi-rest","function_name":"lh_table_insert"},"8981":{"probe_name":"mpi-rest","function_name":"lh_table_free"},"8980":{"probe_name":"mpi-rest","function_name":"lh_table_delete_entry"},"8979":{"probe_name":"mpi-rest","function_name":"lh_table_delete"},"8978":{"probe_name":"mpi-rest","function_name":"lh_ptr_hash"},"8977":{"probe_name":"mpi-rest","function_name":"lh_ptr_equal"},"8976":{"probe_name":"mpi-rest","function_name":"lh_perllike_str_hash"},"8975":{"probe_name":"mpi-rest","function_name":"lh_kptr_table_new"},"8974":{"probe_name":"mpi-rest","function_name":"lh_kchar_table_new"},"8973":{"probe_name":"mpi-rest","function_name":"lh_get_hash:0x7137ab"},"8972":{"probe_name":"mpi-rest","function_name":"lh_get_hash:0x70a4c5"},"8971":{"probe_name":"mpi-rest","function_name":"lh_char_hash"},"8970":{"probe_name":"mpi-rest","function_name":"lh_char_equal"},"8969":{"probe_name":"mpi-rest","function_name":"left"},"8968":{"probe_name":"mpi-rest","function_name":"leaf_vector_mpi_flatten.cold"},"8967":{"probe_name":"mpi-rest","function_name":"leaf_vector_mpi_flatten"},"8966":{"probe_name":"mpi-rest","function_name":"leaf_vector_count_block.cold"},"8965":{"probe_name":"mpi-rest","function_name":"leaf_vector_count_block"},"8964":{"probe_name":"mpi-rest","function_name":"leaf_index_mpi_flatten.cold"},"8963":{"probe_name":"mpi-rest","function_name":"leaf_index_mpi_flatten"},"8962":{"probe_name":"mpi-rest","function_name":"leaf_index_count_block.cold"},"8961":{"probe_name":"mpi-rest","function_name":"leaf_index_count_block"},"8960":{"probe_name":"mpi-rest","function_name":"leaf_contig_mpi_flatten.cold"},"8959":{"probe_name":"mpi-rest","function_name":"leaf_contig_mpi_flatten"},"8958":{"probe_name":"mpi-rest","function_name":"leaf_contig_count_block.cold"},"8957":{"probe_name":"mpi-rest","function_name":"leaf_contig_count_block"},"8956":{"probe_name":"mpi-rest","function_name":"leaf_blkidx_mpi_flatten.cold"},"8955":{"probe_name":"mpi-rest","function_name":"leaf_blkidx_mpi_flatten"},"8954":{"probe_name":"mpi-rest","function_name":"leaf_blkidx_count_block.cold"},"8953":{"probe_name":"mpi-rest","function_name":"leaf_blkidx_count_block"},"8952":{"probe_name":"mpi-rest","function_name":"json_vasprintf:0x714d37"},"8951":{"probe_name":"mpi-rest","function_name":"json_vasprintf:0x70d5e4"},"8950":{"probe_name":"mpi-rest","function_name":"json_util_get_last_err"},"8949":{"probe_name":"mpi-rest","function_name":"json_type_to_name"},"8948":{"probe_name":"mpi-rest","function_name":"json_tokener_validate_utf8"},"8947":{"probe_name":"mpi-rest","function_name":"json_tokener_set_flags"},"8946":{"probe_name":"mpi-rest","function_name":"json_tokener_reset_level"},"8945":{"probe_name":"mpi-rest","function_name":"json_tokener_reset"},"8944":{"probe_name":"mpi-rest","function_name":"json_tokener_parse_verbose"},"8943":{"probe_name":"mpi-rest","function_name":"json_tokener_parse_ex"},"8942":{"probe_name":"mpi-rest","function_name":"json_tokener_parse"},"8941":{"probe_name":"mpi-rest","function_name":"json_tokener_new_ex"},"8940":{"probe_name":"mpi-rest","function_name":"json_tokener_new"},"8939":{"probe_name":"mpi-rest","function_name":"json_tokener_get_parse_end"},"8938":{"probe_name":"mpi-rest","function_name":"json_tokener_get_error"},"8937":{"probe_name":"mpi-rest","function_name":"json_tokener_free"},"8936":{"probe_name":"mpi-rest","function_name":"json_tokener_error_desc"},"8935":{"probe_name":"mpi-rest","function_name":"json_pointer_setf"},"8934":{"probe_name":"mpi-rest","function_name":"json_pointer_set_single_path"},"8933":{"probe_name":"mpi-rest","function_name":"json_pointer_set"},"8932":{"probe_name":"mpi-rest","function_name":"json_pointer_getf"},"8931":{"probe_name":"mpi-rest","function_name":"json_pointer_get_single_path"},"8930":{"probe_name":"mpi-rest","function_name":"json_pointer_get_recursive"},"8929":{"probe_name":"mpi-rest","function_name":"json_pointer_get"},"8928":{"probe_name":"mpi-rest","function_name":"json_parse_int64"},"8927":{"probe_name":"mpi-rest","function_name":"json_parse_double"},"8926":{"probe_name":"mpi-rest","function_name":"json_object_userdata_to_json_string"},"8925":{"probe_name":"mpi-rest","function_name":"json_object_to_json_string_length"},"8924":{"probe_name":"mpi-rest","function_name":"json_object_to_json_string_ext"},"8923":{"probe_name":"mpi-rest","function_name":"json_object_to_json_string"},"8922":{"probe_name":"mpi-rest","function_name":"json_object_to_file_ext"},"8921":{"probe_name":"mpi-rest","function_name":"json_object_to_file"},"8920":{"probe_name":"mpi-rest","function_name":"json_object_to_fd"},"8919":{"probe_name":"mpi-rest","function_name":"json_object_string_to_json_string"},"8918":{"probe_name":"mpi-rest","function_name":"json_object_string_delete"},"8917":{"probe_name":"mpi-rest","function_name":"json_object_set_userdata"},"8916":{"probe_name":"mpi-rest","function_name":"json_object_set_string_len"},"8915":{"probe_name":"mpi-rest","function_name":"json_object_set_string"},"8914":{"probe_name":"mpi-rest","function_name":"json_object_set_serializer"},"8913":{"probe_name":"mpi-rest","function_name":"json_object_set_int64"},"8912":{"probe_name":"mpi-rest","function_name":"json_object_set_int"},"8911":{"probe_name":"mpi-rest","function_name":"json_object_set_double"},"8910":{"probe_name":"mpi-rest","function_name":"json_object_set_boolean"},"8909":{"probe_name":"mpi-rest","function_name":"json_object_put"},"8908":{"probe_name":"mpi-rest","function_name":"json_object_object_to_json_string"},"8907":{"probe_name":"mpi-rest","function_name":"json_object_object_length"},"8906":{"probe_name":"mpi-rest","function_name":"json_object_object_get_ex"},"8905":{"probe_name":"mpi-rest","function_name":"json_object_object_get"},"8904":{"probe_name":"mpi-rest","function_name":"json_object_object_delete"},"8903":{"probe_name":"mpi-rest","function_name":"json_object_object_del"},"8902":{"probe_name":"mpi-rest","function_name":"json_object_object_add_ex"},"8901":{"probe_name":"mpi-rest","function_name":"json_object_object_add"},"8900":{"probe_name":"mpi-rest","function_name":"json_object_new_string_len"},"8899":{"probe_name":"mpi-rest","function_name":"json_object_new_string"},"8898":{"probe_name":"mpi-rest","function_name":"json_object_new_object"},"8897":{"probe_name":"mpi-rest","function_name":"json_object_new_null"},"8896":{"probe_name":"mpi-rest","function_name":"json_object_new_int64"},"8895":{"probe_name":"mpi-rest","function_name":"json_object_new_int"},"8894":{"probe_name":"mpi-rest","function_name":"json_object_new_double_s"},"8893":{"probe_name":"mpi-rest","function_name":"json_object_new_double"},"8892":{"probe_name":"mpi-rest","function_name":"json_object_new_boolean"},"8891":{"probe_name":"mpi-rest","function_name":"json_object_new_array"},"8890":{"probe_name":"mpi-rest","function_name":"json_object_new"},"8889":{"probe_name":"mpi-rest","function_name":"json_object_lh_entry_free"},"8888":{"probe_name":"mpi-rest","function_name":"json_object_iter_peek_value"},"8887":{"probe_name":"mpi-rest","function_name":"json_object_iter_peek_name"},"8886":{"probe_name":"mpi-rest","function_name":"json_object_iter_next"},"8885":{"probe_name":"mpi-rest","function_name":"json_object_iter_init_default"},"8884":{"probe_name":"mpi-rest","function_name":"json_object_iter_equal"},"8883":{"probe_name":"mpi-rest","function_name":"json_object_iter_end"},"8882":{"probe_name":"mpi-rest","function_name":"json_object_iter_begin"},"8881":{"probe_name":"mpi-rest","function_name":"json_object_is_type"},"8880":{"probe_name":"mpi-rest","function_name":"json_object_int_to_json_string"},"8879":{"probe_name":"mpi-rest","function_name":"json_object_int_inc"},"8878":{"probe_name":"mpi-rest","function_name":"json_object_get_userdata"},"8877":{"probe_name":"mpi-rest","function_name":"json_object_get_type"},"8876":{"probe_name":"mpi-rest","function_name":"json_object_get_string_len"},"8875":{"probe_name":"mpi-rest","function_name":"json_object_get_string"},"8874":{"probe_name":"mpi-rest","function_name":"json_object_get_object"},"8873":{"probe_name":"mpi-rest","function_name":"json_object_get_int64"},"8872":{"probe_name":"mpi-rest","function_name":"json_object_get_int"},"8871":{"probe_name":"mpi-rest","function_name":"json_object_get_double"},"8870":{"probe_name":"mpi-rest","function_name":"json_object_get_boolean"},"8869":{"probe_name":"mpi-rest","function_name":"json_object_get_array"},"8868":{"probe_name":"mpi-rest","function_name":"json_object_get"},"8867":{"probe_name":"mpi-rest","function_name":"json_object_generic_delete"},"8866":{"probe_name":"mpi-rest","function_name":"json_object_from_file"},"8865":{"probe_name":"mpi-rest","function_name":"json_object_from_fd_ex"},"8864":{"probe_name":"mpi-rest","function_name":"json_object_from_fd"},"8863":{"probe_name":"mpi-rest","function_name":"json_object_free_userdata"},"8862":{"probe_name":"mpi-rest","function_name":"json_object_equal"},"8861":{"probe_name":"mpi-rest","function_name":"json_object_double_to_json_string_format"},"8860":{"probe_name":"mpi-rest","function_name":"json_object_double_to_json_string_default"},"8859":{"probe_name":"mpi-rest","function_name":"json_object_double_to_json_string"},"8858":{"probe_name":"mpi-rest","function_name":"json_object_deep_copy_recursive"},"8857":{"probe_name":"mpi-rest","function_name":"json_object_deep_copy"},"8856":{"probe_name":"mpi-rest","function_name":"json_object_copy_serializer_data"},"8855":{"probe_name":"mpi-rest","function_name":"json_object_boolean_to_json_string"},"8854":{"probe_name":"mpi-rest","function_name":"json_object_array_to_json_string"},"8853":{"probe_name":"mpi-rest","function_name":"json_object_array_sort"},"8852":{"probe_name":"mpi-rest","function_name":"json_object_array_put_idx"},"8851":{"probe_name":"mpi-rest","function_name":"json_object_array_length"},"8850":{"probe_name":"mpi-rest","function_name":"json_object_array_get_idx"},"8849":{"probe_name":"mpi-rest","function_name":"json_object_array_entry_free"},"8848":{"probe_name":"mpi-rest","function_name":"json_object_array_delete"},"8847":{"probe_name":"mpi-rest","function_name":"json_object_array_del_idx"},"8846":{"probe_name":"mpi-rest","function_name":"json_object_array_bsearch"},"8845":{"probe_name":"mpi-rest","function_name":"json_object_array_add"},"8844":{"probe_name":"mpi-rest","function_name":"json_object_all_values_equal"},"8843":{"probe_name":"mpi-rest","function_name":"json_global_set_string_hash"},"8842":{"probe_name":"mpi-rest","function_name":"json_escape_str"},"8841":{"probe_name":"mpi-rest","function_name":"json_c_visit"},"8840":{"probe_name":"mpi-rest","function_name":"json_c_version_num"},"8839":{"probe_name":"mpi-rest","function_name":"json_c_version"},"8838":{"probe_name":"mpi-rest","function_name":"json_c_shallow_copy_default"},"8837":{"probe_name":"mpi-rest","function_name":"json_c_set_serialization_double_format"},"8836":{"probe_name":"mpi-rest","function_name":"json_c_object_sizeof"},"8835":{"probe_name":"mpi-rest","function_name":"json_c_get_random_seed"},"8834":{"probe_name":"mpi-rest","function_name":"json_array_equal"},"8833":{"probe_name":"mpi-rest","function_name":"issue_packed_put"},"8832":{"probe_name":"mpi-rest","function_name":"issue_packed_get"},"8831":{"probe_name":"mpi-rest","function_name":"isend_enqueue_cb:0x5ddd70"},"8830":{"probe_name":"mpi-rest","function_name":"isend_enqueue_cb:0x576020"},"8829":{"probe_name":"mpi-rest","function_name":"is_valid_index"},"8828":{"probe_name":"mpi-rest","function_name":"is_valid_alignment"},"8827":{"probe_name":"mpi-rest","function_name":"is_localhost"},"8826":{"probe_name":"mpi-rest","function_name":"is_aggregator"},"8825":{"probe_name":"mpi-rest","function_name":"irecv_enqueue_cb:0x5d6d00"},"8824":{"probe_name":"mpi-rest","function_name":"irecv_enqueue_cb:0x56ee70"},"8823":{"probe_name":"mpi-rest","function_name":"internal_Waitsome"},"8822":{"probe_name":"mpi-rest","function_name":"internal_Waitany"},"8821":{"probe_name":"mpi-rest","function_name":"internal_Testsome"},"8820":{"probe_name":"mpi-rest","function_name":"internal_Testany"},"8819":{"probe_name":"mpi-rest","function_name":"internal_Startall"},"8818":{"probe_name":"mpi-rest","function_name":"internal_Pcontrol"},"8817":{"probe_name":"mpi-rest","function_name":"init_wtick"},"8816":{"probe_name":"mpi-rest","function_name":"init_send_recv_list"},"8815":{"probe_name":"mpi-rest","function_name":"init_lustre_lib_syms"},"8814":{"probe_name":"mpi-rest","function_name":"init_lhost_list"},"8813":{"probe_name":"mpi-rest","function_name":"init_classes"},"8812":{"probe_name":"mpi-rest","function_name":"index_m2m.cold"},"8811":{"probe_name":"mpi-rest","function_name":"index_m2m"},"8810":{"probe_name":"mpi-rest","function_name":"indent"},"8809":{"probe_name":"mpi-rest","function_name":"host_free_registered"},"8808":{"probe_name":"mpi-rest","function_name":"host_free_buffer_registered"},"8807":{"probe_name":"mpi-rest","function_name":"host_free:0x6af910"},"8806":{"probe_name":"mpi-rest","function_name":"host_free:0x64e760"},"8805":{"probe_name":"mpi-rest","function_name":"host_free:0x5df1a0"},"8804":{"probe_name":"mpi-rest","function_name":"host_alloc_registered"},"8803":{"probe_name":"mpi-rest","function_name":"host_alloc_buffer_registered"},"8802":{"probe_name":"mpi-rest","function_name":"host_alloc:0x6af8e0"},"8801":{"probe_name":"mpi-rest","function_name":"host_alloc:0x64e730"},"8800":{"probe_name":"mpi-rest","function_name":"host_alloc:0x5df170"},"8799":{"probe_name":"mpi-rest","function_name":"hint_get_uint64"},"8798":{"probe_name":"mpi-rest","function_name":"hint_get_str"},"8797":{"probe_name":"mpi-rest","function_name":"hint_get_key"},"8796":{"probe_name":"mpi-rest","function_name":"hint_get_int"},"8795":{"probe_name":"mpi-rest","function_name":"heapify"},"8794":{"probe_name":"mpi-rest","function_name":"hashlittle"},"8793":{"probe_name":"mpi-rest","function_name":"has_dev_urandom"},"8792":{"probe_name":"mpi-rest","function_name":"handle_acc_data.constprop.0"},"8791":{"probe_name":"mpi-rest","function_name":"gpfs_wr_access_start"},"8790":{"probe_name":"mpi-rest","function_name":"gpfs_wr_access_end"},"8789":{"probe_name":"mpi-rest","function_name":"get_tree_type"},"8788":{"probe_name":"mpi-rest","function_name":"get_total_msgsize.cold"},"8787":{"probe_name":"mpi-rest","function_name":"get_total_msgsize"},"8786":{"probe_name":"mpi-rest","function_name":"get_timer_time_in_double"},"8785":{"probe_name":"mpi-rest","function_name":"get_time_seed"},"8784":{"probe_name":"mpi-rest","function_name":"get_target_cmpl_cb"},"8783":{"probe_name":"mpi-rest","function_name":"get_tag_from_stringtag"},"8782":{"probe_name":"mpi-rest","function_name":"get_tag_from_port.part.0"},"8781":{"probe_name":"mpi-rest","function_name":"get_string_component"},"8780":{"probe_name":"mpi-rest","function_name":"get_rankmap_range"},"8779":{"probe_name":"mpi-rest","function_name":"get_next_fr_off"},"8778":{"probe_name":"mpi-rest","function_name":"get_next_avtid"},"8777":{"probe_name":"mpi-rest","function_name":"get_max_procs"},"8776":{"probe_name":"mpi-rest","function_name":"get_huge_complete.cold"},"8775":{"probe_name":"mpi-rest","function_name":"get_huge_complete"},"8774":{"probe_name":"mpi-rest","function_name":"get_huge"},"8773":{"probe_name":"mpi-rest","function_name":"get_ex"},"8772":{"probe_name":"mpi-rest","function_name":"get_dynerr_string"},"8771":{"probe_name":"mpi-rest","function_name":"get_dev_random_seed"},"8770":{"probe_name":"mpi-rest","function_name":"get_count:0x3f7b70"},"8769":{"probe_name":"mpi-rest","function_name":"get_count:0x3c0210"},"8768":{"probe_name":"mpi-rest","function_name":"get_avg_msgsize.cold"},"8767":{"probe_name":"mpi-rest","function_name":"get_avg_msgsize"},"8766":{"probe_name":"mpi-rest","function_name":"get_ack_target_cmpl_cb.cold"},"8765":{"probe_name":"mpi-rest","function_name":"get_ack_target_cmpl_cb"},"8764":{"probe_name":"mpi-rest","function_name":"get_acc_target_cmpl_cb.cold"},"8763":{"probe_name":"mpi-rest","function_name":"get_acc_target_cmpl_cb"},"8762":{"probe_name":"mpi-rest","function_name":"get_acc_dt_target_cmpl_cb"},"8761":{"probe_name":"mpi-rest","function_name":"get_acc_ack_target_cmpl_cb.cold"},"8760":{"probe_name":"mpi-rest","function_name":"get_acc_ack_target_cmpl_cb"},"8759":{"probe_name":"mpi-rest","function_name":"generate_random_addr"},"8758":{"probe_name":"mpi-rest","function_name":"gavl_update_node_info"},"8757":{"probe_name":"mpi-rest","function_name":"gavl_tree_search_internal"},"8756":{"probe_name":"mpi-rest","function_name":"gavl_tree_remove_nodes"},"8755":{"probe_name":"mpi-rest","function_name":"gavl_tree_remove_node_internal"},"8754":{"probe_name":"mpi-rest","function_name":"gavl_tree_rebalance"},"8753":{"probe_name":"mpi-rest","function_name":"gavl_tree_delete_removed_nodes"},"8752":{"probe_name":"mpi-rest","function_name":"gavl_right_rotation"},"8751":{"probe_name":"mpi-rest","function_name":"gavl_right_left_rotation"},"8750":{"probe_name":"mpi-rest","function_name":"gavl_left_rotation"},"8749":{"probe_name":"mpi-rest","function_name":"gavl_left_right_rotation"},"8748":{"probe_name":"mpi-rest","function_name":"fstat"},"8747":{"probe_name":"mpi-rest","function_name":"free_tree"},"8746":{"probe_name":"mpi-rest","function_name":"free_data:0x3f4d60"},"8745":{"probe_name":"mpi-rest","function_name":"free_data:0x3d0160"},"8744":{"probe_name":"mpi-rest","function_name":"frame_dummy"},"8743":{"probe_name":"mpi-rest","function_name":"first_token"},"8742":{"probe_name":"mpi-rest","function_name":"find_provider"},"8741":{"probe_name":"mpi-rest","function_name":"find_next_off"},"8740":{"probe_name":"mpi-rest","function_name":"find_name"},"8739":{"probe_name":"mpi-rest","function_name":"find_file"},"8738":{"probe_name":"mpi-rest","function_name":"find_async_thread"},"8737":{"probe_name":"mpi-rest","function_name":"find_and_allocate_context_id"},"8736":{"probe_name":"mpi-rest","function_name":"finalize_builtin_comm"},"8735":{"probe_name":"mpi-rest","function_name":"fill_iov_vector.constprop.0"},"8734":{"probe_name":"mpi-rest","function_name":"file_to_info_all"},"8733":{"probe_name":"mpi-rest","function_name":"external32_float_convert.isra.0"},"8732":{"probe_name":"mpi-rest","function_name":"external32_basic_convert.isra.0"},"8731":{"probe_name":"mpi-rest","function_name":"establishAggregationConn"},"8730":{"probe_name":"mpi-rest","function_name":"encode_buffer"},"8729":{"probe_name":"mpi-rest","function_name":"dynamic_intercomm_create.constprop.0"},"8728":{"probe_name":"mpi-rest","function_name":"dwin_free_target_mr"},"8727":{"probe_name":"mpi-rest","function_name":"dwin_close_mr"},"8726":{"probe_name":"mpi-rest","function_name":"ds_write_allowed"},"8725":{"probe_name":"mpi-rest","function_name":"dot_printf.constprop.0.isra.0"},"8724":{"probe_name":"mpi-rest","function_name":"do_reduce"},"8723":{"probe_name":"mpi-rest","function_name":"do_long_am_recv_unpack.part.0:0x66b430"},"8722":{"probe_name":"mpi-rest","function_name":"do_long_am_recv_unpack.part.0:0x65e380"},"8721":{"probe_name":"mpi-rest","function_name":"do_localcopy.cold"},"8720":{"probe_name":"mpi-rest","function_name":"do_localcopy"},"8719":{"probe_name":"mpi-rest","function_name":"dma_pool_free"},"8718":{"probe_name":"mpi-rest","function_name":"dma_pool_alloc"},"8717":{"probe_name":"mpi-rest","function_name":"dloop_copy"},"8716":{"probe_name":"mpi-rest","function_name":"direct_of_src_rmap"},"8715":{"probe_name":"mpi-rest","function_name":"detect_regular_model.part.0"},"8714":{"probe_name":"mpi-rest","function_name":"deregister_tm_clones"},"8713":{"probe_name":"mpi-rest","function_name":"delete_attr"},"8712":{"probe_name":"mpi-rest","function_name":"decode_buffer"},"8711":{"probe_name":"mpi-rest","function_name":"decode"},"8710":{"probe_name":"mpi-rest","function_name":"datatype_attr_finalize_cb"},"8709":{"probe_name":"mpi-rest","function_name":"cswap_target_cmpl_cb"},"8708":{"probe_name":"mpi-rest","function_name":"cswap_ack_target_cmpl_cb"},"8707":{"probe_name":"mpi-rest","function_name":"create_vni_context"},"8706":{"probe_name":"mpi-rest","function_name":"create_tclass_ep"},"8705":{"probe_name":"mpi-rest","function_name":"create_dt_map.cold"},"8704":{"probe_name":"mpi-rest","function_name":"create_dt_map"},"8703":{"probe_name":"mpi-rest","function_name":"create_container:0x6af940"},"8702":{"probe_name":"mpi-rest","function_name":"create_container:0x5bc670"},"8701":{"probe_name":"mpi-rest","function_name":"create_and_map.constprop.0"},"8700":{"probe_name":"mpi-rest","function_name":"cray_trshmget"},"8699":{"probe_name":"mpi-rest","function_name":"cray_trshmctl"},"8698":{"probe_name":"mpi-rest","function_name":"cray_trshm_inc"},"8697":{"probe_name":"mpi-rest","function_name":"cray_trshm_dec"},"8696":{"probe_name":"mpi-rest","function_name":"cray_trmaxmem"},"8695":{"probe_name":"mpi-rest","function_name":"cray_trInitBytesOn"},"8694":{"probe_name":"mpi-rest","function_name":"cray_trExit"},"8693":{"probe_name":"mpi-rest","function_name":"cray_ofi_hwcoll_get_datatype.constprop.0"},"8692":{"probe_name":"mpi-rest","function_name":"copy_to_hmem_iov"},"8691":{"probe_name":"mpi-rest","function_name":"copy_from_hmem_iov"},"8690":{"probe_name":"mpi-rest","function_name":"contig_unpack_external32_to_buf"},"8689":{"probe_name":"mpi-rest","function_name":"contig_pack_to_iov"},"8688":{"probe_name":"mpi-rest","function_name":"contig_pack_external32_to_buf"},"8687":{"probe_name":"mpi-rest","function_name":"contig_m2m.cold"},"8686":{"probe_name":"mpi-rest","function_name":"contig_m2m"},"8685":{"probe_name":"mpi-rest","function_name":"contents_printf.isra.0.cold"},"8684":{"probe_name":"mpi-rest","function_name":"contents_printf.isra.0"},"8683":{"probe_name":"mpi-rest","function_name":"compute_pfl_components"},"8682":{"probe_name":"mpi-rest","function_name":"compare_token"},"8681":{"probe_name":"mpi-rest","function_name":"compare_nics"},"8680":{"probe_name":"mpi-rest","function_name":"compare_nic_names"},"8679":{"probe_name":"mpi-rest","function_name":"comp_args_to_layout"},"8678":{"probe_name":"mpi-rest","function_name":"comm_split_filesystem_heuristic"},"8677":{"probe_name":"mpi-rest","function_name":"comm_split_filesystem_exhaustive"},"8676":{"probe_name":"mpi-rest","function_name":"comm_abort_target_msg_cb"},"8675":{"probe_name":"mpi-rest","function_name":"comm_abort_origin_cb"},"8674":{"probe_name":"mpi-rest","function_name":"check_xpmem_support"},"8673":{"probe_name":"mpi-rest","function_name":"check_type"},"8672":{"probe_name":"mpi-rest","function_name":"check_repeats"},"8671":{"probe_name":"mpi-rest","function_name":"check_maprange_ok"},"8670":{"probe_name":"mpi-rest","function_name":"check_convert_mlut_to_lut.isra.0"},"8669":{"probe_name":"mpi-rest","function_name":"check_convert_lut_to_regular.part.0"},"8668":{"probe_name":"mpi-rest","function_name":"checkValidErrcode"},"8667":{"probe_name":"mpi-rest","function_name":"checkForUserErrcode"},"8666":{"probe_name":"mpi-rest","function_name":"cb_nidlist_assign_one"},"8665":{"probe_name":"mpi-rest","function_name":"cb_config_list_lex:0x7c0581"},"8664":{"probe_name":"mpi-rest","function_name":"cb_config_list_lex:0x75953b"},"8663":{"probe_name":"mpi-rest","function_name":"call_errhandler"},"8662":{"probe_name":"mpi-rest","function_name":"calculate_norm_graph_costs"},"8661":{"probe_name":"mpi-rest","function_name":"calc_send_count_root"},"8660":{"probe_name":"mpi-rest","function_name":"calc_send_count_non_root"},"8659":{"probe_name":"mpi-rest","function_name":"calc_curr_count"},"8658":{"probe_name":"mpi-rest","function_name":"build_nodemap_pmi2"},"8657":{"probe_name":"mpi-rest","function_name":"build_heap"},"8656":{"probe_name":"mpi-rest","function_name":"build_cb_config_list"},"8655":{"probe_name":"mpi-rest","function_name":"brucks_sched_pup:0x3d3960"},"8654":{"probe_name":"mpi-rest","function_name":"brucks_sched_pup:0x39ff80"},"8653":{"probe_name":"mpi-rest","function_name":"brucks_sched_pup.cold:0x3bfe8"},"8652":{"probe_name":"mpi-rest","function_name":"brucks_sched_pup.cold:0x3b6c4"},"8651":{"probe_name":"mpi-rest","function_name":"blkidx_m2m.cold"},"8650":{"probe_name":"mpi-rest","function_name":"blkidx_m2m"},"8649":{"probe_name":"mpi-rest","function_name":"array_list_sort"},"8648":{"probe_name":"mpi-rest","function_name":"array_list_put_idx"},"8647":{"probe_name":"mpi-rest","function_name":"array_list_new"},"8646":{"probe_name":"mpi-rest","function_name":"array_list_length"},"8645":{"probe_name":"mpi-rest","function_name":"array_list_get_idx"},"8644":{"probe_name":"mpi-rest","function_name":"array_list_free"},"8643":{"probe_name":"mpi-rest","function_name":"array_list_expand_internal"},"8642":{"probe_name":"mpi-rest","function_name":"array_list_del_idx"},"8641":{"probe_name":"mpi-rest","function_name":"array_list_bsearch"},"8640":{"probe_name":"mpi-rest","function_name":"array_list_add"},"8639":{"probe_name":"mpi-rest","function_name":"arg_is_eof"},"8638":{"probe_name":"mpi-rest","function_name":"append_lhost"},"8637":{"probe_name":"mpi-rest","function_name":"am_recv_event.constprop.0.isra.0.cold"},"8636":{"probe_name":"mpi-rest","function_name":"am_recv_event.constprop.0.isra.0"},"8635":{"probe_name":"mpi-rest","function_name":"allreduce_enqueue_cb"},"8634":{"probe_name":"mpi-rest","function_name":"allred_stream_cleanup_cb.cold"},"8633":{"probe_name":"mpi-rest","function_name":"allred_stream_cleanup_cb"},"8632":{"probe_name":"mpi-rest","function_name":"align_fr"},"8631":{"probe_name":"mpi-rest","function_name":"aio_request_complete"},"8630":{"probe_name":"mpi-rest","function_name":"adio_cray_pvar_init"},"8629":{"probe_name":"mpi-rest","function_name":"add_gcn_to_list.constprop.0"},"8628":{"probe_name":"mpi-rest","function_name":"add_failed_proc"},"8627":{"probe_name":"mpi-rest","function_name":"ad_gpfs_timing_crw_report"},"8626":{"probe_name":"mpi-rest","function_name":"ad_gpfs_get_env_vars"},"8625":{"probe_name":"mpi-rest","function_name":"ad_get_env_vars"},"8624":{"probe_name":"mpi-rest","function_name":"ad_cray_hints_init"},"8623":{"probe_name":"mpi-rest","function_name":"acc_target_cmpl_cb.cold"},"8622":{"probe_name":"mpi-rest","function_name":"acc_target_cmpl_cb"},"8621":{"probe_name":"mpi-rest","function_name":"acc_dt_target_cmpl_cb"},"8620":{"probe_name":"mpi-rest","function_name":"_mpiio_timers_init"},"8619":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x7b7ee5"},"8618":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x7b5a3f"},"8617":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x7af3c5"},"8616":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x7aecbe"},"8615":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x7957fd"},"8614":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x783a18"},"8613":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x77aa24"},"8612":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x776916"},"8611":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x771113"},"8610":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x76cfbc"},"8609":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x75e466"},"8608":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x756956"},"8607":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x74f112"},"8606":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x7367ff"},"8605":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x73414e"},"8604":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x7279f3"},"8603":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_stop:0x72528c"},"8602":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x7b7d77"},"8601":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x7b58d1"},"8600":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x7af257"},"8599":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x7aeb50"},"8598":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x79568f"},"8597":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x7838aa"},"8596":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x77a8b6"},"8595":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x7767a8"},"8594":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x770fa5"},"8593":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x76ce4e"},"8592":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x75e2f8"},"8591":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x7567e8"},"8590":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x74efa4"},"8589":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x736691"},"8588":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x733fe0"},"8587":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x727885"},"8586":{"probe_name":"mpi-rest","function_name":"_mpiio_timer_start:0x72511e"},"8585":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x7b7d55"},"8584":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x7b58af"},"8583":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x7af235"},"8582":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x7aeb2e"},"8581":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x79f6ab"},"8580":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x79dec1"},"8579":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x79566d"},"8578":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x783888"},"8577":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x77a894"},"8576":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x776786"},"8575":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x770f83"},"8574":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x76ce2c"},"8573":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x760d62"},"8572":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x75e2d6"},"8571":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x75d4a4"},"8570":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x7567c6"},"8569":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x74ef82"},"8568":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x73f364"},"8567":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x73d021"},"8566":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x73ae5a"},"8565":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x738a93"},"8564":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x73666f"},"8563":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x733fbe"},"8562":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x73011e"},"8561":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x72e36d"},"8560":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x72c20b"},"8559":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x729d3a"},"8558":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x727863"},"8557":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x7250fc"},"8556":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x722419"},"8555":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x720196"},"8554":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x71dd46"},"8553":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x71b9a9"},"8552":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x71962b"},"8551":{"probe_name":"mpi-rest","function_name":"_mpiio_rtc:0x71714b"},"8550":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x7b5c44"},"8549":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x79f75e"},"8548":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x79df74"},"8547":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x795a02"},"8546":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x776b1b"},"8545":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x76d1c1"},"8544":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x760e15"},"8543":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x74f317"},"8542":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x73f417"},"8541":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x73d0d4"},"8540":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x73af0d"},"8539":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x738b46"},"8538":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x736a04"},"8537":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x734353"},"8536":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x7301d1"},"8535":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x72e420"},"8534":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x72c2be"},"8533":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x729ded"},"8532":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x727bf8"},"8531":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x725491"},"8530":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x7224cc"},"8529":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x720249"},"8528":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x71ddf9"},"8527":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x71ba5c"},"8526":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x7196de"},"8525":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_write:0x7171fe"},"8524":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7b6b25"},"8523":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7a063f"},"8522":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x79ee55"},"8521":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7968e3"},"8520":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7779fc"},"8519":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x76e0a2"},"8518":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x761cea"},"8517":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7501f8"},"8516":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7402f8"},"8515":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x73dfb5"},"8514":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x73bdee"},"8513":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x739a27"},"8512":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7378e5"},"8511":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x735234"},"8510":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7310b2"},"8509":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x72f301"},"8508":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x72d19f"},"8507":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x72acce"},"8506":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x728ad9"},"8505":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x726372"},"8504":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7233ad"},"8503":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x72112a"},"8502":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x71ecda"},"8501":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x71c93d"},"8500":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x71a5bf"},"8499":{"probe_name":"mpi-rest","function_name":"_mpiio_cray_interval_stats_flush_NEW:0x7180df"},"8498":{"probe_name":"mpi-rest","function_name":"_mpiio_clock_rate_mhz"},"8497":{"probe_name":"mpi-rest","function_name":"_mpiio_clock_rate"},"8496":{"probe_name":"mpi-rest","function_name":"_mpidi_cray_pmi_allgather"},"8495":{"probe_name":"mpi-rest","function_name":"_json_object_userdata_to_json_string"},"8494":{"probe_name":"mpi-rest","function_name":"_json_object_to_fd"},"8493":{"probe_name":"mpi-rest","function_name":"_json_c_visit"},"8492":{"probe_name":"mpi-rest","function_name":"_json_c_strerror"},"8491":{"probe_name":"mpi-rest","function_name":"_json_c_set_last_err"},"8490":{"probe_name":"mpi-rest","function_name":"_dummy_touch_tls"},"8489":{"probe_name":"mpi-rest","function_name":"_cxi_init_counter"},"8488":{"probe_name":"mpi-rest","function_name":"_cxi_global_counters_report"},"8487":{"probe_name":"mpi-rest","function_name":"_cxi_global_counters_init"},"8486":{"probe_name":"mpi-rest","function_name":"_cxi_counter_sample"},"8485":{"probe_name":"mpi-rest","function_name":"_cray_ofi_parse_num_nics_str"},"8484":{"probe_name":"mpi-rest","function_name":"_cray_ofi_get_numa_node_distances"},"8483":{"probe_name":"mpi-rest","function_name":"_cray_ofi_get_nic_numa_node"},"8482":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_string"},"8481":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_snb"},"8480":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_skx"},"8479":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_rome"},"8478":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_npl"},"8477":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_knl"},"8476":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_int"},"8475":{"probe_name":"mpi-rest","function_name":"_cray_mpi_memcpy_hsw"},"8474":{"probe_name":"mpi-rest","function_name":"_cray_get_clock_rate_mhz"},"8473":{"probe_name":"mpi-rest","function_name":"__stat"},"8472":{"probe_name":"mpi-rest","function_name":"__sfp_handle_exceptions"},"8471":{"probe_name":"mpi-rest","function_name":"__popcountdi2"},"8470":{"probe_name":"mpi-rest","function_name":"__multf3"},"8469":{"probe_name":"mpi-rest","function_name":"__mulsc3"},"8468":{"probe_name":"mpi-rest","function_name":"__muldc3"},"8467":{"probe_name":"mpi-rest","function_name":"__lttf2"},"8466":{"probe_name":"mpi-rest","function_name":"__lstat"},"8465":{"probe_name":"mpi-rest","function_name":"__letf2"},"8464":{"probe_name":"mpi-rest","function_name":"__gttf2"},"8463":{"probe_name":"mpi-rest","function_name":"__getf2"},"8462":{"probe_name":"mpi-rest","function_name":"__fstat"},"8461":{"probe_name":"mpi-rest","function_name":"__do_global_dtors_aux"},"8460":{"probe_name":"mpi-rest","function_name":"__cray_dummy_zcopy_SKX"},"8459":{"probe_name":"mpi-rest","function_name":"__cray_dummy_scopy_SKX"},"8458":{"probe_name":"mpi-rest","function_name":"__cray_dummy_dcopy_SKX"},"8457":{"probe_name":"mpi-rest","function_name":"__cray_dummy_ccopy_SKX"},"8456":{"probe_name":"mpi-rest","function_name":"__addtf3"},"8455":{"probe_name":"mpi-rest","function_name":"VALGRIND_PRINTF_BACKTRACE"},"8454":{"probe_name":"mpi-rest","function_name":"VALGRIND_PRINTF"},"8453":{"probe_name":"mpi-rest","function_name":"Star"},"8452":{"probe_name":"mpi-rest","function_name":"QMPI_Register_tool_storage"},"8451":{"probe_name":"mpi-rest","function_name":"QMPI_Register_tool_name"},"8450":{"probe_name":"mpi-rest","function_name":"QMPI_Register_function"},"8449":{"probe_name":"mpi-rest","function_name":"QMPI_Get_tool_storage"},"8448":{"probe_name":"mpi-rest","function_name":"QMPI_Get_function"},"8447":{"probe_name":"mpi-rest","function_name":"QMPI_Get_calling_address"},"8446":{"probe_name":"mpi-rest","function_name":"MPL_wtime_touint"},"8445":{"probe_name":"mpi-rest","function_name":"MPL_wtime_todouble"},"8444":{"probe_name":"mpi-rest","function_name":"MPL_wtime_to_ticks"},"8443":{"probe_name":"mpi-rest","function_name":"MPL_wtime_init"},"8442":{"probe_name":"mpi-rest","function_name":"MPL_wtime_diff"},"8441":{"probe_name":"mpi-rest","function_name":"MPL_wtime_acc"},"8440":{"probe_name":"mpi-rest","function_name":"MPL_wtime"},"8439":{"probe_name":"mpi-rest","function_name":"MPL_wtick"},"8438":{"probe_name":"mpi-rest","function_name":"MPL_usage_printf"},"8437":{"probe_name":"mpi-rest","function_name":"MPL_trvalid2"},"8436":{"probe_name":"mpi-rest","function_name":"MPL_trvalid"},"8435":{"probe_name":"mpi-rest","function_name":"MPL_trstrdup"},"8434":{"probe_name":"mpi-rest","function_name":"MPL_trrealloc"},"8433":{"probe_name":"mpi-rest","function_name":"MPL_trmunmap"},"8432":{"probe_name":"mpi-rest","function_name":"MPL_trmmap"},"8431":{"probe_name":"mpi-rest","function_name":"MPL_trmalloc"},"8430":{"probe_name":"mpi-rest","function_name":"MPL_trinit"},"8429":{"probe_name":"mpi-rest","function_name":"MPL_trfree"},"8428":{"probe_name":"mpi-rest","function_name":"MPL_trdump"},"8427":{"probe_name":"mpi-rest","function_name":"MPL_trconfig"},"8426":{"probe_name":"mpi-rest","function_name":"MPL_trcategorydump"},"8425":{"probe_name":"mpi-rest","function_name":"MPL_trcalloc"},"8424":{"probe_name":"mpi-rest","function_name":"MPL_traligned_alloc"},"8423":{"probe_name":"mpi-rest","function_name":"MPL_ticks_per_second"},"8422":{"probe_name":"mpi-rest","function_name":"MPL_thread_set_affinity"},"8421":{"probe_name":"mpi-rest","function_name":"MPL_thread_create"},"8420":{"probe_name":"mpi-rest","function_name":"MPL_strsep"},"8419":{"probe_name":"mpi-rest","function_name":"MPL_strncpy"},"8418":{"probe_name":"mpi-rest","function_name":"MPL_strnapp"},"8417":{"probe_name":"mpi-rest","function_name":"MPL_stricmp"},"8416":{"probe_name":"mpi-rest","function_name":"MPL_strdup_no_spaces"},"8415":{"probe_name":"mpi-rest","function_name":"MPL_str_get_string_arg"},"8414":{"probe_name":"mpi-rest","function_name":"MPL_str_get_string"},"8413":{"probe_name":"mpi-rest","function_name":"MPL_str_get_int_arg"},"8412":{"probe_name":"mpi-rest","function_name":"MPL_str_get_binary_arg"},"8411":{"probe_name":"mpi-rest","function_name":"MPL_str_add_string_arg"},"8410":{"probe_name":"mpi-rest","function_name":"MPL_str_add_string"},"8409":{"probe_name":"mpi-rest","function_name":"MPL_str_add_int_arg"},"8408":{"probe_name":"mpi-rest","function_name":"MPL_str_add_binary_arg"},"8407":{"probe_name":"mpi-rest","function_name":"MPL_socket"},"8406":{"probe_name":"mpi-rest","function_name":"MPL_sockaddr_to_str"},"8405":{"probe_name":"mpi-rest","function_name":"MPL_sockaddr_set_aftype"},"8404":{"probe_name":"mpi-rest","function_name":"MPL_sockaddr_port"},"8403":{"probe_name":"mpi-rest","function_name":"MPL_shm_seg_remove"},"8402":{"probe_name":"mpi-rest","function_name":"MPL_shm_seg_open"},"8401":{"probe_name":"mpi-rest","function_name":"MPL_shm_seg_detach"},"8400":{"probe_name":"mpi-rest","function_name":"MPL_shm_seg_create_attach_templ"},"8399":{"probe_name":"mpi-rest","function_name":"MPL_shm_seg_create_and_attach"},"8398":{"probe_name":"mpi-rest","function_name":"MPL_shm_seg_create"},"8397":{"probe_name":"mpi-rest","function_name":"MPL_shm_seg_attach"},"8396":{"probe_name":"mpi-rest","function_name":"MPL_shm_hnd_serialize"},"8395":{"probe_name":"mpi-rest","function_name":"MPL_shm_hnd_init"},"8394":{"probe_name":"mpi-rest","function_name":"MPL_shm_hnd_get_serialized_by_ref"},"8393":{"probe_name":"mpi-rest","function_name":"MPL_shm_hnd_finalize"},"8392":{"probe_name":"mpi-rest","function_name":"MPL_shm_hnd_deserialize_by_ref"},"8391":{"probe_name":"mpi-rest","function_name":"MPL_shm_hnd_deserialize"},"8390":{"probe_name":"mpi-rest","function_name":"MPL_shm_fixed_seg_create_and_attach"},"8389":{"probe_name":"mpi-rest","function_name":"MPL_shm_fixed_seg_attach"},"8388":{"probe_name":"mpi-rest","function_name":"MPL_set_listen_attr"},"8387":{"probe_name":"mpi-rest","function_name":"MPL_rankmap_str_to_array"},"8386":{"probe_name":"mpi-rest","function_name":"MPL_rankmap_array_to_str"},"8385":{"probe_name":"mpi-rest","function_name":"MPL_putenv"},"8384":{"probe_name":"mpi-rest","function_name":"MPL_msg_printf"},"8383":{"probe_name":"mpi-rest","function_name":"MPL_listen_portrange"},"8382":{"probe_name":"mpi-rest","function_name":"MPL_listen_anyport"},"8381":{"probe_name":"mpi-rest","function_name":"MPL_listen"},"8380":{"probe_name":"mpi-rest","function_name":"MPL_large_writev"},"8379":{"probe_name":"mpi-rest","function_name":"MPL_large_readv"},"8378":{"probe_name":"mpi-rest","function_name":"MPL_internal_sys_error_printf"},"8377":{"probe_name":"mpi-rest","function_name":"MPL_internal_error_printf"},"8376":{"probe_name":"mpi-rest","function_name":"MPL_initlock_unlock.part.0:0x5b91b0"},"8375":{"probe_name":"mpi-rest","function_name":"MPL_initlock_unlock.part.0:0x4f36f0"},"8374":{"probe_name":"mpi-rest","function_name":"MPL_initlock_unlock.part.0:0x46ef30"},"8373":{"probe_name":"mpi-rest","function_name":"MPL_initlock_lock.part.0:0x5b9180"},"8372":{"probe_name":"mpi-rest","function_name":"MPL_initlock_lock.part.0:0x4f36c0"},"8371":{"probe_name":"mpi-rest","function_name":"MPL_initlock_lock.part.0:0x46ef00"},"8370":{"probe_name":"mpi-rest","function_name":"MPL_host_is_local"},"8369":{"probe_name":"mpi-rest","function_name":"MPL_gpu_unregister_host"},"8368":{"probe_name":"mpi-rest","function_name":"MPL_gpu_stream_is_valid"},"8367":{"probe_name":"mpi-rest","function_name":"MPL_gpu_register_host"},"8366":{"probe_name":"mpi-rest","function_name":"MPL_gpu_query_support"},"8365":{"probe_name":"mpi-rest","function_name":"MPL_gpu_malloc_host"},"8364":{"probe_name":"mpi-rest","function_name":"MPL_gpu_malloc"},"8363":{"probe_name":"mpi-rest","function_name":"MPL_gpu_local_to_global_dev_id"},"8362":{"probe_name":"mpi-rest","function_name":"MPL_gpu_launch_hostfn"},"8361":{"probe_name":"mpi-rest","function_name":"MPL_gpu_ipc_handle_unmap"},"8360":{"probe_name":"mpi-rest","function_name":"MPL_gpu_ipc_handle_map"},"8359":{"probe_name":"mpi-rest","function_name":"MPL_gpu_ipc_handle_create"},"8358":{"probe_name":"mpi-rest","function_name":"MPL_gpu_init"},"8357":{"probe_name":"mpi-rest","function_name":"MPL_gpu_global_to_local_dev_id"},"8356":{"probe_name":"mpi-rest","function_name":"MPL_gpu_get_dev_list"},"8355":{"probe_name":"mpi-rest","function_name":"MPL_gpu_get_dev_id_from_attr"},"8354":{"probe_name":"mpi-rest","function_name":"MPL_gpu_get_dev_count"},"8353":{"probe_name":"mpi-rest","function_name":"MPL_gpu_get_buffer_bounds"},"8352":{"probe_name":"mpi-rest","function_name":"MPL_gpu_free_host"},"8351":{"probe_name":"mpi-rest","function_name":"MPL_gpu_free_hook_register"},"8350":{"probe_name":"mpi-rest","function_name":"MPL_gpu_free"},"8349":{"probe_name":"mpi-rest","function_name":"MPL_gpu_finalize"},"8348":{"probe_name":"mpi-rest","function_name":"MPL_gpu_event_is_complete"},"8347":{"probe_name":"mpi-rest","function_name":"MPL_gpu_event_init_count"},"8346":{"probe_name":"mpi-rest","function_name":"MPL_gpu_event_complete"},"8345":{"probe_name":"mpi-rest","function_name":"MPL_gpu_enqueue_wait"},"8344":{"probe_name":"mpi-rest","function_name":"MPL_gpu_enqueue_trigger"},"8343":{"probe_name":"mpi-rest","function_name":"MPL_gpu_dev_affinity_to_env"},"8342":{"probe_name":"mpi-rest","function_name":"MPL_get_sockaddr_iface"},"8341":{"probe_name":"mpi-rest","function_name":"MPL_get_sockaddr_direct"},"8340":{"probe_name":"mpi-rest","function_name":"MPL_get_sockaddr"},"8339":{"probe_name":"mpi-rest","function_name":"MPL_get_nprocs"},"8338":{"probe_name":"mpi-rest","function_name":"MPL_gavl_tree_insert"},"8337":{"probe_name":"mpi-rest","function_name":"MPL_gavl_tree_destory"},"8336":{"probe_name":"mpi-rest","function_name":"MPL_gavl_tree_delete_start_addr"},"8335":{"probe_name":"mpi-rest","function_name":"MPL_gavl_tree_delete_range"},"8334":{"probe_name":"mpi-rest","function_name":"MPL_gavl_tree_create"},"8333":{"probe_name":"mpi-rest","function_name":"MPL_external_free"},"8332":{"probe_name":"mpi-rest","function_name":"MPL_exit"},"8331":{"probe_name":"mpi-rest","function_name":"MPL_env2unsignedlong"},"8330":{"probe_name":"mpi-rest","function_name":"MPL_env2str"},"8329":{"probe_name":"mpi-rest","function_name":"MPL_env2range"},"8328":{"probe_name":"mpi-rest","function_name":"MPL_env2long"},"8327":{"probe_name":"mpi-rest","function_name":"MPL_env2int"},"8326":{"probe_name":"mpi-rest","function_name":"MPL_env2double"},"8325":{"probe_name":"mpi-rest","function_name":"MPL_env2bool"},"8324":{"probe_name":"mpi-rest","function_name":"MPL_direct_strdup"},"8323":{"probe_name":"mpi-rest","function_name":"MPL_direct_realloc"},"8322":{"probe_name":"mpi-rest","function_name":"MPL_direct_malloc"},"8321":{"probe_name":"mpi-rest","function_name":"MPL_direct_free"},"8320":{"probe_name":"mpi-rest","function_name":"MPL_direct_calloc"},"8319":{"probe_name":"mpi-rest","function_name":"MPL_create_pathname"},"8318":{"probe_name":"mpi-rest","function_name":"MPL_cray_trshmget"},"8317":{"probe_name":"mpi-rest","function_name":"MPL_cray_trshmctl"},"8316":{"probe_name":"mpi-rest","function_name":"MPL_cray_trshm_inc"},"8315":{"probe_name":"mpi-rest","function_name":"MPL_cray_trshm_dec"},"8314":{"probe_name":"mpi-rest","function_name":"MPL_cray_tron"},"8313":{"probe_name":"mpi-rest","function_name":"MPL_cray_trmaxmem"},"8312":{"probe_name":"mpi-rest","function_name":"MPL_cray_trconfig"},"8311":{"probe_name":"mpi-rest","function_name":"MPL_cray_trSummary"},"8310":{"probe_name":"mpi-rest","function_name":"MPL_cray_trInitBytesOn"},"8309":{"probe_name":"mpi-rest","function_name":"MPL_cray_trHWMSummaryOn"},"8308":{"probe_name":"mpi-rest","function_name":"MPL_cray_trExit"},"8307":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7bc277"},"8306":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7b83ca"},"8305":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7b7cb8"},"8304":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7b5812"},"8303":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7b2b9f"},"8302":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7af198"},"8301":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7aea91"},"8300":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7ad016"},"8299":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7a9399"},"8298":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7a1cc7"},"8297":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7a0c38"},"8296":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x79f60e"},"8295":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x79de24"},"8294":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x79db1a"},"8293":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7955d0"},"8292":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x79340c"},"8291":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7845a8"},"8290":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7837eb"},"8289":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x781db5"},"8288":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x77a7f7"},"8287":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7766e9"},"8286":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7752b5"},"8285":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x770ee6"},"8284":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x76cd8f"},"8283":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x76c8b6"},"8282":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x760cc5"},"8281":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x75e239"},"8280":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x75d407"},"8279":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x75a37f"},"8278":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x758ea9"},"8277":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x758d76"},"8276":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x756729"},"8275":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x74eee5"},"8274":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x73f2c7"},"8273":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x73cf84"},"8272":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x73adbd"},"8271":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7389f6"},"8270":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7365d2"},"8269":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x733f21"},"8268":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x730081"},"8267":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x72e2d0"},"8266":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x72c16e"},"8265":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x729c9d"},"8264":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7277c6"},"8263":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x72505f"},"8262":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x72237c"},"8261":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7200f9"},"8260":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x71dca9"},"8259":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x71b90c"},"8258":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x71958e"},"8257":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x7170ae"},"8256":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup:0x716ab8"},"8255":{"probe_name":"mpi-rest","function_name":"MPL_cray_strdup.constprop.0"},"8254":{"probe_name":"mpi-rest","function_name":"MPL_cray_realloc:0x7c1ef2"},"8253":{"probe_name":"mpi-rest","function_name":"MPL_cray_realloc:0x6fdb37"},"8252":{"probe_name":"mpi-rest","function_name":"MPL_cray_realloc.constprop.0"},"8251":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x7c1ded"},"8250":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x742223"},"8249":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x708933"},"8248":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x708457"},"8247":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x70806f"},"8246":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x707929"},"8245":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x70742d"},"8244":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x6ffa3f"},"8243":{"probe_name":"mpi-rest","function_name":"MPL_cray_malloc:0x6fda96"},"8242":{"probe_name":"mpi-rest","function_name":"MPL_cray_in_shmget"},"8241":{"probe_name":"mpi-rest","function_name":"MPL_cray_in_shmctl"},"8240":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7c1ea3"},"8239":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7bc2c5"},"8238":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7b8418"},"8237":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7b7d06"},"8236":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7b5860"},"8235":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7b2bed"},"8234":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7af1e6"},"8233":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7aeadf"},"8232":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7ad064"},"8231":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7a93e7"},"8230":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7a1d15"},"8229":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7a0c86"},"8228":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x79f65c"},"8227":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x79de72"},"8226":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x79db68"},"8225":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x79561e"},"8224":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x79345a"},"8223":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7845f6"},"8222":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x783839"},"8221":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x781e03"},"8220":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x77a845"},"8219":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x776737"},"8218":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x775303"},"8217":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x770f34"},"8216":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x76cddd"},"8215":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x76c904"},"8214":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x760d13"},"8213":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x75e287"},"8212":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x75d455"},"8211":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x75a3cd"},"8210":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x758ef7"},"8209":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x758dc4"},"8208":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x756777"},"8207":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x74ef33"},"8206":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7422d9"},"8205":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x73f315"},"8204":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x73cfd2"},"8203":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x73ae0b"},"8202":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x738a44"},"8201":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x736620"},"8200":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x733f6f"},"8199":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7300cf"},"8198":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x72e31e"},"8197":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x72c1bc"},"8196":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x729ceb"},"8195":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x727814"},"8194":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7250ad"},"8193":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7223ca"},"8192":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x720147"},"8191":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x71dcf7"},"8190":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x71b95a"},"8189":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7195dc"},"8188":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7170fc"},"8187":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x716b06"},"8186":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x708ce2"},"8185":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x708985"},"8184":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x7080c1"},"8183":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x70797b"},"8182":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x70747f"},"8181":{"probe_name":"mpi-rest","function_name":"MPL_cray_free:0x6fdae8"},"8180":{"probe_name":"mpi-rest","function_name":"MPL_cray_free.constprop.0"},"8179":{"probe_name":"mpi-rest","function_name":"MPL_cray_calloc:0x7c1e3f"},"8178":{"probe_name":"mpi-rest","function_name":"MPL_cray_calloc:0x742275"},"8177":{"probe_name":"mpi-rest","function_name":"MPL_cray_calloc:0x708c7e"},"8176":{"probe_name":"mpi-rest","function_name":"MPL_connect"},"8175":{"probe_name":"mpi-rest","function_name":"MPL_backtrace_show"},"8174":{"probe_name":"mpi-rest","function_name":"MPL_args_serialize"},"8173":{"probe_name":"mpi-rest","function_name":"MPL_args_deserialize"},"8172":{"probe_name":"mpi-rest","function_name":"MPLI_thread_start"},"8171":{"probe_name":"mpi-rest","function_name":"MPLI_shm_hnd_reset_val"},"8170":{"probe_name":"mpi-rest","function_name":"MPLI_shm_hnd_free"},"8169":{"probe_name":"mpi-rest","function_name":"MPLI_shm_hnd_alloc"},"8168":{"probe_name":"mpi-rest","function_name":"MPLI_shm_ghnd_alloc:0x70856c"},"8167":{"probe_name":"mpi-rest","function_name":"MPLI_shm_ghnd_alloc:0x708110"},"8166":{"probe_name":"mpi-rest","function_name":"MPLI_gavl_subset_cmp_func"},"8165":{"probe_name":"mpi-rest","function_name":"MPLI_gavl_start_addr_cmp_func"},"8164":{"probe_name":"mpi-rest","function_name":"MPLI_gavl_intersect_cmp_func"},"8163":{"probe_name":"mpi-rest","function_name":"MPI_Wtime"},"8162":{"probe_name":"mpi-rest","function_name":"MPI_Wtick"},"8161":{"probe_name":"mpi-rest","function_name":"MPI_Win_wait"},"8160":{"probe_name":"mpi-rest","function_name":"MPI_Win_unlock_all"},"8159":{"probe_name":"mpi-rest","function_name":"MPI_Win_unlock"},"8158":{"probe_name":"mpi-rest","function_name":"MPI_Win_test"},"8157":{"probe_name":"mpi-rest","function_name":"MPI_Win_sync"},"8156":{"probe_name":"mpi-rest","function_name":"MPI_Win_start"},"8155":{"probe_name":"mpi-rest","function_name":"MPI_Win_shared_query_c"},"8154":{"probe_name":"mpi-rest","function_name":"MPI_Win_shared_query"},"8153":{"probe_name":"mpi-rest","function_name":"MPI_Win_set_name"},"8152":{"probe_name":"mpi-rest","function_name":"MPI_Win_set_info"},"8151":{"probe_name":"mpi-rest","function_name":"MPI_Win_set_errhandler"},"8150":{"probe_name":"mpi-rest","function_name":"MPI_Win_set_attr"},"8149":{"probe_name":"mpi-rest","function_name":"MPI_Win_post"},"8148":{"probe_name":"mpi-rest","function_name":"MPI_Win_lock_all"},"8147":{"probe_name":"mpi-rest","function_name":"MPI_Win_lock"},"8146":{"probe_name":"mpi-rest","function_name":"MPI_Win_get_name"},"8145":{"probe_name":"mpi-rest","function_name":"MPI_Win_get_info"},"8144":{"probe_name":"mpi-rest","function_name":"MPI_Win_get_group"},"8143":{"probe_name":"mpi-rest","function_name":"MPI_Win_get_errhandler"},"8142":{"probe_name":"mpi-rest","function_name":"MPI_Win_get_attr"},"8141":{"probe_name":"mpi-rest","function_name":"MPI_Win_free_keyval"},"8140":{"probe_name":"mpi-rest","function_name":"MPI_Win_free"},"8139":{"probe_name":"mpi-rest","function_name":"MPI_Win_flush_local_all"},"8138":{"probe_name":"mpi-rest","function_name":"MPI_Win_flush_local"},"8137":{"probe_name":"mpi-rest","function_name":"MPI_Win_flush_all"},"8136":{"probe_name":"mpi-rest","function_name":"MPI_Win_flush"},"8135":{"probe_name":"mpi-rest","function_name":"MPI_Win_fence"},"8134":{"probe_name":"mpi-rest","function_name":"MPI_Win_detach"},"8133":{"probe_name":"mpi-rest","function_name":"MPI_Win_delete_attr"},"8132":{"probe_name":"mpi-rest","function_name":"MPI_Win_create_keyval"},"8131":{"probe_name":"mpi-rest","function_name":"MPI_Win_create_errhandler"},"8130":{"probe_name":"mpi-rest","function_name":"MPI_Win_create_dynamic"},"8129":{"probe_name":"mpi-rest","function_name":"MPI_Win_create_c"},"8128":{"probe_name":"mpi-rest","function_name":"MPI_Win_create"},"8127":{"probe_name":"mpi-rest","function_name":"MPI_Win_complete"},"8126":{"probe_name":"mpi-rest","function_name":"MPI_Win_call_errhandler"},"8125":{"probe_name":"mpi-rest","function_name":"MPI_Win_attach"},"8124":{"probe_name":"mpi-rest","function_name":"MPI_Win_allocate_shared_c"},"8123":{"probe_name":"mpi-rest","function_name":"MPI_Win_allocate_shared"},"8122":{"probe_name":"mpi-rest","function_name":"MPI_Win_allocate_c"},"8121":{"probe_name":"mpi-rest","function_name":"MPI_Win_allocate"},"8120":{"probe_name":"mpi-rest","function_name":"MPI_Waitsome"},"8119":{"probe_name":"mpi-rest","function_name":"MPI_Waitany"},"8118":{"probe_name":"mpi-rest","function_name":"MPI_Waitall"},"8117":{"probe_name":"mpi-rest","function_name":"MPI_Wait"},"8116":{"probe_name":"mpi-rest","function_name":"MPI_Unpublish_name"},"8115":{"probe_name":"mpi-rest","function_name":"MPI_Unpack_external_c"},"8114":{"probe_name":"mpi-rest","function_name":"MPI_Unpack_external"},"8113":{"probe_name":"mpi-rest","function_name":"MPI_Unpack_c"},"8112":{"probe_name":"mpi-rest","function_name":"MPI_Unpack"},"8111":{"probe_name":"mpi-rest","function_name":"MPI_Type_vector_c"},"8110":{"probe_name":"mpi-rest","function_name":"MPI_Type_vector"},"8109":{"probe_name":"mpi-rest","function_name":"MPI_Type_ub"},"8108":{"probe_name":"mpi-rest","function_name":"MPI_Type_struct"},"8107":{"probe_name":"mpi-rest","function_name":"MPI_Type_size_x"},"8106":{"probe_name":"mpi-rest","function_name":"MPI_Type_size_c"},"8105":{"probe_name":"mpi-rest","function_name":"MPI_Type_size"},"8104":{"probe_name":"mpi-rest","function_name":"MPI_Type_set_name"},"8103":{"probe_name":"mpi-rest","function_name":"MPI_Type_set_attr"},"8102":{"probe_name":"mpi-rest","function_name":"MPI_Type_match_size"},"8101":{"probe_name":"mpi-rest","function_name":"MPI_Type_lb"},"8100":{"probe_name":"mpi-rest","function_name":"MPI_Type_indexed_c"},"8099":{"probe_name":"mpi-rest","function_name":"MPI_Type_indexed"},"8098":{"probe_name":"mpi-rest","function_name":"MPI_Type_hvector"},"8097":{"probe_name":"mpi-rest","function_name":"MPI_Type_hindexed"},"8096":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_true_extent_x"},"8095":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_true_extent_c"},"8094":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_true_extent"},"8093":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_name"},"8092":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_extent_x"},"8091":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_extent_c"},"8090":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_extent"},"8089":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_envelope_c"},"8088":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_envelope"},"8087":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_contents_c"},"8086":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_contents"},"8085":{"probe_name":"mpi-rest","function_name":"MPI_Type_get_attr"},"8084":{"probe_name":"mpi-rest","function_name":"MPI_Type_free_keyval"},"8083":{"probe_name":"mpi-rest","function_name":"MPI_Type_free"},"8082":{"probe_name":"mpi-rest","function_name":"MPI_Type_extent"},"8081":{"probe_name":"mpi-rest","function_name":"MPI_Type_dup"},"8080":{"probe_name":"mpi-rest","function_name":"MPI_Type_delete_attr"},"8079":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_subarray_c"},"8078":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_subarray"},"8077":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_struct_c"},"8076":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_struct"},"8075":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_resized_c"},"8074":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_resized"},"8073":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_keyval"},"8072":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_indexed_block_c"},"8071":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_indexed_block"},"8070":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_hvector_c"},"8069":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_hvector"},"8068":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_hindexed_c"},"8067":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_hindexed_block_c"},"8066":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_hindexed_block"},"8065":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_hindexed"},"8064":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_f90_real"},"8063":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_f90_integer"},"8062":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_f90_complex"},"8061":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_darray_c"},"8060":{"probe_name":"mpi-rest","function_name":"MPI_Type_create_darray"},"8059":{"probe_name":"mpi-rest","function_name":"MPI_Type_contiguous_c"},"8058":{"probe_name":"mpi-rest","function_name":"MPI_Type_contiguous"},"8057":{"probe_name":"mpi-rest","function_name":"MPI_Type_commit"},"8056":{"probe_name":"mpi-rest","function_name":"MPI_Topo_test"},"8055":{"probe_name":"mpi-rest","function_name":"MPI_Testsome"},"8054":{"probe_name":"mpi-rest","function_name":"MPI_Testany"},"8053":{"probe_name":"mpi-rest","function_name":"MPI_Testall"},"8052":{"probe_name":"mpi-rest","function_name":"MPI_Test_cancelled"},"8051":{"probe_name":"mpi-rest","function_name":"MPI_Test"},"8050":{"probe_name":"mpi-rest","function_name":"MPI_T_source_get_timestamp"},"8049":{"probe_name":"mpi-rest","function_name":"MPI_T_source_get_num"},"8048":{"probe_name":"mpi-rest","function_name":"MPI_T_source_get_info"},"8047":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_write"},"8046":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_stop"},"8045":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_start"},"8044":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_session_free"},"8043":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_session_create"},"8042":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_reset"},"8041":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_readreset"},"8040":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_read"},"8039":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_handle_free"},"8038":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_handle_alloc"},"8037":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_get_num"},"8036":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_get_info"},"8035":{"probe_name":"mpi-rest","function_name":"MPI_T_pvar_get_index"},"8034":{"probe_name":"mpi-rest","function_name":"MPI_T_init_thread"},"8033":{"probe_name":"mpi-rest","function_name":"MPI_T_finalize"},"8032":{"probe_name":"mpi-rest","function_name":"MPI_T_event_set_dropped_handler"},"8031":{"probe_name":"mpi-rest","function_name":"MPI_T_event_register_callback"},"8030":{"probe_name":"mpi-rest","function_name":"MPI_T_event_read"},"8029":{"probe_name":"mpi-rest","function_name":"MPI_T_event_handle_set_info"},"8028":{"probe_name":"mpi-rest","function_name":"MPI_T_event_handle_get_info"},"8027":{"probe_name":"mpi-rest","function_name":"MPI_T_event_handle_free"},"8026":{"probe_name":"mpi-rest","function_name":"MPI_T_event_handle_alloc"},"8025":{"probe_name":"mpi-rest","function_name":"MPI_T_event_get_timestamp"},"8024":{"probe_name":"mpi-rest","function_name":"MPI_T_event_get_source"},"8023":{"probe_name":"mpi-rest","function_name":"MPI_T_event_get_num"},"8022":{"probe_name":"mpi-rest","function_name":"MPI_T_event_get_info"},"8021":{"probe_name":"mpi-rest","function_name":"MPI_T_event_get_index"},"8020":{"probe_name":"mpi-rest","function_name":"MPI_T_event_copy"},"8019":{"probe_name":"mpi-rest","function_name":"MPI_T_event_callback_set_info"},"8018":{"probe_name":"mpi-rest","function_name":"MPI_T_event_callback_get_info"},"8017":{"probe_name":"mpi-rest","function_name":"MPI_T_enum_get_item"},"8016":{"probe_name":"mpi-rest","function_name":"MPI_T_enum_get_info"},"8015":{"probe_name":"mpi-rest","function_name":"MPI_T_cvar_write"},"8014":{"probe_name":"mpi-rest","function_name":"MPI_T_cvar_read"},"8013":{"probe_name":"mpi-rest","function_name":"MPI_T_cvar_handle_free"},"8012":{"probe_name":"mpi-rest","function_name":"MPI_T_cvar_handle_alloc"},"8011":{"probe_name":"mpi-rest","function_name":"MPI_T_cvar_get_num"},"8010":{"probe_name":"mpi-rest","function_name":"MPI_T_cvar_get_info"},"8009":{"probe_name":"mpi-rest","function_name":"MPI_T_cvar_get_index"},"8008":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_pvars"},"8007":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_num_events"},"8006":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_num"},"8005":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_info"},"8004":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_index"},"8003":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_events"},"8002":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_cvars"},"8001":{"probe_name":"mpi-rest","function_name":"MPI_T_category_get_categories"},"8000":{"probe_name":"mpi-rest","function_name":"MPI_T_category_changed"},"7999":{"probe_name":"mpi-rest","function_name":"MPI_Status_set_elements_x"},"7998":{"probe_name":"mpi-rest","function_name":"MPI_Status_set_elements_c"},"7997":{"probe_name":"mpi-rest","function_name":"MPI_Status_set_elements"},"7996":{"probe_name":"mpi-rest","function_name":"MPI_Status_set_cancelled"},"7995":{"probe_name":"mpi-rest","function_name":"MPI_Status_f2c"},"7994":{"probe_name":"mpi-rest","function_name":"MPI_Status_c2f"},"7993":{"probe_name":"mpi-rest","function_name":"MPI_Startall"},"7992":{"probe_name":"mpi-rest","function_name":"MPI_Start"},"7991":{"probe_name":"mpi-rest","function_name":"MPI_Ssend_init_c"},"7990":{"probe_name":"mpi-rest","function_name":"MPI_Ssend_init"},"7989":{"probe_name":"mpi-rest","function_name":"MPI_Ssend_c"},"7988":{"probe_name":"mpi-rest","function_name":"MPI_Ssend"},"7987":{"probe_name":"mpi-rest","function_name":"MPI_Session_set_errhandler"},"7986":{"probe_name":"mpi-rest","function_name":"MPI_Session_init"},"7985":{"probe_name":"mpi-rest","function_name":"MPI_Session_get_pset_info"},"7984":{"probe_name":"mpi-rest","function_name":"MPI_Session_get_num_psets"},"7983":{"probe_name":"mpi-rest","function_name":"MPI_Session_get_nth_pset"},"7982":{"probe_name":"mpi-rest","function_name":"MPI_Session_get_info"},"7981":{"probe_name":"mpi-rest","function_name":"MPI_Session_get_errhandler"},"7980":{"probe_name":"mpi-rest","function_name":"MPI_Session_finalize"},"7979":{"probe_name":"mpi-rest","function_name":"MPI_Session_create_errhandler"},"7978":{"probe_name":"mpi-rest","function_name":"MPI_Session_call_errhandler"},"7977":{"probe_name":"mpi-rest","function_name":"MPI_Sendrecv_replace_c"},"7976":{"probe_name":"mpi-rest","function_name":"MPI_Sendrecv_replace"},"7975":{"probe_name":"mpi-rest","function_name":"MPI_Sendrecv_c"},"7974":{"probe_name":"mpi-rest","function_name":"MPI_Sendrecv"},"7973":{"probe_name":"mpi-rest","function_name":"MPI_Send_init_c"},"7972":{"probe_name":"mpi-rest","function_name":"MPI_Send_init"},"7971":{"probe_name":"mpi-rest","function_name":"MPI_Send_c"},"7970":{"probe_name":"mpi-rest","function_name":"MPI_Send"},"7969":{"probe_name":"mpi-rest","function_name":"MPI_Scatterv_init_c"},"7968":{"probe_name":"mpi-rest","function_name":"MPI_Scatterv_init"},"7967":{"probe_name":"mpi-rest","function_name":"MPI_Scatterv_c"},"7966":{"probe_name":"mpi-rest","function_name":"MPI_Scatterv"},"7965":{"probe_name":"mpi-rest","function_name":"MPI_Scatter_init_c"},"7964":{"probe_name":"mpi-rest","function_name":"MPI_Scatter_init"},"7963":{"probe_name":"mpi-rest","function_name":"MPI_Scatter_c"},"7962":{"probe_name":"mpi-rest","function_name":"MPI_Scatter"},"7961":{"probe_name":"mpi-rest","function_name":"MPI_Scan_init_c"},"7960":{"probe_name":"mpi-rest","function_name":"MPI_Scan_init"},"7959":{"probe_name":"mpi-rest","function_name":"MPI_Scan_c"},"7958":{"probe_name":"mpi-rest","function_name":"MPI_Scan"},"7957":{"probe_name":"mpi-rest","function_name":"MPI_Rsend_init_c"},"7956":{"probe_name":"mpi-rest","function_name":"MPI_Rsend_init"},"7955":{"probe_name":"mpi-rest","function_name":"MPI_Rsend_c"},"7954":{"probe_name":"mpi-rest","function_name":"MPI_Rsend"},"7953":{"probe_name":"mpi-rest","function_name":"MPI_Rput_c"},"7952":{"probe_name":"mpi-rest","function_name":"MPI_Rput"},"7951":{"probe_name":"mpi-rest","function_name":"MPI_Rget_c"},"7950":{"probe_name":"mpi-rest","function_name":"MPI_Rget_accumulate_c"},"7949":{"probe_name":"mpi-rest","function_name":"MPI_Rget_accumulate"},"7948":{"probe_name":"mpi-rest","function_name":"MPI_Rget"},"7947":{"probe_name":"mpi-rest","function_name":"MPI_Request_get_status"},"7946":{"probe_name":"mpi-rest","function_name":"MPI_Request_free"},"7945":{"probe_name":"mpi-rest","function_name":"MPI_Register_datarep_c"},"7944":{"probe_name":"mpi-rest","function_name":"MPI_Register_datarep"},"7943":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter_init_c"},"7942":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter_init"},"7941":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter_c"},"7940":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter_block_init_c"},"7939":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter_block_init"},"7938":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter_block_c"},"7937":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter_block"},"7936":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_scatter"},"7935":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_local_c"},"7934":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_local"},"7933":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_init_c"},"7932":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_init"},"7931":{"probe_name":"mpi-rest","function_name":"MPI_Reduce_c"},"7930":{"probe_name":"mpi-rest","function_name":"MPI_Reduce"},"7929":{"probe_name":"mpi-rest","function_name":"MPI_Recv_init_c"},"7928":{"probe_name":"mpi-rest","function_name":"MPI_Recv_init"},"7927":{"probe_name":"mpi-rest","function_name":"MPI_Recv_c"},"7926":{"probe_name":"mpi-rest","function_name":"MPI_Recv"},"7925":{"probe_name":"mpi-rest","function_name":"MPI_Raccumulate_c"},"7924":{"probe_name":"mpi-rest","function_name":"MPI_Raccumulate"},"7923":{"probe_name":"mpi-rest","function_name":"MPI_Query_thread"},"7922":{"probe_name":"mpi-rest","function_name":"MPI_Put_c"},"7921":{"probe_name":"mpi-rest","function_name":"MPI_Put"},"7920":{"probe_name":"mpi-rest","function_name":"MPI_Publish_name"},"7919":{"probe_name":"mpi-rest","function_name":"MPI_Psend_init"},"7918":{"probe_name":"mpi-rest","function_name":"MPI_Probe"},"7917":{"probe_name":"mpi-rest","function_name":"MPI_Precv_init"},"7916":{"probe_name":"mpi-rest","function_name":"MPI_Pready_range"},"7915":{"probe_name":"mpi-rest","function_name":"MPI_Pready_list"},"7914":{"probe_name":"mpi-rest","function_name":"MPI_Pready"},"7913":{"probe_name":"mpi-rest","function_name":"MPI_Pcontrol"},"7912":{"probe_name":"mpi-rest","function_name":"MPI_Parrived"},"7911":{"probe_name":"mpi-rest","function_name":"MPI_Pack_size_c"},"7910":{"probe_name":"mpi-rest","function_name":"MPI_Pack_size"},"7909":{"probe_name":"mpi-rest","function_name":"MPI_Pack_external_size_c"},"7908":{"probe_name":"mpi-rest","function_name":"MPI_Pack_external_size"},"7907":{"probe_name":"mpi-rest","function_name":"MPI_Pack_external_c"},"7906":{"probe_name":"mpi-rest","function_name":"MPI_Pack_external"},"7905":{"probe_name":"mpi-rest","function_name":"MPI_Pack_c"},"7904":{"probe_name":"mpi-rest","function_name":"MPI_Pack"},"7903":{"probe_name":"mpi-rest","function_name":"MPI_Open_port"},"7902":{"probe_name":"mpi-rest","function_name":"MPI_Op_free"},"7901":{"probe_name":"mpi-rest","function_name":"MPI_Op_create_c"},"7900":{"probe_name":"mpi-rest","function_name":"MPI_Op_create"},"7899":{"probe_name":"mpi-rest","function_name":"MPI_Op_commutative"},"7898":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallw_init_c"},"7897":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallw_init"},"7896":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallw_c"},"7895":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallw"},"7894":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallv_init_c"},"7893":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallv_init"},"7892":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallv_c"},"7891":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoallv"},"7890":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoall_init_c"},"7889":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoall_init"},"7888":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoall_c"},"7887":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_alltoall"},"7886":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgatherv_init_c"},"7885":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgatherv_init"},"7884":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgatherv_c"},"7883":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgatherv"},"7882":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgather_init_c"},"7881":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgather_init"},"7880":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgather_c"},"7879":{"probe_name":"mpi-rest","function_name":"MPI_Neighbor_allgather"},"7878":{"probe_name":"mpi-rest","function_name":"MPI_Mrecv_c"},"7877":{"probe_name":"mpi-rest","function_name":"MPI_Mrecv"},"7876":{"probe_name":"mpi-rest","function_name":"MPI_Mprobe"},"7875":{"probe_name":"mpi-rest","function_name":"MPI_Lookup_name"},"7874":{"probe_name":"mpi-rest","function_name":"MPI_Keyval_free"},"7873":{"probe_name":"mpi-rest","function_name":"MPI_Keyval_create"},"7872":{"probe_name":"mpi-rest","function_name":"MPI_Issend_c"},"7871":{"probe_name":"mpi-rest","function_name":"MPI_Issend"},"7870":{"probe_name":"mpi-rest","function_name":"MPI_Isendrecv_replace_c"},"7869":{"probe_name":"mpi-rest","function_name":"MPI_Isendrecv_replace"},"7868":{"probe_name":"mpi-rest","function_name":"MPI_Isendrecv_c"},"7867":{"probe_name":"mpi-rest","function_name":"MPI_Isendrecv"},"7866":{"probe_name":"mpi-rest","function_name":"MPI_Isend_c"},"7865":{"probe_name":"mpi-rest","function_name":"MPI_Isend"},"7864":{"probe_name":"mpi-rest","function_name":"MPI_Iscatterv_c"},"7863":{"probe_name":"mpi-rest","function_name":"MPI_Iscatterv"},"7862":{"probe_name":"mpi-rest","function_name":"MPI_Iscatter_c"},"7861":{"probe_name":"mpi-rest","function_name":"MPI_Iscatter"},"7860":{"probe_name":"mpi-rest","function_name":"MPI_Iscan_c"},"7859":{"probe_name":"mpi-rest","function_name":"MPI_Iscan"},"7858":{"probe_name":"mpi-rest","function_name":"MPI_Is_thread_main"},"7857":{"probe_name":"mpi-rest","function_name":"MPI_Irsend_c"},"7856":{"probe_name":"mpi-rest","function_name":"MPI_Irsend"},"7855":{"probe_name":"mpi-rest","function_name":"MPI_Ireduce_scatter_c"},"7854":{"probe_name":"mpi-rest","function_name":"MPI_Ireduce_scatter_block_c"},"7853":{"probe_name":"mpi-rest","function_name":"MPI_Ireduce_scatter_block"},"7852":{"probe_name":"mpi-rest","function_name":"MPI_Ireduce_scatter"},"7851":{"probe_name":"mpi-rest","function_name":"MPI_Ireduce_c"},"7850":{"probe_name":"mpi-rest","function_name":"MPI_Ireduce"},"7849":{"probe_name":"mpi-rest","function_name":"MPI_Irecv_c"},"7848":{"probe_name":"mpi-rest","function_name":"MPI_Irecv"},"7847":{"probe_name":"mpi-rest","function_name":"MPI_Iprobe"},"7846":{"probe_name":"mpi-rest","function_name":"MPI_Intercomm_merge"},"7845":{"probe_name":"mpi-rest","function_name":"MPI_Intercomm_create_from_groups"},"7844":{"probe_name":"mpi-rest","function_name":"MPI_Intercomm_create"},"7843":{"probe_name":"mpi-rest","function_name":"MPI_Initialized"},"7842":{"probe_name":"mpi-rest","function_name":"MPI_Init_thread"},"7841":{"probe_name":"mpi-rest","function_name":"MPI_Init"},"7840":{"probe_name":"mpi-rest","function_name":"MPI_Info_val_str_to_int"},"7839":{"probe_name":"mpi-rest","function_name":"MPI_Info_val_int_to_str"},"7838":{"probe_name":"mpi-rest","function_name":"MPI_Info_set"},"7837":{"probe_name":"mpi-rest","function_name":"MPI_Info_get_valuelen"},"7836":{"probe_name":"mpi-rest","function_name":"MPI_Info_get_string"},"7835":{"probe_name":"mpi-rest","function_name":"MPI_Info_get_nthkey"},"7834":{"probe_name":"mpi-rest","function_name":"MPI_Info_get_nkeys"},"7833":{"probe_name":"mpi-rest","function_name":"MPI_Info_get"},"7832":{"probe_name":"mpi-rest","function_name":"MPI_Info_free"},"7831":{"probe_name":"mpi-rest","function_name":"MPI_Info_dup"},"7830":{"probe_name":"mpi-rest","function_name":"MPI_Info_delete"},"7829":{"probe_name":"mpi-rest","function_name":"MPI_Info_create_env"},"7828":{"probe_name":"mpi-rest","function_name":"MPI_Info_create"},"7827":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_alltoallw_c"},"7826":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_alltoallw"},"7825":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_alltoallv_c"},"7824":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_alltoallv"},"7823":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_alltoall_c"},"7822":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_alltoall"},"7821":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_allgatherv_c"},"7820":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_allgatherv"},"7819":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_allgather_c"},"7818":{"probe_name":"mpi-rest","function_name":"MPI_Ineighbor_allgather"},"7817":{"probe_name":"mpi-rest","function_name":"MPI_Imrecv_c"},"7816":{"probe_name":"mpi-rest","function_name":"MPI_Imrecv"},"7815":{"probe_name":"mpi-rest","function_name":"MPI_Improbe"},"7814":{"probe_name":"mpi-rest","function_name":"MPI_Igatherv_c"},"7813":{"probe_name":"mpi-rest","function_name":"MPI_Igatherv"},"7812":{"probe_name":"mpi-rest","function_name":"MPI_Igather_c"},"7811":{"probe_name":"mpi-rest","function_name":"MPI_Igather"},"7810":{"probe_name":"mpi-rest","function_name":"MPI_Iexscan_c"},"7809":{"probe_name":"mpi-rest","function_name":"MPI_Iexscan"},"7808":{"probe_name":"mpi-rest","function_name":"MPI_Ibsend_c"},"7807":{"probe_name":"mpi-rest","function_name":"MPI_Ibsend"},"7806":{"probe_name":"mpi-rest","function_name":"MPI_Ibcast_c"},"7805":{"probe_name":"mpi-rest","function_name":"MPI_Ibcast"},"7804":{"probe_name":"mpi-rest","function_name":"MPI_Ibarrier"},"7803":{"probe_name":"mpi-rest","function_name":"MPI_Ialltoallw_c"},"7802":{"probe_name":"mpi-rest","function_name":"MPI_Ialltoallw"},"7801":{"probe_name":"mpi-rest","function_name":"MPI_Ialltoallv_c"},"7800":{"probe_name":"mpi-rest","function_name":"MPI_Ialltoallv"},"7799":{"probe_name":"mpi-rest","function_name":"MPI_Ialltoall_c"},"7798":{"probe_name":"mpi-rest","function_name":"MPI_Ialltoall"},"7797":{"probe_name":"mpi-rest","function_name":"MPI_Iallreduce_c"},"7796":{"probe_name":"mpi-rest","function_name":"MPI_Iallreduce"},"7795":{"probe_name":"mpi-rest","function_name":"MPI_Iallgatherv_c"},"7794":{"probe_name":"mpi-rest","function_name":"MPI_Iallgatherv"},"7793":{"probe_name":"mpi-rest","function_name":"MPI_Iallgather_c"},"7792":{"probe_name":"mpi-rest","function_name":"MPI_Iallgather"},"7791":{"probe_name":"mpi-rest","function_name":"MPI_Group_union"},"7790":{"probe_name":"mpi-rest","function_name":"MPI_Group_translate_ranks"},"7789":{"probe_name":"mpi-rest","function_name":"MPI_Group_size"},"7788":{"probe_name":"mpi-rest","function_name":"MPI_Group_rank"},"7787":{"probe_name":"mpi-rest","function_name":"MPI_Group_range_incl"},"7786":{"probe_name":"mpi-rest","function_name":"MPI_Group_range_excl"},"7785":{"probe_name":"mpi-rest","function_name":"MPI_Group_intersection"},"7784":{"probe_name":"mpi-rest","function_name":"MPI_Group_incl"},"7783":{"probe_name":"mpi-rest","function_name":"MPI_Group_from_session_pset"},"7782":{"probe_name":"mpi-rest","function_name":"MPI_Group_free"},"7781":{"probe_name":"mpi-rest","function_name":"MPI_Group_excl"},"7780":{"probe_name":"mpi-rest","function_name":"MPI_Group_difference"},"7779":{"probe_name":"mpi-rest","function_name":"MPI_Group_compare"},"7778":{"probe_name":"mpi-rest","function_name":"MPI_Grequest_start"},"7777":{"probe_name":"mpi-rest","function_name":"MPI_Grequest_complete"},"7776":{"probe_name":"mpi-rest","function_name":"MPI_Graphdims_get"},"7775":{"probe_name":"mpi-rest","function_name":"MPI_Graph_neighbors_count"},"7774":{"probe_name":"mpi-rest","function_name":"MPI_Graph_neighbors"},"7773":{"probe_name":"mpi-rest","function_name":"MPI_Graph_map"},"7772":{"probe_name":"mpi-rest","function_name":"MPI_Graph_get"},"7771":{"probe_name":"mpi-rest","function_name":"MPI_Graph_create"},"7770":{"probe_name":"mpi-rest","function_name":"MPI_Get_version"},"7769":{"probe_name":"mpi-rest","function_name":"MPI_Get_processor_name"},"7768":{"probe_name":"mpi-rest","function_name":"MPI_Get_library_version"},"7767":{"probe_name":"mpi-rest","function_name":"MPI_Get_elements_x"},"7766":{"probe_name":"mpi-rest","function_name":"MPI_Get_elements_c"},"7765":{"probe_name":"mpi-rest","function_name":"MPI_Get_elements"},"7764":{"probe_name":"mpi-rest","function_name":"MPI_Get_count_c"},"7763":{"probe_name":"mpi-rest","function_name":"MPI_Get_count"},"7762":{"probe_name":"mpi-rest","function_name":"MPI_Get_c"},"7761":{"probe_name":"mpi-rest","function_name":"MPI_Get_address"},"7760":{"probe_name":"mpi-rest","function_name":"MPI_Get_accumulate_c"},"7759":{"probe_name":"mpi-rest","function_name":"MPI_Get_accumulate"},"7758":{"probe_name":"mpi-rest","function_name":"MPI_Get"},"7757":{"probe_name":"mpi-rest","function_name":"MPI_Gatherv_init_c"},"7756":{"probe_name":"mpi-rest","function_name":"MPI_Gatherv_init"},"7755":{"probe_name":"mpi-rest","function_name":"MPI_Gatherv_c"},"7754":{"probe_name":"mpi-rest","function_name":"MPI_Gatherv"},"7753":{"probe_name":"mpi-rest","function_name":"MPI_Gather_init_c"},"7752":{"probe_name":"mpi-rest","function_name":"MPI_Gather_init"},"7751":{"probe_name":"mpi-rest","function_name":"MPI_Gather_c"},"7750":{"probe_name":"mpi-rest","function_name":"MPI_Gather"},"7749":{"probe_name":"mpi-rest","function_name":"MPI_Free_mem"},"7748":{"probe_name":"mpi-rest","function_name":"MPI_Finalized"},"7747":{"probe_name":"mpi-rest","function_name":"MPI_Finalize"},"7746":{"probe_name":"mpi-rest","function_name":"MPI_File_write_shared_c"},"7745":{"probe_name":"mpi-rest","function_name":"MPI_File_write_shared"},"7744":{"probe_name":"mpi-rest","function_name":"MPI_File_write_ordered_end"},"7743":{"probe_name":"mpi-rest","function_name":"MPI_File_write_ordered_c"},"7742":{"probe_name":"mpi-rest","function_name":"MPI_File_write_ordered_begin_c"},"7741":{"probe_name":"mpi-rest","function_name":"MPI_File_write_ordered_begin"},"7740":{"probe_name":"mpi-rest","function_name":"MPI_File_write_ordered"},"7739":{"probe_name":"mpi-rest","function_name":"MPI_File_write_c"},"7738":{"probe_name":"mpi-rest","function_name":"MPI_File_write_at_c"},"7737":{"probe_name":"mpi-rest","function_name":"MPI_File_write_at_all_end"},"7736":{"probe_name":"mpi-rest","function_name":"MPI_File_write_at_all_c"},"7735":{"probe_name":"mpi-rest","function_name":"MPI_File_write_at_all_begin_c"},"7734":{"probe_name":"mpi-rest","function_name":"MPI_File_write_at_all_begin"},"7733":{"probe_name":"mpi-rest","function_name":"MPI_File_write_at_all"},"7732":{"probe_name":"mpi-rest","function_name":"MPI_File_write_at"},"7731":{"probe_name":"mpi-rest","function_name":"MPI_File_write_all_end"},"7730":{"probe_name":"mpi-rest","function_name":"MPI_File_write_all_c"},"7729":{"probe_name":"mpi-rest","function_name":"MPI_File_write_all_begin_c"},"7728":{"probe_name":"mpi-rest","function_name":"MPI_File_write_all_begin"},"7727":{"probe_name":"mpi-rest","function_name":"MPI_File_write_all"},"7726":{"probe_name":"mpi-rest","function_name":"MPI_File_write"},"7725":{"probe_name":"mpi-rest","function_name":"MPI_File_sync"},"7724":{"probe_name":"mpi-rest","function_name":"MPI_File_set_view"},"7723":{"probe_name":"mpi-rest","function_name":"MPI_File_set_size"},"7722":{"probe_name":"mpi-rest","function_name":"MPI_File_set_info"},"7721":{"probe_name":"mpi-rest","function_name":"MPI_File_set_errhandler"},"7720":{"probe_name":"mpi-rest","function_name":"MPI_File_set_atomicity"},"7719":{"probe_name":"mpi-rest","function_name":"MPI_File_seek_shared"},"7718":{"probe_name":"mpi-rest","function_name":"MPI_File_seek"},"7717":{"probe_name":"mpi-rest","function_name":"MPI_File_read_shared_c"},"7716":{"probe_name":"mpi-rest","function_name":"MPI_File_read_shared"},"7715":{"probe_name":"mpi-rest","function_name":"MPI_File_read_ordered_end"},"7714":{"probe_name":"mpi-rest","function_name":"MPI_File_read_ordered_c"},"7713":{"probe_name":"mpi-rest","function_name":"MPI_File_read_ordered_begin_c"},"7712":{"probe_name":"mpi-rest","function_name":"MPI_File_read_ordered_begin"},"7711":{"probe_name":"mpi-rest","function_name":"MPI_File_read_ordered"},"7710":{"probe_name":"mpi-rest","function_name":"MPI_File_read_c"},"7709":{"probe_name":"mpi-rest","function_name":"MPI_File_read_at_c"},"7708":{"probe_name":"mpi-rest","function_name":"MPI_File_read_at_all_end"},"7707":{"probe_name":"mpi-rest","function_name":"MPI_File_read_at_all_c"},"7706":{"probe_name":"mpi-rest","function_name":"MPI_File_read_at_all_begin_c"},"7705":{"probe_name":"mpi-rest","function_name":"MPI_File_read_at_all_begin"},"7704":{"probe_name":"mpi-rest","function_name":"MPI_File_read_at_all"},"7703":{"probe_name":"mpi-rest","function_name":"MPI_File_read_at"},"7702":{"probe_name":"mpi-rest","function_name":"MPI_File_read_all_end"},"7701":{"probe_name":"mpi-rest","function_name":"MPI_File_read_all_c"},"7700":{"probe_name":"mpi-rest","function_name":"MPI_File_read_all_begin_c"},"7699":{"probe_name":"mpi-rest","function_name":"MPI_File_read_all_begin"},"7698":{"probe_name":"mpi-rest","function_name":"MPI_File_read_all"},"7697":{"probe_name":"mpi-rest","function_name":"MPI_File_read"},"7696":{"probe_name":"mpi-rest","function_name":"MPI_File_preallocate"},"7695":{"probe_name":"mpi-rest","function_name":"MPI_File_open"},"7694":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_shared_c"},"7693":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_shared"},"7692":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_c"},"7691":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_at_c"},"7690":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_at_all_c"},"7689":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_at_all"},"7688":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_at"},"7687":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_all_c"},"7686":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite_all"},"7685":{"probe_name":"mpi-rest","function_name":"MPI_File_iwrite"},"7684":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_shared_c"},"7683":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_shared"},"7682":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_c"},"7681":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_at_c"},"7680":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_at_all_c"},"7679":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_at_all"},"7678":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_at"},"7677":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_all_c"},"7676":{"probe_name":"mpi-rest","function_name":"MPI_File_iread_all"},"7675":{"probe_name":"mpi-rest","function_name":"MPI_File_iread"},"7674":{"probe_name":"mpi-rest","function_name":"MPI_File_get_view"},"7673":{"probe_name":"mpi-rest","function_name":"MPI_File_get_type_extent_c"},"7672":{"probe_name":"mpi-rest","function_name":"MPI_File_get_type_extent"},"7671":{"probe_name":"mpi-rest","function_name":"MPI_File_get_size"},"7670":{"probe_name":"mpi-rest","function_name":"MPI_File_get_position_shared"},"7669":{"probe_name":"mpi-rest","function_name":"MPI_File_get_position"},"7668":{"probe_name":"mpi-rest","function_name":"MPI_File_get_info"},"7667":{"probe_name":"mpi-rest","function_name":"MPI_File_get_group"},"7666":{"probe_name":"mpi-rest","function_name":"MPI_File_get_errhandler"},"7665":{"probe_name":"mpi-rest","function_name":"MPI_File_get_byte_offset"},"7664":{"probe_name":"mpi-rest","function_name":"MPI_File_get_atomicity"},"7663":{"probe_name":"mpi-rest","function_name":"MPI_File_get_amode"},"7662":{"probe_name":"mpi-rest","function_name":"MPI_File_f2c"},"7661":{"probe_name":"mpi-rest","function_name":"MPI_File_delete"},"7660":{"probe_name":"mpi-rest","function_name":"MPI_File_create_errhandler"},"7659":{"probe_name":"mpi-rest","function_name":"MPI_File_close"},"7658":{"probe_name":"mpi-rest","function_name":"MPI_File_call_errhandler"},"7657":{"probe_name":"mpi-rest","function_name":"MPI_File_c2f"},"7656":{"probe_name":"mpi-rest","function_name":"MPI_Fetch_and_op"},"7655":{"probe_name":"mpi-rest","function_name":"MPI_Exscan_init_c"},"7654":{"probe_name":"mpi-rest","function_name":"MPI_Exscan_init"},"7653":{"probe_name":"mpi-rest","function_name":"MPI_Exscan_c"},"7652":{"probe_name":"mpi-rest","function_name":"MPI_Exscan"},"7651":{"probe_name":"mpi-rest","function_name":"MPI_Error_string"},"7650":{"probe_name":"mpi-rest","function_name":"MPI_Error_class"},"7649":{"probe_name":"mpi-rest","function_name":"MPI_Errhandler_set"},"7648":{"probe_name":"mpi-rest","function_name":"MPI_Errhandler_get"},"7647":{"probe_name":"mpi-rest","function_name":"MPI_Errhandler_free"},"7646":{"probe_name":"mpi-rest","function_name":"MPI_Errhandler_create"},"7645":{"probe_name":"mpi-rest","function_name":"MPI_Dist_graph_neighbors_count"},"7644":{"probe_name":"mpi-rest","function_name":"MPI_Dist_graph_neighbors"},"7643":{"probe_name":"mpi-rest","function_name":"MPI_Dist_graph_create_adjacent"},"7642":{"probe_name":"mpi-rest","function_name":"MPI_Dist_graph_create"},"7641":{"probe_name":"mpi-rest","function_name":"MPI_Dims_create"},"7640":{"probe_name":"mpi-rest","function_name":"MPI_Compare_and_swap"},"7639":{"probe_name":"mpi-rest","function_name":"MPI_Comm_test_inter"},"7638":{"probe_name":"mpi-rest","function_name":"MPI_Comm_split_type"},"7637":{"probe_name":"mpi-rest","function_name":"MPI_Comm_split"},"7636":{"probe_name":"mpi-rest","function_name":"MPI_Comm_spawn_multiple"},"7635":{"probe_name":"mpi-rest","function_name":"MPI_Comm_spawn"},"7634":{"probe_name":"mpi-rest","function_name":"MPI_Comm_size"},"7633":{"probe_name":"mpi-rest","function_name":"MPI_Comm_set_name"},"7632":{"probe_name":"mpi-rest","function_name":"MPI_Comm_set_info"},"7631":{"probe_name":"mpi-rest","function_name":"MPI_Comm_set_errhandler"},"7630":{"probe_name":"mpi-rest","function_name":"MPI_Comm_set_attr"},"7629":{"probe_name":"mpi-rest","function_name":"MPI_Comm_remote_size"},"7628":{"probe_name":"mpi-rest","function_name":"MPI_Comm_remote_group"},"7627":{"probe_name":"mpi-rest","function_name":"MPI_Comm_rank"},"7626":{"probe_name":"mpi-rest","function_name":"MPI_Comm_join"},"7625":{"probe_name":"mpi-rest","function_name":"MPI_Comm_idup_with_info"},"7624":{"probe_name":"mpi-rest","function_name":"MPI_Comm_idup"},"7623":{"probe_name":"mpi-rest","function_name":"MPI_Comm_group"},"7622":{"probe_name":"mpi-rest","function_name":"MPI_Comm_get_parent"},"7621":{"probe_name":"mpi-rest","function_name":"MPI_Comm_get_name"},"7620":{"probe_name":"mpi-rest","function_name":"MPI_Comm_get_info"},"7619":{"probe_name":"mpi-rest","function_name":"MPI_Comm_get_errhandler"},"7618":{"probe_name":"mpi-rest","function_name":"MPI_Comm_get_attr"},"7617":{"probe_name":"mpi-rest","function_name":"MPI_Comm_free_keyval"},"7616":{"probe_name":"mpi-rest","function_name":"MPI_Comm_free"},"7615":{"probe_name":"mpi-rest","function_name":"MPI_Comm_dup_with_info"},"7614":{"probe_name":"mpi-rest","function_name":"MPI_Comm_dup"},"7613":{"probe_name":"mpi-rest","function_name":"MPI_Comm_disconnect"},"7612":{"probe_name":"mpi-rest","function_name":"MPI_Comm_delete_attr"},"7611":{"probe_name":"mpi-rest","function_name":"MPI_Comm_create_keyval"},"7610":{"probe_name":"mpi-rest","function_name":"MPI_Comm_create_group"},"7609":{"probe_name":"mpi-rest","function_name":"MPI_Comm_create_from_group"},"7608":{"probe_name":"mpi-rest","function_name":"MPI_Comm_create_errhandler"},"7607":{"probe_name":"mpi-rest","function_name":"MPI_Comm_create"},"7606":{"probe_name":"mpi-rest","function_name":"MPI_Comm_connect"},"7605":{"probe_name":"mpi-rest","function_name":"MPI_Comm_compare"},"7604":{"probe_name":"mpi-rest","function_name":"MPI_Comm_call_errhandler"},"7603":{"probe_name":"mpi-rest","function_name":"MPI_Comm_accept"},"7602":{"probe_name":"mpi-rest","function_name":"MPI_Close_port"},"7601":{"probe_name":"mpi-rest","function_name":"MPI_Cartdim_get"},"7600":{"probe_name":"mpi-rest","function_name":"MPI_Cart_sub"},"7599":{"probe_name":"mpi-rest","function_name":"MPI_Cart_shift"},"7598":{"probe_name":"mpi-rest","function_name":"MPI_Cart_rank"},"7597":{"probe_name":"mpi-rest","function_name":"MPI_Cart_map"},"7596":{"probe_name":"mpi-rest","function_name":"MPI_Cart_get"},"7595":{"probe_name":"mpi-rest","function_name":"MPI_Cart_create"},"7594":{"probe_name":"mpi-rest","function_name":"MPI_Cart_coords"},"7593":{"probe_name":"mpi-rest","function_name":"MPI_Cancel"},"7592":{"probe_name":"mpi-rest","function_name":"MPI_CRAY_get_version"},"7591":{"probe_name":"mpi-rest","function_name":"MPI_Buffer_detach_c"},"7590":{"probe_name":"mpi-rest","function_name":"MPI_Buffer_detach"},"7589":{"probe_name":"mpi-rest","function_name":"MPI_Buffer_attach_c"},"7588":{"probe_name":"mpi-rest","function_name":"MPI_Buffer_attach"},"7587":{"probe_name":"mpi-rest","function_name":"MPI_Bsend_init_c"},"7586":{"probe_name":"mpi-rest","function_name":"MPI_Bsend_init"},"7585":{"probe_name":"mpi-rest","function_name":"MPI_Bsend_c"},"7584":{"probe_name":"mpi-rest","function_name":"MPI_Bsend"},"7583":{"probe_name":"mpi-rest","function_name":"MPI_Bcast_init_c"},"7582":{"probe_name":"mpi-rest","function_name":"MPI_Bcast_init"},"7581":{"probe_name":"mpi-rest","function_name":"MPI_Bcast_c"},"7580":{"probe_name":"mpi-rest","function_name":"MPI_Bcast"},"7579":{"probe_name":"mpi-rest","function_name":"MPI_Barrier_init"},"7578":{"probe_name":"mpi-rest","function_name":"MPI_Barrier"},"7577":{"probe_name":"mpi-rest","function_name":"MPI_Attr_put"},"7576":{"probe_name":"mpi-rest","function_name":"MPI_Attr_get"},"7575":{"probe_name":"mpi-rest","function_name":"MPI_Attr_delete"},"7574":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallw_init_c"},"7573":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallw_init"},"7572":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallw_c"},"7571":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallw"},"7570":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallv_init_c"},"7569":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallv_init"},"7568":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallv_c"},"7567":{"probe_name":"mpi-rest","function_name":"MPI_Alltoallv"},"7566":{"probe_name":"mpi-rest","function_name":"MPI_Alltoall_init_c"},"7565":{"probe_name":"mpi-rest","function_name":"MPI_Alltoall_init"},"7564":{"probe_name":"mpi-rest","function_name":"MPI_Alltoall_c"},"7563":{"probe_name":"mpi-rest","function_name":"MPI_Alltoall"},"7562":{"probe_name":"mpi-rest","function_name":"MPI_Allreduce_init_c"},"7561":{"probe_name":"mpi-rest","function_name":"MPI_Allreduce_init"},"7560":{"probe_name":"mpi-rest","function_name":"MPI_Allreduce_c"},"7559":{"probe_name":"mpi-rest","function_name":"MPI_Allreduce"},"7558":{"probe_name":"mpi-rest","function_name":"MPI_Alloc_mem"},"7557":{"probe_name":"mpi-rest","function_name":"MPI_Allgatherv_init_c"},"7556":{"probe_name":"mpi-rest","function_name":"MPI_Allgatherv_init"},"7555":{"probe_name":"mpi-rest","function_name":"MPI_Allgatherv_c"},"7554":{"probe_name":"mpi-rest","function_name":"MPI_Allgatherv"},"7553":{"probe_name":"mpi-rest","function_name":"MPI_Allgather_init_c"},"7552":{"probe_name":"mpi-rest","function_name":"MPI_Allgather_init"},"7551":{"probe_name":"mpi-rest","function_name":"MPI_Allgather_c"},"7550":{"probe_name":"mpi-rest","function_name":"MPI_Allgather"},"7549":{"probe_name":"mpi-rest","function_name":"MPI_Aint_diff"},"7548":{"probe_name":"mpi-rest","function_name":"MPI_Aint_add"},"7547":{"probe_name":"mpi-rest","function_name":"MPI_Address"},"7546":{"probe_name":"mpi-rest","function_name":"MPI_Add_error_string"},"7545":{"probe_name":"mpi-rest","function_name":"MPI_Add_error_code"},"7544":{"probe_name":"mpi-rest","function_name":"MPI_Add_error_class"},"7543":{"probe_name":"mpi-rest","function_name":"MPI_Accumulate_c"},"7542":{"probe_name":"mpi-rest","function_name":"MPI_Accumulate"},"7541":{"probe_name":"mpi-rest","function_name":"MPI_Abort"},"7540":{"probe_name":"mpi-rest","function_name":"MPIX_Win_wait_stream"},"7539":{"probe_name":"mpi-rest","function_name":"MPIX_Win_progress_stream"},"7538":{"probe_name":"mpi-rest","function_name":"MPIX_Win_post_stream"},"7537":{"probe_name":"mpi-rest","function_name":"MPIX_Win_complete_stream"},"7536":{"probe_name":"mpi-rest","function_name":"MPIX_Type_iov_len"},"7535":{"probe_name":"mpi-rest","function_name":"MPIX_Type_iov"},"7534":{"probe_name":"mpi-rest","function_name":"MPIX_Query_ze_support"},"7533":{"probe_name":"mpi-rest","function_name":"MPIX_Query_hip_support"},"7532":{"probe_name":"mpi-rest","function_name":"MPIX_Query_cuda_support"},"7531":{"probe_name":"mpi-rest","function_name":"MPIX_KT_Get_dreq"},"7530":{"probe_name":"mpi-rest","function_name":"MPIX_Info_set_hex"},"7529":{"probe_name":"mpi-rest","function_name":"MPIX_Grequest_start"},"7528":{"probe_name":"mpi-rest","function_name":"MPIX_Grequest_class_create"},"7527":{"probe_name":"mpi-rest","function_name":"MPIX_Grequest_class_allocate"},"7526":{"probe_name":"mpi-rest","function_name":"MPIX_GPU_query_support"},"7525":{"probe_name":"mpi-rest","function_name":"MPIX_Free_queue"},"7524":{"probe_name":"mpi-rest","function_name":"MPIX_Enqueue_wait"},"7523":{"probe_name":"mpi-rest","function_name":"MPIX_Enqueue_start"},"7522":{"probe_name":"mpi-rest","function_name":"MPIX_Enqueue_send"},"7521":{"probe_name":"mpi-rest","function_name":"MPIX_Enqueue_recv"},"7520":{"probe_name":"mpi-rest","function_name":"MPIX_Delete_error_string"},"7519":{"probe_name":"mpi-rest","function_name":"MPIX_Delete_error_code"},"7518":{"probe_name":"mpi-rest","function_name":"MPIX_Delete_error_class"},"7517":{"probe_name":"mpi-rest","function_name":"MPIX_Create_queue"},"7516":{"probe_name":"mpi-rest","function_name":"MPIX_Comm_shrink"},"7515":{"probe_name":"mpi-rest","function_name":"MPIX_Comm_revoke"},"7514":{"probe_name":"mpi-rest","function_name":"MPIX_Comm_get_failed"},"7513":{"probe_name":"mpi-rest","function_name":"MPIX_Comm_failure_get_acked"},"7512":{"probe_name":"mpi-rest","function_name":"MPIX_Comm_failure_ack"},"7511":{"probe_name":"mpi-rest","function_name":"MPIX_Comm_agree"},"7510":{"probe_name":"mpi-rest","function_name":"MPIU_write_external32_conversion_fn"},"7509":{"probe_name":"mpi-rest","function_name":"MPIU_read_external32_conversion_fn"},"7508":{"probe_name":"mpi-rest","function_name":"MPIU_get_randomized_sendto_rank"},"7507":{"probe_name":"mpi-rest","function_name":"MPIU_external32_buffer_setup"},"7506":{"probe_name":"mpi-rest","function_name":"MPIU_datatype_full_size"},"7505":{"probe_name":"mpi-rest","function_name":"MPIU_cray_ReduceSummary"},"7504":{"probe_name":"mpi-rest","function_name":"MPIU_Thread_safety_str"},"7503":{"probe_name":"mpi-rest","function_name":"MPIU_Sort_inttable"},"7502":{"probe_name":"mpi-rest","function_name":"MPIU_MPIDI_CRAY_mem_dbg.isra.0"},"7501":{"probe_name":"mpi-rest","function_name":"MPIU_Greq_query_fn"},"7500":{"probe_name":"mpi-rest","function_name":"MPIU_Greq_free_fn"},"7499":{"probe_name":"mpi-rest","function_name":"MPIU_Greq_cancel_fn"},"7498":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_printf_init"},"7497":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_printf"},"7496":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_gettid"},"7495":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env_process_unsigned_long"},"7494":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env_process_long"},"7493":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env_process_int"},"7492":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env_process_bool"},"7491":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env2unsignedlong"},"7490":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env2long"},"7489":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env2int"},"7488":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env2crayboolean"},"7487":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_env"},"7486":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_cvar_process_unsigned_long"},"7485":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_cvar_process_long"},"7484":{"probe_name":"mpi-rest","function_name":"MPIU_Cray_cvar_process_int"},"7483":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_random_gen"},"7482":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_process_num_range.part.0"},"7481":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_process_num_range"},"7480":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_get_number"},"7479":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_get_num_numa_nodes"},"7478":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_get_my_rank_numa_node"},"7477":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_get_cpulist_for_numa_node"},"7476":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_get_cname"},"7475":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_free_world_group"},"7474":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_free_send_recv_list"},"7473":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_exchange_lrank_numas"},"7472":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_err_printf_wcname"},"7471":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_create_world_group"},"7470":{"probe_name":"mpi-rest","function_name":"MPIU_CRAY_Check_env_vars"},"7469":{"probe_name":"mpi-rest","function_name":"MPIR_stream_comm_init"},"7468":{"probe_name":"mpi-rest","function_name":"MPIR_stream_comm_free"},"7467":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_unpublish"},"7466":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_spawn_multiple"},"7465":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_set_threaded"},"7464":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_publish"},"7463":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_max_val_size"},"7462":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_max_key_size"},"7461":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_lookup"},"7460":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_kvs_put"},"7459":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_kvs_get"},"7458":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_job_id"},"7457":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_init"},"7456":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_has_local_cliques"},"7455":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_get_universe_size"},"7454":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_get_hwloc_xmlfile"},"7453":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_get_failed_procs"},"7452":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_finalize"},"7451":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_bcast"},"7450":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_barrier_local"},"7449":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_barrier"},"7448":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_allgather_shm"},"7447":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_allgather"},"7446":{"probe_name":"mpi-rest","function_name":"MPIR_pmi_abort"},"7445":{"probe_name":"mpi-rest","function_name":"MPIR_peer_intercomm_create"},"7444":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_tree_get_switches_at_level"},"7443":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_tree_get_node_levels"},"7442":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_tree_get_hostnode_index"},"7441":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_torus_get_node_index"},"7440":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_torus_get_geometry"},"7439":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_torus_get_dimension"},"7438":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_get_type"},"7437":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_get_num_nodes"},"7436":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_get_node_uid"},"7435":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_get_node_type"},"7434":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_get_endpoint"},"7433":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_get_edge_dest_node"},"7432":{"probe_name":"mpi-rest","function_name":"MPIR_nettopo_get_all_edges"},"7431":{"probe_name":"mpi-rest","function_name":"MPIR_init_comm_world"},"7430":{"probe_name":"mpi-rest","function_name":"MPIR_init_comm_self"},"7429":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_mem_bind"},"7428":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_is_initialized"},"7427":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_is_dev_close_by_pci"},"7426":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_is_dev_close_by_name"},"7425":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_type_id"},"7424":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_obj_by_type"},"7423":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_obj_by_name"},"7422":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_node_mem"},"7421":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_lid"},"7420":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_leaf"},"7419":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_dev_parent_by_pci"},"7418":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_depth"},"7417":{"probe_name":"mpi-rest","function_name":"MPIR_hwtopo_get_ancestor"},"7416":{"probe_name":"mpi-rest","function_name":"MPIR_gpu_reduce_get_op_and_type"},"7415":{"probe_name":"mpi-rest","function_name":"MPIR_gpu_post_init"},"7414":{"probe_name":"mpi-rest","function_name":"MPIR_gpu_memcpy_to_host"},"7413":{"probe_name":"mpi-rest","function_name":"MPIR_gpu_memcpy_to_device"},"7412":{"probe_name":"mpi-rest","function_name":"MPIR_gpu_memcpy_device_to_device"},"7411":{"probe_name":"mpi-rest","function_name":"MPIR_gpu_memcpy"},"7410":{"probe_name":"mpi-rest","function_name":"MPIR_gpu_can_use_reduce_kernel"},"7409":{"probe_name":"mpi-rest","function_name":"MPIR_get_local_gpu_stream"},"7408":{"probe_name":"mpi-rest","function_name":"MPIR_free_keyval.part.0"},"7407":{"probe_name":"mpi-rest","function_name":"MPIR_free_keyval"},"7406":{"probe_name":"mpi-rest","function_name":"MPIR_finalize_builtin_comms"},"7405":{"probe_name":"mpi-rest","function_name":"MPIR_allocate_enqueue_request.cold"},"7404":{"probe_name":"mpi-rest","function_name":"MPIR_allocate_enqueue_request"},"7403":{"probe_name":"mpi-rest","function_name":"MPIR_Win_shared_query_impl"},"7402":{"probe_name":"mpi-rest","function_name":"MPIR_Win_set_name_impl"},"7401":{"probe_name":"mpi-rest","function_name":"MPIR_Win_set_errhandler_impl"},"7400":{"probe_name":"mpi-rest","function_name":"MPIR_Win_set_attr_impl"},"7399":{"probe_name":"mpi-rest","function_name":"MPIR_Win_get_name_impl"},"7398":{"probe_name":"mpi-rest","function_name":"MPIR_Win_get_errhandler_impl"},"7397":{"probe_name":"mpi-rest","function_name":"MPIR_Win_get_attr_impl"},"7396":{"probe_name":"mpi-rest","function_name":"MPIR_Win_free_keyval_impl"},"7395":{"probe_name":"mpi-rest","function_name":"MPIR_Win_delete_attr_impl"},"7394":{"probe_name":"mpi-rest","function_name":"MPIR_Win_create_keyval_impl"},"7393":{"probe_name":"mpi-rest","function_name":"MPIR_Win_create_errhandler_impl"},"7392":{"probe_name":"mpi-rest","function_name":"MPIR_Win_call_errhandler_impl"},"7391":{"probe_name":"mpi-rest","function_name":"MPIR_Waitsome_state"},"7390":{"probe_name":"mpi-rest","function_name":"MPIR_Waitsome_impl"},"7389":{"probe_name":"mpi-rest","function_name":"MPIR_Waitsome"},"7388":{"probe_name":"mpi-rest","function_name":"MPIR_Waitany_state"},"7387":{"probe_name":"mpi-rest","function_name":"MPIR_Waitany_impl"},"7386":{"probe_name":"mpi-rest","function_name":"MPIR_Waitany"},"7385":{"probe_name":"mpi-rest","function_name":"MPIR_Waitall_state"},"7384":{"probe_name":"mpi-rest","function_name":"MPIR_Waitall_impl"},"7383":{"probe_name":"mpi-rest","function_name":"MPIR_Waitall_enqueue_impl.cold"},"7382":{"probe_name":"mpi-rest","function_name":"MPIR_Waitall_enqueue_impl"},"7381":{"probe_name":"mpi-rest","function_name":"MPIR_Waitall"},"7380":{"probe_name":"mpi-rest","function_name":"MPIR_Wait_state"},"7379":{"probe_name":"mpi-rest","function_name":"MPIR_Wait_impl"},"7378":{"probe_name":"mpi-rest","function_name":"MPIR_Wait_enqueue_impl"},"7377":{"probe_name":"mpi-rest","function_name":"MPIR_Wait"},"7376":{"probe_name":"mpi-rest","function_name":"MPIR_Unpublish_name_impl"},"7375":{"probe_name":"mpi-rest","function_name":"MPIR_Unpack_impl"},"7374":{"probe_name":"mpi-rest","function_name":"MPIR_Unpack_external_impl"},"7373":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_wait"},"7372":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_unpack_stream"},"7371":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_unpack_external"},"7370":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_unpack"},"7369":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_unflatten"},"7368":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_to_iov_offset.cold"},"7367":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_to_iov_offset"},"7366":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_to_iov"},"7365":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_size_external32"},"7364":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_reduce_is_supported"},"7363":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_reduce"},"7362":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_pack_stream"},"7361":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_pack_external"},"7360":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_pack"},"7359":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_op"},"7358":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_iunpack.part.0.cold"},"7357":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_iunpack.part.0"},"7356":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_iunpack"},"7355":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_ipack.part.0.cold"},"7354":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_ipack.part.0"},"7353":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_ipack"},"7352":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_iov_len.cold"},"7351":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_iov_len"},"7350":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_init"},"7349":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_icopy"},"7348":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_free"},"7347":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_flatten_size"},"7346":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_flatten"},"7345":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_finalize"},"7344":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_debug"},"7343":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_vector"},"7342":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_struct.cold"},"7341":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_struct"},"7340":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_resized.cold"},"7339":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_resized"},"7338":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_pairtype"},"7337":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_indexed_block"},"7336":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_indexed"},"7335":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_hvector"},"7334":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_hindexed_block"},"7333":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_hindexed"},"7332":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_dup.cold"},"7331":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_dup"},"7330":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_contig.cold"},"7329":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_create_contig"},"7328":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_copy"},"7327":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_commit.cold"},"7326":{"probe_name":"mpi-rest","function_name":"MPIR_Typerep_commit"},"7325":{"probe_name":"mpi-rest","function_name":"MPIR_Type_vector_large_impl"},"7324":{"probe_name":"mpi-rest","function_name":"MPIR_Type_vector_impl"},"7323":{"probe_name":"mpi-rest","function_name":"MPIR_Type_vector"},"7322":{"probe_name":"mpi-rest","function_name":"MPIR_Type_struct.cold"},"7321":{"probe_name":"mpi-rest","function_name":"MPIR_Type_struct"},"7320":{"probe_name":"mpi-rest","function_name":"MPIR_Type_size_x_impl.cold"},"7319":{"probe_name":"mpi-rest","function_name":"MPIR_Type_size_x_impl"},"7318":{"probe_name":"mpi-rest","function_name":"MPIR_Type_size_impl.cold"},"7317":{"probe_name":"mpi-rest","function_name":"MPIR_Type_size_impl"},"7316":{"probe_name":"mpi-rest","function_name":"MPIR_Type_set_name_impl"},"7315":{"probe_name":"mpi-rest","function_name":"MPIR_Type_set_attr_impl"},"7314":{"probe_name":"mpi-rest","function_name":"MPIR_Type_match_size_impl.cold"},"7313":{"probe_name":"mpi-rest","function_name":"MPIR_Type_match_size_impl"},"7312":{"probe_name":"mpi-rest","function_name":"MPIR_Type_is_rma_atomic"},"7311":{"probe_name":"mpi-rest","function_name":"MPIR_Type_indexed_large_impl"},"7310":{"probe_name":"mpi-rest","function_name":"MPIR_Type_indexed_impl"},"7309":{"probe_name":"mpi-rest","function_name":"MPIR_Type_indexed.part.0"},"7308":{"probe_name":"mpi-rest","function_name":"MPIR_Type_indexed"},"7307":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_true_extent_x_impl.cold"},"7306":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_true_extent_x_impl"},"7305":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_true_extent_impl"},"7304":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_name_impl"},"7303":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_extent_x_impl.cold"},"7302":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_extent_x_impl"},"7301":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_extent_impl"},"7300":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_envelope_large_impl"},"7299":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_envelope_impl"},"7298":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_envelope.cold"},"7297":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_envelope"},"7296":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_elements.cold"},"7295":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_elements"},"7294":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_contents_large_impl.cold"},"7293":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_contents_large_impl"},"7292":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_contents_impl.cold"},"7291":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_contents_impl"},"7290":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_basic_type_elements.part.0"},"7289":{"probe_name":"mpi-rest","function_name":"MPIR_Type_get_attr_impl"},"7288":{"probe_name":"mpi-rest","function_name":"MPIR_Type_free_keyval_impl"},"7287":{"probe_name":"mpi-rest","function_name":"MPIR_Type_free_impl.cold"},"7286":{"probe_name":"mpi-rest","function_name":"MPIR_Type_free_impl"},"7285":{"probe_name":"mpi-rest","function_name":"MPIR_Type_dup_impl.cold"},"7284":{"probe_name":"mpi-rest","function_name":"MPIR_Type_dup_impl"},"7283":{"probe_name":"mpi-rest","function_name":"MPIR_Type_dup"},"7282":{"probe_name":"mpi-rest","function_name":"MPIR_Type_delete_attr_impl"},"7281":{"probe_name":"mpi-rest","function_name":"MPIR_Type_cyclic.cold"},"7280":{"probe_name":"mpi-rest","function_name":"MPIR_Type_cyclic"},"7279":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_subarray_large_impl"},"7278":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_subarray_impl"},"7277":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_subarray.cold"},"7276":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_subarray"},"7275":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_struct_large_impl"},"7274":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_struct_impl"},"7273":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_resized_large_impl"},"7272":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_resized_impl"},"7271":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_resized"},"7270":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_pairtype"},"7269":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_keyval_impl"},"7268":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_indexed_block_large_impl"},"7267":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_indexed_block_impl"},"7266":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_hvector_large_impl"},"7265":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_hvector_impl"},"7264":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_hindexed_large_impl"},"7263":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_hindexed_impl"},"7262":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_hindexed_block_large_impl"},"7261":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_hindexed_block_impl"},"7260":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_darray_large_impl"},"7259":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_darray_impl"},"7258":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_darray.cold"},"7257":{"probe_name":"mpi-rest","function_name":"MPIR_Type_create_darray"},"7256":{"probe_name":"mpi-rest","function_name":"MPIR_Type_contiguous_x_impl"},"7255":{"probe_name":"mpi-rest","function_name":"MPIR_Type_contiguous_large_impl"},"7254":{"probe_name":"mpi-rest","function_name":"MPIR_Type_contiguous_impl"},"7253":{"probe_name":"mpi-rest","function_name":"MPIR_Type_contiguous"},"7252":{"probe_name":"mpi-rest","function_name":"MPIR_Type_commit_impl.cold"},"7251":{"probe_name":"mpi-rest","function_name":"MPIR_Type_commit_impl"},"7250":{"probe_name":"mpi-rest","function_name":"MPIR_Type_blockindexed"},"7249":{"probe_name":"mpi-rest","function_name":"MPIR_Type_block.cold"},"7248":{"probe_name":"mpi-rest","function_name":"MPIR_Type_block"},"7247":{"probe_name":"mpi-rest","function_name":"MPIR_Treealgo_tree_free"},"7246":{"probe_name":"mpi-rest","function_name":"MPIR_Treealgo_tree_create"},"7245":{"probe_name":"mpi-rest","function_name":"MPIR_Topology_put"},"7244":{"probe_name":"mpi-rest","function_name":"MPIR_Topology_get"},"7243":{"probe_name":"mpi-rest","function_name":"MPIR_Topology_finalize"},"7242":{"probe_name":"mpi-rest","function_name":"MPIR_Topology_delete_fn"},"7241":{"probe_name":"mpi-rest","function_name":"MPIR_Topology_copy_fn"},"7240":{"probe_name":"mpi-rest","function_name":"MPIR_Topo_test_impl"},"7239":{"probe_name":"mpi-rest","function_name":"MPIR_Topo_canon_nhb_count"},"7238":{"probe_name":"mpi-rest","function_name":"MPIR_Topo_canon_nhb"},"7237":{"probe_name":"mpi-rest","function_name":"MPIR_Testsome_state"},"7236":{"probe_name":"mpi-rest","function_name":"MPIR_Testsome_impl"},"7235":{"probe_name":"mpi-rest","function_name":"MPIR_Testsome"},"7234":{"probe_name":"mpi-rest","function_name":"MPIR_Testany_state"},"7233":{"probe_name":"mpi-rest","function_name":"MPIR_Testany_impl"},"7232":{"probe_name":"mpi-rest","function_name":"MPIR_Testany"},"7231":{"probe_name":"mpi-rest","function_name":"MPIR_Testall_state"},"7230":{"probe_name":"mpi-rest","function_name":"MPIR_Testall_impl"},"7229":{"probe_name":"mpi-rest","function_name":"MPIR_Testall"},"7228":{"probe_name":"mpi-rest","function_name":"MPIR_Test_state"},"7227":{"probe_name":"mpi-rest","function_name":"MPIR_Test_impl"},"7226":{"probe_name":"mpi-rest","function_name":"MPIR_Test_cancelled_impl"},"7225":{"probe_name":"mpi-rest","function_name":"MPIR_Test"},"7224":{"probe_name":"mpi-rest","function_name":"MPIR_T_strncpy"},"7223":{"probe_name":"mpi-rest","function_name":"MPIR_T_source_get_timestamp_impl"},"7222":{"probe_name":"mpi-rest","function_name":"MPIR_T_source_get_num_impl"},"7221":{"probe_name":"mpi-rest","function_name":"MPIR_T_source_get_info_impl"},"7220":{"probe_name":"mpi-rest","function_name":"MPIR_T_register_source"},"7219":{"probe_name":"mpi-rest","function_name":"MPIR_T_register_event"},"7218":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_write_impl"},"7217":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_stop_impl"},"7216":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_start_impl"},"7215":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_session_free_impl"},"7214":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_session_create_impl"},"7213":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_reset_impl"},"7212":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_readreset_impl"},"7211":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_read_impl"},"7210":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_handle_free_impl"},"7209":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_handle_alloc_impl.cold"},"7208":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_handle_alloc_impl"},"7207":{"probe_name":"mpi-rest","function_name":"MPIR_T_pvar_env_init"},"7206":{"probe_name":"mpi-rest","function_name":"MPIR_T_events_finalize"},"7205":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_set_dropped_handler_impl"},"7204":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_register_callback_impl"},"7203":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_read_impl"},"7202":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_instance"},"7201":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_handle_set_info_impl"},"7200":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_handle_get_info_impl"},"7199":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_handle_free_impl"},"7198":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_handle_alloc_impl"},"7197":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_get_timestamp_impl"},"7196":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_get_source_impl"},"7195":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_get_num_impl"},"7194":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_get_info_impl"},"7193":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_get_index_impl"},"7192":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_copy_impl"},"7191":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_callback_set_info_impl"},"7190":{"probe_name":"mpi-rest","function_name":"MPIR_T_event_callback_get_info_impl"},"7189":{"probe_name":"mpi-rest","function_name":"MPIR_T_env_init"},"7188":{"probe_name":"mpi-rest","function_name":"MPIR_T_env_finalize"},"7187":{"probe_name":"mpi-rest","function_name":"MPIR_T_enum_create"},"7186":{"probe_name":"mpi-rest","function_name":"MPIR_T_enum_add_item"},"7185":{"probe_name":"mpi-rest","function_name":"MPIR_T_cvar_write_impl"},"7184":{"probe_name":"mpi-rest","function_name":"MPIR_T_cvar_read_impl"},"7183":{"probe_name":"mpi-rest","function_name":"MPIR_T_cvar_init"},"7182":{"probe_name":"mpi-rest","function_name":"MPIR_T_cvar_handle_alloc_impl"},"7181":{"probe_name":"mpi-rest","function_name":"MPIR_T_cvar_finalize"},"7180":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_pvars_impl.cold"},"7179":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_pvars_impl"},"7178":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_num_events_impl"},"7177":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_events_impl.cold"},"7176":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_events_impl"},"7175":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_cvars_impl.cold"},"7174":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_cvars_impl"},"7173":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_categories_impl.cold"},"7172":{"probe_name":"mpi-rest","function_name":"MPIR_T_category_get_categories_impl"},"7171":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_create"},"7170":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_subcat.cold"},"7169":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_subcat"},"7168":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_pvar.cold"},"7167":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_pvar"},"7166":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_event.cold"},"7165":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_event"},"7164":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_desc.cold"},"7163":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_desc"},"7162":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_cvar.cold"},"7161":{"probe_name":"mpi-rest","function_name":"MPIR_T_cat_add_cvar"},"7160":{"probe_name":"mpi-rest","function_name":"MPIR_T_PVAR_REGISTER_impl.cold"},"7159":{"probe_name":"mpi-rest","function_name":"MPIR_T_PVAR_REGISTER_impl"},"7158":{"probe_name":"mpi-rest","function_name":"MPIR_T_CVAR_REGISTER_impl.cold"},"7157":{"probe_name":"mpi-rest","function_name":"MPIR_T_CVAR_REGISTER_impl"},"7156":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_sub_sched"},"7155":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_start"},"7154":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_sink"},"7153":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_selective_sink"},"7152":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_reset"},"7151":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_reduce_local.cold"},"7150":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_reduce_local"},"7149":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_new_type.cold"},"7148":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_new_type"},"7147":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_malloc"},"7146":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_localcopy.cold"},"7145":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_localcopy"},"7144":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_issend.cold"},"7143":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_issend"},"7142":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_isend.cold"},"7141":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_isend"},"7140":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_irecv_status.cold"},"7139":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_irecv_status"},"7138":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_irecv.cold"},"7137":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_irecv"},"7136":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_imcast.cold"},"7135":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_imcast"},"7134":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_generic"},"7133":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_free.cold"},"7132":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_free"},"7131":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_fence"},"7130":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_create"},"7129":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_sched_cb"},"7128":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iscatterv_sched_allcomm_linear.cold"},"7127":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iscatterv_sched_allcomm_linear"},"7126":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iscatter_sched_intra_tree.cold"},"7125":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iscatter_sched_intra_tree"},"7124":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iscan_sched_intra_recursive_doubling.cold"},"7123":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iscan_sched_intra_recursive_doubling"},"7122":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_sched_intra_tsp_auto"},"7121":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_sched_intra_tree.cold"},"7120":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_sched_intra_tree"},"7119":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_scatter_sched_intra_recexch_step2"},"7118":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_scatter_sched_intra_recexch.cold"},"7117":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_scatter_sched_intra_recexch"},"7116":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_scatter_block_sched_intra_recexch.cold"},"7115":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ireduce_scatter_block_sched_intra_recexch"},"7114":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_alltoallw_sched_allcomm_linear"},"7113":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_alltoallv_sched_allcomm_linear.cold"},"7112":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_alltoallv_sched_allcomm_linear"},"7111":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_alltoall_sched_allcomm_linear.cold"},"7110":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_alltoall_sched_allcomm_linear"},"7109":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_allgatherv_sched_allcomm_linear.cold"},"7108":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_allgatherv_sched_allcomm_linear"},"7107":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_allgather_sched_allcomm_linear.cold"},"7106":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ineighbor_allgather_sched_allcomm_linear"},"7105":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Igatherv_sched_allcomm_linear.cold"},"7104":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Igatherv_sched_allcomm_linear"},"7103":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Igather_sched_intra_tree.cold"},"7102":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Igather_sched_intra_tree"},"7101":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibcast_sched_intra_tsp_auto.cold"},"7100":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibcast_sched_intra_tsp_auto"},"7099":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibcast_sched_intra_tree"},"7098":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibcast_sched_intra_scatterv_ring_allgatherv"},"7097":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibcast_sched_intra_scatterv_allgatherv.cold"},"7096":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibcast_sched_intra_scatterv_allgatherv"},"7095":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibarrier_sched_intra_tsp_auto"},"7094":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibarrier_sched_intra_recexch"},"7093":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ibarrier_sched_intra_k_dissemination"},"7092":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallw_sched_intra_inplace.cold"},"7091":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallw_sched_intra_inplace"},"7090":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallw_sched_intra_blocked.cold"},"7089":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallw_sched_intra_blocked"},"7088":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallv_sched_intra_scattered.cold"},"7087":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallv_sched_intra_scattered"},"7086":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallv_sched_intra_inplace.cold"},"7085":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallv_sched_intra_inplace"},"7084":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallv_sched_intra_blocked.cold"},"7083":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoallv_sched_intra_blocked"},"7082":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoall_sched_intra_scattered.cold"},"7081":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoall_sched_intra_scattered"},"7080":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoall_sched_intra_ring.cold"},"7079":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoall_sched_intra_ring"},"7078":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoall_sched_intra_brucks.cold"},"7077":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Ialltoall_sched_intra_brucks"},"7076":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_tsp_auto"},"7075":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_tree.cold"},"7074":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_tree"},"7073":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_ring.cold"},"7072":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_ring"},"7071":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_recexch_step1"},"7070":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_recexch_reduce_scatter_recexch_allgatherv.cold"},"7069":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_recexch_reduce_scatter_recexch_allgatherv"},"7068":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_recexch.cold"},"7067":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallreduce_sched_intra_recexch"},"7066":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgatherv_sched_intra_ring.cold"},"7065":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgatherv_sched_intra_ring"},"7064":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgatherv_sched_intra_recexch_step2"},"7063":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgatherv_sched_intra_recexch.cold"},"7062":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgatherv_sched_intra_recexch"},"7061":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgatherv_sched_intra_brucks.cold"},"7060":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgatherv_sched_intra_brucks"},"7059":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgather_sched_intra_ring.cold"},"7058":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgather_sched_intra_ring"},"7057":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgather_sched_intra_recexch.cold"},"7056":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgather_sched_intra_recexch"},"7055":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgather_sched_intra_brucks.cold"},"7054":{"probe_name":"mpi-rest","function_name":"MPIR_TSP_Iallgather_sched_intra_brucks"},"7053":{"probe_name":"mpi-rest","function_name":"MPIR_Strerror"},"7052":{"probe_name":"mpi-rest","function_name":"MPIR_Stream_free_impl"},"7051":{"probe_name":"mpi-rest","function_name":"MPIR_Stream_create_impl"},"7050":{"probe_name":"mpi-rest","function_name":"MPIR_Stream_comm_create_multiplex_impl"},"7049":{"probe_name":"mpi-rest","function_name":"MPIR_Stream_comm_create_impl"},"7048":{"probe_name":"mpi-rest","function_name":"MPIR_Stop_progress_thread_impl"},"7047":{"probe_name":"mpi-rest","function_name":"MPIR_Status_set_elements_x_impl.cold"},"7046":{"probe_name":"mpi-rest","function_name":"MPIR_Status_set_elements_x_impl"},"7045":{"probe_name":"mpi-rest","function_name":"MPIR_Status_set_cancelled_impl"},"7044":{"probe_name":"mpi-rest","function_name":"MPIR_Status_set_bytes"},"7043":{"probe_name":"mpi-rest","function_name":"MPIR_Start_progress_thread_impl.cold"},"7042":{"probe_name":"mpi-rest","function_name":"MPIR_Start_progress_thread_impl"},"7041":{"probe_name":"mpi-rest","function_name":"MPIR_Session_set_errhandler_impl"},"7040":{"probe_name":"mpi-rest","function_name":"MPIR_Session_init_impl"},"7039":{"probe_name":"mpi-rest","function_name":"MPIR_Session_get_pset_info_impl"},"7038":{"probe_name":"mpi-rest","function_name":"MPIR_Session_get_num_psets_impl"},"7037":{"probe_name":"mpi-rest","function_name":"MPIR_Session_get_nth_pset_impl"},"7036":{"probe_name":"mpi-rest","function_name":"MPIR_Session_get_info_impl"},"7035":{"probe_name":"mpi-rest","function_name":"MPIR_Session_get_errhandler_impl"},"7034":{"probe_name":"mpi-rest","function_name":"MPIR_Session_finalize_impl"},"7033":{"probe_name":"mpi-rest","function_name":"MPIR_Session_create_errhandler_impl"},"7032":{"probe_name":"mpi-rest","function_name":"MPIR_Session_call_errhandler_impl"},"7031":{"probe_name":"mpi-rest","function_name":"MPIR_Sendrecv_replace_impl"},"7030":{"probe_name":"mpi-rest","function_name":"MPIR_Sendrecv_impl"},"7029":{"probe_name":"mpi-rest","function_name":"MPIR_Send_enqueue_impl"},"7028":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_unpack_external32"},"7027":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_unpack"},"7026":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_to_iov"},"7025":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_pack_external32"},"7024":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_pack"},"7023":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_free"},"7022":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_count_contig_blocks"},"7021":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_alloc.cold"},"7020":{"probe_name":"mpi-rest","function_name":"MPIR_Segment_alloc"},"7019":{"probe_name":"mpi-rest","function_name":"MPIR_Sched_free_counter"},"7018":{"probe_name":"mpi-rest","function_name":"MPIR_Sched_dt_and_op_allowed"},"7017":{"probe_name":"mpi-rest","function_name":"MPIR_Sched_cb_free_buf"},"7016":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv_init_impl"},"7015":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv_init"},"7014":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv_impl"},"7013":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv_allcomm_nb"},"7012":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv_allcomm_linear.cold"},"7011":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv_allcomm_linear"},"7010":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv_allcomm_auto"},"7009":{"probe_name":"mpi-rest","function_name":"MPIR_Scatterv"},"7008":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_intra_binomial.cold"},"7007":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_intra_binomial"},"7006":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_inter_remote_send_local_scatter.cold"},"7005":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_inter_remote_send_local_scatter"},"7004":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_inter_linear.cold"},"7003":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_inter_linear"},"7002":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_init_impl"},"7001":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_init"},"7000":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_impl"},"6999":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_allcomm_nb"},"6998":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter_allcomm_auto"},"6997":{"probe_name":"mpi-rest","function_name":"MPIR_Scatter"},"6996":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_intra_smp.cold"},"6995":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_intra_smp"},"6994":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_intra_recursive_doubling.cold"},"6993":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_intra_recursive_doubling"},"6992":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_init_impl"},"6991":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_init"},"6990":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_impl"},"6989":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_allcomm_nb"},"6988":{"probe_name":"mpi-rest","function_name":"MPIR_Scan_allcomm_auto"},"6987":{"probe_name":"mpi-rest","function_name":"MPIR_Scan.cold"},"6986":{"probe_name":"mpi-rest","function_name":"MPIR_Scan"},"6985":{"probe_name":"mpi-rest","function_name":"MPIR_SUM_check_dtype"},"6984":{"probe_name":"mpi-rest","function_name":"MPIR_SUM"},"6983":{"probe_name":"mpi-rest","function_name":"MPIR_Request_handle_proc_failed"},"6982":{"probe_name":"mpi-rest","function_name":"MPIR_Request_get_status_impl"},"6981":{"probe_name":"mpi-rest","function_name":"MPIR_Request_get_error"},"6980":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x6bb910"},"6979":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x562cb0"},"6978":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x543ae0"},"6977":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x52f800"},"6976":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x51d3e0"},"6975":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x5066d0"},"6974":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x457140"},"6973":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x1d2ff0"},"6972":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x1b6110"},"6971":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x1a9b20"},"6970":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x1a0040"},"6969":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety:0x18b320"},"6968":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x69e1d0"},"6967":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x68d0f0"},"6966":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x671000"},"6965":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x667af0"},"6964":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x664140"},"6963":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x65eae0"},"6962":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x64f220"},"6961":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x6450f0"},"6960":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x62fab0"},"6959":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x617970"},"6958":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x60d070"},"6957":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x5fba70"},"6956":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x5e9850"},"6955":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x5e1230"},"6954":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x5ca1d0"},"6953":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x5c4960"},"6952":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x547940"},"6951":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x4f6cc0"},"6950":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x4b7240"},"6949":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x4933d0"},"6948":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x47fe70"},"6947":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x41b280"},"6946":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x410c90"},"6945":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x375c80"},"6944":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x365c00"},"6943":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x355530"},"6942":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x347350"},"6941":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x3387b0"},"6940":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x325ea0"},"6939":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x317160"},"6938":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x306660"},"6937":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x2f6eb0"},"6936":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x2e7750"},"6935":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x2d7f30"},"6934":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x2c87e0"},"6933":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x2b6850"},"6932":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x2a8b90"},"6931":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x294d80"},"6930":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x28b3b0"},"6929":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x278590"},"6928":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x26dc00"},"6927":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x25a940"},"6926":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x251000"},"6925":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x240250"},"6924":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x22fc50"},"6923":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x21c730"},"6922":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x200c40"},"6921":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x1ea280"},"6920":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x1c8860"},"6919":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x191d30"},"6918":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x17cf00"},"6917":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x1695f0"},"6916":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x152a30"},"6915":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x1476d0"},"6914":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x140a80"},"6913":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x1331d0"},"6912":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x12c640"},"6911":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_with_safety.constprop.0:0x11ecd0"},"6910":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_impl.cold"},"6909":{"probe_name":"mpi-rest","function_name":"MPIR_Request_free_impl"},"6908":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x6bab30"},"6907":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x68c840"},"6906":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x66e9a0"},"6905":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x62efc0"},"6904":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x616e80"},"6903":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x5e0780"},"6902":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x5c96e0"},"6901":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x560b00"},"6900":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x51c920"},"6899":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x505ba0"},"6898":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x456490"},"6897":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x41a9d0"},"6896":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x364e40"},"6895":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x354770"},"6894":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x3253e0"},"6893":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x3166a0"},"6892":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x2b55f0"},"6891":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x200150"},"6890":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x1e9790"},"6889":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x1d2530"},"6888":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x1b5650"},"6887":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x19f890"},"6886":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x17c670"},"6885":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x168b30"},"6884":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x151f70"},"6883":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x1405e0"},"6882":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool:0x11e440"},"6881":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x69d950"},"6880":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x60c920"},"6879":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x60a1b0"},"6878":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x5c44d0"},"6877":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x5470c0"},"6876":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x52ed00"},"6875":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x4f6440"},"6874":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x4b69c0"},"6873":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x492b50"},"6872":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x375400"},"6871":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x346ad0"},"6870":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x337f30"},"6869":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x305ae0"},"6868":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x2f6330"},"6867":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x2e6bd0"},"6866":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x2d73b0"},"6865":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x2c7c60"},"6864":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x2a83f0"},"6863":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x294200"},"6862":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x28ac10"},"6861":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x277a10"},"6860":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x259dc0"},"6859":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x23f6d0"},"6858":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x22f0d0"},"6857":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x21bbb0"},"6856":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x1a84f0"},"6855":{"probe_name":"mpi-rest","function_name":"MPIR_Request_create_from_pool.constprop.0:0x146c90"},"6854":{"probe_name":"mpi-rest","function_name":"MPIR_Request_completion_processing.cold"},"6853":{"probe_name":"mpi-rest","function_name":"MPIR_Request_completion_processing"},"6852":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_intra_recursive_halving.cold"},"6851":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_intra_recursive_halving"},"6850":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_intra_recursive_doubling.cold"},"6849":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_intra_recursive_doubling"},"6848":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_intra_pairwise.cold"},"6847":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_intra_pairwise"},"6846":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_intra_noncommutative"},"6845":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_inter_remote_reduce_local_scatter.cold"},"6844":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_inter_remote_reduce_local_scatter"},"6843":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_init_impl"},"6842":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_init"},"6841":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_impl"},"6840":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_recursive_halving.cold"},"6839":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_recursive_halving"},"6838":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_recursive_doubling.cold"},"6837":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_recursive_doubling"},"6836":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_pairwise.cold"},"6835":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_pairwise"},"6834":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_noncommutative.cold"},"6833":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_intra_noncommutative"},"6832":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_inter_remote_reduce_local_scatter.cold"},"6831":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_inter_remote_reduce_local_scatter"},"6830":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_init_impl"},"6829":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_init"},"6828":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_impl"},"6827":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_allcomm_nb"},"6826":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block_allcomm_auto"},"6825":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_block"},"6824":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_allcomm_nb"},"6823":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter_allcomm_auto"},"6822":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_scatter"},"6821":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_local.cold"},"6820":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_local"},"6819":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_intra_smp.cold"},"6818":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_intra_smp"},"6817":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_intra_reduce_scatter_gather.cold"},"6816":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_intra_reduce_scatter_gather"},"6815":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_intra_binomial.cold"},"6814":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_intra_binomial"},"6813":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_inter_local_reduce_remote_send.cold"},"6812":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_inter_local_reduce_remote_send"},"6811":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_init_impl"},"6810":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_init"},"6809":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_impl"},"6808":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_allcomm_nb"},"6807":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce_allcomm_auto"},"6806":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce.cold"},"6805":{"probe_name":"mpi-rest","function_name":"MPIR_Reduce"},"6804":{"probe_name":"mpi-rest","function_name":"MPIR_Recv_enqueue_impl"},"6803":{"probe_name":"mpi-rest","function_name":"MPIR_ROMIO_Set_file_errhand"},"6802":{"probe_name":"mpi-rest","function_name":"MPIR_ROMIO_Get_file_errhand"},"6801":{"probe_name":"mpi-rest","function_name":"MPIR_REPLACE_check_dtype"},"6800":{"probe_name":"mpi-rest","function_name":"MPIR_REPLACE"},"6799":{"probe_name":"mpi-rest","function_name":"MPIR_Query_thread_impl"},"6798":{"probe_name":"mpi-rest","function_name":"MPIR_Publish_name_impl"},"6797":{"probe_name":"mpi-rest","function_name":"MPIR_Progress_hook_register"},"6796":{"probe_name":"mpi-rest","function_name":"MPIR_Progress_hook_exec_all"},"6795":{"probe_name":"mpi-rest","function_name":"MPIR_Progress_hook_deregister"},"6794":{"probe_name":"mpi-rest","function_name":"MPIR_Progress_hook_deactivate"},"6793":{"probe_name":"mpi-rest","function_name":"MPIR_Progress_hook_activate"},"6792":{"probe_name":"mpi-rest","function_name":"MPIR_Persist_coll_start"},"6791":{"probe_name":"mpi-rest","function_name":"MPIR_Persist_coll_free_cb.cold"},"6790":{"probe_name":"mpi-rest","function_name":"MPIR_Persist_coll_free_cb"},"6789":{"probe_name":"mpi-rest","function_name":"MPIR_Parrived"},"6788":{"probe_name":"mpi-rest","function_name":"MPIR_Pack_size_impl"},"6787":{"probe_name":"mpi-rest","function_name":"MPIR_Pack_size.cold"},"6786":{"probe_name":"mpi-rest","function_name":"MPIR_Pack_size"},"6785":{"probe_name":"mpi-rest","function_name":"MPIR_Pack_impl"},"6784":{"probe_name":"mpi-rest","function_name":"MPIR_Pack_external_size_impl"},"6783":{"probe_name":"mpi-rest","function_name":"MPIR_Pack_external_impl"},"6782":{"probe_name":"mpi-rest","function_name":"MPIR_PROD_check_dtype"},"6781":{"probe_name":"mpi-rest","function_name":"MPIR_PROD"},"6780":{"probe_name":"mpi-rest","function_name":"MPIR_Open_port_impl"},"6779":{"probe_name":"mpi-rest","function_name":"MPIR_Op_is_commutative.cold"},"6778":{"probe_name":"mpi-rest","function_name":"MPIR_Op_is_commutative"},"6777":{"probe_name":"mpi-rest","function_name":"MPIR_Op_get_alt_datatype"},"6776":{"probe_name":"mpi-rest","function_name":"MPIR_Op_free_impl"},"6775":{"probe_name":"mpi-rest","function_name":"MPIR_Op_create_large_impl"},"6774":{"probe_name":"mpi-rest","function_name":"MPIR_Op_create_impl"},"6773":{"probe_name":"mpi-rest","function_name":"MPIR_Op_commutative_impl"},"6772":{"probe_name":"mpi-rest","function_name":"MPIR_Op_builtin_search_by_shortname"},"6771":{"probe_name":"mpi-rest","function_name":"MPIR_Op_builtin_get_shortname"},"6770":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallw_init_impl"},"6769":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallw_init"},"6768":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallw_impl"},"6767":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallw_allcomm_nb"},"6766":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallw_allcomm_auto"},"6765":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallw"},"6764":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallv_init_impl"},"6763":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallv_init"},"6762":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallv_impl"},"6761":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallv_allcomm_nb"},"6760":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallv_allcomm_auto"},"6759":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoallv"},"6758":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoall_init_impl"},"6757":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoall_init"},"6756":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoall_impl"},"6755":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoall_allcomm_nb"},"6754":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoall_allcomm_auto"},"6753":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_alltoall"},"6752":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgatherv_init_impl"},"6751":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgatherv_init"},"6750":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgatherv_impl"},"6749":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgatherv_allcomm_nb"},"6748":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgatherv_allcomm_auto"},"6747":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgatherv"},"6746":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgather_init_impl"},"6745":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgather_init"},"6744":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgather_impl"},"6743":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgather_allcomm_nb"},"6742":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgather_allcomm_auto"},"6741":{"probe_name":"mpi-rest","function_name":"MPIR_Neighbor_allgather"},"6740":{"probe_name":"mpi-rest","function_name":"MPIR_NO_OP_check_dtype"},"6739":{"probe_name":"mpi-rest","function_name":"MPIR_NO_OP"},"6738":{"probe_name":"mpi-rest","function_name":"MPIR_Multi_threaded"},"6737":{"probe_name":"mpi-rest","function_name":"MPIR_MPIR_CVAR_GROUP_COLL_ALGO_from_str"},"6736":{"probe_name":"mpi-rest","function_name":"MPIR_MPIOInit"},"6735":{"probe_name":"mpi-rest","function_name":"MPIR_MINLOC_check_dtype"},"6734":{"probe_name":"mpi-rest","function_name":"MPIR_MINLOC"},"6733":{"probe_name":"mpi-rest","function_name":"MPIR_MINF_check_dtype"},"6732":{"probe_name":"mpi-rest","function_name":"MPIR_MINF"},"6731":{"probe_name":"mpi-rest","function_name":"MPIR_MAXLOC_check_dtype"},"6730":{"probe_name":"mpi-rest","function_name":"MPIR_MAXLOC"},"6729":{"probe_name":"mpi-rest","function_name":"MPIR_MAXF_check_dtype"},"6728":{"probe_name":"mpi-rest","function_name":"MPIR_MAXF"},"6727":{"probe_name":"mpi-rest","function_name":"MPIR_Lookup_name_impl"},"6726":{"probe_name":"mpi-rest","function_name":"MPIR_Localcopy_stream"},"6725":{"probe_name":"mpi-rest","function_name":"MPIR_Localcopy"},"6724":{"probe_name":"mpi-rest","function_name":"MPIR_LXOR_check_dtype"},"6723":{"probe_name":"mpi-rest","function_name":"MPIR_LXOR"},"6722":{"probe_name":"mpi-rest","function_name":"MPIR_LOR_check_dtype"},"6721":{"probe_name":"mpi-rest","function_name":"MPIR_LOR"},"6720":{"probe_name":"mpi-rest","function_name":"MPIR_LAND_check_dtype"},"6719":{"probe_name":"mpi-rest","function_name":"MPIR_LAND"},"6718":{"probe_name":"mpi-rest","function_name":"MPIR_Isendrecv_replace_impl"},"6717":{"probe_name":"mpi-rest","function_name":"MPIR_Isendrecv_impl"},"6716":{"probe_name":"mpi-rest","function_name":"MPIR_Isend_enqueue_impl"},"6715":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv_sched_impl"},"6714":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv_intra_sched_auto"},"6713":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv_inter_sched_auto"},"6712":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv_impl"},"6711":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv_allcomm_sched_linear.cold"},"6710":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv_allcomm_sched_linear"},"6709":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv_allcomm_sched_auto"},"6708":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatterv"},"6707":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_sched_impl"},"6706":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_intra_sched_binomial.cold"},"6705":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_intra_sched_binomial"},"6704":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_intra_sched_auto"},"6703":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_intra_cxi_trgrd.cold"},"6702":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_intra_cxi_trgrd"},"6701":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_inter_sched_remote_send_local_scatter.cold"},"6700":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_inter_sched_remote_send_local_scatter"},"6699":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_inter_sched_linear.cold"},"6698":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_inter_sched_linear"},"6697":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_inter_sched_auto.cold"},"6696":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_inter_sched_auto"},"6695":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_impl"},"6694":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter_allcomm_sched_auto"},"6693":{"probe_name":"mpi-rest","function_name":"MPIR_Iscatter"},"6692":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_sched_impl"},"6691":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_intra_sched_smp.cold"},"6690":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_intra_sched_smp"},"6689":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_intra_sched_recursive_doubling.cold"},"6688":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_intra_sched_recursive_doubling"},"6687":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_intra_sched_auto"},"6686":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_impl"},"6685":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan_allcomm_sched_auto"},"6684":{"probe_name":"mpi-rest","function_name":"MPIR_Iscan"},"6683":{"probe_name":"mpi-rest","function_name":"MPIR_Is_thread_main_impl"},"6682":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_sched_impl"},"6681":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_sched_impl"},"6680":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_recursive_halving.cold"},"6679":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_recursive_halving"},"6678":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_recursive_doubling.cold"},"6677":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_recursive_doubling"},"6676":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_pairwise.cold"},"6675":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_pairwise"},"6674":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_noncommutative"},"6673":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_auto.cold"},"6672":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_intra_sched_auto"},"6671":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_inter_sched_remote_reduce_local_scatterv.cold"},"6670":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_inter_sched_remote_reduce_local_scatterv"},"6669":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_inter_sched_auto"},"6668":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_impl"},"6667":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_sched_impl"},"6666":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_recursive_halving.cold"},"6665":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_recursive_halving"},"6664":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_recursive_doubling.cold"},"6663":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_recursive_doubling"},"6662":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_pairwise.cold"},"6661":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_pairwise"},"6660":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_noncommutative"},"6659":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_auto.cold"},"6658":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_intra_sched_auto"},"6657":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_inter_sched_remote_reduce_local_scatterv.cold"},"6656":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_inter_sched_remote_reduce_local_scatterv"},"6655":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_inter_sched_auto"},"6654":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_impl"},"6653":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block_allcomm_sched_auto"},"6652":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_block"},"6651":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter_allcomm_sched_auto"},"6650":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_scatter"},"6649":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_smp.cold"},"6648":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_smp"},"6647":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_reduce_scatter_gather.cold"},"6646":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_reduce_scatter_gather"},"6645":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_binomial.cold"},"6644":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_binomial"},"6643":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_auto.cold"},"6642":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_sched_auto"},"6641":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_intra_cxi_trgrd"},"6640":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_inter_sched_local_reduce_remote_send.cold"},"6639":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_inter_sched_local_reduce_remote_send"},"6638":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_inter_sched_auto"},"6637":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_impl"},"6636":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce_allcomm_sched_auto"},"6635":{"probe_name":"mpi-rest","function_name":"MPIR_Ireduce"},"6634":{"probe_name":"mpi-rest","function_name":"MPIR_Irecv_enqueue_impl"},"6633":{"probe_name":"mpi-rest","function_name":"MPIR_Intercomm_merge_impl"},"6632":{"probe_name":"mpi-rest","function_name":"MPIR_Intercomm_create_impl"},"6631":{"probe_name":"mpi-rest","function_name":"MPIR_Intercomm_create_from_groups_impl"},"6630":{"probe_name":"mpi-rest","function_name":"MPIR_Initialized_impl"},"6629":{"probe_name":"mpi-rest","function_name":"MPIR_Init_thread_impl"},"6628":{"probe_name":"mpi-rest","function_name":"MPIR_Init_impl"},"6627":{"probe_name":"mpi-rest","function_name":"MPIR_Init_err_dyncodes"},"6626":{"probe_name":"mpi-rest","function_name":"MPIR_Info_setup_env"},"6625":{"probe_name":"mpi-rest","function_name":"MPIR_Info_set_impl"},"6624":{"probe_name":"mpi-rest","function_name":"MPIR_Info_set_hex_impl"},"6623":{"probe_name":"mpi-rest","function_name":"MPIR_Info_push"},"6622":{"probe_name":"mpi-rest","function_name":"MPIR_Info_lookup"},"6621":{"probe_name":"mpi-rest","function_name":"MPIR_Info_handle_obj_free"},"6620":{"probe_name":"mpi-rest","function_name":"MPIR_Info_handle_obj_alloc"},"6619":{"probe_name":"mpi-rest","function_name":"MPIR_Info_get_valuelen_impl"},"6618":{"probe_name":"mpi-rest","function_name":"MPIR_Info_get_string_impl"},"6617":{"probe_name":"mpi-rest","function_name":"MPIR_Info_get_nthkey_impl"},"6616":{"probe_name":"mpi-rest","function_name":"MPIR_Info_get_nkeys_impl"},"6615":{"probe_name":"mpi-rest","function_name":"MPIR_Info_get_impl"},"6614":{"probe_name":"mpi-rest","function_name":"MPIR_Info_free_impl"},"6613":{"probe_name":"mpi-rest","function_name":"MPIR_Info_dup_impl"},"6612":{"probe_name":"mpi-rest","function_name":"MPIR_Info_delete_impl"},"6611":{"probe_name":"mpi-rest","function_name":"MPIR_Info_decode_hex"},"6610":{"probe_name":"mpi-rest","function_name":"MPIR_Info_create_env_impl"},"6609":{"probe_name":"mpi-rest","function_name":"MPIR_Info_alloc"},"6608":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallw_sched_impl"},"6607":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallw_intra_sched_auto"},"6606":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallw_impl"},"6605":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallw_allcomm_sched_linear"},"6604":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallw_allcomm_sched_auto"},"6603":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallw"},"6602":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallv_sched_impl"},"6601":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallv_intra_sched_auto"},"6600":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallv_impl"},"6599":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallv_allcomm_sched_linear.cold"},"6598":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallv_allcomm_sched_linear"},"6597":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallv_allcomm_sched_auto"},"6596":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoallv"},"6595":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoall_sched_impl"},"6594":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoall_intra_sched_auto"},"6593":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoall_impl"},"6592":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoall_allcomm_sched_linear.cold"},"6591":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoall_allcomm_sched_linear"},"6590":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoall_allcomm_sched_auto"},"6589":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_alltoall"},"6588":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgatherv_sched_impl"},"6587":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgatherv_intra_sched_auto"},"6586":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgatherv_impl"},"6585":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgatherv_allcomm_sched_linear.cold"},"6584":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgatherv_allcomm_sched_linear"},"6583":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgatherv_allcomm_sched_auto"},"6582":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgatherv"},"6581":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgather_sched_impl"},"6580":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgather_intra_sched_auto"},"6579":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgather_impl"},"6578":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgather_allcomm_sched_linear.cold"},"6577":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgather_allcomm_sched_linear"},"6576":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgather_allcomm_sched_auto"},"6575":{"probe_name":"mpi-rest","function_name":"MPIR_Ineighbor_allgather"},"6574":{"probe_name":"mpi-rest","function_name":"MPIR_Ilocalcopy"},"6573":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv_sched_impl"},"6572":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv_intra_sched_auto"},"6571":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv_inter_sched_auto"},"6570":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv_impl"},"6569":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv_allcomm_sched_linear.cold"},"6568":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv_allcomm_sched_linear"},"6567":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv_allcomm_sched_auto"},"6566":{"probe_name":"mpi-rest","function_name":"MPIR_Igatherv"},"6565":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_sched_impl"},"6564":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_intra_sched_binomial.cold"},"6563":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_intra_sched_binomial"},"6562":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_intra_sched_auto"},"6561":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_intra_cxi_trgrd.cold"},"6560":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_intra_cxi_trgrd"},"6559":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_inter_sched_short.cold"},"6558":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_inter_sched_short"},"6557":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_inter_sched_long.cold"},"6556":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_inter_sched_long"},"6555":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_inter_sched_auto.cold"},"6554":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_inter_sched_auto"},"6553":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_impl"},"6552":{"probe_name":"mpi-rest","function_name":"MPIR_Igather_allcomm_sched_auto"},"6551":{"probe_name":"mpi-rest","function_name":"MPIR_Igather"},"6550":{"probe_name":"mpi-rest","function_name":"MPIR_Iexscan_sched_impl"},"6549":{"probe_name":"mpi-rest","function_name":"MPIR_Iexscan_intra_sched_recursive_doubling.cold"},"6548":{"probe_name":"mpi-rest","function_name":"MPIR_Iexscan_intra_sched_recursive_doubling"},"6547":{"probe_name":"mpi-rest","function_name":"MPIR_Iexscan_intra_sched_auto"},"6546":{"probe_name":"mpi-rest","function_name":"MPIR_Iexscan_impl"},"6545":{"probe_name":"mpi-rest","function_name":"MPIR_Iexscan_allcomm_sched_auto"},"6544":{"probe_name":"mpi-rest","function_name":"MPIR_Iexscan"},"6543":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_sched_impl"},"6542":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_sched_smp.cold"},"6541":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_sched_smp"},"6540":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_sched_scatter_ring_allgather"},"6539":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_sched_scatter_recursive_doubling_allgather"},"6538":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_sched_binomial"},"6537":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_sched_auto.cold"},"6536":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_sched_auto"},"6535":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_cxi_trgrd.cold"},"6534":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_intra_cxi_trgrd"},"6533":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_inter_sched_flat"},"6532":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_inter_sched_auto"},"6531":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_impl"},"6530":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast_allcomm_sched_auto"},"6529":{"probe_name":"mpi-rest","function_name":"MPIR_Ibcast"},"6528":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier_sched_impl"},"6527":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier_intra_sched_recursive_doubling"},"6526":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier_intra_sched_auto"},"6525":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier_inter_sched_bcast"},"6524":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier_inter_sched_auto"},"6523":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier_impl"},"6522":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier_allcomm_sched_auto"},"6521":{"probe_name":"mpi-rest","function_name":"MPIR_Ibarrier"},"6520":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_sched_impl"},"6519":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_intra_sched_inplace.cold"},"6518":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_intra_sched_inplace"},"6517":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_intra_sched_blocked.cold"},"6516":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_intra_sched_blocked"},"6515":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_intra_sched_auto"},"6514":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_inter_sched_pairwise_exchange"},"6513":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_inter_sched_auto"},"6512":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_impl"},"6511":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw_allcomm_sched_auto"},"6510":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallw"},"6509":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_sched_impl"},"6508":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_intra_sched_inplace.cold"},"6507":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_intra_sched_inplace"},"6506":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_intra_sched_blocked.cold"},"6505":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_intra_sched_blocked"},"6504":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_intra_sched_auto"},"6503":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_inter_sched_pairwise_exchange.cold"},"6502":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_inter_sched_pairwise_exchange"},"6501":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_inter_sched_auto"},"6500":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_impl"},"6499":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv_allcomm_sched_auto"},"6498":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoallv"},"6497":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_sched_impl"},"6496":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_permuted_sendrecv.cold"},"6495":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_permuted_sendrecv"},"6494":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_pairwise.cold"},"6493":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_pairwise"},"6492":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_inplace"},"6491":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_brucks.cold"},"6490":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_brucks"},"6489":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_auto.cold"},"6488":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_intra_sched_auto"},"6487":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_inter_sched_pairwise_exchange.cold"},"6486":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_inter_sched_pairwise_exchange"},"6485":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_inter_sched_auto"},"6484":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_impl"},"6483":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall_allcomm_sched_auto"},"6482":{"probe_name":"mpi-rest","function_name":"MPIR_Ialltoall"},"6481":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_sched_impl"},"6480":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_smp"},"6479":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_reduce_scatter_allgather.cold"},"6478":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_reduce_scatter_allgather"},"6477":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_recursive_doubling.cold"},"6476":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_recursive_doubling"},"6475":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_naive"},"6474":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_auto.cold"},"6473":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_sched_auto"},"6472":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_cxi_trgrd.cold"},"6471":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_intra_cxi_trgrd"},"6470":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_inter_sched_remote_reduce_local_bcast"},"6469":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_inter_sched_auto"},"6468":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_impl"},"6467":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce_allcomm_sched_auto"},"6466":{"probe_name":"mpi-rest","function_name":"MPIR_Iallreduce"},"6465":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_sched_impl"},"6464":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_throttled.cold"},"6463":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_throttled"},"6462":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_sched_ring.cold"},"6461":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_sched_ring"},"6460":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_sched_recursive_doubling"},"6459":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_sched_brucks.cold"},"6458":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_sched_brucks"},"6457":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_sched_auto.cold"},"6456":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_intra_sched_auto"},"6455":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_inter_sched_remote_gather_local_bcast"},"6454":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_inter_sched_auto"},"6453":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_impl"},"6452":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv_allcomm_sched_auto"},"6451":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgatherv"},"6450":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_sched_impl"},"6449":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_ring.cold"},"6448":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_ring"},"6447":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_recursive_doubling.cold"},"6446":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_recursive_doubling"},"6445":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_brucks.cold"},"6444":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_brucks"},"6443":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_auto.cold"},"6442":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_intra_sched_auto"},"6441":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_inter_sched_local_gather_remote_bcast.cold"},"6440":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_inter_sched_local_gather_remote_bcast"},"6439":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_inter_sched_auto"},"6438":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_impl"},"6437":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather_allcomm_sched_auto"},"6436":{"probe_name":"mpi-rest","function_name":"MPIR_Iallgather"},"6435":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_obj_alloc_unsafe.constprop.0:0x5e8f60"},"6434":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_obj_alloc_unsafe.constprop.0:0x477a80"},"6433":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_indirect_init.constprop.0:0x5f9d40"},"6432":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_indirect_init.constprop.0:0x542d40"},"6431":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_indirect_init.constprop.0:0x4e90b0"},"6430":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_indirect_init.constprop.0:0x4de510"},"6429":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_indirect_init.constprop.0:0x4db6d0"},"6428":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_indirect_init.constprop.0:0x38f440"},"6427":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xc8b50"},"6426":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xc6740"},"6425":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xc44b0"},"6424":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xc2420"},"6423":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xc04e0"},"6422":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xbe900"},"6421":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xbc840"},"6420":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xba900"},"6419":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xb8cb0"},"6418":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xb6ed0"},"6417":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xb3d80"},"6416":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xb1fa0"},"6415":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xab410"},"6414":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xa9600"},"6413":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xa7810"},"6412":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xa3c60"},"6411":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0xa0230"},"6410":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x9c5a0"},"6409":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x9a600"},"6408":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x98b40"},"6407":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x97000"},"6406":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x95320"},"6405":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x936b0"},"6404":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x8f5e0"},"6403":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x8dc10"},"6402":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x8a4f0"},"6401":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x88290"},"6400":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x863c0"},"6399":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x84900"},"6398":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x834e0"},"6397":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x7b310"},"6396":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x79020"},"6395":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x771e0"},"6394":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x74b70"},"6393":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x72780"},"6392":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x704a0"},"6391":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x6e4c0"},"6390":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x6c580"},"6389":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x6b97a0"},"6388":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x6a9a0"},"6387":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x69170"},"6386":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x67c20"},"6385":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x5b770"},"6384":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x57b10"},"6383":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x55ee0"},"6382":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x53970"},"6381":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x51560"},"6380":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x4f460"},"6379":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x4d550"},"6378":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x4b5a80"},"6377":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x491c70"},"6376":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x455490"},"6375":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x374520"},"6374":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x363f00"},"6373":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x353830"},"6372":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x345bf0"},"6371":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x337050"},"6370":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x324500"},"6369":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x3157c0"},"6368":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x304ba0"},"6367":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x2f53f0"},"6366":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x2e5c90"},"6365":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x2d6470"},"6364":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x2c6d20"},"6363":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x2b46b0"},"6362":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x293290"},"6361":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x276aa0"},"6360":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x258e80"},"6359":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x23e760"},"6358":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x22e1c0"},"6357":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x21ac70"},"6356":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x1d1590"},"6355":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x1ce3c0"},"6354":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x1b46b0"},"6353":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x190340"},"6352":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x17b570"},"6351":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x167c20"},"6350":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x164990"},"6349":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x151060"},"6348":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x1317e0"},"6347":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x11d340"},"6346":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x117160"},"6345":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect:0x116490"},"6344":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x69d660"},"6343":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x68c550"},"6342":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x66e6b0"},"6341":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x62ecd0"},"6340":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x616b00"},"6339":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x5f9a50"},"6338":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x5c93f0"},"6337":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x560810"},"6336":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x546dd0"},"6335":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x52ea10"},"6334":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x51c630"},"6333":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x5058b0"},"6332":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x4f6150"},"6331":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x4a4710"},"6330":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x477790"},"6329":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x41a6e0"},"6328":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x1ffe60"},"6327":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_ptr_indirect.constprop.0:0x1e94a0"},"6326":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_get_kind_str"},"6325":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x6bb660"},"6324":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x6b3cb0"},"6323":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x69dfe0"},"6322":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x68cf00"},"6321":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x66f650"},"6320":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x664030"},"6319":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x65e3b0"},"6318":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x656650"},"6317":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x62f9a0"},"6316":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x617860"},"6315":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x612d50"},"6314":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x60cf60"},"6313":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x60aa20"},"6312":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x5fa530"},"6311":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x5e9740"},"6310":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x5e0e20"},"6309":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x5c9ec0"},"6308":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x5c4c00"},"6307":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x5b91e0"},"6306":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x577680"},"6305":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x561590"},"6304":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x55e100"},"6303":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x547750"},"6302":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x542ec0"},"6301":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x52f390"},"6300":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x51cfe0"},"6299":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x5065c0"},"6298":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4f6ad0"},"6297":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4f3720"},"6296":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4f1050"},"6295":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4e9cb0"},"6294":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4e9250"},"6293":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4de6b0"},"6292":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4db8a0"},"6291":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4b7050"},"6290":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4b3290"},"6289":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4af4c0"},"6288":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4ac2a0"},"6287":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4932c0"},"6286":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x478390"},"6285":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x457030"},"6284":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x43ee0"},"6283":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x42ce0"},"6282":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x41b170"},"6281":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x412780"},"6280":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x4004b0"},"6279":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x390a50"},"6278":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x38f5e0"},"6277":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x375a90"},"6276":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x365af0"},"6275":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x355420"},"6274":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x347160"},"6273":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x3385c0"},"6272":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x333450"},"6271":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x325aa0"},"6270":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x316d60"},"6269":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x306470"},"6268":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x2f6cc0"},"6267":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x2e7560"},"6266":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x2d7d40"},"6265":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x2c85f0"},"6264":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x2b62a0"},"6263":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x2a8880"},"6262":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x294b90"},"6261":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x28b0a0"},"6260":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x2783a0"},"6259":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x26d8f0"},"6258":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x25a750"},"6257":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x250cf0"},"6256":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x240060"},"6255":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x22fa60"},"6254":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x21c540"},"6253":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x200b30"},"6252":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1ea170"},"6251":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1e5020"},"6250":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1d2bf0"},"6249":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1c8750"},"6248":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1b5d10"},"6247":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1b2950"},"6246":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1a8980"},"6245":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1a5cd0"},"6244":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x19ff30"},"6243":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x191b40"},"6242":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x18b210"},"6241":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x17cd10"},"6240":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1691f0"},"6239":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x152630"},"6238":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x147120"},"6237":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1410a0"},"6236":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x132fe0"},"6235":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x12cae0"},"6234":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x11eae0"},"6233":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x119220"},"6232":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x1118a0"},"6231":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x10c4e0"},"6230":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_finalize:0x107260"},"6229":{"probe_name":"mpi-rest","function_name":"MPIR_Handle_fatal_error"},"6228":{"probe_name":"mpi-rest","function_name":"MPIR_Group_union_impl"},"6227":{"probe_name":"mpi-rest","function_name":"MPIR_Group_translate_ranks_impl"},"6226":{"probe_name":"mpi-rest","function_name":"MPIR_Group_size_impl"},"6225":{"probe_name":"mpi-rest","function_name":"MPIR_Group_setup_lpid_pairs"},"6224":{"probe_name":"mpi-rest","function_name":"MPIR_Group_release"},"6223":{"probe_name":"mpi-rest","function_name":"MPIR_Group_rank_impl"},"6222":{"probe_name":"mpi-rest","function_name":"MPIR_Group_range_incl_impl"},"6221":{"probe_name":"mpi-rest","function_name":"MPIR_Group_range_excl_impl"},"6220":{"probe_name":"mpi-rest","function_name":"MPIR_Group_intersection_impl"},"6219":{"probe_name":"mpi-rest","function_name":"MPIR_Group_init"},"6218":{"probe_name":"mpi-rest","function_name":"MPIR_Group_incl_impl"},"6217":{"probe_name":"mpi-rest","function_name":"MPIR_Group_from_session_pset_impl"},"6216":{"probe_name":"mpi-rest","function_name":"MPIR_Group_free_impl"},"6215":{"probe_name":"mpi-rest","function_name":"MPIR_Group_excl_impl"},"6214":{"probe_name":"mpi-rest","function_name":"MPIR_Group_difference_impl"},"6213":{"probe_name":"mpi-rest","function_name":"MPIR_Group_create"},"6212":{"probe_name":"mpi-rest","function_name":"MPIR_Group_compare_impl"},"6211":{"probe_name":"mpi-rest","function_name":"MPIR_Group_check_valid_ranks"},"6210":{"probe_name":"mpi-rest","function_name":"MPIR_Group_check_valid_ranges"},"6209":{"probe_name":"mpi-rest","function_name":"MPIR_Group_check_subset"},"6208":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_start_impl"},"6207":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_query"},"6206":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_poll"},"6205":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_free_classes_on_finalize"},"6204":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_free"},"6203":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_complete_impl"},"6202":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_class_create_impl"},"6201":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_class_allocate_impl.cold"},"6200":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_class_allocate_impl"},"6199":{"probe_name":"mpi-rest","function_name":"MPIR_Grequest_cancel"},"6198":{"probe_name":"mpi-rest","function_name":"MPIR_Graphdims_get_impl"},"6197":{"probe_name":"mpi-rest","function_name":"MPIR_Graph_optimized"},"6196":{"probe_name":"mpi-rest","function_name":"MPIR_Graph_neighbors_impl"},"6195":{"probe_name":"mpi-rest","function_name":"MPIR_Graph_neighbors_count_impl"},"6194":{"probe_name":"mpi-rest","function_name":"MPIR_Graph_map_impl"},"6193":{"probe_name":"mpi-rest","function_name":"MPIR_Graph_get_impl"},"6192":{"probe_name":"mpi-rest","function_name":"MPIR_Graph_create_impl"},"6191":{"probe_name":"mpi-rest","function_name":"MPIR_Get_version_impl"},"6190":{"probe_name":"mpi-rest","function_name":"MPIR_Get_node_id"},"6189":{"probe_name":"mpi-rest","function_name":"MPIR_Get_library_version_impl"},"6188":{"probe_name":"mpi-rest","function_name":"MPIR_Get_intranode_rank.cold"},"6187":{"probe_name":"mpi-rest","function_name":"MPIR_Get_intranode_rank"},"6186":{"probe_name":"mpi-rest","function_name":"MPIR_Get_internode_rank.cold"},"6185":{"probe_name":"mpi-rest","function_name":"MPIR_Get_internode_rank"},"6184":{"probe_name":"mpi-rest","function_name":"MPIR_Get_intercomm_contextid_nonblock"},"6183":{"probe_name":"mpi-rest","function_name":"MPIR_Get_intercomm_contextid"},"6182":{"probe_name":"mpi-rest","function_name":"MPIR_Get_file_error_routine"},"6181":{"probe_name":"mpi-rest","function_name":"MPIR_Get_elements_x_impl.cold"},"6180":{"probe_name":"mpi-rest","function_name":"MPIR_Get_elements_x_impl"},"6179":{"probe_name":"mpi-rest","function_name":"MPIR_Get_count_impl.cold"},"6178":{"probe_name":"mpi-rest","function_name":"MPIR_Get_count_impl"},"6177":{"probe_name":"mpi-rest","function_name":"MPIR_Get_contextid_sparse_group"},"6176":{"probe_name":"mpi-rest","function_name":"MPIR_Get_contextid_sparse"},"6175":{"probe_name":"mpi-rest","function_name":"MPIR_Get_contextid_nonblock"},"6174":{"probe_name":"mpi-rest","function_name":"MPIR_Get_address_impl"},"6173":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv_init_impl"},"6172":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv_init"},"6171":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv_impl"},"6170":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv_allcomm_nb"},"6169":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv_allcomm_linear.cold"},"6168":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv_allcomm_linear"},"6167":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv_allcomm_auto"},"6166":{"probe_name":"mpi-rest","function_name":"MPIR_Gatherv"},"6165":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_intra_binomial.cold"},"6164":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_intra_binomial"},"6163":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_inter_local_gather_remote_send.cold"},"6162":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_inter_local_gather_remote_send"},"6161":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_inter_linear.cold"},"6160":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_inter_linear"},"6159":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_init_impl"},"6158":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_init"},"6157":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_impl"},"6156":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_allcomm_nb"},"6155":{"probe_name":"mpi-rest","function_name":"MPIR_Gather_allcomm_auto"},"6154":{"probe_name":"mpi-rest","function_name":"MPIR_Gather"},"6153":{"probe_name":"mpi-rest","function_name":"MPIR_Free_contextid"},"6152":{"probe_name":"mpi-rest","function_name":"MPIR_FreeF90Datatypes"},"6151":{"probe_name":"mpi-rest","function_name":"MPIR_Find_local"},"6150":{"probe_name":"mpi-rest","function_name":"MPIR_Find_external"},"6149":{"probe_name":"mpi-rest","function_name":"MPIR_Finalized_impl"},"6148":{"probe_name":"mpi-rest","function_name":"MPIR_Finalize_impl"},"6147":{"probe_name":"mpi-rest","function_name":"MPIR_File_set_errhandler_impl"},"6146":{"probe_name":"mpi-rest","function_name":"MPIR_File_get_errhandler_impl.cold"},"6145":{"probe_name":"mpi-rest","function_name":"MPIR_File_get_errhandler_impl"},"6144":{"probe_name":"mpi-rest","function_name":"MPIR_File_create_errhandler_impl"},"6143":{"probe_name":"mpi-rest","function_name":"MPIR_File_call_errhandler_impl.cold"},"6142":{"probe_name":"mpi-rest","function_name":"MPIR_File_call_errhandler_impl"},"6141":{"probe_name":"mpi-rest","function_name":"MPIR_File_call_cxx_errhandler"},"6140":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_mutex_init"},"6139":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_mutex_finalize"},"6138":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_init"},"6137":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_datatype_iscommitted.cold"},"6136":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_datatype_iscommitted"},"6135":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_cs_yield"},"6134":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_cs_exit"},"6133":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_cs_enter"},"6132":{"probe_name":"mpi-rest","function_name":"MPIR_Ext_assert_fail"},"6131":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan_intra_recursive_doubling.cold"},"6130":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan_intra_recursive_doubling"},"6129":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan_init_impl"},"6128":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan_init"},"6127":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan_impl"},"6126":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan_allcomm_nb"},"6125":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan_allcomm_auto"},"6124":{"probe_name":"mpi-rest","function_name":"MPIR_Exscan"},"6123":{"probe_name":"mpi-rest","function_name":"MPIR_Errutil_is_initialized"},"6122":{"probe_name":"mpi-rest","function_name":"MPIR_Error_string_impl"},"6121":{"probe_name":"mpi-rest","function_name":"MPIR_Error_class_impl"},"6120":{"probe_name":"mpi-rest","function_name":"MPIR_Errhandler_free_impl.part.0"},"6119":{"probe_name":"mpi-rest","function_name":"MPIR_Errhandler_free_impl"},"6118":{"probe_name":"mpi-rest","function_name":"MPIR_Err_return_win"},"6117":{"probe_name":"mpi-rest","function_name":"MPIR_Err_return_comm.cold"},"6116":{"probe_name":"mpi-rest","function_name":"MPIR_Err_return_comm"},"6115":{"probe_name":"mpi-rest","function_name":"MPIR_Err_is_fatal"},"6114":{"probe_name":"mpi-rest","function_name":"MPIR_Err_init"},"6113":{"probe_name":"mpi-rest","function_name":"MPIR_Err_get_string"},"6112":{"probe_name":"mpi-rest","function_name":"MPIR_Err_create_code_valist.cold"},"6111":{"probe_name":"mpi-rest","function_name":"MPIR_Err_create_code_valist"},"6110":{"probe_name":"mpi-rest","function_name":"MPIR_Err_create_code"},"6109":{"probe_name":"mpi-rest","function_name":"MPIR_Err_combine_codes"},"6108":{"probe_name":"mpi-rest","function_name":"MPIR_Err_Uninitialized"},"6107":{"probe_name":"mpi-rest","function_name":"MPIR_Dynerrcodes_finalize"},"6106":{"probe_name":"mpi-rest","function_name":"MPIR_Dup_fn"},"6105":{"probe_name":"mpi-rest","function_name":"MPIR_Dist_graph_neighbors_impl"},"6104":{"probe_name":"mpi-rest","function_name":"MPIR_Dist_graph_neighbors_count_impl"},"6103":{"probe_name":"mpi-rest","function_name":"MPIR_Dist_graph_create_impl"},"6102":{"probe_name":"mpi-rest","function_name":"MPIR_Dist_graph_create_adjacent_impl"},"6101":{"probe_name":"mpi-rest","function_name":"MPIR_Dims_create_impl"},"6100":{"probe_name":"mpi-rest","function_name":"MPIR_Delete_error_string_impl"},"6099":{"probe_name":"mpi-rest","function_name":"MPIR_Delete_error_code_impl"},"6098":{"probe_name":"mpi-rest","function_name":"MPIR_Delete_error_class_impl"},"6097":{"probe_name":"mpi-rest","function_name":"MPIR_Debugger_set_aborting"},"6096":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_set_contents.constprop.0:0x4e6f20"},"6095":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_set_contents.constprop.0:0x4e4d10"},"6094":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_set_contents.constprop.0.cold:0x3ed8b"},"6093":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_set_contents.constprop.0.cold:0x3ed1c"},"6092":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_set_contents.cold"},"6091":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_set_contents"},"6090":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_iscontig.cold"},"6089":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_iscontig"},"6088":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_init_predefined.cold"},"6087":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_init_predefined"},"6086":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_get_flattened.cold"},"6085":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_get_flattened"},"6084":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_free.cold"},"3353":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1e94e0"},"3352":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1d2280"},"3351":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1b53a0"},"3350":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x19f750"},"3349":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x190f70"},"3348":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x17c3c0"},"3347":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x168880"},"3346":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x151cc0"},"3345":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1404a0"},"3344":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x132410"},"3343":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x11e190"},"3342":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x6b97e0"},"3341":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x69ca70"},"3340":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x68b700"},"3339":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x66d780"},"3338":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x663b50"},"3337":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x65dc20"},"3336":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x6448b0"},"3335":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x62e020"},"3334":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x615df0"},"3333":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x612590"},"3332":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x60c1f0"},"3331":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x609ed0"},"3330":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x5f90a0"},"3329":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x5e8320"},"3328":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x5c8770"},"3327":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x5c3ff0"},"3326":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x55fb00"},"3325":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x5461e0"},"3324":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x52d730"},"3323":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x51ba10"},"3322":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x504ba0"},"3321":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x4f5560"},"3320":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x4b5ac0"},"3319":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x4b2fb0"},"3318":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x491cb0"},"3317":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x476b40"},"3316":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x4554d0"},"3315":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x419850"},"3314":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x374560"},"3313":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x363f40"},"3312":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x353870"},"3311":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x345c30"},"3310":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x337090"},"3309":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x333170"},"3308":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x324540"},"3307":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x315800"},"3306":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x304be0"},"3305":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x2f5430"},"3304":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x2e5cd0"},"3303":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x2d64b0"},"3302":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x2c6d60"},"3301":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x2b46f0"},"3300":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x2a7a20"},"3299":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x2932d0"},"3298":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x28a250"},"3297":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x276ae0"},"3296":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x26cf50"},"3295":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x258ec0"},"3294":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x250360"},"3293":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x23e7a0"},"3292":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x22e200"},"3291":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x21acb0"},"3290":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1ff1b0"},"3289":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1e87f0"},"3288":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1d15d0"},"3287":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1c80f0"},"3286":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1b46f0"},"3285":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1a7cb0"},"3284":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1a5850"},"3283":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x19f380"},"3282":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x190380"},"3281":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x18aca0"},"3280":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x17b5b0"},"3279":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x167c60"},"3278":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1510a0"},"3277":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1464e0"},"3276":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x140160"},"3275":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x131820"},"3274":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x12c330"},"3273":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x11d380"},"3272":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x1110e0"},"3271":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x10bd20"},"3270":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av:0x106aa0"},"3269":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x41b69"},"3268":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x4189a"},"3267":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x4169c"},"3266":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x41468"},"3265":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x413a7"},"3264":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x412b1"},"3263":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x410d1"},"3262":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x40dbb"},"3261":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x40aa5"},"3260":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x40a7d"},"3259":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x40a0b"},"3258":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x40998"},"3257":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x40778"},"3256":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x40536"},"3255":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x400a5"},"3254":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3fec1"},"3253":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3fa60"},"3252":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3f862"},"3251":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3f5aa"},"3250":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3f3ac"},"3249":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3f096"},"3248":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3ee08"},"3247":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3e229"},"3246":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3e1d5"},"3245":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3dcc2"},"3244":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3da98"},"3243":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3d72e"},"3242":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3d34d"},"3241":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3b16d"},"3240":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3af18"},"3239":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3ace4"},"3238":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3aae6"},"3237":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3a8c7"},"3236":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3a876"},"3235":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3a678"},"3234":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3a47a"},"3233":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3a225"},"3232":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x39ff1"},"3231":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x39d9c"},"3230":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x39b68"},"3229":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x39934"},"3228":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x396df"},"3227":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x39566"},"3226":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x391ea"},"3225":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x39092"},"3224":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x38d2f"},"3223":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x38bb6"},"3222":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x38837"},"3221":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x386df"},"3220":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x38429"},"3219":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x381bc"},"3218":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x37e61"},"3217":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x37b4b"},"3216":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x37835"},"3215":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x37486"},"3214":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x37219"},"3213":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x36f11"},"3212":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x36ce8"},"3211":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x36bf8"},"3210":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x36ab6"},"3209":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x368b8"},"3208":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x36719"},"3207":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3651b"},"3206":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x36213"},"3205":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x35df1"},"3204":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x35c6f"},"3203":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x35b2d"},"3202":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3592f"},"3201":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x35790"},"3200":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x35592"},"3199":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x3532b"},"3198":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x352b9"},"3197":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_av.cold:0x35247"},"3196":{"probe_name":"mpi-rest","function_name":"MPIDIU_avt_release_ref"},"3195":{"probe_name":"mpi-rest","function_name":"MPIDIU_avt_init"},"3194":{"probe_name":"mpi-rest","function_name":"MPIDIU_avt_destroy"},"3193":{"probe_name":"mpi-rest","function_name":"MPIDIU_avt_add_ref"},"3192":{"probe_name":"mpi-rest","function_name":"MPIDIU_alloc_mlut"},"3191":{"probe_name":"mpi-rest","function_name":"MPIDIU_alloc_lut"},"3190":{"probe_name":"mpi-rest","function_name":"MPIDIU_Intercomm_map_bcast_intra"},"3189":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_unlockall_target_msg_cb"},"3188":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_unlockall_ack_target_msg_cb"},"3187":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_unlock_target_msg_cb"},"3186":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_unlock_ack_target_msg_cb"},"3185":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x6b9db0"},"3184":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x69d040"},"3183":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x68bcd0"},"3182":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x66dd10"},"3181":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x62e5f0"},"3180":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x6163c0"},"3179":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x5f8fb0"},"3178":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x5e8600"},"3177":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x5c8ba0"},"3176":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x55ff30"},"3175":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x5467b0"},"3174":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x52dd00"},"3173":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x51bfe0"},"3172":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x504fd0"},"3171":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x4f5b30"},"3170":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x4b6090"},"3169":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x492280"},"3168":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x476f70"},"3167":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x455aa0"},"3166":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x419e20"},"3165":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x374840"},"3164":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x364510"},"3163":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x353b50"},"3162":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x346200"},"3161":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x337370"},"3160":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x324970"},"3159":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x315ae0"},"3158":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x304ec0"},"3157":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2f5710"},"3156":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2e5fb0"},"3155":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2d6790"},"3154":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2c7040"},"3153":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2b49d0"},"3152":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2a7d00"},"3151":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2935b0"},"3150":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x28a530"},"3149":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x276dc0"},"3148":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x26d230"},"3147":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x2591a0"},"3146":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x250640"},"3145":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x23ea80"},"3144":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x22e4e0"},"3143":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x21af90"},"3142":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x1ff780"},"3141":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x1e8dc0"},"3140":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x1d1a00"},"3139":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x1b4b20"},"3138":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x190950"},"3137":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x17bb80"},"3136":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x168090"},"3135":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x1514d0"},"3134":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x131df0"},"3133":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_find:0x11d950"},"3132":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x6bbd40"},"3131":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x69e5f0"},"3130":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x68d510"},"3129":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x66ff70"},"3128":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x62fed0"},"3127":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x617d90"},"3126":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x5fa640"},"3125":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x5ca8e0"},"3124":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x561c20"},"3123":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x547d60"},"3122":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x52fc30"},"3121":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x51df40"},"3120":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x506b00"},"3119":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x4f70e0"},"3118":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x4b7660"},"3117":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x4937f0"},"3116":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x4784a0"},"3115":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x457570"},"3114":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x41b6a0"},"3113":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x3760a0"},"3112":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x366020"},"3111":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x355950"},"3110":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x347770"},"3109":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x338bd0"},"3108":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x3262c0"},"3107":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x317580"},"3106":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x306a80"},"3105":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x2f72d0"},"3104":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x2e7b70"},"3103":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x2d8350"},"3102":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x2c8c00"},"3101":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x2b63b0"},"3100":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x2951a0"},"3099":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x2789b0"},"3098":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x25ad60"},"3097":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x240670"},"3096":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x230070"},"3095":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x21cb50"},"3094":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x201060"},"3093":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x1ea6a0"},"3092":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x1d3420"},"3091":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x1b6540"},"3090":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x192150"},"3089":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x17d320"},"3088":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x169a10"},"3087":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x152e50"},"3086":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x1335f0"},"3085":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_target_add:0x11f0f0"},"3084":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_post_target_msg_cb"},"3083":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_lockall_target_msg_cb"},"3082":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_lockall_ack_target_msg_cb"},"3081":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_lock_target_msg_cb"},"3080":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_lock_ack_target_msg_cb"},"3079":{"probe_name":"mpi-rest","function_name":"MPIDIG_win_complete_target_msg_cb"},"3078":{"probe_name":"mpi-rest","function_name":"MPIDIG_ssend_ack_target_msg_cb"},"3077":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_target_msg_cb.cold"},"3076":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_target_msg_cb"},"3075":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_origin_cb"},"3074":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_data_target_msg_cb"},"3073":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_data_origin_cb.cold"},"3072":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_data_origin_cb"},"3071":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_cts_target_msg_cb.cold"},"3070":{"probe_name":"mpi-rest","function_name":"MPIDIG_send_cts_target_msg_cb"},"3069":{"probe_name":"mpi-rest","function_name":"MPIDIG_request_create.constprop.0:0x5fa1a0"},"3068":{"probe_name":"mpi-rest","function_name":"MPIDIG_request_create.constprop.0:0x191220"},"3067":{"probe_name":"mpi-rest","function_name":"MPIDIG_request_create.constprop.0:0x1326c0"},"3066":{"probe_name":"mpi-rest","function_name":"MPIDIG_reply_ssend.part.0"},"3065":{"probe_name":"mpi-rest","function_name":"MPIDIG_recvq_init"},"3064":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x6bcdd0"},"3063":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x630f60"},"3062":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x618e20"},"3061":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x5ca5f0"},"3060":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x5630e0"},"3059":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x507b90"},"3058":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x480110"},"3057":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x458600"},"3056":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x2020f0"},"3055":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x1eb730"},"3054":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x1a0470"},"3053":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init:0x1411b0"},"3052":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0:0x5eb530"},"3051":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0:0x5e2240"},"3050":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0:0x18b5c0"},"3049":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0:0x12cbf0"},"3048":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0.cold:0x4053d"},"3047":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0.cold:0x403c2"},"3046":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0.cold:0x36720"},"3045":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.isra.0.cold:0x35797"},"3044":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x41b77"},"3043":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x40dc9"},"3042":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x40ab3"},"3041":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x400b3"},"3040":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x3fa90"},"3039":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x3f0a4"},"3038":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x3dac7"},"3037":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x3d73c"},"3036":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x37b59"},"3035":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x37843"},"3034":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x36abd"},"3033":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_type_init.cold:0x35b34"},"3032":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_setup:0x66b2e0"},"3031":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_setup:0x65df00"},"3030":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_copy_seg"},"3029":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_copy:0x5e8920"},"3028":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_copy:0x5dfe60"},"3027":{"probe_name":"mpi-rest","function_name":"MPIDIG_recv_check_rndv_cb.part.0"},"3026":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_target_msg_cb"},"3025":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_origin_cb"},"3024":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_dt_target_msg_cb"},"3023":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_dt_origin_cb.cold"},"3022":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_dt_origin_cb"},"3021":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_dt_ack_target_msg_cb"},"3020":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_data_target_msg_cb"},"3019":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_data_origin_cb.cold"},"3018":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_data_origin_cb"},"3017":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_ack_target_msg_cb"},"3016":{"probe_name":"mpi-rest","function_name":"MPIDIG_put_ack_origin_cb"},"3015":{"probe_name":"mpi-rest","function_name":"MPIDIG_precv_matched.cold"},"3014":{"probe_name":"mpi-rest","function_name":"MPIDIG_precv_matched"},"3013":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_send_init_target_msg_cb"},"3012":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_send_data_target_msg_cb.cold"},"3011":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_send_data_target_msg_cb"},"3010":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_send_data_origin_cb"},"3009":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_issue_data.constprop.0:0x114750"},"3008":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_issue_data.constprop.0:0x10f390"},"3007":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_issue_data.constprop.0:0x10a110"},"3006":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_issue_data.constprop.0.cold:0x35353"},"3005":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_issue_data.constprop.0.cold:0x352e1"},"3004":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_issue_data.constprop.0.cold:0x3526f"},"3003":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_cts_target_msg_cb.cold"},"3002":{"probe_name":"mpi-rest","function_name":"MPIDIG_part_cts_target_msg_cb"},"3001":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_set_info"},"3000":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_get_info"},"2999":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_free"},"2998":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_detach"},"2997":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_create_dynamic"},"2996":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_create"},"2995":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_attach"},"2994":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_allocate_shared"},"2993":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_win_allocate"},"2992":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_rput.part.0"},"2991":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_rget_accumulate.part.0"},"2990":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_rget.part.0"},"2989":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_raccumulate.part.0"},"2988":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_put.part.0"},"2987":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_psend_init.cold"},"2986":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_psend_init"},"2985":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_precv_init"},"2984":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_parrived.constprop.0.isra.0"},"2983":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x6ba320"},"2982":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x62e770"},"2981":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x6165a0"},"2980":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x5c8e90"},"2979":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x560220"},"2978":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x505290"},"2977":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x477230"},"2976":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x455bf0"},"2975":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x1ff8d0"},"2974":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x1e8f40"},"2973":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x19f660"},"2972":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_irecv.part.0:0x140440"},"2971":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_imrecv:0x18b8a0"},"2970":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_imrecv:0x12ced0"},"2969":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_imrecv.cold:0x36742"},"2968":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_imrecv.cold:0x357b9"},"2967":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_improbe.constprop.0:0x17c1a0"},"2966":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_improbe.constprop.0:0x11df70"},"2965":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_get_accumulate.part.0:0x2939f0"},"2964":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_get_accumulate.part.0:0x2595b0"},"2963":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_get_accumulate.part.0:0x23ee90"},"2962":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_get.part.0"},"2961":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_free_mem"},"2960":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_fetch_and_op.part.0"},"2959":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_compare_and_swap"},"2958":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x6bf210"},"2957":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x6a06d0"},"2956":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x690150"},"2955":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x673590"},"2954":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x668530"},"2953":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x6643e0"},"2952":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x65f040"},"2951":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x64f640"},"2950":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x645b30"},"2949":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x633390"},"2948":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x61b250"},"2947":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x5ff160"},"2946":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x5e4e00"},"2945":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x5cdab0"},"2944":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x565c00"},"2943":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x54a9a0"},"2942":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x543d70"},"2941":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x5329a0"},"2940":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x521110"},"2939":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x509fd0"},"2938":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x4f9d20"},"2937":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x4ba2a0"},"2936":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x496430"},"2935":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x488270"},"2934":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x45aa40"},"2933":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x41e2e0"},"2932":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x378ce0"},"2931":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x368c60"},"2930":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x358590"},"2929":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x34a3b0"},"2928":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x33b810"},"2927":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x328f00"},"2926":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x31a1c0"},"2925":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x3096c0"},"2924":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x2f9f10"},"2923":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x2ea7b0"},"2922":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x2daf90"},"2921":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x2cb840"},"2920":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x2b9410"},"2919":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x297de0"},"2918":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x27b5f0"},"2917":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x25d9a0"},"2916":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x2432b0"},"2915":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x232cb0"},"2914":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x21f790"},"2913":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x204520"},"2912":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x1edb60"},"2911":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x1d65f0"},"2910":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x1c99d0"},"2909":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x1b9710"},"2908":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x194d90"},"2907":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x17ff60"},"2906":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x16cbe0"},"2905":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x156020"},"2904":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x136230"},"2903":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0:0x121d30"},"2902":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x41bba"},"2901":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x418eb"},"2900":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x416cb"},"2899":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x41497"},"2898":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x4141f"},"2897":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x413ae"},"2896":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x412d9"},"2895":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x41163"},"2894":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x410f9"},"2893":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x40e0c"},"2892":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x40af6"},"2891":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x407a7"},"2890":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x40405"},"2889":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x400f6"},"2888":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3fae7"},"2887":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3f891"},"2886":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3f7f4"},"2885":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3f5fa"},"2884":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3f3db"},"2883":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3f0e7"},"2882":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3ee37"},"2881":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3e258"},"2880":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3dcf1"},"2879":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3dc6c"},"2878":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3d77f"},"2877":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3d37c"},"2876":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3b19c"},"2875":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3af47"},"2874":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3ad13"},"2873":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3ab15"},"2872":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3a8f6"},"2871":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3a6a7"},"2870":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3a4a9"},"2869":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3a254"},"2868":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3a020"},"2867":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x39dcb"},"2866":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x39b97"},"2865":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x39963"},"2864":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3970e"},"2863":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x39219"},"2862":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x38d5e"},"2861":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x38866"},"2860":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x38458"},"2859":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x381eb"},"2858":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x37e90"},"2857":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x37b9c"},"2856":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x37886"},"2855":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x374b5"},"2854":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x37262"},"2853":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x36f40"},"2852":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x368e7"},"2851":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3654a"},"2850":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x36242"},"2849":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x35e20"},"2848":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x3595e"},"2847":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_cancel_recv.part.0.cold:0x355c1"},"2846":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_alloc_mem"},"2845":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_accumulate.part.0:0x277200"},"2844":{"probe_name":"mpi-rest","function_name":"MPIDIG_mpi_accumulate.part.0:0x21b3a0"},"2843":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl:0x637070"},"2842":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl:0x61ef30"},"2841":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl:0x45f180"},"2840":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl:0x208200"},"2839":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl:0x1f1840"},"2838":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x6c34e0"},"2837":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x5d1680"},"2836":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x5697e0"},"2835":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x523a50"},"2834":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x50dbb0"},"2833":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x1da1d0"},"2832":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x1bd2f0"},"2831":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x1ac700"},"2830":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x1707b0"},"2829":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x159bf0"},"2828":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0:0x14ba40"},"2827":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x41cc8"},"2826":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x401dd"},"2825":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x3fbce"},"2824":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x3f1ce"},"2823":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x3759c"},"2822":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x37027"},"2821":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x36d17"},"2820":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x36329"},"2819":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x35f07"},"2818":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.constprop.0.cold:0x35ce0"},"2817":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.cold:0x40ef3"},"2816":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.cold:0x40bdd"},"2815":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.cold:0x3d866"},"2814":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.cold:0x37c83"},"2813":{"probe_name":"mpi-rest","function_name":"MPIDIG_isend_impl.cold:0x3796d"},"2812":{"probe_name":"mpi-rest","function_name":"MPIDIG_init_comm"},"2811":{"probe_name":"mpi-rest","function_name":"MPIDIG_handle_unexpected.cold"},"2810":{"probe_name":"mpi-rest","function_name":"MPIDIG_handle_unexpected"},"2809":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_target_msg_cb"},"2808":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_origin_cb"},"2807":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_context_index"},"2806":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_ack_target_msg_cb"},"2805":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_ack_origin_cb.cold"},"2804":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_ack_origin_cb"},"2803":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_target_msg_cb"},"2802":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_origin_cb"},"2801":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_dt_target_msg_cb"},"2800":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_dt_origin_cb.cold"},"2799":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_dt_origin_cb"},"2798":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_dt_ack_target_msg_cb"},"2797":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_data_target_msg_cb"},"2796":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_data_origin_cb.cold"},"2795":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_data_origin_cb"},"2794":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_ack_target_msg_cb"},"2793":{"probe_name":"mpi-rest","function_name":"MPIDIG_get_acc_ack_origin_cb"},"2792":{"probe_name":"mpi-rest","function_name":"MPIDIG_generate_win_id"},"2791":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x6cba00"},"2790":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x6a42d0"},"2789":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x696740"},"2788":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x67bb30"},"2787":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x63f800"},"2786":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x6276c0"},"2785":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x605620"},"2784":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x5da4e0"},"2783":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x572790"},"2782":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x550f70"},"2781":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x539270"},"2780":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x527f00"},"2779":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x5168e0"},"2778":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x5002f0"},"2777":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x4c0880"},"2776":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x49ca10"},"2775":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x484c20"},"2774":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x467ee0"},"2773":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x4248d0"},"2772":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x37f2c0"},"2771":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x370030"},"2770":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x35f960"},"2769":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x350990"},"2768":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x341df0"},"2767":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x32f510"},"2766":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x3207d0"},"2765":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x310a60"},"2764":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x3012b0"},"2763":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x2f1b50"},"2762":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x2e2330"},"2761":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x2d2be0"},"2760":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x2c07e0"},"2759":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x2aca60"},"2758":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x29f180"},"2757":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x282990"},"2756":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x271b30"},"2755":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x264d40"},"2754":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x24a650"},"2753":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x23a760"},"2752":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x226b30"},"2751":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x210990"},"2750":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x1f9fd0"},"2749":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x1e0200"},"2748":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x1c3320"},"2747":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x19bcb0"},"2746":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x186e00"},"2745":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x1767e0"},"2744":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x15fc20"},"2743":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x13d150"},"2742":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put:0x128bd0"},"2741":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x41e49"},"2740":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x4196f"},"2739":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x4183d"},"2738":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x4163f"},"2737":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x41074"},"2736":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x40d5e"},"2735":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x40919"},"2734":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x4035e"},"2733":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3fd4f"},"2732":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3fa03"},"2731":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3f76c"},"2730":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3f54d"},"2729":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3f34f"},"2728":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3efa9"},"2727":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3e3ca"},"2726":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3de63"},"2725":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3dbf8"},"2724":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3d9e7"},"2723":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3d4ee"},"2722":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3b30e"},"2721":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3b0ef"},"2720":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3aebb"},"2719":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3ac87"},"2718":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3aa68"},"2717":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3a819"},"2716":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3a61b"},"2715":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3a3fc"},"2714":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x3a1c8"},"2713":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x39f73"},"2712":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x39d3f"},"2711":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x39b0b"},"2710":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x398b6"},"2709":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x395d7"},"2708":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x393c1"},"2707":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x38f06"},"2706":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x38c27"},"2705":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x38a0e"},"2704":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x38600"},"2703":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x38393"},"2702":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x38038"},"2701":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x37e04"},"2700":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x37aee"},"2699":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x376ab"},"2698":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x37136"},"2697":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x36a59"},"2696":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x366bc"},"2695":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x36438"},"2694":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x36016"},"2693":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x35ad0"},"2692":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_put.cold:0x35733"},"2691":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x6c5e60"},"2690":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x639a10"},"2689":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x6218d0"},"2688":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x5d4000"},"2687":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x56c160"},"2686":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x510530"},"2685":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x486060"},"2684":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x461b20"},"2683":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x20aba0"},"2682":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x1f41e0"},"2681":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x1a0770"},"2680":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0:0x1414a0"},"2679":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x41d0a"},"2678":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x40f35"},"2677":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x40c1f"},"2676":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x4021f"},"2675":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x3fc10"},"2674":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x3f210"},"2673":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x3d8a8"},"2672":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x37cc5"},"2671":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x379af"},"2670":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x36adf"},"2669":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_irecv.constprop.0.cold:0x35b56"},"2668":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x6ca440"},"2667":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x6a76e0"},"2666":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x695190"},"2665":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x67a580"},"2664":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x63e250"},"2663":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x626110"},"2662":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x604160"},"2661":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x5d8f30"},"2660":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x5711e0"},"2659":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x54f9d0"},"2658":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x537cd0"},"2657":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x526950"},"2656":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x515330"},"2655":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x4fed50"},"2654":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x4bf2d0"},"2653":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x49b460"},"2652":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x483610"},"2651":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x466920"},"2650":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x423320"},"2649":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x37dd10"},"2648":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x36ea70"},"2647":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x35e3a0"},"2646":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x34f3e0"},"2645":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x340840"},"2644":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x32df50"},"2643":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x31f210"},"2642":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x30f4b0"},"2641":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2ffd00"},"2640":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2f05a0"},"2639":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2e0d80"},"2638":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2d1630"},"2637":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2bf220"},"2636":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x29dbd0"},"2635":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2813e0"},"2634":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x263790"},"2633":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2490a0"},"2632":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x2391b0"},"2631":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x225580"},"2630":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x20f3e0"},"2629":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x1f8a20"},"2628":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x1dec40"},"2627":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x1c1d60"},"2626":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x19a7f0"},"2625":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x185840"},"2624":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x175220"},"2623":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x15e660"},"2622":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x13bc90"},"2621":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate:0x127610"},"2620":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x41df8"},"2619":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x41a3e"},"2618":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x417ec"},"2617":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x415ee"},"2616":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x41023"},"2615":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x40d0d"},"2614":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x408c8"},"2613":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x4030d"},"2612":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3fcfe"},"2611":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3f9b2"},"2610":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3f71b"},"2609":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3f4fc"},"2608":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3f2fe"},"2607":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3ef58"},"2606":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3e379"},"2605":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3de12"},"2604":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3dba7"},"2603":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3d996"},"2602":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3d49d"},"2601":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3b2bd"},"2600":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3b09e"},"2599":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3ae6a"},"2598":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3ac36"},"2597":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3aa17"},"2596":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3a7c8"},"2595":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3a5ca"},"2594":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3a3ab"},"2593":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3a177"},"2592":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x39f22"},"2591":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x39cee"},"2590":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x39aba"},"2589":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x39865"},"2588":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x39370"},"2587":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x38eb5"},"2586":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x389bd"},"2585":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x385af"},"2584":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x38342"},"2583":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x37fe7"},"2582":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x37db3"},"2581":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x37a9d"},"2580":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3765a"},"2579":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x370e5"},"2578":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x36a08"},"2577":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x3666b"},"2576":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x363e7"},"2575":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x35fc5"},"2574":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x35a7f"},"2573":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get_accumulate.cold:0x356e2"},"2572":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x6c95f0"},"2571":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x6a5600"},"2570":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x694340"},"2569":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x679730"},"2568":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x63d400"},"2567":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x6252c0"},"2566":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x603360"},"2565":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x5d80e0"},"2564":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x570390"},"2563":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x54eb90"},"2562":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x536e90"},"2561":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x525b00"},"2560":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x5144e0"},"2559":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x4fdf10"},"2558":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x4be490"},"2557":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x49a620"},"2556":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x4826d0"},"2555":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x465ad0"},"2554":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x4224d0"},"2553":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x37ced0"},"2552":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x36dc20"},"2551":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x35d550"},"2550":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x34e5a0"},"2549":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x33fa00"},"2548":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x32d100"},"2547":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x31e3c0"},"2546":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x30e670"},"2545":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x2feec0"},"2544":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x2ef760"},"2543":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x2dff40"},"2542":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x2d07f0"},"2541":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x2be3d0"},"2540":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x29cd90"},"2539":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x28ea20"},"2538":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x2805a0"},"2537":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x262950"},"2536":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x254660"},"2535":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x248260"},"2534":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x238370"},"2533":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x224740"},"2532":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x20e590"},"2531":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x1f7bd0"},"2530":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x1dddf0"},"2529":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x1c0f10"},"2528":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x1999f0"},"2527":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x1849f0"},"2526":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x1743d0"},"2525":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x15d810"},"2524":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x13ae90"},"2523":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get:0x1267c0"},"2522":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x41dc6"},"2521":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x419c2"},"2520":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x417ba"},"2519":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x415bc"},"2518":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x40ff1"},"2517":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x40cdb"},"2516":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x40896"},"2515":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x402db"},"2514":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3fccc"},"2513":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3f980"},"2512":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3f6e9"},"2511":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3f4ca"},"2510":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3f2cc"},"2509":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3ef26"},"2508":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3e347"},"2507":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3dde0"},"2506":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3db75"},"2505":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3d964"},"2504":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3d46b"},"2503":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3b28b"},"2502":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3b06c"},"2501":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3ae38"},"2500":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3ac04"},"2499":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3a9e5"},"2498":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3a796"},"2497":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3a598"},"2496":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3a379"},"2495":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3a145"},"2494":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x39ef0"},"2493":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x39cbc"},"2492":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x39a88"},"2491":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x39833"},"2490":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3933e"},"2489":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x39103"},"2488":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x38e83"},"2487":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3898b"},"2486":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x38750"},"2485":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x3857d"},"2484":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x38310"},"2483":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x37fb5"},"2482":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x37d81"},"2481":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x37a6b"},"2480":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x37628"},"2479":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x370b3"},"2478":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x369d6"},"2477":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x36639"},"2476":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x363b5"},"2475":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x35f93"},"2474":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x35a4d"},"2473":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_get.cold:0x356b0"},"2472":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_cts"},"2471":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x6c8350"},"2470":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x6a6440"},"2469":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x6930a0"},"2468":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x678490"},"2467":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x63c160"},"2466":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x624020"},"2465":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x6020b0"},"2464":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x5d6e40"},"2463":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x56f0f0"},"2462":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x54d8f0"},"2461":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x535bf0"},"2460":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x524860"},"2459":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x513240"},"2458":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x4fcc70"},"2457":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x4bd1f0"},"2456":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x499380"},"2455":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x481340"},"2454":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x464830"},"2453":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x421230"},"2452":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x37bc30"},"2451":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x36c980"},"2450":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x35c2b0"},"2449":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x34d300"},"2448":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x33e760"},"2447":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x32be60"},"2446":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x31d120"},"2445":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x30d3d0"},"2444":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2fdc20"},"2443":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2ee4c0"},"2442":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2deca0"},"2441":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2cf550"},"2440":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2bd130"},"2439":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x29baf0"},"2438":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x27f300"},"2437":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2616b0"},"2436":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x246fc0"},"2435":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2370d0"},"2434":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x2234a0"},"2433":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x20d2f0"},"2432":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x1f6930"},"2431":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x1dcb50"},"2430":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x1bfc70"},"2429":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x198730"},"2428":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x183750"},"2427":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x173130"},"2426":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x15c570"},"2425":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x139bd0"},"2424":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate:0x125520"},"2423":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x41d7c"},"2422":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x419f4"},"2421":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x41770"},"2420":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x41572"},"2419":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x40fa7"},"2418":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x40c91"},"2417":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x4084c"},"2416":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x40291"},"2415":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3fc82"},"2414":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3f936"},"2413":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3f69f"},"2412":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3f480"},"2411":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3f282"},"2410":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3eedc"},"2409":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3e2fd"},"2408":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3dd96"},"2407":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3db2b"},"2406":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3d91a"},"2405":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3d421"},"2404":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3b241"},"2403":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3b022"},"2402":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3adee"},"2401":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3abba"},"2400":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3a99b"},"2399":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3a74c"},"2398":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3a54e"},"2397":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3a32f"},"2396":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3a0fb"},"2395":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x39ea6"},"2394":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x39c72"},"2393":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x39a3e"},"2392":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x397e9"},"2391":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x392f4"},"2390":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x38e39"},"2389":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x38941"},"2388":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x38533"},"2387":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x382c6"},"2386":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x37f6b"},"2385":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x37d37"},"2384":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x37a21"},"2383":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x375de"},"2382":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x37069"},"2381":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3698c"},"2380":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x365ef"},"2379":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x3636b"},"2378":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x35f49"},"2377":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x35a03"},"2376":{"probe_name":"mpi-rest","function_name":"MPIDIG_do_accumulate.cold:0x35666"},"2375":{"probe_name":"mpi-rest","function_name":"MPIDIG_destroy_comm"},"2374":{"probe_name":"mpi-rest","function_name":"MPIDIG_cswap_target_msg_cb"},"2373":{"probe_name":"mpi-rest","function_name":"MPIDIG_cswap_origin_cb"},"2372":{"probe_name":"mpi-rest","function_name":"MPIDIG_cswap_ack_target_msg_cb"},"2371":{"probe_name":"mpi-rest","function_name":"MPIDIG_cswap_ack_origin_cb"},"2370":{"probe_name":"mpi-rest","function_name":"MPIDIG_compute_acc_op.constprop.0.cold"},"2369":{"probe_name":"mpi-rest","function_name":"MPIDIG_compute_acc_op.constprop.0"},"2368":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_send_async_init.isra.0:0x111fd0"},"2367":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_send_async_init.isra.0:0x10cc10"},"2366":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_send_async_init.isra.0:0x107990"},"2365":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_send_async_init.isra.0.cold:0x35332"},"2364":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_send_async_init.isra.0.cold:0x352c0"},"2363":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_send_async_init.isra.0.cold:0x3524e"},"2362":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_rndv_reg_cb"},"2361":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_reg_cb_dynamic"},"2360":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_reg_cb"},"2356":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_comm_abort"},"2355":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_check_init"},"2354":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_target_msg_cb"},"2353":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_origin_cb"},"2352":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_dt_target_msg_cb"},"2351":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_dt_origin_cb.cold"},"2350":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_dt_origin_cb"},"2349":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_dt_ack_target_msg_cb"},"2348":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_data_target_msg_cb"},"2347":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_data_origin_cb.cold"},"2346":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_data_origin_cb"},"2345":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_ack_target_msg_cb"},"2344":{"probe_name":"mpi-rest","function_name":"MPIDIG_acc_ack_origin_cb"},"2343":{"probe_name":"mpi-rest","function_name":"MPIDIG_RMA_Init_targetcb_pvars"},"2342":{"probe_name":"mpi-rest","function_name":"MPIDIG_RMA_Init_sync_pvars"},"2341":{"probe_name":"mpi-rest","function_name":"MPIC_Waitall"},"2340":{"probe_name":"mpi-rest","function_name":"MPIC_Wait"},"2339":{"probe_name":"mpi-rest","function_name":"MPIC_Ssend"},"2338":{"probe_name":"mpi-rest","function_name":"MPIC_Sendrecv_replace"},"2337":{"probe_name":"mpi-rest","function_name":"MPIC_Sendrecv"},"2336":{"probe_name":"mpi-rest","function_name":"MPIC_Send"},"2335":{"probe_name":"mpi-rest","function_name":"MPIC_Recv"},"2334":{"probe_name":"mpi-rest","function_name":"MPIC_Probe.cold"},"2333":{"probe_name":"mpi-rest","function_name":"MPIC_Probe"},"2332":{"probe_name":"mpi-rest","function_name":"MPIC_Issend"},"2331":{"probe_name":"mpi-rest","function_name":"MPIC_Isend"},"2330":{"probe_name":"mpi-rest","function_name":"MPIC_Irecv"},"2329":{"probe_name":"mpi-rest","function_name":"LOOKUP_CVAR_BY_NAME.cold"},"2328":{"probe_name":"mpi-rest","function_name":"LOOKUP_CVAR_BY_NAME"},"2327":{"probe_name":"mpi-rest","function_name":"Init_shm_barrier"},"2326":{"probe_name":"mpi-rest","function_name":"FindSpecificMsgIndex"},"2325":{"probe_name":"mpi-rest","function_name":"Exch_data_amounts"},"2324":{"probe_name":"mpi-rest","function_name":"DebugqFreePool"},"2323":{"probe_name":"mpi-rest","function_name":"ADIO_Type_create_subarray"},"2322":{"probe_name":"mpi-rest","function_name":"ADIO_Type_create_darray"},"2321":{"probe_name":"mpi-rest","function_name":"ADIO_Set_view"},"2320":{"probe_name":"mpi-rest","function_name":"ADIO_Set_shared_fp"},"2319":{"probe_name":"mpi-rest","function_name":"ADIO_ResolveFileType"},"2318":{"probe_name":"mpi-rest","function_name":"ADIO_Open"},"2317":{"probe_name":"mpi-rest","function_name":"ADIO_Init"},"2316":{"probe_name":"mpi-rest","function_name":"ADIO_ImmediateOpen"},"2315":{"probe_name":"mpi-rest","function_name":"ADIO_Get_shared_fp"},"2314":{"probe_name":"mpi-rest","function_name":"ADIO_FileSysType_prefix"},"2313":{"probe_name":"mpi-rest","function_name":"ADIO_FileSysType_parentdir"},"2312":{"probe_name":"mpi-rest","function_name":"ADIO_FileSysType_fncall_scalable"},"2311":{"probe_name":"mpi-rest","function_name":"ADIO_FileSysType_fncall"},"2310":{"probe_name":"mpi-rest","function_name":"ADIO_End"},"2309":{"probe_name":"mpi-rest","function_name":"ADIO_Close"},"2308":{"probe_name":"mpi-rest","function_name":"ADIOI_process_system_hints"},"2307":{"probe_name":"mpi-rest","function_name":"ADIOI_no_requests:0x77ab98"},"2306":{"probe_name":"mpi-rest","function_name":"ADIOI_no_requests:0x771287"},"2305":{"probe_name":"mpi-rest","function_name":"ADIOI_init_view_state"},"2304":{"probe_name":"mpi-rest","function_name":"ADIOI_incorporate_system_hints"},"2303":{"probe_name":"mpi-rest","function_name":"ADIOI_compute_offsets"},"2302":{"probe_name":"mpi-rest","function_name":"ADIOI_cb_gather_name_array"},"2301":{"probe_name":"mpi-rest","function_name":"ADIOI_cb_delete_name_array"},"2300":{"probe_name":"mpi-rest","function_name":"ADIOI_cb_copy_name_array"},"2299":{"probe_name":"mpi-rest","function_name":"ADIOI_cb_config_list_parse"},"2298":{"probe_name":"mpi-rest","function_name":"ADIOI_cb_bcast_rank_map"},"2297":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Iexchange_data_wait"},"2296":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Iexchange_data_send"},"2295":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Iexchange_data_hole"},"2294":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Iexchange_data_fini"},"2293":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Iexchange_data"},"2292":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Exchange_data_alltoallv"},"2291":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Exchange_data:0x7b9ad9"},"2290":{"probe_name":"mpi-rest","function_name":"ADIOI_W_Exchange_data:0x74c0d0"},"2289":{"probe_name":"mpi-rest","function_name":"ADIOI_Verify_fr"},"2288":{"probe_name":"mpi-rest","function_name":"ADIOI_UFS_Open"},"2287":{"probe_name":"mpi-rest","function_name":"ADIOI_Type_ispredef"},"2286":{"probe_name":"mpi-rest","function_name":"ADIOI_Type_get_combiner"},"2285":{"probe_name":"mpi-rest","function_name":"ADIOI_Type_dispose"},"2284":{"probe_name":"mpi-rest","function_name":"ADIOI_Type_create_hindexed_x"},"2283":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_WriteStridedColl"},"2282":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_WriteStrided"},"2281":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_WriteDone"},"2280":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_WriteContig"},"2279":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_WriteComplete"},"2278":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_SetInfo"},"2277":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_SeekIndividual"},"2276":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_Resize"},"2275":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_ReadStridedColl"},"2274":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_ReadStrided"},"2273":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_ReadDone"},"2272":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_ReadContig"},"2271":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_ReadComplete"},"2270":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_Open"},"2269":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_IwriteStrided"},"2268":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_IwriteContig"},"2267":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_IreadStrided"},"2266":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_IreadContig"},"2265":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_Flush"},"2264":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_Fcntl"},"2263":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_Delete"},"2262":{"probe_name":"mpi-rest","function_name":"ADIOI_TESTFS_Close"},"2261":{"probe_name":"mpi-rest","function_name":"ADIOI_Strncpy"},"2260":{"probe_name":"mpi-rest","function_name":"ADIOI_Strdup"},"2259":{"probe_name":"mpi-rest","function_name":"ADIOI_Shfp_fname"},"2258":{"probe_name":"mpi-rest","function_name":"ADIOI_SCALEABLE_OpenColl"},"2257":{"probe_name":"mpi-rest","function_name":"ADIOI_Realloc_fn"},"2256":{"probe_name":"mpi-rest","function_name":"ADIOI_Read_and_exch:0x7b0676"},"2255":{"probe_name":"mpi-rest","function_name":"ADIOI_Read_and_exch:0x746ad2"},"2254":{"probe_name":"mpi-rest","function_name":"ADIOI_R_Iexchange_data_recv"},"2253":{"probe_name":"mpi-rest","function_name":"ADIOI_R_Iexchange_data_fini"},"2252":{"probe_name":"mpi-rest","function_name":"ADIOI_R_Iexchange_data_fill"},"2251":{"probe_name":"mpi-rest","function_name":"ADIOI_R_Iexchange_data"},"2250":{"probe_name":"mpi-rest","function_name":"ADIOI_R_Exchange_data_alltoallv"},"2249":{"probe_name":"mpi-rest","function_name":"ADIOI_R_Exchange_data:0x7b1751"},"2248":{"probe_name":"mpi-rest","function_name":"ADIOI_R_Exchange_data:0x747b00"},"2247":{"probe_name":"mpi-rest","function_name":"ADIOI_Print_flatlist_node"},"2246":{"probe_name":"mpi-rest","function_name":"ADIOI_P2PContigWriteAggregation"},"2245":{"probe_name":"mpi-rest","function_name":"ADIOI_P2PContigReadAggregation"},"2244":{"probe_name":"mpi-rest","function_name":"ADIOI_OneSidedWriteAggregation"},"2243":{"probe_name":"mpi-rest","function_name":"ADIOI_OneSidedSetup"},"2242":{"probe_name":"mpi-rest","function_name":"ADIOI_OneSidedReadAggregation"},"2241":{"probe_name":"mpi-rest","function_name":"ADIOI_OneSidedCleanup"},"2240":{"probe_name":"mpi-rest","function_name":"ADIOI_NOLOCK_WriteStrided"},"2239":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_aio"},"2238":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_WriteStrided"},"2237":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_WriteDone"},"2236":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_WriteContig"},"2235":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_WriteComplete"},"2234":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_Set_shared_fp"},"2233":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_SetInfo"},"2232":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_Resize"},"2231":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_ReadStrided"},"2230":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_ReadDone"},"2229":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_ReadContig"},"2228":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_ReadComplete"},"2227":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_Open"},"2226":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_IwriteContig"},"2225":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_IreadContig"},"2224":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_Get_shared_fp"},"2223":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_Feature"},"2222":{"probe_name":"mpi-rest","function_name":"ADIOI_NFS_Fcntl"},"2221":{"probe_name":"mpi-rest","function_name":"ADIOI_Malloc_fn"},"2220":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_request_only_lock_ioctl"},"2219":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_lock_ahead_ioctl"},"2218":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_clear_locks"},"2217":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_WriteStridedColl"},"2216":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_WriteStrided"},"2215":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_WriteContig"},"2214":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_W_Exchange_data"},"2213":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_SetInfo"},"2212":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_ReadContig"},"2211":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Open"},"2210":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_IterateOneSided"},"2209":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_IOContig"},"2208":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Get_striping_info"},"2207":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Free_my_req"},"2206":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Fill_send_buffer"},"2205":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Exch_and_write"},"2204":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Docollect"},"2203":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Directio"},"2202":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Calc_my_req"},"2201":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Calc_aggregator"},"2200":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Aligned_Mem_File_Write"},"2199":{"probe_name":"mpi-rest","function_name":"ADIOI_LUSTRE_Aligned_Mem_File_Read"},"2198":{"probe_name":"mpi-rest","function_name":"ADIOI_Iread_and_exch_reset"},"2197":{"probe_name":"mpi-rest","function_name":"ADIOI_Iread_and_exch_l2_end"},"2196":{"probe_name":"mpi-rest","function_name":"ADIOI_Iread_and_exch_l2_begin"},"2195":{"probe_name":"mpi-rest","function_name":"ADIOI_Iread_and_exch_l1_end"},"2194":{"probe_name":"mpi-rest","function_name":"ADIOI_Iread_and_exch_l1_begin"},"2193":{"probe_name":"mpi-rest","function_name":"ADIOI_Iread_and_exch_fini"},"2192":{"probe_name":"mpi-rest","function_name":"ADIOI_Iread_and_exch"},"2191":{"probe_name":"mpi-rest","function_name":"ADIOI_Info_print_keyvals"},"2190":{"probe_name":"mpi-rest","function_name":"ADIOI_Info_check_and_install_true"},"2189":{"probe_name":"mpi-rest","function_name":"ADIOI_Info_check_and_install_str"},"2188":{"probe_name":"mpi-rest","function_name":"ADIOI_Info_check_and_install_int"},"2187":{"probe_name":"mpi-rest","function_name":"ADIOI_Info_check_and_install_enabled"},"2186":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write_reset"},"2185":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write_l2_end"},"2184":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write_l2_begin"},"2183":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write_l1_end"},"2182":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write_l1_body"},"2181":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write_l1_begin"},"2180":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write_fini"},"2179":{"probe_name":"mpi-rest","function_name":"ADIOI_Iexch_and_write"},"2178":{"probe_name":"mpi-rest","function_name":"ADIOI_Icalc_others_req_main"},"2177":{"probe_name":"mpi-rest","function_name":"ADIOI_Icalc_others_req_fini"},"2176":{"probe_name":"mpi-rest","function_name":"ADIOI_Icalc_others_req"},"2175":{"probe_name":"mpi-rest","function_name":"ADIOI_IO_Thread_Func"},"2174":{"probe_name":"mpi-rest","function_name":"ADIOI_IOStridedColl"},"2173":{"probe_name":"mpi-rest","function_name":"ADIOI_IOFiletype"},"2172":{"probe_name":"mpi-rest","function_name":"ADIOI_Heap_merge"},"2171":{"probe_name":"mpi-rest","function_name":"ADIOI_Heap_insert"},"2170":{"probe_name":"mpi-rest","function_name":"ADIOI_Heap_free"},"2169":{"probe_name":"mpi-rest","function_name":"ADIOI_Heap_extract_min"},"2168":{"probe_name":"mpi-rest","function_name":"ADIOI_Heap_create"},"2167":{"probe_name":"mpi-rest","function_name":"ADIOI_Get_position"},"2166":{"probe_name":"mpi-rest","function_name":"ADIOI_Get_eof_offset"},"2165":{"probe_name":"mpi-rest","function_name":"ADIOI_Get_byte_offset"},"2164":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_WriteStridedColl"},"2163":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_SetInfo"},"2162":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_ReadStridedColl"},"2161":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Open"},"2160":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Free_others_req"},"2159":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Free_my_req"},"2158":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Flush"},"2157":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Close"},"2156":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Calc_others_req"},"2155":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Calc_my_req"},"2154":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Calc_file_domains"},"2153":{"probe_name":"mpi-rest","function_name":"ADIOI_GPFS_Calc_aggregator"},"2152":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_iwc_wait_fn"},"2151":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_iwc_query_fn"},"2150":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_iwc_poll_fn"},"2149":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_iwc_free_fn"},"2148":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_irc_wait_fn"},"2147":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_irc_query_fn"},"2146":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_irc_poll_fn"},"2145":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_irc_free_fn"},"2144":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_flock_type_to_string"},"2143":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_flock_cmd_to_string"},"2142":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_aio_wait_fn"},"2141":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_aio_query_fn"},"2140":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_aio_poll_fn"},"2139":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_aio_free_fn"},"2138":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_aio"},"2137":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_WriteStrided_naive"},"2136":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_WriteStridedColl"},"2135":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_WriteStrided"},"2134":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_WriteContig"},"2133":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_SetLock64"},"2132":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_SetLock"},"2131":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_SetInfo"},"2130":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_SeekIndividual"},"2129":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_Resize"},"2128":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_ReadStrided_naive"},"2127":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_ReadStridedColl"},"2126":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_ReadStrided"},"2125":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_ReadContig"},"2124":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_Prealloc"},"2123":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_OpenColl"},"2122":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStridedColl_inter"},"2121":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStridedColl_indio"},"2120":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStridedColl_free"},"2119":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStridedColl_fini"},"2118":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStridedColl_exch"},"2117":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStridedColl_bcast"},"2116":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStridedColl"},"2115":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteStrided"},"2114":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IwriteContig"},"2113":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadStridedColl_read"},"2112":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadStridedColl_inter"},"2111":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadStridedColl_indio"},"2110":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadStridedColl_free"},"2109":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadStridedColl_fini"},"2108":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadStridedColl"},"2107":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadStrided"},"2106":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IreadContig"},"1537":{"probe_name":"mpi-api","function_name":"PMPI_Op_create"},"1536":{"probe_name":"mpi-api","function_name":"PMPI_Op_commutative"},"1535":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw_init_c.cold"},"1534":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw_init_c"},"1533":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw_init.cold"},"1532":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw_init"},"1531":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw_c.cold"},"1530":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw_c"},"1529":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw.cold"},"1528":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallw"},"1527":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv_init_c.cold"},"1526":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv_init_c"},"1525":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv_init.cold"},"1524":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv_init"},"1523":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv_c.cold"},"1522":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv_c"},"1521":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv.cold"},"1520":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoallv"},"1519":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall_init_c.cold"},"1518":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall_init_c"},"1517":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall_init.cold"},"1516":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall_init"},"1515":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall_c.cold"},"1514":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall_c"},"1513":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall.cold"},"1512":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_alltoall"},"1511":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv_init_c.cold"},"1510":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv_init_c"},"1509":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv_init.cold"},"1508":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv_init"},"1507":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv_c.cold"},"1506":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv_c"},"1505":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv.cold"},"1504":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgatherv"},"1503":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather_init_c.cold"},"1502":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather_init_c"},"1501":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather_init.cold"},"1500":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather_init"},"1499":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather_c.cold"},"1498":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather_c"},"1497":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather.cold"},"1496":{"probe_name":"mpi-api","function_name":"PMPI_Neighbor_allgather"},"1495":{"probe_name":"mpi-api","function_name":"PMPI_Mrecv_c.cold"},"1494":{"probe_name":"mpi-api","function_name":"PMPI_Mrecv_c"},"1493":{"probe_name":"mpi-api","function_name":"PMPI_Mrecv.cold"},"1492":{"probe_name":"mpi-api","function_name":"PMPI_Mrecv"},"1491":{"probe_name":"mpi-api","function_name":"PMPI_Mprobe"},"1490":{"probe_name":"mpi-api","function_name":"PMPI_Lookup_name"},"1489":{"probe_name":"mpi-api","function_name":"PMPI_Keyval_free"},"1488":{"probe_name":"mpi-api","function_name":"PMPI_Keyval_create"},"1487":{"probe_name":"mpi-api","function_name":"PMPI_Issend_c.cold"},"1486":{"probe_name":"mpi-api","function_name":"PMPI_Issend_c"},"1485":{"probe_name":"mpi-api","function_name":"PMPI_Issend.cold"},"1484":{"probe_name":"mpi-api","function_name":"PMPI_Issend"},"1483":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv_replace_c.cold"},"1482":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv_replace_c"},"1481":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv_replace.cold"},"1480":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv_replace"},"1479":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv_c.cold"},"1478":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv_c"},"1477":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv.cold"},"1476":{"probe_name":"mpi-api","function_name":"PMPI_Isendrecv"},"1475":{"probe_name":"mpi-api","function_name":"PMPI_Isend_c.cold"},"1474":{"probe_name":"mpi-api","function_name":"PMPI_Isend_c"},"1473":{"probe_name":"mpi-api","function_name":"PMPI_Isend.cold"},"1472":{"probe_name":"mpi-api","function_name":"PMPI_Isend"},"1471":{"probe_name":"mpi-api","function_name":"PMPI_Iscatterv_c.cold"},"1470":{"probe_name":"mpi-api","function_name":"PMPI_Iscatterv_c"},"1469":{"probe_name":"mpi-api","function_name":"PMPI_Iscatterv.cold"},"1468":{"probe_name":"mpi-api","function_name":"PMPI_Iscatterv"},"1467":{"probe_name":"mpi-api","function_name":"PMPI_Iscatter_c.cold"},"1466":{"probe_name":"mpi-api","function_name":"PMPI_Iscatter_c"},"1465":{"probe_name":"mpi-api","function_name":"PMPI_Iscatter.cold"},"1464":{"probe_name":"mpi-api","function_name":"PMPI_Iscatter"},"1463":{"probe_name":"mpi-api","function_name":"PMPI_Iscan_c.cold"},"1462":{"probe_name":"mpi-api","function_name":"PMPI_Iscan_c"},"1461":{"probe_name":"mpi-api","function_name":"PMPI_Iscan.cold"},"1460":{"probe_name":"mpi-api","function_name":"PMPI_Iscan"},"1459":{"probe_name":"mpi-api","function_name":"PMPI_Is_thread_main"},"1458":{"probe_name":"mpi-api","function_name":"PMPI_Irsend_c.cold"},"1457":{"probe_name":"mpi-api","function_name":"PMPI_Irsend_c"},"1456":{"probe_name":"mpi-api","function_name":"PMPI_Irsend.cold"},"1455":{"probe_name":"mpi-api","function_name":"PMPI_Irsend"},"1454":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter_c.cold"},"1453":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter_c"},"1452":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter_block_c.cold"},"1451":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter_block_c"},"1450":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter_block.cold"},"1449":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter_block"},"1448":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter.cold"},"1447":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_scatter"},"1446":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_c.cold"},"1445":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce_c"},"1444":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce.cold"},"1443":{"probe_name":"mpi-api","function_name":"PMPI_Ireduce"},"1442":{"probe_name":"mpi-api","function_name":"PMPI_Irecv_c.cold"},"1441":{"probe_name":"mpi-api","function_name":"PMPI_Irecv_c"},"1440":{"probe_name":"mpi-api","function_name":"PMPI_Irecv.cold"},"1439":{"probe_name":"mpi-api","function_name":"PMPI_Irecv"},"1438":{"probe_name":"mpi-api","function_name":"PMPI_Iprobe"},"1437":{"probe_name":"mpi-api","function_name":"PMPI_Intercomm_merge.cold"},"1436":{"probe_name":"mpi-api","function_name":"PMPI_Intercomm_merge"},"1435":{"probe_name":"mpi-api","function_name":"PMPI_Intercomm_create_from_groups"},"1434":{"probe_name":"mpi-api","function_name":"PMPI_Intercomm_create.cold"},"1433":{"probe_name":"mpi-api","function_name":"PMPI_Intercomm_create"},"1432":{"probe_name":"mpi-api","function_name":"PMPI_Initialized"},"1431":{"probe_name":"mpi-api","function_name":"PMPI_Init_thread"},"1430":{"probe_name":"mpi-api","function_name":"PMPI_Init"},"1429":{"probe_name":"mpi-api","function_name":"PMPI_Info_set"},"1428":{"probe_name":"mpi-api","function_name":"PMPI_Info_get_valuelen"},"1427":{"probe_name":"mpi-api","function_name":"PMPI_Info_get_string"},"1426":{"probe_name":"mpi-api","function_name":"PMPI_Info_get_nthkey"},"1425":{"probe_name":"mpi-api","function_name":"PMPI_Info_get_nkeys"},"1424":{"probe_name":"mpi-api","function_name":"PMPI_Info_get"},"1423":{"probe_name":"mpi-api","function_name":"PMPI_Info_free"},"1422":{"probe_name":"mpi-api","function_name":"PMPI_Info_dup"},"1421":{"probe_name":"mpi-api","function_name":"PMPI_Info_delete"},"1420":{"probe_name":"mpi-api","function_name":"PMPI_Info_create_env"},"1419":{"probe_name":"mpi-api","function_name":"PMPI_Info_create"},"1418":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallw_c.cold"},"1417":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallw_c"},"1416":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallw.cold"},"1415":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallw"},"1414":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallv_c.cold"},"1413":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallv_c"},"1412":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallv.cold"},"1411":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoallv"},"1410":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoall_c.cold"},"1409":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoall_c"},"1408":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoall.cold"},"1407":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_alltoall"},"1406":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgatherv_c.cold"},"1405":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgatherv_c"},"1404":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgatherv.cold"},"1403":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgatherv"},"1402":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgather_c.cold"},"1401":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgather_c"},"1400":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgather.cold"},"1399":{"probe_name":"mpi-api","function_name":"PMPI_Ineighbor_allgather"},"1398":{"probe_name":"mpi-api","function_name":"PMPI_Imrecv_c.cold"},"1397":{"probe_name":"mpi-api","function_name":"PMPI_Imrecv_c"},"1396":{"probe_name":"mpi-api","function_name":"PMPI_Imrecv.cold"},"1395":{"probe_name":"mpi-api","function_name":"PMPI_Imrecv"},"1394":{"probe_name":"mpi-api","function_name":"PMPI_Improbe"},"1393":{"probe_name":"mpi-api","function_name":"PMPI_Igatherv_c.cold"},"1392":{"probe_name":"mpi-api","function_name":"PMPI_Igatherv_c"},"1391":{"probe_name":"mpi-api","function_name":"PMPI_Igatherv.cold"},"1390":{"probe_name":"mpi-api","function_name":"PMPI_Igatherv"},"1389":{"probe_name":"mpi-api","function_name":"PMPI_Igather_c.cold"},"1388":{"probe_name":"mpi-api","function_name":"PMPI_Igather_c"},"1387":{"probe_name":"mpi-api","function_name":"PMPI_Igather.cold"},"1386":{"probe_name":"mpi-api","function_name":"PMPI_Igather"},"1385":{"probe_name":"mpi-api","function_name":"PMPI_Iexscan_c.cold"},"1384":{"probe_name":"mpi-api","function_name":"PMPI_Iexscan_c"},"1383":{"probe_name":"mpi-api","function_name":"PMPI_Iexscan.cold"},"1382":{"probe_name":"mpi-api","function_name":"PMPI_Iexscan"},"1381":{"probe_name":"mpi-api","function_name":"PMPI_Ibsend_c.cold"},"1380":{"probe_name":"mpi-api","function_name":"PMPI_Ibsend_c"},"1379":{"probe_name":"mpi-api","function_name":"PMPI_Ibsend.cold"},"1378":{"probe_name":"mpi-api","function_name":"PMPI_Ibsend"},"1377":{"probe_name":"mpi-api","function_name":"PMPI_Ibcast_c.cold"},"1376":{"probe_name":"mpi-api","function_name":"PMPI_Ibcast_c"},"1375":{"probe_name":"mpi-api","function_name":"PMPI_Ibcast.cold"},"1374":{"probe_name":"mpi-api","function_name":"PMPI_Ibcast"},"1373":{"probe_name":"mpi-api","function_name":"PMPI_Ibarrier"},"1372":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallw_c.cold"},"1371":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallw_c"},"1370":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallw.cold"},"1369":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallw"},"1368":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallv_c.cold"},"1367":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallv_c"},"1366":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallv.cold"},"1365":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoallv"},"1364":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoall_c.cold"},"1363":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoall_c"},"1362":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoall.cold"},"1361":{"probe_name":"mpi-api","function_name":"PMPI_Ialltoall"},"1360":{"probe_name":"mpi-api","function_name":"PMPI_Iallreduce_c.cold"},"1359":{"probe_name":"mpi-api","function_name":"PMPI_Iallreduce_c"},"1358":{"probe_name":"mpi-api","function_name":"PMPI_Iallreduce.cold"},"1357":{"probe_name":"mpi-api","function_name":"PMPI_Iallreduce"},"1356":{"probe_name":"mpi-api","function_name":"PMPI_Iallgatherv_c.cold"},"1355":{"probe_name":"mpi-api","function_name":"PMPI_Iallgatherv_c"},"1354":{"probe_name":"mpi-api","function_name":"PMPI_Iallgatherv.cold"},"1353":{"probe_name":"mpi-api","function_name":"PMPI_Iallgatherv"},"1352":{"probe_name":"mpi-api","function_name":"PMPI_Iallgather_c.cold"},"1351":{"probe_name":"mpi-api","function_name":"PMPI_Iallgather_c"},"1350":{"probe_name":"mpi-api","function_name":"PMPI_Iallgather.cold"},"1349":{"probe_name":"mpi-api","function_name":"PMPI_Iallgather"},"1348":{"probe_name":"mpi-api","function_name":"PMPI_Group_union"},"1347":{"probe_name":"mpi-api","function_name":"PMPI_Group_translate_ranks"},"1346":{"probe_name":"mpi-api","function_name":"PMPI_Group_size"},"1345":{"probe_name":"mpi-api","function_name":"PMPI_Group_rank"},"1344":{"probe_name":"mpi-api","function_name":"PMPI_Group_range_incl"},"1343":{"probe_name":"mpi-api","function_name":"PMPI_Group_range_excl"},"1342":{"probe_name":"mpi-api","function_name":"PMPI_Group_intersection"},"1341":{"probe_name":"mpi-api","function_name":"PMPI_Group_incl"},"1340":{"probe_name":"mpi-api","function_name":"PMPI_Group_from_session_pset"},"1339":{"probe_name":"mpi-api","function_name":"PMPI_Group_free"},"1338":{"probe_name":"mpi-api","function_name":"PMPI_Group_excl.cold"},"1337":{"probe_name":"mpi-api","function_name":"PMPI_Group_excl"},"1336":{"probe_name":"mpi-api","function_name":"PMPI_Group_difference"},"1335":{"probe_name":"mpi-api","function_name":"PMPI_Group_compare"},"1334":{"probe_name":"mpi-api","function_name":"PMPI_Grequest_start"},"1333":{"probe_name":"mpi-api","function_name":"PMPI_Grequest_complete"},"1332":{"probe_name":"mpi-api","function_name":"PMPI_Graphdims_get"},"1331":{"probe_name":"mpi-api","function_name":"PMPI_Graph_neighbors_count"},"1330":{"probe_name":"mpi-api","function_name":"PMPI_Graph_neighbors"},"1329":{"probe_name":"mpi-api","function_name":"PMPI_Graph_map"},"1328":{"probe_name":"mpi-api","function_name":"PMPI_Graph_get"},"1327":{"probe_name":"mpi-api","function_name":"PMPI_Graph_create.cold"},"1326":{"probe_name":"mpi-api","function_name":"PMPI_Graph_create"},"1325":{"probe_name":"mpi-api","function_name":"PMPI_Get_version"},"1324":{"probe_name":"mpi-api","function_name":"PMPI_Get_processor_name"},"1323":{"probe_name":"mpi-api","function_name":"PMPI_Get_library_version"},"1322":{"probe_name":"mpi-api","function_name":"PMPI_Get_elements_x.cold"},"1321":{"probe_name":"mpi-api","function_name":"PMPI_Get_elements_x"},"1320":{"probe_name":"mpi-api","function_name":"PMPI_Get_elements_c.cold"},"1319":{"probe_name":"mpi-api","function_name":"PMPI_Get_elements_c"},"1318":{"probe_name":"mpi-api","function_name":"PMPI_Get_elements.cold"},"1317":{"probe_name":"mpi-api","function_name":"PMPI_Get_elements"},"1316":{"probe_name":"mpi-api","function_name":"PMPI_Get_count_c"},"1315":{"probe_name":"mpi-api","function_name":"PMPI_Get_count"},"1314":{"probe_name":"mpi-api","function_name":"PMPI_Get_c.cold"},"1313":{"probe_name":"mpi-api","function_name":"PMPI_Get_c"},"1312":{"probe_name":"mpi-api","function_name":"PMPI_Get_address"},"1311":{"probe_name":"mpi-api","function_name":"PMPI_Get_accumulate_c.cold"},"1310":{"probe_name":"mpi-api","function_name":"PMPI_Get_accumulate_c"},"1309":{"probe_name":"mpi-api","function_name":"PMPI_Get_accumulate.cold"},"1308":{"probe_name":"mpi-api","function_name":"PMPI_Get_accumulate"},"1307":{"probe_name":"mpi-api","function_name":"PMPI_Get.cold"},"1306":{"probe_name":"mpi-api","function_name":"PMPI_Get"},"1305":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv_init_c.cold"},"1304":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv_init_c"},"1303":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv_init.cold"},"1302":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv_init"},"1301":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv_c.cold"},"1300":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv_c"},"1299":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv.cold"},"1298":{"probe_name":"mpi-api","function_name":"PMPI_Gatherv"},"1297":{"probe_name":"mpi-api","function_name":"PMPI_Gather_init_c.cold"},"1296":{"probe_name":"mpi-api","function_name":"PMPI_Gather_init_c"},"1295":{"probe_name":"mpi-api","function_name":"PMPI_Gather_init.cold"},"1294":{"probe_name":"mpi-api","function_name":"PMPI_Gather_init"},"1293":{"probe_name":"mpi-api","function_name":"PMPI_Gather_c.cold"},"1292":{"probe_name":"mpi-api","function_name":"PMPI_Gather_c"},"1291":{"probe_name":"mpi-api","function_name":"PMPI_Gather.cold"},"1290":{"probe_name":"mpi-api","function_name":"PMPI_Gather"},"1289":{"probe_name":"mpi-api","function_name":"PMPI_Free_mem"},"1288":{"probe_name":"mpi-api","function_name":"PMPI_Finalized"},"1287":{"probe_name":"mpi-api","function_name":"PMPI_Finalize"},"1286":{"probe_name":"mpi-api","function_name":"PMPI_File_write_shared_c"},"1285":{"probe_name":"mpi-api","function_name":"PMPI_File_write_shared"},"1284":{"probe_name":"mpi-api","function_name":"PMPI_File_write_ordered_end"},"1283":{"probe_name":"mpi-api","function_name":"PMPI_File_write_ordered_c"},"1282":{"probe_name":"mpi-api","function_name":"PMPI_File_write_ordered_begin_c"},"1281":{"probe_name":"mpi-api","function_name":"PMPI_File_write_ordered_begin"},"1280":{"probe_name":"mpi-api","function_name":"PMPI_File_write_ordered"},"1279":{"probe_name":"mpi-api","function_name":"PMPI_File_write_c"},"1278":{"probe_name":"mpi-api","function_name":"PMPI_File_write_at_c"},"1277":{"probe_name":"mpi-api","function_name":"PMPI_File_write_at_all_end"},"1276":{"probe_name":"mpi-api","function_name":"PMPI_File_write_at_all_c"},"1275":{"probe_name":"mpi-api","function_name":"PMPI_File_write_at_all_begin_c"},"1274":{"probe_name":"mpi-api","function_name":"PMPI_File_write_at_all_begin"},"1273":{"probe_name":"mpi-api","function_name":"PMPI_File_write_at_all"},"1272":{"probe_name":"mpi-api","function_name":"PMPI_File_write_at"},"1271":{"probe_name":"mpi-api","function_name":"PMPI_File_write_all_end"},"1270":{"probe_name":"mpi-api","function_name":"PMPI_File_write_all_c"},"1269":{"probe_name":"mpi-api","function_name":"PMPI_File_write_all_begin_c"},"1268":{"probe_name":"mpi-api","function_name":"PMPI_File_write_all_begin"},"1267":{"probe_name":"mpi-api","function_name":"PMPI_File_write_all"},"1266":{"probe_name":"mpi-api","function_name":"PMPI_File_write"},"1265":{"probe_name":"mpi-api","function_name":"PMPI_File_sync"},"1264":{"probe_name":"mpi-api","function_name":"PMPI_File_set_view"},"1263":{"probe_name":"mpi-api","function_name":"PMPI_File_set_size"},"1262":{"probe_name":"mpi-api","function_name":"PMPI_File_set_info"},"1261":{"probe_name":"mpi-api","function_name":"PMPI_File_set_errhandler"},"1260":{"probe_name":"mpi-api","function_name":"PMPI_File_set_atomicity"},"1259":{"probe_name":"mpi-api","function_name":"PMPI_File_seek_shared"},"1258":{"probe_name":"mpi-api","function_name":"PMPI_File_seek"},"1257":{"probe_name":"mpi-api","function_name":"PMPI_File_read_shared_c"},"1256":{"probe_name":"mpi-api","function_name":"PMPI_File_read_shared"},"1255":{"probe_name":"mpi-api","function_name":"PMPI_File_read_ordered_end"},"1254":{"probe_name":"mpi-api","function_name":"PMPI_File_read_ordered_c"},"1123":{"probe_name":"mpi-api","function_name":"PMPI_Cart_create"},"1122":{"probe_name":"mpi-api","function_name":"PMPI_Cart_coords"},"1121":{"probe_name":"mpi-api","function_name":"PMPI_Cancel"},"1120":{"probe_name":"mpi-api","function_name":"PMPI_Buffer_detach_c"},"1119":{"probe_name":"mpi-api","function_name":"PMPI_Buffer_detach"},"1118":{"probe_name":"mpi-api","function_name":"PMPI_Buffer_attach_c"},"1117":{"probe_name":"mpi-api","function_name":"PMPI_Buffer_attach"},"1116":{"probe_name":"mpi-api","function_name":"PMPI_Bsend_init_c.cold"},"1115":{"probe_name":"mpi-api","function_name":"PMPI_Bsend_init_c"},"1114":{"probe_name":"mpi-api","function_name":"PMPI_Bsend_init.cold"},"1113":{"probe_name":"mpi-api","function_name":"PMPI_Bsend_init"},"1112":{"probe_name":"mpi-api","function_name":"PMPI_Bsend_c.cold"},"1111":{"probe_name":"mpi-api","function_name":"PMPI_Bsend_c"},"2359":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_init"},"2":{"probe_name":"DC","function_name":"end"},"5089":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_iprobe.constprop.0:0x477d60"},"1110":{"probe_name":"mpi-api","function_name":"PMPI_Bsend.cold"},"2358":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_finalize"},"1":{"probe_name":"DC","function_name":"start"},"5088":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_iprobe.constprop.0:0x456980"},"1109":{"probe_name":"mpi-api","function_name":"PMPI_Bsend"},"2357":{"probe_name":"mpi-rest","function_name":"MPIDIG_am_comm_abort_init"},"0":{"probe_name":"M","function_name":"SH"},"5087":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_iprobe.constprop.0:0x191780"},"1108":{"probe_name":"mpi-api","function_name":"PMPI_Bcast_init_c.cold"},"1107":{"probe_name":"mpi-api","function_name":"PMPI_Bcast_init_c"},"1106":{"probe_name":"mpi-api","function_name":"PMPI_Bcast_init.cold"},"1105":{"probe_name":"mpi-api","function_name":"PMPI_Bcast_init"},"1104":{"probe_name":"mpi-api","function_name":"PMPI_Bcast_c.cold"},"1103":{"probe_name":"mpi-api","function_name":"PMPI_Bcast_c"},"1102":{"probe_name":"mpi-api","function_name":"PMPI_Bcast.cold"},"1101":{"probe_name":"mpi-api","function_name":"PMPI_Bcast"},"1100":{"probe_name":"mpi-api","function_name":"PMPI_Barrier_init"},"1099":{"probe_name":"mpi-api","function_name":"PMPI_Barrier.cold"},"1098":{"probe_name":"mpi-api","function_name":"PMPI_Barrier"},"1097":{"probe_name":"mpi-api","function_name":"PMPI_Attr_put"},"1096":{"probe_name":"mpi-api","function_name":"PMPI_Attr_get"},"1095":{"probe_name":"mpi-api","function_name":"PMPI_Attr_delete"},"1094":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw_init_c.cold"},"1093":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw_init_c"},"1092":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw_init.cold"},"1091":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw_init"},"1090":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw_c.cold"},"1089":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw_c"},"1088":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw.cold"},"1087":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallw"},"1086":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv_init_c.cold"},"1085":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv_init_c"},"1081":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv_c"},"1080":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv.cold"},"1079":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv"},"1078":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall_init_c.cold"},"1077":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall_init_c"},"1076":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall_init.cold"},"1075":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall_init"},"1074":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall_c.cold"},"1073":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall_c"},"1072":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall.cold"},"1071":{"probe_name":"mpi-api","function_name":"PMPI_Alltoall"},"1070":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce_init_c.cold"},"1069":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce_init_c"},"1068":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce_init.cold"},"1067":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce_init"},"1066":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce_c.cold"},"1065":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce_c"},"1064":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce.cold"},"1063":{"probe_name":"mpi-api","function_name":"PMPI_Allreduce"},"1062":{"probe_name":"mpi-api","function_name":"PMPI_Alloc_mem"},"1061":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv_init_c.cold"},"1060":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv_init_c"},"1059":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv_init.cold"},"1058":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv_init"},"1057":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv_c.cold"},"1056":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv_c"},"1025":{"probe_name":"mpi-api","function_name":"PMPIX_Query_hip_support"},"1024":{"probe_name":"mpi-api","function_name":"PMPIX_Query_cuda_support"},"1023":{"probe_name":"mpi-api","function_name":"PMPIX_KT_Get_dreq.cold"},"1022":{"probe_name":"mpi-api","function_name":"PMPIX_KT_Get_dreq"},"1021":{"probe_name":"mpi-api","function_name":"PMPIX_Info_set_hex"},"1020":{"probe_name":"mpi-api","function_name":"PMPIX_Grequest_start"},"1019":{"probe_name":"mpi-api","function_name":"PMPIX_Grequest_class_create"},"1014":{"probe_name":"mpi-api","function_name":"PMPIX_Enqueue_start"},"1013":{"probe_name":"mpi-api","function_name":"PMPIX_Enqueue_send.cold"},"1012":{"probe_name":"mpi-api","function_name":"PMPIX_Enqueue_send"},"1011":{"probe_name":"mpi-api","function_name":"PMPIX_Enqueue_recv.cold"},"1010":{"probe_name":"mpi-api","function_name":"PMPIX_Enqueue_recv"},"1015":{"probe_name":"mpi-api","function_name":"PMPIX_Enqueue_wait"},"1003":{"probe_name":"mpi-api","function_name":"PMPIX_Comm_get_failed"},"1001":{"probe_name":"mpi-api","function_name":"PMPIX_Comm_failure_ack"},"1082":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv_c.cold"},"1028":{"probe_name":"mpi-api","function_name":"PMPIX_Type_iov.cold"},"1016":{"probe_name":"mpi-api","function_name":"PMPIX_Free_queue"},"1004":{"probe_name":"mpi-api","function_name":"PMPIX_Comm_revoke"},"1002":{"probe_name":"mpi-api","function_name":"PMPIX_Comm_failure_get_acked"},"1083":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv_init"},"1029":{"probe_name":"mpi-api","function_name":"PMPIX_Type_iov_len"},"1017":{"probe_name":"mpi-api","function_name":"PMPIX_GPU_query_support"},"1018":{"probe_name":"mpi-api","function_name":"PMPIX_Grequest_class_allocate"},"1084":{"probe_name":"mpi-api","function_name":"PMPI_Alltoallv_init.cold"},"1030":{"probe_name":"mpi-api","function_name":"PMPIX_Type_iov_len.cold"},"1005":{"probe_name":"mpi-api","function_name":"PMPIX_Comm_shrink"},"1000":{"probe_name":"mpi-api","function_name":"PMPIX_Comm_agree"},"1006":{"probe_name":"mpi-api","function_name":"PMPIX_Create_queue"},"1007":{"probe_name":"mpi-api","function_name":"PMPIX_Delete_error_class"},"1008":{"probe_name":"mpi-api","function_name":"PMPIX_Delete_error_code"},"1009":{"probe_name":"mpi-api","function_name":"PMPIX_Delete_error_string"},"1026":{"probe_name":"mpi-api","function_name":"PMPIX_Query_ze_support"},"1027":{"probe_name":"mpi-api","function_name":"PMPIX_Type_iov"},"1031":{"probe_name":"mpi-api","function_name":"PMPIX_Win_complete_stream"},"1032":{"probe_name":"mpi-api","function_name":"PMPIX_Win_post_stream"},"1033":{"probe_name":"mpi-api","function_name":"PMPIX_Win_progress_stream"},"1034":{"probe_name":"mpi-api","function_name":"PMPIX_Win_wait_stream"},"1035":{"probe_name":"mpi-api","function_name":"PMPI_Abort"},"1036":{"probe_name":"mpi-api","function_name":"PMPI_Accumulate"},"1037":{"probe_name":"mpi-api","function_name":"PMPI_Accumulate.cold"},"1038":{"probe_name":"mpi-api","function_name":"PMPI_Accumulate_c"},"1039":{"probe_name":"mpi-api","function_name":"PMPI_Accumulate_c.cold"},"1040":{"probe_name":"mpi-api","function_name":"PMPI_Add_error_class"},"1041":{"probe_name":"mpi-api","function_name":"PMPI_Add_error_code"},"1042":{"probe_name":"mpi-api","function_name":"PMPI_Add_error_string"},"1043":{"probe_name":"mpi-api","function_name":"PMPI_Address"},"1044":{"probe_name":"mpi-api","function_name":"PMPI_Aint_add"},"1045":{"probe_name":"mpi-api","function_name":"PMPI_Aint_diff"},"1046":{"probe_name":"mpi-api","function_name":"PMPI_Allgather"},"1047":{"probe_name":"mpi-api","function_name":"PMPI_Allgather.cold"},"1048":{"probe_name":"mpi-api","function_name":"PMPI_Allgather_c"},"1049":{"probe_name":"mpi-api","function_name":"PMPI_Allgather_c.cold"},"1050":{"probe_name":"mpi-api","function_name":"PMPI_Allgather_init"},"1051":{"probe_name":"mpi-api","function_name":"PMPI_Allgather_init.cold"},"1052":{"probe_name":"mpi-api","function_name":"PMPI_Allgather_init_c"},"1053":{"probe_name":"mpi-api","function_name":"PMPI_Allgather_init_c.cold"},"1054":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv"},"1055":{"probe_name":"mpi-api","function_name":"PMPI_Allgatherv.cold"},"1124":{"probe_name":"mpi-api","function_name":"PMPI_Cart_create.cold"},"1125":{"probe_name":"mpi-api","function_name":"PMPI_Cart_get"},"1126":{"probe_name":"mpi-api","function_name":"PMPI_Cart_map"},"1127":{"probe_name":"mpi-api","function_name":"PMPI_Cart_rank"},"1128":{"probe_name":"mpi-api","function_name":"PMPI_Cart_shift"},"1129":{"probe_name":"mpi-api","function_name":"PMPI_Cart_sub"},"1130":{"probe_name":"mpi-api","function_name":"PMPI_Cartdim_get"},"1131":{"probe_name":"mpi-api","function_name":"PMPI_Close_port"},"1132":{"probe_name":"mpi-api","function_name":"PMPI_Comm_accept"},"1133":{"probe_name":"mpi-api","function_name":"PMPI_Comm_call_errhandler"},"1134":{"probe_name":"mpi-api","function_name":"PMPI_Comm_compare"},"1135":{"probe_name":"mpi-api","function_name":"PMPI_Comm_connect"},"1136":{"probe_name":"mpi-api","function_name":"PMPI_Comm_create"},"1137":{"probe_name":"mpi-api","function_name":"PMPI_Comm_create_errhandler"},"1138":{"probe_name":"mpi-api","function_name":"PMPI_Comm_create_from_group"},"1139":{"probe_name":"mpi-api","function_name":"PMPI_Comm_create_group"},"1140":{"probe_name":"mpi-api","function_name":"PMPI_Comm_create_group.cold"},"1141":{"probe_name":"mpi-api","function_name":"PMPI_Comm_create_keyval"},"1142":{"probe_name":"mpi-api","function_name":"PMPI_Comm_delete_attr"},"1143":{"probe_name":"mpi-api","function_name":"PMPI_Comm_disconnect"},"1144":{"probe_name":"mpi-api","function_name":"PMPI_Comm_dup"},"1145":{"probe_name":"mpi-api","function_name":"PMPI_Comm_dup_with_info"},"1146":{"probe_name":"mpi-api","function_name":"PMPI_Comm_free"},"1147":{"probe_name":"mpi-api","function_name":"PMPI_Comm_free_keyval"},"1148":{"probe_name":"mpi-api","function_name":"PMPI_Comm_get_attr"},"1149":{"probe_name":"mpi-api","function_name":"PMPI_Comm_get_errhandler"},"1150":{"probe_name":"mpi-api","function_name":"PMPI_Comm_get_info"},"1151":{"probe_name":"mpi-api","function_name":"PMPI_Comm_get_name"},"1152":{"probe_name":"mpi-api","function_name":"PMPI_Comm_get_parent"},"1153":{"probe_name":"mpi-api","function_name":"PMPI_Comm_group"},"1154":{"probe_name":"mpi-api","function_name":"PMPI_Comm_idup"},"1155":{"probe_name":"mpi-api","function_name":"PMPI_Comm_idup_with_info"},"1156":{"probe_name":"mpi-api","function_name":"PMPI_Comm_join"},"1157":{"probe_name":"mpi-api","function_name":"PMPI_Comm_rank"},"1158":{"probe_name":"mpi-api","function_name":"PMPI_Comm_remote_group"},"1159":{"probe_name":"mpi-api","function_name":"PMPI_Comm_remote_size"},"1160":{"probe_name":"mpi-api","function_name":"PMPI_Comm_set_attr"},"1161":{"probe_name":"mpi-api","function_name":"PMPI_Comm_set_errhandler"},"1162":{"probe_name":"mpi-api","function_name":"PMPI_Comm_set_info"},"1163":{"probe_name":"mpi-api","function_name":"PMPI_Comm_set_name"},"1164":{"probe_name":"mpi-api","function_name":"PMPI_Comm_size"},"1165":{"probe_name":"mpi-api","function_name":"PMPI_Comm_spawn"},"1166":{"probe_name":"mpi-api","function_name":"PMPI_Comm_spawn.cold"},"1167":{"probe_name":"mpi-api","function_name":"PMPI_Comm_spawn_multiple"},"1168":{"probe_name":"mpi-api","function_name":"PMPI_Comm_spawn_multiple.cold"},"1169":{"probe_name":"mpi-api","function_name":"PMPI_Comm_split"},"1170":{"probe_name":"mpi-api","function_name":"PMPI_Comm_split_type"},"1171":{"probe_name":"mpi-api","function_name":"PMPI_Comm_test_inter"},"1172":{"probe_name":"mpi-api","function_name":"PMPI_Compare_and_swap"},"1173":{"probe_name":"mpi-api","function_name":"PMPI_Compare_and_swap.cold"},"1174":{"probe_name":"mpi-api","function_name":"PMPI_Dims_create"},"1175":{"probe_name":"mpi-api","function_name":"PMPI_Dist_graph_create"},"1176":{"probe_name":"mpi-api","function_name":"PMPI_Dist_graph_create.cold"},"1177":{"probe_name":"mpi-api","function_name":"PMPI_Dist_graph_create_adjacent"},"1178":{"probe_name":"mpi-api","function_name":"PMPI_Dist_graph_create_adjacent.cold"},"1179":{"probe_name":"mpi-api","function_name":"PMPI_Dist_graph_neighbors"},"1180":{"probe_name":"mpi-api","function_name":"PMPI_Dist_graph_neighbors_count"},"1181":{"probe_name":"mpi-api","function_name":"PMPI_Errhandler_create"},"1182":{"probe_name":"mpi-api","function_name":"PMPI_Errhandler_free"},"1183":{"probe_name":"mpi-api","function_name":"PMPI_Errhandler_get"},"1184":{"probe_name":"mpi-api","function_name":"PMPI_Errhandler_set"},"1185":{"probe_name":"mpi-api","function_name":"PMPI_Error_class"},"1186":{"probe_name":"mpi-api","function_name":"PMPI_Error_string"},"1187":{"probe_name":"mpi-api","function_name":"PMPI_Exscan"},"1188":{"probe_name":"mpi-api","function_name":"PMPI_Exscan.cold"},"1189":{"probe_name":"mpi-api","function_name":"PMPI_Exscan_c"},"1190":{"probe_name":"mpi-api","function_name":"PMPI_Exscan_c.cold"},"1191":{"probe_name":"mpi-api","function_name":"PMPI_Exscan_init"},"1192":{"probe_name":"mpi-api","function_name":"PMPI_Exscan_init.cold"},"1193":{"probe_name":"mpi-api","function_name":"PMPI_Exscan_init_c"},"1194":{"probe_name":"mpi-api","function_name":"PMPI_Exscan_init_c.cold"},"1195":{"probe_name":"mpi-api","function_name":"PMPI_Fetch_and_op"},"1196":{"probe_name":"mpi-api","function_name":"PMPI_Fetch_and_op.cold"},"1197":{"probe_name":"mpi-api","function_name":"PMPI_File_c2f"},"1198":{"probe_name":"mpi-api","function_name":"PMPI_File_call_errhandler"},"1199":{"probe_name":"mpi-api","function_name":"PMPI_File_close"},"1200":{"probe_name":"mpi-api","function_name":"PMPI_File_create_errhandler"},"1201":{"probe_name":"mpi-api","function_name":"PMPI_File_delete"},"1202":{"probe_name":"mpi-api","function_name":"PMPI_File_f2c"},"1203":{"probe_name":"mpi-api","function_name":"PMPI_File_get_amode"},"1204":{"probe_name":"mpi-api","function_name":"PMPI_File_get_atomicity"},"1205":{"probe_name":"mpi-api","function_name":"PMPI_File_get_byte_offset"},"1206":{"probe_name":"mpi-api","function_name":"PMPI_File_get_errhandler"},"1207":{"probe_name":"mpi-api","function_name":"PMPI_File_get_group"},"1208":{"probe_name":"mpi-api","function_name":"PMPI_File_get_info"},"1209":{"probe_name":"mpi-api","function_name":"PMPI_File_get_position"},"1210":{"probe_name":"mpi-api","function_name":"PMPI_File_get_position_shared"},"1211":{"probe_name":"mpi-api","function_name":"PMPI_File_get_size"},"1212":{"probe_name":"mpi-api","function_name":"PMPI_File_get_type_extent"},"1213":{"probe_name":"mpi-api","function_name":"PMPI_File_get_type_extent_c"},"1214":{"probe_name":"mpi-api","function_name":"PMPI_File_get_view"},"1215":{"probe_name":"mpi-api","function_name":"PMPI_File_iread"},"1216":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_all"},"1217":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_all_c"},"1218":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_at"},"1219":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_at_all"},"1220":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_at_all_c"},"1221":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_at_c"},"1222":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_c"},"1223":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_shared"},"1224":{"probe_name":"mpi-api","function_name":"PMPI_File_iread_shared_c"},"1225":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite"},"1226":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_all"},"1227":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_all_c"},"1228":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_at"},"1229":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_at_all"},"1230":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_at_all_c"},"1231":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_at_c"},"1232":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_c"},"1233":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_shared"},"1234":{"probe_name":"mpi-api","function_name":"PMPI_File_iwrite_shared_c"},"1235":{"probe_name":"mpi-api","function_name":"PMPI_File_open"},"1236":{"probe_name":"mpi-api","function_name":"PMPI_File_preallocate"},"1237":{"probe_name":"mpi-api","function_name":"PMPI_File_read"},"1238":{"probe_name":"mpi-api","function_name":"PMPI_File_read_all"},"1239":{"probe_name":"mpi-api","function_name":"PMPI_File_read_all_begin"},"1240":{"probe_name":"mpi-api","function_name":"PMPI_File_read_all_begin_c"},"1241":{"probe_name":"mpi-api","function_name":"PMPI_File_read_all_c"},"1242":{"probe_name":"mpi-api","function_name":"PMPI_File_read_all_end"},"1243":{"probe_name":"mpi-api","function_name":"PMPI_File_read_at"},"1244":{"probe_name":"mpi-api","function_name":"PMPI_File_read_at_all"},"1245":{"probe_name":"mpi-api","function_name":"PMPI_File_read_at_all_begin"},"1246":{"probe_name":"mpi-api","function_name":"PMPI_File_read_at_all_begin_c"},"1247":{"probe_name":"mpi-api","function_name":"PMPI_File_read_at_all_c"},"1248":{"probe_name":"mpi-api","function_name":"PMPI_File_read_at_all_end"},"1249":{"probe_name":"mpi-api","function_name":"PMPI_File_read_at_c"},"1250":{"probe_name":"mpi-api","function_name":"PMPI_File_read_c"},"1251":{"probe_name":"mpi-api","function_name":"PMPI_File_read_ordered"},"1252":{"probe_name":"mpi-api","function_name":"PMPI_File_read_ordered_begin"},"1253":{"probe_name":"mpi-api","function_name":"PMPI_File_read_ordered_begin_c"},"1538":{"probe_name":"mpi-api","function_name":"PMPI_Op_create_c"},"1539":{"probe_name":"mpi-api","function_name":"PMPI_Op_free"},"1540":{"probe_name":"mpi-api","function_name":"PMPI_Open_port"},"1541":{"probe_name":"mpi-api","function_name":"PMPI_Pack"},"1542":{"probe_name":"mpi-api","function_name":"PMPI_Pack.cold"},"1543":{"probe_name":"mpi-api","function_name":"PMPI_Pack_c"},"1544":{"probe_name":"mpi-api","function_name":"PMPI_Pack_c.cold"},"1545":{"probe_name":"mpi-api","function_name":"PMPI_Pack_external"},"1546":{"probe_name":"mpi-api","function_name":"PMPI_Pack_external.cold"},"1547":{"probe_name":"mpi-api","function_name":"PMPI_Pack_external_c"},"1548":{"probe_name":"mpi-api","function_name":"PMPI_Pack_external_c.cold"},"1549":{"probe_name":"mpi-api","function_name":"PMPI_Pack_external_size"},"1550":{"probe_name":"mpi-api","function_name":"PMPI_Pack_external_size_c"},"1551":{"probe_name":"mpi-api","function_name":"PMPI_Pack_size"},"1552":{"probe_name":"mpi-api","function_name":"PMPI_Pack_size.cold"},"1553":{"probe_name":"mpi-api","function_name":"PMPI_Pack_size_c"},"1554":{"probe_name":"mpi-api","function_name":"PMPI_Pack_size_c.cold"},"1555":{"probe_name":"mpi-api","function_name":"PMPI_Parrived"},"1556":{"probe_name":"mpi-api","function_name":"PMPI_Parrived.cold"},"1557":{"probe_name":"mpi-api","function_name":"PMPI_Pcontrol"},"1558":{"probe_name":"mpi-api","function_name":"PMPI_Pready"},"1559":{"probe_name":"mpi-api","function_name":"PMPI_Pready.cold"},"1560":{"probe_name":"mpi-api","function_name":"PMPI_Pready_list"},"1561":{"probe_name":"mpi-api","function_name":"PMPI_Pready_list.cold"},"1562":{"probe_name":"mpi-api","function_name":"PMPI_Pready_range"},"1563":{"probe_name":"mpi-api","function_name":"PMPI_Pready_range.cold"},"1564":{"probe_name":"mpi-api","function_name":"PMPI_Precv_init"},"1565":{"probe_name":"mpi-api","function_name":"PMPI_Precv_init.cold"},"1566":{"probe_name":"mpi-api","function_name":"PMPI_Probe"},"1567":{"probe_name":"mpi-api","function_name":"PMPI_Psend_init"},"1568":{"probe_name":"mpi-api","function_name":"PMPI_Psend_init.cold"},"1569":{"probe_name":"mpi-api","function_name":"PMPI_Publish_name"},"1570":{"probe_name":"mpi-api","function_name":"PMPI_Put"},"1571":{"probe_name":"mpi-api","function_name":"PMPI_Put.cold"},"1572":{"probe_name":"mpi-api","function_name":"PMPI_Put_c"},"1573":{"probe_name":"mpi-api","function_name":"PMPI_Put_c.cold"},"1574":{"probe_name":"mpi-api","function_name":"PMPI_Query_thread"},"1575":{"probe_name":"mpi-api","function_name":"PMPI_Raccumulate"},"1576":{"probe_name":"mpi-api","function_name":"PMPI_Raccumulate.cold"},"1577":{"probe_name":"mpi-api","function_name":"PMPI_Raccumulate_c"},"1578":{"probe_name":"mpi-api","function_name":"PMPI_Raccumulate_c.cold"},"1579":{"probe_name":"mpi-api","function_name":"PMPI_Recv"},"1580":{"probe_name":"mpi-api","function_name":"PMPI_Recv.cold"},"1581":{"probe_name":"mpi-api","function_name":"PMPI_Recv_c"},"1582":{"probe_name":"mpi-api","function_name":"PMPI_Recv_c.cold"},"1583":{"probe_name":"mpi-api","function_name":"PMPI_Recv_init"},"1584":{"probe_name":"mpi-api","function_name":"PMPI_Recv_init.cold"},"1585":{"probe_name":"mpi-api","function_name":"PMPI_Recv_init_c"},"1586":{"probe_name":"mpi-api","function_name":"PMPI_Recv_init_c.cold"},"1587":{"probe_name":"mpi-api","function_name":"PMPI_Reduce"},"1588":{"probe_name":"mpi-api","function_name":"PMPI_Reduce.cold"},"1589":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_c"},"1590":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_c.cold"},"1591":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_init"},"1592":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_init.cold"},"1593":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_init_c"},"1594":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_init_c.cold"},"1595":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_local"},"1596":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_local.cold"},"1597":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_local_c"},"1598":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_local_c.cold"},"1599":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter"},"1600":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter.cold"},"1601":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block"},"1602":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block.cold"},"1603":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block_c"},"1604":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block_c.cold"},"1605":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block_init"},"1606":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block_init.cold"},"1607":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block_init_c"},"1608":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_block_init_c.cold"},"1609":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_c"},"1610":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_c.cold"},"1611":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_init"},"1612":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_init.cold"},"1613":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_init_c"},"1614":{"probe_name":"mpi-api","function_name":"PMPI_Reduce_scatter_init_c.cold"},"1615":{"probe_name":"mpi-api","function_name":"PMPI_Register_datarep"},"1616":{"probe_name":"mpi-api","function_name":"PMPI_Register_datarep_c"},"1617":{"probe_name":"mpi-api","function_name":"PMPI_Request_free"},"1618":{"probe_name":"mpi-api","function_name":"PMPI_Request_get_status"},"1619":{"probe_name":"mpi-api","function_name":"PMPI_Rget"},"1620":{"probe_name":"mpi-api","function_name":"PMPI_Rget.cold"},"1621":{"probe_name":"mpi-api","function_name":"PMPI_Rget_accumulate"},"1622":{"probe_name":"mpi-api","function_name":"PMPI_Rget_accumulate.cold"},"1623":{"probe_name":"mpi-api","function_name":"PMPI_Rget_accumulate_c"},"1624":{"probe_name":"mpi-api","function_name":"PMPI_Rget_accumulate_c.cold"},"1625":{"probe_name":"mpi-api","function_name":"PMPI_Rget_c"},"1626":{"probe_name":"mpi-api","function_name":"PMPI_Rget_c.cold"},"1627":{"probe_name":"mpi-api","function_name":"PMPI_Rput"},"1628":{"probe_name":"mpi-api","function_name":"PMPI_Rput.cold"},"1629":{"probe_name":"mpi-api","function_name":"PMPI_Rput_c"},"1630":{"probe_name":"mpi-api","function_name":"PMPI_Rput_c.cold"},"1631":{"probe_name":"mpi-api","function_name":"PMPI_Rsend"},"1632":{"probe_name":"mpi-api","function_name":"PMPI_Rsend.cold"},"1633":{"probe_name":"mpi-api","function_name":"PMPI_Rsend_c"},"1634":{"probe_name":"mpi-api","function_name":"PMPI_Rsend_c.cold"},"1635":{"probe_name":"mpi-api","function_name":"PMPI_Rsend_init"},"1636":{"probe_name":"mpi-api","function_name":"PMPI_Rsend_init.cold"},"1637":{"probe_name":"mpi-api","function_name":"PMPI_Rsend_init_c"},"1638":{"probe_name":"mpi-api","function_name":"PMPI_Rsend_init_c.cold"},"1639":{"probe_name":"mpi-api","function_name":"PMPI_Scan"},"1640":{"probe_name":"mpi-api","function_name":"PMPI_Scan.cold"},"1641":{"probe_name":"mpi-api","function_name":"PMPI_Scan_c"},"1642":{"probe_name":"mpi-api","function_name":"PMPI_Scan_c.cold"},"1643":{"probe_name":"mpi-api","function_name":"PMPI_Scan_init"},"1644":{"probe_name":"mpi-api","function_name":"PMPI_Scan_init.cold"},"1645":{"probe_name":"mpi-api","function_name":"PMPI_Scan_init_c"},"1646":{"probe_name":"mpi-api","function_name":"PMPI_Scan_init_c.cold"},"1647":{"probe_name":"mpi-api","function_name":"PMPI_Scatter"},"1648":{"probe_name":"mpi-api","function_name":"PMPI_Scatter.cold"},"1649":{"probe_name":"mpi-api","function_name":"PMPI_Scatter_c"},"1650":{"probe_name":"mpi-api","function_name":"PMPI_Scatter_c.cold"},"1651":{"probe_name":"mpi-api","function_name":"PMPI_Scatter_init"},"1652":{"probe_name":"mpi-api","function_name":"PMPI_Scatter_init.cold"},"1653":{"probe_name":"mpi-api","function_name":"PMPI_Scatter_init_c"},"1654":{"probe_name":"mpi-api","function_name":"PMPI_Scatter_init_c.cold"},"1655":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv"},"1656":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv.cold"},"1657":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv_c"},"1658":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv_c.cold"},"1659":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv_init"},"1660":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv_init.cold"},"1661":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv_init_c"},"1662":{"probe_name":"mpi-api","function_name":"PMPI_Scatterv_init_c.cold"},"1663":{"probe_name":"mpi-api","function_name":"PMPI_Send"},"1664":{"probe_name":"mpi-api","function_name":"PMPI_Send.cold"},"1665":{"probe_name":"mpi-api","function_name":"PMPI_Send_c"},"1666":{"probe_name":"mpi-api","function_name":"PMPI_Send_c.cold"},"1667":{"probe_name":"mpi-api","function_name":"PMPI_Send_init"},"1668":{"probe_name":"mpi-api","function_name":"PMPI_Send_init.cold"},"1669":{"probe_name":"mpi-api","function_name":"PMPI_Send_init_c"},"1670":{"probe_name":"mpi-api","function_name":"PMPI_Send_init_c.cold"},"1671":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv"},"1672":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv.cold"},"1673":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv_c"},"1674":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv_c.cold"},"1675":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv_replace"},"1676":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv_replace.cold"},"1677":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv_replace_c"},"1678":{"probe_name":"mpi-api","function_name":"PMPI_Sendrecv_replace_c.cold"},"1679":{"probe_name":"mpi-api","function_name":"PMPI_Session_call_errhandler"},"1680":{"probe_name":"mpi-api","function_name":"PMPI_Session_create_errhandler"},"1681":{"probe_name":"mpi-api","function_name":"PMPI_Session_finalize"},"1682":{"probe_name":"mpi-api","function_name":"PMPI_Session_get_errhandler"},"1683":{"probe_name":"mpi-api","function_name":"PMPI_Session_get_info"},"1684":{"probe_name":"mpi-api","function_name":"PMPI_Session_get_nth_pset"},"1685":{"probe_name":"mpi-api","function_name":"PMPI_Session_get_num_psets"},"1686":{"probe_name":"mpi-api","function_name":"PMPI_Session_get_pset_info"},"1687":{"probe_name":"mpi-api","function_name":"PMPI_Session_init"},"1688":{"probe_name":"mpi-api","function_name":"PMPI_Session_set_errhandler"},"1689":{"probe_name":"mpi-api","function_name":"PMPI_Ssend"},"1690":{"probe_name":"mpi-api","function_name":"PMPI_Ssend.cold"},"1691":{"probe_name":"mpi-api","function_name":"PMPI_Ssend_c"},"1692":{"probe_name":"mpi-api","function_name":"PMPI_Ssend_c.cold"},"1693":{"probe_name":"mpi-api","function_name":"PMPI_Ssend_init"},"1694":{"probe_name":"mpi-api","function_name":"PMPI_Ssend_init.cold"},"1695":{"probe_name":"mpi-api","function_name":"PMPI_Ssend_init_c"},"1696":{"probe_name":"mpi-api","function_name":"PMPI_Ssend_init_c.cold"},"1697":{"probe_name":"mpi-api","function_name":"PMPI_Start"},"1698":{"probe_name":"mpi-api","function_name":"PMPI_Startall"},"1699":{"probe_name":"mpi-api","function_name":"PMPI_Status_c2f"},"1700":{"probe_name":"mpi-api","function_name":"PMPI_Status_f2c"},"1701":{"probe_name":"mpi-api","function_name":"PMPI_Status_set_cancelled"},"1702":{"probe_name":"mpi-api","function_name":"PMPI_Status_set_elements"},"1703":{"probe_name":"mpi-api","function_name":"PMPI_Status_set_elements_c"},"1704":{"probe_name":"mpi-api","function_name":"PMPI_Status_set_elements_x"},"1705":{"probe_name":"mpi-api","function_name":"PMPI_T_category_changed"},"1706":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_categories"},"1707":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_cvars"},"1708":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_events"},"1709":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_index"},"1710":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_info"},"1711":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_num"},"1712":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_num_events"},"1713":{"probe_name":"mpi-api","function_name":"PMPI_T_category_get_pvars"},"1714":{"probe_name":"mpi-api","function_name":"PMPI_T_cvar_get_index"},"1715":{"probe_name":"mpi-api","function_name":"PMPI_T_cvar_get_info"},"1716":{"probe_name":"mpi-api","function_name":"PMPI_T_cvar_get_num"},"1717":{"probe_name":"mpi-api","function_name":"PMPI_T_cvar_handle_alloc"},"1718":{"probe_name":"mpi-api","function_name":"PMPI_T_cvar_handle_free"},"1719":{"probe_name":"mpi-api","function_name":"PMPI_T_cvar_read"},"1720":{"probe_name":"mpi-api","function_name":"PMPI_T_cvar_write"},"1721":{"probe_name":"mpi-api","function_name":"PMPI_T_enum_get_info"},"1722":{"probe_name":"mpi-api","function_name":"PMPI_T_enum_get_item"},"1723":{"probe_name":"mpi-api","function_name":"PMPI_T_event_callback_get_info"},"1724":{"probe_name":"mpi-api","function_name":"PMPI_T_event_callback_set_info"},"1725":{"probe_name":"mpi-api","function_name":"PMPI_T_event_copy"},"1726":{"probe_name":"mpi-api","function_name":"PMPI_T_event_get_index"},"1727":{"probe_name":"mpi-api","function_name":"PMPI_T_event_get_info"},"1728":{"probe_name":"mpi-api","function_name":"PMPI_T_event_get_num"},"1729":{"probe_name":"mpi-api","function_name":"PMPI_T_event_get_source"},"1730":{"probe_name":"mpi-api","function_name":"PMPI_T_event_get_timestamp"},"1731":{"probe_name":"mpi-api","function_name":"PMPI_T_event_handle_alloc"},"1732":{"probe_name":"mpi-api","function_name":"PMPI_T_event_handle_free"},"1733":{"probe_name":"mpi-api","function_name":"PMPI_T_event_handle_get_info"},"1734":{"probe_name":"mpi-api","function_name":"PMPI_T_event_handle_set_info"},"1735":{"probe_name":"mpi-api","function_name":"PMPI_T_event_read"},"1736":{"probe_name":"mpi-api","function_name":"PMPI_T_event_register_callback"},"1737":{"probe_name":"mpi-api","function_name":"PMPI_T_event_set_dropped_handler"},"1738":{"probe_name":"mpi-api","function_name":"PMPI_T_finalize"},"1739":{"probe_name":"mpi-api","function_name":"PMPI_T_init_thread"},"1740":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_get_index"},"1741":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_get_info"},"1742":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_get_info.cold"},"1743":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_get_num"},"1744":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_handle_alloc"},"1745":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_handle_alloc.cold"},"1746":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_handle_free"},"1747":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_read"},"1748":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_readreset"},"1749":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_reset"},"1750":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_session_create"},"1751":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_session_free"},"1752":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_start"},"1753":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_stop"},"1754":{"probe_name":"mpi-api","function_name":"PMPI_T_pvar_write"},"1755":{"probe_name":"mpi-api","function_name":"PMPI_T_source_get_info"},"1756":{"probe_name":"mpi-api","function_name":"PMPI_T_source_get_num"},"1757":{"probe_name":"mpi-api","function_name":"PMPI_T_source_get_timestamp"},"1758":{"probe_name":"mpi-api","function_name":"PMPI_Test"},"1759":{"probe_name":"mpi-api","function_name":"PMPI_Test_cancelled"},"1760":{"probe_name":"mpi-api","function_name":"PMPI_Testall"},"1761":{"probe_name":"mpi-api","function_name":"PMPI_Testany"},"1762":{"probe_name":"mpi-api","function_name":"PMPI_Testsome"},"1763":{"probe_name":"mpi-api","function_name":"PMPI_Topo_test"},"1764":{"probe_name":"mpi-api","function_name":"PMPI_Type_commit"},"1765":{"probe_name":"mpi-api","function_name":"PMPI_Type_contiguous"},"1766":{"probe_name":"mpi-api","function_name":"PMPI_Type_contiguous_c"},"1767":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_darray"},"1768":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_darray_c"},"1769":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_f90_complex"},"1770":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_f90_integer"},"1771":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_f90_real"},"1772":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_hindexed"},"1773":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_hindexed_block"},"1774":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_hindexed_block_c"},"1775":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_hindexed_c"},"1776":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_hvector"},"1777":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_hvector_c"},"1778":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_indexed_block"},"1779":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_indexed_block_c"},"1780":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_keyval"},"1781":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_resized"},"1782":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_resized_c"},"1783":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_struct"},"1784":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_struct_c"},"1785":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_subarray"},"1786":{"probe_name":"mpi-api","function_name":"PMPI_Type_create_subarray_c"},"1787":{"probe_name":"mpi-api","function_name":"PMPI_Type_delete_attr"},"1788":{"probe_name":"mpi-api","function_name":"PMPI_Type_dup"},"1789":{"probe_name":"mpi-api","function_name":"PMPI_Type_extent"},"1790":{"probe_name":"mpi-api","function_name":"PMPI_Type_free"},"1791":{"probe_name":"mpi-api","function_name":"PMPI_Type_free_keyval"},"1792":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_attr"},"1793":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_contents"},"1794":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_contents_c"},"1795":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_envelope"},"1796":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_envelope_c"},"1797":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_extent"},"1798":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_extent_c"},"1799":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_extent_x"},"1800":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_name"},"1801":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_true_extent"},"1802":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_true_extent_c"},"1803":{"probe_name":"mpi-api","function_name":"PMPI_Type_get_true_extent_x"},"1804":{"probe_name":"mpi-api","function_name":"PMPI_Type_hindexed"},"1805":{"probe_name":"mpi-api","function_name":"PMPI_Type_hvector"},"1806":{"probe_name":"mpi-api","function_name":"PMPI_Type_indexed"},"1807":{"probe_name":"mpi-api","function_name":"PMPI_Type_indexed_c"},"1808":{"probe_name":"mpi-api","function_name":"PMPI_Type_lb"},"1809":{"probe_name":"mpi-api","function_name":"PMPI_Type_match_size"},"1810":{"probe_name":"mpi-api","function_name":"PMPI_Type_set_attr"},"1811":{"probe_name":"mpi-api","function_name":"PMPI_Type_set_name"},"1812":{"probe_name":"mpi-api","function_name":"PMPI_Type_size"},"1813":{"probe_name":"mpi-api","function_name":"PMPI_Type_size_c"},"1814":{"probe_name":"mpi-api","function_name":"PMPI_Type_size_x"},"1815":{"probe_name":"mpi-api","function_name":"PMPI_Type_struct"},"1816":{"probe_name":"mpi-api","function_name":"PMPI_Type_ub"},"1817":{"probe_name":"mpi-api","function_name":"PMPI_Type_vector"},"1818":{"probe_name":"mpi-api","function_name":"PMPI_Type_vector_c"},"1819":{"probe_name":"mpi-api","function_name":"PMPI_Unpack"},"1820":{"probe_name":"mpi-api","function_name":"PMPI_Unpack.cold"},"1821":{"probe_name":"mpi-api","function_name":"PMPI_Unpack_c"},"1822":{"probe_name":"mpi-api","function_name":"PMPI_Unpack_c.cold"},"1823":{"probe_name":"mpi-api","function_name":"PMPI_Unpack_external"},"1824":{"probe_name":"mpi-api","function_name":"PMPI_Unpack_external.cold"},"1825":{"probe_name":"mpi-api","function_name":"PMPI_Unpack_external_c"},"1826":{"probe_name":"mpi-api","function_name":"PMPI_Unpack_external_c.cold"},"1827":{"probe_name":"mpi-api","function_name":"PMPI_Unpublish_name"},"1828":{"probe_name":"mpi-api","function_name":"PMPI_Wait"},"1829":{"probe_name":"mpi-api","function_name":"PMPI_Waitall"},"1830":{"probe_name":"mpi-api","function_name":"PMPI_Waitany"},"1831":{"probe_name":"mpi-api","function_name":"PMPI_Waitsome"},"1832":{"probe_name":"mpi-api","function_name":"PMPI_Win_allocate"},"1833":{"probe_name":"mpi-api","function_name":"PMPI_Win_allocate_c"},"1834":{"probe_name":"mpi-api","function_name":"PMPI_Win_allocate_shared"},"1835":{"probe_name":"mpi-api","function_name":"PMPI_Win_allocate_shared_c"},"1836":{"probe_name":"mpi-api","function_name":"PMPI_Win_attach"},"1837":{"probe_name":"mpi-api","function_name":"PMPI_Win_call_errhandler"},"1838":{"probe_name":"mpi-api","function_name":"PMPI_Win_complete"},"1839":{"probe_name":"mpi-api","function_name":"PMPI_Win_complete.cold"},"1840":{"probe_name":"mpi-api","function_name":"PMPI_Win_create"},"1841":{"probe_name":"mpi-api","function_name":"PMPI_Win_create_c"},"1842":{"probe_name":"mpi-api","function_name":"PMPI_Win_create_dynamic"},"1843":{"probe_name":"mpi-api","function_name":"PMPI_Win_create_errhandler"},"1844":{"probe_name":"mpi-api","function_name":"PMPI_Win_create_keyval"},"1845":{"probe_name":"mpi-api","function_name":"PMPI_Win_delete_attr"},"1846":{"probe_name":"mpi-api","function_name":"PMPI_Win_detach"},"1847":{"probe_name":"mpi-api","function_name":"PMPI_Win_fence"},"1848":{"probe_name":"mpi-api","function_name":"PMPI_Win_flush"},"1849":{"probe_name":"mpi-api","function_name":"PMPI_Win_flush_all"},"1850":{"probe_name":"mpi-api","function_name":"PMPI_Win_flush_all.cold"},"1851":{"probe_name":"mpi-api","function_name":"PMPI_Win_flush_local"},"1852":{"probe_name":"mpi-api","function_name":"PMPI_Win_flush_local_all"},"1853":{"probe_name":"mpi-api","function_name":"PMPI_Win_flush_local_all.cold"},"1854":{"probe_name":"mpi-api","function_name":"PMPI_Win_free"},"1855":{"probe_name":"mpi-api","function_name":"PMPI_Win_free_keyval"},"1856":{"probe_name":"mpi-api","function_name":"PMPI_Win_get_attr"},"1857":{"probe_name":"mpi-api","function_name":"PMPI_Win_get_errhandler"},"1858":{"probe_name":"mpi-api","function_name":"PMPI_Win_get_group"},"1859":{"probe_name":"mpi-api","function_name":"PMPI_Win_get_info"},"1860":{"probe_name":"mpi-api","function_name":"PMPI_Win_get_name"},"1861":{"probe_name":"mpi-api","function_name":"PMPI_Win_lock"},"1862":{"probe_name":"mpi-api","function_name":"PMPI_Win_lock_all"},"1863":{"probe_name":"mpi-api","function_name":"PMPI_Win_post"},"1864":{"probe_name":"mpi-api","function_name":"PMPI_Win_post.cold"},"1865":{"probe_name":"mpi-api","function_name":"PMPI_Win_set_attr"},"1866":{"probe_name":"mpi-api","function_name":"PMPI_Win_set_errhandler"},"1867":{"probe_name":"mpi-api","function_name":"PMPI_Win_set_info"},"1868":{"probe_name":"mpi-api","function_name":"PMPI_Win_set_name"},"1869":{"probe_name":"mpi-api","function_name":"PMPI_Win_shared_query"},"1870":{"probe_name":"mpi-api","function_name":"PMPI_Win_shared_query.cold"},"1871":{"probe_name":"mpi-api","function_name":"PMPI_Win_shared_query_c"},"1872":{"probe_name":"mpi-api","function_name":"PMPI_Win_shared_query_c.cold"},"1873":{"probe_name":"mpi-api","function_name":"PMPI_Win_start"},"1874":{"probe_name":"mpi-api","function_name":"PMPI_Win_sync"},"1875":{"probe_name":"mpi-api","function_name":"PMPI_Win_sync.cold"},"1876":{"probe_name":"mpi-api","function_name":"PMPI_Win_test"},"1877":{"probe_name":"mpi-api","function_name":"PMPI_Win_unlock"},"1878":{"probe_name":"mpi-api","function_name":"PMPI_Win_unlock_all"},"1879":{"probe_name":"mpi-api","function_name":"PMPI_Win_unlock_all.cold"},"1880":{"probe_name":"mpi-api","function_name":"PMPI_Win_wait"},"1881":{"probe_name":"mpi-api","function_name":"PMPI_Win_wait.cold"},"1882":{"probe_name":"mpi-api","function_name":"PMPI_Wtick"},"1883":{"probe_name":"mpi-api","function_name":"PMPI_Wtime"},"1884":{"probe_name":"mpii","function_name":"MPII_Algo_compare_int"},"1885":{"probe_name":"mpii","function_name":"MPII_Allreduce_group"},"1886":{"probe_name":"mpii","function_name":"MPII_Allreduce_group_intra"},"1887":{"probe_name":"mpii","function_name":"MPII_Allreduce_group_intra.cold"},"1888":{"probe_name":"mpii","function_name":"MPII_Attr_copy_c_proxy"},"1889":{"probe_name":"mpii","function_name":"MPII_Attr_delete_c_proxy"},"1890":{"probe_name":"mpii","function_name":"MPII_Call_finalize_callbacks"},"1891":{"probe_name":"mpii","function_name":"MPII_Coll_comm_cleanup"},"1892":{"probe_name":"mpii","function_name":"MPII_Coll_finalize"},"1893":{"probe_name":"mpii","function_name":"MPII_Coll_init"},"1894":{"probe_name":"mpii","function_name":"MPII_CommL_forget"},"1895":{"probe_name":"mpii","function_name":"MPII_CommL_remember"},"1896":{"probe_name":"mpii","function_name":"MPII_Comm_check_hints"},"1897":{"probe_name":"mpii","function_name":"MPII_Comm_copy"},"1898":{"probe_name":"mpii","function_name":"MPII_Comm_copy_data"},"1899":{"probe_name":"mpii","function_name":"MPII_Comm_create_calculate_mapping"},"1900":{"probe_name":"mpii","function_name":"MPII_Comm_create_local_group"},"1901":{"probe_name":"mpii","function_name":"MPII_Comm_create_map"},"1902":{"probe_name":"mpii","function_name":"MPII_Comm_dup"},"1903":{"probe_name":"mpii","function_name":"MPII_Comm_get_attr"},"1904":{"probe_name":"mpii","function_name":"MPII_Comm_get_hints"},"1905":{"probe_name":"mpii","function_name":"MPII_Comm_init"},"1906":{"probe_name":"mpii","function_name":"MPII_Comm_is_node_balanced"},"1907":{"probe_name":"mpii","function_name":"MPII_Comm_is_node_consecutive"},"1908":{"probe_name":"mpii","function_name":"MPII_Comm_set_attr"},"1909":{"probe_name":"mpii","function_name":"MPII_Comm_set_hints"},"1910":{"probe_name":"mpii","function_name":"MPII_Create_container"},"1911":{"probe_name":"mpii","function_name":"MPII_Dataloop_alloc"},"1912":{"probe_name":"mpii","function_name":"MPII_Dataloop_alloc_and_copy"},"1913":{"probe_name":"mpii","function_name":"MPII_Dataloop_segment_flatten"},"1914":{"probe_name":"mpii","function_name":"MPII_Dataloop_stackelm_blocksize"},"1915":{"probe_name":"mpii","function_name":"MPII_Dataloop_stackelm_load"},"1916":{"probe_name":"mpii","function_name":"MPII_Dataloop_stackelm_offset"},"1917":{"probe_name":"mpii","function_name":"MPII_Dataloop_stream_size"},"1918":{"probe_name":"mpii","function_name":"MPII_Dataloop_update"},"1919":{"probe_name":"mpii","function_name":"MPII_Datatype_attr_finalize"},"1920":{"probe_name":"mpii","function_name":"MPII_Datatype_blockindexed_count_contig"},"1921":{"probe_name":"mpii","function_name":"MPII_Datatype_indexed_count_contig"},"1922":{"probe_name":"mpii","function_name":"MPII_Datatype_printf"},"1923":{"probe_name":"mpii","function_name":"MPII_Debugq_forget"},"1924":{"probe_name":"mpii","function_name":"MPII_Debugq_remember"},"1925":{"probe_name":"mpii","function_name":"MPII_Debugq_remember.cold"},"1926":{"probe_name":"mpii","function_name":"MPII_Finalize"},"1927":{"probe_name":"mpii","function_name":"MPII_Genutil_progress_hook"},"1928":{"probe_name":"mpii","function_name":"MPII_Genutil_sched_poke"},"1929":{"probe_name":"mpii","function_name":"MPII_Genutil_vtx_add_dependencies"},"1930":{"probe_name":"mpii","function_name":"MPII_Genutil_vtx_add_dependencies.cold"},"1931":{"probe_name":"mpii","function_name":"MPII_Genutil_vtx_copy"},"1932":{"probe_name":"mpii","function_name":"MPII_Genutil_vtx_create"},"1933":{"probe_name":"mpii","function_name":"MPII_Genutil_vtx_create.cold"},"1934":{"probe_name":"mpii","function_name":"MPII_Genutil_vtx_dtor"},"1935":{"probe_name":"mpii","function_name":"MPII_Grequest_set_lang_f77"},"1936":{"probe_name":"mpii","function_name":"MPII_Grequest_set_lang_f77.cold"},"1937":{"probe_name":"mpii","function_name":"MPII_Group_setup_lpid_list"},"1938":{"probe_name":"mpii","function_name":"MPII_Iallgatherv_is_displs_ordered"},"1939":{"probe_name":"mpii","function_name":"MPII_Ibcast_sched_add_length"},"1940":{"probe_name":"mpii","function_name":"MPII_Ibcast_sched_init_length"},"1941":{"probe_name":"mpii","function_name":"MPII_Ibcast_sched_test_curr_length"},"1942":{"probe_name":"mpii","function_name":"MPII_Ibcast_sched_test_length"},"1943":{"probe_name":"mpii","function_name":"MPII_Init_thread"},"1944":{"probe_name":"mpii","function_name":"MPII_Iscatter_for_bcast_sched"},"1945":{"probe_name":"mpii","function_name":"MPII_Keyval_set_proxy"},"1946":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_comm_cleanup"},"1947":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_comm_init"},"1948":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_get_count_and_offset"},"1949":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_get_neighbors"},"1950":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_init"},"1951":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_origrank_to_step2rank"},"1952":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_reverse_digits_step2"},"1953":{"probe_name":"mpii","function_name":"MPII_Recexchalgo_step2rank_to_origrank"},"1954":{"probe_name":"mpii","function_name":"MPII_Scatter_for_bcast"},"1955":{"probe_name":"mpii","function_name":"MPII_Segment_manipulate"},"1956":{"probe_name":"mpii","function_name":"MPII_Segment_manipulate.cold"},"1957":{"probe_name":"mpii","function_name":"MPII_Setup_intercomm_localcomm"},"1958":{"probe_name":"mpii","function_name":"MPII_Stubalgo_comm_cleanup"},"1959":{"probe_name":"mpii","function_name":"MPII_Stubalgo_comm_init"},"1960":{"probe_name":"mpii","function_name":"MPII_Stubalgo_init"},"1961":{"probe_name":"mpii","function_name":"MPII_TSP_comm_cleanup"},"1962":{"probe_name":"mpii","function_name":"MPII_TSP_comm_init"},"1963":{"probe_name":"mpii","function_name":"MPII_TSP_finalize"},"1964":{"probe_name":"mpii","function_name":"MPII_TSP_init"},"1965":{"probe_name":"mpii","function_name":"MPII_TSP_scheds_are_pending"},"1966":{"probe_name":"mpii","function_name":"MPII_Treealgo_comm_cleanup"},"1967":{"probe_name":"mpii","function_name":"MPII_Treealgo_comm_init"},"1968":{"probe_name":"mpii","function_name":"MPII_Treealgo_init"},"1969":{"probe_name":"mpii","function_name":"MPII_Treeutil_tree_kary_init"},"1970":{"probe_name":"mpii","function_name":"MPII_Treeutil_tree_knomial_1_init"},"1971":{"probe_name":"mpii","function_name":"MPII_Treeutil_tree_knomial_2_init"},"1972":{"probe_name":"mpii","function_name":"MPII_Type_get_attr"},"1973":{"probe_name":"mpii","function_name":"MPII_Type_set_attr"},"1974":{"probe_name":"mpii","function_name":"MPII_Type_zerolen"},"1975":{"probe_name":"mpii","function_name":"MPII_Typerep_basic_type_is_complex"},"1976":{"probe_name":"mpii","function_name":"MPII_Typerep_basic_type_is_unsigned"},"1977":{"probe_name":"mpii","function_name":"MPII_Typerep_convert_darray"},"1978":{"probe_name":"mpii","function_name":"MPII_Typerep_convert_darray.cold"},"1979":{"probe_name":"mpii","function_name":"MPII_Typerep_convert_subarray"},"1980":{"probe_name":"mpii","function_name":"MPII_Typerep_convert_subarray.cold"},"1981":{"probe_name":"mpii","function_name":"MPII_Typerep_get_basic_size_external32"},"1982":{"probe_name":"mpii","function_name":"MPII_Typerep_op_fallback"},"1983":{"probe_name":"mpii","function_name":"MPII_Typerep_op_fallback.cold"},"1984":{"probe_name":"mpii","function_name":"MPII_Wait_for_debugger"},"1985":{"probe_name":"mpii","function_name":"MPII_Win_get_attr"},"1986":{"probe_name":"mpii","function_name":"MPII_Win_set_attr"},"1987":{"probe_name":"mpii","function_name":"MPII_compare_info_hint"},"1988":{"probe_name":"mpii","function_name":"MPII_dump_debug_summary"},"1989":{"probe_name":"mpii","function_name":"MPII_finalize_async"},"1990":{"probe_name":"mpii","function_name":"MPII_finalize_builtin_infos"},"1991":{"probe_name":"mpii","function_name":"MPII_hwtopo_finalize"},"1992":{"probe_name":"mpii","function_name":"MPII_hwtopo_init"},"1993":{"probe_name":"mpii","function_name":"MPII_init_async"},"1994":{"probe_name":"mpii","function_name":"MPII_init_binding_cxx"},"1995":{"probe_name":"mpii","function_name":"MPII_init_builtin_infos"},"1996":{"probe_name":"mpii","function_name":"MPII_init_dbg_logging"},"1997":{"probe_name":"mpii","function_name":"MPII_init_local_proc_attrs"},"1998":{"probe_name":"mpii","function_name":"MPII_init_request"},"1999":{"probe_name":"mpii","function_name":"MPII_init_tag_ub"},"2000":{"probe_name":"mpii","function_name":"MPII_init_windows"},"2001":{"probe_name":"mpii","function_name":"MPII_nettopo_finalize"},"2002":{"probe_name":"mpii","function_name":"MPII_nettopo_init"},"2003":{"probe_name":"mpii","function_name":"MPII_pre_init_dbg_logging"},"2004":{"probe_name":"mpii","function_name":"MPII_thread_mutex_create"},"2005":{"probe_name":"mpii","function_name":"MPII_thread_mutex_destroy"},"2006":{"probe_name":"mpi-rest","function_name":"ADIOI_Agg_idx"},"2007":{"probe_name":"mpi-rest","function_name":"ADIOI_Build_agg_reqs"},"2008":{"probe_name":"mpi-rest","function_name":"ADIOI_Build_client_pre_req"},"2009":{"probe_name":"mpi-rest","function_name":"ADIOI_Build_client_req"},"2010":{"probe_name":"mpi-rest","function_name":"ADIOI_Build_client_reqs"},"2011":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_ADIO_Open"},"2012":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Calc_aggregator_pfl"},"2013":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Calc_my_req"},"2014":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Calc_others_req"},"2015":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Exch_and_write"},"2016":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Fill_send_buffer"},"2017":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Fill_user_buffer"},"2018":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Get_last_stripe_size"},"2019":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Heap_merge"},"2020":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Open"},"2021":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Parse_comp_layout_opt"},"2022":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_R_Exchange_data"},"2023":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_ReadContig"},"2024":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_ReadContig_async"},"2025":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_ReadStridedColl"},"2026":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_ReadStrided_naive"},"2027":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Read_and_exch"},"2028":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_SetInfo"},"2029":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_Sort_off_len"},"2030":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_W_Exchange_data"},"2031":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_WriteContig"},"2032":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_WriteContig_async"},"2033":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_WriteStridedColl"},"2034":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_WriteStrided_naive"},"2035":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_aio_init"},"2036":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_aio_request_find"},"2037":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_aio_request_release"},"2038":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_aio_request_wait"},"2039":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_aio_request_wait_1"},"2040":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_aio_request_wrapup"},"2041":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_cb_nidlist_assign"},"2042":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_cb_nidlist_init"},"2043":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_cb_ranklist_build"},"2044":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_dump_keys"},"2045":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_dvs_real_fstype"},"2046":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_getenv_mpiio_hints"},"2047":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_getrtc"},"2048":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_group_lock_ioctl"},"2049":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_group_lock_unlock_ioctl_noreduce"},"2050":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_group_unlock_ioctl"},"2051":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_io_trace"},"2052":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_is_aggregator"},"2053":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_llapi_ladvise"},"2054":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_llapi_ladvise_noexpand"},"2055":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_lock_ahead"},"2056":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_prepend_fs"},"2057":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_request_only_lock_ioctl"},"2058":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_stats_report"},"2059":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_test_ladvise"},"2060":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_timers_read_report"},"2061":{"probe_name":"mpi-rest","function_name":"ADIOI_CRAY_timers_write_report"},"2062":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_aggregator"},"2063":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_bounds"},"2064":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_file_domains"},"2065":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_file_realms"},"2066":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_file_realms_aar"},"2067":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_file_realms_fsize"},"2068":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_file_realms_user_size"},"2069":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_my_off_len"},"2070":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_my_req"},"2071":{"probe_name":"mpi-rest","function_name":"ADIOI_Calc_others_req"},"2072":{"probe_name":"mpi-rest","function_name":"ADIOI_Calloc_fn"},"2073":{"probe_name":"mpi-rest","function_name":"ADIOI_Create_fr_simpletype"},"2074":{"probe_name":"mpi-rest","function_name":"ADIOI_Datatype_iscontig"},"2075":{"probe_name":"mpi-rest","function_name":"ADIOI_End_call"},"2076":{"probe_name":"mpi-rest","function_name":"ADIOI_Err_create_code"},"2077":{"probe_name":"mpi-rest","function_name":"ADIOI_Exch_and_write:0x74adc8"},"2078":{"probe_name":"mpi-rest","function_name":"ADIOI_Exch_and_write:0x7b8d5d"},"2079":{"probe_name":"mpi-rest","function_name":"ADIOI_Exch_file_views"},"2080":{"probe_name":"mpi-rest","function_name":"ADIOI_FAILSAFE_OpenColl"},"2081":{"probe_name":"mpi-rest","function_name":"ADIOI_FAKE_IOComplete"},"2082":{"probe_name":"mpi-rest","function_name":"ADIOI_FAKE_IODone"},"2083":{"probe_name":"mpi-rest","function_name":"ADIOI_FAKE_IreadContig"},"2084":{"probe_name":"mpi-rest","function_name":"ADIOI_FAKE_IreadStrided"},"2085":{"probe_name":"mpi-rest","function_name":"ADIOI_FAKE_IwriteContig"},"2086":{"probe_name":"mpi-rest","function_name":"ADIOI_FAKE_IwriteStrided"},"2087":{"probe_name":"mpi-rest","function_name":"ADIOI_Fill_send_buffer:0x74cceb"},"2088":{"probe_name":"mpi-rest","function_name":"ADIOI_Fill_send_buffer:0x7ba6d4"},"2089":{"probe_name":"mpi-rest","function_name":"ADIOI_Fill_send_buffer_nosend"},"2090":{"probe_name":"mpi-rest","function_name":"ADIOI_Fill_user_buffer:0x74824a"},"2091":{"probe_name":"mpi-rest","function_name":"ADIOI_Fill_user_buffer:0x7b1fcf"},"2092":{"probe_name":"mpi-rest","function_name":"ADIOI_Flatten_and_find"},"2093":{"probe_name":"mpi-rest","function_name":"ADIOI_Flatten_datatype"},"2094":{"probe_name":"mpi-rest","function_name":"ADIOI_Flattened_type_copy"},"2095":{"probe_name":"mpi-rest","function_name":"ADIOI_Flattened_type_delete"},"2096":{"probe_name":"mpi-rest","function_name":"ADIOI_Free_fn"},"2097":{"probe_name":"mpi-rest","function_name":"ADIOI_Free_my_req"},"2098":{"probe_name":"mpi-rest","function_name":"ADIOI_Free_others_req"},"2099":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_Close"},"2100":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_Delete"},"2101":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_Fcntl"},"2102":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_Feature"},"2103":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_Flush"},"2104":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IOComplete"},"2105":{"probe_name":"mpi-rest","function_name":"ADIOI_GEN_IODone"},"3354":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1ffea0"},"3355":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x21b900"},"3356":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x22ee20"},"3357":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x23f420"},"3358":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x250a40"},"3359":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x259b10"},"3360":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x26d640"},"3361":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x277760"},"3362":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x28a960"},"3363":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x293f50"},"3364":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2a8140"},"3365":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2b5340"},"3366":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2c79b0"},"3367":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2d7100"},"3368":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2e6920"},"3369":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2f6080"},"3370":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x305830"},"3371":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x3163f0"},"3372":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x325130"},"3373":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x337c80"},"3374":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x346820"},"3375":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x3544c0"},"3376":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x364b90"},"3377":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x375150"},"3378":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x41a720"},"3379":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4561e0"},"3380":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4777d0"},"3381":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4928a0"},"3382":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4b6710"},"3383":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4f6190"},"3384":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5058f0"},"3385":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x51c670"},"3386":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x52ea50"},"3387":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x546e10"},"3388":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x560850"},"3389":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5bc490"},"3390":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5c9430"},"3391":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5e0640"},"3392":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5e8e20"},"3393":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5f9a90"},"3394":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x60c7e0"},"3395":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x616b40"},"3396":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x62ed10"},"3397":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x66e6f0"},"3398":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x68c590"},"3399":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x69d6a0"},"3400":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x6b6e70"},"3401":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x6ba880"},"3402":{"probe_name":"mpi-rest","function_name":"MPIDIU_comm_rank_to_pid.isra.0"},"3403":{"probe_name":"mpi-rest","function_name":"MPIDIU_free_avt"},"3404":{"probe_name":"mpi-rest","function_name":"MPIDIU_get_avt_size"},"3405":{"probe_name":"mpi-rest","function_name":"MPIDIU_get_n_avts"},"3406":{"probe_name":"mpi-rest","function_name":"MPIDIU_get_node_id"},"3407":{"probe_name":"mpi-rest","function_name":"MPIDIU_get_node_id.cold"},"3408":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_destroy"},"3409":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x106f10"},"3410":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x10c190"},"3411":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x111550"},"3412":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x11d800"},"3413":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x131ca0"},"3414":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x1467c0"},"3415":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x151380"},"3416":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x167f40"},"3417":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x17ba30"},"3418":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x190800"},"3419":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x1a7f90"},"3420":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x1b49d0"},"3421":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x1c83d0"},"3422":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x1d18b0"},"3423":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x1e8c70"},"3424":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x1ff630"},"3425":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x21b080"},"3426":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x22e5d0"},"3427":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x23eb70"},"3428":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x250730"},"3429":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x259290"},"3430":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x26d320"},"3431":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x276eb0"},"3432":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x28a620"},"3433":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x2936a0"},"3434":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x2a7df0"},"3435":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x2b4ac0"},"3436":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x2c7130"},"3437":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x2d6880"},"3438":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x2e60a0"},"3439":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x2f5800"},"3440":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x304fb0"},"3441":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x315bd0"},"3442":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x324820"},"3443":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x337460"},"3444":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x3460b0"},"3445":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x353c40"},"3446":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x3643c0"},"3447":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x374930"},"3448":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x419cd0"},"3449":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x455950"},"3450":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x476e20"},"3451":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x492130"},"3452":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x4b5f40"},"3453":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x4f59e0"},"3454":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x504e80"},"3455":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x51be90"},"3456":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x52dbb0"},"3457":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x546660"},"3458":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x55fde0"},"3459":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x5c8a50"},"3460":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x5dfd10"},"3461":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x5e87d0"},"3462":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x5f8e60"},"3463":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x60c4d0"},"3464":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x612a00"},"3465":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x616270"},"3466":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x62e4a0"},"3467":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x644b90"},"3468":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x64c8c0"},"3469":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x65e050"},"3470":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x6674c0"},"3471":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x66de00"},"3472":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x68bb80"},"3473":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x69cef0"},"3474":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_lookup:0x6b9c60"},"3475":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_set_unsafe"},"3476":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_set_unsafe.constprop.0"},"3477":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x107370"},"3478":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x10c5f0"},"3479":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1119b0"},"3480":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x11f590"},"3481":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x133a90"},"3482":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x147970"},"3483":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1532f0"},"3484":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x169eb0"},"3485":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x17d7c0"},"3486":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1925f0"},"3487":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1a8f30"},"3488":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1b69e0"},"3489":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1c8b00"},"3490":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1d38c0"},"3491":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x1eab40"},"3492":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x201500"},"3493":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x21cff0"},"3494":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x230510"},"3495":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x240b10"},"3496":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x2512a0"},"3497":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x25b200"},"3498":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x26dea0"},"3499":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x278e50"},"3500":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x28b7d0"},"3501":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x295640"},"3502":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x2a8fb0"},"3503":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x2b6c70"},"3504":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x2c90a0"},"3505":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x2d87f0"},"3506":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x2e8010"},"3507":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x2f7770"},"3508":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x306f20"},"3509":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x317a20"},"3510":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x326760"},"3511":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x339070"},"3512":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x347c10"},"3513":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x355df0"},"3514":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x3664c0"},"3515":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x376540"},"3516":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x41bb40"},"3517":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x457a10"},"3518":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x478940"},"3519":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x493c90"},"3520":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x4b7b00"},"3521":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x4f7580"},"3522":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x506fa0"},"3523":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x51e3e0"},"3524":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x5300d0"},"3525":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x548200"},"3526":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x5620c0"},"3527":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x5cad80"},"3528":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x5e1650"},"3529":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x5e9fc0"},"3530":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x5fb910"},"3531":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x60d520"},"3532":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x613260"},"3533":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x618230"},"3534":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x630370"},"3535":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x645390"},"3536":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x64ec00"},"3537":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x65e990"},"3538":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x667d90"},"3539":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x670410"},"3540":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x68d9b0"},"3541":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x69ea90"},"3542":{"probe_name":"mpi-rest","function_name":"MPIDIU_map_update.constprop.0.isra.0:0x6bc1e0"},"3543":{"probe_name":"mpi-rest","function_name":"MPIDIU_new_avt"},"3544":{"probe_name":"mpi-rest","function_name":"MPIDIU_rank_to_lpid.cold:0x35c76"},"3545":{"probe_name":"mpi-rest","function_name":"MPIDIU_rank_to_lpid.cold:0x36cef"},"3546":{"probe_name":"mpi-rest","function_name":"MPIDIU_rank_to_lpid:0x146b00"},"3547":{"probe_name":"mpi-rest","function_name":"MPIDIU_rank_to_lpid:0x1a8360"},"3548":{"probe_name":"mpi-rest","function_name":"MPIDIU_release_lut"},"3549":{"probe_name":"mpi-rest","function_name":"MPIDIU_release_mlut"},"3550":{"probe_name":"mpi-rest","function_name":"MPIDIU_upids_to_gpids"},"3551":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x35599"},"3552":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x35936"},"3553":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x35df8"},"3554":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3621a"},"3555":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x36522"},"3556":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x368bf"},"3557":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x36f18"},"3558":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3748d"},"3559":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3783c"},"3560":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x37b52"},"3561":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x37e68"},"3562":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x381c3"},"3563":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x38430"},"3564":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x386e6"},"3565":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3883e"},"3566":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x38bbd"},"3567":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x38d36"},"3568":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x39099"},"3569":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x391f1"},"3570":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3956d"},"3571":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x396e6"},"3572":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3993b"},"3573":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x39b6f"},"3574":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x39da3"},"3575":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x39ff8"},"3576":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3a22c"},"3577":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3a481"},"3578":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3a67f"},"3579":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3a8ce"},"3580":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3aaed"},"3581":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3aceb"},"3582":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3af1f"},"3583":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3b174"},"3584":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3d354"},"3585":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3d735"},"3586":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3da9f"},"3587":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3dcc9"},"3588":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3e230"},"3589":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3ee0f"},"3590":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3f09d"},"3591":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3f3b3"},"3592":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3f5b1"},"3593":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3f869"},"3594":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x3fa67"},"3595":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x400ac"},"3596":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x4077f"},"3597":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x40aac"},"3598":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x40dc2"},"3599":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x4146f"},"3600":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x416a3"},"3601":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x418a1"},"3602":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank.cold:0x41b70"},"3603":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x11e2d0"},"3604":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x132550"},"3605":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x151e00"},"3606":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x1689c0"},"3607":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x17c500"},"3608":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x1910b0"},"3609":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x1b54e0"},"3610":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x1d23c0"},"3611":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x1e9620"},"3612":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x1fffe0"},"3613":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x21ba40"},"3614":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x22ef60"},"3615":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x23f560"},"3616":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x250b80"},"3617":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x259c50"},"3618":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x26d780"},"3619":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x2778a0"},"3620":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x28aaa0"},"3621":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x294090"},"3622":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x2a8280"},"3623":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x2b5480"},"3624":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x2c7af0"},"3625":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x2d7240"},"3626":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x2e6a60"},"3627":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x2f61c0"},"3628":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x305970"},"3629":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x316530"},"3630":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x325270"},"3631":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x337dc0"},"3632":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x346960"},"3633":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x354600"},"3634":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x364cd0"},"3635":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x375290"},"3636":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x41a860"},"3637":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x456320"},"3638":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x477910"},"3639":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x4929e0"},"3640":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x4b6850"},"3641":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x4f62d0"},"3642":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x505a30"},"3643":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x51c7b0"},"3644":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x52eb90"},"3645":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x546f50"},"3646":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x560990"},"3647":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x5c9570"},"3648":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x5f9bd0"},"3649":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x616c80"},"3650":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x62ee50"},"3651":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x66e830"},"3652":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x68c6d0"},"3653":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x69d7e0"},"3654":{"probe_name":"mpi-rest","function_name":"MPIDIU_valid_group_rank:0x6ba9c0"},"3655":{"probe_name":"mpi-rest","function_name":"MPIDI_Allgather_intra_composition_alpha"},"3656":{"probe_name":"mpi-rest","function_name":"MPIDI_Allgather_intra_composition_alpha.cold"},"3657":{"probe_name":"mpi-rest","function_name":"MPIDI_Allgather_intra_composition_beta.part.0"},"3658":{"probe_name":"mpi-rest","function_name":"MPIDI_Allreduce_intra_composition_alpha"},"3659":{"probe_name":"mpi-rest","function_name":"MPIDI_Allreduce_intra_composition_beta.part.0"},"3660":{"probe_name":"mpi-rest","function_name":"MPIDI_Allreduce_intra_composition_delta"},"3661":{"probe_name":"mpi-rest","function_name":"MPIDI_Allreduce_intra_composition_gamma.part.0"},"3662":{"probe_name":"mpi-rest","function_name":"MPIDI_Alltoall_intra_composition_alpha"},"3663":{"probe_name":"mpi-rest","function_name":"MPIDI_Alltoall_intra_composition_alpha.cold"},"3664":{"probe_name":"mpi-rest","function_name":"MPIDI_Alltoall_intra_composition_beta.part.0"},"3665":{"probe_name":"mpi-rest","function_name":"MPIDI_Barrier_intra_composition_beta.part.0"},"3666":{"probe_name":"mpi-rest","function_name":"MPIDI_Bcast_intra_composition_alpha"},"3667":{"probe_name":"mpi-rest","function_name":"MPIDI_Bcast_intra_composition_alpha.cold"},"3668":{"probe_name":"mpi-rest","function_name":"MPIDI_Bcast_intra_composition_beta"},"3669":{"probe_name":"mpi-rest","function_name":"MPIDI_Bcast_intra_composition_gamma.part.0"},"3670":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_COMMON_mpi_finalize_hook"},"3671":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_COMMON_mpi_init_hook"},"3672":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Clear_Bcast_Opt"},"3673":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Comm_create_hook"},"3674":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Comm_destroy_hook"},"3675":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_complete_recv"},"3676":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_complete_recv.cold"},"3677":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_ctrl_send_fin_cb"},"3678":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_ctrl_send_fin_cb.cold"},"3679":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_ctrl_send_rts_cb"},"3680":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_export_mem"},"3681":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_get_size"},"3682":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_import_mem"},"3683":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x35c7d"},"3684":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x35e62"},"3685":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x36284"},"3686":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x36da2"},"3687":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x36f82"},"3688":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x374f7"},"3689":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x3f129"},"3690":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x3fb29"},"3691":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x40138"},"3692":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x41bfc"},"3693":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x14a340"},"3694":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x156b10"},"3695":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x16d6d0"},"3696":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x1af980"},"3697":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x1ba210"},"3698":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x1d70f0"},"3699":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x50aad0"},"3700":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x51d810"},"3701":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x566700"},"3702":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x5ce5a0"},"3703":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x6bfd10"},"3704":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x378c8"},"3705":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x37bde"},"3706":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x3d7c1"},"3707":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x40b38"},"3708":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x40e4e"},"3709":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0:0x1ee650"},"3710":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0:0x205010"},"3711":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0:0x45b540"},"3712":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0:0x61bd40"},"3713":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_isend.isra.0:0x633e80"},"3714":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_progress"},"3715":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Common_lmt_unpack"},"3716":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Construct_Bcast_Tree"},"3717":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Detect_cpuid"},"3718":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Initialize_GPU_Coll_staging_buffers"},"3719":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_Setup_Shared_Mem_Coll"},"3720":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_XPMEM_do_attach"},"3721":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_XPMEM_mpi_finalize_hook"},"3722":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_XPMEM_mpi_init_hook"},"3723":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_alloc_mem_debug_info"},"3724":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_check_transparent_hp_status"},"3725":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_clr_numa_affinity"},"3726":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_collopt_process_env"},"3727":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_collopt_register_pvar_stats"},"3728":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_collopt_set_ANL_defaults"},"3729":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_collopt_set_defaults"},"3730":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_collopt_set_func_ptrs"},"3731":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_dump_hugetlb_dir"},"3732":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_dump_proc_buddyinfo.isra.0"},"3733":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_dump_proc_meminfo.isra.0"},"3734":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_dump_proc_slabinfo.isra.0"},"3735":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_edge_color"},"3736":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_finalize"},"3737":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_free_memory"},"3738":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_get_buddyinfo_info"},"3739":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_get_memory"},"3740":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_get_min_required_ofi_version"},"3741":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_get_mm_hugepages_info"},"3742":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_get_thread_mempolicy.constprop.0"},"3743":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_init"},"3744":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_init_memcpy"},"3745":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_local_get_freemem_info"},"3746":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_mem_dbg_finalize"},"3747":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_mpiio_init"},"3748":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_TC_str_to_mpich_val"},"3749":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_TC_str_to_ofi_val"},"3750":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_TC_val_mpich_to_ofi"},"3751":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_TC_val_ofi_to_mpich"},"3752":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_check_nic_symmetry"},"3753":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_create_connections"},"3754":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_create_global_connections"},"3755":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_create_nic_cache"},"3756":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_create_special_eps"},"3757":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_create_tclass_eps"},"3758":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_display_nic_info"},"3759":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_display_provider_envs"},"3760":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_free_nic_cache"},"3761":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_gather_cxi_counters"},"3762":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_get_cxi_version"},"3763":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_get_default_provider"},"3764":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_get_nic_index"},"3765":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_get_vni"},"3766":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_allreduce_join"},"3767":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_barrier_join"},"3768":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_bcast_join"},"3769":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_comm_add"},"3770":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_comm_free_all"},"3771":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_comm_remove"},"3772":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_data_promote_dn"},"3773":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_data_promote_up"},"3774":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_finalize"},"3775":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_hndl_comm_create"},"3776":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_hndl_destroy"},"3777":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_hndl_first_use"},"3778":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_init"},"3779":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_query"},"3780":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_hwcoll_wait"},"3781":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_init_cxi_counters"},"3782":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_nic_assign_policy"},"3783":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_nic_in_use"},"3784":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_nicaddr_to_str"},"3785":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_pmi_create_nic_cache"},"3786":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_pmi_get_local_nics"},"3787":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_scalable_startup"},"3788":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_select_nic_provider"},"3789":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_set_provider_defaults"},"3790":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_set_provider_overrides"},"3791":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_update_mr_flags"},"3792":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_ofi_win_set_tclass"},"3793":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_post_init"},"3794":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_print_pvar_stats"},"3795":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_rma_generic_register_pvar_stats"},"3796":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_set_numa_affinity"},"3797":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_set_thread_mempolicy.constprop.0"},"3798":{"probe_name":"mpi-rest","function_name":"MPIDI_CRAY_transparent_hp_update_stats"},"3799":{"probe_name":"mpi-rest","function_name":"MPIDI_CXI_choose_vni"},"3800":{"probe_name":"mpi-rest","function_name":"MPIDI_CXI_get_pid"},"3801":{"probe_name":"mpi-rest","function_name":"MPIDI_CXI_get_vni"},"3802":{"probe_name":"mpi-rest","function_name":"MPIDI_CXI_normal_free"},"3803":{"probe_name":"mpi-rest","function_name":"MPIDI_CXI_normal_malloc"},"3804":{"probe_name":"mpi-rest","function_name":"MPIDI_Comm_create_multi_leader_subcomms"},"3805":{"probe_name":"mpi-rest","function_name":"MPIDI_Comm_create_multi_leaders"},"3806":{"probe_name":"mpi-rest","function_name":"MPIDI_Comm_split_type"},"3807":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_coll_finalize"},"3808":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_coll_init"},"3809":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_barrier"},"3810":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_barrier_gather"},"3811":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_bcast"},"3812":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_bcast.cold"},"3813":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_check"},"3814":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_cleanup"},"3815":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_opt_cleanup"},"3816":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_opt_init"},"3817":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_reduce"},"3818":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_reduce.cold"},"3819":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_setup"},"3820":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_tree_reduce"},"3821":{"probe_name":"mpi-rest","function_name":"MPIDI_Cray_shared_mem_coll_tree_reduce.cold"},"3822":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_KT_Progress"},"3823":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_get_ipc_attr"},"3824":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_init_local"},"3825":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_init_world"},"3826":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_ipc_get_map_dev"},"3827":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_ipc_handle_cache_insert"},"3828":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_ipc_handle_map"},"3829":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_ipc_handle_unmap"},"3830":{"probe_name":"mpi-rest","function_name":"MPIDI_GPU_mpi_finalize_hook"},"3831":{"probe_name":"mpi-rest","function_name":"MPIDI_IPCI_copy_data"},"3832":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_ack_target_msg_cb"},"3833":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_ack_target_msg_cb.cold"},"3834":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_init_local"},"3835":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_init_world"},"3836":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_mpi_finalize_hook"},"3837":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_mpi_win_create_hook"},"3838":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_mpi_win_free_hook"},"3839":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_rndv_cb"},"3840":{"probe_name":"mpi-rest","function_name":"MPIDI_IPC_rndv_cb.cold"},"3841":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend.constprop.0:0x254470"},"3842":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend.constprop.0:0x28e830"},"3843":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x1251e0"},"3844":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x139890"},"3845":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x159200"},"3846":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x16fdc0"},"3847":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x183410"},"3848":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x1983f0"},"3849":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x1bc900"},"3850":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x1d97e0"},"3851":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x1f1500"},"3852":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x207ec0"},"3853":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x221d70"},"3854":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x235290"},"3855":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x245890"},"3856":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x25ff80"},"3857":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x2717b0"},"3858":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x27dbd0"},"3859":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x29a3c0"},"3860":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x2ac6e0"},"3861":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x2bba00"},"3862":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x2cde20"},"3863":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x2dd570"},"3864":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x2ecd90"},"3865":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x2fc4f0"},"3866":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x30bca0"},"3867":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x31c7b0"},"3868":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x32b4f0"},"3869":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x33ddf0"},"3870":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x34cfc0"},"3871":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x35b1b0"},"3872":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x36b880"},"3873":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x37b2c0"},"3874":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x420ef0"},"3875":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x45ee40"},"3876":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x47bca0"},"3877":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x499040"},"3878":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x4bceb0"},"3879":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x4fc930"},"3880":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x50d1c0"},"3881":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x523710"},"3882":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x5358b0"},"3883":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x54d5b0"},"3884":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x568df0"},"3885":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x5d0c90"},"3886":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x5ef980"},"3887":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x601d70"},"3888":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x61ebf0"},"3889":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x636d30"},"3890":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x676d60"},"3891":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x692d60"},"3892":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x6a3f90"},"3893":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_isend:0x6c2400"},"3894":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x146ad0"},"3895":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x151790"},"3896":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x168350"},"3897":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x1a82a0"},"3898":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x1b4de0"},"3899":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x1d1cc0"},"3900":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x1e8f10"},"3901":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x1ff930"},"3902":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x455b90"},"3903":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x5052f0"},"3904":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x51c100"},"3905":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x5601f0"},"3906":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x5c8e60"},"3907":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x616570"},"3908":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x62e740"},"3909":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x66e120"},"3910":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr.part.0:0x6ba2f0"},"3911":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr_reply.part.0:0x1e8ee0"},"3912":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr_reply.part.0:0x1ff8a0"},"3913":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr_reply.part.0:0x5e0300"},"3914":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr_reply.part.0:0x5e8df0"},"3915":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr_reply.part.0:0x616540"},"3916":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_am_send_hdr_reply.part.0:0x62e710"},"3917":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_allgather.part.0"},"3918":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_allreduce.part.0"},"3919":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_alltoall.part.0"},"3920":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_barrier.part.0"},"3921":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_bcast.part.0"},"3922":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_cancel_recv"},"3923":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_cancel_recv.constprop.0"},"3924":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_compare_and_swap"},"3925":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_compare_and_swap.cold"},"3926":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_fetch_and_op"},"3927":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_fetch_and_op.cold"},"3928":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_host_alloc_tcntr_buffer.constprop.0.isra.0"},"3929":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_iprobe.constprop.0:0x139670"},"3930":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_iprobe.constprop.0:0x1981d0"},"3931":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_iprobe.constprop.0:0x45ec20"},"3932":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_iprobe.constprop.0:0x48b1e0"},"3933":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x35ba7"},"3934":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x36b30"},"3935":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x37a00"},"3936":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x37d16"},"3937":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x3d8f9"},"3938":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x3f261"},"3939":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x3fc61"},"3940":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x40270"},"3941":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x40c70"},"3942":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x40f86"},"3943":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0.cold:0x41d5b"},"3944":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x1434f0"},"3945":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x1a27c0"},"3946":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x1f5450"},"3947":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x20be10"},"3948":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x462d70"},"3949":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x487230"},"3950":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x511780"},"3951":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x56d3b0"},"3952":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x5d5250"},"3953":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x622b40"},"3954":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x63ac80"},"3955":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_irecv.constprop.0:0x6c70b0"},"3956":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_reduce.part.0:0x41a0c0"},"3957":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_reduce.part.0:0x4b6180"},"3958":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_scan.part.0"},"3959":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_unsafe_free_tindex.part.0:0x2161c0"},"3960":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_unsafe_free_tindex.part.0:0x52e200"},"3961":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_mpi_wait_tcomplete"},"3962":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x124310"},"3963":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x138810"},"3964":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x159540"},"3965":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x170100"},"3966":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x182540"},"3967":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x197370"},"3968":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x1bcc40"},"3969":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x1d9b20"},"3970":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x1f0e50"},"3971":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x207810"},"3972":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x2220b0"},"3973":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x235ce0"},"3974":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x245bd0"},"3975":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x2602c0"},"3976":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x27df10"},"3977":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x29a700"},"3978":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x2bbd40"},"3979":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x2ce160"},"3980":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x2dd8b0"},"3981":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x2ed0d0"},"3982":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x2fc830"},"3983":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x30bfe0"},"3984":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x31caf0"},"3985":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x32b830"},"3986":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x33e130"},"3987":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x34c990"},"3988":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x35ab80"},"3989":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x36b250"},"3990":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x37b600"},"3991":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x4208c0"},"3992":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x45dd40"},"3993":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x488d60"},"3994":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x498a10"},"3995":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x4bc880"},"3996":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x4fc300"},"3997":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x50d500"},"3998":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x5241b0"},"3999":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x535270"},"4000":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x54cf80"},"4001":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x569130"},"4002":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x5d0fd0"},"4003":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x601740"},"4004":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x61e540"},"4005":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x636680"},"4006":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x650290"},"4007":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x669210"},"4008":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x6770a0"},"4009":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x692730"},"4010":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x6aa940"},"4011":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_progress.part.0:0x6c2740"},"4012":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_target_cmpl_hook.part.0:0x2d6bd0"},"4013":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_target_cmpl_hook.part.0:0x353f60"},"4014":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_target_cmpl_hook.part.0:0x66e180"},"4015":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_target_local_cmpl_hook.part.0"},"4016":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_win_cmpl_hook.part.0:0x2b4e10"},"4017":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_win_cmpl_hook.part.0:0x2c7480"},"4018":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_win_cmpl_hook.part.0:0x2e63f0"},"4019":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_win_cmpl_hook.part.0:0x364630"},"4020":{"probe_name":"mpi-rest","function_name":"MPIDI_NM_rma_win_local_cmpl_hook.part.0"},"4021":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x21c040"},"4022":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x22f560"},"4023":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x23fb60"},"4024":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x25a250"},"4025":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x277ea0"},"4026":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x294690"},"4027":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x2b5ab0"},"4028":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x2c80f0"},"4029":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x2d7840"},"4030":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x2e7060"},"4031":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x2f67c0"},"4032":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x305f70"},"4033":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x354c30"},"4034":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x365300"},"4035":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_flush_nic:0x66ee60"},"4036":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x21b3d0"},"4037":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x22e8f0"},"4038":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x23eef0"},"4039":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x2595e0"},"4040":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x277230"},"4041":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x293a20"},"4042":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x2b4de0"},"4043":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x2c7450"},"4044":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x2d6ba0"},"4045":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x2e63c0"},"4046":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x2f5b20"},"4047":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x3052d0"},"4048":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x353f30"},"4049":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x364600"},"4050":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_CRAY_start_flushq.part.0:0x66e150"},"4051":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_addr_exchange_all_ctx"},"4052":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_addr_exchange_root_ctx"},"4053":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x106d80"},"4054":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x10c000"},"4055":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x1113c0"},"4056":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x11d660"},"4057":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x131b00"},"4058":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x146910"},"4059":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x1515c0"},"4060":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x168180"},"4061":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x17b890"},"4062":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x190660"},"4063":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x1a80e0"},"4064":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x1b4c10"},"4065":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x1d1af0"},"4066":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x1e8ad0"},"4067":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x1ff490"},"4068":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x21b1d0"},"4069":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x22e720"},"4070":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x23ecc0"},"4071":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x250880"},"4072":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2593e0"},"4073":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x26d470"},"4074":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x277000"},"4075":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x28a770"},"4076":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2937f0"},"4077":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2a7f40"},"4078":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2b4c10"},"4079":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2c7280"},"4080":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2d69d0"},"4081":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2e61f0"},"4082":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x2f5950"},"4083":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x305100"},"4084":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x315d20"},"4085":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x324a60"},"4086":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x3375b0"},"4087":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x345f10"},"4088":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x353d90"},"4089":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x364220"},"4090":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x374a80"},"4091":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x419b30"},"4092":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x4557b0"},"4093":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x477060"},"4094":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x491f90"},"4095":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x4b5da0"},"4096":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x4f5840"},"4097":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x5050c0"},"4098":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x51bcf0"},"4099":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x52da10"},"4100":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x5464c0"},"4101":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x560020"},"4102":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x5c8c90"},"4103":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x5e0140"},"4104":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x5e8c00"},"4105":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x5f9380"},"4106":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x60c620"},"4107":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x612870"},"4108":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x6160d0"},"4109":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x62e300"},"4110":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x66df50"},"4111":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x68b9e0"},"4112":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x69cd50"},"4113":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_init_sreq:0x6b9ac0"},"4114":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_rdma_read_ack_handler"},"4115":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_rdma_read_recv_cb"},"4116":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_am_repost_buffer"},"4117":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_comm_set_hints"},"4118":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_comm_to_phys.constprop.0.cold:0x403bb"},"4119":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_comm_to_phys.constprop.0.cold:0x4113b"},"4120":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_comm_to_phys.constprop.0.cold:0x413f7"},"4121":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_comm_to_phys.constprop.0:0x5e0360"},"4122":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_comm_to_phys.constprop.0:0x64e140"},"4123":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_comm_to_phys.constprop.0:0x667610"},"4124":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_complete_chunks"},"4125":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_control_handler"},"4126":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_create_dt_map"},"4127":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_create_tput"},"4128":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_create_tsend"},"4129":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_dispatch_function"},"4130":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_dispatch_function.cold"},"4131":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_accumulate"},"4132":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_accumulate.cold"},"4133":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_accumulate.constprop.0"},"4134":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_accumulate.constprop.0.cold"},"4135":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x107aa0"},"4136":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x10cd20"},"4137":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x1120e0"},"4138":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x148560"},"4139":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x1a9dc0"},"4140":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x2518c0"},"4141":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x26e4c0"},"4142":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x28bdf0"},"4143":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x2a95d0"},"4144":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x5e2520"},"4145":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x5ec5e0"},"4146":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x60db40"},"4147":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager.constprop.0:0x6146c0"},"4148":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x11fd30"},"4149":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x134230"},"4150":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x154020"},"4151":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x16abe0"},"4152":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x17df60"},"4153":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x192d90"},"4154":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x1b7710"},"4155":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x1d45f0"},"4156":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x1ebb60"},"4157":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x202520"},"4158":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x21d790"},"4159":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x230cb0"},"4160":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x2412b0"},"4161":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x25b9a0"},"4162":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x2795f0"},"4163":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x295de0"},"4164":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x2b7410"},"4165":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x2c9840"},"4166":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x2d8f90"},"4167":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x2e87b0"},"4168":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x2f7f10"},"4169":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x3076c0"},"4170":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x3181c0"},"4171":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x326f00"},"4172":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x339810"},"4173":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x3483b0"},"4174":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x356590"},"4175":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x366c60"},"4176":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x376ce0"},"4177":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x41c2e0"},"4178":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x458a40"},"4179":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x478f60"},"4180":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x494430"},"4181":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x4b82a0"},"4182":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x4f7d20"},"4183":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x507fd0"},"4184":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x51f110"},"4185":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x5309a0"},"4186":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x5489a0"},"4187":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x563c00"},"4188":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x5cbab0"},"4189":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x5fd160"},"4190":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x619250"},"4191":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x631390"},"4192":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x6715a0"},"4193":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x68e150"},"4194":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x69fc10"},"4195":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_eager:0x6bd210"},"4196":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x35645"},"4197":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x359e2"},"4198":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x35ee6"},"4199":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x36308"},"4200":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x365ce"},"4201":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3696b"},"4202":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x37006"},"4203":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3757b"},"4204":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3794c"},"4205":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x37c62"},"4206":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x37f14"},"4207":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3826f"},"4208":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x384dc"},"4209":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x388ea"},"4210":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x38de2"},"4211":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3929d"},"4212":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x39792"},"4213":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x399e7"},"4214":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x39c1b"},"4215":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x39e4f"},"4216":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3a0a4"},"4217":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3a2d8"},"4218":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3a52d"},"4219":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3a72b"},"4220":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3a97a"},"4221":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3ab99"},"4222":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3ad97"},"4223":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3afcb"},"4224":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3b220"},"4225":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3d400"},"4226":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3d845"},"4227":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3daa6"},"4228":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3dd75"},"4229":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3e2dc"},"4230":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3eebb"},"4231":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3f1ad"},"4232":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3f45f"},"4233":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3f67e"},"4234":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3f915"},"4235":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x3fbad"},"4236":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x401bc"},"4237":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x4082b"},"4238":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x40bbc"},"4239":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x40ed2"},"4240":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x4151b"},"4241":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x4174f"},"4242":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x4194e"},"4243":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.cold:0x41c80"},"4244":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x35cbf"},"4245":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x36cf6"},"4246":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x3872f"},"4247":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x38c06"},"4248":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x390e2"},"4249":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x395b6"},"4250":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x403e4"},"4251":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x405ec"},"4252":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x40a12"},"4253":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x40a84"},"4254":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x108390"},"4255":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x10d610"},"4256":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x1129d0"},"4257":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x14aee0"},"4258":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x1abba0"},"4259":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x2539e0"},"4260":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x270c40"},"4261":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x28dda0"},"4262":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x2abb70"},"4263":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x5e2e40"},"4264":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x5ed9d0"},"4265":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x60e430"},"4266":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x614d60"},"4267":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x1235d0"},"4268":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x137ad0"},"4269":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x1584c0"},"4270":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x16f080"},"4271":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x181800"},"4272":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x196630"},"4273":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x1bbbc0"},"4274":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x1d8aa0"},"4275":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x1f0110"},"4276":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x206ad0"},"4277":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x221030"},"4278":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x234550"},"4279":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x244b50"},"4280":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x25f240"},"4281":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x27ce90"},"4282":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x299680"},"4283":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x2bacc0"},"4284":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x2cd0e0"},"4285":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x2dc830"},"4286":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x2ec050"},"4287":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x2fb7b0"},"4288":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x30af60"},"4289":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x31ba70"},"4290":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x32a7b0"},"4291":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x33d0b0"},"4292":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x34bc50"},"4293":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x359e40"},"4294":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x36a510"},"4295":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x37a580"},"4296":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x41fb80"},"4297":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x45d000"},"4298":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x47af60"},"4299":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x497cd0"},"4300":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x4bbb40"},"4301":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x4fb5c0"},"4302":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x50c480"},"4303":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x5229d0"},"4304":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x534530"},"4305":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x54c240"},"4306":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x5680b0"},"4307":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x5cff50"},"4308":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x600a00"},"4309":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x61d800"},"4310":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x635940"},"4311":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x676020"},"4312":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x6919f0"},"4313":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x6a1810"},"4314":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_pipeline:0x6c16c0"},"4315":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x108da0"},"4316":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x10e020"},"4317":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x1133e0"},"4318":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x148e90"},"4319":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x1aa6f0"},"4320":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x2520f0"},"4321":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x26ee00"},"4322":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x28c620"},"4323":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x2a9f10"},"4324":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x5e39a0"},"4325":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x5ee540"},"4326":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x60ef40"},"4327":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x613880"},"4328":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x1207f0"},"4329":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x134cf0"},"4330":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x154ae0"},"4331":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x16b6a0"},"4332":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x17ea20"},"4333":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x193850"},"4334":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x1b81d0"},"4335":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x1d50b0"},"4336":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x1ec620"},"4337":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x202fe0"},"4338":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x21e250"},"4339":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x231770"},"4340":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x241d70"},"4341":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x25c460"},"4342":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x27a0b0"},"4343":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x2968a0"},"4344":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x2b7ed0"},"4345":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x2ca300"},"4346":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x2d9a50"},"4347":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x2e9270"},"4348":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x2f89d0"},"4349":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x308180"},"4350":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x318c80"},"4351":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x3279c0"},"4352":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x33a2d0"},"4353":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x348e70"},"4354":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x357050"},"4355":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x367720"},"4356":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x3777a0"},"4357":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x41cda0"},"4358":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x459500"},"4359":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x479a20"},"4360":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x494ef0"},"4361":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x4b8d60"},"4362":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x4f87e0"},"4363":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x508a90"},"4364":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x51fbd0"},"4365":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x531460"},"4366":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x549460"},"4367":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x5646c0"},"4368":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x5cc570"},"4369":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x5fdc20"},"4370":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x619d10"},"4371":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x631e50"},"4372":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x672060"},"4373":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x68ec10"},"4374":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x6a2a50"},"4375":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_am_isend_rdma_read:0x6bdcd0"},"4376":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_get_accumulate"},"4377":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_get_accumulate.cold"},"4378":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_get_accumulate.constprop.0"},"4379":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_get_accumulate.constprop.0.cold"},"4380":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x147f90"},"4381":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x153910"},"4382":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x16a4d0"},"4383":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x1a9550"},"4384":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x1b7000"},"4385":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x1d3ee0"},"4386":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x1eb160"},"4387":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x201b20"},"4388":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x458030"},"4389":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x5075c0"},"4390":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x51ea00"},"4391":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x5626e0"},"4392":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x5cb3a0"},"4393":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x5e1c70"},"4394":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x5ea5e0"},"4395":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x618850"},"4396":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x630990"},"4397":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x670a30"},"4398":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_inject:0x6bc800"},"4399":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_iprobe.constprop.0:0x124940"},"4400":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_iprobe.constprop.0:0x138e40"},"4401":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_iprobe.constprop.0:0x182b70"},"4402":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_iprobe.constprop.0:0x1979a0"},"4403":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_iprobe.constprop.0:0x45e3f0"},"4404":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_iprobe.constprop.0:0x48aa00"},"4405":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_rdma_read.cold"},"4406":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_rdma_read:0x660ae0"},"4407":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_do_rdma_read:0x66b460"},"4408":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_dynamic_recv"},"4409":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_dynamic_send"},"4410":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_find_provider"},"4411":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_find_provider_cleanup"},"4412":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_get_local_upids"},"4413":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_get_local_upids.cold"},"4414":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_get_required_version"},"4415":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_handle_cq_error"},"4416":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_handle_cq_error.cold"},"4417":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_handle_eq_error"},"4418":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_huge_chunk_done_event"},"4419":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_index_datatypes"},"4420":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_init_hints"},"4421":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_init_local"},"4422":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_init_multi_nic"},"4423":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_init_settings"},"4424":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_init_world"},"4425":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_issue_deferred_rma"},"4426":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_match_provider"},"4427":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_alloc_mem"},"4428":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_comm_commit_post_hook"},"4429":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_comm_commit_pre_hook"},"4430":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_comm_free_hook"},"4431":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_finalize_hook"},"4432":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_free_mem"},"4433":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_op_commit_hook"},"4434":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_op_free_hook"},"4435":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_precv_init"},"4436":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_psend_init"},"4437":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_type_commit_hook"},"4438":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_type_free_hook"},"4439":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_allocate"},"4440":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_allocate_hook"},"4441":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_allocate_shared"},"4442":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_allocate_shared_hook"},"4443":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_attach"},"4444":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_attach_hook"},"4445":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_create"},"4446":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_create_dynamic"},"4447":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_create_dynamic_hook"},"4448":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_create_hook"},"4449":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_detach"},"4450":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_detach_hook"},"4451":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_free"},"4452":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_free_hook"},"4453":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_free_hook.cold"},"4454":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_get_info"},"4455":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mpi_win_set_info"},"4456":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mr_key_alloc"},"4457":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mr_key_allocator_destroy"},"4458":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mr_key_allocator_init"},"4459":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_mr_key_free"},"4460":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_nic_already_used"},"4461":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_nic_is_up"},"4462":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_nopack_putget"},"4463":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_pack_get"},"4464":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_pack_get.cold"},"4465":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_pack_put"},"4466":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_pack_put.cold"},"4467":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_peek_huge_event"},"4468":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_post_init"},"4469":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x107060"},"4470":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x10c2e0"},"4471":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x1116a0"},"4472":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x11e8e0"},"4473":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x12c8e0"},"4474":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x132de0"},"4475":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x140ea0"},"4476":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x147230"},"4477":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x152430"},"4478":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x168ff0"},"4479":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x17cb10"},"4480":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x18b010"},"4481":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x191940"},"4482":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x19fd30"},"4483":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x1a8a90"},"4484":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x1b5b10"},"4485":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x1c8550"},"4486":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x1d29f0"},"4487":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x1e9c80"},"4488":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x200930"},"4489":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x21c340"},"4490":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x22f860"},"4491":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x23fe60"},"4492":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x250e00"},"4493":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x25a550"},"4494":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x26da00"},"4495":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x2781a0"},"4496":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x28b1b0"},"4497":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x294990"},"4498":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x2a8990"},"4499":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x2b5db0"},"4500":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x2c83f0"},"4501":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x2d7b40"},"4502":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x2e7360"},"4503":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x2f6ac0"},"4504":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x306270"},"4505":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x316b60"},"4506":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x3258a0"},"4507":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x333560"},"4508":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x3383c0"},"4509":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x346f60"},"4510":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x354f30"},"4511":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x365600"},"4512":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x375890"},"4513":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x41ae90"},"4514":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x456e30"},"4515":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x478190"},"4516":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x492fe0"},"4517":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x4b6e50"},"4518":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x4f68d0"},"4519":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x5063c0"},"4520":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x51cde0"},"4521":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x52f190"},"4522":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x547550"},"4523":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x5612e0"},"4524":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x5c9fd0"},"4525":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x5e0c20"},"4526":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x5e9240"},"4527":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x5f9ec0"},"4528":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x60a820"},"4529":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x60cd60"},"4530":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x612b50"},"4531":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x617660"},"4532":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x62f4b0"},"4533":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x644ef0"},"4534":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x64e790"},"4535":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x6608e0"},"4536":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x663e30"},"4537":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x6678f0"},"4538":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x66f450"},"4539":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x68cd00"},"4540":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x69dde0"},"4541":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_do_queue.constprop.0:0x6bb460"},"4542":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_progress_uninlined"},"4543":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event"},"4544":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.cold"},"4545":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x355e2"},"4546":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3597f"},"4547":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x35e41"},"4548":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x36263"},"4549":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3656b"},"4550":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x36908"},"4551":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x36f61"},"4552":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x37283"},"4553":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x374d6"},"4554":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x378a7"},"4555":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x37bbd"},"4556":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x37eb1"},"4557":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3820c"},"4558":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x38479"},"4559":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x38887"},"4560":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x38d7f"},"4561":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3923a"},"4562":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3972f"},"4563":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x39984"},"4564":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x39bb8"},"4565":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x39dec"},"4566":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3a041"},"4567":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3a275"},"4568":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3a4ca"},"4569":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3a6c8"},"4570":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3a917"},"4571":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3ab36"},"4572":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3ad34"},"4573":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3af68"},"4574":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3b1bd"},"4575":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3d39d"},"4576":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3d7a0"},"4577":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3dc8d"},"4578":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3dd12"},"4579":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3e279"},"4580":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3ee58"},"4581":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3f108"},"4582":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3f3fc"},"4583":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3f61b"},"4584":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3f8b2"},"4585":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x3fb08"},"4586":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x40117"},"4587":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x407c8"},"4588":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x40b17"},"4589":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x40e2d"},"4590":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x4111a"},"4591":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x41184"},"4592":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x41440"},"4593":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x414b8"},"4594":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x416ec"},"4595":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x41a99"},"4596":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0.cold:0x41bdb"},"4597":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1220c0"},"4598":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1365c0"},"4599":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1563b0"},"4600":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x16cf70"},"4601":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1802f0"},"4602":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x195120"},"4603":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1b9aa0"},"4604":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1c9d60"},"4605":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1d6980"},"4606":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x1edef0"},"4607":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x2048b0"},"4608":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x21fb20"},"4609":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x233040"},"4610":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x243640"},"4611":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x25dd30"},"4612":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x27b980"},"4613":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x298170"},"4614":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x2b97a0"},"4615":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x2cbbd0"},"4616":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x2db320"},"4617":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x2eab40"},"4618":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x2fa2a0"},"4619":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x309a50"},"4620":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x31a550"},"4621":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x329290"},"4622":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x33bba0"},"4623":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x34a740"},"4624":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x358920"},"4625":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x368ff0"},"4626":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x379070"},"4627":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x41e670"},"4628":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x45add0"},"4629":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x488600"},"4630":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x4967c0"},"4631":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x4ba630"},"4632":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x4fa0b0"},"4633":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x50a360"},"4634":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x5214a0"},"4635":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x533130"},"4636":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x54ad30"},"4637":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x565f90"},"4638":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x5cde40"},"4639":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x5ff4f0"},"4640":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x61b5e0"},"4641":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x633720"},"4642":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x645ec0"},"4643":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x64f9d0"},"4644":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x6688c0"},"4645":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x673920"},"4646":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x6904e0"},"4647":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x6aa1e0"},"4648":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_event.constprop.0:0x6bf5a0"},"4649":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_huge_control"},"4650":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_recv_huge_event"},"4651":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_retry_progress"},"4652":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x35d29"},"4653":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x35f28"},"4654":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x3634a"},"4655":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x36d60"},"4656":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x37048"},"4657":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x375bd"},"4658":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x3798e"},"4659":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x37ca4"},"4660":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x3d887"},"4661":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x3f1ef"},"4662":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x3fbef"},"4663":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x401fe"},"4664":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x40bfe"},"4665":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x40f14"},"4666":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0.cold:0x41ce9"},"4667":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x14cbe0"},"4668":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x15a5e0"},"4669":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x1711a0"},"4670":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x1ad8a0"},"4671":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x1bdce0"},"4672":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x1dabc0"},"4673":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x1f2230"},"4674":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x208bf0"},"4675":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x45fb70"},"4676":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x50e5a0"},"4677":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x56a1d0"},"4678":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x5d2070"},"4679":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x61f920"},"4680":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x637a60"},"4681":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send.constprop.0:0x6c3ed0"},"4682":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x355a0"},"4683":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3593d"},"4684":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x36529"},"4685":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x368c6"},"4686":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x37220"},"4687":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x37e6f"},"4688":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x381ca"},"4689":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x38437"},"4690":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x38845"},"4691":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x38d3d"},"4692":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x391f8"},"4693":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x396ed"},"4694":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x39942"},"4695":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x39b76"},"4696":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x39daa"},"4697":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x39fff"},"4698":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3a233"},"4699":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3a488"},"4700":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3a686"},"4701":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3a8d5"},"4702":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3aaf4"},"4703":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3acf2"},"4704":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3af26"},"4705":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3b17b"},"4706":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3d35b"},"4707":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3dc4b"},"4708":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3dcd0"},"4709":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3e237"},"4710":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3ee16"},"4711":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3f5d9"},"4712":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x3f870"},"4713":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x40786"},"4714":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x410d8"},"4715":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x41142"},"4716":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x413fe"},"4717":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x41476"},"4718":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x416aa"},"4719":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0.cold:0x418ca"},"4720":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x11fbb0"},"4721":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x1340b0"},"4722":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x17dde0"},"4723":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x192c10"},"4724":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x1c9120"},"4725":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x21d610"},"4726":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x230b30"},"4727":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x241130"},"4728":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x25b820"},"4729":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x279470"},"4730":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x295c60"},"4731":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x2b7290"},"4732":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x2c96c0"},"4733":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x2d8e10"},"4734":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x2e8630"},"4735":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x2f7d90"},"4736":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x307540"},"4737":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x318040"},"4738":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x326d80"},"4739":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x339690"},"4740":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x348230"},"4741":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x356410"},"4742":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x366ae0"},"4743":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x376b60"},"4744":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x41c160"},"4745":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x4880f0"},"4746":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x4942b0"},"4747":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x4b8120"},"4748":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x4f7ba0"},"4749":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x530820"},"4750":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x548820"},"4751":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x5fcfe0"},"4752":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x6459b0"},"4753":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x64f4c0"},"4754":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x6683b0"},"4755":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x671420"},"4756":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x68dfd0"},"4757":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.constprop.0:0x69fa90"},"4758":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x35dff"},"4759":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x36221"},"4760":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x36f1f"},"4761":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x37494"},"4762":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x37865"},"4763":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x37b7b"},"4764":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x3d75e"},"4765":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x3f0c6"},"4766":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x3f3ba"},"4767":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x3fac6"},"4768":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x400d5"},"4769":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x40ad5"},"4770":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x40deb"},"4771":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x412b8"},"4772":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0.cold:0x41b99"},"4773":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x153ee0"},"4774":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x16aaa0"},"4775":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x1b75d0"},"4776":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x1d44b0"},"4777":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x1eba20"},"4778":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x2023e0"},"4779":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x458900"},"4780":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x507e90"},"4781":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x51efd0"},"4782":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x563ac0"},"4783":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x5cb970"},"4784":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x619110"},"4785":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x631250"},"4786":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x65ef00"},"4787":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_send_event.part.0:0x6bd0d0"},"4788":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_set_auto_progress"},"4789":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_tamo"},"4790":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_tamo.cold"},"4791":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_update_global_settings"},"4792":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_upids_to_gpids"},"4793":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x222bf0"},"4794":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x236820"},"4795":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x246710"},"4796":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x260e00"},"4797":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x27ea50"},"4798":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x29b240"},"4799":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x2bc880"},"4800":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x2ceca0"},"4801":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x2de3f0"},"4802":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x2edc10"},"4803":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x2fd370"},"4804":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x30cb20"},"4805":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x35ba00"},"4806":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x36c0d0"},"4807":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_do_progress:0x677be0"},"4808":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x37f35"},"4809":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x38290"},"4810":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x384fd"},"4811":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x3890b"},"4812":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x38e03"},"4813":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x392be"},"4814":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x397b3"},"4815":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x39a08"},"4816":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x39c3c"},"4817":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x39e70"},"4818":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x3a0c5"},"4819":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x3a2f9"},"4820":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x3adb8"},"4821":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x3afec"},"4822":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete.cold:0x4153c"},"4823":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x2226e0"},"4824":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x236310"},"4825":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x246200"},"4826":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x2608f0"},"4827":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x27e540"},"4828":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x29ad30"},"4829":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x2bc370"},"4830":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x2ce790"},"4831":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x2ddee0"},"4832":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x2ed700"},"4833":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x2fce60"},"4834":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x30c610"},"4835":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x35b4f0"},"4836":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x36bbc0"},"4837":{"probe_name":"mpi-rest","function_name":"MPIDI_OFI_win_request_complete:0x6776d0"},"4838":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x11da40"},"4839":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x131ee0"},"4840":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x146aa0"},"4841":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x151760"},"4842":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x168320"},"4843":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x17bc70"},"4844":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x190a40"},"4845":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x1a8270"},"4846":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x1b4db0"},"4847":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x1d1c90"},"4848":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x1e8eb0"},"4849":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x1ff870"},"4850":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x21b370"},"4851":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x22e8c0"},"4852":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x23ee60"},"4853":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x259580"},"4854":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x2771a0"},"4855":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x293990"},"4856":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x2b4db0"},"4857":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x2c7420"},"4858":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x2d6b70"},"4859":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x2e6390"},"4860":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x2f5af0"},"4861":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x3052a0"},"4862":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x315ec0"},"4863":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x324c00"},"4864":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x337750"},"4865":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x3462f0"},"4866":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x353f90"},"4867":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x364660"},"4868":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x374c20"},"4869":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x419f10"},"4870":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x455bc0"},"4871":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x477200"},"4872":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x492370"},"4873":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x4b61e0"},"4874":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x4f5c20"},"4875":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x505260"},"4876":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x51c0d0"},"4877":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x52e230"},"4878":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x5468a0"},"4879":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x5601c0"},"4880":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x5c8e30"},"4881":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x5e02d0"},"4882":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x5e8dc0"},"4883":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x5f9520"},"4884":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x60c7b0"},"4885":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x616510"},"4886":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x62e6e0"},"4887":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x66e0f0"},"4888":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x68bdc0"},"4889":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x69d130"},"4890":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_init_req_hdr.part.0:0x6ba2c0"},"4891":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_send_hdr.constprop.0:0x147430"},"4892":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_send_hdr.constprop.0:0x1a8c90"},"4893":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_send_hdr:0x5e0f30"},"4894":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_am_send_hdr:0x5e9440"},"4895":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_coll_finalize"},"4896":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_coll_init"},"4897":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_comm_set_hints"},"4898":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_cray_get_target_vaddr"},"4899":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_cray_get_target_vaddr.cold"},"4900":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_cray_rma_shm_finalize"},"4901":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_cray_rma_shm_init"},"4902":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_delay_shm_mutex_destroy"},"4903":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x35603"},"4904":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x359a0"},"4905":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x35ea4"},"4906":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x362c6"},"4907":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3658c"},"4908":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x36929"},"4909":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x36fc4"},"4910":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x37539"},"4911":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3790a"},"4912":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x37c20"},"4913":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x37ed2"},"4914":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3822d"},"4915":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3849a"},"4916":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x388a8"},"4917":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x38da0"},"4918":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3925b"},"4919":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x39750"},"4920":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x399a5"},"4921":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x39bd9"},"4922":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x39e0d"},"4923":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3a062"},"4924":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3a296"},"4925":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3a4eb"},"4926":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3a6e9"},"4927":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3a938"},"4928":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3ab57"},"4929":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3ad55"},"4930":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3af89"},"4931":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3b1de"},"4932":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3d3be"},"4933":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3d803"},"4934":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3dae9"},"4935":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3dd33"},"4936":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3e29a"},"4937":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3ee79"},"4938":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3f16b"},"4939":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3f41d"},"4940":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3f63c"},"4941":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3f8d3"},"4942":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x3fb6b"},"4943":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x4017a"},"4944":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x407e9"},"4945":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x40b7a"},"4946":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x40e90"},"4947":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x414d9"},"4948":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x4170d"},"4949":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x4190c"},"4950":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.cold:0x41c3e"},"4951":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0.cold:0x386ed"},"4952":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0.cold:0x38bc4"},"4953":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0.cold:0x390a0"},"4954":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0.cold:0x39574"},"4955":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0.cold:0x4062e"},"4956":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0:0x253190"},"4957":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0:0x270240"},"4958":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0:0x28d6c0"},"4959":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0:0x2ab350"},"4960":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend.constprop.0:0x5f05f0"},"4961":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x122820"},"4962":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x136d20"},"4963":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x157700"},"4964":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x16e2c0"},"4965":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x180a50"},"4966":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x195880"},"4967":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x1bae00"},"4968":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x1d7ce0"},"4969":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x1ef350"},"4970":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x205d10"},"4971":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x220280"},"4972":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x2337a0"},"4973":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x243da0"},"4974":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x25e490"},"4975":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x27c0e0"},"4976":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x2988d0"},"4977":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x2b9f00"},"4978":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x2cc330"},"4979":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x2dba80"},"4980":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x2eb2a0"},"4981":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x2faa00"},"4982":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x30a1b0"},"4983":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x31acb0"},"4984":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x3299f0"},"4985":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x33c300"},"4986":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x34aea0"},"4987":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x359080"},"4988":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x369750"},"4989":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x3797d0"},"4990":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x41edd0"},"4991":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x45c240"},"4992":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x480580"},"4993":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x496f20"},"4994":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x4bad90"},"4995":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x4fa810"},"4996":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x50b6c0"},"4997":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x521c10"},"4998":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x533780"},"4999":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x54b490"},"5000":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x5672f0"},"5001":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x5cf190"},"5002":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x5ffc50"},"5003":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x61ca40"},"5004":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x634b80"},"5005":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x674080"},"5006":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x690c40"},"5007":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x6a0a60"},"5008":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_isend:0x6c0900"},"5009":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x11ebf0"},"5010":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x1330f0"},"5011":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x17ce20"},"5012":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x191c50"},"5013":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x21c650"},"5014":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x22fb70"},"5015":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x240170"},"5016":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x25a860"},"5017":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2784b0"},"5018":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x294ca0"},"5019":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2c8700"},"5020":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2d7e50"},"5021":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2e7670"},"5022":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2f6dd0"},"5023":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x306580"},"5024":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x3386d0"},"5025":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x347270"},"5026":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x375ba0"},"5027":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x41b090"},"5028":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x4931e0"},"5029":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x4b7160"},"5030":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x4f6be0"},"5031":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x52f4a0"},"5032":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x547860"},"5033":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x5fa0c0"},"5034":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x68d010"},"5035":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr.constprop.0:0x69e0f0"},"5036":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x152740"},"5037":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x169300"},"5038":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x1b5e20"},"5039":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x1d2d00"},"5040":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x1e9e80"},"5041":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x200640"},"5042":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x2b5fb0"},"5043":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x316e70"},"5044":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x325bb0"},"5045":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x355130"},"5046":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x365800"},"5047":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x456b40"},"5048":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x477ea0"},"5049":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x5060d0"},"5050":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x51d0f0"},"5051":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x560ff0"},"5052":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x5c9bd0"},"5053":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x617370"},"5054":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x62f6b0"},"5055":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x66f160"},"5056":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_do_am_send_hdr:0x6bb170"},"5057":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_buf_limit"},"5058":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_finalize"},"5059":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_init"},"5060":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_payload_limit"},"5061":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_recv_begin"},"5062":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_recv_commit"},"5063":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_recv_completed_hook"},"5064":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_recv_memcpy"},"5065":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_recv_posted_hook"},"5066":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_send"},"5067":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_eager_send.cold"},"5068":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_init_local"},"5069":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_init_world"},"5070":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_iqueue_finalize"},"5071":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_iqueue_init"},"5072":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_alloc_mem"},"5073":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_allreduce"},"5074":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_allreduce_release_gather"},"5075":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_barrier"},"5076":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_barrier_release_gather"},"5077":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_barrier_release_gather.cold"},"5078":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_bcast"},"5079":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_bcast_release_gather.part.0"},"5080":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_bcast_release_gather.part.0.cold"},"5081":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_comm_commit_post_hook"},"5082":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_comm_commit_pre_hook"},"5083":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_comm_free_hook"},"5084":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_finalize_hook"},"5085":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_free_mem"},"5086":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_iprobe.constprop.0:0x132c20"},"5090":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_irecv.constprop.0:0x144790"},"5091":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_irecv.constprop.0:0x1a3a60"},"5092":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_irecv.constprop.0:0x1f6720"},"5093":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_irecv.constprop.0:0x20d0e0"},"5094":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_irecv.constprop.0:0x623e10"},"5095":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_irecv.constprop.0:0x63bf50"},"5096":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_op_commit_hook"},"5097":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_op_free_hook"},"5098":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_precv_init"},"5099":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_psend_init"},"5100":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_reduce:0x440ee0"},"5101":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_reduce:0x4c3f40"},"5102":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_reduce_release_gather.part.0.cold"},"5103":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_reduce_release_gather.part.0:0x440940"},"5104":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_reduce_release_gather.part.0:0x4c31a0"},"5105":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_release_gather_comm_free"},"5106":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_release_gather_comm_init"},"5107":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_release_gather_comm_init.cold"},"5108":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_release_gather_comm_init_null"},"5109":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_release_gather_gather"},"5110":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_release_gather_gather.cold"},"5111":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_release_gather_release"},"5112":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_type_commit_hook"},"5113":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_type_free_hook"},"5114":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_allocate"},"5115":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_allocate_hook"},"5116":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_allocate_shared"},"5117":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_allocate_shared_hook"},"5118":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_attach"},"5119":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_attach_hook"},"5120":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_create"},"5121":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_create_dynamic"},"5122":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_create_dynamic_hook"},"5123":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_create_hook"},"5124":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_detach"},"5125":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_detach_hook"},"5126":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_free"},"5127":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_free_hook"},"5128":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_get_info"},"5129":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_mpi_win_set_info"},"5130":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_nb_release_gather_comm_free"},"5131":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_nb_release_gather_comm_init"},"5132":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_nb_release_gather_comm_init.cold"},"5133":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x123210"},"5134":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x137710"},"5135":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x1580f0"},"5136":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x16ecb0"},"5137":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x181440"},"5138":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x196270"},"5139":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x1bb7f0"},"5140":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x1d86d0"},"5141":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x1efd40"},"5142":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x206700"},"5143":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x220c70"},"5144":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x234190"},"5145":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x244790"},"5146":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x25ee80"},"5147":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x27cad0"},"5148":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x2992c0"},"5149":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x2ba8f0"},"5150":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x2ccd20"},"5151":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x2dc470"},"5152":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x2ebc90"},"5153":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x2fb3f0"},"5154":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x30aba0"},"5155":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x31b6a0"},"5156":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x32a3e0"},"5157":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x33ccf0"},"5158":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x34b890"},"5159":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x359a70"},"5160":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x36a140"},"5161":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x37a1c0"},"5162":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x41f7c0"},"5163":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x45cc30"},"5164":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x480f70"},"5165":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x497910"},"5166":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x4bb780"},"5167":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x4fb200"},"5168":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x50c0b0"},"5169":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x522600"},"5170":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x534170"},"5171":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x54be80"},"5172":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x567ce0"},"5173":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x5cfb80"},"5174":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x600640"},"5175":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x61d430"},"5176":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x635570"},"5177":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x674a70"},"5178":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x691630"},"5179":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x6a1450"},"5180":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress.constprop.0:0x6c12f0"},"5181":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x11da70"},"5182":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x131f10"},"5183":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x1517c0"},"5184":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x168380"},"5185":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x17bca0"},"5186":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x190a70"},"5187":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x1b4ea0"},"5188":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x1d1d80"},"5189":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x1e8fa0"},"5190":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x1ff960"},"5191":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x21b400"},"5192":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x22e920"},"5193":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x23ef20"},"5194":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x259610"},"5195":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x277260"},"5196":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x293a50"},"5197":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x2b4e40"},"5198":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x2c74b0"},"5199":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x2d6c00"},"5200":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x2e6420"},"5201":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x2f5b80"},"5202":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x305330"},"5203":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x315ef0"},"5204":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x324c30"},"5205":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x337780"},"5206":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x346320"},"5207":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x353fc0"},"5208":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x364690"},"5209":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x374c50"},"5210":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x41a1e0"},"5211":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x455ce0"},"5212":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x477290"},"5213":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x4923a0"},"5214":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x4b6210"},"5215":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x4f5c50"},"5216":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x5053b0"},"5217":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x51c130"},"5218":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x52e510"},"5219":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x5468d0"},"5220":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x560310"},"5221":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x5c8ef0"},"5222":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x5f9550"},"5223":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x616600"},"5224":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x62e7d0"},"5225":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x66e1b0"},"5226":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x68c050"},"5227":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x69d160"},"5228":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_progress_recv.constprop.0:0x6ba380"},"5229":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_rma_target_cmpl_hook"},"5230":{"probe_name":"mpi-rest","function_name":"MPIDI_POSIX_shm_win_init_hook"},"5231":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_alpha.cold:0x3d684"},"5232":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_alpha.cold:0x3e452"},"5233":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_alpha:0x441340"},"5234":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_alpha:0x4c43a0"},"5235":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_beta.cold:0x3d6a6"},"5236":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_beta.cold:0x3e474"},"5237":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_beta:0x441880"},"5238":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_beta:0x4c48e0"},"5239":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_gamma.part.0:0x41a0f0"},"5240":{"probe_name":"mpi-rest","function_name":"MPIDI_Reduce_intra_composition_gamma.part.0:0x4b61b0"},"5241":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_comm_set_hints"},"5242":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_copy_tree"},"5243":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_create_template_tree"},"5244":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_gen_package_tree"},"5245":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_gen_tree"},"5246":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_gen_tree_sharedmemory"},"5247":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_init_local"},"5248":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_init_world"},"5249":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_alloc_mem"},"5250":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_comm_commit_post_hook"},"5251":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_comm_commit_pre_hook"},"5252":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_comm_free_hook"},"5253":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_finalize_hook"},"5254":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_free_mem"},"5255":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x140470"},"5256":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x19f690"},"5257":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x1e8f70"},"5258":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x1ff900"},"5259":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x455c20"},"5260":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x477260"},"5261":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x5052c0"},"5262":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x560250"},"5263":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x5c8ec0"},"5264":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x6165d0"},"5265":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x62e7a0"},"5266":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_irecv.part.0:0x6ba350"},"5267":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_op_commit_hook"},"5268":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_op_free_hook"},"5269":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_precv_init"},"5270":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_psend_init"},"5271":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_type_commit_hook"},"5272":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_type_free_hook"},"5273":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_allocate"},"5274":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_allocate_hook"},"5275":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_allocate_shared"},"5276":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_allocate_shared_hook"},"5277":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_attach"},"5278":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_attach_hook"},"5279":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_create"},"5280":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_create_dynamic"},"5281":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_create_dynamic_hook"},"5282":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_create_hook"},"5283":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_detach"},"5284":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_detach_hook"},"5285":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_free"},"5286":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_free_hook"},"5287":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_get_info"},"5288":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_mpi_win_set_info"},"5289":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_print_topotree"},"5290":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_print_topotree_file"},"5291":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_topology_tree_init"},"5292":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_topotree_allocate"},"5293":{"probe_name":"mpi-rest","function_name":"MPIDI_SHM_topotree_get_package_level"},"5294":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_alloc_queue_ptr"},"5295":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_free_queue"},"5296":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_progress_queue"},"5297":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_progress_start"},"5298":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_progress_tops_queue"},"5299":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_progress_tops_start"},"5300":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_progress_tops_wait"},"5301":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_progress_wait"},"5302":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_pull_fence_head"},"5303":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_pull_msg"},"5304":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_pull_msg_list"},"5305":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_pull_queue"},"5306":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_push_fence"},"5307":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_push_msg"},"5308":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_push_queue"},"5309":{"probe_name":"mpi-rest","function_name":"MPIDI_ST_release_tops_requests"},"5310":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_cancel"},"5311":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_cancel.cold"},"5312":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_finalize"},"5313":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_improbe"},"5314":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_improbe.cold"},"5315":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_imrecv"},"5316":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_imrecv.cold"},"5317":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_init"},"5318":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_iprobe"},"5319":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_iprobe.cold"},"5320":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_irecv"},"5321":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_irecv.cold"},"5322":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_isend"},"5323":{"probe_name":"mpi-rest","function_name":"MPIDI_Self_isend.cold"},"5324":{"probe_name":"mpi-rest","function_name":"MPIDI_XPMEM_init_local"},"5325":{"probe_name":"mpi-rest","function_name":"MPIDI_XPMEM_init_world"},"5326":{"probe_name":"mpi-rest","function_name":"MPIDI_XPMEM_ipc_handle_map"},"5327":{"probe_name":"mpi-rest","function_name":"MPIDI_XPMEM_mpi_finalize_hook"},"5328":{"probe_name":"mpi-rest","function_name":"MPIDI_anysrc_try_cancel_partner"},"5329":{"probe_name":"mpi-rest","function_name":"MPIDI_check_disjoint_gpids"},"5330":{"probe_name":"mpi-rest","function_name":"MPIDI_check_for_failed_procs"},"5331":{"probe_name":"mpi-rest","function_name":"MPIDI_comm_create_rank_map"},"5332":{"probe_name":"mpi-rest","function_name":"MPIDI_create_init_comm"},"5333":{"probe_name":"mpi-rest","function_name":"MPIDI_destroy_init_comm"},"5334":{"probe_name":"mpi-rest","function_name":"MPIDI_get"},"5335":{"probe_name":"mpi-rest","function_name":"MPIDI_get.cold"},"5336":{"probe_name":"mpi-rest","function_name":"MPIDI_get_comm_hint_tclass"},"5337":{"probe_name":"mpi-rest","function_name":"MPIDI_imrecv.cold:0x35846"},"5338":{"probe_name":"mpi-rest","function_name":"MPIDI_imrecv.cold:0x367cf"},"5339":{"probe_name":"mpi-rest","function_name":"MPIDI_imrecv:0x12ee30"},"5340":{"probe_name":"mpi-rest","function_name":"MPIDI_imrecv:0x18d810"},"5341":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.cold:0x3f3a2"},"5342":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.cold:0x3f7bf"},"5343":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.cold:0x3fa56"},"5344":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0"},"5345":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0.cold"},"5346":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0.isra.0.cold:0x3d541"},"5347":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0.isra.0.cold:0x3e41d"},"5348":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0.isra.0.cold:0x3effc"},"5349":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0.isra.0:0x425c00"},"5350":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0.isra.0:0x4c1bc0"},"5351":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test.constprop.0.isra.0:0x501620"},"5352":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test:0x517c10"},"5353":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test:0x53a5a0"},"5354":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test:0x5522a0"},"5355":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test_vci:0x362200"},"5356":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test_vci:0x3728d0"},"5357":{"probe_name":"mpi-rest","function_name":"MPIDI_progress_test_vci:0x67e3a0"},"5358":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0.cold:0x35465"},"5359":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0.cold:0x36e6a"},"5360":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0.cold:0x37241"},"5361":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0.cold:0x3778e"},"5362":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0:0x119330"},"5363":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0:0x1b2a60"},"5364":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0:0x1c92a0"},"5365":{"probe_name":"mpi-rest","function_name":"MPIDI_psend_init.constprop.0:0x1e5130"},"5366":{"probe_name":"mpi-rest","function_name":"MPIDI_put"},"5367":{"probe_name":"mpi-rest","function_name":"MPIDI_put.cold"},"5368":{"probe_name":"mpi-rest","function_name":"MPIDI_rget.constprop.0"},"5369":{"probe_name":"mpi-rest","function_name":"MPIDI_rget.constprop.0.cold"},"5370":{"probe_name":"mpi-rest","function_name":"MPIDI_rput.constprop.0"},"5371":{"probe_name":"mpi-rest","function_name":"MPIDI_rput.constprop.0.cold"},"5372":{"probe_name":"mpi-rest","function_name":"MPIDI_set_comm_hint_receiver_vci"},"5373":{"probe_name":"mpi-rest","function_name":"MPIDI_set_comm_hint_sender_vci"},"5374":{"probe_name":"mpi-rest","function_name":"MPIDI_set_comm_hint_tclass"},"5375":{"probe_name":"mpi-rest","function_name":"MPIDI_set_comm_hint_vci"},"5376":{"probe_name":"mpi-rest","function_name":"MPIDI_sigusr1_handler"},"5377":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_alloc"},"5378":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_barrier"},"5379":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_finalize"},"5380":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_free"},"5381":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_get"},"5382":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_init"},"5383":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_is_symm"},"5384":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_put"},"5385":{"probe_name":"mpi-rest","function_name":"MPIDU_Init_shm_query"},"5386":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_add_entry.constprop.0"},"5387":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_alloc_state"},"5388":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_are_pending"},"5389":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_barrier"},"5390":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_cb"},"5391":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_cb2"},"5392":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_clone"},"5393":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_continue"},"5394":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_continue.cold"},"5395":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_copy"},"5396":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_copy.cold"},"5397":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_create"},"5398":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_free"},"5399":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_free.cold"},"5400":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_next_tag"},"5401":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_progress"},"5402":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_progress.cold"},"5403":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_pt2pt_recv"},"5404":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_pt2pt_recv.cold"},"5405":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_pt2pt_send"},"5406":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_pt2pt_send.cold"},"5407":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_recv"},"5408":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_recv.cold"},"5409":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_recv_status"},"5410":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_recv_status.cold"},"5411":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_reduce"},"5412":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_reduce.cold"},"5413":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_reset"},"5414":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_send"},"5415":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_send.cold"},"5416":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_send_defer"},"5417":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_send_defer.cold"},"5418":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_set_tag"},"5419":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_ssend"},"5420":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_ssend.cold"},"5421":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_start"},"5422":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_tamo"},"5423":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_tamo.cold"},"5424":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_trecv"},"5425":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_trecv.cold"},"5426":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_tsend"},"5427":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_tsend.cold"},"5428":{"probe_name":"mpi-rest","function_name":"MPIDU_Sched_twait"},"5429":{"probe_name":"mpi-rest","function_name":"MPIDU_bc_allgather"},"5430":{"probe_name":"mpi-rest","function_name":"MPIDU_bc_table_create"},"5431":{"probe_name":"mpi-rest","function_name":"MPIDU_bc_table_destroy"},"5432":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_private_pool_alloc_cell"},"5433":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_private_pool_create"},"5434":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_private_pool_destroy"},"5435":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_private_pool_free_cell"},"5436":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_shmem_pool_create"},"5437":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_shmem_pool_destroy"},"5438":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_shmem_pool_gpu_mem_register"},"5439":{"probe_name":"mpi-rest","function_name":"MPIDU_genq_shmem_queue_init"},"5440":{"probe_name":"mpi-rest","function_name":"MPIDU_shm_alloc"},"5441":{"probe_name":"mpi-rest","function_name":"MPIDU_shm_alloc_symm_all"},"5442":{"probe_name":"mpi-rest","function_name":"MPIDU_shm_free"},"5443":{"probe_name":"mpi-rest","function_name":"MPIDU_shm_get_mapsize"},"5444":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_alloc"},"5445":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_alloc_event"},"5446":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_dealloc"},"5447":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_enqueue"},"5448":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_finalize"},"5449":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_free_event"},"5450":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_init"},"5451":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_progress_ops"},"5452":{"probe_name":"mpi-rest","function_name":"MPIDU_stream_workq_progress_wait_list"},"5453":{"probe_name":"mpi-rest","function_name":"MPID_Abort"},"5454":{"probe_name":"mpi-rest","function_name":"MPID_Abort.cold"},"5455":{"probe_name":"mpi-rest","function_name":"MPID_Accumulate"},"5456":{"probe_name":"mpi-rest","function_name":"MPID_Accumulate.cold"},"5457":{"probe_name":"mpi-rest","function_name":"MPID_Aint_add"},"5458":{"probe_name":"mpi-rest","function_name":"MPID_Aint_diff"},"5459":{"probe_name":"mpi-rest","function_name":"MPID_Alloc_mem"},"5460":{"probe_name":"mpi-rest","function_name":"MPID_Allocate_vci"},"5461":{"probe_name":"mpi-rest","function_name":"MPID_Attr_alloc"},"5462":{"probe_name":"mpi-rest","function_name":"MPID_Attr_alloc.cold"},"5463":{"probe_name":"mpi-rest","function_name":"MPID_Attr_free"},"5464":{"probe_name":"mpi-rest","function_name":"MPID_Bsend_init.part.0"},"5465":{"probe_name":"mpi-rest","function_name":"MPID_Cancel_recv"},"5466":{"probe_name":"mpi-rest","function_name":"MPID_Cancel_send.part.0"},"5467":{"probe_name":"mpi-rest","function_name":"MPID_Cleanup_treq"},"5468":{"probe_name":"mpi-rest","function_name":"MPID_Close_port"},"5469":{"probe_name":"mpi-rest","function_name":"MPID_Comm_accept"},"5470":{"probe_name":"mpi-rest","function_name":"MPID_Comm_commit_post_hook"},"5471":{"probe_name":"mpi-rest","function_name":"MPID_Comm_commit_pre_hook"},"5472":{"probe_name":"mpi-rest","function_name":"MPID_Comm_connect"},"5473":{"probe_name":"mpi-rest","function_name":"MPID_Comm_disconnect"},"5474":{"probe_name":"mpi-rest","function_name":"MPID_Comm_failure_ack"},"5475":{"probe_name":"mpi-rest","function_name":"MPID_Comm_failure_get_acked"},"5476":{"probe_name":"mpi-rest","function_name":"MPID_Comm_free_hook"},"5477":{"probe_name":"mpi-rest","function_name":"MPID_Comm_get_all_failed_procs"},"5478":{"probe_name":"mpi-rest","function_name":"MPID_Comm_get_lpid"},"5479":{"probe_name":"mpi-rest","function_name":"MPID_Comm_get_lpid.cold"},"5480":{"probe_name":"mpi-rest","function_name":"MPID_Comm_group_failed"},"5481":{"probe_name":"mpi-rest","function_name":"MPID_Comm_reenable_anysource"},"5482":{"probe_name":"mpi-rest","function_name":"MPID_Comm_remote_group_failed"},"5483":{"probe_name":"mpi-rest","function_name":"MPID_Comm_revoke"},"5484":{"probe_name":"mpi-rest","function_name":"MPID_Comm_set_hints"},"5485":{"probe_name":"mpi-rest","function_name":"MPID_Comm_spawn_multiple"},"5486":{"probe_name":"mpi-rest","function_name":"MPID_Create_intercomm_from_lpids"},"5487":{"probe_name":"mpi-rest","function_name":"MPID_Create_tput.part.0"},"5488":{"probe_name":"mpi-rest","function_name":"MPID_Create_tsend.constprop.0"},"5489":{"probe_name":"mpi-rest","function_name":"MPID_Deallocate_vci"},"5490":{"probe_name":"mpi-rest","function_name":"MPID_Finalize"},"5491":{"probe_name":"mpi-rest","function_name":"MPID_Free_mem"},"5492":{"probe_name":"mpi-rest","function_name":"MPID_Free_tindex.part.0"},"5493":{"probe_name":"mpi-rest","function_name":"MPID_Get_accumulate"},"5494":{"probe_name":"mpi-rest","function_name":"MPID_Get_accumulate.cold"},"5495":{"probe_name":"mpi-rest","function_name":"MPID_Get_max_node_id"},"5496":{"probe_name":"mpi-rest","function_name":"MPID_Get_node_id"},"5497":{"probe_name":"mpi-rest","function_name":"MPID_Get_processor_name"},"5498":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index"},"5499":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index_without_target.part.0:0x3d0130"},"5500":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index_without_target.part.0:0x3dfe20"},"5501":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index_without_target.part.0:0x3e4560"},"5502":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index_without_target.part.0:0x3f4f10"},"5503":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index_without_target.part.0:0x3fa2f0"},"5504":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index_without_target.part.0:0x6164b0"},"5505":{"probe_name":"mpi-rest","function_name":"MPID_Get_trgr_index_without_target.part.0:0x644ce0"},"5506":{"probe_name":"mpi-rest","function_name":"MPID_Get_universe_size"},"5507":{"probe_name":"mpi-rest","function_name":"MPID_Imrecv.part.0"},"5508":{"probe_name":"mpi-rest","function_name":"MPID_Init"},"5509":{"probe_name":"mpi-rest","function_name":"MPID_InitCompleted"},"5510":{"probe_name":"mpi-rest","function_name":"MPID_Intercomm_exchange_map"},"5511":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0.cold:0x35bc8"},"5512":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0.cold:0x36b51"},"5513":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0:0x144970"},"5514":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0:0x1a3c40"},"5515":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0:0x464010"},"5516":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0:0x512a20"},"5517":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0:0x56e650"},"5518":{"probe_name":"mpi-rest","function_name":"MPID_Irecv.constprop.0:0x5d64f0"},"5519":{"probe_name":"mpi-rest","function_name":"MPID_Irecv_enqueue"},"5520":{"probe_name":"mpi-rest","function_name":"MPID_Irsend.constprop.0:0x14ecc0"},"5521":{"probe_name":"mpi-rest","function_name":"MPID_Irsend.constprop.0:0x1b0520"},"5522":{"probe_name":"mpi-rest","function_name":"MPID_Isend.constprop.0:0x1624c0"},"5523":{"probe_name":"mpi-rest","function_name":"MPID_Isend.constprop.0:0x179080"},"5524":{"probe_name":"mpi-rest","function_name":"MPID_Isend.constprop.0:0x1c5bc0"},"5525":{"probe_name":"mpi-rest","function_name":"MPID_Isend.constprop.0:0x1e2aa0"},"5526":{"probe_name":"mpi-rest","function_name":"MPID_Isend.constprop.0:0x519390"},"5527":{"probe_name":"mpi-rest","function_name":"MPID_Isend.constprop.0:0x575020"},"5528":{"probe_name":"mpi-rest","function_name":"MPID_Isend.constprop.0:0x5dcd70"},"5529":{"probe_name":"mpi-rest","function_name":"MPID_Isend:0x1fc860"},"5530":{"probe_name":"mpi-rest","function_name":"MPID_Isend:0x213220"},"5531":{"probe_name":"mpi-rest","function_name":"MPID_Isend:0x46a780"},"5532":{"probe_name":"mpi-rest","function_name":"MPID_Isend:0x62bb80"},"5533":{"probe_name":"mpi-rest","function_name":"MPID_Isend:0x643750"},"5534":{"probe_name":"mpi-rest","function_name":"MPID_Isend_enqueue"},"5535":{"probe_name":"mpi-rest","function_name":"MPID_NS_Create"},"5536":{"probe_name":"mpi-rest","function_name":"MPID_NS_Free"},"5537":{"probe_name":"mpi-rest","function_name":"MPID_NS_Lookup"},"5538":{"probe_name":"mpi-rest","function_name":"MPID_NS_Publish"},"5539":{"probe_name":"mpi-rest","function_name":"MPID_NS_Unpublish"},"5540":{"probe_name":"mpi-rest","function_name":"MPID_Op_commit_hook"},"5541":{"probe_name":"mpi-rest","function_name":"MPID_Op_free_hook"},"5542":{"probe_name":"mpi-rest","function_name":"MPID_Open_port"},"5543":{"probe_name":"mpi-rest","function_name":"MPID_Precv_init"},"5544":{"probe_name":"mpi-rest","function_name":"MPID_Prequest_free_hook"},"5545":{"probe_name":"mpi-rest","function_name":"MPID_Prequest_free_hook.cold"},"5546":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x35786"},"5547":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x35b23"},"5548":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x36069"},"5549":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3648b"},"5550":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3670f"},"5551":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x36aac"},"5552":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x37189"},"5553":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x376fe"},"5554":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x37b41"},"5555":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x37e57"},"5556":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x39909"},"5557":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x39b5e"},"5558":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x39d92"},"5559":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x39fc6"},"5560":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3a21b"},"5561":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3a44f"},"5562":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3a66e"},"5563":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3a86c"},"5564":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3aabb"},"5565":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3acda"},"5566":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3af0e"},"5567":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3b142"},"5568":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3b361"},"5569":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3dcae"},"5570":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x3fda2"},"5571":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x403b1"},"5572":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x4096c"},"5573":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x40db1"},"5574":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x410c7"},"5575":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x41692"},"5576":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x41a8f"},"5577":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0.cold:0x41e9c"},"5578":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x129f10"},"5579":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x13e3a0"},"5580":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x160f60"},"5581":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x177b20"},"5582":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x188140"},"5583":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x19cf00"},"5584":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x1c4660"},"5585":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x1e1540"},"5586":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x1fb300"},"5587":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x211cc0"},"5588":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x2c1b20"},"5589":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x2d3f20"},"5590":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x2e3670"},"5591":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x2f2e90"},"5592":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x3025f0"},"5593":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x311da0"},"5594":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x321b10"},"5595":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x330850"},"5596":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x343130"},"5597":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x351cd0"},"5598":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x360ca0"},"5599":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x371370"},"5600":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x380600"},"5601":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x489390"},"5602":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x519310"},"5603":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x553990"},"5604":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x573ac0"},"5605":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x5db810"},"5606":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x606870"},"5607":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x62a620"},"5608":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x6421f0"},"5609":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x67ce60"},"5610":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x6a8c80"},"5611":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.constprop.0:0x6ccd40"},"5612":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0.cold:0x3da3a"},"5613":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0.cold:0x3f5a0"},"5614":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0.cold:0x41890"},"5615":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0.isra.0"},"5616":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0:0x469220"},"5617":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0:0x49f330"},"5618":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0:0x529230"},"5619":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0:0x53bc90"},"5620":{"probe_name":"mpi-rest","function_name":"MPID_Progress_test.part.0:0x697a70"},"5621":{"probe_name":"mpi-rest","function_name":"MPID_Progress_wait"},"5622":{"probe_name":"mpi-rest","function_name":"MPID_Psend_init"},"5623":{"probe_name":"mpi-rest","function_name":"MPID_Put_stream"},"5624":{"probe_name":"mpi-rest","function_name":"MPID_Raccumulate.constprop.0"},"5625":{"probe_name":"mpi-rest","function_name":"MPID_Raccumulate.constprop.0.cold"},"5626":{"probe_name":"mpi-rest","function_name":"MPID_Recv_enqueue"},"5627":{"probe_name":"mpi-rest","function_name":"MPID_Recv_init.constprop.0"},"5628":{"probe_name":"mpi-rest","function_name":"MPID_Recv_init.constprop.0.cold"},"5629":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x11ef70"},"5630":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x133470"},"5631":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x140d20"},"5632":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x152cd0"},"5633":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x169890"},"5634":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x17d1a0"},"5635":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x191fd0"},"5636":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x1a02e0"},"5637":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x1b63b0"},"5638":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x1d3290"},"5639":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x1ea520"},"5640":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x200ee0"},"5641":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x21c9d0"},"5642":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x22fef0"},"5643":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x2404f0"},"5644":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x25abe0"},"5645":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x278830"},"5646":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x28b650"},"5647":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x295020"},"5648":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x2a8e30"},"5649":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x2b6af0"},"5650":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x2c8a80"},"5651":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x2d81d0"},"5652":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x2e79f0"},"5653":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x2f7150"},"5654":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x306900"},"5655":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x317400"},"5656":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x326140"},"5657":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x338a50"},"5658":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x3475f0"},"5659":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x3557d0"},"5660":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x365ea0"},"5661":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x375f20"},"5662":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x41b520"},"5663":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x4573e0"},"5664":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x480400"},"5665":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x493670"},"5666":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x4b74e0"},"5667":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x4f6f60"},"5668":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x506970"},"5669":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x51d680"},"5670":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x52faa0"},"5671":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x547be0"},"5672":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x562f50"},"5673":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x5ca470"},"5674":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x5e14d0"},"5675":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x5e9af0"},"5676":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x5fbd10"},"5677":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x617c10"},"5678":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x62fd50"},"5679":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x65ed80"},"5680":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x6712a0"},"5681":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x68d390"},"5682":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x69e470"},"5683":{"probe_name":"mpi-rest","function_name":"MPID_Request_complete.isra.0:0x6bbbb0"},"5684":{"probe_name":"mpi-rest","function_name":"MPID_Rget.part.0"},"5685":{"probe_name":"mpi-rest","function_name":"MPID_Rget_accumulate.constprop.0"},"5686":{"probe_name":"mpi-rest","function_name":"MPID_Rget_accumulate.constprop.0.cold"},"5687":{"probe_name":"mpi-rest","function_name":"MPID_Rput.part.0"},"5688":{"probe_name":"mpi-rest","function_name":"MPID_Rsend_init.part.0"},"5689":{"probe_name":"mpi-rest","function_name":"MPID_ST_create_queue"},"5690":{"probe_name":"mpi-rest","function_name":"MPID_ST_enqueue_msg"},"5691":{"probe_name":"mpi-rest","function_name":"MPID_ST_enqueue_start"},"5692":{"probe_name":"mpi-rest","function_name":"MPID_ST_enqueue_wait"},"5693":{"probe_name":"mpi-rest","function_name":"MPID_ST_free_queue"},"5694":{"probe_name":"mpi-rest","function_name":"MPID_ST_get_queue_comm_ptr"},"5695":{"probe_name":"mpi-rest","function_name":"MPID_ST_init"},"5696":{"probe_name":"mpi-rest","function_name":"MPID_ST_initialized"},"5697":{"probe_name":"mpi-rest","function_name":"MPID_ST_progress_queue"},"5698":{"probe_name":"mpi-rest","function_name":"MPID_ST_used"},"5699":{"probe_name":"mpi-rest","function_name":"MPID_Send_enqueue"},"5700":{"probe_name":"mpi-rest","function_name":"MPID_Send_init.part.0"},"5701":{"probe_name":"mpi-rest","function_name":"MPID_Setup_trecv.constprop.0"},"5702":{"probe_name":"mpi-rest","function_name":"MPID_Ssend_init.part.0"},"5703":{"probe_name":"mpi-rest","function_name":"MPID_Startall.constprop.0"},"5704":{"probe_name":"mpi-rest","function_name":"MPID_Stream_create_hook"},"5705":{"probe_name":"mpi-rest","function_name":"MPID_Stream_free_hook"},"5706":{"probe_name":"mpi-rest","function_name":"MPID_Stream_progress.isra.0"},"5707":{"probe_name":"mpi-rest","function_name":"MPID_Test.constprop.0"},"5708":{"probe_name":"mpi-rest","function_name":"MPID_Test.constprop.0.isra.0"},"5709":{"probe_name":"mpi-rest","function_name":"MPID_Testany"},"5710":{"probe_name":"mpi-rest","function_name":"MPID_Testsome"},"5711":{"probe_name":"mpi-rest","function_name":"MPID_Type_commit_hook"},"5712":{"probe_name":"mpi-rest","function_name":"MPID_Type_free_hook"},"5713":{"probe_name":"mpi-rest","function_name":"MPID_Wait.constprop.0:0x19f6c0"},"5714":{"probe_name":"mpi-rest","function_name":"MPID_Wait.constprop.0:0x1a82d0"},"5715":{"probe_name":"mpi-rest","function_name":"MPID_Wait.constprop.0:0x1b4e10"},"5716":{"probe_name":"mpi-rest","function_name":"MPID_Wait.constprop.0:0x1d1cf0"},"5717":{"probe_name":"mpi-rest","function_name":"MPID_Wait.constprop.0:0x455c50"},"5718":{"probe_name":"mpi-rest","function_name":"MPID_Wait.constprop.0:0x505320"},"5719":{"probe_name":"mpi-rest","function_name":"MPID_Wait.constprop.0:0x560280"},"5720":{"probe_name":"mpi-rest","function_name":"MPID_Wait:0x18af80"},"5721":{"probe_name":"mpi-rest","function_name":"MPID_Wait:0x53f000"},"5722":{"probe_name":"mpi-rest","function_name":"MPID_Wait_enqueue"},"5723":{"probe_name":"mpi-rest","function_name":"MPID_Waitall_enqueue"},"5724":{"probe_name":"mpi-rest","function_name":"MPID_Waitany"},"5725":{"probe_name":"mpi-rest","function_name":"MPID_Waitsome"},"5726":{"probe_name":"mpi-rest","function_name":"MPID_Win_allocate"},"5727":{"probe_name":"mpi-rest","function_name":"MPID_Win_allocate_shared"},"5728":{"probe_name":"mpi-rest","function_name":"MPID_Win_attach"},"5729":{"probe_name":"mpi-rest","function_name":"MPID_Win_complete_stream"},"5730":{"probe_name":"mpi-rest","function_name":"MPID_Win_create"},"5731":{"probe_name":"mpi-rest","function_name":"MPID_Win_create_dynamic"},"5732":{"probe_name":"mpi-rest","function_name":"MPID_Win_create_stream"},"5733":{"probe_name":"mpi-rest","function_name":"MPID_Win_detach"},"5734":{"probe_name":"mpi-rest","function_name":"MPID_Win_free"},"5735":{"probe_name":"mpi-rest","function_name":"MPID_Win_get_info"},"5736":{"probe_name":"mpi-rest","function_name":"MPID_Win_post_stream"},"5737":{"probe_name":"mpi-rest","function_name":"MPID_Win_progress_stream"},"5738":{"probe_name":"mpi-rest","function_name":"MPID_Win_set_info"},"5739":{"probe_name":"mpi-rest","function_name":"MPID_Win_start_stream"},"5740":{"probe_name":"mpi-rest","function_name":"MPID_Win_stream"},"5741":{"probe_name":"mpi-rest","function_name":"MPID_Win_wait_stream"},"5742":{"probe_name":"mpi-rest","function_name":"MPIOI_File_iread"},"5743":{"probe_name":"mpi-rest","function_name":"MPIOI_File_iread_all"},"5744":{"probe_name":"mpi-rest","function_name":"MPIOI_File_iread_shared"},"5745":{"probe_name":"mpi-rest","function_name":"MPIOI_File_iwrite"},"5746":{"probe_name":"mpi-rest","function_name":"MPIOI_File_iwrite_all"},"5747":{"probe_name":"mpi-rest","function_name":"MPIOI_File_iwrite_shared"},"5748":{"probe_name":"mpi-rest","function_name":"MPIOI_File_read"},"5749":{"probe_name":"mpi-rest","function_name":"MPIOI_File_read_all"},"5750":{"probe_name":"mpi-rest","function_name":"MPIOI_File_read_all_begin"},"5751":{"probe_name":"mpi-rest","function_name":"MPIOI_File_read_all_end"},"5752":{"probe_name":"mpi-rest","function_name":"MPIOI_File_read_ordered"},"5753":{"probe_name":"mpi-rest","function_name":"MPIOI_File_read_ordered_begin"},"5754":{"probe_name":"mpi-rest","function_name":"MPIOI_File_read_shared"},"5755":{"probe_name":"mpi-rest","function_name":"MPIOI_File_write"},"5756":{"probe_name":"mpi-rest","function_name":"MPIOI_File_write_all"},"5757":{"probe_name":"mpi-rest","function_name":"MPIOI_File_write_all_begin"},"5758":{"probe_name":"mpi-rest","function_name":"MPIOI_File_write_all_end"},"5759":{"probe_name":"mpi-rest","function_name":"MPIOI_File_write_ordered"},"5760":{"probe_name":"mpi-rest","function_name":"MPIOI_File_write_ordered_begin"},"5761":{"probe_name":"mpi-rest","function_name":"MPIOI_File_write_shared"},"5762":{"probe_name":"mpi-rest","function_name":"MPIOI_Register_datarep"},"5763":{"probe_name":"mpi-rest","function_name":"MPIOI_Type_block"},"5764":{"probe_name":"mpi-rest","function_name":"MPIOI_Type_cyclic"},"5765":{"probe_name":"mpi-rest","function_name":"MPIO_Completed_request_create"},"5766":{"probe_name":"mpi-rest","function_name":"MPIO_Err_create_code"},"5767":{"probe_name":"mpi-rest","function_name":"MPIO_Err_return_comm"},"5768":{"probe_name":"mpi-rest","function_name":"MPIO_Err_return_file"},"5769":{"probe_name":"mpi-rest","function_name":"MPIO_File_c2f"},"5770":{"probe_name":"mpi-rest","function_name":"MPIO_File_create"},"5771":{"probe_name":"mpi-rest","function_name":"MPIO_File_f2c"},"5772":{"probe_name":"mpi-rest","function_name":"MPIO_File_free"},"5773":{"probe_name":"mpi-rest","function_name":"MPIO_File_resolve"},"5774":{"probe_name":"mpi-rest","function_name":"MPIR_Abort"},"5775":{"probe_name":"mpi-rest","function_name":"MPIR_Abort_impl"},"5776":{"probe_name":"mpi-rest","function_name":"MPIR_Add_error_class_impl"},"5777":{"probe_name":"mpi-rest","function_name":"MPIR_Add_error_code_impl"},"5778":{"probe_name":"mpi-rest","function_name":"MPIR_Add_error_string_impl"},"5779":{"probe_name":"mpi-rest","function_name":"MPIR_Add_finalize"},"5780":{"probe_name":"mpi-rest","function_name":"MPIR_All_romio_symbols"},"5781":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather"},"5782":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather.cold"},"5783":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_allcomm_auto"},"5784":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_allcomm_nb"},"5785":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_impl"},"5786":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_init"},"5787":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_init_impl"},"5788":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_inter_local_gather_remote_bcast"},"5789":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_inter_local_gather_remote_bcast.cold"},"5790":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_brucks"},"5791":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_brucks.cold"},"5792":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_k_brucks"},"5793":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_k_brucks.cold"},"5794":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_recursive_doubling"},"5795":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_recursive_doubling.cold"},"5796":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_ring"},"5797":{"probe_name":"mpi-rest","function_name":"MPIR_Allgather_intra_ring.cold"},"5798":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv"},"5799":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_allcomm_auto"},"5800":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_allcomm_nb"},"5801":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_impl"},"5802":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_init"},"5803":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_init_impl"},"5804":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_inter_remote_gather_local_bcast"},"5805":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_intra_brucks"},"5806":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_intra_brucks.cold"},"5807":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_intra_recursive_doubling"},"5808":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_intra_recursive_doubling.cold"},"5809":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_intra_ring"},"5810":{"probe_name":"mpi-rest","function_name":"MPIR_Allgatherv_intra_ring.cold"},"5811":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce"},"5812":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce.cold"},"5813":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_allcomm_auto"},"5814":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_allcomm_nb"},"5815":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_enqueue_impl"},"5816":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_enqueue_impl.cold"},"5817":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_impl"},"5818":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_init"},"5819":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_init_impl"},"5820":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_inter_reduce_exchange_bcast"},"5821":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_inter_reduce_exchange_bcast.cold"},"5822":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_k_reduce_scatter_allgather"},"5823":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_k_reduce_scatter_allgather.cold"},"5824":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_recexch"},"5825":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_recexch.cold"},"5826":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_recursive_doubling"},"5827":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_recursive_doubling.cold"},"5828":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_reduce_scatter_allgather"},"5829":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_reduce_scatter_allgather.cold"},"5830":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_ring"},"5831":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_ring.cold"},"5832":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_smp"},"5833":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_tree"},"5834":{"probe_name":"mpi-rest","function_name":"MPIR_Allreduce_intra_tree.cold"},"5835":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall"},"5836":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall.cold"},"5837":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_allcomm_auto"},"5838":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_allcomm_nb"},"5839":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_impl"},"5840":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_init"},"5841":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_init_impl"},"5842":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_inter_pairwise_exchange"},"5843":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_inter_pairwise_exchange.cold"},"5844":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_brucks"},"5845":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_brucks.cold"},"5846":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_k_brucks"},"5847":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_k_brucks.cold"},"5848":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_pairwise"},"5849":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_pairwise.cold"},"5850":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_pairwise_sendrecv_replace"},"5851":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_pairwise_sendrecv_replace.cold"},"5852":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_scattered"},"5853":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoall_intra_scattered.cold"},"5854":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv"},"5855":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_allcomm_auto"},"5856":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_allcomm_nb"},"5857":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_impl"},"5858":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_init"},"5859":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_init_impl"},"5860":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_inter_pairwise_exchange"},"5861":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_inter_pairwise_exchange.cold"},"5862":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_intra_pairwise_sendrecv_replace"},"5863":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_intra_pairwise_sendrecv_replace.cold"},"5864":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_intra_scattered"},"5865":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallv_intra_scattered.cold"},"5866":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw"},"5867":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_allcomm_auto"},"5868":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_allcomm_nb"},"5869":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_impl"},"5870":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_init"},"5871":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_init_impl"},"5872":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_inter_pairwise_exchange"},"5873":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_intra_pairwise_sendrecv_replace"},"5874":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_intra_scattered"},"5875":{"probe_name":"mpi-rest","function_name":"MPIR_Alltoallw_intra_scattered.cold"},"5876":{"probe_name":"mpi-rest","function_name":"MPIR_Assert_fail"},"5877":{"probe_name":"mpi-rest","function_name":"MPIR_Assert_fail_fmt"},"5878":{"probe_name":"mpi-rest","function_name":"MPIR_Attr_delete_list"},"5879":{"probe_name":"mpi-rest","function_name":"MPIR_Attr_dup_list"},"5880":{"probe_name":"mpi-rest","function_name":"MPIR_BAND"},"5881":{"probe_name":"mpi-rest","function_name":"MPIR_BAND_check_dtype"},"5882":{"probe_name":"mpi-rest","function_name":"MPIR_BOR"},"5883":{"probe_name":"mpi-rest","function_name":"MPIR_BOR_check_dtype"},"5884":{"probe_name":"mpi-rest","function_name":"MPIR_BXOR"},"5885":{"probe_name":"mpi-rest","function_name":"MPIR_BXOR_check_dtype"},"5886":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier"},"5887":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_allcomm_auto"},"5888":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_allcomm_nb"},"5889":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_impl"},"5890":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_init"},"5891":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_init_impl"},"5892":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_inter_bcast"},"5893":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_intra_dissemination"},"5894":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_intra_k_dissemination"},"5895":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_intra_recexch"},"5896":{"probe_name":"mpi-rest","function_name":"MPIR_Barrier_intra_smp"},"5897":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast"},"5898":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_allcomm_auto"},"5899":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_allcomm_nb"},"5900":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_impl"},"5901":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_init"},"5902":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_init_impl"},"5903":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_inter_remote_send_local_bcast"},"5904":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_binomial"},"5905":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_pipelined_tree"},"5906":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_pipelined_tree.cold"},"5907":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_scatter_recursive_doubling_allgather"},"5908":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_scatter_ring_allgather"},"5909":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_smp"},"5910":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_smp.cold"},"5911":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_tree"},"5912":{"probe_name":"mpi-rest","function_name":"MPIR_Bcast_intra_tree.cold"},"5913":{"probe_name":"mpi-rest","function_name":"MPIR_Bsend_attach"},"5914":{"probe_name":"mpi-rest","function_name":"MPIR_Bsend_check_active"},"5915":{"probe_name":"mpi-rest","function_name":"MPIR_Bsend_detach"},"5916":{"probe_name":"mpi-rest","function_name":"MPIR_Bsend_finalize"},"5917":{"probe_name":"mpi-rest","function_name":"MPIR_Bsend_free_req_seg"},"5918":{"probe_name":"mpi-rest","function_name":"MPIR_Bsend_free_segment"},"5919":{"probe_name":"mpi-rest","function_name":"MPIR_Bsend_isend"},"5920":{"probe_name":"mpi-rest","function_name":"MPIR_Buffer_detach_impl"},"5921":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allgather"},"5922":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allgather.cold"},"5923":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allgather_very_large_msg"},"5924":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allgather_very_large_msg.cold"},"5925":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allgatherv"},"5926":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allgatherv.cold"},"5927":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allreduce"},"5928":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allreduce.cold"},"5929":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allreduce_chunked"},"5930":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Allreduce_chunked.cold"},"5931":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Alltoall"},"5932":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Alltoall.cold"},"5933":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Alltoall_chunking"},"5934":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Alltoall_throttled"},"5935":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Alltoall_throttled.cold"},"5936":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Alltoallv"},"5937":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Alltoallv.cold"},"5938":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Barrier"},"5939":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Bcast"},"5940":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Bcast.cold"},"5941":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Bcast_Tree"},"5942":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_GPU_Allreduce_pipelined"},"5943":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_GPU_Allreduce_pipelined.cold"},"5944":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Gatherv"},"5945":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Gatherv.cold"},"5946":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Igatherv"},"5947":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Igatherv_sched_impl"},"5948":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Igatherv_sched_impl.cold"},"5949":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Reduce"},"5950":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Reduce.cold"},"5951":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Reduce_chunked"},"5952":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Reduce_chunked.cold"},"5953":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_SP_Gatherv"},"5954":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_SP_Gatherv.cold"},"5955":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Scatterv"},"5956":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_Scatterv.cold"},"5957":{"probe_name":"mpi-rest","function_name":"MPIR_CRAY_coll_sync_stats_print"},"5958":{"probe_name":"mpi-rest","function_name":"MPIR_Call_attr_copy"},"5959":{"probe_name":"mpi-rest","function_name":"MPIR_Call_attr_delete"},"5960":{"probe_name":"mpi-rest","function_name":"MPIR_Cancel_impl"},"5961":{"probe_name":"mpi-rest","function_name":"MPIR_Cart_coords_impl"},"5962":{"probe_name":"mpi-rest","function_name":"MPIR_Cart_create_impl"},"5963":{"probe_name":"mpi-rest","function_name":"MPIR_Cart_get_impl"},"5964":{"probe_name":"mpi-rest","function_name":"MPIR_Cart_map_impl"},"5965":{"probe_name":"mpi-rest","function_name":"MPIR_Cart_rank_impl"},"5966":{"probe_name":"mpi-rest","function_name":"MPIR_Cart_shift_impl"},"5967":{"probe_name":"mpi-rest","function_name":"MPIR_Cart_sub_impl"},"5968":{"probe_name":"mpi-rest","function_name":"MPIR_Cartdim_get_impl"},"5969":{"probe_name":"mpi-rest","function_name":"MPIR_Close_port_impl"},"5970":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_comm_init"},"5971":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_host_buffer_alloc"},"5972":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_host_buffer_free"},"5973":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_host_buffer_persist_set"},"5974":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_host_buffer_persist_set.cold"},"5975":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_host_buffer_swap_back"},"5976":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_host_buffer_swap_back.cold"},"5977":{"probe_name":"mpi-rest","function_name":"MPIR_Coll_safe_to_block"},"5978":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_accept_impl"},"5979":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_agree_impl"},"5980":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_call_errhandler_impl"},"5981":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_commit"},"5982":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_commit_internal"},"5983":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_compare_impl"},"5984":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_connect_impl"},"5985":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_copy_stream"},"5986":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create"},"5987":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_errhandler_impl"},"5988":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_from_group_impl"},"5989":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_group_impl"},"5990":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_impl"},"5991":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_inter"},"5992":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_intra"},"5993":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_keyval_impl"},"5994":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_create_subcomms"},"5995":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_delete_attr_impl"},"5996":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_delete_internal"},"5997":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_disconnect_impl"},"5998":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_dup_impl"},"5999":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_dup_with_info_impl"},"6000":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_free_impl"},"6001":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_free_keyval_impl"},"6002":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_get_attr_impl"},"6003":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_get_errhandler_impl"},"6004":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_get_failed_impl"},"6005":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_get_info_impl"},"6006":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_get_name_impl"},"6007":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_get_parent_impl"},"6008":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_get_stream_impl"},"6009":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_group_impl"},"6010":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_hint_init"},"6011":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_idup_impl"},"6012":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_idup_with_info_impl"},"6013":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_is_parent_comm"},"6014":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_join_impl"},"6015":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_map_dup"},"6016":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_map_free"},"6017":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_map_irregular"},"6018":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_rank_impl"},"6019":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_register_hint"},"6020":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_release_always"},"6021":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_remote_group_impl"},"6022":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_remote_size_impl"},"6023":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_set_attr_impl"},"6024":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_set_errhandler_impl"},"6025":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_set_info_impl"},"6026":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_set_name_impl"},"6027":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_shrink_impl"},"6028":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_size_impl"},"6029":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_spawn_impl"},"6030":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_spawn_multiple_impl"},"6031":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_filesystem"},"6032":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_impl"},"6033":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type"},"6034":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_by_node"},"6035":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_hw_guided"},"6036":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_hw_unguided"},"6037":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_impl"},"6038":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_nbhd_common_dir"},"6039":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_neighborhood"},"6040":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_network_topo"},"6041":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_node_topo"},"6042":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_split_type_self"},"6043":{"probe_name":"mpi-rest","function_name":"MPIR_Comm_test_inter_impl"},"6044":{"probe_name":"mpi-rest","function_name":"MPIR_Compare_equal"},"6045":{"probe_name":"mpi-rest","function_name":"MPIR_Copy_array"},"6046":{"probe_name":"mpi-rest","function_name":"MPIR_Cray_Memcpy_wrapper"},"6047":{"probe_name":"mpi-rest","function_name":"MPIR_Create_unnamed_predefined"},"6048":{"probe_name":"mpi-rest","function_name":"MPIR_Create_unnamed_predefined.cold"},"6049":{"probe_name":"mpi-rest","function_name":"MPIR_Csel_create_from_buf"},"6050":{"probe_name":"mpi-rest","function_name":"MPIR_Csel_create_from_file"},"6051":{"probe_name":"mpi-rest","function_name":"MPIR_Csel_free"},"6052":{"probe_name":"mpi-rest","function_name":"MPIR_Csel_prune"},"6053":{"probe_name":"mpi-rest","function_name":"MPIR_Csel_search"},"6054":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_blockindexed"},"6055":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_blockindexed.cold"},"6056":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_contiguous"},"6057":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_contiguous.cold"},"6058":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_indexed"},"6059":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_indexed.cold"},"6060":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_resized"},"6061":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_struct"},"6062":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_struct.cold"},"6063":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_vector"},"6064":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_create_vector.cold"},"6065":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_dup"},"6066":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_flatten"},"6067":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_flatten_size"},"6068":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_free"},"6069":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_get_contig"},"6070":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_iov"},"6071":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_iov_len"},"6072":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_printf"},"6073":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_printf.cold"},"6074":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_size_external32"},"6075":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_size_external32.cold"},"6076":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_unflatten"},"6077":{"probe_name":"mpi-rest","function_name":"MPIR_Dataloop_update_contig"},"6078":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_builtin_to_string"},"6079":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_builtintype_alignment"},"6080":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_combiner_to_string"},"6081":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_commit_pairtypes"},"6082":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_debug"},"6083":{"probe_name":"mpi-rest","function_name":"MPIR_Datatype_free"}} diff --git a/etc/datacrumbs/data/categories-haridev-tuolumne.json b/etc/datacrumbs/data/categories-haridev-tuolumne.json deleted file mode 100644 index fecb56cc..00000000 --- a/etc/datacrumbs/data/categories-haridev-tuolumne.json +++ /dev/null @@ -1 +0,0 @@ -{"1063":{"probe_name":"libc","function_name":"fwscanf"},"1062":{"probe_name":"libc","function_name":"fwrite"},"1061":{"probe_name":"libc","function_name":"fwprintf"},"1060":{"probe_name":"libc","function_name":"ftw64"},"1059":{"probe_name":"libc","function_name":"ftw"},"1058":{"probe_name":"libc","function_name":"ftruncate64"},"1057":{"probe_name":"libc","function_name":"ftruncate"},"1056":{"probe_name":"libc","function_name":"ftello64"},"1025":{"probe_name":"libc","function_name":"fcntl"},"1024":{"probe_name":"libc","function_name":"fcloseall"},"1023":{"probe_name":"libc","function_name":"fchownat"},"1022":{"probe_name":"libc","function_name":"fchown"},"1021":{"probe_name":"libc","function_name":"fchmodat"},"1020":{"probe_name":"libc","function_name":"fchmod"},"1019":{"probe_name":"libc","function_name":"fchdir"},"1014":{"probe_name":"libc","function_name":"euidaccess"},"1013":{"probe_name":"libc","function_name":"eaccess"},"1012":{"probe_name":"libc","function_name":"dup3"},"1011":{"probe_name":"libc","function_name":"dup2"},"1010":{"probe_name":"libc","function_name":"dup"},"1015":{"probe_name":"libc","function_name":"eventfd"},"1003":{"probe_name":"libc","function_name":"chown"},"1001":{"probe_name":"libc","function_name":"chdir"},"0":{"probe_name":"M","function_name":"SH"},"1016":{"probe_name":"libc","function_name":"faccessat"},"1004":{"probe_name":"libc","function_name":"close"},"1002":{"probe_name":"libc","function_name":"chmod"},"1":{"probe_name":"DC","function_name":"start"},"1017":{"probe_name":"libc","function_name":"fallocate"},"1018":{"probe_name":"libc","function_name":"fallocate64"},"2":{"probe_name":"DC","function_name":"end"},"1005":{"probe_name":"libc","function_name":"closedir"},"1000":{"probe_name":"libc","function_name":"access"},"1006":{"probe_name":"libc","function_name":"connect"},"1007":{"probe_name":"libc","function_name":"creat"},"1008":{"probe_name":"libc","function_name":"creat64"},"1009":{"probe_name":"libc","function_name":"dirfd"},"1026":{"probe_name":"libc","function_name":"fcntl64"},"1027":{"probe_name":"libc","function_name":"fdatasync"},"1028":{"probe_name":"libc","function_name":"fdopendir"},"1029":{"probe_name":"libc","function_name":"fflush"},"1030":{"probe_name":"libc","function_name":"fgetc"},"1031":{"probe_name":"libc","function_name":"fgets"},"1032":{"probe_name":"libc","function_name":"fgetwc"},"1033":{"probe_name":"libc","function_name":"fgetws"},"1034":{"probe_name":"libc","function_name":"fgetxattr"},"1035":{"probe_name":"libc","function_name":"fileno"},"1036":{"probe_name":"libc","function_name":"flistxattr"},"1037":{"probe_name":"libc","function_name":"flock"},"1038":{"probe_name":"libc","function_name":"fopen64"},"1039":{"probe_name":"libc","function_name":"fprintf"},"1040":{"probe_name":"libc","function_name":"fputc"},"1041":{"probe_name":"libc","function_name":"fputs"},"1042":{"probe_name":"libc","function_name":"fputwc"},"1043":{"probe_name":"libc","function_name":"fputws"},"1044":{"probe_name":"libc","function_name":"fread"},"1045":{"probe_name":"libc","function_name":"fremovexattr"},"1046":{"probe_name":"libc","function_name":"freopen"},"1047":{"probe_name":"libc","function_name":"freopen64"},"1048":{"probe_name":"libc","function_name":"fscanf"},"1049":{"probe_name":"libc","function_name":"fseek"},"1050":{"probe_name":"libc","function_name":"fseeko"},"1051":{"probe_name":"libc","function_name":"fseeko64"},"1052":{"probe_name":"libc","function_name":"fsetxattr"},"1053":{"probe_name":"libc","function_name":"fsync"},"1054":{"probe_name":"libc","function_name":"ftell"},"1055":{"probe_name":"libc","function_name":"ftello"}} diff --git a/etc/datacrumbs/data/categories-root-docker.json b/etc/datacrumbs/data/categories-root-docker.json deleted file mode 100644 index 35a9df9b..00000000 --- a/etc/datacrumbs/data/categories-root-docker.json +++ /dev/null @@ -1 +0,0 @@ -{"1079":{"probe_name":"iomap","function_name":"iomap_zero_range"},"1078":{"probe_name":"iomap","function_name":"iomap_writepages"},"1077":{"probe_name":"iomap","function_name":"iomap_writepage_end_bio"},"1076":{"probe_name":"iomap","function_name":"iomap_write_end"},"1075":{"probe_name":"iomap","function_name":"iomap_write_begin"},"1074":{"probe_name":"iomap","function_name":"iomap_truncate_page"},"1073":{"probe_name":"iomap","function_name":"iomap_to_fiemap"},"1072":{"probe_name":"iomap","function_name":"iomap_swapfile_fail"},"1071":{"probe_name":"iomap","function_name":"iomap_swapfile_add_extent"},"1070":{"probe_name":"iomap","function_name":"iomap_swapfile_activate"},"1069":{"probe_name":"iomap","function_name":"iomap_submit_ioend"},"1068":{"probe_name":"iomap","function_name":"iomap_sort_ioends"},"1067":{"probe_name":"iomap","function_name":"iomap_set_range_uptodate"},"1066":{"probe_name":"iomap","function_name":"iomap_seek_hole"},"1065":{"probe_name":"iomap","function_name":"iomap_seek_data"},"1064":{"probe_name":"iomap","function_name":"iomap_release_folio"},"1063":{"probe_name":"iomap","function_name":"iomap_readpage_iter"},"1062":{"probe_name":"iomap","function_name":"iomap_readahead"},"1061":{"probe_name":"iomap","function_name":"iomap_read_inline_data"},"1060":{"probe_name":"iomap","function_name":"iomap_read_folio_sync"},"1059":{"probe_name":"iomap","function_name":"iomap_read_folio"},"1058":{"probe_name":"iomap","function_name":"iomap_read_end_io"},"1057":{"probe_name":"iomap","function_name":"iomap_page_mkwrite"},"1056":{"probe_name":"iomap","function_name":"iomap_iter"},"1013":{"probe_name":"os_page_cache","function_name":"find_get_entries"},"100000":{"probe_name":"custom1","function_name":"openat"},"1012":{"probe_name":"os_page_cache","function_name":"end_page_writeback"},"1011":{"probe_name":"os_page_cache","function_name":"delete_from_page_cache_batch"},"1010":{"probe_name":"os_page_cache","function_name":"add_to_page_cache_lru"},"1009":{"probe_name":"python","function_name":"function__entry"},"1008":{"probe_name":"libc","function_name":"__unregister_atfork"},"100020":{"probe_name":"custom1","function_name":"openat2"},"1033":{"probe_name":"iomap","function_name":"iomap_bmap"},"1007":{"probe_name":"libc","function_name":"__run_fork_handlers"},"100019":{"probe_name":"custom1","function_name":"open"},"1032":{"probe_name":"iomap","function_name":"iomap_adjust_read_range"},"1006":{"probe_name":"libc","function_name":"__malloc_fork_unlock_parent"},"100018":{"probe_name":"custom1","function_name":"writev"},"1031":{"probe_name":"shm","function_name":"shmem_zero_setup"},"1005":{"probe_name":"libc","function_name":"__malloc_fork_unlock_child"},"100017":{"probe_name":"custom1","function_name":"readv"},"1030":{"probe_name":"shm","function_name":"shmem_unuse"},"1004":{"probe_name":"libc","function_name":"__malloc_fork_lock_parent"},"100016":{"probe_name":"custom1","function_name":"readahead"},"1029":{"probe_name":"shm","function_name":"shmem_unlock_mapping"},"1003":{"probe_name":"libc","function_name":"__libc_vfork"},"100015":{"probe_name":"custom1","function_name":"pwritev2"},"1028":{"probe_name":"shm","function_name":"shmem_uncharge"},"100004":{"probe_name":"custom1","function_name":"fallocate"},"1017":{"probe_name":"shm","function_name":"shmem_file_setup"},"100003":{"probe_name":"custom1","function_name":"close"},"1016":{"probe_name":"shm","function_name":"shmem_charge"},"100001":{"probe_name":"custom1","function_name":"read"},"1014":{"probe_name":"os_page_cache","function_name":"grab_cache_page_write_begin"},"100002":{"probe_name":"custom1","function_name":"write"},"1015":{"probe_name":"os_page_cache","function_name":"release_pages"},"100014":{"probe_name":"custom1","function_name":"pwritev"},"1027":{"probe_name":"shm","function_name":"shmem_truncate_range"},"100011":{"probe_name":"custom1","function_name":"preadv"},"1024":{"probe_name":"shm","function_name":"shmem_partial_swap_usage"},"100005":{"probe_name":"custom1","function_name":"fdatasync"},"1018":{"probe_name":"shm","function_name":"shmem_file_setup_with_mnt"},"100006":{"probe_name":"custom1","function_name":"flock"},"1019":{"probe_name":"shm","function_name":"shmem_get_unmapped_area"},"100007":{"probe_name":"custom1","function_name":"fsync"},"1020":{"probe_name":"shm","function_name":"shmem_init_fs_context"},"100008":{"probe_name":"custom1","function_name":"ftruncate"},"1021":{"probe_name":"shm","function_name":"shmem_kernel_file_setup"},"100009":{"probe_name":"custom1","function_name":"lseek"},"1022":{"probe_name":"shm","function_name":"shmem_lock"},"100010":{"probe_name":"custom1","function_name":"pread64"},"1023":{"probe_name":"shm","function_name":"shmem_mapping"},"1000":{"probe_name":"libc","function_name":"__GI___fork"},"100012":{"probe_name":"custom1","function_name":"preadv2"},"1025":{"probe_name":"shm","function_name":"shmem_read_mapping_page_gfp"},"1001":{"probe_name":"libc","function_name":"__GI___register_atfork"},"100013":{"probe_name":"custom1","function_name":"pwrite64"},"1026":{"probe_name":"shm","function_name":"shmem_swap_usage"},"0":{"probe_name":"M","function_name":"SH"},"1002":{"probe_name":"libc","function_name":"__GI___vfork"},"1034":{"probe_name":"iomap","function_name":"iomap_dio_alloc_bio.isra.0"},"1035":{"probe_name":"iomap","function_name":"iomap_dio_bio_end_io"},"1036":{"probe_name":"iomap","function_name":"iomap_dio_bio_iter"},"1037":{"probe_name":"iomap","function_name":"iomap_dio_complete"},"1038":{"probe_name":"iomap","function_name":"iomap_dio_complete_work"},"1039":{"probe_name":"iomap","function_name":"iomap_dio_deferred_complete"},"1040":{"probe_name":"iomap","function_name":"iomap_dio_hole_iter"},"1041":{"probe_name":"iomap","function_name":"iomap_dio_rw"},"1042":{"probe_name":"iomap","function_name":"iomap_dio_submit_bio"},"1043":{"probe_name":"iomap","function_name":"iomap_dio_zero"},"1044":{"probe_name":"iomap","function_name":"iomap_dirty_folio"},"1045":{"probe_name":"iomap","function_name":"iomap_fiemap"},"1046":{"probe_name":"iomap","function_name":"iomap_file_buffered_write"},"1047":{"probe_name":"iomap","function_name":"iomap_file_buffered_write_punch_delalloc"},"1048":{"probe_name":"iomap","function_name":"iomap_file_unshare"},"1049":{"probe_name":"iomap","function_name":"iomap_finish_ioend"},"1050":{"probe_name":"iomap","function_name":"iomap_finish_ioends"},"1051":{"probe_name":"iomap","function_name":"iomap_get_folio"},"1052":{"probe_name":"iomap","function_name":"iomap_invalidate_folio"},"1053":{"probe_name":"iomap","function_name":"iomap_ioend_compare"},"1054":{"probe_name":"iomap","function_name":"iomap_ioend_try_merge"},"1055":{"probe_name":"iomap","function_name":"iomap_is_partially_uptodate"}} diff --git a/etc/datacrumbs/data/compact.sh b/etc/datacrumbs/data/compact.sh deleted file mode 100755 index 84d580fb..00000000 --- a/etc/datacrumbs/data/compact.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -for file in *.json; do - [ -e "$file" ] || continue - jq -c . "$file" >"${file}.tmp" && mv "${file}.tmp" "$file" -done diff --git a/etc/datacrumbs/data/manual-probes-haridev-lead-us.json b/etc/datacrumbs/data/manual-probes-haridev-lead-us.json deleted file mode 100644 index 538d70c3..00000000 --- a/etc/datacrumbs/data/manual-probes-haridev-lead-us.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"libc","functions":["1010","1011","1051","1052","1567","1568","1569","1570","1928","1929","1930","1931"],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false}] diff --git a/etc/datacrumbs/data/manual-probes-haridev-lead.json b/etc/datacrumbs/data/manual-probes-haridev-lead.json deleted file mode 100644 index 470ad516..00000000 --- a/etc/datacrumbs/data/manual-probes-haridev-lead.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"ior","functions":["2060","2061"],"binary_path":"/home/haridev/spack/opt/spack/linux-haswell/ior-3.3.0-ip47j26fw7xxfftdzjvy2h36phgcuypv/bin/ior","include_offsets":false}] diff --git a/etc/datacrumbs/data/manual-probes-haridev-tuolumne-mpiio.json b/etc/datacrumbs/data/manual-probes-haridev-tuolumne-mpiio.json deleted file mode 100644 index 59577fce..00000000 --- a/etc/datacrumbs/data/manual-probes-haridev-tuolumne-mpiio.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"mpi-rest","functions":["2077","2078","2087","2088","2090","2091","2248","2249","2255","2256","2290","2291","2306","2307","2363","2364","2365","2366","2367","2368","2376","2377","2378","2379","2380","2381","2382","2383","2384","2385","2386","2387","2388","2389","2390","2391","2392","2393","2394","2395","2396","2397","2398","2399","2400","2401","2402","2403","2404","2405","2406","2407","2408","2409","2410","2411","2412","2413","2414","2415","2416","2417","2418","2419","2420","2421","2422","2423","2424","2425","2426","2427","2428","2429","2430","2431","2432","2433","2434","2435","2436","2437","2438","2439","2440","2441","2442","2443","2444","2445","2446","2447","2448","2449","2450","2451","2452","2453","2454","2455","2456","2457","2458","2459","2460","2461","2462","2463","2464","2465","2466","2467","2468","2469","2470","2471","2473","2474","2475","2476","2477","2478","2479","2480","2481","2482","2483","2484","2485","2486","2487","2488","2489","2490","2491","2492","2493","2494","2495","2496","2497","2498","2499","2500","2501","2502","2503","2504","2505","2506","2507","2508","2509","2510","2511","2512","2513","2514","2515","2516","2517","2518","2519","2520","2521","2522","2523","2524","2525","2526","2527","2528","2529","2530","2531","2532","2533","2534","2535","2536","2537","2538","2539","2540","2541","2542","2543","2544","2545","2546","2547","2548","2549","2550","2551","2552","2553","2554","2555","2556","2557","2558","2559","2560","2561","2562","2563","2564","2565","2566","2567","2568","2569","2570","2571","2572","2573","2574","2575","2576","2577","2578","2579","2580","2581","2582","2583","2584","2585","2586","2587","2588","2589","2590","2591","2592","2593","2594","2595","2596","2597","2598","2599","2600","2601","2602","2603","2604","2605","2606","2607","2608","2609","2610","2611","2612","2613","2614","2615","2616","2617","2618","2619","2620","2621","2622","2623","2624","2625","2626","2627","2628","2629","2630","2631","2632","2633","2634","2635","2636","2637","2638","2639","2640","2641","2642","2643","2644","2645","2646","2647","2648","2649","2650","2651","2652","2653","2654","2655","2656","2657","2658","2659","2660","2661","2662","2663","2664","2665","2666","2667","2668","2669","2670","2671","2672","2673","2674","2675","2676","2677","2678","2679","2680","2681","2682","2683","2684","2685","2686","2687","2688","2689","2690","2691","2692","2693","2694","2695","2696","2697","2698","2699","2700","2701","2702","2703","2704","2705","2706","2707","2708","2709","2710","2711","2712","2713","2714","2715","2716","2717","2718","2719","2720","2721","2722","2723","2724","2725","2726","2727","2728","2729","2730","2731","2732","2733","2734","2735","2736","2737","2738","2739","2740","2741","2742","2743","2744","2745","2746","2747","2748","2749","2750","2751","2752","2753","2754","2755","2756","2757","2758","2759","2760","2761","2762","2763","2764","2765","2766","2767","2768","2769","2770","2771","2772","2773","2774","2775","2776","2777","2778","2779","2780","2781","2782","2783","2784","2785","2786","2787","2788","2789","2790","2791","2813","2814","2815","2816","2817","2818","2819","2820","2821","2822","2823","2824","2825","2826","2827","2828","2829","2830","2831","2832","2833","2834","2835","2836","2837","2838","2839","2840","2841","2842","2843","2844","2845","2847","2848","2849","2850","2851","2852","2853","2854","2855","2856","2857","2858","2859","2860","2861","2862","2863","2864","2865","2866","2867","2868","2869","2870","2871","2872","2873","2874","2875","2876","2877","2878","2879","2880","2881","2882","2883","2884","2885","2886","2887","2888","2889","2890","2891","2892","2893","2894","2895","2896","2897","2898","2899","2900","2901","2902","2903","2904","2905","2906","2907","2908","2909","2910","2911","2912","2913","2914","2915","2916","2917","2918","2919","2920","2921","2922","2923","2924","2925","2926","2927","2928","2929","2930","2931","2932","2933","2934","2935","2936","2937","2938","2939","2940","2941","2942","2943","2944","2945","2946","2947","2948","2949","2950","2951","2952","2953","2954","2955","2956","2957","2958","2963","2964","2965","2966","2967","2968","2969","2970","2971","2972","2973","2974","2975","2976","2977","2978","2979","2980","2981","2982","2983","3004","3005","3006","3007","3008","3009","3028","3029","3031","3032","3033","3034","3035","3036","3037","3038","3039","3040","3041","3042","3043","3044","3045","3046","3047","3048","3049","3050","3051","3052","3053","3054","3055","3056","3057","3058","3059","3060","3061","3062","3063","3064","3067","3068","3069","3085","3086","3087","3088","3089","3090","3091","3092","3093","3094","3095","3096","3097","3098","3099","3100","3101","3102","3103","3104","3105","3106","3107","3108","3109","3110","3111","3112","3113","3114","3115","3116","3117","3118","3119","3120","3121","3122","3123","3124","3125","3126","3127","3128","3129","3130","3131","3132","3133","3134","3135","3136","3137","3138","3139","3140","3141","3142","3143","3144","3145","3146","3147","3148","3149","3150","3151","3152","3153","3154","3155","3156","3157","3158","3159","3160","3161","3162","3163","3164","3165","3166","3167","3168","3169","3170","3171","3172","3173","3174","3175","3176","3177","3178","3179","3180","3181","3182","3183","3184","3185","3197","3198","3199","3200","3201","3202","3203","3204","3205","3206","3207","3208","3209","3210","3211","3212","3213","3214","3215","3216","3217","3218","3219","3220","3221","3222","3223","3224","3225","3226","3227","3228","3229","3230","3231","3232","3233","3234","3235","3236","3237","3238","3239","3240","3241","3242","3243","3244","3245","3246","3247","3248","3249","3250","3251","3252","3253","3254","3255","3256","3257","3258","3259","3260","3261","3262","3263","3264","3265","3266","3267","3268","3269","3270","3271","3272","3273","3274","3275","3276","3277","3278","3279","3280","3281","3282","3283","3284","3285","3286","3287","3288","3289","3290","3291","3292","3293","3294","3295","3296","3297","3298","3299","3300","3301","3302","3303","3304","3305","3306","3307","3308","3309","3310","3311","3312","3313","3314","3315","3316","3317","3318","3319","3320","3321","3322","3323","3324","3325","3326","3327","3328","3329","3330","3331","3332","3333","3334","3335","3336","3337","3338","3339","3340","3341","3342","3343","3344","3345","3346","3347","3348","3349","3350","3351","3352","3353","3354","3355","3356","3357","3358","3359","3360","3361","3362","3363","3364","3365","3366","3367","3368","3369","3370","3371","3372","3373","3374","3375","3376","3377","3378","3379","3380","3381","3382","3383","3384","3385","3386","3387","3388","3389","3390","3391","3392","3393","3394","3395","3396","3397","3398","3399","3400","3401","3409","3410","3411","3412","3413","3414","3415","3416","3417","3418","3419","3420","3421","3422","3423","3424","3425","3426","3427","3428","3429","3430","3431","3432","3433","3434","3435","3436","3437","3438","3439","3440","3441","3442","3443","3444","3445","3446","3447","3448","3449","3450","3451","3452","3453","3454","3455","3456","3457","3458","3459","3460","3461","3462","3463","3464","3465","3466","3467","3468","3469","3470","3471","3472","3473","3474","3477","3478","3479","3480","3481","3482","3483","3484","3485","3486","3487","3488","3489","3490","3491","3492","3493","3494","3495","3496","3497","3498","3499","3500","3501","3502","3503","3504","3505","3506","3507","3508","3509","3510","3511","3512","3513","3514","3515","3516","3517","3518","3519","3520","3521","3522","3523","3524","3525","3526","3527","3528","3529","3530","3531","3532","3533","3534","3535","3536","3537","3538","3539","3540","3541","3542","3544","3545","3546","3547","3551","3552","3553","3554","3555","3556","3557","3558","3559","3560","3561","3562","3563","3564","3565","3566","3567","3568","3569","3570","3571","3572","3573","3574","3575","3576","3577","3578","3579","3580","3581","3582","3583","3584","3585","3586","3587","3588","3589","3590","3591","3592","3593","3594","3595","3596","3597","3598","3599","3600","3601","3602","3603","3604","3605","3606","3607","3608","3609","3610","3611","3612","3613","3614","3615","3616","3617","3618","3619","3620","3621","3622","3623","3624","3625","3626","3627","3628","3629","3630","3631","3632","3633","3634","3635","3636","3637","3638","3639","3640","3641","3642","3643","3644","3645","3646","3647","3648","3649","3650","3651","3652","3653","3654","3683","3684","3685","3686","3687","3688","3689","3690","3691","3692","3693","3694","3695","3696","3697","3698","3699","3700","3701","3702","3703","3704","3705","3706","3707","3708","3709","3710","3711","3712","3713","3841","3842","3843","3844","3845","3846","3847","3848","3849","3850","3851","3852","3853","3854","3855","3856","3857","3858","3859","3860","3861","3862","3863","3864","3865","3866","3867","3868","3869","3870","3871","3872","3873","3874","3875","3876","3877","3878","3879","3880","3881","3882","3883","3884","3885","3886","3887","3888","3889","3890","3891","3892","3893","3894","3895","3896","3897","3898","3899","3900","3901","3902","3903","3904","3905","3906","3907","3908","3909","3910","3911","3912","3913","3914","3915","3916","3929","3930","3931","3932","3933","3934","3935","3936","3937","3938","3939","3940","3941","3942","3943","3944","3945","3946","3947","3948","3949","3950","3951","3952","3953","3954","3955","3956","3957","3959","3960","3962","3963","3964","3965","3966","3967","3968","3969","3970","3971","3972","3973","3974","3975","3976","3977","3978","3979","3980","3981","3982","3983","3984","3985","3986","3987","3988","3989","3990","3991","3992","3993","3994","3995","3996","3997","3998","3999","4000","4001","4002","4003","4004","4005","4006","4007","4008","4009","4010","4011","4012","4013","4014","4016","4017","4018","4019","4021","4022","4023","4024","4025","4026","4027","4028","4029","4030","4031","4032","4033","4034","4035","4036","4037","4038","4039","4040","4041","4042","4043","4044","4045","4046","4047","4048","4049","4050","4053","4054","4055","4056","4057","4058","4059","4060","4061","4062","4063","4064","4065","4066","4067","4068","4069","4070","4071","4072","4073","4074","4075","4076","4077","4078","4079","4080","4081","4082","4083","4084","4085","4086","4087","4088","4089","4090","4091","4092","4093","4094","4095","4096","4097","4098","4099","4100","4101","4102","4103","4104","4105","4106","4107","4108","4109","4110","4111","4112","4113","4118","4119","4120","4121","4122","4123","4135","4136","4137","4138","4139","4140","4141","4142","4143","4144","4145","4146","4147","4148","4149","4150","4151","4152","4153","4154","4155","4156","4157","4158","4159","4160","4161","4162","4163","4164","4165","4166","4167","4168","4169","4170","4171","4172","4173","4174","4175","4176","4177","4178","4179","4180","4181","4182","4183","4184","4185","4186","4187","4188","4189","4190","4191","4192","4193","4194","4195","4196","4197","4198","4199","4200","4201","4202","4203","4204","4205","4206","4207","4208","4209","4210","4211","4212","4213","4214","4215","4216","4217","4218","4219","4220","4221","4222","4223","4224","4225","4226","4227","4228","4229","4230","4231","4232","4233","4234","4235","4236","4237","4238","4239","4240","4241","4242","4243","4244","4245","4246","4247","4248","4249","4250","4251","4252","4253","4254","4255","4256","4257","4258","4259","4260","4261","4262","4263","4264","4265","4266","4267","4268","4269","4270","4271","4272","4273","4274","4275","4276","4277","4278","4279","4280","4281","4282","4283","4284","4285","4286","4287","4288","4289","4290","4291","4292","4293","4294","4295","4296","4297","4298","4299","4300","4301","4302","4303","4304","4305","4306","4307","4308","4309","4310","4311","4312","4313","4314","4315","4316","4317","4318","4319","4320","4321","4322","4323","4324","4325","4326","4327","4328","4329","4330","4331","4332","4333","4334","4335","4336","4337","4338","4339","4340","4341","4342","4343","4344","4345","4346","4347","4348","4349","4350","4351","4352","4353","4354","4355","4356","4357","4358","4359","4360","4361","4362","4363","4364","4365","4366","4367","4368","4369","4370","4371","4372","4373","4374","4375","4380","4381","4382","4383","4384","4385","4386","4387","4388","4389","4390","4391","4392","4393","4394","4395","4396","4397","4398","4399","4400","4401","4402","4403","4404","4406","4407","4469","4470","4471","4472","4473","4474","4475","4476","4477","4478","4479","4480","4481","4482","4483","4484","4485","4486","4487","4488","4489","4490","4491","4492","4493","4494","4495","4496","4497","4498","4499","4500","4501","4502","4503","4504","4505","4506","4507","4508","4509","4510","4511","4512","4513","4514","4515","4516","4517","4518","4519","4520","4521","4522","4523","4524","4525","4526","4527","4528","4529","4530","4531","4532","4533","4534","4535","4536","4537","4538","4539","4540","4541","4545","4546","4547","4548","4549","4550","4551","4552","4553","4554","4555","4556","4557","4558","4559","4560","4561","4562","4563","4564","4565","4566","4567","4568","4569","4570","4571","4572","4573","4574","4575","4576","4577","4578","4579","4580","4581","4582","4583","4584","4585","4586","4587","4588","4589","4590","4591","4592","4593","4594","4595","4596","4597","4598","4599","4600","4601","4602","4603","4604","4605","4606","4607","4608","4609","4610","4611","4612","4613","4614","4615","4616","4617","4618","4619","4620","4621","4622","4623","4624","4625","4626","4627","4628","4629","4630","4631","4632","4633","4634","4635","4636","4637","4638","4639","4640","4641","4642","4643","4644","4645","4646","4647","4648","4652","4653","4654","4655","4656","4657","4658","4659","4660","4661","4662","4663","4664","4665","4666","4667","4668","4669","4670","4671","4672","4673","4674","4675","4676","4677","4678","4679","4680","4681","4682","4683","4684","4685","4686","4687","4688","4689","4690","4691","4692","4693","4694","4695","4696","4697","4698","4699","4700","4701","4702","4703","4704","4705","4706","4707","4708","4709","4710","4711","4712","4713","4714","4715","4716","4717","4718","4719","4720","4721","4722","4723","4724","4725","4726","4727","4728","4729","4730","4731","4732","4733","4734","4735","4736","4737","4738","4739","4740","4741","4742","4743","4744","4745","4746","4747","4748","4749","4750","4751","4752","4753","4754","4755","4756","4757","4758","4759","4760","4761","4762","4763","4764","4765","4766","4767","4768","4769","4770","4771","4772","4773","4774","4775","4776","4777","4778","4779","4780","4781","4782","4783","4784","4785","4786","4787","4793","4794","4795","4796","4797","4798","4799","4800","4801","4802","4803","4804","4805","4806","4807","4808","4809","4810","4811","4812","4813","4814","4815","4816","4817","4818","4819","4820","4821","4822","4823","4824","4825","4826","4827","4828","4829","4830","4831","4832","4833","4834","4835","4836","4837","4838","4839","4840","4841","4842","4843","4844","4845","4846","4847","4848","4849","4850","4851","4852","4853","4854","4855","4856","4857","4858","4859","4860","4861","4862","4863","4864","4865","4866","4867","4868","4869","4870","4871","4872","4873","4874","4875","4876","4877","4878","4879","4880","4881","4882","4883","4884","4885","4886","4887","4888","4889","4890","4891","4892","4893","4894","4903","4904","4905","4906","4907","4908","4909","4910","4911","4912","4913","4914","4915","4916","4917","4918","4919","4920","4921","4922","4923","4924","4925","4926","4927","4928","4929","4930","4931","4932","4933","4934","4935","4936","4937","4938","4939","4940","4941","4942","4943","4944","4945","4946","4947","4948","4949","4950","4951","4952","4953","4954","4955","4956","4957","4958","4959","4960","4961","4962","4963","4964","4965","4966","4967","4968","4969","4970","4971","4972","4973","4974","4975","4976","4977","4978","4979","4980","4981","4982","4983","4984","4985","4986","4987","4988","4989","4990","4991","4992","4993","4994","4995","4996","4997","4998","4999","5000","5001","5002","5003","5004","5005","5006","5007","5008","5009","5010","5011","5012","5013","5014","5015","5016","5017","5018","5019","5020","5021","5022","5023","5024","5025","5026","5027","5028","5029","5030","5031","5032","5033","5034","5035","5036","5037","5038","5039","5040","5041","5042","5043","5044","5045","5046","5047","5048","5049","5050","5051","5052","5053","5054","5055","5056","5086","5087","5088","5089","5090","5091","5092","5093","5094","5095","5100","5101","5103","5104","5133","5134","5135","5136","5137","5138","5139","5140","5141","5142","5143","5144","5145","5146","5147","5148","5149","5150","5151","5152","5153","5154","5155","5156","5157","5158","5159","5160","5161","5162","5163","5164","5165","5166","5167","5168","5169","5170","5171","5172","5173","5174","5175","5176","5177","5178","5179","5180","5181","5182","5183","5184","5185","5186","5187","5188","5189","5190","5191","5192","5193","5194","5195","5196","5197","5198","5199","5200","5201","5202","5203","5204","5205","5206","5207","5208","5209","5210","5211","5212","5213","5214","5215","5216","5217","5218","5219","5220","5221","5222","5223","5224","5225","5226","5227","5228","5231","5232","5233","5234","5235","5236","5237","5238","5239","5240","5255","5256","5257","5258","5259","5260","5261","5262","5263","5264","5265","5266","5337","5338","5339","5340","5341","5342","5343","5346","5347","5348","5349","5350","5351","5352","5353","5354","5355","5356","5357","5358","5359","5360","5361","5362","5363","5364","5365","5499","5500","5501","5502","5503","5504","5505","5511","5512","5513","5514","5515","5516","5517","5518","5520","5521","5522","5523","5524","5525","5526","5527","5528","5529","5530","5531","5532","5533","5546","5547","5548","5549","5550","5551","5552","5553","5554","5555","5556","5557","5558","5559","5560","5561","5562","5563","5564","5565","5566","5567","5568","5569","5570","5571","5572","5573","5574","5575","5576","5577","5578","5579","5580","5581","5582","5583","5584","5585","5586","5587","5588","5589","5590","5591","5592","5593","5594","5595","5596","5597","5598","5599","5600","5601","5602","5603","5604","5605","5606","5607","5608","5609","5610","5611","5612","5613","5614","5616","5617","5618","5619","5620","5629","5630","5631","5632","5633","5634","5635","5636","5637","5638","5639","5640","5641","5642","5643","5644","5645","5646","5647","5648","5649","5650","5651","5652","5653","5654","5655","5656","5657","5658","5659","5660","5661","5662","5663","5664","5665","5666","5667","5668","5669","5670","5671","5672","5673","5674","5675","5676","5677","5678","5679","5680","5681","5682","5683","5713","5714","5715","5716","5717","5718","5719","5720","5721","6093","6094","6095","6096","6230","6231","6232","6233","6234","6235","6236","6237","6238","6239","6240","6241","6242","6243","6244","6245","6246","6247","6248","6249","6250","6251","6252","6253","6254","6255","6256","6257","6258","6259","6260","6261","6262","6263","6264","6265","6266","6267","6268","6269","6270","6271","6272","6273","6274","6275","6276","6277","6278","6279","6280","6281","6282","6283","6284","6285","6286","6287","6288","6289","6290","6291","6292","6293","6294","6295","6296","6297","6298","6299","6300","6301","6302","6303","6304","6305","6306","6307","6308","6309","6310","6311","6312","6313","6314","6315","6316","6317","6318","6319","6320","6321","6322","6323","6324","6325","6327","6328","6329","6330","6331","6332","6333","6334","6335","6336","6337","6338","6339","6340","6341","6342","6343","6344","6345","6346","6347","6348","6349","6350","6351","6352","6353","6354","6355","6356","6357","6358","6359","6360","6361","6362","6363","6364","6365","6366","6367","6368","6369","6370","6371","6372","6373","6374","6375","6376","6377","6378","6379","6380","6381","6382","6383","6384","6385","6386","6387","6388","6389","6390","6391","6392","6393","6394","6395","6396","6397","6398","6399","6400","6401","6402","6403","6404","6405","6406","6407","6408","6409","6410","6411","6412","6413","6414","6415","6416","6417","6418","6419","6420","6421","6422","6423","6424","6425","6426","6427","6428","6429","6430","6431","6432","6433","6434","6435","6855","6856","6857","6858","6859","6860","6861","6862","6863","6864","6865","6866","6867","6868","6869","6870","6871","6872","6873","6874","6875","6876","6877","6878","6879","6880","6881","6882","6883","6884","6885","6886","6887","6888","6889","6890","6891","6892","6893","6894","6895","6896","6897","6898","6899","6900","6901","6902","6903","6904","6905","6906","6907","6908","6911","6912","6913","6914","6915","6916","6917","6918","6919","6920","6921","6922","6923","6924","6925","6926","6927","6928","6929","6930","6931","6932","6933","6934","6935","6936","6937","6938","6939","6940","6941","6942","6943","6944","6945","6946","6947","6948","6949","6950","6951","6952","6953","6954","6955","6956","6957","6958","6959","6960","6961","6962","6963","6964","6965","6966","6967","6968","6969","6970","6971","6972","6973","6974","6975","6976","6977","6978","6979","6980","8167","8168","8177","8178","8179","8181","8182","8183","8184","8185","8186","8187","8188","8189","8190","8191","8192","8193","8194","8195","8196","8197","8198","8199","8200","8201","8202","8203","8204","8205","8206","8207","8208","8209","8210","8211","8212","8213","8214","8215","8216","8217","8218","8219","8220","8221","8222","8223","8224","8225","8226","8227","8228","8229","8230","8231","8232","8233","8234","8235","8236","8237","8238","8239","8240","8243","8244","8245","8246","8247","8248","8249","8250","8251","8253","8254","8256","8257","8258","8259","8260","8261","8262","8263","8264","8265","8266","8267","8268","8269","8270","8271","8272","8273","8274","8275","8276","8277","8278","8279","8280","8281","8282","8283","8284","8285","8286","8287","8288","8289","8290","8291","8292","8293","8294","8295","8296","8297","8298","8299","8300","8301","8302","8303","8304","8305","8306","8307","8371","8372","8373","8374","8375","8376","8499","8500","8501","8502","8503","8504","8505","8506","8507","8508","8509","8510","8511","8512","8513","8514","8515","8516","8517","8518","8519","8520","8521","8522","8523","8524","8525","8526","8527","8528","8529","8530","8531","8532","8533","8534","8535","8536","8537","8538","8539","8540","8541","8542","8543","8544","8545","8546","8547","8548","8549","8550","8551","8552","8553","8554","8555","8556","8557","8558","8559","8560","8561","8562","8563","8564","8565","8566","8567","8568","8569","8570","8571","8572","8573","8574","8575","8576","8577","8578","8579","8580","8581","8582","8583","8584","8585","8586","8587","8588","8589","8590","8591","8592","8593","8594","8595","8596","8597","8598","8599","8600","8601","8602","8603","8604","8605","8606","8607","8608","8609","8610","8611","8612","8613","8614","8615","8616","8617","8618","8619","8652","8653","8654","8655","8664","8665","8702","8703","8722","8723","8745","8746","8769","8770","8800","8801","8802","8805","8806","8807","8824","8825","8830","8831","8951","8952","8972","8973","9012","9013","9014","9015","9016","9017","9018","9019","9020","9021","9022","9023","9024","9025","9026","9027","9028","9029","9030","9031","9032","9033","9034","9035","9036","9037","9073","9074","9092","9093","9138","9139","9140","9141","9142","9143","9144","9145","9146","9147","9148","9149","9150","9151","9152","9153","9154","9155","9156","9157","9158","9159","9160","9161","9162","9163","9164","9165","9166","9167","9168","9169","9170","9171","9172","9173","9174","9175","9176","9177","9178","9179","9180","9181","9182","9183","9184","9185","9186","9187","9188","9189","9190","9191","9192","9193","9194","9195","9196","9197","9198","9199","9200","9201","9202","9203","9204","9205","9206","9207","9208","9209","9210","9211","9212","9213","9214","9215","9216","9217","9218","9219","9220","9221","9222","9223","9224","9225","9226","9227","9228","9229","9230","9231","9232","9233","9234","9235","9236","9237","9238","9239","9240","9241"],"binary_path":"/opt/cray/pe/lib64/libmpi_cray.so.12","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-cc-ebpf.json b/etc/datacrumbs/data/probes-cc-ebpf.json deleted file mode 100644 index c0d8ea5c..00000000 --- a/etc/datacrumbs/data/probes-cc-ebpf.json +++ /dev/null @@ -1 +0,0 @@ -[{"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/cc/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/home/cc/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2}] diff --git a/etc/datacrumbs/data/probes-dhari-quokka.json b/etc/datacrumbs/data/probes-dhari-quokka.json deleted file mode 100644 index 17f7eff9..00000000 --- a/etc/datacrumbs/data/probes-dhari-quokka.json +++ /dev/null @@ -1 +0,0 @@ -[{"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"]}] diff --git a/etc/datacrumbs/data/probes-exclusion-cc-ebpf.json b/etc/datacrumbs/data/probes-exclusion-cc-ebpf.json deleted file mode 100644 index 58c757fb..00000000 --- a/etc/datacrumbs/data/probes-exclusion-cc-ebpf.json +++ /dev/null @@ -1 +0,0 @@ -[{"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","ni_posix_timers","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":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"]}] diff --git a/etc/datacrumbs/data/probes-exclusion-dhari-quokka.json b/etc/datacrumbs/data/probes-exclusion-dhari-quokka.json deleted file mode 100644 index acb5f9ab..00000000 --- a/etc/datacrumbs/data/probes-exclusion-dhari-quokka.json +++ /dev/null @@ -1 +0,0 @@ -[{"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"]}] diff --git a/etc/datacrumbs/data/probes-exclusion-haridev-lead-us.json b/etc/datacrumbs/data/probes-exclusion-haridev-lead-us.json deleted file mode 100644 index 932983f3..00000000 --- a/etc/datacrumbs/data/probes-exclusion-haridev-lead-us.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"libc","functions":["getsgnam"],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-exclusion-haridev-lead.json b/etc/datacrumbs/data/probes-exclusion-haridev-lead.json deleted file mode 100644 index f80a1fce..00000000 --- a/etc/datacrumbs/data/probes-exclusion-haridev-lead.json +++ /dev/null @@ -1 +0,0 @@ -[{"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-exclusion-haridev-tuolumne-mpiio.json b/etc/datacrumbs/data/probes-exclusion-haridev-tuolumne-mpiio.json deleted file mode 100644 index 18718b1a..00000000 --- a/etc/datacrumbs/data/probes-exclusion-haridev-tuolumne-mpiio.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"libc","functions":[""],"binary_path":"/opt/cray/pe/mpich/8.1.25/ofi/gnu/9.1/lib/libmpi.so","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-exclusion-haridev-tuolumne.json b/etc/datacrumbs/data/probes-exclusion-haridev-tuolumne.json deleted file mode 100644 index dbb87985..00000000 --- a/etc/datacrumbs/data/probes-exclusion-haridev-tuolumne.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"libc","functions":[""],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-exclusion-root-docker.json b/etc/datacrumbs/data/probes-exclusion-root-docker.json deleted file mode 100644 index 484fb5c4..00000000 --- a/etc/datacrumbs/data/probes-exclusion-root-docker.json +++ /dev/null @@ -1 +0,0 @@ -[{"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":["bdflush","fork","fstat","llseek","sys","ioctl","futimesat","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":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_attr_intent_init_cache","xfs_attr_check_namespace","xfs_attr3_rmt_buf_space","xfs_allocbt_init_cur_cache","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"]}] diff --git a/etc/datacrumbs/data/probes-haridev-corona.json b/etc/datacrumbs/data/probes-haridev-corona.json deleted file mode 100644 index 12d9b4a3..00000000 --- a/etc/datacrumbs/data/probes-haridev-corona.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":0,"name":"sys","functions":["accept","accept4","access","acct","add_key","adjtimex","alarm","bdflush","bind","bpf","brk","capget","capset","chdir","chmod","chown","chroot","clock_adjtime","clock_getres","clock_gettime","clock_nanosleep","clock_settime","clone","close","close_range","connect","copy_file_range","creat","delete_module","dup","dup2","dup3","epoll_create","epoll_create1","epoll_ctl","epoll_pwait","epoll_wait","eventfd","eventfd2","execve","execveat","exit","exit_group","faccessat","faccessat2","fadvise64","fadvise64_64","fallocate","fanotify_init","fanotify_mark","fchdir","fchmod","fchmodat","fchown","fchownat","fcntl","fdatasync","fgetxattr","finit_module","flistxattr","flock","fork","fremovexattr","fsconfig","fsetxattr","fsmount","fsopen","fspick","fstat","fstatfs","fstatfs64","fsync","ftruncate","futex","futimesat","get_mempolicy","get_robust_list","getcpu","getcwd","getdents","getdents64","getegid","geteuid","getgid","getgroups","gethostname","getitimer","getpeername","getpgid","getpgrp","getpid","getppid","getpriority","getrandom","getresgid","getresuid","getrlimit","getrusage","getsid","getsockname","getsockopt","gettid","gettimeofday","getuid","getxattr","init_module","inotify_add_watch","inotify_init","inotify_init1","inotify_rm_watch","io_cancel","io_destroy","io_getevents","io_pgetevents","io_setup","io_submit","io_uring_enter","io_uring_register","io_uring_setup","ioctl","ioperm","ioprio_get","ioprio_set","ipc","kcmp","kexec_file_load","kexec_load","keyctl","kill","lchown","lgetxattr","link","linkat","listen","listxattr","llistxattr","llseek","lookup_dcookie","lremovexattr","lseek","lsetxattr","lstat","madvise","mbind","membarrier","memfd_create","migrate_pages","mincore","mkdir","mkdirat","mknod","mknodat","mlock","mlock2","mlockall","mmap_pgoff","mount","move_mount","move_pages","mprotect","mq_getsetattr","mq_notify","mq_open","mq_timedreceive","mq_timedsend","mq_unlink","mremap","msgctl","msgget","msgrcv","msgsnd","msync","munlock","munlockall","munmap","name_to_handle_at","nanosleep","newfstat","newfstatat","newlstat","newstat","newuname","ni_syscall","nice","old_mmap","old_readdir","old_select","oldumount","olduname","open","open_by_handle_at","open_tree","openat","openat2","pause","pciconfig_iobase","pciconfig_read","pciconfig_write","perf_event_open","personality","pidfd_send_signal","pipe","pipe2","pivot_root","pkey_alloc","pkey_free","pkey_mprotect","poll","ppoll","prctl","pread64","preadv","preadv2","prlimit64","process_vm_readv","process_vm_writev","pselect6","ptrace","pwrite64","pwritev","pwritev2","quotactl","read","readahead","readlink","readlinkat","readv","reboot","recv","recvfrom","recvmmsg","recvmsg","remap_file_pages","removexattr","rename","renameat","renameat2","request_key","restart_syscall","rmdir","rseq","rt_sigaction","rt_sigpending","rt_sigprocmask","rt_sigqueueinfo","rt_sigsuspend","rt_sigtimedwait","rt_tgsigqueueinfo","sched_get_priority_max","sched_get_priority_min","sched_getaffinity","sched_getattr","sched_getparam","sched_getscheduler","sched_rr_get_interval","sched_setaffinity","sched_setattr","sched_setparam","sched_setscheduler","sched_yield","seccomp","select","semctl","semget","semop","semtimedop","send","sendfile","sendfile64","sendmmsg","sendmsg","sendto","set_mempolicy","set_robust_list","set_tid_address","setdomainname","setfsgid","setfsuid","setgid","setgroups","sethostname","setitimer","setns","setpgid","setpriority","setregid","setresgid","setresuid","setreuid","setrlimit","setsid","setsockopt","settimeofday","setuid","setxattr","sgetmask","shmat","shmctl","shmdt","shmget","shutdown","sigaltstack","signal","signalfd","signalfd4","sigpending","sigprocmask","socket","socketcall","socketpair","splice","spu_create","spu_run","ssetmask","stat","statfs","statfs64","statx","stime","swapoff","swapon","symlink","symlinkat","sync","sync_file_range","sync_file_range2","syncfs","sysctl","sysfs","sysinfo","syslog","tee","tgkill","time","timer_create","timer_delete","timer_getoverrun","timer_gettime","timer_settime","timerfd_create","timerfd_gettime","timerfd_settime","times","tkill","truncate","umask","umount","uname","unlink","unlinkat","unshare","uselib","userfaultfd","ustat","utime","utimensat","utimes","vfork","vhangup","vmsplice","wait4","waitid","waitpid","write","writev"]}] diff --git a/etc/datacrumbs/data/probes-haridev-lead-us.json b/etc/datacrumbs/data/probes-haridev-lead-us.json deleted file mode 100644 index 740fccd5..00000000 --- a/etc/datacrumbs/data/probes-haridev-lead-us.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"libc","functions":["a64l","abort","abs","accept","accept4","access","acct","addmntent","addseverity","alarm","allocate:0x105510","allocate:0x122220","alphasort","alphasort64","arg","asprintf","atof","atoi","atol","atoll","backtrace","basename","bcopy","bin2hex","bind","bindresvport","bindtextdomain","brk","bsearch","btowc","bzero","c16rtomb","c32rtomb","callback","calloc","capget","capset","catclose","catgets","catopen","cfgetispeed","cfgetospeed","cfmakeraw","cfsetispeed","cfsetospeed","cfsetspeed","chdir","chflags","chmod","chown","chroot","cleanup:0x8ba90","cleanup:0x943c0","clearenv","clearerr","clock","clone","clone3","close","closedir","closefrom","closelog","comma","confstr","connect","copysign","copysignf","copysignf128","copysignf32","copysignf32x","copysignf64","copysignf64x","copysignl","creat","creat64","ctermid","cuserid","daemon","dcgettext","dcngettext","deallocate","dgettext","dirfd","dirname","div","dngettext","dprintf","drand48","dup","dup2","dup3","duplocale","dysize","eaccess","ecvt","endaliasent","endfsent","endgrent","endhostent","endmntent","endnetent","endnetgrent","endprotoent","endpwent","endrpcent","endservent","endsgent","endspent","endttyent","endusershell","endutent","endutxent","erand48","err","error","errx","euidaccess","eventfd","exchange","execl","execle","execlp","execv","execve","execveat","execvp","execvpe","exit","faccessat","fallocate","fallocate64","fchdir","fchflags","fchmod","fchmodat","fchown","fchownat","fcloseall","fcntl","fcntl64","fcvt","fdatasync","fdopendir","feof","ferror","fexecve","fflush","ffs","ffsl","ffsll","fgetc","fgetgrent","fgetpwent","fgets","fgetsgent","fgetspent","fgetwc","fgetws","fgetxattr","fileno","fini","finite","finitef","finitel","flistxattr","flock","flockfile","fmtmsg","fopen64","fork","fpathconf","fprintf","fputc","fputs","fputwc","fputws","fread","free","freeaddrinfo","freecache","freeifaddrs","freelocale","freeres","fremovexattr","freopen","freopen64","frexp","frexpf","frexpf128","frexpf32","frexpf32x","frexpf64","frexpf64x","frexpl","fscanf","fseek","fseeko","fseeko64","fsetxattr","fstat","fstat64","fstatat","fstatat64","fstatfs","fstatfs64","fstatvfs","fstatvfs64","fsync","ftell","ftello","ftello64","ftok","ftruncate","ftruncate64","ftrylockfile","ftw","ftw64","funlockfile","fwide","fwprintf","fwrite","fwscanf","gcvt","getaddrinfo","getaliasbyname","getaliasent","getauxval","getc","getchar","getcontext","getcpu","getcwd","getdate","getdelim","getdents64","getdirentries","getdirentries64","getdomainname","getdtablesize","getegid","getentropy","getenv","geteuid","getfsent","getfsfile","getfsspec","getgid","getgrent","getgrgid","getgrnam","getgrouplist","getgroups","gethostbyaddr","gethostbyname","gethostbyname2","gethostent","gethostid","gethostname","gethosts","getifaddrs","getipv4sourcefilter","getline","getloadavg","getlogin","getmntent","getnameinfo","getnetbyaddr","getnetbyname","getnetent","getnetgrent","getopt","getpagesize","getpass","getpeername","getpgid","getpgrp","getpid","getppid","getpriority","getprotobyname","getprotobynumber","getprotoent","getpt","getpw","getpwent","getpwnam","getpwuid","getrandom","getresgid","getresuid","getrlimit","getrlimit64","getrpcbyname","getrpcbynumber","getrpcent","getrusage","gets","getservbyname","getservbyport","getservent","getsgent","getsid","getsockname","getsockopt","getsourcefilter","getspent","getspnam","getsubopt","gettext","gettid","getttyent","getttynam","getuid","getusershell","getutent","getutid","getutline","getutmp","getutmpx","getutxent","getutxid","getutxline","getw","getwc","getwchar","getwd","getxattr","globfree","globfree64","gtty","hcreate","hdestroy","herror","hex2bin","hsearch","hstrerror","htonl","htons","iconv","imaxabs","imaxdiv","in6aicmp","init","initgroups","initshells","initstate","innetgr","insert.part.0","insque","ioctl","ioperm","iopl","iruserfopen","iruserok","isalnum","isalpha","isascii","isatty","isblank","iscntrl","isctype","isdigit","isfdtype","isgraph","isinf","isinff","isinfl","islower","isnan","isnanf","isnanl","isprint","ispunct","isspace","isupper","iswalnum","iswalpha","iswblank","iswcntrl","iswctype","iswdigit","iswgraph","iswlower","iswprint","iswpunct","iswspace","iswupper","iswxdigit","isxdigit","jrand48","kill","killpg","klogctl","l64a","labs","lchmod","lchown","lckpwdf","lcong48","ldexp","ldexpf","ldexpf128","ldexpf32","ldexpf32x","ldexpf64","ldexpf64x","ldexpl","ldiv","lfind","lgetxattr","link","linkat","listen","listxattr","llabs","lldiv","llistxattr","lockf","lockf64","longjmp","lrand48","lremovexattr","lsearch","lseek","lseek64","lsetxattr","lstat","lstat64","madvise","makecontext","mallinfo","mallinfo2","malloc","mallopt","mblen","mbrlen","mbrtoc16","mbrtoc32","mbrtowc","mbsinit","mbsnrtowcs","mbsrtowcs","mbstowcs","mbtowc","mcheck","mcount","memalign","memccpy","memfrob","memmem","mincore","mkdir","mkdirat","mkdtemp","mkfifo","mkfifoat","mknod","mknodat","mkostemp","mkostemp64","mkostemps","mkostemps64","mkstemp","mkstemp64","mkstemps","mkstemps64","mktemp","mlock","mlock2","mlockall","mmap","mmap64","modf","modff","modff128","modff32","modff32x","modff64","modff64x","modfl","moncontrol","monstartup","mount","mprobe","mprotect","mrand48","mremap","msgget","msgrcv","msgsnd","msync","mtrace","munlock","munlockall","munmap","muntrace","nanosleep","newlocale","ngettext","nice","nrand48","ntohl","ntohs","open","open64","openat","openat64","opendir","openlog","pathconf","pause","pcmp","perror","personality","pipe","pipe2","prctl","pread","pread64","preadv","preadv2","preadv64","preadv64v2","prefixcmp","printf","prlimit","prlimit64","profil","pselect","psiginfo","ptrace","ptsname","putc","putchar","putenv","putgrent","putpwent","puts","putsgent","putspent","pututline","pututxline","putw","putwc","putwchar","pvalloc","pwrite","pwrite64","pwritev","pwritev2","pwritev64","pwritev64v2","qecvt","qfcvt","qgcvt","qsort","quotactl","raise","rand","random","rcmd","read","readahead","readdir","readdir64","readlink","readlinkat","readtcp:0x1497e0","readtcp:0x14cc30","readunix:0x146e50","readunix:0x147810","readv","realloc","reallocarray","reboot","recv","recvfrom","recvmmsg","recvmsg","regcomp","regerror","regfree","remove","removexattr","remque","rename","renameat","renameat2","reopen","revoke","rewind","rewinddir","rexec","rmdir","rpmatch","rresvport","ruserok","ruserpass","sbrk","scalbn","scalbnf","scalbnf128","scalbnf32","scalbnf32x","scalbnf64","scalbnf64x","scalbnl","scandir","scandir64","scandirat","scandirat64","scanf","scopecmp","seed48","seekdir","select","semget","semop","send","sendfile","sendfile64","sendmmsg","sendmsg","sendto","setaliasent","setbuf","setbuffer","setcontext","setdomainname","setegid","setenv","seteuid","setfsent","setfsgid","setfsuid","setgid","setgrent","setgroups","sethostent","sethostid","sethostname","setipv4sourcefilter","setjmp","setlinebuf","setlocale","setlogin","setlogmask","setmntent","setnetent","setnetgrent","setns","setpgid","setpgrp","setpriority","setprotoent","setpwent","setregid","setresgid","setresuid","setreuid","setrlimit","setrlimit64","setrpcent","setservent","setsgent","setsid","setsockopt","setsourcefilter","setspent","setstate","setttyent","setuid","setusershell","setutent","setutxent","setvbuf","setxattr","sgetsgent","sgetspent","shmat","shmdt","shmget","shutdown","sigaction","sigaddset","sigaltstack","sigandset","sigblock","sigdelset","sigemptyset","sigfillset","siggetmask","sighold","sigignore","siginterrupt","sigisemptyset","sigismember","siglongjmp","sigorset","sigpause","sigpending","sigprocmask","sigqueue","sigrelse","sigreturn","sigset","sigsetmask","sigstack","sigsuspend","sigwait","sigwaitinfo","skip","sleep","snprintf","sockatmark","socket","socketpair","space","splice","sprintf","sprofil","srand","srand48","srandom","sscanf","stat","stat64","statfs","statfs64","statvfs","statvfs64","statx","strcasestr","strcoll","strdup","strerror","strfmon","strfromd","strfromf","strfromf128","strfromf32","strfromf32x","strfromf64","strfromf64x","strfroml","strfry","strndup","strsep","strtod","strtof","strtof128","strtof32","strtof32x","strtof64","strtof64x","strtoimax","strtok","strtol","strtold","strtoll","strtoq","strtoul","strtoull","strtoumax","strtouq","strverscmp","strxfrm","stty","swab","swapcontext","swapoff","swapon","swprintf","swscanf","symlink","symlinkat","sync","syncfs","syscall","sysconf","sysinfo","syslog","sysmalloc","system","systrim.constprop.0","tcdrain","tcflow","tcflush","tcgetattr","tcgetpgrp","tcgetsid","tcsendbreak","tcsetattr","tcsetpgrp","tdelete","tdestroy","tee","telldir","tempnam","textdomain","tfind","tgkill","tmpfile64","tmpnam","toascii","token.part.0","tolower","toupper","towctrans","towlower","towupper","transcmp","trecurse","truncate","truncate64","try","tsearch","ttyname","ttyslot","twalk","tzset","ualarm","ulckpwdf","ulimit","umask","umount","umount2","uname","ungetc","ungetwc","universal","unlink","unlinkat","unlock","unlockpt","unsetenv","unshare","updwtmp","updwtmpx","uselocale","usleep","utmpname","utmpxname","valloc","vasprintf","vdprintf","verr","verrx","versionsort","versionsort64","vfork","vfprintf","vfscanf","vfwprintf","vfwscanf","vhangup","vlimit","vmsplice","vprintf","vscanf","vsnprintf","vsprintf","vsscanf","vswprintf","vswscanf","vsyslog","vwarn","vwarnx","vwprintf","vwscanf","wait","wait3","wait4","waitid","waitpid","walker","warn","warnx","wcpcpy","wcpncpy","wcrtomb","wcscasecmp","wcscat","wcschrnul","wcscoll","wcscspn","wcsdup","wcsncasecmp","wcsncat","wcsncpy","wcsnrtombs","wcspbrk","wcsrtombs","wcsspn","wcsstr","wcstod","wcstof","wcstof128","wcstof32","wcstof32x","wcstof64","wcstof64x","wcstoimax","wcstok","wcstol","wcstold","wcstoll","wcstombs","wcstoq","wcstoul","wcstoull","wcstoumax","wcstouq","wcswcs","wcswidth","wcsxfrm","wctob","wctomb","wctrans","wctype","wcwidth","wmemcpy","wmemmove","wmempcpy","wordexp","wordfree","wprintf","write","writetcp:0x149760","writetcp:0x14cbc0","writeunix:0x146dd0","writeunix:0x1476a0","writev","wscanf"],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-haridev-lead.json b/etc/datacrumbs/data/probes-haridev-lead.json deleted file mode 100644 index 4f67dd3c..00000000 --- a/etc/datacrumbs/data/probes-haridev-lead.json +++ /dev/null @@ -1 +0,0 @@ -[{"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-haridev-tuolumne-mpiio.json b/etc/datacrumbs/data/probes-haridev-tuolumne-mpiio.json deleted file mode 100644 index 065b195e..00000000 --- a/etc/datacrumbs/data/probes-haridev-tuolumne-mpiio.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"mpi-api","functions":["PMPIX_Comm_agree","PMPIX_Comm_failure_ack","PMPIX_Comm_failure_get_acked","PMPIX_Comm_get_failed","PMPIX_Comm_revoke","PMPIX_Comm_shrink","PMPIX_Create_queue","PMPIX_Delete_error_class","PMPIX_Delete_error_code","PMPIX_Delete_error_string","PMPIX_Enqueue_recv","PMPIX_Enqueue_recv.cold","PMPIX_Enqueue_send","PMPIX_Enqueue_send.cold","PMPIX_Enqueue_start","PMPIX_Enqueue_wait","PMPIX_Free_queue","PMPIX_GPU_query_support","PMPIX_Grequest_class_allocate","PMPIX_Grequest_class_create","PMPIX_Grequest_start","PMPIX_Info_set_hex","PMPIX_KT_Get_dreq","PMPIX_KT_Get_dreq.cold","PMPIX_Query_cuda_support","PMPIX_Query_hip_support","PMPIX_Query_ze_support","PMPIX_Type_iov","PMPIX_Type_iov.cold","PMPIX_Type_iov_len","PMPIX_Type_iov_len.cold","PMPIX_Win_complete_stream","PMPIX_Win_post_stream","PMPIX_Win_progress_stream","PMPIX_Win_wait_stream","PMPI_Abort","PMPI_Accumulate","PMPI_Accumulate.cold","PMPI_Accumulate_c","PMPI_Accumulate_c.cold","PMPI_Add_error_class","PMPI_Add_error_code","PMPI_Add_error_string","PMPI_Address","PMPI_Aint_add","PMPI_Aint_diff","PMPI_Allgather","PMPI_Allgather.cold","PMPI_Allgather_c","PMPI_Allgather_c.cold","PMPI_Allgather_init","PMPI_Allgather_init.cold","PMPI_Allgather_init_c","PMPI_Allgather_init_c.cold","PMPI_Allgatherv","PMPI_Allgatherv.cold","PMPI_Allgatherv_c","PMPI_Allgatherv_c.cold","PMPI_Allgatherv_init","PMPI_Allgatherv_init.cold","PMPI_Allgatherv_init_c","PMPI_Allgatherv_init_c.cold","PMPI_Alloc_mem","PMPI_Allreduce","PMPI_Allreduce.cold","PMPI_Allreduce_c","PMPI_Allreduce_c.cold","PMPI_Allreduce_init","PMPI_Allreduce_init.cold","PMPI_Allreduce_init_c","PMPI_Allreduce_init_c.cold","PMPI_Alltoall","PMPI_Alltoall.cold","PMPI_Alltoall_c","PMPI_Alltoall_c.cold","PMPI_Alltoall_init","PMPI_Alltoall_init.cold","PMPI_Alltoall_init_c","PMPI_Alltoall_init_c.cold","PMPI_Alltoallv","PMPI_Alltoallv.cold","PMPI_Alltoallv_c","PMPI_Alltoallv_c.cold","PMPI_Alltoallv_init","PMPI_Alltoallv_init.cold","PMPI_Alltoallv_init_c","PMPI_Alltoallv_init_c.cold","PMPI_Alltoallw","PMPI_Alltoallw.cold","PMPI_Alltoallw_c","PMPI_Alltoallw_c.cold","PMPI_Alltoallw_init","PMPI_Alltoallw_init.cold","PMPI_Alltoallw_init_c","PMPI_Alltoallw_init_c.cold","PMPI_Attr_delete","PMPI_Attr_get","PMPI_Attr_put","PMPI_Barrier","PMPI_Barrier.cold","PMPI_Barrier_init","PMPI_Bcast","PMPI_Bcast.cold","PMPI_Bcast_c","PMPI_Bcast_c.cold","PMPI_Bcast_init","PMPI_Bcast_init.cold","PMPI_Bcast_init_c","PMPI_Bcast_init_c.cold","PMPI_Bsend","PMPI_Bsend.cold","PMPI_Bsend_c","PMPI_Bsend_c.cold","PMPI_Bsend_init","PMPI_Bsend_init.cold","PMPI_Bsend_init_c","PMPI_Bsend_init_c.cold","PMPI_Buffer_attach","PMPI_Buffer_attach_c","PMPI_Buffer_detach","PMPI_Buffer_detach_c","PMPI_Cancel","PMPI_Cart_coords","PMPI_Cart_create","PMPI_Cart_create.cold","PMPI_Cart_get","PMPI_Cart_map","PMPI_Cart_rank","PMPI_Cart_shift","PMPI_Cart_sub","PMPI_Cartdim_get","PMPI_Close_port","PMPI_Comm_accept","PMPI_Comm_call_errhandler","PMPI_Comm_compare","PMPI_Comm_connect","PMPI_Comm_create","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_with_info","PMPI_Comm_free","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_idup","PMPI_Comm_idup_with_info","PMPI_Comm_join","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_size","PMPI_Comm_spawn","PMPI_Comm_spawn.cold","PMPI_Comm_spawn_multiple","PMPI_Comm_spawn_multiple.cold","PMPI_Comm_split","PMPI_Comm_split_type","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_count","PMPI_Errhandler_create","PMPI_Errhandler_free","PMPI_Errhandler_get","PMPI_Errhandler_set","PMPI_Error_class","PMPI_Error_string","PMPI_Exscan","PMPI_Exscan.cold","PMPI_Exscan_c","PMPI_Exscan_c.cold","PMPI_Exscan_init","PMPI_Exscan_init.cold","PMPI_Exscan_init_c","PMPI_Exscan_init_c.cold","PMPI_Fetch_and_op","PMPI_Fetch_and_op.cold","PMPI_File_c2f","PMPI_File_call_errhandler","PMPI_File_close","PMPI_File_create_errhandler","PMPI_File_delete","PMPI_File_f2c","PMPI_File_get_amode","PMPI_File_get_atomicity","PMPI_File_get_byte_offset","PMPI_File_get_errhandler","PMPI_File_get_group","PMPI_File_get_info","PMPI_File_get_position","PMPI_File_get_position_shared","PMPI_File_get_size","PMPI_File_get_type_extent","PMPI_File_get_type_extent_c","PMPI_File_get_view","PMPI_File_iread","PMPI_File_iread_all","PMPI_File_iread_all_c","PMPI_File_iread_at","PMPI_File_iread_at_all","PMPI_File_iread_at_all_c","PMPI_File_iread_at_c","PMPI_File_iread_c","PMPI_File_iread_shared","PMPI_File_iread_shared_c","PMPI_File_iwrite","PMPI_File_iwrite_all","PMPI_File_iwrite_all_c","PMPI_File_iwrite_at","PMPI_File_iwrite_at_all","PMPI_File_iwrite_at_all_c","PMPI_File_iwrite_at_c","PMPI_File_iwrite_c","PMPI_File_iwrite_shared","PMPI_File_iwrite_shared_c","PMPI_File_open","PMPI_File_preallocate","PMPI_File_read","PMPI_File_read_all","PMPI_File_read_all_begin","PMPI_File_read_all_begin_c","PMPI_File_read_all_c","PMPI_File_read_all_end","PMPI_File_read_at","PMPI_File_read_at_all","PMPI_File_read_at_all_begin","PMPI_File_read_at_all_begin_c","PMPI_File_read_at_all_c","PMPI_File_read_at_all_end","PMPI_File_read_at_c","PMPI_File_read_c","PMPI_File_read_ordered","PMPI_File_read_ordered_begin","PMPI_File_read_ordered_begin_c","PMPI_File_read_ordered_c","PMPI_File_read_ordered_end","PMPI_File_read_shared","PMPI_File_read_shared_c","PMPI_File_seek","PMPI_File_seek_shared","PMPI_File_set_atomicity","PMPI_File_set_errhandler","PMPI_File_set_info","PMPI_File_set_size","PMPI_File_set_view","PMPI_File_sync","PMPI_File_write","PMPI_File_write_all","PMPI_File_write_all_begin","PMPI_File_write_all_begin_c","PMPI_File_write_all_c","PMPI_File_write_all_end","PMPI_File_write_at","PMPI_File_write_at_all","PMPI_File_write_at_all_begin","PMPI_File_write_at_all_begin_c","PMPI_File_write_at_all_c","PMPI_File_write_at_all_end","PMPI_File_write_at_c","PMPI_File_write_c","PMPI_File_write_ordered","PMPI_File_write_ordered_begin","PMPI_File_write_ordered_begin_c","PMPI_File_write_ordered_c","PMPI_File_write_ordered_end","PMPI_File_write_shared","PMPI_File_write_shared_c","PMPI_Finalize","PMPI_Finalized","PMPI_Free_mem","PMPI_Gather","PMPI_Gather.cold","PMPI_Gather_c","PMPI_Gather_c.cold","PMPI_Gather_init","PMPI_Gather_init.cold","PMPI_Gather_init_c","PMPI_Gather_init_c.cold","PMPI_Gatherv","PMPI_Gatherv.cold","PMPI_Gatherv_c","PMPI_Gatherv_c.cold","PMPI_Gatherv_init","PMPI_Gatherv_init.cold","PMPI_Gatherv_init_c","PMPI_Gatherv_init_c.cold","PMPI_Get","PMPI_Get.cold","PMPI_Get_accumulate","PMPI_Get_accumulate.cold","PMPI_Get_accumulate_c","PMPI_Get_accumulate_c.cold","PMPI_Get_address","PMPI_Get_c","PMPI_Get_c.cold","PMPI_Get_count","PMPI_Get_count_c","PMPI_Get_elements","PMPI_Get_elements.cold","PMPI_Get_elements_c","PMPI_Get_elements_c.cold","PMPI_Get_elements_x","PMPI_Get_elements_x.cold","PMPI_Get_library_version","PMPI_Get_processor_name","PMPI_Get_version","PMPI_Graph_create","PMPI_Graph_create.cold","PMPI_Graph_get","PMPI_Graph_map","PMPI_Graph_neighbors","PMPI_Graph_neighbors_count","PMPI_Graphdims_get","PMPI_Grequest_complete","PMPI_Grequest_start","PMPI_Group_compare","PMPI_Group_difference","PMPI_Group_excl","PMPI_Group_excl.cold","PMPI_Group_free","PMPI_Group_from_session_pset","PMPI_Group_incl","PMPI_Group_intersection","PMPI_Group_range_excl","PMPI_Group_range_incl","PMPI_Group_rank","PMPI_Group_size","PMPI_Group_translate_ranks","PMPI_Group_union","PMPI_Iallgather","PMPI_Iallgather.cold","PMPI_Iallgather_c","PMPI_Iallgather_c.cold","PMPI_Iallgatherv","PMPI_Iallgatherv.cold","PMPI_Iallgatherv_c","PMPI_Iallgatherv_c.cold","PMPI_Iallreduce","PMPI_Iallreduce.cold","PMPI_Iallreduce_c","PMPI_Iallreduce_c.cold","PMPI_Ialltoall","PMPI_Ialltoall.cold","PMPI_Ialltoall_c","PMPI_Ialltoall_c.cold","PMPI_Ialltoallv","PMPI_Ialltoallv.cold","PMPI_Ialltoallv_c","PMPI_Ialltoallv_c.cold","PMPI_Ialltoallw","PMPI_Ialltoallw.cold","PMPI_Ialltoallw_c","PMPI_Ialltoallw_c.cold","PMPI_Ibarrier","PMPI_Ibcast","PMPI_Ibcast.cold","PMPI_Ibcast_c","PMPI_Ibcast_c.cold","PMPI_Ibsend","PMPI_Ibsend.cold","PMPI_Ibsend_c","PMPI_Ibsend_c.cold","PMPI_Iexscan","PMPI_Iexscan.cold","PMPI_Iexscan_c","PMPI_Iexscan_c.cold","PMPI_Igather","PMPI_Igather.cold","PMPI_Igather_c","PMPI_Igather_c.cold","PMPI_Igatherv","PMPI_Igatherv.cold","PMPI_Igatherv_c","PMPI_Igatherv_c.cold","PMPI_Improbe","PMPI_Imrecv","PMPI_Imrecv.cold","PMPI_Imrecv_c","PMPI_Imrecv_c.cold","PMPI_Ineighbor_allgather","PMPI_Ineighbor_allgather.cold","PMPI_Ineighbor_allgather_c","PMPI_Ineighbor_allgather_c.cold","PMPI_Ineighbor_allgatherv","PMPI_Ineighbor_allgatherv.cold","PMPI_Ineighbor_allgatherv_c","PMPI_Ineighbor_allgatherv_c.cold","PMPI_Ineighbor_alltoall","PMPI_Ineighbor_alltoall.cold","PMPI_Ineighbor_alltoall_c","PMPI_Ineighbor_alltoall_c.cold","PMPI_Ineighbor_alltoallv","PMPI_Ineighbor_alltoallv.cold","PMPI_Ineighbor_alltoallv_c","PMPI_Ineighbor_alltoallv_c.cold","PMPI_Ineighbor_alltoallw","PMPI_Ineighbor_alltoallw.cold","PMPI_Ineighbor_alltoallw_c","PMPI_Ineighbor_alltoallw_c.cold","PMPI_Info_create","PMPI_Info_create_env","PMPI_Info_delete","PMPI_Info_dup","PMPI_Info_free","PMPI_Info_get","PMPI_Info_get_nkeys","PMPI_Info_get_nthkey","PMPI_Info_get_string","PMPI_Info_get_valuelen","PMPI_Info_set","PMPI_Init","PMPI_Init_thread","PMPI_Initialized","PMPI_Intercomm_create","PMPI_Intercomm_create.cold","PMPI_Intercomm_create_from_groups","PMPI_Intercomm_merge","PMPI_Intercomm_merge.cold","PMPI_Iprobe","PMPI_Irecv","PMPI_Irecv.cold","PMPI_Irecv_c","PMPI_Irecv_c.cold","PMPI_Ireduce","PMPI_Ireduce.cold","PMPI_Ireduce_c","PMPI_Ireduce_c.cold","PMPI_Ireduce_scatter","PMPI_Ireduce_scatter.cold","PMPI_Ireduce_scatter_block","PMPI_Ireduce_scatter_block.cold","PMPI_Ireduce_scatter_block_c","PMPI_Ireduce_scatter_block_c.cold","PMPI_Ireduce_scatter_c","PMPI_Ireduce_scatter_c.cold","PMPI_Irsend","PMPI_Irsend.cold","PMPI_Irsend_c","PMPI_Irsend_c.cold","PMPI_Is_thread_main","PMPI_Iscan","PMPI_Iscan.cold","PMPI_Iscan_c","PMPI_Iscan_c.cold","PMPI_Iscatter","PMPI_Iscatter.cold","PMPI_Iscatter_c","PMPI_Iscatter_c.cold","PMPI_Iscatterv","PMPI_Iscatterv.cold","PMPI_Iscatterv_c","PMPI_Iscatterv_c.cold","PMPI_Isend","PMPI_Isend.cold","PMPI_Isend_c","PMPI_Isend_c.cold","PMPI_Isendrecv","PMPI_Isendrecv.cold","PMPI_Isendrecv_c","PMPI_Isendrecv_c.cold","PMPI_Isendrecv_replace","PMPI_Isendrecv_replace.cold","PMPI_Isendrecv_replace_c","PMPI_Isendrecv_replace_c.cold","PMPI_Issend","PMPI_Issend.cold","PMPI_Issend_c","PMPI_Issend_c.cold","PMPI_Keyval_create","PMPI_Keyval_free","PMPI_Lookup_name","PMPI_Mprobe","PMPI_Mrecv","PMPI_Mrecv.cold","PMPI_Mrecv_c","PMPI_Mrecv_c.cold","PMPI_Neighbor_allgather","PMPI_Neighbor_allgather.cold","PMPI_Neighbor_allgather_c","PMPI_Neighbor_allgather_c.cold","PMPI_Neighbor_allgather_init","PMPI_Neighbor_allgather_init.cold","PMPI_Neighbor_allgather_init_c","PMPI_Neighbor_allgather_init_c.cold","PMPI_Neighbor_allgatherv","PMPI_Neighbor_allgatherv.cold","PMPI_Neighbor_allgatherv_c","PMPI_Neighbor_allgatherv_c.cold","PMPI_Neighbor_allgatherv_init","PMPI_Neighbor_allgatherv_init.cold","PMPI_Neighbor_allgatherv_init_c","PMPI_Neighbor_allgatherv_init_c.cold","PMPI_Neighbor_alltoall","PMPI_Neighbor_alltoall.cold","PMPI_Neighbor_alltoall_c","PMPI_Neighbor_alltoall_c.cold","PMPI_Neighbor_alltoall_init","PMPI_Neighbor_alltoall_init.cold","PMPI_Neighbor_alltoall_init_c","PMPI_Neighbor_alltoall_init_c.cold","PMPI_Neighbor_alltoallv","PMPI_Neighbor_alltoallv.cold","PMPI_Neighbor_alltoallv_c","PMPI_Neighbor_alltoallv_c.cold","PMPI_Neighbor_alltoallv_init","PMPI_Neighbor_alltoallv_init.cold","PMPI_Neighbor_alltoallv_init_c","PMPI_Neighbor_alltoallv_init_c.cold","PMPI_Neighbor_alltoallw","PMPI_Neighbor_alltoallw.cold","PMPI_Neighbor_alltoallw_c","PMPI_Neighbor_alltoallw_c.cold","PMPI_Neighbor_alltoallw_init","PMPI_Neighbor_alltoallw_init.cold","PMPI_Neighbor_alltoallw_init_c","PMPI_Neighbor_alltoallw_init_c.cold","PMPI_Op_commutative","PMPI_Op_create","PMPI_Op_create_c","PMPI_Op_free","PMPI_Open_port","PMPI_Pack","PMPI_Pack.cold","PMPI_Pack_c","PMPI_Pack_c.cold","PMPI_Pack_external","PMPI_Pack_external.cold","PMPI_Pack_external_c","PMPI_Pack_external_c.cold","PMPI_Pack_external_size","PMPI_Pack_external_size_c","PMPI_Pack_size","PMPI_Pack_size.cold","PMPI_Pack_size_c","PMPI_Pack_size_c.cold","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_Psend_init","PMPI_Psend_init.cold","PMPI_Publish_name","PMPI_Put","PMPI_Put.cold","PMPI_Put_c","PMPI_Put_c.cold","PMPI_Query_thread","PMPI_Raccumulate","PMPI_Raccumulate.cold","PMPI_Raccumulate_c","PMPI_Raccumulate_c.cold","PMPI_Recv","PMPI_Recv.cold","PMPI_Recv_c","PMPI_Recv_c.cold","PMPI_Recv_init","PMPI_Recv_init.cold","PMPI_Recv_init_c","PMPI_Recv_init_c.cold","PMPI_Reduce","PMPI_Reduce.cold","PMPI_Reduce_c","PMPI_Reduce_c.cold","PMPI_Reduce_init","PMPI_Reduce_init.cold","PMPI_Reduce_init_c","PMPI_Reduce_init_c.cold","PMPI_Reduce_local","PMPI_Reduce_local.cold","PMPI_Reduce_local_c","PMPI_Reduce_local_c.cold","PMPI_Reduce_scatter","PMPI_Reduce_scatter.cold","PMPI_Reduce_scatter_block","PMPI_Reduce_scatter_block.cold","PMPI_Reduce_scatter_block_c","PMPI_Reduce_scatter_block_c.cold","PMPI_Reduce_scatter_block_init","PMPI_Reduce_scatter_block_init.cold","PMPI_Reduce_scatter_block_init_c","PMPI_Reduce_scatter_block_init_c.cold","PMPI_Reduce_scatter_c","PMPI_Reduce_scatter_c.cold","PMPI_Reduce_scatter_init","PMPI_Reduce_scatter_init.cold","PMPI_Reduce_scatter_init_c","PMPI_Reduce_scatter_init_c.cold","PMPI_Register_datarep","PMPI_Register_datarep_c","PMPI_Request_free","PMPI_Request_get_status","PMPI_Rget","PMPI_Rget.cold","PMPI_Rget_accumulate","PMPI_Rget_accumulate.cold","PMPI_Rget_accumulate_c","PMPI_Rget_accumulate_c.cold","PMPI_Rget_c","PMPI_Rget_c.cold","PMPI_Rput","PMPI_Rput.cold","PMPI_Rput_c","PMPI_Rput_c.cold","PMPI_Rsend","PMPI_Rsend.cold","PMPI_Rsend_c","PMPI_Rsend_c.cold","PMPI_Rsend_init","PMPI_Rsend_init.cold","PMPI_Rsend_init_c","PMPI_Rsend_init_c.cold","PMPI_Scan","PMPI_Scan.cold","PMPI_Scan_c","PMPI_Scan_c.cold","PMPI_Scan_init","PMPI_Scan_init.cold","PMPI_Scan_init_c","PMPI_Scan_init_c.cold","PMPI_Scatter","PMPI_Scatter.cold","PMPI_Scatter_c","PMPI_Scatter_c.cold","PMPI_Scatter_init","PMPI_Scatter_init.cold","PMPI_Scatter_init_c","PMPI_Scatter_init_c.cold","PMPI_Scatterv","PMPI_Scatterv.cold","PMPI_Scatterv_c","PMPI_Scatterv_c.cold","PMPI_Scatterv_init","PMPI_Scatterv_init.cold","PMPI_Scatterv_init_c","PMPI_Scatterv_init_c.cold","PMPI_Send","PMPI_Send.cold","PMPI_Send_c","PMPI_Send_c.cold","PMPI_Send_init","PMPI_Send_init.cold","PMPI_Send_init_c","PMPI_Send_init_c.cold","PMPI_Sendrecv","PMPI_Sendrecv.cold","PMPI_Sendrecv_c","PMPI_Sendrecv_c.cold","PMPI_Sendrecv_replace","PMPI_Sendrecv_replace.cold","PMPI_Sendrecv_replace_c","PMPI_Sendrecv_replace_c.cold","PMPI_Session_call_errhandler","PMPI_Session_create_errhandler","PMPI_Session_finalize","PMPI_Session_get_errhandler","PMPI_Session_get_info","PMPI_Session_get_nth_pset","PMPI_Session_get_num_psets","PMPI_Session_get_pset_info","PMPI_Session_init","PMPI_Session_set_errhandler","PMPI_Ssend","PMPI_Ssend.cold","PMPI_Ssend_c","PMPI_Ssend_c.cold","PMPI_Ssend_init","PMPI_Ssend_init.cold","PMPI_Ssend_init_c","PMPI_Ssend_init_c.cold","PMPI_Start","PMPI_Startall","PMPI_Status_c2f","PMPI_Status_f2c","PMPI_Status_set_cancelled","PMPI_Status_set_elements","PMPI_Status_set_elements_c","PMPI_Status_set_elements_x","PMPI_T_category_changed","PMPI_T_category_get_categories","PMPI_T_category_get_cvars","PMPI_T_category_get_events","PMPI_T_category_get_index","PMPI_T_category_get_info","PMPI_T_category_get_num","PMPI_T_category_get_num_events","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_event_callback_get_info","PMPI_T_event_callback_set_info","PMPI_T_event_copy","PMPI_T_event_get_index","PMPI_T_event_get_info","PMPI_T_event_get_num","PMPI_T_event_get_source","PMPI_T_event_get_timestamp","PMPI_T_event_handle_alloc","PMPI_T_event_handle_free","PMPI_T_event_handle_get_info","PMPI_T_event_handle_set_info","PMPI_T_event_read","PMPI_T_event_register_callback","PMPI_T_event_set_dropped_handler","PMPI_T_finalize","PMPI_T_init_thread","PMPI_T_pvar_get_index","PMPI_T_pvar_get_info","PMPI_T_pvar_get_info.cold","PMPI_T_pvar_get_num","PMPI_T_pvar_handle_alloc","PMPI_T_pvar_handle_alloc.cold","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_T_source_get_info","PMPI_T_source_get_num","PMPI_T_source_get_timestamp","PMPI_Test","PMPI_Test_cancelled","PMPI_Testall","PMPI_Testany","PMPI_Testsome","PMPI_Topo_test","PMPI_Type_commit","PMPI_Type_contiguous","PMPI_Type_contiguous_c","PMPI_Type_create_darray","PMPI_Type_create_darray_c","PMPI_Type_create_f90_complex","PMPI_Type_create_f90_integer","PMPI_Type_create_f90_real","PMPI_Type_create_hindexed","PMPI_Type_create_hindexed_block","PMPI_Type_create_hindexed_block_c","PMPI_Type_create_hindexed_c","PMPI_Type_create_hvector","PMPI_Type_create_hvector_c","PMPI_Type_create_indexed_block","PMPI_Type_create_indexed_block_c","PMPI_Type_create_keyval","PMPI_Type_create_resized","PMPI_Type_create_resized_c","PMPI_Type_create_struct","PMPI_Type_create_struct_c","PMPI_Type_create_subarray","PMPI_Type_create_subarray_c","PMPI_Type_delete_attr","PMPI_Type_dup","PMPI_Type_extent","PMPI_Type_free","PMPI_Type_free_keyval","PMPI_Type_get_attr","PMPI_Type_get_contents","PMPI_Type_get_contents_c","PMPI_Type_get_envelope","PMPI_Type_get_envelope_c","PMPI_Type_get_extent","PMPI_Type_get_extent_c","PMPI_Type_get_extent_x","PMPI_Type_get_name","PMPI_Type_get_true_extent","PMPI_Type_get_true_extent_c","PMPI_Type_get_true_extent_x","PMPI_Type_hindexed","PMPI_Type_hvector","PMPI_Type_indexed","PMPI_Type_indexed_c","PMPI_Type_lb","PMPI_Type_match_size","PMPI_Type_set_attr","PMPI_Type_set_name","PMPI_Type_size","PMPI_Type_size_c","PMPI_Type_size_x","PMPI_Type_struct","PMPI_Type_ub","PMPI_Type_vector","PMPI_Type_vector_c","PMPI_Unpack","PMPI_Unpack.cold","PMPI_Unpack_c","PMPI_Unpack_c.cold","PMPI_Unpack_external","PMPI_Unpack_external.cold","PMPI_Unpack_external_c","PMPI_Unpack_external_c.cold","PMPI_Unpublish_name","PMPI_Wait","PMPI_Waitall","PMPI_Waitany","PMPI_Waitsome","PMPI_Win_allocate","PMPI_Win_allocate_c","PMPI_Win_allocate_shared","PMPI_Win_allocate_shared_c","PMPI_Win_attach","PMPI_Win_call_errhandler","PMPI_Win_complete","PMPI_Win_complete.cold","PMPI_Win_create","PMPI_Win_create_c","PMPI_Win_create_dynamic","PMPI_Win_create_errhandler","PMPI_Win_create_keyval","PMPI_Win_delete_attr","PMPI_Win_detach","PMPI_Win_fence","PMPI_Win_flush","PMPI_Win_flush_all","PMPI_Win_flush_all.cold","PMPI_Win_flush_local","PMPI_Win_flush_local_all","PMPI_Win_flush_local_all.cold","PMPI_Win_free","PMPI_Win_free_keyval","PMPI_Win_get_attr","PMPI_Win_get_errhandler","PMPI_Win_get_group","PMPI_Win_get_info","PMPI_Win_get_name","PMPI_Win_lock","PMPI_Win_lock_all","PMPI_Win_post","PMPI_Win_post.cold","PMPI_Win_set_attr","PMPI_Win_set_errhandler","PMPI_Win_set_info","PMPI_Win_set_name","PMPI_Win_shared_query","PMPI_Win_shared_query.cold","PMPI_Win_shared_query_c","PMPI_Win_shared_query_c.cold","PMPI_Win_start","PMPI_Win_sync","PMPI_Win_sync.cold","PMPI_Win_test","PMPI_Win_unlock","PMPI_Win_unlock_all","PMPI_Win_unlock_all.cold","PMPI_Win_wait","PMPI_Win_wait.cold","PMPI_Wtick","PMPI_Wtime"],"binary_path":"/opt/cray/pe/lib64/libmpi_cray.so.12","include_offsets":false},{"type":2,"name":"mpii","functions":["MPII_Algo_compare_int","MPII_Allreduce_group","MPII_Allreduce_group_intra","MPII_Allreduce_group_intra.cold","MPII_Attr_copy_c_proxy","MPII_Attr_delete_c_proxy","MPII_Call_finalize_callbacks","MPII_Coll_comm_cleanup","MPII_Coll_finalize","MPII_Coll_init","MPII_CommL_forget","MPII_CommL_remember","MPII_Comm_check_hints","MPII_Comm_copy","MPII_Comm_copy_data","MPII_Comm_create_calculate_mapping","MPII_Comm_create_local_group","MPII_Comm_create_map","MPII_Comm_dup","MPII_Comm_get_attr","MPII_Comm_get_hints","MPII_Comm_init","MPII_Comm_is_node_balanced","MPII_Comm_is_node_consecutive","MPII_Comm_set_attr","MPII_Comm_set_hints","MPII_Create_container","MPII_Dataloop_alloc","MPII_Dataloop_alloc_and_copy","MPII_Dataloop_segment_flatten","MPII_Dataloop_stackelm_blocksize","MPII_Dataloop_stackelm_load","MPII_Dataloop_stackelm_offset","MPII_Dataloop_stream_size","MPII_Dataloop_update","MPII_Datatype_attr_finalize","MPII_Datatype_blockindexed_count_contig","MPII_Datatype_indexed_count_contig","MPII_Datatype_printf","MPII_Debugq_forget","MPII_Debugq_remember","MPII_Debugq_remember.cold","MPII_Finalize","MPII_Genutil_progress_hook","MPII_Genutil_sched_poke","MPII_Genutil_vtx_add_dependencies","MPII_Genutil_vtx_add_dependencies.cold","MPII_Genutil_vtx_copy","MPII_Genutil_vtx_create","MPII_Genutil_vtx_create.cold","MPII_Genutil_vtx_dtor","MPII_Grequest_set_lang_f77","MPII_Grequest_set_lang_f77.cold","MPII_Group_setup_lpid_list","MPII_Iallgatherv_is_displs_ordered","MPII_Ibcast_sched_add_length","MPII_Ibcast_sched_init_length","MPII_Ibcast_sched_test_curr_length","MPII_Ibcast_sched_test_length","MPII_Init_thread","MPII_Iscatter_for_bcast_sched","MPII_Keyval_set_proxy","MPII_Recexchalgo_comm_cleanup","MPII_Recexchalgo_comm_init","MPII_Recexchalgo_get_count_and_offset","MPII_Recexchalgo_get_neighbors","MPII_Recexchalgo_init","MPII_Recexchalgo_origrank_to_step2rank","MPII_Recexchalgo_reverse_digits_step2","MPII_Recexchalgo_step2rank_to_origrank","MPII_Scatter_for_bcast","MPII_Segment_manipulate","MPII_Segment_manipulate.cold","MPII_Setup_intercomm_localcomm","MPII_Stubalgo_comm_cleanup","MPII_Stubalgo_comm_init","MPII_Stubalgo_init","MPII_TSP_comm_cleanup","MPII_TSP_comm_init","MPII_TSP_finalize","MPII_TSP_init","MPII_TSP_scheds_are_pending","MPII_Treealgo_comm_cleanup","MPII_Treealgo_comm_init","MPII_Treealgo_init","MPII_Treeutil_tree_kary_init","MPII_Treeutil_tree_knomial_1_init","MPII_Treeutil_tree_knomial_2_init","MPII_Type_get_attr","MPII_Type_set_attr","MPII_Type_zerolen","MPII_Typerep_basic_type_is_complex","MPII_Typerep_basic_type_is_unsigned","MPII_Typerep_convert_darray","MPII_Typerep_convert_darray.cold","MPII_Typerep_convert_subarray","MPII_Typerep_convert_subarray.cold","MPII_Typerep_get_basic_size_external32","MPII_Typerep_op_fallback","MPII_Typerep_op_fallback.cold","MPII_Wait_for_debugger","MPII_Win_get_attr","MPII_Win_set_attr","MPII_compare_info_hint","MPII_dump_debug_summary","MPII_finalize_async","MPII_finalize_builtin_infos","MPII_hwtopo_finalize","MPII_hwtopo_init","MPII_init_async","MPII_init_binding_cxx","MPII_init_builtin_infos","MPII_init_dbg_logging","MPII_init_local_proc_attrs","MPII_init_request","MPII_init_tag_ub","MPII_init_windows","MPII_nettopo_finalize","MPII_nettopo_init","MPII_pre_init_dbg_logging","MPII_thread_mutex_create","MPII_thread_mutex_destroy"],"binary_path":"/opt/cray/pe/lib64/libmpi_cray.so.12","include_offsets":false},{"type":2,"name":"mpi-rest","functions":["ADIOI_Agg_idx","ADIOI_Build_agg_reqs","ADIOI_Build_client_pre_req","ADIOI_Build_client_req","ADIOI_Build_client_reqs","ADIOI_CRAY_ADIO_Open","ADIOI_CRAY_Calc_aggregator_pfl","ADIOI_CRAY_Calc_my_req","ADIOI_CRAY_Calc_others_req","ADIOI_CRAY_Exch_and_write","ADIOI_CRAY_Fill_send_buffer","ADIOI_CRAY_Fill_user_buffer","ADIOI_CRAY_Get_last_stripe_size","ADIOI_CRAY_Heap_merge","ADIOI_CRAY_Open","ADIOI_CRAY_Parse_comp_layout_opt","ADIOI_CRAY_R_Exchange_data","ADIOI_CRAY_ReadContig","ADIOI_CRAY_ReadContig_async","ADIOI_CRAY_ReadStridedColl","ADIOI_CRAY_ReadStrided_naive","ADIOI_CRAY_Read_and_exch","ADIOI_CRAY_SetInfo","ADIOI_CRAY_Sort_off_len","ADIOI_CRAY_W_Exchange_data","ADIOI_CRAY_WriteContig","ADIOI_CRAY_WriteContig_async","ADIOI_CRAY_WriteStridedColl","ADIOI_CRAY_WriteStrided_naive","ADIOI_CRAY_aio_init","ADIOI_CRAY_aio_request_find","ADIOI_CRAY_aio_request_release","ADIOI_CRAY_aio_request_wait","ADIOI_CRAY_aio_request_wait_1","ADIOI_CRAY_aio_request_wrapup","ADIOI_CRAY_cb_nidlist_assign","ADIOI_CRAY_cb_nidlist_init","ADIOI_CRAY_cb_ranklist_build","ADIOI_CRAY_dump_keys","ADIOI_CRAY_dvs_real_fstype","ADIOI_CRAY_getenv_mpiio_hints","ADIOI_CRAY_getrtc","ADIOI_CRAY_group_lock_ioctl","ADIOI_CRAY_group_lock_unlock_ioctl_noreduce","ADIOI_CRAY_group_unlock_ioctl","ADIOI_CRAY_io_trace","ADIOI_CRAY_is_aggregator","ADIOI_CRAY_llapi_ladvise","ADIOI_CRAY_llapi_ladvise_noexpand","ADIOI_CRAY_lock_ahead","ADIOI_CRAY_prepend_fs","ADIOI_CRAY_request_only_lock_ioctl","ADIOI_CRAY_stats_report","ADIOI_CRAY_test_ladvise","ADIOI_CRAY_timers_read_report","ADIOI_CRAY_timers_write_report","ADIOI_Calc_aggregator","ADIOI_Calc_bounds","ADIOI_Calc_file_domains","ADIOI_Calc_file_realms","ADIOI_Calc_file_realms_aar","ADIOI_Calc_file_realms_fsize","ADIOI_Calc_file_realms_user_size","ADIOI_Calc_my_off_len","ADIOI_Calc_my_req","ADIOI_Calc_others_req","ADIOI_Calloc_fn","ADIOI_Create_fr_simpletype","ADIOI_Datatype_iscontig","ADIOI_End_call","ADIOI_Err_create_code","ADIOI_Exch_and_write:0x74adc8","ADIOI_Exch_and_write:0x7b8d5d","ADIOI_Exch_file_views","ADIOI_FAILSAFE_OpenColl","ADIOI_FAKE_IOComplete","ADIOI_FAKE_IODone","ADIOI_FAKE_IreadContig","ADIOI_FAKE_IreadStrided","ADIOI_FAKE_IwriteContig","ADIOI_FAKE_IwriteStrided","ADIOI_Fill_send_buffer:0x74cceb","ADIOI_Fill_send_buffer:0x7ba6d4","ADIOI_Fill_send_buffer_nosend","ADIOI_Fill_user_buffer:0x74824a","ADIOI_Fill_user_buffer:0x7b1fcf","ADIOI_Flatten_and_find","ADIOI_Flatten_datatype","ADIOI_Flattened_type_copy","ADIOI_Flattened_type_delete","ADIOI_Free_fn","ADIOI_Free_my_req","ADIOI_Free_others_req","ADIOI_GEN_Close","ADIOI_GEN_Delete","ADIOI_GEN_Fcntl","ADIOI_GEN_Feature","ADIOI_GEN_Flush","ADIOI_GEN_IOComplete","ADIOI_GEN_IODone","ADIOI_GEN_IreadContig","ADIOI_GEN_IreadStrided","ADIOI_GEN_IreadStridedColl","ADIOI_GEN_IreadStridedColl_fini","ADIOI_GEN_IreadStridedColl_free","ADIOI_GEN_IreadStridedColl_indio","ADIOI_GEN_IreadStridedColl_inter","ADIOI_GEN_IreadStridedColl_read","ADIOI_GEN_IwriteContig","ADIOI_GEN_IwriteStrided","ADIOI_GEN_IwriteStridedColl","ADIOI_GEN_IwriteStridedColl_bcast","ADIOI_GEN_IwriteStridedColl_exch","ADIOI_GEN_IwriteStridedColl_fini","ADIOI_GEN_IwriteStridedColl_free","ADIOI_GEN_IwriteStridedColl_indio","ADIOI_GEN_IwriteStridedColl_inter","ADIOI_GEN_OpenColl","ADIOI_GEN_Prealloc","ADIOI_GEN_ReadContig","ADIOI_GEN_ReadStrided","ADIOI_GEN_ReadStridedColl","ADIOI_GEN_ReadStrided_naive","ADIOI_GEN_Resize","ADIOI_GEN_SeekIndividual","ADIOI_GEN_SetInfo","ADIOI_GEN_SetLock","ADIOI_GEN_SetLock64","ADIOI_GEN_WriteContig","ADIOI_GEN_WriteStrided","ADIOI_GEN_WriteStridedColl","ADIOI_GEN_WriteStrided_naive","ADIOI_GEN_aio","ADIOI_GEN_aio_free_fn","ADIOI_GEN_aio_poll_fn","ADIOI_GEN_aio_query_fn","ADIOI_GEN_aio_wait_fn","ADIOI_GEN_flock_cmd_to_string","ADIOI_GEN_flock_type_to_string","ADIOI_GEN_irc_free_fn","ADIOI_GEN_irc_poll_fn","ADIOI_GEN_irc_query_fn","ADIOI_GEN_irc_wait_fn","ADIOI_GEN_iwc_free_fn","ADIOI_GEN_iwc_poll_fn","ADIOI_GEN_iwc_query_fn","ADIOI_GEN_iwc_wait_fn","ADIOI_GPFS_Calc_aggregator","ADIOI_GPFS_Calc_file_domains","ADIOI_GPFS_Calc_my_req","ADIOI_GPFS_Calc_others_req","ADIOI_GPFS_Close","ADIOI_GPFS_Flush","ADIOI_GPFS_Free_my_req","ADIOI_GPFS_Free_others_req","ADIOI_GPFS_Open","ADIOI_GPFS_ReadStridedColl","ADIOI_GPFS_SetInfo","ADIOI_GPFS_WriteStridedColl","ADIOI_Get_byte_offset","ADIOI_Get_eof_offset","ADIOI_Get_position","ADIOI_Heap_create","ADIOI_Heap_extract_min","ADIOI_Heap_free","ADIOI_Heap_insert","ADIOI_Heap_merge","ADIOI_IOFiletype","ADIOI_IOStridedColl","ADIOI_IO_Thread_Func","ADIOI_Icalc_others_req","ADIOI_Icalc_others_req_fini","ADIOI_Icalc_others_req_main","ADIOI_Iexch_and_write","ADIOI_Iexch_and_write_fini","ADIOI_Iexch_and_write_l1_begin","ADIOI_Iexch_and_write_l1_body","ADIOI_Iexch_and_write_l1_end","ADIOI_Iexch_and_write_l2_begin","ADIOI_Iexch_and_write_l2_end","ADIOI_Iexch_and_write_reset","ADIOI_Info_check_and_install_enabled","ADIOI_Info_check_and_install_int","ADIOI_Info_check_and_install_str","ADIOI_Info_check_and_install_true","ADIOI_Info_print_keyvals","ADIOI_Iread_and_exch","ADIOI_Iread_and_exch_fini","ADIOI_Iread_and_exch_l1_begin","ADIOI_Iread_and_exch_l1_end","ADIOI_Iread_and_exch_l2_begin","ADIOI_Iread_and_exch_l2_end","ADIOI_Iread_and_exch_reset","ADIOI_LUSTRE_Aligned_Mem_File_Read","ADIOI_LUSTRE_Aligned_Mem_File_Write","ADIOI_LUSTRE_Calc_aggregator","ADIOI_LUSTRE_Calc_my_req","ADIOI_LUSTRE_Directio","ADIOI_LUSTRE_Docollect","ADIOI_LUSTRE_Exch_and_write","ADIOI_LUSTRE_Fill_send_buffer","ADIOI_LUSTRE_Free_my_req","ADIOI_LUSTRE_Get_striping_info","ADIOI_LUSTRE_IOContig","ADIOI_LUSTRE_IterateOneSided","ADIOI_LUSTRE_Open","ADIOI_LUSTRE_ReadContig","ADIOI_LUSTRE_SetInfo","ADIOI_LUSTRE_W_Exchange_data","ADIOI_LUSTRE_WriteContig","ADIOI_LUSTRE_WriteStrided","ADIOI_LUSTRE_WriteStridedColl","ADIOI_LUSTRE_clear_locks","ADIOI_LUSTRE_lock_ahead_ioctl","ADIOI_LUSTRE_request_only_lock_ioctl","ADIOI_Malloc_fn","ADIOI_NFS_Fcntl","ADIOI_NFS_Feature","ADIOI_NFS_Get_shared_fp","ADIOI_NFS_IreadContig","ADIOI_NFS_IwriteContig","ADIOI_NFS_Open","ADIOI_NFS_ReadComplete","ADIOI_NFS_ReadContig","ADIOI_NFS_ReadDone","ADIOI_NFS_ReadStrided","ADIOI_NFS_Resize","ADIOI_NFS_SetInfo","ADIOI_NFS_Set_shared_fp","ADIOI_NFS_WriteComplete","ADIOI_NFS_WriteContig","ADIOI_NFS_WriteDone","ADIOI_NFS_WriteStrided","ADIOI_NFS_aio","ADIOI_NOLOCK_WriteStrided","ADIOI_OneSidedCleanup","ADIOI_OneSidedReadAggregation","ADIOI_OneSidedSetup","ADIOI_OneSidedWriteAggregation","ADIOI_P2PContigReadAggregation","ADIOI_P2PContigWriteAggregation","ADIOI_Print_flatlist_node","ADIOI_R_Exchange_data:0x747b00","ADIOI_R_Exchange_data:0x7b1751","ADIOI_R_Exchange_data_alltoallv","ADIOI_R_Iexchange_data","ADIOI_R_Iexchange_data_fill","ADIOI_R_Iexchange_data_fini","ADIOI_R_Iexchange_data_recv","ADIOI_Read_and_exch:0x746ad2","ADIOI_Read_and_exch:0x7b0676","ADIOI_Realloc_fn","ADIOI_SCALEABLE_OpenColl","ADIOI_Shfp_fname","ADIOI_Strdup","ADIOI_Strncpy","ADIOI_TESTFS_Close","ADIOI_TESTFS_Delete","ADIOI_TESTFS_Fcntl","ADIOI_TESTFS_Flush","ADIOI_TESTFS_IreadContig","ADIOI_TESTFS_IreadStrided","ADIOI_TESTFS_IwriteContig","ADIOI_TESTFS_IwriteStrided","ADIOI_TESTFS_Open","ADIOI_TESTFS_ReadComplete","ADIOI_TESTFS_ReadContig","ADIOI_TESTFS_ReadDone","ADIOI_TESTFS_ReadStrided","ADIOI_TESTFS_ReadStridedColl","ADIOI_TESTFS_Resize","ADIOI_TESTFS_SeekIndividual","ADIOI_TESTFS_SetInfo","ADIOI_TESTFS_WriteComplete","ADIOI_TESTFS_WriteContig","ADIOI_TESTFS_WriteDone","ADIOI_TESTFS_WriteStrided","ADIOI_TESTFS_WriteStridedColl","ADIOI_Type_create_hindexed_x","ADIOI_Type_dispose","ADIOI_Type_get_combiner","ADIOI_Type_ispredef","ADIOI_UFS_Open","ADIOI_Verify_fr","ADIOI_W_Exchange_data:0x74c0d0","ADIOI_W_Exchange_data:0x7b9ad9","ADIOI_W_Exchange_data_alltoallv","ADIOI_W_Iexchange_data","ADIOI_W_Iexchange_data_fini","ADIOI_W_Iexchange_data_hole","ADIOI_W_Iexchange_data_send","ADIOI_W_Iexchange_data_wait","ADIOI_cb_bcast_rank_map","ADIOI_cb_config_list_parse","ADIOI_cb_copy_name_array","ADIOI_cb_delete_name_array","ADIOI_cb_gather_name_array","ADIOI_compute_offsets","ADIOI_incorporate_system_hints","ADIOI_init_view_state","ADIOI_no_requests:0x771287","ADIOI_no_requests:0x77ab98","ADIOI_process_system_hints","ADIO_Close","ADIO_End","ADIO_FileSysType_fncall","ADIO_FileSysType_fncall_scalable","ADIO_FileSysType_parentdir","ADIO_FileSysType_prefix","ADIO_Get_shared_fp","ADIO_ImmediateOpen","ADIO_Init","ADIO_Open","ADIO_ResolveFileType","ADIO_Set_shared_fp","ADIO_Set_view","ADIO_Type_create_darray","ADIO_Type_create_subarray","DebugqFreePool","Exch_data_amounts","FindSpecificMsgIndex","Init_shm_barrier","LOOKUP_CVAR_BY_NAME","LOOKUP_CVAR_BY_NAME.cold","MPIC_Irecv","MPIC_Isend","MPIC_Issend","MPIC_Probe","MPIC_Probe.cold","MPIC_Recv","MPIC_Send","MPIC_Sendrecv","MPIC_Sendrecv_replace","MPIC_Ssend","MPIC_Wait","MPIC_Waitall","MPIDIG_RMA_Init_sync_pvars","MPIDIG_RMA_Init_targetcb_pvars","MPIDIG_acc_ack_origin_cb","MPIDIG_acc_ack_target_msg_cb","MPIDIG_acc_data_origin_cb","MPIDIG_acc_data_origin_cb.cold","MPIDIG_acc_data_target_msg_cb","MPIDIG_acc_dt_ack_target_msg_cb","MPIDIG_acc_dt_origin_cb","MPIDIG_acc_dt_origin_cb.cold","MPIDIG_acc_dt_target_msg_cb","MPIDIG_acc_origin_cb","MPIDIG_acc_target_msg_cb","MPIDIG_am_check_init","MPIDIG_am_comm_abort","MPIDIG_am_comm_abort_init","MPIDIG_am_finalize","MPIDIG_am_init","MPIDIG_am_reg_cb","MPIDIG_am_reg_cb_dynamic","MPIDIG_am_rndv_reg_cb","MPIDIG_am_send_async_init.isra.0.cold:0x3524e","MPIDIG_am_send_async_init.isra.0.cold:0x352c0","MPIDIG_am_send_async_init.isra.0.cold:0x35332","MPIDIG_am_send_async_init.isra.0:0x107990","MPIDIG_am_send_async_init.isra.0:0x10cc10","MPIDIG_am_send_async_init.isra.0:0x111fd0","MPIDIG_compute_acc_op.constprop.0","MPIDIG_compute_acc_op.constprop.0.cold","MPIDIG_cswap_ack_origin_cb","MPIDIG_cswap_ack_target_msg_cb","MPIDIG_cswap_origin_cb","MPIDIG_cswap_target_msg_cb","MPIDIG_destroy_comm","MPIDIG_do_accumulate.cold:0x35666","MPIDIG_do_accumulate.cold:0x35a03","MPIDIG_do_accumulate.cold:0x35f49","MPIDIG_do_accumulate.cold:0x3636b","MPIDIG_do_accumulate.cold:0x365ef","MPIDIG_do_accumulate.cold:0x3698c","MPIDIG_do_accumulate.cold:0x37069","MPIDIG_do_accumulate.cold:0x375de","MPIDIG_do_accumulate.cold:0x37a21","MPIDIG_do_accumulate.cold:0x37d37","MPIDIG_do_accumulate.cold:0x37f6b","MPIDIG_do_accumulate.cold:0x382c6","MPIDIG_do_accumulate.cold:0x38533","MPIDIG_do_accumulate.cold:0x38941","MPIDIG_do_accumulate.cold:0x38e39","MPIDIG_do_accumulate.cold:0x392f4","MPIDIG_do_accumulate.cold:0x397e9","MPIDIG_do_accumulate.cold:0x39a3e","MPIDIG_do_accumulate.cold:0x39c72","MPIDIG_do_accumulate.cold:0x39ea6","MPIDIG_do_accumulate.cold:0x3a0fb","MPIDIG_do_accumulate.cold:0x3a32f","MPIDIG_do_accumulate.cold:0x3a54e","MPIDIG_do_accumulate.cold:0x3a74c","MPIDIG_do_accumulate.cold:0x3a99b","MPIDIG_do_accumulate.cold:0x3abba","MPIDIG_do_accumulate.cold:0x3adee","MPIDIG_do_accumulate.cold:0x3b022","MPIDIG_do_accumulate.cold:0x3b241","MPIDIG_do_accumulate.cold:0x3d421","MPIDIG_do_accumulate.cold:0x3d91a","MPIDIG_do_accumulate.cold:0x3db2b","MPIDIG_do_accumulate.cold:0x3dd96","MPIDIG_do_accumulate.cold:0x3e2fd","MPIDIG_do_accumulate.cold:0x3eedc","MPIDIG_do_accumulate.cold:0x3f282","MPIDIG_do_accumulate.cold:0x3f480","MPIDIG_do_accumulate.cold:0x3f69f","MPIDIG_do_accumulate.cold:0x3f936","MPIDIG_do_accumulate.cold:0x3fc82","MPIDIG_do_accumulate.cold:0x40291","MPIDIG_do_accumulate.cold:0x4084c","MPIDIG_do_accumulate.cold:0x40c91","MPIDIG_do_accumulate.cold:0x40fa7","MPIDIG_do_accumulate.cold:0x41572","MPIDIG_do_accumulate.cold:0x41770","MPIDIG_do_accumulate.cold:0x419f4","MPIDIG_do_accumulate.cold:0x41d7c","MPIDIG_do_accumulate:0x125520","MPIDIG_do_accumulate:0x139bd0","MPIDIG_do_accumulate:0x15c570","MPIDIG_do_accumulate:0x173130","MPIDIG_do_accumulate:0x183750","MPIDIG_do_accumulate:0x198730","MPIDIG_do_accumulate:0x1bfc70","MPIDIG_do_accumulate:0x1dcb50","MPIDIG_do_accumulate:0x1f6930","MPIDIG_do_accumulate:0x20d2f0","MPIDIG_do_accumulate:0x2234a0","MPIDIG_do_accumulate:0x2370d0","MPIDIG_do_accumulate:0x246fc0","MPIDIG_do_accumulate:0x2616b0","MPIDIG_do_accumulate:0x27f300","MPIDIG_do_accumulate:0x29baf0","MPIDIG_do_accumulate:0x2bd130","MPIDIG_do_accumulate:0x2cf550","MPIDIG_do_accumulate:0x2deca0","MPIDIG_do_accumulate:0x2ee4c0","MPIDIG_do_accumulate:0x2fdc20","MPIDIG_do_accumulate:0x30d3d0","MPIDIG_do_accumulate:0x31d120","MPIDIG_do_accumulate:0x32be60","MPIDIG_do_accumulate:0x33e760","MPIDIG_do_accumulate:0x34d300","MPIDIG_do_accumulate:0x35c2b0","MPIDIG_do_accumulate:0x36c980","MPIDIG_do_accumulate:0x37bc30","MPIDIG_do_accumulate:0x421230","MPIDIG_do_accumulate:0x464830","MPIDIG_do_accumulate:0x481340","MPIDIG_do_accumulate:0x499380","MPIDIG_do_accumulate:0x4bd1f0","MPIDIG_do_accumulate:0x4fcc70","MPIDIG_do_accumulate:0x513240","MPIDIG_do_accumulate:0x524860","MPIDIG_do_accumulate:0x535bf0","MPIDIG_do_accumulate:0x54d8f0","MPIDIG_do_accumulate:0x56f0f0","MPIDIG_do_accumulate:0x5d6e40","MPIDIG_do_accumulate:0x6020b0","MPIDIG_do_accumulate:0x624020","MPIDIG_do_accumulate:0x63c160","MPIDIG_do_accumulate:0x678490","MPIDIG_do_accumulate:0x6930a0","MPIDIG_do_accumulate:0x6a6440","MPIDIG_do_accumulate:0x6c8350","MPIDIG_do_cts","MPIDIG_do_get.cold:0x356b0","MPIDIG_do_get.cold:0x35a4d","MPIDIG_do_get.cold:0x35f93","MPIDIG_do_get.cold:0x363b5","MPIDIG_do_get.cold:0x36639","MPIDIG_do_get.cold:0x369d6","MPIDIG_do_get.cold:0x370b3","MPIDIG_do_get.cold:0x37628","MPIDIG_do_get.cold:0x37a6b","MPIDIG_do_get.cold:0x37d81","MPIDIG_do_get.cold:0x37fb5","MPIDIG_do_get.cold:0x38310","MPIDIG_do_get.cold:0x3857d","MPIDIG_do_get.cold:0x38750","MPIDIG_do_get.cold:0x3898b","MPIDIG_do_get.cold:0x38e83","MPIDIG_do_get.cold:0x39103","MPIDIG_do_get.cold:0x3933e","MPIDIG_do_get.cold:0x39833","MPIDIG_do_get.cold:0x39a88","MPIDIG_do_get.cold:0x39cbc","MPIDIG_do_get.cold:0x39ef0","MPIDIG_do_get.cold:0x3a145","MPIDIG_do_get.cold:0x3a379","MPIDIG_do_get.cold:0x3a598","MPIDIG_do_get.cold:0x3a796","MPIDIG_do_get.cold:0x3a9e5","MPIDIG_do_get.cold:0x3ac04","MPIDIG_do_get.cold:0x3ae38","MPIDIG_do_get.cold:0x3b06c","MPIDIG_do_get.cold:0x3b28b","MPIDIG_do_get.cold:0x3d46b","MPIDIG_do_get.cold:0x3d964","MPIDIG_do_get.cold:0x3db75","MPIDIG_do_get.cold:0x3dde0","MPIDIG_do_get.cold:0x3e347","MPIDIG_do_get.cold:0x3ef26","MPIDIG_do_get.cold:0x3f2cc","MPIDIG_do_get.cold:0x3f4ca","MPIDIG_do_get.cold:0x3f6e9","MPIDIG_do_get.cold:0x3f980","MPIDIG_do_get.cold:0x3fccc","MPIDIG_do_get.cold:0x402db","MPIDIG_do_get.cold:0x40896","MPIDIG_do_get.cold:0x40cdb","MPIDIG_do_get.cold:0x40ff1","MPIDIG_do_get.cold:0x415bc","MPIDIG_do_get.cold:0x417ba","MPIDIG_do_get.cold:0x419c2","MPIDIG_do_get.cold:0x41dc6","MPIDIG_do_get:0x1267c0","MPIDIG_do_get:0x13ae90","MPIDIG_do_get:0x15d810","MPIDIG_do_get:0x1743d0","MPIDIG_do_get:0x1849f0","MPIDIG_do_get:0x1999f0","MPIDIG_do_get:0x1c0f10","MPIDIG_do_get:0x1dddf0","MPIDIG_do_get:0x1f7bd0","MPIDIG_do_get:0x20e590","MPIDIG_do_get:0x224740","MPIDIG_do_get:0x238370","MPIDIG_do_get:0x248260","MPIDIG_do_get:0x254660","MPIDIG_do_get:0x262950","MPIDIG_do_get:0x2805a0","MPIDIG_do_get:0x28ea20","MPIDIG_do_get:0x29cd90","MPIDIG_do_get:0x2be3d0","MPIDIG_do_get:0x2d07f0","MPIDIG_do_get:0x2dff40","MPIDIG_do_get:0x2ef760","MPIDIG_do_get:0x2feec0","MPIDIG_do_get:0x30e670","MPIDIG_do_get:0x31e3c0","MPIDIG_do_get:0x32d100","MPIDIG_do_get:0x33fa00","MPIDIG_do_get:0x34e5a0","MPIDIG_do_get:0x35d550","MPIDIG_do_get:0x36dc20","MPIDIG_do_get:0x37ced0","MPIDIG_do_get:0x4224d0","MPIDIG_do_get:0x465ad0","MPIDIG_do_get:0x4826d0","MPIDIG_do_get:0x49a620","MPIDIG_do_get:0x4be490","MPIDIG_do_get:0x4fdf10","MPIDIG_do_get:0x5144e0","MPIDIG_do_get:0x525b00","MPIDIG_do_get:0x536e90","MPIDIG_do_get:0x54eb90","MPIDIG_do_get:0x570390","MPIDIG_do_get:0x5d80e0","MPIDIG_do_get:0x603360","MPIDIG_do_get:0x6252c0","MPIDIG_do_get:0x63d400","MPIDIG_do_get:0x679730","MPIDIG_do_get:0x694340","MPIDIG_do_get:0x6a5600","MPIDIG_do_get:0x6c95f0","MPIDIG_do_get_accumulate.cold:0x356e2","MPIDIG_do_get_accumulate.cold:0x35a7f","MPIDIG_do_get_accumulate.cold:0x35fc5","MPIDIG_do_get_accumulate.cold:0x363e7","MPIDIG_do_get_accumulate.cold:0x3666b","MPIDIG_do_get_accumulate.cold:0x36a08","MPIDIG_do_get_accumulate.cold:0x370e5","MPIDIG_do_get_accumulate.cold:0x3765a","MPIDIG_do_get_accumulate.cold:0x37a9d","MPIDIG_do_get_accumulate.cold:0x37db3","MPIDIG_do_get_accumulate.cold:0x37fe7","MPIDIG_do_get_accumulate.cold:0x38342","MPIDIG_do_get_accumulate.cold:0x385af","MPIDIG_do_get_accumulate.cold:0x389bd","MPIDIG_do_get_accumulate.cold:0x38eb5","MPIDIG_do_get_accumulate.cold:0x39370","MPIDIG_do_get_accumulate.cold:0x39865","MPIDIG_do_get_accumulate.cold:0x39aba","MPIDIG_do_get_accumulate.cold:0x39cee","MPIDIG_do_get_accumulate.cold:0x39f22","MPIDIG_do_get_accumulate.cold:0x3a177","MPIDIG_do_get_accumulate.cold:0x3a3ab","MPIDIG_do_get_accumulate.cold:0x3a5ca","MPIDIG_do_get_accumulate.cold:0x3a7c8","MPIDIG_do_get_accumulate.cold:0x3aa17","MPIDIG_do_get_accumulate.cold:0x3ac36","MPIDIG_do_get_accumulate.cold:0x3ae6a","MPIDIG_do_get_accumulate.cold:0x3b09e","MPIDIG_do_get_accumulate.cold:0x3b2bd","MPIDIG_do_get_accumulate.cold:0x3d49d","MPIDIG_do_get_accumulate.cold:0x3d996","MPIDIG_do_get_accumulate.cold:0x3dba7","MPIDIG_do_get_accumulate.cold:0x3de12","MPIDIG_do_get_accumulate.cold:0x3e379","MPIDIG_do_get_accumulate.cold:0x3ef58","MPIDIG_do_get_accumulate.cold:0x3f2fe","MPIDIG_do_get_accumulate.cold:0x3f4fc","MPIDIG_do_get_accumulate.cold:0x3f71b","MPIDIG_do_get_accumulate.cold:0x3f9b2","MPIDIG_do_get_accumulate.cold:0x3fcfe","MPIDIG_do_get_accumulate.cold:0x4030d","MPIDIG_do_get_accumulate.cold:0x408c8","MPIDIG_do_get_accumulate.cold:0x40d0d","MPIDIG_do_get_accumulate.cold:0x41023","MPIDIG_do_get_accumulate.cold:0x415ee","MPIDIG_do_get_accumulate.cold:0x417ec","MPIDIG_do_get_accumulate.cold:0x41a3e","MPIDIG_do_get_accumulate.cold:0x41df8","MPIDIG_do_get_accumulate:0x127610","MPIDIG_do_get_accumulate:0x13bc90","MPIDIG_do_get_accumulate:0x15e660","MPIDIG_do_get_accumulate:0x175220","MPIDIG_do_get_accumulate:0x185840","MPIDIG_do_get_accumulate:0x19a7f0","MPIDIG_do_get_accumulate:0x1c1d60","MPIDIG_do_get_accumulate:0x1dec40","MPIDIG_do_get_accumulate:0x1f8a20","MPIDIG_do_get_accumulate:0x20f3e0","MPIDIG_do_get_accumulate:0x225580","MPIDIG_do_get_accumulate:0x2391b0","MPIDIG_do_get_accumulate:0x2490a0","MPIDIG_do_get_accumulate:0x263790","MPIDIG_do_get_accumulate:0x2813e0","MPIDIG_do_get_accumulate:0x29dbd0","MPIDIG_do_get_accumulate:0x2bf220","MPIDIG_do_get_accumulate:0x2d1630","MPIDIG_do_get_accumulate:0x2e0d80","MPIDIG_do_get_accumulate:0x2f05a0","MPIDIG_do_get_accumulate:0x2ffd00","MPIDIG_do_get_accumulate:0x30f4b0","MPIDIG_do_get_accumulate:0x31f210","MPIDIG_do_get_accumulate:0x32df50","MPIDIG_do_get_accumulate:0x340840","MPIDIG_do_get_accumulate:0x34f3e0","MPIDIG_do_get_accumulate:0x35e3a0","MPIDIG_do_get_accumulate:0x36ea70","MPIDIG_do_get_accumulate:0x37dd10","MPIDIG_do_get_accumulate:0x423320","MPIDIG_do_get_accumulate:0x466920","MPIDIG_do_get_accumulate:0x483610","MPIDIG_do_get_accumulate:0x49b460","MPIDIG_do_get_accumulate:0x4bf2d0","MPIDIG_do_get_accumulate:0x4fed50","MPIDIG_do_get_accumulate:0x515330","MPIDIG_do_get_accumulate:0x526950","MPIDIG_do_get_accumulate:0x537cd0","MPIDIG_do_get_accumulate:0x54f9d0","MPIDIG_do_get_accumulate:0x5711e0","MPIDIG_do_get_accumulate:0x5d8f30","MPIDIG_do_get_accumulate:0x604160","MPIDIG_do_get_accumulate:0x626110","MPIDIG_do_get_accumulate:0x63e250","MPIDIG_do_get_accumulate:0x67a580","MPIDIG_do_get_accumulate:0x695190","MPIDIG_do_get_accumulate:0x6a76e0","MPIDIG_do_get_accumulate:0x6ca440","MPIDIG_do_irecv.constprop.0.cold:0x35b56","MPIDIG_do_irecv.constprop.0.cold:0x36adf","MPIDIG_do_irecv.constprop.0.cold:0x379af","MPIDIG_do_irecv.constprop.0.cold:0x37cc5","MPIDIG_do_irecv.constprop.0.cold:0x3d8a8","MPIDIG_do_irecv.constprop.0.cold:0x3f210","MPIDIG_do_irecv.constprop.0.cold:0x3fc10","MPIDIG_do_irecv.constprop.0.cold:0x4021f","MPIDIG_do_irecv.constprop.0.cold:0x40c1f","MPIDIG_do_irecv.constprop.0.cold:0x40f35","MPIDIG_do_irecv.constprop.0.cold:0x41d0a","MPIDIG_do_irecv.constprop.0:0x1414a0","MPIDIG_do_irecv.constprop.0:0x1a0770","MPIDIG_do_irecv.constprop.0:0x1f41e0","MPIDIG_do_irecv.constprop.0:0x20aba0","MPIDIG_do_irecv.constprop.0:0x461b20","MPIDIG_do_irecv.constprop.0:0x486060","MPIDIG_do_irecv.constprop.0:0x510530","MPIDIG_do_irecv.constprop.0:0x56c160","MPIDIG_do_irecv.constprop.0:0x5d4000","MPIDIG_do_irecv.constprop.0:0x6218d0","MPIDIG_do_irecv.constprop.0:0x639a10","MPIDIG_do_irecv.constprop.0:0x6c5e60","MPIDIG_do_put.cold:0x35733","MPIDIG_do_put.cold:0x35ad0","MPIDIG_do_put.cold:0x36016","MPIDIG_do_put.cold:0x36438","MPIDIG_do_put.cold:0x366bc","MPIDIG_do_put.cold:0x36a59","MPIDIG_do_put.cold:0x37136","MPIDIG_do_put.cold:0x376ab","MPIDIG_do_put.cold:0x37aee","MPIDIG_do_put.cold:0x37e04","MPIDIG_do_put.cold:0x38038","MPIDIG_do_put.cold:0x38393","MPIDIG_do_put.cold:0x38600","MPIDIG_do_put.cold:0x38a0e","MPIDIG_do_put.cold:0x38c27","MPIDIG_do_put.cold:0x38f06","MPIDIG_do_put.cold:0x393c1","MPIDIG_do_put.cold:0x395d7","MPIDIG_do_put.cold:0x398b6","MPIDIG_do_put.cold:0x39b0b","MPIDIG_do_put.cold:0x39d3f","MPIDIG_do_put.cold:0x39f73","MPIDIG_do_put.cold:0x3a1c8","MPIDIG_do_put.cold:0x3a3fc","MPIDIG_do_put.cold:0x3a61b","MPIDIG_do_put.cold:0x3a819","MPIDIG_do_put.cold:0x3aa68","MPIDIG_do_put.cold:0x3ac87","MPIDIG_do_put.cold:0x3aebb","MPIDIG_do_put.cold:0x3b0ef","MPIDIG_do_put.cold:0x3b30e","MPIDIG_do_put.cold:0x3d4ee","MPIDIG_do_put.cold:0x3d9e7","MPIDIG_do_put.cold:0x3dbf8","MPIDIG_do_put.cold:0x3de63","MPIDIG_do_put.cold:0x3e3ca","MPIDIG_do_put.cold:0x3efa9","MPIDIG_do_put.cold:0x3f34f","MPIDIG_do_put.cold:0x3f54d","MPIDIG_do_put.cold:0x3f76c","MPIDIG_do_put.cold:0x3fa03","MPIDIG_do_put.cold:0x3fd4f","MPIDIG_do_put.cold:0x4035e","MPIDIG_do_put.cold:0x40919","MPIDIG_do_put.cold:0x40d5e","MPIDIG_do_put.cold:0x41074","MPIDIG_do_put.cold:0x4163f","MPIDIG_do_put.cold:0x4183d","MPIDIG_do_put.cold:0x4196f","MPIDIG_do_put.cold:0x41e49","MPIDIG_do_put:0x128bd0","MPIDIG_do_put:0x13d150","MPIDIG_do_put:0x15fc20","MPIDIG_do_put:0x1767e0","MPIDIG_do_put:0x186e00","MPIDIG_do_put:0x19bcb0","MPIDIG_do_put:0x1c3320","MPIDIG_do_put:0x1e0200","MPIDIG_do_put:0x1f9fd0","MPIDIG_do_put:0x210990","MPIDIG_do_put:0x226b30","MPIDIG_do_put:0x23a760","MPIDIG_do_put:0x24a650","MPIDIG_do_put:0x264d40","MPIDIG_do_put:0x271b30","MPIDIG_do_put:0x282990","MPIDIG_do_put:0x29f180","MPIDIG_do_put:0x2aca60","MPIDIG_do_put:0x2c07e0","MPIDIG_do_put:0x2d2be0","MPIDIG_do_put:0x2e2330","MPIDIG_do_put:0x2f1b50","MPIDIG_do_put:0x3012b0","MPIDIG_do_put:0x310a60","MPIDIG_do_put:0x3207d0","MPIDIG_do_put:0x32f510","MPIDIG_do_put:0x341df0","MPIDIG_do_put:0x350990","MPIDIG_do_put:0x35f960","MPIDIG_do_put:0x370030","MPIDIG_do_put:0x37f2c0","MPIDIG_do_put:0x4248d0","MPIDIG_do_put:0x467ee0","MPIDIG_do_put:0x484c20","MPIDIG_do_put:0x49ca10","MPIDIG_do_put:0x4c0880","MPIDIG_do_put:0x5002f0","MPIDIG_do_put:0x5168e0","MPIDIG_do_put:0x527f00","MPIDIG_do_put:0x539270","MPIDIG_do_put:0x550f70","MPIDIG_do_put:0x572790","MPIDIG_do_put:0x5da4e0","MPIDIG_do_put:0x605620","MPIDIG_do_put:0x6276c0","MPIDIG_do_put:0x63f800","MPIDIG_do_put:0x67bb30","MPIDIG_do_put:0x696740","MPIDIG_do_put:0x6a42d0","MPIDIG_do_put:0x6cba00","MPIDIG_generate_win_id","MPIDIG_get_acc_ack_origin_cb","MPIDIG_get_acc_ack_target_msg_cb","MPIDIG_get_acc_data_origin_cb","MPIDIG_get_acc_data_origin_cb.cold","MPIDIG_get_acc_data_target_msg_cb","MPIDIG_get_acc_dt_ack_target_msg_cb","MPIDIG_get_acc_dt_origin_cb","MPIDIG_get_acc_dt_origin_cb.cold","MPIDIG_get_acc_dt_target_msg_cb","MPIDIG_get_acc_origin_cb","MPIDIG_get_acc_target_msg_cb","MPIDIG_get_ack_origin_cb","MPIDIG_get_ack_origin_cb.cold","MPIDIG_get_ack_target_msg_cb","MPIDIG_get_context_index","MPIDIG_get_origin_cb","MPIDIG_get_target_msg_cb","MPIDIG_handle_unexpected","MPIDIG_handle_unexpected.cold","MPIDIG_init_comm","MPIDIG_isend_impl.cold:0x3796d","MPIDIG_isend_impl.cold:0x37c83","MPIDIG_isend_impl.cold:0x3d866","MPIDIG_isend_impl.cold:0x40bdd","MPIDIG_isend_impl.cold:0x40ef3","MPIDIG_isend_impl.constprop.0.cold:0x35ce0","MPIDIG_isend_impl.constprop.0.cold:0x35f07","MPIDIG_isend_impl.constprop.0.cold:0x36329","MPIDIG_isend_impl.constprop.0.cold:0x36d17","MPIDIG_isend_impl.constprop.0.cold:0x37027","MPIDIG_isend_impl.constprop.0.cold:0x3759c","MPIDIG_isend_impl.constprop.0.cold:0x3f1ce","MPIDIG_isend_impl.constprop.0.cold:0x3fbce","MPIDIG_isend_impl.constprop.0.cold:0x401dd","MPIDIG_isend_impl.constprop.0.cold:0x41cc8","MPIDIG_isend_impl.constprop.0:0x14ba40","MPIDIG_isend_impl.constprop.0:0x159bf0","MPIDIG_isend_impl.constprop.0:0x1707b0","MPIDIG_isend_impl.constprop.0:0x1ac700","MPIDIG_isend_impl.constprop.0:0x1bd2f0","MPIDIG_isend_impl.constprop.0:0x1da1d0","MPIDIG_isend_impl.constprop.0:0x50dbb0","MPIDIG_isend_impl.constprop.0:0x523a50","MPIDIG_isend_impl.constprop.0:0x5697e0","MPIDIG_isend_impl.constprop.0:0x5d1680","MPIDIG_isend_impl.constprop.0:0x6c34e0","MPIDIG_isend_impl:0x1f1840","MPIDIG_isend_impl:0x208200","MPIDIG_isend_impl:0x45f180","MPIDIG_isend_impl:0x61ef30","MPIDIG_isend_impl:0x637070","MPIDIG_mpi_accumulate.part.0:0x21b3a0","MPIDIG_mpi_accumulate.part.0:0x277200","MPIDIG_mpi_alloc_mem","MPIDIG_mpi_cancel_recv.part.0.cold:0x355c1","MPIDIG_mpi_cancel_recv.part.0.cold:0x3595e","MPIDIG_mpi_cancel_recv.part.0.cold:0x35e20","MPIDIG_mpi_cancel_recv.part.0.cold:0x36242","MPIDIG_mpi_cancel_recv.part.0.cold:0x3654a","MPIDIG_mpi_cancel_recv.part.0.cold:0x368e7","MPIDIG_mpi_cancel_recv.part.0.cold:0x36f40","MPIDIG_mpi_cancel_recv.part.0.cold:0x37262","MPIDIG_mpi_cancel_recv.part.0.cold:0x374b5","MPIDIG_mpi_cancel_recv.part.0.cold:0x37886","MPIDIG_mpi_cancel_recv.part.0.cold:0x37b9c","MPIDIG_mpi_cancel_recv.part.0.cold:0x37e90","MPIDIG_mpi_cancel_recv.part.0.cold:0x381eb","MPIDIG_mpi_cancel_recv.part.0.cold:0x38458","MPIDIG_mpi_cancel_recv.part.0.cold:0x38866","MPIDIG_mpi_cancel_recv.part.0.cold:0x38d5e","MPIDIG_mpi_cancel_recv.part.0.cold:0x39219","MPIDIG_mpi_cancel_recv.part.0.cold:0x3970e","MPIDIG_mpi_cancel_recv.part.0.cold:0x39963","MPIDIG_mpi_cancel_recv.part.0.cold:0x39b97","MPIDIG_mpi_cancel_recv.part.0.cold:0x39dcb","MPIDIG_mpi_cancel_recv.part.0.cold:0x3a020","MPIDIG_mpi_cancel_recv.part.0.cold:0x3a254","MPIDIG_mpi_cancel_recv.part.0.cold:0x3a4a9","MPIDIG_mpi_cancel_recv.part.0.cold:0x3a6a7","MPIDIG_mpi_cancel_recv.part.0.cold:0x3a8f6","MPIDIG_mpi_cancel_recv.part.0.cold:0x3ab15","MPIDIG_mpi_cancel_recv.part.0.cold:0x3ad13","MPIDIG_mpi_cancel_recv.part.0.cold:0x3af47","MPIDIG_mpi_cancel_recv.part.0.cold:0x3b19c","MPIDIG_mpi_cancel_recv.part.0.cold:0x3d37c","MPIDIG_mpi_cancel_recv.part.0.cold:0x3d77f","MPIDIG_mpi_cancel_recv.part.0.cold:0x3dc6c","MPIDIG_mpi_cancel_recv.part.0.cold:0x3dcf1","MPIDIG_mpi_cancel_recv.part.0.cold:0x3e258","MPIDIG_mpi_cancel_recv.part.0.cold:0x3ee37","MPIDIG_mpi_cancel_recv.part.0.cold:0x3f0e7","MPIDIG_mpi_cancel_recv.part.0.cold:0x3f3db","MPIDIG_mpi_cancel_recv.part.0.cold:0x3f5fa","MPIDIG_mpi_cancel_recv.part.0.cold:0x3f7f4","MPIDIG_mpi_cancel_recv.part.0.cold:0x3f891","MPIDIG_mpi_cancel_recv.part.0.cold:0x3fae7","MPIDIG_mpi_cancel_recv.part.0.cold:0x400f6","MPIDIG_mpi_cancel_recv.part.0.cold:0x40405","MPIDIG_mpi_cancel_recv.part.0.cold:0x407a7","MPIDIG_mpi_cancel_recv.part.0.cold:0x40af6","MPIDIG_mpi_cancel_recv.part.0.cold:0x40e0c","MPIDIG_mpi_cancel_recv.part.0.cold:0x410f9","MPIDIG_mpi_cancel_recv.part.0.cold:0x41163","MPIDIG_mpi_cancel_recv.part.0.cold:0x412d9","MPIDIG_mpi_cancel_recv.part.0.cold:0x413ae","MPIDIG_mpi_cancel_recv.part.0.cold:0x4141f","MPIDIG_mpi_cancel_recv.part.0.cold:0x41497","MPIDIG_mpi_cancel_recv.part.0.cold:0x416cb","MPIDIG_mpi_cancel_recv.part.0.cold:0x418eb","MPIDIG_mpi_cancel_recv.part.0.cold:0x41bba","MPIDIG_mpi_cancel_recv.part.0:0x121d30","MPIDIG_mpi_cancel_recv.part.0:0x136230","MPIDIG_mpi_cancel_recv.part.0:0x156020","MPIDIG_mpi_cancel_recv.part.0:0x16cbe0","MPIDIG_mpi_cancel_recv.part.0:0x17ff60","MPIDIG_mpi_cancel_recv.part.0:0x194d90","MPIDIG_mpi_cancel_recv.part.0:0x1b9710","MPIDIG_mpi_cancel_recv.part.0:0x1c99d0","MPIDIG_mpi_cancel_recv.part.0:0x1d65f0","MPIDIG_mpi_cancel_recv.part.0:0x1edb60","MPIDIG_mpi_cancel_recv.part.0:0x204520","MPIDIG_mpi_cancel_recv.part.0:0x21f790","MPIDIG_mpi_cancel_recv.part.0:0x232cb0","MPIDIG_mpi_cancel_recv.part.0:0x2432b0","MPIDIG_mpi_cancel_recv.part.0:0x25d9a0","MPIDIG_mpi_cancel_recv.part.0:0x27b5f0","MPIDIG_mpi_cancel_recv.part.0:0x297de0","MPIDIG_mpi_cancel_recv.part.0:0x2b9410","MPIDIG_mpi_cancel_recv.part.0:0x2cb840","MPIDIG_mpi_cancel_recv.part.0:0x2daf90","MPIDIG_mpi_cancel_recv.part.0:0x2ea7b0","MPIDIG_mpi_cancel_recv.part.0:0x2f9f10","MPIDIG_mpi_cancel_recv.part.0:0x3096c0","MPIDIG_mpi_cancel_recv.part.0:0x31a1c0","MPIDIG_mpi_cancel_recv.part.0:0x328f00","MPIDIG_mpi_cancel_recv.part.0:0x33b810","MPIDIG_mpi_cancel_recv.part.0:0x34a3b0","MPIDIG_mpi_cancel_recv.part.0:0x358590","MPIDIG_mpi_cancel_recv.part.0:0x368c60","MPIDIG_mpi_cancel_recv.part.0:0x378ce0","MPIDIG_mpi_cancel_recv.part.0:0x41e2e0","MPIDIG_mpi_cancel_recv.part.0:0x45aa40","MPIDIG_mpi_cancel_recv.part.0:0x488270","MPIDIG_mpi_cancel_recv.part.0:0x496430","MPIDIG_mpi_cancel_recv.part.0:0x4ba2a0","MPIDIG_mpi_cancel_recv.part.0:0x4f9d20","MPIDIG_mpi_cancel_recv.part.0:0x509fd0","MPIDIG_mpi_cancel_recv.part.0:0x521110","MPIDIG_mpi_cancel_recv.part.0:0x5329a0","MPIDIG_mpi_cancel_recv.part.0:0x543d70","MPIDIG_mpi_cancel_recv.part.0:0x54a9a0","MPIDIG_mpi_cancel_recv.part.0:0x565c00","MPIDIG_mpi_cancel_recv.part.0:0x5cdab0","MPIDIG_mpi_cancel_recv.part.0:0x5e4e00","MPIDIG_mpi_cancel_recv.part.0:0x5ff160","MPIDIG_mpi_cancel_recv.part.0:0x61b250","MPIDIG_mpi_cancel_recv.part.0:0x633390","MPIDIG_mpi_cancel_recv.part.0:0x645b30","MPIDIG_mpi_cancel_recv.part.0:0x64f640","MPIDIG_mpi_cancel_recv.part.0:0x65f040","MPIDIG_mpi_cancel_recv.part.0:0x6643e0","MPIDIG_mpi_cancel_recv.part.0:0x668530","MPIDIG_mpi_cancel_recv.part.0:0x673590","MPIDIG_mpi_cancel_recv.part.0:0x690150","MPIDIG_mpi_cancel_recv.part.0:0x6a06d0","MPIDIG_mpi_cancel_recv.part.0:0x6bf210","MPIDIG_mpi_compare_and_swap","MPIDIG_mpi_fetch_and_op.part.0","MPIDIG_mpi_free_mem","MPIDIG_mpi_get.part.0","MPIDIG_mpi_get_accumulate.part.0:0x23ee90","MPIDIG_mpi_get_accumulate.part.0:0x2595b0","MPIDIG_mpi_get_accumulate.part.0:0x2939f0","MPIDIG_mpi_improbe.constprop.0:0x11df70","MPIDIG_mpi_improbe.constprop.0:0x17c1a0","MPIDIG_mpi_imrecv.cold:0x357b9","MPIDIG_mpi_imrecv.cold:0x36742","MPIDIG_mpi_imrecv:0x12ced0","MPIDIG_mpi_imrecv:0x18b8a0","MPIDIG_mpi_irecv.part.0:0x140440","MPIDIG_mpi_irecv.part.0:0x19f660","MPIDIG_mpi_irecv.part.0:0x1e8f40","MPIDIG_mpi_irecv.part.0:0x1ff8d0","MPIDIG_mpi_irecv.part.0:0x455bf0","MPIDIG_mpi_irecv.part.0:0x477230","MPIDIG_mpi_irecv.part.0:0x505290","MPIDIG_mpi_irecv.part.0:0x560220","MPIDIG_mpi_irecv.part.0:0x5c8e90","MPIDIG_mpi_irecv.part.0:0x6165a0","MPIDIG_mpi_irecv.part.0:0x62e770","MPIDIG_mpi_irecv.part.0:0x6ba320","MPIDIG_mpi_parrived.constprop.0.isra.0","MPIDIG_mpi_precv_init","MPIDIG_mpi_psend_init","MPIDIG_mpi_psend_init.cold","MPIDIG_mpi_put.part.0","MPIDIG_mpi_raccumulate.part.0","MPIDIG_mpi_rget.part.0","MPIDIG_mpi_rget_accumulate.part.0","MPIDIG_mpi_rput.part.0","MPIDIG_mpi_win_allocate","MPIDIG_mpi_win_allocate_shared","MPIDIG_mpi_win_attach","MPIDIG_mpi_win_create","MPIDIG_mpi_win_create_dynamic","MPIDIG_mpi_win_detach","MPIDIG_mpi_win_free","MPIDIG_mpi_win_get_info","MPIDIG_mpi_win_set_info","MPIDIG_part_cts_target_msg_cb","MPIDIG_part_cts_target_msg_cb.cold","MPIDIG_part_issue_data.constprop.0.cold:0x3526f","MPIDIG_part_issue_data.constprop.0.cold:0x352e1","MPIDIG_part_issue_data.constprop.0.cold:0x35353","MPIDIG_part_issue_data.constprop.0:0x10a110","MPIDIG_part_issue_data.constprop.0:0x10f390","MPIDIG_part_issue_data.constprop.0:0x114750","MPIDIG_part_send_data_origin_cb","MPIDIG_part_send_data_target_msg_cb","MPIDIG_part_send_data_target_msg_cb.cold","MPIDIG_part_send_init_target_msg_cb","MPIDIG_precv_matched","MPIDIG_precv_matched.cold","MPIDIG_put_ack_origin_cb","MPIDIG_put_ack_target_msg_cb","MPIDIG_put_data_origin_cb","MPIDIG_put_data_origin_cb.cold","MPIDIG_put_data_target_msg_cb","MPIDIG_put_dt_ack_target_msg_cb","MPIDIG_put_dt_origin_cb","MPIDIG_put_dt_origin_cb.cold","MPIDIG_put_dt_target_msg_cb","MPIDIG_put_origin_cb","MPIDIG_put_target_msg_cb","MPIDIG_recv_check_rndv_cb.part.0","MPIDIG_recv_copy:0x5dfe60","MPIDIG_recv_copy:0x5e8920","MPIDIG_recv_copy_seg","MPIDIG_recv_setup:0x65df00","MPIDIG_recv_setup:0x66b2e0","MPIDIG_recv_type_init.cold:0x35b34","MPIDIG_recv_type_init.cold:0x36abd","MPIDIG_recv_type_init.cold:0x37843","MPIDIG_recv_type_init.cold:0x37b59","MPIDIG_recv_type_init.cold:0x3d73c","MPIDIG_recv_type_init.cold:0x3dac7","MPIDIG_recv_type_init.cold:0x3f0a4","MPIDIG_recv_type_init.cold:0x3fa90","MPIDIG_recv_type_init.cold:0x400b3","MPIDIG_recv_type_init.cold:0x40ab3","MPIDIG_recv_type_init.cold:0x40dc9","MPIDIG_recv_type_init.cold:0x41b77","MPIDIG_recv_type_init.isra.0.cold:0x35797","MPIDIG_recv_type_init.isra.0.cold:0x36720","MPIDIG_recv_type_init.isra.0.cold:0x403c2","MPIDIG_recv_type_init.isra.0.cold:0x4053d","MPIDIG_recv_type_init.isra.0:0x12cbf0","MPIDIG_recv_type_init.isra.0:0x18b5c0","MPIDIG_recv_type_init.isra.0:0x5e2240","MPIDIG_recv_type_init.isra.0:0x5eb530","MPIDIG_recv_type_init:0x1411b0","MPIDIG_recv_type_init:0x1a0470","MPIDIG_recv_type_init:0x1eb730","MPIDIG_recv_type_init:0x2020f0","MPIDIG_recv_type_init:0x458600","MPIDIG_recv_type_init:0x480110","MPIDIG_recv_type_init:0x507b90","MPIDIG_recv_type_init:0x5630e0","MPIDIG_recv_type_init:0x5ca5f0","MPIDIG_recv_type_init:0x618e20","MPIDIG_recv_type_init:0x630f60","MPIDIG_recv_type_init:0x6bcdd0","MPIDIG_recvq_init","MPIDIG_reply_ssend.part.0","MPIDIG_request_create.constprop.0:0x1326c0","MPIDIG_request_create.constprop.0:0x191220","MPIDIG_request_create.constprop.0:0x5fa1a0","MPIDIG_send_cts_target_msg_cb","MPIDIG_send_cts_target_msg_cb.cold","MPIDIG_send_data_origin_cb","MPIDIG_send_data_origin_cb.cold","MPIDIG_send_data_target_msg_cb","MPIDIG_send_origin_cb","MPIDIG_send_target_msg_cb","MPIDIG_send_target_msg_cb.cold","MPIDIG_ssend_ack_target_msg_cb","MPIDIG_win_complete_target_msg_cb","MPIDIG_win_lock_ack_target_msg_cb","MPIDIG_win_lock_target_msg_cb","MPIDIG_win_lockall_ack_target_msg_cb","MPIDIG_win_lockall_target_msg_cb","MPIDIG_win_post_target_msg_cb","MPIDIG_win_target_add:0x11f0f0","MPIDIG_win_target_add:0x1335f0","MPIDIG_win_target_add:0x152e50","MPIDIG_win_target_add:0x169a10","MPIDIG_win_target_add:0x17d320","MPIDIG_win_target_add:0x192150","MPIDIG_win_target_add:0x1b6540","MPIDIG_win_target_add:0x1d3420","MPIDIG_win_target_add:0x1ea6a0","MPIDIG_win_target_add:0x201060","MPIDIG_win_target_add:0x21cb50","MPIDIG_win_target_add:0x230070","MPIDIG_win_target_add:0x240670","MPIDIG_win_target_add:0x25ad60","MPIDIG_win_target_add:0x2789b0","MPIDIG_win_target_add:0x2951a0","MPIDIG_win_target_add:0x2b63b0","MPIDIG_win_target_add:0x2c8c00","MPIDIG_win_target_add:0x2d8350","MPIDIG_win_target_add:0x2e7b70","MPIDIG_win_target_add:0x2f72d0","MPIDIG_win_target_add:0x306a80","MPIDIG_win_target_add:0x317580","MPIDIG_win_target_add:0x3262c0","MPIDIG_win_target_add:0x338bd0","MPIDIG_win_target_add:0x347770","MPIDIG_win_target_add:0x355950","MPIDIG_win_target_add:0x366020","MPIDIG_win_target_add:0x3760a0","MPIDIG_win_target_add:0x41b6a0","MPIDIG_win_target_add:0x457570","MPIDIG_win_target_add:0x4784a0","MPIDIG_win_target_add:0x4937f0","MPIDIG_win_target_add:0x4b7660","MPIDIG_win_target_add:0x4f70e0","MPIDIG_win_target_add:0x506b00","MPIDIG_win_target_add:0x51df40","MPIDIG_win_target_add:0x52fc30","MPIDIG_win_target_add:0x547d60","MPIDIG_win_target_add:0x561c20","MPIDIG_win_target_add:0x5ca8e0","MPIDIG_win_target_add:0x5fa640","MPIDIG_win_target_add:0x617d90","MPIDIG_win_target_add:0x62fed0","MPIDIG_win_target_add:0x66ff70","MPIDIG_win_target_add:0x68d510","MPIDIG_win_target_add:0x69e5f0","MPIDIG_win_target_add:0x6bbd40","MPIDIG_win_target_find:0x11d950","MPIDIG_win_target_find:0x131df0","MPIDIG_win_target_find:0x1514d0","MPIDIG_win_target_find:0x168090","MPIDIG_win_target_find:0x17bb80","MPIDIG_win_target_find:0x190950","MPIDIG_win_target_find:0x1b4b20","MPIDIG_win_target_find:0x1d1a00","MPIDIG_win_target_find:0x1e8dc0","MPIDIG_win_target_find:0x1ff780","MPIDIG_win_target_find:0x21af90","MPIDIG_win_target_find:0x22e4e0","MPIDIG_win_target_find:0x23ea80","MPIDIG_win_target_find:0x250640","MPIDIG_win_target_find:0x2591a0","MPIDIG_win_target_find:0x26d230","MPIDIG_win_target_find:0x276dc0","MPIDIG_win_target_find:0x28a530","MPIDIG_win_target_find:0x2935b0","MPIDIG_win_target_find:0x2a7d00","MPIDIG_win_target_find:0x2b49d0","MPIDIG_win_target_find:0x2c7040","MPIDIG_win_target_find:0x2d6790","MPIDIG_win_target_find:0x2e5fb0","MPIDIG_win_target_find:0x2f5710","MPIDIG_win_target_find:0x304ec0","MPIDIG_win_target_find:0x315ae0","MPIDIG_win_target_find:0x324970","MPIDIG_win_target_find:0x337370","MPIDIG_win_target_find:0x346200","MPIDIG_win_target_find:0x353b50","MPIDIG_win_target_find:0x364510","MPIDIG_win_target_find:0x374840","MPIDIG_win_target_find:0x419e20","MPIDIG_win_target_find:0x455aa0","MPIDIG_win_target_find:0x476f70","MPIDIG_win_target_find:0x492280","MPIDIG_win_target_find:0x4b6090","MPIDIG_win_target_find:0x4f5b30","MPIDIG_win_target_find:0x504fd0","MPIDIG_win_target_find:0x51bfe0","MPIDIG_win_target_find:0x52dd00","MPIDIG_win_target_find:0x5467b0","MPIDIG_win_target_find:0x55ff30","MPIDIG_win_target_find:0x5c8ba0","MPIDIG_win_target_find:0x5e8600","MPIDIG_win_target_find:0x5f8fb0","MPIDIG_win_target_find:0x6163c0","MPIDIG_win_target_find:0x62e5f0","MPIDIG_win_target_find:0x66dd10","MPIDIG_win_target_find:0x68bcd0","MPIDIG_win_target_find:0x69d040","MPIDIG_win_target_find:0x6b9db0","MPIDIG_win_unlock_ack_target_msg_cb","MPIDIG_win_unlock_target_msg_cb","MPIDIG_win_unlockall_ack_target_msg_cb","MPIDIG_win_unlockall_target_msg_cb","MPIDIU_Intercomm_map_bcast_intra","MPIDIU_alloc_lut","MPIDIU_alloc_mlut","MPIDIU_avt_add_ref","MPIDIU_avt_destroy","MPIDIU_avt_init","MPIDIU_avt_release_ref","MPIDIU_comm_rank_to_av.cold:0x35247","MPIDIU_comm_rank_to_av.cold:0x352b9","MPIDIU_comm_rank_to_av.cold:0x3532b","MPIDIU_comm_rank_to_av.cold:0x35592","MPIDIU_comm_rank_to_av.cold:0x35790","MPIDIU_comm_rank_to_av.cold:0x3592f","MPIDIU_comm_rank_to_av.cold:0x35b2d","MPIDIU_comm_rank_to_av.cold:0x35c6f","MPIDIU_comm_rank_to_av.cold:0x35df1","MPIDIU_comm_rank_to_av.cold:0x36213","MPIDIU_comm_rank_to_av.cold:0x3651b","MPIDIU_comm_rank_to_av.cold:0x36719","MPIDIU_comm_rank_to_av.cold:0x368b8","MPIDIU_comm_rank_to_av.cold:0x36ab6","MPIDIU_comm_rank_to_av.cold:0x36bf8","MPIDIU_comm_rank_to_av.cold:0x36ce8","MPIDIU_comm_rank_to_av.cold:0x36f11","MPIDIU_comm_rank_to_av.cold:0x37219","MPIDIU_comm_rank_to_av.cold:0x37486","MPIDIU_comm_rank_to_av.cold:0x37835","MPIDIU_comm_rank_to_av.cold:0x37b4b","MPIDIU_comm_rank_to_av.cold:0x37e61","MPIDIU_comm_rank_to_av.cold:0x381bc","MPIDIU_comm_rank_to_av.cold:0x38429","MPIDIU_comm_rank_to_av.cold:0x386df","MPIDIU_comm_rank_to_av.cold:0x38837","MPIDIU_comm_rank_to_av.cold:0x38bb6","MPIDIU_comm_rank_to_av.cold:0x38d2f","MPIDIU_comm_rank_to_av.cold:0x39092","MPIDIU_comm_rank_to_av.cold:0x391ea","MPIDIU_comm_rank_to_av.cold:0x39566","MPIDIU_comm_rank_to_av.cold:0x396df","MPIDIU_comm_rank_to_av.cold:0x39934","MPIDIU_comm_rank_to_av.cold:0x39b68","MPIDIU_comm_rank_to_av.cold:0x39d9c","MPIDIU_comm_rank_to_av.cold:0x39ff1","MPIDIU_comm_rank_to_av.cold:0x3a225","MPIDIU_comm_rank_to_av.cold:0x3a47a","MPIDIU_comm_rank_to_av.cold:0x3a678","MPIDIU_comm_rank_to_av.cold:0x3a876","MPIDIU_comm_rank_to_av.cold:0x3a8c7","MPIDIU_comm_rank_to_av.cold:0x3aae6","MPIDIU_comm_rank_to_av.cold:0x3ace4","MPIDIU_comm_rank_to_av.cold:0x3af18","MPIDIU_comm_rank_to_av.cold:0x3b16d","MPIDIU_comm_rank_to_av.cold:0x3d34d","MPIDIU_comm_rank_to_av.cold:0x3d72e","MPIDIU_comm_rank_to_av.cold:0x3da98","MPIDIU_comm_rank_to_av.cold:0x3dcc2","MPIDIU_comm_rank_to_av.cold:0x3e1d5","MPIDIU_comm_rank_to_av.cold:0x3e229","MPIDIU_comm_rank_to_av.cold:0x3ee08","MPIDIU_comm_rank_to_av.cold:0x3f096","MPIDIU_comm_rank_to_av.cold:0x3f3ac","MPIDIU_comm_rank_to_av.cold:0x3f5aa","MPIDIU_comm_rank_to_av.cold:0x3f862","MPIDIU_comm_rank_to_av.cold:0x3fa60","MPIDIU_comm_rank_to_av.cold:0x3fec1","MPIDIU_comm_rank_to_av.cold:0x400a5","MPIDIU_comm_rank_to_av.cold:0x40536","MPIDIU_comm_rank_to_av.cold:0x40778","MPIDIU_comm_rank_to_av.cold:0x40998","MPIDIU_comm_rank_to_av.cold:0x40a0b","MPIDIU_comm_rank_to_av.cold:0x40a7d","MPIDIU_comm_rank_to_av.cold:0x40aa5","MPIDIU_comm_rank_to_av.cold:0x40dbb","MPIDIU_comm_rank_to_av.cold:0x410d1","MPIDIU_comm_rank_to_av.cold:0x412b1","MPIDIU_comm_rank_to_av.cold:0x413a7","MPIDIU_comm_rank_to_av.cold:0x41468","MPIDIU_comm_rank_to_av.cold:0x4169c","MPIDIU_comm_rank_to_av.cold:0x4189a","MPIDIU_comm_rank_to_av.cold:0x41b69","MPIDIU_comm_rank_to_av:0x106aa0","MPIDIU_comm_rank_to_av:0x10bd20","MPIDIU_comm_rank_to_av:0x1110e0","MPIDIU_comm_rank_to_av:0x11d380","MPIDIU_comm_rank_to_av:0x12c330","MPIDIU_comm_rank_to_av:0x131820","MPIDIU_comm_rank_to_av:0x140160","MPIDIU_comm_rank_to_av:0x1464e0","MPIDIU_comm_rank_to_av:0x1510a0","MPIDIU_comm_rank_to_av:0x167c60","MPIDIU_comm_rank_to_av:0x17b5b0","MPIDIU_comm_rank_to_av:0x18aca0","MPIDIU_comm_rank_to_av:0x190380","MPIDIU_comm_rank_to_av:0x19f380","MPIDIU_comm_rank_to_av:0x1a5850","MPIDIU_comm_rank_to_av:0x1a7cb0","MPIDIU_comm_rank_to_av:0x1b46f0","MPIDIU_comm_rank_to_av:0x1c80f0","MPIDIU_comm_rank_to_av:0x1d15d0","MPIDIU_comm_rank_to_av:0x1e87f0","MPIDIU_comm_rank_to_av:0x1ff1b0","MPIDIU_comm_rank_to_av:0x21acb0","MPIDIU_comm_rank_to_av:0x22e200","MPIDIU_comm_rank_to_av:0x23e7a0","MPIDIU_comm_rank_to_av:0x250360","MPIDIU_comm_rank_to_av:0x258ec0","MPIDIU_comm_rank_to_av:0x26cf50","MPIDIU_comm_rank_to_av:0x276ae0","MPIDIU_comm_rank_to_av:0x28a250","MPIDIU_comm_rank_to_av:0x2932d0","MPIDIU_comm_rank_to_av:0x2a7a20","MPIDIU_comm_rank_to_av:0x2b46f0","MPIDIU_comm_rank_to_av:0x2c6d60","MPIDIU_comm_rank_to_av:0x2d64b0","MPIDIU_comm_rank_to_av:0x2e5cd0","MPIDIU_comm_rank_to_av:0x2f5430","MPIDIU_comm_rank_to_av:0x304be0","MPIDIU_comm_rank_to_av:0x315800","MPIDIU_comm_rank_to_av:0x324540","MPIDIU_comm_rank_to_av:0x333170","MPIDIU_comm_rank_to_av:0x337090","MPIDIU_comm_rank_to_av:0x345c30","MPIDIU_comm_rank_to_av:0x353870","MPIDIU_comm_rank_to_av:0x363f40","MPIDIU_comm_rank_to_av:0x374560","MPIDIU_comm_rank_to_av:0x419850","MPIDIU_comm_rank_to_av:0x4554d0","MPIDIU_comm_rank_to_av:0x476b40","MPIDIU_comm_rank_to_av:0x491cb0","MPIDIU_comm_rank_to_av:0x4b2fb0","MPIDIU_comm_rank_to_av:0x4b5ac0","MPIDIU_comm_rank_to_av:0x4f5560","MPIDIU_comm_rank_to_av:0x504ba0","MPIDIU_comm_rank_to_av:0x51ba10","MPIDIU_comm_rank_to_av:0x52d730","MPIDIU_comm_rank_to_av:0x5461e0","MPIDIU_comm_rank_to_av:0x55fb00","MPIDIU_comm_rank_to_av:0x5c3ff0","MPIDIU_comm_rank_to_av:0x5c8770","MPIDIU_comm_rank_to_av:0x5e8320","MPIDIU_comm_rank_to_av:0x5f90a0","MPIDIU_comm_rank_to_av:0x609ed0","MPIDIU_comm_rank_to_av:0x60c1f0","MPIDIU_comm_rank_to_av:0x612590","MPIDIU_comm_rank_to_av:0x615df0","MPIDIU_comm_rank_to_av:0x62e020","MPIDIU_comm_rank_to_av:0x6448b0","MPIDIU_comm_rank_to_av:0x65dc20","MPIDIU_comm_rank_to_av:0x663b50","MPIDIU_comm_rank_to_av:0x66d780","MPIDIU_comm_rank_to_av:0x68b700","MPIDIU_comm_rank_to_av:0x69ca70","MPIDIU_comm_rank_to_av:0x6b97e0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x11e190","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x132410","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1404a0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x151cc0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x168880","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x17c3c0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x190f70","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x19f750","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1b53a0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1d2280","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1e94e0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x1ffea0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x21b900","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x22ee20","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x23f420","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x250a40","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x259b10","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x26d640","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x277760","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x28a960","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x293f50","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2a8140","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2b5340","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2c79b0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2d7100","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2e6920","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x2f6080","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x305830","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x3163f0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x325130","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x337c80","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x346820","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x3544c0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x364b90","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x375150","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x41a720","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4561e0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4777d0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4928a0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4b6710","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x4f6190","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5058f0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x51c670","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x52ea50","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x546e10","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x560850","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5bc490","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5c9430","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5e0640","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5e8e20","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x5f9a90","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x60c7e0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x616b40","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x62ed10","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x66e6f0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x68c590","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x69d6a0","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x6b6e70","MPIDIU_comm_rank_to_pid.constprop.0.isra.0:0x6ba880","MPIDIU_comm_rank_to_pid.isra.0","MPIDIU_free_avt","MPIDIU_get_avt_size","MPIDIU_get_n_avts","MPIDIU_get_node_id","MPIDIU_get_node_id.cold","MPIDIU_map_destroy","MPIDIU_map_lookup:0x106f10","MPIDIU_map_lookup:0x10c190","MPIDIU_map_lookup:0x111550","MPIDIU_map_lookup:0x11d800","MPIDIU_map_lookup:0x131ca0","MPIDIU_map_lookup:0x1467c0","MPIDIU_map_lookup:0x151380","MPIDIU_map_lookup:0x167f40","MPIDIU_map_lookup:0x17ba30","MPIDIU_map_lookup:0x190800","MPIDIU_map_lookup:0x1a7f90","MPIDIU_map_lookup:0x1b49d0","MPIDIU_map_lookup:0x1c83d0","MPIDIU_map_lookup:0x1d18b0","MPIDIU_map_lookup:0x1e8c70","MPIDIU_map_lookup:0x1ff630","MPIDIU_map_lookup:0x21b080","MPIDIU_map_lookup:0x22e5d0","MPIDIU_map_lookup:0x23eb70","MPIDIU_map_lookup:0x250730","MPIDIU_map_lookup:0x259290","MPIDIU_map_lookup:0x26d320","MPIDIU_map_lookup:0x276eb0","MPIDIU_map_lookup:0x28a620","MPIDIU_map_lookup:0x2936a0","MPIDIU_map_lookup:0x2a7df0","MPIDIU_map_lookup:0x2b4ac0","MPIDIU_map_lookup:0x2c7130","MPIDIU_map_lookup:0x2d6880","MPIDIU_map_lookup:0x2e60a0","MPIDIU_map_lookup:0x2f5800","MPIDIU_map_lookup:0x304fb0","MPIDIU_map_lookup:0x315bd0","MPIDIU_map_lookup:0x324820","MPIDIU_map_lookup:0x337460","MPIDIU_map_lookup:0x3460b0","MPIDIU_map_lookup:0x353c40","MPIDIU_map_lookup:0x3643c0","MPIDIU_map_lookup:0x374930","MPIDIU_map_lookup:0x419cd0","MPIDIU_map_lookup:0x455950","MPIDIU_map_lookup:0x476e20","MPIDIU_map_lookup:0x492130","MPIDIU_map_lookup:0x4b5f40","MPIDIU_map_lookup:0x4f59e0","MPIDIU_map_lookup:0x504e80","MPIDIU_map_lookup:0x51be90","MPIDIU_map_lookup:0x52dbb0","MPIDIU_map_lookup:0x546660","MPIDIU_map_lookup:0x55fde0","MPIDIU_map_lookup:0x5c8a50","MPIDIU_map_lookup:0x5dfd10","MPIDIU_map_lookup:0x5e87d0","MPIDIU_map_lookup:0x5f8e60","MPIDIU_map_lookup:0x60c4d0","MPIDIU_map_lookup:0x612a00","MPIDIU_map_lookup:0x616270","MPIDIU_map_lookup:0x62e4a0","MPIDIU_map_lookup:0x644b90","MPIDIU_map_lookup:0x64c8c0","MPIDIU_map_lookup:0x65e050","MPIDIU_map_lookup:0x6674c0","MPIDIU_map_lookup:0x66de00","MPIDIU_map_lookup:0x68bb80","MPIDIU_map_lookup:0x69cef0","MPIDIU_map_lookup:0x6b9c60","MPIDIU_map_set_unsafe","MPIDIU_map_set_unsafe.constprop.0","MPIDIU_map_update.constprop.0.isra.0:0x107370","MPIDIU_map_update.constprop.0.isra.0:0x10c5f0","MPIDIU_map_update.constprop.0.isra.0:0x1119b0","MPIDIU_map_update.constprop.0.isra.0:0x11f590","MPIDIU_map_update.constprop.0.isra.0:0x133a90","MPIDIU_map_update.constprop.0.isra.0:0x147970","MPIDIU_map_update.constprop.0.isra.0:0x1532f0","MPIDIU_map_update.constprop.0.isra.0:0x169eb0","MPIDIU_map_update.constprop.0.isra.0:0x17d7c0","MPIDIU_map_update.constprop.0.isra.0:0x1925f0","MPIDIU_map_update.constprop.0.isra.0:0x1a8f30","MPIDIU_map_update.constprop.0.isra.0:0x1b69e0","MPIDIU_map_update.constprop.0.isra.0:0x1c8b00","MPIDIU_map_update.constprop.0.isra.0:0x1d38c0","MPIDIU_map_update.constprop.0.isra.0:0x1eab40","MPIDIU_map_update.constprop.0.isra.0:0x201500","MPIDIU_map_update.constprop.0.isra.0:0x21cff0","MPIDIU_map_update.constprop.0.isra.0:0x230510","MPIDIU_map_update.constprop.0.isra.0:0x240b10","MPIDIU_map_update.constprop.0.isra.0:0x2512a0","MPIDIU_map_update.constprop.0.isra.0:0x25b200","MPIDIU_map_update.constprop.0.isra.0:0x26dea0","MPIDIU_map_update.constprop.0.isra.0:0x278e50","MPIDIU_map_update.constprop.0.isra.0:0x28b7d0","MPIDIU_map_update.constprop.0.isra.0:0x295640","MPIDIU_map_update.constprop.0.isra.0:0x2a8fb0","MPIDIU_map_update.constprop.0.isra.0:0x2b6c70","MPIDIU_map_update.constprop.0.isra.0:0x2c90a0","MPIDIU_map_update.constprop.0.isra.0:0x2d87f0","MPIDIU_map_update.constprop.0.isra.0:0x2e8010","MPIDIU_map_update.constprop.0.isra.0:0x2f7770","MPIDIU_map_update.constprop.0.isra.0:0x306f20","MPIDIU_map_update.constprop.0.isra.0:0x317a20","MPIDIU_map_update.constprop.0.isra.0:0x326760","MPIDIU_map_update.constprop.0.isra.0:0x339070","MPIDIU_map_update.constprop.0.isra.0:0x347c10","MPIDIU_map_update.constprop.0.isra.0:0x355df0","MPIDIU_map_update.constprop.0.isra.0:0x3664c0","MPIDIU_map_update.constprop.0.isra.0:0x376540","MPIDIU_map_update.constprop.0.isra.0:0x41bb40","MPIDIU_map_update.constprop.0.isra.0:0x457a10","MPIDIU_map_update.constprop.0.isra.0:0x478940","MPIDIU_map_update.constprop.0.isra.0:0x493c90","MPIDIU_map_update.constprop.0.isra.0:0x4b7b00","MPIDIU_map_update.constprop.0.isra.0:0x4f7580","MPIDIU_map_update.constprop.0.isra.0:0x506fa0","MPIDIU_map_update.constprop.0.isra.0:0x51e3e0","MPIDIU_map_update.constprop.0.isra.0:0x5300d0","MPIDIU_map_update.constprop.0.isra.0:0x548200","MPIDIU_map_update.constprop.0.isra.0:0x5620c0","MPIDIU_map_update.constprop.0.isra.0:0x5cad80","MPIDIU_map_update.constprop.0.isra.0:0x5e1650","MPIDIU_map_update.constprop.0.isra.0:0x5e9fc0","MPIDIU_map_update.constprop.0.isra.0:0x5fb910","MPIDIU_map_update.constprop.0.isra.0:0x60d520","MPIDIU_map_update.constprop.0.isra.0:0x613260","MPIDIU_map_update.constprop.0.isra.0:0x618230","MPIDIU_map_update.constprop.0.isra.0:0x630370","MPIDIU_map_update.constprop.0.isra.0:0x645390","MPIDIU_map_update.constprop.0.isra.0:0x64ec00","MPIDIU_map_update.constprop.0.isra.0:0x65e990","MPIDIU_map_update.constprop.0.isra.0:0x667d90","MPIDIU_map_update.constprop.0.isra.0:0x670410","MPIDIU_map_update.constprop.0.isra.0:0x68d9b0","MPIDIU_map_update.constprop.0.isra.0:0x69ea90","MPIDIU_map_update.constprop.0.isra.0:0x6bc1e0","MPIDIU_new_avt","MPIDIU_rank_to_lpid.cold:0x35c76","MPIDIU_rank_to_lpid.cold:0x36cef","MPIDIU_rank_to_lpid:0x146b00","MPIDIU_rank_to_lpid:0x1a8360","MPIDIU_release_lut","MPIDIU_release_mlut","MPIDIU_upids_to_gpids","MPIDIU_valid_group_rank.cold:0x35599","MPIDIU_valid_group_rank.cold:0x35936","MPIDIU_valid_group_rank.cold:0x35df8","MPIDIU_valid_group_rank.cold:0x3621a","MPIDIU_valid_group_rank.cold:0x36522","MPIDIU_valid_group_rank.cold:0x368bf","MPIDIU_valid_group_rank.cold:0x36f18","MPIDIU_valid_group_rank.cold:0x3748d","MPIDIU_valid_group_rank.cold:0x3783c","MPIDIU_valid_group_rank.cold:0x37b52","MPIDIU_valid_group_rank.cold:0x37e68","MPIDIU_valid_group_rank.cold:0x381c3","MPIDIU_valid_group_rank.cold:0x38430","MPIDIU_valid_group_rank.cold:0x386e6","MPIDIU_valid_group_rank.cold:0x3883e","MPIDIU_valid_group_rank.cold:0x38bbd","MPIDIU_valid_group_rank.cold:0x38d36","MPIDIU_valid_group_rank.cold:0x39099","MPIDIU_valid_group_rank.cold:0x391f1","MPIDIU_valid_group_rank.cold:0x3956d","MPIDIU_valid_group_rank.cold:0x396e6","MPIDIU_valid_group_rank.cold:0x3993b","MPIDIU_valid_group_rank.cold:0x39b6f","MPIDIU_valid_group_rank.cold:0x39da3","MPIDIU_valid_group_rank.cold:0x39ff8","MPIDIU_valid_group_rank.cold:0x3a22c","MPIDIU_valid_group_rank.cold:0x3a481","MPIDIU_valid_group_rank.cold:0x3a67f","MPIDIU_valid_group_rank.cold:0x3a8ce","MPIDIU_valid_group_rank.cold:0x3aaed","MPIDIU_valid_group_rank.cold:0x3aceb","MPIDIU_valid_group_rank.cold:0x3af1f","MPIDIU_valid_group_rank.cold:0x3b174","MPIDIU_valid_group_rank.cold:0x3d354","MPIDIU_valid_group_rank.cold:0x3d735","MPIDIU_valid_group_rank.cold:0x3da9f","MPIDIU_valid_group_rank.cold:0x3dcc9","MPIDIU_valid_group_rank.cold:0x3e230","MPIDIU_valid_group_rank.cold:0x3ee0f","MPIDIU_valid_group_rank.cold:0x3f09d","MPIDIU_valid_group_rank.cold:0x3f3b3","MPIDIU_valid_group_rank.cold:0x3f5b1","MPIDIU_valid_group_rank.cold:0x3f869","MPIDIU_valid_group_rank.cold:0x3fa67","MPIDIU_valid_group_rank.cold:0x400ac","MPIDIU_valid_group_rank.cold:0x4077f","MPIDIU_valid_group_rank.cold:0x40aac","MPIDIU_valid_group_rank.cold:0x40dc2","MPIDIU_valid_group_rank.cold:0x4146f","MPIDIU_valid_group_rank.cold:0x416a3","MPIDIU_valid_group_rank.cold:0x418a1","MPIDIU_valid_group_rank.cold:0x41b70","MPIDIU_valid_group_rank:0x11e2d0","MPIDIU_valid_group_rank:0x132550","MPIDIU_valid_group_rank:0x151e00","MPIDIU_valid_group_rank:0x1689c0","MPIDIU_valid_group_rank:0x17c500","MPIDIU_valid_group_rank:0x1910b0","MPIDIU_valid_group_rank:0x1b54e0","MPIDIU_valid_group_rank:0x1d23c0","MPIDIU_valid_group_rank:0x1e9620","MPIDIU_valid_group_rank:0x1fffe0","MPIDIU_valid_group_rank:0x21ba40","MPIDIU_valid_group_rank:0x22ef60","MPIDIU_valid_group_rank:0x23f560","MPIDIU_valid_group_rank:0x250b80","MPIDIU_valid_group_rank:0x259c50","MPIDIU_valid_group_rank:0x26d780","MPIDIU_valid_group_rank:0x2778a0","MPIDIU_valid_group_rank:0x28aaa0","MPIDIU_valid_group_rank:0x294090","MPIDIU_valid_group_rank:0x2a8280","MPIDIU_valid_group_rank:0x2b5480","MPIDIU_valid_group_rank:0x2c7af0","MPIDIU_valid_group_rank:0x2d7240","MPIDIU_valid_group_rank:0x2e6a60","MPIDIU_valid_group_rank:0x2f61c0","MPIDIU_valid_group_rank:0x305970","MPIDIU_valid_group_rank:0x316530","MPIDIU_valid_group_rank:0x325270","MPIDIU_valid_group_rank:0x337dc0","MPIDIU_valid_group_rank:0x346960","MPIDIU_valid_group_rank:0x354600","MPIDIU_valid_group_rank:0x364cd0","MPIDIU_valid_group_rank:0x375290","MPIDIU_valid_group_rank:0x41a860","MPIDIU_valid_group_rank:0x456320","MPIDIU_valid_group_rank:0x477910","MPIDIU_valid_group_rank:0x4929e0","MPIDIU_valid_group_rank:0x4b6850","MPIDIU_valid_group_rank:0x4f62d0","MPIDIU_valid_group_rank:0x505a30","MPIDIU_valid_group_rank:0x51c7b0","MPIDIU_valid_group_rank:0x52eb90","MPIDIU_valid_group_rank:0x546f50","MPIDIU_valid_group_rank:0x560990","MPIDIU_valid_group_rank:0x5c9570","MPIDIU_valid_group_rank:0x5f9bd0","MPIDIU_valid_group_rank:0x616c80","MPIDIU_valid_group_rank:0x62ee50","MPIDIU_valid_group_rank:0x66e830","MPIDIU_valid_group_rank:0x68c6d0","MPIDIU_valid_group_rank:0x69d7e0","MPIDIU_valid_group_rank:0x6ba9c0","MPIDI_Allgather_intra_composition_alpha","MPIDI_Allgather_intra_composition_alpha.cold","MPIDI_Allgather_intra_composition_beta.part.0","MPIDI_Allreduce_intra_composition_alpha","MPIDI_Allreduce_intra_composition_beta.part.0","MPIDI_Allreduce_intra_composition_delta","MPIDI_Allreduce_intra_composition_gamma.part.0","MPIDI_Alltoall_intra_composition_alpha","MPIDI_Alltoall_intra_composition_alpha.cold","MPIDI_Alltoall_intra_composition_beta.part.0","MPIDI_Barrier_intra_composition_beta.part.0","MPIDI_Bcast_intra_composition_alpha","MPIDI_Bcast_intra_composition_alpha.cold","MPIDI_Bcast_intra_composition_beta","MPIDI_Bcast_intra_composition_gamma.part.0","MPIDI_CRAY_COMMON_mpi_finalize_hook","MPIDI_CRAY_COMMON_mpi_init_hook","MPIDI_CRAY_Clear_Bcast_Opt","MPIDI_CRAY_Comm_create_hook","MPIDI_CRAY_Comm_destroy_hook","MPIDI_CRAY_Common_lmt_complete_recv","MPIDI_CRAY_Common_lmt_complete_recv.cold","MPIDI_CRAY_Common_lmt_ctrl_send_fin_cb","MPIDI_CRAY_Common_lmt_ctrl_send_fin_cb.cold","MPIDI_CRAY_Common_lmt_ctrl_send_rts_cb","MPIDI_CRAY_Common_lmt_export_mem","MPIDI_CRAY_Common_lmt_get_size","MPIDI_CRAY_Common_lmt_import_mem","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x35c7d","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x35e62","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x36284","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x36da2","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x36f82","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x374f7","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x3f129","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x3fb29","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x40138","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0.cold:0x41bfc","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x14a340","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x156b10","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x16d6d0","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x1af980","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x1ba210","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x1d70f0","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x50aad0","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x51d810","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x566700","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x5ce5a0","MPIDI_CRAY_Common_lmt_isend.constprop.0.isra.0:0x6bfd10","MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x378c8","MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x37bde","MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x3d7c1","MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x40b38","MPIDI_CRAY_Common_lmt_isend.isra.0.cold:0x40e4e","MPIDI_CRAY_Common_lmt_isend.isra.0:0x1ee650","MPIDI_CRAY_Common_lmt_isend.isra.0:0x205010","MPIDI_CRAY_Common_lmt_isend.isra.0:0x45b540","MPIDI_CRAY_Common_lmt_isend.isra.0:0x61bd40","MPIDI_CRAY_Common_lmt_isend.isra.0:0x633e80","MPIDI_CRAY_Common_lmt_progress","MPIDI_CRAY_Common_lmt_unpack","MPIDI_CRAY_Construct_Bcast_Tree","MPIDI_CRAY_Detect_cpuid","MPIDI_CRAY_Initialize_GPU_Coll_staging_buffers","MPIDI_CRAY_Setup_Shared_Mem_Coll","MPIDI_CRAY_XPMEM_do_attach","MPIDI_CRAY_XPMEM_mpi_finalize_hook","MPIDI_CRAY_XPMEM_mpi_init_hook","MPIDI_CRAY_alloc_mem_debug_info","MPIDI_CRAY_check_transparent_hp_status","MPIDI_CRAY_clr_numa_affinity","MPIDI_CRAY_collopt_process_env","MPIDI_CRAY_collopt_register_pvar_stats","MPIDI_CRAY_collopt_set_ANL_defaults","MPIDI_CRAY_collopt_set_defaults","MPIDI_CRAY_collopt_set_func_ptrs","MPIDI_CRAY_dump_hugetlb_dir","MPIDI_CRAY_dump_proc_buddyinfo.isra.0","MPIDI_CRAY_dump_proc_meminfo.isra.0","MPIDI_CRAY_dump_proc_slabinfo.isra.0","MPIDI_CRAY_edge_color","MPIDI_CRAY_finalize","MPIDI_CRAY_free_memory","MPIDI_CRAY_get_buddyinfo_info","MPIDI_CRAY_get_memory","MPIDI_CRAY_get_min_required_ofi_version","MPIDI_CRAY_get_mm_hugepages_info","MPIDI_CRAY_get_thread_mempolicy.constprop.0","MPIDI_CRAY_init","MPIDI_CRAY_init_memcpy","MPIDI_CRAY_local_get_freemem_info","MPIDI_CRAY_mem_dbg_finalize","MPIDI_CRAY_mpiio_init","MPIDI_CRAY_ofi_TC_str_to_mpich_val","MPIDI_CRAY_ofi_TC_str_to_ofi_val","MPIDI_CRAY_ofi_TC_val_mpich_to_ofi","MPIDI_CRAY_ofi_TC_val_ofi_to_mpich","MPIDI_CRAY_ofi_check_nic_symmetry","MPIDI_CRAY_ofi_create_connections","MPIDI_CRAY_ofi_create_global_connections","MPIDI_CRAY_ofi_create_nic_cache","MPIDI_CRAY_ofi_create_special_eps","MPIDI_CRAY_ofi_create_tclass_eps","MPIDI_CRAY_ofi_display_nic_info","MPIDI_CRAY_ofi_display_provider_envs","MPIDI_CRAY_ofi_free_nic_cache","MPIDI_CRAY_ofi_gather_cxi_counters","MPIDI_CRAY_ofi_get_cxi_version","MPIDI_CRAY_ofi_get_default_provider","MPIDI_CRAY_ofi_get_nic_index","MPIDI_CRAY_ofi_get_vni","MPIDI_CRAY_ofi_hwcoll_allreduce_join","MPIDI_CRAY_ofi_hwcoll_barrier_join","MPIDI_CRAY_ofi_hwcoll_bcast_join","MPIDI_CRAY_ofi_hwcoll_comm_add","MPIDI_CRAY_ofi_hwcoll_comm_free_all","MPIDI_CRAY_ofi_hwcoll_comm_remove","MPIDI_CRAY_ofi_hwcoll_data_promote_dn","MPIDI_CRAY_ofi_hwcoll_data_promote_up","MPIDI_CRAY_ofi_hwcoll_finalize","MPIDI_CRAY_ofi_hwcoll_hndl_comm_create","MPIDI_CRAY_ofi_hwcoll_hndl_destroy","MPIDI_CRAY_ofi_hwcoll_hndl_first_use","MPIDI_CRAY_ofi_hwcoll_init","MPIDI_CRAY_ofi_hwcoll_query","MPIDI_CRAY_ofi_hwcoll_wait","MPIDI_CRAY_ofi_init_cxi_counters","MPIDI_CRAY_ofi_nic_assign_policy","MPIDI_CRAY_ofi_nic_in_use","MPIDI_CRAY_ofi_nicaddr_to_str","MPIDI_CRAY_ofi_pmi_create_nic_cache","MPIDI_CRAY_ofi_pmi_get_local_nics","MPIDI_CRAY_ofi_scalable_startup","MPIDI_CRAY_ofi_select_nic_provider","MPIDI_CRAY_ofi_set_provider_defaults","MPIDI_CRAY_ofi_set_provider_overrides","MPIDI_CRAY_ofi_update_mr_flags","MPIDI_CRAY_ofi_win_set_tclass","MPIDI_CRAY_post_init","MPIDI_CRAY_print_pvar_stats","MPIDI_CRAY_rma_generic_register_pvar_stats","MPIDI_CRAY_set_numa_affinity","MPIDI_CRAY_set_thread_mempolicy.constprop.0","MPIDI_CRAY_transparent_hp_update_stats","MPIDI_CXI_choose_vni","MPIDI_CXI_get_pid","MPIDI_CXI_get_vni","MPIDI_CXI_normal_free","MPIDI_CXI_normal_malloc","MPIDI_Comm_create_multi_leader_subcomms","MPIDI_Comm_create_multi_leaders","MPIDI_Comm_split_type","MPIDI_Cray_coll_finalize","MPIDI_Cray_coll_init","MPIDI_Cray_shared_mem_coll_barrier","MPIDI_Cray_shared_mem_coll_barrier_gather","MPIDI_Cray_shared_mem_coll_bcast","MPIDI_Cray_shared_mem_coll_bcast.cold","MPIDI_Cray_shared_mem_coll_check","MPIDI_Cray_shared_mem_coll_cleanup","MPIDI_Cray_shared_mem_coll_opt_cleanup","MPIDI_Cray_shared_mem_coll_opt_init","MPIDI_Cray_shared_mem_coll_reduce","MPIDI_Cray_shared_mem_coll_reduce.cold","MPIDI_Cray_shared_mem_coll_setup","MPIDI_Cray_shared_mem_coll_tree_reduce","MPIDI_Cray_shared_mem_coll_tree_reduce.cold","MPIDI_GPU_KT_Progress","MPIDI_GPU_get_ipc_attr","MPIDI_GPU_init_local","MPIDI_GPU_init_world","MPIDI_GPU_ipc_get_map_dev","MPIDI_GPU_ipc_handle_cache_insert","MPIDI_GPU_ipc_handle_map","MPIDI_GPU_ipc_handle_unmap","MPIDI_GPU_mpi_finalize_hook","MPIDI_IPCI_copy_data","MPIDI_IPC_ack_target_msg_cb","MPIDI_IPC_ack_target_msg_cb.cold","MPIDI_IPC_init_local","MPIDI_IPC_init_world","MPIDI_IPC_mpi_finalize_hook","MPIDI_IPC_mpi_win_create_hook","MPIDI_IPC_mpi_win_free_hook","MPIDI_IPC_rndv_cb","MPIDI_IPC_rndv_cb.cold","MPIDI_NM_am_isend.constprop.0:0x254470","MPIDI_NM_am_isend.constprop.0:0x28e830","MPIDI_NM_am_isend:0x1251e0","MPIDI_NM_am_isend:0x139890","MPIDI_NM_am_isend:0x159200","MPIDI_NM_am_isend:0x16fdc0","MPIDI_NM_am_isend:0x183410","MPIDI_NM_am_isend:0x1983f0","MPIDI_NM_am_isend:0x1bc900","MPIDI_NM_am_isend:0x1d97e0","MPIDI_NM_am_isend:0x1f1500","MPIDI_NM_am_isend:0x207ec0","MPIDI_NM_am_isend:0x221d70","MPIDI_NM_am_isend:0x235290","MPIDI_NM_am_isend:0x245890","MPIDI_NM_am_isend:0x25ff80","MPIDI_NM_am_isend:0x2717b0","MPIDI_NM_am_isend:0x27dbd0","MPIDI_NM_am_isend:0x29a3c0","MPIDI_NM_am_isend:0x2ac6e0","MPIDI_NM_am_isend:0x2bba00","MPIDI_NM_am_isend:0x2cde20","MPIDI_NM_am_isend:0x2dd570","MPIDI_NM_am_isend:0x2ecd90","MPIDI_NM_am_isend:0x2fc4f0","MPIDI_NM_am_isend:0x30bca0","MPIDI_NM_am_isend:0x31c7b0","MPIDI_NM_am_isend:0x32b4f0","MPIDI_NM_am_isend:0x33ddf0","MPIDI_NM_am_isend:0x34cfc0","MPIDI_NM_am_isend:0x35b1b0","MPIDI_NM_am_isend:0x36b880","MPIDI_NM_am_isend:0x37b2c0","MPIDI_NM_am_isend:0x420ef0","MPIDI_NM_am_isend:0x45ee40","MPIDI_NM_am_isend:0x47bca0","MPIDI_NM_am_isend:0x499040","MPIDI_NM_am_isend:0x4bceb0","MPIDI_NM_am_isend:0x4fc930","MPIDI_NM_am_isend:0x50d1c0","MPIDI_NM_am_isend:0x523710","MPIDI_NM_am_isend:0x5358b0","MPIDI_NM_am_isend:0x54d5b0","MPIDI_NM_am_isend:0x568df0","MPIDI_NM_am_isend:0x5d0c90","MPIDI_NM_am_isend:0x5ef980","MPIDI_NM_am_isend:0x601d70","MPIDI_NM_am_isend:0x61ebf0","MPIDI_NM_am_isend:0x636d30","MPIDI_NM_am_isend:0x676d60","MPIDI_NM_am_isend:0x692d60","MPIDI_NM_am_isend:0x6a3f90","MPIDI_NM_am_isend:0x6c2400","MPIDI_NM_am_send_hdr.part.0:0x146ad0","MPIDI_NM_am_send_hdr.part.0:0x151790","MPIDI_NM_am_send_hdr.part.0:0x168350","MPIDI_NM_am_send_hdr.part.0:0x1a82a0","MPIDI_NM_am_send_hdr.part.0:0x1b4de0","MPIDI_NM_am_send_hdr.part.0:0x1d1cc0","MPIDI_NM_am_send_hdr.part.0:0x1e8f10","MPIDI_NM_am_send_hdr.part.0:0x1ff930","MPIDI_NM_am_send_hdr.part.0:0x455b90","MPIDI_NM_am_send_hdr.part.0:0x5052f0","MPIDI_NM_am_send_hdr.part.0:0x51c100","MPIDI_NM_am_send_hdr.part.0:0x5601f0","MPIDI_NM_am_send_hdr.part.0:0x5c8e60","MPIDI_NM_am_send_hdr.part.0:0x616570","MPIDI_NM_am_send_hdr.part.0:0x62e740","MPIDI_NM_am_send_hdr.part.0:0x66e120","MPIDI_NM_am_send_hdr.part.0:0x6ba2f0","MPIDI_NM_am_send_hdr_reply.part.0:0x1e8ee0","MPIDI_NM_am_send_hdr_reply.part.0:0x1ff8a0","MPIDI_NM_am_send_hdr_reply.part.0:0x5e0300","MPIDI_NM_am_send_hdr_reply.part.0:0x5e8df0","MPIDI_NM_am_send_hdr_reply.part.0:0x616540","MPIDI_NM_am_send_hdr_reply.part.0:0x62e710","MPIDI_NM_mpi_allgather.part.0","MPIDI_NM_mpi_allreduce.part.0","MPIDI_NM_mpi_alltoall.part.0","MPIDI_NM_mpi_barrier.part.0","MPIDI_NM_mpi_bcast.part.0","MPIDI_NM_mpi_cancel_recv","MPIDI_NM_mpi_cancel_recv.constprop.0","MPIDI_NM_mpi_compare_and_swap","MPIDI_NM_mpi_compare_and_swap.cold","MPIDI_NM_mpi_fetch_and_op","MPIDI_NM_mpi_fetch_and_op.cold","MPIDI_NM_mpi_host_alloc_tcntr_buffer.constprop.0.isra.0","MPIDI_NM_mpi_iprobe.constprop.0:0x139670","MPIDI_NM_mpi_iprobe.constprop.0:0x1981d0","MPIDI_NM_mpi_iprobe.constprop.0:0x45ec20","MPIDI_NM_mpi_iprobe.constprop.0:0x48b1e0","MPIDI_NM_mpi_irecv.constprop.0.cold:0x35ba7","MPIDI_NM_mpi_irecv.constprop.0.cold:0x36b30","MPIDI_NM_mpi_irecv.constprop.0.cold:0x37a00","MPIDI_NM_mpi_irecv.constprop.0.cold:0x37d16","MPIDI_NM_mpi_irecv.constprop.0.cold:0x3d8f9","MPIDI_NM_mpi_irecv.constprop.0.cold:0x3f261","MPIDI_NM_mpi_irecv.constprop.0.cold:0x3fc61","MPIDI_NM_mpi_irecv.constprop.0.cold:0x40270","MPIDI_NM_mpi_irecv.constprop.0.cold:0x40c70","MPIDI_NM_mpi_irecv.constprop.0.cold:0x40f86","MPIDI_NM_mpi_irecv.constprop.0.cold:0x41d5b","MPIDI_NM_mpi_irecv.constprop.0:0x1434f0","MPIDI_NM_mpi_irecv.constprop.0:0x1a27c0","MPIDI_NM_mpi_irecv.constprop.0:0x1f5450","MPIDI_NM_mpi_irecv.constprop.0:0x20be10","MPIDI_NM_mpi_irecv.constprop.0:0x462d70","MPIDI_NM_mpi_irecv.constprop.0:0x487230","MPIDI_NM_mpi_irecv.constprop.0:0x511780","MPIDI_NM_mpi_irecv.constprop.0:0x56d3b0","MPIDI_NM_mpi_irecv.constprop.0:0x5d5250","MPIDI_NM_mpi_irecv.constprop.0:0x622b40","MPIDI_NM_mpi_irecv.constprop.0:0x63ac80","MPIDI_NM_mpi_irecv.constprop.0:0x6c70b0","MPIDI_NM_mpi_reduce.part.0:0x41a0c0","MPIDI_NM_mpi_reduce.part.0:0x4b6180","MPIDI_NM_mpi_scan.part.0","MPIDI_NM_mpi_unsafe_free_tindex.part.0:0x2161c0","MPIDI_NM_mpi_unsafe_free_tindex.part.0:0x52e200","MPIDI_NM_mpi_wait_tcomplete","MPIDI_NM_progress.part.0:0x124310","MPIDI_NM_progress.part.0:0x138810","MPIDI_NM_progress.part.0:0x159540","MPIDI_NM_progress.part.0:0x170100","MPIDI_NM_progress.part.0:0x182540","MPIDI_NM_progress.part.0:0x197370","MPIDI_NM_progress.part.0:0x1bcc40","MPIDI_NM_progress.part.0:0x1d9b20","MPIDI_NM_progress.part.0:0x1f0e50","MPIDI_NM_progress.part.0:0x207810","MPIDI_NM_progress.part.0:0x2220b0","MPIDI_NM_progress.part.0:0x235ce0","MPIDI_NM_progress.part.0:0x245bd0","MPIDI_NM_progress.part.0:0x2602c0","MPIDI_NM_progress.part.0:0x27df10","MPIDI_NM_progress.part.0:0x29a700","MPIDI_NM_progress.part.0:0x2bbd40","MPIDI_NM_progress.part.0:0x2ce160","MPIDI_NM_progress.part.0:0x2dd8b0","MPIDI_NM_progress.part.0:0x2ed0d0","MPIDI_NM_progress.part.0:0x2fc830","MPIDI_NM_progress.part.0:0x30bfe0","MPIDI_NM_progress.part.0:0x31caf0","MPIDI_NM_progress.part.0:0x32b830","MPIDI_NM_progress.part.0:0x33e130","MPIDI_NM_progress.part.0:0x34c990","MPIDI_NM_progress.part.0:0x35ab80","MPIDI_NM_progress.part.0:0x36b250","MPIDI_NM_progress.part.0:0x37b600","MPIDI_NM_progress.part.0:0x4208c0","MPIDI_NM_progress.part.0:0x45dd40","MPIDI_NM_progress.part.0:0x488d60","MPIDI_NM_progress.part.0:0x498a10","MPIDI_NM_progress.part.0:0x4bc880","MPIDI_NM_progress.part.0:0x4fc300","MPIDI_NM_progress.part.0:0x50d500","MPIDI_NM_progress.part.0:0x5241b0","MPIDI_NM_progress.part.0:0x535270","MPIDI_NM_progress.part.0:0x54cf80","MPIDI_NM_progress.part.0:0x569130","MPIDI_NM_progress.part.0:0x5d0fd0","MPIDI_NM_progress.part.0:0x601740","MPIDI_NM_progress.part.0:0x61e540","MPIDI_NM_progress.part.0:0x636680","MPIDI_NM_progress.part.0:0x650290","MPIDI_NM_progress.part.0:0x669210","MPIDI_NM_progress.part.0:0x6770a0","MPIDI_NM_progress.part.0:0x692730","MPIDI_NM_progress.part.0:0x6aa940","MPIDI_NM_progress.part.0:0x6c2740","MPIDI_NM_rma_target_cmpl_hook.part.0:0x2d6bd0","MPIDI_NM_rma_target_cmpl_hook.part.0:0x353f60","MPIDI_NM_rma_target_cmpl_hook.part.0:0x66e180","MPIDI_NM_rma_target_local_cmpl_hook.part.0","MPIDI_NM_rma_win_cmpl_hook.part.0:0x2b4e10","MPIDI_NM_rma_win_cmpl_hook.part.0:0x2c7480","MPIDI_NM_rma_win_cmpl_hook.part.0:0x2e63f0","MPIDI_NM_rma_win_cmpl_hook.part.0:0x364630","MPIDI_NM_rma_win_local_cmpl_hook.part.0","MPIDI_OFI_CRAY_flush_nic:0x21c040","MPIDI_OFI_CRAY_flush_nic:0x22f560","MPIDI_OFI_CRAY_flush_nic:0x23fb60","MPIDI_OFI_CRAY_flush_nic:0x25a250","MPIDI_OFI_CRAY_flush_nic:0x277ea0","MPIDI_OFI_CRAY_flush_nic:0x294690","MPIDI_OFI_CRAY_flush_nic:0x2b5ab0","MPIDI_OFI_CRAY_flush_nic:0x2c80f0","MPIDI_OFI_CRAY_flush_nic:0x2d7840","MPIDI_OFI_CRAY_flush_nic:0x2e7060","MPIDI_OFI_CRAY_flush_nic:0x2f67c0","MPIDI_OFI_CRAY_flush_nic:0x305f70","MPIDI_OFI_CRAY_flush_nic:0x354c30","MPIDI_OFI_CRAY_flush_nic:0x365300","MPIDI_OFI_CRAY_flush_nic:0x66ee60","MPIDI_OFI_CRAY_start_flushq.part.0:0x21b3d0","MPIDI_OFI_CRAY_start_flushq.part.0:0x22e8f0","MPIDI_OFI_CRAY_start_flushq.part.0:0x23eef0","MPIDI_OFI_CRAY_start_flushq.part.0:0x2595e0","MPIDI_OFI_CRAY_start_flushq.part.0:0x277230","MPIDI_OFI_CRAY_start_flushq.part.0:0x293a20","MPIDI_OFI_CRAY_start_flushq.part.0:0x2b4de0","MPIDI_OFI_CRAY_start_flushq.part.0:0x2c7450","MPIDI_OFI_CRAY_start_flushq.part.0:0x2d6ba0","MPIDI_OFI_CRAY_start_flushq.part.0:0x2e63c0","MPIDI_OFI_CRAY_start_flushq.part.0:0x2f5b20","MPIDI_OFI_CRAY_start_flushq.part.0:0x3052d0","MPIDI_OFI_CRAY_start_flushq.part.0:0x353f30","MPIDI_OFI_CRAY_start_flushq.part.0:0x364600","MPIDI_OFI_CRAY_start_flushq.part.0:0x66e150","MPIDI_OFI_addr_exchange_all_ctx","MPIDI_OFI_addr_exchange_root_ctx","MPIDI_OFI_am_init_sreq:0x106d80","MPIDI_OFI_am_init_sreq:0x10c000","MPIDI_OFI_am_init_sreq:0x1113c0","MPIDI_OFI_am_init_sreq:0x11d660","MPIDI_OFI_am_init_sreq:0x131b00","MPIDI_OFI_am_init_sreq:0x146910","MPIDI_OFI_am_init_sreq:0x1515c0","MPIDI_OFI_am_init_sreq:0x168180","MPIDI_OFI_am_init_sreq:0x17b890","MPIDI_OFI_am_init_sreq:0x190660","MPIDI_OFI_am_init_sreq:0x1a80e0","MPIDI_OFI_am_init_sreq:0x1b4c10","MPIDI_OFI_am_init_sreq:0x1d1af0","MPIDI_OFI_am_init_sreq:0x1e8ad0","MPIDI_OFI_am_init_sreq:0x1ff490","MPIDI_OFI_am_init_sreq:0x21b1d0","MPIDI_OFI_am_init_sreq:0x22e720","MPIDI_OFI_am_init_sreq:0x23ecc0","MPIDI_OFI_am_init_sreq:0x250880","MPIDI_OFI_am_init_sreq:0x2593e0","MPIDI_OFI_am_init_sreq:0x26d470","MPIDI_OFI_am_init_sreq:0x277000","MPIDI_OFI_am_init_sreq:0x28a770","MPIDI_OFI_am_init_sreq:0x2937f0","MPIDI_OFI_am_init_sreq:0x2a7f40","MPIDI_OFI_am_init_sreq:0x2b4c10","MPIDI_OFI_am_init_sreq:0x2c7280","MPIDI_OFI_am_init_sreq:0x2d69d0","MPIDI_OFI_am_init_sreq:0x2e61f0","MPIDI_OFI_am_init_sreq:0x2f5950","MPIDI_OFI_am_init_sreq:0x305100","MPIDI_OFI_am_init_sreq:0x315d20","MPIDI_OFI_am_init_sreq:0x324a60","MPIDI_OFI_am_init_sreq:0x3375b0","MPIDI_OFI_am_init_sreq:0x345f10","MPIDI_OFI_am_init_sreq:0x353d90","MPIDI_OFI_am_init_sreq:0x364220","MPIDI_OFI_am_init_sreq:0x374a80","MPIDI_OFI_am_init_sreq:0x419b30","MPIDI_OFI_am_init_sreq:0x4557b0","MPIDI_OFI_am_init_sreq:0x477060","MPIDI_OFI_am_init_sreq:0x491f90","MPIDI_OFI_am_init_sreq:0x4b5da0","MPIDI_OFI_am_init_sreq:0x4f5840","MPIDI_OFI_am_init_sreq:0x5050c0","MPIDI_OFI_am_init_sreq:0x51bcf0","MPIDI_OFI_am_init_sreq:0x52da10","MPIDI_OFI_am_init_sreq:0x5464c0","MPIDI_OFI_am_init_sreq:0x560020","MPIDI_OFI_am_init_sreq:0x5c8c90","MPIDI_OFI_am_init_sreq:0x5e0140","MPIDI_OFI_am_init_sreq:0x5e8c00","MPIDI_OFI_am_init_sreq:0x5f9380","MPIDI_OFI_am_init_sreq:0x60c620","MPIDI_OFI_am_init_sreq:0x612870","MPIDI_OFI_am_init_sreq:0x6160d0","MPIDI_OFI_am_init_sreq:0x62e300","MPIDI_OFI_am_init_sreq:0x66df50","MPIDI_OFI_am_init_sreq:0x68b9e0","MPIDI_OFI_am_init_sreq:0x69cd50","MPIDI_OFI_am_init_sreq:0x6b9ac0","MPIDI_OFI_am_rdma_read_ack_handler","MPIDI_OFI_am_rdma_read_recv_cb","MPIDI_OFI_am_repost_buffer","MPIDI_OFI_comm_set_hints","MPIDI_OFI_comm_to_phys.constprop.0.cold:0x403bb","MPIDI_OFI_comm_to_phys.constprop.0.cold:0x4113b","MPIDI_OFI_comm_to_phys.constprop.0.cold:0x413f7","MPIDI_OFI_comm_to_phys.constprop.0:0x5e0360","MPIDI_OFI_comm_to_phys.constprop.0:0x64e140","MPIDI_OFI_comm_to_phys.constprop.0:0x667610","MPIDI_OFI_complete_chunks","MPIDI_OFI_control_handler","MPIDI_OFI_create_dt_map","MPIDI_OFI_create_tput","MPIDI_OFI_create_tsend","MPIDI_OFI_dispatch_function","MPIDI_OFI_dispatch_function.cold","MPIDI_OFI_do_accumulate","MPIDI_OFI_do_accumulate.cold","MPIDI_OFI_do_accumulate.constprop.0","MPIDI_OFI_do_accumulate.constprop.0.cold","MPIDI_OFI_do_am_isend_eager.constprop.0:0x107aa0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x10cd20","MPIDI_OFI_do_am_isend_eager.constprop.0:0x1120e0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x148560","MPIDI_OFI_do_am_isend_eager.constprop.0:0x1a9dc0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x2518c0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x26e4c0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x28bdf0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x2a95d0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x5e2520","MPIDI_OFI_do_am_isend_eager.constprop.0:0x5ec5e0","MPIDI_OFI_do_am_isend_eager.constprop.0:0x60db40","MPIDI_OFI_do_am_isend_eager.constprop.0:0x6146c0","MPIDI_OFI_do_am_isend_eager:0x11fd30","MPIDI_OFI_do_am_isend_eager:0x134230","MPIDI_OFI_do_am_isend_eager:0x154020","MPIDI_OFI_do_am_isend_eager:0x16abe0","MPIDI_OFI_do_am_isend_eager:0x17df60","MPIDI_OFI_do_am_isend_eager:0x192d90","MPIDI_OFI_do_am_isend_eager:0x1b7710","MPIDI_OFI_do_am_isend_eager:0x1d45f0","MPIDI_OFI_do_am_isend_eager:0x1ebb60","MPIDI_OFI_do_am_isend_eager:0x202520","MPIDI_OFI_do_am_isend_eager:0x21d790","MPIDI_OFI_do_am_isend_eager:0x230cb0","MPIDI_OFI_do_am_isend_eager:0x2412b0","MPIDI_OFI_do_am_isend_eager:0x25b9a0","MPIDI_OFI_do_am_isend_eager:0x2795f0","MPIDI_OFI_do_am_isend_eager:0x295de0","MPIDI_OFI_do_am_isend_eager:0x2b7410","MPIDI_OFI_do_am_isend_eager:0x2c9840","MPIDI_OFI_do_am_isend_eager:0x2d8f90","MPIDI_OFI_do_am_isend_eager:0x2e87b0","MPIDI_OFI_do_am_isend_eager:0x2f7f10","MPIDI_OFI_do_am_isend_eager:0x3076c0","MPIDI_OFI_do_am_isend_eager:0x3181c0","MPIDI_OFI_do_am_isend_eager:0x326f00","MPIDI_OFI_do_am_isend_eager:0x339810","MPIDI_OFI_do_am_isend_eager:0x3483b0","MPIDI_OFI_do_am_isend_eager:0x356590","MPIDI_OFI_do_am_isend_eager:0x366c60","MPIDI_OFI_do_am_isend_eager:0x376ce0","MPIDI_OFI_do_am_isend_eager:0x41c2e0","MPIDI_OFI_do_am_isend_eager:0x458a40","MPIDI_OFI_do_am_isend_eager:0x478f60","MPIDI_OFI_do_am_isend_eager:0x494430","MPIDI_OFI_do_am_isend_eager:0x4b82a0","MPIDI_OFI_do_am_isend_eager:0x4f7d20","MPIDI_OFI_do_am_isend_eager:0x507fd0","MPIDI_OFI_do_am_isend_eager:0x51f110","MPIDI_OFI_do_am_isend_eager:0x5309a0","MPIDI_OFI_do_am_isend_eager:0x5489a0","MPIDI_OFI_do_am_isend_eager:0x563c00","MPIDI_OFI_do_am_isend_eager:0x5cbab0","MPIDI_OFI_do_am_isend_eager:0x5fd160","MPIDI_OFI_do_am_isend_eager:0x619250","MPIDI_OFI_do_am_isend_eager:0x631390","MPIDI_OFI_do_am_isend_eager:0x6715a0","MPIDI_OFI_do_am_isend_eager:0x68e150","MPIDI_OFI_do_am_isend_eager:0x69fc10","MPIDI_OFI_do_am_isend_eager:0x6bd210","MPIDI_OFI_do_am_isend_pipeline.cold:0x35645","MPIDI_OFI_do_am_isend_pipeline.cold:0x359e2","MPIDI_OFI_do_am_isend_pipeline.cold:0x35ee6","MPIDI_OFI_do_am_isend_pipeline.cold:0x36308","MPIDI_OFI_do_am_isend_pipeline.cold:0x365ce","MPIDI_OFI_do_am_isend_pipeline.cold:0x3696b","MPIDI_OFI_do_am_isend_pipeline.cold:0x37006","MPIDI_OFI_do_am_isend_pipeline.cold:0x3757b","MPIDI_OFI_do_am_isend_pipeline.cold:0x3794c","MPIDI_OFI_do_am_isend_pipeline.cold:0x37c62","MPIDI_OFI_do_am_isend_pipeline.cold:0x37f14","MPIDI_OFI_do_am_isend_pipeline.cold:0x3826f","MPIDI_OFI_do_am_isend_pipeline.cold:0x384dc","MPIDI_OFI_do_am_isend_pipeline.cold:0x388ea","MPIDI_OFI_do_am_isend_pipeline.cold:0x38de2","MPIDI_OFI_do_am_isend_pipeline.cold:0x3929d","MPIDI_OFI_do_am_isend_pipeline.cold:0x39792","MPIDI_OFI_do_am_isend_pipeline.cold:0x399e7","MPIDI_OFI_do_am_isend_pipeline.cold:0x39c1b","MPIDI_OFI_do_am_isend_pipeline.cold:0x39e4f","MPIDI_OFI_do_am_isend_pipeline.cold:0x3a0a4","MPIDI_OFI_do_am_isend_pipeline.cold:0x3a2d8","MPIDI_OFI_do_am_isend_pipeline.cold:0x3a52d","MPIDI_OFI_do_am_isend_pipeline.cold:0x3a72b","MPIDI_OFI_do_am_isend_pipeline.cold:0x3a97a","MPIDI_OFI_do_am_isend_pipeline.cold:0x3ab99","MPIDI_OFI_do_am_isend_pipeline.cold:0x3ad97","MPIDI_OFI_do_am_isend_pipeline.cold:0x3afcb","MPIDI_OFI_do_am_isend_pipeline.cold:0x3b220","MPIDI_OFI_do_am_isend_pipeline.cold:0x3d400","MPIDI_OFI_do_am_isend_pipeline.cold:0x3d845","MPIDI_OFI_do_am_isend_pipeline.cold:0x3daa6","MPIDI_OFI_do_am_isend_pipeline.cold:0x3dd75","MPIDI_OFI_do_am_isend_pipeline.cold:0x3e2dc","MPIDI_OFI_do_am_isend_pipeline.cold:0x3eebb","MPIDI_OFI_do_am_isend_pipeline.cold:0x3f1ad","MPIDI_OFI_do_am_isend_pipeline.cold:0x3f45f","MPIDI_OFI_do_am_isend_pipeline.cold:0x3f67e","MPIDI_OFI_do_am_isend_pipeline.cold:0x3f915","MPIDI_OFI_do_am_isend_pipeline.cold:0x3fbad","MPIDI_OFI_do_am_isend_pipeline.cold:0x401bc","MPIDI_OFI_do_am_isend_pipeline.cold:0x4082b","MPIDI_OFI_do_am_isend_pipeline.cold:0x40bbc","MPIDI_OFI_do_am_isend_pipeline.cold:0x40ed2","MPIDI_OFI_do_am_isend_pipeline.cold:0x4151b","MPIDI_OFI_do_am_isend_pipeline.cold:0x4174f","MPIDI_OFI_do_am_isend_pipeline.cold:0x4194e","MPIDI_OFI_do_am_isend_pipeline.cold:0x41c80","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x35cbf","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x36cf6","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x3872f","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x38c06","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x390e2","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x395b6","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x403e4","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x405ec","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x40a12","MPIDI_OFI_do_am_isend_pipeline.constprop.0.cold:0x40a84","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x108390","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x10d610","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x1129d0","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x14aee0","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x1abba0","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x2539e0","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x270c40","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x28dda0","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x2abb70","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x5e2e40","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x5ed9d0","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x60e430","MPIDI_OFI_do_am_isend_pipeline.constprop.0:0x614d60","MPIDI_OFI_do_am_isend_pipeline:0x1235d0","MPIDI_OFI_do_am_isend_pipeline:0x137ad0","MPIDI_OFI_do_am_isend_pipeline:0x1584c0","MPIDI_OFI_do_am_isend_pipeline:0x16f080","MPIDI_OFI_do_am_isend_pipeline:0x181800","MPIDI_OFI_do_am_isend_pipeline:0x196630","MPIDI_OFI_do_am_isend_pipeline:0x1bbbc0","MPIDI_OFI_do_am_isend_pipeline:0x1d8aa0","MPIDI_OFI_do_am_isend_pipeline:0x1f0110","MPIDI_OFI_do_am_isend_pipeline:0x206ad0","MPIDI_OFI_do_am_isend_pipeline:0x221030","MPIDI_OFI_do_am_isend_pipeline:0x234550","MPIDI_OFI_do_am_isend_pipeline:0x244b50","MPIDI_OFI_do_am_isend_pipeline:0x25f240","MPIDI_OFI_do_am_isend_pipeline:0x27ce90","MPIDI_OFI_do_am_isend_pipeline:0x299680","MPIDI_OFI_do_am_isend_pipeline:0x2bacc0","MPIDI_OFI_do_am_isend_pipeline:0x2cd0e0","MPIDI_OFI_do_am_isend_pipeline:0x2dc830","MPIDI_OFI_do_am_isend_pipeline:0x2ec050","MPIDI_OFI_do_am_isend_pipeline:0x2fb7b0","MPIDI_OFI_do_am_isend_pipeline:0x30af60","MPIDI_OFI_do_am_isend_pipeline:0x31ba70","MPIDI_OFI_do_am_isend_pipeline:0x32a7b0","MPIDI_OFI_do_am_isend_pipeline:0x33d0b0","MPIDI_OFI_do_am_isend_pipeline:0x34bc50","MPIDI_OFI_do_am_isend_pipeline:0x359e40","MPIDI_OFI_do_am_isend_pipeline:0x36a510","MPIDI_OFI_do_am_isend_pipeline:0x37a580","MPIDI_OFI_do_am_isend_pipeline:0x41fb80","MPIDI_OFI_do_am_isend_pipeline:0x45d000","MPIDI_OFI_do_am_isend_pipeline:0x47af60","MPIDI_OFI_do_am_isend_pipeline:0x497cd0","MPIDI_OFI_do_am_isend_pipeline:0x4bbb40","MPIDI_OFI_do_am_isend_pipeline:0x4fb5c0","MPIDI_OFI_do_am_isend_pipeline:0x50c480","MPIDI_OFI_do_am_isend_pipeline:0x5229d0","MPIDI_OFI_do_am_isend_pipeline:0x534530","MPIDI_OFI_do_am_isend_pipeline:0x54c240","MPIDI_OFI_do_am_isend_pipeline:0x5680b0","MPIDI_OFI_do_am_isend_pipeline:0x5cff50","MPIDI_OFI_do_am_isend_pipeline:0x600a00","MPIDI_OFI_do_am_isend_pipeline:0x61d800","MPIDI_OFI_do_am_isend_pipeline:0x635940","MPIDI_OFI_do_am_isend_pipeline:0x676020","MPIDI_OFI_do_am_isend_pipeline:0x6919f0","MPIDI_OFI_do_am_isend_pipeline:0x6a1810","MPIDI_OFI_do_am_isend_pipeline:0x6c16c0","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x108da0","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x10e020","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x1133e0","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x148e90","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x1aa6f0","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x2520f0","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x26ee00","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x28c620","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x2a9f10","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x5e39a0","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x5ee540","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x60ef40","MPIDI_OFI_do_am_isend_rdma_read.constprop.0:0x613880","MPIDI_OFI_do_am_isend_rdma_read:0x1207f0","MPIDI_OFI_do_am_isend_rdma_read:0x134cf0","MPIDI_OFI_do_am_isend_rdma_read:0x154ae0","MPIDI_OFI_do_am_isend_rdma_read:0x16b6a0","MPIDI_OFI_do_am_isend_rdma_read:0x17ea20","MPIDI_OFI_do_am_isend_rdma_read:0x193850","MPIDI_OFI_do_am_isend_rdma_read:0x1b81d0","MPIDI_OFI_do_am_isend_rdma_read:0x1d50b0","MPIDI_OFI_do_am_isend_rdma_read:0x1ec620","MPIDI_OFI_do_am_isend_rdma_read:0x202fe0","MPIDI_OFI_do_am_isend_rdma_read:0x21e250","MPIDI_OFI_do_am_isend_rdma_read:0x231770","MPIDI_OFI_do_am_isend_rdma_read:0x241d70","MPIDI_OFI_do_am_isend_rdma_read:0x25c460","MPIDI_OFI_do_am_isend_rdma_read:0x27a0b0","MPIDI_OFI_do_am_isend_rdma_read:0x2968a0","MPIDI_OFI_do_am_isend_rdma_read:0x2b7ed0","MPIDI_OFI_do_am_isend_rdma_read:0x2ca300","MPIDI_OFI_do_am_isend_rdma_read:0x2d9a50","MPIDI_OFI_do_am_isend_rdma_read:0x2e9270","MPIDI_OFI_do_am_isend_rdma_read:0x2f89d0","MPIDI_OFI_do_am_isend_rdma_read:0x308180","MPIDI_OFI_do_am_isend_rdma_read:0x318c80","MPIDI_OFI_do_am_isend_rdma_read:0x3279c0","MPIDI_OFI_do_am_isend_rdma_read:0x33a2d0","MPIDI_OFI_do_am_isend_rdma_read:0x348e70","MPIDI_OFI_do_am_isend_rdma_read:0x357050","MPIDI_OFI_do_am_isend_rdma_read:0x367720","MPIDI_OFI_do_am_isend_rdma_read:0x3777a0","MPIDI_OFI_do_am_isend_rdma_read:0x41cda0","MPIDI_OFI_do_am_isend_rdma_read:0x459500","MPIDI_OFI_do_am_isend_rdma_read:0x479a20","MPIDI_OFI_do_am_isend_rdma_read:0x494ef0","MPIDI_OFI_do_am_isend_rdma_read:0x4b8d60","MPIDI_OFI_do_am_isend_rdma_read:0x4f87e0","MPIDI_OFI_do_am_isend_rdma_read:0x508a90","MPIDI_OFI_do_am_isend_rdma_read:0x51fbd0","MPIDI_OFI_do_am_isend_rdma_read:0x531460","MPIDI_OFI_do_am_isend_rdma_read:0x549460","MPIDI_OFI_do_am_isend_rdma_read:0x5646c0","MPIDI_OFI_do_am_isend_rdma_read:0x5cc570","MPIDI_OFI_do_am_isend_rdma_read:0x5fdc20","MPIDI_OFI_do_am_isend_rdma_read:0x619d10","MPIDI_OFI_do_am_isend_rdma_read:0x631e50","MPIDI_OFI_do_am_isend_rdma_read:0x672060","MPIDI_OFI_do_am_isend_rdma_read:0x68ec10","MPIDI_OFI_do_am_isend_rdma_read:0x6a2a50","MPIDI_OFI_do_am_isend_rdma_read:0x6bdcd0","MPIDI_OFI_do_get_accumulate","MPIDI_OFI_do_get_accumulate.cold","MPIDI_OFI_do_get_accumulate.constprop.0","MPIDI_OFI_do_get_accumulate.constprop.0.cold","MPIDI_OFI_do_inject:0x147f90","MPIDI_OFI_do_inject:0x153910","MPIDI_OFI_do_inject:0x16a4d0","MPIDI_OFI_do_inject:0x1a9550","MPIDI_OFI_do_inject:0x1b7000","MPIDI_OFI_do_inject:0x1d3ee0","MPIDI_OFI_do_inject:0x1eb160","MPIDI_OFI_do_inject:0x201b20","MPIDI_OFI_do_inject:0x458030","MPIDI_OFI_do_inject:0x5075c0","MPIDI_OFI_do_inject:0x51ea00","MPIDI_OFI_do_inject:0x5626e0","MPIDI_OFI_do_inject:0x5cb3a0","MPIDI_OFI_do_inject:0x5e1c70","MPIDI_OFI_do_inject:0x5ea5e0","MPIDI_OFI_do_inject:0x618850","MPIDI_OFI_do_inject:0x630990","MPIDI_OFI_do_inject:0x670a30","MPIDI_OFI_do_inject:0x6bc800","MPIDI_OFI_do_iprobe.constprop.0:0x124940","MPIDI_OFI_do_iprobe.constprop.0:0x138e40","MPIDI_OFI_do_iprobe.constprop.0:0x182b70","MPIDI_OFI_do_iprobe.constprop.0:0x1979a0","MPIDI_OFI_do_iprobe.constprop.0:0x45e3f0","MPIDI_OFI_do_iprobe.constprop.0:0x48aa00","MPIDI_OFI_do_rdma_read.cold","MPIDI_OFI_do_rdma_read:0x660ae0","MPIDI_OFI_do_rdma_read:0x66b460","MPIDI_OFI_dynamic_recv","MPIDI_OFI_dynamic_send","MPIDI_OFI_find_provider","MPIDI_OFI_find_provider_cleanup","MPIDI_OFI_get_local_upids","MPIDI_OFI_get_local_upids.cold","MPIDI_OFI_get_required_version","MPIDI_OFI_handle_cq_error","MPIDI_OFI_handle_cq_error.cold","MPIDI_OFI_handle_eq_error","MPIDI_OFI_huge_chunk_done_event","MPIDI_OFI_index_datatypes","MPIDI_OFI_init_hints","MPIDI_OFI_init_local","MPIDI_OFI_init_multi_nic","MPIDI_OFI_init_settings","MPIDI_OFI_init_world","MPIDI_OFI_issue_deferred_rma","MPIDI_OFI_match_provider","MPIDI_OFI_mpi_alloc_mem","MPIDI_OFI_mpi_comm_commit_post_hook","MPIDI_OFI_mpi_comm_commit_pre_hook","MPIDI_OFI_mpi_comm_free_hook","MPIDI_OFI_mpi_finalize_hook","MPIDI_OFI_mpi_free_mem","MPIDI_OFI_mpi_op_commit_hook","MPIDI_OFI_mpi_op_free_hook","MPIDI_OFI_mpi_precv_init","MPIDI_OFI_mpi_psend_init","MPIDI_OFI_mpi_type_commit_hook","MPIDI_OFI_mpi_type_free_hook","MPIDI_OFI_mpi_win_allocate","MPIDI_OFI_mpi_win_allocate_hook","MPIDI_OFI_mpi_win_allocate_shared","MPIDI_OFI_mpi_win_allocate_shared_hook","MPIDI_OFI_mpi_win_attach","MPIDI_OFI_mpi_win_attach_hook","MPIDI_OFI_mpi_win_create","MPIDI_OFI_mpi_win_create_dynamic","MPIDI_OFI_mpi_win_create_dynamic_hook","MPIDI_OFI_mpi_win_create_hook","MPIDI_OFI_mpi_win_detach","MPIDI_OFI_mpi_win_detach_hook","MPIDI_OFI_mpi_win_free","MPIDI_OFI_mpi_win_free_hook","MPIDI_OFI_mpi_win_free_hook.cold","MPIDI_OFI_mpi_win_get_info","MPIDI_OFI_mpi_win_set_info","MPIDI_OFI_mr_key_alloc","MPIDI_OFI_mr_key_allocator_destroy","MPIDI_OFI_mr_key_allocator_init","MPIDI_OFI_mr_key_free","MPIDI_OFI_nic_already_used","MPIDI_OFI_nic_is_up","MPIDI_OFI_nopack_putget","MPIDI_OFI_pack_get","MPIDI_OFI_pack_get.cold","MPIDI_OFI_pack_put","MPIDI_OFI_pack_put.cold","MPIDI_OFI_peek_huge_event","MPIDI_OFI_post_init","MPIDI_OFI_progress_do_queue.constprop.0:0x107060","MPIDI_OFI_progress_do_queue.constprop.0:0x10c2e0","MPIDI_OFI_progress_do_queue.constprop.0:0x1116a0","MPIDI_OFI_progress_do_queue.constprop.0:0x11e8e0","MPIDI_OFI_progress_do_queue.constprop.0:0x12c8e0","MPIDI_OFI_progress_do_queue.constprop.0:0x132de0","MPIDI_OFI_progress_do_queue.constprop.0:0x140ea0","MPIDI_OFI_progress_do_queue.constprop.0:0x147230","MPIDI_OFI_progress_do_queue.constprop.0:0x152430","MPIDI_OFI_progress_do_queue.constprop.0:0x168ff0","MPIDI_OFI_progress_do_queue.constprop.0:0x17cb10","MPIDI_OFI_progress_do_queue.constprop.0:0x18b010","MPIDI_OFI_progress_do_queue.constprop.0:0x191940","MPIDI_OFI_progress_do_queue.constprop.0:0x19fd30","MPIDI_OFI_progress_do_queue.constprop.0:0x1a8a90","MPIDI_OFI_progress_do_queue.constprop.0:0x1b5b10","MPIDI_OFI_progress_do_queue.constprop.0:0x1c8550","MPIDI_OFI_progress_do_queue.constprop.0:0x1d29f0","MPIDI_OFI_progress_do_queue.constprop.0:0x1e9c80","MPIDI_OFI_progress_do_queue.constprop.0:0x200930","MPIDI_OFI_progress_do_queue.constprop.0:0x21c340","MPIDI_OFI_progress_do_queue.constprop.0:0x22f860","MPIDI_OFI_progress_do_queue.constprop.0:0x23fe60","MPIDI_OFI_progress_do_queue.constprop.0:0x250e00","MPIDI_OFI_progress_do_queue.constprop.0:0x25a550","MPIDI_OFI_progress_do_queue.constprop.0:0x26da00","MPIDI_OFI_progress_do_queue.constprop.0:0x2781a0","MPIDI_OFI_progress_do_queue.constprop.0:0x28b1b0","MPIDI_OFI_progress_do_queue.constprop.0:0x294990","MPIDI_OFI_progress_do_queue.constprop.0:0x2a8990","MPIDI_OFI_progress_do_queue.constprop.0:0x2b5db0","MPIDI_OFI_progress_do_queue.constprop.0:0x2c83f0","MPIDI_OFI_progress_do_queue.constprop.0:0x2d7b40","MPIDI_OFI_progress_do_queue.constprop.0:0x2e7360","MPIDI_OFI_progress_do_queue.constprop.0:0x2f6ac0","MPIDI_OFI_progress_do_queue.constprop.0:0x306270","MPIDI_OFI_progress_do_queue.constprop.0:0x316b60","MPIDI_OFI_progress_do_queue.constprop.0:0x3258a0","MPIDI_OFI_progress_do_queue.constprop.0:0x333560","MPIDI_OFI_progress_do_queue.constprop.0:0x3383c0","MPIDI_OFI_progress_do_queue.constprop.0:0x346f60","MPIDI_OFI_progress_do_queue.constprop.0:0x354f30","MPIDI_OFI_progress_do_queue.constprop.0:0x365600","MPIDI_OFI_progress_do_queue.constprop.0:0x375890","MPIDI_OFI_progress_do_queue.constprop.0:0x41ae90","MPIDI_OFI_progress_do_queue.constprop.0:0x456e30","MPIDI_OFI_progress_do_queue.constprop.0:0x478190","MPIDI_OFI_progress_do_queue.constprop.0:0x492fe0","MPIDI_OFI_progress_do_queue.constprop.0:0x4b6e50","MPIDI_OFI_progress_do_queue.constprop.0:0x4f68d0","MPIDI_OFI_progress_do_queue.constprop.0:0x5063c0","MPIDI_OFI_progress_do_queue.constprop.0:0x51cde0","MPIDI_OFI_progress_do_queue.constprop.0:0x52f190","MPIDI_OFI_progress_do_queue.constprop.0:0x547550","MPIDI_OFI_progress_do_queue.constprop.0:0x5612e0","MPIDI_OFI_progress_do_queue.constprop.0:0x5c9fd0","MPIDI_OFI_progress_do_queue.constprop.0:0x5e0c20","MPIDI_OFI_progress_do_queue.constprop.0:0x5e9240","MPIDI_OFI_progress_do_queue.constprop.0:0x5f9ec0","MPIDI_OFI_progress_do_queue.constprop.0:0x60a820","MPIDI_OFI_progress_do_queue.constprop.0:0x60cd60","MPIDI_OFI_progress_do_queue.constprop.0:0x612b50","MPIDI_OFI_progress_do_queue.constprop.0:0x617660","MPIDI_OFI_progress_do_queue.constprop.0:0x62f4b0","MPIDI_OFI_progress_do_queue.constprop.0:0x644ef0","MPIDI_OFI_progress_do_queue.constprop.0:0x64e790","MPIDI_OFI_progress_do_queue.constprop.0:0x6608e0","MPIDI_OFI_progress_do_queue.constprop.0:0x663e30","MPIDI_OFI_progress_do_queue.constprop.0:0x6678f0","MPIDI_OFI_progress_do_queue.constprop.0:0x66f450","MPIDI_OFI_progress_do_queue.constprop.0:0x68cd00","MPIDI_OFI_progress_do_queue.constprop.0:0x69dde0","MPIDI_OFI_progress_do_queue.constprop.0:0x6bb460","MPIDI_OFI_progress_uninlined","MPIDI_OFI_recv_event","MPIDI_OFI_recv_event.cold","MPIDI_OFI_recv_event.constprop.0.cold:0x355e2","MPIDI_OFI_recv_event.constprop.0.cold:0x3597f","MPIDI_OFI_recv_event.constprop.0.cold:0x35e41","MPIDI_OFI_recv_event.constprop.0.cold:0x36263","MPIDI_OFI_recv_event.constprop.0.cold:0x3656b","MPIDI_OFI_recv_event.constprop.0.cold:0x36908","MPIDI_OFI_recv_event.constprop.0.cold:0x36f61","MPIDI_OFI_recv_event.constprop.0.cold:0x37283","MPIDI_OFI_recv_event.constprop.0.cold:0x374d6","MPIDI_OFI_recv_event.constprop.0.cold:0x378a7","MPIDI_OFI_recv_event.constprop.0.cold:0x37bbd","MPIDI_OFI_recv_event.constprop.0.cold:0x37eb1","MPIDI_OFI_recv_event.constprop.0.cold:0x3820c","MPIDI_OFI_recv_event.constprop.0.cold:0x38479","MPIDI_OFI_recv_event.constprop.0.cold:0x38887","MPIDI_OFI_recv_event.constprop.0.cold:0x38d7f","MPIDI_OFI_recv_event.constprop.0.cold:0x3923a","MPIDI_OFI_recv_event.constprop.0.cold:0x3972f","MPIDI_OFI_recv_event.constprop.0.cold:0x39984","MPIDI_OFI_recv_event.constprop.0.cold:0x39bb8","MPIDI_OFI_recv_event.constprop.0.cold:0x39dec","MPIDI_OFI_recv_event.constprop.0.cold:0x3a041","MPIDI_OFI_recv_event.constprop.0.cold:0x3a275","MPIDI_OFI_recv_event.constprop.0.cold:0x3a4ca","MPIDI_OFI_recv_event.constprop.0.cold:0x3a6c8","MPIDI_OFI_recv_event.constprop.0.cold:0x3a917","MPIDI_OFI_recv_event.constprop.0.cold:0x3ab36","MPIDI_OFI_recv_event.constprop.0.cold:0x3ad34","MPIDI_OFI_recv_event.constprop.0.cold:0x3af68","MPIDI_OFI_recv_event.constprop.0.cold:0x3b1bd","MPIDI_OFI_recv_event.constprop.0.cold:0x3d39d","MPIDI_OFI_recv_event.constprop.0.cold:0x3d7a0","MPIDI_OFI_recv_event.constprop.0.cold:0x3dc8d","MPIDI_OFI_recv_event.constprop.0.cold:0x3dd12","MPIDI_OFI_recv_event.constprop.0.cold:0x3e279","MPIDI_OFI_recv_event.constprop.0.cold:0x3ee58","MPIDI_OFI_recv_event.constprop.0.cold:0x3f108","MPIDI_OFI_recv_event.constprop.0.cold:0x3f3fc","MPIDI_OFI_recv_event.constprop.0.cold:0x3f61b","MPIDI_OFI_recv_event.constprop.0.cold:0x3f8b2","MPIDI_OFI_recv_event.constprop.0.cold:0x3fb08","MPIDI_OFI_recv_event.constprop.0.cold:0x40117","MPIDI_OFI_recv_event.constprop.0.cold:0x407c8","MPIDI_OFI_recv_event.constprop.0.cold:0x40b17","MPIDI_OFI_recv_event.constprop.0.cold:0x40e2d","MPIDI_OFI_recv_event.constprop.0.cold:0x4111a","MPIDI_OFI_recv_event.constprop.0.cold:0x41184","MPIDI_OFI_recv_event.constprop.0.cold:0x41440","MPIDI_OFI_recv_event.constprop.0.cold:0x414b8","MPIDI_OFI_recv_event.constprop.0.cold:0x416ec","MPIDI_OFI_recv_event.constprop.0.cold:0x41a99","MPIDI_OFI_recv_event.constprop.0.cold:0x41bdb","MPIDI_OFI_recv_event.constprop.0:0x1220c0","MPIDI_OFI_recv_event.constprop.0:0x1365c0","MPIDI_OFI_recv_event.constprop.0:0x1563b0","MPIDI_OFI_recv_event.constprop.0:0x16cf70","MPIDI_OFI_recv_event.constprop.0:0x1802f0","MPIDI_OFI_recv_event.constprop.0:0x195120","MPIDI_OFI_recv_event.constprop.0:0x1b9aa0","MPIDI_OFI_recv_event.constprop.0:0x1c9d60","MPIDI_OFI_recv_event.constprop.0:0x1d6980","MPIDI_OFI_recv_event.constprop.0:0x1edef0","MPIDI_OFI_recv_event.constprop.0:0x2048b0","MPIDI_OFI_recv_event.constprop.0:0x21fb20","MPIDI_OFI_recv_event.constprop.0:0x233040","MPIDI_OFI_recv_event.constprop.0:0x243640","MPIDI_OFI_recv_event.constprop.0:0x25dd30","MPIDI_OFI_recv_event.constprop.0:0x27b980","MPIDI_OFI_recv_event.constprop.0:0x298170","MPIDI_OFI_recv_event.constprop.0:0x2b97a0","MPIDI_OFI_recv_event.constprop.0:0x2cbbd0","MPIDI_OFI_recv_event.constprop.0:0x2db320","MPIDI_OFI_recv_event.constprop.0:0x2eab40","MPIDI_OFI_recv_event.constprop.0:0x2fa2a0","MPIDI_OFI_recv_event.constprop.0:0x309a50","MPIDI_OFI_recv_event.constprop.0:0x31a550","MPIDI_OFI_recv_event.constprop.0:0x329290","MPIDI_OFI_recv_event.constprop.0:0x33bba0","MPIDI_OFI_recv_event.constprop.0:0x34a740","MPIDI_OFI_recv_event.constprop.0:0x358920","MPIDI_OFI_recv_event.constprop.0:0x368ff0","MPIDI_OFI_recv_event.constprop.0:0x379070","MPIDI_OFI_recv_event.constprop.0:0x41e670","MPIDI_OFI_recv_event.constprop.0:0x45add0","MPIDI_OFI_recv_event.constprop.0:0x488600","MPIDI_OFI_recv_event.constprop.0:0x4967c0","MPIDI_OFI_recv_event.constprop.0:0x4ba630","MPIDI_OFI_recv_event.constprop.0:0x4fa0b0","MPIDI_OFI_recv_event.constprop.0:0x50a360","MPIDI_OFI_recv_event.constprop.0:0x5214a0","MPIDI_OFI_recv_event.constprop.0:0x533130","MPIDI_OFI_recv_event.constprop.0:0x54ad30","MPIDI_OFI_recv_event.constprop.0:0x565f90","MPIDI_OFI_recv_event.constprop.0:0x5cde40","MPIDI_OFI_recv_event.constprop.0:0x5ff4f0","MPIDI_OFI_recv_event.constprop.0:0x61b5e0","MPIDI_OFI_recv_event.constprop.0:0x633720","MPIDI_OFI_recv_event.constprop.0:0x645ec0","MPIDI_OFI_recv_event.constprop.0:0x64f9d0","MPIDI_OFI_recv_event.constprop.0:0x6688c0","MPIDI_OFI_recv_event.constprop.0:0x673920","MPIDI_OFI_recv_event.constprop.0:0x6904e0","MPIDI_OFI_recv_event.constprop.0:0x6aa1e0","MPIDI_OFI_recv_event.constprop.0:0x6bf5a0","MPIDI_OFI_recv_huge_control","MPIDI_OFI_recv_huge_event","MPIDI_OFI_retry_progress","MPIDI_OFI_send.constprop.0.cold:0x35d29","MPIDI_OFI_send.constprop.0.cold:0x35f28","MPIDI_OFI_send.constprop.0.cold:0x3634a","MPIDI_OFI_send.constprop.0.cold:0x36d60","MPIDI_OFI_send.constprop.0.cold:0x37048","MPIDI_OFI_send.constprop.0.cold:0x375bd","MPIDI_OFI_send.constprop.0.cold:0x3798e","MPIDI_OFI_send.constprop.0.cold:0x37ca4","MPIDI_OFI_send.constprop.0.cold:0x3d887","MPIDI_OFI_send.constprop.0.cold:0x3f1ef","MPIDI_OFI_send.constprop.0.cold:0x3fbef","MPIDI_OFI_send.constprop.0.cold:0x401fe","MPIDI_OFI_send.constprop.0.cold:0x40bfe","MPIDI_OFI_send.constprop.0.cold:0x40f14","MPIDI_OFI_send.constprop.0.cold:0x41ce9","MPIDI_OFI_send.constprop.0:0x14cbe0","MPIDI_OFI_send.constprop.0:0x15a5e0","MPIDI_OFI_send.constprop.0:0x1711a0","MPIDI_OFI_send.constprop.0:0x1ad8a0","MPIDI_OFI_send.constprop.0:0x1bdce0","MPIDI_OFI_send.constprop.0:0x1dabc0","MPIDI_OFI_send.constprop.0:0x1f2230","MPIDI_OFI_send.constprop.0:0x208bf0","MPIDI_OFI_send.constprop.0:0x45fb70","MPIDI_OFI_send.constprop.0:0x50e5a0","MPIDI_OFI_send.constprop.0:0x56a1d0","MPIDI_OFI_send.constprop.0:0x5d2070","MPIDI_OFI_send.constprop.0:0x61f920","MPIDI_OFI_send.constprop.0:0x637a60","MPIDI_OFI_send.constprop.0:0x6c3ed0","MPIDI_OFI_send_event.constprop.0.cold:0x355a0","MPIDI_OFI_send_event.constprop.0.cold:0x3593d","MPIDI_OFI_send_event.constprop.0.cold:0x36529","MPIDI_OFI_send_event.constprop.0.cold:0x368c6","MPIDI_OFI_send_event.constprop.0.cold:0x37220","MPIDI_OFI_send_event.constprop.0.cold:0x37e6f","MPIDI_OFI_send_event.constprop.0.cold:0x381ca","MPIDI_OFI_send_event.constprop.0.cold:0x38437","MPIDI_OFI_send_event.constprop.0.cold:0x38845","MPIDI_OFI_send_event.constprop.0.cold:0x38d3d","MPIDI_OFI_send_event.constprop.0.cold:0x391f8","MPIDI_OFI_send_event.constprop.0.cold:0x396ed","MPIDI_OFI_send_event.constprop.0.cold:0x39942","MPIDI_OFI_send_event.constprop.0.cold:0x39b76","MPIDI_OFI_send_event.constprop.0.cold:0x39daa","MPIDI_OFI_send_event.constprop.0.cold:0x39fff","MPIDI_OFI_send_event.constprop.0.cold:0x3a233","MPIDI_OFI_send_event.constprop.0.cold:0x3a488","MPIDI_OFI_send_event.constprop.0.cold:0x3a686","MPIDI_OFI_send_event.constprop.0.cold:0x3a8d5","MPIDI_OFI_send_event.constprop.0.cold:0x3aaf4","MPIDI_OFI_send_event.constprop.0.cold:0x3acf2","MPIDI_OFI_send_event.constprop.0.cold:0x3af26","MPIDI_OFI_send_event.constprop.0.cold:0x3b17b","MPIDI_OFI_send_event.constprop.0.cold:0x3d35b","MPIDI_OFI_send_event.constprop.0.cold:0x3dc4b","MPIDI_OFI_send_event.constprop.0.cold:0x3dcd0","MPIDI_OFI_send_event.constprop.0.cold:0x3e237","MPIDI_OFI_send_event.constprop.0.cold:0x3ee16","MPIDI_OFI_send_event.constprop.0.cold:0x3f5d9","MPIDI_OFI_send_event.constprop.0.cold:0x3f870","MPIDI_OFI_send_event.constprop.0.cold:0x40786","MPIDI_OFI_send_event.constprop.0.cold:0x410d8","MPIDI_OFI_send_event.constprop.0.cold:0x41142","MPIDI_OFI_send_event.constprop.0.cold:0x413fe","MPIDI_OFI_send_event.constprop.0.cold:0x41476","MPIDI_OFI_send_event.constprop.0.cold:0x416aa","MPIDI_OFI_send_event.constprop.0.cold:0x418ca","MPIDI_OFI_send_event.constprop.0:0x11fbb0","MPIDI_OFI_send_event.constprop.0:0x1340b0","MPIDI_OFI_send_event.constprop.0:0x17dde0","MPIDI_OFI_send_event.constprop.0:0x192c10","MPIDI_OFI_send_event.constprop.0:0x1c9120","MPIDI_OFI_send_event.constprop.0:0x21d610","MPIDI_OFI_send_event.constprop.0:0x230b30","MPIDI_OFI_send_event.constprop.0:0x241130","MPIDI_OFI_send_event.constprop.0:0x25b820","MPIDI_OFI_send_event.constprop.0:0x279470","MPIDI_OFI_send_event.constprop.0:0x295c60","MPIDI_OFI_send_event.constprop.0:0x2b7290","MPIDI_OFI_send_event.constprop.0:0x2c96c0","MPIDI_OFI_send_event.constprop.0:0x2d8e10","MPIDI_OFI_send_event.constprop.0:0x2e8630","MPIDI_OFI_send_event.constprop.0:0x2f7d90","MPIDI_OFI_send_event.constprop.0:0x307540","MPIDI_OFI_send_event.constprop.0:0x318040","MPIDI_OFI_send_event.constprop.0:0x326d80","MPIDI_OFI_send_event.constprop.0:0x339690","MPIDI_OFI_send_event.constprop.0:0x348230","MPIDI_OFI_send_event.constprop.0:0x356410","MPIDI_OFI_send_event.constprop.0:0x366ae0","MPIDI_OFI_send_event.constprop.0:0x376b60","MPIDI_OFI_send_event.constprop.0:0x41c160","MPIDI_OFI_send_event.constprop.0:0x4880f0","MPIDI_OFI_send_event.constprop.0:0x4942b0","MPIDI_OFI_send_event.constprop.0:0x4b8120","MPIDI_OFI_send_event.constprop.0:0x4f7ba0","MPIDI_OFI_send_event.constprop.0:0x530820","MPIDI_OFI_send_event.constprop.0:0x548820","MPIDI_OFI_send_event.constprop.0:0x5fcfe0","MPIDI_OFI_send_event.constprop.0:0x6459b0","MPIDI_OFI_send_event.constprop.0:0x64f4c0","MPIDI_OFI_send_event.constprop.0:0x6683b0","MPIDI_OFI_send_event.constprop.0:0x671420","MPIDI_OFI_send_event.constprop.0:0x68dfd0","MPIDI_OFI_send_event.constprop.0:0x69fa90","MPIDI_OFI_send_event.part.0.cold:0x35dff","MPIDI_OFI_send_event.part.0.cold:0x36221","MPIDI_OFI_send_event.part.0.cold:0x36f1f","MPIDI_OFI_send_event.part.0.cold:0x37494","MPIDI_OFI_send_event.part.0.cold:0x37865","MPIDI_OFI_send_event.part.0.cold:0x37b7b","MPIDI_OFI_send_event.part.0.cold:0x3d75e","MPIDI_OFI_send_event.part.0.cold:0x3f0c6","MPIDI_OFI_send_event.part.0.cold:0x3f3ba","MPIDI_OFI_send_event.part.0.cold:0x3fac6","MPIDI_OFI_send_event.part.0.cold:0x400d5","MPIDI_OFI_send_event.part.0.cold:0x40ad5","MPIDI_OFI_send_event.part.0.cold:0x40deb","MPIDI_OFI_send_event.part.0.cold:0x412b8","MPIDI_OFI_send_event.part.0.cold:0x41b99","MPIDI_OFI_send_event.part.0:0x153ee0","MPIDI_OFI_send_event.part.0:0x16aaa0","MPIDI_OFI_send_event.part.0:0x1b75d0","MPIDI_OFI_send_event.part.0:0x1d44b0","MPIDI_OFI_send_event.part.0:0x1eba20","MPIDI_OFI_send_event.part.0:0x2023e0","MPIDI_OFI_send_event.part.0:0x458900","MPIDI_OFI_send_event.part.0:0x507e90","MPIDI_OFI_send_event.part.0:0x51efd0","MPIDI_OFI_send_event.part.0:0x563ac0","MPIDI_OFI_send_event.part.0:0x5cb970","MPIDI_OFI_send_event.part.0:0x619110","MPIDI_OFI_send_event.part.0:0x631250","MPIDI_OFI_send_event.part.0:0x65ef00","MPIDI_OFI_send_event.part.0:0x6bd0d0","MPIDI_OFI_set_auto_progress","MPIDI_OFI_tamo","MPIDI_OFI_tamo.cold","MPIDI_OFI_update_global_settings","MPIDI_OFI_upids_to_gpids","MPIDI_OFI_win_do_progress:0x222bf0","MPIDI_OFI_win_do_progress:0x236820","MPIDI_OFI_win_do_progress:0x246710","MPIDI_OFI_win_do_progress:0x260e00","MPIDI_OFI_win_do_progress:0x27ea50","MPIDI_OFI_win_do_progress:0x29b240","MPIDI_OFI_win_do_progress:0x2bc880","MPIDI_OFI_win_do_progress:0x2ceca0","MPIDI_OFI_win_do_progress:0x2de3f0","MPIDI_OFI_win_do_progress:0x2edc10","MPIDI_OFI_win_do_progress:0x2fd370","MPIDI_OFI_win_do_progress:0x30cb20","MPIDI_OFI_win_do_progress:0x35ba00","MPIDI_OFI_win_do_progress:0x36c0d0","MPIDI_OFI_win_do_progress:0x677be0","MPIDI_OFI_win_request_complete.cold:0x37f35","MPIDI_OFI_win_request_complete.cold:0x38290","MPIDI_OFI_win_request_complete.cold:0x384fd","MPIDI_OFI_win_request_complete.cold:0x3890b","MPIDI_OFI_win_request_complete.cold:0x38e03","MPIDI_OFI_win_request_complete.cold:0x392be","MPIDI_OFI_win_request_complete.cold:0x397b3","MPIDI_OFI_win_request_complete.cold:0x39a08","MPIDI_OFI_win_request_complete.cold:0x39c3c","MPIDI_OFI_win_request_complete.cold:0x39e70","MPIDI_OFI_win_request_complete.cold:0x3a0c5","MPIDI_OFI_win_request_complete.cold:0x3a2f9","MPIDI_OFI_win_request_complete.cold:0x3adb8","MPIDI_OFI_win_request_complete.cold:0x3afec","MPIDI_OFI_win_request_complete.cold:0x4153c","MPIDI_OFI_win_request_complete:0x2226e0","MPIDI_OFI_win_request_complete:0x236310","MPIDI_OFI_win_request_complete:0x246200","MPIDI_OFI_win_request_complete:0x2608f0","MPIDI_OFI_win_request_complete:0x27e540","MPIDI_OFI_win_request_complete:0x29ad30","MPIDI_OFI_win_request_complete:0x2bc370","MPIDI_OFI_win_request_complete:0x2ce790","MPIDI_OFI_win_request_complete:0x2ddee0","MPIDI_OFI_win_request_complete:0x2ed700","MPIDI_OFI_win_request_complete:0x2fce60","MPIDI_OFI_win_request_complete:0x30c610","MPIDI_OFI_win_request_complete:0x35b4f0","MPIDI_OFI_win_request_complete:0x36bbc0","MPIDI_OFI_win_request_complete:0x6776d0","MPIDI_POSIX_am_init_req_hdr.part.0:0x11da40","MPIDI_POSIX_am_init_req_hdr.part.0:0x131ee0","MPIDI_POSIX_am_init_req_hdr.part.0:0x146aa0","MPIDI_POSIX_am_init_req_hdr.part.0:0x151760","MPIDI_POSIX_am_init_req_hdr.part.0:0x168320","MPIDI_POSIX_am_init_req_hdr.part.0:0x17bc70","MPIDI_POSIX_am_init_req_hdr.part.0:0x190a40","MPIDI_POSIX_am_init_req_hdr.part.0:0x1a8270","MPIDI_POSIX_am_init_req_hdr.part.0:0x1b4db0","MPIDI_POSIX_am_init_req_hdr.part.0:0x1d1c90","MPIDI_POSIX_am_init_req_hdr.part.0:0x1e8eb0","MPIDI_POSIX_am_init_req_hdr.part.0:0x1ff870","MPIDI_POSIX_am_init_req_hdr.part.0:0x21b370","MPIDI_POSIX_am_init_req_hdr.part.0:0x22e8c0","MPIDI_POSIX_am_init_req_hdr.part.0:0x23ee60","MPIDI_POSIX_am_init_req_hdr.part.0:0x259580","MPIDI_POSIX_am_init_req_hdr.part.0:0x2771a0","MPIDI_POSIX_am_init_req_hdr.part.0:0x293990","MPIDI_POSIX_am_init_req_hdr.part.0:0x2b4db0","MPIDI_POSIX_am_init_req_hdr.part.0:0x2c7420","MPIDI_POSIX_am_init_req_hdr.part.0:0x2d6b70","MPIDI_POSIX_am_init_req_hdr.part.0:0x2e6390","MPIDI_POSIX_am_init_req_hdr.part.0:0x2f5af0","MPIDI_POSIX_am_init_req_hdr.part.0:0x3052a0","MPIDI_POSIX_am_init_req_hdr.part.0:0x315ec0","MPIDI_POSIX_am_init_req_hdr.part.0:0x324c00","MPIDI_POSIX_am_init_req_hdr.part.0:0x337750","MPIDI_POSIX_am_init_req_hdr.part.0:0x3462f0","MPIDI_POSIX_am_init_req_hdr.part.0:0x353f90","MPIDI_POSIX_am_init_req_hdr.part.0:0x364660","MPIDI_POSIX_am_init_req_hdr.part.0:0x374c20","MPIDI_POSIX_am_init_req_hdr.part.0:0x419f10","MPIDI_POSIX_am_init_req_hdr.part.0:0x455bc0","MPIDI_POSIX_am_init_req_hdr.part.0:0x477200","MPIDI_POSIX_am_init_req_hdr.part.0:0x492370","MPIDI_POSIX_am_init_req_hdr.part.0:0x4b61e0","MPIDI_POSIX_am_init_req_hdr.part.0:0x4f5c20","MPIDI_POSIX_am_init_req_hdr.part.0:0x505260","MPIDI_POSIX_am_init_req_hdr.part.0:0x51c0d0","MPIDI_POSIX_am_init_req_hdr.part.0:0x52e230","MPIDI_POSIX_am_init_req_hdr.part.0:0x5468a0","MPIDI_POSIX_am_init_req_hdr.part.0:0x5601c0","MPIDI_POSIX_am_init_req_hdr.part.0:0x5c8e30","MPIDI_POSIX_am_init_req_hdr.part.0:0x5e02d0","MPIDI_POSIX_am_init_req_hdr.part.0:0x5e8dc0","MPIDI_POSIX_am_init_req_hdr.part.0:0x5f9520","MPIDI_POSIX_am_init_req_hdr.part.0:0x60c7b0","MPIDI_POSIX_am_init_req_hdr.part.0:0x616510","MPIDI_POSIX_am_init_req_hdr.part.0:0x62e6e0","MPIDI_POSIX_am_init_req_hdr.part.0:0x66e0f0","MPIDI_POSIX_am_init_req_hdr.part.0:0x68bdc0","MPIDI_POSIX_am_init_req_hdr.part.0:0x69d130","MPIDI_POSIX_am_init_req_hdr.part.0:0x6ba2c0","MPIDI_POSIX_am_send_hdr.constprop.0:0x147430","MPIDI_POSIX_am_send_hdr.constprop.0:0x1a8c90","MPIDI_POSIX_am_send_hdr:0x5e0f30","MPIDI_POSIX_am_send_hdr:0x5e9440","MPIDI_POSIX_coll_finalize","MPIDI_POSIX_coll_init","MPIDI_POSIX_comm_set_hints","MPIDI_POSIX_cray_get_target_vaddr","MPIDI_POSIX_cray_get_target_vaddr.cold","MPIDI_POSIX_cray_rma_shm_finalize","MPIDI_POSIX_cray_rma_shm_init","MPIDI_POSIX_delay_shm_mutex_destroy","MPIDI_POSIX_do_am_isend.cold:0x35603","MPIDI_POSIX_do_am_isend.cold:0x359a0","MPIDI_POSIX_do_am_isend.cold:0x35ea4","MPIDI_POSIX_do_am_isend.cold:0x362c6","MPIDI_POSIX_do_am_isend.cold:0x3658c","MPIDI_POSIX_do_am_isend.cold:0x36929","MPIDI_POSIX_do_am_isend.cold:0x36fc4","MPIDI_POSIX_do_am_isend.cold:0x37539","MPIDI_POSIX_do_am_isend.cold:0x3790a","MPIDI_POSIX_do_am_isend.cold:0x37c20","MPIDI_POSIX_do_am_isend.cold:0x37ed2","MPIDI_POSIX_do_am_isend.cold:0x3822d","MPIDI_POSIX_do_am_isend.cold:0x3849a","MPIDI_POSIX_do_am_isend.cold:0x388a8","MPIDI_POSIX_do_am_isend.cold:0x38da0","MPIDI_POSIX_do_am_isend.cold:0x3925b","MPIDI_POSIX_do_am_isend.cold:0x39750","MPIDI_POSIX_do_am_isend.cold:0x399a5","MPIDI_POSIX_do_am_isend.cold:0x39bd9","MPIDI_POSIX_do_am_isend.cold:0x39e0d","MPIDI_POSIX_do_am_isend.cold:0x3a062","MPIDI_POSIX_do_am_isend.cold:0x3a296","MPIDI_POSIX_do_am_isend.cold:0x3a4eb","MPIDI_POSIX_do_am_isend.cold:0x3a6e9","MPIDI_POSIX_do_am_isend.cold:0x3a938","MPIDI_POSIX_do_am_isend.cold:0x3ab57","MPIDI_POSIX_do_am_isend.cold:0x3ad55","MPIDI_POSIX_do_am_isend.cold:0x3af89","MPIDI_POSIX_do_am_isend.cold:0x3b1de","MPIDI_POSIX_do_am_isend.cold:0x3d3be","MPIDI_POSIX_do_am_isend.cold:0x3d803","MPIDI_POSIX_do_am_isend.cold:0x3dae9","MPIDI_POSIX_do_am_isend.cold:0x3dd33","MPIDI_POSIX_do_am_isend.cold:0x3e29a","MPIDI_POSIX_do_am_isend.cold:0x3ee79","MPIDI_POSIX_do_am_isend.cold:0x3f16b","MPIDI_POSIX_do_am_isend.cold:0x3f41d","MPIDI_POSIX_do_am_isend.cold:0x3f63c","MPIDI_POSIX_do_am_isend.cold:0x3f8d3","MPIDI_POSIX_do_am_isend.cold:0x3fb6b","MPIDI_POSIX_do_am_isend.cold:0x4017a","MPIDI_POSIX_do_am_isend.cold:0x407e9","MPIDI_POSIX_do_am_isend.cold:0x40b7a","MPIDI_POSIX_do_am_isend.cold:0x40e90","MPIDI_POSIX_do_am_isend.cold:0x414d9","MPIDI_POSIX_do_am_isend.cold:0x4170d","MPIDI_POSIX_do_am_isend.cold:0x4190c","MPIDI_POSIX_do_am_isend.cold:0x41c3e","MPIDI_POSIX_do_am_isend.constprop.0.cold:0x386ed","MPIDI_POSIX_do_am_isend.constprop.0.cold:0x38bc4","MPIDI_POSIX_do_am_isend.constprop.0.cold:0x390a0","MPIDI_POSIX_do_am_isend.constprop.0.cold:0x39574","MPIDI_POSIX_do_am_isend.constprop.0.cold:0x4062e","MPIDI_POSIX_do_am_isend.constprop.0:0x253190","MPIDI_POSIX_do_am_isend.constprop.0:0x270240","MPIDI_POSIX_do_am_isend.constprop.0:0x28d6c0","MPIDI_POSIX_do_am_isend.constprop.0:0x2ab350","MPIDI_POSIX_do_am_isend.constprop.0:0x5f05f0","MPIDI_POSIX_do_am_isend:0x122820","MPIDI_POSIX_do_am_isend:0x136d20","MPIDI_POSIX_do_am_isend:0x157700","MPIDI_POSIX_do_am_isend:0x16e2c0","MPIDI_POSIX_do_am_isend:0x180a50","MPIDI_POSIX_do_am_isend:0x195880","MPIDI_POSIX_do_am_isend:0x1bae00","MPIDI_POSIX_do_am_isend:0x1d7ce0","MPIDI_POSIX_do_am_isend:0x1ef350","MPIDI_POSIX_do_am_isend:0x205d10","MPIDI_POSIX_do_am_isend:0x220280","MPIDI_POSIX_do_am_isend:0x2337a0","MPIDI_POSIX_do_am_isend:0x243da0","MPIDI_POSIX_do_am_isend:0x25e490","MPIDI_POSIX_do_am_isend:0x27c0e0","MPIDI_POSIX_do_am_isend:0x2988d0","MPIDI_POSIX_do_am_isend:0x2b9f00","MPIDI_POSIX_do_am_isend:0x2cc330","MPIDI_POSIX_do_am_isend:0x2dba80","MPIDI_POSIX_do_am_isend:0x2eb2a0","MPIDI_POSIX_do_am_isend:0x2faa00","MPIDI_POSIX_do_am_isend:0x30a1b0","MPIDI_POSIX_do_am_isend:0x31acb0","MPIDI_POSIX_do_am_isend:0x3299f0","MPIDI_POSIX_do_am_isend:0x33c300","MPIDI_POSIX_do_am_isend:0x34aea0","MPIDI_POSIX_do_am_isend:0x359080","MPIDI_POSIX_do_am_isend:0x369750","MPIDI_POSIX_do_am_isend:0x3797d0","MPIDI_POSIX_do_am_isend:0x41edd0","MPIDI_POSIX_do_am_isend:0x45c240","MPIDI_POSIX_do_am_isend:0x480580","MPIDI_POSIX_do_am_isend:0x496f20","MPIDI_POSIX_do_am_isend:0x4bad90","MPIDI_POSIX_do_am_isend:0x4fa810","MPIDI_POSIX_do_am_isend:0x50b6c0","MPIDI_POSIX_do_am_isend:0x521c10","MPIDI_POSIX_do_am_isend:0x533780","MPIDI_POSIX_do_am_isend:0x54b490","MPIDI_POSIX_do_am_isend:0x5672f0","MPIDI_POSIX_do_am_isend:0x5cf190","MPIDI_POSIX_do_am_isend:0x5ffc50","MPIDI_POSIX_do_am_isend:0x61ca40","MPIDI_POSIX_do_am_isend:0x634b80","MPIDI_POSIX_do_am_isend:0x674080","MPIDI_POSIX_do_am_isend:0x690c40","MPIDI_POSIX_do_am_isend:0x6a0a60","MPIDI_POSIX_do_am_isend:0x6c0900","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x11ebf0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x1330f0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x17ce20","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x191c50","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x21c650","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x22fb70","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x240170","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x25a860","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2784b0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x294ca0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2c8700","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2d7e50","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2e7670","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x2f6dd0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x306580","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x3386d0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x347270","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x375ba0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x41b090","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x4931e0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x4b7160","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x4f6be0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x52f4a0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x547860","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x5fa0c0","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x68d010","MPIDI_POSIX_do_am_send_hdr.constprop.0:0x69e0f0","MPIDI_POSIX_do_am_send_hdr:0x152740","MPIDI_POSIX_do_am_send_hdr:0x169300","MPIDI_POSIX_do_am_send_hdr:0x1b5e20","MPIDI_POSIX_do_am_send_hdr:0x1d2d00","MPIDI_POSIX_do_am_send_hdr:0x1e9e80","MPIDI_POSIX_do_am_send_hdr:0x200640","MPIDI_POSIX_do_am_send_hdr:0x2b5fb0","MPIDI_POSIX_do_am_send_hdr:0x316e70","MPIDI_POSIX_do_am_send_hdr:0x325bb0","MPIDI_POSIX_do_am_send_hdr:0x355130","MPIDI_POSIX_do_am_send_hdr:0x365800","MPIDI_POSIX_do_am_send_hdr:0x456b40","MPIDI_POSIX_do_am_send_hdr:0x477ea0","MPIDI_POSIX_do_am_send_hdr:0x5060d0","MPIDI_POSIX_do_am_send_hdr:0x51d0f0","MPIDI_POSIX_do_am_send_hdr:0x560ff0","MPIDI_POSIX_do_am_send_hdr:0x5c9bd0","MPIDI_POSIX_do_am_send_hdr:0x617370","MPIDI_POSIX_do_am_send_hdr:0x62f6b0","MPIDI_POSIX_do_am_send_hdr:0x66f160","MPIDI_POSIX_do_am_send_hdr:0x6bb170","MPIDI_POSIX_eager_buf_limit","MPIDI_POSIX_eager_finalize","MPIDI_POSIX_eager_init","MPIDI_POSIX_eager_payload_limit","MPIDI_POSIX_eager_recv_begin","MPIDI_POSIX_eager_recv_commit","MPIDI_POSIX_eager_recv_completed_hook","MPIDI_POSIX_eager_recv_memcpy","MPIDI_POSIX_eager_recv_posted_hook","MPIDI_POSIX_eager_send","MPIDI_POSIX_eager_send.cold","MPIDI_POSIX_init_local","MPIDI_POSIX_init_world","MPIDI_POSIX_iqueue_finalize","MPIDI_POSIX_iqueue_init","MPIDI_POSIX_mpi_alloc_mem","MPIDI_POSIX_mpi_allreduce","MPIDI_POSIX_mpi_allreduce_release_gather","MPIDI_POSIX_mpi_barrier","MPIDI_POSIX_mpi_barrier_release_gather","MPIDI_POSIX_mpi_barrier_release_gather.cold","MPIDI_POSIX_mpi_bcast","MPIDI_POSIX_mpi_bcast_release_gather.part.0","MPIDI_POSIX_mpi_bcast_release_gather.part.0.cold","MPIDI_POSIX_mpi_comm_commit_post_hook","MPIDI_POSIX_mpi_comm_commit_pre_hook","MPIDI_POSIX_mpi_comm_free_hook","MPIDI_POSIX_mpi_finalize_hook","MPIDI_POSIX_mpi_free_mem","MPIDI_POSIX_mpi_iprobe.constprop.0:0x132c20","MPIDI_POSIX_mpi_iprobe.constprop.0:0x191780","MPIDI_POSIX_mpi_iprobe.constprop.0:0x456980","MPIDI_POSIX_mpi_iprobe.constprop.0:0x477d60","MPIDI_POSIX_mpi_irecv.constprop.0:0x144790","MPIDI_POSIX_mpi_irecv.constprop.0:0x1a3a60","MPIDI_POSIX_mpi_irecv.constprop.0:0x1f6720","MPIDI_POSIX_mpi_irecv.constprop.0:0x20d0e0","MPIDI_POSIX_mpi_irecv.constprop.0:0x623e10","MPIDI_POSIX_mpi_irecv.constprop.0:0x63bf50","MPIDI_POSIX_mpi_op_commit_hook","MPIDI_POSIX_mpi_op_free_hook","MPIDI_POSIX_mpi_precv_init","MPIDI_POSIX_mpi_psend_init","MPIDI_POSIX_mpi_reduce:0x440ee0","MPIDI_POSIX_mpi_reduce:0x4c3f40","MPIDI_POSIX_mpi_reduce_release_gather.part.0.cold","MPIDI_POSIX_mpi_reduce_release_gather.part.0:0x440940","MPIDI_POSIX_mpi_reduce_release_gather.part.0:0x4c31a0","MPIDI_POSIX_mpi_release_gather_comm_free","MPIDI_POSIX_mpi_release_gather_comm_init","MPIDI_POSIX_mpi_release_gather_comm_init.cold","MPIDI_POSIX_mpi_release_gather_comm_init_null","MPIDI_POSIX_mpi_release_gather_gather","MPIDI_POSIX_mpi_release_gather_gather.cold","MPIDI_POSIX_mpi_release_gather_release","MPIDI_POSIX_mpi_type_commit_hook","MPIDI_POSIX_mpi_type_free_hook","MPIDI_POSIX_mpi_win_allocate","MPIDI_POSIX_mpi_win_allocate_hook","MPIDI_POSIX_mpi_win_allocate_shared","MPIDI_POSIX_mpi_win_allocate_shared_hook","MPIDI_POSIX_mpi_win_attach","MPIDI_POSIX_mpi_win_attach_hook","MPIDI_POSIX_mpi_win_create","MPIDI_POSIX_mpi_win_create_dynamic","MPIDI_POSIX_mpi_win_create_dynamic_hook","MPIDI_POSIX_mpi_win_create_hook","MPIDI_POSIX_mpi_win_detach","MPIDI_POSIX_mpi_win_detach_hook","MPIDI_POSIX_mpi_win_free","MPIDI_POSIX_mpi_win_free_hook","MPIDI_POSIX_mpi_win_get_info","MPIDI_POSIX_mpi_win_set_info","MPIDI_POSIX_nb_release_gather_comm_free","MPIDI_POSIX_nb_release_gather_comm_init","MPIDI_POSIX_nb_release_gather_comm_init.cold","MPIDI_POSIX_progress.constprop.0:0x123210","MPIDI_POSIX_progress.constprop.0:0x137710","MPIDI_POSIX_progress.constprop.0:0x1580f0","MPIDI_POSIX_progress.constprop.0:0x16ecb0","MPIDI_POSIX_progress.constprop.0:0x181440","MPIDI_POSIX_progress.constprop.0:0x196270","MPIDI_POSIX_progress.constprop.0:0x1bb7f0","MPIDI_POSIX_progress.constprop.0:0x1d86d0","MPIDI_POSIX_progress.constprop.0:0x1efd40","MPIDI_POSIX_progress.constprop.0:0x206700","MPIDI_POSIX_progress.constprop.0:0x220c70","MPIDI_POSIX_progress.constprop.0:0x234190","MPIDI_POSIX_progress.constprop.0:0x244790","MPIDI_POSIX_progress.constprop.0:0x25ee80","MPIDI_POSIX_progress.constprop.0:0x27cad0","MPIDI_POSIX_progress.constprop.0:0x2992c0","MPIDI_POSIX_progress.constprop.0:0x2ba8f0","MPIDI_POSIX_progress.constprop.0:0x2ccd20","MPIDI_POSIX_progress.constprop.0:0x2dc470","MPIDI_POSIX_progress.constprop.0:0x2ebc90","MPIDI_POSIX_progress.constprop.0:0x2fb3f0","MPIDI_POSIX_progress.constprop.0:0x30aba0","MPIDI_POSIX_progress.constprop.0:0x31b6a0","MPIDI_POSIX_progress.constprop.0:0x32a3e0","MPIDI_POSIX_progress.constprop.0:0x33ccf0","MPIDI_POSIX_progress.constprop.0:0x34b890","MPIDI_POSIX_progress.constprop.0:0x359a70","MPIDI_POSIX_progress.constprop.0:0x36a140","MPIDI_POSIX_progress.constprop.0:0x37a1c0","MPIDI_POSIX_progress.constprop.0:0x41f7c0","MPIDI_POSIX_progress.constprop.0:0x45cc30","MPIDI_POSIX_progress.constprop.0:0x480f70","MPIDI_POSIX_progress.constprop.0:0x497910","MPIDI_POSIX_progress.constprop.0:0x4bb780","MPIDI_POSIX_progress.constprop.0:0x4fb200","MPIDI_POSIX_progress.constprop.0:0x50c0b0","MPIDI_POSIX_progress.constprop.0:0x522600","MPIDI_POSIX_progress.constprop.0:0x534170","MPIDI_POSIX_progress.constprop.0:0x54be80","MPIDI_POSIX_progress.constprop.0:0x567ce0","MPIDI_POSIX_progress.constprop.0:0x5cfb80","MPIDI_POSIX_progress.constprop.0:0x600640","MPIDI_POSIX_progress.constprop.0:0x61d430","MPIDI_POSIX_progress.constprop.0:0x635570","MPIDI_POSIX_progress.constprop.0:0x674a70","MPIDI_POSIX_progress.constprop.0:0x691630","MPIDI_POSIX_progress.constprop.0:0x6a1450","MPIDI_POSIX_progress.constprop.0:0x6c12f0","MPIDI_POSIX_progress_recv.constprop.0:0x11da70","MPIDI_POSIX_progress_recv.constprop.0:0x131f10","MPIDI_POSIX_progress_recv.constprop.0:0x1517c0","MPIDI_POSIX_progress_recv.constprop.0:0x168380","MPIDI_POSIX_progress_recv.constprop.0:0x17bca0","MPIDI_POSIX_progress_recv.constprop.0:0x190a70","MPIDI_POSIX_progress_recv.constprop.0:0x1b4ea0","MPIDI_POSIX_progress_recv.constprop.0:0x1d1d80","MPIDI_POSIX_progress_recv.constprop.0:0x1e8fa0","MPIDI_POSIX_progress_recv.constprop.0:0x1ff960","MPIDI_POSIX_progress_recv.constprop.0:0x21b400","MPIDI_POSIX_progress_recv.constprop.0:0x22e920","MPIDI_POSIX_progress_recv.constprop.0:0x23ef20","MPIDI_POSIX_progress_recv.constprop.0:0x259610","MPIDI_POSIX_progress_recv.constprop.0:0x277260","MPIDI_POSIX_progress_recv.constprop.0:0x293a50","MPIDI_POSIX_progress_recv.constprop.0:0x2b4e40","MPIDI_POSIX_progress_recv.constprop.0:0x2c74b0","MPIDI_POSIX_progress_recv.constprop.0:0x2d6c00","MPIDI_POSIX_progress_recv.constprop.0:0x2e6420","MPIDI_POSIX_progress_recv.constprop.0:0x2f5b80","MPIDI_POSIX_progress_recv.constprop.0:0x305330","MPIDI_POSIX_progress_recv.constprop.0:0x315ef0","MPIDI_POSIX_progress_recv.constprop.0:0x324c30","MPIDI_POSIX_progress_recv.constprop.0:0x337780","MPIDI_POSIX_progress_recv.constprop.0:0x346320","MPIDI_POSIX_progress_recv.constprop.0:0x353fc0","MPIDI_POSIX_progress_recv.constprop.0:0x364690","MPIDI_POSIX_progress_recv.constprop.0:0x374c50","MPIDI_POSIX_progress_recv.constprop.0:0x41a1e0","MPIDI_POSIX_progress_recv.constprop.0:0x455ce0","MPIDI_POSIX_progress_recv.constprop.0:0x477290","MPIDI_POSIX_progress_recv.constprop.0:0x4923a0","MPIDI_POSIX_progress_recv.constprop.0:0x4b6210","MPIDI_POSIX_progress_recv.constprop.0:0x4f5c50","MPIDI_POSIX_progress_recv.constprop.0:0x5053b0","MPIDI_POSIX_progress_recv.constprop.0:0x51c130","MPIDI_POSIX_progress_recv.constprop.0:0x52e510","MPIDI_POSIX_progress_recv.constprop.0:0x5468d0","MPIDI_POSIX_progress_recv.constprop.0:0x560310","MPIDI_POSIX_progress_recv.constprop.0:0x5c8ef0","MPIDI_POSIX_progress_recv.constprop.0:0x5f9550","MPIDI_POSIX_progress_recv.constprop.0:0x616600","MPIDI_POSIX_progress_recv.constprop.0:0x62e7d0","MPIDI_POSIX_progress_recv.constprop.0:0x66e1b0","MPIDI_POSIX_progress_recv.constprop.0:0x68c050","MPIDI_POSIX_progress_recv.constprop.0:0x69d160","MPIDI_POSIX_progress_recv.constprop.0:0x6ba380","MPIDI_POSIX_rma_target_cmpl_hook","MPIDI_POSIX_shm_win_init_hook","MPIDI_Reduce_intra_composition_alpha.cold:0x3d684","MPIDI_Reduce_intra_composition_alpha.cold:0x3e452","MPIDI_Reduce_intra_composition_alpha:0x441340","MPIDI_Reduce_intra_composition_alpha:0x4c43a0","MPIDI_Reduce_intra_composition_beta.cold:0x3d6a6","MPIDI_Reduce_intra_composition_beta.cold:0x3e474","MPIDI_Reduce_intra_composition_beta:0x441880","MPIDI_Reduce_intra_composition_beta:0x4c48e0","MPIDI_Reduce_intra_composition_gamma.part.0:0x41a0f0","MPIDI_Reduce_intra_composition_gamma.part.0:0x4b61b0","MPIDI_SHM_comm_set_hints","MPIDI_SHM_copy_tree","MPIDI_SHM_create_template_tree","MPIDI_SHM_gen_package_tree","MPIDI_SHM_gen_tree","MPIDI_SHM_gen_tree_sharedmemory","MPIDI_SHM_init_local","MPIDI_SHM_init_world","MPIDI_SHM_mpi_alloc_mem","MPIDI_SHM_mpi_comm_commit_post_hook","MPIDI_SHM_mpi_comm_commit_pre_hook","MPIDI_SHM_mpi_comm_free_hook","MPIDI_SHM_mpi_finalize_hook","MPIDI_SHM_mpi_free_mem","MPIDI_SHM_mpi_irecv.part.0:0x140470","MPIDI_SHM_mpi_irecv.part.0:0x19f690","MPIDI_SHM_mpi_irecv.part.0:0x1e8f70","MPIDI_SHM_mpi_irecv.part.0:0x1ff900","MPIDI_SHM_mpi_irecv.part.0:0x455c20","MPIDI_SHM_mpi_irecv.part.0:0x477260","MPIDI_SHM_mpi_irecv.part.0:0x5052c0","MPIDI_SHM_mpi_irecv.part.0:0x560250","MPIDI_SHM_mpi_irecv.part.0:0x5c8ec0","MPIDI_SHM_mpi_irecv.part.0:0x6165d0","MPIDI_SHM_mpi_irecv.part.0:0x62e7a0","MPIDI_SHM_mpi_irecv.part.0:0x6ba350","MPIDI_SHM_mpi_op_commit_hook","MPIDI_SHM_mpi_op_free_hook","MPIDI_SHM_mpi_precv_init","MPIDI_SHM_mpi_psend_init","MPIDI_SHM_mpi_type_commit_hook","MPIDI_SHM_mpi_type_free_hook","MPIDI_SHM_mpi_win_allocate","MPIDI_SHM_mpi_win_allocate_hook","MPIDI_SHM_mpi_win_allocate_shared","MPIDI_SHM_mpi_win_allocate_shared_hook","MPIDI_SHM_mpi_win_attach","MPIDI_SHM_mpi_win_attach_hook","MPIDI_SHM_mpi_win_create","MPIDI_SHM_mpi_win_create_dynamic","MPIDI_SHM_mpi_win_create_dynamic_hook","MPIDI_SHM_mpi_win_create_hook","MPIDI_SHM_mpi_win_detach","MPIDI_SHM_mpi_win_detach_hook","MPIDI_SHM_mpi_win_free","MPIDI_SHM_mpi_win_free_hook","MPIDI_SHM_mpi_win_get_info","MPIDI_SHM_mpi_win_set_info","MPIDI_SHM_print_topotree","MPIDI_SHM_print_topotree_file","MPIDI_SHM_topology_tree_init","MPIDI_SHM_topotree_allocate","MPIDI_SHM_topotree_get_package_level","MPIDI_ST_alloc_queue_ptr","MPIDI_ST_free_queue","MPIDI_ST_progress_queue","MPIDI_ST_progress_start","MPIDI_ST_progress_tops_queue","MPIDI_ST_progress_tops_start","MPIDI_ST_progress_tops_wait","MPIDI_ST_progress_wait","MPIDI_ST_pull_fence_head","MPIDI_ST_pull_msg","MPIDI_ST_pull_msg_list","MPIDI_ST_pull_queue","MPIDI_ST_push_fence","MPIDI_ST_push_msg","MPIDI_ST_push_queue","MPIDI_ST_release_tops_requests","MPIDI_Self_cancel","MPIDI_Self_cancel.cold","MPIDI_Self_finalize","MPIDI_Self_improbe","MPIDI_Self_improbe.cold","MPIDI_Self_imrecv","MPIDI_Self_imrecv.cold","MPIDI_Self_init","MPIDI_Self_iprobe","MPIDI_Self_iprobe.cold","MPIDI_Self_irecv","MPIDI_Self_irecv.cold","MPIDI_Self_isend","MPIDI_Self_isend.cold","MPIDI_XPMEM_init_local","MPIDI_XPMEM_init_world","MPIDI_XPMEM_ipc_handle_map","MPIDI_XPMEM_mpi_finalize_hook","MPIDI_anysrc_try_cancel_partner","MPIDI_check_disjoint_gpids","MPIDI_check_for_failed_procs","MPIDI_comm_create_rank_map","MPIDI_create_init_comm","MPIDI_destroy_init_comm","MPIDI_get","MPIDI_get.cold","MPIDI_get_comm_hint_tclass","MPIDI_imrecv.cold:0x35846","MPIDI_imrecv.cold:0x367cf","MPIDI_imrecv:0x12ee30","MPIDI_imrecv:0x18d810","MPIDI_progress_test.cold:0x3f3a2","MPIDI_progress_test.cold:0x3f7bf","MPIDI_progress_test.cold:0x3fa56","MPIDI_progress_test.constprop.0","MPIDI_progress_test.constprop.0.cold","MPIDI_progress_test.constprop.0.isra.0.cold:0x3d541","MPIDI_progress_test.constprop.0.isra.0.cold:0x3e41d","MPIDI_progress_test.constprop.0.isra.0.cold:0x3effc","MPIDI_progress_test.constprop.0.isra.0:0x425c00","MPIDI_progress_test.constprop.0.isra.0:0x4c1bc0","MPIDI_progress_test.constprop.0.isra.0:0x501620","MPIDI_progress_test:0x517c10","MPIDI_progress_test:0x53a5a0","MPIDI_progress_test:0x5522a0","MPIDI_progress_test_vci:0x362200","MPIDI_progress_test_vci:0x3728d0","MPIDI_progress_test_vci:0x67e3a0","MPIDI_psend_init.constprop.0.cold:0x35465","MPIDI_psend_init.constprop.0.cold:0x36e6a","MPIDI_psend_init.constprop.0.cold:0x37241","MPIDI_psend_init.constprop.0.cold:0x3778e","MPIDI_psend_init.constprop.0:0x119330","MPIDI_psend_init.constprop.0:0x1b2a60","MPIDI_psend_init.constprop.0:0x1c92a0","MPIDI_psend_init.constprop.0:0x1e5130","MPIDI_put","MPIDI_put.cold","MPIDI_rget.constprop.0","MPIDI_rget.constprop.0.cold","MPIDI_rput.constprop.0","MPIDI_rput.constprop.0.cold","MPIDI_set_comm_hint_receiver_vci","MPIDI_set_comm_hint_sender_vci","MPIDI_set_comm_hint_tclass","MPIDI_set_comm_hint_vci","MPIDI_sigusr1_handler","MPIDU_Init_shm_alloc","MPIDU_Init_shm_barrier","MPIDU_Init_shm_finalize","MPIDU_Init_shm_free","MPIDU_Init_shm_get","MPIDU_Init_shm_init","MPIDU_Init_shm_is_symm","MPIDU_Init_shm_put","MPIDU_Init_shm_query","MPIDU_Sched_add_entry.constprop.0","MPIDU_Sched_alloc_state","MPIDU_Sched_are_pending","MPIDU_Sched_barrier","MPIDU_Sched_cb","MPIDU_Sched_cb2","MPIDU_Sched_clone","MPIDU_Sched_continue","MPIDU_Sched_continue.cold","MPIDU_Sched_copy","MPIDU_Sched_copy.cold","MPIDU_Sched_create","MPIDU_Sched_free","MPIDU_Sched_free.cold","MPIDU_Sched_next_tag","MPIDU_Sched_progress","MPIDU_Sched_progress.cold","MPIDU_Sched_pt2pt_recv","MPIDU_Sched_pt2pt_recv.cold","MPIDU_Sched_pt2pt_send","MPIDU_Sched_pt2pt_send.cold","MPIDU_Sched_recv","MPIDU_Sched_recv.cold","MPIDU_Sched_recv_status","MPIDU_Sched_recv_status.cold","MPIDU_Sched_reduce","MPIDU_Sched_reduce.cold","MPIDU_Sched_reset","MPIDU_Sched_send","MPIDU_Sched_send.cold","MPIDU_Sched_send_defer","MPIDU_Sched_send_defer.cold","MPIDU_Sched_set_tag","MPIDU_Sched_ssend","MPIDU_Sched_ssend.cold","MPIDU_Sched_start","MPIDU_Sched_tamo","MPIDU_Sched_tamo.cold","MPIDU_Sched_trecv","MPIDU_Sched_trecv.cold","MPIDU_Sched_tsend","MPIDU_Sched_tsend.cold","MPIDU_Sched_twait","MPIDU_bc_allgather","MPIDU_bc_table_create","MPIDU_bc_table_destroy","MPIDU_genq_private_pool_alloc_cell","MPIDU_genq_private_pool_create","MPIDU_genq_private_pool_destroy","MPIDU_genq_private_pool_free_cell","MPIDU_genq_shmem_pool_create","MPIDU_genq_shmem_pool_destroy","MPIDU_genq_shmem_pool_gpu_mem_register","MPIDU_genq_shmem_queue_init","MPIDU_shm_alloc","MPIDU_shm_alloc_symm_all","MPIDU_shm_free","MPIDU_shm_get_mapsize","MPIDU_stream_workq_alloc","MPIDU_stream_workq_alloc_event","MPIDU_stream_workq_dealloc","MPIDU_stream_workq_enqueue","MPIDU_stream_workq_finalize","MPIDU_stream_workq_free_event","MPIDU_stream_workq_init","MPIDU_stream_workq_progress_ops","MPIDU_stream_workq_progress_wait_list","MPID_Abort","MPID_Abort.cold","MPID_Accumulate","MPID_Accumulate.cold","MPID_Aint_add","MPID_Aint_diff","MPID_Alloc_mem","MPID_Allocate_vci","MPID_Attr_alloc","MPID_Attr_alloc.cold","MPID_Attr_free","MPID_Bsend_init.part.0","MPID_Cancel_recv","MPID_Cancel_send.part.0","MPID_Cleanup_treq","MPID_Close_port","MPID_Comm_accept","MPID_Comm_commit_post_hook","MPID_Comm_commit_pre_hook","MPID_Comm_connect","MPID_Comm_disconnect","MPID_Comm_failure_ack","MPID_Comm_failure_get_acked","MPID_Comm_free_hook","MPID_Comm_get_all_failed_procs","MPID_Comm_get_lpid","MPID_Comm_get_lpid.cold","MPID_Comm_group_failed","MPID_Comm_reenable_anysource","MPID_Comm_remote_group_failed","MPID_Comm_revoke","MPID_Comm_set_hints","MPID_Comm_spawn_multiple","MPID_Create_intercomm_from_lpids","MPID_Create_tput.part.0","MPID_Create_tsend.constprop.0","MPID_Deallocate_vci","MPID_Finalize","MPID_Free_mem","MPID_Free_tindex.part.0","MPID_Get_accumulate","MPID_Get_accumulate.cold","MPID_Get_max_node_id","MPID_Get_node_id","MPID_Get_processor_name","MPID_Get_trgr_index","MPID_Get_trgr_index_without_target.part.0:0x3d0130","MPID_Get_trgr_index_without_target.part.0:0x3dfe20","MPID_Get_trgr_index_without_target.part.0:0x3e4560","MPID_Get_trgr_index_without_target.part.0:0x3f4f10","MPID_Get_trgr_index_without_target.part.0:0x3fa2f0","MPID_Get_trgr_index_without_target.part.0:0x6164b0","MPID_Get_trgr_index_without_target.part.0:0x644ce0","MPID_Get_universe_size","MPID_Imrecv.part.0","MPID_Init","MPID_InitCompleted","MPID_Intercomm_exchange_map","MPID_Irecv.constprop.0.cold:0x35bc8","MPID_Irecv.constprop.0.cold:0x36b51","MPID_Irecv.constprop.0:0x144970","MPID_Irecv.constprop.0:0x1a3c40","MPID_Irecv.constprop.0:0x464010","MPID_Irecv.constprop.0:0x512a20","MPID_Irecv.constprop.0:0x56e650","MPID_Irecv.constprop.0:0x5d64f0","MPID_Irecv_enqueue","MPID_Irsend.constprop.0:0x14ecc0","MPID_Irsend.constprop.0:0x1b0520","MPID_Isend.constprop.0:0x1624c0","MPID_Isend.constprop.0:0x179080","MPID_Isend.constprop.0:0x1c5bc0","MPID_Isend.constprop.0:0x1e2aa0","MPID_Isend.constprop.0:0x519390","MPID_Isend.constprop.0:0x575020","MPID_Isend.constprop.0:0x5dcd70","MPID_Isend:0x1fc860","MPID_Isend:0x213220","MPID_Isend:0x46a780","MPID_Isend:0x62bb80","MPID_Isend:0x643750","MPID_Isend_enqueue","MPID_NS_Create","MPID_NS_Free","MPID_NS_Lookup","MPID_NS_Publish","MPID_NS_Unpublish","MPID_Op_commit_hook","MPID_Op_free_hook","MPID_Open_port","MPID_Precv_init","MPID_Prequest_free_hook","MPID_Prequest_free_hook.cold","MPID_Progress_test.constprop.0.cold:0x35786","MPID_Progress_test.constprop.0.cold:0x35b23","MPID_Progress_test.constprop.0.cold:0x36069","MPID_Progress_test.constprop.0.cold:0x3648b","MPID_Progress_test.constprop.0.cold:0x3670f","MPID_Progress_test.constprop.0.cold:0x36aac","MPID_Progress_test.constprop.0.cold:0x37189","MPID_Progress_test.constprop.0.cold:0x376fe","MPID_Progress_test.constprop.0.cold:0x37b41","MPID_Progress_test.constprop.0.cold:0x37e57","MPID_Progress_test.constprop.0.cold:0x39909","MPID_Progress_test.constprop.0.cold:0x39b5e","MPID_Progress_test.constprop.0.cold:0x39d92","MPID_Progress_test.constprop.0.cold:0x39fc6","MPID_Progress_test.constprop.0.cold:0x3a21b","MPID_Progress_test.constprop.0.cold:0x3a44f","MPID_Progress_test.constprop.0.cold:0x3a66e","MPID_Progress_test.constprop.0.cold:0x3a86c","MPID_Progress_test.constprop.0.cold:0x3aabb","MPID_Progress_test.constprop.0.cold:0x3acda","MPID_Progress_test.constprop.0.cold:0x3af0e","MPID_Progress_test.constprop.0.cold:0x3b142","MPID_Progress_test.constprop.0.cold:0x3b361","MPID_Progress_test.constprop.0.cold:0x3dcae","MPID_Progress_test.constprop.0.cold:0x3fda2","MPID_Progress_test.constprop.0.cold:0x403b1","MPID_Progress_test.constprop.0.cold:0x4096c","MPID_Progress_test.constprop.0.cold:0x40db1","MPID_Progress_test.constprop.0.cold:0x410c7","MPID_Progress_test.constprop.0.cold:0x41692","MPID_Progress_test.constprop.0.cold:0x41a8f","MPID_Progress_test.constprop.0.cold:0x41e9c","MPID_Progress_test.constprop.0:0x129f10","MPID_Progress_test.constprop.0:0x13e3a0","MPID_Progress_test.constprop.0:0x160f60","MPID_Progress_test.constprop.0:0x177b20","MPID_Progress_test.constprop.0:0x188140","MPID_Progress_test.constprop.0:0x19cf00","MPID_Progress_test.constprop.0:0x1c4660","MPID_Progress_test.constprop.0:0x1e1540","MPID_Progress_test.constprop.0:0x1fb300","MPID_Progress_test.constprop.0:0x211cc0","MPID_Progress_test.constprop.0:0x2c1b20","MPID_Progress_test.constprop.0:0x2d3f20","MPID_Progress_test.constprop.0:0x2e3670","MPID_Progress_test.constprop.0:0x2f2e90","MPID_Progress_test.constprop.0:0x3025f0","MPID_Progress_test.constprop.0:0x311da0","MPID_Progress_test.constprop.0:0x321b10","MPID_Progress_test.constprop.0:0x330850","MPID_Progress_test.constprop.0:0x343130","MPID_Progress_test.constprop.0:0x351cd0","MPID_Progress_test.constprop.0:0x360ca0","MPID_Progress_test.constprop.0:0x371370","MPID_Progress_test.constprop.0:0x380600","MPID_Progress_test.constprop.0:0x489390","MPID_Progress_test.constprop.0:0x519310","MPID_Progress_test.constprop.0:0x553990","MPID_Progress_test.constprop.0:0x573ac0","MPID_Progress_test.constprop.0:0x5db810","MPID_Progress_test.constprop.0:0x606870","MPID_Progress_test.constprop.0:0x62a620","MPID_Progress_test.constprop.0:0x6421f0","MPID_Progress_test.constprop.0:0x67ce60","MPID_Progress_test.constprop.0:0x6a8c80","MPID_Progress_test.constprop.0:0x6ccd40","MPID_Progress_test.part.0.cold:0x3da3a","MPID_Progress_test.part.0.cold:0x3f5a0","MPID_Progress_test.part.0.cold:0x41890","MPID_Progress_test.part.0.isra.0","MPID_Progress_test.part.0:0x469220","MPID_Progress_test.part.0:0x49f330","MPID_Progress_test.part.0:0x529230","MPID_Progress_test.part.0:0x53bc90","MPID_Progress_test.part.0:0x697a70","MPID_Progress_wait","MPID_Psend_init","MPID_Put_stream","MPID_Raccumulate.constprop.0","MPID_Raccumulate.constprop.0.cold","MPID_Recv_enqueue","MPID_Recv_init.constprop.0","MPID_Recv_init.constprop.0.cold","MPID_Request_complete.isra.0:0x11ef70","MPID_Request_complete.isra.0:0x133470","MPID_Request_complete.isra.0:0x140d20","MPID_Request_complete.isra.0:0x152cd0","MPID_Request_complete.isra.0:0x169890","MPID_Request_complete.isra.0:0x17d1a0","MPID_Request_complete.isra.0:0x191fd0","MPID_Request_complete.isra.0:0x1a02e0","MPID_Request_complete.isra.0:0x1b63b0","MPID_Request_complete.isra.0:0x1d3290","MPID_Request_complete.isra.0:0x1ea520","MPID_Request_complete.isra.0:0x200ee0","MPID_Request_complete.isra.0:0x21c9d0","MPID_Request_complete.isra.0:0x22fef0","MPID_Request_complete.isra.0:0x2404f0","MPID_Request_complete.isra.0:0x25abe0","MPID_Request_complete.isra.0:0x278830","MPID_Request_complete.isra.0:0x28b650","MPID_Request_complete.isra.0:0x295020","MPID_Request_complete.isra.0:0x2a8e30","MPID_Request_complete.isra.0:0x2b6af0","MPID_Request_complete.isra.0:0x2c8a80","MPID_Request_complete.isra.0:0x2d81d0","MPID_Request_complete.isra.0:0x2e79f0","MPID_Request_complete.isra.0:0x2f7150","MPID_Request_complete.isra.0:0x306900","MPID_Request_complete.isra.0:0x317400","MPID_Request_complete.isra.0:0x326140","MPID_Request_complete.isra.0:0x338a50","MPID_Request_complete.isra.0:0x3475f0","MPID_Request_complete.isra.0:0x3557d0","MPID_Request_complete.isra.0:0x365ea0","MPID_Request_complete.isra.0:0x375f20","MPID_Request_complete.isra.0:0x41b520","MPID_Request_complete.isra.0:0x4573e0","MPID_Request_complete.isra.0:0x480400","MPID_Request_complete.isra.0:0x493670","MPID_Request_complete.isra.0:0x4b74e0","MPID_Request_complete.isra.0:0x4f6f60","MPID_Request_complete.isra.0:0x506970","MPID_Request_complete.isra.0:0x51d680","MPID_Request_complete.isra.0:0x52faa0","MPID_Request_complete.isra.0:0x547be0","MPID_Request_complete.isra.0:0x562f50","MPID_Request_complete.isra.0:0x5ca470","MPID_Request_complete.isra.0:0x5e14d0","MPID_Request_complete.isra.0:0x5e9af0","MPID_Request_complete.isra.0:0x5fbd10","MPID_Request_complete.isra.0:0x617c10","MPID_Request_complete.isra.0:0x62fd50","MPID_Request_complete.isra.0:0x65ed80","MPID_Request_complete.isra.0:0x6712a0","MPID_Request_complete.isra.0:0x68d390","MPID_Request_complete.isra.0:0x69e470","MPID_Request_complete.isra.0:0x6bbbb0","MPID_Rget.part.0","MPID_Rget_accumulate.constprop.0","MPID_Rget_accumulate.constprop.0.cold","MPID_Rput.part.0","MPID_Rsend_init.part.0","MPID_ST_create_queue","MPID_ST_enqueue_msg","MPID_ST_enqueue_start","MPID_ST_enqueue_wait","MPID_ST_free_queue","MPID_ST_get_queue_comm_ptr","MPID_ST_init","MPID_ST_initialized","MPID_ST_progress_queue","MPID_ST_used","MPID_Send_enqueue","MPID_Send_init.part.0","MPID_Setup_trecv.constprop.0","MPID_Ssend_init.part.0","MPID_Startall.constprop.0","MPID_Stream_create_hook","MPID_Stream_free_hook","MPID_Stream_progress.isra.0","MPID_Test.constprop.0","MPID_Test.constprop.0.isra.0","MPID_Testany","MPID_Testsome","MPID_Type_commit_hook","MPID_Type_free_hook","MPID_Wait.constprop.0:0x19f6c0","MPID_Wait.constprop.0:0x1a82d0","MPID_Wait.constprop.0:0x1b4e10","MPID_Wait.constprop.0:0x1d1cf0","MPID_Wait.constprop.0:0x455c50","MPID_Wait.constprop.0:0x505320","MPID_Wait.constprop.0:0x560280","MPID_Wait:0x18af80","MPID_Wait:0x53f000","MPID_Wait_enqueue","MPID_Waitall_enqueue","MPID_Waitany","MPID_Waitsome","MPID_Win_allocate","MPID_Win_allocate_shared","MPID_Win_attach","MPID_Win_complete_stream","MPID_Win_create","MPID_Win_create_dynamic","MPID_Win_create_stream","MPID_Win_detach","MPID_Win_free","MPID_Win_get_info","MPID_Win_post_stream","MPID_Win_progress_stream","MPID_Win_set_info","MPID_Win_start_stream","MPID_Win_stream","MPID_Win_wait_stream","MPIOI_File_iread","MPIOI_File_iread_all","MPIOI_File_iread_shared","MPIOI_File_iwrite","MPIOI_File_iwrite_all","MPIOI_File_iwrite_shared","MPIOI_File_read","MPIOI_File_read_all","MPIOI_File_read_all_begin","MPIOI_File_read_all_end","MPIOI_File_read_ordered","MPIOI_File_read_ordered_begin","MPIOI_File_read_shared","MPIOI_File_write","MPIOI_File_write_all","MPIOI_File_write_all_begin","MPIOI_File_write_all_end","MPIOI_File_write_ordered","MPIOI_File_write_ordered_begin","MPIOI_File_write_shared","MPIOI_Register_datarep","MPIOI_Type_block","MPIOI_Type_cyclic","MPIO_Completed_request_create","MPIO_Err_create_code","MPIO_Err_return_comm","MPIO_Err_return_file","MPIO_File_c2f","MPIO_File_create","MPIO_File_f2c","MPIO_File_free","MPIO_File_resolve","MPIR_Abort","MPIR_Abort_impl","MPIR_Add_error_class_impl","MPIR_Add_error_code_impl","MPIR_Add_error_string_impl","MPIR_Add_finalize","MPIR_All_romio_symbols","MPIR_Allgather","MPIR_Allgather.cold","MPIR_Allgather_allcomm_auto","MPIR_Allgather_allcomm_nb","MPIR_Allgather_impl","MPIR_Allgather_init","MPIR_Allgather_init_impl","MPIR_Allgather_inter_local_gather_remote_bcast","MPIR_Allgather_inter_local_gather_remote_bcast.cold","MPIR_Allgather_intra_brucks","MPIR_Allgather_intra_brucks.cold","MPIR_Allgather_intra_k_brucks","MPIR_Allgather_intra_k_brucks.cold","MPIR_Allgather_intra_recursive_doubling","MPIR_Allgather_intra_recursive_doubling.cold","MPIR_Allgather_intra_ring","MPIR_Allgather_intra_ring.cold","MPIR_Allgatherv","MPIR_Allgatherv_allcomm_auto","MPIR_Allgatherv_allcomm_nb","MPIR_Allgatherv_impl","MPIR_Allgatherv_init","MPIR_Allgatherv_init_impl","MPIR_Allgatherv_inter_remote_gather_local_bcast","MPIR_Allgatherv_intra_brucks","MPIR_Allgatherv_intra_brucks.cold","MPIR_Allgatherv_intra_recursive_doubling","MPIR_Allgatherv_intra_recursive_doubling.cold","MPIR_Allgatherv_intra_ring","MPIR_Allgatherv_intra_ring.cold","MPIR_Allreduce","MPIR_Allreduce.cold","MPIR_Allreduce_allcomm_auto","MPIR_Allreduce_allcomm_nb","MPIR_Allreduce_enqueue_impl","MPIR_Allreduce_enqueue_impl.cold","MPIR_Allreduce_impl","MPIR_Allreduce_init","MPIR_Allreduce_init_impl","MPIR_Allreduce_inter_reduce_exchange_bcast","MPIR_Allreduce_inter_reduce_exchange_bcast.cold","MPIR_Allreduce_intra_k_reduce_scatter_allgather","MPIR_Allreduce_intra_k_reduce_scatter_allgather.cold","MPIR_Allreduce_intra_recexch","MPIR_Allreduce_intra_recexch.cold","MPIR_Allreduce_intra_recursive_doubling","MPIR_Allreduce_intra_recursive_doubling.cold","MPIR_Allreduce_intra_reduce_scatter_allgather","MPIR_Allreduce_intra_reduce_scatter_allgather.cold","MPIR_Allreduce_intra_ring","MPIR_Allreduce_intra_ring.cold","MPIR_Allreduce_intra_smp","MPIR_Allreduce_intra_tree","MPIR_Allreduce_intra_tree.cold","MPIR_Alltoall","MPIR_Alltoall.cold","MPIR_Alltoall_allcomm_auto","MPIR_Alltoall_allcomm_nb","MPIR_Alltoall_impl","MPIR_Alltoall_init","MPIR_Alltoall_init_impl","MPIR_Alltoall_inter_pairwise_exchange","MPIR_Alltoall_inter_pairwise_exchange.cold","MPIR_Alltoall_intra_brucks","MPIR_Alltoall_intra_brucks.cold","MPIR_Alltoall_intra_k_brucks","MPIR_Alltoall_intra_k_brucks.cold","MPIR_Alltoall_intra_pairwise","MPIR_Alltoall_intra_pairwise.cold","MPIR_Alltoall_intra_pairwise_sendrecv_replace","MPIR_Alltoall_intra_pairwise_sendrecv_replace.cold","MPIR_Alltoall_intra_scattered","MPIR_Alltoall_intra_scattered.cold","MPIR_Alltoallv","MPIR_Alltoallv_allcomm_auto","MPIR_Alltoallv_allcomm_nb","MPIR_Alltoallv_impl","MPIR_Alltoallv_init","MPIR_Alltoallv_init_impl","MPIR_Alltoallv_inter_pairwise_exchange","MPIR_Alltoallv_inter_pairwise_exchange.cold","MPIR_Alltoallv_intra_pairwise_sendrecv_replace","MPIR_Alltoallv_intra_pairwise_sendrecv_replace.cold","MPIR_Alltoallv_intra_scattered","MPIR_Alltoallv_intra_scattered.cold","MPIR_Alltoallw","MPIR_Alltoallw_allcomm_auto","MPIR_Alltoallw_allcomm_nb","MPIR_Alltoallw_impl","MPIR_Alltoallw_init","MPIR_Alltoallw_init_impl","MPIR_Alltoallw_inter_pairwise_exchange","MPIR_Alltoallw_intra_pairwise_sendrecv_replace","MPIR_Alltoallw_intra_scattered","MPIR_Alltoallw_intra_scattered.cold","MPIR_Assert_fail","MPIR_Assert_fail_fmt","MPIR_Attr_delete_list","MPIR_Attr_dup_list","MPIR_BAND","MPIR_BAND_check_dtype","MPIR_BOR","MPIR_BOR_check_dtype","MPIR_BXOR","MPIR_BXOR_check_dtype","MPIR_Barrier","MPIR_Barrier_allcomm_auto","MPIR_Barrier_allcomm_nb","MPIR_Barrier_impl","MPIR_Barrier_init","MPIR_Barrier_init_impl","MPIR_Barrier_inter_bcast","MPIR_Barrier_intra_dissemination","MPIR_Barrier_intra_k_dissemination","MPIR_Barrier_intra_recexch","MPIR_Barrier_intra_smp","MPIR_Bcast","MPIR_Bcast_allcomm_auto","MPIR_Bcast_allcomm_nb","MPIR_Bcast_impl","MPIR_Bcast_init","MPIR_Bcast_init_impl","MPIR_Bcast_inter_remote_send_local_bcast","MPIR_Bcast_intra_binomial","MPIR_Bcast_intra_pipelined_tree","MPIR_Bcast_intra_pipelined_tree.cold","MPIR_Bcast_intra_scatter_recursive_doubling_allgather","MPIR_Bcast_intra_scatter_ring_allgather","MPIR_Bcast_intra_smp","MPIR_Bcast_intra_smp.cold","MPIR_Bcast_intra_tree","MPIR_Bcast_intra_tree.cold","MPIR_Bsend_attach","MPIR_Bsend_check_active","MPIR_Bsend_detach","MPIR_Bsend_finalize","MPIR_Bsend_free_req_seg","MPIR_Bsend_free_segment","MPIR_Bsend_isend","MPIR_Buffer_detach_impl","MPIR_CRAY_Allgather","MPIR_CRAY_Allgather.cold","MPIR_CRAY_Allgather_very_large_msg","MPIR_CRAY_Allgather_very_large_msg.cold","MPIR_CRAY_Allgatherv","MPIR_CRAY_Allgatherv.cold","MPIR_CRAY_Allreduce","MPIR_CRAY_Allreduce.cold","MPIR_CRAY_Allreduce_chunked","MPIR_CRAY_Allreduce_chunked.cold","MPIR_CRAY_Alltoall","MPIR_CRAY_Alltoall.cold","MPIR_CRAY_Alltoall_chunking","MPIR_CRAY_Alltoall_throttled","MPIR_CRAY_Alltoall_throttled.cold","MPIR_CRAY_Alltoallv","MPIR_CRAY_Alltoallv.cold","MPIR_CRAY_Barrier","MPIR_CRAY_Bcast","MPIR_CRAY_Bcast.cold","MPIR_CRAY_Bcast_Tree","MPIR_CRAY_GPU_Allreduce_pipelined","MPIR_CRAY_GPU_Allreduce_pipelined.cold","MPIR_CRAY_Gatherv","MPIR_CRAY_Gatherv.cold","MPIR_CRAY_Igatherv","MPIR_CRAY_Igatherv_sched_impl","MPIR_CRAY_Igatherv_sched_impl.cold","MPIR_CRAY_Reduce","MPIR_CRAY_Reduce.cold","MPIR_CRAY_Reduce_chunked","MPIR_CRAY_Reduce_chunked.cold","MPIR_CRAY_SP_Gatherv","MPIR_CRAY_SP_Gatherv.cold","MPIR_CRAY_Scatterv","MPIR_CRAY_Scatterv.cold","MPIR_CRAY_coll_sync_stats_print","MPIR_Call_attr_copy","MPIR_Call_attr_delete","MPIR_Cancel_impl","MPIR_Cart_coords_impl","MPIR_Cart_create_impl","MPIR_Cart_get_impl","MPIR_Cart_map_impl","MPIR_Cart_rank_impl","MPIR_Cart_shift_impl","MPIR_Cart_sub_impl","MPIR_Cartdim_get_impl","MPIR_Close_port_impl","MPIR_Coll_comm_init","MPIR_Coll_host_buffer_alloc","MPIR_Coll_host_buffer_free","MPIR_Coll_host_buffer_persist_set","MPIR_Coll_host_buffer_persist_set.cold","MPIR_Coll_host_buffer_swap_back","MPIR_Coll_host_buffer_swap_back.cold","MPIR_Coll_safe_to_block","MPIR_Comm_accept_impl","MPIR_Comm_agree_impl","MPIR_Comm_call_errhandler_impl","MPIR_Comm_commit","MPIR_Comm_commit_internal","MPIR_Comm_compare_impl","MPIR_Comm_connect_impl","MPIR_Comm_copy_stream","MPIR_Comm_create","MPIR_Comm_create_errhandler_impl","MPIR_Comm_create_from_group_impl","MPIR_Comm_create_group_impl","MPIR_Comm_create_impl","MPIR_Comm_create_inter","MPIR_Comm_create_intra","MPIR_Comm_create_keyval_impl","MPIR_Comm_create_subcomms","MPIR_Comm_delete_attr_impl","MPIR_Comm_delete_internal","MPIR_Comm_disconnect_impl","MPIR_Comm_dup_impl","MPIR_Comm_dup_with_info_impl","MPIR_Comm_free_impl","MPIR_Comm_free_keyval_impl","MPIR_Comm_get_attr_impl","MPIR_Comm_get_errhandler_impl","MPIR_Comm_get_failed_impl","MPIR_Comm_get_info_impl","MPIR_Comm_get_name_impl","MPIR_Comm_get_parent_impl","MPIR_Comm_get_stream_impl","MPIR_Comm_group_impl","MPIR_Comm_hint_init","MPIR_Comm_idup_impl","MPIR_Comm_idup_with_info_impl","MPIR_Comm_is_parent_comm","MPIR_Comm_join_impl","MPIR_Comm_map_dup","MPIR_Comm_map_free","MPIR_Comm_map_irregular","MPIR_Comm_rank_impl","MPIR_Comm_register_hint","MPIR_Comm_release_always","MPIR_Comm_remote_group_impl","MPIR_Comm_remote_size_impl","MPIR_Comm_set_attr_impl","MPIR_Comm_set_errhandler_impl","MPIR_Comm_set_info_impl","MPIR_Comm_set_name_impl","MPIR_Comm_shrink_impl","MPIR_Comm_size_impl","MPIR_Comm_spawn_impl","MPIR_Comm_spawn_multiple_impl","MPIR_Comm_split_filesystem","MPIR_Comm_split_impl","MPIR_Comm_split_type","MPIR_Comm_split_type_by_node","MPIR_Comm_split_type_hw_guided","MPIR_Comm_split_type_hw_unguided","MPIR_Comm_split_type_impl","MPIR_Comm_split_type_nbhd_common_dir","MPIR_Comm_split_type_neighborhood","MPIR_Comm_split_type_network_topo","MPIR_Comm_split_type_node_topo","MPIR_Comm_split_type_self","MPIR_Comm_test_inter_impl","MPIR_Compare_equal","MPIR_Copy_array","MPIR_Cray_Memcpy_wrapper","MPIR_Create_unnamed_predefined","MPIR_Create_unnamed_predefined.cold","MPIR_Csel_create_from_buf","MPIR_Csel_create_from_file","MPIR_Csel_free","MPIR_Csel_prune","MPIR_Csel_search","MPIR_Dataloop_create_blockindexed","MPIR_Dataloop_create_blockindexed.cold","MPIR_Dataloop_create_contiguous","MPIR_Dataloop_create_contiguous.cold","MPIR_Dataloop_create_indexed","MPIR_Dataloop_create_indexed.cold","MPIR_Dataloop_create_resized","MPIR_Dataloop_create_struct","MPIR_Dataloop_create_struct.cold","MPIR_Dataloop_create_vector","MPIR_Dataloop_create_vector.cold","MPIR_Dataloop_dup","MPIR_Dataloop_flatten","MPIR_Dataloop_flatten_size","MPIR_Dataloop_free","MPIR_Dataloop_get_contig","MPIR_Dataloop_iov","MPIR_Dataloop_iov_len","MPIR_Dataloop_printf","MPIR_Dataloop_printf.cold","MPIR_Dataloop_size_external32","MPIR_Dataloop_size_external32.cold","MPIR_Dataloop_unflatten","MPIR_Dataloop_update_contig","MPIR_Datatype_builtin_to_string","MPIR_Datatype_builtintype_alignment","MPIR_Datatype_combiner_to_string","MPIR_Datatype_commit_pairtypes","MPIR_Datatype_debug","MPIR_Datatype_free","MPIR_Datatype_free.cold","MPIR_Datatype_get_flattened","MPIR_Datatype_get_flattened.cold","MPIR_Datatype_init_predefined","MPIR_Datatype_init_predefined.cold","MPIR_Datatype_iscontig","MPIR_Datatype_iscontig.cold","MPIR_Datatype_set_contents","MPIR_Datatype_set_contents.cold","MPIR_Datatype_set_contents.constprop.0.cold:0x3ed1c","MPIR_Datatype_set_contents.constprop.0.cold:0x3ed8b","MPIR_Datatype_set_contents.constprop.0:0x4e4d10","MPIR_Datatype_set_contents.constprop.0:0x4e6f20","MPIR_Debugger_set_aborting","MPIR_Delete_error_class_impl","MPIR_Delete_error_code_impl","MPIR_Delete_error_string_impl","MPIR_Dims_create_impl","MPIR_Dist_graph_create_adjacent_impl","MPIR_Dist_graph_create_impl","MPIR_Dist_graph_neighbors_count_impl","MPIR_Dist_graph_neighbors_impl","MPIR_Dup_fn","MPIR_Dynerrcodes_finalize","MPIR_Err_Uninitialized","MPIR_Err_combine_codes","MPIR_Err_create_code","MPIR_Err_create_code_valist","MPIR_Err_create_code_valist.cold","MPIR_Err_get_string","MPIR_Err_init","MPIR_Err_is_fatal","MPIR_Err_return_comm","MPIR_Err_return_comm.cold","MPIR_Err_return_win","MPIR_Errhandler_free_impl","MPIR_Errhandler_free_impl.part.0","MPIR_Error_class_impl","MPIR_Error_string_impl","MPIR_Errutil_is_initialized","MPIR_Exscan","MPIR_Exscan_allcomm_auto","MPIR_Exscan_allcomm_nb","MPIR_Exscan_impl","MPIR_Exscan_init","MPIR_Exscan_init_impl","MPIR_Exscan_intra_recursive_doubling","MPIR_Exscan_intra_recursive_doubling.cold","MPIR_Ext_assert_fail","MPIR_Ext_cs_enter","MPIR_Ext_cs_exit","MPIR_Ext_cs_yield","MPIR_Ext_datatype_iscommitted","MPIR_Ext_datatype_iscommitted.cold","MPIR_Ext_init","MPIR_Ext_mutex_finalize","MPIR_Ext_mutex_init","MPIR_File_call_cxx_errhandler","MPIR_File_call_errhandler_impl","MPIR_File_call_errhandler_impl.cold","MPIR_File_create_errhandler_impl","MPIR_File_get_errhandler_impl","MPIR_File_get_errhandler_impl.cold","MPIR_File_set_errhandler_impl","MPIR_Finalize_impl","MPIR_Finalized_impl","MPIR_Find_external","MPIR_Find_local","MPIR_FreeF90Datatypes","MPIR_Free_contextid","MPIR_Gather","MPIR_Gather_allcomm_auto","MPIR_Gather_allcomm_nb","MPIR_Gather_impl","MPIR_Gather_init","MPIR_Gather_init_impl","MPIR_Gather_inter_linear","MPIR_Gather_inter_linear.cold","MPIR_Gather_inter_local_gather_remote_send","MPIR_Gather_inter_local_gather_remote_send.cold","MPIR_Gather_intra_binomial","MPIR_Gather_intra_binomial.cold","MPIR_Gatherv","MPIR_Gatherv_allcomm_auto","MPIR_Gatherv_allcomm_linear","MPIR_Gatherv_allcomm_linear.cold","MPIR_Gatherv_allcomm_nb","MPIR_Gatherv_impl","MPIR_Gatherv_init","MPIR_Gatherv_init_impl","MPIR_Get_address_impl","MPIR_Get_contextid_nonblock","MPIR_Get_contextid_sparse","MPIR_Get_contextid_sparse_group","MPIR_Get_count_impl","MPIR_Get_count_impl.cold","MPIR_Get_elements_x_impl","MPIR_Get_elements_x_impl.cold","MPIR_Get_file_error_routine","MPIR_Get_intercomm_contextid","MPIR_Get_intercomm_contextid_nonblock","MPIR_Get_internode_rank","MPIR_Get_internode_rank.cold","MPIR_Get_intranode_rank","MPIR_Get_intranode_rank.cold","MPIR_Get_library_version_impl","MPIR_Get_node_id","MPIR_Get_version_impl","MPIR_Graph_create_impl","MPIR_Graph_get_impl","MPIR_Graph_map_impl","MPIR_Graph_neighbors_count_impl","MPIR_Graph_neighbors_impl","MPIR_Graph_optimized","MPIR_Graphdims_get_impl","MPIR_Grequest_cancel","MPIR_Grequest_class_allocate_impl","MPIR_Grequest_class_allocate_impl.cold","MPIR_Grequest_class_create_impl","MPIR_Grequest_complete_impl","MPIR_Grequest_free","MPIR_Grequest_free_classes_on_finalize","MPIR_Grequest_poll","MPIR_Grequest_query","MPIR_Grequest_start_impl","MPIR_Group_check_subset","MPIR_Group_check_valid_ranges","MPIR_Group_check_valid_ranks","MPIR_Group_compare_impl","MPIR_Group_create","MPIR_Group_difference_impl","MPIR_Group_excl_impl","MPIR_Group_free_impl","MPIR_Group_from_session_pset_impl","MPIR_Group_incl_impl","MPIR_Group_init","MPIR_Group_intersection_impl","MPIR_Group_range_excl_impl","MPIR_Group_range_incl_impl","MPIR_Group_rank_impl","MPIR_Group_release","MPIR_Group_setup_lpid_pairs","MPIR_Group_size_impl","MPIR_Group_translate_ranks_impl","MPIR_Group_union_impl","MPIR_Handle_fatal_error","MPIR_Handle_finalize:0x107260","MPIR_Handle_finalize:0x10c4e0","MPIR_Handle_finalize:0x1118a0","MPIR_Handle_finalize:0x119220","MPIR_Handle_finalize:0x11eae0","MPIR_Handle_finalize:0x12cae0","MPIR_Handle_finalize:0x132fe0","MPIR_Handle_finalize:0x1410a0","MPIR_Handle_finalize:0x147120","MPIR_Handle_finalize:0x152630","MPIR_Handle_finalize:0x1691f0","MPIR_Handle_finalize:0x17cd10","MPIR_Handle_finalize:0x18b210","MPIR_Handle_finalize:0x191b40","MPIR_Handle_finalize:0x19ff30","MPIR_Handle_finalize:0x1a5cd0","MPIR_Handle_finalize:0x1a8980","MPIR_Handle_finalize:0x1b2950","MPIR_Handle_finalize:0x1b5d10","MPIR_Handle_finalize:0x1c8750","MPIR_Handle_finalize:0x1d2bf0","MPIR_Handle_finalize:0x1e5020","MPIR_Handle_finalize:0x1ea170","MPIR_Handle_finalize:0x200b30","MPIR_Handle_finalize:0x21c540","MPIR_Handle_finalize:0x22fa60","MPIR_Handle_finalize:0x240060","MPIR_Handle_finalize:0x250cf0","MPIR_Handle_finalize:0x25a750","MPIR_Handle_finalize:0x26d8f0","MPIR_Handle_finalize:0x2783a0","MPIR_Handle_finalize:0x28b0a0","MPIR_Handle_finalize:0x294b90","MPIR_Handle_finalize:0x2a8880","MPIR_Handle_finalize:0x2b62a0","MPIR_Handle_finalize:0x2c85f0","MPIR_Handle_finalize:0x2d7d40","MPIR_Handle_finalize:0x2e7560","MPIR_Handle_finalize:0x2f6cc0","MPIR_Handle_finalize:0x306470","MPIR_Handle_finalize:0x316d60","MPIR_Handle_finalize:0x325aa0","MPIR_Handle_finalize:0x333450","MPIR_Handle_finalize:0x3385c0","MPIR_Handle_finalize:0x347160","MPIR_Handle_finalize:0x355420","MPIR_Handle_finalize:0x365af0","MPIR_Handle_finalize:0x375a90","MPIR_Handle_finalize:0x38f5e0","MPIR_Handle_finalize:0x390a50","MPIR_Handle_finalize:0x4004b0","MPIR_Handle_finalize:0x412780","MPIR_Handle_finalize:0x41b170","MPIR_Handle_finalize:0x42ce0","MPIR_Handle_finalize:0x43ee0","MPIR_Handle_finalize:0x457030","MPIR_Handle_finalize:0x478390","MPIR_Handle_finalize:0x4932c0","MPIR_Handle_finalize:0x4ac2a0","MPIR_Handle_finalize:0x4af4c0","MPIR_Handle_finalize:0x4b3290","MPIR_Handle_finalize:0x4b7050","MPIR_Handle_finalize:0x4db8a0","MPIR_Handle_finalize:0x4de6b0","MPIR_Handle_finalize:0x4e9250","MPIR_Handle_finalize:0x4e9cb0","MPIR_Handle_finalize:0x4f1050","MPIR_Handle_finalize:0x4f3720","MPIR_Handle_finalize:0x4f6ad0","MPIR_Handle_finalize:0x5065c0","MPIR_Handle_finalize:0x51cfe0","MPIR_Handle_finalize:0x52f390","MPIR_Handle_finalize:0x542ec0","MPIR_Handle_finalize:0x547750","MPIR_Handle_finalize:0x55e100","MPIR_Handle_finalize:0x561590","MPIR_Handle_finalize:0x577680","MPIR_Handle_finalize:0x5b91e0","MPIR_Handle_finalize:0x5c4c00","MPIR_Handle_finalize:0x5c9ec0","MPIR_Handle_finalize:0x5e0e20","MPIR_Handle_finalize:0x5e9740","MPIR_Handle_finalize:0x5fa530","MPIR_Handle_finalize:0x60aa20","MPIR_Handle_finalize:0x60cf60","MPIR_Handle_finalize:0x612d50","MPIR_Handle_finalize:0x617860","MPIR_Handle_finalize:0x62f9a0","MPIR_Handle_finalize:0x656650","MPIR_Handle_finalize:0x65e3b0","MPIR_Handle_finalize:0x664030","MPIR_Handle_finalize:0x66f650","MPIR_Handle_finalize:0x68cf00","MPIR_Handle_finalize:0x69dfe0","MPIR_Handle_finalize:0x6b3cb0","MPIR_Handle_finalize:0x6bb660","MPIR_Handle_get_kind_str","MPIR_Handle_get_ptr_indirect.constprop.0:0x1e94a0","MPIR_Handle_get_ptr_indirect.constprop.0:0x1ffe60","MPIR_Handle_get_ptr_indirect.constprop.0:0x41a6e0","MPIR_Handle_get_ptr_indirect.constprop.0:0x477790","MPIR_Handle_get_ptr_indirect.constprop.0:0x4a4710","MPIR_Handle_get_ptr_indirect.constprop.0:0x4f6150","MPIR_Handle_get_ptr_indirect.constprop.0:0x5058b0","MPIR_Handle_get_ptr_indirect.constprop.0:0x51c630","MPIR_Handle_get_ptr_indirect.constprop.0:0x52ea10","MPIR_Handle_get_ptr_indirect.constprop.0:0x546dd0","MPIR_Handle_get_ptr_indirect.constprop.0:0x560810","MPIR_Handle_get_ptr_indirect.constprop.0:0x5c93f0","MPIR_Handle_get_ptr_indirect.constprop.0:0x5f9a50","MPIR_Handle_get_ptr_indirect.constprop.0:0x616b00","MPIR_Handle_get_ptr_indirect.constprop.0:0x62ecd0","MPIR_Handle_get_ptr_indirect.constprop.0:0x66e6b0","MPIR_Handle_get_ptr_indirect.constprop.0:0x68c550","MPIR_Handle_get_ptr_indirect.constprop.0:0x69d660","MPIR_Handle_get_ptr_indirect:0x116490","MPIR_Handle_get_ptr_indirect:0x117160","MPIR_Handle_get_ptr_indirect:0x11d340","MPIR_Handle_get_ptr_indirect:0x1317e0","MPIR_Handle_get_ptr_indirect:0x151060","MPIR_Handle_get_ptr_indirect:0x164990","MPIR_Handle_get_ptr_indirect:0x167c20","MPIR_Handle_get_ptr_indirect:0x17b570","MPIR_Handle_get_ptr_indirect:0x190340","MPIR_Handle_get_ptr_indirect:0x1b46b0","MPIR_Handle_get_ptr_indirect:0x1ce3c0","MPIR_Handle_get_ptr_indirect:0x1d1590","MPIR_Handle_get_ptr_indirect:0x21ac70","MPIR_Handle_get_ptr_indirect:0x22e1c0","MPIR_Handle_get_ptr_indirect:0x23e760","MPIR_Handle_get_ptr_indirect:0x258e80","MPIR_Handle_get_ptr_indirect:0x276aa0","MPIR_Handle_get_ptr_indirect:0x293290","MPIR_Handle_get_ptr_indirect:0x2b46b0","MPIR_Handle_get_ptr_indirect:0x2c6d20","MPIR_Handle_get_ptr_indirect:0x2d6470","MPIR_Handle_get_ptr_indirect:0x2e5c90","MPIR_Handle_get_ptr_indirect:0x2f53f0","MPIR_Handle_get_ptr_indirect:0x304ba0","MPIR_Handle_get_ptr_indirect:0x3157c0","MPIR_Handle_get_ptr_indirect:0x324500","MPIR_Handle_get_ptr_indirect:0x337050","MPIR_Handle_get_ptr_indirect:0x345bf0","MPIR_Handle_get_ptr_indirect:0x353830","MPIR_Handle_get_ptr_indirect:0x363f00","MPIR_Handle_get_ptr_indirect:0x374520","MPIR_Handle_get_ptr_indirect:0x455490","MPIR_Handle_get_ptr_indirect:0x491c70","MPIR_Handle_get_ptr_indirect:0x4b5a80","MPIR_Handle_get_ptr_indirect:0x4d550","MPIR_Handle_get_ptr_indirect:0x4f460","MPIR_Handle_get_ptr_indirect:0x51560","MPIR_Handle_get_ptr_indirect:0x53970","MPIR_Handle_get_ptr_indirect:0x55ee0","MPIR_Handle_get_ptr_indirect:0x57b10","MPIR_Handle_get_ptr_indirect:0x5b770","MPIR_Handle_get_ptr_indirect:0x67c20","MPIR_Handle_get_ptr_indirect:0x69170","MPIR_Handle_get_ptr_indirect:0x6a9a0","MPIR_Handle_get_ptr_indirect:0x6b97a0","MPIR_Handle_get_ptr_indirect:0x6c580","MPIR_Handle_get_ptr_indirect:0x6e4c0","MPIR_Handle_get_ptr_indirect:0x704a0","MPIR_Handle_get_ptr_indirect:0x72780","MPIR_Handle_get_ptr_indirect:0x74b70","MPIR_Handle_get_ptr_indirect:0x771e0","MPIR_Handle_get_ptr_indirect:0x79020","MPIR_Handle_get_ptr_indirect:0x7b310","MPIR_Handle_get_ptr_indirect:0x834e0","MPIR_Handle_get_ptr_indirect:0x84900","MPIR_Handle_get_ptr_indirect:0x863c0","MPIR_Handle_get_ptr_indirect:0x88290","MPIR_Handle_get_ptr_indirect:0x8a4f0","MPIR_Handle_get_ptr_indirect:0x8dc10","MPIR_Handle_get_ptr_indirect:0x8f5e0","MPIR_Handle_get_ptr_indirect:0x936b0","MPIR_Handle_get_ptr_indirect:0x95320","MPIR_Handle_get_ptr_indirect:0x97000","MPIR_Handle_get_ptr_indirect:0x98b40","MPIR_Handle_get_ptr_indirect:0x9a600","MPIR_Handle_get_ptr_indirect:0x9c5a0","MPIR_Handle_get_ptr_indirect:0xa0230","MPIR_Handle_get_ptr_indirect:0xa3c60","MPIR_Handle_get_ptr_indirect:0xa7810","MPIR_Handle_get_ptr_indirect:0xa9600","MPIR_Handle_get_ptr_indirect:0xab410","MPIR_Handle_get_ptr_indirect:0xb1fa0","MPIR_Handle_get_ptr_indirect:0xb3d80","MPIR_Handle_get_ptr_indirect:0xb6ed0","MPIR_Handle_get_ptr_indirect:0xb8cb0","MPIR_Handle_get_ptr_indirect:0xba900","MPIR_Handle_get_ptr_indirect:0xbc840","MPIR_Handle_get_ptr_indirect:0xbe900","MPIR_Handle_get_ptr_indirect:0xc04e0","MPIR_Handle_get_ptr_indirect:0xc2420","MPIR_Handle_get_ptr_indirect:0xc44b0","MPIR_Handle_get_ptr_indirect:0xc6740","MPIR_Handle_get_ptr_indirect:0xc8b50","MPIR_Handle_indirect_init.constprop.0:0x38f440","MPIR_Handle_indirect_init.constprop.0:0x4db6d0","MPIR_Handle_indirect_init.constprop.0:0x4de510","MPIR_Handle_indirect_init.constprop.0:0x4e90b0","MPIR_Handle_indirect_init.constprop.0:0x542d40","MPIR_Handle_indirect_init.constprop.0:0x5f9d40","MPIR_Handle_obj_alloc_unsafe.constprop.0:0x477a80","MPIR_Handle_obj_alloc_unsafe.constprop.0:0x5e8f60","MPIR_Iallgather","MPIR_Iallgather_allcomm_sched_auto","MPIR_Iallgather_impl","MPIR_Iallgather_inter_sched_auto","MPIR_Iallgather_inter_sched_local_gather_remote_bcast","MPIR_Iallgather_inter_sched_local_gather_remote_bcast.cold","MPIR_Iallgather_intra_sched_auto","MPIR_Iallgather_intra_sched_auto.cold","MPIR_Iallgather_intra_sched_brucks","MPIR_Iallgather_intra_sched_brucks.cold","MPIR_Iallgather_intra_sched_recursive_doubling","MPIR_Iallgather_intra_sched_recursive_doubling.cold","MPIR_Iallgather_intra_sched_ring","MPIR_Iallgather_intra_sched_ring.cold","MPIR_Iallgather_sched_impl","MPIR_Iallgatherv","MPIR_Iallgatherv_allcomm_sched_auto","MPIR_Iallgatherv_impl","MPIR_Iallgatherv_inter_sched_auto","MPIR_Iallgatherv_inter_sched_remote_gather_local_bcast","MPIR_Iallgatherv_intra_sched_auto","MPIR_Iallgatherv_intra_sched_auto.cold","MPIR_Iallgatherv_intra_sched_brucks","MPIR_Iallgatherv_intra_sched_brucks.cold","MPIR_Iallgatherv_intra_sched_recursive_doubling","MPIR_Iallgatherv_intra_sched_ring","MPIR_Iallgatherv_intra_sched_ring.cold","MPIR_Iallgatherv_intra_throttled","MPIR_Iallgatherv_intra_throttled.cold","MPIR_Iallgatherv_sched_impl","MPIR_Iallreduce","MPIR_Iallreduce_allcomm_sched_auto","MPIR_Iallreduce_impl","MPIR_Iallreduce_inter_sched_auto","MPIR_Iallreduce_inter_sched_remote_reduce_local_bcast","MPIR_Iallreduce_intra_cxi_trgrd","MPIR_Iallreduce_intra_cxi_trgrd.cold","MPIR_Iallreduce_intra_sched_auto","MPIR_Iallreduce_intra_sched_auto.cold","MPIR_Iallreduce_intra_sched_naive","MPIR_Iallreduce_intra_sched_recursive_doubling","MPIR_Iallreduce_intra_sched_recursive_doubling.cold","MPIR_Iallreduce_intra_sched_reduce_scatter_allgather","MPIR_Iallreduce_intra_sched_reduce_scatter_allgather.cold","MPIR_Iallreduce_intra_sched_smp","MPIR_Iallreduce_sched_impl","MPIR_Ialltoall","MPIR_Ialltoall_allcomm_sched_auto","MPIR_Ialltoall_impl","MPIR_Ialltoall_inter_sched_auto","MPIR_Ialltoall_inter_sched_pairwise_exchange","MPIR_Ialltoall_inter_sched_pairwise_exchange.cold","MPIR_Ialltoall_intra_sched_auto","MPIR_Ialltoall_intra_sched_auto.cold","MPIR_Ialltoall_intra_sched_brucks","MPIR_Ialltoall_intra_sched_brucks.cold","MPIR_Ialltoall_intra_sched_inplace","MPIR_Ialltoall_intra_sched_pairwise","MPIR_Ialltoall_intra_sched_pairwise.cold","MPIR_Ialltoall_intra_sched_permuted_sendrecv","MPIR_Ialltoall_intra_sched_permuted_sendrecv.cold","MPIR_Ialltoall_sched_impl","MPIR_Ialltoallv","MPIR_Ialltoallv_allcomm_sched_auto","MPIR_Ialltoallv_impl","MPIR_Ialltoallv_inter_sched_auto","MPIR_Ialltoallv_inter_sched_pairwise_exchange","MPIR_Ialltoallv_inter_sched_pairwise_exchange.cold","MPIR_Ialltoallv_intra_sched_auto","MPIR_Ialltoallv_intra_sched_blocked","MPIR_Ialltoallv_intra_sched_blocked.cold","MPIR_Ialltoallv_intra_sched_inplace","MPIR_Ialltoallv_intra_sched_inplace.cold","MPIR_Ialltoallv_sched_impl","MPIR_Ialltoallw","MPIR_Ialltoallw_allcomm_sched_auto","MPIR_Ialltoallw_impl","MPIR_Ialltoallw_inter_sched_auto","MPIR_Ialltoallw_inter_sched_pairwise_exchange","MPIR_Ialltoallw_intra_sched_auto","MPIR_Ialltoallw_intra_sched_blocked","MPIR_Ialltoallw_intra_sched_blocked.cold","MPIR_Ialltoallw_intra_sched_inplace","MPIR_Ialltoallw_intra_sched_inplace.cold","MPIR_Ialltoallw_sched_impl","MPIR_Ibarrier","MPIR_Ibarrier_allcomm_sched_auto","MPIR_Ibarrier_impl","MPIR_Ibarrier_inter_sched_auto","MPIR_Ibarrier_inter_sched_bcast","MPIR_Ibarrier_intra_sched_auto","MPIR_Ibarrier_intra_sched_recursive_doubling","MPIR_Ibarrier_sched_impl","MPIR_Ibcast","MPIR_Ibcast_allcomm_sched_auto","MPIR_Ibcast_impl","MPIR_Ibcast_inter_sched_auto","MPIR_Ibcast_inter_sched_flat","MPIR_Ibcast_intra_cxi_trgrd","MPIR_Ibcast_intra_cxi_trgrd.cold","MPIR_Ibcast_intra_sched_auto","MPIR_Ibcast_intra_sched_auto.cold","MPIR_Ibcast_intra_sched_binomial","MPIR_Ibcast_intra_sched_scatter_recursive_doubling_allgather","MPIR_Ibcast_intra_sched_scatter_ring_allgather","MPIR_Ibcast_intra_sched_smp","MPIR_Ibcast_intra_sched_smp.cold","MPIR_Ibcast_sched_impl","MPIR_Iexscan","MPIR_Iexscan_allcomm_sched_auto","MPIR_Iexscan_impl","MPIR_Iexscan_intra_sched_auto","MPIR_Iexscan_intra_sched_recursive_doubling","MPIR_Iexscan_intra_sched_recursive_doubling.cold","MPIR_Iexscan_sched_impl","MPIR_Igather","MPIR_Igather_allcomm_sched_auto","MPIR_Igather_impl","MPIR_Igather_inter_sched_auto","MPIR_Igather_inter_sched_auto.cold","MPIR_Igather_inter_sched_long","MPIR_Igather_inter_sched_long.cold","MPIR_Igather_inter_sched_short","MPIR_Igather_inter_sched_short.cold","MPIR_Igather_intra_cxi_trgrd","MPIR_Igather_intra_cxi_trgrd.cold","MPIR_Igather_intra_sched_auto","MPIR_Igather_intra_sched_binomial","MPIR_Igather_intra_sched_binomial.cold","MPIR_Igather_sched_impl","MPIR_Igatherv","MPIR_Igatherv_allcomm_sched_auto","MPIR_Igatherv_allcomm_sched_linear","MPIR_Igatherv_allcomm_sched_linear.cold","MPIR_Igatherv_impl","MPIR_Igatherv_inter_sched_auto","MPIR_Igatherv_intra_sched_auto","MPIR_Igatherv_sched_impl","MPIR_Ilocalcopy","MPIR_Ineighbor_allgather","MPIR_Ineighbor_allgather_allcomm_sched_auto","MPIR_Ineighbor_allgather_allcomm_sched_linear","MPIR_Ineighbor_allgather_allcomm_sched_linear.cold","MPIR_Ineighbor_allgather_impl","MPIR_Ineighbor_allgather_intra_sched_auto","MPIR_Ineighbor_allgather_sched_impl","MPIR_Ineighbor_allgatherv","MPIR_Ineighbor_allgatherv_allcomm_sched_auto","MPIR_Ineighbor_allgatherv_allcomm_sched_linear","MPIR_Ineighbor_allgatherv_allcomm_sched_linear.cold","MPIR_Ineighbor_allgatherv_impl","MPIR_Ineighbor_allgatherv_intra_sched_auto","MPIR_Ineighbor_allgatherv_sched_impl","MPIR_Ineighbor_alltoall","MPIR_Ineighbor_alltoall_allcomm_sched_auto","MPIR_Ineighbor_alltoall_allcomm_sched_linear","MPIR_Ineighbor_alltoall_allcomm_sched_linear.cold","MPIR_Ineighbor_alltoall_impl","MPIR_Ineighbor_alltoall_intra_sched_auto","MPIR_Ineighbor_alltoall_sched_impl","MPIR_Ineighbor_alltoallv","MPIR_Ineighbor_alltoallv_allcomm_sched_auto","MPIR_Ineighbor_alltoallv_allcomm_sched_linear","MPIR_Ineighbor_alltoallv_allcomm_sched_linear.cold","MPIR_Ineighbor_alltoallv_impl","MPIR_Ineighbor_alltoallv_intra_sched_auto","MPIR_Ineighbor_alltoallv_sched_impl","MPIR_Ineighbor_alltoallw","MPIR_Ineighbor_alltoallw_allcomm_sched_auto","MPIR_Ineighbor_alltoallw_allcomm_sched_linear","MPIR_Ineighbor_alltoallw_impl","MPIR_Ineighbor_alltoallw_intra_sched_auto","MPIR_Ineighbor_alltoallw_sched_impl","MPIR_Info_alloc","MPIR_Info_create_env_impl","MPIR_Info_decode_hex","MPIR_Info_delete_impl","MPIR_Info_dup_impl","MPIR_Info_free_impl","MPIR_Info_get_impl","MPIR_Info_get_nkeys_impl","MPIR_Info_get_nthkey_impl","MPIR_Info_get_string_impl","MPIR_Info_get_valuelen_impl","MPIR_Info_handle_obj_alloc","MPIR_Info_handle_obj_free","MPIR_Info_lookup","MPIR_Info_push","MPIR_Info_set_hex_impl","MPIR_Info_set_impl","MPIR_Info_setup_env","MPIR_Init_err_dyncodes","MPIR_Init_impl","MPIR_Init_thread_impl","MPIR_Initialized_impl","MPIR_Intercomm_create_from_groups_impl","MPIR_Intercomm_create_impl","MPIR_Intercomm_merge_impl","MPIR_Irecv_enqueue_impl","MPIR_Ireduce","MPIR_Ireduce_allcomm_sched_auto","MPIR_Ireduce_impl","MPIR_Ireduce_inter_sched_auto","MPIR_Ireduce_inter_sched_local_reduce_remote_send","MPIR_Ireduce_inter_sched_local_reduce_remote_send.cold","MPIR_Ireduce_intra_cxi_trgrd","MPIR_Ireduce_intra_sched_auto","MPIR_Ireduce_intra_sched_auto.cold","MPIR_Ireduce_intra_sched_binomial","MPIR_Ireduce_intra_sched_binomial.cold","MPIR_Ireduce_intra_sched_reduce_scatter_gather","MPIR_Ireduce_intra_sched_reduce_scatter_gather.cold","MPIR_Ireduce_intra_sched_smp","MPIR_Ireduce_intra_sched_smp.cold","MPIR_Ireduce_scatter","MPIR_Ireduce_scatter_allcomm_sched_auto","MPIR_Ireduce_scatter_block","MPIR_Ireduce_scatter_block_allcomm_sched_auto","MPIR_Ireduce_scatter_block_impl","MPIR_Ireduce_scatter_block_inter_sched_auto","MPIR_Ireduce_scatter_block_inter_sched_remote_reduce_local_scatterv","MPIR_Ireduce_scatter_block_inter_sched_remote_reduce_local_scatterv.cold","MPIR_Ireduce_scatter_block_intra_sched_auto","MPIR_Ireduce_scatter_block_intra_sched_auto.cold","MPIR_Ireduce_scatter_block_intra_sched_noncommutative","MPIR_Ireduce_scatter_block_intra_sched_pairwise","MPIR_Ireduce_scatter_block_intra_sched_pairwise.cold","MPIR_Ireduce_scatter_block_intra_sched_recursive_doubling","MPIR_Ireduce_scatter_block_intra_sched_recursive_doubling.cold","MPIR_Ireduce_scatter_block_intra_sched_recursive_halving","MPIR_Ireduce_scatter_block_intra_sched_recursive_halving.cold","MPIR_Ireduce_scatter_block_sched_impl","MPIR_Ireduce_scatter_impl","MPIR_Ireduce_scatter_inter_sched_auto","MPIR_Ireduce_scatter_inter_sched_remote_reduce_local_scatterv","MPIR_Ireduce_scatter_inter_sched_remote_reduce_local_scatterv.cold","MPIR_Ireduce_scatter_intra_sched_auto","MPIR_Ireduce_scatter_intra_sched_auto.cold","MPIR_Ireduce_scatter_intra_sched_noncommutative","MPIR_Ireduce_scatter_intra_sched_pairwise","MPIR_Ireduce_scatter_intra_sched_pairwise.cold","MPIR_Ireduce_scatter_intra_sched_recursive_doubling","MPIR_Ireduce_scatter_intra_sched_recursive_doubling.cold","MPIR_Ireduce_scatter_intra_sched_recursive_halving","MPIR_Ireduce_scatter_intra_sched_recursive_halving.cold","MPIR_Ireduce_scatter_sched_impl","MPIR_Ireduce_sched_impl","MPIR_Is_thread_main_impl","MPIR_Iscan","MPIR_Iscan_allcomm_sched_auto","MPIR_Iscan_impl","MPIR_Iscan_intra_sched_auto","MPIR_Iscan_intra_sched_recursive_doubling","MPIR_Iscan_intra_sched_recursive_doubling.cold","MPIR_Iscan_intra_sched_smp","MPIR_Iscan_intra_sched_smp.cold","MPIR_Iscan_sched_impl","MPIR_Iscatter","MPIR_Iscatter_allcomm_sched_auto","MPIR_Iscatter_impl","MPIR_Iscatter_inter_sched_auto","MPIR_Iscatter_inter_sched_auto.cold","MPIR_Iscatter_inter_sched_linear","MPIR_Iscatter_inter_sched_linear.cold","MPIR_Iscatter_inter_sched_remote_send_local_scatter","MPIR_Iscatter_inter_sched_remote_send_local_scatter.cold","MPIR_Iscatter_intra_cxi_trgrd","MPIR_Iscatter_intra_cxi_trgrd.cold","MPIR_Iscatter_intra_sched_auto","MPIR_Iscatter_intra_sched_binomial","MPIR_Iscatter_intra_sched_binomial.cold","MPIR_Iscatter_sched_impl","MPIR_Iscatterv","MPIR_Iscatterv_allcomm_sched_auto","MPIR_Iscatterv_allcomm_sched_linear","MPIR_Iscatterv_allcomm_sched_linear.cold","MPIR_Iscatterv_impl","MPIR_Iscatterv_inter_sched_auto","MPIR_Iscatterv_intra_sched_auto","MPIR_Iscatterv_sched_impl","MPIR_Isend_enqueue_impl","MPIR_Isendrecv_impl","MPIR_Isendrecv_replace_impl","MPIR_LAND","MPIR_LAND_check_dtype","MPIR_LOR","MPIR_LOR_check_dtype","MPIR_LXOR","MPIR_LXOR_check_dtype","MPIR_Localcopy","MPIR_Localcopy_stream","MPIR_Lookup_name_impl","MPIR_MAXF","MPIR_MAXF_check_dtype","MPIR_MAXLOC","MPIR_MAXLOC_check_dtype","MPIR_MINF","MPIR_MINF_check_dtype","MPIR_MINLOC","MPIR_MINLOC_check_dtype","MPIR_MPIOInit","MPIR_MPIR_CVAR_GROUP_COLL_ALGO_from_str","MPIR_Multi_threaded","MPIR_NO_OP","MPIR_NO_OP_check_dtype","MPIR_Neighbor_allgather","MPIR_Neighbor_allgather_allcomm_auto","MPIR_Neighbor_allgather_allcomm_nb","MPIR_Neighbor_allgather_impl","MPIR_Neighbor_allgather_init","MPIR_Neighbor_allgather_init_impl","MPIR_Neighbor_allgatherv","MPIR_Neighbor_allgatherv_allcomm_auto","MPIR_Neighbor_allgatherv_allcomm_nb","MPIR_Neighbor_allgatherv_impl","MPIR_Neighbor_allgatherv_init","MPIR_Neighbor_allgatherv_init_impl","MPIR_Neighbor_alltoall","MPIR_Neighbor_alltoall_allcomm_auto","MPIR_Neighbor_alltoall_allcomm_nb","MPIR_Neighbor_alltoall_impl","MPIR_Neighbor_alltoall_init","MPIR_Neighbor_alltoall_init_impl","MPIR_Neighbor_alltoallv","MPIR_Neighbor_alltoallv_allcomm_auto","MPIR_Neighbor_alltoallv_allcomm_nb","MPIR_Neighbor_alltoallv_impl","MPIR_Neighbor_alltoallv_init","MPIR_Neighbor_alltoallv_init_impl","MPIR_Neighbor_alltoallw","MPIR_Neighbor_alltoallw_allcomm_auto","MPIR_Neighbor_alltoallw_allcomm_nb","MPIR_Neighbor_alltoallw_impl","MPIR_Neighbor_alltoallw_init","MPIR_Neighbor_alltoallw_init_impl","MPIR_Op_builtin_get_shortname","MPIR_Op_builtin_search_by_shortname","MPIR_Op_commutative_impl","MPIR_Op_create_impl","MPIR_Op_create_large_impl","MPIR_Op_free_impl","MPIR_Op_get_alt_datatype","MPIR_Op_is_commutative","MPIR_Op_is_commutative.cold","MPIR_Open_port_impl","MPIR_PROD","MPIR_PROD_check_dtype","MPIR_Pack_external_impl","MPIR_Pack_external_size_impl","MPIR_Pack_impl","MPIR_Pack_size","MPIR_Pack_size.cold","MPIR_Pack_size_impl","MPIR_Parrived","MPIR_Persist_coll_free_cb","MPIR_Persist_coll_free_cb.cold","MPIR_Persist_coll_start","MPIR_Progress_hook_activate","MPIR_Progress_hook_deactivate","MPIR_Progress_hook_deregister","MPIR_Progress_hook_exec_all","MPIR_Progress_hook_register","MPIR_Publish_name_impl","MPIR_Query_thread_impl","MPIR_REPLACE","MPIR_REPLACE_check_dtype","MPIR_ROMIO_Get_file_errhand","MPIR_ROMIO_Set_file_errhand","MPIR_Recv_enqueue_impl","MPIR_Reduce","MPIR_Reduce.cold","MPIR_Reduce_allcomm_auto","MPIR_Reduce_allcomm_nb","MPIR_Reduce_impl","MPIR_Reduce_init","MPIR_Reduce_init_impl","MPIR_Reduce_inter_local_reduce_remote_send","MPIR_Reduce_inter_local_reduce_remote_send.cold","MPIR_Reduce_intra_binomial","MPIR_Reduce_intra_binomial.cold","MPIR_Reduce_intra_reduce_scatter_gather","MPIR_Reduce_intra_reduce_scatter_gather.cold","MPIR_Reduce_intra_smp","MPIR_Reduce_intra_smp.cold","MPIR_Reduce_local","MPIR_Reduce_local.cold","MPIR_Reduce_scatter","MPIR_Reduce_scatter_allcomm_auto","MPIR_Reduce_scatter_allcomm_nb","MPIR_Reduce_scatter_block","MPIR_Reduce_scatter_block_allcomm_auto","MPIR_Reduce_scatter_block_allcomm_nb","MPIR_Reduce_scatter_block_impl","MPIR_Reduce_scatter_block_init","MPIR_Reduce_scatter_block_init_impl","MPIR_Reduce_scatter_block_inter_remote_reduce_local_scatter","MPIR_Reduce_scatter_block_inter_remote_reduce_local_scatter.cold","MPIR_Reduce_scatter_block_intra_noncommutative","MPIR_Reduce_scatter_block_intra_noncommutative.cold","MPIR_Reduce_scatter_block_intra_pairwise","MPIR_Reduce_scatter_block_intra_pairwise.cold","MPIR_Reduce_scatter_block_intra_recursive_doubling","MPIR_Reduce_scatter_block_intra_recursive_doubling.cold","MPIR_Reduce_scatter_block_intra_recursive_halving","MPIR_Reduce_scatter_block_intra_recursive_halving.cold","MPIR_Reduce_scatter_impl","MPIR_Reduce_scatter_init","MPIR_Reduce_scatter_init_impl","MPIR_Reduce_scatter_inter_remote_reduce_local_scatter","MPIR_Reduce_scatter_inter_remote_reduce_local_scatter.cold","MPIR_Reduce_scatter_intra_noncommutative","MPIR_Reduce_scatter_intra_pairwise","MPIR_Reduce_scatter_intra_pairwise.cold","MPIR_Reduce_scatter_intra_recursive_doubling","MPIR_Reduce_scatter_intra_recursive_doubling.cold","MPIR_Reduce_scatter_intra_recursive_halving","MPIR_Reduce_scatter_intra_recursive_halving.cold","MPIR_Request_completion_processing","MPIR_Request_completion_processing.cold","MPIR_Request_create_from_pool.constprop.0:0x146c90","MPIR_Request_create_from_pool.constprop.0:0x1a84f0","MPIR_Request_create_from_pool.constprop.0:0x21bbb0","MPIR_Request_create_from_pool.constprop.0:0x22f0d0","MPIR_Request_create_from_pool.constprop.0:0x23f6d0","MPIR_Request_create_from_pool.constprop.0:0x259dc0","MPIR_Request_create_from_pool.constprop.0:0x277a10","MPIR_Request_create_from_pool.constprop.0:0x28ac10","MPIR_Request_create_from_pool.constprop.0:0x294200","MPIR_Request_create_from_pool.constprop.0:0x2a83f0","MPIR_Request_create_from_pool.constprop.0:0x2c7c60","MPIR_Request_create_from_pool.constprop.0:0x2d73b0","MPIR_Request_create_from_pool.constprop.0:0x2e6bd0","MPIR_Request_create_from_pool.constprop.0:0x2f6330","MPIR_Request_create_from_pool.constprop.0:0x305ae0","MPIR_Request_create_from_pool.constprop.0:0x337f30","MPIR_Request_create_from_pool.constprop.0:0x346ad0","MPIR_Request_create_from_pool.constprop.0:0x375400","MPIR_Request_create_from_pool.constprop.0:0x492b50","MPIR_Request_create_from_pool.constprop.0:0x4b69c0","MPIR_Request_create_from_pool.constprop.0:0x4f6440","MPIR_Request_create_from_pool.constprop.0:0x52ed00","MPIR_Request_create_from_pool.constprop.0:0x5470c0","MPIR_Request_create_from_pool.constprop.0:0x5c44d0","MPIR_Request_create_from_pool.constprop.0:0x60a1b0","MPIR_Request_create_from_pool.constprop.0:0x60c920","MPIR_Request_create_from_pool.constprop.0:0x69d950","MPIR_Request_create_from_pool:0x11e440","MPIR_Request_create_from_pool:0x1405e0","MPIR_Request_create_from_pool:0x151f70","MPIR_Request_create_from_pool:0x168b30","MPIR_Request_create_from_pool:0x17c670","MPIR_Request_create_from_pool:0x19f890","MPIR_Request_create_from_pool:0x1b5650","MPIR_Request_create_from_pool:0x1d2530","MPIR_Request_create_from_pool:0x1e9790","MPIR_Request_create_from_pool:0x200150","MPIR_Request_create_from_pool:0x2b55f0","MPIR_Request_create_from_pool:0x3166a0","MPIR_Request_create_from_pool:0x3253e0","MPIR_Request_create_from_pool:0x354770","MPIR_Request_create_from_pool:0x364e40","MPIR_Request_create_from_pool:0x41a9d0","MPIR_Request_create_from_pool:0x456490","MPIR_Request_create_from_pool:0x505ba0","MPIR_Request_create_from_pool:0x51c920","MPIR_Request_create_from_pool:0x560b00","MPIR_Request_create_from_pool:0x5c96e0","MPIR_Request_create_from_pool:0x5e0780","MPIR_Request_create_from_pool:0x616e80","MPIR_Request_create_from_pool:0x62efc0","MPIR_Request_create_from_pool:0x66e9a0","MPIR_Request_create_from_pool:0x68c840","MPIR_Request_create_from_pool:0x6bab30","MPIR_Request_free_impl","MPIR_Request_free_impl.cold","MPIR_Request_free_with_safety.constprop.0:0x11ecd0","MPIR_Request_free_with_safety.constprop.0:0x12c640","MPIR_Request_free_with_safety.constprop.0:0x1331d0","MPIR_Request_free_with_safety.constprop.0:0x140a80","MPIR_Request_free_with_safety.constprop.0:0x1476d0","MPIR_Request_free_with_safety.constprop.0:0x152a30","MPIR_Request_free_with_safety.constprop.0:0x1695f0","MPIR_Request_free_with_safety.constprop.0:0x17cf00","MPIR_Request_free_with_safety.constprop.0:0x191d30","MPIR_Request_free_with_safety.constprop.0:0x1c8860","MPIR_Request_free_with_safety.constprop.0:0x1ea280","MPIR_Request_free_with_safety.constprop.0:0x200c40","MPIR_Request_free_with_safety.constprop.0:0x21c730","MPIR_Request_free_with_safety.constprop.0:0x22fc50","MPIR_Request_free_with_safety.constprop.0:0x240250","MPIR_Request_free_with_safety.constprop.0:0x251000","MPIR_Request_free_with_safety.constprop.0:0x25a940","MPIR_Request_free_with_safety.constprop.0:0x26dc00","MPIR_Request_free_with_safety.constprop.0:0x278590","MPIR_Request_free_with_safety.constprop.0:0x28b3b0","MPIR_Request_free_with_safety.constprop.0:0x294d80","MPIR_Request_free_with_safety.constprop.0:0x2a8b90","MPIR_Request_free_with_safety.constprop.0:0x2b6850","MPIR_Request_free_with_safety.constprop.0:0x2c87e0","MPIR_Request_free_with_safety.constprop.0:0x2d7f30","MPIR_Request_free_with_safety.constprop.0:0x2e7750","MPIR_Request_free_with_safety.constprop.0:0x2f6eb0","MPIR_Request_free_with_safety.constprop.0:0x306660","MPIR_Request_free_with_safety.constprop.0:0x317160","MPIR_Request_free_with_safety.constprop.0:0x325ea0","MPIR_Request_free_with_safety.constprop.0:0x3387b0","MPIR_Request_free_with_safety.constprop.0:0x347350","MPIR_Request_free_with_safety.constprop.0:0x355530","MPIR_Request_free_with_safety.constprop.0:0x365c00","MPIR_Request_free_with_safety.constprop.0:0x375c80","MPIR_Request_free_with_safety.constprop.0:0x410c90","MPIR_Request_free_with_safety.constprop.0:0x41b280","MPIR_Request_free_with_safety.constprop.0:0x47fe70","MPIR_Request_free_with_safety.constprop.0:0x4933d0","MPIR_Request_free_with_safety.constprop.0:0x4b7240","MPIR_Request_free_with_safety.constprop.0:0x4f6cc0","MPIR_Request_free_with_safety.constprop.0:0x547940","MPIR_Request_free_with_safety.constprop.0:0x5c4960","MPIR_Request_free_with_safety.constprop.0:0x5ca1d0","MPIR_Request_free_with_safety.constprop.0:0x5e1230","MPIR_Request_free_with_safety.constprop.0:0x5e9850","MPIR_Request_free_with_safety.constprop.0:0x5fba70","MPIR_Request_free_with_safety.constprop.0:0x60d070","MPIR_Request_free_with_safety.constprop.0:0x617970","MPIR_Request_free_with_safety.constprop.0:0x62fab0","MPIR_Request_free_with_safety.constprop.0:0x6450f0","MPIR_Request_free_with_safety.constprop.0:0x64f220","MPIR_Request_free_with_safety.constprop.0:0x65eae0","MPIR_Request_free_with_safety.constprop.0:0x664140","MPIR_Request_free_with_safety.constprop.0:0x667af0","MPIR_Request_free_with_safety.constprop.0:0x671000","MPIR_Request_free_with_safety.constprop.0:0x68d0f0","MPIR_Request_free_with_safety.constprop.0:0x69e1d0","MPIR_Request_free_with_safety:0x18b320","MPIR_Request_free_with_safety:0x1a0040","MPIR_Request_free_with_safety:0x1a9b20","MPIR_Request_free_with_safety:0x1b6110","MPIR_Request_free_with_safety:0x1d2ff0","MPIR_Request_free_with_safety:0x457140","MPIR_Request_free_with_safety:0x5066d0","MPIR_Request_free_with_safety:0x51d3e0","MPIR_Request_free_with_safety:0x52f800","MPIR_Request_free_with_safety:0x543ae0","MPIR_Request_free_with_safety:0x562cb0","MPIR_Request_free_with_safety:0x6bb910","MPIR_Request_get_error","MPIR_Request_get_status_impl","MPIR_Request_handle_proc_failed","MPIR_SUM","MPIR_SUM_check_dtype","MPIR_Scan","MPIR_Scan.cold","MPIR_Scan_allcomm_auto","MPIR_Scan_allcomm_nb","MPIR_Scan_impl","MPIR_Scan_init","MPIR_Scan_init_impl","MPIR_Scan_intra_recursive_doubling","MPIR_Scan_intra_recursive_doubling.cold","MPIR_Scan_intra_smp","MPIR_Scan_intra_smp.cold","MPIR_Scatter","MPIR_Scatter_allcomm_auto","MPIR_Scatter_allcomm_nb","MPIR_Scatter_impl","MPIR_Scatter_init","MPIR_Scatter_init_impl","MPIR_Scatter_inter_linear","MPIR_Scatter_inter_linear.cold","MPIR_Scatter_inter_remote_send_local_scatter","MPIR_Scatter_inter_remote_send_local_scatter.cold","MPIR_Scatter_intra_binomial","MPIR_Scatter_intra_binomial.cold","MPIR_Scatterv","MPIR_Scatterv_allcomm_auto","MPIR_Scatterv_allcomm_linear","MPIR_Scatterv_allcomm_linear.cold","MPIR_Scatterv_allcomm_nb","MPIR_Scatterv_impl","MPIR_Scatterv_init","MPIR_Scatterv_init_impl","MPIR_Sched_cb_free_buf","MPIR_Sched_dt_and_op_allowed","MPIR_Sched_free_counter","MPIR_Segment_alloc","MPIR_Segment_alloc.cold","MPIR_Segment_count_contig_blocks","MPIR_Segment_free","MPIR_Segment_pack","MPIR_Segment_pack_external32","MPIR_Segment_to_iov","MPIR_Segment_unpack","MPIR_Segment_unpack_external32","MPIR_Send_enqueue_impl","MPIR_Sendrecv_impl","MPIR_Sendrecv_replace_impl","MPIR_Session_call_errhandler_impl","MPIR_Session_create_errhandler_impl","MPIR_Session_finalize_impl","MPIR_Session_get_errhandler_impl","MPIR_Session_get_info_impl","MPIR_Session_get_nth_pset_impl","MPIR_Session_get_num_psets_impl","MPIR_Session_get_pset_info_impl","MPIR_Session_init_impl","MPIR_Session_set_errhandler_impl","MPIR_Start_progress_thread_impl","MPIR_Start_progress_thread_impl.cold","MPIR_Status_set_bytes","MPIR_Status_set_cancelled_impl","MPIR_Status_set_elements_x_impl","MPIR_Status_set_elements_x_impl.cold","MPIR_Stop_progress_thread_impl","MPIR_Stream_comm_create_impl","MPIR_Stream_comm_create_multiplex_impl","MPIR_Stream_create_impl","MPIR_Stream_free_impl","MPIR_Strerror","MPIR_TSP_Iallgather_sched_intra_brucks","MPIR_TSP_Iallgather_sched_intra_brucks.cold","MPIR_TSP_Iallgather_sched_intra_recexch","MPIR_TSP_Iallgather_sched_intra_recexch.cold","MPIR_TSP_Iallgather_sched_intra_ring","MPIR_TSP_Iallgather_sched_intra_ring.cold","MPIR_TSP_Iallgatherv_sched_intra_brucks","MPIR_TSP_Iallgatherv_sched_intra_brucks.cold","MPIR_TSP_Iallgatherv_sched_intra_recexch","MPIR_TSP_Iallgatherv_sched_intra_recexch.cold","MPIR_TSP_Iallgatherv_sched_intra_recexch_step2","MPIR_TSP_Iallgatherv_sched_intra_ring","MPIR_TSP_Iallgatherv_sched_intra_ring.cold","MPIR_TSP_Iallreduce_sched_intra_recexch","MPIR_TSP_Iallreduce_sched_intra_recexch.cold","MPIR_TSP_Iallreduce_sched_intra_recexch_reduce_scatter_recexch_allgatherv","MPIR_TSP_Iallreduce_sched_intra_recexch_reduce_scatter_recexch_allgatherv.cold","MPIR_TSP_Iallreduce_sched_intra_recexch_step1","MPIR_TSP_Iallreduce_sched_intra_ring","MPIR_TSP_Iallreduce_sched_intra_ring.cold","MPIR_TSP_Iallreduce_sched_intra_tree","MPIR_TSP_Iallreduce_sched_intra_tree.cold","MPIR_TSP_Iallreduce_sched_intra_tsp_auto","MPIR_TSP_Ialltoall_sched_intra_brucks","MPIR_TSP_Ialltoall_sched_intra_brucks.cold","MPIR_TSP_Ialltoall_sched_intra_ring","MPIR_TSP_Ialltoall_sched_intra_ring.cold","MPIR_TSP_Ialltoall_sched_intra_scattered","MPIR_TSP_Ialltoall_sched_intra_scattered.cold","MPIR_TSP_Ialltoallv_sched_intra_blocked","MPIR_TSP_Ialltoallv_sched_intra_blocked.cold","MPIR_TSP_Ialltoallv_sched_intra_inplace","MPIR_TSP_Ialltoallv_sched_intra_inplace.cold","MPIR_TSP_Ialltoallv_sched_intra_scattered","MPIR_TSP_Ialltoallv_sched_intra_scattered.cold","MPIR_TSP_Ialltoallw_sched_intra_blocked","MPIR_TSP_Ialltoallw_sched_intra_blocked.cold","MPIR_TSP_Ialltoallw_sched_intra_inplace","MPIR_TSP_Ialltoallw_sched_intra_inplace.cold","MPIR_TSP_Ibarrier_sched_intra_k_dissemination","MPIR_TSP_Ibarrier_sched_intra_recexch","MPIR_TSP_Ibarrier_sched_intra_tsp_auto","MPIR_TSP_Ibcast_sched_intra_scatterv_allgatherv","MPIR_TSP_Ibcast_sched_intra_scatterv_allgatherv.cold","MPIR_TSP_Ibcast_sched_intra_scatterv_ring_allgatherv","MPIR_TSP_Ibcast_sched_intra_tree","MPIR_TSP_Ibcast_sched_intra_tsp_auto","MPIR_TSP_Ibcast_sched_intra_tsp_auto.cold","MPIR_TSP_Igather_sched_intra_tree","MPIR_TSP_Igather_sched_intra_tree.cold","MPIR_TSP_Igatherv_sched_allcomm_linear","MPIR_TSP_Igatherv_sched_allcomm_linear.cold","MPIR_TSP_Ineighbor_allgather_sched_allcomm_linear","MPIR_TSP_Ineighbor_allgather_sched_allcomm_linear.cold","MPIR_TSP_Ineighbor_allgatherv_sched_allcomm_linear","MPIR_TSP_Ineighbor_allgatherv_sched_allcomm_linear.cold","MPIR_TSP_Ineighbor_alltoall_sched_allcomm_linear","MPIR_TSP_Ineighbor_alltoall_sched_allcomm_linear.cold","MPIR_TSP_Ineighbor_alltoallv_sched_allcomm_linear","MPIR_TSP_Ineighbor_alltoallv_sched_allcomm_linear.cold","MPIR_TSP_Ineighbor_alltoallw_sched_allcomm_linear","MPIR_TSP_Ireduce_scatter_block_sched_intra_recexch","MPIR_TSP_Ireduce_scatter_block_sched_intra_recexch.cold","MPIR_TSP_Ireduce_scatter_sched_intra_recexch","MPIR_TSP_Ireduce_scatter_sched_intra_recexch.cold","MPIR_TSP_Ireduce_scatter_sched_intra_recexch_step2","MPIR_TSP_Ireduce_sched_intra_tree","MPIR_TSP_Ireduce_sched_intra_tree.cold","MPIR_TSP_Ireduce_sched_intra_tsp_auto","MPIR_TSP_Iscan_sched_intra_recursive_doubling","MPIR_TSP_Iscan_sched_intra_recursive_doubling.cold","MPIR_TSP_Iscatter_sched_intra_tree","MPIR_TSP_Iscatter_sched_intra_tree.cold","MPIR_TSP_Iscatterv_sched_allcomm_linear","MPIR_TSP_Iscatterv_sched_allcomm_linear.cold","MPIR_TSP_sched_cb","MPIR_TSP_sched_create","MPIR_TSP_sched_fence","MPIR_TSP_sched_free","MPIR_TSP_sched_free.cold","MPIR_TSP_sched_generic","MPIR_TSP_sched_imcast","MPIR_TSP_sched_imcast.cold","MPIR_TSP_sched_irecv","MPIR_TSP_sched_irecv.cold","MPIR_TSP_sched_irecv_status","MPIR_TSP_sched_irecv_status.cold","MPIR_TSP_sched_isend","MPIR_TSP_sched_isend.cold","MPIR_TSP_sched_issend","MPIR_TSP_sched_issend.cold","MPIR_TSP_sched_localcopy","MPIR_TSP_sched_localcopy.cold","MPIR_TSP_sched_malloc","MPIR_TSP_sched_new_type","MPIR_TSP_sched_new_type.cold","MPIR_TSP_sched_reduce_local","MPIR_TSP_sched_reduce_local.cold","MPIR_TSP_sched_reset","MPIR_TSP_sched_selective_sink","MPIR_TSP_sched_sink","MPIR_TSP_sched_start","MPIR_TSP_sched_sub_sched","MPIR_T_CVAR_REGISTER_impl","MPIR_T_CVAR_REGISTER_impl.cold","MPIR_T_PVAR_REGISTER_impl","MPIR_T_PVAR_REGISTER_impl.cold","MPIR_T_cat_add_cvar","MPIR_T_cat_add_cvar.cold","MPIR_T_cat_add_desc","MPIR_T_cat_add_desc.cold","MPIR_T_cat_add_event","MPIR_T_cat_add_event.cold","MPIR_T_cat_add_pvar","MPIR_T_cat_add_pvar.cold","MPIR_T_cat_add_subcat","MPIR_T_cat_add_subcat.cold","MPIR_T_cat_create","MPIR_T_category_get_categories_impl","MPIR_T_category_get_categories_impl.cold","MPIR_T_category_get_cvars_impl","MPIR_T_category_get_cvars_impl.cold","MPIR_T_category_get_events_impl","MPIR_T_category_get_events_impl.cold","MPIR_T_category_get_num_events_impl","MPIR_T_category_get_pvars_impl","MPIR_T_category_get_pvars_impl.cold","MPIR_T_cvar_finalize","MPIR_T_cvar_handle_alloc_impl","MPIR_T_cvar_init","MPIR_T_cvar_read_impl","MPIR_T_cvar_write_impl","MPIR_T_enum_add_item","MPIR_T_enum_create","MPIR_T_env_finalize","MPIR_T_env_init","MPIR_T_event_callback_get_info_impl","MPIR_T_event_callback_set_info_impl","MPIR_T_event_copy_impl","MPIR_T_event_get_index_impl","MPIR_T_event_get_info_impl","MPIR_T_event_get_num_impl","MPIR_T_event_get_source_impl","MPIR_T_event_get_timestamp_impl","MPIR_T_event_handle_alloc_impl","MPIR_T_event_handle_free_impl","MPIR_T_event_handle_get_info_impl","MPIR_T_event_handle_set_info_impl","MPIR_T_event_instance","MPIR_T_event_read_impl","MPIR_T_event_register_callback_impl","MPIR_T_event_set_dropped_handler_impl","MPIR_T_events_finalize","MPIR_T_pvar_env_init","MPIR_T_pvar_handle_alloc_impl","MPIR_T_pvar_handle_alloc_impl.cold","MPIR_T_pvar_handle_free_impl","MPIR_T_pvar_read_impl","MPIR_T_pvar_readreset_impl","MPIR_T_pvar_reset_impl","MPIR_T_pvar_session_create_impl","MPIR_T_pvar_session_free_impl","MPIR_T_pvar_start_impl","MPIR_T_pvar_stop_impl","MPIR_T_pvar_write_impl","MPIR_T_register_event","MPIR_T_register_source","MPIR_T_source_get_info_impl","MPIR_T_source_get_num_impl","MPIR_T_source_get_timestamp_impl","MPIR_T_strncpy","MPIR_Test","MPIR_Test_cancelled_impl","MPIR_Test_impl","MPIR_Test_state","MPIR_Testall","MPIR_Testall_impl","MPIR_Testall_state","MPIR_Testany","MPIR_Testany_impl","MPIR_Testany_state","MPIR_Testsome","MPIR_Testsome_impl","MPIR_Testsome_state","MPIR_Topo_canon_nhb","MPIR_Topo_canon_nhb_count","MPIR_Topo_test_impl","MPIR_Topology_copy_fn","MPIR_Topology_delete_fn","MPIR_Topology_finalize","MPIR_Topology_get","MPIR_Topology_put","MPIR_Treealgo_tree_create","MPIR_Treealgo_tree_free","MPIR_Type_block","MPIR_Type_block.cold","MPIR_Type_blockindexed","MPIR_Type_commit_impl","MPIR_Type_commit_impl.cold","MPIR_Type_contiguous","MPIR_Type_contiguous_impl","MPIR_Type_contiguous_large_impl","MPIR_Type_contiguous_x_impl","MPIR_Type_create_darray","MPIR_Type_create_darray.cold","MPIR_Type_create_darray_impl","MPIR_Type_create_darray_large_impl","MPIR_Type_create_hindexed_block_impl","MPIR_Type_create_hindexed_block_large_impl","MPIR_Type_create_hindexed_impl","MPIR_Type_create_hindexed_large_impl","MPIR_Type_create_hvector_impl","MPIR_Type_create_hvector_large_impl","MPIR_Type_create_indexed_block_impl","MPIR_Type_create_indexed_block_large_impl","MPIR_Type_create_keyval_impl","MPIR_Type_create_pairtype","MPIR_Type_create_resized","MPIR_Type_create_resized_impl","MPIR_Type_create_resized_large_impl","MPIR_Type_create_struct_impl","MPIR_Type_create_struct_large_impl","MPIR_Type_create_subarray","MPIR_Type_create_subarray.cold","MPIR_Type_create_subarray_impl","MPIR_Type_create_subarray_large_impl","MPIR_Type_cyclic","MPIR_Type_cyclic.cold","MPIR_Type_delete_attr_impl","MPIR_Type_dup","MPIR_Type_dup_impl","MPIR_Type_dup_impl.cold","MPIR_Type_free_impl","MPIR_Type_free_impl.cold","MPIR_Type_free_keyval_impl","MPIR_Type_get_attr_impl","MPIR_Type_get_basic_type_elements.part.0","MPIR_Type_get_contents_impl","MPIR_Type_get_contents_impl.cold","MPIR_Type_get_contents_large_impl","MPIR_Type_get_contents_large_impl.cold","MPIR_Type_get_elements","MPIR_Type_get_elements.cold","MPIR_Type_get_envelope","MPIR_Type_get_envelope.cold","MPIR_Type_get_envelope_impl","MPIR_Type_get_envelope_large_impl","MPIR_Type_get_extent_impl","MPIR_Type_get_extent_x_impl","MPIR_Type_get_extent_x_impl.cold","MPIR_Type_get_name_impl","MPIR_Type_get_true_extent_impl","MPIR_Type_get_true_extent_x_impl","MPIR_Type_get_true_extent_x_impl.cold","MPIR_Type_indexed","MPIR_Type_indexed.part.0","MPIR_Type_indexed_impl","MPIR_Type_indexed_large_impl","MPIR_Type_is_rma_atomic","MPIR_Type_match_size_impl","MPIR_Type_match_size_impl.cold","MPIR_Type_set_attr_impl","MPIR_Type_set_name_impl","MPIR_Type_size_impl","MPIR_Type_size_impl.cold","MPIR_Type_size_x_impl","MPIR_Type_size_x_impl.cold","MPIR_Type_struct","MPIR_Type_struct.cold","MPIR_Type_vector","MPIR_Type_vector_impl","MPIR_Type_vector_large_impl","MPIR_Typerep_commit","MPIR_Typerep_commit.cold","MPIR_Typerep_copy","MPIR_Typerep_create_contig","MPIR_Typerep_create_contig.cold","MPIR_Typerep_create_dup","MPIR_Typerep_create_dup.cold","MPIR_Typerep_create_hindexed","MPIR_Typerep_create_hindexed_block","MPIR_Typerep_create_hvector","MPIR_Typerep_create_indexed","MPIR_Typerep_create_indexed_block","MPIR_Typerep_create_pairtype","MPIR_Typerep_create_resized","MPIR_Typerep_create_resized.cold","MPIR_Typerep_create_struct","MPIR_Typerep_create_struct.cold","MPIR_Typerep_create_vector","MPIR_Typerep_debug","MPIR_Typerep_finalize","MPIR_Typerep_flatten","MPIR_Typerep_flatten_size","MPIR_Typerep_free","MPIR_Typerep_icopy","MPIR_Typerep_init","MPIR_Typerep_iov_len","MPIR_Typerep_iov_len.cold","MPIR_Typerep_ipack","MPIR_Typerep_ipack.part.0","MPIR_Typerep_ipack.part.0.cold","MPIR_Typerep_iunpack","MPIR_Typerep_iunpack.part.0","MPIR_Typerep_iunpack.part.0.cold","MPIR_Typerep_op","MPIR_Typerep_pack","MPIR_Typerep_pack_external","MPIR_Typerep_pack_stream","MPIR_Typerep_reduce","MPIR_Typerep_reduce_is_supported","MPIR_Typerep_size_external32","MPIR_Typerep_to_iov","MPIR_Typerep_to_iov_offset","MPIR_Typerep_to_iov_offset.cold","MPIR_Typerep_unflatten","MPIR_Typerep_unpack","MPIR_Typerep_unpack_external","MPIR_Typerep_unpack_stream","MPIR_Typerep_wait","MPIR_Unpack_external_impl","MPIR_Unpack_impl","MPIR_Unpublish_name_impl","MPIR_Wait","MPIR_Wait_enqueue_impl","MPIR_Wait_impl","MPIR_Wait_state","MPIR_Waitall","MPIR_Waitall_enqueue_impl","MPIR_Waitall_enqueue_impl.cold","MPIR_Waitall_impl","MPIR_Waitall_state","MPIR_Waitany","MPIR_Waitany_impl","MPIR_Waitany_state","MPIR_Waitsome","MPIR_Waitsome_impl","MPIR_Waitsome_state","MPIR_Win_call_errhandler_impl","MPIR_Win_create_errhandler_impl","MPIR_Win_create_keyval_impl","MPIR_Win_delete_attr_impl","MPIR_Win_free_keyval_impl","MPIR_Win_get_attr_impl","MPIR_Win_get_errhandler_impl","MPIR_Win_get_name_impl","MPIR_Win_set_attr_impl","MPIR_Win_set_errhandler_impl","MPIR_Win_set_name_impl","MPIR_Win_shared_query_impl","MPIR_allocate_enqueue_request","MPIR_allocate_enqueue_request.cold","MPIR_finalize_builtin_comms","MPIR_free_keyval","MPIR_free_keyval.part.0","MPIR_get_local_gpu_stream","MPIR_gpu_can_use_reduce_kernel","MPIR_gpu_memcpy","MPIR_gpu_memcpy_device_to_device","MPIR_gpu_memcpy_to_device","MPIR_gpu_memcpy_to_host","MPIR_gpu_post_init","MPIR_gpu_reduce_get_op_and_type","MPIR_hwtopo_get_ancestor","MPIR_hwtopo_get_depth","MPIR_hwtopo_get_dev_parent_by_pci","MPIR_hwtopo_get_leaf","MPIR_hwtopo_get_lid","MPIR_hwtopo_get_node_mem","MPIR_hwtopo_get_obj_by_name","MPIR_hwtopo_get_obj_by_type","MPIR_hwtopo_get_type_id","MPIR_hwtopo_is_dev_close_by_name","MPIR_hwtopo_is_dev_close_by_pci","MPIR_hwtopo_is_initialized","MPIR_hwtopo_mem_bind","MPIR_init_comm_self","MPIR_init_comm_world","MPIR_nettopo_get_all_edges","MPIR_nettopo_get_edge_dest_node","MPIR_nettopo_get_endpoint","MPIR_nettopo_get_node_type","MPIR_nettopo_get_node_uid","MPIR_nettopo_get_num_nodes","MPIR_nettopo_get_type","MPIR_nettopo_torus_get_dimension","MPIR_nettopo_torus_get_geometry","MPIR_nettopo_torus_get_node_index","MPIR_nettopo_tree_get_hostnode_index","MPIR_nettopo_tree_get_node_levels","MPIR_nettopo_tree_get_switches_at_level","MPIR_peer_intercomm_create","MPIR_pmi_abort","MPIR_pmi_allgather","MPIR_pmi_allgather_shm","MPIR_pmi_barrier","MPIR_pmi_barrier_local","MPIR_pmi_bcast","MPIR_pmi_finalize","MPIR_pmi_get_failed_procs","MPIR_pmi_get_hwloc_xmlfile","MPIR_pmi_get_universe_size","MPIR_pmi_has_local_cliques","MPIR_pmi_init","MPIR_pmi_job_id","MPIR_pmi_kvs_get","MPIR_pmi_kvs_put","MPIR_pmi_lookup","MPIR_pmi_max_key_size","MPIR_pmi_max_val_size","MPIR_pmi_publish","MPIR_pmi_set_threaded","MPIR_pmi_spawn_multiple","MPIR_pmi_unpublish","MPIR_stream_comm_free","MPIR_stream_comm_init","MPIU_CRAY_Check_env_vars","MPIU_CRAY_create_world_group","MPIU_CRAY_err_printf_wcname","MPIU_CRAY_exchange_lrank_numas","MPIU_CRAY_free_send_recv_list","MPIU_CRAY_free_world_group","MPIU_CRAY_get_cname","MPIU_CRAY_get_cpulist_for_numa_node","MPIU_CRAY_get_my_rank_numa_node","MPIU_CRAY_get_num_numa_nodes","MPIU_CRAY_get_number","MPIU_CRAY_process_num_range","MPIU_CRAY_process_num_range.part.0","MPIU_CRAY_random_gen","MPIU_Cray_cvar_process_int","MPIU_Cray_cvar_process_long","MPIU_Cray_cvar_process_unsigned_long","MPIU_Cray_env","MPIU_Cray_env2crayboolean","MPIU_Cray_env2int","MPIU_Cray_env2long","MPIU_Cray_env2unsignedlong","MPIU_Cray_env_process_bool","MPIU_Cray_env_process_int","MPIU_Cray_env_process_long","MPIU_Cray_env_process_unsigned_long","MPIU_Cray_gettid","MPIU_Cray_printf","MPIU_Cray_printf_init","MPIU_Greq_cancel_fn","MPIU_Greq_free_fn","MPIU_Greq_query_fn","MPIU_MPIDI_CRAY_mem_dbg.isra.0","MPIU_Sort_inttable","MPIU_Thread_safety_str","MPIU_cray_ReduceSummary","MPIU_datatype_full_size","MPIU_external32_buffer_setup","MPIU_get_randomized_sendto_rank","MPIU_read_external32_conversion_fn","MPIU_write_external32_conversion_fn","MPIX_Comm_agree","MPIX_Comm_failure_ack","MPIX_Comm_failure_get_acked","MPIX_Comm_get_failed","MPIX_Comm_revoke","MPIX_Comm_shrink","MPIX_Create_queue","MPIX_Delete_error_class","MPIX_Delete_error_code","MPIX_Delete_error_string","MPIX_Enqueue_recv","MPIX_Enqueue_send","MPIX_Enqueue_start","MPIX_Enqueue_wait","MPIX_Free_queue","MPIX_GPU_query_support","MPIX_Grequest_class_allocate","MPIX_Grequest_class_create","MPIX_Grequest_start","MPIX_Info_set_hex","MPIX_KT_Get_dreq","MPIX_Query_cuda_support","MPIX_Query_hip_support","MPIX_Query_ze_support","MPIX_Type_iov","MPIX_Type_iov_len","MPIX_Win_complete_stream","MPIX_Win_post_stream","MPIX_Win_progress_stream","MPIX_Win_wait_stream","MPI_Abort","MPI_Accumulate","MPI_Accumulate_c","MPI_Add_error_class","MPI_Add_error_code","MPI_Add_error_string","MPI_Address","MPI_Aint_add","MPI_Aint_diff","MPI_Allgather","MPI_Allgather_c","MPI_Allgather_init","MPI_Allgather_init_c","MPI_Allgatherv","MPI_Allgatherv_c","MPI_Allgatherv_init","MPI_Allgatherv_init_c","MPI_Alloc_mem","MPI_Allreduce","MPI_Allreduce_c","MPI_Allreduce_init","MPI_Allreduce_init_c","MPI_Alltoall","MPI_Alltoall_c","MPI_Alltoall_init","MPI_Alltoall_init_c","MPI_Alltoallv","MPI_Alltoallv_c","MPI_Alltoallv_init","MPI_Alltoallv_init_c","MPI_Alltoallw","MPI_Alltoallw_c","MPI_Alltoallw_init","MPI_Alltoallw_init_c","MPI_Attr_delete","MPI_Attr_get","MPI_Attr_put","MPI_Barrier","MPI_Barrier_init","MPI_Bcast","MPI_Bcast_c","MPI_Bcast_init","MPI_Bcast_init_c","MPI_Bsend","MPI_Bsend_c","MPI_Bsend_init","MPI_Bsend_init_c","MPI_Buffer_attach","MPI_Buffer_attach_c","MPI_Buffer_detach","MPI_Buffer_detach_c","MPI_CRAY_get_version","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_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_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_Dims_create","MPI_Dist_graph_create","MPI_Dist_graph_create_adjacent","MPI_Dist_graph_neighbors","MPI_Dist_graph_neighbors_count","MPI_Errhandler_create","MPI_Errhandler_free","MPI_Errhandler_get","MPI_Errhandler_set","MPI_Error_class","MPI_Error_string","MPI_Exscan","MPI_Exscan_c","MPI_Exscan_init","MPI_Exscan_init_c","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_type_extent_c","MPI_File_get_view","MPI_File_iread","MPI_File_iread_all","MPI_File_iread_all_c","MPI_File_iread_at","MPI_File_iread_at_all","MPI_File_iread_at_all_c","MPI_File_iread_at_c","MPI_File_iread_c","MPI_File_iread_shared","MPI_File_iread_shared_c","MPI_File_iwrite","MPI_File_iwrite_all","MPI_File_iwrite_all_c","MPI_File_iwrite_at","MPI_File_iwrite_at_all","MPI_File_iwrite_at_all_c","MPI_File_iwrite_at_c","MPI_File_iwrite_c","MPI_File_iwrite_shared","MPI_File_iwrite_shared_c","MPI_File_open","MPI_File_preallocate","MPI_File_read","MPI_File_read_all","MPI_File_read_all_begin","MPI_File_read_all_begin_c","MPI_File_read_all_c","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_begin_c","MPI_File_read_at_all_c","MPI_File_read_at_all_end","MPI_File_read_at_c","MPI_File_read_c","MPI_File_read_ordered","MPI_File_read_ordered_begin","MPI_File_read_ordered_begin_c","MPI_File_read_ordered_c","MPI_File_read_ordered_end","MPI_File_read_shared","MPI_File_read_shared_c","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_begin_c","MPI_File_write_all_c","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_begin_c","MPI_File_write_at_all_c","MPI_File_write_at_all_end","MPI_File_write_at_c","MPI_File_write_c","MPI_File_write_ordered","MPI_File_write_ordered_begin","MPI_File_write_ordered_begin_c","MPI_File_write_ordered_c","MPI_File_write_ordered_end","MPI_File_write_shared","MPI_File_write_shared_c","MPI_Finalize","MPI_Finalized","MPI_Free_mem","MPI_Gather","MPI_Gather_c","MPI_Gather_init","MPI_Gather_init_c","MPI_Gatherv","MPI_Gatherv_c","MPI_Gatherv_init","MPI_Gatherv_init_c","MPI_Get","MPI_Get_accumulate","MPI_Get_accumulate_c","MPI_Get_address","MPI_Get_c","MPI_Get_count","MPI_Get_count_c","MPI_Get_elements","MPI_Get_elements_c","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_compare","MPI_Group_difference","MPI_Group_excl","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_Iallgather_c","MPI_Iallgatherv","MPI_Iallgatherv_c","MPI_Iallreduce","MPI_Iallreduce_c","MPI_Ialltoall","MPI_Ialltoall_c","MPI_Ialltoallv","MPI_Ialltoallv_c","MPI_Ialltoallw","MPI_Ialltoallw_c","MPI_Ibarrier","MPI_Ibcast","MPI_Ibcast_c","MPI_Ibsend","MPI_Ibsend_c","MPI_Iexscan","MPI_Iexscan_c","MPI_Igather","MPI_Igather_c","MPI_Igatherv","MPI_Igatherv_c","MPI_Improbe","MPI_Imrecv","MPI_Imrecv_c","MPI_Ineighbor_allgather","MPI_Ineighbor_allgather_c","MPI_Ineighbor_allgatherv","MPI_Ineighbor_allgatherv_c","MPI_Ineighbor_alltoall","MPI_Ineighbor_alltoall_c","MPI_Ineighbor_alltoallv","MPI_Ineighbor_alltoallv_c","MPI_Ineighbor_alltoallw","MPI_Ineighbor_alltoallw_c","MPI_Info_create","MPI_Info_create_env","MPI_Info_delete","MPI_Info_dup","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_Info_val_int_to_str","MPI_Info_val_str_to_int","MPI_Init","MPI_Init_thread","MPI_Initialized","MPI_Intercomm_create","MPI_Intercomm_create_from_groups","MPI_Intercomm_merge","MPI_Iprobe","MPI_Irecv","MPI_Irecv_c","MPI_Ireduce","MPI_Ireduce_c","MPI_Ireduce_scatter","MPI_Ireduce_scatter_block","MPI_Ireduce_scatter_block_c","MPI_Ireduce_scatter_c","MPI_Irsend","MPI_Irsend_c","MPI_Is_thread_main","MPI_Iscan","MPI_Iscan_c","MPI_Iscatter","MPI_Iscatter_c","MPI_Iscatterv","MPI_Iscatterv_c","MPI_Isend","MPI_Isend_c","MPI_Isendrecv","MPI_Isendrecv_c","MPI_Isendrecv_replace","MPI_Isendrecv_replace_c","MPI_Issend","MPI_Issend_c","MPI_Keyval_create","MPI_Keyval_free","MPI_Lookup_name","MPI_Mprobe","MPI_Mrecv","MPI_Mrecv_c","MPI_Neighbor_allgather","MPI_Neighbor_allgather_c","MPI_Neighbor_allgather_init","MPI_Neighbor_allgather_init_c","MPI_Neighbor_allgatherv","MPI_Neighbor_allgatherv_c","MPI_Neighbor_allgatherv_init","MPI_Neighbor_allgatherv_init_c","MPI_Neighbor_alltoall","MPI_Neighbor_alltoall_c","MPI_Neighbor_alltoall_init","MPI_Neighbor_alltoall_init_c","MPI_Neighbor_alltoallv","MPI_Neighbor_alltoallv_c","MPI_Neighbor_alltoallv_init","MPI_Neighbor_alltoallv_init_c","MPI_Neighbor_alltoallw","MPI_Neighbor_alltoallw_c","MPI_Neighbor_alltoallw_init","MPI_Neighbor_alltoallw_init_c","MPI_Op_commutative","MPI_Op_create","MPI_Op_create_c","MPI_Op_free","MPI_Open_port","MPI_Pack","MPI_Pack_c","MPI_Pack_external","MPI_Pack_external_c","MPI_Pack_external_size","MPI_Pack_external_size_c","MPI_Pack_size","MPI_Pack_size_c","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_Put_c","MPI_Query_thread","MPI_Raccumulate","MPI_Raccumulate_c","MPI_Recv","MPI_Recv_c","MPI_Recv_init","MPI_Recv_init_c","MPI_Reduce","MPI_Reduce_c","MPI_Reduce_init","MPI_Reduce_init_c","MPI_Reduce_local","MPI_Reduce_local_c","MPI_Reduce_scatter","MPI_Reduce_scatter_block","MPI_Reduce_scatter_block_c","MPI_Reduce_scatter_block_init","MPI_Reduce_scatter_block_init_c","MPI_Reduce_scatter_c","MPI_Reduce_scatter_init","MPI_Reduce_scatter_init_c","MPI_Register_datarep","MPI_Register_datarep_c","MPI_Request_free","MPI_Request_get_status","MPI_Rget","MPI_Rget_accumulate","MPI_Rget_accumulate_c","MPI_Rget_c","MPI_Rput","MPI_Rput_c","MPI_Rsend","MPI_Rsend_c","MPI_Rsend_init","MPI_Rsend_init_c","MPI_Scan","MPI_Scan_c","MPI_Scan_init","MPI_Scan_init_c","MPI_Scatter","MPI_Scatter_c","MPI_Scatter_init","MPI_Scatter_init_c","MPI_Scatterv","MPI_Scatterv_c","MPI_Scatterv_init","MPI_Scatterv_init_c","MPI_Send","MPI_Send_c","MPI_Send_init","MPI_Send_init_c","MPI_Sendrecv","MPI_Sendrecv_c","MPI_Sendrecv_replace","MPI_Sendrecv_replace_c","MPI_Session_call_errhandler","MPI_Session_create_errhandler","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_Ssend","MPI_Ssend_c","MPI_Ssend_init","MPI_Ssend_init_c","MPI_Start","MPI_Startall","MPI_Status_c2f","MPI_Status_f2c","MPI_Status_set_cancelled","MPI_Status_set_elements","MPI_Status_set_elements_c","MPI_Status_set_elements_x","MPI_T_category_changed","MPI_T_category_get_categories","MPI_T_category_get_cvars","MPI_T_category_get_events","MPI_T_category_get_index","MPI_T_category_get_info","MPI_T_category_get_num","MPI_T_category_get_num_events","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_event_callback_get_info","MPI_T_event_callback_set_info","MPI_T_event_copy","MPI_T_event_get_index","MPI_T_event_get_info","MPI_T_event_get_num","MPI_T_event_get_source","MPI_T_event_get_timestamp","MPI_T_event_handle_alloc","MPI_T_event_handle_free","MPI_T_event_handle_get_info","MPI_T_event_handle_set_info","MPI_T_event_read","MPI_T_event_register_callback","MPI_T_event_set_dropped_handler","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_T_source_get_info","MPI_T_source_get_num","MPI_T_source_get_timestamp","MPI_Test","MPI_Test_cancelled","MPI_Testall","MPI_Testany","MPI_Testsome","MPI_Topo_test","MPI_Type_commit","MPI_Type_contiguous","MPI_Type_contiguous_c","MPI_Type_create_darray","MPI_Type_create_darray_c","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_hindexed_block_c","MPI_Type_create_hindexed_c","MPI_Type_create_hvector","MPI_Type_create_hvector_c","MPI_Type_create_indexed_block","MPI_Type_create_indexed_block_c","MPI_Type_create_keyval","MPI_Type_create_resized","MPI_Type_create_resized_c","MPI_Type_create_struct","MPI_Type_create_struct_c","MPI_Type_create_subarray","MPI_Type_create_subarray_c","MPI_Type_delete_attr","MPI_Type_dup","MPI_Type_extent","MPI_Type_free","MPI_Type_free_keyval","MPI_Type_get_attr","MPI_Type_get_contents","MPI_Type_get_contents_c","MPI_Type_get_envelope","MPI_Type_get_envelope_c","MPI_Type_get_extent","MPI_Type_get_extent_c","MPI_Type_get_extent_x","MPI_Type_get_name","MPI_Type_get_true_extent","MPI_Type_get_true_extent_c","MPI_Type_get_true_extent_x","MPI_Type_hindexed","MPI_Type_hvector","MPI_Type_indexed","MPI_Type_indexed_c","MPI_Type_lb","MPI_Type_match_size","MPI_Type_set_attr","MPI_Type_set_name","MPI_Type_size","MPI_Type_size_c","MPI_Type_size_x","MPI_Type_struct","MPI_Type_ub","MPI_Type_vector","MPI_Type_vector_c","MPI_Unpack","MPI_Unpack_c","MPI_Unpack_external","MPI_Unpack_external_c","MPI_Unpublish_name","MPI_Wait","MPI_Waitall","MPI_Waitany","MPI_Waitsome","MPI_Win_allocate","MPI_Win_allocate_c","MPI_Win_allocate_shared","MPI_Win_allocate_shared_c","MPI_Win_attach","MPI_Win_call_errhandler","MPI_Win_complete","MPI_Win_create","MPI_Win_create_c","MPI_Win_create_dynamic","MPI_Win_create_errhandler","MPI_Win_create_keyval","MPI_Win_delete_attr","MPI_Win_detach","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_shared_query_c","MPI_Win_start","MPI_Win_sync","MPI_Win_test","MPI_Win_unlock","MPI_Win_unlock_all","MPI_Win_wait","MPI_Wtick","MPI_Wtime","MPLI_gavl_intersect_cmp_func","MPLI_gavl_start_addr_cmp_func","MPLI_gavl_subset_cmp_func","MPLI_shm_ghnd_alloc:0x708110","MPLI_shm_ghnd_alloc:0x70856c","MPLI_shm_hnd_alloc","MPLI_shm_hnd_free","MPLI_shm_hnd_reset_val","MPLI_thread_start","MPL_args_deserialize","MPL_args_serialize","MPL_backtrace_show","MPL_connect","MPL_cray_calloc:0x708c7e","MPL_cray_calloc:0x742275","MPL_cray_calloc:0x7c1e3f","MPL_cray_free.constprop.0","MPL_cray_free:0x6fdae8","MPL_cray_free:0x70747f","MPL_cray_free:0x70797b","MPL_cray_free:0x7080c1","MPL_cray_free:0x708985","MPL_cray_free:0x708ce2","MPL_cray_free:0x716b06","MPL_cray_free:0x7170fc","MPL_cray_free:0x7195dc","MPL_cray_free:0x71b95a","MPL_cray_free:0x71dcf7","MPL_cray_free:0x720147","MPL_cray_free:0x7223ca","MPL_cray_free:0x7250ad","MPL_cray_free:0x727814","MPL_cray_free:0x729ceb","MPL_cray_free:0x72c1bc","MPL_cray_free:0x72e31e","MPL_cray_free:0x7300cf","MPL_cray_free:0x733f6f","MPL_cray_free:0x736620","MPL_cray_free:0x738a44","MPL_cray_free:0x73ae0b","MPL_cray_free:0x73cfd2","MPL_cray_free:0x73f315","MPL_cray_free:0x7422d9","MPL_cray_free:0x74ef33","MPL_cray_free:0x756777","MPL_cray_free:0x758dc4","MPL_cray_free:0x758ef7","MPL_cray_free:0x75a3cd","MPL_cray_free:0x75d455","MPL_cray_free:0x75e287","MPL_cray_free:0x760d13","MPL_cray_free:0x76c904","MPL_cray_free:0x76cddd","MPL_cray_free:0x770f34","MPL_cray_free:0x775303","MPL_cray_free:0x776737","MPL_cray_free:0x77a845","MPL_cray_free:0x781e03","MPL_cray_free:0x783839","MPL_cray_free:0x7845f6","MPL_cray_free:0x79345a","MPL_cray_free:0x79561e","MPL_cray_free:0x79db68","MPL_cray_free:0x79de72","MPL_cray_free:0x79f65c","MPL_cray_free:0x7a0c86","MPL_cray_free:0x7a1d15","MPL_cray_free:0x7a93e7","MPL_cray_free:0x7ad064","MPL_cray_free:0x7aeadf","MPL_cray_free:0x7af1e6","MPL_cray_free:0x7b2bed","MPL_cray_free:0x7b5860","MPL_cray_free:0x7b7d06","MPL_cray_free:0x7b8418","MPL_cray_free:0x7bc2c5","MPL_cray_free:0x7c1ea3","MPL_cray_in_shmctl","MPL_cray_in_shmget","MPL_cray_malloc:0x6fda96","MPL_cray_malloc:0x6ffa3f","MPL_cray_malloc:0x70742d","MPL_cray_malloc:0x707929","MPL_cray_malloc:0x70806f","MPL_cray_malloc:0x708457","MPL_cray_malloc:0x708933","MPL_cray_malloc:0x742223","MPL_cray_malloc:0x7c1ded","MPL_cray_realloc.constprop.0","MPL_cray_realloc:0x6fdb37","MPL_cray_realloc:0x7c1ef2","MPL_cray_strdup.constprop.0","MPL_cray_strdup:0x716ab8","MPL_cray_strdup:0x7170ae","MPL_cray_strdup:0x71958e","MPL_cray_strdup:0x71b90c","MPL_cray_strdup:0x71dca9","MPL_cray_strdup:0x7200f9","MPL_cray_strdup:0x72237c","MPL_cray_strdup:0x72505f","MPL_cray_strdup:0x7277c6","MPL_cray_strdup:0x729c9d","MPL_cray_strdup:0x72c16e","MPL_cray_strdup:0x72e2d0","MPL_cray_strdup:0x730081","MPL_cray_strdup:0x733f21","MPL_cray_strdup:0x7365d2","MPL_cray_strdup:0x7389f6","MPL_cray_strdup:0x73adbd","MPL_cray_strdup:0x73cf84","MPL_cray_strdup:0x73f2c7","MPL_cray_strdup:0x74eee5","MPL_cray_strdup:0x756729","MPL_cray_strdup:0x758d76","MPL_cray_strdup:0x758ea9","MPL_cray_strdup:0x75a37f","MPL_cray_strdup:0x75d407","MPL_cray_strdup:0x75e239","MPL_cray_strdup:0x760cc5","MPL_cray_strdup:0x76c8b6","MPL_cray_strdup:0x76cd8f","MPL_cray_strdup:0x770ee6","MPL_cray_strdup:0x7752b5","MPL_cray_strdup:0x7766e9","MPL_cray_strdup:0x77a7f7","MPL_cray_strdup:0x781db5","MPL_cray_strdup:0x7837eb","MPL_cray_strdup:0x7845a8","MPL_cray_strdup:0x79340c","MPL_cray_strdup:0x7955d0","MPL_cray_strdup:0x79db1a","MPL_cray_strdup:0x79de24","MPL_cray_strdup:0x79f60e","MPL_cray_strdup:0x7a0c38","MPL_cray_strdup:0x7a1cc7","MPL_cray_strdup:0x7a9399","MPL_cray_strdup:0x7ad016","MPL_cray_strdup:0x7aea91","MPL_cray_strdup:0x7af198","MPL_cray_strdup:0x7b2b9f","MPL_cray_strdup:0x7b5812","MPL_cray_strdup:0x7b7cb8","MPL_cray_strdup:0x7b83ca","MPL_cray_strdup:0x7bc277","MPL_cray_trExit","MPL_cray_trHWMSummaryOn","MPL_cray_trInitBytesOn","MPL_cray_trSummary","MPL_cray_trconfig","MPL_cray_trmaxmem","MPL_cray_tron","MPL_cray_trshm_dec","MPL_cray_trshm_inc","MPL_cray_trshmctl","MPL_cray_trshmget","MPL_create_pathname","MPL_direct_calloc","MPL_direct_free","MPL_direct_malloc","MPL_direct_realloc","MPL_direct_strdup","MPL_env2bool","MPL_env2double","MPL_env2int","MPL_env2long","MPL_env2range","MPL_env2str","MPL_env2unsignedlong","MPL_exit","MPL_external_free","MPL_gavl_tree_create","MPL_gavl_tree_delete_range","MPL_gavl_tree_delete_start_addr","MPL_gavl_tree_destory","MPL_gavl_tree_insert","MPL_get_nprocs","MPL_get_sockaddr","MPL_get_sockaddr_direct","MPL_get_sockaddr_iface","MPL_gpu_dev_affinity_to_env","MPL_gpu_enqueue_trigger","MPL_gpu_enqueue_wait","MPL_gpu_event_complete","MPL_gpu_event_init_count","MPL_gpu_event_is_complete","MPL_gpu_finalize","MPL_gpu_free","MPL_gpu_free_hook_register","MPL_gpu_free_host","MPL_gpu_get_buffer_bounds","MPL_gpu_get_dev_count","MPL_gpu_get_dev_id_from_attr","MPL_gpu_get_dev_list","MPL_gpu_global_to_local_dev_id","MPL_gpu_init","MPL_gpu_ipc_handle_create","MPL_gpu_ipc_handle_map","MPL_gpu_ipc_handle_unmap","MPL_gpu_launch_hostfn","MPL_gpu_local_to_global_dev_id","MPL_gpu_malloc","MPL_gpu_malloc_host","MPL_gpu_query_support","MPL_gpu_register_host","MPL_gpu_stream_is_valid","MPL_gpu_unregister_host","MPL_host_is_local","MPL_initlock_lock.part.0:0x46ef00","MPL_initlock_lock.part.0:0x4f36c0","MPL_initlock_lock.part.0:0x5b9180","MPL_initlock_unlock.part.0:0x46ef30","MPL_initlock_unlock.part.0:0x4f36f0","MPL_initlock_unlock.part.0:0x5b91b0","MPL_internal_error_printf","MPL_internal_sys_error_printf","MPL_large_readv","MPL_large_writev","MPL_listen","MPL_listen_anyport","MPL_listen_portrange","MPL_msg_printf","MPL_putenv","MPL_rankmap_array_to_str","MPL_rankmap_str_to_array","MPL_set_listen_attr","MPL_shm_fixed_seg_attach","MPL_shm_fixed_seg_create_and_attach","MPL_shm_hnd_deserialize","MPL_shm_hnd_deserialize_by_ref","MPL_shm_hnd_finalize","MPL_shm_hnd_get_serialized_by_ref","MPL_shm_hnd_init","MPL_shm_hnd_serialize","MPL_shm_seg_attach","MPL_shm_seg_create","MPL_shm_seg_create_and_attach","MPL_shm_seg_create_attach_templ","MPL_shm_seg_detach","MPL_shm_seg_open","MPL_shm_seg_remove","MPL_sockaddr_port","MPL_sockaddr_set_aftype","MPL_sockaddr_to_str","MPL_socket","MPL_str_add_binary_arg","MPL_str_add_int_arg","MPL_str_add_string","MPL_str_add_string_arg","MPL_str_get_binary_arg","MPL_str_get_int_arg","MPL_str_get_string","MPL_str_get_string_arg","MPL_strdup_no_spaces","MPL_stricmp","MPL_strnapp","MPL_strncpy","MPL_strsep","MPL_thread_create","MPL_thread_set_affinity","MPL_ticks_per_second","MPL_traligned_alloc","MPL_trcalloc","MPL_trcategorydump","MPL_trconfig","MPL_trdump","MPL_trfree","MPL_trinit","MPL_trmalloc","MPL_trmmap","MPL_trmunmap","MPL_trrealloc","MPL_trstrdup","MPL_trvalid","MPL_trvalid2","MPL_usage_printf","MPL_wtick","MPL_wtime","MPL_wtime_acc","MPL_wtime_diff","MPL_wtime_init","MPL_wtime_to_ticks","MPL_wtime_todouble","MPL_wtime_touint","QMPI_Get_calling_address","QMPI_Get_function","QMPI_Get_tool_storage","QMPI_Register_function","QMPI_Register_tool_name","QMPI_Register_tool_storage","Star","VALGRIND_PRINTF","VALGRIND_PRINTF_BACKTRACE","__addtf3","__cray_dummy_ccopy_SKX","__cray_dummy_dcopy_SKX","__cray_dummy_scopy_SKX","__cray_dummy_zcopy_SKX","__do_global_dtors_aux","__fstat","__getf2","__gttf2","__letf2","__lstat","__lttf2","__muldc3","__mulsc3","__multf3","__popcountdi2","__sfp_handle_exceptions","__stat","_cray_get_clock_rate_mhz","_cray_mpi_memcpy_hsw","_cray_mpi_memcpy_int","_cray_mpi_memcpy_knl","_cray_mpi_memcpy_npl","_cray_mpi_memcpy_rome","_cray_mpi_memcpy_skx","_cray_mpi_memcpy_snb","_cray_mpi_memcpy_string","_cray_ofi_get_nic_numa_node","_cray_ofi_get_numa_node_distances","_cray_ofi_parse_num_nics_str","_cxi_counter_sample","_cxi_global_counters_init","_cxi_global_counters_report","_cxi_init_counter","_dummy_touch_tls","_json_c_set_last_err","_json_c_strerror","_json_c_visit","_json_object_to_fd","_json_object_userdata_to_json_string","_mpidi_cray_pmi_allgather","_mpiio_clock_rate","_mpiio_clock_rate_mhz","_mpiio_cray_interval_stats_flush_NEW:0x7180df","_mpiio_cray_interval_stats_flush_NEW:0x71a5bf","_mpiio_cray_interval_stats_flush_NEW:0x71c93d","_mpiio_cray_interval_stats_flush_NEW:0x71ecda","_mpiio_cray_interval_stats_flush_NEW:0x72112a","_mpiio_cray_interval_stats_flush_NEW:0x7233ad","_mpiio_cray_interval_stats_flush_NEW:0x726372","_mpiio_cray_interval_stats_flush_NEW:0x728ad9","_mpiio_cray_interval_stats_flush_NEW:0x72acce","_mpiio_cray_interval_stats_flush_NEW:0x72d19f","_mpiio_cray_interval_stats_flush_NEW:0x72f301","_mpiio_cray_interval_stats_flush_NEW:0x7310b2","_mpiio_cray_interval_stats_flush_NEW:0x735234","_mpiio_cray_interval_stats_flush_NEW:0x7378e5","_mpiio_cray_interval_stats_flush_NEW:0x739a27","_mpiio_cray_interval_stats_flush_NEW:0x73bdee","_mpiio_cray_interval_stats_flush_NEW:0x73dfb5","_mpiio_cray_interval_stats_flush_NEW:0x7402f8","_mpiio_cray_interval_stats_flush_NEW:0x7501f8","_mpiio_cray_interval_stats_flush_NEW:0x761cea","_mpiio_cray_interval_stats_flush_NEW:0x76e0a2","_mpiio_cray_interval_stats_flush_NEW:0x7779fc","_mpiio_cray_interval_stats_flush_NEW:0x7968e3","_mpiio_cray_interval_stats_flush_NEW:0x79ee55","_mpiio_cray_interval_stats_flush_NEW:0x7a063f","_mpiio_cray_interval_stats_flush_NEW:0x7b6b25","_mpiio_cray_interval_stats_write:0x7171fe","_mpiio_cray_interval_stats_write:0x7196de","_mpiio_cray_interval_stats_write:0x71ba5c","_mpiio_cray_interval_stats_write:0x71ddf9","_mpiio_cray_interval_stats_write:0x720249","_mpiio_cray_interval_stats_write:0x7224cc","_mpiio_cray_interval_stats_write:0x725491","_mpiio_cray_interval_stats_write:0x727bf8","_mpiio_cray_interval_stats_write:0x729ded","_mpiio_cray_interval_stats_write:0x72c2be","_mpiio_cray_interval_stats_write:0x72e420","_mpiio_cray_interval_stats_write:0x7301d1","_mpiio_cray_interval_stats_write:0x734353","_mpiio_cray_interval_stats_write:0x736a04","_mpiio_cray_interval_stats_write:0x738b46","_mpiio_cray_interval_stats_write:0x73af0d","_mpiio_cray_interval_stats_write:0x73d0d4","_mpiio_cray_interval_stats_write:0x73f417","_mpiio_cray_interval_stats_write:0x74f317","_mpiio_cray_interval_stats_write:0x760e15","_mpiio_cray_interval_stats_write:0x76d1c1","_mpiio_cray_interval_stats_write:0x776b1b","_mpiio_cray_interval_stats_write:0x795a02","_mpiio_cray_interval_stats_write:0x79df74","_mpiio_cray_interval_stats_write:0x79f75e","_mpiio_cray_interval_stats_write:0x7b5c44","_mpiio_rtc:0x71714b","_mpiio_rtc:0x71962b","_mpiio_rtc:0x71b9a9","_mpiio_rtc:0x71dd46","_mpiio_rtc:0x720196","_mpiio_rtc:0x722419","_mpiio_rtc:0x7250fc","_mpiio_rtc:0x727863","_mpiio_rtc:0x729d3a","_mpiio_rtc:0x72c20b","_mpiio_rtc:0x72e36d","_mpiio_rtc:0x73011e","_mpiio_rtc:0x733fbe","_mpiio_rtc:0x73666f","_mpiio_rtc:0x738a93","_mpiio_rtc:0x73ae5a","_mpiio_rtc:0x73d021","_mpiio_rtc:0x73f364","_mpiio_rtc:0x74ef82","_mpiio_rtc:0x7567c6","_mpiio_rtc:0x75d4a4","_mpiio_rtc:0x75e2d6","_mpiio_rtc:0x760d62","_mpiio_rtc:0x76ce2c","_mpiio_rtc:0x770f83","_mpiio_rtc:0x776786","_mpiio_rtc:0x77a894","_mpiio_rtc:0x783888","_mpiio_rtc:0x79566d","_mpiio_rtc:0x79dec1","_mpiio_rtc:0x79f6ab","_mpiio_rtc:0x7aeb2e","_mpiio_rtc:0x7af235","_mpiio_rtc:0x7b58af","_mpiio_rtc:0x7b7d55","_mpiio_timer_start:0x72511e","_mpiio_timer_start:0x727885","_mpiio_timer_start:0x733fe0","_mpiio_timer_start:0x736691","_mpiio_timer_start:0x74efa4","_mpiio_timer_start:0x7567e8","_mpiio_timer_start:0x75e2f8","_mpiio_timer_start:0x76ce4e","_mpiio_timer_start:0x770fa5","_mpiio_timer_start:0x7767a8","_mpiio_timer_start:0x77a8b6","_mpiio_timer_start:0x7838aa","_mpiio_timer_start:0x79568f","_mpiio_timer_start:0x7aeb50","_mpiio_timer_start:0x7af257","_mpiio_timer_start:0x7b58d1","_mpiio_timer_start:0x7b7d77","_mpiio_timer_stop:0x72528c","_mpiio_timer_stop:0x7279f3","_mpiio_timer_stop:0x73414e","_mpiio_timer_stop:0x7367ff","_mpiio_timer_stop:0x74f112","_mpiio_timer_stop:0x756956","_mpiio_timer_stop:0x75e466","_mpiio_timer_stop:0x76cfbc","_mpiio_timer_stop:0x771113","_mpiio_timer_stop:0x776916","_mpiio_timer_stop:0x77aa24","_mpiio_timer_stop:0x783a18","_mpiio_timer_stop:0x7957fd","_mpiio_timer_stop:0x7aecbe","_mpiio_timer_stop:0x7af3c5","_mpiio_timer_stop:0x7b5a3f","_mpiio_timer_stop:0x7b7ee5","_mpiio_timers_init","acc_dt_target_cmpl_cb","acc_target_cmpl_cb","acc_target_cmpl_cb.cold","ad_cray_hints_init","ad_get_env_vars","ad_gpfs_get_env_vars","ad_gpfs_timing_crw_report","add_failed_proc","add_gcn_to_list.constprop.0","adio_cray_pvar_init","aio_request_complete","align_fr","allred_stream_cleanup_cb","allred_stream_cleanup_cb.cold","allreduce_enqueue_cb","am_recv_event.constprop.0.isra.0","am_recv_event.constprop.0.isra.0.cold","append_lhost","arg_is_eof","array_list_add","array_list_bsearch","array_list_del_idx","array_list_expand_internal","array_list_free","array_list_get_idx","array_list_length","array_list_new","array_list_put_idx","array_list_sort","blkidx_m2m","blkidx_m2m.cold","brucks_sched_pup.cold:0x3b6c4","brucks_sched_pup.cold:0x3bfe8","brucks_sched_pup:0x39ff80","brucks_sched_pup:0x3d3960","build_cb_config_list","build_heap","build_nodemap_pmi2","calc_curr_count","calc_send_count_non_root","calc_send_count_root","calculate_norm_graph_costs","call_errhandler","cb_config_list_lex:0x75953b","cb_config_list_lex:0x7c0581","cb_nidlist_assign_one","checkForUserErrcode","checkValidErrcode","check_convert_lut_to_regular.part.0","check_convert_mlut_to_lut.isra.0","check_maprange_ok","check_repeats","check_type","check_xpmem_support","comm_abort_origin_cb","comm_abort_target_msg_cb","comm_split_filesystem_exhaustive","comm_split_filesystem_heuristic","comp_args_to_layout","compare_nic_names","compare_nics","compare_token","compute_pfl_components","contents_printf.isra.0","contents_printf.isra.0.cold","contig_m2m","contig_m2m.cold","contig_pack_external32_to_buf","contig_pack_to_iov","contig_unpack_external32_to_buf","copy_from_hmem_iov","copy_to_hmem_iov","cray_ofi_hwcoll_get_datatype.constprop.0","cray_trExit","cray_trInitBytesOn","cray_trmaxmem","cray_trshm_dec","cray_trshm_inc","cray_trshmctl","cray_trshmget","create_and_map.constprop.0","create_container:0x5bc670","create_container:0x6af940","create_dt_map","create_dt_map.cold","create_tclass_ep","create_vni_context","cswap_ack_target_cmpl_cb","cswap_target_cmpl_cb","datatype_attr_finalize_cb","decode","decode_buffer","delete_attr","deregister_tm_clones","detect_regular_model.part.0","direct_of_src_rmap","dloop_copy","dma_pool_alloc","dma_pool_free","do_localcopy","do_localcopy.cold","do_long_am_recv_unpack.part.0:0x65e380","do_long_am_recv_unpack.part.0:0x66b430","do_reduce","dot_printf.constprop.0.isra.0","ds_write_allowed","dwin_close_mr","dwin_free_target_mr","dynamic_intercomm_create.constprop.0","encode_buffer","establishAggregationConn","external32_basic_convert.isra.0","external32_float_convert.isra.0","file_to_info_all","fill_iov_vector.constprop.0","finalize_builtin_comm","find_and_allocate_context_id","find_async_thread","find_file","find_name","find_next_off","find_provider","first_token","frame_dummy","free_data:0x3d0160","free_data:0x3f4d60","free_tree","fstat","gavl_left_right_rotation","gavl_left_rotation","gavl_right_left_rotation","gavl_right_rotation","gavl_tree_delete_removed_nodes","gavl_tree_rebalance","gavl_tree_remove_node_internal","gavl_tree_remove_nodes","gavl_tree_search_internal","gavl_update_node_info","generate_random_addr","get_acc_ack_target_cmpl_cb","get_acc_ack_target_cmpl_cb.cold","get_acc_dt_target_cmpl_cb","get_acc_target_cmpl_cb","get_acc_target_cmpl_cb.cold","get_ack_target_cmpl_cb","get_ack_target_cmpl_cb.cold","get_avg_msgsize","get_avg_msgsize.cold","get_count:0x3c0210","get_count:0x3f7b70","get_dev_random_seed","get_dynerr_string","get_ex","get_huge","get_huge_complete","get_huge_complete.cold","get_max_procs","get_next_avtid","get_next_fr_off","get_rankmap_range","get_string_component","get_tag_from_port.part.0","get_tag_from_stringtag","get_target_cmpl_cb","get_time_seed","get_timer_time_in_double","get_total_msgsize","get_total_msgsize.cold","get_tree_type","gpfs_wr_access_end","gpfs_wr_access_start","handle_acc_data.constprop.0","has_dev_urandom","hashlittle","heapify","hint_get_int","hint_get_key","hint_get_str","hint_get_uint64","host_alloc:0x5df170","host_alloc:0x64e730","host_alloc:0x6af8e0","host_alloc_buffer_registered","host_alloc_registered","host_free:0x5df1a0","host_free:0x64e760","host_free:0x6af910","host_free_buffer_registered","host_free_registered","indent","index_m2m","index_m2m.cold","init_classes","init_lhost_list","init_lustre_lib_syms","init_send_recv_list","init_wtick","internal_Pcontrol","internal_Startall","internal_Testany","internal_Testsome","internal_Waitany","internal_Waitsome","irecv_enqueue_cb:0x56ee70","irecv_enqueue_cb:0x5d6d00","is_aggregator","is_localhost","is_valid_alignment","is_valid_index","isend_enqueue_cb:0x576020","isend_enqueue_cb:0x5ddd70","issue_packed_get","issue_packed_put","json_array_equal","json_c_get_random_seed","json_c_object_sizeof","json_c_set_serialization_double_format","json_c_shallow_copy_default","json_c_version","json_c_version_num","json_c_visit","json_escape_str","json_global_set_string_hash","json_object_all_values_equal","json_object_array_add","json_object_array_bsearch","json_object_array_del_idx","json_object_array_delete","json_object_array_entry_free","json_object_array_get_idx","json_object_array_length","json_object_array_put_idx","json_object_array_sort","json_object_array_to_json_string","json_object_boolean_to_json_string","json_object_copy_serializer_data","json_object_deep_copy","json_object_deep_copy_recursive","json_object_double_to_json_string","json_object_double_to_json_string_default","json_object_double_to_json_string_format","json_object_equal","json_object_free_userdata","json_object_from_fd","json_object_from_fd_ex","json_object_from_file","json_object_generic_delete","json_object_get","json_object_get_array","json_object_get_boolean","json_object_get_double","json_object_get_int","json_object_get_int64","json_object_get_object","json_object_get_string","json_object_get_string_len","json_object_get_type","json_object_get_userdata","json_object_int_inc","json_object_int_to_json_string","json_object_is_type","json_object_iter_begin","json_object_iter_end","json_object_iter_equal","json_object_iter_init_default","json_object_iter_next","json_object_iter_peek_name","json_object_iter_peek_value","json_object_lh_entry_free","json_object_new","json_object_new_array","json_object_new_boolean","json_object_new_double","json_object_new_double_s","json_object_new_int","json_object_new_int64","json_object_new_null","json_object_new_object","json_object_new_string","json_object_new_string_len","json_object_object_add","json_object_object_add_ex","json_object_object_del","json_object_object_delete","json_object_object_get","json_object_object_get_ex","json_object_object_length","json_object_object_to_json_string","json_object_put","json_object_set_boolean","json_object_set_double","json_object_set_int","json_object_set_int64","json_object_set_serializer","json_object_set_string","json_object_set_string_len","json_object_set_userdata","json_object_string_delete","json_object_string_to_json_string","json_object_to_fd","json_object_to_file","json_object_to_file_ext","json_object_to_json_string","json_object_to_json_string_ext","json_object_to_json_string_length","json_object_userdata_to_json_string","json_parse_double","json_parse_int64","json_pointer_get","json_pointer_get_recursive","json_pointer_get_single_path","json_pointer_getf","json_pointer_set","json_pointer_set_single_path","json_pointer_setf","json_tokener_error_desc","json_tokener_free","json_tokener_get_error","json_tokener_get_parse_end","json_tokener_new","json_tokener_new_ex","json_tokener_parse","json_tokener_parse_ex","json_tokener_parse_verbose","json_tokener_reset","json_tokener_reset_level","json_tokener_set_flags","json_tokener_validate_utf8","json_type_to_name","json_util_get_last_err","json_vasprintf:0x70d5e4","json_vasprintf:0x714d37","leaf_blkidx_count_block","leaf_blkidx_count_block.cold","leaf_blkidx_mpi_flatten","leaf_blkidx_mpi_flatten.cold","leaf_contig_count_block","leaf_contig_count_block.cold","leaf_contig_mpi_flatten","leaf_contig_mpi_flatten.cold","leaf_index_count_block","leaf_index_count_block.cold","leaf_index_mpi_flatten","leaf_index_mpi_flatten.cold","leaf_vector_count_block","leaf_vector_count_block.cold","leaf_vector_mpi_flatten","leaf_vector_mpi_flatten.cold","left","lh_char_equal","lh_char_hash","lh_get_hash:0x70a4c5","lh_get_hash:0x7137ab","lh_kchar_table_new","lh_kptr_table_new","lh_perllike_str_hash","lh_ptr_equal","lh_ptr_hash","lh_table_delete","lh_table_delete_entry","lh_table_free","lh_table_insert","lh_table_insert_w_hash","lh_table_length","lh_table_lookup_entry","lh_table_lookup_entry_w_hash","lh_table_lookup_ex","lh_table_new","lh_table_resize","llapi_ladvise_lock","load_acc_hint","locate_context_bit","lstat","make_stats_type","match_procs","match_this_proc","mc_debug","mc_error","mc_get_debug","mc_info","mc_set_debug","mc_set_syslog","mergesort_lpidarray","mlut_update_avt_reference","mpi_to_pmi_keyvals","mpid_cray_pmi_finalize","mpid_cray_pmi_get_nidlist_ptr","mpid_cray_pmi_get_nidlist_ptr.part.0","mpid_cray_pmi_get_numpes_on_smp","mpid_cray_pmi_init","mpidi_cray_ofi_hwcoll_hndl_create","mpiio_cray_interval_stats_flush_NEW:0x71716d","mpiio_cray_interval_stats_flush_NEW:0x71964d","mpiio_cray_interval_stats_flush_NEW:0x71b9cb","mpiio_cray_interval_stats_flush_NEW:0x71dd68","mpiio_cray_interval_stats_flush_NEW:0x7201b8","mpiio_cray_interval_stats_flush_NEW:0x72243b","mpiio_cray_interval_stats_flush_NEW:0x725400","mpiio_cray_interval_stats_flush_NEW:0x727b67","mpiio_cray_interval_stats_flush_NEW:0x729d5c","mpiio_cray_interval_stats_flush_NEW:0x72c22d","mpiio_cray_interval_stats_flush_NEW:0x72e38f","mpiio_cray_interval_stats_flush_NEW:0x730140","mpiio_cray_interval_stats_flush_NEW:0x7342c2","mpiio_cray_interval_stats_flush_NEW:0x736973","mpiio_cray_interval_stats_flush_NEW:0x738ab5","mpiio_cray_interval_stats_flush_NEW:0x73ae7c","mpiio_cray_interval_stats_flush_NEW:0x73d043","mpiio_cray_interval_stats_flush_NEW:0x73f386","mpiio_cray_interval_stats_flush_NEW:0x74f286","mpiio_cray_interval_stats_flush_NEW:0x760d84","mpiio_cray_interval_stats_flush_NEW:0x76d130","mpiio_cray_interval_stats_flush_NEW:0x776a8a","mpiio_cray_interval_stats_flush_NEW:0x795971","mpiio_cray_interval_stats_flush_NEW:0x79dee3","mpiio_cray_interval_stats_flush_NEW:0x79f6cd","mpiio_cray_interval_stats_flush_NEW:0x7b5bb3","my_consensus","network_split_by_minsize","next_token","nid_compare","nonContigSourceDataBufferAdvance","num_children","num_children.cold","ofi_am_post_recv.part.0.constprop.0.isra.0","optbalance","optimized_get.part.0","pairtypes_finalize_cb","parent","parse_json_tree","parse_targets","part_req_create","part_req_create.cold","part_send_data_target_cmpl_cb","post_aggregator_comm","post_client_comm","print_heap","printbuf_extend","printbuf_free","printbuf_memappend","printbuf_memset","printbuf_new","printbuf_reset","process_pre_req","progress_fn","prune_tree","put_dt_target_cmpl_cb","put_ex","put_target_cmpl_cb","put_target_cmpl_cb.cold","quoted_printf","read_config_files.constprop.0","recv_enqueue_cb:0x56ef40","recv_enqueue_cb:0x5d6da0","recv_stream_cleanup_cb","recv_target_cmpl_cb","recv_target_cmpl_cb.cold","register_tm_clones","release_temp_buffer","reset_shared_state","right","romio_statfs","sched_add_ref","sched_cb_commit_comm","sched_cb_gcn_allocate_cid","sched_cb_gcn_allocate_cid.cold","sched_cb_gcn_bcast","sched_cb_gcn_copy_mask","sched_dump","sched_get_cid_nonblock","sched_test_length","send_enqueue_cb:0x576130","send_enqueue_cb:0x5dde10","set_map.isra.0","set_rma_fi_info","setstripe_args_init","setup_single_nic","shared_mem_coll_dump_dir","sorttype_compare","sprintbuf","src_map_to_lut.isra.0","src_mlut_to_mlut.isra.0","stat","str_to_int","str_to_uint64","string_replace_all_occurrences_with_char","token_copy","trace_misc","trace_read","trace_write","trcalloc","trdump","tree_add_child","trfree","trmalloc","trmmap","trmunmap","trrealloc","trstrdup","trvalid","type_block","type_create_contiguous_x","type_cyclic","type_size_is_zero","type_size_is_zero.cold","type_struct.part.0","ull_maxloc_op_func","update_multi_nic_hints.part.0","update_nic_preferences.part.0","update_type_blockindexed","update_type_blockindexed.cold","update_type_indexed","update_type_indexed.cold","update_type_vector","update_type_vector.cold","uses_generic_read","uses_generic_write","utarray_str_cpy:0x716b55","utarray_str_cpy:0x718309","utarray_str_cpy:0x71a7e9","utarray_str_cpy:0x71cb67","utarray_str_cpy:0x71ef04","utarray_str_cpy:0x721354","utarray_str_cpy:0x7235d7","utarray_str_cpy:0x72659c","utarray_str_cpy:0x728d03","utarray_str_cpy:0x72aef8","utarray_str_cpy:0x72d3c9","utarray_str_cpy:0x72f52b","utarray_str_cpy:0x7312dc","utarray_str_cpy:0x73545e","utarray_str_cpy:0x737b0f","utarray_str_cpy:0x739c51","utarray_str_cpy:0x73c018","utarray_str_cpy:0x73e1df","utarray_str_cpy:0x740522","utarray_str_cpy:0x750422","utarray_str_cpy:0x756aca","utarray_str_cpy:0x758e13","utarray_str_cpy:0x758f46","utarray_str_cpy:0x75a41c","utarray_str_cpy:0x75d4c6","utarray_str_cpy:0x75e5da","utarray_str_cpy:0x761eff","utarray_str_cpy:0x76c953","utarray_str_cpy:0x76e2cc","utarray_str_cpy:0x7712c4","utarray_str_cpy:0x775352","utarray_str_cpy:0x777c26","utarray_str_cpy:0x77abd5","utarray_str_cpy:0x781e52","utarray_str_cpy:0x783b8c","utarray_str_cpy:0x784645","utarray_str_cpy:0x7934a9","utarray_str_cpy:0x796b0d","utarray_str_cpy:0x79dbb7","utarray_str_cpy:0x79f07f","utarray_str_cpy:0x7a0869","utarray_str_cpy:0x7a0cd5","utarray_str_cpy:0x7a1d64","utarray_str_cpy:0x7a9436","utarray_str_cpy:0x7ad0b3","utarray_str_cpy:0x7aee32","utarray_str_cpy:0x7af539","utarray_str_cpy:0x7b2c3c","utarray_str_cpy:0x7b6d4f","utarray_str_cpy:0x7b8059","utarray_str_cpy:0x7b8467","utarray_str_cpy:0x7bc314","utarray_str_dtor:0x716bad","utarray_str_dtor:0x718361","utarray_str_dtor:0x71a841","utarray_str_dtor:0x71cbbf","utarray_str_dtor:0x71ef5c","utarray_str_dtor:0x7213ac","utarray_str_dtor:0x72362f","utarray_str_dtor:0x7265f4","utarray_str_dtor:0x728d5b","utarray_str_dtor:0x72af50","utarray_str_dtor:0x72d421","utarray_str_dtor:0x72f583","utarray_str_dtor:0x731334","utarray_str_dtor:0x7354b6","utarray_str_dtor:0x737b67","utarray_str_dtor:0x739ca9","utarray_str_dtor:0x73c070","utarray_str_dtor:0x73e237","utarray_str_dtor:0x74057a","utarray_str_dtor:0x75047a","utarray_str_dtor:0x756b22","utarray_str_dtor:0x758e6b","utarray_str_dtor:0x758f9e","utarray_str_dtor:0x75a474","utarray_str_dtor:0x75d51e","utarray_str_dtor:0x75e632","utarray_str_dtor:0x761f57","utarray_str_dtor:0x76c9ab","utarray_str_dtor:0x76e324","utarray_str_dtor:0x77131c","utarray_str_dtor:0x7753aa","utarray_str_dtor:0x777c7e","utarray_str_dtor:0x77ac2d","utarray_str_dtor:0x781eaa","utarray_str_dtor:0x783be4","utarray_str_dtor:0x78469d","utarray_str_dtor:0x793501","utarray_str_dtor:0x796b65","utarray_str_dtor:0x79dc0f","utarray_str_dtor:0x79f0d7","utarray_str_dtor:0x7a08c1","utarray_str_dtor:0x7a0d2d","utarray_str_dtor:0x7a1dbc","utarray_str_dtor:0x7a948e","utarray_str_dtor:0x7ad10b","utarray_str_dtor:0x7aee8a","utarray_str_dtor:0x7af591","utarray_str_dtor:0x7b2c94","utarray_str_dtor:0x7b6da7","utarray_str_dtor:0x7b80b1","utarray_str_dtor:0x7b84bf","utarray_str_dtor:0x7bc36c","validate_tree","vector_m2m","vector_m2m.cold","vector_pack_to_iov","view_state_add_region","view_state_get_cur_sz","view_state_get_next_len","vtx_issue.constprop.0","wait_enqueue_cb","waitall_enqueue_cb","waitall_enqueue_cb.cold","wildmat","win_allgather","win_finalize.isra.0","win_finalize.isra.0.cold","win_init","win_init.constprop.0","win_lock_advance","win_lock_req_proc","win_set_info.constprop.0","win_set_per_win_sync","win_shm_alloc_impl.isra.0","win_unlock_done","win_unlock_proc","xorshift_rand","xpmem_seglist_lookup"],"binary_path":"/opt/cray/pe/lib64/libmpi_cray.so.12","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-haridev-tuolumne.json b/etc/datacrumbs/data/probes-haridev-tuolumne.json deleted file mode 100644 index e94a7730..00000000 --- a/etc/datacrumbs/data/probes-haridev-tuolumne.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"libc","functions":["access","chdir","chmod","chown","close","closedir","connect","creat","creat64","dirfd","dup","dup2","dup3","eaccess","euidaccess","eventfd","faccessat","fallocate","fallocate64","fchdir","fchmod","fchmodat","fchown","fchownat","fcloseall","fcntl","fcntl64","fdatasync","fdopendir","fflush","fgetc","fgets","fgetwc","fgetws","fgetxattr","fileno","flistxattr","flock","fopen64","fprintf","fputc","fputs","fputwc","fputws","fread","fremovexattr","freopen","freopen64","fscanf","fseek","fseeko","fseeko64","fsetxattr","fsync","ftell","ftello","ftello64","ftruncate","ftruncate64","ftw","ftw64","fwprintf","fwrite","fwscanf"],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-invalid-haridev-lead-us.json b/etc/datacrumbs/data/probes-invalid-haridev-lead-us.json deleted file mode 100644 index 0988353c..00000000 --- a/etc/datacrumbs/data/probes-invalid-haridev-lead-us.json +++ /dev/null @@ -1 +0,0 @@ -[{"type":2,"name":"libc","functions":[],"binary_path":"/usr/lib64/libc.so.6","include_offsets":false}] diff --git a/etc/datacrumbs/data/probes-invalid-haridev-lead.json b/etc/datacrumbs/data/probes-invalid-haridev-lead.json deleted file mode 100644 index fd9f7654..00000000 --- a/etc/datacrumbs/data/probes-invalid-haridev-lead.json +++ /dev/null @@ -1 +0,0 @@ -[{"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/data/probes-root-docker.json b/etc/datacrumbs/data/probes-root-docker.json deleted file mode 100644 index 52924557..00000000 --- a/etc/datacrumbs/data/probes-root-docker.json +++ /dev/null @@ -1 +0,0 @@ -[{"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":"/workspaces/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c","start_event_id":100000,"process_header":"/workspaces/datacrumbs/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h","event_type":2},{"type":2,"name":"libc","functions":["__GI___fork","__GI___register_atfork","__GI___vfork","__libc_vfork","__malloc_fork_lock_parent","__malloc_fork_unlock_child","__malloc_fork_unlock_parent","__run_fork_handlers","__unregister_atfork"],"binary_path":"/usr/lib64/libc.so.6","function_offsets":["0xf96b8","0x841c0","0x73458","0x9e6f0","0x6da68","0x9e650","0x10bb48","0xbbaf8","0xe4fd8","0x70038","0xf7d00","0xe6010","0x103660","0xf67b8","0x64c40","0xf8938","0xfdae0","0x6f470","0x2b720","0xf8c10","0xb9f00","0xd2888","0xd3878","0x73728","0x62c68","0x1029a8","0xf7db0","0xab678","0x103308","0x1031d8","0x10bbd8","0xa10f0","0x1029a0","0x10bae8","0xbbb70","0xf6e28","0xa2c70","0x100c60","0x736c8","0x1005c8","0x1037a0","0x10d690","0x73788","0x10bb18","0xa3100","0xf9738","0x6e688","0x73758","0xe38d8","0xa11f0","0xd2888","0x62ef0","0x70880","0x64eb8","0x83f40","0xf9920","0xfdb30","0x6fa70","0xc69e0","0x6c170","0x103658","0x100d58","0xf6310","0xf9798","0x101720","0xf7b20","0x103d00","0xf6fc8","0xf98b8","0x1005f8","0x102b48","0x104370","0xfcd78","0xd1ba0","0x207c0","0x34640","0x103938","0x9f680","0x87400","0xd1e40","0x9ec58","0xf0eb8","0x10d880","0xe38d8","0xd24f0","0x33628","0xff258","0xf9698","0xf4850","0x74218","0x49c70","0x685b0","0xd24b0","0x103ff0","0x79dc0","0x108a08","0xc4958","0xc4940","0xce4b0","0x72af0","0xffba8","0x103768","0x66ec8","0x101f48","0xa4bc0","0x20858","0xe1aa0","0x718e0","0xe2eb0","0xf4558","0x1003c0","0x7e180","0xcea88","0x2ce68","0xf00e8","0x4c2a0","0x1021d8","0xca0c0","0xeb3a0","0x83f40","0xf4c88","0xd2850","0xe4120","0xffaa0","0x100cd8","0x77d68","0x10b6f8","0x101928","0xaec78","0xf8990","0xa7d38","0x67a20","0x110528","0xd6ed0","0xf9860","0xf6d68","0xd1978","0x32220","0xd2a90","0xcc9b8","0x37338","0x73da0","0x32868","0x6c170","0x2af10","0x101268","0x2abe8","0xd9358","0xc49e0","0x733b0","0xac2f8","0xdaf88","0x72ac8","0x325b8","0x1116a8","0xd1e60","0xff8f0","0x6c840","0x30148","0x37c60","0xf8ac8","0xc49f8","0x73040","0xd25b0","0xb9d80","0xd2fd0","0x103658","0xcdd60","0xc3600","0xff210","0xcf9c8","0xd4eb0","0xdae68","0xa4b90","0x42478","0x7fe88","0x103538","0x32170","0x1000e0","0x7bae8","0x6e790","0x36908","0xa23f0","0xc5b70","0x20b48","0x2e738","0xc4940","0x6ce78","0x7e5c0","0xbb9f0","0xe90e8","0xe6010","0x32170","0x87478","0x22a40","0xf76e8","0xd5628","0x74c70","0x71ca8","0xd2d50","0xc3ec8","0xd50c0","0xd2970","0xd1dd0","0xc3b90","0x107a88","0x7e180","0xa4f00","0xd5628","0x2b868","0xd2670","0xfd848","0x963c0","0x9ed70","0xa4d78","0x737b8","0x9a000","0x107368","0x74e90","0x939e8","0x295e8","0x35a00","0xc3c98","0x94970","0xc5250","0x85798","0x104370","0x100b88","0x1039e8","0xfdb08","0xf9668","0x7a5c8","0xe2068","0xb9d80","0x23728","0x65e50","0x1033c8","0xd2650","0xf12c0","0x33a90","0xc99e8","0x103658","0xffd20","0xc8a50","0x80200","0x71cf0","0x102e18","0xca258","0xe8240","0xee650","0xd6000","0x6da68","0x37338","0xa50d8","0xa3100","0x30148","0xdeb20","0x4e9e8","0x102f88","0x70880","0xd5160","0x6a1b8","0xfcea8","0xa4f58","0xb9588","0xf4e70","0x103e08","0x31df8","0xf5480","0x21a30","0xcf190","0xc41c8","0x103888","0xc8318","0xd2ac8","0x32468","0x2c968","0xcaa28","0x1059f8","0xe1a78","0x1005f8","0x2c4e0","0xf96d8","0x841c0","0xc8c30","0xd2a50","0xed278","0x4ea90","0xd40a0","0x4e898","0x10d760","0xc3ce0","0x103538","0x36988","0x210e0","0xd1840","0xa59e0","0x332c8","0x1029a0","0xd97f8","0xc94e0","0xf4a20","0x75710","0x796d0","0xfef88","0x1077e0","0xd4500","0x441b0","0x1021d8","0xd2888","0x10ef20","0x32fb0","0x32630","0x66960","0xc3b90","0xf5718","0xfff98","0xabcb0","0x6ca08","0x2c9b8","0x252a8","0x110a18","0xcd820","0xd5d30","0xc9a30","0xf7748","0xff728","0xce3f8","0xd2020","0x6f640","0x80930","0xee908","0xd46a0","0x37368","0xca9c0","0x96da0","0x73b60","0xf8ce8","0x46f90","0x10a378","0xa5018","0x6a340","0x111448","0x2e418","0xcb380","0xd5160","0xcc4b8","0xffc30","0xed628","0xd3b58","0x7ee60","0x33490","0x44640","0xd26b0","0x7a0f0","0x101720","0x44168","0x7a310","0x73aa0","0xd3598","0xeaa30","0x105c50","0xf97f0","0x802b8","0x34960","0x23280","0x31e20","0x91988","0xfc020","0xf5b20","0x79580","0x932a8","0xf4a20","0xb86c0","0xf6370","0xc9790","0x84418","0x10d790","0x62ef0","0x4db18","0xb9be0","0xf5708","0x65280","0xda3c8","0xc3ba0","0x78768","0xc4580","0xf6540","0x60848","0xc2ba8","0x5a078","0x35250","0x61808","0xd6fd0","0xd2690","0xb9508","0x7e900","0x867c0","0xfd3b8","0xd5628","0xa4358","0xdca38","0x1000e0","0xcabb8","0x102e20","0xfca68","0xe1b80","0x8eb60","0xce220","0xd56a8","0x873b8","0xa2c70","0xbb9d0","0xd2490","0x74690","0xffd20","0x102410","0xeeae8","0xd30d8","0xa10f0","0x22868","0xc3388","0xd10f8","0x73788","0xed1b8","0x33980","0x104228","0x103558","0xc9da8","0x37368","0xf4b50","0x68e50","0xd57d8","0x35230","0xc5268","0xf6310","0xdd1c0","0x7bdb8","0x860f8","0xf6498","0xf76e0","0xc3600","0x67f18","0x100a98","0x64400","0xfc3b8","0x210e8","0xd92f0","0xc41c8","0x37380","0x67da0","0x7bff0","0x857d0","0x32ad8","0xce4e8","0x68328","0x64c40","0xf67b8","0xc3ec8","0xce320","0x2db98","0xbbaa0","0xa4f40","0x6fa70","0xd0530","0xd5c10","0x2e428","0x110c58","0x71330","0x83f98","0xd2610","0xd1900","0xc9140","0xbef88","0x9c108","0x7cb98","0x20f10","0x1087f8","0xbbbc8","0xfb2a0","0xfbaf8","0x108870","0xf70d0","0xdf838","0xf5170","0x873d0","0xff728","0xe1b80","0xbfd70","0xf7d00","0xc8670","0x714e0","0xd3960","0x109f10","0xfc610","0x1043c8","0xa4f00","0x2ac48","0x24030","0xf9698","0xfb2b8","0xfbd60","0x10b180","0x9f518","0x750b8","0xff330","0x37830","0x83f98","0x93a58","0xd2000","0x80590","0xd2510","0x4c2a0","0xf6ec8","0xf8c10","0x7b500","0xa6960","0x62c68","0xc9140","0x6fd10","0x869a8","0x70038","0x32548","0xbba00","0x42868","0x102a58","0x103938","0x100538","0x10bb68","0xc9248","0xe8ea8","0x32f60","0xa1da8","0x963e0","0x6e0d0","0xd2c90","0x6c178","0xf8638","0x1005c8","0x7e8b0","0xd1be8","0x8ed38","0x110db0","0x5a1e0","0x46f90","0x87448","0xc49a8","0xf8838","0x745b8","0xa3bd0","0xf5d60","0x9fb78","0x2c268","0xfd578","0x68230","0xd2a70","0xa39a0","0x6e128","0xbbbe8","0xc9360","0xf0990","0xfb338","0x78f48","0x443c8","0xc8ef0","0x31db8","0x10b1d0","0x9ffb8","0x6e178","0x10adf8","0x71bd0","0x10ad90","0x10ad38","0x108f90","0x102e28","0x108ee0","0x108dc0","0x108db8","0x6f510","0x1088f0","0xf3408","0x1088f0","0xd2888","0x28b88","0x1088f0","0x71ab8","0xff6a8","0xe1b28","0xe8898","0x1074c8","0x737b8","0x111658","0x76e90","0x791b0","0x67d00","0x111608","0xe8df0","0xa4540","0x104700","0xc47f0","0xce3e0","0x2ffd8","0x1060a0","0x1042f0","0xf6ec0","0x1042b0","0xdcaf8","0x103f38","0x103ee0","0x103c28","0xd1b88","0xd4998","0x103ba8","0x103be8","0x33920","0x103ab0","0x431e8","0x10f068","0x103a98","0x75638","0x101970","0x101950","0xfb498","0x100740","0x791b0","0x103ec8","0x101938","0x8a0e0","0x101930","0x101500","0x336d8","0x1014b8","0xd1920","0xe47c8","0x101288","0xf3b60","0xcf208","0xd1e78","0x10ef20","0xfe7f8","0xada18","0xf97f0","0x70560","0xdee98","0xfe7a0","0xfe610","0x7a380","0x93af0","0xfe5f0","0xfe5d8","0xfde60","0xfdca8","0x7e9c8","0xfdc88","0xc3970","0xfdc70","0x658e8","0xe47c8","0x6e830","0x20a80","0x1037d8","0x70440","0x6c7d8","0xad3d8","0x50f78","0x104138","0x72c70","0x6b1f8","0xc8428","0xc3658","0x677e8","0x637b8","0x43790","0xd4310","0xcee50","0x625e0","0x4a098","0x638f0","0x916f8","0xa2d70","0x49cb0","0x35eb0","0xfb2e0","0x6e570","0x2d0c8","0x93138","0xc52b0","0xf74b8","0xc5b10","0xf0ea0","0x65a90","0xd2ff0","0xbc7b8","0xd96f0","0x21a40","0xbba80","0xcb320","0xc3d28","0x72518","0x20f48","0x6e610","0x84b90","0xfd3b8","0xfc728","0xff728","0xad100","0x8ea70","0xbf2f8","0xf6d68","0x91790","0x420d0","0x53fa0","0x93bb0","0xf6e28","0x874a8","0x35160","0xd1df0","0xa5018","0xc9a80","0xc6b08","0x7e390","0xe9eb0","0xebfc0","0xf96f8","0x95b48","0xf8e08","0xded70","0x100a98","0xfc058","0x103068","0x35eb0","0x1023c8","0xd2888","0xce340","0x33580","0x102c08","0x93d08","0x6c090","0x62c68","0xddfc8","0x37338","0xbba60","0xe6d88","0x1114a8","0x100a20","0x6e9b8","0x6ee70","0x33748","0x293f8","0x35ed0","0x10ade8","0xf4558","0x103660","0x746c8","0xadda0","0x4c510","0xcc540","0x78bf8","0xf1a88","0xe7be8","0xa4c08","0xc92b8","0xc4100","0xa11f0","0x6d498","0x22ab0","0xf2c48","0x63688","0xfff98","0xad1a0","0xfdb30","0xc49e0","0xd25d0","0x1041a8","0x84120","0x71078","0x1029a8","0x20ec8","0x71cf8","0xa6960","0x74808","0xaee98","0xf6ec0","0x73458","0xd7740","0x32868","0x102d10","0x37820","0x2d148","0x30758","0x103ef8","0x87d10","0x68df0","0x932c8","0x62c68","0xff5a8","0xf4bf0","0x103318","0x6f890","0xea278","0xae7f8","0x41618","0xa3100","0xd0018","0x68178","0xc46b0","0xfcb88","0xad8f0","0x71b90","0xa4bb0","0x102e28","0xf0fd0","0x67850","0xd58e0","0xa37a0","0x6ae78","0x356e8","0x22938","0x102948","0x354d0","0x106438","0xeeef0","0x6b680","0xb9670","0x41388","0xd5420","0x29608","0xff230","0xa1d70","0x27c00","0xc4038","0x100b10","0x1019c8","0x85c70","0x67850","0x9f680","0xa39c0","0x103318","0x77b88","0xc07d0","0xc4580","0x87418","0xfce30","0x933a8","0xbaa88","0x100a20","0xbbba8","0x102948","0x7a850","0xfcd78","0x7ec00","0xf6160","0x6fa58","0x8ec50","0x103760","0x100598","0xeaa78","0x7ef68","0x7ddc0","0x106d30","0x323e0","0xfaf98","0xa2c70","0xf8838","0xef638","0x10d820","0x1051b0","0xc4580","0x7a980","0xd2e30","0x3f0b0","0xa4f58","0xa55f0","0xf5270","0xf7818","0x34bc8","0x335d0","0x7e780","0xf6fc8","0xd2a90","0x67c98","0xce1c0","0x68698","0xd5dc0","0xd0eb8","0xcc798","0x86200","0xb01d8","0xf96b8","0xe2068","0xbf188","0x73940","0xc92f8","0x27678","0xd06b8","0x6e0e0","0x87920","0xc9078","0xef158","0x928b0","0xa1628","0x21010","0x6cd20","0xd2fd0","0xf5710","0x873e8","0x67ac8","0xc49e0","0x87490","0x86fe0","0x1003f0","0x103af8","0x63640","0x86090","0x32548","0x102540","0xf0408","0xa4128","0x84338","0x2f988","0xdb7c8","0xf9698","0x67950","0xd2d50","0xf82d0","0x637b0","0xc5620","0x6d7e8","0x103fd8","0xf48e8","0x1023c8","0xf7798","0x29a88","0xeb2c0","0x79ed0","0xe1ab8","0x237f8","0xd9430","0x103c80","0x33a90","0xf1400","0xda5a8","0x87920","0x607a0","0xf8588","0x84098","0x7ea98","0x1027e0","0xc88a0","0xd0af8","0xce818","0xf4ab8","0x102870","0xff860","0xfce58","0xaf300","0x965b0","0xc2f80","0x104330","0x63110","0x70038","0x1042a8","0xd26b0","0xd2a50","0x81060","0xb12d0","0xce990","0x7c3e8","0xe4d20","0x360b0","0xa1fc0","0xbbac0","0x109448","0xf8ca0","0x1083f8","0xd2670","0x101538","0x873b8","0xeadd8","0x75bf8","0xd1880","0x31df8","0x737e8","0x9eff0","0x74e68","0xeaa78","0xd7a30","0x102b08","0x7d024","0x92ff8","0x219d0","0xf88b8","0x7b150","0x103760","0x10d850","0x103d00","0xfd848","0x6e178","0x2ce78","0xc9048","0xac030","0xd0e98","0x50f78","0x111280","0x101070","0xec090","0xf7db0","0xfc618","0xd2630","0xc9c60","0x3cf60","0xc3a60","0xd2a70","0xac5d0","0xc8fe8","0x28da0","0xf8010","0x7b2d8","0xbbb70","0x100bf0","0x715d8","0x6d4c8","0xf4ee0","0x6e1e0","0xf1570","0xbfa48","0x85e88","0x7e0a0","0xabf10","0xfbd78","0x44380","0x28a18","0xf5778","0x103308","0xe2068","0x6e790","0xc2708","0x7c310","0x84098","0xccfd8","0x79070","0xa5390","0x63278","0xa4f00","0x103ce0","0x37830","0x103ee8","0x9f450","0x741f8","0x7d19c","0xf1610","0xb9ac0","0xedfd0","0xa2d70","0x70528","0xed3f8","0x9f9f8","0xe35c0","0xc48a0","0xd5160","0xad7f0","0x6c020","0x102a58","0xcd640","0xaa288","0xdebc0","0xcf578","0xc8fe8","0x691b8","0xf4720","0xd2888","0x30a10","0xb9be0","0xba0c0","0xd9570","0xb0e08","0xfd0e8","0xa4cc0","0x75778","0x841f0","0xf4688","0x103068","0x6d4d0","0xd26f0","0xb0d68","0xf8248","0x10bcd8","0x103888","0x10d6d0","0xc3a40","0xddfc0","0x103558","0x67538","0xd13e8","0x10f068","0xbbaa0","0x6cab0","0x611a0","0x72c10","0x1082a0","0xdb450","0xf5368","0xbba60","0xd2888","0xcf310","0x103558","0x94140","0xea930","0x85280","0xd26f0","0x63f50","0xc2cb8","0xae770","0x10acd8","0xa4ea0","0x7e420","0x2c750","0x3feb0","0xcf828","0xe89b0","0xccf78","0x1021c8","0x85480","0xcb6a0","0xa1a60","0x101ca8","0xc2708","0xc48a0","0x67028","0x1033c8","0xfc830","0x6cd28","0xa4b90","0xffc30","0x7c4b8","0xf7eb8","0x858f0","0x721d8","0x7a720","0x33060","0x32698","0xd25f0","0xc2cc0","0xf67b8","0x6c938","0xddf40","0xc5c68","0x1031d8","0x9f2b8","0x873e8","0x1087f8","0x111490","0x1010e8","0x21b40","0x6b268","0xbf1f8","0x33720","0xf2bc8","0x29350","0xfdcb0","0x21430","0x105b10","0x100160","0x74e50","0x1088f0","0x1040c0","0xd59d0","0xd2988","0xbf3d8","0x28928","0x100830","0x10a000","0xb0ca0","0xc5b28","0x110670","0xd40a0","0x42318","0xc3d28","0x627d0","0xd6fd0","0xbba40","0x6ac58","0x103aa0","0x66bd8","0x7adf8","0xf6fc8","0x6ebe0","0x108d10","0xedf10","0x70a70","0xc2cc0","0x74ac0","0x37830","0xa11f0","0xff7d0","0x70b30","0xc3ec8","0xb39f0","0x710a0","0x6aea0","0x74210","0xd27d0","0x443a0","0x857d0","0xfdb08","0xd3bc0","0x5f930","0x442a8","0xac0a8","0xf10b0","0xfa3a0","0xf76f0","0x74700","0xc27d8","0xf5d60","0xf8368","0xd2ba8","0x74798","0xbd018","0xdecd0","0x105298","0x243e8","0x33680","0x63dc0","0xf24d0","0x7be40","0xdca50","0x74f68","0x72ae8","0x71eb0","0xd2970","0x2f9a0","0xc3d28","0xa37a0","0x3a8c8","0xdce50","0x100908","0xcf310","0xd1d28","0x78448","0x3c7f8","0xc8d00","0x77f90","0xc9640","0x72ad8","0x32688","0x71b18","0x72b20","0xc36b0","0xbbb70","0xa4e80","0x32bc8","0xe66f8","0x77c48","0x638b0","0x101250","0xe29e8","0xae448","0x102ff8","0x7a410","0xce528","0x3f390","0x73728","0x78f48","0x8c6d0","0xd0c70","0xcb360","0x6eed8","0x7b908","0x7d570","0x3c7f8","0x43660","0x81dd0","0x22e18","0xadb60","0xc6ba0","0x33a98","0xee9d8","0x93490","0xcb360","0x93a58","0xd4820","0xf36b8","0x94020","0x32378","0x96cc0","0xf7d00","0x9e8a0","0x80348","0xd1d80","0x73f48","0xce528","0xd9910","0x2d1c8","0xa48b0","0x100218","0xd4068","0x7d3c0","0xa3b48","0x100d58","0xff8f0","0x107710","0xa54c8","0xa3768","0xad180","0x744b0","0x3a250","0xc6a18","0x1023c8","0x104b08","0xa7e30","0x7cec0","0xad150","0xe35c0","0x10d730","0xc93c0","0xa80b8","0xf4bf0","0x2ce00","0x111198","0x323d0","0xa87e0","0xa9b78","0xcb360","0xaba40","0x7e850","0xabab0","0xd9f38","0x107a30","0xd26f0","0x105200","0x102ff8","0xac1e0","0xb4650","0xace68","0xb11b0","0xa4be0","0xacef0","0x38360","0x80590","0x1090d8","0xfdb30","0xbbd28","0x7c160","0xfef88","0x9f7e8","0xad038","0x2ce48","0xfdb08","0x9f648","0x70528","0xf1108","0x67490","0x651c8","0xd18a0","0xad730","0x66be0","0xe6ff0","0x63860","0xe6908","0x37350","0xf3e78","0xad860","0x1009a8","0x1003c0","0xa3fb0","0x84e40","0xf5700","0x6e128","0xc6fa0","0x20f00","0xd07f0","0xc94e0","0x68470","0x10b868","0xbbbf8","0xade40","0xd8c78","0xadf10","0x7ccd8","0xd9f80","0x94478","0xae010","0xafd80","0xc3ba0","0x103768","0xae320","0x20af0","0x109060","0xcbb98","0xae608","0x103b68","0xc4990","0xfc3b8","0xb31a8","0x10ee10","0xaff80","0xd2888","0xb02f8","0xbba20","0xb0418","0xd9970","0xa4bd0","0x1109a8","0x6fc70","0xb1048","0xcf358","0xb1ac8","0xccfd8","0x103538","0x100568","0xd7778","0x332d8","0xb2210","0xc5250","0x6a170","0xfbaf8","0xc5a60","0xb2c18","0xb4190","0xc36b0","0x448b0","0xb58c8","0xb6828","0xffe08","0x72ad0","0xb84f8","0xb8898","0x20f20","0x101070","0x80dd0","0xf1048","0x749d0","0x4dda0","0x4e730","0x32220","0xbc7d0","0xce1c0","0xc9a80","0xbc9c0","0xca000","0xbd198","0xbeff8","0xf9af8","0xf0e88","0xf6498","0xbf0d0","0xf84d0","0xcaff0","0x100fc8","0xbfc18","0x6c470","0xf8ca0","0xfdc48","0xbfec0","0xbffe0","0x651c8","0xf48e8","0x32220","0xbc8d0","0xc4990","0xebff8","0x10d0b0","0xd3be8","0xc5bc8","0xc6530","0xa0240","0xf7910","0xc6e48","0x100cd8","0x741d0","0xdf2e8","0xcb790","0xd0860","0x23bb8","0x24870","0xcbab8","0xd28a8","0xed4f0","0xcd018","0x109c78","0xd8e00","0xcf6a8","0xcd790","0xe71c0","0x79cc0","0xccb98","0xcf638","0x33e68","0x10d8b0","0x6e0f0","0xcf358","0xd0198","0xc39e0","0xd1088","0x70440","0xccc08","0x1087f8","0xfac90","0xf5720","0xd8938","0xf7f20","0x6e4b0","0xcca80","0xd4800","0xf1510","0xa4b80","0x10d700","0x1000e0","0xd4840","0xd4868","0x37ce8","0xffaa0","0x53fa0","0xd9a08","0x681e0","0xf5e28","0x93288","0x42260","0xc4100","0xf6ec8","0xfb778","0xda000","0xda498","0x64e50","0x9f388","0xda568","0xef158","0x781f0","0xa1628","0xf14c0","0xf5240","0xd97a0","0xe4fd8","0xda840","0x7a0f0","0xef498","0xf74b0","0xda8c8","0xd2888","0x10ac10","0x66a18","0x327f8","0x20ee8","0x75d08","0xdb208","0xeb2b0","0xc0428","0xdccf8","0x357e8","0xfbfd8","0xff7d0","0x6e570","0xf6e28","0x94ca8","0xd2ab0","0xc5ab0","0xc3658","0xd2888","0xf7fe8","0x103ef0","0x100908","0xc9fe0","0xef3c0","0x70880","0x8fba8","0xf6ec0","0xee798","0xff9c8","0xad6e8","0x84418","0x34360","0xb6038","0x2c190","0xf01c0","0xce818","0x323d0","0xd1500","0xc5a78","0x104ba0","0xa7da0","0x86ce8","0xf1478","0xf1300","0x3a8c8","0xf28d8","0xfb2d8","0xabb38","0xd2a50","0xfa3a0","0xe0c18","0x33490","0x93bc8","0x111630","0xf5360","0x43b80","0x74170","0x10a678","0xae978","0x323e0","0x746b0","0x94268","0xf5368","0xf8090","0xf4720","0x81e70","0x7e490","0x84150","0xf8460","0x1005c8","0x61760","0x947a8","0xf9668","0xf8c10","0xca180","0xd2570","0xfbd98","0x20a68","0xd2ff0","0xe9828","0x32688","0xfc768","0x110fc8","0x873d0","0x78910","0xcdeb8","0x103e08","0xdd118","0xff7d0","0xdcc40","0x84b80","0x102e18","0xc6d68","0xdafd0","0x33108","0xd1c70","0x6a7d0","0x3ffc0","0xdded8","0xf34f0","0x9f9a0","0x63dc0","0x100830","0xb9f00","0x795c8","0xf19f8","0x5fe50","0xab678","0xfff50","0x1037a0","0xf5b20","0x70e00","0x37350","0xff258","0x102670","0x84230","0x103ff0","0xe16c0","0x64150","0x1021c8","0xa4f20","0xf9860","0x72b10","0x10e418","0x637e8","0xf5b20","0x32e78","0xd2020","0x70440","0x7d0e8","0xf83f0","0x71d78","0x84b80","0xcad08","0x7c768","0xfe618","0x36920","0x44238","0xc41c8","0x10a738","0xe54a0","0x6ff28","0x3f930","0x71278","0x21aa8","0x10afe8","0x716f8","0xf70d0","0xd4310","0x107f40","0x6b680","0xf4f58","0xc8f28","0x100bf0","0xa4550","0x31388","0x7cec0","0xf9af8","0x6bfc0","0xfcb88","0xf97f0","0xf8158","0xcf208","0xed848","0x32548","0xc48a0","0xb3880","0x1031d8","0xa4ba0","0x6e178","0x102c08","0xa39c0","0xf45f0","0x918b8","0xf7888","0xcab08","0x29a60","0xe88f0","0x111298","0xc9a30","0xba040","0x40078","0xa1628","0xf53f0","0xbbaf8","0x85b30","0xc4240","0x7ef68","0x10ac98","0xe4fd8","0x4df58","0x641d8","0xf9d88","0x10a738","0xc46b0","0xd3960","0x6e0e0","0x94c00","0xf4ab8","0xf8838","0xa4be0","0xa6960","0xc99e8","0xe1bd8","0x36010","0xd0308","0xf76d8","0xc36b0","0x6de70","0xd2888","0x7a3f0","0x68ef8","0xd13e8","0x31e20","0x109608","0xd2830","0x10ae88","0xd1940","0xd2888","0x74158","0x100b88","0x101720","0x6e980","0x31d88","0x8a0e0","0x110f78","0x689b8","0xed420","0x9f9e0","0x35e20","0xd0400","0x1043c8","0x637b0","0xef348","0x37830","0x62af0","0xd1b88","0x2c288","0xf12e0","0xdf850","0x5f9d8","0x85100","0xf96d8","0x739f8","0x6a988","0xbbae0","0xc3b00","0x420c0","0x857f0","0x34968","0x7c5a0","0x1099d0","0x10b9f8","0x72510","0x841f0","0x639a0","0x85480","0x91c38","0xc4038","0xc81d0","0xa4bb0","0xcb380","0xd5f70","0x72fc8","0x6eed8","0xc4940","0x72980","0x84e40","0x1010e8","0x67638","0x4ea90","0xc5ac8","0xf5d60","0xf6f38","0xd9698","0xe9828","0xeadd8","0x109230","0x73bf8","0x33108","0xd1820","0xf6058","0x32f60","0xd2970","0xc3be0","0xa3f00","0xf8ac8","0x806c8","0xc69e0","0x7ef68","0x3f298","0xc3be0","0xd5840","0x10d7f0","0x638e0","0xceac8","0x736c8","0xd4f60","0xce1c0","0x7d4c8","0x87430","0xff860","0x7cbe0","0xe29e8","0xf6688","0xc4100","0xf6688","0x32988","0xd26d0","0x92680","0x63dc0","0x34640","0xc2708","0x3cf60","0x5faa0","0x105a70","0x6e788","0x33f58","0xebfc0","0x42f08","0xf2370","0xfff98","0x10b7c0","0x60950","0xcfa40","0x86548","0x84940","0x10b810","0xc3b90","0x60f70","0xd95e8","0xf86f0","0xd27b0","0x7ed30","0x6f640","0x7afc0","0x93130","0xd44a8","0x9e528","0x70e10","0x29c88","0xd6070","0x661f8","0x84338","0x68a18","0x325b8","0x33a90","0x72b08","0xc3a78","0x739a0","0x7e958","0xed308","0x31df8","0x105ad8","0xc9140","0x6ee18","0xffc30","0x1037d8","0xd7690","0x79a38","0xf9978","0x3f0a0","0x103760","0x42408","0x3f7f8","0x100c60","0x786d8","0xe54a0","0xf5f10","0x736f8","0x65f40","0xfdae0","0x68070","0x9e7f8","0xd1ba0","0xf96b8","0xd9640","0x9e608","0x1029a0","0x35f50","0x60658","0xded70","0xa4bb0","0xfdc48","0xf4d20","0x637b0","0xf59d8","0xca980","0x6fcb0","0xa3f00","0x100598","0xb1260","0x65e50","0xfd7d8","0xc47f0","0xf7888","0x32170","0x6ec58","0xe8ad8","0xc9a98","0xca898","0x104390","0x323b8","0x91d68","0x607a0","0x6e0d0","0x64a98","0x32720","0x7bf08","0xc88a0","0xde568","0x939b8","0xffcb8","0xee988","0xd5370","0xe4d20","0xc3b00","0xf4b50","0x9ecc8","0xd1960","0x3f1a0","0x1003d0","0xd5578","0x33490","0xba068","0xc81d0","0x101928","0x36250","0x805e8","0xf31c0","0x35020","0x6ce78","0xa2d70","0x31250","0x2e430","0xc9da8","0x807e0","0xe6010","0x69990","0x68f20","0x37380","0xddf88","0xffe08","0xf7db0","0x8ed38","0x83ff8","0xf6f38","0x7c938","0xca640","0xf38a8","0xcbf18","0xf4418","0xd1de8","0x102e20","0x74188","0x86098","0xd2650","0xbba00","0x85e88","0x869d0","0xd1558","0xff6a8","0xee370","0x32fb0","0x10d690","0x100fc8","0x32930","0x32658","0x939b8","0x84950","0xc28a8","0xf98b8","0xdf4b8","0x6e4b0","0xf47b8","0xf8938","0x809c8","0x31fb0","0x67f88","0x36170","0xd2ba8","0xc99e8","0x100568","0x7c780","0x10bcd8","0xd2650","0x100b10","0x84538","0xa4bd0","0x72960","0x7c238","0xc4038","0x861f8","0x72c00","0xd18e0","0xd52c0","0xc5f20","0x35b20","0x61f58","0x63a98","0x1113c8","0x2b248","0xa38d8","0xe8478","0x93588","0x1042d8","0xd2fd0","0x95d08","0x4c3b0","0x6da68","0x9ead8","0xe38d8","0x108870","0x34f88","0x110450","0x87460","0x5fb48","0x63dc0","0xd2ef0","0xeaa30","0xe5a10","0xf5f10","0x1005f8","0x840d8","0xd1e08","0x102670","0x7a4c8","0x1099a0","0xe54a0","0x5f900","0x32868","0x93bb0","0x84060","0x37cd0","0x9f688","0xce3a0","0x70560","0x67578","0xdebd0","0x100cd8","0xd17d8","0xd2988","0xd4e00","0x9a028","0x67ff8","0xcc9b8","0xf6540","0x103ce0","0x91ce0","0x101210","0xd5010","0xc2cb8","0x86570","0xd4280","0x355b8","0xc9df0","0x7e280","0x100b88","0x9e608","0xd28a8","0x32a98","0x63278","0xf44b0","0xa4ee0","0xa10f0","0xa3aa8","0x857d0","0x72af8","0xd2790","0x1039e8","0xd6ed0","0xd3030","0x84950","0x8ea60","0xf7500","0xc34d8","0xd2a70","0x108978","0xd1bb8","0x108af8","0x4dcc0","0xd8630","0xc3a60","0x102410","0xd9410","0x67700","0xa4bf0","0x1003c0","0xd7780","0x71218","0xd2ef0","0xd34d0","0x10ee10","0x369f8","0x947d0","0x106c30","0xd2730","0x6e010","0x1037d8","0xd0030","0x7fe88","0x44020","0xcdd60","0x84940","0xd05d8","0xce380","0xd8530","0xc3a78","0xd72d8","0xfab90","0x36a50","0xbba20","0xa39d8","0x92c60","0xc9078","0xe6120","0x71248","0xe4120","0xf4348","0x63dc0","0x70560","0x102d10","0x100538","0xeaef8","0xa4bd0","0xf5280","0x641d8","0xcae50","0x33190","0x93248","0xe91c8","0xd8d50","0xb6aa0","0x74778","0xffe08","0x9f490","0x72b18","0x847e8","0xcd7c8","0xb9ce8","0xccc08","0xfc3b8","0x2fe10","0x36428","0xde120","0x103b28","0x9f648","0x28e58","0x32670","0x36a98","0xa4738","0x103308","0xf9860","0x637b0","0xb9f00","0x10bb48","0x32e78","0x37338","0x8c6d0","0x85280","0x804a0","0x6bb38","0x7bd88","0x32e40","0xa5738","0xff6a8","0x2c1f8","0x109c78","0x63dc0","0x93bb0","0xd1fa0","0x325b8","0xf6ec8","0x4e940","0x8eb60","0x3a250","0xd2710","0x323a0","0xd2590","0x7ad80","0xc4100","0x74620","0xfa3a0","0x9f178","0xbb910","0x6de70","0x7c458","0x73758","0xceac8","0x41f60","0x7c378","0x608c8","0xf96d8","0xd2ab0","0xce360","0xa4be0","0xe9ba8","0xca180","0x91690","0xc1d80","0xc3908","0x1027e0","0xff210","0x33ea8","0xebfc0","0xe9f08","0x874a8","0xc49a8","0xf1870","0x68dd0","0xf0f80","0x32ce8","0xd3030","0xca0c0","0x443f8","0x108910","0x60118","0xa5628","0xbba80","0x108af8","0xd5af0","0x42540","0xf4980","0xea930","0x9fb18","0xf53f0","0x94e68","0xcaaf0","0xd26b0","0x100218","0x6e688","0xd2870","0xca258","0x872e8","0xf8ce8","0x217d8","0x33218","0xfaf98","0x37380","0x25d30","0xc48b8","0x6e368","0x108b90","0xb4358","0x963e0","0xe29e8","0x7d024","0xd0680","0x2c718","0x102f88","0xcbef0","0xc3b00","0xa4e80","0x5fbf8","0x61760","0xf8938","0xf5d18","0x6c798","0x37cb8","0xe5a10","0x323d0","0x63dc0","0x6c320","0x736f8","0x94b30","0x6e1e0","0x10bcd8","0xe4228","0x104530","0x37c88","0x32220","0xb6760","0xc8670","0x4ea90","0xf7888","0x86570","0xeea38","0x6fa70","0x43008","0xf59d8","0xe35c0","0x795c8","0xd4e00","0x20a74","0x10f1a8","0x2b850","0x102948","0x7d358","0xeaea8","0x6c5f0","0xc3600","0xc5208","0xf5108","0xbba40","0xa37b8","0xa3d40","0xe7d40","0xe4228","0xa39c0","0xa39d8","0xd2c90","0x1010e8","0xa5658","0xc59b8","0xf1ef0","0x37ca0","0x6b680","0xaefa0","0xd27f0","0xc8ae0","0xc3be0","0xf96f8","0xa5db0","0x85480","0x74640","0xba098","0xed718","0x719c0","0xf59d8","0x31678","0xd56a8","0x107de0","0x10f948","0xff860","0x6ab08","0x36308","0xd2530","0x70528","0x435e8","0x6cd28","0x103eb0","0x323e0","0xfd578","0x101070","0xfff50","0xe2eb0","0x9e6f0","0x62ef0","0x9ee78","0x44998","0xeaa30","0xe1320","0x102e18","0x81060","0xeedf8","0xd54d0","0x10b150","0x106fd8","0x84120","0x8ec50","0xd2e30","0xfe350","0xee4b0","0xfbaf8","0xa4bf0","0x6f470","0x840d8","0x5a078","0x111510","0x9f688","0xf4448","0xd4df0","0xa3490","0x102318","0xc9df0","0xf8e08","0xf8990","0xd5420","0xce240","0xf6d68","0xc9ea8","0x7e4d8","0x91810","0x87400","0xb95a0","0x103938","0x102b48","0xce220","0x325b8","0x10bcd8","0x102b08","0x8a7c8","0x78818","0xc3a60","0x102c08","0x6c090","0xc69e0","0x32220","0x100488","0x9a010","0xc5a10","0x22420","0x6cc78","0x9e790","0x81090","0xd18c0","0xcdeb8","0x80380","0xd5578","0x673e8","0xd1500","0xe9ba8","0xa7d38","0x102e28","0x21040","0x71770","0x2a410","0x67950","0xc39e0","0xc9a30","0xf8ca0","0x7c680","0xd5e50","0x71d70","0x7fe88","0xd2ab0","0x6e3e0","0x103318","0xf88b8","0xfd1e8","0x102b48","0xd2888","0x60190","0x101f48","0x7ac18","0xfac90","0x369c8","0x682c0","0xf86f0","0xf9738","0x3fe00","0x104aa0","0xf5f10","0x3f0a0","0x101198","0xd5a60","0xc3ec8","0xd2000","0xd10f8","0x332c8","0x85680","0x86098","0x110bf8","0xbac78","0x108c28","0xc2cc8","0x6e4b0","0xff8f0","0xc3708","0x100b10","0x102b08","0x5fe50","0x20ec8","0x71388","0x6fe80","0xd1800","0x6ad68","0xce320","0xd2670","0xa3810","0xf74b8","0xc9208","0x328e0","0xf3020","0xa4ea0","0xd2888","0x6e368","0xd2888","0xfab90","0xf6de0","0x83ed0","0x1027e0","0xf6de0","0xcc5e0","0x81060","0x1080e0","0xd00f8","0xf4c88","0x425c8","0xd2ff0","0x651c8","0x36898","0x80838","0x108978","0x79638","0xf6370","0xd9748","0x42608","0x42010","0x83ed0","0x8eeb8","0x2c530","0x24b48","0xebff0","0xf01b8","0xa3fb0","0x7c4f8","0xff230","0x35a00","0x309a0","0x63c38","0xf9af8","0x656e8","0x37c70","0x6e7c8","0x84b90","0x32f60","0x1009a8","0x103768","0x100a98","0x21080","0x43ca0","0xf5368","0xfc610","0x1021c8","0x7e490","0x4e9e8","0x66348","0xe6538","0x7ca98","0xd3878","0xc4580","0xc49c0","0x325b8","0x327f8","0xa3c90","0xc4990","0xa4b78","0xa6960","0x788b0","0xe9828","0x9e650","0xce360","0xd2020","0xcaf20","0x4e7d8","0x88308","0xa4bf0","0xce3c0","0xea930","0x1009a8","0x80670","0xfce38","0x87910","0x6fd10","0xcc988","0x32868","0xc9640","0x10d340","0x83ff8","0xc9280","0x867c0","0x67cc8","0x332d0","0x22eb0","0xc41c8","0xcabb8","0x780e8","0x857f0","0xfd1e8","0xf0d78","0xf9920","0x76640","0xc9df0","0xd5720","0xd2888","0x6ebd8","0xab678","0xd56a8","0x37380","0x109b58","0x71c28","0x74660","0x8ea60","0xf74b8","0x33060","0x60310","0x73168","0xf9798","0xd1bb8","0x6a540","0x4e730","0xc99e8","0xcee50","0xf0918","0xcea50","0x30610","0x100c60","0xfab90","0x60708","0x803e8","0xe1568","0x639a0","0xe2eb0","0x742a0","0xc92b8","0xbad48","0xd4eb0","0xfcf88","0x102410","0xc3a60","0xd0030","0xd2888","0xd1860","0xcaba0","0xc41c8","0xddf28","0xdb5d8","0x963c0","0x6f460","0x108a90","0x31de0","0x3f930","0x109dc0","0x41f40","0x325b8","0x6e570","0x46f90","0xa7f70","0x795e0","0x63278","0xa0770","0x85100","0x4a0e0","0x7b6f0","0xadaf8","0x102670","0x32a30","0x2b720","0xdebd0","0xf5268","0x32220","0x102a58","0xca000","0xd1558","0xe4228","0x1033c8","0xcae30","0xc3a60","0xd2550","0xf8ea8","0x108d10","0xd2888","0xd2a90","0x110ae0","0xc4038","0x102e20","0xc69e0","0xd3b58","0x1085c0","0xac800","0xba058","0xd2750","0xc5208","0xf6058","0xd3010","0x6f9b8","0x32698","0xcb340","0x103e08","0x86098","0x65480","0xd4e00","0x6eed8","0x42388","0x10b968","0xfc610","0x932b8","0xdded8","0xe1e38","0xf9668","0x63278","0xabce8","0x84e50","0xd8d88","0xc3908","0x103d00","0xa37a0","0xccb98","0xc4200","0xc99e8","0xc0040","0x71888","0xdaf28","0xff9c8","0xa4ba0","0xd3030","0x108c28","0x713f0","0x38360","0xfc720","0xff9c8","0xd2630","0x10a908","0xc32a8","0xf6688","0xcbdf0","0xef158","0xc49c0","0xd5ee0","0x72b98","0x4c260","0xe8c78","0xf0cd0","0xbbae0","0x10d558","0xd24d0","0x69878","0x1039e8","0x28408","0xebff0","0xd5940","0x42f68","0xca6f8","0x100fc8","0x4de68","0x78f48","0xa3f20","0xd1cd0","0x7d0e8","0x102ff8","0x86528","0x86088","0x7e7f0","0x7d024","0x1043c8","0xf7b20","0x2b1e0","0x67d38","0xd2630","0xabf78","0xd5b80","0xbe608","0x2c2f0","0x102ed8","0xbe5c8","0x9f7e8","0x33060","0xc9a80","0x102540","0xdf0d8","0x104390","0x7e5c0","0x1040c8","0xe1ab8","0xfcb88","0x9f518","0xa5a10","0xf0538","0x6ce78","0xffba8","0xcc4b8","0x801e0","0xffaa0","0x101928","0x103660","0xf9798","0xf6de0","0xe9ba8","0xc5b88","0x963c0","0xf96f8","0x207cc","0x85bf8","0xf9920","0x85e88","0xc8428","0xf5278","0xd5ca0","0xc3d28","0xd2ac8","0xa4bc0","0x1031e8","0xfdae0","0xd2888","0xf4980","0xad340","0x85680","0x2c350","0x637b0","0x106c88","0x63110","0xebff0","0x100740","0x26910","0xf6310","0xf3a50","0x32b88","0xbb338","0x1031e8","0xa4ba0","0x84e50","0x108b90","0x7d7c8","0x10d7c0","0xa4bc0","0xd2770","0xf88b8","0xc3a78","0xfe350","0x6fcb0","0x78c30","0xcb380","0x84180","0x62958","0x26e78","0xfdd08","0x354b0","0xc3a60","0xc9ef0","0x8ea70","0xd24b0","0x424f8","0x9f688","0x1105a8","0x72ae0","0xfd848","0x62ef0","0x6e688","0x648a0","0x9f4d0","0x84150","0xc5250","0x102ed8","0xd5210","0xc46b0","0x2cdb8","0x5faa0","0x7c560","0x297a8","0xb1d38","0xbba00","0xf0fc8","0xf6160","0x103128","0x41e80","0x2e448","0x1029a8","0xe47c8","0x84180","0x33910","0xce360","0xca7b0","0xbbac0","0x87390","0x4a0e0","0x63278","0xc9fe0","0xa3fb0","0x6fe80","0xed0a0","0xf9230","0xf98b8","0xc3ec8","0x7c038","0xfdc48","0x32ce8","0x63a98","0x96ca8","0xddf88","0x10af20","0xc4580","0xfd578","0x9e790","0x109350","0xc3a40","0xc3c98","0x80cd8","0x4c280","0xf1320","0x64700","0x73148","0x1037a0","0xf13b8","0xff258","0x86118","0x91900","0xc9708","0xddf40","0xc27d8","0x67950","0x22590","0x78910","0xc9140","0xc3658","0x100598","0x100908","0x71700","0x37320","0x71638","0x7e4d8","0x78ef8","0x103128","0xc27d8","0x677a8","0xd35c8","0xbbae0","0xec718","0xff230","0xc8b30","0xf8e08","0xd50c0","0x100d58","0xe04c0","0x101f48","0x9e790","0x31e20","0x37320","0xdf4b8","0x30b00","0x651c8","0xc5c00","0xfef88","0xd3010","0x6fe80","0xffd20","0x63278","0x102f88","0x10bbb8","0x108a08","0x1021d8","0xf70d0","0xd2888","0xffba8","0x103ff0","0xd24b0","0xd2810","0x4e940","0xf6540","0x237e8","0xd0e98","0xf6370","0x103128","0x100830","0xf1b58","0xc49c0","0x84060","0xe5a10","0xff210","0xf8ce8","0x63278","0xd2888","0xae260","0x8ccc0","0x104390","0x103068","0x100a20","0xce240","0x100bf0","0x10bac0","0xf6f38","0xc3a40","0x332d8","0xfcd78","0xa6960","0x63278","0x100568","0x62ef0","0x963e0","0xfac90","0x9e7f8","0x102ed8","0xfff50","0xc41c8","0xf9738","0x32920","0x102d10","0x10d5f8","0x1031e8","0xd6ed0","0x6fd10","0x10d6b0","0xf8ac8","0x102540","0x9f9c8","0xf6498","0xada50","0xf86f0","0x100538","0x103ce0","0x7a578","0xf53f0","0xe7ae8","0xe1990","0x84230","0x6e790","0xfd3b8","0x4c260","0x10d6b8","0xfe350","0x63dc0","0xe4d20","0x103888","0xd6fd0","0x29328","0xfaf98","0x104370","0xfd1e8","0xf8990","0x3f930","0x100740","0xad680","0xe4120","0x64eb8","0x10d690","0x72fe8","0xf6058","0x71f00","0x100218","0xf6160"]},{"type":3,"name":"python","functions":["function__entry"],"binary_path":"/lib64/libpython3.6m.so.1.0","provider":"python"},{"type":1,"name":"os_page_cache","functions":["add_to_page_cache_lru","delete_from_page_cache_batch","end_page_writeback","find_get_entries","grab_cache_page_write_begin","release_pages"]},{"type":1,"name":"shm","functions":["shmem_charge","shmem_file_setup","shmem_file_setup_with_mnt","shmem_get_unmapped_area","shmem_init_fs_context","shmem_kernel_file_setup","shmem_lock","shmem_mapping","shmem_partial_swap_usage","shmem_read_mapping_page_gfp","shmem_swap_usage","shmem_truncate_range","shmem_uncharge","shmem_unlock_mapping","shmem_unuse","shmem_zero_setup"]},{"type":1,"name":"iomap","functions":["iomap_adjust_read_range","iomap_bmap","iomap_dio_alloc_bio.isra.0","iomap_dio_bio_end_io","iomap_dio_bio_iter","iomap_dio_complete","iomap_dio_complete_work","iomap_dio_deferred_complete","iomap_dio_hole_iter","iomap_dio_rw","iomap_dio_submit_bio","iomap_dio_zero","iomap_dirty_folio","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_set_range_uptodate","iomap_sort_ioends","iomap_submit_ioend","iomap_swapfile_activate","iomap_swapfile_add_extent","iomap_swapfile_fail","iomap_to_fiemap","iomap_truncate_page","iomap_write_begin","iomap_write_end","iomap_writepage_end_bio","iomap_writepages","iomap_zero_range"]}] diff --git a/etc/datacrumbs/data/sorter.py b/etc/datacrumbs/data/sorter.py deleted file mode 100644 index 9bbfbbac..00000000 --- a/etc/datacrumbs/data/sorter.py +++ /dev/null @@ -1,49 +0,0 @@ -import json - -def sort_json_file_inplace(filename): - """ - Sort a JSON array file and update the original file with the sorted data. - - Args: - filename (str): Path to the JSON file to sort - - Returns: - bool: True if successful, False if error occurred - """ - try: - # Read the JSON file - with open(filename, 'r') as f: - data = json.load(f) - - # Check if data is a list - if not isinstance(data, list): - print(f"Error: JSON file must contain an array/list, found {type(data)}") - return False - - # Sort the array - sorted_data = sorted(data) - - # Write sorted data back to the same file - with open(filename, 'w') as f: - json.dump(sorted_data, f, indent=4) - - print(f"Successfully sorted {len(sorted_data)} items in {filename}") - return True - - except FileNotFoundError: - print(f"Error: File '{filename}' not found") - return False - except json.JSONDecodeError as e: - print(f"Error: Invalid JSON in file '{filename}': {e}") - return False - except Exception as e: - print(f"Error: {str(e)}") - return False - -# Update your specific file -if __name__ == "__main__": - success = sort_json_file_inplace('/home/haridev/datacrumbs/etc/datacrumbs/data/temp.json') - if success: - print("File updated successfully!") - else: - print("Failed to update file.") \ No newline at end of file diff --git a/etc/datacrumbs/data/temp.json b/etc/datacrumbs/data/temp.json deleted file mode 100644 index e69de29b..00000000 diff --git a/etc/datacrumbs/flux/cli/plugins/datacrumbs.py b/etc/datacrumbs/flux/cli/plugins/datacrumbs.py index d9a88782..71f90649 100644 --- a/etc/datacrumbs/flux/cli/plugins/datacrumbs.py +++ b/etc/datacrumbs/flux/cli/plugins/datacrumbs.py @@ -9,7 +9,6 @@ ############################################################## from flux.cli.plugin import CLIPlugin -import os class DatacrumbsPlugin(CLIPlugin): @@ -26,36 +25,26 @@ def __init__(self, prog, prefix="datacrumbs"): help="Enable datacrumbs" ) self.add_option( - "--composite", + "--probe-file", type=str, default="", - help="Set composite name for datacrumbs" + help="Path to signed probes json.gz file for datacrumbs" ) - + def validate(self, jobspec): try: enable = jobspec.attributes["datacrumbs"]["enable"].lower() == "yes" if enable: - composite_name = jobspec.attributes["datacrumbs"].get("composite", "") - # Validate composite name if provided - if composite_name != "": - if not composite_name.replace('_', '').isalpha(): - raise ValueError("--composite can only contain alphabetic characters and underscores") - # TODO: Uncomment and adjust the following lines to validate the existence of the composite file - # user = jobspec.attributes["system"]["environment"].get("USER", "") - # if user == "": - # raise ValueError("USER environment variable is required for datacrumbs composite validation") - # file = f"@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/@PROJECT_NAME@/@CMAKE_INSTALL_SBINDIR@/{user}/datacrumbs_{composite_name}" - # if not os.path.exists(file): - # raise ValueError(f"Datacrumbs composite: {composite_name} does not exist") + probe_file = jobspec.attributes["datacrumbs"].get("probe_file", "") + if probe_file == "": + raise ValueError("--probe-file is required when datacrumbs is enabled") except KeyError: enable = False - + def modify_jobspec(self, args, jobspec): if args.enable: jobspec.setattr("datacrumbs.enable", "yes") - if args.composite != "": - jobspec.setattr("datacrumbs.composite", args.composite) + jobspec.setattr("datacrumbs.probe_file", args.probe_file) else: jobspec.setattr("datacrumbs.enable", "no") - jobspec.setattr("datacrumbs.composite", "") \ No newline at end of file + jobspec.setattr("datacrumbs.probe_file", "") diff --git a/etc/datacrumbs/logs/.gitignore b/etc/datacrumbs/logs/.gitignore deleted file mode 100644 index f59ec20a..00000000 --- a/etc/datacrumbs/logs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -* \ No newline at end of file diff --git a/etc/datacrumbs/modulefiles/module.lua.in b/etc/datacrumbs/modulefiles/module.lua.in deleted file mode 100644 index fb91b4a5..00000000 --- a/etc/datacrumbs/modulefiles/module.lua.in +++ /dev/null @@ -1,54 +0,0 @@ --- @PROJECT_NAME@ module file - -whatis("Name: @PROJECT_NAME@") -whatis("Version: @DATACRUMBS_RELEASE_VERSION_STRING@") -whatis("Category: HPC, @PROJECT_NAME@") -whatis("Description: @PROJECT_NAME@") --- whatis("") - -help([[ -@PROJECT_NAME@ @DATACRUMBS_RELEASE_VERSION_STRING@ modulefile: - -- Sets environment variables for @PROJECT_NAME@ binaries, libraries, man pages. - - module load datacrumbs/@DATACRUMBS_RELEASE_VERSION_STRING@ -]]) - --- Set the installation directory --- %CMAKE_INSTALL_PREFIX% -local prefix = "@CMAKE_INSTALL_PREFIX@" -local user = os.getenv("DATACRUMBS_USER") or os.getenv("USER") or "@DATACRUMBS_INSTALL_USER@" - --- Define @PROJECT_NAME@ directories -local bin_dir = pathJoin(prefix, "@CMAKE_INSTALL_BINDIR@") -local sbin_dir = pathJoin(prefix, "@CMAKE_INSTALL_SBINDIR@") -local etc_dir = pathJoin(prefix, "@CMAKE_INSTALL_SYSCONFDIR@") -local userbin = prefix .. "/@CMAKE_INSTALL_LIBEXECDIR@/@CMAKE_INSTALL_SBINDIR@/" .. user -local libexec_dir = pathJoin(prefix, userbin) -local lib_dir = pathJoin(prefix, "@DATACRUMBS_INSTALL_LIB_DIR@") - - --- Add @PROJECT_NAME@ directories to PATH, LD_LIBRARY_PATH, CPATH, C_INCLUDE_PATH, ETCPATH, and MANPATH -prepend_path("PATH", bin_dir) -prepend_path("PATH", sbin_dir) -prepend_path("PATH", libexec_dir) -prepend_path("LD_LIBRARY_PATH", lib_dir) -prepend_path("LD_LIBRARY_PATH", "@DEPENDENCY_LIBRARY_DIRS_COLON@") -prepend_path("ETCPATH", etc_dir) - --- Set additional flags --- local datacrumbs_flags = string.format("-L %s/lib -I %s/include ", prefix, prefix) - - --- Inform user -if mode() == "load" then -elseif mode() == "unload" then - LmodMessage("@PROJECT_NAME@ unloaded.") -end - -family("datacrumbs") -execute{ - cmd = "source @CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_BINDIR@/datacrumbs_setup", - modeA = {"load"}, - mode = "silent", -} diff --git a/etc/datacrumbs/plugins/custom_probes/custom_probes.h.in b/etc/datacrumbs/plugins/custom_probes/custom_probes.h.in new file mode 100644 index 00000000..e4352fc2 --- /dev/null +++ b/etc/datacrumbs/plugins/custom_probes/custom_probes.h.in @@ -0,0 +1,10 @@ +#ifndef DATACRUMBS_CUSTOM_PROBES_H +#define DATACRUMBS_CUSTOM_PROBES_H + +/* + * Site-local custom BPF probes that can be enabled by uncommenting the + * generated includes below. + */ +// #include "@CMAKE_CURRENT_SOURCE_DIR@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio.bpf.c" + +#endif diff --git a/etc/datacrumbs/plugins/custom_probes/custom_probes_process.h.in b/etc/datacrumbs/plugins/custom_probes/custom_probes_process.h.in new file mode 100644 index 00000000..6bb6b145 --- /dev/null +++ b/etc/datacrumbs/plugins/custom_probes/custom_probes_process.h.in @@ -0,0 +1,10 @@ +#ifndef DATACRUMBS_CUSTOM_PROBES_PROCESS_H +#define DATACRUMBS_CUSTOM_PROBES_PROCESS_H + +/* + * Site-local userspace processing hooks that can be enabled by uncommenting the + * generated includes below. + */ +// #include "@CMAKE_CURRENT_SOURCE_DIR@/etc/datacrumbs/plugins/custom_probes/sys_io/sysio_process.h" + +#endif diff --git a/etc/datacrumbs/systemd/datacrumbs@.service.in b/etc/datacrumbs/systemd/datacrumbs@.service.in index 36d5ea40..87b9d707 100644 --- a/etc/datacrumbs/systemd/datacrumbs@.service.in +++ b/etc/datacrumbs/systemd/datacrumbs@.service.in @@ -1,20 +1,21 @@ [Unit] -Description=Datacrumbs Service for composite: %I +Description=Datacrumbs Service run-id=%i After=network.target [Service] -Type=forking -ExecStart=@DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_server_run.sh --verbose -ExecStop=@DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_server_stop.sh --verbose +Type=simple User=root -# Optional: -RemainAfterExit=no -# Copy PIDFile path to project yaml -PIDFile=@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@/datacrumbs-systemd-%i.pid -TimeoutStartSec=10min -TimeoutStopSec=5min -# Copy ENVFile path to project yaml -EnvironmentFile=@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@/datacrumbs-%i.env +EnvironmentFile=-@DATACRUMBS_INSTALL_CONFIGS_DIR@/datacrumbs-%i.env +ExecStartPre=/usr/bin/rm -f @DATACRUMBS_SERVER_RUN_DIR@/datacrumbs-%i.ready +ExecStartPre=/bin/sh -c 'mkdir -p "${DATACRUMBS_LOG_DIR}"' +ExecStartPre=/bin/sh -c 'log_file="${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVICE_RUN_ID}_$$(hostname).log"; touch "$${log_file}" && chown "${DATACRUMBS_USER}":"${DATACRUMBS_USER}" "$${log_file}" && chmod 0660 "$${log_file}"' +ExecStart=/bin/sh -c 'exec @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs "${DATACRUMBS_PROBE_FILE}" "%i" "${DATACRUMBS_USER}" >> "${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVICE_RUN_ID}_$$(hostname).log" 2>&1' +ExecStartPost=/bin/sh -c 'for i in $(seq 1 300); do [ -f "@DATACRUMBS_SERVER_RUN_DIR@/datacrumbs-%i.ready" ] && exit 0; sleep 1; done; exit 1' +ExecStop=/bin/kill -INT $MAINPID +KillSignal=SIGINT +KillMode=control-group +TimeoutStartSec=10min +TimeoutStopSec=10min [Install] -WantedBy=multi-user.target \ No newline at end of file +WantedBy=multi-user.target diff --git a/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in b/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in new file mode 100644 index 00000000..21840ef8 --- /dev/null +++ b/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in @@ -0,0 +1,13 @@ +[Unit] +Description=Datacrumbs trusted probe signing service +After=network.target + +[Service] +Type=simple +User=root +ExecStart=@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_sign_probes +Restart=on-failure +RestartSec=2s + +[Install] +WantedBy=multi-user.target diff --git a/etc/datacrumbs/systems/README.ares.md b/etc/datacrumbs/systems/README.ares.md deleted file mode 100644 index 86b08fb4..00000000 --- a/etc/datacrumbs/systems/README.ares.md +++ /dev/null @@ -1,113 +0,0 @@ -# Readme for Ares Cluster - -## Manage Environments - -```bash -export DATACRUMBS_DIR=/mnt/common/$USER/datacrumbs -export DATACRUMBS_INSTALL_DIR=/mnt/common/$USER/datacrumbs/install -``` - -## Dependencies - -Use release version of `bcc` **0.35.0** - -Install system dependencies: - -```bash -sudo apt install libelf-dev libclang-14 libclang-14-dev zip -sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 50 -``` - -Ensure `llvm-config` is symlinked using `update-alternatives` like so: - -```bash -update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 50 -``` - -## Installation - -```bash -export DATACRUMBS_INSTALL_DIR=/mnt/common/$USER/datacrumbs/install -export DATACRUMBS_DIR=/mnt/common/$USER/datacrumbs -git clone git@github.com:hariharan-devarajan/datacrumbs.git -cd datacrumbs -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. -make install -j9 -cd - -``` - -### Install Python Environment - -#### Create a python environment - -```bash -virtualenv --python=python3 ${DATACRUMBS_INSTALL_DIR} -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -pip install --upgrade pip -pip install -r ${DATACRUMBS_DIR}/requirements.txt -pip install -r ${DATACRUMBS_DIR}/bcc_requirements.txt -``` - -#### Install `bcc`s python bindings - -```bash -cmake -DPYTHON_CMD=python -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. -make install -j9 -``` - -You may have to copy the python bindings manually if the above does not work: - -```bash -cp -rv bcc-python3/bcc $DATACRUMBS_INSTALL_DIR/lib/python3.10/site-packages/ -``` - -Add this to your `activate` file. -This makes sure when you activate the -environment, the paths are set correctly for `bcc`: - -```bash -BCC_INSTALL_DIR="/mnt/repo/software/bcc" -BCC_SITEPKG="$BCC_INSTALL_DIR/lib/python3.10/site-packages/" -export PATH=$PATH:$BCC_INSTALL_DIR/bin:$BCC_INSTALL_DIR/sbin -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BCC_INSTALL_DIR/lib:$BCC_INSTALL_DIR/lib64 -export PYTHONPATH=$PYTHONPATH:$BCC_SITEPKG -``` - -Or simply run the following commands to set the environment variables: - -```bash -cat << EOF >> ${DATACRUMBS_INSTALL_DIR}/bin/activate -BCC_INSTALL_DIR="/mnt/repo/software/bcc" -BCC_SITEPKG="$BCC_INSTALL_DIR/lib/python3.10/site-packages/" - -export PATH=$PATH:$BCC_INSTALL_DIR/bin:$BCC_INSTALL_DIR/sbin -export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BCC_INSTALL_DIR/lib:$BCC_INSTALL_DIR/lib64 -export PYTHONPATH=$PYTHONPATH:$BCC_SITEPKG -EOF -``` - -## Running the tool - -### Setup - -```bash -export DATACRUMBS_DIR=/mnt/common/$USER/datacrumbs -source ${DATACRUMBS_DIR}/scripts/ares/server/setup.sh -source ${DATACRUMBS_DIR}/scripts/ares/server/init.sh -source ${DATACRUMBS_DIR}/scripts/ares/server/run.sh -``` - -### Running Simple Test - -```bash -export DATACRUMBS_DIR=/mnt/common/$USER/datacrumbs -export DATACRUMBS_INSTALL_DIR=/mnt/common/$USER/datacrumbs/install -source ${DATACRUMBS_DIR}/scripts/ares/client/setup.sh -source ${DATACRUMBS_DIR}/scripts/ares/client/tests/test_posix.sh -``` - -## Slurm integration - -Slurm job installation will be added here (need to be done by admin) diff --git a/etc/datacrumbs/systems/README.chameleon.md b/etc/datacrumbs/systems/README.chameleon.md deleted file mode 100755 index 1a9c2710..00000000 --- a/etc/datacrumbs/systems/README.chameleon.md +++ /dev/null @@ -1,87 +0,0 @@ -# Readme for Chameleon - -## Account - -Go to [chameleon cloud website](https://chameleoncloud.org) and create an account. -Once the account is created, get added to project. - -## Creating an instance - -- Navigate to [chameleon cloud website](https://chameleoncloud.org) -- Go to Experiment -> CHI@TACC -- Go to Compute -> Key Pairs from the left hand side bar and create a key pair. -- Then go to reservation, click on create-reservation, fill details, and allocate compute_cascadelake nodes from the Hosts section. -- Then go to compute instances and spawn your instance using Launch Instance. Fill the details and make sure, - - to select the HARI-UBUNTU-22.04.04-BCC image as the base image - - select your key pair. - - -## Setting up dependencies for DataCrumbs - -### Clone the repository - -```bash -export SPACK_DIR=/opt/spack -export DATACRUMBS_DIR=/home/cc/datacrumbs -export DATACRUMBS_INSTALL_DIR=/home/cc/datacrumbs/install - -git clone git@github.com:hariharan-devarajan/datacrumbs.git ${DATACRUMBS_DIR} -``` - -### Setup spack - -This step will clone latest spack into `$SPACK_DIR` and then install hdf5 dependency - -```bash -cd ${DATACRUMBS_DIR}/scripts/chameleon -./install_env.sh -cd - -``` - -### Setting up DataCrumbs Python Dependencies - -```bash -python3 -m venv --system-site-packages ${DATACRUMBS_INSTALL_DIR} -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -pip install -r ${DATACRUMBS_DIR}/requirements/requirement.chameleon.txt -``` - -### Setting up DataCrumbs - -```bash -pushd ${DATACRUMBS_DIR} -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. -make install -j -popd -``` -## Running the tool - - -### Generating Probes - -check your `${DATACRUMBS_DIR}/datacrumbs/configs/module/chameleon.yaml` and make neccessary changes. - -```bash -sudo su -export DATACRUMBS_DIR=/home/cc/datacrumbs -source ${DATACRUMBS_DIR}/scripts/chameleon/server/setup.sh -. ${DATACRUMBS_DIR}/scripts/chameleon/server/init.sh -g -``` - -### Starting Server - -```bash -export DATACRUMBS_DIR=/home/cc/datacrumbs -source ${DATACRUMBS_DIR}/scripts/chameleon/server/setup.sh -. ${DATACRUMBS_DIR}/scripts/chameleon/server/run.sh -``` - -### Running Simple Test - -```bash -export DATACRUMBS_DIR=/home/cc/datacrumbs -source ${DATACRUMBS_DIR}/scripts/chameleon/client/setup.sh -. ${DATACRUMBS_DIR}/scripts/chameleon/client/tests/test_posix.sh -``` \ No newline at end of file diff --git a/etc/datacrumbs/systems/README.lead2.md b/etc/datacrumbs/systems/README.lead2.md deleted file mode 100755 index f5064d0e..00000000 --- a/etc/datacrumbs/systems/README.lead2.md +++ /dev/null @@ -1,97 +0,0 @@ -# Readme for Lead2 - -Location of spack is `/home/haridev/spack` - -## Manage Environments - -```bash -export SPACK_DIR=/home/haridev/spack -export DATACRUMBS_DIR=/home/haridev/datacrumbs -export DATACRUMBS_INSTALL_DIR=/home/haridev/datacrumbs/install -``` - -## Configure Spack - -```bash -source ${SPACK_DIR}/share/spack/setup-env.sh -``` -Spack does the following - -- GCC 11.5 is picked from system -- openmpi is installed into system -- Python 3.9 is picked from system - -## Installation - -### Load Dependency - -```bash -source ${SPACK_DIR}/share/spack/setup-env.sh -spack load llvm@19.1.7 hdf5@1.14.5 ior@4.0.0 openmpi@5.0.7 cmake@3.26.5 -spack load gcc@11.5.0 -``` - -### DataCrumbs - -All datacrumbs executables and dependencies would be installed in DATACRUMBS_INSTALL_DIR - - - -```bash -cd /home/haridev -git clone git@github.com:hariharan-devarajan/datacrumbs.git -cd datacrumbs -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. -make install -j -cd - -``` - -### Test Dependencies - -#### Activate project spack - -```bash -source ${SPACK_DIR}$/share/spack/setup-env.sh -``` - -```bash -spack view --verbose symlink ${DATACRUMBS_INSTALL_DIR} ior@4.0.0+hdf5 ^hdf5@1.14.5 -``` - -## Running the tool - -### Generating Probes - -```bash -export SPACK_DIR=/home/haridev/spack -export DATACRUMBS_DIR=/home/haridev/datacrumbs -export DATACRUMBS_INSTALL_DIR=/home/haridev/datacrumbs/install -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -source ${DATACRUMBS_DIR}/scripts/lead2/server/setup.sh -${DATACRUMBS_DIR}/scripts/lead2/server/init.sh -g -``` - -### Starting Server - -```bash -sudo su - -export SPACK_DIR=/home/haridev/spack -export DATACRUMBS_DIR=/home/haridev/datacrumbs -export DATACRUMBS_INSTALL_DIR=/home/haridev/datacrumbs/install -source ${DATACRUMBS_DIR}/scripts/lead2/server/setup.sh -${DATACRUMBS_DIR}/scripts/lead2/server/init.sh -${DATACRUMBS_DIR}/scripts/lead2/server/run.sh -``` - -### Running Simple Test - -```bash -export SPACK_DIR=/home/haridev/spack -export DATACRUMBS_DIR=/home/haridev/datacrumbs -export DATACRUMBS_INSTALL_DIR=/home/haridev/datacrumbs/install -source ${DATACRUMBS_DIR}/scripts/lead2/client/setup.sh -${DATACRUMBS_DIR}/scripts/lead2/client/tests/test_posix.sh -``` \ No newline at end of file diff --git a/etc/datacrumbs/systems/README.md b/etc/datacrumbs/systems/README.md deleted file mode 100755 index a580df31..00000000 --- a/etc/datacrumbs/systems/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# DataCrumbs -A multi-level dataflow profiler to capture I/O calls from workflows. - - -## Dependency installation - -### Requirements - -- Newer Kernel > 5.6 [see kernel doc](https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md) -- BCC > v0.30.0 -- cmake -- python 3.10 - - hydra-core>=1.2.0 - -**Test Requirements** - -- OpenMPI - -### Chameleon - -We have a Image that can be used to do development on Chameleon called HARI-UBUNTU-22.04.04-BCC. - - -## Compiling the code - -### Clone the repo - -```bash -git clone https://github.com/hariharan-devarajan/datacrumbs.git - -cd datacrumbs -mkdir build -cd build -cmake .. -make -j -``` - -## Python Dependencies - -- psutil==5.8 -- tqdm -- pyelftools - -## Other dependencies - -- clang-format - -## Build dependency for datacrumbs - -```bash -sudo pip install -r requirements.txt -``` - -## arguments for datacrumbs tools are - -```bash -usage: initialize_tool [-h] [--module MODULE] [--install_dir INSTALL_DIR] [--file FILE] [--generate_probes] [--mode {PROFILE,TRACE}] [--interval_sec INTERVAL_SEC] [--trace_type {PERF,RING_BUFFER}] - -Configuration Manager - -options: - -h, --help show this help message and exit - --module MODULE Module name. That is picked from datacrumbs/configs/module - --install_dir INSTALL_DIR - Installation directory - --file FILE Profile file - --generate_probes Generate probes - --mode {PROFILE,TRACE} - Mode of operation - --interval_sec INTERVAL_SEC - Interval in seconds for profiling - --trace_type {PERF,RING_BUFFER} - Type of trac -``` - -## Initialize the code - -The initialization where we do not need to generate probes or are using existing probes. - -```bash -./initialize_tool -``` - -## Run the tool - -### Environment variable to consider - -Check ulimit -n for open file handlers - -```bash -ulimit -n 1048576 -``` - -Increase probe limit within BCC -```bash -export BCC_PROBE_LIMIT=1048576 -``` - -The profiler tool need to run as root - -```bash -sudo su -./run_tool -``` -Once the profiler is loaded, it will wait for applictaions to connect. - - -## Running the test - -Once the profiler has started u can run the application code. - -```bash -cd -cd tests/scripts -./test_posix.sh -``` - -## Checking the profiler output. - -The profiler output is created in the directory where the profiler runs. - -```bash -cc@ebpf:~/datacrumbs$ head -n 5 datacrumbs.pfw -[ -{"pid": 30545, "tid": 30545, "name": "__libc_malloc [libc.so.6]", "cat": "[libc.so.6]", "ph": "C", "ts": 0.0, "args": {"count": 21, "time": 0.000198116}} -{"pid": 30545, "tid": 30545, "name": "cfree [libc.so.6]", "cat": "[libc.so.6]", "ph": "C", "ts": 0.0, "args": {"count": 2, "time": 1.9788e-05}} -{"pid": 30545, "tid": 30545, "name": "[unknown]", "cat": "unknown", "ph": "C", "ts": 0.0, "args": {"count": 1, "time": 1.3094e-05}} -{"pid": 30545, "tid": 30545, "name": "__libc_malloc [libc.so.6]", "cat": "[libc.so.6]", "ph": "C", "ts": 24000000.0, "args": {"count": 149, "time": 0.000503765}} -``` - -## Visualizing the counters - -The output format used is Chrome Tracing format and can be viewed using [perfetto](https://ui.perfetto.dev/). - -![Perfetto Visualization of Data](docs/images/sample_profile.png "Perfetto Visualization of Data") - -## Analyzing counters using queries - -The profiler output can be analyzed using Dask distributed analysis. Please refer to the [notebook](analysis/analysis.ipynb). - -## Get non-rrot access to BPF - -System Tap has a permission model - -eBPF program types can make non-root is different -Look at CAP_BPF CAP_PERF_MON -Avoid CAP_SYS_ADMIN - -Security Guide: https://www.linuxfoundation.org/hubfs/eBPF/ControlPlane%20%E2%80%94%20eBPF%20Security%20Threat%20Model.pdf \ No newline at end of file diff --git a/etc/datacrumbs/systems/README.quokka.md b/etc/datacrumbs/systems/README.quokka.md deleted file mode 100644 index 834d7db4..00000000 --- a/etc/datacrumbs/systems/README.quokka.md +++ /dev/null @@ -1,167 +0,0 @@ -# Readme for Quokka - -```bash -export DATACRUMBS_DIR=/proj/csc671/proj_shared/datacrumbs -export DATACRUMBS_INSTALL_DIR=/proj/csc671/proj_shared/dc-install -export SPACK_DIR=/proj/csc671/proj_shared/spack -``` - -## Installation - -### Setup spack - -```bash -git clone --depth=2 https://github.com/spack/spack.git ${SPACK_DIR} -source ${SPACK_DIR}/share/spack/setup-env.sh -spack repo update builtin -``` - -### Setup packages.yaml - -/ccsopen/home/dhari/.spack/packages.yaml - -```yaml -packages: - gcc: - externals: - - spec: gcc@11.5.0 languages:='c,c++,fortran' - prefix: /usr - extra_attributes: - compilers: - c: /usr/bin/gcc - cxx: /usr/bin/g++ - fortran: /usr/bin/gfortran - python: - externals: - - spec: python@3.9.21 - prefix: /usr - buildable: False - autoconf: - externals: - - spec: autoconf@2.69 - prefix: /usr - buildable: False - automake: - externals: - - spec: automake@1.16.2 - prefix: /usr - buildable: False - libtool: - externals: - - spec: libtool@2.4.6 - prefix: /usr - buildable: False - openssh: - externals: - - spec: openssh@8.7p1 - prefix: /usr - buildable: False - perl: - externals: - - spec: perl@5.32.1 - prefix: /usr - buildable: False - bzip2: - externals: - - spec: bzip2@1.0.8 - prefix: /usr - buildable: False - zlib-ng: - externals: - - spec: zlib-ng@1.2.11 - prefix: /usr - buildable: False - openssl: - externals: - - spec: openssl@3.2.2 - prefix: /usr - buildable: False -``` - -### Install Packages - -```bash -spack install gcc@11.5.0 -spack install python@3.9.21 -spack install openmpi@5.0.8 -spack install llvm@19.1.7 -spack install cmake@3.26.5 -spack install hdf5@1.14.5 ior@4.0.0 -spack view --verbose symlink ${DATACRUMBS_INSTALL_DIR} gcc@11.5.0 python@3.9.21 openmpi@5.0.8 llvm@19.1.7 cmake@3.26.5 hdf5@1.14.5 ior@4.0.0 -``` - -### Load Packages - -```bash -spack load gcc@11.5.0 python@3.9.21 openmpi@5.0.8 llvm@19.1.7 cmake@3.26.5 hdf5@1.14.5 ior@4.0.0 -``` - -### Create install directory - -```bash -python3 -m venv ${DATACRUMBS_INSTALL_DIR} -``` - -### Install BCC - -```bash -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -BCC_HOME=/proj/csc671/proj_shared/bcc -git clone https://github.com/iovisor/bcc.git ${BCC_HOME} -pushd ${BCC_HOME} -mkdir build -pushd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} -DCMAKE_C_COMPILER=`which gcc` -DCMAKE_CXX_COMPILER=`which g++` .. -make -j -make install -j -cmake -DPYTHON_CMD=python -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} -DCMAKE_C_COMPILER=`which gcc` -DCMAKE_CXX_COMPILER=`which g++` .. # build python3 binding -pushd src/python/ -make -make install -popd -popd -popd -cp -r ${BCC_HOME}/build/src/python/bcc-python3/bcc/* ${DATACRUMBS_INSTALL_DIR}/lib/python3.12/site-packages/bcc/ -``` - -### Install DataCrumbs - -```bash -git clone git@github.com:hariharan-devarajan/datacrumbs.git ${DATACRUMBS_DIR} -pushd ${DATACRUMBS_DIR} -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} -DCMAKE_C_COMPILER=`which gcc` -DCMAKE_CXX_COMPILER=`which g++` .. -make install -j -chmod +x ${DATACRUMBS_INSTALL_DIR}/libexec/datacrumbs/bin/* -``` - -### Install Python Environment - -```bash -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -pip install --upgrade pip -pip install -r ${DATACRUMBS_DIR}/requirements/requirement.quokka.txt -``` - - -## Running the tool - -### Starting Server - -```bash -export DATACRUMBS_DIR=/proj/csc671/proj_shared/datacrumbs -cd ${DATACRUMBS_DIR}/scripts/quokka/server -source setup.sh -./init.sh -g -./run.sh -``` - -### Running Simple Test - -```bash -export DATACRUMBS_DIR=/proj/csc671/proj_shared/datacrumbs -cd ${DATACRUMBS_DIR}/scripts/quokka/client -source setup.sh -./tests/test_posix.sh -``` \ No newline at end of file diff --git a/etc/datacrumbs/systems/README.wombat.md b/etc/datacrumbs/systems/README.wombat.md deleted file mode 100755 index 48f76041..00000000 --- a/etc/datacrumbs/systems/README.wombat.md +++ /dev/null @@ -1,97 +0,0 @@ -# Readme for Wombat - -Location of Wombat system spack is `/autofs/nccs-svm1_wombat_sw/RHEL9.4/spack` - -Location of project_shared spack is `/proj/csc671/proj_shared/spack` - -GCC, Python, and OpenMPI have been added from system spack to project_spack to make sure we use the correct compilers for our dependency. - -## Installation - -### DataCrumbs - -All datacrumbs executables and dependencies would be installed in DATACRUMBS_INSTALL_DIR - -```bash -export DATACRUMBS_DIR=/proj/csc671/proj_shared/datacrumbs -export DATACRUMBS_INSTALL_DIR=/proj/csc671/proj_shared/datacrumbs/install -``` - -```bash -cd /proj/csc671/proj_shared/ -git clone git@github.com:hariharan-devarajan/datacrumbs.git -cd datacrumbs -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. -make install -j -cd - -``` - -### Test Dependencies - -#### Activate project spack - -```bash -source /proj/csc671/proj_shared/spack/share/spack/setup-env.sh -``` - -```bash -spack view --verbose symlink ${DATACRUMBS_INSTALL_DIR} ior@4.0.0+hdf5 ^hdf5@1.14.5 -``` - -```bash -spack load llvm@19.1.7 hdf5@1.14.5 ior@4.0.0 openmpi@5.0.5 cmake@3.30.2 -spack load gcc@13.2.0 -``` - -### Install Python Environment - -```bash -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -pip install --upgrade pip -pip install -r ${DATACRUMBS_DIR}/requirements.txt -pip install -r ${DATACRUMBS_DIR}/bcc_requirements.txt -``` - -### Install BCC - -```bash -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -BCC_HOME=/proj/csc671/proj_shared/bcc -git clone https://github.com/iovisor/bcc.git ${BCC_HOME} -pushd ${BCC_HOME} -mkdir build -pushd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. -make -j -make install -j -cmake -DPYTHON_CMD=python -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. # build python3 binding -pushd src/python/ -make -make install -popd -popd -popd -cp -r ${BCC_HOME}/build/src/python/bcc-python3/bcc/* ${DATACRUMBS_INSTALL_DIR}/lib/python3.12/site-packages/bcc/ -``` - -## Running the tool - -### Starting Server - -```bash -export DATACRUMBS_DIR=/proj/csc671/proj_shared/datacrumbs -source ${DATACRUMBS_DIR}/scripts/wombat/server/setup.sh -source ${DATACRUMBS_DIR}/scripts/wombat/server/init.sh -source ${DATACRUMBS_DIR}/scripts/wombat/server/run.sh -``` - -### Running Simple Test - -```bash -export DATACRUMBS_DIR=/proj/csc671/proj_shared/datacrumbs -export DATACRUMBS_INSTALL_DIR=/proj/csc671/proj_shared/datacrumbs/install -source ${DATACRUMBS_DIR}/scripts/wombat/client/setup.sh -source ${DATACRUMBS_DIR}/scripts/wombat/client/tests/test_posix.sh -``` \ No newline at end of file diff --git a/infrastructure/docker/Dockerfile b/infrastructure/docker/Dockerfile deleted file mode 100644 index e0149e73..00000000 --- a/infrastructure/docker/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -FROM hdevarajan92/datacrumbs:latest - -RUN mkdir -p /opt/datacrumbs -COPY . /opt/datacrumbs/ - -RUN . /opt/rh/gcc-toolset-11/enable && \ - mkdir -p datacrumbs-build && \ - rm -rf datacrumbs-build/* && \ - cd datacrumbs-build && \ - cmake -DDATACRUMBS_HOST=docker \ - -DDATACRUMBS_USER=root \ - -DDATACRUMBS_INSTALL_USER=docker \ - -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 - -ENV PATH=/usr/lib64/openmpi/bin:/opt/datacrumbs/datacrumbs-build/bin:${PATH} -ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:/opt/datacrumbs/datacrumbs-build/lib:${LD_LIBRARY_PATH} - -# Ensure docker user can access relevant directories under /opt -RUN mkdir -p /opt/datacrumbs /opt/datacrumbs-install && \ - chown -R docker:docker /opt/datacrumbs /opt/datacrumbs-install && \ - chmod 0755 /opt - -USER docker - -WORKDIR /opt/datacrumbs - -# By default, run bash. eBPF programs require --privileged and --cap-add=ALL when running the container. -CMD ["/bin/bash"] \ No newline at end of file diff --git a/infrastructure/docker/Dockerfile.build b/infrastructure/docker/Dockerfile.build deleted file mode 100644 index 20751e6c..00000000 --- a/infrastructure/docker/Dockerfile.build +++ /dev/null @@ -1,116 +0,0 @@ -FROM centos:centos8 - -# Update CentOS 8 repositories (CentOS 8 is EOL, use vault) -RUN cd /etc/yum.repos.d/ && \ - sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \ - sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* - -# Update system -RUN yum update -y - -# Install EPEL repository first (needed for patchelf) -RUN yum install -y epel-release - -# Install base development tools and dependencies -RUN yum install -y \ - gcc \ - clang \ - llvm \ - patchelf \ - sudo \ - elfutils-libelf-devel \ - kernel-devel \ - kernel-headers \ - make \ - iproute \ - iputils \ - git \ - vim-enhanced \ - which \ - python3-pip \ - cmake \ - llvm-devel \ - clang-devel \ - gcc-toolset-11 \ - jq \ - time - -# Install Development Tools group -RUN dnf group install -y "Development Tools" - -# Set up working directory -WORKDIR /opt - -# Build and install bpftool and libbpf -RUN . /opt/rh/gcc-toolset-11/enable && \ - git clone --recurse-submodules https://github.com/libbpf/bpftool.git && \ - cd bpftool && \ - git checkout tags/v7.5.0 && \ - cd libbpf && \ - git checkout tags/v1.5.0 && \ - cd /opt/bpftool/libbpf/src && \ - make -j && \ - make install && \ - cd /opt/bpftool/src && \ - make -j && \ - make install - -# Build and install yaml-cpp -RUN . /opt/rh/gcc-toolset-11/enable && \ - git clone https://github.com/jbeder/yaml-cpp.git && \ - cd yaml-cpp && \ - git checkout tags/yaml-cpp-0.7.0 && \ - mkdir build && \ - cd build && \ - cmake -DYAML_BUILD_SHARED_LIBS=ON -DYAML_CPP_BUILD_TESTS=OFF .. && \ - make -j && \ - make install - -# Build and install json-c -RUN . /opt/rh/gcc-toolset-11/enable && \ - git clone https://github.com/json-c/json-c.git && \ - cd json-c && \ - git checkout tags/json-c-0.15-20200726 && \ - mkdir build && \ - cd build && \ - cmake .. && \ - make -j && \ - make install - -# Update library path -RUN echo "/usr/local/lib64" > /etc/ld.so.conf.d/local.conf && \ - echo "/usr/local/lib" >> /etc/ld.so.conf.d/local.conf && \ - ldconfig - -# Create a non-root user 'docker' with passwordless sudo access and install tools -RUN (dnf -y install openmpi-devel || yum -y install openmpi-devel) && \ - (dnf clean all || yum clean all) && \ - groupadd -f wheel && \ - useradd -m -s /bin/bash docker && \ - usermod -aG wheel docker && \ - echo 'docker ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/docker && \ - chmod 0440 /etc/sudoers.d/docker - -# Create datacrumbs directory -WORKDIR /opt/datacrumbs - -# Set environment variables -ENV PATH="/opt/rh/gcc-toolset-11/root/usr/bin:${PATH}" -ENV LD_LIBRARY_PATH="/opt/rh/gcc-toolset-11/root/usr/lib64:/usr/local/lib64:/usr/local/lib" - -# Create entrypoint script -RUN echo '#!/bin/bash' > /entrypoint.sh && \ - echo '. /opt/rh/gcc-toolset-11/enable' >> /entrypoint.sh && \ - echo 'exec "$@"' >> /entrypoint.sh && \ - chmod +x /entrypoint.sh - -# Set the entrypoint -ENTRYPOINT ["/entrypoint.sh"] - -# By default, run bash -CMD ["/bin/bash"] - -# Add labels for better container management -LABEL maintainer="DataCrumbs Team" -LABEL description="DataCrumbs eBPF-based data provenance tracking system" -LABEL version="1.0" diff --git a/infrastructure/docker/README.md b/infrastructure/docker/README.md deleted file mode 100644 index 2c5fcc4a..00000000 --- a/infrastructure/docker/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Notes - -```bash - -``` \ No newline at end of file diff --git a/infrastructure/docker/build-multiarch.sh b/infrastructure/docker/build-multiarch.sh deleted file mode 100755 index 7e7cd574..00000000 --- a/infrastructure/docker/build-multiarch.sh +++ /dev/null @@ -1,221 +0,0 @@ -#!/bin/bash - -# Multi-architecture Docker build script for DataCrumbs -# Builds for linux/amd64 and linux/arm64 platforms - -set -e - -# Configuration -IMAGE_NAME="${IMAGE_NAME:-datacrumbs}" -IMAGE_TAG="${IMAGE_TAG:-latest}" -DOCKERFILE="${DOCKERFILE:-infrastructure/docker/Dockerfile.build}" -REGISTRY="${REGISTRY:-docker.io}" -USERNAME="${USERNAME:-hdevarajan92}" -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 " --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 - ;; - --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}" -else - FULL_IMAGE_NAME="${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}" -fi - -echo "======================================" -echo "Multi-Architecture Docker Build" -echo "======================================" -echo "Image: ${FULL_IMAGE_NAME}" -echo "Platforms: ${PLATFORMS}" -echo "Dockerfile: ${DOCKERFILE}" -echo "Push: ${PUSH}" -echo "Load: ${LOAD}" -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 -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" -else - echo "Using existing buildx builder: $BUILDER_NAME" - docker buildx use "$BUILDER_NAME" -fi - -# Bootstrap the builder -echo "Bootstrapping builder..." -docker buildx inspect --bootstrap - -# Build command -BUILD_CMD="docker buildx build" -BUILD_CMD+=" --platform ${PLATFORMS}" -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 -fi - -if [ "$PUSH" = true ]; then - 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 -else - 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+=" ." - -echo "" -echo "Executing: $BUILD_CMD" -echo "" - -# Change to repository root -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" -cd "$REPO_ROOT" - -# Execute the build -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 "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 -fi diff --git a/infrastructure/docker/test_run.sh b/infrastructure/docker/test_run.sh index 5b536ccf..18cac29b 100755 --- a/infrastructure/docker/test_run.sh +++ b/infrastructure/docker/test_run.sh @@ -1,5 +1,76 @@ #!/bin/bash -set -x -source /opt/datacrumbs-install/bin/datacrumbs_setup --verbose -datacrumbs_create_log_dir --verbose -datacrumbs_run --verbose --app "datacrumbs_wrap dd if=/dev/zero of=/tmp/img_temp.bat bs=1M count=16" + +set -euo pipefail + +REPO_ROOT="/opt/datacrumbs" +BUILD_DIR="${REPO_ROOT}/datacrumbs-build" +INSTALL_PREFIX="/opt/datacrumbs-install" +CONFIG_YAML="${INSTALL_PREFIX}/etc/datacrumbs/configs/docker.yaml" +PROBE_FILE="/tmp/datacrumbs-docker-probes.json.gz" +JOB_ID="1" +SERVICE_USER="docker" +OUT_FILE="/tmp/img_temp.bin" +READY_FILE="/var/run/datacrumbs/datacrumbs-${JOB_ID}.ready" +DATACRUMBS_PID="" + +set +u +. /opt/rh/gcc-toolset-11/enable +set -u +mkdir -p "${BUILD_DIR}" +cd "${BUILD_DIR}" +cmake -DDATACRUMBS_HOST=docker \ + -DDATACRUMBS_USER=root \ + -DDATACRUMBS_INSTALL_USER=docker \ + -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="${INSTALL_PREFIX}" \ + "${REPO_ROOT}" +cmake --build . -j"$(nproc)" +cmake --install . + +test -f "${CONFIG_YAML}" + +"${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator" "${CONFIG_YAML}" "${PROBE_FILE}" +test -f "${PROBE_FILE}" + +start_datacrumbs() { + if command -v systemctl >/dev/null 2>&1 && [[ -d /run/systemd/system ]]; then + "${INSTALL_PREFIX}/bin/datacrumbs_service_wrapper" start "${JOB_ID}" "${SERVICE_USER}" "${PROBE_FILE}" + trap '"${INSTALL_PREFIX}/bin/datacrumbs_service_wrapper" stop "${JOB_ID}" "${SERVICE_USER}" "${PROBE_FILE}" || true' EXIT + return 0 + fi + + rm -f "${READY_FILE}" + "${INSTALL_PREFIX}/sbin/datacrumbs" "${PROBE_FILE}" "${JOB_ID}" & + DATACRUMBS_PID="$!" + trap 'if [[ -n "${DATACRUMBS_PID}" ]]; then kill -INT "${DATACRUMBS_PID}" 2>/dev/null || true; wait "${DATACRUMBS_PID}" 2>/dev/null || true; fi' EXIT + + for _ in $(seq 1 300); do + [[ -f "${READY_FILE}" ]] && return 0 + sleep 1 + done + echo "datacrumbs did not become ready" >&2 + return 1 +} + +stop_datacrumbs() { + if [[ -n "${DATACRUMBS_PID}" ]]; then + kill -INT "${DATACRUMBS_PID}" 2>/dev/null || true + wait "${DATACRUMBS_PID}" 2>/dev/null || true + DATACRUMBS_PID="" + return 0 + fi + "${INSTALL_PREFIX}/bin/datacrumbs_service_wrapper" stop "${JOB_ID}" "${SERVICE_USER}" "${PROBE_FILE}" +} + +# start_datacrumbs + +rm -f "${OUT_FILE}" +"${INSTALL_PREFIX}/bin/datacrumbs_wrap" \ + dd if=/dev/zero of="${OUT_FILE}" bs=1M count=16 status=none + +test -f "${OUT_FILE}" +test "$(wc -c <"${OUT_FILE}")" = "16777216" + +# stop_datacrumbs +trap - EXIT diff --git a/infrastructure/lima/README.md b/infrastructure/lima/README.md deleted file mode 100755 index d2881577..00000000 --- a/infrastructure/lima/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# Lima eBPF Environment - -This is for running an environment for development with Lima - -## Usage -DataCrumbs is currently unstable on aarch64. Install QEMU alongside Lima if you are using macOS. -To set up your Lima for the first time: -```bash -limactl start --network=lima:user-v2 --name=ebpf lima/ebpf.yaml -``` - -If you are coming back to it from later: - -```bash -limactl start ebpf -``` -To connect to the Lima shell: -```bash -limactl shell ebpf -``` -## Setting up dependencies -### Environmental variables -```bash -export SPACK_DIR=/home/lima.linux/spack -export DATACRUMBS_DIR=/home/lima.linux/datacrumbs -export DATACRUMBS_INSTALL_DIR=/home/lima.linux/datacrumbs/install -``` -### cloning the repo -```bash -git clone git@github.com:hariharan-devarajan/datacrumbs.git ${DATACRUMBS_DIR} -``` -### Setup spack -```bash -cd ${DATACRUMBS_DIR}/scripts/lima -./install_env.sh -``` -*If you set up Lima on aarch64, you might not be able to install HDF5 with spack. You can install with `apt` or from scratch. - - -### Python dependencies -```bash -python3 -m venv --system-site-packages ${DATACRUMBS_INSTALL_DIR} -source ${DATACRUMBS_INSTALL_DIR}/bin/activate -cp ${DATACRUMBS_DIR}/requirements/requirement.chameleon.txt ${DATACRUMBS_DIR}/requirements/requirement.arta_lima.txt -pip install -r ${DATACRUMBS_DIR}/requirements/requirement.chameleon.txt -``` -If the clang in Python is not compatible with the system's clang, upgrade the lower version to the exact higher version. - -### setting up DataCrumbs -```bash -cd ${DATACRUMBS_DIR} -mkdir build -cd build -cmake -DCMAKE_INSTALL_PREFIX=${DATACRUMBS_INSTALL_DIR} .. -make install -j -``` -To make sure files are executable: -```bash -chmod +x ~/datacrumbs/install/libexec/datacrumbs/bin/* -``` -## Running the tool -Check `${DATACRUMBS_DIR}/datacrumbs/configs/module/default.yaml` and make necessary changes or write your desired model. -*scripts in `lima/server` and `lima/clients` are using a HDF5 built from source. -```bash -sudo su -source ${DATACRUMBS_DIR}/scripts/lima/server/setup.sh -. ${DATACRUMBS_DIR}/scripts/lima/server/init.sh -g -``` - -### Starting Server - -```bash -source ${DATACRUMBS_DIR}/scripts/lima/server/setup.sh -. ${DATACRUMBS_DIR}/scripts/lima/server/run.sh -``` - -### Running Simple Test - -```bash -source ${DATACRUMBS_DIR}/scripts/lima/client/setup.sh -. ${DATACRUMBS_DIR}/scripts/lima/client/tests/test_hdf5.sh -``` -## Clean Up - -You can stop: - -```bash -limactl stop ebpf -``` - -Or just nuke it! - -```bash -limactl delete ebpf -``` diff --git a/infrastructure/lima/ebpf.yaml b/infrastructure/lima/ebpf.yaml deleted file mode 100755 index 36837e75..00000000 --- a/infrastructure/lima/ebpf.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# This example requires Lima v0.8.0 or later -images: - - location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img" - arch: "x86_64" - - location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-arm64.img" - arch: "aarch64" - -cpus: 4 -memory: "4GiB" - -mounts: - - location: "~" - writable: true - - location: "/tmp/lima" - writable: true -provision: - - mode: system - script: | - #!/bin/bash - apt-get update - apt-get install -y apt-transport-https ca-certificates curl clang llvm jq - apt-get install -y libelf-dev libpcap-dev libbfd-dev binutils-dev build-essential make - apt-get install -y linux-tools-common linux-tools-$(uname -r) - apt-get install -y bpfcc-tools - apt-get install -y python3-pip python3.10-venv - # Install bcc - sudo apt install -y zip bison build-essential cmake flex git libedit-dev \ - libllvm14 llvm-14-dev libclang-14-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools \ - liblzma-dev libdebuginfod-dev arping netperf iperf - # for vscode - apt install -y clangd - # install bcc - BCC_HOME=/opt/bcc - rm -rf ${BCC_HOME} - git clone https://github.com/iovisor/bcc.git ${BCC_HOME} - mkdir ${BCC_HOME}/build - pushd ${BCC_HOME}/build - cmake .. - make -j2 - make install -j - cmake -DPYTHON_CMD=python3 .. # build python3 binding - pushd src/python/ - make - make install - popd - popd - cp -r ${BCC_HOME}/build/src/python/bcc-python3/bcc/* /usr/lib/python3/dist-packages/bcc/ - chmod 777 ${BCC_HOME} - - # install openmpi - apt-get install -y hwloc libtool openssl libssl-dev gfortran gcc g++ - SPACK_ROOT=/opt/spack - git clone https://github.com/spack/spack.git ${SPACK_ROOT} - source ${SPACK_ROOT}/share/spack/setup-env.sh - spack external find - spack compiler find - spack install -j4 openmpi@5.0.5 - chmod 777 /opt -R - - - mode: user - script: | - #!/bin/bash - sudo cp -r /root/.spack ~/ - sudo chown $USER ~/.spack -R diff --git a/scripts/datacrumbs/datacrumbs_args.in b/scripts/datacrumbs/datacrumbs_args.in deleted file mode 100755 index 3ab704bd..00000000 --- a/scripts/datacrumbs/datacrumbs_args.in +++ /dev/null @@ -1,668 +0,0 @@ -#! /usr/bin/env bash -# datacrumbs_args.in - reusable getopt-based argument parsing helpers - -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)" -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" -else - 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 -} - -# Case helpers -dc__upper() { tr '[:lower:]' '[:upper:]'; } -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" -} - -# Make global (unprefixed) VAR name from long option -dc__make_global_var_name() { - 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" -} - -# 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 -} - -# 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" -} - -# 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" -} - -# 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" "" -} -# 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" -} - -# 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" "" -} - -# 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" "" -} - -# 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" -} - -# Register subcommand-specific required options -# Usage: dc_args_add_subcommand PREFIX OPTION_NAME SUBCOMMAND_VALUE REQUIRED_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" -} - -# 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%,}" -} - -# 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 - # 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" -} - -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 -} - -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 -} - -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 -} - -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 - # 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 - ((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 -} - -# Example: -# dc_args_init "MYAPP" -# dc_args_add_option "MYAPP" "input" "MANDATORY" "Input file path" "string" -# dc_args_add_option "MYAPP" "count" "OPTIONAL" "Number of items" "int" -# dc_args_parse "MYAPP" "myprog" "$@" -# 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" -# dc_args_add_option "MYAPP" "action" "MANDATORY" "Action to perform (discover|compose)" "string" -# dc_args_add_option "MYAPP" "name" "OPTIONAL" "Resource name" "string" -# dc_args_add_option "MYAPP" "probes" "OPTIONAL" "Probe list" "string" -# # When action=compose, name and probes become mandatory -# dc_args_add_subcommand "MYAPP" "action" "compose" "name" "probes" -# dc_args_parse "MYAPP" "myprog" "$@" diff --git a/scripts/datacrumbs/datacrumbs_compose.in b/scripts/datacrumbs/datacrumbs_compose.in deleted file mode 100755 index 17d957e8..00000000 --- a/scripts/datacrumbs/datacrumbs_compose.in +++ /dev/null @@ -1,138 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ - -# Load argument parser -if [[ -f "$SCRIPT_DIR/datacrumbs_args" ]]; then - source "$SCRIPT_DIR/datacrumbs_args" -else - 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_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 -done - -dc_args_parse "$APP" "datacrumbs_compose" "$@" - -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 -fi - -dc_args_pretty_print "$APP" "datacrumbs_compose" - -# Load environment after we know the user -source "$SCRIPT_DIR/datacrumbs_setup" - -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." -fi - -run() { - 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 -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' - set -e - cp -r '${DATACRUMBS_INSTALL_COMPOSABLE_DIR}/'* '${BUILD_DIR}/' - @CMAKE_COMMAND@ -B'${BUILD_DIR}/build' -DCMAKE_INSTALL_PREFIX='${BUILD_DIR}/install' \ - -DDATACRUMBS_NAME='${COMPOSABLE_NAME}' \ - -DDATACRUMBS_PROBES='${PROBES}' \ - -DDATACRUMBS_CLIENT_OBJECTS_DIR='${DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR}' \ - '${BUILD_DIR}' - @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" -else - 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 deleted file mode 100755 index bfbb98de..00000000 --- a/scripts/datacrumbs/datacrumbs_compose_run.in +++ /dev/null @@ -1,113 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -# Source argument parser -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" "${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" -dc_args_add_option "DATACRUMBS_COMPOSE_RUN" "ppn" "OPTIONAL" "Set processes per node" "int" "1" -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 -fi - -DATACRUMBS_COMPOSABLE_NAME="${DATACRUMBS_COMPOSE_RUN_COMPOSITE_NAME:-}" -APP_CMD=("${DATACRUMBS_COMPOSE_RUN_APP}") -PROG_NAME=$(basename "$0") -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" || "$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 -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}" - -# 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 - -# Convert APP_CMD string into array, splitting on spaces -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" -fi - -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 "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[*]}" - -log "Running App: ${APP_CMD[*]}" -job_launch "${APP_CMD[@]}" -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" -else - 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 deleted file mode 100755 index 6940b393..00000000 --- a/scripts/datacrumbs/datacrumbs_compose_wrapper.in +++ /dev/null @@ -1,20 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ - -# Load environment -source "$SCRIPT_DIR/datacrumbs_setup" - -check_sudo_user - -DATACRUMBS_COMPOSABLE_NAME=$1 -shift - -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 deleted file mode 100755 index 03a91693..00000000 --- a/scripts/datacrumbs/datacrumbs_create_log_dir.in +++ /dev/null @@ -1,42 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -# Source argument parser -source "$SCRIPT_DIR/datacrumbs_args" - -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 -fi - -PROG_NAME=$(basename "$0") - -source $SCRIPT_DIR/datacrumbs_setup - -check_install_user - -mkdir -p $DATACRUMBS_TRACE_DIR -log "Created log directory: $DATACRUMBS_TRACE_DIR" diff --git a/scripts/datacrumbs/datacrumbs_logging.in b/scripts/datacrumbs/datacrumbs_logging.in deleted file mode 100755 index caddcedc..00000000 --- a/scripts/datacrumbs/datacrumbs_logging.in +++ /dev/null @@ -1,69 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -log() { - 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 -} - -error() { - 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 -} - -log_system() { - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then - logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=7 ${FLUX_JOB_ID} "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=1 ${FLUX_JOB_ID} "[WARN $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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_SCHEDULER_TYPE@" ]]; then - flux job raise --severity=1 ${FLUX_JOB_ID} "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] $@" - elif [[ "@DATACRUMBS_SCHEDULER_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 deleted file mode 100755 index 4c19fe08..00000000 --- a/scripts/datacrumbs/datacrumbs_run.in +++ /dev/null @@ -1,85 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -# Source argument parser -source "$SCRIPT_DIR/datacrumbs_args" - -dc_args_init "DATACRUMBS" -dc_args_add_option "DATACRUMBS" "app" "MANDATORY" "App command" "string" -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" -dc_args_add_subcommand "DATACRUMBS" "enable_mpi" "1" "nodes" "ppn" - -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 -fi - -if [[ -z "${DATACRUMBS_APP}" ]]; then - 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} -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}" - -PROG_NAME=$(basename "$0") - -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 - -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" - -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 deleted file mode 100755 index e3c8917b..00000000 --- a/scripts/datacrumbs/datacrumbs_run_validator.in +++ /dev/null @@ -1,34 +0,0 @@ -#! /usr/bin/env bash - -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 - -log "Running datacrumbs_validator..." - -sudo @CMAKE_RUNTIME_OUTPUT_DIRECTORY@/datacrumbs_validator "@DATACRUMBS_HOST@" "--user" "@DATACRUMBS_INSTALL_USER@" "--config_path" "@CMAKE_CONFIG_OUTPUT_DIRECTORY@" "--data_dir" "@CMAKE_DATA_OUTPUT_DIRECTORY@" "--trace_log_dir" $PWD - -log "Copying probes-invalid JSON file..." -cp @CMAKE_DATA_OUTPUT_DIRECTORY@/probes-invalid-@DATACRUMBS_INSTALL_USER@-@DATACRUMBS_HOST@.json @CMAKE_CURRENT_SOURCE_DIR@/etc/datacrumbs/data - -log "Changing directory to data folder..." -cd @CMAKE_CURRENT_SOURCE_DIR@/etc/datacrumbs/data - -log "Running compact.sh..." -./compact.sh - -chown @DATACRUMBS_INSTALL_USER@:@DATACRUMBS_INSTALL_USER@ * - -log "Script completed." diff --git a/scripts/datacrumbs/datacrumbs_salloc.in b/scripts/datacrumbs/datacrumbs_salloc.in deleted file mode 100755 index bf8533e4..00000000 --- a/scripts/datacrumbs/datacrumbs_salloc.in +++ /dev/null @@ -1,117 +0,0 @@ -#!/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 deleted file mode 100755 index b6bb1d01..00000000 --- a/scripts/datacrumbs/datacrumbs_server_run.sh.in +++ /dev/null @@ -1,61 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -# Source argument parser -source "$SCRIPT_DIR/datacrumbs_args" - -dc_args_init "DATACRUMBS" -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" -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 -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 ! validate_datacrumbs_composite_name "${DATACRUMBS_COMPOSITE_NAME}"; then - error "Invalid composable name: ${DATACRUMBS_COMPOSITE_NAME}" - exit 1 - fi -fi - -check_sudo_user -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 "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}") -else - 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 deleted file mode 100755 index 296c4590..00000000 --- a/scripts/datacrumbs/datacrumbs_server_stop.sh.in +++ /dev/null @@ -1,69 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -# Source argument parser -source "$SCRIPT_DIR/datacrumbs_args" - -dc_args_init "DATACRUMBS" -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" -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 -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 -fi - -# Convert APP_CMD string into array, splitting on spaces -read -ra APP_CMD <<<"${DATACRUMBS_APP}" - -check_sudo_user - -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 "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}") -else - exec=(@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_SBINDIR@/datacrumbs) -fi - -datacrumbs_stop_server "${exec[*]}" $PROG_NAME - -datacrumbs_print_status - -datacrumbs_finalize $DATACRUMBS_USER $DATACRUMBS_TRACE_DIR diff --git a/scripts/datacrumbs/datacrumbs_service_common.sh.in b/scripts/datacrumbs/datacrumbs_service_common.sh.in old mode 100755 new mode 100644 index 883a78ad..86c3cc5a --- a/scripts/datacrumbs/datacrumbs_service_common.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_common.sh.in @@ -1,125 +1,303 @@ #!/bin/bash -set -e pipefail +set -eo pipefail -source @DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_setup +readonly DATACRUMBS_SERVICE_SCHEDULER_TYPE="@DATACRUMBS_SCHEDULER_TYPE@" +readonly DATACRUMBS_SERVICE_INSTALL_USER="@DATACRUMBS_INSTALL_USER@" +readonly DATACRUMBS_SERVICE_JOB_ID_VAR="@DATACRUMBS_SCHEDULER_JOBID_ENV_VAR@" +readonly DATACRUMBS_SERVICE_CONFIGS_DIR="@DATACRUMBS_INSTALL_CONFIGS_DIR@" +readonly DATACRUMBS_SERVICE_LOG_DIR="@DATACRUMBS_CONFIGURED_LOG_DIR@" +readonly DATACRUMBS_SERVICE_RUN_ID_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@/datacrumbs.runid" -function get_general_datacrumbs_enabled() { - local enabled=${DATACRUMBS_ENABLED:-0} - enabled_value="no" - if [[ "${enabled}" -eq "1" ]]; then - enabled_value="yes" +log_system() { + local message="$*" + if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" && -n "${FLUX_JOB_ID:-}" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] ${message}" + elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" && -n "${SLURM_JOB_ID:-}" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] ${message}" + else + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S')] ${message}" + fi +} + +log_user() { + local message="$*" + if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" && -n "${FLUX_JOB_ID:-}" ]]; then + flux job raise --severity=7 "${FLUX_JOB_ID}" \ + "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] ${message}" + elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" && -n "${SLURM_JOB_ID:-}" ]]; then + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] ${message}" + else + logger "[INFO $(date '+%Y-%m-%d %H:%M:%S')] ${message}" fi - log_system "get_general_datacrumbs_enabled returned enabled:${enabled_value}" - echo "${enabled_value}" } -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." +error_user() { + local message="$*" + if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" && -n "${FLUX_JOB_ID:-}" ]]; then + flux job raise --severity=1 "${FLUX_JOB_ID}" \ + "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] ${message}" + elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" && -n "${SLURM_JOB_ID:-}" ]]; then + logger "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] ${message}" 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" + logger "[ERROR $(date '+%Y-%m-%d %H:%M:%S')] ${message}" + fi +} + +get_service_phase() { + if [[ -n "${DATACRUMBS_SERVICE_PHASE_OVERRIDE:-}" ]]; then + echo "${DATACRUMBS_SERVICE_PHASE_OVERRIDE}" + return 0 + fi + case "$(basename "$0")" in + datacrumbs_service_run.sh) echo "prolog" ;; + datacrumbs_service_stop.sh) echo "epilog" ;; + *) echo "unknown" ;; + esac +} + +resolve_user_from_uid() { + local user="" + local uid="$1" + if [[ -n "${uid}" ]]; then + user=$(id -nu "${uid}" 2>/dev/null || true) + fi + echo "${user}" +} + +get_flux_actual_user() { + local phase="$1" + local user="" + if [[ "${phase}" == "prolog" ]]; then + if [[ -n "${FLUX_JOB_USERID:-}" ]]; then + user=$(resolve_user_from_uid "${FLUX_JOB_USERID}") + fi + if [[ -z "${user}" && -n "${FLUX_JOB_USER:-}" ]]; then + user="${FLUX_JOB_USER}" + fi + else + if [[ -n "${FLUX_JOB_USER:-}" ]]; then + user="${FLUX_JOB_USER}" + fi + if [[ -z "${user}" && -n "${FLUX_JOB_USERID:-}" ]]; then + user=$(resolve_user_from_uid "${FLUX_JOB_USERID}") fi fi - log_system "get_flux_datacrumbs_enabled returned enabled:${enabled_value}" - echo "${enabled_value}" + echo "${user}" } -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 +get_slurm_actual_user() { + local phase="$1" + local user="" + if [[ "${phase}" == "prolog" ]]; then + if [[ -n "${SLURM_JOB_USER:-}" ]]; then + user="${SLURM_JOB_USER}" + fi + if [[ -z "${user}" && -n "${SLURM_JOB_UID:-}" ]]; then + user=$(resolve_user_from_uid "${SLURM_JOB_UID}") + fi + else + if [[ -n "${SLURM_JOB_UID:-}" ]]; then + user=$(resolve_user_from_uid "${SLURM_JOB_UID}") + fi + if [[ -z "${user}" && -n "${SLURM_JOB_USER:-}" ]]; then + user="${SLURM_JOB_USER}" + fi + fi + echo "${user}" } -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" +get_actual_user() { + local phase + phase=$(get_service_phase) + if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" ]]; then + get_flux_actual_user "${phase}" + elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" ]]; then + get_slurm_actual_user "${phase}" fi - log_system "get_slurm_datacrumbs_enabled returned enabled:${enabled_value}" - echo "${enabled_value}" } -function get_datacrumbs_enabled() { - local enabled="no" - if [[ "FLUX" == "@DATACRUMBS_SCHEDULER_TYPE@" ]]; then - enabled=$(get_flux_datacrumbs_enabled) - elif [[ "@DATACRUMBS_SCHEDULER_TYPE@" == "SLURM" ]]; then - local slurm_job_comment=$(get_slurm_comment) - log_system "Slurm comment: $slurm_job_comment" - enabled=$(get_slurm_datacrumbs_enabled) +if [[ -z "${DATACRUMBS_USER:-}" ]]; then + if [[ "$(id -u)" != "0" ]]; then + DATACRUMBS_USER=$(id -un) + elif [[ -n "${SUDO_USER:-}" && "${SUDO_USER}" != "root" ]]; then + DATACRUMBS_USER="${SUDO_USER}" else - enabled=$(get_general_datacrumbs_enabled) + DATACRUMBS_USER=$(get_actual_user) + if [[ -z "${DATACRUMBS_USER}" || "${DATACRUMBS_USER}" == "root" ]]; then + DATACRUMBS_USER="${USER:-${DATACRUMBS_SERVICE_INSTALL_USER}}" + fi + fi +fi +readonly DATACRUMBS_USER +export DATACRUMBS_USER + +json_field_or_empty() { + local json_line="$1" + local jq_expr="$2" + if [[ -z "${json_line}" ]]; then + return 0 + fi + echo "${json_line}" | jq -r "${jq_expr} // empty" 2>/dev/null || true +} + +get_datacrumbs_json_override() { + if [[ -n "${DATACRUMBS_SERVICE_JSON_OVERRIDE:-}" ]]; then + echo "${DATACRUMBS_SERVICE_JSON_OVERRIDE}" 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" +unsupported_scheduler() { + error_user "Unsupported scheduler type for datacrumbs service scripts: ${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" + return 1 +} + +get_slurm_comment_json() { + scontrol show job "${SLURM_JOB_ID}" | grep -i comment | awk -F'=' '{print $2}' +} + +get_flux_datacrumbs_json() { + flux job info "${FLUX_JOB_ID}" jobspec 2>/dev/null | + jq -c '.attributes.system.datacrumbs // empty' 2>/dev/null || true +} + +get_slurm_datacrumbs_json() { + local comment_json + comment_json=$(get_slurm_comment_json) + echo "${comment_json}" | jq -c '.datacrumbs // empty' 2>/dev/null || true +} + +get_datacrumbs_json() { + local override_json + override_json=$(get_datacrumbs_json_override) + if [[ -n "${override_json}" ]]; then + echo "${override_json}" + return 0 + fi + if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" ]]; then + get_flux_datacrumbs_json + elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" ]]; then + get_slurm_datacrumbs_json 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}" + unsupported_scheduler + fi +} + +get_flux_datacrumbs_enabled() { + local metadata_json + metadata_json=$(get_flux_datacrumbs_json) + if [[ "$(json_field_or_empty "${metadata_json}" '.enable')" == "yes" ]]; then + echo "yes" else - log_system "User has requested datacrumbs' composite feature using ${composite_name}." + echo "no" 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}." +get_slurm_datacrumbs_enabled() { + local metadata_json + metadata_json=$(get_slurm_datacrumbs_json) + if [[ "$(json_field_or_empty "${metadata_json}" '.enable')" == "yes" ]]; then + echo "yes" else - log_system "User has requested datacrumbs' composite feature using ${composite_name}." + echo "no" 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_SCHEDULER_TYPE@" ]]; then - name=$(get_flux_datacrumbs_composite_name) - elif [[ "@DATACRUMBS_SCHEDULER_TYPE@" == "SLURM" ]]; then - name=$(get_slurm_datacrumbs_composite_name) +get_datacrumbs_enabled() { + if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" ]]; then + get_flux_datacrumbs_enabled + elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" ]]; then + get_slurm_datacrumbs_enabled else - name=$(get_general_datacrumbs_composite_name) + unsupported_scheduler fi - if [[ "${name}" != "$(get_default_datacrumbs_composite_name)" && "${name}" != "ERROR" ]]; then - if ! validate_datacrumbs_composite_name "${name}"; then - name="ERROR" - fi +} + +get_datacrumbs_probe_file() { + local metadata_json + local probe_file="" + + metadata_json=$(get_datacrumbs_json) + probe_file=$(json_field_or_empty "${metadata_json}" '.probe_file') + + echo "${probe_file}" +} + +probe_file_readable_by_user() { + local probe_file="$1" + local submitting_user="$2" + if [[ ! -r "${probe_file}" ]]; then + return 1 + fi + if [[ -z "${submitting_user}" || "${submitting_user}" == "$(id -un)" ]]; then + return 0 fi - log_system "get_datacrumbs_composite_name returned name:${name}" - echo "${name}" + if [[ "$(id -u)" == "0" ]]; then + su -s /bin/bash - "${submitting_user}" -c "test -r \"${probe_file}\"" >/dev/null 2>&1 + else + sudo -n -u "${submitting_user}" test -r "${probe_file}" >/dev/null 2>&1 + fi +} + +get_run_id() { + local job_id_var="${DATACRUMBS_SERVICE_JOB_ID_VAR}" + local job_id_value="" + if [[ -n "${job_id_var}" && "${job_id_var}" != "NONE" ]]; then + job_id_value="${!job_id_var-}" + fi + + if [[ -n "${job_id_value}" ]]; then + echo "${job_id_value}" + elif [[ -f "${DATACRUMBS_SERVICE_RUN_ID_FILE}" ]]; then + cat "${DATACRUMBS_SERVICE_RUN_ID_FILE}" 2>/dev/null + else + date +"%Y%m%d%H%M%S" + fi +} + +escape_env_value() { + local value="$1" + value="${value//\\/\\\\}" + value="${value//\"/\\\"}" + printf '"%s"' "${value}" +} + +write_service_env_file() { + local env_file="$1" + local probe_file="$2" + mkdir -p "$(dirname "${env_file}")" + printf 'DATACRUMBS_PROBE_FILE=%s\n' "$(escape_env_value "${probe_file}")" >"${env_file}" + printf 'DATACRUMBS_USER=%s\n' "$(escape_env_value "${DATACRUMBS_USER}")" >>"${env_file}" + printf 'DATACRUMBS_SERVICE_RUN_ID=%s\n' "$(escape_env_value "${DATACRUMBS_SERVICE_RUN_ID}")" >>"${env_file}" + printf 'DATACRUMBS_LOG_DIR=%s\n' "$(escape_env_value "${DATACRUMBS_SERVICE_LOG_DIR}")" >>"${env_file}" + chmod 0400 "${env_file}" 2>/dev/null || true +} + +systemctl_cmd() { + if [[ "$(id -u)" == "0" ]]; then + systemctl "$@" + else + sudo systemctl "$@" + fi +} + +wait_for_unit_inactive() { + local unit_name="$1" + local timeout_seconds="${2:-300}" + local elapsed=0 + local state="" + + while ((elapsed < timeout_seconds)); do + state="$(systemctl_cmd is-active "${unit_name}" 2>/dev/null || true)" + if [[ "${state}" == "inactive" || "${state}" == "failed" || "${state}" == "unknown" ]]; then + return 0 + fi + sleep 1 + elapsed=$((elapsed + 1)) + done + + error_user "Timed out waiting for ${unit_name} to stop." + return 1 } DATACRUMBS_ENABLED=$(get_datacrumbs_enabled) @@ -127,16 +305,34 @@ 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 + +DATACRUMBS_PROBE_FILE=$(get_datacrumbs_probe_file) +DATACRUMBS_SERVICE_REQUIRE_PROBE_FILE="${DATACRUMBS_SERVICE_REQUIRE_PROBE_FILE:-1}" +if [[ "${DATACRUMBS_SERVICE_REQUIRE_PROBE_FILE}" == "1" && -z "${DATACRUMBS_PROBE_FILE}" ]]; then + error_user "Datacrumbs is enabled but no probes file was provided for the systemd service." + return 1 +fi +if [[ -n "${DATACRUMBS_PROBE_FILE}" && ! -f "${DATACRUMBS_PROBE_FILE}" ]]; then + error_user "Datacrumbs probe file not found: ${DATACRUMBS_PROBE_FILE}" 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}" +if [[ -n "${DATACRUMBS_PROBE_FILE}" ]] && ! probe_file_readable_by_user "${DATACRUMBS_PROBE_FILE}" "${DATACRUMBS_USER}"; then + error_user "Datacrumbs probe file is not readable by submitting user ${DATACRUMBS_USER}: ${DATACRUMBS_PROBE_FILE}" + return 1 fi -readonly DATACRUMBS_COMPOSABLE_NAME -export DATACRUMBS_COMPOSABLE_NAME -export DATACRUMBS_USER +DATACRUMBS_SERVICE_RUN_ID=$(get_run_id) +DATACRUMBS_SERVICE_ENV_FILE="${DATACRUMBS_SERVICE_CONFIGS_DIR}/datacrumbs-${DATACRUMBS_SERVICE_RUN_ID}.env" + +readonly DATACRUMBS_ENABLED +readonly DATACRUMBS_PROBE_FILE +readonly DATACRUMBS_SERVICE_RUN_ID +readonly DATACRUMBS_SERVICE_ENV_FILE +export DATACRUMBS_ENABLED +export DATACRUMBS_PROBE_FILE +export DATACRUMBS_SERVICE_RUN_ID +export DATACRUMBS_SERVICE_ENV_FILE + +if [[ -n "${DATACRUMBS_PROBE_FILE}" ]]; then + log_user "Starting systemd datacrumbs service with probes file: ${DATACRUMBS_PROBE_FILE}" +fi diff --git a/scripts/datacrumbs/datacrumbs_service_run.sh.in b/scripts/datacrumbs/datacrumbs_service_run.sh.in index e973fb13..c2f14999 100755 --- a/scripts/datacrumbs/datacrumbs_service_run.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_run.sh.in @@ -1,12 +1,11 @@ #!/bin/bash -set -e pipefail +set -eo 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 ${DATACRUMBS_SERVER_RUN_ID}" - sudo systemctl start datacrumbs@${DATACRUMBS_SERVER_RUN_ID}.service +if source @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_service_common.sh; then + umask 022 + write_service_env_file "${DATACRUMBS_SERVICE_ENV_FILE}" "${DATACRUMBS_PROBE_FILE}" + log_system "Starting datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service with ${DATACRUMBS_PROBE_FILE}" + systemctl_cmd start "datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service" fi exit 0 diff --git a/scripts/datacrumbs/datacrumbs_service_stop.sh.in b/scripts/datacrumbs/datacrumbs_service_stop.sh.in index 43174611..7fb425dc 100755 --- a/scripts/datacrumbs/datacrumbs_service_stop.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_stop.sh.in @@ -1,10 +1,12 @@ #!/bin/bash -set -e pipefail +set -eo pipefail -source @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_service_common.sh -if [[ $? -eq 0 ]]; then - sudo systemctl stop datacrumbs@${DATACRUMBS_SERVER_RUN_ID}.service - sudo rm ${DATACRUMBS_SERVER_ENV_FILE} +export DATACRUMBS_SERVICE_REQUIRE_PROBE_FILE=0 +if source @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_service_common.sh; then + log_system "Stopping datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service" + systemctl_cmd stop "datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service" + wait_for_unit_inactive "datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service" + rm -f "${DATACRUMBS_SERVICE_ENV_FILE}" fi exit 0 diff --git a/scripts/datacrumbs/datacrumbs_setup.in b/scripts/datacrumbs/datacrumbs_setup.in deleted file mode 100755 index ad15f838..00000000 --- a/scripts/datacrumbs/datacrumbs_setup.in +++ /dev/null @@ -1,84 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -if [[ -z "${BASH_VERSION}" ]]; then - 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 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 - -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 -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" -fi - -ulimit -n $(ulimit -H -n) -ulimit -l $(ulimit -H -l) - -alias datacrumbs_track='@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_track' -alias datacrumbs_untrack='@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_untrack' -alias datacrumbs_run='@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_run' -alias datacrumbs_compose_run='@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_compose_run' -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' diff --git a/scripts/datacrumbs/datacrumbs_stop.in b/scripts/datacrumbs/datacrumbs_stop.in deleted file mode 100755 index d6b53c25..00000000 --- a/scripts/datacrumbs/datacrumbs_stop.in +++ /dev/null @@ -1,21 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ - -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 -fi - -if [[ "$PROG_NAME" == "" ]]; then - 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 diff --git a/scripts/datacrumbs/datacrumbs_track.in b/scripts/datacrumbs/datacrumbs_track.in deleted file mode 100755 index 2f47056c..00000000 --- a/scripts/datacrumbs/datacrumbs_track.in +++ /dev/null @@ -1,69 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -# Source argument parser -source "$SCRIPT_DIR/datacrumbs_args" - -dc_args_init "DC_TRACK" -dc_args_add_option "DC_TRACK" "executable" "MANDATORY" "Path to the executable" "string" -dc_args_parse "DC_TRACK" "datacrumbs_track" "$@" - -EXECUTABLE="$DC_TRACK_EXECUTABLE" - -if [[ -z "$EXECUTABLE" ]]; then - dc_args_usage "DC_TRACK" "datacrumbs_track" - exit 1 -fi - -source $SCRIPT_DIR/datacrumbs_setup - -check_regular_user - -log "Checking executable: $EXECUTABLE" -if [[ "$DRY_RUN" == "1" ]]; then - 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 -fi - -if [[ "$DRY_RUN" == "1" ]]; then - 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 -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}" -else - datacrumbs_run_command "Unable to patch $MAIN_PROGRAM" patchelf --add-needed ${DATACRUMBS_CLIENT_LIB} "$MAIN_PROGRAM" -fi -log "Enabling tracking of $EXECUTABLE completed." diff --git a/scripts/datacrumbs/datacrumbs_untrack.in b/scripts/datacrumbs/datacrumbs_untrack.in deleted file mode 100755 index 5b9f9a54..00000000 --- a/scripts/datacrumbs/datacrumbs_untrack.in +++ /dev/null @@ -1,70 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -# Source argument parser -source "$SCRIPT_DIR/datacrumbs_args" - -dc_args_init "DC_UNTRACK" -dc_args_add_option "DC_UNTRACK" "executable" "MANDATORY" "Path to the executable" "string" -dc_args_parse "DC_UNTRACK" "datacrumbs_untrack" "$@" - -EXECUTABLE="$DC_UNTRACK_EXECUTABLE" - -if [[ -z "$EXECUTABLE" ]]; then - dc_args_show_help "DC_UNTRACK" "$@" - exit 1 -fi - -source $SCRIPT_DIR/datacrumbs_setup - -check_regular_user - -log "Checking executable: $EXECUTABLE" -if [[ "$DRY_RUN" == "1" ]]; then - 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 -fi - -if [[ "$DRY_RUN" == "1" ]]; then - 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 -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}" -else - datacrumbs_run_command "Unable to patch $MAIN_PROGRAM" patchelf --remove-needed ${DATACRUMBS_CLIENT_LIB} "$MAIN_PROGRAM" -fi -log "Disabling tracking of $EXECUTABLE completed." diff --git a/scripts/datacrumbs/datacrumbs_utility.in b/scripts/datacrumbs/datacrumbs_utility.in deleted file mode 100755 index 500c5d24..00000000 --- a/scripts/datacrumbs/datacrumbs_utility.in +++ /dev/null @@ -1,288 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -SCRIPT_DIR=@DATACRUMBS_INSTALL_BINARYDIR@ - -# Load logging script -if [[ -f "$SCRIPT_DIR/datacrumbs_logging" ]]; then - source "$SCRIPT_DIR/datacrumbs_logging" -else - 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 -} - -# 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 -} - -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 -} - -function datacrumbs_start_server() { - 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 - 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") - # 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() { - 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 -} - -function check_sudo_user() { - 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 -} - -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[@]}" -} - -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}" == "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_SCHEDULER_TYPE@" ]]; then - if [[ -n "$FLUX_JOB_USERID" ]]; then - user=$(id -nu $FLUX_JOB_USERID) - fi - elif [[ "SLURM" == "@DATACRUMBS_SCHEDULER_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 deleted file mode 100755 index 92e93081..00000000 --- a/scripts/datacrumbs/datacrumbs_wrap.in +++ /dev/null @@ -1,14 +0,0 @@ -#! /usr/bin/env bash - -set -eo pipefail - -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 -fi - -LD_PRELOAD=${DATACRUMBS_CLIENT_LIB} "$@" diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh deleted file mode 100755 index 68af1278..00000000 --- a/scripts/docker-build.sh +++ /dev/null @@ -1,193 +0,0 @@ -#!/bin/bash - -# DataCrumbs Docker Build and Push Script -# This script builds the DataCrumbs Docker image and optionally pushes it to Docker Hub - -set -e - -# Configuration -IMAGE_NAME="datacrumbs" -DOCKER_HUB_USERNAME="${DOCKER_HUB_USERNAME:-your-dockerhub-username}" -VERSION="${VERSION:-latest}" -DOCKERFILE_PATH="infrastrutcure/docker/Dockerfile" - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -# Function to print colored output -print_status() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -print_warning() { - echo -e "${YELLOW}[WARNING]${NC} $1" -} - -print_error() { - 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 -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" -} - -# 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 -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 -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" -elif command -v docker >/dev/null 2>&1; then - 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 -fi - -# Image tags -LOCAL_TAG="$IMAGE_NAME:$VERSION" -HUB_TAG="$DOCKER_HUB_USERNAME/$IMAGE_NAME:$VERSION" -HUB_LATEST_TAG="$DOCKER_HUB_USERNAME/$IMAGE_NAME:latest" - -print_status "Building DataCrumbs Docker image..." -print_status "Image name: $LOCAL_TAG" -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" -else - 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" - 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 - 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_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" -fi - -echo "" -print_status "Image size:" -$CONTAINER_CMD images "$LOCAL_TAG" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" diff --git a/scripts/formatting/autoformat.sh b/scripts/formatting/autoformat.sh index 3e50cea5..64eb4a2c 100755 --- a/scripts/formatting/autoformat.sh +++ b/scripts/formatting/autoformat.sh @@ -1,13 +1,19 @@ #! /bin/bash +set -euo pipefail + clang_format_exe="clang-format" +repo_root="" if [[ $# -ge 1 ]]; then clang_format_exe="$1" fi +if [[ $# -ge 2 ]]; then + repo_root="$2" +fi SUPPORTED_CLANG_FORMAT_VERSION="19.1.7" -if ! command -v $clang_format_exe >/dev/null 2>&1; then +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 @@ -16,7 +22,7 @@ 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 "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 formatting is highly likely to be incorrect." fi @@ -49,14 +55,16 @@ fi SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) curr_dir=$(pwd) +if [[ -z "$repo_root" ]]; then + repo_root=$(cd "$SCRIPT_DIR/../.." && pwd) +fi +repo_root=$(cd "$repo_root" && pwd) -cd $SCRIPT_DIR -cd .. -cd .. +cd "$repo_root" 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 +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 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 @@ -64,4 +72,4 @@ find . \( -name "*.sh" -o -name "*.in" \) \( -path "./etc/datacrumbs/data/*" -o 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 +cd "$curr_dir" diff --git a/scripts/formatting/check-formatting.sh b/scripts/formatting/check-formatting.sh index 7f677e44..12a2477f 100755 --- a/scripts/formatting/check-formatting.sh +++ b/scripts/formatting/check-formatting.sh @@ -1,13 +1,19 @@ #! /bin/bash +set -euo pipefail + clang_format_exe="clang-format" +repo_root="" if [[ $# -ge 1 ]]; then clang_format_exe="$1" fi +if [[ $# -ge 2 ]]; then + repo_root="$2" +fi SUPPORTED_CLANG_FORMAT_VERSION="19.1.7" -if [ command -v $clang_format_exe ] >/dev/null 2>&1; then +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 @@ -21,18 +27,18 @@ if [ "$clang_format_version" != "$SUPPORTED_CLANG_FORMAT_VERSION" ]; then echo " The resulting check is highly likely to be incorrect." fi -if [ command -v find ] >/dev/null 2>&1; then +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 +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'" +if ! command -v xargs >/dev/null 2>&1; then + echo "You must have 'xargs' in PATH to use 'check-formatting.sh'" exit 1 fi @@ -49,13 +55,15 @@ fi SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) curr_dir=$(pwd) +if [[ -z "$repo_root" ]]; then + repo_root=$(cd "$SCRIPT_DIR/../.." && pwd) +fi +repo_root=$(cd "$repo_root" && pwd) -cd $SCRIPT_DIR -cd .. -cd .. +cd "$repo_root" 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 +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 shell scripts in '.'" @@ -66,7 +74,7 @@ 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 +cd "$curr_dir" 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." diff --git a/src/datacrumbs/client/library.cpp b/src/datacrumbs/client/library.cpp deleted file mode 100755 index 4140f14c..00000000 --- a/src/datacrumbs/client/library.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @file library.cpp - * @brief Implementation of library initialization and finalization functions for the datacrumbs - * client. - * - * This file contains functions that are called when the library is loaded and unloaded. - * These functions are responsible for initializing and finalizing the library's functionality. - */ - -/** - * Standard headers - */ -#include -#include -#include -#include - -/** - * Internal headers - */ -#include -#include -#include - -/** - * @brief Called when the library is loaded. - * - * This function logs a message indicating that the library's start function has been called, - * along with the current process ID. - */ -extern "C" __attribute__((visibility("default"))) void datacrumbs_start() { - int pid = getpid(); - DC_LOG_INFO("Start called (pid: %d)", pid); -} - -/** - * @brief Called when the library is unloaded. - * - * This function logs a message indicating that the library's stop function has been called, - * along with the current process ID. - */ -extern "C" __attribute__((visibility("default"))) void datacrumbs_stop() { - int pid = getpid(); - DC_LOG_INFO("Stop called (pid: %d)", pid); -} - -/** - * @brief Library initialization function. - * - * This function is intended to be called automatically when the library is loaded. - * It calls the datacrumbs_start function to perform any necessary startup actions. - */ -void datacrumbs_init(void) { - datacrumbs_start(); -} - -/** - * @brief Library finalization function. - * - * This function is intended to be called automatically when the library is unloaded. - * It calls the datacrumbs_stop function to perform any necessary cleanup actions. - */ -void datacrumbs_fini(void) { - datacrumbs_stop(); -} \ No newline at end of file diff --git a/src/datacrumbs/client/library.h b/src/datacrumbs/client/library.h deleted file mode 100755 index e5efcd52..00000000 --- a/src/datacrumbs/client/library.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef DATACRUMBS_LIBRARY_H -#define DATACRUMBS_LIBRARY_H - -// Expose datacrumbs_start() with default visibility for shared libraries. -// Starts the datacrumbs client. -extern "C" __attribute__((visibility("default"))) void datacrumbs_start(); - -// Expose datacrumbs_stop() with default visibility for shared libraries. -// Stops the datacrumbs client. -extern "C" __attribute__((visibility("default"))) void datacrumbs_stop(); - -// Function called automatically when the shared library is loaded. -// Used for initialization. -extern void __attribute__((constructor)) datacrumbs_init(void); - -// Function called automatically when the shared library is unloaded. -// Used for cleanup. -extern void __attribute__((destructor)) datacrumbs_fini(void); - -#endif // DATACRUMBS_LIBRARY_H \ No newline at end of file diff --git a/src/datacrumbs/common/configuration_manager.cpp b/src/datacrumbs/common/configuration_manager.cpp deleted file mode 100644 index 0d948797..00000000 --- a/src/datacrumbs/common/configuration_manager.cpp +++ /dev/null @@ -1,671 +0,0 @@ -/** - * @file configuration_manager.cpp - * @brief Implements the ConfigurationManager class for managing DataCrumbs configuration. - * - * This file contains the implementation of the ConfigurationManager class, which is responsible - * for parsing command-line arguments, loading YAML configuration files, and setting up - * configuration parameters for the DataCrumbs application. It also includes the ArgumentParser - * class for handling command-line arguments and utility functions for deriving and validating - * configuration values. - */ - -/** - * std headers - */ -#include -#include - -#include -#include -#include -#include -#include -#include -/** - * Internal headers - */ -#include -#include -#include // <-- Added logging header -#include -#include -/** - * External headers - */ -#include -#include - -namespace datacrumbs { - -// Singleton template specialization for ConfigurationManager -template <> -std::shared_ptr - datacrumbs::Singleton::instance = nullptr; -template <> -bool datacrumbs::Singleton::stop_creating_instances = false; - -/** - * YAML keys for configuration - */ -#define DC_YAML_TRACE_LOG_DIR "trace_log_dir" -#define DC_YAML_DATA_DIR "data_dir" -#define DC_YAML_CAPTURE_PROBES "capture_probes" -#define DC_YAML_USER "user" -#define DC_YAML_INCLUSION_PATH "inclusion_path" - -ArgumentParser::ArgumentParser(int argc, char** argv, ExecutableType exe_type) { - DC_LOG_TRACE("[ArgumentParser] Parsing command line arguments..."); - if (exe_type == ExecutableType::SIMPLE && argc < 2) { - throw std::invalid_argument("Configuration name is required as the first argument."); - } else if (exe_type == ExecutableType::DAEMON && argc < 3) { - throw std::invalid_argument( - "Executable mode (start, stop, or run) and configuration name are required as the first " - "two arguments."); - } - int start_index = 1; - if (exe_type == ExecutableType::SIMPLE) { - config_name = argv[start_index++]; - } else if (exe_type == ExecutableType::DAEMON) { - ExecutableMode exe_mode; - convert(argv[start_index++], exe_mode); - this->exe_mode = exe_mode; - config_name = argv[start_index++]; - } else { - throw std::invalid_argument("Unknown ExecutableType."); - } - - for (int i = start_index; i < argc; ++i) { - std::string arg = argv[i]; - if (arg == "--run_id" && i + 1 < argc) { - run_id = argv[++i]; - DC_LOG_DEBUG("[ArgumentParser] Run ID set to: %s", run_id->c_str()); - } else if (arg == "--trace_log_dir" && i + 1 < argc) { - trace_log_dir = argv[++i]; - DC_LOG_DEBUG("[ArgumentParser] Trace log dir set to: %s", trace_log_dir->c_str()); - } else if (arg == "--data_dir" && i + 1 < argc) { - data_dir = argv[++i]; - DC_LOG_DEBUG("[ArgumentParser] Data directory set to: %s", data_dir->c_str()); - } else if (arg == "--config_path" && i + 1 < argc) { - config_path = argv[++i]; - DC_LOG_DEBUG("[ArgumentParser] Config path set to: %s", config_path->c_str()); - } else if (arg == "--user" && i + 1 < argc) { - user = argv[++i]; - DC_LOG_DEBUG("[ArgumentParser] User set to: %s", user->c_str()); - } else if (arg == "--inclusion_path" && i + 1 < argc) { - inclusion_path = argv[++i]; - DC_LOG_DEBUG("[ArgumentParser] Inclusion path set to: %s", inclusion_path->c_str()); - } 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") { - 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 ] [--disable-mpi]", - argv[0]); - exit(0); - } else { - DC_LOG_ERROR("[ArgumentParser] Unknown argument: %s", arg.c_str()); - throw std::invalid_argument("Unknown argument: " + arg); - } - } -} - -/** - * @brief ConfigurationManager constructor. - * - * Initializes the ConfigurationManager with command-line arguments, loads the YAML configuration - * file, parses it, and sets up the necessary configurations. Also derives and validates - * configurations. - * - * @param argc Number of command-line arguments - * @param argv Array of command-line argument strings - */ -ConfigurationManager::ConfigurationManager(int argc, char** argv, bool print, - ExecutableType exe_type) - : path(DATACRUMBS_CONFIG_PATH), - exe_mode(ExecutableMode::RUN), - name("default"), - trace_log_dir(DATACRUMBS_LOG_DIR), - capture_probes(), - user("datacrumbs"), - run_id("0") { - struct rlimit rl; - if (getrlimit(RLIMIT_NOFILE, &rl) == 0) { - rl.rlim_cur = rl.rlim_max; // Set soft limit to hard limit - if (setrlimit(RLIMIT_NOFILE, &rl) != 0) { - DC_LOG_WARN("[ConfigurationManager] Failed to set ulimit -n to hard limit."); - } else { - DC_LOG_DEBUG("[ConfigurationManager] Set ulimit -n to hard limit: %lu", rl.rlim_max); - } - } else { - DC_LOG_WARN("[ConfigurationManager] Failed to get current ulimit -n."); - } - if (getrlimit(RLIMIT_MEMLOCK, &rl) == 0) { - rl.rlim_cur = rl.rlim_max; // Set soft limit to hard limit - if (setrlimit(RLIMIT_MEMLOCK, &rl) != 0) { - DC_LOG_WARN("[ConfigurationManager] Failed to set ulimit -l to hard limit."); - } else { - DC_LOG_DEBUG("[ConfigurationManager] Set ulimit -l to hard limit: %lu", rl.rlim_max); - } - } else { - DC_LOG_WARN("[ConfigurationManager] Failed to get current ulimit -l."); - } - // Set ulimit -c (core file size) to its hard limit - if (getrlimit(RLIMIT_CORE, &rl) == 0) { - rl.rlim_cur = rl.rlim_max; // Set soft limit to hard limit - if (setrlimit(RLIMIT_CORE, &rl) != 0) { - DC_LOG_WARN("[ConfigurationManager] Failed to set ulimit -c to hard limit."); - } else { - DC_LOG_DEBUG("[ConfigurationManager] Set ulimit -c to hard limit: %lu", rl.rlim_max); - } - } else { - DC_LOG_WARN("[ConfigurationManager] Failed to get current ulimit -c."); - } - DC_LOG_TRACE("[ConfigurationManager] Initializing with arguments..."); - ArgumentParser parser(argc, argv, exe_type); - this->name = parser.config_name; - // Override config path if provided as argument - if (parser.config_path) { - this->path = *parser.config_path; - DC_LOG_DEBUG("[ConfigurationManager] Config path overridden by argument: %s", - this->path.string().c_str()); - } - YAML::Node config; - std::filesystem::path config_path = this->path / (this->name + ".yaml"); - DC_LOG_DEBUG("[ConfigurationManager] Loading configuration file: %s", - config_path.string().c_str()); - try { - config = YAML::LoadFile(config_path.string()); - DC_LOG_DEBUG("[ConfigurationManager] Configuration file loaded successfully."); - } catch (const YAML::ParserException& e) { - DC_LOG_ERROR("[ConfigurationManager] Failed to parse configuration file: %s", - config_path.string().c_str()); - throw std::runtime_error("Failed to parse configuration file: " + config_path.string()); - } catch (const YAML::BadFile& e) { - DC_LOG_ERROR("[ConfigurationManager] Failed to load configuration file: %s", - config_path.string().c_str()); - throw std::runtime_error("Failed to load configuration file: " + config_path.string()); - } - - // Parse YAML configuration if loaded successfully - if (config) { - DC_LOG_TRACE("[ConfigurationManager] Parsing configuration YAML..."); - // Parse trace log directory from YAML - if (config[DC_YAML_TRACE_LOG_DIR]) { - this->trace_log_dir = config[DC_YAML_TRACE_LOG_DIR].as(); - DC_LOG_DEBUG("[ConfigurationManager] Trace log dir set from config: %s", - this->trace_log_dir.string().c_str()); - } - // Parse data directory from YAML or use default - if (config[DC_YAML_DATA_DIR]) { - this->data_dir = config[DC_YAML_DATA_DIR].as(); - DC_LOG_DEBUG("[ConfigurationManager] Data directory set from config: %s", - this->data_dir.string().c_str()); - } else { - this->data_dir = DATACRUMBS_DATA_DIR; - DC_LOG_DEBUG("[ConfigurationManager] Data directory not specified, using default: %s", - this->data_dir.string().c_str()); - } - // Parse capture probes from YAML - if (config[DC_YAML_CAPTURE_PROBES]) { - DC_LOG_TRACE("[ConfigurationManager] Parsing capture probes..."); - for (const auto& probe_node : config[DC_YAML_CAPTURE_PROBES]) { - if (probe_node["type"]) { - CaptureType type; - convert(probe_node["type"].as(), type); - - 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: { - auto header_probe = std::make_shared(); - if (probe_node["file"]) { - header_probe->file = probe_node["file"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Added HEADER probe: %s", - header_probe->file.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] Header name missing for HEADER capture type."); - throw std::invalid_argument("Header name is required for HEADER capture type."); - } - probe = header_probe; - break; - } - case CaptureType::BINARY: { - auto binary_probe = std::make_shared(); - if (probe_node["file"]) { - binary_probe->file = probe_node["file"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Added BINARY probe: %s", - binary_probe->file.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] Binary path missing for BINARY capture type."); - throw std::invalid_argument("Binary path is required for BINARY capture type."); - } - if (probe_node["include_offsets"]) { - binary_probe->include_offsets = probe_node["include_offsets"].as(); - DC_LOG_DEBUG("[ConfigurationManager] BINARY include_offsets set to: %s", - binary_probe->include_offsets ? "true" : "false"); - } else { - DC_LOG_DEBUG( - "[ConfigurationManager] No include_offsets provided for BINARY, using default: " - "false"); - binary_probe->include_offsets = false; // Default value - } - probe = binary_probe; - break; - } - case CaptureType::KSYM: { - probe = std::make_shared(); - DC_LOG_DEBUG("[ConfigurationManager] Added KSYM probe."); - if (probe_node["regex"]) { - probe->regex = probe_node["regex"].as(); - DC_LOG_DEBUG("[ConfigurationManager] KSYM probe regex set: %s", - probe->regex.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] Regex missing for KSYM capture type."); - throw std::invalid_argument("Regex is required for KSYM capture type."); - } - break; - } - case CaptureType::USDT: { - auto usdt_probe = std::make_shared(); - if (probe_node["binary_path"]) { - usdt_probe->binary_path = probe_node["binary_path"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Added USDT probe: %s", - usdt_probe->binary_path.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] Binary path missing for USDT capture type."); - throw std::invalid_argument("Binary path is required for USDT capture type."); - } - if (probe_node["provider"]) { - usdt_probe->provider = probe_node["provider"].as(); - DC_LOG_DEBUG("[ConfigurationManager] USDT provider set: %s", - usdt_probe->provider.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] Provider missing for USDT capture type."); - throw std::invalid_argument("Provider is required for USDT capture type."); - } - probe = usdt_probe; - break; - } - case CaptureType::CUSTOM: { - auto custom_probe = std::make_shared(); - if (probe_node["file"]) { - custom_probe->bpf_file = probe_node["file"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Added CUSTOM probe: %s", - custom_probe->bpf_file.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] BPF file missing for CUSTOM capture type."); - throw std::invalid_argument("BPF file is required for CUSTOM capture type."); - } - if (probe_node["probes"]) { - custom_probe->probe_file = probe_node["probes"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Custom probe file set: %s", - custom_probe->probe_file.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] Probe file missing for CUSTOM capture type."); - throw std::invalid_argument("Probe file is required for CUSTOM capture type."); - } - if (probe_node["start_event_id"]) { - custom_probe->start_event_id = probe_node["start_event_id"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Custom start event ID set: %lu", - custom_probe->start_event_id); - } else { - DC_LOG_DEBUG( - "[ConfigurationManager] No start event ID provided, using default: %lu", - custom_probe->start_event_id); - } - if (probe_node["process_header"]) { - custom_probe->process_header = probe_node["process_header"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Custom process header set: %s", - custom_probe->process_header.c_str()); - } else { - DC_LOG_DEBUG("[ConfigurationManager] No process header provided, using default."); - } - if (probe_node["event_type"]) { - custom_probe->event_type = probe_node["event_type"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Custom event type set: %lu", - custom_probe->event_type); - } else { - DC_LOG_DEBUG("[ConfigurationManager] No event type provided, using default: 1"); - custom_probe->event_type = 1; // Default event type - } - probe = custom_probe; - break; - } - default: - DC_LOG_ERROR("[ConfigurationManager] Unknown CaptureType: %s", - probe_node["type"].as().c_str()); - 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(); - convert(probe_type_str, probe->probe_type); - DC_LOG_DEBUG("[ConfigurationManager] Probe type set: %s", probe_type_str.c_str()); - } else { - DC_LOG_ERROR("[ConfigurationManager] Probe type missing for capture type: %s", - probe_node["type"].as().c_str()); - throw std::invalid_argument("Probe type is required for capture type: " + - probe_node["type"].as()); - } - // Parse probe name - if (probe_node["name"]) { - probe->name = probe_node["name"].as(); - } else { - DC_LOG_ERROR("[ConfigurationManager] Probe name missing for capture type: %s", - probe_node["type"].as().c_str()); - throw std::invalid_argument("Probe name is required for capture type: " + - probe_node["type"].as()); - } - // Parse optional regex - if (probe_node["regex"]) { - probe->regex = probe_node["regex"].as(); - DC_LOG_DEBUG("[ConfigurationManager] Probe regex set: %s", probe->regex.c_str()); - } else { - DC_LOG_TRACE("[ConfigurationManager] No regex provided for probe: %s", - probe->name.c_str()); - } - // Add probe to the list - if (probe) { - this->capture_probes.push_back(probe); - } - } - } - } - // Parse user from YAML or use default - if (config[DC_YAML_USER]) { - this->user = config[DC_YAML_USER].as(); - DC_LOG_DEBUG("[ConfigurationManager] User set from config: %s", this->user.c_str()); - } else { - DC_LOG_DEBUG("[ConfigurationManager] No user specified in config, using default: %s", - this->user.c_str()); - } - // Parse inclusion path from YAML - if (config[DC_YAML_INCLUSION_PATH]) { - this->inclusion_path = config[DC_YAML_INCLUSION_PATH].as(); - DC_LOG_DEBUG("[ConfigurationManager] Inclusion path set from config: %s", - this->inclusion_path.c_str()); - } - // Override run_id if provided as argument - if (parser.run_id) { - this->run_id = *parser.run_id; - DC_LOG_DEBUG("[ConfigurationManager] Run ID overridden by argument: %s", - this->run_id.c_str()); - } - if (parser.exe_mode) { - this->exe_mode = *parser.exe_mode; - DC_LOG_DEBUG("[ConfigurationManager] Executable mode set from argument: %d", - static_cast(this->exe_mode)); - } - // Override config path if provided as argument - if (parser.data_dir) { - this->data_dir = *parser.data_dir; - DC_LOG_DEBUG("[ConfigurationManager] Data directory overridden by argument: %s", - this->data_dir.string().c_str()); - } - // Override trace log dir if provided as argument - if (parser.trace_log_dir) { - this->trace_log_dir = *parser.trace_log_dir; - DC_LOG_DEBUG("[ConfigurationManager] Trace log dir overridden by argument: %s", - parser.trace_log_dir->c_str()); - } - // Override user if provided as argument - if (parser.user) { - this->user = *parser.user; - DC_LOG_DEBUG("[ConfigurationManager] User overridden by argument: %s", parser.user->c_str()); - } else { - DC_LOG_DEBUG("[ConfigurationManager] No user specified, using default: %s", - this->user.c_str()); - } - // Override inclusion path if provided as argument - if (parser.inclusion_path) { - this->inclusion_path = *parser.inclusion_path; - DC_LOG_DEBUG("[ConfigurationManager] Inclusion path overridden by argument: %s", - parser.inclusion_path->c_str()); - } - // Override log dir if provided as argument - if (parser.log_dir) { - this->log_dir = *parser.log_dir; - DC_LOG_DEBUG("[ConfigurationManager] Log directory overridden by argument: %s", - parser.log_dir->c_str()); - } else { - this->log_dir = std::filesystem::current_path(); - DC_LOG_DEBUG("[ConfigurationManager] No log directory specified, using default: %s", - this->log_dir.c_str()); - } - // Override disable_mpi if provided as argument - if (parser.disable_mpi) { - this->disable_mpi = *parser.disable_mpi; - DC_LOG_DEBUG("[ConfigurationManager] disable_mpi overridden by argument: %s", - this->disable_mpi ? "true" : "false"); - } else { - this->disable_mpi = false; - DC_LOG_DEBUG("[ConfigurationManager] No disable_mpi specified, using default: false"); - } - } - // Derive additional configuration values and validate - derive_configurations(); - validate_configurations(); - if (print) { - print_configurations(); - DC_LOG_INFO("[ConfigurationManager] Initialization complete."); - } -}; - -void ConfigurationManager::print_configurations() { - // Log final configuration for debugging - DC_LOG_INFO("[ConfigurationManager] Final configuration:"); - DC_LOG_INFO("[ConfigurationManager] Capture probes loaded: %zu", this->capture_probes.size()); - DC_LOG_INFO("[ConfigurationManager] Category map loaded with %zu entries.", category_map.size()); - DC_LOG_INFO(" Path: %s", this->path.string().c_str()); - DC_LOG_INFO(" Name: %s", this->name.c_str()); - DC_LOG_INFO(" Trace log dir: %s", this->trace_log_dir.string().c_str()); - DC_LOG_INFO(" Trace file path: %s", this->trace_file_path.string().c_str()); - DC_LOG_INFO(" Data dir: %s", this->data_dir.string().c_str()); - DC_LOG_INFO(" Probe file path: %s", this->probe_file_path.string().c_str()); - DC_LOG_INFO(" Probe exclusion file path: %s", this->probe_exclusion_file_path.string().c_str()); - DC_LOG_INFO(" Probe invalid file path: %s", this->probe_invalid_file_path.string().c_str()); - DC_LOG_INFO(" Manual probe path: %s", this->manual_probe_path.string().c_str()); - DC_LOG_INFO(" Category map path: %s", this->category_map_path.string().c_str()); - DC_LOG_INFO(" Profiling interval: %f", DATACRUMBS_TIME_INTERVAL_NS / 1e9); - DC_LOG_INFO(" Runtime User: %s", this->user.c_str()); - DC_LOG_INFO(" Install user: %s", DATACRUMBS_INSTALL_USER); - DC_LOG_INFO(" Hostname: %s", this->hostname.c_str()); - DC_LOG_INFO(" Capture probes: %d", static_cast(this->capture_probes.size())); - if (DATACRUMBS_MODE == 1) { - DC_LOG_INFO(" Mode: Tracing"); - } else if (DATACRUMBS_MODE == 2) { - DC_LOG_INFO(" Mode: Profiling"); - } - if (this->inclusion_path.empty()) { - DC_LOG_INFO(" Inclusion path: Not set"); - } else { - DC_LOG_INFO(" Inclusion path: %s", this->inclusion_path.c_str()); - } - for (const auto& probe : this->capture_probes) { - DC_LOG_INFO(" Probe: name=%s, type=%d, probe_type=%d, regex=%s", probe->name.c_str(), - static_cast(probe->type), static_cast(probe->probe_type), - probe->regex.c_str()); - } -} - -/** - * @brief Derives additional configuration values based on current settings. - * - * This function generates file paths for trace files, probe files, exclusion files, - * and category maps based on the hostname, process ID, timestamp, and user. - */ -void ConfigurationManager::derive_configurations() { - DC_LOG_TRACE("[ConfigurationManager] Deriving configurations..."); - DC_LOG_DEBUG("[ConfigurationManager] Process ID: %d for rank: %d", getpid(), this->mpi_rank); - - // Use this->hostname (std::string) instead of local char array - std::string hostname; - char hostname_buf[256] = {0}; - if (gethostname(hostname_buf, sizeof(hostname_buf) - 1) != 0) { - DC_LOG_ERROR("[ConfigurationManager] Failed to get hostname."); - throw std::runtime_error("Failed to get hostname."); - } - hostname = hostname_buf; - this->hostname = hostname; - DC_LOG_DEBUG("[ConfigurationManager] Hostname: %s for rank: %d", this->hostname.c_str(), - this->mpi_rank); - - std::string generated_file_suffix; - if (this->disable_mpi) { - generated_file_suffix = this->user + "-" + this->run_id + "-" + hostname + "-" + this->name; - } else { - generated_file_suffix = this->user + "-" + this->run_id + "-" + std::to_string(this->mpi_rank) + - "-" + std::to_string(this->mpi_size) + "-" + this->name; - } - - std::string trace_file_name = "trace-" + generated_file_suffix + ".pfw.gz"; - this->trace_file_path = this->trace_log_dir / trace_file_name; - DC_LOG_DEBUG("[ConfigurationManager] Trace file path: %s for rank: %d", - this->trace_file_path.string().c_str(), this->mpi_rank); - - std::string hostname_str(this->name); - // Remove digits from hostname for file naming - hostname_str.erase(std::remove_if(hostname_str.begin(), hostname_str.end(), ::isdigit), - hostname_str.end()); - DC_LOG_DEBUG("[ConfigurationManager] Hostname (digits removed): %s", hostname_str.c_str()); - - std::string lookup_file_suffix = std::string(DATACRUMBS_INSTALL_USER) + "-" + hostname_str; - - // Construct probe file name: probes-DATACRUMBS_INSTALL_USER-host.json - std::string probe_file_name = "probes-" + lookup_file_suffix + ".json"; - this->probe_file_path = this->data_dir / probe_file_name; - if (this->mpi_rank == 0) - DC_LOG_DEBUG("[ConfigurationManager] Probe file path: %s", - this->probe_file_path.string().c_str()); - - // Construct probe exclusion file name: probes-exclusion-DATACRUMBS_INSTALL_USER-host.json - std::string probe_exclusion_file_name = "probes-exclusion-" + lookup_file_suffix + ".json"; - this->probe_exclusion_file_path = this->data_dir / probe_exclusion_file_name; - if (this->mpi_rank == 0) - DC_LOG_DEBUG("[ConfigurationManager] Probe exclusion file path: %s", - this->probe_exclusion_file_path.string().c_str()); - - // Construct probe invalid file name: probes-invalid-DATACRUMBS_INSTALL_USER-host.json - std::string probe_invalid_file_name = "probes-invalid-" + lookup_file_suffix + ".json"; - this->probe_invalid_file_path = this->data_dir / probe_invalid_file_name; - if (this->mpi_rank == 0) - DC_LOG_DEBUG("[ConfigurationManager] Probe invalid path: %s", - this->probe_invalid_file_path.string().c_str()); - - // Construct categories file name: categories-DATACRUMBS_INSTALL_USER-host.json - std::string categories_file_name = "categories-" + lookup_file_suffix + ".json"; - this->category_map_path = this->data_dir / categories_file_name; - if (this->mpi_rank == 0) - DC_LOG_DEBUG("[ConfigurationManager] Category map path: %s", - this->category_map_path.string().c_str()); - - // Construct manual probe file name: manual-probes-DATACRUMBS_INSTALL_USER-host.json - std::string manual_probe_file_name = "manual-probes-" + lookup_file_suffix + ".json"; - this->manual_probe_path = this->data_dir / manual_probe_file_name; - if (this->mpi_rank == 0) - DC_LOG_DEBUG("[ConfigurationManager] Manual probe path: %s", - this->manual_probe_path.string().c_str()); - - // Load category_map from JSON file using json-c - std::string category_json_path = category_map_path.string(); - if (!category_json_path.empty() && std::filesystem::exists(category_json_path)) { - // Read file into string - std::ifstream file(category_json_path); - if (!file) { - DC_LOG_ERROR("Failed to open category map file: %s for rank: %d", category_json_path.c_str(), - this->mpi_rank); - throw std::invalid_argument("Failed to open category map file: " + category_json_path); - } - std::string json_str((std::istreambuf_iterator(file)), std::istreambuf_iterator()); - file.close(); - - // Parse JSON - struct json_object* root = json_tokener_parse(json_str.c_str()); - if (!root) { - DC_LOG_ERROR("Failed to parse JSON from %s for rank: %d", category_json_path.c_str(), - this->mpi_rank); - throw std::invalid_argument("Failed to parse JSON from: " + category_json_path); - } - - // Expecting a JSON object with event_id as keys - json_object_object_foreach(root, key, val) { - uint64_t event_id = std::stoull(key); - const char* probe_name = nullptr; - const char* function_name = nullptr; - - struct json_object* probe_obj = nullptr; - struct json_object* func_obj = nullptr; - - if (json_object_object_get_ex(val, "probe_name", &probe_obj) && - json_object_object_get_ex(val, "function_name", &func_obj)) { - probe_name = json_object_get_string(probe_obj); - function_name = json_object_get_string(func_obj); - category_map[event_id] = - std::make_pair(probe_name ? probe_name : "", function_name ? function_name : ""); - } - } - json_object_put(root); - } else { - DC_LOG_WARN("[ConfigurationManager] Category map file does not exist: %s for rank: %d", - category_json_path.c_str(), this->mpi_rank); - } -} - -/** - * @brief Validates the loaded and derived configuration values. - * - * Checks for the presence of capture probes and the existence of required directories. - * Throws exceptions if validation fails. - */ -void ConfigurationManager::validate_configurations() { - if (this->capture_probes.empty()) { - DC_LOG_ERROR( - "[ConfigurationManager] No capture probes defined in the configuration for rank: %d.", - this->mpi_rank); - throw std::invalid_argument("At least one capture probe must be defined."); - } - if (this->data_dir.empty() || !std::filesystem::exists(this->data_dir)) { - DC_LOG_ERROR("[ConfigurationManager] Data directory does not exist: %s for rank: %d.", - this->data_dir.string().c_str(), this->mpi_rank); - throw std::runtime_error("Data directory does not exist: " + this->data_dir.string()); - } - if (this->trace_log_dir.empty() || - !std::filesystem::exists(std::filesystem::path(this->trace_log_dir))) { - DC_LOG_ERROR("[ConfigurationManager] Trace log directory does not exist: %s for rank: %d.", - this->trace_log_dir.string().c_str(), this->mpi_rank); - throw std::runtime_error("Trace log directory does not exist: " + - std::filesystem::path(this->trace_log_dir).string()); - } -} - -void ConfigurationManager::load_mpi_configurations() { - if (this->disable_mpi) { - this->mpi_rank = 0; - this->mpi_size = 1; - DC_LOG_DEBUG("[ConfigurationManager] MPI disabled, setting rank to 0 and size to 1."); - } else { - DC_LOG_DEBUG("[ConfigurationManager] MPI enabled, initializing rank and size."); - int initialized; - int status = MPI_Initialized(&initialized); - if (status == MPI_SUCCESS && initialized == true) { - MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); - MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); - } - } -} - -} // namespace datacrumbs diff --git a/src/datacrumbs/common/configuration_manager.h b/src/datacrumbs/common/configuration_manager.h deleted file mode 100644 index 53384eb8..00000000 --- a/src/datacrumbs/common/configuration_manager.h +++ /dev/null @@ -1,167 +0,0 @@ -#ifndef DATACRUMBS_COMMON_CONFIGURATION_MANAGER_H__ -#define DATACRUMBS_COMMON_CONFIGURATION_MANAGER_H__ - -/** - * @file configuration_manager.h - * @brief Internal header for the ConfigurationManager class. - * - * This file defines the ConfigurationManager class, which is responsible for - * managing, validating, and deriving configuration settings for the DataCrumbs library. - */ -// include first -#include -// other headers -#include -#include -#include - -// std headers -#include -#include -#include -#include -#include -#include - -namespace datacrumbs { - -/** - * @class ConfigurationManager - * @brief Manages configuration settings for the DataCrumbs library. - * - * The ConfigurationManager class handles loading, validating, and deriving - * configuration settings based on command-line arguments. It ensures that all - * required configurations are set and valid before the library is used. - */ -class ConfigurationManager { - public: - // Path to the configuration file provided by the user - std::filesystem::path path; - - // Directory for data storage - std::filesystem::path data_dir; - - // Type of executable (SIMPLE or DAEMON) - ExecutableMode exe_mode; - - // Name of the configuration file - std::string name; - - // Directory where trace logs will be stored - std::filesystem::path trace_log_dir; - - // List of capture probes to be used in the session - std::vector> capture_probes; - - // User associated with the configuration - std::string user; - - std::string inclusion_path; // Path to the inclusion file - - std::string log_dir; // Directory for log files - - // Derived configuration: path to the trace file - std::filesystem::path trace_file_path; - - // Derived configuration: path to the probe file - std::filesystem::path probe_file_path; - - // Derived configuration: path to the probe exclusion file - std::filesystem::path probe_exclusion_file_path; - - // Derived configuration: path to the probe invalid file - std::filesystem::path probe_invalid_file_path; - - // Derived configuration: path to the category map file - std::filesystem::path category_map_path; - - // Derived configuration: path to the manual probe file - std::filesystem::path manual_probe_path; - - // Derived configuration: category map for event IDs - std::unordered_map> category_map; - - // Derived configuration: current hostname - std::string hostname; - - // Unique run identifier - std::string run_id; - - // Flag to disable MPI usage - bool disable_mpi; - - // MPI rank of the current process - int mpi_rank{0}; - - // MPI size (total number of processes) - int mpi_size{1}; - - /** - * @brief Constructor that initializes the ConfigurationManager with command-line arguments. - * - * Parses the command-line arguments to set up the configuration, derives necessary - * configurations, and validates them. If any required configuration is missing or invalid, - * logs an error and exits the program. - * - * @param argc Number of command-line arguments - * @param argv Array of command-line argument strings - */ - ConfigurationManager(int argc, char** argv, bool print = true, - ExecutableType exe_type = ExecutableType::SIMPLE); - - ConfigurationManager() { - // Default constructor for internal use - } - - // For debugging: prints all configuration values to the log - void print_configurations(); - - // Loads MPI-related configurations - void load_mpi_configurations(); - - private: - /** - * @brief Derives configurations based on the provided command-line arguments. - * - * Sets up paths and other configurations based on the mode of operation. - */ - void derive_configurations(); - - /** - * @brief Validates the derived configurations. - * - * Checks if all required configurations are set and valid. If any configuration is invalid, - * logs an error and exits the program. This ensures correct operation of the DataCrumbs library. - */ - void validate_configurations(); - - // Loads the category map from the specified JSON file - void load_category_map(); -}; - -class ArgumentParser { - public: - std::string config_name; ///< Name of the configuration to load - std::optional trace_log_dir; ///< Optional trace log directory - std::optional config_path; ///< Optional configuration file path - std::optional data_dir; ///< Optional data directory - std::optional user; ///< Optional user argument - std::optional skip_event_threshold_us; ///< Optional skip event threshold - std::optional inclusion_path; ///< Optional inclusion path - std::optional log_dir; ///< Optional log directory - std::optional exe_mode; ///< Optional executable mode - std::optional run_id; ///< Optional run_id - std::optional disable_mpi; ///< Optional disable_mpi flag - - /** - * @brief Constructor that parses command-line arguments. - * @param argc Number of command-line arguments - * @param argv Array of command-line argument strings - * @throws std::invalid_argument if required arguments are missing or unknown arguments are found - */ - ArgumentParser(int argc, char** argv, ExecutableType exe_type = ExecutableType::SIMPLE); -}; - -} // namespace datacrumbs - -#endif // DATACRUMBS_COMMON_CONFIGURATION_MANAGER_H__ diff --git a/src/datacrumbs/common/data_structures.h b/src/datacrumbs/common/data_structures.h index b7d299d3..79fd57d3 100644 --- a/src/datacrumbs/common/data_structures.h +++ b/src/datacrumbs/common/data_structures.h @@ -12,9 +12,50 @@ #include // std headers #include +#include #include namespace datacrumbs { +struct ProbeArgCaptureSpec { + unsigned int index = 0; + unsigned int num_bytes = 0; + bool is_pointer = false; + std::string label; + std::string c_type; + + json_object* toJson() const { + json_object* j = json_object_new_object(); + json_object_object_add(j, "index", json_object_new_int(index)); + json_object_object_add(j, "num_bytes", json_object_new_int(num_bytes)); + json_object_object_add(j, "is_pointer", json_object_new_boolean(is_pointer)); + json_object_object_add(j, "label", json_object_new_string(label.c_str())); + json_object_object_add(j, "c_type", json_object_new_string(c_type.c_str())); + return j; + } + + static ProbeArgCaptureSpec fromJson(const json_object* j) { + ProbeArgCaptureSpec spec; + json_object* obj = nullptr; + if (json_object_object_get_ex(j, "index", &obj)) spec.index = json_object_get_int(obj); + if (json_object_object_get_ex(j, "num_bytes", &obj)) spec.num_bytes = json_object_get_int(obj); + if (json_object_object_get_ex(j, "is_pointer", &obj)) { + spec.is_pointer = json_object_get_boolean(obj); + } + if (json_object_object_get_ex(j, "label", &obj) && obj) + spec.label = json_object_get_string(obj); + if (json_object_object_get_ex(j, "c_type", &obj) && obj) + spec.c_type = json_object_get_string(obj); + return spec; + } +}; + +struct RuntimeEventMetadata { + ProbeType probe_type = ProbeType::KPROBE; + std::string probe_name; + std::string function_name; + std::vector arg_specs; +}; + struct EventWithId { char event_type; unsigned long long index; @@ -64,13 +105,20 @@ class Probe { // Default constructor Probe() {} // Copy constructor - Probe(const Probe& other) : type(other.type), name(other.name), functions(other.functions) { + Probe(const Probe& other) + : type(other.type), + name(other.name), + functions(other.functions), + function_arguments(other.function_arguments) { DC_LOG_TRACE("Probe copy constructor called"); } // Move constructor Probe(Probe&& other) noexcept - : type(other.type), name(std::move(other.name)), functions(std::move(other.functions)) { + : type(other.type), + name(std::move(other.name)), + functions(std::move(other.functions)), + function_arguments(std::move(other.function_arguments)) { DC_LOG_TRACE("Probe move constructor called"); } // Constructor initializing the probe type @@ -79,6 +127,8 @@ class Probe { ProbeType type; // The type of probe (e.g., SYSCALLS, KPROBE, etc.) std::string name; // Name of the probe std::vector functions; // List of functions or arguments for the probe + std::unordered_map> + function_arguments; // Optional per-function runtime arg capture specification // Validates the probe's configuration virtual bool validate() const { @@ -112,6 +162,18 @@ class Probe { json_object_object_add(j, "functions", funcs); + if (!function_arguments.empty()) { + json_object* jfunction_arguments = json_object_new_object(); + for (const auto& [function_name, arg_specs] : function_arguments) { + json_object* jarg_specs = json_object_new_array(); + for (const auto& arg_spec : arg_specs) { + json_object_array_add(jarg_specs, arg_spec.toJson()); + } + json_object_object_add(jfunction_arguments, function_name.c_str(), jarg_specs); + } + json_object_object_add(j, "function_arguments", jfunction_arguments); + } + return j; } @@ -130,8 +192,36 @@ class Probe { if (func) p.functions.push_back(json_object_get_string(func)); } } + + json_object* function_arguments_obj = json_object_object_get(j, "function_arguments"); + if (function_arguments_obj && + json_object_get_type(function_arguments_obj) == json_type_object) { + json_object_object_foreach(function_arguments_obj, function_name, arg_specs_obj) { + if (!arg_specs_obj || json_object_get_type(arg_specs_obj) != json_type_array) { + continue; + } + std::vector arg_specs; + const int spec_len = json_object_array_length(arg_specs_obj); + for (int i = 0; i < spec_len; ++i) { + json_object* arg_spec_obj = json_object_array_get_idx(arg_specs_obj, i); + if (!arg_spec_obj || json_object_get_type(arg_spec_obj) != json_type_object) { + continue; + } + arg_specs.push_back(ProbeArgCaptureSpec::fromJson(arg_spec_obj)); + } + p.function_arguments[function_name] = std::move(arg_specs); + } + } return p; } + + const std::vector* getArgSpecs(const std::string& function_name) const { + const auto it = function_arguments.find(function_name); + if (it == function_arguments.end()) { + return nullptr; + } + return &it->second; + } }; // Probe for system calls @@ -162,6 +252,7 @@ struct SysCallProbe : public Probe { p.type = base.type; p.name = base.name; p.functions = base.functions; + p.function_arguments = base.function_arguments; return p; } }; @@ -194,6 +285,7 @@ struct KProbe : public Probe { p.type = base.type; p.name = base.name; p.functions = base.functions; + p.function_arguments = base.function_arguments; return p; } }; @@ -238,6 +330,7 @@ struct UProbe : public Probe { p.type = base.type; p.name = base.name; p.functions = base.functions; + p.function_arguments = base.function_arguments; json_object* bin_obj = json_object_object_get(j, "binary_path"); if (bin_obj) p.binary_path = json_object_get_string(bin_obj); @@ -293,6 +386,7 @@ struct USDTProbe : public Probe { p.type = base.type; p.name = base.name; p.functions = base.functions; + p.function_arguments = base.function_arguments; json_object* bin_obj = json_object_object_get(j, "binary_path"); if (bin_obj) p.binary_path = json_object_get_string(bin_obj); @@ -367,6 +461,7 @@ struct CustomProbe : public Probe { p.type = base.type; p.name = base.name; p.functions = base.functions; + p.function_arguments = base.function_arguments; json_object* bpf_obj = json_object_object_get(j, "bpf_path"); if (bpf_obj) p.bpf_path = json_object_get_string(bpf_obj); @@ -394,6 +489,45 @@ class CaptureProbe { 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 + std::unordered_map> + function_arguments; // Optional per-function arg capture specification from YAML + + const std::vector* getArgSpecs(const std::string& function_name) const { + auto lookup = [this](const std::string& key) -> const std::vector* { + const auto it = function_arguments.find(key); + if (it == function_arguments.end()) { + return nullptr; + } + return &it->second; + }; + + if (const auto* exact = lookup(function_name)) { + return exact; + } + + const auto offset_pos = function_name.find(':'); + const std::string base_name = + (offset_pos == std::string::npos) ? function_name : function_name.substr(0, offset_pos); + if (base_name != function_name) { + if (const auto* base = lookup(base_name)) { + return base; + } + } + + if (probe_type == ProbeType::SYSCALLS) { + if (const auto* prefixed = lookup("sys_" + base_name)) { + return prefixed; + } + if (const auto* x64_prefixed = lookup("__x64_sys_" + base_name)) { + return x64_prefixed; + } + } + + if (const auto* wildcard = lookup("*")) { + return wildcard; + } + return lookup("default"); + } }; // Capture probe for kernel symbols diff --git a/src/datacrumbs/common/enumerations.h b/src/datacrumbs/common/enumerations.h index 8782bb76..840a9dd5 100644 --- a/src/datacrumbs/common/enumerations.h +++ b/src/datacrumbs/common/enumerations.h @@ -12,51 +12,12 @@ namespace datacrumbs { -enum class ExecutableType : uint8_t { - SIMPLE = 0, - DAEMON = 1, -}; - -enum class ExecutableMode : uint8_t { RUN = 0, START = 1, STOP = 2 }; - -static std::string to_string(ExecutableMode mode) { - switch (mode) { - case ExecutableMode::RUN: - return "run"; - case ExecutableMode::START: - return "start"; - case ExecutableMode::STOP: - return "stop"; - default: - return "unknown"; - } -} - // Enum for different operating modes enum class Mode : uint8_t { PROFILER = 0, TRACER = 1, }; -inline void convert(const std::string& s, ExecutableMode& type) { - DC_LOG_TRACE("Entering convert for ExecutableMode with input: %s", s.c_str()); - if (s == "run") { - type = ExecutableMode::RUN; - DC_LOG_DEBUG("Converted string '%s' to ExecutableMode::RUN", s.c_str()); - } else if (s == "start") { - type = ExecutableMode::START; - DC_LOG_DEBUG("Converted string '%s' to ExecutableMode::START", s.c_str()); - } else if (s == "stop") { - type = ExecutableMode::STOP; - DC_LOG_DEBUG("Converted string '%s' to ExecutableMode::STOP", s.c_str()); - } else { - DC_LOG_ERROR("Unknown ExecutableMode string: '%s'", s.c_str()); - throw std::invalid_argument("Unknown ExecutableMode: " + s + - ". Valid types are: run, start, or stop."); - } - DC_LOG_TRACE("Exiting convert for ExecutableMode"); -} - // Converts string to Mode enum. Throws if invalid. // DC_LOG_TRACE can be used to trace function entry/exit. inline void convert(const std::string& s, Mode& type) { diff --git a/src/datacrumbs/common/logging.h b/src/datacrumbs/common/logging.h index f5d83d1e..68a45009 100644 --- a/src/datacrumbs/common/logging.h +++ b/src/datacrumbs/common/logging.h @@ -1,14 +1,16 @@ #pragma once -// include first + #include -// std headers + #include -#include -#include +#include +#include #include #include +#include +#include +#include -// Logging levels #define LOG_LEVEL_PRINT 0 #define LOG_LEVEL_ERROR 1 #define LOG_LEVEL_WARN 2 @@ -16,14 +18,26 @@ #define LOG_LEVEL_DEBUG 4 #define LOG_LEVEL_TRACE 5 -#include -#include - namespace datacrumbs::logging_internal { +inline constexpr std::chrono::seconds kDefaultProgressLogInterval{5}; + +struct ProgressState { + std::chrono::steady_clock::time_point start_time; + std::chrono::steady_clock::time_point last_emit_time; + size_t last_value = 0; + bool initialized = false; +}; + +struct ProgressSnapshot { + bool should_emit = false; + double elapsed_seconds = 0.0; + double rate = 0.0; +}; + inline FILE* get_log_file() { #ifdef LOG_TO_FILE - static FILE* file = fopen(LOG_FILE_PATH, "a"); + static FILE* file = std::fopen(LOG_FILE_PATH, "a"); return file; #else return stdout; @@ -35,86 +49,215 @@ inline std::mutex& get_log_mutex() { return mtx; } -// Default formatter: just joins messages with spaces -inline std::string default_formatter(const std::vector& messages) { - std::string result; - for (size_t i = 0; i < messages.size(); ++i) { - if (i > 0) result += " "; - result += messages[i]; - } - return result; +inline std::mutex& get_progress_mutex() { + static std::mutex mtx; + return mtx; } -// Variadic template to accept any number of messages -inline void log_message_fmt(const char* level, const char* fmt, ...) { - FILE* out = get_log_file(); +inline std::unordered_map& get_progress_states() { + static std::unordered_map states; + return states; +} - constexpr size_t buf_size = 1024; - char buffer[buf_size]; +inline std::string format_message(const char* fmt, va_list args) { + va_list args_copy; + va_copy(args_copy, args); + const int required = std::vsnprintf(nullptr, 0, fmt, args_copy); + va_end(args_copy); - va_list args; - va_start(args, fmt); - vsnprintf(buffer, buf_size, fmt, args); - va_end(args); + if (required <= 0) { + return {}; + } - fprintf(out, "[%s] %s\n", level, buffer); - fflush(out); + std::vector buffer(static_cast(required) + 1); + std::vsnprintf(buffer.data(), buffer.size(), fmt, args); + return std::string(buffer.data(), static_cast(required)); } -inline void log_message_fmt_no_new_line(const char* level, const char* fmt, ...) { +inline void write_log_line(const char* level, const std::string& message) { + std::lock_guard lock(get_log_mutex()); FILE* out = get_log_file(); + std::fprintf(out, "[%s] %s\n", level, message.c_str()); + std::fflush(out); +} - constexpr size_t buf_size = 1024; - char buffer[buf_size]; +inline void write_log_fragment(const std::string& message) { + std::lock_guard lock(get_log_mutex()); + FILE* out = get_log_file(); + std::fputs(message.c_str(), out); + std::fflush(out); +} +inline void log_message_fmt(const char* level, const char* fmt, ...) { va_list args; va_start(args, fmt); - vsnprintf(buffer, buf_size, fmt, args); + const std::string message = format_message(fmt, args); va_end(args); + write_log_line(level, message); +} - fprintf(out, "%s", buffer); - fflush(out); +inline void log_message_fmt_no_new_line(const char* /*level*/, const char* fmt, ...) { + va_list args; + va_start(args, fmt); + const std::string message = format_message(fmt, args); + va_end(args); + write_log_fragment(message); } -// Overload for default formatter template inline void log_message(const char* level, const char* fmt, Args&&... args) { - logging_internal::log_message_fmt(level, fmt, std::forward(args)...); + log_message_fmt(level, fmt, std::forward(args)...); } + template inline void log_message_no_new_line(const char* level, const char* fmt, Args&&... args) { - logging_internal::log_message_fmt_no_new_line(level, fmt, std::forward(args)...); + log_message_fmt_no_new_line(level, fmt, std::forward(args)...); } -// Trace-level logging with file and line info -#if DATACRUMBS_LOG_LEVEL >= LOG_LEVEL_DEBUG -inline void log_message_trace(const char* level, const char* file, int line, const char* fmt, ...) { - FILE* out = get_log_file(); +inline std::string format_compact_count(double value) { + const char* suffix = ""; + if (value >= 1e9) { + value /= 1e9; + suffix = "G"; + } else if (value >= 1e6) { + value /= 1e6; + suffix = "M"; + } else if (value >= 1e3) { + value /= 1e3; + suffix = "K"; + } - constexpr size_t buf_size = 1024; - char buffer[buf_size]; + char buffer[64]; + std::snprintf(buffer, sizeof(buffer), "%.2f%s", value, suffix); + std::string result(buffer); + if (const auto dot = result.find('.'); dot != std::string::npos) { + while (!result.empty() && result.back() == '0') { + result.pop_back(); + } + if (!result.empty() && result.back() == '.') { + result.pop_back(); + } + } + return result; +} - va_list args; - va_start(args, fmt); - vsnprintf(buffer, buf_size, fmt, args); - va_end(args); +inline std::string format_elapsed(double elapsed_seconds) { + char buffer[64]; + const int total_seconds = static_cast(elapsed_seconds); + const int hours = total_seconds / 3600; + const int minutes = (total_seconds % 3600) / 60; + const int seconds = total_seconds % 60; + + if (hours > 0) { + std::snprintf(buffer, sizeof(buffer), "%dh %dm %ds", hours, minutes, seconds); + } else if (minutes > 0) { + std::snprintf(buffer, sizeof(buffer), "%dm %ds", minutes, seconds); + } else { + std::snprintf(buffer, sizeof(buffer), "%.2fs", elapsed_seconds); + } + return buffer; +} + +inline ProgressSnapshot update_progress_state(const std::string& key, size_t current, + std::chrono::steady_clock::duration min_interval, + bool completed) { + using clock = std::chrono::steady_clock; + + const auto now = clock::now(); + std::lock_guard lock(get_progress_mutex()); + auto& states = get_progress_states(); + auto& state = states[key]; + + if (!state.initialized || current < state.last_value) { + state.start_time = now; + state.last_emit_time = now; + state.last_value = 0; + state.initialized = true; + } + + if (!completed && (now - state.last_emit_time) < min_interval) { + state.last_value = current; + return {}; + } + + ProgressSnapshot snapshot; + snapshot.should_emit = true; + snapshot.elapsed_seconds = + std::chrono::duration_cast>(now - state.start_time).count(); + snapshot.rate = snapshot.elapsed_seconds > 0.0 + ? static_cast(current) / snapshot.elapsed_seconds + : 0.0; - fprintf(out, "[%s] %s (%s:%d)\n", level, buffer, file, line); - fflush(out); + if (completed) { + states.erase(key); + } else { + state.last_emit_time = now; + state.last_value = current; + } + + return snapshot; +} + +inline void emit_progress_line(const std::string& message) { +#ifdef LOG_TO_FILE + write_log_line("PRINT", message); +#else + write_log_fragment("\r" + message); +#endif } + +inline void finish_console_progress_line() { +#ifndef LOG_TO_FILE + write_log_line("PRINT", ""); #endif +} + +inline void log_progress( + const std::string& message, size_t current, size_t total, + std::chrono::steady_clock::duration min_interval = kDefaultProgressLogInterval) { + const bool completed = total > 0 && current >= total; + const ProgressSnapshot snapshot = + update_progress_state(message, current, min_interval, completed); + if (!snapshot.should_emit) { + return; + } + + const double percent = + total > 0 ? (100.0 * static_cast(current) / static_cast(total)) : 0.0; + const std::string line = message + " [" + std::to_string(current) + "/" + std::to_string(total) + + "] " + std::to_string(static_cast(percent)) + "% completed | " + + format_elapsed(snapshot.elapsed_seconds) + " elapsed | " + + format_compact_count(snapshot.rate) + " events/s"; + emit_progress_line(line); + + if (completed) { + finish_console_progress_line(); + write_log_line("PRINT", message + + " done. Total time: " + format_elapsed(snapshot.elapsed_seconds) + + ", Avg rate: " + format_compact_count(snapshot.rate) + " events/s"); + } +} + +inline void log_progress( + const std::string& message, size_t current, + std::chrono::steady_clock::duration min_interval = kDefaultProgressLogInterval) { + const ProgressSnapshot snapshot = update_progress_state(message, current, min_interval, false); + if (!snapshot.should_emit) { + return; + } + + const std::string line = message + " [" + format_compact_count(static_cast(current)) + + " events] | " + format_elapsed(snapshot.elapsed_seconds) + + " elapsed | " + format_compact_count(snapshot.rate) + " events/s"; + emit_progress_line(line); +} } // namespace datacrumbs::logging_internal -#if 1 #define DC_LOG_PRINT(...) datacrumbs::logging_internal::log_message("PRINT", __VA_ARGS__) #define DC_LOG_PRINT_NO_NEW_LINE(...) \ datacrumbs::logging_internal::log_message_no_new_line("PRINT", __VA_ARGS__) -#else -#define DC_LOG_PRINT(...) (void)0 -#endif -// Macros for logging #if DATACRUMBS_LOG_LEVEL >= LOG_LEVEL_ERROR #define DC_LOG_ERROR(...) datacrumbs::logging_internal::log_message("ERROR", __VA_ARGS__) #else @@ -145,127 +288,16 @@ inline void log_message_trace(const char* level, const char* file, int line, con #define DC_LOG_TRACE(...) (void)0 #endif -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; - } -} - -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; - std::string rate_str; - std::string multiplier; - if (rate >= 1e9) { - rate_str = std::to_string(rate / 1e9) + "G"; - multiplier = "G"; - } else if (rate >= 1e6) { - rate_str = std::to_string(rate / 1e6) + "M"; - multiplier = "M"; - } else if (rate >= 1e3) { - rate_str = std::to_string(rate / 1e3) + "K"; - multiplier = "K"; - } else { - rate_str = std::to_string(rate); - multiplier = ""; - } - - rate_str.resize(rate_str.find('.') != std::string::npos ? rate_str.find('.') + 3 - : rate_str.size()); - rate_str += multiplier; - int hours = static_cast(elapsed) / 3600; - int minutes = (static_cast(elapsed) % 3600) / 60; - int seconds = static_cast(elapsed) % 60; - char elapsed_str[32]; - if (hours > 0) - snprintf(elapsed_str, sizeof(elapsed_str), "%dh %dm %ds", hours, minutes, seconds); - else if (minutes > 0) - snprintf(elapsed_str, sizeof(elapsed_str), "%dm %ds", minutes, seconds); - else - snprintf(elapsed_str, sizeof(elapsed_str), "%.2fs", elapsed); - std::string current_str; - if (current >= 1e9) { - current_str = std::to_string(static_cast(current) / 1e9) + "G"; - multiplier = "G"; - } else if (current >= 1e6) { - multiplier = "M"; - current_str = std::to_string(static_cast(current) / 1e6) + "M"; - } else if (current >= 1e3) { - multiplier = "K"; - current_str = std::to_string(static_cast(current) / 1e3) + "K"; - } else { - current_str = std::to_string(current); - multiplier = ""; - } - 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()); -#endif -} -} // namespace datacrumbs::logging_internal -// Progress logging macro #define DC_LOG_PROGRESS(message, current, total) \ - datacrumbs::logging_internal::log_progress(message, current, total) + DC_LOG_PROGRESS_THROTTLED(message, current, total, 5) #define DC_LOG_PROGRESS_SINGLE(message, current) \ - datacrumbs::logging_internal::log_progress(message, current) + DC_LOG_PROGRESS_SINGLE_THROTTLED(message, current, 5) + +#define DC_LOG_PROGRESS_THROTTLED(message, current, total, interval_seconds) \ + datacrumbs::logging_internal::log_progress( \ + message, current, total, std::chrono::seconds(static_cast(interval_seconds))) + +#define DC_LOG_PROGRESS_SINGLE_THROTTLED(message, current, interval_seconds) \ + datacrumbs::logging_internal::log_progress( \ + message, current, std::chrono::seconds(static_cast(interval_seconds))) diff --git a/src/datacrumbs/common/probe_file.h b/src/datacrumbs/common/probe_file.h new file mode 100644 index 00000000..8274b655 --- /dev/null +++ b/src/datacrumbs/common/probe_file.h @@ -0,0 +1,284 @@ +#ifndef DATACRUMBS_COMMON_PROBE_FILE_H__ +#define DATACRUMBS_COMMON_PROBE_FILE_H__ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace datacrumbs::probe_file { + +inline std::filesystem::path secret_path() { + return DATACRUMBS_PROBE_SECRET_FILE; +} + +inline std::string bytes_to_hex(const unsigned char* data, std::size_t size) { + std::ostringstream oss; + oss << std::hex << std::setfill('0'); + for (std::size_t i = 0; i < size; ++i) { + oss << std::setw(2) << static_cast(data[i]); + } + return oss.str(); +} + +inline std::string read_text_file(const std::filesystem::path& path) { + std::ifstream input(path); + if (!input.is_open()) { + return ""; + } + return std::string((std::istreambuf_iterator(input)), std::istreambuf_iterator()); +} + +inline std::string read_probe_payload(const std::filesystem::path& path) { + std::ifstream input(path, std::ios::binary); + if (!input.is_open()) { + return ""; + } + + unsigned char magic[2] = {0, 0}; + input.read(reinterpret_cast(magic), sizeof(magic)); + input.close(); + + const bool is_gzip = magic[0] == 0x1f && magic[1] == 0x8b; + if (!is_gzip) { + return read_text_file(path); + } + + gzFile gz_file = gzopen(path.string().c_str(), "rb"); + if (gz_file == nullptr) { + return ""; + } + + std::string payload; + char buffer[4096]; + int read_bytes = 0; + while ((read_bytes = gzread(gz_file, buffer, sizeof(buffer))) > 0) { + payload.append(buffer, read_bytes); + } + gzclose(gz_file); + return payload; +} + +inline bool write_owner_only_file(const std::filesystem::path& path, const std::string& content) { + std::error_code ec; + std::filesystem::create_directories(path.parent_path(), ec); + if (ec) { + return false; + } + + const int fd = open(path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); + if (fd < 0) { + return false; + } + + const ssize_t written = write(fd, content.data(), content.size()); + const bool chown_ok = (geteuid() != 0) || (fchown(fd, 0, 0) == 0); + const bool chmod_ok = (fchmod(fd, S_IRUSR) == 0); + const bool close_ok = (close(fd) == 0); + return written == static_cast(content.size()) && chown_ok && chmod_ok && close_ok; +} + +inline bool write_gzip_file(const std::filesystem::path& path, const std::string& payload) { + std::error_code ec; + std::filesystem::create_directories(path.parent_path(), ec); + if (ec) { + return false; + } + + gzFile gz_file = gzopen(path.string().c_str(), "wb"); + if (gz_file == nullptr) { + return false; + } + + const int written = gzwrite(gz_file, payload.data(), static_cast(payload.size())); + const int close_status = gzclose(gz_file); + chmod(path.c_str(), S_IRUSR | S_IWUSR); + return written > 0 && close_status == Z_OK; +} + +inline bool ensure_probe_secret(std::string* secret_out = nullptr) { + const auto path = secret_path(); + std::string secret = read_text_file(path); + if (!secret.empty()) { + if (geteuid() == 0) { + chown(path.c_str(), 0, 0); + } + chmod(path.c_str(), S_IRUSR); + if (secret_out != nullptr) { + *secret_out = secret; + } + return true; + } + + std::error_code ec; + if (std::filesystem::exists(path, ec) && geteuid() != 0) { + return false; + } + if (geteuid() != 0) { + return false; + } + + unsigned char random_bytes[32]; + if (RAND_bytes(random_bytes, sizeof(random_bytes)) != 1) { + return false; + } + + secret = bytes_to_hex(random_bytes, sizeof(random_bytes)); + if (!write_owner_only_file(path, secret)) { + return false; + } + + if (secret_out != nullptr) { + *secret_out = secret; + } + return true; +} + +inline std::string hmac_sha256_hex(const std::string& secret, const std::string& payload) { + unsigned char digest[EVP_MAX_MD_SIZE]; + unsigned int digest_len = 0; + if (HMAC(EVP_sha256(), secret.data(), static_cast(secret.size()), + reinterpret_cast(payload.data()), payload.size(), digest, + &digest_len) == nullptr) { + return ""; + } + return bytes_to_hex(digest, digest_len); +} + +inline std::string categories_payload(json_object* categories) { + const char* payload = json_object_to_json_string_ext(categories, JSON_C_TO_STRING_PLAIN); + return payload != nullptr ? payload : ""; +} + +inline std::string signed_document_payload(json_object* summary, json_object* categories) { + json_object* root = json_object_new_object(); + json_object_object_add(root, "summary", json_object_get(summary)); + json_object_object_add(root, "categories", json_object_get(categories)); + json_object_object_add(root, "checksum_algorithm", json_object_new_string("hmac-sha256")); + const char* payload = json_object_to_json_string_ext(root, JSON_C_TO_STRING_PLAIN); + const std::string result = payload != nullptr ? payload : ""; + json_object_put(root); + return result; +} + +inline json_object* build_signed_categories_document( + json_object* categories, const std::unordered_map& summary_fields, + const std::string& secret) { + json_object* root = json_object_new_object(); + json_object* summary = json_object_new_object(); + + for (const auto& [key, value] : summary_fields) { + json_object_object_add(summary, key.c_str(), json_object_new_string(value.c_str())); + } + + json_object_object_add(root, "summary", summary); + json_object_object_add(root, "categories", json_object_get(categories)); + json_object_object_add(root, "checksum_algorithm", json_object_new_string("hmac-sha256")); + const std::string payload = signed_document_payload(summary, categories); + json_object_object_add(root, "checksum", + json_object_new_string(hmac_sha256_hex(secret, payload).c_str())); + return root; +} + +inline json_object* verified_categories_from_root(json_object* root, const std::string& secret, + std::string* error = nullptr) { + if (root == nullptr || json_object_get_type(root) != json_type_object) { + if (error != nullptr) { + *error = "probe file root must be a JSON object"; + } + return nullptr; + } + + json_object* categories = nullptr; + json_object* summary = nullptr; + json_object* checksum_obj = nullptr; + json_object* algorithm_obj = nullptr; + if (!json_object_object_get_ex(root, "summary", &summary) || + json_object_get_type(summary) != json_type_object) { + if (error != nullptr) { + *error = "probe file is missing summary object"; + } + return nullptr; + } + if (!json_object_object_get_ex(root, "categories", &categories) || + json_object_get_type(categories) != json_type_array) { + if (error != nullptr) { + *error = "probe file is missing a categories array"; + } + return nullptr; + } + if (!json_object_object_get_ex(root, "checksum", &checksum_obj) || + json_object_get_type(checksum_obj) != json_type_string) { + if (error != nullptr) { + *error = "probe file is missing checksum"; + } + return nullptr; + } + if (!json_object_object_get_ex(root, "checksum_algorithm", &algorithm_obj) || + json_object_get_type(algorithm_obj) != json_type_string || + std::string(json_object_get_string(algorithm_obj)) != "hmac-sha256") { + if (error != nullptr) { + *error = "probe file checksum algorithm is unsupported"; + } + return nullptr; + } + + const std::string expected = + hmac_sha256_hex(secret, signed_document_payload(summary, categories)); + const std::string actual = json_object_get_string(checksum_obj); + if (expected.empty() || actual != expected) { + if (error != nullptr) { + *error = "probe file checksum verification failed"; + } + return nullptr; + } + + return json_object_get(categories); +} + +inline json_object* load_verified_categories_from_file(const std::filesystem::path& path, + std::string* error = nullptr) { + std::string secret; + if (!ensure_probe_secret(&secret)) { + if (error != nullptr) { + *error = "failed to read or create probe signing secret"; + } + return nullptr; + } + + const std::string payload = read_probe_payload(path); + if (payload.empty()) { + if (error != nullptr) { + *error = "failed to read probe file"; + } + return nullptr; + } + + json_object* root = json_tokener_parse(payload.c_str()); + if (root == nullptr) { + if (error != nullptr) { + *error = "failed to parse probe file"; + } + return nullptr; + } + + json_object* categories = verified_categories_from_root(root, secret, error); + json_object_put(root); + return categories; +} + +} // namespace datacrumbs::probe_file + +#endif diff --git a/src/datacrumbs/common/runtime_configuration_manager.cpp b/src/datacrumbs/common/runtime_configuration_manager.cpp new file mode 100644 index 00000000..414b9d17 --- /dev/null +++ b/src/datacrumbs/common/runtime_configuration_manager.cpp @@ -0,0 +1,531 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace datacrumbs { + +namespace { + +constexpr uint64_t kRuntimeProbeEventIdBase = 1000; + +std::string json_string_or_empty(json_object* root, const char* key) { + json_object* value = nullptr; + if (!root || !json_object_object_get_ex(root, key, &value) || + json_object_get_type(value) != json_type_string) { + return ""; + } + return json_object_get_string(value); +} + +std::shared_ptr probe_from_json(json_object* probe_obj) { + if (!probe_obj) return nullptr; + Probe base = Probe::fromJson(probe_obj); + switch (base.type) { + case ProbeType::SYSCALLS: + return std::make_shared(SysCallProbe::fromJson(probe_obj)); + case ProbeType::KPROBE: + return std::make_shared(KProbe::fromJson(probe_obj)); + case ProbeType::UPROBE: + return std::make_shared(UProbe::fromJson(probe_obj)); + case ProbeType::USDT: + return std::make_shared(USDTProbe::fromJson(probe_obj)); + case ProbeType::CUSTOM: + return std::make_shared(CustomProbe::fromJson(probe_obj)); + default: + return nullptr; + } +} + +std::string runtime_event_key(const std::string& probe_name, const std::string& function_name) { + return probe_name + "\n" + function_name; +} + +bool is_supported_runtime_probe_type(ProbeType type) { + switch (type) { + case ProbeType::KPROBE: + case ProbeType::UPROBE: + case ProbeType::SYSCALLS: + case ProbeType::USDT: + return true; + default: + return false; + } +} + +void ensure_directory_owned_by_install_user(const std::filesystem::path& directory) { + if (directory.empty()) { + return; + } + + struct passwd* pwd = getpwnam(DATACRUMBS_INSTALL_USER); + + std::error_code ec; + std::filesystem::path current; + for (const auto& part : directory) { + current /= part; + if (current.empty()) { + continue; + } + std::filesystem::create_directory(current, ec); + ec.clear(); + } + + if (pwd == nullptr) { + return; + } + + chown(directory.c_str(), pwd->pw_uid, pwd->pw_gid); + chmod(directory.c_str(), S_IRWXU | S_IRWXG); +} + +void replace_all(std::string* target, const std::string& from, const std::string& to) { + if (from.empty()) return; + size_t pos = 0; + while ((pos = target->find(from, pos)) != std::string::npos) { + target->replace(pos, from.size(), to); + pos += to.size(); + } +} + +std::string expand_trace_dir_pattern(const std::string& pattern) { + if (pattern.empty()) return ""; + + std::time_t now = std::time(nullptr); + std::tm tm_now{}; + localtime_r(&now, &tm_now); + char yy[3]; + char mm[3]; + char dd[3]; + std::snprintf(yy, sizeof(yy), "%02d", (tm_now.tm_year + 1900) % 100); + std::snprintf(mm, sizeof(mm), "%02d", tm_now.tm_mon + 1); + std::snprintf(dd, sizeof(dd), "%02d", tm_now.tm_mday); + + std::string expanded = pattern; + replace_all(&expanded, "%YY%", yy); + replace_all(&expanded, "%MM%", mm); + replace_all(&expanded, "%DD%", dd); + return expanded; +} + +void persist_run_id(const std::filesystem::path& run_id_file, const std::string& run_id) { + if (run_id_file.empty()) return; + std::error_code ec; + std::filesystem::create_directories(run_id_file.parent_path(), ec); + ec.clear(); + + std::ofstream output(run_id_file); + if (!output.is_open()) { + return; + } + output << run_id; + output.close(); + if (!output) return; +} + +void remove_file_if_exists(const std::filesystem::path& path) { + if (path.empty()) return; + std::error_code ec; + std::filesystem::remove(path, ec); +} + +void raise_limit_to_hard(int resource, const char* resource_name) { + struct rlimit limits{}; + if (getrlimit(resource, &limits) != 0) { + return; + } + if (limits.rlim_cur == limits.rlim_max) { + return; + } + limits.rlim_cur = limits.rlim_max; + if (setrlimit(resource, &limits) == 0) { + DC_LOG_INFO("Raised %s soft limit to hard limit", resource_name); + } +} + +} // namespace + +template <> +std::shared_ptr + datacrumbs::Singleton::instance = nullptr; + +template <> +bool datacrumbs::Singleton::stop_creating_instances = + false; + +RuntimeConfigurationManager::RuntimeConfigurationManager() { + throw std::runtime_error( + "RuntimeConfigurationManager must be initialized with a probes json path."); +} + +RuntimeConfigurationManager::RuntimeConfigurationManager( + const std::filesystem::path& runtime_probe_file, const std::string& explicit_run_id, + const std::string& explicit_user, bool print) + : config_path(DATACRUMBS_CONFIG_PATH), + data_dir(DATACRUMBS_INSTALL_SHARED_DATA_DIR), + trace_log_dir(), + probe_file_path(runtime_probe_file), + system_probe_path(DATACRUMBS_SYSTEM_PROBE_FILE), + server_run_dir(DATACRUMBS_SERVER_RUN_DIR), + server_run_id_file(DATACRUMBS_SERVER_RUN_ID_FILE), + config_name(runtime_probe_file.stem().string()), + user(explicit_user), + log_dir(DATACRUMBS_LOG_DIR), + run_id(explicit_run_id), + trace_dir_pattern(DATACRUMBS_TRACE_DIR_PATTERN), + inclusion_paths("") { + load_runtime_system_configuration(); + raise_limit_to_hard(RLIMIT_NOFILE, "RLIMIT_NOFILE"); + raise_limit_to_hard(RLIMIT_AS, "RLIMIT_AS"); + raise_limit_to_hard(RLIMIT_MEMLOCK, "RLIMIT_MEMLOCK"); + derive_configurations(); + remove_file_if_exists(server_ready_file); + persist_run_id(server_run_id_file, run_id); + probe_file_path = runtime_probe_file; + load_runtime_probe_file(); + validate_configurations(); + if (print) { + print_configurations(); + } +} + +void RuntimeConfigurationManager::print_configurations() const { + DC_LOG_INFO("[RuntimeConfigurationManager] Final configuration:"); + DC_LOG_INFO(" Config path: %s", config_path.string().c_str()); + DC_LOG_INFO(" Config name: %s", config_name.c_str()); + DC_LOG_INFO(" Trace log dir: %s", trace_log_dir.string().c_str()); + DC_LOG_INFO(" Trace file path: %s", trace_file_path.string().c_str()); + DC_LOG_INFO(" Trace dir pattern: %s", + trace_dir_pattern.empty() ? "" : trace_dir_pattern.c_str()); + DC_LOG_INFO(" Data dir: %s", data_dir.string().c_str()); + DC_LOG_INFO(" Probe file path: %s", probe_file_path.string().c_str()); + DC_LOG_INFO(" System probe path: %s", system_probe_path.string().c_str()); + DC_LOG_INFO(" Invalid probe database: %s", invalid_probe_file_path.string().c_str()); + DC_LOG_INFO(" Run dir: %s", server_run_dir.string().c_str()); + DC_LOG_INFO(" Run ID file: %s", server_run_id_file.string().c_str()); + DC_LOG_INFO(" Ready file: %s", server_ready_file.string().c_str()); + DC_LOG_INFO(" Runtime user: %s", user.c_str()); + DC_LOG_INFO(" Install user: %s", DATACRUMBS_INSTALL_USER); + DC_LOG_INFO(" Hostname: %s", hostname.c_str()); + DC_LOG_INFO(" Inclusion paths: %s", + inclusion_paths.empty() ? "" : inclusion_paths.c_str()); + DC_LOG_INFO(" Runtime probes loaded: %zu", runtime_probes.size()); + DC_LOG_INFO(" Category map entries: %zu", category_map.size()); +} + +void RuntimeConfigurationManager::derive_configurations() { + char hostname_buf[256] = {0}; + if (gethostname(hostname_buf, sizeof(hostname_buf) - 1) != 0) { + throw std::runtime_error("Failed to get hostname."); + } + hostname = hostname_buf; + + if (!trace_dir_pattern.empty()) { + trace_log_dir = expand_trace_dir_pattern(trace_dir_pattern); + } + ensure_directory_owned_by_install_user(trace_log_dir); + + const std::string generated_file_suffix = + user + "-" + run_id + "-" + hostname + "-" + config_name; + const std::string lookup_file_suffix = std::string(DATACRUMBS_INSTALL_USER) + "-" + config_name; + trace_file_path = trace_log_dir / ("trace-" + generated_file_suffix + ".pfw.gz"); + invalid_probe_file_path = data_dir / ("probes-invalid-" + lookup_file_suffix + ".json.gz"); + server_ready_file = server_run_dir / ("datacrumbs-" + run_id + ".ready"); +} + +void RuntimeConfigurationManager::load_runtime_system_configuration() { + const std::string payload = datacrumbs::probe_file::read_probe_payload(system_probe_path); + if (payload.empty()) { + throw std::runtime_error("Failed to read system probe file: " + system_probe_path.string()); + } + + json_object* root = json_tokener_parse(payload.c_str()); + if (!root || json_object_get_type(root) != json_type_object) { + if (root) json_object_put(root); + throw std::runtime_error("Failed to parse system probe file: " + system_probe_path.string()); + } + + json_object* summary = nullptr; + json_object* system_configuration = nullptr; + if (json_object_object_get_ex(root, "summary", &summary) && + json_object_get_type(summary) == json_type_object) { + const std::string imported_config_path = json_string_or_empty(summary, "config_path"); + const std::string imported_trace_dir = json_string_or_empty(summary, "trace_log_dir"); + const std::string imported_config_name = json_string_or_empty(summary, "config_name"); + if (!imported_config_path.empty()) config_path = imported_config_path; + if (trace_dir_pattern.empty() && !imported_trace_dir.empty()) + trace_log_dir = imported_trace_dir; + if (!imported_config_name.empty()) config_name = imported_config_name; + } + + if (json_object_object_get_ex(root, "system_configuration", &system_configuration) && + json_object_get_type(system_configuration) == json_type_object) { + const std::string imported_log_dir = + json_string_or_empty(system_configuration, "DATACRUMBS_LOG_DIR"); + const std::string imported_data_dir = + json_string_or_empty(system_configuration, "DATACRUMBS_INSTALL_DATA_DIR"); + const std::string imported_inclusion_paths = + json_string_or_empty(system_configuration, "DATACRUMBS_INCLUSION_PATHS"); + const std::string imported_trace_dir_pattern = + json_string_or_empty(system_configuration, "DATACRUMBS_TRACE_DIR_PATTERN"); + const std::string imported_run_dir = + json_string_or_empty(system_configuration, "DATACRUMBS_SERVER_RUN_DIR"); + const std::string imported_run_id_file = + json_string_or_empty(system_configuration, "DATACRUMBS_SERVER_RUN_ID_FILE"); + + if (!imported_log_dir.empty()) log_dir = imported_log_dir; + if (!imported_data_dir.empty()) data_dir = imported_data_dir; + if (!imported_trace_dir_pattern.empty()) trace_dir_pattern = imported_trace_dir_pattern; + if (!imported_run_dir.empty()) server_run_dir = imported_run_dir; + if (!imported_run_id_file.empty()) server_run_id_file = imported_run_id_file; + if (inclusion_paths.empty() && !imported_inclusion_paths.empty()) { + inclusion_paths = imported_inclusion_paths; + } + } + + json_object_put(root); +} + +void RuntimeConfigurationManager::load_runtime_probe_file() { + std::string probe_error; + json_object* categories = + datacrumbs::probe_file::load_verified_categories_from_file(probe_file_path, &probe_error); + if (!categories || json_object_get_type(categories) != json_type_array) { + if (categories) json_object_put(categories); + throw std::runtime_error("Failed to verify runtime probe file: " + probe_file_path.string() + + " (" + probe_error + ")"); + } + + runtime_probes.clear(); + category_map.clear(); + runtime_event_ids.clear(); + runtime_event_metadata.clear(); + invalid_runtime_probes.clear(); + load_invalid_runtime_probes(); + + size_t total_runtime_functions = 0; + size_t skipped_known_invalid_functions = 0; + + uint64_t event_id = kRuntimeProbeEventIdBase; + const int arr_len = json_object_array_length(categories); + for (int i = 0; i < arr_len; ++i) { + json_object* probe_obj = json_object_array_get_idx(categories, i); + auto probe = probe_from_json(probe_obj); + if (!probe) { + DC_LOG_WARN("[RuntimeConfigurationManager] Skipping unsupported runtime probe at index %d", + i); + continue; + } + if (!is_supported_runtime_probe_type(probe->type)) { + DC_LOG_WARN( + "[RuntimeConfigurationManager] Skipping non-attachable runtime probe type %d for %s", + static_cast(probe->type), probe->name.c_str()); + continue; + } + + std::vector filtered_functions; + filtered_functions.reserve(probe->functions.size()); + for (const auto& function_name : probe->functions) { + if (is_known_invalid_runtime_probe(probe->name, function_name)) { + ++skipped_known_invalid_functions; + continue; + } + filtered_functions.push_back(function_name); + } + probe->functions = std::move(filtered_functions); + runtime_probes.push_back(probe); + total_runtime_functions += probe->functions.size(); + for (const auto& function_name : probe->functions) { + const uint64_t assigned_event_id = event_id++; + category_map[assigned_event_id] = std::make_pair(probe->name, function_name); + runtime_event_ids[runtime_event_key(probe->name, function_name)] = assigned_event_id; + RuntimeEventMetadata metadata; + metadata.probe_type = probe->type; + metadata.probe_name = probe->name; + metadata.function_name = function_name; + if (const auto* arg_specs = probe->getArgSpecs(function_name); arg_specs != nullptr) { + metadata.arg_specs = *arg_specs; + } + runtime_event_metadata[assigned_event_id] = std::move(metadata); + } + } + + json_object_put(categories); + + if (skipped_known_invalid_functions > 0) { + DC_LOG_WARN( + "[RuntimeConfigurationManager] Skipped %zu known invalid runtime probe functions " + "using %s", + skipped_known_invalid_functions, invalid_probe_file_path.string().c_str()); + } + + if (total_runtime_functions > DATACRUMBS_MAX_RUNTIME_FUNCTIONS) { + throw std::runtime_error("Runtime probe file selects " + + std::to_string(total_runtime_functions) + + " functions, but datacrumbs supports at most " + + std::to_string(DATACRUMBS_MAX_RUNTIME_FUNCTIONS) + + " functions per run. Regenerate the probes file with fewer " + "selected functions."); + } +} + +void RuntimeConfigurationManager::load_invalid_runtime_probes() { + if (invalid_probe_file_path.empty() || !std::filesystem::exists(invalid_probe_file_path)) { + return; + } + + const std::string content = datacrumbs::probe_file::read_probe_payload(invalid_probe_file_path); + if (content.empty()) { + DC_LOG_WARN("[RuntimeConfigurationManager] Failed to read invalid probe database: %s", + invalid_probe_file_path.string().c_str()); + return; + } + json_object* root = json_tokener_parse(content.c_str()); + if (!root || json_object_get_type(root) != json_type_array) { + if (root) json_object_put(root); + DC_LOG_WARN("[RuntimeConfigurationManager] Invalid invalid probe database format: %s", + invalid_probe_file_path.string().c_str()); + return; + } + + const int arr_len = json_object_array_length(root); + for (int i = 0; i < arr_len; ++i) { + json_object* probe_obj = json_object_array_get_idx(root, i); + if (!probe_obj) continue; + + json_object* name_obj = nullptr; + json_object* functions_obj = nullptr; + if (!json_object_object_get_ex(probe_obj, "name", &name_obj) || + !json_object_object_get_ex(probe_obj, "functions", &functions_obj) || + json_object_get_type(name_obj) != json_type_string || + json_object_get_type(functions_obj) != json_type_array) { + continue; + } + + auto& function_set = invalid_runtime_probes[std::string(json_object_get_string(name_obj))]; + const int function_count = json_object_array_length(functions_obj); + for (int j = 0; j < function_count; ++j) { + json_object* function_obj = json_object_array_get_idx(functions_obj, j); + if (function_obj && json_object_get_type(function_obj) == json_type_string) { + function_set.insert(json_object_get_string(function_obj)); + } + } + } + + json_object_put(root); +} + +bool RuntimeConfigurationManager::is_known_invalid_runtime_probe( + const std::string& probe_name, const std::string& function_name) const { + const auto probe_it = invalid_runtime_probes.find(probe_name); + if (probe_it == invalid_runtime_probes.end()) { + return false; + } + return probe_it->second.find(function_name) != probe_it->second.end(); +} + +void RuntimeConfigurationManager::record_invalid_runtime_probe(const std::string& probe_name, + const std::string& function_name) { + invalid_runtime_probes[probe_name].insert(function_name); +} + +void RuntimeConfigurationManager::persist_invalid_runtime_probes() const { + if (invalid_probe_file_path.empty()) { + return; + } + + std::error_code ec; + std::filesystem::create_directories(invalid_probe_file_path.parent_path(), ec); + + json_object* root = json_object_new_array(); + for (const auto& [probe_name, functions] : invalid_runtime_probes) { + if (functions.empty()) { + continue; + } + json_object* probe_obj = json_object_new_object(); + json_object_object_add(probe_obj, "name", json_object_new_string(probe_name.c_str())); + json_object* function_array = json_object_new_array(); + std::vector sorted_functions(functions.begin(), functions.end()); + std::sort(sorted_functions.begin(), sorted_functions.end()); + for (const auto& function_name : sorted_functions) { + json_object_array_add(function_array, json_object_new_string(function_name.c_str())); + } + json_object_object_add(probe_obj, "functions", function_array); + json_object_array_add(root, probe_obj); + } + + const std::string payload = json_object_to_json_string_ext(root, JSON_C_TO_STRING_PRETTY); + if (!datacrumbs::probe_file::write_gzip_file(invalid_probe_file_path, payload)) { + json_object_put(root); + DC_LOG_WARN("[RuntimeConfigurationManager] Failed to persist invalid probe database: %s", + invalid_probe_file_path.string().c_str()); + return; + } + + if (struct passwd* pwd = getpwnam(DATACRUMBS_INSTALL_USER); pwd != nullptr) { + chown(invalid_probe_file_path.c_str(), pwd->pw_uid, pwd->pw_gid); + } + chmod(invalid_probe_file_path.c_str(), S_IRUSR | S_IWUSR); + json_object_put(root); +} + +std::optional RuntimeConfigurationManager::get_runtime_event_id( + const std::string& probe_name, const std::string& function_name) const { + const auto it = runtime_event_ids.find(runtime_event_key(probe_name, function_name)); + if (it == runtime_event_ids.end()) { + return std::nullopt; + } + return it->second; +} + +const RuntimeEventMetadata* RuntimeConfigurationManager::get_runtime_event_metadata( + uint64_t event_id) const { + const auto it = runtime_event_metadata.find(event_id); + if (it == runtime_event_metadata.end()) { + return nullptr; + } + return &it->second; +} + +void RuntimeConfigurationManager::validate_configurations() const { + if (probe_file_path.empty()) { + throw std::runtime_error("Runtime probe file path is empty."); + } + if (run_id.empty()) { + throw std::runtime_error("Runtime run id is empty."); + } + if (user.empty()) { + throw std::runtime_error("Runtime user is empty."); + } + if (!std::filesystem::exists(probe_file_path)) { + throw std::runtime_error("Runtime probe file does not exist: " + probe_file_path.string()); + } + if (trace_log_dir.empty() || !std::filesystem::exists(trace_log_dir)) { + throw std::runtime_error("Trace log directory does not exist: " + trace_log_dir.string()); + } + if (system_probe_path.empty() || !std::filesystem::exists(system_probe_path)) { + throw std::runtime_error("System probe file does not exist: " + system_probe_path.string()); + } + if (server_run_id_file.empty()) { + throw std::runtime_error("Run-id file path is empty."); + } + if (server_run_dir.empty()) { + throw std::runtime_error("Run directory path is empty."); + } +} + +} // namespace datacrumbs diff --git a/src/datacrumbs/common/runtime_configuration_manager.h b/src/datacrumbs/common/runtime_configuration_manager.h new file mode 100644 index 00000000..9f789d6f --- /dev/null +++ b/src/datacrumbs/common/runtime_configuration_manager.h @@ -0,0 +1,71 @@ +#ifndef DATACRUMBS_COMMON_RUNTIME_CONFIGURATION_MANAGER_H__ +#define DATACRUMBS_COMMON_RUNTIME_CONFIGURATION_MANAGER_H__ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace datacrumbs { + +class RuntimeConfigurationManager { + public: + RuntimeConfigurationManager(); + explicit RuntimeConfigurationManager(const std::filesystem::path& runtime_probe_file, + const std::string& explicit_run_id, + const std::string& explicit_user, bool print = true); + + void print_configurations() const; + + std::optional get_runtime_event_id(const std::string& probe_name, + const std::string& function_name) const; + const RuntimeEventMetadata* get_runtime_event_metadata(uint64_t event_id) const; + + std::filesystem::path config_path; + std::filesystem::path data_dir; + std::filesystem::path trace_log_dir; + std::filesystem::path trace_file_path; + std::filesystem::path probe_file_path; + std::filesystem::path system_probe_path; + std::filesystem::path invalid_probe_file_path; + std::filesystem::path server_run_dir; + std::filesystem::path server_run_id_file; + std::filesystem::path server_ready_file; + + std::string config_name; + std::string user; + std::string log_dir; + std::string hostname; + std::string run_id; + std::string trace_dir_pattern; + std::string inclusion_paths; + + std::vector> runtime_probes; + std::unordered_map> category_map; + std::unordered_map runtime_event_ids; + std::unordered_map runtime_event_metadata; + std::unordered_map> invalid_runtime_probes; + + bool is_known_invalid_runtime_probe(const std::string& probe_name, + const std::string& function_name) const; + void record_invalid_runtime_probe(const std::string& probe_name, + const std::string& function_name); + void persist_invalid_runtime_probes() const; + + private: + void derive_configurations(); + void load_runtime_system_configuration(); + void load_runtime_probe_file(); + void load_invalid_runtime_probes(); + void validate_configurations() const; +}; + +} // namespace datacrumbs + +#endif diff --git a/src/datacrumbs/common/singleton.h b/src/datacrumbs/common/singleton.h index 8aba8c04..9818a6ac 100644 --- a/src/datacrumbs/common/singleton.h +++ b/src/datacrumbs/common/singleton.h @@ -14,21 +14,9 @@ namespace datacrumbs { -/** - * @brief Singleton class template to ensure a single instance of T. - * - * Uses a shared pointer to manage the instance. Logging is provided using - * printf-style macros from datacrumbs/common/logging.h. - */ template class Singleton { public: - /** - * @brief Get the singleton instance of T. - * - * If instance creation is stopped, returns nullptr. - * Logs function entry/exit and instance creation. - */ template static std::shared_ptr get_instance(Args... args) { DC_LOG_TRACE("Entering Singleton::get_instance"); @@ -47,33 +35,18 @@ class Singleton { return instance; } - /** - * @brief Deleted assignment operator. - */ Singleton& operator=(const Singleton) = delete; - - /** - * @brief Deleted copy constructor. - */ Singleton(const Singleton&) = delete; - /** - * @brief Finalize the singleton, preventing further instance creation. - * - * Logs the finalization event. - */ static void finalize() { DC_LOG_INFO("Finalizing Singleton<%s>, no further instances will be created", typeid(T).name()); stop_creating_instances = true; } protected: - static bool stop_creating_instances; ///< Flag to stop instance creation - static std::shared_ptr instance; ///< Singleton instance + static bool stop_creating_instances; + static std::shared_ptr instance; - /** - * @brief Hidden default constructor. - */ Singleton() {} }; diff --git a/src/datacrumbs/common/typedefs.h b/src/datacrumbs/common/typedefs.h index c1f2d84c..da90bf31 100644 --- a/src/datacrumbs/common/typedefs.h +++ b/src/datacrumbs/common/typedefs.h @@ -5,5 +5,14 @@ #include #include #include +#include + +struct CapturedArgumentValue { + std::string c_type; + bool is_pointer = false; + unsigned long long raw_value = 0; + unsigned int data_status = 0; + std::vector bytes; +}; typedef std::unordered_map DataCrumbsArgs; diff --git a/src/datacrumbs/composable/CMakeLists.txt.in b/src/datacrumbs/composable/CMakeLists.txt.in deleted file mode 100644 index b4c0f217..00000000 --- a/src/datacrumbs/composable/CMakeLists.txt.in +++ /dev/null @@ -1,224 +0,0 @@ -cmake_minimum_required(VERSION 3.20) -cmake_policy(SET CMP0075 NEW) -project(datacrumbs_compose LANGUAGES C CXX) - -# ------------------------------------------------------------------------------ -# Load cmake -# ------------------------------------------------------------------------------ - -# This sets where to look for dependent library's cmake files -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) -include(datacrumbs-utils) - -# ------------------------------------------------------------------------------ -# Setup build variables -# ------------------------------------------------------------------------------ - -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" -) - -# ------------------------------------------------------------------------------ -# Validate Probes -# ------------------------------------------------------------------------------ - -# Convert comma-separated DATACRUMBS_PROBES into a list -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") -endforeach() - -message(STATUS "User gave ${DATACRUMBS_PROBES_OBJECTS}") - -# Get all .o files in DATACRUMBS_CLIENT_OBJECTS_DIR -file(GLOB ALL_OBJECT_FILES "${DATACRUMBS_CLIENT_OBJECTS_DIR}/*.o") - -message(STATUS "We have ${ALL_OBJECT_FILES}") -# Exclude init.o, datacrumbs.bpf.o, and common.o -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() -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() -endforeach() - -if(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}") -endforeach() - -# ------------------------------------------------------------------------------ -# Find all 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 -# ------------------------------------------------------------------------------ - -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 -list(PREPEND DATACRUMBS_PROBES_OBJECTS_FULL "${DATACRUMBS_CLIENT_OBJECTS_DIR}/common.o") -list(APPEND DATACRUMBS_PROBES_OBJECTS_FULL "${DATACRUMBS_CLIENT_OBJECTS_DIR}/init.o") - -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 -) - -add_custom_target(datacrumbs_bpf ALL DEPENDS ${BPF_OUTPUT}) - -# Generate Skeleton header for Datacrumbs - -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 -) -add_custom_target(datacrumbs_bpf_skel ALL DEPENDS ${BPF_SKEL_OUTPUT}) -add_dependencies(datacrumbs_bpf_skel datacrumbs_bpf) - -# ------------------------------------------------------------------------------ -# Build composite executable -# ------------------------------------------------------------------------------ -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 -) -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}" -) diff --git a/src/datacrumbs/composable/process/server.cpp b/src/datacrumbs/composable/process/server.cpp deleted file mode 100644 index 5e3b5512..00000000 --- a/src/datacrumbs/composable/process/server.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include - -#include - -int main(int argc, char** argv) { - return main_call(argc, argv); -} \ No newline at end of file diff --git a/src/datacrumbs/explorer/mechanism/elf_capture.cpp b/src/datacrumbs/explorer/mechanism/elf_capture.cpp deleted file mode 100644 index 0d4c3e7c..00000000 --- a/src/datacrumbs/explorer/mechanism/elf_capture.cpp +++ /dev/null @@ -1,150 +0,0 @@ -#include - -namespace datacrumbs { - -ElfSymbolExtractor::ElfSymbolExtractor(const std::string& path, bool include_offsets) - : fd_(-1), - data_(nullptr), - size_(0), - include_offsets_(include_offsets), - base_address_(0), - kExcludedFunctions({"_init", "_fini", "_start"}) { - DC_LOG_TRACE("ElfSymbolExtractor: constructor start for file: %s", path.c_str()); - fd_ = open(path.c_str(), O_RDONLY); - if (fd_ < 0) { - DC_LOG_ERROR("Failed to open ELF file: %s", path.c_str()); - throw std::runtime_error("Failed to open ELF file"); - } - - size_ = lseek(fd_, 0, SEEK_END); - lseek(fd_, 0, SEEK_SET); - - data_ = static_cast(mmap(nullptr, size_, PROT_READ, MAP_PRIVATE, fd_, 0)); - if (data_ == MAP_FAILED) { - DC_LOG_ERROR("Failed to mmap ELF file: %s", path.c_str()); - throw std::runtime_error("Failed to mmap ELF file"); - } - DC_LOG_TRACE("ElfSymbolExtractor: constructor end for file: %s", path.c_str()); - - if (!is_elf()) { - DC_LOG_ERROR("File is not a valid ELF file"); - throw std::runtime_error("Not a valid ELF file"); - } - const Elf64_Ehdr* ehdr = reinterpret_cast(data_); - const Elf64_Shdr* shdrs = reinterpret_cast(data_ + ehdr->e_shoff); - const char* shstrtab = reinterpret_cast(data_ + shdrs[ehdr->e_shstrndx].sh_offset); - - base_address_ = 0; - for (int i = 0; i < ehdr->e_shnum; ++i) { - const char* section_name = shstrtab + shdrs[i].sh_name; - if (strcmp(section_name, ".text") == 0) { - base_address_ = shdrs[i].sh_addr; - DC_LOG_INFO("Found .text section at address: 0x%lx", - static_cast(base_address_)); - break; - } - } - if (base_address_ == 0) { - DC_LOG_WARN("Could not find .text section, using e_entry as base address"); - base_address_ = ehdr->e_entry; - } - DC_LOG_INFO("ELF base address: 0x%lx", static_cast(base_address_)); -} - -ElfSymbolExtractor::~ElfSymbolExtractor() { - DC_LOG_TRACE("ElfSymbolExtractor: destructor start"); - if (data_ && data_ != MAP_FAILED) { - munmap(data_, size_); - DC_LOG_DEBUG("Unmapped ELF file memory"); - } - if (fd_ >= 0) { - close(fd_); - DC_LOG_DEBUG("Closed ELF file descriptor"); - } - DC_LOG_TRACE("ElfSymbolExtractor: destructor end"); -} - -std::vector ElfSymbolExtractor::extract_symbols() { - DC_LOG_TRACE("extract_symbols: start"); - auto symbols_map = std::unordered_map>(); - auto symbol_counts = std::unordered_map(); - if (!is_elf()) { - DC_LOG_ERROR("File is not a valid ELF file"); - return std::vector(); - } - - const Elf64_Ehdr* ehdr = reinterpret_cast(data_); - const Elf64_Shdr* shdrs = reinterpret_cast(data_ + ehdr->e_shoff); - const char* shstrtab = reinterpret_cast(data_ + shdrs[ehdr->e_shstrndx].sh_offset); - - // First pass: count symbol occurrences - for (int i = 0; i < ehdr->e_shnum; ++i) { - if (shdrs[i].sh_type == SHT_SYMTAB || shdrs[i].sh_type == SHT_DYNSYM) { - const Elf64_Sym* syms = reinterpret_cast(data_ + shdrs[i].sh_offset); - size_t num_syms = shdrs[i].sh_size / shdrs[i].sh_entsize; - const char* strtab = reinterpret_cast(data_ + shdrs[shdrs[i].sh_link].sh_offset); - - for (size_t j = 0; j < num_syms; ++j) { - if (syms[j].st_shndx == SHN_UNDEF) continue; - // if (ELF64_ST_BIND(syms[j].st_info) == STB_LOCAL) continue; - if (ELF64_ST_TYPE(syms[j].st_info) != STT_FUNC) continue; - - std::string name = std::string(strtab + syms[j].st_name); - if (symbols_map.find(name) == symbols_map.end()) { - symbols_map[name] = std::unordered_set(); - } - 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 - // space - static_cast(base_address_); - DC_LOG_DEBUG("found name: %s st_value: 0x%lx offset: 0x%lx base_address: 0x%lx", - name.c_str(), static_cast(syms[j].st_value), offset, - static_cast(base_address_)); - sprintf(buffer, "0x%lx", offset); - symbols_map[name].insert(buffer); - } - } - } - } - - std::vector symbols; - for (const auto& pair : symbols_map) { - // Skip if symbol is in kExcludedFunctions - if (kExcludedFunctions.find(pair.first) != kExcludedFunctions.end()) { - continue; - } - if (pair.second.size() > 1) { - DC_LOG_WARN("Symbol %s has multiple offsets, using all occurrences", pair.first.c_str()); - for (const auto& offset : pair.second) { - symbols.push_back(pair.first + ":" + offset); - } - } else { - if (include_offsets_) { - symbols.push_back(pair.first + ":" + *pair.second.begin()); - } else { - symbols.push_back(pair.first); - } - } - } - DC_LOG_INFO("Extracted %zu unique function symbols", symbols.size()); - DC_LOG_TRACE("extract_symbols: end"); - return symbols; -} - -bool ElfSymbolExtractor::is_elf() const { - DC_LOG_TRACE("is_elf: start"); - if (size_ < sizeof(Elf64_Ehdr)) { - DC_LOG_WARN("File size too small to be ELF"); - return false; - } - const Elf64_Ehdr* ehdr = reinterpret_cast(data_); - bool result = ehdr->e_ident[EI_MAG0] == ELFMAG0 && ehdr->e_ident[EI_MAG1] == ELFMAG1 && - ehdr->e_ident[EI_MAG2] == ELFMAG2 && ehdr->e_ident[EI_MAG3] == ELFMAG3; - if (!result) { - DC_LOG_WARN("ELF magic not found"); - } - DC_LOG_TRACE("is_elf: end"); - return result; -} -} // namespace datacrumbs \ No newline at end of file diff --git a/src/datacrumbs/explorer/mechanism/elf_capture.h b/src/datacrumbs/explorer/mechanism/elf_capture.h deleted file mode 100644 index 2d153acd..00000000 --- a/src/datacrumbs/explorer/mechanism/elf_capture.h +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include -// std headers -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace datacrumbs { - -/** - * @class ElfSymbolExtractor - * @brief Extracts symbol names from ELF files. - */ -class ElfSymbolExtractor { - public: - /** - * @brief Constructs the extractor for a given ELF file path. - * @param path Path to the ELF file. - */ - explicit ElfSymbolExtractor(const std::string& path, bool include_offsets = false); - - /** - * @brief Destructor to clean up resources. - */ - ~ElfSymbolExtractor(); - - /** - * @brief Extracts symbol and demangled symbol names from the ELF file. - * @return Pair of vectors: - */ - std::vector extract_symbols(); - - private: - /** - * @brief Checks if the mapped file is a valid ELF file. - * @return True if ELF, false otherwise. - */ - bool is_elf() const; - - int fd_; ///< File descriptor for the ELF file. - uint8_t* data_; ///< Pointer to mapped ELF file data. - size_t size_; ///< Size of the mapped ELF file. - bool include_offsets_; ///< Whether to include offsets in the extraction. - uint64_t base_address_; ///< Base address for relative symbols (0 for ET_DYN, entry point for - ///< ET_EXEC). - std::unordered_set - kExcludedFunctions; ///< Set of functions to exclude from extraction. -}; - -} // namespace datacrumbs -/** - * g++ -std=c++14 elf_capture_test.cpp -o elf_capture_test -lelf - */ diff --git a/src/datacrumbs/explorer/mechanism/header_capture.cpp b/src/datacrumbs/explorer/mechanism/header_capture.cpp deleted file mode 100644 index b558647b..00000000 --- a/src/datacrumbs/explorer/mechanism/header_capture.cpp +++ /dev/null @@ -1,61 +0,0 @@ - -#include -namespace datacrumbs { - -// Constructor: Initializes the extractor with the given header file path. -HeaderFunctionExtractor::HeaderFunctionExtractor(const std::string& headerPath) - : headerPath_(headerPath), index_(nullptr), tu_(nullptr) {} - -// Destructor: Cleans up Clang resources. -HeaderFunctionExtractor::~HeaderFunctionExtractor() { - if (tu_) clang_disposeTranslationUnit(tu_); - if (index_) clang_disposeIndex(index_); -} - -// Extracts all function and method names from the header file. -std::vector HeaderFunctionExtractor::extractFunctionNames() { - DC_LOG_TRACE("HeaderFunctionExtractor::extractFunctionNames - start"); - - std::vector functionNames; - - // Create a Clang index for parsing. - index_ = clang_createIndex(0, 0); - if (!index_) { - DC_LOG_ERROR("Failed to create Clang index."); - return functionNames; - } - - // Parse the translation unit (header file). - tu_ = clang_parseTranslationUnit(index_, headerPath_.c_str(), nullptr, 0, nullptr, 0, - CXTranslationUnit_None); - - if (!tu_) { - DC_LOG_ERROR("Failed to parse translation unit for: %s", headerPath_.c_str()); - return functionNames; - } - - // Visitor data structure to collect function names. - struct VisitorData { - std::vector* names; - } data{&functionNames}; - - // Visit all children in the translation unit to find function and method declarations. - clang_visitChildren( - clang_getTranslationUnitCursor(tu_), - [](CXCursor cursor, CXCursor /*parent*/, CXClientData client_data) { - auto* data = static_cast(client_data); - // Check if the cursor is a function or C++ method declaration. - if (cursor.kind == CXCursor_FunctionDecl || cursor.kind == CXCursor_CXXMethod) { - CXString functionName = clang_getCursorSpelling(cursor); - data->names->emplace_back(clang_getCString(functionName)); - clang_disposeString(functionName); - } - return CXChildVisit_Recurse; - }, - &data); - - DC_LOG_TRACE("HeaderFunctionExtractor::extractFunctionNames - end"); - return functionNames; -} - -} // namespace datacrumbs \ No newline at end of file diff --git a/src/datacrumbs/explorer/mechanism/header_capture.h b/src/datacrumbs/explorer/mechanism/header_capture.h deleted file mode 100644 index cd3e725c..00000000 --- a/src/datacrumbs/explorer/mechanism/header_capture.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include -// dependency headers -#include // Use custom logging macros -// std headers -#include -#include - -namespace datacrumbs { - -/** - * @brief Extracts function names from a given C/C++ header file using libclang. - */ -class HeaderFunctionExtractor { - public: - /** - * @brief Constructs the extractor with the path to the header file. - * @param headerPath Path to the header file to analyze. - */ - HeaderFunctionExtractor(const std::string& headerPath); - - /** - * @brief Destructor to clean up libclang resources. - */ - ~HeaderFunctionExtractor(); - - /** - * @brief Extracts all function names from the header file. - * @return Vector of function names as strings. - */ - std::vector extractFunctionNames(); - - private: - std::string headerPath_; ///< Path to the header file. - CXIndex index_; ///< libclang index object. - CXTranslationUnit tu_; ///< libclang translation unit. -}; - -} // namespace datacrumbs - -/** - * Example compilation command: - * g++ -o extract_functions header_capture_test.cpp `llvm-config --cxxflags --ldflags --system-libs - * --libs core` -lclang - */ diff --git a/src/datacrumbs/explorer/mechanism/ksym_capture.cpp b/src/datacrumbs/explorer/mechanism/ksym_capture.cpp deleted file mode 100644 index 97d28803..00000000 --- a/src/datacrumbs/explorer/mechanism/ksym_capture.cpp +++ /dev/null @@ -1,14 +0,0 @@ -// ksym_capture.cpp -// This file implements the Singleton specialization for KSymCapture. -// It also sets up logging using the datacrumbs logging system. -#include - -// Specialization of the Singleton instance for KSymCapture. -// This holds the shared pointer to the singleton instance. -template <> -std::shared_ptr datacrumbs::Singleton::instance = - nullptr; - -// Specialization of the flag to stop creating new instances of KSymCapture. -template <> -bool datacrumbs::Singleton::stop_creating_instances = false; diff --git a/src/datacrumbs/explorer/mechanism/ksym_capture.h b/src/datacrumbs/explorer/mechanism/ksym_capture.h deleted file mode 100644 index 20492390..00000000 --- a/src/datacrumbs/explorer/mechanism/ksym_capture.h +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include -#include -// std headers -#include -#include -#include -#include -#include -#include -namespace datacrumbs { - -/** - * @brief Class to capture and filter kernel symbol function names from /proc/kallsyms. - */ -class KSymCapture { - public: - /** - * @brief Constructor that loads function symbols from the given kallsyms path. - * @param kallsyms_path Path to the kallsyms file (default: "/proc/kallsyms"). - */ - KSymCapture(const std::string& kallsyms_path = "/proc/kallsyms") { - DC_LOG_TRACE("KSymCapture: Start loading functions from %s", kallsyms_path.c_str()); - loadFunctions(kallsyms_path); - DC_LOG_TRACE("KSymCapture: Finished loading functions from %s", kallsyms_path.c_str()); - } - - /** - * @brief Returns a list of function names matching the given regex pattern. - * @param pattern Regular expression pattern to match function names. - * @return Vector of matching function names. - */ - std::vector getFunctionsByRegex(const std::string& pattern) const { - DC_LOG_TRACE("KSymCapture: Start getFunctionsByRegex with pattern: %s", pattern.c_str()); - std::vector result; - std::regex re(pattern); - for (const auto& func : functions_) { - if (std::regex_search(func, re)) { - result.push_back(func); - } - } - DC_LOG_DEBUG("KSymCapture: Found %zu functions matching pattern '%s'", result.size(), - pattern.c_str()); - DC_LOG_TRACE("KSymCapture: End getFunctionsByRegex"); - return result; - } - std::unordered_set functions_; - - private: ///< List of function names loaded from kallsyms. - /** - * @brief Loads function symbols from the specified kallsyms file. - * Only symbols of type 'T' or 't' are considered functions. - * @param path Path to the kallsyms file. - */ - void loadFunctions(const std::string& path) { - DC_LOG_TRACE("KSymCapture: Enter loadFunctions with path: %s", path.c_str()); - std::ifstream file(path); - if (!file.is_open()) { - DC_LOG_ERROR("KSymCapture: Failed to open kallsyms file: %s", path.c_str()); - return; - } - std::string line; - size_t count = 0; - while (std::getline(file, line)) { - std::istringstream iss(line); - std::string addr, type, name; - if (!(iss >> addr >> type >> name)) continue; - // Only add functions (type 'T' or 't') - if (type == "T" || type == "t") { - functions_.insert(name); - ++count; - } - } - DC_LOG_INFO("KSymCapture: Loaded %zu function symbols from %s", count, path.c_str()); - DC_LOG_TRACE("KSymCapture: Exit loadFunctions"); - } -}; - -} // namespace datacrumbs diff --git a/src/datacrumbs/explorer/mechanism/usdt_functions.h b/src/datacrumbs/explorer/mechanism/usdt_functions.h deleted file mode 100644 index 450cef76..00000000 --- a/src/datacrumbs/explorer/mechanism/usdt_functions.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include // Logging macros -// std headers -#include -#include - -// USDTFunctionExtractor extracts USDT (User-level Statically Defined Tracing) function names -// for a given provider. Currently, only the "python" provider is supported. -class USDTFunctionExtractor { - public: - // Constructor: initializes the extractor with the given provider name. - explicit USDTFunctionExtractor(const std::string& provider) : provider_(provider) { - DC_LOG_TRACE("USDTFunctionExtractor constructed for provider: %s", provider.c_str()); - } - - // Extracts function names for the specified provider. - // Returns a vector of function names if the provider is supported, otherwise returns an empty - // vector. - std::vector extractFunctionNames() const { - DC_LOG_TRACE("extractFunctionNames() called for provider: %s", provider_.c_str()); - if (provider_ == "python") { - DC_LOG_DEBUG("Extracting USDT function names for Python provider"); - return {"function__entry"}; - } else { - DC_LOG_WARN("Provider '%s' is not supported. Returning empty function list.", - provider_.c_str()); - } - return {}; - } - - private: - std::string provider_; // Name of the provider (e.g., "python") -}; \ No newline at end of file diff --git a/src/datacrumbs/explorer/probe_explorer.cpp b/src/datacrumbs/explorer/probe_explorer.cpp deleted file mode 100644 index 12d5c1f0..00000000 --- a/src/datacrumbs/explorer/probe_explorer.cpp +++ /dev/null @@ -1,835 +0,0 @@ - -#include - -namespace datacrumbs { - -// Constructor for ProbeExplorer, initializes the configuration manager singleton -ProbeExplorer::ProbeExplorer(int argc, char** argv) { - DC_LOG_TRACE("ProbeExplorer::ProbeExplorer - start"); - configManager_ = datacrumbs::Singleton::get_instance(argc, argv); - has_invalid_probes_ = false; - DC_LOG_TRACE("ProbeExplorer::ProbeExplorer - end"); -} -std::unordered_map> -ProbeExplorer::Extract_Exclusions() { - DC_LOG_TRACE("ProbeExplorer::validate_exclusion_file - start"); - std::unordered_map> exclusionMap; - if (!configManager_->probe_exclusion_file_path.empty() && - std::filesystem::exists(configManager_->probe_exclusion_file_path)) { - std::ifstream ifs(configManager_->probe_exclusion_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("the %dth element of exclusion file is missing (null pointer returned).", - i); - continue; - } - if (json_object_get_type(probe_obj) == json_type_null) { - DC_LOG_WARN("exclusion file contains explicit JSON null at %dth element.", i); - continue; - } - json_object* name_obj = nullptr; - json_object* funcs_obj = nullptr; - if (json_object_object_get_ex(probe_obj, "name", &name_obj) && - json_object_object_get_ex(probe_obj, "functions", &funcs_obj) && - json_object_get_type(name_obj) == json_type_string && - json_object_get_type(funcs_obj) == json_type_array) { - std::string probe_name = json_object_get_string(name_obj); - std::unordered_set func_set; - 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) { - // check the function name - std::string func_name = json_object_get_string(func_obj); - if (func_name.find('/') != std::string::npos || - func_name.find('\\') != std::string::npos || - func_name.find(' ') != std::string::npos) { - DC_LOG_WARN( - "Exclusion file contains invalid function name '%s' for probe '%s'. Skipping " - "this function.", - func_name.c_str(), probe_name.c_str()); - continue; - } - func_set.insert(json_object_get_string(func_obj)); - } - } - exclusionMap[probe_name] = std::move(func_set); - } else { - DC_LOG_WARN( - "Exclusion file entry at index %d is missing 'name' or 'functions' field, or they " - "are of incorrect type.", - i); - } - } - } else { - DC_LOG_WARN("Exclusion file is not a valid JSON array."); - } - if (jobj) json_object_put(jobj); - } else { - DC_LOG_ERROR("Failed to open exclusion probes file: %s", - configManager_->probe_exclusion_file_path.string().c_str()); - } - } - return exclusionMap; - - DC_LOG_TRACE("ProbeExplorer::validate_exclusion_file - end"); -} -// Extracts probes based on configuration and exclusion file -std::vector> ProbeExplorer::extractProbes() { - DC_LOG_TRACE("ProbeExplorer::extractProbes - start"); - auto exclusionMap = Extract_Exclusions(); - - // Log the contents of the exclusion map for debugging - DC_LOG_DEBUG("Exclusion Map Contents:"); - for (const auto& [probe_name, func_set] : exclusionMap) { - DC_LOG_DEBUG("Probe: %s", probe_name.c_str()); - for (const auto& func : func_set) { - DC_LOG_DEBUG(" Excluded Function: %s", func.c_str()); - } - } - - // Load additional invalid probes from file if specified - if (!configManager_->probe_invalid_file_path.empty() && - std::filesystem::exists(configManager_->probe_invalid_file_path)) { - std::ifstream ifs(configManager_->probe_invalid_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) continue; - json_object* name_obj = nullptr; - json_object* funcs_obj = nullptr; - if (json_object_object_get_ex(probe_obj, "name", &name_obj) && - json_object_object_get_ex(probe_obj, "functions", &funcs_obj) && - json_object_get_type(name_obj) == json_type_string && - json_object_get_type(funcs_obj) == json_type_array) { - std::string probe_name = json_object_get_string(name_obj); - std::unordered_set func_set; - 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) { - func_set.insert(json_object_get_string(func_obj)); - } - } - // Merge with existing exclusion map if present - auto& existing_set = exclusionMap[probe_name]; - existing_set.insert(func_set.begin(), func_set.end()); - } - } - } - if (jobj) json_object_put(jobj); - } else { - DC_LOG_ERROR("Failed to open invalid probes file: %s", - configManager_->probe_invalid_file_path.string().c_str()); - } - } - - auto existingProbesMap = loadExistingProbes(); - - static std::unordered_set global_function_names; - std::vector> probes; - // Iterate over all capture probes from configuration - for (const auto& capture_probe : configManager_->capture_probes) { - std::vector functionNames; - std::shared_ptr probe; - - // Instantiate the correct probe type - switch (capture_probe->probe_type) { - case ProbeType::UPROBE: - probe = std::make_shared(); - break; - case ProbeType::SYSCALLS: - probe = std::make_shared(); - break; - case ProbeType::USDT: - probe = std::make_shared(); - break; - case ProbeType::KPROBE: - probe = std::make_shared(); - break; - case ProbeType::CUSTOM: - probe = std::make_shared(); - break; - default: - 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: - DC_LOG_INFO("Extracting header probes..."); - if (auto headerProbe = std::static_pointer_cast(capture_probe)) { - DC_LOG_DEBUG("Header Name: %s", headerProbe->file.c_str()); - functionNames = HeaderFunctionExtractor(headerProbe->file).extractFunctionNames(); - } - if (capture_probe->probe_type == ProbeType::KPROBE) { - DC_LOG_DEBUG("KPROBE: Extracting symbols from header..."); - const auto& ksym_functions = - datacrumbs::Singleton::get_instance()->functions_; - std::vector validFunctionNames; - for (const auto& name : functionNames) { - if (ksym_functions.find(name) != ksym_functions.end()) { - validFunctionNames.push_back(name); - } else { - DC_LOG_WARN("Function '%s' not found in KSymCapture functions, skipping.", - name.c_str()); - } - } - functionNames = std::move(validFunctionNames); - } - break; - case CaptureType::BINARY: - DC_LOG_INFO("Extracting binary probes..."); - if (auto binaryProbe = std::static_pointer_cast(capture_probe)) { - DC_LOG_DEBUG("Binary Path: %s", binaryProbe->file.c_str()); - functionNames = - ElfSymbolExtractor(binaryProbe->file, binaryProbe->include_offsets).extract_symbols(); - if (capture_probe->probe_type == ProbeType::UPROBE) { - DC_LOG_DEBUG("UPROBE: Extracting symbols from binary..."); - if (auto uprobe = std::dynamic_pointer_cast(probe)) { - uprobe->binary_path = binaryProbe->file; - uprobe->include_offsets = binaryProbe->include_offsets; - } - } - } - break; - case CaptureType::USDT: - DC_LOG_INFO("Extracting USDT probes..."); - if (auto usdtProbe = std::static_pointer_cast(capture_probe)) { - if (capture_probe->probe_type == ProbeType::USDT) { - DC_LOG_DEBUG("USDT: Extracting symbols from binary..."); - if (auto usdt_probe = std::dynamic_pointer_cast(probe)) { - usdt_probe->binary_path = usdtProbe->binary_path; - usdt_probe->provider = usdtProbe->provider; - - functionNames = USDTFunctionExtractor(usdtProbe->provider).extractFunctionNames(); - } - } - } - break; - case CaptureType::KSYM: - DC_LOG_INFO("Extracting kernel symbol probes..."); - if (auto ksymProbe = std::static_pointer_cast(capture_probe)) { - functionNames = datacrumbs::Singleton::get_instance()->getFunctionsByRegex( - ksymProbe->regex); - } - break; - case CaptureType::CUSTOM: - DC_LOG_INFO("Extracting custom probes..."); - if (auto customProbe = std::static_pointer_cast(capture_probe)) { - // Load custom BPF file and extract functions - if (!std::filesystem::exists(customProbe->bpf_file)) { - DC_LOG_ERROR("Custom BPF file does not exist: %s", customProbe->bpf_file.c_str()); - has_invalid_probes_ = true; - continue; // Skip this probe if the file is missing - } - if (!std::filesystem::exists(customProbe->probe_file)) { - DC_LOG_ERROR("Custom probe file does not exist: %s", customProbe->probe_file.c_str()); - has_invalid_probes_ = true; - continue; // Skip this probe if the file is missing - } - if (!std::filesystem::exists(customProbe->process_header)) { - DC_LOG_ERROR("Custom process header file does not exist: %s", - customProbe->process_header.c_str()); - has_invalid_probes_ = true; - continue; // Skip this probe if the file is missing - } - std::ifstream probe_ifs(customProbe->probe_file); - if (!probe_ifs.is_open()) { - DC_LOG_ERROR("Failed to open custom probe file: %s", customProbe->probe_file.c_str()); - break; - } - std::string probe_content((std::istreambuf_iterator(probe_ifs)), - std::istreambuf_iterator()); - json_object* probe_jobj = json_tokener_parse(probe_content.c_str()); - if (probe_jobj && json_object_get_type(probe_jobj) == json_type_array) { - int arr_len = json_object_array_length(probe_jobj); - for (int i = 0; i < arr_len; ++i) { - json_object* entry = json_object_array_get_idx(probe_jobj, i); - if (!entry) continue; - json_object* funcs_obj = nullptr; - if (json_object_object_get_ex(entry, "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) { - functionNames.push_back(json_object_get_string(func_obj)); - } - } - } - } - } - if (probe_jobj) json_object_put(probe_jobj); - if (auto custom_probe = std::dynamic_pointer_cast(probe)) { - custom_probe->bpf_path = customProbe->bpf_file; - custom_probe->start_event_id = customProbe->start_event_id; - custom_probe->process_header = customProbe->process_header; - custom_probe->event_type = customProbe->event_type; - } - } - break; - default: - DC_LOG_WARN("Unknown capture type encountered!"); - } - - // Filter function names by regex if specified - if (!capture_probe->regex.empty()) { - std::regex re(capture_probe->regex, std::regex_constants::icase); - std::vector filteredNames; - for (const auto& name : functionNames) { - if (std::regex_match(name, re)) { - filteredNames.push_back(name); - } - } - functionNames = std::move(filteredNames); - } - - probe->name = capture_probe->name; - - // For syscall probes, strip "sys_" prefix - if (capture_probe->probe_type == ProbeType::SYSCALLS) { - for (auto& name : functionNames) { - if (name.rfind("sys_", 0) == 0) { - name = name.substr(4); - } - } - } - - // Exclude functions as per exclusion map - if (!exclusionMap.empty()) { - auto it = exclusionMap.find(capture_probe->name); - if (it != exclusionMap.end()) { - const auto& excludedFuncs = it->second; - std::vector filteredNames; - for (const auto& name : functionNames) { - auto pos = name.find(':'); - std::string base_name = (pos != std::string::npos) ? name.substr(0, pos) : name; - if (excludedFuncs.find(name) == excludedFuncs.end() && - excludedFuncs.find(base_name) == excludedFuncs.end()) { - filteredNames.push_back(name); - } else { - DC_LOG_INFO("Excluding function '%s' from probe '%s' as per exclusion list.", - name.c_str(), capture_probe->name.c_str()); - } - } - functionNames = std::move(filteredNames); - } - } - if (capture_probe->probe_type != ProbeType::CUSTOM) { - std::sort(functionNames.begin(), functionNames.end()); - } - - switch (capture_probe->type) { - case CaptureType::HEADER: { - DC_LOG_INFO("Deduplicating header probes..."); - std::vector validFunctionNames; - for (const auto& name : functionNames) { - DC_LOG_INFO("[ProbeExplorer] Function name '%s' from %s.", name.c_str(), - capture_probe->name.c_str()); - auto combined_name = name; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeExplorer] Function name '%s' already processed. Skipping duplicate " - "from %s.", - name.c_str(), capture_probe->name.c_str()); - continue; - } - validFunctionNames.push_back(name); - } - functionNames = std::move(validFunctionNames); - - break; - } - case CaptureType::BINARY: { - DC_LOG_INFO("Deduplicating binary probes..."); - if (auto binaryProbe = std::static_pointer_cast(capture_probe)) { - if (capture_probe->probe_type == ProbeType::UPROBE) { - std::vector validFunctionNames; - for (const auto& name : functionNames) { - auto combined_name = binaryProbe->file + "_" + name; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeExplorer] Function name '%s' already processed. Skipping duplicate " - "from %s.", - name.c_str(), capture_probe->name.c_str()); - continue; - } - validFunctionNames.push_back(name); - } - functionNames = std::move(validFunctionNames); - } - } - break; - } - case CaptureType::USDT: { - DC_LOG_INFO("Deduplicating USDT probes..."); - if (auto usdtProbe = std::static_pointer_cast(capture_probe)) { - if (capture_probe->probe_type == ProbeType::USDT) { - std::vector validFunctionNames; - for (const auto& name : functionNames) { - auto combined_name = usdtProbe->binary_path + "_" + usdtProbe->provider + "_" + name; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeExplorer] Function name '%s' already processed. Skipping duplicate " - "from %s.", - name.c_str(), capture_probe->name.c_str()); - continue; - } - validFunctionNames.push_back(name); - } - functionNames = std::move(validFunctionNames); - } - } - break; - } - case CaptureType::KSYM: { - DC_LOG_INFO("Deduplicating kernel symbol probes..."); - if (auto ksymProbe = std::static_pointer_cast(capture_probe)) { - std::vector validFunctionNames; - for (const auto& name : functionNames) { - auto combined_name = name; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeExplorer] Function name '%s' already processed. Skipping duplicate " - "from %s.", - name.c_str(), capture_probe->name.c_str()); - continue; - } - validFunctionNames.push_back(name); - } - functionNames = std::move(validFunctionNames); - } - break; - } - case CaptureType::CUSTOM: { - DC_LOG_INFO("Deduplicating custom probes..."); - std::vector validFunctionNames; - for (const auto& name : functionNames) { - DC_LOG_DEBUG("[ProbeExplorer] Function name '%s' from %s.", name.c_str(), - capture_probe->name.c_str()); - auto combined_name = name; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeExplorer] Function name '%s' already processed. Skipping duplicate " - "from %s.", - name.c_str(), capture_probe->name.c_str()); - continue; - } - validFunctionNames.push_back(name); - } - functionNames = std::move(validFunctionNames); - break; - } - default: - DC_LOG_WARN("Unknown capture type encountered!"); - } - - probe->functions = functionNames; - - // Validate the probe before adding - if (!probe->validate()) { - DC_LOG_ERROR("Probe validation failed for: %s", probe->name.c_str()); - has_invalid_probes_ = true; - continue; // Skip invalid probes - } - DC_LOG_INFO("Valid probe extracted: %s", probe->name.c_str()); - probes.push_back(probe); - } - if (has_invalid_probes_) { - DC_LOG_ERROR("One or more probes failed validation. Please check the logs above."); - } - DC_LOG_TRACE("ProbeExplorer::extractProbes - end"); - return probes; -} -void ProbeExplorer::create_exclusion_file(std::vector> probes) { - DC_LOG_TRACE("ProbeExplorer::create_exclusion_file - start"); - json_object* jexarray = json_object_new_array(); - // Serialize each probe to JSON without functions - for (const auto& probe : probes) { - json_object* jexclude = nullptr; - switch (probe->type) { - case ProbeType::SYSCALLS: - jexclude = std::dynamic_pointer_cast(probe)->toJson(false); - break; - case ProbeType::KPROBE: - jexclude = std::dynamic_pointer_cast(probe)->toJson(false); - break; - case ProbeType::UPROBE: - jexclude = std::dynamic_pointer_cast(probe)->toJson(false); - break; - case ProbeType::USDT: - jexclude = std::dynamic_pointer_cast(probe)->toJson(false); - break; - case ProbeType::CUSTOM: - jexclude = std::dynamic_pointer_cast(probe)->toJson(false); - break; - default: - DC_LOG_ERROR("Unknown probe type encountered."); - continue; // Skip unknown types - } - if (!jexclude) { - DC_LOG_ERROR("Failed to serialize probe for exclusion: %s", probe->name.c_str()); - continue; // Skip serialization failure - } - json_object_array_add(jexarray, jexclude); - } - if (!configManager_->probe_exclusion_file_path.empty() && - !std::filesystem::exists(configManager_->probe_exclusion_file_path)) { - const char* exclude_json_str = - json_object_to_json_string_ext(jexarray, JSON_C_TO_STRING_PRETTY); - std::ofstream ofs(configManager_->probe_exclusion_file_path); - if (ofs.is_open()) { - ofs << exclude_json_str; - ofs.close(); - } else { - DC_LOG_ERROR("Failed to open file: %s", configManager_->probe_exclusion_file_path.c_str()); - } - } - - 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"); - auto probes = extractProbes(); - if (probes.empty()) { - DC_LOG_WARN("No valid probes extracted. Skipping JSON write."); - return probes; - } - if (!configManager_->probe_exclusion_file_path.empty() && - !std::filesystem::exists(configManager_->probe_exclusion_file_path)) { - create_exclusion_file(probes); - } - json_object* jarray = json_object_new_array(); - - // Serialize each probe to JSON - for (const auto& probe : probes) { - json_object* jprobe = nullptr; - switch (probe->type) { - case ProbeType::SYSCALLS: - jprobe = std::dynamic_pointer_cast(probe)->toJson(); - break; - case ProbeType::KPROBE: - jprobe = std::dynamic_pointer_cast(probe)->toJson(); - break; - case ProbeType::UPROBE: - jprobe = std::dynamic_pointer_cast(probe)->toJson(); - break; - case ProbeType::USDT: - jprobe = std::dynamic_pointer_cast(probe)->toJson(); - break; - case ProbeType::CUSTOM: - jprobe = std::dynamic_pointer_cast(probe)->toJson(); - break; - default: - DC_LOG_ERROR("Unknown probe type encountered."); - continue; // Skip unknown types - } - if (!jprobe) { - DC_LOG_ERROR("Failed to serialize probe: %s", probe->name.c_str()); - continue; // Skip serialization failure - } - json_object_array_add(jarray, jprobe); - } - - // Write JSON to file - const char* json_str = json_object_to_json_string_ext(jarray, JSON_C_TO_STRING_PRETTY); - - std::ofstream ofs(configManager_->probe_file_path); - if (ofs.is_open()) { - ofs << json_str; - ofs.close(); - } else { - DC_LOG_ERROR("Failed to open file: %s", configManager_->probe_file_path.c_str()); - } - - json_object_put(jarray); // free memory - DC_LOG_TRACE("ProbeExplorer::writeProbesToJson - end"); - return probes; -} - -} // namespace datacrumbs - -/** - * Example usage: - * g++ -std=c++14 /home/haridev/datacrumbs/src/datacrumbs/common/configuration_manager.cpp - * probe_explorer_test.cpp probe_explorer.cpp mechanism/ksym_capture.cpp -o probe_explorer_test - * -I/home/haridev/datacrumbs/src -lelf `llvm-config --cxxflags --ldflags --system-libs --libs - * core` -lclang -lyaml-cpp - */ - -// Main function to run the probe explorer and print extracted probes -int main(int argc, char** argv) { - DC_LOG_TRACE("main - start"); - datacrumbs::utils::Timer timer; // Create timer instance - timer.resumeTime(); // Start timing - - datacrumbs::ProbeExplorer explorer(argc, argv); - auto probes = explorer.writeProbesToJson(); - - // Print probe names and a sample of their functions - for (const auto& probe : probes) { - DC_LOG_INFO("Probe: %s", probe->name.c_str()); - int i = 0; - for (const auto& value : probe->functions) { - DC_LOG_DEBUG(" Value: %s", value.c_str()); - if (i++ > 10) { - DC_LOG_DEBUG(" ... (truncated)"); - break; - } - } - } - - timer.pauseTime(); // Stop timer and accumulate elapsed time - DC_LOG_PRINT("Elapsed time in Probe Explorer: %f seconds", timer.getElapsedTime()); - DC_LOG_TRACE("main - end"); - if (explorer.has_invalid_probes_) { - DC_LOG_ERROR("Probe exploration completed with errors due to invalid probes."); - return 1; // Indicate error due to invalid probes - } - return 0; -} \ No newline at end of file diff --git a/src/datacrumbs/explorer/probe_explorer.h b/src/datacrumbs/explorer/probe_explorer.h deleted file mode 100644 index 2ec25b4a..00000000 --- a/src/datacrumbs/explorer/probe_explorer.h +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include -#include -#include // Use custom logging macros -#include -#include -#include -#include -#include -#include - -// dependency libraries -#include - -// std headers -#include -#include -#include -#include -#include -#include - -namespace datacrumbs { - -// ProbeExplorer class is responsible for extracting and writing probes -class ProbeExplorer { - public: - // Constructor: Initializes ProbeExplorer with command-line arguments - ProbeExplorer(int argc, char** argv); - // Extracts exclusion mappings and check for invalid entries - // Returns a map of probe names to sets of function names to be excluded - std::unordered_map> Extract_Exclusions(); - // Extracts probes from a given data source (dummy implementation) - // Returns a vector of shared pointers to Probe objects - std::vector> extractProbes(); - // Creates an exclusion file from the provided probes if the file does not exist - void create_exclusion_file(std::vector> probes); - // Writes extracted probes to a JSON file - // 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: - // Configuration manager instance for managing configuration settings - std::shared_ptr configManager_; -}; - -} // namespace datacrumbs diff --git a/src/datacrumbs/generator/generator.cpp b/src/datacrumbs/generator/generator.cpp deleted file mode 100644 index b92dcdb5..00000000 --- a/src/datacrumbs/generator/generator.cpp +++ /dev/null @@ -1,346 +0,0 @@ - -#include -namespace datacrumbs { - -// Constructor for ProbeGenerator -ProbeGenerator::ProbeGenerator(int argc, char** argv) : eventIdCounter_(1000) { - // Initialize ConfigurationManager singleton - configManager_ = datacrumbs::Singleton::get_instance(argc, argv); -} -int ProbeGenerator::run() { - DC_LOG_TRACE("[ProbeGenerator] Starting run()"); - - if (!configManager_) { - DC_LOG_ERROR("ConfigurationManager is not initialized."); - return -1; - } - json_object* jarray = json_object_new_array(); - // Global set to track unique function names - static std::unordered_set global_function_names; - - // Get probes file path from configuration - const auto& probesFile = configManager_->probe_file_path; - DC_LOG_INFO("[ProbeGenerator] Reading probes file: %s", probesFile.c_str()); - - // Read probes JSON file - struct json_object* probesJson = json_object_from_file(probesFile.c_str()); - if (!probesJson) { - DC_LOG_ERROR("Failed to read probes file: %s", probesFile.c_str()); - return -1; - } - - auto probe_files = std::vector(); - auto process_headers = std::vector(); - int arr_len = json_object_array_length(probesJson); - DC_LOG_INFO("[ProbeGenerator] Number of probes: %d", arr_len); - - // Track total number of generated probes - size_t total_probes_generated = 0; - update_event("M", "SH", 0); - update_event(DATACRUMBS_PROBE_CATEGORY, START_FUNCTION_NAME, START_EVENT_ID); - update_event(DATACRUMBS_PROBE_CATEGORY, END_FUNCTION_NAME, END_EVENT_ID); - bool manual_probe_added = false; - // Iterate over each probe in the JSON array - for (int i = 0; i < arr_len; ++i) { - struct json_object* jprobe = json_object_array_get_idx(probesJson, i); - auto probe = Probe::fromJson(jprobe); - std::shared_ptr manual_probe; - switch (probe.type) { - case ProbeType::UPROBE: - manual_probe = std::make_shared(UProbe::fromJson(jprobe)); - break; - case ProbeType::SYSCALLS: - manual_probe = std::make_shared(SysCallProbe::fromJson(jprobe)); - break; - case ProbeType::USDT: - manual_probe = std::make_shared(USDTProbe::fromJson(jprobe)); - break; - case ProbeType::KPROBE: - manual_probe = std::make_shared(KProbe::fromJson(jprobe)); - break; - case ProbeType::CUSTOM: - manual_probe = std::make_shared(CustomProbe::fromJson(jprobe)); - break; - default: - DC_LOG_ERROR("Unknown probe type encountered in extractProbes()"); - throw std::runtime_error("Unknown probe type encountered in extractProbes()"); - } - manual_probe->functions.clear(); // Clear functions for manual probe - DC_LOG_INFO("[ProbeGenerator] Processing probe: %s", probe.name.c_str()); - - std::stringstream ss; - ss << "#include " << std::endl; - - // Iterate over each function in the probe - for (size_t func_index = 0; func_index < probe.functions.size(); ++func_index) { - const auto& func = probe.functions[func_index]; - - int current_event_id = 1000; - if (probe.type != ProbeType::CUSTOM) { - current_event_id = this->eventIdCounter_++; - } else { - auto custom = CustomProbe::fromJson(jprobe); - current_event_id = custom.start_event_id + func_index; - } - - // Map event id to probe name and function name - struct json_object* info = json_object_new_object(); - json_object_object_add(info, "probe_name", json_object_new_string(probe.name.c_str())); - json_object_object_add(info, "function_name", json_object_new_string(func.c_str())); - categoryMap_[current_event_id] = info; - - // Generate code based on probe type - switch (probe.type) { - case ProbeType::KPROBE: { - auto combined_name = func; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeGenerator] Function name '%s' already processed. Skipping duplicate from " - "%s.", - func.c_str(), probe.name.c_str()); - continue; - } - DC_LOG_DEBUG("[ProbeGenerator] Using KProbeGenerator for function: %s (event_id: %d)", - func.c_str(), current_event_id); - KProbeGenerator generator(current_event_id, func); - ss << generator.generate().str() << std::endl; - break; - } - case ProbeType::UPROBE: { - DC_LOG_DEBUG("[ProbeGenerator] Using UProbeGenerator for function: %s (event_id: %d)", - func.c_str(), current_event_id); - auto uprobe = UProbe::fromJson(jprobe); - std::string function_name, offset; - auto pos = func.find(':'); - bool is_manual = false; - if (pos != std::string::npos) { - function_name = func.substr(0, pos); - offset = func.substr(pos + 1); - is_manual = true; - } else { - function_name = func; - offset = ""; - } - auto combined_name = uprobe.binary_path + "_" + function_name + "_" + offset; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeGenerator] Function name '%s' already processed. Skipping duplicate from " - "%s.", - func.c_str(), probe.name.c_str()); - continue; - } - if (is_manual) { - DC_LOG_DEBUG("[ProbeGenerator] Adding manual uprobe for function: %s", func.c_str()); - manual_probe->functions.push_back(std::to_string(current_event_id)); - } - // if (!uprobe.include_offsets) offset = ""; - UProbeGenerator uprobe_gen(current_event_id, function_name, offset, uprobe.binary_path, - is_manual); - ss << uprobe_gen.generate().str() << std::endl; - break; - } - case ProbeType::SYSCALLS: { - DC_LOG_DEBUG("[ProbeGenerator] Using SyscallGenerator for function: %s (event_id: %d)", - func.c_str(), current_event_id); - SyscallGenerator syscall_gen(current_event_id, func); - auto combined_name = func; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeGenerator] Function name '%s' already processed. Skipping duplicate from " - "%s.", - func.c_str(), probe.name.c_str()); - continue; - } - ss << syscall_gen.generate().str() << std::endl; - - break; - } - case ProbeType::USDT: { - DC_LOG_DEBUG("[ProbeGenerator] Using USDTGenerator for function: %s (event_id: %d)", - func.c_str(), current_event_id); - auto usdt = USDTProbe::fromJson(jprobe); - auto combined_name = usdt.binary_path + "_" + usdt.provider + "_" + func; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeGenerator] Function name '%s' already processed. Skipping duplicate from " - "%s.", - func.c_str(), probe.name.c_str()); - continue; - } - USDTGenerator usdt_gen(current_event_id, func, usdt.binary_path, usdt.provider); - ss << usdt_gen.generate().str() << std::endl; - } break; - case ProbeType::CUSTOM: { - auto combined_name = func; - // Check and insert into global set to avoid duplicates - if (!global_function_names.insert(combined_name).second) { - DC_LOG_WARN( - "[ProbeGenerator] Function name '%s' already processed. Skipping duplicate from " - "%s.", - func.c_str(), probe.name.c_str()); - continue; - } - } break; - default: { - DC_LOG_ERROR("Unknown probe type: %d", static_cast(probe.type)); - } - } - // Increment total probes generated - ++total_probes_generated; - } - if (manual_probe != nullptr && !manual_probe->functions.empty()) { - DC_LOG_INFO("[ProbeGenerator] Manual probe for %d functions added for probe: %s", - manual_probe->functions.size(), probe.name.c_str()); - manual_probe_added = true; - json_object* manual_jprobe = nullptr; - switch (manual_probe->type) { - case ProbeType::SYSCALLS: - manual_jprobe = std::dynamic_pointer_cast(manual_probe)->toJson(); - break; - case ProbeType::KPROBE: - manual_jprobe = std::dynamic_pointer_cast(manual_probe)->toJson(); - break; - case ProbeType::UPROBE: { - auto manual_uprobe = std::dynamic_pointer_cast(manual_probe); - DC_LOG_DEBUG("[ProbeGenerator] Adding manual uprobe for function: %s", - manual_uprobe->binary_path.c_str()); - manual_jprobe = manual_uprobe->toJson(); - break; - } - case ProbeType::USDT: - manual_jprobe = std::dynamic_pointer_cast(manual_probe)->toJson(); - break; - case ProbeType::CUSTOM: - manual_jprobe = std::dynamic_pointer_cast(manual_probe)->toJson(); - break; - default: - DC_LOG_ERROR("Unknown probe type encountered."); - continue; // Skip unknown types - } - json_object_array_add(jarray, manual_jprobe); - } - if (probe.type == ProbeType::CUSTOM) { - auto custom = CustomProbe::fromJson(jprobe); - probe_files.push_back(custom.bpf_path); - process_headers.push_back(custom.process_header); - ss << "#include \"" << custom.bpf_path << "\"" << std::endl; - } - // Write generated code to file - const char* gen_path = DATACRUMBS_SRC_GEN_PATH; - if (!gen_path) { - DC_LOG_ERROR("DATACRUMBS_SRC_GEN_PATH environment variable not set."); - } else { - std::filesystem::path dir = std::filesystem::path(gen_path) / "server/bpf/src"; - std::filesystem::create_directories(dir); - std::string filename = (dir / (probe.name + ".bpf.c")).string(); - std::ofstream out(filename); - if (!out) { - DC_LOG_ERROR("Failed to open file for writing: %s", filename.c_str()); - } else { - out << ss.str(); - out.close(); - probe_files.push_back(probe.name + ".bpf.c"); - DC_LOG_INFO("[ProbeGenerator] Generated %zu functions file: %s", probe.functions.size(), - filename.c_str()); - } - } - } - if (manual_probe_added) { - // Write JSON to file - const char* json_str = json_object_to_json_string_ext(jarray, JSON_C_TO_STRING_PRETTY); - - std::ofstream ofs(configManager_->manual_probe_path); - if (ofs.is_open()) { - ofs << json_str; - ofs.close(); - } else { - DC_LOG_ERROR("Failed to open file: %s", configManager_->manual_probe_path.c_str()); - } - - json_object_put(jarray); // free memory - DC_LOG_TRACE("ProbeExplorer::writeProbesToJson - end"); - } else { - DC_LOG_INFO("No manual probes were added."); - // Remove existing manual probe file if it exists - std::error_code ec; - if (std::filesystem::exists(configManager_->manual_probe_path, ec)) { - std::filesystem::remove(configManager_->manual_probe_path, ec); - if (ec) { - DC_LOG_ERROR("Failed to remove file: %s", configManager_->manual_probe_path.c_str()); - } else { - DC_LOG_INFO("Removed existing manual probe file: %s", - configManager_->manual_probe_path.c_str()); - } - } - } - // Append all generated probe files as includes to generated.bpf.c - const char* gen_path = DATACRUMBS_SRC_GEN_PATH; - if (gen_path) { - std::filesystem::create_directories(std::filesystem::path(gen_path) / "server/process"); - std::string generated_process_filename = - (std::filesystem::path(gen_path) / "server/process" / "generated_process.h").string(); - std::ofstream generated_process_out(generated_process_filename); - if (!generated_process_out) { - DC_LOG_ERROR("Failed to open file for writing: %s", generated_process_filename.c_str()); - } else { - for (const auto& process_header : process_headers) { - generated_process_out << "#include \"" << process_header << "\"" << std::endl; - } - generated_process_out.close(); - DC_LOG_INFO("[ProbeGenerator] All process headers included in: %s", - generated_process_filename.c_str()); - } - } - - // Clean up JSON object - json_object_put(probesJson); - - DC_LOG_INFO("[ProbeGenerator] Writing category map..."); - writeCategoryMap(); - // Print total number of probes generated - DC_LOG_PRINT("[ProbeGenerator] Total number of probes generated: %zu", total_probes_generated); - DC_LOG_TRACE("[ProbeGenerator] run() completed."); - return total_probes_generated; -} - -// Writes the category map to a JSON file -void ProbeGenerator::writeCategoryMap() { - const auto& categoryMapFile = configManager_->category_map_path; - struct json_object* outJson = json_object_new_object(); - - // Add each eventId and its info to the JSON object - for (const auto& [eventId, info] : categoryMap_) { - char key[32]; - snprintf(key, sizeof(key), "%d", eventId); - json_object_object_add(outJson, key, json_object_get(info)); - } - - // Write JSON to file - json_object_to_file_ext(categoryMapFile.c_str(), outJson, JSON_C_TO_STRING_PRETTY); - json_object_put(outJson); - - // Free info objects - for (auto& [_, info] : categoryMap_) { - json_object_put(info); - } -} - -} // namespace datacrumbs - -// Entry point for the generator -int main(int argc, char** argv) { - datacrumbs::utils::Timer timer; - timer.resumeTime(); - - datacrumbs::ProbeGenerator generator(argc, argv); - generator.run(); - - timer.pauseTime(); - DC_LOG_PRINT("Total time elapsed for Probe Generator: %f seconds", timer.getElapsedTime()); - - return 0; -} \ No newline at end of file diff --git a/src/datacrumbs/generator/generator.h b/src/datacrumbs/generator/generator.h deleted file mode 100644 index 40f48589..00000000 --- a/src/datacrumbs/generator/generator.h +++ /dev/null @@ -1,92 +0,0 @@ -#pragma once - -// include first -#include -// other headers -// Include necessary headers for configuration, data structures, enumerations, and probe generators -#include -#include -#include -#include -#include // Added for logging macros -#include -#include -#include -#include -#include -#include - -// dependency headers -#include -// std headers -#include -#include -#include -#include -#include - -namespace datacrumbs { - -/** - * @brief ProbeGenerator is responsible for generating probes based on configuration and input - * files. - */ -class ProbeGenerator { - public: - /** - * @brief Constructor for ProbeGenerator. - * @param argc Argument count from main. - * @param argv Argument vector from main. - */ - ProbeGenerator(int argc, char** argv); - - /** - * @brief Main entry point to run the probe generation process. - * This method reads the configuration, processes the probes file, - * generates probe files, and writes the category map. - * @return Total number of probes generated. - */ - int run(); - - private: - // Shared pointer to the configuration manager - std::shared_ptr configManager_; - - /** - * @brief Helper function to extract a string value from a JSON object by key. - * @param obj JSON object to extract from. - * @param key Key to look up in the JSON object. - * @return Pointer to the string value, or nullptr if not found. - */ - static const char* get_string_from_json(struct json_object* obj, const char* key) { - struct json_object* val = nullptr; - if (json_object_object_get_ex(obj, key, &val) && json_object_is_type(val, json_type_string)) { - return json_object_get_string(val); - } - return nullptr; - } - - /** - * @brief Writes the category map to the output file. - */ - void writeCategoryMap(); - - int update_event(const std::string& probe_name, const std::string& function_name, int event_id) { - struct json_object* info = json_object_new_object(); - json_object_object_add(info, "probe_name", json_object_new_string(probe_name.c_str())); - json_object_object_add(info, "function_name", json_object_new_string(function_name.c_str())); - categoryMap_[event_id] = info; - return 0; - } - - // Path to the probes file - std::string probesFile_; - // Path to the category map file - std::string categoryMapFile_; - // Counter for event IDs - int eventIdCounter_; - // Map from event ID to JSON object representing the category - std::unordered_map categoryMap_; -}; - -} // namespace datacrumbs diff --git a/src/datacrumbs/generator/mechanisms/kprobe_generator.h b/src/datacrumbs/generator/mechanisms/kprobe_generator.h deleted file mode 100644 index 47d77924..00000000 --- a/src/datacrumbs/generator/mechanisms/kprobe_generator.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include // Logging macros -// std headers -#include -#include -#include -#include -namespace datacrumbs { - -/** - * @brief Generates kprobe and kretprobe BPF program code for a given function. - * - * This class is responsible for generating the C code for attaching kprobes and - * kretprobes to kernel functions. The generated code uses sanitized function names - * to ensure valid identifiers. - */ -class KProbeGenerator { - public: - /** - * @brief Constructor for KProbeGenerator. - * @param event_id Unique identifier for the event. - * @param func_name Name of the kernel function to probe. - */ - KProbeGenerator(int event_id, const std::string& func_name) - : event_id_(event_id), func_name_(func_name) { - DC_LOG_TRACE("KProbeGenerator::KProbeGenerator(event_id=%d, func_name=%s) - start", event_id, - func_name.c_str()); - DC_LOG_DEBUG("Initialized KProbeGenerator with event_id=%d and func_name=%s", event_id, - func_name.c_str()); - DC_LOG_TRACE("KProbeGenerator::KProbeGenerator - end"); - } - - /** - * @brief Generates the kprobe and kretprobe code as a stringstream. - * @return std::stringstream containing the generated code. - */ - std::stringstream generate() const { - DC_LOG_TRACE("KProbeGenerator::generate() - start"); - // Sanitize function name for use in identifiers - std::string sanitized_func_name = func_name_.substr(0, 10); - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '.', '_'); - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '@', '_'); - DC_LOG_DEBUG("Sanitized function name: %s", sanitized_func_name.c_str()); - - std::stringstream ss; - // Generate kprobe entry code - ss << "SEC(\"kprobe/" << func_name_ << "\")\n"; - ss << "int BPF_KPROBE(" << sanitized_func_name << event_id_ << "_entry) {\n"; - ss << " generic_entry(ctx, " << event_id_ << ");\n"; - ss << " return 0;\n"; - ss << "}\n"; - bool is_fork = std::regex_search(func_name_, std::regex(".*fork.*")); - std::string exit_func; - if (is_fork) { - exit_func = "generic_fork_exit"; - } else { - exit_func = "generic_exit"; - } - // Generate kretprobe exit code - ss << "SEC(\"kretprobe/" << func_name_ << "\")\n"; - ss << "int BPF_KRETPROBE(" << sanitized_func_name << event_id_ << "_exit) {\n"; - ss << " " << exit_func << "(ctx, " << event_id_ << ");\n"; - ss << " return 0;\n"; - ss << "}\n"; - - DC_LOG_DEBUG("Generated kprobe and kretprobe code for function: %s (event_id=%d)", - func_name_.c_str(), event_id_); - DC_LOG_TRACE("KProbeGenerator::generate() - end"); - return ss; - } - - private: - int event_id_; ///< Unique identifier for the event - std::string func_name_; ///< Name of the kernel function to probe -}; - -} // namespace datacrumbs \ No newline at end of file diff --git a/src/datacrumbs/generator/mechanisms/syscall_generator.h b/src/datacrumbs/generator/mechanisms/syscall_generator.h deleted file mode 100644 index d612fcc4..00000000 --- a/src/datacrumbs/generator/mechanisms/syscall_generator.h +++ /dev/null @@ -1,76 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include // Logging macros -// std headers -#include -#include -#include -#include -namespace datacrumbs { - -/** - * @brief Generates BPF syscall probe code for a given function name and event ID. - */ -class SyscallGenerator { - public: - /** - * @brief Constructor for SyscallGenerator. - * @param event_id Unique identifier for the event. - * @param func_name Name of the syscall function to generate probes for. - */ - SyscallGenerator(int event_id, const std::string& func_name) - : event_id_(event_id), func_name_(func_name) { - DC_LOG_TRACE("SyscallGenerator::SyscallGenerator(event_id=%d, func_name=%s) - start", event_id, - func_name.c_str()); - // No additional initialization required. - DC_LOG_TRACE("SyscallGenerator::SyscallGenerator - end"); - } - - /** - * @brief Generates the BPF probe code as a stringstream. - * @return std::stringstream containing the generated code. - */ - std::stringstream generate() const { - DC_LOG_TRACE("SyscallGenerator::generate() - start"); - std::string sanitized_func_name = func_name_.substr(0, 10); - // Replace '.' and '@' with '_' to sanitize function name for use in identifiers. - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '.', '_'); - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '@', '_'); - - std::stringstream ss; - // Generate entry probe - ss << "SEC(\"ksyscall/" << func_name_ << "\")\n"; - ss << "int BPF_KSYSCALL(" << sanitized_func_name << event_id_ - << "_entry, struct pt_regs* regs) {\n"; - ss << " generic_entry(ctx, " << event_id_ << ");\n"; - ss << " return 0;\n"; - ss << "}\n"; - // Generate return probe - bool is_fork = std::regex_search(func_name_, std::regex(".*fork.*")); - std::string exit_func; - if (is_fork) { - exit_func = "generic_fork_exit"; - } else { - exit_func = "generic_exit"; - } - ss << "SEC(\"kretsyscall/" << func_name_ << "\")\n"; - ss << "int BPF_KRETPROBE(" << sanitized_func_name << event_id_ - << "_exit, struct pt_regs* regs) {\n"; - ss << " " << exit_func << "(ctx, " << event_id_ << ");\n"; - ss << " return 0;\n"; - ss << "}\n"; - - DC_LOG_DEBUG("Generated BPF probe code for function '%s' with event_id %d", func_name_.c_str(), - event_id_); - DC_LOG_TRACE("SyscallGenerator::generate() - end"); - return ss; - } - - private: - int event_id_; ///< Unique identifier for the event. - std::string func_name_; ///< Name of the syscall function. -}; - -} // namespace datacrumbs \ No newline at end of file diff --git a/src/datacrumbs/generator/mechanisms/uprobe_generator.h b/src/datacrumbs/generator/mechanisms/uprobe_generator.h deleted file mode 100644 index 347ccd8a..00000000 --- a/src/datacrumbs/generator/mechanisms/uprobe_generator.h +++ /dev/null @@ -1,97 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include // Logging macros -// std headers -#include -#include -#include -#include -namespace datacrumbs { - -/** - * @brief Generates eBPF uprobe and uretprobe function code for a given function. - * - * This class is responsible for generating the C code for attaching uprobes and uretprobes - * to a specified function, using the provided event id, function name, offset, and provider. - */ -class UProbeGenerator { - public: - /** - * @brief Constructor for UProbeGenerator. - * @param event_id Unique identifier for the event. - * @param func_name Name of the function to probe. - * @param offset Offset within the function (currently unused). - * @param provider Name of the provider (e.g., binary or library). - */ - UProbeGenerator(int event_id, const std::string& func_name, const std::string& offset, - const std::string& provider, bool is_manual = false) - : event_id_(event_id), - func_name_(func_name), - offset_(offset), - provider_(provider), - is_manual_(is_manual) { - DC_LOG_TRACE( - "UProbeGenerator::UProbeGenerator - event_id=%d, func_name=%s, offset=%s, provider=%s, " - "is_manual=%d", - event_id, func_name.c_str(), offset.c_str(), provider.c_str(), is_manual); - } - - /** - * @brief Generates the uprobe and uretprobe C code as a stringstream. - * @return std::stringstream containing the generated code. - */ - std::stringstream generate() const { - DC_LOG_TRACE("UProbeGenerator::generate - start"); - // Sanitize function name for use in symbol names - std::string sanitized_func_name = func_name_.substr(0, 10); - - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '.', '_'); - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '@', '_'); - auto load_func = func_name_; - if (offset_ != "") { - load_func = offset_; - } - std::stringstream ss; - // Generate uprobe section and function - if (is_manual_) { - ss << "SEC(\"uprobe\")\n"; - } else { - ss << "SEC(\"uprobe/" << provider_ << ":" << load_func << "\")\n"; - } - ss << "int BPF_UPROBE(" << sanitized_func_name << event_id_ << "_entry) {\n"; - ss << " generic_entry(ctx, " << event_id_ << ");\n"; - ss << " return 0;\n"; - ss << "}\n"; - bool is_fork = std::regex_search(func_name_, std::regex(".*fork.*")); - std::string exit_func; - if (is_fork) { - exit_func = "generic_fork_exit"; - } else { - exit_func = "generic_exit"; - } - // Generate uretprobe section and function - if (is_manual_) { - ss << "SEC(\"uretprobe\")\n"; - } else { - ss << "SEC(\"uretprobe/" << provider_ << ":" << func_name_ << "\")\n"; - } - ss << "int BPF_URETPROBE(" << sanitized_func_name << event_id_ << "_exit) {\n"; - ss << " " << exit_func << "(ctx, " << event_id_ << ");\n"; - ss << " return 0;\n"; - ss << "}\n"; - - DC_LOG_TRACE("UProbeGenerator::generate - end"); - return ss; - } - - private: - int event_id_; ///< Unique identifier for the event - std::string func_name_; ///< Name of the function to probe - std::string provider_; ///< Provider (binary/library) - std::string offset_; ///< Offset within the function (currently unused) - bool is_manual_; ///< Whether the probe is manual -}; - -} // namespace datacrumbs \ No newline at end of file diff --git a/src/datacrumbs/generator/mechanisms/usdt_generator.h b/src/datacrumbs/generator/mechanisms/usdt_generator.h deleted file mode 100644 index 2eb85752..00000000 --- a/src/datacrumbs/generator/mechanisms/usdt_generator.h +++ /dev/null @@ -1,80 +0,0 @@ -#pragma once -// include first -#include -// other headers -#include // Logging macros -// std headers -#include -#include -#include - -namespace datacrumbs { - -/** - * @brief USDTGenerator generates USDT (User-level Statically Defined Tracing) probe code. - */ -class USDTGenerator { - public: - /** - * @brief Constructor for USDTGenerator. - * @param event_id Unique identifier for the event. - * @param func_name Name of the function to instrument. - * @param binary Name of the binary containing the function. - * @param provider Name of the USDT provider (e.g., "python"). - */ - USDTGenerator(int event_id, const std::string& func_name, const std::string& binary, - const std::string& provider) - : event_id_(event_id), func_name_(func_name), binary_(binary), provider_(provider) { - DC_LOG_TRACE("USDTGenerator constructor called for function: %s, event_id: %d", - func_name.c_str(), event_id); - } - - /** - * @brief Generates the USDT probe code as a stringstream. - * @return std::stringstream containing the generated code. - */ - std::stringstream generate() const { - DC_LOG_TRACE("USDTGenerator::generate() start for function: %s", func_name_.c_str()); - - std::string sanitized_func_name = func_name_.substr(0, 10); - // Replace '.' and '@' with '_' to sanitize the function name for use in identifiers. - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '.', '_'); - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '@', '_'); - - std::stringstream ss; - if (provider_ == "python") { - // Log info about probe generation for Python provider. - DC_LOG_DEBUG("Generating USDT probe for Python function: %s in binary: %s", - func_name_.c_str(), binary_.c_str()); - ss << "SEC(\"usdt/" << binary_ << ":" << provider_ << ":function__entry\")\n"; - ss << "int BPF_USDT(python_function_entry, long cls, long function) {\n"; - ss << " usdt_entry(ctx, " << event_id_ << ");\n"; - ss << " return 0;\n"; - ss << "}\n"; - - // Log info about probe generation for Python provider. - DC_LOG_DEBUG("Generating USDT probe for Python function: %s in binary: %s", - func_name_.c_str(), binary_.c_str()); - ss << "SEC(\"usdt/" << binary_ << ":" << provider_ << ":function__return\")\n"; - ss << "int BPF_USDT(python_function_return, long cls, long function) {\n"; - ss << " usdt_exit(ctx, " << event_id_ << ", cls, function);\n"; - ss << " return 0;\n"; - ss << "}\n"; - } else { - // Warn if provider is not supported. - DC_LOG_WARN("USDTGenerator: Provider '%s' is not supported. No code generated.", - provider_.c_str()); - } - - DC_LOG_TRACE("USDTGenerator::generate() end for function: %s", func_name_.c_str()); - return ss; - } - - private: - int event_id_; ///< Unique identifier for the event. - std::string func_name_; ///< Name of the function to instrument. - std::string binary_; ///< Name of the binary containing the function. - std::string provider_; ///< Name of the USDT provider. -}; - -} // namespace datacrumbs \ No newline at end of file diff --git a/src/datacrumbs/server/bpf/common.c b/src/datacrumbs/server/bpf/common.c index 16ff3355..5a9f360d 100644 --- a/src/datacrumbs/server/bpf/common.c +++ b/src/datacrumbs/server/bpf/common.c @@ -11,6 +11,14 @@ DATACRUMBS_MAP(pid_map, u32, u64, 1024); DATACRUMBS_MAP(fn_pid_map, struct fn_key_t, struct fn_value_t); +DATACRUMBS_MAP(event_arg_config_map, u64, struct runtime_event_config_t, + DATACRUMBS_MAX_RUNTIME_FUNCTIONS); +struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(max_entries, 1); + __type(key, u32); + __type(value, struct fn_value_t); +} scratch_fn_value_map SEC(".maps"); #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) DATACRUMBS_MAP(failed_request, u32, u32, 128); diff --git a/src/datacrumbs/server/bpf/common.h b/src/datacrumbs/server/bpf/common.h index b743ca22..2832041d 100644 --- a/src/datacrumbs/server/bpf/common.h +++ b/src/datacrumbs/server/bpf/common.h @@ -14,6 +14,14 @@ DATACRUMBS_MAP_EXTERN(pid_map, u32, u64, 1024); DATACRUMBS_MAP_EXTERN(fn_pid_map, struct fn_key_t, struct fn_value_t); +DATACRUMBS_MAP_EXTERN(event_arg_config_map, u64, struct runtime_event_config_t, + DATACRUMBS_MAX_RUNTIME_FUNCTIONS); +extern struct { + __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY); + __uint(max_entries, 1); + __type(key, u32); + __type(value, struct fn_value_t); +} scratch_fn_value_map SEC(".maps"); #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) DATACRUMBS_MAP_EXTERN(failed_request, u32, u32, 128); @@ -128,44 +136,267 @@ static inline __attribute__((always_inline)) int need_tracing(struct fn_key_t* k } #endif +static inline __attribute__((always_inline)) const struct runtime_event_config_t* +resolve_event_config(u64 attach_cookie) { + return (const struct runtime_event_config_t*)bpf_map_lookup_elem(&event_arg_config_map, + &attach_cookie); +} + +static inline __attribute__((always_inline)) struct fn_value_t* get_scratch_fn_value(void) { + u32 key = 0; + return (struct fn_value_t*)bpf_map_lookup_elem(&scratch_fn_value_map, &key); +} + +static inline __attribute__((always_inline)) int mark_current_pid_traced(void) { + const u64 tsp = bpf_ktime_get_ns(); + const u64 current = bpf_get_current_pid_tgid(); + const u32 pid = current & 0xFFFFFFFF; + if (pid == 0) return 0; + bpf_map_update_elem(&pid_map, &pid, &tsp, BPF_ANY); + DBG_PRINTK("Marked tracing pid=%u", pid); + return 0; +} + +static inline __attribute__((always_inline)) int unmark_current_pid_traced(void) { + const u64 current = bpf_get_current_pid_tgid(); + const u32 pid = current & 0xFFFFFFFF; + if (pid == 0) return 0; + bpf_map_delete_elem(&pid_map, &pid); + DBG_PRINTK("Unmarked tracing pid=%u", pid); + return 0; +} + +static inline __attribute__((always_inline)) void reset_captured_args(struct fn_value_t* fn) { +#pragma unroll + for (int index = 0; index < DATACRUMBS_MAX_CAPTURE_ARGS; ++index) { + fn->args[index] = 0; + fn->arg_data_len[index] = 0; + fn->arg_data_status[index] = 0; + __builtin_memset(fn->arg_data[index], 0, sizeof(fn->arg_data[index])); + } + fn->arg_count = 0; +} + +static inline __attribute__((always_inline)) void copy_captured_args_to_event( + const struct fn_value_t* fn, struct generic_event_t* event) { + event->arg_count = fn->arg_count; +#pragma unroll + for (int index = 0; index < DATACRUMBS_MAX_CAPTURE_ARGS; ++index) { + event->args[index] = fn->args[index]; + event->arg_data_len[index] = fn->arg_data_len[index]; + event->arg_data_status[index] = fn->arg_data_status[index]; + __builtin_memcpy(event->arg_data[index], fn->arg_data[index], DATACRUMBS_MAX_CAPTURE_BYTES); + } +} + +static inline __attribute__((always_inline)) void capture_runtime_args( + struct pt_regs* ctx, const struct runtime_event_config_t* config, struct fn_value_t* fn) { + unsigned int arg_index; + unsigned int num_bytes; + unsigned long long raw_value; + long err; + const unsigned long long raw_arg0 = PT_REGS_PARM1(ctx); + const unsigned long long raw_arg1 = PT_REGS_PARM2(ctx); + const unsigned long long raw_arg2 = PT_REGS_PARM3(ctx); + const unsigned long long raw_arg3 = PT_REGS_PARM4(ctx); + const unsigned long long raw_arg4 = PT_REGS_PARM5(ctx); + + reset_captured_args(fn); + fn->arg_count = config->arg_count; +#pragma unroll + for (int index = 0; index < DATACRUMBS_MAX_CAPTURE_ARGS; ++index) { + if ((unsigned int)index >= config->arg_count) break; + arg_index = config->arg_index[index]; + raw_value = 0; + if (arg_index == 0) { + raw_value = raw_arg0; + } else if (arg_index == 1) { + raw_value = raw_arg1; + } else if (arg_index == 2) { + raw_value = raw_arg2; + } else if (arg_index == 3) { + raw_value = raw_arg3; + } else if (arg_index == 4) { + raw_value = raw_arg4; + } + fn->args[index] = raw_value; + fn->arg_data_status[index] = 0; + fn->arg_data_len[index] = 0; + __builtin_memset(fn->arg_data[index], 0, sizeof(fn->arg_data[index])); + num_bytes = config->arg_num_bytes[index]; + if (num_bytes == 0) continue; + if (num_bytes > DATACRUMBS_MAX_CAPTURE_BYTES) { + num_bytes = DATACRUMBS_MAX_CAPTURE_BYTES; + } + if (config->arg_is_pointer[index] && raw_value != 0) { + fn->arg_data_len[index] = num_bytes; + if (config->probe_kind == DATACRUMBS_RUNTIME_PROBE_KIND_UPROBE) { + err = bpf_probe_read_user(fn->arg_data[index], num_bytes, (const void*)raw_value); + } else { + err = bpf_probe_read_kernel(fn->arg_data[index], num_bytes, (const void*)raw_value); + } + fn->arg_data_status[index] = err == 0 ? 2 : 3; + continue; + } + if (num_bytes > sizeof(raw_value)) { + num_bytes = sizeof(raw_value); + } + fn->arg_data_len[index] = num_bytes; + __builtin_memcpy(fn->arg_data[index], &raw_value, sizeof(raw_value)); + fn->arg_data_status[index] = 1; + } +} + +static inline __attribute__((always_inline)) void capture_runtime_raw_args( + const struct runtime_event_config_t* config, struct fn_value_t* fn, unsigned long long raw_arg0, + unsigned long long raw_arg1, unsigned long long raw_arg2, unsigned long long raw_arg3, + unsigned long long raw_arg4, bool read_user_pointers) { + unsigned int arg_index; + unsigned int num_bytes; + unsigned long long raw_value; + long err; + + reset_captured_args(fn); + fn->arg_count = config->arg_count; +#pragma unroll + for (int index = 0; index < DATACRUMBS_MAX_CAPTURE_ARGS; ++index) { + if ((unsigned int)index >= config->arg_count) break; + arg_index = config->arg_index[index]; + raw_value = 0; + if (arg_index == 0) { + raw_value = raw_arg0; + } else if (arg_index == 1) { + raw_value = raw_arg1; + } else if (arg_index == 2) { + raw_value = raw_arg2; + } else if (arg_index == 3) { + raw_value = raw_arg3; + } else if (arg_index == 4) { + raw_value = raw_arg4; + } + fn->args[index] = raw_value; + fn->arg_data_status[index] = 0; + fn->arg_data_len[index] = 0; + __builtin_memset(fn->arg_data[index], 0, sizeof(fn->arg_data[index])); + num_bytes = config->arg_num_bytes[index]; + if (num_bytes == 0) continue; + if (num_bytes > DATACRUMBS_MAX_CAPTURE_BYTES) { + num_bytes = DATACRUMBS_MAX_CAPTURE_BYTES; + } + if (config->arg_is_pointer[index] && raw_value != 0) { + fn->arg_data_len[index] = num_bytes; + if (read_user_pointers) { + err = bpf_probe_read_user(fn->arg_data[index], num_bytes, (const void*)raw_value); + } else { + err = bpf_probe_read_kernel(fn->arg_data[index], num_bytes, (const void*)raw_value); + } + fn->arg_data_status[index] = err == 0 ? 2 : 3; + continue; + } + if (num_bytes > sizeof(raw_value)) { + num_bytes = sizeof(raw_value); + } + fn->arg_data_len[index] = num_bytes; + __builtin_memcpy(fn->arg_data[index], &raw_value, sizeof(raw_value)); + fn->arg_data_status[index] = 1; + } +} + +static inline __attribute__((always_inline)) void capture_runtime_usdt_args( + struct pt_regs* ctx, const struct runtime_event_config_t* config, struct fn_value_t* fn) { + long raw_value = 0; + unsigned int num_bytes; + long err; + reset_captured_args(fn); + fn->arg_count = config->arg_count; +#pragma unroll + for (int index = 0; index < DATACRUMBS_MAX_CAPTURE_ARGS; ++index) { + if ((unsigned int)index >= config->arg_count) break; + raw_value = 0; + if (bpf_usdt_arg(ctx, config->arg_index[index], &raw_value) != 0) { + raw_value = 0; + } + fn->args[index] = (unsigned long long)raw_value; + fn->arg_data_status[index] = 0; + fn->arg_data_len[index] = 0; + __builtin_memset(fn->arg_data[index], 0, sizeof(fn->arg_data[index])); + num_bytes = config->arg_num_bytes[index]; + if (num_bytes == 0) continue; + if (num_bytes > DATACRUMBS_MAX_CAPTURE_BYTES) { + num_bytes = DATACRUMBS_MAX_CAPTURE_BYTES; + } + if (config->arg_is_pointer[index] && raw_value != 0) { + fn->arg_data_len[index] = num_bytes; + err = bpf_probe_read_user(fn->arg_data[index], num_bytes, (const void*)raw_value); + fn->arg_data_status[index] = err == 0 ? 2 : 3; + continue; + } + if (num_bytes > sizeof(raw_value)) { + num_bytes = sizeof(raw_value); + } + fn->arg_data_len[index] = num_bytes; + __builtin_memcpy(fn->arg_data[index], &raw_value, sizeof(raw_value)); + fn->arg_data_status[index] = 1; + } +} + #if defined(DATACRUMBS_ENABLE) && (DATACRUMBS_ENABLE == 1) #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) -static inline __attribute__((always_inline)) int generic_entry(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int generic_entry(struct pt_regs* ctx, + u64 attach_cookie) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; struct fn_key_t key = {}; key.event_id = event_id; u64 start_ts = 0; if (!need_tracing(&key, &start_ts)) { return 0; // not tracing this pid } - struct fn_value_t fn = {}; - fn.ts = bpf_ktime_get_ns(); - bpf_map_update_elem(&fn_pid_map, &key, &fn, BPF_ANY); + struct fn_value_t* fn = get_scratch_fn_value(); + if (fn == NULL) return 0; + __builtin_memset(fn, 0, sizeof(*fn)); + fn->ts = bpf_ktime_get_ns(); + capture_runtime_args(ctx, config, fn); + bpf_map_update_elem(&fn_pid_map, &key, fn, BPF_ANY); DBG_PRINTK("Pushed pid:%d, event_id:%llu to map\n", (u32)key.id, event_id); return 0; } #else -static inline __attribute__((always_inline)) int generic_entry(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int generic_entry(struct pt_regs* ctx, + u64 attach_cookie) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; struct fn_key_t key = {}; key.event_id = event_id; u64 start_ts; if (!need_tracing(&key, &start_ts)) { return 0; // not tracing this pid } - struct fn_value_t fn = {}; - fn.ts = bpf_ktime_get_ns(); - bpf_map_update_elem(&fn_pid_map, &key, &fn, BPF_ANY); + struct fn_value_t* fn = get_scratch_fn_value(); + if (fn == NULL) return 0; + __builtin_memset(fn, 0, sizeof(*fn)); + fn->ts = bpf_ktime_get_ns(); + reset_captured_args(fn); + bpf_map_update_elem(&fn_pid_map, &key, fn, BPF_ANY); DBG_PRINTK("Pushed pid:%d, event_id:%llu to map\n", (u32)key.id, event_id); return 0; } #endif #else -static inline __attribute__((always_inline)) int generic_entry(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int generic_entry(struct pt_regs* ctx, + u64 attach_cookie) { return 0; } #endif #if defined(DATACRUMBS_ENABLE) && (DATACRUMBS_ENABLE == 1) #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) -static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ctx, + u64 attach_cookie) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; u64 te = bpf_ktime_get_ns(); struct fn_key_t key = {}; key.event_id = event_id; @@ -176,17 +407,22 @@ static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ct struct fn_value_t* fn = bpf_map_lookup_elem(&fn_pid_map, &key); if (fn == 0) return 0; // missed entry DATACRUMBS_SKIP_SMALL_EVENTS(fn, te); - struct general_event_t* event; - DATACRUMBS_RB_RESERVE(output, struct general_event_t, event); - event->type = 1; + struct generic_event_t* event; + DATACRUMBS_RB_RESERVE(output, struct generic_event_t, event); + event->type = config->probe_kind; event->id = key.id; event->event_id = event_id; DATACRUMBS_COLLECT_TIME(event); + copy_captured_args_to_event(fn, event); DATACRUMBS_EVENT_SUBMIT(event, key.id, event_id); return 0; } #else -static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ctx, + u64 attach_cookie) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; u64 te = bpf_ktime_get_ns(); struct fn_key_t key = {}; key.event_id = event_id; @@ -222,36 +458,86 @@ static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ct } #endif #else -static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int generic_exit(struct pt_regs* ctx, + u64 attach_cookie) { + return 0; +} +#endif + +#if defined(DATACRUMBS_ENABLE) && (DATACRUMBS_ENABLE == 1) +#if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) +static inline __attribute__((always_inline)) int generic_syscall_entry( + struct pt_regs* ctx, u64 attach_cookie, unsigned long long arg0, unsigned long long arg1, + unsigned long long arg2, unsigned long long arg3, unsigned long long arg4) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; + struct fn_key_t key = {}; + key.event_id = event_id; + u64 start_ts = 0; + if (!need_tracing(&key, &start_ts)) { + return 0; + } + struct fn_value_t* fn = get_scratch_fn_value(); + if (fn == NULL) return 0; + __builtin_memset(fn, 0, sizeof(*fn)); + fn->ts = bpf_ktime_get_ns(); + capture_runtime_raw_args(config, fn, arg0, arg1, arg2, arg3, arg4, true); + bpf_map_update_elem(&fn_pid_map, &key, fn, BPF_ANY); + DBG_PRINTK("Pushed syscall pid:%d, event_id:%llu to map\n", (u32)key.id, event_id); + return 0; +} +#else +static inline __attribute__((always_inline)) int generic_syscall_entry( + struct pt_regs* ctx, u64 attach_cookie, unsigned long long arg0, unsigned long long arg1, + unsigned long long arg2, unsigned long long arg3, unsigned long long arg4) { + return 0; +} +#endif +#else +static inline __attribute__((always_inline)) int generic_syscall_entry( + struct pt_regs* ctx, u64 attach_cookie, unsigned long long arg0, unsigned long long arg1, + unsigned long long arg2, unsigned long long arg3, unsigned long long arg4) { return 0; } #endif #if defined(DATACRUMBS_ENABLE) && (DATACRUMBS_ENABLE == 1) -static inline __attribute__((always_inline)) int usdt_entry(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int usdt_entry(struct pt_regs* ctx, + u64 attach_cookie) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; struct fn_key_t key = {}; key.event_id = event_id; u64 start_ts; if (!need_tracing(&key, &start_ts)) { return 0; // not tracing this pid } - struct fn_value_t fn = {}; - fn.ts = bpf_ktime_get_ns(); - bpf_map_update_elem(&fn_pid_map, &key, &fn, BPF_ANY); + struct fn_value_t* fn = get_scratch_fn_value(); + if (fn == NULL) return 0; + __builtin_memset(fn, 0, sizeof(*fn)); + fn->ts = bpf_ktime_get_ns(); + capture_runtime_usdt_args(ctx, config, fn); + bpf_map_update_elem(&fn_pid_map, &key, fn, BPF_ANY); DBG_PRINTK("USDT Pushed pid:%d, event_id:%llu to map\n", (u32)key.id, event_id); return 0; } #else -static inline __attribute__((always_inline)) int usdt_entry(struct pt_regs* ctx, u64 event_id) { +static inline __attribute__((always_inline)) int usdt_entry(struct pt_regs* ctx, + u64 attach_cookie) { return 0; } #endif #if defined(DATACRUMBS_ENABLE) && (DATACRUMBS_ENABLE == 1) #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) -static inline __attribute__((always_inline)) int usdt_exit(struct pt_regs* ctx, u64 event_id, +static inline __attribute__((always_inline)) int usdt_exit(struct pt_regs* ctx, u64 attach_cookie, long clazz, long method) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; u64 te = bpf_ktime_get_ns(); struct fn_key_t key = {}; key.event_id = event_id; @@ -262,36 +548,22 @@ static inline __attribute__((always_inline)) int usdt_exit(struct pt_regs* ctx, struct fn_value_t* fn = bpf_map_lookup_elem(&fn_pid_map, &key); if (fn == 0) return 0; // missed entry DATACRUMBS_SKIP_SMALL_EVENTS(fn, te); - struct string_t local_str = {}; // 100 - long len = bpf_probe_read_user_str(&local_str.str, MAX_STR_READ_LEN, (void*)clazz); // 90 - local_str.len = len * 8; -#if defined(DATACRUMBS_ENABLE_INCLUSION_PATH) && (DATACRUMBS_ENABLE_INCLUSION_PATH == 1) - int found = prefix_search(&inclusion_path_trie, &local_str); - if (!found) { - DBG_PRINTK("Skipping usdt for %s as it is not in inclusion path trie\n", local_str.str); - return 0; // Skip if not in inclusion path - } -#endif - - struct usdt_event_t* event; - DATACRUMBS_RB_RESERVE(output, struct usdt_event_t, event); - event->type = 3; + struct generic_event_t* event; + DATACRUMBS_RB_RESERVE(output, struct generic_event_t, event); + event->type = config->probe_kind; event->id = key.id; event->event_id = event_id; DATACRUMBS_COLLECT_TIME(event); - - u32 class_hash = hash_and_store(&local_str, len); - event->class_hash = class_hash; // 100 - len = bpf_probe_read_user_str(&local_str.str, MAX_STR_READ_LEN, (void*)method); // 90 - - u32 method_hash = hash_and_store(&local_str, len); - event->method_hash = method_hash; // 100 + copy_captured_args_to_event(fn, event); DATACRUMBS_EVENT_SUBMIT(event, key.id, event_id); return 0; } #else -static inline __attribute__((always_inline)) int usdt_exit(struct pt_regs* ctx, u64 event_id, +static inline __attribute__((always_inline)) int usdt_exit(struct pt_regs* ctx, u64 attach_cookie, long clazz, long method) { + const struct runtime_event_config_t* config = resolve_event_config(attach_cookie); + if (config == NULL) return 0; + const u64 event_id = config->event_id; u64 te = bpf_ktime_get_ns(); struct fn_key_t key = {}; key.event_id = event_id; diff --git a/src/datacrumbs/server/bpf/generic.bpf.c b/src/datacrumbs/server/bpf/generic.bpf.c new file mode 100644 index 00000000..eee3f103 --- /dev/null +++ b/src/datacrumbs/server/bpf/generic.bpf.c @@ -0,0 +1,58 @@ +#include + +SEC("kprobe") +int BPF_KPROBE(trace_generic_kprobe_entry) { + const unsigned long long cookie = bpf_get_attach_cookie(ctx); + DBG_PRINTK("kprobe entry cookie=%llu", cookie); + return generic_entry(ctx, cookie); +} + +SEC("kretprobe") +int BPF_KRETPROBE(trace_generic_kprobe_exit) { + const unsigned long long cookie = bpf_get_attach_cookie(ctx); + DBG_PRINTK("kprobe exit cookie=%llu", cookie); + return generic_exit(ctx, cookie); +} + +SEC("ksyscall") +int BPF_KSYSCALL(trace_generic_syscall_entry, unsigned long long arg0, unsigned long long arg1, + unsigned long long arg2, unsigned long long arg3, unsigned long long arg4) { + const unsigned long long cookie = bpf_get_attach_cookie(ctx); + DBG_PRINTK("syscall entry cookie=%llu", cookie); + return generic_syscall_entry(ctx, cookie, arg0, arg1, arg2, arg3, arg4); +} + +SEC("ksyscall") +int BPF_KSYSCALL(trace_generic_syscall_exit, struct pt_regs* regs) { + const unsigned long long cookie = bpf_get_attach_cookie(ctx); + DBG_PRINTK("syscall exit cookie=%llu", cookie); + return generic_exit(ctx, cookie); +} + +SEC("uprobe") +int BPF_UPROBE(trace_generic_uprobe_entry) { + const unsigned long long cookie = bpf_get_attach_cookie(ctx); + DBG_PRINTK("uprobe entry cookie=%llu", cookie); + return generic_entry(ctx, cookie); +} + +SEC("uretprobe") +int BPF_URETPROBE(trace_generic_uprobe_exit) { + const unsigned long long cookie = bpf_get_attach_cookie(ctx); + DBG_PRINTK("uprobe exit cookie=%llu", cookie); + return generic_exit(ctx, cookie); +} + +SEC("usdt") +int BPF_USDT(trace_generic_usdt_entry, long clazz, long method) { + const unsigned long long cookie = bpf_usdt_cookie(ctx); + DBG_PRINTK("usdt entry cookie=%llu", cookie); + return usdt_entry(ctx, cookie); +} + +SEC("usdt") +int BPF_USDT(trace_generic_usdt_exit, long clazz, long method) { + const unsigned long long cookie = bpf_usdt_cookie(ctx); + DBG_PRINTK("usdt exit cookie=%llu", cookie); + return usdt_exit(ctx, cookie, clazz, method); +} diff --git a/src/datacrumbs/server/bpf/init.bpf.c b/src/datacrumbs/server/bpf/init.bpf.c index eaaf8c48..a2bbce55 100644 --- a/src/datacrumbs/server/bpf/init.bpf.c +++ b/src/datacrumbs/server/bpf/init.bpf.c @@ -1,60 +1,11 @@ #include -static inline __attribute__((always_inline)) int generic_trace_datacrumbs_start() { - u64 tsp = bpf_ktime_get_ns(); - u64 id = bpf_get_current_pid_tgid(); - u32 pid = id & 0xFFFFFFFF; - u64* start_ts = bpf_map_lookup_elem(&pid_map, &pid); - if (start_ts != 0) tsp = *start_ts; -#if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 2) - unsigned long long interval = tsp / DATACRUMBS_TIME_INTERVAL_NS; - bpf_map_update_elem(&latest_interval, &DATACRUMBS_TS_KEY, &interval, BPF_ANY); -#endif - bpf_map_update_elem(&pid_map, &pid, &tsp, BPF_ANY); - (void)pid; - DBG_PRINTK("Tracing PID %d", pid); -#if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) - u64 event_id = 1; - struct general_event_t* event; - DATACRUMBS_RB_RESERVE(output, struct general_event_t, event); - event->type = 1; - event->id = id; - event->event_id = event_id; - event->ts = tsp; - event->dur = 0; - DATACRUMBS_EVENT_SUBMIT(event, id, event_id); -#endif - return 0; +SEC("uprobe") +int BPF_UPROBE(trace_client_start) { + return mark_current_pid_traced(); } -static inline __attribute__((always_inline)) int generic_trace_datacrumbs_stop() { - u64 id = bpf_get_current_pid_tgid(); - u32 pid = id & 0xFFFFFFFF; - (void)pid; - DBG_PRINTK("Stop tracing PID %d", pid); - bpf_map_delete_elem(&pid_map, &pid); -#if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) - u64 event_id = 2; - struct general_event_t* event; - DATACRUMBS_RB_RESERVE(output, struct general_event_t, event); - event->type = 1; - event->id = id; - event->event_id = event_id; - event->ts = bpf_ktime_get_ns(); - event->dur = 0; - DATACRUMBS_EVENT_SUBMIT(event, id, event_id); -#endif - return 0; +SEC("uprobe") +int BPF_UPROBE(trace_client_stop) { + return unmark_current_pid_traced(); } - -#define DATACRUMBS_START "uprobe/" DATACRUMBS_BUILD_CLIENT_SO ":datacrumbs_start" -SEC((DATACRUMBS_START)) -int BPF_UPROBE(trace_datacrumbs_start) { - return generic_trace_datacrumbs_start(); -} - -#define DATACRUMBS_STOP "uprobe/" DATACRUMBS_BUILD_CLIENT_SO ":datacrumbs_stop" -SEC((DATACRUMBS_STOP)) -int BPF_UPROBE(trace_datacrumbs_stop) { - return generic_trace_datacrumbs_stop(); -} \ No newline at end of file diff --git a/src/datacrumbs/server/bpf/main.bpf.c b/src/datacrumbs/server/bpf/main.bpf.c index d3da0bdd..09fed774 100644 --- a/src/datacrumbs/server/bpf/main.bpf.c +++ b/src/datacrumbs/server/bpf/main.bpf.c @@ -1,4 +1,5 @@ -// main init -#include "init.bpf.c" -// generated file -#include \ No newline at end of file +// generic runtime probe handlers +#include "generic.bpf.c" + +// site-local custom probes are wired through the generated aggregator header. +#include diff --git a/src/datacrumbs/server/bpf/shared.h b/src/datacrumbs/server/bpf/shared.h index a112c771..52d1e297 100644 --- a/src/datacrumbs/server/bpf/shared.h +++ b/src/datacrumbs/server/bpf/shared.h @@ -1,30 +1,45 @@ #ifndef DATACRUMBS_SERVER_BPF_SHARED_H #define DATACRUMBS_SERVER_BPF_SHARED_H +#include #include static int DATACRUMBS_TS_KEY = 1; static int DATACRUMBS_FAILED_EVENTS_KEY = 2; -struct general_event_t { +#define DATACRUMBS_MAX_CAPTURE_ARGS 5 +#define DATACRUMBS_MAX_CAPTURE_BYTES 64 + +enum datacrumbs_runtime_probe_kind_t { + DATACRUMBS_RUNTIME_PROBE_KIND_KPROBE = 1, + DATACRUMBS_RUNTIME_PROBE_KIND_UPROBE = 2, + DATACRUMBS_RUNTIME_PROBE_KIND_SYSCALL = 3, + DATACRUMBS_RUNTIME_PROBE_KIND_USDT = 4, +}; + +struct generic_event_t { unsigned int type; unsigned long long id; unsigned long long event_id; unsigned long long ts; unsigned long long dur; + unsigned int arg_count; + unsigned long long args[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned int arg_data_len[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned int arg_data_status[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned char arg_data[DATACRUMBS_MAX_CAPTURE_ARGS][DATACRUMBS_MAX_CAPTURE_BYTES]; }; - -#define MAX_STR_READ_LEN 256 +typedef struct generic_event_t general_event_t; struct usdt_event_t { unsigned int type; unsigned long long id; unsigned long long event_id; unsigned long long ts; unsigned long long dur; - unsigned int class_hash; - unsigned int method_hash; }; +#define MAX_STR_READ_LEN 256 + struct fn_key_t { unsigned long long id; unsigned long long event_id; @@ -32,6 +47,20 @@ struct fn_key_t { struct fn_value_t { unsigned long long ts; + unsigned int arg_count; + unsigned long long args[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned int arg_data_len[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned int arg_data_status[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned char arg_data[DATACRUMBS_MAX_CAPTURE_ARGS][DATACRUMBS_MAX_CAPTURE_BYTES]; +}; + +struct runtime_event_config_t { + unsigned long long event_id; + unsigned int probe_kind; + unsigned int arg_count; + unsigned int arg_index[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned int arg_num_bytes[DATACRUMBS_MAX_CAPTURE_ARGS]; + unsigned int arg_is_pointer[DATACRUMBS_MAX_CAPTURE_ARGS]; }; struct fn_t { @@ -75,4 +104,4 @@ struct usdt_counter_event_t { struct profile_value_t* value; }; -#endif // DATACRUMBS_SERVER_BPF_SHARED_H \ No newline at end of file +#endif // DATACRUMBS_SERVER_BPF_SHARED_H diff --git a/src/datacrumbs/server/process/event_processor.cpp b/src/datacrumbs/server/process/event_processor.cpp index 2fb9ed8b..569681c4 100644 --- a/src/datacrumbs/server/process/event_processor.cpp +++ b/src/datacrumbs/server/process/event_processor.cpp @@ -1,10 +1,10 @@ #include // other headers -#include #include #include #include +#include #include #include #include @@ -15,10 +15,8 @@ #include // Include generated #include -#include // dependency headers #include -#include // std headers #include @@ -46,15 +44,48 @@ namespace datacrumbs { -EventProcessor::EventProcessor(int argc, char** argv) { - configManager_ = datacrumbs::Singleton::get_instance( - argc, argv, false, ExecutableType::DAEMON); - if (configManager_->exe_mode != datacrumbs::ExecutableMode::STOP) { - // Initialize the ChromeWriter singleton instance - writer_ = datacrumbs::Singleton::get_instance(); - if (!writer_) { - DC_LOG_ERROR("Failed to create ChromeWriter instance"); - } +namespace { + +bool is_char_pointer_type(const std::string& c_type) { + return c_type.find("char *") != std::string::npos || + c_type.find("const char *") != std::string::npos; +} + +std::unique_ptr build_runtime_args( + const generic_event_t* event, const datacrumbs::RuntimeEventMetadata* metadata) { + if (event == nullptr || metadata == nullptr || metadata->arg_specs.empty()) { + return nullptr; + } + + auto args = std::make_unique(); + const unsigned int arg_count = + std::min(event->arg_count, metadata->arg_specs.size()); + for (unsigned int index = 0; index < arg_count; ++index) { + const auto& spec = metadata->arg_specs[index]; + CapturedArgumentValue value; + value.c_type = spec.c_type; + value.is_pointer = spec.is_pointer; + value.raw_value = event->args[index]; + value.data_status = event->arg_data_status[index]; + const unsigned int data_len = std::min( + event->arg_data_len[index], + is_char_pointer_type(spec.c_type) ? DATACRUMBS_MAX_CAPTURE_BYTES : 8U); + value.bytes.assign(event->arg_data[index], event->arg_data[index] + data_len); + + std::string label = spec.label.empty() ? ("arg" + std::to_string(index + 1)) : spec.label; + args->emplace(std::move(label), std::move(value)); + } + return args; +} + +} // namespace + +EventProcessor::EventProcessor(const std::filesystem::path& probe_file) { + (void)probe_file; + configManager_ = datacrumbs::Singleton::get_instance(); + writer_ = datacrumbs::Singleton::get_instance(); + if (!writer_) { + DC_LOG_ERROR("Failed to create ChromeWriter instance"); } failed_events = 0; } @@ -63,7 +94,7 @@ int EventProcessor::handle_event(void* data, size_t data_sz) { DC_LOG_TRACE("handle_event: start"); #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) - struct general_event_t* event = (general_event_t*)data; + struct generic_event_t* event = (generic_event_t*)data; #else struct profile_key_t* event = (profile_key_t*)((counter_event_t*)data)->key; #endif @@ -85,6 +116,14 @@ int EventProcessor::handle_event(void* data, size_t data_sz) { DC_LOG_ERROR("Failed to create ChromeWriter instance"); return 1; } +#if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) + auto metadata = configManager_->get_runtime_event_metadata(event->event_id); + auto runtime_args = build_runtime_args(event, metadata); + auto write_event = + new datacrumbs::EventWithId(NORMAL_EVENT, event_index.fetch_add(1), event->type, event->id, + event->event_id, event->ts, event->dur, runtime_args.release()); + writer->push_event(write_event); +#else if (event->type > 0) { if (event->type == 1) { GET_DATA_FUNCTION(1); @@ -142,7 +181,7 @@ int EventProcessor::handle_event(void* data, size_t data_sz) { DC_LOG_WARN("Event type is not positive, skipping event"); return 0; } - +#endif } else { // If no category found, print warning DC_LOG_WARN("No category found for event_id %llu", event->event_id); @@ -150,7 +189,8 @@ int EventProcessor::handle_event(void* data, size_t data_sz) { 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); + // if (configManager_->mpi_rank == 0) DC_LOG_PROGRESS_SINGLE_THROTTLED(progress_msg.c_str(), + // event_index, 5); return 0; } int EventProcessor::update_filename(const char* filename, unsigned int hash) { diff --git a/src/datacrumbs/server/process/event_processor.h b/src/datacrumbs/server/process/event_processor.h index eddd1be7..59efff95 100644 --- a/src/datacrumbs/server/process/event_processor.h +++ b/src/datacrumbs/server/process/event_processor.h @@ -7,8 +7,8 @@ #include #include // Internal Headers -#include #include +#include #include #include #include @@ -39,7 +39,7 @@ namespace datacrumbs { class EventProcessor { public: - EventProcessor(int argc, char** argv); + explicit EventProcessor(const std::filesystem::path& probe_file); ~EventProcessor() {} @@ -58,7 +58,7 @@ class EventProcessor { int finalize(); public: - std::shared_ptr configManager_; + std::shared_ptr configManager_; std::shared_ptr writer_; int failed_events; // Count of failed events std::atomic event_index{0}; @@ -69,4 +69,4 @@ class EventProcessor { } // namespace datacrumbs -#endif \ No newline at end of file +#endif diff --git a/src/datacrumbs/server/process/processing/general_event.h b/src/datacrumbs/server/process/processing/general_event.h index 00018a7a..be5fc902 100644 --- a/src/datacrumbs/server/process/processing/general_event.h +++ b/src/datacrumbs/server/process/processing/general_event.h @@ -6,7 +6,6 @@ // Generated Headers #include // other headers -#include #include #include #include // Logging header @@ -84,7 +83,7 @@ inline static int lookup_1(int map_fd, unsigned long long latest_timestamp, #endif static datacrumbs::EventWithId* get_data_1(void* data, uint64_t index) { #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) - struct general_event_t* base = (general_event_t*)data; + general_event_t* base = (general_event_t*)data; auto event = new datacrumbs::EventWithId(NORMAL_EVENT, index, base->type, base->id, base->event_id, base->ts, base->dur, nullptr); @@ -97,4 +96,4 @@ static datacrumbs::EventWithId* get_data_1(void* data, uint64_t index) { base->key->event_id, base->key->time_interval, 0, args); #endif return event; -} \ No newline at end of file +} diff --git a/src/datacrumbs/server/process/processing/usdt_event.h b/src/datacrumbs/server/process/processing/usdt_event.h index 42e8527e..b1d95489 100644 --- a/src/datacrumbs/server/process/processing/usdt_event.h +++ b/src/datacrumbs/server/process/processing/usdt_event.h @@ -6,7 +6,6 @@ // Generated Headers #include // other headers -#include #include #include #include // Logging header @@ -86,11 +85,8 @@ inline static int lookup_3(int map_fd, unsigned long long latest_timestamp, static datacrumbs::EventWithId* get_data_3(void* data, uint64_t index) { #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) struct usdt_event_t* base = (usdt_event_t*)data; - auto args = new DataCrumbsArgs(); - args->emplace("clazz", base->class_hash); - args->emplace("method", base->method_hash); auto event = new datacrumbs::EventWithId(NORMAL_EVENT, index, base->type, base->id, - base->event_id, base->ts, base->dur, args); + base->event_id, base->ts, base->dur, nullptr); #else struct usdt_counter_event_t* base = (usdt_counter_event_t*)data; auto args = new DataCrumbsArgs(); @@ -102,4 +98,4 @@ static datacrumbs::EventWithId* get_data_3(void* data, uint64_t index) { base->key->event_id, base->key->time_interval, 0, args); #endif return event; -} \ No newline at end of file +} diff --git a/src/datacrumbs/server/process/server.impl.cpp b/src/datacrumbs/server/process/server.impl.cpp index a75c6bbe..0ab14048 100644 --- a/src/datacrumbs/server/process/server.impl.cpp +++ b/src/datacrumbs/server/process/server.impl.cpp @@ -1,20 +1,30 @@ // Internal headers #include +#include +#include #include -// dependent headers -#include + // std headers #include +#include +#include +#include +#include +#include #include -// Custom libbpf print function for debugging static int libbpf_print_fn(enum libbpf_print_level level, const char* format, va_list args) { if (level >= LIBBPF_DEBUG) return 0; return vfprintf(stderr, format, args); } +static bool is_char_pointer_type(const std::string& c_type) { + return c_type.find("char *") != std::string::npos || + c_type.find("const char *") != std::string::npos; +} + static int handle_event(void* ctx, void* data, size_t data_sz) { - datacrumbs::EventProcessor* event_processor = static_cast(ctx); + auto* event_processor = static_cast(ctx); return event_processor->handle_event(data, data_sz); } @@ -24,371 +34,326 @@ inline static int lookup_and_delete(int map_fd, datacrumbs::EventProcessor* even int ret = bpf_map_lookup_and_delete_batch_compat(map_fd, in_batch, &in_batch, keys, values, &batch_size, 0); if (ret < 0 && errno != ENOENT) { - perror("bpf_map_lookup_and_delete_batch fhash"); + perror("bpf_map_lookup_and_delete_batch file_map"); return -1; } - // Process the retrieved keys and values - for (int i = 0; i < batch_size; ++i) { + for (unsigned int i = 0; i < batch_size; ++i) { event_processor->update_filename(keys[i].str, values[i]); } - // Check if the end of the map has been reached if (ret < 0 && errno == ENOENT) { return 0; } return 1; } -inline static int lookup(int map_fd, datacrumbs::EventProcessor* event_processor, - struct string_t* keys, unsigned int* values, unsigned int batch_size, - struct string_t* in_batch) { - int ret = bpf_map_lookup_batch_compat(map_fd, in_batch, &in_batch, keys, values, &batch_size, 0); - if (ret < 0 && errno != ENOENT) { - perror("bpf_map_lookup_batch fhash"); - return -1; - } - // Process the retrieved keys and values - for (int i = 0; i < batch_size; ++i) { - event_processor->update_filename(keys[i].str, values[i]); - } - // Check if the end of the map has been reached - if (ret < 0 && errno == ENOENT) { - return -1; - } - return 0; -} - -// Setup signal handler for Ctrl-C (SIGINT) static volatile bool stop = false; -// Define a signal handler function with C linkage + static void sig_handler(int) { stop = true; - DC_LOG_INFO("\nReceived SIGINT, setting loop variable"); + DC_LOG_INFO("\nReceived SIGINT, stopping server loop"); } -static int manual_probes(datacrumbs::EventProcessor* event_processor, struct datacrumbs_bpf* skel) { - auto config_manager = event_processor->configManager_; - struct json_object* manual_probes_json = - json_object_from_file(config_manager->manual_probe_path.c_str()); - if (manual_probes_json) { - int total_manual_probes = 0, total_successful_probes = 0, total_failed_probes = 0; - int arr_len = json_object_array_length(manual_probes_json); - for (int i = 0; i < arr_len; i++) { - struct json_object* jprobe = json_object_array_get_idx(manual_probes_json, i); - if (jprobe) { - auto probe = datacrumbs::Probe::fromJson(jprobe); - std::shared_ptr manual_probe; - switch (probe.type) { - case datacrumbs::ProbeType::UPROBE: - manual_probe = - std::make_shared(datacrumbs::UProbe::fromJson(jprobe)); - break; - case datacrumbs::ProbeType::SYSCALLS: - manual_probe = std::make_shared( - datacrumbs::SysCallProbe::fromJson(jprobe)); - break; - case datacrumbs::ProbeType::USDT: - manual_probe = - std::make_shared(datacrumbs::USDTProbe::fromJson(jprobe)); - break; - case datacrumbs::ProbeType::KPROBE: - manual_probe = - std::make_shared(datacrumbs::KProbe::fromJson(jprobe)); - break; - case datacrumbs::ProbeType::CUSTOM: - manual_probe = std::make_shared( - datacrumbs::CustomProbe::fromJson(jprobe)); - break; - default: - DC_LOG_ERROR("Unknown probe type encountered in extractProbes()"); - } - for (const auto& func : manual_probe->functions) { - total_manual_probes += 2; - if (probe.type == datacrumbs::ProbeType::UPROBE) { - auto uprobe = std::dynamic_pointer_cast(manual_probe); - uint64_t func_hash = std::stoull(func, nullptr, 0); - auto func_name_ = config_manager->category_map[func_hash].second; - DC_LOG_DEBUG("Extracted function name: %s", func_name_.c_str()); - auto pos = func_name_.find(':'); - std::string offset = ""; - bool is_manual = false; - if (pos != std::string::npos) { - offset = func_name_.substr(pos + 1); - func_name_ = func_name_.substr(0, pos); - is_manual = true; - } else { - offset = ""; - } - if (is_manual) { - std::string sanitized_func_name = func_name_; - if (sanitized_func_name.length() > 10) { - sanitized_func_name = sanitized_func_name.substr(0, 10); - } - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '.', '_'); - std::replace(sanitized_func_name.begin(), sanitized_func_name.end(), '@', '_'); - sanitized_func_name += func; - auto entry_func = sanitized_func_name + "_entry"; - auto exit_func = sanitized_func_name + "_exit"; - struct bpf_link* link; - struct bpf_program* prog = - bpf_object__find_program_by_name(skel->obj, entry_func.c_str()); - struct bpf_uprobe_opts opts = { - .sz = sizeof(struct bpf_uprobe_opts), - }; - - // Convert offset string to hex value if present - unsigned long offset_val = 0; - if (offset != "" && prog != NULL) { - offset_val = - std::stoul(offset.c_str(), nullptr, 0); // Accepts hex ("0x...") or decimal - DC_LOG_DEBUG("Attaching program %s to %s at offset:0x%lx manually", - entry_func.c_str(), uprobe->binary_path.c_str(), offset_val); - link = bpf_program__attach_uprobe_opts( - prog, -1 /* not a retprobe */, uprobe->binary_path.c_str(), offset_val, &opts); - - if (link == NULL) { - // This will provide a more specific error code than the skeleton attach. - DC_LOG_DEBUG("Failed to attach uprobe %s on offset:0x%lx manually: %d", - func_name_.c_str(), offset_val, errno); - total_failed_probes += 2; - } else { - total_successful_probes++; - // Successfully attached uprobe - DC_LOG_DEBUG("Successfully attached uprobe %s on offset:0x%lx manually", - func_name_.c_str(), offset_val); - opts.retprobe = true; - struct bpf_program* prog2 = - bpf_object__find_program_by_name(skel->obj, exit_func.c_str()); - link = bpf_program__attach_uprobe_opts(prog2, -1 /* not a retprobe */, - uprobe->binary_path.c_str(), offset_val, - &opts); - - if (link == NULL) { - // This will provide a more specific error code than the skeleton attach. - DC_LOG_DEBUG("Failed to attach uretprobe %s on offset:0x%lx manually: %d", - func_name_.c_str(), offset_val, errno); - total_failed_probes++; - } else { - // Successfully attached uretprobe - DC_LOG_DEBUG("Successfully attached probe %s on offset:0x%lx manually", - func_name_.c_str(), offset_val); - total_successful_probes++; - } - } - } else { - DC_LOG_DEBUG("Failed to attach uprobe %s on offset:0x%lx manually: %d", - func_name_.c_str(), offset_val, errno); - total_failed_probes += 2; - } - } else { - DC_LOG_DEBUG("Failed to attach uprobe %s as no offset present", func_name_.c_str()); - total_failed_probes += 2; - } - } else { - DC_LOG_DEBUG("Failed to attach as only support uprobe"); - total_failed_probes += 2; - } - } - } - } - DC_LOG_INFO( - "Manual probes summary: total_manual_probes=%d, total_successful_probes=%d, " - "total_failed_probes=%d", - total_manual_probes, total_successful_probes, total_failed_probes); - } else { - DC_LOG_WARN("Failed to read probes file: %s", config_manager->manual_probe_path.c_str()); +static bool split_uprobe_target(const std::string& symbol_with_offset, std::string* symbol_name, + unsigned long* offset) { + const auto pos = symbol_with_offset.rfind(':'); + if (pos == std::string::npos) { + return false; } - return 0; + *symbol_name = symbol_with_offset.substr(0, pos); + *offset = std::stoul(symbol_with_offset.substr(pos + 1), nullptr, 0); + return true; } -static int sync_pipe[2]; - -/** - * @brief Sends a signal to the parent process via a pipe to indicate completion. - * - * This function should be called by the child process after it has performed - * its necessary startup and initialization tasks. - */ -static void daemon_notify_parent() { - char signal_byte = '!'; - // The child process only needs the write end of the pipe. - // The read end has already been closed. - if (write(sync_pipe[1], &signal_byte, 1) == -1) { - // If write fails, it's likely the parent has already exited, which is fine. - if (errno != EPIPE) { - perror("write error in daemon_notify_parent"); - } +static unsigned int runtime_probe_kind(datacrumbs::ProbeType probe_type) { + switch (probe_type) { + case datacrumbs::ProbeType::KPROBE: + return DATACRUMBS_RUNTIME_PROBE_KIND_KPROBE; + case datacrumbs::ProbeType::UPROBE: + return DATACRUMBS_RUNTIME_PROBE_KIND_UPROBE; + case datacrumbs::ProbeType::SYSCALLS: + return DATACRUMBS_RUNTIME_PROBE_KIND_SYSCALL; + case datacrumbs::ProbeType::USDT: + return DATACRUMBS_RUNTIME_PROBE_KIND_USDT; + default: + return 0; } - // Always close the write end of the pipe after use. - close(sync_pipe[1]); } -/** - * @brief Daemonizes the process, creating a new child and waiting for a signal. - * - * The initial parent process forks, and the child process continues the - * daemonization sequence. The parent blocks until the child signals success, - * then exits. - * - * @return Returns 0 in the daemon process, or a positive value representing - * the daemon's PID in the original parent process. Returns -1 on failure. - */ -static pid_t daemonize() { - pid_t pid; - - // Create the pipe for synchronization before the first fork. - if (pipe(sync_pipe) == -1) { - perror("pipe error"); - return -1; +static int populate_event_arg_config( + int map_fd, uint64_t cookie, uint64_t event_id, datacrumbs::ProbeType probe_type, + const std::vector* arg_specs) { + runtime_event_config_t config = {}; + config.event_id = event_id; + config.probe_kind = runtime_probe_kind(probe_type); + if (arg_specs != nullptr) { + config.arg_count = std::min(arg_specs->size(), DATACRUMBS_MAX_CAPTURE_ARGS); + for (unsigned int index = 0; index < config.arg_count; ++index) { + const auto& spec = (*arg_specs)[index]; + config.arg_index[index] = (*arg_specs)[index].index; + if (spec.is_pointer) { + if (is_char_pointer_type(spec.c_type)) { + config.arg_num_bytes[index] = + std::min(spec.num_bytes, DATACRUMBS_MAX_CAPTURE_BYTES); + config.arg_is_pointer[index] = 1; + } else { + config.arg_num_bytes[index] = 0; + config.arg_is_pointer[index] = 0; + } + } else { + config.arg_num_bytes[index] = std::min(spec.num_bytes, 8U); + config.arg_is_pointer[index] = 0; + } + } } - - // First fork to detach from the controlling terminal. - pid = fork(); - if (pid < 0) { - perror("fork error"); - close(sync_pipe[0]); - close(sync_pipe[1]); + if (bpf_map_update_elem(map_fd, &cookie, &config, BPF_ANY) < 0) { + DC_LOG_ERROR("Failed to populate event_arg_config_map for cookie=%llu event_id=%llu", cookie, + event_id); return -1; } + return 0; +} - // Parent process (the original caller). - if (pid > 0) { - // Parent closes the write end of the pipe. - close(sync_pipe[1]); - - char signal_byte; - // Wait to read a byte from the pipe. This blocks until the child writes. - if (read(sync_pipe[0], &signal_byte, 1) == -1) { - perror("read error in parent"); - close(sync_pipe[0]); - return -1; - } - - // Child signaled success. Parent can now exit cleanly. - close(sync_pipe[0]); - exit(EXIT_SUCCESS); +static int attach_runtime_probes(datacrumbs::EventProcessor* event_processor, + struct datacrumbs_bpf* skel) { + auto config_manager = event_processor->configManager_; + auto* client_start = bpf_object__find_program_by_name(skel->obj, "trace_client_start"); + auto* client_stop = bpf_object__find_program_by_name(skel->obj, "trace_client_stop"); + auto* kprobe_entry = bpf_object__find_program_by_name(skel->obj, "trace_generic_kprobe_entry"); + auto* kprobe_exit = bpf_object__find_program_by_name(skel->obj, "trace_generic_kprobe_exit"); + auto* syscall_entry = bpf_object__find_program_by_name(skel->obj, "trace_generic_syscall_entry"); + auto* syscall_exit = bpf_object__find_program_by_name(skel->obj, "trace_generic_syscall_exit"); + auto* uprobe_entry = bpf_object__find_program_by_name(skel->obj, "trace_generic_uprobe_entry"); + auto* uprobe_exit = bpf_object__find_program_by_name(skel->obj, "trace_generic_uprobe_exit"); + auto* usdt_entry = bpf_object__find_program_by_name(skel->obj, "trace_generic_usdt_entry"); + auto* usdt_exit = bpf_object__find_program_by_name(skel->obj, "trace_generic_usdt_exit"); + const int event_arg_config_fd = bpf_map__fd(skel->maps.event_arg_config_map); + + if (event_arg_config_fd < 0) { + DC_LOG_ERROR("Failed to get event_arg_config_map fd: %d", event_arg_config_fd); + return 1; } - // First child process. - // Close the read end of the pipe, as the child will only write. - close(sync_pipe[0]); - - // Become a session leader to detach from the controlling terminal. - if (setsid() < 0) { - perror("setsid error"); - exit(EXIT_FAILURE); + if (!kprobe_entry || !kprobe_exit) { + DC_LOG_ERROR("Failed to find generic kprobe BPF programs"); + return 1; } - - // Second fork to ensure the daemon can't reacquire a controlling terminal. - signal(SIGHUP, SIG_IGN); - pid = fork(); - if (pid < 0) { - perror("fork error"); - exit(EXIT_FAILURE); + if (!syscall_entry || !syscall_exit) { + DC_LOG_ERROR("Failed to find generic syscall BPF programs"); + return 1; } - - // First child exits, orphaning the second child. - if (pid > 0) { - // The first child exits, leaving the second child as the daemon. - exit(EXIT_SUCCESS); + if (!uprobe_entry || !uprobe_exit) { + DC_LOG_ERROR("Failed to find generic uprobe BPF programs"); + return 1; + } + if (!usdt_entry || !usdt_exit) { + DC_LOG_ERROR("Failed to find generic usdt BPF programs"); + return 1; + } + if (!client_start || !client_stop) { + DC_LOG_ERROR("Failed to find client init BPF programs"); + return 1; } - // This code runs only in the second child (the actual daemon). - - // Close all open file descriptors. - int x; - for (x = sysconf(_SC_OPEN_MAX); x >= 0; x--) { - if (x != sync_pipe[1]) { // Keep the write end of the pipe open for the signal - close(x); + { + struct bpf_uprobe_opts start_opts = {}; + start_opts.sz = sizeof(start_opts); + start_opts.func_name = "datacrumbs_start"; + struct bpf_uprobe_opts stop_opts = {}; + stop_opts.sz = sizeof(stop_opts); + stop_opts.func_name = "datacrumbs_stop"; + auto* start_link = + bpf_program__attach_uprobe_opts(client_start, -1, DATACRUMBS_CLIENT_LIB, 0, &start_opts); + auto* stop_link = + bpf_program__attach_uprobe_opts(client_stop, -1, DATACRUMBS_CLIENT_LIB, 0, &stop_opts); + if (libbpf_get_error(start_link) || libbpf_get_error(stop_link)) { + DC_LOG_ERROR("Failed to attach datacrumbs client hooks for %s", DATACRUMBS_CLIENT_LIB); + return 1; } } - // Reopen standard file descriptors to /dev/null. - open("/dev/null", O_RDWR); // stdin - dup(0); // stdout - dup(0); // stderr - - return 0; // Return 0 in the daemon process. -} + int total_requested = 0; + int total_attached = 0; + int total_failed = 0; + uint64_t cookie = 1; + bool invalid_probe_database_updated = false; + + for (const auto& probe : config_manager->runtime_probes) { + for (const auto& function_name : probe->functions) { + const auto event_id = config_manager->get_runtime_event_id(probe->name, function_name); + if (!event_id.has_value()) { + DC_LOG_WARN("Skipping runtime probe without generated event id: %s.%s", probe->name.c_str(), + function_name.c_str()); + total_failed += 2; + continue; + } -static std::string get_hostname() { - char hostname[HOST_NAME_MAX]; - if (gethostname(hostname, sizeof(hostname)) == 0) { - return std::string(hostname); - } - struct utsname uts; - if (uname(&uts) == 0) { - return std::string(uts.nodename); + const uint64_t current_cookie = cookie++; + if (probe->type == datacrumbs::ProbeType::KPROBE) { + total_requested += 2; + if (populate_event_arg_config(event_arg_config_fd, current_cookie, *event_id, probe->type, + probe->getArgSpecs(function_name)) != 0) { + total_failed += 2; + continue; + } + struct bpf_kprobe_opts entry_opts = {}; + entry_opts.sz = sizeof(entry_opts); + entry_opts.bpf_cookie = current_cookie; + struct bpf_kprobe_opts exit_opts = {}; + exit_opts.sz = sizeof(exit_opts); + exit_opts.retprobe = true; + exit_opts.bpf_cookie = current_cookie; + auto* entry_link = + bpf_program__attach_kprobe_opts(kprobe_entry, function_name.c_str(), &entry_opts); + auto* exit_link = + bpf_program__attach_kprobe_opts(kprobe_exit, function_name.c_str(), &exit_opts); + if (libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { + config_manager->record_invalid_runtime_probe(probe->name, function_name); + invalid_probe_database_updated = true; + total_failed += 2; + continue; + } + total_attached += 2; + } else if (probe->type == datacrumbs::ProbeType::SYSCALLS) { + total_requested += 2; + if (populate_event_arg_config(event_arg_config_fd, current_cookie, *event_id, probe->type, + probe->getArgSpecs(function_name)) != 0) { + total_failed += 2; + continue; + } + struct bpf_ksyscall_opts entry_opts = {}; + entry_opts.sz = sizeof(entry_opts); + entry_opts.bpf_cookie = current_cookie; + struct bpf_ksyscall_opts exit_opts = {}; + exit_opts.sz = sizeof(exit_opts); + exit_opts.retprobe = true; + exit_opts.bpf_cookie = current_cookie; + auto* entry_link = + bpf_program__attach_ksyscall(syscall_entry, function_name.c_str(), &entry_opts); + auto* exit_link = + bpf_program__attach_ksyscall(syscall_exit, function_name.c_str(), &exit_opts); + if (libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { + config_manager->record_invalid_runtime_probe(probe->name, function_name); + invalid_probe_database_updated = true; + total_failed += 2; + continue; + } + total_attached += 2; + } else if (probe->type == datacrumbs::ProbeType::UPROBE) { + total_requested += 2; + auto uprobe = std::dynamic_pointer_cast(probe); + std::string symbol_name; + unsigned long offset = 0; + const bool has_offset = uprobe && split_uprobe_target(function_name, &symbol_name, &offset); + if (!uprobe) { + DC_LOG_WARN("Skipping invalid uprobe config for %s.%s", probe->name.c_str(), + function_name.c_str()); + total_failed += 2; + continue; + } + if (populate_event_arg_config(event_arg_config_fd, current_cookie, *event_id, probe->type, + probe->getArgSpecs(function_name)) != 0) { + total_failed += 2; + continue; + } + struct bpf_uprobe_opts entry_opts = {}; + entry_opts.sz = sizeof(entry_opts); + entry_opts.bpf_cookie = current_cookie; + struct bpf_uprobe_opts exit_opts = {}; + exit_opts.sz = sizeof(exit_opts); + exit_opts.retprobe = true; + exit_opts.bpf_cookie = current_cookie; + if (!has_offset) { + entry_opts.func_name = function_name.c_str(); + exit_opts.func_name = function_name.c_str(); + } + auto* entry_link = bpf_program__attach_uprobe_opts( + uprobe_entry, -1, uprobe->binary_path.c_str(), offset, &entry_opts); + auto* exit_link = bpf_program__attach_uprobe_opts( + uprobe_exit, -1, uprobe->binary_path.c_str(), offset, &exit_opts); + if (libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { + config_manager->record_invalid_runtime_probe(probe->name, function_name); + invalid_probe_database_updated = true; + total_failed += 2; + continue; + } + total_attached += 2; + } else if (probe->type == datacrumbs::ProbeType::USDT) { + total_requested += 2; + auto usdt = std::dynamic_pointer_cast(probe); + if (populate_event_arg_config(event_arg_config_fd, current_cookie, *event_id, probe->type, + probe->getArgSpecs(function_name)) != 0) { + total_failed += 2; + continue; + } + struct bpf_usdt_opts entry_opts = {}; + entry_opts.sz = sizeof(entry_opts); + entry_opts.usdt_cookie = current_cookie; + struct bpf_usdt_opts exit_opts = {}; + exit_opts.sz = sizeof(exit_opts); + exit_opts.usdt_cookie = current_cookie; + auto* entry_link = usdt ? bpf_program__attach_usdt( + usdt_entry, -1, usdt->binary_path.c_str(), + usdt->provider.c_str(), function_name.c_str(), &entry_opts) + : nullptr; + auto* exit_link = usdt ? bpf_program__attach_usdt(usdt_exit, -1, usdt->binary_path.c_str(), + usdt->provider.c_str(), + function_name.c_str(), &exit_opts) + : nullptr; + if (!usdt || libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { + config_manager->record_invalid_runtime_probe(probe->name, function_name); + invalid_probe_database_updated = true; + total_failed += 2; + continue; + } + total_attached += 2; + } else { + DC_LOG_WARN("Skipping unsupported runtime probe type %d for %s", + static_cast(probe->type), probe->name.c_str()); + total_failed += 2; + } + } } - return "unknownhost"; -} -static std::string get_timestamp() { - time_t now = time(nullptr); - char buf[32]; - strftime(buf, sizeof(buf), "%Y%m%d_%H%M%S", localtime(&now)); - return std::string(buf); -} - -static void redirect_output(const std::string& logfile, const std::string& user) { - FILE* logf = freopen(logfile.c_str(), "a+", stdout); - if (!logf) { - perror("freopen failed to open log file"); - exit(EXIT_FAILURE); - } - freopen(logfile.c_str(), "a+", stderr); - auto pwd = getpwnam(user.c_str()); - uid_t uid = pwd ? pwd->pw_uid : static_cast(-1); - gid_t gid = pwd ? pwd->pw_gid : static_cast(-1); - // Set file ownership to user - chown(logfile.c_str(), uid, gid); - // Optionally set permissions (e.g., rw-r-----) - chmod(logfile.c_str(), 0640); -} + if (invalid_probe_database_updated) { + config_manager->persist_invalid_runtime_probes(); + } -static void write_pid_file(const std::string& pidfile, const std::string& user) { - if (access(pidfile.c_str(), F_OK) == 0) { - remove(pidfile.c_str()); - } - std::ofstream ofs(pidfile); - ofs << getpid() << std::endl; - ofs.close(); - auto pwd = getpwnam(user.c_str()); - uid_t uid = pwd ? pwd->pw_uid : static_cast(-1); - gid_t gid = pwd ? pwd->pw_gid : static_cast(-1); - // Set file ownership to user - chown(pidfile.c_str(), uid, gid); - // Optionally set permissions (e.g., rw-r-----) - chmod(pidfile.c_str(), 0640); + DC_LOG_INFO("Runtime probe attachment summary: requested=%d attached=%d failed=%d", + total_requested, total_attached, total_failed); + return 0; } -static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event_processor, - bool notify_parent = false) { +static int main_process(datacrumbs::EventProcessor* event_processor) { DC_LOG_TRACE("main: start"); datacrumbs::utils::Timer timer; timer.resumeTime(); - struct datacrumbs_bpf* skel; - int err; - struct ring_buffer* rb = NULL; + struct datacrumbs_bpf* skel = nullptr; + struct ring_buffer* rb = nullptr; + int err = 0; libbpf_set_print(libbpf_print_fn); - // Open and load BPF skeleton skel = datacrumbs_bpf__open_and_load(); if (!skel) { DC_LOG_ERROR("Failed to open BPF object"); return 1; } - // Attach BPF skeleton err = datacrumbs_bpf__attach(skel); if (err) { DC_LOG_ERROR("Failed to attach BPF skeleton: %d", err); datacrumbs_bpf__destroy(skel); return 1; } - manual_probes(event_processor, skel); + err = attach_runtime_probes(event_processor, skel); + if (err) { + DC_LOG_ERROR("Failed to attach runtime probes: %d", err); + datacrumbs_bpf__destroy(skel); + return 1; + } + #if !(defined(DATACRUMBS_ENABLE) && (DATACRUMBS_ENABLE == 1)) - DC_LOG_WARN("DATACRUMBS_ENABLE_OPT is set to OFF. Nothing will be captured"); + DC_LOG_WARN("DATACRUMBS_ENABLE_OPT is OFF. Nothing will be captured"); #endif #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) DC_LOG_PRINT("DataCrumbs in Tracer mode"); @@ -403,9 +368,9 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event datacrumbs_bpf__destroy(skel); return 1; } - struct string_t* cur_key = NULL; + struct string_t* cur_key = nullptr; struct string_t next_key = {}; - struct string_t value; + struct string_t value = {}; for (;;) { err = bpf_map_get_next_key(inclusion_trie, cur_key, &next_key); if (err) break; @@ -413,16 +378,15 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event cur_key = &next_key; } - // Get inclusion_path from configuration manager and build inclusion_list std::unordered_map inclusion_list; - std::string inclusion_paths = event_processor->configManager_->inclusion_paths; + const std::string inclusion_paths = event_processor->configManager_->inclusion_paths; if (!inclusion_paths.empty()) { std::stringstream ss(inclusion_paths); std::string path; unsigned int idx = 1; while (std::getline(ss, path, ':')) { if (!path.empty()) { - string_t s; + string_t s = {}; size_t copy_len = path.size(); if (copy_len > sizeof(s.str) - 1) copy_len = sizeof(s.str) - 1; strncpy(s.str, path.c_str(), copy_len); @@ -438,22 +402,18 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event datacrumbs_bpf__destroy(skel); return 1; } - DC_LOG_DEBUG("Added inclusion path: %s", path.c_str()); } - cur_key = NULL; + cur_key = nullptr; next_key = {}; for (;;) { err = bpf_map_get_next_key(inclusion_trie, cur_key, &next_key); if (err) break; - bpf_map_lookup_elem(inclusion_trie, &next_key, &value); - - /* Use key and value here */ - DC_LOG_INFO("Trie key: %s, len: %u, value: %u", next_key.str, next_key.len, value); - + DC_LOG_INFO("Trie key: %s, len: %u, value_len: %u", next_key.str, next_key.len, value.len); cur_key = &next_key; } #endif + #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) int failed_events_fd = bpf_map__fd(skel->maps.failed_request); if (failed_events_fd < 0) { @@ -461,11 +421,8 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event datacrumbs_bpf__destroy(skel); return 1; } - // Prepare context for event handler - // Create ring buffer for event processing - rb = ring_buffer__new(bpf_map__fd(skel->maps.output), handle_event, event_processor, NULL); + rb = ring_buffer__new(bpf_map__fd(skel->maps.output), handle_event, event_processor, nullptr); if (!rb) { - err = -1; DC_LOG_ERROR("Failed to create ring buffer"); datacrumbs_bpf__destroy(skel); return 1; @@ -503,56 +460,37 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event return 1; } #endif + int file_hash_fd = bpf_map__fd(skel->maps.file_map); if (file_hash_fd < 0) { DC_LOG_ERROR("Failed to get file hash fd: %d", file_hash_fd); datacrumbs_bpf__destroy(skel); return 1; } - double elapsed = timer.pauseTime(); - if (event_processor->configManager_->mpi_rank == 0) { - DC_LOG_PRINT("Initialization of DataCrumbs elapsed time: %f seconds", elapsed); + const double elapsed = timer.pauseTime(); + DC_LOG_PRINT("Initialization of DataCrumbs elapsed time: %f seconds", elapsed); + { + std::error_code ec; + std::filesystem::create_directories( + event_processor->configManager_->server_ready_file.parent_path(), ec); + std::ofstream ready_output(event_processor->configManager_->server_ready_file); + if (ready_output.is_open()) { + ready_output << "ready\n"; + } } + DC_LOG_INFO("DataCrumbs ready to run for user:%s run_id:%s trace_file:%s", + event_processor->configManager_->user.c_str(), + event_processor->configManager_->run_id.c_str(), + event_processor->configManager_->trace_file_path.c_str()); - if (notify_parent) daemon_notify_parent(); - // Main event polling loop signal(SIGINT, sig_handler); - if (event_processor->configManager_->mpi_rank == 0) { - 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(); - 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); - } - if (!event_processor->configManager_->disable_mpi) { - MPI_Barrier(MPI_COMM_WORLD); - } unsigned int batch_size = 1024; #if defined(DATACRUMBS_BPFTIME_COMPATIBLE_FLAG) && (DATACRUMBS_BPFTIME_COMPATIBLE_FLAG == 0) - - struct string_t* keys = (struct string_t*)malloc(batch_size * sizeof(struct string_t)); - unsigned int* values = (unsigned int*)malloc(batch_size * sizeof(unsigned int)); - // Initialize in_batch to NULL for the first iteration - struct string_t* in_batch = NULL; + struct string_t* keys = + static_cast(malloc(batch_size * sizeof(struct string_t))); + unsigned int* values = static_cast(malloc(batch_size * sizeof(unsigned int))); + struct string_t* in_batch = nullptr; #endif #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 2) @@ -584,18 +522,16 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event #endif unsigned long long last_processed_timestamp = 0; - auto time_unit = 1000000000 / DATACRUMBS_TIME_INTERVAL_NS; while (!stop) { err = 0; #if defined(DATACRUMBS_BPFTIME_COMPATIBLE_FLAG) && (DATACRUMBS_BPFTIME_COMPATIBLE_FLAG == 0) err = lookup_and_delete(file_hash_fd, event_processor, keys, values, batch_size, in_batch); if (err == -EINTR) { - DC_LOG_INFO("\nReceived EINTR, exiting poll loop"); err = 0; break; } #endif - err = 0; + #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) int failed_events = 0; err = bpf_map_lookup_elem(failed_events_fd, &DATACRUMBS_FAILED_EVENTS_KEY, &failed_events); @@ -603,9 +539,7 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event event_processor->failed_events = failed_events; } err = ring_buffer__poll(rb, 10); - // Ctrl-C gives -EINTR if (err == -EINTR) { - DC_LOG_INFO("\nReceived EINTR, exiting poll loop"); err = 0; break; } @@ -620,11 +554,8 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event if (last_processed_timestamp == 0) { last_processed_timestamp = latest_ts; } - if (latest_ts - last_processed_timestamp > 0) { - DC_LOG_DEBUG("Recieved latest latest_ts:%llu, last_processed_timestamp:%llu, interval:%d", - latest_ts, last_processed_timestamp, 0); + if (latest_ts > last_processed_timestamp) { last_processed_timestamp = latest_ts; - LOOKUP_1_CALL(); #ifdef GET_DATA_2_EXISTS LOOKUP_2_CALL(); @@ -653,26 +584,17 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event } } #endif - // Ctrl-C gives -EINTR - if (err == -EINTR) { - DC_LOG_INFO("\nReceived EINTR, exiting poll loop"); - err = 0; - break; - } } + batch_size = 1024 * 1024; - DC_LOG_INFO("\n"); + DC_LOG_INFO(""); #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 2) - DC_LOG_INFO("Collecting rest of the events"); - unsigned long long latest_ts = 0; - DC_LOG_INFO("Collecting rest general events"); + DC_LOG_INFO("Collecting remaining profiling events"); while (LOOKUP_1_CALL() != -1); #ifdef GET_DATA_2_EXISTS - DC_LOG_INFO("Collecting rest sysio events"); while (LOOKUP_2_CALL() != -1); #endif #ifdef GET_DATA_3_EXISTS - DC_LOG_INFO("Collecting rest usdt events"); while (LOOKUP_3_CALL() != -1); #endif #ifdef GET_DATA_4_EXISTS @@ -694,223 +616,64 @@ static int main_process(int argc, char** argv, datacrumbs::EventProcessor* event while (LOOKUP_9_CALL() != -1); #endif #endif + #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) int failed_events = 0; err = bpf_map_lookup_elem(failed_events_fd, &DATACRUMBS_FAILED_EVENTS_KEY, &failed_events); - if (err == 0 && event_processor->configManager_->mpi_rank == 0) { + if (err == 0) { DC_LOG_PRINT("Total %d events failed", failed_events); } #endif #if defined(DATACRUMBS_BPFTIME_COMPATIBLE_FLAG) && (DATACRUMBS_BPFTIME_COMPATIBLE_FLAG == 0) - if (event_processor->configManager_->mpi_rank == 0) { - DC_LOG_PRINT("Collecting string metadata from file_map..."); - } + DC_LOG_PRINT("Collecting string metadata from file_map..."); while (lookup_and_delete(file_hash_fd, event_processor, keys, values, batch_size, in_batch) == 1) { - // Continue until no more keys are found - } - if (keys) { - free(keys); - } - if (values) { - free(values); } + if (keys) free(keys); + if (values) free(values); #endif - if (event_processor->configManager_->mpi_rank == 0) { - DC_LOG_PRINT("Finalizing DataCrumbs..."); - } + + DC_LOG_PRINT("Finalizing DataCrumbs..."); if (stop) { DC_LOG_INFO("Received SIGINT (Ctrl-C), exiting gracefully"); } - // Measure elapsed time for finalization and cleanup timer.resumeTime(); - - // Finalize ChromeWriter instance event_processor->finalize(); + { + std::error_code ec; + std::filesystem::remove(event_processor->configManager_->server_ready_file, ec); + } #if defined(DATACRUMBS_MODE) && (DATACRUMBS_MODE == 1) - // Cleanup resources ring_buffer__free(rb); #endif datacrumbs_bpf__destroy(skel); - double finalize_elapsed = timer.pauseTime(); - double sum_elapsed = 0.0, min_elapsed = 0.0, max_elapsed = 0.0; - if (!event_processor->configManager_->disable_mpi) { - MPI_Reduce(&finalize_elapsed, &sum_elapsed, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - MPI_Reduce(&finalize_elapsed, &min_elapsed, 1, MPI_DOUBLE, MPI_MIN, 0, MPI_COMM_WORLD); - MPI_Reduce(&finalize_elapsed, &max_elapsed, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD); - } else { - sum_elapsed = finalize_elapsed; - min_elapsed = finalize_elapsed; - max_elapsed = finalize_elapsed; - } - if (event_processor->configManager_->mpi_rank == 0) { - DC_LOG_PRINT("Finalization and cleanup of DataCrumbs: average=%f, min=%f, max=%f over %d ranks", - sum_elapsed / event_processor->configManager_->mpi_size, min_elapsed, max_elapsed, - event_processor->configManager_->mpi_size); - } - - // Gather failed_events and total_events across all ranks - int local_failed_events = event_processor->failed_events; - int global_failed_events_sum = 0, global_failed_events_min = 0, global_failed_events_max = 0; - if (!event_processor->configManager_->disable_mpi) { - MPI_Reduce(&local_failed_events, &global_failed_events_sum, 1, MPI_INT, MPI_SUM, 0, - MPI_COMM_WORLD); - MPI_Reduce(&local_failed_events, &global_failed_events_min, 1, MPI_INT, MPI_MIN, 0, - MPI_COMM_WORLD); - MPI_Reduce(&local_failed_events, &global_failed_events_max, 1, MPI_INT, MPI_MAX, 0, - MPI_COMM_WORLD); - } else { - global_failed_events_sum = local_failed_events; - global_failed_events_min = local_failed_events; - global_failed_events_max = local_failed_events; - } - int local_total_events = static_cast(event_processor->event_index.load()); - int global_total_events_sum = 0, global_total_events_min = 0, global_total_events_max = 0; - if (!event_processor->configManager_->disable_mpi) { - MPI_Reduce(&local_total_events, &global_total_events_sum, 1, MPI_INT, MPI_SUM, 0, - MPI_COMM_WORLD); - MPI_Reduce(&local_total_events, &global_total_events_min, 1, MPI_INT, MPI_MIN, 0, - MPI_COMM_WORLD); - MPI_Reduce(&local_total_events, &global_total_events_max, 1, MPI_INT, MPI_MAX, 0, - MPI_COMM_WORLD); - } else { - global_total_events_sum = local_total_events; - global_total_events_min = local_total_events; - global_total_events_max = local_total_events; - } - if (event_processor->configManager_->mpi_rank == 0) { - DC_LOG_PRINT("Failed events: sum=%d, min=%d, max=%d", global_failed_events_sum, - global_failed_events_min, global_failed_events_max); - 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; - 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", - json_object_new_string(event_processor->configManager_->trace_file_path.c_str())); - json_object_object_add(status_json, "total_events_captured", - json_object_new_int64(event_processor->event_index.load())); - json_object_object_add(status_json, "events_failed", - json_object_new_int(event_processor->failed_events)); - - if (json_object_to_file_ext(status_file.c_str(), status_json, JSON_C_TO_STRING_PRETTY) != 0) { - DC_LOG_ERROR("Failed to write status file: %s", status_file.c_str()); - } - json_object_put(status_json); - 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); - } - } - + const double finalize_elapsed = timer.pauseTime(); + DC_LOG_PRINT("Finalization and cleanup of DataCrumbs elapsed: %f seconds", finalize_elapsed); + DC_LOG_PRINT("Failed events: %d", event_processor->failed_events); + DC_LOG_PRINT("Total events: %llu", event_processor->event_index.load()); DC_LOG_TRACE("main: end"); return 0; } static int main_call(int argc, char** argv) { - auto event_processor = datacrumbs::EventProcessor(argc, argv); - if (!event_processor.configManager_->disable_mpi) { - MPI_Init(&argc, &argv); - event_processor.configManager_->load_mpi_configurations(); - } - - 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 && - event_processor.configManager_->exe_mode != datacrumbs::ExecutableMode::STOP) { - event_processor.configManager_->print_configurations(); - } - if (event_processor.configManager_->exe_mode == datacrumbs::ExecutableMode::RUN) { - write_pid_file(pidfile, event_processor.configManager_->user); - 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"; - redirect_output(logfile, event_processor.configManager_->user); - DC_LOG_PRINT("Spawned daemon with pid %d, output redirected to %s\n", getpid(), - logfile.c_str()); - write_pid_file(pidfile, event_processor.configManager_->user); - return_code = main_process(argc, argv, &event_processor, true); - } else if (event_processor.configManager_->exe_mode == datacrumbs::ExecutableMode::STOP) { - // Find and kill daemon by pid file - std::ifstream ifs(pidfile); - pid_t pid = 0; - ifs >> pid; - ifs.close(); - if (pid > 0) { - kill(pid, SIGINT); - int status = 0; - if (pid > 0) { - // Wait for the process to terminate after sending SIGINT - // Check if process exists before calling waitpid - // Poll for process termination using ps - int max_retries = 600; // Wait up to ~600 seconds (1s * 600) - const char* user = getenv("USER"); - if (!user) { - user = "unknown"; - } - if (event_processor.configManager_->mpi_rank == 0) { - DC_LOG_PRINT("Sent SIGINT as %s. Waiting for %f minutes for pid:%d to exit", user, - max_retries / 60.0, pid); - } - int i; - for (i = 0; i < max_retries; ++i) { - std::string ps_cmd = "ps -p " + std::to_string(pid) + " > /dev/null"; - int ret = system(ps_cmd.c_str()); - if (ret != 0) { - // Process no longer exists - break; - } - usleep(1000000); // Sleep 1s - } - if (i == max_retries) { - DC_LOG_PRINT("Process %d did not terminate within the expected time for rank %d.", pid, - event_processor.configManager_->mpi_rank); - return_code = 1; - } else { - if (event_processor.configManager_->mpi_rank == 0) { - DC_LOG_PRINT("Process %d has terminated.", pid); - } - } - } - if (!event_processor.configManager_->disable_mpi) { - MPI_Barrier(MPI_COMM_WORLD); - } - if (access(pidfile.c_str(), F_OK) == 0) { - remove(pidfile.c_str()); - } - } else { - DC_LOG_ERROR("Could not find pid to stop on rank %d.\n", - event_processor.configManager_->mpi_rank); - } + if (argc < 4) { + DC_LOG_ERROR("Usage: %s ", argv[0]); + return 1; } - if (!event_processor.configManager_->disable_mpi) { - MPI_Finalize(); + + const std::string run_id = argv[2]; + const std::string user = argv[3]; + auto config_manager = + datacrumbs::Singleton::get_instance(argv[1], run_id, + user, true); + if (!config_manager) { + DC_LOG_ERROR("Failed to initialize runtime configuration manager"); + return 1; } - return (return_code); -} \ No newline at end of file + auto event_processor = datacrumbs::EventProcessor(argv[1]); + event_processor.configManager_->print_configurations(); + return main_process(&event_processor); +} diff --git a/src/datacrumbs/server/process/writer/chrome_writer.cpp b/src/datacrumbs/server/process/writer/chrome_writer.cpp index d145d1bc..ce138e5e 100644 --- a/src/datacrumbs/server/process/writer/chrome_writer.cpp +++ b/src/datacrumbs/server/process/writer/chrome_writer.cpp @@ -1,13 +1,187 @@ #include // internal headers -#include #include #include +#include #include #include #include #include +#include +#include +#include +#include + +namespace { + +std::string json_escape(const std::string& input) { + std::string escaped; + escaped.reserve(input.size() + 8); + for (unsigned char ch : input) { + switch (ch) { + case '\"': + escaped += "\\\""; + break; + case '\\': + escaped += "\\\\"; + break; + case '\b': + escaped += "\\b"; + break; + case '\f': + escaped += "\\f"; + break; + case '\n': + escaped += "\\n"; + break; + case '\r': + escaped += "\\r"; + break; + case '\t': + escaped += "\\t"; + break; + default: + if (ch < 0x20) { + char buffer[8]; + std::snprintf(buffer, sizeof(buffer), "\\u%04x", ch); + escaped += buffer; + } else { + escaped += static_cast(ch); + } + } + } + return escaped; +} + +std::string bytes_to_hex(const std::vector& bytes) { + std::ostringstream oss; + oss << std::hex << std::setfill('0'); + for (unsigned char byte : bytes) { + oss << std::setw(2) << static_cast(byte); + } + return oss.str(); +} + +std::string pointer_json(unsigned long long raw_value) { + std::ostringstream oss; + oss << "\"0x" << std::hex << raw_value << "\""; + return oss.str(); +} + +bool is_char_pointer_type(const std::string& c_type) { + return c_type.find("char *") != std::string::npos || + c_type.find("const char *") != std::string::npos; +} +bool is_float_type(const std::string& c_type) { + return c_type == "float"; +} +bool is_double_type(const std::string& c_type) { + return c_type == "double"; +} +bool is_signed_type(const std::string& c_type) { + if (c_type.empty()) return false; + if (c_type.find("unsigned") != std::string::npos) return false; + return c_type.find("int") != std::string::npos || c_type.find("long") != std::string::npos || + c_type.find("short") != std::string::npos || c_type.find("ssize_t") != std::string::npos || + c_type.find("pid_t") != std::string::npos || c_type == "char"; +} + +std::string decode_scalar_json(const CapturedArgumentValue& value) { + const unsigned int width = std::min(value.bytes.size(), sizeof(unsigned long long)); + unsigned long long raw = 0; + if (width > 0) { + std::memcpy(&raw, value.bytes.data(), width); + } else { + raw = value.raw_value; + } + + if (is_float_type(value.c_type) && width >= sizeof(float)) { + float number = 0.0f; + std::memcpy(&number, value.bytes.data(), sizeof(float)); + return std::to_string(number); + } + if (is_double_type(value.c_type) && width >= sizeof(double)) { + double number = 0.0; + std::memcpy(&number, value.bytes.data(), sizeof(double)); + return std::to_string(number); + } + if (is_signed_type(value.c_type)) { + long long signed_value = 0; + switch (width) { + case 1: + signed_value = static_cast(raw & 0xff); + break; + case 2: + signed_value = static_cast(raw & 0xffff); + break; + case 4: + signed_value = static_cast(raw & 0xffffffffu); + break; + default: + signed_value = static_cast(raw); + break; + } + return std::to_string(signed_value); + } + return std::to_string(raw); +} + +std::string serialize_captured_argument(const CapturedArgumentValue& value) { + if (value.is_pointer) { + if (value.data_status == 2 && !value.bytes.empty()) { + if (is_char_pointer_type(value.c_type)) { + std::string text; + for (unsigned char ch : value.bytes) { + if (ch == '\0') break; + text.push_back(static_cast(ch)); + } + return "\"" + json_escape(text) + "\""; + } + std::ostringstream oss; + oss << "{\"value\":" << decode_scalar_json(value) + << ",\"address\":" << pointer_json(value.raw_value) << "}"; + return oss.str(); + } + return pointer_json(value.raw_value); + } + + if ((value.data_status == 1 || value.data_status == 2) && !value.bytes.empty()) { + return decode_scalar_json(value); + } + + if (!value.bytes.empty()) { + return "\"0x" + bytes_to_hex(value.bytes) + "\""; + } + + return std::to_string(value.raw_value); +} + +std::string serialize_any_value(const std::any& value) { + if (value.type() == typeid(int)) { + return std::to_string(std::any_cast(value)); + } else if (value.type() == typeid(unsigned long long)) { + return std::to_string(std::any_cast(value)); + } else if (value.type() == typeid(unsigned int)) { + return std::to_string(std::any_cast(value)); + } else if (value.type() == typeid(uint64_t)) { + return std::to_string(std::any_cast(value)); + } else if (value.type() == typeid(float)) { + return std::to_string(std::any_cast(value)); + } else if (value.type() == typeid(double)) { + return std::to_string(std::any_cast(value)); + } else if (value.type() == typeid(const char*)) { + return "\"" + json_escape(std::any_cast(value)) + "\""; + } else if (value.type() == typeid(std::string)) { + return "\"" + json_escape(std::any_cast(value)) + "\""; + } else if (value.type() == typeid(CapturedArgumentValue)) { + return serialize_captured_argument(std::any_cast(value)); + } + return "\"\""; +} + +} // namespace + // Specialization of the Singleton instance for KSymCapture. // This holds the shared pointer to the singleton instance. template <> @@ -19,8 +193,9 @@ template <> bool datacrumbs::Singleton::stop_creating_instances = false; namespace datacrumbs { -ChromeWriter::ChromeWriter() : stop_flag_(false), chunk_size_(16 * 1024 * 1024) { - auto configManager_ = datacrumbs::Singleton::get_instance(); +ChromeWriter::ChromeWriter() : stop_flag_(false), finalized_(false), chunk_size_(16 * 1024 * 1024) { + auto configManager_ = + datacrumbs::Singleton::get_instance(); compressor_ = new ZlibCompression(configManager_->trace_file_path, chunk_size_); // file_ = std::fopen(configManager_->trace_file_path.c_str(), "a+"); auto pwd = getpwnam(configManager_->user.c_str()); @@ -36,17 +211,27 @@ ChromeWriter::ChromeWriter() : stop_flag_(false), chunk_size_(16 * 1024 * 1024) } // Destructor flushes and closes the file, and joins the worker thread. -ChromeWriter::~ChromeWriter() {} +ChromeWriter::~ChromeWriter() { + finalize(); + delete compressor_; + compressor_ = nullptr; +} void ChromeWriter::finalize() { - DC_LOG_DEBUG("ChromeWriter worker loop exiting"); { std::lock_guard lock(queue_mutex_); + if (finalized_) { + return; + } stop_flag_ = true; + finalized_ = true; } + DC_LOG_DEBUG("ChromeWriter worker loop exiting"); queue_cv_.notify_one(); if (worker_.joinable()) worker_.join(); - compressor_->compress("]"); - compressor_->finalize(); + if (compressor_ != nullptr) { + compressor_->compress("]"); + compressor_->finalize(); + } DC_LOG_DEBUG("ChromeWriter finalized"); } @@ -61,7 +246,8 @@ void ChromeWriter::push_event(EventWithId* event) { // Serialize and write a single event to the file, including event_id as "id". void ChromeWriter::write_event(EventWithId* event_with_id) { index_++; - auto configManager_ = datacrumbs::Singleton::get_instance(); + auto configManager_ = + datacrumbs::Singleton::get_instance(); uint64_t index = event_with_id->index; auto args = event_with_id->args; @@ -69,34 +255,17 @@ void ChromeWriter::write_event(EventWithId* event_with_id) { unsigned int tid = event_with_id->tgid_pid >> 32; auto it = configManager_->category_map.find(event_with_id->event_id); if (it != configManager_->category_map.end()) { - std::string probe_name; - std::string function_name; - if (event_with_id->type == 3) { - probe_name = "usdt"; - unsigned int method = 0, clazz = 0; - - if (args != nullptr) { - if (event_with_id->event_type == COUNTER_EVENT) { - // Handle COUNTER_EVENT specific logic - unsigned long long duration = std::any_cast((*args)["duration"]); - if (duration > std::numeric_limits::max() / 1000) { - duration = std::numeric_limits::max(); - } else { - duration = static_cast(std::floor(duration / 1000.0)); - } - (*args)["duration"] = duration; - } - method = std::any_cast((*args)["method"]); - clazz = std::any_cast((*args)["clazz"]); - function_name = std::to_string(clazz) + "." + std::to_string(method); - args->erase("clazz"); - args->erase("method"); + std::string probe_name = it->second.first; + std::string function_name = it->second.second; + if (args != nullptr && event_with_id->event_type == COUNTER_EVENT && + args->find("duration") != args->end()) { + unsigned long long duration = std::any_cast((*args)["duration"]); + if (duration > std::numeric_limits::max() / 1000) { + duration = std::numeric_limits::max(); } else { - function_name = "unknown"; + duration = static_cast(std::floor(duration / 1000.0)); } - } else { - probe_name = it->second.first; - function_name = it->second.second; + (*args)["duration"] = duration; } char buffer[1024]; unsigned long long ts_us = 0; @@ -142,29 +311,7 @@ void ChromeWriter::write_event(EventWithId* event_with_id) { args_json += "\""; args_json += key; args_json += "\":"; - if (value.type() == typeid(int)) { - args_json += std::to_string(std::any_cast(value)); - } else if (value.type() == typeid(unsigned long long)) { - args_json += std::to_string(std::any_cast(value)); - } else if (value.type() == typeid(unsigned int)) { - args_json += std::to_string(std::any_cast(value)); - } else if (value.type() == typeid(uint64_t)) { - args_json += std::to_string(std::any_cast(value)); - } else if (value.type() == typeid(float)) { - args_json += std::to_string(std::any_cast(value)); - } else if (value.type() == typeid(double)) { - args_json += std::to_string(std::any_cast(value)); - } else if (value.type() == typeid(const char*)) { - args_json += "\""; - args_json += std::any_cast(value); - args_json += "\""; - } else if (value.type() == typeid(std::string)) { - args_json += "\""; - args_json += std::any_cast(value); - args_json += "\""; - } else { - args_json += "\"\""; - } + args_json += serialize_any_value(value); first = false; } } @@ -172,12 +319,7 @@ void ChromeWriter::write_event(EventWithId* event_with_id) { { std::lock_guard lock(file_mutex_); - std::string event_json; - if (first) { - event_json = std::string(buffer, len) + "}\n"; - } else { - event_json = std::string(buffer, len) + ",\"args\":" + args_json + "}\n"; - } + std::string event_json = std::string(buffer, len) + ",\"args\":" + args_json + "}\n"; DC_LOG_DEBUG("Writing event: %s", event_json.c_str()); compressor_->compress(event_json); } diff --git a/src/datacrumbs/server/process/writer/chrome_writer.h b/src/datacrumbs/server/process/writer/chrome_writer.h index 31e726aa..848afc96 100644 --- a/src/datacrumbs/server/process/writer/chrome_writer.h +++ b/src/datacrumbs/server/process/writer/chrome_writer.h @@ -51,9 +51,10 @@ class ChromeWriter { std::condition_variable queue_cv_; std::thread worker_; bool stop_flag_; + bool finalized_; unsigned long index_; ZlibCompression* compressor_; size_t chunk_size_; }; -} // namespace datacrumbs \ No newline at end of file +} // namespace datacrumbs diff --git a/src/datacrumbs/signer/sign_probes_service.cpp b/src/datacrumbs/signer/sign_probes_service.cpp new file mode 100644 index 00000000..5cd54b8c --- /dev/null +++ b/src/datacrumbs/signer/sign_probes_service.cpp @@ -0,0 +1,259 @@ +#include "datacrumbs/signer/sign_probes_service.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +SignProbesService::SignProbesService() + : socket_path_(DATACRUMBS_SIGN_PROBES_SOCKET_PATH), + allowed_client_executable_(std::filesystem::path(DATACRUMBS_INSTALL_BIN_DIR) / + "datacrumbs_probe_configurator_exec") {} + +SignProbesService::~SignProbesService() { + if (server_fd_ >= 0) { + close(server_fd_); + } + if (!socket_path_.empty()) { + unlink(socket_path_.c_str()); + } +} + +int SignProbesService::run() { + std::string secret; + if (!datacrumbs::probe_file::ensure_probe_secret(&secret)) { + DC_LOG_ERROR("Failed to create or read probe signing secret"); + return 1; + } + + if (!initialize_socket()) { + return 1; + } + + DC_LOG_INFO("Datacrumbs probe signing service listening on %s", socket_path_.c_str()); + + for (;;) { + const int client_fd = accept(server_fd_, nullptr, nullptr); + if (client_fd < 0) { + if (errno == EINTR) { + continue; + } + DC_LOG_ERROR("Failed to accept signer connection"); + continue; + } + handle_client(client_fd); + close(client_fd); + } + + return 0; +} + +bool SignProbesService::initialize_socket() { + std::error_code ec; + std::filesystem::create_directories(socket_path_.parent_path(), ec); + if (ec) { + DC_LOG_ERROR("Failed to create signer socket directory: %s", + socket_path_.parent_path().string().c_str()); + return false; + } + + unlink(socket_path_.c_str()); + + server_fd_ = socket(AF_UNIX, SOCK_STREAM, 0); + if (server_fd_ < 0) { + DC_LOG_ERROR("Failed to create signer socket"); + return false; + } + + sockaddr_un address{}; + address.sun_family = AF_UNIX; + const std::string path_string = socket_path_.string(); + if (path_string.size() >= sizeof(address.sun_path)) { + DC_LOG_ERROR("Signer socket path is too long: %s", path_string.c_str()); + return false; + } + std::strncpy(address.sun_path, path_string.c_str(), sizeof(address.sun_path) - 1); + + if (bind(server_fd_, reinterpret_cast(&address), sizeof(address)) != 0) { + DC_LOG_ERROR("Failed to bind signer socket at %s: %s", path_string.c_str(), + std::strerror(errno)); + return false; + } + + chmod(socket_path_.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); + + if (listen(server_fd_, 16) != 0) { + DC_LOG_ERROR("Failed to listen on signer socket"); + return false; + } + + return true; +} + +void SignProbesService::handle_client(int client_fd) const { + std::string request_payload; + std::string response_payload; + std::string authorization_error; + + if (!is_authorized_client(client_fd, &authorization_error)) { + response_payload = build_response(false, "", authorization_error); + write_all_to_fd(client_fd, response_payload); + return; + } + + if (!read_all_from_fd(client_fd, &request_payload)) { + response_payload = build_response(false, "", "failed to read signing request"); + write_all_to_fd(client_fd, response_payload); + return; + } + + std::string error; + std::string checksum = sign_signing_payload(request_payload, &error); + if (checksum.empty()) { + response_payload = build_response(false, "", error); + } else { + response_payload = build_response(true, checksum, ""); + } + write_all_to_fd(client_fd, response_payload); +} + +std::string SignProbesService::build_response(bool ok, const std::string& payload, + const std::string& error) const { + json_object* root = json_object_new_object(); + json_object_object_add(root, "ok", json_object_new_boolean(ok ? 1 : 0)); + if (!payload.empty()) { + json_object_object_add(root, "payload", json_object_new_string(payload.c_str())); + } + if (!error.empty()) { + json_object_object_add(root, "error", json_object_new_string(error.c_str())); + } + const char* response = json_object_to_json_string_ext(root, JSON_C_TO_STRING_PLAIN); + std::string output = response != nullptr ? response : ""; + json_object_put(root); + return output; +} + +bool SignProbesService::read_all_from_fd(int fd, std::string* payload) const { + char buffer[4096]; + payload->clear(); + ssize_t read_bytes = 0; + while ((read_bytes = read(fd, buffer, sizeof(buffer))) > 0) { + payload->append(buffer, static_cast(read_bytes)); + } + return read_bytes == 0; +} + +bool SignProbesService::write_all_to_fd(int fd, const std::string& payload) const { + std::size_t total_written = 0; + while (total_written < payload.size()) { + const ssize_t written = + write(fd, payload.data() + total_written, payload.size() - total_written); + if (written <= 0) { + return false; + } + total_written += static_cast(written); + } + return true; +} + +std::string SignProbesService::sign_signing_payload(const std::string& request_payload, + std::string* error) const { + json_object* root = json_tokener_parse(request_payload.c_str()); + if (root == nullptr || json_object_get_type(root) != json_type_object) { + if (error != nullptr) { + *error = "failed to parse signing request"; + } + if (root != nullptr) { + json_object_put(root); + } + return ""; + } + + json_object* signing_payload = nullptr; + if (!json_object_object_get_ex(root, "signing_payload", &signing_payload) || + json_object_get_type(signing_payload) != json_type_string) { + if (error != nullptr) { + *error = "signing request missing signing payload"; + } + json_object_put(root); + return ""; + } + + std::string secret; + if (!datacrumbs::probe_file::ensure_probe_secret(&secret)) { + if (error != nullptr) { + *error = "failed to read signing secret"; + } + json_object_put(root); + return ""; + } + + const std::string result = + datacrumbs::probe_file::hmac_sha256_hex(secret, json_object_get_string(signing_payload)); + json_object_put(root); + if (result.empty() && error != nullptr) { + *error = "failed to compute probe signature"; + } + return result; +} + +bool SignProbesService::is_authorized_client(int client_fd, std::string* error) const { + struct ucred credentials{}; + socklen_t credentials_size = sizeof(credentials); + if (getsockopt(client_fd, SOL_SOCKET, SO_PEERCRED, &credentials, &credentials_size) != 0) { + if (error != nullptr) { + *error = "failed to get peer credentials"; + } + return false; + } + + char exe_path_buffer[PATH_MAX] = {0}; + const std::string proc_exe = "/proc/" + std::to_string(credentials.pid) + "/exe"; + const ssize_t exe_len = readlink(proc_exe.c_str(), exe_path_buffer, sizeof(exe_path_buffer) - 1); + if (exe_len <= 0) { + if (error != nullptr) { + *error = "failed to resolve peer executable path"; + } + return false; + } + exe_path_buffer[exe_len] = '\0'; + + std::error_code ec; + const auto peer_executable = std::filesystem::weakly_canonical(exe_path_buffer, ec); + if (ec) { + if (error != nullptr) { + *error = "failed to canonicalize peer executable path"; + } + return false; + } + + ec.clear(); + const auto allowed_executable = std::filesystem::weakly_canonical(allowed_client_executable_, ec); + if (ec) { + if (error != nullptr) { + *error = "failed to resolve allowed probe configurator path"; + } + return false; + } + + if (peer_executable != allowed_executable) { + if (error != nullptr) { + *error = "probe signing requests are only accepted from datacrumbs_probe_configurator"; + } + DC_LOG_WARN("Rejected signer request from pid=%d exe=%s expected=%s", credentials.pid, + peer_executable.string().c_str(), allowed_executable.string().c_str()); + return false; + } + + return true; +} diff --git a/src/datacrumbs/signer/sign_probes_service.h b/src/datacrumbs/signer/sign_probes_service.h new file mode 100644 index 00000000..56ac5109 --- /dev/null +++ b/src/datacrumbs/signer/sign_probes_service.h @@ -0,0 +1,28 @@ +#ifndef DATACRUMBS_SIGNER_SIGN_PROBES_SERVICE_H__ +#define DATACRUMBS_SIGNER_SIGN_PROBES_SERVICE_H__ + +#include +#include + +class SignProbesService { + public: + SignProbesService(); + ~SignProbesService(); + + int run(); + + private: + bool initialize_socket(); + void handle_client(int client_fd) const; + std::string build_response(bool ok, const std::string& payload, const std::string& error) const; + bool read_all_from_fd(int fd, std::string* payload) const; + bool write_all_to_fd(int fd, const std::string& payload) const; + std::string sign_signing_payload(const std::string& request_payload, std::string* error) const; + bool is_authorized_client(int client_fd, std::string* error) const; + + std::filesystem::path socket_path_; + std::filesystem::path allowed_client_executable_; + int server_fd_ = -1; +}; + +#endif diff --git a/src/datacrumbs/signer/sign_probes_service_main.cpp b/src/datacrumbs/signer/sign_probes_service_main.cpp new file mode 100644 index 00000000..c7775940 --- /dev/null +++ b/src/datacrumbs/signer/sign_probes_service_main.cpp @@ -0,0 +1,6 @@ +#include "datacrumbs/signer/sign_probes_service.h" + +int main() { + SignProbesService service; + return service.run(); +} diff --git a/src/datacrumbs/system_configurator/system_configurator.cpp b/src/datacrumbs/system_configurator/system_configurator.cpp new file mode 100644 index 00000000..6a352f82 --- /dev/null +++ b/src/datacrumbs/system_configurator/system_configurator.cpp @@ -0,0 +1,144 @@ +#include "datacrumbs/system_configurator/system_configurator.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +std::string SystemConfigurator::current_hostname() const { + char hostname_buf[256] = {0}; + if (gethostname(hostname_buf, sizeof(hostname_buf) - 1) != 0) { + throw std::runtime_error("Failed to get hostname."); + } + return hostname_buf; +} + +void SystemConfigurator::add_string(json_object* root, const char* key, + const std::string& value) const { + json_object_object_add(root, key, json_object_new_string(value.c_str())); +} + +std::string SystemConfigurator::optional_macro_string(const char* value) const { + return value != nullptr ? std::string(value) : std::string(); +} + +void SystemConfigurator::enforce_secret_ownership_and_mode() const { + const auto secret_path = datacrumbs::probe_file::secret_path(); + chown(secret_path.c_str(), 0, 0); + chmod(secret_path.c_str(), S_IRUSR); +} + +void SystemConfigurator::add_system_configuration(json_object* root) const { + std::string job_other_flags; + std::string inclusion_paths; +#ifdef DATACRUMBS_JOB_OTHER_FLAGS + job_other_flags = optional_macro_string(DATACRUMBS_JOB_OTHER_FLAGS); +#endif +#ifdef DATACRUMBS_INCLUSION_PATHS + inclusion_paths = optional_macro_string(DATACRUMBS_INCLUSION_PATHS); +#endif + + const std::unordered_map values = { + {"DATACRUMBS_INSTALL_PREFIX", DATACRUMBS_INSTALL_PREFIX_PATH}, + {"DATACRUMBS_INSTALL_HOST", DATACRUMBS_INSTALL_HOST}, + {"DATACRUMBS_INSTALL_USER", DATACRUMBS_INSTALL_USER}, + {"DATACRUMBS_INSTALL_BIN_DIR", DATACRUMBS_INSTALL_BIN_DIR}, + {"DATACRUMBS_INSTALL_SBIN_DIR", DATACRUMBS_INSTALL_SBIN_DIR}, + {"DATACRUMBS_INSTALL_LIB_DIR", DATACRUMBS_INSTALL_LIB_DIR}, + {"DATACRUMBS_INSTALL_LIBEXEC_DIR", DATACRUMBS_INSTALL_LIBEXEC_DIR}, + {"DATACRUMBS_INSTALL_ETC_DIR", DATACRUMBS_INSTALL_ETC_DIR}, + {"DATACRUMBS_INSTALL_CONFIGS_DIR", DATACRUMBS_INSTALL_CONFIGS_DIR}, + {"DATACRUMBS_INSTALL_DATA_DIR", DATACRUMBS_INSTALL_SHARED_DATA_DIR}, + {"DATACRUMBS_INSTALL_MODULES_DIR", DATACRUMBS_INSTALL_MODULES_DIR}, + {"DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR", DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR}, + {"DATACRUMBS_INSTALL_RUNSTATEDIR", DATACRUMBS_INSTALL_RUNSTATEDIR}, + {"DATACRUMBS_CLIENT_LIB", DATACRUMBS_CLIENT_LIB}, + {"DATACRUMBS_TRACE_DIR_PATTERN", DATACRUMBS_TRACE_DIR_PATTERN}, + {"DATACRUMBS_JOB_SCHEDULER", DATACRUMBS_JOB_SCHEDULER}, + {"DATACRUMBS_JOB_OTHER_FLAGS", job_other_flags}, + {"DATACRUMBS_JOB_ID_VAR", DATACRUMBS_JOB_ID_VAR}, + {"DATACRUMBS_SERVER_RUN_DIR", DATACRUMBS_SERVER_RUN_DIR}, + {"DATACRUMBS_SERVER_RUN_ID_FILE", DATACRUMBS_SERVER_RUN_ID_FILE}, + {"DATACRUMBS_LOG_DIR", DATACRUMBS_LOG_DIR}, + {"DATACRUMBS_USER", DATACRUMBS_USER}, + {"DATACRUMBS_INCLUSION_PATHS", inclusion_paths}, + {"DATACRUMBS_KERNEL_UNAME_R", DATACRUMBS_KERNEL_UNAME_R}, + {"DATACRUMBS_KERNEL_HEADERS_PATH", DATACRUMBS_KERNEL_HEADERS_PATH}, + {"DATACRUMBS_LIBC_SO", DATACRUMBS_LIBC_SO}, + }; + + for (const auto& [key, value] : values) { + add_string(root, key.c_str(), value); + } +} + +int SystemConfigurator::run() { + try { + bool secret_ready = false; + std::string secret; + if (datacrumbs::probe_file::ensure_probe_secret(&secret)) { + enforce_secret_ownership_and_mode(); + secret_ready = true; + } else if (geteuid() == 0) { + DC_LOG_ERROR("Failed to create probe signing secret"); + return 1; + } else { + DC_LOG_WARN("Skipping probe signing secret creation during non-root configuration pass"); + } + + if (std::filesystem::exists(DATACRUMBS_SYSTEM_PROBE_FILE)) { + DC_LOG_INFO("System configuration already exists at: %s", DATACRUMBS_SYSTEM_PROBE_FILE); + if (secret_ready) { + DC_LOG_INFO("Probe signing secret ensured at: %s", + datacrumbs::probe_file::secret_path().string().c_str()); + } + return 0; + } + + const std::string hostname = current_hostname(); + + json_object* root = json_object_new_object(); + json_object* summary = json_object_new_object(); + json_object* system_configuration = json_object_new_object(); + + add_system_configuration(system_configuration); + json_object_object_add(root, "system_configuration", system_configuration); + + add_string(summary, "config_name", hostname); + add_string(summary, "config_path", DATACRUMBS_INSTALL_CONFIGS_DIR); + add_string(summary, "trace_log_dir", DATACRUMBS_CONFIGURED_TRACE_DIR); + add_string(summary, "data_dir", DATACRUMBS_INSTALL_SHARED_DATA_DIR); + add_string(summary, "system_probe_path", DATACRUMBS_SYSTEM_PROBE_FILE); + add_string(summary, "hostname", hostname); + add_string(summary, "user", DATACRUMBS_USER); + add_string(summary, "install_user", DATACRUMBS_INSTALL_USER); + json_object_object_add(root, "summary", summary); + + const char* json_payload = json_object_to_json_string_ext(root, JSON_C_TO_STRING_PLAIN); + const bool ok = + datacrumbs::probe_file::write_gzip_file(DATACRUMBS_SYSTEM_PROBE_FILE, json_payload); + json_object_put(root); + + if (!ok) { + DC_LOG_ERROR("Failed to write system configuration file: %s", DATACRUMBS_SYSTEM_PROBE_FILE); + return 1; + } + + DC_LOG_INFO("System configuration written to: %s", DATACRUMBS_SYSTEM_PROBE_FILE); + if (secret_ready) { + DC_LOG_INFO("Probe signing secret ensured at: %s", + datacrumbs::probe_file::secret_path().string().c_str()); + } + return 0; + } catch (const std::exception& ex) { + DC_LOG_ERROR("System configurator failed: %s", ex.what()); + return 1; + } +} diff --git a/src/datacrumbs/system_configurator/system_configurator.h b/src/datacrumbs/system_configurator/system_configurator.h new file mode 100644 index 00000000..5a8656a6 --- /dev/null +++ b/src/datacrumbs/system_configurator/system_configurator.h @@ -0,0 +1,20 @@ +#ifndef DATACRUMBS_SYSTEM_CONFIGURATOR_SYSTEM_CONFIGURATOR_H__ +#define DATACRUMBS_SYSTEM_CONFIGURATOR_SYSTEM_CONFIGURATOR_H__ + +#include + +struct json_object; + +class SystemConfigurator { + public: + int run(); + + private: + std::string current_hostname() const; + void add_string(json_object* root, const char* key, const std::string& value) const; + std::string optional_macro_string(const char* value) const; + void enforce_secret_ownership_and_mode() const; + void add_system_configuration(json_object* root) const; +}; + +#endif diff --git a/src/datacrumbs/system_configurator/system_configurator_main.cpp b/src/datacrumbs/system_configurator/system_configurator_main.cpp new file mode 100644 index 00000000..aec21b72 --- /dev/null +++ b/src/datacrumbs/system_configurator/system_configurator_main.cpp @@ -0,0 +1,6 @@ +#include "datacrumbs/system_configurator/system_configurator.h" + +int main() { + SystemConfigurator configurator; + return configurator.run(); +} diff --git a/src/datacrumbs/validator/bpf/probe.bpf.c b/src/datacrumbs/validator/bpf/probe.bpf.c deleted file mode 100644 index db61bf02..00000000 --- a/src/datacrumbs/validator/bpf/probe.bpf.c +++ /dev/null @@ -1,24 +0,0 @@ -// Generated by DataCrumbs during system build -#include -// bpf headers -#include -#include -#include -#include - -char LICENSE[] SEC("license") = "Dual BSD/GPL"; - -SEC("kprobe") -int BPF_KPROBE(kprobe_test) { - return 0; -} - -SEC("uprobe") -int BPF_UPROBE(uprobe_test) { - return 0; -} - -SEC("ksyscall") -int BPF_KSYSCALL(syscall_test, struct pt_regs* regs) { - return 0; -} \ No newline at end of file diff --git a/src/datacrumbs/validator/probe_validator.cpp b/src/datacrumbs/validator/probe_validator.cpp deleted file mode 100644 index 4e2148d2..00000000 --- a/src/datacrumbs/validator/probe_validator.cpp +++ /dev/null @@ -1,372 +0,0 @@ -// BPF Headers -#include -#include -// Generated Headers -#include -#include -#include -// other headers -#include -#include // Logging header -#include -// std headers -#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) { - // Initialize config manager (similar to probe explorer) - configManager_ = Singleton::get_instance(argc, argv); - } - - std::unordered_map> ValidateProbes(struct validator* skel) { - bool all_ok = true; - // Get probes file path from configuration - const auto& probesFile = configManager_->probe_file_path; - DC_LOG_INFO("[ProbeGenerator] Reading probes file: %s", probesFile.c_str()); - - std::unordered_map> invalid_function_names; - // Read probes JSON file - struct json_object* probesJson = json_object_from_file(probesFile.c_str()); - if (!probesJson) { - 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"); - if (!kprobe_prog) { - DC_LOG_ERROR("Failed to find kprobe_test program in BPF object"); - return invalid_function_names; - } - struct bpf_program* uprobe_prog = bpf_object__find_program_by_name(skel->obj, "uprobe_test"); - if (!uprobe_prog) { - DC_LOG_ERROR("Failed to find uprobe_test program in BPF object"); - return invalid_function_names; - } - struct bpf_program* syscall_prog = bpf_object__find_program_by_name(skel->obj, "syscall_test"); - if (!syscall_prog) { - DC_LOG_ERROR("Failed to find syscall_test program in BPF object"); - return invalid_function_names; - } - size_t total_probes = configManager_->category_map.size(); - size_t current_probe = 0; - invalid_probes = 0; - - std::mutex invalid_mutex; - std::atomic atomic_invalid_probes{0}; - std::atomic atomic_current_probe{0}; - - 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) { - struct bpf_kprobe_opts opts = { - .sz = sizeof(struct bpf_kprobe_opts), - }; - struct bpf_link* link = bpf_program__attach_kprobe_opts(kprobe_prog, func.c_str(), &opts); - if (!link) { - is_invalid = true; - } else { - bpf_link__destroy(link); - } - } else if (probe_type == ProbeType::UPROBE) { - auto uprobe = UProbe::fromJson(jprobe); - std::string function_name, offset; - auto pos = func.find(':'); - bool is_manual = false; - if (pos != std::string::npos) { - function_name = func.substr(0, pos); - offset = func.substr(pos + 1); - is_manual = true; - } else { - function_name = func; - offset = ""; - } - unsigned long offset_val = 0; - if (!offset.empty()) { - offset_val = std::stoul(offset.c_str(), nullptr, 0); - } - struct bpf_link* link = bpf_program__attach_uprobe_opts( - uprobe_prog, -1, uprobe.binary_path.c_str(), offset_val, nullptr); - if (!link) { - is_invalid = true; - } else { - bpf_link__destroy(link); - } - } else if (probe_type == ProbeType::SYSCALLS) { - struct bpf_ksyscall_opts opts = { - .sz = sizeof(struct bpf_ksyscall_opts), - }; - struct bpf_link* link = bpf_program__attach_ksyscall(syscall_prog, func.c_str(), &opts); - if (!link) { - is_invalid = true; - } else { - bpf_link__destroy(link); - } - } - if (is_invalid) { - atomic_invalid_probes++; - std::lock_guard lock(invalid_mutex); - invalid_function_names[probe_name].push_back(func); - } - }; - - // Use a thread pool of 4 workers - const size_t num_workers = std::max(1, std::thread::hardware_concurrency()); - DC_LOG_INFO("Using %zu worker threads for probe validation", num_workers); - std::vector workers; - std::mutex queue_mutex; - std::condition_variable cv; - bool done = false; - - // 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) { - struct json_object* jprobe = json_object_array_get_idx(probesJson, i); - auto probe = Probe::fromJson(jprobe); - 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); - // Store copies of probe.name and probe.type to avoid race conditions - task_queue.emplace(probe.name, probe.type, func, jprobe); - } - } - - // Worker threads - for (size_t i = 0; i < num_workers; ++i) { - workers.emplace_back([&]() { - while (true) { - { - std::unique_lock lock(queue_mutex); - cv.wait(lock, [&]() { return !task_queue.empty() || done; }); - if (task_queue.empty()) { - if (done) - break; - else - continue; - } - // 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(); - - // Release lock before validation (which can be slow) - lock.unlock(); - - // Now validate with copied data - validate_func(probe_name, probe_type, func, jprobe); - } - } - }); - } - - // Notify workers after all tasks are enqueued - { - std::lock_guard lock(queue_mutex); - done = true; - } - cv.notify_all(); - - 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(); } - size_t invalid_probes; - - private: - std::shared_ptr configManager_; -}; -} // 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); - auto invalid_function_names = validator.ValidateProbes(skel); - auto total_probes = validator.total_probes(); - 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 - // functions if any - int arr_len = json_object_array_length(invalid_probesJson); - for (int i = 0; i < arr_len; ++i) { - struct json_object* jprobe = json_object_array_get_idx(invalid_probesJson, i); - // Get probe name - struct json_object* jname = nullptr; - if (!json_object_object_get_ex(jprobe, "name", &jname)) continue; - std::string probe_name = json_object_get_string(jname); - - // Always clear the "functions" array - struct json_object* jfunctions = json_object_new_array(); - json_object_object_add(jprobe, "functions", jfunctions); - - // If this probe has invalid functions, add them to the "functions" attribute - auto it = invalid_function_names.find(probe_name); - if (it != invalid_function_names.end()) { - for (const auto& func : it->second) { - json_object_array_add(jfunctions, json_object_new_string(func.c_str())); - } - } - } - // Write the updated invalid_probesJson to the probe_invalid_file_path - const auto& invalidFile = configManager_->probe_invalid_file_path; - if (json_object_to_file_ext(invalidFile.c_str(), invalid_probesJson, JSON_C_TO_STRING_PRETTY) != - 0) { - DC_LOG_ERROR("Failed to write invalid probes JSON to file: %s", invalidFile.c_str()); - } else { - DC_LOG_INFO("Invalid probes JSON written to: %s", invalidFile.c_str()); - } - json_object_put(invalid_probesJson); // free JSON object - // Set ownership and permissions for the invalid probes file - auto pwd = getpwnam(configManager_->user.c_str()); - uid_t uid = pwd ? pwd->pw_uid : static_cast(-1); - gid_t gid = pwd ? pwd->pw_gid : static_cast(-1); - // Set file ownership to configManager_->user - chown(configManager_->probe_invalid_file_path.c_str(), uid, gid); - // Optionally set permissions (e.g., rw-r-----) - chmod(configManager_->probe_invalid_file_path.c_str(), 0640); - } catch (const std::exception& ex) { - DC_LOG_ERROR("Exception: %s", ex.what()); - return -1; - } - - return invalid_probes > 0 ? -1 : 0; -} \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt deleted file mode 100755 index 313733c8..00000000 --- a/tests/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_subdirectory(unittests) -add_subdirectory(benchmarks/ior) diff --git a/tests/apps/Montage/MontageExec.template.sh b/tests/apps/Montage/MontageExec.template.sh deleted file mode 100755 index c5509f1b..00000000 --- a/tests/apps/Montage/MontageExec.template.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/bash -# NOTE: Leave this as is to stop for errors and unset variables -set -eu - -# NOTE: This dataset name should be the name of the folder in the ${INPUT_DATA_DIR}, change $OUTPUT_DATA_DIR as needed -export DATASET=M16_6x6 -export OUTPUT_DATA_DIR=/mnt/nvme/$USER/Montage/output - -export MONTAGE_DIR=$HOME/sources/Montage -export INPUT_DATA_DIR=$HOME/data/Montage/ -export PATH=${MONTAGE_DIR}/bin:$PATH -export LD_LIBRARY_PATH=${MONTAGE_DIR}/lib:$LD_LIBRARY_PATH - -mkdir -p "$OUTPUT_DATA_DIR" - -export OMP_NUM_THREADS=1 - -#NONMPIRUN="srun -n1 " -#NONMPIRUN="srun --ntasks-per-node=1 -N 1 -w ares-comp-31 " -NONMPIRUN="mpirun -n 1 " - -# Needed to run MPI version programs -MPIRUN="mpirun -n 16 " -#MPIRUN="srun --ntasks-per-node=16 -N 1 -w ares-comp-31 " - -# NOTE: This is to get a log of the commands being run -set -x - -function run_montage_workflow { - rm -f "$OUTPUT_DATA_DIR"/*.fits "$OUTPUT_DATA_DIR"/*.hdr "$OUTPUT_DATA_DIR"/*.tbl "$OUTPUT_DATA_DIR"/*.png - rm -rf "$OUTPUT_DATA_DIR"/M16_*dir - - mkdir "$OUTPUT_DATA_DIR"/M16_projdir "$OUTPUT_DATA_DIR"/M16_diffdir "$OUTPUT_DATA_DIR"/M16_corrdir - echo "Create a metadata table of the input images, Kimages.tbl" - $NONMPIRUN mImgtbl "$INPUT_DATA_DIR"/$DATASET "$OUTPUT_DATA_DIR"/m16.tbl - - echo "Create a FITS header describing the footprint of the mosaic" - $NONMPIRUN mMakeHdr "$OUTPUT_DATA_DIR"/m16.tbl "$OUTPUT_DATA_DIR"/m16.hdr - - echo "Reproject the input images" - $MPIRUN mProjExecMPI -p "$INPUT_DATA_DIR"/$DATASET "$OUTPUT_DATA_DIR"/m16.tbl "$OUTPUT_DATA_DIR"/m16.hdr "$OUTPUT_DATA_DIR"/M16_projdir "$OUTPUT_DATA_DIR"/m16_stats.tbl - - echo "Create a metadata table of the reprojected images" - $NONMPIRUN mImgtbl "$OUTPUT_DATA_DIR"/M16_projdir "$OUTPUT_DATA_DIR"/m16_proj.tbl - - echo "Analyze the overlaps between images" - $NONMPIRUN mOverlaps "$OUTPUT_DATA_DIR"/m16_proj.tbl "$OUTPUT_DATA_DIR"/m16_diffs.tbl - - $MPIRUN mDiffExecMPI -p "$OUTPUT_DATA_DIR"/M16_projdir "$OUTPUT_DATA_DIR"/m16_diffs.tbl "$OUTPUT_DATA_DIR"/m16.hdr "$OUTPUT_DATA_DIR"/M16_diffdir - $MPIRUN mFitExecMPI "$OUTPUT_DATA_DIR"/m16_diffs.tbl "$OUTPUT_DATA_DIR"/m16_fits.tbl "$OUTPUT_DATA_DIR"/M16_diffdir - - echo "Perform background modeling and compute corrections for each image" - $NONMPIRUN mBgModel "$OUTPUT_DATA_DIR"/m16_proj.tbl "$OUTPUT_DATA_DIR"/m16_fits.tbl "$OUTPUT_DATA_DIR"/m16_corrections.tbl - - echo "Apply corrections to each image" - # This is a time-comsuming step and is not parallelized - $NONMPIRUN mBgExec -p "$OUTPUT_DATA_DIR"/M16_projdir/ "$OUTPUT_DATA_DIR"/m16_proj.tbl "$OUTPUT_DATA_DIR"/m16_corrections.tbl "$OUTPUT_DATA_DIR"/M16_corrdir - - echo "Coadd the images to create a mosaic with background corrections" - $MPIRUN mAddMPI -p "$OUTPUT_DATA_DIR"/M16_corrdir/ "$OUTPUT_DATA_DIR"/m16_proj.tbl "$OUTPUT_DATA_DIR"/m16.hdr "$OUTPUT_DATA_DIR"/m16.fits - - echo "Make a PNG of the corrected mosaic for visualization" - $NONMPIRUN mViewer -ct 1 -gray "$OUTPUT_DATA_DIR"/m16.fits -1s max gaussian-log -out "$OUTPUT_DATA_DIR"/m16.png -} - -run_montage_workflow diff --git a/tests/apps/Montage/README.md b/tests/apps/Montage/README.md deleted file mode 100644 index 21111a3c..00000000 --- a/tests/apps/Montage/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Montage - -## Automatic Montage Setup - -Run the `setup_montage.sh` - -This script will download the appropriate version of Montage **v6.1**, -patch it for newer compilers (gcc 11+), updates the location for Montage in the -`MontageExec` script, load an MPI module, and then build Montage if `true` was passed. - -The script may take 3 parameters: - -1. `RUNMAKE`: This will determine whether or not to build Montage. - Values include `true` or `false` (default: `false`) -2. `CLONEROOT`: Where should the script clone Montage to. Default is current working directory. -3. `GITTAG`: The Git tag, defaults to `v6.1` -4. `GITOUT`: The output directory, defaults to `Montage-$GITTAG`. - If you change `$GITTAG` then `$GITOUT` will also change accordingly. - -Montage will hence be cloned to `${CLONEROOT}/${GITOUT}` diff --git a/tests/apps/Montage/gcc-11-montage-v6.1.patch b/tests/apps/Montage/gcc-11-montage-v6.1.patch deleted file mode 100644 index 2ca09d5d..00000000 --- a/tests/apps/Montage/gcc-11-montage-v6.1.patch +++ /dev/null @@ -1,120 +0,0 @@ -diff --git a/Montage/Makefile.LINUX b/Montage/Makefile.LINUX -index 57ea4eb..02cf1e3 100644 ---- a/Montage/Makefile.LINUX -+++ b/Montage/Makefile.LINUX -@@ -53,14 +53,14 @@ LIBS = -L../lib -lwcs -lcfitsio -lcoord -lmtbl -lsvc \ - -lwww -lboundaries -lpixbounds -ltwoplane -lnsl -lm - - SBINS = mConvert mFlattenExec mHdrCheck mHdrtbl mTblSort mTileHdr mTileImage --MBINS = mProjExecMPI mFitExecMPI mDiffExecMPI mBgExecMPI mAddMPI mAddExecMPI -+MBINS = mProjExecMPI mFitExecMPI mDiffExecMPI mAddMPI mAddExecMPI - - BINS = $(SBINS) - - - # uncomment the next two lines to build MPI modules --# MPICC = mpicc --# BINS = $(SBINS) $(MBINS) -+MPICC = mpicc -+BINS = $(SBINS) $(MBINS) - - - .c.o: -diff --git a/Montage/checkHdr.c b/Montage/checkHdr.c -index 15d3b68..40da192 100644 ---- a/Montage/checkHdr.c -+++ b/Montage/checkHdr.c -@@ -75,7 +75,7 @@ char ctype1[1024]; - char ctype2[1024]; - - char *hdrCheck_outfile = (char *)NULL; --FILE *fout; -+FILE *fout_1; - - int CHdebug = 0; - int errorCount = 0; -@@ -185,9 +185,9 @@ int checkHdr(char *infile, int hdrflag, int hdu) - - if(hdrCheck_outfile) - { -- fout = fopen(hdrCheck_outfile, "w+"); -+ fout_1 = fopen(hdrCheck_outfile, "w+"); - -- if(fout == (FILE *)NULL) -+ if(fout_1 == (FILE *)NULL) - { - fprintf(fstatus, "[struct stat=\"ERROR\", msg=\"Cannot open output file %s.\"]\n", hdrCheck_outfile); - fflush(fstatus); -@@ -759,8 +759,8 @@ int errorOutput(char *msg) - { - if(hdrCheck_outfile) - { -- fprintf(fout, "%s\n", msg); -- fflush(fout); -+ fprintf(fout_1, "%s\n", msg); -+ fflush(fout_1); - - ++errorCount; - } -diff --git a/Montage/get_hfiles.c b/Montage/get_hfiles.c -index c26b2a7..1faf104 100644 ---- a/Montage/get_hfiles.c -+++ b/Montage/get_hfiles.c -@@ -31,7 +31,7 @@ extern int hdrlen; - int get_hhdr (char*, struct Hdr_rec*, char*); - void print_hrec (struct Hdr_rec*); - --struct Hdr_rec hdr_rec; -+struct Hdr_rec hdr_rec_1; - - - /* Recursively finds all FITS files */ -@@ -70,13 +70,13 @@ void get_hfiles (char *pathname) - sprintf (dirname, "%s/%s", pathname, entry->d_name); - - if(strncmp(dirname, "./", 2) == 0) -- strcpy (hdr_rec.fname, dirname+2); -+ strcpy (hdr_rec_1.fname, dirname+2); - else -- strcpy (hdr_rec.fname, dirname+hdrlen); -+ strcpy (hdr_rec_1.fname, dirname+hdrlen); - - if(debug) - { -- printf("DEBUG: [%s] -> [%s]\n", dirname, hdr_rec.fname); -+ printf("DEBUG: [%s] -> [%s]\n", dirname, hdr_rec_1.fname); - fflush(stdout); - } - -@@ -112,7 +112,7 @@ void get_hfiles (char *pathname) - { - msg[0] = '\0'; - -- istatus = get_hhdr (dirname, &hdr_rec, msg); -+ istatus = get_hhdr (dirname, &hdr_rec_1, msg); - - if (istatus != 0) - failed += istatus; -diff --git a/Montage/montage.h b/Montage/montage.h -index 7912116..a005820 100644 ---- a/Montage/montage.h -+++ b/Montage/montage.h -@@ -1,4 +1,4 @@ - #ifndef MONTAGE --FILE *fstatus; - #define MONTAGE -+static FILE *fstatus; - #endif -diff --git a/lib/src/coord/coord.h b/lib/src/coord/coord.h -index 7a9eda9..65428e8 100644 ---- a/lib/src/coord/coord.h -+++ b/lib/src/coord/coord.h -@@ -1,7 +1,7 @@ - #ifndef ISIS_COORD_LIB - - --int coord_debug; -+static int coord_debug; - - - struct COORD /* Definition of coordinate structure */ diff --git a/tests/apps/Montage/setup_montage.sh b/tests/apps/Montage/setup_montage.sh deleted file mode 100755 index 94bcd37b..00000000 --- a/tests/apps/Montage/setup_montage.sh +++ /dev/null @@ -1,65 +0,0 @@ -#! /usr/bin/env bash - -set -eu -CWD=$(pwd) - -RUNMAKE=${1:-false} -CLONEROOT=${2:-"$CWD"} -GITTAG=${3:-"v6.1"} -GITOUT=${4:-"Montage-${GITTAG}"} - -# NOTE: Change OPENMPIMODULE as needed or change USEMPI to false if you don't want to use MPI. -OPENMPIMODULE="openmpi" -USEMPIMODULE=true -USEMPI=true - -GITOUTDIR="${CLONEROOT}/${GITOUT}" - -if [[ ! -d "$GITOUTDIR" ]]; then - git clone https://github.com/Caltech-IPAC/Montage.git -b "$GITTAG" "$GITOUTDIR" -fi -cd "${GITOUTDIR}" || { - echo "Failed to cd into $GITOUTDIR" - exit 1 -} - -if [[ ! -f "${GITOUTDIR}"/PATCHED ]]; then - { - git apply "$CWD"/gcc-11-montage-"${GITTAG}".patch - touch "${GITOUTDIR}"/PATCHED - } || - { - echo 'Patch failed' - exit 1 - } -else - echo "Patch already applied, skipping." -fi -# -# changing the MONTAGE_DIR variable to the current directory -cp "${CWD}"/MontageExec.template.sh "${CWD}"/MontageExec -sed -i "s|MONTAGE_DIR=.*|MONTAGE_DIR=${GITOUTDIR}|" "$CWD"/MontageExec - -if [[ $USEMPI == true ]]; then - if [[ $USEMPIMODULE == true ]]; then - if ! module load "$OPENMPIMODULE"; then - echo 'MPI module name not found, please check the OPENMPIMODULE variable.' - exit 1 - fi - elif ! command -v mpicc &>/dev/null; then - echo "mpicc not found in system PATH" - echo "Please load the MPI module or set USEMPI to false." - exit 1 - fi -else - echo "Continuing without MPI support." -fi - -if [[ $RUNMAKE == true ]]; then - make clean - make -j "$(nproc)" -else - echo "Please change directory to ${GITOUTDIR} and run 'make' to compile Montage." -fi - -cd "${CWD}" || exit 1 diff --git a/tests/benchmarks/ior/CMakeLists.txt b/tests/benchmarks/ior/CMakeLists.txt deleted file mode 100644 index efbf7c55..00000000 --- a/tests/benchmarks/ior/CMakeLists.txt +++ /dev/null @@ -1,45 +0,0 @@ -find_program( - IOR_EXECUTABLE - NAMES ior - PATHS ENV PATH -) - -if(IOR_EXECUTABLE) - 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) -endif() - -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_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/output/buffered_write.png b/tests/output/buffered_write.png deleted file mode 100755 index 5b7fe4cf73480f396b21b448178157cbc6260b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90965 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 diff --git a/tests/output/direct_write.png b/tests/output/direct_write.png deleted file mode 100755 index 4a4706ca89cfa7350a925bd62dc9d2e104055ba6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88288 zcmcG$2RzsB{x|-S(ITNDl#);pl`SL+DHRowgjAAM_6`{dNg=XIq0D4tCL&2mR%9hJ zvI`mi=f(G||9#H+-S_=?+~?8vaVq+FkL!B9p6hk_9#d0dSi!!6LZL9IC@ZQ{C`%?N z6spK&boiS)47d33f09-Qw5&ADFId^?Up1l}(YLa=Vs3TC*kF^5(ba3l=4N|#O77ex zu<4SOmBlqFAtBShf5T4ms~3enum8CjAF|v+`Sdjkg;AgUN0lHKZ%m=0P*fDgxFxi9>@9vKxPI`Cy%LE&1B5AF^jWws0>g z5vE`GWiD{vHIK6Rd-{@mw)(`2Y+m~K6(-L4qjt~Y7v6IOSog1A_-nRqhH|NizrKIW z%P`Vm@vpt?OVZV3{`%DX4z2ho@*()uYH@YmhKkM0exkp>-(r5wIUzCedS{Mnp2Wh3 zC|~y(o*Xgk{qaNL;FAg4ktB_e!t+$WhuXZaUoS4wrC<1rC*?v~C)+xc^>I;CjF;H1ZdvDddhtS9g=^>|jaZES zuWy1}*Wz89OZ-20MoAj;A>SlcDFtqv&Gs8HrED^r&KFl?4@1Uqv z?=c!$+S%qe=g1v*ixx{w%s=<^q_N=izH{f!x=zmtiP>TxpJ35sSm5rrp5O$ z))f3Fd*!PaJ4Hp;O4|&$WoBCErTnN({Jdj3(^&q~r%z*IVusCGJr-Vj_G(9sdFI-> zI{gwahTi&Qj=T5n=^Gk)D0r{B?$h4izrxnmb~O{F{nI0*-kQfNPoN9AVMP>!jqyBmLgBCn*h)F7Sh!-o%V-@d)1{(E@X!s%{e=fTPgkGlx?Jo^ zquWs7pH*!xe*{zXiUOv_dOBx+w<#GIaQ_MZu6c*+qsFSrxLW1qlL4WrrPk7bU)rGHhAATRUi~9G^md@1U z8X5}c&-0jl&AI+jZk{vGX7F`=vJP!u_xJDZ?ZqCGQ$5j4TwH;bp+cRH0%h+!9XNjc zIJr7}llS}ghm-V*HaN(+-uL}{M)zhKXZn&rl#iH z#fwW>Sy}fwj4L1e-P?PKQ`U*CudmO^?$Rax{DK0@u6Jv1aY`~578cG}Z{51p!p6oc zIazS$*?gbLNxPYe2EE~5zd~~J@7=q{zheiB(?apE_hTB{zkU05Wgg~FcmcE>xUBD; zoeGMIOBpxv;8V1-uB=Z?NH}I=BgQrK_2o4hx0`-`v<*Ye*?|Irf_;6T;}sRZfB&vH z)?F2xdxp~cHfW2Y;)`oNYBjaBJidyrqXYf@x2|8metPVqoUhN@wzg<`28P6}tdKy% z3l|Q0EM@EtG`W0P`M`l2zXqEd3<^2K&EjO8r-#dni;H=7>`*0dq~zPTZ^{P`dSQ1r zC!tWt^m=o-toBSko#DmF$?4Rh`p1b!uHxQxlfRw~|$y5^h3;lS^K{e2MBpT8);#y62FjI{bGg#T%n7<4K1{!AgA|X}a=tBFsF{6fa53&y z(X!4rzkWS4*H~S>T1ralNPm4!K9(3-mQ&t^^XJ>KijJK;X?j)H%xvf3BS#`UargH@a?}g$vI(jwk@nd=1dbU~1 z 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

kIPbmgmK@+Cco-QI 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 diff --git a/tests/poc/bpf-core/.gitignore b/tests/poc/bpf-core/.gitignore deleted file mode 100644 index af25bebe..00000000 --- a/tests/poc/bpf-core/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.o -vmlinux.h -file -example -*.skel.h \ No newline at end of file diff --git a/tests/poc/bpf-core/Makefile b/tests/poc/bpf-core/Makefile deleted file mode 100644 index c565865d..00000000 --- a/tests/poc/bpf-core/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -TARGET := example -ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/') -BPF_SRCS := $(wildcard *.bpf.c) -BPF_OBJS := $(BPF_SRCS:.bpf.c=.bpf.o) -MERGED_OBJ := merged.bpf.o -SKEL := $(TARGET).skel.h -USER_C := $(TARGET).c - -all: vmlinux.h $(TARGET) - -$(BPF_OBJS): %.bpf.o: %.bpf.c - clang -target bpf -D __TARGET_ARCH_$(ARCH) -Wall -O2 -g -c $< -o $@ - llvm-strip -g $@ - -$(MERGED_OBJ): $(BPF_OBJS) - bpftool gen object $@ $(BPF_OBJS) - -$(SKEL): $(MERGED_OBJ) - bpftool gen skeleton $< > $@ - -$(TARGET): $(USER_C) $(SKEL) - gcc -Wall -o $@ $(USER_C) -L../libbpf/src -l:libbpf.so -lelf -lz - -vmlinux.h: - bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h - -clean: - - rm -f $(BPF_OBJS) $(MERGED_OBJ) $(SKEL) $(TARGET) diff --git a/tests/poc/bpf-core/example.c b/tests/poc/bpf-core/example.c deleted file mode 100644 index 4504493e..00000000 --- a/tests/poc/bpf-core/example.c +++ /dev/null @@ -1,62 +0,0 @@ -#include "example.h" - -#include -#include -#include -#include - -#include "example.skel.h" -static int libbpf_print_fn(enum libbpf_print_level level, const char* format, va_list args) { - if (level >= LIBBPF_DEBUG) return 0; - return vfprintf(stderr, format, args); -} -int handle_event(void* ctx, void* data, size_t data_sz) { - struct event_t* m = data; - if (m->pid == 0 || m->event_id == 0) { - return 0; - } - printf("%-6d %-6u\n", m->pid, m->event_id); - return 0; -} -void lost_event(void* ctx, int cpu, long long unsigned int data_sz) { - printf("lost event\n"); -} -int main() { - struct merged_bpf* skel; - int err; - struct ring_buffer* rb = NULL; - libbpf_set_print(libbpf_print_fn); - skel = merged_bpf__open_and_load(); - if (!skel) { - printf("Failed to open BPF object\n"); - return 1; - } - err = merged_bpf__attach(skel); - if (err) { - fprintf(stderr, "Failed to attach BPF skeleton: %d\n", err); - merged_bpf__destroy(skel); - return 1; - } - rb = ring_buffer__new(bpf_map__fd(skel->maps.output), handle_event, NULL, NULL); - if (!rb) { - err = -1; - fprintf(stderr, "Failed to create ring buffer\n"); - merged_bpf__destroy(skel); - return 1; - } - while (true) { - err = ring_buffer__poll(rb, 30000); - // Ctrl-C gives -EINTR - if (err == -EINTR) { - err = 0; - break; - } - if (err < 0) { - printf("Error polling ring buffer: %d\n", err); - break; - } - } - ring_buffer__free(rb); - merged_bpf__destroy(skel); - return -err; -} \ No newline at end of file diff --git a/tests/poc/bpf-core/example.generic.bpf.c b/tests/poc/bpf-core/example.generic.bpf.c deleted file mode 100644 index 1b9d2004..00000000 --- a/tests/poc/bpf-core/example.generic.bpf.c +++ /dev/null @@ -1,19 +0,0 @@ -// map_def.c -#include "vmlinux.h" -// -#include -// -#include -// -#include -// -#include - -#define DATACRUMBS_BPF_RING_BUF(name) \ - struct { \ - __uint(type, BPF_MAP_TYPE_RINGBUF); \ - __uint(max_entries, 1024 * 1024); \ - } name SEC(".maps"); - -// anonymous struct assigned to rb variable -DATACRUMBS_BPF_RING_BUF(output); diff --git a/tests/poc/bpf-core/example.generic.bpf.h b/tests/poc/bpf-core/example.generic.bpf.h deleted file mode 100644 index d775783d..00000000 --- a/tests/poc/bpf-core/example.generic.bpf.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef __EXAMPLE_GENERIC_H -#define __EXAMPLE_GENERIC_H - -#include "vmlinux.h" -// -#include -// -#include -// -#include -// -#include -// -#include "example.h" - -#define DATACRUMBS_BPF_RING_BUF(name) \ - extern struct { \ - __uint(type, BPF_MAP_TYPE_RINGBUF); \ - __uint(max_entries, 1024 * 1024); \ - } name SEC(".maps"); - -struct lpm_key { - __u32 prefixlen; - __u32 addr; -}; - -// Define the value structure for the LPM_TRIE. -// This can be any data type, like an integer. -typedef int lpm_value_t; - -extern struct { - __uint(type, BPF_MAP_TYPE_LPM_TRIE); - __uint(max_entries, 256); - __type(key, struct lpm_key); - __type(value, lpm_value_t); - __uint(map_flags, BPF_F_NO_PREALLOC); - __uint(pinning, LIBBPF_PIN_BY_NAME); -} lpm_trie_map SEC(".maps"); - -// anonymous struct assigned to rb variable -DATACRUMBS_BPF_RING_BUF(output); - -static inline __attribute__((always_inline)) int generic_call(int event_id) { - struct event_t* evt; - evt = bpf_ringbuf_reserve(&output, sizeof(*evt), 0); - if (!evt) { - bpf_printk("Failed to reserve space in ring buffer\n"); - return 0; - } - unsigned long id = bpf_get_current_pid_tgid(); - int pid = id; - evt->pid = pid; - evt->event_id = event_id; - bpf_ringbuf_submit(evt, 0); - bpf_printk("Tracing function %d PID %d", event_id, pid); - return 0; -} - -char LICENSE[] SEC("license") = "Dual BSD/GPL"; -#endif // __EXAMPLE_GENERIC_H \ No newline at end of file diff --git a/tests/poc/bpf-core/example.h b/tests/poc/bpf-core/example.h deleted file mode 100644 index 7506fe81..00000000 --- a/tests/poc/bpf-core/example.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef EXAMPLE_H -#define EXAMPLE_H - -struct event_t { - int pid; - int event_id; -}; - -#endif \ No newline at end of file diff --git a/tests/poc/bpf-core/example.kprobe.bpf.c b/tests/poc/bpf-core/example.kprobe.bpf.c deleted file mode 100644 index 83f81869..00000000 --- a/tests/poc/bpf-core/example.kprobe.bpf.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "example.generic.bpf.h" - -SEC("kprobe/vfs_write") -int BPF_KPROBE(vfs_write_entry) { - generic_call(3); - return 0; -} -SEC("kretprobe/vfs_write") -int BPF_KRETPROBE(vfs_write_exit) { - generic_call(4); - return 0; -} \ No newline at end of file diff --git a/tests/poc/bpf-core/example.syscall.bpf.c b/tests/poc/bpf-core/example.syscall.bpf.c deleted file mode 100644 index 01ef2097..00000000 --- a/tests/poc/bpf-core/example.syscall.bpf.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "example.generic.bpf.h" -SEC("ksyscall/openat") -int BPF_KPROBE(openat_entry, struct pt_regs* regs) { - generic_call(1); - return 0; -} -SEC("kretsyscall/openat") -int BPF_KRETPROBE(openat_exit, struct pt_regs* regs) { - generic_call(2); - return 0; -} \ No newline at end of file diff --git a/tests/poc/bpf-core/example.uprobe.bpf.c b/tests/poc/bpf-core/example.uprobe.bpf.c deleted file mode 100644 index 28aa4c09..00000000 --- a/tests/poc/bpf-core/example.uprobe.bpf.c +++ /dev/null @@ -1,12 +0,0 @@ - -#include "example.generic.bpf.h" -SEC("uprobe//usr/lib64/libc.so.6:open") -int BPF_UPROBE(open_entry, struct pt_regs* regs) { - generic_call(5); - return 0; -} -SEC("uretprobe//usr/lib64/libc.so.6:open") -int BPF_URETPROBE(open_exit, struct pt_regs* regs) { - generic_call(6); - return 0; -} \ No newline at end of file diff --git a/tests/poc/bpf-core/example.usdt.bpf.c b/tests/poc/bpf-core/example.usdt.bpf.c deleted file mode 100644 index cfc88b5b..00000000 --- a/tests/poc/bpf-core/example.usdt.bpf.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "example.generic.bpf.h" -SEC("usdt//usr/lib64/libpython3.11.so:python:function__entry") -int BPF_USDT(python_function_entry, void* class, void* function) { - generic_call(7); - return 0; -} -SEC("usdt//usr/lib64/libpython3.11.so:python:function__return") -int BPF_USDT(python_function_return, void* class, void* function) { - generic_call(8); - return 0; -} \ No newline at end of file diff --git a/tests/poc/bpf-time/.gitignore b/tests/poc/bpf-time/.gitignore deleted file mode 100644 index dc4e339e..00000000 --- a/tests/poc/bpf-time/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.o -vmlinux.h -file -example -*.skel.h -malloc -victim \ No newline at end of file diff --git a/tests/poc/bpf-time/Makefile b/tests/poc/bpf-time/Makefile deleted file mode 100644 index 59ce3e37..00000000 --- a/tests/poc/bpf-time/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -# Define the names of our source and output files -TARGET = victim -BPF_PROG_NAME = malloc -BPF_PROG_SRC = $(BPF_PROG_NAME).bpf.c -BPF_PROG_OBJ = $(BPF_PROG_NAME).bpf.o -BPF_LOADER_SRC = $(BPF_PROG_NAME).c -BPF_LOADER = $(BPF_PROG_NAME) -BPF_SKEL = $(BPF_PROG_NAME).skel.h - -# C compiler and flags for the user-space programs -CC ?= gcc -CLANG ?= clang -CFLAGS ?= -Wall -O2 -g -LDFLAGS ?= -l:libbpf.so -lrt -lz -lelf -ldl -lpthread - -# BPF compiler and flags -BPF_CFLAGS = -Wall -O2 -g -target bpf -# Generate vmlinux.h from the current kernel's BTF data -VMLINUX_H_PATH = ./vmlinux.h - -# BPFTOOL for generating the skeleton header -BPFTOOL ?= bpftool - -# libbpf and headers location -LIBBPF_DIR ?= $(PREFIX) -LIBBPF_INCLUDE = $(LIBBPF_DIR)/include -LIBBPF_LIB = $(LIBBPF_DIR)/lib64 -ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/') - -# Build rule for all targets -all: $(TARGET) $(BPF_LOADER) - -# Rule to compile the victim application -$(TARGET): victim.c - $(CC) $(CFLAGS) $< -o $@ - -# Rule to generate vmlinux.h for BPF compilation -$(VMLINUX_H_PATH): - @echo "Generating $(VMLINUX_H_PATH)..." - $(BPFTOOL) btf dump file /sys/kernel/btf/vmlinux format c > $@ - -# Rule to compile the BPF program -$(BPF_PROG_OBJ): $(BPF_PROG_SRC) $(VMLINUX_H_PATH) - $(CLANG) $(BPF_CFLAGS) -D __TARGET_ARCH_$(ARCH) -I$(LIBBPF_INCLUDE) -I. -c $< -o $@ - -# Rule to generate the BPF skeleton header -$(BPF_SKEL): $(BPF_PROG_OBJ) - $(BPFTOOL) gen skeleton $< > $@ - -# Rule to compile the user-space loader -$(BPF_LOADER): $(BPF_LOADER_SRC) $(BPF_SKEL) - $(CC) $(CFLAGS) -I$(LIBBPF_INCLUDE) -o $@ $(BPF_LOADER_SRC) $(LIBBPF_LIB)/libbpf.so $(LDFLAGS) - -# Clean up all generated files -clean: - rm -f $(TARGET) $(BPF_LOADER) $(BPF_PROG_OBJ) $(BPF_SKEL) $(VMLINUX_H_PATH) diff --git a/tests/poc/bpf-time/malloc.bpf.c b/tests/poc/bpf-time/malloc.bpf.c deleted file mode 100644 index 6d15e7d9..00000000 --- a/tests/poc/bpf-time/malloc.bpf.c +++ /dev/null @@ -1,30 +0,0 @@ -// malloc.bpf.c - -#include "vmlinux.h" -// -#include -// -#include -// -#include -// -#include -// - -// BPF map to store the count of malloc calls -struct { - __uint(type, BPF_MAP_TYPE_ARRAY); - __uint(max_entries, 1); - __type(key, __u32); - __type(value, __u64); -} counts SEC(".maps"); - -SEC("uprobe//usr/lib64/libc.so.6:malloc") -int BPF_UPROBE(malloc_probe, struct pt_regs* regs) { - __u32 key = 0; - __u64* count = bpf_map_lookup_elem(&counts, &key); - if (count) { - (*count)++; - } - return 0; -} diff --git a/tests/poc/bpf-time/malloc.c b/tests/poc/bpf-time/malloc.c deleted file mode 100644 index abfea97d..00000000 --- a/tests/poc/bpf-time/malloc.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include -#include -#include -#include - -#include "malloc.skel.h" - -int main(int argc, char* argv[]) { - struct malloc_bpf* skel; - int err; - - skel = malloc_bpf__open_and_load(); - if (!skel) { - fprintf(stderr, "Failed to open and load BPF skeleton\n"); - return 1; - } - - err = malloc_bpf__attach(skel); - if (err) { - fprintf(stderr, "Failed to attach BPF program\n"); - goto cleanup; - } - - printf("Successfully started! Watching malloc calls...\n"); - - while (1) { - sleep(2); - __u32 key = 0; - __u64 count; - bpf_map_lookup_elem(bpf_map__fd(skel->maps.counts), &key, &count); - printf("malloc calls: %llu\n", count); - } - -cleanup: - malloc_bpf__destroy(skel); - return -err; -} diff --git a/tests/poc/bpf-time/victim.c b/tests/poc/bpf-time/victim.c deleted file mode 100644 index fcd71234..00000000 --- a/tests/poc/bpf-time/victim.c +++ /dev/null @@ -1,16 +0,0 @@ -// victim.c -#include -#include -#include - -int main() { - while (1) { - // Repeatedly allocate and free memory - void* ptr = malloc(1024); - if (ptr) { - free(ptr); - } - sleep(1); - } - return 0; -} diff --git a/tests/poc/notes.MD b/tests/poc/notes.MD deleted file mode 100644 index 01aa8585..00000000 --- a/tests/poc/notes.MD +++ /dev/null @@ -1,7 +0,0 @@ -# Notes - -## Get all kernel symbols defined - -```bash -cat /proc/kallsyms | grep 'inode_add_lru' -``` \ No newline at end of file diff --git a/tests/poc/test.c b/tests/poc/test.c deleted file mode 100644 index f80f547a..00000000 --- a/tests/poc/test.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -int main() { - DTRACE_PROBE("hello-usdt", probe - main); -} \ No newline at end of file diff --git a/tests/poc/test.py b/tests/poc/test.py deleted file mode 100755 index f82ab47b..00000000 --- a/tests/poc/test.py +++ /dev/null @@ -1,13 +0,0 @@ -def test_one(): - print("Running test_one") - test_two() - -def test_two(): - print("Running test_two") - test_three() - -def test_three(): - print("Running test_three") - -if __name__ == "__main__": - test_one() \ No newline at end of file diff --git a/tests/poc/uprobes.py b/tests/poc/uprobes.py deleted file mode 100755 index b73797c5..00000000 --- a/tests/poc/uprobes.py +++ /dev/null @@ -1,379 +0,0 @@ -#!/usr/bin/python -# @lint-avoid-python-3-compatibility-imports -# -# ucalls Summarize method calls in high-level languages and/or system calls. -# For Linux, uses BCC, eBPF. -# -# USAGE: ucalls [-l {java,perl,php,python,ruby,tcl}] [-h] [-T TOP] [-L] [-S] [-v] [-m] -# pid [interval] -# -# Copyright 2016 Sasha Goldshtein -# Licensed under the Apache License, Version 2.0 (the "License") -# -# 19-Oct-2016 Sasha Goldshtein Created this. - -from __future__ import print_function -import argparse -from time import sleep -from bcc import BPF, USDT, utils -from bcc.syscall import syscall_name - -languages = ["java", "perl", "php", "python", "ruby", "tcl"] - -examples = """examples: - ./ucalls -l java 185 # trace Java calls and print statistics on ^C - ./ucalls -l python 2020 1 # trace Python calls and print every second - ./ucalls -l java 185 -S # trace Java calls and syscalls - ./ucalls 6712 -S # trace only syscall counts - ./ucalls -l ruby 1344 -T 10 # trace top 10 Ruby method calls - ./ucalls -l ruby 1344 -L # trace Ruby calls including latency - ./ucalls -l php 443 -LS # trace PHP calls and syscalls with latency - ./ucalls -l python 2020 -mL # trace Python calls including latency in ms -""" -parser = argparse.ArgumentParser( - description="Summarize method calls in high-level languages.", - formatter_class=argparse.RawDescriptionHelpFormatter, - epilog=examples) -parser.add_argument("pid", type=int, help="process id to attach to") -parser.add_argument("interval", type=int, nargs='?', - help="print every specified number of seconds") -parser.add_argument("-l", "--language", choices=languages + ["none"], - help="language to trace (if none, trace syscalls only)") -parser.add_argument("-T", "--top", type=int, - help="number of most frequent/slow calls to print") -parser.add_argument("-L", "--latency", action="store_true", - help="record method latency from enter to exit (except recursive calls)") -parser.add_argument("-S", "--syscalls", action="store_true", - help="record syscall latency (adds overhead)") -parser.add_argument("-v", "--verbose", action="store_true", - help="verbose mode: print the BPF program (for debugging purposes)") -parser.add_argument("-m", "--milliseconds", action="store_true", - help="report times in milliseconds (default is microseconds)") -parser.add_argument("--ebpf", action="store_true", - help=argparse.SUPPRESS) -args = parser.parse_args() - -language = args.language -if not language: - language = utils.detect_language(languages, args.pid) - -# We assume that the entry and return probes have the same arguments. This is -# the case for Java, Python, Ruby, and PHP. If there's a language where it's -# not the case, we will need to build a custom correlator from entry to exit. -extra_message = "" -if language == "java": - # TODO for JVM entries, we actually have the real length of the class - # and method strings in arg3 and arg5 respectively, so we can insert - # the null terminator in its proper position. - entry_probe = "method__entry" - return_probe = "method__return" - read_class = "bpf_usdt_readarg(2, ctx, &clazz);" - read_method = "bpf_usdt_readarg(4, ctx, &method);" - extra_message = ("If you do not see any results, make sure you ran java" - " with option -XX:+ExtendedDTraceProbes") -elif language == "perl": - entry_probe = "sub__entry" - return_probe = "sub__return" - read_class = "bpf_usdt_readarg(2, ctx, &clazz);" # filename really - read_method = "bpf_usdt_readarg(1, ctx, &method);" -elif language == "php": - entry_probe = "function__entry" - return_probe = "function__return" - read_class = "bpf_usdt_readarg(4, ctx, &clazz);" - read_method = "bpf_usdt_readarg(1, ctx, &method);" - extra_message = ("If you do not see any results, make sure the environment" - " variable USE_ZEND_DTRACE is set to 1") -elif language == "python": - entry_probe = "function__entry" - return_probe = "function__return" - read_class = "bpf_usdt_readarg(1, ctx, &clazz);" # filename really - read_method = "bpf_usdt_readarg(2, ctx, &method);" -elif language == "ruby": - # TODO Also probe cmethod__entry and cmethod__return with same arguments - entry_probe = "method__entry" - return_probe = "method__return" - read_class = "bpf_usdt_readarg(1, ctx, &clazz);" - read_method = "bpf_usdt_readarg(2, ctx, &method);" -elif language == "tcl": - # TODO Also consider probe cmd__entry and cmd__return with same arguments - entry_probe = "proc__entry" - return_probe = "proc__return" - read_class = "" # no class/file info available - read_method = "bpf_usdt_readarg(1, ctx, &method);" -elif not language or language == "none": - if not args.syscalls: - print("Nothing to do; use -S to trace syscalls.") - exit(1) - entry_probe, return_probe, read_class, read_method = ("", "", "", "") - if language: - language = None - -program = """ -#include - -#define MAX_STRING_LENGTH 80 -DEFINE_NOLANG -DEFINE_LATENCY -DEFINE_SYSCALLS - -struct method_t { - char clazz[MAX_STRING_LENGTH]; - char method[MAX_STRING_LENGTH]; -}; -struct entry_t { - u64 pid; - struct method_t method; -}; -struct info_t { - u64 num_calls; - u64 total_ns; -}; -struct syscall_entry_t { - u64 timestamp; - u64 id; -}; - -#ifndef LATENCY - BPF_HASH(counts, struct method_t, u64); // number of calls - #ifdef SYSCALLS - BPF_HASH(syscounts, u64, u64); // number of calls per IP - #endif // SYSCALLS -#else - BPF_HASH(times, struct method_t, struct info_t); - BPF_HASH(entry, struct entry_t, u64); // timestamp at entry - #ifdef SYSCALLS - BPF_HASH(systimes, u64, struct info_t); // latency per IP - BPF_HASH(sysentry, u64, struct syscall_entry_t); // ts + IP at entry - #endif // SYSCALLS -#endif - -#ifndef NOLANG -int trace_entry(struct pt_regs *ctx) { - u64 clazz = 0, method = 0, val = 0; - u64 *valp; - struct entry_t data = {0}; -#ifdef LATENCY - u64 timestamp = bpf_ktime_get_ns(); - data.pid = bpf_get_current_pid_tgid(); -#endif - READ_CLASS - READ_METHOD - bpf_probe_read_user(&data.method.clazz, sizeof(data.method.clazz), - (void *)clazz); - bpf_probe_read_user(&data.method.method, sizeof(data.method.method), - (void *)method); -#ifndef LATENCY - valp = counts.lookup_or_try_init(&data.method, &val); - if (valp) { - ++(*valp); - } -#endif -#ifdef LATENCY - entry.update(&data, ×tamp); -#endif - return 0; -} - -#ifdef LATENCY -int trace_return(struct pt_regs *ctx) { - u64 *entry_timestamp, clazz = 0, method = 0; - struct info_t *info, zero = {}; - struct entry_t data = {}; - data.pid = bpf_get_current_pid_tgid(); - READ_CLASS - READ_METHOD - bpf_probe_read_user(&data.method.clazz, sizeof(data.method.clazz), - (void *)clazz); - bpf_probe_read_user(&data.method.method, sizeof(data.method.method), - (void *)method); - entry_timestamp = entry.lookup(&data); - if (!entry_timestamp) { - return 0; // missed the entry event - } - info = times.lookup_or_try_init(&data.method, &zero); - if (info) { - info->num_calls += 1; - info->total_ns += bpf_ktime_get_ns() - *entry_timestamp; - } - entry.delete(&data); - return 0; -} -#endif // LATENCY -#endif // NOLANG - -#ifdef SYSCALLS -TRACEPOINT_PROBE(raw_syscalls, sys_enter) { - u64 pid = bpf_get_current_pid_tgid(); - u64 *valp, id = args->id, val = 0; - PID_FILTER -#ifdef LATENCY - struct syscall_entry_t data = {}; - data.timestamp = bpf_ktime_get_ns(); - data.id = id; - sysentry.update(&pid, &data); -#endif -#ifndef LATENCY - valp = syscounts.lookup_or_try_init(&id, &val); - if (valp) { - ++(*valp); - } -#endif - return 0; -} - -#ifdef LATENCY -TRACEPOINT_PROBE(raw_syscalls, sys_exit) { - struct syscall_entry_t *e; - struct info_t *info, zero = {}; - u64 pid = bpf_get_current_pid_tgid(), id; - PID_FILTER - e = sysentry.lookup(&pid); - if (!e) { - return 0; // missed the entry event - } - id = e->id; - info = systimes.lookup_or_try_init(&id, &zero); - if (info) { - info->num_calls += 1; - info->total_ns += bpf_ktime_get_ns() - e->timestamp; - } - sysentry.delete(&pid); - return 0; -} -#endif // LATENCY -#endif // SYSCALLS -""" - -first = program.replace("READ_CLASS", read_class) \ - .replace("READ_METHOD", read_method) \ - .replace("PID_FILTER", "if ((pid >> 32) != %d) { return 0; }" % args.pid) \ - .replace("DEFINE_NOLANG", "#define NOLANG" if not language else "") \ - .replace("DEFINE_LATENCY", "#define LATENCY" if args.latency else "") \ - .replace("DEFINE_SYSCALLS", "") - -second = program.replace("READ_CLASS", "") \ - .replace("READ_METHOD", "") \ - .replace("PID_FILTER", "if ((pid >> 32) != %d) { return 0; }" % args.pid) \ - .replace("DEFINE_NOLANG", "") \ - .replace("DEFINE_LATENCY", "") \ - .replace("DEFINE_SYSCALLS", "#define SYSCALLS") - -if language: - if args.pid <= 0: - usdt = USDT(path="/home/haridev/spack/opt/spack/linux-haswell/python-3.10.16-3kectflt2q6nzv4k2dyaxbfegydlaxpk/lib/libpython3.10.so") - else: - usdt = USDT(pid=args.pid) - usdt.enable_probe(entry_probe, "trace_entry") - if args.latency: - usdt.enable_probe_or_bail(return_probe, "trace_return") -else: - usdt = None - -if args.ebpf or args.verbose: - if args.verbose and usdt: - print(usdt.get_text()) - print(program) - if args.ebpf: - exit() -bpf2 = BPF(text=second) -bpf = BPF(text=first, usdt_contexts=[usdt] if usdt else []) -if args.syscalls: - print("Attached kernel tracepoints for syscall tracing.") - -def get_data(): - # Will be empty when no language was specified for tracing - if args.latency: - data = list(map(lambda kv: (kv[0].clazz.decode('utf-8', 'replace') \ - + "." + \ - kv[0].method.decode('utf-8', 'replace'), - (kv[1].num_calls, kv[1].total_ns)), - bpf["times"].items())) - if "times" in bpf2: - data.extend(map(lambda kv: (kv[0].clazz.decode('utf-8', 'replace') \ - + "." + \ - kv[0].method.decode('utf-8', 'replace'), - (kv[1].num_calls, kv[1].total_ns)), - bpf2["times"].items())) - else: - data = list(map(lambda kv: (kv[0].clazz.decode('utf-8', 'replace') \ - + "." + \ - kv[0].method.decode('utf-8', 'replace'), - (kv[1].value, 0)), - bpf["counts"].items())) - if "counts" in bpf2: - data.extend(map(lambda kv: (kv[0].clazz.decode('utf-8', 'replace') \ - + "." + \ - kv[0].method.decode('utf-8', 'replace'), - (kv[1].value, 0)), - bpf2["counts"].items())) - - if args.syscalls: - if args.latency: - # syscalls = map(lambda kv: (syscall_name(kv[0].value).decode('utf-8', 'replace'), - # (kv[1].num_calls, kv[1].total_ns)), - # bpf["systimes"].items()) - # data.extend(syscalls) - if "systimes" in bpf2: - data.extend(map(lambda kv: (syscall_name(kv[0].value).decode('utf-8', 'replace'), - (kv[1].num_calls, kv[1].total_ns)), - bpf2["systimes"].items())) - else: - syscalls = map(lambda kv: (syscall_name(kv[0].value).decode('utf-8', 'replace'), - (kv[1].value, 0)), - bpf["syscounts"].items()) - data.extend(syscalls) - if "syscounts" in bpf2: - data.extend(map(lambda kv: (syscall_name(kv[0].value).decode('utf-8', 'replace'), - (kv[1].value, 0)), - bpf2["syscounts"].items())) - - return sorted(data, key=lambda kv: kv[1][1 if args.latency else 0]) - -def clear_data(): - if args.latency: - bpf["times"].clear() - bpf2["times"].clear() - else: - bpf["counts"].clear() - bpf2["counts"].clear() - - if args.syscalls: - if args.latency: - bpf["systimes"].clear() - bpf2["systimes"].clear() - else: - bpf["syscounts"].clear() - bpf2["syscounts"].clear() - -exit_signaled = False -print("Tracing calls in process %d (language: %s)... Ctrl-C to quit." % - (args.pid, language or "none")) -if extra_message: - print(extra_message) -while True: - try: - sleep(args.interval or 99999999) - except KeyboardInterrupt: - exit_signaled = True - print() - data = get_data() # [(function, (num calls, latency in ns))] - if args.latency: - time_col = "TIME (ms)" if args.milliseconds else "TIME (us)" - print("%-50s %8s %8s" % ("METHOD", "# CALLS", time_col)) - else: - print("%-50s %8s" % ("METHOD", "# CALLS")) - if args.top: - data = data[-args.top:] - for key, value in data: - if args.latency: - time = value[1] / 1000000.0 if args.milliseconds else \ - value[1] / 1000.0 - print("%-50s %8d %6.2f" % (key, value[0], time)) - else: - print("%-50s %8d" % (key, value[0])) - if args.interval and not exit_signaled: - clear_data() - else: - if args.syscalls: - print("Detaching kernel probes, please wait...") - exit() \ No newline at end of file diff --git a/tests/unittests/CMakeLists.txt b/tests/unittests/CMakeLists.txt deleted file mode 100644 index bbe09f72..00000000 --- a/tests/unittests/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -add_subdirectory(io_tests) diff --git a/tests/unittests/component/compress_decompress_zlib.cpp b/tests/unittests/component/compress_decompress_zlib.cpp deleted file mode 100644 index 5b7d4f04..00000000 --- a/tests/unittests/component/compress_decompress_zlib.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include - -// Compresses input data using zlib -std::vector compress_zlib(const std::vector& data) { - // Use zlib's deflate with gzip header - z_stream strm = {}; - int res = deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15 + 16, 8, Z_DEFAULT_STRATEGY); - assert(res == Z_OK); - - std::vector compressed; - compressed.resize(compressBound(data.size())); - - strm.next_in = const_cast(data.data()); - strm.avail_in = data.size(); - strm.next_out = compressed.data(); - strm.avail_out = compressed.size(); - - do { - res = deflate(&strm, Z_FINISH); - if (res == Z_OK) { - // Output buffer was too small, increase size and continue - size_t old_size = compressed.size(); - compressed.resize(old_size * 2); - strm.next_out = compressed.data() + old_size; - strm.avail_out = old_size; - } - } while (res == Z_OK); - - assert(res == Z_STREAM_END); - - compressed.resize(strm.total_out); - deflateEnd(&strm); - return compressed; -} - -// Decompresses input data using zlib (gzip compatible) -std::vector decompress_zlib(const std::vector& compressed, size_t original_size) { - z_stream strm = {}; - int res = inflateInit2(&strm, 15 + 16); // 15 window bits + 16 for gzip - assert(res == Z_OK); - - std::vector decompressed(original_size); - - strm.next_in = const_cast(compressed.data()); - strm.avail_in = compressed.size(); - strm.next_out = decompressed.data(); - strm.avail_out = decompressed.size(); - - res = inflate(&strm, Z_FINISH); - assert(res == Z_STREAM_END || res == Z_OK); - - decompressed.resize(strm.total_out); - inflateEnd(&strm); - return decompressed; -} - -// Read file into vector using C APIs -std::vector read_file(const std::string& filename) { - FILE* infile = fopen(filename.c_str(), "rb"); - assert(infile != nullptr); - fseek(infile, 0, SEEK_END); - size_t size = ftell(infile); - fseek(infile, 0, SEEK_SET); - std::vector buffer(size); - size_t read = fread(buffer.data(), 1, size, infile); - assert(read == size); - fclose(infile); - return buffer; -} - -// Write vector to file using C APIs -void write_file(const std::string& filename, const std::vector& data) { - FILE* outfile = fopen(filename.c_str(), "wb"); - assert(outfile != nullptr); - setvbuf(outfile, nullptr, _IOFBF, 8192); // Enable line buffering - size_t written = fwrite(data.data(), 1, data.size(), outfile); - assert(written == data.size()); - fclose(outfile); -} - -int main(int argc, char* argv[]) { - if (argc == 4 && std::string(argv[1]) == "compress") { - // Usage: compress - std::vector input_data = read_file(argv[2]); - std::vector compressed = compress_zlib(input_data); - write_file(argv[3], compressed); - std::cout << "File compressed: " << argv[2] << " -> " << argv[3] << std::endl; - return 0; - } - - if (argc == 5 && std::string(argv[1]) == "decompress") { - // Usage: decompress - std::vector compressed = read_file(argv[2]); - size_t original_size = std::stoull(argv[4]); - std::vector decompressed = decompress_zlib(compressed, original_size); - write_file(argv[3], decompressed); - std::cout << "File decompressed: " << argv[2] << " -> " << argv[3] << std::endl; - return 0; - } - - if (argc == 4 && std::string(argv[1]) == "compress_str") { - // Usage: compress_str - std::string input_str = argv[2]; - std::vector input_data(input_str.begin(), input_str.end()); - std::vector compressed = compress_zlib(input_data); - write_file(argv[3], compressed); - std::cout << "String compressed and written to: " << argv[3] << std::endl; - return 0; - } - - if (argc == 4 && std::string(argv[1]) == "decompress_to_stdout") { - // Usage: decompress_to_stdout - std::vector compressed = read_file(argv[2]); - size_t original_size = std::stoull(argv[3]); - std::vector decompressed = decompress_zlib(compressed, original_size); - std::cout << std::string(decompressed.begin(), decompressed.end()) << std::endl; - return 0; - } - - std::cerr << "Usage:\n" - << " " << argv[0] << " compress \n" - << " " << argv[0] << " decompress \n" - << " " << argv[0] << " compress_str \n" - << " " << argv[0] << " decompress_to_stdout \n"; - return 1; -} \ No newline at end of file diff --git a/tests/unittests/component/elf_capture_test.cpp b/tests/unittests/component/elf_capture_test.cpp deleted file mode 100644 index 5c54c091..00000000 --- a/tests/unittests/component/elf_capture_test.cpp +++ /dev/null @@ -1,24 +0,0 @@ - -#include "elf_capture.h" - -#include - -int main(int argc, char* argv[]) { - if (argc != 2) { - std::cerr << "Usage: " << argv[0] << " \n"; - return 1; - } - - try { - ElfSymbolExtractor extractor(argv[1]); - auto symbols = extractor.extract_symbols(); - for (const auto& sym : symbols) { - std::cout << sym << '\n'; - } - } catch (const std::exception& ex) { - std::cerr << "Error: " << ex.what() << '\n'; - return 1; - } - - return 0; -} \ No newline at end of file diff --git a/tests/unittests/component/header_capture_test.cpp b/tests/unittests/component/header_capture_test.cpp deleted file mode 100644 index 41ed5f69..00000000 --- a/tests/unittests/component/header_capture_test.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "header_capture.h" - -int main(int argc, char* argv[]) { - if (argc < 2) { - std::cerr << "Usage: " << argv[0] << " " << std::endl; - return 1; - } - - HeaderFunctionExtractor extractor(argv[1]); - std::vector functionNames = extractor.extractFunctionNames(); - - std::cout << "Functions found in header:" << std::endl; - for (const auto& name : functionNames) { - std::cout << name << std::endl; - } - - return 0; -} \ No newline at end of file diff --git a/tests/unittests/component/ksym_capture_test.cpp b/tests/unittests/component/ksym_capture_test.cpp deleted file mode 100644 index 547ed3de..00000000 --- a/tests/unittests/component/ksym_capture_test.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "ksym_capture.h" -int main() { - KSymCapture ksym; - std::string pattern; - std::cout << "Enter regex pattern to search for kernel symbols: "; - std::getline(std::cin, pattern); - - auto matches = ksym.getFunctionsByRegex(pattern); - std::cout << "Matched functions:\n"; - for (const auto& func : matches) { - std::cout << func << '\n'; - } - return 0; -} \ No newline at end of file diff --git a/tests/unittests/component/probe_explorer_test.cpp b/tests/unittests/component/probe_explorer_test.cpp deleted file mode 100644 index 18d0f9df..00000000 --- a/tests/unittests/component/probe_explorer_test.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include - -int main(int argc, char** argv) { - datacrumbs::ProbeExplorer explorer(argc, argv); - auto probes = explorer.extractProbes(); - - for (const auto& probe : probes) { - std::cout << "Probe: " << probe.name << "\n"; - int i = 0; - for (const auto& value : probe.functions) { - std::cout << " Value: " << value << "\n"; - if (i++ > 10) { - std::cout << " ... (truncated)" << std::endl; - break; - } - } - } - return 0; -} - -/** - * g++ -std=c++14 probe_explorer_test.cpp probe_explorer.cpp -o probe_explorer_test - * -I/home/haridev/datacrumbs/src -lelf `llvm-config --cxxflags --ldflags --system-libs --libs - * core` -lclang - */ \ No newline at end of file diff --git a/tests/unittests/io_tests/CMakeLists.txt b/tests/unittests/io_tests/CMakeLists.txt deleted file mode 100644 index 46d0aa5e..00000000 --- a/tests/unittests/io_tests/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -find_package(MPI) - -if(MPI_FOUND) - 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() - - 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/images/read.png b/tests/unittests/io_tests/images/read.png deleted file mode 100755 index 53aae84f005847b06bba6442bd8e7f6cb35cdeb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35310 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 diff --git a/tests/unittests/io_tests/images/write.png b/tests/unittests/io_tests/images/write.png deleted file mode 100755 index afb20168280c21e1174ce1b90eccb4ce3089bc79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74095 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 ay=!I@36C%L$tscHkC>3OU?Kn8kN*qdR8uJc diff --git a/tests/unittests/io_tests/scripts/ior.sh b/tests/unittests/io_tests/scripts/ior.sh deleted file mode 100755 index 3a88748e..00000000 --- a/tests/unittests/io_tests/scripts/ior.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash -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) -PARENT_DIR=$(dirname $PROJECT_DIR) -DATA_DIR=${PROJECT_DIR}/build/data -DROP_CACHES=1 -mkdir -p $DATA_DIR -rm -rf $DATA_DIR/* -BLOCK=$1 -if [ -z "$1" ]; then - BLOCK=8g -fi -TRANSFER_SIZE=$2 -if [ -z "$2" ]; then - TRANSFER_SIZE=1m -fi -TOOL=$3 -if [ -z "$3" ]; then - TOOL=DATACRUMBS -fi -if [ "$TOOL" == "DATACRUMBS" ]; then - LD_PRELOAD_ARG="LD_PRELOAD=${PROJECT_DIR}/build/libdatacrumbs.so" -elif [ "$TOOL" == "DARSHAN" ]; then - LD_PRELOAD_ARG="LD_PRELOAD=$DARSHAN_DIR/lib/libdarshan.so" -elif [ "$TOOL" == "DARSHAN-DXT" ]; then - LD_PRELOAD_ARG="LD_PRELOAD=$DARSHAN_DIR/lib/libdarshan.so" - export DARSHAN_ENABLE_DXT=1 -else - echo "Unknown tool" - exit 1 -fi -INTERFACE=$4 -if [ -z "$4" ]; then - INTERFACE=POSIX -fi -DIRECTIO=$5 -if [ -z "$5" ]; then - DIRECTIO=0 -fi -if [ "$DIRECTIO" -eq "1" ]; then - echo "Direct IO" - export FLAGS="-o O_DIRECT=1" -else - echo "Buffered IO" - export FLAGS="" -fi -FPP=$6 -if [ -z "$6" ]; then - FPP=0 -fi -if [ "$FPP" -eq "1" ]; then - echo "FPP" - export FLAGS="${FLAGS} -F" -else - echo "Collective IO" - export FLAGS="${FLAGS} -c" -fi - -for i in {1..10}; do - echo "Iteration $i" - configuration="-o=${DATA_DIR}/test.bat-${TRANSFER_SIZE} -m -b=${BLOCK} -i 1 -d 10 -t=${TRANSFER_SIZE} -a ${INTERFACE} $FLAGS" - echo "Running ${IOR_INSTALL_DIR}/bin/ior ${configuration} -w" - start_time=$(date +%s) - mpirun -n 24 $LD_PRELOAD_ARG ${IOR_DIR}/bin/ior ${configuration} -w - end_time=$(date +%s) - elapsed_time=$((end_time - start_time)) - echo "Time taken for write iteration:$i: ${elapsed_time} seconds" - sleep 10 - if [ "$DROP_CACHES" -eq "1" ]; then - echo "Clean Cache" - sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" - fi - echo "Running ${IOR_INSTALL_DIR}/bin/ior ${configuration} -r" - start_time=$(date +%s) - 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 diff --git a/tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh b/tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh deleted file mode 100755 index f63aeac2..00000000 --- a/tests/unittests/io_tests/scripts/ior_hdf5_fpp.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -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) -PARENT_DIR=$(dirname $PROJECT_DIR) -#IOR_INSTALL_DIR=/opt/spack/opt/spack/linux-ubuntu22.04-icelake/gcc-11.4.0/ior-4.0.0-arszr4x4i7xuua4opbyx73oqq7tlzljo -IOR_INSTALL_DIR=$(spack location -i ior@4.0.0%gcc@11.4.0) -DATACRUMBS_SO=${PROJECT_DIR}/build/libdatacrumbs.so - -DATA_DIR=${PROJECT_DIR}/build/data -DROP_CACHES=1 -mkdir -p $DATA_DIR -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) -echo "${cmd[@]}" -"${cmd[@]}" diff --git a/tests/unittests/io_tests/scripts/ior_mpiio.sh b/tests/unittests/io_tests/scripts/ior_mpiio.sh deleted file mode 100755 index 2ab862c6..00000000 --- a/tests/unittests/io_tests/scripts/ior_mpiio.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash -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) -PARENT_DIR=$(dirname $PROJECT_DIR) -#IOR_INSTALL_DIR=/opt/spack/opt/spack/linux-ubuntu22.04-icelake/gcc-11.4.0/ior-4.0.0-arszr4x4i7xuua4opbyx73oqq7tlzljo -IOR_INSTALL_DIR=$(spack location -i ior@4.0.0%gcc@11.4.0) -DATACRUMBS_SO=${PROJECT_DIR}/build/libdatacrumbs.so - -DATA_DIR=${PROJECT_DIR}/build/data -DROP_CACHES=1 -mkdir -p $DATA_DIR -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) -echo "${cmd[@]}" -"${cmd[@]}" diff --git a/tests/unittests/io_tests/scripts/test_posix.sh b/tests/unittests/io_tests/scripts/test_posix.sh deleted file mode 100755 index 37d48dbc..00000000 --- a/tests/unittests/io_tests/scripts/test_posix.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -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) - -DATACRUMBS_SO=${PROJECT_DIR}/build/libdatacrumbs.so - -DATA_DIR=${PROJECT_DIR}/build/data -mkdir -p $DATA_DIR -NUM_FILES=1 -NUM_OPS=$1 -if [ -z "$1" ]; then - NUM_OPS=1 -fi -PROC=1 -DIRECTIO=0 -TEST_CASE=0 #write=0 read=1 both=2 -CLEAN_PAGE_CACHE=$2 -if [ -z "$2" ]; then - CLEAN_PAGE_CACHE=0 -fi -if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then - echo "Cleaning Data" - ls -lhs $DATA_DIR - rm -rf $DATA_DIR/* -fi - -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}) - echo "${cmd[@]}" - LD_PRELOAD=${DATACRUMBS_SO} "${cmd[@]}" - fi - if [ "$CLEAN_PAGE_CACHE" -eq "1" ]; then - echo "Cleaning Cache" - sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" - 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}) - 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 deleted file mode 100755 index 96bd3c8a..00000000 --- a/tests/unittests/io_tests/scripts/test_posix_overhead.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash -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) - -DATACRUMBS_SO=${PROJECT_DIR}/build/libdatacrumbs.so - -DATA_DIR=${PROJECT_DIR}/build/data -mkdir -p $DATA_DIR -NUM_FILES=1 -NUM_OPS=$((100)) -PROC=2 -DIRECTIO=0 -TEST_CASE=0 #write=0 read=1 both=2 -if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then - echo "Cleaning Data" - ls -lhs $DATA_DIR - rm -rf $DATA_DIR/* -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 -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 -done diff --git a/tests/unittests/io_tests/scripts/test_posix_read.sh b/tests/unittests/io_tests/scripts/test_posix_read.sh deleted file mode 100755 index fcd45454..00000000 --- a/tests/unittests/io_tests/scripts/test_posix_read.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -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) - -DATACRUMBS_SO=${PROJECT_DIR}/build/libdatacrumbs.so - -DATA_DIR=${PROJECT_DIR}/build/data -mkdir -p $DATA_DIR -NUM_FILES=1 -NUM_OPS=$1 -if [ -z "$1" ]; then - NUM_OPS=1 -fi -PROC=1 -DIRECTIO=0 -TEST_CASE=2 #write=0 read=1 both=2 -CLEAN_PAGE_CACHE=$2 -if [ -z "$2" ]; then - CLEAN_PAGE_CACHE=0 -fi -if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then - echo "Cleaning Data" - ls -lhs $DATA_DIR - rm -rf $DATA_DIR/* -fi - -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 - $cmd - if [ "$CLEAN_PAGE_CACHE" -eq "1" ]; then - echo "Cleaning Cache" - sudo sh -c "/usr/bin/echo 1 > /proc/sys/vm/drop_caches" - elif [ "$CLEAN_PAGE_CACHE" -eq "2" ]; then - echo "Cleaning inode Caches" - sudo sh -c "/usr/bin/echo 2 > /proc/sys/vm/drop_caches" - elif [ "$CLEAN_PAGE_CACHE" -eq "3" ]; then - echo "Cleaning All Caches" - sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches" - else - echo "Not cleaning cache" - fi - sleep 5 - 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} 1 ${DIRECTIO}" - echo $cmd - $cmd -done diff --git a/tests/unittests/io_tests/scripts/test_stdio.sh b/tests/unittests/io_tests/scripts/test_stdio.sh deleted file mode 100755 index 096020b0..00000000 --- a/tests/unittests/io_tests/scripts/test_stdio.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -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) - -DATACRUMBS_SO=${PROJECT_DIR}/build/libdatacrumbs.so - -DATA_DIR=${PROJECT_DIR}/build/data -mkdir -p $DATA_DIR -NUM_FILES=1 -NUM_OPS=$((32)) -PROC=1 -DIRECTIO=0 -TEST_CASE=0 #write=0 read=1 both=2 -if [ "$TEST_CASE" -eq "0" ] || [ "$TEST_CASE" -eq "2" ]; then - echo "Cleaning Data" - ls -lhs $DATA_DIR - rm -rf $DATA_DIR/* -fi - -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/tests/unittests/io_tests/test.cpp b/tests/unittests/io_tests/test.cpp deleted file mode 100755 index 7b768d2a..00000000 --- a/tests/unittests/io_tests/test.cpp +++ /dev/null @@ -1,232 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -class Timer { - public: - Timer() : elapsed_time(0) {} - void resumeTime() { t1 = std::chrono::high_resolution_clock::now(); } - double pauseTime() { - auto t2 = std::chrono::high_resolution_clock::now(); - elapsed_time += std::chrono::duration(t2 - t1).count(); - return elapsed_time; - } - double getElapsedTime() { return elapsed_time; } - - private: - std::chrono::high_resolution_clock::time_point t1; - double elapsed_time; -}; -std::string gen_random(const int len) { - static const char alphanum[] = - "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - std::string tmp_s; - tmp_s.reserve(len); - - for (int i = 0; i < len; ++i) { - tmp_s += alphanum[rand() % (sizeof(alphanum) - 1)]; - } - - return tmp_s; -} -int test_open_perm(const char* filename, int flag, int perm) { - int fd = open(filename, flag, perm); - if (fd == -1) { - perror("open"); - return -1; - } - return fd; -} -int test_open(const char* filename, int flag) { - int fd = open(filename, flag, 0777); - if (fd == -1) { - perror("open"); - return -1; - } - return fd; -} -ssize_t test_read(int fd, void* buf, ssize_t size) { - ssize_t bytes = read(fd, buf, size); - if (bytes == -1) { - fprintf(stderr, "read : %s (errno: %d)\n", strerror(errno), errno); - return -1; - } - return bytes; -} -ssize_t test_write(int fd, const void* buf, ssize_t size) { - ssize_t bytes = write(fd, buf, size); - if (bytes == -1) { - fprintf(stderr, "write on fd:%d of size:%ld failed with %ld: %s (errno: %d)\n", fd, size, bytes, - strerror(errno), errno); - return -1; - } - return bytes; -} -int test_close(int fd) { - int ret = close(fd); - if (ret == -1) { - perror("close"); - return -1; - } - return ret; -} -int test_lseek(int fd, off_t offset, int whence) { - int ret = lseek(fd, offset, whence); - if (ret == -1) { - perror("lseek"); - return -1; - } - return ret; -} -int test_fsync(int fd) { - int ret = fsync(fd); - if (ret == -1) { - perror("fsync"); - return -1; - } - return ret; -} - -int main(int argc, char* argv[]) { - MPI_Init(&argc, &argv); - int my_rank, comm_size; - MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); - MPI_Comm_size(MPI_COMM_WORLD, &comm_size); - int files = atoi(argv[1]); - int ops = atoi(argv[2]); - ssize_t ts = atol(argv[3]); - std::string dir = std::string(argv[4]); - int test_flag = atoi(argv[5]); - int direct_io_flag = atoi(argv[6]); - int sleep_time = atoi(argv[7]); - struct stat st; - if (stat(dir.c_str(), &st) != 0) { - perror("stat"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - size_t alignment = st.st_blksize; - void* data_aligned = nullptr; - void* read_data_aligned = nullptr; - if (posix_memalign(&data_aligned, alignment, ts) != 0) { - perror("posix_memalign data"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - if (posix_memalign(&read_data_aligned, alignment, ts) != 0) { - perror("posix_memalign read_data"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - char* data = (char*)data_aligned; - char* read_data = (char*)read_data_aligned; - // for (int i = 0; i < ts; ++i) { - // ((char *)data)[i] = 'a' + (i % 26); // Fill with some data - // } - Timer open_timer = Timer(); - Timer write_timer = Timer(); - Timer read_timer = Timer(); - Timer close_timer = Timer(); - for (int file_idx = 0; file_idx < files; ++file_idx) { - std::string filename = - dir + "/file_" + std::to_string(file_idx) + "_" + std::to_string(my_rank) + ".dat"; - - open_timer.resumeTime(); - - int fd = -1; - if (test_flag == 0) { - int flag = O_WRONLY | O_CREAT | O_TRUNC; - if (direct_io_flag == 1) { - flag = O_WRONLY | O_CREAT | O_TRUNC | O_DIRECT; - } - fd = test_open_perm(filename.c_str(), flag, 0777); - } else if (test_flag == 1) { - int flag = O_RDONLY; - if (direct_io_flag == 1) { - flag = O_RDONLY | O_DIRECT; - } - fd = test_open(filename.c_str(), flag); - } else { - int flag = O_RDWR | O_CREAT | O_TRUNC; - if (direct_io_flag == 1) { - flag = O_RDWR | O_CREAT | O_TRUNC | O_DIRECT; - } - fd = test_open_perm(filename.c_str(), flag, 0777); - } - - open_timer.pauseTime(); - if (fd == -1) { - fprintf(stderr, "Error opening file:%s %s (errno: %d)\n", filename.c_str(), strerror(errno), - errno); - assert(fd != -1); - } - printf("Opened file: %s with fd: %d, ts: %zd\n", filename.c_str(), fd, ts); - if (sleep_time > 0) { - printf("Sleeping for %d\n", sleep_time); - sleep(sleep_time); - } - for (int op_idx = 0; op_idx < ops; ++op_idx) { - if (test_flag == 0 || test_flag == 2) { - if (sleep_time > 0) { - printf("Sleeping for write for %d for step %d of %d\n", sleep_time, op_idx, ops); - sleep(sleep_time); - } - write_timer.resumeTime(); - assert(test_write(fd, data, ts) == ts); - write_timer.pauseTime(); - } - - if (test_flag == 2) { - if (sleep_time > 0) { - printf("Sleeping for fseek for %d for step %d of %d\n", sleep_time, op_idx, ops); - sleep(sleep_time); - } - test_lseek(fd, (off_t)op_idx * ts, SEEK_SET); - } - if (test_flag == 1 || test_flag == 2) { - if (sleep_time > 0) { - printf("Sleeping for read for %d for step %d of %d\n", sleep_time, op_idx, ops); - sleep(sleep_time); - } - read_timer.resumeTime(); - auto read_bytes = test_read(fd, read_data, ts); - read_timer.pauseTime(); - } - } - if (sleep_time > 0) { - printf("Sleeping for close for %d\n", sleep_time); - sleep(sleep_time); - } - close_timer.resumeTime(); - test_close(fd); - close_timer.pauseTime(); - } - free(read_data); - double open_time = open_timer.getElapsedTime(); - double total_open_time; - MPI_Reduce(&open_time, &total_open_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - double close_time = close_timer.getElapsedTime(); - double total_close_time; - MPI_Reduce(&close_time, &total_close_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - double write_time = write_timer.getElapsedTime(); - double total_write_time; - MPI_Reduce(&write_time, &total_write_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - double read_time = read_timer.getElapsedTime(); - double total_read_time; - MPI_Reduce(&read_time, &total_read_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - if (my_rank == 0) { - printf("%d,%d,%d,%ld,%f,%f,%f,%f\n", comm_size, test_flag, ops, ts, total_open_time / comm_size, - total_close_time / comm_size, total_write_time / comm_size, total_read_time / comm_size); - } - MPI_Finalize(); - return 0; -} \ No newline at end of file diff --git a/tests/unittests/io_tests/test.py b/tests/unittests/io_tests/test.py deleted file mode 100755 index 653e0069..00000000 --- a/tests/unittests/io_tests/test.py +++ /dev/null @@ -1,25 +0,0 @@ -import os -import time - -def test_one(): - print("Running test_one") - time.sleep(1) - test_two() - -def test_two(): - print("Running test_two") - time.sleep(1) - test_three() - -def test_three(): - time.sleep(1) - with open("tempfile.txt", "w") as f: - f.write("Hello, world!") - os.remove("tempfile.txt") - print("Running test_three") - -if __name__ == "__main__": - print(f"PID: {os.getpid()}") - # input("Press Enter to continue...") - test_one() - # input("Press Enter to continue...") \ No newline at end of file diff --git a/tests/unittests/io_tests/test_stdio.cpp b/tests/unittests/io_tests/test_stdio.cpp deleted file mode 100644 index eaa70910..00000000 --- a/tests/unittests/io_tests/test_stdio.cpp +++ /dev/null @@ -1,137 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -class Timer { - public: - Timer() : elapsed_time(0) {} - void resumeTime() { t1 = std::chrono::high_resolution_clock::now(); } - double pauseTime() { - auto t2 = std::chrono::high_resolution_clock::now(); - elapsed_time += std::chrono::duration(t2 - t1).count(); - return elapsed_time; - } - double getElapsedTime() { return elapsed_time; } - - private: - std::chrono::high_resolution_clock::time_point t1; - double elapsed_time; -}; -std::string gen_random(const int len) { - static const char alphanum[] = - "0123456789" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz"; - std::string tmp_s; - tmp_s.reserve(len); - - for (int i = 0; i < len; ++i) { - tmp_s += alphanum[rand() % (sizeof(alphanum) - 1)]; - } - - return tmp_s; -} -int main(int argc, char* argv[]) { - MPI_Init(&argc, &argv); - int my_rank, comm_size; - MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); - MPI_Comm_size(MPI_COMM_WORLD, &comm_size); - int files = atoi(argv[1]); - int ops = atoi(argv[2]); - int ts = atoi(argv[3]); - std::string dir = std::string(argv[4]); - int test_flag = atoi(argv[5]); - int direct_io_flag = atoi(argv[6]); - std::string data = gen_random(ts); - char* read_data = (char*)malloc(ts); - Timer open_timer = Timer(); - Timer write_timer = Timer(); - Timer read_timer = Timer(); - Timer close_timer = Timer(); - int sleep_time = 0; - for (int file_idx = 0; file_idx < files; ++file_idx) { - std::string filename = - dir + "/file_" + std::to_string(file_idx) + "_" + std::to_string(my_rank) + ".dat"; - - open_timer.resumeTime(); - - FILE* fh; - if (test_flag == 0) { - fh = fopen(filename.c_str(), "w+"); - // fd = open(filename.c_str(), flag, 0777); - } else if (test_flag == 1) { - fh = fopen(filename.c_str(), "r"); - } else { - fh = fopen(filename.c_str(), "w+"); - } - if (sleep_time > 0) { - printf("Sleeping for %d\n", sleep_time); - sleep(sleep_time); - } - assert(fh != NULL); - open_timer.pauseTime(); - for (int op_idx = 0; op_idx < ops; ++op_idx) { - if (sleep_time > 0) { - printf("Sleeping for write for %d for step %d of %d\n", sleep_time, op_idx, ops); - sleep(sleep_time); - } - if (test_flag == 0 || test_flag == 2) { - write_timer.resumeTime(); - assert(fwrite(data.c_str(), ts, 1, fh) == 1); - write_timer.pauseTime(); - } - - if (test_flag == 2) { - if (sleep_time > 0) { - printf("Sleeping for fseek for %d for step %d of %d\n", sleep_time, op_idx, ops); - sleep(sleep_time); - } - fseek(fh, (off_t)op_idx * ts, SEEK_SET); - } - if (test_flag == 1 || test_flag == 2) { - if (sleep_time > 0) { - printf("Sleeping for read for %d for step %d of %d\n", sleep_time, op_idx, ops); - sleep(sleep_time); - } - read_timer.resumeTime(); - assert(fread(read_data, ts, 1, fh) == 1); - read_timer.pauseTime(); - } - } - if (sleep_time > 0) { - printf("Sleeping for close for %d\n", sleep_time); - sleep(sleep_time); - } - close_timer.resumeTime(); - fclose(fh); - close_timer.pauseTime(); - } - free(read_data); - double open_time = open_timer.getElapsedTime(); - double total_open_time; - MPI_Reduce(&open_time, &total_open_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - double close_time = close_timer.getElapsedTime(); - double total_close_time; - MPI_Reduce(&close_time, &total_close_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - double write_time = write_timer.getElapsedTime(); - double total_write_time; - MPI_Reduce(&write_time, &total_write_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - double read_time = read_timer.getElapsedTime(); - double total_read_time; - MPI_Reduce(&read_time, &total_read_time, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); - if (my_rank == 0) { - printf("%d,%d,%d,%d,%f,%f,%f,%f\n", comm_size, test_flag, ops, ts, total_open_time / comm_size, - total_close_time / comm_size, total_write_time / comm_size, total_read_time / comm_size); - } - MPI_Finalize(); - return 0; -} \ No newline at end of file diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt deleted file mode 100644 index f3d33bf2..00000000 --- a/tools/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -cmake_minimum_required(VERSION 3.20) -project(aggregate_trace_tool) - -find_package(json-c REQUIRED) - -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) diff --git a/tools/README.md b/tools/README.md deleted file mode 100644 index 2863e4a1..00000000 --- a/tools/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# callgraph creator - -callgraph_creator receives a trace file created by DataCrumbs and generates a call graph of its functions. - -### usage - -``` -Usage: ./callgraph_creator [options] - -Analyzes a performance trace file to build a call graph. - -Options: - -h, --help Show this help message and exit. - -p, --show-percentage Display the percentage of time each function took (text mode only). - -t, --time-metric Metric for time display (text mode only). can be 'inclusive' or 'exclusive'. - -f, --focus-function Focus the output on all instances of a specific function. - -s, --force-sort Force the program to sort the trace data if it might be out of order. - -a, --aggregate Aggregate children with the same name into a single entry. - -o, --output-format Specify the output format. can be: - 'text' (default): Human-readable call tree. - 'dot': DOT language file for Graphviz. - --min-percent-root Hide root functions that are less than % of the total trace time. - --min-percent-children Hide child functions that are less than % of their parent's time. -``` -### samples - -Example outputs are in the example folder. The traces used for examples are created by running VPIC-IO. The text output was created by using the `focus-function H5Dwrite` functions, and the picture was created using `--min-percent-root 0.001 --min-percent-children 5`. diff --git a/tools/aggregate_trace.cpp b/tools/aggregate_trace.cpp deleted file mode 100644 index 83701e15..00000000 --- a/tools/aggregate_trace.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "decompression.h" - -using namespace std; - -struct Stats { - int count = 0; - double sum = 0; - double sum_sq = 0; - int min = INT_MAX; - int max = INT_MIN; - - void add(int dur) { - count++; - sum += dur; - sum_sq += dur * dur; - if (dur < min) min = dur; - if (dur > max) max = dur; - } - - double mean() const { return count ? sum / count : 0; } - - double stddev() const { - if (count < 2) return 0; - double m = mean(); - return sqrt((sum_sq / count) - (m * m)); - } -}; - -int main(int argc, char* argv[]) { - if (argc < 2) { - cerr << "Usage: " << argv[0] << " " << endl; - return 1; - } - - // Prepare output file path - std::filesystem::path input_path(argv[1]); - std::string basename = input_path.stem().string(); - std::filesystem::path output_dir = std::filesystem::absolute( - std::filesystem::path(argv[0]).parent_path().parent_path() / "tools/output"); - std::filesystem::create_directories(output_dir); - std::filesystem::path output_path = output_dir / (basename + ".csv"); - - ofstream outfile(output_path); - if (!outfile) { - cerr << "Failed to open output file: " << output_path << endl; - return 1; - } - - map, Stats> stats_map; - - try { - datacrumbs::GzipChunkReader reader(argv[1]); - bool first_line = true; - std::string chunk, leftover; - while (reader.nextChunk(chunk)) { - leftover += chunk; - size_t pos = 0; - while (true) { - size_t newline = leftover.find('\n', pos); - if (newline == std::string::npos) break; - std::string line = leftover.substr(pos, newline - pos); - pos = newline + 1; - if (!line.empty() && line.back() == '\r') line.pop_back(); - - if (first_line) { - first_line = false; - if (line == "[") continue; - } - if (line == "]") continue; - if (line.empty()) continue; - - struct json_object* jobj = json_tokener_parse(line.c_str()); - if (!jobj) { - cerr << "Skipping invalid JSON: " << line << endl; - continue; - } - - struct json_object *jcat, *jname, *jdur; - if (!json_object_object_get_ex(jobj, "cat", &jcat) || - !json_object_object_get_ex(jobj, "name", &jname) || - !json_object_object_get_ex(jobj, "dur", &jdur)) { - json_object_put(jobj); - continue; - } - - string cat = json_object_get_string(jcat); - string name = json_object_get_string(jname); - int dur = json_object_get_int(jdur); - - stats_map[{cat, name}].add(dur); - - json_object_put(jobj); - } - leftover = leftover.substr(pos); - } - // Handle any remaining data in leftover - if (!leftover.empty()) { - std::string line = leftover; - if (!line.empty() && line.back() == '\r') line.pop_back(); - if (line != "]" && !line.empty()) { - struct json_object* jobj = json_tokener_parse(line.c_str()); - if (jobj) { - struct json_object *jcat, *jname, *jdur; - if (json_object_object_get_ex(jobj, "cat", &jcat) && - json_object_object_get_ex(jobj, "name", &jname) && - json_object_object_get_ex(jobj, "dur", &jdur)) { - string cat = json_object_get_string(jcat); - string name = json_object_get_string(jname); - int dur = json_object_get_int(jdur); - stats_map[{cat, name}].add(dur); - } - json_object_put(jobj); - } - } - } - } catch (const std::exception& ex) { - cerr << ex.what() << endl; - return 1; - } - - // Collect stats into a vector for sorting by sum (total duration) - vector, Stats>> stats_vec(stats_map.begin(), stats_map.end()); - std::sort(stats_vec.begin(), stats_vec.end(), [](const auto& a, const auto& b) { - if (a.second.count != b.second.count) return a.second.count < b.second.count; - return a.second.sum < b.second.sum; - }); - ostream& out = outfile; - // CSV header - out << "index,cat,name,count,min,max,mean,stddev,sum" << endl; - - int index = 0; - for (const auto& [key, stats] : stats_vec) { - out << index++ << "," << '"' << key.first << "\"," << '"' << key.second << "\"," << stats.count - << "," << stats.min << "," << stats.max << "," << fixed << setprecision(2) << stats.mean() - << "," << fixed << setprecision(2) << stats.stddev() << "," << fixed << setprecision(2) - << stats.sum << endl; - } - - cout << "Output written to: " << output_path << endl; - return 0; -} \ No newline at end of file diff --git a/tools/analyze_trace.sh b/tools/analyze_trace.sh deleted file mode 100755 index 8f913580..00000000 --- a/tools/analyze_trace.sh +++ /dev/null @@ -1,186 +0,0 @@ -#!/bin/bash - -# Function to echo with timestamp -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" -} - -# Check if file is provided as argument -if [ $# -eq 0 ]; then - 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 -fi - -# Create temporary file without brackets -TEMP_FILE=$(mktemp) - -log "Removing brackets from input file..." -sed '1d;$d' "$INPUT_FILE" | sed 's/,$//' >"$TEMP_FILE" - -# Declare associative arrays for calculations -declare -A total_dur -declare -A count -declare -A category - -log "Processing JSON records..." - -# Read each line and process with jq -# Count total lines for progress bar -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 -} - -export -f process_line - -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" -} - -# Process lines in parallel and show progress bar -rm -f "$TEMP_FILE.results" -processed=0 - -export -f process_line - -# Use a named pipe to avoid race conditions -PIPE=$(mktemp -u) -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" -) & - -# In the awk aggregation, add sumsq -awk -F'|' -v total="$total_lines" ' -{ - name=$1 - cat=$2 - dur=$3 - total_dur[name] += dur - count[name] += 1 - sumsq[name] += (dur * dur) - category[name] = cat - processed++ - if (processed == 1) { - start_time = systime() - } - if (processed % 100 == 0 || processed == total) { - now = systime() - elapsed = now - start_time - if (processed > 0) { - eta = (elapsed * (total - processed)) / processed - } else { - eta = 0 - } - printf "\r[" > "/dev/stderr" - width=40 - filled=int(processed * width / total) - empty=width - filled - for (i=0; i "/dev/stderr" - for (i=0; i "/dev/stderr" - percent=int(processed * 100 / total) - printf "] %3d%% (%d/%d) Elapsed: %ds ETA: %ds", percent, processed, total, elapsed, eta > "/dev/stderr" - } -} -END { - printf "\n" > "/dev/stderr" - 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" - -# 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" - -# Prepare output directory and file -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -OUTPUT_DIR="$SCRIPT_DIR/output" -mkdir -p "$OUTPUT_DIR" -INPUT_BASENAME="$(basename "$INPUT_FILE")" -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[@]}" -} | tee "$OUTPUT_FILE" diff --git a/tools/callgraph_vis.cpp b/tools/callgraph_vis.cpp deleted file mode 100644 index 83fa18d2..00000000 --- a/tools/callgraph_vis.cpp +++ /dev/null @@ -1,506 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include - -// --- Type Definitions and Global Structures --- - -typedef enum { FORMAT_TEXT, FORMAT_DOT } OutputFormat; - -typedef struct Node { - char* name; - long long ts; - long long dur; - long long ts_end; - long long exclusive_dur; - struct Node** children; - int children_count; - int children_capacity; - int count = 1; - long long max; - long long min; - int depth = 0; -} Node; - -// Global arguments parsed from command line -typedef struct Args { - int show_percentage; - int is_exclusive_metric; - int force_sort; - double min_percent_root; - double min_percent_children; - OutputFormat output_format; - char* focus_function; - char* filepath; - int aggregate; - int depth_cut = 20; -} Args; - -void print_help(const char* prog_name) { - printf("Usage: %s [options]\n\n", prog_name); - printf("Analyzes a performance trace file to build a call graph.\n\n"); - printf("Options:\n"); - printf(" -h, --help Show this help message and exit.\n"); - printf( - " -p, --show-percentage Display the percentage of time each function took (text " - "mode only).\n"); - printf( - " -a, --aggregate Aggregate repetitive functions under the same parent into " - "one entry.\n"); - printf( - " -t, --time-metric Metric for time display. can be 'inclusive' or " - "'exclusive'.\n"); - printf( - " -f, --focus-function Focus the output on all instances of a specific " - "function.\n"); - printf( - " -s, --force-sort Force sorting of trace data (useful if out of order).\n"); - printf(" -o, --output-format Specify the output format. can be:\n"); - printf(" 'text' (default): Human-readable call tree.\n"); - printf(" 'dot': DOT language file for Graphviz.\n"); - printf( - " -d, --depth_cut Set the maximum depth for the call tree (default: 20).\n"); - printf( - " --min-percent-root Hide root functions consuming less than %% of total " - "time.\n"); - printf( - " --min-percent-children Hide child functions consuming less than %% of " - "parent's time.\n"); -} - -void calculate_exclusive_times(Node** nodes, int count) { - for (int i = 0; i < count; i++) { - Node* node = nodes[i]; - long long children_total_dur = 0; - for (int j = 0; j < node->children_count; j++) { - children_total_dur += node->children[j]->dur; - } - node->exclusive_dur = node->dur - children_total_dur; - if (node->children_count > 0) { - calculate_exclusive_times(node->children, node->children_count); - } - } -} - -void find_nodes_by_name(Node** nodes, int count, const char* name, Node*** found_nodes, - int* found_count) { - for (int i = 0; i < count; i++) { - if (strcmp(nodes[i]->name, name) == 0) { - *found_nodes = (Node**)realloc(*found_nodes, (*found_count + 1) * sizeof(Node*)); - (*found_nodes)[*found_count] = nodes[i]; - (*found_count)++; - } - if (nodes[i]->children_count > 0) { - find_nodes_by_name(nodes[i]->children, nodes[i]->children_count, name, found_nodes, - found_count); - } - } -} -// For events starting at the same time, process the larger (parent) one first -int compare_nodes(const void* a, const void* b) { - Node* nodeA = *(Node**)a; - Node* nodeB = *(Node**)b; - if (nodeA->ts < nodeB->ts) return -1; - if (nodeA->ts > nodeB->ts) return 1; - if (nodeA->dur > nodeB->dur) return -1; - if (nodeA->dur < nodeB->dur) return 1; - return 0; -} - -void sanitize_for_graphing(const char* input, char* output, size_t size) { - size_t i = 0; - for (i = 0; i < size - 1 && input[i] != '\0'; i++) { - if (input[i] == ';' || isspace(input[i]) || input[i] == '"' || input[i] == '\\') { - output[i] = '_'; - } else { - output[i] = input[i]; - } - } - output[i] = '\0'; -} - -void print_tree(Node** nodes, int count, Args* args, long long total_run_time, const char* prefix, - long long parent_inclusive_dur, const char* stack_prefix) { - for (int i = 0; i < count; i++) { - Node* node = nodes[i]; - - double percentage = 0.0; - if (parent_inclusive_dur == -1) { // Root node - if (total_run_time > 0) percentage = ((double)node->dur / total_run_time) * 100.0; - if (args->min_percent_root > 0 && percentage < args->min_percent_root) { - continue; - } - } else { // Child node - if (parent_inclusive_dur > 0) percentage = ((double)node->dur / parent_inclusive_dur) * 100.0; - if (args->min_percent_children > 0 && percentage < args->min_percent_children) { - continue; - } - } - - if (args->output_format == FORMAT_TEXT) { - const char* connector = (i == count - 1) ? "└── " : "├── "; - printf("%s%s%s (dur: %lld [%s], depth: %d)", prefix, connector, node->name, - args->is_exclusive_metric ? node->exclusive_dur : node->dur, - args->is_exclusive_metric ? "exclusive" : "inclusive", node->depth); - - if (args->aggregate && node->count > 1) { - printf(" (count: %d, min: %lld, max: %lld, avg: %lld)", node->count, node->min, node->max, - node->dur / node->count); - } - - if (args->show_percentage) { - const char* label = (parent_inclusive_dur == -1) - ? (args->focus_function ? "of self" : "of total") - : "of parent"; - printf(" [%.2f%% %s]", percentage, label); - } - - printf("\n"); - } else if (args->output_format == FORMAT_DOT) { - char sanitized_name[1024]; - sanitize_for_graphing(node->name, sanitized_name, sizeof(sanitized_name)); - - // Calculate the exclusive duration's percentage of the total run time. - double exclusive_percentage_of_total = 0.0; - if (total_run_time > 0) { - exclusive_percentage_of_total = ((double)node->exclusive_dur / total_run_time) * 100.0; - } - - // Define the node with a label showing its name, exclusive duration, and percentage of total. - printf(" \"%s\" [label=\"%s\\nExclusive: %lld (%.2f%%)\"];\n", sanitized_name, node->name, - node->exclusive_dur, exclusive_percentage_of_total); - - // If it's a child node, draw an edge from its parent. - if (parent_inclusive_dur != -1) { - char sanitized_parent[1024]; - sanitize_for_graphing(stack_prefix, sanitized_parent, sizeof(sanitized_parent)); - printf(" \"%s\" -> \"%s\";\n", sanitized_parent, sanitized_name); - } - } - - if (node->children_count > 0) { - char new_prefix[256] = ""; - char new_stack_prefix[1024] = ""; - - if (args->output_format == FORMAT_TEXT) { - snprintf(new_prefix, sizeof(new_prefix), "%s%s", prefix, - (i == count - 1) ? " " : "│ "); - } - - // For DOT format, the new stack prefix is the current node's name, used to identify the - // parent in the recursive call. - if (args->output_format == FORMAT_DOT) { - snprintf(new_stack_prefix, sizeof(new_stack_prefix), "%s", node->name); - } - - print_tree(node->children, node->children_count, args, total_run_time, new_prefix, node->dur, - new_stack_prefix); - } - } -} - -int main(int argc, char* argv[]) { - // --- Argument Parsing --- - Args args = {0, 0, 0, 0.0, 0.0, FORMAT_TEXT, NULL, NULL, 0, 20}; - int opt; - struct option long_options[] = {{"help", no_argument, 0, 'h'}, - {"show-percentage", no_argument, 0, 'p'}, - {"aggregate", no_argument, 0, 'a'}, - {"time-metric", required_argument, 0, 't'}, - {"focus-function", required_argument, 0, 'f'}, - {"force-sort", no_argument, 0, 's'}, - {"output-format", required_argument, 0, 'o'}, - {"min-percent-root", required_argument, 0, 256}, - {"min-percent-children", required_argument, 0, 257}, - {"depth_cut", required_argument, 0, 'd'}, - {0, 0, 0, 0}}; - - while ((opt = getopt_long(argc, argv, "hpat:f:so:d:", long_options, NULL)) != -1) { - switch (opt) { - case 'h': - print_help(argv[0]); - return 0; - case 'p': - args.show_percentage = 1; - break; - case 'a': - args.aggregate = 1; - break; - case 't': - args.is_exclusive_metric = (strcmp(optarg, "exclusive") == 0); - break; - case 'f': - args.focus_function = optarg; - break; - case 's': - args.force_sort = 1; - break; - case 'o': - if (strcmp(optarg, "dot") == 0) { - args.output_format = FORMAT_DOT; - } - break; - case 'd': - args.depth_cut = atoi(optarg); - break; - case 256: - args.min_percent_root = atof(optarg); - break; - case 257: - args.min_percent_children = atof(optarg); - break; - default: - print_help(argv[0]); - return EXIT_FAILURE; - } - } - if (optind >= argc) { - fprintf(stderr, "Error: Filepath is required.\n\n"); - print_help(argv[0]); - exit(EXIT_FAILURE); - } - args.filepath = argv[optind]; - - // --- File Reading --- - FILE* fp = fopen(args.filepath, "rb"); - if (!fp) { - perror("Error opening file for analysis"); - return EXIT_FAILURE; - } - fseek(fp, 0, SEEK_END); - long file_size = ftell(fp); - fseek(fp, 0, SEEK_SET); - char* buffer = (char*)malloc(file_size + 1); - if (!buffer || fread(buffer, 1, file_size, fp) != file_size) { - perror("Error reading file"); - free(buffer); - fclose(fp); - return EXIT_FAILURE; - } - buffer[file_size] = '\0'; - fclose(fp); - - // --- JSON Parsing and Node Creation --- - Node** all_nodes = NULL; - int total_nodes = 0; - int capacity = 0; - long long excluded_time = 0; - char* current_pos = buffer; - char* end = buffer + file_size; - - while (current_pos < end) { - char* next_newline = (char*)memchr(current_pos, '\n', end - current_pos); - char* line_end = (next_newline != NULL) ? next_newline : end; - - if (line_end > current_pos && *(line_end - 1) == '\r') { - line_end--; - } - - char original_char = *line_end; - *line_end = '\0'; - - if (strlen(current_pos) > 1) { - json_object* json = json_tokener_parse(current_pos); - if (json) { - json_object* ph_obj; - if (json_object_object_get_ex(json, "ph", &ph_obj) && - json_object_is_type(ph_obj, json_type_string) && - strcmp(json_object_get_string(ph_obj), "X") == 0) { - json_object *name_obj, *ts_obj, *dur_obj; - if (json_object_object_get_ex(json, "name", &name_obj) && - json_object_is_type(name_obj, json_type_string) && - json_object_object_get_ex(json, "ts", &ts_obj) && - json_object_get_type(ts_obj) != json_type_null && - json_object_object_get_ex(json, "dur", &dur_obj) && - json_object_get_type(dur_obj) != json_type_null) { - Node* node = (Node*)calloc(1, sizeof(Node)); - - long long dur_val = json_object_get_int64(dur_obj); - node->name = strdup(json_object_get_string(name_obj)); - node->ts = json_object_get_int64(ts_obj); - node->dur = dur_val; - node->ts_end = node->ts + node->dur; - node->count = 1; - node->min = dur_val; - node->max = dur_val; - - if (total_nodes >= capacity) { - capacity = (capacity == 0) ? 1024 : capacity * 2; - all_nodes = (Node**)realloc(all_nodes, capacity * sizeof(Node*)); - } - all_nodes[total_nodes++] = node; - } - } - json_object_put(json); - } - } - - *line_end = original_char; - current_pos = (next_newline != NULL) ? (next_newline + 1) : end; - } - free(buffer); - - if (total_nodes == 0) { - printf("No function call events ('ph': 'X') found in the data.\n"); - if (all_nodes) free(all_nodes); - return 0; - } - - // --- Call Tree Construction --- - if (args.force_sort) { - qsort(all_nodes, total_nodes, sizeof(Node*), compare_nodes); - } - - Node** stack = (Node**)malloc(total_nodes * sizeof(Node*)); - int stack_top = -1; - Node** root_calls = NULL; - int root_count = 0; - std::ofstream outFile("depth_cut.txt"); - - for (int i = 0; i < total_nodes; i++) { - Node* call = all_nodes[i]; - bool found = false; - - while (stack_top > -1 && call->ts >= stack[stack_top]->ts_end) { - stack_top--; - } - - if (stack_top > -1) { - Node* parent = stack[stack_top]; - call->depth = parent->depth + 1; - - if (call->depth > args.depth_cut) { - excluded_time += call->dur; - if (outFile.is_open()) { - outFile << call->name << " " << call->dur << std::endl; - } - continue; - } - - if (args.aggregate) { - for (int j = 0; j < parent->children_count; j++) { - if (strcmp(parent->children[j]->name, call->name) == 0) { - if (parent->children[j]->max < call->dur) parent->children[j]->max = call->dur; - if (parent->children[j]->min > call->dur) parent->children[j]->min = call->dur; - parent->children[j]->dur += call->dur; - parent->children[j]->count++; - found = true; - break; - } - } - } - - if (!found) { - if (parent->children_count >= parent->children_capacity) { - parent->children_capacity = - (parent->children_capacity == 0) ? 4 : parent->children_capacity * 2; - parent->children = - (Node**)realloc(parent->children, parent->children_capacity * sizeof(Node*)); - } - parent->children[parent->children_count++] = call; - } - } else { // Is a root call - call->depth = 0; - if (args.aggregate) { - for (int j = 0; j < root_count; j++) { - if (strcmp(root_calls[j]->name, call->name) == 0) { - if (root_calls[j]->max < call->dur) root_calls[j]->max = call->dur; - if (root_calls[j]->min > call->dur) root_calls[j]->min = call->dur; - root_calls[j]->dur += call->dur; - root_calls[j]->count++; - found = true; - break; - } - } - } - if (!found) { - root_calls = (Node**)realloc(root_calls, (root_count + 1) * sizeof(Node*)); - root_calls[root_count++] = call; - } - } - - stack[++stack_top] = call; - } - free(stack); - outFile.close(); - - // --- Data Processing and Output --- - calculate_exclusive_times(root_calls, root_count); - - if (args.output_format == FORMAT_DOT) { - printf("digraph G {\n"); - } - - if (args.focus_function) { - Node** focused_nodes = NULL; - int focused_count = 0; - find_nodes_by_name(root_calls, root_count, args.focus_function, &focused_nodes, &focused_count); - - if (focused_count == 0) { - fprintf(stderr, "\nError: Function '%s' not found in the trace.\n", args.focus_function); - } else { - if (args.output_format == FORMAT_TEXT) { - printf("Found %d instance(s) of '%s'.\n\n", focused_count, args.focus_function); - } - - for (int i = 0; i < focused_count; i++) { - if (args.output_format == FORMAT_TEXT) { - printf("============================================================\n"); - printf("Call graph for '%s' (Instance #%d)\n", args.focus_function, i + 1); - printf("Total time for this instance: %lld\n", focused_nodes[i]->dur); - printf("============================================================\n"); - } - - print_tree(&focused_nodes[i], 1, &args, focused_nodes[i]->dur, "", -1, ""); - printf("============================================================\n"); - if (args.output_format == FORMAT_TEXT) printf("\n"); - } - free(focused_nodes); - } - } else { - if (total_nodes > 0) { - long long min_ts = -1, max_ts_end = 0; - if (total_nodes > 0) { // Ensure all_nodes is not empty - min_ts = all_nodes[0]->ts; - for (int i = 0; i < total_nodes; i++) { - if (all_nodes[i]->ts < min_ts) min_ts = all_nodes[i]->ts; - if (all_nodes[i]->ts_end > max_ts_end) max_ts_end = all_nodes[i]->ts_end; - } - } - long long total_run_time = (min_ts != -1) ? (max_ts_end - min_ts) : 0; - - if (args.output_format == FORMAT_TEXT) { - printf("============================================================\n"); - printf(" Call Graph\n"); - printf("Total Trace Duration: %lld\n", total_run_time); - printf("Excluded Time (due to depth cut): %lld(%f%% of total time)\n", excluded_time, - (total_run_time > 0) ? (excluded_time * 100.0 / total_run_time) : 0.0); - printf("============================================================\n"); - } - print_tree(root_calls, root_count, &args, total_run_time, "", -1, ""); - } - } - - if (args.output_format == FORMAT_DOT) { - printf("}\n"); - } - - // --- Final Cleanup --- - for (int i = 0; i < total_nodes; i++) { - free(all_nodes[i]->name); - free(all_nodes[i]->children); - free(all_nodes[i]); - } - free(all_nodes); - free(root_calls); - - if (args.output_format == FORMAT_TEXT) { - printf("\ncompleted.\n"); - } - return 0; -} diff --git a/tools/decompression.h b/tools/decompression.h deleted file mode 100644 index 98da8eaa..00000000 --- a/tools/decompression.h +++ /dev/null @@ -1,63 +0,0 @@ -#pragma once -#include - -#include -#include -#include -#include - -constexpr size_t CHUNK_SIZE = 16 * 1024 * 1024; // 16MB -namespace datacrumbs { -class GzipChunkReader { - public: - GzipChunkReader(const std::string& filename) - : infile_(fopen(filename.c_str(), "rb")), strm_({}), eof_(false) { - if (!infile_) throw std::runtime_error("Failed to open file: " + filename); - if (inflateInit2(&strm_, 16 + MAX_WBITS) != Z_OK) - throw std::runtime_error("Failed to initialize zlib inflate."); - inbuf_.resize(CHUNK_SIZE); - outbuf_.resize(CHUNK_SIZE); - } - - ~GzipChunkReader() { - inflateEnd(&strm_); - if (infile_) fclose(infile_); - } - - // Returns false when no more data is available - bool nextChunk(std::string& chunk) { - if (eof_) return false; - - strm_.avail_in = fread(inbuf_.data(), 1, inbuf_.size(), infile_); - if (ferror(infile_)) throw std::runtime_error("Error reading input file."); - if (strm_.avail_in == 0) { - eof_ = true; - return false; - } - strm_.next_in = reinterpret_cast(inbuf_.data()); - - chunk.clear(); - do { - strm_.avail_out = outbuf_.size(); - strm_.next_out = reinterpret_cast(outbuf_.data()); - int ret = inflate(&strm_, Z_NO_FLUSH); - if (ret == Z_STREAM_ERROR || ret == Z_DATA_ERROR || ret == Z_MEM_ERROR) - throw std::runtime_error("zlib inflate error."); - size_t have = outbuf_.size() - strm_.avail_out; - chunk.append(outbuf_.data(), have); - if (ret == Z_STREAM_END) { - eof_ = true; - break; - } - } while (strm_.avail_out == 0); - - return !chunk.empty(); - } - - private: - FILE* infile_; - z_stream strm_; - std::vector inbuf_, outbuf_; - bool eof_; -}; -} // namespace datacrumbs \ No newline at end of file diff --git a/tools/examples/imageoutput.png b/tools/examples/imageoutput.png deleted file mode 100644 index 03c686993e479005831f96fc4b529ad8fbdd67e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2090276 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

xU+7q3C$@*s<{pujERrvaVU9&k?oMlm}JUad_fb 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%0Dp(G?|guRM*5d!T) zK-bIH=qzPdKa^FYDtxlnqNt!*D&y+&zq}eCy_gcMZ+vNJh;KpIu70&@N%gkBqx~H^aMY*6 zvVT@D_RWXi1hO2sW^tUH(`C+YvT)8maQ3m}+h*SHM%Cba*AcG+ZuO$iP40Y;D42+G zr7T`{;t_b=yozF|Y4I)|2)MM+N!if4ar-BeVJWhsCr&G65;}*ZRRYuSt7w91dXD=E zxPd8BLXD7Bxf~d9l@SYorBJWCf8aSIDU1ArKKkgRnnE2XOqif=+TJ}T?}Z~-=K z2T2z2O&=cme=lwqUPSTq5*aBUF8rEIaStc@#zmiw{`^0eoCFaSvzFvfZie0h;n0S= zM}m}aaj=-IOZ$RyR}m)A3fONi%0A&}xN_M76Vp7EvKtq;bsv5c{P|U$p1#@vND?8_ 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%0Aj|SN&C2eY;skSM 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

    U73*JA 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 z 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 z z+^%g~@$-1+EdetjW~w4FO%GQ5GM`B!k$4b^(dfAIT&3-Q)0p=9D40y>H_>=G zbTFF8=^;Ve7hh72x_AH3p+nJDBotqF34=C4V- zt(X=)aWl3DYOL#`R~s7YLrrJ-HhL6aP6v5UaJ=Ky#QGbd`Ibzg8tUsc!G`4Hav+6z zF#Q3_XP3cXY3aUw`kV$=wSJ!vr`?d#kW_OpEX3q#hp%_by{d)}$GLX|1ysU;=7enR z_G1uX1B0sqMopuQqNu%??NQzy1bc&p#WGsMkSsg-J3vX#1V8meen(pEEf`(C-DhOd)`$)T#< zM*5HiufYYPMjkAuY`{`$qOt z-u3058J;6J$fMwJdm~~fji+o|$=WkOfC&i-5!p`ltl}KDVNOv&O33qh)jpA5RP+*^ zw+&jUM%nQU#glSNy;+8Jcc%GNxGPzk;Z+)+w79_9TQcZDG8t28f87MCy$sL_t|C8% z+eRt4%Q?2m(5wxUmSi=Scg%uRR(@PyU(0*d^56)I;h9KPTn zn^=3+@Y^c=Do}_KSioBPdRDwKbg9x?3BgdC33M<_BW};c&>K*MZS3quVZM>z&=emW ze>EWS)Q;n}RYsaEF@~QGdq3S{RemZY>tOG{HHx>SX;M>z+ni9VPWHK~?gM8=RNm55 zYbacg43ej=gHZs=d?|@WhA+YFhvR73St_)XQEvXJqdm4yES+dbkgkf)uYJ6c>rDDQ z)PjbCLMH4iarg61QuH0BLBFRac2uAX$?NIZ4 zjOPIp)1=&>(VT9&^SzM|ym|u=UgOxSE0A&~#WH;B(Z-J^P+h_4(dkhHkZf=_PCx)q zNxxQdQ}kC#E)iT66&3H5EWU%*XDQ9awFAwKTDW|FES_q6iJ_l1nE3|JooZVv23y9Y zZ0zos{==t0#!7Ck%FHbFU7(K-JR8;FPUF_7uX~R> zu9=r=cSSe+{`Q2*K&Rk?$_ZCnBECF?2KDUW!$YK(p>chDaGgAhxZpX*ntX2oW5bqe zRG=}@0!rcQjVU+~efiTeo<}SbDJ|by5$^iQv1wxpPeoJ~jOXrBi=B3Mb`IXfdtSsn z0v8<@Drc=FQ!{A$VT}TrDcjnf*}mV~=}lJ3^+AcsC(~qeYVz*XZ}o2;?^|^{wB%Fm z{$5t!q9USg%jh9>1B%;hro}(j2y^)?YnWi(FH;EmkX-Y2U#D+kArn17A8F}fAwB*B zDVjf1F1JT6=`k{D;`KWV=iiH2?2>e1?m_UO_I}!fBainU(@R2j?mk`;l4vXpaHy5my+B`>1;u9b%y?E=121-zUb9m`A)%Z9tcI^KWyXw%*k@ZFJ9g1q zxrLFAFRwHNgrskTWK@~I?ac$QE)1$dw(f)@#Iu0)Ho8sl_J=(S6HZI=b^I6>yI2Z0 zmM@i+6GFS&1*ci(;SUX3s8hBNR8_wHmDQI#ds2~%;X1xuaXWP9?X#CtWsbs%z`P`| zwYln`wtA7%3Z3=_mze`PuX^&xDyuJUFHWR$y0c>KLk*?cdm|w9MXcg$G-@6 zmbu~d-2=2XZMv3USNs~&t7mWDuF2kDKz}ZZ5UM??SI7Ei%RJCCT1$tlI6zi*)!S9T zV#YJpuhrI8VZ;=?EBd5*O}KaCM#FW96|KP&6T^sggXH9Ll)o6e_vzO!lRF*)Zcema z4Djk@pzXu-{Zhj2s)!ipK{ktAck7oGrKzfluiiz1>+kO30_wAv&YkhEqO^4D6JK@a zTIbCrZ#MkQXhaAat7Jsa*ERNf8{P_06R+Yh{3z(hi<>#)dbPhJvK99Fk z&97fUa1)S{gy!zDqxb(&Ci$Z|qCyN=vqSa9Ysr)l{=I>WRnZ{wO=q03oRCx^_i&Nf zfdh#Km%7|;9Fyo^qnNlXtNu3?PZx<-muJU3{zdJri5MaTsH@UjN!eNbPsp{+Qh~2; zYkH=YggKp(n|*3UaVo&nvJhQu8=L6hUF5OFU`he`AJvUq=2cfqtHk$CbhzyOr*~n4 znxby;{_Nv)_2BEz9z9y1JCIs)n3Ku^u%JFU?(ylnE`3!g+g1&5+&5x(<(o4SkS+|J zDzLJp*wqagWcT@!Ua}K+F1NF1ZZe~$@rETjGTuquk}9))`1pRYyp^!8D)+{~HEY-E zH-#Ifd`<9}=G_x5ao^_o(}o8y3UmW7DdhtPZh-eYU$wKizHjVnLk3^%R)A>yEwg1#5KNrLFS zMEc3rmVdbW{s%r(2!r(vxYDIA_-X2uc6tZ~zkib+#LtV~-rA7LQLU;esE>J`mUf+} z??I(YQS+?)hn2MrhLSZue~y$8hX}H8zZ;68u^o}#PeHh85VwQY1 zTRU4NV!vu=dCx9~l_sx?*x6*7(#`R5nvB&!w}gs;^-rHQ47zHze!Zv@HntXm$8poV zXYDX`N^_N7>(!2Z(}%xwk(mA{IoV0Mu@rWIh^M*ZR_wEHZnO&tB6StR{EI~|O1%A2 zRP?CF*G(dy@eH#gjOJJt#4Ef{bXfbN1|R_wYj>*Gr~8Mr5B#pJsX3n!S1e192vYM` zRt&!V=5x(n|Drj!Cgv*bQ{4W3=7e)|Ctrl_#b-Odib28y4c>J0T(|j`th1gzJ$9(P zXV0-lSvrjx;dLov{%f48VnWXTZJgc0S}6~+0pcK-`CdK$_;ee9YU$|~nO7hG06Ut8jbt9#=QKinRNMJU<`Eie4j|+BNy*DxF+5em3UI^~tRbBZUrPf3L z_O|+(VD{N+bTxE~J*W^vg3M2{c&4`mLVBZJH{h~K9O4Ow8Eu6L12y6YLhd#aVmS#> zFfLUIYhel9Mq}BTTiuwT=qDT${9k!bq(G~kDxklYzKI$k=Dctt*D5H)WyEaOh?`dc zXxFuMTShZ{F=ncmW#liQKP^$7@+ywPquyG8iuL>S)D-epbGEpcer!ehD#tw2+Pt`pf*ukCZ{ z%ja9kKaY+cJ(}5^x|0>U`o(w{3%^=&`Gd^Oq5H38Dxq95cd7te7Jedpo@zXrEw-3M z2-`Jqvw-{C+6ap7kJ{RWXGgD4jqz81_G+76-l|K}t&TAY(rdT~?e7ylNAnTlfrvW` z%$}L5rB(V>lczz0zTVBgHBnz|aX^>@p1xFJk(9uhc!)9EaaBvnK9RR3m+%TEg0SC2H zmUPZo=~(&M+$vGqXV&F&d-m=vqFR%EH7`%Va!{9?D2iP+1u70zofnElL*EvYgv5_I z6>JH}ao-;+ZIbOdU8TG1v_p6A?su}XFINfPeLwwguV?x*D0PHxHx(HRsv976v7c4z zo1lUU(Ir#D;9cdz6Q(>>I2CbEGWE%*!DCh3ZY8u_7~MQ`a!PCdk0&ZgO-}uHpKDop zCw#8L{p&xcb`#5l7r>FlyCLX&KtBSr*qb9>Jq3Fa^$ouW?7;6eGofuUMWkt9ClO#xlUIyoLg}*r8y92h3SW1W!C^T|> z0YO{|z9C#G>8LQJgIQR0>sK9~oUY5cn}#l}M?Uxeh#ik9G*Cd=h3 zR*0oCf8%Gm5@?5cx?h_UyQlV_4pY*N4(~H4qgY%(Bs>D|=iZ)b6-x`EtyUMHFhM`S zDTbjDTxhA-KVoRhL&3FWF^FYFvQqoS--J9AN8Ds)_eC+2X z%;#}HUp-73;u|u8JWLmWE5`hDH5I*VUc@}V{!Q}Y%mqsw^RrUo23aRZ-KOP>GnaKP zsokIH^zKjoXh=B-2q7;V%hnduP%U>Mffm5*fPmq7tCiPQ`56fa8L%LJ>-qnslcWB6 z@Omr0T%2lSd_vK-@(!a5v1?Qc$_!LFiHF3gqVM0`$tp!yt1!`TDi#$R`E4aQzpHmyBLS3Xd9Qk{2gJ1t zI5G%{G3-C#5hg6~AfHr43uiIlTwbPMYWEh7is$#V=g${V0)Zm=X^xfuGk!&^J>Y2E zl^bH|eRfN@lhY!nRaZX6-rXFcWxO;2r{xTA^?hR z$2dwX3iI_fS>xAzo%O1%n8Pgy()PUHb3je8aH+`4n^+t9%O})6z>wqfNbH3s4?jsw z4SiYYxi$Y)T3V+c2V0`(o*0*g#s3rWJ7l4rvd5{yeg!>O12cL-GN{2IHM4I{nmSYtHhOYtpBtFWL4WudFt4hbV;2mBHGUhP1~ zi{3w9SdMpYP<&PSVgM6qbiYe22gr(*3EXUot9Fo3L?mKZn)+0x+xoFa+cOw`9rr9% zG%PeCo`~=-d`j5}hF4-QWI+B;>-5Uw%P6BueT;a z@fSMl-%fJ3j4{e@4SpSeA6!LVm_$yUb)bhW8z=k(&*87W=n|s?m`C{ zxZZ*xCLwXKrD2R9OQSdmsvJDbp@;q#-Ob+SMMvH-m{s-H^n=2Duiy7Dc-|}TuaWe- zQGYf;StV;%+s=6@8M*dBqj$^-8T)Id>1#Q_^XLP8IystWQP1~niPV*6`8e^>uqZ(- zD0G+Gs9pA2Ub&rVx)%Ct>L$DnQgqyxC;9%mwB-TqtVG?tj;;$z`hixPCL3tDwt;&vFqKbJg<(=wzTw5H0x{~ z-cEQOfbOOTERrNf>aETi{flITJmE0pN;r+A2Vt-Emj)%Szqt<>5*m{z<`~VpUVHn!HjuE6423L_oB-Zg&1MC=+mboLR$to8*RRf@o|vag}e-tx>ndRv;x>9jiZ>FN}0_J%Ny9!0mjaI*Y}>-AF$ z<0tBVXzwp=sWHUMCU!u|r}Dc_KO?=9iW)P z>5$tDe@xjFbpG+bqr~7P=t-B4-?70u@Y^7Jd#Mq1>+_?4O zh+5END!Mijpl8X9$3q8|ShQnc;A1>h2k`(MiMNNO&HKn<*-Aa^Y@{tbOz!?udHG2Bi{4YyZpGVlvkK69Y1c;O-jMQg zC3!pZya+i&dkX)j>C4bmQ#kY}y@OiM(|4KXB&o$NDGT^ob0SX2H^2!1M`NC*;j7z3 zE5ukaYk$KD(g9Fw83 z6DG8m)@w-1%8IF+s@K8!OJ~r)-jwZ{A-eE8d%ybIgK*t4QoRP+Y`gpLfwdJVvEbq( z*%6L1Qqm+=;l9;IB#Czkc9Kx(1LF0LO@ayS^FQAvkqRYF{Xt!i!d{7ZcQE zSiMrxtHM{ekr+B$qP0;9-Vr59_Jxn`6%Hzo00F;s^8IJ8_9_!S&lkUbYd$o6?DQWO zV6EKw!P&Smj&OCDErtgW3u3pvH<&gM!A()@j-bS$V;<5P*sjpj8|FZ*dd=UN+LTpCIcVcWYb^=J?;Aw$zt(-avyi<6pVMO$+$!bARVMu?Wb%k^h&9d5ggMq`Y1od5WW zrSUzXXHrUMBwA%X27owL|zk^a-$DkD+Kbs_Z%$qeumO8 zdru)?{dRmI;PwQ<-80Z0a}a8ou>8$14J_BzS>DJ*Xb*LU>< zs)R3|?c7OweyqdKU;K*IfByYmk8n4i5sBUIdXu=w&vF_V=R|V@VNKfxryuiQb zVc;4bY;np(w|Q7p-nbKTQzaZPrgcgx7!s&x8re?R{SZpfj|!t&eI;F^OKG9jLJY($ zASaM(6zE;-l)8){{s*f=m|g4qYTXashFAkiBZL16-ZDLfVI3etNRXh+cEAQhnBDtB zegzWfW#4LwQsM_0jqao)zQgRYIOfMJ>I5WY;@Rd z$L$*1hkPD9)mgvRKQw+eYdyG8fB3#iQJviW*PG1vSfTUfs!vY_RP1l{GU&LlW2|*S zKS&8@4UScw{`^nm>FqvaJPV9(CwvTSD9_BPQZpwdL)Kqg((}4kF9@W9%Zu5?Bhp?J zC?b>4K^P`^+FY8_-|kH2?p^!#iCA|kq55iO)P%gFSxG8hPX$TkY}FF4+_xpg#YGew z{j9rTkl+S9#D0@SfBOyBd9~I}Dk61AAzu3JwHs|#;rK!SC9M>T0LaIVu{E9`VsMSzg!ldl+6iwH$Lc@ zh2o)!iENe7h&9M|M;Z&5lzz_4O0A9Dh^*!W98-SqoZlJ z*R;5yU#|#d!wDzz_sq-A-ddh{$HH3(W8vjIZ*g1jZ*#HY-@E|_yxW{PbHw}8R+m0U zS=)vQa+s};%T4^bBw9Q6SF<4J&}|9YohYUB&R>M3%5YO?E}#%jyxStye?eP^+q&^> z90BKC^Fi?GduO-ygk>+mo}{9#c_hVZI2EfB=HVI1m>&zi4M7i@2}z5XGK?S8$DG48 zZ1!y|Pw8Y{s0YS>Tq|QETttKwBVeU!j4)k7?vNegn4R!p7ZS%8GmI)KD$JNx3Emd8 zT4uzWyM|cB)U1bqcQZO#1qhI=9_&Occmh41;>gRuHTPph@8YFcJgmI(PZyd2VY9{Q zR+RiW?_kTl%w|Lm5)$}8-pnkd{hfqt$M|=b4nrO&TpKcB?AT!2H=uW2`HjMo(%4zU zD|dav@7@x?18phj@Ebe=1K+$Z=qhSxLHFel2#>UkN^BHX^1yYx|F-sC{* z61QxT@IM!XD*DaGC?(cy*x<;{gSUepCfj@cs0+ezX3m@FjgsW)F>!r95W9p!E3+0M zYlaIB+s#%!>Uac8ZBCVNGiAC z-agcBX2q$V(QXYE1Mj#w38f0ucOf)Eqx9w1nuwNVKFWKoJ4?6bW@Rm;C8c$B5hE~R zg*F+%j@oa~wA)F(miszRE?;hRHGQ~ORLGz%l9FPjkYMU+eG@8hm>x4XBWn2QR}+5?xD#9Eoxa#!OFy?W zObb1w`KL9EI{%80Nziz*`+!H75!Q@qm#*>UJE+%RQ?FQh+XnCcKQyZfSv zf^h0)Sy((|W+342M&ed^)J~h*>z;D16;+cFEqn#8~ zTY{-An!`2z_Rk6FT#}QZeSVbH+Al&LBD`P)qd}1Y1d7C#Ml0qHgXxY1*^&6tL4En~ zT@BqDgaSf%#j!b*l3pyIfb`#8RH0C(P8%5eEJ3XZVN9@`sgt^JBB8gbE2xhUUJ_<0 zJz&|J3cmWSTPd*F5Dbkd-&PKmC%mtL_Qbvu0UAR83V53}0|KcN;{n0l0DYIU`|Yyy z?T}tOeWIaC%)brDR+kcd^i72Xjj&jjje+iZUJXU5(c8ig_O&Yj%sL&aGp)#XbP>Bk ze^$QjO|m{`;BEkMGdJYEotRa4iq>Wh3Y4Rd(r3e5{c8+M-60(237R*NP5)2j(E*S` z7!@Oj5`J+kGXQ6!uKmRNM8dLIz)Q++ui)!H2eFDD7!3Ar*C8}5RIC_myhuYMazgIt z_Vy)p$p%X%w$G2h-UUAw{LpWiH<>zPNXwKN%f{8`YJwcM72tlmn62U=szL#%v z;=~CjnXu9Jx$!PSHS`t5kAUvX6fO|^r>w(J4(KQ}_E>_l--+6LDvuyi zxbH72KXU48pt{$C@%};-zY3H9rX|!gUPg_cU~+?03&8>0n?+Fo z`O{kr``YIxrcXBT&p)lXzw!3@5!WYsq#I0Yc5nD|voR;P$JLNH6ivR15dZE_fpDYa7uw>R0fxeOLVwVtC&zwH3Ic!z<_|i;636uJ# z8@qSwCVb8e0V^3SwxQcief=4>+u!Xjpe6(pA@DHR?_MKnf8gTWhL|Npn-j!}r3wqJ zzhrKm_WbXl$jtd!V_{mx=u(I|~w#Gr@18`e#u(f$+GjqQUuq_En@G$R1H_=uH1G=CWjgo&+TUR$)Vj5ZllINBr^D*ZDQrh=M<4~-6wYkAa73805H}y{s`#$I z1*?rf|NhQSXRL(qOx$M+7-}pFpk%ua+_dWUgKIOM1^vga#O^c@aG4&?XY9OrCYG}=177>1ta|7{?h-U$?emJu#C|Cb5Um6jkICAVeP zwUecvPs1m**}YrvSQB=A^A3)WJ*?>FWZcY$m^^pSk3*Px=+s@Jn~pYUUKG)Ce4Fp( z6We+XZ&{)G6Mj$h&6`6RlvA_neF$_JXBzO2|g>#$C@DNg8y$V7>Da+6b6NWR80i!d zW@&lB^gTuYmtEejqHRKYVXvKT>R0zy9r0FP>p3KS+S9c<2bcS_T+%dKGb|;~@U+qg zlY-6EJ*s>?fS@Iuhih<-aBU3W=pi*3A#V2mx-CIzdcPeI`btZ5?b)*=T+2&XkNo=n z{t~zyk;BMxwkM_s0UF8;S1VgN4-lotAh`%&WSYq>Yacg;dY}xoy&pBV4)|{u3A=Ck zp5PE=RAJicVR_JGG~t(U#=Cau5^{5wkv_$QKjdx?2(OGkGSI82-oj*0g*nDZ)NF7~ zu96X5w(7{EdSBYr=?MR4EcNA5>2}(;=8bHxl5{9+U>5zUl#Q}Uc=P1)h;1JSj))9Z z3?1L(v-`s^3BB(+dp@6>Y0jkDa&DO7O$^|tOq%4!*{4ahMv=DwF1GdyfvVjQoDc$& z!Nr0Nlgg*?4ulb+w!A01^2XdX94O{G{Dhb}L6pg)dsE!gzzmYv#Zb#PH;4Jm-nsZk z&42{qL;wM9>8h#)vm^EgzaE^I7N#q&wqnJNx+?qsmtPV^MbXz`UM3}L2y-5TwF{GF ztZ%&n#xp=~#dGrhXYUjrR{RPg77^*(<;%;_V2u;;M$qq!5_Er*jQS)KSP~Pz=;e&? zvY4E@nTh*s6(WfGOCkCM8Q=2#;(fBM z4yu>2)28X_&JiqTs4N7APjM}p5zii(n72ck@$6m~)yLl~`k87B@wKUMoThB0Yn5Q^ zS=BH9K}~~u*gi$&2Vy24 z>p?TS9O9P9IINm{Mo%?`+O6lFFZY% zH4ACF`!?SGUwzZxPI{?8Rr~V9o)Puw0>=W5Th3NhWiPsRKfj61zmsK5bZ@6XTF;y- z${p$Ersa68`ALshe471BWNr_ULy7MwYqSHu(H05Ta-4a_5qQMnD>DUOL=9-?^hD7( z&P4ep?jd^121*zpJ1tQ{xqiLqiSyYzcV;uL(!m!5u8BMLFH6b!p5G6`z~x=OFdhZafXqfx3_4)@d}J;{7@Kq@YTuOx&$)}qpuE_x~X(agK5p9PD4(s1qFaS!O&e5 z`>l6abjg=5BO7X?Gs*H z9g@SITNRk4qXFc-r*3xNV!HCzNiJmu&R9#yk*NE}yr@1kdTH}_*qk@CO!N}1k$~n{ zZp)7inLk};s(n+beW5h6!SeU3yLwG-o3~ki=4kDKhNesGt*xfk#qea+^7O-3Yi*pZ zC%4B~&c1PiVN+Xs1fZ{hJS=F@H*DFmT&Qgfj(9OT(&8ux))p+PSW}&DR}c7Z-`h#| z*8nm*&nWxO&dt zQR{g|w3f_k^#>eK%R{5}BK5PZN%)QKu&k{dv6Vd$y_u;)Ah%8sDv5n@E|WX!Vc za)$Zx(&D$TxG?E326WFM<56q`!}p<{o{~xo*}iSX&K%GDRB3%HM8zH0gj?aN7IP$7gqdxILZ*4tJKP0Wd!LB4i~(`B86h$; z94^;=eiIhXMXs;L{69Oz5Rq}UY(IV!W!%?g^Vu!YN zVvpsx3XEX335XSx`$^M#_{MH78V8q}XCH5~b3oRKzEh>llub&TCwqr)8~RDPpZt(4 zd6V5ao(@!y@^+rBw=m2%P79R;7&`*fYZ(=iaF+`yHcz7X4(1sCTN!wecO}Nop1lUL z`(htqA)ifC3`t$cEMkt{9?VBxQ$@_W!dDS&Wl0%;=HF~FSD7>jum-L0M7TLme&%Je| zav=(0CzYD*TKm&B5g!SO(*P*NS%k~PlN<_8C`${2`;8k*EQi(ChR*5q@UNWn_Grgc zr-w^UMI_~@tEr70Inog(#p;(%T8G)Ht_`9Q%zR?{_cdn+{<6NJ|Lj+w{nuqqFS7z( zC>xaix@%~+?3dAVvDWpkN(Y~ka~>YUaaItrnsmrC%MgM=>MX+s@@(>~OOK>nDPV~9 z?BtyT;r4vCjr>sOJ-vQZDLH^+q3j9b!1^NDA6g%iTU;Ibrmo@VK-=|&#;^(Osy_H2 zCyn*cs6)>tB3lFp7ZtT>lI#as;QutT0 zNe`KQfB$aUj!2pPGlY0oVCFR=X3e_5U^P~Go1*g_3G2(#175w^334041M@V!2LpYi zgpir+7#!UXwZTG~qgd=imQ_kFgCuEJntm9*<;dp?10}yLuB;v4k~H^!LX68NM~s9n z4ZqX^-ywsj-3XFJ%R|je8ylRp`AW{MW?9w8f0;SbUVrlK*Om175qY-!`{#WJPRy|B zCh31>X>H=g{(E0E#6Cz!;)0BuGR1=l%Cn3Nt<5zH{{=$Kj~sF7%$MmsbL%@n$;e>D zGicU!31TRYaJmZtH>#l-F!fn$InHCmt%TcqYe(bTBX%J|hr(yoaQrS|yTIM+i%r{M z76Po=GNpg{P_G$l86Te+(K=-RZ@E=Do-GGkPtL8A9X~_YwfkvBzqb9_Z;>9j+H6|9 z*604y%G;m4(0=-2vp!}iF5UYEjUBt9eIHHN%;RHSr^`-IU2wYg&*TR`MiyRNZhB-( zk9Uz3`Ci4Daq~*Hzs|S5v41u*+-2B#aR>CKr5!{ScoY+K#@Tu=>I$c^+f>-x2}5vz zH)uqMGtW5I>$I$#7mQOel4@Ae``bO2Z*6If;0RA)8U$3G!v9|UXRnRZwM9+6F7$VIvUp}x z=zZbpj_}7aCp4K3;38%`wAA`a=QVdm?sp5G@VkR!Fp#Gj)ZHSJ)Rn$jO?yVv5q?Z?Uc_`sLE%Q%f(KFo`1J%%Caj5e zWE7`o-cjq0-Z8VoQlEZP5=C+TL1l#1*Xjoc9D)Wd*~OkiCEL=6G|RJWOQkTi6y8&t zH<#EHq`>mFlC zgCr;-Gpc1FRA^y3Dn|KK$@Z8y_uX}HI40;+Zdr)kIMI`*O$$HWysD##!>_({31TDz z(sh*Pf4tnX&RVYw@9*;zY6n)ivIPoxww6+6Vf4OVmVhB*e?X>|qg23Sye1uCvxq+M z{=Q%5+()Q-A_95I07XdKGqSP(-sEs8&?sB2(z(r_{oOv{sxu4TH$m2vM_8QS!c}E$ z*>La)VG%KB&Rv_E4yzUZ;{sTl=pGOY!7g1gGc^@sn#*QgtH<-eQ*v|96INlAS>(r- z4J<4Xf0F{^IrN}Z_8ekG@N{6|b*Y^9;tw!php5V+(3x_7tlTo)DRhr~lw*Kvg8CPY z)e8qT$aaF(@#pn>e)+r43!|Q%!Wy)Yhbx*d;%GYKqnn z-wvosahW@kh6KB(`QarGm6Byb7l?VQ-W)Kwzb_eH|50e$ICmELw*DCdN)vHQH~MO9g>hekhTTbp3;O_>Ho8Bal66P-~0}coadjVVjocl=Ci>V)at`hq{ z@XQ^642>!cZonqS0)4&xVKqVanv9VWB(WrTQVrOm$xk~fbx^f2B30NDyu3X7ELB)K zeZLq5K-E&p9pdWdmPCojnW%j}##d~y{2Kz>|A5+8!=_>UPIc)>g`9!ISOONHwxqY` zyNbahzFZitnq1ET6m}AfafMMdz$KEqHBiR@up`nZfDnpX#DVs}@s|zsY?$~+!_(J$ zVdr7;fm{MEtuy~zY!#&U1q$oBc0#iZrExKs6xz-n{7OQVyltzB?j{I8&^?9!SuesO z<@0#kR+Q}{MvZdftWIU82RCUk6@k+xsnoE4Bj7xC6uv@-CtN|{VvU+H<2<;RqwI9~ z1J9}ufI;dnft&FNcMiO!8DDBpx;kx^R_R<_A{@!TeOm$8$I`zb-lSoo{Q!0)QJneN z-fQ*K4iVhcHmt8rX3dt^=2%&2xb<5TM(?~fl340}2mf%A?ho2H-sB0YX%v9Mu#B<9 z3Amjew1H#gwEpy@9UVrL1CsKl>`RX{5iaiM-1QKKp5i2B;q`)-v4}q$s=hW=(KuER z%!LmV;5`Kh?5V`+=2fGy9vt?!eh@aq4R`?7)4F=Pk8%v|cmN$I)7=x;An|5klAOV{ zbgW#(HY+eM$|kiGj(k_oD_2&+&I#6!yh5Z5o?@97aq`lof!x<1;w3LYm~Q|KdAhUL zIy-#LS zd_mZ~qLvaH-i2u!sp&Agv!4Ca!N1OXnuRbf!Qh$bT}v$i5A~e;DAhO{Mx;P0<0ecP zIePRpm9!2#<2$%r^6H<`f`flXLsTBnD(@)ukRXg*4wJdRh%Y6N^q@h@$ya}$+oyx( zFpa52#CVEwpAy>7cI2>@cq)U-K0ej8wSwReS9l@8Qn)z>c=I0QD0?=6-LZJjxNKHH zSA2+HdQTTSWkhP@5_-DpDni%6IZ0B0i(EoIC3mR@NDrJ@L&MnNBZH90bcZ}%8zb7C zRO39tWCo)c=*`9bcxzB-@hJXU4GV6BtD$%*bkvLz0j)-hjQh6|x+3-_sX7JMdzv_E z?qvB8k0TS*A4=aE%6AvA(T2x~j^-9p;o<0D5(JKG^LscPSQGsi(Xj(esu z;O2dsQNs}M+=X@&TedTvp5kjVaXK5&AU0&O=ICvdStnLf2nIQZ3S#(XVG$DWme&=) zG_Dij08sL!u*ZpwrIkDi&mQdC?Sv(@sN3z7)w5 znKvc(@=G&LGOxp1URX&2HL9gFMIIOsSXxxHfa{Ig<>{+eH{Nwk`jgqhSMcz>Q98&6 znO_XWK9tFoOf&#WK(NNonlnfLnb_$U6(9c<69gn$C%D2HaOJwb-M!I_ZkEyM_*LP; z^cl-QCwwS{$Sx?b%dk*C&XF*KA;<{k(c7KP=)=d!-7plz&(lPH!iVV)J6Js3hpBps zW)=G@LAhao@spt%DuE!gF2maMJ2#L%?=dC97F>GUwkn%#2SL*qPYWU3#Tb+B+{RPf zEwJO#w=rXQlS_iM$H}R8UIdsVHWcGOjytVbYE7oqH$NuYb!J6isUZ1tpqYN+T#2g{ z`ki>NXU`r{9-xU7>;w4e!I@F2qgHVrsT3E({R3HtKZ_&uW9X|JTQ*D|{rPi_vr=m~ zqapD=pp`STwgJQii5@O_QrG5&L7Z4Y$tR0}<3-Jzk&~0m{x9s2f+Q6pebQ>1UCJw%W76E@n@JsFgRHr~^xx(l5 zxOj0*(OwRf1s<+~Eg=k(xp#;&L@|Wxw3d=L8E)P(b@daNgCn_A0qpMFt(&frhtxs9 z9a)-bM`!2Wg9g1MMSHr78nE-Q&^z2mu`afj-xAGuZ@?wRzkwRfIHp%$fs^4y=$9=m zwuH%R4-J$BZEjR@HTYczjp*`7I9yT*atL5{j$O6(0n!=zrehov=x6Hmay&O~^-+pA z(A$8eiUfR5b*S6aI70Zv4rh^2g_`}Ij}j>@QyID z-wRyGOtFY}r2X=?t5Bbab4DbGSb3Qy24?3=-spzvf_X)0KZkin`8LFyOKnkV{^EiAgs{N$D+iV>j5lqHQ*F|k_hXC^S=wTv59L*?N@25|xDtS^nORwQuj&M??!z3^ zmHj(HwE)(fo|7Y#PDG_~aw`;ce;ts#S|vZRJa=~+fVh}-kJ{34CvmJ-C)&?uKq&U5 zbVp?Wxmg3sB7kuBrb0`#LqOC>ox?s(M9+63({tD?ywJaW(HX*A)oE3o!Q@ zw($j-xwbA0`TViMxWwzXLmRu<@nPz(T}M_eYY^^T1e?vAOi1D03?XW>H0DKF7tEk* zdBa}4zs1P}ov>93*H-$dF=rBg1!5n;o)7EzzamUe$uutTb>Skr*Dcp{v-fLX{LloG zibY#^>W&3C;F+;C^JUk!zbhK4{Hp8fo__dng~sDkS=n>am$(Y-|JfZ>8d;GOmO?;C z!;(;lI!NR6u_|S&J=Hcg{?YHJS3UQRO>tMWIHFhN%)zUGErvDpH>RT))> z@0I+2RJ{p2m+QCwuUVQj(X5d|Da{g*=1J{H6Co;so8+xiI600hsuB#qdGOvth%AVdp=G zXIwBUbU1mQXfR^J+jvNIhMI1n^AaSqp&-#2t^Rh-#~p71dXnjw@aeU-QM*3@)|9H^ zXL;^G=vYpYL4-wL`rfz}p-=kC-nJA;mfOwcShhMWfL;=*XO-Wwlvv#%eA@V(#g=J0 zwTlW1R~VNRGfbE6(@Ojd;|yb6gMzj?e~(fHFb)v~6~&N1aD?&efr05_G6B;qURAw$ z?lWEXTuqAo**f0?G(8ZMCKB=SP(0z-G_Z<~Mb0DG+m#pSq-?jhxrim zR+>YbcC3vSi;&3lur7YP)vE>w976qv$|*|fCdi$?c*c#sQf2coZ&r|^a40IEc`{P5 z3;jtDCCq}EdhUe&mcW|n%k~F63H`BzrI!i0xq}Ie{B)uY6XWYB36Fg_K=n{nSxHON zd8U^$n9c!GlT1RZxt_)O<~e$Cq4g8rX9U^#tG)GYQhL)+bM3jf3%Hi3!jrHTp|zly zJmD0q4&UfzQuYsszrGB-s7-EQCfXwsCPiQk{I0*Lo}ymqI=%HfA9e=`6C@{~U65K} zh)lO{4+il5Nm>#Np&kYsDJB*}+Jt;C+M(xP7If?vA?j%N!3%YDrN#cSPoE4+=kG|S zPaO!Fl%0JZaf-#@H+PSW(EpTo>sxhKsg^_WVt!oLA?p2l_wG%i-@>q)S7DoTq9*`x z#RPUXf)sxKoXq_!Wy%@l;HH;;b4Yb!d6xfm{RLU2)AaQW=j~rnS9e3LwjgT(pp!yS z3>ZfM64&Xxk)0cJM}>DlLBRzg^%d;4|8*(xSw?Hm9(B*lseY}nWicr+0USy>UJN_2 zk^WO6v-WaGkwL7PgLT-67mXr5lOJnKPITC-mrv+Rt08&cg8*boqB~I(R3VZvOopE} zbpaCABk~a`S~$76_iIZH?2l0|0cyoN9Q$$ALZ)srUpAi_7a8qL=ic)9-@Yw`7dS@| zY;y#X)y>s)1Idq>-j|^@h~H1RT_6LOS5*_V(YhLqm5jCMZ<%pRj_9nH_*j@SB)#hdKB-!+Q38+TRK0 z!{79w7hP_2Zyo$qk+%%+!N-UH6O9Cj5sY+;eAUxgx=K#-5`0>NgoZQGsQ z$*sceBA^-Nh*<50qVSaJFBwrdhCvm1L%LMweb~2m@3>n(wL5ck_-O*=Y`@YdNdxsJam*l1#1g(A&qn=6@!y$!9(f99*DL2oZP;k=iP2wVp3gi z4v%1>lSxnS8GFy3km3)K3;j)?@M-d66rmgmd3nf>F16AF2WF5B1scaC+Qhbsb1|8I zT!=+Q?kW%S^B)}%#Io3{L=T0(sV8m}7Nd{i^q6ejn!$6mwz9fLI}4XldpnTQntc&q zRUO_oR;o?n^_vv*^!)^{SoQN~GG!S3aTDo24L=5a~}$e50f($GaARZ%4QW?m)ReS@=PkQDH^Ya~!9GUHZHDj!k zwEYd1WN^?@MC^JJ&6%)h=Nc^vBd~N&q%qkPD!X%u` zUPe+OdK5sffbP>3YPYGK;sbG8;&ea}ScZ@X8zHt@Lq!zu;c2H~^o?F*s+TC6lFMF! zTonChOD^vVeyIVB_J*rtEGd*&%KP^*ua;Iy7cLQ~SkPLqK*9>mRSY*tIkqrPay21{ zHiPN3{Ifj8v4=*z18_z(Wm9BV&0QaBb6PaVW7lSIoLGuOL!X7-jVFu(XIV7)^tRUz zr61g9(I~*2M?4yome9-{c+uomz`-z`>C6x`7jawN<`gxmDZMbXUyB3*-d&h>a4esY zNh;O^XUfGyszQcQn=zny(w0{`r8e5GJJ|=RgWH#P$(iUI4W;Vd6w#S!Zn!ts08$dc*1rqLw}bkzr#q z4dn!WOxPL;o8-<%1bI098sN9m;MyJk1g;e0FiJ}1@uL6$`RSanau@MZ7|+rtO-6g= z0q!?A*^4^>v%|-}Ns?g11E)5DJhdh3w&$w}Mj5~i!Qb?f7Q#K;jFG8@u8;;opmQ%0+MDebJ)mEmmEVhpxj|oDCHX;_e z&?2^oRBOF^_ePQiU-R$6;}dOveeVw;3T}`luaL?EjN&!u72#(jRJgO%V2#HTXnFsc zw)LkNj7aBW=WgAK8K<1j@f2%`@Yi5@$ujXhN%9G2(v}D$6fB~|BLa3;kF0WMMIHWIA=0m{da~2bFb4 zIb9eL{jap&P8v=U*o{JD6%&&2a|@j)C1uXo=Yg#uBow@tqP>H{MHfa_JJy<^!U8Qr zwLtiKB40*`{!6qP%=VoaZ$>#I7+FCi-Hs977LFknc36-x*^zpReF^oZaD99N>LS;j z+l>NT04`|Ag0vJrqG-N?&V;Q~LL=NMA_s90tz*urRp)_ds&-BF3umN?kj0aNGda%g zSExL($VK(UO4rr`03mtIgRTK)Uu5!gt-il|OGLE&IK{W%^XYrP_X9&0a6MTp!RO-> z3k-o(cX6q!w(G*LFj8WH8_$FW4-qFg4Lsb5G&AgPS)H;zW~VcM^DZ(5-2{*LKC2mp zjuBrEnkV!JpPAosA@ZKRc<~q>Z2rzouq=8eOHWJpWoQW6`g6jANErMfl9&s3J}@iH z_u4haHcOBeJG1GKl)`hK01CoA(vNx6$~sC;0YAkeXR_wBJ>UB9vc%%H%@!73S^LD2 z9?q`5+D)S6)XyL_VD1?((QAk`v2O?naFhFFS47!!hdIuWU*Pd$^cR5!_0;}^PTrHD>d-zMYJ4(_{*ajK|b-OQn{UbV7Gl5*@iMCfjr0GDqeTs z#}S_bFz4Rm8nf2kgHAg-t#2~qXkprc?c}$7KD2NKzztiox&S)u2&PMBnHsEKE$}0j z!aKWH0>bUDF@X}E5%fQu!6l>wI^tg-$5T(kC#5ovkC&}9SnrQivEu&^{GMbmG15oO zm?m&}Q*DA2Z$h$??+ZPIbi!{J5mtq93r3&@{pUr*)>Sa;TWHBGU^UGb%t+Un3ME)i z)JUXcK(|f|6!I93k1>~;iC}E$NJR>Uiq`QT>sK33@Va*WdQFtf{uSZPPe#HIkO9!z zlChCYU@-8i zccB4E5EY%!-AGzzx2g<#^M;~_GI#js(XPBt*jNsV>%~2R|KkN1N^TOGJ=*N(!Bxv< z@ONQ4*I-Uni7=2*1)om;l9d2|O*$Yv8`Q;A=I8+2A6bBU8EYuBh(W_g_dUyXNNoC;Y zHyqu-?fCJLFxA{sG0%c}@V_!(f}&Vl{-a059_s%R3C5NW>o#f9)`apSdJ^#)KY`X0b{KB%T>ljl z2rvMgOoCj?E5}8xL5Fs$@{z?elVl$H{ zV#w|M_fFXE2#j}`P||j<_DUh54yS~p)C1)w5g|&MSB=I&P~<4DE3SCfw1y*%aRvqK z2&in#;CVdWXmUQTK3YXr1$7wg9H7WG7QPZ*mnrX7%*XnXHcWEZn~%ax5pOq>Pie}h z_>1|`N56lF5Ec!J{FMUpGkrl6`wi^SiDA|a^@RyqEnCiXP8`u5i><1#tSo~x#>O5N zT>6My!It=lhQ*sUZmeX+y_g@zpxkr>;v~2~p{-UB;1U0|vZ;F-8)|GwWCtYoF3&H*{N*F|`O8=Io4geqB}zKxh!g#{FmjZiz?8`%tWsPVRHdxl zv>GLHkcRCAC|8UUhnci0G9FpQLUUg}Bp4lur+L~!n*%Q~O^=}*j+|9f7PE2g0oE(Q z(S8>XQn(XE&GwkVCXF6DHieZjTsRt`1zG2LVhr%l5zbPqtz>wLDC`6yQ1g5SrT4tj z&3+eYd|?BbAM6+)g-hHfh*wKAJR2N z4P{`KY6EKO)xZC0ea)$8js%ET5Tjjb&>TO077fE}JP1rtagvrgfU6c0!Keun!nQ2} ze$vB2K;9r4mp%Iu5WarH4*65?FMAquAWKLI&#nI-Jg5L$x@H^UV#WoNxp% zkwKE+=fUF3g~iTPYFLXqA&k*(|K$_>B^(8~4AQV!?;e86XQ9HY<<8O;0KH9Sa~6^$ zg_#Vj0{EsS{uzXDKME1t?p!+)?gP_E1p_1}w~PdV>_ZGdx`0AWWflgNxo81CYvU}f zcNJBEG4#OW@UdgYxM9l>y^}D0#s2O06i|hqUgIU~Q1g!WdjKr%}fn)XBD+Sy(3^h0Gya z>`QC72=#Q10G-DOhK5!RmZqJA|B5^OCO(vEobVbB#9|bAgV@;FLrDQPlm~X+V+>Kj zpHL+DZX9`d4`}G=+cHsBJ9fVaw7fPBA`1Te#fx=j&u+)#6EJ+|&f9Oh6f!#c6>bS$ zJj(Jdh$87ikG13m(MnD~wZ7Uh>8!Uj3o^|mUyMF|^X8m*%%xR2+OAKQ_^$|~KMxT& zk>KY&-dH;(N)w6#6#5K!VZC#wV)ifR16b$2FyDcp09Sw?{~1f+^wd}`yWjW2C7%wery7wbU%7@C*DZbZ9GRH70a*aEf=SMVOk$gF*=_gx(5!NVsg1)48!;!^(1Nd_+bTUTu)h3S+pUn_u*iId{ z&|VYjdJgnGJeUG#iEkwoLk9n>)n6-4ro}3sWs<&jViqb1^l(;Lxl1yC5m?q?D zZAss^Ls->^F9wytk9;WV95Hzy__#$m!&l7ter%){s56|SKw-LZdt|Eu41{pFkg`}1 z@d$s&1;Y6sfO%2(AHo&ZrmJLs;jW=IM%butH|;Cu5W#Qs#2I2@GMtDbhJzqtp@$ti zeE89hDg8exI7t^*2vfqLN|m)(mAC_92_4yoRP;4FR1R04>b^hqNukRB)+bnhk8uYC z^^8+_f9kAYpjWW+&XxpbAp&%2L;22>btKtb&d( zu|hP_O?iKh%gqpv4L}ESF*uV7Q*rP=t`_XjxxOvz9dH^}bPJj(EVtN1#iUqh-y6H1 zO08P40zyw#@^483Uxx_hPH9IX63ciQ(Bj=y(Mg*^g|^jE!~wn+s(|c{ZsCe_>5VhXttMP8RmVrW;I86@t%5A6TndPzb$tbjK(FZ{ABm?(=>pi;aETNoEnPtDNz zK6iKZ>DT;G>>7;a^P`}}e`&ILv%!=FzJGv8U+tCJSSm*E3UtILzzkrG@6I$X6YwN7 z;f?Qks3l^6is;`I1ks*7V?}I+I8I~LC}lHDvRD=`E-J+4is;!*A<*sOEXW$!YLS%0 z_D%ji``@h!3JMb$VT92Am|{q5pzc$uNth7pu|;W#gQ6G?Ex594RyuwOhCGj1D?J{} ziR3C=^4NdqyJ3FI6YU7?0AJXOUg!%19XAh;Vh9tKU-$(FdyvV*ksmNA;K@^;h6myY zq+o~CHu1dNPKZU>a0bFZgB4)myqj*R zv)^lmS{)`B3K@eTo}~%3M*~qfN5H#o-qixBv&JeN72&2gUktI(ovdi=4$rgcRWIBdF$?@UBp8nA}%o>^g#OAZ z^q4)P=ENu|Dl)n10*ucthW^1*iW3a&DVEoWV)GAIl|%IsZvJclhEw;OH{}H@L+ZXo zvWB7R`;~Jk&)b-GG7e=h9(Y%MIlP5feCsM*T8&`HujP9ky#$~B?Y#Sc;a6l5dLo9aC zAL>WUHtQYf(zU-f8OQU)?RWpa8258#X%Mhpt+bGT0>OQNe+7=T$B{&d3`>i+!s>ONnnQZz0*qd zkxJ&3uWgniz|-wkW*+(!l-e9GDd0e@|6=oLA>WbA?m7nI$@<04UJ!y_UrFg6ewA|KC9O zdQF)`(v7_61p!}jltdp!$Pf1?Klm&xrx3F(Ny83YaQZxxS#0-*tzH&zn&?hmn2nUl z!6?25H1%=sC*}zW=&JItUi=hvyzA3tt2n-@RfWz9%pWf>TnS2>i`6H6`4zK`8>Qh! z|E8%?N=jWQ^Eh4h_r?d1iT{Ax5b46!{h%vxw5Lpo-1Y!(fOsMtB2k@LTC$?B8|`!p z(}K_OGtYzZ5RMW6JMB*h2_Zlj5Jou6l>c?fVfA(Wj?yL~*dgHwBQK1fJXwebegoi5 zAoLu7@VhVtpseea|Hwq!fcy|sn&AO6A`baJ5wx8k=)I)a-2k8tz#dw{x)d-6#(6A?7cQ^o?s({Aj>((s>6FqqtPniIF@z|hS)d#^3b?y3@ z8Qi4#qm&>x+>Tzqe*N+h$q0WWPj~kutR3+Ev{NzjMINK1sIJI|0Kw7Ocl;I#&zXo& z@N{&KVXHn787b!8r4Wi~`Uu?KXpfF^&f{>i|2Q2I^53~Wtv5rCb8cW|R4bNBF26~T z0HTFoROR7`Y$?`^L8Alih!|K4(Tk6rKD|7`@LvN|ccWFXv+yiJ(&X9s^G;cZeVNjz z2)9i{bh42?AC?~wjZ{ds4C6h=X9N7SC;s_IqFafC^6I~iL8@#&m^wkCQoj>g;YmN8 zLOh^G@gVg=fIy;75hg~|vjyubHA}fNB4=`Atzn}mOfz`p-b_MAXw_G{8ldynE|u_? zc&ouA1`WatM0t>sYWLE84C&#rCIF}ynl+RoKm}W#7vDqlX^IH{5!6qBzsaE$hWdh^ z+LFtyDYMXI<)LhF8IcPz>{=-n^7D4>vddl768>-{$EMFxcu2lDVhgm7=PN$t39bRK zakx-OVD~6t229!J3JN7)q%n({<(7(J4lcTK1X7?p{snFL8<=15)L^&^zkYQ^?}sP2 z^EO44KPjT>l9bHn!7@1W6=nrE7`&HB&!2avw)d_d{VAHaA`Txc0+@}Xwc`5RZhVzB z@+Zauy@&JT{!iZA$E-(%VZ+3*bvgu>Far)!%#YB?dhRRO^*pyDCjZd}AEWY-B2^!cdt!p{Euc9xyC<;CXgB=-+6F-!4I; zrZ1VotmJ)s(`|J4x}{3G^nYUIiH~`H+}*v1LN6h{)A#1z)2cHn07=R`pWDJ}LCfzF z{vyJMS;-~7p35bgi3GO1bZ{gIioWH!rC%+I$&XkSdV+uOBuH>l#~$?BY-Tp9?pN|a zrgH!D>pLUl?*V)IQF1ZF0Qhu+2&_8&`?BA~ADXi3VmV^O5iwzx-tN|EC(rC!kA4zb zk>31Uy_9bsu<~|z*)1c@PT3R}b`g$%on64ayqu|VycB-6*aNjv4*0sfYBSq)@|-&m9yV{X%!Z8L$3c8veWU$LNl3_pkG- z(x|eo6P@>dIK1W3?hPN7qK26p96j}_>-$x%Mej}&A37Vc$Z+GLNSTk}cJ`n5Ee+i` z-Pn4#icfaUFmoufu`4*&Ao^0 z|9skNpYu@3He6Vnuf8r;IFfBk7a1ikv#ai1T_oM!I=8B^*@peyRj(GQ7^6L41<&*| zYQQr8%rSd+Ks$QdW+k85$P6k-x*;O^ zf@TD_45nw?zPgJs*VO%+&%YmkjQ3tV{?aq`y>si=1ZA06T6UM9r>axnN~th|L8k@= zuT&f+gO1$+^tE-np`tV%vnj z7%6~?d7b^y!Ya3|;<;Dl?8+>_;umoHc4BsX%O2a78lPL!=9s*n$Y5f+COXh&c=qh_ z_3NLdWdT=)LNMp7ALXi)I4Se}?^&i-e#?%!K1rPQTef3yv}C)`^afR3?%8Ofzz~jAxrpC)7I{Yb0%&V z!6-8)H4%$rw4A%iNY^0ah&7@f7mXU~pL}Cu2kpzT?o=LE_o=UU{4!}?KEGBa7FCJ9 zTpLsmF@2hOry<4nC$Ktz{H)Y|KkO?JpBmyBHzBH#D0US zx2~b#31nnhQ~)`o$)wyAvyA%sX}=pAOB#Z3;O6gr&}Lo8>EXx6$fkM+Wmz0kQIIrw zZ|$#U2s|HFd(Syc{anqgKOds!kl{^s@tQeThDsKO8#iIPawS~mDTzoUI9Rph)!0omrT_fci!be&>|U+ zxkq5Q#V}7{Dj=Gk^7eKkr<!O$;DKiT(P2$+DtO_1aqX%B+||uHcBGL(U*zNnGts}1k%v z^0jN-FJ2rVq<3oGg7RO-OwG+Z@>L@1({CgGCNNoat|b`tnx9`=@z(?fYLN^0YlfXo zPt4u!D5=E3{rdg8&ZbQY_Mf66B8)98q{y11m6VE1S8d-umgc1R;b$Wm>*a=;+;2^= z%(9uaeIC{Z?-+)Xn3FqPzm565{?zziD=KDsZ~ZneRTf@+(3sinm(dfhmQSulg=7Mdko_-EzH_7Q8kF+gi;%c!SR z-9SZZQs?q=OQ4Z23o<~d5)Lf!qKu?K>tkkS#>E}2tn9=t$^4y;1|4nU45{t3g0lSL zi*~&1bRCkTZlP2Y#^=TUE_ELE`>ilL)%ef$OPIUcSlQ0Ph zFte|I5Wgt++mMIOCI`Hmrls6%-8k80JHHXA>#TX&scC6#)-A19R#KY1fB*D17Lyrx zN;v7}rqk=or{2DmHtOQFEL+xt`|>h7J1t87Y-b7fgSBC(J{pi<80ep34+JwaPGuCc z@`h4x;|0ymTGET$(Bs83Ai_2VSlN1Cyx7+2y~dN&z6FtY?rhUbmVtZCzopqcriG3q zZDpCFtwxOlhS*kW;c04rxum9{@?&0$jAs3#9^=*3k1JfYX`9zvz7J_Jess2impq?Y zjH|5VJBS53bMR$YKKL;uXMf3+XrNUnWT|V9q{_&YR7vH@4BtVZ z4x7)X=ZS(XhY`OvxW8x!?&~ESF@-d^B_ZCsZMwR@V_tpg)W;_ylNk$~MExnO@tY?N z0H<~45ZcAdL0%A?wYfD|P>%rHsU*Y*ubfCI5PRdzt6ltSAL>QAXawJp9C*}@z9O}CDSeC^cL&G5m zR*oE6t9>p*U8TS0#mhnCjfeEEB-!=?s&(CWUeeLPtiIXqPpS{Kt5p(T1vPK@rY!T> zvjU{fG`ZILc_N3_|GcFc7m%%>FT;hMM$3&@>j*z4t{*Ry@R2~}dzZnj;Q4T+-g3v- zwft{Xl-Q*=4R;~`@hD^YDE6!mT_n@{!ExlQUw?+boljao{tNvS<0|C-FYc%T#jy~GpkiOCJ z{kAV*m%i`eEM8u!py|`MOmf_tM}}uN&$OOwt06}M!MoL#5c>A5K5uBqqKnu^Xz;xj z9^Px~+dGFB`U@SQeuHB@t0|9Pi;9xX&CM0zkRq3&r{lf%T_sqx_PK5y?-EEo-~DWK z2m!KCL9?N=;r`;jkBfJz|9WRC0L$pTrww}Eom>XfZ&jW%UF3I81FtmT&K=?W7fVp@OMD^Q(=PayzcDZ3xx7YUU zx8J`H%=cgMX@1$Ip{`|a8O4rHP74dyVAR#_KY#PZ9 zSCPMsh2v039_gsLPI(n|E)ROQ*J@u_*ZA`NdkCGSLgNw;;i>sV9ARi>cQK8MOMo3+ z0=FCYs7T<%1^swRCjza(QhKcw;jxlPe z}NfJH;9H zIPyq>UssmO-pxGb+3tLY$rO2CCi|~o7xKdN0ZPZQ)jYK8`@CJmnz22)FNPv+a~NM^ zn>LP8&TXMlja&M(538Cg4p{& zdU!eLhni{BN7M{>sS^&t`a#7-)(98N?n+t`swc_!P99FvSEuVQU1f zjXS^V;1;^U#n@c)h0;pLOG~%(^O(!6wNx^I zD|h>rXm^HMsEPe0Kk&h<7_JtPIgYo{hp*(c06FnzO3J819Pxic~6 zprfSRfw&=@-8R9uZgm1Zs(Y;&*~=I&!vB-ntE+b^hDSdpwTVWM9`^O^%I}wjh&(J= zcyVV_Jsm7z?LbE+VbgMQhe?{WxudUi^}x3=e~?Gfi5ZpdMoo@ym$lbgw+bG!l3wn@ zeesQhMd_Mzpe)$ku9w(9=lr2v$IoiV47%&8h^m1)Be<5@)CzB^i6zwTDMtZ`@ntWXMR z>&2%}-F-4$IA>QkJ^Ob!N24d`xqMu2C5fny9w3#FgB-;_$bH>7+E4vJCy2$VBDq0B znyspTYZ1{g`N!sn4-Wl?7+dZpH+7CTr)m|~Q;=cLYN{fmqLNB? zw~fB6)c;B5S|s|tQYKjwLHL=O8NXKF(Sauxz;pHL^h0rsPG-KaarsQGb>TwkvGF3IqK;8l9rytZ z_@f-({ayQ)daawm`+~9WbM54lU)!e))Lb^Q*R$7Wjn~GkTRMG6d+Whg4{~dMZgg53 zImO-8Rd~xNY`ADKkx^@cZ`Ssw`VG55q!9jhp+h5=NYW07;LDbdteSdgn9a zK1lyAV#HE6kGbu5H~erpJ2S>c7kjO>0_U!{+Vf8x%>g=0puun6orXt6!-GF2Usx>9 zWHmugyraR~@?nEH6Bt|`Tyi45xxj`OkmrT(8KfY6ibM}P z6bo+tT3$Yv*MS`6^j|^wj>!qZ3(ilV9v0VHfIiAj)6JW47jzb&`Yvt_ShFrT<_pTd z+&1PtOu5vpM{L4D_5@2MZ;8UMC)H>3%3V~*rilvHFqe(aD|bok?sFKLu1^se*> zGw4cv27}_J)0Te-GdNECcGVgFo7#Ht@;AdL9BYt|ei4hvvJ0O6g} zu`8eSLNSH%oC5F4l`AhcPr{>`06xTNDHiaePnZEtqR%> z7&uUb?eiJV6ogmL8LnRKcI=oG-}sENndgL=GoN*_iv;%r%YuW0fg3=KDi9^$OSy@SI`1AlJ>W=O+T2Zm^=qCRa>2-mp zhKHSlhKk*wyyyS~|K~Z{hcixiBK2SWX`rv4TDRcmhW%7dPt%mASnk=kZ+1}DxM`N1 zuWXu>C+{@?Qmdv{RHsgzUgqVUr2aM3aT{fMFUjw@oPa>v!wDkygM!D~ z4RAF0z+~pi8*PoHRl0mP+jSq=LDcxR^Vhcjm`OohqcA)qRXasbK=6P5N$Q~Jy==lC z22DO>0?JlSTIkEo*IsV6!dpui6HC!3Bp!j#1-=rDhegCisS4%gH*eh%2pk=^Su*jE z*EK@vvywu=mOfvptDA5(S!a09W}nV&&o@sdL6B;=8vKLWmG0aQ{*~InFjO|dY@lq- z1SQWW`y26O7`IH)ndW`vN^zcCf%-u^wL|sr#ld1Dk3)s^Tc)^x~Zw3K^N1CBMdoo32kSt1V=4 zXUeY3nJ#EtM8G1Zex#CNzjVIQy+;pI4D#=2N(OM1GqB9IWJaErwRM%>Iv;~I$4{In zgpYj3QkNF!;~tz#a!i8k!^#eVtn;;5Re1k3i31f7voh)#F` z+r(0B7CCZWT>RydBT~%oJyWuH{L6cmE}k`nrlIFEN+JjV$K2(;CO>uYe_cxaO?IEq zqgyxM(9j;h7Ku~PSGq&b_f5wrkJyn_xo*> zjn+iRpw%J^@*|%9R!((rz!=2AyfN1`N<~Y8*o-V^(Rvu7BxDxA|cO+P&JUlqC z?}@acg5Q%UX*X}*K4;OQF59LI#3?GuJbKAYuq=y^$~2wPtrY_%OrGp4P>jES2a0g; z_R+c552qDr5rY+#l*l9dEhEa?_F0RwU!0~ z^&veRGVDHqNwzGi@fmyw^siyvYrrl9|kbhVQ(~~pjHbf;KGXtO|SiX4m%8{b{-H*LkCA0%q z5`5cI(UJXZe=M}#mYij!cBPHlaVVK}kcxX{z-HjC!maPVeX{`hI==~q1em*HhYIq& zm|7BX!NtX;jf6>9KMLj1Dk}5VuOIyF+qY}_LFsSzcz9pF-1UWL|9<@>UtF+OyCUJh z47!KiH+7h}y5|z#hl_=gNVBJw@_Kl%Y)^J+jvwF=Yjq=iV6EO(mtRS3|lU z4Avd}_}3h&+dGnjx_83t><)u2hUSPo&L0+ga0vsHIn^}9jA^y;HkmXa=42ckDLalS z3ur8KSS+7}E@({`!F7ndZ&P~y<-(KaC0Ep4=PMank%*ivXuWz{jXUcf$S@#Y3-%il zq$?a;c}R#N8npQDf@GjUKpWDIoGEHIfeu8%U#X}U{UGMs%d*-(oD3|pNY5k2}F*)u=r+& zDAGAw0pe9OG=}tYYi|-}^C)<+{A`p!hm43F-trS_?s+f1>7dq~RBxmSoXXDa<)%aI zFQ|>8Mefwuvq@!E#h*V9m6!i=zx4+Mm94;3uzC>ZhN12vn%m}Wo|I@3R(VlH0#6qF z;sD)E3zTI#4eITt^ZB|cviW0LI`ykl+H#o(6Ej7f4B~}hX#?#;b&q%s9W2Ay5~pI$ zoDR_7x=^`Hz3;qIsl9uOBZ&^}PUu#D^Shw3VWF@~QHcJBK+m3KT2x|gt===(8R%5X z=EoJeKw@Ga2zJ_XJ-w8QTyD#_@5}twWSl2e|E#OK4$b?QP(sns;;=#*;08NFI;MgB z+U?s?qBaLS@GyFphp249TgHiHN$@AL{fA66NB|TdwCHF zGxyz{POfEmL`^T#)jRJ~3mPcj9NOLF<%KI(oU<&7wMH(E)g66dsPejDr{}l58i)=c z9^crpb9i?BG}B)RqU@x4wWMGMRSuOd5=!CX4rAQ8w8 z=J#L%yyB-q>VJ+Kb2fdb=fXhU>0w`O)UP^3R5NQWcEhHEi6aSSH*{AKD`x5LLWbxZ z*GsA6`HYly2jt&0{4l|@a414^n2#x zT8!^PlB96d#ic>*d~O%DD<>MiT`=lizqPt|@Ah8l8_^s2HEG#!nGR7OpLNj=b6hUt z-ogBy_s32AF%_8(>xP7)<{&dNc{Hu0hPf-4GrDi4IUa+VWRb#1SN}``pTqWZ!MBc7 z%s!i*oV}R0psca%%>0qUXhfNU(G2}Xmrl^wSoMWx;-rAyrnQd74Vs?*$m-FP}3MV!sfeX~YejavJPVp7Pxe`x3^`^Krix}MO#3SI zbr~YHZxvA{WX#E#zxv4*jFdFl&ts^(QeoRkv$Y{J40==mik&g)U|>lT&-|K(KhFqF zQ;cf=R#qlk`y0x!{!)CyK+G<^5G7KW@51jUe=|iAhvJ!sY)ARoZucSxkr@3YP|XA$ z=93D4)ZTAqN0SQjBa4xlgisJ1+zkglbs|Qnq5~_GQ~#w12O1WX|GsTbo+N|`dJc1| zh*G(^-GcSIP&Z=Lq`rVz)e6?1?Z2Wb$AR$hYX0hiyE#f;6?w#jh&?D@;CtvPF_Arf z#DAI`Cc>0xWrtkLw1fl+JTEpUx*yD?JgBO&wzH(Y4@OI+<&nwK)z=4YZX5l5#Ot!! zoXn4Td2;y!Cki;ut>AAiFEX3(>}e((>*INIow_~9eZK3(`})VWao=Z*9W;W~iET|} z_)a1=uUOF*jqUzw2tZg~@sz9X`80QZ{rdGEZpdSYZM#2`$OzXmNBy8Ve`|NR)$~0z zWMGM*GiD4VTCKBR9Jo@O+QV0u-0Yt1{PVjvL6TI3`0JyTeZrC(v7Qa3Y&b+)P69UVz(Dwz=SsU zRb|{qT^p~UbbQPkPvbci21|D%$7~tgOG)acti1AoEfH(l?KbP$arUfn>p*G_A;+nE zfQ28f5t45l5@%F#LswsVG_!YzOy?jFds2XFa5vP!#BQYfnvqGbg&?%O&fKu~C1-K|;<2&2Ik@ z2g*B8PK1CYT8**IMbp5@Pqdt^nvmezKK$zz8cHpcl$+a^0q_0(Q*UVs6B|_S8Yl~> zKnBx=vAAS;zcUwgM3&;(LNvYt=5`4thEf=sW&Dg8?!+1#p51Alng;w0D%oXm$2S<_rpJGY~;?!0PG8;z}R@vagMUr`H+H>~yu`*patoBBnz+@9< z3#bk~J>RA&(u$=TR!eMCI4wCY+b0d!-~4jJvm$1VtzD5{|36*;iLtBmcPg7vEM+&! z{Ep;$mP~&2k@J*<2?mAT=HAC2Z5}q{A3Vqmm}_qr;Sry8S?WRNdz<8M^648@pFA4* z7kN1A)H^G!0eQ?syyNDnPjKGua`dQ8SPAAicBTWbe6jIWWNcK0JbhhgOqOUF)h>ElzOhLOU)0nx7O7#S z;;5>Y@e?5s+|Sq5*80ZB`$RE2$)WYSw(l(TbCu_;8$OJ<1NU*X;U8tq{{txslNfl@ z4ubnsPWlHDHTikp+c^O6KNb3{;it)T9r`7um`o4|4PRI06TM^9EptqtnNQqzd%z!> zW$y;A@e7x z*f%V~AT>eo3wJs4`-fgkF)4VYc;}kxj45hrPuycBP&b@HqYdxem2o?Ly!>lG>@Swyq}6X{_3qMmhdo%579S zXWZyum#D=~uE9ypiR*>yu<~>V&G19=doQ0odjzwh*v(DP_4hl;djvD#U}(OnSI3{> zhxFU;!-}5YOsSHipZ?uz@r|Xh9`u^Pdi=a1KaJ9UfJaA08Nwk68tL1&!kY5WpEnww zn)mL4f%>8IA)4T6ci+0Yx?R4laMpNvX%Ft2P`uv|e?H6{#sD|yDG?4(*ZI*<9CW5t z9f+e|;TOIh+wT6^WetNYz)&3PrkRNi{}7OtNr9K!>>6Wi(obt$mv`&jMrnk_oIyLS z8Oe1z>GFHXL`{`TBk0>k8iA_0#w-@8vpp9b1;$#+n&oXZS21fD^d+z7?;Q>q&UP0L zO=2=$MW>HTy`Pc{|k4>hK#6_8X)xKpvz5e}(;Wji|TSIOeR;_N< z3SFi=c+!AwEp_&-vO8j{I#Tz+c%NWGK>?~|8g%a#%ehXTLSSQ>iPJOlBtd0#8e-!h ztH#K?gx<^44t;XEGRj6Z4c5J+t} zf4PC~@}R8h;lA2h*XSg1@Vln!-4%>ro3Tw(peo$+MG7Ol)VjMI$xMO;md!Nr=-c@3 znqc)FJ)>ifdZurrn<2l01{JbOJ;-(RIQ#xXW!$Tt?Xc_3J{g`_?>s3i zb_L~9TGDc7L|J*b(+~&!pcK&6dO^6I3!NvOyvG)MSJ2hhk3_(i49(7Phfn+i8sHr$KZV!iPX&5O*7P=xw6p14^1Q?r9efzeea3mlY7tZtQNohi5BT5tDFPSmpWp1tq zV=WgiUD`IfDc)Av2{ddh+O>Ugp**SMKF1BZWBRR%UKEri6_oX4 zviUo&zDuN9hI}b5#&ET(bzDtD_+0Cb$rh%BkNDqNp_O#1^+QaIE(>{3`D2IuKt)f* zob}|26A(POa&R6PMeW_UkEV%EbFZIH`$;d(u0t;O@2fqudj`3-Yw(&(`SD&8sJC5R$6A}Xrp z{t~*6iNakB(#T_4zPh^ILbfLS{5dIf;P8KycJJGlv;hJf$V%VXF+j>+ZMS1YL`0Ww zU3+xxn$J2EVTY&P8uhXrqPn=N!p;DipRd;TFYD31Y69d;vXHar023Y(AzM)*9i~zd z`4hP~Dm+|On2PPP+rr&4$y0(j3T@7WC@tV0xYZ$}B@#cpG5t8ANd@9(^OAc{tsmqH zGzGjCLOLop0rgQyP1WSPcfGizM^^-ne2|=$uu)a;hktAToK4#z)?oe1FoZOt0jfs+ zd`41EnST%WF!KpniNU#+J*LTvDgSA!RQ~1t8cq2a96J6=ZVa>_BY1tWW1?YFeUFwFs=4=8FX zTlIqEjjC0Swtpz(tL|YEv-I_4;Qpc|+kaG1RD>cP)zh`_Q*s<^!t5#6Up~&n5ufjN z;?BD(D;0}7IIiwFZ{d{2N=kC8q?o0*it0*12`T~L*chutZ1UiHeVMGUyDw&%v{ySi zWx2Dk!WH4M8e!4A8!N3DRFxHa_-3efePWcqUOnyYo$f5g0Pc5GxK!b)9|b5NR4?ifxYhTKAM*rcD#++i!NwH=@Cb9OrgsYl!$e%jU1#dQw! zVMl6G7;+hR=g=<4=Z=73@Y&Sf-pJWc);D$B6gwJ&Dy`igK3LQvJ})yZnAy~@3e`8Z z>+6iEkI-%3E?T|f91?=4|3i~atY@{I+M(=_4c(-N!5bMQ(Un6ThH7+NJbwJj!(Z~J zKuEzR?a!PE)!q?I4#}L_<)Vwl_lEOcUV`1EnLywU(OZ|i&~`J#zo2jVYw{jE~{_#5kwpWJbSIwj$ zD>U7?O>CFWPnP?3Fqy!&Cj1M+!rop}`k)u}i`P&EZP1%F6ARb{--( z2*RYd)di-$XLGx;LC?PR8X2Zi`yCxSkPkIdqb9Ttb9>iIu9Lau#+p$D8jGY%8z0$) zlT~`0>zX=XQO89K7HILLE@(`!juYUEpYQV0lGu>}`7)RLq@-$g?ESH?yapky%0Q;T z4gw@atEZBT?~;|9Cz`c<*VXJ{wss-Ed)M>m2dVA;oD`wVQ_;U)}9Xl%8VU44?A--8DOr{>vCylPX}S+J*kl=^qs3W-7t5^h?-^i$3YR&f4E zF_^&$K0|nF&&`|VH26X83G8%1^`r*(8RgOKaL>1%prQLz347Qs)w5Ks`@Q#neTq$A zriQvL6Wp0k!_!UU)zpq@HkU4=iJ;7{wY$ll32JImy!e!p?=(J!J9<2oc`8_&3;%RJ z^lBTkNC!#}yh6ue)$$BH7o`sUIuxuqv)$WA&qmoGmaVf_WRDp;XWv*chTXxg)Y8I=^+3PW>v6Qh4{SG|)qsa~h?bO&%rsC)cKx)h2G9WWpTi#?Kezi(oT$ ztF524)B*Z)Md0U@`4@&T*y={Cgk#dNobmA?&&=6i>A?TK-28c$Q-024<{|9gpY~|N z?roRAoy?1%KXv)KTvf_}j-&w0#p>NP-(?SclBaZ8R$>-Mc4V*4u*Lws2Cp9zHLWZy zEiY({(NaD{gs4i>Z0XtBl-VkJ&V<#YzNIeyB;y;b_IV8TYESt(&8Bjw;h|bRCT#Zs zf8c%qQ9;e4n6EoBb@=eMpa=>Je!nJ?(3rVnboVV)q|(p3I=ZKb2$Fp_F*wVj+vCQJ zXV09qeI+;VjJX_YeEz`Y_*~0*2M^8wK-*|#Vv$Jvv3CTG9JIm7E)Nb0nhi&e;W_%j zlKjvqD=$4ut-0pC#ItyQ7ke3X*^X9vGy4~4tks-w$lJdqS6=2keqKP|&O_diP^Si{ z`u=O~G-RJ42Ii?K9vtoRU zs2(6vh#SeY>{#Qa7pMa(bAyT9#y=haM1zQ~-MjlCuL&6OSC0ceI%I_HqS8i$62|Q@ zV}w6+-8dHmWy7l4X>o=soNT^IICo#aJ^~>JSer$!2f+jxkFOV|Mj^QU^Uo1vD%X@k zt9?Gv-6CpU9S>NE@g&{U%Z@NWUOdw_v(0%D#5UO>jBNcbHFCMH5moGcP zGkR?CnrIYTx#^C_$&(bfPhTr`LMwZ$WKrbuDs7X;_lEzpDwCcCn^pr=?pQ!q8^g1- z(bhjjQCnR^>q(o61xuC`YZc!Kn>EQir>Bh3rny%=SHzy{-x2IHwd?rP->EC#ZJPqh zs5FmQBiNf|^JmgTIB@8wUY%vt1sk22Igd!ydAIa1P#nj;Nh1rl2(p}Oz{}0a(3uGb zVWk=lJ?W+GR5$j45xp<d@zH3}}At!xMR2PpnUG@8%j>yjzd5CIn{+F&1 z@vn|73F){iQGDr-y)HRE7cUleXmjLJu4T#63md@0`wtKBs(<_?C@~x2?bQ5{pSO+l znuK+Ln`^tx#I*0gTaIa}q1iJk1_%izH89`n%$Y>zSQvEHavWo=7}>qk_t3qxu<&-i z?>(5HG4QoP*lXw1amJ@#Gh*H3OK`ArQD3FqVAgJ@=j)`r32g(Staq`m?-cv<)gs~G z_AqKHl%@KV+!rNjqKDzcgJ-UxAD((lyNmmq4xu&g_pfs7aCH=}`aY94r97v}5@2(b znw|fnR_Y7pnNKRG@sgIt{VxVS7-AJuxt_*7{xz_^V2@*SsDivaBl0@AB(?F$#6;HNdu`y))nwIdz2GhIi#vHucdvqCUnvehVt8>u@)F>8;*^Bcj)E z)nhMa*i2g%`@^E`4zSt3b4PfM1Yyd$BB8cPF`>wKYQ8JsvVw-j)sKT6Q;IKCoO++^ zTywctJ+;AB<6)}whwblvYmaU}=I5~XjZHPx)mTn554k>?bCNXBp|$rSN74Dvqeqfu zl*)xcGPj+>XS6%NJ(J2HHY{dEfGOjpMdR|WQC|I0ZOu7v7;NOjzMM<|sR>9)MI@f@ z;>AxdsZ77J)b9Bo2&CX67iRi>@(h_{U@awiHD`;FiA$vAdPI8leXghR*z5hu)o1KS zbHTp6pF@&r=y&zP1y^1&xr;W~!#)G$4y}yJ(dWD{=3?B*m2L(NiY%^`D(-nA$VYF`~X7E{srYQQ! z1mvO zJz?END-ejzZI1hCOKJO~7)_+c)m4Axl}3P-IV*C`%}E zTgD*KW^X~1Eo-7hiV#g>>`Tg^lF|@alA;;M)9W0Wa_F%J!W%1?3$D@-X z<<`G(;MVIEI@w@6e!)9o&t8iu|h86kzDglf`w04&Xi2S>t&A{)%+}vdI1~ zcP&aG)A$v)>SucP>{%WQUEJ`ozZ+{h8^gDH8kmPnIJ1<&_|{;n{i5`CPk@(H-9Irk z|0V!49pUwoMO#zAe;QKX@RjQLJ3X#?OhIt;_P*d?!x*g=y_bhgjo4GQGT3ew!4Q)3 zzHMV2@5evPhYa$+wS_mM_V>ExnN{;D4N5}}C;pbW_f5C24#fuy26@v}QbTdEZ*Zgt zCek9UxELSpa3;pqeYn-)1u%;~7JHYV^?lRv_N`myLffcl+|UyxJx*wOmDx3>2M!)A zerMsWEqvqh>&*uHU3RUnp~+B*Y}~u@N zYGV87_x=0!A$(A?3yL-T{oTzotM^V>`DTL0s)?!-_x1BMKE0n6#M=FY`EcA%v&nEt zqtiCGp8*hLH>ujl*%+>AUMusXVb=@pX&>Eb@$FtGf)|xE7;IyEyH?!i5|_+x;9$$U zA;Ud7rKkHYdW4xYD#!s`tK0F3ih*eJ0FPt}Wt~pRq`@!zgjo{1Azsoxa5(f?Lq zMVZf@-8NoFm&_4sdo&3a=$ezw^t;FTN4q)ConNgQ+Ff<~qmJ6zd2#k2Vcr(>@{o;G z{762V?4BTINQ~|Ey?B3|pDto&s&dhUBqo}5YHochqha~F>66B2?lRbQGk(yJuTK5V zDyL?xbojOzwy5r^p#66@rX;uDG1kstk5A%gx>sP5x_Qf=e8`A?J@3M^bxp@EpVjc$ z`)?lfq}4|#zvlEfoH9`D0xyF4fDt(>r+3=dzqISneB4NbalB)T%er4yuzObuN?Dnb^X;krKk7=MV#QX`Ag{O2E!Q84gGj<1)O z@x;{uQSL|ptot)t>Nv+`D_O5jjr0yF%G*ZHgT2&{nz3#U&s|GLXEV}~7{nItc|!(% z_7g9me&PNp%ch6bdp6)$;DaIc?32RcLw}F9^YQ9$U>}kc*m!YogB91$6FZ)VuRd-* zK5EJ&IJve-nkGB^k{?fvST&~mV2xi@FFb1oP}QL0W6$0jmYjXUoRa&f#3?)!Rjq6L zivMV5zkm5?l;%u%)crgyRKupx<<06gtMvEftl!_R@sos}SJpl;wj0oV;E*l8ZE_cs zb?t3`yLA8GT9-pe(l&>BK3s8vfJ#4s%whH(h6q&`&*`!_*?e2*9JLhN==ulq&-k8S zeD(U9(FXflm46sMZb-i-ntxAUcxC<>LzC9z!X)#AWOJXUZw}R|HVJB}(!y=aYay@X^#2Xs;fKI z(_Q?rNrv6>)*3o8LV!4<3A=NQWcp8NbJA~fNqn z_uwlOC16y2-CwP_Y&dl2#iO3Z6V5nyUEi?D+q`7wKZ|CmeEoRTwqn0}>5l~Mq{Q`| zeV3e6({MR`&ECA%wGHcoioUns(2N&^&KbP6@1Gqa$A4EHv+(kSi4$Lq`7pismt2pD zL+(46ALsB&c~j_of9YQ>G;VxxCPGuQ>W+_J6uR=toWeF)-I5wLxa9YtORiSG;X3$L zsn64IYQLb)ee>v&DD@R_BNv|UeyQc+z~*Czq^gDVFuxpJ^hEzk^O((!g znxE2epSyOe74u^JeO*7sPxve-- zv2VkWKmNE;_{$*O1^IKiTTpxTQqTK;%nVJ9oO1qDPI1r2TY8ps{A=a@!&`Q|4W$c6 zW~7C_p1`4P^M$GU5m9(ZyHX6!qQ zRm1j~+Zohp-^K64oLu_UvUav-fA#)trTLSiW(7l&i$7lfe73yXpd+)Fyi6TW0~Hn< z+Qg`FkfFwm+~@jKERVnEmHIJK zC+O|y(-}UAPrJ6=)}YPPr+!Y$iVoNfS=RLR%6S{6%zUT1PE)1)+Wlz%>b^;(^Fup! zcJI)(x^M1*10yURm-m|(R&}(|+gBgk^*)q%)>%vxr85Eayx;2TmTotxMW>BAIUhA^ z5^Dl>;^L8ue-{06`Io(kfr*uu6V--#<35$rJLZb749haY7610gdL?gK+oN`mah%&RF}@d{e8sABK#h5m(`Rmi$#IkqEFq$ z7oI6C5D*3lB4<{eZ&xROHD#~-gc!$1j19zLqjkf!ds|;^ z-q-YIo_F0XTmGX3Fo@nfu8GQH)<9GcvCQT`LG)R8nH2gx2Q`y?GB&{b@iDxAqbyn(#{Kd*a zCM{4EOX)Yh>x}ddEnv^lLx{@)zCtm-h7R;C4U zDb$`=E{08gkF7`>x>V)^2w>bo)=%N!xbsOzP(hq#B=9?HcV_mZW{T?J<~l zZcf|*4%&DB^Oe0*O8x#S?)OJX-TJAIX7$SY?QoAPA^z*aLhaYATVv)te|~WvSA)%m zswOfi^L3{BsrHH4EkLT!Coz!12fsRhjIV!oA$0uTufO=@T}Td#f92Xenwpt*zh}SC zEk8b+|5a9+SYo;bHPHS?>^xBt{`PmAxPsuwK2ce}|`(XMZ9zclCmetWZ+<-HA> zOjcKvi_r)mZ}D~AYIO!^Mx(tw;#ILoOkhg71+=jMJ!4y2PcP6K-XyAYGfbF(LPT##3pT1>u*Z+g9L#yp6wujc9wjo!eqG9%TV`=FcMpi@{ zP7BRxpfMN+X$t8z1?dOC5g_iP^29s5x!ePWNkbog+&5+Jg3y(u5Y2OQ8(hyEw0OA2 zPP624yIi+W)62^{%=mk(SGU;?sTrB}BNu+!Y_IuGFU_Yf{j)TpL;XGs$zA=}t@LV( z1Bt3WZ_ma47!)5FByAsSXFup*JuKFC z_#bKu&`{*wXwT@BlJjN>A+_D<-i!{Y&X4iG`P3%$(1J?wzqkI{@Ev*h|XC@ zfFA$@6r$02cnbj2O265V?!n{t99nt_Z7%Y8XvIK*=20OryR86u1G4siw)Ao{1W?CU zcl^&>l+Z&A{M7=^AkTG6DN){}RKVJ-nA`S|sndZ4i>q#A{+jg7$k+ItdB)KBhJW61 zPCI9~ZzuUOnf4**Y_mCUQ_|8HV-e?2MmPXn8A73Mliy%)aP#KHhTfALjcFcKcipVd z3@P+7icc8kxo2hH-f-{cGw-8MS#fvdiF)@|7(pY|{b3op;Z>5`i_jnD<}YsK#G63Z zf75@lbnw`5<1ppboVsZ+7U)@@G`FWnkvP65p z+b$k7(`UgXLN=Jgg=YYeKB-<~hr0Gw({y#D4(*_Jw$5ZcuMWFtZb42}e)hL_#p{Rb zM34AT>|WPsvYEl1BR5kI^v=kwTlZViCePeEdu}y~zT3O&A4^tuHVs(TF@DA5Uwdjs zCbl1L);RNG6CG#&tEE#`Uk0TL$=dM8jM>-b)-(hXkTVH2PUDA)=%|%Gz9HA%I!&y1 zBqJQp{I@mjHD?|na(sBQWm|$?ZA}^Qdc2=mdeaaBqlUejhl5`H_1t}XTi>fcV4vH@ zcE0-_>cy8oG523Ny1|>X^$YB&s0{WWYBzUZouLq8!xrtcSMObLH?Y3J_>fPnZmih+ zVoTH%r=EsDQ%O6#@7T3BaOu|iSX)gu&A)zgH}BbHVNt@Jre~7Z+r-arQ0K8{uPe*^ zlU4uli@&nyf4xz*W{4>gji<%qd6g4e2X=G&%QGitr&ezH%{OMDI}J6pm$g&78|w3Y z`DX{wP1yLHAb<=>Q^T``kHy z+mwL32~Kw5$(gp=2czHoef7ZT;dXZ>XpO(&)qUb}=as)Y_ZQ}1e-~8UF z@6i+SZQ`xs_q>Uox2W&X=}(VZ<$ZP?1fs=m8=II)Su`}_X!3X7O6ZPUHd|GbuZe^mb4gRv{EQYyQ) zu*k8B?UH#t`(1CZ$)-z_lF~fqXtr&8uzQ+OMUU;Ob!#rSc!am1clyxxmLX~2BP_uQ zKR0D+O7qKY%)B?=D)Xg7D@tiQ_Zo^({NPShj%s1?<3~~bnW?V7rA<0FMqza@Fr-21 z%D;*?Ed6NYdMFT2?U|5JDP+gqvvsY9*VqovwjG{k`|)UHeDgT(!4AdOzv;epyPv63 z8ovH}n_&vuE9WEK`$gncg>9>MJg{t!&XIF>+;=W}daf5=dgA?$fgQbv1`oCT1n+d6 z0eBog8sHF(o#^dzXUdKZ%J*EJZ@&YFS{=3tVcG>NRQ||k)3`}>%i{~N`_a&-#n{3XG3`2(fqV;4h{6@PHXR~6_d3i>z_6;5xQ5sD~dd= z^p3G2xUopF(Nww76UnX%y8D6`m&>{&W?^NL!`$C>pe@mJ;&Rvl2guW_Y7$Mpy}K#< zda)7}fJ7WdfHB!GCZFEW{+ddCRaM&qj|0N{4u#udPmzo$$ao98b|Y*OaN2XqP4<6$ zZc!^1kBK)ns{@WrFs4oKzvQWrtiF?FL9(XeNMS+5RJQ>k+gjBC>QycJOE<_(7)lQXHy|nw9Tbab)oz}J8_j}}26$LyN2lH0Jtekqck#hOiyAI4Ufhu zqRnT|t~|cZB`{`(=ft6NwrX#~)9m0IQ#^E=vjjoDC_leZ2=~J{Zy#MPn;4!ig(Wt)HjGzAE{X$yt`^ zh!?Oq$`Q6s%UIB(`)pZxR0v&n9dB}+rF}14SbIDRhx!hq$5@AxSE@(Wk+t z(>&9^&dM)4E2|xG8Ds7yja?NrCx_0{FD)}FO^b3r!tAC7Gn`R+%mAucgjrkRoZ9;Bpn+?_}GZ;c&mRM6gjP*C=f2YLg%;|6{@6asl2gia7 z8?vJUGt3XM>$Zk}9)?SRoDxt`eE96K;F0BAl?$eA5=a&&n^DIeDvvOB0l4(ZdMli4 z@O7MBRQ((4&kXNATF0@M2(YTk<#}M))*h2;C(gZFQMqB4 zYaws%VCVkJ@nW4+SKIu38u?|a`Ee1&Ce~eB?w`|saOsC=Poyds0@2Zpp<{$c@T#d= zD{tqQUENu#v}t1ZP3ECK=AqXB!_(GRSj0x&>E?7Ladz>KX~orRQ>xnBAJL|8yV+7N zt^A9hEx&GWSG8+hs?MDLUoCZX+B;hnU!9%uA#9sdvHrapYqzEQ_fZ_L zF11uKTAowq+NCXTjeR!0W+&cS@wFpLn!eBdo~XOpJDF`FsHx8&BddDm5ubh7?bFR| zUn7i`KG(whl#O$vSU{AMm-pr5r$q-^T>wLcxRW7e?m8MUx2lTO2wA(p%Atrm;fW<= zRC*@cDsXmY=unk4h;`PkU5k5iUADWPsNz3+zxp~X?1251af>#bU-I#p>xMP6i=R7u zJm|Ecw5n*x@7p|A>gfFXrKr&KdCXh4mA+<6b)Jq}_k2d*plQ3E|M8B~v`H!K(ZXz* zxBH~sTizawe5`u2{Bj#tE!XymU$sKMw@*vA{uomdzW(;Ln#`6w23_{9ZbRI9j3afT z+EJ7(Zxb;=*9$xO`a4~R&w@`FS+u-%%h-M!DHD7IW({@vx_6LN&S%Qa)IC+d3wJ~S=ZyJra zI?W3xSk&J&(?BvN-kKUFO*AsZ=dBZ60LX;+POylo)2gm|F4y|bzT_uqhKDr{Lb^l8 zj;`mb#Utj}xEAH*<(TOBtJPDtPGYB=_*COb_Dexeg~e{pv4}jxN(5j=Z&in|hB8i1 zY~oq&9z^m2-ABrDK=Tp_hrWh6eQ7%;96xb4E2}Nfs!jRA@aUdwcay1q9EM~t)OzV$ zD=XP-!w_dfwr(4q^7PcPIESy8EUss^X^WNq=@pd(+B|97iGOKbG>lcSFHXhSR_0aD zxn?zIFV#qQ_wp`n&GjNbFaf=sVX^QG7g02G5d4FJf)*u3A3fSBv`c2Yj4D&}Z_lt5 zL;T$w;GkBABM{Vyp+lJjY2Bm&Cv@I`cKn8;o_4>XM;KvE;{2HHnhtq4wwkAPma7rD zl28n1jJm`Pt5M3Dqr8>c8M_WMC&}foviN~9+QRIsBfMA>vFhVv%Yq?_X3STxN}_{U z@Q^k_^V5gYmI0`XIaHE;{{%1hY<9UZyS3Pbb=az`Jtlx+pEFIDj(FChxp<@w+C)>satDs|3M?a}L3M8RafoBr5{%j6IXk|L(AS3awDVB?qzL{HD|wXtTB`&28du8)1j zR2IC2iDkQ$V=QVQkuH zKH8cz)X4ZfYp!=k&x(>HM!;nes6?IDw{{aWTbXEU7>{J5hv>L?!W%L0!6LdHdC1r% zn;Ql3@BZ%i-u^6AUubkd`?N*+Z|#~kWXgcAQV{V4Y}N7BAHDXmB3^vvLi5#)dy=dK zaF}pBXhY)v++Dn@aO1@G0^Fybib5}Vk%pGjr2ID@K5WOG!1U(mE_M3MxuRtoJ!{m2 z3EQTB68iDr!R@RV*_UxOI3VDAmWaq7{I*)wr#bN}pIEGlk2JW8z zg&tv-QfSjCiIW%44EjWzjPd{&-R1oS1QtOn@TbGtl9(`GjL5X`9g|WN(7B+?-eN&vCWq zFJ3el-qPi7n<%?FaHZ@Jnn8GzAFF>ysRa^-MFMq25OW|%v+{V1scc?<5bx$x^6^P4 z4!xL7=?vTRhw^y(t;T6zrKY|2C`H_Dz8n^VMpc*BYl{kv-Snh;CL&b?D-J$y~!sclZzMc14PrCW z-suuv*$(61?bki~GQ3#kAf5x{R_y;AY??{T&UA134nEOg1kMUHJwhdo{N4m;)GhZMpT` zTA{^A%FKG?Q(gFN*)s0*TfMONH2i|%QfN44Iv!CpOZlzyX!~W$g1F~uJe=^%b4#Ad z(#X*pHe7jNNmTP>UieS`rRqL>m$?VQ}aB-!xySsZ15BNuvUZfLG#Et4&d{YPI z>kTAH1Bd##MNZF89*{a_zW!2f#=@uPBCd@aZJdj{9}j2Wu(f?LC!cS#qfWhstd3SE zB=H$v+ktGX_#5Lv4M%4#ZPKu85=u3H8(D64(&`U6UW20t+K}z zyu)X~k4Z>`{Ca)*G(-DoR#no96$e;jQ(Y)8b?xnD%St`7!QnI5EV7B6$__*xHsYOs z;HJE#?+-I|M>oe$cCV;Ni?-vYjsEU}XBYa>z54C^MHvB9Ov`iXv6w`QYfJO)p-)ku z%8f=n{`&*V$Q1kj`zro{gr~=S^kG{ivZ4j=ozzq$s*dlfYBCACqtZ-y;@qC3< z=q0Yk4W# zTCZNPS0u_7&cWY=9BcONznQrCwfMT7wpAAyVBU<@8#u)oh<9v8nSSu!eVd zaCDTl%d#a)n#Il7LF8ofRwHUI__WcxU9j8L2>uQ%v4y%{29pMNNkOoG)X2g$SOyFyYQF% zk!0e2Frr3cmji3kEEca&<*HFO$!8HCIz*|al^+KNb{wY3$Qv#p5J z-)L+28m42D?fc8U^et8E5jGCB!X_l+R{EZ=D$$q6dwkPJUN`aJoS4CV91rf_zi3AI zSh9oWal=fbrL^1tH(z%RHyZHhea5MWq#-nR2QsQT80BvcF2go&!P$ZMBp|~|N^A9Q zmC4y>;}i;f08OvK;`{N7*G@co#WFxJ$d?6#^n3% zwSBrwIhiaXRH|wjE^I$&@kq=bnOx6#`&RYhtmagF{^lE5m>Q7cxN)cN`-9@QUu$S9 za2Y=$_cDV(X4*nXWLB^~Dm4YWG?7gYTKc>Z-xxScN8%wrS+AB?_l@%E)|LJCtb+94 zIjSU`ZQdy?Snj?maNI3qz<7C-cqF{T`K0{ORk(I4g9A^WJbPB_DmKzUb2L9gr|he^ zy)DI&Qrmsqx}=*of4SDBt6pS#PO})UU|@;j(LpTl@m^phpAP}eo|_DBUGOqtSmD8z z+$YOTQ{pn#Dbb7CxFZv55{smwBxr79H`e6t6BHH=X!oyReZkdM<|+x)6s!M$>i47TUW@vm>VU5PX4y`ajqBZ!va3q`Q$9Oe7F=3oJ`|aE?ah z?YE%>!g97z1po1eAG^5l2XLe>D9BDUlRZMSLtHEB5D> zyYJ6`4?n_gmCc(r)kEp$ztg;HPhLJ@=hp%)g(B_^E?EfXbIp${EHqHW%M2Cmw)Dls zo&Mg{8zvqwy16QGS3r1o+W2}BtH{X@SWt@aCu?Dqs7u*WIh4omOAvDcchbvl44 zL^0fp_o}+|Ztd(@vvOFdTUqxYSnPD=V)vbS5o0aOg6d9b{lV1B1Zr_cV;B z@Ne72IyRtS-z>qBib^>LIsaDciARP%`S`WJrL}ZYK+lwva`UPlMdsxwx0V^^t4{sRuNr?aBhO9os*x2OLts5am%i}G(y8}ajp)h-qw z%JG%C89GS?Wa#kW!~J%SQIseWaHG*0ytD(WE9(p%d_n)hvKN<(30i0Dlj_PUSHKqQ z=wd8va`!tQNg|jQF%NEY(UV20((ZF3+Wxx7K-Q8*&e|kTDRT0$hn@QOR|k?@kcGY} zjecVeH}@X?gbZUVfC?5bS#s+6OA2eyd0e29sJUmWHLeXZ)%!7O5a1jPFKzE!udSSo zV?Z8u2_D8A>@Rz_AK$%ak0ZNIM0Nz=`hcy6LOY0D`R2S6*$^p5r+htsRILUp4JI+gi6<+ErLA?yLmKOOF6op9w|_~^ur2M+_n>ojKPJ9)a8q?dg6ZZi--;~C!9eCo(YMaq%GI&aHk zV>1?dhHdUj=SA1fmvAYnMu(e+v9tWMbMOn`5?l6hTfQ6K%oq{HZRTJ10ezLRW1J3Ti3Sv|%nPYu!y z0{<+2(#W#o0t}JKvi#gVVgCQ5V;p&@p&faig6Bt_KArpebpvHCuH$cBhd-{XtIPhh zM(##k{{R>iRGfK%pBdTZH=1T_#zpJ;lm9rCVSXxuYtezJ`=YWkME1b(!&v?$Ko-mi(k5xHOq;DfY-Ss&N!rZ)jVfOGQUzfDV=mM~}TqHMOoamGGP zShAyP${0Nj1PHWp4O z)W@BeNL}fq%*6@UdsP4DQY+Fs5keSDv1hFx-*B3D^;g|hA2KHiOzrFbDK1ML!!yk4 zaC*y((iR&DQs^d$cO(z%rG+0q28yjJAxjobqdYq`>lj$F-MNJtCoDpC(uf@;`C3Ph zlCM}Zi~dpcJ-w!#*f;waAU=JSAf8CdP%HX~`pt=s;YrMGs+-A_r|K4WKHJOaARIjB^Lc$0- z>tc3uIth|qRwlA5nO(4(KD}|rpa5;zPnSnDmkqDHZ>zl8Q0lPEoPLht zRq!+&m21ROjuh-8J#SHI>1M%)T_1)uh{-+`LEi%D$|J82D04Sj{EMkwl0J4=J%706 z!9h#J;Fn;*%C47D+R~H5HcLa=qD7GY1$+jQS(z*^jk9)?jnWHVcM7XWx_-SLPjVlt zW@Vj6*~|4U@a9bMYuu_o>AAG(PnTYx;$R&ufGA~U1LZH#nGVF<-90`h5c`au|hlU7f}m=LsGLGtV~# z&F}?IGHEW|rsXE*MT-dWgn^B+X5;eO7O-=pD7e>re7q6BTh?OBDr>y8=z1RhHUHO8 zCnaZMtVOXVUQZ!gT8b(r(M4!Y&@8e|*IbxK@ue_AdtPhjSdVgk|KpTz1q)#6| zeZmq@a<$T4;~~Jsgi2mLD_R@3Z-20d#}$QQo{lnv?L_$UXx51k&(d}j7mbNlpkHUs z^at>tToA6jFy6QS52l?V1uVNjo6434f}C(s(ip;ln~&?F*K#5soghZF?8juzSr^vl zHW93tQc~^_3zcmyj%Dmvs%us1m8mMX70}6npk3Kvjy)W1nh5mK! zm@pWR>MPVV4X#m~$nqG$LFAOmVo}cXS9QeG$q?XJPQh^cVTEi)qrcp2 zJJ+)f#k)BM9Xm36xHN(QgH+X9)ikW(Dek3HY9JVR3kibC0J1gU{TbMRP&)6RgnqVD zrr?nngj9FJGa{iI8&m{*yjF9>f&RTE7hdTjbMBuvpFZ7P*QGj@*dq?8Xfkhq)K2{I zMU6vC|L?kH2Z@*cLw~2+PU@Ljtl(Vtue=&dii?XgrVUNLe*JEwA@4x?BoYvi*5Fe> z`TdBt^6^C6;gX@hfnLWh&ZP}iPynY*89RgDZ)L{{JH0UF&KG2vCr^-<q+~JDPFBjHNPPo9m$&3OeWoA zyBB?dK(hQOh-eAC{RYD)(BUt^$e(y9YX^QZbz*xB`Ycigh%2UTfBg92w{wDA z@{;kH=BjetYJUvKx{&R)o$_3k-GDgRow2WTz-W=)Dg(VR6CrHHYSybfS9R69e^R2f zp%jyVhqp1YNb$PgI{$hLGll3qR=$}?CMDOmAG}myZ{LZQ?`lo;dSbu+d9ID+{;CSA1%7^c0kCZb0^2fxrH# zL|Py++0X za4~F_spbOStFS;6#Hcf~zg)^uh<*AKB*{S`RY6nK?Jzt zUG41Q5g(JXD>L3L-zBKW3YM#j#TOE+I`pIqGM2AcVZMBM|Em@6dk5;8z5HmPu&UvC z>rrdcuqThx_4I4g+r}Pgmw49`Cm&n5>k?d%Oi=3$yuP4wd9HjxP<)Hz`&Bt|@n-gh! zFT|{c3eZ@aA&o7o#Bzy~->FuTA~}ppP5_j9j+~(j1_|&j*FZS+?~ZVAbyWkf;%?;8 zfwA1QJ=VWd3r62dTvFX_ZKzEw?*H1r$4W^Ks*0lZ%4Bs%5P}p z|82XiiL)c&-sIvCzhVEf3SK={D4LDpcABjD7$A?Ho4X(b;YJ(G5M)-nsA#zn>Zx1C z7;vB2@O=gG!oIvH7esFTZdW6h^hVMbgOvmcyhh0RS)h9t^3q4r$vP}q;RR5M409ynZ1&aB5{*uAwAIS^c*7$p9wU zI}aGpl4G|?p|{TW=GKBj#M~~~y}L&iQi`y!gS4s_Hbc$5C)tl2J2o|B5KtmG(E&|uyuO9x zQA$X5pC@`IKYUpHi_V@-q5^;cbjc{E3zr0Q+G{>}dUdY$36{u!r@O?tD9z*fzay=M z;1^ngVxoM+o`PQKQPT%XBS=URT?{xzAf2Z)D1wDk^aEQTeZt~rL{dZQ)&WxTt zZ0Ep;W90QMRA-%g^%8B3GRrmEp>6D|Y@_R|%(}d$8SFlKqOp#SdJ>x>tXwJ%gP9#& z^yoz0leHK68U1zcyLXKRVmYSX_@2^k3DYIqYAa)7`pv#%waBzF5Dkiek+tre2AaqC z7(zv_=i;&_8{xqy9M8Vb+7=LSX94nJNTT`;8aNQ)WWgAV8>L_2p<>=9st3UCLnnhI z2Gw`2z9o(6&mR{1lI*WBe=da&rKzZd#w}ld=0R*g!22k=V0#`fb}D{*_wJo;EbD4W zM-BMO*RQPmdM8ptM~5@BM!2o=?{7m8txS8Z%`>AByCEABsdXJlBn##XUKf@&Y~7cx zkl}Mr%W7(z$8q8`$-MFEBXW~bnC1X3I5<1oj=rgkl?99bq))=VpFj&ZtZZkpVswE9 zi*EIfxt5t(+V9ziZysVsB(ek;Zc+M36|QAi7k&*+tQ;=;ZnTB5pduI+@n(d96V!A4owp!#UJ54{o=}hxK6Shh<}-A_*vKNKBllY$RYh< z$)n~b>Ig3Qv!S0DV%m|$;q>cQiV_QeXP{5nE~%-hiS($Y-|pSk$8UZ|F)WMEL6D(d zgkyfMMPVW244^91{^$!!Ur1po-6mmN(?mxj!>M`m=H;~Gv|Ve_r%6w-eATL`!Ccl; zD0EePkp5o#B|uw;e2d;EjQ#_~^k!jERm5}<%(sbuo<$)W5~TXU*CqTMloK2t;F(oq z7l84L09i>-FL_zqJVPx`GBRcM14tl*WRrA;Agp7E;kK=PRk7s0FkuTF&Ti$H)* zq^=J|lEh<qVYuV{VsC8K}B zYuP;7@~c8&L1o^X%PMHSAcetQ#+@NkT={x$m;eoz)_jtwbl&1$-pcR0ahO+-K{v^~ z@+0h|IVG4#Cq>9e^#Syr244OCd7d{?7+F^jgRsf^l#N4iUdnwjTsYp@XIRe8dOOg3uNC_HqYGM<#2;}yYD2-U{lQ$x8+Y22l6-{!P> z{@5eVJwI5hDP}>!WPk^YI7em-XjjL;yii$f=KAcP9TFLnr#Q%!#j>plhCs)ODrPITzGb5=^q3iE{|g07Nj zL7-_lHKMgFkKr$av~TC5IdE;k3QkI=tg~|U>J;iAxvBzop`Sbb(76sZN;#{lXS;G` zi3!91y|R1wmJ#bUL8&9?VcX!YVIBg_^F^jclmr*HZQYvA9c=B`KPNI=#P9(GSw%&d z+4t|+kL4I?>-M#@H2Uk?6h!z(dGXS-KQRu>--_wesomX%4ZD0Vu!qabD?|Ivy*lf( zHZ{Rms9mqhPlH#zPrn(ZP5mlBk+OQ$G7OusE+D*`F%|`+xLjG_Q^zNN&6mo8;tkzb zQ{+I6I|jS_f=v^BDal6uD)Fofe24%Mt}zLz>!t-1Y~`_122j!dOG*7(KW|}CtvWZp zUQyz@lmC{^{Duh-^f&#|9fn)WfH3QU%!CPrM^qlM1!%dkokKM*H75%5tpGvjz4WMd zq*BE$Z;r>iZdh=0Xw&yQ_fh^W^9dFfTS7uY=#3(8{7=4Z?~(Abpb zl9ZCtfOtu9KsPltBAp99t!v99#6>ohMit+`=dwjGG7bTCNeLqowRvB`(`3*hdL3zbC`sAcOH2uPZ$!NWyucniC(`FWGjG!agO=z^H|&u_ zSc4`}(tv9}&!SMi5oJQ5hq*@|O#?e06uk$nWgtVEWZwpA)RZ|NKDgQ(=2ayl)01)% z%E(?6Ssf*4L>i13(Gk~Kgf|(Hhyd#WdTLLw9)V~boA!xuF69*!qPg?_QLM`Icj?(q z88D5lIF!-_0zF*)@#R-U!eN{*r3{*twoJ=Zf11}$L@#_biDA+Oa#6@*M14`e{Zwz# z^6a+`i7ccE5of7dRRDpMSS@SbWwx0^LZ~uN>)O%^#~QIK09_U-AWe4phF#-TQX4#^J(6p^TwBk$gCmtFnd9rnM8RBHJemLoDQtrknpWAyP_ z#xAW9v`;-&Rzt6dM0J|n?1TU3X45dp@~m=Ps-+<$tb}O`^rGBKR`GWkTg-O?ar0Ph zp3)DfA=z#Wb*th7IF^Ji2cY|eN1MT_s#|)jvkNLgM}3TafEkx;%K5D{01Veh&zR07 zXbh+6k`dkuHj-WOR&g#OuBOWtVNiO+t|zO7*++|Q(_2l$*no|pk`ua5+$TrL>0#Iy zy9-M@cAs>>@4`!u?O6%UZh+P;XOf8Iyn&`1)y+swv}WH~0i-1w$7uxt3WZAb;K93R z^{sjIqb?eJI2{>v!I6YY8o@^Z>0KT+)W!eGy@C=NcKO<8R=oPgjT^zlTmDSV87ia- z#6kR2p_^#PfrAY(gu0L&Q5fRXQqE}deX#BO33na2LYU7dA+!X`{NJ?v6T7}mbG&F# zM8sj}4D#~7shJiX^Vj2^+;hj+_gXO)WlPWdBj9AW`>Nr)i9J&FXsvH&N)JGt&=m z!6QV_C#3)dRW*hccW)`f;_lgaMuV0^ibUIV+?1rUc5T^##@3UVqd6BJbdhmK5i{_( zvZm-Ozc-hKJTQ?*h=vPg9mStu7@M1S+$LZyU99&^nGzt+MV&i34z*ycTmD!P(z2Dq z8>OxgAZOoC`$pIoof|%V{FF&2p!x@-K2RnqZ1d15jXLfMzZbvab(77_+HaQmLTa9I z6DI~f2(A{oS6I294fPc)9E@jVqgpW9e?zJw_hLr|OwR^zP2*M+~j%LUyqdvkC8uU@9{nGR=ZiJMc(0Kn{J4H zmI_lw$H2T47J*x~s3JCa0KH?DV9V76n$R0K@a#XOfEc2N9=T@C`FCqsYKGR~Az?&_ z>4U}X<}YEZ+jTGr)^CIIN0*E3GXI; z-Pi7C}$LJdzyC<9N`tV z%Oc^~#1zv5jjaLIhQZ^(xTJ^NU%Hz)Pg?$wwKHpEY&mm3c`C5F%}TX3(r$*=M#B38 zwRXx0PM<4CJlrW%SQkh{`4QQTA_i15VCz=F{{>U3Ew~M4oNGkb9ZUWfZ8)&Vm!b6} z<&0>9f0Cf3<=?-9FKYMXDAx|CAVSb;x_R8ydpB=J7@2MQ|GUzUqm1qR7W`PdmU-#& z%1X6En^9Udq)i`iH-p~FL^iI~D=OCH`7W(a^LCE6aPAGf0J-uDy2&X&0z>9zX#I`!9Ls_B`eYsQdK zq-R9u!^xxSN*}3w%6cy1^2e2=Sq@~Ci>UI5t}-!8D+5bWeO~H4^v`FACLdp17HctK zwnWANFD8qGMeP4_!`Df2qeV{9{RV3z3H!Acx#9~Y5{$lGe=TW*97u>r>MQ~4WnYK+ zxQbnb77?+5i6_yXJ)j<#QMI0WR6*n@CZpQF`{%f%OyS%ih>>_TW}ot@j6@5C&)KsB znX1w6b7exwxmYHqfB9uAby|RnKTZOPUR8cOM=8DqPB@;-Eeaq(sqv)+hrc)w1w4NfbC=fwX_t?#&W5XlamEY zuz#N(A)`T&10_zPujtpWpTr_>k3?8FpbCVbV~_WNs+0N%^jlTs3<4(5Lj+|t=i(MU zYDfv4aj!yT?fl=;5ZQ=uS?H_t=g(7e?cHnZoVxyUd^`@f7oM)BVwnA@SV8;|YD$zY zD>N49d35C_WBYB-#F`LLf^adf*NNdR#N~d-PakN!>xYm|ZLW8fF=e-G*T%h!IxJ5X zQo>6$2irxqqmiM-c@vW9^$JqzqiT+OF14ww=wtRtt~6YnjAVif3M%`*1^B!H(-UUp zl>UN|(+%7jubUdmg-}>D=DVY;<|mT91F08X<7S9G8M+Ijd$Umn%vlDm?lo z?qQIcN@1t@H&H`Ll~Su4Dfm{AcJ-=Pl?k2Q#3ih!5K8%9Zh7zRNin@Yx80u7tor*N zBv}^6kS`tbRT?W!}j5W1HLy zI^j6Kd121!{f<-JlZ^VUOS$Z>8h7PwgVX8h7STcb?GN;w)~a8d6HmsE9`|yyPyc0& zR#a6z4DuX!xnR(UPBCxu-EVHu@5gOh77CCTNrmg(&6&+phlo(7Mfw{h&7 zuSG@IU?pMF8_t~hsNXIYawelpSeCRv`TDFLiNQAru^=cMQn{4ZkT;NAM^cX?#L`(b zU^l{&pR+5}=}81SNmbHNlXRpJkkwMVzTR9V6oU+Efz5#(=K(1p&oc+)j|IzL_33FF z>dLm4x?9FsL+k@XI-nt!c`JJEdW^<}x{i27bt8gU$P#4YP3F$cK3N)vOk*1utrJ2% zxd3bz-wX(6&(xSW0zQP%KAGtsJ_rtJ6DG5l8V1{=vEvhWU&Y|bc3_q3#7&uA2|cB5 z+3Xc~AphDi4kptvLnKD5czsK?d-ra79#**83qxx-?{9TxK7l@;hJ6PPR8E}ImKiO6 ztPVyWHsjE}9B1hQF3wt-Y5H!}rNkE@X%79hBJWlyK#N3h z3^)Z4>bznyMK^!=?)yC8G*XMW-o_-99+*B|QL>m#hhs&R111|aCqWyIL`obX{g*x; zA|3kd;A%529885^Yz&ynUC)Y^eSLg{X3Lf>3+>%fV}vyf+!%;kh)CVX(ODk^VPJBD zEFcT0d2iw2;XXurL?q-AFn@kBrf}SmG{7<7X%l;AJw0T@EB=j z@T`e6{Q$X;4I7Fad9a?QS;Cx}3m=%s z=3D50HS^&^jelEnezW4@^Z4qtPbA-K2~l1Y(8P#kKh~pR>-qvWlKjAH6u>y0^iepTFh;!F?|~j zlQNG*;fH4Q&Z~_}pwpPEXe0m=a{K<@7f1o;NLjOQ!2Bk3Fq3Ybxo{zkb1d@ZD7)CY zz{|$}xxth<9J2=>55aXE11f*h_Aeh<3GmlnEh$rcQK8%%%Dn?C(_B1Od5MjaINx|d zEl1oW^iw?JlN{>@OaRlCDu?j_*%IF%DVMosLD>*bNiQSVK0t{dW7oo#-#Ik&(W?yu zCZQMo*`jkyWR`<7(x_RpG0cWC<+78CWcWWf7AfLhP}e?4^!7ev>ZvW`W1xrr(ItBY zpy3la-6jw2jUzG__p47xRP6xTA^^Z-GxF-XhTdv3`tVo&yJ| z790I^Jls zp(sh!E`E7uo0vH}8n^0hpB`>0eC#F1(^hQaWE$h=U(>8QydT~C7D?o z+fy;5OoXib8NSQ`^V9Z?% zq)`{43&R^=2tp3f!ST*gd1v%7gQX>8fW$W;A>qMlDL29!<}QAxydUyQ*8qeMO3Rp` zE4%X+WE`b4^Utf_r)yl&CfbN;hY*Oukf9VgaA+5j3KYoTvMl*q}Nb#+6#|0q0{=bB5tuOP}lYWhGDNhY46w3mJGjTfU#8L>+b3klhlGJRx+aS1~fB1@zO>8!8c1dnj7feV`AK5)%-VSvGS?0ts~ zn^~Z(@QtPRoj!fPyeosrr!s_q7YOYV5ZZD+m0WlJmQUx=n>+E$1PC-))sxEFFM6E9 zSn6Fdk)Wf|gXZRupDpNGX#JfdRe&!xY+}Q~g9mSa-O73`TJu8zJO8dLc5f&Ouhdjm z(y7NiSWRothC4|IotV(}DQGSi_8gB@l;6b8YlW?BNa?c@y*koB+a-D>7!K~#DJM2) zK3<*hq5BfNfi*K0_=*f(C2{S5Es&dIKKE$Sv?&U(9(V3_4ttuCkQ_7CmteVc9ILs17%293DzCmb3Qr9j7q)c1mL0 zclTA+&+^L%YdA@1KVi$aB1jV|geTu&;og9P#$QWHZcz5dGRFv&lK$%EHs+KiFfi4M zO5&eaYKK^}ERS7eB0?4+k(hLAKgpN&NJ=Bx-K;;GN~o&voZ?QUyk;`mv$%FW<0I2T zmKCg@Mf~S9#IG&XSyt3V{+!2V?r-NleeMo%&jkf(L{$m)7v^14P5hO)eVui6BMJ1< zNQ;&qxD(>K^WNJcvE@nTi9*H0IVCFM)AukJuW=73D>aiX^w0h%F7U;2NsR)ePL zqFUB@fF*n$$siWb4hd~!pws8mCUHSFOS6lRBaPDU)Qdmck^)3oOiwF=E-g&URd~dy zXu>2r=Fr%jNe|`DVCDY#$v8~wt zrj@mGttBE~DDojjKQi+soIgp-Jgc)_n3={_1>`J0TZ~v+Q|&4G2$RG2;uk-U*C07* z4O?R%c~WKh^5r8FJif_%)(k<~oSolp`K!-rGfSdJ-2T?b-XFL^P(QnZ;N}`!xs@{- zyla<}O~oBXD>0vHwk;*1Pv%4`dK!HEaf z%8MG_5bLf%N9Jw|3L3|#%1&Lgos?KVpa91pbr7f!0+y?a+OYwHedbw8ZAisTG=zeS zUmAOQ0W+DHYAP$?stX@5aadPSVW3=~-jrXrDtti++hx_nC%|TQSbO?_bbL^p{xZu@ z5<{7^MNAr?bOn7~^Z9vW2r4EL(UgRW&Wv96pX0yAwO_0B>xfjn`m2=0${%4T=?Cl9 zfJ;an2inj^m=Jo=DT!X5p{KCj(dMX`(>DsQEV`&eyO?G>?~W^`A(={HiDAovS4E4sZ$@iIKN>$k3vOwXc^}K zBr#g}Km|$<#bff5v(BP7r*5aSEsXv8u9(TaT;|&#ruiwJAvn)*7=^->`i!n=_72@E zA>$Xy&Tb$n6#UB3j1O5BB-IZxe=CjGidW-Br%w%SZd)-9eCs;pe1GnjsAR>V2nbxJ z{e|k6-j`tI&vos>b(I+_SM|o2$~R;hfcvEP*AV=1FV2#}*drB}y3U4%8ZxL&NcWR%{^V_!D0T+O ze)jNbCz~TBnDy!YLHe*wpm2O@po<;Pq+}I|9AYPbmSIgkxqjipg+?-+!KPuK?82ak zTM;u*X31O;&G1<-Gi-FM4mOUD^x!x9b~{CIO*d?i`h;fWIskmsWQEmw>LB?XD6iAj z7ba}sO*k>v10pi~rB~&WIqh9Hqh8Dre+E>ULSZ^PqboPDm%9o@9aGg^uVnx^^VN#) zqqF>ZXws%a{?Ztu4zbn_`w)EPh#I={%HF=)A= zi~uaSqXjPAP|hjv@KKvn%&RxRJ5`EAQmk;VLv2*#LbQ9*WVVko*2phMJSo>noI^Y- zjD+li&7gQ=?vKd=oHF*Q2JNEy|p^ER-R%?yq@VGG7S$ zG&W{V0#kX5rcMSzErPss0+1977NXX~TO#F(Jk3mq8+KXwonD;)5~=IsGSGcoMyJiz z2@|cqd0vE`ApAJ5>8Fe)9wtK5ldEJzF@@^6SeQ&uYMNUCBoNmzuK4|N;n$d17k$B# z9N}T4T(0xOv+eP5&-B6)< z4k}tw8sR1tMg2t6>~bS?l@8*nLsLK;^Nap!7kMvjGM7b^985CFU56`?dSCivO2P-m zTU}ZcWqG$}d-UuU8S%eZ(<7HSa&gN`4K+p_lYui41#+;#X%zq-GGRO*T^7};^+!9mRcfoOyIR~1vHJg8Umt*opjYil2Z z8H$P;Md>#;#=`5AC+r#;`MJjct)>fRZ?gHel2^GYF)?xa;eY^U=Eb{0k}2XL8SawV zcOIc5vnOZbUN8R|Btl}zr9vk#tcGL)O1QZYPh#ps%^;xC!)#H1DwQ9pOVAxCXCZ1c zDbSKg2+^cBEUH|;zIK!mC~Q`Y_V%Nf1oh)>%hmhYmp&YbkX#Q15rAD!Odn>>K2BfOC#R zxx|pASkGO(ue=?v-OHLOQZoTA?eQwg-&2hxTMH`a zsZG-8^Rc`?E@pH^1}Vv0LojI&^)cgrDmV`r3LAvP;NGhZ9;;yf`GgevDbU+Mb}gV! z7;Di%3_KQL2bD2NuH=qP%1JGca74&QG=WirT9s5yC!dHAfp;bY^~N5*uLOt4?{tyR zDfWXuHPNBm76EY?H|r(s?IsMC19fxJQ&u+p=l?h*|r#bX`LxyO5diHAbjXD3(0$hl({I1BD z1bs&AqlUKXBKAKb)}i)F+1hSvz!43Zrdwaum%CH*?LJPaT^Py-5uoBF`2ltabIOcA zQjB=ut>ztu_|PNe(F7=wB{B^Bjb6{5f5!`tLnhx;Td|Y+oQpk;$7C4yp+Q;jni8On z3e~bRb#NFA{-sDVP*9UJ-wDY49JG8t?*RtY%ohV$T+y#ucFJ=%eFY)VA^?n*S8ZlzhDb`$dck zrR5E7TAzToB_v1!;4@&OrYm}?RP?=Z6DF*r zScHh0;ndmMbF9>(rvUt4PCrf8w8vbWfY52>YHFCT_>FvEL<{{-aWZKzWkn+3tn8)$ zYRm&>#&=CJ>tB)lqWkCn&UCW~I7-drd%Mf1o(z0b)^x2eq0#U)r`m6=gGaFQ@mH!U zhxBv#HLY7Fs`VrEvbZR?FJt8sVhpY7;Qw-j_|p5NIvhKznJ@Rlu;Z`4UhegN7uILi z!h<0ped237r`vkm*-=2(kGe)|iH3*7TM@JO^a~#1?ebFN--t>G=rYy;A>&MiYb1%W zfMTEKqu}3ef%*a!5oJu(li)MYsYj%yVJx9jry_K%QuOlR&=S@JQZo)E$i{;xr7`ijumM#=EK1uUneS1gJ~dHyLJG^Mz?5jDq^Yel1;J;%I7$A0nF2&=EMT3 z7t;t4o_x!;gi3o)!b?deon%l4V0*=eWgW_@*{AmJdtCp3?5i^Ia+*MnPn-$QwtG z5(qLXnTLvESQUf>SN_VTT(Hik~QfsSm@Z%w{iY7Az=XXK7Oq<4YKR<*GW3TMRoFW=JmtP!VvBb zisM|EB#NzBg#0(?ywg+TEUAh`wSz#~&OE>SHJ3{+I{)!?<4yrY(>V!`JJi0mb?_?+ z{nY`zQP-`0j7^L$C6ZP{0iI#(^Wem!s2mE6E-M{>qi>KJ)$Hb$rDo!EbRZWpZHr)Lz8cLp_e;?ao1JN4tQ_41 z7-GK#6B)QK`v7HLzLyTOLfP*;V-g%0gk*sbrT{+7?edFZ4O$+|n|783*{2%U+C&cw zJ5ypfGI^xfc<$YJ1vEom_ocZeM#&`@A0arPbGhH%=naqu6bOnpnG`YH_`3B!L5@<_ zO8lfT9EyEiO1gkLGwXw@7M1A&LkEHmpI=)3=hmYr06@mvm`^7bF6~+wI7E~xm75sTLIh|9-$OyEqYuT@Ia z)CU@Eq8}IGBCYZrU{}DM@cr2o+0Xgd!GxA^N(to*S^0s-zgXS!Sv!jK%)#-+r4ax+ zK`q7C)R$LHK`YuZth%>fl{y2aspqokePBABt$JalR&X5_68!FA|NIF}8_l>cKxt)- zNg-BPdN92ov>tOor8NaaO?QO8fB?3G)?0p97#1PCtWU-25lHP1v*$U!on6o)4X%Wz zriSgSeG*5`6rv-xJ-v7LtS;d~{hEK=&?tna+mI&d={tN&u8G5}F%9meqEZ(y{$a?E zOjG&85hf%ZtFtx?*WZ;rYr-*fBZ58zf^17_DH$<6M%QFdmz&_G5~Y35 zjZz|j+G#!%UE0SXfFj=pk}%~~j7zl1V+L^li^&3~+G2G8*fN!g3+S#g|7j-0f-v!I ze?RsaGmi%W6-X6BrW;lGD^~PKWcJQTp%gYyluM8fh7YZ}8XTlOT4TZi3igKQ)64l^ z&{16bu)(lXi;y|){?@#Ew{E`?ov4w-F9B!4rCcIb;fj+L?m2n#dz07+gNF{4IG>sy z&oFLgggk3tb;6^fQhna>+l+2`1!r{{9sIu}ipzhKCGSz^NP0nH&$9g4dMNqr-nsJv z_sJt?t?&N@r>HzDyQkOOcYt1n>~hq2`Fm2|H@*qZ{CN=z;N?x-UV{@RMvQx&UX zJpy&h`G+^#aJnO*05#P{3b_yy6Z3MbtSA9Z&^)!QGhMO3vkX&WLo0Q%5t2P&9__(1sxNcWwf6^S@ltP6N!{LZ~x{W-#NZ&+op}~GdaYG z$cYYZ#Qb;7Ri$u)T&5l>{&hjS&Z|2~Xap0IK$Icwavma)9El8un0HCu;(UA~YYEW5 zt)a_M>SUtO^vqqy>nOmvDUbzAh+Ba)+D-#KUt{fTitdx_xwXx#5>yGw4on34vccs! zj#Er^97`_r$+`L3fB;Jj2tiB>_5R!zCfkXM&w1m{7!PApi*xXLdNs|+sIQlj7%3e! z#&Yaur-oFq{??sfehJvhha^9ezsEo1b0uvK+p5%L0~TFojM8?CORZzyDXplT^;$l02eDSu6q zOZx{2pYbwi(m+$!;0OkT@IHKQM$CO)xY?vf~K< z^>37}nv6$m&V4PjA5lWMTO+#<5+%%?KmSr}Z0sq$94cn+YvaibQ!T>_F>+eqxIRF% z5GOxLoD#IVC%q=)v?y5>OexEi^MJ6wTi}vq4qu%=Krf@*_Wu>%#J=1r zU{0&hMq)JI4ZGW|x70R?AQ_&MU1H&t6jpqB}toQD0qh?fJH&vrC-HTx@%o?8>`9 zrrDPh=C8Fgs22zIfKZA#91ziq+>c zYA+k~@S5JYIS9qcTJ(@L`R(9W;I1ETwTu&uAQM0o*()`ER>IdQ*~7VCspAj?s-QKp z%xg=)%=qZ|Tt#j7g_JgN^`e{Zq8&2O_|%wc7PRF#;I^78?p9+=+|_1Ao4p{IpPLfV zk0<0qRG<}fAFu|w75CLLCA1d90}?Ep8}XKlO$?I_z9a(Jo*SLdr(%2K9*SosKf5Sm zLUI|P*Yf(AxTo7P*t;%a$X?~59Gj~>s3 zEQ28wouwP1y5^re&mz%N*TA)<2%r&nmgb&o3tf~J2k_%*LpYSm6NT6}pLY^7Y2s6Z z8nSE_4x|?tMzqeM~i-?K8frtwwMTR473!-u3t*y;&iHi`Z(P+&i&owG| zBO!rN=F6~D4OFu!&z}5M4Lnrfyuv+5N;Ejty6H>^OXX`j=&(T`o!fi8fIMkw5F|iX zgZH&+6@LAC3D8AzkFnc>rC(}XFNy48Fd*GLn$L;a?^7=VPOC{MTn-rQZgg&8}d>S9xSCublw~o7#V1CV1AOw8G#}Wv7M5Kq;$0v1x$*B-?-78cGzV#*@USX zWBL{F>{X_xbJQv#&oG9ark@^`Y~!r`SVGXqRYl5JtP(>cZjln;Ia4V!?X82y>W5-$ z!bhYAvi7>cc6lJA6z5V)*lu^JwVsBoRok{{bLvIctcz(9{H~k?Ks<{LCt7Z|LiU1i z;nw~i$in{|7+Mj~d2AAmM&#W30gyu8mexY1yyry;HSM{33148RAU8b14<92f6O33d z0U#mAkqUb|>~MpPqa4Zprz=aP@?%4~GRo6b6u&drzgv+2kqW)}oH%{7#a z+DOiYN550V>JyD9QtC z3<;%L79m#cS4ub!&dqD8AvVCMO?H`YgtIeEr2dLlu*pv*22HJ^MPf1pE-?CKet&xr z<6q?Rjp|+EHZyridwQZ*y|jLx=>nP=FSNE(&7V43uP$iIdw;VZbLQbaFQVNbkLw11 z?BpjBrYPh=)AC~fbh&ja1GPWxwy;Y{4#AR<#t}9+hy_37;*#LZKM1agGLluty zz~pW*L*M{Z`yrQmfyPjy;Zhn9;x!s8vv>~Q$WN_D1Z~0XAprwBGo-#&!9@5qI0;D>1t*i{FCC4V=cSF^;XHzUo_TC9QnfGTA@*; zZSgr!e|bzD4#EZA!`!%gmMNb-6(#X6Xh$s~+Lek(?mS2onMSi4-DLB}roF%uaZ)Pu zsHE|X2XzK*a?h@|4)qTDJ`KD9H$h8;OUz4f)65&u1$EO_1HA8wMS{*wUrpv?U#RQ!{Xzu?}I2dV}wC(eP>U6Q$AcR9&rc$LU zh{o=HoNvPXM;Ny|cDa(n@%G2w+~h-!3Z(Ow9tnzE6GI1$BY1g>=j<|emYgNiXxB3g zMhJOS&rcmMrS3Y5K0FrP=g{Mwgi(qON>6pXALZiyRyn^oTce4$S%He>He2Kr|doOBG zfiwbXdG5=j36&V&XL|02&#mOmwaiyCRgJW)7P5yDhWMnK@HaG=vKE6wsfhYF+60lW z1}YI&8D-N$Pew>Ei>AS%;g8lhleJYL4|0c&MX9I0ryXZpR>1t81ZK2a*Af==OJExk z*R|O2C3_yVota#gffe~$(wX!Sik!Z*FpB44;#?M}}S4!2S zq~#nm0HBc=70IECpvMwu>THWal)cM&`{jrUdyphks8?w=p5YyjVb}tdK)!G^>Ii^E z4J)f~r}^ESM?3JU8D@Dd2=Tkz4ef!(7tynH;$##`*@c4}c2l^7Be`w32R0T9mtUC? zk+ko`iE7;fC?cxkD8W*eaHLJE2xJAn=H%{Ub^(G4I z0*BDsUVKx~$WH8e^oiEA+b%*&!4FxD!vX%N;DqB4;5!c*wCQ7LEEjuo!a3cT{xvBb z|6NWt*DWW?Uw#8Xt&lj?t83=&-?2LsUvIpiIdc^#P!TbPq#p^8&cND8Ho|UtY$t6X{*Hu{84XeII{k#|5*j(E9^m zL7KmsyQF_noyQMf|21un5S37ZR`wglq^wpn}SyJHn4991a!(=#}@ zNaX(FVX1yAEPN?xK|}mImhF9<*?9wioGtp90?N#8hwP(upJyy zh+^s3++2_nJe4Br{O*!|>|>jrLEeAxq-C-J`3^E?OcC~liIU`nu!pU|NXraM7-vJ? z6_&Bhy*Pt7lu1rpxc~993Ur(=Q8C?s>e-Z;5o0KTB2rhLY zMT@-c^S0tp&Bt>iwXW&f%>;%<2<{|wwDkH=Kw?%ICxO&yZ|uZL0oivx=Q}>Ay&-lK z{Vo_#&qC2RcN-Ey`=gSNfKF<8M8qU56*6)yRBVkW$G-WTPvb88I46k$6$K~z2U_Ba z1Zq^-F#}K^ENk$Jr^dW({jGEVfO(XWy$20i!GTw$t$&#ah@bA_fg|P>CS^-H8o8R8 z59^S_OpHLgQQ0t^ftgKi;OF2-t$X|BmlQHKwe`Q;5LG;%JlEdh!HCaar{&M>_$OQ~ z+uw|uh80ug5woF{h{tx8t4&ECL;+9PKzx>biBPW3R1$S9`<)+ZRMm%Ut>Yc}gW`?x zznEeuWFzT{CG&xkYAq^Pn%k9nv(30`~PvfAs0jP^g1_X}q=aX?L zxy2O769t_@LST~Rm`@$S0Ce1xsPVg^MN11$BUHPLS=8ECIm5LSk)!L)+mMUQ$(xTK z?ZD(FCNW2g*31S~`tW2%)Zjf8^g^Q@mC7|8#1b?uJ4IU7vK*9q z?j5K^nU`lyoeIZ}1<3{Og;=eXl<75};wgR~Ad)0T8!Cu%RckQiqnc3o~C;#F$e^!WAin88g~`?^q+YU~t(a zpHvNxlzZ#8ZR&HV;br8n5e@!>y1QBkxS|7Hg&2Q=BBfTz;VEkcax-b}40gjH=FbiR zUCW>XH9FYg<&;p!ii3QSj+us3qZK&xQpVETZ|?Z7#%gP&?H=2d_rJzYKoRFr;$LZU zkT>XnFHpL?Q@P1HW1_Hy8PPa7#nue+*a7XQ5jW0tG^EA|$Km-u+UZd+O~=LBUxWK5<72EViv#(CP0c zzg}Eb&;9SkRr}cZw0%Eh?`iwL7u@)DErF!xE9zUJNkygaj0 zVdp}l&8nAQKWSr}<%ru2N12*czLPa;_>9I$UbpAXu^j7b2`8CEfzysM=@t}{)em5j7TTWCePRKGWfg0;D7Aa`8fjvl? z{rtp8Q!F)YYSw1k!RtvGC-ZJo_8aMl@^ocrSg{Fd>X?_caNxk$$TQnJP(s0WTMS)b z?b(X!gm?PZU3e6mHgAPJhm$BGC#MhWly(DJr6JIMhekBCDC4xjfhH8=kMp|{M1k4I zobs%13_7~cecuzGBp8xaBiY6sazPsu+~|W+#`9Vu?;mpY7ZeT6prP2@{;M^vAeNd? zFT2MbJ9c>YPa+pait}aCu2A8^?XA}u3}XLS_fd=l|El(mz1P2^^V&!u$=j+;C54BNupFGj?saU7WoNU;gazcVwGP*D;@GwW&_-vB=D-UAs0L z*pk*7x4K0yq1j7&(K7tJZ!(Nh|L3PbkUT0DYO=Wp(CDGVac+%v5R=2t7e8==C2S-+ zn;Dc~12gSGoBK9c!VcP4KouDTLR)2KJ&kKoWi^p)G1C3irki^tCg85()?{;Vc4$E# z138|swTuLj55BasTEs7U)y1Z=0^~8u{;{Dh4Qy?fwzFync|qqHyuV>NKX_2;Wm#gS zUBW+r&8bg90sg{iM-gQJ38&PoZ{EK$n53!;XJ;$uREin|rpR0bprU)p8dS%7-lHc0 z*^Q9tgynv#2jeN#KGP{~EQ^zdja)jC=$^92IlUNGMe-^EKN>|q5DbG=nn%i@=0OAY zX;Fz(lb0a+J#tb@=XhsSY=oSoG03gV1a&ct<^hLX9lw{#%cqoI@eAcgAV zyYl{<`{uyOsfevKelhnO_0 zMD&)Dk5x6}Q}7h(*O?LQ(zxHq<`=LgCsw{8t4TrAb+0jwmIF=fDJeGzdkTxgLcJbl z%V&Z5F5^&|eHYXv^5&DhLAHj);rlFtZ^O#^5`)C?o@)re1MJX#{P^*{2^>p4W{D$W zJZ>%cz`=KW?_$Fs4AbkFey}=b6fKq1E|AO>*+%Dijs8}3I0_97u*ttl1q;OCu$`yv zgLm?y*h9z~6G%Jpz8YUaeptxSF)Xsp7Yv%O{*I`TKHIo*B`e&O(O7k&+|<0!aqR$2 z^E*`S1Uu(QprIP!i=vD!1KUX7YoiyVXCWi_wFczHhLniRUz&X1wEK%k8N!#h_5F$W9vhXU9tRq zR!{XV{yp7-CpRyq3Npyk2EdD=gNkFqZ=V&?ZEuZlW{vn+=no`r5hQ2O(@KYl#i#nM zNKRqFX^S3PTbWW>GI{nbc9w7|T9y~^cs3^=yrxRxk9_zhyThFb1c*LFPAWGK3K?Bo zqMS`VYI}W4*-e@lu{uP*(jN%hq3%#&O0-c0;^cHOEVPq#&@vq)<>NP>6Bj^s;Obt4 zqdnfFmZ0I>2SIIDUvYGZC zkexAifU2S(VFShKDh-E)AWRYXLeJ48RqiTq^&c=Ty}w8M?|OIWo4>aL_JBF0C!q_f zN{9+brLk=W&e9qa_3*8QEztBfAGQW&w8@RLo!G{3Gb`1l$n>y{9N=rCoxqA1)3BYF zVqUXsF}F#RCT+KSpX!?GI0dmiM`x*14gQyuVa1;U+c?D16&l1JpmR2yI@zl1)YRO} z-1$c{qK=-&bb6&UwK@>PQf!8Z#P7rKHKEA{fw?7ZUE!S)E^v;vP(%omyKC>o(sW6Ry6 z93*#Mz!m`NzeV1yooD*84wfZzD)}|Siqb>MB_tm5S5M3;6Z9<+WKxnN_nJz82n&+GABSESk=JE*&RFVaq0J1UJ|^6f{QYbzGEOucHMKK zUgJTFxrIBJH&$46?ELrcXN<$>A@H|D4mG9nxXSReX6-b0nilGqmu*I7Wp(_5)gIFM z0hMda_PbLoYpTp?b6cU3-j&4gT0Difd|McQkl`g&8s$D+ive=FQI*v~{k58BmWR7t zZ%{(epn^W_+;VMu)Ge>|Kx_r*NVpWFFNY6GIqv?3v6~rC5NkB^{gcWRO{gr&%GnRc z;QMp!=0m+O0!1@Xlp6yg!9_Na$V^UIT%)uoR*ZfZTcUU{l4iJ3Mvf|(f`{@thT}kQ z3<#*;#lTlXuE(YH-==M|#1WZeevk45DYT2RZr>W+U3Z|x`_8P)Yl@kvv~m=PjA3Z} zOzR${iiW=kUf0?Zr=Hc610@OX`Hd(0U=y2N3WMJ6BFe}kamJCDE!|$v@bM$%~nK>WPWCnEP$kiTZ#)|5yBCWmkf9m zm?zWmN-m`}2$R}-uK`mM%i6_OG^HbSNip6kwg9HuOK7?QV#cxG$WNy2DaZjlX zh`E#_S^^&O|uT}tg4ru4XcL&RO^X3)LSZ*j=+5so&6pTYB5W}q&=td zvPM1waVg_937kO$V(Q+Y5>{^4x*qBp8O(O6#a(-C;(C(vUlqa06}hLInVEpa&lu-s zkRWcrz5~5WlLT&#Z}x&^i%`5@O#E{g1%SFrZ_}lt^XFSAA4Mx_hMjp4U;a&W0;n&v z$)>+&PcQ_EhH2ng5+tHrITcso8jVM%ozY%-Se^cY7X0|#HiDG3rKw-+>aJF0ci@Sx zIkb9{8d4F{a8XqfRxul)RzCeVn31Y0J{rkf&T z@$udQJEK>iOaM(Ps1vs@=KBC4?-WM;2g>~JkrO|Vn>30FxDRjx%PcV!MT%x}HEfFB zB%JM8J!|{b2|9BU9jb~Ix`7ACFOgkOOzG0x9B4tJH?er2BdrRwx9>$#;Pp}4i1k2D zuXzO3HmKMUWc_p3)bFM?dXYLiu)d0oD6A2!c>A0SA132qGAg%S|NEZFVikZHmyS4e z6649B&R-BA1#&>eGL|plt7MQngs?TV`xRg=k62FFjR_Dk;j zSTL}dtzG|6uRodzTMbhbcDIF3JNf9WyH;r3wWXB1@i<%@NLcFpxicR&7H$O@e?T}Y16hX_zE!!BF9($&V(7OLxH!1Jv~RQ>w(uRxt@u_zeLpOI6l{!paSYTjz& zf~1cbyOQ3M`nZ^^NLbdZu5HWNS*e^<%p^+T<=yS^1a~`A!!ew+z>NJk_#i(l`7xEK?AZsdFL;U;qrKz$(0Twc%0K9$F-_mrje8M$tBf}+#h)7NR1M&55 z^*(h09pWYFJoIWc>;z3o4e|Ai@9S-k&RAl(cwHlbkl4gXP$vNBVucFot*{7gW5=Uo z#*SrLi;XfG+u9i&PZ(&lxd$q05x4Bz;D6!7A-=c=wp%tU4z9Qg7D_QQL5SbSD$()E=pFN%zk#iT+7n~TnevnGc3zwyfkrySz>Bl z&mYSbm+cfOeyEKN2ek3+FLPo1iyV&BH*B6uHsq%5%I)~QMDH*wzYDaQ$?`i>~ml~*u^ zTTTdO)`TrhLtibhw%@GILDPN&V)5fJ?V4aN~*rm93vaNs3Qe1(EU88 zMv*g5R+bii0IpW3S z56Ba~jHaZ30ryz->5Bi9DJARtwfiYW?+4I^f%8{^4oMcwc9KJD`j`%m0O0xn89g9t zUSkSz(V(&(0*-x|)y4Ur9XxuiwATBPvfGQ>)c?x?l-A7&1QuVbEMHOOgt!xNSqzc? z-DC6J_}6AJ8YD72g8 zX!wB8d?cO#8@3;1Kv9}-j3h3SO7LJD9vHBvOD!$@{D5mt{~;V*mOoa6x;Qku2ZE@9 z#}m9fCfG%Tr!v?LbsTILfy^3`i4W}%QpHVQy%%n;ZN8HER7g~H16Z86q2k>T>Uf@l zNbPj^`GB>%ch{lH&}(PpcfkB@4Du>3&}Je40cp8zzi58KRsp)q;ppqtbjC^e1$W@r zmF8yA?iF!1k+%^A@%m!|oJWA8s1we|X;sodNu zg1!DvXnnfy(Qx{8bcK7rRN{u~8KO>|wf@)SlrIoD@*v=)_qU)W)|3dK_kKQqQ+vBF zMT3?}nZyH-&W5uXYZLgPR6Y8dM~6O8H?fU{q64??|wVr~29jh7_cgq-bFBw%Y{9w3|(ht9RZ(WK%oEnpE5~ zp9{gT&zJBwR@R>77*yW@e$oHLN@r^=Mxl3|wdvOtwkf1ZZNcDO`S8TM)frdRK+Q4! z_#>M)H@7q|$pr}h6k5u_hli@$b&>^+A%Fe-_kf2D%vXx8ribk}@1}+(fkgYa?tPBR zg1yh+K?5cUQ7mD0E-ql}aO<@@yz_D;28E03^{%-}+?;jTFz1UIeDp^qGqGWQp?mz)^?5%O9s%x=YPkrOuQRuvh&?8Y?@c2EV#00NyjRjhj z9n_|QX^bgU8AsK+etqQ_$*lmLo8_!3$*Id6|x_1o)11ZN=(6l50|{YT)# z_Et}~tH0HdT^%HaEjx<(poEt@{eX7`cSgRb(lX>fS^$4b0n~3ARp|Y+BoZ6=NShp6 za&q82DG(@tshzraroO45x)bwegxxZ8gM*&_j@DK}FFH)F;lN38m90I#N}c4Do0-J+ zhVp=!d4pcFbI}~BG?mVt&)=MnkKs^J&@^aSIwb({EUopx<$G7W{zGCGc@7h}qr<$t zyW?XW)Mjk6Dw(cZW~d}W+v{IFsEw(jh>a8j_sHAu!%u2k40R2 zkG<3QCD7Uwi@1ehVIxr4N|GT#5%cl~PAnY5NSQJA5e9hx%W*$7IdyVsJYLgUfo?1? z2fT039&%v#g}IsIRMn7x7p-1h3LprD>dloUGPAOVwy7Q6VejfJQ|q8$)i~6~cUwTO z0%s8h&XJ(}UmXp6gn@uIHvWeKD}`8{+SVXvb7Squ{&Urle63!++IO9q&V2N}x-jo5 zA;A?ORLQcpQeBzp-a*N2Y`}XE7d>x6r~C$3#hozLk!Ng9&X_Ty-c84P8@fHGRyOJm zN*EVR|Ji&(k-%Q#1M5wq(lx7Ay?XCny?VWB>=am*th3zT-=%u(nx38&%*`= zX`mHHW6=ESHzQKqmwrXI?K*1O)zPk9m){Ew*(cUw=Mm2-fGzeOT zkC{(}29vUHShYc@Noo5cc+tT*4w|`SkiK8a<=3QqR1Bb4uE(3>C$y5Hd|>O=Z4CmK z;7$&NET9O{B9?sz3K(RrX;e|m**tybPpmiL(ZaPUx(k#;jPz=I94qg=&Ot70X*s2| zQ2w)LrMcA95E!tuT4G@TPOHuAP_pK3wgO2jTEX)Py1>&$Q=&8}I-*=HfKxA$dQ!jLSW^c$%x9(HupQ| zy2_0hiMNDqTYK#&Ao7pnihxVg;>77chTgov6!N(pHKG${Be6y4vgbO!tBbjGGul`7 zd@%``t5}8Jz1QyA31}Lk8A$83nlIhR#-)A}C_)=gxNj@BL#(H(V0%&+QU=6Zv&#If zCGD)jOEx^W2+2t3!P=gSd1q=bN&n0ME<14Go%>$)F8K>DQcE481=S2ac%Bb+`V(x! zDKMPQVvNsd=g*gbCskvr8-YLYQ{UdZy4GXJZ->?dsIr|^*?w&rK!%nf8*I1_Vj?jv z?wcFj$Du`+w3BXo|06p##e}o7vv{{0a5+^^QIEwhuOjv+IBX?9LhZZA*#+$O95YDGRl%toq;cXF`|=*+4x@5lIZ? z7sMyJ1@Gqb+G z=vgCbU{rWxo1PuhXAb>trM=`ruV2n`laSoKX;r~AI_y$zyYyPxj)T0K2O`xdS9%l@ zzD=#BStq3-!)MmCVBcBwo)}5In7+Umz^k1G4H~p$zpQ1_TQM{&4{Rx`5uR$dx-9KL z7>}s^_1Ga3E^QB^gnU&yt2`rDM@AJ!;^q2$E7-4AHPU+ewzJwZz0VEq9Vlqv-4jp> z&oRb?kNIUoba%M^|tLPZ-6gWm+&eRLDLq&Ex257m~G1w1za9+ z+>F9~oit2?LcQi~$mnjk!x{j2oy6Q9%%mx8Lf;hUB}6P5n%22#0eSs~CcL<^vVZ9E z8fA-pxaZ=?wxeT@s-Ti(@OI9wN&HPh*cGaj-~%5aphh8D*wAx-=_ggwE2HLxSDEcb zMeBK;TZsXwYEfLUDp;TcYaCW_w)ZFvMl;z{B8u!^s!pBVZ4S7kpBm1rl&E)}^kIU9 z4kH}B)-us1FDhUHJ~<|3Q>mT+oUjG@garLvz8udnlwT*E^M5L^tSm-;BJNIuu@kcX zeH;8mpy!p0ZnQjA{IbR=a7UDWOOt^W7kWx*F2qQ^E`on<5yhi6!65WlpHZw|9c({} z9T+h5m%Js^Wr*XS6{Os`j~lMPK2%tNHTeOH{!?6{F=7zGV%m@%HEj+%qJ~n`lng4f zzEA;qeY#dh6us@%^(!oPuUhqk2$GteR)urLJc+fAHlR2oe>v{eVQ-@uX zNN8xqB4`?4x2n)PXDVbKFmnZM+~Vjh$+E*n)8ZBtKSP>99+6W_+F`>u6^)3^V<-lU zk|4QVQ#M(H&Z?hK0o5Xk>TNM2mNt)Fa8joS8#r_)L5ebfmAOamPC&?}3D0M&KJ%C$ zXJ~R<{}UA3n%_Vs+TWrnbCks9laKOR7#hufJBU$%^N-vuHbjqiCZ&OHe%}|KRuc@5 zhKF|{qaGS3%{Wo^Z4Qv3>wPche;PeW&DsTxgIA4gCK~)v6Uhzv7)G!R(pMRAX(F9i z84=9>NK$S0&UHNN9-rn&p4bd@LSPv9uz^ujj3zhGCaKH#@eGnN+rWfiey=GF5_1y& zfA!Ul-uywp*8EQGGR&Hs8Kg|5o*>w_jPjFgT}&{b^Tst@x&Hm6YcUR6bsz}C8rHK5 z3){wmq>&2;0f$R|%f!dir_~wezW604iJk)p$ox#7;Ol&(4DOuimXuq;&$$cBZF|%{ z+OA2^?t$oLB*|qgv&4eQXm60WtQjoBzHyXt^H7@W0h&|=6R=XJFXS|u*Og5V*bmY}lN~cc-s5gA7>8X~}5@GZ9 zWm`Zg@YzM6ilG3mcZ@N6)|Z7{Ps6dS*&hvEml3~wnrsZyc%HEK6@?A zVO{NpXUj_zDws{lrNni-xmJhlXP*KXNQFnRAkb-3bF=4B#yWlgHD9skIX;g~8jk)Q zH+Bm2VQ|zEvf`wiX*8wFqI1GGTsLy5P zL}Jr&4|@KgZN@HHw|TQ4=}($To;rIee4@uMh1Aoo_WV9lYJI1`J4CTP7JeYdTy#R9 zFa0tVS=8ON7F(d95ScXwXQiT^c5zXi^__NV+&wc_j114M1MoIr&qcqfDMut|MG)`$ z{JcBdmptI;bWiqb5_IM$)($dU0U|qQ8R*WyeyAn*OodW8Q!^9lgM#Zr_PzxQe3|=sO0pnoe+qrj;ufpD^K##{~PH-JFGgp)vroXDiL@p93ARjsjy3Ur7T%;89^SeRPF-B>1i6LUw^k zj!rvHijyA=D=B(KrugNae{>2W;@fVR7qf1=LhiO;WgP`F^h+Si7H4hU|DG5094!pe z#DaWm4Y%6QH`lz~h(n!u-&nWb0d_>xT3iwrI(CrZ(J2oU3Y^mmHLdi6?2x1Wn1-_g z8AyK*FqdHY2n=|T-wmzz<)x>knod1f}WjnQ#dt+A>7 zIoe$nUIevE0NstaWb!QKv2I+0#Jkkip1UuxszC+eyJ=#)aqihZ|NZIdSukuJkaKBz zhDND^d8N})qnp%VPYX|E!-=e{tOTh1n%stqTE?g}3L zHms(F)GkgvO$H9@#~yj$)<}{j^B$d?H!@0m1Q1p(d8oM$Hu|lbRoU>{x8M8BqHsHc zu#@qya~EH}B^UDC_V?aS!Tx;PoM%4`gl5#X^yXE*YBRAO2Ku2_U%J;ScP{;IcjDM% zlL>a?KYfAmK((LgqZ#u(xyUo6@kh-}s>^Q#=qw1OkSI`zq?Zm@Xnwp{vSB#f5JeVi ze$Yw&a{TkXyLY99?XKB2X-M;R_v{Tc167-g314Fr6H?sMdC)exVOA8+71a7qohR`C zprG7M#JqGh7gTW(@v$Pmr8u@-&6DUj)u@UNOzg6kdY8NXF{m&-FD;3qUA}S6CBO|S zFkeWeWmN$;upFv(6h}$=^!EiMHeaUW`?|SYw3#i81Sr{M z0-jXw#QFOkIe-%G)XH+~MF=@UA?*^m4X9wvba!tUaXNYvQhmwVHAA*qF8o@6>h=oK zB#9LTgISlP3@k-hfTMC9`EhMlJ_h+S!!dtdZ$l-ey?ca2n|1%=$b zVnx@M5#G2>hW+cg)&>&$CFBSvsmfIUg4=g@2~ZewM9_81p9~497HN z%moNxMeloV<;5|&#TPN-`f)8<{|}YgZfCR`he4_a5)j`=kqDwic^JqJ2u8wD<$Re@ z%Om{1;fyxc6s(nSrcaARv7D0E;jqdw@sTj-$}YHNa*8qKz(GB5 zH;03sKYrFOz+u7bRvX3$%Aho2YOql%A*2IG_uqEXflDf3OcV@4zQGwzf&AmuCbTog zwBwrjWV0s@`ZVg|$wUoc{LiM>=QyEjK0-EyP-M@n$8(YchfZ#Wy>OBS; zZV>B##i$hjCtDFsB5{`Gv^?2-%Cl;ec;@H&gcM>WScw@{CK-tz=A#3tPkC+7roOMq zJN*fa$EW9Y>fXIOip>cZMpJe9t3I3K?LecJ5r$+J?Tm&WF*Sf5@nc23SgGu)5={0h z?6WsGdb9D}d>#Y@hC=}`{e7!90{?P`Qc_8$Owe3H7JDJQ3H~TrEC)44P@T(aLV!J) zy6LxRYg#Iwwx}(NmpJ(=~}n^i=F-s7qR*DSg&pCwuj(`mHf!g2*J<=$sL2lAqkK{ zYB|p4MN~+XO&SG>hM0x6O7tnY*X}*5RF%&ujKw6O*x&)~0K2B)l(7htzpcB@F7+c} zo(CL>U&k6yBl+_4T4dIsX;?W}fsRR=*UGSUg@-drQWBpebc{aw5y=O)xf?cJP#3$` z8JZ5~!eq{Q_0ud|28E*VCc+64z^?{$453Mqu%rg2tfi!TjykAe%gvim!S~#~@1ylD z=TZ;(Zh=Y&c!sj7IJ#ygyp$#q%A1=r**>&QY13$TIo?rQ{B^hM4WIcrr%VbKRMi&x zhf{i?dMuLoE;g)Mb?BQMFUvU#f;u0U;&w~3y%*=? zjd-I<+8>>Hyz%z&IEJIn-QF6wt{n#sN8k-rKDX2~5$hgLFF>G+#8a>mqfLX~Wzs2f z%r@j^5d8Iof`Wn&o9?VK++_jQGmG=Zw!-6}7xu-x0KJe*&mbqge3wSn>;zD>3swGF zV#W4hZD+p~8B?Qt3Cq{#P{#r!plc|o-)2-9BLGv(hQL8D-MI0_bzGAwtF^j8^LXg; zw11GaH1TklNlHqus-idZ()q09u-P!fvpd2dU|~`NY3i`snQ!&TiDZ*2U-Tu4{>%IrjpA`qIuNj_xV3YoRyn{` zSPrwgJSo}LknQECnuV44yIE@&TNWOw|24(t_A`BmoT3?3FabysrZvlYSKaz&|?aAft*#M1!4A5v>smeBgICd%IBC*IR3 z=F%(P__?g3$3JzEQpF}`YvVI9rFnpNSSPZbfQaSW(>HPLEgX@$NxTJnL4rs;L>!Y6 znea_9X2PjJ32#o|^2Pm&8lWiCrz-*Vr@-6guOr4=EnyItt#JZl`}=iID!CpojW)qPhauRZtq{!sC)xnC2?h^O?N2$qaeZ`i@q zZe!4zY3UUhcx-QkI!p0{q-qz<%+s4V^|PNv$H|i$ASxYeVNwejH8+>1Hn>&g-cJ?p zV0#cn@We8%t}M(hfOQu}H&F+ojSlsy7qx(xWYntY{nkVqVt&1I6-B?Nqh#tdSg!|S z;g(k_>I&*#S2t#Ho42u?oBq+6)?UsyQ-Hs;PesQiIujWcGo*VDdow(P#^I((6wG&L z(x1&+SWGR1kis2mu*#TU#_QIyAdgK(t2?h$;cCL-)7s-4i7)8{t z9DIzZdg{rv43Ix-0UInD3!5$JGY)*3|VUuO6mo+2$u zWWIgM$;jV;+P2RG>Hinz$LDkShR4iVG;Dd&(ZEnaII~^(5$)CXycuUHrMH$@>M@)P zuFfNEHmxt);z~ecl>FP;nlhjJLqgc(=y;NimpqhK11%WqgST{P%DqFiB%LREEF7g1 z9d;r^V(nV2$%L(Jlq5NIpa9?&h;%7>O_as!We@KDcLDdFAoM^KY(_aVZwm{J#v?Bl zlFYP(@5Q?xVK|D%QlM$RU0eF7IrQq_9iE?J0#oWHqokM8?gGL5&e=IrL;%1-Jy}#5 zMwl#vXyMo+J7Te{p+F=6rbljXlul}E9$K5UOn8x_M&be*yG{=u)k*q~7GUSvCC(Vv zzku*Xj=<$-3{RPad7h&)ZLNcg%FISeH|3T~U&|I?lLIdreo~ZkvjWA*teQM9Ho8D$4rP@5v^J zPC^(nqxReZ35KXAqA6EbT&d>Ss{*t-`cmYWHS@I?0ze_P&`1*A;K_O*K*RAkHE_f@ zis-(e&m-o&svyDuOU;WRV{TM=`Kh;hvPM>Z1B+}QNa66c;3%>qc|9A)chXDx8!Jot%p_FctEwK*G6B2N4UP)7j+*p zuOX{n3xc41YYbyM@ZhrZ=NE7y;0zE^IYZMTAqAU7q8Yoz^#_XucD?!NNP6hanDRku zyM}5u=4-b1h(pk7LLQl@sdnu1knRykZkcq3q4+Q|Swhuk8`Caw-(c?2v7%$#<-Q0oTK*66{@ z9actxM_wJv-+dr7RQl$;%qVZ9rA37Bf`rbW823kVoaa9hXLw_WvSr@w1~8d{y;e}b zZp!M?_twM5k1z4ispS(FfOo5>7;<14-qf639J*yoW=L#2Jj0R}*7xk$v%4Dj5EWLe zsM3g$rnI^DAqix>{$1va+{7OUbLW#yu~10&laHPtTO-Y4Zl$PL8~pfQ$9n+QIA}vD z4e7r%T=0{gE-npQrrJ!MVs}1Y^NZ;yU-aYGC&f*fGi%l>uRf!v$!dunS*}%NCd7rB zp1gZx#dc3n9?jNK-QLO~pTXhTBH2og8|iK3xdk?MhU-dtIN3XqF{tA!XmtyP05b&x z9{(|u51k@gd7b>LWx@voZe^EQQqxkXt_$%Q$e2U1M#j!23_ zW((?-I6q?3rcKk=y|?dzRz>qpsP1WJpd=DR%6-g4rfS=AlP(=7q z1&{I7gal)_-ta9w1%XM*Z-yaGJ^QCla1@w|s7y3;0Bsa%OvYJ5(7^mM_^8b=^{XF! z_AM*bUra${WCDa7CZmlRXek7*PH>l92?65h%wg7^i}&=)^FQC#-{Z}hFGX`ZnjAGW z?$V{;&CxY~yRayHjmh?6U8}X6{Cn-5%YV2vVO{NCTwT-J)SBd-vi|P{4d?CKJm5`i zGxZ`_Yy8oI{9=Nt*^aR#OAV2#YTELScYcan)1TmJG-Xq4Ks7|WtO=gmVYJg zEPR$ESANd*)sh8H96w&8PMxH4k9!XsD2Z!8R8h>z&pus)a6WBe&bZ+&g$#5!<0njz zaz)CVLkmCetC;S|e20Ie3E)2r!ry=Yon~{nq#^HXq~p}2ZF3gynrpuD3f>V~qH@JD z>cz*ocOE}3$-PQU9DD58F>=w)y?gy4r!V*QtwFm(4~O@e-NB(`OA5%Vsf&J#e}vlq z{h2onP7Q0Y@Yco~uh6cX+q3;%%4Gspum1ggrShG9*0{+5AZBW0^*QZ!^(nmT9kZZc zQ(U}%4Gy+JZepC6!Y{1XBd4og4LW)+E$fs$+&ky}7TEs5tuwC? z`b)&c~v4;;g z!e1_}`5{Jfys|g`GG)s0AqR>yGAn}yYxUXpXG-Q}h2_nEme!Z=F?U>ksldLN5`0nR zk&FvlW_6>?c{;12g=caNth$Pxou{8-0Jn-i5@~U1 z-=WYFYr9-t63suwjhK7**24$yX4`!TH<3GC0RtuHTuK!o|6Av@?bNALufc=;zJ2rj z>gAB0o=$vxcg{66EmLzqlCBsQMMujWb8E(%;x%4+xE&uNmFvg3AD*TztQf}GU;MO| z(^czF5ml$euW9?<&}dzytU8XF#dG8Gvb>XWJWoDeO$~^y!q7B!Dw%7A%uqO6R$Du>3zJC2$ zrr`g?!~`BZSekvR{JpE#s>4~)7i)xz`Wo4??UppNkbda%q_vf(79PUw=)>ROU9lW{ z0%3IO`Le1F_8h)Dog&cZ%o)wy@FhRH;lqb#f1@+wOFN7yR*Dr`?ACH~+36LkRHqu9i)Saxfy z)XU$aqwEXTKiF94>$8l|<>LYtn1|o|yy1P`)#)GKxaL*y&UxcXL1Fs#@3Kx;J2tJd znzO6K%oSezv>M0f?ai@G)u6wA?IC?>@|!nHdexP&j(06?9@-z-*^ISz+x01AYrt+r4(rW_GvWUJ z3)IZNI#N_!m|VKX(%(AXOiFtWXcQ5Un_j1fiwm&Y^L?&4uM00&_(SQ^Oh$!!9KV>9 zM&q$H_R%zN_6FCJpjh*tD9tN=YvGXQ8FYxZCr(KV;`y)Sny!9m4<9_JM9}EDwUrP0 z$Fzm-6!{}9=Ks*QZ(qt1?N^;Ot2u*g4fm9~u`R~K7uIvejHbxpzD}DzzwNmZ4GnY? zzD2>uUVi#C*G}i@BU%ZQO{c$Pwe|Yi2$hhotv*aMGqXXg>x6eS z?d3JDu^#in4@)d}964g@n)N95!%Elef|AfrHm_lDm~V`8dt*F~ojj@cE*2BaYRS{T z#@rZnWJi8{^I~*&4WkfX6-?O&FsE6bM4}%qX};u>#OBnS>~NZppC?i8cYrl zE#thJo|qDcTK89NtcZg^Fd4PDqqQjpe6p%SB3R_(aPIx!6*pd8{P3X>X_GH{pCUzy zBrdRP)X4DXE%OiG@EimR;)@qhxBRd3EKvc|^Ik99@t`MQI*=2r?}c?P4t|#8l?#*0 z)woPindzdtacujNvLP>f+m)?Ra>nUlGPdpgZ%Wt}xqa-|v7bDvAGIg4d?gqZJu=A4 zcW4j2q3J2TT1?D;YsUAt*m?K8=Sq>h^1=j!C|t~yv<{wq-)74{b(WS5N#-?ad(YR` z1H*ouvM}w>+{Rn}{PQEKf$Aif>^Dcd*808mwN{pM;|nxv)@;Yl zohAnk8~|cL#xJP^pmKxvjw^^YNA~XhsYj0<21A&6!A18{mVyJsMIQVksR>2%;Z5@? zxsW9CjeCNFUqmr=70|Tq^w2lE`q>mVFfRx$Q_#R6#^dhx!xm0gUrYz;N-LCV;a`;6 z*_hf_VS-r>sL+x_Ue>~*^uCy1KYpCn(+j#)8P|#;^aflucIj1t5>*VK*dX$#Rqr$ zd-v|%efusUx|AV1Hb5)SM64iOyN{R6ROUdUEq;2leGP8~NDt1R)3|SvE>LT@(Bgm=eJwMLhF2N~2A-cqmSWXo=+nUH?ei|%T09S)QN+R59VrNn2%-ORIldBQM zw6*sLq>rIh>MT?(6~cRDKkZP)eks7NCTS2$hd=rJ+tJLZceh8l6xup}bx_`rNMKh( zcujx1f;*$HCV9J$8f8_!L{#PoZVj$U%ZUC1;l=EeGP0^xsRad|nG3qP$3h=;?8 zboaMkmbx(GZ28CS8nm8Wsxt9~x|sjYrPZ_@cj;~JRj=5}v+aws1_;X%9U%*go^RF_ z8(ffMPfqz7cg{O>nRsL^I@cCWORVQ+`D@_bY=U211s{KhU|Ks zOP+3m+>}LKs!Vd9kO8@69v&Vac&*0v!ooXynpRjrl8JgGh0tX8$npA~LguCU=RL)D z(__K}6;~n!l(Gy4i2Wr`Cr75I&kUbnZ&9X5(V|-8uYf-&b)>cEK84Z&@dsfVD^QYM+fA8)6;$1V+K@>P_;h9nO=${&JUQA3(4i7oN z7fnOwSR?i0V%e5OHkVIlU}v1^V0fjo_$De`rA#RnfI#~Y#J~F zR1Rrf(VJsuw5x8CIPCcF?AS~K0ZWp8Px__6?L!s?Yb^bG^x?#*XP;JL`NW_lE#i)^ zTHW;Knxdm(cRqa3eC6l%4;~aaFu3->qx2PWvS##P`G4CUL~qsT*omv#TAs)N@ppE2 zuc;n}6l!%W`^8*4i&g&qX>XQz_qgNa?qBlr2J`FN;vG9xu2``sa1v$i(ZrKAxqn@z zF8!LAwVo8m$25BFzCC*uvF3~cqd#6|7AI4NcvW8ANgeao8?L#F*Q_ZmmsdoIR}j(g%O&v&+NNZ~V=nY@oGKuRwcnvl%k?pKSGk4tgR+0^$#sZtjxx5gg*==&2wLTxa4 zKD8Aw+;H~k?Iq7|AD{bvy1P$9+d%W7)yyhZY?;&wz!dD4utq&u{;kW^{ND=hpkA)7Q755b0uLN0MV=)yqGKray(7SsbbPZdC5KF0a5~E6YM;?9{+t(d z5>DUJd}U#T^`}z){_`-=a2T!CxSxMLytP%e(zK}^cHjGWfUb`p2b)S3fgWj(T2@Kz zpMU;QKM-=0hyVO>TyBe8vhMQ&aK32<7>da4N+l~-K*EE`4q|L zQ=oC-T))}o>p+AYTHN~8B&4-1U=$vip}fGt)#_l1R(oCV-+NAfX!qrTyQ)~C!V)7$ zGM+s-&9v)?I8^lPPfLFrv*t?CNAG4+bzI=^EM1sexD$2cqN5dm9GTHFxA+Y_cECXr z%h%hyt=QDS%Zo-IeCXFN$MUGt&9oo=zWC1?o#AC0+PiM~PaoTupS^nf%8Tka3lN5} z7P=AE>FT)8H=9PqFL%tYflhP{AK{O47KR-AxknG$Rg7Y2l>Z-Le;(HJ-o5?f8Ot^g zyNsm_*`&cNDKgJ9Ar+Y=4Td5Wl@KMNY$@}sL8eH9=q(|08IwxdA(bRe-^VJ~eH_30 z{^R#K9M|!=_GQ=m{dzs0Yn|&{=Q@|w;>Df{-$&P$h3@{+w{X05vIE}`S-<+b_pNf59WER4F#_u&;V61UO1%VJR_6|;=h zSLT&f^g0x+GAV_B5gsnJx_U?5U_ePF0gO8c;0g3YM=!siC zEmnR5j@40ZEEMJJUZcm1S$JihbBwZ2vDGHk@`RVO^^!`SeKDlp1npavu>tHS*Uj9! z+F-snM5Sn7kd7?)xn3O&IzB=E?H$zP}c&Yni+Rfr31 zCLM%k>!a>z;hDfND-IO~Tu6WamdNXht*aFjM|OsXhaa4<(6O$~0!MzF^!R8+*mWev zG9-!nQndNx!L3vVHx5rrv7YSh?Y%JSRoz9C=Z4-fQF}n-;L8+v=p@Ce^tJr*kB`BE z9zXZxn2j4d_CsYWhZQIyxKZ_OIPmaP*S}tUWA|qDH8I2N=QpgTj!=p2LEfQql?Hnu zV$zUx59ah}vxt=Vi~F~YIniF}_uGAW|Jvjlg4eEb1tGz~WbFDj13KVo`N?JV(d+-6 z+_yh=wU@97Z{>8J|EMC(B}IvRZd=9Vb2-mZ2#&WnDWm6ck}+ileH` z^6t>CU8Z&6%)h@2eoshf6)kX*`JV{8l=PN=duyvC$by_Sr zgSt$3^y}9k`09m`W~vqHSDRI1Egz4C2S=s5wzhMp7>>a%U*AP**Y2|%VfLlZCfl`Z z+e|*)8tMf^?lNg)L}b27%3MyQ-1~v5iZ5;)id4L{_wMas3ty`eJ<`-=U-S;igPuCW z@qqx~rPB}GYh)rN@Bua0P+=RzK7iyUu0F!*Syul}^SCs1EB{{E1&EG~8#hj!Gsl~G zkB^WD613r>ySH$BMeUP;N@sno!EOE&AB&!kPP@KlkX^Y|JqIP`5ra4n0ir z3Dc*3lg50{{cOZz(qGmhP@#w!DDLq>pzZAXt&3;cS!(35s93l4LznOh zWWvLxx;!H{wag{9_^&>TlOMDVPxFb4G*D6*>+s1k_`X}@6}LXQWNRm*kOtw2jW@5> zwAm8ncB#+Lps#b4ez=TlxgzuLxwa7NQ~+fRV>@exeEVh#Q7mN?#Y08^s>&O$<`eSB z*Zh&f(Ad~l&$ZBpbxql$9;a_T`zo!QQk}FrmK7h>e!WU{ZD{pvow7@$fS^6bv1Dc+HpglcXkX z2cG0@@Mrmo6~l$jnLj_XxQrtuZMTcFQwCm{w|V%EdwQi*r02lcQ1{aytmxf|*&5ZI z=p*4wWSan*6RZQfrcY|x69~gBX>tB`8f>dq_cqs6qa@#hN3mVg3i{_^EV`hf|y ze`$J}UzUzXmo8l-k_s}o*9w|}KhB{p+;NkuZ@xynvZ*k3zk4Rqv@0)lz@etxmWVfB zjcmV~{3K- zromGl9E&U7J?TfThMUt>$IUMlUvj^?6)3)?nO!(uy~@ngO!b+{hpjtDDNx`s;KgOF zs1CV%V0_oT?ss;5c|TjrpJMr6#gfSD_u%Eh{>2%+E*bH*L|gIh-Mc}~McLgnR^57= ztL+o`V&y36sv9?MJbw1fqpHf4PxGUsB*A9Daa;=@t(&Xm|Gn!k9o07`2FB$Ri{nmV z;?7jrKE=*QrGxuzvMIP0SJ~S(uJWg|NqG9QzCQnS($MgRTB7id&y8{Gc(yvEQ@O&Q zX(#m|_XpryiX)J$%s{q=Fn`~#Q1jXS`}c>GNSrZcsF&1OP1ZX~)YHn!%Hk+w-&J|_ zDXz+S@#6X=B_%v&(8K~eBae%7_l@mJGxnyLgGUSTJPm^FrRXp&HLcQ{QNAx z5A~m5O$UPY9Lwp17Ul|Vm|vo_)O7=v#d0@sx8S$Q&f=p}&7a4W(zMG&g%9<;6%o-C zx8F02itcssxiQQS77ZKw_;{s_n>HB?8gwt*Agb|^OOg6+)6ecxIR7em_4++HtJZVN z_Yt2R}qx8xo* z#4%j4{+F8bEV?^qXNr}8gF{h+j4{7mjKv#8_;qC^$3+uA6^m6Ya&5IA1v;wSQNN)- z+X~O<^35?cQ3l6%?b=0i$6S+Rj}Cx8bOUhjulT)Kzb)COUQy%icR#v!tP|yT{Ma$4 zEor-dvm=lCkLL z`#876q~oHBnA!tj&`z4C{GV{v;2&T`U`}<&9;<^vK_3cF*>rrpxKE)mk0yaIvTfV8 zPi^KaFD+^lQK8AR%XkwJqovbqe~$CQ!A&Y0+eMVky{h~vZh%ry-wpX|V$G&1!KdCv z68}9qb+d2ks7trpj=m#RxcYqrIT#y1D(|B6Y2QQVsG#SsoYiO?75GH_nz6oG+&@oF zPcHBNm)D|crPI`o(^;H3Yu3?o=lV{kV!8y+RL-iVw&BazY1JJa|+<@}1l|OBK@}8i#ByXjHMv)u4O#ZE9T@39ATt z7Z}y?Y1QDF%M`Q9{VK~9-O4j=rskU4r!Mo!D+x8J|H-dW$k3mPPipByhx+sn<>5GP zw=uR~v}mg$;-R(#iI-)$s~0Q!9NZPIJ!$gfZRWb60jK@<M&wiXa=>6U9@?f z{8*qbN3^cPgYwkmhq3As!pa5>un3!e_Lqw}lL!|>I|uH1^Yzn}c`!6(%Yv%gZ+oSP za$DB!Wt?$n?Der-KbFN+X4x$bpC8=mc$Q_orHq7am)3wuS@M)mmA_y8*WkgU7q=JH zNxka3=4Zu0H_OmanfAMAL5MSbu{UeeKaFHPsBh~GjU8BNNjZHeZefLxTx8U{NFq8PW zq!y26>v`R6|2r+RC?nO_jY0&%*RQw0;*=bhThtrvY3Aqb)$&P_ksk{8!^P!<8h*Je zeXT4SmN(D1r7Z4qG%ikqO!+x4F99Zcn8tl-!^M3b?pU(aez?xk!MeJ>CQBnn==e_U z+~Rw_H+5R2W_7;G{4A3iFOI8c&h-zGTc+J($wFg(#pLG(1RR~kZaUr3CRp*$1 zAH)g_C5jVG_YdoD+9Nso$n01`?`v;O8%IIo=&U3|N_ru6tm{n(VXLP^r)uDW2qg}kv#Cp!w-O zBE=fU=jv5eUMVnylHGgu`JDMIQ6JUqN*B*PDd32#`5C`enSXEkc5~@FQHs>tIYws| zTuwS$0BD7vPm68PctHz?ldyZzOXk-~zl&%hx_(;8NEwc^(TGuqn6AacQjLn6z*31r z#e~O2y;5=G2~HmP=jr;q{*5J!QdUfk1v>?fmvHwQI&qnfz6&tMZ8&A1i1baXy@IJCasE1S`^ zb%3xWVPU#7U*y3kUPrAn#Y}?v8WxY4a@e?7oHzbc&&Kg&Scf@_bk?}I1Zy`R*tSWG zQ!-0esm3L3zihB$q!xnU&Rx2AtU=Q+Z+U$-T0%>rmpJ!NJ*g=T$V$`kh)*x9?r& zxd~%mDwd8?C2I1AZ$w!+e3ZGK0j1QVN0a*v9LV`Rdh%og2B+~5QChn55L=Kj)cU@8 z`0#|mxfyOhqe3&KyO5GoSARxKSCo`fhL*HpG%4iBk9-Iv!y!Y;hJN6R>AfDLukX&q zsJgW%GAMT&h@(!VdXz@gx>qSJ%Qr1eTRwZ_(pZI%vt~ZSI)5;b72zn>`bNJ_Hffh|I`QPDBC6~g-hm)s#v%t7d-Y>JyM(gZi01I8>{rmepD$FvF>cPAG0 zog)o8iq9iw&o&ZM9*b~qq6vS85T^9Ne8{YxfBShX3f&QxJo;E6~RPaQ(ehPiLX-}7=XJZ$u7-`~4`RxjWj)ETv4 zu8HU0(@XpeCP6qwp4L$ZChC?On0Y5ASWkhga=wrUwDKF=seSv8hmsfn^?3#rWPS7b z)IH9_^YP^nn}Z9byHXBXgew5kA{r3mN+>~Iq>R?v-YS`G(PLi?$I-&{(I;h-Uv-3Q zHU8J(!6zxD?kTDz& z5sqECQW!nxfX40olDa`<<@k#ZhoFLhWld9A$Bu_WCrq3eb1bynBE0lc#o>*&ENFom z4@~%}6Q`fDKQnZh84<^*sgA;qtHq%IKh=Zk=ob%u3Ct+}_+`UAn*qf)x-N}shXrq) za36%FpS{aVuT=U~mR^{Bdy!pq)nvVsWxqcxdqdwk-ey3e?KS1#G59R=Q==zPYf<7F zU%Sdu4|4d^;1+Wa5T%6gh1rE?smCIom~FFA{SW)nb-qW^H|tj!e{b@Amt~P0cd}Qf zP$NR6&)wVB{VP|QMb1;c;C4HS>b)g5EqvkK|IBjmsUdqX(=q2lrKd~&{EXY7__`FU zCpJMOK|#Jlu&nHw{522JnxUbg9VQR1?~vSNRsK`mzg3mBm5%q}iQOA-zXmVKjD1jX zf%!$a3dzeITg+c|d(r+^^IEI=4Jxk=*sXb~@Qw`DFI#2}gL!%K7TOq>)IQGdG30Nd z#8fnW%>HjN*q-x&46@51lKDHHBkG;fw~ozY`CKzHyUM@wh@%2^^Z51aoj-rB=XFXq zgc8}vZb0weyOkYIo<3d7I7dH>-k&VG+1M)5j50aV!&_J(Ys7<;1xmvJa!k47u8n|I ztQwiW?9!{3&raWf^QZ%}lXK0E{L|QQNu5PHRu4=frZDW*Jpk3v7QLxf^G!`}Z%v)? zJ-uka(4i02W=E{X^W>4^moh3NXEiIjfa)L4PVM1zWYGNWXkjs*f`9h-F*(^mJdw%d zP%7`kSFKo)nH*0mff(Zys!MInR)>m0(`2L71KwO3|6?$6Ez-VoYgy=Z4D*3U95D|f zWNeTwRTx%M!nZT*gnu+zU)ZOxA8+KT>h7eJN89`4<;!h6ALI4U-@kuUo=7W_pI7Gmv<oizz=HKbSgMnC2 zLrt)m`{0a;KHZ9rw~bCo$y?j7Yjg86_X6L1ZKyvZ+oxOW#iN|e79}7892Gisx4B{U z&o$Kz=`PCWtR;>1p@`v2Rg{Fg-JKI#wBKr=cMFFQP_CZVV9KIBd)(GXZmL%3guD!8 zZxg%yYImy3R*Tx4FWvyW9U5~L&Sz(~|2~MiFV1&SX!7)&l8pxR8xK8fc=KH|s9^el z!Z*V^fFmlL&%d~@!444VPg0WekJ`3tw?&b4(9w0r$lHz0gHx0CF4hfP9OUy5^~6pQ z_lh5r{j*5}dq)=sq=+61p&&IYsC5*|6hNcXuH$^d_3Hjm^TnjoW&h}er(f}R`udE`*F8g|uUxbdNedB1; zj?ENvvx4c>>z%_w+i6;Z*)x4Rv88M9C{@G)V%3H(A7#1Ew}1AJe;NMg$U4 z5PTl%{p2!L7}gHdd2o%fIp7+0HZgH~zwW80c~2TSoPwOfQ&sk-M<4fhv&3j%X3tr} z-kzO)HhXi61EJPu-PZSBPsg`=zz(&jZv_PkbPdBQP|It?g<+RMf~|k&@KUH6J_eBn zJUrZWjL!)EckvSvTW4nQyb)oFDk-*XsSADk6NL+Ei_CjlDcI1y=>1wpdCj$?VdtK_ z_+u(E?cuQEN2fmc$5j_L!r+iwSD!$lZG$(JK9{3nV!k-p+3m>R%LSguYw48hP1y9 zD0Ja-KLjO37!P6a9YR@T%ayMIZ+zEcr&6xOpB(NI&dz0robmG-qZwN~SB35};|kKe zf@)|yi#4lQjnTW(O)hTDKg<5_DHj$Ey+|LqX(Pc*;&~(Siz}00t4_wM`@ynN!%82E zYgeu;iEjT1(vd`sv&Y1hDd`^put*7t!^+&<8$f1?43tXeh9c@yLGyXJI z9tWm8e0VanG2i(J3Y^ac1!K6q+|DOxVPC$SE%*B7%?=jfYG~<6>vRGo_tsJw&sUZV z4j8!LTXAcLD}4_=l+85ad4cWA?Uh$()7F#e3oK-Wg@JGFp8hcA*fwwPX_l6L^!vnU z9a3Gm2}Ra$(hp-o^?tubFLU{GP>V}lLEAO3jv<;tj1#lsm>M8GZGCrP!ZD=uAapTQ zVl?HSJhizFuV25GJSz3+T}}Jo&lTN8$Ric=eZD3XYwO z%ngpzYQKBi-Vk#yL34>Y4x%V-vVI2VQ(C5xRj3QBM_ij67e4}8!=5Qg5+6>ML$F+y9Kdn=?N-l}VF!{7xQ z*;weM=Tb))6I8Rh*E{LV@vN>KjX03zu=_!S_T1JS(&5kl;U~t%r&C(Y4mdbjT67i%L|c= zE#om~VeodabHdgJ>6%fq1Uo@5BA7 zm8h;{4-K0~R5_K1t|INTM!&UJbh?g55YuEH??(PfD_XGBGG46Y`0+xW@8vzK!@ag` z)1uW3w51Y>XTq4HJJxYmN^nZf)&wgvJ6(GQ?>dLL9W5J)5w(|T%j^v!R9mYqb2VNy zny(EWQ~kcNI=#s8?*1r+=N>OwF8%uV&m?5XAwru7I#E*k%S)^CXd^6OnB1N@<72Bu zj=!U_`oo`paEKPz$CzRLJKniDIlbRR7M;B9R+Zwmia7PoR@v^SQPG!3)1ya1OZqs5 z1;rwNdq2={ewF&U>Jh3)NPK9ZySJZx<;oSKW)44Z^s6o(dw;^(C1nb~--7pu&Dq&$l3y;A+{s(Ny+)RDs_aZDeBBe)-Nke>IFKQCoj7F zGU1YIM0JVRf;natN2}L)ZC0&edjndC?!Kn@^3-woe^m;xM1PrzaVpCR#J51oZ9SLF z#!~#V-`L}w5idiYuPL2o5j=@=G|uCncKilqPGc?w@D;mYqUkV)95ND5Q|4C)SZB_k zAAu&0c-C3fCz36@oR`ektHNdFGQXtNm+k>e?$^vx$W&KURKOZ~QbUIhbz&d~V4~wH0^1ydR%cLScjTeQB z@Rb^yf3%#kwkI17NM;QCAB7ha?OV^D$BvEn+4IhJ3>OY#yX0%2O)vpP0qs943?0PH z3u~(>ZuwGc9c=uMdcgku{k5YRqSPgNd#ragJQ^?O8ZCL{`ZMzGqAe*oe>ts22uI(RU_iU>-au@14^B+d(C*ev)4;$# zNm(Vj%lZ1s|I-4D=SNx7c}8`q>f^Nr24QK`K@;`%?b-Ku8v%BWt|@K+5Eqd~>P?^l zVwt8-Z<@D9Lj_|jO2bIRUqr?9M>2lz78FvsSp#%%>O&cGT1n>y^*mjJ_DPhBu7@< zxag+Yzl42^U)y)+@Z{;!t;A-r8!1*@@>5&YM=Xx-b@BU9sL-&qQ;!7+5OmI*Jv)5T zq^8JB(81MJl5QvTqCac-C@L^WV8V&@d3k%|rnF+hdb3oP$X}JmkQfTfU=1%&0tXVuM8sQ&T&Cpft8lWt z(4)Iw`A#mU*ih1sI^bQ>g{1&|m&Po2+&_L)+?bU5y?(rc6FG3;fcvc%D;wy~_|n(J zBs4dcX{&AXE?TUQOlA-io>yIT(Biy~4p|sYp~a-d!%3@Qt>!L8O%Q5nvvTFftSaPs zz&xeS{$u6(AarC5);l-k0bBg0pFI(LA^X^?uj^%|LfDGITe(#A97fz_l^Zl%``z8G zX7t=Y+*LVyy4|3TE}OT%Sef(YOD=SXWG70W|7X0ZfyVinJ?9NHy|?T{TD}NArRO6{ zMJWfAWalfEfG!q6FRPT(z{J3qsWWCIW(|Q209Y{BC}SrWl36j32hQpj*s4B7k&CX! z-BLbMS87C@gNSWUNR;%P$6-)ujhR8g+XAl3)o& zTf}e;6(a-$&{M|LV1#(8>g0xQN%$pO8p<@L(~5^ z9d`G*yOr|g%j+wRNxvf?tEGGicggA1Lr?FtRWE+V@V+p0>_*B$dQ<}&R;|ihYX}dr zi&b0Zo4#I=kzaasC#J86I5a`G4o6#dX)!$~E1M;U0^Y!qGPqBtL&7l%zAe}xTMY~} zA4MZs+K;ba->-LP?uYAi5uWAM*AJ+8;pT6Lb2b=J_!82zv=HN3o2oYVPTT@1^QTHB zg&Li8pzA42OczYg>+is;?G|;yjDgOE!#1w37!+@%-LG5Q?T&%uN31dqqbkt4FnY+>{IY@n7hOutG%=^F_a;u$Rzmv)~>QQgv*Y#R3bz0 z%A^qUwez{D_WbMb!wsE_x{^Yuj_3-=Of6*;C!RR!ddkhm{1zpYgiaz5om`8EWG1LP zx9Ch50CzCsZq%;p-&N*@A}VC?Kd!1I{0}8rfOVkEbdiaZaR%7aZ3!wwAs_PcGK+`8 z@1)kD35&MaqDOrt3RF1`kZ`5+ve3;D)JLL#r7KT!8<}^@I~&HR%*j@PO`r9ndb1r-m}y7UC|4)<<`qd+`D+U<-tWlpgC z{dDgTlfeUFNw8Y^fQIl6ZYDTXh`M}LSad@vKAGx4g_Z5#9C2v8uKSy>(*I-*$gkbY zn#GBXPTVD1)XWMn1PP;_V5=Klm%>x_3hda?NG|>lM{UnNor}s`7!irbM&>c;jtqPm zmgm;3P6RZW_{45k*!?HV1>s@sEB3BHLh8H(*T$YoK|7S`nYkQZ1QkLR{P^wLCbuk_ zV@1G5EVz^ZgK>@?Iif^B((><-zGmS#aeM#OD!E*A0|5gncK|{KStvnsZmZ3mMW#JrCWhM za&z@Nm_Y8-4sqHVHfzp3R1)G2i}XfGaww&`>>2`7+PsfxmuBwBZnLkm;(jjthsj5y zfe(4|GJ=83OE%z&84LL`f}Ly#uD$aqUILBae{E0G?^7`l&-{lorgFvc5RWq(;~cv$-XlJ~`= zCDTqs$q6_re9zHyJNUb_Ho}^ZN;k4*BvXR^@Gr1!@WBYa#JvV$AhqwM;Jufd9jfoa zv7lZSK83cp0F6yUIG{?fbrl27*g8wR0>h24( z^SAo-R!s>m`N|36U!!yIKR1NgXJ=ma4ce1p!&ej|u|Kma;tar-VZ4Nj(s3D7U5B z;Q+o5oeLl?NgVeWcuINGT1J@2rJTD5Su+n$)`pdFGScwDBU;B3N1mxYnyfEQZuJ~J z12#cYuFDbQN8(Y0#!=EZ21dv5eCL3nP>@?PvLfH?1&9eukH#2Yif=8!n-0tX+qc^p zo?X&+!<0vZ7w0w*ZFpMOKVIxzBvtXs@kJL0R>8*LI*Ia3GchgTf43MKQ+F zYkx2>a7@CqlzZ?T9L&L|gU(b`M{UTRHtj`qb$n=I_s%LkdUURL_=5Q__0YtXZ{^&pw2C*^&9($;fQp zJTZO+N56de^2gB5o_mZhAf9NhVLXyk%MZLU@$&p>(=?qcE{wxeY289AD|ceUZNiCI zLCfYSK8(6w+Si=crd2n&lf=sL|E&wRjB5tpA*SIhsRr%o4;+|lxb)iD@bJKivt>Og zxh*;V9Tk(z#e%pNN3zunJJ4uf1WbCf5H2zDGsK0Va2Als#+mrs;%MKJ=}^tA$Y}~E zKyLD+4VC7vl4k(!V^8Wxq%M+W08h*-j-ZAj<+9~zO@=nr4q#L!zY9|u?F){pzDMz9z+w;9$M4DS;W>6csFbp1d{}8k^nxb=xgiW>?Q0TS zec??ei@O#qIGos9%k#$unlTjEUmbdv7uaeTIblfAL`k;Rvm~k+Z#dcbYwGHM`L^X1 zCkkXpPD~$I+rir5V`=-R-1wcpE{B98cH>kgdk37vB!XX*ZP?Q}nb(KWZ;!L(m5zt% z()0iI`!||Rzx<#RhXl@I$utrO_~5~V>%JpYG%H5~^LQU!H*5Fp(?>G3cXN%pzp6K1 z3HkA?&%l8S3@VSDJ9ppS!L+IqNeZLY^?5^r0|T}5&i`7xH_GIiNd$X%Nl0l=PQK)^ z5V-CyyV|s@7fpz9?;4UEt($Nn7Z|U((Qt~zOkx~0!p+Nt+=5N#HhTvI%z!nHZ=1-w zZUKpoPc*A$_WpPNMslbkY6m>EQgZ1%3=U~%_ltJao5Kr4UnF%dbK(@?95HWbEey9< zoH%mx-QRoSe8-SSvFvJy2LS=>Sc-wlq&DL%RLRo(S6xMSnm9~TB(NhAb56Y#n_gSG z&LN+({M_TnkE@Cg%q^0(KfqdjWh(~LJv3F~_wXBA7!xRm~* zxs}GDQ&z{04KG~m5@cdIA;!75JFfwc-LO>#NrGfB-4x#16REvlSoM-~`1>qb(oJSH zEG_j`=v8j;TeWg!$c^r0xv^RlVD#{v{woZ~CBZDW_}lbEe84JuT+jtr?b^#T~)Dx6HOJq@{wc5wz8FC-Qb2Am&h7 zB9<HR%!<8{+lV@&Eh}Fe~tDXcVaB}05%e^i+P<2jYJyh3$d#vihVCF z^+phuX0W3T72@YU`qM=a@z-CE-@k9BMDxg<8iJt348@KDO6Mcw7Wb3i8zj$iG&WT6)PHX zrFXUOzteYhBhAegNN7aP0Z_Gic50HirvT>Z}!BW&=xob`+ zhy*MKn|6uOCovKvTH-;Qz_ZQF&K~J;d8|LijR}t)H6wH68ZrV@(S=(f77KOjk(5lw z`tby*WbFe_Qq@suQ^6~cx7AVN+df7SK{FX814B)Eb7d%!M9JrHi0SXyqNvEowW2Nm z%7ULeHhg>QZ^S;Hp(J)CC5mW$Qbw{dlvrE1@B=!O0Ug&oj7!7!ft^#Z(p~!WDLUDF z}a3nV&yze{y_`W2d<*YkZ4= z_nxK;19Nk-v*X*2;EK6dUv7%$CLs4QMeW6ly)AG{mlQRB{vn^wC;adNh-dpcT~>E! zJE+g$G(hn?w_CUFu2>f?Tb7ppx{qp`Hu30xdAPEy8lExQ_qn$4q}U7&+VoRL07mUX zA!}}>SbF5mo1q~KEKz+UTfjr$2nPs`L{?Vd56#b2tQ%Rh6%oFayyz)V8&dVKkX4lT z4m!CQ3&0JYE7l%5o+X>qg&_L9#l;+C@f*cBTs|S^YN56DvwUAN9XAcc)uK%sPa@Pu z{LKs7FX4@);Eu5-i~=6;E&r zv=DDE;kbF8VqGfio1m8^Ao3DCsJG1c$xWkbUS_ebQUJ9Q~)ya z%Jbo>E8+i*8?S$r^6#_UWLdUK4^z@54NRue+1a>LtYZ@rw){Tfe_B6DfG{#qO$28g ze12BM<;$L|0LQyr-}ddGFzdaxGCjcOo8l z*$yiHYM7xZy?^|6Z+&CG<`fQWR#9-7x+mD({^_H1k59+PkS@myy$(5GhyYEp_ZoS4?_;0 zlKZJs-AS3p&}M<@`FbMz04j1FDUdv&*rWu)Uhz+vEbR)~33SDi9SK2u9jeEZV2Prl zK8AYbV*vr`(gzhDb@Jq}l*P?BXJok41+g4!Hh(=`Lc?S4TflcjcC7sRwQH9jS!a49 zf#~iJd;|ngLUlpg1~28wey&qfLVZ~YyDBH1UEQ=uiyM?qcrnxKRwc)92D1%YX-+?i zu^J%I>Ah|+4~<80hov3@MZslaB@1~VPVz)@1LvZ}6!^E3lD0Mc&~^H8CeZ%ScZfVh z-gfR>&ADfn5nbc8y72~#a!)+irvclaGbP={L`VQ5R3Sd(-hMD_rm1&$YL7c#-&~U( z4UdY%IpF}Pf2%=5ZY5|Wo}>l)C!=5gC;9nN+&r^7MAFmd{ZVqtiU~L`Hq&*F?u|n+ zKMz%P9VMt?4;Yxye(JkP6C0w#&z!kec)%zQ?tnFlEqO8uq=Rqr?-%&BwMHA2z~2%f zGj=@jY$G=|HkP!l*&0A?sbL84 z-o#;tPV~=y2h(qcjT{$dz5l=gjz=@eb5T(q+{RPRuJZRf z5Md_Vg(OzMQ*dx_*A)8OIEbdKTRb_PbuYbpPbzX^g~4Ow8azSNA0q5AuuigKWdWdr zRrRg;8iOWI{C%ETY)osrpaF!ylV?Q_wjs3|8}O{}@B8Q0snBsWMnyI!b|_o6Y>{=y zd8HK^oc|=Smpw~UglPxn2{>iF5V^PftLv?}o353HTRl8ll6L6FeJ^v-nRi)*1(rt! zSWUmcm4Mp9XkiS~t;8y;rAt{hx_>Tw9F+egJxeu|#4#Xn6SwL!u0!Km3 zY%dAQ4|;cwBZ~S&_Ju)wYtq7&tHHfy@$0E^@5RK2uoX}0k)@X8Qu(^X0xls=Cy;*@q6eZ5TVN<^$gogaMoa3-s2=!RRf^|yNEP#GE$1Hy{J zF_OA=8R#eJgI1*V4OP5x-2CUWuo!`#$M#0FPryeF%9m6Z^I5Y>W`;UQaQXaMBB9h- zFJ5f^lm+CS_RdIi^H@qU*vD;P$q1oA9n4UH~T6mq%iNkWAUuv_L%GRgV1wi^7x@~5;4ctw@zvzX8JHJ9JOpi zt-K`?BgKh@SzBs0P?2~5vR9G4aE14Kg;PINH0EB)0vqv~|MqsUtdONDm&-(GGheXa z?4-7NV!uFl<@(yZR=iZ1az)FCOx;RWd$G@|aw%M0W=FrF1!EIxi{Y^?S+-5`SV)Gv zb*aX5Ypgd6!`O!VMc63q)U99^TAQ*m9+zC=Nv@%K zUOhrS(@^%3=}g?zk#@ml$r?QUWsf@IJI8m4>59f-@8sLEauTvfX&5p(qV0kMv4f)f zX`blCTOca~qdE^A+KHGYlKS>T&s^(*Lvo z&=0M|6cs_OzD>G5;aQf~2pa%;k}P_ZyeO?o?a9Hz`28>`5w%-|>XU%X6ZNYtD%xYR%Mm(}JYYyK0!vLDc?SO-WvarEo(0MIp)|udFJkckhmEKU5}2U8 zh18V1cpH4tg8SfR{?e5F)!8L(FCn>E&UHGZdeuRT%UpIx0>e0ry|Mle1s6I(I z-d5j?sc!10@DRQL)!(@8FLDZ<78nPDRMmP~QvKtU3T0H&hKGwKa}c)wH22{ySX93! z+nLLfTshpMp>+J&HF$JYdr!MFxOIxz&yF1|)a)uzgysNhYl&U#{1O%`&7gWe^b2cG z#b;ECV16GyDpIy8F>Y4}Bn1x2#^(Y)F1M)}$ZHdEq4NtMX@)6Z|T~?UccDNkW!t}-rC#ON!Cu8k6qF#T0 zi%DHu3A;_wl?@#HGKve?D4bl<9R#&YeQ101No|L2yqsOd+NIAf?k!9$w4j=}2GYwR zpb7@5ZGK>x+YG7?`3BXyAl%!x>&j{`FRum<5QnZ0jX_8v<_%!^w*6Pm4DS^ehq0rA zm6kgx@Wd#UzkU}upwGwucljZsKoA7F^_o61OIo-++&F0-aL64y`NbTeUm*HWe&A-; z+YY8Gd5z#w@l%Lr)3SY8(Gp=fc?WGxT#ZO-_yg5fR#sl=IN@HL^bv3-AyFckk@}EN z;tf?Je=RSs5ku=W+{6`y7<6$Cghn78GZ7`e+8}cLKKaAgjYFq^J*TC0O#7Aq%EATF zp6km#0`u!FprIM_G#^tDDjE;=o~Us~0mHWmcGrEM_mX;({C(f4aze6(b!k;}8!}SV z^Q_B|6$QJnUl?SC$uwD2c%o?E^ox*m_C(BJTY%Tn)R5h5+(~@#V!!L@+EkY} z8cq>S&|RJ?Nvs(@=Cl+g(9nP-`5!g5_cRg{JhGc42T>og2aWuA1n#4zUZ@Kp^)*^C zUI)y96&^+U`?yXf6S+BSV#~U_BCX5qDMSf)S&jq)F^tKSJy1*uDeuc6BchB|;oWq6NK$?HozEtFN|@Lw$FxXs~j*`kFKuQ}{^%YXI*^hJmOsegvr8!%tU z#*X;3v}>tpjajHAo2BU$Nf`$u5q?@tO^q*>2pr?!n=87GJO^F$5grg2JyiAc9 zu~N***?A%L_lM##{#x~PV5W2hE!`^r=B-I~V4+k4y!sJekC;5!H-GyHKdW7m`~_FY zKfYROEwwlkIs@z(u_{fM8<@!KC<2*8M9`z_Wd_(vZB0V{2qPg| z+BwUzm0L)WeshQECAJ-5VG(j-2BSMhL|c8k55wf-Jv}i_*mNpZ3h!v&2`c_F10@NJ zS{w3n8%Ro+ETRw@Z}0Gi+(rH6k2{BD{p<9@f1@_3fy3INn7AAuN*zG;7~ah1!S|E-fWKG_%XF6uWhov@qQmN?j;LIoMjbOVk7M ztyt0`+wNI9wle(ikyEf5w1Y+L$qhq%A;lborMSG7=EP8OVCaIxpSOf)mav3%ECf<(X2C~v9f*Ut4m87Bl*-DJjQMMz>4gS z3wVQqN~ca8M*YmBiyU2`yfx8A@bI!%jhyGgq1fd;?FL|$-LYJ0+0dz~W9H6jG$}n2 zlbwP5IB9RU3F2rRb{wrt<8mbC(($CBYTwCgPws3SiRlz^ZbdC7S&Q@wA{J&D`!;ab zZEh5SXIpI@);rpF6!&0=pN2^i43R(rJR#etsxnP9;gUvRKtRA3g<^LHW%PnV39^Iy zgP|dU6*gu!heu!L2hbBVThYoExyCldixWqFQ z^^-niWz}O{lqff!FLVFVliC7VWFje(j_Ql^-8(&e^hkEMf+b}~7eCM|f9&*LBnsK) z!Y~L_^;U3V4G9n6Nqe$=AN*}1AX~QQGK{;38!c=yN%?Hpb?;eo=4657g)U)%ZC%i< z+*1-D!dpzBKf;LUP2!3HzgxCywH5m5xQJ8eQqWS;XD6X?M$$2~(IN!kTgWsQ@j-qD z2pXWAZ78!b#I;-Rp)vkPc6xaMSv%5s_yhN;sUY;R<+F-yGM zMn{d68{~x0jg}~ZM799=EC8r$tIE}7NNc1f#Ff8$yV9@3i@oI{4P~(f24FDeRKD+X zDuESTo!f|GkC2)9vY2Zdmq?A=)^P3e&~U%bo)wNjVme#08!L?NF}WoM2|v}w=uq`F z+hWY+m0^7^00=INhMNY}uvv^#;f$<>KWFbU;Cj{rQiynmLS16vpT5o(3MpuYhw?42 zP;U$R6PAun1|tIoEFt{$>lb3G_~c}CDg~pErbOa3Ux7=M(~r+B;gn_lG}X`4IL)VD znP8#CY*+EizT=SfO{ikU-BNt}*-PWl$**EJAx8=a5r;4pyb$+JcXuTSybj>C9NtPR z_Pm)gIV%Z}?8F>}RLf>J*8T&%d);@8islK8%*fos?eJKarq@3o;Q;aHM?`pj&Vd?x z@{ng>ew1x=Hnku)LDtlNcQ{U&P(zg8Pd?a4a>MgMJh-KYE*s}gO+2_&FcmkU-;tJi z_R=;(T2P2M^(Z|h##uy{Qd7W=4iV-FhCr5!vLD;Cwl60a4Rp1Q2ikP(L>1?SWEw^% zhLO6UtcCsuTtd?(fV&}RA}(F}Xn5**PZ}k#8uG}9V`9uATMbt{Zus;oiNy{ALkzeH zAVJ2P4LM&;U;@A+Pql>ygs7m3{U3=0r^hEr{u)rnSTfFLD9pBf7OSusx4!I3sTCv( zvZ0~dwUjaj|Ia^aW|gxj3&}nIAc28RmY1^y)gaiD{Uiab-J8M?se)(A|~q$ zgRr9>hfVw%5YU4#8@C^UGyOSfivor@0PI{9q8pV3@#yV&LnEJ&;$I?R=ugcuJ7XDw8OQ0?LUH zqCk@EU2OS+Vu5Fm_8oICZZ;O>Ty<$cU8nnx(V^rrRt?vu?l4!B&qrKy2mPK1zD35) zLUi*ndwW8+NVy_Ih2ZfE7Ps2781r*Ux%KVc3_`om9=&dtSr-iL0bEn(4pR>ogXbeR zm#=3Ke;93Bpy?gflgMhk>76>~snNb;`TH*M;GlKEDVDY9*i5DCB~9l&BvM96e4tyl z5JpW39m+{78=D8~WK4$$vau<$Yan+fK#-DV6pVyU@7|dlOj)G;^5ub~XPr+RB3EiM zFhlGWj0L2jLl{BC6gmekTjutq5CDVtkNshif*f}=bcm9C;#z@&y9|@BU0aoJ4Q~7P zezECT4Mp2Tu7C_v00=2T)I>Q}6CX!!jHaa|m2n&k7oqn>IxagFYv_h2RsM_s$g%rvm<&E-r@80$LJ-^k{Nknjgz_dm{S5lua?^3hZac$moHiB+}D{hDO;X9)T zA{1apkXfwD-~+k~c5=q-JMI24gCHXFjzP)tm zHiWSy_lu;ke0qyche#4g8FV9#llm!D_9o5a5}okTmvGNB14R~=<%WvxSV~3NSqClg zZ~k&m(Tpui4Y^CdOq9i=d{p@|P1_nQs$cV&=dQ&)>rtqQEKx(AF)_rb9h8ggriTWv zp|&UTR;JTjr|u9$&D*9(bcgqMad81Xd2pDXb#_;xMlM9&VufI@t+C4>lyCP^W>Coh)EOIV$mTo= zh^9*E0OfZRTMQQs@7patEgI0LY)2`W{U;T4wh5268TqcSl->f|6lSWP&LP| zYh$WZk^8UZAMG1b{@QhZXa}tSRFRNM(zSm)5z0`R5d2P?j|6&XVFgWdAuLF1VOh8KzzHlwP5%p07M-;_3zQmDA8eDJ&=Zxs z0hExxSV<=n%AzU4LPiYgPB;{0(Q=C^|8`R($FgDyVea<)vBBrho=sr9L)O4c9|Y0! zHX1c)kz+Mvrb#^Y!CHKyUu>LM{@_I51rC9b4`}WwO&URSVSrQ@+_T{Isa8)jq$k0o zK@!Ef9aII(Mi)#6GA^4CJtV)&=OTk7aIR#Vw*+p)#6ZZ}7;ttbOSOnhAF<$9(1z7# zbFSp_x?9|nmUQtP!Lfs7so9oZYusLa+yVUwO_uuHf%c^VEuJ2SfGcDHm9Tz7NbnHx z>b|#5=cxj(+eJ*I{6gSH0pLNow@C7kVxz90QzWfF3o`r|_kgm~f*}yn1L;Rvp-Nt$ z?YkRZH2OQ@oDSL(3DeV)6C&+0O}UTuo&1!L^Cb#g0i=s+%IxO)-srHFn@`o6g`_7E z4LM;q9weFJQrz^)xU7401PggjAIZ!x!o$HHs=DSq_J1AH$XQw^=`8IK-xyx{1f z@V{YYvsRqs0Y*t}vkdFkmN|MP{Qrx*(aYemi6EAcNr(R^vT4LXR5S7?I(l$gO9`wy z=+nr1p4H9|k9nvT*kQSU^HMKz3fi0U_Hjn|Hz}lK2~7t zSGDq&0&$)k8};kk&4LKFG=*ig&?=!jBB>pvYzzKhag+N_S98RS83AOfv9iI(=G~3I zA#G%zaqRE^dWrra-)!?v9t{g4w?nx)c0wCyF_!NP?gHgB*)lACUB{OrQQH&8&4PzlRta zqH?ImmBJ7|_Q$H=cMDuCBLIIgNdiT3C(zP$2TN9`&hPv*3xF5F3So)lQmF&j8^Z2~ zS+`XBpK=#N!^bC#>5iM|C&|$S;LF^=|3$`TwKT2TLesXROy@BM2jTzW!v}XM-dMd$ zot10&zAsga6@XV9kjQE%X1Al38Zl~=7tioVkjUz|;IgI;7%pvq3k>a2hntVtbRR@5 zGt@4>GQBCcSHm+vPbM(N|$#G0yh)X4Ywy>jUDb={u@!<4YB}V zahU^@ZGBWEh~&^aC9dmddg3qZCY%<*5g+|Vyq*PR2+DYDkhB_Y1f>5m?6 z%B@f2|9}d7kPFYonapMABe6OckZx28cqEpoy7JDm7F! zs~>YryJaj0)83X<=p;h`IGYG;k&ZQ$oM=Qv_(I|9f~=2o_^IErDQAhyr~}2~+nT+{ z*VpB%zIUtMOeMeejp4~9alOceTxLLvjB~xadMi7WpH5)}3$O0_D^t0mqBs@t$S_ny zf+7qctFE(~JGQ!N6AfT0cNvH|K6>|U9B1)I(eHlli zDGYrS4{z2d-EKo59L|YN?_xK104RD;IRae~K=`n#Z%b-!R(5g#GU`#N`53!VL8Wsx zC>`Hpx`k8uSQdf@ypWneqKb%A!M!8+)N|eBa%7Wz15EI{MbY$f|1hI zSUIqejWUCP9rY$H<5@|v+X0GMY6=vREvWTsHc%Yy6kAa=0iDa*Hv>w=4F;~x0H1lF z+T$F@O4_qG*S*V44K277OP9}fK}NCNh7Dt&CTPShT(M#YO&SRfqhJ8ip8WPi0f@5_ z-x+S3$e)hVDxt0Dbke4cHPOO340Q>cq}!66Ag1GGw>ZrYp%6t-NL4CL6T$`i%R`HQ z8ddMUe7SF4%Gd2D3)|k*b9yqsap^2V4;=mn~@rPr=B*t;#GOl@vPaZKE4xWnmthfka4AJF98YSg--1(Zyd z5!W1Ej9!*+zFDOO)!P4DfA%!gXP$9cE7p-ylY;a0(Tek^M40fW69mJu(Wv!;P5Ujt zt6NW=?8f=*8k)xw}I<(4HkpRNs4?610{(SCqUTj7Zjthlh0O9BI;cp7Ba zeShwg8Fyj;Az0D|Z4Mf{$6+cWoeCGpPI_Yg2=1PRTjjd%PVb&+9MdkH1yfo6CJhxx zY|3xr@-I=REs8f(u6*|NX~gm;S^`N(ylst~^u?kc1@R*OKD26CTIdwFGu{sN_R=#G zpf4qfBxYdsb>A1O7Es4Z9nNSSb@;UD)3?IgfX7dbc{wH5_{2c=I?2oy3yvt5nsVa^ z0EzG3-I}8ASGk`+gfzhZ$LDF%QsP!9xx@3K_2>d#raf%6%Rac)>2yyBT(&ah!S(3q z;XFuuJ%o;xK%3?Gx1DoX&Gtp;_8>66W6swdhJ8(|eCdfwaV*9N+*qfJ%oXGl})W)hY#w~2MbnY)) z5VDWA814IF6c75-qr;71m-$ydQi4d%5MuhD8K;Jg9(_u2>Bq|f1N$wjn>UW+B9$HI z&@aQad{UqFmr%eGMxuSw!a>)hR#B7gKvzmoqvK6>Ba^P8pgYw*V46=%`G; zDFYpP8eM9V;0ZN{b?cUZwbqCCrm$oZYa+LO2pr#h0!|0RwLR*^lOfZY=#B^WnxV9* zLH>J|_3Yhy3FO!^PLB;(iPlkR`i(VjuO}$!YiNWni~YpmZ=!Ul--@R*-1yH{^}b(A z;ir7}dzt&?%L7-oMY~-c?%5a5ga@<^nzq$<9}Q$*tosh^+xPr<{()_kwnVCO zuuM92)j^=VkFT%m;0|MMO#1)mdJ}N0_jc`H^R!m8X3c}4NobH#Ql!BUC5fU@(^9D@ zv?`H8rUngUC`6X#fixi+L`tbNQ6edoMEHNM*7NNB{*U)~_i^lFKkM18yZiqAzTay& z&+|Gj1Sn@NTv$pixU#;k);hgUVH8xAJ$1@L-TGe|t(rGqfL4AX*!mv|53{oufH4`%g=DTPc3s;41ZD-OU^H@XJ(cn}=?8H^{RAMdrpp~IW0!EgW< zt>k8}BoW<3qN<{*Izj>OCtp5K9kt_mYLxR(m-`MJF#O&Pw5t){?g`y~SHE<7CVoCr zKv^4~WozR&7q8Pq2LDi~L2~5MUsRNht`VAC7P$`V zi%HB}E2|M8_wp?tlsLlV$JNeJPj`Q39X#BVG@vR&-SFdEt z5q$ZXKf8|{PS{C%`{e+af8IX}8i2CfGtd|nw-g_YmGqr)k&%T_L3t00evCxaw-_Jq zl}JGc4;^|c{jr))%Gdf;u32B}juw9Ubie5zU9LIpSuHPZ-!R+z3jfeg?60<4SIBRf z&Rp9No1_B_F1GFai0JT?h<1P{{UlvT>I#9SrP| zv#H=mO7)r_gKC|1*Vos%R#FmZD6FI~k3+0nYG}-+>&5hkcj16hDmf~hkZHc*Jc5y% zJ}=n7QR+EwjdA%&s^sem|6rr_E6+OXa?eLkpJpJjPDN$(gayJkP@~U<^_J_#*wo#d zHz%ETJ7!YVBlKGRW80ErL@T*%4<9{Rj5QRO*8)BFQ(Cw#3h&Cw?tSR;=lV~RT*N zSD!{cq(Sr8bZbUt<_N%vrdw(F{!-fCHm408NT}Q((h6k5Q~T1g5B9t2)>=O}G|uIl zSCht#hxhbLr-Dm&9(#y$Q%Pdi;3kZOo!NjcZ~xq)2j zeILW1$O5W;IT|#fXAp(=%$iX1=Z#>r^Gkr7=r-=6r%iL}L40=g>hZt*OLKoaejF+^ zA*CQz(K;?%v&K(m$!fTisJ>m&5LvVpSe;cNkyP?Rvf+ ze#m-)F4QmoLA5zmuP7xAsIEcBk+S63&%OLCfEow>KjIv$~(?mvH{EBQ3*|#t#OMjAnOo7@7tH|vlum}KN zqMG`fZAC(Mu*r>h`Nu8)g>z3qV(Te*u{p5$xk^Lw|yf;IDP- zZqgm8yH>BaW}X!^{)OT^2SV){8Se#;6O8oKTf+g=-~!8GxGyWuL_|zc^qXdgpX0D{ zW#g?j&f|8s)f1$h{)(VIK8~j*j6Eob@C;-RAeOTj&Jl==AUgr#1kzG9AvA%C&(y`_}{@8{Y=sBTmYed<3?St%|DbnrGCHq z=Pw(VW&@ggS@!O>y@}%Hh-VG$CfS#_zcQuYKFw+E_jI#wlNS2tw2w{VdRKb2w7cmw z-^9LANAn4pU+erkU+vv{?4A4fhw6luR$LBn+Hikd+~INW@3N8*d1yx>cCbzNA(eGn z8GLt{5TSOlXY{fPKgLMk{>|O9PVNjkcbu1kG-)UELU6XCA(J;n(ooGZGi}#y%API_ z5G%q}>X(e(qkeqf(Q%u1w&*ZW)VSCaH3R8B?w@D3e`i**Y99A_g8l*YN-&%YP`|)Z z#@MU>9XlsMI>Chm8X>#*;sJQp>X4 zqZ2aR9ti1|<)2mAP+s7JC~&IMkWeZLsY#i8yw3QFXKN)|n5f)DeGq0Ppc(jrmgqTh zE^2qTsI++L%CjD7?S=Njo&lYo2_(>)44NU5m);AA-8|rgj^l<6Qy3U++PX(`&c6VW zw1)e&_vMe}mR47mwc<3&e+z=VPuuL^m**$mnC`C`a&}pELzpd?v+kc^xr81B&xtju zU#&Xl)E+nznXi<7lm1Lv=q9Z?h0*XJp>9hB(~J*|i5QXA1*-43rZ8ZP9OA38ljr&d z^~SPi=i_q|gN*#YpJA9t5FM!NDLk6G=V7B27vGE1d2~MZjLn*_ga+e%ksVvnNb);0x# zX)uou)Oc&u%PnA--Chv^uT$P<-b>MS`cnOU#rpCBCEm>q9!B;F<6bfSRCcWBkb0tp zeFp{Ma{%*OBD?wn0B=?PSrIa6o!U8LKD6hb{I6IKgA~3lDN%Lm@8OtYI@0W0i;@Rz zoIXBjhXU*-=$wqF(plKm{rXwt@acLN`{~_&&A1^C`1eyz%gtnv2%6cO-po9~MhW8V z24$sbl#$|K+p9eok*XrROGLTqJf45cN2r?h#Sa>ws7HFb{!-GV=)MBOfzcT%ZC9Cq z0#u-Q&apTO@$IH5#aQD+af_h*H_ip&4B1uzzR98YNof!rw4+i3RnxNU@Fqg3q|{YU zyR|4Jowi0IIh|;f?+wiz$Br$m^GT`u_0?Et6+*GFCSHamn-+J107G^!@U=j-9`3_W z(RV5ICc7orBnOQCQ_TnV98GX%kqm&cUgzgU`QAG4yx^+qZcuLf|I8dg-?;qv+; z_4Cb=G$TS042*Qll48Wt?ufQiq;J#+2ClEuac4(P4b*G%Tm`zLIV9l}DhH-T!`|#D zky$QN-VpnK$I!~W)F01pVpLJStBnB>3UGTz?ar1p(a$oap3UA0k$@FD^T62Q}d&WwmK# z=Wve^LTS25vqYrXLrX4erJ}xeEWF)LG84UrS^B~~>gU!~ew<4e+nD*wTLeIK%BNbo z4;dM{IoKF)cLlUKW^ejW?@B3^$mS4h2FC@GB?yC2#8&hGeioRLVClv3@GnjUsjt4j zsDJI&96_aw-FMSmrogWTaMCL=^gt2*7F1i-QuAazLFuO{P3=f+U7QouioZfuSGUQi z_JUs(@fvzZkDfEx##+C_=b2@U14ZyA*oSHvY)Ca%A za)8m7=bpQ8fksSKn%4e%$)iaSnMZY;w^5UYIXsFLT{u3{A`K); ze!kT3-$?ugTJmf8pWnH)g8Tm)g>!Gv<_a}R9%-b&%rX$r{6$y1&n`(j7ax)V&It=H zLka$TQ=}nu$;OOO; z0~$-X=r1}Ys1CT<1qhazV$sY?8lKigO+zWB5&!qU5tXz&PGpCOaCsjx1jB*e;Z|FH zot>D_$nU}j^M|{A09!21Kc`mmIDR*Y1iv7Y62k!4uO4tdpNSXKlstk>3F5*Be=B*^ zif3>OQT717pcAK+#M6l5OJA_{%9Sg*{+c1-wR=bh0v$mdiOK@FTv4Tuy`nf+P*ZFh z?^?Y8OjN2N(b<3xulRVen2Mt~FQJ#*Et0XJlEILUgBJy7ENVY+p`MKGK>`TI7oxdb zL?JQ#)Mx8s4uQZ+a;acuKr{yYH~)^h>|%jcYw(DF{`tq`POU~-msvtcSR*J!nj@n$ zs9+Ea9CAOEjRcZE_#nGo%F6Lb-$alM>%@Kv890}zeVM_78*ZRLh)1w1%%jv~M9%9O z87*+q8j?54k=r{1P{o6PT!8TkG*y4*21=-jFC5)A41uM zwnSD>v~)i80Z@DbUJf9fx|fOkWhUnwEKm@=<;lQvn3(E)|NQC2ScT}lFIBvwXPsy* zR;g6#Ol-Vqsq7CNs12#4;bx6~4HkrvB}^gbH9#f9-}HCQ=^DJdgY<#V=EId+KZw zomg~a8FStXXvGg`t>{GNiwGF0)gqz1Q)=x4cagTa*Skr_A;@Kw~bAtP6L za}wW>!DPPnG8t&uSQ`!dkZ`MW4x);u43PNKf8anNmK3i2__%P-E^y?rB4rg#K6%SX z$zZ+C&<8rCY3cFkEdD0c9Rpwwzc5uF$>an|V)AUGlPel#7Kr)Ed!ysC+8T`p{N`I^QQI5KEG<-w~tRdp!q8-9jf^4 zO=>Gi9)EVz#89l6X64hNdsJqDbuNUAwn=t5#;c+9KA!7OSX(}P$p0DO61_2oZX(m? zblh@P7^;^v^(fZjCRE;+Uq9E8-NjY{$j@V6r(yO~nh&SbbSNzx}9pQePIXsppHMKx{xMu>+|a z(=HFl285R}?uR^Db!LauYuXg#t1Ii=I;vC#oJiIIkgEbWTr& z{iaS)sy;}A(og|59|R>T*LCTVC1N9Dzz2xDohhxGC^TuGhpp8xcCPj!;J^DZ7k_aU zg%z_v2hHeL+e71BT@KbZ@IN%0NWoJ1(WWP74-p*#ui)qVZpleWL2e7* z^Au#KC)aZUJ&81aT&I?B0AkL-o8WX$p=#iN7~+^NaTtw?=&7lrWH&oLR_)MuM9)d+ z`BKwcJuTM|&|gf0xep6r$fbx{{qm|0arNK&Zq_9r?O)x;u*^UUtwc zH2m;7!uiORMhx4sY}#$-vFi7=IDc)fxxY7FG-7Vun9Me$`C%zO+ny1yM%RA_64HNd zf9LDB53{5=A+d>>3TXPLf@HNk^%!r2h~mo&#_+8)&u>kgvI#PBg=>s5yy?G3ec)Z9 zBl-a!{M!tv4?1Lp>KYL0Nq6f-kqXLqjclfD6hFy1vh{b@3g!6wjoaFs8IU!;RlvqQ z@poO?JHKnF_r8m>lRBqQt}N{=SXB%DLOju~qxC=oYf*f0M{Z5wCB)fR;ctKaoIAB_ zzrJC7#DgrIEW`>emG)C8p6`&#!o>Z$lEhTEpN z{XQV052&Ykw?jrmU|EQp0G?R39?>t}txI74?y9G!qn72VsIKtM%u~*k0dsDa2qK5C zcs!Ug&#T}ahfy38{^&ZQF`Z+(rQ3ff3Pb)_7;Zyc;tTon6R^Vb zqXD>%?FXb4<;>As|Db`$mn2;Bj1WrobL!y{6Put-N1_mh!r18LsNMzI9mAfN##>yc zKoCQ8j!+`1nc#CLRiroI z_8_c*)B>Cpg3>9oC?l!#WHc0LK8#{YT3SG-MwD?hKOZ9Ar*{2aw9e{GjVA*d@ZN+l zlMAco$MoA}R9rom4u#1rb;tw-DYY9Y&=(Ck9dEf}iQbC+x`&(TGL;aa^;B=gk!i7e zJ_pSHuNGjHV*aVN-nqXrH$NY6FSTf{anM$%(Ufj3bQt#us2)2X~E^t_`qh6AtcA0CDng8L3m+hVJ= zJ9x#c!dl>n`OD`;|$u9wX?JlgcL`tz%1--$eA8w9{nu>QlLnnfe{74<`Mn`uQ_>QxBlOpEa9Ujq%h? zxtD104<0%sjo$~)jU$tDiz)Nr@57^oa{=UYfDd0;J+0 zXUi-4qpS7x4LGJK-dBx065wlK=&ttd$|UbSdNs~y4meS>lrLNs2@~TriZxf_KOw<4 zR4AsjG&AszdpYEZ=T*1b5KhGmi&*nM;MXnNw3$=w`0hIqX(T%Uj9^B8e<=c4gD`&h z`!#AsB^NrRMz}ZrfEA5!D5c? zC8DxsDN+8a`~ujXCQX|LFw~l{Xv7Fj&Hk80qNfRGVXf)o**szuC~Y9N37~C-Z{JR$ z$H8}JvVtL+eUj(x^mI=ohbp5-A0V5};42zs0sBoCVM7c!to&K-l%m`H&vmt%OCB6+ z^fW&|2g!Mq@67}GE1vw*$EhseqNK~@=(Xe6>ab7Y0h-cj_p}yV+xpANvQNe1ZJWOp zPejJ}?cKfZ`3P?tgi+rHg1w}srI`U9)uNSbyp>|tdRecEqZc~VSkJotb+x`ek*c49 zCZLmE!v3>O%ig@vBeS+tns>biP{ud3+z*NS^6-h{Q{ZrC6+gMvsY8cJn17tLPj4L) zu`GyL;sA*5Ty=iWKcL6{Ff6u9uLaSKbuN7MY6AcNxMV;gPq)q{ST%}4)V`&SOKdhqIl#L_Q0)7Y?dM-wJNa`B;>?*N4(_2l z@298zsf-_QQ=$x#zCo^DcDDcJ^&i63^JZ6EnsaZ=53A4R zL5@fKyR0+6I>pot(N7<00P=@_bQ!bD`+zE^fSo9wQ#zKrs^CQN_h))uiL=vc_m<#- zF=5rGGiHYwOm+aZefs2yiM93NT*shr;FrSJulp=-YVpGY=6iqw5v?lQnp`;f)5hM5 z4i5-AP->EyRABW86Hh}ehul}|>U#;9$SXMcq`Ym+m*)nq@5g6$nd9YTWA@_lHQk`S zdnW+EpJiGqCL%hDV)r3rdx& z?(td%U<1K_w7!0rO;T@ea87piF$x{U{MmQ4H2S_icPI7HB6b`G0y8J(jcXa>H1uM9 zo4mz4&d=*Md4*fis+6;rHZ3o0LDAZO$dGuu@)Hketn-tc&%CmqeGbvo-{@zGK`PA* z7VZh21!~jp;PffTa`tI@UOx4#RqBt`sG5e=P9(KHRI&@?2_3p73ea+^6{Zr-ec-IhW*ku4}W(L{ISpH!CLCd07 z#Om5b%ga=*%=Awm7^_aP3^QwXr@D*NMgX9Oy?<_r4D&8n(^h5tJC&IFw%RtPvqO7F zwlRMn5(Z#QnQ|o3SNMSK6H65SWdl@hym)bhLE!jA2}5bB+eC~_)giG2^sBkTn9-w6 zCQMK$dwwa90~+ajn`gdD7LEW$M|K+ZE%3xv(Mk;H6c!W-%-?t`c9$3>>1 zD^z$ukZ6@m;lB>`jOtpALp-z&Tl;qQlmru*kYFrmr_Hbxj$V5!!L0NYmVvE$oWFPb zb{Iz_Kxlv_OsO8DLz^9$+@Mj@y@314Znajg?`CRJHxkVs9ynAIE7OkI3?EG)rkfe4 zXv`>HT9{D>*LxuyT0W&g!7hm&oY&_s(pIX?ATn7 zv$Jv-=UC(6w$aevbeV3#@=<0(GwAyb4Gc~^*?r~FQ%d+4;25*?-hDq*zu4x^!UBXa zX1x9na11Sb-AOO}t^w7pRjtE!a0g?+3T z$hs*|etlrYE!*AF3dJL};RKX=JV3qR(hTQO<$+7@jV?bnmMN^=&sVjtT{EN#{J_H| zfo7~h7^Orfmt>SB-<~cFRdk+l^y>z@&=u8x%@hcw;RMLYA>S_VJ=FEi=9Nv>0g>{D zsnZ)z2xzuB1Cg%Znt%E{pzN4QQ)QOEV2}EB>XONP>HUxhgXr!i10k6`Q}=zMdF-lj z*TQ&>c4nQ!4a>ZB>{l+%3v7O{Rdd$`-b`LM2z&D6iC%&&aZ+LLnKSF^R_IAIPfx1M zIx=>SLyhw@cT4+0k&jJpFSYq6o+wuGB(Wa_lRt-Nn$FRH+cjOizi13yeKa;MKkZHB zs@1D!QaSysPg(VBWI)Cu%|*BO>Xkp*aaqlR-74&780A3ao$Ow3^SOo+%8;)QUaQtF zXBWN9S45%yIF1+QWyC)Gk)%_$%W?bjoS?J!f8co{71)0wcn)3|-f^KLipH?zL@E~w zVTi9T_72Oz$0gQ*k5Z0w58eFe@VbO1^)tKXb={?IP_&|B(f$iNHMsrR`B?Zz8U?E& zOx>-&Vv=czX1Us(|B2fUK0U?+&}yqX?P*U1?hRBm885%}NN{4_24&EpOhuxD$XR)L z>;GT){&D5<ypx;i@f*oz(O0dhN&?y5BtT1qO(A37b2bm0JH*-|JLa zt5p{?y&wO|eCD=%-Itul9l*8;8^EU?Ho9bOiftA16R{5EFH;6>-dtmr=iSwQx+%Qd ztlgVGoh-eaY(k6i#i{tg-=fAgeI|&6*76+vikGdNgZ77XR}VcnA@cCL<@%Xj_p8-7 zH`DuZ!n;&CSnK89OwN7`p2%kD4=m}tdnk8<$G&C>Ze~X-gXW*OZQtP$MQjTS zI0l3QwY}304qw<%YuSSdC0#tszqxHU{Gx6=wbt{&7w^;6jr+KUY3DUAD@Z=X^6e(N z9d`44?nE^Cw}<$h+=5=A9ilR7hGxLz%#sD0n)V63y7GMeH)G=Gg1O;ZBR9)tgp_(eJCp|C z8I8v7JiYAY)p26&22U_eX>!C4508bA7tB5IK=REN>o!tg28Df^Skp1Xyvyvzib|5W#9CuLJxuW_YDXH_% zE1;|kp&cjN%(?J#hK1iWMZru#7U$;t5oafl7|{4tY3XjtMUigEW&;S}&y@4RB!cMe zB-L1bl3;!DsIL1_7>@h*TLZ_Ya~(}$%mxT(M%ou;GgAkzOG{fdYSd_A4L$5QT2oKD zDw$pcfz%_<D7l`2yJ6~0l^fJzGd>ja_6y$Sz5a$7TBv5-_&yB z>nbQ$tee#t)%ZjAk=CdJK%HqM?fWt7n3WU=}D zmvg!~mrmc2>!ECRrEgZ3c~8Ih_rBX?2YWB3fD*M#ejGNjk$Jq8IALWZB%6P`XmrwD zbNKKHyE_drT9wjY&p}D?=Uo<+^NFnlbfSrX^QtuX+R>mO%LI7J^H$udEj%%b7zG8+ zVLHP#*;idRpOOd54v<`oLc{BNXxh>LY^1&C*;qJXNf7PBmB)+Q| z88Odo2Ay2}^6O&L9Bo@3lPPsn-)F5pxZkR4-Dw`hia5zIZUhKB7X85uVg#>xH>9$W zfC9N@TtcKIZIDXFL>T&JC9`YZLSp$C1B(l#VY&WXDiSsvu!>c8`oJmJ98>N0w(4Fo z<;Z(iySQLS-AF4X?e*6%IRbKDPq0aOuU;DgBy7|}mmW~{f*-0tS$Y-(m3 ze4%w{o^BAMd?#*)xE5HxCz51(A2hz}q`cT>O}qnY4&3>#@$(~n!$->e23(6`jq|>x zU`>9T4|}=Vm>qF~G5{vlTf6pju4%3n_e@MRtdm_7=>uVfhcG+ejAJ153v^%azW<^a zdlFlIq8{4x2&7XI;Of8d#z6+T9!S1XYx0VkZd=-hIm)p!w=;T1{HeRYt-fQ6OvP5s< z;xYU8orrt8cCl{x1pnGyu1Zm-(`#ZMBgzp%od%lP+mP6?lYL#_kdeN9Rh>@F809`75mJAfysI+!=%VjLfAlx_&L?{!y2^Be z|CZj83#V&D;n$63M}}l5&&2i!i193R9x@eAC?6oi;}8Cf1-479=&hx7?zyh=Jv_{> zxwo;~p9ehO7*6~UKj@il;l?1 z4Q(5-Y{+RJh8`4N;g6tDxB2!1VwTKs>bQJs&M8(sTZ^P6^RR8#ik>DcJ_&LE;Q+jFLtQHm=Bn#Q z8K$W1%c(vX5dEpzT?b-oy`0%%ht%4jh@YNl>eW6{@f;l9+^L*b- zH8xI1Tq-6J$ZqAWB4HQdk=UXGuV}7*-UXOpTje1JU-_zi&=8?AxLse4>V(o|0uV6( zyeFZUD7qaKg<-G;{H^-Isuud%R{R|${V}x>djo_ndq~LZOLAM#Xig?DMEM>ci86YZ zX#b!b6-yc{*%O>fR0&%9X<}f<3r9bel*qmoAJyMNsu zo_63e;z)^a!|9k~BK}$1yHB46C|ARE<1Y0zb8>x|-aJOb|H4rH?EK)Iv?q4CfyyH~ zx9yuSvuYBs*L6bvXSz1?Q`U1|zg3N|!!+phlS5lOuhcDn`POqsuC{8$!4r{@VT2u_ znZ%w_R<_`w^q2P^)j2h${za|B(H3f@#FeUGBzGoU#=PT$%yWywJ6>g zJ!+h=VxE=N8%pO?q`6-(I|~QpF}gRfvhEQtbxmVe-DTaJVh0V`o%8r-ta;2f{!+z! z8^ij3l^g$gQt^0Ch1-@Q+}f$=Mf2CTv9FsH{icTnv=KPebYxDw3VHf ztXk!RQo!qceNyPgsig~w{I%oD-3*_uSR8w?pvpcsxmWv11Uso67>7nvZKQO<5>x`J zSHwolSh6Yfb^Bh&Bkp5V)kvXe!;#p?tE%N2FP-&lcGcy3>}|_IYYsb6N!j%>k5pFA zJ7#pnc*az7*ZN%nw-=3I6G2}bu}hR4`mISie#*(q?)4=qM!4?iFs&s=gE8^|f#QnHt*k=wkCvP7^oxJC+i|E5!FD{n zUUpUnbIaH970Vr&JO6(}?cjeyZTA0!+I@3=9104$^<%i{1V}F#ghXBJ)X{YL4Xx!m zBTa|6)%|Tp@i2d3Nr=|5m&%6z>RIX4Z5HowH#hZ*_C+XxKj{3(VT-AO3I}}r(D`3b zLn3S34cS0M6^po{4Nr_y+*ML2il7Hc&g;Z02Vh7%p+55yk0BZT)mw>wPca1g9BMPt zw@)ktp~BYUQRa`(3dO{z0AEzB89DobXOmI%#PCF+cVCZnY7cqjxU~%U zk-Ga2JRg3quxIWN3`~nyd(A!dBSr`c3Z^|f4hqZ=CoWO75}RbPr-vz9YU?(t$l^Oc=QSQm$!Z(A3vojPW_quikxKNt0r;{z$>#Z=0}IEDoUyT{a@CWkPaR!j6{r+?CAVm0zb6K( z^3fn;VbUWSEG)W)ey%kjD?WA8N|cLyk3T+mdtT@8yZOOw&ZzzumF{N@vX*#mrSrN7 zRf||Jt3k7JX6Up!Z`;1lIbZKB?+}TKiV7VqY-S^w>?Cjnl_odI7(2(pVo1P~b3Q`m zefcsGNf!DEZ=LBDvr0}y%8P;+^ysAnXSV=NxC~)3S7J1CP+i@lUF3dRw82h)WJf=Q zZ4EkqfB)gb){8dxsrB1izChif`i?3y)4YaXCMyO!1MQbr0elox>iKJUn&n)8L9sof z65jiq zp_BQUef|X7J!o4+jCv{#m|~aHeIpBwrYC1Es$iqu!>7-lHB#Wh^>b|h=*_?JHIDdt zv1#2g(uXX2BF6;NqpPz#i?bn%ZNNXnm`t>!nxX9rcK2E4tUF3TPYU^Is4b|!Jtz$* zO@OQ*+C0YW;E#A!5%O-|zWv{*IytU$=dae?UfNo2p?wSw4LoUa^07hI!`Y3C zJ{)Y3IeXu4xHzo1F7m3c*^Bv^Kwl!1BhQls{S!^W(}ZNy?YZxq7TOR{R{Ix zjQ9yO@*24IccEH5s-@XutH{1@6&HVNp;t4(=~N3BYyhz)-Lz78qlKxu4YvPAY!X}g zdgZ#9dhrjlf_XxshAe&@-yIQ4Hq4~>xWS8wrisY;7oJCSSu#`JtLaUioZ>609BAa% zztM7)Kn@YUV^OzD^>+aEHL6PJJ$)r_x2XbxiHi?PjYG$$BAWDG`4XKEMy)a%Jh^T) z0CKcVvNk2?S6g=RsjmO>60mnC0r1WdW5dlHs%8pks>2>^pedKBZx&8vC)yiO#J%DZ z2*B4dsmJ3!IK>A1V(7+^7P1{lKoUX$^kjQ%8)R9}Ro8hX$^mBk-IgFP5P!ML8_Qc` z!yHxq^2Uw6^$q(&CPl-kLpIwMBL2$^kDrxaZ&AZ{-fNPQSv^x4ANT6%SoIA zojOjGaRT_u6~Ep`46Qw-0}Mgo)9L3GdUEl>URyrx?#p|A-_Pi!N12HY6Z3HW?_JCE zLl9}tVmZ;{;IAP1YndCSP$j5xpk|l;7G0hqDu}y@IPWDVkHZLF9kxhj@R6ls@3`>T zIv-$OkAhH6uvEHO)9}d#fcwDCGVYukYtc%CQcSqDV`rX-vbllskdUhE=79F2%Mq~x z{R&-|F<8_@yaK~Rn{qq;nQGzwUoAk)B7DM7rm<{HkLFPnW1dn7Gg4p9D8~Mh!p*ASEif%a!rGbie1)H4K{C()piEtp9A? zehv@`917GT-JtFY0Nx&;N(~?E0cgI$^ctX_tU?o8ot9;j1_mw!ePBZGyz&YSyK>tj zB4w6bip-N1+asp*M-sU6t7h9=r%x^2GR*es;L5+(=vDXX^YXggqi_3V&gTL15(p!w zg+%CFa<3ncOR*oRs;K@MuW)t}Ipz&QRNP^_a!t**WhKX^U&`CIV^2-wfrtt%@A`EJ zoj<;~(phB2@d)}HUg3d}j=*(*Rd+L!6V9P~FCFdjJIFtl;TCS6&&B;G{QcX}hI-;6 zb&c8po0z@Y0lj&SQ)rq zQoD5iT1hnR(jF;Y1UYiMeb&{1~K=E zO#3A{0FP=Xa zAU?bdRJ6;iIfC=9dU^GT@H#k}G~NmxhZ)-LZQHhinS|gk80DKmj#$0}o_7|7z;fo( z%nXhp#%VYKb-;ktq8e#90qKj%w`xk)slRdl_0(QQ#>OXjMrLSOTPXOTcs^FS<1)*F zEKXS;WTK&%;XI5Yra;X_z}T5`Tn$-B`k)dfz8}i3wSWB;M*Pj88)uSpS6$WHHl)pP z#G#7$SD{K5!2vJ*K))uQ7=TDE?AdJ0c?Vk-@(QA&`SiLi<`7EHJx3+@tj_J(|ow2n8hY z@f83rA~4&mZ+p>~3??ZSZw&5}5Sn=ITolpKXvT~vCK|gj2f={1^ebO41XpbQYF``o zz%eFPY0TOk3fO-IMUFYJg!y=RmZnfyEflm?KR+N3m=Ad5^*dV~WsF{%ai9OyyTH%) zVR*acAAdw5Gn@so>Hi}tGLp~h7(f5YKD1v`h?7y2oboyv^ac=FyMBG-u&Y(uuKs-2 z-RjJeKaY&tybqPkfYC;rNolZsXcqK1c06GN3~<6^_m0xERTNA|sI>K&7*MIK2~nSY zSy*Kt9^@WVm7>~OBn;}%?%o0Q?VvBq$;_gl%7l)FH*87BAYb$7lqMS(sIAu-5Z`3u z$0z>$$=xfp%(QpC}gK=X`Ii=q}y*R`vz0H`> zG5Z=zUu60XC(x6%R0=%+WHgm4%PNCGyn-CK5o9U{ersR$GR18M*c9b^J<}ghu^YXl zaEDCL>qB?#*A6gpJTmpQc85MreKMoxtE}D=|Iwv=pLGrTtotLp-r=zv9cY-kx|%gE z3=;f5B`_mL9;e<%Q4_@?oPk`gn1i%P$K5x3q}?@bCl z)b zHFLy=-~7skRT=M}msE|jHQQWq)s}^qjH8FPueXVQ^Y|z5MKm&bb0C=!^Zoi4jy&lINnO>y{mVU!EI~fJ?BPz@-$xxdDM6- zVPpVxoJeaZZfWwr<|%8**mDfwZQJ9>;2GYIImFK2dMqWS<%Ay4Qhk2iH>h7LS_=M} zY)B=eyBf%M<*W1Bz5V=7(5IopX(w(8OoPR6aYSP^QMVbuQIK=;xmZlI{aNjptDbvb z)EWG1F)NN`-dNY`UPw*bU1v_kmu%j+3l;7j76?TcMERNxeQ{}>=aRbzCQ_J-!axig z%kW5`evb0xdJwlW6Pd9PwH_CFno^W`?BNwPRaFm|KdsKzA(jkMfC4(Mm#{l=$&~&{ z8|D@}`RO?v(LL|J*mg}!T*%9S{9&tx4lUPyjpXh&yV)0wIG9;lf2Xg8Mj)jt?u%1b zJ=W`LUqpM`{@{TF4pWub@0|;FR1A;9a*-oCzI!&V9qd zfsda@SN~ty7&B|K+K-JtA5hK2m{g%h988X7}e;C-yj~nAFGK*ql8Rf3XdDM?z@9m`U??dYN z`qQVGz#g4e)uYwWB!y>Jilj3}IK>>^W%0>`tKneJZ52>$_NE?2sS)}C_r5Luk|Jk| zrg`AO=>tEcx)U23hdl^o=Bi_U+Wq^dZjU^(Kks{GgqU{YO?aL7{w7XGagey>;g!%Ukn+uaDB}&@UpX_7~3FM!%GDIwD$&A}$7i zm!qmQFB#qP5K~HW)2T3@JKC$A*k3k?i4JQC%Yr=`; zUv(Xe$U@cq8SumJ)Yh!oENlmn+DK|a5YTV}!9~Q1%>Rh)7k}(9_yUjBm8syBZ;Yl- zkK|qhZnu}{NVBTkr_aO^ONTOUG*eE-oIeN04sFvkAJIi-bk2P+;FVkVPZ%SfHSRXr0W!Xh{Hm(gIjIDPmT^AtB%pH2UGj)_umV)!Ii|`k9rAol$qi+LF z6r5Oa?=UHO{>8uk2Aa>fbu02o<+PKD9n4BC^Os&F7xi6*lh4H`Z&fV`U0Eh`b>I5k zn{~(PnPtw^h=_>Y_bfgeUvCz3a>a{a)zn+J_Ii3Ylah#cPz?KS^mGkF&bY-0^BZ(p z*P`5ZK0_|SKs8Pm^x2IX^{`ZOElaV7)C;THzAaXRorWo_+- zx$j*vZPe~W+%5Idy40)vLoNs9M*zo$O3wqNoCyBexe&?9xD-0$mDZz>H$sNGVD`He|)1fdf0a zxKmksFUr{b`Dgn5MqY_a2CgYP9j^7X;<5IA^Jl8>zV8zq(L=YX>l`OPZo!EBR0Yi? zO2gRLNj_$6`x5Jusa-m};PRlf+S7CV7UiimW~ZL*Rv-GRrq%AZ;8*4+W-0~0m^WHS z=P>oQ^gcm>fs99b+j^ZXRVF3MiY?nMWL~ri1HHdw)ZQW2u*9&N8kPafEa6hW=Jd-KqT1VG6=hi#mxC|nT73@^%laADeY4C09ozH zG{!}uFY^*u?)G!)e|)0N)h)Y_JlKE8iDDXJ3KiTJJapdT-}>-(52AL63@*d%g054w z;o=~>K^Qu{4uy=N9 z3zE7L5zGwi`o7j~@<_^VrcPUu{~!}u!C9LbPgU|rY`NX5ZP%{5s8C)p z_9z3HV#PuMp?2;F{7)Fb&lB<-Z7w5^C++G>!Wl9W+XjwJGyW&$?eKy7DH=tOV<1l) zTlgEdZZ)Rz5um%y{m{Q#9XaVpeRfjG@Ts7y70(glqdF6r zilxBn&r7x2@+nyHJ?~vcC@Ee40@u`B`NU*E*?6~KT?F5N{Xq?QBd_)Bwp-ZrD1;XW zOK^8UJFN{pr|Qd8HPYL^5!2XlTg?mt?f}WF%Ompe__E16#)pb6970h1H;`>b`9|!c zy730ll65O$qk$?FF9H2q>v}C`^hYp8@v4Bfs_J=Cbv+I|#EYiz|2Hvg#*5-__$m?q z!s_{J_xybs)do?Bt7E$Gku^V<2X{~NRcb|*=rs7aopq`82KkqnA#basG{h;$j7WS9 zTMK{&!G#ebaKO_n$Lz;Roh*NY88Q-6&XccUalf#97x+pR3t3-U+XNg^b@@ghkK$(+ zhH;16wr_vqhniiHowZF*--%CYWz-pUl>t38nz)68k8f{zv88_`4^$9k%1yEVXE;-NjjYRRL*FN=FRsW`ZY`$xDXhL&ZXxellK6eXz6x{ zYjtVq$ptrJ2k7dC@@P&ozakSIs54{MM;cv6^UUC)nYHy@SkX;n)|mNM&gUfVhz?o= z9xmI@1nk9SX|G#twLB868iRem=a{Q1%5*zj7FW>1JF9=}J`fb#M{YA$E^gjDX$$Ru z=-zxEOLT04G!W)lX70gt47N(oKRwj8d7oRmRR$04ud3=z2?qoxo2&r9&pJHv23TBx zCIVDSMj3$Ss7%Qx3RonIeGhitn14sR4(?#hUUcOlEC+<+Im5UYI>Y6UViggKq@|}D zG=1&flwNgxS$;5J3%dYz%^A5Mux;>sm|Fr-8sZtK6zajq_5HtWi#)QeLbKbSx^-3k zkcuxxIU-YviS@0%VDN-z%(cvf8U+LFu`UV4k~1v|hYOgLoG-tfYxM_&WiJ!UKLIR|)Uoo#sJf52IQ|*AZ3T$*zXHJrq`Ub3wj4 z)7hBa3ONY|O{ugF%VlDDB9|5D8c)a^nrFz9g!SfpV7QU2Y-OScrY4xn{KcI;lpGCJ zrIUJ7vFQRVz~*eYd)*e$d6|mjGX_xXlkso&|B_&cjSyF*knWLT|A)z&H}X4VH8 z@Sp|3f!#?*N2lu5_BIq47uJ`!PwD2f6KJ75$e_M{WBOwwgZANOkn#&jkSGrV+vxt< zE2m(fTI^QB*=f}464rO^*;5E8TST>avTcX=!K3&bq@1VWqnL3DU*Cf-KTzVHt?PG1 z+O)MkgEGZrhuv~CVuAbjv(ow3-?UcP*h5PFO%43Es3;Zwb6MW0BRP&9CWi@e`cJ+2 zCIoCs!rfvA1|Wf}$aMw=mLp3$nBorfCOeU6zF&h=#r{>azq7-+5S0Bgh)+c`D6pf~ z+NtrgHBboBPR+#{lK#qgiwy}^c90hqhRr@nq#KrWBp^U<;lkImG(NCHiRG*ml9i4b z74Kc$FRZe&3ty)6i*ES|w&s{CjZi?MgY;d<0^3DOFQ7W`^;;$%Wqhh3+8|FB8bRZ&((h_j!(D;AT$YR)`e#qNH6w6uaL z+ShXM(a7K8Y|X%`MKPmq=FxAX+#LCl!VKUDv5P--n$&IdsMktV_7vg142sFB4{G0I z>mySvEG=)7KH$w4(63@OGVz09xVJWi7D4_5lm1xC+TQ;VdYykfh_xdzb}=ts4!>EJ z`NWKK#y{m@vNroZ{Hgp1-o!Xg>>TZVuiWcLQR**66cYW&fuY5|u7Cd<=3>T>d%-i% zZK}ySGO@&ggO9S`HD^M;wr&dfgG09m9!K_H)z_B0@ACDXLiPV)nK1*%nXn3%aH=Bh z?%TXkulZ!8t-An3?U0>uYPd6(bNuxc_mj-{Z6b#N)m1|zX3}5emO^>2cpQiM!x3~S zA}N@By7^*@onI?5KX)~{2{Qi^*Jm*bC9o~x!OEb(2g~3bg1W4x5gRKy&D8vSs}F{H zNkK3X=2XEb2=zs60^>`aYj zG>bSzILx0MKii(&8W^^a0i_ZFomWws#iv9|wZZR}wcDr{WHTt5o1DasKL&4KDfYKp zzNB`>A4#^xtV4}N)kWt*I2}Q3>^5q3+@`CUrwW&D!jA&$k~cJ^M~pJXt^>5oj?EgR zLE5d2eEK9vyF0ZLwgyjK{%2!z8@~<-C0*tm^^IaQ(4Iu?SB6GzFfphmJ#SxLeR>5( zcKc8ji=!>09&}^lWVs1Bz{o&N1I$;J{eZiOV+PEebxhN6SJU9yCv#25xs1zUFclTj zV5gmLdPN;SewwvY^f%X8wVek3CtD+@m2Ej2cZY}cg~ZCK~Fj!8P0MJ{YPtY@{rwXgfWI~?a(f5`Ic?Kb5K=^zwz_q znJihB(1L+P4u(;ByKpmAWo21xDg`Y9+S8cq{H}uI*2d_(m{xse>8cYZM|CGn4m^7F zKK+syZqm*!rOq17VtAG@6J_6YxG+Z(bsc+$99ba)wioP+!+q8w#J3!l%1IJi}zPiX>rbK209g>MRyhPHc?VKGN|VT&ihp2kNSuaIXyQ*5k=dk zjORhWKbL3o7I6*YEm>(zY`Ou7$ijrOlT|HMlPb0-St))>o?ZCS2=(0}YE}7z#Bav9 zZ*#2ha-O5zjU*ojIZG03OX?9%v($lUCkJOfEBBHp+|8${uCDHqtfM|SH-QWfA-5Q% zt9F3@UW%BJQLPX_$bGxtK75(IOjG0*Qdr^rv4@G4%pG}AVM$6UnI{86Q%Kyh%+|(%qAwcg^68t2XM8!X!74-h)o!Gz1X4&9AoX8T4tL)@~PnpZ|1frO^_P$Nq zklZq9GZʝ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%0AbC-l~(Z}lZ2f)q|`CVpmz}8e( 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

    ;x}VyqmV)mThm(W$Si96-$o{q(WIMx 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%0Dyp`=OqfZ)mG_uW23Ua1mjP+naGF$YqC9m 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 z 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 Xj;tD;}{k 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

    >du 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 diff --git a/tools/examples/textoutput.txt b/tools/examples/textoutput.txt deleted file mode 100644 index 767011a4..00000000 --- a/tools/examples/textoutput.txt +++ /dev/null @@ -1,115 +0,0 @@ -============================================================ -Call Tree for 'H5Dwrite' (Instance #1) -(Time metric: inclusive, Percentages: On) -============================================================ -└── H5Dwrite (ts: 1369855900, dur: 862208933 [inclusive]) [100.00% of self] - └── H5Dwrite (ts: 1369855900, dur: 862208933 [inclusive]) [100.00% of parent] - └── H5D__write_api_common (ts: 1370074900, dur: 861811933 [inclusive]) [99.95% of parent] - └── H5D__write_api_common (ts: 1370074900, dur: 861811933 [inclusive]) [100.00% of parent] - └── H5D__write (ts: 1371521900, dur: 859872933 [inclusive]) [99.78% of parent] - └── H5D__write (ts: 1371521900, dur: 859872933 [inclusive]) [100.00% of parent] - ├── H5D__ioinfo_init (ts: 1371839900, dur: 613000 [inclusive]) [0.07% of parent] - │ └── H5D__ioinfo_init (ts: 1371839900, dur: 613000 [inclusive]) [100.00% of parent] - ├── H5D__typeinfo_init (ts: 1372631900, dur: 1108000 [inclusive]) [0.13% of parent] - │ └── H5D__typeinfo_init (ts: 1372631900, dur: 1108000 [inclusive]) [100.00% of parent] - ├── H5D__dset_ioinfo_init (ts: 1374738900, dur: 249000 [inclusive]) [0.03% of parent] - │ └── H5D__dset_ioinfo_init (ts: 1374738900, dur: 249000 [inclusive]) [100.00% of parent] - ├── H5D__contig_is_space_alloc (ts: 1375109900, dur: 221000 [inclusive]) [0.03% of parent] - │ └── H5D__contig_is_space_alloc (ts: 1375109900, dur: 221000 [inclusive]) [100.00% of parent] - ├── H5D__alloc_storage (ts: 1375528900, dur: 2497000 [inclusive]) [0.29% of parent] - │ └── H5D__alloc_storage (ts: 1375528900, dur: 2497000 [inclusive]) [100.00% of parent] - │ ├── H5D__contig_is_space_alloc (ts: 1375728900, dur: 31000 [inclusive]) [1.24% of parent] - │ │ └── H5D__contig_is_space_alloc (ts: 1375728900, dur: 31000 [inclusive]) [100.00% of parent] - │ ├── H5D__contig_alloc (ts: 1375885900, dur: 753000 [inclusive]) [30.16% of parent] - │ │ └── H5D__contig_alloc (ts: 1375885900, dur: 753000 [inclusive]) [100.00% of parent] - │ └── H5D__mark (ts: 1376843900, dur: 1079000 [inclusive]) [43.21% of parent] - │ └── H5D__mark (ts: 1376843900, dur: 1079000 [inclusive]) [100.00% of parent] - │ └── H5D__layout_oh_write (ts: 1377128900, dur: 666000 [inclusive]) [61.72% of parent] - │ └── H5D__layout_oh_write (ts: 1377128900, dur: 666000 [inclusive]) [100.00% of parent] - ├── H5D__contig_io_init (ts: 1378137900, dur: 988000 [inclusive]) [0.11% of parent] - │ └── H5D__contig_io_init (ts: 1378137900, dur: 988000 [inclusive]) [100.00% of parent] - │ └── H5D__contig_may_use_select_io (ts: 1378646900, dur: 359000 [inclusive]) [36.34% of parent] - │ └── H5D__contig_may_use_select_io (ts: 1378646900, dur: 359000 [inclusive]) [100.00% of parent] - ├── H5D__typeinfo_init_phase2 (ts: 1379309900, dur: 379000 [inclusive]) [0.04% of parent] - │ └── H5D__typeinfo_init_phase2 (ts: 1379309900, dur: 379000 [inclusive]) [100.00% of parent] - ├── H5D__ioinfo_adjust (ts: 1379781900, dur: 218000 [inclusive]) [0.03% of parent] - │ └── H5D__ioinfo_adjust (ts: 1379781900, dur: 218000 [inclusive]) [100.00% of parent] - ├── H5D__typeinfo_init_phase3 (ts: 1380086900, dur: 192000 [inclusive]) [0.02% of parent] - │ └── H5D__typeinfo_init_phase3 (ts: 1380086900, dur: 192000 [inclusive]) [100.00% of parent] - ├── H5D__contig_write (ts: 1380538900, dur: 849361933 [inclusive]) [98.78% of parent] - │ └── H5D__contig_write (ts: 1380538900, dur: 849361933 [inclusive]) [100.00% of parent] - │ └── H5D__select_write (ts: 1380810900, dur: 848973933 [inclusive]) [99.95% of parent] - │ └── H5D__select_write (ts: 1380810900, dur: 848973933 [inclusive]) [100.00% of parent] - │ └── H5D__select_io (ts: 1381013900, dur: 848656933 [inclusive]) [99.96% of parent] - │ └── H5D__select_io (ts: 1381013900, dur: 848656933 [inclusive]) [100.00% of parent] - │ └── H5D__contig_writevv (ts: 1382138899, dur: 846977934 [inclusive]) [99.80% of parent] - │ └── H5D__contig_writevv (ts: 1382138899, dur: 846977934 [inclusive]) [100.00% of parent] - │ └── H5D__contig_writevv_sieve_cb (ts: 1382604899, dur: 846329934 [inclusive]) [99.92% of parent] - │ └── H5D__contig_writevv_sieve_cb (ts: 1382604899, dur: 846329934 [inclusive]) [100.00% of parent] - │ └── pwrite64 (ts: 1382977899, dur: 845291934 [inclusive]) [99.88% of parent] - │ └── pwrite64 (ts: 1382977899, dur: 845291934 [inclusive]) [100.00% of parent] - ├── H5D__contig_io_term (ts: 2230098833, dur: 865000 [inclusive]) [0.10% of parent] - │ └── H5D__contig_io_term (ts: 2230098833, dur: 865000 [inclusive]) [100.00% of parent] - │ └── H5D__free_piece_info (ts: 2230359833, dur: 496000 [inclusive]) [57.34% of parent] - │ └── H5D__free_piece_info (ts: 2230359833, dur: 496000 [inclusive]) [100.00% of parent] - └── H5D__typeinfo_term (ts: 2231060833, dur: 191000 [inclusive]) [0.02% of parent] - └── H5D__typeinfo_term (ts: 2231060833, dur: 191000 [inclusive]) [100.00% of parent] - -============================================================ -Call Tree for 'H5Dwrite' (Instance #2) -(Time metric: inclusive, Percentages: On) -============================================================ -└── H5Dwrite (ts: 1369855900, dur: 862208933 [inclusive]) [100.00% of self] - └── H5D__write_api_common (ts: 1370074900, dur: 861811933 [inclusive]) [99.95% of parent] - └── H5D__write_api_common (ts: 1370074900, dur: 861811933 [inclusive]) [100.00% of parent] - └── H5D__write (ts: 1371521900, dur: 859872933 [inclusive]) [99.78% of parent] - └── H5D__write (ts: 1371521900, dur: 859872933 [inclusive]) [100.00% of parent] - ├── H5D__ioinfo_init (ts: 1371839900, dur: 613000 [inclusive]) [0.07% of parent] - │ └── H5D__ioinfo_init (ts: 1371839900, dur: 613000 [inclusive]) [100.00% of parent] - ├── H5D__typeinfo_init (ts: 1372631900, dur: 1108000 [inclusive]) [0.13% of parent] - │ └── H5D__typeinfo_init (ts: 1372631900, dur: 1108000 [inclusive]) [100.00% of parent] - ├── H5D__dset_ioinfo_init (ts: 1374738900, dur: 249000 [inclusive]) [0.03% of parent] - │ └── H5D__dset_ioinfo_init (ts: 1374738900, dur: 249000 [inclusive]) [100.00% of parent] - ├── H5D__contig_is_space_alloc (ts: 1375109900, dur: 221000 [inclusive]) [0.03% of parent] - │ └── H5D__contig_is_space_alloc (ts: 1375109900, dur: 221000 [inclusive]) [100.00% of parent] - ├── H5D__alloc_storage (ts: 1375528900, dur: 2497000 [inclusive]) [0.29% of parent] - │ └── H5D__alloc_storage (ts: 1375528900, dur: 2497000 [inclusive]) [100.00% of parent] - │ ├── H5D__contig_is_space_alloc (ts: 1375728900, dur: 31000 [inclusive]) [1.24% of parent] - │ │ └── H5D__contig_is_space_alloc (ts: 1375728900, dur: 31000 [inclusive]) [100.00% of parent] - │ ├── H5D__contig_alloc (ts: 1375885900, dur: 753000 [inclusive]) [30.16% of parent] - │ │ └── H5D__contig_alloc (ts: 1375885900, dur: 753000 [inclusive]) [100.00% of parent] - │ └── H5D__mark (ts: 1376843900, dur: 1079000 [inclusive]) [43.21% of parent] - │ └── H5D__mark (ts: 1376843900, dur: 1079000 [inclusive]) [100.00% of parent] - │ └── H5D__layout_oh_write (ts: 1377128900, dur: 666000 [inclusive]) [61.72% of parent] - │ └── H5D__layout_oh_write (ts: 1377128900, dur: 666000 [inclusive]) [100.00% of parent] - ├── H5D__contig_io_init (ts: 1378137900, dur: 988000 [inclusive]) [0.11% of parent] - │ └── H5D__contig_io_init (ts: 1378137900, dur: 988000 [inclusive]) [100.00% of parent] - │ └── H5D__contig_may_use_select_io (ts: 1378646900, dur: 359000 [inclusive]) [36.34% of parent] - │ └── H5D__contig_may_use_select_io (ts: 1378646900, dur: 359000 [inclusive]) [100.00% of parent] - ├── H5D__typeinfo_init_phase2 (ts: 1379309900, dur: 379000 [inclusive]) [0.04% of parent] - │ └── H5D__typeinfo_init_phase2 (ts: 1379309900, dur: 379000 [inclusive]) [100.00% of parent] - ├── H5D__ioinfo_adjust (ts: 1379781900, dur: 218000 [inclusive]) [0.03% of parent] - │ └── H5D__ioinfo_adjust (ts: 1379781900, dur: 218000 [inclusive]) [100.00% of parent] - ├── H5D__typeinfo_init_phase3 (ts: 1380086900, dur: 192000 [inclusive]) [0.02% of parent] - │ └── H5D__typeinfo_init_phase3 (ts: 1380086900, dur: 192000 [inclusive]) [100.00% of parent] - ├── H5D__contig_write (ts: 1380538900, dur: 849361933 [inclusive]) [98.78% of parent] - │ └── H5D__contig_write (ts: 1380538900, dur: 849361933 [inclusive]) [100.00% of parent] - │ └── H5D__select_write (ts: 1380810900, dur: 848973933 [inclusive]) [99.95% of parent] - │ └── H5D__select_write (ts: 1380810900, dur: 848973933 [inclusive]) [100.00% of parent] - │ └── H5D__select_io (ts: 1381013900, dur: 848656933 [inclusive]) [99.96% of parent] - │ └── H5D__select_io (ts: 1381013900, dur: 848656933 [inclusive]) [100.00% of parent] - │ └── H5D__contig_writevv (ts: 1382138899, dur: 846977934 [inclusive]) [99.80% of parent] - │ └── H5D__contig_writevv (ts: 1382138899, dur: 846977934 [inclusive]) [100.00% of parent] - │ └── H5D__contig_writevv_sieve_cb (ts: 1382604899, dur: 846329934 [inclusive]) [99.92% of parent] - │ └── H5D__contig_writevv_sieve_cb (ts: 1382604899, dur: 846329934 [inclusive]) [100.00% of parent] - │ └── pwrite64 (ts: 1382977899, dur: 845291934 [inclusive]) [99.88% of parent] - │ └── pwrite64 (ts: 1382977899, dur: 845291934 [inclusive]) [100.00% of parent] - ├── H5D__contig_io_term (ts: 2230098833, dur: 865000 [inclusive]) [0.10% of parent] - │ └── H5D__contig_io_term (ts: 2230098833, dur: 865000 [inclusive]) [100.00% of parent] - │ └── H5D__free_piece_info (ts: 2230359833, dur: 496000 [inclusive]) [57.34% of parent] - │ └── H5D__free_piece_info (ts: 2230359833, dur: 496000 [inclusive]) [100.00% of parent] - └── H5D__typeinfo_term (ts: 2231060833, dur: 191000 [inclusive]) [0.02% of parent] - └── H5D__typeinfo_term (ts: 2231060833, dur: 191000 [inclusive]) [100.00% of parent] - - -Analysis complete. diff --git a/tools/separator.sh b/tools/separator.sh deleted file mode 100755 index 18ae0ec3..00000000 --- a/tools/separator.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -# A script to split a .pfw file into multiple files based on unique PIDs. -# --- Usage --- -# ./refractor.sh - -# 1. Validate input -if [ -z "$1" ]; then - 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 -fi - -echo "Processing file: $input_file" - -# 2. Extract unique PIDs from the file. -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 -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" - - # 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." From a83b7f29771188a825fb9becc012ecece90c970b Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Mon, 23 Mar 2026 21:44:36 -0700 Subject: [PATCH 12/19] feat: enhance docker build workflow to support multiple Ubuntu versions --- .github/workflows/docker-build-test.yml | 54 +++++++++++++------------ 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml index 2bdfc3cd..8e993492 100644 --- a/.github/workflows/docker-build-test.yml +++ b/.github/workflows/docker-build-test.yml @@ -20,7 +20,16 @@ env: jobs: vm-build-and-test: - runs-on: ubuntu-24.04 + name: VM Build and Flow Test (${{ matrix.os_name }}) + strategy: + fail-fast: false + matrix: + include: + - os_name: ubuntu-22.04 + runner: ubuntu-22.04 + - os_name: ubuntu-24.04 + runner: ubuntu-24.04 + runs-on: ${{ matrix.runner }} steps: - name: Checkout datacrumbs @@ -41,33 +50,28 @@ jobs: run: | set -euo pipefail sudo apt-get update - sudo apt-get install -y \ - build-essential \ - cmake \ - git \ - pkg-config \ - clang \ - clang-17 \ - llvm \ - llvm-17 \ - llvm-dev \ - libclang-dev \ - libclang-17-dev \ - libelf-dev \ - libssl-dev \ - libcap-dev \ - libyaml-cpp-dev \ - libjson-c-dev \ - zlib1g-dev \ - jq \ - patchelf \ - python3 \ - openmpi-bin \ - libopenmpi-dev + + libclang_dev_pkg=$(apt-cache search '^libclang-[0-9]+-dev$' | awk '{print $1}' | sort -V | tail -n 1) + if [[ -z "${libclang_dev_pkg}" ]]; then + echo "Unable to determine a versioned libclang development package" >&2 + exit 1 + fi + + sudo apt-get install -y build-essential cmake git pkg-config clang llvm llvm-dev libclang-dev "${libclang_dev_pkg}" libelf-dev libssl-dev libcap-dev libyaml-cpp-dev libjson-c-dev zlib1g-dev jq patchelf python3 openmpi-bin libopenmpi-dev if [[ ! -d "/usr/src/linux-headers-$(uname -r)" ]]; then sudo apt-get install -y "linux-headers-$(uname -r)" || sudo apt-get install -y linux-headers-generic fi + - name: Export LLVM toolchain paths + run: | + set -euo pipefail + llvm_include_dir="$(llvm-config --includedir)" + llvm_lib_dir="$(llvm-config --libdir)" + echo "C_INCLUDE_PATH=${llvm_include_dir}:${C_INCLUDE_PATH:-}" >> "${GITHUB_ENV}" + echo "CPLUS_INCLUDE_PATH=${llvm_include_dir}:${CPLUS_INCLUDE_PATH:-}" >> "${GITHUB_ENV}" + echo "LIBRARY_PATH=${llvm_lib_dir}:${LIBRARY_PATH:-}" >> "${GITHUB_ENV}" + echo "LD_LIBRARY_PATH=${llvm_lib_dir}:${LD_LIBRARY_PATH:-}" >> "${GITHUB_ENV}" + - name: Build and stage libbpf and bpftool from source run: | set -euo pipefail @@ -231,7 +235,7 @@ jobs: if: always() uses: actions/upload-artifact@v4 with: - name: datacrumbs-ubuntu-24.04-logs + name: datacrumbs-${{ matrix.os_name }}-logs path: | /tmp/datacrumbs-logs /tmp/datacrumbs-traces From 4989c323b917980686677fae7326be2185c5d0ab Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Tue, 24 Mar 2026 09:56:03 -0700 Subject: [PATCH 13/19] feat: add option to disable probe signing and update related logic --- .github/workflows/docker-build-test.yml | 91 +++++++++++++++++-- .gitignore | 3 +- CMakeLists.txt | 2 + cmake/configure_files/datacrumbs_config.h.in | 1 + src/datacrumbs/common/probe_file.h | 28 ++++++ src/datacrumbs/server/process/server.cpp | 4 + .../system_configurator.cpp | 5 + 7 files changed, 125 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml index 8e993492..a6b88b8b 100644 --- a/.github/workflows/docker-build-test.yml +++ b/.github/workflows/docker-build-test.yml @@ -20,15 +20,31 @@ env: jobs: vm-build-and-test: - name: VM Build and Flow Test (${{ matrix.os_name }}) + name: VM ${{ matrix.flow_name }} (${{ matrix.os_name }}) strategy: fail-fast: false matrix: include: - os_name: ubuntu-22.04 runner: ubuntu-22.04 + flow_name: Build and Flow Test + flow_id: signed + disable_signing: "false" + - os_name: ubuntu-22.04 + runner: ubuntu-22.04 + flow_name: Disabled Signing Flow Test + flow_id: disabled-signing + disable_signing: "true" + - os_name: ubuntu-24.04 + runner: ubuntu-24.04 + flow_name: Build and Flow Test + flow_id: signed + disable_signing: "false" - os_name: ubuntu-24.04 runner: ubuntu-24.04 + flow_name: Disabled Signing Flow Test + flow_id: disabled-signing + disable_signing: "true" runs-on: ${{ matrix.runner }} steps: @@ -57,7 +73,27 @@ jobs: exit 1 fi - sudo apt-get install -y build-essential cmake git pkg-config clang llvm llvm-dev libclang-dev "${libclang_dev_pkg}" libelf-dev libssl-dev libcap-dev libyaml-cpp-dev libjson-c-dev zlib1g-dev jq patchelf python3 openmpi-bin libopenmpi-dev + sudo apt-get install -y \ + build-essential \ + cmake \ + git \ + pkg-config \ + clang \ + llvm \ + llvm-dev \ + libclang-dev \ + "${libclang_dev_pkg}" \ + libelf-dev \ + libssl-dev \ + libcap-dev \ + libyaml-cpp-dev \ + libjson-c-dev \ + zlib1g-dev \ + jq \ + patchelf \ + python3 \ + openmpi-bin \ + libopenmpi-dev if [[ ! -d "/usr/src/linux-headers-$(uname -r)" ]]; then sudo apt-get install -y "linux-headers-$(uname -r)" || sudo apt-get install -y linux-headers-generic fi @@ -152,6 +188,11 @@ jobs: - name: Configure datacrumbs run: | set -euo pipefail + extra_cmake_args=() + if [[ "${{ matrix.disable_signing }}" == "true" ]]; then + extra_cmake_args+=("-DDATACRUMBS_DISABLE_PROBE_SIGNING=ON") + fi + cmake -S "${GITHUB_WORKSPACE}/datacrumbs" -B "${BUILD_DIR}" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ @@ -164,7 +205,8 @@ jobs: -DDATACRUMBS_CONFIGURED_TRACE_DIR="${TRACE_DIR}" \ -DDATACRUMBS_KERNEL_HEADERS_PATH="/usr/src/linux-headers-$(uname -r)" \ -DDATACRUMBS_UTILS_GIT_REPOSITORY="file://${GITHUB_WORKSPACE}/datacrumbs-utils" \ - -DDATACRUMBS_UTILS_GIT_REF="${DATACRUMBS_UTILS_REF}" + -DDATACRUMBS_UTILS_GIT_REF="${DATACRUMBS_UTILS_REF}" \ + "${extra_cmake_args[@]}" - name: Build datacrumbs run: | @@ -181,7 +223,8 @@ jobs: set -euo pipefail sudo "${INSTALL_PREFIX}/bin/datacrumbs_system_configurator" - - name: Install and start systemd units + - name: Install and start signing-enabled systemd units + if: matrix.disable_signing == 'false' run: | set -euo pipefail sudo ln -sf "${INSTALL_PREFIX}/etc/datacrumbs/systemd/datacrumbs_sign_probes.service" /etc/systemd/system/datacrumbs_sign_probes.service @@ -190,14 +233,41 @@ jobs: sudo systemctl enable --now datacrumbs_sign_probes.service sudo systemctl status --no-pager datacrumbs_sign_probes.service - - name: Generate signed probes + - name: Install disabled-signing runtime systemd unit + if: matrix.disable_signing == 'true' + run: | + set -euo pipefail + sudo ln -sf "${INSTALL_PREFIX}/etc/datacrumbs/systemd/datacrumbs@.service" /etc/systemd/system/datacrumbs@.service + sudo systemctl daemon-reload + + - name: Generate probes run: | set -euo pipefail test -f "${CONFIG_YAML}" rm -f "${PROBE_FILE}" - "${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator" "${CONFIG_YAML}" "${PROBE_FILE}" + + probe_output="$("${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator" "${CONFIG_YAML}" "${PROBE_FILE}" 2>&1)" + printf '%s\n' "${probe_output}" test -s "${PROBE_FILE}" + if [[ "${{ matrix.disable_signing }}" == "true" ]]; then + grep -q "Probe signing is disabled" <<<"${probe_output}" + python3 - <<'PY' + import gzip + import json + import os + from pathlib import Path + + probe_file = Path(os.environ["PROBE_FILE"]) + with gzip.open(probe_file, "rt", encoding="utf-8") as handle: + payload = json.load(handle) + + assert "checksum" not in payload, payload + assert "checksum_algorithm" not in payload, payload + assert isinstance(payload.get("categories"), list) and payload["categories"], payload + PY + fi + - name: Run datacrumbs wrapper flow and verify logs run: | set -euo pipefail @@ -208,7 +278,9 @@ jobs: "${INSTALL_PREFIX}/bin/datacrumbs_service_wrapper" stop "${JOB_ID}" "${service_user}" "${PROBE_FILE}" || true sudo systemctl status --no-pager "datacrumbs@${JOB_ID}.service" || true sudo journalctl -u "datacrumbs@${JOB_ID}.service" --no-pager -n 200 || true - sudo journalctl -u datacrumbs_sign_probes.service --no-pager -n 200 || true + if [[ "${{ matrix.disable_signing }}" == "false" ]]; then + sudo journalctl -u datacrumbs_sign_probes.service --no-pager -n 200 || true + fi } trap cleanup EXIT @@ -229,13 +301,16 @@ jobs: ! sudo systemctl is-active --quiet "datacrumbs@${JOB_ID}.service" test -s "${log_file}" grep -q . "${log_file}" + if [[ "${{ matrix.disable_signing }}" == "true" ]]; then + grep -q "Probe signing is disabled" "${log_file}" + fi tail -n 50 "${log_file}" - name: Upload datacrumbs logs if: always() uses: actions/upload-artifact@v4 with: - name: datacrumbs-${{ matrix.os_name }}-logs + name: datacrumbs-${{ matrix.os_name }}-${{ matrix.flow_id }}-logs path: | /tmp/datacrumbs-logs /tmp/datacrumbs-traces diff --git a/.gitignore b/.gitignore index dee36476..6db2d73d 100755 --- a/.gitignore +++ b/.gitignore @@ -83,4 +83,5 @@ deps # Sphinx documentation builds docs/_build/ docs/_static/__pycache__/ -.vscode \ No newline at end of file +.vscode +build* \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index c97dacc4..a3f450bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,7 @@ option(DATACRUMBS_BPFTIME_COMPATIBLE "Enable compatibility with bpftime" OFF) option(DATACRUMBS_ENABLE_OPT "Enable tracing" ON) option(DATACRUMBS_TRACE_ALL_PROCESSES_OPT "Trace all processes" OFF) option(DATACRUMBS_BPF_PRINT_ENABLE "Enable BPF print" OFF) +option(DATACRUMBS_DISABLE_PROBE_SIGNING "Disable probe signing and signature verification" OFF) set(DATACRUMBS_MODE_STR "TRACE" CACHE STRING "Mode for datacrumbs (TRACE or PROFILE)") set_property(CACHE DATACRUMBS_MODE_STR PROPERTY STRINGS TRACE PROFILE) @@ -323,6 +324,7 @@ ExternalProject_Add( "-DDATACRUMBS_ENABLE_OPT=${DATACRUMBS_ENABLE_OPT}" "-DDATACRUMBS_TRACE_ALL_PROCESSES_OPT=${DATACRUMBS_TRACE_ALL_PROCESSES_OPT}" "-DDATACRUMBS_BPF_PRINT_ENABLE=${DATACRUMBS_BPF_PRINT_ENABLE}" + "-DDATACRUMBS_DISABLE_PROBE_SIGNING=${DATACRUMBS_DISABLE_PROBE_SIGNING}" "-DDATACRUMBS_KERNEL_HEADERS_PATH=${DATACRUMBS_KERNEL_HEADERS_PATH}" "-DDATACRUMBS_KERNEL_VERSION=${DATACRUMBS_KERNEL_VERSION}" BUILD_COMMAND diff --git a/cmake/configure_files/datacrumbs_config.h.in b/cmake/configure_files/datacrumbs_config.h.in index 8c2cdb61..4fc2a72f 100644 --- a/cmake/configure_files/datacrumbs_config.h.in +++ b/cmake/configure_files/datacrumbs_config.h.in @@ -33,6 +33,7 @@ #ifndef DATACRUMBS_BPF_PRINT_ENABLE_FLAG #define DATACRUMBS_BPF_PRINT_ENABLE_FLAG 0 #endif +#cmakedefine DATACRUMBS_DISABLE_PROBE_SIGNING 1 #define DATACRUMBS_BPFTIME_COMPATIBLE_FLAG @DATACRUMBS_BPFTIME_COMPATIBLE_FLAG@ #ifndef DATACRUMBS_BPFTIME_COMPATIBLE_FLAG #define DATACRUMBS_BPFTIME_COMPATIBLE_FLAG 0 diff --git a/src/datacrumbs/common/probe_file.h b/src/datacrumbs/common/probe_file.h index 8274b655..e159485a 100644 --- a/src/datacrumbs/common/probe_file.h +++ b/src/datacrumbs/common/probe_file.h @@ -219,6 +219,11 @@ inline json_object* verified_categories_from_root(json_object* root, const std:: } return nullptr; } + +#ifdef DATACRUMBS_DISABLE_PROBE_SIGNING + (void)secret; + return json_object_get(categories); +#else if (!json_object_object_get_ex(root, "checksum", &checksum_obj) || json_object_get_type(checksum_obj) != json_type_string) { if (error != nullptr) { @@ -246,10 +251,32 @@ inline json_object* verified_categories_from_root(json_object* root, const std:: } return json_object_get(categories); +#endif } inline json_object* load_verified_categories_from_file(const std::filesystem::path& path, std::string* error = nullptr) { +#ifdef DATACRUMBS_DISABLE_PROBE_SIGNING + const std::string payload = read_probe_payload(path); + if (payload.empty()) { + if (error != nullptr) { + *error = "failed to read probe file"; + } + return nullptr; + } + + json_object* root = json_tokener_parse(payload.c_str()); + if (root == nullptr) { + if (error != nullptr) { + *error = "failed to parse probe file"; + } + return nullptr; + } + + json_object* categories = verified_categories_from_root(root, "", error); + json_object_put(root); + return categories; +#else std::string secret; if (!ensure_probe_secret(&secret)) { if (error != nullptr) { @@ -277,6 +304,7 @@ inline json_object* load_verified_categories_from_file(const std::filesystem::pa json_object* categories = verified_categories_from_root(root, secret, error); json_object_put(root); return categories; +#endif } } // namespace datacrumbs::probe_file diff --git a/src/datacrumbs/server/process/server.cpp b/src/datacrumbs/server/process/server.cpp index 77723913..77830c44 100644 --- a/src/datacrumbs/server/process/server.cpp +++ b/src/datacrumbs/server/process/server.cpp @@ -1,7 +1,11 @@ +#include #include #include int main(int argc, char** argv) { +#ifdef DATACRUMBS_DISABLE_PROBE_SIGNING + DC_LOG_WARN("Probe signing is disabled. datacrumbs will accept unsigned probes files."); +#endif return main_call(argc, argv); } \ No newline at end of file diff --git a/src/datacrumbs/system_configurator/system_configurator.cpp b/src/datacrumbs/system_configurator/system_configurator.cpp index 6a352f82..5726bfd6 100644 --- a/src/datacrumbs/system_configurator/system_configurator.cpp +++ b/src/datacrumbs/system_configurator/system_configurator.cpp @@ -38,12 +38,16 @@ void SystemConfigurator::enforce_secret_ownership_and_mode() const { void SystemConfigurator::add_system_configuration(json_object* root) const { std::string job_other_flags; std::string inclusion_paths; + std::string probe_signing_disabled = "0"; #ifdef DATACRUMBS_JOB_OTHER_FLAGS job_other_flags = optional_macro_string(DATACRUMBS_JOB_OTHER_FLAGS); #endif #ifdef DATACRUMBS_INCLUSION_PATHS inclusion_paths = optional_macro_string(DATACRUMBS_INCLUSION_PATHS); #endif +#ifdef DATACRUMBS_DISABLE_PROBE_SIGNING + probe_signing_disabled = "1"; +#endif const std::unordered_map values = { {"DATACRUMBS_INSTALL_PREFIX", DATACRUMBS_INSTALL_PREFIX_PATH}, @@ -72,6 +76,7 @@ void SystemConfigurator::add_system_configuration(json_object* root) const { {"DATACRUMBS_KERNEL_UNAME_R", DATACRUMBS_KERNEL_UNAME_R}, {"DATACRUMBS_KERNEL_HEADERS_PATH", DATACRUMBS_KERNEL_HEADERS_PATH}, {"DATACRUMBS_LIBC_SO", DATACRUMBS_LIBC_SO}, + {"DATACRUMBS_DISABLE_PROBE_SIGNING", probe_signing_disabled}, }; for (const auto& [key, value] : values) { From d3c56cb0a54486bfd04bffe60c6bdcd175fa56ad Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Tue, 24 Mar 2026 16:24:09 -0700 Subject: [PATCH 14/19] feat: add option to override kernel headers path in CMake configuration --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index a3f450bb..3c009590 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,7 @@ 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") +set(DATACRUMBS_KERNEL_HEADERS_PATH "" CACHE PATH "Override path to the kernel headers for datacrumbs") set(DATACRUMBS_HOST "NONE" CACHE STRING "Host name for datacrumbs") set(DATACRUMBS_USER "$ENV{USER}" CACHE STRING "User name for datacrumbs") set(DATACRUMBS_INSTALL_USER "$ENV{USER}" CACHE STRING "Installation user name for datacrumbs") From d1c3e0a6db6f90f1fec4388321d278e6675a6ebc Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Tue, 24 Mar 2026 16:52:59 -0700 Subject: [PATCH 15/19] feat: add system configuration file handling and update related logic --- CMakeLists.txt | 20 ++++++++++++++-- .../system_configurator.cpp | 24 ++++++++++++++----- .../system_configurator/system_configurator.h | 1 + 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c009590..c1a5f247 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -156,6 +156,9 @@ set(DATACRUMBS_PROBE_SECRET_FILE set(DATACRUMBS_SIGN_PROBES_SOCKET_PATH "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/datacrumbs-sign-probes.sock" ) +set(DATACRUMBS_UTILS_SYSTEM_CONFIGURATION_FILE + "${CMAKE_BINARY_DIR}/configs/datacrumbs-system-configuration.json.gz" +) set(DATACRUMBS_TRACE_DIR_PATTERN "${DATACRUMBS_CONFIGURED_TRACE_DIR}/%YY%/%MM%/%DD%") set(DATACRUMBS_CLIENT_LIB "${DATACRUMBS_UTILS_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libdatacrumbs_client.so") set(DATACRUMBS_JOB_SCHEDULER "${DATACRUMBS_SCHEDULER_TYPE}") @@ -310,6 +313,8 @@ ExternalProject_Add( "-DCMAKE_SYSTEMD_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/systemd" "-DDATACRUMBS_PROJECT_PATH=${CMAKE_CURRENT_SOURCE_DIR}" "-DDATACRUMBS_UTILS_PROJECT_PATH=" + "-DDATACRUMBS_BUILD_SYSTEM_CONFIGURATION_FILE=${DATACRUMBS_UTILS_SYSTEM_CONFIGURATION_FILE}" + "-DDATACRUMBS_INSTALL_DIR=${CMAKE_INSTALL_PREFIX}" "-DDATACRUMBS_HOST=${DATACRUMBS_HOST}" "-DDATACRUMBS_USER=${DATACRUMBS_USER}" "-DDATACRUMBS_INSTALL_USER=${DATACRUMBS_INSTALL_USER}" @@ -363,11 +368,22 @@ set(DATACRUMBS_SIGN_PROBES_SERVICE_SRC add_executable(datacrumbs_system_configurator ${DATACRUMBS_SYSTEM_CONFIGURATOR_SRC} ${DATACRUMBS_COMMON_SRC}) target_link_libraries(datacrumbs_system_configurator ${DEPENDENCY_LIB}) -add_dependencies(datacrumbs_system_configurator datacrumbs_utils_install) install(TARGETS datacrumbs_system_configurator RUNTIME DESTINATION "${DATACRUMBS_INSTALL_BINARYDIR}" ) +add_custom_target( + generate_utils_system_configuration + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/configs + COMMAND + ${CMAKE_COMMAND} -E env + DATACRUMBS_SYSTEM_PROBE_FILE_OVERRIDE=${DATACRUMBS_UTILS_SYSTEM_CONFIGURATION_FILE} + $ + DEPENDS datacrumbs_system_configurator + COMMENT "Generating build-tree system configuration for datacrumbs-utils" +) +add_dependencies(datacrumbs_utils_external generate_utils_system_configuration) + add_executable(datacrumbs_sign_probes ${DATACRUMBS_SIGN_PROBES_SERVICE_SRC} ${DATACRUMBS_COMMON_SRC}) target_link_libraries(datacrumbs_sign_probes ${DEPENDENCY_LIB}) add_dependencies(datacrumbs_sign_probes datacrumbs_utils_install run_system_configurator) @@ -384,7 +400,7 @@ add_custom_target( -DDATACRUMBS_SYSTEM_CONFIGURATOR_BIN=$ -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run_system_configurator_if_missing.cmake - DEPENDS datacrumbs_system_configurator datacrumbs_utils_install + DEPENDS datacrumbs_system_configurator COMMENT "Generating install-time system configuration and probe secret" ) diff --git a/src/datacrumbs/system_configurator/system_configurator.cpp b/src/datacrumbs/system_configurator/system_configurator.cpp index 5726bfd6..7c9dc7a4 100644 --- a/src/datacrumbs/system_configurator/system_configurator.cpp +++ b/src/datacrumbs/system_configurator/system_configurator.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -25,6 +26,14 @@ void SystemConfigurator::add_string(json_object* root, const char* key, json_object_object_add(root, key, json_object_new_string(value.c_str())); } +std::string SystemConfigurator::system_configuration_path() const { + const char* override_path = std::getenv("DATACRUMBS_SYSTEM_PROBE_FILE_OVERRIDE"); + if (override_path != nullptr && override_path[0] != '\0') { + return std::string(override_path); + } + return DATACRUMBS_SYSTEM_PROBE_FILE; +} + std::string SystemConfigurator::optional_macro_string(const char* value) const { return value != nullptr ? std::string(value) : std::string(); } @@ -98,8 +107,10 @@ int SystemConfigurator::run() { DC_LOG_WARN("Skipping probe signing secret creation during non-root configuration pass"); } - if (std::filesystem::exists(DATACRUMBS_SYSTEM_PROBE_FILE)) { - DC_LOG_INFO("System configuration already exists at: %s", DATACRUMBS_SYSTEM_PROBE_FILE); + const std::string system_configuration_path = this->system_configuration_path(); + if (std::filesystem::exists(system_configuration_path)) { + DC_LOG_INFO("System configuration already exists at: %s", + system_configuration_path.c_str()); if (secret_ready) { DC_LOG_INFO("Probe signing secret ensured at: %s", datacrumbs::probe_file::secret_path().string().c_str()); @@ -120,7 +131,7 @@ int SystemConfigurator::run() { add_string(summary, "config_path", DATACRUMBS_INSTALL_CONFIGS_DIR); add_string(summary, "trace_log_dir", DATACRUMBS_CONFIGURED_TRACE_DIR); add_string(summary, "data_dir", DATACRUMBS_INSTALL_SHARED_DATA_DIR); - add_string(summary, "system_probe_path", DATACRUMBS_SYSTEM_PROBE_FILE); + add_string(summary, "system_probe_path", system_configuration_path); add_string(summary, "hostname", hostname); add_string(summary, "user", DATACRUMBS_USER); add_string(summary, "install_user", DATACRUMBS_INSTALL_USER); @@ -128,15 +139,16 @@ int SystemConfigurator::run() { const char* json_payload = json_object_to_json_string_ext(root, JSON_C_TO_STRING_PLAIN); const bool ok = - datacrumbs::probe_file::write_gzip_file(DATACRUMBS_SYSTEM_PROBE_FILE, json_payload); + datacrumbs::probe_file::write_gzip_file(system_configuration_path, json_payload); json_object_put(root); if (!ok) { - DC_LOG_ERROR("Failed to write system configuration file: %s", DATACRUMBS_SYSTEM_PROBE_FILE); + DC_LOG_ERROR("Failed to write system configuration file: %s", + system_configuration_path.c_str()); return 1; } - DC_LOG_INFO("System configuration written to: %s", DATACRUMBS_SYSTEM_PROBE_FILE); + DC_LOG_INFO("System configuration written to: %s", system_configuration_path.c_str()); if (secret_ready) { DC_LOG_INFO("Probe signing secret ensured at: %s", datacrumbs::probe_file::secret_path().string().c_str()); diff --git a/src/datacrumbs/system_configurator/system_configurator.h b/src/datacrumbs/system_configurator/system_configurator.h index 5a8656a6..b04c2005 100644 --- a/src/datacrumbs/system_configurator/system_configurator.h +++ b/src/datacrumbs/system_configurator/system_configurator.h @@ -11,6 +11,7 @@ class SystemConfigurator { private: std::string current_hostname() const; + std::string system_configuration_path() const; void add_string(json_object* root, const char* key, const std::string& value) const; std::string optional_macro_string(const char* value) const; void enforce_secret_ownership_and_mode() const; From 2a82ebb99d2971308626721b447b751e8f06d585 Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Tue, 24 Mar 2026 16:57:18 -0700 Subject: [PATCH 16/19] feat: add error handling for updating system configuration file permissions --- .../system_configurator/system_configurator.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/datacrumbs/system_configurator/system_configurator.cpp b/src/datacrumbs/system_configurator/system_configurator.cpp index 7c9dc7a4..529839b0 100644 --- a/src/datacrumbs/system_configurator/system_configurator.cpp +++ b/src/datacrumbs/system_configurator/system_configurator.cpp @@ -109,6 +109,11 @@ int SystemConfigurator::run() { const std::string system_configuration_path = this->system_configuration_path(); if (std::filesystem::exists(system_configuration_path)) { + if (chmod(system_configuration_path.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) != 0) { + DC_LOG_ERROR("Failed to update system configuration file permissions: %s", + system_configuration_path.c_str()); + return 1; + } DC_LOG_INFO("System configuration already exists at: %s", system_configuration_path.c_str()); if (secret_ready) { @@ -147,6 +152,11 @@ int SystemConfigurator::run() { system_configuration_path.c_str()); return 1; } + if (chmod(system_configuration_path.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) != 0) { + DC_LOG_ERROR("Failed to update system configuration file permissions: %s", + system_configuration_path.c_str()); + return 1; + } DC_LOG_INFO("System configuration written to: %s", system_configuration_path.c_str()); if (secret_ready) { From 25057babe8ccb4b71581b8178e08b92fc0d3db05 Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Tue, 24 Mar 2026 17:19:40 -0700 Subject: [PATCH 17/19] feat: add configurable log directory for derived configurations --- cmake/modules/datacrumbs-utils.cmake | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 3ae360b9..98e2d7ca 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -248,6 +248,14 @@ macro(derive_configurations) endif() set(DATACRUMBS_SRC_GEN_PATH ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}) + if(DATACRUMBS_CONFIGURED_LOG_DIR + AND NOT DATACRUMBS_CONFIGURED_LOG_DIR STREQUAL "" + AND NOT DATACRUMBS_CONFIGURED_LOG_DIR STREQUAL "NONE") + set(DATACRUMBS_LOG_DIR ${DATACRUMBS_CONFIGURED_LOG_DIR}) + else() + set(DATACRUMBS_LOG_DIR ${CMAKE_BINARY_DIR}/logs) + endif() + set(DATACRUMBS_VARS --user ${DATACRUMBS_USER} @@ -256,7 +264,7 @@ macro(derive_configurations) --data_dir ${CMAKE_DATA_OUTPUT_DIRECTORY} --trace_log_dir - ${CMAKE_BINARY_DIR}/logs + ${DATACRUMBS_LOG_DIR} ) if(NOT @@ -269,7 +277,6 @@ macro(derive_configurations) 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") From 0a5570284df19f4b00e6aa3d8063769eb255c434 Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Tue, 24 Mar 2026 23:11:05 -0700 Subject: [PATCH 18/19] Refactor runtime probe state management and integrate SQLite database - Updated the RuntimeConfigurationManager to utilize an SQLite database for managing runtime probe states, replacing the previous JSON-based approach. - Introduced new methods for loading and persisting runtime probe states, including successful and invalid probes. - Modified the attach_runtime_probes function to record successful and invalid probes in the new database. - Enhanced error handling and logging for database operations. - Removed JSON dependencies in favor of SQLite for system configuration management in SystemConfigurator. - Added new utility functions for executing SQLite commands and writing key-value pairs to the database. - Updated related header files to reflect changes in data structures and method signatures. --- .github/workflows/docker-build-test.yml | 91 +++- .github/workflows/format-check.yml | 11 +- CMakeLists.txt | 177 +++---- cmake/configure_files/datacrumbs_config.h.in | 1 - cmake/datacrumbsConfig.cmake.in | 11 + cmake/datacrumbs_utils_compatibility.cmake | 3 + cmake/modules/datacrumbs-utils.cmake | 39 +- ...e_datacrumbs_utils_compatibility_env.cmake | 20 + docs/composability.rst | 13 +- docs/deployment.rst | 5 +- docs/setup.rst | 19 +- etc/datacrumbs/systemd/datacrumbs@.service.in | 2 +- .../systemd/datacrumbs_sign_probes.service.in | 2 +- notes.MD | 4 +- .../datacrumbs_service_common.sh.in | 45 +- .../datacrumbs/datacrumbs_service_run.sh.in | 2 +- src/datacrumbs/common/data_structures.h | 8 +- .../common/runtime_configuration_manager.cpp | 442 +++++++++++++----- .../common/runtime_configuration_manager.h | 19 +- src/datacrumbs/server/process/server.impl.cpp | 30 +- src/datacrumbs/signer/sign_probes_service.cpp | 52 ++- src/datacrumbs/signer/sign_probes_service.h | 2 +- .../system_configurator.cpp | 178 +++++-- .../system_configurator/system_configurator.h | 6 +- 24 files changed, 798 insertions(+), 384 deletions(-) create mode 100644 cmake/datacrumbsConfig.cmake.in create mode 100644 cmake/datacrumbs_utils_compatibility.cmake create mode 100644 cmake/write_datacrumbs_utils_compatibility_env.cmake diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml index a6b88b8b..dd63d5fc 100644 --- a/.github/workflows/docker-build-test.yml +++ b/.github/workflows/docker-build-test.yml @@ -8,6 +8,7 @@ on: env: BUILD_DIR: /tmp/dc-build + UTILS_BUILD_DIR: /tmp/dc-utils-build INSTALL_PREFIX: /tmp/dc-install CONFIG_YAML: /tmp/dc-install/etc/datacrumbs/configs/docker.yaml PROBE_FILE: /tmp/datacrumbs-ci-probes.json.gz @@ -54,11 +55,18 @@ jobs: path: datacrumbs submodules: recursive + - name: Resolve compatible datacrumbs-utils ref + run: | + set -euo pipefail + cmake -DOUTPUT="${RUNNER_TEMP}/datacrumbs-utils-compatibility.env" \ + -P "${GITHUB_WORKSPACE}/datacrumbs/cmake/write_datacrumbs_utils_compatibility_env.cmake" + cat "${RUNNER_TEMP}/datacrumbs-utils-compatibility.env" >> "${GITHUB_ENV}" + - name: Checkout datacrumbs-utils uses: actions/checkout@v4 with: - repository: llnl/datacrumbs-utils - ref: main + repository: ${{ env.DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY }} + ref: ${{ env.DATACRUMBS_UTILS_COMPATIBLE_REF }} fetch-depth: 1 path: datacrumbs-utils @@ -180,11 +188,6 @@ jobs: systemctl --version test -d /run/systemd/system - - name: Record datacrumbs-utils revision - run: | - set -euo pipefail - echo "DATACRUMBS_UTILS_REF=$(git -C "${GITHUB_WORKSPACE}/datacrumbs-utils" rev-parse HEAD)" >> "${GITHUB_ENV}" - - name: Configure datacrumbs run: | set -euo pipefail @@ -204,8 +207,6 @@ jobs: -DDATACRUMBS_CONFIGURED_LOG_DIR="${LOG_DIR}" \ -DDATACRUMBS_CONFIGURED_TRACE_DIR="${TRACE_DIR}" \ -DDATACRUMBS_KERNEL_HEADERS_PATH="/usr/src/linux-headers-$(uname -r)" \ - -DDATACRUMBS_UTILS_GIT_REPOSITORY="file://${GITHUB_WORKSPACE}/datacrumbs-utils" \ - -DDATACRUMBS_UTILS_GIT_REF="${DATACRUMBS_UTILS_REF}" \ "${extra_cmake_args[@]}" - name: Build datacrumbs @@ -218,6 +219,51 @@ jobs: set -euo pipefail sudo cmake --install "${BUILD_DIR}" + - name: Configure compatible datacrumbs-utils + run: | + set -euo pipefail + utils_extra_cmake_args=() + if [[ "${{ matrix.disable_signing }}" == "true" ]]; then + utils_extra_cmake_args+=("-DDATACRUMBS_DISABLE_PROBE_SIGNING=ON") + fi + + cmake -S "${GITHUB_WORKSPACE}/datacrumbs-utils" -B "${UTILS_BUILD_DIR}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ + -DCMAKE_PREFIX_PATH="${INSTALL_PREFIX};${CMAKE_PREFIX_PATH:-}" \ + "${utils_extra_cmake_args[@]}" + + - name: Build datacrumbs-utils + run: | + set -euo pipefail + cmake --build "${UTILS_BUILD_DIR}" -j"$(nproc)" + + - name: Install datacrumbs-utils + run: | + set -euo pipefail + sudo cmake --install "${UTILS_BUILD_DIR}" + + - name: Verify probe configurator linkage + run: | + set -euo pipefail + probe_exec="${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator_exec" + probe_wrapper="${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator" + + test -x "${probe_exec}" + test -x "${probe_wrapper}" + + echo "Wrapper LD_LIBRARY_PATH export:" + grep -n "LD_LIBRARY_PATH" "${probe_wrapper}" + + echo "Probe configurator dynamic section:" + readelf -d "${probe_exec}" | grep -E 'NEEDED|RPATH|RUNPATH' + + echo "Probe configurator shared library resolution:" + ldd "${probe_exec}" + + ! ldd "${probe_exec}" | grep -q "not found" + ldd "${probe_exec}" | grep -q "libclang" + - name: Run system configurator explicitly run: | set -euo pipefail @@ -246,9 +292,34 @@ jobs: test -f "${CONFIG_YAML}" rm -f "${PROBE_FILE}" + set +e probe_output="$("${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator" "${CONFIG_YAML}" "${PROBE_FILE}" 2>&1)" + probe_status=$? + set -e printf '%s\n' "${probe_output}" - test -s "${PROBE_FILE}" + printf 'datacrumbs_probe_configurator exit status: %s\n' "${probe_status}" + + if [[ "${probe_status}" != "0" ]]; then + if [[ "${probe_status}" == "1" ]] && grep -Eq "One or more probes failed validation|Extraction summary: .*invalid=yes" <<<"${probe_output}"; then + if [[ -s "${PROBE_FILE}" ]]; then + echo "Continuing with generated probes file despite invalid candidate probes on this runner." + ls -l "$(dirname "${PROBE_FILE}")" + find "$(dirname "${PROBE_FILE}")" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true + else + echo "Probe validation reported invalid candidates and no probes file was written." + ls -l "$(dirname "${PROBE_FILE}")" + find "$(dirname "${PROBE_FILE}")" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true + exit "${probe_status}" + fi + else + echo "Probe generation failed unexpectedly." + ls -l "$(dirname "${PROBE_FILE}")" + find "$(dirname "${PROBE_FILE}")" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true + exit "${probe_status}" + fi + else + test -s "${PROBE_FILE}" + fi if [[ "${{ matrix.disable_signing }}" == "true" ]]; then grep -q "Probe signing is disabled" <<<"${probe_output}" diff --git a/.github/workflows/format-check.yml b/.github/workflows/format-check.yml index 275d72b8..6a053354 100644 --- a/.github/workflows/format-check.yml +++ b/.github/workflows/format-check.yml @@ -15,11 +15,18 @@ jobs: with: path: datacrumbs + - name: Resolve compatible datacrumbs-utils ref + run: | + set -euo pipefail + cmake -DOUTPUT="${RUNNER_TEMP}/datacrumbs-utils-compatibility.env" \ + -P "${GITHUB_WORKSPACE}/datacrumbs/cmake/write_datacrumbs_utils_compatibility_env.cmake" + cat "${RUNNER_TEMP}/datacrumbs-utils-compatibility.env" >> "${GITHUB_ENV}" + - name: Checkout datacrumbs-utils uses: actions/checkout@v4 with: - repository: llnl/datacrumbs-utils - ref: main + repository: ${{ env.DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY }} + ref: ${{ env.DATACRUMBS_UTILS_COMPATIBLE_REF }} fetch-depth: 1 path: datacrumbs-utils diff --git a/CMakeLists.txt b/CMakeLists.txt index c1a5f247..d814bc6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.20) cmake_policy(SET CMP0075 NEW) project(datacrumbs LANGUAGES C CXX) +include(CMakePackageConfigHelpers) # ------------------------------------------------------------------------------ # Version information @@ -21,6 +22,7 @@ set(DATACRUMBS_RELEASE_VERSION_MINOR "0") set(DATACRUMBS_RELEASE_VERSION_PATCH "4") set(DATACRUMBS_VERSION "(${DATACRUMBS_RELEASE_VERSION_MAJOR}, ${DATACRUMBS_RELEASE_VERSION_MINOR}, ${DATACRUMBS_RELEASE_VERSION_PATCH})") set(DATACRUMBS_RELEASE_VERSION_STRING "${DATACRUMBS_RELEASE_VERSION_MAJOR}.${DATACRUMBS_RELEASE_VERSION_MINOR}.${DATACRUMBS_RELEASE_VERSION_PATCH}") +include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/datacrumbs_utils_compatibility.cmake) # Convenience defines string(TOUPPER "${PROJECT_NAME}" UPPER_PROJECT_NAME) @@ -40,6 +42,10 @@ option(DATACRUMBS_BUILD_ONLY "Build only the datacrumbs library without installa load_build_variables() message(STATUS "[${UPPER_PROJECT_NAME}] DATACRUMBS_LIBDIR set to ${DATACRUMBS_LIBDIR}") +message( + STATUS + "[${UPPER_PROJECT_NAME}] Compatible datacrumbs-utils ref: ${DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY}@${DATACRUMBS_UTILS_COMPATIBLE_REF}" +) # ------------------------------------------------------------------------------ # Internal Paths for cmake libraries and Setup install and output Directories @@ -53,37 +59,6 @@ include_directories(${CMAKE_BINARY_DIR}/include) include_directories(${CMAKE_BINARY_DIR}/libexec) find_package(Python3 COMPONENTS Interpreter REQUIRED) -include(ExternalProject) - -set(_DATACRUMBS_UTILS_GITHUB_REPOSITORY_DEFAULT - "https://github.com/LLNL/datacrumbs-utils.git" -) - -set( - DATACRUMBS_UTILS_GIT_REPOSITORY - "${_DATACRUMBS_UTILS_GITHUB_REPOSITORY_DEFAULT}" - CACHE STRING "GitHub repository URL for datacrumbs-utils" FORCE -) -set( - DATACRUMBS_UTILS_GIT_REF - "main" - CACHE STRING "Git branch, tag, or commit used for datacrumbs-utils bootstrap" -) -set( - DATACRUMBS_UTILS_SOURCE_DIR - "${CMAKE_BINARY_DIR}/_deps/datacrumbs-utils-src" - CACHE PATH "Path to the datacrumbs-utils source tree" FORCE -) -set( - DATACRUMBS_UTILS_BUILD_DIR - "${CMAKE_BINARY_DIR}/_deps/datacrumbs-utils-build" - CACHE PATH "Path to the datacrumbs-utils build tree" FORCE -) -set( - DATACRUMBS_UTILS_INSTALL_PREFIX - "${CMAKE_INSTALL_PREFIX}" - CACHE PATH "Path to the datacrumbs-utils install prefix" -) # ------------------------------------------------------------------------------ # Options for CMake @@ -110,11 +85,6 @@ set(DATACRUMBS_INSTALL_USER "$ENV{USER}" CACHE STRING "Installation user name fo set(DATACRUMBS_SCHEDULER_TYPE "FLUX" CACHE STRING "Scheduler type for datacrumbs") set_property(CACHE DATACRUMBS_SCHEDULER_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_RUN_EXTRA_ARGS "" CACHE STRING "Scheduler run extra args") - -# Configure Make steps -option(DATACRUMBS_SKIP_PROBE_EXPLORING "Skip building the probe explorer executable" OFF) -option(DATACRUMBS_SKIP_PROBE_GENERATION "Skip building the probe generator executable" OFF) # Tracing Options set(DATACRUMBS_TRACE_RINGBUF_SIZE_MB "16" CACHE STRING "Ring buffer size in MB for BPF tracing") @@ -148,7 +118,7 @@ set(DATACRUMBS_INSTALL_CONFIGS_DIR "${DATACRUMBS_INSTALL_ETC_CONFIGSDIR}") set(DATACRUMBS_INSTALL_SHARED_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/datacrumbs/data") set(DATACRUMBS_INSTALL_DATA_DIR "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}") set(DATACRUMBS_SYSTEM_PROBE_FILE - "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/system-probe-${DATACRUMBS_INSTALL_USER}-${DATACRUMBS_HOST}.json.gz" + "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/system-probe-${DATACRUMBS_INSTALL_USER}-${DATACRUMBS_HOST}.sqlite" ) set(DATACRUMBS_PROBE_SECRET_FILE "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/.datacrumbs-probe-secret" @@ -157,12 +127,11 @@ set(DATACRUMBS_SIGN_PROBES_SOCKET_PATH "${DATACRUMBS_INSTALL_SHARED_DATA_DIR}/datacrumbs-sign-probes.sock" ) set(DATACRUMBS_UTILS_SYSTEM_CONFIGURATION_FILE - "${CMAKE_BINARY_DIR}/configs/datacrumbs-system-configuration.json.gz" + "${CMAKE_BINARY_DIR}/configs/datacrumbs-system-configuration.sqlite" ) set(DATACRUMBS_TRACE_DIR_PATTERN "${DATACRUMBS_CONFIGURED_TRACE_DIR}/%YY%/%MM%/%DD%") -set(DATACRUMBS_CLIENT_LIB "${DATACRUMBS_UTILS_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libdatacrumbs_client.so") +set(DATACRUMBS_CLIENT_LIB "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libdatacrumbs_client.so") set(DATACRUMBS_JOB_SCHEDULER "${DATACRUMBS_SCHEDULER_TYPE}") -set(DATACRUMBS_JOB_OTHER_FLAGS "${DATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS}") set(DATACRUMBS_JOB_ID_VAR "${DATACRUMBS_SCHEDULER_JOBID_ENV_VAR}") if(DATACRUMBS_ENABLE_INCLUSION_PATH) set(DATACRUMBS_INCLUSION_PATHS "${DATACRUMBS_INCLUSION_PATH}") @@ -186,7 +155,6 @@ set(DATACRUMBS_SYSTEM_CONFIGURATION_DEFINE_KEYS DATACRUMBS_INSTALL_PROBE_OBJECTS_DIR DATACRUMBS_CLIENT_LIB DATACRUMBS_JOB_SCHEDULER - DATACRUMBS_JOB_OTHER_FLAGS DATACRUMBS_JOB_ID_VAR DATACRUMBS_SERVER_RUN_DIR DATACRUMBS_CONFIGURED_TRACE_DIR @@ -236,14 +204,11 @@ message(STATUS " - DATACRUMBS_MAX_RUNTIME_FUNCTIONS: ${DATACRUMBS_MA message(STATUS " - DATACRUMBS_TRACE_ALL_PROCESSES: ${DATACRUMBS_TRACE_ALL_PROCESSES}") message(STATUS " - DATACRUMBS_TIME_INTERVAL_NS: ${DATACRUMBS_TIME_INTERVAL_NS}") message(STATUS " - DATACRUMBS_BPF_PRINT_ENABLE_FLAG: ${DATACRUMBS_BPF_PRINT_ENABLE_FLAG}") -message(STATUS " - DATACRUMBS_SKIP_PROBE_EXPLORING: ${DATACRUMBS_SKIP_PROBE_EXPLORING}") -message(STATUS " - DATACRUMBS_SKIP_PROBE_GENERATION: ${DATACRUMBS_SKIP_PROBE_GENERATION}") message(STATUS " - DATACRUMBS_TRACE_RINGBUF_SIZE_MB: ${DATACRUMBS_TRACE_RINGBUF_SIZE_MB}") message(STATUS " - DATACRUMBS_SRC_GEN_PATH: ${DATACRUMBS_SRC_GEN_PATH}") message(STATUS " - DATACRUMBS_LIBC_SO: ${DATACRUMBS_LIBC_SO}") -message(STATUS " - DATACRUMBS_CONFIG_PATH: ${DATACRUMBS_CONFIG_PATH}") message(STATUS " - DATACRUMBS_LOG_DIR: ${DATACRUMBS_LOG_DIR}") message(STATUS " - DATACRUMBS_DATA_DIR: ${DATACRUMBS_DATA_DIR}") message(STATUS " - DATACRUMBS_ENABLE_INCLUSION_PATH: ${DATACRUMBS_ENABLE_INCLUSION_PATH}") @@ -285,65 +250,6 @@ file(MAKE_DIRECTORY ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}/objects/) # ------------------------------------------------------------------------------ include_dependencies() -ExternalProject_Add( - datacrumbs_utils_external - PREFIX "${CMAKE_BINARY_DIR}/_deps/datacrumbs-utils" - GIT_REPOSITORY "${DATACRUMBS_UTILS_GIT_REPOSITORY}" - GIT_TAG "${DATACRUMBS_UTILS_GIT_REF}" - GIT_SHALLOW FALSE - GIT_REMOTE_UPDATE_STRATEGY CHECKOUT - GIT_SUBMODULES "" - GIT_SUBMODULES_RECURSE FALSE - UPDATE_DISCONNECTED FALSE - SOURCE_DIR "${DATACRUMBS_UTILS_SOURCE_DIR}" - BINARY_DIR "${DATACRUMBS_UTILS_BUILD_DIR}" - INSTALL_DIR "${DATACRUMBS_UTILS_INSTALL_PREFIX}" - CMAKE_ARGS - "-DCMAKE_INSTALL_PREFIX=${DATACRUMBS_UTILS_INSTALL_PREFIX}" - "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/bin" - "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR}" - "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/${DATACRUMBS_LIBDIR}" - "-DCMAKE_INCLUDE_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/include" - "-DCMAKE_CONFIG_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/configs" - "-DCMAKE_DATA_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/data" - "-DCMAKE_LIBEXEC_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/libexec/${PROJECT_NAME}" - "-DCMAKE_ETC_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}" - "-DCMAKE_MODULES_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/modulefiles" - "-DCMAKE_FLUX_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/flux" - "-DCMAKE_SYSTEMD_OUTPUT_DIRECTORY=${CMAKE_BINARY_DIR}/etc/${PROJECT_NAME}/systemd" - "-DDATACRUMBS_PROJECT_PATH=${CMAKE_CURRENT_SOURCE_DIR}" - "-DDATACRUMBS_UTILS_PROJECT_PATH=" - "-DDATACRUMBS_BUILD_SYSTEM_CONFIGURATION_FILE=${DATACRUMBS_UTILS_SYSTEM_CONFIGURATION_FILE}" - "-DDATACRUMBS_INSTALL_DIR=${CMAKE_INSTALL_PREFIX}" - "-DDATACRUMBS_HOST=${DATACRUMBS_HOST}" - "-DDATACRUMBS_USER=${DATACRUMBS_USER}" - "-DDATACRUMBS_INSTALL_USER=${DATACRUMBS_INSTALL_USER}" - "-DDATACRUMBS_INCLUSION_PATH=${DATACRUMBS_INCLUSION_PATH}" - "-DDATACRUMBS_CONFIGURED_TRACE_DIR=${DATACRUMBS_CONFIGURED_TRACE_DIR}" - "-DDATACRUMBS_CONFIGURED_LOG_DIR=${DATACRUMBS_CONFIGURED_LOG_DIR}" - "-DDATACRUMBS_CONFIGURED_RUN_DIR=${DATACRUMBS_CONFIGURED_RUN_DIR}" - "-DDATACRUMBS_SCHEDULER_TYPE=${DATACRUMBS_SCHEDULER_TYPE}" - "-DDATACRUMBS_SCHEDULER_JOBID_ENV_VAR=${DATACRUMBS_SCHEDULER_JOBID_ENV_VAR}" - "-DDATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS=${DATACRUMBS_SCHEDULER_RUN_EXTRA_ARGS}" - "-DDATACRUMBS_LOG_LEVEL_STR=${DATACRUMBS_LOG_LEVEL_STR}" - "-DDATACRUMBS_MODE_STR=${DATACRUMBS_MODE_STR}" - "-DDATACRUMBS_ENABLE_OPT=${DATACRUMBS_ENABLE_OPT}" - "-DDATACRUMBS_TRACE_ALL_PROCESSES_OPT=${DATACRUMBS_TRACE_ALL_PROCESSES_OPT}" - "-DDATACRUMBS_BPF_PRINT_ENABLE=${DATACRUMBS_BPF_PRINT_ENABLE}" - "-DDATACRUMBS_DISABLE_PROBE_SIGNING=${DATACRUMBS_DISABLE_PROBE_SIGNING}" - "-DDATACRUMBS_KERNEL_HEADERS_PATH=${DATACRUMBS_KERNEL_HEADERS_PATH}" - "-DDATACRUMBS_KERNEL_VERSION=${DATACRUMBS_KERNEL_VERSION}" - BUILD_COMMAND - "${CMAKE_COMMAND}" --build "" --clean-first - INSTALL_COMMAND - "${CMAKE_COMMAND}" --build "" --target install - USES_TERMINAL_DOWNLOAD TRUE - USES_TERMINAL_UPDATE TRUE - USES_TERMINAL_BUILD TRUE -) - -add_custom_target(datacrumbs_utils_install DEPENDS datacrumbs_utils_external) - # print_all_variables() # ------------------------------------------------------------------------------ @@ -354,6 +260,62 @@ set(DATACRUMBS_COMMON_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/data_structures.h ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/enumerations.h ) +set(DATACRUMBS_PUBLIC_COMMON_HEADERS + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/constants.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/data_structures.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/enumerations.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/logging.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/probe_file.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/singleton.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/typedefs.h + ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/common/utils.h +) +add_library(datacrumbs_common INTERFACE) +target_include_directories( + datacrumbs_common + INTERFACE + $ + $ + $ +) +install( + TARGETS datacrumbs_common + EXPORT datacrumbsTargets +) +install(FILES "${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/datacrumbs/datacrumbs_config.h" + DESTINATION "${DATACRUMBS_INSTALL_INCLUDE_DIR}/datacrumbs") +install(FILES ${DATACRUMBS_PUBLIC_COMMON_HEADERS} + DESTINATION "${DATACRUMBS_INSTALL_INCLUDE_DIR}/datacrumbs/common") + +configure_package_config_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake/datacrumbsConfig.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/datacrumbsConfig.cmake" + INSTALL_DESTINATION "${DATACRUMBS_INSTALL_LIB_DIR}/cmake/datacrumbs" + PATH_VARS + DATACRUMBS_INSTALL_INCLUDE_DIR + DATACRUMBS_INSTALL_LIB_DIR + DATACRUMBS_INSTALL_BINARYDIR + DATACRUMBS_INSTALL_SBINARYDIR + DATACRUMBS_INSTALL_SYSCONFDIR + DATACRUMBS_INSTALL_SHARED_DATA_DIR +) +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/datacrumbsConfigVersion.cmake" + VERSION "${DATACRUMBS_PACKAGE_VERSION}" + COMPATIBILITY SameMajorVersion +) +install( + EXPORT datacrumbsTargets + FILE datacrumbsTargets.cmake + NAMESPACE datacrumbs:: + DESTINATION "${DATACRUMBS_INSTALL_LIB_DIR}/cmake/datacrumbs" +) +install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/datacrumbsConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/datacrumbsConfigVersion.cmake" + DESTINATION "${DATACRUMBS_INSTALL_LIB_DIR}/cmake/datacrumbs" +) set(DATACRUMBS_SYSTEM_CONFIGURATOR_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/datacrumbs/system_configurator/system_configurator_main.cpp @@ -382,13 +344,12 @@ add_custom_target( DEPENDS datacrumbs_system_configurator COMMENT "Generating build-tree system configuration for datacrumbs-utils" ) -add_dependencies(datacrumbs_utils_external generate_utils_system_configuration) add_executable(datacrumbs_sign_probes ${DATACRUMBS_SIGN_PROBES_SERVICE_SRC} ${DATACRUMBS_COMMON_SRC}) target_link_libraries(datacrumbs_sign_probes ${DEPENDENCY_LIB}) -add_dependencies(datacrumbs_sign_probes datacrumbs_utils_install run_system_configurator) +add_dependencies(datacrumbs_sign_probes run_system_configurator) install(TARGETS datacrumbs_sign_probes - RUNTIME DESTINATION "${DATACRUMBS_INSTALL_BINARYDIR}" + RUNTIME DESTINATION "${DATACRUMBS_INSTALL_SBINARYDIR}" ) add_custom_target( @@ -544,12 +505,12 @@ target_link_libraries(datacrumbs_obj ${DEPENDENCY_LIB}) install(TARGETS datacrumbs_obj LIBRARY DESTINATION ${DATACRUMBS_INSTALL_LIB_DIR} ) -add_dependencies(datacrumbs_obj datacrumbs_utils_install datacrumbs_bpf_skel run_system_configurator) +add_dependencies(datacrumbs_obj datacrumbs_bpf_skel run_system_configurator) # Build the final executable by linking server.cpp and the object library add_executable(${PROJECT_NAME} ${DATACRUMBS_SERVER_SRC}) target_link_libraries(${PROJECT_NAME} datacrumbs_obj ${DEPENDENCY_LIB}) -add_dependencies(${PROJECT_NAME} datacrumbs_utils_install datacrumbs_bpf_skel datacrumbs_obj run_system_configurator) +add_dependencies(${PROJECT_NAME} datacrumbs_bpf_skel datacrumbs_obj run_system_configurator) # Install the main processing executable into DATACRUMBS_INSTALL_BINARYDIR install(TARGETS ${PROJECT_NAME} diff --git a/cmake/configure_files/datacrumbs_config.h.in b/cmake/configure_files/datacrumbs_config.h.in index 4fc2a72f..32b19a3e 100644 --- a/cmake/configure_files/datacrumbs_config.h.in +++ b/cmake/configure_files/datacrumbs_config.h.in @@ -43,7 +43,6 @@ #cmakedefine DATACRUMBS_SRC_GEN_PATH "@DATACRUMBS_SRC_GEN_PATH@" #cmakedefine DATACRUMBS_LIBC_SO "@DATACRUMBS_LIBC_SO@" -#cmakedefine DATACRUMBS_CONFIG_PATH "@DATACRUMBS_CONFIG_PATH@" #cmakedefine DATACRUMBS_LOG_DIR "@DATACRUMBS_LOG_DIR@" #cmakedefine DATACRUMBS_DATA_DIR "@DATACRUMBS_DATA_DIR@" #define DATACRUMBS_INSTALL_PREFIX_PATH "@DATACRUMBS_INSTALL_PREFIX_PATH@" diff --git a/cmake/datacrumbsConfig.cmake.in b/cmake/datacrumbsConfig.cmake.in new file mode 100644 index 00000000..ae6fe2cd --- /dev/null +++ b/cmake/datacrumbsConfig.cmake.in @@ -0,0 +1,11 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/datacrumbsTargets.cmake") + +set(datacrumbs_INSTALL_PREFIX "${PACKAGE_PREFIX_DIR}") +set(datacrumbs_INSTALL_INCLUDE_DIR "@PACKAGE_DATACRUMBS_INSTALL_INCLUDE_DIR@") +set(datacrumbs_INSTALL_LIB_DIR "@PACKAGE_DATACRUMBS_INSTALL_LIB_DIR@") +set(datacrumbs_INSTALL_BINARYDIR "@PACKAGE_DATACRUMBS_INSTALL_BINARYDIR@") +set(datacrumbs_INSTALL_SBINARYDIR "@PACKAGE_DATACRUMBS_INSTALL_SBINARYDIR@") +set(datacrumbs_INSTALL_SYSCONFDIR "@PACKAGE_DATACRUMBS_INSTALL_SYSCONFDIR@") +set(datacrumbs_INSTALL_SHARED_DATA_DIR "@PACKAGE_DATACRUMBS_INSTALL_SHARED_DATA_DIR@") diff --git a/cmake/datacrumbs_utils_compatibility.cmake b/cmake/datacrumbs_utils_compatibility.cmake new file mode 100644 index 00000000..80fb0632 --- /dev/null +++ b/cmake/datacrumbs_utils_compatibility.cmake @@ -0,0 +1,3 @@ +# Update this file when datacrumbs requires a different datacrumbs-utils branch or tag. +set(DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY "llnl/datacrumbs-utils") +set(DATACRUMBS_UTILS_COMPATIBLE_REF "main") diff --git a/cmake/modules/datacrumbs-utils.cmake b/cmake/modules/datacrumbs-utils.cmake index 98e2d7ca..21bb7842 100644 --- a/cmake/modules/datacrumbs-utils.cmake +++ b/cmake/modules/datacrumbs-utils.cmake @@ -38,6 +38,7 @@ macro(include_dependencies) find_package(LLVM REQUIRED CONFIG COMPONENTS Clang) find_package(json-c REQUIRED) find_package(OpenSSL REQUIRED) + find_package(SQLite3 REQUIRED) find_package(ZLIB REQUIRED) # all validator @@ -101,6 +102,7 @@ macro(include_dependencies) if(LLVM_FOUND) include_directories(${LLVM_INCLUDE_DIRS}) link_directories(${LLVM_LIBRARY_DIRS}) + list(APPEND DEPENDENCY_LIBRARY_DIRS ${LLVM_LIBRARY_DIRS}) set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${LLVM_LIBRARIES} -lclang) set(CLANG_EXECUTABLE ${LLVM_TOOLS_BINARY_DIR}/clang) @@ -143,6 +145,13 @@ macro(include_dependencies) message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] OpenSSL is needed for ${PROJECT_NAME} build") endif() + if(SQLite3_FOUND) + include_directories(${SQLite3_INCLUDE_DIRS}) + set(DEPENDENCY_LIB ${DEPENDENCY_LIB} SQLite::SQLite3) + else() + message(FATAL_ERROR "-- [${UPPER_PROJECT_NAME}] SQLite3 is needed for ${PROJECT_NAME} build") + endif() + if(ZLIB_FOUND) include_directories(${ZLIB_INCLUDE_DIRS}) get_filename_component(ZLIB_LIBRARY_DIRS "${ZLIB_LIBRARIES}/../" ABSOLUTE) @@ -168,6 +177,9 @@ macro(include_dependencies) STATUS " - Found json-c:${json-c_CONSIDERED_VERSIONS} at include:${json-c_INCLUDE_DIR} lib:${json-c_LIBRARY_DIR}" ) + message( + STATUS " - Found sqlite3:${SQLite3_VERSION} at include:${SQLite3_INCLUDE_DIRS}" + ) message( STATUS " - Found zlib:${ZLIB_VERSION} at include:${ZLIB_INCLUDE_DIRS} lib:${ZLIB_LIBRARY_DIRS}" @@ -180,6 +192,7 @@ macro(include_dependencies) DEPENDENCY_LIBRARY_DIRS_COLON "${DEPENDENCY_LIBRARY_DIRS}" ) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_INSTALL_RPATH "${DEPENDENCY_LIBRARY_DIRS}") set(CMAKE_BUILD_RPATH "${DEPENDENCY_LIBRARY_DIRS}") @@ -223,18 +236,6 @@ macro(derive_configurations) 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() @@ -249,8 +250,15 @@ macro(derive_configurations) set(DATACRUMBS_SRC_GEN_PATH ${CMAKE_LIBEXEC_OUTPUT_DIRECTORY}) if(DATACRUMBS_CONFIGURED_LOG_DIR - AND NOT DATACRUMBS_CONFIGURED_LOG_DIR STREQUAL "" - AND NOT DATACRUMBS_CONFIGURED_LOG_DIR STREQUAL "NONE") + AND NOT + DATACRUMBS_CONFIGURED_LOG_DIR + STREQUAL + "" + AND NOT + DATACRUMBS_CONFIGURED_LOG_DIR + STREQUAL + "NONE" + ) set(DATACRUMBS_LOG_DIR ${DATACRUMBS_CONFIGURED_LOG_DIR}) else() set(DATACRUMBS_LOG_DIR ${CMAKE_BINARY_DIR}/logs) @@ -259,8 +267,6 @@ macro(derive_configurations) set(DATACRUMBS_VARS --user ${DATACRUMBS_USER} - --config_path - ${CMAKE_CONFIG_OUTPUT_DIRECTORY} --data_dir ${CMAKE_DATA_OUTPUT_DIRECTORY} --trace_log_dir @@ -275,7 +281,6 @@ macro(derive_configurations) set(DATACRUMBS_VARS ${DATACRUMBS_VARS} --inclusion_path ${DATACRUMBS_INCLUSION_PATH}) endif() - set(DATACRUMBS_CONFIG_PATH ${CMAKE_CONFIG_OUTPUT_DIRECTORY}) set(DATACRUMBS_DATA_DIR ${CMAKE_DATA_OUTPUT_DIRECTORY}) file(MAKE_DIRECTORY ${DATACRUMBS_LOG_DIR}) diff --git a/cmake/write_datacrumbs_utils_compatibility_env.cmake b/cmake/write_datacrumbs_utils_compatibility_env.cmake new file mode 100644 index 00000000..608d49fa --- /dev/null +++ b/cmake/write_datacrumbs_utils_compatibility_env.cmake @@ -0,0 +1,20 @@ +include("${CMAKE_CURRENT_LIST_DIR}/datacrumbs_utils_compatibility.cmake") + +if(NOT DEFINED OUTPUT OR OUTPUT STREQUAL "") + message(FATAL_ERROR "OUTPUT must point to the env file to write") +endif() + +if(NOT DEFINED DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY OR DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY + STREQUAL "" +) + message(FATAL_ERROR "DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY is not defined") +endif() + +if(NOT DEFINED DATACRUMBS_UTILS_COMPATIBLE_REF OR DATACRUMBS_UTILS_COMPATIBLE_REF STREQUAL "") + message(FATAL_ERROR "DATACRUMBS_UTILS_COMPATIBLE_REF is not defined") +endif() + +file( + WRITE "${OUTPUT}" + "DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY=${DATACRUMBS_UTILS_COMPATIBLE_REPOSITORY}\nDATACRUMBS_UTILS_COMPATIBLE_REF=${DATACRUMBS_UTILS_COMPATIBLE_REF}\n" +) diff --git a/docs/composability.rst b/docs/composability.rst index 93916bfc..9491a8d9 100644 --- a/docs/composability.rst +++ b/docs/composability.rst @@ -195,17 +195,18 @@ If the selection is too large: - the probe configurator fails when over the limit - runtime also rejects oversized probe files before attach -Invalid probe carry-forward -=========================== +Runtime probe state carry-forward +================================= -Runtime-discovered attach failures are stored in: +Runtime-discovered attach results are stored in: .. code-block:: text - /share/datacrumbs/data/probes-invalid--.json.gz + /share/datacrumbs/data/probes-runtime-status--.sqlite -That invalid-probe database is reused so later runs do not keep retrying known -bad targets. +That runtime-probe status database is reused so later runs do not keep retrying +known bad targets, while still preserving a queryable record of which targets +attached successfully. Migration note ============== diff --git a/docs/deployment.rst b/docs/deployment.rst index c1b9a764..8458739e 100644 --- a/docs/deployment.rst +++ b/docs/deployment.rst @@ -13,8 +13,7 @@ The supported production path is scheduler-managed systemd service startup. At a high level: 1. install `datacrumbs` -2. let `datacrumbs` bootstrap and install `datacrumbs-utils` into the same - prefix +2. install `datacrumbs-utils` separately into the same prefix 3. register `datacrumbs@.service` on compute nodes 4. register `datacrumbs_sign_probes.service` on login nodes 5. install Flux or SLURM prolog and epilog hooks @@ -31,7 +30,7 @@ Key files provided by the install: - `/etc/datacrumbs/systemd/datacrumbs_sign_probes.service` - `/sbin/datacrumbs_service_run.sh` - `/sbin/datacrumbs_service_stop.sh` -- `/share/datacrumbs/data/system-probe--.json.gz` +- `/share/datacrumbs/data/system-probe--.sqlite` - `/share/datacrumbs/data/.datacrumbs-probe-secret` Key utility assets installed into the same prefix: diff --git a/docs/setup.rst b/docs/setup.rst index 2a7b4b93..bc701a83 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -8,7 +8,8 @@ Environment and Module Setup ============================ The user-facing setup helpers now live in `datacrumbs-utils`, but they are -installed into the shared DataCrumbs prefix. +installed into the shared DataCrumbs prefix by a separate `datacrumbs-utils` +installation. Typical setup: @@ -34,7 +35,7 @@ At runtime, `datacrumbs` needs: Those installed files are: -- `/share/datacrumbs/data/system-probe--.json.gz` +- `/share/datacrumbs/data/system-probe--.sqlite` - `/share/datacrumbs/data/.datacrumbs-probe-secret` On login nodes, probe generation also depends on: @@ -93,17 +94,19 @@ redirected to: ${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVICE_RUN_ID}_$(hostname).log -Runtime-Detected Invalid Probes -=============================== +Runtime Probe Status Database +============================= -Failed runtime attach targets are recorded to a compressed invalid-probe -database: +Runtime attach results are recorded to a SQLite status database: .. code-block:: text - /share/datacrumbs/data/probes-invalid--.json.gz + /share/datacrumbs/data/probes-runtime-status--.sqlite -This file is written with mode `0400` and owned by `root`. +The database stores both failed and successful runtime attach targets. Failed +targets are skipped on later runs, and a later successful attach removes any +stale failed mark for the same target. This file is written with mode `0600` +and owned by the datacrumbs install user. Probe signing service ===================== diff --git a/etc/datacrumbs/systemd/datacrumbs@.service.in b/etc/datacrumbs/systemd/datacrumbs@.service.in index 87b9d707..8124e5c8 100644 --- a/etc/datacrumbs/systemd/datacrumbs@.service.in +++ b/etc/datacrumbs/systemd/datacrumbs@.service.in @@ -5,7 +5,7 @@ After=network.target [Service] Type=simple User=root -EnvironmentFile=-@DATACRUMBS_INSTALL_CONFIGS_DIR@/datacrumbs-%i.env +EnvironmentFile=-@DATACRUMBS_SERVER_RUN_DIR@/datacrumbs-%i.env ExecStartPre=/usr/bin/rm -f @DATACRUMBS_SERVER_RUN_DIR@/datacrumbs-%i.ready ExecStartPre=/bin/sh -c 'mkdir -p "${DATACRUMBS_LOG_DIR}"' ExecStartPre=/bin/sh -c 'log_file="${DATACRUMBS_LOG_DIR}/datacrumbs_${DATACRUMBS_USER}_${DATACRUMBS_SERVICE_RUN_ID}_$$(hostname).log"; touch "$${log_file}" && chown "${DATACRUMBS_USER}":"${DATACRUMBS_USER}" "$${log_file}" && chmod 0660 "$${log_file}"' diff --git a/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in b/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in index 21840ef8..6d5d9838 100644 --- a/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in +++ b/etc/datacrumbs/systemd/datacrumbs_sign_probes.service.in @@ -5,7 +5,7 @@ After=network.target [Service] Type=simple User=root -ExecStart=@DATACRUMBS_INSTALL_BINARYDIR@/datacrumbs_sign_probes +ExecStart=@DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_sign_probes Restart=on-failure RestartSec=2s diff --git a/notes.MD b/notes.MD index 9909f654..1bc49a72 100644 --- a/notes.MD +++ b/notes.MD @@ -5,7 +5,7 @@ ```bash cp $(pwd)/bin/datacrumbs /tmp/ # cannot run cap on nfs. We need file on a file system which supports file attributes. sudo setcap 'cap_bpf,cap_perfmon+ep' /tmp/datacrumbs -/tmp/datacrumbs "lead" "--user" "haridev" "--config_path" "/home/haridev/datacrumbs/etc/datacrumbs/configs" "--data_dir" "/home/haridev/datacrumbs/etc/datacrumbs/data" "--trace_log_dir" "/home/haridev/datacrumbs/etc/datacrumbs/logs" "--inclusion_path" "/tmp" +/tmp/datacrumbs "/home/haridev/datacrumbs/etc/datacrumbs/configs/lead.yaml" "--user" "haridev" "--data_dir" "/home/haridev/datacrumbs/etc/datacrumbs/data" "--trace_log_dir" "/home/haridev/datacrumbs/etc/datacrumbs/logs" "--inclusion_path" "/tmp" ``` @@ -126,4 +126,4 @@ 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_service_common.sh.in b/scripts/datacrumbs/datacrumbs_service_common.sh.in index 86c3cc5a..be505dd1 100644 --- a/scripts/datacrumbs/datacrumbs_service_common.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_common.sh.in @@ -5,7 +5,7 @@ set -eo pipefail readonly DATACRUMBS_SERVICE_SCHEDULER_TYPE="@DATACRUMBS_SCHEDULER_TYPE@" readonly DATACRUMBS_SERVICE_INSTALL_USER="@DATACRUMBS_INSTALL_USER@" readonly DATACRUMBS_SERVICE_JOB_ID_VAR="@DATACRUMBS_SCHEDULER_JOBID_ENV_VAR@" -readonly DATACRUMBS_SERVICE_CONFIGS_DIR="@DATACRUMBS_INSTALL_CONFIGS_DIR@" +readonly DATACRUMBS_SERVICE_RUN_DIR="@DATACRUMBS_SERVER_RUN_DIR@" readonly DATACRUMBS_SERVICE_LOG_DIR="@DATACRUMBS_CONFIGURED_LOG_DIR@" readonly DATACRUMBS_SERVICE_RUN_ID_FILE="@DATACRUMBS_INSTALL_RUNSTATEDIR@/@PROJECT_NAME@/datacrumbs.runid" @@ -23,8 +23,8 @@ log_system() { log_user() { local message="$*" if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" && -n "${FLUX_JOB_ID:-}" ]]; then - flux job raise --severity=7 "${FLUX_JOB_ID}" \ - "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] ${message}" + flux job raise --severity=7 "${FLUX_JOB_ID}" -- \ + "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] ${message}" >/dev/null elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" && -n "${SLURM_JOB_ID:-}" ]]; then logger "[INFO $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] ${message}" else @@ -35,8 +35,8 @@ log_user() { error_user() { local message="$*" if [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "FLUX" && -n "${FLUX_JOB_ID:-}" ]]; then - flux job raise --severity=1 "${FLUX_JOB_ID}" \ - "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] ${message}" + flux job raise --severity=1 "${FLUX_JOB_ID}" -- \ + "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${FLUX_JOB_ID}] ${message}" >/dev/null elif [[ "${DATACRUMBS_SERVICE_SCHEDULER_TYPE}" == "SLURM" && -n "${SLURM_JOB_ID:-}" ]]; then logger "[ERROR $(date '+%Y-%m-%d %H:%M:%S') ${SLURM_JOB_ID}] ${message}" else @@ -265,12 +265,33 @@ escape_env_value() { write_service_env_file() { local env_file="$1" local probe_file="$2" - mkdir -p "$(dirname "${env_file}")" - printf 'DATACRUMBS_PROBE_FILE=%s\n' "$(escape_env_value "${probe_file}")" >"${env_file}" - printf 'DATACRUMBS_USER=%s\n' "$(escape_env_value "${DATACRUMBS_USER}")" >>"${env_file}" - printf 'DATACRUMBS_SERVICE_RUN_ID=%s\n' "$(escape_env_value "${DATACRUMBS_SERVICE_RUN_ID}")" >>"${env_file}" - printf 'DATACRUMBS_LOG_DIR=%s\n' "$(escape_env_value "${DATACRUMBS_SERVICE_LOG_DIR}")" >>"${env_file}" - chmod 0400 "${env_file}" 2>/dev/null || true + local env_dir + local tmp_env_file + env_dir="$(dirname "${env_file}")" + tmp_env_file="$(mktemp)" + trap 'rm -f "${tmp_env_file}"' RETURN + + printf 'DATACRUMBS_PROBE_FILE=%s\n' "$(escape_env_value "${probe_file}")" >"${tmp_env_file}" + printf 'DATACRUMBS_USER=%s\n' "$(escape_env_value "${DATACRUMBS_USER}")" >>"${tmp_env_file}" + printf 'DATACRUMBS_SERVICE_RUN_ID=%s\n' "$(escape_env_value "${DATACRUMBS_SERVICE_RUN_ID}")" >>"${tmp_env_file}" + printf 'DATACRUMBS_LOG_DIR=%s\n' "$(escape_env_value "${DATACRUMBS_SERVICE_LOG_DIR}")" >>"${tmp_env_file}" + + if [[ "$(id -u)" == "0" ]]; then + mkdir -p "${env_dir}" + install -m 0400 "${tmp_env_file}" "${env_file}" + else + sudo mkdir -p "${env_dir}" + sudo install -m 0400 "${tmp_env_file}" "${env_file}" + fi +} + +remove_service_env_file() { + local env_file="$1" + if [[ "$(id -u)" == "0" ]]; then + rm -f "${env_file}" + else + sudo rm -f "${env_file}" + fi } systemctl_cmd() { @@ -322,7 +343,7 @@ if [[ -n "${DATACRUMBS_PROBE_FILE}" ]] && ! probe_file_readable_by_user "${DATAC fi DATACRUMBS_SERVICE_RUN_ID=$(get_run_id) -DATACRUMBS_SERVICE_ENV_FILE="${DATACRUMBS_SERVICE_CONFIGS_DIR}/datacrumbs-${DATACRUMBS_SERVICE_RUN_ID}.env" +DATACRUMBS_SERVICE_ENV_FILE="${DATACRUMBS_SERVICE_RUN_DIR}/datacrumbs-${DATACRUMBS_SERVICE_RUN_ID}.env" readonly DATACRUMBS_ENABLED readonly DATACRUMBS_PROBE_FILE diff --git a/scripts/datacrumbs/datacrumbs_service_run.sh.in b/scripts/datacrumbs/datacrumbs_service_run.sh.in index c2f14999..06613bf4 100755 --- a/scripts/datacrumbs/datacrumbs_service_run.sh.in +++ b/scripts/datacrumbs/datacrumbs_service_run.sh.in @@ -6,6 +6,6 @@ if source @DATACRUMBS_INSTALL_SBINARYDIR@/datacrumbs_service_common.sh; then umask 022 write_service_env_file "${DATACRUMBS_SERVICE_ENV_FILE}" "${DATACRUMBS_PROBE_FILE}" log_system "Starting datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service with ${DATACRUMBS_PROBE_FILE}" - systemctl_cmd start "datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service" + systemctl_cmd enable --now "datacrumbs@${DATACRUMBS_SERVICE_RUN_ID}.service" fi exit 0 diff --git a/src/datacrumbs/common/data_structures.h b/src/datacrumbs/common/data_structures.h index 79fd57d3..f844418d 100644 --- a/src/datacrumbs/common/data_structures.h +++ b/src/datacrumbs/common/data_structures.h @@ -7,9 +7,15 @@ #include #include #include -#include // dependency headers #include + +#ifndef DATACRUMBS_MAX_CAPTURE_ARGS +#define DATACRUMBS_MAX_CAPTURE_ARGS 5 +#endif +#ifndef DATACRUMBS_MAX_CAPTURE_BYTES +#define DATACRUMBS_MAX_CAPTURE_BYTES 64 +#endif // std headers #include #include diff --git a/src/datacrumbs/common/runtime_configuration_manager.cpp b/src/datacrumbs/common/runtime_configuration_manager.cpp index 414b9d17..20f251e8 100644 --- a/src/datacrumbs/common/runtime_configuration_manager.cpp +++ b/src/datacrumbs/common/runtime_configuration_manager.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -16,12 +17,19 @@ #include #include #include +#include namespace datacrumbs { namespace { constexpr uint64_t kRuntimeProbeEventIdBase = 1000; +constexpr int kSqliteBusyTimeoutMs = 5000; + +struct InvalidProbeBucket { + std::string group; + std::string scope_key; +}; std::string json_string_or_empty(json_object* root, const char* key) { json_object* value = nullptr; @@ -32,6 +40,30 @@ std::string json_string_or_empty(json_object* root, const char* key) { return json_object_get_string(value); } +std::unordered_map load_sqlite_kv_table( + sqlite3* db, const char* table_name, const std::filesystem::path& database_path) { + std::unordered_map values; + const std::string sql = std::string("SELECT key, value FROM ") + table_name + ";"; + sqlite3_stmt* statement = nullptr; + if (sqlite3_prepare_v2(db, sql.c_str(), -1, &statement, nullptr) != SQLITE_OK) { + DC_LOG_WARN("[RuntimeConfigurationManager] Failed to query %s from %s: %s", table_name, + database_path.string().c_str(), sqlite3_errmsg(db)); + return values; + } + + while (sqlite3_step(statement) == SQLITE_ROW) { + const unsigned char* key = sqlite3_column_text(statement, 0); + const unsigned char* value = sqlite3_column_text(statement, 1); + if (!key || !value) { + continue; + } + values[reinterpret_cast(key)] = reinterpret_cast(value); + } + + sqlite3_finalize(statement); + return values; +} + std::shared_ptr probe_from_json(json_object* probe_obj) { if (!probe_obj) return nullptr; Probe base = Probe::fromJson(probe_obj); @@ -67,6 +99,83 @@ bool is_supported_runtime_probe_type(ProbeType type) { } } +InvalidProbeBucket invalid_probe_bucket(const std::shared_ptr& probe) { + if (!probe) { + return {"unknown", ""}; + } + + switch (probe->type) { + case ProbeType::SYSCALLS: + return {"syscalls", ""}; + case ProbeType::KPROBE: + return {"kprobes", ""}; + case ProbeType::UPROBE: { + const auto uprobe = std::dynamic_pointer_cast(probe); + return {"binary", uprobe ? uprobe->binary_path : ""}; + } + case ProbeType::USDT: { + const auto usdt = std::dynamic_pointer_cast(probe); + if (!usdt) { + return {"usdt", ""}; + } + return {"usdt", usdt->binary_path + "\n" + usdt->provider}; + } + default: + return {"unknown", ""}; + } +} + +bool sqlite_exec(sqlite3* db, const char* sql, const std::filesystem::path& path, + const char* operation) { + char* error_message = nullptr; + const int rc = sqlite3_exec(db, sql, nullptr, nullptr, &error_message); + if (rc == SQLITE_OK) { + return true; + } + + const char* sqlite_message = error_message ? error_message : sqlite3_errmsg(db); + DC_LOG_WARN("[RuntimeConfigurationManager] Failed to %s %s: %s", operation, path.string().c_str(), + sqlite_message ? sqlite_message : "unknown sqlite error"); + if (error_message) { + sqlite3_free(error_message); + } + return false; +} + +sqlite3* open_runtime_probe_state_database(const std::filesystem::path& database_path, int flags) { + sqlite3* db = nullptr; + if (sqlite3_open_v2(database_path.c_str(), &db, flags, nullptr) != SQLITE_OK) { + DC_LOG_WARN("[RuntimeConfigurationManager] Failed to open runtime probe state database %s: %s", + database_path.string().c_str(), db ? sqlite3_errmsg(db) : "sqlite open failed"); + if (db) { + sqlite3_close(db); + } + return nullptr; + } + + sqlite3_busy_timeout(db, kSqliteBusyTimeoutMs); + return db; +} + +bool initialize_runtime_probe_state_database(sqlite3* db, + const std::filesystem::path& database_path) { + if (!sqlite_exec(db, "PRAGMA journal_mode=WAL;", database_path, "enable WAL mode")) { + return false; + } + if (!sqlite_exec(db, "PRAGMA synchronous=NORMAL;", database_path, "set synchronous mode")) { + return false; + } + return sqlite_exec(db, + "CREATE TABLE IF NOT EXISTS runtime_probe_status (" + "probe_group TEXT NOT NULL," + "scope_key TEXT NOT NULL," + "function_name TEXT NOT NULL," + "status TEXT NOT NULL CHECK (status IN ('invalid', 'successful'))," + "PRIMARY KEY (probe_group, scope_key, function_name, status)" + ");", + database_path, "create runtime probe state table"); +} + void ensure_directory_owned_by_install_user(const std::filesystem::path& directory) { if (directory.empty()) { return; @@ -175,14 +284,12 @@ RuntimeConfigurationManager::RuntimeConfigurationManager() { RuntimeConfigurationManager::RuntimeConfigurationManager( const std::filesystem::path& runtime_probe_file, const std::string& explicit_run_id, const std::string& explicit_user, bool print) - : config_path(DATACRUMBS_CONFIG_PATH), - data_dir(DATACRUMBS_INSTALL_SHARED_DATA_DIR), + : data_dir(DATACRUMBS_INSTALL_SHARED_DATA_DIR), trace_log_dir(), probe_file_path(runtime_probe_file), system_probe_path(DATACRUMBS_SYSTEM_PROBE_FILE), server_run_dir(DATACRUMBS_SERVER_RUN_DIR), server_run_id_file(DATACRUMBS_SERVER_RUN_ID_FILE), - config_name(runtime_probe_file.stem().string()), user(explicit_user), log_dir(DATACRUMBS_LOG_DIR), run_id(explicit_run_id), @@ -205,8 +312,6 @@ RuntimeConfigurationManager::RuntimeConfigurationManager( void RuntimeConfigurationManager::print_configurations() const { DC_LOG_INFO("[RuntimeConfigurationManager] Final configuration:"); - DC_LOG_INFO(" Config path: %s", config_path.string().c_str()); - DC_LOG_INFO(" Config name: %s", config_name.c_str()); DC_LOG_INFO(" Trace log dir: %s", trace_log_dir.string().c_str()); DC_LOG_INFO(" Trace file path: %s", trace_file_path.string().c_str()); DC_LOG_INFO(" Trace dir pattern: %s", @@ -214,7 +319,7 @@ void RuntimeConfigurationManager::print_configurations() const { DC_LOG_INFO(" Data dir: %s", data_dir.string().c_str()); DC_LOG_INFO(" Probe file path: %s", probe_file_path.string().c_str()); DC_LOG_INFO(" System probe path: %s", system_probe_path.string().c_str()); - DC_LOG_INFO(" Invalid probe database: %s", invalid_probe_file_path.string().c_str()); + DC_LOG_INFO(" Runtime probe state database: %s", runtime_probe_state_db_path.string().c_str()); DC_LOG_INFO(" Run dir: %s", server_run_dir.string().c_str()); DC_LOG_INFO(" Run ID file: %s", server_run_id_file.string().c_str()); DC_LOG_INFO(" Ready file: %s", server_ready_file.string().c_str()); @@ -239,65 +344,56 @@ void RuntimeConfigurationManager::derive_configurations() { } ensure_directory_owned_by_install_user(trace_log_dir); - const std::string generated_file_suffix = - user + "-" + run_id + "-" + hostname + "-" + config_name; - const std::string lookup_file_suffix = std::string(DATACRUMBS_INSTALL_USER) + "-" + config_name; + const std::string probe_stem = probe_file_path.stem().string(); + const std::string generated_file_suffix = user + "-" + run_id + "-" + hostname + "-" + probe_stem; + const std::string lookup_file_suffix = std::string(DATACRUMBS_INSTALL_USER) + "-" + hostname; trace_file_path = trace_log_dir / ("trace-" + generated_file_suffix + ".pfw.gz"); - invalid_probe_file_path = data_dir / ("probes-invalid-" + lookup_file_suffix + ".json.gz"); + runtime_probe_state_db_path = + data_dir / ("probes-runtime-status-" + lookup_file_suffix + ".sqlite"); server_ready_file = server_run_dir / ("datacrumbs-" + run_id + ".ready"); } void RuntimeConfigurationManager::load_runtime_system_configuration() { - const std::string payload = datacrumbs::probe_file::read_probe_payload(system_probe_path); - if (payload.empty()) { - throw std::runtime_error("Failed to read system probe file: " + system_probe_path.string()); - } - - json_object* root = json_tokener_parse(payload.c_str()); - if (!root || json_object_get_type(root) != json_type_object) { - if (root) json_object_put(root); - throw std::runtime_error("Failed to parse system probe file: " + system_probe_path.string()); - } - - json_object* summary = nullptr; - json_object* system_configuration = nullptr; - if (json_object_object_get_ex(root, "summary", &summary) && - json_object_get_type(summary) == json_type_object) { - const std::string imported_config_path = json_string_or_empty(summary, "config_path"); - const std::string imported_trace_dir = json_string_or_empty(summary, "trace_log_dir"); - const std::string imported_config_name = json_string_or_empty(summary, "config_name"); - if (!imported_config_path.empty()) config_path = imported_config_path; - if (trace_dir_pattern.empty() && !imported_trace_dir.empty()) - trace_log_dir = imported_trace_dir; - if (!imported_config_name.empty()) config_name = imported_config_name; - } - - if (json_object_object_get_ex(root, "system_configuration", &system_configuration) && - json_object_get_type(system_configuration) == json_type_object) { - const std::string imported_log_dir = - json_string_or_empty(system_configuration, "DATACRUMBS_LOG_DIR"); - const std::string imported_data_dir = - json_string_or_empty(system_configuration, "DATACRUMBS_INSTALL_DATA_DIR"); - const std::string imported_inclusion_paths = - json_string_or_empty(system_configuration, "DATACRUMBS_INCLUSION_PATHS"); - const std::string imported_trace_dir_pattern = - json_string_or_empty(system_configuration, "DATACRUMBS_TRACE_DIR_PATTERN"); - const std::string imported_run_dir = - json_string_or_empty(system_configuration, "DATACRUMBS_SERVER_RUN_DIR"); - const std::string imported_run_id_file = - json_string_or_empty(system_configuration, "DATACRUMBS_SERVER_RUN_ID_FILE"); - - if (!imported_log_dir.empty()) log_dir = imported_log_dir; - if (!imported_data_dir.empty()) data_dir = imported_data_dir; - if (!imported_trace_dir_pattern.empty()) trace_dir_pattern = imported_trace_dir_pattern; - if (!imported_run_dir.empty()) server_run_dir = imported_run_dir; - if (!imported_run_id_file.empty()) server_run_id_file = imported_run_id_file; - if (inclusion_paths.empty() && !imported_inclusion_paths.empty()) { - inclusion_paths = imported_inclusion_paths; - } + sqlite3* db = open_runtime_probe_state_database(system_probe_path, SQLITE_OPEN_READONLY); + if (!db) { + throw std::runtime_error("Failed to open system configuration database: " + + system_probe_path.string()); + } + + const auto summary = load_sqlite_kv_table(db, "summary", system_probe_path); + const auto system_configuration = + load_sqlite_kv_table(db, "system_configuration", system_probe_path); + sqlite3_close(db); + + if (const auto it = summary.find("trace_log_dir"); + it != summary.end() && trace_dir_pattern.empty() && !it->second.empty()) { + trace_log_dir = it->second; } - json_object_put(root); + if (const auto it = system_configuration.find("DATACRUMBS_LOG_DIR"); + it != system_configuration.end() && !it->second.empty()) { + log_dir = it->second; + } + if (const auto it = system_configuration.find("DATACRUMBS_INSTALL_DATA_DIR"); + it != system_configuration.end() && !it->second.empty()) { + data_dir = it->second; + } + if (const auto it = system_configuration.find("DATACRUMBS_INCLUSION_PATHS"); + it != system_configuration.end() && inclusion_paths.empty() && !it->second.empty()) { + inclusion_paths = it->second; + } + if (const auto it = system_configuration.find("DATACRUMBS_TRACE_DIR_PATTERN"); + it != system_configuration.end() && !it->second.empty()) { + trace_dir_pattern = it->second; + } + if (const auto it = system_configuration.find("DATACRUMBS_SERVER_RUN_DIR"); + it != system_configuration.end() && !it->second.empty()) { + server_run_dir = it->second; + } + if (const auto it = system_configuration.find("DATACRUMBS_SERVER_RUN_ID_FILE"); + it != system_configuration.end() && !it->second.empty()) { + server_run_id_file = it->second; + } } void RuntimeConfigurationManager::load_runtime_probe_file() { @@ -315,7 +411,8 @@ void RuntimeConfigurationManager::load_runtime_probe_file() { runtime_event_ids.clear(); runtime_event_metadata.clear(); invalid_runtime_probes.clear(); - load_invalid_runtime_probes(); + successful_runtime_probes.clear(); + load_runtime_probe_state(); size_t total_runtime_functions = 0; size_t skipped_known_invalid_functions = 0; @@ -340,7 +437,7 @@ void RuntimeConfigurationManager::load_runtime_probe_file() { std::vector filtered_functions; filtered_functions.reserve(probe->functions.size()); for (const auto& function_name : probe->functions) { - if (is_known_invalid_runtime_probe(probe->name, function_name)) { + if (is_known_invalid_runtime_probe(probe, function_name)) { ++skipped_known_invalid_functions; continue; } @@ -370,7 +467,7 @@ void RuntimeConfigurationManager::load_runtime_probe_file() { DC_LOG_WARN( "[RuntimeConfigurationManager] Skipped %zu known invalid runtime probe functions " "using %s", - skipped_known_invalid_functions, invalid_probe_file_path.string().c_str()); + skipped_known_invalid_functions, runtime_probe_state_db_path.string().c_str()); } if (total_runtime_functions > DATACRUMBS_MAX_RUNTIME_FUNCTIONS) { @@ -383,104 +480,203 @@ void RuntimeConfigurationManager::load_runtime_probe_file() { } } -void RuntimeConfigurationManager::load_invalid_runtime_probes() { - if (invalid_probe_file_path.empty() || !std::filesystem::exists(invalid_probe_file_path)) { +void RuntimeConfigurationManager::load_runtime_probe_state() { + if (runtime_probe_state_db_path.empty() || + !std::filesystem::exists(runtime_probe_state_db_path)) { return; } - const std::string content = datacrumbs::probe_file::read_probe_payload(invalid_probe_file_path); - if (content.empty()) { - DC_LOG_WARN("[RuntimeConfigurationManager] Failed to read invalid probe database: %s", - invalid_probe_file_path.string().c_str()); + sqlite3* db = + open_runtime_probe_state_database(runtime_probe_state_db_path, SQLITE_OPEN_READONLY); + if (!db) { return; } - json_object* root = json_tokener_parse(content.c_str()); - if (!root || json_object_get_type(root) != json_type_array) { - if (root) json_object_put(root); - DC_LOG_WARN("[RuntimeConfigurationManager] Invalid invalid probe database format: %s", - invalid_probe_file_path.string().c_str()); + + sqlite3_stmt* statement = nullptr; + const char* sql = + "SELECT probe_group, scope_key, function_name, status FROM runtime_probe_status;"; + if (sqlite3_prepare_v2(db, sql, -1, &statement, nullptr) != SQLITE_OK) { + DC_LOG_WARN("[RuntimeConfigurationManager] Failed to query runtime probe state database %s: %s", + runtime_probe_state_db_path.string().c_str(), sqlite3_errmsg(db)); + sqlite3_close(db); return; } - const int arr_len = json_object_array_length(root); - for (int i = 0; i < arr_len; ++i) { - json_object* probe_obj = json_object_array_get_idx(root, i); - if (!probe_obj) continue; - - json_object* name_obj = nullptr; - json_object* functions_obj = nullptr; - if (!json_object_object_get_ex(probe_obj, "name", &name_obj) || - !json_object_object_get_ex(probe_obj, "functions", &functions_obj) || - json_object_get_type(name_obj) != json_type_string || - json_object_get_type(functions_obj) != json_type_array) { + while (sqlite3_step(statement) == SQLITE_ROW) { + const unsigned char* probe_group = sqlite3_column_text(statement, 0); + const unsigned char* scope_key = sqlite3_column_text(statement, 1); + const unsigned char* function_name = sqlite3_column_text(statement, 2); + const unsigned char* status = sqlite3_column_text(statement, 3); + if (!probe_group || !scope_key || !function_name || !status) { continue; } - - auto& function_set = invalid_runtime_probes[std::string(json_object_get_string(name_obj))]; - const int function_count = json_object_array_length(functions_obj); - for (int j = 0; j < function_count; ++j) { - json_object* function_obj = json_object_array_get_idx(functions_obj, j); - if (function_obj && json_object_get_type(function_obj) == json_type_string) { - function_set.insert(json_object_get_string(function_obj)); - } - } + auto& target = std::string(reinterpret_cast(status)) == "successful" + ? successful_runtime_probes + : invalid_runtime_probes; + target[reinterpret_cast(probe_group)][reinterpret_cast(scope_key)] + .insert(reinterpret_cast(function_name)); } - json_object_put(root); + sqlite3_finalize(statement); + sqlite3_close(db); } bool RuntimeConfigurationManager::is_known_invalid_runtime_probe( - const std::string& probe_name, const std::string& function_name) const { - const auto probe_it = invalid_runtime_probes.find(probe_name); - if (probe_it == invalid_runtime_probes.end()) { + const std::shared_ptr& probe, const std::string& function_name) const { + const auto bucket = invalid_probe_bucket(probe); + const auto group_it = invalid_runtime_probes.find(bucket.group); + if (group_it == invalid_runtime_probes.end()) { return false; } - return probe_it->second.find(function_name) != probe_it->second.end(); + const auto scope_it = group_it->second.find(bucket.scope_key); + if (scope_it == group_it->second.end()) { + return false; + } + const auto successful_group_it = successful_runtime_probes.find(bucket.group); + if (successful_group_it != successful_runtime_probes.end()) { + const auto successful_scope_it = successful_group_it->second.find(bucket.scope_key); + if (successful_scope_it != successful_group_it->second.end() && + successful_scope_it->second.find(function_name) != successful_scope_it->second.end()) { + return false; + } + } + return scope_it->second.find(function_name) != scope_it->second.end(); } -void RuntimeConfigurationManager::record_invalid_runtime_probe(const std::string& probe_name, +void RuntimeConfigurationManager::record_invalid_runtime_probe(const std::shared_ptr& probe, const std::string& function_name) { - invalid_runtime_probes[probe_name].insert(function_name); + const auto bucket = invalid_probe_bucket(probe); + invalid_runtime_probes[bucket.group][bucket.scope_key].insert(function_name); } -void RuntimeConfigurationManager::persist_invalid_runtime_probes() const { - if (invalid_probe_file_path.empty()) { +void RuntimeConfigurationManager::record_successful_runtime_probe( + const std::shared_ptr& probe, const std::string& function_name) { + const auto bucket = invalid_probe_bucket(probe); + successful_runtime_probes[bucket.group][bucket.scope_key].insert(function_name); + + const auto invalid_group_it = invalid_runtime_probes.find(bucket.group); + if (invalid_group_it == invalid_runtime_probes.end()) { + return; + } + const auto invalid_scope_it = invalid_group_it->second.find(bucket.scope_key); + if (invalid_scope_it == invalid_group_it->second.end()) { + return; + } + + invalid_scope_it->second.erase(function_name); + if (invalid_scope_it->second.empty()) { + invalid_group_it->second.erase(invalid_scope_it); + } + if (invalid_group_it->second.empty()) { + invalid_runtime_probes.erase(invalid_group_it); + } +} + +void RuntimeConfigurationManager::persist_runtime_probe_state() const { + if (runtime_probe_state_db_path.empty()) { return; } std::error_code ec; - std::filesystem::create_directories(invalid_probe_file_path.parent_path(), ec); + std::filesystem::create_directories(runtime_probe_state_db_path.parent_path(), ec); - json_object* root = json_object_new_array(); - for (const auto& [probe_name, functions] : invalid_runtime_probes) { - if (functions.empty()) { - continue; + sqlite3* db = open_runtime_probe_state_database(runtime_probe_state_db_path, + SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); + if (!db) { + return; + } + + if (!initialize_runtime_probe_state_database(db, runtime_probe_state_db_path)) { + sqlite3_close(db); + return; + } + if (!sqlite_exec(db, "BEGIN IMMEDIATE TRANSACTION;", runtime_probe_state_db_path, + "begin transaction")) { + sqlite3_close(db); + return; + } + + sqlite3_stmt* insert_statement = nullptr; + const char* insert_sql = + "INSERT OR IGNORE INTO runtime_probe_status " + "(probe_group, scope_key, function_name, status) VALUES (?, ?, ?, ?);"; + if (sqlite3_prepare_v2(db, insert_sql, -1, &insert_statement, nullptr) != SQLITE_OK) { + DC_LOG_WARN( + "[RuntimeConfigurationManager] Failed to prepare runtime probe state insert for %s: %s", + runtime_probe_state_db_path.string().c_str(), sqlite3_errmsg(db)); + sqlite_exec(db, "ROLLBACK;", runtime_probe_state_db_path, "rollback transaction"); + sqlite3_close(db); + return; + } + + sqlite3_stmt* delete_invalid_statement = nullptr; + const char* delete_invalid_sql = + "DELETE FROM runtime_probe_status WHERE probe_group = ? AND scope_key = ? " + "AND function_name = ? AND status = 'invalid';"; + if (sqlite3_prepare_v2(db, delete_invalid_sql, -1, &delete_invalid_statement, nullptr) != + SQLITE_OK) { + DC_LOG_WARN( + "[RuntimeConfigurationManager] Failed to prepare runtime probe state cleanup for %s: %s", + runtime_probe_state_db_path.string().c_str(), sqlite3_errmsg(db)); + sqlite3_finalize(insert_statement); + sqlite_exec(db, "ROLLBACK;", runtime_probe_state_db_path, "rollback transaction"); + sqlite3_close(db); + return; + } + + const auto insert_entries = [&](const auto& probe_sets, const char* status) { + for (const auto& [probe_group, scopes] : probe_sets) { + for (const auto& [scope_key, functions] : scopes) { + for (const auto& function_name : functions) { + sqlite3_reset(insert_statement); + sqlite3_clear_bindings(insert_statement); + sqlite3_bind_text(insert_statement, 1, probe_group.c_str(), -1, SQLITE_TRANSIENT); + sqlite3_bind_text(insert_statement, 2, scope_key.c_str(), -1, SQLITE_TRANSIENT); + sqlite3_bind_text(insert_statement, 3, function_name.c_str(), -1, SQLITE_TRANSIENT); + sqlite3_bind_text(insert_statement, 4, status, -1, SQLITE_STATIC); + if (sqlite3_step(insert_statement) != SQLITE_DONE) { + DC_LOG_WARN( + "[RuntimeConfigurationManager] Failed to persist %s runtime probe entry to %s: %s", + status, runtime_probe_state_db_path.string().c_str(), sqlite3_errmsg(db)); + } + } + } } - json_object* probe_obj = json_object_new_object(); - json_object_object_add(probe_obj, "name", json_object_new_string(probe_name.c_str())); - json_object* function_array = json_object_new_array(); - std::vector sorted_functions(functions.begin(), functions.end()); - std::sort(sorted_functions.begin(), sorted_functions.end()); - for (const auto& function_name : sorted_functions) { - json_object_array_add(function_array, json_object_new_string(function_name.c_str())); + }; + + for (const auto& [probe_group, scopes] : successful_runtime_probes) { + for (const auto& [scope_key, functions] : scopes) { + for (const auto& function_name : functions) { + sqlite3_reset(delete_invalid_statement); + sqlite3_clear_bindings(delete_invalid_statement); + sqlite3_bind_text(delete_invalid_statement, 1, probe_group.c_str(), -1, SQLITE_TRANSIENT); + sqlite3_bind_text(delete_invalid_statement, 2, scope_key.c_str(), -1, SQLITE_TRANSIENT); + sqlite3_bind_text(delete_invalid_statement, 3, function_name.c_str(), -1, SQLITE_TRANSIENT); + if (sqlite3_step(delete_invalid_statement) != SQLITE_DONE) { + DC_LOG_WARN( + "[RuntimeConfigurationManager] Failed to clear stale invalid runtime probe entry " + "from %s: %s", + runtime_probe_state_db_path.string().c_str(), sqlite3_errmsg(db)); + } + } } - json_object_object_add(probe_obj, "functions", function_array); - json_object_array_add(root, probe_obj); } - const std::string payload = json_object_to_json_string_ext(root, JSON_C_TO_STRING_PRETTY); - if (!datacrumbs::probe_file::write_gzip_file(invalid_probe_file_path, payload)) { - json_object_put(root); - DC_LOG_WARN("[RuntimeConfigurationManager] Failed to persist invalid probe database: %s", - invalid_probe_file_path.string().c_str()); + insert_entries(successful_runtime_probes, "successful"); + insert_entries(invalid_runtime_probes, "invalid"); + + sqlite3_finalize(delete_invalid_statement); + sqlite3_finalize(insert_statement); + if (!sqlite_exec(db, "COMMIT;", runtime_probe_state_db_path, "commit transaction")) { + sqlite3_close(db); return; } + sqlite3_close(db); if (struct passwd* pwd = getpwnam(DATACRUMBS_INSTALL_USER); pwd != nullptr) { - chown(invalid_probe_file_path.c_str(), pwd->pw_uid, pwd->pw_gid); + chown(runtime_probe_state_db_path.c_str(), pwd->pw_uid, pwd->pw_gid); } - chmod(invalid_probe_file_path.c_str(), S_IRUSR | S_IWUSR); - json_object_put(root); + chmod(runtime_probe_state_db_path.c_str(), S_IRUSR | S_IWUSR); } std::optional RuntimeConfigurationManager::get_runtime_event_id( diff --git a/src/datacrumbs/common/runtime_configuration_manager.h b/src/datacrumbs/common/runtime_configuration_manager.h index 9f789d6f..48dd2af1 100644 --- a/src/datacrumbs/common/runtime_configuration_manager.h +++ b/src/datacrumbs/common/runtime_configuration_manager.h @@ -14,6 +14,8 @@ namespace datacrumbs { +using RuntimeProbeScopes = std::unordered_map>; + class RuntimeConfigurationManager { public: RuntimeConfigurationManager(); @@ -27,18 +29,16 @@ class RuntimeConfigurationManager { const std::string& function_name) const; const RuntimeEventMetadata* get_runtime_event_metadata(uint64_t event_id) const; - std::filesystem::path config_path; std::filesystem::path data_dir; std::filesystem::path trace_log_dir; std::filesystem::path trace_file_path; std::filesystem::path probe_file_path; std::filesystem::path system_probe_path; - std::filesystem::path invalid_probe_file_path; + std::filesystem::path runtime_probe_state_db_path; std::filesystem::path server_run_dir; std::filesystem::path server_run_id_file; std::filesystem::path server_ready_file; - std::string config_name; std::string user; std::string log_dir; std::string hostname; @@ -50,19 +50,22 @@ class RuntimeConfigurationManager { std::unordered_map> category_map; std::unordered_map runtime_event_ids; std::unordered_map runtime_event_metadata; - std::unordered_map> invalid_runtime_probes; + std::unordered_map invalid_runtime_probes; + std::unordered_map successful_runtime_probes; - bool is_known_invalid_runtime_probe(const std::string& probe_name, + bool is_known_invalid_runtime_probe(const std::shared_ptr& probe, const std::string& function_name) const; - void record_invalid_runtime_probe(const std::string& probe_name, + void record_invalid_runtime_probe(const std::shared_ptr& probe, const std::string& function_name); - void persist_invalid_runtime_probes() const; + void record_successful_runtime_probe(const std::shared_ptr& probe, + const std::string& function_name); + void persist_runtime_probe_state() const; private: void derive_configurations(); void load_runtime_system_configuration(); void load_runtime_probe_file(); - void load_invalid_runtime_probes(); + void load_runtime_probe_state(); void validate_configurations() const; }; diff --git a/src/datacrumbs/server/process/server.impl.cpp b/src/datacrumbs/server/process/server.impl.cpp index 0ab14048..84a68014 100644 --- a/src/datacrumbs/server/process/server.impl.cpp +++ b/src/datacrumbs/server/process/server.impl.cpp @@ -175,7 +175,7 @@ static int attach_runtime_probes(datacrumbs::EventProcessor* event_processor, int total_attached = 0; int total_failed = 0; uint64_t cookie = 1; - bool invalid_probe_database_updated = false; + bool runtime_probe_state_updated = false; for (const auto& probe : config_manager->runtime_probes) { for (const auto& function_name : probe->functions) { @@ -207,11 +207,13 @@ static int attach_runtime_probes(datacrumbs::EventProcessor* event_processor, auto* exit_link = bpf_program__attach_kprobe_opts(kprobe_exit, function_name.c_str(), &exit_opts); if (libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { - config_manager->record_invalid_runtime_probe(probe->name, function_name); - invalid_probe_database_updated = true; + config_manager->record_invalid_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_failed += 2; continue; } + config_manager->record_successful_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_attached += 2; } else if (probe->type == datacrumbs::ProbeType::SYSCALLS) { total_requested += 2; @@ -232,11 +234,13 @@ static int attach_runtime_probes(datacrumbs::EventProcessor* event_processor, auto* exit_link = bpf_program__attach_ksyscall(syscall_exit, function_name.c_str(), &exit_opts); if (libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { - config_manager->record_invalid_runtime_probe(probe->name, function_name); - invalid_probe_database_updated = true; + config_manager->record_invalid_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_failed += 2; continue; } + config_manager->record_successful_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_attached += 2; } else if (probe->type == datacrumbs::ProbeType::UPROBE) { total_requested += 2; @@ -271,11 +275,13 @@ static int attach_runtime_probes(datacrumbs::EventProcessor* event_processor, auto* exit_link = bpf_program__attach_uprobe_opts( uprobe_exit, -1, uprobe->binary_path.c_str(), offset, &exit_opts); if (libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { - config_manager->record_invalid_runtime_probe(probe->name, function_name); - invalid_probe_database_updated = true; + config_manager->record_invalid_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_failed += 2; continue; } + config_manager->record_successful_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_attached += 2; } else if (probe->type == datacrumbs::ProbeType::USDT) { total_requested += 2; @@ -300,11 +306,13 @@ static int attach_runtime_probes(datacrumbs::EventProcessor* event_processor, function_name.c_str(), &exit_opts) : nullptr; if (!usdt || libbpf_get_error(entry_link) || libbpf_get_error(exit_link)) { - config_manager->record_invalid_runtime_probe(probe->name, function_name); - invalid_probe_database_updated = true; + config_manager->record_invalid_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_failed += 2; continue; } + config_manager->record_successful_runtime_probe(probe, function_name); + runtime_probe_state_updated = true; total_attached += 2; } else { DC_LOG_WARN("Skipping unsupported runtime probe type %d for %s", @@ -314,8 +322,8 @@ static int attach_runtime_probes(datacrumbs::EventProcessor* event_processor, } } - if (invalid_probe_database_updated) { - config_manager->persist_invalid_runtime_probes(); + if (runtime_probe_state_updated) { + config_manager->persist_runtime_probe_state(); } DC_LOG_INFO("Runtime probe attachment summary: requested=%d attached=%d failed=%d", diff --git a/src/datacrumbs/signer/sign_probes_service.cpp b/src/datacrumbs/signer/sign_probes_service.cpp index 5cd54b8c..6967a545 100644 --- a/src/datacrumbs/signer/sign_probes_service.cpp +++ b/src/datacrumbs/signer/sign_probes_service.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -17,8 +18,7 @@ SignProbesService::SignProbesService() : socket_path_(DATACRUMBS_SIGN_PROBES_SOCKET_PATH), - allowed_client_executable_(std::filesystem::path(DATACRUMBS_INSTALL_BIN_DIR) / - "datacrumbs_probe_configurator_exec") {} + allowed_client_executable_name_("datacrumbs_probe_configurator_exec") {} SignProbesService::~SignProbesService() { if (server_fd_ >= 0) { @@ -30,6 +30,8 @@ SignProbesService::~SignProbesService() { } int SignProbesService::run() { + signal(SIGPIPE, SIG_IGN); + std::string secret; if (!datacrumbs::probe_file::ensure_probe_secret(&secret)) { DC_LOG_ERROR("Failed to create or read probe signing secret"); @@ -51,7 +53,18 @@ int SignProbesService::run() { DC_LOG_ERROR("Failed to accept signer connection"); continue; } - handle_client(client_fd); + try { + handle_client(client_fd); + } catch (const std::exception& ex) { + const std::string response_payload = build_response(false, "", ex.what()); + write_all_to_fd(client_fd, response_payload); + DC_LOG_ERROR("Signer request handling failed: %s", ex.what()); + } catch (...) { + const std::string response_payload = + build_response(false, "", "unexpected signer service error"); + write_all_to_fd(client_fd, response_payload); + DC_LOG_ERROR("Signer request handling failed: unknown exception"); + } close(client_fd); } @@ -110,6 +123,7 @@ void SignProbesService::handle_client(int client_fd) const { write_all_to_fd(client_fd, response_payload); return; } + DC_LOG_INFO("Accepted signer request"); if (!read_all_from_fd(client_fd, &request_payload)) { response_payload = build_response(false, "", "failed to read signing request"); @@ -122,6 +136,7 @@ void SignProbesService::handle_client(int client_fd) const { if (checksum.empty()) { response_payload = build_response(false, "", error); } else { + DC_LOG_INFO("Successfully signed probe payload"); response_payload = build_response(true, checksum, ""); } write_all_to_fd(client_fd, response_payload); @@ -147,8 +162,16 @@ bool SignProbesService::read_all_from_fd(int fd, std::string* payload) const { char buffer[4096]; payload->clear(); ssize_t read_bytes = 0; - while ((read_bytes = read(fd, buffer, sizeof(buffer))) > 0) { - payload->append(buffer, static_cast(read_bytes)); + for (;;) { + read_bytes = read(fd, buffer, sizeof(buffer)); + if (read_bytes > 0) { + payload->append(buffer, static_cast(read_bytes)); + continue; + } + if (read_bytes < 0 && errno == EINTR) { + continue; + } + break; } return read_bytes == 0; } @@ -158,6 +181,9 @@ bool SignProbesService::write_all_to_fd(int fd, const std::string& payload) cons while (total_written < payload.size()) { const ssize_t written = write(fd, payload.data() + total_written, payload.size() - total_written); + if (written < 0 && errno == EINTR) { + continue; + } if (written <= 0) { return false; } @@ -237,21 +263,13 @@ bool SignProbesService::is_authorized_client(int client_fd, std::string* error) return false; } - ec.clear(); - const auto allowed_executable = std::filesystem::weakly_canonical(allowed_client_executable_, ec); - if (ec) { - if (error != nullptr) { - *error = "failed to resolve allowed probe configurator path"; - } - return false; - } - - if (peer_executable != allowed_executable) { + const std::string peer_executable_name = peer_executable.filename().string(); + if (peer_executable_name != allowed_client_executable_name_) { if (error != nullptr) { *error = "probe signing requests are only accepted from datacrumbs_probe_configurator"; } - DC_LOG_WARN("Rejected signer request from pid=%d exe=%s expected=%s", credentials.pid, - peer_executable.string().c_str(), allowed_executable.string().c_str()); + DC_LOG_WARN("Rejected signer request from pid=%d exe=%s expected-name=%s", credentials.pid, + peer_executable.string().c_str(), allowed_client_executable_name_.c_str()); return false; } diff --git a/src/datacrumbs/signer/sign_probes_service.h b/src/datacrumbs/signer/sign_probes_service.h index 56ac5109..00735dce 100644 --- a/src/datacrumbs/signer/sign_probes_service.h +++ b/src/datacrumbs/signer/sign_probes_service.h @@ -21,7 +21,7 @@ class SignProbesService { bool is_authorized_client(int client_fd, std::string* error) const; std::filesystem::path socket_path_; - std::filesystem::path allowed_client_executable_; + std::string allowed_client_executable_name_; int server_fd_ = -1; }; diff --git a/src/datacrumbs/system_configurator/system_configurator.cpp b/src/datacrumbs/system_configurator/system_configurator.cpp index 529839b0..f5058369 100644 --- a/src/datacrumbs/system_configurator/system_configurator.cpp +++ b/src/datacrumbs/system_configurator/system_configurator.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include @@ -13,6 +13,66 @@ #include #include +namespace { + +constexpr int kSqliteBusyTimeoutMs = 5000; + +bool sqlite_exec(sqlite3* db, const char* sql, const std::string& database_path, + const char* operation) { + char* error_message = nullptr; + const int rc = sqlite3_exec(db, sql, nullptr, nullptr, &error_message); + if (rc == SQLITE_OK) { + return true; + } + + const char* sqlite_message = error_message ? error_message : sqlite3_errmsg(db); + DC_LOG_ERROR("Failed to %s %s: %s", operation, database_path.c_str(), + sqlite_message ? sqlite_message : "unknown sqlite error"); + if (error_message != nullptr) { + sqlite3_free(error_message); + } + return false; +} + +bool write_kv_table(sqlite3* db, const char* table_name, + const std::unordered_map& values, + const std::string& database_path) { + const std::string sql = + std::string("INSERT OR REPLACE INTO ") + table_name + " (key, value) VALUES (?, ?);"; + sqlite3_stmt* statement = nullptr; + if (sqlite3_prepare_v2(db, sql.c_str(), -1, &statement, nullptr) != SQLITE_OK) { + DC_LOG_ERROR("Failed to prepare insert into %s for %s: %s", table_name, database_path.c_str(), + sqlite3_errmsg(db)); + return false; + } + + bool ok = true; + for (const auto& [key, value] : values) { + sqlite3_reset(statement); + sqlite3_clear_bindings(statement); + sqlite3_bind_text(statement, 1, key.c_str(), -1, SQLITE_TRANSIENT); + sqlite3_bind_text(statement, 2, value.c_str(), -1, SQLITE_TRANSIENT); + if (sqlite3_step(statement) != SQLITE_DONE) { + DC_LOG_ERROR("Failed to insert key '%s' into %s for %s: %s", key.c_str(), table_name, + database_path.c_str(), sqlite3_errmsg(db)); + ok = false; + break; + } + } + + sqlite3_finalize(statement); + return ok; +} + +bool configure_generated_database(sqlite3* db, const std::string& database_path) { + return sqlite_exec(db, "PRAGMA journal_mode=MEMORY;", database_path, "set journal_mode") && + sqlite_exec(db, "PRAGMA synchronous=OFF;", database_path, "set synchronous") && + sqlite_exec(db, "PRAGMA temp_store=MEMORY;", database_path, "set temp_store") && + sqlite_exec(db, "PRAGMA locking_mode=EXCLUSIVE;", database_path, "set locking_mode"); +} + +} // namespace + std::string SystemConfigurator::current_hostname() const { char hostname_buf[256] = {0}; if (gethostname(hostname_buf, sizeof(hostname_buf) - 1) != 0) { @@ -21,11 +81,6 @@ std::string SystemConfigurator::current_hostname() const { return hostname_buf; } -void SystemConfigurator::add_string(json_object* root, const char* key, - const std::string& value) const { - json_object_object_add(root, key, json_object_new_string(value.c_str())); -} - std::string SystemConfigurator::system_configuration_path() const { const char* override_path = std::getenv("DATACRUMBS_SYSTEM_PROBE_FILE_OVERRIDE"); if (override_path != nullptr && override_path[0] != '\0') { @@ -44,13 +99,10 @@ void SystemConfigurator::enforce_secret_ownership_and_mode() const { chmod(secret_path.c_str(), S_IRUSR); } -void SystemConfigurator::add_system_configuration(json_object* root) const { - std::string job_other_flags; +std::unordered_map SystemConfigurator::system_configuration_values() + const { std::string inclusion_paths; std::string probe_signing_disabled = "0"; -#ifdef DATACRUMBS_JOB_OTHER_FLAGS - job_other_flags = optional_macro_string(DATACRUMBS_JOB_OTHER_FLAGS); -#endif #ifdef DATACRUMBS_INCLUSION_PATHS inclusion_paths = optional_macro_string(DATACRUMBS_INCLUSION_PATHS); #endif @@ -58,7 +110,7 @@ void SystemConfigurator::add_system_configuration(json_object* root) const { probe_signing_disabled = "1"; #endif - const std::unordered_map values = { + return { {"DATACRUMBS_INSTALL_PREFIX", DATACRUMBS_INSTALL_PREFIX_PATH}, {"DATACRUMBS_INSTALL_HOST", DATACRUMBS_INSTALL_HOST}, {"DATACRUMBS_INSTALL_USER", DATACRUMBS_INSTALL_USER}, @@ -75,7 +127,6 @@ void SystemConfigurator::add_system_configuration(json_object* root) const { {"DATACRUMBS_CLIENT_LIB", DATACRUMBS_CLIENT_LIB}, {"DATACRUMBS_TRACE_DIR_PATTERN", DATACRUMBS_TRACE_DIR_PATTERN}, {"DATACRUMBS_JOB_SCHEDULER", DATACRUMBS_JOB_SCHEDULER}, - {"DATACRUMBS_JOB_OTHER_FLAGS", job_other_flags}, {"DATACRUMBS_JOB_ID_VAR", DATACRUMBS_JOB_ID_VAR}, {"DATACRUMBS_SERVER_RUN_DIR", DATACRUMBS_SERVER_RUN_DIR}, {"DATACRUMBS_SERVER_RUN_ID_FILE", DATACRUMBS_SERVER_RUN_ID_FILE}, @@ -87,10 +138,6 @@ void SystemConfigurator::add_system_configuration(json_object* root) const { {"DATACRUMBS_LIBC_SO", DATACRUMBS_LIBC_SO}, {"DATACRUMBS_DISABLE_PROBE_SIGNING", probe_signing_disabled}, }; - - for (const auto& [key, value] : values) { - add_string(root, key.c_str(), value); - } } int SystemConfigurator::run() { @@ -107,15 +154,14 @@ int SystemConfigurator::run() { DC_LOG_WARN("Skipping probe signing secret creation during non-root configuration pass"); } - const std::string system_configuration_path = this->system_configuration_path(); - if (std::filesystem::exists(system_configuration_path)) { - if (chmod(system_configuration_path.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) != 0) { + const std::string configuration_path = system_configuration_path(); + if (std::filesystem::exists(configuration_path)) { + if (chmod(configuration_path.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) != 0) { DC_LOG_ERROR("Failed to update system configuration file permissions: %s", - system_configuration_path.c_str()); + configuration_path.c_str()); return 1; } - DC_LOG_INFO("System configuration already exists at: %s", - system_configuration_path.c_str()); + DC_LOG_INFO("System configuration already exists at: %s", configuration_path.c_str()); if (secret_ready) { DC_LOG_INFO("Probe signing secret ensured at: %s", datacrumbs::probe_file::secret_path().string().c_str()); @@ -124,41 +170,79 @@ int SystemConfigurator::run() { } const std::string hostname = current_hostname(); + std::error_code ec; + std::filesystem::create_directories(std::filesystem::path(configuration_path).parent_path(), + ec); + if (ec) { + DC_LOG_ERROR("Failed to create system configuration directory for %s: %s", + configuration_path.c_str(), ec.message().c_str()); + return 1; + } - json_object* root = json_object_new_object(); - json_object* summary = json_object_new_object(); - json_object* system_configuration = json_object_new_object(); - - add_system_configuration(system_configuration); - json_object_object_add(root, "system_configuration", system_configuration); - - add_string(summary, "config_name", hostname); - add_string(summary, "config_path", DATACRUMBS_INSTALL_CONFIGS_DIR); - add_string(summary, "trace_log_dir", DATACRUMBS_CONFIGURED_TRACE_DIR); - add_string(summary, "data_dir", DATACRUMBS_INSTALL_SHARED_DATA_DIR); - add_string(summary, "system_probe_path", system_configuration_path); - add_string(summary, "hostname", hostname); - add_string(summary, "user", DATACRUMBS_USER); - add_string(summary, "install_user", DATACRUMBS_INSTALL_USER); - json_object_object_add(root, "summary", summary); + sqlite3* db = nullptr; + if (sqlite3_open(configuration_path.c_str(), &db) != SQLITE_OK) { + DC_LOG_ERROR("Failed to open system configuration database: %s", configuration_path.c_str()); + if (db != nullptr) { + sqlite3_close(db); + } + return 1; + } + sqlite3_busy_timeout(db, kSqliteBusyTimeoutMs); + if (!configure_generated_database(db, configuration_path)) { + sqlite3_close(db); + return 1; + } - const char* json_payload = json_object_to_json_string_ext(root, JSON_C_TO_STRING_PLAIN); + const auto summary_values = std::unordered_map{ + {"trace_log_dir", DATACRUMBS_CONFIGURED_TRACE_DIR}, + {"data_dir", DATACRUMBS_INSTALL_SHARED_DATA_DIR}, + {"system_probe_path", configuration_path}, + {"hostname", hostname}, + {"user", DATACRUMBS_USER}, + {"install_user", DATACRUMBS_INSTALL_USER}, + }; + + const bool transaction_started = + sqlite_exec(db, "BEGIN IMMEDIATE TRANSACTION;", configuration_path, "begin transaction"); const bool ok = - datacrumbs::probe_file::write_gzip_file(system_configuration_path, json_payload); - json_object_put(root); + transaction_started && + sqlite_exec(db, + "CREATE TABLE IF NOT EXISTS system_configuration (" + "key TEXT PRIMARY KEY," + "value TEXT NOT NULL" + ");", + configuration_path, "create system_configuration table") && + sqlite_exec(db, + "CREATE TABLE IF NOT EXISTS summary (" + "key TEXT PRIMARY KEY," + "value TEXT NOT NULL" + ");", + configuration_path, "create summary table") && + sqlite_exec(db, "DELETE FROM system_configuration;", configuration_path, + "clear system_configuration table") && + sqlite_exec(db, "DELETE FROM summary;", configuration_path, "clear summary table") && + write_kv_table(db, "system_configuration", system_configuration_values(), + configuration_path) && + write_kv_table(db, "summary", summary_values, configuration_path) && + sqlite_exec(db, "COMMIT;", configuration_path, "commit transaction"); if (!ok) { - DC_LOG_ERROR("Failed to write system configuration file: %s", - system_configuration_path.c_str()); + if (transaction_started) { + sqlite_exec(db, "ROLLBACK;", configuration_path, "rollback transaction"); + } + sqlite3_close(db); + DC_LOG_ERROR("Failed to write system configuration database: %s", configuration_path.c_str()); return 1; } - if (chmod(system_configuration_path.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) != 0) { + sqlite3_close(db); + + if (chmod(configuration_path.c_str(), S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) != 0) { DC_LOG_ERROR("Failed to update system configuration file permissions: %s", - system_configuration_path.c_str()); + configuration_path.c_str()); return 1; } - DC_LOG_INFO("System configuration written to: %s", system_configuration_path.c_str()); + DC_LOG_INFO("System configuration written to: %s", configuration_path.c_str()); if (secret_ready) { DC_LOG_INFO("Probe signing secret ensured at: %s", datacrumbs::probe_file::secret_path().string().c_str()); diff --git a/src/datacrumbs/system_configurator/system_configurator.h b/src/datacrumbs/system_configurator/system_configurator.h index b04c2005..f0e11b49 100644 --- a/src/datacrumbs/system_configurator/system_configurator.h +++ b/src/datacrumbs/system_configurator/system_configurator.h @@ -2,8 +2,7 @@ #define DATACRUMBS_SYSTEM_CONFIGURATOR_SYSTEM_CONFIGURATOR_H__ #include - -struct json_object; +#include class SystemConfigurator { public: @@ -12,10 +11,9 @@ class SystemConfigurator { private: std::string current_hostname() const; std::string system_configuration_path() const; - void add_string(json_object* root, const char* key, const std::string& value) const; std::string optional_macro_string(const char* value) const; void enforce_secret_ownership_and_mode() const; - void add_system_configuration(json_object* root) const; + std::unordered_map system_configuration_values() const; }; #endif From 9d2d590d77cf37abaaa7fd0cec847d86c0b119a3 Mon Sep 17 00:00:00 2001 From: Hariharan Devarajan Date: Thu, 9 Apr 2026 10:40:01 -0700 Subject: [PATCH 19/19] docker build fixes. --- .github/workflows/docker-build-test.yml | 56 +++++++++++++++---------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/.github/workflows/docker-build-test.yml b/.github/workflows/docker-build-test.yml index dd63d5fc..f73b89c0 100644 --- a/.github/workflows/docker-build-test.yml +++ b/.github/workflows/docker-build-test.yml @@ -10,7 +10,9 @@ env: BUILD_DIR: /tmp/dc-build UTILS_BUILD_DIR: /tmp/dc-utils-build INSTALL_PREFIX: /tmp/dc-install - CONFIG_YAML: /tmp/dc-install/etc/datacrumbs/configs/docker.yaml + INSTALLED_CONFIG_TEMPLATE_YAML: /tmp/dc-install/etc/datacrumbs/configs/docker.yaml + CONFIG_TEMPLATE_YAML: ${{ github.workspace }}/datacrumbs-utils/docs/configs/docker.yaml + CONFIG_YAML: /tmp/datacrumbs-ci-config.yaml PROBE_FILE: /tmp/datacrumbs-ci-probes.json.gz JOB_ID: "1" LOG_DIR: /tmp/datacrumbs-logs @@ -289,8 +291,19 @@ jobs: - name: Generate probes run: | set -euo pipefail + set -x + test -x "${INSTALL_PREFIX}/bin/datacrumbs_configure_template" + config_template_yaml="${INSTALLED_CONFIG_TEMPLATE_YAML}" + if [[ ! -f "${config_template_yaml}" ]]; then + config_template_yaml="${CONFIG_TEMPLATE_YAML}" + fi + test -f "${config_template_yaml}" + rm -f "${CONFIG_YAML}" + "${INSTALL_PREFIX}/bin/datacrumbs_configure_template" "${config_template_yaml}" "${CONFIG_YAML}" test -f "${CONFIG_YAML}" rm -f "${PROBE_FILE}" + probe_dir="$(dirname "${PROBE_FILE}")" + fallback_probe_file="" set +e probe_output="$("${INSTALL_PREFIX}/bin/datacrumbs_probe_configurator" "${CONFIG_YAML}" "${PROBE_FILE}" 2>&1)" @@ -299,45 +312,44 @@ jobs: printf '%s\n' "${probe_output}" printf 'datacrumbs_probe_configurator exit status: %s\n' "${probe_status}" + if [[ ! -s "${PROBE_FILE}" ]]; then + set +e + fallback_probe_file="$(find "${probe_dir}" -maxdepth 1 -name 'probes-*.json.gz' -size +0c -print | sort | tail -n 1)" + set -e + if [[ -n "${fallback_probe_file}" ]]; then + cp "${fallback_probe_file}" "${PROBE_FILE}" + echo "Using generated fallback probes file: ${fallback_probe_file}" + fi + fi + if [[ "${probe_status}" != "0" ]]; then if [[ "${probe_status}" == "1" ]] && grep -Eq "One or more probes failed validation|Extraction summary: .*invalid=yes" <<<"${probe_output}"; then if [[ -s "${PROBE_FILE}" ]]; then echo "Continuing with generated probes file despite invalid candidate probes on this runner." - ls -l "$(dirname "${PROBE_FILE}")" - find "$(dirname "${PROBE_FILE}")" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true + ls -l "${probe_dir}" + find "${probe_dir}" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true else echo "Probe validation reported invalid candidates and no probes file was written." - ls -l "$(dirname "${PROBE_FILE}")" - find "$(dirname "${PROBE_FILE}")" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true + ls -l "${probe_dir}" + find "${probe_dir}" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true exit "${probe_status}" fi else echo "Probe generation failed unexpectedly." - ls -l "$(dirname "${PROBE_FILE}")" - find "$(dirname "${PROBE_FILE}")" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true + ls -l "${probe_dir}" + find "${probe_dir}" -maxdepth 1 \( -name 'probes-*.json' -o -name 'probes-*.json.gz' -o -name 'categories-*.json' \) -print || true exit "${probe_status}" fi else test -s "${PROBE_FILE}" fi + set +x + if [[ "${{ matrix.disable_signing }}" == "true" ]]; then grep -q "Probe signing is disabled" <<<"${probe_output}" - python3 - <<'PY' - import gzip - import json - import os - from pathlib import Path - - probe_file = Path(os.environ["PROBE_FILE"]) - with gzip.open(probe_file, "rt", encoding="utf-8") as handle: - payload = json.load(handle) - - assert "checksum" not in payload, payload - assert "checksum_algorithm" not in payload, payload - assert isinstance(payload.get("categories"), list) and payload["categories"], payload - PY - fi + python3 -c 'import gzip, json, os; from pathlib import Path; probe_file = Path(os.environ["PROBE_FILE"]); payload = json.load(gzip.open(probe_file, "rt", encoding="utf-8")); assert "checksum" not in payload, payload; assert "checksum_algorithm" not in payload, payload; assert isinstance(payload.get("categories"), list) and payload["categories"], payload' + fi - name: Run datacrumbs wrapper flow and verify logs run: |

    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 z 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