DEBUG: sched,cpufreq: add cpu_capacity change tracepoint
This is useful when we want to compare cpu utilization and cpu curr capacity side by side. Signed-off-by: Juri Lelli <juri.lelli@arm.com>
This commit is contained in:
parent
e5a25996d3
commit
dd2460f387
5 changed files with 24 additions and 11 deletions
|
@ -29,6 +29,7 @@
|
|||
#include <linux/suspend.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/tick.h>
|
||||
#include <linux/sched.h>
|
||||
#include <trace/events/power.h>
|
||||
|
||||
static LIST_HEAD(cpufreq_policy_list);
|
||||
|
@ -473,6 +474,7 @@ static void cpufreq_notify_post_transition(struct cpufreq_policy *policy,
|
|||
void cpufreq_freq_transition_begin(struct cpufreq_policy *policy,
|
||||
struct cpufreq_freqs *freqs)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
/*
|
||||
* Catch double invocations of _begin() which lead to self-deadlock.
|
||||
|
@ -501,6 +503,8 @@ wait:
|
|||
spin_unlock(&policy->transition_lock);
|
||||
|
||||
scale_freq_capacity(policy, freqs);
|
||||
for_each_cpu(cpu, policy->cpus)
|
||||
trace_cpu_capacity(capacity_curr_of(cpu), cpu);
|
||||
|
||||
cpufreq_notify_transition(policy, freqs, CPUFREQ_PRECHANGE);
|
||||
}
|
||||
|
|
|
@ -1046,6 +1046,8 @@ struct sched_group_energy {
|
|||
struct capacity_state *cap_states; /* ptr to capacity state array */
|
||||
};
|
||||
|
||||
unsigned long capacity_curr_of(int cpu);
|
||||
|
||||
struct sched_group;
|
||||
|
||||
struct sched_domain {
|
||||
|
|
|
@ -120,6 +120,13 @@ DEFINE_EVENT(cpu, cpu_frequency,
|
|||
TP_ARGS(frequency, cpu_id)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(cpu, cpu_capacity,
|
||||
|
||||
TP_PROTO(unsigned int capacity, unsigned int cpu_id),
|
||||
|
||||
TP_ARGS(capacity, cpu_id)
|
||||
);
|
||||
|
||||
TRACE_EVENT(device_pm_callback_start,
|
||||
|
||||
TP_PROTO(struct device *dev, const char *pm_ops, int event),
|
||||
|
|
|
@ -4698,6 +4698,17 @@ static long effective_load(struct task_group *tg, int cpu, long wl, long wg)
|
|||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Returns the current capacity of cpu after applying both
|
||||
* cpu and freq scaling.
|
||||
*/
|
||||
unsigned long capacity_curr_of(int cpu)
|
||||
{
|
||||
return cpu_rq(cpu)->cpu_capacity_orig *
|
||||
arch_scale_freq_capacity(NULL, cpu)
|
||||
>> SCHED_CAPACITY_SHIFT;
|
||||
}
|
||||
|
||||
static inline bool energy_aware(void)
|
||||
{
|
||||
return sched_feat(ENERGY_AWARE);
|
||||
|
|
|
@ -1512,17 +1512,6 @@ static inline unsigned long cpu_util(int cpu)
|
|||
return __cpu_util(cpu, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the current capacity of cpu after applying both
|
||||
* cpu and freq scaling.
|
||||
*/
|
||||
static inline unsigned long capacity_curr_of(int cpu)
|
||||
{
|
||||
return cpu_rq(cpu)->cpu_capacity_orig *
|
||||
arch_scale_freq_capacity(NULL, cpu)
|
||||
>> SCHED_CAPACITY_SHIFT;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ_GOV_SCHED
|
||||
|
|
Loading…
Add table
Reference in a new issue