amd64/144148: [msk] Slow network performance and high system cpu
load while transfering data
Emanuele A. Bagnaschi
zephyrus.271 at gmail.com
Sat Feb 20 20:50:01 UTC 2010
>Number: 144148
>Category: amd64
>Synopsis: [msk] Slow network performance and high system cpu load while transfering data
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-amd64
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sat Feb 20 20:50:00 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator: Emanuele A. Bagnaschi
>Release: RELENG8
>Organization:
>Environment:
FreeBSD polaris 8.0-STABLE FreeBSD 8.0-STABLE #31: Fri Feb 19 18:55:27 CET 2010 toor at polaris:/usr/obj/usr/src/sys/POLARIS amd64
>Description:
Hi,
I've been experiencing a troubling issue with a Marvell 8072 NIC on an HP
ProBook 4710s.
I first noticed that there is a problem with the NIC while transferring some files with scp to a FreeBSD8-STABLE server: CPUs usage sky-rocketed to 100% (system) and network performance was awful (about 1.8 MiB/s).
At first I reproduced the issue in a controlled way with 'ttcp' but I was informed on the FreeBSD stable mailing that it is better to use 'netperf' due to some problem with 'ttcp' threading code. Therefore I repeated the tests with netperf.
The tests show that the maximum achievable transfer rate is about 2 MiB/s, that disabling tso and txcsum (as suggested by Pyun YongHyeon on the FreeBSD stable mailing list) help a bit but does not resolve the problem and that the NIC works as expected on Linux (so I think that we can rule out that the problem is server side). The 'ttcp' tests were also originally executed with MSI interrupts disabled, again with no improvements.
All tests were run with no firewall on both systems.
You can find the full 'netperf' output attached.
Here it's some relevant information to identify the NIC:
first from 'dmesg'
mskc0: <Marvell Yukon 88E8072 Gigabit Ethernet> port 0x2000-0x20ff mem
0x90100000-0x90103fff irq 17 at device 0.0 on pci134
msk0: <Marvell Technology Group Ltd. Yukon EX Id 0xb5 Rev 0x02> on mskc0
msk0: Ethernet address: 00:25:b3:52:fc:fa
miibus0: <MII bus> on msk0
mskc0: [FILTER]
msk0: link state changed to DOWN
msk0: link state changed to UP
and then from 'pciconf -lv'
mskc0 at pci0:134:0:0: class=0x020000 card=0x3074103c chip=0x436c11ab
rev=0x10 hdr=0x00
vendor = 'Marvell Semiconductor (Was: Galileo Technology Ltd)'
device = 'Marvell 8072 Ethernet Nic (88E8072)'
class = network
subclass = ethernet
Here it's the output of 'ifconfig':
msk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu
1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether 00:25:b3:52:fc:fa
inet 192.168.1.4 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex,flag0,flag1>)
satus: active
According to Pyun YongHyeon (again on the FreeBSD stable mailing lists), the NIC is a Yukon Extreme controller revision B0 and it is know that it has some silicon bugs.
I know that, without errata and data sheets, probably there is not much that can be done at the moment, but I thought that filing a PR would be at least a good way to point out the issue. Thanks for any help.
Best regards
Emanuele A. Bagnaschi
>How-To-Repeat:
Transfer data trough the network interface.
>Fix:
Patch attached with submission follows:
All netperf runs were executed with the following command line:
netperf -T TCP_SENDFILE -H hostname -f 'M' -I 99,5 -i 10,2
--
* notebook - Linux 2.6.32 - hostname: elsinore *
* server - FreeBSD8-STABLE - hostname:atlantis *
FIRST RUN - netperf executed on elsinore (Linux - Laptop)
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to atlantis (192.168.1.1) port 0 AF_INET : +/-2.500% @ 99% conf. : cpu bind
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
65536 16384 16384 10.04 11.19
SECOND RUN - netperf executed on atlantis (FreeBSD - Server)
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to elsinore (192.168.1.4) port 0 AF_INET : +/-2.500% @ 99% conf. : cpu bind
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
87380 32768 32768 10.02 11.10
-----
* notebook - FreeBSD8-STABLE - hostname:polaris - msk with tcxsum and tso disabled *
* server - FreeBSD8-STABLE - hostname:atlantis *
FIRST RUN - netperf executed on polaris (FreeBSD - laptop)
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to atlantis (192.168.1.1) port 0 AF_INET : +/-2.500% @ 99% conf. : cpu bind
!!! WARNING
!!! Desired confidence was not achieved within the specified iterations.
!!! This implies that there was variability in the test environment that
!!! must be investigated before going further.
!!! Confidence intervals: Throughput : 74.033%
!!! Local CPU util : 0.000%
!!! Remote CPU util : 0.000%
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
65536 32768 32768 11.44 2.23
SECOND RUN - netperf executed on atlantis (FreeBSD - server)
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to elsinore (192.168.1.4) port 0 AF_INET : +/-2.500% @ 99% conf. : cpu bind
!!! WARNING
!!! Desired confidence was not achieved within the specified iterations.
!!! This implies that there was variability in the test environment that
!!! must be investigated before going further.
!!! Confidence intervals: Throughput : 10.916%
!!! Local CPU util : 0.000%
!!! Remote CPU util : 0.000%
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
65536 32768 32768 10.08 2.58
-----
* notebook - FreeBSD8-STABLE - hostname:polaris - msk with txcsum and tso enabled *
* server - FreeBSD8-STABLE - hostname:atlantis *
FIRST RUN - polaris transmits, atlantis receives
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to atlantis (192.168.1.1) port 0 AF_INET : +/-2.500% @ 99% conf. : cpu bind
netperf: data send error: Connection reset by peer
len was -1
SECOND RUN - polaris receives, atlantis transmits
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to elsinore (192.168.1.4) port 0 AF_INET : +/-2.500% @ 99% conf. : cpu bind
!!! WARNING
!!! Desired confidence was not achieved within the specified iterations.
!!! This implies that there was variability in the test environment that
!!! must be investigated before going further.
!!! Confidence intervals: Throughput : 5.228%
!!! Local CPU util : 0.000%
!!! Remote CPU util : 0.000%
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. MBytes/sec
65536 32768 32768 10.08 2.63
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-amd64
mailing list