虚拟内存与页面缓存

操作系统并不直接把内存传给进程,而是现在内核中将内存抽象化。这就是虚拟内存的机制。这样可以使进程无需考虑自己使用的内存位于什么位置,可以认为必然从OX000地址开始,这样处理就能更方便。
操作系统会一次性读出磁盘上的内容,类似的虚拟内存机制给进程分配内存的时候也不是一个字节一个字节地访问,而是分配好适当的大小(4kb左右)并传递给进程。这样的一个内存块称为“页面”。进程要求分配内存时,操作系统就分配足够的页面(至少一个)并将其传递给进程。进程是无法直接访问磁盘的,只能访问(虚拟)内存。

【虚拟内存与页面缓存】进程读完数据后,虽然读出的数据已经全部处理完,而不再需要这块内存,但并不会马上释放掉,而是保留下来。这样,下次其他进程想访问同一块磁盘的图时,就可以直接使用留下来的页面,而无需再次访问磁盘。这就是页面缓存。也就是说,内核分配过的内存不会释放,而是一直保留下来,这就是页面缓存的基本原理。

除了某些特殊情况(例外情况就是负责磁盘缓存的部分,VFS),页面缓存都会透明的应用在所有的I/O上。因此一直运行的操作系统更快。

虚拟内存:

*具有让进程更容易地访问内存等好处

*操作系统在内核中将内存抽象化

*操作系统以页面为单位分配物理内存并管理

页面=虚拟内存的最小单位。因此不论文件多大,通过键寻找相应页面的数据结构也是优化过的。操作系统(=内核)内部使用了名为Radix Tree的数据结构,它经过精心设计,不论文件有多大,缓存的搜索速度也不会降低。因此,不论是缓存大文件的一部分还是小文件的一部分,都可以用相同的速度搜索。
linux只要有空闲内存,就会全部用于缓存。这一点没有任何限制,只要有空闲内存,linux就会不断地将其用于磁盘内容的缓存。此外,当进程请求分配内存时,如果缓存导致内存没有空闲,就先删除旧的缓存,再为进程分配内存。
从上面可以得出结论:增加内存可以降低IO负载。

sar工具是查看cpu使用情况、平均负载内存占用的优秀工具

*************************************
以页面缓存为基础的运维原则:
操作系统刚启动时,不要将服务器投入生产环境(没有缓存的积累)

性能测试要在缓存优化后进行。

    推荐阅读