Memory Jargons
/proc/meminfo (free)
$ man proc_meminfo
- MemTotal (total)
- total usable RAM i.e. total physical RAM minus reserved bits and kernel binary code.
- MemAvailable
- memory that can bed used if there is demand. Memory could be used for file caches by the kernel and still marked as availabe.
- MemFree (free)
- the “free” memory per se. Memory that is not used for ANY purpose. This is roughly MemAvailable - Cache - Buffer.
- Low/HighFree
- amount of free Low/High memory (see notes below)
- Low/HighTotal
- total amount of Low/High memory
Cached In-memory cache for files read from disk (excl. SwapCached)
Buffers TODO
SwapTotal/Free Amount of total/free swap space
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.)
Active / Inactive; also for anon and file Memory recently (/ less) used; ususally not (/ more eligible) to reclaim.
Unevictable
MLocked
- used: memory in use
- free: memory not in use
- shared
- buffers
- cached
- shared / buffers / cached values are included in
used
Low and High memory
dogma: with paging enabled, the OS can only access memory via virtual address.
This is rather a legacy term. 32bit kernel can address 2^32 = 4GiB of virtual memory. A typical config is that kernel takes upper 1GiB and user takes lower 3GiB. The kernel can map ~860 MB of physical memory; Physical memory above this line is highmem. Access to highmem requires temporary mapping and is slower.
In contrast, 64bits kernel has a virtual memory space (48 bits = 256 TB) much larger than physical memory, the kernel can map the whole available physical address space to its virtual address space via a fixed mapping e.g.
VA = PA + offset
/proc/status
$ free -h
total used free shared buff/cache available
Mem: 15Gi 9.7Gi 2.1Gi 2.9Gi 6.8Gi 5.7Gi
Swap: 15Gi 725Mi 15Gi
$ cat /proc/<pid>/ status # only showing memory related
Name: systemd
VmPeak: 31296 kB
VmSize: 23560 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 20864 kB
VmRSS: 14244 kB
RssAnon: 4948 kB
RssFile: 9296 kB
RssShmem 0 kB
VmData: 4464 kB
VmStk: 132 kB
VmExe: 56 kB
VmLib: 12112 kB
VmPTE: 92 kB
VmSwap: 424 kB
HugetlbPages: 0 kB
Mems_allowed: [SNIP]
Mems_allowed_list: 0