From: Stefano Brivio <sbrivio@redhat.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: passt-dev@passt.top, Jon Maloy <jmaloy@redhat.com>,
Paul Holzinger <pholzing@redhat.com>
Subject: Re: [PATCH 5/6] tcp: Don't try to transmit right after the peer shrank the window to zero
Date: Mon, 18 Aug 2025 19:06:29 +0200 [thread overview]
Message-ID: <20250818190629.280f0e0c@elisabeth> (raw)
In-Reply-To: <aKKWSZxtwGPcagQm@zatzit>
On Mon, 18 Aug 2025 12:56:09 +1000
David Gibson <david@gibson.dropbear.id.au> wrote:
> On Fri, Aug 15, 2025 at 06:10:41PM +0200, Stefano Brivio wrote:
> > If the peer shrinks the window to zero, we'll skip storing the new
> > window, as a convenient way to cause window probes (which exceed any
> > zero-sized window, strictly speaking) if we don't get window updates
> > in a while.
>
> Strictly speaking, not storing the new zero window feels slightly
> wrong to me - I wonder if it would be more correct to store the zero
> window, but still send window probes as a special case.
Yeah, it's wrong but it's not really obvious what value we should use
at that point. With a recent kernel version, there would be no problem
storing 0, waiting for a window update which will come soon after, and
reserve the special case I already added (1 as window size) for
zero-window probes, triggered via timer.
But without 8c670bdfa58e ("tcp: correct handling of extreme memory
squeeze"), and with e2142825c120 ("net: tcp: send zero-window ACK when
no memory"), the window update never comes, so we would need to wait
for the timer to expire before we send an explicit zero-window probe,
which takes a while (two seconds).
With this trick, instead, we keep the latest advertised value, which
is actually the latest correct value, and retry sending what we were
originally sending as soon as we have more data from the socket, which
would becomes available quite soon in all the practical cases where the
kernel shrinks the window to zero.
Maybe we could store zero, and use WINDOW_DEFAULT (14600 bytes) on
socket activity. The RFC simply says we need to send zero-window
probes at some point, not that we should assume a broken receiver,
but unfortunately between e2142825c120 and 8c670bdfa58e it's like that.
--
Stefano
next prev parent reply other threads:[~2025-08-18 17:06 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-15 16:10 [PATCH 0/6] tcp: Fixes for issues uncovered by tests with 6.17-rc1 kernels Stefano Brivio
2025-08-15 16:10 ` [PATCH 1/6] tcp: FIN flags have to be retransmitted as well Stefano Brivio
2025-08-18 2:43 ` David Gibson
2025-08-15 16:10 ` [PATCH 2/6] tcp: Factor sequence rewind for retransmissions into a new function Stefano Brivio
2025-08-18 2:46 ` David Gibson
2025-08-15 16:10 ` [PATCH 3/6] tcp: Rewind sequence when guest shrinks window to zero Stefano Brivio
2025-08-18 2:49 ` David Gibson
2025-08-15 16:10 ` [PATCH 4/6] tcp: Fix closing logic for half-closed connections Stefano Brivio
2025-08-18 2:52 ` David Gibson
2025-08-15 16:10 ` [PATCH 5/6] tcp: Don't try to transmit right after the peer shrank the window to zero Stefano Brivio
2025-08-18 2:56 ` David Gibson
2025-08-18 17:06 ` Stefano Brivio [this message]
2025-08-19 0:55 ` David Gibson
2025-08-15 16:10 ` [PATCH 6/6] tcp: Fast re-transmit if half-closed, make TAP_FIN_RCVD path consistent Stefano Brivio
2025-08-18 3:04 ` David Gibson
2025-08-18 17:40 ` [PATCH 0/6] tcp: Fixes for issues uncovered by tests with 6.17-rc1 kernels Paul Holzinger
2025-08-18 21:58 ` Stefano Brivio
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=20250818190629.280f0e0c@elisabeth \
--to=sbrivio@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=jmaloy@redhat.com \
--cc=passt-dev@passt.top \
--cc=pholzing@redhat.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.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).