[ https://issues.apache.org/jira/browse/HBASE-22531?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16855223#comment-16855223 ]
Zheng Hu commented on HBASE-22531: ---------------------------------- bq. You meant off heap Zheng Hu? Sorry, I think I did not described it clearly. I mean after applied the https://issues.apache.org/jira/secure/attachment/12970659/HBASE-22531.HBASE-21879.v1.patch, all memory of block were allocated from pooled direct ByteBuffer now, have no heap allocation for block now. Thanks. > The HFileReaderImpl#shouldUseHeap return the incorrect true when disabled > BlockCache > ------------------------------------------------------------------------------------- > > Key: HBASE-22531 > URL: https://issues.apache.org/jira/browse/HBASE-22531 > Project: HBase > Issue Type: Sub-task > Reporter: Zheng Hu > Assignee: Zheng Hu > Priority: Major > Attachments: HBASE-22531.HBASE-21879.v1.patch, > async-prof-pid-13311-alloc-4.svg, async-prof-pid-8590-alloc-2.svg > > > I'm having a benchmark with block cache disabled for HBASE-21879 branch. > Just caurious about why still so many heap allocation in the heap allocation > flame graph [async-prof-pid-13311-alloc-4.svg | > https://issues.apache.org/jira/secure/attachment/12970648/async-prof-pid-13311-alloc-4.svg], > actually, I've set the following config, which means all allocation should > be offheap, while it's not: > {code} > # Disable the block cache > hfile.block.cache.size=0 > hbase.ipc.server.reservoir.minimal.allocating.size=0 # Let all allocation > from pooled allocator. > {code} > Checked the code, I found the problem here: > {code} > private boolean shouldUseHeap(BlockType expectedBlockType) { > if (cacheConf.getBlockCache() == null) { > return false; > } else if (!cacheConf.isCombinedBlockCache()) { > // Block to cache in LruBlockCache must be an heap one. So just > allocate block memory from > // heap for saving an extra off-heap to heap copying. > return true; > } > return expectedBlockType != null && !expectedBlockType.isData(); > } > {code} > Say, the CacheConfig#getBlockCache will return a Optional<BlockCache>, > which is always non-null: > {code} > /** > * Returns the block cache. > * > * @return the block cache, or null if caching is completely disabled > */ > public Optional<BlockCache> getBlockCache() { > return Optional.ofNullable(this.blockCache); > } > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)