2

私はblktraceを使用して、IO負荷の高いマルチスレッドIOワークロードでのブロックレイヤーの動作を理解しています。ブロックレイヤーで重複したLBAリクエストを確認できます。たとえば、元のワークロードでLBA47568への書き込み要求は1つだけです。ただし、blktraceは、LBA47568を書き込む121のリクエストを示しています。以下は、Iイベント(リクエストキューに挿入されたIO)のみをフィルタリングするblkparseログの一部です。私はこの現象がなぜ起こるのか、そしてどうすればそれを取り除くことができるのかを理解しようとしています。IOマージを回避するために、/ sys / block / sdX/nomergeでnoopIOスケジューラと値2を選択しました。よろしくお願いします。

  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 に答える