Skip to content

Commit 39726b1

Browse files
donggangcjTal-or
authored andcommitted
fix: fix state validate error after memorymanager with static policy start
(cherry picked from commit b91951f)
1 parent 0a124e2 commit 39726b1

File tree

2 files changed

+147
-2
lines changed

2 files changed

+147
-2
lines changed

pkg/kubelet/cm/memorymanager/policy_static.go

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package memorymanager
1818

1919
import (
2020
"fmt"
21-
"reflect"
2221
"sort"
2322

2423
cadvisorapi "github.com/google/cadvisor/info/v1"
@@ -682,10 +681,37 @@ func areMachineStatesEqual(ms1, ms2 state.NUMANodeMap) bool {
682681
return false
683682
}
684683

685-
if !reflect.DeepEqual(*memoryState1, *memoryState2) {
684+
if memoryState1.TotalMemSize != memoryState2.TotalMemSize {
686685
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
687686
return false
688687
}
688+
689+
if memoryState1.SystemReserved != memoryState2.SystemReserved {
690+
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
691+
return false
692+
}
693+
694+
if memoryState1.Allocatable != memoryState2.Allocatable {
695+
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
696+
return false
697+
}
698+
699+
totalFree1 := uint64(0)
700+
totalReserved1 := uint64(0)
701+
totalFree2 := uint64(0)
702+
totalReserved2 := uint64(0)
703+
for _, nodeId := range nodeState1.Cells {
704+
totalFree1 += ms1[nodeId].MemoryMap[resourceName].Free
705+
totalReserved1 += ms1[nodeId].MemoryMap[resourceName].Reserved
706+
totalFree2 += ms2[nodeId].MemoryMap[resourceName].Free
707+
totalReserved2 += ms2[nodeId].MemoryMap[resourceName].Reserved
708+
}
709+
710+
if totalFree1 != totalFree2 || totalReserved1 != totalReserved2 {
711+
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
712+
return false
713+
}
714+
689715
}
690716
}
691717
return true

pkg/kubelet/cm/memorymanager/policy_static_test.go

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,125 @@ func TestStaticPolicyStart(t *testing.T) {
10241024
},
10251025
},
10261026
},
1027+
{
1028+
description: "shoud equal",
1029+
expectedAssignments: state.ContainerMemoryAssignments{
1030+
"pod1": map[string][]state.Block{
1031+
"container1": {
1032+
{
1033+
NUMAAffinity: []int{0, 1},
1034+
Type: v1.ResourceMemory,
1035+
Size: 240 * mb,
1036+
},
1037+
},
1038+
},
1039+
"pod2": map[string][]state.Block{
1040+
"container2": {
1041+
{
1042+
NUMAAffinity: []int{0, 1},
1043+
Type: v1.ResourceMemory,
1044+
Size: 10 * mb,
1045+
},
1046+
},
1047+
},
1048+
},
1049+
assignments: state.ContainerMemoryAssignments{
1050+
"pod1": map[string][]state.Block{
1051+
"container1": {
1052+
{
1053+
NUMAAffinity: []int{0, 1},
1054+
Type: v1.ResourceMemory,
1055+
Size: 240 * mb,
1056+
},
1057+
},
1058+
},
1059+
"pod2": map[string][]state.Block{
1060+
"container2": {
1061+
{
1062+
NUMAAffinity: []int{0, 1},
1063+
Type: v1.ResourceMemory,
1064+
Size: 10 * mb,
1065+
},
1066+
},
1067+
},
1068+
},
1069+
expectedMachineState: state.NUMANodeMap{
1070+
0: &state.NUMANodeState{
1071+
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
1072+
v1.ResourceMemory: {
1073+
Allocatable: 220 * mb,
1074+
Free: 30 * mb,
1075+
Reserved: 190 * mb,
1076+
SystemReserved: 20 * mb,
1077+
TotalMemSize: 240 * mb,
1078+
},
1079+
},
1080+
Cells: []int{0, 1},
1081+
NumberOfAssignments: 2,
1082+
},
1083+
1: &state.NUMANodeState{
1084+
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
1085+
v1.ResourceMemory: {
1086+
Allocatable: 220 * mb,
1087+
Free: 160 * mb,
1088+
Reserved: 60 * mb,
1089+
SystemReserved: 20 * mb,
1090+
TotalMemSize: 240 * mb,
1091+
},
1092+
},
1093+
Cells: []int{0, 1},
1094+
NumberOfAssignments: 2,
1095+
},
1096+
},
1097+
machineState: state.NUMANodeMap{
1098+
0: &state.NUMANodeState{
1099+
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
1100+
v1.ResourceMemory: {
1101+
Allocatable: 220 * mb,
1102+
Free: 10 * mb,
1103+
Reserved: 210 * mb,
1104+
SystemReserved: 20 * mb,
1105+
TotalMemSize: 240 * mb,
1106+
},
1107+
},
1108+
Cells: []int{0, 1},
1109+
NumberOfAssignments: 2,
1110+
},
1111+
1: &state.NUMANodeState{
1112+
MemoryMap: map[v1.ResourceName]*state.MemoryTable{
1113+
v1.ResourceMemory: {
1114+
Allocatable: 220 * mb,
1115+
Free: 180 * mb,
1116+
Reserved: 40 * mb,
1117+
SystemReserved: 20 * mb,
1118+
TotalMemSize: 240 * mb,
1119+
},
1120+
},
1121+
Cells: []int{0, 1},
1122+
NumberOfAssignments: 2,
1123+
},
1124+
},
1125+
systemReserved: systemReservedMemory{
1126+
0: map[v1.ResourceName]uint64{
1127+
v1.ResourceMemory: 20 * mb,
1128+
},
1129+
1: map[v1.ResourceName]uint64{
1130+
v1.ResourceMemory: 20 * mb,
1131+
},
1132+
},
1133+
machineInfo: &cadvisorapi.MachineInfo{
1134+
Topology: []cadvisorapi.Node{
1135+
{
1136+
Id: 0,
1137+
Memory: 240 * mb,
1138+
},
1139+
{
1140+
Id: 1,
1141+
Memory: 240 * mb,
1142+
},
1143+
},
1144+
},
1145+
},
10271146
}
10281147

10291148
for _, testCase := range testCases {

0 commit comments

Comments
 (0)