@@ -46,7 +46,7 @@ Preceding v1.22, the `kubelet` must be started with the following flag:
46
46
47
47
in order to enable the Memory Manager feature.
48
48
49
- ## How Memory Manager Operates ?
49
+ ## How does the Memory Manager Operate ?
50
50
51
51
The Memory Manager currently offers the guaranteed memory (and hugepages) allocation
52
52
for Pods in Guaranteed QoS class.
@@ -57,7 +57,7 @@ prepare and deploy a `Guaranteed` pod as illustrated in the section
57
57
58
58
The Memory Manager is a Hint Provider, and it provides topology hints for
59
59
the Topology Manager which then aligns the requested resources according to these topology hints.
60
- It also enforces ` cgroups ` (i.e. ` cpuset.mems ` ) for pods.
60
+ On Linux, it also enforces ` cgroups ` (i.e. ` cpuset.mems ` ) for pods.
61
61
The complete flow diagram concerning pod admission and deployment process is illustrated in
62
62
[ Memory Manager KEP: Design Overview] [ 4 ] and below:
63
63
@@ -91,6 +91,14 @@ The problem has been solved as elaborated in
91
91
Also, reference [ Memory Manager KEP: Simulation - how the Memory Manager works? (by examples)] [ 1 ]
92
92
illustrates how the management of groups occurs.
93
93
94
+ ### Windows Support
95
+
96
+ {{< feature-state feature_gate_name="WindowsCPUAndMemoryAffinity" >}}
97
+
98
+ Windows support can be enabled via the ` WindowsCPUAndMemoryAffinity ` feature gate
99
+ and it requires support in the container runtime.
100
+ Only the [ BestEffort Policy] ( #policy-best-effort ) is supported on Windows.
101
+
94
102
## Memory Manager configuration
95
103
96
104
Other Managers should be first pre-configured. Next, the Memory Manager feature should be enabled
@@ -103,7 +111,8 @@ node stability (section [Reserved memory flag](#reserved-memory-flag)).
103
111
Memory Manager supports two policies. You can select a policy via a ` kubelet ` flag ` --memory-manager-policy ` :
104
112
105
113
* ` None ` (default)
106
- * ` Static `
114
+ * ` Static ` (Linux only)
115
+ * ` BestEffort ` (Windows Only)
107
116
108
117
#### None policy {#policy-none}
109
118
@@ -123,6 +132,24 @@ In the case of the `BestEffort` or `Burstable` pod, the `Static` Memory Manager
123
132
the default topology hint as there is no request for the guaranteed memory,
124
133
and does not reserve the memory in the internal [ NodeMap] [ 2 ] object.
125
134
135
+ This policy is only supported on Linux.
136
+
137
+ #### BestEffort policy {#policy-best-effort}
138
+
139
+ {{< feature-state feature_gate_name="WindowsCPUAndMemoryAffinity" >}}
140
+
141
+ This policy is only supported on Windows.
142
+
143
+ On Windows, NUMA node assignment works differently than Linux.
144
+ There is no mechanism to ensure that Memory access only comes from a specific NUMA node.
145
+ Instead the Windows scheduler will select the most optimal NUMA node based on the CPU(s) assignments.
146
+ It is possible that Windows might use other NUMA nodes if deemed optimal by the Windows scheduler.
147
+
148
+ The policy does track the amount of memory available and requested through the internal [ NodeMap] [ 2 ] .
149
+ The memory manager will make a best effort at ensuring that enough memory is available on
150
+ a NUMA node before making the assignment.
151
+ This means that in most cases memory assignment should function as expected.
152
+
126
153
### Reserved memory flag
127
154
128
155
The [ Node Allocatable] ( /docs/tasks/administer-cluster/reserve-compute-resources/ ) mechanism
0 commit comments