diff options
Diffstat (limited to 'Documentation/scheduler/sched-pelt.c')
-rw-r--r-- | Documentation/scheduler/sched-pelt.c | 65 |
1 files changed, 41 insertions, 24 deletions
diff --git a/Documentation/scheduler/sched-pelt.c b/Documentation/scheduler/sched-pelt.c index e4219139386a..20ebf049aa09 100644 --- a/Documentation/scheduler/sched-pelt.c +++ b/Documentation/scheduler/sched-pelt.c @@ -10,34 +10,34 @@ #include <math.h> #include <stdio.h> -#define HALFLIFE 32 +#define HALFLIFE { 32, 16, 8 } #define SHIFT 32 double y; -void calc_runnable_avg_yN_inv(void) +void calc_runnable_avg_yN_inv(const int halflife) { int i; unsigned int x; printf("static const u32 runnable_avg_yN_inv[] = {"); - for (i = 0; i < HALFLIFE; i++) { + for (i = 0; i < halflife; i++) { x = ((1UL<<32)-1)*pow(y, i); - if (i % 6 == 0) printf("\n\t"); - printf("0x%8x, ", x); + if (i % 4 == 0) printf("\n\t"); + printf("0x%8x,", x); } printf("\n};\n\n"); } -int sum = 1024; +int sum; -void calc_runnable_avg_yN_sum(void) +void calc_runnable_avg_yN_sum(const int halflife) { int i; printf("static const u32 runnable_avg_yN_sum[] = {\n\t 0,"); - for (i = 1; i <= HALFLIFE; i++) { + for (i = 1; i <= halflife; i++) { if (i == 1) sum *= y; else @@ -51,11 +51,10 @@ void calc_runnable_avg_yN_sum(void) printf("\n};\n\n"); } -int n = -1; -/* first period */ -long max = 1024; +int n; +long max; -void calc_converged_max(void) +void calc_converged_max(const int halflife) { long last = 0, y_inv = ((1UL<<32)-1)*y; @@ -73,17 +72,17 @@ void calc_converged_max(void) last = max; } n--; - printf("#define LOAD_AVG_PERIOD %d\n", HALFLIFE); + 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); + printf("#define LOAD_AVG_MAX_N %d\n\n", n); } -void calc_accumulated_sum_32(void) +void calc_accumulated_sum_32(const int halflife) { int i, x = sum; printf("static const u32 __accumulated_sum_N32[] = {\n\t 0,"); - for (i = 1; i <= n/HALFLIFE+1; i++) { + for (i = 1; i <= n/halflife+1; i++) { if (i > 1) x = x/2 + sum; @@ -97,12 +96,30 @@ void calc_accumulated_sum_32(void) 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(); + int hl_value[] = HALFLIFE; + int hl_count = sizeof(hl_value) / sizeof(int); + int hl_idx, halflife; + + printf("/* SPDX-License-Identifier: GPL-2.0 */\n"); + printf("/* Generated by Documentation/scheduler/sched-pelt; do not modify. */\n"); + + for (hl_idx = 0; hl_idx < hl_count; ++hl_idx) { + halflife = hl_value[hl_idx]; + + y = pow(0.5, 1/(double)halflife); + sum = 1024; + /* first period */ + max = 1024; + n = -1; + + printf("\n#ifdef CONFIG_PELT_UTIL_HALFLIFE_%d\n", halflife); + calc_runnable_avg_yN_inv(halflife); + calc_runnable_avg_yN_sum(halflife); + calc_converged_max(halflife); + /* + * calc_accumulated_sum_32(halflife) precomputed load sum table of half-life, + * not used yet. + */ + printf("#endif\n"); + } } |