[dpdk-dev] [PATCH v6 0/5] mbuf: detach mbuf with pinned external buffer
Thomas Monjalon
thomas at monjalon.net
Mon Jan 20 23:55:10 CET 2020
20/01/2020 20:16, Viacheslav Ovsiienko:
> Today's pktmbuf pool contains only mbufs with no external buffers.
> This means data buffer for the mbuf should be placed right after the
> mbuf structure (+ the private data when enabled).
>
> On some cases, the application would want to have the buffers allocated
> from a different device in the platform. This is in order to do zero
> copy for the packet directly to the device memory. Examples for such
> devices can be GPU or storage device. For such cases the native pktmbuf
> pool does not fit since each mbuf would need to point to external
> buffer.
>
> To support above, the pktmbuf pool will be populated with mbuf pointing
> to the device buffers using the mbuf external buffer feature.
> The PMD will populate its receive queues with those buffer, so that
> every packet received will be scattered directly to the device memory.
> on the other direction, embedding the buffer pointer to the transmit
> queues of the NIC, will make the DMA to fetch device memory
> using peer to peer communication.
>
> Such mbuf with external buffer should be handled with care when mbuf is
> freed. Mainly The external buffer should not be detached, so that it can
> be reused for the next packet receive.
>
> This patch introduce a new flag on the rte_pktmbuf_pool_private
> structure to specify this mempool is for mbuf with pinned external
> buffer. Upon detach this flag is validated and buffer is not detached.
> A new mempool create wrapper is also introduced to help application to
> create and populate such mempool.
>
> The unit test (as part of test_mbuf application) will be provided
> as dedicated patch.
>
> Signed-off-by: Shahaf Shuler <shahafs at mellanox.com>
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
>
> RFC: http://patches.dpdk.org/patch/63077
> v1: http://patches.dpdk.org/cover/64424
> v2: - fix rte_experimantal issue on comment addressing
> - rte_mbuf_has_pinned_extbuf return type is uint32_t
> - fix Power9 compilation issue
> v3: - fix "#include <stdbool.h> leftover
> v4: - https://patches.dpdk.org/cover/64809/
> - introduce rte_pktmbuf_priv_flags
> - support cloning pinned mbufs as for regular mbufs
> with external buffers
> - address the minor comments
> v5: - http://patches.dpdk.org/cover/64979/
> - update rte_pktmbuf_prefree_seg
> - rename __rte_pktmbuf_extbuf_detach
> - __rte_pktmbuf_init_extmem is static
> - const qualifier is specified for external memory
> description parameter of rte_pktmbuf_pool_create_extbuf
> - addressing minor comments
> - fix typos
> v6: - new lines inserted
> - struct rte_pktmbuf_extmem_init_ctx is local to rte_mbuf.c
>
> Viacheslav Ovsiienko (5):
> mbuf: introduce routine to get private mbuf pool flags
> mbuf: detach mbuf with pinned external buffer
> mbuf: create packet pool with external memory buffers
> app/testpmd: add mempool with external data buffers
> net/mlx5: allow use allocated mbuf with external buffer
Applied, thanks
More information about the dev
mailing list