From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.tuxdriver.com (charlotte.tuxdriver.com [70.61.120.58]) by dpdk.org (Postfix) with ESMTP id EE5725953 for ; Mon, 11 May 2015 19:20:23 +0200 (CEST) Received: from hmsreliant.think-freely.org ([2001:470:8:a08:7aac:c0ff:fec2:933b] helo=localhost) by smtp.tuxdriver.com with esmtpsa (TLSv1:AES128-SHA:128) (Exim 4.63) (envelope-from ) id 1YrrNF-00028S-Du; Mon, 11 May 2015 13:20:22 -0400 Date: Mon, 11 May 2015 13:20:07 -0400 From: Neil Horman To: Stephen Hemminger Message-ID: <20150511172007.GC8310@hmsreliant.think-freely.org> References: <1431364071-27298-1-git-send-email-stephen@networkplumber.org> <1431364071-27298-3-git-send-email-stephen@networkplumber.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1431364071-27298-3-git-send-email-stephen@networkplumber.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-Spam-Score: -2.9 (--) X-Spam-Status: No Cc: dev@dpdk.org, Stephen Hemminger Subject: Re: [dpdk-dev] [PATCH 2/6] rte_sched: expand scheduler hierarchy for more VLAN's 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, 11 May 2015 17:20:24 -0000 On Mon, May 11, 2015 at 10:07:47AM -0700, Stephen Hemminger wrote: > From: Stephen Hemminger > > The QoS subport is limited to 8 bits in original code. > But customers demanded ability to support full number of VLAN's (4096) > therefore use the full part of the tag field of mbuf. > > Resize the pipe as well to allow for more pipes in future and > avoid expensive bitfield access. > > Signed-off-by: Stephen Hemminger > --- > lib/librte_mbuf/rte_mbuf.h | 5 ++++- > lib/librte_sched/rte_sched.h | 38 ++++++++++++++++++++++++-------------- > 2 files changed, 28 insertions(+), 15 deletions(-) > > diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h > index ab6de67..cc0658d 100644 > --- a/lib/librte_mbuf/rte_mbuf.h > +++ b/lib/librte_mbuf/rte_mbuf.h > @@ -295,7 +295,10 @@ struct rte_mbuf { > /**< First 4 flexible bytes or FD ID, dependent on > PKT_RX_FDIR_* flag in ol_flags. */ > } fdir; /**< Filter identifier if FDIR enabled */ > - uint32_t sched; /**< Hierarchical scheduler */ > + struct { > + uint32_t lo; > + uint32_t hi; > + } sched; /**< Hierarchical scheduler */ > uint32_t usr; /**< User defined tags. See rte_distributor_process() */ > } hash; /**< hash information */ > > diff --git a/lib/librte_sched/rte_sched.h b/lib/librte_sched/rte_sched.h > index e6bba22..bf5ef8d 100644 > --- a/lib/librte_sched/rte_sched.h > +++ b/lib/librte_sched/rte_sched.h > @@ -195,16 +195,20 @@ struct rte_sched_port_params { > #endif > }; > > -/** Path through the scheduler hierarchy used by the scheduler enqueue operation to > -identify the destination queue for the current packet. Stored in the field hash.sched > -of struct rte_mbuf of each packet, typically written by the classification stage and read by > -scheduler enqueue.*/ > +/* > + * Path through the scheduler hierarchy used by the scheduler enqueue > + * operation to identify the destination queue for the current > + * packet. Stored in the field pkt.hash.sched of struct rte_mbuf of > + * each packet, typically written by the classification stage and read > + * by scheduler enqueue. > + */ > struct rte_sched_port_hierarchy { > - uint32_t queue:2; /**< Queue ID (0 .. 3) */ > - uint32_t traffic_class:2; /**< Traffic class ID (0 .. 3)*/ > - uint32_t pipe:20; /**< Pipe ID */ > - uint32_t subport:6; /**< Subport ID */ > - uint32_t color:2; /**< Color */ > + uint16_t queue:2; /**< Queue ID (0 .. 3) */ > + uint16_t traffic_class:2; /**< Traffic class ID (0 .. 3)*/ > + uint16_t color:2; /**< Color */ > + uint16_t unused:10; > + uint16_t subport; /**< Subport ID */ > + uint32_t pipe; /**< Pipe ID */ > }; Have you run this through the ABI checker? Seems like this would alter lots of pointer offsets. Neil > > /* > @@ -350,12 +354,15 @@ rte_sched_queue_read_stats(struct rte_sched_port *port, > */ > static inline void > rte_sched_port_pkt_write(struct rte_mbuf *pkt, > - uint32_t subport, uint32_t pipe, uint32_t traffic_class, uint32_t queue, enum rte_meter_color color) > + uint32_t subport, uint32_t pipe, > + uint32_t traffic_class, > + uint32_t queue, enum rte_meter_color color) > { > - struct rte_sched_port_hierarchy *sched = (struct rte_sched_port_hierarchy *) &pkt->hash.sched; > + struct rte_sched_port_hierarchy *sched > + = (struct rte_sched_port_hierarchy *) &pkt->hash.sched; > > - sched->color = (uint32_t) color; > sched->subport = subport; > + sched->color = (uint32_t) color; > sched->pipe = pipe; > sched->traffic_class = traffic_class; > sched->queue = queue; > @@ -379,9 +386,12 @@ rte_sched_port_pkt_write(struct rte_mbuf *pkt, > * > */ > static inline void > -rte_sched_port_pkt_read_tree_path(struct rte_mbuf *pkt, uint32_t *subport, uint32_t *pipe, uint32_t *traffic_class, uint32_t *queue) > +rte_sched_port_pkt_read_tree_path(struct rte_mbuf *pkt, uint32_t *subport, > + uint32_t *pipe, uint32_t *traffic_class, > + uint32_t *queue) > { > - struct rte_sched_port_hierarchy *sched = (struct rte_sched_port_hierarchy *) &pkt->hash.sched; > + struct rte_sched_port_hierarchy *sched > + = (struct rte_sched_port_hierarchy *) &pkt->hash.sched; > > *subport = sched->subport; > *pipe = sched->pipe; > -- > 2.1.4 > >