From 209cd20548a469cb3ddb8d2cc1a50f19677a7561 Mon Sep 17 00:00:00 2001 From: Kevin Klues Date: Wed, 24 Nov 2021 00:20:21 +0000 Subject: [PATCH] Fix unit tests following bug fix in CPUManager for map functions (2/2) Now that the algorithm for balancing CPU distributions across NUMA nodes is correct, this test actually behaves differently for the "packed" vs. "distributed" allocation algorithms (as it should). In the "packed" case we need to ensure that CPUs are allocated such that they are packed onto cores. Since one CPU is already allocated from a core on NUMA node 0, we want the next CPU to be its hyperthreaded pair (even though the first available CPU id is on Socket 1). In the "distributed" case, however, we want to ensure CPUs are allocated such that we have an balanced distribution of CPUs across all NUMA nodes. This points to allocating from Socket 1 if the only other CPU allocated has been done on Socket 0. To allow CPUs allocations to be packed onto full cores, one can allocate them from the "distributed" algorithm with a 'cpuGroupSize' equal to the number of hypthreads per core (in this case 2). We added an explicit test case for this, demonstrating that we get the same result as the "packed" algorithm does, even though the "distributed" algorithm is in use. Signed-off-by: Kevin Klues --- .../cm/cpumanager/cpu_assignment_test.go | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go b/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go index e57351d4890..b1cb9f7878a 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go +++ b/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go @@ -573,14 +573,6 @@ func commonTakeByTopologyTestCases(t *testing.T) []takeByTopologyTestCase { "", cpuset.NewCPUSet(2, 6), }, - { - "take one cpu from dual socket with HT - core from Socket 0", - topoDualSocketHT, - cpuset.NewCPUSet(1, 2, 3, 4, 5, 7, 8, 9, 10, 11), - 1, - "", - cpuset.NewCPUSet(2), - }, { "take a socket of cpus from dual socket with HT", topoDualSocketHT, @@ -635,6 +627,14 @@ func commonTakeByTopologyTestCases(t *testing.T) []takeByTopologyTestCase { func TestTakeByTopologyNUMAPacked(t *testing.T) { testCases := commonTakeByTopologyTestCases(t) testCases = append(testCases, []takeByTopologyTestCase{ + { + "take one cpu from dual socket with HT - core from Socket 0", + topoDualSocketHT, + cpuset.NewCPUSet(1, 2, 3, 4, 5, 7, 8, 9, 10, 11), + 1, + "", + cpuset.NewCPUSet(2), + }, { "allocate 4 full cores with 3 coming from the first NUMA node (filling it up) and 1 coming from the second NUMA node", topoDualSocketHT, @@ -764,6 +764,24 @@ func commonTakeByTopologyExtendedTestCases(t *testing.T) []takeByTopologyExtende func TestTakeByTopologyNUMADistributed(t *testing.T) { testCases := commonTakeByTopologyExtendedTestCases(t) testCases = append(testCases, []takeByTopologyExtendedTestCase{ + { + "take one cpu from dual socket with HT - core from Socket 0", + topoDualSocketHT, + cpuset.NewCPUSet(1, 2, 3, 4, 5, 7, 8, 9, 10, 11), + 1, + 1, + "", + cpuset.NewCPUSet(1), + }, + { + "take one cpu from dual socket with HT - core from Socket 0 - cpuGroupSize 2", + topoDualSocketHT, + cpuset.NewCPUSet(1, 2, 3, 4, 5, 7, 8, 9, 10, 11), + 1, + 2, + "", + cpuset.NewCPUSet(2), + }, { "allocate 13 full cores distributed across the first 2 NUMA nodes", topoDualSocketMultiNumaPerSocketHT,