[dpdk-dev] [PATCH] vhost: add support to large linear mbufs
Maxime Coquelin
maxime.coquelin at redhat.com
Wed Oct 2 09:51:27 CEST 2019
Hi Flavio,
On 10/2/19 12:19 AM, Flavio Leitner wrote:
> The rte_vhost_dequeue_burst supports two ways of dequeuing data. If
> the data fits into a buffer, then all data is copied and a single
> linear buffer is returned. Otherwise it allocates additional mbufs
> and chains them together to return a multiple segments mbuf.
>
> While that covers most use cases, it forces applications that need
> to work with larger data sizes to support multiple segments mbufs.
> The non-linear characteristic brings complexity and performance
> implications to the application.
>
> To resolve the issue, change the API so that the application can
> optionally provide a second mempool containing larger mbufs. If that
> is not provided (NULL), the behavior remains as before the change.
> Otherwise, the data size is checked and the corresponding mempool
> is used to return linear mbufs.
It is not necessary to break the API (and it would require a deprecation
notice), but instead you could create a new API:
static inline uint16_t
vhost_dequeue_burst(int vid, uint16_t queue_id,
struct rte_mempool *mbuf_pool,
struct rte_mempool *mbuf_pool_large,
struct rte_mbuf **pkts, uint16_t count);
uint16_t rte_vhost_dequeue_burst(int vid, uint16_t queue_id,
struct rte_mempool *mbuf_pool,
struct rte_mbuf **pkts, uint16_t count)
{
return vhost_dequeue_burst(vid, queue_id, mbuf_pool, NULL,
pkts, count);
}
uint16_t rte_vhost_dequeue_burst2(int vid, uint16_t queue_id,
struct rte_mempool *mbuf_pool,
struct rte_mempool *mbuf_pool_large,
struct rte_mbuf **pkts, uint16_t count)
{
return vhost_dequeue_burst(vid, queue_id, mbuf_pool,
mbuf_pool_large,
pkts, count);
}
Yeah, the name isn't very creative, I'm sure you'll have better idea!
>
> Signed-off-by: Flavio Leitner <fbl at sysclose.org>
> ---
> drivers/net/vhost/rte_eth_vhost.c | 4 +--
> examples/tep_termination/main.c | 2 +-
> examples/vhost/main.c | 2 +-
> lib/librte_vhost/rte_vhost.h | 5 ++-
> lib/librte_vhost/virtio_net.c | 57 +++++++++++++++++++++++--------
> 5 files changed, 50 insertions(+), 20 deletions(-)
Maxime
More information about the dev
mailing list