Re: NFS write() calls lead to read() calls?

From: Ulrich Spoerlein <uspoerlein_at_gmail.com>
Date: Thu, 29 Mar 2007 10:19:34 +0200
On 3/29/07, Bruce Evans <bde_at_zeta.org.au> wrote:
> On Wed, 28 Mar 2007, Ulrich Spoerlein wrote:
>
> > hostA # scp 500MB hostB:/net/share/
> > ...
> > If I run the scp again, I can see X MB/s going out from HostA, 2*X
> > MB/s coming in on HostB and X MB/s out plus X MB/s in on HostC. What's
> > happening is, that HostB issues one NFS READ call for every WRITE
> > call. The traffic flows like this:
> >
> > ----->   ----->
> > A        B        C
> >          <-----
>
> At least under FreeBSD-~5.2 with an old version of scp, this is caused
> by blocksize bugs in the kernel and/or scp, and an open mode bug or
> feature in scp.  The blocksize used by scp is 4K.  This is smaller
> than the nfs block size of 8K, so nfs has to read-ahead 1 8K block for
> each pair of 4K- blocks written so as to have non-garbage in the top
> half of each 8K- block after writing 4K to the bottom half.  It only
> has to read-ahead if there is something there, but repeated scp's
> ensure this by not truncating the file on open (open mode (O_WRONLY |
> O_CREAT) without O_TRUNC according to truss(1)).
>
> [snip - all you ever wanted to know about block sizes]

Thanks for the in-depth answer, Bruce. Greatly appreciated.

I can now tweak all kinds of block sizes to make the final combination
of Windows 2003, Samba and NFS work well. I hope that samba can be
adjusted in the right places for this task.

I'll post a summary, once I have it working. It seems that other
people don't have these problems (as they are not running SMB+NFS)

Uli
Received on Thu Mar 29 2007 - 06:19:37 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:07 UTC