[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <fc6e254c-5153-aa72-77d1-693e24b49848@mellanox.com>
Date: Tue, 14 Jul 2020 13:17:30 +0300
From: Maxim Mikityanskiy <maximmi@...lanox.com>
To: Magnus Karlsson <magnus.karlsson@...el.com>
Cc: bjorn.topel@...el.com, ast@...nel.org, daniel@...earbox.net,
netdev@...r.kernel.org, jonathan.lemon@...il.com,
bpf@...r.kernel.org, jeffrey.t.kirsher@...el.com,
maciej.fijalkowski@...el.com, maciejromanfijalkowski@...il.com,
cristian.dumitrescu@...el.com
Subject: Re: [PATCH bpf-next v2 11/14] xsk: add shared umem support between
devices
On 2020-07-10 17:16, Magnus Karlsson wrote:
> Add support to share a umem between different devices. This mode
> can be invoked with the XDP_SHARED_UMEM bind flag. Previously,
> sharing was only supported within the same device. Note that when
> sharing a umem between devices, just as in the case of sharing a
> umem between queue ids, you need to create a fill ring and a
> completion ring and tie them to the socket (with two setsockopts,
> one for each ring) before you do the bind with the
> XDP_SHARED_UMEM flag. This so that the single-producer
> single-consumer semantics of the rings can be upheld.
I'm not sure if you saw my comment under v1 asking about performance.
Could you share what performance numbers (packet rate) you see when
doing forwarding with xsk_fwd? I'm interested in:
1. Forwarding between two queues of the same netdev.
2. Forwarding between two netdevs.
3. xdpsock -l as the baseline.
Thanks,
Max
>
> Signed-off-by: Magnus Karlsson <magnus.karlsson@...el.com>
> ---
> net/xdp/xsk.c | 11 ++++-------
> 1 file changed, 4 insertions(+), 7 deletions(-)
>
> diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
> index 05fadd9..4bf47d3 100644
> --- a/net/xdp/xsk.c
> +++ b/net/xdp/xsk.c
> @@ -695,14 +695,11 @@ static int xsk_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
> sockfd_put(sock);
> goto out_unlock;
> }
> - if (umem_xs->dev != dev) {
> - err = -EINVAL;
> - sockfd_put(sock);
> - goto out_unlock;
> - }
>
> - if (umem_xs->queue_id != qid) {
> - /* Share the umem with another socket on another qid */
> + if (umem_xs->queue_id != qid || umem_xs->dev != dev) {
> + /* Share the umem with another socket on another qid
> + * and/or device.
> + */
> xs->pool = xp_create_and_assign_umem(xs,
> umem_xs->umem);
> if (!xs->pool) {
>
Powered by blists - more mailing lists