From cc2672f48ba20b68e90144775c0c70839f87ca50 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 3 Mar 2021 18:12:11 +0100 Subject: [PATCH] MINOR: server: don't read curr_used_conns multiple times This one is added atomically and we reread it just after this, causing a second memory load that is visible in the perf profile. --- include/haproxy/server.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/include/haproxy/server.h b/include/haproxy/server.h index 2c5d979..4892abd 100644 --- a/include/haproxy/server.h +++ b/include/haproxy/server.h @@ -247,16 +247,18 @@ static inline enum srv_initaddr srv_get_next_initaddr(unsigned int *list) static inline void srv_use_conn(struct server *srv, struct connection *conn) { - _HA_ATOMIC_ADD(&srv->curr_used_conns, 1); + unsigned int curr; + + curr = _HA_ATOMIC_ADD(&srv->curr_used_conns, 1); /* It's ok not to do that atomically, we don't need an * exact max. */ - if (srv->max_used_conns < srv->curr_used_conns) - srv->max_used_conns = srv->curr_used_conns; + if (srv->max_used_conns < curr) + srv->max_used_conns = curr; - if (srv->est_need_conns < srv->curr_used_conns) - srv->est_need_conns = srv->curr_used_conns; + if (srv->est_need_conns < curr) + srv->est_need_conns = curr; } static inline void conn_delete_from_tree(struct ebmb_node *node) -- 1.7.10.4