**Next message:**Yuyang Du: "[PATCH v2 10/12] sched/fair: Remove scale_load_down() for load_avg"**Previous message:**Yuyang Du: "[PATCH v2 07/12] sched/fair: Generalize the load/util averages resolution definition"**In reply to:**Yuyang Du: "[PATCH v2 07/12] sched/fair: Generalize the load/util averages resolution definition"**Next in thread:**Yuyang Du: "[PATCH v2 10/12] sched/fair: Remove scale_load_down() for load_avg"**Messages sorted by:**[ date ] [ thread ] [ subject ] [ author ]

These sched metrics have become complex enough. We introduce them

at their definitions.

Signed-off-by: Yuyang Du <yuyang.du@xxxxxxxxx>

---

include/linux/sched.h | 60 ++++++++++++++++++++++++++++++++++++++++---------

1 file changed, 49 insertions(+), 11 deletions(-)

diff --git a/include/linux/sched.h b/include/linux/sched.h

index 33e7929..a7cddd6 100644

--- a/include/linux/sched.h

+++ b/include/linux/sched.h

@@ -1211,18 +1211,56 @@ struct load_weight {

};

/*

- * The load_avg/util_avg accumulates an infinite geometric series.

- * 1) load_avg factors frequency scaling into the amount of time that a

- * sched_entity is runnable on a rq into its weight. For cfs_rq, it is the

- * aggregated such weights of all runnable and blocked sched_entities.

- * 2) util_avg factors frequency and cpu capacity scaling into the amount of time

- * that a sched_entity is running on a CPU, in the range [0..SCHED_CAPACITY_SCALE].

- * For cfs_rq, it is the aggregated such times of all runnable and

+ * The load_avg/util_avg accumulates an infinite geometric series

+ * (see __update_sched_avg() in kernel/sched/fair.c).

+ *

+ * [load_avg definition]

+ *

+ * load_avg = runnable% * scale_load_down(load)

+ *

+ * where runnable% is the time ratio that a sched_entity is runnable.

+ * For cfs_rq, it is the aggregated such load_avg of all runnable and

* blocked sched_entities.

- * The 64 bit load_sum can:

- * 1) for cfs_rq, afford 4353082796 (=2^64/47742/88761) entities with

- * the highest weight (=88761) always runnable, we should not overflow

- * 2) for entity, support any load.weight always runnable

+ *

+ * load_avg may also take frequency scaling into account:

+ *

+ * load_avg = runnable% * scale_load_down(load) * freq%

+ *

+ * where freq% is the CPU frequency normalize to the highest frequency

+ *

+ * [util_avg definition]

+ *

+ * util_avg = running% * SCHED_CAPACITY_SCALE

+ *

+ * where running% is the time ratio that a sched_entity is running on

+ * a CPU. For cfs_rq, it is the aggregated such util_avg of all runnable

+ * and blocked sched_entities.

+ *

+ * util_avg may also factor frequency scaling and CPU capacity scaling:

+ *

+ * util_avg = running% * SCHED_CAPACITY_SCALE * freq% * capacity%

+ *

+ * where freq% is the same as above, and capacity% is the CPU capacity

+ * normalized to the greatest capacity (due to uarch differences, etc).

+ *

+ * N.B., the above ratios (runnable%, running%, freq%, and capacity%)

+ * themselves are in the range of [0, 1]. To do fixed point arithmetic,

+ * we therefore scale them to as large range as necessary. This is for

+ * example reflected by util_avg's SCHED_CAPACITY_SCALE.

+ *

+ * [Overflow issue]

+ *

+ * The 64bit load_sum can have 4353082796 (=2^64/47742/88761) entities

+ * with the highest load (=88761) always runnable on a single cfs_rq, we

+ * should not overflow as the number already hits PID_MAX_LIMIT.

+ *

+ * For all other cases (including 32bit kernel), struct load_weight's

+ * weight will overflow first before we do, because:

+ *

+ * Max(load_avg) <= Max(load.weight)

+ *

+ * Then, it is the load_weight's responsibility to consider overflow

+ * issues.

*/

struct sched_avg {

u64 last_update_time, load_sum;

--

1.7.9.5

**Next message:**Yuyang Du: "[PATCH v2 10/12] sched/fair: Remove scale_load_down() for load_avg"**Previous message:**Yuyang Du: "[PATCH v2 07/12] sched/fair: Generalize the load/util averages resolution definition"**In reply to:**Yuyang Du: "[PATCH v2 07/12] sched/fair: Generalize the load/util averages resolution definition"**Next in thread:**Yuyang Du: "[PATCH v2 10/12] sched/fair: Remove scale_load_down() for load_avg"**Messages sorted by:**[ date ] [ thread ] [ subject ] [ author ]