empirical look below... George Wilson wrote: > Ben Rockwood wrote: >> I've been pouring through the vdev_cache code and need help >> understanding the cache contents. Per CR 6437054 the cache was said to >> only cache meta-data. However, looking at the current code this no >> longer appears to be the case. >> >> Can someone explain what happened here? The idea of only caching >> metadata is odd to me because when you read-ahead you can't be certain >> of what it is you have put in the cache until someone comes knocking for >> that block. >> >> As I understand the current implementation, the per-disk vdev_caches are >> 10MB LRU. Reads smaller than 16K (cache_max) are inflated to 64K >> (cache_bshift), anything larger than 16K is therefore un-inflated. The >> cache does not differentiate between meta-data blocks and data blocks >> when caching. Is this correct? >> >> Thanks. >> >> benr. >> > Ben, > > The code you're looking for is in zio_read_bp_init(): > > if (!dmu_ot[BP_GET_TYPE(bp)].ot_metadata && BP_GET_LEVEL(bp) == 0) > zio->io_flags |= ZIO_FLAG_DONT_CACHE; > > So any data blocks have the ZIO_FLAG_DONT_CACHE flag enabled and won't > end up in the vdev_cache. >
You can also observe the kstats and note that there are far fewer accesses than you would expect to see for any given workload. kstat -n vdev_cache_stats -- richard