From aa71572b849b33444fdbd88e814803c54f0f5681 Mon Sep 17 00:00:00 2001 From: wangdi Date: Fri, 20 Oct 2006 09:15:24 +0000 Subject: [PATCH] Branch: b_new_cmd add time profile for mdd api --- lustre/mdd/mdd_dir.c | 21 ++++++++++++++++----- lustre/mdd/mdd_internal.h | 8 ++++++++ lustre/mdd/mdd_lov.c | 32 ++++++++++++++++++++++++-------- lustre/mdd/mdd_lproc.c | 17 ++++++++++++++++- 4 files changed, 64 insertions(+), 14 deletions(-) diff --git a/lustre/mdd/mdd_dir.c b/lustre/mdd/mdd_dir.c index e4972af..e9583a0 100644 --- a/lustre/mdd/mdd_dir.c +++ b/lustre/mdd/mdd_dir.c @@ -298,10 +298,13 @@ static int __mdd_index_insert(const struct lu_env *env, const char *name, int isdir, struct thandle *th, struct lustre_capa *capa) { - int rc; struct dt_object *next = mdd_object_child(pobj); + struct timeval start; + int rc; ENTRY; - + + mdd_lproc_time_start(mdo2mdd(&pobj->mod_obj), &start, + LPROC_MDD_INDEX_INSERT); #if 0 struct lu_attr *la = &mdd_env_info(env)->mti_la; #endif @@ -324,6 +327,8 @@ static int __mdd_index_insert(const struct lu_env *env, rc = mdd_attr_set_internal(env, mdd_obj, la, handle, 0); #endif } + mdd_lproc_time_end(mdo2mdd(&pobj->mod_obj), &start, + LPROC_MDD_INDEX_INSERT); return rc; } @@ -332,10 +337,13 @@ static int __mdd_index_delete(const struct lu_env *env, int is_dir, struct thandle *handle, struct lustre_capa *capa) { - int rc; struct dt_object *next = mdd_object_child(pobj); + struct timeval start; + int rc; ENTRY; + mdd_lproc_time_start(mdo2mdd(&pobj->mod_obj), &start, + LPROC_MDD_INDEX_DELETE); if (dt_try_as_dir(env, next)) { rc = next->do_index_ops->dio_delete(env, next, (struct dt_key *)name, @@ -344,10 +352,11 @@ static int __mdd_index_delete(const struct lu_env *env, mdd_ref_del_internal(env, pobj, handle); } else rc = -ENOTDIR; + mdd_lproc_time_end(mdo2mdd(&pobj->mod_obj), &start, + LPROC_MDD_INDEX_DELETE); RETURN(rc); } - static int __mdd_index_insert_only(const struct lu_env *env, struct mdd_object *pobj, const struct lu_fid *lf, @@ -555,7 +564,6 @@ static int mdd_unlink(const struct lu_env *env, obd_set_info_async(mdd2obd_dev(mdd)->u.mds.mds_osc_exp, strlen("unlinked"), "unlinked", 0, NULL, NULL); - cleanup: mdd_unlock2(env, mdd_pobj, mdd_cobj); mdd_trans_stop(env, mdd, rc, handle); @@ -844,9 +852,11 @@ __mdd_lookup(const struct lu_env *env, struct md_object *pobj, struct dt_object *dir = mdd_object_child(mdd_obj); struct dt_rec *rec = (struct dt_rec *)fid; const struct dt_key *key = (const struct dt_key *)name; + struct timeval start; int rc; ENTRY; + mdd_lproc_time_start(mdo2mdd(pobj), &start, LPROC_MDD_LOOKUP); if (mdd_is_dead_obj(mdd_obj)) RETURN(-ESTALE); @@ -874,6 +884,7 @@ __mdd_lookup(const struct lu_env *env, struct md_object *pobj, else rc = -ENOTDIR; + mdd_lproc_time_end(mdo2mdd(pobj), &start, LPROC_MDD_LOOKUP); RETURN(rc); } diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h index 80f1c65..62a81c8 100644 --- a/lustre/mdd/mdd_internal.h +++ b/lustre/mdd/mdd_internal.h @@ -383,6 +383,14 @@ static inline struct lustre_capa *mdd_object_capa(const struct lu_env *env, enum { LPROC_MDD_OPEN = 0, LPROC_MDD_CREATE, + LPROC_MDD_INDEX_INSERT, + LPROC_MDD_INDEX_DELETE, + LPROC_MDD_SET_MD, + LPROC_MDD_GET_MD, + LPROC_MDD_UNLINK, + LPROC_MDD_UNLINK_LOG, + LPROC_MDD_LOV_CREATE, + LPROC_MDD_LOOKUP, LPROC_MDD_LAST }; #endif diff --git a/lustre/mdd/mdd_lov.c b/lustre/mdd/mdd_lov.c index 951308d..6c9c2bb 100644 --- a/lustre/mdd/mdd_lov.c +++ b/lustre/mdd/mdd_lov.c @@ -182,10 +182,13 @@ lcfg_cleanup: int mdd_get_md(const struct lu_env *env, struct mdd_object *obj, void *md, int *md_size, const char *name) { - struct dt_object *next; + struct mdd_device *mdd = mdo2mdd(&obj->mod_obj); + struct dt_object *next; + struct timeval start; int rc; ENTRY; - + + mdd_lproc_time_start(mdd, &start, LPROC_MDD_GET_MD); next = mdd_object_child(obj); rc = next->do_ops->do_xattr_get(env, next, mdd_buf_get(env, md, *md_size), name, @@ -203,7 +206,8 @@ int mdd_get_md(const struct lu_env *env, struct mdd_object *obj, /* FIXME convert lov EA but fixed after verification test */ *md_size = rc; } - + + mdd_lproc_time_end(mdd, &start, LPROC_MDD_GET_MD); RETURN (rc); } @@ -275,11 +279,14 @@ int mdd_lov_set_md(const struct lu_env *env, struct mdd_object *pobj, struct mdd_object *child, struct lov_mds_md *lmmp, int lmm_size, struct thandle *handle, int set_stripe) { - int rc = 0; - umode_t mode; + struct mdd_device *mdd = mdo2mdd(&child->mod_obj); + struct timeval start; struct lu_buf *buf; + umode_t mode; + int rc = 0; ENTRY; - + + mdd_lproc_time_start(mdd, &start, LPROC_MDD_SET_MD); buf = mdd_buf_get(env, lmmp, lmm_size); mode = mdd_object_type(child); if (S_ISREG(mode) && lmm_size > 0) { @@ -313,6 +320,7 @@ int mdd_lov_set_md(const struct lu_env *env, struct mdd_object *pobj, } CDEBUG(D_INFO, "Set lov md %p size %d for fid "DFID" rc %d\n", lmmp, lmm_size, PFID(mdo2fid(child)), rc); + mdd_lproc_time_end(mdd, &start, LPROC_MDD_SET_MD); RETURN(rc); } @@ -387,14 +395,17 @@ int mdd_lov_create(const struct lu_env *env, struct mdd_device *mdd, struct lov_stripe_md *lsm = NULL; const void *eadata = spec->u.sp_ea.eadata; __u32 create_flags = spec->sp_cr_flags; - int rc = 0; struct obd_trans_info *oti = &mdd_env_info(env)->mti_oti; struct dt_object *next; + struct timeval start; + int rc = 0; ENTRY; if (create_flags & MDS_OPEN_DELAY_CREATE || !(create_flags & FMODE_WRITE)) RETURN(0); + + mdd_lproc_time_start(mdd, &start, LPROC_MDD_LOV_CREATE); oti_init(oti, NULL); rc = mdd_lov_objid_alloc(env, mdd); @@ -543,6 +554,8 @@ out_ids: obd_free_memmd(lov_exp, &lsm); if (rc != 0) mdd_lov_objid_free(env, mdd); + + mdd_lproc_time_end(mdd, &start, LPROC_MDD_LOV_CREATE); return rc; } @@ -550,7 +563,9 @@ int mdd_unlink_log(const struct lu_env *env, struct mdd_device *mdd, struct mdd_object *mdd_cobj, struct md_attr *ma) { struct obd_device *obd = mdd2obd_dev(mdd); - + struct timeval start; + + mdd_lproc_time_start(mdd, &start, LPROC_MDD_UNLINK_LOG); LASSERT(ma->ma_valid & MA_LOV); if ((ma->ma_cookie_size > 0) && @@ -558,6 +573,7 @@ int mdd_unlink_log(const struct lu_env *env, struct mdd_device *mdd, ma->ma_cookie, ma->ma_cookie_size) > 0)) { ma->ma_valid |= MA_COOKIE; } + mdd_lproc_time_end(mdd, &start, LPROC_MDD_UNLINK_LOG); return 0; } diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c index 36f8522..2bf5f0c 100644 --- a/lustre/mdd/mdd_lproc.c +++ b/lustre/mdd/mdd_lproc.c @@ -59,9 +59,24 @@ static int mdd_procfs_init_stats(struct mdd_device *mdd, int num_stats) lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_OPEN, LPROCFS_CNTR_AVGMINMAX, "open", "time"); - lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_CREATE, LPROCFS_CNTR_AVGMINMAX, "create", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_INDEX_INSERT, + LPROCFS_CNTR_AVGMINMAX, "index_insert", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_INDEX_DELETE, + LPROCFS_CNTR_AVGMINMAX, "index_delete", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_UNLINK, + LPROCFS_CNTR_AVGMINMAX, "unlink", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_UNLINK_LOG, + LPROCFS_CNTR_AVGMINMAX, "unlink_log", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_LOV_CREATE, + LPROCFS_CNTR_AVGMINMAX, "lov_create", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_SET_MD, + LPROCFS_CNTR_AVGMINMAX, "set_md", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_GET_MD, + LPROCFS_CNTR_AVGMINMAX, "get_md", "time"); + lprocfs_counter_init(mdd->mdd_stats, LPROC_MDD_LOOKUP, + LPROCFS_CNTR_AVGMINMAX, "lookup", "lookup"); cleanup: if (rc) { lprocfs_free_stats(stats); -- 1.8.3.1