Subject: Re: How to get good NFS write performance with RAIDframe
To: port-i386@netbsd.org <port-i386@netbsd.org>
From: Andrea <practive@practive.org>
List: port-i386
Date: 07/20/2001 19:57:37
Thor Lancelot Simon wrote:
>
> On Wed, Jul 18, 2001 at 12:25:55AM +0000, Andrea wrote:
> > Hi all!
> >
> > I'm using a netbsd machine as file server via NFS.
> >
> > The storage is a 4 IDE disks raid5(RaidFrame) array FFS formatted +
>
> This is a particularly poor array configuration to use for NFS file
> service. NFS generally has poor write performance and so does RAID5;
> the combination is what's largely responsible for your results.
>
> IDE disks are extremely cheap. If you use larger disks in a mirrored
> or stripe/mirror configuration, rather than a RAID5 configuration, you
> will get write performance so much better that you will probably not need
> to resort to hacks like asynchronous NFS.
>
> The risk you run by using async NFS mounts is that if any client reboots
> or crashes unexpectedly file data that your application thought had been
> safely written to disk may not have been; also, data-corruption problems
> can ensue when two clients write to a file, even if they carefully write
> to different regions of the file.
>
> To increase NFS performance, I recommend the following:
>
> 1) Unless your network is saturated, increase your NFS I/O size to 32K
> for both read and write, with -r32768 -w32768 as mount options.
>
> 2) If the clients are running NetBSD, use the Not Quite NFS extensions to
> the protocol to allow the clients to safely cache writes (-q mount
> option). Also consider increasing client buffer cache size.
>
> 3) If you are willing to re-create the underlying filesystem, I strongly
> suggest using a larger block size and cylinder group size (unless your
> filesystem contains primarily very small files). This will avoid
> unnecessary seeks on write that really hurt performance on RAID. Try
> creating the filesystem with -b32768 -f4096 -c1024. You may need to
> adjust the -c parameter to whatever the maximum newfs will let you have
> is. Also, see the note below about needing to use a different block
> size and maxcontig for some RAID5 configurations (including yours, if you
> choose to keep the current RAID5 setup) to avoid partial-stripe writes.
>
> These steps should increase your NFS write performance well beyond
> 1.7MB/sec; in fact, any one of them may do so by itself. On the other hand,
> so might running RAID 1 (mirroring) or RAID 0+1 (stripe of mirrors) rather
> than RAID 5.
>
> With all of the steps listed above, but still running RAID 5, one of my
> fileservers gets these results:
>
> | bash-2.05$ cd /vv
> | bash-2.05$ ls
> | bash-2.05$ dd if=/dev/zero of=test bs=65536 count=1024
> | 1024+0 records in
> | 1024+0 records out
> | 67108864 bytes transferred in 15 secs (4473924 bytes/sec)
>
> Here is the mount configuration on the client I tested from:
>
> | reddwarf.cs.stevens-tech.edu:/vv /vv nfs rw,nosuid,nodev,-w32768,-r32768, -i, -q
>
> The server filesystem has 16384 byte blocks, 2048 byte fragments, and cpg 60
> (which was the maximum I could get with 16384-byte blocks). It's a RAID 5 of
> four disks, so I set the filesystem blocksize to 16384 and used maxcontig 3
> (-a 3 option to newfs or tunefs) to ensure that I would write only 48K at
> a time, to avoid paying the RAID5 short-write penalty on every clustered
> write (if I'd used 32K blocks, I couldn't have avoided this; this is another
> disadvantage of RAID5: it artifically constrains the maximum filesystem block
> size if you want decent performance).
>
> Thor
How about RAID5 stripe size?
Thanks!