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