• Jesper Dangaard Brouer's avatar
    net_sched: restore qdisc quota fairness limits after bulk dequeue · b8358d70
    Jesper Dangaard Brouer authored
    Restore the quota fairness between qdisc's, that we broke with commit
    5772e9a3 ("qdisc: bulk dequeue support for qdiscs with TCQ_F_ONETXQUEUE").
    
    Before that commit, the quota in __qdisc_run() were in packets as
    dequeue_skb() would only dequeue a single packet, that assumption
    broke with bulk dequeue.
    
    We choose not to account for the number of packets inside the TSO/GSO
    packets (accessable via "skb_gso_segs").  As the previous fairness
    also had this "defect". Thus, GSO/TSO packets counts as a single
    packet.
    
    Further more, we choose to slack on accuracy, by allowing a bulk
    dequeue try_bulk_dequeue_skb() to exceed the "packets" limit, only
    limited by the BQL bytelimit.  This is done because BQL prefers to get
    its full budget for appropriate feedback from TX completion.
    
    In future, we might consider reworking this further and, if it allows,
    switch to a time-based model, as suggested by Eric. Right now, we only
    restore old semantics.
    
    Joint work with Eric, Hannes, Daniel and Jesper.  Hannes wrote the
    first patch in cooperation with Daniel and Jesper.  Eric rewrote the
    patch.
    
    Fixes: 5772e9a3 ("qdisc: bulk dequeue support for qdiscs with TCQ_F_ONETXQUEUE")
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: default avatarDaniel Borkmann <dborkman@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b8358d70
sch_generic.c 23.8 KB