Edit cache eviction policy

Itay Alayoff itayala at post.bgu.ac.il
Wed Jan 1 13:35:48 UTC 2020


Thanks Tony for the detailed answer! I just found the parts of the code you
mentioned that related to the policy eviction.

There is something I can't figure out, What the Red Black Tree DB is used
for and what the ADB  is used for? Is there a relationship between the two?

Sorry if the answers are pretty clear, I’m new to BIND.


Itay





On Mon, Dec 30, 2019, 22:07 Tony Finch <dot at dotat.at> wrote:

> Itay Alayoff <itayala at post.bgu.ac.il> wrote:
>
> > I'd like to know where is the policy eviction currently implemented?
>
> The way I answer questions like this is to start from the configuration
> options, and working my way from bin/named/server.c (where the parsed
> config file is processed) I trace through to find the code that uses the
> options of interest. Often with an option like `some-thing` I can find
> most of the code by grepping for `some.?thing` but the spelling is not
> always that consistent.
>
> In this case, grepping for `cache.?size` I can see a line:
>
>         dns_cache_setcachesize(cache, max_cache_size);
>
> So (unsurprisingly!) the next place to look is in lib/dns/cache.c
> where I find dns_cache_setcachesize() which sets up a callback function
> called water() to implement the limits. In turn water() invokes
> dns_db_overmem().
>
> https://gitlab.isc.org/isc-projects/bind9/blob/master/lib/dns/cache.c#L880
>
> There's an abstraction layer around BIND's in-memory database to support
> alternative back ends (look around for dyndb and sdb to follow this
> side-track) with a C OO interface that will feel familiar to kernel
> hackers. But we want to skip to the relevant point which for db matters is
> usually lib/dns/rbtdb.c, the red-black tree database. There are a bunch of
> method vtbl definitions in this file; we're looking for the `overmem`
> method. In fact, looking for `overmem` everywhere in the file should get
> you a bit closer to enlightenment.
>
> https://gitlab.isc.org/isc-projects/bind9/blob/master/lib/dns/rbtdb.c
>
> The rbtdb.c overmem() method actually says,
>
>         /* This is an empty callback.  See adb.c:water() */
>
> The adb (address database) handles stuff like SRTT calculations and
> lameness flags etc. Reading around mentions of `overmem` and `water`
> in adb.c is again informative.
>
> https://gitlab.isc.org/isc-projects/bind9/blob/master/lib/dns/adb.c#L2305
>
> This comment appears to be the crux:
>
> /*%
>  * Examine the tail entry of the LRU list to see if it expires or is stale
>  * (unused for some period); if so, the name entry will be freed.  If the
> ADB
>  * is in the overmem condition, the tail and the next to tail entries
>  * will be unconditionally removed (unless they have an outstanding fetch).
>  * We don't care about a race on 'overmem' at the risk of causing some
>  * collateral damage or a small delay in starting cleanup, so we don't
> bother
>  * to lock ADB (if it's not locked).
>  *
>  * Name bucket must be locked; adb may be locked; no other locks held.
>  */
> static void
> check_stale_name(dns_adb_t *adb, int bucket, isc_stdtime_t now) {
>
>
> Now you know everything I know about BIND's cache eviction policy :-)
>
> Tony.
> --
> f.anthony.n.finch  <dot at dotat.at>  http://dotat.at/
> North Rockall, Malin: Northwesterly 4 or 5, backing southerly 5 to 7 later.
> Rough. Fair. Good.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.isc.org/pipermail/bind-users/attachments/20200101/e17b48be/attachment.htm>


More information about the bind-users mailing list