Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 1500 → Rev 1501

/demos/trunk/newtrace/utils/extract.c
50,6 → 50,7
unsigned long long log_end_tsc = 0;
unsigned long long total_dtsc = 0;
 
/* Data for gnuplot external call */
int draw_data[DRAW_NUM+1];
 
int gnuplot_clear() {
113,6 → 114,276
}
 
int stats_from_execs(int ctx_num, unsigned long long *tot_tsc,
unsigned long long *min_tsc,
unsigned long long *mean_tsc,
unsigned long long *max_tsc,
unsigned long long *first_tsc,
int *number) {
 
unsigned long long temp_tsc;
int k,i;
 
temp_tsc = 0;
*max_tsc = 0;
*mean_tsc = 0;
*min_tsc = 0xFFFFFFFF;
*first_tsc = 0;
k = 0;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[ctx_num].ctx) {
if (*first_tsc == 0) *first_tsc = 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++;
}
 
*number = k;
*tot_tsc = temp_tsc;
*mean_tsc = temp_tsc / k;
 
return 0;
 
}
 
int stats_from_jobs(int ctx_num, unsigned long long *tot_tsc,
unsigned long long *min_tsc,
unsigned long long *mean_tsc,
unsigned long long *max_tsc,
unsigned long long *first_tsc,
int *number) {
 
unsigned long long temp_tsc;
int k,i;
 
temp_tsc = 0;
*max_tsc = 0;
*mean_tsc = 0;
*min_tsc = 0xFFFFFFFF;
*first_tsc = 0;
k = 0;
for (i=0;i<job_total;i++)
if (job_list[i].ctx == context_list[ctx_num].ctx) {
if (*first_tsc == 0) *first_tsc = job_list[i].start - log_start_tsc;
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++;
}
 
*number = k;
*tot_tsc = temp_tsc;
*mean_tsc = temp_tsc / k;
 
return 0;
 
}
 
int arr_stats_from_execs(int ctx_num, unsigned long long *min_tsc,
unsigned long long *mean_tsc,
unsigned long long *max_tsc) {
 
unsigned long long last_start,temp_tsc,delta_start;
int i,k;
 
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[ctx_num].ctx) {
if (last_start == 0) {
last_start = exec_list[i].start;
} 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;
}
}
 
*mean_tsc = temp_tsc / k;
 
return 0;
 
}
 
int arr_stats_from_jobs(int ctx_num, unsigned long long *min_tsc,
unsigned long long *mean_tsc,
unsigned long long *max_tsc) {
 
unsigned long long last_start,temp_tsc,delta_start;
int i,k;
 
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[ctx_num].ctx) {
if (last_start == 0) {
last_start = job_list[i].start;
} 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;
}
}
 
*mean_tsc = temp_tsc / k;
 
return 0;
 
}
 
