From 19998dbcb6712ba5885c059428ac511d306890cf Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 6 Mar 2012 09:17:59 +0100 Subject: [PATCH] gfio: correct depths view Signed-off-by: Jens Axboe --- gfio.c | 120 +++++++++++++++++++++++++++++++++------------------------ 1 file changed, 69 insertions(+), 51 deletions(-) diff --git a/gfio.c b/gfio.c index 86723a42..15bf8f80 100644 --- a/gfio.c +++ b/gfio.c @@ -599,85 +599,103 @@ static void gfio_show_cpu_usage(GtkWidget *vbox, struct thread_stat *ts) entry = new_info_entry_in_frame(box, "Minor faults"); entry_set_int_value(entry, ts->minf); } - -static void gfio_show_io_depths(GtkWidget *vbox, struct thread_stat *ts) +static void gfio_add_sc_depths_tree(GtkListStore *model, + struct thread_stat *ts, unsigned int len, + int submit) { double io_u_dist[FIO_IO_U_MAP_NR]; - double io_u_dist_s[FIO_IO_U_MAP_NR]; - double io_u_dist_c[FIO_IO_U_MAP_NR]; - GtkWidget *frame, *box, *tree_view; - GtkTreeSelection *selection; - GtkListStore *model; GtkTreeIter iter; - GType types[FIO_IO_U_MAP_NR + 1]; - int i; - const char *labels[] = { "Type", "0", "4", "8", "16", "32", "64", ">= 64" }; + /* Bits 0, and 3-8 */ + const int add_mask = 0x1f9; + int i, j; - stat_calc_dist(ts->io_u_map, ts_total_io_u(ts), io_u_dist); - stat_calc_dist(ts->io_u_submit, ts->total_submit, io_u_dist_s); - stat_calc_dist(ts->io_u_complete, ts->total_complete, io_u_dist_c); + if (submit) + stat_calc_dist(ts->io_u_submit, ts->total_submit, io_u_dist); + else + stat_calc_dist(ts->io_u_complete, ts->total_complete, io_u_dist); - frame = gtk_frame_new("IO depths"); - gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); + gtk_list_store_append(model, &iter); - box = gtk_hbox_new(FALSE, 3); - gtk_container_add(GTK_CONTAINER(frame), box); + gtk_list_store_set(model, &iter, 0, submit ? "Submit" : "Complete", -1); - for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) - types[i] = G_TYPE_STRING; + for (i = 1, j = 0; i < len; i++) { + char fbuf[32]; - model = gtk_list_store_newv(FIO_IO_U_MAP_NR + 1, types); + if (!(add_mask & (1UL << (i - 1)))) + sprintf(fbuf, "0.0%%"); + else { + sprintf(fbuf, "%3.1f%%", io_u_dist[j]); + j++; + } - tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); - gtk_widget_set_can_focus(tree_view, FALSE); + gtk_list_store_set(model, &iter, i, fbuf, -1); + } - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); - gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE); +} - for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) - tree_view_column(tree_view, i, labels[i], ALIGN_RIGHT | UNSORTABLE); +static void gfio_add_total_depths_tree(GtkListStore *model, + struct thread_stat *ts, unsigned int len) +{ + double io_u_dist[FIO_IO_U_MAP_NR]; + GtkTreeIter iter; + /* Bits 1-6, and 8 */ + const int add_mask = 0x17e; + int i, j; + + stat_calc_dist(ts->io_u_map, ts_total_io_u(ts), io_u_dist); gtk_list_store_append(model, &iter); - for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) { + gtk_list_store_set(model, &iter, 0, "Total", -1); + + for (i = 1, j = 0; i < len; i++) { char fbuf[32]; - if (i == 0) { - gtk_list_store_set(model, &iter, i, "Total", -1); - continue; + if (!(add_mask & (1UL << (i - 1)))) + sprintf(fbuf, "0.0%%"); + else { + sprintf(fbuf, "%3.1f%%", io_u_dist[j]); + j++; } - sprintf(fbuf, "%3.1f%%", io_u_dist[i - 1]); gtk_list_store_set(model, &iter, i, fbuf, -1); } - gtk_list_store_append(model, &iter); +} - for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) { - char fbuf[32]; +static void gfio_show_io_depths(GtkWidget *vbox, struct thread_stat *ts) +{ + GtkWidget *frame, *box, *tree_view; + GtkTreeSelection *selection; + GtkListStore *model; + GType types[FIO_IO_U_MAP_NR + 1]; + int i; +#define NR_LABELS 10 + const char *labels[NR_LABELS] = { "Depth", "0", "1", "2", "4", "8", "16", "32", "64", ">= 64" }; - if (i == 0) { - gtk_list_store_set(model, &iter, i, "Submit", -1); - continue; - } + frame = gtk_frame_new("IO depths"); + gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, FALSE, 5); - sprintf(fbuf, "%3.1f%%", io_u_dist_s[i - 1]); - gtk_list_store_set(model, &iter, i, fbuf, -1); - } + box = gtk_hbox_new(FALSE, 3); + gtk_container_add(GTK_CONTAINER(frame), box); - gtk_list_store_append(model, &iter); + for (i = 0; i < NR_LABELS; i++) + types[i] = G_TYPE_STRING; - for (i = 0; i < FIO_IO_U_MAP_NR + 1; i++) { - char fbuf[32]; + model = gtk_list_store_newv(NR_LABELS, types); - if (i == 0) { - gtk_list_store_set(model, &iter, i, "Complete", -1); - continue; - } + tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); + gtk_widget_set_can_focus(tree_view, FALSE); - sprintf(fbuf, "%3.1f%%", io_u_dist_c[i - 1]); - gtk_list_store_set(model, &iter, i, fbuf, -1); - } + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view)); + gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE); + + for (i = 0; i < NR_LABELS; i++) + tree_view_column(tree_view, i, labels[i], ALIGN_RIGHT | UNSORTABLE); + + gfio_add_total_depths_tree(model, ts, NR_LABELS); + gfio_add_sc_depths_tree(model, ts, NR_LABELS, 1); + gfio_add_sc_depths_tree(model, ts, NR_LABELS, 0); gtk_box_pack_start(GTK_BOX(box), tree_view, TRUE, FALSE, 3); } -- 2.25.1