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/

Reply via email to