Re: [PATCH] Remove unnecessary mmap in cpg

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Rongqing,
I've tried to create that patch (on ML as "Remove unnecessary mmap in
memory_map ipc"), so can you please test it and share your results?

Also there is circular_memory_map function and there we sadly need to
really map one file to two regions of continuous memory. There seems to
be really only one way how to achieve and this is to 1. allocate big
chunk (2 * size) and then use mmap with FIXED flag to mmap file two
times, what may be not working on MIPS (any ideas how to achieve this
functionality is welcomed).

Regards,
  Honza

Rongqing Li napsal(a):
> Could I backport this patch to corosync 1.4.3?
> 
> I backport it to 1.4.3, and then run the openais self test case,
> and many test case failed.
> 
> 
> -Roy
> 
> On 05/21/2013 09:01 AM, Rongqing Li wrote:
>> Ok, I will test it soon.
>> Thanks
>>
>> -Roy
>>
>>
>> On 05/20/2013 09:57 PM, Jan Friesse wrote:
>>> Code for zero-copy in cpg does following mmaps:
>>> - Mmap anonymous, private memory to some address (-> malloc)
>>> - Mmap shared memory of fd to address returned by first mmap
>>>    (effectively shadows first mapping)
>>>
>>> This is not necessary and only one mapping is needed.
>>>
>>> Signed-off-by: Jan Friesse <jfriesse@xxxxxxxxxx>
>>> ---
>>>   exec/cpg.c |   18 +++---------------
>>>   lib/cpg.c  |   19 ++++---------------
>>>   2 files changed, 7 insertions(+), 30 deletions(-)
>>>
>>> diff --git a/exec/cpg.c b/exec/cpg.c
>>> index 695f311..bfc3813 100644
>>> --- a/exec/cpg.c
>>> +++ b/exec/cpg.c
>>> @@ -1603,7 +1603,6 @@ memory_map (
>>>       void **buf)
>>>   {
>>>       int32_t fd;
>>> -    void *addr_orig;
>>>       void *addr;
>>>       int32_t res;
>>>
>>> @@ -1620,20 +1619,9 @@ memory_map (
>>>           goto error_close_unlink;
>>>       }
>>>
>>> -    addr_orig = mmap (NULL, bytes, PROT_NONE,
>>> -        MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
>>> +    addr = mmap (NULL, bytes, PROT_READ | PROT_WRITE,
>>> +        MAP_SHARED, fd, 0);
>>>
>>> -    if (addr_orig == MAP_FAILED) {
>>> -        goto error_close_unlink;
>>> -    }
>>> -
>>> -    addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
>>> -        MAP_FIXED | MAP_SHARED, fd, 0);
>>> -
>>> -    if (addr != addr_orig) {
>>> -        munmap(addr_orig, bytes);
>>> -        goto error_close_unlink;
>>> -    }
>>>   #ifdef MADV_NOSYNC
>>>       madvise(addr, bytes, MADV_NOSYNC);
>>>   #endif
>>> @@ -1642,7 +1630,7 @@ memory_map (
>>>       if (res) {
>>>           return (-1);
>>>       }
>>> -    *buf = addr_orig;
>>> +    *buf = addr;
>>>       return (0);
>>>
>>>   error_close_unlink:
>>> diff --git a/lib/cpg.c b/lib/cpg.c
>>> index b96df4e..f0ac593 100644
>>> --- a/lib/cpg.c
>>> +++ b/lib/cpg.c
>>> @@ -730,7 +730,6 @@ static int
>>>   memory_map (char *path, const char *file, void **buf, size_t bytes)
>>>   {
>>>       int32_t fd;
>>> -    void *addr_orig;
>>>       void *addr;
>>>       int32_t res;
>>>       char *buffer;
>>> @@ -772,28 +771,18 @@ retry_write:
>>>       }
>>>       free (buffer);
>>>
>>> -    addr_orig = mmap (NULL, bytes, PROT_NONE,
>>> -        MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
>>> +    addr = mmap (NULL, bytes, PROT_READ | PROT_WRITE,
>>> +        MAP_SHARED, fd, 0);
>>>
>>> -    if (addr_orig == MAP_FAILED) {
>>> -        goto error_close_unlink;
>>> -    }
>>> -
>>> -    addr = mmap (addr_orig, bytes, PROT_READ | PROT_WRITE,
>>> -        MAP_FIXED | MAP_SHARED, fd, 0);
>>> -
>>> -    if (addr != addr_orig) {
>>> -        goto error_close_unlink;
>>> -    }
>>>   #ifdef MADV_NOSYNC
>>> -    madvise(addr_orig, bytes, MADV_NOSYNC);
>>> +    madvise(addr, bytes, MADV_NOSYNC);
>>>   #endif
>>>
>>>       res = close (fd);
>>>       if (res) {
>>>           return (-1);
>>>       }
>>> -    *buf = addr_orig;
>>> +    *buf = addr;
>>>
>>>       return 0;
>>>
>>>
>>
> 

_______________________________________________
discuss mailing list
discuss@xxxxxxxxxxxx
http://lists.corosync.org/mailman/listinfo/discuss




[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux