vm.dirty_ratio和vm.dirty_background_ratio之间的区别?

hap*_*ear 18 linux performance linux-kernel

我目前正在试验中发现的内核参数/proc/sys/vm,特别是dirty_ratiodirty_background_ratio.

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

dirty_background_ratio

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

dirty_ratio

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

我的linux系统dirty_background_ratio是10并且dirty_ratio是20.我明白不同之处在于脏数据写的是谁.因此,如果我的已用内存达到10%,则内核开始写回来,永远不会达到20%.

我现在的问题是:具有更高的价值dirty_background_ratiodirty_ratio任何意义,还是仅仅是"什么是较低的价值和谁拥有它"?

ask*_*skb 27

dirty_background_ratio和dirty_ratio的值是否有任何意义,或者只是"什么是较低的值以及谁拥有它"?

用更简单的词来说:

vm.dirty_background_ratio是系统内存的百分比,当脏时系统可以开始将数据写入磁盘.

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

此可调参数取决于系统运行的内容,如果运行大型数据库,建议将这些值保持在较低值以避免I/O瓶颈以及系统负载增加时.

例如:

vm.dirty_background_ratio=10
vm.dirty_ratio=15
Run Code Online (Sandbox Code Playgroud)

在此示例中,脏页超过vm.dirty_background_ratio=10I/O启动时,即它们开始刷新/写入磁盘.当脏页总数超过vm.dirty_ratio=15所有写入时,将阻塞,直到某些脏页写入磁盘.您可以将其vm.dirty_ratio=15视为上限.

  • 所以让我重新说一下,看看我是否理解正确.如果达到dirty_background_ratio,则内核开始在后台执行回写,但应用程序仍然可以在不阻塞的情况下写入页面缓存.如果达到dirty_ratio,应用程序将阻止写入,直到不再访问dirty_ratio.那是对的吗? (4认同)
  • "vm.dirty_ratio是表示在所有进程必须将脏缓冲区写回磁盘之前可以使用脏页的MemTotal的百分比的值,并且当达到此值时,在刷新脏页之前,所有I/O都将被阻止以进行任何新写入."http://www.sysxperts.com/home/announce/vmdirtyratioandvmdirtybackgroundratio ...您还可以从代码中验证此行为. (2认同)

hwe*_*rtz 8

在现代,这里讨论的一切仍然适用,但行为有所不同。

较旧的内核,内核会在 vm.dirty_background_ratio 处开始写入(或者数据是 vm.dirty_expire_centisecs 厘秒旧的,默认为 30 秒。)它会在 vm.dirty_ratio 处阻塞,有时会令人衰弱,因为它往往会阻塞,直到缓存耗尽到vm.dirty_background_ratio 或 0,当然如果它们设置得很高,这两者都可能需要很长时间。

较新的内核已做出巨大努力来避免与此缓存行为相关的“卡顿”。它仍然从 vm.dirty_background_ratio 开始写入。但是,当它在 vm.dirty_background_ratio 和 vm.dirty_ratio 之间达到大约 1/2 时,它开始应用小的写入延迟(限制应用程序的写入速度),大约在 50%-90% 之间,有一个相当小的减速,在 90 之间-100% 它会快速降低速度,因此通过 100%(缓存位于 vm.dirty_ratio),它将应用程序写入速度与它可以刷新写入设备的速度相匹配。其中有一些启发式方法,试图防止一个大型写入程序耗尽其他试图对同一设备进行小写入的应用程序,即防止“复制大文件使系统卡顿”投诉(据我所知,这是成功的。)

这里有一个悬而未决的问题,我真的不知道它如何处理在诸如 2GB/秒写入速度的 NVMe、一些每秒 100MB 写入速度的硬盘驱动器和一些每秒 20MB 写入速度的旧 USB 记忆棒之间分配缓存。不过看起来效果还不错!


pdp*_*pdp 5

我对这个问题很感兴趣,因此使用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 浏览器)编写,它们就很有用。如果系统上只有一个应用程序以高于磁盘支持的最大值的速率生成数据,则设置无关紧要。写作将花费尽可能多的时间。

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

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