Subject: Re: [RFC PATCH net-next 1/3] net: ethtool: add symmetric Toeplitz RSS hash function

From: Saeed Mahameed <[email-masked]>
Date: Wed, 23 Aug 2023 12:45:17 -0700

On 23 Aug 10:48, Ahmed Zaki wrote:
>Symmetric RSS hash functions are beneficial in applications that monitor
>both Tx and Rx packets of the same flow (IDS, software firewalls, ..etc).
>Getting all traffic of the same flow on the same RX queue results in
>higher CPU cache efficiency.
>

Can you please shed more light on the use case and configuration? 
Where do you expect the same flow/connection rx/tx to be received by the
same rxq in a nic driver?

>Allow ethtool to support symmetric Toeplitz algorithm. A user can set the
>RSS function of the netdevice via:
>    # ethtool -X eth0 hfunc symmetric_toeplitz
>

What is the expectation of the symmetric toeplitz hash, how do you achieve
that? by sorting packet fields? which fields?

Can you please provide a link to documentation/spec?
We should make sure all vendors agree on implementation and expectation of
the symmetric hash function.

>Signed-off-by: Ahmed Zaki <[email-masked]>
>---
> include/linux/ethtool.h | 4 +++-
> net/ethtool/common.c    | 1 +
> 2 files changed, 4 insertions(+), 1 deletion(-)
>
>diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
>index 62b61527bcc4..9a8e1fb7170d 100644
>--- a/include/linux/ethtool.h
>+++ b/include/linux/ethtool.h
>@@ -60,10 +60,11 @@ enum {
> 	ETH_RSS_HASH_TOP_BIT, /* Configurable RSS hash function - Toeplitz */
> 	ETH_RSS_HASH_XOR_BIT, /* Configurable RSS hash function - Xor */
> 	ETH_RSS_HASH_CRC32_BIT, /* Configurable RSS hash function - Crc32 */
>+	ETH_RSS_HASH_SYM_TOP_BIT, /* Configurable RSS hash function - Symmetric Toeplitz */
>
> 	/*
> 	 * Add your fresh new hash function bits above and remember to update
>-	 * rss_hash_func_strings[] in ethtool.c
>+	 * rss_hash_func_strings[] in ethtool/common.c
> 	 */
> 	ETH_RSS_HASH_FUNCS_COUNT
> };
>@@ -108,6 +109,7 @@ enum ethtool_supported_ring_param {
> #define __ETH_RSS_HASH(name)	__ETH_RSS_HASH_BIT(ETH_RSS_HASH_##name##_BIT)
>
> #define ETH_RSS_HASH_TOP	__ETH_RSS_HASH(TOP)
>+#define ETH_RSS_HASH_SYM_TOP	__ETH_RSS_HASH(SYM_TOP)
> #define ETH_RSS_HASH_XOR	__ETH_RSS_HASH(XOR)
> #define ETH_RSS_HASH_CRC32	__ETH_RSS_HASH(CRC32)
>
>diff --git a/net/ethtool/common.c b/net/ethtool/common.c
>index f5598c5f50de..a0e0c6b2980e 100644
>--- a/net/ethtool/common.c
>+++ b/net/ethtool/common.c
>@@ -81,6 +81,7 @@ rss_hash_func_strings[ETH_RSS_HASH_FUNCS_COUNT][ETH_GSTRING_LEN] = {
> 	[ETH_RSS_HASH_TOP_BIT] =	"toeplitz",
> 	[ETH_RSS_HASH_XOR_BIT] =	"xor",
> 	[ETH_RSS_HASH_CRC32_BIT] =	"crc32",
>+	[ETH_RSS_HASH_SYM_TOP_BIT] =	"symmetric_toeplitz",
> };
>
> const char
>-- 
>2.39.2
>
>