The following changes since commit 05463816cb6944649ac152283a9d02629ff91c0d: num2str fixes (2010-09-16 14:56:23 +0200) are available in the git repository at: git://git.kernel.dk/fio.git master David Nellans (3): Add some comments around the terse output Fix io_u depth array size Kill leftover debug printf() and re-format a long line HOWTO | 14 +++++++++----- fio.1 | 21 +++++++++++++++++---- fio.h | 2 +- io_u.c | 7 +++---- stat.c | 11 ++++++++++- 5 files changed, 40 insertions(+), 15 deletions(-) --- Diff of recent changes: diff --git a/HOWTO b/HOWTO index f338e7d..d3639fb 100644 --- a/HOWTO +++ b/HOWTO @@ -1256,8 +1256,10 @@ For scripted usage where you typically want to generate tables or graphs of the results, fio can output the results in a semicolon separated format. The format is one long line of values, such as: -2; client1;0;0;1906777;1090804;1790;0;0;0.000000;0.000000;0;0;0.000000;0.000000;929380;1152890;25.510151%;1078276.333333;128948.113404;0;0;0;0;0;0.000000;0.000000;0;0;0.000000;0.000000;0;0;0.000000%;0.000000;0.000000;100.000000%;0.000000%;324;100.0%;0.0%;0.0%;0.0%;0.0%;0.0%;0.0%;100.0%;0.0%;0.0%;0.0%;0.0%;0.0% -;0.0%;0.0%;0.0%;0.0%;0.0% +2;card0;0;0;7139336;121836;60004;1;10109;27.932460;116.933948;220;126861;3495.446807;1085.368601;226;126864;3523.635629;1089.012448;24063;99944;50.275485%;59818.274627;5540.657370;7155060;122104;60004;1;8338;29.086342;117.839068;388;128077;5032.488518;1234.785715;391;128085;5061.839412;1236.909129;23436;100928;50.287926%;59964.832030;5644.844189;14.595833%;19.394167%;123706;0;7313;0.1%;0.1%;0.1%;0.1%;0.1%;0.1%;100.0%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.01%;0.02%;0.05%;0.16%;6.04%;40.40%;52.68%;0.64%;0.01%;0.00%;0.01%;0.00%;0.00%;0.00%;0.00%;0.00% +A description of this job goes here. + +The job description (if provided) follows on a second line. To enable terse output, use the --minimal command line option. The first value is the version of the terse output format. If the output has to @@ -1281,6 +1283,8 @@ Split up, the format is as follows: Bw: min, max, aggregate percentage of total, mean, deviation CPU usage: user, system, context switches, major faults, minor faults IO depths: <=1, 2, 4, 8, 16, 32, >=64 - IO latencies: <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, >=2000 - Text description - + IO latencies microseconds: <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000 + IO latencies milliseconds: <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000 + Additional Info (dependant on continue_on_error, default off): total # errors, first error code + + Additional Info (dependant on description being set): Text description \ No newline at end of file diff --git a/fio.1 b/fio.1 index 192e6a8..9ca38ab 100644 --- a/fio.1 +++ b/fio.1 @@ -991,7 +991,8 @@ Disk utilization. .PD .SH TERSE OUTPUT If the \fB\-\-minimal\fR option is given, the results will be printed in a -semicolon-delimited format suitable for scripted use. Note that the first +semicolon-delimited format suitable for scripted use - a job description +(if provided) follows on a new line. Note that the first number in the line is the version number. If the output has to be changed for some reason, this number will be incremented by 1 to signify that change. The fields are: @@ -1053,12 +1054,24 @@ IO depth distribution: .B <=1, 2, 4, 8, 16, 32, >=64 .RE .P -IO latency distribution (ms): +IO latency distribution: .RS -.B <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, >=2000 +Microseconds: +.RS +.B <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000 +.RE +Milliseconds: +.RS +.B <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000 +.RE +.RE +.P +Error Info (dependant on continue_on_error, default off): +.RS +.B total # errors, first error code .RE .P -.B text description +.B text description (if provided in config - appears on newline) .RE .SH AUTHORS .B fio diff --git a/fio.h b/fio.h index 28104cd..c2a0d4d 100644 --- a/fio.h +++ b/fio.h @@ -71,7 +71,7 @@ enum { /* * How many depth levels to log */ -#define FIO_IO_U_MAP_NR 8 +#define FIO_IO_U_MAP_NR 7 #define FIO_IO_U_LAT_U_NR 10 #define FIO_IO_U_LAT_M_NR 12 diff --git a/io_u.c b/io_u.c index a630817..baa961b 100644 --- a/io_u.c +++ b/io_u.c @@ -246,7 +246,8 @@ static int get_next_block(struct thread_data *td, struct io_u *io_u, ret = get_next_rand_block(td, f, ddir, b); } else if (td->o.rw_seq == RW_SEQ_IDENT) { if (f->last_start != -1ULL) - *b = (f->last_start - f->file_offset) / td->o.min_bs[ddir]; + *b = (f->last_start - f->file_offset) + / td->o.min_bs[ddir]; else *b = 0; ret = 0; @@ -278,10 +279,8 @@ static int __get_next_offset(struct thread_data *td, struct io_u *io_u) td->ddir_seq_nr = td->o.ddir_seq_nr; } - if (get_next_block(td, io_u, ddir, rw_seq_hit, &b)) { - printf("fail\n"); + if (get_next_block(td, io_u, ddir, rw_seq_hit, &b)) return 1; - } io_u->offset = b * td->o.ba[ddir]; if (io_u->offset >= f->io_size) { diff --git a/stat.c b/stat.c index 326b1f7..b5ff010 100644 --- a/stat.c +++ b/stat.c @@ -418,12 +418,15 @@ static void show_thread_status_terse(struct thread_stat *ts, double usr_cpu, sys_cpu; int i; + /* General Info */ log_info("%s;%s;%d;%d", FIO_TERSE_VERSION, ts->name, ts->groupid, ts->error); - + /* Log Read Status */ show_ddir_status_terse(ts, rs, 0); + /* Log Write Status */ show_ddir_status_terse(ts, rs, 1); + /* CPU Usage */ if (ts->total_run_time) { double runt = (double) ts->total_run_time; @@ -437,22 +440,28 @@ static void show_thread_status_terse(struct thread_stat *ts, log_info(";%f%%;%f%%;%lu;%lu;%lu", usr_cpu, sys_cpu, ts->ctx, ts->majf, ts->minf); + /* Calc % distribution of IO depths, usecond, msecond latency */ stat_calc_dist(ts->io_u_map, ts_total_io_u(ts), io_u_dist); stat_calc_lat_u(ts, io_u_lat_u); stat_calc_lat_m(ts, io_u_lat_m); + /* Only show fixed 7 I/O depth levels*/ log_info(";%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%;%3.1f%%", io_u_dist[0], io_u_dist[1], io_u_dist[2], io_u_dist[3], io_u_dist[4], io_u_dist[5], io_u_dist[6]); + /* Microsecond latency */ for (i = 0; i < FIO_IO_U_LAT_U_NR; i++) log_info(";%3.2f%%", io_u_lat_u[i]); + /* Millisecond latency */ for (i = 0; i < FIO_IO_U_LAT_M_NR; i++) log_info(";%3.2f%%", io_u_lat_m[i]); + /* Additional output if continue_on_error set - default off*/ if (ts->continue_on_error) log_info(";%lu;%d", ts->total_err_count, ts->first_error); log_info("\n"); + /* Additional output if description is set */ if (ts->description) log_info(";%s", ts->description); -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html