From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by dpdk.org (Postfix) with ESMTP id 8A6002E8A for ; Tue, 4 Apr 2017 18:32:27 +0200 (CEST) Received: from glumotte.dev.6wind.com (unknown [10.16.0.195]) by proxy.6wind.com (Postfix) with ESMTP id BB90A258BB; Tue, 4 Apr 2017 18:32:21 +0200 (CEST) From: Olivier Matz To: dev@dpdk.org Cc: konstantin.ananyev@intel.com, bruce.richardson@intel.com, mb@smartsharesystems.com, andrey.chilikin@intel.com, jblunck@infradead.org, nelio.laranjeiro@6wind.com, arybchenko@solarflare.com, thomas.monjalon@6wind.com, jerin.jacob@caviumnetworks.com Date: Tue, 4 Apr 2017 18:27:59 +0200 Message-Id: <20170404162807.20157-1-olivier.matz@6wind.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <1488966121-22853-1-git-send-email-olivier.matz@6wind.com> References: <1488966121-22853-1-git-send-email-olivier.matz@6wind.com> Subject: [dpdk-dev] [PATCH v2 0/8] mbuf: structure reorganization X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 04 Apr 2017 16:32:27 -0000 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