vm.dirty_ratio 和 vm.dirty_background_ratio 的区别?

新手上路,请多包涵

我目前正在试验 /proc/sys/vm 中的内核参数,尤其是 dirty_ratiodirty_background_ratio

内核文档对两者都有以下解释:

脏背景比

包含,作为包含空闲页面和可回收页面的总可用内存的百分比,后台内核刷新线程将开始写出脏数据的页面数。

脏比

包含,作为包含空闲页面和可回收页面的总可用内存的百分比,正在生成磁盘写入的进程本身将开始写出脏数据的页面数。

在我的 linux 系统上 dirty_background_ratio 是 10,而 dirty_ratio 是 20。我知道区别在于脏数据写入的对象。因此,如果我使用的内存达到 10%,内核开始回写并且永远不会达到 20%。

我现在的问题是: dirty_background_ratiodirty_ratio 的较高值是否有任何含义,或者仅仅是“较低的值是什么以及谁拥有它”的问题?

原文由 happyMOOyear 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

较高的dirty_background_ratio 和dirty_ratio 值是否有任何意义,还是只是“较低的值是什么以及谁拥有它”的问题?

用更简单的话来说:

vm.dirty_background_ratio 是系统内存在脏时导致系统开始向磁盘写入数据的百分比。

vm.dirty_ratio 是系统内存的百分比,当脏时,会导致执行写入的进程阻塞并将脏页写入磁盘。

这些可调参数取决于您的系统正在运行什么;如果您运行大型数据库,建议将这些值保持在较低水平,以避免在系统负载增加时出现 I/O 瓶颈。

例如:

 vm.dirty_background_ratio=10
vm.dirty_ratio=15

在这个例子中,当脏页超过 vm.dirty_background_ratio=10 I/O 开始,即它们开始被刷新/写入磁盘。当脏页的总数超过 vm.dirty_ratio=15 所有的写被阻塞,直到一些脏页被写入磁盘。您可以将 vm.dirty_ratio=15 视为上限。

原文由 askb 发布,翻译遵循 CC BY-SA 4.0 许可协议

我对这个问题很感兴趣,因此使用 sysbench 0.4.12 在运行 Linux 3.2.0-4-amd64 的 Debian 7.10 系统上进行了一些实验,修改:

  • /proc/sys/vm/dirty_ratio
  • /proc/sys/vm/dirty_background_ratio

这些设置是一种延迟写入磁盘的方法。只要您的应用程序不经常编写或小块编写(例如 Web 浏览器),它们就很有用。如果系统上只有一个应用程序正在以大于磁盘支持的最大值的速率生成数据,那么设置无关紧要。写作将花费尽可能多的时间。

Dirty Ratio (DR) 导致进程中的脏页数超过阈值而被阻塞。 Dirty Background Ratio (DBR) 控制在后台写入脏页。因此,如果您的 DBR 较低、DR 较高,并且您的所有进程都以小块的形式写入,而不会完全超过支持的磁盘写入速度(例如 50 MB/s),那么您会发现一个响应速度非常快的系统。当我们牢记写入 RAM 通常快 100 倍(5 GB/s)这一事实时,这令人印象深刻!这就是 DBR 的重要性。

当您对不经常写入的应用程序感到困扰时,配置参数很有用。您不希望写入一个字节或读取几 KB 的进程因为脏数据太多而停顿 20 秒。这就是不要有太高的 DR 的重要性。它还确保有一些内存可用于缓存最近使用的数据。

原文由 pdp 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题