From: Tobias Waldekranz <tobias@waldekranz.com>
To: Paolo Abeni <pabeni@redhat.com>, Steven Rostedt <rostedt@goodmis.org>
Cc: davem@davemloft.net, kuba@kernel.org, roopa@nvidia.com,
razor@blackwall.org, bridge@lists.linux.dev,
netdev@vger.kernel.org, jiri@resnulli.us, ivecera@redhat.com,
mhiramat@kernel.org, linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v3 net-next 4/4] net: switchdev: Add tracepoints
Date: Wed, 28 Feb 2024 11:47:24 +0100 [thread overview]
Message-ID: <87a5nkhnlv.fsf@waldekranz.com> (raw)
In-Reply-To: <4838ad92a359a10944487bbcb74690a51dd0a2f8.camel@redhat.com>
On tis, feb 27, 2024 at 11:04, Paolo Abeni <pabeni@redhat.com> wrote:
> On Fri, 2024-02-23 at 10:38 -0500, Steven Rostedt wrote:
>> On Fri, 23 Feb 2024 12:44:53 +0100
>> Tobias Waldekranz <tobias@waldekranz.com> wrote:
>>
>> > Add a basic set of tracepoints:
>> >
>> > - switchdev_defer: Fires whenever an operation is enqueued to the
>> > switchdev workqueue for deferred delivery.
>> >
>> > - switchdev_call_{atomic,blocking}: Fires whenever a notification is
>> > sent to the corresponding switchdev notifier chain.
>> >
>> > - switchdev_call_replay: Fires whenever a notification is sent to a
>> > specific driver's notifier block, in response to a replay request.
>> >
>> > Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
>> > ---
>> > include/trace/events/switchdev.h | 74 ++++++++++++++++++++++++++++++++
>> > net/switchdev/switchdev.c | 71 +++++++++++++++++++++++++-----
>> > 2 files changed, 135 insertions(+), 10 deletions(-)
>> > create mode 100644 include/trace/events/switchdev.h
>> >
>> > diff --git a/include/trace/events/switchdev.h b/include/trace/events/switchdev.h
>> > new file mode 100644
>> > index 000000000000..dcaf6870d017
>> > --- /dev/null
>> > +++ b/include/trace/events/switchdev.h
>> > @@ -0,0 +1,74 @@
>> > +/* SPDX-License-Identifier: GPL-2.0 */
>> > +#undef TRACE_SYSTEM
>> > +#define TRACE_SYSTEM switchdev
>> > +
>> > +#if !defined(_TRACE_SWITCHDEV_H) || defined(TRACE_HEADER_MULTI_READ)
>> > +#define _TRACE_SWITCHDEV_H
>> > +
>> > +#include <linux/tracepoint.h>
>> > +#include <net/switchdev.h>
>> > +
>> > +#define SWITCHDEV_TRACE_MSG_MAX 128
>>
>> 128 bytes is awfully big to waste on the ring buffer. What's the average
>> size of a string?
>>
>> > +
>> > +DECLARE_EVENT_CLASS(switchdev_call,
>> > + TP_PROTO(unsigned long val,
>> > + const struct switchdev_notifier_info *info,
>> > + int err),
>> > +
>> > + TP_ARGS(val, info, err),
>> > +
>> > + TP_STRUCT__entry(
>> > + __field(unsigned long, val)
>> > + __string(dev, info->dev ? netdev_name(info->dev) : "(null)")
>> > + __field(const struct switchdev_notifier_info *, info)
>> > + __field(int, err)
>> > + __array(char, msg, SWITCHDEV_TRACE_MSG_MAX)
>> > + ),
>> > +
>> > + TP_fast_assign(
>> > + __entry->val = val;
>> > + __assign_str(dev, info->dev ? netdev_name(info->dev) : "(null)");
>> > + __entry->info = info;
>> > + __entry->err = err;
>> > + switchdev_notifier_str(val, info, __entry->msg, SWITCHDEV_TRACE_MSG_MAX);
>>
>> Is it possible to just store the information in the trace event and then
>> call the above function in the read stage?
>
> I agree with Steven: it looks like that with the above code the
> tracepoint itself will become measurably costily in terms of CPU
> cycles: we want to avoid that.
>
> Perhaps using different tracepoints with different notifier_block type
> would help? so that each trace point could just copy a few specific
> fields.
This can be done, but you will end up having to duplicate the decoding
and formatting logic from switchdev-str.c, with the additional hurdle of
having to figure out the sizes of all referenced objects in order to
create flattened versions of every notification type.
What I like about the current approach is that when new notification and
object types are added, switchdev_notifier_str will automatically be
able to decode them and give you some rough idea of what is going on,
even if no new message specific decoding logic is added. It is also
reusable by drivers that might want to decode notifications or objects
in error messages.
Would some variant of (how I understand) Steven's suggestion to instead
store the formatted message in a dynamic array (__assign_str()), rather
than in the tracepoint entry, be acceptable?
next prev parent reply other threads:[~2024-02-28 10:47 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-23 11:44 [PATCH v3 net-next 0/4] net: switchdev: Tracepoints Tobias Waldekranz
2024-02-23 11:44 ` [PATCH v3 net-next 1/4] net: switchdev: Wrap enums in mapper macros Tobias Waldekranz
2024-02-23 11:44 ` [PATCH v3 net-next 2/4] net: switchdev: Add helpers to display switchdev objects as strings Tobias Waldekranz
2024-02-23 11:44 ` [PATCH v3 net-next 3/4] net: switchdev: Relay all replay messages through a central function Tobias Waldekranz
2024-02-23 11:44 ` [PATCH v3 net-next 4/4] net: switchdev: Add tracepoints Tobias Waldekranz
2024-02-23 15:38 ` Steven Rostedt
2024-02-26 13:05 ` Tobias Waldekranz
2024-02-27 10:04 ` Paolo Abeni
2024-02-28 10:47 ` Tobias Waldekranz [this message]
2024-02-28 14:56 ` Steven Rostedt
2024-03-04 22:40 ` Tobias Waldekranz
2024-03-06 15:15 ` Steven Rostedt
2024-03-06 20:02 ` Tobias Waldekranz
2024-03-06 21:46 ` Steven Rostedt
2024-03-06 22:45 ` Tobias Waldekranz
2024-03-06 23:33 ` Steven Rostedt
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=87a5nkhnlv.fsf@waldekranz.com \
--to=tobias@waldekranz.com \
--cc=bridge@lists.linux.dev \
--cc=davem@davemloft.net \
--cc=ivecera@redhat.com \
--cc=jiri@resnulli.us \
--cc=kuba@kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=razor@blackwall.org \
--cc=roopa@nvidia.com \
--cc=rostedt@goodmis.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;
as well as URLs for NNTP newsgroup(s).