diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index ad6898c01d0..4327e51fb4b 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -10,6 +10,9 @@ Release 2.6.5 - UNRELEASED OPTIMIZATIONS + YARN-4690. Skip object allocation in FSAppAttempt#getResourceUsage when + possible (Ming Ma via sjlee) + BUG FIXES Release 2.6.4 - 2016-02-11 diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java index b23ec3ed30e..a30a2c55df8 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FSAppAttempt.java @@ -722,7 +722,12 @@ public Resource getMaxShare() { public Resource getResourceUsage() { // Here the getPreemptedResources() always return zero, except in // a preemption round - return Resources.subtract(getCurrentConsumption(), getPreemptedResources()); + // In the common case where preempted resource is zero, return the + // current consumption Resource object directly without calling + // Resources.subtract which creates a new Resource object for each call. + return getPreemptedResources().equals(Resources.none()) ? + getCurrentConsumption() : + Resources.subtract(getCurrentConsumption(), getPreemptedResources()); } @Override