diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java index 3f6616a..57b0bda 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java @@ -494,10 +494,11 @@ private void sendContainerMonitorStartEvent() { YarnConfiguration.NM_VMEM_PMEM_RATIO, YarnConfiguration.DEFAULT_NM_VMEM_PMEM_RATIO); long vmemBytes = (long) (pmemRatio * pmemBytes); + int cpuVcores = getResource().getVirtualCores(); dispatcher.getEventHandler().handle( new ContainerStartMonitoringEvent(containerId, - vmemBytes, pmemBytes)); + vmemBytes, pmemBytes, cpuVcores)); } private void addDiagnostics(String... diags) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerStartMonitoringEvent.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerStartMonitoringEvent.java index 407ada5..56e2d8e 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerStartMonitoringEvent.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerStartMonitoringEvent.java @@ -24,12 +24,14 @@ private final long vmemLimit; private final long pmemLimit; + private final int cpuVcores; public ContainerStartMonitoringEvent(ContainerId containerId, - long vmemLimit, long pmemLimit) { + long vmemLimit, long pmemLimit, int cpuVcores) { super(containerId, ContainersMonitorEventType.START_MONITORING_CONTAINER); this.vmemLimit = vmemLimit; this.pmemLimit = pmemLimit; + this.cpuVcores = cpuVcores; } public long getVmemLimit() { @@ -40,4 +42,7 @@ public long getPmemLimit() { return this.pmemLimit; } + public int getCpuVcores() { + return this.cpuVcores; + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerUsageMetrics.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerUsageMetrics.java index df291d1..dcbb1a2 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerUsageMetrics.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainerUsageMetrics.java @@ -41,12 +41,23 @@ public class ContainerUsageMetrics implements MetricsSource { @Metric + MutableGaugeInt pMemLimitMbs; + + @Metric + MutableGaugeInt vMemLimitMbs; + + @Metric + MutableGaugeInt cpuVcores; + + @Metric MutableGaugeInt pMemMBs; @Metric MutableStat pMemMBsStat; private static final Log LOG = LogFactory.getLog(ContainerUsageMetrics.class); + protected static final MetricsInfo PROCESSID_INFO = info("ContainerPid", + "Container Process Id"); private final MetricsInfo recordInfo; private final MetricsRegistry registry; private final MetricsSystem ms; @@ -61,6 +72,11 @@ private ContainerUsageMetrics(ContainerId containerId) { recordInfo = info("Usage-" + containerId, "Container resource usage"); registry = new MetricsRegistry(recordInfo); + pMemLimitMbs = registry.newGauge("PMemLimit", "Physical memory limit ", 0); + vMemLimitMbs = registry.newGauge("VMemLimit", "Virtual memory limit ", 0); + cpuVcores = registry.newGauge("VCoreLimit", + "CPU limit in number of vcores", 0); + pMemMBs = registry.newGauge("curPMem", "Current physical memory usage", 0); pMemMBsStat = registry.newStat( "pMem", "Physical memory stats", "Usage", "MBs", true); @@ -92,4 +108,14 @@ public void recordMemoryUsage(int memoryMBs) { this.pMemMBs.set(memoryMBs); this.pMemMBsStat.add(memoryMBs); } + + public void recordProcessId(String processId) { + this.registry.tag(PROCESSID_INFO, processId); + } + + public void recordResourceLimit(int vmemLimit, int pmemLimit, int cpuVcores) { + this.vMemLimitMbs.set(vmemLimit); + this.pMemLimitMbs.set(pmemLimit); + this.cpuVcores.set(cpuVcores); + } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java index abdef56..11b42cf 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java @@ -211,14 +211,17 @@ protected void serviceStop() throws Exception { private ResourceCalculatorProcessTree pTree; private long vmemLimit; private long pmemLimit; + private int cpuVcores; public ProcessTreeInfo(ContainerId containerId, String pid, - ResourceCalculatorProcessTree pTree, long vmemLimit, long pmemLimit) { + ResourceCalculatorProcessTree pTree, long vmemLimit, long pmemLimit, + int cpuVcores) { this.containerId = containerId; this.pid = pid; this.pTree = pTree; this.vmemLimit = vmemLimit; this.pmemLimit = pmemLimit; + this.cpuVcores = cpuVcores; } public ContainerId getContainerId() { @@ -251,6 +254,14 @@ public long getVmemLimit() { public long getPmemLimit() { return this.pmemLimit; } + + /** + * Return the number of cpu vcores assigned + * @return + */ + public int getCpuVcores() { + return this.cpuVcores; + } } @@ -346,8 +357,16 @@ public void run() { ProcessTreeInfo processTreeInfo = entry.getValue(); LOG.info("Starting resource-monitoring for " + containerId); trackingContainers.put(containerId, processTreeInfo); - containerUsageMetricsMap.put(containerId, - ContainerUsageMetrics.create(containerId)); + final ContainerUsageMetrics usageMetrics = + ContainerUsageMetrics.create(containerId); + containerUsageMetricsMap.put(containerId, usageMetrics); + long vmemLimit = processTreeInfo.getVmemLimit(); + long pmemLimit = processTreeInfo.getPmemLimit(); + int cpuVcores = processTreeInfo.getCpuVcores(); + String pId = processTreeInfo.getPID(); + usageMetrics.recordProcessId(pId); + usageMetrics.recordResourceLimit((int) (vmemLimit >> 20), (int) + (pmemLimit >> 20), cpuVcores); } containersToBeAdded.clear(); } @@ -571,7 +590,8 @@ public void handle(ContainersMonitorEvent monitoringEvent) { synchronized (this.containersToBeAdded) { ProcessTreeInfo processTreeInfo = new ProcessTreeInfo(containerId, null, null, - startEvent.getVmemLimit(), startEvent.getPmemLimit()); + startEvent.getVmemLimit(), startEvent.getPmemLimit(), + startEvent.getCpuVcores()); this.containersToBeAdded.put(containerId, processTreeInfo); } break;