Skip to content

Commit

Permalink
gfio: add and colorize graphs on main page, too
Browse files Browse the repository at this point in the history
The main UI tab had broken support for trim, fix that up. While
doing that, also ensure that we color code the text fields like
it was done for the per-job tabs.

Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
axboe committed Sep 25, 2012
1 parent 26b0b19 commit b78ca65
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 56 deletions.
31 changes: 19 additions & 12 deletions gclient.c
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ static void gfio_update_all_eta(struct jobs_eta *je)
char eta_str[128];
char output[256];
double perc = 0.0;
int i2p = 0;
int i, i2p = 0;

gdk_threads_enter();

Expand Down Expand Up @@ -483,8 +483,8 @@ static void gfio_update_all_eta(struct jobs_eta *je)
entry_set_int_value(ui->eta.jobs, je->nr_running);

if (je->eta_sec != INT_MAX && je->nr_running) {
char *iops_str[2];
char *rate_str[2];
char *iops_str[3];
char *rate_str[3];

if ((!je->eta_sec && !eta_good) || je->nr_ramp == je->nr_running)
strcpy(output, "-.-% done");
Expand All @@ -496,24 +496,30 @@ static void gfio_update_all_eta(struct jobs_eta *je)

rate_str[0] = num2str(je->rate[0], 5, 10, i2p);
rate_str[1] = num2str(je->rate[1], 5, 10, i2p);
rate_str[2] = num2str(je->rate[2], 5, 10, i2p);

iops_str[0] = num2str(je->iops[0], 4, 1, 0);
iops_str[1] = num2str(je->iops[1], 4, 1, 0);
iops_str[2] = num2str(je->iops[2], 4, 1, 0);

gtk_entry_set_text(GTK_ENTRY(ui->eta.read_bw), rate_str[0]);
gtk_entry_set_text(GTK_ENTRY(ui->eta.read_iops), iops_str[0]);
gtk_entry_set_text(GTK_ENTRY(ui->eta.write_bw), rate_str[1]);
gtk_entry_set_text(GTK_ENTRY(ui->eta.write_iops), iops_str[1]);
gtk_entry_set_text(GTK_ENTRY(ui->eta.trim_bw), rate_str[2]);
gtk_entry_set_text(GTK_ENTRY(ui->eta.trim_iops), iops_str[2]);

graph_add_xy_data(ui->graphs.iops_graph, ui->graphs.read_iops, je->elapsed_sec, je->iops[0], iops_str[0]);
graph_add_xy_data(ui->graphs.iops_graph, ui->graphs.write_iops, je->elapsed_sec, je->iops[1], iops_str[1]);
graph_add_xy_data(ui->graphs.iops_graph, ui->graphs.trim_iops, je->elapsed_sec, je->iops[2], iops_str[2]);
graph_add_xy_data(ui->graphs.bandwidth_graph, ui->graphs.read_bw, je->elapsed_sec, je->rate[0], rate_str[0]);
graph_add_xy_data(ui->graphs.bandwidth_graph, ui->graphs.write_bw, je->elapsed_sec, je->rate[1], rate_str[1]);
graph_add_xy_data(ui->graphs.bandwidth_graph, ui->graphs.trim_bw, je->elapsed_sec, je->rate[2], rate_str[2]);

free(rate_str[0]);
free(rate_str[1]);
free(iops_str[0]);
free(iops_str[1]);
for (i = 0; i < DDIR_RWDIR_CNT; i++) {
free(rate_str[i]);
free(iops_str[i]);
}
}

