library: add item origin (as comments) to header files

A lack of documentation seems to be the major obstacle
to releasing this new library. So, in an effort to get
the ball rolling again, this patch adds the origins of
each item as a comment to six of the new header files.

However, before reviewing how such changes may benefit
that documentation objective, it seemed appropriate to
first reflect on newlib's background & current status.

___________________________________________ BACKGROUND
Discussions about and work on a new library began back
in July 2012 but quickly died. After a lull of 2 years
those discussions were resumed in August 2014 but soon
died also (and no code survived the gitorious demise).

With those early discussions, the recommended approach
was to encapsulate all of the libprocps data offerings
in individual functions. When it came to extensibility
it was suggested we should rely on symbols versioning.

Unfortunately that approach would have made for a huge
Application Programming Interface virtually impossible
to master or even document. And, runtime call overhead
would have been substantial for ps and especially top.

So, an alternative design was sought but there were no
new suggestions/contributions via freelists or gitlab.
Thus, in spite of a lack of library design experience,
the procps-ng team (Craig & Jim) set out to develop an
alternative API, more concise and with lower overhead.

Reference(s):
. 07/01/2012, begin library design discussion
https://www.freelists.org/post/procps/Old-library-calls
. 08/12/2014, revival of library design discussion
https://www.freelists.org/post/procps/libprocs-redesign

_____________________________________ DESIGN EVOLUTION
Our newlib branch first appeared on June 14, 2015. And
our current API actually represents the 4th generation
during the past 3 years of evolution. First, there was
a basic 'new', 'get' and 'unref' approach, using enums
to minimize the proliferation of 'get' function calls.

Then, in anticipation of other programs like ps, where
multiple fields times multiple processes would greatly
increase the number of 'get' function calls, a concept
of 'chains' was introduced. This became generation #2.

Such 'chains' proved unnecessarily complex so 'stacks'
replaced them. This was considered the 3rd generation,
but too many implementation details were still exposed
requiring those users to 'alloc', 'read', 'fill', etc.

Finally, a 4th generation emerged representing several
refinements to standardize and minimize those exported
functions, thus hiding all implementation details from
the users. Lastly, handling of 'errno' was normalized.

Reference(s):
. 06/14/2015, revival of new API discussion
https://www.freelists.org/post/procps/The-library-API-again
. 06/24/2015, birth of the newlib branch
https://www.freelists.org/post/procps/new-library
. 06/29/2015, 2nd generation introduced 'chains'
https://www.freelists.org/post/procps/new-library,8
. 07/22/2015, 3rd generation introduced 'stacks'
https://www.freelists.org/post/procps/newlib-stacks-vs-chains
. 06/18/2016, 4th generation refinements begin
https://www.freelists.org/post/procps/newlib-generation-35
. 11/10/2017, 4th generation standardized 'errno'
https://www.freelists.org/post/procps/some-more-master-newlib-stuff

_______________________________________ CURRENT DESIGN
Central to this new design is a simple 'result' struct
reflecting an item plus its value (thanks to a union).
As a user option, these item structures can be grouped
into 'stacks', yielding many results with just 1 call.
Such a 'stack' can be seen as a variable length record
whose content/order is determined solely by the users.

Within that 'result' structure, the union has standard
C language types so there is never a doubt how a value
should be used in a printf statement. Given that linux
requires a least a 32-bit platform the only difference
in capacity surrounds 'long' integers. And, where such
types might be used, the 32-bit maximums are adequate.

The items themselves are simply enumerators defined in
the respective header files. A user can name any items
of interest then the library magically provides result
structure(s). The approach was proven to be extensible
without breaking the ABI (in commit referenced below).

The 6 major APIs each provide for the following calls:
. 'new' ---------> always required as the first call .
. 'ref' -------------------------> strictly optional .
. 'unref' --------> optional, if ill-behaved program .
. 'get' --------------------> retrieve a single item .
. 'select' ----------------> retrieve multiple items .

And the 'get' and 'select' functions provide for delta
results representing the difference between successive
get/select calls (or a 'new' then  'get/select' call).

For the <diskstats>, <pids>, <slabinfo> & <stat> APIs,
where results are unpredictable, a 'reap' function can
return multiple result structures for multiple stacks.

The <pids> API differs from others in that those items
of interest must be provided at 'new' or 'reset' time,
a function unique to this API. And the <pids> 'select'
function requires PIDs or UIDs which are to be fetched
which then operates as a subset of 'reap'. Lastly, the
'get' function is an iterator for successive PIDs/TIDs
returning items previously identified via 'new/reset'.

To provide assistance to users during development, the
special header 'proc/xtra-procps-debug.h' is available
to check type usage against library expectations. That
check is activated by including this header explicitly
or via build using: ./configure '-DXTRA_PROCPS_DEBUG'.

Reference(s):
. 08/05/2016, type validation introduced
https://www.freelists.org/post/procps/newlib-types-validation
commit e3270d463de7eebd9f5ae20c85495e3cb5b69a9f
. 08/11/2016, extensibility while preserving ABI example
https://www.freelists.org/post/procps/new-meminfo-fields
commit 09e1886c9e731f8b8c89a55d11f72f53f030b2de

_________________________ INITIAL DOCUMENTATION EFFORT
The initial attempt, referenced below, dealt primarily
with the <pids> interface. Separate man pages for each
exported function were created. Plus there was another
document describing the items, among other miscellany.

Adopting such an approach encounters several problems:

1. In order to use these man pages, users are required
to already know how to use the library. Or alternately
one could randomly search each of them while trying to
ascertain which function call satisfies their need and
what exactly was the proper compliment/order required.

2. While we can explain what all of those <pids> items
represent, that certainly isn't true for all the APIs.
See the gaps in kernel documentation for <meminfo> and
complete lack of documentation with that <vmstat> API.

3. Our documentation effort should take pains to avoid
unnecessary implementation details. Here's an example:
. "The pointer to info will have memory"
. "allocated and a structure created."

Alternatively, the following conveys user requirements
while not offering any internal implementation detail:
. "You must provide the address of a NULL"
. "info structure pointer."

Reference(s):
. 01/04/2017, initial documentation offering
https://www.freelists.org/post/procps/Using-reap-and-get
commit 2598e9f2ce39c93ebf55f664454d3bea919ed4e0

___________________ RECOMMENDED DOCUMENTATION APPROACH
I recommend that the newlib documentation consist of 3
man pages only. The first would cover the 5 major APIs
and their common functions. The second would deal with
the <pids> API exclusively, explaining how it differs.
Any remaining exported libproc functions which are yet
to be included could be represented in a 3rd document.

For these new documents the following are are assumed:

1. Since we will not be able to document all items, we
shouldn't try to document any items. We should instead
rely on proc(5) or Documentation/filesystems/proc.txt.

2. Program development often involves referencing some
header file(s). So, make that an absolute requirement.

3. With the addition of item origins, represented with
this commit, and considering that 'types' were already
present, the header file might be all some users need.

4. And who knows, when a user of our libproc complains
about gaps in their documentation, it might prompt the
kernel folks to correct those long standing omissions.

To summarize, I suggest that we replace that libproc.3
document with a more general one explaining the basics
of accessing this new library and the common calls for
most of the major interfaces. We can then create a new
document (libproc-pids.3?), which explains differences
in using the <PIDS> application programming interface.
A final document (libproc-misc.3?) covers what's left.

Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
Jim Warner 2018-12-20 00:00:00 -06:00 committed by Craig Small
parent d9f88246f6
commit 96d59cbf46
6 changed files with 575 additions and 567 deletions

View File

