From: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
To: Michel Machado <michel@digirati.com.br>
Cc: Nishanth Devarajan <ndev2021@gmail.com>,
xiyou.wangcong@gmail.com, jhs@mojatatu.com, jiri@resnulli.us,
davem@davemloft.net, netdev@vger.kernel.org, doucette@bu.edu
Subject: Re: [PATCH v3 net-next] net/sched: add skbprio scheduler
Date: Mon, 9 Jul 2018 16:53:19 -0300 [thread overview]
Message-ID: <20180709195319.GD8880@localhost.localdomain> (raw)
In-Reply-To: <b9f0e292-a29a-3c70-a215-cd6fc2ffbc6a@digirati.com.br>
On Mon, Jul 09, 2018 at 02:18:33PM -0400, Michel Machado wrote:
> On 07/09/2018 11:44 AM, Marcelo Ricardo Leitner wrote:
> > On Sat, Jul 07, 2018 at 03:43:55PM +0530, Nishanth Devarajan wrote:
> > > net/sched: add skbprio scheduer
> > >
> > > Skbprio (SKB Priority Queue) is a queueing discipline that prioritizes packets
> > > according to their skb->priority field. Under congestion, already-enqueued lower
> > > priority packets will be dropped to make space available for higher priority
> > > packets. Skbprio was conceived as a solution for denial-of-service defenses that
> > > need to route packets with different priorities as a means to overcome DoS
> > > attacks.
> >
> > Why can't we implement this as a new flag for sch_prio.c?
> >
> > I don't see why this duplication is needed, especially because it will
> > only be "slower" (as in, it will do more work) when qdisc is already
> > full and dropping packets anyway.
>
> sch_prio.c and skbprio diverge on a number of aspects:
>
> 1. sch_prio.c supports up to 16 priorities whereas skbprio 64. This is
> not just a matter of changing a constant since sch_prio.c doesn't use
> skb->priority.
Yes it does use skb->priority for classifying into a band:
prio_classify(struct sk_buff *skb, struct Qdisc *sch, int *qerr)
{
struct prio_sched_data *q = qdisc_priv(sch);
u32 band = skb->priority;
...
>
> 2. sch_prio.c does not have a global limit on the number of packets on
> all its queues, only a limit per queue.
It can be useful to sch_prio.c as well, why not?
prio_enqueue()
{
...
+ if (count > sch->global_limit)
+ prio_tail_drop(sch); /* to be implemented */
ret = qdisc_enqueue(skb, qdisc, to_free);
>
> 3. The queues of sch_prio.c are struct Qdisc, which don't have a method
> to drop at its tail.
That can be implemented, most likely as prio_tail_drop() as above.
>
> Given the divergences, adding flags to sch_prio.c will essentially keep
> both implementations together instead of being isolated as being proposed.
I don't agree. There aren't that many flags. I see only 2, one which
makes sense to sch_prio as it is already (the global limit) and from
where it should drop, the overflown packet or from tail.
All other code will be reused: stats handling, netlink handling,
enqueue and dequeue at least.
If we add this other qdisc, named as it is, it will be very confusing
to sysadmins: both are named very closely and work essentially in the
same way, but one drops from tail and another drops the incoming
packet.
>
> On the speed point, there may not be noticeable difference between both
> qdiscs because the enqueueing and dequeueing costs of both qdics are O(1).
> Notice that the "extra work" (i.e. dropping lower priority packets) is a key
> aspect of skbprio since it gives routers a cheap way to choose which packets
> to drop during a DoS.
On that I agree. I was more referring to something like: "lets not make
sch_prio slow and implement a new one instead.", which I don't it's
valid because the extra "cost" is only visible when it's already
dropping packets. Hopefully it's clearer now :)
[]s
Marcelo
next prev parent reply other threads:[~2018-07-09 19:53 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-07 10:13 [PATCH v3 net-next] net/sched: add skbprio scheduler Nishanth Devarajan
2018-07-09 15:44 ` Marcelo Ricardo Leitner
2018-07-09 18:18 ` Michel Machado
2018-07-09 19:53 ` Marcelo Ricardo Leitner [this message]
2018-07-09 21:03 ` Michel Machado
2018-07-09 21:40 ` Marcelo Ricardo Leitner
2018-07-10 14:03 ` Michel Machado
2018-07-10 14:33 ` Marcelo Ricardo Leitner
2018-07-11 2:25 ` Cong Wang
2018-07-11 19:33 ` Marcelo Ricardo Leitner
2018-07-13 6:05 ` Cong Wang
2018-07-13 13:04 ` Marcelo Ricardo Leitner
2018-07-13 18:26 ` Cong Wang
2018-07-14 4:39 ` Marcelo Ricardo Leitner
2018-07-17 6:41 ` Cong Wang
2018-07-11 2:32 ` Cong Wang
2018-07-11 18:37 ` Marcelo Ricardo Leitner
2018-07-13 5:07 ` Cong Wang
2018-07-13 13:00 ` Marcelo Ricardo Leitner
2018-07-13 18:17 ` Cong Wang
2018-07-14 4:51 ` Marcelo Ricardo Leitner
2018-07-17 5:36 ` Cong Wang
2018-07-11 2:38 ` Cong Wang
2018-07-11 2:57 ` Cong Wang
2018-07-11 15:24 ` Michel Machado
2018-07-19 18:39 ` Cong Wang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180709195319.GD8880@localhost.localdomain \
--to=marcelo.leitner@gmail.com \
--cc=davem@davemloft.net \
--cc=doucette@bu.edu \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=michel@digirati.com.br \
--cc=ndev2021@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=xiyou.wangcong@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).