George:  Thanks, that was exactly what I needed.
Richard:  Ya, I'd noticed that.

Thanks!

benr.


Richard Elling wrote:
> 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
>


Reply via email to