David Miller
72c9ddfd4c
ring-buffer: Make non-consuming read less expensive with lots of cpus.
...
When performing a non-consuming read, a synchronize_sched() is
performed once for every cpu which is actively tracing.
This is very expensive, and can make it take several seconds to open
up the 'trace' file with lots of cpus.
Only one synchronize_sched() call is actually necessary. What is
desired is for all cpus to see the disabling state change. So we
transform the existing sequence:
for_each_cpu() {
ring_buffer_read_start();
}
where each ring_buffer_start() call performs a synchronize_sched(),
into the following:
for_each_cpu() {
ring_buffer_read_prepare();
}
ring_buffer_read_prepare_sync();
for_each_cpu() {
ring_buffer_read_start();
}
wherein only the single ring_buffer_read_prepare_sync() call needs to
do the synchronize_sched().
The first phase, via ring_buffer_read_prepare(), allocates the 'iter'
memory and increments ->record_disabled.
In the second phase, ring_buffer_read_prepare_sync() makes sure this
->record_disabled state is visible fully to all cpus.
And in the final third phase, the ring_buffer_read_start() calls reset
the 'iter' objects allocated in the first phase since we now know that
none of the cpus are adding trace entries any more.
This makes openning the 'trace' file nearly instantaneous on a
sparc64 Niagara2 box with 128 cpus tracing.
Signed-off-by: David S. Miller <davem@davemloft.net>
LKML-Reference: <20100420.154711.11246950.davem@davemloft.net>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2010-04-27 13:06:35 -04:00
..
blktrace.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ftrace.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
Kconfig
Merge branch 'tracing/core' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing into tracing/core
2010-02-27 10:06:10 +01:00
kmemtrace.c
kmemtrace: Fix up tracer registration
2009-10-01 11:53:44 +02:00
Makefile
perf: Drop the obsolete profile naming for trace events
2010-03-10 14:47:18 +01:00
power-traces.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ring_buffer.c
ring-buffer: Make non-consuming read less expensive with lots of cpus.
2010-04-27 13:06:35 -04:00
ring_buffer_benchmark.c
ring-buffer: Add place holder recording of dropped events
2010-03-31 22:57:04 -04:00
trace.c
ring-buffer: Make non-consuming read less expensive with lots of cpus.
2010-04-27 13:06:35 -04:00
trace.h
tracing: Add graph output support for irqsoff tracer
2010-04-27 12:36:53 -04:00
trace_boot.c
tracing: add filter event logic to special, mmiotrace and boot tracers
2009-09-12 23:34:04 -04:00
trace_branch.c
tracing: Add correct/incorrect to sort keys for branch annotation output
2010-02-09 21:35:05 -05:00
trace_clock.c
tracing: Fix lockdep warning in global_clock()
2010-03-29 15:16:44 -04:00
trace_entries.h
hw-breakpoints: Rewrite the hw-breakpoints layer on top of perf events
2009-11-08 15:34:42 +01:00
trace_event_perf.c
perf: Correctly align perf event tracing buffer
2010-04-01 08:26:30 +02:00
trace_events.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
trace_events_filter.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
trace_export.c
tracing: Remove show_format and related macros from TRACE_EVENT
2010-01-06 12:08:46 -05:00
trace_functions.c
tracing: switch function prints from %pf to %ps
2009-09-17 15:53:40 -04:00
trace_functions_graph.c
tracing: Add graph output support for irqsoff tracer
2010-04-27 12:36:53 -04:00
trace_hw_branches.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2009-12-14 09:58:24 -08:00
trace_irqsoff.c
tracing: Add graph output support for irqsoff tracer
2010-04-27 12:36:53 -04:00
trace_kprobe.c
perf: Drop the obsolete profile naming for trace events
2010-03-10 14:47:18 +01:00
trace_ksym.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
trace_mmiotrace.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
trace_nop.c
tracing/ftrace: make nop-tracer use polling wait for events on pipe
2009-03-23 09:22:15 +01:00
trace_output.c
tracing: Add full state to trace_seq
2009-12-09 14:05:49 -05:00
trace_output.h
tracing: consolidate code between trace_output.c and trace_function_graph.c
2009-09-11 14:24:13 -04:00
trace_printk.c
tracing: Remove markers
2009-09-18 21:22:08 +02:00
trace_sched_switch.c
tracing: pass around ring buffer instead of tracer
2009-09-04 18:59:39 -04:00
trace_sched_wakeup.c
locking: Convert __raw_spin* functions to arch_spin*
2009-12-14 23:55:32 +01:00
trace_selftest.c
tracing: Dump either the oops's cpu source or all cpus buffers
2010-04-21 23:11:42 +02:00
trace_selftest_dynamic.c
ftrace: fix dynamic ftrace selftest
2008-05-23 21:13:23 +02:00
trace_stack.c
tracing: Fix circular dead lock in stack trace
2010-02-02 10:20:18 -05:00
trace_stat.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
trace_stat.h
tracing/stat: Add stat_release() callback
2009-07-10 12:14:05 +02:00
trace_syscalls.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
trace_sysprof.c
perf events, x86/stacktrace: Make stack walking optional
2009-12-17 09:56:19 +01:00
trace_workqueue.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00