• E
    net: sock_rps_record_flow() is for connected sockets · 5b8e2f61
    Eric Dumazet 提交于
    Paolo noticed a cache line miss in UDP recvmsg() to access
    sk_rxhash, sharing a cache line with sk_drops.
    
    sk_drops might be heavily incremented by cpus handling a flood targeting
    this socket.
    
    We might place sk_drops on a separate cache line, but lets try
    to avoid wasting 64 bytes per socket just for this, since we have
    other bottlenecks to take care of.
    
    sock_rps_record_flow() should only access sk_rxhash for connected
    flows.
    
    Testing sk_state for TCP_ESTABLISHED covers most of the cases for
    connected sockets, for a zero cost, since system calls using
    sock_rps_record_flow() also access sk->sk_prot which is on the
    same cache line.
    
    A follow up patch will provide a static_key (Jump Label) since most
    hosts do not even use RFS.
    Signed-off-by: NEric Dumazet <edumazet@google.com>
    Reported-by: NPaolo Abeni <pabeni@redhat.com>
    Acked-by: NPaolo Abeni <pabeni@redhat.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    5b8e2f61
sock.h 64.9 KB