@ -30,35 +30,36 @@ extern "C" {
enum diskstats_item { enum diskstats_item {
DISKSTATS_noop, // ( never altered ) DISKSTATS_noop, // ( never altered )
DISKSTATS_extra, // ( reset to zero ) DISKSTATS_extra, // ( reset to zero )
// returns origin, see proc(5)
// ------- -------------------
DISKSTATS_NAME, // str /proc/diskstats
DISKSTATS_TYPE, // s_int "
DISKSTATS_MAJOR, // s_int "
DISKSTATS_MINOR, // s_int "
DISKSTATS_NAME, // str DISKSTATS_READS, // ul_int "
DISKSTATS_TYPE, // s_int DISKSTATS_READS_MERGED, // ul_int "
DISKSTATS_MAJOR, // s_int DISKSTATS_READ_SECTORS, // ul_int "
DISKSTATS_MINOR, // s_int DISKSTATS_READ_TIME, // ul_int "
DISKSTATS_WRITES, // ul_int "
DISKSTATS_WRITES_MERGED, // ul_int "
DISKSTATS_WRITE_SECTORS, // ul_int "
DISKSTATS_WRITE_TIME, // ul_int "
DISKSTATS_IO_TIME, // ul_int "
DISKSTATS_IO_WTIME, // ul_int "
DISKSTATS_READS, // ul_int DISKSTATS_IO_INPROGRESS, // s_int "
DISKSTATS_READS_MERGED, // ul_int
DISKSTATS_READ_SECTORS, // ul_int
DISKSTATS_READ_TIME, // ul_int
DISKSTATS_WRITES, // ul_int
DISKSTATS_WRITES_MERGED, // ul_int
DISKSTATS_WRITE_SECTORS, // ul_int
DISKSTATS_WRITE_TIME, // ul_int
DISKSTATS_IO_TIME, // ul_int
DISKSTATS_IO_WTIME, // ul_int
DISKSTATS_IO_INPROGRESS, // s_int DISKSTATS_DELTA_READS, // s_int dervied from above
DISKSTATS_DELTA_READS_MERGED, // s_int "
DISKSTATS_DELTA_READS, // s_int DISKSTATS_DELTA_READ_SECTORS, // s_int "
DISKSTATS_DELTA_READS_MERGED, // s_int DISKSTATS_DELTA_READ_TIME, // s_int "
DISKSTATS_DELTA_READ_SECTORS, // s_int DISKSTATS_DELTA_WRITES, // s_int "
DISKSTATS_DELTA_READ_TIME, // s_int DISKSTATS_DELTA_WRITES_MERGED, // s_int "
DISKSTATS_DELTA_WRITES, // s_int DISKSTATS_DELTA_WRITE_SECTORS, // s_int "
DISKSTATS_DELTA_WRITES_MERGED, // s_int DISKSTATS_DELTA_WRITE_TIME, // s_int "
DISKSTATS_DELTA_WRITE_SECTORS, // s_int DISKSTATS_DELTA_IO_TIME, // s_int "
DISKSTATS_DELTA_WRITE_TIME, // s_int DISKSTATS_DELTA_IO_WTIME // s_int "
DISKSTATS_DELTA_IO_TIME, // s_int
DISKSTATS_DELTA_IO_WTIME // s_int
}; };
enum diskstats_sort_order { enum diskstats_sort_order {

View File

@ -29,115 +29,117 @@ enum meminfo_item {
/* /*
note: all of the following values are expressed as KiB note: all of the following values are expressed as KiB
*/ */
MEMINFO_MEM_ACTIVE, // ul_int // returns origin, see proc(5)
MEMINFO_MEM_ACTIVE_ANON, // ul_int // ------- -------------------
MEMINFO_MEM_ACTIVE_FILE, // ul_int MEMINFO_MEM_ACTIVE, // ul_int /proc/meminfo
MEMINFO_MEM_ANON, // ul_int MEMINFO_MEM_ACTIVE_ANON, // ul_int "
MEMINFO_MEM_AVAILABLE, // ul_int MEMINFO_MEM_ACTIVE_FILE, // ul_int "
MEMINFO_MEM_BOUNCE, // ul_int MEMINFO_MEM_ANON, // ul_int "
MEMINFO_MEM_BUFFERS, // ul_int MEMINFO_MEM_AVAILABLE, // ul_int "
MEMINFO_MEM_CACHED, // ul_int MEMINFO_MEM_BOUNCE, // ul_int "
MEMINFO_MEM_CACHED_ALL, // ul_int MEMINFO_MEM_BUFFERS, // ul_int "
MEMINFO_MEM_COMMIT_LIMIT, // ul_int MEMINFO_MEM_CACHED, // ul_int "
MEMINFO_MEM_COMMITTED_AS, // ul_int MEMINFO_MEM_CACHED_ALL, // ul_int "
MEMINFO_MEM_HARD_CORRUPTED, // ul_int MEMINFO_MEM_COMMIT_LIMIT, // ul_int "
MEMINFO_MEM_DIRTY, // ul_int MEMINFO_MEM_COMMITTED_AS, // ul_int "
MEMINFO_MEM_FREE, // ul_int MEMINFO_MEM_HARD_CORRUPTED, // ul_int "
MEMINFO_MEM_HUGE_ANON, // ul_int MEMINFO_MEM_DIRTY, // ul_int "
MEMINFO_MEM_HUGE_FREE, // ul_int MEMINFO_MEM_FREE, // ul_int "
MEMINFO_MEM_HUGE_RSVD, // ul_int MEMINFO_MEM_HUGE_ANON, // ul_int "
MEMINFO_MEM_HUGE_SIZE, // ul_int MEMINFO_MEM_HUGE_FREE, // ul_int "
MEMINFO_MEM_HUGE_SURPLUS, // ul_int MEMINFO_MEM_HUGE_RSVD, // ul_int "
MEMINFO_MEM_HUGE_TOTAL, // ul_int MEMINFO_MEM_HUGE_SIZE, // ul_int "
MEMINFO_MEM_INACTIVE, // ul_int MEMINFO_MEM_HUGE_SURPLUS, // ul_int "
MEMINFO_MEM_INACTIVE_ANON, // ul_int MEMINFO_MEM_HUGE_TOTAL, // ul_int "
MEMINFO_MEM_INACTIVE_FILE, // ul_int MEMINFO_MEM_INACTIVE, // ul_int "
MEMINFO_MEM_KERNEL_RECLAIM, // ul_int MEMINFO_MEM_INACTIVE_ANON, // ul_int "
MEMINFO_MEM_KERNEL_STACK, // ul_int MEMINFO_MEM_INACTIVE_FILE, // ul_int "
MEMINFO_MEM_LOCKED, // ul_int MEMINFO_MEM_KERNEL_RECLAIM, // ul_int "
MEMINFO_MEM_MAPPED, // ul_int MEMINFO_MEM_KERNEL_STACK, // ul_int "
MEMINFO_MEM_MAP_COPY, // ul_int MEMINFO_MEM_LOCKED, // ul_int "
MEMINFO_MEM_NFS_UNSTABLE, // ul_int MEMINFO_MEM_MAPPED, // ul_int "
MEMINFO_MEM_PAGE_TABLES, // ul_int MEMINFO_MEM_MAP_COPY, // ul_int "
MEMINFO_MEM_QUICKLISTS, // ul_int MEMINFO_MEM_NFS_UNSTABLE, // ul_int "
MEMINFO_MEM_SHARED, // ul_int MEMINFO_MEM_PAGE_TABLES, // ul_int "
MEMINFO_MEM_SHMEM_HUGE, // ul_int MEMINFO_MEM_QUICKLISTS, // ul_int "
MEMINFO_MEM_SHMEM_HUGE_MAP, // ul_int MEMINFO_MEM_SHARED, // ul_int "
MEMINFO_MEM_SLAB, // ul_int MEMINFO_MEM_SHMEM_HUGE, // ul_int "
MEMINFO_MEM_SLAB_RECLAIM, // ul_int MEMINFO_MEM_SHMEM_HUGE_MAP, // ul_int "
MEMINFO_MEM_SLAB_UNRECLAIM, // ul_int MEMINFO_MEM_SLAB, // ul_int "
MEMINFO_MEM_TOTAL, // ul_int MEMINFO_MEM_SLAB_RECLAIM, // ul_int "
MEMINFO_MEM_UNEVICTABLE, // ul_int MEMINFO_MEM_SLAB_UNRECLAIM, // ul_int "
MEMINFO_MEM_USED, // ul_int MEMINFO_MEM_TOTAL, // ul_int "
MEMINFO_MEM_VM_ALLOC_CHUNK, // ul_int MEMINFO_MEM_UNEVICTABLE, // ul_int "
MEMINFO_MEM_VM_ALLOC_TOTAL, // ul_int MEMINFO_MEM_USED, // ul_int "
MEMINFO_MEM_VM_ALLOC_USED, // ul_int MEMINFO_MEM_VM_ALLOC_CHUNK, // ul_int "
MEMINFO_MEM_WRITEBACK, // ul_int MEMINFO_MEM_VM_ALLOC_TOTAL, // ul_int "
MEMINFO_MEM_WRITEBACK_TMP, // ul_int MEMINFO_MEM_VM_ALLOC_USED, // ul_int "
MEMINFO_MEM_WRITEBACK, // ul_int "
MEMINFO_MEM_WRITEBACK_TMP, // ul_int "
MEMINFO_DELTA_ACTIVE, // s_int MEMINFO_DELTA_ACTIVE, // s_int dervied from above
MEMINFO_DELTA_ACTIVE_ANON, // s_int MEMINFO_DELTA_ACTIVE_ANON, // s_int "
MEMINFO_DELTA_ACTIVE_FILE, // s_int MEMINFO_DELTA_ACTIVE_FILE, // s_int "
MEMINFO_DELTA_ANON, // s_int MEMINFO_DELTA_ANON, // s_int "
MEMINFO_DELTA_AVAILABLE, // s_int MEMINFO_DELTA_AVAILABLE, // s_int "
MEMINFO_DELTA_BOUNCE, // s_int MEMINFO_DELTA_BOUNCE, // s_int "
MEMINFO_DELTA_BUFFERS, // s_int MEMINFO_DELTA_BUFFERS, // s_int "
MEMINFO_DELTA_CACHED, // s_int MEMINFO_DELTA_CACHED, // s_int "
MEMINFO_DELTA_CACHED_ALL, // s_int MEMINFO_DELTA_CACHED_ALL, // s_int "
MEMINFO_DELTA_COMMIT_LIMIT, // s_int MEMINFO_DELTA_COMMIT_LIMIT, // s_int "
MEMINFO_DELTA_COMMITTED_AS, // s_int MEMINFO_DELTA_COMMITTED_AS, // s_int "
MEMINFO_DELTA_HARD_CORRUPTED, // s_int MEMINFO_DELTA_HARD_CORRUPTED, // s_int "
MEMINFO_DELTA_DIRTY, // s_int MEMINFO_DELTA_DIRTY, // s_int "
MEMINFO_DELTA_FREE, // s_int MEMINFO_DELTA_FREE, // s_int "
MEMINFO_DELTA_HUGE_ANON, // s_int MEMINFO_DELTA_HUGE_ANON, // s_int "
MEMINFO_DELTA_HUGE_FREE, // s_int MEMINFO_DELTA_HUGE_FREE, // s_int "
MEMINFO_DELTA_HUGE_RSVD, // s_int MEMINFO_DELTA_HUGE_RSVD, // s_int "
MEMINFO_DELTA_HUGE_SIZE, // s_int MEMINFO_DELTA_HUGE_SIZE, // s_int "
MEMINFO_DELTA_HUGE_SURPLUS, // s_int MEMINFO_DELTA_HUGE_SURPLUS, // s_int "
MEMINFO_DELTA_HUGE_TOTAL, // s_int MEMINFO_DELTA_HUGE_TOTAL, // s_int "
MEMINFO_DELTA_INACTIVE, // s_int MEMINFO_DELTA_INACTIVE, // s_int "
MEMINFO_DELTA_INACTIVE_ANON, // s_int MEMINFO_DELTA_INACTIVE_ANON, // s_int "
MEMINFO_DELTA_INACTIVE_FILE, // s_int MEMINFO_DELTA_INACTIVE_FILE, // s_int "
MEMINFO_DELTA_KERNEL_RECLAIM, // s_int MEMINFO_DELTA_KERNEL_RECLAIM, // s_int "
MEMINFO_DELTA_KERNEL_STACK, // s_int MEMINFO_DELTA_KERNEL_STACK, // s_int "
MEMINFO_DELTA_LOCKED, // s_int MEMINFO_DELTA_LOCKED, // s_int "
MEMINFO_DELTA_MAPPED, // s_int MEMINFO_DELTA_MAPPED, // s_int "
MEMINFO_DELTA_MAP_COPY, // s_int MEMINFO_DELTA_MAP_COPY, // s_int "
MEMINFO_DELTA_NFS_UNSTABLE, // s_int MEMINFO_DELTA_NFS_UNSTABLE, // s_int "
MEMINFO_DELTA_PAGE_TABLES, // s_int MEMINFO_DELTA_PAGE_TABLES, // s_int "
MEMINFO_DELTA_QUICKLISTS, // s_int MEMINFO_DELTA_QUICKLISTS, // s_int "
MEMINFO_DELTA_SHARED, // s_int MEMINFO_DELTA_SHARED, // s_int "
MEMINFO_DELTA_SHMEM_HUGE, // s_int MEMINFO_DELTA_SHMEM_HUGE, // s_int "
MEMINFO_DELTA_SHMEM_HUGE_MAP, // s_int MEMINFO_DELTA_SHMEM_HUGE_MAP, // s_int "
MEMINFO_DELTA_SLAB, // s_int MEMINFO_DELTA_SLAB, // s_int "
MEMINFO_DELTA_SLAB_RECLAIM, // s_int MEMINFO_DELTA_SLAB_RECLAIM, // s_int "
MEMINFO_DELTA_SLAB_UNRECLAIM, // s_int MEMINFO_DELTA_SLAB_UNRECLAIM, // s_int "
MEMINFO_DELTA_TOTAL, // s_int MEMINFO_DELTA_TOTAL, // s_int "
MEMINFO_DELTA_UNEVICTABLE, // s_int MEMINFO_DELTA_UNEVICTABLE, // s_int "
MEMINFO_DELTA_USED, // s_int MEMINFO_DELTA_USED, // s_int "
MEMINFO_DELTA_VM_ALLOC_CHUNK, // s_int MEMINFO_DELTA_VM_ALLOC_CHUNK, // s_int "
MEMINFO_DELTA_VM_ALLOC_TOTAL, // s_int MEMINFO_DELTA_VM_ALLOC_TOTAL, // s_int "
MEMINFO_DELTA_VM_ALLOC_USED, // s_int MEMINFO_DELTA_VM_ALLOC_USED, // s_int "
MEMINFO_DELTA_WRITEBACK, // s_int MEMINFO_DELTA_WRITEBACK, // s_int "
MEMINFO_DELTA_WRITEBACK_TMP, // s_int MEMINFO_DELTA_WRITEBACK_TMP, // s_int "
MEMINFO_MEMHI_FREE, // ul_int MEMINFO_MEMHI_FREE, // ul_int /proc/meminfo
MEMINFO_MEMHI_TOTAL, // ul_int MEMINFO_MEMHI_TOTAL, // ul_int "
MEMINFO_MEMHI_USED, // ul_int MEMINFO_MEMHI_USED, // ul_int "
MEMINFO_MEMLO_FREE, // ul_int MEMINFO_MEMLO_FREE, // ul_int "
MEMINFO_MEMLO_TOTAL, // ul_int MEMINFO_MEMLO_TOTAL, // ul_int "
MEMINFO_MEMLO_USED, // ul_int MEMINFO_MEMLO_USED, // ul_int "
MEMINFO_SWAP_CACHED, // ul_int MEMINFO_SWAP_CACHED, // ul_int "
MEMINFO_SWAP_FREE, // ul_int MEMINFO_SWAP_FREE, // ul_int "
MEMINFO_SWAP_TOTAL, // ul_int MEMINFO_SWAP_TOTAL, // ul_int "
MEMINFO_SWAP_USED, // ul_int MEMINFO_SWAP_USED, // ul_int "
MEMINFO_SWAP_DELTA_CACHED, // s_int MEMINFO_SWAP_DELTA_CACHED, // s_int dervied from above
MEMINFO_SWAP_DELTA_FREE, // s_int MEMINFO_SWAP_DELTA_FREE, // s_int "
MEMINFO_SWAP_DELTA_TOTAL, // s_int MEMINFO_SWAP_DELTA_TOTAL, // s_int "
MEMINFO_SWAP_DELTA_USED // s_int MEMINFO_SWAP_DELTA_USED // s_int "
}; };

View File

@ -30,125 +30,127 @@ extern "C" {
enum pids_item { enum pids_item {
PIDS_noop, // ( never altered ) PIDS_noop, // ( never altered )
PIDS_extra, // ( reset to zero ) PIDS_extra, // ( reset to zero )
PIDS_ADDR_END_CODE, // ul_int // returns origin, see proc(5)
PIDS_ADDR_KSTK_EIP, // ul_int // ------- -------------------
PIDS_ADDR_KSTK_ESP, // ul_int PIDS_ADDR_END_CODE, // ul_int stat
PIDS_ADDR_START_CODE, // ul_int PIDS_ADDR_KSTK_EIP, // ul_int stat
PIDS_ADDR_START_STACK, // ul_int PIDS_ADDR_KSTK_ESP, // ul_int stat
PIDS_CGNAME, // str PIDS_ADDR_START_CODE, // ul_int stat
PIDS_CGROUP, // str PIDS_ADDR_START_STACK, // ul_int stat
PIDS_CGROUP_V, // strv PIDS_CGNAME, // str cgroup
PIDS_CMD, // str PIDS_CGROUP, // str cgroup
PIDS_CMDLINE, // str PIDS_CGROUP_V, // strv cgroup
PIDS_CMDLINE_V, // strv PIDS_CMD, // str stat or status
PIDS_ENVIRON, // str PIDS_CMDLINE, // str cmdline
PIDS_ENVIRON_V, // strv PIDS_CMDLINE_V, // strv cmdline
PIDS_EXE, // str PIDS_ENVIRON, // str environ
PIDS_EXIT_SIGNAL, // s_int PIDS_ENVIRON_V, // strv environ
PIDS_FLAGS, // ul_int PIDS_EXE, // str exe
PIDS_FLT_MAJ, // ul_int PIDS_EXIT_SIGNAL, // s_int stat
PIDS_FLT_MAJ_C, // ul_int PIDS_FLAGS, // ul_int stat
PIDS_FLT_MAJ_DELTA, // s_int PIDS_FLT_MAJ, // ul_int stat
PIDS_FLT_MIN, // ul_int PIDS_FLT_MAJ_C, // ul_int stat
PIDS_FLT_MIN_C, // ul_int PIDS_FLT_MAJ_DELTA, // s_int stat
PIDS_FLT_MIN_DELTA, // s_int PIDS_FLT_MIN, // ul_int stat
PIDS_ID_EGID, // u_int PIDS_FLT_MIN_C, // ul_int stat
PIDS_ID_EGROUP, // str PIDS_FLT_MIN_DELTA, // s_int stat
PIDS_ID_EUID, // u_int PIDS_ID_EGID, // u_int status
PIDS_ID_EUSER, // str PIDS_ID_EGROUP, // str [ EGID based, see: getgrgid(3) ]
PIDS_ID_FGID, // u_int PIDS_ID_EUID, // u_int status
PIDS_ID_FGROUP, // str PIDS_ID_EUSER, // str [ EUID based, see: getpwuid(3) ]
PIDS_ID_FUID, // u_int PIDS_ID_FGID, // u_int status
PIDS_ID_FUSER, // str PIDS_ID_FGROUP, // str [ FGID based, see: getgrgid(3) ]
PIDS_ID_LOGIN, // s_int PIDS_ID_FUID, // u_int status
PIDS_ID_PGRP, // s_int PIDS_ID_FUSER, // str [ FUID based, see: getpwuid(3) ]
PIDS_ID_PID, // s_int PIDS_ID_LOGIN, // s_int loginuid
PIDS_ID_PPID, // s_int PIDS_ID_PGRP, // s_int stat
PIDS_ID_RGID, // u_int PIDS_ID_PID, // s_int as: /proc/<pid>
PIDS_ID_RGROUP, // str PIDS_ID_PPID, // s_int stat or status
PIDS_ID_RUID, // u_int PIDS_ID_RGID, // u_int status
PIDS_ID_RUSER, // str PIDS_ID_RGROUP, // str [ RGID based, see: getgrgid(3) ]
PIDS_ID_SESSION, // s_int PIDS_ID_RUID, // u_int status
PIDS_ID_SGID, // u_int PIDS_ID_RUSER, // str [ RUID based, see: getpwuid(3) ]
PIDS_ID_SGROUP, // str PIDS_ID_SESSION, // s_int stat
PIDS_ID_SUID, // u_int PIDS_ID_SGID, // u_int status
PIDS_ID_SUSER, // str PIDS_ID_SGROUP, // str [ SGID based, see: getgrgid(3) ]
PIDS_ID_TGID, // s_int PIDS_ID_SUID, // u_int status
PIDS_ID_TID, // s_int PIDS_ID_SUSER, // str [ SUID based, see: getpwuid(3) ]
PIDS_ID_TPGID, // s_int PIDS_ID_TGID, // s_int status
PIDS_LXCNAME, // str PIDS_ID_TID, // s_int as: /proc/<pid>/task/<tid>
PIDS_MEM_CODE, // ul_int PIDS_ID_TPGID, // s_int stat
PIDS_MEM_CODE_PGS, // ul_int PIDS_LXCNAME, // str cgroup
PIDS_MEM_DATA, // ul_int PIDS_MEM_CODE, // ul_int statm
PIDS_MEM_DATA_PGS, // ul_int PIDS_MEM_CODE_PGS, // ul_int statm
PIDS_MEM_RES, // ul_int PIDS_MEM_DATA, // ul_int statm
PIDS_MEM_RES_PGS, // ul_int PIDS_MEM_DATA_PGS, // ul_int statm
PIDS_MEM_SHR, // ul_int PIDS_MEM_RES, // ul_int statm
PIDS_MEM_SHR_PGS, // ul_int PIDS_MEM_RES_PGS, // ul_int statm
PIDS_MEM_VIRT, // ul_int PIDS_MEM_SHR, // ul_int statm
PIDS_MEM_VIRT_PGS, // ul_int PIDS_MEM_SHR_PGS, // ul_int statm
PIDS_NICE, // s_int PIDS_MEM_VIRT, // ul_int statm
PIDS_NLWP, // s_int PIDS_MEM_VIRT_PGS, // ul_int statm
PIDS_NS_IPC, // ul_int PIDS_NICE, // s_int stat
PIDS_NS_MNT, // ul_int PIDS_NLWP, // s_int stat or status
PIDS_NS_NET, // ul_int PIDS_NS_IPC, // ul_int ns/
PIDS_NS_PID, // ul_int PIDS_NS_MNT, // ul_int ns/
PIDS_NS_USER, // ul_int PIDS_NS_NET, // ul_int ns/
PIDS_NS_UTS, // ul_int PIDS_NS_PID, // ul_int ns/
PIDS_OOM_ADJ, // s_int PIDS_NS_USER, // ul_int ns/
PIDS_OOM_SCORE, // s_int PIDS_NS_UTS, // ul_int ns/
PIDS_PRIORITY, // s_int PIDS_OOM_ADJ, // s_int oom_score_adj
PIDS_PROCESSOR, // u_int PIDS_OOM_SCORE, // s_int oom_score
PIDS_PROCESSOR_NODE, // s_int PIDS_PRIORITY, // s_int stat
PIDS_RSS, // ul_int PIDS_PROCESSOR, // u_int stat
PIDS_RSS_RLIM, // ul_int PIDS_PROCESSOR_NODE, // s_int stat
PIDS_RTPRIO, // s_int PIDS_RSS, // ul_int stat
PIDS_SCHED_CLASS, // s_int PIDS_RSS_RLIM, // ul_int stat
PIDS_SD_MACH, // str PIDS_RTPRIO, // s_int stat
PIDS_SD_OUID, // str PIDS_SCHED_CLASS, // s_int stat
PIDS_SD_SEAT, // str PIDS_SD_MACH, // str [ PID/TID based, see: sd-login(3) ]
PIDS_SD_SESS, // str PIDS_SD_OUID, // str "
PIDS_SD_SLICE, // str PIDS_SD_SEAT, // str "
PIDS_SD_UNIT, // str PIDS_SD_SESS, // str "
PIDS_SD_UUNIT, // str PIDS_SD_SLICE, // str "
PIDS_SIGBLOCKED, // str PIDS_SD_UNIT, // str "
PIDS_SIGCATCH, // str PIDS_SD_UUNIT, // str "
PIDS_SIGIGNORE, // str PIDS_SIGBLOCKED, // str status
PIDS_SIGNALS, // str PIDS_SIGCATCH, // str status
PIDS_SIGPENDING, // str PIDS_SIGIGNORE, // str status
PIDS_STATE, // s_ch PIDS_SIGNALS, // str status
PIDS_SUPGIDS, // str PIDS_SIGPENDING, // str status
PIDS_SUPGROUPS, // str PIDS_STATE, // s_ch stat or status
PIDS_TICS_ALL, // ull_int PIDS_SUPGIDS, // str status
PIDS_TICS_ALL_C, // ull_int PIDS_SUPGROUPS, // str [ SUPGIDS based, see: getgrgid(3) ]
PIDS_TICS_ALL_DELTA, // s_int PIDS_TICS_ALL, // ull_int stat
PIDS_TICS_BLKIO, // ull_int PIDS_TICS_ALL_C, // ull_int stat
PIDS_TICS_GUEST, // ull_int PIDS_TICS_ALL_DELTA, // s_int stat
PIDS_TICS_GUEST_C, // ull_int PIDS_TICS_BLKIO, // ull_int stat
PIDS_TICS_SYSTEM, // ull_int PIDS_TICS_GUEST, // ull_int stat
PIDS_TICS_SYSTEM_C, // ull_int PIDS_TICS_GUEST_C, // ull_int stat
PIDS_TICS_USER, // ull_int PIDS_TICS_SYSTEM, // ull_int stat
PIDS_TICS_USER_C, // ull_int PIDS_TICS_SYSTEM_C, // ull_int stat
PIDS_TIME_ALL, // ull_int PIDS_TICS_USER, // ull_int stat
PIDS_TIME_ELAPSED, // ull_int PIDS_TICS_USER_C, // ull_int stat
PIDS_TIME_START, // ull_int PIDS_TIME_ALL, // ull_int stat
PIDS_TTY, // s_int PIDS_TIME_ELAPSED, // ull_int stat
PIDS_TTY_NAME, // str PIDS_TIME_START, // ull_int stat
PIDS_TTY_NUMBER, // str PIDS_TTY, // s_int stat
PIDS_VM_DATA, // ul_int PIDS_TTY_NAME, // str stat
PIDS_VM_EXE, // ul_int PIDS_TTY_NUMBER, // str stat
PIDS_VM_LIB, // ul_int PIDS_VM_DATA, // ul_int status
PIDS_VM_RSS, // ul_int PIDS_VM_EXE, // ul_int status
PIDS_VM_RSS_ANON, // ul_int PIDS_VM_LIB, // ul_int status
PIDS_VM_RSS_FILE, // ul_int PIDS_VM_RSS, // ul_int status
PIDS_VM_RSS_LOCKED, // ul_int PIDS_VM_RSS_ANON, // ul_int status
PIDS_VM_RSS_SHARED, // ul_int PIDS_VM_RSS_FILE, // ul_int status
PIDS_VM_SIZE, // ul_int PIDS_VM_RSS_LOCKED, // ul_int status
PIDS_VM_STACK, // ul_int PIDS_VM_RSS_SHARED, // ul_int status
PIDS_VM_SWAP, // ul_int PIDS_VM_SIZE, // ul_int status
PIDS_VM_USED, // ul_int PIDS_VM_STACK, // ul_int status
PIDS_VSIZE_PGS, // ul_int PIDS_VM_SWAP, // ul_int status
PIDS_WCHAN_NAME // str PIDS_VM_USED, // ul_int status
PIDS_VSIZE_PGS, // ul_int stat
PIDS_WCHAN_NAME // str wchan
}; };
enum pids_fetch_type { enum pids_fetch_type {

View File

@ -24,49 +24,50 @@
#define PROCPS_SLABINFO_H #define PROCPS_SLABINFO_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C "{
#endif #endif
enum slabinfo_item { enum slabinfo_item {
SLABINFO_noop, // ( never altered ) SLABINFO_noop, // ( never altered )
SLABINFO_extra, // ( reset to zero ) SLABINFO_extra, // ( reset to zero )
// returns origin, see proc(5)
// ------- -------------------
SLABS_OBJS, // u_int /proc/slabinfo
SLABS_AOBJS, // u_int "
SLABS_PAGES, // u_int "
SLABS_SLABS, // u_int "
SLABS_ASLABS, // u_int "
SLABS_CACHES, // u_int "
SLABS_ACACHES, // u_int "
SLABS_SIZE_AVG, // u_int "
SLABS_SIZE_MIN, // u_int "
SLABS_SIZE_MAX, // u_int "
SLABS_SIZE_ACTIVE, // ul_int "
SLABS_SIZE_TOTAL, // ul_int "
SLABS_OBJS, // u_int SLABS_DELTA_OBJS, // s_int dervied from above
SLABS_AOBJS, // u_int SLABS_DELTA_AOBJS, // s_int "
SLABS_PAGES, // u_int SLABS_DELTA_PAGES, // s_int "
SLABS_SLABS, // u_int SLABS_DELTA_SLABS, // s_int "
SLABS_ASLABS, // u_int SLABS_DELTA_ASLABS, // s_int "
SLABS_CACHES, // u_int SLABS_DELTA_CACHES, // s_int "
SLABS_ACACHES, // u_int SLABS_DELTA_ACACHES, // s_int "
SLABS_SIZE_AVG, // u_int SLABS_DELTA_SIZE_AVG, // s_int "
SLABS_SIZE_MIN, // u_int SLABS_DELTA_SIZE_MIN, // s_int "
SLABS_SIZE_MAX, // u_int SLABS_DELTA_SIZE_MAX, // s_int "
SLABS_SIZE_ACTIVE, // ul_int SLABS_DELTA_SIZE_ACTIVE, // s_int "
SLABS_SIZE_TOTAL, // ul_int SLABS_DELTA_SIZE_TOTAL, // s_int "
SLABS_DELTA_OBJS, // s_int SLABNODE_NAME, // str /proc/slabinfo
SLABS_DELTA_AOBJS, // s_int SLABNODE_OBJS, // u_int "
SLABS_DELTA_PAGES, // s_int SLABNODE_AOBJS, // u_int "
SLABS_DELTA_SLABS, // s_int SLABNODE_OBJ_SIZE, // u_int "
SLABS_DELTA_ASLABS, // s_int SLABNODE_OBJS_PER_SLAB, // u_int "
SLABS_DELTA_CACHES, // s_int SLABNODE_PAGES_PER_SLAB, // u_int "
SLABS_DELTA_ACACHES, // s_int SLABNODE_SLABS, // u_int "
SLABS_DELTA_SIZE_AVG, // s_int SLABNODE_ASLABS, // u_int "
SLABS_DELTA_SIZE_MIN, // s_int SLABNODE_USE, // u_int "
SLABS_DELTA_SIZE_MAX, // s_int SLABNODE_SIZE // ul_int "
SLABS_DELTA_SIZE_ACTIVE, // s_int
SLABS_DELTA_SIZE_TOTAL, // s_int
SLABNODE_NAME, // str
SLABNODE_OBJS, // u_int
SLABNODE_AOBJS, // u_int
SLABNODE_OBJ_SIZE, // u_int
SLABNODE_OBJS_PER_SLAB, // u_int
SLABNODE_PAGES_PER_SLAB, // u_int
SLABNODE_SLABS, // u_int
SLABNODE_ASLABS, // u_int
SLABNODE_USE, // u_int
SLABNODE_SIZE // ul_int
}; };
enum slabinfo_sort_order { enum slabinfo_sort_order {

View File

@ -26,56 +26,57 @@ extern "C" {
enum stat_item { enum stat_item {
STAT_noop, // ( never altered ) STAT_noop, // ( never altered )
STAT_extra, // ( reset to zero ) STAT_extra, // ( reset to zero )
// returns origin, see proc(5)
// ------- -------------------
STAT_TIC_ID, // s_int /proc/stat
STAT_TIC_NUMA_NODE, // s_int [ ID based, see: numa(3) ]
STAT_TIC_NUM_CONTRIBUTORS, // s_int [ ID based, see: numa(3) ]
STAT_TIC_USER, // ull_int /proc/stat
STAT_TIC_NICE, // ull_int "
STAT_TIC_SYSTEM, // ull_int "
STAT_TIC_IDLE, // ull_int "
STAT_TIC_IOWAIT, // ull_int "
STAT_TIC_IRQ, // ull_int "
STAT_TIC_SOFTIRQ, // ull_int "
STAT_TIC_STOLEN, // ull_int "
STAT_TIC_GUEST, // ull_int "
STAT_TIC_GUEST_NICE, // ull_int "
STAT_TIC_ID, // s_int STAT_TIC_SUM_TOTAL, // ull_int "
STAT_TIC_NUMA_NODE, // s_int STAT_TIC_SUM_BUSY, // ull_int "
STAT_TIC_NUM_CONTRIBUTORS, // s_int STAT_TIC_SUM_IDLE, // ull_int "
STAT_TIC_USER, // ull_int STAT_TIC_SUM_USER, // ull_int "
STAT_TIC_NICE, // ull_int STAT_TIC_SUM_SYSTEM, // ull_int "
STAT_TIC_SYSTEM, // ull_int
STAT_TIC_IDLE, // ull_int
STAT_TIC_IOWAIT, // ull_int
STAT_TIC_IRQ, // ull_int
STAT_TIC_SOFTIRQ, // ull_int
STAT_TIC_STOLEN, // ull_int
STAT_TIC_GUEST, // ull_int
STAT_TIC_GUEST_NICE, // ull_int
STAT_TIC_SUM_TOTAL, // ull_int STAT_TIC_DELTA_USER, // sl_int dervied from above
STAT_TIC_SUM_BUSY, // ull_int STAT_TIC_DELTA_NICE, // sl_int "
STAT_TIC_SUM_IDLE, // ull_int STAT_TIC_DELTA_SYSTEM, // sl_int "
STAT_TIC_SUM_USER, // ull_int STAT_TIC_DELTA_IDLE, // sl_int "
STAT_TIC_SUM_SYSTEM, // ull_int STAT_TIC_DELTA_IOWAIT, // sl_int "
STAT_TIC_DELTA_IRQ, // sl_int "
STAT_TIC_DELTA_SOFTIRQ, // sl_int "
STAT_TIC_DELTA_STOLEN, // sl_int "
STAT_TIC_DELTA_GUEST, // sl_int "
STAT_TIC_DELTA_GUEST_NICE, // sl_int "
STAT_TIC_DELTA_USER, // sl_int STAT_TIC_DELTA_SUM_TOTAL, // sl_int "
STAT_TIC_DELTA_NICE, // sl_int STAT_TIC_DELTA_SUM_BUSY, // sl_int "
STAT_TIC_DELTA_SYSTEM, // sl_int STAT_TIC_DELTA_SUM_IDLE, // sl_int "
STAT_TIC_DELTA_IDLE, // sl_int STAT_TIC_DELTA_SUM_USER, // sl_int "
STAT_TIC_DELTA_IOWAIT, // sl_int STAT_TIC_DELTA_SUM_SYSTEM, // sl_int "
STAT_TIC_DELTA_IRQ, // sl_int
STAT_TIC_DELTA_SOFTIRQ, // sl_int
STAT_TIC_DELTA_STOLEN, // sl_int
STAT_TIC_DELTA_GUEST, // sl_int
STAT_TIC_DELTA_GUEST_NICE, // sl_int
STAT_TIC_DELTA_SUM_TOTAL, // sl_int STAT_SYS_CTX_SWITCHES, // ul_int /proc/stat
STAT_TIC_DELTA_SUM_BUSY, // sl_int STAT_SYS_INTERRUPTS, // ul_int "
STAT_TIC_DELTA_SUM_IDLE, // sl_int STAT_SYS_PROC_BLOCKED, // ul_int "
STAT_TIC_DELTA_SUM_USER, // sl_int STAT_SYS_PROC_CREATED, // ul_int "
STAT_TIC_DELTA_SUM_SYSTEM, // sl_int STAT_SYS_PROC_RUNNING, // ul_int "
STAT_SYS_TIME_OF_BOOT, // ul_int "
STAT_SYS_CTX_SWITCHES, // ul_int STAT_SYS_DELTA_CTX_SWITCHES, // s_int dervied from above
STAT_SYS_INTERRUPTS, // ul_int STAT_SYS_DELTA_INTERRUPTS, // s_int "
STAT_SYS_PROC_BLOCKED, // ul_int STAT_SYS_DELTA_PROC_BLOCKED, // s_int "
STAT_SYS_PROC_CREATED, // ul_int STAT_SYS_DELTA_PROC_CREATED, // s_int "
STAT_SYS_PROC_RUNNING, // ul_int STAT_SYS_DELTA_PROC_RUNNING // s_int "
STAT_SYS_TIME_OF_BOOT, // ul_int
STAT_SYS_DELTA_CTX_SWITCHES, // s_int
STAT_SYS_DELTA_INTERRUPTS, // s_int
STAT_SYS_DELTA_PROC_BLOCKED, // s_int
STAT_SYS_DELTA_PROC_CREATED, // s_int
STAT_SYS_DELTA_PROC_RUNNING // s_int
}; };
enum stat_reap_type { enum stat_reap_type {

View File

@ -31,244 +31,245 @@ extern "C" {
enum vmstat_item { enum vmstat_item {
VMSTAT_noop, // ( never altered ) VMSTAT_noop, // ( never altered )
VMSTAT_extra, // ( reset to zero ) VMSTAT_extra, // ( reset to zero )
// returns origin, see proc(5)
// ------- -------------------
VMSTAT_ALLOCSTALL, // ul_int /proc/vmstat
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 "
VMSTAT_ALLOCSTALL, // ul_int VMSTAT_DELTA_ALLOCSTALL, // sl_int dervied from above
VMSTAT_BALLOON_DEFLATE, // ul_int VMSTAT_DELTA_BALLOON_DEFLATE, // sl_int "
VMSTAT_BALLOON_INFLATE, // ul_int VMSTAT_DELTA_BALLOON_INFLATE, // sl_int "
VMSTAT_BALLOON_MIGRATE, // ul_int VMSTAT_DELTA_BALLOON_MIGRATE, // sl_int "
VMSTAT_COMPACT_FAIL, // ul_int VMSTAT_DELTA_COMPACT_FAIL, // sl_int "
VMSTAT_COMPACT_FREE_SCANNED, // ul_int VMSTAT_DELTA_COMPACT_FREE_SCANNED, // sl_int "
VMSTAT_COMPACT_ISOLATED, // ul_int VMSTAT_DELTA_COMPACT_ISOLATED, // sl_int "
VMSTAT_COMPACT_MIGRATE_SCANNED, // ul_int VMSTAT_DELTA_COMPACT_MIGRATE_SCANNED, // sl_int "
VMSTAT_COMPACT_STALL, // ul_int VMSTAT_DELTA_COMPACT_STALL, // sl_int "
VMSTAT_COMPACT_SUCCESS, // ul_int VMSTAT_DELTA_COMPACT_SUCCESS, // sl_int "
VMSTAT_DROP_PAGECACHE, // ul_int VMSTAT_DELTA_DROP_PAGECACHE, // sl_int "
VMSTAT_DROP_SLAB, // ul_int VMSTAT_DELTA_DROP_SLAB, // sl_int "
VMSTAT_HTLB_BUDDY_ALLOC_FAIL, // ul_int VMSTAT_DELTA_HTLB_BUDDY_ALLOC_FAIL, // sl_int "
VMSTAT_HTLB_BUDDY_ALLOC_SUCCESS, // ul_int VMSTAT_DELTA_HTLB_BUDDY_ALLOC_SUCCESS, // sl_int "
VMSTAT_KSWAPD_HIGH_WMARK_HIT_QUICKLY, // ul_int VMSTAT_DELTA_KSWAPD_HIGH_WMARK_HIT_QUICKLY, // sl_int "
VMSTAT_KSWAPD_INODESTEAL, // ul_int VMSTAT_DELTA_KSWAPD_INODESTEAL, // sl_int "
VMSTAT_KSWAPD_LOW_WMARK_HIT_QUICKLY, // ul_int VMSTAT_DELTA_KSWAPD_LOW_WMARK_HIT_QUICKLY, // sl_int "
VMSTAT_NR_ACTIVE_ANON, // ul_int VMSTAT_DELTA_NR_ACTIVE_ANON, // sl_int "
VMSTAT_NR_ACTIVE_FILE, // ul_int VMSTAT_DELTA_NR_ACTIVE_FILE, // sl_int "
VMSTAT_NR_ALLOC_BATCH, // ul_int VMSTAT_DELTA_NR_ALLOC_BATCH, // sl_int "
VMSTAT_NR_ANON_PAGES, // ul_int VMSTAT_DELTA_NR_ANON_PAGES, // sl_int "
VMSTAT_NR_ANON_TRANSPARENT_HUGEPAGES, // ul_int VMSTAT_DELTA_NR_ANON_TRANSPARENT_HUGEPAGES, // sl_int "
VMSTAT_NR_BOUNCE, // ul_int VMSTAT_DELTA_NR_BOUNCE, // sl_int "
VMSTAT_NR_DIRTIED, // ul_int VMSTAT_DELTA_NR_DIRTIED, // sl_int "
VMSTAT_NR_DIRTY, // ul_int VMSTAT_DELTA_NR_DIRTY, // sl_int "
VMSTAT_NR_DIRTY_BACKGROUND_THRESHOLD, // ul_int VMSTAT_DELTA_NR_DIRTY_BACKGROUND_THRESHOLD, // sl_int "
VMSTAT_NR_DIRTY_THRESHOLD, // ul_int VMSTAT_DELTA_NR_DIRTY_THRESHOLD, // sl_int "
VMSTAT_NR_FILE_PAGES, // ul_int VMSTAT_DELTA_NR_FILE_PAGES, // sl_int "
VMSTAT_NR_FREE_CMA, // ul_int VMSTAT_DELTA_NR_FREE_CMA, // sl_int "
VMSTAT_NR_FREE_PAGES, // ul_int VMSTAT_DELTA_NR_FREE_PAGES, // sl_int "
VMSTAT_NR_INACTIVE_ANON, // ul_int VMSTAT_DELTA_NR_INACTIVE_ANON, // sl_int "
VMSTAT_NR_INACTIVE_FILE, // ul_int VMSTAT_DELTA_NR_INACTIVE_FILE, // sl_int "
VMSTAT_NR_ISOLATED_ANON, // ul_int VMSTAT_DELTA_NR_ISOLATED_ANON, // sl_int "
VMSTAT_NR_ISOLATED_FILE, // ul_int VMSTAT_DELTA_NR_ISOLATED_FILE, // sl_int "
VMSTAT_NR_KERNEL_STACK, // ul_int VMSTAT_DELTA_NR_KERNEL_STACK, // sl_int "
VMSTAT_NR_MAPPED, // ul_int VMSTAT_DELTA_NR_MAPPED, // sl_int "
VMSTAT_NR_MLOCK, // ul_int VMSTAT_DELTA_NR_MLOCK, // sl_int "
VMSTAT_NR_PAGES_SCANNED, // ul_int VMSTAT_DELTA_NR_PAGES_SCANNED, // sl_int "
VMSTAT_NR_PAGE_TABLE_PAGES, // ul_int VMSTAT_DELTA_NR_PAGE_TABLE_PAGES, // sl_int "
VMSTAT_NR_SHMEM, // ul_int VMSTAT_DELTA_NR_SHMEM, // sl_int "
VMSTAT_NR_SLAB_RECLAIMABLE, // ul_int VMSTAT_DELTA_NR_SLAB_RECLAIMABLE, // sl_int "
VMSTAT_NR_SLAB_UNRECLAIMABLE, // ul_int VMSTAT_DELTA_NR_SLAB_UNRECLAIMABLE, // sl_int "
VMSTAT_NR_UNEVICTABLE, // ul_int VMSTAT_DELTA_NR_UNEVICTABLE, // sl_int "
VMSTAT_NR_UNSTABLE, // ul_int VMSTAT_DELTA_NR_UNSTABLE, // sl_int "
VMSTAT_NR_VMSCAN_IMMEDIATE_RECLAIM, // ul_int VMSTAT_DELTA_NR_VMSCAN_IMMEDIATE_RECLAIM, // sl_int "
VMSTAT_NR_VMSCAN_WRITE, // ul_int VMSTAT_DELTA_NR_VMSCAN_WRITE, // sl_int "
VMSTAT_NR_WRITEBACK, // ul_int VMSTAT_DELTA_NR_WRITEBACK, // sl_int "
VMSTAT_NR_WRITEBACK_TEMP, // ul_int VMSTAT_DELTA_NR_WRITEBACK_TEMP, // sl_int "
VMSTAT_NR_WRITTEN, // ul_int VMSTAT_DELTA_NR_WRITTEN, // sl_int "
VMSTAT_NUMA_FOREIGN, // ul_int VMSTAT_DELTA_NUMA_FOREIGN, // sl_int "
VMSTAT_NUMA_HINT_FAULTS, // ul_int VMSTAT_DELTA_NUMA_HINT_FAULTS, // sl_int "
VMSTAT_NUMA_HINT_FAULTS_LOCAL, // ul_int VMSTAT_DELTA_NUMA_HINT_FAULTS_LOCAL, // sl_int "
VMSTAT_NUMA_HIT, // ul_int VMSTAT_DELTA_NUMA_HIT, // sl_int "
VMSTAT_NUMA_HUGE_PTE_UPDATES, // ul_int VMSTAT_DELTA_NUMA_HUGE_PTE_UPDATES, // sl_int "
VMSTAT_NUMA_INTERLEAVE, // ul_int VMSTAT_DELTA_NUMA_INTERLEAVE, // sl_int "
VMSTAT_NUMA_LOCAL, // ul_int VMSTAT_DELTA_NUMA_LOCAL, // sl_int "
VMSTAT_NUMA_MISS, // ul_int VMSTAT_DELTA_NUMA_MISS, // sl_int "
VMSTAT_NUMA_OTHER, // ul_int VMSTAT_DELTA_NUMA_OTHER, // sl_int "
VMSTAT_NUMA_PAGES_MIGRATED, // ul_int VMSTAT_DELTA_NUMA_PAGES_MIGRATED, // sl_int "
VMSTAT_NUMA_PTE_UPDATES, // ul_int VMSTAT_DELTA_NUMA_PTE_UPDATES, // sl_int "
VMSTAT_PAGEOUTRUN, // ul_int VMSTAT_DELTA_PAGEOUTRUN, // sl_int "
VMSTAT_PGACTIVATE, // ul_int VMSTAT_DELTA_PGACTIVATE, // sl_int "
VMSTAT_PGALLOC_DMA, // ul_int VMSTAT_DELTA_PGALLOC_DMA, // sl_int "
VMSTAT_PGALLOC_DMA32, // ul_int VMSTAT_DELTA_PGALLOC_DMA32, // sl_int "
VMSTAT_PGALLOC_MOVABLE, // ul_int VMSTAT_DELTA_PGALLOC_MOVABLE, // sl_int "
VMSTAT_PGALLOC_NORMAL, // ul_int VMSTAT_DELTA_PGALLOC_NORMAL, // sl_int "
VMSTAT_PGDEACTIVATE, // ul_int VMSTAT_DELTA_PGDEACTIVATE, // sl_int "
VMSTAT_PGFAULT, // ul_int VMSTAT_DELTA_PGFAULT, // sl_int "
VMSTAT_PGFREE, // ul_int VMSTAT_DELTA_PGFREE, // sl_int "
VMSTAT_PGINODESTEAL, // ul_int VMSTAT_DELTA_PGINODESTEAL, // sl_int "
VMSTAT_PGMAJFAULT, // ul_int VMSTAT_DELTA_PGMAJFAULT, // sl_int "
VMSTAT_PGMIGRATE_FAIL, // ul_int VMSTAT_DELTA_PGMIGRATE_FAIL, // sl_int "
VMSTAT_PGMIGRATE_SUCCESS, // ul_int VMSTAT_DELTA_PGMIGRATE_SUCCESS, // sl_int "
VMSTAT_PGPGIN, // ul_int VMSTAT_DELTA_PGPGIN, // sl_int "
VMSTAT_PGPGOUT, // ul_int VMSTAT_DELTA_PGPGOUT, // sl_int "
VMSTAT_PGREFILL_DMA, // ul_int VMSTAT_DELTA_PGREFILL_DMA, // sl_int "
VMSTAT_PGREFILL_DMA32, // ul_int VMSTAT_DELTA_PGREFILL_DMA32, // sl_int "
VMSTAT_PGREFILL_MOVABLE, // ul_int VMSTAT_DELTA_PGREFILL_MOVABLE, // sl_int "
VMSTAT_PGREFILL_NORMAL, // ul_int VMSTAT_DELTA_PGREFILL_NORMAL, // sl_int "
VMSTAT_PGROTATED, // ul_int VMSTAT_DELTA_PGROTATED, // sl_int "
VMSTAT_PGSCAN_DIRECT_DMA, // ul_int VMSTAT_DELTA_PGSCAN_DIRECT_DMA, // sl_int "
VMSTAT_PGSCAN_DIRECT_DMA32, // ul_int VMSTAT_DELTA_PGSCAN_DIRECT_DMA32, // sl_int "
VMSTAT_PGSCAN_DIRECT_MOVABLE, // ul_int VMSTAT_DELTA_PGSCAN_DIRECT_MOVABLE, // sl_int "
VMSTAT_PGSCAN_DIRECT_NORMAL, // ul_int VMSTAT_DELTA_PGSCAN_DIRECT_NORMAL, // sl_int "
VMSTAT_PGSCAN_DIRECT_THROTTLE, // ul_int VMSTAT_DELTA_PGSCAN_DIRECT_THROTTLE, // sl_int "
VMSTAT_PGSCAN_KSWAPD_DMA, // ul_int VMSTAT_DELTA_PGSCAN_KSWAPD_DMA, // sl_int "
VMSTAT_PGSCAN_KSWAPD_DMA32, // ul_int VMSTAT_DELTA_PGSCAN_KSWAPD_DMA32, // sl_int "
VMSTAT_PGSCAN_KSWAPD_MOVEABLE, // ul_int VMSTAT_DELTA_PGSCAN_KSWAPD_MOVEABLE, // sl_int "
VMSTAT_PGSCAN_KSWAPD_NORMAL, // ul_int VMSTAT_DELTA_PGSCAN_KSWAPD_NORMAL, // sl_int "
VMSTAT_PGSTEAL_DIRECT_DMA, // ul_int VMSTAT_DELTA_PGSTEAL_DIRECT_DMA, // sl_int "
VMSTAT_PGSTEAL_DIRECT_DMA32, // ul_int VMSTAT_DELTA_PGSTEAL_DIRECT_DMA32, // sl_int "
VMSTAT_PGSTEAL_DIRECT_MOVABLE, // ul_int VMSTAT_DELTA_PGSTEAL_DIRECT_MOVABLE, // sl_int "
VMSTAT_PGSTEAL_DIRECT_NORMAL, // ul_int VMSTAT_DELTA_PGSTEAL_DIRECT_NORMAL, // sl_int "
VMSTAT_PGSTEAL_KSWAPD_DMA, // ul_int VMSTAT_DELTA_PGSTEAL_KSWAPD_DMA, // sl_int "
VMSTAT_PGSTEAL_KSWAPD_DMA32, // ul_int VMSTAT_DELTA_PGSTEAL_KSWAPD_DMA32, // sl_int "
VMSTAT_PGSTEAL_KSWAPD_MOVABLE, // ul_int VMSTAT_DELTA_PGSTEAL_KSWAPD_MOVABLE, // sl_int "
VMSTAT_PGSTEAL_KSWAPD_NORMAL, // ul_int VMSTAT_DELTA_PGSTEAL_KSWAPD_NORMAL, // sl_int "
VMSTAT_PSWPIN, // ul_int VMSTAT_DELTA_PSWPIN, // sl_int "
VMSTAT_PSWPOUT, // ul_int VMSTAT_DELTA_PSWPOUT, // sl_int "
VMSTAT_SLABS_SCANNED, // ul_int VMSTAT_DELTA_SLABS_SCANNED, // sl_int "
VMSTAT_THP_COLLAPSE_ALLOC, // ul_int VMSTAT_DELTA_THP_COLLAPSE_ALLOC, // sl_int "
VMSTAT_THP_COLLAPSE_ALLOC_FAILED, // ul_int VMSTAT_DELTA_THP_COLLAPSE_ALLOC_FAILED, // sl_int "
VMSTAT_THP_FAULT_ALLOC, // ul_int VMSTAT_DELTA_THP_FAULT_ALLOC, // sl_int "
VMSTAT_THP_FAULT_FALLBACK, // ul_int VMSTAT_DELTA_THP_FAULT_FALLBACK, // sl_int "
VMSTAT_THP_SPLIT, // ul_int VMSTAT_DELTA_THP_SPLIT, // sl_int "
VMSTAT_THP_ZERO_PAGE_ALLOC, // ul_int VMSTAT_DELTA_THP_ZERO_PAGE_ALLOC, // sl_int "
VMSTAT_THP_ZERO_PAGE_ALLOC_FAILED, // ul_int VMSTAT_DELTA_THP_ZERO_PAGE_ALLOC_FAILED, // sl_int "
VMSTAT_UNEVICTABLE_PGS_CLEARED, // ul_int VMSTAT_DELTA_UNEVICTABLE_PGS_CLEARED, // sl_int "
VMSTAT_UNEVICTABLE_PGS_CULLED, // ul_int VMSTAT_DELTA_UNEVICTABLE_PGS_CULLED, // sl_int "
VMSTAT_UNEVICTABLE_PGS_MLOCKED, // ul_int VMSTAT_DELTA_UNEVICTABLE_PGS_MLOCKED, // sl_int "
VMSTAT_UNEVICTABLE_PGS_MUNLOCKED, // ul_int VMSTAT_DELTA_UNEVICTABLE_PGS_MUNLOCKED, // sl_int "
VMSTAT_UNEVICTABLE_PGS_RESCUED, // ul_int VMSTAT_DELTA_UNEVICTABLE_PGS_RESCUED, // sl_int "
VMSTAT_UNEVICTABLE_PGS_SCANNED, // ul_int VMSTAT_DELTA_UNEVICTABLE_PGS_SCANNED, // sl_int "
VMSTAT_UNEVICTABLE_PGS_STRANDED, // ul_int VMSTAT_DELTA_UNEVICTABLE_PGS_STRANDED, // sl_int "
VMSTAT_WORKINGSET_ACTIVATE, // ul_int VMSTAT_DELTA_WORKINGSET_ACTIVATE, // sl_int "
VMSTAT_WORKINGSET_NODERECLAIM, // ul_int VMSTAT_DELTA_WORKINGSET_NODERECLAIM, // sl_int "
VMSTAT_WORKINGSET_REFAULT, // ul_int VMSTAT_DELTA_WORKINGSET_REFAULT, // sl_int "
VMSTAT_ZONE_RECLAIM_FAILED, // ul_int VMSTAT_DELTA_ZONE_RECLAIM_FAILED // sl_int "
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
}; };