Re: The VFS cache is not freed when there is not enough free memory to allocate

From: Sonic Zhang
Date: Wed Nov 29 2006 - 02:17:31 EST


Forward to the mailing list.

Sonic Zhang wrote:
On 11/27/06, Nick Piggin <nickpiggin@xxxxxxxxxxxx> wrote:


I haven't actually written any nommu userspace code, but it is obvious
that you must try to keep malloc to <= PAGE_SIZE (although order 2 and
even 3 allocations seem to be reasonable, from process context)... Then
you would use something a bit more advanced than a linear array to store
data (a pagetable-like radix tree would be a nice, easy idea).


But, even we split the 8M memory into 2048 x 4k blocks, we still face
this failure. The key problem is that available memory is small than
2048 x 4k, while there are still a lot of VFS cache. The VFS cache can
be freed, but kernel allocation function ignores it. See the new test
application.


Which kernel allocation function? If you can provide more details I'd
like to get to the bottom of this.

Because the anonymous memory allocation in mm/nommu.c is all allocated
with GFP_KERNEL from process context, and in that case, the allocator
should not fail but call into page reclaim which in turn will free VFS
caches.



What's a better way to free the VFS cache in memory allocator?


It should be freeing it for you, so I'm not quite sure what is going
on. Can you send over the kernel messages you see when the allocation
fails?

Also, do you happen to know of a reasonable toolchain + emulator setup
that I could test the nommu kernel with?

Thanks,
Nick
-
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/