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;
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;
}
}
-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);
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));
}
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];
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[])