Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Jan 2012 15:27:18 -0800
From:      YongHyeon PYUN <pyunyh@gmail.com>
To:        "Vladislav V. Prodan" <universite@ukr.net>
Cc:        net@freebsd.org
Subject:   Re: Lack of performance re0 (RTL8111/8168B)
Message-ID:  <20120113232718.GC18199@michelle.cdnetworks.com>
In-Reply-To: <4F10B1B3.6090908@ukr.net>
References:  <4F109F79.5090406@ukr.net> <20120113221548.GA18199@michelle.cdnetworks.com> <4F10B1B3.6090908@ukr.net>

next in thread | previous in thread | raw e-mail | index | archive | help

--rJwd6BRFiFCcLxzm
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sat, Jan 14, 2012 at 12:35:31AM +0200, Vladislav V. Prodan wrote:
> 14.01.2012 0:15, YongHyeon PYUN wrote:
> > On Fri, Jan 13, 2012 at 11:17:45PM +0200, Vladislav V. Prodan wrote:
> >>
> >> Tell me, what a performance in pps a network card RTL8111/8168B?
> >> Can I somehow increase it?
> >> Experimentally, since it begins to fall off 80Kpps: (
> >>
> > 
> > RX performance number will show much better than that but TX is
> > major bottleneck of controller.  I tried hard to enhance TX
> > performance for the controller but I'm under the impression that
> > that number would be the maximum(around 90Kpps) and this is also
> > similar number what I got on Linux.
> > Given that re(4) controllers are for non-server grade systems I
> > wouldn't be surprised to see that number.  If you need higher pps,
> > choose controllers targeted for servers.  Alternatively, low cost
> > controllers from JMicron/Atheros also show decent TX/RX
> > performance numbers.
> 
> That's why I would like to get some numerical limitations of the
> controller re (4).
> While there is no way to put a network card from Intel.
> 
> > 
> >>
> >> Jan 13 18:12:49 XXX kernel: re0: watchdog timeout
> >> Jan 13 18:12:49 XXX kernel: re0: link state changed to DOWN
> >> Jan 13 18:12:53 XXX kernel: re0: link state changed to UP
> >>
> > 
> > I'm more concerned on watchdog timeouts than performance numbers.
> > Would you show me re(4) related message from dmesg(8) output?
> See dmesg output below.
> 
> > And if you know how to reliably trigger the watchdog timeout, would
> > you share with us?
> 
> DDoS attack has undergone server and choked these packages: (

Sound like hard to reproduce this on my box.

> Trafshow showed a peak of 110K pps, but immediately operational watchdog
> timeout.
> I would appreciate help in setting up a network interface, so as long as
> it is not turned off by such scams.
> 
> >>
> >>
> >> # uname -a
> >> FreeBSD pvppw.org 9.0-PRERELEASE FreeBSD 9.0-PRERELEASE #1: Mon Dec  5
> >> 14:56:07 EET 2011     root@XXX:/usr/obj/usr/src/sys/XXX.2  amd64
> >>
> >> # pciconf -lv | grep -A 4 "re0@"
> >> re0@pci0:2:0:0: class=0x020000 card=0x84321043 chip=0x816810ec rev=0x06
> >> hdr=0x00
> >>     vendor     = 'Realtek Semiconductor Co., Ltd.'
> >>     device     = 'RTL8111/8168B PCI Express Gigabit Ethernet controller'
> >>     class      = network
> >>     subclass   = ethernet
> >>
> > 
> > RealTek controllers tend to use the same PCI id for different
> > controllers so pciconf(8) does not help here.  re(4) may have shown
> > more details on your controller in dmesg output.
> > 
> Jan 13 18:57:03 XXX kernel: re0: <RealTek 8168/8111 B/C/CP/D/DP/E PCIe
> Gigabit Ethernet> port 0xe800-0xe8ff mem
> 0xfcfff000-0xfcffffff,0xfcffffff,0xfcff8000-0xfcffbfff irq 18 at device
> 0.0 on pci2
> Jan 13 18:57:03 XXX kernel: re0: Using 1 MSI-X message
> Jan 13 18:57:03 XXX kernel: re0: Chip rev. 0x2c800000
> Jan 13 18:57:03 XXX kernel: re0: MAC rev. 0x00000000
> Jan 13 18:57:03 XXX kernel: miibus0: <MII bus> on re0
> Jan 13 18:57:03 XXX kernel: rgephy0: <RTL8169S/8110S/8211 1000BASE-T
> media interface> PHY 1 on miibus0
> Jan 13 18:57:03 XXX kernel: rgephy0:  none, 10baseT, 10baseT-FDX,
> 10baseT-FDX-flow, 100baseTX, 100baseTX-FDX, 100baseTX-FDX-flow,
> 1000baseT, 1000baseT-master, 1000baseT-FDX, 1000baseT-FDX-master,
> 1000baseT-FDX-flow, 1000baseT-FDX-flow-master, auto, auto-flow
> Jan 13 18:57:03 XXX kernel: re0: Ethernet address: 14:da:e9:75:5f:ee
> 

Thanks, your controller is RTL8168E-VL.
Could you try attached patch?  The patch also contains unrelated
one for the issue but it wouldn't hurt either.

--rJwd6BRFiFCcLxzm
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="re.txfifo.diff"

Index: sys/dev/re/if_re.c
===================================================================
--- sys/dev/re/if_re.c	(revision 230063)
+++ sys/dev/re/if_re.c	(working copy)
@@ -3147,7 +3147,13 @@
 	} else
 		CSR_WRITE_4(sc, RL_TXCFG, RL_TXCFG_CONFIG);
 
-	CSR_WRITE_1(sc, RL_EARLY_TX_THRESH, 16);
+	/* XXX */
+	if ((sc->rl_flags & RL_FLAG_CMDSTOP_WAIT_TXQ) != 0) {
+		CSR_WRITE_1(sc, RL_EARLY_TX_THRESH, 4992 / 128);
+		CSR_WRITE_4(sc, RL_TXCFG, CSR_READ_4(sc, RL_TXCFG) |
+		    RL_TXCFG_AUTO_FIFO);
+	} else
+		CSR_WRITE_1(sc, RL_EARLY_TX_THRESH, 16);
 
 	/*
 	 * Set the initial RX configuration.
@@ -3558,7 +3564,6 @@
 	}
 
 	/* Free the TX list buffers. */
-
 	for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) {
 		txd = &sc->rl_ldata.rl_tx_desc[i];
 		if (txd->tx_m != NULL) {
@@ -3572,11 +3577,10 @@
 	}
 
 	/* Free the RX list buffers. */
-
 	for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) {
 		rxd = &sc->rl_ldata.rl_rx_desc[i];
 		if (rxd->rx_m != NULL) {
-			bus_dmamap_sync(sc->rl_ldata.rl_tx_mtag,
+			bus_dmamap_sync(sc->rl_ldata.rl_rx_mtag,
 			    rxd->rx_dmamap, BUS_DMASYNC_POSTREAD);
 			bus_dmamap_unload(sc->rl_ldata.rl_rx_mtag,
 			    rxd->rx_dmamap);
@@ -3584,6 +3588,20 @@
 			rxd->rx_m = NULL;
 		}
 	}
+
+	if ((sc->rl_flags & RL_FLAG_JUMBOV2) != 0) {
+		for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) {
+			rxd = &sc->rl_ldata.rl_jrx_desc[i];
+			if (rxd->rx_m != NULL) {
+				bus_dmamap_sync(sc->rl_ldata.rl_jrx_mtag,
+				    rxd->rx_dmamap, BUS_DMASYNC_POSTREAD);
+				bus_dmamap_unload(sc->rl_ldata.rl_jrx_mtag,
+				    rxd->rx_dmamap);
+				m_freem(rxd->rx_m);
+				rxd->rx_m = NULL;
+			}
+		}
+	}
 }
 
 /*
Index: sys/pci/if_rlreg.h
===================================================================
--- sys/pci/if_rlreg.h	(revision 230063)
+++ sys/pci/if_rlreg.h	(working copy)
@@ -142,6 +142,7 @@
  * TX config register bits
  */
 #define	RL_TXCFG_CLRABRT	0x00000001	/* retransmit aborted pkt */
+#define	RL_TXCFG_AUTO_FIFO	0x00000080	/* 8168E-VL or higher */
 #define	RL_TXCFG_MAXDMA		0x00000700	/* max DMA burst size */
 #define	RL_TXCFG_QUEUE_EMPTY	0x00000800	/* 8168E-VL or higher */
 #define	RL_TXCFG_CRCAPPEND	0x00010000	/* CRC append (0 = yes) */

--rJwd6BRFiFCcLxzm--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120113232718.GC18199>