While doing this fields reshuffling, any chance to put uint16_t vlan_tci_outer beside uint16_t vlan_tci? It will allow to treat QinQ tags as a single 32-bit tag, if needed, and use it for other tag/labels like MPLS, GRE, NSH which could be 20, 24, 32 bits wide.
/Andrey > -----Original Message----- > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Olivier Matz > Sent: Tuesday, January 24, 2017 3:19 PM > To: dev@dpdk.org > Subject: [dpdk-dev] [RFC 0/8] mbuf: structure reorganization > > Based on discussion done in [1], this patchset reorganizes the mbuf. > > The main changes are: > - reorder structure to increase vector performance on some non-ia > platforms. > - add a 64bits timestamp field in the 1st cache line > - m->next, m->nb_segs, and m->refcnt are always initialized for mbufs > in the pool, avoiding the need of setting m->next (located in the > 2nd cache line) in the Rx path for mono-segment packets. > - change port and nb_segs to 16 bits > - move seqn in the 2nd cache line > > Things discussed but not done in the patchset: > - move refcnt and nb_segs to the 2nd cache line: many drivers sets > them in the Rx path, so it could introduce a performance regression, or > it would require to change all the drivers, which is not an easy task. > - remove the m->port field: too much impact on many examples and > libraries, > and some people highlighted they are using it. > - moving m->next in the 1st cache line: there is not enough room, and having > it set to NULL for unused mbuf should remove the need for it. > - merge seqn and timestamp together in a union: we could imagine use cases > were both are activated. There is no flag indicating the presence of seqn, > so it looks preferable to keep them separated for now. > > I made some basic performance tests (ixgbe) and see no regression, but the > patchset requires more testing. > > [1] http://dpdk.org/ml/archives/dev/2016-October/049338.html > > > Jerin Jacob (1): > mbuf: make rearm data address naturally aligned > > Olivier Matz (7): > mbuf: make segment prefree function public > mbuf: make raw free function public > mbuf: set mbuf fields while in pool > net: don't touch mbuf next or nb segs on Rx > mbuf: use 2 bytes for port and nb segments > mbuf: move sequence number in second cache line > mbuf: add a timestamp field > > app/test-pmd/csumonly.c | 4 +- > drivers/net/ena/ena_ethdev.c | 2 +- > drivers/net/enic/enic_rxtx.c | 2 +- > drivers/net/fm10k/fm10k_rxtx.c | 6 +- > drivers/net/fm10k/fm10k_rxtx_vec.c | 9 +- > drivers/net/i40e/i40e_rxtx_vec_common.h | 6 +- > drivers/net/i40e/i40e_rxtx_vec_sse.c | 11 +- > drivers/net/ixgbe/ixgbe_rxtx.c | 10 +- > drivers/net/ixgbe/ixgbe_rxtx_vec_common.h | 6 +- > drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c | 9 -- > drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c | 9 -- > drivers/net/mlx5/mlx5_rxtx.c | 11 +- > drivers/net/mpipe/mpipe_tilegx.c | 3 +- > drivers/net/null/rte_eth_null.c | 2 - > drivers/net/virtio/virtio_rxtx.c | 3 - > drivers/net/virtio/virtio_rxtx_simple.h | 6 +- > .../linuxapp/eal/include/exec-env/rte_kni_common.h | 5 +- > lib/librte_mbuf/rte_mbuf.c | 4 + > lib/librte_mbuf/rte_mbuf.h | 114 > ++++++++++++++++----- > 19 files changed, 124 insertions(+), 98 deletions(-) > > -- > 2.8.1