Skip to content

Commit bac1f16

Browse files
committed
oshmem: sshmem: adds UCX allocator
Also some code cleanup
1 parent 6d59b47 commit bac1f16

File tree

8 files changed

+90
-267
lines changed

8 files changed

+90
-267
lines changed

oshmem/mca/spml/ucx/spml_ucx.c

+32-20
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,8 @@ sshmem_mkey_t *mca_spml_ucx_register(void* addr,
396396
size_t len;
397397
int my_pe = oshmem_my_proc_id();
398398
ucp_mem_map_params_t mem_map_params;
399-
int seg;
399+
int segno;
400+
map_segment_t *mem_seg;
400401
unsigned flags;
401402

402403
*count = 0;
@@ -405,26 +406,32 @@ sshmem_mkey_t *mca_spml_ucx_register(void* addr,
405406
return NULL;
406407
}
407408

408-
seg = memheap_find_segnum(addr);
409+
segno = memheap_find_segnum(addr);
410+
mem_seg = memheap_find_seg(segno);
409411

410-
ucx_mkey = &mca_spml_ucx.ucp_peers[my_pe].mkeys[seg].key;
412+
ucx_mkey = &mca_spml_ucx.ucp_peers[my_pe].mkeys[segno].key;
411413
mkeys[0].spml_context = ucx_mkey;
412414

413-
flags = 0;
414-
if (mca_spml_ucx.heap_reg_nb && memheap_is_va_in_segment(addr, HEAP_SEG_INDEX)) {
415-
flags = UCP_MEM_MAP_NONBLOCK;
416-
}
415+
/* if possible use mem handle already created by ucx allocator */
416+
if (MAP_SEGMENT_ALLOC_UCX != mem_seg->type) {
417+
flags = 0;
418+
if (mca_spml_ucx.heap_reg_nb && memheap_is_va_in_segment(addr, HEAP_SEG_INDEX)) {
419+
flags = UCP_MEM_MAP_NONBLOCK;
420+
}
417421

418-
mem_map_params.field_mask = UCP_MEM_MAP_PARAM_FIELD_ADDRESS |
419-
UCP_MEM_MAP_PARAM_FIELD_LENGTH |
420-
UCP_MEM_MAP_PARAM_FIELD_FLAGS;
421-
mem_map_params.address = addr;
422-
mem_map_params.length = size;
423-
mem_map_params.flags = flags;
422+
mem_map_params.field_mask = UCP_MEM_MAP_PARAM_FIELD_ADDRESS |
423+
UCP_MEM_MAP_PARAM_FIELD_LENGTH |
424+
UCP_MEM_MAP_PARAM_FIELD_FLAGS;
425+
mem_map_params.address = addr;
426+
mem_map_params.length = size;
427+
mem_map_params.flags = flags;
424428

425-
err = ucp_mem_map(mca_spml_ucx.ucp_context, &mem_map_params, &ucx_mkey->mem_h);
426-
if (UCS_OK != err) {
427-
goto error_out;
429+
err = ucp_mem_map(mca_spml_ucx.ucp_context, &mem_map_params, &ucx_mkey->mem_h);
430+
if (UCS_OK != err) {
431+
goto error_out;
432+
}
433+
} else {
434+
ucx_mkey->mem_h = (ucp_mem_h)mem_seg->context;
428435
}
429436

430437
err = ucp_rkey_pack(mca_spml_ucx.ucp_context, ucx_mkey->mem_h,
@@ -448,9 +455,9 @@ sshmem_mkey_t *mca_spml_ucx_register(void* addr,
448455
}
449456

450457
mkeys[0].len = len;
451-
mkeys[0].va_base = mem_map_params.address;
458+
mkeys[0].va_base = addr;
452459
*count = 1;
453-
mca_spml_ucx_cache_mkey(&mkeys[0], seg, my_pe);
460+
mca_spml_ucx_cache_mkey(&mkeys[0], segno, my_pe);
454461
return mkeys;
455462

456463
error_unmap:
@@ -464,6 +471,7 @@ sshmem_mkey_t *mca_spml_ucx_register(void* addr,
464471
int mca_spml_ucx_deregister(sshmem_mkey_t *mkeys)
465472
{
466473
spml_ucx_mkey_t *ucx_mkey;
474+
map_segment_t *mem_seg;
467475

468476
MCA_SPML_CALL(fence());
469477
if (!mkeys)
@@ -472,8 +480,12 @@ int mca_spml_ucx_deregister(sshmem_mkey_t *mkeys)
472480
if (!mkeys[0].spml_context)
473481
return OSHMEM_SUCCESS;
474482

475-
ucx_mkey = (spml_ucx_mkey_t *)mkeys[0].spml_context;
476-
ucp_mem_unmap(mca_spml_ucx.ucp_context, ucx_mkey->mem_h);
483+
mem_seg = memheap_find_va(mkeys[0].va_base);
484+
485+
if (MAP_SEGMENT_ALLOC_UCX != mem_seg->type) {
486+
ucx_mkey = (spml_ucx_mkey_t *)mkeys[0].spml_context;
487+
ucp_mem_unmap(mca_spml_ucx.ucp_context, ucx_mkey->mem_h);
488+
}
477489

478490
if (0 < mkeys[0].len) {
479491
ucp_rkey_buffer_release(mkeys[0].u.data);

oshmem/mca/sshmem/base/base.h

+3-18
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ mca_sshmem_segment_create(map_segment_t *ds_buf,
3333
const char *file_name,
3434
size_t size);
3535

36-
OSHMEM_DECLSPEC int
37-
mca_sshmem_ds_copy(const map_segment_t *from,
38-
map_segment_t *to);
39-
4036
OSHMEM_DECLSPEC void *
4137
mca_sshmem_segment_attach(map_segment_t *ds_buf, sshmem_mkey_t *mkey);
4238

@@ -148,23 +144,12 @@ OSHMEM_DECLSPEC extern mca_base_framework_t oshmem_sshmem_base_framework;
148144
"Warning %s:%d - %s()", __SSHMEM_FILE__, __LINE__, __func__, __VA_ARGS__)
149145

150146

147+
OSHMEM_DECLSPEC extern void shmem_ds_reset(map_segment_t *ds_buf);
148+
151149
/*
152150
* Get unique file name
153151
*/
154-
static inline char * oshmem_get_unique_file_name(uint64_t pe)
155-
{
156-
char *file_name = NULL;
157-
158-
assert(mca_sshmem_base_backing_file_dir);
159-
160-
if (NULL == (file_name = calloc(OPAL_PATH_MAX, sizeof(char)))) {
161-
return NULL;
162-
}
163-
164-
snprintf(file_name, OPAL_PATH_MAX, "%s/shmem_job_%u_pe_%llu", mca_sshmem_base_backing_file_dir, ORTE_PROC_MY_NAME->jobid, (unsigned long long)pe);
165-
166-
return file_name;
167-
}
152+
OSHMEM_DECLSPEC extern char * oshmem_get_unique_file_name(uint64_t pe);
168153

169154
END_C_DECLS
170155

oshmem/mca/sshmem/base/sshmem_base_wrappers.c

+28-16
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "oshmem/mca/sshmem/sshmem.h"
1616
#include "oshmem/mca/sshmem/base/base.h"
1717

18-
/* ////////////////////////////////////////////////////////////////////////// */
1918
int
2019
mca_sshmem_segment_create(map_segment_t *ds_buf,
2120
const char *file_name,
@@ -28,19 +27,6 @@ mca_sshmem_segment_create(map_segment_t *ds_buf,
2827
return mca_sshmem_base_module->segment_create(ds_buf, file_name, size);
2928
}
3029

31-
/* ////////////////////////////////////////////////////////////////////////// */
32-
int
33-
mca_sshmem_ds_copy(const map_segment_t *from,
34-
map_segment_t *to)
35-
{
36-
if (!mca_sshmem_base_selected) {
37-
return OSHMEM_ERROR;
38-
}
39-
40-
return mca_sshmem_base_module->ds_copy(from, to);
41-
}
42-
43-
/* ////////////////////////////////////////////////////////////////////////// */
4430
void *
4531
mca_sshmem_segment_attach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
4632
{
@@ -51,7 +37,6 @@ mca_sshmem_segment_attach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
5137
return mca_sshmem_base_module->segment_attach(ds_buf, mkey);
5238
}
5339

54-
/* ////////////////////////////////////////////////////////////////////////// */
5540
int
5641
mca_sshmem_segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
5742
{
@@ -62,7 +47,6 @@ mca_sshmem_segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
6247
return mca_sshmem_base_module->segment_detach(ds_buf, mkey);
6348
}
6449

65-
/* ////////////////////////////////////////////////////////////////////////// */
6650
int
6751
mca_sshmem_unlink(map_segment_t *ds_buf)
6852
{
@@ -73,3 +57,31 @@ mca_sshmem_unlink(map_segment_t *ds_buf)
7357
return mca_sshmem_base_module->unlink(ds_buf);
7458
}
7559

60+
61+
char * oshmem_get_unique_file_name(uint64_t pe)
62+
{
63+
char *file_name = NULL;
64+
65+
assert(mca_sshmem_base_backing_file_dir);
66+
67+
if (NULL == (file_name = calloc(OPAL_PATH_MAX, sizeof(char)))) {
68+
return NULL;
69+
}
70+
71+
snprintf(file_name, OPAL_PATH_MAX, "%s/shmem_job_%u_pe_%llu", mca_sshmem_base_backing_file_dir, ORTE_PROC_MY_NAME->jobid, (unsigned long long)pe);
72+
73+
return file_name;
74+
}
75+
76+
77+
void
78+
shmem_ds_reset(map_segment_t *ds_buf)
79+
{
80+
MAP_SEGMENT_RESET_FLAGS(ds_buf);
81+
ds_buf->seg_id = MAP_SEGMENT_SHM_INVALID;
82+
ds_buf->super.va_base = 0;
83+
ds_buf->super.va_end = 0;
84+
ds_buf->seg_size = 0;
85+
ds_buf->type = MAP_SEGMENT_UNKNOWN;
86+
}
87+

oshmem/mca/sshmem/mmap/sshmem_mmap_module.c

+8-67
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,6 @@ segment_create(map_segment_t *ds_buf,
6464
const char *file_name,
6565
size_t size);
6666

67-
static int
68-
ds_copy(const map_segment_t *from,
69-
map_segment_t *to);
70-
7167
static void *
7268
segment_attach(map_segment_t *ds_buf, sshmem_mkey_t *mkey);
7369

@@ -88,44 +84,13 @@ mca_sshmem_mmap_module_t mca_sshmem_mmap_module = {
8884
{
8985
module_init,
9086
segment_create,
91-
ds_copy,
9287
segment_attach,
9388
segment_detach,
9489
segment_unlink,
9590
module_finalize
9691
}
9792
};
9893

99-
/* ////////////////////////////////////////////////////////////////////////// */
100-
/* private utility functions */
101-
/* ////////////////////////////////////////////////////////////////////////// */
102-
103-
/* ////////////////////////////////////////////////////////////////////////// */
104-
/**
105-
* completely resets the contents of *ds_buf
106-
*/
107-
static inline void
108-
shmem_ds_reset(map_segment_t *ds_buf)
109-
{
110-
OPAL_OUTPUT_VERBOSE(
111-
(70, oshmem_sshmem_base_framework.framework_output,
112-
"%s: %s: shmem_ds_resetting "
113-
"(id: %d, size: %lu, name: %s)\n",
114-
mca_sshmem_mmap_component.super.base_version.mca_type_name,
115-
mca_sshmem_mmap_component.super.base_version.mca_component_name,
116-
ds_buf->seg_id, (unsigned long)ds_buf->seg_size, ds_buf->seg_name)
117-
);
118-
119-
MAP_SEGMENT_RESET_FLAGS(ds_buf);
120-
ds_buf->seg_id = MAP_SEGMENT_SHM_INVALID;
121-
ds_buf->super.va_base = 0;
122-
ds_buf->super.va_end = 0;
123-
ds_buf->seg_size = 0;
124-
ds_buf->type = MAP_SEGMENT_UNKNOWN;
125-
unlink(ds_buf->seg_name);
126-
memset(ds_buf->seg_name, '\0', sizeof(ds_buf->seg_name));
127-
}
128-
12994
/* ////////////////////////////////////////////////////////////////////////// */
13095
static int
13196
module_init(void)
@@ -142,30 +107,6 @@ module_finalize(void)
142107
return OSHMEM_SUCCESS;
143108
}
144109

145-
/* ////////////////////////////////////////////////////////////////////////// */
146-
static int
147-
ds_copy(const map_segment_t *from,
148-
map_segment_t *to)
149-
{
150-
memcpy(to, from, sizeof(map_segment_t));
151-
152-
OPAL_OUTPUT_VERBOSE(
153-
(70, oshmem_sshmem_base_framework.framework_output,
154-
"%s: %s: ds_copy complete "
155-
"from: (id: %d, size: %lu, "
156-
"name: %s flags: 0x%02x) "
157-
"to: (id: %d, size: %lu, "
158-
"name: %s flags: 0x%02x)\n",
159-
mca_sshmem_mmap_component.super.base_version.mca_type_name,
160-
mca_sshmem_mmap_component.super.base_version.mca_component_name,
161-
from->seg_id, (unsigned long)from->seg_size, from->seg_name,
162-
from->flags, to->seg_id, (unsigned long)to->seg_size, to->seg_name,
163-
to->flags)
164-
);
165-
166-
return OSHMEM_SUCCESS;
167-
}
168-
/* ////////////////////////////////////////////////////////////////////////// */
169110

170111
static int
171112
segment_create(map_segment_t *ds_buf,
@@ -225,11 +166,11 @@ segment_create(map_segment_t *ds_buf,
225166
OPAL_OUTPUT_VERBOSE(
226167
(70, oshmem_sshmem_base_framework.framework_output,
227168
"%s: %s: create %s "
228-
"(id: %d, addr: %p size: %lu, name: %s)\n",
169+
"(id: %d, addr: %p size: %lu)\n",
229170
mca_sshmem_mmap_component.super.base_version.mca_type_name,
230171
mca_sshmem_mmap_component.super.base_version.mca_component_name,
231172
(rc ? "failure" : "successful"),
232-
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size, ds_buf->seg_name)
173+
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size)
233174
);
234175

235176
return rc;
@@ -316,10 +257,10 @@ segment_attach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
316257
OPAL_OUTPUT_VERBOSE(
317258
(70, oshmem_sshmem_base_framework.framework_output,
318259
"%s: %s: attach successful "
319-
"(id: %d, addr: %p size: %lu, name: %s | va_base: 0x%p len: %d key %llx)\n",
260+
"(id: %d, addr: %p size: %lu | va_base: 0x%p len: %d key %llx)\n",
320261
mca_sshmem_mmap_component.super.base_version.mca_type_name,
321262
mca_sshmem_mmap_component.super.base_version.mca_component_name,
322-
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size, ds_buf->seg_name,
263+
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size,
323264
mkey->va_base, mkey->len, (unsigned long long)mkey->u.key)
324265
);
325266

@@ -338,10 +279,10 @@ segment_detach(map_segment_t *ds_buf, sshmem_mkey_t *mkey)
338279
OPAL_OUTPUT_VERBOSE(
339280
(70, oshmem_sshmem_base_framework.framework_output,
340281
"%s: %s: detaching "
341-
"(id: %d, addr: %p size: %lu, name: %s)\n",
282+
"(id: %d, addr: %p size: %lu)\n",
342283
mca_sshmem_mmap_component.super.base_version.mca_type_name,
343284
mca_sshmem_mmap_component.super.base_version.mca_component_name,
344-
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size, ds_buf->seg_name)
285+
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size)
345286
);
346287

347288
munmap((void *)ds_buf->super.va_base, ds_buf->seg_size);
@@ -363,10 +304,10 @@ segment_unlink(map_segment_t *ds_buf)
363304
OPAL_OUTPUT_VERBOSE(
364305
(70, oshmem_sshmem_base_framework.framework_output,
365306
"%s: %s: unlinking "
366-
"(id: %d, addr: %p size: %lu, name: %s)\n",
307+
"(id: %d, addr: %p size: %lu)\n",
367308
mca_sshmem_mmap_component.super.base_version.mca_type_name,
368309
mca_sshmem_mmap_component.super.base_version.mca_component_name,
369-
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size, ds_buf->seg_name)
310+
ds_buf->seg_id, ds_buf->super.va_base, (unsigned long)ds_buf->seg_size)
370311
);
371312

372313
/* don't completely reset. in particular, only reset

oshmem/mca/sshmem/sshmem.h

-16
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
*
2222
* - module_init
2323
* - segment_create
24-
* - ds_copy
2524
* - segment_attach
2625
* - segment_detach
2726
* - unlink
@@ -74,20 +73,6 @@ typedef struct mca_sshmem_base_component_2_0_0_t mca_sshmem_base_component_t;
7473
typedef int
7574
(*mca_sshmem_base_module_init_fn_t)(void);
7675

77-
/**
78-
* copy shmem data structure information pointed to by from to the structure
79-
* pointed to by to.
80-
*
81-
* @param from source pointer (IN).
82-
*
83-
* @param to destination pointer (OUT).
84-
*
85-
* @return OSHMEM_SUCCESS on success.
86-
*/
87-
typedef int
88-
(*mca_sshmem_base_ds_copy_fn_t)(const map_segment_t *from,
89-
map_segment_t *to);
90-
9176
/**
9277
* create a new shared memory segment and initialize members in structure
9378
* pointed to by ds_buf.
@@ -153,7 +138,6 @@ typedef int (*mca_sshmem_base_module_finalize_fn_t)(void);
153138
struct mca_sshmem_base_module_2_0_0_t {
154139
mca_sshmem_base_module_init_fn_t module_init;
155140
mca_sshmem_base_module_segment_create_fn_t segment_create;
156-
mca_sshmem_base_ds_copy_fn_t ds_copy;
157141
mca_sshmem_base_module_segment_attach_fn_t segment_attach;
158142
mca_sshmem_base_module_segment_detach_fn_t segment_detach;
159143
mca_sshmem_base_module_unlink_fn_t unlink;

0 commit comments

Comments
 (0)