一、磁盘和文件的区别
1. 磁盘是一个块设备,可以划分为不同的分区。
在分区之上再创建文件系统,挂载到某个目录,之后才可以在这个目录中读写文件。
2. 读写普通文件时,会经过文件系统,由文件系统负责与磁盘交互。
读写磁盘或者分区时,就会跳过文件系统,也就是所谓的“裸I/O“。
二、查看Buffer和Cache
1. free命令
2. man free,可以查看free命令的介绍。
3. Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。
Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。
三、结论
1. Buffer 既可以用作“将要写入磁盘数据的缓存”,也可以用作“从磁盘读取数据的缓存”。
2. Cache 既可以用作“从文件读取数据的页缓存”,也可以用作“写文件的页缓存”。
四、如何观察 Buffers 和 Cache
1. Buffers 和 Cache 可以极大提升系统的 I/O 性能。
我们用缓存命中率,来衡量缓存的使用效率。命中率越高,应用程序的性能也就越好。
2. 可以用 cachestat 和 cachetop 这两个工具,观察缓存命中情况。
(1) cachestat 提供了整个 系统 缓存的命中情况。
(2) cachetop 提供了每个 进程 的缓存命中情况。