资料参考及出处
https://www.ibm.com/developerworks/cn/linux/l-cache/index.html
作用
解决“速度不匹配”的问题,最终是为了提升系统性能;
CPU运算和内存操作比,CPU运算更快,内存操作和硬件IO操作比,内存操作更快,……
依赖于“程序运行的局部性原理”,数据使用的28原理,使得可以在这些相对快速和慢速的设备之间,做一个缓存,
通过采用“预读,异步读写,读写请求合并”等等一系列的机制,尽量去达到一个目标,就是:尽量少操作,少等待那个“慢”的设备,
从而提升整个系统的性能。
原理
首先区分开cache的含义,先明确说的是哪里的cache。
CPU cache解决的是CPU和内存之间的速度匹配问题,内核中的文件cache解决的是内存操作和外部介质IO的速度问题。
这里说的是内核中文件cache。
系统内部原理主要如下:
VFS,负责应用程序和文件cache之间通过read/write行数据交换;
内存管理系统,负责文件cache的分配和回收,同时VMM允许应用程序以mmap的方式访问文件cache;
具体的文件系统(EXT2/3等),负责文件cache和存储设备之间的数据交换;
文件的每个数据块最多只能对应一个 Page Cache 项,假定为4K;
每一个 Page Cache 包含若干 Buffer Cache,假定为1K;
可见实际buffer这层的cache对应的磁盘位置不一定是连续的;
预读的控制思想是,首次预读一个group,如果下次的读命中了,那就放大这个group,否则就该是继续预读group大小。
Cache 管理的优劣通过两个指标衡量:
一是 Cache 命中率:
这一项主要是每次的读写命中率,只有命中了才能用cache替代磁盘IO,才有性能提升的说法。
二是有效 Cache 的比率:
这一项主要是预读的效率,假如预读上来的如果都是无效cache,也就是不会被命中的,那么就是既白耗费了磁盘的读带宽,又白耗费了内存。