[v4,1/2] ethdev: add level support for RSS offload types

Message ID 20200818103145.2192371-1-kirankumark@marvell.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series [v4,1/2] ethdev: add level support for RSS offload types |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Kiran Kumar Kokkilagadda Aug. 18, 2020, 10:31 a.m. UTC
  From: Kiran Kumar K <kirankumark@marvell.com>

This patch reserves 2 bits as input selection to select Inner and
outer layers for RSS computation. It is combined with existing
ETH_RSS_* to choose Inner or outer layers for L2, L3 and L4.
This functionality already exists in rte_flow through level parameter in
RSS action configuration rte_flow_action_rss.

Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
---
 app/test-pmd/parameters.c      |  6 ++++++
 lib/librte_ethdev/rte_ethdev.h | 27 +++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)
  

Comments

Guo, Jia Aug. 18, 2020, 10:52 a.m. UTC | #1
hi, kiran

On 8/18/2020 6:31 PM, kirankumark@marvell.com wrote:
> From: Kiran Kumar K <kirankumark@marvell.com>
>
> This patch reserves 2 bits as input selection to select Inner and
> outer layers for RSS computation. It is combined with existing
> ETH_RSS_* to choose Inner or outer layers for L2, L3 and L4.
> This functionality already exists in rte_flow through level parameter in
> RSS action configuration rte_flow_action_rss.
>
> Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
> ---
>   app/test-pmd/parameters.c      |  6 ++++++
>   lib/librte_ethdev/rte_ethdev.h | 27 +++++++++++++++++++++++++++
>   2 files changed, 33 insertions(+)
>
> diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
> index 7cb0e3d6e..5f669ff24 100644
> --- a/app/test-pmd/parameters.c
> +++ b/app/test-pmd/parameters.c
> @@ -632,6 +632,8 @@ launch_args_parse(int argc, char** argv)
>   		{ "forward-mode",               1, 0, 0 },
>   		{ "rss-ip",			0, 0, 0 },
>   		{ "rss-udp",			0, 0, 0 },
> +		{ "rss-outer",			0, 0, 0 },
> +		{ "rss-inner-outer",		0, 0, 0 },
>   		{ "rxq",			1, 0, 0 },
>   		{ "txq",			1, 0, 0 },
>   		{ "rxd",			1, 0, 0 },
> @@ -1051,6 +1053,10 @@ launch_args_parse(int argc, char** argv)
>   				rss_hf = ETH_RSS_IP;
>   			if (!strcmp(lgopts[opt_idx].name, "rss-udp"))
>   				rss_hf = ETH_RSS_UDP;
> +			if (!strcmp(lgopts[opt_idx].name, "rss-outer"))
> +				rss_hf |= ETH_RSS_LEVEL_OUTER;
> +			if (!strcmp(lgopts[opt_idx].name, "rss-inner-outer"))
> +				rss_hf |= ETH_RSS_LEVEL_INNER_OUTER;
>   			if (!strcmp(lgopts[opt_idx].name, "rxq")) {
>   				n = atoi(optarg);
>   				if (n >= 0 && check_nb_rxq((queueid_t)n) == 0)
> diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> index d29930fd8..28184cc85 100644
> --- a/lib/librte_ethdev/rte_ethdev.h
> +++ b/lib/librte_ethdev/rte_ethdev.h
> @@ -552,6 +552,33 @@ struct rte_eth_rss_conf {
>   #define RTE_ETH_RSS_L3_PRE64	   (1ULL << 53)
>   #define RTE_ETH_RSS_L3_PRE96	   (1ULL << 52)
>   
> +/*
> + * We use the following macros to combine with the above layers to choose
> + * inner and outer layers or both for RSS computation.
> + * Note: Default is 0: inner layers, 1: outer layers, 2: both
> + * bit 50 and 51 are reserved for this.


Why not define outermost layer to 0, and the inner layer is on the same 
direction to increase?

Do you think it would be good to default set outer hash?


> + */
> +
> +/**
> + * Level 0, It basically stands for the innermost encapsulation level RSS
> + * can be performed on according to PMD and device capabilities.
> + */
> +#define ETH_RSS_LEVEL_INNER        (0ULL << 50)
> +/**
> + * Level 1, It basically stands for the outermost encapsulation level RSS
> + * can be performed on according to PMD and device capabilities.
> + */
> +#define ETH_RSS_LEVEL_OUTER        (1ULL << 50)
> +/**
> + * Level 2, It basically stands for the both inner and outermost
> + * encapsulation level RSS can be performed on according to PMD and
> + * device capabilities.
> + */
> +#define ETH_RSS_LEVEL_INNER_OUTER  (2ULL << 50)
> +#define ETH_RSS_LEVEL_MASK	   (3ULL << 50)
> +
> +#define ETH_RSS_LEVEL(rss_hf) ((rss_hf & ETH_RSS_LEVEL_MASK) >> 50)
> +
>   /**
>    * For input set change of hash filter, if SRC_ONLY and DST_ONLY of
>    * the same level are used simultaneously, it is the same case as
  
Kiran Kumar Kokkilagadda Aug. 18, 2020, 11:43 a.m. UTC | #2
Hi Jeff,


> -----Original Message-----
> From: Jeff Guo <jia.guo@intel.com>
> Sent: Tuesday, August 18, 2020 4:22 PM
> To: Kiran Kumar Kokkilagadda <kirankumark@marvell.com>; Wenzhuo Lu
> <wenzhuo.lu@intel.com>; Beilei Xing <beilei.xing@intel.com>; Bernard
> Iremonger <bernard.iremonger@intel.com>; Thomas Monjalon
> <thomas@monjalon.net>; Ferruh Yigit <ferruh.yigit@intel.com>; Andrew
> Rybchenko <arybchenko@solarflare.com>
> Cc: dev@dpdk.org; Jerin Jacob Kollanukkaran <jerinj@marvell.com>;
> orika@mellanox.com; xuanziyang2@huawei.com;
> cloud.wangxiaoyun@huawei.com; zhouguoyang@huawei.com;
> rosen.xu@intel.com; Rasesh Mody <rmody@marvell.com>; Shahed Shaikh
> <shshaikh@marvell.com>; Nithin Kumar Dabilpuram
> <ndabilpuram@marvell.com>; qiming.yang@intel.com; qi.z.zhang@intel.com;
> keith.wiles@intel.com; hemant.agrawal@nxp.com; sachin.saxena@nxp.com;
> wei.zhao1@intel.com; johndale@cisco.com; hyonkim@cisco.com;
> chas3@att.com; matan@mellanox.com; shahafs@mellanox.com;
> viacheslavo@mellanox.com; rahul.lakkireddy@chelsio.com; grive@u256.net;
> Liron Himi <lironh@marvell.com>; jingjing.wu@intel.com;
> xavier.huwei@huawei.com; humin29@huawei.com;
> yisen.zhuang@huawei.com; ajit.khaparde@broadcom.com;
> somnath.kotur@broadcom.com; jasvinder.singh@intel.com;
> cristian.dumitrescu@intel.com
> Subject: [EXT] Re: [dpdk-dev][PATCH v4 1/2] ethdev: add level support for RSS
> offload types
> 
> External Email
> 
> ----------------------------------------------------------------------
> hi, kiran
> 
> On 8/18/2020 6:31 PM, kirankumark@marvell.com wrote:
> > From: Kiran Kumar K <kirankumark@marvell.com>
> >
> > This patch reserves 2 bits as input selection to select Inner and
> > outer layers for RSS computation. It is combined with existing
> > ETH_RSS_* to choose Inner or outer layers for L2, L3 and L4.
> > This functionality already exists in rte_flow through level parameter
> > in RSS action configuration rte_flow_action_rss.
> >
> > Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
> > ---
> >   app/test-pmd/parameters.c      |  6 ++++++
> >   lib/librte_ethdev/rte_ethdev.h | 27 +++++++++++++++++++++++++++
> >   2 files changed, 33 insertions(+)
> >
> > diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
> > index 7cb0e3d6e..5f669ff24 100644
> > --- a/app/test-pmd/parameters.c
> > +++ b/app/test-pmd/parameters.c
> > @@ -632,6 +632,8 @@ launch_args_parse(int argc, char** argv)
> >   		{ "forward-mode",               1, 0, 0 },
> >   		{ "rss-ip",			0, 0, 0 },
> >   		{ "rss-udp",			0, 0, 0 },
> > +		{ "rss-outer",			0, 0, 0 },
> > +		{ "rss-inner-outer",		0, 0, 0 },
> >   		{ "rxq",			1, 0, 0 },
> >   		{ "txq",			1, 0, 0 },
> >   		{ "rxd",			1, 0, 0 },
> > @@ -1051,6 +1053,10 @@ launch_args_parse(int argc, char** argv)
> >   				rss_hf = ETH_RSS_IP;
> >   			if (!strcmp(lgopts[opt_idx].name, "rss-udp"))
> >   				rss_hf = ETH_RSS_UDP;
> > +			if (!strcmp(lgopts[opt_idx].name, "rss-outer"))
> > +				rss_hf |= ETH_RSS_LEVEL_OUTER;
> > +			if (!strcmp(lgopts[opt_idx].name, "rss-inner-outer"))
> > +				rss_hf |= ETH_RSS_LEVEL_INNER_OUTER;
> >   			if (!strcmp(lgopts[opt_idx].name, "rxq")) {
> >   				n = atoi(optarg);
> >   				if (n >= 0 && check_nb_rxq((queueid_t)n) == 0)
> diff --git
> > a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
> > index d29930fd8..28184cc85 100644
> > --- a/lib/librte_ethdev/rte_ethdev.h
> > +++ b/lib/librte_ethdev/rte_ethdev.h
> > @@ -552,6 +552,33 @@ struct rte_eth_rss_conf {
> >   #define RTE_ETH_RSS_L3_PRE64	   (1ULL << 53)
> >   #define RTE_ETH_RSS_L3_PRE96	   (1ULL << 52)
> >
> > +/*
> > + * We use the following macros to combine with the above layers to
> > +choose
> > + * inner and outer layers or both for RSS computation.
> > + * Note: Default is 0: inner layers, 1: outer layers, 2: both
> > + * bit 50 and 51 are reserved for this.
> 
> 
> Why not define outermost layer to 0, and the inner layer is on the same
> direction to increase?
> 
> Do you think it would be good to default set outer hash?
> 

Added Inner as default to keep it in sync with rte_flow_rss_action level.
* - @p 0 requests the default behavior. Depending on the packet
	 *   type, it can mean outermost, innermost, anything in between or
	 *   even no RSS.
	 *
	 *   It basically stands for the innermost encapsulation level RSS
	 *   can be performed on according to PMD and device capabilities.
	 *
	 * - @p 1 requests RSS to be performed on the outermost packet
	 *   encapsulation level.
	 *
	 * - @p 2 and subsequent values request RSS to be performed on the
	 *   specified inner packet encapsulation level, from outermost to
	 *   innermost (lower to higher values).
	 *

> 
> > + */
> > +
> > +/**
> > + * Level 0, It basically stands for the innermost encapsulation level
> > +RSS
> > + * can be performed on according to PMD and device capabilities.
> > + */
> > +#define ETH_RSS_LEVEL_INNER        (0ULL << 50)
> > +/**
> > + * Level 1, It basically stands for the outermost encapsulation level
> > +RSS
> > + * can be performed on according to PMD and device capabilities.
> > + */
> > +#define ETH_RSS_LEVEL_OUTER        (1ULL << 50)
> > +/**
> > + * Level 2, It basically stands for the both inner and outermost
> > + * encapsulation level RSS can be performed on according to PMD and
> > + * device capabilities.
> > + */
> > +#define ETH_RSS_LEVEL_INNER_OUTER  (2ULL << 50)
> > +#define ETH_RSS_LEVEL_MASK	   (3ULL << 50)
> > +
> > +#define ETH_RSS_LEVEL(rss_hf) ((rss_hf & ETH_RSS_LEVEL_MASK) >> 50)
> > +
> >   /**
> >    * For input set change of hash filter, if SRC_ONLY and DST_ONLY of
> >    * the same level are used simultaneously, it is the same case as
  

Patch

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 7cb0e3d6e..5f669ff24 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -632,6 +632,8 @@  launch_args_parse(int argc, char** argv)
 		{ "forward-mode",               1, 0, 0 },
 		{ "rss-ip",			0, 0, 0 },
 		{ "rss-udp",			0, 0, 0 },
+		{ "rss-outer",			0, 0, 0 },
+		{ "rss-inner-outer",		0, 0, 0 },
 		{ "rxq",			1, 0, 0 },
 		{ "txq",			1, 0, 0 },
 		{ "rxd",			1, 0, 0 },
@@ -1051,6 +1053,10 @@  launch_args_parse(int argc, char** argv)
 				rss_hf = ETH_RSS_IP;
 			if (!strcmp(lgopts[opt_idx].name, "rss-udp"))
 				rss_hf = ETH_RSS_UDP;
+			if (!strcmp(lgopts[opt_idx].name, "rss-outer"))
+				rss_hf |= ETH_RSS_LEVEL_OUTER;
+			if (!strcmp(lgopts[opt_idx].name, "rss-inner-outer"))
+				rss_hf |= ETH_RSS_LEVEL_INNER_OUTER;
 			if (!strcmp(lgopts[opt_idx].name, "rxq")) {
 				n = atoi(optarg);
 				if (n >= 0 && check_nb_rxq((queueid_t)n) == 0)
diff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h
index d29930fd8..28184cc85 100644
--- a/lib/librte_ethdev/rte_ethdev.h
+++ b/lib/librte_ethdev/rte_ethdev.h
@@ -552,6 +552,33 @@  struct rte_eth_rss_conf {
 #define RTE_ETH_RSS_L3_PRE64	   (1ULL << 53)
 #define RTE_ETH_RSS_L3_PRE96	   (1ULL << 52)
 
+/*
+ * We use the following macros to combine with the above layers to choose
+ * inner and outer layers or both for RSS computation.
+ * Note: Default is 0: inner layers, 1: outer layers, 2: both
+ * bit 50 and 51 are reserved for this.
+ */
+
+/**
+ * Level 0, It basically stands for the innermost encapsulation level RSS
+ * can be performed on according to PMD and device capabilities.
+ */
+#define ETH_RSS_LEVEL_INNER        (0ULL << 50)
+/**
+ * Level 1, It basically stands for the outermost encapsulation level RSS
+ * can be performed on according to PMD and device capabilities.
+ */
+#define ETH_RSS_LEVEL_OUTER        (1ULL << 50)
+/**
+ * Level 2, It basically stands for the both inner and outermost
+ * encapsulation level RSS can be performed on according to PMD and
+ * device capabilities.
+ */
+#define ETH_RSS_LEVEL_INNER_OUTER  (2ULL << 50)
+#define ETH_RSS_LEVEL_MASK	   (3ULL << 50)
+
+#define ETH_RSS_LEVEL(rss_hf) ((rss_hf & ETH_RSS_LEVEL_MASK) >> 50)
+
 /**
  * For input set change of hash filter, if SRC_ONLY and DST_ONLY of
  * the same level are used simultaneously, it is the same case as