Patchwork [1/2] sch_netem: Remove classful functionality

login
register
mail settings
Submitter Jarek Poplawski
Date Oct. 31, 2008, 1:20 p.m.
Message ID <20081031132010.GA18895@ff.dom.local>
Download mbox | patch
Permalink /patch/6697/
State Accepted
Delegated to: David Miller
Headers show

Comments

Jarek Poplawski - Oct. 31, 2008, 1:20 p.m.
Patrick McHardy noticed that: "a lot of the functionality of netem
requires the inner tfifo anyways and rate-limiting is usually done
on top of netem. So I would suggest so either hard-wire the tfifo
qdisc or at least make the assumption that inner qdiscs are
work-conserving.", and later: "- a lot of other qdiscs still don't
work as inner qdiscs of netem [...]".

So, according to his suggestion, this patch removes classful options
of netem. The main reason of this change is to remove ops->requeue()
method, which is currently used only by netem.

Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
stephen hemminger - Oct. 31, 2008, 4:45 p.m.
On Fri, 31 Oct 2008 13:20:10 +0000
Jarek Poplawski <jarkao2@gmail.com> wrote:

> Patrick McHardy noticed that: "a lot of the functionality of netem
> requires the inner tfifo anyways and rate-limiting is usually done
> on top of netem. So I would suggest so either hard-wire the tfifo
> qdisc or at least make the assumption that inner qdiscs are
> work-conserving.", and later: "- a lot of other qdiscs still don't
> work as inner qdiscs of netem [...]".
> 
> So, according to his suggestion, this patch removes classful options
> of netem. The main reason of this change is to remove ops->requeue()
> method, which is currently used only by netem.
> 
> Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
>

Okay, only if you add the following functionality back:
  * rate control, it doesn't have TBF, some other rate limiting
    is fine.

  * option for pure fifo or reordering based on jitter.

I have no problem with changing implementation as long as the same
feature set used by users remain.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Nov. 2, 2008, 7:37 a.m.
From: Jarek Poplawski <jarkao2@gmail.com>
Date: Fri, 31 Oct 2008 13:20:10 +0000

> Patrick McHardy noticed that: "a lot of the functionality of netem
> requires the inner tfifo anyways and rate-limiting is usually done
> on top of netem. So I would suggest so either hard-wire the tfifo
> qdisc or at least make the assumption that inner qdiscs are
> work-conserving.", and later: "- a lot of other qdiscs still don't
> work as inner qdiscs of netem [...]".
> 
> So, according to his suggestion, this patch removes classful options
> of netem. The main reason of this change is to remove ops->requeue()
> method, which is currently used only by netem.
> 
> Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>

Jarek, I applied this patch and your second one to net-next-2.6

But I did this only because I trust that you will address Stephen's
feedback wrt. making existing netem functionality available in
some way.

Otherwise I'll have to revert these changes.

Thanks!
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jarek Poplawski - Nov. 3, 2008, 8:29 a.m.
On Sun, Nov 02, 2008 at 12:37:00AM -0700, David Miller wrote:
> From: Jarek Poplawski <jarkao2@gmail.com>
> Date: Fri, 31 Oct 2008 13:20:10 +0000
> 
> > Patrick McHardy noticed that: "a lot of the functionality of netem
> > requires the inner tfifo anyways and rate-limiting is usually done
> > on top of netem. So I would suggest so either hard-wire the tfifo
> > qdisc or at least make the assumption that inner qdiscs are
> > work-conserving.", and later: "- a lot of other qdiscs still don't
> > work as inner qdiscs of netem [...]".
> > 
> > So, according to his suggestion, this patch removes classful options
> > of netem. The main reason of this change is to remove ops->requeue()
> > method, which is currently used only by netem.
> > 
> > Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
> 
> Jarek, I applied this patch and your second one to net-next-2.6
> 
> But I did this only because I trust that you will address Stephen's
> feedback wrt. making existing netem functionality available in
> some way.
> 
> Otherwise I'll have to revert these changes.

