dd 与页面缓存的关系

dd 与页面缓存的关系

我的服务器的免费命令输出目前如下:

# 免费 -m
             已使用的、可用的、缓存的共享缓冲区总数
内存:995 780 205 0 49 599
-/+ 缓冲区/缓存:140854
交换:0 0 0

我们知道dd应用程序一般都会使用page cache来加速文件访问。

发出命令后:

dd if=/dev/zero of=2.txt bs=1M count=10

以下输出显示页面缓存增加了10M左右。

# 免费 -m
             已使用的、可用的、缓存的共享缓冲区总数
内存:995 790 215 0 49 599
-/+ 缓冲区/缓存:140854
交换:0 0

上述输出是正常的。

然后我就跑了

同步
该命令会将页面缓存中的内容再次同步到硬盘,同时
免费-m
命令。

如下所示,没有任何变化。这与写回机制有关吗?该机制规定,尽管执行了同步命令,但页面缓存也不会被回收,除非这部分页面缓存正在被更改。

或者,直到内核参数 /proc/sys/vm/drop_caches 被修改之前,页面缓存根本不会被回收?

# 免费 -m
             已使用的、可用的、缓存的共享缓冲区总数
内存:995 790 205 0 49 599
-/+ 缓冲区/缓存:140854
交换:0 0 0

如果是,那么 free -m 中的缓存最大可以达到多少?是否有任何内核参数控制它?谢谢。

答案1

dd 不直接使用页面缓存,而是执行自动缓存的 I/O。

仅仅因为提交了某项操作就删除缓存是低效的。下一次读取需要来自底层设备,这可能比 RAM 慢数百到数千倍。

预计缓存将使用几乎所有未使用的 RAM。如果将其视为可用内存,则如果程序分配内存,缓存将首先被回收。

不要在生产操作中使用 /proc/sys/vm/drop_caches,它没有帮助。来自文档/sysctl/vm.txt

该文件不是控制各种内核缓存(inodes、dentry、pagecache 等)增长的手段。当系统的其他地方需要内存时,这些对象会被内核自动回收。

使用此文件可能会导致性能问题。由于它会丢弃缓存的对象,因此可能需要大量 I/O 和 CPU 来重新创建丢弃的对象,尤其是在这些对象使用率很高的情况下。因此,不建议在测试或调试环境之外使用。

vm 的 sysctl 文档确实列出了一些用于控制虚拟内存子系统的调整参数,包括脏页行为和最小可用空间。我不建议更改它们,除非您详细了解这样做的好处。在此之前,请使用默认值或预定义的tuned配置文件。

相关内容