• Eric Dumazet's avatar
    netem: refine early skb orphaning · 5a308f40
    Eric Dumazet authored
    netem does an early orphaning of skbs. Doing so breaks TCP Small Queue
    or any mechanism relying on socket sk_wmem_alloc feedback.
    
    Ideally, we should perform this orphaning after the rate module and
    before the delay module, to mimic what happens on a real link :
    
    skb orphaning is indeed normally done at TX completion, before the
    transit on the link.
    
    +-------+   +--------+  +---------------+  +-----------------+
    + Qdisc +---> Device +--> TX completion +--> links / hops    +->
    +       +   +  xmit  +  + skb orphaning +  + propagation     +
    +-------+   +--------+  +---------------+  +-----------------+
          < rate limiting >                  < delay, drops, reorders >
    
    If netem is used without delay feature (drops, reorders, rate
    limiting), then we should avoid early skb orphaning, to keep pressure
    on sockets as long as packets are still in qdisc queue.
    
    Ideally, netem should be refactored to implement delay module
    as the last stage. Current algorithm merges the two phases
    (rate limiting + delay) so its not correct.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Hagen Paul Pfeifer <hagen@jauu.net>
    Cc: Mark Gordon <msg@google.com>
    Cc: Andreas Terzis <aterzis@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Acked-by: default avatarStephen Hemminger <shemminger@vyatta.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5a308f40
sch_netem.c 24 KB