aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Mason <chris.mason@fusionio.com>2012-08-30 20:42:30 -0400
committerChris Mason <chris.mason@oracle.com>2012-08-30 20:42:30 -0400
commit1e1e3f04296420c0e3cb46ffad56f247f6a17963 (patch)
tree8e176e41774716eb74c9b37b18010fb71896ba9c
parentcc3d54d5c8399547fb86135ec476b57ce49ec8d6 (diff)
downloadblktrace-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.c19
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);