我正在使用blktrace来理解a中的Block Layer行为 具有高IO负载的多线程IO工作负载。我可以观察一些 块层中重复的LBA请求。例如,我只有一个 在原始工作负载中向LBA 47568写入请求。但是,blktrace 显示写入LBA 47568的121个请求!下面是一部分 blkparse日志,仅过滤I事件(IO插入请求 队列)。我试图理解为什么会发生这种现象以及如何发生 我可以消除它吗?我选择了noop IO调度程序和值2 / sys / block / sdX / nomerge以避免IO合并。我非常感谢你的帮助 提前。
8 240 0 7539 0.073300123 32282 I WS 47576 + 8 [a]
8 240 5 4462 0.073303974 32281 I WS 47568 + 8 [a]
8 240 11 4462 0.073306337 32283 I WS 47584 + 8 [a]
8 240 6 4462 0.073307970 32284 I WS 47592 + 8 [a]
8 240 10 4462 0.073309010 32285 I WS 47600 + 8 [a]
8 240 5 4466 0.073311526 32281 I WS 47568 + 8 [a]
8 240 5 4469 0.073316215 175 I WS 47568 + 8 [kworker/5:1]
8 240 7 4462 0.073352932 32286 I WS 47608 + 8 [a]
8 240 7 4466 0.073354061 32286 I WS 47568 + 8 [a]
8 240 8 4468 0.073358935 32280 I WS 47624 + 8 [a]
8 240 4 4468 0.073360550 32279 I WS 47616 + 8 [a]
8 240 8 4472 0.073362145 32280 I WS 47568 + 8 [a]
8 240 5 4473 0.073362711 32281 I WS 47632 + 8 [a]
8 240 5 4477 0.073364177 32281 I WS 47568 + 8 [a]
8 240 0 7545 0.073407427 32282 I WS 47640 + 8 [a]
8 240 0 7549 0.073409589 32282 I WS 47568 + 8 [a]
答案 0 :(得分:2)
好的,我要回答我的问题。事实证明,工作负载中的Outstanding IO数量大于通用设备驱动程序队列大小(/sys/block/sdX/device/queue_depth)
。因此,某些请求在满队时无法插入此队列并导致此类现象。