[
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)