X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d6839b9c710b3b0e54743f4a700131f6105c02c8..f25af1e2829458e33a3a0b74c75865c89dff5f9e:/examples/gras/replay/xbt_workload.c diff --git a/examples/gras/replay/xbt_workload.c b/examples/gras/replay/xbt_workload.c index 1dbdff7837..f3a8a79855 100644 --- a/examples/gras/replay/xbt_workload.c +++ b/examples/gras/replay/xbt_workload.c @@ -1,4 +1,5 @@ -/* Copyright (c) 2009 Da SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -14,17 +15,19 @@ #include "workload.h" #include "gras/datadesc.h" -XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_workload,xbt, "Workload characterisation mecanisms"); +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_workload, xbt, + "Workload characterisation mecanisms"); -xbt_workload_elm_t xbt_workload_elm_parse(char *line) { - xbt_workload_elm_t res = xbt_new(s_xbt_workload_elm_t,1); - res->date=-1; - res->comment=NULL; /* it's not enough to memset for valgrind, apparently */ - res->who=NULL; - res->str_arg=NULL; +xbt_workload_elm_t xbt_workload_elm_parse(char *line) +{ + xbt_workload_elm_t res = xbt_new(s_xbt_workload_elm_t, 1); + res->date = -1; + res->comment = NULL; /* it's not enough to memset for valgrind, apparently */ + res->who = NULL; + res->str_arg = NULL; - xbt_dynar_t w = xbt_str_split(line," "); + xbt_dynar_t w = xbt_str_split(line, " "); if (xbt_dynar_length(w) == 0) { free(res); @@ -32,38 +35,40 @@ xbt_workload_elm_t xbt_workload_elm_parse(char *line) { return NULL; } - char **words = xbt_dynar_get_ptr(w,0); - int i=0; + char **words = xbt_dynar_get_ptr(w, 0); + int i = 0; if (words[i][0] == '[') { - sscanf(words[i]+1,"%lg",&(res->date)); + sscanf(words[i] + 1, "%lg", &(res->date)); i++; } res->who = xbt_strdup(words[i++]); - if (!strcmp(words[i],"recv")) { + if (!strcmp(words[i], "recv")) { res->action = XBT_WORKLOAD_RECV; res->str_arg = xbt_strdup(words[++i]); - sscanf(words[++i],"%lg",&(res->d_arg)); + sscanf(words[++i], "%lg", &(res->d_arg)); - } else if (!strcmp(words[i],"send")) { + } else if (!strcmp(words[i], "send")) { res->action = XBT_WORKLOAD_SEND; res->str_arg = xbt_strdup(words[++i]); - sscanf(words[++i],"%lg",&(res->d_arg)); + sscanf(words[++i], "%lg", &(res->d_arg)); - } else if (!strcmp(words[i],"compute")) { + } else if (!strcmp(words[i], "compute")) { res->action = XBT_WORKLOAD_COMPUTE; - sscanf(words[++i],"%lg",&(res->d_arg)); + sscanf(words[++i], "%lg", &(res->d_arg)); } else { - xbt_die(bprintf("Unparsable command: %s (in %s)",words[i],line)); + xbt_die("Unparsable command: %s (in %s)", words[i], line); } i++; if (words[i] && words[i][0] == '#') { - res->comment = xbt_strdup(strchr(line,'#')+1); + res->comment = xbt_strdup(strchr(line, '#') + 1); } xbt_dynar_free(&w); return res; } -void xbt_workload_elm_free(xbt_workload_elm_t cmd) { + +void xbt_workload_elm_free(xbt_workload_elm_t cmd) +{ if (!cmd) return; if (cmd->who) @@ -74,55 +79,65 @@ void xbt_workload_elm_free(xbt_workload_elm_t cmd) { free(cmd->str_arg); free(cmd); } -void xbt_workload_elm_free_voidp(void*cmd) { - xbt_workload_elm_free(*(xbt_workload_elm_t*)cmd); + +void xbt_workload_elm_free_voidp(void *cmd) +{ + xbt_workload_elm_free(*(xbt_workload_elm_t *) cmd); } -char *xbt_workload_elm_to_string(xbt_workload_elm_t cmd) { +char *xbt_workload_elm_to_string(xbt_workload_elm_t cmd) +{ char res[2048]; char *addon; - res[0]='\0'; - if (cmd==NULL) + res[0] = '\0'; + if (cmd == NULL) return xbt_strdup("(null command)"); if (cmd->date != -1) { - addon=bprintf("[%f] ",cmd->date); - strcat(res,addon); + addon = bprintf("[%f] ", cmd->date); + strcat(res, addon); free(addon); } - addon= bprintf("'%s' ",cmd->who); - strcat(res,addon);free(addon); + addon = bprintf("'%s' ", cmd->who); + strcat(res, addon); + free(addon); switch (cmd->action) { case XBT_WORKLOAD_COMPUTE: - addon=bprintf("computed %f flops",cmd->d_arg); - strcat(res,addon);free(addon); + addon = bprintf("computed %f flops", cmd->d_arg); + strcat(res, addon); + free(addon); break; case XBT_WORKLOAD_SEND: - addon=bprintf("sent %f bytes to '%s'",cmd->d_arg,cmd->str_arg); - strcat(res,addon);free(addon); + addon = bprintf("sent %f bytes to '%s'", cmd->d_arg, cmd->str_arg); + strcat(res, addon); + free(addon); break; case XBT_WORKLOAD_RECV: - addon=bprintf("received %f bytes from '%s'",cmd->d_arg,cmd->str_arg); - strcat(res,addon);free(addon); + addon = + bprintf("received %f bytes from '%s'", cmd->d_arg, cmd->str_arg); + strcat(res, addon); + free(addon); break; default: - xbt_die(bprintf("Unknown command %d in '%s...'",cmd->action,res)); + xbt_die("Unknown command %d in '%s...'", cmd->action, res); } if (cmd->comment) { - addon=bprintf(" (comment: %s)",cmd->comment); - strcat(res,addon);free(addon); + addon = bprintf(" (comment: %s)", cmd->comment); + strcat(res, addon); + free(addon); } return xbt_strdup(res); } -int xbt_workload_elm_cmp_who_date(const void* _c1, const void* _c2) { - xbt_workload_elm_t c1=*(xbt_workload_elm_t*)_c1; - xbt_workload_elm_t c2=*(xbt_workload_elm_t*)_c2; +int xbt_workload_elm_cmp_who_date(const void *_c1, const void *_c2) +{ + xbt_workload_elm_t c1 = *(xbt_workload_elm_t *) _c1; + xbt_workload_elm_t c2 = *(xbt_workload_elm_t *) _c2; if (!c1 || !c1->who) return -1; if (!c2 || !c2->who) return 1; - int r = strcmp(c1->who,c2->who); + int r = strcmp(c1->who, c2->who); if (r) return r; if (c1->date == c2->date) @@ -131,64 +146,81 @@ int xbt_workload_elm_cmp_who_date(const void* _c1, const void* _c2) { return -1; return 1; } -void xbt_workload_sort_who_date(xbt_dynar_t c) { - qsort(xbt_dynar_get_ptr(c,0),xbt_dynar_length(c),sizeof(xbt_workload_elm_t),xbt_workload_elm_cmp_who_date); + +void xbt_workload_sort_who_date(xbt_dynar_t c) +{ + qsort(xbt_dynar_get_ptr(c, 0), xbt_dynar_length(c), + sizeof(xbt_workload_elm_t), xbt_workload_elm_cmp_who_date); } -xbt_dynar_t xbt_workload_parse_file(char *filename) { + +xbt_dynar_t xbt_workload_parse_file(char *filename) +{ FILE *file_in; - file_in = fopen(filename,"r"); - xbt_assert1(file_in, "cannot open tracefile '%s'",filename); + file_in = fopen(filename, "r"); + xbt_assert1(file_in, "cannot open tracefile '%s'", filename); char *str_in = xbt_str_from_file(file_in); fclose(file_in); - xbt_dynar_t in = xbt_str_split(str_in,"\n"); + xbt_dynar_t in = xbt_str_split(str_in, "\n"); free(str_in); - xbt_dynar_t cmds=xbt_dynar_new(sizeof(xbt_workload_elm_t),xbt_workload_elm_free_voidp); + xbt_dynar_t cmds = + xbt_dynar_new(sizeof(xbt_workload_elm_t), + xbt_workload_elm_free_voidp); unsigned int cursor; char *line; - xbt_dynar_foreach(in,cursor,line) { + xbt_dynar_foreach(in, cursor, line) { xbt_workload_elm_t cmd = xbt_workload_elm_parse(line); if (cmd) - xbt_dynar_push(cmds,&cmd); + xbt_dynar_push(cmds, &cmd); } - xbt_dynar_shrink(cmds,0); + xbt_dynar_shrink(cmds, 0); xbt_dynar_free(&in); return cmds; } -void xbt_workload_declare_datadesc(void) { +void xbt_workload_declare_datadesc(void) +{ gras_datadesc_type_t ddt; ddt = gras_datadesc_struct("s_xbt_workload_elm_t"); - gras_datadesc_struct_append(ddt,"who",gras_datadesc_by_name("string")); - gras_datadesc_struct_append(ddt,"comment",gras_datadesc_by_name("string")); - gras_datadesc_struct_append(ddt,"action",gras_datadesc_by_name("int")); - gras_datadesc_struct_append(ddt,"date",gras_datadesc_by_name("double")); - gras_datadesc_struct_append(ddt,"d_arg",gras_datadesc_by_name("double")); - gras_datadesc_struct_append(ddt,"str_arg",gras_datadesc_by_name("string")); + gras_datadesc_struct_append(ddt, "who", gras_datadesc_by_name("string")); + gras_datadesc_struct_append(ddt, "comment", + gras_datadesc_by_name("string")); + gras_datadesc_struct_append(ddt, "action", gras_datadesc_by_name("int")); + gras_datadesc_struct_append(ddt, "date", + gras_datadesc_by_name("double")); + gras_datadesc_struct_append(ddt, "d_arg", + gras_datadesc_by_name("double")); + gras_datadesc_struct_append(ddt, "str_arg", + gras_datadesc_by_name("string")); gras_datadesc_struct_close(ddt); - gras_datadesc_ref("xbt_workload_elm_t",ddt); + gras_datadesc_ref("xbt_workload_elm_t", ddt); ddt = gras_datadesc_struct("s_xbt_workload_data_chunk_t"); - gras_datadesc_struct_append(ddt,"size",gras_datadesc_by_name("int")); + gras_datadesc_struct_append(ddt, "size", gras_datadesc_by_name("int")); gras_datadesc_cb_field_push(ddt, "size"); - gras_datadesc_struct_append(ddt,"chunk",gras_datadesc_ref_pop_arr(gras_datadesc_by_name("char"))); + gras_datadesc_struct_append(ddt, "chunk", + gras_datadesc_ref_pop_arr + (gras_datadesc_by_name("char"))); gras_datadesc_struct_close(ddt); - gras_datadesc_ref("xbt_workload_data_chunk_t",ddt); + gras_datadesc_ref("xbt_workload_data_chunk_t", ddt); } -xbt_workload_data_chunk_t xbt_workload_data_chunk_new(int size) { - xbt_workload_data_chunk_t res = xbt_new0(s_xbt_workload_data_chunk_t,1); - res->size = size; - res->chunk = xbt_new(char,size-sizeof(res)-sizeof(int)); +xbt_workload_data_chunk_t xbt_workload_data_chunk_new(int size) +{ + xbt_workload_data_chunk_t res = xbt_new0(s_xbt_workload_data_chunk_t, 1); + res->size = size - sizeof(res) - sizeof(int); + res->chunk = xbt_new(char, res->size); return res; } -void xbt_workload_data_chunk_free(xbt_workload_data_chunk_t c) { + +void xbt_workload_data_chunk_free(xbt_workload_data_chunk_t c) +{ free(c->chunk); free(c); }