cygrunsrv + sshd + rsync = 20 times too slow -- throttled?
Ken Brown
kbrown@cornell.edu
Fri Sep 10 15:17:58 GMT 2021
On 9/10/2021 6:57 AM, Ken Brown wrote:
> Hi Takashi,
>
> On 9/9/2021 8:42 AM, Takashi Yano wrote:
>> On Thu, 9 Sep 2021 21:19:40 +0900
>> Takashi Yano wrote:
>>> On Thu, 9 Sep 2021 17:05:49 +0900
>>> Takashi Yano wrote:
>>>> On Thu, 9 Sep 2021 12:41:15 +0900
>>>> Takashi Yano wrote:
>>>>> diff --git a/winsup/cygwin/fhandler_fifo.cc b/winsup/cygwin/fhandler_fifo.cc
>>>>> index 6709fb974..c40573783 100644
>>>>> --- a/winsup/cygwin/fhandler_fifo.cc
>>>>> +++ b/winsup/cygwin/fhandler_fifo.cc
>>>>> @@ -1047,6 +1047,12 @@ writer_shmem:
>>>>> ResetEvent (writer_opening);
>>>>> nwriters_unlock ();
>>>>> success:
>>>>> + if (!select_sem)
>>>>> + {
>>>>> + char name[MAX_PATH];
>>>>> + __small_sprintf(name, "semaphore-%W", get_pipe_name ()->Buffer);
>>>>> + select_sem = CreateSemaphore (&sec_none, 0, INT32_MAX, name);
>>>>> + }
>>>>> return 1;
>>>>> err_close_reader:
>>>>> saved_errno = get_errno ();
>>>>
>>>> Should this be:
>>>>> + select_sem = CreateSemaphore (sa_buf, 0, INT32_MAX, name);
>>>> ?
>>>
>>> I revised the patch a bit.
>>
>> Sorry, I revised the patch again.
>
> Thanks! This is an amazing speed-up. Here's what I see on my system:
>
> Using the HEAD of topic/pipe:
>
> $ ./fifo_test 0
>
> Total: 100MB in 7.646128 second, 13.078515MB/s
>
> $ ./fifo_test 1
>
> Total: 100MB in 5.472798 second, 18.272189MB/s
>
> $ ./fifo_test 2
>
> Total: 100MB in 0.191965 second, 520.928837MB/s
>
> $ ./fifo_test 3
> wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
>
> Total: 100MB in 0.025944 second, 3854.440894MB/s
>
> After applying your patch:
>
> $ ./fifo_test 0
>
> Total: 100MB in 0.074328 second, 1345.391630MB/s
>
> $ ./fifo_test 1
>
> Total: 100MB in 0.062126 second, 1609.632038MB/s
>
> $ ./fifo_test 2
>
> Total: 100MB in 0.013286 second, 7527.003124MB/s
>
> $ ./fifo_test 3
> wwwwrrrrrrrrrr
> Total: 100MB in 0.014044 second, 7120.326396MB/s
>
> I need to study your patch a little more, but then I'll push it if I don't see
> any problems.
>
> Thanks again. This is great.
>
> Ken
>
> P.S. I wrote this yesterday before you sent further revisions, but I forgot to
> send it. I'll recheck the latest version shortly.
I've rerun your test with the latest version, and the test results are similar.
I've also run a suite of fifo tests that I've accumulated, and they all pass
also, so I pushed your patch.
I think we're in pretty good shape now. The only detail remaining, AFAIK, is
how to best avoid a deadlock if the pipe has been created by a non-Cygwin
process. I've proposed a timeout, but maybe there's a better idea.
Ken
More information about the Cygwin-developers
mailing list