1
1

OSHMEM: misc ikrit/mxm enhancements

- fix mxm/tl selection logic
- do not require memory registration if mxm/ud was selected

fixed by Alex, reviewed by Miked

cmr=v1.7.5:reviewer=ompi-rm1.7

This commit was SVN r30802.
Этот коммит содержится в:
Mike Dubman 2014-02-24 07:06:57 +00:00
родитель e39d9f4080
Коммит 5ed50793d5
4 изменённых файлов: 77 добавлений и 4 удалений

Просмотреть файл

@ -70,4 +70,10 @@ Unable to post application send buffer
Unable while waiting in send
Error: %s
[mxm tls]
ERROR: MXM shared memory transport can not be used
bacause it is not fully compliant with OSHMEM spec
MXM transport setting: %s

Просмотреть файл

@ -76,6 +76,9 @@ static int spml_ikrit_get_ep_address(spml_ikrit_mxm_ep_conn_info_t *ep_info,
#else
static inline mxm_mem_key_t *to_mxm_mkey(mca_spml_mkey_t *mkey) {
if (0 == mkey->len) {
return &mxm_empty_mem_key;
}
return (mxm_mem_key_t *)mkey->u.data;
}
#endif
@ -559,6 +562,11 @@ mca_spml_mkey_t *mca_spml_ikrit_register(void* addr,
#if MXM_API < MXM_VERSION(2,0)
mkeys[i].len = 0;
#else
if (mca_spml_ikrit.ud_only) {
mkeys[i].len = 0;
break;
}
err = mxm_mem_map(mca_spml_ikrit.mxm_context, &addr, &size, 0, 0, 0);
if (MXM_OK != err) {
SPML_ERROR("Failed to register memory: %s", mxm_error_string(err));
@ -652,7 +660,6 @@ static inline int get_ptl_id(int dst)
int mca_spml_ikrit_oob_get_mkeys(int pe, uint32_t seg, mca_spml_mkey_t *mkeys)
{
#if MXM_API < MXM_VERSION(2,0)
int ptl;
ptl = get_ptl_id(pe);
if (ptl < 0)
@ -661,6 +668,7 @@ int mca_spml_ikrit_oob_get_mkeys(int pe, uint32_t seg, mca_spml_mkey_t *mkeys)
if (ptl != MXM_PTL_RDMA)
return OSHMEM_ERROR;
#if MXM_API < MXM_VERSION(2,0)
if (seg > 1)
return OSHMEM_ERROR;
@ -669,7 +677,12 @@ int mca_spml_ikrit_oob_get_mkeys(int pe, uint32_t seg, mca_spml_mkey_t *mkeys)
/* we are actually registering memory in 2.0 and later.
* So can not really skip mkey exchange
*/
return OSHMEM_ERROR;
if (mca_spml_ikrit.ud_only) {
mkeys[ptl].len = 0;
mkeys[ptl].u.data = &mxm_empty_mem_key;
} else {
return OSHMEM_SUCCESS;
}
#endif
}

Просмотреть файл

@ -87,6 +87,9 @@ struct mca_spml_ikrit_t {
int n_relays; /* number of procs/node serving as relays */
char *mxm_tls;
int ud_only; /* only ud transport is used. In this case
it is possible to speedup mkey exchange
and not to register memheap */
#if MXM_API >= MXM_VERSION(2,0)
int unsync_conn_max;
#endif

Просмотреть файл

@ -59,6 +59,53 @@ mca_spml_base_component_2_0_0_t mca_spml_ikrit_component = {
};
#if MXM_API >= MXM_VERSION(2,1)
static int check_mxm_tls(char *var)
{
char *str;
str = getenv(var);
if (NULL == str) {
return OSHMEM_SUCCESS;
}
if (NULL != strstr(str, "shm")) {
if (0 < asprintf(&str,
"%s=%s",
var, getenv(var)
)) {
orte_show_help("help-shmem-spml-ikrit.txt", "mxm tls", true,
str);
free(str);
}
return OSHMEM_ERROR;
}
if (NULL == strstr(str, "rc")) {
mca_spml_ikrit.ud_only = 1;
} else {
mca_spml_ikrit.ud_only = 0;
}
return OSHMEM_SUCCESS;
}
static int set_mxm_tls()
{
char *tls;
tls = getenv("MXM_OSHMEM_TLS");
if (NULL != tls) {
return check_mxm_tls("MXM_OSHMEM_TLS");
}
tls = getenv("MXM_TLS");
if (NULL == tls) {
setenv("MXM_OSHMEM_TLS", mca_spml_ikrit.mxm_tls, 1);
return OSHMEM_SUCCESS;
}
return check_mxm_tls("MXM_TLS");
}
#endif
static inline int mca_spml_ikrit_param_register_int(const char* param_name,
int default_value,
const char *help_msg)
@ -165,11 +212,14 @@ static int mca_spml_ikrit_component_open(void)
(cur_ver >> MXM_MINOR_BIT) & 0xff);
}
mca_spml_ikrit.ud_only = 0;
#if MXM_API < MXM_VERSION(2,1)
if ((MXM_OK != mxm_config_read_context_opts(&mca_spml_ikrit.mxm_ctx_opts)) ||
(MXM_OK != mxm_config_read_ep_opts(&mca_spml_ikrit.mxm_ep_opts)))
#else
setenv("MXM_OSHMEM_TLS", mca_spml_ikrit.mxm_tls, 0);
if (OSHMEM_SUCCESS != set_mxm_tls()) {
return OSHMEM_ERROR;
}
if (MXM_OK != mxm_config_read_opts(&mca_spml_ikrit.mxm_ctx_opts,
&mca_spml_ikrit.mxm_ep_opts,
"OSHMEM", NULL, 0))
@ -180,6 +230,7 @@ static int mca_spml_ikrit_component_open(void)
}
#if MXM_API < MXM_VERSION(2,0)
mca_spml_ikrit.ud_only = 1;
mca_spml_ikrit.mxm_ctx_opts->ptl_bitmap = (MXM_BIT(MXM_PTL_SELF) | MXM_BIT(MXM_PTL_RDMA));
#endif