gpt4 book ai didi

c - 在最近的 Linux 内核上测试 msync 使用的好方法是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:50:29 35 4
gpt4 key购买 nike

我在 Linux 2.6 上的应用程序中使用 msync 以确保在发生崩溃时的一致性。我需要彻底测试我对 msync 的使用,但实现似乎正在为我刷新所有相关页面。有没有一种方法可以防止将 mmap 页面自动刷新到磁盘上,从而暴露我对 msync 的错误使用?

最佳答案

向@samold 致歉,“swappiness”与此无关。 Swappiness 只会影响内核在内存不足时如何权衡交换脏匿名页面与驱逐页面缓存页面。

您需要使用 Linux VM tunables controlling the pdflush task .对于初学者,我建议:

sysctl -w vm.dirty_writeback_centisecs=360000

默认情况下,vm.dirty_writeback_centisecs 为 3000,这意味着内核会将任何超过 30 秒的脏页视为“太旧”并尝试将其刷新到磁盘。通过将其启动到 1 小时,您应该能够完全避免将脏页刷新到磁盘,至少在短期测试期间是这样。除了...

sysctl -w vm.dirty_background_ratio=80

默认情况下,vm.dirty_background_ratio 为 10,即 10%。这意味着当超过 10% 的物理内存被脏页占用时,内核会认为它需要忙于将某些内容刷新到磁盘,即使它小于 dirty_writeback_centisecs。将其调到 80 或 90,内核应该愿意容忍大部分 RAM 被脏页占用。 (不过,我不会将此设置,因为我敢打赌从来没有人这样做过,而且它可能会引发奇怪的行为。)除了...

sysctl -w vm.dirty_ratio=90

默认情况下,vm.dirty_ratio 是 40,这意味着一旦 40% 的 RAM 是脏页,试图创建更多脏页的进程将阻塞直到有东西被驱逐.始终使这个大于 dirty_background_ratio。嗯,想一想,把这个放在那个之前,只是为了确保这个总是更大。

这就是我最初的建议。您的内核有可能无论如何都会开始逐出页面; Linux VM 是一个神秘的野兽,似乎在每个版本中都进行了调整。希望这提供了一个起点。

参见 Documentation/sysctl/vm.txt在内核源代码中获取 VM 可调参数的完整列表。 (最好引用您实际使用的内核版本的文档。)

最后,使用 /proc/PID/pagemap interface随时查看哪些页面实际上是脏的。

关于c - 在最近的 Linux 内核上测试 msync 使用的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632351/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com