Yes, I'm also seeing good performance improvement after adding likely() and prefetch().
On Sun, Apr 1, 2018 at 2:50 PM, Stephen Hemminger <step...@networkplumber.org> wrote: > On Sun, 1 Apr 2018 20:31:21 +0200 > Anton Gary Ceph <agac...@gmail.com> wrote: > >> As the Linux networking stack is growing, more and more protocols are >> added, increasing the complexity of stack itself. >> Modern processors, contrary to common belief, are very bad in branch >> prediction, so it's our task to give hints to the compiler when possible. >> >> After a few profiling and analysis, turned out that the ethertype field >> of the packets has the following distribution: >> >> 92.1% ETH_P_IP >> 3.2% ETH_P_ARP >> 2.7% ETH_P_8021Q >> 1.4% ETH_P_PPP_SES >> 0.6% don't know/no opinion >> >> From a projection on statistics collected by Google about IPv6 adoption[1], >> IPv6 should peak at 25% usage at the beginning of 2030. Hence, we should >> give proper hints to the compiler about the low IPv6 usage. >> >> Here is an iperf3 run before and after the patch: >> >> Before: >> [ ID] Interval Transfer Bandwidth Retr >> [ 4] 0.00-100.00 sec 100 GBytes 8.60 Gbits/sec 0 sender >> [ 4] 0.00-100.00 sec 100 GBytes 8.60 Gbits/sec receiver >> >> After >> [ ID] Interval Transfer Bandwidth Retr >> [ 4] 0.00-100.00 sec 109 GBytes 9.35 Gbits/sec 0 sender >> [ 4] 0.00-100.00 sec 109 GBytes 9.35 Gbits/sec receiver >> >> [1] https://www.google.com/intl/en/ipv6/statistics.html >> >> Signed-off-by: Anton Gary Ceph <agac...@gmail.com> > > I am surprised it makes that much of an impact. > > It would be easier to manage future bisection if the big patch > was split into several pieces. Bridge, bonding, netfilter, etc. > There doesn't appear to be any direct cross dependencies. > > -- Tamim PhD Candidate, Kent State University http://web.cs.kent.edu/~mislam4/