From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Peter Zijlstra <peterz@infradead.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Alexei Starovoitov <alexei.starovoitov@gmail.com>,
Peter Wu <peter@lekensteyn.nl>, Jonathan Corbet <corbet@lwn.net>,
Tom Zanussi <zanussi@kernel.org>
Subject: [RFC][PATCH 00/11] ring-buffer/tracing: Remove disabling of ring buffer while reading trace file
Date: Tue, 17 Mar 2020 17:32:22 -0400 [thread overview]
Message-ID: <20200317213222.421100128@goodmis.org> (raw)
When the ring buffer was first written for ftrace, there was two
human readable files to read it. One was a standard "producer/consumer"
file (trace_pipe), which would consume data from the ring buffer as
it read it, and the other was a "static iterator" that would not
consume the events, such that the file could be read multiple times
and return the same output each time.
The "static iterator" was never meant to be read while there was an
active writer to the ring buffer. If writing was enabled, then it
would disable the writer when the trace file was opened.
There has been some complaints about this by the BPF folks, that did
not realize this little bit of information and it was requested that
the "trace" file does not stop the writing to the ring buffer.
This patch series attempts to satisfy that request, by creating a
temporary buffer in each of the per cpu iterators to place the
read event into, such that it can be passed to users without worrying
about a writer to corrupt the event while it was being written out.
It also uses the fact that the ring buffer is broken up into pages,
where each page has its own timestamp that gets updated when a
writer crosses over to it. By copying it to the temp buffer, and
doing a "before and after" test of the time stamp with memory barriers,
can allow the events to be saved.
Steven Rostedt (VMware) (11):
tracing: Save off entry when peeking at next entry
ring-buffer: Have ring_buffer_empty() not depend on tracing stopped
ring-buffer: Rename ring_buffer_read() to read_buffer_iter_advance()
ring-buffer: Add page_stamp to iterator for synchronization
ring-buffer: Have rb_iter_head_event() handle concurrent writer
ring-buffer: Do not die if rb_iter_peek() fails more than thrice
ring-buffer: Optimize rb_iter_head_event()
ring-buffer: Do not disable recording when there is an iterator
tracing: Do not disable tracing when reading the trace file
ring-buffer/tracing: Have iterator acknowledge dropped events
tracing: Have the document reflect that the trace file keeps tracing enabled
----
Documentation/trace/ftrace.rst | 13 +--
include/linux/ring_buffer.h | 4 +-
include/linux/trace_events.h | 2 +
kernel/trace/ring_buffer.c | 194 +++++++++++++++++++++++++----------
kernel/trace/trace.c | 55 +++++++---
kernel/trace/trace_functions_graph.c | 2 +-
kernel/trace/trace_output.c | 15 ++-
7 files changed, 195 insertions(+), 90 deletions(-)
next reply other threads:[~2020-03-17 21:34 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-17 21:32 Steven Rostedt [this message]
2020-03-17 21:32 ` [RFC][PATCH 01/11] tracing: Save off entry when peeking at next entry Steven Rostedt
2020-03-19 13:41 ` Masami Hiramatsu
2020-03-19 19:53 ` Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 02/11] ring-buffer: Have ring_buffer_empty() not depend on tracing stopped Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 03/11] ring-buffer: Rename ring_buffer_read() to read_buffer_iter_advance() Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 04/11] ring-buffer: Add page_stamp to iterator for synchronization Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 05/11] ring-buffer: Have rb_iter_head_event() handle concurrent writer Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 06/11] ring-buffer: Do not die if rb_iter_peek() fails more than thrice Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 07/11] ring-buffer: Optimize rb_iter_head_event() Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 08/11] ring-buffer: Do not disable recording when there is an iterator Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 09/11] tracing: Do not disable tracing when reading the trace file Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 10/11] ring-buffer/tracing: Have iterator acknowledge dropped events Steven Rostedt
2020-03-17 21:32 ` [RFC][PATCH 11/11] tracing: Have the document reflect that the trace file keeps tracing enabled Steven Rostedt
2020-03-18 15:13 ` [RFC][PATCH 12/11] selftest/ftrace: Fix function trigger test to handle trace not disabling the tracer Steven Rostedt
2020-03-18 16:35 ` Shuah Khan
2020-03-19 13:04 ` Masami Hiramatsu
2020-03-19 5:27 ` [RFC][PATCH 00/11] ring-buffer/tracing: Remove disabling of ring buffer while reading trace file Alexei Starovoitov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200317213222.421100128@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=alexei.starovoitov@gmail.com \
--cc=corbet@lwn.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=peter@lekensteyn.nl \
--cc=peterz@infradead.org \
--cc=zanussi@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.