Subject: Re: Realtek r8168 slow outbound transfer - potential fix/workaround

From: Bruce Cole <[email-masked]>
Date: Mon, 13 Aug 2007 11:53:02 -0700

David Gundersen <[email-masked]> :
 > Now, on to my workaround. Putting a spin style wait like the following
 > in front of the line above seemed to solve the problem for me:
 >
 >
 > if (RTL_R8(TxPoll) & NPQ) {
 >      for (i = 20; i > 0; i--) {
 >       if (!(RTL_R8(TxPoll) & NPQ))
 >        break;
 >       udelay(25);
 >     }
 > }
 >
 > ...
 >
 > RTL_W8(TxPoll, NPQ);

What's the status of this fix?  It (or something more refined) seems 
necessary
to correct the current performance problems with this driver.  Some
background:

I just got a motherboard (gigabyte ga-p35-ds3p) which has built-in ethernet
via the realtek rtl8111b chip.  I've been experiencing serious performance
problems when it comes to transmitting files across the network using samba.
By serious I mean throughput is probably 200X slower than it should be.  
This
is the same problem reported by several others.  Some references:

"[Samba] Miserable read performance":
http://lists.samba.org/archive/samba/2007-July/133553.html
"[Samba] RE: Samba running slow"
http://lists.samba.org/archive/samba/2007-January/128846.html
"Re: Realtek RTL8111B serious performance issues"
http://www.mail-archive.com/[email-masked]/msg42860.html

I started with the stock 2.6.22.1 driver, then I tried the
20070628-2.6.22-rc6-r8169-test.patch on top of it, which made no difference.
Then I tried David Gundersen's spin-wait patch and performance was fixed!

Oddly enough, I don't see this performance problem when I test transmit
performance using ttcp, or even when I transfer files with scp.  It 
seems the
extra application layer latency of something like samba is necessary to
reproduce the problem.

I can troubleshoot in more detail if that would help get a proper fix
developed.