diff --git a/free.1 b/free.1 index 1e8e7ef7..21cce28a 100644 --- a/free.1 +++ b/free.1 @@ -11,11 +11,30 @@ free \- Display amount of free and used memory in the system .SH DESCRIPTION .B free displays the total amount of free and used physical and swap memory in the -system, as well as the buffers used by the kernel. -The shared memory column represents either the MemShared value (2.4 series -kernels) or the Shmem value (2.6 series kernels and later) taken from the -/proc/meminfo file. The value is zero if none of the entries is exported -by the kernel. +system, as well as the buffers and caches used by the kernel. The +information is gathered by parsing /proc/meminfo. The displayed +columns are: +.TP +\fBtotal\fR +Total installed memory (MemTotal and SwapTotal in /proc/meminfo) +.TP +\fBused\fR +Used memory (calculated as total - free) +.TP +\fBfree\fR +Unused memory (MemFree and SwapFree in /proc/meminfo) +.TP +\fBshared\fR +Memory used (mostly) by tmpfs (Shmem in /proc/meminfo, available on +kernels 2.6.32, displayed as zero if not available) +.TP +\fBbuffers\fR +Memory used by kernel buffers (Buffers in /proc/meminfo) +.TP +\fBcached\fR +Memory used by the page cache (calculated as Cached - Shmem in +/proc/meminfo - the Cached value is actually the sum of page cache and +tmpfs memory) .SH OPTIONS .TP \fB\-b\fR, \fB\-\-bytes\fR diff --git a/proc/sysinfo.c b/proc/sysinfo.c index 1680cc4a..e07ca866 100644 --- a/proc/sysinfo.c +++ b/proc/sysinfo.c @@ -531,7 +531,6 @@ static int compare_mem_table_structs(const void *a, const void *b){ * * MemTotal: 61768 kB old * MemFree: 1436 kB old - * MemShared: 0 kB old (now always zero; not calculated) * Buffers: 1312 kB old * Cached: 20932 kB old * Active: 12464 kB new @@ -560,7 +559,7 @@ static int compare_mem_table_structs(const void *a, const void *b){ * Hugepagesize: 4096 kB 2.5.??+ */ -/* obsolete since 2.6.x, but reused for shmem in 2.6.32+ */ +/* Shmem in 2.6.32+ */ unsigned long kb_main_shared; /* old but still kicking -- the important stuff */ unsigned long kb_main_buffers; @@ -631,14 +630,13 @@ void meminfo(void){ {"LowTotal", &kb_low_total}, {"Mapped", &kb_mapped}, // kB version of vmstat nr_mapped {"MemFree", &kb_main_free}, // important - {"MemShared", &kb_main_shared}, // obsolete since kernel 2.6! (sharing the variable with Shmem replacement) {"MemTotal", &kb_main_total}, // important {"NFS_Unstable", &kb_nfs_unstable}, {"PageTables", &kb_pagetables}, // kB version of vmstat nr_page_table_pages {"ReverseMaps", &nr_reversemaps}, // same as vmstat nr_page_table_pages {"SReclaimable", &kb_swap_reclaimable}, // "swap reclaimable" (dentry and inode structures) {"SUnreclaim", &kb_swap_unreclaimable}, - {"Shmem", &kb_main_shared}, // kernel 2.6 and later (sharing the output variable with obsolete MemShared) + {"Shmem", &kb_main_shared}, // kernel 2.6.32 and later {"Slab", &kb_slab}, // kB version of vmstat nr_slab {"SwapCached", &kb_swap_cached}, {"SwapFree", &kb_swap_free}, // important @@ -684,6 +682,8 @@ nextline: } kb_swap_used = kb_swap_total - kb_swap_free; kb_main_used = kb_main_total - kb_main_free; + /* "Cached" includes "Shmem" - we want only the page cache here */ + kb_main_cached -= kb_main_shared; } /*****************************************************************/ diff --git a/proc/sysinfo.h b/proc/sysinfo.h index 1eb34727..22916319 100644 --- a/proc/sysinfo.h +++ b/proc/sysinfo.h @@ -20,8 +20,7 @@ extern int uptime (double *uptime_secs, double *idle_secs); extern unsigned long getbtime(void); extern void loadavg(double *av1, double *av5, double *av15); - -/* obsolete */ +/* Shmem in 2.6.32+ */ extern unsigned long kb_main_shared; /* old but still kicking -- the important stuff */ extern unsigned long kb_main_buffers; diff --git a/vmstat.8 b/vmstat.8 index 420d9f39..2782a427 100644 --- a/vmstat.8 +++ b/vmstat.8 @@ -102,7 +102,8 @@ b: The number of processes in uninterruptible sleep. swpd: the amount of virtual memory used. free: the amount of idle memory. buff: the amount of memory used as buffers. -cache: the amount of memory used as cache. +cache: the amount of memory used as cache (excluding tmpfs memory for +kernels 2.6.32+) inact: the amount of inactive memory. (\-a option) active: the amount of active memory. (\-a option) .fi