• Shawn Bohrer's avatar
    udp: ipv4: Add udp early demux · 421b3885
    Shawn Bohrer authored
    The removal of the routing cache introduced a performance regression for
    some UDP workloads since a dst lookup must be done for each packet.
    This change caches the dst per socket in a similar manner to what we do
    for TCP by implementing early_demux.
    
    For UDP multicast we can only cache the dst if there is only one
    receiving socket on the host.  Since caching only works when there is
    one receiving socket we do the multicast socket lookup using RCU.
    
    For UDP unicast we only demux sockets with an exact match in order to
    not break forwarding setups.  Additionally since the hash chains may be
    long we only check the first socket to see if it is a match and not
    waste extra time searching the whole chain when we might not find an
    exact match.
    
    Benchmark results from a netperf UDP_RR test:
    Before 87961.22 transactions/s
    After  89789.68 transactions/s
    
    Benchmark results from a fio 1 byte UDP multicast pingpong test
    (Multicast one way unicast response):
    Before 12.97us RTT
    After  12.63us RTT
    Signed-off-by: default avatarShawn Bohrer <sbohrer@rgmadvisors.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    421b3885
udp.c 64.1 KB