ZONE_MOVABLE是内核中内存热插拔相关的重要概念之一。
之前从来没有弄明白过,在这里尝试理理思路。
相关内核配置选项
以下两个选项和movable_node相关:
- MOVABLE_NODE
- MEMORY_HOTREMOVE
获取ZONE_MOVABLE的分布
内核默认在日志中打印了MOVALBE ZONE的分布,只是如果没有开启的话,该信息为空。
dmesg | grep -A 5 "Movalbe zone start"
就可以获得该信息。
启用ZONE_MOVABLE的启动参数
内核在默认情况下不会有movable的区域,需要传入内核参数来启用。
这部分的工作集中在函数find_zone_movable_pfns_for_nodes()中。不过变态的是还有好几个内核参数来控制,下面将按照参数的优先级顺序来介绍。
movable_node
该功能从文档中看意思是能够将整个node都热拔,当然有点恐怖。
在这个阶段,我们看到这个参数的作用是按照BIOS/FW的信息作为MOVABLE ZONE的分界。如果BIOS/FW中标出某memblock是可热插拔的,则被划入MOVABLE ZONE。
kernelcore=mirror
该参数的作用是按照mirror的标志为来判断MOVABLE ZONE的分界。
具体什么意思,不清楚。
movablecore=nn[KMG] || kernel_core=nn[KMG]
这两个内核参数可以同时使用,但是只有经过计算后那个大的值起作用。对这两个参数意义的描述在文档memory-hotplug.txt
如果这两个参数的一个生效,那么会按照node数平均分配内存。
ZONE_MOVABLE是内存热插拔的关键概念,涉及内核配置如MOVABLE_NODE和MEMORY_HOTREMOVE。通过内核日志可以查看其分布,启用需要特定启动参数,如movable_node、kernelcore=mirror和movablecore=nn[KMG],这些参数影响内存区域的划分和热插拔行为。

6756

被折叠的 条评论
为什么被折叠?



