]> git.ipfire.org Git - thirdparty/haproxy.git/commit
OPTIM: stats: store fast sharded counters pointers at session and stream level
authorAurelien DARRAGON <adarragon@haproxy.com>
Thu, 24 Jul 2025 17:46:36 +0000 (19:46 +0200)
committerAurelien DARRAGON <adarragon@haproxy.com>
Fri, 25 Jul 2025 16:24:23 +0000 (18:24 +0200)
commitc24de077bdc779a1570999463175af34d0673ae8
tree1f0bd88898bfea7ea5530b223489d7dc7eb2e5bf
parentcf8ba60c88c92f568daff7228677921e93d35024
OPTIM: stats: store fast sharded counters pointers at session and stream level

Following commit 75e480d10 ("MEDIUM: stats: avoid 1 indirection by storing
the shared stats directly in counters struct"), in order to minimize the
impact of the recent sharded counters work, we try to push things a bit
further in this patch by storing and using "fast" pointers at the session
and stream levels when available to avoid costly indirections and
systematic "tgid" resolution (which can not be cached by the CPU due to
its THREAD-local nature).

Indeed, we know that a session/stream is tied to a given CPU, thanks to
this we know that the tgid for a given session/stream will never change.

Given that, we are able to store sharded frontend and listener counters
pointer at the session level (namely sess->fe_tgcounters and
sess->li_tgcounters), and once the backend and the server are selected,
we are also able to store backend and server sharded counters
pointer at the stream level (namely s->be_tgcounters and s->sv_tgcounters)

Everywhere we rely on these counters and the stream or session context is
available, we use the fast pointers it instead of the indirect pointers
path to make the pointer resolution a bit faster.

This optimization proved to bring a few percents back, and together with
the previous 75e480d10 commit we now fixed the performance regression (we
are back to back with 3.2 stats performance)
21 files changed:
include/haproxy/session-t.h
include/haproxy/stream-t.h
include/haproxy/stream.h
src/backend.c
src/cli.c
src/dns.c
src/fcgi-app.c
src/flt_http_comp.c
src/hlua.c
src/http_act.c
src/http_ana.c
src/http_client.c
src/log.c
src/mux_h1.c
src/peers.c
src/proxy.c
src/session.c
src/sink.c
src/stream.c
src/tcp_act.c
src/tcp_rules.c