ftrace: updates for tip
Subsystems (4)
Steven Rostedt
maintainercover ftrace: updates for tip
Ingo,
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
branch: tip/devel
Steven Rostedt (4):
trace: rename unlikely profiler to branch profiler
ftrace: rename unlikely iter_ctrl to branch
ftrace: add tracer called branch
ftrace: rename trace_unlikely.c file
----
arch/x86/kernel/vsyscall_64.c | 2 +- arch/x86/vdso/vclock_gettime.c | 2 +- include/asm-generic/vmlinux.lds.h | 2 +- include/linux/compiler.h | 19 ++- kernel/trace/Kconfig | 10 +- kernel/trace/Makefile | 7 +- kernel/trace/trace.c | 16 +- kernel/trace/trace.h | 34 ++-- kernel/trace/trace_branch.c | 320 +++++++++++++++++++++++++++++++++++++ kernel/trace/trace_selftest.c | 23 +++ kernel/trace/trace_unlikely.c | 278 -------------------------------- 11 files changed, 390 insertions(+), 323 deletions(-)
Steven Rostedt
maintainerPATCH 1/4 trace: rename unlikely profiler to branch profiler
Impact: name change of unlikely tracer and profiler
Ingo Molnar suggested changing the config from UNLIKELY_PROFILE to BRANCH_PROFILING. I never did like the "unlikely" name so I went one step farther, and renamed all the unlikely configurations to a "BRANCH" variant.
--- arch/x86/kernel/vsyscall_64.c | 2 +- arch/x86/vdso/vclock_gettime.c | 2 +- include/asm-generic/vmlinux.lds.h | 2 +- include/linux/compiler.h | 19 ++++++++++--------- kernel/trace/Kconfig | 10 +++++----- kernel/trace/Makefile | 7 +++---- kernel/trace/trace.c | 2 +- kernel/trace/trace.h | 6 +++--- kernel/trace/trace_unlikely.c | 4 ++-- 9 files changed, 27 insertions(+), 27 deletions(-)
arch/x86/kernel/vsyscall_64.c +1 -1
@@ -18,7 +18,7 @@*/ /* Disable profiling for userspace code: */ -#define DISABLE_UNLIKELY_PROFILE +#define DISABLE_BRANCH_PROFILING #include <linux/time.h> #include <linux/init.h>
arch/x86/vdso/vclock_gettime.c +1 -1
@@ -10,7 +10,7 @@*/ /* Disable profiling for userspace code: */ -#define DISABLE_UNLIKELY_PROFILE +#define DISABLE_BRANCH_PROFILING #include <linux/kernel.h> #include <linux/posix-timers.h>
include/asm-generic/vmlinux.lds.h +1 -1
@@ -45,7 +45,7 @@#define MCOUNT_REC ()#endif -#ifdef CONFIG_TRACE_UNLIKELY_PROFILE +#ifdef CONFIG_TRACE_BRANCH_PROFILING #define LIKELY_PROFILE () VMLINUX_SYMBOL(__start_likely_profile) = .; \ *(_ftrace_likely) \ VMLINUX_SYMBOL(__stop_likely_profile) = .; \
include/linux/compiler.h +10 -9
@@ -59,26 +59,27 @@ extern void __chk_io_ptr(const volatile void __iomem *);* specific implementations come from the above header files */ -/* -* Note: DISABLE_UNLIKELY_PROFILE can be used by special lowlevel code -* to disable branch tracing on a per file basis. -*/ -#if defined(CONFIG_TRACE_UNLIKELY_PROFILE ) && !defined(DISABLE_UNLIKELY_PROFILE ) -struct ftrace_likely_data { +struct ftrace_branch_data {const char *func;const char *file;unsigned line;unsigned long correct;unsigned long incorrect; }; -void ftrace_likely_update (struct ftrace_likely_data *f,int val,int expect); + +/* +* Note: DISABLE_BRANCH_PROFILING can be used by special lowlevel code +* to disable branch tracing on a per file basis. +*/ +#if defined(CONFIG_TRACE_BRANCH_PROFILING ) && !defined(DISABLE_BRANCH_PROFILING ) +void ftrace_likely_update (struct ftrace_branch_data *f,int val,int expect);#define likely_notrace (x) __builtin_expect(!!(x), 1)#define unlikely_notrace (x) __builtin_expect(!!(x), 0)#define likely_check (x) ({ \ int ______r; \ - static struct ftrace_likely_data \ + static struct ftrace_branch_data \ __attribute__((__aligned__(4))) \ __attribute__((section("_ftrace_likely"))) \ ______f = { \
@@ -93,7 +94,7 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, int expect); })#define unlikely_check (x) ({ \ int ______r; \ - static struct ftrace_likely_data \ + static struct ftrace_branch_data \ __attribute__((__aligned__(4))) \ __attribute__((section("_ftrace_unlikely"))) \ ______f = { \
kernel/trace/Kconfig +5 -5
@@ -159,7 +159,7 @@ config BOOT_TRACER selected, because the self-tests are an initcall as well and that would invalidate the boot trace. ) -config TRACE_UNLIKELY_PROFILE +config TRACE_BRANCH_PROFILING bool "Trace likely/unlikely profiler" depends on DEBUG_KERNEL select TRACING
@@ -175,7 +175,7 @@ config TRACE_UNLIKELY_PROFILE Say N if unsure. -config TRACING_UNLIKELY +config TRACING_BRANCHES bool help Selected by tracers that will trace the likely and unlikely
@@ -183,10 +183,10 @@ config TRACING_UNLIKELY profiled. Profiling the tracing infrastructure can only happen when the likelys and unlikelys are not being traced. -config UNLIKELY_TRACER +config BRANCH_TRACER bool "Trace likely/unlikely instances" - depends on TRACE_UNLIKELY_PROFILE - select TRACING_UNLIKELY + depends on TRACE_BRANCH_PROFILING + select TRACING_BRANCHES help This traces the events of likely and unlikely condition calls in the kernel. The difference between this and the
kernel/trace/Makefile +3 -4
@@ -11,9 +11,8 @@ obj-y += trace_selftest_dynamic.o endif # If unlikely tracing is enabled, do not trace these files -ifdef CONFIG_TRACING_UNLIKELY -KBUILD_CFLAGS += '-Dlikely(x)=likely_notrace(x)' -KBUILD_CFLAGS += '-Dunlikely(x)=unlikely_notrace(x)' +ifdef CONFIG_TRACING_BRANCHES +KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING endif obj-$(CONFIG_FUNCTION_TRACER) += libftrace.o
@@ -31,6 +30,6 @@ obj-$(CONFIG_STACK_TRACER) += trace_stack.o obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o obj-$(CONFIG_BOOT_TRACER) += trace_boot.o obj-$(CONFIG_FUNCTION_RET_TRACER) += trace_functions_return.o -obj-$(CONFIG_TRACE_UNLIKELY_PROFILE) += trace_unlikely.o +obj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_unlikely.o libftrace-y := ftrace.o
kernel/trace/trace.c +1 -1
@@ -258,7 +258,7 @@ static const char *trace_options[] = {"sched-tree" ,"ftrace_printk" ,"ftrace_preempt" , -#ifdef CONFIG_UNLIKELY_TRACER +#ifdef CONFIG_BRANCH_TRACER"unlikely" , #endifNULL
kernel/trace/trace.h +3 -3
@@ -468,7 +468,7 @@ enum trace_iterator_flags {TRACE_ITER_SCHED_TREE =0x200 ,TRACE_ITER_PRINTK =0x400 ,TRACE_ITER_PREEMPTONLY =0x800 , -#ifdef CONFIG_UNLIKELY_TRACER +#ifdef CONFIG_BRANCH_TRACER TRACE_ITER_UNLIKELY = 0x1000, #endif };
@@ -530,7 +530,7 @@ static inline void ftrace_preempt_enable(int resched)preempt_enable_notrace (); } -#ifdef CONFIG_UNLIKELY_TRACER +#ifdef CONFIG_BRANCH_TRACER extern int enable_unlikely_tracing (struct trace_array *tr);extern void disable_unlikely_tracing (void );static inline int trace_unlikely_enable (struct trace_array *tr)
@@ -552,6 +552,6 @@ static inline int trace_unlikely_enable(struct trace_array *tr)static inline void trace_unlikely_disable (void ) { } -#endif /* CONFIG_UNLIKELY_TRACER */ +#endif /* CONFIG_BRANCH_TRACER */ #endif /* _LINUX_KERNEL_TRACE_H */
kernel/trace/trace_unlikely.c +2 -2
@@ -15,7 +15,7 @@#include <asm/local.h> #include "trace.h" -#ifdef CONFIG_UNLIKELY_TRACER +#ifdef CONFIG_BRANCH_TRACER static int unlikely_tracing_enabled__read_mostly ;static DEFINE_MUTEX (unlikely_tracing_mutex);
@@ -119,7 +119,7 @@ static inlinevoid trace_likely_condition (struct ftrace_likely_data *f,int val,int expect) { } -#endif /* CONFIG_UNLIKELY_TRACER */ +#endif /* CONFIG_BRANCH_TRACER */ void ftrace_likely_update (struct ftrace_likely_data *f,int val,int expect) {
Signature · 3 lines
1.5.6.5 --
Steven Rostedt
maintainerPATCH 2/4 ftrace: rename unlikely iter_ctrl to branch
In reply to Steven RostedtImpact: rename of iter_ctrl unlikely to branch
The unlikely name is ugly. This patch converts the iter_ctrl command "unlikely" and "nounlikely" to "branch" and "nobranch" respectively.
It also renames a lot of internal functions to use "branch" instead of "unlikely".
--- kernel/trace/trace.c | 14 +++++----- kernel/trace/trace.h | 26 ++++++++++---------- kernel/trace/trace_unlikely.c | 50 ++++++++++++++++++++-------------------- 3 files changed, 45 insertions(+), 45 deletions(-)
kernel/trace/trace.c +7 -7
@@ -259,7 +259,7 @@ static const char *trace_options[] = {"ftrace_printk" ,"ftrace_preempt" , #ifdef CONFIG_BRANCH_TRACER -"unlikely" , +"branch" , #endif NULL };
@@ -1651,8 +1651,8 @@ print_lat_fmt(struct trace_iterator *iter, unsigned int trace_idx, int cpu)trace_seq_print_cont (s, iter);break ; } -case TRACE_UNLIKELY : { -struct trace_unlikely *field; +case TRACE_BRANCH : { +struct trace_branch *field;trace_assign_type (field, entry);
@@ -1802,8 +1802,8 @@ static enum print_line_t print_trace_fmt(struct trace_iterator *iter)return print_return_function (iter);break ; } -case TRACE_UNLIKELY : { -struct trace_unlikely *field; +case TRACE_BRANCH : { +struct trace_branch *field;trace_assign_type (field, entry);
@@ -2619,7 +2619,7 @@ static int tracing_set_tracer(char *buf)if (t == current_trace) goto out; -trace_unlikely_disable (); +trace_branch_disable ();if (current_trace && current_trace->reset) current_trace->reset (tr);
@@ -2627,7 +2627,7 @@ static int tracing_set_tracer(char *buf)if (t->init) t->init (tr); -trace_unlikely_enable (tr); +trace_branch_enable (tr); out:mutex_unlock (&trace_types_lock);
kernel/trace/trace.h +13 -13
@@ -22,7 +22,7 @@ enum trace_type {TRACE_SPECIAL ,TRACE_MMIO_RW ,TRACE_MMIO_MAP , -TRACE_UNLIKELY , +TRACE_BRANCH ,TRACE_BOOT_CALL ,TRACE_BOOT_RET , TRACE_FN_RET,
@@ -137,7 +137,7 @@ struct trace_boot_ret {#define TRACE_FUNC_SIZE 30#define TRACE_FILE_SIZE 20 -struct trace_unlikely { +struct trace_branch {struct trace_entry ent;unsigned line;char func[TRACE_FUNC_SIZE +1 ];
@@ -247,7 +247,7 @@ extern void __ftrace_bad_type(void); TRACE_MMIO_MAP); \ IF_ASSIGN(var, ent, struct trace_boot_call, TRACE_BOOT_CALL);\ IF_ASSIGN(var, ent, struct trace_boot_ret, TRACE_BOOT_RET);\ - IF_ASSIGN(var, ent, struct trace_unlikely, TRACE_UNLIKELY); \ + IF_ASSIGN(var, ent, struct trace_branch, TRACE_BRANCH); \ IF_ASSIGN(var, ent, struct ftrace_ret_entry, TRACE_FN_RET);\__ftrace_bad_type (); \ }while (0 )
@@ -469,7 +469,7 @@ enum trace_iterator_flags { TRACE_ITER_PRINTK = 0x400, TRACE_ITER_PREEMPTONLY = 0x800, #ifdef CONFIG_BRANCH_TRACER - TRACE_ITER_UNLIKELY = 0x1000, + TRACE_ITER_BRANCH = 0x1000, #endif };
@@ -531,25 +531,25 @@ static inline void ftrace_preempt_enable(int resched) }#ifdef CONFIG_BRANCH_TRACER -extern int enable_unlikely_tracing (struct trace_array *tr); -extern void disable_unlikely_tracing (void ); -static inline int trace_unlikely_enable (struct trace_array *tr) +extern int enable_branch_tracing (struct trace_array *tr); +extern void disable_branch_tracing (void ); +static inline int trace_branch_enable (struct trace_array *tr) { -if (trace_flags &TRACE_ITER_UNLIKELY ) -return enable_unlikely_tracing (tr); +if (trace_flags &TRACE_ITER_BRANCH ) +return enable_branch_tracing (tr);return 0 ; } -static inline void trace_unlikely_disable (void ) +static inline void trace_branch_disable (void ) {/* due to races, always disable */ -disable_unlikely_tracing (); +disable_branch_tracing (); }#else -static inline int trace_unlikely_enable (struct trace_array *tr) +static inline int trace_branch_enable (struct trace_array *tr) {return 0 ; } -static inline void trace_unlikely_disable (void ) +static inline void trace_branch_disable (void ) { }#endif /* CONFIG_BRANCH_TRACER */
kernel/trace/trace_unlikely.c +25 -25
124 lines not on this page · raw message
Signature · 3 lines
1.5.6.5 --
Steven Rostedt
maintainerPATCH 3/4 ftrace: add tracer called branch
In reply to Steven RostedtImpact: added new branch tracer
Currently the tracing of branch profiling (unlikelys and likelys hit) is only activated by the iter_ctrl. This patch adds a tracer called "branch" that will just trace the branch profiling. The advantage of adding this tracer is that it can be added to the ftrace selftests on startup.
--- kernel/trace/trace.h | 2 + kernel/trace/trace_selftest.c | 23 ++++++++++++++++++++++ kernel/trace/trace_unlikely.c | 42 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 0 deletions(-)
kernel/trace/trace.h +2 -0
@@ -420,6 +420,8 @@ extern int trace_selftest_startup_sched_switch(struct tracer *trace, struct trace_array *tr);extern int trace_selftest_startup_sysprof (struct tracer *trace,struct trace_array *tr); +extern int trace_selftest_startup_branch (struct tracer *trace, +struct trace_array *tr);#endif /* CONFIG_FTRACE_STARTUP_TEST */ extern void *head_page (struct trace_array_cpu *data);
kernel/trace/trace_selftest.c +23 -0
@@ -13,6 +13,7 @@ static inline int trace_valid_entry(struct trace_entry *entry)case TRACE_STACK :case TRACE_PRINT :case TRACE_SPECIAL : +case TRACE_BRANCH :return 1 ; }return 0 ;
@@ -544,3 +545,25 @@ trace_selftest_startup_sysprof(struct tracer *trace, struct trace_array *tr) return ret; }#endif /* CONFIG_SYSPROF_TRACER */ + +#ifdef CONFIG_BRANCH_TRACER +int +trace_selftest_startup_branch (struct tracer *trace,struct trace_array *tr) +{ +unsigned long count; +int ret; + +/* start the tracing */ + trace->init (tr); +/* Sleep for a 1/10 of a second */ +msleep (100 ); +/* stop the tracing. */ +tracing_stop (); +/* check the trace buffer */ + ret =trace_test_buffer (tr, &count); + trace->reset (tr); +tracing_start (); + +return ret; +} +#endif /* CONFIG_BRANCH_TRACER */
kernel/trace/trace_unlikely.c +42 -0
48 lines not on this page · raw message
Signature · 3 lines
1.5.6.5 --
Steven Rostedt
maintainerPATCH 4/4 ftrace: rename trace_unlikely.c file
In reply to Steven RostedtImpact: File name change of trace_unlikely.c
The "unlikely" name for the tracer is quite ugly. We renamed all the parts of it to "branch" and now it is time to rename the file too.
--- kernel/trace/Makefile | 2 +- kernel/trace/trace_branch.c | 320 +++++++++++++++++++++++++++++++++++++++++ kernel/trace/trace_unlikely.c | 320 ----------------------------------------- 3 files changed, 321 insertions(+), 321 deletions(-) create mode 100644 kernel/trace/trace_branch.c delete mode 100644 kernel/trace/trace_unlikely.c
kernel/trace/Makefile +1 -1
@@ -30,6 +30,6 @@ obj-$(CONFIG_STACK_TRACER) += trace_stack.o obj-$(CONFIG_MMIOTRACE) += trace_mmiotrace.o obj-$(CONFIG_BOOT_TRACER) += trace_boot.o obj-$(CONFIG_FUNCTION_RET_TRACER) += trace_functions_return.o -obj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_unlikely.o +obj-$(CONFIG_TRACE_BRANCH_PROFILING) += trace_branch.o libftrace-y := ftrace.o
kernel/trace/trace_branch.c new file +320 -0
320 lines not on this page · raw message
kernel/trace/trace_unlikely.c deleted +0 -320
320 lines not on this page · raw message
Signature · 3 lines
1.5.6.5 --
Quoted 17 lines · Steven Rostedt
Ingo,
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.gitbranch: tip/devel
Steven Rostedt (4):
trace: rename unlikely profiler to branch profiler
ftrace: rename unlikelyiter_ctrlto branch
ftrace: add tracer called branch
ftrace: renametrace_unlikely.cfile----
Quoted 12 lines
arch/x86/kernel/vsyscall_64.c | 2 +- arch/x86/vdso/vclock_gettime.c | 2 +- include/asm-generic/vmlinux.lds.h | 2 +- include/linux/compiler.h | 19 ++- kernel/trace/Kconfig | 10 +- kernel/trace/Makefile | 7 +- kernel/trace/trace.c | 16 +- kernel/trace/trace.h | 34 ++-- kernel/trace/trace_branch.c | 320 +++++++++++++++++++++++++++++++++++++ kernel/trace/trace_selftest.c | 23 +++ kernel/trace/trace_unlikely.c | 278 -------------------------------- 11 files changed, 390 insertions(+), 323 deletions(-)
pulled, thanks Steve!
Ingo