• David S. Miller's avatar
    ipv4: Optimize flow initialization in output route lookup. · 44713b67
    David S. Miller authored
    We burn a lot of useless cycles, cpu store buffer traffic, and
    memory operations memset()'ing the on-stack flow used to perform
    output route lookups in __ip_route_output_key().
    
    Only the first half of the flow object members even matter for
    output route lookups in this context, specifically:
    
    FIB rules matching cares about:
    
    	dst, src, tos, iif, oif, mark
    
    FIB trie lookup cares about:
    
    	dst
    
    FIB semantic match cares about:
    
    	tos, scope, oif
    
    Therefore only initialize these specific members and elide the
    memset entirely.
    
    On Niagara2 this kills about ~300 cycles from the output route
    lookup path.
    
    Likely, we can take things further, since all callers of output
    route lookups essentially throw away the on-stack flow they use.
    So they don't care if we use it as a scratch-pad to compute the
    final flow key.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Acked-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    44713b67
route.c 80 KB