温馨提示×

为啥linux要用缓存

小樊
44
2026-10-09 11:56:18
栏目: 智能运维

Linux 用缓存(cache)主要是为了弥补“CPU 太快、磁盘太慢”的差距,提升系统性能和效率。可以从几个层面理解:


1. 核心原因:磁盘比内存慢太多了

  • CPU:纳秒级
  • 内存:百纳秒级
  • 磁盘(SSD/HDD):微秒到毫秒级

如果每次读文件、写文件都直接访问磁盘,系统会非常卡。
缓存把常用数据放在内存里,CPU 直接读内存,速度提升几个数量级。


2. 读缓存(Page Cache)

Linux 会把读过文件的内容缓存在内存中:

  • 第一次读文件:从磁盘读,放进 page cache
  • 第二次读:直接从内存返回

好处:

  • 程序启动更快
  • 重复读文件几乎零延迟
  • 多个进程共享同一份缓存

例如:

cat bigfile
cat bigfile   # 第二次明显更快

3. 写缓存(Writeback Cache)

写文件时,Linux 不一定立刻写盘:

  1. 先写到内存(page cache)
  2. 标记为 dirty
  3. 后台线程定期刷盘(或 sync)

好处:

  • 写操作更快
  • 合并多次小写为一次大写
  • 减少磁盘碎片和寻道

风险:

  • 突然断电可能丢数据
    → 重要数据用 fsync() / sync

4. 利用“闲置内存”

Linux 的设计哲学:

空闲的内存就是浪费的内存

所以:

  • 内存空闲 → 自动拿来做缓存
  • 程序需要内存 → 缓存被回收

你看到的 free 命令里:

buff/cache

不是“被占用”,而是可随时让出的内存。


5. 其他缓存机制

除了文件缓存,Linux 还有:

  • dentry / inode cache:目录和文件元信息缓存
  • buffer cache(块设备层)
  • TLB / CPU cache(硬件层)
  • 应用层缓存(如 Redis)

6. 一句话总结

Linux 用缓存,是为了用“快的内存”掩盖“慢的磁盘”,让系统又快又稳,同时不浪费内存。

如果你愿意,我也可以讲:

  • page cache 和 buffer 的区别
  • 为什么 echo 3 > /proc/sys/vm/drop_caches
  • 缓存导致“内存满了”是不是问题

0 踩