From: Witold Kręcicki Date: Fri, 31 Jan 2020 12:26:34 +0000 (+0100) Subject: Don't update LRU if the node was recently used. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a7bfc8850086e07b67dc30f27da98afffb5f327;p=thirdparty%2Fbind9.git Don't update LRU if the node was recently used. Updating LRU requires write-locking the node, which causes contention. Update LRU only if time difference is large enough. --- diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 97c328041df..48606cbea1c 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -172,9 +172,12 @@ typedef isc_rwlock_t nodelock_t; * to be 0 by default either with or without threads. */ #ifndef DNS_RBTDB_LIMITLRUUPDATE -#define DNS_RBTDB_LIMITLRUUPDATE 0 +#define DNS_RBTDB_LIMITLRUUPDATE 1 #endif +#define DNS_RBTDB_LRUUPDATE_GLUE 300 +#define DNS_RBTDB_LRUUPDATE_REGULAR 600 + /* * Allow clients with a virtual time of up to 5 minutes in the past to see * records that would have otherwise have expired. @@ -10088,11 +10091,11 @@ need_headerupdate(rdatasetheader_t *header, isc_stdtime_t now) { * Glue records are updated if at least 60 seconds have passed * since the previous update time. */ - return (header->last_used + 60 <= now); + return (header->last_used + DNS_RBTDB_LRUUPDATE_GLUE <= now); } /* Other records are updated if 5 minutes have passed. */ - return (header->last_used + 300 <= now); + return (header->last_used + DNS_RBTDB_LRUUPDATE_REGULAR <= now); #else UNUSED(now);