> On Oct 24, 2016, at 10:49 AM, Morten Br?rup <mb at smartsharesystems.com> 
> wrote:
> 
> First of all: Thanks for a great DPDK Userspace 2016!
> 
> 
> 
> Continuing the Userspace discussion about Olivier Matz?s proposed mbuf 
> changes...
> 
> 
> 
> 1.
> 
> Stephen Hemminger had a noteworthy general comment about keeping metadata for 
> the NIC in the appropriate section of the mbuf: Metadata generated by the 
> NIC?s RX handler belongs in the first cache line, and metadata required by 
> the NIC?s TX handler belongs in the second cache line. This also means that 
> touching the second cache line on ingress should be avoided if possible; and 
> Bruce Richardson mentioned that for this reason m->next was zeroed on free().
> 
> 
> 
> 2.
> 
> There seemed to be consensus that the size of m->refcnt should match the size 
> of m->port because a packet could be duplicated on all physical ports for L3 
> multicast and L2 flooding.
> 
> Furthermore, although a single physical machine (i.e. a single server) with 
> 255 physical ports probably doesn?t exist, it might contain more than 255 
> virtual machines with a virtual port each, so it makes sense extending these 
> mbuf fields from 8 to 16 bits.

I thought we also talked about removing the m->port from the mbuf as it is not 
really needed.

> 
> 
> 
> 3.
> 
> Someone (Bruce Richardson?) suggested moving m->refcnt and m->port to the 
> second cache line, which then generated questions from the audience about the 
> real life purpose of m->port, and if m->port could be removed from the mbuf 
> structure.
> 
> 
> 
> 4.
> 
> I suggested using offset -1 for m->refcnt, so m->refcnt becomes 0 on first 
> allocation. This is based on the assumption that other mbuf fields must be 
> zeroed at alloc()/free() anyway, so zeroing m->refcnt is cheaper than setting 
> it to 1.
> 
> Furthermore (regardless of m->refcnt offset), I suggested that it is not 
> required to modify m->refcnt when allocating and freeing the mbuf, thus 
> saving one write operation on both alloc() and free(). However, this assumes 
> that m->refcnt debugging, e.g. underrun detection, is not required.
> 
> 
> 
> 5.
> 
> And here?s something new to think about:
> 
> m->next already reveals if there are more segments to a packet. Which purpose 
> does m->nb_segs serve that is not already covered by m->next?
> 
> 
> 
> 
> 
> Med venlig hilsen / kind regards
> 
> 
> 
> Morten Br?rup
> 
> CTO
> 
> 
> 
> 
> 
> SmartShare Systems A/S
> 
> Tonsbakken 16-18
> 
> DK-2740 Skovlunde
> 
> Denmark
> 
> 
> 
> Office      +45 70 20 00 93
> 
> Direct      +45 89 93 50 22
> 
> Mobile     +45 25 40 82 12
> 
> 
> 
> mb at smartsharesystems.com <mailto:mb at smartsharesystems.com> 
> 
> www.smartsharesystems.com <https://www.smartsharesystems.com/> 
> 
> 
> 

Regards,
Keith

Reply via email to