bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Song Liu <song@kernel.org>
To: Ciara Loftus <ciara.loftus@intel.com>
Cc: Networking <netdev@vger.kernel.org>, bpf <bpf@vger.kernel.org>,
	Magnus Karlsson <magnus.karlsson@intel.com>,
	bjorn@kernel.org, weqaar.a.janjua@intel.com,
	Daniel Borkmann <daniel@iogearbox.net>
Subject: Re: [PATCH bpf-next v4 1/6] xsk: add tracepoints for packet drops
Date: Wed, 3 Feb 2021 22:37:06 -0800	[thread overview]
Message-ID: <CAPhsuW7Bat9oWw_3_TRgUzc7y61kUtTDYT9-4r2ZaOW7WTZ59g@mail.gmail.com> (raw)
In-Reply-To: <20210203074127.8616-2-ciara.loftus@intel.com>

On Wed, Feb 3, 2021 at 12:13 AM Ciara Loftus <ciara.loftus@intel.com> wrote:
>
> This commit introduces tracing infrastructure for AF_XDP sockets
> (xsks) and a new trace event called 'xsk_packet_drop'. This trace
> event is triggered when a packet cannot be processed by the socket
> due to one of the following issues:
> (1) packet exceeds the maximum permitted size.
> (2) invalid fill descriptor address.
> (3) invalid tx descriptor field.
>
> The trace provides information about the error to the user. For
> example the size vs permitted size is provided for (1). For (2)
> and (3) the relevant descriptor fields are printed. This information
> should help a user troubleshoot packet drops by providing this extra
> level of detail which is not available through use of simple counters.
>
> The tracepoint can be enabled/disabled by toggling
> /sys/kernel/debug/tracing/events/xsk/xsk_packet_drop/enable
>
> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com>
> ---
>  MAINTAINERS                       |  1 +
>  include/linux/bpf_trace.h         |  1 +
>  include/trace/events/xsk.h        | 73 +++++++++++++++++++++++++++++++
>  include/uapi/linux/if_xdp.h       |  6 +++
>  kernel/bpf/core.c                 |  1 +
>  net/xdp/xsk.c                     |  7 ++-
>  net/xdp/xsk_buff_pool.c           |  3 ++
>  net/xdp/xsk_queue.h               |  4 ++
>  tools/include/uapi/linux/if_xdp.h |  6 +++
>  9 files changed, 101 insertions(+), 1 deletion(-)
>  create mode 100644 include/trace/events/xsk.h
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 1df56a32d2df..efe6662d4198 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -19440,6 +19440,7 @@ S:      Maintained
>  F:     Documentation/networking/af_xdp.rst
>  F:     include/net/xdp_sock*
>  F:     include/net/xsk_buff_pool.h
> +F:     include/trace/events/xsk.h
>  F:     include/uapi/linux/if_xdp.h
>  F:     include/uapi/linux/xdp_diag.h
>  F:     include/net/netns/xdp.h
> diff --git a/include/linux/bpf_trace.h b/include/linux/bpf_trace.h
> index ddf896abcfb6..477d29b6c2c1 100644
> --- a/include/linux/bpf_trace.h
> +++ b/include/linux/bpf_trace.h
> @@ -3,5 +3,6 @@
>  #define __LINUX_BPF_TRACE_H__
>
>  #include <trace/events/xdp.h>
> +#include <trace/events/xsk.h>
>
>  #endif /* __LINUX_BPF_TRACE_H__ */
> diff --git a/include/trace/events/xsk.h b/include/trace/events/xsk.h
> new file mode 100644
> index 000000000000..e2984fad372c
> --- /dev/null
> +++ b/include/trace/events/xsk.h
> @@ -0,0 +1,73 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/* Copyright(c) 2021 Intel Corporation. */
> +
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM xsk
> +
> +#if !defined(_TRACE_XSK_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_XSK_H
> +
> +#include <linux/if_xdp.h>
> +#include <linux/tracepoint.h>
> +
> +#define print_reason(reason) \
> +       __print_symbolic(reason, \
> +                       { XSK_TRACE_DROP_PKT_TOO_BIG, "packet too big" }, \
> +                       { XSK_TRACE_DROP_INVALID_FILLADDR, "invalid fill addr" }, \
> +                       { XSK_TRACE_DROP_INVALID_TXD, "invalid tx desc" })
> +
> +#define print_val1(reason) \
> +       __print_symbolic(reason, \
> +                       { XSK_TRACE_DROP_PKT_TOO_BIG, "len" }, \
> +                       { XSK_TRACE_DROP_INVALID_FILLADDR, "addr" }, \
> +                       { XSK_TRACE_DROP_INVALID_TXD, "addr" })
> +
> +#define print_val2(reason) \
> +       __print_symbolic(reason, \
> +                       { XSK_TRACE_DROP_PKT_TOO_BIG, "max" }, \
> +                       { XSK_TRACE_DROP_INVALID_FILLADDR, "not_used" }, \
> +                       { XSK_TRACE_DROP_INVALID_TXD, "len" })
> +
> +#define print_val3(reason) \
> +       __print_symbolic(reason, \
> +                       { XSK_TRACE_DROP_PKT_TOO_BIG, "not_used" }, \
> +                       { XSK_TRACE_DROP_INVALID_FILLADDR, "not_used" }, \
> +                       { XSK_TRACE_DROP_INVALID_TXD, "options" })
> +
> +
> +

