Hi,

> don't you want to post this to [EMAIL PROTECTED] instead???
> 
> Auke

You are right. Thanks.

> 
> Hirokazu Takahashi wrote:
> > Hi,
> > 
> > TBF --- Simple Token Bucket Filter --- packet scheduler doesn't
> > work correctly with TSO on that it slows down to send out packets.
> > TSO packets will be discarded since the size can be larger than
> > the scheduler expects. But it won't cause serious problems
> > because the retransmitted packets can be passed.
> > 
> > So I made the scheduler allow to pass TSO packets:
> > 
> >  - tbf_enqueue() accepts packets with any size if the netdevice
> >    has TSO ability.
> > 
> >  - tbf_dequeue() can handle the packets whose size is larger than
> >    the bucket, which keeps tokens.
> >    Any packet, which may be TSO packet, can be sent if the bucket is
> >    full of tokens. this may lead that the number of tokens in
> >    the bucket turns into negative value, which means kind of debt.
> >    But we don't have to mind it because this will be filled up
> >    with tokens in a short time and it will turns into positive value
> >    again.
> > 
> > I'm not sure if this approach is the best. I appreciate any comments.
> > Thank you.
> > 
> > 
> > Signed-off-by: Hirokazu Takahashi <[EMAIL PROTECTED]>
> > 
> > --- linux-2.6.21/net/sched/sch_tbf.c.ORG    2007-05-08 20:59:28.000000000 
> > +0900
> > +++ linux-2.6.21/net/sched/sch_tbf.c        2007-05-10 16:12:54.000000000 
> > +0900
> > @@ -139,7 +139,7 @@ static int tbf_enqueue(struct sk_buff *s
> >     struct tbf_sched_data *q = qdisc_priv(sch);
> >     int ret;
> >  
> > -   if (skb->len > q->max_size) {
> > +   if (skb->len > q->max_size && !(sch->dev->features & NETIF_F_GSO_MASK)) 
> > {
> >             sch->qstats.drops++;
> >  #ifdef CONFIG_NET_CLS_POLICE
> >             if (sch->reshape_fail == NULL || sch->reshape_fail(skb, sch))
> > @@ -197,6 +197,7 @@ static struct sk_buff *tbf_dequeue(struc
> >  {
> >     struct tbf_sched_data *q = qdisc_priv(sch);
> >     struct sk_buff *skb;
> > +   int full = 0;
> >  
> >     skb = q->qdisc->dequeue(q->qdisc);
> >  
> > @@ -204,7 +205,8 @@ static struct sk_buff *tbf_dequeue(struc
> >             psched_time_t now;
> >             long toks, delay;
> >             long ptoks = 0;
> > -           unsigned int len = skb->len;
> > +           unsigned int len;
> > +           int n;
> >  
> >             PSCHED_GET_TIME(now);
> >  
> > @@ -212,16 +214,26 @@ static struct sk_buff *tbf_dequeue(struc
> >  
> >             if (q->P_tab) {
> >                     ptoks = toks + q->ptokens;
> > -                   if (ptoks > (long)q->mtu)
> > +                   if (ptoks >= (long)q->mtu) {
> >                             ptoks = q->mtu;
> > -                   ptoks -= L2T_P(q, len);
> > +                           full = 1;
> > +                   }
> > +                   for (len = skb->len; len > 0; len -= n) {
> > +                           n = min(q->max_size, len);
> > +                           ptoks -= L2T_P(q, n);
> > +                   }
> >             }
> >             toks += q->tokens;
> > -           if (toks > (long)q->buffer)
> > +           if (toks >= (long)q->buffer) {
> >                     toks = q->buffer;
> > -           toks -= L2T(q, len);
> > +                   full = 1;
> > +           }
> > +           for (len = skb->len; len > 0; len -= n) {
> > +                   n = min(q->max_size, len);
> > +                   toks -= L2T(q, n);
> > +           }
> >  
> > -           if ((toks|ptoks) >= 0) {
> > +           if ((toks|ptoks) >= 0 || full) {
> >                     q->t_c = now;
> >                     q->tokens = toks;
> >                     q->ptokens = ptoks;
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-net" in
> > the body of a message to [EMAIL PROTECTED]
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to