• Eric Dumazet's avatar
    netem: Introduce skb_orphan_partial() helper · f2f872f9
    Eric Dumazet authored
    Commit 547669d4 ("tcp: xps: fix reordering issues") added
    unexpected reorders in case netem is used in a MQ setup for high
    performance test bed.
    
    ETH=eth0
    tc qd del dev $ETH root 2>/dev/null
    tc qd add dev $ETH root handle 1: mq
    for i in `seq 1 32`
    do
     tc qd add dev $ETH parent 1:$i netem delay 100ms
    done
    
    As all tcp packets are orphaned by netem, TCP stack believes it can
    set skb->ooo_okay on all packets.
    
    In order to allow producers to send more packets, we want to
    keep sk_wmem_alloc from reaching sk_sndbuf limit.
    
    We can do that by accounting one byte per skb in netem queues,
    so that TCP stack is not fooled too much.
    
    Tested:
    
    With above MQ/netem setup, scaling number of concurrent flows gives
    linear results and no reorders/retransmits
    
    lpq83:~# for n in 1 10 20 30 40 50 60 70 80 90 100
     do echo -n "n:$n " ; ./super_netperf $n -H 10.7.7.84; done
    n:1 198.46
    n:10 2002.69
    n:20 4000.98
    n:30 6006.35
    n:40 8020.93
    n:50 10032.3
    n:60 12081.9
    n:70 13971.3
    n:80 16009.7
    n:90 17117.3
    n:100 17425.5
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f2f872f9
sock.c 72.2 KB