[ovs-dev] [branch-2.6] netdev-dpdk: leverage the mempool offload support
Darrell Ball
dball at vmware.com
Tue Mar 21 22:36:34 UTC 2017
On 3/21/17, 2:00 PM, "ovs-dev-bounces at openvswitch.org on behalf of Kevin Traynor" <ovs-dev-bounces at openvswitch.org on behalf of ktraynor at redhat.com> wrote:
On 03/20/2017 11:38 AM, 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.
This is changing OVS code to enable new functionality in some cases, I'm
not sure that it's really appropriate as a backport.
+1
It is not a bug fix, but rather an enhancement and also cleaner api, so
would not seem backport eligible.
>
> Signed-off-by: Hemant Agrawal <hemant.agrawal at nxp.com>
> ---
> lib/netdev-dpdk.c | 20 +++++++++-----------
> 1 file changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 9203de0..8d658ff 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -468,7 +468,6 @@ dpdk_mp_get(int socket_id, int mtu) OVS_REQUIRES(dpdk_mutex)
> struct dpdk_mp *dmp = NULL;
> char mp_name[RTE_MEMPOOL_NAMESIZE];
> unsigned mp_size;
> - struct rte_pktmbuf_pool_private mbp_priv;
>
> LIST_FOR_EACH (dmp, list_node, &dpdk_mp_list) {
> if (dmp->socket_id == socket_id && dmp->mtu == mtu) {
> @@ -481,9 +480,6 @@ dpdk_mp_get(int socket_id, int mtu) OVS_REQUIRES(dpdk_mutex)
> 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 change
> @@ -500,13 +496,13 @@ dpdk_mp_get(int socket_id, int mtu) OVS_REQUIRES(dpdk_mutex)
> dmp->mtu, dmp->socket_id, mp_size) < 0) {
> goto fail;
> }
> -
> - 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);
> } while (!dmp->mp && rte_errno == ENOMEM && (mp_size /= 2) >= MIN_NB_MBUF);
>
> if (dmp->mp == NULL) {
> @@ -514,6 +510,8 @@ dpdk_mp_get(int socket_id, int mtu) OVS_REQUIRES(dpdk_mutex)
> } else {
> VLOG_DBG("Allocated \"%s\" mempool with %u mbufs", mp_name, mp_size );
> }
> + /* pktmbuf only prepare the rte_mbuf, prepare the ovs bufs */
> + rte_mempool_obj_iter(dmp->mp, ovs_rte_pktmbuf_init, NULL);
>
> ovs_list_push_back(&dpdk_mp_list, &dmp->list_node);
> return dmp;
>
_______________________________________________
dev mailing list
dev at openvswitch.org
https://urldefense.proofpoint.com/v2/url?u=https-3A__mail.openvswitch.org_mailman_listinfo_ovs-2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-uZnsw&m=-W7aEdrfE9YA4xel7blbyN14gy2c_fvP74McC_hsv04&s=cqWnR2ZQv358LHVWn9vkS3OHalhgffnveJhn-RfV76k&e=
More information about the dev
mailing list