X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=gfio.c;h=4521f75dfec68c07c54eb33bb80e441b5a55b853;hp=21f5fd9cb6d6fe8035d939cc0ead3b30d618489b;hb=dcaeb6060f2c7aef184cca5699e12c264ef0b834;hpb=b01329d04d9533d399f2477348662dbef20ca8ba diff --git a/gfio.c b/gfio.c index 21f5fd9c..4521f75d 100644 --- a/gfio.c +++ b/gfio.c @@ -23,6 +23,7 @@ */ #include #include +#include #include #include @@ -35,6 +36,7 @@ static int gfio_server_running; static const char *gfio_graph_font; static void gfio_update_thread_status(char *status_message, double perc); +static void view_log(GtkWidget *w, gpointer data); #define ARRAYSIZE(x) (sizeof((x)) / (sizeof((x)[0]))) @@ -121,6 +123,9 @@ struct gfio_client { struct gui *ui; GtkWidget *results_widget; GtkWidget *disk_util_frame; + GtkWidget *err_entry; + unsigned int job_added; + struct thread_options o; }; static void setup_iops_graph(struct gui *ui) @@ -131,6 +136,7 @@ static void setup_iops_graph(struct gui *ui) DRAWING_AREA_YDIM, gfio_graph_font); graph_title(ui->iops_graph, "IOPS"); graph_x_title(ui->iops_graph, "Time (secs)"); + graph_y_title(ui->iops_graph, "IOs / sec"); graph_add_label(ui->iops_graph, "Read IOPS"); graph_add_label(ui->iops_graph, "Write IOPS"); graph_set_color(ui->iops_graph, "Read IOPS", 0.13, 0.54, 0.13); @@ -146,6 +152,7 @@ static void setup_bandwidth_graph(struct gui *ui) DRAWING_AREA_YDIM, gfio_graph_font); graph_title(ui->bandwidth_graph, "Bandwidth"); graph_x_title(ui->bandwidth_graph, "Time (secs)"); + graph_y_title(ui->bandwidth_graph, "Kbytes / sec"); graph_add_label(ui->bandwidth_graph, "Read Bandwidth"); graph_add_label(ui->bandwidth_graph, "Write Bandwidth"); graph_set_color(ui->bandwidth_graph, "Read Bandwidth", 0.13, 0.54, 0.13); @@ -859,7 +866,7 @@ static void gfio_display_ts(struct fio_client *client, struct thread_stat *ts, entry_set_int_value(entry, ts->groupid); entry = new_info_entry_in_frame(box, "Jobs"); entry_set_int_value(entry, ts->members); - entry = new_info_entry_in_frame(box, "Error"); + gc->err_entry = entry = new_info_entry_in_frame(box, "Error"); entry_set_int_value(entry, ts->error); entry = new_info_entry_in_frame(box, "PID"); entry_set_int_value(entry, ts->pid); @@ -899,6 +906,9 @@ static void gfio_text_op(struct fio_client *client, struct fio_net_cmd *cmd) gtk_list_store_set(gc->ui->log_model, &iter, 2, p->level, -1); gtk_list_store_set(gc->ui->log_model, &iter, 3, p->buf, -1); + if (p->level == FIO_LOG_ERR) + view_log(NULL, (gpointer) gc->ui); + gdk_threads_leave(); } @@ -1198,30 +1208,23 @@ static void gfio_add_job_op(struct fio_client *client, struct fio_net_cmd *cmd) { struct cmd_add_job_pdu *p = (struct cmd_add_job_pdu *) cmd->payload; struct gfio_client *gc = client->client_data; + struct thread_options *o = &gc->o; struct gui *ui = gc->ui; char tmp[8]; - int i; - - p->iodepth = le32_to_cpu(p->iodepth); - p->rw = le32_to_cpu(p->rw); - - for (i = 0; i < 2; i++) { - p->min_bs[i] = le32_to_cpu(p->min_bs[i]); - p->max_bs[i] = le32_to_cpu(p->max_bs[i]); - } - p->numjobs = le32_to_cpu(p->numjobs); - p->group_reporting = le32_to_cpu(p->group_reporting); + convert_thread_options_to_cpu(o, &p->top); gdk_threads_enter(); - gtk_entry_set_text(GTK_ENTRY(ui->eta.name), (gchar *) p->jobname); - gtk_entry_set_text(GTK_ENTRY(ui->eta.iotype), ddir_str(p->rw)); - gtk_entry_set_text(GTK_ENTRY(ui->eta.ioengine), (gchar *) p->ioengine); + gtk_entry_set_text(GTK_ENTRY(ui->eta.name), (gchar *) o->name); + gtk_entry_set_text(GTK_ENTRY(ui->eta.iotype), ddir_str(o->td_ddir)); + gtk_entry_set_text(GTK_ENTRY(ui->eta.ioengine), (gchar *) o->ioengine); - sprintf(tmp, "%u", p->iodepth); + sprintf(tmp, "%u", o->iodepth); gtk_entry_set_text(GTK_ENTRY(ui->eta.iodepth), tmp); + gc->job_added++; + gdk_threads_leave(); } @@ -1257,6 +1260,20 @@ static void gfio_client_timed_out(struct fio_client *client) gdk_threads_leave(); } +static void gfio_client_stop(struct fio_client *client, struct fio_net_cmd *cmd) +{ + struct gfio_client *gc = client->client_data; + + gdk_threads_enter(); + + gfio_set_connected(gc->ui, 0); + + if (gc->err_entry) + entry_set_int_value(gc->err_entry, client->error); + + gdk_threads_leave(); +} + struct client_ops gfio_client_ops = { .text_op = gfio_text_op, .disk_util = gfio_disk_util_op, @@ -1267,6 +1284,7 @@ struct client_ops gfio_client_ops = { .quit = gfio_quit_op, .add_job = gfio_add_job_op, .timed_out = gfio_client_timed_out, + .stop = gfio_client_stop, .stay_connected = 1, };