All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrei Borzenkov <arvidjaar@gmail.com>
To: Josef Bacik <jbacik@fb.com>,
	 The development of GNU GRUB <grub-devel@gnu.org>
Cc: kernel-team@fb.com
Subject: Re: [PATCH] tcp: ack when we get an OOO/lost packet
Date: Thu, 13 Aug 2015 20:13:27 +0300	[thread overview]
Message-ID: <55CCD037.4040106@gmail.com> (raw)
In-Reply-To: <55CCA2D3.1050306@fb.com>



On 13.08.2015 16:59, Josef Bacik wrote:
> On 08/13/2015 04:19 AM, Andrei Borzenkov wrote:
>> On Wed, Aug 12, 2015 at 6:16 PM, Josef Bacik <jbacik@fb.com> wrote:
>>> While adding tcp window scaling support I was finding that I'd get
>>> some packet
>>> loss or reordering when transferring from large distances and grub
>>> would just
>>> timeout.  This is because we weren't ack'ing when we got our OOO
>>> packet, so the
>>> sender didn't know it needed to retransmit anything, so eventually it
>>> would fill
>>> the window and stop transmitting, and we'd time out.  Fix this by
>>> ACK'ing when
>>> we don't find our next sequence numbered packet.  With this fix I no
>>> longer time
>>> out.  Thanks,
>>
>> I have a feeling that your description is misleading. Patch simply
>> sends duplicated ACK, but partner does not know what has been received
>> and what has not, so it must wait for ACK timeout anyway before
>> retransmitting. What this patch may fix would be lost ACK packet
>> *from* GRUB, by increasing rate of ACK packets it sends. Do you have
>> packet trace for timeout case, ideally from both sides simultaneously?
>>
>
> The way linux works is that if you get <configurable amount> of DUP
> ack's it triggers a retransmit.

Do you have pointers to documentation and code?

>                                I only have traces from the server
> since tcpdump doesn't work in grub (or if it does I don't know how to do
> it).

GRUB does not have tcpdump, but your switch quite likely has port mirroring.

>     The server is definitely getting all of the ACK's, and from my
> printf()'ing in grub we are either getting re-ordered packets (the most
> likely) or we are simply losing a packet here or there.  This is a
> pretty long distance and we have a lot of networking between Sweden and
> California so reordering or packet loss isn't out of the question.
>
> Regardless we definitely need to be ACK'ing packets that come in with
> the last seq we had as the spec says so the sender knows the last bit we
> had, otherwise we see timeouts once the window is full.
>

I'm fine with it, I just want to understand why it fixes anything and 
get commit message right.

>> Did you consider implementing receive side SACK BTW? You have the
>> right environment to test it :)
>>
>
> So I found this bug while implementing SACK, and decided it was faster
> to just do this rather than add SACK.  This method is still exceedingly
> slow, I only get around 800kb/s over the entire transfer whereas I can
> sustain around 5.5 mb/s before we start losing stuff, so I'm definitely
> going to go back and try the timestamp echo stuff since the timeout
> stuff takes like 6 seconds, and then if that doesn't work bite the
> bullet and add SACK.
>
> But first I want to get my ipv6 patches right ;).  Thanks,
>
> Josef
>


  reply	other threads:[~2015-08-13 17:13 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-12 15:16 [PATCH] tcp: ack when we get an OOO/lost packet Josef Bacik
2015-08-13  8:19 ` Andrei Borzenkov
2015-08-13 13:59   ` Josef Bacik
2015-08-13 17:13     ` Andrei Borzenkov [this message]
2015-08-13 17:40       ` Josef Bacik
2015-08-17 12:38     ` Andrei Borzenkov
2015-08-18 17:58       ` Josef Bacik
2015-12-07 17:59 ` Andrei Borzenkov
2015-12-07 18:28   ` Josef Bacik

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=55CCD037.4040106@gmail.com \
    --to=arvidjaar@gmail.com \
    --cc=grub-devel@gnu.org \
    --cc=jbacik@fb.com \
    --cc=kernel-team@fb.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.