One minor comment

On 3/24/17, 12:27 AM, "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]>
    ---
    v3:
     * adding OVS_UNUSED for mp parameter
    
    v2:
     * removing rte_pktmbuf_init as per review comment
    
     lib/netdev-dpdk.c | 23 ++++++++++-------------
     1 file changed, 10 insertions(+), 13 deletions(-)
    
    diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
    index ddc651b..39021cf 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,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_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. */

I also gave the patch a spin, just to check for any regressions.


    +            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

Reply via email to