mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-16 08:24:42 +00:00
f69fea64e0
Right now we're using a DWCAS to atomically set the running_mask while being constrained by the thread_mask. This DWCAS is annoying because we may seriously need it later when adding support for thread groups, for checking that the running_mask applies to the correct group. It turns out that the DWCAS is not strictly necessary because we never need it to set the thread_mask based on the running_mask, only the other way around. And in fact, the running_mask is always cleared alone, and the thread_mask is changed alone as well. The running_mask is only relevant to indicate a takeover when the thread_mask matches it. Any bit set in running and not present in thread_mask indicates a transition in progress. As such, it is possible to re-arrange this by using a regular CAS around a consistency check between running_mask and thread_mask in fd_update_events and by making a CAS on running_mask then an atomic store on the thread_mask in fd_takeover(). The only other case is fd_delete() but that one already sets the running_mask before clearing the thread_mask, which is compatible with the consistency check above. This change has happily survived 10 billion takeovers on a 16-thread machine at 800k requests/s. The fd-migration doc was updated to reflect this change. |
||
---|---|---|
.. | ||
acl.txt | ||
body-parsing.txt | ||
buffer-api.txt | ||
connect-status.txt | ||
connection-header.txt | ||
connection-scale.txt | ||
entities-v2.txt | ||
entities.fig | ||
entities.pdf | ||
entities.svg | ||
entities.txt | ||
fd-migration.txt | ||
filters.txt | ||
hashing.txt | ||
header-parser-speed.txt | ||
header-tree.txt | ||
http-cookies.txt | ||
http-docs.txt | ||
http-parsing.txt | ||
htx-api.txt | ||
initcalls.txt | ||
list.fig | ||
list.png | ||
listener-states.fig | ||
listener-states.png | ||
lua_socket.fig | ||
lua_socket.pdf | ||
muxes.fig | ||
muxes.pdf | ||
muxes.png | ||
muxes.svg | ||
naming.txt | ||
notes-layers.txt | ||
pattern.dia | ||
pattern.pdf | ||
polling-states.fig | ||
repartition-be-fe-fi.txt | ||
sched.fig | ||
sched.pdf | ||
sched.png | ||
sched.svg | ||
sequence.fig | ||
ssl_cert.dia | ||
stats-v2.txt | ||
stream-sock-states.fig |