int plot_exec_demand_function(int ctx_num, char *pidstr) {
 
unsigned long long max_limit;
char tmpstr[50];
int i;
 
gnuplot_clear();
max_limit = total_dtsc*1000/clk_per_msec;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[ctx_num].ctx) {
int h1,h2,h3;
h1 = ((exec_list[i].start-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
h2 = ((exec_list[i].start+exec_list[i].dtsc-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
for (h3=h1;h3<h2;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec)*(h3-h1)/(h2-h1);
for (h3=h2;h3<=DRAW_NUM;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec);
}
sprintf(tmpstr,"Ctx [%d:%s] Demand-Function",context_list[ctx_num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,1);
 
return 0;
 
}
 
int plot_exec_c_distrib(int ctx_num, unsigned long long max_tsc, char *pidstr) {
 
unsigned long long max_limit;
char tmpstr[50];
int i,h;
 
gnuplot_clear();
max_limit = max_tsc*1000/clk_per_msec;
 
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[ctx_num].ctx) {
h = (exec_list[i].dtsc*1000/clk_per_msec) * DRAW_NUM / max_limit;
if (h <= DRAW_NUM) draw_data[h]++;
}
 
sprintf(tmpstr,"Ctx [%d:%s] Exec C-dist",context_list[ctx_num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,0);
 
return 0;
 
}
 
int plot_job_c_distrib(int ctx_num, unsigned long long max_tsc, char *pidstr) {
 
unsigned long long max_limit;
char tmpstr[50];
int i,h;
 
gnuplot_clear();
max_limit = max_tsc*1000/clk_per_msec;
 
for (i=0;i<job_total;i++)
if (job_list[i].ctx == context_list[ctx_num].ctx) {
h = (job_list[i].dtsc*1000/clk_per_msec) * DRAW_NUM / max_limit;
if (h <= DRAW_NUM) draw_data[h]++;
}
 
sprintf(tmpstr,"Ctx [%d:%s] Job C-dist",context_list[ctx_num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,0);
 
return 0;
 
}
 
int plot_exec_arr_distrib(int ctx_num, unsigned long long max_tsc, char *pidstr) {
 
unsigned long long max_limit,last_start,delta_start;
char tmpstr[50];
int i,h;
 
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[ctx_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;
}
}
 
sprintf(tmpstr,"Ctx [%d:%s] Exec Arr.Delta",context_list[ctx_num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,0);
 
return 0;
 
}
 
int plot_job_arr_distrib(int ctx_num, unsigned long long max_tsc, char *pidstr) {
 
unsigned long long max_limit,last_start,delta_start;
char tmpstr[50];
int i,h;
 
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[ctx_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 = job_list[i].start;
}
}
 
sprintf(tmpstr,"Ctx [%d:%s] Job Arr.Delta",context_list[ctx_num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,0);
 
return 0;
 
}
 
int create_lists(char *filename) {
 
FILE *input_file;
370,11 → 641,9
 
int elaborate_statistics(int num, int task_type) {
 
int i,k,h;
char pidstr[10],tmpstr[30];
unsigned long long temp_tsc,max_tsc,min_tsc;
unsigned long long last_start, delta_start, first_exec;
unsigned long long max_limit;
char pidstr[10];
unsigned long long tot_tsc,mean_tsc,max_tsc,min_tsc,first_tsc;
int number;
 
switch (context_list[num].pid) {
case PID_NO_DEF:
392,46 → 661,17
 
printf("Background Task CTX [%5d] PID [%s]\n",context_list[num].ctx,pidstr);
 
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);
stats_from_execs(num,&tot_tsc,&min_tsc,&mean_tsc,&max_tsc,&first_tsc,&number);
 
printf(" Total Execution dTSC [%12llu] us [%12llu]\n",tot_tsc,tot_tsc*1000/clk_per_msec);
printf(" Mean CPU Bandwidth [%11f%c]\n",(double)(tot_tsc)/(double)(total_dtsc)*100.0,'%');
printf(" after first exec [%11f%c]\n",(double)(tot_tsc)/(double)(total_dtsc-first_tsc)*100.0,'%');
printf(" Execs Number [%12d]\n",number);
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(" Mean Exec dTSC [%12llu] us [%12llu]\n",mean_tsc, mean_tsc*1000/clk_per_msec);
printf(" Max Exec dTSC [%12llu] us [%12llu]\n\n",max_tsc, max_tsc*1000/clk_per_msec);
 
gnuplot_clear();
max_limit = total_dtsc*1000/clk_per_msec;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
int h1,h2,h3;
h1 = ((exec_list[i].start-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
h2 = ((exec_list[i].start+exec_list[i].dtsc-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
for (h3=h1;h3<h2;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec)*(h3-h1)/(h2-h1);
for (h3=h2;h3<=DRAW_NUM;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec);
}
sprintf(tmpstr,"Ctx [%d:%s] Demand-Function",context_list[num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,1);
plot_exec_demand_function(num,pidstr);
 
}
 
439,106 → 679,26
 
printf("Interrupts\n");
 
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++;
}
stats_from_execs(num,&tot_tsc,&min_tsc,&mean_tsc,&max_tsc,&first_tsc,&number);
 
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(" Total Execution dTSC [%12llu] us [%12llu]\n",tot_tsc,tot_tsc*1000/clk_per_msec);
printf(" Mean CPU Bandwidth [%11f%c]\n",(double)(tot_tsc)/(double)(total_dtsc)*100.0,'%');
printf(" after first int [%11f%c]\n",(double)(tot_tsc)/(double)(total_dtsc-first_tsc)*100.0,'%');
printf(" Interrupts Number [%12d]\n",number);
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(" Mean Interrupt dTSC [%12llu] us [%12llu]\n",mean_tsc,mean_tsc*1000/clk_per_msec);
printf(" Max Interrupt dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
 
gnuplot_clear();
max_limit = max_tsc*1000/clk_per_msec;
plot_exec_c_distrib(num,max_tsc,pidstr);
 
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]++;
}
arr_stats_from_execs(num,&min_tsc,&mean_tsc,&max_tsc);
 
sprintf(tmpstr,"Int C-dist");
gnuplot_draw(tmpstr,max_limit,0);
 
gnuplot_clear();
max_limit = total_dtsc*1000/clk_per_msec;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
int h1,h2,h3;
 
h1 = ((exec_list[i].start-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
h2 = ((exec_list[i].start+exec_list[i].dtsc-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
for (h3=h1;h3<h2;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec)*(h3-h1)/(h2-h1);
for (h3=h2;h3<=DRAW_NUM;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec);
 
}
sprintf(tmpstr,"Int Demand-Function");
gnuplot_draw(tmpstr,max_limit,1);
 
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) {
if (last_start == 0) {
last_start = exec_list[i].start;
} 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;
}
}
 
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(" Mean Arr. Delta dTSC [%12llu] us [%12llu]\n",mean_tsc,mean_tsc*1000/clk_per_msec);
printf(" Max Arr. Delta dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
 
gnuplot_clear();
plot_exec_arr_distrib(num,max_tsc,pidstr);
 
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;
}
}
 
sprintf(tmpstr,"Int Arr.Delta");
gnuplot_draw(tmpstr,max_limit,0);
 
}
 
if (task_type == PERIODICAL) {
545,122 → 705,36
 
printf("Periodical Task CTX [%5d] PID [%s]\n",context_list[num].ctx,pidstr);
 
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);
stats_from_execs(num,&tot_tsc,&min_tsc,&mean_tsc,&max_tsc,&first_tsc,&number);
 
printf(" Total Execution dTSC [%12llu] us [%12llu]\n",tot_tsc,tot_tsc*1000/clk_per_msec);
printf(" Mean CPU Bandwidth [%11f%c]\n",(double)(tot_tsc)/(double)(total_dtsc)*100.0,'%');
printf(" after first exec [%11f%c]\n",(double)(tot_tsc)/(double)(total_dtsc-first_tsc)*100.0,'%');
printf(" Execs Number [%12d]\n",number);
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(" Mean Exec dTSC [%12llu] us [%12llu]\n",mean_tsc,mean_tsc*1000/clk_per_msec);
printf(" Max Exec dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
 
gnuplot_clear();
max_limit = total_dtsc*1000/clk_per_msec;
for (i=0;i<exec_total;i++)
if (exec_list[i].ctx == context_list[num].ctx) {
int h1,h2,h3;
h1 = ((exec_list[i].start-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
h2 = ((exec_list[i].start+exec_list[i].dtsc-log_start_tsc)*1000/clk_per_msec) * DRAW_NUM / max_limit;
for (h3=h1;h3<h2;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec)*(h3-h1)/(h2-h1);
for (h3=h2;h3<=DRAW_NUM;h3++)
if (h3 <= DRAW_NUM) draw_data[h3] += (exec_list[i].dtsc*1000/clk_per_msec);
}
sprintf(tmpstr,"Ctx [%d:%s] Demand-Function",context_list[num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,1);
plot_exec_demand_function(num,pidstr);
 
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);
stats_from_jobs(num,&tot_tsc,&min_tsc,&mean_tsc,&max_tsc,&first_tsc,&number);
 
printf(" Total Job Exec dTSC [%12llu] us [%12llu]\n",tot_tsc,tot_tsc*1000/clk_per_msec);
printf(" Jobs Number [%12d]\n",number);
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(" Mean Job dTSC [%12llu] us [%12llu]\n",mean_tsc,mean_tsc*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;
plot_job_c_distrib(num,max_tsc,pidstr);
 
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]++;
}
arr_stats_from_jobs(num,&min_tsc,&mean_tsc,&max_tsc);
 
sprintf(tmpstr,"[%d:%s] jobs C-dist",context_list[num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,0);
 
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) {
if (last_start == 0) {
last_start = job_list[i].start;
} 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",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(" Mean Arr. Delta dTSC [%12llu] us [%12llu]\n",mean_tsc,mean_tsc*1000/clk_per_msec);
printf(" Max Arr. Delta dTSC [%12llu] us [%12llu]\n\n",max_tsc,max_tsc*1000/clk_per_msec);
gnuplot_clear();
plot_job_arr_distrib(num,max_tsc,pidstr);
 
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 = job_list[i].start;
}
}
 
sprintf(tmpstr,"[%d:%s] jobs Arr.Delta",context_list[num].ctx,pidstr);
gnuplot_draw(tmpstr,max_limit,0);
 
}
 
return 0;