Hmm... I thought there was kind of RFC for this, and it looked like
Patrick's idea won 100% of votes, but I'm not good in counting...

http://marc.info/?l=linux-netdev&m=122469801712438&w=2
http://marc.info/?l=linux-netdev&m=122469674709761&w=2

Anyway, IMHO adding TBF etc. functionalities to tfifo doesn't make
much sense, and if they are really needed it's better to revert
these patches and chose one of the other ways of doing reorder
proposed in this earlier thread.

Thanks,
Jarek P.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Patrick McHardy - Nov. 3, 2008, 11:20 a.m.
Jarek Poplawski wrote:
> On Sun, Nov 02, 2008 at 12:37:00AM -0700, David Miller wrote:
>> From: Jarek Poplawski <jarkao2@gmail.com>
>> Date: Fri, 31 Oct 2008 13:20:10 +0000
>>
>> Jarek, I applied this patch and your second one to net-next-2.6
>>
>> But I did this only because I trust that you will address Stephen's
>> feedback wrt. making existing netem functionality available in
>> some way.
>>
>> Otherwise I'll have to revert these changes.
> 
> Hmm... I thought there was kind of RFC for this, and it looked like
> Patrick's idea won 100% of votes, but I'm not good in counting...
> 
> http://marc.info/?l=linux-netdev&m=122469801712438&w=2
> http://marc.info/?l=linux-netdev&m=122469674709761&w=2
> 
> Anyway, IMHO adding TBF etc. functionalities to tfifo doesn't make
> much sense, and if they are really needed it's better to revert
> these patches and chose one of the other ways of doing reorder
> proposed in this earlier thread.

Whats wrong with simply using TBF as parent qdisc of netem?
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
stephen hemminger - Nov. 3, 2008, 5:06 p.m.
On Mon, 03 Nov 2008 12:20:25 +0100
Patrick McHardy <kaber@trash.net> wrote:

> Jarek Poplawski wrote:
> > On Sun, Nov 02, 2008 at 12:37:00AM -0700, David Miller wrote:
> >> From: Jarek Poplawski <jarkao2@gmail.com>
> >> Date: Fri, 31 Oct 2008 13:20:10 +0000
> >>
> >> Jarek, I applied this patch and your second one to net-next-2.6
> >>
> >> But I did this only because I trust that you will address Stephen's
> >> feedback wrt. making existing netem functionality available in
> >> some way.
> >>
> >> Otherwise I'll have to revert these changes.
> > 
> > Hmm... I thought there was kind of RFC for this, and it looked like
> > Patrick's idea won 100% of votes, but I'm not good in counting...
> > 
> > http://marc.info/?l=linux-netdev&m=122469801712438&w=2
> > http://marc.info/?l=linux-netdev&m=122469674709761&w=2
> > 
> > Anyway, IMHO adding TBF etc. functionalities to tfifo doesn't make
> > much sense, and if they are really needed it's better to revert
> > these patches and chose one of the other ways of doing reorder
> > proposed in this earlier thread.
> 
> Whats wrong with simply using TBF as parent qdisc of netem?

It works but does something slightly different.

   netem inside TBF is like long delay network followed by choke on last hop
   TBF inside netem was like choke on uplink followed by long delay network.

