static ucs_status_t uct_iface_mp_chunk_alloc(ucs_mpool_t *mp, size_t *size_p, void **chunk_p) { uct_base_iface_t *iface = uct_iface_mp_priv(mp)->iface; uct_iface_mp_chunk_hdr_t *hdr; uct_allocated_memory_t mem; ucs_status_t status; size_t length; length = sizeof(*hdr) + *size_p; status = uct_iface_mem_alloc(&iface->super, length, ucs_mpool_name(mp), &mem); if (status != UCS_OK) { return status; } ucs_assert(mem.memh != UCT_INVALID_MEM_HANDLE); ucs_assert(mem.md == iface->md); hdr = mem.address; hdr->method = mem.method; hdr->length = mem.length; hdr->memh = mem.memh; *size_p = mem.length - sizeof(*hdr); *chunk_p = hdr + 1; return UCS_OK; }
static ucs_status_t uct_perf_test_alloc_mem(ucx_perf_context_t *perf, ucx_perf_params_t *params) { ucs_status_t status; /* TODO use params->alignment */ status = uct_iface_mem_alloc(perf->uct.iface, params->message_size * params->thread_count, 0, "perftest", &perf->uct.send_mem); if (status != UCS_OK) { ucs_error("Failed allocate send buffer: %s", ucs_status_string(status)); goto err; } ucs_assert(perf->uct.send_mem.md == perf->uct.md); perf->send_buffer = perf->uct.send_mem.address; status = uct_iface_mem_alloc(perf->uct.iface, params->message_size * params->thread_count, 0, "perftest", &perf->uct.recv_mem); if (status != UCS_OK) { ucs_error("Failed allocate receive buffer: %s", ucs_status_string(status)); goto err_free_send; } ucs_assert(perf->uct.recv_mem.md == perf->uct.md); perf->recv_buffer = perf->uct.recv_mem.address; perf->offset = 0; ucs_debug("allocated memory. Send buffer %p, Recv buffer %p", perf->send_buffer, perf->recv_buffer); return UCS_OK; err_free_send: uct_iface_mem_free(&perf->uct.send_mem); err: return status; }
static ucs_status_t uct_perf_test_alloc_mem(ucx_perf_context_t *perf, ucx_perf_params_t *params) { ucs_status_t status; unsigned flags; size_t buffer_size; if ((UCT_PERF_DATA_LAYOUT_ZCOPY == params->uct.data_layout) && params->iov_stride) { buffer_size = params->msg_size_cnt * params->iov_stride; } else { buffer_size = ucx_perf_get_message_size(params); } /* TODO use params->alignment */ flags = (params->flags & UCX_PERF_TEST_FLAG_MAP_NONBLOCK) ? UCT_MD_MEM_FLAG_NONBLOCK : 0; flags |= UCT_MD_MEM_ACCESS_ALL; /* Allocate send buffer memory */ status = uct_iface_mem_alloc(perf->uct.iface, buffer_size * params->thread_count, flags, "perftest", &perf->uct.send_mem); if (status != UCS_OK) { ucs_error("Failed allocate send buffer: %s", ucs_status_string(status)); goto err; } ucs_assert(perf->uct.send_mem.md == perf->uct.md); perf->send_buffer = perf->uct.send_mem.address; /* Allocate receive buffer memory */ status = uct_iface_mem_alloc(perf->uct.iface, buffer_size * params->thread_count, flags, "perftest", &perf->uct.recv_mem); if (status != UCS_OK) { ucs_error("Failed allocate receive buffer: %s", ucs_status_string(status)); goto err_free_send; } ucs_assert(perf->uct.recv_mem.md == perf->uct.md); perf->recv_buffer = perf->uct.recv_mem.address; /* Allocate IOV datatype memory */ perf->params.msg_size_cnt = params->msg_size_cnt; perf->uct.iov = malloc(sizeof(*perf->uct.iov) * perf->params.msg_size_cnt * params->thread_count); if (NULL == perf->uct.iov) { status = UCS_ERR_NO_MEMORY; ucs_error("Failed allocate send IOV(%lu) buffer: %s", perf->params.msg_size_cnt, ucs_status_string(status)); goto err_free_send; } perf->offset = 0; ucs_debug("allocated memory. Send buffer %p, Recv buffer %p", perf->send_buffer, perf->recv_buffer); return UCS_OK; err_free_send: uct_iface_mem_free(&perf->uct.send_mem); err: return status; }
static inline uct_iface_mp_priv_t* uct_iface_mp_priv(ucs_mpool_t *mp) { return (uct_iface_mp_priv_t*)ucs_mpool_priv(mp); } UCS_PROFILE_FUNC(ucs_status_t, uct_iface_mp_chunk_alloc, (mp, size_p, chunk_p), ucs_mpool_t *mp, size_t *size_p, void **chunk_p) { uct_base_iface_t *iface = uct_iface_mp_priv(mp)->iface; uct_iface_mp_chunk_hdr_t *hdr; uct_allocated_memory_t mem; ucs_status_t status; size_t length; length = sizeof(*hdr) + *size_p; status = uct_iface_mem_alloc(&iface->super, length, 0, ucs_mpool_name(mp), &mem); if (status != UCS_OK) { return status; } ucs_assert(mem.memh != UCT_MEM_HANDLE_NULL); ucs_assert(mem.md == iface->md); hdr = mem.address; hdr->method = mem.method; hdr->length = mem.length; hdr->memh = mem.memh; *size_p = mem.length - sizeof(*hdr); *chunk_p = hdr + 1; return UCS_OK; }
{ return (uct_iface_mp_priv_t*)ucs_mpool_priv(mp); } UCS_PROFILE_FUNC(ucs_status_t, uct_iface_mp_chunk_alloc, (mp, size_p, chunk_p), ucs_mpool_t *mp, size_t *size_p, void **chunk_p) { uct_base_iface_t *iface = uct_iface_mp_priv(mp)->iface; uct_iface_mp_chunk_hdr_t *hdr; uct_allocated_memory_t mem; ucs_status_t status; size_t length; length = sizeof(*hdr) + *size_p; status = uct_iface_mem_alloc(&iface->super, length, UCT_MD_MEM_ACCESS_ALL | UCT_MD_MEM_FLAG_LOCK, ucs_mpool_name(mp), &mem); if (status != UCS_OK) { return status; } ucs_assert(mem.memh != UCT_MEM_HANDLE_NULL); ucs_assert(mem.md == iface->md); hdr = mem.address; hdr->method = mem.method; hdr->length = mem.length; hdr->memh = mem.memh; *size_p = mem.length - sizeof(*hdr); *chunk_p = hdr + 1; return UCS_OK;
uct_pd_mem_dereg(mem->pd, mem->memh); } uct_mem_free(mem); } ucs_status_t uct_iface_mp_chunk_alloc(void *mp_context, size_t *size, void **chunk_p UCS_MEMTRACK_ARG) { uct_base_iface_t *iface = mp_context; uct_iface_mp_chunk_hdr_t *hdr; uct_allocated_memory_t mem; ucs_status_t status; size_t length; length = sizeof(*hdr) + *size; status = uct_iface_mem_alloc(&iface->super, length, UCS_MEMTRACK_VAL_ALWAYS, &mem); if (status != UCS_OK) { return status; } ucs_assert(mem.memh != UCT_INVALID_MEM_HANDLE); ucs_assert(mem.pd == iface->pd); hdr = mem.address; hdr->method = mem.method; hdr->length = mem.length; hdr->memh = mem.memh; *size = mem.length - sizeof(*hdr); *chunk_p = hdr + 1; return UCS_OK; }