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