X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=stat.c;h=ea5b43a38ba1cd65cf9547c6d4bfe7922ac30a6a;hp=7d6ee63dc2dd3dac9faddaeb96da5e34d0a72713;hb=129fb2d422557e493020a8eac00867749af284b4;hpb=081c2dc3d8dd768aa17cea66584af55d744b6662 diff --git a/stat.c b/stat.c index 7d6ee63d..ea5b43a3 100644 --- a/stat.c +++ b/stat.c @@ -1062,17 +1062,26 @@ static struct json_object *show_thread_status_json(struct thread_stat *ts, struct group_run_stats *rs) { struct json_object *root, *tmp; + struct jobs_eta *je; double io_u_dist[FIO_IO_U_MAP_NR]; double io_u_lat_u[FIO_IO_U_LAT_U_NR]; double io_u_lat_m[FIO_IO_U_LAT_M_NR]; double usr_cpu, sys_cpu; int i; + size_t size; + root = json_create_object(); json_object_add_value_string(root, "jobname", ts->name); json_object_add_value_int(root, "groupid", ts->groupid); json_object_add_value_int(root, "error", ts->error); + /* ETA Info */ + je = get_jobs_eta(1, &size); + json_object_add_value_int(root, "eta", je->eta_sec); + json_object_add_value_int(root, "elapsed", je->elapsed_sec); + + add_ddir_status_json(ts, rs, DDIR_READ, root); add_ddir_status_json(ts, rs, DDIR_WRITE, root); add_ddir_status_json(ts, rs, DDIR_TRIM, root); @@ -1202,13 +1211,16 @@ static void show_thread_status_terse(struct thread_stat *ts, struct json_object *show_thread_status(struct thread_stat *ts, struct group_run_stats *rs) { - if (output_format == FIO_OUTPUT_TERSE) + struct json_object *ret = NULL; + + if (output_format & FIO_OUTPUT_TERSE) show_thread_status_terse(ts, rs); - else if (output_format == FIO_OUTPUT_JSON) - return show_thread_status_json(ts, rs); - else + if (output_format & FIO_OUTPUT_JSON) + ret = show_thread_status_json(ts, rs); + if (output_format & FIO_OUTPUT_NORMAL) show_thread_status_normal(ts, rs); - return NULL; + + return ret; } static void sum_stat(struct io_stat *dst, struct io_stat *src, int nr) @@ -1539,9 +1551,9 @@ void __show_run_stats(void) /* * don't overwrite last signal output */ - if (output_format == FIO_OUTPUT_NORMAL) + if (output_format & FIO_OUTPUT_NORMAL) log_info("\n"); - else if (output_format == FIO_OUTPUT_JSON) { + if (output_format & FIO_OUTPUT_JSON) { char time_buf[32]; time_t time_p; @@ -1564,15 +1576,18 @@ void __show_run_stats(void) if (is_backend) fio_server_send_ts(ts, rs); - else if (output_format == FIO_OUTPUT_TERSE) - show_thread_status_terse(ts, rs); - else if (output_format == FIO_OUTPUT_JSON) { - struct json_object *tmp = show_thread_status_json(ts, rs); - json_array_add_value_object(array, tmp); - } else - show_thread_status_normal(ts, rs); + else { + if (output_format & FIO_OUTPUT_TERSE) + show_thread_status_terse(ts, rs); + if (output_format & FIO_OUTPUT_JSON) { + struct json_object *tmp = show_thread_status_json(ts, rs); + json_array_add_value_object(array, tmp); + } + if (output_format & FIO_OUTPUT_NORMAL) + show_thread_status_normal(ts, rs); + } } - if (output_format == FIO_OUTPUT_JSON) { + if (output_format & FIO_OUTPUT_JSON) { /* disk util stats, if any */ show_disk_util(1, root); @@ -1589,18 +1604,18 @@ void __show_run_stats(void) rs->groupid = i; if (is_backend) fio_server_send_gs(rs); - else if (output_format == FIO_OUTPUT_NORMAL) + else if (output_format & FIO_OUTPUT_NORMAL) show_group_stats(rs); } if (is_backend) fio_server_send_du(); - else if (output_format == FIO_OUTPUT_NORMAL) { + else if (output_format & FIO_OUTPUT_NORMAL) { show_disk_util(0, NULL); show_idle_prof_stats(FIO_OUTPUT_NORMAL, NULL); } - if ( !(output_format == FIO_OUTPUT_TERSE) && append_terse_output) { + if ( !(output_format & FIO_OUTPUT_TERSE) && append_terse_output) { log_info("\nAdditional Terse Output:\n"); for (i = 0; i < nr_ts; i++) { @@ -1962,6 +1977,8 @@ void add_clat_sample(struct thread_data *td, enum fio_ddir ddir, if (!ddir_rw(ddir)) return; + td_io_u_lock(td); + add_stat_sample(&ts->clat_stat[ddir], usec); if (td->clat_log) @@ -1969,6 +1986,8 @@ void add_clat_sample(struct thread_data *td, enum fio_ddir ddir, if (ts->clat_percentiles) add_clat_percentile_sample(ts, usec, ddir); + + td_io_u_unlock(td); } void add_slat_sample(struct thread_data *td, enum fio_ddir ddir, @@ -1979,10 +1998,14 @@ void add_slat_sample(struct thread_data *td, enum fio_ddir ddir, if (!ddir_rw(ddir)) return; + td_io_u_lock(td); + add_stat_sample(&ts->slat_stat[ddir], usec); if (td->slat_log) add_log_sample(td, td->slat_log, usec, ddir, bs, offset); + + td_io_u_unlock(td); } void add_lat_sample(struct thread_data *td, enum fio_ddir ddir, @@ -1993,10 +2016,14 @@ void add_lat_sample(struct thread_data *td, enum fio_ddir ddir, if (!ddir_rw(ddir)) return; + td_io_u_lock(td); + add_stat_sample(&ts->lat_stat[ddir], usec); if (td->lat_log) add_log_sample(td, td->lat_log, usec, ddir, bs, offset); + + td_io_u_unlock(td); } void add_bw_sample(struct thread_data *td, enum fio_ddir ddir, unsigned int bs,