You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aurora.apache.org by se...@apache.org on 2016/11/17 19:44:15 UTC

aurora git commit: Make scheduling benchmarks more realistic.

Repository: aurora
Updated Branches:
  refs/heads/master 44ab4c5db -> 05f082a1c


Make scheduling benchmarks more realistic.

This patch aims to strike a better balance between available offers, already
launched tasks, and tasks to be scheduled. Specifically, it ensures that we
only measure scheduling of tasks for which instances of the same job are
already running (e.g. as needed by limit constraints).

The following setup is now the default: Given N hosts

* there are 0.25 * N tasks of job A scheduled
* there are 0.25 * N tasks of job B scheduled
* there are 0.50 * N free offers available
* we try to schedule a task instance of job A

Hopefully this provides us with benchmark results closer to actual
production performance.

Before:

SchedulingBenchmarks.LimitConstraintMismatchSchedulingBenchmark.runBenchmark  thrpt   10  1646.245 � 273.340  ops/s
SchedulingBenchmarks.InsufficientResourcesSchedulingBenchmark.runBenchmark  thrpt   10  12526.174 � 814.677  ops/s

After:

SchedulingBenchmarks.LimitConstraintMismatchSchedulingBenchmark.runBenchmark  thrpt   10  241.808 � 51.952  ops/s
SchedulingBenchmarks.InsufficientResourcesSchedulingBenchmark.runBenchmark  thrpt   10  3447.655 � 565.998  ops/s

Related bug: AURORA-1802

Reviewed at https://reviews.apache.org/r/53829/


Project: http://git-wip-us.apache.org/repos/asf/aurora/repo
Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/05f082a1
Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/05f082a1
Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/05f082a1

Branch: refs/heads/master
Commit: 05f082a1cab93f2cc4f2456d7d37511a161d2578
Parents: 44ab4c5
Author: Stephan Erb <se...@apache.org>
Authored: Thu Nov 17 20:43:49 2016 +0100
Committer: Stephan Erb <se...@apache.org>
Committed: Thu Nov 17 20:43:49 2016 +0100

----------------------------------------------------------------------
 .../aurora/benchmark/BenchmarkSettings.java     | 42 +++++++++++++++-----
 .../aurora/benchmark/SchedulingBenchmarks.java  | 17 +++++---
 2 files changed, 43 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aurora/blob/05f082a1/src/jmh/java/org/apache/aurora/benchmark/BenchmarkSettings.java
