2

我正在使用 blktrace 来了解具有高 IO 负载的多线程 IO 工作负载中的块层行为。我可以在块层中观察到一些重复的 LBA 请求。例如,在我的原始工作负载中,我只有一个对 LBA 47568 的写入请求。但是,blktrace 显示 121 个请求写入 LBA 47568 !!! 下面是 blkparse 日志的一部分,它只过滤 I 事件(IO 插入到请求队列中)。我试图了解为什么会发生这种现象以及如何消除这种现象。我在 /sys/block/sdX/nomerge 中选择了 noop IO 调度程序和值 2 以避免 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]
4

1 回答 1

2

好的,我来回答我的问题。事实证明,工作负载中的未完成 IO 数量大于通用设备驱动程序队列大小(/sys/block/sdX/device/queue_depth)。因此,有些请求在这个队列满的时候没有插入到这个队列中,导致了这样的现象。

于 2013-03-10T01:24:08.740 回答