mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 16:41:39 +00:00
b56c68f705
When reworking core ftrace code or architectural ftrace code, it's often necessary to test/analyse/benchmark a number of ftrace_ops configurations. This patch adds a module which can be used to explore some of those configurations. I'm using this to benchmark various options for changing the way trampolines and handling of ftrace_ops work on arm64, and ensuring other architectures aren't adversely affected. For example, in a QEMU+KVM VM running on a 2GHz Xeon E5-2660 workstation, loading the module in various configurations produces: | # insmod ftrace-ops.ko | ftrace_ops: registering: | relevant ops: 1 | tracee: tracee_relevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | irrelevant ops: 0 | tracee: tracee_irrelevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | saving registers: NO | assist recursion: NO | assist RCU: NO | ftrace_ops: Attempted 100000 calls to tracee_relevant [ftrace_ops] in 1681558ns (16ns / call) | # insmod ftrace-ops.ko nr_ops_irrelevant=5 | ftrace_ops: registering: | relevant ops: 1 | tracee: tracee_relevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | irrelevant ops: 5 | tracee: tracee_irrelevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | saving registers: NO | assist recursion: NO | assist RCU: NO | ftrace_ops: Attempted 100000 calls to tracee_relevant [ftrace_ops] in 1693042ns (16ns / call) | # insmod ftrace-ops.ko nr_ops_relevant=2 | ftrace_ops: registering: | relevant ops: 2 | tracee: tracee_relevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | irrelevant ops: 0 | tracee: tracee_irrelevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | saving registers: NO | assist recursion: NO | assist RCU: NO | ftrace_ops: Attempted 100000 calls to tracee_relevant [ftrace_ops] in 11965582ns (119ns / call) | # insmod ftrace-ops.ko save_regs=true | ftrace_ops: registering: | relevant ops: 1 | tracee: tracee_relevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | irrelevant ops: 0 | tracee: tracee_irrelevant [ftrace_ops] | tracer: ops_func_nop [ftrace_ops] | saving registers: YES | assist recursion: NO | assist RCU: NO | ftrace_ops: Attempted 100000 calls to tracee_relevant [ftrace_ops] in 4459624ns (44ns / call) Link: https://lkml.kernel.org/r/20230103124912.2948963-4-mark.rutland@arm.com Cc: Florent Revest <revest@chromium.org> Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Signed-off-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
40 lines
1.6 KiB
Makefile
40 lines
1.6 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# Makefile for Linux samples code
|
|
|
|
subdir-$(CONFIG_SAMPLE_AUXDISPLAY) += auxdisplay
|
|
subdir-$(CONFIG_SAMPLE_ANDROID_BINDERFS) += binderfs
|
|
obj-$(CONFIG_SAMPLE_CONFIGFS) += configfs/
|
|
obj-$(CONFIG_SAMPLE_CONNECTOR) += connector/
|
|
obj-$(CONFIG_SAMPLE_FANOTIFY_ERROR) += fanotify/
|
|
subdir-$(CONFIG_SAMPLE_HIDRAW) += hidraw
|
|
obj-$(CONFIG_SAMPLE_HW_BREAKPOINT) += hw_breakpoint/
|
|
obj-$(CONFIG_SAMPLE_KDB) += kdb/
|
|
obj-$(CONFIG_SAMPLE_KFIFO) += kfifo/
|
|
obj-$(CONFIG_SAMPLE_KOBJECT) += kobject/
|
|
obj-$(CONFIG_SAMPLE_KPROBES) += kprobes/
|
|
subdir-$(CONFIG_SAMPLE_LANDLOCK) += landlock
|
|
obj-$(CONFIG_SAMPLE_LIVEPATCH) += livepatch/
|
|
subdir-$(CONFIG_SAMPLE_PIDFD) += pidfd
|
|
obj-$(CONFIG_SAMPLE_QMI_CLIENT) += qmi/
|
|
obj-$(CONFIG_SAMPLE_RPMSG_CLIENT) += rpmsg/
|
|
subdir-$(CONFIG_SAMPLE_SECCOMP) += seccomp
|
|
subdir-$(CONFIG_SAMPLE_TIMER) += timers
|
|
obj-$(CONFIG_SAMPLE_TRACE_EVENTS) += trace_events/
|
|
obj-$(CONFIG_SAMPLE_TRACE_CUSTOM_EVENTS) += trace_events/
|
|
obj-$(CONFIG_SAMPLE_TRACE_PRINTK) += trace_printk/
|
|
obj-$(CONFIG_SAMPLE_FTRACE_DIRECT) += ftrace/
|
|
obj-$(CONFIG_SAMPLE_FTRACE_DIRECT_MULTI) += ftrace/
|
|
obj-$(CONFIG_SAMPLE_FTRACE_OPS) += ftrace/
|
|
obj-$(CONFIG_SAMPLE_TRACE_ARRAY) += ftrace/
|
|
subdir-$(CONFIG_SAMPLE_UHID) += uhid
|
|
obj-$(CONFIG_VIDEO_PCI_SKELETON) += v4l/
|
|
obj-y += vfio-mdev/
|
|
subdir-$(CONFIG_SAMPLE_VFS) += vfs
|
|
obj-$(CONFIG_SAMPLE_INTEL_MEI) += mei/
|
|
subdir-$(CONFIG_SAMPLE_WATCHDOG) += watchdog
|
|
subdir-$(CONFIG_SAMPLE_WATCH_QUEUE) += watch_queue
|
|
obj-$(CONFIG_DEBUG_KMEMLEAK_TEST) += kmemleak/
|
|
obj-$(CONFIG_SAMPLE_CORESIGHT_SYSCFG) += coresight/
|
|
obj-$(CONFIG_SAMPLE_FPROBE) += fprobe/
|
|
obj-$(CONFIG_SAMPLES_RUST) += rust/
|