87aff021db
Since version 1.1.0, OpenSSL's libcrypto ignores the provided locking mechanism and uses pthread's rwlocks instead. The problem is that for some code paths (e.g. async engines) this results in a huge amount of syscalls on systems facing a bit of contention, to the point where more than 80% of the CPU can be spent in the system dealing with spinlocks just for futex_wake(). This patch provides an alternative by redefining the relevant pthread rwlocks from the low-overhead version of the progressive rw locks. This way there will be no more syscalls in case of contention, and CPU will be burnt in userland. Doing this saves massive amounts of CPU, where the locks only take 12-15% vs 80% before, which allows SSL to work much faster on large thread counts (e.g. 24 or more). The tryrdlock and trywrlock variants have been implemented using a CAS since their goal is only to succeed on no contention and never to wait. The pthread_rwlock API is complete except that the timed versions of the rdlock and wrlock do not wait and simply fall back to trylock versions. Since the gains have only been observed with async engines for now, this option remains disabled by default. It can be enabled at build time using USE_PTHREAD_EMULATION=1. |
||
---|---|---|
.github | ||
addons | ||
admin | ||
dev | ||
doc | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
.travis.yml | ||
BRANCHES | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
SUBVERS | ||
VERDATE | ||
VERSION |
README
The HAProxy documentation has been split into a number of different files for ease of use. Please refer to the following files depending on what you're looking for : - INSTALL for instructions on how to build and install HAProxy - BRANCHES to understand the project's life cycle and what version to use - LICENSE for the project's license - CONTRIBUTING for the process to follow to submit contributions The more detailed documentation is located into the doc/ directory : - doc/intro.txt for a quick introduction on HAProxy - doc/configuration.txt for the configuration's reference manual - doc/lua.txt for the Lua's reference manual - doc/SPOE.txt for how to use the SPOE engine - doc/network-namespaces.txt for how to use network namespaces under Linux - doc/management.txt for the management guide - doc/regression-testing.txt for how to use the regression testing suite - doc/peers.txt for the peers protocol reference - doc/coding-style.txt for how to adopt HAProxy's coding style - doc/internals for developer-specific documentation (not all up to date)