]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: server: don't read curr_used_conns multiple times
authorWilly Tarreau <w@1wt.eu>
Wed, 3 Mar 2021 17:12:11 +0000 (18:12 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 5 Mar 2021 07:30:08 +0000 (08:30 +0100)
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

index 2c5d9793362ee1dcbcd07d57950fef77b57fdaf1..4892abdbf7bf5d5f97b7d54d761571a2e74f44a4 100644 (file)
@@ -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)