in perf-tools/framework/node_analyzer.go [130:152]
func (na *NodeAnalyzer) GetNodeResourceDistribution(tasksDistribution [][]*TaskStatus,
resourceName string) [10][]int {
// init node resources, key(string): <NodeID>, value([]int64): <CapacityResourceValue>, <AllocatedResourceValue>
nodeResources := make(map[string][]int64)
for nodeID, nodeInfo := range na.allocatableNodes {
nodeResources[nodeID] = []int64{int64(nodeInfo.Capacity.Resources[resourceName]),
int64(nodeInfo.AllocatedResource.GetResource().Resources[resourceName])}
}
// statistic the number of nodes in 10 buckets with different resource utilization levels
// ([0%,10%), [10%,20%), ..., [90%,100%]) in every second
var buckets [10][]int
for _, tasksInCurSecond := range tasksDistribution {
for _, taskStatus := range tasksInCurSecond {
nodeResources[taskStatus.NodeID][1] += int64(taskStatus.RequestResources.Resources[resourceName])
}
// calculate current distribution
bucketsInThisSecond := calculateResourceDistribution(nodeResources)
for level, num := range bucketsInThisSecond {
buckets[level] = append(buckets[level], num)
}
}
return buckets
}