![最适合我使用的 dirty_background_ratio 和 dirty_ratio 是多少?](https://linux22.com/image/170983/%E6%9C%80%E9%80%82%E5%90%88%E6%88%91%E4%BD%BF%E7%94%A8%E7%9A%84%20dirty_background_ratio%20%E5%92%8C%20dirty_ratio%20%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
所以我正在尝试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
这些是我的专业演奏技巧。