From: Jesper Dangaard Brouer <brouer@redhat.com>
To: Jakub Kicinski <jakub.kicinski@netronome.com>
Cc: "Toke Høiland-Jørgensen" <toke@toke.dk>,
"David Miller" <davem@davemloft.net>,
dsahern@gmail.com, saeedm@mellanox.com, mst@redhat.com,
netdev@vger.kernel.org, pstaszewski@itcare.pl,
jasowang@redhat.com, brouer@redhat.com
Subject: Re: consistency for statistics with XDP mode
Date: Tue, 4 Dec 2018 10:29:04 +0100 [thread overview]
Message-ID: <20181204102904.1cc2c33c@redhat.com> (raw)
In-Reply-To: <20181203232418.287795a8@cakuba.netronome.com>
On Mon, 3 Dec 2018 23:24:18 -0800
Jakub Kicinski <jakub.kicinski@netronome.com> wrote:
> On Tue, 04 Dec 2018 09:03:52 +0200, Toke Høiland-Jørgensen wrote:
> > David Miller <davem@davemloft.net> writes:
> >
> > > From: David Ahern <dsahern@gmail.com>
> > > Date: Mon, 3 Dec 2018 17:15:03 -0700
> > >
> > >> So, instead of a program tag which the program writer controls, how
> > >> about some config knob that an admin controls that says at attach time
> > >> use standard stats?
> > >
> > > How about, instead of replacing it is in addition to, and admin can
> > > override?
> >
> > Yeah, I was also thinking about something the program writer can set,
> > but the admin can override. There could even be a system-wide setting
> > that would make the verifier inject it into all programs at load time?
>
> That'd be far preferable, having all drivers include the code when we
> have JITs seems like a step backward.
There is one problem with it being part of the eBPF prog. Once eBPf
prog is loaded you cannot change it (store in read-only page for
security reasons). So, that will not make it possible for an admin to
enable stats when troubleshooting a system. The use-case I think we
want to support, is to allow to opt-out due to performance concerns,
but when an admin need to troubleshoot the system, allow the admin to
enable this system wide.
Besides placing this in every eBPF program in the system will replicate
the stats update code (and put more I-cache pressure). The coded
needed is actually very simple:
[PATCH] xdp: add stats for XDP action codes in xdp_rxq_info
Code muckup of adding XDP stats
diff --git a/include/linux/filter.h b/include/linux/filter.h
index cc17f5f32fbb..600a95e0cbcc 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -628,7 +628,10 @@ static __always_inline u32 bpf_prog_run_xdp(const struct bpf_prog *prog,
* already takes rcu_read_lock() when fetching the program, so
* it's not necessary here anymore.
*/
- return BPF_PROG_RUN(prog, xdp);
+ u32 action = BPF_PROG_RUN(prog, xdp);
+ // Q: will adding a branch here cost more than always accounting?
+ xdp->rxq->stats[action <= XDP_REDIRECT ? action : 0]++;
+ return action;
}
static inline u32 bpf_prog_insn_size(const struct bpf_prog *prog)
diff --git a/include/net/xdp.h b/include/net/xdp.h
index 4a0ca7a3d5e5..3409dd9e0fbc 100644
--- a/include/net/xdp.h
+++ b/include/net/xdp.h
@@ -6,6 +6,7 @@
#ifndef __LINUX_NET_XDP_H__
#define __LINUX_NET_XDP_H__
+#include <uapi/linux/bpf.h>
/**
* DOC: XDP RX-queue information
*
@@ -61,6 +62,8 @@ struct xdp_rxq_info {
u32 queue_index;
u32 reg_state;
struct xdp_mem_info mem;
+ // TODO: benchmark if stats should be placed on different cache-line
+ u64 stats[XDP_REDIRECT + 1];
} ____cacheline_aligned; /* perf critical, avoid false-sharing */
struct xdp_buff {
> We could probably fit the stats into the enormous padding of struct
> xdp_rxq_info, the question is - how do we get to it in a clean way..
Struct xdp_rxq_info is explicitly a read-only cache-line, which contain
static information for each RX-queue. We could place the stats record
in the next cache-line (most HW systems fetch 2 cache-lines). But we
can also benchmark if it matters changing xdp_rxq_info to be a
write-cache-line.
--
Best regards,
Jesper Dangaard Brouer
MSc.CS, Principal Kernel Engineer at Red Hat
LinkedIn: http://www.linkedin.com/in/brouer
next prev parent reply other threads:[~2018-12-04 9:29 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-21 21:06 consistency for statistics with XDP mode David Ahern
2018-11-21 21:14 ` Toke Høiland-Jørgensen
2018-11-21 21:29 ` Paweł Staszewski
2018-11-22 0:21 ` Saeed Mahameed
2018-11-22 8:26 ` Toke Høiland-Jørgensen
2018-11-22 16:51 ` David Ahern
2018-11-22 17:00 ` Toke Høiland-Jørgensen
2018-11-30 20:10 ` Saeed Mahameed
2018-11-30 20:30 ` Michael S. Tsirkin
2018-11-30 20:35 ` David Ahern
2018-12-01 4:41 ` Jakub Kicinski
2018-12-01 11:14 ` Jesper Dangaard Brouer
2018-12-03 15:56 ` David Ahern
2018-12-03 19:32 ` David Miller
2018-11-30 23:54 ` Saeed Mahameed
2018-12-01 11:22 ` Jesper Dangaard Brouer
2018-12-03 15:45 ` David Ahern
2018-12-03 19:30 ` David Miller
2018-12-03 19:41 ` Arnaldo Carvalho de Melo
2018-12-03 20:00 ` Toke Høiland-Jørgensen
2018-12-04 0:00 ` David Miller
2018-12-04 0:15 ` David Ahern
2018-12-04 0:36 ` David Miller
2018-12-04 7:03 ` Toke Høiland-Jørgensen
2018-12-04 7:24 ` Jakub Kicinski
2018-12-04 9:29 ` Jesper Dangaard Brouer [this message]
2018-12-04 17:56 ` Jakub Kicinski
2018-12-04 18:06 ` Michael S. Tsirkin
2018-11-24 7:07 ` David Miller
2018-11-22 0:53 ` Toshiaki Makita
2018-11-22 16:43 ` David Ahern
2018-11-26 1:37 ` Toshiaki Makita
2018-11-27 7:04 ` Toshiaki Makita
2018-11-28 4:03 ` Jason Wang
2018-11-28 5:09 ` Toshiaki Makita
2018-11-26 22:15 ` Jakub Kicinski
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=20181204102904.1cc2c33c@redhat.com \
--to=brouer@redhat.com \
--cc=davem@davemloft.net \
--cc=dsahern@gmail.com \
--cc=jakub.kicinski@netronome.com \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pstaszewski@itcare.pl \
--cc=saeedm@mellanox.com \
--cc=toke@toke.dk \
/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.