01 Mar, 2019

1 commit


27 Feb, 2019

2 commits


26 Feb, 2019

7 commits

  • RFC 8033 replaces the IETF draft for PIE

    Signed-off-by: Mohit P. Tahiliani
    Signed-off-by: Dhaval Khandla
    Signed-off-by: Hrishikesh Hiraskar
    Signed-off-by: Manish Kumar B
    Signed-off-by: Sachin D. Patil
    Signed-off-by: Leslie Monis
    Acked-by: Dave Taht
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Mohit P. Tahiliani
     
  • Random dropping of packets to achieve latency control may
    introduce outlier situations where packets are dropped too
    close to each other or too far from each other. This can
    cause the real drop percentage to temporarily deviate from
    the intended drop probability. In certain scenarios, such
    as a small number of simultaneous TCP flows, these
    deviations can cause significant deviations in link
    utilization and queuing latency.

    RFC 8033 suggests using a derandomization mechanism to avoid
    these deviations.

    Signed-off-by: Mohit P. Tahiliani
    Signed-off-by: Dhaval Khandla
    Signed-off-by: Hrishikesh Hiraskar
    Signed-off-by: Manish Kumar B
    Signed-off-by: Sachin D. Patil
    Signed-off-by: Leslie Monis
    Acked-by: Dave Taht
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Mohit P. Tahiliani
     
  • The current implementation scales the local alpha and beta
    variables in the calculate_probability function by the same
    amount for all values of drop probability below 1%.

    RFC 8033 suggests using additional cases for auto-tuning
    alpha and beta when the drop probability is less than 1%.

    In order to add more auto-tuning cases, MAX_PROB must be
    scaled by u64 instead of u32 to prevent underflow when
    scaling the local alpha and beta variables in the
    calculate_probability function.

    Signed-off-by: Mohit P. Tahiliani
    Signed-off-by: Dhaval Khandla
    Signed-off-by: Hrishikesh Hiraskar
    Signed-off-by: Manish Kumar B
    Signed-off-by: Sachin D. Patil
    Signed-off-by: Leslie Monis
    Acked-by: Dave Taht
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Mohit P. Tahiliani
     
  • RFC 8033 suggests an initial value of 150 milliseconds for
    the maximum time allowed for a burst of packets.

    Signed-off-by: Mohit P. Tahiliani
    Signed-off-by: Dhaval Khandla
    Signed-off-by: Hrishikesh Hiraskar
    Signed-off-by: Manish Kumar B
    Signed-off-by: Sachin D. Patil
    Signed-off-by: Leslie Monis
    Acked-by: Dave Taht
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Mohit P. Tahiliani
     
  • RFC 8033 suggests a default value of 15 milliseconds for the
    update interval.

    Signed-off-by: Mohit P. Tahiliani
    Signed-off-by: Dhaval Khandla
    Signed-off-by: Hrishikesh Hiraskar
    Signed-off-by: Manish Kumar B
    Signed-off-by: Sachin D. Patil
    Signed-off-by: Leslie Monis
    Acked-by: Dave Taht
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Mohit P. Tahiliani
     
  • RFC 8033 suggests a default value of 15 milliseconds for the
    target queue delay.

    Signed-off-by: Mohit P. Tahiliani
    Signed-off-by: Dhaval Khandla
    Signed-off-by: Hrishikesh Hiraskar
    Signed-off-by: Manish Kumar B
    Signed-off-by: Sachin D. Patil
    Signed-off-by: Leslie Monis
    Acked-by: Dave Taht
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Mohit P. Tahiliani
     
  • RFC 8033 recommends a value of 16384 bytes for the queue
    threshold.

    Signed-off-by: Mohit P. Tahiliani
    Signed-off-by: Dhaval Khandla
    Signed-off-by: Hrishikesh Hiraskar
    Signed-off-by: Manish Kumar B
    Signed-off-by: Sachin D. Patil
    Signed-off-by: Leslie Monis
    Acked-by: Dave Taht
    Acked-by: Jamal Hadi Salim
    Signed-off-by: David S. Miller

    Mohit P. Tahiliani
     

08 Oct, 2018

