From efcbc6e66d2e526bad4ad1c02e1ec2b29452b1da Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 6 Mar 2009 08:27:10 +0100 Subject: [PATCH] [OPTIM] maintain_proxies: only wake up when the frontend will be ready It's not needed to try to check the frontend's freq counter every millisecond, we can precisely compute when to wake up. --- src/proxy.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/proxy.c b/src/proxy.c index 28bcfa01f..420c1ab8c 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -383,10 +383,13 @@ void maintain_proxies(int *next) if (p->fe_maxsps && read_freq_ctr(&p->fe_sess_per_sec) >= p->fe_maxsps) { /* we're blocking because a limit was reached on the number of * requests/s on the frontend. We want to re-check ASAP, which - * means in 1 ms because the timer will have settled down. Note - * that we may already be in IDLE state here. + * means in 1 ms before estimated expiration date, because the + * timer will have settled down. Note that we may already be in + * IDLE state here. */ - *next = tick_first(*next, tick_add(now_ms, 1)); + int wait = 1000 / p->fe_maxsps - 1; + wait = MAX(wait, 1); + *next = tick_first(*next, tick_add(now_ms, wait)); goto do_block; }