public SimulatedUser(User other, ISchedulingState cluster) { tds.addAll(cluster.getTopologies().getTopologiesOwnedBy(other.getId())); Collections.sort(tds, new TopologyByPriorityAndSubmissionTimeComparator()); Double guaranteedCpu = other.getCpuResourceGuaranteed(); if (guaranteedCpu == null) { guaranteedCpu = 0.0; } this.guaranteedCpu = guaranteedCpu; Double guaranteedMemory = other.getMemoryResourceGuaranteed(); if (guaranteedMemory == null) { guaranteedMemory = 0.0; } this.guaranteedMemory = guaranteedMemory; }
@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 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; }
public User getNextUser() { Double least = Double.POSITIVE_INFINITY; User ret = null; for (User user : this.userMap.values()) { if (user.hasTopologyNeedSchedule()) { Double userResourcePoolAverageUtilization = user.getResourcePoolAverageUtilization(); if (least > userResourcePoolAverageUtilization) { ret = user; least = userResourcePoolAverageUtilization; } // if ResourcePoolAverageUtilization is equal to the user that is being compared else if (Math.abs(least - userResourcePoolAverageUtilization) < 0.0001) { double currentCpuPercentage = ret.getCPUResourceGuaranteed() / this.cluster.getClusterTotalCPUResource(); double currentMemoryPercentage = ret.getMemoryResourceGuaranteed() / this.cluster.getClusterTotalMemoryResource(); double currentAvgPercentage = (currentCpuPercentage + currentMemoryPercentage) / 2.0; double userCpuPercentage = user.getCPUResourceGuaranteed() / this.cluster.getClusterTotalCPUResource(); double userMemoryPercentage = user.getMemoryResourceGuaranteed() / this.cluster.getClusterTotalMemoryResource(); double userAvgPercentage = (userCpuPercentage + userMemoryPercentage) / 2.0; if (userAvgPercentage > currentAvgPercentage) { ret = user; least = userResourcePoolAverageUtilization; } } } } return ret; } }
LOG.debug("attempting to make space for topo {} from user {}", td.getName(), td.getTopologySubmitter()); User submitter = this.userMap.get(td.getTopologySubmitter()); if (submitter.getCPUResourceGuaranteed() == null || submitter.getMemoryResourceGuaranteed() == null || submitter.getCPUResourceGuaranteed() == 0.0 || submitter.getMemoryResourceGuaranteed() == 0.0) { return false; double memoryNeeded = (td.getTotalRequestedMemOffHeap() + td.getTotalRequestedMemOnHeap()) / submitter.getMemoryResourceGuaranteed();