You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Zheng Hu (JIRA)" <ji...@apache.org> on 2019/06/14 01:43:01 UTC
[jira] [Resolved] (HBASE-22531) The HFileReaderImpl#shouldUseHeap
return the incorrect true when disabled BlockCache
[ https://issues.apache.org/jira/browse/HBASE-22531?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Zheng Hu resolved HBASE-22531.
------------------------------
Resolution: Fixed
Hadoop Flags: Reviewed
> 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)