Bjoern A. Zeeb wrote:
On 23 Sep 2017, at 6:32, Stephen Hurd wrote:

Bjoern A. Zeeb wrote:
On 23 Sep 2017, at 1:35, Stephen Hurd wrote:

Author: shurd
Date: Sat Sep 23 01:35:14 2017
New Revision: 323942
URL: https://svnweb.freebsd.org/changeset/base/323942

Log:
   Chain mbufs before passing to if_input()

   Build a list of mbufs to pass to if_input() after LRO. Results in
   12% small packet forwarding rate improvement.
forwarding seems a confusing word here..

The test was small (64 byte frames) received on one interface, then sent out on a different one using the net.inet.ip.forwarding sysctl (controlled via the gateway_enable setting in rc.conf).

Then this makes no sense as we don’t do LRO if forwarding is enabled on the machine;
https://svnweb.freebsd.org/base/head/sys/netinet/tcp_lro.c?annotate=317390#l645

Basically, it changed from this:

foreach (mbuf in rx) {
  if (lro && tcp_lro_rx(mbuf) == 0)
    continue;
  if_input(mbuf)
}

To this:

prev_mbuf = first_mbuf = NULL;
foreach (mbuf in rx) {
  if (lro && tcp_lro_rx(mbuf) == 0)
    continue;
  if (prev_mbuf) {
    prev_mbuf->m_nextpkt = mbuf;
    prev_mbuf = mbuf;
  }
  else {
    first_mbuf = prev_mbuf = mbuf;
  }
}

if (first_mbuf)
  if_input(first_mbuf);

So while before it called if_input() for each separate mbuf that was not LROed, it now builds a chain of mbufs that were not LROed, and makes a single call to if_input() with the whole chain. For cases like packet forwarding where no packets are LROed, performance is better.
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to