Whamcloud - gitweb
Branch: b_new_cmd
authorwangdi <wangdi>
Fri, 20 Oct 2006 09:15:24 +0000 (09:15 +0000)
committerwangdi <wangdi>
Fri, 20 Oct 2006 09:15:24 +0000 (09:15 +0000)
add time profile for mdd api

lustre/mdd/mdd_dir.c
lustre/mdd/mdd_internal.h
lustre/mdd/mdd_lov.c
lustre/mdd/mdd_lproc.c

index e4972af..e9583a0 100644 (file)
@@ -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);
 }
 
index 80f1c65..62a81c8 100644 (file)
@@ -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
index 951308d..6c9c2bb 100644 (file)
@@ -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;
 }
 
index 36f8522..2bf5f0c 100644 (file)
@@ -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);