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)