summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Brzezinski <adrb@wp.pl>2013-07-23 20:33:00 +0200
committerJaromir Capik <jcapik@redhat.com>2013-09-09 16:54:00 +0200
commit13f20a48119894638a98b9a17a714704c69492d4 (patch)
treeee4fa61a8c652519c0b4447f508abd798df7a8a5
parent827fc0302ee7df3bb64a437b9e885fdcd64d6979 (diff)
downloadprocps-ng-13f20a48119894638a98b9a17a714704c69492d4.tar.gz
free: reusing 'shared' for Shmem
Previously the shared memory column was always zero for 2.6 series kernels (and later) due to the fact, that the value was taken from the MemShared entry that disappeared with 2.6 series kernels. Later a new Shmem entry appeared in the /proc/meminfo file and the 'shared' column now displays either the MemShared or the Shmem value (depending on their presence - the presence is mutually exclusive). If none of the two entries is exported by the kernel, then the column is zero.
-rw-r--r--free.17
-rw-r--r--proc/sysinfo.c6
2 files changed, 9 insertions, 4 deletions
diff --git a/free.1 b/free.1
index f7c2313..1e8e7ef 100644
--- a/free.1
+++ b/free.1
@@ -11,8 +11,11 @@ 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
-should be ignored; it is obsolete.
+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.
.SH OPTIONS
.TP
\fB\-b\fR, \fB\-\-bytes\fR
diff --git a/proc/sysinfo.c b/proc/sysinfo.c
index 15cdb83..9e3c9ec 100644
--- a/proc/sysinfo.c
+++ b/proc/sysinfo.c
@@ -548,6 +548,7 @@ static int compare_mem_table_structs(const void *a, const void *b){
* Dirty: 0 kB 2.5.41+
* Writeback: 0 kB 2.5.41+
* Mapped: 9792 kB 2.5.41+
+ * Shmem: 28 kB 2.6.32+
* Slab: 4564 kB 2.5.41+
* Committed_AS: 8440 kB 2.5.41+
* PageTables: 304 kB 2.5.41+
@@ -558,7 +559,7 @@ static int compare_mem_table_structs(const void *a, const void *b){
* Hugepagesize: 4096 kB 2.5.??+
*/
-/* obsolete */
+/* obsolete since 2.6.x, but reused for shmem in 2.6.32+ */
unsigned long kb_main_shared;
/* old but still kicking -- the important stuff */
unsigned long kb_main_buffers;
@@ -629,13 +630,14 @@ 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}, // important, but now gone!
+ {"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)
{"Slab", &kb_slab}, // kB version of vmstat nr_slab
{"SwapCached", &kb_swap_cached},
{"SwapFree", &kb_swap_free}, // important