sched/doc: Update documentation for base_slice_ns and CONFIG_HZ relation
authorMukesh Kumar Chaurasiya <mchauras@linux.ibm.com>
Wed, 20 Mar 2024 17:38:16 +0000 (23:08 +0530)
committerIngo Molnar <mingo@kernel.org>
Thu, 21 Mar 2024 19:34:16 +0000 (20:34 +0100)
The tunable base_slice_ns is dependent on CONFIG_HZ (i.e. TICK_NSEC)
for any significant performance improvement. The reason being the
scheduler tick is not frequent enough to force preemption when
base_slice expires in case of:

           base_slice_ns < TICK_NSEC

The below data is of stress-ng:

Number of CPU: 1
Stressor threads: 4
Time: 30sec

On CONFIG_HZ=1000

| base_slice | avg-run (msec) | context-switches |
| ---------- | -------------- | ---------------- |
| 3ms        | 2.914          | 10342            |
| 6ms        | 4.857          | 6196             |
| 9ms        | 6.754          | 4482             |
| 12ms       | 7.872          | 3802             |
| 22ms       | 11.294         | 2710             |
| 32ms       | 13.425         | 2284             |

On CONFIG_HZ=100

| base_slice | avg-run (msec) | context-switches |
| ---------- | -------------- | ---------------- |
| 3ms        | 9.144          | 3337             |
| 6ms        | 9.113          | 3301             |
| 9ms        | 8.991          | 3315             |
| 12ms       | 12.935         | 2328             |
| 22ms       | 16.031         | 1915             |
| 32ms       | 18.608         | 1622             |

base_slice: the value of base_slice in ms
avg-run (msec): average time of the stressor threads got on cpu before
it got preempted
context-switches: number of context switches for the stress-ng process

Signed-off-by: Mukesh Kumar Chaurasiya <mchauras@linux.ibm.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Randy Dunlap <rdunlap@infradead.org>
Link: https://lore.kernel.org/r/20240320173815.927637-2-mchauras@linux.ibm.com
Documentation/scheduler/sched-design-CFS.rst

index 6cffffe265006e8b71751649dc06e99852fb507e..e030876fbd689265b276f72a0126c08c2facd1c6 100644 (file)
@@ -100,6 +100,9 @@ which can be used to tune the scheduler from "desktop" (i.e., low latencies) to
 "server" (i.e., good batching) workloads.  It defaults to a setting suitable
 for desktop workloads.  SCHED_BATCH is handled by the CFS scheduler module too.
 
 "server" (i.e., good batching) workloads.  It defaults to a setting suitable
 for desktop workloads.  SCHED_BATCH is handled by the CFS scheduler module too.
 
+In case CONFIG_HZ results in base_slice_ns < TICK_NSEC, the value of
+base_slice_ns will have little to no impact on the workloads.
+
 Due to its design, the CFS scheduler is not prone to any of the "attacks" that
 exist today against the heuristics of the stock scheduler: fiftyp.c, thud.c,
 chew.c, ring-test.c, massive_intr.c all work fine and do not impact
 Due to its design, the CFS scheduler is not prone to any of the "attacks" that
 exist today against the heuristics of the stock scheduler: fiftyp.c, thud.c,
 chew.c, ring-test.c, massive_intr.c all work fine and do not impact