cpufreq: amd-pstate: Add trace for AMD P-State module
Add trace event to monitor the performance value changes which is controlled by cpu governors. Signed-off-by: Huang Rui <ray.huang@amd.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
e059c184da
commit
60e10f896d
|
@ -17,6 +17,10 @@ obj-$(CONFIG_CPU_FREQ_GOV_ATTR_SET) += cpufreq_governor_attr_set.o
|
||||||
obj-$(CONFIG_CPUFREQ_DT) += cpufreq-dt.o
|
obj-$(CONFIG_CPUFREQ_DT) += cpufreq-dt.o
|
||||||
obj-$(CONFIG_CPUFREQ_DT_PLATDEV) += cpufreq-dt-platdev.o
|
obj-$(CONFIG_CPUFREQ_DT_PLATDEV) += cpufreq-dt-platdev.o
|
||||||
|
|
||||||
|
# Traces
|
||||||
|
CFLAGS_amd-pstate-trace.o := -I$(src)
|
||||||
|
amd_pstate-y := amd-pstate.o amd-pstate-trace.o
|
||||||
|
|
||||||
##################################################################################
|
##################################################################################
|
||||||
# x86 drivers.
|
# x86 drivers.
|
||||||
# Link order matters. K8 is preferred to ACPI because of firmware bugs in early
|
# Link order matters. K8 is preferred to ACPI because of firmware bugs in early
|
||||||
|
@ -25,7 +29,7 @@ obj-$(CONFIG_CPUFREQ_DT_PLATDEV) += cpufreq-dt-platdev.o
|
||||||
# speedstep-* is preferred over p4-clockmod.
|
# speedstep-* is preferred over p4-clockmod.
|
||||||
|
|
||||||
obj-$(CONFIG_X86_ACPI_CPUFREQ) += acpi-cpufreq.o
|
obj-$(CONFIG_X86_ACPI_CPUFREQ) += acpi-cpufreq.o
|
||||||
obj-$(CONFIG_X86_AMD_PSTATE) += amd-pstate.o
|
obj-$(CONFIG_X86_AMD_PSTATE) += amd_pstate.o
|
||||||
obj-$(CONFIG_X86_POWERNOW_K8) += powernow-k8.o
|
obj-$(CONFIG_X86_POWERNOW_K8) += powernow-k8.o
|
||||||
obj-$(CONFIG_X86_PCC_CPUFREQ) += pcc-cpufreq.o
|
obj-$(CONFIG_X86_PCC_CPUFREQ) += pcc-cpufreq.o
|
||||||
obj-$(CONFIG_X86_POWERNOW_K6) += powernow-k6.o
|
obj-$(CONFIG_X86_POWERNOW_K6) += powernow-k6.o
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
#define CREATE_TRACE_POINTS
|
||||||
|
#include "amd-pstate-trace.h"
|
|
@ -0,0 +1,77 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
/*
|
||||||
|
* amd-pstate-trace.h - AMD Processor P-state Frequency Driver Tracer
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Author: Huang Rui <ray.huang@amd.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(_AMD_PSTATE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||||
|
#define _AMD_PSTATE_TRACE_H
|
||||||
|
|
||||||
|
#include <linux/cpufreq.h>
|
||||||
|
#include <linux/tracepoint.h>
|
||||||
|
#include <linux/trace_events.h>
|
||||||
|
|
||||||
|
#undef TRACE_SYSTEM
|
||||||
|
#define TRACE_SYSTEM amd_cpu
|
||||||
|
|
||||||
|
#undef TRACE_INCLUDE_FILE
|
||||||
|
#define TRACE_INCLUDE_FILE amd-pstate-trace
|
||||||
|
|
||||||
|
#define TPS(x) tracepoint_string(x)
|
||||||
|
|
||||||
|
TRACE_EVENT(amd_pstate_perf,
|
||||||
|
|
||||||
|
TP_PROTO(unsigned long min_perf,
|
||||||
|
unsigned long target_perf,
|
||||||
|
unsigned long capacity,
|
||||||
|
unsigned int cpu_id,
|
||||||
|
bool changed,
|
||||||
|
bool fast_switch
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_ARGS(min_perf,
|
||||||
|
target_perf,
|
||||||
|
capacity,
|
||||||
|
cpu_id,
|
||||||
|
changed,
|
||||||
|
fast_switch
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_STRUCT__entry(
|
||||||
|
__field(unsigned long, min_perf)
|
||||||
|
__field(unsigned long, target_perf)
|
||||||
|
__field(unsigned long, capacity)
|
||||||
|
__field(unsigned int, cpu_id)
|
||||||
|
__field(bool, changed)
|
||||||
|
__field(bool, fast_switch)
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_fast_assign(
|
||||||
|
__entry->min_perf = min_perf;
|
||||||
|
__entry->target_perf = target_perf;
|
||||||
|
__entry->capacity = capacity;
|
||||||
|
__entry->cpu_id = cpu_id;
|
||||||
|
__entry->changed = changed;
|
||||||
|
__entry->fast_switch = fast_switch;
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_printk("amd_min_perf=%lu amd_des_perf=%lu amd_max_perf=%lu cpu_id=%u changed=%s fast_switch=%s",
|
||||||
|
(unsigned long)__entry->min_perf,
|
||||||
|
(unsigned long)__entry->target_perf,
|
||||||
|
(unsigned long)__entry->capacity,
|
||||||
|
(unsigned int)__entry->cpu_id,
|
||||||
|
(__entry->changed) ? "true" : "false",
|
||||||
|
(__entry->fast_switch) ? "true" : "false"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
#endif /* _AMD_PSTATE_TRACE_H */
|
||||||
|
|
||||||
|
/* This part must be outside protection */
|
||||||
|
#undef TRACE_INCLUDE_PATH
|
||||||
|
#define TRACE_INCLUDE_PATH .
|
||||||
|
|
||||||
|
#include <trace/define_trace.h>
|
|
@ -44,6 +44,7 @@
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/cpufeature.h>
|
#include <asm/cpufeature.h>
|
||||||
#include <asm/cpu_device_id.h>
|
#include <asm/cpu_device_id.h>
|
||||||
|
#include "amd-pstate-trace.h"
|
||||||
|
|
||||||
#define AMD_PSTATE_TRANSITION_LATENCY 0x20000
|
#define AMD_PSTATE_TRANSITION_LATENCY 0x20000
|
||||||
#define AMD_PSTATE_TRANSITION_DELAY 500
|
#define AMD_PSTATE_TRANSITION_DELAY 500
|
||||||
|
@ -220,6 +221,9 @@ static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
|
||||||
value &= ~AMD_CPPC_MAX_PERF(~0L);
|
value &= ~AMD_CPPC_MAX_PERF(~0L);
|
||||||
value |= AMD_CPPC_MAX_PERF(max_perf);
|
value |= AMD_CPPC_MAX_PERF(max_perf);
|
||||||
|
|
||||||
|
trace_amd_pstate_perf(min_perf, des_perf, max_perf,
|
||||||
|
cpudata->cpu, (value != prev), fast_switch);
|
||||||
|
|
||||||
if (value == prev)
|
if (value == prev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue