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.
bluhm
Index: kern/uipc_socket.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/kern/uipc_socket.c,v
retrieving revision 1.155
diff -u -p -r1.155 uipc_socket.c
--- kern/uipc_socket.c 25 Aug 2016 14:13:19 -0000 1.155
+++ kern/uipc_socket.c 29 Aug 2016 18:02:24 -0000
@@ -544,7 +544,7 @@ m_getuio(struct mbuf **mp, int atomic, l
resid = ulmin(resid, space);
if (resid >= MINCLSIZE) {
- MCLGETI(m, M_NOWAIT, NULL, ulmin(resid, MAXMCLBYTES));
+ MCLGETI(m, M_NOWAIT, NULL, ulmin(resid, PAGE_SIZE));
if ((m->m_flags & M_EXT) == 0)
goto nopages;
mlen = m->m_ext.ext_size;