[
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)