在 Linux 系统中,“缓存”是一个比较宽泛的概念,通常可以从内存缓存、文件系统缓存、CPU/硬件缓存、应用层缓存等多个层面来理解。下面系统性地介绍 Linux 中常见的缓存类型。
一、内存层面的缓存(最核心)
1. Page Cache(页缓存)
- 作用:缓存文件数据(磁盘文件的内容)
- 位置:物理内存中
- 特点:
- 读文件时先查 page cache
- 写文件通常先写 cache,再异步刷盘(writeback)
- 可通过
/proc/meminfo 中的 Cached 查看
2. Buffer Cache(缓冲区缓存)
- 作用:缓存块设备(如磁盘)的元数据或裸设备数据
- 在现代 Linux 中:
- 已与 page cache 融合
Buffers 主要表示文件系统元数据的缓存
3. Slab Cache(内核对象缓存)
- 作用:缓存内核常用对象(如 inode、dentry、task_struct)
- 两大类型:
- dentry cache:目录项缓存,加速路径查找
- inode cache:inode 缓存,加速文件访问
- 查看:
/proc/slabinfo 或 slabtop
4. Swap Cache
- 作用:缓存被换出到 swap 的内存页
- 目的:避免频繁 swap 读写
二、文件系统相关缓存
5. Directory Entry Cache(dcache)
- 加速文件路径解析
- 属于 slab cache 的一部分
6. Inode Cache
7. 文件系统日志缓存(Journal Cache)
- 如 ext4、xfs 的 journal 区域
- 用于崩溃恢复
三、CPU 与硬件缓存
8. CPU Cache
- L1 / L2 / L3 Cache
- 由硬件管理,Linux 只做调度优化
9. Disk Cache(磁盘自身缓存)
- 存在于硬盘/SSD 控制芯片中
- Linux 无法直接控制,但可通过
hdparm 查看
10. RAID / 控制器缓存
- RAID 卡带电池保护的写缓存(BBU Cache)
四、网络相关缓存
11. Socket Buffer Cache
- 发送/接收网络数据的缓冲区
- 如
tcp receive buffer、send buffer
12. ARP Cache
- IP → MAC 地址映射缓存
- 查看:
ip neigh
13. Route Cache(路由缓存)
14. DNS Cache
- 通常由:
systemd-resolved
nscd
- 应用自身维护
五、用户态 / 应用层缓存
15. 标准库缓存
stdio 的 FILE* 缓冲区(如 fwrite)
glibc 的 malloc 缓存(arena)
16. 数据库缓存
- MySQL Buffer Pool
- Redis 自身内存缓存
17. Web / 代理缓存
六、常见查看方式
free -h
cat /proc/meminfo
cat /proc/slabinfo
slabtop
ip neigh
sync
echo 3 > /proc/sys/vm/drop_caches
总结一句话
Linux 缓存主要包括:页缓存、缓冲区缓存、Slab(dentry/inode)缓存、Swap 缓存,以及 CPU、磁盘、网络和应用层缓存。
如果你是想了解:
- “为什么 Linux 内存看起来用完了”
- “如何清理缓存”
- “缓存对性能/数据安全的影响”
可以告诉我具体场景,我可以针对性讲。