Bad performance of 7.0 nfs client with Solaris nfs server

Valerio Daelli valerio.daelli at gmail.com
Wed Feb 20 11:48:50 UTC 2008


On Feb 19, 2008 8:53 PM, Kris Kennaway <kris at freebsd.org> wrote:
>
> Valerio Daelli wrote:
> > Hi list
> >
> > we have a FreeBSD 7.0 NFS client (csup today, built world and kernel).
> > It mounts a Solaris 10 NFS share.
> > We have bad performance with 7.0 (3MB/s).
> > We have tried both UDP and TCP mounts, both sync and async.
> > This is our mount:
> >
> > nest.xx.xx:/data/export/hosts/bsd7.xx.xx/ /mnt/nest.xx.xx nfs
> > noatime,async,-i,rw,-T,-3
> >
> > Both our server (7.0 and Solaris 10) are Gigabit Ethernet, both are HP
> > Proliant DL360 i386 (NIC bge0):
> >
> > ---
> > FreeBSD 7.0:
> >
> > [eldon at bsd7 ~]$ uname -a
> > FreeBSD bsd7.xx.xx 7.0-RC2 FreeBSD 7.0-RC2 #1: Mon Feb 18 17:46:46 CET
> > 2008     root at bsd7.xx.xx:/usr/obj/usr/src/sys/BSD7  i386
> >
> > ---
> > This is our performance with iozone:
> > command line:
> >
> > iozone -+q 1 -i 0 -i 1 -n 2048 -g 2G -Raceb iozone.xls -f
> > /mnt/nest.xx.xx/iozone.bsd7/iozone.tmp
> >
> > FreeBSD 7:
> >
> >       File stride size set to 17 * record size.
> >                                                             random
> > random    bkwd  record  stride
> >               KB  reclen   write rewrite    read    reread    read
> > write    read rewrite    read   fwrite frewrite   fread  freread
> >             2048    1024  109883  101289   769058   779880
> >             2048    2048    3812    3674   760479   767066
> >             4096    1024  111156  106788   724692   728040
> >             4096    2048    3336    2241   157132   733417
> >             4096    4096    2829    3364   699351   699807
> >
> >
> > As you can see, while with record length less than 1024KB the speed is
> > 'fast', with record of 2048 or more (I've tried with record much
> > bigger) we get only
> > 3 MB/s.
> > Is this a known issue? If you need more details please contact me, I
> > am willing to do more tests to risolve this problem.
>
> Can you characterize what is different about the NFS traffic when
> FreeBSD and Solaris are the clients?  Does other network traffic to the
> server perform well?  2048 bytes records are > the 1500 byte MTU, so you
> will be invoking packet fragmentation and reassembly.  Maybe you are
> getting packet loss for some reason.  What does netstat say about
> interface errors on the bge, and for the protocol layers?
>
> Follow-ups set to performance@
>
> Kris
>

Hi
thanks for responding. I did a couple of test on 7.0, and I've not
seen error on interfaces.
Attached are netstat -s ad netstat -i.


TCP mount
---
root at bsd7:~ netstat -i
Name    Mtu Network       Address              Ipkts Ierrs    Opkts Oerrs  Coll
bge0   1500 <Link#1>      00:0b:cd:37:45:e8    45444     0   110188     0     0
bge0   1500 xx.xx.xx.xx bsd7                 45427     -   110183     -     -
---tcp:
	1536 packets sent
		396 data packets (68516 bytes)
		0 data packets (0 bytes) retransmitted
		0 data packets unnecessarily retransmitted
		0 resends initiated by MTU discovery
		1021 ack-only packets (6 delayed)
		0 URG only packets
		0 window probe packets
		101 window update packets
		18 control packets
	2555 packets received
		413 acks (for 68487 bytes)
		1 duplicate ack
		0 acks for unsent data
		2173 packets (763594 bytes) received in-sequence
		0 completely duplicate packets (0 bytes)
		0 old duplicate packets
		0 packets with some dup. data (0 bytes duped)
		0 out-of-order packets (0 bytes)
		0 packets (0 bytes) of data after window
		0 window probes
		0 window update packets
		7 packets received after close
		0 discarded for bad checksums
		0 discarded for bad header offset fields
		0 discarded because packet too short
		0 discarded due to memory problems
	10 connection requests
	1 connection accept
	0 bad connection attempts
	0 listen queue overflows
	0 ignored RSTs in the windows
	11 connections established (including accepts)
	10 connections closed (including 1 drop)
		7 connections updated cached RTT on close
		7 connections updated cached RTT variance on close
		0 connections updated cached ssthresh on close
	0 embryonic connections dropped
	413 segments updated rtt (of 358 attempts)
	0 retransmit timeouts
		0 connections dropped by rexmit timeout
	0 persist timeouts
		0 connections dropped by persist timeout
	0 Connections (fin_wait_2) dropped because of timeout
	0 keepalive timeouts
		0 keepalive probes sent
		0 connections dropped by keepalive
	0 correct ACK header predictions
	2122 correct data packet header predictions
	1 syncache entrie added
		0 retransmitted
		0 dupsyn
		0 dropped
		1 completed
		0 bucket overflow
		0 cache overflow
		0 reset
		0 stale
		0 aborted
		0 badack
		0 unreach
		0 zone failures
	1 cookie sent
	0 cookies received
	0 SACK recovery episodes
	0 segment rexmits in SACK recovery episodes
	0 byte rexmits in SACK recovery episodes
	0 SACK options (SACK blocks) received
	0 SACK options (SACK blocks) sent
	0 SACK scoreboard overflow
