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

Attachment: pgpKeTJXldmzI.pgp
Description: PGP signature

Reply via email to