J Duff wrote: > I?m trying to understand the inner workings of the adaptive replacement cache > (arc). I see there are arc_bufs and arc_buf_hdrs. Each arc_buf_hdr points to > an arc_buf_t. The arc_buf_t is really one entry in a list of arc_buf_t > entries. The multiple entries are accessed through the arc_buf_t?s b_next > member. > > Why does the arc_buf_hdr point to a list of arc_buf_ts and not just one > arc_buf_t, i.e., how and why do multiple arc_buf_ts get inserted into this > list? > multiple arc_buf_t entries can be strung off of an arc_buf_hdr_t when the same block is accessed from multiple file systems (i.e. snapshots and/or clones).
> What is the relationship between arc_buf_hdr?s b_datacnt and b_refcnt? Is > b_datacnt the number of arc_buf_ts in the list? yes Does the b_refcnt keep track of all users of all arc_buf_ts in the list? > The refcnt is a count of all *active* users of the buffer. The refcnt should never be larger than the datacnt, but it is possible to have a non-zero datacnt with a zero refcnt. A buffer cannot be evicted while it has a non-zero refcnt. > Thanks for any understanding that anyone can offer. > > Duff > -- > This messages posted from opensolaris.org > _______________________________________________ > zfs-code mailing list > zfs-code at opensolaris.org > http://mail.opensolaris.org/mailman/listinfo/zfs-code