1 commit

  • Fix 5 warnings and 14 checks issued by checkpatch.pl:

    CHECK: Logical continuations should be on the previous line
    + if ((q->vars.qdelay < q->params.target / 2)
    + && (q->vars.prob < MAX_PROB / 5))

    WARNING: line over 80 characters
    + q->params.tupdate = usecs_to_jiffies(nla_get_u32(tb[TCA_PIE_TUPDATE]));

    CHECK: Blank lines aren't necessary after an open brace '{'
    +{
    +

    CHECK: braces {} should be used on all arms of this statement
    + if (qlen < QUEUE_THRESHOLD)
    [...]
    + else {
    [...]

    CHECK: Unbalanced braces around else statement
    + else {

    CHECK: No space is necessary after a cast
    + if (delta > (s32) (MAX_PROB / (100 / 2)) &&

    CHECK: Unnecessary parentheses around 'qdelay == 0'
    + if ((qdelay == 0) && (qdelay_old == 0) && update_prob)

    CHECK: Unnecessary parentheses around 'qdelay_old == 0'
    + if ((qdelay == 0) && (qdelay_old == 0) && update_prob)

    CHECK: Unnecessary parentheses around 'q->vars.prob == 0'
    + if ((q->vars.qdelay < q->params.target / 2) &&
    + (q->vars.qdelay_old < q->params.target / 2) &&
    + (q->vars.prob == 0) &&
    + (q->vars.avg_dq_rate > 0))

    CHECK: Unnecessary parentheses around 'q->vars.avg_dq_rate > 0'
    + if ((q->vars.qdelay < q->params.target / 2) &&
    + (q->vars.qdelay_old < q->params.target / 2) &&
    + (q->vars.prob == 0) &&
    + (q->vars.avg_dq_rate > 0))

    CHECK: Blank lines aren't necessary before a close brace '}'
    +
    +}

    CHECK: Comparison to NULL could be written "!opts"
    + if (opts == NULL)

    CHECK: No space is necessary after a cast
    + ((u32) PSCHED_TICKS2NS(q->params.target)) /

    WARNING: line over 80 characters
    + nla_put_u32(skb, TCA_PIE_TUPDATE, jiffies_to_usecs(q->params.tupdate)) ||

    CHECK: Blank lines aren't necessary before a close brace '}'
    +
    +}

    CHECK: No space is necessary after a cast
    + .delay = ((u32) PSCHED_TICKS2NS(q->vars.qdelay)) /

    WARNING: Missing a blank line after declarations
    + struct sk_buff *skb;
    + skb = qdisc_dequeue_head(sch);

    WARNING: Missing a blank line after declarations
    + struct pie_sched_data *q = qdisc_priv(sch);
    + qdisc_reset_queue(sch);

    WARNING: Missing a blank line after declarations
    + struct pie_sched_data *q = qdisc_priv(sch);
    + q->params.tupdate = 0;

    Signed-off-by: Leslie Monis
    Signed-off-by: David S. Miller

    Leslie Monis
     

22 Dec, 2017

2 commits


18 Oct, 2017

1 commit

  • In preparation for unconditionally passing the struct timer_list pointer to
    all timer callbacks, switch to using the new timer_setup() and from_timer()
    to pass the timer pointer explicitly. Add pointer back to Qdisc.

    Cc: Jamal Hadi Salim
    Cc: Cong Wang
    Cc: Jiri Pirko
    Cc: "David S. Miller"
    Cc: netdev@vger.kernel.org
    Signed-off-by: Kees Cook
    Signed-off-by: David S. Miller

    Kees Cook
     

14 Apr, 2017

1 commit


19 Sep, 2016

2 commits


26 Jun, 2016

1 commit

  • Qdisc performance suffers when packets are dropped at enqueue()
    time because drops (kfree_skb()) are done while qdisc lock is held,
    delaying a dequeue() draining the queue.

    Nominal throughput can be reduced by 50 % when this happens,
    at a time we would like the dequeue() to proceed as fast as possible.

    Even FQ is vulnerable to this problem, while one of FQ goals was
    to provide some flow isolation.

    This patch adds a 'struct sk_buff **to_free' parameter to all
    qdisc->enqueue(), and in qdisc_drop() helper.

    I measured a performance increase of up to 12 %, but this patch
    is a prereq so that future batches in enqueue() can fly.

    Signed-off-by: Eric Dumazet
    Acked-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller

    Eric Dumazet
     

16 Jun, 2016

1 commit


01 Mar, 2016

1 commit

  • When the bottom qdisc decides to, for example, drop some packet,
    it calls qdisc_tree_decrease_qlen() to update the queue length
    for all its ancestors, we need to update the backlog too to
    keep the stats on root qdisc accurate.

    Cc: Jamal Hadi Salim
    Acked-by: Jamal Hadi Salim
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    WANG Cong
     

30 Oct, 2014

1 commit


30 Sep, 2014

1 commit


14 Feb, 2014

1 commit

  • Fix incorrect comment reported by Norbert Kiesel. Edit another comment to add
    more details. Also add references to algorithm (IETF draft and paper) to top of
    file.

    Signed-off-by: Vijay Subramanian
    CC: Mythili Prabhu
    CC: Norbert Kiesel
    Signed-off-by: David S. Miller

    Vijay Subramanian
     

15 Jan, 2014

1 commit


07 Jan, 2014

1 commit

  • Proportional Integral controller Enhanced (PIE) is a scheduler to address the
    bufferbloat problem.

    >From the IETF draft below:
    " Bufferbloat is a phenomenon where excess buffers in the network cause high
    latency and jitter. As more and more interactive applications (e.g. voice over
    IP, real time video streaming and financial transactions) run in the Internet,
    high latency and jitter degrade application performance. There is a pressing
    need to design intelligent queue management schemes that can control latency and
    jitter; and hence provide desirable quality of service to users.

    We present here a lightweight design, PIE(Proportional Integral controller
    Enhanced) that can effectively control the average queueing latency to a target
    value. Simulation results, theoretical analysis and Linux testbed results have
    shown that PIE can ensure low latency and achieve high link utilization under
    various congestion situations. The design does not require per-packet
    timestamp, so it incurs very small overhead and is simple enough to implement
    in both hardware and software. "

    Many thanks to Dave Taht for extensive feedback, reviews, testing and
    suggestions. Thanks also to Stephen Hemminger and Eric Dumazet for reviews and
    suggestions. Naeem Khademi and Dave Taht independently contributed to ECN
    support.

    For more information, please see technical paper about PIE in the IEEE
    Conference on High Performance Switching and Routing 2013. A copy of the paper
    can be found at ftp://ftpeng.cisco.com/pie/.

    Please also refer to the IETF draft submission at
    http://tools.ietf.org/html/draft-pan-tsvwg-pie-00

    All relevant code, documents and test scripts and results can be found at
    ftp://ftpeng.cisco.com/pie/.

    For problems with the iproute2/tc or Linux kernel code, please contact Vijay
    Subramanian (vijaynsu@cisco.com or subramanian.vijay@gmail.com) Mythili Prabhu
    (mysuryan@cisco.com)

    Signed-off-by: Vijay Subramanian
    Signed-off-by: Mythili Prabhu
    CC: Dave Taht
    Signed-off-by: David S. Miller

    Vijay Subramanian