mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Add CPUManager tests for TopologyHint consumption
This commit is contained in:
parent
8278d1134c
commit
b3f4bed97f
@ -26,6 +26,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
|
||||
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/socketmask"
|
||||
)
|
||||
|
||||
type staticPolicyTest struct {
|
||||
@ -740,3 +741,93 @@ func TestStaticPolicyRemove(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTopologyAwareAllocateCPUs(t *testing.T) {
|
||||
testCases := []struct {
|
||||
description string
|
||||
topo *topology.CPUTopology
|
||||
stAssignments state.ContainerCPUAssignments
|
||||
stDefaultCPUSet cpuset.CPUSet
|
||||
numRequested int
|
||||
socketMask socketmask.SocketMask
|
||||
expCSet cpuset.CPUSet
|
||||
}{
|
||||
{
|
||||
description: "Request 2 CPUs, No SocketMask",
|
||||
topo: topoDualSocketHT,
|
||||
stAssignments: state.ContainerCPUAssignments{},
|
||||
stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
|
||||
numRequested: 2,
|
||||
socketMask: nil,
|
||||
expCSet: cpuset.NewCPUSet(0, 6),
|
||||
},
|
||||
{
|
||||
description: "Request 2 CPUs, SocketMask on Socket 0",
|
||||
topo: topoDualSocketHT,
|
||||
stAssignments: state.ContainerCPUAssignments{},
|
||||
stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
|
||||
numRequested: 2,
|
||||
socketMask: func() socketmask.SocketMask {
|
||||
mask, _ := socketmask.NewSocketMask(0)
|
||||
return mask
|
||||
}(),
|
||||
expCSet: cpuset.NewCPUSet(0, 6),
|
||||
},
|
||||
{
|
||||
description: "Request 2 CPUs, SocketMask on Socket 1",
|
||||
topo: topoDualSocketHT,
|
||||
stAssignments: state.ContainerCPUAssignments{},
|
||||
stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
|
||||
numRequested: 2,
|
||||
socketMask: func() socketmask.SocketMask {
|
||||
mask, _ := socketmask.NewSocketMask(1)
|
||||
return mask
|
||||
}(),
|
||||
expCSet: cpuset.NewCPUSet(1, 7),
|
||||
},
|
||||
{
|
||||
description: "Request 8 CPUs, SocketMask on Socket 0",
|
||||
topo: topoDualSocketHT,
|
||||
stAssignments: state.ContainerCPUAssignments{},
|
||||
stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
|
||||
numRequested: 8,
|
||||
socketMask: func() socketmask.SocketMask {
|
||||
mask, _ := socketmask.NewSocketMask(0)
|
||||
return mask
|
||||
}(),
|
||||
expCSet: cpuset.NewCPUSet(0, 6, 2, 8, 4, 10, 1, 7),
|
||||
},
|
||||
{
|
||||
description: "Request 8 CPUs, SocketMask on Socket 1",
|
||||
topo: topoDualSocketHT,
|
||||
stAssignments: state.ContainerCPUAssignments{},
|
||||
stDefaultCPUSet: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),
|
||||
numRequested: 8,
|
||||
socketMask: func() socketmask.SocketMask {
|
||||
mask, _ := socketmask.NewSocketMask(1)
|
||||
return mask
|
||||
}(),
|
||||
expCSet: cpuset.NewCPUSet(1, 7, 3, 9, 5, 11, 0, 6),
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
policy := NewStaticPolicy(tc.topo, 0, topologymanager.NewFakeManager()).(*staticPolicy)
|
||||
st := &mockState{
|
||||
assignments: tc.stAssignments,
|
||||
defaultCPUSet: tc.stDefaultCPUSet,
|
||||
}
|
||||
policy.Start(st)
|
||||
|
||||
cset, err := policy.allocateCPUs(st, tc.numRequested, tc.socketMask)
|
||||
if err != nil {
|
||||
t.Errorf("StaticPolicy allocateCPUs() error (%v). expected CPUSet %v not error %v",
|
||||
tc.description, tc.expCSet, err)
|
||||
continue
|
||||
}
|
||||
|
||||
if !reflect.DeepEqual(tc.expCSet, cset) {
|
||||
t.Errorf("StaticPolicy allocateCPUs() error (%v). expected CPUSet %v but got %v",
|
||||
tc.description, tc.expCSet, cset)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user