vm.dirty_ratio 和 vm.dirty_background_ratio 的区别?

Difference between vm.dirty_ratio and vm.dirty_background_ratio?

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

内核文档对两者的解释如下:

dirty_background_ratio

Contains, as a percentage of total available memory that contains free pages and reclaimable pages, the number of pages at which the background kernel flusher threads will start writing out dirty data.

dirty_ratio

Contains, as a percentage of total available memory that contains free pages and reclaimable pages, the number of pages at which a process which is generating disk writes will itself start writing out dirty data.

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

我现在的问题是:dirty_background_ratiodirty_ratio 的较高值有任何意义还是只是 "what is the lower value and who has it" 的问题?

Has the higher value of dirty_background_ratio and dirty_ratio any meaning or is it just a matter of "what is the lower value and who has it"?

简单来说:

vm.dirty_background_ratio 是系统内存的百分比,当变脏时,会导致系统开始将数据写入磁盘。

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

这些可调项取决于您的系统 运行ning;如果您 运行 一个大型数据库,建议将这些值保持在较低水平,以避免 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 视为上限。

我一直对这个问题很感兴趣,所以在我的 Debian 7.10 系统 运行 Linux 3.2.0-4-amd64 使用 sysbench 0.4.12,修改:

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

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

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

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