On Mon, Aug 29, 2016 at 08:30:37PM +0200, Alexander Bluhm wrote:
> On Mon, Aug 29, 2016 at 07:10:48PM +0200, Mike Belopuhov wrote:
> > Due to a recent change in -current the socket sending routine
> > has started producing small data packets crossing memory page
> > boundary. This is not supported by Xen and kernels with this
> > change will experience broken bulk TCP transmit behaviour.
> > We're working on fixing it.
>
> For the same reason some old i386 machines from 2006 and 2005 have
> performance problems when sending data with tcpbench.
>
> em 82573E drops to 200 MBit/sec output, 82546GB and 82540EM do only
> 10 MBit anymore.
>
> With the patch below I get 946, 642, 422 MBit/sec output performance
> over these chips respectively.
>
> Don't know wether PAGE_SIZE is the correct fix as I think the problem
> is more related to the network chip than to the processor's page
> size.
does this diff help those chips?
Index: if_em.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_em.c,v
retrieving revision 1.331
diff -u -p -r1.331 if_em.c
--- if_em.c 13 Apr 2016 10:34:32 -0000 1.331
+++ if_em.c 29 Aug 2016 23:52:07 -0000
@@ -2134,7 +2134,7 @@ em_setup_transmit_structures(struct em_s
pkt = &sc->sc_tx_pkts_ring[i];
error = bus_dmamap_create(sc->sc_dmat, MAX_JUMBO_FRAME_SIZE,
EM_MAX_SCATTER / (sc->pcix_82544 ? 2 : 1),
- MAX_JUMBO_FRAME_SIZE, 0, BUS_DMA_NOWAIT, &pkt->pkt_map);
+ MAX_JUMBO_FRAME_SIZE, 4096, BUS_DMA_NOWAIT, &pkt->pkt_map);
if (error != 0) {
printf("%s: Unable to create TX DMA map\n",
DEVNAME(sc));