1

最近 blktrace/blkparse を使用していますが、いくつか質問があります。誰か助けていただければ幸いです。

1) blkparse 出力のブロック数の値は、セクター (512 バイト) で表されます。これは正しいです?これは、512 バイトのセクターを持たない SSD でも適用できますか?

2) 1MB ブロックより大きいデータを送信するワークロードを実行しても (libaio を使用)、このブロック数の値は 2048 (1MB) を超えません。Linux ブロック レイヤーに送信できるブロック サイズに制限はありますか? また、ブロック レイヤーが大きなブロックを小さなブロックに自動的に分割する場合はどうなりますか? これが行われているカーネルコードパスを教えてもらえますか?

よろしくお願いします。

テルコ

4

1 に答える 1

0

Blktrace は、セクターを512 バイト長と見なす Linux カーネルからデータを取得します。したがって、デバイスの物理セクター サイズに関係なく、blktrace はオフセットとサイズを 512 バイトのセクターで表示すると思います。

dd を使用してテストを行い、何が起こるかを確認し、btrace を使用してディスク アクセスを記録できます。例えば、

dd if=/dev/something of=/dev/null bs=512 count=1 skip=512

2 番目の質問については、ブロック層で多くのことが起こっています。I/O 要求はバッファリングされ、マージされ、スケジュールされます。そのため、カーネルがアプリケーションで指定されたブロック サイズとは異なるブロック サイズでディ​​スク アクセスを行っても驚かないでください。

于 2013-08-24T14:44:26.350 に答える