• jbaron@akamai.com's avatar
    macvlan: optimize the receive path · d1dd9119
    jbaron@akamai.com authored
    The netif_rx() call on the fast path of macvlan_handle_frame() appears to
    be there to ensure that we properly throttle incoming packets. However, it
    would appear as though the proper throttling is already in place for all
    possible ingress paths, and that the call is redundant. If packets are arriving
    from the physical NIC, we've already throttled them by this point. Otherwise,
    if they are coming via macvlan_queue_xmit(), it calls either
    'dev_forward_skb()', which ends up calling netif_rx_internal(), or else in
    the broadcast case, we are throttling via macvlan_broadcast_enqueue().
    
    The test results below are from off the box to an lxc instance running macvlan.
    Once the tranactions/sec stop increasing, the cpu idle time has gone to 0.
    Results are from a quad core Intel E3-1270 V2@3.50GHz box with bnx2x 10G card.
    
    for i in {10,100,200,300,400,500};
    do super_netperf $i -H $ip -t TCP_RR; done
    Average of 5 runs.
    
    trans/sec 		 trans/sec
    (3.17-rc7-net-next)      (3.17-rc7-net-next + this patch)
    ----------               ----------
    208101                   211534 (+1.6%)
    839493                   850162 (+1.3%)
    845071                   844053 (-.12%)
    816330                   819623 (+.4%)
    778700                   789938 (+1.4%)
    735984                   754408 (+2.5%)
    Signed-off-by: default avatarJason Baron <jbaron@akamai.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d1dd9119
macvlan.c 38.9 KB