这两天研究memory zone的水位问题涉及到两个参数分别是/proc/sys/vm/extra_free_kbytes以及min_free_kbytes(在kernel-4.4)。
而通过代码发现min_free_kbytes这个值由normal zone下的managed pages决定。
先说总的关系:
spanned:表示当前zone所包含的所有的pages
present:表示当前zone在去掉第一阶段kernel reserve的内存之后剩下的pages。
managed:表示当前zone去掉初始化完成以后所有的kernel reserve的内存剩下的pages。
其中min_free_kbytes由normal zone去掉第一阶段初始化完成后的kernel reserve的内存后所剩余的pages来计算得出min_free_kbytes
int __meminit init_per_zone_wmark_min(void)
{
unsigned long lowmem_kbytes;
int new_min_free_kbytes;
lowmem_kbytes = nr_free_buffer_pages() * (PAGE_SIZE >> 10);-------------(1)
new_min_free_kbytes = int_sqrt(lowmem_kbytes * 16);-------------(2)
if (new_min_free_kbytes > user_min_free_kbytes) {
min_free_kbytes = new_min_free_kbytes;-------------------(3)
if (min_free_kbytes < 128)
min_free_kbytes = 128;
if (min_free