[ https://issues.apache.org/jira/browse/HBASE-11323?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14031716#comment-14031716 ]
stack commented on HBASE-11323: ------------------------------- Hm. Maybe I am making this harder than it needs to be (the Lars and now Andrew ask that it be possible to have tables keep their DATA blocks in LruBlockCache): The HCD#setInMemory javadoc says: * @param inMemory True if we are to keep all values in the HRegionServer cache So, if I am allowed extrapolate, if a CF has IN_MEMORY set and we are using CombinedBlockCache -- i.e. LruBC and BucketCache -- then lets just cache the CF DATA blocks in LruBC too? This small change is all that is needed: {code} diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java index 7564cc2..23cdf83 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.java @@ -56,7 +56,7 @@ public class CombinedBlockCache implements BlockCache, HeapSize { @Override public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory) { boolean isMetaBlock = buf.getBlockType().getCategory() != BlockCategory.DATA; - if (isMetaBlock) { + if (isMetaBlock || inMemory) { lruCache.cacheBlock(cacheKey, buf, inMemory); } else { bucketCache.cacheBlock(cacheKey, buf, inMemory); {code} Running with it, I was able to check it was actually working by looking at the block cache dump by files. It reports counts of blocks and whether DATA blocks. Creating a table which is IN_MEMORY has its data blocks got into LruBC. Of note, hbase:meta and other system tables now will have their DATA blocks up in LruBC too since they are marked as IN_MEMORY. If the above is allowed, I'll go through and amend all references to IN_MEMORY to make note of this expanded definition of its meaning. > BucketCache all the time! > ------------------------- > > Key: HBASE-11323 > URL: https://issues.apache.org/jira/browse/HBASE-11323 > Project: HBase > Issue Type: Sub-task > Components: io > Reporter: stack > Fix For: 0.99.0 > > Attachments: ReportBlockCache.pdf > > > One way to realize the parent issue is to just enable bucket cache all the > time; i.e. always have offheap enabled. Would have to do some work to make > it drop-dead simple on initial setup (I think it doable). > So, upside would be the offheap upsides (less GC, less likely to go away and > never come back because of full GC when heap is large, etc.). > Downside is higher latency. In Nick's BlockCache 101 there is little to no > difference between onheap and offheap. In a basic compare doing scans and > gets -- details to follow -- I have BucketCache deploy about 20% less ops > than LRUBC when all incache and maybe 10% less ops when falling out of cache. > I can't tell difference in means and 95th and 99th are roughly same (more > stable with BucketCache). GC profile is much better with BucketCache -- way > less. BucketCache uses about 7% more user CPU. > More detail on comparison to follow. > I think the numbers disagree enough we should probably do the [~lhofhansl] > suggestion, that we allow you to have a table sit in LRUBC, something the > current bucket cache layout does not do. -- This message was sent by Atlassian JIRA (v6.2#6252)