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 <shah...@mellanox.com> > Signed-off-by: Viacheslav Ovsiienko <viachesl...@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