From: Jens Axboe Date: Tue, 8 Nov 2005 09:08:04 +0000 (+0100) Subject: [PATCH] fio: add cpu usage stats X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=92b229ed5e61f9a07cdb9ee0ed88f3b213776b64;p=disktools.git [PATCH] fio: add cpu usage stats --- diff --git a/fio.c b/fio.c index 271afe5..898e062 100644 --- a/fio.c +++ b/fio.c @@ -323,6 +323,8 @@ struct thread_data { struct io_log *bw_log; struct timeval start; + struct rusage ru_start; + struct rusage ru_end; struct list_head io_hist_list; }; @@ -1638,6 +1640,8 @@ static void *thread_main(int shm_id, int offset, char *argv[]) gettimeofday(&td->start, NULL); + getrusage(RUSAGE_SELF, &td->ru_start); + while (td->loops--) { gettimeofday(&td->stat_sample_time, NULL); @@ -1670,6 +1674,7 @@ static void *thread_main(int shm_id, int offset, char *argv[]) } td->runtime = mtime_since_now(&td->start); + getrusage(RUSAGE_SELF, &td->ru_end); ret = 0; if (td->bw_log) @@ -1728,8 +1733,8 @@ static int calc_lat(struct io_stat *is, unsigned long *min, unsigned long *max, static void show_thread_status(struct thread_data *td) { int prio, prio_class; - unsigned long min, max, bw = 0; - double mean, dev; + unsigned long min, max, bw = 0, ctx; + double mean, dev, usr_cpu, sys_cpu; if (!td->io_bytes && !td->error) return; @@ -1748,6 +1753,23 @@ static void show_thread_status(struct thread_data *td) 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 (td->runtime) { + unsigned long t; + + t = mtime_since(&td->ru_start.ru_utime, &td->ru_end.ru_utime); + usr_cpu = (double) t * 100 / (double) td->runtime; + + t = mtime_since(&td->ru_start.ru_stime, &td->ru_end.ru_stime); + sys_cpu = (double) t * 100 / (double) td->runtime; + } else { + usr_cpu = 0; + sys_cpu = 0; + } + + ctx = td->ru_end.ru_nvcsw + td->ru_end.ru_nivcsw - (td->ru_start.ru_nvcsw + td->ru_start.ru_nivcsw); + + printf(" cpu : usr=%3.2f%%, sys=%3.2f%%, ctx=%lu\n", usr_cpu, sys_cpu, ctx); } static int setup_rate(struct thread_data *td)