Whamcloud - gitweb
LU-6322 lfsck: show start/complete time directly 48/13948/4
authorFan Yong <fan.yong@intel.com>
Tue, 3 Mar 2015 21:00:32 +0000 (05:00 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 25 Mar 2015 13:06:00 +0000 (13:06 +0000)
It is more easy for the users to use/understand when the LFSCK
was started and/or when the LFSCK completed by showing related
time directly.

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: Ibdacccf1abba6041eaddd6bb5456fb122e9ca994
Reviewed-on: http://review.whamcloud.com/13948
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Lai Siyao <lai.siyao@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/lfsck/lfsck_internal.h
lustre/lfsck/lfsck_layout.c
lustre/lfsck/lfsck_lib.c
lustre/lfsck/lfsck_namespace.c

index 6153b0c..5041e63 100644 (file)
@@ -884,7 +884,7 @@ void lfsck_instance_cleanup(const struct lu_env *env,
                            struct lfsck_instance *lfsck);
 int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
                    const char *prefix);
                            struct lfsck_instance *lfsck);
 int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
                    const char *prefix);
-int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix);
+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *name);
 int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
                   const char *prefix);
 void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
 int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
                   const char *prefix);
 void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
index 207bfcf..c94cf83 100644 (file)
@@ -4789,17 +4789,17 @@ static int lfsck_layout_dump(const struct lu_env *env,
                goto out;
 
        rc = lfsck_time_dump(m, lo->ll_time_last_complete,
                goto out;
 
        rc = lfsck_time_dump(m, lo->ll_time_last_complete,
-                            "time_since_last_completed");
+                            "last_completed");
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, lo->ll_time_latest_start,
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, lo->ll_time_latest_start,
-                            "time_since_latest_start");
+                            "latest_start");
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, lo->ll_time_last_checkpoint,
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, lo->ll_time_last_checkpoint,
-                            "time_since_last_checkpoint");
+                            "last_checkpoint");
        if (rc < 0)
                goto out;
 
        if (rc < 0)
                goto out;
 
index 02616b7..4951396 100644 (file)
@@ -1719,8 +1719,11 @@ int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
        int flag;
        int i;
        bool newline = (bits != 0 ? false : true);
        int flag;
        int i;
        bool newline = (bits != 0 ? false : true);
+       int rc;
 
 
-       seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+       rc = seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+       if (rc < 0)
+               return rc;
 
        for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
                if (flag & bits) {
 
        for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
                if (flag & bits) {
@@ -1729,25 +1732,38 @@ int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
                                if (bits == 0)
                                        newline = true;
 
                                if (bits == 0)
                                        newline = true;
 
-                               seq_printf(m, "%s%c", names[i],
-                                          newline ? '\n' : ',');
+                               rc = seq_printf(m, "%s%c", names[i],
+                                               newline ? '\n' : ',');
+                               if (rc < 0)
+                                       return rc;
                        }
                }
        }
 
        if (!newline)
                        }
                }
        }
 
        if (!newline)
-               seq_printf(m, "\n");
-       return 0;
+               rc = seq_printf(m, "\n");
+
+       return rc;
 }
 
 }
 
-int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix)
+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *name)
 {
 {
-       if (time != 0)
-               seq_printf(m, "%s: "LPU64" seconds\n", prefix,
-                         cfs_time_current_sec() - time);
-       else
-               seq_printf(m, "%s: N/A\n", prefix);
-       return 0;
+       int rc;
+
+       if (time == 0) {
+               rc = seq_printf(m, "%s_time: N/A\n", name);
+               if (rc == 0)
+                       rc = seq_printf(m, "time_since_%s: N/A\n", name);
+
+               return rc;
+       }
+
+       rc = seq_printf(m, "%s_time: "LPU64"\n", name, time);
+       if (rc == 0)
+               rc = seq_printf(m, "time_since_%s: "LPU64" seconds\n",
+                               name, cfs_time_current_sec() - time);
+
+       return rc;
 }
 
 int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
 }
 
 int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
