/shark/trunk/ports/first/include/fsf_contract.h |
---|
353,7 → 353,8 |
fsf_server_id_t server; |
TIME actual_period; |
TIME actual_budget; |
int Qs; // quality of service |
int Qs; // quality of service |
int Is; // importance of service |
bandwidth_t U; // actual bandwidth |
bandwidth_t Umin; // min bandwidth |
bandwidth_t Umax; // max bandwidth |
/shark/trunk/ports/first/server-task.c |
---|
34,7 → 34,7 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
* |
* |
* CVS : $Id: server-task.c,v 1.4 2004-05-26 13:44:55 trimarchi Exp $ |
* CVS : $Id: server-task.c,v 1.5 2004-09-10 13:05:33 trimarchi Exp $ |
*/ |
#include "ll/i386/64bit.h" |
187,63 → 187,3 |
} |
#if defined MICHAEL |
int recalculate_contract(bandwidth_t U) { |
bandwidth_t current_bandwidth; |
unsigned int temp_U; |
int Qt; |
int isok=0; |
int i=0; |
#ifdef FSF_DEBUG |
int temp; |
kern_printf("(Recalculate contract)"); |
#endif |
/* The current bandwidth is the min bandwidth */ |
//current_bandwidth=SERVER_return_bandwidth(fsf_server_level); |
#ifdef FSF_DEBUG |
kern_printf("(nserver %d)", current_server); |
#endif |
do { |
current_bandwidth=0; |
Qt=0; |
for (i=0; i<current_server; i++) { |
if (server_list[i].Qs!=0 && server_list[i].U<server_list[i].Umax) |
Qt+=server_list[i].Qs; |
current_bandwidth+=server_list[i].U; |
} |
#ifdef FSF_DEBUG |
kern_printf("(Total Quality %d)", Qt); |
#endif |
isok=1; |
for (i=0; i<current_server; i++) { |
if (server_list[i].Qs!=0 && server_list[i].U<server_list[i].Umax) { |
temp_U=server_list[i].U; |
server_list[i].U=U-current_bandwidth; |
mul32div32to32(server_list[i].U, server_list[i].Qs, Qt, server_list[i].U); |
temp_U+=server_list[i].U; |
if (temp_U<=server_list[i].Umin) { |
server_list[i].U=server_list[i].Umin; |
} else if (temp_U>server_list[i].Umax) { |
server_list[i].U=server_list[i].Umax; |
isok=0; |
} else server_list[i].U=temp_U; |
#ifdef FSF_DEBUG |
mul32div32to32(server_list[i].U,100, MAX_BANDWIDTH, temp); |
kern_printf("(Server %d bw %d)", server_list[i].server, temp); |
#endif |
} |
} |
} while (!isok); |
return 0; |
} |
#endif |
/shark/trunk/ports/first/modules/cbsstar.c |
---|
580,7 → 580,7 |
b = (MAX_BANDWIDTH / T) * Q; |
/* really update lev->U, checking an overflow... */ |
if (Q< T && MAX_BANDWIDTH - lev->U > b) { |
if (Q< T /* && MAX_BANDWIDTH - lev->U > b */) { |
lev->U += b; |
lev->freebudgets++; |
/shark/trunk/ports/first/first-server.c |
---|
180,6 → 180,9 |
server_list[i].d_equals_t = FALSE; |
} |
server_list[i].Qs = contract->quality; |
server_list[i].Is = contract->importance; |
#ifdef FSF_DEBUG |
mul32div32to32(server_list[i].Umax,100, MAX_BANDWIDTH, temp); |
kern_printf("(Umax %d)",temp); |
203,7 → 206,7 |
} |
server_list[i].server=server; |
server_list[i].Qs=1; |
// server_list[i].Qs=1; |
contract_to_server(contract, i); |
220,7 → 223,7 |
#endif |
server_list[current_server].server=server; |
server_list[current_server].Qs=1; |
//server_list[current_server].Qs=1; |
contract_to_server(contract,current_server); |
250,6 → 253,7 |
server_list[i].Qs=server_list[i+1].Qs; |
server_list[i].deadline = server_list[i+1].deadline; |
server_list[i].d_equals_t = server_list[i+1].d_equals_t; |
server_list[i].Is = server_list[i+1].Is; |
i++; |
} |
582,6 → 586,7 |
int Qt; |
int isok=0; |
int i=0; |
int target_importance=1; |
#ifdef FSF_DEBUG |
int temp; |
599,9 → 604,13 |
current_bandwidth=0; |
Qt=0; |
for (i=0; i<current_server; i++) { |
if (server_list[i].Qs!=0 && server_list[i].U<server_list[i].Umax) |
if (server_list[i].Is==target_importance |
&& server_list[i].U<server_list[i].Umax && server_list[i].Qs>0) |
Qt+=server_list[i].Qs; |
current_bandwidth+=server_list[i].U; |
#ifdef FSF_DEBUG |
kern_printf("(Qs %d, Qt %d, Is %d)", server_list[i].Qs, Qt,server_list[i].Is); |
#endif |
} |
#ifdef FSF_DEBUG |
609,7 → 618,7 |
#endif |
isok=1; |
for (i=0; i<current_server; i++) { |
if (server_list[i].Qs!=0 && server_list[i].U<server_list[i].Umax) { |
if (server_list[i].Is==target_importance && server_list[i].U<server_list[i].Umax && server_list[i].Qs>0) { |
temp_U=server_list[i].U; |
server_list[i].U=U-current_bandwidth; |
mul32div32to32(server_list[i].U, server_list[i].Qs, Qt, server_list[i].U); |
628,8 → 637,8 |
#endif |
} |
} |
} while (!isok); |
target_importance++; |
} while (!isok && target_importance<6); |
return 0; |
} |