You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Alexander Menshikov (JIRA)" <ji...@apache.org> on 2017/04/05 13:40:41 UTC

[jira] [Commented] (IGNITE-4908) Reentrant lock looks much slower that cache locks.

    [ https://issues.apache.org/jira/browse/IGNITE-4908?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15956873#comment-15956873 ] 

Alexander Menshikov commented on IGNITE-4908:
---------------------------------------------

[~amashenkov]

I started work on this issue. I have already written JMH benchmark for these Ignite's lock classes: GridSpinReadWriteLock, GridStripedSpinBusyLock, GridKeyLock, StripedCompositeReadWriteLock, GridBusyLock and GridSpinBusyLock. And for these JDK's lock classes: synchronized, ReentrantReadWriteLock and ReentrantLock - for comparison. In benchmarks just increment one long field. And for comparation I also added AtomicLong and nonsynchronized version. Result for my notebook with 2 real cores + 2 hyper threading cores:
----------------------
With 1 thread:

Benchmark                                                     Mode  Cnt    Score    Error   Units
//For comparation
JmhGridLocksBenchmark.testNonThreadSafeLong                  thrpt   10  373,469 ± 10,764  ops/us
JmhGridLocksBenchmark.testAtomicLong                         thrpt   10  114,843 ±  3,791  ops/us
//JDK locks
JmhGridLocksBenchmark.testReentrantLockLong                  thrpt   10   39,025 ±  0,641  ops/us
JmhGridLocksBenchmark.testReadWriteLockLong                  thrpt   10   37,919 ±  0,521  ops/us
JmhGridLocksBenchmark.testSynchronizedLong                   thrpt   10   34,335 ±  0,815  ops/us
//Ignite locks
JmhGridLocksBenchmark.testGridStripedSpinBusyLockLong        thrpt   10   37,806 ±  0,560  ops/us
JmhGridLocksBenchmark.testGridBusyLockLong                   thrpt   10   34,996 ±  0,781  ops/us
JmhGridLocksBenchmark.testGridSpinBusyLockLong               thrpt   10   29,781 ±  1,175  ops/us
JmhGridLocksBenchmark.testGridSpinReadWriteLockLong          thrpt   10   24,921 ±  0,716  ops/us
JmhGridLocksBenchmark.testStripedCompositeReadWriteLockLong  thrpt   10   10,300 ±  0,167  ops/us
JmhGridLocksBenchmark.testGridKeyLockLong                    thrpt   10    6,752 ±  0,235  ops/us
----------------------
With 2 threads:

Benchmark                                                     Mode  Cnt    Score    Error   Units
//For comparation
JmhGridLocksBenchmark.testNonThreadSafeLong                  thrpt   10  652,727 ±  2,569  ops/us
JmhGridLocksBenchmark.testAtomicLong                         thrpt   10   31,319 ± 11,587  ops/us
//JDK locks
JmhGridLocksBenchmark.testReentrantLockLong                  thrpt   10    7,602 ±  4,341  ops/us
JmhGridLocksBenchmark.testReadWriteLockLong                  thrpt   10    8,698 ±  4,474  ops/us
JmhGridLocksBenchmark.testSynchronizedLong                   thrpt   10   14,623 ±  2,185  ops/us
//Ignite locks
JmhGridLocksBenchmark.testGridStripedSpinBusyLockLong        thrpt   10   28,999 ±  0,421  ops/us
JmhGridLocksBenchmark.testGridBusyLockLong                   thrpt   10    7,987 ±  1,918  ops/us
JmhGridLocksBenchmark.testGridSpinBusyLockLong               thrpt   10    7,361 ±  1,351  ops/us
JmhGridLocksBenchmark.testGridSpinReadWriteLockLong          thrpt   10   22,250 ±  2,190  ops/us
JmhGridLocksBenchmark.testStripedCompositeReadWriteLockLong  thrpt   10    3,067 ±  0,391  ops/us
JmhGridLocksBenchmark.testGridKeyLockLong                    thrpt   10    2,827 ±  0,398  ops/us
----------------------
With 4 threads:

Benchmark                                                     Mode  Cnt    Score   Error   Units
//For comparation
JmhGridLocksBenchmark.testNonThreadSafeLong                  thrpt   10  592,226 ± 1,551  ops/us
JmhGridLocksBenchmark.testAtomicLong                         thrpt   10   25,414 ± 1,831  ops/us
//JDK locks
JmhGridLocksBenchmark.testReentrantLockLong                  thrpt   10   29,794 ± 0,966  ops/us
JmhGridLocksBenchmark.testReadWriteLockLong                  thrpt   10   26,638 ± 0,572  ops/us
JmhGridLocksBenchmark.testSynchronizedLong                   thrpt   10   20,910 ± 0,747  ops/us
//Ignite locks
JmhGridLocksBenchmark.testGridStripedSpinBusyLockLong        thrpt   10   30,443 ± 1,125  ops/us
JmhGridLocksBenchmark.testGridBusyLockLong                   thrpt   10    6,323 ± 0,233  ops/us
JmhGridLocksBenchmark.testGridSpinBusyLockLong               thrpt   10    6,153 ± 0,188  ops/us
JmhGridLocksBenchmark.testGridSpinReadWriteLockLong          thrpt   10   19,847 ± 4,011  ops/us
JmhGridLocksBenchmark.testStripedCompositeReadWriteLockLong  thrpt   10    7,132 ± 0,983  ops/us
JmhGridLocksBenchmark.testGridKeyLockLong                    thrpt   10    2,648 ± 0,652  ops/us
----------------------
With 8 threads:

Benchmark                                                     Mode  Cnt    Score   Error   Units
//For comparation
JmhGridLocksBenchmark.testNonThreadSafeLong                  thrpt   10  586,749 ± 2,911  ops/us
JmhGridLocksBenchmark.testAtomicLong                         thrpt   10   32,270 ± 0,609  ops/us
//JDK locks
JmhGridLocksBenchmark.testReentrantLockLong                  thrpt   10   34,899 ± 0,607  ops/us
JmhGridLocksBenchmark.testReadWriteLockLong                  thrpt   10   30,813 ± 0,621  ops/us
JmhGridLocksBenchmark.testSynchronizedLong                   thrpt   10   28,870 ± 0,514  ops/us
//Ignite locks
JmhGridLocksBenchmark.testGridStripedSpinBusyLockLong        thrpt   10   27,620 ± 1,437  ops/us
JmhGridLocksBenchmark.testGridBusyLockLong                   thrpt   10    6,382 ± 0,150  ops/us
JmhGridLocksBenchmark.testGridSpinBusyLockLong               thrpt   10    6,121 ± 0,314  ops/us
JmhGridLocksBenchmark.testGridSpinReadWriteLockLong          thrpt   10   21,927 ± 2,192  ops/us
JmhGridLocksBenchmark.testStripedCompositeReadWriteLockLong  thrpt   10    7,188 ± 0,272  ops/us
JmhGridLocksBenchmark.testGridKeyLockLong                    thrpt   10    2,604 ± 0,171  ops/us

> Reentrant lock looks much slower that cache locks.
> --------------------------------------------------
>
>                 Key: IGNITE-4908
>                 URL: https://issues.apache.org/jira/browse/IGNITE-4908
>             Project: Ignite
>          Issue Type: Improvement
>          Components: data structures
>    Affects Versions: 1.8
>            Reporter: Andrew Mashenkov
>            Assignee: Alexander Menshikov
>             Fix For: 2.1
>
>
> We should make a benchmark and investigate this issue.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)