Skip to content

Commit

Permalink
DAOS-16591 mgmt, vos, common: Align scm/meta size
Browse files Browse the repository at this point in the history
The scm and meta sizes for vos are now aligned-up to 16M for pools
using phase 2 allocator.

Signed-off-by: Sherin T George <sherin-t.george@hpe.com>
  • Loading branch information
sherintg committed Sep 18, 2024
1 parent be4ad88 commit 08e761b
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 3 deletions.
6 changes: 6 additions & 0 deletions src/common/dav_v2/dav_iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,3 +470,9 @@ dav_class_register_v2(dav_obj_t *pop, struct dav_alloc_class_desc *p)

return 0;
}

DAV_FUNC_EXPORT size_t
dav_obj_pgsz_v2()
{
return ZONE_MAX_SIZE;
}
6 changes: 6 additions & 0 deletions src/common/dav_v2/dav_v2.h
Original file line number Diff line number Diff line change
Expand Up @@ -313,4 +313,10 @@ dav_get_heap_mb_stats_v2(dav_obj_t *pop, uint32_t mb_id, struct dav_heap_mb_stat
uint32_t
dav_allot_mb_evictable_v2(dav_obj_t *pop, int flags);

/*
* Return the page size for dav_v2.
*/
size_t
dav_obj_pgsz_v2();

#endif /* __DAOS_COMMON_DAV_V2_H */
15 changes: 13 additions & 2 deletions src/common/mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,14 @@ umempobj_settings_init(bool md_on_ssd)
return 0;
}

int umempobj_get_backend_type(void)
int
umempobj_get_backend_type(void)
{
return daos_md_backend;
}

int umempobj_backend_type2class_id(int backend)
int
umempobj_backend_type2class_id(int backend)
{
switch (backend) {
case DAOS_MD_PMEM:
Expand All @@ -108,6 +110,15 @@ int umempobj_backend_type2class_id(int backend)
}
}

size_t
umempobj_pgsz(int backend)
{
if (backend == DAOS_MD_BMEM_V2)
return dav_obj_pgsz_v2();
else
return (1UL << 12);
}

/** Define common slabs. We can refine this for 2.4 pools but that is for next patch */
static const int slab_map[] = {
0, /* 32 bytes */
Expand Down
4 changes: 4 additions & 0 deletions src/include/daos/mem.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ int umempobj_settings_init(bool md_on_ssd);
/* convert backend type to umem class id */
int umempobj_backend_type2class_id(int backend);

/* get page size for the backend */
size_t
umempobj_pgsz(int backend);

/* umem persistent object property flags */
#define UMEMPOBJ_ENABLE_STATS 0x1

Expand Down
10 changes: 10 additions & 0 deletions src/include/daos_srv/vos.h
Original file line number Diff line number Diff line change
Expand Up @@ -519,6 +519,16 @@ int
vos_aggregate(daos_handle_t coh, daos_epoch_range_t *epr,
int (*yield_func)(void *arg), void *yield_arg, uint32_t flags);

/**
* Round up the scm and meta sizes to match the backend requirement.
* \param[in/out] scm_sz SCM size that needs to be aligned up
* \param[in/out] meta_sz META size that needs to be aligned up
*
* \return 0 on success, error otherwise.
*/
int
vos_pool_roundup_size(size_t *scm_sz, size_t *meta_sz);

/**
* Discards changes in all epochs with the epoch range \a epr
*
Expand Down
2 changes: 1 addition & 1 deletion src/mgmt/srv_drpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,7 @@ ds_mgmt_drpc_pool_create(Drpc__Call *drpc_req, Drpc__Response *drpc_resp)

scm_size = req->tier_bytes[DAOS_MEDIA_SCM];
if (req->mem_ratio)
scm_size *= req->mem_ratio;
scm_size *= (double)req->mem_ratio;

rc = ds_mgmt_create_pool(pool_uuid, req->sys, "pmem", targets, scm_size,
req->tier_bytes[DAOS_MEDIA_NVME], prop, &svc, req->n_fault_domains,
Expand Down
8 changes: 8 additions & 0 deletions src/mgmt/srv_target.c
Original file line number Diff line number Diff line change
Expand Up @@ -1083,6 +1083,8 @@ ds_mgmt_hdlr_tgt_create(crt_rpc_t *tc_req)
pthread_t thread;
bool canceled_thread = false;
int rc = 0;
size_t tgt_scm_sz;
size_t tgt_meta_sz;

/** incoming request buffer */
tc_in = crt_req_get(tc_req);
Expand Down Expand Up @@ -1119,6 +1121,12 @@ ds_mgmt_hdlr_tgt_create(crt_rpc_t *tc_req)
D_DEBUG(DB_MGMT, DF_UUID": record inserted to dpt_creates_ht\n",
DP_UUID(tca.tca_ptrec->dptr_uuid));

tgt_scm_sz = tc_in->tc_scm_size / dss_tgt_nr;
tgt_meta_sz = tc_in->tc_meta_size / dss_tgt_nr;
vos_pool_roundup_size(&tgt_scm_sz, &tgt_meta_sz);
tc_in->tc_scm_size = tgt_scm_sz * dss_tgt_nr;
tc_in->tc_meta_size = tgt_meta_sz * dss_tgt_nr;

tca.tca_scm_size = tc_in->tc_scm_size;
tca.tca_nvme_size = tc_in->tc_nvme_size;
tca.tca_dx = dss_current_xstream();
Expand Down
20 changes: 20 additions & 0 deletions src/vos/vos_pool.c
Original file line number Diff line number Diff line change
Expand Up @@ -1272,6 +1272,26 @@ vos_pool_create_ex(const char *path, uuid_t uuid, daos_size_t scm_sz, daos_size_
return rc;
}

int
vos_pool_roundup_size(daos_size_t *scm_sz, daos_size_t *meta_sz)
{
int backend;
size_t alignsz;

backend = umempobj_get_backend_type();
if ((*scm_sz != *meta_sz) && (backend == DAOS_MD_BMEM))
backend = DAOS_MD_BMEM_V2;

/* Round up the size such that it is compatible with backend */
alignsz = umempobj_pgsz(backend);

*scm_sz = D_ALIGNUP(*scm_sz, alignsz);
if (*meta_sz)
*meta_sz = D_ALIGNUP(*meta_sz, alignsz);

return 0;
}

int
vos_pool_create(const char *path, uuid_t uuid, daos_size_t scm_sz, daos_size_t data_sz,
daos_size_t meta_sz, unsigned int flags, uint32_t version, daos_handle_t *poh)
Expand Down

0 comments on commit 08e761b

Please sign in to comment.