[...]
ip:
	99904 total packets received
	0 bad header checksums
	0 with size smaller than minimum
	0 with data size < data length
	0 with ip length > max ip packet size
	0 with header length < data size
	0 with data length < header length
	0 with bad options
	0 with incorrect version number
	61441 fragments received
	0 fragments dropped (dup or out of space)
	1 fragment dropped after timeout
	10240 packets reassembled ok
	48703 packets for this host
	0 packets for unknown/unsupported protocol
	0 packets forwarded (0 packets fast forwarded)
	0 packets not forwardable
	0 packets received for unknown multicast group
	0 redirects sent
	47693 packets sent from this host
	0 packets sent with fabricated ip header
	0 output packets dropped due to no bufs, etc.
	0 output packets discarded due to no route
	34819 output datagrams fragmented
	208914 fragments created
	0 datagrams that can't be fragmented
	0 tunneling packets that can't find gif
	0 datagrams with bad address in header

[...]


UDP mount
---
root at bsd7:~ netstat -i
Name    Mtu Network       Address              Ipkts Ierrs    Opkts Oerrs  Coll
bge0   1500 <Link#1>      00:0b:cd:37:45:e8    63685     1   119978     0     0
bge0   1500 xx.xx.xx.xx bsd7                 63628     -   119973     -     -
---
udp:
	25880 datagrams received
	0 with incomplete header
	0 with bad data length field
	0 with bad checksum
	0 with no checksum
	0 dropped due to no socket
	7 broadcast/multicast datagrams undelivered
	0 dropped due to full socket buffers
	0 not for hashed pcb
	25873 delivered
	25882 datagrams output
	0 times multicast source filter matched
[...]
ip:
	62379 total packets received
	0 bad header checksums
	0 with size smaller than minimum
	0 with data size < data length
	0 with ip length > max ip packet size
	0 with header length < data size
	0 with data length < header length
	0 with bad options
	0 with incorrect version number
	41473 fragments received
	0 fragments dropped (dup or out of space)
	1 fragment dropped after timeout
	6912 packets reassembled ok
	27818 packets for this host
	0 packets for unknown/unsupported protocol
	0 packets forwarded (0 packets fast forwarded)
	0 packets not forwardable
	0 packets received for unknown multicast group
	0 redirects sent
	27056 packets sent from this host
	0 packets sent with fabricated ip header
	0 output packets dropped due to no bufs, etc.
	0 output packets discarded due to no route
	18438 output datagrams fragmented
	110628 fragments created
	0 datagrams that can't be fragmented
	0 tunneling packets that can't find gif
	0 datagrams with bad address in header
[...]

Then I tried with different versions of FreeBSD and I discovered that:
-FreeBSD 6.2-p3 has good performance with reclen 2048 and bad with
4096 and 8192:

---
root at litio:~ uname -a
FreeBSD litio.xx.xx 6.2-RELEASE-p3 FreeBSD 6.2-RELEASE-p3 #1: Thu Mar
15 14:52:08 CET 2007     root at litio.xx.xx:/usr/obj/usr/src/sys/LITIO
amd64

TCP
              KB  reclen   write rewrite    read    reread    read
write    read rewrite    read   fwrite frewrite   fread  freread
            2048    1024   90041   97352    82001  1019428
            2048    2048   87030   88329  1009366  1053046
            4096    1024   96139   95218    74186  1032306
            4096    2048  103038   99700    79950  1003190
            4096    4096    2897    3354   970821   522038
            8192    1024   97978  100020    80681   946699
            8192    2048   95260  104290    82395  1032127
            8192    4096    3300    3169   149505   860882
            8192    8192    3371    3090   998300  1012987
           16384    1024  100072   98446    80503   962737
           16384    2048   99360  105249    80983   924453
           16384    4096    3162    3173   106750   936178
           16384    8192    3233    3223   150394   998913
           16384   16384    3250    3316   955004   944153

UDP similar


-FreeBSD 6.2-p4 and 6.2-p6 has the same performance as 7.0:
---

root at xtl:~ uname -a
FreeBSD xtl.xx.xx 6.2-RELEASE-p6 FreeBSD 6.2-RELEASE-p6 #0: Wed Jul 25
14:32:07 CEST 2007     root at xtl.xx.xx:/usr/obj/usr/src/sys/XTL  i386

TCP
                                                            random
random    bkwd  record  stride
              KB  reclen   write rewrite    read    reread    read
write    read rewrite    read   fwrite frewrite   fread  freread
            2048    1024   15544   14560   846597   841044
            2048    2048    2769    2649   852225   851211
            4096    1024   17366   16851   833229   835417
            4096    2048    2777    2457    49038   841226
            4096    4096    2527    2813   847868   847492




root at rubidio:~ uname -a
FreeBSD rubidio.xx.xx 6.2-RELEASE-p4 FreeBSD 6.2-RELEASE-p4 #0: Tue
May  8 11:24:10 CEST 2007
root at rubidio.xx.xx:/usr/obj/usr/src/sys/PROXYCARP1  amd64

TCP

                                                            random
random    bkwd  record  stride
              KB  reclen   write rewrite    read    reread    read
write    read rewrite    read   fwrite frewrite   fread  freread
            2048    1024   93010   89366   996997   970635
            2048    2048   94740   90820   943347   946048
            4096    2048  100036   94668    81065   927548
            4096    4096    3274    3319  1074493  1047309
            8192    2048  100990   98212    80574  1054050
            8192    4096    3078    3071   149890   990428
            8192    8192    3074    3055   992029   995391



---
Now I will try with a Solaris client and with rsync as protocol.
Other suggestions?
Bye

Valerio Daelli


More information about the freebsd-performance mailing list