From 21293eccf1acadbbff45a14f5262981f4aae76cf Mon Sep 17 00:00:00 2001 From: John Jenkins Date: Wed, 23 Sep 2015 15:50:21 -0500 Subject: [PATCH] clean up parameter usage in base modelnet/sched --- codes/model-net-sched.h | 36 ++-- codes/model-net.h | 1 + src/models/networks/model-net/model-net-lp.c | 25 ++- .../networks/model-net/model-net-sched-impl.c | 190 +++++++++--------- .../networks/model-net/model-net-sched.c | 8 +- src/models/networks/model-net/model-net.c | 13 +- src/models/networks/model-net/simplenet-upd.c | 1 + 7 files changed, 142 insertions(+), 132 deletions(-) diff --git a/codes/model-net-sched.h b/codes/model-net-sched.h index 5f7786e..f2f02d2 100644 --- a/codes/model-net-sched.h +++ b/codes/model-net-sched.h @@ -88,17 +88,17 @@ typedef struct model_net_sched_interface { // prio (currently the only user): int priority // - NULL arguments should be treated as "use default value" void (*add)( - model_net_request * req, - const mn_sched_params * sched_params, - int remote_event_size, - void * remote_event, - int local_event_size, - void * local_event, - void * sched, - model_net_sched_rc * rc, - tw_lp * lp); + const model_net_request * req, + const mn_sched_params * sched_params, + int remote_event_size, + void * remote_event, + int local_event_size, + void * local_event, + void * sched, + model_net_sched_rc * rc, + tw_lp * lp); // reverse the previous request addition - void (*add_rc)(void *sched, model_net_sched_rc *rc, tw_lp *lp); + void (*add_rc)(void *sched, const model_net_sched_rc *rc, tw_lp *lp); // schedule the next packet for processing by the model int (*next)( tw_stime * poffset, @@ -109,10 +109,10 @@ typedef struct model_net_sched_interface { tw_lp * lp); // reverse schedule the previous packet void (*next_rc)( - void * sched, - void * rc_event_save, - model_net_sched_rc * rc, - tw_lp * lp); + void * sched, + const void * rc_event_save, + const model_net_sched_rc * rc, + tw_lp * lp); } model_net_sched_interface; /// overall scheduler struct - type puns the actual data structure @@ -166,8 +166,8 @@ int model_net_sched_next( void model_net_sched_next_rc( model_net_sched *sched, - void *rc_event_save, - model_net_sched_rc *sched_rc, + const void *rc_event_save, + const model_net_sched_rc *sched_rc, tw_lp *lp); /// enter a new request into the scheduler, storing any info needed for rc in @@ -175,7 +175,7 @@ void model_net_sched_next_rc( /// sched_msg_params is scheduler-specific parameters (currently only used by /// prio scheduler) void model_net_sched_add( - model_net_request *req, + const model_net_request *req, const mn_sched_params * sched_params, int remote_event_size, void * remote_event, @@ -187,7 +187,7 @@ void model_net_sched_add( void model_net_sched_add_rc( model_net_sched *sched, - model_net_sched_rc *sched_rc, + const model_net_sched_rc *sched_rc, tw_lp *lp); // set default parameters for messages that don't specify any diff --git a/codes/model-net.h b/codes/model-net.h index 142ca0a..8b47e22 100644 --- a/codes/model-net.h +++ b/codes/model-net.h @@ -89,6 +89,7 @@ typedef struct model_net_request { tw_lpid dest_mn_lp; // destination modelnet lp tw_lpid src_lp; uint64_t msg_size; + uint64_t pull_size; uint64_t packet_size; int net_id; int is_pull; diff --git a/src/models/networks/model-net/model-net-lp.c b/src/models/networks/model-net/model-net-lp.c index e0b56c0..56d4b6d 100644 --- a/src/models/networks/model-net/model-net-lp.c +++ b/src/models/networks/model-net/model-net-lp.c @@ -532,20 +532,23 @@ void model_net_method_send_msg_recv_event( else model_net_sched_set_default_params(&m->msg.m_base.sched_params); - m->msg.m_base.req.final_dest_lp = final_dest_lp; - m->msg.m_base.req.src_lp = src_lp; + model_net_request *r = &m->msg.m_base.req; + r->final_dest_lp = final_dest_lp; + r->src_lp = src_lp; // for "recv" events, set the "dest" to this LP in the case of a pull event - m->msg.m_base.req.dest_mn_lp = sender->gid; - m->msg.m_base.req.msg_size = is_pull ? pull_size : msg_size; - m->msg.m_base.req.packet_size = m->msg.m_base.req.msg_size; - m->msg.m_base.req.net_id = net_id; - m->msg.m_base.req.is_pull = is_pull; - m->msg.m_base.req.remote_event_size = remote_event_size; - m->msg.m_base.req.self_event_size = 0; + r->dest_mn_lp = sender->gid; + r->pull_size = pull_size; + r->msg_size = msg_size; + // TODO: document why we're setting packet_size this way + r->packet_size = msg_size; + r->net_id = net_id; + r->is_pull = is_pull; + r->remote_event_size = remote_event_size; + r->self_event_size = 0; m->msg.m_base.is_from_remote = 1; - strncpy(m->msg.m_base.req.category, category, CATEGORY_NAME_MAX-1); - m->msg.m_base.req.category[CATEGORY_NAME_MAX-1] = '\0'; + strncpy(r->category, category, CATEGORY_NAME_MAX-1); + r->category[CATEGORY_NAME_MAX-1] = '\0'; if (remote_event_size > 0){ void * m_dat = model_net_method_get_edata(net_id, msg); diff --git a/src/models/networks/model-net/model-net-sched-impl.c b/src/models/networks/model-net/model-net-sched-impl.c index 0939759..9f6897a 100644 --- a/src/models/networks/model-net/model-net-sched-impl.c +++ b/src/models/networks/model-net/model-net-sched-impl.c @@ -14,11 +14,10 @@ #define MN_SCHED_DEBUG_VERBOSE 0 -#if MN_SCHED_DEBUG_VERBOSE -#define dprintf(_fmt, ...) printf(_fmt, ##__VA_ARGS__) -#else -#define dprintf(_fmt, ...) -#endif +#define dprintf(_fmt, ...) \ + do { \ + if (MN_SCHED_DEBUG_VERBOSE) printf(_fmt, ##__VA_ARGS__); \ + } while(0) /// scheduler-specific data structures @@ -62,16 +61,16 @@ static void fcfs_init ( void ** sched); static void fcfs_destroy (void *sched); static void fcfs_add ( - model_net_request * req, - const mn_sched_params * sched_params, - int remote_event_size, - void * remote_event, - int local_event_size, - void * local_event, - void * sched, - model_net_sched_rc * rc, - tw_lp * lp); -static void fcfs_add_rc(void *sched, model_net_sched_rc *rc, tw_lp *lp); + const model_net_request * req, + const mn_sched_params * sched_params, + int remote_event_size, + void * remote_event, + int local_event_size, + void * local_event, + void * sched, + model_net_sched_rc * rc, + tw_lp * lp); +static void fcfs_add_rc(void *sched, const model_net_sched_rc *rc, tw_lp *lp); static int fcfs_next( tw_stime * poffset, void * sched, @@ -79,10 +78,10 @@ static int fcfs_next( model_net_sched_rc * rc, tw_lp * lp); static void fcfs_next_rc( - void * sched, - void * rc_event_save, - model_net_sched_rc * rc, - tw_lp * lp); + void * sched, + const void * rc_event_save, + const model_net_sched_rc * rc, + tw_lp * lp); // ROUND-ROBIN static void rr_init ( @@ -92,16 +91,16 @@ static void rr_init ( void ** sched); static void rr_destroy (void *sched); static void rr_add ( - model_net_request * req, - const mn_sched_params * sched_params, - int remote_event_size, - void * remote_event, - int local_event_size, - void * local_event, - void * sched, - model_net_sched_rc * rc, - tw_lp * lp); -static void rr_add_rc(void *sched, model_net_sched_rc *rc, tw_lp *lp); + const model_net_request * req, + const mn_sched_params * sched_params, + int remote_event_size, + void * remote_event, + int local_event_size, + void * local_event, + void * sched, + model_net_sched_rc * rc, + tw_lp * lp); +static void rr_add_rc(void *sched, const model_net_sched_rc *rc, tw_lp *lp); static int rr_next( tw_stime * poffset, void * sched, @@ -109,10 +108,10 @@ static int rr_next( model_net_sched_rc * rc, tw_lp * lp); static void rr_next_rc ( - void * sched, - void * rc_event_save, - model_net_sched_rc * rc, - tw_lp * lp); + void * sched, + const void * rc_event_save, + const model_net_sched_rc * rc, + tw_lp * lp); static void prio_init ( const struct model_net_method * method, const model_net_sched_cfg_params * params, @@ -120,16 +119,16 @@ static void prio_init ( void ** sched); static void prio_destroy (void *sched); static void prio_add ( - model_net_request * req, - const mn_sched_params * sched_params, - int remote_event_size, - void * remote_event, - int local_event_size, - void * local_event, - void * sched, - model_net_sched_rc * rc, - tw_lp * lp); -static void prio_add_rc(void *sched, model_net_sched_rc *rc, tw_lp *lp); + const model_net_request * req, + const mn_sched_params * sched_params, + int remote_event_size, + void * remote_event, + int local_event_size, + void * local_event, + void * sched, + model_net_sched_rc * rc, + tw_lp * lp); +static void prio_add_rc(void *sched, const model_net_sched_rc *rc, tw_lp *lp); static int prio_next( tw_stime * poffset, void * sched, @@ -137,10 +136,10 @@ static int prio_next( model_net_sched_rc * rc, tw_lp * lp); static void prio_next_rc ( - void * sched, - void * rc_event_save, - model_net_sched_rc * rc, - tw_lp * lp); + void * sched, + const void * rc_event_save, + const model_net_sched_rc * rc, + tw_lp * lp); /// function tables (names defined by X macro in model-net-sched.h) static const model_net_sched_interface fcfs_tab = @@ -176,20 +175,20 @@ void fcfs_destroy(void *sched){ } void fcfs_add ( - model_net_request * req, - const mn_sched_params * sched_params, - int remote_event_size, - void * remote_event, - int local_event_size, - void * local_event, - void * sched, - model_net_sched_rc * rc, - tw_lp * lp){ + const model_net_request * req, + const mn_sched_params * sched_params, + int remote_event_size, + void * remote_event, + int local_event_size, + void * local_event, + void * sched, + model_net_sched_rc * rc, + tw_lp * lp){ mn_sched_qitem *q = malloc(sizeof(mn_sched_qitem)); q->entry_time = tw_now(lp); q->req = *req; q->sched_params = *sched_params; - q->rem = req->is_pull ? PULL_MSG_SIZE : req->msg_size; + q->rem = req->msg_size; if (remote_event_size > 0){ q->remote_event = malloc(remote_event_size); memcpy(q->remote_event, remote_event, remote_event_size); @@ -208,7 +207,7 @@ void fcfs_add ( req->final_dest_lp, req->msg_size, tw_now(lp)); } -void fcfs_add_rc(void *sched, model_net_sched_rc *rc, tw_lp *lp){ +void fcfs_add_rc(void *sched, const model_net_sched_rc *rc, tw_lp *lp){ mn_sched_queue *s = sched; s->queue_len--; struct qlist_head *ent = qlist_pop_back(&s->reqs); @@ -235,7 +234,7 @@ int fcfs_next( return -1; } mn_sched_qitem *q = qlist_entry(ent, mn_sched_qitem, ql); - + // issue the next packet int is_last_packet; uint64_t psize; @@ -257,7 +256,7 @@ int fcfs_next( // soruce in the case of a pull *poffset = s->method->model_net_method_recv_msg_event(q->req.category, q->req.final_dest_lp, q->req.dest_mn_lp, psize, - q->req.is_pull, q->req.msg_size, 0.0, q->req.remote_event_size, + q->req.is_pull, q->req.pull_size, 0.0, q->req.remote_event_size, q->remote_event, q->req.src_lp, lp); } else{ @@ -267,7 +266,7 @@ int fcfs_next( tw_now(lp), is_last_packet); *poffset = s->method->model_net_method_packet_event(q->req.category, q->req.final_dest_lp, q->req.dest_mn_lp, psize, q->req.is_pull, - q->req.msg_size, 0.0, &q->sched_params, + q->req.pull_size, 0.0, &q->sched_params, q->req.remote_event_size, q->remote_event, q->req.self_event_size, q->local_event, q->req.src_lp, lp, is_last_packet); @@ -278,7 +277,7 @@ int fcfs_next( dprintf("last %spkt: %lu (%lu) to %lu, size %lu at %1.5e (pull:%d)\n", s->is_recv_queue ? "recv " : "send ", lp->gid, q->req.src_lp, q->req.final_dest_lp, - q->req.is_pull ? PULL_MSG_SIZE : q->req.msg_size, tw_now(lp), + q->req.is_pull ? q->req.pull_size : q->req.msg_size, tw_now(lp), q->req.is_pull); qlist_pop(&s->reqs); s->queue_len--; @@ -305,10 +304,10 @@ int fcfs_next( } void fcfs_next_rc( - void * sched, - void * rc_event_save, - model_net_sched_rc * rc, - tw_lp * lp){ + void * sched, + const void * rc_event_save, + const model_net_sched_rc * rc, + tw_lp * lp){ mn_sched_queue *s = sched; if (rc->rtn == -1){ // no op @@ -334,8 +333,7 @@ void fcfs_next_rc( assert(q); q->req = rc->req; q->sched_params = rc->sched_params; - q->rem = (q->req.is_pull ? PULL_MSG_SIZE : q->req.msg_size) % - q->req.packet_size; + q->rem = q->req.msg_size % q->req.packet_size; if (q->rem == 0){ // processed exactly a packet's worth of data q->rem = q->req.packet_size; } @@ -376,20 +374,20 @@ void rr_destroy (void *sched){ } void rr_add ( - model_net_request * req, - const mn_sched_params * sched_params, - int remote_event_size, - void * remote_event, - int local_event_size, - void * local_event, - void * sched, - model_net_sched_rc * rc, - tw_lp * lp){ + const model_net_request * req, + const mn_sched_params * sched_params, + int remote_event_size, + void * remote_event, + int local_event_size, + void * local_event, + void * sched, + model_net_sched_rc * rc, + tw_lp * lp){ fcfs_add(req, sched_params, remote_event_size, remote_event, local_event_size, local_event, sched, rc, lp); } -void rr_add_rc(void *sched, model_net_sched_rc *rc, tw_lp *lp){ +void rr_add_rc(void *sched, const model_net_sched_rc *rc, tw_lp *lp){ fcfs_add_rc(sched, rc, lp); } @@ -413,10 +411,10 @@ int rr_next( } void rr_next_rc ( - void * sched, - void * rc_event_save, - model_net_sched_rc * rc, - tw_lp * lp){ + void * sched, + const void * rc_event_save, + const model_net_sched_rc * rc, + tw_lp * lp){ // only time we need to do something apart from fcfs is on a successful // rr_next that didn't remove the item from the queue if (rc->rtn == 0){ @@ -452,15 +450,15 @@ void prio_destroy (void *sched){ } void prio_add ( - model_net_request * req, - const mn_sched_params * sched_params, - int remote_event_size, - void * remote_event, - int local_event_size, - void * local_event, - void * sched, - model_net_sched_rc * rc, - tw_lp * lp){ + const model_net_request * req, + const mn_sched_params * sched_params, + int remote_event_size, + void * remote_event, + int local_event_size, + void * local_event, + void * sched, + model_net_sched_rc * rc, + tw_lp * lp){ // sched_msg_params is simply an int mn_sched_prio *ss = sched; int prio = sched_params->prio; @@ -479,7 +477,7 @@ void prio_add ( rc->prio = prio; } -void prio_add_rc(void * sched, model_net_sched_rc *rc, tw_lp *lp){ +void prio_add_rc(void * sched, const model_net_sched_rc *rc, tw_lp *lp){ // just call the sub scheduler's add_rc mn_sched_prio *ss = sched; dprintf("%lu (mn): rc adding with prio %d\n", lp->gid, rc->prio); @@ -508,10 +506,10 @@ int prio_next( } void prio_next_rc ( - void * sched, - void * rc_event_save, - model_net_sched_rc * rc, - tw_lp * lp){ + void * sched, + const void * rc_event_save, + const model_net_sched_rc * rc, + tw_lp * lp){ if (rc->prio != -1){ // we called a next somewhere mn_sched_prio *ss = sched; diff --git a/src/models/networks/model-net/model-net-sched.c b/src/models/networks/model-net/model-net-sched.c index 33b96b5..7c3413d 100644 --- a/src/models/networks/model-net/model-net-sched.c +++ b/src/models/networks/model-net/model-net-sched.c @@ -49,14 +49,14 @@ int model_net_sched_next( void model_net_sched_next_rc( model_net_sched *sched, - void *rc_event_save, - model_net_sched_rc *sched_rc, + const void *rc_event_save, + const model_net_sched_rc *sched_rc, tw_lp *lp) { sched->impl->next_rc(sched->dat, rc_event_save, sched_rc, lp); } void model_net_sched_add( - model_net_request *req, + const model_net_request *req, const mn_sched_params * sched_params, int remote_event_size, void * remote_event, @@ -71,7 +71,7 @@ void model_net_sched_add( void model_net_sched_add_rc( model_net_sched *sched, - model_net_sched_rc *sched_rc, + const model_net_sched_rc *sched_rc, tw_lp *lp){ sched->impl->add_rc(sched->dat, sched_rc, lp); } diff --git a/src/models/networks/model-net/model-net.c b/src/models/networks/model-net/model-net.c index 7f1f49a..fddee15 100644 --- a/src/models/networks/model-net/model-net.c +++ b/src/models/networks/model-net/model-net.c @@ -304,14 +304,21 @@ static model_net_event_return model_net_event_impl_base( // set the request struct model_net_request *r = &m->msg.m_base.req; - r->net_id = net_id; r->final_dest_lp = final_dest_lp; r->dest_mn_lp = dest_mn_lp; r->src_lp = sender->gid; - r->msg_size = message_size; + r->is_pull = is_pull; + if (r->is_pull) { + r->msg_size = PULL_MSG_SIZE; + r->pull_size = message_size; + } + else { + r->msg_size = message_size; + r->pull_size = 0; + } + r->net_id = net_id; r->remote_event_size = remote_event_size; r->self_event_size = self_event_size; - r->is_pull = is_pull; strncpy(r->category, category, CATEGORY_NAME_MAX-1); r->category[CATEGORY_NAME_MAX-1]='\0'; diff --git a/src/models/networks/model-net/simplenet-upd.c b/src/models/networks/model-net/simplenet-upd.c index 311cf2d..a246c3c 100644 --- a/src/models/networks/model-net/simplenet-upd.c +++ b/src/models/networks/model-net/simplenet-upd.c @@ -107,6 +107,7 @@ static tw_stime simplenet_packet_event( tw_lpid src_lp, tw_lp *sender, int is_last_pckt); + static void simplenet_packet_event_rc(tw_lp *sender); static void simplenet_packet_event_rc(tw_lp *sender); -- 2.26.2