searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

free命令中available值的计算方式

2023-08-28 08:23:15
16
0

我们通常会使用free命令,来查看当前内存的使用情况,但是其中有一个available值,对其计算方式及代表意义不太清晰,今天来分析下。

查看free命令的定义函数,可知available在代码中代表值为kb_main_available。

通过代码分析,可知kb_main_available的计算及获取,是在meminfo函数中进行的。

分析meminfo函数,可知该值是取自/proc/meminfo中的MemAvailable。

分析内核代码,可知该值是通过si_mem_available函数计算出来的。

下面分析si_mem_available函数。

下面按照图片中标记的段来分析代码的实现。

代码段1:统计各个LRU链表上面的页数目;

代码段2:累加各个zone上面low水位线的数目;

代码段3:available = free_pages - totalreserve;

代码段4:估算可以释放的pagecache占用的内存量,available += pagecache;

代码段5:估值可以回收的slab内存,available += slab_reclaimble;

代码段6:获取可以释放的内核使用内存kernel_reclaimable。

所以availble = free_pages - totalreserve + pagecache + slab_reclaimable + kernel_reclaimable;

该值是对可以使用内存的一个估算值,其中包含了内存回收的动作。

0条评论
0 / 1000
孙****鑫
6文章数
0粉丝数
孙****鑫
6 文章 | 0 粉丝
原创

free命令中available值的计算方式

2023-08-28 08:23:15
16
0

我们通常会使用free命令,来查看当前内存的使用情况,但是其中有一个available值,对其计算方式及代表意义不太清晰,今天来分析下。

查看free命令的定义函数,可知available在代码中代表值为kb_main_available。

通过代码分析,可知kb_main_available的计算及获取,是在meminfo函数中进行的。

分析meminfo函数,可知该值是取自/proc/meminfo中的MemAvailable。

分析内核代码,可知该值是通过si_mem_available函数计算出来的。

下面分析si_mem_available函数。

下面按照图片中标记的段来分析代码的实现。

代码段1:统计各个LRU链表上面的页数目;

代码段2:累加各个zone上面low水位线的数目;

代码段3:available = free_pages - totalreserve;

代码段4:估算可以释放的pagecache占用的内存量,available += pagecache;

代码段5:估值可以回收的slab内存,available += slab_reclaimble;

代码段6:获取可以释放的内核使用内存kernel_reclaimable。

所以availble = free_pages - totalreserve + pagecache + slab_reclaimable + kernel_reclaimable;

该值是对可以使用内存的一个估算值,其中包含了内存回收的动作。

文章来自个人专栏
基础架构中心-内核组
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
3
6