web-dev-qa-db-ja.com

記録するLinuxユーティリティIO統計(ランダム/シーケンシャル、ブロックサイズ、読み取り/書き込み比率)

新しいサーバーのプロビジョニングの一環として( その他のSF を参照)、次のことを確認したいと思います。

  • ランダムな読み取りと書き込みの比率
  • 一度に読み書きされるデータの量(ヒストグラム形式の設定)

Iostatとdstatを使用して、操作ごとおよび全体的なデータレベルでの読み取り/書き込みをすでに把握できますが、詳細を知りたいです。たとえば、私たちはほとんどランダムな16kbの読み取りであるか、ランダムな書き込みを伴う多くの連続した64kbの読み取りであることを知りたいです。

私たちは(現在)Ubuntu 10.04VMを使用しています。

この情報を記録して表示する、実行可能なユーティリティはありますか?

4
Michael Pearson

私はこの目的のために collectlユーティリティ を使用するのが好きです。私は これは別の答えで 再生用の特定のI/O統計出力を探している人のために言及しました。特定のニーズに合わせて出力を調整できるはずです。 Ubuntuでは、これは通常のリポジトリから利用できるはずです。注意点は、探しているパーセンテージが表示されないことです。

nmon は、探している情報のほとんどを簡単なインターフェイスで提供できる優れたツールでもあります。

すでにiostatに精通している場合、現在使用しているフラグは何ですか?

あなたが筋金入りで特定のアプリケーションをプロファイリングしている場合、 SystemTap がオプションになる可能性がありますが、それが正しいかどうかはわかりません。必要以上に手間がかかるかもしれません。

Solaris Dtraceからこの情報を取得するのは非常に簡単です(ZFSシステムの場合- NexentaStor 以下のスクリーンショット)が、Linux側で少し掘り下げる必要があります...だからあなたcould検討 Linux用のDtrace

enter image description here

2
ewwhite

SystemTap ツールを使用して、 この投稿 からの方法に従いました。

最初に、systemtapをインストールします。 Debian/Ubuntuの場合:

apt-get install systemtap linux-image-$(uname -r)-dbg linux-headers-$(uname -r)

Systemtapスクリプトを作成し、blockio.stpとして保存します。

global writes
global reads

probe ioblock.request {
    if(bio_rw_num(rw) == BIO_WRITE)
        writes[devname] <<< size
    if(bio_rw_num(rw) == BIO_READ)
        reads[devname] <<< size
}

probe end {
    printf("\n")
    # foreach([devname] in writes-) {
    #     printf("Device: %s\n", devname)
    #     println(@hist_log(writes[devname]))
    # }
    printf("WRITE\n")
    println(@hist_log(writes["sda1"]))
    printf("READ\n")
    println(@hist_log(reads["sda1"]))
}

Sda1をドライブに置き換えるか、 original post のようにforeachメソッドを使用して、すべてのドライブの統計を表示します。

監視を開始します。 rootとして実行

stap -v blockio.stp

監視を終了する場合は、Ctrl + Cで停止します。出力は次のようになります

Pass 1: parsed user script and 95 library script(s) using 84064virt/25528res/2408shr/23916data kb, in 160usr/0sys/164real ms.
Pass 2: analyzed script: 3 probe(s), 21 function(s), 2 embed(s), 4 global(s) using 297648virt/205248res/86464shr/119268data kb, in 1750usr/60sys/1815real ms.
Pass 3: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.c
Pass 4: using cached /root/.systemtap/cache/ea/stap_ea33aaf95086fa562bb720d36fca7504_12821.ko
Pass 5: starting run.
^C
WRITE
  value |-------------------------------------------------- count
      0 |@@@@@@@@@@@@@@@@@@@@@@@@                           191952
      1 |                                                        0
      2 |                                                        0
        ~
   1024 |                                                        0
   2048 |                                                        0
   4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  395272
   8192 |@@                                                  16273
  16384 |@                                                   12799
  32768 |                                                     4908
  65536 |                                                     4170
 131072 |                                                     2159
 262144 |                                                     6546
 524288 |                                                     4587
1048576 |                                                        0
2097152 |                                                        0

READ
  value |-------------------------------------------------- count
    128 |                                                       0
    256 |                                                       0
    512 |                                                       2
   1024 |                                                       0
   2048 |                                                       0
   4096 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  38229
   8192 |@@                                                  1550
  16384 |@@@                                                 2525
  32768 |@@                                                  1692
  65536 |@@                                                  1693
 131072 |@@@@@@@@@@@@@@@@@@                                 14455
 262144 |                                                     217
 524288 |                                                       0
1048576 |                                                       0

Pass 5: run completed in 140usr/720sys/3662349real ms.
4
modular

OSXのiopatternはランダムな%と順次パーセントを実行し、OSXのiopendingはヒストグラムを表示しますが、何がわかりません。ただし、これらはDtraceスクリプトであるため、あまり役に立たない場合があります。

0
chendo