in tso-server/src/main/java/org/apache/omid/tso/CacheEvaluation.java [43:103]
private void testEntriesAge(LongCache cache, PrintWriter writer) {
Random random = new Random();
long seed = random.nextLong();
writer.println("# Random seed: " + seed);
random.setSeed(seed);
int removals = 0;
double tempStdDev = 0;
double tempAvg = 0;
int i = 0;
int largestDeletedTimestamp = 0;
long hotItem = random.nextLong();
Runtime.getRuntime().gc();
for (; i < ENTRIES * WARMUP_ROUNDS; ++i) {
long toInsert = random.nextInt(100) < HOT_PERC ? hotItem : random.nextLong();
long removed = cache.set(toInsert, i);
if (removed > largestDeletedTimestamp) {
largestDeletedTimestamp = (int) removed;
}
if (removed > largestDeletedTimestamp) {
largestDeletedTimestamp = (int) removed;
}
if (i % ENTRIES == 0) {
int round = i / ENTRIES + 1;
System.err.format("Warmup [%d/%d]%n", round, WARMUP_ROUNDS);
}
}
long time = System.nanoTime();
for (; i < ENTRIES * (WARMUP_ROUNDS + ROUNDS); ++i) {
long toInsert = random.nextInt(100) < HOT_PERC ? hotItem : random.nextLong();
long removed = cache.set(toInsert, i);
if (removed > largestDeletedTimestamp) {
largestDeletedTimestamp = (int) removed;
}
int gap = i - largestDeletedTimestamp;
removals++;
double oldAvg = tempAvg;
tempAvg += (gap - tempAvg) / removals;
tempStdDev += (gap - oldAvg) * (gap - tempAvg);
if (i % ENTRIES == 0) {
int round = i / ENTRIES - WARMUP_ROUNDS + 1;
System.err.format("Progress [%d/%d]%n", round, ROUNDS);
}
}
long elapsed = System.nanoTime() - time;
double elapsedSeconds = (elapsed / (double) 1000000000);
long totalOps = ENTRIES * ROUNDS;
writer.println("# Free mem before GC (MB) :" + (Runtime.getRuntime().freeMemory() / (double) (1024 * 1024)));
Runtime.getRuntime().gc();
writer.println("# Free mem (MB) :" + (Runtime.getRuntime().freeMemory() / (double) (1024 * 1024)));
writer.println("# Elapsed (s): " + elapsedSeconds);
writer.println("# Elapsed per 100 ops (ms): " + (elapsed / (double) totalOps / 100 / 1000000));
writer.println("# Ops per s : " + (totalOps / elapsedSeconds));
writer.println("# Avg gap: " + (tempAvg));
writer.println("# Std dev gap: " + Math.sqrt((tempStdDev / ENTRIES)));
}