DPDK patches and discussions
 help / color / mirror / Atom feed
From: "Shaw, Jeffrey B" <jeffrey.b.shaw@intel.com>
To: Olivier Matz <olivier.matz@6wind.com>, "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH RFC 05/11] mbuf: merge physaddr and buf_len in a	bitfield
Date: Fri, 9 May 2014 15:39:42 +0000	[thread overview]
Message-ID: <4032A54B6BB5F04B8C08B6CFF08C59285542081E@FMSMSX103.amr.corp.intel.com> (raw)
In-Reply-To: <1399647038-15095-6-git-send-email-olivier.matz@6wind.com>

Hello Olivier, have you tested this patch to see if there is a negative impact to performance?
Wouldn't the processor have to mask the high bytes of the physical address when it is used, for example, to populate descriptors with buffer addresses?  When compute bound, this could steal CPU cycles away from packet processing.  I think we should understand the performance trade-off in order to save these 2 bytes.

It would be interesting to see how throughput is impacted when the workload is core-bound.  This could be accomplished by running testpmd in io-fwd mode across 4x 10G ports.

Thanks,
Jeff

-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Olivier Matz
Sent: Friday, May 09, 2014 7:51 AM
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH RFC 05/11] mbuf: merge physaddr and buf_len in a bitfield

The physical address is never greater than (1 << 48) = 256 TB.
We can win 2 bytes in the mbuf structure by merging the physical address and the buffer length in the same bitfield.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
---
 lib/librte_mbuf/rte_mbuf.c | 3 ++-
 lib/librte_mbuf/rte_mbuf.h | 7 ++++---
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c index c229525..9879095 100644
--- a/lib/librte_mbuf/rte_mbuf.c
+++ b/lib/librte_mbuf/rte_mbuf.c
@@ -104,7 +104,8 @@ rte_pktmbuf_init(struct rte_mempool *mp,
 	m->buf_len = (uint16_t)buf_len;
 
 	/* keep some headroom between start of buffer and data */
-	m->data = (char*) m->buf_addr + RTE_MIN(RTE_PKTMBUF_HEADROOM, m->buf_len);
+	m->data = (char*) m->buf_addr + RTE_MIN(RTE_PKTMBUF_HEADROOM,
+		(uint16_t)m->buf_len);
 
 	/* init some constant fields */
 	m->pool = mp;
diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index 803b223..275f6b2 100644
--- a/lib/librte_mbuf/rte_mbuf.h
+++ b/lib/librte_mbuf/rte_mbuf.h
@@ -130,8 +130,8 @@ union rte_vlan_macip {  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. */
+	uint64_t buf_physaddr:48; /**< Physical address of segment buffer. */
+	uint64_t buf_len:16;      /**< Length of segment buffer. */
 #ifdef RTE_MBUF_REFCNT
 	/**
 	 * 16-bit Reference counter.
@@ -148,8 +148,9 @@ 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. */
+	uint32_t reserved;             /**< Unused field. Required for padding. */
 
 	/* valid for any segment */
 	struct rte_mbuf *next;  /**< Next segment of scattered packet. */
--
1.9.2

  reply	other threads:[~2014-05-09 15:39 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-09 14:50 [dpdk-dev] [PATCH RFC 00/11] ixgbe/mbuf: add TSO support Olivier Matz
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 01/11] igb/ixgbe: fix IP checksum calculation Olivier Matz
2014-05-15 10:40   ` Ananyev, Konstantin
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 02/11] mbuf: rename RTE_MBUF_SCATTER_GATHER into RTE_MBUF_REFCNT Olivier Matz
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 03/11] mbuf: remove rte_ctrlmbuf Olivier Matz
2014-05-25 21:39   ` Gilmore, Walter E
2014-05-26 12:23     ` Olivier MATZ
2014-05-26 16:40     ` Dumitrescu, Cristian
2014-05-26 22:43     ` Neil Horman
2014-05-27  0:17   ` Stephen Hemminger
2014-05-28  9:45     ` Ananyev, Konstantin
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 04/11] mbuf: remove the rte_pktmbuf structure Olivier Matz
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 05/11] mbuf: merge physaddr and buf_len in a bitfield Olivier Matz
2014-05-09 15:39   ` Shaw, Jeffrey B [this message]
2014-05-09 16:06     ` Olivier MATZ
2014-05-09 16:11       ` Shaw, Jeffrey B
2014-05-14 14:07         ` Ananyev, Konstantin
2014-05-15  9:53           ` Olivier MATZ
2014-05-19  7:27         ` Olivier MATZ
2014-05-19  8:25           ` Richardson, Bruce
2014-05-19  9:30             ` Olivier MATZ
2014-05-19  9:57               ` Richardson, Bruce
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 06/11] mbuf: replace data pointer by an offset Olivier Matz
2014-05-12 14:12   ` Thomas Monjalon
2014-05-12 14:36     ` Venkatesan, Venky
2014-05-12 14:41       ` Neil Horman
2014-05-12 15:07         ` Olivier MATZ
2014-05-12 15:59           ` Stephen Hemminger
2014-05-12 16:13             ` Olivier MATZ
2014-05-12 17:13               ` Stephen Hemminger
2014-05-13 13:29                 ` Olivier MATZ
2014-05-12 16:06           ` Venkatesan, Venky
2014-05-12 18:39             ` Neil Horman
2014-05-13 13:54               ` Venkatesan, Venky
2014-05-13 14:09                 ` Thomas Monjalon
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 07/11] mbuf: add functions to get the name of an ol_flag Olivier Matz
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 08/11] mbuf: change ol_flags to 32 bits Olivier Matz
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 09/11] mbuf: rename vlan_macip_len in hw_offload and increase its size Olivier Matz
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 10/11] testpmd: modify source address to validate checksum calculation Olivier Matz
2014-05-09 14:50 ` [dpdk-dev] [PATCH RFC 11/11] ixgbe/mbuf: add TSO support Olivier Matz
2014-05-12 14:30   ` Thomas Monjalon
2014-05-15 15:09   ` Ananyev, Konstantin
2014-05-15 15:39     ` Olivier MATZ
2014-05-15 16:30       ` Ananyev, Konstantin
2014-05-16 12:11         ` Olivier MATZ
2014-05-16 17:01           ` Ananyev, Konstantin
2014-05-19 12:32             ` Thomas Monjalon
2014-05-09 17:04 ` [dpdk-dev] [PATCH RFC 00/11] " Stephen Hemminger
2014-05-09 21:49   ` Olivier MATZ
2014-05-10  0:39     ` Stephen Hemminger
2014-05-19 12:47 ` Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4032A54B6BB5F04B8C08B6CFF08C59285542081E@FMSMSX103.amr.corp.intel.com \
    --to=jeffrey.b.shaw@intel.com \
    --cc=dev@dpdk.org \
    --cc=olivier.matz@6wind.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).