gfio: correct depths view
authorJens Axboe <axboe@kernel.dk>
Tue, 6 Mar 2012 08:17:59 +0000 (09:17 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 6 Mar 2012 08:17:59 +0000 (09:17 +0100)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
gfio.c

diff --git a/gfio.c b/gfio.c
index 86723a423c7371f85745bf7758647bc461d70854..15bf8f80602a79fda092809685ef53d660f1cacd 100644 (file)
--- 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);
 }