tracing: Expand ring buffer when trace_printk() is used
Since tracing is not used by 99% of Linux users, even though tracing may be configured in, it does not make sense to allocate 1.4 Megs per CPU for the ring buffers if they are not used. Thus, on boot up the ring buffers are set to a minimal size until something needs the and they are expanded. This works well for events and tracers (function, etc), but for the asynchronous use of trace_printk() which can write to the ring buffer at any time, does not expand the buffers. On boot up a check is made to see if any trace_printk() is used to see if the trace_printk() temp buffer pages should be allocated. This same code can be used to expand the buffers as well. Suggested-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Родитель
884bfe89a4
Коммит
b382ede6b5
|
@ -1571,6 +1571,9 @@ void trace_printk_init_buffers(void)
|
|||
|
||||
pr_info("ftrace: Allocated trace_printk buffers\n");
|
||||
|
||||
/* Expand the buffers to set size */
|
||||
tracing_update_buffers();
|
||||
|
||||
buffers_allocated = 1;
|
||||
}
|
||||
|
||||
|
@ -3030,6 +3033,10 @@ static int __tracing_resize_ring_buffer(unsigned long size, int cpu)
|
|||
*/
|
||||
ring_buffer_expanded = 1;
|
||||
|
||||
/* May be called before buffers are initialized */
|
||||
if (!global_trace.buffer)
|
||||
return 0;
|
||||
|
||||
ret = ring_buffer_resize(global_trace.buffer, size, cpu);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
Загрузка…
Ссылка в новой задаче