From ba9ab333c8b7dca5252e604837914293dc232732 Mon Sep 17 00:00:00 2001 From: Jim Gauld Date: Fri, 11 Feb 2022 11:06:35 -0500 Subject: [PATCH] kubelet: sort isolcpus allocation when SMT enabled The existing device manager code returns CPUs as devices in unsorted order. This numerically sorts isolcpus allocations when SMT/HT is enabled on the host. This logs SMT pairs, singletons, and algorithm order details to make the algorithm understandable. Signed-off-by: Jim Gauld --- pkg/kubelet/cm/devicemanager/manager.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/cm/devicemanager/manager.go b/pkg/kubelet/cm/devicemanager/manager.go index 609da8ed86b..a4b247714f7 100644 --- a/pkg/kubelet/cm/devicemanager/manager.go +++ b/pkg/kubelet/cm/devicemanager/manager.go @@ -686,7 +686,16 @@ func order_devices_by_sibling(devices sets.String, needed int) ([]string, error) return cpu_lst[0] } } + //Make post-analysis of selection algorithm obvious by numerical sorting + //the available isolated cpu_id. + cpu_ids := make([]int, 0, int(devices.Len())) for cpu_id := range devices { + cpu_id_, _ := strconv.Atoi(cpu_id) + cpu_ids = append(cpu_ids, cpu_id_) + } + sort.Ints(cpu_ids) + for _, _cpu_id := range cpu_ids { + cpu_id := strconv.Itoa(_cpu_id) // If we've already found cpu_id as a sibling, skip it. if _, ok := _iterated_cpu[cpu_id]; ok { continue @@ -728,7 +737,9 @@ func order_devices_by_sibling(devices sets.String, needed int) ([]string, error) } } } - //klog.Infof("needed=%d ordered_cpu_list=%v", needed, dev_lst) + //This algorithm will get some attention. Show minimal details. + klog.Infof("order_devices_by_sibling: needed=%d, smtpairs=%v, singletons=%v, order=%v", + needed, sibling_lst, single_lst, dev_lst) return dev_lst, nil } func smt_enabled() bool { -- 2.25.1