Linux 内存高速缓存(cache)类型分析
在Liunx内存管理机制中,除了对目录项(dentry,Linux文件系统中某个inode的链接)进行缓存外,
还采取了两种高速缓存,即Buffer Cache和Page Cache,前者针对磁盘块的读写,后者针对文件inode的
读写。通过增加这些Cache,有效缩短 I/O时间。
先通过free命令查看内存使用情况:
free -m
total used free shared buffers cached
Mem: 32176 30032 2144 0 249 25938
-/+ buffers/cache: 3844 28332
Swap: 0 0 0
返回结果中,buffer和cache说明两种前面提及的两种高速缓存使用内存情况,其中:
Buffers :说明缓存块设备读写的内存大小(buffer cache),这部分缓存主要用于
目录项、inode等文件系统元数据。如果ls一个包含很多内容的目录,可以
发现这个值明显增大。
Cache :说明用于缓存文件系统读写的内存大小(page cache),这部分缓存主要用于
打开的文件,如果 cache 的值很大,说明缓存的文件较多,在进行读写时,命
中率也将提高,如果频繁访问到的文件大部分被缓存,则必然减少磁盘的读IO。
It is similar like "Buffers", only this time it caches pages from file reading.
两种cache处理数据采用策略是不同的,具体如下:
buffer采用先进先出策略,cache则采用最少使用原则(LRU),即对于buffer缓存来说,
当缓存的内容达到其最大容量时,最先缓存的内容被清空,对于cache来说,当缓存的内容达到
其最大容量时,最少被访问的内容被清空。
释放不同高速缓存的方法是通过修改/proc文件系统相关参数,/proc是Linux虚拟文件系统,
通过对其进行读写操作实现与用户空间和内核空间的通信。即通过修改/proc中的内容,对当前kernel
的行为做出调整。内存缓存释放是通过调整/proc/sys/vm/drop_caches的值实现。
具体规则如下:
1)释放page cache
echo 2 > /proc/sys/vm/drop_caches
3)释放 pagecache,VFS目录向和inodes
echo 3 > /proc/sys/vm/drop_caches
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