Struct procfs::Meminfo[][src]

pub struct Meminfo {
    pub mem_total: u64,
    pub mem_free: u64,
    pub mem_available: Option<u64>,
    pub buffers: u64,
    pub cached: u64,
    pub swap_cached: u64,
    pub active: u64,
    pub inactive: u64,
    pub active_anon: Option<u64>,
    pub inactive_anon: Option<u64>,
    pub active_file: Option<u64>,
    pub inactive_file: Option<u64>,
    pub unevictable: Option<u64>,
    pub mlocked: Option<u64>,
    pub high_total: Option<u64>,
    pub high_free: Option<u64>,
    pub low_total: Option<u64>,
    pub low_free: Option<u64>,
    pub mmap_copy: Option<u64>,
    pub swap_total: u64,
    pub swap_free: u64,
    pub dirty: u64,
    pub writeback: u64,
    pub anon_pages: Option<u64>,
    pub mapped: u64,
    pub shmem: Option<u64>,
    pub slab: u64,
    pub s_reclaimable: Option<u64>,
    pub s_unreclaim: Option<u64>,
    pub kernel_stack: Option<u64>,
    pub page_tables: Option<u64>,
    pub quicklists: Option<u64>,
    pub nfs_unstable: Option<u64>,
    pub bounce: Option<u64>,
    pub writeback_tmp: Option<u64>,
    pub commit_limit: Option<u64>,
    pub committed_as: u64,
    pub vmalloc_total: u64,
    pub vmalloc_used: u64,
    pub vmalloc_chunk: u64,
    pub hardware_corrupted: Option<u64>,
    pub anon_hugepages: Option<u64>,
    pub shmem_hugepages: Option<u64>,
    pub shmem_pmd_mapped: Option<u64>,
    pub cma_total: Option<u64>,
    pub cma_free: Option<u64>,
    pub hugepages_total: Option<u64>,
    pub hugepages_free: Option<u64>,
    pub hugepages_rsvd: Option<u64>,
    pub hugepages_surp: Option<u64>,
    pub hugepagesize: Option<u64>,
    pub direct_map_4k: Option<u64>,
    pub direct_map_4M: Option<u64>,
    pub direct_map_2M: Option<u64>,
    pub direct_map_1G: Option<u64>,
}

This struct reports statistics about memory usage on the system, based on the /proc/meminfo file.

It is used by free(1) to report the amount of free and used memory (both physical and swap) on the system as well as the shared memory and buffers used by the kernel. Each struct member is generally reported in bytes, but a few are unitless values.

Except as noted below, all of the fields have been present since at least Linux 2.6.0. Some fields are optional and are present only if the kernel was configured with various options; those dependencies are noted in the list.

Notes

While the file shows kilobytes (kB; 1 kB equals 1000 B), it is actually kibibytes (KiB; 1 KiB equals 1024 B).

This imprecision in /proc/meminfo is known, but is not corrected due to legacy concerns - programs rely on /proc/meminfo to specify size with the "kB" string.

Fields

Total usable RAM (i.e., physical RAM minus a few reserved bits and the kernel binary code).

The sum of LowFree + HighFree.

An estimate of how much memory is available for starting new applications, without swapping.

(since Linux 3.14)

Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20MB or so).

In-memory cache for files read from the disk (the page cache). Doesn't include SwapCached.

Memory that once was swapped out, is swapped back in but still also is in the swap file.

