Skip to content

Commit 3036d10

Browse files
authored
Merge pull request kubernetes#127074 from Tal-or/mm_fix_checkpoint_file_comparison
memorymanager: fix checkpoint file comparison
2 parents 6cb5ea5 + d64f34e commit 3036d10

File tree

2 files changed

+156
-3
lines changed

2 files changed

+156
-3
lines changed

pkg/kubelet/cm/memorymanager/policy_static.go

Lines changed: 37 additions & 3 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"
@@ -689,15 +688,50 @@ func areMachineStatesEqual(ms1, ms2 state.NUMANodeMap) bool {
689688
return false
690689
}
691690

692-
if !reflect.DeepEqual(*memoryState1, *memoryState2) {
693-
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
691+
if !areMemoryStatesEqual(memoryState1, memoryState2, nodeID, resourceName) {
692+
return false
693+
}
694+
695+
tmpState1 := state.MemoryTable{}
696+
tmpState2 := state.MemoryTable{}
697+
for _, nodeID := range nodeState1.Cells {
698+
tmpState1.Free += ms1[nodeID].MemoryMap[resourceName].Free
699+
tmpState1.Reserved += ms1[nodeID].MemoryMap[resourceName].Reserved
700+
tmpState2.Free += ms2[nodeID].MemoryMap[resourceName].Free
701+
tmpState2.Reserved += ms2[nodeID].MemoryMap[resourceName].Reserved
702+
}
703+
704+
if tmpState1.Free != tmpState2.Free {
705+
klog.InfoS("Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "field", "free", "free1", tmpState1.Free, "free2", tmpState2.Free, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
706+
return false
707+
}
708+
if tmpState1.Reserved != tmpState2.Reserved {
709+
klog.InfoS("Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "field", "reserved", "reserved1", tmpState1.Reserved, "reserved2", tmpState2.Reserved, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
694710
return false
695711
}
696712
}
697713
}
698714
return true
699715
}
700716

717+
func areMemoryStatesEqual(memoryState1, memoryState2 *state.MemoryTable, nodeID int, resourceName v1.ResourceName) bool {
718+
if memoryState1.TotalMemSize != memoryState2.TotalMemSize {
719+
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "field", "TotalMemSize", "TotalMemSize1", memoryState1.TotalMemSize, "TotalMemSize2", memoryState2.TotalMemSize, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
720+
return false
721+
}
722+
723+
if memoryState1.SystemReserved != memoryState2.SystemReserved {
724+
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "field", "SystemReserved", "SystemReserved1", memoryState1.SystemReserved, "SystemReserved2", memoryState2.SystemReserved, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
725+
return false
726+
}
727+
728+
if memoryState1.Allocatable != memoryState2.Allocatable {
729+
klog.ErrorS(nil, "Memory states for the NUMA node and resource are different", "node", nodeID, "resource", resourceName, "field", "Allocatable", "Allocatable1", memoryState1.Allocatable, "Allocatable2", memoryState2.Allocatable, "memoryState1", *memoryState1, "memoryState2", *memoryState2)
730+
return false
731+
}
732+
return true
733+
}
734+
701735
func (p *staticPolicy) getDefaultMachineState() state.NUMANodeMap {
702736
defaultMachineState := state.NUMANodeMap{}
703737
nodeHugepages := map[int]uint64{}

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: "should validate the totalFree and totalReserved size for a resource within a group",
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)