On 7/8/20 9:38 AM, YU, Xiangning wrote:
> Lockless Token Bucket (LTB) is a qdisc implementation that controls the
> use of outbound bandwidth on a shared link. With the help of lockless
> qdisc, and by decoupling rate limiting and bandwidth sharing, LTB is
> designed to scale in the cloud data centers.
> 

> +
> +static int ltb_enqueue(struct sk_buff *skb, struct Qdisc *sch,
> +                    spinlock_t *root_lock, struct sk_buff **to_free)
> +{
> +     struct ltb_sched *ltb = qdisc_priv(sch);
> +     struct ltb_pcpu_sched *pcpu_q;
> +     struct ltb_pcpu_data *pcpu;
> +     struct ltb_class *cl;
> +     int cpu;
> +
> +     pcpu = this_cpu_ptr(ltb->pcpu_data);
> +     pcpu_q = qdisc_priv(pcpu->qdisc);
> +     cpu = smp_processor_id();
> +     ltb_skb_cb(skb)->cpu = cpu;
> +
> +     cl = ltb_classify(sch, ltb, skb);
> +     if (unlikely(!cl)) {
> +             kfree_skb(skb);
> +             return NET_XMIT_DROP;
> +     }
>

Silently dropping a packet in a qdisc is forbidden.

Instead we always make sure to increment a counter, so that "tc -s qdisc" can 
give a clue.

qdisc_drop() is how we handle this.

Then, you might hit an issue if 5,000,000 packets per second need to be dropped.
(So you will probably need per cpu counters)



Reply via email to