Now that runnable_load_avg is no more used, we can remove it to make space for a new signal.
Unified · Split
| @@ -357,7 +357,7 @@ struct util_est { · 356 unmodified lines | ||
| 357 | 357 | |
| 358 | 358 | /* |
| 359 | 359 | * The load_avg/util_avg accumulates an infinite geometric series |
| 360 | − * (see __update_load_avg() in kernel/sched/fair.c). | |
| 360 | + * (see __update_load_avg_cfs_rq() in kernel/sched/pelt.c). | |
| 361 | 361 | * |
| 362 | 362 | * [load_avg definition] |
| 363 | 363 | * |
| @@ -401,11 +401,9 @@ struct util_est { · 37 unmodified lines | ||
| 401 | 401 | struct sched_avg { |
| 402 | 402 | u64 last_update_time; |
| 403 | 403 | u64 load_sum; |
| 404 | − u64 runnable_load_sum; | |
| 405 | 404 | u32 util_sum; |
| 406 | 405 | u32 period_contrib; |
| 407 | 406 | unsigned long load_avg; |
| 408 | − unsigned long runnable_load_avg; | |
| 409 | 407 | unsigned long util_avg; |
| 410 | 408 | struct util_est util_est; |
| 411 | 409 | } ____cacheline_aligned; |
| @@ -449,7 +447,6 @@ struct sched_statistics { · 37 unmodified lines | ||
| 449 | 447 | struct sched_entity { |
| 450 | 448 | /* For load-balancing: */ |
| 451 | 449 | struct load_weight load; |
| 452 | − unsigned long runnable_weight; | |
| 453 | 450 | struct rb_node run_node; |
| 454 | 451 | struct list_head group_node; |
| 455 | 452 | unsigned int on_rq; |
| @@ -761,7 +761,6 @@ static void set_load_weight(struct task_struct *p, bool update_load) · 760 unmodified lines | ||
| 761 | 761 | if (task_has_idle_policy(p)) { |
| 762 | 762 | load->weight = scale_load(WEIGHT_IDLEPRIO); |
| 763 | 763 | load->inv_weight = WMULT_IDLEPRIO; |
| 764 | − p->se.runnable_weight = load->weight; | |
| 765 | 764 | return; |
| 766 | 765 | } |
| 767 | 766 | |
| @@ -774,7 +773,6 @@ static void set_load_weight(struct task_struct *p, bool update_load) · 6 unmodified lines | ||
| 774 | 773 | } else { |
| 775 | 774 | load->weight = scale_load(sched_prio_to_weight[prio]); |
| 776 | 775 | load->inv_weight = sched_prio_to_wmult[prio]; |
| 777 | − p->se.runnable_weight = load->weight; | |
| 778 | 776 | } |
| 779 | 777 | } |
| 780 | 778 | |
| @@ -402,11 +402,9 @@ static void print_cfs_group_stats(struct seq_file *m, int cpu, struct task_group · 401 unmodified lines | ||
| 402 | 402 | } |
| 403 | 403 | |
| 404 | 404 | P(se->load.weight); |
| 405 | − P(se->runnable_weight); | |
| 406 | 405 | #ifdef CONFIG_SMP |
| 407 | 406 | P(se->avg.load_avg); |
| 408 | 407 | P(se->avg.util_avg); |
| 409 | − P(se->avg.runnable_load_avg); | |
| 410 | 408 | #endif |
| 411 | 409 | |
| 412 | 410 | #undef PN_SCHEDSTAT |
| @@ -524,11 +522,8 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) · 111 unmodified lines | ||
| 524 | 522 | SEQ_printf(m, " .%-30s: %d\n", "nr_running", cfs_rq->nr_running); |
| 525 | 523 | SEQ_printf(m, " .%-30s: %ld\n", "load", cfs_rq->load.weight); |
| 526 | 524 | #ifdef CONFIG_SMP |
| 527 | − SEQ_printf(m, " .%-30s: %ld\n", "runnable_weight", cfs_rq->runnable_weight); | |
| 528 | 525 | SEQ_printf(m, " .%-30s: %lu\n", "load_avg", |
| 529 | 526 | cfs_rq->avg.load_avg); |
| 530 | − SEQ_printf(m, " .%-30s: %lu\n", "runnable_load_avg", | |
| 531 | − cfs_rq->avg.runnable_load_avg); | |
| 532 | 527 | SEQ_printf(m, " .%-30s: %lu\n", "util_avg", |
| 533 | 528 | cfs_rq->avg.util_avg); |
| 534 | 529 | SEQ_printf(m, " .%-30s: %u\n", "util_est_enqueued", |
| @@ -947,13 +942,10 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns, · 412 unmodified lines | ||
| 947 | 942 | "nr_involuntary_switches", (long long)p->nivcsw); |
| 948 | 943 | |
| 949 | 944 | P(se.load.weight); |
| 950 | − P(se.runnable_weight); | |
| 951 | 945 | #ifdef CONFIG_SMP |
| 952 | 946 | P(se.avg.load_sum); |
| 953 | − P(se.avg.runnable_load_sum); | |
| 954 | 947 | P(se.avg.util_sum); |
| 955 | 948 | P(se.avg.load_avg); |
| 956 | − P(se.avg.runnable_load_avg); | |
| 957 | 949 | P(se.avg.util_avg); |
| 958 | 950 | P(se.avg.last_update_time); |
| 959 | 951 | P(se.avg.util_est.ewma); |
| @@ -741,9 +741,7 @@ void init_entity_runnable_average(struct sched_entity *se) · 740 unmodified lines | ||
| 741 | 741 | * nothing has been attached to the task group yet. |
| 742 | 742 | */ |
| 743 | 743 | if (entity_is_task(se)) |
| 744 | − sa->runnable_load_avg = sa->load_avg = scale_load_down(se->load.weight); | |
| 745 | − | |
| 746 | − se->runnable_weight = se->load.weight; | |
| 744 | + sa->load_avg = scale_load_down(se->load.weight); | |
| 747 | 745 | |
| 748 | 746 | /* when this task enqueue'ed, it will contribute to its cfs_rq's load_avg */ |
| 749 | 747 | } |
| @@ -2898,25 +2896,6 @@ account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se) · 2148 unmodified lines | ||
| 2898 | 2896 | } while (0) |
| 2899 | 2897 | |
| 2900 | 2898 | #ifdef CONFIG_SMP |
| 2901 | −static inline void | |
| 2902 | −enqueue_runnable_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) | |
| 2903 | −{ | |
| 2904 | − cfs_rq->runnable_weight += se->runnable_weight; | |
| 2905 | − | |
| 2906 | − cfs_rq->avg.runnable_load_avg += se->avg.runnable_load_avg; | |
| 2907 | − cfs_rq->avg.runnable_load_sum += se_runnable(se) * se->avg.runnable_load_sum; | |
| 2908 | −} | |
| 2909 | − | |
| 2910 | −static inline void | |
| 2911 | −dequeue_runnable_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) | |
| 2912 | −{ | |
| 2913 | − cfs_rq->runnable_weight -= se->runnable_weight; | |
| 2914 | − | |
| 2915 | − sub_positive(&cfs_rq->avg.runnable_load_avg, se->avg.runnable_load_avg); | |
| 2916 | − sub_positive(&cfs_rq->avg.runnable_load_sum, | |
| 2917 | − se_runnable(se) * se->avg.runnable_load_sum); | |
| 2918 | −} | |
| 2919 | − | |
| 2920 | 2899 | static inline void |
| 2921 | 2900 | enqueue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 2922 | 2901 | { |
| @@ -2932,28 +2911,22 @@ dequeue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) · 9 unmodified lines | ||
| 2932 | 2911 | } |
| 2933 | 2912 | #else |
| 2934 | 2913 | static inline void |
| 2935 | −enqueue_runnable_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) { } | |
| 2936 | −static inline void | |
| 2937 | −dequeue_runnable_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) { } | |
| 2938 | −static inline void | |
| 2939 | 2914 | enqueue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) { } |
| 2940 | 2915 | static inline void |
| 2941 | 2916 | dequeue_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) { } |
| 2942 | 2917 | #endif |
| 2943 | 2918 | |
| 2944 | 2919 | static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, |
| 2945 | − unsigned long weight, unsigned long runnable) | |
| 2920 | + unsigned long weight) | |
| 2946 | 2921 | { |
| 2947 | 2922 | if (se->on_rq) { |
| 2948 | 2923 | /* commit outstanding execution time */ |
| 2949 | 2924 | if (cfs_rq->curr == se) |
| 2950 | 2925 | update_curr(cfs_rq); |
| 2951 | 2926 | account_entity_dequeue(cfs_rq, se); |
| 2952 | − dequeue_runnable_load_avg(cfs_rq, se); | |
| 2953 | 2927 | } |
| 2954 | 2928 | dequeue_load_avg(cfs_rq, se); |
| 2955 | 2929 | |
| 2956 | − se->runnable_weight = runnable; | |
| 2957 | 2930 | update_load_set(&se->load, weight); |
| 2958 | 2931 | |
| 2959 | 2932 | #ifdef CONFIG_SMP |
| @@ -2961,16 +2934,13 @@ static void reweight_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, · 1 unmodified line | ||
| 2961 | 2934 | u32 divider = LOAD_AVG_MAX - 1024 + se->avg.period_contrib; |
| 2962 | 2935 | |
| 2963 | 2936 | se->avg.load_avg = div_u64(se_weight(se) * se->avg.load_sum, divider); |
| 2964 | − se->avg.runnable_load_avg = | |
| 2965 | − div_u64(se_runnable(se) * se->avg.runnable_load_sum, divider); | |
| 2966 | 2937 | } while (0); |
| 2967 | 2938 | #endif |
| 2968 | 2939 | |
| 2969 | 2940 | enqueue_load_avg(cfs_rq, se); |
| 2970 | − if (se->on_rq) { | |
| 2941 | + if (se->on_rq) | |
| 2971 | 2942 | account_entity_enqueue(cfs_rq, se); |
| 2972 | − enqueue_runnable_load_avg(cfs_rq, se); | |
| 2973 | − } | |
| 2943 | + | |
| 2974 | 2944 | } |
| 2975 | 2945 | |
| 2976 | 2946 | void reweight_task(struct task_struct *p, int prio) |
| @@ -2980,7 +2950,7 @@ void reweight_task(struct task_struct *p, int prio) · 3 unmodified lines | ||
| 2980 | 2950 | struct load_weight *load = &se->load; |
| 2981 | 2951 | unsigned long weight = scale_load(sched_prio_to_weight[prio]); |
| 2982 | 2952 | |
| 2983 | − reweight_entity(cfs_rq, se, weight, weight); | |
| 2953 | + reweight_entity(cfs_rq, se, weight); | |
| 2984 | 2954 | load->inv_weight = sched_prio_to_wmult[prio]; |
| 2985 | 2955 | } |
| 2986 | 2956 | |
| @@ -3092,50 +3062,6 @@ static long calc_group_shares(struct cfs_rq *cfs_rq) · 105 unmodified lines | ||
| 3092 | 3062 | */ |
| 3093 | 3063 | return clamp_t(long, shares, MIN_SHARES, tg_shares); |
| 3094 | 3064 | } |
| 3095 | − | |
| 3096 | −/* | |
| 3097 | − * This calculates the effective runnable weight for a group entity based on | |
| 3098 | − * the group entity weight calculated above. | |
| 3099 | − * | |
| 3100 | − * Because of the above approximation (2), our group entity weight is | |
| 3101 | − * an load_avg based ratio (3). This means that it includes blocked load and | |
| 3102 | − * does not represent the runnable weight. | |
| 3103 | − * | |
| 3104 | − * Approximate the group entity's runnable weight per ratio from the group | |
| 3105 | − * runqueue: | |
| 3106 | − * | |
| 3107 | − * grq->avg.runnable_load_avg | |
| 3108 | − * ge->runnable_weight = ge->load.weight * -------------------------- (7) | |
| 3109 | − * grq->avg.load_avg | |
| 3110 | − * | |
| 3111 | − * However, analogous to above, since the avg numbers are slow, this leads to | |
| 3112 | − * transients in the from-idle case. Instead we use: | |
| 3113 | − * | |
| 3114 | − * ge->runnable_weight = ge->load.weight * | |
| 3115 | − * | |
| 3116 | − * max(grq->avg.runnable_load_avg, grq->runnable_weight) | |
| 3117 | − * ----------------------------------------------------- (8) | |
| 3118 | − * max(grq->avg.load_avg, grq->load.weight) | |
| 3119 | − * | |
| 3120 | − * Where these max() serve both to use the 'instant' values to fix the slow | |
| 3121 | − * from-idle and avoid the /0 on to-idle, similar to (6). | |
| 3122 | − */ | |
| 3123 | −static long calc_group_runnable(struct cfs_rq *cfs_rq, long shares) | |
| 3124 | −{ | |
| 3125 | − long runnable, load_avg; | |
| 3126 | − | |
| 3127 | − load_avg = max(cfs_rq->avg.load_avg, | |
| 3128 | − scale_load_down(cfs_rq->load.weight)); | |
| 3129 | − | |
| 3130 | − runnable = max(cfs_rq->avg.runnable_load_avg, | |
| 3131 | − scale_load_down(cfs_rq->runnable_weight)); | |
| 3132 | − | |
| 3133 | − runnable *= shares; | |
| 3134 | − if (load_avg) | |
| 3135 | − runnable /= load_avg; | |
| 3136 | − | |
| 3137 | − return clamp_t(long, runnable, MIN_SHARES, shares); | |
| 3138 | −} | |
| 3139 | 3065 | #endif /* CONFIG_SMP */ |
| 3140 | 3066 | |
| 3141 | 3067 | static inline int throttled_hierarchy(struct cfs_rq *cfs_rq); |
| @@ -3147,7 +3073,7 @@ static inline int throttled_hierarchy(struct cfs_rq *cfs_rq); · 5 unmodified lines | ||
| 3147 | 3073 | static void update_cfs_group(struct sched_entity *se) |
| 3148 | 3074 | { |
| 3149 | 3075 | struct cfs_rq *gcfs_rq = group_cfs_rq(se); |
| 3150 | − long shares, runnable; | |
| 3076 | + long shares; | |
| 3151 | 3077 | |
| 3152 | 3078 | if (!gcfs_rq) |
| 3153 | 3079 | return; |
| @@ -3156,16 +3082,15 @@ static void update_cfs_group(struct sched_entity *se) · 2 unmodified lines | ||
| 3156 | 3082 | return; |
| 3157 | 3083 | |
| 3158 | 3084 | #ifndef CONFIG_SMP |
| 3159 | − runnable = shares = READ_ONCE(gcfs_rq->tg->shares); | |
| 3085 | + shares = READ_ONCE(gcfs_rq->tg->shares); | |
| 3160 | 3086 | |
| 3161 | 3087 | if (likely(se->load.weight == shares)) |
| 3162 | 3088 | return; |
| 3163 | 3089 | #else |
| 3164 | 3090 | shares = calc_group_shares(gcfs_rq); |
| 3165 | − runnable = calc_group_runnable(gcfs_rq, shares); | |
| 3166 | 3091 | #endif |
| 3167 | 3092 | |
| 3168 | − reweight_entity(cfs_rq_of(se), se, shares, runnable); | |
| 3093 | + reweight_entity(cfs_rq_of(se), se, shares); | |
| 3169 | 3094 | } |
| 3170 | 3095 | |
| 3171 | 3096 | #else /* CONFIG_FAIR_GROUP_SCHED */ |
| @@ -3290,11 +3215,11 @@ void set_task_rq_fair(struct sched_entity *se, · 118 unmodified lines | ||
| 3290 | 3215 | * _IFF_ we look at the pure running and runnable sums. Because they |
| 3291 | 3216 | * represent the very same entity, just at different points in the hierarchy. |
| 3292 | 3217 | * |
| 3293 | − * Per the above update_tg_cfs_util() is trivial and simply copies the running | |
| 3294 | − * sum over (but still wrong, because the group entity and group rq do not have | |
| 3295 | − * their PELT windows aligned). | |
| 3218 | + * Per the above update_tg_cfs_util() is trivial * and simply copies the | |
| 3219 | + * running sum over (but still wrong, because the group entity and group rq do | |
| 3220 | + * not have their PELT windows aligned). | |
| 3296 | 3221 | * |
| 3297 | − * However, update_tg_cfs_runnable() is more complex. So we have: | |
| 3222 | + * However, update_tg_cfs_load() is more complex. So we have: | |
| 3298 | 3223 | * |
| 3299 | 3224 | * ge->avg.load_avg = ge->load.weight * ge->avg.runnable_avg (2) |
| 3300 | 3225 | * |
| @@ -3375,11 +3300,11 @@ update_tg_cfs_util(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cfs_rq · 74 unmodified lines | ||
| 3375 | 3300 | } |
| 3376 | 3301 | |
| 3377 | 3302 | static inline void |
| 3378 | −update_tg_cfs_runnable(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cfs_rq *gcfs_rq) | |
| 3303 | +update_tg_cfs_load(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cfs_rq *gcfs_rq) | |
| 3379 | 3304 | { |
| 3380 | 3305 | long delta_avg, running_sum, runnable_sum = gcfs_rq->prop_runnable_sum; |
| 3381 | − unsigned long runnable_load_avg, load_avg; | |
| 3382 | − u64 runnable_load_sum, load_sum = 0; | |
| 3306 | + unsigned long load_avg; | |
| 3307 | + u64 load_sum = 0; | |
| 3383 | 3308 | s64 delta_sum; |
| 3384 | 3309 | |
| 3385 | 3310 | if (!runnable_sum) |
| @@ -3427,20 +3352,6 @@ update_tg_cfs_runnable(struct cfs_rq *cfs_rq, struct sched_entity *se, struct cf · 41 unmodified lines | ||
| 3427 | 3352 | se->avg.load_avg = load_avg; |
| 3428 | 3353 | add_positive(&cfs_rq->avg.load_avg, delta_avg); |
| 3429 | 3354 | add_positive(&cfs_rq->avg.load_sum, delta_sum); |
| 3430 | − | |
| 3431 | − runnable_load_sum = (s64)se_runnable(se) * runnable_sum; | |
| 3432 | − runnable_load_avg = div_s64(runnable_load_sum, LOAD_AVG_MAX); | |
| 3433 | − | |
| 3434 | − if (se->on_rq) { | |
| 3435 | − delta_sum = runnable_load_sum - | |
| 3436 | − se_weight(se) * se->avg.runnable_load_sum; | |
| 3437 | − delta_avg = runnable_load_avg - se->avg.runnable_load_avg; | |
| 3438 | − add_positive(&cfs_rq->avg.runnable_load_avg, delta_avg); | |
| 3439 | − add_positive(&cfs_rq->avg.runnable_load_sum, delta_sum); | |
| 3440 | − } | |
| 3441 | − | |
| 3442 | − se->avg.runnable_load_sum = runnable_sum; | |
| 3443 | − se->avg.runnable_load_avg = runnable_load_avg; | |
| 3444 | 3355 | } |
| 3445 | 3356 | |
| 3446 | 3357 | static inline void add_tg_cfs_propagate(struct cfs_rq *cfs_rq, long runnable_sum) |
| @@ -3468,7 +3379,7 @@ static inline int propagate_entity_load_avg(struct sched_entity *se) · 21 unmodified lines | ||
| 3468 | 3379 | add_tg_cfs_propagate(cfs_rq, gcfs_rq->prop_runnable_sum); |
| 3469 | 3380 | |
| 3470 | 3381 | update_tg_cfs_util(cfs_rq, se, gcfs_rq); |
| 3471 | − update_tg_cfs_runnable(cfs_rq, se, gcfs_rq); | |
| 3382 | + update_tg_cfs_load(cfs_rq, se, gcfs_rq); | |
| 3472 | 3383 | |
| 3473 | 3384 | trace_pelt_cfs_tp(cfs_rq); |
| 3474 | 3385 | trace_pelt_se_tp(se); |
| @@ -3612,8 +3523,6 @@ static void attach_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *s · 137 unmodified lines | ||
| 3612 | 3523 | div_u64(se->avg.load_avg * se->avg.load_sum, se_weight(se)); |
| 3613 | 3524 | } |
| 3614 | 3525 | |
| 3615 | − se->avg.runnable_load_sum = se->avg.load_sum; | |
| 3616 | − | |
| 3617 | 3526 | enqueue_load_avg(cfs_rq, se); |
| 3618 | 3527 | cfs_rq->avg.util_avg += se->avg.util_avg; |
| 3619 | 3528 | cfs_rq->avg.util_sum += se->avg.util_sum; |
| @@ -4074,14 +3983,12 @@ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) · 454 unmodified lines | ||
| 4074 | 3983 | /* |
| 4075 | 3984 | * When enqueuing a sched_entity, we must: |
| 4076 | 3985 | * - Update loads to have both entity and cfs_rq synced with now. |
| 4077 | − * - Add its load to cfs_rq->runnable_avg | |
| 4078 | 3986 | * - For group_entity, update its weight to reflect the new share of |
| 4079 | 3987 | * its group cfs_rq |
| 4080 | 3988 | * - Add its new weight to cfs_rq->load.weight |
| 4081 | 3989 | */ |
| 4082 | 3990 | update_load_avg(cfs_rq, se, UPDATE_TG | DO_ATTACH); |
| 4083 | 3991 | update_cfs_group(se); |
| 4084 | − enqueue_runnable_load_avg(cfs_rq, se); | |
| 4085 | 3992 | account_entity_enqueue(cfs_rq, se); |
| 4086 | 3993 | |
| 4087 | 3994 | if (flags & ENQUEUE_WAKEUP) |
| @@ -4158,13 +4065,11 @@ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags) · 70 unmodified lines | ||
| 4158 | 4065 | /* |
| 4159 | 4066 | * When dequeuing a sched_entity, we must: |
| 4160 | 4067 | * - Update loads to have both entity and cfs_rq synced with now. |
| 4161 | − * - Subtract its load from the cfs_rq->runnable_avg. | |
| 4162 | 4068 | * - Subtract its previous weight from cfs_rq->load.weight. |
| 4163 | 4069 | * - For group entity, update its weight to reflect the new share |
| 4164 | 4070 | * of its group cfs_rq. |
| 4165 | 4071 | */ |
| 4166 | 4072 | update_load_avg(cfs_rq, se, UPDATE_TG); |
| 4167 | − dequeue_runnable_load_avg(cfs_rq, se); | |
| 4168 | 4073 | |
| 4169 | 4074 | update_stats_dequeue(cfs_rq, se, flags); |
| 4170 | 4075 | |
| @@ -7649,9 +7554,6 @@ static inline bool cfs_rq_is_decayed(struct cfs_rq *cfs_rq) · 3478 unmodified lines | ||
| 7649 | 7554 | if (cfs_rq->avg.util_sum) |
| 7650 | 7555 | return false; |
| 7651 | 7556 | |
| 7652 | − if (cfs_rq->avg.runnable_load_sum) | |
| 7653 | − return false; | |
| 7654 | − | |
| 7655 | 7557 | return true; |
| 7656 | 7558 | } |
| 7657 | 7559 | |
| @@ -108,7 +108,7 @@ static u32 __accumulate_pelt_segments(u64 periods, u32 d1, u32 d3) · 107 unmodified lines | ||
| 108 | 108 | */ |
| 109 | 109 | static __always_inline u32 |
| 110 | 110 | accumulate_sum(u64 delta, struct sched_avg *sa, |
| 111 | − unsigned long load, unsigned long runnable, int running) | |
| 111 | + unsigned long load, int running) | |
| 112 | 112 | { |
| 113 | 113 | u32 contrib = (u32)delta; /* p == 0 -> delta < 1024 */ |
| 114 | 114 | u64 periods; |
| @@ -121,8 +121,6 @@ accumulate_sum(u64 delta, struct sched_avg *sa, · 6 unmodified lines | ||
| 121 | 121 | */ |
| 122 | 122 | if (periods) { |
| 123 | 123 | sa->load_sum = decay_load(sa->load_sum, periods); |
| 124 | − sa->runnable_load_sum = | |
| 125 | − decay_load(sa->runnable_load_sum, periods); | |
| 126 | 124 | sa->util_sum = decay_load((u64)(sa->util_sum), periods); |
| 127 | 125 | |
| 128 | 126 | /* |
| @@ -148,8 +146,6 @@ accumulate_sum(u64 delta, struct sched_avg *sa, · 19 unmodified lines | ||
| 148 | 146 | |
| 149 | 147 | if (load) |
| 150 | 148 | sa->load_sum += load * contrib; |
| 151 | − if (runnable) | |
| 152 | − sa->runnable_load_sum += runnable * contrib; | |
| 153 | 149 | if (running) |
| 154 | 150 | sa->util_sum += contrib << SCHED_CAPACITY_SHIFT; |
| 155 | 151 | |
| @@ -186,7 +182,7 @@ accumulate_sum(u64 delta, struct sched_avg *sa, · 30 unmodified lines | ||
| 186 | 182 | */ |
| 187 | 183 | static __always_inline int |
| 188 | 184 | ___update_load_sum(u64 now, struct sched_avg *sa, |
| 189 | − unsigned long load, unsigned long runnable, int running) | |
| 185 | + unsigned long load, int running) | |
| 190 | 186 | { |
| 191 | 187 | u64 delta; |
| 192 | 188 | |
| @@ -222,7 +218,7 @@ ___update_load_sum(u64 now, struct sched_avg *sa, · 29 unmodified lines | ||
| 222 | 218 | * Also see the comment in accumulate_sum(). |
| 223 | 219 | */ |
| 224 | 220 | if (!load) |
| 225 | − runnable = running = 0; | |
| 221 | + running = 0; | |
| 226 | 222 | |
| 227 | 223 | /* |
| 228 | 224 | * Now we know we crossed measurement unit boundaries. The *_avg |
| @@ -231,14 +227,14 @@ ___update_load_sum(u64 now, struct sched_avg *sa, · 2 unmodified lines | ||
| 231 | 227 | * Step 1: accumulate *_sum since last_update_time. If we haven't |
| 232 | 228 | * crossed period boundaries, finish. |
| 233 | 229 | */ |
| 234 | − if (!accumulate_sum(delta, sa, load, runnable, running)) | |
| 230 | + if (!accumulate_sum(delta, sa, load, running)) | |
| 235 | 231 | return 0; |
| 236 | 232 | |
| 237 | 233 | return 1; |
| 238 | 234 | } |
| 239 | 235 | |
| 240 | 236 | static __always_inline void |
| 241 | −___update_load_avg(struct sched_avg *sa, unsigned long load, unsigned long runnable) | |
| 237 | +___update_load_avg(struct sched_avg *sa, unsigned long load) | |
| 242 | 238 | { |
| 243 | 239 | u32 divider = LOAD_AVG_MAX - 1024 + sa->period_contrib; |
| 244 | 240 | |
| @@ -246,7 +242,6 @@ ___update_load_avg(struct sched_avg *sa, unsigned long load, unsigned long runna · 1 unmodified line | ||
| 246 | 242 | * Step 2: update *_avg. |
| 247 | 243 | */ |
| 248 | 244 | sa->load_avg = div_u64(load * sa->load_sum, divider); |
| 249 | − sa->runnable_load_avg = div_u64(runnable * sa->runnable_load_sum, divider); | |
| 250 | 245 | WRITE_ONCE(sa->util_avg, sa->util_sum / divider); |
| 251 | 246 | } |
| 252 | 247 | |
| @@ -254,17 +249,13 @@ ___update_load_avg(struct sched_avg *sa, unsigned long load, unsigned long runna · 1 unmodified line | ||
| 254 | 249 | * sched_entity: |
| 255 | 250 | * |
| 256 | 251 | * task: |
| 257 | − * se_runnable() == se_weight() | |
| 252 | + * se_weight() = se->load.weight | |
| 258 | 253 | * |
| 259 | 254 | * group: [ see update_cfs_group() ] |
| 260 | 255 | * se_weight() = tg->weight * grq->load_avg / tg->load_avg |
| 261 | − * se_runnable() = se_weight(se) * grq->runnable_load_avg / grq->load_avg | |
| 262 | 256 | * |
| 263 | − * load_sum := runnable_sum | |
| 264 | − * load_avg = se_weight(se) * runnable_avg | |
| 265 | − * | |
| 266 | − * runnable_load_sum := runnable_sum | |
| 267 | − * runnable_load_avg = se_runnable(se) * runnable_avg | |
| 257 | + * load_sum := runnable | |
| 258 | + * load_avg = se_weight(se) * load_sum | |
| 268 | 259 | * |
| 269 | 260 | * XXX collapse load_sum and runnable_load_sum |
| 270 | 261 | * |
| @@ -272,15 +263,12 @@ ___update_load_avg(struct sched_avg *sa, unsigned long load, unsigned long runna · 1 unmodified line | ||
| 272 | 263 | * |
| 273 | 264 | * load_sum = \Sum se_weight(se) * se->avg.load_sum |
| 274 | 265 | * load_avg = \Sum se->avg.load_avg |
| 275 | − * | |
| 276 | − * runnable_load_sum = \Sum se_runnable(se) * se->avg.runnable_load_sum | |
| 277 | − * runnable_load_avg = \Sum se->avg.runable_load_avg | |
| 278 | 266 | */ |
| 279 | 267 | |
| 280 | 268 | int __update_load_avg_blocked_se(u64 now, struct sched_entity *se) |
| 281 | 269 | { |
| 282 | − if (___update_load_sum(now, &se->avg, 0, 0, 0)) { | |
| 283 | − ___update_load_avg(&se->avg, se_weight(se), se_runnable(se)); | |
| 270 | + if (___update_load_sum(now, &se->avg, 0, 0)) { | |
| 271 | + ___update_load_avg(&se->avg, se_weight(se)); | |
| 284 | 272 | trace_pelt_se_tp(se); |
| 285 | 273 | return 1; |
| 286 | 274 | } |
| @@ -290,10 +278,9 @@ int __update_load_avg_blocked_se(u64 now, struct sched_entity *se) · 3 unmodified lines | ||
| 290 | 278 | |
| 291 | 279 | int __update_load_avg_se(u64 now, struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 292 | 280 | { |
| 293 | − if (___update_load_sum(now, &se->avg, !!se->on_rq, !!se->on_rq, | |
| 294 | − cfs_rq->curr == se)) { | |
| 281 | + if (___update_load_sum(now, &se->avg, !!se->on_rq, cfs_rq->curr == se)) { | |
| 295 | 282 | |
| 296 | − ___update_load_avg(&se->avg, se_weight(se), se_runnable(se)); | |
| 283 | + ___update_load_avg(&se->avg, se_weight(se)); | |
| 297 | 284 | cfs_se_util_change(&se->avg); |
| 298 | 285 | trace_pelt_se_tp(se); |
| 299 | 286 | return 1; |
| @@ -306,10 +293,9 @@ int __update_load_avg_cfs_rq(u64 now, struct cfs_rq *cfs_rq) · 6 unmodified lines | ||
| 306 | 293 | { |
| 307 | 294 | if (___update_load_sum(now, &cfs_rq->avg, |
| 308 | 295 | scale_load_down(cfs_rq->load.weight), |
| 309 | − scale_load_down(cfs_rq->runnable_weight), | |
| 310 | 296 | cfs_rq->curr != NULL)) { |
| 311 | 297 | |
| 312 | − ___update_load_avg(&cfs_rq->avg, 1, 1); | |
| 298 | + ___update_load_avg(&cfs_rq->avg, 1); | |
| 313 | 299 | trace_pelt_cfs_tp(cfs_rq); |
| 314 | 300 | return 1; |
| 315 | 301 | } |
| @@ -322,20 +308,19 @@ int __update_load_avg_cfs_rq(u64 now, struct cfs_rq *cfs_rq) · 6 unmodified lines | ||
| 322 | 308 | * |
| 323 | 309 | * util_sum = \Sum se->avg.util_sum but se->avg.util_sum is not tracked |
| 324 | 310 | * util_sum = cpu_scale * load_sum |
| 325 | − * runnable_load_sum = load_sum | |
| 311 | + * runnable_sum = util_sum | |
| 326 | 312 | * |
| 327 | − * load_avg and runnable_load_avg are not supported and meaningless. | |
| 313 | + * load_avg is not supported and meaningless. | |
| 328 | 314 | * |
| 329 | 315 | */ |
| 330 | 316 | |
| 331 | 317 | int update_rt_rq_load_avg(u64 now, struct rq *rq, int running) |
| 332 | 318 | { |
| 333 | 319 | if (___update_load_sum(now, &rq->avg_rt, |
| 334 | − running, | |
| 335 | 320 | running, |
| 336 | 321 | running)) { |
| 337 | 322 | |
| 338 | − ___update_load_avg(&rq->avg_rt, 1, 1); | |
| 323 | + ___update_load_avg(&rq->avg_rt, 1); | |
| 339 | 324 | trace_pelt_rt_tp(rq); |
| 340 | 325 | return 1; |
| 341 | 326 | } |
| @@ -348,18 +333,19 @@ int update_rt_rq_load_avg(u64 now, struct rq *rq, int running) · 6 unmodified lines | ||
| 348 | 333 | * |
| 349 | 334 | * util_sum = \Sum se->avg.util_sum but se->avg.util_sum is not tracked |
| 350 | 335 | * util_sum = cpu_scale * load_sum |
| 351 | − * runnable_load_sum = load_sum | |
| 336 | + * runnable_sum = util_sum | |
| 337 | + * | |
| 338 | + * load_avg is not supported and meaningless. | |
| 352 | 339 | * |
| 353 | 340 | */ |
| 354 | 341 | |
| 355 | 342 | int update_dl_rq_load_avg(u64 now, struct rq *rq, int running) |
| 356 | 343 | { |
| 357 | 344 | if (___update_load_sum(now, &rq->avg_dl, |
| 358 | − running, | |
| 359 | 345 | running, |
| 360 | 346 | running)) { |
| 361 | 347 | |
| 362 | − ___update_load_avg(&rq->avg_dl, 1, 1); | |
| 348 | + ___update_load_avg(&rq->avg_dl, 1); | |
| 363 | 349 | trace_pelt_dl_tp(rq); |
| 364 | 350 | return 1; |
| 365 | 351 | } |
| @@ -373,7 +359,9 @@ int update_dl_rq_load_avg(u64 now, struct rq *rq, int running) · 7 unmodified lines | ||
| 373 | 359 | * |
| 374 | 360 | * util_sum = \Sum se->avg.util_sum but se->avg.util_sum is not tracked |
| 375 | 361 | * util_sum = cpu_scale * load_sum |
| 376 | − * runnable_load_sum = load_sum | |
| 362 | + * runnable_sum = util_sum | |
| 363 | + * | |
| 364 | + * load_avg is not supported and meaningless. | |
| 377 | 365 | * |
| 378 | 366 | */ |
| 379 | 367 | |
| @@ -401,16 +389,14 @@ int update_irq_load_avg(struct rq *rq, u64 running) · 21 unmodified lines | ||
| 401 | 389 | * rq->clock += delta with delta >= running |
| 402 | 390 | */ |
| 403 | 391 | ret = ___update_load_sum(rq->clock - running, &rq->avg_irq, |
| 404 | − 0, | |
| 405 | 392 | 0, |
| 406 | 393 | 0); |
| 407 | 394 | ret += ___update_load_sum(rq->clock, &rq->avg_irq, |
| 408 | − 1, | |
| 409 | 395 | 1, |
| 410 | 396 | 1); |
| 411 | 397 | |
| 412 | 398 | if (ret) { |
| 413 | − ___update_load_avg(&rq->avg_irq, 1, 1); | |
| 399 | + ___update_load_avg(&rq->avg_irq, 1); | |
| 414 | 400 | trace_pelt_irq_tp(rq); |
| 415 | 401 | } |
| 416 | 402 | |
| @@ -489,7 +489,6 @@ struct cfs_bandwidth { }; · 488 unmodified lines | ||
| 489 | 489 | /* CFS-related fields in a runqueue */ |
| 490 | 490 | struct cfs_rq { |
| 491 | 491 | struct load_weight load; |
| 492 | − unsigned long runnable_weight; | |
| 493 | 492 | unsigned int nr_running; |
| 494 | 493 | unsigned int h_nr_running; /* SCHED_{NORMAL,BATCH,IDLE} */ |
| 495 | 494 | unsigned int idle_h_nr_running; /* SCHED_IDLE */ |
| @@ -688,8 +687,10 @@ struct dl_rq { · 192 unmodified lines | ||
| 688 | 687 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 689 | 688 | /* An entity is a task if it doesn't "own" a runqueue */ |
| 690 | 689 | #define entity_is_task(se) (!se->my_q) |
| 690 | + | |
| 691 | 691 | #else |
| 692 | 692 | #define entity_is_task(se) 1 |
| 693 | + | |
| 693 | 694 | #endif |
| 694 | 695 | |
| 695 | 696 | #ifdef CONFIG_SMP |
| @@ -701,10 +702,6 @@ static inline long se_weight(struct sched_entity *se) · 5 unmodified lines | ||
| 701 | 702 | return scale_load_down(se->load.weight); |
| 702 | 703 | } |
| 703 | 704 | |
| 704 | −static inline long se_runnable(struct sched_entity *se) | |
| 705 | −{ | |
| 706 | − return scale_load_down(se->runnable_weight); | |
| 707 | −} | |
| 708 | 705 | |
| 709 | 706 | static inline bool sched_asym_prefer(int a, int b) |
| 710 | 707 | { |