[
https://issues.apache.org/jira/browse/HBASE-6852?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13471390#comment-13471390
]
Lars Hofhansl commented on HBASE-6852:
--------------------------------------
Thanks Cheng. That microbenchmark might not cover the actual cost of a memory
barriers when many different threads are running on different cores.
It looks like the patch will be an improvement.
It would still be great to know why updateOnCacheHit causes such a performance
hit. If it is the ConcurrentMap access we should fix it there (with the
lock-free array theme I mentioned above - maybe with the padding as Todd
suggests, if needed). That would be a more general fix.
What do you think, Cheng?
@Todd: Re: ThreadLocal. We had a bunch of incidents a few years back at
Salesforce where it turned out that accessing threadlocals is not free.
> SchemaMetrics.updateOnCacheHit costs too much while full scanning a table
> with all of its fields
> ------------------------------------------------------------------------------------------------
>
> Key: HBASE-6852
> URL: https://issues.apache.org/jira/browse/HBASE-6852
> Project: HBase
> Issue Type: Improvement
> Components: metrics
> Affects Versions: 0.94.0
> Reporter: Cheng Hao
> Priority: Minor
> Labels: performance
> Fix For: 0.94.3, 0.96.0
>
> Attachments: AtomicTest.java, onhitcache-trunk.patch
>
>
> The SchemaMetrics.updateOnCacheHit costs too much while I am doing the full
> table scanning.
> Here is the top 5 hotspots within regionserver while full scanning a table:
> (Sorry for the less-well-format)
> CPU: Intel Westmere microarchitecture, speed 2.262e+06 MHz (estimated)
> Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit
> mask of 0x00 (No unit mask) count 5000000
> samples % image name symbol name
> -------------------------------------------------------------------------------
> 98447 13.4324 14033.jo void
> org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics.updateOnCacheHit(org.apache.hadoop.hbase.io.hfile.BlockType$BlockCategory,
> boolean)
> 98447 100.000 14033.jo void
> org.apache.hadoop.hbase.regionserver.metrics.SchemaMetrics.updateOnCacheHit(org.apache.hadoop.hbase.io.hfile.BlockType$BlockCategory,
> boolean) [self]
> -------------------------------------------------------------------------------
> 45814 6.2510 14033.jo int
> org.apache.hadoop.hbase.KeyValue$KeyComparator.compareRows(byte[], int, int,
> byte[], int, int)
> 45814 100.000 14033.jo int
> org.apache.hadoop.hbase.KeyValue$KeyComparator.compareRows(byte[], int, int,
> byte[], int, int) [self]
> -------------------------------------------------------------------------------
> 43523 5.9384 14033.jo boolean
> org.apache.hadoop.hbase.regionserver.StoreFileScanner.reseek(org.apache.hadoop.hbase.KeyValue)
> 43523 100.000 14033.jo boolean
> org.apache.hadoop.hbase.regionserver.StoreFileScanner.reseek(org.apache.hadoop.hbase.KeyValue)
> [self]
> -------------------------------------------------------------------------------
> 42548 5.8054 14033.jo int
> org.apache.hadoop.hbase.KeyValue$KeyComparator.compare(byte[], int, int,
> byte[], int, int)
> 42548 100.000 14033.jo int
> org.apache.hadoop.hbase.KeyValue$KeyComparator.compare(byte[], int, int,
> byte[], int, int) [self]
> -------------------------------------------------------------------------------
> 40572 5.5358 14033.jo int
> org.apache.hadoop.hbase.io.hfile.HFileBlockIndex$BlockIndexReader.binarySearchNonRootIndex(byte[],
> int, int, java.nio.ByteBuffer, org.apache.hadoop.io.RawComparator)~1
> 40572 100.000 14033.jo int
> org.apache.hadoop.hbase.io.hfile.HFileBlockIndex$BlockIndexReader.binarySearchNonRootIndex(byte[],
> int, int, java.nio.ByteBuffer, org.apache.hadoop.io.RawComparator)~1 [self]
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira