From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id DE8792E81 for ; Mon, 15 Sep 2014 09:06:25 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP; 15 Sep 2014 00:05:46 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.04,525,1406617200"; d="scan'208";a="602895685" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga002.jf.intel.com with ESMTP; 15 Sep 2014 00:11:54 -0700 Received: from fmsmsx118.amr.corp.intel.com (10.18.116.18) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.195.1; Mon, 15 Sep 2014 00:11:54 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx118.amr.corp.intel.com (10.18.116.18) with Microsoft SMTP Server (TLS) id 14.3.195.1; Mon, 15 Sep 2014 00:11:54 -0700 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.203]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.172]) with mapi id 14.03.0195.001; Mon, 15 Sep 2014 15:11:52 +0800 From: "Liu, Jijiang" To: "Richardson, Bruce" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2 02/13] mbuf: reorder fields by time of use Thread-Index: AQHPzcLMqNDrboJBO0uxnAn2xplffZwByHfw Date: Mon, 15 Sep 2014 07:11:51 +0000 Message-ID: <1ED644BD7E0A5F4091CF203DAFB8E4CC01D701BA@SHSMSX101.ccr.corp.intel.com> References: <1409759378-10113-1-git-send-email-bruce.richardson@intel.com> <1410441347-22840-1-git-send-email-bruce.richardson@intel.com> <1410441347-22840-3-git-send-email-bruce.richardson@intel.com> In-Reply-To: <1410441347-22840-3-git-send-email-bruce.richardson@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 02/13] mbuf: reorder fields by time of use X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Sep 2014 07:06:26 -0000 Hi Bruce, > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bruce Richardson > Sent: Thursday, September 11, 2014 9:16 PM > To: dev@dpdk.org > Subject: [dpdk-dev] [PATCH v2 02/13] mbuf: reorder fields by time of use >=20 > * Reorder the fields in the mbuf so that we have fields that are used to= gether > side-by-side in the structure. This means that we have a contiguous block= of > 8-bytes in the mbuf which are used to reset an mbuf of descriptor rearm, = and a > block of 16-bytes of data (excluding flags) which are set on RX from the > received packet descriptor. > * Use dummy fields as appropriate to ensure alignment or to reserve gaps = for > later field additions. > * Place most items which are not used by fast-path RX separately at the e= nd of > the structure so they can later be moved to a separate cache line. > [The l2/l3 length fields are not moved at this stage as doing so will cau= se > overflow to the next cache line]. >=20 > Updated in V2: > * Updated the KNI buffer structure to match that of new mbuf > * Cleaned up commit message typos. >=20 > Signed-off-by: Bruce Richardson > --- > .../linuxapp/eal/include/exec-env/rte_kni_common.h | 12 ++++++----- > lib/librte_mbuf/rte_mbuf.h | 25 > ++++++++++++---------- > 2 files changed, 21 insertions(+), 16 deletions(-) >=20 > diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.= h > b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h > index 07908ac..f2b502c 100644 > --- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h > +++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h > @@ -108,15 +108,17 @@ struct rte_kni_fifo { > * Padding is necessary to assure the offsets of these fields > */ > struct rte_kni_mbuf { > - void *pool; > void *buf_addr; > - char pad0[16]; > - void *next; > + char pad0[10]; > uint16_t data_off; /**< Start address of data in segment buffer. *= / > + char pad1[4]; > + uint16_t ol_flags; /**< Offload features. */ > + char pad2[8]; > uint16_t data_len; /**< Amount of data in segment buffer. */ > uint32_t pkt_len; /**< Total pkt len: sum of all segment data_len= . > */ > - char pad2[4]; > - uint16_t ol_flags; /**< Offload features. */ > + char pad3[8]; > + void *pool; > + void *next; > } __attribute__((__aligned__(64))); >=20 > /* > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h inde= x > 71080e5..413a5a1 100644 > --- a/lib/librte_mbuf/rte_mbuf.h > +++ b/lib/librte_mbuf/rte_mbuf.h > @@ -115,16 +115,12 @@ extern "C" { > * The generic rte_mbuf, containing a packet mbuf. > */ > struct rte_mbuf { > - struct rte_mempool *pool; /**< Pool from which mbuf was allocated. */ > void *buf_addr; /**< Virtual address of segment buffer. */ > phys_addr_t buf_physaddr; /**< Physical address of segment buffer. */ > - uint16_t buf_len; /**< Length of segment buffer. */ >=20 > - /* valid for any segment */ > - struct rte_mbuf *next; /**< Next segment of scattered packet. */ > + /* next 8 bytes are initialised on RX descriptor rearm */ > + uint16_t buf_len; /**< Length of segment buffer. */ > uint16_t data_off; > - uint16_t data_len; /**< Amount of data in segment buffer. */ > - uint32_t pkt_len; /**< Total pkt len: sum of all segments. */ >=20 > #ifdef RTE_MBUF_REFCNT > /** > @@ -142,14 +138,17 @@ struct rte_mbuf { > #else > uint16_t refcnt_reserved; /**< Do not use this field */ > #endif > - uint16_t reserved; /**< Unused field. Required for padding > */ > - uint16_t ol_flags; /**< Offload features. */ > - > - /* these fields are valid for first segment only */ > uint8_t nb_segs; /**< Number of segments. */ > uint8_t port; /**< Input port. */ >=20 > - /* offload features, valid for first segment only */ > + uint16_t ol_flags; /**< Offload features. */ > + uint16_t reserved0; /**< Unused field. Required for padding */ > + uint32_t reserved1; /**< Unused field. Required for padding */ > + > + /* remaining bytes are set on RX when pulling packet from descriptor */ > + uint16_t reserved2; /**< Unused field. Required for padding */ > + uint16_t data_len; /**< Amount of data in segment buffer. */ > + uint32_t pkt_len; /**< Total pkt len: sum of all segments. */ > union { > uint16_t l2_l3_len; /**< combined l2/l3 lengths as single var */ > struct { > @@ -167,6 +166,10 @@ struct rte_mbuf { > uint32_t sched; /**< Hierarchical scheduler */ > } hash; /**< hash information */ >=20 > + /* fields only used in slow path or on TX */ > + struct rte_mempool *pool; /**< Pool from which mbuf was allocated. */ > + struct rte_mbuf *next; /**< Next segment of scattered packet. */ > + > union { > uint8_t metadata[0]; > uint16_t metadata16[0]; > -- > 1.9.3 It seems that you removed the inner_l3_len and inner_l2_len fields from the= rte_mbuf.h structure, what is the reason? /Jijiang Liu=20