暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux中"available"内存的计算

术道经纬 2021-04-11
1964

在Linux的"free"命令的输出中,有一项是"available"(对应"/proc/meminfo"中的"MemAvailable"),它是对启动一个新应用的“可使用内存”的一个估算。在一次实验中,我偶然发现了它出现的变化。


这篇文章介绍过"watermark_scale_factor",它的默认值是10,当我把它调到1000时,除了"available"这一项产生了巨大的变化,其他几项的数据一点变化都没有:

真的是由于设置watermark的参数引起的吗?我试着把它改回去:

看来还真是,但这是为什么呢?这得从"available"内存的计算方法说起,其对应的函数实现是si_mem_available():

long si_mem_available(void){
// lowmem reserve
available
= global_zone_page_state(NR_FREE_PAGES) - totalreserve_pages;

// zone watermark
for_each_zone(zone)
wmark_low
+= low_wmark_pages(zone);

// page cache
pagecache
= pages[LRU_ACTIVE_FILE] + pages[LRU_INACTIVE_FILE];
pagecache
-= min(pagecache / 2, wmark_low);
available
+= pagecache;

reclaimable
= global_node_page_state(NR_SLAB_RECLAIMABLE) +
global_node_page_state(NR_KERNEL_MISC_RECLAIMABLE);

available
+= reclaimable - min(reclaimable / 2, wmark_low);

return available;

}

文章转载自术道经纬,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论