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/FSOpDurations.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/FSOpDurations.java index 20d2af9..e7baa79 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/FSOpDurations.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/FSOpDurations.java @@ -56,6 +56,12 @@ @Metric("Duration for a preempt call") MutableRate preemptCall; + @Metric("Duration for a assign container call") + MutableRate assignContainerCall; + + @Metric("Duration for a completed container call") + MutableRate completedContainerCall; + private static final MetricsInfo RECORD_INFO = info("FSOpDurations", "Durations of FairScheduler calls or thread-runs"); @@ -89,6 +95,8 @@ private synchronized void setExtended(boolean isExtended) { updateThreadRun.setExtended(isExtended); updateCall.setExtended(isExtended); preemptCall.setExtended(isExtended); + assignContainerCall.setExtended(isExtended); + completedContainerCall.setExtended(isExtended); INSTANCE.isExtended = isExtended; } @@ -118,6 +126,14 @@ public void addPreemptCallDuration(long value) { preemptCall.add(value); } + public void addCompletedContainerCallDuration(long value) { + completedContainerCall.add(value); + } + + public void addAssignContainerCallDuration(long value) { + assignContainerCall.add(value); + } + @VisibleForTesting public boolean hasUpdateThreadRunChanged() { return updateThreadRun.changed(); 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/FairScheduler.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/FairScheduler.java index bc953ba..782b315 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/FairScheduler.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/FairScheduler.java @@ -864,6 +864,7 @@ protected synchronized void completedContainerInternal( // Get the node on which the container was allocated FSSchedulerNode node = getFSSchedulerNode(container.getNodeId()); + long start = System.nanoTime(); if (rmContainer.getState() == RMContainerState.RESERVED) { application.unreserve(rmContainer.getReservedPriority(), node); @@ -872,6 +873,8 @@ protected synchronized void completedContainerInternal( node.releaseContainer(container); updateRootQueueMetrics(); } + long end = System.nanoTime(); + fsOpDurations.addCompletedContainerCallDuration((end - start)/1000); if (LOG.isDebugEnabled()) { LOG.debug("Application attempt " + application.getApplicationAttemptId() @@ -1161,8 +1164,13 @@ synchronized void attemptScheduling(FSSchedulerNode node) { Resources.multiply(node.getUnallocatedResource(), 0.5f); while (node.getReservedContainer() == null) { boolean assignedContainer = false; + long start = System.nanoTime(); Resource assignment = queueMgr.getRootQueue().assignContainer(node); if (!assignment.equals(Resources.none())) { + if(!CONTAINER_RESERVED.equals(assignment)){ + long end = System.nanoTime(); + fsOpDurations.addAssignContainerCallDuration((end - start)/1000); + } assignedContainers++; assignedContainer = true; Resources.addTo(assignedResource, assignment);