@@ -1755,17 +1771,15 @@ int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
 {
        if (fid_is_zero(&pos->lp_dir_parent)) {
                if (pos->lp_oit_cookie == 0)
 {
        if (fid_is_zero(&pos->lp_dir_parent)) {
                if (pos->lp_oit_cookie == 0)
-                       seq_printf(m, "%s: N/A, N/A, N/A\n",
-                                  prefix);
-               else
-                       seq_printf(m, "%s: "LPU64", N/A, N/A\n",
-                                  prefix, pos->lp_oit_cookie);
-       } else {
-               seq_printf(m, "%s: "LPU64", "DFID", "LPX64"\n",
-                          prefix, pos->lp_oit_cookie,
-                          PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
+                       return seq_printf(m, "%s: N/A, N/A, N/A\n", prefix);
+
+               return seq_printf(m, "%s: "LPU64", N/A, N/A\n",
+                                 prefix, pos->lp_oit_cookie);
        }
        }
-       return 0;
+
+       return seq_printf(m, "%s: "LPU64", "DFID", "LPX64"\n",
+                         prefix, pos->lp_oit_cookie,
+                         PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
 }
 
 void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
 }
 
 void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
index 1598f75..987ce57 100644 (file)
@@ -4275,17 +4275,17 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
                goto out;
 
        rc = lfsck_time_dump(m, ns->ln_time_last_complete,
                goto out;
 
        rc = lfsck_time_dump(m, ns->ln_time_last_complete,
-                            "time_since_last_completed");
+                            "last_completed");
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, ns->ln_time_latest_start,
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, ns->ln_time_latest_start,
-                            "time_since_latest_start");
+                            "latest_start");
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
        if (rc < 0)
                goto out;
 
        rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
-                            "time_since_last_checkpoint");
+                            "last_checkpoint");
        if (rc < 0)
                goto out;
 
        if (rc < 0)
                goto out;
 
@@ -4318,17 +4318,18 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
 
                if (duration != 0)
                        do_div(new_checked, duration);
 
                if (duration != 0)
                        do_div(new_checked, duration);
+
                if (rtime != 0)
                        do_div(speed, rtime);
                if (rtime != 0)
                        do_div(speed, rtime);
-               lfsck_namespace_dump_statistics(m, ns, checked,
-                                               ns->ln_objs_checked_phase2,
-                                               rtime, ns->ln_run_time_phase2);
 
 
+               lfsck_namespace_dump_statistics(m, ns, checked, 0, rtime, 0);
                seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
                              "average_speed_phase2: N/A\n"
                seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
                              "average_speed_phase2: N/A\n"
+                             "average_speed_total: "LPU64" items/sec\n"
                              "real_time_speed_phase1: "LPU64" items/sec\n"
                              "real_time_speed_phase2: N/A\n",
                              speed,
                              "real_time_speed_phase1: "LPU64" items/sec\n"
                              "real_time_speed_phase2: N/A\n",
                              speed,
+                             speed,
                              new_checked);
 
                LASSERT(lfsck->li_di_oit != NULL);
                              new_checked);
 
                LASSERT(lfsck->li_di_oit != NULL);
@@ -4366,50 +4367,75 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
                                com->lc_new_checked;
                __u64 speed1 = ns->ln_items_checked;
                __u64 speed2 = checked;
                                com->lc_new_checked;
                __u64 speed1 = ns->ln_items_checked;
                __u64 speed2 = checked;
+               __u64 speed0 = speed1 + speed2;
                __u64 new_checked = com->lc_new_checked *
                                    msecs_to_jiffies(MSEC_PER_SEC);
                __u32 rtime = ns->ln_run_time_phase2 +
                              cfs_duration_sec(duration + HALF_SEC);
                __u64 new_checked = com->lc_new_checked *
                                    msecs_to_jiffies(MSEC_PER_SEC);
                __u32 rtime = ns->ln_run_time_phase2 +
                              cfs_duration_sec(duration + HALF_SEC);
+               __u32 time0 = ns->ln_run_time_phase1 + rtime;
 
                if (duration != 0)
                        do_div(new_checked, duration);
 
                if (duration != 0)
                        do_div(new_checked, duration);
