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