From f745298d79540ca1ced6434d6205d36bd8f039a7 Mon Sep 17 00:00:00 2001 From: peiminmin Date: Mon, 12 Apr 2021 00:28:06 +0800 Subject: [PATCH] add memory manager --- src/kubelet/cm/3-device_manager.md | 2 +- src/kubelet/cm/4-memory_manager.md | 99 ++++++++++++++++++ .../cm/image/device-plugin-overview.png | Bin 42714 -> 0 bytes 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/kubelet/cm/4-memory_manager.md delete mode 100644 src/kubelet/cm/image/device-plugin-overview.png diff --git a/src/kubelet/cm/3-device_manager.md b/src/kubelet/cm/3-device_manager.md index da0a812..6341f6c 100644 --- a/src/kubelet/cm/3-device_manager.md +++ b/src/kubelet/cm/3-device_manager.md @@ -97,7 +97,7 @@ Device Manager 模块为什么要记录checkpoint文件?主要是在Device Man ### RPC Server -![Device Manger 与 Device Plugin RPC通信](./image/device-plugin-overview.png) +![Device Manger 与 Device Plugin RPC通信](./image/8-device-plugin-overview.png) ```Golang service Registration { diff --git a/src/kubelet/cm/4-memory_manager.md b/src/kubelet/cm/4-memory_manager.md new file mode 100644 index 0000000..fbdcdfa --- /dev/null +++ b/src/kubelet/cm/4-memory_manager.md @@ -0,0 +1,99 @@ +# kubernetes庖丁解牛:kubelet篇 - Memory Manager + +>摘要: Memory Manager是kubernetes 1.21 新增的参与拓扑对齐的设备管理器。Memory Manager模块的对外接口和CPU Manager和Device Manage基本相同。因此Memory Manager在调用和使用上和CPU Manger、Device Manger是保持一致的。 + +## 什么是NUMA? + +现在计算机内存的使用方式都是SMP(Shared Memory MulptiProcessors,共享存储型多处理机模型)。SMP有三种模型:UMA(Uniform Memory Access,统一内存访问)、NUMA(Nonuniform Memory Access,非一致性内存分访问)和COMA(Cache Only Memory Architectur,只用告诉缓存的存储器结构)。现在我们最常听说的就是NUMA的方式了。 + +那么NUMA是怎么来的呢?在NUMA之前计算机使用的都是UMA的方式。 + +![uma 模型](./image/9-uma.drawio.png) + +在UMA模型中,所有CPU对内存的访问都要通过BUS,这样的好处是:物理内存可以被所有的CPU均匀共享,所有CPU对内存的访问时间延迟都是相同的。缺点是:所有访问都要走BUS,BUS成为日后系统扩展的瓶颈,CPU越多,CPU对于内存的访问性能损耗就会越高。 + +随着现代计算机的发展,CPU越来越多。UMA模型的弊端日益显露。为了解决这些问题,开始有了NUMA模型。 + +![numa 模型](./image/10-numa.drawio.png) + +在NUMA模型中,把CPU和临近的内存做成一个node,在node内,CPU可以通过集成内存控制器(IMC,类似BUS)访问内存。跨node的内存访问则需要通过QPI(Quick Path Interconnect)。QPI的延迟要高于IMC,由此CPU对于内存的反问有了远近之别。 + +## 我们是如何使用NUMA? + +有用过NUMA的同学都知道,绑numa的过程就是将进程固定到几个CPU thread上运行。为什么,我们固定了进程运行的CPU thread,就可以显著提升程序的性能。 + +这个问题的答案就藏在NUMA架构下,内存的分配方式上。在NUMA架构下,内存分配方式有四种模式: + +* --localalloc: 从当前node的内存中分配,如果当前node分配不出来了,才会从其他node上分配。local alloc 也是默认的内存分配策略。 +* --preferred=node: 优先从指定的node上分配内存,如果指定node分配不出来了,也可以从其他node上分配。 +* --membind=nodes: 只能从指定的一个或多个node 上分配内存,如果指定的node分配不出来,会触发进程OOM。 +* --interleaved=all: 使用轮询算法轮流的从不同的node上分配内存。 + + +假设我们现在有一个NUMA架构的计算机,其CPU架构如下所示: + +![numa 模型](./image/10-numa.drawio.png) + +当进程不指定NUMA节点运行时,那么在某个时间片,进程的线程有可能运行在CPU0-3上的任意一个thread上的。进程在CPU0/CPU2上运行时,开辟的内存就会在node0上获取。进程在CPU1/CPU3上运行时,开辟的内存就会在node1上获取。由此进程的内存会算乱的分布在多个NUMA节点上。这样带来的一个问题时,进程在运行时,有可能出现大量的跨NUMA节点的内存访问。 + +当进程启动时,使用numactrl --bindcpu=0 运行,则进程只会运行在CPU0/CPU2上。进程分配的内存大部分都会在node0上。这样就减少了跨NUMA节点的内存访问。 + +上面我们也提到过,通过QPI的内存延迟要远远高于IMC,公开的数据显示QPI的访问延迟是IMC的三倍。 + +## Memory Manger 分析 + +### 使用方式 + +* kubelet启动时必须为系统预留内存:--reserved-memory={numa-node=0, type=memory, limit=500MB}, {numa-node=1,type=memory, limit=100MB} + +* 必须显示开启Memory Manager的特性门:--feature-gates=MemoryManager=true +* 通过--memory-manager-policy参数可以指定Memory Manger的策略,目前支持none和static策略。 + * none策略: memory manager 不提供topology hints。 + * static策略: memory manger 将会为Guaranteed Pod提供topology hints。 + + + +### 原理介绍 + +>这里将会将社区的proposal的原理部分做介绍。大家如果有兴趣也可以研读社区[KEP-1769: Memory Manager +](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/1769-memory-manager) + +![memory-manager](./image/mm_tm_diagram.png) + +* kubelet 对pod做准入检查时,会调用Topology Manager的Admit()方法。 +* Topology Manager 之后会调用 MemoryManager的GetTopologyHints方法,获取MemoryManager的拓扑建议。 +* Topology Manger综合MemoryManger、CPUManager、DeviceManager的hints,得到besthint。 +* Topology Manger获取besthint后,会调用MemoryManger、CPUManager、DeviceManager的Allocate方法,使各模块为容器分配资源。 +* 当容器启动时,containerManager会在PreCreateContainer时,通过MemoryManger的GetMemoryNUMANodes方法获取用于分配容器内存的NUMA节点。更新到容器的cgroup config中。之后容器的内存就只能在指定的numa节点上分配。 + + +假设现在我们有3个numa node,每个node 是 11G的内存。kubelet 通过`--reserved-memory={numa-node=0, type=memory, limit=1G}, {numa-node=1,type=memory, limit=1G}`参数,在每个node上预留1G的内存。 + +**Step 1:** 当kubelet启动后,memory manger的 memory maps的结果如下所示。 +> memory maps 记录节点上每种内存(memory/hugepages)的分配情况。 + +![memory manager startup](./image/11-memory-manager-startup.drawio.png) + +**Step 2:** 我们在该节点上启动一个Guaranteed Pod,Pod A共申请15G内存。此时,由于单NUMA node最多只能分配除10G内存,为了能够给Guaranteed Pod分配出15G内存,memory manage 会讲node0和node1组成一个NUMA Group。 + + +![memory manager 15G Pod](./image/12-memory-manager-15G-pod.drawio.png) + + +> memory manager 要求numa group是正交的。如果一个node是某个group的成员,则该node不能是其他的group的成员;某个node没有和其他node组成group,则该node也可认为是一个单节点的group。 + + +**Step 3:** 当我们在节点上在启动一个5G内存的Guaranteed Pod B,此时memory Manager会建议优先在node 3上分配内存。 + +![memory manager 15+5G Pod](./image/13-memory-manager-15+5G-pod.drawio.png) + + +**Step 4:** 当我们在节点上在启动一个limit 5G内存的Besteffort Pod C,该pod就会利用node 1上剩下的5G的内存。其实在Besteffort Pod启动的时候memory manager其实是不工作的,即他不提供topology hints。我们只是认为所有的非Guaranteed Pod都运行在。memory manager没有分配出去的内存碎片上。 + +![memory manager 15+5+5G Pod](./image/14-memory-manager-15+5+5G-pod.drawio.png) + +**Step 4:** Pod A从节点上删除后,node 0 和 node 1 组成的NUMA Group就会解散。变成各自独立的NUMA node参与内存分配。 + +![memory manager 5+5G Pod](./image/15-memory-manager-5+5G-pod.drawio.png) + + diff --git a/src/kubelet/cm/image/device-plugin-overview.png b/src/kubelet/cm/image/device-plugin-overview.png deleted file mode 100644 index 4d3f90f8235cb50b159c57f09ce29a8a65af34f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42714 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 Qcp3unxbd+99s8gD0_cBiZ2$lO