From 4634f43f47bb819b79ed7ea2c3b534ed983840e5 Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Wed, 20 Jan 2021 17:18:50 -0800 Subject: [PATCH 1/3] [Perf] Include running average in per-second output --- .../perf/test/core/PerfStressProgram.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java index e673bb7db72e2..1b1fd476e5924 100644 --- a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java +++ b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java @@ -31,6 +31,16 @@ public class PerfStressProgram { private static int[] completedOperations; private static long[] lastCompletionNanoTimes; + private static int getCompletedOperations() { + return IntStream.of(completedOperations).sum(); + } + + private static double getOperationsPerSecond() { + return IntStream.range(0, completedOperations.length) + .mapToDouble(i -> completedOperations[i] / (((double) lastCompletionNanoTimes[i]) / 1000000000)) + .sum(); + } + /** * Runs the performance tests passed to be executed. * @@ -177,11 +187,13 @@ public static void runTests(PerfStressTest[] tests, boolean sync, int paralle int[] lastCompleted = new int[] { 0 }; Disposable progressStatus = printStatus( - "=== " + title + " ===" + System.lineSeparator() + "Current\t\tTotal", () -> { - int totalCompleted = IntStream.of(completedOperations).sum(); + "=== " + title + " ===" + System.lineSeparator() + "Current\t\tTotal\t\tAverage", () -> { + int totalCompleted = getCompletedOperations(); int currentCompleted = totalCompleted - lastCompleted[0]; + double averageCompleted = getOperationsPerSecond(); + lastCompleted[0] = totalCompleted; - return currentCompleted + "\t\t" + totalCompleted; + return String.format("%d\t\t%d\t\t%.0f", currentCompleted, totalCompleted, averageCompleted); }, true, true); if (sync) { @@ -206,14 +218,12 @@ public static void runTests(PerfStressTest[] tests, boolean sync, int paralle System.out.println("=== Results ==="); - int totalOperations = IntStream.of(completedOperations).sum(); - double operationsPerSecond = IntStream.range(0, parallel) - .mapToDouble(i -> completedOperations[i] / (((double) lastCompletionNanoTimes[i]) / 1000000000)) - .sum(); + int totalOperations = getCompletedOperations(); + double operationsPerSecond = getOperationsPerSecond(); double secondsPerOperation = 1 / operationsPerSecond; double weightedAverageSeconds = totalOperations / operationsPerSecond; - System.out.printf("Completed %d operations in a weighted-average of %.2fs (%.2f ops/s, %.3f s/op)%n", + System.out.printf("Completed %,d operations in a weighted-average of %,.2fs (%,.2f ops/s, %,.3f s/op)%n", totalOperations, weightedAverageSeconds, operationsPerSecond, secondsPerOperation); System.out.println(); } From 9837b9bef935a37b91d77b6a4b2004b2dbd7e2a3 Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Thu, 21 Jan 2021 18:28:24 -0800 Subject: [PATCH 2/3] Add constant NANOSECONDS_PER_SECOND --- .../main/java/com/azure/perf/test/core/PerfStressProgram.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java index 1b1fd476e5924..d4fe4d9a7a9bc 100644 --- a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java +++ b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java @@ -28,6 +28,8 @@ * Represents the main program class which reflectively runs and manages the performance tests. */ public class PerfStressProgram { + private static final int NANOSECONDS_PER_SECOND = 1_000_000_000; + private static int[] completedOperations; private static long[] lastCompletionNanoTimes; @@ -37,7 +39,7 @@ private static int getCompletedOperations() { private static double getOperationsPerSecond() { return IntStream.range(0, completedOperations.length) - .mapToDouble(i -> completedOperations[i] / (((double) lastCompletionNanoTimes[i]) / 1000000000)) + .mapToDouble(i -> completedOperations[i] / (((double) lastCompletionNanoTimes[i]) / NANOSECONDS_PER_SECOND)) .sum(); } From 5eb7d5713cfd40438481545cfc6b04002f205367 Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Thu, 21 Jan 2021 18:40:12 -0800 Subject: [PATCH 3/3] Display average with 2 decimal places --- .../main/java/com/azure/perf/test/core/PerfStressProgram.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java index d4fe4d9a7a9bc..833429db1e0bc 100644 --- a/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java +++ b/common/perf-test-core/src/main/java/com/azure/perf/test/core/PerfStressProgram.java @@ -195,7 +195,7 @@ public static void runTests(PerfStressTest[] tests, boolean sync, int paralle double averageCompleted = getOperationsPerSecond(); lastCompleted[0] = totalCompleted; - return String.format("%d\t\t%d\t\t%.0f", currentCompleted, totalCompleted, averageCompleted); + return String.format("%d\t\t%d\t\t%.2f", currentCompleted, totalCompleted, averageCompleted); }, true, true); if (sync) {