Re: High CPU shoot during poll retry

From: Heikki Linnakangas <hlinnakangas(at)vmware(dot)com>
To: Gaurav Srivastava <gaurav(dot)srivastava(at)globallogic(dot)com>, <pgsql-odbc(at)postgresql(dot)org>
Subject: Re: High CPU shoot during poll retry
Date: 2014-12-12 20:57:01
Message-ID: 548B569D.4040008@vmware.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

On 12/12/2014 12:31 PM, Gaurav Srivastava wrote:
> 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.

Why do you think it will go into continuous retries?

- Heikki

In response to

Responses

Browse pgsql-odbc by date

  From Date Subject
Next Message Gaurav Srivastava 2014-12-13 02:48:58 Re: High CPU shoot during poll retry
Previous Message Gaurav Srivastava 2014-12-12 10:31:46 High CPU shoot during poll retry