On 03/21/2017 04:08 AM, Jianbo Liu wrote: > The 03/20/2017 17:29, Hemant Agrawal 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]> >> --- >> branch-2.6 and master are different, so different patches are submitted. >> >> lib/netdev-dpdk.c | 19 +++++++++---------- >> 1 file changed, 9 insertions(+), 10 deletions(-) >> >> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c >> index ddc651b..5d0d762 100644 >> --- a/lib/netdev-dpdk.c >> +++ b/lib/netdev-dpdk.c >> @@ -466,7 +466,6 @@ ovs_rte_pktmbuf_init(struct rte_mempool *mp, >> 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 +477,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 +492,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); > > I think you should remove rte_pktmbuf_init() in ovs_rte_pktmbuf_init() as it > is already called in rte_pktmbuf_pool_create(). >
I agree with that optimization. Otherwise, LGTM for master branch. >> 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 > > -- > IMPORTANT NOTICE: The contents of this email and any attachments are > confidential and may also be privileged. If you are not the intended > recipient, please notify the sender immediately and do not disclose the > contents to any other person, use it for any purpose, or store or copy the > information in any medium. Thank you. > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
