Brand new JMH and Yardstick benchmarks

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Brand new JMH and Yardstick benchmarks

Александр Меньшиков
Hi, guys. I have written benchmarks for comparing IgniteCache.lock() and
Ignite.reentrantLock() and they merged to master branch.

If someone new wants to make benchmarks look at the implementation. Don't
forget to write both JMH and Yardstick benchmarks.

In process of writing, I have found out that locks in Ignite have not any
optimization for the situation when locks are unnecessary. So you don't
need adding any operation between lock/unlock operations. Which is not true
for standard Java locks classes because JIT can remove locks with an empty
body. For check such situation you need to make three benchmarks: the first
only with locks but without the body, second with read/write operations but
without locks, and the other with locks and operations. And make sure
result is consistent. It's okay if the third benchmark works faster than
the first and the second in sum.

Classes:

1. JMH:
    1)
org.apache.ignite.internal.benchmarks.jmh.cache.JmhCacheLocksBenchmark
2. Yardstick:
    1) org.apache.ignite.yardstick.cache.IgniteLockBenchmark
    2) org.apache.ignite.yardstick.cache.IgniteCacheLockBenchmark
Reply | Threaded
Open this post in threaded view
|

Re: Brand new JMH and Yardstick benchmarks

dmagda
Alexander,

Sounds like a useful addition, thanks! Does it make sense to document the usage and specificities you are mentioning on an Ignite wiki page?


Denis

> On Jul 20, 2017, at 9:59 AM, Александр Меньшиков <[hidden email]> wrote:
>
> Hi, guys. I have written benchmarks for comparing IgniteCache.lock() and
> Ignite.reentrantLock() and they merged to master branch.
>
> If someone new wants to make benchmarks look at the implementation. Don't
> forget to write both JMH and Yardstick benchmarks.
>
> In process of writing, I have found out that locks in Ignite have not any
> optimization for the situation when locks are unnecessary. So you don't
> need adding any operation between lock/unlock operations. Which is not true
> for standard Java locks classes because JIT can remove locks with an empty
> body. For check such situation you need to make three benchmarks: the first
> only with locks but without the body, second with read/write operations but
> without locks, and the other with locks and operations. And make sure
> result is consistent. It's okay if the third benchmark works faster than
> the first and the second in sum.
>
> Classes:
>
> 1. JMH:
>    1)
> org.apache.ignite.internal.benchmarks.jmh.cache.JmhCacheLocksBenchmark
> 2. Yardstick:
>    1) org.apache.ignite.yardstick.cache.IgniteLockBenchmark
>    2) org.apache.ignite.yardstick.cache.IgniteCacheLockBenchmark