• Eric Dumazet's avatar
    net_sched: sch_fq: handle non connected flows · 37c0aead
    Eric Dumazet authored
    FQ packet scheduler assumed that packets could be classified
    based on their owning socket.
    
    This means that if a UDP server uses one UDP socket to send
    packets to different destinations, packets all land
    in one FQ flow.
    
    This is unfair, since each TCP flow has a unique bucket, meaning
    that in case of pressure (fully utilised uplink), TCP flows
    have more share of the bandwidth.
    
    If we instead detect unconnected sockets, we can use a stochastic
    hash based on the 4-tuple hash.
    
    This also means a QUIC server using one UDP socket will properly
    spread the outgoing packets to different buckets, and in-kernel
    pacing based on EDT model will no longer risk having big rb-tree on
    one flow.
    
    Note that UDP application might provide the skb->hash in an
    ancillary message at sendmsg() time to avoid the cost of a dissection
    in fq packet scheduler.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    37c0aead
sch_fq.c 24.3 KB