----------------------------------------------------------------------
diff --git a/src/jmh/java/org/apache/aurora/benchmark/BenchmarkSettings.java b/src/jmh/java/org/apache/aurora/benchmark/BenchmarkSettings.java
index 94f8b79..ddab2ec 100644
--- a/src/jmh/java/org/apache/aurora/benchmark/BenchmarkSettings.java
+++ b/src/jmh/java/org/apache/aurora/benchmark/BenchmarkSettings.java
@@ -25,17 +25,20 @@ import static java.util.Objects.requireNonNull;
  */
 final class BenchmarkSettings {
   private final Set<IHostAttributes> hostAttributes;
-  private final double clusterUtilization;
+  private final double siblingClusterUtilization;
+  private final double victimClusterUtilization;
   private final boolean allVictimsEligibleForPreemption;
   private final Set<IScheduledTask> tasks;
 
   private BenchmarkSettings(
-      double clusterUtilization,
+      double siblingClusterUtilization,
+      double victimClusterUtilization,
       boolean allVictimsEligibleForPreemption,
       Set<IHostAttributes> hostAttributes,
       Set<IScheduledTask> tasks) {
 
-    this.clusterUtilization = clusterUtilization;
+    this.siblingClusterUtilization = siblingClusterUtilization;
+    this.victimClusterUtilization = victimClusterUtilization;
     this.allVictimsEligibleForPreemption = allVictimsEligibleForPreemption;
     this.hostAttributes = requireNonNull(hostAttributes);
     this.tasks = requireNonNull(tasks);
@@ -43,12 +46,22 @@ final class BenchmarkSettings {
 
   /**
    * Gets the cluster utilization factor specifying what percentage of hosts in the cluster
-   * already have tasks assigned to them.
+   * already have a job instance assigned to them as used during the scheduling benchmark.
    *
-   * @return Cluster utilization (default: 0.9).
+   * @return Cluster utilization (default: 0.25).
    */
-  double getClusterUtilization() {
-    return clusterUtilization;
+  double getSiblingClusterUtilization() {
+    return siblingClusterUtilization;
+  }
+
+  /**
+   * Gets the cluster utilization factor specifying what percentage of hosts in the cluster
+   * have a task of a foreign job assigned to them, i.e. potential preemption victims.
+   *
+   * @return Cluster utilization (default: 0.25).
+   */
+  double getVictimClusterUtilization() {
+    return victimClusterUtilization;
   }
 
   /**
@@ -79,13 +92,19 @@ final class BenchmarkSettings {
   }
 
   static class Builder {
-    private double clusterUtilization = 0.9;
+    private double siblingClusterUtilization = 0.25;
+    private double victimClusterUtilization = 0.25;
     private boolean allVictimsEligibleForPreemption;
     private Set<IHostAttributes> hostAttributes;
     private Set<IScheduledTask> tasks;
 
-    Builder setClusterUtilization(double newClusterUtilization) {
-      clusterUtilization = newClusterUtilization;
+    Builder setSiblingClusterUtilization(double newClusterUtilization) {
+      siblingClusterUtilization = newClusterUtilization;
+      return this;
+    }
+
+    Builder setVictimClusterUtilization(double newClusterUtilization) {
+      victimClusterUtilization = newClusterUtilization;
       return this;
     }
 
@@ -106,7 +125,8 @@ final class BenchmarkSettings {
 
     BenchmarkSettings build() {
       return new BenchmarkSettings(
-          clusterUtilization,
+          siblingClusterUtilization,
+          victimClusterUtilization,
           allVictimsEligibleForPreemption,
           hostAttributes,
           tasks);

http://git-wip-us.apache.org/repos/asf/aurora/blob/05f082a1/src/jmh/java/org/apache/aurora/benchmark/SchedulingBenchmarks.java
----------------------------------------------------------------------
diff --git a/src/jmh/java/org/apache/aurora/benchmark/SchedulingBenchmarks.java b/src/jmh/java/org/apache/aurora/benchmark/SchedulingBenchmarks.java
index 1b56500..0510b89 100644
--- a/src/jmh/java/org/apache/aurora/benchmark/SchedulingBenchmarks.java
+++ b/src/jmh/java/org/apache/aurora/benchmark/SchedulingBenchmarks.java
@@ -19,6 +19,7 @@ import java.util.concurrent.TimeUnit;
 import javax.inject.Singleton;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Sets;
 import com.google.common.eventbus.EventBus;
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
@@ -181,11 +182,15 @@ public class SchedulingBenchmarks {
     }
 
     private Set<IScheduledTask> buildClusterTasks(int numOffers) {
-      int numOffersToFill = (int) Math.round(numOffers * settings.getClusterUtilization());
-      return new Tasks.Builder()
+      int numSiblingTasks = (int) Math.round(numOffers * settings.getSiblingClusterUtilization());
+      int numVictimTasks = (int) Math.round(numOffers * settings.getVictimClusterUtilization());
+      return Sets.union(
+        new Tasks.Builder()
+          .build(numSiblingTasks),
+        new Tasks.Builder()
           .setRole("victim")
           .setProduction(!settings.areAllVictimsEligibleForPreemption())
-          .build(numOffersToFill);
+          .build(numVictimTasks));
     }
 
     private void fillUpCluster(int numOffers) {
@@ -289,7 +294,8 @@ public class SchedulingBenchmarks {
     @Override
     protected BenchmarkSettings getSettings() {
       return new BenchmarkSettings.Builder()
-          .setClusterUtilization(1.0)
+          .setSiblingClusterUtilization(0.1)
+          .setVictimClusterUtilization(0.9)
           .setVictimPreemptionEligibilty(true)
           .setHostAttributes(new Hosts.Builder().setNumHostsPerRack(2).build(10000))
           .setTasks(new Tasks.Builder()
@@ -309,7 +315,8 @@ public class SchedulingBenchmarks {
     @Override
     protected BenchmarkSettings getSettings() {
       return new BenchmarkSettings.Builder()
-          .setClusterUtilization(1.0)
+          .setSiblingClusterUtilization(0.1)
+          .setVictimClusterUtilization(0.9)
           .setHostAttributes(new Hosts.Builder().setNumHostsPerRack(2).build(10000))
           .setTasks(new Tasks.Builder()
               .setProduction(true)