Skip to content

Commit 933a246

Browse files
committed
Add Client based perf tests
1 parent 11d07de commit 933a246

File tree

5 files changed

+188
-32
lines changed

5 files changed

+188
-32
lines changed

getputremovetest/pom.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ THE POSSIBILITY OF SUCH DAMAGE.
8080
<version>7.7.0</version>
8181
</dependency>
8282

83-
<!--
8483
<dependency>
8584
<groupId>org.infinispan</groupId>
8685
<artifactId>infinispan-server-hotrod</artifactId>
@@ -91,7 +90,6 @@ THE POSSIBILITY OF SUCH DAMAGE.
9190
<artifactId>infinispan-client-hotrod</artifactId>
9291
<version>${infinispan.version}</version>
9392
</dependency>
94-
-->
9593
</dependencies>
9694

9795

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package org.infinispan;
2+
3+
import java.io.IOException;
4+
import java.util.Arrays;
5+
import java.util.concurrent.atomic.AtomicInteger;
6+
import java.util.concurrent.atomic.LongAdder;
7+
8+
import org.infinispan.client.hotrod.RemoteCache;
9+
import org.infinispan.client.hotrod.RemoteCacheManager;
10+
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
11+
import org.infinispan.client.hotrod.impl.ConfigurationProperties;
12+
import org.infinispan.manager.DefaultCacheManager;
13+
import org.infinispan.server.hotrod.HotRodServer;
14+
import org.infinispan.server.hotrod.configuration.HotRodServerConfiguration;
15+
import org.infinispan.server.hotrod.configuration.HotRodServerConfigurationBuilder;
16+
import org.openjdk.jmh.annotations.Param;
17+
import org.openjdk.jmh.annotations.Scope;
18+
import org.openjdk.jmh.annotations.Setup;
19+
import org.openjdk.jmh.annotations.State;
20+
import org.openjdk.jmh.annotations.TearDown;
21+
22+
@State(Scope.Benchmark)
23+
public class InfinispanRemoteHolder {
24+
25+
private static final AtomicInteger hotRodPort = new AtomicInteger(ConfigurationProperties.DEFAULT_HOTROD_PORT);
26+
27+
static final String cfg = System.getProperty( "infinispan.cfg", "dist-sync.xml" );
28+
29+
private final LongAdder gets = new LongAdder();
30+
private final LongAdder puts = new LongAdder();
31+
private final LongAdder removes = new LongAdder();
32+
33+
private final AtomicInteger cacheRequestCount = new AtomicInteger();
34+
35+
private DefaultCacheManager[] mgrs;
36+
private RemoteCacheManager[] remotes;
37+
private RemoteCache<?, ?>[] caches;
38+
39+
private HotRodServer[] servers;
40+
41+
@Param("3")
42+
private int nodes;
43+
44+
@Param({"1", "3"})
45+
private int remoteClients;
46+
47+
@Param({"-1"})
48+
int maxPoolSize = -1;
49+
50+
@Setup
51+
public void initializeState() throws IOException {
52+
mgrs = new DefaultCacheManager[nodes];
53+
servers = new HotRodServer[nodes];
54+
remotes = new RemoteCacheManager[remoteClients];
55+
caches = new RemoteCache[remoteClients];
56+
HotRodServerConfiguration firstConfig = null;
57+
58+
for (int i = 0; i < nodes; ++i) {
59+
mgrs[i] = new DefaultCacheManager(cfg);
60+
HotRodServerConfigurationBuilder configurationBuilder = new HotRodServerConfigurationBuilder();
61+
configurationBuilder.port(hotRodPort.getAndIncrement());
62+
HotRodServerConfiguration hotRodServerConfiguration = configurationBuilder.build();
63+
if (firstConfig == null) {
64+
firstConfig = hotRodServerConfiguration;
65+
}
66+
servers[i] = new HotRodServer();
67+
servers[i].start(hotRodServerConfiguration, mgrs[i]);
68+
System.out.printf("Started server %d\n", hotRodServerConfiguration.port());
69+
}
70+
71+
ConfigurationBuilder remoteCacheConfigurationBuilder = new ConfigurationBuilder();
72+
remoteCacheConfigurationBuilder.connectionPool().maxActive(maxPoolSize);
73+
remoteCacheConfigurationBuilder.addServer().host(firstConfig.host()).port(firstConfig.port());
74+
for (int i = 0; i < remoteClients; ++i) {
75+
remotes[i] = new RemoteCacheManager(remoteCacheConfigurationBuilder.build());
76+
caches[i] = remotes[i].getCache();
77+
}
78+
}
79+
80+
@TearDown
81+
public void shutdownState() {
82+
Arrays.stream(servers).forEach(HotRodServer::stop);
83+
Arrays.stream(mgrs).forEach(DefaultCacheManager::stop);
84+
System.out.println( "Gets performed: " + gets.longValue() );
85+
System.out.println( "Puts performed: " + puts.longValue() );
86+
System.out.println( "Removes performed: " + removes.longValue() );
87+
}
88+
89+
public RemoteCache getCache() {
90+
int offset = cacheRequestCount.getAndIncrement();
91+
return caches[offset % caches.length];
92+
}
93+
94+
public void cacheGetDone() {
95+
gets.increment();
96+
}
97+
98+
public void cachePutDone() {
99+
puts.increment();
100+
}
101+
102+
public void cacheRemoveDone() {
103+
removes.increment();
104+
}
105+
}
106+

getputremovetest/src/main/java/org/infinispan/JMHBenchmarks.java

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.infinispan;
22

