dstat を使って IO Accounting にアクセスする方法

October 30th, 2009 by naoya | Filed under day.

前回に引き続いて、dstat その二です。

Linux には、kernel 2.6.20 以降から、IO Accounting という機能が組み込まれています。この機能は、簡単に言ってしまうと、各プロセスごとの IO 情報をカウントしてくれる機能です。この機能があると、プロセスごとの I/O が分かるので、どのプロセスが原因で I/O が重いとかが分かるようになります。

普段使っている CentOS 5.x 系は kernel 2.6.18 系なのですが、RHEL 5.4 のリリースノートをよく見てみると、次のような記述がありました。

・ストレージ/ファイルシステム関連のアップデート:
BlktraceによりブロックIOレイヤでのトレース機構を提供します。I/O accountingによりプロセスごとの実際のIOのアカウンティングが可能になりました。一般ユーザーが独自のファイルシステムを作成できるFUSE (Filesystems in user space) のカーネル基盤とユーティリティを提供します。

ということで、最新リリースである CentOS 5.4 でも対応しているようです。

前回紹介した dstat では、バージョン 0.6.7 以降から、dstat_topio という拡張プラグインが組み込まれて、この IO Accounting の機能にアクセスことができます。

CentOS で、公式で提供されているのはバージョン 0.6.6 なので、この機能を利用することはできません。なので、ソースコードをダウンロードして RPM を作ります。

$ wget http://dag.wieers.com/home-made/dstat/dstat-0.6.9.tar.bz2

$ rpmbuild -ta dstat-0.6.9.tar.bz2

dstat の tarball には、SPEC ファイルが含まれているので RPM をすぐに作成することができます。RPM を作成したら、CentOS 5.4 の環境にアップグレードするかインストールします。

次に dstat_topio という拡張プラグインを使うには、次のように実行します。

$dstat -M topio -d -M topbio

—-most-expensive—- -dsk/total- —-most-expensive—-
i/o process                   | read  writ        |  block i/o process
init        275k:1490k    | 396k 3375k    |  init         62k:1380k
mysqld       84k:  46k  |  96k  792k      |   kjournald     0 : 132k
mysqld      107k:  30k | 192k  232k      |  mysqld       48k:  24k
mysqld       95k:  29k  | 192k  272k     |  mysqld       80k:  36k

このように各プロセスごとの I/O 情報を取得することができます。

ちなみに、CentOS 5.3 の環境では、次のようなエラー表示になります。

$ dstat -M topio -d -M topbio

Module topio failed to load. (Kernel has no I/O accounting, use at least 2.6.20)
Module topbio failed to load. (Kernel has no I/O accounting, use at least 2.6.20)
-dsk/total-
read  writ
58k  442k
0    24k
0     0
0   528k

ということで、必ず CentOS 5.4 の環境で使う必要があります。

この機能を使うことで、IO がボトルネックの場合、どのプロセスに原因があるのかを調査することができるので便利になりますね。

ちなみに、sar コマンドで有名な sysstat にも、バージョン 9.0 から pidstat というコマンドで同様の情報を取得することができますので、必要な人は導入してみるといいでしょう。

2 Responses to “dstat を使って IO Accounting にアクセスする方法”

  1. Mars07 says:

    これは役に立ちますね。勉強になりました。

  2. naoya says:

    コメントありがとうございます!お役に立ったということで、とてもうれしいです。

Leave a Reply