void fi_log_init(void) { struct fi_filter subsys_filter; int level, i; char *levelstr = NULL, *provstr = NULL, *subsysstr = NULL; fi_param_define(NULL, "log_level", FI_PARAM_STRING, "Specify logging level: warn, trace, info, debug (default: warn)"); fi_param_get_str(NULL, "log_level", &levelstr); level = fi_convert_log_str(levelstr); if (level >= 0) log_mask = ((1 << (level + 1)) - 1); fi_param_define(NULL, "log_prov", FI_PARAM_STRING, "Specify specific provider to log (default: all)"); fi_param_get_str(NULL, "log_prov", &provstr); ofi_create_filter(&prov_log_filter, provstr); fi_param_define(NULL, "log_subsys", FI_PARAM_STRING, "Specify specific subsystem to log (default: all)"); fi_param_get_str(NULL, "log_subsys", &subsysstr); ofi_create_filter(&subsys_filter, subsysstr); for (i = 0; i < FI_LOG_SUBSYS_MAX; i++) { if (!ofi_apply_filter(&subsys_filter, log_subsys[i])) log_mask |= (1 << (i + FI_LOG_SUBSYS_OFFSET)); } ofi_free_filter(&subsys_filter); }
void fi_ini(void) { char *param_val = NULL; pthread_mutex_lock(&common_locks.ini_lock); if (ofi_init) goto unlock; ofi_ordered_provs_init(); fi_param_init(); fi_log_init(); ofi_osd_init(); ofi_pmem_init(); ofi_perf_init(); ofi_hook_init(); fi_param_define(NULL, "provider", FI_PARAM_STRING, "Only use specified provider (default: all available)"); fi_param_define(NULL, "fork_unsafe", FI_PARAM_BOOL, "Whether use of fork() may be unsafe for some providers" " (default: no). Setting this to yes could improve" " performance at the expense of making fork() potentially" " unsafe"); fi_param_define(NULL, "universe_size", FI_PARAM_SIZE_T, "Defines the maximum number of processes that will be" " used by distribute OFI application. The provider uses" " this to optimize resource allocations" " (default: OFI service specific)"); fi_param_get_str(NULL, "provider", ¶m_val); ofi_create_filter(&prov_filter, param_val); #ifdef HAVE_LIBDL int n = 0; char **dirs; char *provdir = NULL; void *dlhandle; /* If dlopen fails, assume static linking and just return without error */ dlhandle = dlopen(NULL, RTLD_NOW); if (dlhandle == NULL) { goto libdl_done; } dlclose(dlhandle); fi_param_define(NULL, "provider_path", FI_PARAM_STRING, "Search for providers in specific path (default: " PROVDLDIR ")"); fi_param_get_str(NULL, "provider_path", &provdir); if (!provdir) provdir = PROVDLDIR; dirs = ofi_split_and_alloc(provdir, ":", NULL); if (dirs) { for (n = 0; dirs[n]; ++n) { ofi_ini_dir(dirs[n]); } ofi_free_string_array(dirs); } libdl_done: #endif ofi_register_provider(PSM2_INIT, NULL); ofi_register_provider(PSM_INIT, NULL); ofi_register_provider(USNIC_INIT, NULL); ofi_register_provider(MLX_INIT, NULL); ofi_register_provider(GNI_INIT, NULL); ofi_register_provider(BGQ_INIT, NULL); ofi_register_provider(NETDIR_INIT, NULL); ofi_register_provider(SHM_INIT, NULL); ofi_register_provider(RXM_INIT, NULL); ofi_register_provider(VERBS_INIT, NULL); //ofi_register_provider(MRAIL_INIT, NULL); ofi_register_provider(RSTREAM_INIT, NULL); { /* TODO: RXD is not stable for now. Disable it by default */ int enable_rxd = 0; fi_param_define(NULL, "rxd_enable", FI_PARAM_BOOL, "Enable RXD provider (default: no)"); fi_param_get_bool(NULL, "rxd_enable", &enable_rxd); if (enable_rxd) ofi_register_provider(RXD_INIT, NULL); } ofi_register_provider(UDP_INIT, NULL); ofi_register_provider(SOCKETS_INIT, NULL); ofi_register_provider(TCP_INIT, NULL); ofi_init = 1; unlock: pthread_mutex_unlock(&common_locks.ini_lock); }