brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 7238b35 Raw
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