mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-07 03:48:46 +00:00
On connection error processing, we can see massive storms of calls to pendconn_cond_unlink() to release a possible place in the queue. For example, in issue #908, on average half of the threads are caught in this function via back_try_conn_req() consecutive to a synchronous error. However we wait until grabbing the lock to know if the pendconn is effectively in a queue, which is expensive for many cases. We know the transition may only happen from in-queue to out-of-queue so it's safe to first run a preliminary check to see if it's worth going further. This will allow to avoid the cost of locking for most requests. This should not change anything for those completing correctly as they're already run through pendconn_free() which doesn't call pendconn_cond_unlink() unless deemed necessary. |
||
---|---|---|
.. | ||
haproxy | ||
import |