tuning af FreeBSD 5.2 nfs-server

From: Claus Guttesen (none@cguttesen--yahoo.dk.lh.bsd-dk.dk)
Date: Fri 09 Jan 2004 - 15:08:06 CET


Date: Fri, 9 Jan 2004 15:08:06 +0100 (CET)
From: Claus Guttesen <none@cguttesen--yahoo.dk.lh.bsd-dk.dk>
Subject: tuning af FreeBSD 5.2 nfs-server
To: bsd-dk@bsd-dk.dk

Hej.

Har sat en FreeBSD 5.2 op som skal bruges som
nfs-server. Jeg kopiérer en 647 MB stor fil frem og
tilbage (Linux debian faktisk, den eneste store fil
jeg havde i en håndvending).

Da jeg kopiérede de første par gange, gik der kun 18
Mbit over pr. sek. Da begge bokse sidder på 100
Mbit-switch, er det for lidt.

Jeg begyndte så at lede efter andres erfaringer. Jeg
fandt flere henvisninger, én skrev at man burde skifte
til TCP, selv om det var på lokalnettet. Så jeg gik
over til TCP, men stadig ikke den store forbedring.

Så ændrede jeg i mount-parameteren på klienten, og her
skete der ting og sager. Jeg mountede med:

mount_nfs -3 -T -i -w 32768 -r 32768
jasmin:/home/claus jasmin

Straks gik overførslen op til 77 Mbit/s. Hvilket jo er
helt andre tal (mere end en fire-dobling). Det som gør
forskellen er -w og -r-parametrene.

-w og -r er write- og read datasize, -3 bruger nfs
ver.3 (standard), -T bruger tcp, -i gør at du kan
afbryde en kommando som står og hænger, fordi
nfs-mounten ikke er tilgængelig.

På serveren er /etc/rc.conf:

rpcbind_enable="YES"
nfs_server_enable="YES"
nfs_server_flags="-t -u -n 8"
mountd_flags="-r"

På klienten er /etc/fstab:
jasmin:/home/claus /home/claus/jasmin nfs
rw,tcp,intr,nfsv3,-w=32768,-r=32768 0 0

Jeg har sat -r og -w til det dobbelte og det gav ingen
forskel. Det halve gav en meget dårligere resultat.

Nogle netkort kan også polles af FreeBSD, og kan
aktiveres med:

options DEVICE_POLLING
options HZ=2000

i kernen.

Da jeg sidder på en dual må jeg ind og fjerne linier
relateret til polling i /usr/src/sys/kern/kern_poll.c
og oversætte kernen.

Dette gav kun en marginal forbedring (et par sek.) at
det ikke er det værd, fordi den oprindelige kode
lægges tilbage hvis/når du cvsup'er basesystemet.

Sysctl kan også bruges, og jeg forsøgte med:

sysctl net.inet.tcp.recvspace=131072
sysctl net.inet.tcp.sendspace=65536
marginalt

sysctl vfs.hirunningspace=2097152
sysctl vfs.lorunningspace=1048576
marginalt

sysctl kern.ipc.somaxconn=1024
marginalt

sysctl net.inet.tcp.inflight_enable=1
marginalt

Her er en af de tråde jeg læste;
http://www.isber.ucsb.edu/~randall/freebsd-nfs/

Det kan hænde at jeg må justere med sysctl-parametre
senere, når den skal bruges til filer som veksler
mellem 4-8 kb og 100-2000 kb.

Hilsen
Claus

PS. Hvis nogen spørger hvorfor jeg vil bruge 5.2 som
nfs-server, og ikke 4.9 (stable), så er det fordi at

1. 5.1 har været meget stabilt til mit behov, og 5.2
er næppe mindre stabilt

2. Jeg skal bruge den til at mounte et par filsystemer
på tilsammen et par TB med data, og så er det ikke så
interessant, hvis den skal fsck'e.

Yahoo! Mail (http://dk.mail.yahoo.com) - Gratis: 6 MB lagerplads, spamfilter og virusscan



This archive was generated by hypermail 2b30 : Wed 15 Nov 2006 - 18:24:35 CET