zfs primarycache and secondarycache properties [PSARC/2008/393 FastTrack timeout 06/27/2008]

Matthew Ahrens Matthew.Ahrens at sun.com
Tue Jul 1 14:39:43 PDT 2008


Jeff Bonwick wrote:
>> Yup, this was Eric's proposed solution: an L2ARC_IS_CACHABLE flag that
>> is added when the arc buffer is allocated.
> 
> That doesn't seem quite right.  Consider this sequence of events,
> where C and NC are two datasets with and without L2ARC caching:
> 
> 	NC: reads block B, puts it in the ARC with L2ARC_IS_CACHEABLE clear
> 	C: reads block B, but since it's not the one doing the allocation,
> 	   doesn't set L2ARC_IS_CACHEABLE
> 	feed thread: discards block B
> 	C: reads block B, going to disk instead of L2ARC as it should have
> 
> But if C had read the block before NC, everything would have been fine.
> 
> It seems to me that the order of access should not determine the policy.
> Whenever a block is looked up in the ARC, if the caller wants that block
> to be L2ARC cached, then the L2ARC_IS_CACHEABLE flag should be ORed in.
> In short, there are three possibly policies:
> 
> (1) If *anyone* wants the block cached, it is cached.
> (2) If *anyone* doesn't want the block cached, it is not cached.
> (3) It might or might not be cached depending who gets there first.
> 
> To me, (1) is the only policy that makes sense, or is even defensible.

Agreed.  Seems like this could be accomplished in the above scenario by 
having C set L2ARC_IS_CACHEABLE when it hits in the cache.

--matt




More information about the opensolaris-arc mailing list