2016-11-15 09:56:11

by Ganesh Mahendran

[permalink] [raw]
Subject: [V2] android: binder: use VM_ALLOC to get vm area

VM_IOREMAP is used to access hardware through a mechanism called
I/O mapped memory. Android binder is a IPC machanism which will
not access I/O memory.

Also VM_IOREMAP has alignment requiement which may not needed in
binder.
__get_vm_area_node()
{
...
if (flags & VM_IOREMAP)
align = 1ul << clamp_t(int, fls_long(size),
PAGE_SHIFT, IOREMAP_MAX_ORDER);
...
}

This patch use VM_ALLOC to get vm area.

Below is the throughput test result:

# ./binderThroughputTest -w 100
I run this command 10 times:
before after
average iterations per sec: 11199.9 11886.9

No performance regression found throgh binder test.

Signed-off-by: Ganesh Mahendran <[email protected]>
---
drivers/android/binder.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 3c71b98..b5908ec 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -2901,7 +2901,7 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
goto err_already_mapped;
}

- area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP);
+ area = get_vm_area(vma->vm_end - vma->vm_start, VM_ALLOC);
if (area == NULL) {
ret = -ENOMEM;
failure_string = "get_vm_area";
--
1.9.1


2016-11-15 10:18:50

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [V2] android: binder: use VM_ALLOC to get vm area

On Tue, Nov 15, 2016 at 05:55:39PM +0800, Ganesh Mahendran wrote:
> VM_IOREMAP is used to access hardware through a mechanism called
> I/O mapped memory. Android binder is a IPC machanism which will
> not access I/O memory.
>
> Also VM_IOREMAP has alignment requiement which may not needed in
> binder.
> __get_vm_area_node()
> {
> ...
> if (flags & VM_IOREMAP)
> align = 1ul << clamp_t(int, fls_long(size),
> PAGE_SHIFT, IOREMAP_MAX_ORDER);
> ...
> }
>
> This patch use VM_ALLOC to get vm area.
>
> Below is the throughput test result:
>
> # ./binderThroughputTest -w 100
> I run this command 10 times:
> before after
> average iterations per sec: 11199.9 11886.9
>
> No performance regression found throgh binder test.
>
> Signed-off-by: Ganesh Mahendran <[email protected]>
> ---
> drivers/android/binder.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

What changed from v1?

Always list that below the --- line.

thanks,

greg k-h

2016-11-15 13:18:38

by Ganesh Mahendran

[permalink] [raw]
Subject: Re: [V2] android: binder: use VM_ALLOC to get vm area

Hi, Greg

2016-11-15 18:18 GMT+08:00 Greg KH <[email protected]>:
> On Tue, Nov 15, 2016 at 05:55:39PM +0800, Ganesh Mahendran wrote:
>> VM_IOREMAP is used to access hardware through a mechanism called
>> I/O mapped memory. Android binder is a IPC machanism which will
>> not access I/O memory.
>>
>> Also VM_IOREMAP has alignment requiement which may not needed in
>> binder.
>> __get_vm_area_node()
>> {
>> ...
>> if (flags & VM_IOREMAP)
>> align = 1ul << clamp_t(int, fls_long(size),
>> PAGE_SHIFT, IOREMAP_MAX_ORDER);
>> ...
>> }
>>
>> This patch use VM_ALLOC to get vm area.
>>
>> Below is the throughput test result:
>>
>> # ./binderThroughputTest -w 100
>> I run this command 10 times:
>> before after
>> average iterations per sec: 11199.9 11886.9
>>
>> No performance regression found throgh binder test.
>>
>> Signed-off-by: Ganesh Mahendran <[email protected]>
>> ---
>> drivers/android/binder.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> What changed from v1?

Sorry for missing the change information.

In V2, I run the binder test. And there is no side effect with this
patch.

>
> Always list that below the --- line.

Thanks for reminder.

>
> thanks,
>
> greg k-h