Re: Regression from 2.6.36

From: Changli Gao
Date: Thu Apr 07 2011 - 11:27:52 EST


On Thu, Apr 7, 2011 at 8:13 PM, Eric Dumazet <eric.dumazet@xxxxxxxxx> wrote:
> Le jeudi 07 avril 2011 à 13:57 +0200, Eric Dumazet a écrit :
>
>> We had a similar memory problem in fib_trie in the past  : We force a
>> synchronize_rcu() every XXX Mbytes allocated to make sure we dont have
>> too much ram waiting to be freed in rcu queues.

I don't think there is too much memory allocated by vmalloc to free.
My patch should reduce the size of the memory allocated by vmalloc().
I think the real problem is kfree always returns the memory, whose
size is aligned to 2^n pages, and more memory are used than before.

>
> This was done in commit c3059477fce2d956
> (ipv4: Use synchronize_rcu() during trie_rebalance())
>
> It was possible in fib_trie because we hold RTNL lock, so managing
> a counter was free.
>
> In fs case, we might use a percpu_counter if we really want to limit the
> amount of space.
>
> Now, I am not even sure we should care that much and could just forget
> about this high order pages use.

In normal cases, only a few fds are used, the ftable isn't larger than
one page, so we should use kmalloc to reduce the memory cost. Maybe we
should set a upper limit for kmalloc() here. One page?

azurlt, would you please test the patch attached? Thanks.

--
Regards,
Changli Gao(xiaosuo@xxxxxxxxx)

Attachment: x.diff
Description: Binary data