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

Andrew Kyle Purtell updated HBASE-25975:
----------------------------------------
    Comment: was deleted

(was: The microbenchmark is going to be very helpful. Right now I have it 
hacked into TestHRegion but will move it out. See this gist: 
[link|https://gist.github.com/apurtell/eb1122f74b0a9f0305f0c8c575b2fc21]

As of [c6d2a11b|https://github.com/apache/hbase/pull/3360/commits/c6d2a11b] 
performance is better especially as the number of rows processed in the 
previous tick increases, by simply allocating a new CSLS for the next tick 
rather than clear()ing.

Etc.
{noformat}
  1 threads    1 non-contended rows 100 iterations in  248262978 ns  (2.482629 
ms/op) 
  2 threads    1 non-contended rows 100 iterations in  119657896 ns  (1.196578 
ms/op) 
  4 threads    1 non-contended rows 100 iterations in  117589133 ns  (1.175891 
ms/op) 
  8 threads    1 non-contended rows 100 iterations in  127482269 ns  (1.274822 
ms/op) 
 16 threads    1 non-contended rows 100 iterations in  120375922 ns  (1.203759 
ms/op) 
 32 threads    1 non-contended rows 100 iterations in  117154493 ns  (1.171544 
ms/op) 
  1 threads   10 non-contended rows 100 iterations in  123248732 ns  (1.232487 
ms/op) 
  2 threads   10 non-contended rows 100 iterations in  122647177 ns  (1.226471 
ms/op) 
  4 threads   10 non-contended rows 100 iterations in  127126968 ns  (1.271269 
ms/op) 
  8 threads   10 non-contended rows 100 iterations in  133759033 ns  (1.337590 
ms/op) 
 16 threads   10 non-contended rows 100 iterations in  133973857 ns  (1.339738 
ms/op) 
 32 threads   10 non-contended rows 100 iterations in  126716770 ns  (1.267167 
ms/op) 
  1 threads  100 non-contended rows 100 iterations in  127032261 ns  (1.270322 
ms/op) 
  2 threads  100 non-contended rows 100 iterations in  128259658 ns  (1.282596 
ms/op) 
  4 threads  100 non-contended rows 100 iterations in  120013005 ns  (1.200130 
ms/op) 
  8 threads  100 non-contended rows 100 iterations in  126168665 ns  (1.261686 
ms/op) 
 16 threads  100 non-contended rows 100 iterations in  138842281 ns  (1.388422 
ms/op) 
 32 threads  100 non-contended rows 100 iterations in  266622073 ns  (2.666220 
ms/op) 
  1 threads 1000 non-contended rows 100 iterations in  224824016 ns  (2.248240 
ms/op) 
  2 threads 1000 non-contended rows 100 iterations in  276253087 ns  (2.762530 
ms/op) 
  4 threads 1000 non-contended rows 100 iterations in  373552155 ns  (3.735521 
ms/op) 
  8 threads 1000 non-contended rows 100 iterations in  622022490 ns  (6.220224 
ms/op) 
 16 threads 1000 non-contended rows 100 iterations in 1289010748 ns (12.890107 
ms/op) 
 32 threads 1000 non-contended rows 100 iterations in 2449270127 ns (24.492701 
ms/op) 

  1 threads    1 contended rows 100 iterations in  119867953 ns  (1.198679 
ms/op) 
  2 threads    1 contended rows 100 iterations in  225605406 ns  (2.256054 
ms/op) 
  4 threads    1 contended rows 100 iterations in  427749326 ns  (4.277493 
ms/op) 
  8 threads    1 contended rows 100 iterations in  776111781 ns  (7.761117 
ms/op) 
 16 threads    1 contended rows 100 iterations in 1638138512 ns (16.381385 
ms/op) 
 32 threads    1 contended rows 100 iterations in 3221263267 ns (32.212632 
ms/op) 
  1 threads   10 contended rows 100 iterations in  122263470 ns  (1.222634 
ms/op) 
  2 threads   10 contended rows 100 iterations in  225890471 ns  (2.258904 
ms/op) 
  4 threads   10 contended rows 100 iterations in  423801468 ns  (4.238014 
ms/op) 
  8 threads   10 contended rows 100 iterations in  819573522 ns  (8.195735 
ms/op) 
 16 threads   10 contended rows 100 iterations in 1604154859 ns (16.041548 
ms/op) 
 32 threads   10 contended rows 100 iterations in 3127778875 ns (31.277788 
ms/op) 
  1 threads  100 contended rows 100 iterations in  116046683 ns  (1.160466 
ms/op) 
  2 threads  100 contended rows 100 iterations in  215477979 ns  (2.154779 
ms/op) 
  4 threads  100 contended rows 100 iterations in  411627258 ns  (4.116272 
ms/op) 
  8 threads  100 contended rows 100 iterations in  806653481 ns  (8.066534 
ms/op) 
 16 threads  100 contended rows 100 iterations in 1600262862 ns (16.002628 
ms/op) 
 32 threads  100 contended rows 100 iterations in 3179850096 ns (31.798500 
ms/op) 
  1 threads 1000 contended rows 100 iterations in  231174490 ns  (2.311744 
ms/op) 
  2 threads 1000 contended rows 100 iterations in  294631204 ns  (2.946312 
ms/op) 
  4 threads 1000 contended rows 100 iterations in  513858509 ns  (5.138585 
ms/op) 
  8 threads 1000 contended rows 100 iterations in  886817867 ns  (8.868178 
ms/op) 
 16 threads 1000 contended rows 100 iterations in 1745257920 ns (17.452579 
ms/op) 
 32 threads 1000 contended rows 100 iterations in 3404472773 ns (34.044727 
ms/op) 
{noformat}
 )

> Row commit sequencer
> --------------------
>
>                 Key: HBASE-25975
>                 URL: https://issues.apache.org/jira/browse/HBASE-25975
>             Project: HBase
>          Issue Type: Sub-task
>          Components: regionserver
>            Reporter: Andrew Kyle Purtell
>            Assignee: Andrew Kyle Purtell
>            Priority: Major
>             Fix For: 3.0.0-alpha-1, 2.5.0
>
>         Attachments: HBASE-25975-c4cf83ce.pdf
>
>
> Use a row commit sequencer in HRegion to ensure that only the operations that 
> mutate disjoint sets of rows are able to commit within the same clock tick. 
> This maintains the invariant that more than one mutation to a given row will 
> never be committed in the same clock tick.
> Callers will first acquire row locks for the row(s) the pending mutation will 
> mutate. Then they will use RowCommitSequencer.getRowSequence to ensure that 
> the set of rows about to be mutated do not overlap with those for any other 
> pending mutations in the current clock tick. If an overlap is identified, 
> getRowSequence will yield and loop until there is no longer an overlap and 
> the caller's pending mutation can succeed.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to