Understanding output of free in Ubuntu 16.04

This post explains output of free command in Ubuntu 16.04 paying special attention to information missing in documentation.

Understanding output

Let’s look at free output in humanreadable, wide mode:

free -hw

        total   used   free   shared   buffers   cache   available
Mem:     2.0G   566M   860M      14M       41M    531M        1.2G
Swap:    4.0G     0B   4.0G

Note that output of free command in Ubuntu 16.04 differs from previous versions.

There are two lines in the output. Mem row shows phisical memory stats. Swap line displays swap stats.

Phisical memory

total: Total installed memory.

used: Cacluclated as total - free - buffers - cache.

free: Unused memory.

shared: Mostly memory occupied by tmpfs, but also includes memory shared among several processeses via IPC.

Linux tmpfs is a temporary file system stored in memory instead of a persistent storage. Mounting directory as tmpfs can be an effective way of speeding up file access. Also it ensures that directory contents is automatically cleared upon reboot.

buffers: In-memory block I/O buffers, not included in cache. They are relatively short-lived, small, and can be neglected. These buffers store non-file data blocks and are not represented in the Page Cache.

cache: Memory used by the Page Cache and slabs. Page Cache is the best candidate to shrink when system needs more memory.

Page Cache

Prior to Linux kernel version 2.4, Linux had two separate caches: page cache and buffer cache. Page cache stored file data. Buffer cache kept disk blocks. In practice, most files live in disk filesystem, so the same data was cached twice, once in each cache.

To avoid duplication, Linux kernel version 2.4 merged page cache with part of buffer cache keeping page cache data blocks and called it Page Cache. From that version, buffer cache significantly shrank and only keeps non-file data blocks.

Slabs

Linux kernel allocates and deallocates lots of data objects during operation. Kernel objects often require memory chunks of the same size. To eliminate fragmentation and significantly improve performance, kernel preallocates and caches these objects. A slab is the amount by which such cache can grow or shrink.

available: Estimation of memory available for starting new applications without swapping. It takes into account Page Cache and that not all reclaimable memory slabs will be reclaimed, because they are being in use.

Swap

total: Total swap in system.

buffers: Same as memory, but in swap.

cache: Same as memory, but in swap.