Re: [patch -v4 4/8] memcg: enhance memcg iterator to supportpredicates
From: Tejun Heo
Date: Mon Jun 03 2013 - 21:07:53 EST
On Mon, Jun 03, 2013 at 12:18:51PM +0200, Michal Hocko wrote:
> The caller of the iterator might know that some nodes or even subtrees
> should be skipped but there is no way to tell iterators about that so
> the only choice left is to let iterators to visit each node and do the
> selection outside of the iterating code. This, however, doesn't scale
> well with hierarchies with many groups where only few groups are
> interesting.
>
> This patch adds mem_cgroup_iter_cond variant of the iterator with a
> callback which gets called for every visited node. There are three
> possible ways how the callback can influence the walk. Either the node
> is visited, it is skipped but the tree walk continues down the tree or
> the whole subtree of the current group is skipped.
>
> TODO is it correct to reclaim + cond together? What if the cache simply
> skips interesting nodes which another predicate would find interesting?
I don't know. Maybe it's just taste but it looks pretty ugly to me.
Why does everything have to be folded into the iteration function?
The iteration only depends on the current position. Can't you factor
out skipping part outside the function rather than rolling into this
monstery thing with predicate callback? Just test the condition
outside and call a function to skip whatever is necessary?
Also, cgroup_rightmost_descendant() can be pretty expensive depending
on how your tree looks like. It travels to the rightmost child at
each level until it can't. In extreme cases, you can travel the whole
subtree. This usually isn't a problem for its usecases but yours may
be different, I'm not sure.
Thanks.
--
tejun
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/