mmap failure [was: cygrunsrv + sshd + rsync = 20 times too slow -- throttled?]

Ken Brown kbrown@cornell.edu
Sun Sep 5 13:24:38 GMT 2021


On 9/4/2021 8:04 PM, Ken Brown via Cygwin wrote:
> On 9/4/2021 6:58 PM, Ken Brown via Cygwin wrote:
>> On 9/4/2021 6:54 PM, Ken Brown via Cygwin wrote:
>>> On 9/4/2021 6:37 PM, Ken Brown via Cygwin wrote:
>>>> I've reduced the procps failure to the following test case:
>>>>
>>>> $ cat mmap_test.c
>>>> #include <unistd.h>
>>>> #include <stdio.h>
>>>> #include <sys/mman.h>
>>>>
>>>> int
>>>> main ()
>>>> {
>>>>    void *addr;
>>>>    int page_size = getpagesize ();
>>>>
>>>>    addr = mmap (0, page_size, PROT_READ | PROT_WRITE,
>>>>                 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
>>>>    if (addr == MAP_FAILED)
>>>>      perror ("mmap");
>>>> }
>>>>
>>>> $ gcc mmap_test.c
>>>>
>>>> $ ./a
>>>> mmap: Invalid argument
>>>>
>>>> This happens if I use cygwin1.dll built from the current git master.  But it 
>>>> also happens if I build from cygwin-3_2_0-release with the recent patches 
>>>> applied that make Cygwin build without error:
>>>>
>>>> 0e12b4939 Cygwin: C++17: register keyword is deprecated
>>>> a7340e0c0 Cygwin: dumper: fix up GCC pragma for g++ 11.2
>>>> 2a212c086 Cygwin: workaround a g++ 11.2 initialization bug
>>>> 9e3f1737e Cygwin: loader script: add DWARF 5 sections
>>>> bdfd2b004 Cygwin: testsuite: avoid "conflicting types" gcc warning
>>>> 6fc498e2e strstr: avoid warnings
>>>> 26da270b2 ldexp/ldexpf: avoid assembler warning
>>>> edce2a557 Cygwin: fix declaration of RtlInitEmptyUnicodeString
>>>
>>> Sorry, those commit ids are wrong.  They're what I got after rebasing the 
>>> master branch so that those commits come first.
>>
>> [Pressed Send too soon.]
>>
>> Here are the correct commits:
>>
>> 8169e39ab Cygwin: C++17: register keyword is deprecated
>> 3ca80b360 Cygwin: dumper: fix up GCC pragma for g++ 11.2
>> bdb7991db Cygwin: workaround a g++ 11.2 initialization bug
>> 801120c1f Cygwin: loader script: add DWARF 5 sections
>> d5cc66426 Cygwin: testsuite: avoid "conflicting types" gcc warning
>> c2fe205b5 strstr: avoid warnings
>> 76c2c7a89 ldexp/ldexpf: avoid assembler warning
>> eeeb5650c Cygwin: fix declaration of RtlInitEmptyUnicodeString
>>
>>>
>>>> So there appears to be something wrong with cygwin1.dll built with the 
>>>> current build tools (gcc 11.2.0, binutils 2.37, not sure what else is 
>>>> relevant).
> 
> Wait a minute...I'll bet this is related to the MEM_EXTENDED_PARAMETER 
> initialization problem that was dealt with in commit bdb7991db.

More data: When I run the test case under gdb, it succeeds.  When I run it under 
strace, I see VirtualAlloc2 in fhandler_dev_zero::mmap failing with windows 
error 87.

Ken


More information about the Cygwin mailing list