这篇翻译源于linux/Documentation/memeory-hotplug.txt。
内存的热插拔技术
这个文档主要介绍内存的热插拔技术的使用以及该技术的当前情况。因为该技术当期人然处于开发阶段,所以这个的内容经常会发生变化。
这个文档介绍的内容有一下几个方面:
1.介绍:
1.1 内存热插拔的目的;
1.2 内存热插拔的几个阶段;
1.3上、下线操作的内存单元;
2.内核的配置;
3.内存热插拔的sysfs文件;
4.物理内存的热添加阶段;
4.1 硬件(固件)的支持;
4.2 手动通知内存热添加事件;
5 .逻辑内存的热添加阶段;
5.1逻辑内存的状态;
5.2怎样去上线逻辑内存;
6.逻辑内存的移除;
6.1逻辑内存的下线和ZONO_MOVABLE
6.2 怎样去下线逻辑内存;
7.物理内存的移除;
8.内存热插拔事件的通知;
一.介绍:
1.1 内存热插拔的目的:
内存热插拔允许使用者去增加或减少内存的大小。这样做通常出于两种目的:
第一种:改变内存的大小;
第二种:从物理上安装或移除DIMMs或NUMA(not uniform memory access)节点。这样时为了交换DIMMS或NUMA节点,降低电量的消耗。
第一种主要应用于高度虚拟化环境之中。
第二种主要应用于支持电源管理的硬件。
设计内存热插拔就是为了以上两个目的。
1.2 内存热插拔的阶段:
内存热插拔分为两个阶段。
1) 物理内存热插拔阶段。
2)逻辑内存热插拔阶段。
第一个阶段目的是为了与硬件进行通信和构建或擦出热插拔内存需要的环境。基本上,对第二种目的来说这个阶段时必须的,
当内存被热插拔时,内核会识别新的内存,创建新的内存管理表和对新内存进行操作的sysfs文件。
如果固件支持操作系统中的新内存的连接通知,那么这个阶段会被自动的出发。ACPI可以通知系统中有新的内存加入这个事件。如果你的固件不支持的话,系统管理员可以使用“探索”操作。
逻辑内存热插拔阶段是为了去改变内存的状态,使内存对使用者可用或不可用。通过这个阶段,使用者所看到的内存的大小发生了变化。当一段内存可用时,内核把这段内存划分为许多可以自由使用的页。
在这个文档中,逻辑内存热插拔阶段被描述为上线、下线。
通过系统管理员对sysfs文件进行写操作,可以触发逻辑内存热插拔阶段。对这种热添加情况,在物理热插拔完成以后,逻辑热插拔阶段必须被执行通过手动操作。但是,如果你写了一个为内存热插拔的udev's hotplug scripts脚本的话,这些阶段可以被透明的执行。
1.3 上、下线操作的内存单元