if (eta_str[0]) {
Expand Down Expand Up @@ -1170,7 +1176,7 @@ static void gfio_show_ddir_status(struct gfio_client *gc, GtkWidget *mbox,
struct group_run_stats *rs,
struct thread_stat *ts, int ddir)
{
const char *ddir_label[2] = { "Read", "Write" };
const char *ddir_label[3] = { "Read", "Write", "Trim" };
GtkWidget *frame, *label, *box, *vbox, *main_vbox;
unsigned long min[3], max[3], runt;
unsigned long long bw, iops;
Expand Down Expand Up @@ -1289,6 +1295,7 @@ static void __gfio_display_end_results(GtkWidget *win, struct gfio_client *gc,
struct group_run_stats *rs)
{
GtkWidget *box, *vbox, *entry, *scroll;
int i;

scroll = gtk_scrolled_window_new(NULL, NULL);
gtk_container_set_border_width(GTK_CONTAINER(scroll), 5);
Expand Down Expand Up @@ -1318,10 +1325,10 @@ static void __gfio_display_end_results(GtkWidget *win, struct gfio_client *gc,
entry = new_info_entry_in_frame(box, "PID");
entry_set_int_value(entry, ts->pid);

if (ts->io_bytes[DDIR_READ])
gfio_show_ddir_status(gc, vbox, rs, ts, DDIR_READ);
if (ts->io_bytes[DDIR_WRITE])
gfio_show_ddir_status(gc, vbox, rs, ts, DDIR_WRITE);
for (i = 0; i < DDIR_RWDIR_CNT; i++) {
if (ts->io_bytes[i])
gfio_show_ddir_status(gc, vbox, rs, ts, i);
}

gfio_show_latency_buckets(gc, vbox, ts);
gfio_show_cpu_usage(vbox, ts);
Expand Down
6 changes: 3 additions & 3 deletions gclient.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ extern void gfio_display_end_results(struct gfio_client *);
#define GFIO_WRITE_R 1.00
#define GFIO_WRITE_G 0.00
#define GFIO_WRITE_B 0.00
#define GFIO_IOPS_R 0.24
#define GFIO_IOPS_G 0.18
#define GFIO_IOPS_B 0.52
#define GFIO_TRIM_R 0.24
#define GFIO_TRIM_G 0.18
#define GFIO_TRIM_B 0.52

#endif
55 changes: 14 additions & 41 deletions gfio.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ static void setup_iops_graph(struct gfio_graphs *gg)
gg->trim_iops = graph_add_label(g, "Trim IOPS");
graph_set_color(g, gg->read_iops, GFIO_READ_R, GFIO_READ_G, GFIO_READ_B);
graph_set_color(g, gg->write_iops, GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B);
graph_set_color(g, gg->trim_iops, GFIO_IOPS_R, GFIO_IOPS_G, GFIO_IOPS_B);
graph_set_color(g, gg->trim_iops, GFIO_TRIM_R, GFIO_TRIM_G, GFIO_TRIM_B);
line_graph_set_data_count_limit(g, gfio_graph_limit);
graph_add_extra_space(g, 0.0, 0.0, 0.0, 0.0);
graph_set_graph_all_zeroes(g, 0);
Expand All @@ -107,7 +107,7 @@ static void setup_bandwidth_graph(struct gfio_graphs *gg)
gg->trim_bw = graph_add_label(g, "Trim Bandwidth");
graph_set_color(g, gg->read_bw, GFIO_READ_R, GFIO_READ_G, GFIO_READ_B);
graph_set_color(g, gg->write_bw, GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B);
graph_set_color(g, gg->trim_bw, GFIO_IOPS_R, GFIO_IOPS_G, GFIO_IOPS_B);
graph_set_color(g, gg->trim_bw, GFIO_TRIM_R, GFIO_TRIM_G, GFIO_TRIM_B);
graph_set_base_offset(g, 1);
line_graph_set_data_count_limit(g, 100);
graph_add_extra_space(g, 0.0, 0.0, 0.0, 0.0);
Expand Down Expand Up @@ -1346,24 +1346,10 @@ static void combo_entry_destroy(GtkWidget *widget, gpointer data)
multitext_free(&ge->eta.iodepth);
}

static void fill_color_from_rgb(GdkColor *c, gfloat r, gfloat g, gfloat b)
{
gint R, G, B;
gchar tmp[8];

memset(c, 0, sizeof(*c));
R = r * 255;
G = g * 255;
B = b * 255;
snprintf(tmp, sizeof(tmp), "#%02x%02x%02x", R, G, B);
gdk_color_parse(tmp, c);
}

static GtkWidget *new_client_page(struct gui_entry *ge)
{
GtkWidget *main_vbox, *probe, *probe_frame, *probe_box;
GtkWidget *scrolled_window, *bottom_align, *top_align, *top_vbox;
GdkColor color;

main_vbox = gtk_vbox_new(FALSE, 3);

Expand Down Expand Up @@ -1399,24 +1385,12 @@ static GtkWidget *new_client_page(struct gui_entry *ge)

probe_box = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(probe_frame), probe_box, FALSE, FALSE, 3);
ge->eta.read_bw = new_info_entry_in_frame(probe_box, "Read BW");
ge->eta.read_iops = new_info_entry_in_frame(probe_box, "IOPS");
ge->eta.write_bw = new_info_entry_in_frame(probe_box, "Write BW");
ge->eta.write_iops = new_info_entry_in_frame(probe_box, "IOPS");
ge->eta.trim_bw = new_info_entry_in_frame(probe_box, "Trim BW");
ge->eta.trim_iops = new_info_entry_in_frame(probe_box, "IOPS");

fill_color_from_rgb(&color, GFIO_READ_R, GFIO_READ_G, GFIO_READ_B);
gtk_widget_modify_text(ge->eta.read_bw, GTK_STATE_NORMAL, &color);
gtk_widget_modify_text(ge->eta.read_iops, GTK_STATE_NORMAL, &color);

fill_color_from_rgb(&color, GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B);
gtk_widget_modify_text(ge->eta.write_bw, GTK_STATE_NORMAL, &color);
gtk_widget_modify_text(ge->eta.write_iops, GTK_STATE_NORMAL, &color);

fill_color_from_rgb(&color, GFIO_IOPS_R, GFIO_IOPS_G, GFIO_IOPS_B);
gtk_widget_modify_text(ge->eta.trim_bw, GTK_STATE_NORMAL, &color);
gtk_widget_modify_text(ge->eta.trim_iops, GTK_STATE_NORMAL, &color);
ge->eta.read_bw = new_info_entry_in_frame_rgb(probe_box, "Read BW", GFIO_READ_R, GFIO_READ_G, GFIO_READ_B);
ge->eta.read_iops = new_info_entry_in_frame_rgb(probe_box, "IOPS", GFIO_READ_R, GFIO_READ_G, GFIO_READ_B);
ge->eta.write_bw = new_info_entry_in_frame_rgb(probe_box, "Write BW", GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B);
ge->eta.write_iops = new_info_entry_in_frame_rgb(probe_box, "IOPS", GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B);
ge->eta.trim_bw = new_info_entry_in_frame_rgb(probe_box, "Trim BW", GFIO_TRIM_R, GFIO_TRIM_G, GFIO_TRIM_B);
ge->eta.trim_iops = new_info_entry_in_frame_rgb(probe_box, "IOPS", GFIO_TRIM_R, GFIO_TRIM_G, GFIO_TRIM_B);

/*
* Only add this if we have a commit rate
Expand Down Expand Up @@ -1499,13 +1473,12 @@ static GtkWidget *new_main_page(struct gui *ui)
probe_box = gtk_hbox_new(FALSE, 3);
gtk_box_pack_start(GTK_BOX(probe_frame), probe_box, FALSE, FALSE, 3);
ui->eta.jobs = new_info_entry_in_frame(probe_box, "Running");
ui->eta.read_bw = new_info_entry_in_frame(probe_box, "Read BW");
ui->eta.read_iops = new_info_entry_in_frame(probe_box, "IOPS");
ui->eta.write_bw = new_info_entry_in_frame(probe_box, "Write BW");
ui->eta.write_iops = new_info_entry_in_frame(probe_box, "IOPS");
ui->eta.trim_bw = new_info_entry_in_frame(probe_box, "Trim BW");
ui->eta.trim_iops = new_info_entry_in_frame(probe_box, "IOPS");

ui->eta.read_bw = new_info_entry_in_frame_rgb(probe_box, "Read BW", GFIO_READ_R, GFIO_READ_G, GFIO_READ_B);
ui->eta.read_iops = new_info_entry_in_frame_rgb(probe_box, "IOPS", GFIO_READ_R, GFIO_READ_G, GFIO_READ_B);
ui->eta.write_bw = new_info_entry_in_frame_rgb(probe_box, "Write BW", GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B);
ui->eta.write_iops = new_info_entry_in_frame_rgb(probe_box, "IOPS", GFIO_WRITE_R, GFIO_WRITE_G, GFIO_WRITE_B);
ui->eta.trim_bw = new_info_entry_in_frame_rgb(probe_box, "Trim BW", GFIO_TRIM_R, GFIO_TRIM_G, GFIO_TRIM_B);
ui->eta.trim_iops = new_info_entry_in_frame_rgb(probe_box, "IOPS", GFIO_TRIM_R, GFIO_TRIM_G, GFIO_TRIM_B);

/*
* Only add this if we have a commit rate
Expand Down
25 changes: 25 additions & 0 deletions ghelpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,31 @@ GtkWidget *new_info_entry_in_frame(GtkWidget *box, const char *label)
return entry;
}

static void fill_color_from_rgb(GdkColor *c, gfloat r, gfloat g, gfloat b)
{
gint R, G, B;
gchar tmp[8];

memset(c, 0, sizeof(*c));
R = r * 255;
G = g * 255;
B = b * 255;
snprintf(tmp, sizeof(tmp), "#%02x%02x%02x", R, G, B);
gdk_color_parse(tmp, c);
}

GtkWidget *new_info_entry_in_frame_rgb(GtkWidget *box, const char *label,
gfloat r, gfloat g, gfloat b)
{
GtkWidget *entry;
GdkColor c;

entry = new_info_entry_in_frame(box, label);
fill_color_from_rgb(&c, r, g, b);
gtk_widget_modify_text(entry, GTK_STATE_NORMAL, &c);
return entry;
}

GtkWidget *new_info_label_in_frame(GtkWidget *box, const char *label)
{
GtkWidget *label_widget;
Expand Down
2 changes: 2 additions & 0 deletions ghelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
GtkWidget *new_combo_entry_in_frame(GtkWidget *box, const char *label);
GtkWidget *new_info_entry_in_frame(GtkWidget *box, const char *label);
GtkWidget *new_info_label_in_frame(GtkWidget *box, const char *label);
GtkWidget *new_info_entry_in_frame_rgb(GtkWidget *box, const char *label,
gfloat r, gfloat g, gfloat b);
GtkWidget *create_spinbutton(GtkWidget *hbox, double min, double max, double defval);
void label_set_int_value(GtkWidget *entry, unsigned int val);
void entry_set_int_value(GtkWidget *entry, unsigned int val);
Expand Down

0 comments on commit b78ca65

Please sign in to comment.