NetBSD-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: Weird network performance problem



Chavdar Ivanov <ci4ic4%gmail.com@localhost> writes:

>>   It looks like you are using vlan support on Y.  Try without also.
>
> That may be something to look at. This is my NVMM host as well, every
> boot I recreate tap[0..5] for use by the NVMM guests (but the tests
> were done without any of them running).
>
> I am not using vlans deliberately - the switch upstairs is a dumb one,
> although the one downstaris is managed and has (unusued at the moment)
> vlan support. The interfaces are created simply with /etc/ifconfig.wm0
> - just 'inet 192.168.0.29 netmask 255.255.255.0 up description "My
> LAN"' and /etc/ifconfig.bridge0 -

I meant that hardware vlan support was enabled.  I really doubt this is
the issue, but it seems easy to try the easy things.

Also, I forgot my other usual advice.

  $ netstat -s > BEFORE
  $ # do iperf
  $ netstat -s > AFTER
  $ diff -u BEFORE AFTER

to find out which counters that you didn't even know existed are
changing  in perhaps interesting ways.

> From the XCP-NG host to the NetBSD laptop:
>
> $ iperf3 -c ymir.lorien.lan
> Connecting to host ymir.lorien.lan, port 5201
> [  4] local 192.168.0.5 port 36036 connected to 192.168.0.29 port 5201
> [ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
> [  4]   0.00-1.00   sec  45.9 MBytes   385 Mbits/sec    0   66.5 KBytes
> [  4]   1.00-2.00   sec  64.2 MBytes   539 Mbits/sec    0    100 KBytes
> [  4]   2.00-3.00   sec  81.3 MBytes   682 Mbits/sec    0    132 KBytes
> [  4]   3.00-4.00   sec  99.4 MBytes   834 Mbits/sec    0    163 KBytes
> [  4]   4.00-5.00   sec   109 MBytes   911 Mbits/sec    0    205 KBytes
> [  4]   5.00-6.00   sec   111 MBytes   928 Mbits/sec    0    205 KBytes
> [  4]   6.00-7.00   sec   111 MBytes   928 Mbits/sec    0    205 KBytes
> [  4]   7.00-8.00   sec   111 MBytes   932 Mbits/sec    0    205 KBytes
> [  4]   8.00-9.00   sec   111 MBytes   930 Mbits/sec    0    205 KBytes
> [  4]   9.00-10.00  sec   111 MBytes   932 Mbits/sec    0    205 KBytes
> - - - - - - - - - - - - - - - - - - - - - - - - -
> [ ID] Interval           Transfer     Bandwidth       Retr
> [  4]   0.00-10.00  sec   954 MBytes   800 Mbits/sec    0             sender
> [  4]   0.00-10.00  sec   953 MBytes   800 Mbits/sec                  receiver
>
> Starts a bit slower, but after the fourth interval reaches along the maximum.

That's just 1s periods within the same TCP connection.  That is more
expected than subsequent TCP connections.  But, this is a clue of
something to perhaps change.  NetBSD has defaults for send and receive
buffer sizes, and some notion of auto tuning.  I am not really clear
where iperf3 is getting those "Cwnd" values, but perhaps it is able to
obtain them from the Linux kernel?

On some machines I have

net.inet.tcp.sendspace=131072
net.inet.tcp.recvspace=131072
net.inet6.tcp6.sendspace=131072
net.inet6.tcp6.recvspace=131072

net.inet.tcp.recvbuf_auto=0
net.inet.tcp.sendbuf_auto=0
net.inet6.tcp6.recvbuf_auto=0
net.inet6.tcp6.sendbuf_auto=0

which may not be the right thing, but at one point I had trouble with
the auto stuff not rampning up fast enough.

> When the server is the B laptop running W10, I get:
>
> $ iperf3 -c brutus.lorien.lan
> Connecting to host brutus.lorien.lan, port 5201
> [  4] local 192.168.0.5 port 43654 connected to 192.168.0.36 port 5201
> [ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
> [  4]   0.00-1.00   sec   106 MBytes   885 Mbits/sec    0    220 KBytes
> [  4]   1.00-2.00   sec   108 MBytes   902 Mbits/sec    0    220 KBytes
> [  4]   2.00-3.00   sec   112 MBytes   938 Mbits/sec    0    220 KBytes
> [  4]   3.00-4.00   sec   111 MBytes   934 Mbits/sec    0    220 KBytes
> [  4]   4.00-5.00   sec   112 MBytes   935 Mbits/sec    0    220 KBytes
> [  4]   5.00-6.00   sec   112 MBytes   941 Mbits/sec    0    220 KBytes
> [  4]   6.00-7.00   sec   112 MBytes   941 Mbits/sec    0    220 KBytes
> [  4]   7.00-8.00   sec   109 MBytes   917 Mbits/sec    0    220 KBytes
> [  4]   8.00-9.00   sec   112 MBytes   943 Mbits/sec    0    220 KBytes
> [  4]   9.00-10.00  sec   112 MBytes   942 Mbits/sec    0    220 KBytes
> - - - - - - - - - - - - - - - - - - - - - - - - -
> [ ID] Interval           Transfer     Bandwidth       Retr
> [  4]   0.00-10.00  sec  1.08 GBytes   928 Mbits/sec    0             sender
> [  4]   0.00-10.00  sec  1.08 GBytes   928 Mbits/sec                  receiver
>
> - e.g. from the start the speed is close to the max.

close, but the first interval is slower, indicating some rampup.
That's expected.

> The lack of symetry is strange - from NetBSD to W10 - full speed; from
> W10 to NetBSD - about a third... At the same time there is no
> significant difference if instead of W10 you put Linux or FreeBSD -
> both ways it is similar. And it can't be thrown at iperf3 on W10 only
> - when the server is Linux or FreeBSD, the speed is as expected.

I wouldn't expect symmetry.  A TCP connection being exercised at full
speed involves code on the sender that deals with the congestion window,
fast retransmit, etc. based on acknowledgements (and SACK).  The
receiver's code that matters is about generating acks (and there is
usually some delayed ack notion).  Similarly, the sending side of one
driver and receiving side of the other driver are being stressed.


Home | Main Index | Thread Index | Old Index