进程与内存8-高速缓存3(页高速缓存)

时间:2022-02-10 07:38:18

页高速缓存是linux内核所使用的主要磁盘高速缓存。在绝大多数情况下,内核在读写磁盘时都引用页高速缓存。新页被追加到页高速缓存以满足用户态进程的读请求。如果页不在高速缓存中,新页就被加到高速缓存中,然后用从磁盘读出的数据填充它。如果内存有足够的空闲空间,就让该页在高速缓存中长期保留,使其他进程再使用该页时不再访问磁盘。这样的机制也会引入类似“脏”字段来处理一致性。

在此之前的高速缓存都是软件的机制,除了slab之外基本写驱动都不会涉及,对我来说重点是区分它们,所以页高速缓存的工作原理就不再细说了。有兴趣可以看看ULK.

我们看free的结果,这个是linux-2.6.18下运行的

 进程与内存8-高速缓存3(页高速缓存)

对于buffers和cached网上有很多说法,我们来看看它们的区别。

我们来看看老版本的解释

Buffers:

 Memory in buffer cache. mostly useless as metric nowadays 

Cached:

 Memory in the pagecache (diskcache) minus SwapCache

一个叫缓冲区高速缓存,一个叫页高速缓存。

VFS和各种文件系统以叫做“块”的逻辑单位组织块设备数据。

我们似乎知道了它们的区别。

但是ULK原话:在linux内核的旧版本中,主要有两种不同的磁盘高速缓存;页高速缓存和缓冲区高速缓存,前者用来存放访问磁盘文件内容时生成的磁盘数据页,后者把通过VFS访问的块的内容保存在内存中。

从2.4.10的稳定版本开始,缓冲区高速缓存其实就不存在了。现在把它保存在页高速缓存中,现在我们只能叫做“缓冲区页”,不再叫缓冲区高速缓存。只是存在的方式和名字不一样了,但是它是仍然存在的,所以我的Linux-2.6.18仍然可以看到它。

 

我们上一篇说的目录项高速缓存、索引节点高速缓存都存放在此。下面是引入一位网友的话

 

buffer实际上是用来存储了文件系统的包括目录结构、文件的名字、大小、修改时间、权限等等信息(这样我们每次ls就会很快了),而cache则缓存了近期读写过的文件的内容(第一次读文件会很慢,以后就会很快,就是因为有cache的存在)。

 

你可以通过ls命令或打开文件来查看buffer和cache的变化。

 

对我来说知道这些足够了。