X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=stat.c;h=bcf8fa83ff5f97a73f8b6ee10161e387688a8140;hb=70e0c3166fdb8048b1e7f84be2371fc60af04f87;hp=3662fd9eee2bdd4fbbedf249cb850dbee4ab334c;hpb=e09231c214906b4ff8cbc3dc202c39755fbf6afd;p=fio.git diff --git a/stat.c b/stat.c index 3662fd9e..bcf8fa83 100644 --- a/stat.c +++ b/stat.c @@ -14,18 +14,18 @@ void update_rusage_stat(struct thread_data *td) { struct thread_stat *ts = &td->ts; - getrusage(RUSAGE_SELF, &ts->ru_end); - - ts->usr_time += mtime_since(&ts->ru_start.ru_utime, - &ts->ru_end.ru_utime); - ts->sys_time += mtime_since(&ts->ru_start.ru_stime, - &ts->ru_end.ru_stime); - ts->ctx += ts->ru_end.ru_nvcsw + ts->ru_end.ru_nivcsw - - (ts->ru_start.ru_nvcsw + ts->ru_start.ru_nivcsw); - ts->minf += ts->ru_end.ru_minflt - ts->ru_start.ru_minflt; - ts->majf += ts->ru_end.ru_majflt - ts->ru_start.ru_majflt; - - memcpy(&ts->ru_start, &ts->ru_end, sizeof(ts->ru_end)); + getrusage(RUSAGE_SELF, &td->ru_end); + + ts->usr_time += mtime_since(&td->ru_start.ru_utime, + &td->ru_end.ru_utime); + ts->sys_time += mtime_since(&td->ru_start.ru_stime, + &td->ru_end.ru_stime); + ts->ctx += td->ru_end.ru_nvcsw + td->ru_end.ru_nivcsw + - (td->ru_start.ru_nvcsw + td->ru_start.ru_nivcsw); + ts->minf += td->ru_end.ru_minflt - td->ru_start.ru_minflt; + ts->majf += td->ru_end.ru_majflt - td->ru_start.ru_majflt; + + memcpy(&td->ru_start, &td->ru_end, sizeof(td->ru_end)); } /* @@ -191,13 +191,13 @@ static int calc_lat(struct io_stat *is, unsigned long *min, unsigned long *max, return 1; } -static void show_group_stats(struct group_run_stats *rs, int id) +void show_group_stats(struct group_run_stats *rs) { char *p1, *p2, *p3, *p4; const char *ddir_str[] = { " READ", " WRITE" }; int i; - log_info("\nRun status group %d (all jobs):\n", id); + log_info("\nRun status group %d (all jobs):\n", rs->groupid); for (i = 0; i <= DDIR_WRITE; i++) { const int i2p = is_power_of_2(rs->kb_base); @@ -433,8 +433,7 @@ static void show_latencies(double *io_u_lat_u, double *io_u_lat_m) log_info("\n"); } -static void show_thread_status(struct thread_stat *ts, - struct group_run_stats *rs) +void show_thread_status(struct thread_stat *ts, struct group_run_stats *rs) { double usr_cpu, sys_cpu; unsigned long runtime; @@ -727,8 +726,13 @@ void show_run_stats(void) /* * These are per-group shared already */ - ts->name = td->o.name; - ts->description = td->o.description; + strncpy(ts->name, td->o.name, FIO_JOBNAME_SIZE); + if (td->o.description) + strncpy(ts->description, td->o.description, + FIO_JOBNAME_SIZE); + else + memset(ts->description, 0, FIO_JOBNAME_SIZE); + ts->groupid = td->groupid; /* @@ -750,10 +754,10 @@ void show_run_stats(void) if (!td->error && td->o.continue_on_error && td->first_error) { ts->error = td->first_error; - ts->verror = td->verror; + strcpy(ts->verror, td->verror); } else if (td->error) { ts->error = td->error; - ts->verror = td->verror; + strcpy(ts->verror, td->verror); } } @@ -763,7 +767,6 @@ void show_run_stats(void) 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->stat_io_bytes[l] += td->ts.stat_io_bytes[l]; ts->io_bytes[l] += td->ts.io_bytes[l]; if (ts->runtime[l] < td->ts.runtime[l]) @@ -858,15 +861,24 @@ void show_run_stats(void) ts = &threadstats[i]; rs = &runstats[ts->groupid]; - if (terse_output) + if (is_backend) + fio_server_send_ts(ts, rs); + else if (terse_output) show_thread_status_terse(ts, rs); else show_thread_status(ts, rs); } if (!terse_output) { - for (i = 0; i < groupid + 1; i++) - show_group_stats(&runstats[i], i); + for (i = 0; i < groupid + 1; i++) { + rs = &runstats[i]; + + rs->groupid = i; + if (is_backend) + fio_server_send_gs(rs); + else + show_group_stats(rs); + } show_disk_util(); } @@ -954,8 +966,8 @@ void add_clat_sample(struct thread_data *td, enum fio_ddir ddir, add_stat_sample(&ts->clat_stat[ddir], usec); - if (ts->clat_log) - add_log_sample(td, ts->clat_log, usec, ddir, bs); + if (td->clat_log) + add_log_sample(td, td->clat_log, usec, ddir, bs); if (ts->clat_percentiles) add_clat_percentile_sample(ts, usec, ddir); @@ -971,8 +983,8 @@ void add_slat_sample(struct thread_data *td, enum fio_ddir ddir, add_stat_sample(&ts->slat_stat[ddir], usec); - if (ts->slat_log) - add_log_sample(td, ts->slat_log, usec, ddir, bs); + if (td->slat_log) + add_log_sample(td, td->slat_log, usec, ddir, bs); } void add_lat_sample(struct thread_data *td, enum fio_ddir ddir, @@ -985,8 +997,8 @@ void add_lat_sample(struct thread_data *td, enum fio_ddir ddir, add_stat_sample(&ts->lat_stat[ddir], usec); - if (ts->lat_log) - add_log_sample(td, ts->lat_log, usec, ddir, bs); + if (td->lat_log) + add_log_sample(td, td->lat_log, usec, ddir, bs); } void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs, @@ -998,17 +1010,17 @@ void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs, if (!ddir_rw(ddir)) return; - spent = mtime_since(&ts->stat_sample_time[ddir], t); + spent = mtime_since(&td->stat_sample_time[ddir], t); if (spent < td->o.bw_avg_time) return; - rate = (td->this_io_bytes[ddir] - ts->stat_io_bytes[ddir]) * + rate = (td->this_io_bytes[ddir] - td->stat_io_bytes[ddir]) * 1000 / spent / 1024; add_stat_sample(&ts->bw_stat[ddir], rate); - if (ts->bw_log) - add_log_sample(td, ts->bw_log, rate, ddir, bs); + if (td->bw_log) + add_log_sample(td, td->bw_log, rate, ddir, bs); - fio_gettime(&ts->stat_sample_time[ddir], NULL); - ts->stat_io_bytes[ddir] = td->this_io_bytes[ddir]; + fio_gettime(&td->stat_sample_time[ddir], NULL); + td->stat_io_bytes[ddir] = td->this_io_bytes[ddir]; }