Enable 4 selectors, add reproducer without JMH
diff --git a/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/thin/JmhThinClientCacheBenchmark.java b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/thin/JmhThinClientCacheBenchmark.java
index acdd0d0..3beeb24 100644
--- a/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/thin/JmhThinClientCacheBenchmark.java
+++ b/modules/benchmarks/src/main/java/org/apache/ignite/internal/benchmarks/jmh/thin/JmhThinClientCacheBenchmark.java
@@ -1,8 +1,11 @@
package org.apache.ignite.internal.benchmarks.jmh.thin;
+import java.util.ArrayList;
+import java.util.concurrent.ForkJoinPool;
+import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.ThreadLocalRandom;
-import org.apache.ignite.internal.benchmarks.jmh.runner.JmhIdeBenchmarkRunner;
+import org.apache.ignite.IgniteSystemProperties;
import org.openjdk.jmh.annotations.Benchmark;
public class JmhThinClientCacheBenchmark extends JmhThinClientAbstractBenchmark {
@@ -34,60 +37,40 @@
*/
public static void main(String[] args) throws Exception {
// TODO: Benchmark hangs when GridNioServer.selectorCount > 1
- // This goes away with -DIGNITE_IO_BALANCE_PERIOD=0
- // TODO: File ticket for IGNITE_IO_BALANCE_PERIOD issue
- // TODO: Exception with multiple selectors - race condition?
-// class org.apache.ignite.binary.BinaryObjectException: Invalid flag value: 0
-// at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1964)
-// at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716)
-// at org.apache.ignite.internal.binary.GridBinaryMarshaller.deserialize(GridBinaryMarshaller.java:319)
-// at org.apache.ignite.internal.client.thin.ClientBinaryMarshaller.deserialize(ClientBinaryMarshaller.java:74)
-// at org.apache.ignite.internal.client.thin.ClientUtils.readObject(ClientUtils.java:579)
-// at org.apache.ignite.internal.client.thin.ClientUtils.readObject(ClientUtils.java:569)
-// at org.apache.ignite.internal.client.thin.TcpClientCache.readObject(TcpClientCache.java:783)
-// at org.apache.ignite.internal.client.thin.TcpClientCache.readObject(TcpClientCache.java:788)
-// at org.apache.ignite.internal.client.thin.TcpClientChannel.receive(TcpClientChannel.java:261)
-// at org.apache.ignite.internal.client.thin.TcpClientChannel.service(TcpClientChannel.java:187)
-// at org.apache.ignite.internal.client.thin.ReliableChannel.lambda$affinityService$5(ReliableChannel.java:321)
-// at org.apache.ignite.internal.client.thin.ReliableChannel.applyOnNodeChannelWithFallback(ReliableChannel.java:820)
-// at org.apache.ignite.internal.client.thin.ReliableChannel.affinityService(ReliableChannel.java:320)
-// at org.apache.ignite.internal.client.thin.TcpClientCache.cacheSingleKeyOperation(TcpClientCache.java:711)
-// at org.apache.ignite.internal.client.thin.TcpClientCache.get(TcpClientCache.java:111)
-// at org.apache.ignite.internal.benchmarks.jmh.thin.JmhThinClientCacheBenchmark.get(JmhThinClientCacheBenchmark.java:26)
-//
-//
-// JmhThinClientCacheBenchmark b = new JmhThinClientCacheBenchmark();
-// b.setup();
-// b.put();
-// b.get();
-//
-// ArrayList<ForkJoinTask> tasks = new ArrayList<>();
-// for (int i =0; i < 4; i++) {
-// int finalI = i;
-// ForkJoinTask<?> task = ForkJoinPool.commonPool().submit(() -> {
-// for (int j = 0; j < 1000; j++) {
-// System.out.println(">> " + finalI + " - " + j);
-// b.get();
-// }
-// });
-//
-// tasks.add(task);
-// }
-//
-// for (ForkJoinTask t: tasks) {
-// t.join();
-// System.out.println("JOINED");
-// }
-//
-// b.tearDown();
+ System.setProperty(IgniteSystemProperties.IGNITE_IO_BALANCE_PERIOD, "0");
- JmhIdeBenchmarkRunner.create()
- .forks(1)
- .threads(4)
- .warmupIterations(5)
- .measurementIterations(10)
- .benchmarks(JmhThinClientCacheBenchmark.class.getSimpleName())
- .jvmArguments("-Xms4g", "-Xmx4g")
- .run();
+ JmhThinClientCacheBenchmark b = new JmhThinClientCacheBenchmark();
+ b.setup();
+ b.put();
+ b.get();
+
+ ArrayList<ForkJoinTask> tasks = new ArrayList<>();
+ for (int i = 0; i < 4; i++) {
+ int threadIdx = i;
+ ForkJoinTask<?> task = ForkJoinPool.commonPool().submit(() -> {
+ for (int j = 0; j < 1000; j++) {
+ System.out.println(">> " + threadIdx + " - " + j);
+ b.get();
+ }
+ });
+
+ tasks.add(task);
+ }
+
+ for (ForkJoinTask t : tasks) {
+ t.join();
+ System.out.println("JOINED");
+ }
+
+ b.tearDown();
+
+// JmhIdeBenchmarkRunner.create()
+// .forks(1)
+// .threads(4)
+// .warmupIterations(5)
+// .measurementIterations(10)
+// .benchmarks(JmhThinClientCacheBenchmark.class.getSimpleName())
+// .jvmArguments("-Xms4g", "-Xmx4g")
+// .run();
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/gridnioserver/GridNioClientConnectionMultiplexer.java b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/gridnioserver/GridNioClientConnectionMultiplexer.java
index 3519fa8..a0b76ad 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/gridnioserver/GridNioClientConnectionMultiplexer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/io/gridnioserver/GridNioClientConnectionMultiplexer.java
@@ -83,7 +83,7 @@
.logger(gridLog)
// TODO: Review settings below
// TODO: Buffer sizes from settings - check them
- .selectorCount(1) // TODO: Do we need a setting? Run a benchmark.
+ .selectorCount(4) // TODO: Do we need a setting? Run a benchmark.
.byteOrder(ByteOrder.nativeOrder())
.directBuffer(true)
.directMode(false)