]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
OPTIM: stick-tables: exit expiry faster when the update lock is held
authorWilly Tarreau <w@1wt.eu>
Wed, 3 Sep 2025 09:54:15 +0000 (11:54 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 3 Sep 2025 13:51:13 +0000 (15:51 +0200)
It helps keep the contention level low: when we hold the update lock
that we know other parts may be relying on (peers, track-sc etc),
we decrease the remaining visit counters 4 times as fast to further
reduce the contention. At this point no more warnings are seen during
intense synchronization (2x64 cores, 1.5M req/s with a track-sc each,
5M entries in use).

src/stick_table.c

index e6dbe99a4ddf332879e2df51732c1896afc6df41..a73b30a95a69e6f56394d183767e122bd05cca0d 100644 (file)
@@ -936,7 +936,8 @@ struct task *process_table_expire(struct task *task, void *context, unsigned int
                                goto out_unlock;
                        }
 
-                       to_visit--;
+                       /* Let's quit earlier if we currently hold the update lock */
+                       to_visit -= 1 + 3 * updt_locked;
 
                        /* timer looks expired, detach it from the queue */
                        ts = eb32_entry(eb, struct stksess, exp);