[PATCH v3] mm/page_owner: use kvmalloc instead of kmalloc
From: Miles Chen <hidden>
Date: 2018-10-30 06:56:07
Also in:
linux-mediatek, linux-mm, lkml
On Tue, 2018-10-30 at 07:06 +0100, Michal Hocko wrote:
On Tue 30-10-18 09:29:10, Miles Chen wrote:quoted
On Mon, 2018-10-29 at 09:17 +0100, Michal Hocko wrote:quoted
On Mon 29-10-18 09:07:08, Michal Hocko wrote: [...]quoted
Besides that, the following doesn't make much sense to me. It simply makes no sense to use vmalloc for sub page allocation regardless of HIGHMEM.OK, it is still early morning here. Now I get the point of the patch. You just want to (ab)use highmeme for smaller requests. I do not like this, to be honest. It causes an internal fragmentation and more importantly the VMALLOC space on 32b where HIGHMEM is enabled (do we have any 64b with HIGHMEM btw?) is quite small to be wasted like that.thanks for your comment. It looks like that using vmalloc fallback for sub page allocation is not good here. Your comment gave another idea: 1. force kbuf to PAGE_SIZE 2. allocate a page by alloc_page(GFP_KERNEL | __GFP_HIGHMEM); so we can get a highmem page if possible 3. use kmap/kunmap pair to create mapping for this page. No vmalloc space is used. 4. do not change kvmalloc logic.If you mean for this particular situation then is this really worth it? I mean this is a short term allocation for root only so you do not have to worry about low mem depletion.
The 1...3 are applied to print_page_owner(), not in kmalloc() or kvmalloc() logic. It's a real problem when using page_owner. I found this issue recently: I'm not able to read page_owner information during a overnight test. (error: read failed: Out of memory). I replace kmalloc() with vmalloc() and it worked well.
If you are thiking in more generic terms to allow kmalloc to use highmem then I am not really sure this will work out.
I'm thinking about modify print_page_owner().