(If memory pressure is high, these pages don't need to be swapped out again because they are already in the swap file. This saves I/O.)

Memory that has been used more recently and usually not reclaimed unless absolutely necessary.

Memory which has been less recently used. It is more eligible to be reclaimed for other purposes.

[To be documented.]

(since Linux 2.6.28)

[To be documented.]

(since Linux 2.6.28)

[To be documented.]

(since Linux 2.6.28)

[To be documented.]

(since Linux 2.6.28)

[To be documented.]

(From Linux 2.6.28 to 2.6.30, CONFIG_UNEVICTABLE_LRU was required.)

[To be documented.]

(From Linux 2.6.28 to 2.6.30, CONFIG_UNEVICTABLE_LRU was required.)

Total amount of highmem.

Highmem is all memory above ~860MB of physicalcal memory. Highmem areas are for use by user-space programs, or for the page cache. The kernel must use tricks to access this memory, making it slower to access than lowmem.

(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.)

Amount of free highmem.

(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.)

Total amount of lowmem.

Lowmem is memory which can be used for every thing that highmem can be used for, but it is also available for the kernel's use for its own data structures. Among many other things, it is where everything from Slab is allocated. Bad things happen when you're out of lowmem.

(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.)

Amount of free lowmem.

(Starting with Linux 2.6.19, CONFIG_HIGHMEM is required.)

[To be documented.]

(since Linux 2.6.29. CONFIG_MMU is required.)

Total amount of swap space available.

Amount of swap space that is currently unused.

Memory which is waiting to get written back to the disk.

Memory which is actively being written back to the disk.

Non-file backed pages mapped into user-space page tables.

(since Linux 2.6.18)

Files which have been mapped into memory (with mmap(2)), such as libraries.

Amount of memory consumed in tmpfs(5) filesystems.

(since Linux 2.6.32)

In-kernel data structures cache.

Part of Slab, that cannot be reclaimed on memory pressure.

(since Linux 2.6.19)

Part of Slab, that cannot be reclaimed on memory pressure.

(since Linux 2.6.19)

Amount of memory allocated to kernel stacks.

(since Linux 2.6.32)

Amount of memory dedicated to the lowest level of page tables.

(since Linux 2.6.18)

[To be documented.]

(CONFIG_QUICKLIST is required. Since Linux 2.6.27)

NFS pages sent to the server, but not yet committed to stable storage.

(since Linux 2.6.18)

Memory used for block device "bounce buffers".

(since Linux 2.6.18)

Memory used by FUSE for temporary writeback buffers.

(since Linux 2.6.26)

This is the total amount of memory currently available to be allocated on the system, expressed in bytes.

This limit is adhered to only if strict overcommit accounting is enabled (mode 2 in /proc/sys/vm/overcommit_memory). The limit is calculated according to the formula described under /proc/sys/vm/overcommit_memory. For further details, see the kernel source file Documentation/vm/overcommit-accounting.

(since Linux 2.6.10)

The amount of memory presently allocated on the system.

The committed memory is a sum of all of the memory which has been allocated cated by processes, even if it has not been "used" by them as of yet. A process which allocates 1GB of memory (using malloc(3) or similar), but touches only 300MB of that memory will show up as using only 300MB of memory even if it has the address space allocated for the entire 1GB.

This 1GB is memory which has been "committed" to by the VM and can be used at any time by the allocating application. With strict overcommit enabled on the system (mode 2 in /proc/sys/vm/overcommit_memory), allocations which would exceed the Committed_AS mitLimit will not be permitted. This is useful if one needs to guarantee that processes will not fail due to lack of memory once that memory has been successfully allocated.

Total size of vmalloc memory area.

Amount of vmalloc area which is used.

Largest contiguous block of vmalloc area which is free.

[To be documented.]

(CONFIG_MEMORY_FAILURE is required. Since Linux 2.6.32)

Non-file backed huge pages mapped into user-space page tables.

(CONFIG_TRANSPARENT_HUGEPAGE is required. Since Linux 2.6.38)

Memory used by shared memory (shmem) and tmpfs(5) allocated with huge pages

(CONFIG_TRANSPARENT_HUGEPAGE is required. Since Linux 4.8)

Shared memory mapped into user space with huge pages.

(CONFIG_TRANSPARENT_HUGEPAGE is required. Since Linux 4.8)

Total CMA (Contiguous Memory Allocator) pages.

(CONFIG_CMA is required. Since Linux 3.1)

Free CMA (Contiguous Memory Allocator) pages.

(CONFIG_CMA is required. Since Linux 3.1)

The size of the pool of huge pages.

CONFIG_HUGETLB_PAGE is required.)

The number of huge pages in the pool that are not yet allocated.

(CONFIG_HUGETLB_PAGE is required.)

This is the number of huge pages for which a commitment to allocate from the pool has been made, but no allocation has yet been made.

These reserved huge pages guarantee that an application will be able to allocate a huge page from the pool of huge pages at fault time.

(CONFIG_HUGETLB_PAGE is required. Since Linux 2.6.17)

This is the number of huge pages in the pool above the value in /proc/sys/vm/nr_hugepages.

The maximum number of surplus huge pages is controlled by /proc/sys/vm/nr_overcommit_hugepages.

(CONFIG_HUGETLB_PAGE is required. Since Linux 2.6.24)

The size of huge pages.

(CONFIG_HUGETLB_PAGE is required.)

Number of bytes of RAM linearly mapped by kernel in 4kB pages. (x86.)

(since Linux 2.6.27)

Number of bytes of RAM linearly mapped by kernel in 4MB pages.

(x86 with CONFIG_X86_64 or CONFIG_X86_PAE enabled. Since Linux 2.6.27)

Number of bytes of RAM linearly mapped by kernel in 2MB pages.

(x86 with neither CONFIG_X86_64 nor CONFIG_X86_PAE enabled. Since Linux 2.6.27)

(x86 with CONFIG_X86_64 and CONFIG_X86_DIRECT_GBPAGES enabled. Since Linux 2.6.27)

Methods

impl Meminfo
[src]

Reads and parses the /proc/meminfo, returning None if there are problems.

Panics

This may panic if expected fields are missing. This can happen when running on kernels older than 2.6.0.

Trait Implementations

impl Debug for Meminfo
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations

impl Send for Meminfo

impl Sync for Meminfo