From: Paolo Abeni <pabeni at redhat.com>
To: mptcp at lists.01.org
Subject: [MPTCP] [PRE-RFC 0/6] mptcp: implement retransmit infrastructure
Date: Fri, 16 Aug 2019 18:47:58 +0200 [thread overview]
Message-ID: <cover.1565970525.git.pabeni@redhat.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 2682 bytes --]
As suggested by the subj prefix, this is a very early draft, mainly to
discuss design decisions and/or architectural issues. This is only
compile-tested so far.
In the current status:
- updates the MPTCP unacked sequence number (patches 1-3) on sendmsg()
- also try to cope with 32 bit sequence number
- queue data (page frags) in MPTCP retransmission queue (patch 4)
- cleanup acked data from retransmission queue and schedule a timeout to
update MPTCP unacked sequence number (patch 5)
- do memory accounting for the MPTCP rtx queue (patch 6)
TODO:
- do retransmissions in timer handler, with some heuristic - e.g. last seq_una
update ts older than timeout*2 [1]
Open points:
- what about the current seq_una update schema (patch 2-3)? too much complex?
too much loose? too much generic?
- is it too early to plug any heuristic inside the code? (as done in patch 3)
- do we really need a timer to update the unacked sequence?
- we can avoid it with an additional atomic operation in
mptcp_incoming_options() - either using an atomic type for 'snd_una' or
use an additional spin lock to protect it (and possibly other fields)[2]
- still we will likely need a timer to detect that a subflow has become
unusable e.g. due to link down event on the peer side. Should we rely on
explicit MPTCP notification only (e.g. DEL_ADDR sub-option)?
- retransmission code needs to run in process context, as we will need to
acquire msk socket lock and ssh socket lock in order.
- As MPTCP-level retransmission should be considerably less frequent than
TCP-level retransmission-timeout, we could use/schedule a workqueue for
that.
Any kind of feedback more than welcome!
[1] After a better look at the current code, I see no issues in allocating the
sk_buff hdr at retransmission time - ensuring we do that in unblocking wait,
with GFP_ATOMIC, e.g. as tls_device_write_space() currently does.
[2] I choosed the current design to avoid such extra atomic operation: it
will happen on a contented cache-line, while processing each MPTCP ack.
Paolo Abeni (6):
mptcp: move before/after64 into the header file
mptcp: update per subflow unacked sequence on pkt reception
mptcp: update msk unacked sequence in sendmsg()
mptcp: queue data for mptcp level retransmission
mptcp: use retransmission timer to update msk una
mptcp: implement memory accounting for mptcp rtx queue
net/mptcp/options.c | 31 ++++--
net/mptcp/protocol.c | 240 +++++++++++++++++++++++++++++++++++++++++--
net/mptcp/protocol.h | 30 ++++++
3 files changed, 286 insertions(+), 15 deletions(-)
--
2.20.1
next reply other threads:[~2019-08-16 16:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-16 16:47 Paolo Abeni [this message]
-- strict thread matches above, loose matches on Subject: below --
2019-08-19 11:06 [MPTCP] [PRE-RFC 0/6] mptcp: implement retransmit infrastructure Florian Westphal
2019-08-19 13:02 Paolo Abeni
2019-08-19 14:35 Florian Westphal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1565970525.git.pabeni@redhat.com \
--to=unknown@example.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.