/* * 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 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; import java.util.concurrent.ThreadLocalRandom; /** * Put benchmark. */ @SuppressWarnings("unchecked") public class JmhCacheBenchmark extends JmhCacheAbstractBenchmark { /** * Set up routine. * * @throws Exception If failed. */ 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(); } }