Linux的Cache和Buffer理解( 六 )

综上 , echo 1 > /proc/sys/vm/drop_caches会清除所有inode的缓存页 , 这里的inode包括VFS的inode、所有文件系统inode(也包括bdev伪文件系统块设备的inode的缓存页) 。所以该命令执行后 , 就会将整个系统的page cache和buffer cache全部清除 , 当然前提是这些cache都是非脏的、没有正被使用的 。
接下来看下实际效果:
[root@test usb] # cat /proc/meminfoMemTotal: 90516 kBMemFree: 12396 kBBuffers: 96 kBCached: 60756 kB[root@test usb] # busybox_v400 sync[root@test usb] # busybox_v400 sync[root@test usb] # busybox_v400 sync[root@test usb] # echo 1 > /proc/sys/vm/drop_caches[root@test usb] # cat /proc/meminfoMemTotal: 90516 kBMemFree: 68820 kBBuffers: 12 kBCached: 4464 kB可以看到Buffers和Cached都降了下来 , 在drop_caches前建议执行sync命令 , 以确保数据的完整性 。sync 命令会将所有未写的系统缓冲区写到磁盘中 , 包含已修改的 i-node、已延迟的块 I/O 和读写映射文件等 。
上面的设置虽然简单但是比较粗暴 , 使cache的作用基本无法发挥 , 尤其在系统压力比较大时进行drop cache处理容易产生问题 。因为drop_cache是全局在清内存 , 清的过程会加页面锁 , 导致有些进程等页面锁时超时 , 导致问题发生 。因此 , 需要根据系统的状况进行适当的调节寻找最佳的方案 。
1.6 经验总结以上分别讨论了Cache和Buffer分别从哪里来?什么时候消耗在哪里?如何分别控制Cache和Buffer这三个问题 。最后还介绍了vmtouch工具的使用 。
要深入理解Linux的Cache和Buffer牵涉大量内核核心机制(VFS、内存管理、块设备驱动、页高速缓存、文件访问、页框回写) , 需要制定计划在后续工作中不断理解和消化 。

【Linux的Cache和Buffer理解】


推荐阅读