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 <ciara.lof...@intel.com>
<...> > @@ -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?