新しいサーバーのプロビジョニングの一環として( その他のSF を参照)、次のことを確認したいと思います。
Iostatとdstatを使用して、操作ごとおよび全体的なデータレベルでの読み取り/書き込みをすでに把握できますが、詳細を知りたいです。たとえば、私たちはほとんどランダムな16kbの読み取りであるか、ランダムな書き込みを伴う多くの連続した64kbの読み取りであることを知りたいです。
私たちは(現在)Ubuntu 10.04VMを使用しています。
この情報を記録して表示する、実行可能なユーティリティはありますか?
私はこの目的のために collectlユーティリティ を使用するのが好きです。私は これは別の答えで 再生用の特定のI/O統計出力を探している人のために言及しました。特定のニーズに合わせて出力を調整できるはずです。 Ubuntuでは、これは通常のリポジトリから利用できるはずです。注意点は、探しているパーセンテージが表示されないことです。
nmon は、探している情報のほとんどを簡単なインターフェイスで提供できる優れたツールでもあります。
すでにiostat
に精通している場合、現在使用しているフラグは何ですか?
あなたが筋金入りで特定のアプリケーションをプロファイリングしている場合、 SystemTap がオプションになる可能性がありますが、それが正しいかどうかはわかりません。必要以上に手間がかかるかもしれません。
Solaris Dtraceからこの情報を取得するのは非常に簡単です(ZFSシステムの場合- NexentaStor 以下のスクリーンショット)が、Linux側で少し掘り下げる必要があります...だからあなたcould検討 Linux用のDtrace 。
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.
OSXのiopattern
はランダムな%と順次パーセントを実行し、OSXのiopending
はヒストグラムを表示しますが、何がわかりません。ただし、これらはDtraceスクリプトであるため、あまり役に立たない場合があります。