1
1

Merge pull request #3292 from markalle/pr/ibv_reg_mr__fork

IB fork
Этот коммит содержится в:
Howard Pritchard 2018-03-21 09:39:08 -06:00 коммит произвёл GitHub
родитель 85ce76fa36 655a06f559
Коммит ade280eb7c
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 38 добавлений и 7 удалений

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

@ -32,6 +32,9 @@
#include "opal/util/proc.h"
#include "opal/util/show_help.h"
#include "opal/util/sys_limits.h"
#include "opal/align.h"
/*
* Array of all possible connection functions
*/
@ -421,10 +424,27 @@ int opal_btl_openib_connect_base_alloc_cts(mca_btl_base_endpoint_t *endpoint)
sizeof(mca_btl_openib_footer_t) +
mca_btl_openib_component.qp_infos[mca_btl_openib_component.credits_qp].size;
int align_it = 0;
int page_size;
page_size = opal_getpagesize();
if (length >= page_size / 2) { align_it = 1; }
if (align_it) {
// I think this is only active for ~64k+ buffers anyway, but I'm not
// positive, so I'm only increasing the buffer size and alignment if
// it's not too small. That way we'd avoid wasting excessive memory
// in case this code was active for tiny buffers.
length = OPAL_ALIGN(length, page_size, int);
}
/* Explicitly don't use the mpool registration */
fli = &(endpoint->endpoint_cts_frag.super.super.base.super);
fli->registration = NULL;
fli->ptr = malloc(length);
if (!align_it) {
fli->ptr = malloc(length);
} else {
posix_memalign((void**)&(fli->ptr), page_size, length);
}
if (NULL == fli->ptr) {
BTL_ERROR(("malloc failed"));
return OPAL_ERR_OUT_OF_RESOURCE;

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

@ -75,6 +75,7 @@
#include "connect/connect.h"
#include "opal/util/sys_limits.h"
#include "opal/align.h"
#if (ENABLE_DYNAMIC_SL)
#include "connect/btl_openib_connect_sl.h"
@ -1040,7 +1041,7 @@ static void udcm_module_destroy_listen_qp (udcm_module_t *m)
static int udcm_module_allocate_buffers (udcm_module_t *m)
{
size_t total_size;
size_t total_size, page_size;
m->msg_length = sizeof (udcm_msg_hdr_t) +
mca_btl_openib_component.num_qps * sizeof (udcm_qp_t);
@ -1048,8 +1049,11 @@ static int udcm_module_allocate_buffers (udcm_module_t *m)
total_size = (udcm_recv_count + 1) * (m->msg_length +
UDCM_GRH_SIZE);
page_size = opal_getpagesize();
total_size = OPAL_ALIGN(total_size, page_size, size_t);
m->cm_buffer = NULL;
posix_memalign ((void **)&m->cm_buffer, (size_t)opal_getpagesize(),
posix_memalign ((void **)&m->cm_buffer, (size_t)page_size,
total_size);
if (NULL == m->cm_buffer) {
BTL_ERROR(("malloc failed! errno = %d", errno));

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

@ -235,13 +235,20 @@ out:
int opal_getpagesize(void)
{
static int page_size = -1;
if (page_size != -1) {
// testing in a loop showed sysconf() took ~5 usec vs ~0.3 usec with it cached
return page_size;
}
#ifdef HAVE_GETPAGESIZE
return getpagesize();
return page_size = getpagesize();
#elif defined(_SC_PAGESIZE )
return sysconf(_SC_PAGESIZE);
return page_size = sysconf(_SC_PAGESIZE);
#elif defined(_SC_PAGE_SIZE)
return sysconf(_SC_PAGE_SIZE);
return page_size = sysconf(_SC_PAGE_SIZE);
#else
return 65536; /* safer to overestimate than under */
return page_size = 65536; /* safer to overestimate than under */
#endif
}