Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Jul 2002 17:02:48 -0700 (PDT)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        "Jaime Bozza" <jbozza@thinkburst.com>
Cc:        <stable@FreeBSD.ORG>
Subject:   Re: RE: Abominable NFSv3 read performance / FreeBSD server / Solaris client
Message-ID:  <200207250002.g6P02m07030238@apollo.backplane.com>
References:   <027b01c2335e$2321df40$6401010a@bozza>

next in thread | previous in thread | raw e-mail | index | archive | help

:Ok, put me in my corner.  I *knew* there was something wrong with the
:tcpdump, but I sat there looking at it and just thinking it was
:different because of the OS.  A big DUH from me.
:
:Ok, attached are three dumps (using your params below) from the FreeBSD
:server side.  All are TCP (I had to force TCP on the FreeBSD client
:since it defaults to UDP - Solaris doesn't really give you the choice)
:Even though it may not be relevant, I gave two dumps from Solaris, one
:with 8K rsize and one with 32K rsize.  (Since 32K is where the massive
:increase in time occurs)
:
:Just to test your point, a UDP connection with a Solaris client showed a
:similar tcpdump (to the FreeBSD UDP dump) and the speed was also
:similar, so I think the network itself is fine.
:
:10.1.2.10 = FreeBSD Server
:10.1.2.9 = Solaris Client
:10.1.2.50 = FreeBSD Client
:
:Jaime

    Well, looking at the solaris8k-dump the solaris client is way behind
    on its acks.  It's acking the 16K point after the FreeBSD server has
    pushed out 33KB, so the FreeBSD server is probably hitting the Solaris
    client's TCP window limit.  The FreeBSD server is then not restarting
    the transmit as quickly as it could, but the basic problem is that
    Solaris is advertising too small a window I think.

16:48:42.376155 10.1.2.10.2049 > 10.1.2.9.3887210299: reply ERR 1460 (DF)
16:48:42.376609 10.1.2.9.1016 > 10.1.2.10.2049: . ack 47461 win 24820 (DF)
16:48:42.376835 10.1.2.9.1016 > 10.1.2.10.2049: . ack 50381 win 24820 (DF)
16:48:42.377041 10.1.2.9.1016 > 10.1.2.10.2049: . ack 53301 win 24820 (DF)
16:48:42.456437 10.1.2.9.290121090 > 10.1.2.10.2049: 172 read fh 957,375898/2134869 8192 bytes @ 0x000016000 (DF)

    Above, solaris is queueing the next read command.

16:48:42.456486 10.1.2.10.2049 > 10.1.2.9.1381004381: reply ERR 588 (DF)

    Above, FreeBSD is *finishing* sending the data from the previous 
    read command.  Normally FreeBSD would have burst this data up top just
    after the 3887210299 point but it didn't probably because it ran out
    of window space.

    And below FreeBSD is starting to send the data for the most recent
    read command.

16:48:42.456656 10.1.2.10.2049 > 10.1.2.9.290121090: reply ok 1460 read (DF)
16:48:42.456668 10.1.2.10.2049 > 10.1.2.9.1859070703: reply ERR 1460 (DF)


    Note: When you are tring to read the tcpdump output just ignore the
    'reply ERR' stuff, it's just TCPDUMP trying to interpret data blocks
    in the stream as commands when they're really just data blocks.

    What you need to do is get Solaris to advertise a much larger window.
    Perhaps you've tried this already and did not seem to work, but perhaps
    that is because you didn't reset the TCP connection (killing and 
    restarting the NFSD's on the FreeBSD server should suffice to reset
    the Solaris client's TCP connections). ( At the same time, make sure
    you keep FreeBSD's transmit buffers bumped up to at least 65535, but
    the main issue appears to be Solaris's advertised window ).

    If you do a dump on FreeBSD and Solaris does not advertise larger 
    windows (it's advertising 24820 most of the time in the dumps you've
    provided to date), then you have not managed to get Solaris to advertise
    a larger window.

						-Matt


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200207250002.g6P02m07030238>