• Eric Dumazet's avatar
    ipv4: rcu conversion in ip_route_output_slow · 0197aa38
    Eric Dumazet authored
    ip_route_output_slow() is enclosed in an rcu_read_lock() protected
    section, so that no references are taken/released on device, thanks to
    __ip_dev_find() & dev_get_by_index_rcu()
    
    Tested with ip route cache disabled, and a stress test :
    
    Before patch:
    
    elapsed time :
    
    real	1m38.347s
    user	0m11.909s
    sys	23m51.501s
    
    Profile:
    
    13788.00 22.7% ip_route_output_slow [kernel]
     7875.00 13.0% dst_destroy          [kernel]
     3925.00  6.5% fib_semantic_match   [kernel]
     3144.00  5.2% fib_rules_lookup     [kernel]
     3061.00  5.0% dst_alloc            [kernel]
     2276.00  3.7% rt_set_nexthop       [kernel]
     1762.00  2.9% fib_table_lookup     [kernel]
     1538.00  2.5% _raw_read_lock       [kernel]
     1358.00  2.2% ip_output            [kernel]
    
    After patch:
    
    real	1m28.808s
    user	0m13.245s
    sys	20m37.293s
    
    10950.00 17.2% ip_route_output_slow [kernel]
    10726.00 16.9% dst_destroy          [kernel]
     5170.00  8.1% fib_semantic_match   [kernel]
     3937.00  6.2% dst_alloc            [kernel]
     3635.00  5.7% rt_set_nexthop       [kernel]
     2900.00  4.6% fib_rules_lookup     [kernel]
     2240.00  3.5% fib_table_lookup     [kernel]
     1427.00  2.2% _raw_read_lock       [kernel]
     1157.00  1.8% kmem_cache_alloc     [kernel]
    Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0197aa38
route.c 81.9 KB