4

これは blktrace の出力です。「N 0 (00 ..) [multipathd]」が何なのか理解できませんでした。FS の書き込み IO パフォーマンスをテストしています。

2点疑問があります、

  1. N - はアクションですが、blktrace.pdf でその使用法を見つけられません。
  2. IOSTAT と BLKTRACE の違いは何ですか。

ブロックトレース o/p:

  8,128  7       11    85.638053443  4009  I   N 0 (00 ..) [multipathd]   
  8,128  7       12    85.638054275  4009  D   N 0 (00 ..) [multipathd]   
  8,128  2       88    89.861199377  5210  A   W 384 + 8 <- (253,0) 384   
  8,128  2       89    89.861199876  5210  Q   W 384 + 8 [i_worker_0]   
  8,128  2       90    89.861202645  5210  G   W 384 + 8 [i_worker_0]   
  8,128  2       91    89.861204604  5210  P   N [i_worker_0]   
  8,128  2       92    89.861205587  5210  I  WA 384 + 8 [i_worker_0]   
  8,128  2       93    89.861210869  5210  D  WA 384 + 8 [i_worker_0]   
  8,128  2       94    89.861499857     0  C  WA 384 + 8 [0]   
  8,128  2       95    99.845910681  5230  A   W 384 + 8 <- (253,0) 384   
  8,128  2       96    99.845911148  5230  Q   W 384 + 8 [i_worker_20]   
  8,128  2       97    99.845913846  5230  G   W 384 + 8 [i_worker_20]   
  8,128  2       98    99.845915910  5230  P   N [i_worker_20]   
  8,128  2       99    99.845917081  5230  I  WA 384 + 8 [i_worker_20]   
  8,128  2      100    99.845922597  5230  D  WA 384 + 8 [i_worker_20]
4

1 に答える 1

9

blktrace の紹介があります http://duch.mimuw.edu.pl/~lichota/09-10/Optymalizacja-open-source/Materialy/10%20-%20Dysk/gelato_ICE06apr_blktrace_brunelle_hp.pdf

IOSTAT と BLKTRACE の違い。

スライド 5 と 6 を確認してください。

iostat ユーティリティは、特定のデバイスに関連付けられたリクエスト キューに関する情報を提供します。

  • – キューでの平均 I/O 時間、マージの数、読み書きされたブロックの数、...
  • – ただし、I/O ごとの詳細情報は提供しません

ブロックトレース。ブロック I/O レイヤーに入る各 I/O で実行される特定の操作のイベントを発行する、低オーバーヘッドで構成可能なカーネル コンポーネント

したがって、iostat は統計を出力するための汎用ツールです。blktrace は、ツールがアクティブだったときに処理されたすべての I/O 要求に関する詳細情報をキャプチャして出力するツールです。

スライド 11 にはいくつかのデコード イントロがあります

 8,128  7       11    85.638053443  4009  I   N 0 (00 ..) [multipathd]   
 maj/min cpu  seq#   timestamp_s.ns  pid  ACT RWBS blocks    process

multipathd は、その名前が[]中かっこに含まれているため、カーネル デーモンです。

デフォルトのフォーマットは blktrace.pdf で説明されています (ここに PDF のソースがあります: http://git.kernel.org/cgit/linux/kernel/git/axboe/blktrace.git/tree/doc/blktrace.tex ) 。

"%D %2c %8s %5T.%9t %5p %2a %3d "

%D イベントのデバイス メジャー/マイナーを次のように表示します: \%3d,\%-3d。%2c CPU ID (2 文字のフィールド)。%8s シーケンス番号 %5T.%9t タイム スタンプの秒部分の 5 文字フィールドと、タイム スタンプのナノ秒部分の 9 文字フィールド。%5p プロセス ID の 5 文字のフィールド。%2a アクションの 1 つの 2 文字のフィールド。%3d RWBS データの 3 文字フィールド。

行動

C -- complete
D -- issued
I -- inserted
Q -- queued
B -- bounced
M -- back merge
F -- front merge
G -- get request
S -- sleep
P -- plug
U -- unplug
T -- unplug due to timer
X -- split
A -- remap
m -- message

RWBS

'R' - read,
'W' - write 
'D' - block discard operation
'B' for barrier operation or 
'S' for synchronous operation.

つまり、multipathd には "I" action = "inserted" があり、RWBS には N がありますが、N は奇妙です。ドキュメントにもソースにも N はありません: blkparse_fmt.c - fill_rwbs()。なんで?古いドキュメントと古いソースだからです。

最新のカーネルでは、たとえば 3.12 では、fill_rwbs に N があります: http://sources.debian.net/src/linux/3.12.6-2/kernel/trace/blktrace.c?hl=1038#L1038

if (t->action == BLK_TN_MESSAGE) {
    rwbs[i++] = 'N';
    goto out;
}

そして、blktrace_api.hは BLK_TN_MESSAGEを次のように宣言します。

#define BLK_TN_MESSAGE        (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY))

 * Trace categories
    BLK_TC_NOTIFY   = 1 << 10,  /* special message */

 * Notify events.
    __BLK_TN_MESSAGE,       /* Character string message */

したがって、「N」は文字列メッセージによる通知アクションです。「ブロック」フィールドの代わりにメッセージが表示されると思います。TN_MESSAGE を追加するパッチを見つけることができましたが、ドキュメントの更新はありませんでした ( Linux のようなモデルであるbazaarで計画されていたとおり) http://lkml.org/lkml/2009/3/27/31 "[ PATCH v2 6/7] blktrace: BLK_TN_MESSAGE を適切に出力する" 2009

于 2014-02-05T21:52:39.683 に答える