mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-24 23:31:40 +02:00
Since commit f8fb4f75f ("MINOR: atomic: implement a more efficient arm64 __ha_cas_dw() using pairs"), on some modern arm64 (armv8.1+) compiled with -march=armv8.1-a under gcc-7.5.0, a build error may appear on ev_poll.o : /tmp/ccHD2lN8.s:1771: Error: reg pair must start from even reg at operand 1 -- `casp x27,x28,x22,x23,[x12]' Makefile:927: recipe for target 'src/ev_poll.o' failed It appears that the compiler cannot always assign register pairs there for a structure made of two u64. It was possibly later addressed since gcc-9.3 never caused this, but there's no trivially available info on the subject in the changelogs. Unsuprizingly, using a u128 instead does fix this, but it significantly inflates the code (+4kB for just 6 places, very likely that it loaded some extra stubs) and the comparison is ugly, involving two slower conditional jumps instead of a single one and a conditional comparison. For example, ha_random64() grew from 144 bytes to 232. However, simply forcing the base register does work pretty well, and makes the code even cleaner and more efficient by further reducing it by about 4.5kB, possibly because it helps the compiler to pick suitable registers for the pair there. And the perf on 64-cores looks steadily 0.5% above the previous one, so let's do this. Note that the commit above was backported to 2.3 to fix scalability issues on AWS Graviton2 platform, so this one will need to be as well.
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)
Description
Languages
C
98.1%
Shell
0.8%
Makefile
0.5%
Lua
0.2%
Python
0.2%