From a048e3fe645a7dc4d5bbef182fb3439ebecefbfc Mon Sep 17 00:00:00 2001 From: windsonsea Date: Thu, 12 Dec 2024 09:54:11 +0800 Subject: [PATCH] [zh] Sync administer-cluster/memory-manager.md --- .../windows-cpu-and-memory-affinity.md | 22 +++++ .../administer-cluster/memory-manager.md | 98 +++++++++++++++---- 2 files changed, 102 insertions(+), 18 deletions(-) create mode 100644 content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/windows-cpu-and-memory-affinity.md diff --git a/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/windows-cpu-and-memory-affinity.md b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/windows-cpu-and-memory-affinity.md new file mode 100644 index 0000000000..bab01521c8 --- /dev/null +++ b/content/zh-cn/docs/reference/command-line-tools-reference/feature-gates/windows-cpu-and-memory-affinity.md @@ -0,0 +1,22 @@ +--- +title: WindowsCPUAndMemoryAffinity +content_type: feature_gate + +_build: + list: never + render: false + +stages: + - stage: alpha + defaultValue: false + fromVersion: "1.32" +--- + + +使用 [CPUManager](/zh-cn/docs/tasks/administer-cluster/cpu-management-policies/#windows-support)、 +[MemoryManager](/zh-cn/docs/tasks/administer-cluster/memory-manager/#windows-support) +和拓扑管理器,为 Windows 节点提供 CPU 和内存亲和性支持。 diff --git a/content/zh-cn/docs/tasks/administer-cluster/memory-manager.md b/content/zh-cn/docs/tasks/administer-cluster/memory-manager.md index 9c8d814a45..1d5c7a5849 100644 --- a/content/zh-cn/docs/tasks/administer-cluster/memory-manager.md +++ b/content/zh-cn/docs/tasks/administer-cluster/memory-manager.md @@ -1,7 +1,7 @@ --- title: 使用 NUMA 感知的内存管理器 content_type: task -min-kubernetes-server-version: v1.21 +min-kubernetes-server-version: v1.32 weight: 410 --- @@ -13,7 +13,7 @@ reviewers: - derekwaynecarr content_type: task -min-kubernetes-server-version: v1.21 +min-kubernetes-server-version: v1.32 weight: 410 --> @@ -64,8 +64,8 @@ To align memory resources with other requested resources in a Pod spec: - CPU 管理器应该被启用,并且在节点(Node)上要配置合适的 CPU 管理器策略, 参见[控制 CPU 管理策略](/zh-cn/docs/tasks/administer-cluster/cpu-management-policies/); -- 拓扑管理器要被启用,并且要在节点上配置合适的拓扑管理器策略,参见 - [控制拓扑管理器策略](/zh-cn/docs/tasks/administer-cluster/topology-manager/)。 +- 拓扑管理器要被启用,并且要在节点上配置合适的拓扑管理器策略, + 参见[控制拓扑管理器策略](/zh-cn/docs/tasks/administer-cluster/topology-manager/)。 -## 内存管理器如何运作? +## 内存管理器如何运作? {#how-does-the-memory-manager-operate} 内存管理器目前为 Guaranteed QoS 类中的 Pod 提供可保证的内存(和大页面)分配能力。 若要立即将内存管理器启用,可参照[内存管理器配置](#memory-manager-configuration)节中的指南, -之后按[将 Pod 放入 Guaranteed QoS 类](#placing-a-pod-in-the-guaranteed-qos-class) -节中所展示的,准备并部署一个 `Guaranteed` Pod。 +之后按[将 Pod 放入 Guaranteed QoS 类](#placing-a-pod-in-the-guaranteed-qos-class)节中所展示的, +准备并部署一个 `Guaranteed` Pod。 内存管理器是一个提示驱动组件(Hint Provider),负责为拓扑管理器提供拓扑提示, 后者根据这些拓扑提示对所请求的资源执行对齐操作。 -内存管理器也会为 Pods 应用 `cgroups` 设置(即 `cpuset.mems`)。 +在 Linux 上,内存管理器也会为 Pod 应用 `cgroups` 设置(即 `cpuset.mems`)。 与 Pod 准入和部署流程相关的完整流程图在[Memory Manager KEP: Design Overview][4], 下面也有说明。 @@ -183,6 +183,21 @@ NUMA 节点的分组,从而扩展内存容量。解决这个问题的详细描 中。同时,关于 NUMA 分组是如何管理的,你还可以参考文档 [Memory Manager KEP: Simulation - how the Memory Manager works? (by examples)][1]。 + +### Windows 支持 {#windows-support} + +{{< feature-state feature_gate_name="WindowsCPUAndMemoryAffinity" >}} + + +Windows 支持可以通过 `WindowsCPUAndMemoryAffinity` 特性门控来启用, +并且需要容器运行时的支持。在 Windows 上,仅支持 [BestEffort 策略](#policy-best-effort)。 + @@ -208,13 +223,15 @@ node stability (section [Reserved memory flag](#reserved-memory-flag)). Memory Manager supports two policies. You can select a policy via a `kubelet` flag `--memory-manager-policy`: * `None` (default) -* `Static` +* `Static` (Linux only) +* `BestEffort` (Windows Only) --> 内存管理器支持两种策略。你可以通过 `kubelet` 标志 `--memory-manager-policy` 来选择一种策略: -* `None` (默认) -* `Static` +* `None`(默认) +* `Static`(仅 Linux) +* `BestEffort`(仅 Windows) +#### BestEffort 策略 {#policy-best-effort} + +{{< feature-state feature_gate_name="WindowsCPUAndMemoryAffinity" >}} + + +此策略仅 Windows 上支持。 + +在 Windows 上,NUMA 节点分配方式与 Linux 上不同。 +没有机制确保内存访问仅来自特定的 NUMA 节点。 +相反,Windows 调度器将基于 CPU 的分配来选择最优的 NUMA 节点。 +如果 Windows 调度器认为其他 NUMA 节点更优,Windows 可能会使用其他节点。 + + +此策略会通过内部的 [NodeMap][2] 跟踪可用和请求的内存量。 +内存管理器将尽力确保在进行分配之前,NUMA 节点上有足够的内存可用。 +这意味着在大多数情况下,内存分配的工作模式是符合预期的。 + @@ -431,22 +480,35 @@ Here is an example of a correct configuration: 下面是一个正确配置的示例: ```shell ---feature-gates=MemoryManager=true --kube-reserved=cpu=4,memory=4Gi --system-reserved=cpu=1,memory=1Gi --memory-manager-policy=Static --reserved-memory '0:memory=3Gi;1:memory=2148Mi' ``` + +在 Kubernetes 1.32 之前,你还需要添加: + +```shell +--feature-gates=MemoryManager=true +``` + 我们对上面的配置做一个检查: 1. `kube-reserved + system-reserved + eviction-hard(default) = reserved-memory(0) + reserved-memory(1)` 1. `4GiB + 1GiB + 100MiB = 3GiB + 2148MiB` 1. `5120MiB + 100MiB = 3072MiB + 2148MiB` -1. `5220MiB = 5220MiB` (这是对的) +1. `5220MiB = 5220MiB`(这是对的) -## 将 Pod 放入 Guaranteed QoS 类 {#placing-a-pod-in-the-guaranteed-qos-class} +## 将 Pod 放入 Guaranteed QoS 类 {#placing-a-pod-in-the-guaranteed-qos-class} 若所选择的策略不是 `None`,则内存管理器会辨识处于 `Guaranteed` QoS 类中的 Pod。 内存管理器为每个 `Guaranteed` Pod 向拓扑管理器提供拓扑提示信息。 @@ -535,7 +597,7 @@ became rejected at a node: - Pod 状态 - 可表明拓扑亲和性错误 - 系统日志 - 包含用来调试的有价值的信息,例如,关于所生成的提示信息 - 状态文件 - 其中包含内存管理器内部状态的转储(包含[节点映射和内存映射][2]) -- 从 v1.22 开始,[设备插件资源 API](#device-plugin-resource-api) +- 从 v1.22 开始,[设备插件资源 API](#device-plugin-resource-api) 可以用来检索关于为容器预留的内存的信息 例如,NUMA 分组中空闲的“常规”内存的总量可以通过将分组内所有 NUMA -节点上空闲内存加和来计算,即将 NUMA 节点 `0` 和 NUMA 节点 `1` 的 `"memory"` 节 +节点上空闲内存加和来计算,即将 NUMA 节点 `0` 和 NUMA 节点 `1` 的 `"memory"` 节 (分别是 `"free":0` 和 `"free": 103739236352`)相加,得到此分组中空闲的“常规” 内存总量为 `0 + 103739236352` 字节。