fix: fix state validate error after memorymanager with static policy start

(cherry picked from commit b91951f847d0b159c9d8ef32688cc96489ac1884)
This commit is contained in:
holder 2022-12-15 10:32:41 +08:00 committed by Talor Itzhak
parent 0a124e28b6
commit 39726b119f
2 changed files with 147 additions and 2 deletions

View File

@ -18,7 +18,6 @@ package memorymanager
import (
"fmt"
"reflect"
"sort"
cadvisorapi "github.com/google/cadvisor/info/v1"
@ -682,10 +681,37 @@ func areMachineStatesEqual(ms1, ms2 state.NUMANodeMap) bool {
return false
}
if !reflect.DeepEqual(*memoryState1, *memoryState2) {
if memoryState1.TotalMemSize != memoryState2.TotalMemSize {
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
return false
}
if memoryState1.SystemReserved != memoryState2.SystemReserved {
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
return false
}
if memoryState1.Allocatable != memoryState2.Allocatable {
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
return false
}
totalFree1 := uint64(0)
totalReserved1 := uint64(0)
totalFree2 := uint64(0)
totalReserved2 := uint64(0)
for _, nodeId := range nodeState1.Cells {
totalFree1 += ms1[nodeId].MemoryMap[resourceName].Free
totalReserved1 += ms1[nodeId].MemoryMap[resourceName].Reserved
totalFree2 += ms2[nodeId].MemoryMap[resourceName].Free
totalReserved2 += ms2[nodeId].MemoryMap[resourceName].Reserved
}
if totalFree1 != totalFree2 || totalReserved1 != totalReserved2 {
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
return false
}
}
}
return true

View File

@ -1024,6 +1024,125 @@ func TestStaticPolicyStart(t *testing.T) {
},
},
},
{
description: "shoud equal",
expectedAssignments: state.ContainerMemoryAssignments{
"pod1": map[string][]state.Block{
"container1": {
{
NUMAAffinity: []int{0, 1},
Type: v1.ResourceMemory,
Size: 240 * mb,
},
},
},
"pod2": map[string][]state.Block{
"container2": {
{
NUMAAffinity: []int{0, 1},
Type: v1.ResourceMemory,
Size: 10 * mb,
},
},
},
},
assignments: state.ContainerMemoryAssignments{
"pod1": map[string][]state.Block{
"container1": {
{
NUMAAffinity: []int{0, 1},
Type: v1.ResourceMemory,
Size: 240 * mb,
},
},
},
"pod2": map[string][]state.Block{
"container2": {
{
NUMAAffinity: []int{0, 1},
Type: v1.ResourceMemory,
Size: 10 * mb,
},
},
},
},
expectedMachineState: state.NUMANodeMap{
0: &state.NUMANodeState{
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
v1.ResourceMemory: {
Allocatable: 220 * mb,
Free: 30 * mb,
Reserved: 190 * mb,
SystemReserved: 20 * mb,
TotalMemSize: 240 * mb,
},
},
Cells: []int{0, 1},
NumberOfAssignments: 2,
},
1: &state.NUMANodeState{
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
v1.ResourceMemory: {
Allocatable: 220 * mb,
Free: 160 * mb,
Reserved: 60 * mb,
SystemReserved: 20 * mb,
TotalMemSize: 240 * mb,
},
},
Cells: []int{0, 1},
NumberOfAssignments: 2,
},
},
machineState: state.NUMANodeMap{
0: &state.NUMANodeState{
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
v1.ResourceMemory: {
Allocatable: 220 * mb,
Free: 10 * mb,
Reserved: 210 * mb,
SystemReserved: 20 * mb,
TotalMemSize: 240 * mb,
},
},
Cells: []int{0, 1},
NumberOfAssignments: 2,
},
1: &state.NUMANodeState{
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
v1.ResourceMemory: {
Allocatable: 220 * mb,
Free: 180 * mb,
Reserved: 40 * mb,
SystemReserved: 20 * mb,
TotalMemSize: 240 * mb,
},
},
Cells: []int{0, 1},
NumberOfAssignments: 2,
},
},
systemReserved: systemReservedMemory{
0: map[v1.ResourceName]uint64{
v1.ResourceMemory: 20 * mb,
},
1: map[v1.ResourceName]uint64{
v1.ResourceMemory: 20 * mb,
},
},
machineInfo: &cadvisorapi.MachineInfo{
Topology: []cadvisorapi.Node{
{
Id: 0,
Memory: 240 * mb,
},
{
Id: 1,
Memory: 240 * mb,
},
},
},
},
}
for _, testCase := range testCases {