Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1498 → Rev 1499

/demos/trunk/newtrace/utils/extract.c
1,5 → 1,7
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
 
#define MAXCONTEXT 100
#define MAXJOB 100000
12,6 → 14,8
#define PERIODICAL 1
#define INTERRUPT 2
 
#define DRAW_NUM 1000
 
struct ctx_exec {
int ctx;
unsigned long long dtsc;
43,7 → 47,43
 
unsigned long long log_start_tsc = 0;
unsigned long long log_end_tsc = 0;
unsigned long long total_dtsc = 0;
 
int draw_data[DRAW_NUM];
 
int gnuplot_clear() {
 
int i;
 
for (i=0;i<DRAW_NUM;i++)
draw_data[i] = 0;
 
return 0;
 
}
 
int gnuplot_draw(unsigned long long max_limit) {
 
FILE *gnuplot_data, *gnuplot_command;
int i;
 
gnuplot_data = fopen("/tmp/pwcet_tmp","w");
gnuplot_command = popen("gnuplot","w");
fprintf(gnuplot_command,"plot \"%s\" using 1:2 with lines\n","/tmp/pwcet_tmp");
fflush(gnuplot_command);
 
for (i=0;i<DRAW_NUM;i++)
fprintf(gnuplot_data,"%f\t%f\n",(double)i * (double)max_limit / (double)DRAW_NUM,(float)draw_data[i]);
 
fclose(gnuplot_data);
getchar();
fclose(gnuplot_command);
 
return 0;
}
 
int create_lists(char *filename) {
 
FILE *input_file;
301,10 → 341,11
 
int elaborate_statistics(int num, int task_type) {
 
int i,k;
int i,k,h;
char pidstr[10];
unsigned long long temp_tsc,max_tsc;
unsigned long long last_start, delta_start;
unsigned long long temp_tsc,max_tsc,min_tsc;
unsigned long long last_start, delta_start, first_exec;
unsigned long long max_limit;
 
switch (context_list[num].pid) {
case PID_NO_DEF:
324,15 → 365,22
 
temp_tsc = 0;
max_tsc = 0;
min_tsc = 0xFFFFFFFF;
first_exec = 0;
k = 0;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
if (first_exec == 0) first_exec = exec_list[i].start - log_start_tsc;
if (exec_list[i].dtsc > max_tsc) max_tsc = exec_list[i].dtsc;
if (exec_list[i].dtsc < min_tsc) min_tsc = exec_list[i].dtsc;
temp_tsc += exec_list[i].dtsc;
k++;
}
printf(" Total Execution dTSC [%12llu] us [%12llu]\n",temp_tsc,temp_tsc*1000/clk_per_msec);
printf(" Mean CPU Bandwidth [%11f%c]\n",(double)(temp_tsc)/(double)(total_dtsc)*100.0,'%');
printf(" after first exec [%11f%c]\n",(double)(temp_tsc)/(double)(total_dtsc-first_exec)*100.0,'%');
printf(" Execs Number [%12d]\n",k);
printf(" Min Exec dTSC [%12llu] us [%12llu]\n",min_tsc, min_tsc*1000/clk_per_msec);
printf(" Mean Exec dTSC [%12llu] us [%12llu]\n",temp_tsc / k, temp_tsc / k*1000/clk_per_msec);
printf(" Max Exec dTSC [%12llu] us [%12llu]\n\n",max_tsc, max_tsc*1000/clk_per_msec);
 
344,21 → 392,42
 
temp_tsc = 0;
max_tsc = 0;
min_tsc = 0xFFFFFFFF;
first_exec = 0;
k = 0;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
if (first_exec == 0) first_exec = exec_list[i].start - log_start_tsc;
if (exec_list[i].dtsc > max_tsc) max_tsc = exec_list[i].dtsc;
if (exec_list[i].dtsc < min_tsc) min_tsc = exec_list[i].dtsc;
temp_tsc += exec_list[i].dtsc;
k++;
}
 
gnuplot_clear();
 
max_limit = max_tsc*1000/clk_per_msec;
 
printf(" Total Execution dTSC [%12llu] us [%12llu]\n",temp_tsc,temp_tsc*1000/clk_per_msec);
printf(" Mean CPU Bandwidth [%11f%c]\n",(double)(temp_tsc)/(double)(total_dtsc)*100.0,'%');
printf(" after first int [%11f%c]\n",(double)(temp_tsc)/(double)(total_dtsc-first_exec)*100.0,'%');
printf(" Interrupts Number [%12d]\n",k);
printf(" Min Interrupt dTSC [%12llu] us [%12llu]\n",min_tsc,min_tsc*1000/clk_per_msec);
printf(" Mean Interrupt dTSC [%12llu] us [%12llu]\n",temp_tsc / k,temp_tsc / k*1000/clk_per_msec);
printf(" Max Interrupt dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
 
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
h = (exec_list[i].dtsc*1000/clk_per_msec) * DRAW_NUM / max_limit;
if (h < DRAW_NUM) draw_data[h]++;
}
 
gnuplot_draw(max_limit);
 
last_start = 0;
temp_tsc = 0;
max_tsc = 0;
min_tsc = 0xFFFFFFFF;
k = 0;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
367,6 → 436,7
} else {
delta_start = exec_list[i].start - last_start;
if (delta_start > max_tsc) max_tsc = delta_start;
if (delta_start < min_tsc) min_tsc = delta_start;
temp_tsc += delta_start;
k++;
last_start = exec_list[i].start;
373,9 → 443,31
}
}
 