3+
import org.infinispan.client.hotrod.RemoteCache;
34
import org.openjdk.jmh.annotations.Benchmark;
45
import org.openjdk.jmh.annotations.BenchmarkMode;
56
import org.openjdk.jmh.annotations.Fork;
@@ -23,36 +24,36 @@
2324
@BenchmarkMode(Mode.Throughput)
2425
public class JMHBenchmarks {
2526

26-
// @Benchmark
27-
// @GroupThreads(2)
28-
// @Group("getPutHotRod")
29-
// public void infinispanRemoteRemove(InfinispanRemoteHolder ih, Blackhole bh, KeySequenceGenerator kg) {
30-
// Object key = kg.getNextKey();
31-
// RemoteCache cache = ih.getCache();
32-
// bh.consume( cache.remove( key) );
33-
// ih.cacheRemoveDone();
34-
// }
35-
//
36-
// @Benchmark
37-
// @GroupThreads(4)
38-
// @Group("getPutHotRod")
39-
// public void infinispanRemotePut(InfinispanRemoteHolder ih, Blackhole bh, KeySequenceGenerator kg) {
40-
// Object key = kg.getNextKey();
41-
// Object value = kg.getNextValue();
42-
// RemoteCache cache = ih.getCache();
43-
// bh.consume( cache.put( key, value ) );
44-
// ih.cachePutDone();
45-
// }
46-
//
47-
// @Benchmark
48-
// @GroupThreads(16)
49-
// @Group("getPutHotRod")
50-
// public void infinispanRemoteGet(InfinispanRemoteHolder ih, Blackhole bh, KeySequenceGenerator kg) {
51-
// Object key = kg.getNextKey();
52-
// RemoteCache cache = ih.getCache();
53-
// bh.consume( cache.get( key ) );
54-
// ih.cacheGetDone();
55-
// }
27+
@Benchmark
28+
@GroupThreads(2)
29+
@Group("getPutHotRod")
30+
public void infinispanRemoteRemove(InfinispanRemoteHolder ih, Blackhole bh, KeySequenceGenerator kg) {
31+
Object key = kg.getNextKey();
32+
RemoteCache cache = ih.getCache();
33+
bh.consume( cache.remove( key) );
34+
ih.cacheRemoveDone();
35+
}
36+
37+
@Benchmark
38+
@GroupThreads(4)
39+
@Group("getPutHotRod")
40+
public void infinispanRemotePut(InfinispanRemoteHolder ih, Blackhole bh, KeySequenceGenerator kg) {
41+
Object key = kg.getNextKey();
42+
Object value = kg.getNextValue();
43+
RemoteCache cache = ih.getCache();
44+
bh.consume( cache.put( key, value ) );
45+
ih.cachePutDone();
46+
}
47+
48+
@Benchmark
49+
@GroupThreads(16)
50+
@Group("getPutHotRod")
51+
public void infinispanRemoteGet(InfinispanRemoteHolder ih, Blackhole bh, KeySequenceGenerator kg) {
52+
Object key = kg.getNextKey();
53+
RemoteCache cache = ih.getCache();
54+
bh.consume( cache.get( key ) );
55+
ih.cacheGetDone();
56+
}
5657

5758
@Benchmark
5859
@Threads(16)

getputremovetest/src/main/java/org/infinispan/KeySequenceGenerator.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package org.infinispan;
22

3+
import java.io.IOException;
4+
import java.io.ObjectInput;
5+
import java.io.ObjectOutput;
36
import java.io.Serializable;
47
import java.util.Arrays;
8+
import java.util.Set;
59

610
import org.apache.commons.math3.random.JDKRandomGenerator;
711
import org.apache.commons.math3.random.RandomDataGenerator;
12+
import org.infinispan.commons.io.UnsignedNumeric;
13+
import org.infinispan.commons.marshall.AdvancedExternalizer;
14+
import org.infinispan.commons.util.Util;
815
import org.openjdk.jmh.annotations.Param;
916
import org.openjdk.jmh.annotations.Scope;
1017
import org.openjdk.jmh.annotations.Setup;
@@ -109,6 +116,32 @@ else if (obj instanceof ValueWrapper)
109116
else
110117
return false;
111118
}
119+
}
120+
121+
public static class ValueWrapperSerializer implements AdvancedExternalizer<ValueWrapper> {
112122

123+
@Override
124+
public Set<Class<? extends ValueWrapper>> getTypeClasses() {
125+
return Util.asSet(ValueWrapper.class);
126+
}
127+
128+
@Override
129+
public Integer getId() {
130+
return 205;
131+
}
132+
133+
@Override
134+
public void writeObject(ObjectOutput objectOutput, ValueWrapper valueWrapper) throws IOException {
135+
UnsignedNumeric.writeUnsignedInt(objectOutput, valueWrapper.bytes.length);
136+
objectOutput.write(valueWrapper.bytes);
137+
}
138+
139+
@Override
140+
public ValueWrapper readObject(ObjectInput objectInput) throws IOException, ClassNotFoundException {
141+
int size = UnsignedNumeric.readUnsignedInt(objectInput);
142+
byte[] bytes = new byte[size];
143+
objectInput.read(bytes);
144+
return new ValueWrapper(bytes);
145+
}
113146
}
114147
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<infinispan
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xmlns="urn:infinispan:config:15.0">
6+
7+
<cache-container name="default" default-cache="testCache">
8+
<transport stack="tcp" lock-timeout="600000" cluster="default" />
9+
<serialization>
10+
<advanced-externalizer class="org.infinispan.KeySequenceGenerator$ValueWrapperSerializer"/>
11+
</serialization>
12+
13+
<distributed-cache name="testCache" mode="SYNC" >
14+
<state-transfer enabled="false" />
15+
</distributed-cache>
16+
</cache-container>
17+
18+
</infinispan>

0 commit comments

Comments
 (0)