蜗窝科技

【微信群技术讨论】/proc/meminfo中的Buffers和Cached有什么区别

蜗窝讨论区存档 · Linux kernel技术问答 · 楼主 linuxer · 2017-08-15 · 1 帖

本文是原「蜗窝讨论区」的历史存档(2017-08-15),来自版块「Linux kernel技术问答」,共 1 帖。讨论区已停止服务,此处仅供查阅。

linuxer · 2017-08-15 08:32

总结群内网友的讨论如下: 1、Buffers给出了系统中的buffer cache占用的内存数量。所谓buffer cache就是直接访问block device(不是通过文件系统)时候使用的disk cache。主要的场景包括: 1-1、打开该block device的设备节点,直接进行读写操作(例如dd一个块设备) 1-2、mount文件系统的时候,需要从相应的block device上直接把块设备上的特定文件系统的super block相关信息读取出来 1-3、文件操作的时候,和文件元数据相关的操作也是通过buffer cache进行访问。 上面的这些访问,都是通过块设备的page cache(位于bdev->bd_inode->i_mapping)中,也就是说,buffer cache其实是一种特殊的page cache而已。 虽然可以通过多个设备节点直接访问块设备,但是其buffer cache还是要保存在一个地方,因此Linux建立了一个特别的bdev文件系统,专门保存块设备的inode。也就是说,/dev/aaa和/dev/bbb两个块设备节点,设备号一样,open这两个设备节点虽然有两个inode对应,但是address space却是bdev文件系统中的那个inode对应的address space。 具体如何统计Buffers的内存,可以参考nr_blockdev_pages的实现,其实就是把系统中所有block device对应的inode(指bdev文件系统中那个inode)的page cache累加起来就OK了。

2、Cached给出了普通文件读写使用的page cache内存数量。其计算公式如下: Cache内存数量 = 系统中page cache的数量(标记了NR_FILE_PAGES flag) - swap cache的数目 - buffer cache的数目 无论buffer cache还是swap cache,也都是page cache,但是它们和普通文件读写无关,因此,要减去这些page cache的内存数目才能得到真正用于普通文件读写的page cache数目。