nomerge在Linux系统中意味着什么?

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

/ SYS /类/块/设备名称/队列/ nomerges

根据内核文件:

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

0和2的含义是容易理解的,但是当涉及到“一击”的时候,我search了一下,但没有对它进行具体的语义定义。 所以请帮忙解释一下nomerges的含义是什么。 谢谢。

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

您需要testing您的繁重的随机I / O工作负载,以确定是否会因禁用合并而受益。 选项2的合并显示每个CPU时间的吞吐量在2对1: 块的情况下提高了百分之几:在更严格的情况下添加了块I / O的无合并语义

即使选项0是相当便宜的,并且很多请求是相邻的。 你可能不需要改变这一点。