mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-01 09:36:49 +07:00
6795b85c6a
We can monitor the effectiveness of our power management of both the kernel and hypervisor by probing the timer interrupt. For example, on this box we see 10.37s timer interrupts on an idle core: <idle>-0 [010] 3900.671297: timer_interrupt_entry: pt_regs=c0000000ce1e7b10 <idle>-0 [010] 3900.671302: timer_interrupt_exit: pt_regs=c0000000ce1e7b10 <idle>-0 [010] 3911.042963: timer_interrupt_entry: pt_regs=c0000000ce1e7b10 <idle>-0 [010] 3911.042968: timer_interrupt_exit: pt_regs=c0000000ce1e7b10 <idle>-0 [010] 3921.414630: timer_interrupt_entry: pt_regs=c0000000ce1e7b10 <idle>-0 [010] 3921.414635: timer_interrupt_exit: pt_regs=c0000000ce1e7b10 Since we have a 207MHz decrementer it will go negative and fire every 10.37s even if Linux is completely idle. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
88 lines
1.3 KiB
C
88 lines
1.3 KiB
C
#undef TRACE_SYSTEM
|
|
#define TRACE_SYSTEM powerpc
|
|
|
|
#if !defined(_TRACE_POWERPC_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
#define _TRACE_POWERPC_H
|
|
|
|
#include <linux/tracepoint.h>
|
|
|
|
struct pt_regs;
|
|
|
|
TRACE_EVENT(irq_entry,
|
|
|
|
TP_PROTO(struct pt_regs *regs),
|
|
|
|
TP_ARGS(regs),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(struct pt_regs *, regs)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->regs = regs;
|
|
),
|
|
|
|
TP_printk("pt_regs=%p", __entry->regs)
|
|
);
|
|
|
|
TRACE_EVENT(irq_exit,
|
|
|
|
TP_PROTO(struct pt_regs *regs),
|
|
|
|
TP_ARGS(regs),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(struct pt_regs *, regs)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->regs = regs;
|
|
),
|
|
|
|
TP_printk("pt_regs=%p", __entry->regs)
|
|
);
|
|
|
|
TRACE_EVENT(timer_interrupt_entry,
|
|
|
|
TP_PROTO(struct pt_regs *regs),
|
|
|
|
TP_ARGS(regs),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(struct pt_regs *, regs)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->regs = regs;
|
|
),
|
|
|
|
TP_printk("pt_regs=%p", __entry->regs)
|
|
);
|
|
|
|
TRACE_EVENT(timer_interrupt_exit,
|
|
|
|
TP_PROTO(struct pt_regs *regs),
|
|
|
|
TP_ARGS(regs),
|
|
|
|
TP_STRUCT__entry(
|
|
__field(struct pt_regs *, regs)
|
|
),
|
|
|
|
TP_fast_assign(
|
|
__entry->regs = regs;
|
|
),
|
|
|
|
TP_printk("pt_regs=%p", __entry->regs)
|
|
);
|
|
|
|
#endif /* _TRACE_POWERPC_H */
|
|
|
|
#undef TRACE_INCLUDE_PATH
|
|
#undef TRACE_INCLUDE_FILE
|
|
|
|
#define TRACE_INCLUDE_PATH asm
|
|
#define TRACE_INCLUDE_FILE trace
|
|
|
|
#include <trace/define_trace.h>
|