linux内存available,Linux free命令前后变化和available内存-Go语言中文社区

老版的free命令长成这个样子:

9dae5566e3361f3a0ccfb9b86c466a2c.png

较新版本的Ubuntun、CentOS等中的free命令是这个样子的:

d245fbe782c7b75b1dc1c9a76b208007.png

主要的变化是buff/cache被合并为一列,并且增加了available这一列。

available这一列的具体含义可以参见内核的这个commit:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773

天冷手冻,不详细解释和翻译了,具体直接看英文:

7f3c7869b1edfa11e11932568a2d0726.png

涉及到的代码改动如下:

diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt

index 22d89aa3..8533f5f 100644

--- a/Documentation/filesystems/proc.txt

+++ b/Documentation/filesystems/proc.txt

@@ -767,6 +767,7 @@ The "Locked" indicates whether the mapping is locked in memory or not.

MemTotal:     16344972 kB

MemFree:      13634064 kB

+MemAvailable: 14836172 kB

Buffers:          3656 kB

Cached:        1195708 kB

SwapCached:          0 kB

@@ -799,6 +800,14 @@ AnonHugePages:   49152 kB

MemTotal: Total usable ram (i.e. physical ram minus a few reserved

bits and the kernel binary code)

MemFree: The sum of LowFree+HighFree

+MemAvailable: An estimate of how much memory is available for starting new

+              applications, without swapping. Calculated from MemFree,

+              SReclaimable, the size of the file LRU lists, and the low

+              watermarks in each zone.

+              The estimate takes into account that the system needs some

+              page cache to function well, and that not all reclaimable

+              slab will be reclaimable, due to items being in use. The

+              impact of those factors will vary from system to system.

Buffers: Relatively temporary storage for raw disk blocks

shouldn't get tremendously large (20MB or so)

Cached: in-memory cache for files read from the disk (the

diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c

index a77d2b2..24270ec 100644

--- a/fs/proc/meminfo.c

+++ b/fs/proc/meminfo.c

@@ -26,7 +26,11 @@ static int meminfo_proc_show(struct seq_file *m, void *v)

unsigned long committed;

struct vmalloc_info vmi;

long cached;

+long available;

+unsigned long pagecache;

+unsigned long wmark_low = 0;

unsigned long pages[NR_LRU_LISTS];

+struct zone *zone;

int lru;

/*

@@ -47,12 +51,44 @@ static int meminfo_proc_show(struct seq_file *m, void *v)

for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++)

pages[lru] = global_page_state(NR_LRU_BASE + lru);

+for_each_zone(zone)

+wmark_low += zone->watermark[WMARK_LOW];

+

+/*

+ * Estimate the amount of memory available for userspace allocations,

+ * without causing swapping.

+ *

+ * Free memory cannot be taken below the low watermark, before the

+ * system starts swapping.

+ */

+available = i.freeram - wmark_low;

+

+/*

+ * Not all the page cache can be freed, otherwise the system will

+ * start swapping. Assume at least half of the page cache, or the

+ * low watermark worth of cache, needs to stay.

+ */

+pagecache = pages[LRU_ACTIVE_FILE] + pages[LRU_INACTIVE_FILE];

+pagecache -= min(pagecache / 2, wmark_low);

+available += pagecache;

+

+/*

+ * Part of the reclaimable swap consists of items that are in use,

+ * and cannot be freed. Cap this estimate at the low watermark.

+ */

+available += global_page_state(NR_SLAB_RECLAIMABLE) -

+     min(global_page_state(NR_SLAB_RECLAIMABLE) / 2, wmark_low);

+

+if (available < 0)

+available = 0;

+

/*

* Tagged format, for easy grepping and expansion.

*/

seq_printf(m,

"MemTotal:       %8lu kBn"

"MemFree:        %8lu kBn"

+"MemAvailable:   %8lu kBn"

"Buffers:        %8lu kBn"

"Cached:         %8lu kBn"

"SwapCached:     %8lu kBn"

@@ -105,6 +141,7 @@ static int meminfo_proc_show(struct seq_file *m, void *v)

,

K(i.totalram),

K(i.freeram),

+K(available),

K(i.bufferram),

K(cached),

K(total_swapcache_pages()),

另外,关于free命令里面的cached、buffers的区别,下面一幅图可以表达:

558fb464b619895c0ee7451cb67c9cf7.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值