The existing cpu_frequency trace_event can be verbose, emitting an event for every CPU in the policy even when their frequencies are identical.
This patch adds a new policy_frequency trace event, which provides a more efficient alternative to cpu_frequency trace event. This option allows users who only need frequency at a policy level more concise logs with simpler analysis. Signed-off-by: Samuel Wu <[email protected]> --- drivers/cpufreq/cpufreq.c | 2 ++ include/trace/events/power.h | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 4472bb1ec83c..b65534a4fd9a 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -345,6 +345,7 @@ static void cpufreq_notify_transition(struct cpufreq_policy *policy, pr_debug("FREQ: %u - CPUs: %*pbl\n", freqs->new, cpumask_pr_args(policy->cpus)); + trace_policy_frequency(freqs->new, policy->cpu); for_each_cpu(cpu, policy->cpus) trace_cpu_frequency(freqs->new, cpu); @@ -2214,6 +2215,7 @@ unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy, arch_scale_freq_ref(policy->cpu)); cpufreq_stats_record_transition(policy, freq); + trace_policy_frequency(freq, policy->cpu); if (trace_cpu_frequency_enabled()) { for_each_cpu(cpu, policy->cpus) trace_cpu_frequency(freq, cpu); diff --git a/include/trace/events/power.h b/include/trace/events/power.h index 82904291c2b8..87dbd53c8ea1 100644 --- a/include/trace/events/power.h +++ b/include/trace/events/power.h @@ -188,6 +188,27 @@ DEFINE_EVENT(cpu, cpu_frequency, TP_ARGS(frequency, cpu_id) ); +TRACE_EVENT(policy_frequency, + + TP_PROTO(unsigned int frequency, unsigned int policy_cpu), + + TP_ARGS(frequency, policy_cpu), + + TP_STRUCT__entry( + __field(u32, frequency) + __field(u32, policy_cpu) + ), + + TP_fast_assign( + __entry->frequency = frequency; + __entry->policy_cpu = policy_cpu; + ), + + TP_printk("frequency=%lu policy_cpu=%lu", + (unsigned long)__entry->frequency, + (unsigned long)__entry->policy_cpu) +); + TRACE_EVENT(cpu_frequency_limits, TP_PROTO(struct cpufreq_policy *policy), -- 2.51.2.1041.gc1ab5b90ca-goog
