diff options
-rw-r--r-- | items.c | 6 | ||||
-rw-r--r-- | logger.c | 14 |
2 files changed, 13 insertions, 7 deletions
@@ -1453,11 +1453,13 @@ static void *lru_maintainer_thread(void *arg) { int did_moves = lru_maintainer_juggle(i); if (did_moves == 0) { if (backoff_juggles[i] < MAX_LRU_MAINTAINER_SLEEP) - backoff_juggles[i] += 1000; + backoff_juggles[i] += backoff_juggles[i] / 8; + if (backoff_juggles[i] > MAX_LRU_MAINTAINER_SLEEP) + backoff_juggles[i] = MAX_LRU_MAINTAINER_SLEEP; } else if (backoff_juggles[i] > 0) { backoff_juggles[i] /= 2; if (backoff_juggles[i] < MIN_LRU_MAINTAINER_SLEEP) { - backoff_juggles[i] = 0; + backoff_juggles[i] = MIN_LRU_MAINTAINER_SLEEP; } } next_juggles[i] = backoff_juggles[i]; @@ -454,8 +454,8 @@ static void logger_thread_sum_stats(struct logger_stats *ls) { STATS_UNLOCK(); } -#define MAX_LOGGER_SLEEP 100000 -#define MIN_LOGGER_SLEEP 0 +#define MAX_LOGGER_SLEEP 1000000 +#define MIN_LOGGER_SLEEP 1000 /* Primary logger thread routine */ static void *logger_thread(void *arg) { @@ -466,7 +466,9 @@ static void *logger_thread(void *arg) { logger *l; struct logger_stats ls; memset(&ls, 0, sizeof(struct logger_stats)); - if (to_sleep) + + /* only sleep if we're *above* the minimum */ + if (to_sleep > MIN_LOGGER_SLEEP) usleep(to_sleep); /* Call function to iterate each logger. */ @@ -482,10 +484,12 @@ static void *logger_thread(void *arg) { /* TODO: abstract into a function and share with lru_crawler */ if (!found_logs) { if (to_sleep < MAX_LOGGER_SLEEP) - to_sleep += 50; + to_sleep += to_sleep / 8; + if (to_sleep > MAX_LOGGER_SLEEP) + to_sleep = MAX_LOGGER_SLEEP; } else { to_sleep /= 2; - if (to_sleep < 50) + if (to_sleep < MIN_LOGGER_SLEEP) to_sleep = MIN_LOGGER_SLEEP; } logger_thread_sum_stats(&ls); |