diff options
author | Chris Mason <chris.mason@fusionio.com> | 2012-08-30 20:42:30 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2012-08-30 20:42:30 -0400 |
commit | 1e1e3f04296420c0e3cb46ffad56f247f6a17963 (patch) | |
tree | 8e176e41774716eb74c9b37b18010fb71896ba9c | |
parent | cc3d54d5c8399547fb86135ec476b57ce49ec8d6 (diff) | |
download | blktrace-1e1e3f04296420c0e3cb46ffad56f247f6a17963.tar.gz |
iowatcher: Check for null mpstat structs while generating plots
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r-- | iowatcher/main.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/iowatcher/main.c b/iowatcher/main.c index a0eac65..a477f04 100644 --- a/iowatcher/main.c +++ b/iowatcher/main.c @@ -51,6 +51,7 @@ static int opt_graph_height = 0; static int columns = 1; static int num_xticks = 9; +static int num_yticks = 4; /* * this doesn't include the IO graph, @@ -558,7 +559,7 @@ static void plot_io(struct plot *plot, int seconds, u64 max_offset) set_plot_label(plot, "Device IO"); set_ylabel(plot, "Offset (MB)"); - set_yticks(plot, 4, 0, max_offset / (1024 * 1024), ""); + set_yticks(plot, num_yticks, 0, max_offset / (1024 * 1024), ""); set_xticks(plot, num_xticks, 0, seconds); list_for_each_entry(tf, &all_traces, list) { @@ -608,7 +609,7 @@ static void plot_tput(struct plot *plot, int seconds) scale_line_graph_bytes(&max, &units, 1024); sprintf(line, "%sB/s", units); set_ylabel(plot, line); - set_yticks(plot, 4, 0, max, ""); + set_yticks(plot, num_yticks, 0, max, ""); set_xticks(plot, num_xticks, 0, seconds); list_for_each_entry(tf, &all_traces, list) { @@ -660,12 +661,14 @@ static void plot_cpu(struct plot *plot, int seconds, char *label, seconds = tf->mpstat_seconds; - set_yticks(plot, 4, 0, tf->mpstat_gld[gld_index]->max, ""); + set_yticks(plot, num_yticks, 0, tf->mpstat_gld[gld_index]->max, ""); set_ylabel(plot, "Percent"); set_xticks(plot, num_xticks, 0, seconds); cpu_color_index = 0; list_for_each_entry(tf, &all_traces, list) { + if (tf->mpstat_gld == 0) + break; for (i = 0; i < tf->mpstat_gld[0]->stop_seconds; i++) { if (tf->mpstat_gld[gld_index]->data[i].count) { avg += (tf->mpstat_gld[gld_index]->data[i].sum / @@ -736,7 +739,7 @@ static void plot_queue_depth(struct plot *plot, int seconds) tf = list_entry(all_traces.next, struct trace_file, list); set_ylabel(plot, "Pending IO"); - set_yticks(plot, 4, 0, tf->queue_depth_gld->max, ""); + set_yticks(plot, num_yticks, 0, tf->queue_depth_gld->max, ""); set_xticks(plot, num_xticks, 0, seconds); list_for_each_entry(tf, &all_traces, list) { @@ -891,10 +894,12 @@ static void plot_latency(struct plot *plot, int seconds) if (num_traces > 1) svg_alloc_legend(plot, num_traces); + list_for_each_entry(tf, &all_traces, list) { if (tf->latency_gld->max > max) max = tf->latency_gld->max; } + list_for_each_entry(tf, &all_traces, list) tf->latency_gld->max = max; @@ -906,7 +911,7 @@ static void plot_latency(struct plot *plot, int seconds) scale_line_graph_time(&max, &units); sprintf(line, "latency (%ss)", units); set_ylabel(plot, line); - set_yticks(plot, 4, 0, max, ""); + set_yticks(plot, num_yticks, 0, max, ""); set_xticks(plot, num_xticks, 0, seconds); list_for_each_entry(tf, &all_traces, list) { @@ -950,7 +955,7 @@ static void plot_iops(struct plot *plot, int seconds) scale_line_graph_bytes(&max, &units, 1000); set_ylabel(plot, "IO/s"); - set_yticks(plot, 4, 0, max, units); + set_yticks(plot, num_yticks, 0, max, units); set_xticks(plot, num_xticks, 0, seconds); list_for_each_entry(tf, &all_traces, list) { @@ -1226,6 +1231,8 @@ int main(int ac, char **av) if (num_xticks < 2) num_xticks = 2; } + if (rows <= 50) + num_yticks--; check_plot_columns(plot, TPUT_GRAPH_INDEX); plot_tput(plot, seconds); |