slim bouguerra created HIVE-21334: ------------------------------------- Summary: Eviction of blocks is major source of blockage for allocation request. Allocation path need to be lock-free. Key: HIVE-21334 URL: https://issues.apache.org/jira/browse/HIVE-21334 Project: Hive Issue Type: Improvement Reporter: slim bouguerra Assignee: slim bouguerra Attachments: lock_profile.png
Eviction is getting in the way of memory allocation when the query fragment has no cache entry. This is cause major bottleneck and waist lot of cpu cycles. To fix this is first we can batch the evictions to avoid taking the lock multiple times. The memory manager need to be able to anticipate such issue and keep some spare space for queries that do not have any hit. {code} IO-Elevator-Thread-12 Blocked CPU usage on sample: 692ms org.apache.hadoop.hive.llap.cache.LowLevelLrfuCachePolicy.evictSomeBlocks(long) LowLevelLrfuCachePolicy.java:264 org.apache.hadoop.hive.llap.cache.CacheContentsTracker.evictSomeBlocks(long) CacheContentsTracker.java:194 org.apache.hadoop.hive.llap.cache.LowLevelCacheMemoryManager.reserveMemory(long, boolean, AtomicBoolean) LowLevelCacheMemoryManager.java:87 org.apache.hadoop.hive.llap.cache.LowLevelCacheMemoryManager.reserveMemory(long, AtomicBoolean) LowLevelCacheMemoryManager.java:63 org.apache.hadoop.hive.llap.cache.BuddyAllocator.allocateMultiple(MemoryBuffer[], int, Allocator$BufferObjectFactory, AtomicBoolean) BuddyAllocator.java:263 org.apache.hadoop.hive.ql.io.orc.encoded.EncodedReaderImpl.allocateMultiple(MemoryBuffer[], int) EncodedReaderImpl.java:1295 org.apache.hadoop.hive.ql.io.orc.encoded.EncodedReaderImpl.readEncodedStream(long, DiskRangeList, long, long, EncodedColumnBatch$ColumnStreamData, long, long, IdentityHashMap) EncodedReaderImpl.java:923 org.apache.hadoop.hive.ql.io.orc.encoded.EncodedReaderImpl.readEncodedColumns(int, StripeInformation, OrcProto$RowIndex[], List, List, boolean[], boolean[], Consumer) EncodedReaderImpl.java:501 org.apache.hadoop.hive.llap.io.encoded.OrcEncodedDataReader.performDataRead() OrcEncodedDataReader.java:407 org.apache.hadoop.hive.llap.io.encoded.OrcEncodedDataReader$4.run() OrcEncodedDataReader.java:266 org.apache.hadoop.hive.llap.io.encoded.OrcEncodedDataReader$4.run() OrcEncodedDataReader.java:263 java.security.AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) AccessController.java (native) javax.security.auth.Subject.doAs(Subject, PrivilegedExceptionAction) Subject.java:422 org.apache.hadoop.security.UserGroupInformation.doAs(PrivilegedExceptionAction) UserGroupInformation.java:1688 org.apache.hadoop.hive.llap.io.encoded.OrcEncodedDataReader.callInternal() OrcEncodedDataReader.java:263 org.apache.hadoop.hive.llap.io.encoded.OrcEncodedDataReader.callInternal() OrcEncodedDataReader.java:110 org.apache.tez.common.CallableWithNdc.call() CallableWithNdc.java:36 org.apache.hadoop.hive.llap.daemon.impl.StatsRecordingThreadPool$WrappedCallable.call() StatsRecordingThreadPool.java:110 java.util.concurrent.FutureTask.run() FutureTask.java:266 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) ThreadPoolExecutor.java:1142 java.util.concurrent.ThreadPoolExecutor$Worker.run() ThreadPoolExecutor.java:617 java.lang.Thread.run() Thread.java:745 {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)