内存管理实验-pageCache

59 阅读2分钟
  1. 实验环境:macbook 8C16G
  2. 工具dd dd 是 Unix/Linux/macOS 系统中用于数据复制的工具
部分含义
dd命令本身(data duplicator 的缩写,核心功能是复制数据)
if=/dev/zeroif = input file(输入文件),/dev/zero 是系统特殊设备文件:- 会持续输出「空字节(0x00)」(无限量);- 用它当输入,能快速生成纯 0 填充的文件(无需读取真实磁盘数据,效率高)。
of=testFileof = output file(输出文件),指定将数据写入当前目录下名为 testFile 的文件(不存在则创建,存在则覆盖!)。
bs=1Mbs = block size(块大小),指定每次读写的数据块大小为 1M(1 兆字节,1MB = 1024KB = 1048576 字节)。- 块越大,单次读写的数据量越多,命令执行速度通常越快(减少 I/O 次数)。
count=1kcount = 块数量,指定只读写 1k 个「bs 大小的块」(1k = 1024 个)。
3.实验步骤
3.1 执行dd前查看机器内存
工具vm_stat
内存快照

dd执行前.png 解释一下由于OS内核的PC机制,数据会先写入File-backed pages,若写入速度快于内核刷盘速度,「Pages dirty」(脏页)会暴涨(1G=1024M=262144*4KB页),直到内核异步刷盘后,脏页数量下降,「File-backed pages」可能保留(作为缓存,方便后续读取);

3.2 执行dd命令写入1G文件

执行dd命令.png

  • PageCache:内核为加速文件 I/O 设计的内存缓存,默认情况下,文件写入时不会直接刷到磁盘,而是先写入页缓存(内存),后续由内核异步刷盘(或主动触发 sync
  • 写回机制(Writeback):当页缓存中的脏页(已写入但未刷盘的数据)达到阈值(如内存占比、脏页数量),内核会自动触发刷盘,将脏页数据写入磁盘后,释放对应的页缓存空间,循环复用; 综上:预期执行完dd后,File-backed Pages会增长大概26万个数据页。

3.3 执行dd后查看机器内存

dd执行后.png 实际增长文件缓存页:55.9万-29.5万=26.4万,符合预期 4.收尾 清理内存脏页 purge 删除文件 rm testFile