diff --git a/free.1 b/free.1 index 1b40f8d0..a2bac261 100644 --- a/free.1 +++ b/free.1 @@ -41,7 +41,7 @@ provided by the \fBcached\fR or \fBfree\fR fields, this field takes into account page cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use (MemAvailable in /proc/meminfo, available on -kernels 3.14, emulated on kernels 2.6.27+, displayed as zero if not available) +kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as \fBfree\fR) .SH OPTIONS .TP \fB\-b\fR, \fB\-\-bytes\fR diff --git a/proc/sysinfo.c b/proc/sysinfo.c index e493e794..c9b3241b 100644 --- a/proc/sysinfo.c +++ b/proc/sysinfo.c @@ -697,17 +697,21 @@ nextline: kb_main_used = kb_main_total - kb_main_free; /* zero? might need fallback for 2.6.27 <= kernel = 20627) { - vminfo(); - watermark_low = vm_min_free * 5 / 4; /* should be equal to sum of all 'low' fields in /proc/zoneinfo */ + if (!kb_main_available) { + if (linux_version_code < 20627) + kb_main_available = kb_main_free; + else { + vminfo(); + watermark_low = vm_min_free * 5 / 4; /* should be equal to sum of all 'low' fields in /proc/zoneinfo */ - mem_available = (signed long)vm_nr_free_pages + vm_nr_inactive_file + vm_nr_active_file - - MIN((vm_nr_inactive_file + vm_nr_active_file) / 2, watermark_low) - + vm_nr_slab_reclaimable - MIN(vm_nr_slab_reclaimable / 2, watermark_low) - - watermark_low; + mem_available = (signed long)vm_nr_free_pages + vm_nr_inactive_file + vm_nr_active_file + - MIN((vm_nr_inactive_file + vm_nr_active_file) / 2, watermark_low) + + vm_nr_slab_reclaimable - MIN(vm_nr_slab_reclaimable / 2, watermark_low) + - watermark_low; - if (mem_available < 0) mem_available = 0; - kb_main_available = (unsigned long)((unsigned long long)mem_available * page_bytes / 1024ull); + if (mem_available < 0) mem_available = 0; + kb_main_available = (unsigned long)((unsigned long long)mem_available * page_bytes / 1024ull); + } } } diff --git a/top/top.1 b/top/top.1 index 08096654..75f6ab51 100644 --- a/top/top.1 +++ b/top/top.1 @@ -482,8 +482,8 @@ The \fBavail\fR number on line 2 is an estimation of \*(MP available for starting new applications, without swapping. Unlike the \fBfree\fR field, it attempts to account for readily reclaimable page cache and memory slabs. -It is available on kernels 3.14, emulated on kernels 2.6.27+ and displayed -as zero otherwise. +It is available on kernels 3.14, emulated on kernels 2.6.27+, otherwise +the same as \fBfree\fR. In the alternate memory display modes, two abbreviated summary lines are shown consisting of these elements: