[dpdk-dev] [PATCH v2 0/8] mbuf: structure reorganization

Olivier Matz olivier.matz at 6wind.com
Tue Apr 4 18:27:59 CEST 2017


Based on discussions done in [1] and in this thread, 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. This timestamp
  is not normalized, i.e. no unit or time reference is enforced. A
  library may be added to do this job in the future.
- 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.

Once this patchset is pushed, the Rx path of drivers could be optimized a bit,
by removing writes to m->next, m->nb_segs and m->refcnt. The patch 4/8 gives an
idea of what could be done.

[1] http://dpdk.org/ml/archives/dev/2016-October/049338.html

v1->v2:
- remove reordering of vlan fields as it breaks pmd vector code
- optimize rte_pktmbuf_prefree_seg()

rfc->v1:
- fix reset of mbuf fields in case of indirect mbuf in rte_pktmbuf_prefree_seg()
- do not enforce a unit or time reference for m->timestamp
- reorganize fields to make vlan and outer vlan consecutive
- enhance documentation of m->refcnt and m->port to explain why they are 16bits



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
  drivers/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/null/rte_eth_null.c                    |   2 -
 drivers/net/virtio/virtio_rxtx.c                   |   4 -
 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                         | 138 +++++++++++++++++----
 18 files changed, 144 insertions(+), 100 deletions(-)

-- 
2.11.0



More information about the dev mailing list