mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-20 12:40:46 +00:00
haproxy public development tree
76390dac06
The preliminary approach to dealing with heavy tasks forced us to quit the poller after meeting one. Now instead we process at most one per poll loop and ignore the next ones, so that we get more bandwidth to process all other classes. Doing so further reduced the induced HTTP request latency at 100k req/s under the stress of 1000 concurrent SSL handshakes in the following proportions: | default | low-latency ---------+------------+-------------- before | 2.75 ms | 2.0 ms after | 1.38 ms | 0.98 ms In both cases, the latency is roughly halved. It's worth noting that both values are now exactly 10 times better than in 2.4-dev9. Even the percentiles have much improved. For 16 HTTP connections (1 per thread) competing with 1000 SSL handshakes, we're seeing these long-tail latencies (in milliseconds) : | 99.5% | 99.9% | 100% -----------+---------+---------+-------- 2.4-dev9 | 48.4 | 58.1 | 78.5 previous | 6.2 | 11.4 | 67.8 this patch | 2.8 | 2.9 | 6.1 The task latency profiling report now shows this in default mode: $ socat - /tmp/sock1 <<< "show profiling" Per-task CPU profiling : on # set profiling tasks {on|auto|off} Tasks activity: function calls cpu_tot cpu_avg lat_tot lat_avg si_cs_io_cb 3061966 2.224s 726.0ns 42.03s 13.72us h1_io_cb 3061960 6.418s 2.096us 18.76m 367.6us process_stream 3059982 9.137s 2.985us 15.52m 304.3us ssl_sock_io_cb 602657 4.265m 424.7us 4.736h 28.29ms h1_timeout_task 202973 - - 6.254s 30.81us accept_queue_process 135547 1.179s 8.699us 16.29s 120.1us srv_cleanup_toremove_conns 81 15.64ms 193.1us 30.87ms 381.1us task_run_applet 10 758.7us 75.87us 51.77us 5.176us srv_cleanup_idle_conns 4 375.3us 93.83us 54.52us 13.63us And this in low-latency mode, showing that both si_cs_io_cb() and process_stream() have significantly benefitted from the improvement, with values 50 to 200 times smaller than 2.4-dev9: $ socat - /tmp/sock1 <<< "show profiling" Per-task CPU profiling : on # set profiling tasks {on|auto|off} Tasks activity: function calls cpu_tot cpu_avg lat_tot lat_avg h1_io_cb 6407006 11.86s 1.851us 31.14m 291.6us process_stream 6403890 18.40s 2.873us 2.134m 20.00us si_cs_io_cb 6403866 4.139s 646.0ns 1.773m 16.61us ssl_sock_io_cb 894326 6.407m 429.9us 7.326h 29.49ms h1_timeout_task 301189 - - 8.440s 28.02us accept_queue_process 211989 1.691s 7.977us 21.48s 101.3us srv_cleanup_toremove_conns 220 23.46ms 106.7us 65.61ms 298.2us task_run_applet 16 1.219ms 76.17us 181.7us 11.36us srv_cleanup_idle_conns 12 713.3us 59.44us 168.4us 14.03us The changes are slightly more invasive than previous ones and depend on recent patches so they are not likely well suited for backporting. |
||
---|---|---|
.github | ||
contrib | ||
doc | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.gitattributes | ||
.gitignore | ||
.travis.yml | ||
BRANCHES | ||
CHANGELOG | ||
CONTRIBUTING | ||
INSTALL | ||
LICENSE | ||
MAINTAINERS | ||
Makefile | ||
README | ||
ROADMAP | ||
SUBVERS | ||
VERDATE | ||
VERSION |
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)