Details
-
Sub-task
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
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 , actually, I've set the following config, which means all allocation should be offheap, while it's not:
# Disable the block cache hfile.block.cache.size=0 hbase.ipc.server.reservoir.minimal.allocating.size=0 # Let all allocation from pooled allocator.
Checked the code, I found the problem here:
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(); }
Say, the CacheConfig#getBlockCache will return a Optional<BlockCache>, which is always non-null:
/** * Returns the block cache. * * @return the block cache, or null if caching is completely disabled */ public Optional<BlockCache> getBlockCache() { return Optional.ofNullable(this.blockCache); }
Attachments
Attachments
Issue Links
- links to