From: "Petr Mládek" <pmladek@suse.cz>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Jiri Kosina <jkosina@suse.cz>, Michal Hocko <mhocko@suse.cz>,
Jan Kara <jack@suse.cz>, Frederic Weisbecker <fweisbec@gmail.com>,
Dave Anderson <anderson@redhat.com>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Konstantin Khlebnikov <koct9i@gmail.com>
Subject: Re: [RFC][PATCH 2/5 v2] tracing: Create seq_buf layer in trace_seq
Date: Fri, 27 Jun 2014 18:52:04 +0200 [thread overview]
Message-ID: <20140627165204.GJ23205@pathway.suse.cz> (raw)
In-Reply-To: <20140627113909.4ea41040@gandalf.local.home>
On Fri 2014-06-27 11:39:09, Steven Rostedt wrote:
> On Fri, 27 Jun 2014 17:18:04 +0200
> Petr Mládek <pmladek@suse.cz> wrote:
>
>
> > > This patch uses seq_buf for the NMI code so it will fill to the end of
> > > the buffer and just truncate what can't fit.
> >
> > I think that NMI code could live with the trace_seq behavior. The
> > lines are short. If we miss few characters it is not that big difference.
>
> True, but I'm trying to keep trace_seq more tracing specific.
It is true that most writing functions write as much as possible. On
the other hand, I do not think that refusing to write, if there is not
enough space, is specific to tracing. It might be useful also for others.
In the worst case, we could add a flag into the "struct seq_buf" that
might define the behavior. Well, I am not sure if we want to add this
complexity when there are no users. As I said, the backtraces might
live with trace_seq behavior.
>>
> > > trace_pipe depends on the trace_seq behavior.
> > >
> > > >
> > > > Another solution would be to live with incomplete lines in tracing.
> > > > I wonder if any of the functions tries to write the line again when the
> > > > write failed.
> > >
> > > This may break trace_pipe. Although there looks to be redundant
> > > behavior in that the pipe code also resets the seq.len on partial line,
> > > so maybe it's not an issue.
> > >
> > > >
> > > > IMHO, the most important thing is that both functions return 0 on
> > > > failure.
> > >
> > > Note, I'm not sure how tightly these two need to be. I'm actually
> > > trying to get trace_seq to be specific to tracing and nothing more.
> > > Have seq_buf be used for all other instances.
> >
> > If the two layers make your life easier then they might make sense. I
> > just saw many similarities and wanted to help. IMHO, if anyone breaks
> > seq_buf, it will break trace_seq anyway. So, they are not really separated.
>
> There's actually things I want to do with the seq_buf behavior that I
> can't do with the trace_seq behavior. That's more about having a
> dynamic way to create seq_buf buffers and resize them if need be.
> Although, perhaps an all or nothing approach will help in that.
Note that we should not allocate in NMI context, especially when there
is a softlock. So, we might need to define the behavior anyway.
> >
> > >
> > > > ad 4th:
> > > >
> > > > Both "full" and "overflow" flags seems to have the same meaning.
> > > > For example, trace_seq_printf() sets "full" on failure even
> > > > when s->seq.len != s->size.
> > >
> > > The difference is that the overflow flag is just used for info letting
> > > the user know that it did not fit. The full flag in trace_seq lets you
> > > know that you can not add anything else, even though the new stuff may
> > > fit.
> >
> > I see. They have another meaning but they are set at the same time:
> >
> > if (s->seq.overflow) {
> > ...
> > s->full = 1;
> > return 0;
> > }
> >
> > In fact, both names are slightly misleading. seq.overflow is set
> > when the buffer is full even when all characters were written.
> > s->full is set even when there is still some space :-)
>
> I actually disagree. overflow means that you wrote more than what was
> there. In this case, it was cropped.
The problem is that we do not know that it was cropped.
The "overflow" flag is set when (s->len > (s->size - 1)). In most
cases it will be set when (s->len == s->size).
For example, seq_buf_printf() calls vsnprintf(). It will never write
over the buffer. We do not know if the message was cropped or if we
were lucky and the message was exactly as long as the free space.
> Full suggests that you can't add anymore because it wont allow you.
>
> The difference is that you are looking at a implementation point of
> view. I'm looking at a usage point of view. With trace_seq, there is no
> space left, you can't add any more. seq_buf, you can add more but it
> wont be saved because it was overflowed.
I know that there is some difference but I am not sure if users are
really interested into such details. In both cases, they are unable
to write more data. From they point of view, the buffer is simply full.
Honestly, I think that the two flags and the two point of view cause
more confusion than win.
Note that I do not want to change the meaning for trace_buf. I want to
change the meaning for "seq_buf" that has no users yet.
> What I should do is change overflow from being a flag to the number of
> characters that it overflowed by. That would be useful information, and
> would make more sense. It lets the user know what wasn't written.
I am afraid that we do not have this information. See above for the
example with vsnprintf().
In each case, I do not want to block this patch. The generic "seq_buf"
API looks reasonable. The tracing code is your area and it is your
decision. You know much more about it than me and the extra complexity
might be needed.
Best Regards,
Petr
next prev parent reply other threads:[~2014-06-27 16:52 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-26 21:49 [RFC][PATCH 0/5 v2] x86/nmi: Print all cpu stacks from NMI safely Steven Rostedt
2014-06-26 21:49 ` [RFC][PATCH 1/5 v2] tracing: Add trace_seq_buffer_ptr() helper function Steven Rostedt
2014-06-27 1:06 ` Steven Rostedt
2014-06-27 3:14 ` James Bottomley
2014-07-03 16:03 ` Steven Rostedt
2014-06-27 7:37 ` Paolo Bonzini
2014-06-26 21:49 ` [RFC][PATCH 2/5 v2] tracing: Create seq_buf layer in trace_seq Steven Rostedt
2014-06-27 13:45 ` Petr Mládek
2014-06-27 14:19 ` Steven Rostedt
2014-06-27 15:18 ` Petr Mládek
2014-06-27 15:39 ` Steven Rostedt
2014-06-27 16:52 ` Petr Mládek [this message]
2014-09-26 15:00 ` Steven Rostedt
2014-09-26 16:28 ` Petr Mladek
2014-06-27 14:21 ` Steven Rostedt
2014-06-27 14:56 ` Petr Mládek
2014-06-26 21:49 ` [RFC][PATCH 3/5 v2] seq_buf: Move the seq_buf code to lib/ Steven Rostedt
2014-06-27 13:48 ` Petr Mládek
2014-06-27 14:27 ` Steven Rostedt
2014-06-27 14:39 ` Petr Mládek
2014-06-27 14:44 ` Steven Rostedt
2014-06-26 21:49 ` [RFC][PATCH 4/5 v2] printk: Add per_cpu printk func to allow printk to be diverted Steven Rostedt
2014-06-27 14:20 ` Petr Mládek
2014-06-27 14:39 ` Steven Rostedt
2014-06-27 14:43 ` Petr Mládek
[not found] ` <20140626220130.764213722@goodmis.org>
2014-06-26 22:51 ` [RFC][PATCH 5/5 v2] x86/nmi: Perform a safe NMI stack trace on all CPUs Steven Rostedt
2014-06-27 14:32 ` Petr Mládek
2014-06-27 14:40 ` Steven Rostedt
2014-08-07 8:41 ` [RFC][PATCH 0/5 v2] x86/nmi: Print all cpu stacks from NMI safely Jiri Kosina
2014-08-08 18:44 ` Steven Rostedt
2014-08-12 14:17 ` Jiri Kosina
2014-09-10 8:08 ` Jiri Kosina
2014-09-10 10:12 ` Jan Kara
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=20140627165204.GJ23205@pathway.suse.cz \
--to=pmladek@suse.cz \
--cc=akpm@linux-foundation.org \
--cc=anderson@redhat.com \
--cc=fweisbec@gmail.com \
--cc=jack@suse.cz \
--cc=jkosina@suse.cz \
--cc=koct9i@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhocko@suse.cz \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=rostedt@goodmis.org \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®