cpufreq_update_util
sched模块通过cpufreq_update_util进行调频,
-
flags里包含SCHED_CPUFREQ_WALT,表示是WALT负载变化导致的调频;
-
否则,就是PELT负载变化引起的调频,
高通设备的默认配置中为WALT负载追踪,因此需要重点关注因WALT产生的调频;
static inline void cpufreq_update_util(struct rq *rq, unsigned int flags)
{
struct update_util_data *data;
u64 clock;
#ifdef CONFIG_SCHED_WALT
if (!(flags & SCHED_CPUFREQ_WALT))
return;
clock = sched_ktime_clock();
#else
clock = rq_clock(rq);
#endif
data = rcu_dereference_sched(*per_cpu_ptr(&cpufreq_update_util_data,
cpu_of(rq)));
if (data)
data->func(data, clock, flags);
}
调用时机
cpufreq_update_util 12 sched.h (kernel\sched) 2644
try_to_wake_up 67 core.c (kernel\sched) 2772
scheduler_tick 37 core.c (kernel\sched) 3776
__add_running_bw 9 deadline.c (kernel\sched) 89
__sub_running_bw 10 deadline.c (kernel\sched) 103
cfs_rq_util_