一、什么是Page Cache?

为了提升对文件的读写效率,Linux 内核会以页大小(4KB)为单位,将文件划分为多数据块。当用户对文件中的某个数据块进行读写操作时,内核首先会申请一个内存页(称为 页缓存)与文件中的数据块进行绑定。如下图所示蓝色的地方就是Page Cache,很明显Page Cache是内核管理的内存,也就是说,它属于内核不属于用户。
image-20210907004445908

二、如何观测Page Cache

cat /proc/meminfo
root@vultr:~# cat /proc/meminfo 
MemTotal:         979896 kB
MemFree:           78116 kB
MemAvailable:     451656 kB
Buffers:           95416 kB
Cached:           374544 kB
SwapCached:        18972 kB
Active:           303408 kB
Inactive:         324400 kB
Active(anon):      51252 kB
Inactive(anon):   118308 kB
Active(file):     252156 kB
Inactive(file):   206092 kB
Unevictable:       27476 kB
Mlocked:           27476 kB
SwapTotal:       2457596 kB
SwapFree:        2390652 kB
Zswap:                 0 kB
Zswapped:              0 kB
Dirty:              1764 kB
Writeback:             0 kB
AnonPages:        181836 kB
Mapped:            84972 kB
Shmem:              2808 kB
KReclaimable:      71172 kB

Active(file) + Inactive(file)即文件页,Active(anon)+Inactive(anon)即匿名页均属于Page Cacke

三、文件页

文件页,即与磁盘文件存在映射关系的内存页(有文件背景的页面),例如进程代码段、文件的映射页等 ,他们有对应的硬盘文件,因此如果要交换,可以直接和硬盘对应的文件进行交换。内存紧张时,非dirty的文件页可以直接drop掉。Active(file) + Inactive(file)是与文件对应的内存页。

四、匿名页

匿名页,没有文件背景的页面(即没有与磁盘文件存在任何映射关系的内存页面),如stack,heap,数据段,共享内存。SwapCached是打开Swap分区后,把Active(anon)+Inactive(anon)这2项的匿名页交换到磁盘,然后读取到内存后分配的内存。Shmem共享内存是指匿名共享映射的这种方式映射的内存,比如tmpfs(临时文件系统)

五、为什么需要Page Cache

减少I/O,提升应用的I/O速度