The canonical source of this information is /usr/src/linux/Documentation/filesystems/proc.txt
Buffers: Relatively temporary storage for raw disk blocks shouldn't
get tremendously large (20MB or so)
Cached: in-memory cache for files
read from the disk (the page cache). Doesn't include SwapCached.
You can also find some more details here.
The Linux Page Cache ("Cached:" from meminfo ) is the largest single
consumer of RAM on most systems. Any time you do a read() from a file
on disk, that data is read into memory, and goes into the page
cache(1.).
The buffer cache ("Buffers:" in meminfo) is a close
relative to the dentry/inode caches.
Or analysis the source code like this.
The amount of buffers
is the return value of function nr_blockdev_pages(void)
long nr_blockdev_pages(void)
{
struct block_device *bdev;
long ret = 0;
spin_lock(&bdev_lock);
list_for_each_entry(bdev, &all_bdevs, bd_list) {
ret += bdev->bd_inode->i_mapping->nrpages;
}
spin_unlock(&bdev_lock);
return ret;
}
The amount of cached
:
global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram