diff options
Diffstat (limited to 'xlators/debug')
| -rw-r--r-- | xlators/debug/io-stats/src/io-stats.c | 37 | 
1 files changed, 30 insertions, 7 deletions
diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 7747e7fb2fe..3a203244421 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -110,6 +110,7 @@ struct ios_global_stats {          struct ios_lat  latency[GF_FOP_MAXVALUE];          uint64_t        nr_opens;          uint64_t        max_nr_opens; +        struct timeval  max_openfd_time;  }; @@ -598,6 +599,8 @@ io_stats_dump_global_to_logfp (xlator_t *this, struct ios_global_stats *stats,          int    i = 0;          struct ios_stat_head *list_head = NULL;          struct ios_conf      *conf = NULL; +        struct tm            *tm = NULL; +        char                  timestr[256] = {0, };          conf = this->private; @@ -640,9 +643,15 @@ io_stats_dump_global_to_logfp (xlator_t *this, struct ios_global_stats *stats,          if (interval == -1) {                  LOCK (&conf->lock);                  { -                ios_log (this, logfp, "Current open fd's: %"PRId64 -                         " Max open fd's: %"PRId64,conf->cumulative.nr_opens, -                         conf->cumulative.max_nr_opens); +                        tm = localtime (&conf->cumulative.max_openfd_time.tv_sec); +                        strftime (timestr, 256, "%Y-%m-%d %H:%M:%S", tm); +                        snprintf (timestr + strlen (timestr), 256 - strlen (timestr), +                                  ".%"GF_PRI_SUSECONDS, +                                  conf->cumulative.max_openfd_time.tv_usec); +                        ios_log (this, logfp, "Current open fd's: %"PRId64 +                                 " Max open fd's: %"PRId64" time %s", +                                 conf->cumulative.nr_opens, +                                 conf->cumulative.max_nr_opens, timestr);                  }                  UNLOCK (&conf->lock);                  ios_log (this, logfp, "==========Open file stats========"); @@ -1018,6 +1027,8 @@ io_stats_dump_stats_to_dict (xlator_t *this, dict_t *resp,          struct ios_stat_list    *entry = NULL;          int                      ret = -1;          ios_stats_thru_t         index = IOS_STATS_THRU_MAX; +        struct tm               *tm = NULL; +        char                     timestr[256] = {0, };          conf = this->private; @@ -1031,7 +1042,16 @@ io_stats_dump_stats_to_dict (xlator_t *this, dict_t *resp,                                  if (ret)                                          goto out;                                  ret = dict_set_uint64 (resp, "max-open", -                                                  conf->cumulative.max_nr_opens); +                                                       conf->cumulative.max_nr_opens); + +                                tm = localtime (&conf->cumulative.max_openfd_time.tv_sec); +                                strftime (timestr, 256, "%Y-%m-%d %H:%M:%S", tm); +                                snprintf (timestr + strlen (timestr), 256 - strlen (timestr), +                                          ".%"GF_PRI_SUSECONDS, +                                          conf->cumulative.max_openfd_time.tv_usec); + +                                ret = dict_set_str (resp, "max-openfd-time", +                                                    timestr);                                  if (ret)                                          goto out;                          } @@ -1138,8 +1158,10 @@ io_stats_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          LOCK (&conf->lock);          {                  conf->cumulative.nr_opens++; -                if (conf->cumulative.nr_opens > conf->cumulative.max_nr_opens) +                if (conf->cumulative.nr_opens > conf->cumulative.max_nr_opens) {                          conf->cumulative.max_nr_opens = conf->cumulative.nr_opens; +                        conf->cumulative.max_openfd_time = iosfd->opened_at; +                }          }          UNLOCK (&conf->lock); @@ -1198,11 +1220,12 @@ io_stats_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          LOCK (&conf->lock);          {                  conf->cumulative.nr_opens++; -                if (conf->cumulative.nr_opens > conf->cumulative.max_nr_opens) +                if (conf->cumulative.nr_opens > conf->cumulative.max_nr_opens) {                          conf->cumulative.max_nr_opens = conf->cumulative.nr_opens; +                        conf->cumulative.max_openfd_time = iosfd->opened_at; +                }          }          UNLOCK (&conf->lock); -          if (iosstat) {                BUMP_STATS (iosstat, IOS_STATS_TYPE_OPEN);                iosstat = NULL;  | 
