cygrunsrv + sshd + rsync = 20 times too slow -- throttled?

Corinna Vinschen corinna-cygwin@cygwin.com
Fri Sep 3 11:31:08 GMT 2021


On Sep  3 19:13, Takashi Yano wrote:
> On Fri, 3 Sep 2021 19:00:46 +0900
> Takashi Yano wrote:
> > On Thu, 2 Sep 2021 21:35:21 +0200
> > Corinna Vinschen wrote:
> > > On Sep  2 21:00, Corinna Vinschen wrote:
> > > It's getting too late again.  I drop off for tonight, but I attached
> > > my POC code I have so far.  It also adds the snippets from my previous
> > > patch which fixes stuff Takashi found during testing.  It also fixes
> > > something which looks like a bug in raw_write:
> > > 
> > > -	  ptr = ((char *) ptr) + chunk;
> > > +	  ptr = ((char *) ptr) + nbytes_now;
> > > 
> > > Incrementing ptr by chunk bytes while only nbytes_now have been written
> > > looks incorrect.
> > > 
> > > As for the reader, it makes the # of bytes to read dependent on the
> > > number of reader handles.  I don't know if that's such a bright idea,
> > > but this can be changed easily.
> > > 
> > > Anyway, this runs all my testcases successfully but they are anything
> > > but thorough.
> > > 
> > > Patch relativ to topic/pipe attached.  Would you both mind to take a
> > > scrutinizing look?
> > 
> > Thanks.
> > 
> > Your code seems that read() returns only the partial data even
> > if the pipe stil has more data. Is this by design?
> > 
> > This happes in both blocking and non-blocking case.
> 
> The patch attached seems to fix the issue.

I'm sorry, but I don't see what your patch is supposed to do in the
first place.  What I see is that it now calls NtQueryInformationFile
even in the non-blocking case, which is not supposed to happen.

I'm a bit puzzled what the actual bug is.

The code changing len is only called if there's no data in the pipe.
In that case we only request a partial buffer so as not to block
the writer on select.

If there *is* data in the pipe, it will just go straight to the
NtReadFile code without changing len.

Where's the mistake?


Thanks,
Corinna


More information about the Cygwin-developers mailing list