scsi: fnic: added timestamp reporting in fnic debug stats
Added the timestamps for 1. current timestamp 2. last fnic stats read timestamp 3. last fnic stats reset timestamp and the deltas since last stats read and last reset in fnic stats. fnic stats uses debugfs Signed-off-by: Sesidhar Baddela <sebaddel@cisco.com> Signed-off-by: Satish Kharat <satishkh@cisco.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
Родитель
1cdf8bc18f
Коммит
43caa03fec
|
@ -632,6 +632,7 @@ static ssize_t fnic_reset_stats_write(struct file *file,
|
||||||
sizeof(struct io_path_stats) - sizeof(u64));
|
sizeof(struct io_path_stats) - sizeof(u64));
|
||||||
memset(fw_stats_p+1, 0,
|
memset(fw_stats_p+1, 0,
|
||||||
sizeof(struct fw_stats) - sizeof(u64));
|
sizeof(struct fw_stats) - sizeof(u64));
|
||||||
|
getnstimeofday(&stats->stats_timestamps.last_reset_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
(*ppos)++;
|
(*ppos)++;
|
||||||
|
|
|
@ -16,6 +16,12 @@
|
||||||
*/
|
*/
|
||||||
#ifndef _FNIC_STATS_H_
|
#ifndef _FNIC_STATS_H_
|
||||||
#define _FNIC_STATS_H_
|
#define _FNIC_STATS_H_
|
||||||
|
|
||||||
|
struct stats_timestamps {
|
||||||
|
struct timespec last_reset_time;
|
||||||
|
struct timespec last_read_time;
|
||||||
|
};
|
||||||
|
|
||||||
struct io_path_stats {
|
struct io_path_stats {
|
||||||
atomic64_t active_ios;
|
atomic64_t active_ios;
|
||||||
atomic64_t max_active_ios;
|
atomic64_t max_active_ios;
|
||||||
|
@ -110,6 +116,7 @@ struct misc_stats {
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fnic_stats {
|
struct fnic_stats {
|
||||||
|
struct stats_timestamps stats_timestamps;
|
||||||
struct io_path_stats io_stats;
|
struct io_path_stats io_stats;
|
||||||
struct abort_stats abts_stats;
|
struct abort_stats abts_stats;
|
||||||
struct terminate_stats term_stats;
|
struct terminate_stats term_stats;
|
||||||
|
|
|
@ -219,7 +219,31 @@ int fnic_get_stats_data(struct stats_debug_info *debug,
|
||||||
int buf_size = debug->buf_size;
|
int buf_size = debug->buf_size;
|
||||||
struct timespec val1, val2;
|
struct timespec val1, val2;
|
||||||
|
|
||||||
|
getnstimeofday(&val1);
|
||||||
len = snprintf(debug->debug_buffer + len, buf_size - len,
|
len = snprintf(debug->debug_buffer + len, buf_size - len,
|
||||||
|
"------------------------------------------\n"
|
||||||
|
"\t\tTime\n"
|
||||||
|
"------------------------------------------\n");
|
||||||
|
|
||||||
|
len += snprintf(debug->debug_buffer + len, buf_size - len,
|
||||||
|
"Current time : [%ld:%ld]\n"
|
||||||
|
"Last stats reset time: [%ld:%ld]\n"
|
||||||
|
"Last stats read time: [%ld:%ld]\n"
|
||||||
|
"delta since last reset: [%ld:%ld]\n"
|
||||||
|
"delta since last read: [%ld:%ld]\n",
|
||||||
|
val1.tv_sec, val1.tv_nsec,
|
||||||
|
stats->stats_timestamps.last_reset_time.tv_sec,
|
||||||
|
stats->stats_timestamps.last_reset_time.tv_nsec,
|
||||||
|
stats->stats_timestamps.last_read_time.tv_sec,
|
||||||
|
stats->stats_timestamps.last_read_time.tv_nsec,
|
||||||
|
timespec_sub(val1, stats->stats_timestamps.last_reset_time).tv_sec,
|
||||||
|
timespec_sub(val1, stats->stats_timestamps.last_reset_time).tv_nsec,
|
||||||
|
timespec_sub(val1, stats->stats_timestamps.last_read_time).tv_sec,
|
||||||
|
timespec_sub(val1, stats->stats_timestamps.last_read_time).tv_nsec);
|
||||||
|
|
||||||
|
stats->stats_timestamps.last_read_time = val1;
|
||||||
|
|
||||||
|
len += snprintf(debug->debug_buffer + len, buf_size - len,
|
||||||
"------------------------------------------\n"
|
"------------------------------------------\n"
|
||||||
"\t\tIO Statistics\n"
|
"\t\tIO Statistics\n"
|
||||||
"------------------------------------------\n");
|
"------------------------------------------\n");
|
||||||
|
|
Загрузка…
Ссылка в новой задаче