我目前正在试验在/proc/sys/vm
中找到的内核参数,特别是dirty_ratio
和dirty_background_ratio
。
内核文档对这两者都有以下解释:
dirty_background_ratio 包含包含空闲页和可重声明页的可用内存总数的百分比,后台内核刷新线程将开始写入脏数据的页面数。
和
dirty_ratio 包含包含空闲页和可恢复页的可用内存总数的百分比,生成磁盘写入的进程本身将开始写入脏数据的页数。
在我的linux系统中,dirty_background_ratio
是10,dirty_ratio
是20。我理解不同的是,那些肮脏的数据是谁写的。因此,如果我使用的内存达到10%,内核将开始写回,而20%则永远不会达到。
我现在的问题是:dirty_background_ratio
和dirty_ratio
的更高价值是否有任何意义,还是仅仅是一个“低价值是什么,谁拥有它”的问题?
发布于 2022-09-22 02:11:00
在现代,这里所讨论的一切仍然适用,但其行为有些不同。
较老的内核,内核将开始在vm.dirty_background_ratio上编写(或者数据是vm.dirty_expire_centisecs厘米,默认是30秒)。它会在vm.dirty_ratio上阻塞,有时会令人衰弱,因为它倾向于阻塞,直到缓存耗尽到vm.dirty_background_ratio或0为止,当然,如果缓存设置得很高,这两个缓存都可能需要很长的时间。
更新的内核,巨大的努力,以避免"jank“与这种缓存行为有关。它仍然开始在vm.dirty_background_ratio上写作。但是当它在vm.dirty_background_ratio和vm.dirty_ratio之间得到大约1/2的速度时,它开始应用较小的写入延迟(应用程序的节气门写入速度),在大约50%-90%之间有一个相当小的减速,在90%到100%之间它会快速降低速度,所以100%(缓存在vm.dirty_ratio上)它将应用程序的写入速度与它能够清除写到设备的速度相匹配。这里有一些启发式的方法,试图阻止一位大型作者试图对同一设备进行小写入的其他应用程序的饥饿,即防止“复制一个大文件打开系统”的抱怨(据我所知,这是成功的)。
这里有一个悬而未决的问题,我真的不知道它是如何分配缓存的,比如一个NVMe,它可以达到2GB/秒,一些硬盘驱动器可以达到100 USB /秒,而一些旧的USB棒可以写到20 USB/秒。不过,它似乎很好用!
https://stackoverflow.com/questions/27900221
复制相似问题