High CPU shoot during poll retry

From: Gaurav Srivastava <gaurav(dot)srivastava(at)globallogic(dot)com>
To: pgsql-odbc(at)postgresql(dot)org
Subject: High CPU shoot during poll retry
Date: 2014-12-12 10:31:46
Message-ID: CAAXqS3Aag2vVu9yKQvb-jdSPuTkNSi_X6HphQcz4adgXL1gOFQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Hi All,

In ODBC library later to change done as part of commit Title "Rip out
broken retry/timeout logic in SOCK_wait_for_ready." in file socket.c

Now the cpde snippet for SOCK_wait_for_ready() is like:

do {
#ifdef HAVE_POLL
fds.fd = sock->socket;
fds.events = output ? POLLOUT : POLLIN;
fds.revents = 0;
* ret = poll(&fds, 1, nowait ? 0 : -1); *
mylog("!!! poll ret=%d revents=%x\n", ret, fds.revents);
#else
FD_ZERO(&fds);
FD_ZERO(&except_fds);
FD_SET(sock->socket, &fds);
FD_SET(sock->socket, &except_fds);
if (nowait)
{
tm.tv_sec = 0;
tm.tv_usec = 0;
}
ret = select((int) sock->socket + 1, output ? NULL : &fds,
output ? &fds : NULL, &except_fds, nowait ? &tm : NULL);
#endif /* HAVE_POLL */
gerrno = SOCK_ERRNO;
} *while (ret < 0 && EINTR == gerrno);*

So whenever there is no fd is ready to be read it will immediately return
and solve the issue of infinite query hung but due to immediate return it
will go for continuous retries and causing CPU to shoot very high.This is
one of the case we are suffering in our scenario after upgrading ODBC.

One way is to put usleep from post to every call of SOCK_wait_for_ready()
to solve this,but would request if a better patch can be available to fix
this issue.
Please suggest.

Thanks and Regards,
Gaurav Srivastava | Associate Consultant
GlobalLogic
P +91.120.4342000.2920 M +91.9953996631 S ta5ramn1
www.globallogic.com
<http://www.globallogic.com/>
http://www.globallogic.com/email_disclaimer.txt

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Heikki Linnakangas 2014-12-12 20:57:01 Re: High CPU shoot during poll retry
Previous Message Michael Paquier 2014-12-10 05:57:03 Re: Let's use libpq for everything