Currently, we are determining the L2 cache sibling of silvers at runtime
on every iteration FBT. It is better to do this setup once, and gather
this information from hardware rather than hardcoding the results.
Change-Id: I06ec2f590dc9ccc2ec9161f1a60eb47d77244153
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: Ieca864be1e26e39c56fd0be6be135d4085e5d8aa
Signed-off-by: Sai Harshini Nimmala <snimmala@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Currently we use ~6% (right shift by 4 is really 6.25%) as a
threshold of energy
saving to move a task to a cpu other than the prev_cpu.
Change it to 3%.
Change-Id: I0d0177bbef2c22bcf37e6da42c3ed857f986c478
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: Ib4c5091436e0536bcb2ee63e9a31d9b1dd51dbe9
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
The proper kernel provides tracehooks to indicate when its done
initializing topology. Use that hook to simplify walt initialization.
Change-Id: Ifa7540f2f65bf469c1f8007bb15d5e1317475929
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: I9e3d2f76f07c2b2f2a5d4a6d9831489251de1455
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
When a task is being placed on silver and is not a filtered task and is
not a small task, look for a gold for this task.
Change-Id: Ic6f5a047e4f25c66f4b7be1f0b48ca49a2c5aa50
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Currently, the code uses walt util for energy evaluation. That could be
inaccurate because walt prs signals drive cpufreq. Change to using
prs.
Change-Id: Iea073c7963bf27ab1308950b07a2aead1c73805c
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
A cluster that does not host prev cpu and or any of the candidates
doesn't affect the energy values. Don't calculate their contributions.
Change-Id: Id1b890dbf157fa27d90287202f7916c6ab102bba
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Currently, energy evaluation occurs only on one target cpu chosen
across all CPU clusters.
Change the algorithm to track target cpus for each cluster and
subsequently perform energy calculations on these candidates.
For a cluster, if both an idle cpu and a busy cpu is found, prefer
idle cpu. That also means, once idle if found there is no need to
visit upcoming busy cpus as we traverse the cpus in a cluster.
Change-Id: Idd832748cdd01e0995783b1959332acd66e94cd6
Signed-off-by: Sai Harshini Nimmala <snimmala@codeaurora.org>
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Currently the sched_switch_ctrs trace event is dependent on
debugfs to get enabled, and not compatible with all builds.
Move the sched_switch_ctrs to dynamic trace point registration
under walt dynamic tp, as the trace event has considerable
overhead and need to enabled on need basis.
Change-Id: I6d9eb328ecf14a15e27d67dd5c1a46b0383aa860
Signed-off-by: Lingutla Chandrasekhar <clingutla@codeaurora.org>
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
Signed-off-by: Sai Harshini Nimmala <snimmala@codeaurora.org>
Some trace events might not need to be enabled always, but
needed for debug purpose. It is not optimal to register trace
event, which is used for debug purpose only. So registering such
trace events might add extra overhead in hotpaths.
So add control knob for registering such trace events to trace points,
which can be enabled whenever needed them. And can be unregister when
not needed.
To enable such event registration, write:
echo 1 > /proc/sys/walt/sched_enable_tp
And register sched_overutilized trace event with dynamic support, this
event is copied from Qais's debug change in chrome project:
https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/2128628
Change-Id: I8983e31d405a635b38c7c985b56c2f564855d3e6
Signed-off-by: Lingutla Chandrasekhar <clingutla@codeaurora.org>
Disable LPM for hysteresis time if CONSERVATIVE_BOOST is enabled.
Change-Id: If88513b664c00ecb2cd48961b907bec719e822a9
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Certain unsigned int values are being specified as %lu instead of %u and
it is leading to incorrectly displayed values.
Change-Id: I26f65ef24a89c277e2da0f88c1e3d683ef545057
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
When a task is not on a rq when it should be, halt and
print some useful information.
Change-Id: Iaecbf372c712acba98879c8afb4e073d50a962f7
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
Add util_busy_hist feature which looks at the total cpu_util
across all CPUs as a metric for LPM biasing on CPUs.
Change-Id: Ie148178dfdc8f2b13fd447b1a87d60176f53f4a7
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Add util_busy_hist sysctl tunables which solely
look at the sum of cpu_util across CPUs as a metric for
LPM biasing on any/all CPUs.
Change-Id: Ib981c21a58059ef02772ee797808c5f30547a688
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
Printing CPUs info is useful while going through error paths.
Change-Id: If84794163b6c417d419785fdddd2eed98588f2eb
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
The rq clock gets updated in the scheduler tick. However, if the
lock is acquired remotely between the scheduler tick and the
vendor hook, the clock update flags gets reset. Do the clock
update in walt_cfs_account_mvp_runtime based on the clock update
flags.
Change-Id: Ie4254a191a18458cf1684070bc96ff63cf0103d3
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
Protect MVP tasks list access in the tick path with rq lock.
Change-Id: I387aa104cbacaf445bf739b8fb6d631283bd0ada
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: I3280c12b5446b8c12fd4269efc2c1dad70e4ae6a
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Change min_freq and max_freq to be policy_min_freq, policy_max_freq.
Change-Id: Ief7ee31209338e6fc25f4ad8933b60256ac5eb95
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
When experiencing frequency related issues, it will be helpful to be
aware of any potential clamping issues, as well as reasons why we might
end up not updating to a different frequency.
Change-Id: I0be24d713421357e077cd01d5c84f43138a17b24
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
Add sched_sync_hint_enable not to enable/disable sync.
Change-Id: I455545487d002b4e3caf96c6cf8569549c3b1bbe
Signed-off-by: Tengfei Fan <tengfeif@codeaurora.org>
lock ordering issue is observed in below scenario where preferred cluster
for the task is being set on one CPU while task is being attached to
related thread group which leads to deadlock.
CPUX:
scheduler_tick() --> acquire rq_lock()
trace_android_rvh_tick_entry()
android_rvh_tick_entry()
set_preferred_cluster() --> try to acquire RTG lock taken by CPUY
CPUY:
cpu_cgroup_attach()
trace_android_rvh_cpu_cgroup_attach()
android_rvh_cpu_cgroup_attach()
__sched_set_group_id()
add_task_to_group() --> acquire RTG lock
__task_rq_lock() --> try to acquire task's rq_lock() which is CPUX
Fix the issue by moving set_preferred_cluster() related piece of code
which is being called from scheduler_tick() to android_vh_scheduler_tick
trace hook.
Change-Id: Ib9e2d70ae45a304d21cde3de6b8a84f9049061ab
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: I5f08d40d6e9f18a905d87db078fa1a70abaa9030
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
The parameter to lockdep_assert_held should be a pointer to a lock, not the
lock itself.
Change-Id: I4586d86b8684b21370a2bc522862932481fef538
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: I9a94b20b18bf5b78946fd26d3337f5227d735e03
Signed-off-by: Satya Durga Srinivasu Prabhala <satyap@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: I2a10a999f94e2f21eb97761516c135aadbe305e7
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Walt placement code could return the prev_cpu for placement without
checking if it is in affinity mask.
Fix it by checking task's cpus_ptr.
Change-Id: I6edf2249bccffd1868dd546dc18b45af311cc91d
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
In scheduler code printk_deferred should be used instead
of pr_emerg, as this will avoid taking any locks and defer
output to a safer time.
Change-Id: I06b9060754d97f4ca141c561eb80216530e0e25e
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
There is a redundant check taking place in set_task_cpu hook. The cpu
will never be negative from core kernel side, so remove it.
Change-Id: I6d8ab62573f401d6aaeda9c5ddb1183c69e8c7d6
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
Currently, small tasks get placed on mid-cap CPUs if uclamp is active
on them. This causes power numbers to increase.
Introduce filtering such that small tasks stay on silver.
Change-Id: I7e31d8a5ffd4c4f64d7bd3668970216550d23d24
Signed-off-by: Sai Harshini Nimmala <snimmala@codeaurora.org>
When a user space task move across cpuset cgroups, the affinity
settings are lost. Fix this issue by caching the affinity of
a user space task during affinity change system call and restore
it during cpuset cgroup change when possible. The cpuset part
is implemented in the code but affinity system call part is
not implemented. This patch implements that.
Change-Id: I9322400eb275aeeb35fb623210417df4730cc6ad
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
attempt to catch double enqueue/dequeue of a task, which
can impact walt accounting.
Change-Id: I2ff83e75d65f083c8d2896dd10313c193a16fa7b
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
Catch when the rq is not the same as this task's rq.
Catch a double enqueue or dequeue of the same task.
Change-Id: I322588f4c8ad59ee48c6d14bd87c5db6d842e6f6
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: I2435c4ecd4c6a978af188a6385d306691376bb0a
Signed-off-by: Sai Harshini Nimmala <snimmala@codeaurora.org>
Introduce information into the debugging of
fixup_cumulative_runnable_avg by ensuring that the data from
the task of interest is dumped, and that the runqueue in
question is locked.
Change-Id: Idb6e3bd1b4ba67512fa6663555c22e933c9d0a6e
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
This change is for general scheduler improvement.
Change-Id: Ife8de1eee2b7aa862979073c075466c97ba980e3
Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
Signed-off-by: Stephen Dickey <dickey@codeaurora.org>
The current code does the task group initialization from a sysctl
handler invoked via post-boot. But some tasks could have been
added to the cgroups and walt would miss to act upon them.
Depending on user space to notify when to populate task group
pointers is racy. This patch moves away from this approach and use
the cpu controller cgroup online vendor hook to initialize the task
group pointers. During module load, iterate over all the existing
cgroups if any and do the initialization.
Change-Id: I133099a49f94de836b95403c5f1126587de84919
Signed-off-by: Pavankumar Kondeti <pkondeti@codeaurora.org>
We are no longer using the boosted member in the fbt_env struct. Clean
it up.
Change-Id: If8d0a68b8fb090a889c59667eb0fd8534c62af65
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
We are using the terms "prev_delta" and "best_delta" to represent energy
consumption values. Change to "prev_energy" and "best_energy" to reflect
the same.
Change-Id: Ie63e3029c3be6ee5e8cc12867d690b0fc708416f
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
We check if the current task running on the CPU has the highest per task
boost to avoid placing task on said CPU. However, if the CPU is idle,
then this check becomes unnecessary.
Change-Id: I257df862ee2b344c0c602f36f254b38f61b78e55
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
spare_cap is being calculated prior to idle_cpu evaluation. If an idle
cpu is found, then we have no need to go through this operation. As
such, move the computation to after idle cpu evaluation.
Change-Id: I86ff39909f2f0cb096ac39d02b6171838c257357
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>
In FBT, we are making an additional call to uclamp_task_util while we
have already cached that value in a local variable. Use the cached value
instead of calling the function again.
Change-Id: I05828f02570056309256907aa7fee1396134706a
Signed-off-by: Shaleen Agrawal <shalagra@codeaurora.org>