+
                if (ns->ln_run_time_phase1 != 0)
                        do_div(speed1, ns->ln_run_time_phase1);
                if (ns->ln_run_time_phase1 != 0)
                        do_div(speed1, ns->ln_run_time_phase1);
+               else if (ns->ln_items_checked != 0)
+                       time0++;
+
                if (rtime != 0)
                        do_div(speed2, rtime);
                if (rtime != 0)
                        do_div(speed2, rtime);
+               else if (checked != 0)
+                       time0++;
+
+               if (time0 != 0)
+                       do_div(speed0, time0);
+
                lfsck_namespace_dump_statistics(m, ns, ns->ln_items_checked,
                                                checked,
                                                ns->ln_run_time_phase1, rtime);
                lfsck_namespace_dump_statistics(m, ns, ns->ln_items_checked,
                                                checked,
                                                ns->ln_run_time_phase1, rtime);
-
                seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
                              "average_speed_phase2: "LPU64" objs/sec\n"
                seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
                              "average_speed_phase2: "LPU64" objs/sec\n"
+                             "average_speed_total: "LPU64" items/sec\n"
                              "real_time_speed_phase1: N/A\n"
                              "real_time_speed_phase2: "LPU64" objs/sec\n"
                              "current_position: "DFID"\n",
                              speed1,
                              speed2,
                              "real_time_speed_phase1: N/A\n"
                              "real_time_speed_phase2: "LPU64" objs/sec\n"
                              "current_position: "DFID"\n",
                              speed1,
                              speed2,
+                             speed0,
                              new_checked,
                              PFID(&ns->ln_fid_latest_scanned_phase2));
        } else {
                __u64 speed1 = ns->ln_items_checked;
                __u64 speed2 = ns->ln_objs_checked_phase2;
                              new_checked,
                              PFID(&ns->ln_fid_latest_scanned_phase2));
        } else {
                __u64 speed1 = ns->ln_items_checked;
                __u64 speed2 = ns->ln_objs_checked_phase2;
+               __u64 speed0 = speed1 + speed2;
+               __u32 time0 = ns->ln_run_time_phase1 + ns->ln_run_time_phase2;
 
                if (ns->ln_run_time_phase1 != 0)
                        do_div(speed1, ns->ln_run_time_phase1);
 
                if (ns->ln_run_time_phase1 != 0)
                        do_div(speed1, ns->ln_run_time_phase1);
+               else if (ns->ln_items_checked != 0)
+                       time0++;
+
                if (ns->ln_run_time_phase2 != 0)
                        do_div(speed2, ns->ln_run_time_phase2);
                if (ns->ln_run_time_phase2 != 0)
                        do_div(speed2, ns->ln_run_time_phase2);
+               else if (ns->ln_objs_checked_phase2 != 0)
+                       time0++;
+
+               if (time0 != 0)
+                       do_div(speed0, time0);
+
                lfsck_namespace_dump_statistics(m, ns, ns->ln_items_checked,
                                                ns->ln_objs_checked_phase2,
                                                ns->ln_run_time_phase1,
                                                ns->ln_run_time_phase2);
                lfsck_namespace_dump_statistics(m, ns, ns->ln_items_checked,
                                                ns->ln_objs_checked_phase2,
                                                ns->ln_run_time_phase1,
                                                ns->ln_run_time_phase2);
-
                seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
                              "average_speed_phase2: "LPU64" objs/sec\n"
                seq_printf(m, "average_speed_phase1: "LPU64" items/sec\n"
                              "average_speed_phase2: "LPU64" objs/sec\n"
+                             "average_speed_total: "LPU64" items/sec\n"
                              "real_time_speed_phase1: N/A\n"
                              "real_time_speed_phase2: N/A\n"
                              "current_position: N/A\n",
                              speed1,
                              "real_time_speed_phase1: N/A\n"
                              "real_time_speed_phase2: N/A\n"
                              "current_position: N/A\n",
                              speed1,
-                             speed2);
+                             speed2,
+                             speed0);
        }
 out:
        up_read(&com->lc_sem);
        }
 out:
        up_read(&com->lc_sem);