The issues are outlined in this paper: http://www.ndsl.kaist.edu/~shinae/papers/TR-symRSS.pdf
> On Dec 17, 2014, at 7:28 PM, Kamraan Nasim <knasim at sidebandnetworks.com> > wrote: > > Hi DPDK community, > > Any better RSS hash keys out there? > > --Kam > > On Wed, Dec 17, 2014 at 2:12 PM, Kamraan Nasim <knasim at > sidebandnetworks.com> > wrote: >> >> Thank you Jeriel. 0x00 0x01 works and I can get bi-directional symmetry >> but you are right, it compromises the packet distribution. I am seeing >> vastly different 5 tuples hashed with the same value. >> >> Will let you know if I find a better alternative. >> >> --Kam >> >> On Tue, Dec 16, 2014 at 5:17 PM, Jeriel Smith <sjeriel2 at gmail.com> wrote: >>> >>> Hi Kamraan, >>> Even i noticed it with "0x6d5a". Currently, I use a continuous >>> pattern of "0x00 0x01" which helps in getting a symmetrical hashing. But, >>> the packet spraying is not that good as "0x6d5a". Please let me know if you >>> find a alternative. >>> Thanks, >>> Jeriel >>> >>> >>>> ---------- Forwarded message ---------- >>>> From: Kamraan Nasim <knasim at sidebandnetworks.com> >>>> Date: Tue, Dec 16, 2014 at 11:52 AM >>>> Subject: [dpdk-dev] Symmetric RSS Hashing in DPDK >>>> To: dev at dpdk.org >>>> Cc: Steve Noble <snoble at sidebandnetworks.com>, Jun Du < >>>> jdu at sidebandnetworks.com>, Ashish Juneja <ajuneja at >>>> sidebandnetworks.com> >>>> >>>> Hello, >>>> >>>> My DPDK application requires bidirectional TCP flows to have the same RSS >>>> hash however default RSS hashing is *asymmetric*. >>>> >>>> >>>> There are posts such as: >>>> http://dpdk.info/ml/archives/dev/2014-February/001460.html >>>> >>>> which point to a symmetric RSS key(0x6d5a). I have tried using it but it >>>> is >>>> still hashing bi-directional flows separately. I am using an 82599 NIC. >>>> >>>> Have others come across this? What other options are available(I presume >>>> S/W hashing)? >>>> >>>> Appreciate any help I can get on this :) >>>> >>>> #define RSS_HASH_KEY_LENGTH 40 >>>> static uint8_t hash_key[RSS_HASH_KEY_LENGTH] = { >>>> 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, >>>> 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, >>>> 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, >>>> 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, >>>> 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, 0x6D, 0x5A, >>>> }; >>>> // ethernet rx config >>>> static struct rte_eth_conf port_conf = { >>>> .rxmode = { >>>> .mq_mode = ETH_MQ_RX_RSS, >>>> .split_hdr_size = 0, >>>> .header_split = 0, /**< Header Split disabled */ >>>> .hw_ip_checksum = 1, /**< IP checksum offload enabled */ >>>> .hw_vlan_filter = 0, /**< VLAN filtering disabled */ >>>> .jumbo_frame = 0, /**< Jumbo Frame Support disabled */ >>>> .hw_strip_crc = 0, /**< CRC stripped by hardware */ >>>> }, >>>> .rx_adv_conf = { >>>> .rss_conf = { >>>> .rss_key = hash_key, >>>> .rss_hf = ETH_RSS_PROTO_MASK, >>>> }, >>>> }, >>>> .txmode = { >>>> .mq_mode = ETH_MQ_TX_NONE, >>>> }, >>>> }; >>>> >>>> >>>> Thanks, >>>> Kam >>>> >>>