Linux教程

Linux - PageCache

本文主要是介绍Linux - PageCache,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

本文介绍的 PageCache(页高速缓冲存储器) 是 Linux 在读取文件数据中会把文件先拷贝到 内核缓冲区,其实是磁盘高速缓存。可以看看博文《零拷贝-并不是没有拷贝》,文中图文有描述这个过程。

出现原因和优点

CPU 读写磁盘相比读写内存的速度实在太慢了,所以如果把读磁盘变成多内存,那系统的处理数据就会提升很大。所以出现了 PageCache 机制。

程序运行的时候,具有「局部性」,所以通常刚被访问的数据在短时间内再次被访问的概率很高,于是可以用 PageCache 来缓存最近被访问的数据,当空间不足时淘汰最久未被访问的缓存。

再者在读取某一块数据时候,可以认为接下来很有可能会提取下一块的内容。PageCache 使用了「预读功能」。

所以 PageCache 主要有两个优点:

  1. 缓存最近被访问的数据。
  2. 预读。

当然也不是所有场合都适合使用 PageCache 机制,比如在读取大文件时候会出现以下的现象,导致 PageCache 成了累赘。

暂用过多的内存空间,真正需要被缓存的热点文件不能使用 PageCache。
读取文件时候往往会用到 DMA ,大文件下没有享受到缓存带来的好处,但却耗费 DMA 多拷贝到 PageCache 一次。

PageCache 结构

说到 PageCache 时候不得不提 BufferCache,因为它们俩一起构成了 Linux 的文件缓存。

Linux 的文件缓存分为部分,一个是 PageCache,另一个是 BufferCache;一个 PageCache 包含多个 BufferCache。

如下图:
在这里插入图片描述

总结

PageCache 具有缓存最近被访问的数据、预读等优点,能大幅提升系统的处理速度,但对于大文件先,往往是不使用 PageCache 技术的。

想知道 Linux 在处理大文件是怎么操作的,请看这篇博文 《Linux - 怎么实现大文件传输》。

这篇关于Linux - PageCache的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!