最适合我使用的 dirty_background_ratio 和 dirty_ratio 是多少?

最适合我使用的 dirty_background_ratio 和 dirty_ratio 是多少?

所以我正在尝试dirty_background_ratio and dirty_ratio并希望在您的专业帮助下找到正确的参数。

现在我正在使用:

vm.dirty_background_ratio = 20 vm.dirty_ratio = 60

主要用途是种子下载,这意味着文件将通过种子客户端下载,然后播种。可以同时进行多个下载,这就是为什么我应该使用 RAM 缓存,并考虑正确的值。

也许你可以建议我正确的价值观?

答案1

你的想法和值(大约是它们的两倍)对我来说似乎没问题,但你没有解释 RAM 的确切含义缓存。这里它更多的是一个缓冲因为脏页都是未经修改地写入磁盘的。

如果同一个块设备上有很多 IO,稍后就会发生冲突。脏页数量不是唯一的触发因素,还有(mm/页写回.c):

/*
 * The longest time for which data is allowed to remain dirty
 */
unsigned int dirty_expire_interval = 30 * 100; /* centiseconds */

默认值为 30 秒。这可能就足够了。但这意味着比该值更旧的脏页将不会被阻止(缓冲/缓存的时间维度)。

如果您有并发 IO,那么这些全局设置也会影响它。


最好的解释脏率脏背景比例位于同一个文件中:

/* The following parameters are exported via /proc/sys/vm */

/*
 * Start background writeback (via writeback threads) at this percentage
 */
int dirty_background_ratio = 10;
...
/*
 * The generator of dirty data starts writeback at this percentage
 */
int vm_dirty_ratio = 20;

表明从不同侧面看都是同一件事(现在脏了,以后再清理)。


以下是一些用于分析脏页的命令:

]# cp MAINTAINERS MAINTAINERS-2

]# grep dirty /proc/vmstat 
nr_dirty 135
nr_dirty_threshold 311361
nr_dirty_background_threshold 155490

阈值是根据比率值(以百分比或字节形式给出)计算得出的。我有 8GB = 2M 页面,所以这分别是 10% 和 20%。


使用页面类型工具,您可以更准确地识别这些脏页。这会读取 /proc/kpageflags,大约需要 200 毫秒。

]# ./tools/vm/page-types  -b dirty -b lru -b ~active,~reclaim,~mmap |cut -c-80
             flags      page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000000030               1        0  ____Dl__________________________________
0x0000000000000038             130        0  ___UDl__________________________________
0x0000000000044038               1        0  ___UDl________b___u_____________________
0x000000000000403c              23        0  __RUDl________b_________________________
             total             155        0

无论我只是坐着等待(30秒),还是手动sync,脏页很快就会消失。

]# sync
]# grep dirty /proc/vmstat 
nr_dirty 0
...

整个 130 页的“UDl”都消失了,即。那些“最新的、脏的、在 LRU 列表上”的。

]# ./tools/vm/page-types  -b dirty -b lru -b ~active,~reclaim,~mmap |cut -c-80
             flags      page-count       MB  symbolic-flags                     long-symbolic-flags
0x0000000000044038               1        0  ___UDl________b___u_____________________
0x000000000000403c              23        0  __RUDl________b_________________________
             total              24        0

两行的 130 + 1 页差异正是文件的大小:

]# ls --block-size=4096 -s MAINTAINERS 
131 MAINTAINERS

这些是我的专业演奏技巧。

相关内容