Thread (7 messages) 7 messages, 4 authors, 2017-08-09

Re: Qdisc->u32_node - licence to kill

flat view

From: John Fastabend <john.fastabend@gmail.com>
Date: 2017-08-07 17:47:25

On 08/07/2017 09:41 AM, Jiri Pirko wrote:
Hi Jamal/Cong/David/all.

Digging in the u32 code deeper now. I need to get rid of tp->q for shared
blocks, but I found out about this:

struct Qdisc {
	......
        void                    *u32_node;
	......
};

Yeah, ugly. u32 uses it to store some shared data, tp_c. It actually
stores a linked list of all hashtables added to one qdiscs.

So basically what you have is, you have 1 root ht per prio/pref. Then
you can have multiple hts, linked from any other ht, does not matter in
which prio/pref they are.
We can create arbitrary hash tables here independent of prio/pref via
TCA_U32_DIVISOR. Then these can be linked to other hash tables via
TCA_U32_LINK commands.

prio/pref does not really play any part here from my reading, except as
a further specifier in the walk callbacks. Making it a useful filter on
dump operations.
Do I understand that correctly that prio/pref only has meaning if
linking does not take place, because if there is linking, the prio/pref
of inserted rule is simply ignored?
I think even then the prio/pref meaning is dubious, from u32_change,

                for (pins = rtnl_dereference(*ins); pins;
                     ins = &pins->next, pins = rtnl_dereference(*ins))
                        if (TC_U32_NODE(handle) < TC_U32_NODE(pins->handle))
                                break;

I think the list insert is done via handle not via prio/pref.
That is the most confusing thing I saw in net/sched/ so far. 
Is this a bug? Sounds like one.
I don't think this is a bug at very least I don't see how we can
change it without breaking users. I know people depend on the hash map
capabilities and linking logic.
Did someone introduce *u32_node (formerly static struct tc_u_common
*u32_list;) just to allow this weirdness?

Can I just remove this shared tp_c and make the linking to other
hashtables only possible within the same prio/pref? That would make
sense to me.
The idea to make linking hash tables only possible within the same
prio/pref will break existing programs. We can't do this its part of
UAPI now and people depend on it.
Thanks.

Jiri
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help