Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Jan 2014 10:34:43 -0500 (EST)
From:      Rick Macklem <rmacklem@uoguelph.ca>
To:        Alfred Perlstein <alfred@freebsd.org>, eric@edombroski.com
Cc:        freebsd-stable@freebsd.org
Subject:   Re: Major performance/stability regression in virtio network drivers between 9.2-RELEASE and 10.0-RC5
Message-ID:  <989650407.12440727.1390145683304.JavaMail.root@uoguelph.ca>
In-Reply-To: <52DBE19C.4040101@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Alfred Perlstein wrote:
> What does vmstat say about memory zones?  I think vmstat -m/vmstat -z
> and also netstat -m?
> 
> Are you set with the same mbufs on both 9 and 10?
> 
> -Alfred
> 
> 
> On 1/18/14 1:32 PM, Eric Dombroski wrote:
> > Adrian:
> >
> > Yes, no change.
> >
> > -Eric
> >
Really replying to Eric and not Alfred, but I didn't keep the previous
post.

A couple of other tricks you could try:
- setting rsize=32768,wsize=32768 options on the mount. Sometimes the
  large bursts of packets overloads the net interface and reducing
  read/write data size makes the bursts smaller (32K about half of the
  64K default).
- I have no idea if these virtual interfaces have such an option, but
  setting a net interface to half duplex sometimes worked around these
  kinds of issues in the past. Most TCP connections transfer data in
  one direction with only ACKs going the other way, so problems with
  packets going both in and out concurrently don't get detected. NFS
  moves RPC request/reply messages in both directions concurrently and
  can tickle these problems.

And, as Alfred said, looking at the mbuf allocations might also give a
hint as to what is going on.

Good luck with it, rick

