akun
akun
发布于 2025-03-21 / 2 阅读
0
0

Buffer/Cache 机制详解

目录

  1. 什么是 Buffer/Cache

  2. Buffer 的具体职责

  3. Cache 的具体职责

  4. 如何回收 Buffer/Cache


什么是 Buffer/Cache?

在 Linux 内存管理中,Buffer Cache 是两个重要的概念。它们的作用如下:

  • Buffer Cache(缓冲区缓存)

    • 在 Linux 2.4 中,Buffer 主要用于缓存尚未写入磁盘的数据。

    • 在 Linux 2.6 及之后版本中,Buffer 被用作块设备层的缓存,负责裸设备相关的缓存操作。

  • Page Cache(页面缓存)

    • 在 Linux 2.4 中,Cache 主要用于缓存从磁盘读取的数据。

    • 在 Linux 2.6 及之后版本中,Page Cache 统一了文件层的缓存,负责文件系统的缓存工作。

简单来说:

  • Buffer 负责块设备的缓存。

  • Page Cache 负责文件系统的缓存。

Buffer 的具体职责

Buffer 主要用于块设备的读写操作。它作为缓存来使用,确保对块设备的操作更加高效。例如,在格式化文件系统时,Buffer 会缓存这些操作。

当对文件进行写操作时,Buffer 会标记哪些部分被修改,并在后续的脏数据回写(writeback)过程中,只写回修改的部分,而不是整个页面。

Cache 的具体职责

Page Cache 主要用于文件系统的读写操作。当进程对文件进行读写时,Page Cache 会缓存这些数据,以提高访问速度。此外,mmap 系统调用也会使用 Page Cache 来将文件映射到内存。

由于 Page Cache 负责文件类型的缓存,因此它也处理大部分块设备文件的缓存工作。

如何回收 Buffer/Cache?

Linux 内核会在内存不足时自动触发内存回收,但这并不是没有成本的。特别是当 Page Cache 中存在未同步的数据时,内核需要先将这些数据写回到磁盘,这会导致 I/O 操作增加。

你可以通过以下命令手动清除缓存:

echo 1 > /proc/sys/vm/drop_caches # 清除页面缓存
echo 2 > /proc/sys/vm/drop_caches # 清除目录项和 inode
echo 3 > /proc/sys/vm/drop_caches # 清除页面缓存、目录项以及 inode

需要注意的是,这些命令只能在执行时生效,过一段时间后内存又会被占用。如果你希望长期保持较低的内存占用,可以考虑调整内核参数或优化应用程序的内存使用。


评论