36,6 → 36,7 |
}; |
|
struct ctx_time_type ctx_time[256]; |
struct ctx_time_type int_time; |
unsigned long long last_time; |
int total_ctx = 0; |
int last_ctx = -1; |
44,8 → 45,50 |
|
int i; |
|
if (e->type == 0x3B || e->type == 0x15) { |
// Start interrupt |
if (e->type == 0x2b || e->type == 0x03) { |
|
if (int_time.start_time == 0) int_time.start_time = e->tsc; |
|
if (last_ctx != -1) { |
|
if (e->tsc < last_time) { |
printf("Error events sequence\n"); |
exit(2); |
} |
|
ctx_time[last_ctx].total_time += (e->tsc - last_time); |
last_time = e->tsc; |
|
} else { |
|
last_time = e->tsc; |
|
} |
|
} |
|
//End Interrupt |
if (e->type == 0x3b || e->type == 0x13) { |
|
if (int_time.start_time == 0) int_time.start_time = e->tsc; |
|
if (last_time != 0) { |
|
if (e->tsc < last_time) { |
printf("Error events sequence\n"); |
exit(2); |
} |
|
int_time.total_time += (e->tsc - last_time); |
last_time = e->tsc; |
|
} else { |
|
last_time = e->tsc; |
|
} |
|
i = 0; |
while (ctx_time[i].ctx != e->par[0] && i < total_ctx) { |
i++; |
52,7 → 95,27 |
} |
|
if (ctx_time[i].start_time == 0) { |
ctx_time[i].start_time = e->tsc; |
ctx_time[i].total_time = 0; |
ctx_time[i].ctx = e->par[0]; |
last_ctx = i; |
total_ctx++; |
} else { |
last_ctx = i; |
} |
|
} |
|
//Context Switch |
if (e->type == 0x15) { |
|
i = 0; |
while (ctx_time[i].ctx != e->par[0] && i < total_ctx) { |
i++; |
} |
|
if (ctx_time[i].start_time == 0) { |
ctx_time[i].ctx = e->par[0]; |
ctx_time[i].start_time = e->tsc; |
ctx_time[i].total_time = 0; |
|
74,7 → 137,7 |
exit(2); |
} |
|
ctx_time[last_ctx].total_time += (e->tsc - last_time); |
if (last_ctx != -1) ctx_time[last_ctx].total_time += (e->tsc - last_time); |
last_time = e->tsc; |
last_ctx = i; |
|
82,32 → 145,6 |
|
} |
|
if (e->type == 0x2b || e->type == 0x03) { |
|
if (last_ctx == -1) return; |
|
if (e->tsc < last_time) { |
printf("Error events sequence\n"); |
exit(2); |
} |
|
ctx_time[last_ctx].total_time += (e->tsc - last_time); |
last_time = e->tsc; |
|
} |
|
if (e->type == 0x13) { |
|
if (e->tsc < last_time) { |
printf("Error events sequence\n"); |
exit(2); |
} |
|
last_time = e->tsc; |
|
} |
|
|
} |
|
int main(int argc, char *argv[]) |
129,6 → 166,7 |
} |
|
memset(ctx_time,0,sizeof(ctx_time)); |
memset(&int_time,0,sizeof(int_time)); |
total_ctx = 0; |
|
input_file = fopen(argv[1],"rb"); |
195,8 → 233,10 |
|
printf("Total Time %d\n",(unsigned int)((stop-start) * 1000 / 501162)); |
|
printf ("Total Ctx = %d\n",total_ctx); |
printf("Total Ctx = %d\n",total_ctx); |
|
printf("Total Interrupt = %d\n",(unsigned int)(int_time.total_time * 1000 / 501162)); |
|
total_simulation = 0; |
for (i=0;i<total_ctx;i++) { |
printf("Total Time Ctx %d => %d\n",ctx_time[i].ctx,(unsigned int)(ctx_time[i].total_time * 1000 / 501162)); |