public double getResourcePoolAverageUtilization(ISchedulingState cluster) { double cpuResourcePoolUtilization = getCpuResourcePoolUtilization(cluster); double memoryResourcePoolUtilization = getMemoryResourcePoolUtilization(cluster); //cannot be (cpuResourcePoolUtilization + memoryResourcePoolUtilization)/2 //since memoryResourcePoolUtilization or cpuResourcePoolUtilization can be Double.MAX_VALUE //Should not return infinity in that case return ((cpuResourcePoolUtilization) / 2.0) + ((memoryResourcePoolUtilization) / 2.0); }
@Test public void testResourcePoolUtilization() { INimbus iNimbus = new INimbusTest(); Map<String, SupervisorDetails> supMap = genSupervisors(4, 4, 100, 1000); Double cpuGuarantee = 400.0; Double memoryGuarantee = 1000.0; Map<String, Map<String, Number>> resourceUserPool = userResourcePool( userRes("user1", cpuGuarantee, memoryGuarantee)); Config config = createClusterConfig(100, 200, 200, resourceUserPool); TopologyDetails topo1 = genTopology("topo-1", config, 1, 1, 2, 1, Time.currentTimeSecs() - 24, 9, "user1"); Topologies topologies = new Topologies(topo1); Cluster cluster = new Cluster(iNimbus, new ResourceMetrics(new StormMetricsRegistry()), supMap, new HashMap<>(), topologies, config); User user1 = new User("user1", toDouble(resourceUserPool.get("user1"))); WorkerSlot slot = cluster.getAvailableSlots().get(0); cluster.assign(slot, topo1.getId(), topo1.getExecutors()); Assert.assertEquals("check cpu resource guarantee", cpuGuarantee, user1.getCpuResourceGuaranteed(), 0.001); Assert.assertEquals("check memory resource guarantee", memoryGuarantee, user1.getMemoryResourceGuaranteed(), 0.001); Assert.assertEquals("check cpu resource pool utilization", ((100.0 * 3.0) / cpuGuarantee), user1.getCpuResourcePoolUtilization(cluster), 0.001); Assert.assertEquals("check memory resource pool utilization", ((200.0 + 200.0) * 3.0) / memoryGuarantee, user1.getMemoryResourcePoolUtilization(cluster), 0.001); } }
public double getResourcePoolAverageUtilization() { Double cpuResourcePoolUtilization = this.getCPUResourcePoolUtilization(); Double memoryResourcePoolUtilization = this.getMemoryResourcePoolUtilization(); if (cpuResourcePoolUtilization != null && memoryResourcePoolUtilization != null) { //cannot be (cpuResourcePoolUtilization + memoryResourcePoolUtilization)/2 //since memoryResourcePoolUtilization or cpuResourcePoolUtilization can be Double.MAX_VALUE //Should not return infinity in that case return ((cpuResourcePoolUtilization) / 2.0) + ((memoryResourcePoolUtilization) / 2.0); } return Double.MAX_VALUE; }
public String getDetailedInfo() { String ret = "\nUser: " + this.userId; ret += "\n - " + " Resource Pool: " + this.resourcePool; ret += "\n - " + " Running Queue: " + this.runningQueue + " size: " + this.runningQueue.size(); ret += "\n - " + " Pending Queue: " + this.pendingQueue + " size: " + this.pendingQueue.size(); ret += "\n - " + " Attempted Queue: " + this.attemptedQueue + " size: " + this.attemptedQueue.size(); ret += "\n - " + " Invalid Queue: " + this.invalidQueue + " size: " + this.invalidQueue.size(); ret += "\n - " + " CPU Used: " + this.getCPUResourceUsedByUser() + " CPU guaranteed: " + this.getCPUResourceGuaranteed(); ret += "\n - " + " Memory Used: " + this.getMemoryResourceUsedByUser() + " Memory guaranteed: " + this.getMemoryResourceGuaranteed(); ret += "\n - " + " % Resource Guarantee Used: \n -- CPU: " + this.getCPUResourcePoolUtilization() + " Memory: " + this.getMemoryResourcePoolUtilization() + " Average: " + this.getResourcePoolAverageUtilization(); return ret; }
if ((1.0 - submitter.getCPUResourcePoolUtilization()) >= cpuNeeded && (1.0 - submitter.getMemoryResourcePoolUtilization()) >= memoryNeeded) { if (evictUser != null) { TopologyDetails topologyEvict = evictUser.getRunningTopologyWithLowestPriority(); "\n(1.0 - submitter.getMemoryResourcePoolUtilization()) = {} >= memoryNeeded = {}" ,td, submitter, topologyEvict, evictUser, (1.0 - submitter.getCPUResourcePoolUtilization()) , cpuNeeded, (1.0 - submitter.getMemoryResourcePoolUtilization()), memoryNeeded); evictTopology(topologyEvict); return true;