Becker Ewing created HBASE-29099:
------------------------------------

             Summary: Avoid expensive BlockCacheKey.toString() calls when 
tracing is disabled
                 Key: HBASE-29099
                 URL: https://issues.apache.org/jira/browse/HBASE-29099
             Project: HBase
          Issue Type: Improvement
          Components: Performance
    Affects Versions: 2.5.11, 2.6.1, 3.0.0-beta-1, 4.0.0-alpha-1
            Reporter: Becker Ewing
            Assignee: Becker Ewing
         Attachments: high-block-cache-key-to-string-alloc-profile.html

Currently, when reading a block from the BlockCache, [we always calculate 
BlockCacheKey.toString()|https://github.com/apache/hbase/blob/b89c8259c5726395c9ae3a14919bd192252ca517/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java#L1290-L1296]
 so that we can add it to the Tracing Span. In a region server running 
extremely hot (pinned at 100% CPU utilization for many hours due to a reverse 
scanning hotspot), I noticed that in an allocation profile—see attached—of the 
region server that almost 9% of all allocations were to calculate 
BlockCacheKey.toString() which I found to be rather unusual. 

 

Given that BlockCacheKey.toString() is only used to enhance traceability of 
region servers, it feels like we should be able to skip calling this expensive 
function is we can determine that tracing is disabled.

 

Note: this function was already identified as inefficient and had it's 
performance optimized as part of HBASE-19684. I'm not certain whether we can do 
much better than it's current implementation.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to