私はアプリケーションがシーケンシャルI / Oを実行しているのか、ランダムI / Oを実行しているのかを確認する方法を探しています。 blktraceキャプチャを見て、I / Oが順次かランダムかを知ることはできますか?それでは、どのようなパターンを探すべきですか?
答え1
この情報を取得するにはblktrace
+を使用することが可能です。blkparse
U&L Q&Aに含まれるチャートを見てください。Linuxカーネルとパフォーマンスツールのグラフ?、特にこのセクション。
blktrace
このようなデータをお見せできる場所にあるようです。マニュアルページを見ると、出力に数字を含めることblkparse
ができることが示されています。sector
OUTPUT DESCRIPTION AND FORMATTING
The output from blkparse can be tailored for specific use -- in
particular, to ease parsing of output, and/or limit output fields
to those the user wants to see. The data for fields which can be
output include:
a Action, a (small) string (1 or 2 characters) -- see table below
for more details
c CPU id
C Command
...
s Sequence numbers
S Sector number
はい
$ sudo blktrace /dev/sda
Ctrl + C
次に、以下を使用して分析しますblkparse
。
$ blkparse sda -f "%-10S %D %2c %8s %5T.%9t %5p %2a %3d\n" | head -10
4064336 8,0 3 1 0.000000000 2779 A R
5090384 8,0 3 2 0.000000404 2779 A R
5090384 8,0 3 3 0.000001656 2779 Q R
5090384 8,0 3 4 0.000010042 2779 G R
5090384 8,0 3 5 0.000013714 2779 I R
8,0 3 0 0.000019067 0 m N cfq2779SN / insert_request
8,0 3 0 0.000021085 0 m N cfq2779SN / add_to_rr
8,0 3 0 0.000026848 0 m N cfq2779SN / set_active wl_class:2 wl_type:1
8,0 3 0 0.000029175 0 m N cfq2779SN / fifo= (null)
8,0 3 0 0.000030077 0 m N cfq2779SN / dispatch_insert
報告するセグメントがある場合は、カンマなしで数字(4064336など)で表示されます。したがって、理論的には、セクタ番号が連続かランダムかを確認することができます。
難しい部分は、どのアプリケーションが低レベルでどのI / Oイベントを発生させたかを確認することです。この問題を解決するには、fatrace
このU&L Q&Aで詳しく説明されている次のツールを使用できます。高いI/Oを担当する特定のファイルの識別。