From d0ebeefbc40e30a96ec9b788353ff6969719fdd9 Mon Sep 17 00:00:00 2001 From: "Bobby (Babak) Salamat" Date: Mon, 11 Feb 2019 13:37:30 -0800 Subject: [PATCH] Use runtime.NumCPU() instead of a fixed value for parallel scheduler threads. --- pkg/scheduler/algorithm/predicates/metadata.go | 5 +++-- pkg/scheduler/algorithm/priorities/interpod_affinity.go | 3 ++- pkg/scheduler/core/generic_scheduler.go | 7 ++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/pkg/scheduler/algorithm/predicates/metadata.go b/pkg/scheduler/algorithm/predicates/metadata.go index 99baed71ab..8e27d4f721 100644 --- a/pkg/scheduler/algorithm/predicates/metadata.go +++ b/pkg/scheduler/algorithm/predicates/metadata.go @@ -19,6 +19,7 @@ package predicates import ( "context" "fmt" + "runtime" "sync" "k8s.io/klog" @@ -415,7 +416,7 @@ func getTPMapMatchingExistingAntiAffinity(pod *v1.Pod, nodeInfoMap map[string]*s appendTopologyPairsMaps(existingPodTopologyMaps) } } - workqueue.ParallelizeUntil(context.TODO(), 16, len(allNodeNames), processNode) + workqueue.ParallelizeUntil(context.TODO(), runtime.NumCPU(), len(allNodeNames), processNode) return topologyMaps, firstError } @@ -503,7 +504,7 @@ func getTPMapMatchingIncomingAffinityAntiAffinity(pod *v1.Pod, nodeInfoMap map[s appendResult(node.Name, nodeTopologyPairsAffinityPodsMaps, nodeTopologyPairsAntiAffinityPodsMaps) } } - workqueue.ParallelizeUntil(context.TODO(), 16, len(allNodeNames), processNode) + workqueue.ParallelizeUntil(context.TODO(), runtime.NumCPU(), len(allNodeNames), processNode) return topologyPairsAffinityPodsMaps, topologyPairsAntiAffinityPodsMaps, firstError } diff --git a/pkg/scheduler/algorithm/priorities/interpod_affinity.go b/pkg/scheduler/algorithm/priorities/interpod_affinity.go index 62540a5941..24af001ffa 100644 --- a/pkg/scheduler/algorithm/priorities/interpod_affinity.go +++ b/pkg/scheduler/algorithm/priorities/interpod_affinity.go @@ -18,6 +18,7 @@ package priorities import ( "context" + "runtime" "sync" "k8s.io/api/core/v1" @@ -211,7 +212,7 @@ func (ipa *InterPodAffinity) CalculateInterPodAffinityPriority(pod *v1.Pod, node } } } - workqueue.ParallelizeUntil(context.TODO(), 16, len(allNodeNames), processNode) + workqueue.ParallelizeUntil(context.TODO(), runtime.NumCPU(), len(allNodeNames), processNode) if pm.firstError != nil { return nil, pm.firstError } diff --git a/pkg/scheduler/core/generic_scheduler.go b/pkg/scheduler/core/generic_scheduler.go index 59a4d40179..e726060214 100644 --- a/pkg/scheduler/core/generic_scheduler.go +++ b/pkg/scheduler/core/generic_scheduler.go @@ -20,6 +20,7 @@ import ( "context" "fmt" "math" + "runtime" "sort" "strings" "sync" @@ -487,7 +488,7 @@ func (g *genericScheduler) findNodesThatFit(pod *v1.Pod, nodes []*v1.Node) ([]*v // Stops searching for more nodes once the configured number of feasible nodes // are found. - workqueue.ParallelizeUntil(ctx, 16, int(allNodes), checkNode) + workqueue.ParallelizeUntil(ctx, runtime.NumCPU(), int(allNodes), checkNode) filtered = filtered[:filteredLen] if len(errs) > 0 { @@ -693,7 +694,7 @@ func PrioritizeNodes( } } - workqueue.ParallelizeUntil(context.TODO(), 16, len(nodes), func(index int) { + workqueue.ParallelizeUntil(context.TODO(), runtime.NumCPU(), len(nodes), func(index int) { nodeInfo := nodeNameToInfo[nodes[index].Name] for i := range priorityConfigs { if priorityConfigs[i].Function != nil { @@ -941,7 +942,7 @@ func selectNodesForPreemption(pod *v1.Pod, resultLock.Unlock() } } - workqueue.ParallelizeUntil(context.TODO(), 16, len(potentialNodes), checkNode) + workqueue.ParallelizeUntil(context.TODO(), runtime.NumCPU(), len(potentialNodes), checkNode) return nodeToVictims, nil }