From: Willy Tarreau Date: Wed, 3 Mar 2021 17:12:11 +0000 (+0100) Subject: MINOR: server: don't read curr_used_conns multiple times X-Git-Tag: v2.4-dev11~13 X-Git-Url: http://git.haproxy.org/?a=commitdiff_plain;h=cc2672f48ba20b68e90144775c0c70839f87ca50;p=haproxy-2.5.git 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. --- 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)