public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Corinna Vinschen <corinna-cygwin@cygwin.com>
To: cygwin@cygwin.com
Cc: Noah Misch <noah@leadboat.com>
Subject: Re: cygserver - Postgres Multiple connection Load Testing - Inifinte Loop
Date: Fri, 24 Mar 2017 17:52:00 -0000	[thread overview]
Message-ID: <20170324171101.GI29995@calimero.vinschen.de> (raw)
In-Reply-To: <20170321025614.GA2100214@tornado.leadboat.com>

[-- Attachment #1: Type: text/plain, Size: 3468 bytes --]

Hi Noah,

thanks for the report and especially the testcase.  It took me a while
to debug that, but I think I fixed it now.  At least your testcase is
working for me now.  It also got faster, albeit always slower than Linux
because of the communication overhead between processes and cygserver.

On Mar 21 02:56, Noah Misch wrote:
> On Tue, Aug 03, 2004 at 12:06:12PM +0200, Corinna Vinschen wrote:
> > On Aug  2 20:33, sarbx-cygwin6344@mailblocks.com wrote:
> > > This time around, cygserver does not eat CPU. But after 5 to 6 
> > > concurrent
> > > connections nothing seem to work, looks kind of hung. There is no 
> > > activity in the Postgres
> > > log file. Opening a new database connection also hangs. There is no 
> > > activity on the machine.
> 
> > Any chance to create a simple testcase which uncovers that behaviour
> > without involving a whole database system?
> 
> Attached test program reproduces it on Cygwin 2.7.0, Cygwin 1.7.5, and a few
> intermediate versions.  The program creates sixteen processes that each
> perform a tight loop over the following:
> 
> - select one of four semaphores
> - reduce semaphore's value from 1 to 0 ("lock" it)
> - raise semaphore's value from 0 to 1 ("unlock" it)
> 
> On GNU/Linux, AIX, and Solaris, the processes keep busy and finish one million
> lock/unlock cycles apiece in a few minutes.  On Cygwin, they hang within a few
> seconds and under one hundred cycles apiece.  At that point, cygserver is
> unresponsive to other clients; for example, "strace /bin/true", opening a new
> Cygwin terminal, "cat /proc/sysvipc/sem" and "cygserver -S" all hang.  In most
> tests, cygserver was not consuming CPU while unresponsive.

There are two problems here.

- cygserver is using a defined number of threads in a thread pool for
  application requests.  Every request is added to a request submission
  queue and handled by the next free thread in the pool.

  The default number of threads in the pool is 10.  Each wait for a
  semaphore is blocking one thread.  If more than the number of threads
  in the pool are supposed to wait on a semaphore the pool starves.

  Raising the pool size fixes this part, but the situation is still a bit
  unsatisfying.  You may not know the load and the number of competing
  processes in every scenario beforehand, but raising cygservers thread
  pool to some really big value doesn't always make sense either.

  So what I did now is to allow cygserver to raise the number of worker
  threads on demand.  That is, if a request is in the queue and all
  worker threads are busy, just create a new one.

  There's no way yet to drop threads again, but this should be a minor
  problem in scenarions which really have a lot of contention.

- The code emulating BSD msleep/wakeup wasn't quite up to speed.
  I rewrote a major part of the code to be more robust and faster.

I pushed a patchset now, and uploaded new developer snapshots for
testing to https://cygwin.com/snapshots/

I'm also going to create a 2.8.0-0.4 test release later today.

Please give it a try, and please note that *all* patches affect
cygserver itself, so you have to test the new cygserver in the
first place.  The Cygwin DLL is not affected by the changes.


Thanks,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

  parent reply	other threads:[~2017-03-24 17:11 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200408030333.i733XEXn023894@mx3.redhat.com>
2004-08-03 10:06 ` Corinna Vinschen
2004-08-03 20:45   ` Saravanan Bellan
2004-08-03 20:54     ` Christopher Faylor
2004-08-03 21:10       ` Saravanan Bellan
2017-03-21  2:56   ` Noah Misch
2017-03-21  7:29     ` Marco Atzeri
2017-03-24 17:52     ` Corinna Vinschen [this message]
2017-03-25 10:55       ` Marco Atzeri
2017-03-25 12:02         ` Corinna Vinschen
2017-03-25 12:31           ` Marco Atzeri
2017-03-28  5:48       ` Noah Misch
2017-04-02  2:36         ` Noah Misch
2017-05-07  3:35           ` Noah Misch
2017-05-07  4:01             ` Larry Hall (Cygwin)
2017-06-14 23:32               ` Marco Atzeri
2017-06-20 11:11                 ` Corinna Vinschen
2017-06-20 17:29                   ` Marco Atzeri
2017-06-21  7:58                     ` Corinna Vinschen
2004-08-03  3:33 sarbx-cygwin6344
     [not found] <200407302132.i6ULWwXn016838@mx3.redhat.com>
2004-08-02  9:45 ` Corinna Vinschen
  -- strict thread matches above, loose matches on Subject: below --
2004-07-30 22:09 sarbx-cygwin6344
     [not found] <200407290319.i6T3JCXn018245@mx3.redhat.com>
2004-07-30 13:43 ` Corinna Vinschen
2004-07-29 10:35 sarbx-cygwin6344

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170324171101.GI29995@calimero.vinschen.de \
    --to=corinna-cygwin@cygwin.com \
    --cc=cygwin@cygwin.com \
    --cc=noah@leadboat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).