Since most users use the for network evaluation, and the standard for
network evaluation is dummynet; I plan to add dummynet compatiable
rate control.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jarek Poplawski - Nov. 4, 2008, 9:56 a.m.
On Mon, Nov 03, 2008 at 09:06:30AM -0800, Stephen Hemminger wrote:
> On Mon, 03 Nov 2008 12:20:25 +0100
> Patrick McHardy <kaber@trash.net> wrote:
> 
> > Jarek Poplawski wrote:
> > > On Sun, Nov 02, 2008 at 12:37:00AM -0700, David Miller wrote:
> > >> From: Jarek Poplawski <jarkao2@gmail.com>
> > >> Date: Fri, 31 Oct 2008 13:20:10 +0000
> > >>
> > >> Jarek, I applied this patch and your second one to net-next-2.6
> > >>
> > >> But I did this only because I trust that you will address Stephen's
> > >> feedback wrt. making existing netem functionality available in
> > >> some way.
> > >>
> > >> Otherwise I'll have to revert these changes.
> > > 
> > > Hmm... I thought there was kind of RFC for this, and it looked like
> > > Patrick's idea won 100% of votes, but I'm not good in counting...
> > > 
> > > http://marc.info/?l=linux-netdev&m=122469801712438&w=2
> > > http://marc.info/?l=linux-netdev&m=122469674709761&w=2
> > > 
> > > Anyway, IMHO adding TBF etc. functionalities to tfifo doesn't make
> > > much sense, and if they are really needed it's better to revert
> > > these patches and chose one of the other ways of doing reorder
> > > proposed in this earlier thread.
> > 
> > Whats wrong with simply using TBF as parent qdisc of netem?
> 
> It works but does something slightly different.
> 
>    netem inside TBF is like long delay network followed by choke on last hop
>    TBF inside netem was like choke on uplink followed by long delay network.

