Subject: kern/23782: wm(4) performs badly with Intel i82547EI
To: None <gnats-bugs@gnats.NetBSD.org>
From: Matthias Scheler <tron@colwyn.zhadum.de>
List: netbsd-bugs
Date: 12/17/2003 19:31:14
>Number:         23782
>Category:       kern
>Synopsis:       wm(4) performs badly with Intel i82547EI
>Confidential:   no
>Severity:       serious
>Priority:       low
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Dec 17 18:32:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     
>Release:        NetBSD 1.6ZG 2003-12-17 sources
>Organization:
Matthias Scheler                                  http://scheler.de/~matthias/
>Environment:
System: NetBSD lyssa.zhadum.de 1.6ZG NetBSD 1.6ZG (LYSSA) #0: Wed Dec 17 09:54:32 CET 2003 tron@lyssa.zhadum.de:/src/sys/compile/LYSSA i386
Architecture: i386
Machine: i386
>Description:
One of my systems used an Intel B865PERLK motherboard with an onboard
Intel i82547EI gigabit ethernet interface which is recognized by
NetBSD-current like this:

wm0 at pci2 dev 1 function 0: Intel i82547EI 1000BASE-T Ethernet, rev. 0
wm0: interrupting at ioapic0 pin 18 (irq 10)
wm0: 32-bit 33MHz PCI bus
wm0: 65536 word (16 address bits) SPI EEPROM
wm0: Ethernet address 00:07:e9:67:18:7b
igphy0 at wm0 phy 1: Intel IGP01E1000 Gigabit PHY, rev. 0
igphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto

While the interface basically works performance is very poor when the card
is pushed hard e.g. by running "ttcp" over it:

ttcp-t: buflen=8192, nbuf=65536, align=16384/0, port=5001, sockbufsize=131072  tcp  -> colwyn
ttcp-t: socket
ttcp-t: sndbuf
ttcp-t: connect
ttcp-t: 536870912 bytes in 30.54 real seconds = 17166.76 KB/sec +++
ttcp-t: 65536 I/O calls, msec/call = 0.48, calls/sec = 2145.84
ttcp-t: 0.0user 0.4sys 0:30real 1% 0i+0d 0maxrss 0+130412pf 24143+21csw

If I use this card ...

wm1 at pci3 dev 2 function 0: Intel i82540EM 1000BASE-T Ethernet, rev. 2
wm1: interrupting at ioapic0 pin 17 (irq 3)
wm1: 32-bit 33MHz PCI bus
wm1: 64 word (6 address bits) MicroWire EEPROM
wm1: Ethernet address 00:07:e9:0e:b9:a8
makphy0 at wm1 phy 1: Marvell 88E1011 Gigabit PHY, rev. 3
makphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto

... with the same motherboard, cable, switch and remote system I get more
than 800MBit/Sec.

I've activated hardware checksum offload on the card in case it matters:

wm0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        capabilities=7<IP4CSUM,TCP4CSUM,UDP4CSUM>
        enabled=7<IP4CSUM,TCP4CSUM,UDP4CSUM>
        address: 00:07:e9:67:18:7b
        media: Ethernet autoselect (1000baseT full-duplex)
        status: active
        inet 192.168.25.4 netmask 0xffffff00 broadcast 192.168.25.255
        inet6 fe80::207:e9ff:fe67:187b%wm0 prefixlen 64 scopeid 0x1

While "ttcp" is running I observed that the activity lights on the switch
go out several times for one to two seconds.

>How-To-Repeat:
Run "ttcp" over an Intel i82547EI based gigabit ethernet interface.

>Fix:
None provided.

>Release-Note:
>Audit-Trail:
>Unformatted: