[infinispan-commits] Infinispan SVN: r956 - trunk/core/src/test/java/org/infinispan/distribution.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Thu Oct 15 10:29:48 EDT 2009
Author: manik.surtani at jboss.com
Date: 2009-10-15 10:29:48 -0400 (Thu, 15 Oct 2009)
New Revision: 956
Added:
trunk/core/src/test/java/org/infinispan/distribution/ConsistentHashPerfTest.java
Log:
[ISPN-183] (Test performance of DefaultConsistentHash)
Added: trunk/core/src/test/java/org/infinispan/distribution/ConsistentHashPerfTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/distribution/ConsistentHashPerfTest.java (rev 0)
+++ trunk/core/src/test/java/org/infinispan/distribution/ConsistentHashPerfTest.java 2009-10-15 14:29:48 UTC (rev 956)
@@ -0,0 +1,97 @@
+package org.infinispan.distribution;
+
+import org.infinispan.remoting.transport.Address;
+import org.infinispan.remoting.transport.jgroups.JGroupsAddress;
+import org.infinispan.test.TestingUtil;
+import org.infinispan.util.Util;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Tests the uniformity of the distribution hash algo.
+ *
+ * @author Manik Surtani
+ * @since 4.0
+ */
+ at Test(testName = "distribution.ConsistentHashPerfTest", groups = "manual", enabled = false)
+public class ConsistentHashPerfTest {
+
+ private void addCaches(ConsistentHash ch, int numNodes) {
+ Random r = new Random();
+ List<Address> addresses = new ArrayList<Address>(numNodes);
+ while (addresses.size() < numNodes)
+ addresses.add(new JGroupsAddress(new org.jgroups.util.UUID(r.nextLong(), r.nextLong())));
+ ch.setCaches(addresses);
+ }
+
+ public void testSpeed() {
+ int[] numNodes = {1, 10, 100, 1000, 10000};
+ int iterations = 100000;
+ // warmup
+ doPerfTest(numNodes, iterations);
+ Map<Integer, Long> performance = doPerfTest(numNodes, iterations);
+
+ for (int i: numNodes) {
+ System.out.println("With "+i+" cache(s), time to do " +iterations+ " lookups was " + Util.prettyPrintTime(TimeUnit.NANOSECONDS.toMillis(performance.get(i))));
+ }
+ }
+
+ private Map<Integer, Long> doPerfTest(int[] numNodes, int iterations) {
+ Map<Integer, Long> performance = new HashMap<Integer, Long>();
+ for (int nn : numNodes) {
+ System.gc();
+ TestingUtil.sleepThread(1000);
+ ConsistentHash ch = new DefaultConsistentHash();
+ addCaches(ch, nn);
+ long start = System.nanoTime();
+ Object key = new Object();
+ for (int i = 0; i < iterations; i++) ch.locate(key, 1);
+ long duration = System.nanoTime() - start;
+ performance.put(nn, duration);
+ }
+ return performance;
+ }
+
+ public void testDistribution() {
+ final int numKeys = 100000;
+ final int numNodes = 100;
+
+ List<Object> keys = new ArrayList<Object>(numKeys);
+ ConsistentHash ch = new DefaultConsistentHash();
+
+ for (int i = 0; i < numKeys; i++) keys.add(UUID.randomUUID());
+
+ Map<Address, Integer> distribution = new HashMap<Address, Integer>();
+
+ for (Object key : keys) {
+ Address a = ch.locate(key, 1).get(0);
+ if (distribution.containsKey(a)) {
+ int i = distribution.get(a);
+ distribution.put(a, i + 1);
+ } else {
+ distribution.put(a, 1);
+ }
+ }
+
+ System.out.println("" + distribution);
+
+ // calc numbers
+ float mean = 0;
+ int sum = 0;
+ for (Integer count : distribution.values()) sum += count;
+ assert sum == numKeys;
+ mean = sum / distribution.size();
+ System.out.println("Mean distribution = " + mean);
+ int perfect = numKeys / numNodes;
+ System.out.println("Perfect distribution = " + perfect);
+ float variance = Math.abs(perfect - mean) * 100 / perfect;
+ System.out.println("Variance % = " + variance);
+ }
+}
Property changes on: trunk/core/src/test/java/org/infinispan/distribution/ConsistentHashPerfTest.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
More information about the infinispan-commits
mailing list