/* * The following program is used to generate the constants for * computing sched averages. * * ============================================================== * C program (compile with -lm) * ============================================================== */#include<math.h>#include<stdio.h>#define HALFLIFE 32#define SHIFT 32doubley;voidcalc_runnable_avg_yN_inv(void){inti;unsignedintx;/* To silence -Wunused-but-set-variable warnings. */printf("static const u32 runnable_avg_yN_inv[] __maybe_unused = {");for(i=0;i<HALFLIFE;i++){x=((1UL<<32)-1)*pow(y,i);if(i%6==0)printf("\n\t");printf("0x%8x, ",x);}printf("\n};\n\n");}intsum=1024;voidcalc_runnable_avg_yN_sum(void){inti;printf("static const u32 runnable_avg_yN_sum[] = {\n\t 0,");for(i=1;i<=HALFLIFE;i++){if(i==1)sum*=y;elsesum=sum*y+1024*y;if(i%11==0)printf("\n\t");printf("%5d,",sum);}printf("\n};\n\n");}intn=-1;/* first period */longmax=1024;voidcalc_converged_max(void){longlast=0,y_inv=((1UL<<32)-1)*y;for(;;n++){if(n>-1)max=((max*y_inv)>>SHIFT)+1024;/* * This is the same as: * max = max*y + 1024; */if(last==max)break;last=max;}n--;printf("#define LOAD_AVG_PERIOD %d\n",HALFLIFE);printf("#define LOAD_AVG_MAX %ld\n",max);// printf("#define LOAD_AVG_MAX_N %d\n\n", n);}voidcalc_accumulated_sum_32(void){inti,x=sum;printf("static const u32 __accumulated_sum_N32[] = {\n\t 0,");for(i=1;i<=n/HALFLIFE+1;i++){if(i>1)x=x/2+sum;if(i%6==0)printf("\n\t");printf("%6d,",x);}printf("\n};\n\n");}voidmain(void){printf("/* Generated by Documentation/scheduler/sched-pelt; do not modify. */\n\n");y=pow(0.5,1/(double)HALFLIFE);calc_runnable_avg_yN_inv();// calc_runnable_avg_yN_sum();calc_converged_max();// calc_accumulated_sum_32();}