blob: 5e9ac60b3f2a2e4c8b334b2c14b6b2d752ceb3b0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.internal.benchmarks.jmh.cache;
import java.util.concurrent.ThreadLocalRandom;
import org.apache.ignite.IgniteDataStreamer;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheWriteSynchronizationMode;
import org.apache.ignite.internal.benchmarks.jmh.runner.JmhIdeBenchmarkRunner;
import org.apache.ignite.internal.benchmarks.model.IntValue;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.profile.GCProfiler;
/**
* Put benchmark.
*/
@SuppressWarnings("unchecked")
public class JmhCacheBenchmark extends JmhCacheAbstractBenchmark {
/** {@inheritDoc} */
@Override public void setup() throws Exception {
super.setup();
IgniteDataStreamer<Integer, IntValue> dataLdr = node.dataStreamer(cache.getName());
for (int i = 0; i < CNT; i++)
dataLdr.addData(i, new IntValue(i));
dataLdr.close();
System.out.println("Cache populated.");
}
/**
* Test PUT operation.
*
* @throws Exception If failed.
*/
@Benchmark
public void put() throws Exception {
int key = ThreadLocalRandom.current().nextInt(CNT);
cache.put(key, new IntValue(key));
}
/**
* Test PUT operation.
*
* @throws Exception If failed.
*/
@Benchmark
public Object get() throws Exception {
int key = ThreadLocalRandom.current().nextInt(CNT);
return cache.get(key);
}
/**
* Run benchmarks.
*
* @param args Arguments.
* @throws Exception If failed.
*/
public static void main(String[] args) throws Exception {
run("put", CacheAtomicityMode.ATOMIC);
run("get", CacheAtomicityMode.ATOMIC);
run("put", CacheAtomicityMode.TRANSACTIONAL);
run("get", CacheAtomicityMode.TRANSACTIONAL);
}
/**
* Run benchmarks for atomic cache.
*
* @param benchmark Benchmark name.
* @param atomicityMode Atomicity mode.
* @throws Exception If failed.
*/
private static void run(String benchmark, CacheAtomicityMode atomicityMode) throws Exception {
run(benchmark, 4, true, atomicityMode, CacheWriteSynchronizationMode.PRIMARY_SYNC);
run(benchmark, 4, true, atomicityMode, CacheWriteSynchronizationMode.FULL_SYNC);
run(benchmark, 4, false, atomicityMode, CacheWriteSynchronizationMode.PRIMARY_SYNC);
run(benchmark, 4, false, atomicityMode, CacheWriteSynchronizationMode.FULL_SYNC);
}
/**
* Run benchmark.
*
* @param benchmark Benchmark to run.
* @param threads Amount of threads.
* @param client Client mode flag.
* @param atomicityMode Atomicity mode.
* @param writeSyncMode Write synchronization mode.
* @throws Exception If failed.
*/
private static void run(String benchmark, int threads, boolean client, CacheAtomicityMode atomicityMode,
CacheWriteSynchronizationMode writeSyncMode) throws Exception {
String simpleClsName = JmhCacheBenchmark.class.getSimpleName();
String output = simpleClsName + "-" + benchmark +
"-" + threads + "-threads" +
"-" + (client ? "client" : "data") +
"-" + atomicityMode +
"-" + writeSyncMode;
JmhIdeBenchmarkRunner.create()
.forks(1)
.threads(threads)
.warmupIterations(10)
.measurementIterations(60)
.benchmarks(simpleClsName + "." + benchmark)
.output(output + ".jmh.log")
.profilers(GCProfiler.class)
.jvmArguments(
"-Xms4g",
"-Xmx4g",
"-XX:+UnlockCommercialFeatures",
"-XX:+FlightRecorder",
"-XX:StartFlightRecording=delay=30s,dumponexit=true,settings=alloc,filename=" + output + ".jfr",
JmhIdeBenchmarkRunner.createProperty(PROP_ATOMICITY_MODE, atomicityMode),
JmhIdeBenchmarkRunner.createProperty(PROP_WRITE_SYNC_MODE, writeSyncMode),
JmhIdeBenchmarkRunner.createProperty(PROP_DATA_NODES, 2),
JmhIdeBenchmarkRunner.createProperty(PROP_CLIENT_MODE, client))
.run();
}
}