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
Addressed review comments.
Added a tunable to disable creating BMEM_V2 pools.

Signed-off-by: Sherin T George <sherin-t.george@hpe.com>
  • Loading branch information
sherintg committed Sep 20, 2024
1 parent 08e761b commit 35ae67a
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 32 deletions.
16 changes: 15 additions & 1 deletion src/common/mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ struct umem_tx_stage_item {

#ifdef DAOS_PMEM_BUILD

static int daos_md_backend = DAOS_MD_PMEM;
static int daos_md_backend = DAOS_MD_PMEM;
static bool daos_disable_bmem_v2 = false;
#define UMM_SLABS_CNT 16

/** Initializes global settings for the pmem objects.
Expand All @@ -51,6 +52,7 @@ umempobj_settings_init(bool md_on_ssd)
int rc;
enum pobj_arenas_assignment_type atype;
unsigned int md_mode = DAOS_MD_BMEM;
unsigned int md_disable_bmem_v2 = 0;

if (!md_on_ssd) {
daos_md_backend = DAOS_MD_PMEM;
Expand Down Expand Up @@ -81,6 +83,12 @@ umempobj_settings_init(bool md_on_ssd)
return -DER_INVAL;
};

d_getenv_uint("DAOS_MD_DISABLE_BMEM_V2", &md_disable_bmem_v2);
if (md_disable_bmem_v2 && (md_mode != DAOS_MD_BMEM))
D_INFO("Ignoring DAOS_MD_DISABLE_BMEM_V2 tunable");
else
daos_disable_bmem_v2 = md_disable_bmem_v2;

daos_md_backend = md_mode;
return 0;
}
Expand All @@ -91,6 +99,12 @@ umempobj_get_backend_type(void)
return daos_md_backend;
}

bool
umempobj_allow_md_bmem_v2()
{
return !daos_disable_bmem_v2;
}

int
umempobj_backend_type2class_id(int backend)
{
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 @@ -50,6 +50,10 @@ enum {
/* return umem backend type */
int umempobj_get_backend_type(void);

/* returns whether bmem_v2 pools are allowed */
bool
umempobj_allow_md_bmem_v2();

#endif

struct umem_wal_tx;
Expand Down
20 changes: 12 additions & 8 deletions src/mgmt/srv_target.c
Original file line number Diff line number Diff line change
Expand Up @@ -1048,15 +1048,14 @@ tgt_create_preallocate(void *arg)
* 16MB minimum per pmemobj file (SCM partition)
*/
D_ASSERT(dss_tgt_nr > 0);
D_ASSERT((tca->tca_scm_size / dss_tgt_nr) >= (1 << 24));
if (!bio_nvme_configured(SMD_DEV_TYPE_META)) {
rc = tgt_vos_preallocate_sequential(tca->tca_ptrec->dptr_uuid,
max(tca->tca_scm_size / dss_tgt_nr,
1 << 24), dss_tgt_nr);
rc = tgt_vos_preallocate_sequential(
tca->tca_ptrec->dptr_uuid, tca->tca_scm_size / dss_tgt_nr, dss_tgt_nr);
} else {
rc = tgt_vos_preallocate_parallel(tca->tca_ptrec->dptr_uuid,
max(tca->tca_scm_size / dss_tgt_nr,
1 << 24), dss_tgt_nr,
&tca->tca_ptrec->cancel_create);
rc = tgt_vos_preallocate_parallel(
tca->tca_ptrec->dptr_uuid, tca->tca_scm_size / dss_tgt_nr, dss_tgt_nr,
&tca->tca_ptrec->cancel_create);
}
if (rc)
goto out;
Expand Down Expand Up @@ -1123,7 +1122,12 @@ ds_mgmt_hdlr_tgt_create(crt_rpc_t *tc_req)

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);
rc = vos_pool_roundup_size(&tgt_scm_sz, &tgt_meta_sz);
if (rc) {
D_ERROR(DF_UUID": failed to roundup the vos size: "DF_RC"\n",
DP_UUID(tc_in->tc_pool_uuid), DP_RC(rc));
goto out_rec;
}
tc_in->tc_scm_size = tgt_scm_sz * dss_tgt_nr;
tc_in->tc_meta_size = tgt_meta_sz * dss_tgt_nr;

Expand Down
74 changes: 51 additions & 23 deletions src/vos/vos_pool.c
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,50 @@ init_umem_store(struct umem_store *store, struct bio_meta_context *mc)
store->store_type = DAOS_MD_BMEM;
}

static int
vos_pool_store_type(daos_size_t scm_sz, daos_size_t meta_sz)
{
int backend;

backend = umempobj_get_backend_type();
D_ASSERT((meta_sz != 0) && (scm_sz != 0));

if (scm_sz > meta_sz) {
D_ERROR("memsize %lu is greater than metasize %lu", scm_sz, meta_sz);
return -DER_INVAL;
}

if (scm_sz < meta_sz) {
if ((backend == DAOS_MD_BMEM) && umempobj_allow_md_bmem_v2())
backend = DAOS_MD_BMEM_V2;
else if (backend != DAOS_MD_BMEM_V2) {
D_ERROR("scm_sz %lu is less than meta_sz %lu", scm_sz, meta_sz);
return -DER_INVAL;
}
}

return backend;
}

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

D_ASSERT((*scm_sz != 0) && (*meta_sz != 0));
rc = vos_pool_store_type(*scm_sz, *meta_sz);
if (rc < 0)
return rc;

/* Round up the size such that it is compatible with backend */
alignsz = umempobj_pgsz(rc);
*scm_sz = max(D_ALIGNUP(*scm_sz, alignsz), 1 << 24);
*meta_sz = max(D_ALIGNUP(*meta_sz, alignsz), 1 << 24);

return 0;
}

static int
vos_pmemobj_create(const char *path, uuid_t pool_id, const char *layout,
size_t scm_sz, size_t nvme_sz, size_t wal_sz, size_t meta_sz,
Expand Down Expand Up @@ -794,9 +838,13 @@ vos_pmemobj_create(const char *path, uuid_t pool_id, const char *layout,
if (!meta_sz)
meta_sz = scm_sz_actual;

store.store_type = umempobj_get_backend_type();
if (store.store_type == DAOS_MD_BMEM && meta_sz > scm_sz_actual)
store.store_type = DAOS_MD_BMEM_V2;
rc = vos_pool_store_type(scm_sz_actual, meta_sz);
if (rc < 0) {
D_ERROR("Failed to determine the store type for xs:%p pool:"DF_UUID". "DF_RC,
xs_ctxt, DP_UUID(pool_id), DP_RC(rc));
return rc;
}
store.store_type = rc;

D_DEBUG(DB_MGMT, "Create BIO meta context for xs:%p pool:"DF_UUID" "
"scm_sz: %zu meta_sz: %zu, nvme_sz: %zu wal_sz:%zu backend:%d\n",
Expand Down Expand Up @@ -1272,26 +1320,6 @@ 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 35ae67a

Please sign in to comment.