[ovs-dev] [PATCH v8 01/13] netdev-dpdk: fix mbuf sizing

Lam, Tiago tiago.lam at intel.com
Fri Jun 22 19:02:30 UTC 2018


On 18/06/2018 12:20, Eelco Chaudron wrote:
> 
> 
> On 11 Jun 2018, at 18:21, Tiago Lam wrote:
> 

[snip]

>>
>> @@ -626,13 +622,31 @@ dpdk_mp_create(struct netdev_dpdk *dev, int mtu)
>>                    netdev_name, n_mbufs, socket_id,
>>                    dev->requested_n_rxq, dev->requested_n_txq);
>>
>> +        mbuf_priv_data_len = sizeof(struct dp_packet) -
>> +                                 sizeof(struct rte_mbuf);
>> +        /* The size of the entire mbuf. */
>> +        mbuf_size = sizeof (struct dp_packet) +
>> +                                mbuf_pkt_data_len + 
>> RTE_PKTMBUF_HEADROOM;
>> +        /* mbuf size, rounded up to cacheline size. */
>> +        aligned_mbuf_size = ROUND_UP(mbuf_size, RTE_CACHE_LINE_SIZE);
>> +        /* If there is a size discrepancy, add padding to 
>> mbuf_priv_data_len.
>> +         * This maintains mbuf size cache alignment, while also 
>> honoring RX
>> +         * buffer alignment in the data portion of the mbuf. If this 
>> adjustment
>> +         * is not made, there is a possiblity later on that for an 
>> element of
>> +         * the mempool, buf, buf->data_len < (buf->buf_len - 
>> buf->data_off).
>> +         * This is problematic in the case of multi-segment mbufs, 
>> particularly
>> +         * when an mbuf segment needs to be resized (when 
>> [push|popp]ing a VLAN
>> +         * header, for example.
>> +         */
>> +        mbuf_priv_data_len += (aligned_mbuf_size - mbuf_size);
>> +
>>          mp = rte_pktmbuf_pool_create(mp_name, n_mbufs, MP_CACHE_SZ,
>> -                 sizeof (struct dp_packet) - sizeof (struct 
>> rte_mbuf),
>> -                 MBUF_SIZE(mtu) - sizeof(struct dp_packet), 
>> socket_id);
>> +                mbuf_priv_data_len,
>> +                mbuf_pkt_data_len + RTE_PKTMBUF_HEADROOM, socket_id);
>>
>>          if (mp) {
>>              VLOG_DBG("Allocated \"%s\" mempool with %u mbufs",
>> -                     mp_name, n_mbufs);
>> +                    mp_name, n_mbufs);
> 
> While you are at it, can we add some info on the cache line alignment 
> size, might be useful for debugging.

Sure. I'll add it to the next iteration.

Tiago.


More information about the dev mailing list