On Fri, 26 Jun 2020, Paolo Abeni wrote:
Replace the radix tree with a hash table allocated
at boot time. The radix tree has some shortcoming:
a single lock is contented by all the mptcp operation,
the lookup currently use such lock, and traversing
all the items would require a lock, too.
With hash table instead we trade a little memory to
address all the above - a per bucket lock is used.
To hash the MPTCP sockets, we re-use the msk' sk_node
entry: the MPTCP sockets are never hashed by the stack.
Replace the existing hash proto callbacks with a dummy
implementation, annotating the above constraint.
Additionally refactor the token creation to code to:
- limit the number of consecutive attempts to a fixed
maximum. Hitting a hash bucket with a long chain is
considered a failed attempt
- accept() no longer can fail to token management.
- if token creation fails at connect() time, we do
fallback to TCP (before the connection was closed)
v1 -> v2:
- fix "no newline at end of file" - Jakub
Signed-off-by: Paolo Abeni <pab...@redhat.com>
---
net/mptcp/protocol.c | 45 ++++---
net/mptcp/protocol.h | 14 ++-
net/mptcp/subflow.c | 19 ++-
net/mptcp/token.c | 271 ++++++++++++++++++++++++++++++-------------
4 files changed, 236 insertions(+), 113 deletions(-)
Reviewed-by: Mat Martineau <mathew.j.martin...@linux.intel.com>
--
Mat Martineau
Intel