David, this makes sense to me, so please revert these two patches.
(Then, I think we're still at RFC stage.)

Thanks.
Jarek P.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Patrick McHardy - Nov. 4, 2008, 11:04 a.m.
Stephen Hemminger wrote:
> On Mon, 03 Nov 2008 12:20:25 +0100
> Patrick McHardy <kaber@trash.net> wrote:
> 
>> Whats wrong with simply using TBF as parent qdisc of netem?
> 
> It works but does something slightly different.
> 
>    netem inside TBF is like long delay network followed by choke on last hop
>    TBF inside netem was like choke on uplink followed by long delay network.

The behaviour visible on either side is identical though.

TBF only affects the ->dequeue path, in which netem only handles delays.
In both cases the total delay is the maximum of the absolute delay
imposed by netem + the delay resulting from rate-limiting (the maximum
because TBF can recharge while netem is delaying). Both values are
independant from each other, so the maximum is always the same.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
stephen hemminger - Nov. 4, 2008, 4:25 p.m.
On Tue, 4 Nov 2008 09:56:42 +0000
Jarek Poplawski <jarkao2@gmail.com> wrote:

> On Mon, Nov 03, 2008 at 09:06:30AM -0800, Stephen Hemminger wrote:
> > On Mon, 03 Nov 2008 12:20:25 +0100
> > Patrick McHardy <kaber@trash.net> wrote:
> > 
> > > Jarek Poplawski wrote:
> > > > On Sun, Nov 02, 2008 at 12:37:00AM -0700, David Miller wrote:
> > > >> From: Jarek Poplawski <jarkao2@gmail.com>
> > > >> Date: Fri, 31 Oct 2008 13:20:10 +0000
> > > >>
> > > >> Jarek, I applied this patch and your second one to net-next-2.6
> > > >>
> > > >> But I did this only because I trust that you will address Stephen's
> > > >> feedback wrt. making existing netem functionality available in
> > > >> some way.
> > > >>
> > > >> Otherwise I'll have to revert these changes.
> > > > 
> > > > Hmm... I thought there was kind of RFC for this, and it looked like
> > > > Patrick's idea won 100% of votes, but I'm not good in counting...
> > > > 
> > > > http://marc.info/?l=linux-netdev&m=122469801712438&w=2
> > > > http://marc.info/?l=linux-netdev&m=122469674709761&w=2
> > > > 
> > > > Anyway, IMHO adding TBF etc. functionalities to tfifo doesn't make
> > > > much sense, and if they are really needed it's better to revert
> > > > these patches and chose one of the other ways of doing reorder
> > > > proposed in this earlier thread.
> > > 
> > > Whats wrong with simply using TBF as parent qdisc of netem?
> > 
> > It works but does something slightly different.
> > 
> >    netem inside TBF is like long delay network followed by choke on last hop
> >    TBF inside netem was like choke on uplink followed by long delay network.
> 
> David, this makes sense to me, so please revert these two patches.
> (Then, I think we're still at RFC stage.)
> 
> Thanks.
> Jarek P.

Keep Jarek's patch, I am working on dummynet compatiable rate control.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Patrick McHardy - Nov. 4, 2008, 9:42 p.m.
Stephen Hemminger wrote:
>> David, this makes sense to me, so please revert these two patches.
>> (Then, I think we're still at RFC stage.)
>>
>> Thanks.
>> Jarek P.
>>     
>
> Keep Jarek's patch, I am working on dummynet compatiable rate control.

I'm still wondering what these incompatibilies are, in verifiable terms.

The dummynet algorithm looks like a not particulary cleverly implemented
TBF, but I can't see why it would behave any differently than a suitably
configured Linux TBF (cell size == 1) except for implementation differences
outside its scope (clock, timers etc).


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index 3080bd6..2ad0959 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -622,95 +622,8 @@  nla_put_failure:
 	return -1;
 }
 
-static int netem_dump_class(struct Qdisc *sch, unsigned long cl,
-			  struct sk_buff *skb, struct tcmsg *tcm)
-{
-	struct netem_sched_data *q = qdisc_priv(sch);
-
-	if (cl != 1) 	/* only one class */
-		return -ENOENT;
-
-	tcm->tcm_handle |= TC_H_MIN(1);
-	tcm->tcm_info = q->qdisc->handle;
-
-	return 0;
-}
-
-static int netem_graft(struct Qdisc *sch, unsigned long arg, struct Qdisc *new,
-		     struct Qdisc **old)
-{
-	struct netem_sched_data *q = qdisc_priv(sch);
-
-	if (new == NULL)
-		new = &noop_qdisc;
-
-	sch_tree_lock(sch);
-	*old = xchg(&q->qdisc, new);
-	qdisc_tree_decrease_qlen(*old, (*old)->q.qlen);
-	qdisc_reset(*old);
-	sch_tree_unlock(sch);
-
-	return 0;
-}
-
-static struct Qdisc *netem_leaf(struct Qdisc *sch, unsigned long arg)
-{
-	struct netem_sched_data *q = qdisc_priv(sch);
-	return q->qdisc;
-}
-
-static unsigned long netem_get(struct Qdisc *sch, u32 classid)
-{
-	return 1;
-}
-
-static void netem_put(struct Qdisc *sch, unsigned long arg)
-{
-}
-
-static int netem_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
-			    struct nlattr **tca, unsigned long *arg)
-{
-	return -ENOSYS;
-}
-
-static int netem_delete(struct Qdisc *sch, unsigned long arg)
-{
-	return -ENOSYS;
-}
-
-static void netem_walk(struct Qdisc *sch, struct qdisc_walker *walker)
-{
-	if (!walker->stop) {
-		if (walker->count >= walker->skip)
-			if (walker->fn(sch, 1, walker) < 0) {
-				walker->stop = 1;
-				return;
-			}
-		walker->count++;
-	}
-}
-
-static struct tcf_proto **netem_find_tcf(struct Qdisc *sch, unsigned long cl)
-{
-	return NULL;
-}
-
-static const struct Qdisc_class_ops netem_class_ops = {
-	.graft		=	netem_graft,
-	.leaf		=	netem_leaf,
-	.get		=	netem_get,
-	.put		=	netem_put,
-	.change		=	netem_change_class,
-	.delete		=	netem_delete,
-	.walk		=	netem_walk,
-	.tcf_chain	=	netem_find_tcf,
-	.dump		=	netem_dump_class,
-};
-
 static struct Qdisc_ops netem_qdisc_ops __read_mostly = {
 	.id		=	"netem",
-	.cl_ops		=	&netem_class_ops,
 	.priv_size	=	sizeof(struct netem_sched_data),
 	.enqueue	=	netem_enqueue,
 	.dequeue	=	netem_dequeue,