注意不同版本的 free 输出可能会有所不同
$ free
total used free shared buff/cache available
Mem: 8169348 263524 6875352 668 1030472 7611064
Swap: 0 0 0
这个界面包含了物理内存mem和交换分区swap的具体使用情况,比如总内存,已用内存,缓存,可用内存等,其中缓存buffer和cache两部分的总和。
。Buffers是内核缓冲区用到的内存,对应的是/proc/meminfo中的Buffers值
。Cache是内核页缓存和Slab用到的内存,对应的是/proc/meminfo中的Cached与SReclaimable之和
/proc是linux内核提供的一种特殊文件系统,是用户跟内核交互的接口。比方说,用户可以从/proc中查询内核的运行状态和配置选项,查询进程的运行状态,统计数据等,当然,也可以通过/proc来修改内核的配置。proc文件系统同时也是很多性能工具的最终数据来源。比如free就是通过读取/proc/meminfo得到内存的使用情况
写文件时会用到cache缓存数据,而写磁盘则会用到buffer来缓存数据。
读文件时数据会缓存到cache中,而读磁盘时数据会缓存到buffer中。
Buffer既可以用作“将要写入磁盘数据的缓存",也可以用作"从磁盘读取数据的缓存"
Cache既可以用作"从文件读取数据的页缓存",也可以用作"写文件的页缓存"
简单来说,Buffer是对磁盘数据的缓存,而Cache是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。
磁盘是一个块设备,可以划分为不同的分区;在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。
其实linux中"一切皆文件",而一般提到的“文件”是普通文件,磁盘是块设备文件,这些可以执行“ls -l <路径>”查看他们的区别
在读写普通文件时,会经过文件系统,由文件系统负责与磁盘交互;而读写磁盘或者分区时,就会跳过文件系统,也就是所谓的“裸I/O”这两种读写方式所使用的缓存是不同的,也就是文中所说的Cache和Buffer区别。