• subashab@codeaurora.org's avatar
    net: ipv6: Add early demux handler for UDP unicast · 5425077d
    subashab@codeaurora.org authored
    While running a single stream UDPv6 test, we observed that amount
    of CPU spent in NET_RX softirq was much greater than UDPv4 for an
    equivalent receive rate. The test here was run on an ARM64 based
    Android system. On further analysis with perf, we found that UDPv6
    was spending significant time in the statistics netfilter targets
    which did socket lookup per packet. These statistics rules perform
    a lookup when there is no socket associated with the skb. Since
    there are multiple instances of these rules based on UID, there
    will be equal number of lookups per skb.
    
    By introducing early demux for UDPv6, we avoid the redundant lookups.
    This also helped to improve the performance (800Mbps -> 870Mbps) on a
    CPU limited system in a single stream UDPv6 receive test with 1450
    byte sized datagrams using iperf.
    
    v1->v2: Use IPv6 cookie to validate dst instead of 0 as suggested
    by Eric
    Signed-off-by: default avatarSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5425077d
udp.c 38.5 KB