Blktrace の I/O イベントが見つからない

Blktrace の I/O イベントが見つからない

私は blktrace を使用してデバイスに送信されるトラフィックをキャプチャしていますが、いくつかの厄介な問題に対処しています。皆さんが私の発見を確認/修正できるかどうか知りたいです。

blktrace で一部のイベントが欠落しているようです。デバイスに発行された読み取りコマンドのレイテンシの分布を取得しようとしています。blkparse と btt がそれを実行することは知っています。ただし、blkparse の結果を詳しく調べると、レイテンシの数値は実際にはコマンドから応答 (D から C) ではなく、応答から応答 (C から C) のレイテンシであるようです。BTT も、応答のないコマンド (D はあるが C がない) に遭遇すると失敗します。

そこで、独自のコードを開発してみたところ、コマンドを発行しても応答が見つからないケースが多数あることに気付きました (D はあるが、それに対応する C がない)。また、コマンドがないのに応答があるケースも多数あります (C はあるが、それ以前の D がない)。自分の発見を確認するために、nullblk デバイスで FIO を実行し (DRAM を使用するため、かなり高速です)、nullblk デバイスを追跡するために blktrace を有効にしました。FIO が 80 GB のデータ書き込みをログに記録すると、blktrace はディスクに約 50 GB のデータしかキャプチャしないことがわかります。この結論については少し混乱していて確信が持てませんが、負荷の高いワークロードでは blktrace がイベントをドロップするようです。

皆さんもそれに気づいていますか? 誰か私の誤った分析を指摘したり、私の発見を確認したりしてくれませんか?

私が使用した fio コマンドは次のとおりです。

sudo fio --name=seqwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=128k --direct=0 --size=130M --numjobs=600 --runtime=300 --group_reporting

答え1

残念ながら、blktraceのサマリー出力が含まれていませんでした。ドロップされたイベントの数がゼロではないと記載されていますか?もしそうなら、イベントが読み込まれるまで保持するリングバッファがオーバーフローしている可能性があります。その場合は、--buffer-sizeマニュアルページに記載されているオプション...

関連情報