[PATCH] fio: display percent of agg bw a job got
authorJens Axboe <axboe@suse.de>
Thu, 10 Nov 2005 22:12:59 +0000 (23:12 +0100)
committerJens Axboe <axboe@suse.de>
Thu, 10 Nov 2005 22:12:59 +0000 (23:12 +0100)
fio.c
fio.h

diff --git a/fio.c b/fio.c
index 8fc2f779392b66871943778dd1755de8c8a16d24..b5e0ee335747c26b5e259bd9fba53e19e6a6248b 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -1453,7 +1453,8 @@ static int calc_lat(struct io_stat *is, unsigned long *min, unsigned long *max,
        return 1;
 }
 
-static void show_thread_status(struct thread_data *td)
+static void show_thread_status(struct thread_data *td,
+                              struct group_run_stats *rs)
 {
        int prio, prio_class;
        unsigned long min, max, bw = 0;
@@ -1474,8 +1475,12 @@ static void show_thread_status(struct thread_data *td)
                printf("  slat (msec): min=%5lu, max=%5lu, avg=%5.02f, dev=%5.02f\n", min, max, mean, dev);
        if (calc_lat(&td->clat_stat, &min, &max, &mean, &dev))
                printf("  clat (msec): min=%5lu, max=%5lu, avg=%5.02f, dev=%5.02f\n", min, max, mean, dev);
-       if (calc_lat(&td->bw_stat, &min, &max, &mean, &dev))
-               printf("  bw (KiB/s) : min=%5lu, max=%5lu, avg=%5.02f, dev=%5.02f\n", min, max, mean, dev);
+       if (calc_lat(&td->bw_stat, &min, &max, &mean, &dev)) {
+               double p_of_agg;
+
+               p_of_agg = mean * 100 / (double) rs->agg[td->ddir];
+               printf("  bw (KiB/s) : min=%5lu, max=%5lu, per=%3.2f%%, avg=%5.02f, dev=%5.02f\n", min, max, p_of_agg, mean, dev);
+       }
 
        if (td->runtime) {
                usr_cpu = (double) td->usr_time * 100 / (double) td->runtime;
@@ -1701,13 +1706,6 @@ static void run_threads(char *argv[])
        }
 }
 
-struct group_run_stats {
-       unsigned long max_run[2], min_run[2];
-       unsigned long max_bw[2], min_bw[2];
-       unsigned long io_mb[2];
-       unsigned long agg[2];
-};
-
 static void show_group_stats(struct group_run_stats *rs, int id)
 {
        printf("\nRun status group %d:\n", id);
@@ -1721,6 +1719,7 @@ static void show_group_stats(struct group_run_stats *rs, int id)
 static void show_run_stats(void)
 {
        struct group_run_stats *runstats, *rs;
+       struct thread_data *td;
        int i;
 
        runstats = malloc(sizeof(struct group_run_stats) * (groupid + 1));
@@ -1734,30 +1733,30 @@ static void show_run_stats(void)
        }
 
        for (i = 0; i < thread_number; i++) {
-               struct thread_data *td = &threads[i];
                unsigned long bw = 0;
 
+               td = &threads[i];
+
+               if (td->error)
+                       continue;
+
                rs = &runstats[td->groupid];
 
-               if (!td->error) {
-                       if (td->runtime < rs->min_run[td->ddir])
-                               rs->min_run[td->ddir] = td->runtime;
-                       if (td->runtime > rs->max_run[td->ddir])
-                               rs->max_run[td->ddir] = td->runtime;
+               if (td->runtime < rs->min_run[td->ddir])
+                       rs->min_run[td->ddir] = td->runtime;
+               if (td->runtime > rs->max_run[td->ddir])
+                       rs->max_run[td->ddir] = td->runtime;
 
-                       if (td->runtime)
-                               bw = td->io_bytes / td->runtime;
-                       if (bw < rs->min_bw[td->ddir])
-                               rs->min_bw[td->ddir] = bw;
-                       if (bw > rs->max_bw[td->ddir])
-                               rs->max_bw[td->ddir] = bw;
+               if (td->runtime)
+                       bw = td->io_bytes / td->runtime;
+               if (bw < rs->min_bw[td->ddir])
+                       rs->min_bw[td->ddir] = bw;
+               if (bw > rs->max_bw[td->ddir])
+                       rs->max_bw[td->ddir] = bw;
 
-                       rs->io_mb[td->ddir] += td->io_bytes >> 20;
-               }
+               rs->io_mb[td->ddir] += td->io_bytes >> 20;
 
-               show_thread_status(td);
        }
-       
        for (i = 0; i < groupid + 1; i++) {
                rs = &runstats[i];
 
@@ -1768,6 +1767,14 @@ static void show_run_stats(void)
 
                show_group_stats(rs, i);
        }
+
+       for (i = 0; i < thread_number; i++) {
+               td = &threads[i];
+               rs = &runstats[td->groupid];
+
+               if (!td->error)
+                       show_thread_status(td, rs);
+       }
 }
 
 int main(int argc, char *argv[])
diff --git a/fio.h b/fio.h
index ddbf7d7d93cadd0713d6d954989af63b3c649bf4..1cdf0492f7e4d91cee5ddef9b2e485dd35f10333 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -45,6 +45,13 @@ struct verify_header {
        char md5_digest[MD5_HASH_WORDS * 4];
 };
 
+struct group_run_stats {
+       unsigned long max_run[2], min_run[2];
+       unsigned long max_bw[2], min_bw[2];
+       unsigned long io_mb[2];
+       unsigned long agg[2];
+};
+
 struct thread_data {
        char file_name[256];
        char directory[256];