Linux磁盘缓存机制解析
1. 磁盘缓存概述
磁盘缓存是一种软件机制,能让系统将原本存于磁盘的数据保存在RAM中,从而使后续对这些数据的访问无需再访问磁盘,可快速完成。除了VFS用于加速文件路径名转换为对应inode的dentry缓存外,Linux主要使用两种磁盘缓存:缓冲区缓存(buffer cache)和页缓存(page cache)。
缓冲区缓存由缓冲区构成,每个缓冲区存储单个磁盘块,块I/O操作依赖它来减少磁盘访问次数。而页缓存由页构成,缓存中的每页对应常规文件或块设备文件的多个块,这些块在逻辑上是连续的。在启动页I/O操作前,内核会先检查所需数据是否已存在于页缓存中,以减少磁盘访问。
| Kernel function | System call | Cache | I/O operation |
|---|---|---|---|
| bread( ) | None | Buffer | Read an Ext2 superblock |
| bread( ) | None | Buffer | Read an Ext2 inode |
| generic_file_read( ) | getdents( ) | <