110 lines · c
1/*2 * The following program is used to generate the constants for3 * computing sched averages.4 *5 * ==============================================================6 * C program (compile with -lm)7 * ==============================================================8 */9 10#include <math.h>11#include <stdio.h>12 13#define HALFLIFE 3214#define SHIFT 3215 16double y;17 18void calc_runnable_avg_yN_inv(void)19{20 int i;21 unsigned int x;22 23 /* To silence -Wunused-but-set-variable warnings. */24 printf("static const u32 runnable_avg_yN_inv[] __maybe_unused = {");25 for (i = 0; i < HALFLIFE; i++) {26 x = ((1UL<<32)-1)*pow(y, i);27 28 if (i % 6 == 0) printf("\n\t");29 printf("0x%8x, ", x);30 }31 printf("\n};\n\n");32}33 34int sum = 1024;35 36void calc_runnable_avg_yN_sum(void)37{38 int i;39 40 printf("static const u32 runnable_avg_yN_sum[] = {\n\t 0,");41 for (i = 1; i <= HALFLIFE; i++) {42 if (i == 1)43 sum *= y;44 else45 sum = sum*y + 1024*y;46 47 if (i % 11 == 0)48 printf("\n\t");49 50 printf("%5d,", sum);51 }52 printf("\n};\n\n");53}54 55int n = -1;56/* first period */57long max = 1024;58 59void calc_converged_max(void)60{61 long last = 0, y_inv = ((1UL<<32)-1)*y;62 63 for (; ; n++) {64 if (n > -1)65 max = ((max*y_inv)>>SHIFT) + 1024;66 /*67 * This is the same as:68 * max = max*y + 1024;69 */70 71 if (last == max)72 break;73 74 last = max;75 }76 n--;77 printf("#define LOAD_AVG_PERIOD %d\n", HALFLIFE);78 printf("#define LOAD_AVG_MAX %ld\n", max);79// printf("#define LOAD_AVG_MAX_N %d\n\n", n);80}81 82void calc_accumulated_sum_32(void)83{84 int i, x = sum;85 86 printf("static const u32 __accumulated_sum_N32[] = {\n\t 0,");87 for (i = 1; i <= n/HALFLIFE+1; i++) {88 if (i > 1)89 x = x/2 + sum;90 91 if (i % 6 == 0)92 printf("\n\t");93 94 printf("%6d,", x);95 }96 printf("\n};\n\n");97}98 99void main(void)100{101 printf("/* Generated by Documentation/scheduler/sched-pelt; do not modify. */\n\n");102 103 y = pow(0.5, 1/(double)HALFLIFE);104 105 calc_runnable_avg_yN_inv();106// calc_runnable_avg_yN_sum();107 calc_converged_max();108// calc_accumulated_sum_32();109}110