> >
> >
> >
> >
> > On Sat, Jan 18, 2014 at 4:06 PM, Adrian Chadd
> > <adrian.chadd@gmail.com>wrote:
> >
> >> Hi,
> >>
> >> Have you tried disabling tso?
> >>
> >> Adrian
> >> On Jan 18, 2014 1:52 PM, "Eric Dombroski" <eric@edombroski.com>
> >> wrote:
> >>
> >>> Hello:
> >>>
> >>> I believe there is a major performance regression between FreeBSD
> >>> 9.2-RELEASE and 10.0-RC5 involving the virtio network drivers
> >>> (vtnet) and
> >>> handling incoming traffic.  Below are the results of some iperf
> >>> tests and
> >>> large dd operations over NFS.  Write throughput goes from ~40Gbps
> >>> to
> >>> ~2.4Gbps from 9.2 to 10.0RC5, and over time the connection
> >>> becomes
> >>> unstable
> >>> ("no buffer space available"), requiring the interface to be
> >>> taken
> >>> down/up.
> >>>
> >>>
> >>> These results are on fresh installs of 9.2 and 10.0RC5, no sysctl
> >>> tweaks
> >>> on
> >>> either system.
> >>>
> >>> I can't reproduce this using an Intel 1Gbps ethernet through PCIe
> >>> passthrough, although I suspect the problem manifests itself over
> >>> 1Gbps
> >>> speeds anyway.
> >>>
> >>> Tests:
> >>>
> >>> Client (host):
> >>>    root@gogo:~# uname -a
> >>>    Linux gogo 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64
> >>>    GNU/Linux
> >>>    root@gogo:~# kvm -version
> >>>    QEMU emulator version 1.1.2 (qemu-kvm-1.1.2+dfsg-6, Debian),
> >>>    Copyright
> >>> (c) 2003-2008 Fabrice Bellard
> >>>    root@gogo:~# lsmod | grep vhost
> >>>    vhost_net              27436  3
> >>>    tun                    18337  8 vhost_net
> >>>    macvtap                17633  1 vhost_net
> >>>
> >>>
> >>>    Command: iperf -c 192.168.100.x -t 60
> >>>
> >>>
> >>> Server (FreeBSD 9.2 VM):
> >>>
> >>>        root@umarotest:~ # uname -a
> >>>        FreeBSD umarotest 9.2-RELEASE-p3 FreeBSD 9.2-RELEASE-p3
> >>>        #0: Sat Jan
> >>> 11 03:25:02 UTC 2014
> >>> root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
> >>>   amd64
> >>>        root@umarotest:~ # iperf -s
> >>>        ------------------------------------------------------------
> >>>        Server listening on TCP port 5001
> >>>        TCP window size: 64.0 KByte (default)
> >>>        ------------------------------------------------------------
> >>>        [  4] local 192.168.100.44 port 5001 connected with
> >>>        192.168.100.1
> >>> port 58996
> >>>        [ ID] Interval       Transfer     Bandwidth
> >>>        [  4]  0.0-60.0 sec   293 GBytes  41.9 Gbits/sec
> >>>        [  5] local 192.168.100.44 port 5001 connected with
> >>>        192.168.100.1
> >>> port 58997
> >>>        [  5]  0.0-60.0 sec   297 GBytes  42.5 Gbits/sec
> >>>        [  4] local 192.168.100.44 port 5001 connected with
> >>>        192.168.100.1
> >>> port 58998
> >>>        [  4]  0.0-60.0 sec   291 GBytes  41.6 Gbits/sec
> >>>        [  5] local 192.168.100.44 port 5001 connected with
> >>>        192.168.100.1
> >>> port 58999
> >>>        [  5]  0.0-60.0 sec   297 GBytes  42.6 Gbits/sec
> >>>        [  4] local 192.168.100.44 port 5001 connected with
> >>>        192.168.100.1
> >>> port 59000
> >>>        [  4]  0.0-60.0 sec   297 GBytes  42.5 Gbits/sec
> >>>
> >>>        While pinging out from the server to the client, I do not
> >>>        get any
> >>> errors.
> >>>
> >>>
> >>>        root@umaro:~ # uname -a FreeBSD umaro 10.0-RC5 FreeBSD
> >>>        10.0-RC5 #0
> >>> r260430: Wed Jan  8 05:10:04 UTC 2014
> >>> root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC
> >>>   amd64
> >>>        root@umaro:~ # iperf -s
> >>>        ------------------------------------------------------------
> >>>        Server listening on TCP port 5001
> >>>        TCP window size: 64.0 KByte (default)
> >>>        ------------------------------------------------------------
> >>>        [  4] local 192.168.100.5 port 5001 connected with
> >>>        192.168.100.1
> >>> port
> >>> 50264
> >>>        [ ID] Interval       Transfer     Bandwidth
> >>>        [  4]  0.0-60.0 sec  16.7 GBytes  2.39 Gbits/sec
> >>>        [  5] local 192.168.100.5 port 5001 connected with
> >>>        192.168.100.1
> >>> port
> >>> 50265
> >>>        [  5]  0.0-60.0 sec  18.3 GBytes  2.62 Gbits/sec
> >>>        [  4] local 192.168.100.5 port 5001 connected with
> >>>        192.168.100.1
> >>> port
> >>> 50266
> >>>        [  4]  0.0-60.0 sec  16.8 GBytes  2.40 Gbits/sec
> >>>        [  5] local 192.168.100.5 port 5001 connected with
> >>>        192.168.100.1
> >>> port
> >>> 50267
> >>>        [  5]  0.0-60.0 sec  16.8 GBytes  2.40 Gbits/sec
> >>>        [  4] local 192.168.100.5 port 5001 connected with
> >>>        192.168.100.1
> >>> port
> >>> 50268
> >>>        [  4]  0.0-60.0 sec  16.8 GBytes  2.41 Gbits/sec
> >>>
> >>>        *** While pinging out from the server to client, frequent
> >>>        "ping:
> >>> sendto: No space left on device" errors ***
> >>>
> >>>
> >>>        After a while, I can also reliably re-produce more
> >>>        egregious "ping:
> >>> sendto: No buffer space available" errors after doing a large
> >>> sequential
> >>> write over NFS:
> >>>
> >>>        mount -t nfs -o rsize=65536,wsize=65536 192.168.100.5:
> >>> /storage/shared
> >>> /mnt/nfs
> >>>        dd if=/dev/zero of=/mnt/nfs/testfile bs=1M count=30000
> >>>
> >>> I am going to file a freebsd bug report as well.
> >>>
> >>> Thanks,
> >>> Eric
> >>> _______________________________________________
> >>> freebsd-stable@freebsd.org mailing list
> >>> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> >>> To unsubscribe, send any mail to
> >>> "freebsd-stable-unsubscribe@freebsd.org"
> >>>
> > _______________________________________________
> > freebsd-stable@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> > To unsubscribe, send any mail to
> > "freebsd-stable-unsubscribe@freebsd.org"
> >
> 
> _______________________________________________
> freebsd-stable@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to
> "freebsd-stable-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?989650407.12440727.1390145683304.JavaMail.root>