Linux操作系统采用了一套高效的缓存机制来优化系统性能,主要目的是减少对慢速存储设备(如磁盘)的访问次数,通过利用更快的存储介质(如内存)来缓存频繁访问的数据。
核心功能:缓存文件数据,减少磁盘I/O
特点: - 以页面(通常4KB)为单位管理 - 采用LRU(最近最少使用)算法管理 - 支持预读(readahead)优化
运作流程:
应用程序读取文件 → 检查Page Cache → 命中则直接返回 → 未命中则从磁盘读取并缓存
核心功能:缓存文件系统目录结构信息
特点: - 缓存路径名到inode的映射 - 极大加速路径解析 - 基于哈希表实现快速查找
核心功能:缓存文件元数据
特点: - 存储文件权限、大小、时间戳等信息 - 与dentry缓存协同工作 - 采用LRU机制管理
核心功能:缓存块设备I/O操作
特点: - 主要用于原始块设备操作 - 在现代Linux中已基本被Page Cache取代 - 仍然存在于某些特定场景
核心功能:管理被换出的页面
特点: - 跟踪已写入交换区的页面 - 避免重复写入相同的交换页面 - 加速页面换入操作
/proc/sys/vm/dirty_*
参数调节# 查看系统内存和缓存使用情况
free -h
# 详细内存统计
cat /proc/meminfo
# 监控缓存命中率(需要安装cachestat)
cachestat 1
# slab信息查看
slabtop
# 查看页面缓存详细信息
cat /proc/slabinfo | grep -E 'dentry|inode_cache'
# 调整脏页写回阈值
echo 10 > /proc/sys/vm/dirty_background_ratio # 后台写回百分比
echo 20 > /proc/sys/vm/dirty_ratio # 同步写回百分比
# 调整swappiness(0-100)
echo 60 > /proc/sys/vm/swappiness
# 调整vfs缓存压力
echo 100 > /proc/sys/vm/vfs_cache_pressure
# 清理页面缓存
echo 1 > /proc/sys/vm/drop_caches
# 清理inode和dentry缓存
echo 2 > /proc/sys/vm/drop_caches
# 清理所有缓存
echo 3 > /proc/sys/vm/drop_caches
Linux缓存机制是一个复杂而精密的系统,通过多层次的缓存设计实现了极高的I/O效率。理解这些缓存的工作原理对于系统性能调优、故障诊断和容量规划至关重要。在实际运维中,应当根据具体工作负载特点进行针对性的监控和调优,而非简单套用通用配置。