mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-19 04:07:04 +00:00
haproxy public development tree
The remaining epoll_ctl() calls are exclusively caused by the disagreement between conn_fd_handler() and the mux receiving the data: the fd handler wants to stop after having woken up the tasklet, then the mux after receiving data wants to receive again. Given that they don't happen in the same poll loop when there are many FDs, this causes a lot of state changes. As suggested by Olivier, if the task is already scheduled for running, we don't need to disable the event because it's in the run queue, poll() cannot stop, and reporting it again will be harmless. What *might* happen however is that a sampling-based poller like epoll() would report many times the same event and has trouble getting others behind. But if it would happen, it would still indicate the run queue has plenty of pending operations, so it would in fact only displace the problem from the poller to the run queue, which doesn't seem to be worse (and in fact we do support priorities while the poller does not). By doing this change, the keep-alive test with 1k conns and 100k reqs completely gets rid of the per-request epoll_ctl changes, while still not causing extra recvfrom() : $ ./h1load -n 100000 -t 4 -c 1000 -T 20 -F 127.0.0.1:8001/?s=1k/t=20 200000 sendto 1 200000 recvfrom 1 10762 epoll_wait 1 3664 epoll_ctl 1 1999 recvfrom -1 In close mode, it didn't change anything, we're still in the optimal case (2 epoll per connection) : $ ./h1load -n 100000 -r 1 -t 4 -c 1000 -T 20 -F 127.0.0.1:8001/?s=1k/t=20 203764 epoll_ctl 1 200000 sendto 1 200000 recvfrom 1 6091 epoll_wait 1 2994 recvfrom -1 |
||
---|---|---|
.github | ||
contrib | ||
doc | ||
ebtree | ||
examples | ||
include | ||
reg-tests | ||
scripts | ||
src | ||
tests | ||
.cirrus.yml | ||
.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)