From 5b9babb7fb9ac46c0e960ccd88c2d85ba3065c01 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Mon, 10 Oct 2011 12:14:30 +0200 Subject: [PATCH 1/1] Abstract out and export summation of thread_stats Client side will need it. Signed-off-by: Jens Axboe --- iolog.h | 1 - stat.c | 96 ++++++++++++++++++++++++++++++--------------------------- stat.h | 2 ++ 3 files changed, 53 insertions(+), 46 deletions(-) diff --git a/iolog.h b/iolog.h index d8140f28..a523d4d2 100644 --- a/iolog.h +++ b/iolog.h @@ -94,7 +94,6 @@ extern void add_slat_sample(struct thread_data *, enum fio_ddir, unsigned long, extern void add_bw_sample(struct thread_data *, enum fio_ddir, unsigned int, struct timeval *); extern void add_iops_sample(struct thread_data *, enum fio_ddir, struct timeval *); -extern void show_run_stats(void); extern void init_disk_util(struct thread_data *); extern void update_rusage_stat(struct thread_data *); extern void update_io_ticks(void); diff --git a/stat.c b/stat.c index 6c652d6e..71eca48e 100644 --- a/stat.c +++ b/stat.c @@ -642,12 +642,61 @@ static void sum_stat(struct io_stat *dst, struct io_stat *src, int nr) dst->S.u.f = S; } +void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src, int nr) +{ + int l, k; + + for (l = 0; l <= DDIR_WRITE; l++) { + sum_stat(&dst->clat_stat[l], &src->clat_stat[l], nr); + sum_stat(&dst->slat_stat[l], &src->slat_stat[l], nr); + sum_stat(&dst->lat_stat[l], &src->lat_stat[l], nr); + sum_stat(&dst->bw_stat[l], &src->bw_stat[l], nr); + + dst->io_bytes[l] += src->io_bytes[l]; + + if (dst->runtime[l] < src->runtime[l]) + dst->runtime[l] = src->runtime[l]; + } + + dst->usr_time += src->usr_time; + dst->sys_time += src->sys_time; + dst->ctx += src->ctx; + dst->majf += src->majf; + dst->minf += src->minf; + + for (k = 0; k < FIO_IO_U_MAP_NR; k++) + dst->io_u_map[k] += src->io_u_map[k]; + for (k = 0; k < FIO_IO_U_MAP_NR; k++) + dst->io_u_submit[k] += src->io_u_submit[k]; + for (k = 0; k < FIO_IO_U_MAP_NR; k++) + dst->io_u_complete[k] += src->io_u_complete[k]; + for (k = 0; k < FIO_IO_U_LAT_U_NR; k++) + dst->io_u_lat_u[k] += src->io_u_lat_u[k]; + for (k = 0; k < FIO_IO_U_LAT_M_NR; k++) + dst->io_u_lat_m[k] += src->io_u_lat_m[k]; + + for (k = 0; k <= 2; k++) { + dst->total_io_u[k] += src->total_io_u[k]; + dst->short_io_u[k] += src->short_io_u[k]; + } + + for (k = 0; k <= DDIR_WRITE; k++) { + int m; + for (m = 0; m < FIO_IO_U_PLAT_NR; m++) + dst->io_u_plat[k][m] += src->io_u_plat[k][m]; + } + + dst->total_run_time += src->total_run_time; + dst->total_submit += src->total_submit; + dst->total_complete += src->total_complete; +} + void show_run_stats(void) { struct group_run_stats *runstats, *rs; struct thread_data *td; struct thread_stat *threadstats, *ts; - int i, j, k, l, nr_ts, last_ts, idx; + int i, j, nr_ts, last_ts, idx; int kb_base_warned = 0; runstats = malloc(sizeof(struct group_run_stats) * (groupid + 1)); @@ -755,50 +804,7 @@ void show_run_stats(void) } } - for (l = 0; l <= DDIR_WRITE; l++) { - sum_stat(&ts->clat_stat[l], &td->ts.clat_stat[l], idx); - sum_stat(&ts->slat_stat[l], &td->ts.slat_stat[l], idx); - sum_stat(&ts->lat_stat[l], &td->ts.lat_stat[l], idx); - sum_stat(&ts->bw_stat[l], &td->ts.bw_stat[l], idx); - - ts->io_bytes[l] += td->ts.io_bytes[l]; - - if (ts->runtime[l] < td->ts.runtime[l]) - ts->runtime[l] = td->ts.runtime[l]; - } - - ts->usr_time += td->ts.usr_time; - ts->sys_time += td->ts.sys_time; - ts->ctx += td->ts.ctx; - ts->majf += td->ts.majf; - ts->minf += td->ts.minf; - - for (k = 0; k < FIO_IO_U_MAP_NR; k++) - ts->io_u_map[k] += td->ts.io_u_map[k]; - for (k = 0; k < FIO_IO_U_MAP_NR; k++) - ts->io_u_submit[k] += td->ts.io_u_submit[k]; - for (k = 0; k < FIO_IO_U_MAP_NR; k++) - ts->io_u_complete[k] += td->ts.io_u_complete[k]; - for (k = 0; k < FIO_IO_U_LAT_U_NR; k++) - ts->io_u_lat_u[k] += td->ts.io_u_lat_u[k]; - for (k = 0; k < FIO_IO_U_LAT_M_NR; k++) - ts->io_u_lat_m[k] += td->ts.io_u_lat_m[k]; - - - for (k = 0; k <= 2; k++) { - ts->total_io_u[k] += td->ts.total_io_u[k]; - ts->short_io_u[k] += td->ts.short_io_u[k]; - } - - for (k = 0; k <= DDIR_WRITE; k++) { - int m; - for (m = 0; m < FIO_IO_U_PLAT_NR; m++) - ts->io_u_plat[k][m] += td->ts.io_u_plat[k][m]; - } - - ts->total_run_time += td->ts.total_run_time; - ts->total_submit += td->ts.total_submit; - ts->total_complete += td->ts.total_complete; + sum_thread_stats(ts, &td->ts, idx); } for (i = 0; i < nr_ts; i++) { diff --git a/stat.h b/stat.h index b564ebf2..a35f9b1a 100644 --- a/stat.h +++ b/stat.h @@ -192,5 +192,7 @@ extern void show_thread_status(struct thread_stat *ts, struct group_run_stats *r extern void show_group_stats(struct group_run_stats *rs); extern int calc_thread_status(struct jobs_eta *je, int force); extern void display_thread_status(struct jobs_eta *je); +extern void show_run_stats(void); +extern void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src, int nr); #endif -- 2.25.1