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 while transferring some files through scp to a FreeBSD8-STABLE server: CPUs usage sky-rocketed to 100% (system) and network performance was awful (about 1.8 MiB/s). I tried and succeeded in reproducing the issue with 'ttcp'. I decided to use this little benchmark because is so simple (it is linked only against libc) that I can be sure that the problem doesn't depend on scp/ssh or other parts of the system.
This is the output of 'uname -a': FreeBSD polaris 8.0-STABLE FreeBSD 8.0-STABLE #24: Sun Jan 17 21:08:02 CET 2010 t...@polaris:/usr/obj/usr/src/sys/POLARIS amd64 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' ms...@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 Attached you will find the results of my tests, I hope that the file will be self-explanatory. I'm wondering, are there any other tunable parameters (apart from MSI on/off) I should try to modify? Should I file a PR? Are there any other interesting data I should gather? With the proper guide I'm also available to contribute some code myself. Best regards -- Emanuele A. Bagnaschi
* notebook - Linux 2.6.32 - hostname: elsinore * * server - FreeBSD8-STABLE - hostname:atlantis * FIRST RUN - elsinore transmits, atlantis receives elsinore --> atlantis (output on elsinore) ttcp -n 12800 -t -s atlantis ttcp-t: buflen=8192, nbuf=12800, align=16384/0, port=5001 tcp -> atlantis ttcp-t: socket ttcp-t: connect ttcp-t: 104857600 bytes in 8.87 real seconds = 11538.31 KB/sec +++ ttcp-t: 12800 I/O calls, msec/call = 0.71, calls/sec = 1442.29 atlantis <-- elsinore (output on atlantis) ttcp -r -s ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 192.168.1.4 ttcp-r: 16777216 bytes in 1.43 real seconds = 11464.61 KB/sec +++ ttcp-r: 11562 I/O calls, msec/call = 0.13, calls/sec = 8090.45 ttcp-r: 0.0user 0.0sys 0:01real 3% 14i+1022d 502maxrss 0+2pf 11559+42csw SECOND RUN - elsinore receives, atlantis transmits elsinore <-- atlantis (output on elsinore) ttcp -r -s ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 192.168.1.1 ttcp-r: 104857600 bytes in 9.00 real seconds = 11372.89 KB/sec +++ ttcp-r: 29235 I/O calls, msec/call = 0.32, calls/sec = 3246.94 ttcp-r: 0.0user 0.7sys 0:09real 8% 0i+0d 910maxrss 0+2pf 29195+456csw atlantis --> elsinore (output on atlantis) ttcp -t -s -n 12800 elsinore ttcp-t: buflen=8192, nbuf=12800, align=16384/0, port=5001 tcp -> elsinore ttcp-t: socket ttcp-t: connect ttcp-t: 104857600 bytes in 8.99 real seconds = 11394.04 KB/sec +++ ttcp-t: 12800 I/O calls, msec/call = 0.72, calls/sec = 1424.26 ttcp-t: 0.0user 0.2sys 0:08real 3% 15i+1095d 578maxrss 0+2pf 27143+2543csw ----- * notebook - FreeBSD8-STABLE - hostname:polaris - msk with MSI enabled * * server - FreeBSD8-STABLE - hostname:atlantis * FIRST RUN - polaris transmits, atlantis receives polaris --> atlantis (output on polaris) ttcp -t -s -n 12800 atlantis ttcp-t: buflen=8192, nbuf=12800, align=16384/0, port=5001 tcp -> atlantis ttcp-t: socket ttcp-t: connect ttcp-t: 104857600 bytes in 13.63 real seconds = 7514.90 KB/sec +++ ttcp-t: 12800 I/O calls, msec/call = 1.09, calls/sec = 939.36 ttcp-t: 0.1user 10.7sys 0:13real 80% 5i+408d 674maxrss 0+1pf 1004+1525csw atlantis <-- polaris (output on atlantis) ttcp -r -s ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 192.168.1.4 ttcp-r: 104857600 bytes in 13.63 real seconds = 7512.69 KB/sec +++ ttcp-r: 76875 I/O calls, msec/call = 0.18, calls/sec = 5640.02 ttcp-r: 0.0user 0.3sys 0:13real 2% 16i+1168d 502maxrss 0+2pf 76849+2128csw SECOND RUN - polaris receives, atlantis transmits polaris <-- atlantis (output on polaris) ttcp -r -s ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 192.168.1.1 ttcp-r: 104857600 bytes in 53.68 real seconds = 1907.67 KB/sec +++ ttcp-r: 14021 I/O calls, msec/call = 3.92, calls/sec = 261.21 ttcp-r: 0.0user 14.9sys 0:53real 27% 7i+563d 600maxrss 0+2pf 1176+2765csw atlantis --> polaris (output on polaris) ttcp -t -s -n 12800 elsinore ttcp-t: buflen=8192, nbuf=12800, align=16384/0, port=5001 tcp -> elsinore ttcp-t: socket ttcp-t: connect ttcp-t: 104857600 bytes in 53.59 real seconds = 1910.75 KB/sec +++ ttcp-t: 12800 I/O calls, msec/call = 4.29, calls/sec = 238.84 ttcp-t: 0.0user 0.2sys 0:53real 0% 17i+1207d 576maxrss 0+2pf 40032+473csw ----- * notebook - FreeBSD8-STABLE - hostname:polaris - msk with MSI disabled * * server - FreeBSD8-STABLE - hostname:atlantis * FIRST RUN - polaris transmits, atlantis receives polaris --> atlantis (output on polaris) ttcp -t -s -n 12800 atlantis ttcp-t: buflen=8192, nbuf=12800, align=16384/0, port=5001 tcp -> atlantis ttcp-t: socket ttcp-t: connect ttcp-t: 104857600 bytes in 13.27 real seconds = 7716.57 KB/sec +++ ttcp-t: 12800 I/O calls, msec/call = 1.06, calls/sec = 964.57 ttcp-t: 0.2user 10.3sys 0:13real 79% 5i+419d 674maxrss 0+1pf 823+1938csw atlantis <-- polaris (output on atlantis) ttcp -r -s ~ ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 192.168.1.4 ttcp-r: 104857600 bytes in 13.27 real seconds = 7713.85 KB/sec +++ ttcp-r: 76800 I/O calls, msec/call = 0.18, calls/sec = 5785.39 ttcp-r: 0.0user 0.3sys 0:13real 2% 15i+1065d 502maxrss 0+2pf 76778+2373csw SECOND RUN - polaris receives, atlantis transmits polaris <-- atlantis (output on polaris) ttcp -r -s ttcp-r: buflen=8192, nbuf=2048, align=16384/0, port=5001 tcp ttcp-r: socket ttcp-r: accept from 192.168.1.1 ttcp-r: 104857600 bytes in 59.32 real seconds = 1726.28 KB/sec +++ ttcp-r: 13499 I/O calls, msec/call = 4.50, calls/sec = 227.57 ttcp-r: 0.0user 13.4sys 0:59real 22% 7i+545d 600maxrss 0+2pf 710+2732csw atlantis --> polaris (output on atlantis) ttcp -t -s -n 12800 elsinore ttcp-t: buflen=8192, nbuf=12800, align=16384/0, port=5001 tcp -> elsinore ttcp-t: socket ttcp-t: connect ttcp-t: 104857600 bytes in 59.22 real seconds = 1729.15 KB/sec +++ ttcp-t: 12800 I/O calls, msec/call = 4.74, calls/sec = 216.14 ttcp-t: 0.0user 0.2sys 0:59real 0% 14i+1029d 576maxrss 0+2pf 41750+287csw
pgpKeTJXldmzI.pgp
Description: PGP signature