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)