[Varnish] #644: Deadlock in 2.0.x under high load.
Varnish
varnish-bugs at projects.linpro.no
Thu Feb 11 12:57:37 CET 2010
#644: Deadlock in 2.0.x under high load.
----------------------+-----------------------------------------------------
Reporter: kmcfate | Owner: kristian
Type: defect | Status: new
Priority: normal | Milestone:
Component: varnishd | Version: 2.0
Severity: normal | Resolution:
Keywords: deadlock |
----------------------+-----------------------------------------------------
Comment (by kristian):
Ok, EPOLLET is not ideal here.
Epoll with ET will wake up even if you do not empty the buffer, but it
will only wake up if something changes.
The problem seems to be that the pipe buffer fills up, which means that
write() on the worker threads turns into a blocking call. If more than
NEEV clients end up in this situation, varnish will deadlock: It will wake
up 100 threads, but all of those threads will in turn block when they are
done, which WONT wake up epoll because nothing actually changed on the fd.
Having discussed this a bit and run some tests, I don't see any real
reason why we want to use edge triggered mode at all: there are no
situations where we don't want to read the data waiting on the fd right
away. However, letting epoll wake up potential other threads while we re-
enter threads into the thread pool sounds like a good idea.
--
Ticket URL: <http://varnish-cache.org/ticket/644#comment:5>
Varnish <http://varnish.projects.linpro.no/>
The Varnish HTTP Accelerator
More information about the varnish-bugs
mailing list