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>