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
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 |