]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MEDIUM: threads/polling: Use fd_cache_mask instead of fd_cache_num
authorChristopher Faulet <cfaulet@haproxy.com>
Mon, 15 Jan 2018 11:16:34 +0000 (12:16 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 23 Jan 2018 14:39:51 +0000 (15:39 +0100)
commit32467fef98f9a4f14be8864bc44b3551f8e34759
tree11c84698d6471ab2a01ceadb56c4f995200ad943
parent69553fe62c5c69753d1862a3e74740a1ff6c4d8d
BUG/MEDIUM: threads/polling: Use fd_cache_mask instead of fd_cache_num

fd_cache_num is the number of FDs in the FD cache. It is a global variable. So
it is underoptimized because we may be lead to consider there are waiting FDs
for the current thread in the FD cache while in fact all FDs are assigned to the
other threads. So, in such cases, the polling loop will be evaluated many more
times than necessary.

Instead, we now check if the thread id is set in the bitfield fd_cache_mask.

[wt: it's not exactly a bug, rather a design limitation of the thread
 which was not addressed in time for the 1.8 release. It can appear more
 often than we initially predicted, when more threads are running than
 the number of assigned CPU cores, or when certain threads spend
 milliseconds computing crypto keys while other threads spin on
 epoll_wait(0)=0]

This patch should be backported to 1.8.
src/haproxy.c