Linux系统中的nomerge是什么意思?

Jep*_*an 3 linux performance io

我们可以通过发出“iostat -x -d”来查看一些参数,rrqm/s和wrqm/s代表每秒I/O请求的合并。并且有一个内核参数控制 I/O 合并:

/sys/class/block/设备名称/队列/nomerges

根据内核文档:

这使得用户能够禁用块层中涉及 IO 合并请求的查找逻辑。默认情况下 (0) 启用所有合并。当设置为 1 时,只会尝试简单的一击合并。当设置为 2 时,不会尝试合并算法(包括一击或更复杂的树/哈希查找)。

0和2的含义很容易理解,但是说到“一击”的1,我google了一圈,却没有具体的语义定义。所以请帮助解释 1 for nomerges 的确切含义是什么。谢谢。

Joh*_*ald 5

0 对相邻请求进行简单检查并在数据结构中进行查找,1 仅进行简单检查,2 不进行合并。看一下 elv_merge() 中的 block/elevator.c 的实现。

您需要测试繁重的随机 I/O 工作负载,以确定它是否会从禁用合并中受益。选项 2 的合并显示,与 1 相比,每个 CPU 时间的吞吐量提高了百分之几:块:为块 I/O 添加了更严格的无合并语义

即使选项 0 也相当便宜,而且很多请求都是相邻的。您可能不需要更改此设置。