Lines Matching +full:3 +full:- +full:point
1 .. SPDX-License-Identifier: GPL-2.0
12 of tasks. It was introduced in v5.3 release. The CGroup support was merged in
22 point; hence the name. That is, by clamping utilization we are making the
23 system run at a certain performance point.
36 performance point to operate at to deliver the desired user experience. Or one
38 much resources and should not go above a specific performance point. Viewing
40 abstraction from user space point of view.
44 performance point required by its display pipeline to ensure no frame is
57 foreground, top-app, etc. Util clamp can be used to constrain how much
58 resources background tasks are consuming by capping the performance point they
60 the ones belonging to the currently active app (top-app group). Beside this
65 1. The big cores are free to run top-app tasks immediately. top-app
86 performance point will suffer a delay of ~200ms (PELT HALFIFE = 32ms) for the
98 the device doesn't heat up to the point where it will throttle.
103 performance point rather than being tied to MAX frequency all the time. Which
106 Note that by design RT tasks don't have per-task PELT signal and must always
114 See :ref:`section 3.4 <uclamp-default-values>` for default values and
115 :ref:`3.4.1 <sched-util-clamp-min-rt-default>` on how to change RT tasks
126 inspect PELT signals at any point of time you should continue to see them as
131 performance point for a task to run on, it must be able to influence the
150 task on the rq to only a subset of tasks on the top-most bucket.
157 uclamp value of the rq. See :ref:`section 2.1 <uclamp-buckets>` for details on
182 .. _uclamp-buckets:
185 ------------
195 +-----------+-----------+-----------+---- ----+-----------+
197 +-----------+-----------+-----------+---- ----+-----------+
199 +- p0 +- p3 +- p4
201 +- p1 +- p5
203 +- p2
227 Bucket 3: [615:819]
234 p->uclamp[UCLAMP_MIN] = 300
235 p->uclamp[UCLAMP_MAX] = 1024
249 rq->uclamp[UCLAMP_MIN] = max(rq->uclamp[UCLAMP_MIN], p->uclamp[UCLAMP_MIN])
257 rq->uclamp[UCLAMP_MIN] = search_top_bucket_for_highest_value()
261 See :ref:`section 3.4 <uclamp-default-values>` for details on default values.
265 --------------------
268 highest performance point.
271 the task that needs the highest performance point gets it even if there's
272 another task that doesn't need it or is disallowed from reaching this point.
279 p0->uclamp[UCLAMP_MIN] = 300
280 p0->uclamp[UCLAMP_MAX] = 900
282 p1->uclamp[UCLAMP_MIN] = 500
283 p1->uclamp[UCLAMP_MAX] = 500
290 rq->uclamp[UCLAMP_MIN] = max(300, 500) = 500
291 rq->uclamp[UCLAMP_MAX] = max(900, 500) = 900
293 As we shall see in :ref:`section 5.1 <uclamp-capping-fail>`, this max
298 -----------------------------
311 :ref:`Section 3 <uclamp-interfaces>` discusses the interfaces and will expand
328 ----------
335 .. _uclamp-interfaces:
337 3. Interfaces
341 -----------------------
345 * sched_util_min: requests the minimum performance point the system should run
347 * sched_util_max: requests the maximum performance point the system should run
354 attr->sched_util_min = 40% * 1024;
355 attr->sched_util_max = 80% * 1024;
362 The special value -1 is used to reset the uclamp settings to the system
365 Note that resetting the uclamp value to system default using -1 is not the same
372 ---------------------
382 * cpu.uclamp.min is a protection as described in :ref:`section 3-3 of cgroup
383 v2 documentation <cgroupv2-protections-distributor>`.
391 * cpu.uclamp.max is a limit as described in :ref:`section 3-2 of cgroup v2
392 documentation <cgroupv2-limits-distributor>`.
404 p0->uclamp[UCLAMP_MIN] = // system default;
405 p0->uclamp[UCLAMP_MAX] = // system default;
407 p1->uclamp[UCLAMP_MIN] = 40% * 1024;
408 p1->uclamp[UCLAMP_MAX] = 50% * 1024;
410 cgroup0->cpu.uclamp.min = 20% * 1024;
411 cgroup0->cpu.uclamp.max = 60% * 1024;
413 cgroup1->cpu.uclamp.min = 60% * 1024;
414 cgroup1->cpu.uclamp.max = 100% * 1024;
420 p0->uclamp[UCLAMP_MIN] = cgroup0->cpu.uclamp.min = 20% * 1024;
421 p0->uclamp[UCLAMP_MAX] = cgroup0->cpu.uclamp.max = 60% * 1024;
423 p1->uclamp[UCLAMP_MIN] = 40% * 1024; // intact
424 p1->uclamp[UCLAMP_MAX] = 50% * 1024; // intact
430 p0->uclamp[UCLAMP_MIN] = cgroup1->cpu.uclamp.min = 60% * 1024;
431 p0->uclamp[UCLAMP_MAX] = cgroup1->cpu.uclamp.max = 100% * 1024;
433 p1->uclamp[UCLAMP_MIN] = cgroup1->cpu.uclamp.min = 60% * 1024;
434 p1->uclamp[UCLAMP_MAX] = 50% * 1024; // intact
440 ---------------------
443 --------------------------
451 they won't be satisfied until it is more than p->uclamp[UCLAMP_MIN].
456 --------------------------
466 This is useful to restrict the overall maximum performance point of the system.
472 won't be satisfied until it is more than p->uclamp[UCLAMP_MAX].
476 .. _uclamp-default-values:
479 -------------------
485 p_fair->uclamp[UCLAMP_MIN] = 0
486 p_fair->uclamp[UCLAMP_MAX] = 1024
488 That is, by default they're boosted to run at the maximum performance point of
496 p_rt->uclamp[UCLAMP_MIN] = 1024
497 p_rt->uclamp[UCLAMP_MAX] = 1024
499 That is by default they're boosted to run at the maximum performance point of
505 .. _sched-util-clamp-min-rt-default:
508 -------------------------------------
510 Running RT tasks at maximum performance point is expensive on battery powered
513 performance point, this sysctl knob allows tuning the best boost value to
515 performance point all the time.
543 4.1. Boost important and DVFS-latency-sensitive tasks
544 -----------------------------------------------------
553 to ensure on next wake up it runs at a higher performance point. It should try
560 **Generally it is advised to perceive the input as performance level or point
564 -------------------------
571 -------------------
581 4.4. Per-app performance restriction
582 ------------------------------------
585 app every time it is executed to guarantee a minimum performance point and/or
597 .. _uclamp-capping-fail:
600 ---------------------------------------------------------------------
606 p0->uclamp[UCLAMP_MAX] = 512
608 and it shares the rq with p1 which is free to run at any performance point:
612 p1->uclamp[UCLAMP_MAX] = 1024
615 point:
619 rq->uclamp[UCLAMP_MAX] = max(512, 1024) = 1024
626 from the rq although p1, which is allowed to run at any performance point,
630 ------------------------------------------------
645 p0->util_avg = 300
646 p0->uclamp[UCLAMP_MAX] = 0
655 rq->uclamp[UCLAMP_MAX] = 0
657 If the ratio of Fmax/Fmin is 3, then maximum value will be:
665 long as there's idle time, p->util_avg updates will be off by a some margin,
670 p0->util_avg = 300 + small_error
683 p0->util_avg = 1024
689 p1->util_avg = 200
690 p1->uclamp[UCLAMP_MAX] = 1024
694 severely, then the rq->util_avg will be:
698 p0->util_avg = 1024
699 p1->util_avg = 200
701 rq->util_avg = 1024
702 rq->uclamp[UCLAMP_MAX] = 1024
708 p0->util_avg = 300
709 p1->util_avg = 200
711 rq->util_avg = 500
713 and run somewhere near mid performance point of that CPU, not the Fmax we get.
716 -----------------------------------
720 1. Hardware takes non-zero time to respond to any frequency change
722 2. Non fast-switch systems require a worker deadline thread to wake up
724 3. schedutil rate_limit_us drops any requests during this rate_limit_us
728 performance point when it wakes up and starts running, then all these