* [PATCH][RFC] mm: warning message for vm_map_ram about vm size
@ 2014-03-10 4:57 Gioh Kim
2014-03-10 5:47 ` Minchan Kim
0 siblings, 1 reply; 3+ messages in thread
From: Gioh Kim @ 2014-03-10 4:57 UTC (permalink / raw)
To: 'Andrew Morton', 'Joonsoo Kim',
'Zhang Yanfei',
linux-mm, linux-kernel
Cc: 이건호, chanho.min, Minchan Kim
Hi,
I have a failure of allocation of virtual memory on ARMv7 based platform.
I called alloc_page()/vm_map_ram() for allocation/mapping pages.
Virtual memory space exhausting problem occurred.
I checked virtual memory space and found that there are too many 4MB chunks.
I thought that if just one page in the 4MB chunk lives long,
the entire chunk cannot be freed. Therefore new chunk is created again and again.
In my opinion, the vm_map_ram() function should be used for temporary mapping
and/or short term memory mapping. Otherwise virtual memory is wasted.
I am not sure if my opinion is correct. If it is, please add some warning message
about the vm_map_ram().
---8<---
Subject: [PATCH] mm: warning comment for vm_map_ram
vm_map_ram can occur locking of virtual memory space
because if only one page lives long in one vmap_block,
it takes 4MB (1024-times more than one page) space.
Change-Id: I6f5919848cf03788b5846b7d850d66e4d93ac39a
Signed-off-by: Gioh Kim <gioh.kim@lge.com>
---
mm/vmalloc.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 0fdf968..2de1d1b 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1083,6 +1083,10 @@ EXPORT_SYMBOL(vm_unmap_ram);
* @node: prefer to allocate data structures on this node
* @prot: memory protection to use. PAGE_KERNEL for regular RAM
*
+ * This function should be used for TEMPORARY mapping. If just one page lives i
+ * long, it would occupy 4MB vm size permamently. 100 pages (just 400KB) could
+ * takes 400MB with bad luck.
+ *
* Returns: a pointer to the address that has been mapped, or %NULL on failure
*/
void *vm_map_ram(struct page **pages, unsigned int count, int node, pgprot_t prot)
--
1.7.9.5
Gioh Kim / 김 기 오
Research Engineer
Advanced OS Technology Team
Software Platform R&D Lab.
Mobile: 82-10-7322-5548
E-mail: gioh.kim@lge.com
19, Yangjae-daero 11gil
Seocho-gu, Seoul 137-130, Korea
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH][RFC] mm: warning message for vm_map_ram about vm size
2014-03-10 4:57 [PATCH][RFC] mm: warning message for vm_map_ram about vm size Gioh Kim
@ 2014-03-10 5:47 ` Minchan Kim
2014-03-10 6:28 ` Zhang Yanfei
0 siblings, 1 reply; 3+ messages in thread
From: Minchan Kim @ 2014-03-10 5:47 UTC (permalink / raw)
To: Gioh Kim
Cc: 'Andrew Morton', 'Joonsoo Kim',
'Zhang Yanfei',
linux-mm, linux-kernel, 이건호,
chanho.min, Johannes Weiner
Hi Giho,
On Mon, Mar 10, 2014 at 01:57:07PM +0900, Gioh Kim wrote:
> Hi,
>
> I have a failure of allocation of virtual memory on ARMv7 based platform.
>
> I called alloc_page()/vm_map_ram() for allocation/mapping pages.
> Virtual memory space exhausting problem occurred.
> I checked virtual memory space and found that there are too many 4MB chunks.
>
> I thought that if just one page in the 4MB chunk lives long,
> the entire chunk cannot be freed. Therefore new chunk is created again and again.
>
> In my opinion, the vm_map_ram() function should be used for temporary mapping
> and/or short term memory mapping. Otherwise virtual memory is wasted.
>
> I am not sure if my opinion is correct. If it is, please add some warning message
> about the vm_map_ram().
>
>
>
> ---8<---
>
> Subject: [PATCH] mm: warning comment for vm_map_ram
>
> vm_map_ram can occur locking of virtual memory space
> because if only one page lives long in one vmap_block,
> it takes 4MB (1024-times more than one page) space.
For clarification, vm_map_ram has fragment problem because it
couldn't purge a chunk(ie, 4M address space) if there is a pinning
object in that addresss space so it could consume all VMALLOC
address space easily.
We can fix the fragementaion problem with using vmap instead of
vm_map_ram but it wouldn't a good solution because vmap is much
slower than vm_map_ram for VMAP_MAX_ALLOC below. In my x86 machine,
vm_map_ram is 5 times faster than vmap.
AFAICR, some proprietary GPU driver uses that function heavily so
performance would be really important so I want to stick to use
vm_map_ram.
Another option is that caller should separate long-life and short-life
object and use vmap for long-life but vm_map_ram for short-life.
But it's not a good solution because it's hard for allocator layer
to detect it that how customer lives with the object.
So I thought to fix that problem with revert [1] and adding more
logic to solve fragmentation problem and make bitmap search
operation more efficient by caching the hole. It might handle
fragmentation at the moment but it would make more IPI storm for
TLB flushing as time goes by so that it would mitigate API itself
so using for only temporal object is too limited but it's best at the
moment. I am supporting your opinion.
Let's add some notice message to user.
[1] [3fcd76e8028, mm/vmalloc.c: remove dead code in vb_alloc]
>
> Change-Id: I6f5919848cf03788b5846b7d850d66e4d93ac39a
> Signed-off-by: Gioh Kim <gioh.kim@lge.com>
> ---
> mm/vmalloc.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
> index 0fdf968..2de1d1b 100644
> --- a/mm/vmalloc.c
> +++ b/mm/vmalloc.c
> @@ -1083,6 +1083,10 @@ EXPORT_SYMBOL(vm_unmap_ram);
> * @node: prefer to allocate data structures on this node
> * @prot: memory protection to use. PAGE_KERNEL for regular RAM
> *
> + * This function should be used for TEMPORARY mapping. If just one page lives i
> + * long, it would occupy 4MB vm size permamently. 100 pages (just 400KB) could
> + * takes 400MB with bad luck.
> + *
If you use this function for below VMAP_MAX_ALLOC pages, it could be faster
than vmap so it's good but if you mix long-life and short-life object
with vm_map_ram, it could consume lots of address space by fragmentation(
expecially, 32bit machine) so you could see failure in the end.
So, please use this function for short-life object.
> * Returns: a pointer to the address that has been mapped, or %NULL on failure
> */
> void *vm_map_ram(struct page **pages, unsigned int count, int node, pgprot_t prot)
> --
> 1.7.9.5
>
> Gioh Kim / e1? e,? i??
> Research Engineer
> Advanced OS Technology Team
> Software Platform R&D Lab.
> Mobile: 82-10-7322-5548
> E-mail: gioh.kim@lge.com
> 19, Yangjae-daero 11gil
> Seocho-gu, Seoul 137-130, Korea
>
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
--
Kind regards,
Minchan Kim
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH][RFC] mm: warning message for vm_map_ram about vm size
2014-03-10 5:47 ` Minchan Kim
@ 2014-03-10 6:28 ` Zhang Yanfei
0 siblings, 0 replies; 3+ messages in thread
From: Zhang Yanfei @ 2014-03-10 6:28 UTC (permalink / raw)
To: Minchan Kim
Cc: Gioh Kim, 'Andrew Morton', 'Joonsoo Kim',
linux-mm, linux-kernel, 이건호,
chanho.min, Johannes Weiner
On 03/10/2014 01:47 PM, Minchan Kim wrote:
> Hi Giho,
>
> On Mon, Mar 10, 2014 at 01:57:07PM +0900, Gioh Kim wrote:
>> Hi,
>>
>> I have a failure of allocation of virtual memory on ARMv7 based platform.
>>
>> I called alloc_page()/vm_map_ram() for allocation/mapping pages.
>> Virtual memory space exhausting problem occurred.
>> I checked virtual memory space and found that there are too many 4MB chunks.
>>
>> I thought that if just one page in the 4MB chunk lives long,
>> the entire chunk cannot be freed. Therefore new chunk is created again and again.
>>
>> In my opinion, the vm_map_ram() function should be used for temporary mapping
>> and/or short term memory mapping. Otherwise virtual memory is wasted.
>>
>> I am not sure if my opinion is correct. If it is, please add some warning message
>> about the vm_map_ram().
>>
>>
>>
>> ---8<---
>>
>> Subject: [PATCH] mm: warning comment for vm_map_ram
>>
>> vm_map_ram can occur locking of virtual memory space
>> because if only one page lives long in one vmap_block,
>> it takes 4MB (1024-times more than one page) space.
>
> For clarification, vm_map_ram has fragment problem because it
> couldn't purge a chunk(ie, 4M address space) if there is a pinning
> object in that addresss space so it could consume all VMALLOC
> address space easily.
>
> We can fix the fragementaion problem with using vmap instead of
> vm_map_ram but it wouldn't a good solution because vmap is much
> slower than vm_map_ram for VMAP_MAX_ALLOC below. In my x86 machine,
> vm_map_ram is 5 times faster than vmap.
>
> AFAICR, some proprietary GPU driver uses that function heavily so
> performance would be really important so I want to stick to use
> vm_map_ram.
>
> Another option is that caller should separate long-life and short-life
> object and use vmap for long-life but vm_map_ram for short-life.
> But it's not a good solution because it's hard for allocator layer
> to detect it that how customer lives with the object.
Indeed. So at least the note comment should be added.
>
> So I thought to fix that problem with revert [1] and adding more
> logic to solve fragmentation problem and make bitmap search
> operation more efficient by caching the hole. It might handle
> fragmentation at the moment but it would make more IPI storm for
> TLB flushing as time goes by so that it would mitigate API itself
> so using for only temporal object is too limited but it's best at the
> moment. I am supporting your opinion.
>
> Let's add some notice message to user.
>
> [1] [3fcd76e8028, mm/vmalloc.c: remove dead code in vb_alloc]
>
>>
>> Change-Id: I6f5919848cf03788b5846b7d850d66e4d93ac39a
>> Signed-off-by: Gioh Kim <gioh.kim@lge.com>
>> ---
>> mm/vmalloc.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/mm/vmalloc.c b/mm/vmalloc.c
>> index 0fdf968..2de1d1b 100644
>> --- a/mm/vmalloc.c
>> +++ b/mm/vmalloc.c
>> @@ -1083,6 +1083,10 @@ EXPORT_SYMBOL(vm_unmap_ram);
>> * @node: prefer to allocate data structures on this node
>> * @prot: memory protection to use. PAGE_KERNEL for regular RAM
>> *
>> + * This function should be used for TEMPORARY mapping. If just one page lives i
>> + * long, it would occupy 4MB vm size permamently. 100 pages (just 400KB) could
>> + * takes 400MB with bad luck.
>> + *
>
> If you use this function for below VMAP_MAX_ALLOC pages, it could be faster
> than vmap so it's good but if you mix long-life and short-life object
> with vm_map_ram, it could consume lots of address space by fragmentation(
> expecially, 32bit machine) so you could see failure in the end.
> So, please use this function for short-life object.
Minchan's is better. So I suggest Giho post another patch with this comment
and take what Minchan said above to the commit log. And you can feel free to
add:
Reviewed-by: Zhang Yanfei <zhangyanfei@cn.fujitsu.com>
Thanks.
>
>> * Returns: a pointer to the address that has been mapped, or %NULL on failure
>> */
>> void *vm_map_ram(struct page **pages, unsigned int count, int node, pgprot_t prot)
>> --
>> 1.7.9.5
>>
>> Gioh Kim / 김 기 오
>> Research Engineer
>> Advanced OS Technology Team
>> Software Platform R&D Lab.
>> Mobile: 82-10-7322-5548
>> E-mail: gioh.kim@lge.com
>> 19, Yangjae-daero 11gil
>> Seocho-gu, Seoul 137-130, Korea
>>
>>
>> --
>> To unsubscribe, send a message with 'unsubscribe linux-mm' in
>> the body to majordomo@kvack.org. For more info on Linux MM,
>> see: http://www.linux-mm.org/ .
>> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
>
--
Thanks.
Zhang Yanfei
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-03-10 6:29 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-03-10 4:57 [PATCH][RFC] mm: warning message for vm_map_ram about vm size Gioh Kim
2014-03-10 5:47 ` Minchan Kim
2014-03-10 6:28 ` Zhang Yanfei
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox