On Tue, Nov 09, 2021 at 07:13:13PM +0000, Stuart Henderson wrote: > What's the status of this diff?
After discussion with jan@ we came to the conclusion that this fix is in the wrong layer. It is better to have a clever algorithm in TCP output to send window updates. jan@ is working on this. bluhm > On 2021/09/21 17:30, Alexander Bluhm wrote: > > On Sat, Sep 18, 2021 at 02:35:20PM +0200, Jan Klemkow wrote: > > > The following diff removes the every 2nd ACK feature again and ensures > > > that we send out an ACK if soreceive() empties the receive buffer. > > > > Looks good in my perform tests, 22% tcp throughput increase. > > > > http://bluhm.genua.de/perform/results/2021-09-20T11:05:31Z/perform.html > > http://bluhm.genua.de/perform/results/2021-09-20T11:05:31Z/gnuplot/tcp.html > > > > > We are so close to 7.0, that I would suggest to commit this after the > > > release. Thus, we don't risk another last minute regression. > > > > > > OK? > > > > OK bluhm@ post 7.0 > > > > > Index: netinet/tcp_input.c > > > =================================================================== > > > RCS file: /cvs/src/sys/netinet/tcp_input.c,v > > > retrieving revision 1.370 > > > diff -u -p -r1.370 tcp_input.c > > > --- netinet/tcp_input.c 9 Aug 2021 17:03:08 -0000 1.370 > > > +++ netinet/tcp_input.c 18 Sep 2021 07:53:45 -0000 > > > @@ -176,8 +176,7 @@ do { \ > > > struct ifnet *ifp = NULL; \ > > > if (m && (m->m_flags & M_PKTHDR)) \ > > > ifp = if_get(m->m_pkthdr.ph_ifidx); \ > > > - if (TCP_TIMER_ISARMED(tp, TCPT_DELACK) || \ > > > - (tcp_ack_on_push && (tiflags) & TH_PUSH) || \ > > > + if ((tcp_ack_on_push && (tiflags) & TH_PUSH) || \ > > > (ifp && (ifp->if_flags & IFF_LOOPBACK))) \ > > > tp->t_flags |= TF_ACKNOW; \ > > > else \ > > > Index: netinet/tcp_usrreq.c > > > =================================================================== > > > RCS file: /cvs/src/sys/netinet/tcp_usrreq.c,v > > > retrieving revision 1.181 > > > diff -u -p -r1.181 tcp_usrreq.c > > > --- netinet/tcp_usrreq.c 30 Apr 2021 13:52:48 -0000 1.181 > > > +++ netinet/tcp_usrreq.c 18 Sep 2021 07:53:45 -0000 > > > @@ -329,8 +329,15 @@ tcp_usrreq(struct socket *so, int req, s > > > * template for a listening socket and hence the kernel > > > * will panic. > > > */ > > > - if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) != 0) > > > + if ((so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING)) != 0) { > > > + /* > > > + * If soreceive() empty the receive buffer, we have to > > > + * send a window update. > > > + */ > > > + if (so->so_rcv.sb_cc == 0) > > > + tp->t_flags |= TF_ACKNOW; > > > (void) tcp_output(tp); > > > + } > > > break; > > > > > > /* > >