On 8/11/2020 10:50 AM, Ciara Loftus wrote:
> A future kernel will introduce the ability to efficiently share a UMEM
> between AF_XDP sockets bound to different queue ids on the same or
> different devices. This patch integrates that functionality into the AF_XDP
> PMD.
>
> A PMD will attempt to share a UMEM with others if the shared_umem=1 vdev
> arg is set. UMEMs can only be shared across PMDs with the same mempool, up
> to a limited number of PMDs goverened by the size of the given mempool.
>
> The benefit of sharing UMEM across PMDs is a saving in memory due to not
> having to register the UMEM multiple times.
>
> Signed-off-by: Ciara Loftus <[email protected]>
<...>
> @@ -1,5 +1,5 @@
> /* SPDX-License-Identifier: BSD-3-Clause
> - * Copyright(c) 2019 Intel Corporation.
> + * Copyright(c) 2020 Intel Corporation.
> */
> #include <unistd.h>
> #include <errno.h>
> @@ -15,6 +15,7 @@
> #include <linux/if_link.h>
> #include <linux/ethtool.h>
> #include <linux/sockios.h>
> +#include <linux/version.h>
> #include "af_xdp_deps.h"
> #include <bpf/xsk.h>
>
> @@ -37,6 +38,11 @@
> #include <rte_mbuf.h>
> #include <rte_malloc.h>
> #include <rte_ring.h>
> +#include <rte_spinlock.h>
> +
> +#if KERNEL_VERSION(5, 7, 0) < LINUX_VERSION_CODE
> +#define ETH_AF_XDP_SHARED_UMEM 1
> +#endif
I think better to separate these version checks from the actual code, what do
you think creating a compat.h under 'net/af_xdp' and move above logic there?
<...>
> @@ -888,9 +1048,15 @@ xsk_configure(struct pmd_internals *internals, struct
> pkt_rx_queue *rxq,
> cfg.bind_flags |= XDP_USE_NEED_WAKEUP;
> #endif
>
> - ret = xsk_socket__create(&rxq->xsk, internals->if_name,
> - rxq->xsk_queue_idx, rxq->umem->umem, &rxq->rx,
> - &txq->tx, &cfg);
> + if (!internals->shared_umem_configured) {
> + ret = xsk_socket__create(&rxq->xsk, internals->if_name,
> + rxq->xsk_queue_idx, rxq->umem->umem, &rxq->rx,
> + &txq->tx, &cfg);
> + } else {
> + ret = xsk_socket__create_shared(&rxq->xsk, internals->if_name,
> + rxq->xsk_queue_idx, rxq->umem->umem, &rxq->rx,
> + &txq->tx, &rxq->fq, &rxq->cq, &cfg);
> + }
Is the above dependency (ETH_AF_XDP_SHARED_UMEM) for the kernel 'af_xdp' code,
or for 'libbpf.so'?
The 'xsk_socket__create_shared()' API is not available in the latest
'libbpf.so', I wonder if the kernel version check is to align with the correct
'libbpf.so' version.
If not how the dependent version of the 'libbpf.so' managed for DPDK?