2015-06-20 03:13:02 +05:30
|
|
|
/*
|
|
|
|
* libprocps - Library to read proc filesystem
|
|
|
|
*
|
|
|
|
* Copyright (C) 1995 Martin Schulze <joey@infodrom.north.de>
|
|
|
|
* Copyright (C) 1996 Charles Blake <cblake@bbn.com>
|
|
|
|
* Copyright (C) 2003 Albert Cahalan
|
|
|
|
* Copyright (C) 2015 Craig Small <csmall@enc.com.au>
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
* Copyright (C) 2016 Jim Warner <james.warner@comcast.net>
|
2015-06-20 03:13:02 +05:30
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*/
|
|
|
|
#ifndef PROC_VMSTAT_H
|
|
|
|
#define PROC_VMSTAT_H
|
|
|
|
|
library: removed all the 'PROCPS_' enumerator prefixes
Many of our item enumerator identifiers are very long,
especially in that <VMSTAT> module. Additionally, they
all contain the exact same universal 'PROCPS_' prefix.
The origins for this are likely found in the desire to
avoid name clashes with other potential include files.
But with procps-ng newlib, we've probably gone way too
far. Did 'PROCPS_PIDS_TICS_SYSTEM' actually offer more
protection against clash than 'PIDS_TICS_SYSTEM' does?
I don't think so. Besides, no matter how big that name
becomes, one can never guarantee they'll never be some
clash. And, conversely, extremely short names will not
always create conflict. Of course, in either case when
some clash occurs, one can always #undef that problem.
Thus, this commit will eliminate that 'PROCPS_' prefix
making all of those enum identifiers a little shorter.
And, we'll still be well above some ridiculously short
(criminally short) names found in some common headers:
- - - - - - - - - - <term.h>
- 'tab', 'TTY', etc
- - - - - - - - - - - - - - - - <search.h>
- 'ENTER', ENTRY', 'FIND', etc
------------------------------------------------------
Finally, with this as a last of the wholesale changes,
we will have established the naming conventions below:
. only functions will begin with that 'procps_' prefix
. exposed structures begin with the module/header name
. item enumerators begin like structs, but capitalized
. other enumerators work exactly like item enumerators
. macros and constants begin just like the enumerators
------------------------------------------------------
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-07-21 10:30:00 +05:30
|
|
|
#include <sys/cdefs.h>
|
2015-06-20 03:13:02 +05:30
|
|
|
|
|
|
|
__BEGIN_DECLS
|
|
|
|
|
|
|
|
enum vmstat_item {
|
library: removed all the 'PROCPS_' enumerator prefixes
Many of our item enumerator identifiers are very long,
especially in that <VMSTAT> module. Additionally, they
all contain the exact same universal 'PROCPS_' prefix.
The origins for this are likely found in the desire to
avoid name clashes with other potential include files.
But with procps-ng newlib, we've probably gone way too
far. Did 'PROCPS_PIDS_TICS_SYSTEM' actually offer more
protection against clash than 'PIDS_TICS_SYSTEM' does?
I don't think so. Besides, no matter how big that name
becomes, one can never guarantee they'll never be some
clash. And, conversely, extremely short names will not
always create conflict. Of course, in either case when
some clash occurs, one can always #undef that problem.
Thus, this commit will eliminate that 'PROCPS_' prefix
making all of those enum identifiers a little shorter.
And, we'll still be well above some ridiculously short
(criminally short) names found in some common headers:
- - - - - - - - - - <term.h>
- 'tab', 'TTY', etc
- - - - - - - - - - - - - - - - <search.h>
- 'ENTER', ENTRY', 'FIND', etc
------------------------------------------------------
Finally, with this as a last of the wholesale changes,
we will have established the naming conventions below:
. only functions will begin with that 'procps_' prefix
. exposed structures begin with the module/header name
. item enumerators begin like structs, but capitalized
. other enumerators work exactly like item enumerators
. macros and constants begin just like the enumerators
------------------------------------------------------
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-07-21 10:30:00 +05:30
|
|
|
VMSTAT_noop, // ( never altered )
|
|
|
|
VMSTAT_extra, // ( reset to zero )
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
|
library: removed all the 'PROCPS_' enumerator prefixes
Many of our item enumerator identifiers are very long,
especially in that <VMSTAT> module. Additionally, they
all contain the exact same universal 'PROCPS_' prefix.
The origins for this are likely found in the desire to
avoid name clashes with other potential include files.
But with procps-ng newlib, we've probably gone way too
far. Did 'PROCPS_PIDS_TICS_SYSTEM' actually offer more
protection against clash than 'PIDS_TICS_SYSTEM' does?
I don't think so. Besides, no matter how big that name
becomes, one can never guarantee they'll never be some
clash. And, conversely, extremely short names will not
always create conflict. Of course, in either case when
some clash occurs, one can always #undef that problem.
Thus, this commit will eliminate that 'PROCPS_' prefix
making all of those enum identifiers a little shorter.
And, we'll still be well above some ridiculously short
(criminally short) names found in some common headers:
- - - - - - - - - - <term.h>
- 'tab', 'TTY', etc
- - - - - - - - - - - - - - - - <search.h>
- 'ENTER', ENTRY', 'FIND', etc
------------------------------------------------------
Finally, with this as a last of the wholesale changes,
we will have established the naming conventions below:
. only functions will begin with that 'procps_' prefix
. exposed structures begin with the module/header name
. item enumerators begin like structs, but capitalized
. other enumerators work exactly like item enumerators
. macros and constants begin just like the enumerators
------------------------------------------------------
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-07-21 10:30:00 +05:30
|
|
|
VMSTAT_ALLOCSTALL, // ul_int
|
|
|
|
VMSTAT_BALLOON_DEFLATE, // ul_int
|
|
|
|
VMSTAT_BALLOON_INFLATE, // ul_int
|
|
|
|
VMSTAT_BALLOON_MIGRATE, // ul_int
|
|
|
|
VMSTAT_COMPACT_FAIL, // ul_int
|
|
|
|
VMSTAT_COMPACT_FREE_SCANNED, // ul_int
|
|
|
|
VMSTAT_COMPACT_ISOLATED, // ul_int
|
|
|
|
VMSTAT_COMPACT_MIGRATE_SCANNED, // ul_int
|
|
|
|
VMSTAT_COMPACT_STALL, // ul_int
|
|
|
|
VMSTAT_COMPACT_SUCCESS, // ul_int
|
|
|
|
VMSTAT_DROP_PAGECACHE, // ul_int
|
|
|
|
VMSTAT_DROP_SLAB, // ul_int
|
|
|
|
VMSTAT_HTLB_BUDDY_ALLOC_FAIL, // ul_int
|
|
|
|
VMSTAT_HTLB_BUDDY_ALLOC_SUCCESS, // ul_int
|
|
|
|
VMSTAT_KSWAPD_HIGH_WMARK_HIT_QUICKLY, // ul_int
|
|
|
|
VMSTAT_KSWAPD_INODESTEAL, // ul_int
|
|
|
|
VMSTAT_KSWAPD_LOW_WMARK_HIT_QUICKLY, // ul_int
|
|
|
|
VMSTAT_NR_ACTIVE_ANON, // ul_int
|
|
|
|
VMSTAT_NR_ACTIVE_FILE, // ul_int
|
|
|
|
VMSTAT_NR_ALLOC_BATCH, // ul_int
|
|
|
|
VMSTAT_NR_ANON_PAGES, // ul_int
|
|
|
|
VMSTAT_NR_ANON_TRANSPARENT_HUGEPAGES, // ul_int
|
|
|
|
VMSTAT_NR_BOUNCE, // ul_int
|
|
|
|
VMSTAT_NR_DIRTIED, // ul_int
|
|
|
|
VMSTAT_NR_DIRTY, // ul_int
|
|
|
|
VMSTAT_NR_DIRTY_BACKGROUND_THRESHOLD, // ul_int
|
|
|
|
VMSTAT_NR_DIRTY_THRESHOLD, // ul_int
|
|
|
|
VMSTAT_NR_FILE_PAGES, // ul_int
|
|
|
|
VMSTAT_NR_FREE_CMA, // ul_int
|
|
|
|
VMSTAT_NR_FREE_PAGES, // ul_int
|
|
|
|
VMSTAT_NR_INACTIVE_ANON, // ul_int
|
|
|
|
VMSTAT_NR_INACTIVE_FILE, // ul_int
|
|
|
|
VMSTAT_NR_ISOLATED_ANON, // ul_int
|
|
|
|
VMSTAT_NR_ISOLATED_FILE, // ul_int
|
|
|
|
VMSTAT_NR_KERNEL_STACK, // ul_int
|
|
|
|
VMSTAT_NR_MAPPED, // ul_int
|
|
|
|
VMSTAT_NR_MLOCK, // ul_int
|
|
|
|
VMSTAT_NR_PAGES_SCANNED, // ul_int
|
|
|
|
VMSTAT_NR_PAGE_TABLE_PAGES, // ul_int
|
|
|
|
VMSTAT_NR_SHMEM, // ul_int
|
|
|
|
VMSTAT_NR_SLAB_RECLAIMABLE, // ul_int
|
|
|
|
VMSTAT_NR_SLAB_UNRECLAIMABLE, // ul_int
|
|
|
|
VMSTAT_NR_UNEVICTABLE, // ul_int
|
|
|
|
VMSTAT_NR_UNSTABLE, // ul_int
|
|
|
|
VMSTAT_NR_VMSCAN_IMMEDIATE_RECLAIM, // ul_int
|
|
|
|
VMSTAT_NR_VMSCAN_WRITE, // ul_int
|
|
|
|
VMSTAT_NR_WRITEBACK, // ul_int
|
|
|
|
VMSTAT_NR_WRITEBACK_TEMP, // ul_int
|
|
|
|
VMSTAT_NR_WRITTEN, // ul_int
|
|
|
|
VMSTAT_NUMA_FOREIGN, // ul_int
|
|
|
|
VMSTAT_NUMA_HINT_FAULTS, // ul_int
|
|
|
|
VMSTAT_NUMA_HINT_FAULTS_LOCAL, // ul_int
|
|
|
|
VMSTAT_NUMA_HIT, // ul_int
|
|
|
|
VMSTAT_NUMA_HUGE_PTE_UPDATES, // ul_int
|
|
|
|
VMSTAT_NUMA_INTERLEAVE, // ul_int
|
|
|
|
VMSTAT_NUMA_LOCAL, // ul_int
|
|
|
|
VMSTAT_NUMA_MISS, // ul_int
|
|
|
|
VMSTAT_NUMA_OTHER, // ul_int
|
|
|
|
VMSTAT_NUMA_PAGES_MIGRATED, // ul_int
|
|
|
|
VMSTAT_NUMA_PTE_UPDATES, // ul_int
|
|
|
|
VMSTAT_PAGEOUTRUN, // ul_int
|
|
|
|
VMSTAT_PGACTIVATE, // ul_int
|
|
|
|
VMSTAT_PGALLOC_DMA, // ul_int
|
|
|
|
VMSTAT_PGALLOC_DMA32, // ul_int
|
|
|
|
VMSTAT_PGALLOC_MOVABLE, // ul_int
|
|
|
|
VMSTAT_PGALLOC_NORMAL, // ul_int
|
|
|
|
VMSTAT_PGDEACTIVATE, // ul_int
|
|
|
|
VMSTAT_PGFAULT, // ul_int
|
|
|
|
VMSTAT_PGFREE, // ul_int
|
|
|
|
VMSTAT_PGINODESTEAL, // ul_int
|
|
|
|
VMSTAT_PGMAJFAULT, // ul_int
|
|
|
|
VMSTAT_PGMIGRATE_FAIL, // ul_int
|
|
|
|
VMSTAT_PGMIGRATE_SUCCESS, // ul_int
|
|
|
|
VMSTAT_PGPGIN, // ul_int
|
|
|
|
VMSTAT_PGPGOUT, // ul_int
|
|
|
|
VMSTAT_PGREFILL_DMA, // ul_int
|
|
|
|
VMSTAT_PGREFILL_DMA32, // ul_int
|
|
|
|
VMSTAT_PGREFILL_MOVABLE, // ul_int
|
|
|
|
VMSTAT_PGREFILL_NORMAL, // ul_int
|
|
|
|
VMSTAT_PGROTATED, // ul_int
|
|
|
|
VMSTAT_PGSCAN_DIRECT_DMA, // ul_int
|
|
|
|
VMSTAT_PGSCAN_DIRECT_DMA32, // ul_int
|
|
|
|
VMSTAT_PGSCAN_DIRECT_MOVABLE, // ul_int
|
|
|
|
VMSTAT_PGSCAN_DIRECT_NORMAL, // ul_int
|
|
|
|
VMSTAT_PGSCAN_DIRECT_THROTTLE, // ul_int
|
|
|
|
VMSTAT_PGSCAN_KSWAPD_DMA, // ul_int
|
|
|
|
VMSTAT_PGSCAN_KSWAPD_DMA32, // ul_int
|
|
|
|
VMSTAT_PGSCAN_KSWAPD_MOVEABLE, // ul_int
|
|
|
|
VMSTAT_PGSCAN_KSWAPD_NORMAL, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_DIRECT_DMA, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_DIRECT_DMA32, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_DIRECT_MOVABLE, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_DIRECT_NORMAL, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_KSWAPD_DMA, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_KSWAPD_DMA32, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_KSWAPD_MOVABLE, // ul_int
|
|
|
|
VMSTAT_PGSTEAL_KSWAPD_NORMAL, // ul_int
|
|
|
|
VMSTAT_PSWPIN, // ul_int
|
|
|
|
VMSTAT_PSWPOUT, // ul_int
|
|
|
|
VMSTAT_SLABS_SCANNED, // ul_int
|
|
|
|
VMSTAT_THP_COLLAPSE_ALLOC, // ul_int
|
|
|
|
VMSTAT_THP_COLLAPSE_ALLOC_FAILED, // ul_int
|
|
|
|
VMSTAT_THP_FAULT_ALLOC, // ul_int
|
|
|
|
VMSTAT_THP_FAULT_FALLBACK, // ul_int
|
|
|
|
VMSTAT_THP_SPLIT, // ul_int
|
|
|
|
VMSTAT_THP_ZERO_PAGE_ALLOC, // ul_int
|
|
|
|
VMSTAT_THP_ZERO_PAGE_ALLOC_FAILED, // ul_int
|
|
|
|
VMSTAT_UNEVICTABLE_PGS_CLEARED, // ul_int
|
|
|
|
VMSTAT_UNEVICTABLE_PGS_CULLED, // ul_int
|
|
|
|
VMSTAT_UNEVICTABLE_PGS_MLOCKED, // ul_int
|
|
|
|
VMSTAT_UNEVICTABLE_PGS_MUNLOCKED, // ul_int
|
|
|
|
VMSTAT_UNEVICTABLE_PGS_RESCUED, // ul_int
|
|
|
|
VMSTAT_UNEVICTABLE_PGS_SCANNED, // ul_int
|
|
|
|
VMSTAT_UNEVICTABLE_PGS_STRANDED, // ul_int
|
|
|
|
VMSTAT_WORKINGSET_ACTIVATE, // ul_int
|
|
|
|
VMSTAT_WORKINGSET_NODERECLAIM, // ul_int
|
|
|
|
VMSTAT_WORKINGSET_REFAULT, // ul_int
|
|
|
|
VMSTAT_ZONE_RECLAIM_FAILED, // ul_int
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
|
library: removed all the 'PROCPS_' enumerator prefixes
Many of our item enumerator identifiers are very long,
especially in that <VMSTAT> module. Additionally, they
all contain the exact same universal 'PROCPS_' prefix.
The origins for this are likely found in the desire to
avoid name clashes with other potential include files.
But with procps-ng newlib, we've probably gone way too
far. Did 'PROCPS_PIDS_TICS_SYSTEM' actually offer more
protection against clash than 'PIDS_TICS_SYSTEM' does?
I don't think so. Besides, no matter how big that name
becomes, one can never guarantee they'll never be some
clash. And, conversely, extremely short names will not
always create conflict. Of course, in either case when
some clash occurs, one can always #undef that problem.
Thus, this commit will eliminate that 'PROCPS_' prefix
making all of those enum identifiers a little shorter.
And, we'll still be well above some ridiculously short
(criminally short) names found in some common headers:
- - - - - - - - - - <term.h>
- 'tab', 'TTY', etc
- - - - - - - - - - - - - - - - <search.h>
- 'ENTER', ENTRY', 'FIND', etc
------------------------------------------------------
Finally, with this as a last of the wholesale changes,
we will have established the naming conventions below:
. only functions will begin with that 'procps_' prefix
. exposed structures begin with the module/header name
. item enumerators begin like structs, but capitalized
. other enumerators work exactly like item enumerators
. macros and constants begin just like the enumerators
------------------------------------------------------
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-07-21 10:30:00 +05:30
|
|
|
VMSTAT_DELTA_ALLOCSTALL, // sl_int
|
|
|
|
VMSTAT_DELTA_BALLOON_DEFLATE, // sl_int
|
|
|
|
VMSTAT_DELTA_BALLOON_INFLATE, // sl_int
|
|
|
|
VMSTAT_DELTA_BALLOON_MIGRATE, // sl_int
|
|
|
|
VMSTAT_DELTA_COMPACT_FAIL, // sl_int
|
|
|
|
VMSTAT_DELTA_COMPACT_FREE_SCANNED, // sl_int
|
|
|
|
VMSTAT_DELTA_COMPACT_ISOLATED, // sl_int
|
|
|
|
VMSTAT_DELTA_COMPACT_MIGRATE_SCANNED, // sl_int
|
|
|
|
VMSTAT_DELTA_COMPACT_STALL, // sl_int
|
|
|
|
VMSTAT_DELTA_COMPACT_SUCCESS, // sl_int
|
|
|
|
VMSTAT_DELTA_DROP_PAGECACHE, // sl_int
|
|
|
|
VMSTAT_DELTA_DROP_SLAB, // sl_int
|
|
|
|
VMSTAT_DELTA_HTLB_BUDDY_ALLOC_FAIL, // sl_int
|
|
|
|
VMSTAT_DELTA_HTLB_BUDDY_ALLOC_SUCCESS, // sl_int
|
|
|
|
VMSTAT_DELTA_KSWAPD_HIGH_WMARK_HIT_QUICKLY, // sl_int
|
|
|
|
VMSTAT_DELTA_KSWAPD_INODESTEAL, // sl_int
|
|
|
|
VMSTAT_DELTA_KSWAPD_LOW_WMARK_HIT_QUICKLY, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_ACTIVE_ANON, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_ACTIVE_FILE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_ALLOC_BATCH, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_ANON_PAGES, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_ANON_TRANSPARENT_HUGEPAGES, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_BOUNCE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_DIRTIED, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_DIRTY, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_DIRTY_BACKGROUND_THRESHOLD, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_DIRTY_THRESHOLD, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_FILE_PAGES, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_FREE_CMA, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_FREE_PAGES, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_INACTIVE_ANON, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_INACTIVE_FILE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_ISOLATED_ANON, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_ISOLATED_FILE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_KERNEL_STACK, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_MAPPED, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_MLOCK, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_PAGES_SCANNED, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_PAGE_TABLE_PAGES, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_SHMEM, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_SLAB_RECLAIMABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_SLAB_UNRECLAIMABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_UNEVICTABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_UNSTABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_VMSCAN_IMMEDIATE_RECLAIM, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_VMSCAN_WRITE, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_WRITEBACK, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_WRITEBACK_TEMP, // sl_int
|
|
|
|
VMSTAT_DELTA_NR_WRITTEN, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_FOREIGN, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_HINT_FAULTS, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_HINT_FAULTS_LOCAL, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_HIT, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_HUGE_PTE_UPDATES, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_INTERLEAVE, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_LOCAL, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_MISS, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_OTHER, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_PAGES_MIGRATED, // sl_int
|
|
|
|
VMSTAT_DELTA_NUMA_PTE_UPDATES, // sl_int
|
|
|
|
VMSTAT_DELTA_PAGEOUTRUN, // sl_int
|
|
|
|
VMSTAT_DELTA_PGACTIVATE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGALLOC_DMA, // sl_int
|
|
|
|
VMSTAT_DELTA_PGALLOC_DMA32, // sl_int
|
|
|
|
VMSTAT_DELTA_PGALLOC_MOVABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGALLOC_NORMAL, // sl_int
|
|
|
|
VMSTAT_DELTA_PGDEACTIVATE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGFAULT, // sl_int
|
|
|
|
VMSTAT_DELTA_PGFREE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGINODESTEAL, // sl_int
|
|
|
|
VMSTAT_DELTA_PGMAJFAULT, // sl_int
|
|
|
|
VMSTAT_DELTA_PGMIGRATE_FAIL, // sl_int
|
|
|
|
VMSTAT_DELTA_PGMIGRATE_SUCCESS, // sl_int
|
|
|
|
VMSTAT_DELTA_PGPGIN, // sl_int
|
|
|
|
VMSTAT_DELTA_PGPGOUT, // sl_int
|
|
|
|
VMSTAT_DELTA_PGREFILL_DMA, // sl_int
|
|
|
|
VMSTAT_DELTA_PGREFILL_DMA32, // sl_int
|
|
|
|
VMSTAT_DELTA_PGREFILL_MOVABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGREFILL_NORMAL, // sl_int
|
|
|
|
VMSTAT_DELTA_PGROTATED, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_DIRECT_DMA, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_DIRECT_DMA32, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_DIRECT_MOVABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_DIRECT_NORMAL, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_DIRECT_THROTTLE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_KSWAPD_DMA, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_KSWAPD_DMA32, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_KSWAPD_MOVEABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSCAN_KSWAPD_NORMAL, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_DIRECT_DMA, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_DIRECT_DMA32, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_DIRECT_MOVABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_DIRECT_NORMAL, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_KSWAPD_DMA, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_KSWAPD_DMA32, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_KSWAPD_MOVABLE, // sl_int
|
|
|
|
VMSTAT_DELTA_PGSTEAL_KSWAPD_NORMAL, // sl_int
|
|
|
|
VMSTAT_DELTA_PSWPIN, // sl_int
|
|
|
|
VMSTAT_DELTA_PSWPOUT, // sl_int
|
|
|
|
VMSTAT_DELTA_SLABS_SCANNED, // sl_int
|
|
|
|
VMSTAT_DELTA_THP_COLLAPSE_ALLOC, // sl_int
|
|
|
|
VMSTAT_DELTA_THP_COLLAPSE_ALLOC_FAILED, // sl_int
|
|
|
|
VMSTAT_DELTA_THP_FAULT_ALLOC, // sl_int
|
|
|
|
VMSTAT_DELTA_THP_FAULT_FALLBACK, // sl_int
|
|
|
|
VMSTAT_DELTA_THP_SPLIT, // sl_int
|
|
|
|
VMSTAT_DELTA_THP_ZERO_PAGE_ALLOC, // sl_int
|
|
|
|
VMSTAT_DELTA_THP_ZERO_PAGE_ALLOC_FAILED, // sl_int
|
|
|
|
VMSTAT_DELTA_UNEVICTABLE_PGS_CLEARED, // sl_int
|
|
|
|
VMSTAT_DELTA_UNEVICTABLE_PGS_CULLED, // sl_int
|
|
|
|
VMSTAT_DELTA_UNEVICTABLE_PGS_MLOCKED, // sl_int
|
|
|
|
VMSTAT_DELTA_UNEVICTABLE_PGS_MUNLOCKED, // sl_int
|
|
|
|
VMSTAT_DELTA_UNEVICTABLE_PGS_RESCUED, // sl_int
|
|
|
|
VMSTAT_DELTA_UNEVICTABLE_PGS_SCANNED, // sl_int
|
|
|
|
VMSTAT_DELTA_UNEVICTABLE_PGS_STRANDED, // sl_int
|
|
|
|
VMSTAT_DELTA_WORKINGSET_ACTIVATE, // sl_int
|
|
|
|
VMSTAT_DELTA_WORKINGSET_NODERECLAIM, // sl_int
|
|
|
|
VMSTAT_DELTA_WORKINGSET_REFAULT, // sl_int
|
|
|
|
VMSTAT_DELTA_ZONE_RECLAIM_FAILED // sl_int
|
2015-06-20 03:13:02 +05:30
|
|
|
};
|
2015-06-28 10:30:00 +05:30
|
|
|
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
|
2015-06-28 10:30:00 +05:30
|
|
|
struct vmstat_result {
|
|
|
|
enum vmstat_item item;
|
2015-07-21 10:30:00 +05:30
|
|
|
union {
|
2016-06-14 10:30:00 +05:30
|
|
|
signed long sl_int;
|
|
|
|
unsigned long ul_int;
|
2015-07-21 10:30:00 +05:30
|
|
|
} result;
|
2015-06-28 10:30:00 +05:30
|
|
|
};
|
|
|
|
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
struct vmstat_stack {
|
|
|
|
struct vmstat_result *head;
|
|
|
|
};
|
2015-06-28 10:30:00 +05:30
|
|
|
|
|
|
|
|
2016-08-06 21:41:11 +05:30
|
|
|
#define VMSTAT_GET( info, actual_enum, type ) ( { \
|
|
|
|
struct vmstat_result *r = procps_vmstat_get( info, actual_enum ); \
|
|
|
|
r ? r->result . type : 0; } )
|
2016-06-18 10:30:00 +05:30
|
|
|
|
2016-08-05 10:30:00 +05:30
|
|
|
#define VMSTAT_VAL( relative_enum, type, stack, info ) \
|
2016-06-18 10:30:00 +05:30
|
|
|
stack -> head [ relative_enum ] . result . type
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
|
|
|
|
|
2016-07-21 10:30:00 +05:30
|
|
|
struct vmstat_info;
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
|
2016-07-21 10:30:00 +05:30
|
|
|
int procps_vmstat_new (struct vmstat_info **info);
|
|
|
|
int procps_vmstat_ref (struct vmstat_info *info);
|
|
|
|
int procps_vmstat_unref (struct vmstat_info **info);
|
2015-06-28 10:30:00 +05:30
|
|
|
|
2016-06-18 10:30:00 +05:30
|
|
|
struct vmstat_result *procps_vmstat_get (
|
2016-07-21 10:30:00 +05:30
|
|
|
struct vmstat_info *info,
|
2015-07-21 10:30:00 +05:30
|
|
|
enum vmstat_item item);
|
|
|
|
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
struct vmstat_stack *procps_vmstat_select (
|
2016-07-21 10:30:00 +05:30
|
|
|
struct vmstat_info *info,
|
library: normalize/standardize interface, <VMSTAT> api
This interface represented a 2nd generation attempt at
the opaque newlib approach. In other words, it did not
involve the 1st generation 'chains'. Instead, 'stacks'
were employed. But the interface wasn't user friendly.
Users were required to create their own stacks, before
calling 'getstack' to retrieve multiple results with a
single call. Even worse, sometimes 'read' was required
before calling 'get' when working with single results.
So this commit represents the 3rd generation approach.
We eliminate the burden of 'read' and creating stacks.
Rather, beyond those standard 'new', 'ref' and 'unref'
functions, we'll offer just 'get' (single result) plus
a 'select' function (for multiple results in 1 stack).
And along the way, this commit vastly expands the data
extracted from /proc/vmstat. All values that currently
exist (and their delta equivalents) are now available.
Deltas were included for everything because there's no
real runtime costs beyond using a little extra memory.
The only problem is a lack of documentation for all of
those fields, as is reflected in the references below.
Oh well, maybe someday someone will dig through kernel
sources & finally plug that rather large document gap.
[ as an aside, rather than using a 'strcmp' approach ]
[ when parsing the /proc/vmstat file, as is found in ]
[ the <meminfo> module, we exploit those hash search ]
[ provisions that are found in the <search.h> header ]
Reference(s):
http://www.spinics.net/lists/linux-man/msg09096.html
http://www.linuxinsight.com/proc_vmstat.html
Signed-off-by: Jim Warner <james.warner@comcast.net>
2016-06-04 10:30:00 +05:30
|
|
|
enum vmstat_item *items,
|
|
|
|
int numitems);
|
2015-06-20 03:13:02 +05:30
|
|
|
|
|
|
|
__END_DECLS
|
|
|
|
#endif
|