nit: 3 empty lines.

> +TRACE_EVENT(xsk_packet_drop,
> +
> +       TP_PROTO(char *name, u16 queue_id, u32 reason, u64 val1, u64 val2, u64 val3),
> +
> +       TP_ARGS(name, queue_id, reason, val1, val2, val3),
> +
> +       TP_STRUCT__entry(
> +               __field(char *, name)
> +               __field(u16, queue_id)
> +               __field(u32, reason)
> +               __field(u64, val1)
> +               __field(u32, val2)
> +               __field(u32, val3)
> +       ),
> +
> +       TP_fast_assign(
> +               __entry->name = name;
> +               __entry->queue_id = queue_id;
> +               __entry->reason = reason;
> +               __entry->val1 = val1;
> +               __entry->val2 = val2;
> +               __entry->val3 = val3;
> +       ),
> +
> +       TP_printk("netdev: %s qid %u reason: %s: %s %llu %s %u %s %u",
> +                 __entry->name, __entry->queue_id, print_reason(__entry->reason),
> +                 print_val1(__entry->reason), __entry->val1,
> +                 print_val2(__entry->reason), __entry->val2,
> +                 print_val3(__entry->reason), __entry->val3
> +       )
> +);
> +
> +#endif /* _TRACE_XSK_H */
> +
> +#include <trace/define_trace.h>
> diff --git a/include/uapi/linux/if_xdp.h b/include/uapi/linux/if_xdp.h
> index a78a8096f4ce..d7eb031d2465 100644
> --- a/include/uapi/linux/if_xdp.h
> +++ b/include/uapi/linux/if_xdp.h
> @@ -108,4 +108,10 @@ struct xdp_desc {
>
>  /* UMEM descriptor is __u64 */
>
> +enum xdp_trace_reasons {

xdp_trace_reasons above, vs. XSK_TRACE_ below. Is this intentional?

> +       XSK_TRACE_DROP_PKT_TOO_BIG,
> +       XSK_TRACE_DROP_INVALID_FILLADDR,
> +       XSK_TRACE_DROP_INVALID_TXD,
> +};
> +

[...]

  reply	other threads:[~2021-02-04  6:38 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-03  7:41 [PATCH bpf-next v4 0/6] AF_XDP Packet Drop Tracing Ciara Loftus
2021-02-03  7:41 ` [PATCH bpf-next v4 1/6] xsk: add tracepoints for packet drops Ciara Loftus
2021-02-04  6:37   ` Song Liu [this message]
2021-02-08  9:11     ` Loftus, Ciara
2021-02-03  7:41 ` [PATCH bpf-next v4 2/6] selftests/bpf: restructure setting the packet count Ciara Loftus
2021-02-03  7:41 ` [PATCH bpf-next v4 3/6] selftests/bpf: add framework for xsk selftests Ciara Loftus
2021-02-03  7:41 ` [PATCH bpf-next v4 4/6] selftests/bpf: XSK_TRACE_DROP_PKT_TOO_BIG test Ciara Loftus
2021-02-03  7:41 ` [PATCH bpf-next v4 5/6] selftests/bpf: XSK_TRACE_INVALID_FILLADDR test Ciara Loftus
2021-02-03  7:41 ` [PATCH bpf-next v4 6/6] selftests/bpf: XSK_TRACE_INVALID_DESC_TX test Ciara Loftus

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=CAPhsuW7Bat9oWw_3_TRgUzc7y61kUtTDYT9-4r2ZaOW7WTZ59g@mail.gmail.com \
    --to=song@kernel.org \
    --cc=bjorn@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=ciara.loftus@intel.com \
    --cc=daniel@iogearbox.net \
    --cc=magnus.karlsson@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=weqaar.a.janjua@intel.com \
    /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).