From: mquinson Date: Fri, 9 Sep 2005 10:31:08 +0000 (+0000) Subject: Perf improvement: Change libdata to a set so that we can search for stuff by ID ... X-Git-Tag: v3.3~3640 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/d3d9d17ee821ac77506e8eae7897d8250b120bcb Perf improvement: Change libdata to a set so that we can search for stuff by ID (and thus reduce the insane amount of dict lookups); Kill some dead code git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1717 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/gras/Msg/msg.c b/src/gras/Msg/msg.c index d6cc3a401d..6281d3922f 100644 --- a/src/gras/Msg/msg.c +++ b/src/gras/Msg/msg.c @@ -27,6 +27,8 @@ char _GRAS_header[6]; static void *gras_msg_procdata_new() { gras_msg_procdata_t res = xbt_new(s_gras_msg_procdata_t,1); + res->name = xbt_strdup("gras_msg"); + res->name_len = 0; res->msg_queue = xbt_dynar_new(sizeof(s_gras_msg_t), NULL); res->cbl_list = xbt_dynar_new(sizeof(gras_cblist_t *),gras_cbl_free); res->timers = xbt_dynar_new(sizeof(s_gras_timer_t), NULL); @@ -50,8 +52,9 @@ static void gras_msg_procdata_free(void *data) { /* * Module registration */ +int gras_msg_libdata_id; void gras_msg_register() { - gras_procdata_add("gras_msg",gras_msg_procdata_new, gras_msg_procdata_free); + gras_msg_libdata_id = gras_procdata_add("gras_msg",gras_msg_procdata_new, gras_msg_procdata_free); } /* @@ -220,7 +223,7 @@ gras_msg_wait(double timeout, void *payload_got; int payload_size_got; double start, now; - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); int cpt; s_gras_msg_t msg; gras_socket_t expeditor_res = NULL; @@ -294,7 +297,7 @@ gras_msg_handle(double timeOut) { int payload_size; gras_msgtype_t msgtype; - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); gras_cblist_t *list=NULL; gras_msg_cb_t cb; @@ -416,7 +419,7 @@ gras_cbl_free(void *data){ void gras_cb_register(gras_msgtype_t msgtype, gras_msg_cb_t cb) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); gras_cblist_t *list=NULL; int cpt; @@ -447,7 +450,7 @@ void gras_cb_unregister(gras_msgtype_t msgtype, gras_msg_cb_t cb) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); gras_cblist_t *list; gras_msg_cb_t cb_cpt; int cpt; diff --git a/src/gras/Msg/msg_interface.h b/src/gras/Msg/msg_interface.h index 1f8f3b0183..a6b84c9108 100644 --- a/src/gras/Msg/msg_interface.h +++ b/src/gras/Msg/msg_interface.h @@ -20,6 +20,11 @@ * FIXME: it could be cleaned up ? */ typedef struct { + /* set headers */ + unsigned int ID; + char *name; + unsigned int name_len; + /*queue of msgs storing the ones got while msg_wait'ing for something else */ xbt_dynar_t msg_queue; /* elm type: s_gras_msg_t */ diff --git a/src/gras/Msg/msg_private.h b/src/gras/Msg/msg_private.h index 6e8b0ad84e..20f28c17c3 100644 --- a/src/gras/Msg/msg_private.h +++ b/src/gras/Msg/msg_private.h @@ -29,6 +29,8 @@ #include "gras/Msg/msg_interface.h" extern char _GRAS_header[6]; + +extern int gras_msg_libdata_id; /* The identifier of our libdata */ /** @brief Message instance */ typedef struct { diff --git a/src/gras/Msg/sg_msg.c b/src/gras/Msg/sg_msg.c index 2aeed71112..cce652bc2e 100644 --- a/src/gras/Msg/sg_msg.c +++ b/src/gras/Msg/sg_msg.c @@ -58,9 +58,8 @@ gras_msg_recv(gras_socket_t sock, int *payload_size) { m_task_t task=NULL; - /* gras_trp_sg_sock_data_t *sock_data = (gras_trp_sg_sock_data_t *)sock->data;*/ gras_msg_t msg; - gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_get("gras_trp"); + gras_trp_procdata_t pd=(gras_trp_procdata_t)gras_libdata_by_name("gras_trp"); xbt_assert1(!gras_socket_is_meas(sock), "Asked to receive a message on the measurement socket %p", sock); @@ -76,62 +75,4 @@ gras_msg_recv(gras_socket_t sock, free(msg); if (MSG_task_destroy(task) != MSG_OK) THROW0(system_error,0,"Error in MSG_task_destroy()"); - - - /* - THROW_UNIMPLEMENTED; - - xbt_ex_t e; - static gras_datadesc_type_t string_type=NULL; - char header[6]; - int cpt; - int r_arch; - char *msg_name=NULL; - - if (!string_type) { - string_type=gras_datadesc_by_name("string"); - xbt_assert(string_type); - } - - TRY { - gras_trp_chunk_recv(sock, header, 6); - } CATCH(e) { - RETHROW1("Exception caught while trying to get the mesage header on socket %p: %s", - sock); - } - - for (cpt=0; cpt<4; cpt++) - if (header[cpt] != _GRAS_header[cpt]) - THROW2(mismatch_error,0, - "Incoming bytes do not look like a GRAS message (header='%.4s' not '%.4s')",header,_GRAS_header); - if (header[4] != _GRAS_header[4]) - THROW2(mismatch_error,0,"GRAS protocol mismatch (got %d, use %d)", - (int)header[4], (int)_GRAS_header[4]); - r_arch = (int)header[5]; - DEBUG2("Handle an incoming message using protocol %d (remote is %s)", - (int)header[4],gras_datadesc_arch_name(r_arch)); - - gras_datadesc_recv(sock, string_type, r_arch, &msg_name); - TRY { - *msgtype = (gras_msgtype_t)xbt_set_get_by_name(_gras_msgtype_set,msg_name); - } CATCH(e) { - / * FIXME: Survive unknown messages * / - RETHROW1("Exception caught while retrieving the type associated to messages '%s' : %s", - msg_name); - } - free(msg_name); - - if ((*msgtype)->ctn_type) { - *payload_size=gras_datadesc_size((*msgtype)->ctn_type); - xbt_assert2(*payload_size > 0, - "%s %s", - "Dynamic array as payload is forbided for now (FIXME?).", - "Reference to dynamic array is allowed."); - *payload = xbt_malloc(*payload_size); - gras_datadesc_recv(sock, (*msgtype)->ctn_type, r_arch, *payload); - } else { - *payload = NULL; - *payload_size = 0; - } -*/ } diff --git a/src/gras/Msg/timer.c b/src/gras/Msg/timer.c index 3c2d398aaa..513b289613 100644 --- a/src/gras/Msg/timer.c +++ b/src/gras/Msg/timer.c @@ -18,7 +18,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(gras_timer,gras, /** @brief Request \a action to be called once in \a delay seconds */ void gras_timer_delay(double delay, void_f_void_t action) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); gras_timer_t timer = xbt_dynar_push_ptr(pd->timers); @@ -31,7 +31,7 @@ void gras_timer_delay(double delay, void_f_void_t action) { /** @brief Request \a action to be called every \a interval seconds */ void gras_timer_repeat(double interval, void_f_void_t action) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); gras_timer_t timer = xbt_dynar_push_ptr(pd->timers); @@ -44,7 +44,7 @@ void gras_timer_repeat(double interval, void_f_void_t action) { /** @brief Cancel a delayed task */ void gras_timer_cancel_delay(double interval, void_f_void_t action) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); int cursor,found; s_gras_timer_t timer; @@ -67,7 +67,7 @@ void gras_timer_cancel_delay(double interval, void_f_void_t action) { /** @brief Cancel a repetitive task */ void gras_timer_cancel_repeat(double interval, void_f_void_t action) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); int cursor,found; s_gras_timer_t timer; @@ -89,7 +89,7 @@ void gras_timer_cancel_repeat(double interval, void_f_void_t action) { /** @brief Cancel all delayed tasks */ void gras_timer_cancel_delay_all(void) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); int cursor, found; s_gras_timer_t timer; @@ -109,7 +109,7 @@ void gras_timer_cancel_delay_all(void) { /** @brief Cancel all repetitive tasks */ void gras_timer_cancel_repeat_all(void){ - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); int cursor, found; s_gras_timer_t timer; @@ -128,14 +128,14 @@ void gras_timer_cancel_repeat_all(void){ /** @brief Cancel all delayed and repetitive tasks */ void gras_timer_cancel_all(void) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); xbt_dynar_reset( pd->timers ); } /* returns 0 if it handled a timer, or the delay until next timer, or -1 if no armed timer */ double gras_msg_timer_handle(void) { - gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_get("gras_msg"); + gras_msg_procdata_t pd=(gras_msg_procdata_t)gras_libdata_by_id(gras_msg_libdata_id); int cursor; gras_timer_t timer; double now=gras_os_time();