Message ID | b27420c3db63969d3faf00a2e866126dae3b870c.1626713549.git.lucien.xin@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | sctp: improve the pmtu probe in Search Complete state | expand |
On Mon, 19 Jul 2021 12:53:23 -0400, Xin Long wrote: > This patch is to introduce last_rtx_chunks into sctp_transport to detect > if there's any packet retransmission/loss happened by checking against > asoc's rtx_data_chunks in sctp_transport_pl_send(). > > If there is, namely, transport->last_rtx_chunks != asoc->rtx_data_chunks, > the pmtu probe will be sent out. Otherwise, increment the pl.raise_count > and return when it's in Search Complete state. > > With this patch, if in Search Complete state, which is a long period, it > doesn't need to keep probing the current pmtu unless there's data packet > loss. This will save quite some traffic. > > Signed-off-by: Xin Long <lucien.xin@gmail.com> Can we get a Fixes tag, please?
On Tue, Jul 20, 2021 at 6:50 AM Jakub Kicinski <kuba@kernel.org> wrote: > > On Mon, 19 Jul 2021 12:53:23 -0400, Xin Long wrote: > > This patch is to introduce last_rtx_chunks into sctp_transport to detect > > if there's any packet retransmission/loss happened by checking against > > asoc's rtx_data_chunks in sctp_transport_pl_send(). > > > > If there is, namely, transport->last_rtx_chunks != asoc->rtx_data_chunks, > > the pmtu probe will be sent out. Otherwise, increment the pl.raise_count > > and return when it's in Search Complete state. > > > > With this patch, if in Search Complete state, which is a long period, it > > doesn't need to keep probing the current pmtu unless there's data packet > > loss. This will save quite some traffic. > > > > Signed-off-by: Xin Long <lucien.xin@gmail.com> > > Can we get a Fixes tag, please? Fixes: 0dac127c0557 ("sctp: do black hole detection in search complete state") Should I repost?
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index f3d414ed208e..651bba654d77 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h @@ -984,6 +984,7 @@ struct sctp_transport { } cacc; struct { + __u32 last_rtx_chunks; __u16 pmtu; __u16 probe_size; __u16 probe_high; diff --git a/net/sctp/transport.c b/net/sctp/transport.c index 23e7bd3e3bd4..a3d3ca6dd63d 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c @@ -263,6 +263,7 @@ bool sctp_transport_pl_send(struct sctp_transport *t) if (t->pl.probe_count < SCTP_MAX_PROBES) goto out; + t->pl.last_rtx_chunks = t->asoc->rtx_data_chunks; t->pl.probe_count = 0; if (t->pl.state == SCTP_PL_BASE) { if (t->pl.probe_size == SCTP_BASE_PLPMTU) { /* BASE_PLPMTU Confirmation Failed */ @@ -298,8 +299,10 @@ bool sctp_transport_pl_send(struct sctp_transport *t) out: if (t->pl.state == SCTP_PL_COMPLETE && t->pl.raise_count < 30 && - !t->pl.probe_count) + !t->pl.probe_count && t->pl.last_rtx_chunks == t->asoc->rtx_data_chunks) { t->pl.raise_count++; + return false; + } pr_debug("%s: PLPMTUD: transport: %p, state: %d, pmtu: %d, size: %d, high: %d\n", __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, t->pl.probe_high); @@ -313,6 +316,7 @@ bool sctp_transport_pl_recv(struct sctp_transport *t) pr_debug("%s: PLPMTUD: transport: %p, state: %d, pmtu: %d, size: %d, high: %d\n", __func__, t, t->pl.state, t->pl.pmtu, t->pl.probe_size, t->pl.probe_high); + t->pl.last_rtx_chunks = t->asoc->rtx_data_chunks; t->pl.pmtu = t->pl.probe_size; t->pl.probe_count = 0; if (t->pl.state == SCTP_PL_BASE) {
This patch is to introduce last_rtx_chunks into sctp_transport to detect if there's any packet retransmission/loss happened by checking against asoc's rtx_data_chunks in sctp_transport_pl_send(). If there is, namely, transport->last_rtx_chunks != asoc->rtx_data_chunks, the pmtu probe will be sent out. Otherwise, increment the pl.raise_count and return when it's in Search Complete state. With this patch, if in Search Complete state, which is a long period, it doesn't need to keep probing the current pmtu unless there's data packet loss. This will save quite some traffic. Signed-off-by: Xin Long <lucien.xin@gmail.com> --- include/net/sctp/structs.h | 1 + net/sctp/transport.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-)