[ 
https://issues.apache.org/jira/browse/HBASE-10117?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lars Hofhansl updated HBASE-10117:
----------------------------------

    Description: 
A while ago I introduced HRegoinScannerImpl.nextRaw() to allow coprocessors and 
scanners with caching > 1 to avoid repeated synchronization during scanning 
(which puts up memory fences, which in turn slows things down on multi core 
machines).

Looking at the code again I see that isFilterDone() is called from nextRaw() 
and isFilterDone() is synchronized.
The caller of nextRaw is required to ensure single threaded access to nextRaw() 
anyway, we can call an unsynchronized internal version of isFilterDone().


  was:
A while ago I introduced HRegoinScannerImpl.nextRaw() to allow coprocessors and 
scanners with caching > 1 to avoid repeated synchronization during the scanning 
(which puts up memory fences, which in turns slows things down on multi core 
machines).

Looking at the code again I see that isFilterDone() is called from nextRaw() 
and isFilterDone() is synchronized. isFilterDone() is only called from two 
places. The other place is rare in RegionServer.next() when we're bypassing at 
the request of a coprocessor. We can add synchronization there.



> Avoid synchronization in HRegionScannerImpl.isFilterDone
> --------------------------------------------------------
>
>                 Key: HBASE-10117
>                 URL: https://issues.apache.org/jira/browse/HBASE-10117
>             Project: HBase
>          Issue Type: Bug
>          Components: Performance
>            Reporter: Lars Hofhansl
>            Assignee: Lars Hofhansl
>             Fix For: 0.94.15, 0.96.2, 0.98.1, 0.99.0
>
>         Attachments: 10117-0.94-v2.txt, 10117-0.94-v3.txt, 10117-0.94.txt, 
> 10117-trunk-v2.txt, 10117-trunk.txt
>
>
> A while ago I introduced HRegoinScannerImpl.nextRaw() to allow coprocessors 
> and scanners with caching > 1 to avoid repeated synchronization during 
> scanning (which puts up memory fences, which in turn slows things down on 
> multi core machines).
> Looking at the code again I see that isFilterDone() is called from nextRaw() 
> and isFilterDone() is synchronized.
> The caller of nextRaw is required to ensure single threaded access to 
> nextRaw() anyway, we can call an unsynchronized internal version of 
> isFilterDone().



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

Reply via email to