Message ID | 1490258133-1008-1-git-send-email-hemant.agrawal@nxp.com |
---|---|
State | Superseded |
Delegated to: | Darrell Ball |
Headers | show |
> 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 <hemant.agrawal@nxp.com> > --- > v2: > * removing rte_pktmbuf_init as per review comment > > lib/netdev-dpdk.c | 21 +++++++++------------ > 1 file changed, 9 insertions(+), 12 deletions(-) > > diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index ddc651b..80bb1ff > 100644 > --- a/lib/netdev-dpdk.c > +++ b/lib/netdev-dpdk.c > @@ -458,15 +458,12 @@ ovs_rte_pktmbuf_init(struct rte_mempool *mp, { > struct rte_mbuf *pkt = _p; > > - rte_pktmbuf_init(mp, opaque_arg, _p, i); > - Hi Hemant, I haven't had a chance to test this yet but at a glance this will cause a warning when compiling, mp parameter is no longer used in the function, need to add OVS_UNUSED above for mp. Ian > 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,21 @@ 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) { > + /* pktmbuf only prepare the rte_mbuf, prepare the ovs bufs */ > + 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 > dev@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index ddc651b..80bb1ff 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -458,15 +458,12 @@ ovs_rte_pktmbuf_init(struct rte_mempool *mp, { 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,21 @@ 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) { + /* pktmbuf only prepare the rte_mbuf, prepare the ovs bufs */ + rte_mempool_obj_iter(dmp->mp, ovs_rte_pktmbuf_init, NULL); return dmp; } } while (rte_errno == ENOMEM && (mp_size /= 2) >= MIN_NB_MBUF);
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 <hemant.agrawal@nxp.com> --- v2: * removing rte_pktmbuf_init as per review comment lib/netdev-dpdk.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-)