struct io_log *bw_log;
struct timeval start;
+ struct rusage ru_start;
+ struct rusage ru_end;
struct list_head io_hist_list;
};
gettimeofday(&td->start, NULL);
+ getrusage(RUSAGE_SELF, &td->ru_start);
+
while (td->loops--) {
gettimeofday(&td->stat_sample_time, NULL);
}
td->runtime = mtime_since_now(&td->start);
+ getrusage(RUSAGE_SELF, &td->ru_end);
ret = 0;
if (td->bw_log)
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;
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)