我的 Debian 8 机器有 2 个驱动器。有时我将文件从驱动器 A 移动/复制到驱动器 B。驱动器 B 速度很慢,因此文件系统缓存已满,导致系统在复制大文件时缓慢/无响应。为了避免这种情况,我想限制设备 B 使用的文件系统缓存。因此我将设置/sys/class/bdi/MAJOR:MINOR/max_ratio
从更改100
为20
。然而,这似乎并没有生效,因为根据 ,脏页仍然以与以前相同的方式填充/proc/meminfo
。
我缺少什么?我需要执行任何操作来重新加载这些设置吗?是否有另一种方法来限制特定设备的文件系统缓存?
我已经尝试过安装选项“sync”。这可行,但会使驱动器 B 非常慢。
答案1
这些设置仅在总回写缓存填满 (dirty_ratio + dirty_background_ratio / 2) 后才会生效。参考:
- LKML 帖子,作者:Jan Kara
- 提交 5fce25a9df48在 v2.6.24 中。 “如果系统上有很多空间,我们允许违反 bdi 限制。一旦达到总限制的一半,我们就开始强制执行 bdi 限制......”这是添加内部每设备的同一内核版本的一部分“限制”。所以“限制”总是这样工作,除了预发行版 v2.6.24-rc1 和 -rc2 之外。
- 更智能的写入限制作者:LWN.net - 如果您想要原始补丁系列的参考。它没有描述这个具体的限制。
为了简单起见,我们假设 vm.dirty* sysctls 的默认值: dirty_background_ratio = 10 和 dirty_ratio = 20。在这种情况下,允许进程脏页而不会减慢速度,直到系统整体达到 15%观点。