commit 6dccd16b7c2703e8bbf8bca62b5cf248332afbe2 kills r8169 send performance

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

 



Heip!

(commit: "r8169: merge with version 6.001.00 of Realtek's r8169 driver")


In current 2.6.23-rc8 snapshot r8169 send performance is bad, around 
32MB/s. In 2.6.22 it was around 83MB/s. Interestingly, the receive 
performance has increased from around 85MB/s to 96MB/s at the same time!


Git bisect gave commit 6dccd16b7c2703e8bbf8bca62b5cf248332afbe2 as the 
culprit, and reverting it from the 2.6.23-rc8 increases send speed back to 
.22 level. (It didn't revert cleanly and the file needed some cleaning up 
by hand.)


Performance data:

(The other end of iperf is machine with kernel 2.6.22.6 and nForce3 
built-in nic.)

2.6.22 (and 2.6.23-rc8 with that change reverted)
===cut
$ iperf -m -l32k -c gw -r
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to gw, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[  5] local 10.0.0.1 port 36068 connected with 10.0.0.254 port 5001
[  5]  0.0-10.0 sec    832 MBytes    696 Mbits/sec
[  5] MSS size 7148 bytes (MTU 7188 bytes, unknown interface)
[  4] local 10.0.0.1 port 5001 connected with 10.0.0.254 port 59713
[  4]  0.0-10.2 sec    825 MBytes    678 Mbits/sec
[  4] MSS size 7148 bytes (MTU 7188 bytes, unknown interface)

$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 1960780   2948  32948    0    0   236    11   48  327  2  3 86  9
 0  0      0 1960660   2948  32972    0    0     0     0   94  944  0  0 100  0
 0  0      0 1960752   2952  32996    0    0    14     0   90  233  0  0 100  0
 0  0      0 1960776   2952  32996    0    0     0     0   89  964  0  0 100  0
 1  0      0 1959544   3044  33788    0    0   420    52  154  458  0  1 97  2
 0  0      0 1940288   3080  34704    0    0   434    34 16075 2198  0  2 98  0
 0  0      0 1940116   3080  34704    0    0     0     0 16464 2835  0  1 99  0
 0  0      0 1940020   3080  34704    0    0     0    58 16590 2194  0  1 99  0
 0  0      0 1940316   3080  34704    0    0     0     0 16489 2887  0  1 99  0
 0  0      0 1940268   3080  34704    0    0     0     0 16505 2990  0  1 99  0
 0  0      0 1957936   3080  34704    0    0     0     4 23482 24903  0  2 98  0
 0  0      0 1957720   3080  34704    0    0     0     0 24270 29139  0  2 98  0
 0  0      0 1957980   3080  34704    0    0     0     4 22045 27621  0  2 98  0
 1  0      0 1958004   3080  34704    0    0     0     0 24383 30106  0  2 98  0
 0  0      0 1957956   3080  34704    0    0     0     0 21984 27709  0  2 98  0
 0  0      0 1958112   3080  34704    0    0     0     0 3083 5826  0  0 100  0
 0  0      0 1958168   3080  34704    0    0     0     0   83 2392  0  0 100  0
===cut


2.6.23-rc8 without changes
===cut
$ iperf -m -l32k -c gw -r
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to gw, TCP port 5001
TCP window size: 73.0 KByte (default)
------------------------------------------------------------
[  5] local 10.0.0.1 port 55265 connected with 10.0.0.254 port 5001
[  5]  0.0-10.1 sec    328 MBytes    272 Mbits/sec
[  5] MSS size 7148 bytes (MTU 7188 bytes, unknown interface)
[  4] local 10.0.0.1 port 5001 connected with 10.0.0.254 port 41340
[  4]  0.0-10.0 sec    964 MBytes    805 Mbits/sec
[  4] MSS size 7148 bytes (MTU 7188 bytes, unknown interface)

$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 1961244   3756  31580    0    0   292    13   52  331  2  4 84 10
 0  0      0 1959916   3756  32368    0    0   436     0  186  893  0  0 99  0
 0  0      0 1944668   3756  32504    0    0     0     0 7141 2223  0  2 98  0
 0  0      0 1948260   3756  32504    0    0     0     0 7012 2213  0  2 98  0
 1  0      0 1946532   3756  32504    0    0     0     0 7001 2222  0  1 99  0
 1  0      0 1942276   3756  32504    0    0     0     0 6996 2168  0  2 98  0
 1  0      0 1943336   3756  32504    0    0     0     0 6946 2181  0  0 100  0
 2  0      0 1959144   3848  33296    0    0   420    52 19020 24412  0  2 96  2
 1  0      0 1959064   3884  33344    0    0     0    82 21825 30835  0  3 97  0
 0  0      0 1959152   3884  33344    0    0     0     0 21816 32094  0  2 98  0
 0  0      0 1959040   3884  33344    0    0     0     6 21850 31934  0  3 96  0
 2  0      0 1959072   3884  33344    0    0     0     0 21812 32068  0  2 98  0
 0  0      0 1959104   3884  33344    0    0     0     0 5247 9402  0  1 99  0
===cut


lspci
===cut
00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller (rev 02)
00:01.0 PCI bridge: Intel Corporation 82G33/G31/P35/P31 Express PCI Express Root Port (rev 02)
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 02)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 02)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 02)
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 02)
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 02)
00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 92)
00:1f.0 ISA bridge: Intel Corporation 82801IR (ICH9R) LPC Interface Controller (rev 02)
00:1f.2 SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) 6 port SATA AHCI Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 02)
01:00.0 VGA compatible controller: ATI Technologies Inc R580 [Radeon X1900]
01:00.1 Display controller: ATI Technologies Inc Unknown device 7264
03:00.0 SATA controller: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)
03:00.1 IDE interface: JMicron Technologies, Inc. JMicron 20360/20363 AHCI Controller (rev 02)
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
04:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
===cut

lspci -vx, only eth0 device
===cut
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
	Subsystem: ABIT Computer Corp. Unknown device 1083
	Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 17
	I/O ports at ae00 [size=256]
	Memory at fdcff000 (32-bit, non-prefetchable) [size=256]
	[virtual] Expansion ROM at fdb00000 [disabled] [size=128K]
	Capabilities: [dc] Power Management version 2
00: ec 10 67 81 07 00 b0 02 10 00 00 02 08 20 00 00
10: 01 ae 00 00 00 f0 cf fd 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 7b 14 83 10
30: 00 00 00 00 dc 00 00 00 00 00 00 00 07 01 20 40
===cut


parts of .config (full .config available on request)
===cut
CONFIG_NO_HZ=y
CONFIG_HZ=1000
CONFIG_R8169=y
CONFIG_R8169_NAPI=y
===cut

I also tried with CONFIG_R8169_NAPI=n but that didn't make a difference.

ethtool -k eth0
===cut
Offload parameters for eth0:
Cannot get device udp large send offload settings: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: off
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off
===cut

I tried also other combinations. scatter-gather caused small performance 
penalty, as well as not using jumbo frames (7200). Other settings didn't 
matter.


//T
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux