- Subtracting Shmem from Cached (#1070736)
This commit is contained in:
parent
61adcde98d
commit
f3eed83b00
@ -4,7 +4,7 @@
|
||||
Summary: System and process monitoring utilities
|
||||
Name: procps-ng
|
||||
Version: 3.3.9
|
||||
Release: 5%{?dist}
|
||||
Release: 6%{?dist}
|
||||
License: GPL+ and GPLv2 and GPLv2+ and GPLv3+ and LGPLv2+
|
||||
Group: Applications/System
|
||||
URL: https://sourceforge.net/projects/procps-ng/
|
||||
@ -16,6 +16,7 @@ Patch1: ksh-skip-trailing-zeros.patch
|
||||
Patch2: vmstat-timestamps.patch
|
||||
Patch3: watch-fd-leak.patch
|
||||
Patch4: vmstat-format-security.patch
|
||||
Patch5: subtract-shmem-from-cached.patch
|
||||
|
||||
Requires(post): /sbin/ldconfig
|
||||
Requires(postun): /sbin/ldconfig
|
||||
@ -84,6 +85,7 @@ System and process monitoring utilities development headers
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
|
||||
|
||||
%build
|
||||
@ -153,6 +155,9 @@ ln -s %{_bindir}/pidof %{buildroot}%{_sbindir}/pidof
|
||||
%{_includedir}/proc
|
||||
|
||||
%changelog
|
||||
* Thu Feb 27 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.9-6
|
||||
- Subtracting Shmem from Cached (#1070736)
|
||||
|
||||
* Wed Feb 05 2014 Jaromir Capik <jcapik@redhat.com> - 3.3.9-5
|
||||
- Support for timestamps & wide diskstat (#1053428, #1025833)
|
||||
- Fixing fd leak in watch
|
||||
|
155
subtract-shmem-from-cached.patch
Normal file
155
subtract-shmem-from-cached.patch
Normal file
@ -0,0 +1,155 @@
|
||||
From 3569c0351fae7797e8d62feae7229d2d6d2aa0a1 Mon Sep 17 00:00:00 2001
|
||||
From: Jakob Unterwurzacher <jakobunt@gmail.com>
|
||||
Date: Tue, 18 Feb 2014 22:12:21 +0100
|
||||
Subject: [PATCH] library: properly handle memory used by tmpfs
|
||||
|
||||
tmpfs has become much more widely used since distributions use it for
|
||||
/tmp (Fedora 18+). In /proc/meminfo, memory used by tmpfs is accounted
|
||||
into "Cached" (aka "NR_FILE_PAGES",
|
||||
http://lxr.free-electrons.com/source/mm/shmem.c#L301 ).
|
||||
|
||||
The tools just pass it on, so what top, free and vmstat report as
|
||||
"cached" is the sum of page cache and tmpfs.
|
||||
|
||||
free has the extremely useful "-/+ buffers/cache" output. However, now
|
||||
that tmpfs is accounted into "cached", those numbers are way off once
|
||||
you have big files in /tmp.
|
||||
|
||||
Fortunately, kernel 2.6.32 introduces "Shmem", which makes tmpfs memory
|
||||
usage accessible from userspace (
|
||||
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4b02108ac1b3354a22b0d83c684797692efdc395 ).
|
||||
|
||||
This patch substracts Shmem from Cached to get the actual page cache
|
||||
memory. This makes both issues mentioned above disappear. For older
|
||||
kernels, Shmem is not available (hence zero) and this patch is no-op.
|
||||
|
||||
Additionally:
|
||||
* Update the man pages of free and vmstat to explain what is happening
|
||||
* Finally drop "MemShared" from the /proc/meminfo parser, it has been
|
||||
dead for 10+ years and is only causing confusion ( removed in kernel
|
||||
2.5.54, see
|
||||
https://git.kernel.org/cgit/linux/kernel/git/tglx/history.git/commit/?id=fe04e9451e5a159247cf9f03c615a4273ac0c571 )
|
||||
---
|
||||
free.1 | 29 ++++++++++++++++++++++++-----
|
||||
proc/sysinfo.c | 8 ++++----
|
||||
proc/sysinfo.h | 3 +--
|
||||
vmstat.8 | 3 ++-
|
||||
4 files changed, 31 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/free.1 b/free.1
|
||||
index 1e8e7ef..21cce28 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 1680cc4..e07ca86 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 1eb3472..2291631 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 420d9f3..2782a42 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
|
||||
--
|
||||
1.8.4.2
|
||||
|
Loading…
Reference in New Issue
Block a user