mbox series

[v5,0/5] Predictable RSS feature

Message ID 1618847995-91229-1-git-send-email-vladimir.medvedkin@intel.com (mailing list archive)
Headers
Series Predictable RSS feature |

Message

Vladimir Medvedkin April 19, 2021, 3:59 p.m. UTC
  This patch series introduces predictable RSS feature.
It is based on the idea of searching for partial hash collisions
within Toeplitz hash.

The Toeplitz hash function is a homomorphism between (G, ^) and (H, ^),
where (G, ^) - is a group of tuples and (H, ^) is a group of hashes
with respect to XOR operation. So tuples and hashes could be treated as
n-dimension and 32-dimension vector spaces over GF(2).
So, f(x ^ y) == f(x) ^ f(y)
where f - is the toeplitz hash function and x, y are tuples.

The ability to predict partial collisions allows user to compute
input hash value with desired LSB values.
Usually number of LSB's are defined by the size of RSS Redirection Table.

There could be number of use cases, for example:
1) NAT. Using this library it is possible to select a new port number
on a translation in the way that rss hash for original tuple will have
the same LSB's as rss hash for reverse tuple.
2) IPSec/MPLS/Vxlan. It is possible to choose tunnel id to be pinned to
a desired queue.
3) TCP stack. It is possible to choose a source port number for outgoing
connections in the way that received replies will be assigned to
desired queue.
4) RSS hash key generation. Hash key initialization with random values
does not guarantee an uniform distribution amongst queues. This library
uses mathematically proved algorithm to complete the rss hash key to
provide the best distribution.

v5:
- added documentation
- added release notes
- added logging

v4:
- RETA_SZ macros were moved to .h
- fixed typos

v3:
- reworked rte_thash_adjust_tuple()
- added extra comments
- fixed typos
- rte_thash_adjust_tuple() API was putted into the first commit

v2:
- added extra API rte_thash_adjust_tuple()
- added extra tests for rte_thash_adjust_tuple()
- added extra fields to rte_thash_subtuple_helper struct
- fixed typos

Vladimir Medvedkin (5):
  hash: add predictable RSS API
  hash: add predictable RSS implementation
  test/hash: add additional thash tests
  doc: add thash documentation
  maintainers: claim maintainership of the hash library

 MAINTAINERS                                      |    2 +
 app/test/test_thash.c                            |  469 ++++++-
 doc/guides/prog_guide/img/predictable_snat_1.svg | 1444 +++++++++++++++++++++
 doc/guides/prog_guide/img/predictable_snat_2.svg | 1444 +++++++++++++++++++++
 doc/guides/prog_guide/img/rss_queue_assign.svg   | 1454 ++++++++++++++++++++++
 doc/guides/prog_guide/index.rst                  |    1 +
 doc/guides/prog_guide/toeplitz_hash_lib.rst      |  289 +++++
 doc/guides/rel_notes/release_21_05.rst           |    6 +
 lib/librte_hash/meson.build                      |    3 +-
 lib/librte_hash/rte_thash.c                      |  682 ++++++++++
 lib/librte_hash/rte_thash.h                      |  199 +++
 lib/librte_hash/version.map                      |    8 +
 12 files changed, 5994 insertions(+), 7 deletions(-)
 create mode 100644 doc/guides/prog_guide/img/predictable_snat_1.svg
 create mode 100644 doc/guides/prog_guide/img/predictable_snat_2.svg
 create mode 100644 doc/guides/prog_guide/img/rss_queue_assign.svg
 create mode 100644 doc/guides/prog_guide/toeplitz_hash_lib.rst
 create mode 100644 lib/librte_hash/rte_thash.c
  

Comments

Thomas Monjalon April 20, 2021, 9:31 p.m. UTC | #1
19/04/2021 17:59, Vladimir Medvedkin:
> Vladimir Medvedkin (5):
>   hash: add predictable RSS API
>   hash: add predictable RSS implementation
>   test/hash: add additional thash tests
>   doc: add thash documentation
>   maintainers: claim maintainership of the hash library

I kept the doc of the old feature in a separate patch.
The rest is squashed.
I've fixed more details like sorting in .map, experimental banner, etc.

Applied