printf(" Min Arr. Delta dTSC [%12llu] us [%12llu]\n",min_tsc,min_tsc*1000/clk_per_msec);
printf(" Mean Arr. Delta dTSC [%12llu] us [%12llu]\n",temp_tsc / k,temp_tsc / k*1000/clk_per_msec);
printf(" Max Arr. Delta dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
 
gnuplot_clear();
 
max_limit = max_tsc*1000/clk_per_msec;
 
last_start = 0;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
if (last_start == 0) {
last_start = exec_list[i].start;
} else {
delta_start = exec_list[i].start - last_start;
 
h = (delta_start*1000/clk_per_msec) * DRAW_NUM / max_limit;
if (h < DRAW_NUM) draw_data[h]++;
 
last_start = exec_list[i].start;
}
}
 
gnuplot_draw(max_limit);
 
}
 
if (task_type == PERIODICAL) {
384,35 → 476,58
 
temp_tsc = 0;
max_tsc = 0;
min_tsc = 0xFFFFFFFF;
first_exec = 0;
k = 0;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
if (first_exec == 0) first_exec = exec_list[i].start - log_start_tsc;
if (exec_list[i].dtsc > max_tsc) max_tsc = exec_list[i].dtsc;
if (exec_list[i].dtsc < min_tsc) min_tsc = exec_list[i].dtsc;
temp_tsc += exec_list[i].dtsc;
k++;
}
printf(" Total Execution dTSC [%12llu] us [%12llu]\n",temp_tsc,temp_tsc*1000/clk_per_msec);
printf(" Mean CPU Bandwidth [%11f%c]\n",(double)(temp_tsc)/(double)(total_dtsc)*100.0,'%');
printf(" after first int [%11f%c]\n",(double)(temp_tsc)/(double)(total_dtsc-first_exec)*100.0,'%');
printf(" Execs Number [%12d]\n",k);
printf(" Min Exec dTSC [%12llu] us [%12llu]\n",min_tsc,min_tsc*1000/clk_per_msec);
printf(" Mean Exec dTSC [%12llu] us [%12llu]\n",temp_tsc / k,temp_tsc / k*1000/clk_per_msec);
printf(" Max Exec dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
 
temp_tsc = 0;
max_tsc = 0;
min_tsc = 0xFFFFFFFF;
k = 0;
for (i=0;i<job_total;i++)
if (job_list[i].ctx == context_list[num].ctx) {
if (job_list[i].dtsc > max_tsc) max_tsc = job_list[i].dtsc;
if (job_list[i].dtsc < min_tsc) min_tsc = job_list[i].dtsc;
temp_tsc += job_list[i].dtsc;
k++;
}
printf(" Total Job Exec dTSC [%12llu] us [%12llu]\n",temp_tsc,temp_tsc*1000/clk_per_msec);
printf(" Jobs Number [%12d]\n",k);
printf(" Min Job dTSC [%12llu] us [%12llu]\n",min_tsc,min_tsc*1000/clk_per_msec);
printf(" Mean Job dTSC [%12llu] us [%12llu]\n",temp_tsc / k,temp_tsc / k*1000/clk_per_msec);
printf(" Max Job dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
 
gnuplot_clear();
max_limit = max_tsc*1000/clk_per_msec;
 
for (i=0;i<job_total;i++)
if (job_list[i].ctx == context_list[num].ctx) {
h = (job_list[i].dtsc*1000/clk_per_msec) * DRAW_NUM / max_limit;
if (h < DRAW_NUM) draw_data[h]++;
}
 
gnuplot_draw(max_limit);
 
last_start = 0;
temp_tsc = 0;
max_tsc = 0;
min_tsc = 0xFFFFFFFF;
k = 0;
for (i=0;i<job_total;i++)
if (job_list[i].ctx == context_list[num].ctx) {
421,15 → 536,38
} else {
delta_start = job_list[i].start - last_start;
if (delta_start > max_tsc) max_tsc = delta_start;
if (delta_start < min_tsc) min_tsc = delta_start;
temp_tsc += delta_start;
k++;
last_start = job_list[i].start;
}
}
 
printf(" Min Arr. Delta dTSC [%12llu] us [%12llu]\n\n",min_tsc,min_tsc*1000/clk_per_msec);
printf(" Mean Arr. Delta dTSC [%12llu] us [%12llu]\n",temp_tsc / k,temp_tsc / k*1000/clk_per_msec);
printf(" Max Arr. Delta dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
gnuplot_clear();
 
max_limit = max_tsc*1000/clk_per_msec;
 
last_start = 0;
for (i=0;i<job_total;i++)
if (job_list[i].ctx == context_list[num].ctx) {
if (last_start == 0) {
last_start = job_list[i].start;
} else {
delta_start = job_list[i].start - last_start;
 
h = (delta_start*1000/clk_per_msec) * DRAW_NUM / max_limit;
if (h < DRAW_NUM) draw_data[h]++;
 
last_start = exec_list[i].start;
}
}
 
gnuplot_draw(max_limit);
 
}
 
return 0;
455,11 → 593,13
events_total = create_lists(argv[1]);
 
printf("\nDelta TSC = %llu\n",log_end_tsc - log_start_tsc);
printf("Events [%8d]\n",events_total);
printf("Execs [%8d]\n",exec_total);
printf("EndCycles [%8d]\n",endcycle_total);
total_dtsc = log_end_tsc - log_start_tsc;
 
printf("\nTotal dTSC [%12llu] us [%12llu]\n", total_dtsc, total_dtsc*1000/clk_per_msec);
printf("Events [%12d]\n",events_total);
printf("Execs [%12d]\n",exec_total);
printf("EndCycles [%12d]\n",endcycle_total);
 
total_tsc = 0;
for (i=0;i<exec_total;i++)
total_tsc += exec_list[i].dtsc;
493,7 → 633,7
elaborate_statistics(i,task_type);
 
}
 
return 0;
 
}
/demos/trunk/newtrace/utils/makefile
27,7 → 27,7
-I$(BASE)/tracer/include -I$(BASE)/oslib pwcet_gen.c -o pwcet_gen
 
extract: extract.c
gcc -Wimplicit-function-declaration -Wall -ggdb\
gcc -Wimplicit-function-declaration -Wall -ggdb -lm\
-I$(BASE)/tracer/include -I$(BASE)/oslib extract.c -o extract
 
clean: