BSD界隈四方山話

第78回パフォーマンスチェック ストレージデバイス編

ストレージデバイスチェック

システム全体でのストレージの利用状況を知るにはiostat(8)コマンドを使います。オプション-xを指定して実行すると、次のようにディスクデバイスごとの統計情報を定期間隔で表示させることができます。ここでは10を指定しているので、10秒ごとにディスクデバイスごとの情報を表示させることができます。

 iostat(8)でディスクごとの統計情報を表示
% iostat -x 10
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     0      3.2      5.4     1     0     0     1    0   0
mfid1        0     1      2.1     16.1     3     0     0     1    0   0
mfid2        0     1      2.1     16.1     3     0     0     1    0   0
mfid3       10     0     48.3      5.2     0     2     0     0    0   1
pass0        0     0      0.0      0.0    51     0     0    51    0   0
pass1        0     0      0.0      0.0    51     0     0    51    0   0
pass2        0     0      0.0      0.0    50     0     0    50    0   0
pass3        0     0      0.0      0.0    50     0     0    50    0   0
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     0      0.0      0.0     0     0     0     0    0   0
mfid1        0     5      0.0     27.8     0     0     0     0    0   0
mfid2        0     4      0.0     27.8     0     0     0     0    0   0
mfid3        0     0      0.0      0.0     0     0     0     0    0   0
pass0        0     0      0.0      0.0     0     0     0     0    0   0
pass1        0     0      0.0      0.0     0     0     0     0    0   0
pass2        0     0      0.0      0.0     0     0     0     0    0   0
pass3        0     0      0.0      0.0     0     0     0     0    0   0
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     0      0.0     28.8     0     0     0     0    0   0
mfid1        0     0      0.0      0.0     0     0     0     0    0   0
mfid2        0     0      0.0      0.0     0     0     0     0    0   0
mfid3        0     0      0.0      0.0     0     0     0     0    0   0
pass0        0     0      0.0      0.0     0     0     0     0    0   0
pass1        0     0      0.0      0.0     0     0     0     0    0   0
pass2        0     0      0.0      0.0     0     0     0     0    0   0
pass3        0     0      0.0      0.0     0     0     0     0    0   0

iostat(8)が表示する最初の情報はシステムが起動している間のディスク統計情報の平均値です。それ以降は指定した時間における平均値の出力となります。それぞれの項目は次のような統計情報を意味しています。高負荷時にはqlenや%bの項目をチェックすることで、どの程度の負荷状況にあるのかを確認できます。

 iostat(8)の項目の意味
項目内容
r/s1秒ごとの読み込みオペレーション数
w/s1秒ごとの書き込みオペレーション数
kr/s1秒ごとの読み込みバイト数(Kバイト)
kw/s1秒ごとの書き込みバイト数(Kバイト)
ms/r1読み込みオペレーションにかかる秒数(ミリ秒)
ms/w1書き込みオペレーションにかかる秒数(ミリ秒)
ms/t1トランザクションにかかる秒数(ミリ秒)
qlenトランザクションキューの長さ
%b1つ以上の未処理トランザクションがある時間的割合

ここではディスクデバイスの統計情報を表示させていますが、iostat(8)コマンドはターミナルやプロセッサの入出力統計情報なども表示させることができます。iostat(8)の出力を読むことでシステムの入出力状況の多くを知ることができます。

表示するディスクデバイスを絞り込む場合、引数の最後に表示させたいデバイス名を空白区切りで指定します。さらにオプションに-zを追加すると、アクティブではないディスクの統計情報の出力を抑制するようになります。こんな感じです。

 表示するディスクを指定してiostat(8)を実行
% iostat -xz -w 10 mfid0 mfid1 mfid2 mfid3
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     0      3.2      5.4     1     0     0     1    0   0
mfid1        0     1      2.1     16.1     3     0     0     1    0   0
mfid2        0     1      2.1     16.1     3     0     0     1    0   0
mfid3       10     0     48.2      5.2     0     2     0     0    0   1
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     0      0.0      1.6     0     0     0     0    0   0
mfid1        0     4      0.0     30.2     0     0     0     0    0   0
mfid2        0     4      0.0     30.2     0     0     0     0    0   0
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     2      0.0     83.2     0     0     0     0    0   0
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     0     12.7      2.8    10     0     0     5    0   0
mfid1        3    11     10.9     93.5    14     0     0     3    0   2
mfid2        3    11     10.6     93.5    16     0     0     4    0   2
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid1        0    13      0.0     85.5     0     0     0     0    0   0
mfid2        0    13      0.6     85.5     6     0     0     0    0   0
                        extended device statistics
device     r/s   w/s     kr/s     kw/s  ms/r  ms/w  ms/o  ms/t qlen  %b
mfid0        0     0      0.0     31.9     0     0     0     0    0   0
mfid1        0    10      0.0     53.8     0     0     0     0    0   0
mfid2        0    10      0.0     53.8     0     0     0     0    0   0

ディスクデバイスの利用状況は次のようにdf(1)コマンドを使って表示させます。オプション-hを指定すると、表示されるサイズがより人間が理解しやすいものになります。

 df(1)でファイルシステムごとの利用量情報を表示
% df -h
Filesystem    Size    Used   Avail Capacity  Mounted on
/dev/da0p2     27G     15G    9.7G    61%    /
devfs         1.0K    1.0K      0B   100%    /dev
procfs        4.0K    4.0K      0B   100%    /proc
map -hosts      0B      0B      0B   100%    /net
map -media      0B      0B      0B   100%    /media
%

最近のFreeBSDはストレージにZFSを使うことが多いので、df(1)の出力には次のようにZFSのデータセット(ファイルシステム)が表示させることが多いでしょう。ZFSのデータセットはディスク容量を共有しているため、UFSの領域とは表示の内容が異なっています。ZFSを使っている場合にはzpool(8)やzfs(8)で利用容量を表示した方がわかりやすいです。

 ZFSやよりたくさん自動マウント設定を含んでいる場合のdf(1)の出力
% df -h
Filesystem                 Size    Used   Avail Capacity  Mounted on
/dev/mfid0p2               447G     26G    385G     6%    /
devfs                      1.0K    1.0K      0B   100%    /dev
/dev/mfid3                 451G    139G    275G    34%    /d
z/Users                    404G    277G    127G    69%    /Users
z/local                    134G    6.4G    127G     5%    /usr/local
z/data                     127G     20K    127G     0%    /z/data
devfs                      1.0K    1.0K      0B   100%    /d/jail/j10.1/dev
map -hosts                   0B      0B      0B   100%    /net
map -media                   0B      0B      0B   100%    /media
map -noauto                  0B      0B      0B   100%    /proc
map -noauto                  0B      0B      0B   100%    /compat/linux/proc
map -noauto                  0B      0B      0B   100%    /n/netdisk
procfs                     4.0K    4.0K      0B   100%    /proc
%

搭載するメモリ容量が増えてきてその重要度が下がりつつありますが、スワップ情報も確認できます。swapinfo(8)コマンドを次のように実行するとどの程度スワップアウトしているかをチェックできます。

 swapinfo(8)でスワップ利用量の表示
% swapinfo -h
Device          1K-blocks     Used    Avail Capacity
/dev/da0p3        1572864      16M     1.5G     1%
%

swapinfo(8)というコマンドは実はpstat(8)というコマンドの別名です。FreeBSDだとハードリンクファイルになっており、本体はどちらかというpstat(8)コマンドになります。swapinfo(8)コマンドはpstat(8)にオプション-sを指定した場合の動作と同じです。ほかにも-Tを指定してシステムテーブルの利用状況やターミナル関連のテーブル情報を表示させるといったことができます。

 pstat(8)でもスワップ利用量などを表示できる
% pstat -T
246/31731 files
16M/1536M swap space
%

さらに細かいストレージ統計情報を得るにはDTraceを使います。iosnoopやiotopなどのプロバイダをチェックすることになります。ディスクエラーのチェックは/dev/log/messagesに出力されるメッセージをチェックするほか、DTraceで/args[0]->b_error == 0/の条件を満たすio:::doneプローブを指定して情報を取得するなどします。

基本的な統計情報はカーネルが保持しており、それら値はベースに用意されているコマンドを使って取得できるようになっています。DTraceが導入されてからは細かい統計情報をDTrace経由で取得できるようになっており、さまざまな方法で集計したデータを得ることができるようになっています。DTraceを使った統計情報の取得は基本的なコマンドの使い方を一通り説明したあとで取り上げていこうと思います。

勉強会

第58回 11月29日(火)19:00~ FreeBSD勉強会

2016年11月29日(火)には佐藤広生先生をお招きして第58回FreeBSD勉強会をドワンゴセミナールームで開催します。FreeBSD ZFS性能測定とチューニングのお話をしていただく予定です。第58回FreeBSD勉強会では、FreeBSD勉強会史上初、ニコ生放送を実施します。今後、2ヶ月に1回ほどのペースでFreeBSD勉強会の内容をニコ生放送する予定です。よろしくお願いします。

参加申請はこちらから。

第59回 12月13日(火)19:00~ FreeBSD勉強会

ストレージシステムの基盤として使われることの多いZFS。いったん運用を開始あるとあとはボリュームの管理や、ハードウェアの管理、またはより高速なハードウェアの利用などを行いたくなってきます。第59回のFreeBSD勉強会ではそうした部分にフォーカスしてZFSの扱い方を紹介します。このところ続けているFreeBSD ZFS解説シリーズです。

参加申請はこちらから。

おすすめ記事

記事・ニュース一覧