]> git.ipfire.org Git - thirdparty/haproxy.git/commit
MEDIUM: atomic: relax the load/store barriers on x86_64
authorWilly Tarreau <w@1wt.eu>
Thu, 15 Jul 2021 14:02:47 +0000 (16:02 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 1 Aug 2021 15:34:06 +0000 (17:34 +0200)
commit99198546f656ea440a03a18efb3308b4d11e35ba
tree5d3d36437e4a90d723fe30b01397c7560777589b
parentcb0451146f2ce4bf8a93890c403262b5308608a4
MEDIUM: atomic: relax the load/store barriers on x86_64

The x86-tso model makes the load and store barriers unneeded for our
usage as long as they perform at least a compiler barrier: the CPU
will respect store ordering and store vs load ordering. It's thus
safe to remove the lfence and sfence which are normally needed only
to communicate with external devices. Let's keep the mfence though,
to make sure that reads of same memory location after writes report
the value from memory and not the one snooped from the write buffer
for too long.

An in-depth review of all use cases tends to indicate that this is
okay in the rest of the code. Some parts could be cleaned up to
use atomic stores and atomic loads instead of explicit barriers
though.

Doing this reliably increases the overall performance by about 2-2.5%
on a 8c-16t Xeon thanks to less frequent flushes (it's likely that the
biggest gain is in the MT lists which use them a lot, and that this
results in less cache line flushes).
include/haproxy/atomic.h