Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1557 → Rev 1558

/demos/trunk/newtrace/utils/extract.c
10,6 → 10,7
#define INT_CTX 1
#define INT_PID 9999
#define PID_NO_DEF -1
#define SERVER_NO_DEF -1
 
#define BACKGROUND 0
#define PERIODICAL 1
32,6 → 33,12
int pid;
};
 
struct ctx_server {
int ctx;
int server_id;
 
};
 
struct task_event {
int ctx;
unsigned long long tsc;
38,6 → 45,12
unsigned long long nsec;
};
 
struct server_event {
int server_id;
unsigned long long tsc;
unsigned long long nsec;
};
 
void Error(int num, int line) {
printf("Finite-State machine error %d at line %d\n",num,line);
exit(2);
51,6 → 64,12
struct task_event *wcet_miss_list;
struct task_event *act_list;
struct ctx_exec *job_list;
struct ctx_server *ctx_server_list;
 
int server_exec_total = 0, server_end_total=0, server_act_total=0, ctx_server_total = 0, server_total=0;
struct server_event *act_server_list;
struct server_event *server_budget_end_list;
 
int deadline_miss = 0, wcet_miss = 0, act_total = 0;
 
unsigned int clk_per_msec = 0;
425,12 → 444,18
 
/* Memory alloc */
exec_list = malloc(sizeof(struct ctx_exec) * MAXJOB);
context_list = malloc(sizeof(struct ctx_to_pid) * MAXCONTEXT);
context_list = malloc(sizeof(struct ctx_to_pid) * MAXCONTEXT);
ctx_server_list = malloc(sizeof(struct ctx_server) * MAXCONTEXT);
 
endcycle_list = malloc(sizeof(struct task_event) * MAXJOB);
deadline_miss_list = malloc(sizeof(struct task_event) * MAXJOB);
wcet_miss_list = malloc(sizeof(struct task_event) * MAXJOB);
act_list = malloc(sizeof(struct task_event) * MAXJOB);
 
act_server_list = malloc(sizeof(struct server_event) * MAXJOB );
server_budget_end_list = malloc(sizeof(struct server_event) * MAXJOB);
 
 
/* Finite-State machine
*
* FS-Machine states:
448,6 → 473,12
context_list[i].pid = PID_NO_DEF;
}
 
for(i=0; i<MAXCONTEXT; i++) {
ctx_server_list[i].ctx=0;
ctx_server_list[i].server_id=SERVER_NO_DEF;
}
 
/* The start context + interrupt context */
context_total = 2;
current_context = 0;
479,7 → 510,12
case 7:
case 8:
case 10:
 
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
/* 1 par */
fscanf(input_file,"%d",&par1);
break;
487,6 → 523,7
case 5:
case 9:
case 0:
case 17:
case 20:
case 21:
 
665,7 → 702,42
act_total++;
break;
/* Server Create */
case 11:
for (i=0;i<ctx_server_total;i++)
if (par1 == ctx_server_list[i].ctx) {
ctx_server_list[i].server_id = par2;
break;
}
if (i == ctx_server_total) {
ctx_server_list[ctx_server_total].ctx = par1;
ctx_server_list[ctx_server_total].server_id = par2;
ctx_server_total++;
}
 
break;
/* Server Activate */
case 12:
case 16:
act_server_list[server_act_total].server_id = par1;
act_server_list[server_act_total].tsc = tsc;
act_server_list[server_act_total].nsec = current_nsec + (tsc-last_tsc) * 1000000 / clk_per_msec;
server_act_total++;
break;
/* Server end budget */
case 13:
server_budget_end_list[server_end_total].server_id = par1;
server_budget_end_list[server_end_total].tsc = tsc;
server_budget_end_list[server_end_total].nsec = current_nsec + (tsc-last_tsc) * 1000000 / clk_per_msec;
server_end_total++;
break;
 
/* Deadline miss */
case 20:
836,8 → 908,10
int elaborate_statistics(int num, int task_type) {
 
char pidstr[10];
char serverstr[10];
unsigned long long tot_nsec,mean_nsec,max_nsec,min_nsec,first_nsec;
int number,act,dlinemiss,wcetmiss;
int i=0;
 
switch (context_list[num].pid) {
case PID_NO_DEF:
851,9 → 925,18
break;
}
 
for (i=0; i<ctx_server_total; i++) {
if (ctx_server_list[i].ctx==context_list[num].ctx)
sprintf(serverstr,"%5d", ctx_server_list[i].server_id);
}
if (i==ctx_server_total)
sprintf(serverstr, "NODEF");
 
 
if (task_type == BACKGROUND) {
 
printf("Background Task CTX [%5d] PID [%s]\n",context_list[num].ctx,pidstr);
printf("Background Task CTX [%5d] PID [%s] SERVER [%s]\n",context_list[num].ctx,pidstr, serverstr);
 
stats_from_execs(num,&tot_nsec,&min_nsec,&mean_nsec,&max_nsec,&first_nsec,&number);
 
/demos/trunk/newtrace/utils/pwcet_gen.c
55,6 → 55,16
fseek(input_file,-(delta+10),SEEK_CUR);
 
p = buffer;
/*
// specific server events
#define FTrace_EVT_server_create 0x08 // Par1 [empty] Par2 [server]
#define FTrace_EVT_server_replenish 0x18 // Par1 [empty] Par2 [server]
#define FTrace_EVT_server_exhaust 0x28 // Par1 [empty] Par2 [server]
#define FTrace_EVT_server_reclaiming 0x38 // Par1 [empty] Par2 [server]
#define FTrace_EVT_server_remove 0x48 // Par1 [empty] Par2 [server]
#define FTrace_EVT_server_active 0x58 // Par1 [empty] Par2 [server]
#define FTrace_EVT_server_using_rec 0x68 // Par1 [reclaiming] Par2 [server]
*/
 
while ((unsigned int)(p) + 16 <= (unsigned int)(buffer + READ_BUFFER) &&
(unsigned int)(p) + 16 <= (unsigned int)(buffer + n + delta)) {
134,7 → 144,37
printf("10 ");
tsc = 1;
break;
// specific server events
case FTrace_EVT_server_create:
printf("11 ");
tsc=1;
break;
 
case FTrace_EVT_server_replenish:
printf("12 ");
tsc=1;
break;
case FTrace_EVT_server_exhaust:
printf("13 ");
tsc=1;
break;
case FTrace_EVT_server_reclaiming:
printf("14 ");
tsc=1;
break;
case FTrace_EVT_server_remove:
printf("15 ");
tsc=1;
break;
case FTrace_EVT_server_active:
printf("16 ");
tsc=1;
break;
case FTrace_EVT_server_using_rec:
printf("17 ");
tsc=1;
break;
 
case FTrace_EVT_task_deadline_miss:
printf("20 ");
tsc = 1;
208,7 → 248,18
case FTrace_EVT_cycles_per_msec:
printf("%d ",*(unsigned int *)(p+12));
break;
 
case FTrace_EVT_server_replenish:
case FTrace_EVT_server_exhaust:
case FTrace_EVT_server_reclaiming:
case FTrace_EVT_server_remove:
case FTrace_EVT_server_active:
printf("%d ", *(unsigned int *)(p+12));
break;
case FTrace_EVT_server_create:
case FTrace_EVT_server_using_rec:
printf("%d %d",*(unsigned short int *)(p+2),*(unsigned int *)(p+12));
break;
}
 
printf("\n");