Acked-by: Darrell Ball <[email protected]>
On 4/12/17, 10:31 PM, "Hemant Agrawal" <[email protected]> wrote:
DPDK 16.07 introduced the support for mempool offload support.
rte_pktmbuf_pool_create is the recommended method for creating pktmbuf
pools. Buffer pools created with rte_mempool_create may not get offloaded
to the underlying offloaded mempools.
This patch, changes the rte_mempool_create to use helper wrapper
"rte_pktmbuf_pool_create" provided by dpdk, so that it can leverage
offloaded mempools.
Signed-off-by: Hemant Agrawal <[email protected]>
Acked-by: Jianbo Liu <[email protected]>
Acked-by: Kevin Traynor <[email protected]>
---
v4:
* fix the comment as suggested
v3:
* adding OVS_UNUSED for mp parameter
v2:
* removing rte_pktmbuf_init as per review comment
lib/netdev-dpdk.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index ddc651b..9fa60fd 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -451,22 +451,19 @@ free_dpdk_buf(struct dp_packet *p)
}
static void
-ovs_rte_pktmbuf_init(struct rte_mempool *mp,
+ovs_rte_pktmbuf_init(struct rte_mempool *mp OVS_UNUSED,
void *opaque_arg OVS_UNUSED,
void *_p,
unsigned i OVS_UNUSED)
{
struct rte_mbuf *pkt = _p;
- rte_pktmbuf_init(mp, opaque_arg, _p, i);
-
dp_packet_init_dpdk((struct dp_packet *) pkt, pkt->buf_len);
}
static struct dpdk_mp *
dpdk_mp_create(int socket_id, int mtu)
{
- struct rte_pktmbuf_pool_private mbp_priv;
struct dpdk_mp *dmp;
unsigned mp_size;
char *mp_name;
@@ -478,9 +475,6 @@ dpdk_mp_create(int socket_id, int mtu)
dmp->socket_id = socket_id;
dmp->mtu = mtu;
dmp->refcount = 1;
- mbp_priv.mbuf_data_room_size = MBUF_SIZE(mtu) - sizeof(struct
dp_packet);
- mbp_priv.mbuf_priv_size = sizeof(struct dp_packet)
- - sizeof(struct rte_mbuf);
/* XXX: this is a really rough method of provisioning memory.
* It's impossible to determine what the exact memory requirements are
* when the number of ports and rxqs that utilize a particular mempool
can
@@ -496,18 +490,24 @@ dpdk_mp_create(int socket_id, int mtu)
mp_name = xasprintf("ovs_mp_%d_%d_%u", dmp->mtu, dmp->socket_id,
mp_size);
- dmp->mp = rte_mempool_create(mp_name, mp_size, MBUF_SIZE(mtu),
- MP_CACHE_SZ,
- sizeof(struct
rte_pktmbuf_pool_private),
- rte_pktmbuf_pool_init, &mbp_priv,
- ovs_rte_pktmbuf_init, NULL,
- socket_id, 0);
+ dmp->mp = rte_pktmbuf_pool_create(mp_name, mp_size,
+ MP_CACHE_SZ,
+ sizeof (struct dp_packet)
+ - sizeof (struct
rte_mbuf),
+ MBUF_SIZE(mtu)
+ - sizeof(struct
dp_packet),
+ socket_id);
if (dmp->mp) {
VLOG_DBG("Allocated \"%s\" mempool with %u mbufs",
mp_name, mp_size);
}
free(mp_name);
if (dmp->mp) {
+ /* rte_pktmbuf_pool_create has done some initialization of the
+ * rte_mbuf part of each dp_packet, while ovs_rte_pktmbuf_init
+ * initializes some OVS specific fields of dp_packet.
+ */
+ rte_mempool_obj_iter(dmp->mp, ovs_rte_pktmbuf_init, NULL);
return dmp;
}
} while (rte_errno == ENOMEM && (mp_size /= 2) >= MIN_NB_MBUF);
--
1.9.1
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev