haproxy/include/types
Willy Tarreau beb859abce MINOR: polling: add an option to support busy polling
In some situations, especially when dealing with low latency on processors
supporting a variable frequency or when running inside virtual machines,
each time the process waits for an I/O using the poller, the processor
goes back to sleep or is offered to another VM for a long time, and it
causes excessively high latencies.

A solution to this provided by this patch is to enable busy polling using
a global option. When busy polling is enabled, the pollers never sleep and
loop over themselves waiting for an I/O event to happen or for a timeout
to occur. On multi-processor machines it can significantly overheat the
processor but it usually results in much lower latencies.

A typical test consisting in injecting traffic over a single connection at
a time over the loopback shows a bump from 4640 to 8540 connections per
second on forwarded connections, indicating a latency reduction of 98
microseconds for each connection, and a bump from 12500 to 21250 for
locally terminated connections (redirects), indicating a reduction of
33 microseconds.

It is only usable with epoll and kqueue because select() and poll()'s
API is not convenient for such usages, and the level of performance they
are used in doesn't benefit from this anyway.

The option, which obviously remains disabled by default, can be turned
on using "busy-polling" in the global section, and turned off later
using "no busy-polling". Its status is reported in "show info" to help
troubleshooting suspicious CPU spikes.
2018-11-22 19:47:30 +01:00
..
acl.h REORG/MAJOR: session: rename the "session" entity to "stream" 2015-04-06 11:23:56 +02:00
action.h MINOR: http: Make new "early-hint" http-request action really be parsed. 2018-11-12 21:08:55 +01:00
activity.h MINOR: activity: report the average loop time in "show activity" 2018-11-22 11:48:41 +01:00
applet.h MINOR: cache: Larger HTTP objects caching. 2018-10-24 04:37:12 +02:00
arg.h MAJOR: chunks: replace struct chunk with struct buffer 2018-07-19 16:23:43 +02:00
auth.h MAJOR: auth: Change the internal authentication system. 2014-03-17 18:06:06 +01:00
backend.h MINOR: backend: implement random-based load balancing 2018-05-03 07:20:40 +02:00
cache.h MEDIUM: cache: enable the HTTP analysers 2017-11-20 19:22:27 +01:00
capture.h CLEANUP: pools: rename all pool functions and pointers to remove this "2" 2017-11-24 17:49:53 +01:00
channel.h MEDIUM: channel: reorder the channel analyzers for the cli 2018-10-28 14:13:31 +01:00
checks.h MEDIUM: connections: Change struct wait_list to wait_event. 2018-10-11 15:34:39 +02:00
cli.h MEDIUM: cli: disable some keywords in the master 2018-10-28 13:51:39 +01:00
compression.h MAJOR: buffer: finalize buffer detachment 2018-07-19 16:23:43 +02:00
connection.h MINOR: conn_stream: Add a flag to notify the SI some data were received 2018-11-18 21:45:49 +01:00
counters.h MINOR: http: Log warning if (add|set)-header fails 2018-05-28 14:53:59 +02:00
dns.h CLEANUP: Fix typos in the dns subsystem 2018-11-18 22:23:15 +01:00
fd.h MINOR: pollers: move polled_mask outside of struct fdtab. 2018-05-06 06:27:34 +02:00
filters.h CLEANUP: Fix typos in the filters subsystem 2018-11-18 22:26:42 +01:00
freq_ctr.h [MINOR] freq_ctr: add new types and functions for periods different from 1s 2010-08-10 14:01:09 +02:00
global.h MINOR: polling: add an option to support busy polling 2018-11-22 19:47:30 +01:00
h1.h MINOR: h1: Add the flag H1_MF_NO_PHDR to not add pseudo-headers during parsing 2018-10-12 16:15:18 +02:00
hdr_idx.h [BUG] files were missing for hdr_idx in previous commit 2006-12-04 02:20:02 +01:00
hlua.h MEDIUM: lua: Add stick table support for Lua. 2018-09-29 20:15:01 +02:00
http_htx.h MINOR: http_htx: Add functions to manipulate HTX messages in http_htx.c 2018-11-18 22:08:53 +01:00
htx.h MEDIUM: htx: Add API to deal with the internal representation of HTTP messages 2018-11-18 22:08:53 +01:00
lb_chash.h MINOR: backend: add hash-balance-factor option for hash-type consistent 2016-10-25 20:21:32 +02:00
lb_fas.h MEDIUM: backend: add the 'first' balancing algorithm 2012-02-21 22:27:27 +01:00
lb_fwlc.h [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_fwrr.h [MEDIUM] build: switch ebtree users to use new ebtree version 2009-10-26 21:10:04 +01:00
lb_map.h MEDIUM: threads/lb: Make LB algorithms (lb_*.c) thread-safe 2017-10-31 13:58:31 +01:00
listener.h MEDIUM: listeners: support unstoppable listener 2018-11-16 17:05:40 +01:00
log.h MEDIUM: log: add a new "raw" format 2018-11-12 18:37:55 +01:00
mailers.h MINOR: mailers: make it possible to configure the connection timeout 2016-02-20 15:33:06 +01:00
map.h CLEANUP: map: it seems that the map were planed to be chained 2016-03-30 15:41:15 +02:00
obj_type.h MINOR: connection: introduce conn_stream 2017-10-31 18:03:23 +01:00
pattern.h MINOR: threads: Use __decl_hathreads to declare locks 2017-11-13 11:38:17 +01:00
peers.h MINOR: threads: Use __decl_hathreads to declare locks 2017-11-13 11:38:17 +01:00
pipe.h [MEDIUM] introduce pipe pools 2009-01-25 13:49:53 +01:00
port_range.h [MEDIUM] add support for binding to source port ranges during connect 2009-06-10 12:23:32 +02:00
proto_http.h CLEANUP: fix typos in the proto_http subsystem 2018-11-18 22:23:15 +01:00
proto_udp.h MEDIUM: protocol: add minimalist UDP protocol client 2015-06-13 22:07:35 +02:00
protocol.h MEDIUM: protocol: use a custom AF_MAX to help protocol parser 2018-09-12 07:12:27 +02:00
proxy.h REORG: config: extract the proxy parser into cfgparse-listen.c 2018-11-19 06:47:09 +01:00
queue.h MINOR: queue: replace the linked list with a tree 2018-08-10 15:06:27 +02:00
sample.h REORG: http: move the HTTP semantics definitions to http.h/http.c 2018-09-11 10:30:25 +02:00
server.h CLEANUP: fix a few typos in the comments of the server subsystem 2018-11-18 22:23:15 +01:00
session.h MINOR: sessions: Start to store the outgoing connection in sessions. 2018-11-18 21:44:56 +01:00
shctx.h MINOR: shctx: Change max. object size type to unsigned int. 2018-10-26 04:54:40 +02:00
signal.h [MEDIUM] signals: add support for registering functions and tasks 2010-08-27 18:00:40 +02:00
spoe.h MAJOR: buffer: finalize buffer detachment 2018-07-19 16:23:43 +02:00
ssl_sock.h BUG/MINOR: ssl: properly ref-count the tls_keys entries 2018-07-18 08:59:50 +02:00
stats.h MINOR: polling: add an option to support busy polling 2018-11-22 19:47:30 +01:00
stick_table.h MINOR: stick-tables: Adds support for new "gpc1" and "gpc1_rate" counters. 2018-01-31 09:40:05 +01:00
stream.h MEDIUM: cli: implement 'mode cli' proxy analyzers 2018-10-28 14:03:06 +01:00
stream_interface.h MINOR: stream-int: replace SI_FL_WANT_PUT with !SI_FL_RX_WAIT_EP 2018-11-18 21:41:46 +01:00
task.h MEDIUM: tasks: collect per-task CPU time and latency 2018-11-22 15:44:21 +01:00
template.h [CLEANUP] included common/version.h everywhere 2006-06-29 18:54:54 +02:00
vars.h MINOR: threads: Use __decl_hathreads to declare locks 2017-11-13 11:38:17 +01:00