mbox series

[RFC,00/12] mptcp: multiple xmit substreams support

Message ID cover.1596216310.git.pabeni@redhat.com
Headers show
Series mptcp: multiple xmit substreams support | expand

Message

Paolo Abeni July 31, 2020, 5:39 p.m. UTC
This is an early RFC to gather feedback and comments on the current status.

Needs the bugfix patch I sent before to avoid exploding badly on the first
packet - can still explode after a few ones.

It refactor send space notifications, introduces OoO handling via RBtree,
sndbuf autotuning, allows the PM to create non backup subflows and finally
a basic scheduler and some self-tests.

The pain point is the in-window check:

on the receiver side msk rcv window is set at tcp_space(msk) - which should be
a quite rough over-estimante of a more correct value.

on the sender side no limit is imposed on the xmitted sequence number, except
the one given by the sndbuf. The msk sndbuf is autotuned to the subflows
largest sndbuf size.

With all the above I observe several out of [MPTCP] window on the RX side, to
the point that if affects the bandwidth (self-tests fail, as they basically
looks at virtual link utilization).

Any comment more than welcome, especially about better mptcp window checks.

This has been quite painful, so I would propose to consider accepting on
export branch even a suboptimal version and then improve incrementally.

Paolo Abeni (12):
  mptcp: msk is writable according to msk write space
  mptcp: set data_ready status bit in subflow_check_data_avail()
  mptcp: trigger msk processing even for OoO data
  mptcp: basic sndbuf autotuning
  mptcp: introduce and use mptcp_try_coalesce()
  mptcp: move ooo skbs into msk out of order queue.
  mptcp: cleanup mptcp_subflow_discard_data()
  mptcp: add OoO related mibs
  mptcp: move address attribute into mptcp_addr_info
  mptcp: allow creating non-backup subflows
  mptcp: allow picking different xmit subflows
  mptcp: simult flow self-tests

 net/mptcp/mib.c                               |   5 +
 net/mptcp/mib.h                               |   5 +
 net/mptcp/pm_netlink.c                        |  38 +-
 net/mptcp/protocol.c                          | 459 ++++++++++++++----
 net/mptcp/protocol.h                          |  18 +-
 net/mptcp/subflow.c                           |  91 ++--
 .../selftests/net/mptcp/simult_flows.sh       | 290 +++++++++++
 7 files changed, 743 insertions(+), 163 deletions(-)
 create mode 100755 tools/testing/selftests/net/mptcp/simult_flows.sh

Comments

Florian Westphal Aug. 2, 2020, 12:14 a.m. UTC | #1
Paolo Abeni <pabeni@redhat.com> wrote:
> The pain point is the in-window check:
> 
> on the receiver side msk rcv window is set at tcp_space(msk) - which should be
> a quite rough over-estimante of a more correct value.

Can you elaborate?

> on the sender side no limit is imposed on the xmitted sequence number, except
> the one given by the sndbuf. The msk sndbuf is autotuned to the subflows
> largest sndbuf size.

Yes, I agree the amount of data we can send should be capped by the last
dss-rwin we saw as well, which we don't track ATM.

But this can be added later, sndbuf alone is good enough for the
initial step i think.