105,7 → 105,6 |
|
b->dline_timer = NIL; |
|
b->last_reclaiming = 0; |
b->avail += b->Q; |
if (b->avail > b->Q) b->avail = b->Q; |
|
166,10 → 165,11 |
b->vtimer = NIL; |
|
if (b->current == NIL && iq_query_first(&(b->tasks)) == NIL && b->flags != GRUBSTAR_RECLAIMING) { |
event_need_reschedule(); |
//event_need_reschedule(); |
TRACER_LOGEVENT(FTrace_EVT_server_reclaiming,1,(int)(b),0); |
b->flags = GRUBSTAR_RECLAIMING; |
lev->Uf -= b->Ub; |
event_need_reschedule(); |
} |
|
#ifdef GRUBSTAR_DEBUG |
206,8 → 206,7 |
/* 2 */ TIMESPEC_A_GT_B(&t3, &t2) ) { |
TIMESPEC_ASSIGN(&b->dline, acttime); |
ADDUSEC2TIMESPEC(b->T, &b->dline); |
b->avail = b->Q; |
b->last_reclaiming = 0; |
b->avail=b->Q; |
} |
|
if (b->flags==GRUBSTAR_RECLAIMING) |
250,24 → 249,12 |
sys_end(); |
} |
|
//Calculate reclaiming only one time |
if (b->last_reclaiming == 0) { |
mul32div32to32(tx,(lev->U - lev->Uf),MAX_BANDWIDTH,b->last_reclaiming); |
|
//Geometrical n->+inf sum(tx*((lev->U - lev->Uf)/MAX_BANDWIDTH)^n) |
mul32div32to32(tx,MAX_BANDWIDTH,(MAX_BANDWIDTH - lev->U + lev->Uf),b->last_reclaiming); |
b->last_reclaiming -= tx; |
|
if (b->last_reclaiming < 3) { |
b->last_reclaiming = 0; |
b->avail -= tx; |
} else { |
b->avail -= tx - b->last_reclaiming; |
TRACER_LOGEVENT(FTrace_EVT_server_using_rec,3,(int)(b),b->last_reclaiming); |
} |
b->avail -= tx - b->last_reclaiming; |
|
} else { |
b->avail -= tx; |
} |
if (b->last_reclaiming > 0) |
TRACER_LOGEVENT(FTrace_EVT_server_using_rec,3,(int)(b),b->last_reclaiming); |
|
#ifdef GRUBSTAR_DEBUG |
kern_printf("(GS:Cap p%d av=%d tx=%d rec=%d)", p, b->avail,(int)tx,b->last_reclaiming); |
331,7 → 318,6 |
|
/* and the capacity */ |
b->avail = b->Q; |
b->last_reclaiming = 0; |
|
/* Tracer */ |
TRACER_LOGEVENT(FTrace_EVT_server_replenish,1,(int)(b),0); |
640,7 → 626,7 |
if (Q< T && MAX_BANDWIDTH - lev->U > b) { |
|
lev->U += b; |
//lev->Uf += b; Start in Reclaiming |
lev->Uf += b; |
lev->freebudgets++; |
|
lev->b[r].Q = Q; |
647,7 → 633,7 |
lev->b[r].T = T; |
lev->b[r].Ub = b; |
lev->b[r].avail = Q; |
lev->b[r].flags = GRUBSTAR_RECLAIMING; |
lev->b[r].flags = GRUBSTAR_ACTIVE; |
lev->b[r].loc_sched_id = scheduler_id; |
lev->b[r].loc_sched_level = local_scheduler_level; |
lev->b[r].last_reclaiming = 0; |
673,7 → 659,7 |
mul32div32to32(MAX_BANDWIDTH,lev->b[budget].Q,lev->b[budget].T,b); |
|
lev->U -= b; |
if (lev->b[budget].flags != GRUBSTAR_RECLAIMING) lev->Uf -= b; |
lev->Uf -= b; |
|
lev->b[budget].Q = 0; |
lev->b[budget].T = 0; |
682,7 → 668,7 |
lev->b[budget].dline_timer = NIL; |
lev->b[budget].avail = 0; |
lev->b[budget].current = -1; |
lev->b[budget].flags = GRUBSTAR_RECLAIMING; |
lev->b[budget].flags = GRUBSTAR_ACTIVE; |
lev->b[budget].last_reclaiming = 0; |
|
TRACER_LOGEVENT(FTrace_EVT_server_remove,3,(int)(&(lev->b[budget])),budget); |
700,7 → 686,7 |
mul32div32to32(MAX_BANDWIDTH,lev->b[budget].Q,lev->b[budget].T,b); |
|
lev->U -= b; |
if (lev->b[budget].flags != GRUBSTAR_RECLAIMING) lev->Uf -= b; |
lev->Uf -= b; |
|
lev->b[budget].Q = Q; |
lev->b[budget].T = T; |
707,7 → 693,7 |
mul32div32to32(MAX_BANDWIDTH,Q,T,lev->b[budget].Ub); |
|
lev->U += lev->b[budget].Ub; |
if (lev->b[budget].flags != GRUBSTAR_RECLAIMING) lev->Uf += lev->b[budget].Ub; |
lev->Uf += lev->b[budget].Ub; |
|
return 0; |
|