/*
* 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 32
double y;
void calc_runnable_avg_yN_inv(void )
{
int i;
unsigned int x;
/* To silence -Wunused-but-set-variable warnings. */
printf("static const u32 runnable_avg_yN_inv[] __maybe_unused = {" );
for (i = 0 ; i < HALFLIFE; i++) {
x = ((1 UL<<32 )-1 )*pow(y, i);
if (i % 6 == 0 ) printf("\n\t" );
printf("0x%8x, " , x);
}
printf("\n};\n\n" );
}
int sum = 1024 ;
void calc_runnable_avg_yN_sum(void )
{
int i;
printf("static const u32 runnable_avg_yN_sum[] = {\n\t 0," );
for (i = 1 ; i <= HALFLIFE; i++) {
if (i == 1 )
sum *= y;
else
sum = sum*y + 1024 *y;
if (i % 11 == 0 )
printf("\n\t" );
printf("%5d," , sum);
}
printf("\n};\n\n" );
}
int n = -1 ;
/* first period */
long max = 1024 ;
void calc_converged_max(void )
{
long last = 0 , y_inv = ((1 UL<<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);
}
void calc_accumulated_sum_32(void )
{
int i, 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" );
}
void main(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();
}
Messung V0.5 in Prozent C=87 H=87 G=86
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland