* Re: Question about HFSC atm+man patches
[not found] <49292F54.4020803@ziu.info>
@ 2008-11-23 14:05 ` Patrick McHardy
2008-11-24 13:56 ` Michal Soltys
0 siblings, 1 reply; 8+ messages in thread
From: Patrick McHardy @ 2008-11-23 14:05 UTC (permalink / raw)
To: Michal Soltys; +Cc: linux-net, Linux Netdev List
Michal Soltys wrote:
> I'm thinking about writing few simple patches that would introduce layer
> 2 adaptation to HFSC. Generally - instead of preparing adjusted rate
> table like some of the other qdiscs do (tbf, htb, ...), hfsc could
> simply adjust packets' lengths in qdisc code (and there are just few
> places where it's done) - as it's used for all time / curve related
> computations later. So the whole thing should be, at least in theory,
> pretty straightforward.
>
> The tc's interface would of course remain the same - that is - linklayer
> and overhead options, consistently with other qdiscs.
>
> Would such approach be valid and possibly accepted ?
We already support generic size adjustment for all qdiscs. I'm
not sure about the userspace interface though.
> Another thing I'd like to add is detailed tc-hfsc man page (and maybe
> add/update other ones - but that's for a bit later).
That would be great.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Question about HFSC atm+man patches
2008-11-23 14:05 ` Question about HFSC atm+man patches Patrick McHardy
@ 2008-11-24 13:56 ` Michal Soltys
2008-11-24 14:11 ` Patrick McHardy
0 siblings, 1 reply; 8+ messages in thread
From: Michal Soltys @ 2008-11-24 13:56 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Linux Netdev List
Patrick McHardy wrote:
> Michal Soltys wrote:
>> I'm thinking about writing few simple patches that would introduce layer
>> 2 adaptation to HFSC. Generally - instead of preparing adjusted rate
>> table like some of the other qdiscs do (tbf, htb, ...), hfsc could
>> simply adjust packets' lengths in qdisc code (and there are just few
>> places where it's done) - as it's used for all time / curve related
>> computations later. So the whole thing should be, at least in theory,
>> pretty straightforward.
>>
>> The tc's interface would of course remain the same - that is - linklayer
>> and overhead options, consistently with other qdiscs.
>>
>> Would such approach be valid and possibly accepted ?
>
> We already support generic size adjustment for all qdiscs. I'm
> not sure about the userspace interface though.
>
More about what I have in mind - in april '08 there was set of 8 patches
-
http://kerneltrap.org/mailarchive/linux-netdev/2008/4/9/1386524/thread#mid-1386524
They added atm adaptation to tbf, htb, cbq and filter's action police.
The rate table is precalculated in userspace, and depending on tc
invocation - will be either unaltered, or the times will be set
according to lengths aligned to atm cells (tc_calc_rtable, in tc/tc_core.c).
On the kernel's side, rata table is consulted through qdisc_l2t
function, where overhead and cell_align are taken into account as well.
Anyway - HFSC wasn't included in that patchset, as it didn't use rate
table - so what I have in mind is essentially:
len = hfsc_l2_adapt(q->overhead,qdisc_pkt_len(skb));
instead of
len = qdisc_pkt_len(skb);
+ setup from tc and hfsc_init (overhead parameter, pointing
hfsc_l2_adapt to required function, sanity checks, etc.).
>> Another thing I'd like to add is detailed tc-hfsc man page (and maybe
>> add/update other ones - but that's for a bit later).
>
> That would be great.
Allright, will do.
ps.
Removed linux-net from CC.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Question about HFSC atm+man patches
2008-11-24 13:56 ` Michal Soltys
@ 2008-11-24 14:11 ` Patrick McHardy
2008-11-24 23:21 ` Michal Soltys
2008-11-26 22:54 ` Michal Soltys
0 siblings, 2 replies; 8+ messages in thread
From: Patrick McHardy @ 2008-11-24 14:11 UTC (permalink / raw)
To: Michal Soltys; +Cc: Linux Netdev List
Michal Soltys wrote:
> Patrick McHardy wrote:
>> Michal Soltys wrote:
>>> Would such approach be valid and possibly accepted ?
>>
>> We already support generic size adjustment for all qdiscs. I'm
>> not sure about the userspace interface though.
>>
>
> More about what I have in mind - in april '08 there was set of 8 patches
> -
> http://kerneltrap.org/mailarchive/linux-netdev/2008/4/9/1386524/thread#mid-1386524
>
>
> They added atm adaptation to tbf, htb, cbq and filter's action police.
> The rate table is precalculated in userspace, and depending on tc
> invocation - will be either unaltered, or the times will be set
> according to lengths aligned to atm cells (tc_calc_rtable, in
> tc/tc_core.c).
>
> On the kernel's side, rata table is consulted through qdisc_l2t
> function, where overhead and cell_align are taken into account as well.
>
> Anyway - HFSC wasn't included in that patchset, as it didn't use rate
> table - so what I have in mind is essentially:
>
> len = hfsc_l2_adapt(q->overhead,qdisc_pkt_len(skb));
>
> instead of
>
> len = qdisc_pkt_len(skb);
qdisc_pkt_len already returns an adjusted length based on "size tables".
Check out qdisc_enqueue()/qdisc_enqueue_root() for details.
Is there something missing for overhead calculation?
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Question about HFSC atm+man patches
2008-11-24 14:11 ` Patrick McHardy
@ 2008-11-24 23:21 ` Michal Soltys
2008-11-26 22:54 ` Michal Soltys
1 sibling, 0 replies; 8+ messages in thread
From: Michal Soltys @ 2008-11-24 23:21 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Linux Netdev List
Patrick McHardy wrote:
>
> qdisc_pkt_len already returns an adjusted length based on "size tables".
> Check out qdisc_enqueue()/qdisc_enqueue_root() for details.
>
> Is there something missing for overhead calculation?
Thanks for pointing that out. It will fit well.
I'll have to wrap my head around the sources first though (even if the
concept became even simpler now) - the patches for hfsc submitted in
July along the ones for size tables, were a bit more extensive compared
to what I've planned.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Question about HFSC atm+man patches
2008-11-24 14:11 ` Patrick McHardy
2008-11-24 23:21 ` Michal Soltys
@ 2008-11-26 22:54 ` Michal Soltys
2008-11-27 10:48 ` Patrick McHardy
1 sibling, 1 reply; 8+ messages in thread
From: Michal Soltys @ 2008-11-26 22:54 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Linux Netdev List
One question regarding size tables:
Should I assume that subsequent qdiscs attached to HFSC leaves will not
use [different] size tables ?
This is currently the case, but from the perspective of a generic
solution - if some inner qdisc changes pkt_len stored in cb area during
qdisc_enqueue, then HFSC might get wrong size during peek operation.
As leaves will usually have "simple" work-conserving qdiscs attached,
this is probably not an issue, but ...
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Question about HFSC atm+man patches
2008-11-26 22:54 ` Michal Soltys
@ 2008-11-27 10:48 ` Patrick McHardy
2008-11-27 23:17 ` Michal Soltys
0 siblings, 1 reply; 8+ messages in thread
From: Patrick McHardy @ 2008-11-27 10:48 UTC (permalink / raw)
To: Michal Soltys; +Cc: Linux Netdev List
Michal Soltys wrote:
> One question regarding size tables:
>
> Should I assume that subsequent qdiscs attached to HFSC leaves will not
> use [different] size tables ?
>
> This is currently the case, but from the perspective of a generic
> solution - if some inner qdisc changes pkt_len stored in cb area during
> qdisc_enqueue, then HFSC might get wrong size during peek operation.
>
> As leaves will usually have "simple" work-conserving qdiscs attached,
> this is probably not an issue, but ...
Using different size tables for inner qdiscs is supposed to work.
What is the "wrong size"? ->peek() should return a packet with the
size the same as ->dequeue() would, which I think it does.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Question about HFSC atm+man patches
2008-11-27 10:48 ` Patrick McHardy
@ 2008-11-27 23:17 ` Michal Soltys
2008-12-04 13:55 ` Question - size tables implementation Michal Soltys
0 siblings, 1 reply; 8+ messages in thread
From: Michal Soltys @ 2008-11-27 23:17 UTC (permalink / raw)
To: Patrick McHardy; +Cc: Linux Netdev List
Patrick McHardy wrote:
>
> Using different size tables for inner qdiscs is supposed to work.
> What is the "wrong size"? ->peek() should return a packet with the
> size the same as ->dequeue() would, which I think it does.
>
That's not what I meant.
((struct qdisc_skb_cb*)skb->cb)->pkt_len
This is the value returned by qdisc_pkt_len() (now used whenever length
is required, instead of skb->len), and it's recalculated during
qdisc_calculate_pkt_len() called from qdisc_enqueue() - if a qdisc has
stab. So the inner(most) qdisc with a size table, will be the last one
setting that field.
Now, if an outer qdisc, e.g. HFSC, does peek() or dequeue() later,
qdisc_pkt_len() will return overridden value.
If no qdiscs in "chain" have stab, then the field will be equal to
skb->len - which is set in qdisc_enqueue_root() (otherwise uninitialzed
value would be used later).
Am I seeing this right ?
^ permalink raw reply [flat|nested] 8+ messages in thread
* Question - size tables implementation
2008-11-27 23:17 ` Michal Soltys
@ 2008-12-04 13:55 ` Michal Soltys
0 siblings, 0 replies; 8+ messages in thread
From: Michal Soltys @ 2008-12-04 13:55 UTC (permalink / raw)
To: Linux Netdev List
Hi
This is a followup question, continuing from:
http://marc.info/?l=linux-netdev&m=122782976032316&w=2
Well, at least this is what I'm seeing from looking at the code. Perhaps
I missed something.
Assuming I didn't - an example of a flow in a simple example (let's say
- hypothetical "outer" as a root qdisc, and "inner" as a leaf qdisc -
both using different size tables):
1) qdisc_enqueue_root() will set pkt_len in cb area to skb->len, call
qdisc_enqueue(), then
2) qdisc_calculate_pkt_len() will set pkt_len in cb area using "outer"'s
size table, and
3) outer_enqueue() will be will be called. This one will classify the
packet and
4) qdisc_enqueue() it to the "inner" qdisc, but that function will
qdisc_calculate_pkt_len() overwriting pkt_len in cb area using "inner"'s
size table
Later, whenever the time comes to e.g. dequeue or peek at the packet,
"outer" will see packet size set in (4) whenever it calls qdisc_pkt_len().
For now, as far as I can see, the stab functionality is ready to be
used, but no scheduler actually uses it - so the whole chain ends at
setting ((struct qdisc_skb_cb*)skb->cb)->pkt_len during
qdisc_enqueue_root() to skb->len.
If I was to add atm adaptation to HFSC using size tables (as suggested
by Patrick), I'd like to know which direction to choose:
1) be prepared for it (e.g. save pkt_len, rerun
qdisc_calculate_pkt_len() every time adjusted length is needed, restore
the previous pkt_len afterwards) - but it's ugly and bloaty, and causes
plenty of unnecessary calls to the calculate function.
2) change size table implementation, e.g.
- add depth field in struct Qdisc {} - 0 for root, and parent's
sch->depth+1 for any deeper qdisc, during qdisc creation
- make qdisc_calculate_pkt_len() and qdisc_pkt_len() use that as an
index, so instead of
struct qdisc_skb_cb {
unsigned int pkt_len;
char data[];
};
we would have something like:
struct qdisc_skb_cb {
unsigned int pkt_len[QDISC_MAX_DEPTH];
char data[];
};
static inline unsigned int qdisc_pkt_len(struct sk_buff *skb, struct
Qdisc *sch)
{
return qdisc_skb_cb(skb)->pkt_len[sch->depth];
}
etc.
3) Ignore ? Aka assume only outer (or non-work conserving) qdisc may use
size tables, but that's just wrong...
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-12-04 13:55 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <49292F54.4020803@ziu.info>
2008-11-23 14:05 ` Question about HFSC atm+man patches Patrick McHardy
2008-11-24 13:56 ` Michal Soltys
2008-11-24 14:11 ` Patrick McHardy
2008-11-24 23:21 ` Michal Soltys
2008-11-26 22:54 ` Michal Soltys
2008-11-27 10:48 ` Patrick McHardy
2008-11-27 23:17 ` Michal Soltys
2008-12-04 13:55 ` Question - size tables implementation Michal Soltys
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).