Re: [Cluster-devel] [gfs2-utils PATCH] fsck.gfs2: time each of the passes

2014-07-11 Thread Steven Whitehouse

Hi,

On 10/07/14 17:53, Bob Peterson wrote:

Hi,

This patch reports how much time was taken in each pass.

Regards,

Bob Peterson
Red Hat File Systems

Signed-off-by: Bob Peterson rpete...@redhat.com
---
  gfs2/fsck/main.c | 19 ++-
  1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index 81b7dd5..785f0c4 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -11,6 +11,7 @@
  #include signal.h
  #include libintl.h
  #include locale.h
+#include sys/time.h
  #define _(String) gettext(String)
  #include syslog.h
  
@@ -247,11 +248,14 @@ static const struct fsck_pass passes[] = {

  static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
  {
int ret;
+   long hh, mm, ss, ms;
+   struct  timeval before, after;
  
  	if (fsck_abort)

return FSCK_CANCELED;
pass = p-name;
log_notice( _(Starting %s\n), p-name);
+   gettimeofday(before, 0);
ret = p-f(sdp);
if (ret)
exit(ret);
@@ -260,7 +264,20 @@ static int fsck_pass(const struct fsck_pass *p, struct 
gfs2_sbd *sdp)
log_notice( _(%s interrupted   \n), p-name);
return FSCK_CANCELED;
}
-   log_notice( _(%s complete  \n), p-name);
+   gettimeofday(after, 0);
+   hh = (after.tv_sec - before.tv_sec) / 3600;
+   mm = ((after.tv_sec - before.tv_sec) / 60) - (hh * 60);
+   ss = ((after.tv_sec - before.tv_sec)) - (hh * 3600) - (mm * 60);
+   ms = after.tv_usec - before.tv_usec;
+   if (ms  0)
+   ms += 100;

Use timersub() here perhaps?

Otherwise looks good,

Steve.


+   ms /= 1000;
+   log_notice( _(%s completed in ), p-name);
+   if (hh)
+   log_notice(%ldh, hh);
+   if (mm)
+   log_notice(%ldm, mm);
+   log_notice(%ld.%03lds  \n, ss, ms);
return 0;
  }
  





Re: [Cluster-devel] [gfs2-utils PATCH] fsck.gfs2: time each of the passes

2014-07-11 Thread Bob Peterson
- Original Message -
 Hi,
 
 On 11/07/14 18:41, Bob Peterson wrote:
  - Original Message -
  (snip)
  Use timersub() here perhaps?
 
  Otherwise looks good,
 
  Steve.
  Hi Steve,
 
  Thanks for the suggestion. How about this version?
 Yes, that looks better. There is probably a nicer way to do the
 conversion to string too... a quick google points at using a time_t to
 contain tv_secs, converting to tm and then appending the tv_usecs after.
 Should be a bit cleaner than doing it manually,
 
 Steve.

Hi,

I could implement your suggestion like this. I could also use strftime,
but it's ugly as sin, so I'm reluctant to do so. What do you think?

Regards,

Bob Peterson
---
diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index b4b1a03..ad42b0d 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -11,6 +11,8 @@
 #include signal.h
 #include libintl.h
 #include locale.h
+#include sys/time.h
+#include time.h
 #define _(String) gettext(String)
 
 #include copyright.cf
@@ -244,11 +246,15 @@ static const struct fsck_pass passes[] = {
 static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
 {
int ret;
+   struct  timeval before, after, diff;
+   time_t runtime;
+   struct tm *run_tm;
 
if (fsck_abort)
return FSCK_CANCELED;
pass = p-name;
log_notice( _(Starting %s\n), p-name);
+   gettimeofday(before, 0);
ret = p-f(sdp);
if (ret)
exit(ret);
@@ -257,7 +263,16 @@ static int fsck_pass(const struct fsck_pass *p, struct 
gfs2_sbd *sdp)
log_notice( _(%s interrupted   \n), p-name);
return FSCK_CANCELED;
}
-   log_notice( _(%s complete  \n), p-name);
+   gettimeofday(after, 0);
+   timersub(after, before, diff);
+   runtime = (time_t)diff.tv_sec;
+   run_tm = gmtime(runtime);
+   log_notice( _(%s completed in ), p-name);
+   if (run_tm-tm_hour)
+   log_notice(%dh, run_tm-tm_hour);
+   if (run_tm-tm_min)
+   log_notice(%dm, run_tm-tm_min);
+   log_notice(%d.%03lds  \n, run_tm-tm_sec, diff.tv_usec / 1000);
return 0;
 }