やっぱり Sun がスキ! : Weblog やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20060529 2006年 5月 29日 月曜日

DTraceを使ってみよう#1(入門編)


■DTrace を使ってみよう。

Solaris 10 から DTrace 機能が搭載されました。
DTrace とはシステムに関連した問題(特に性能)をリアルタイムで分析する機能です。
この強力な機能を上手に活用すれば、問題を早期解決することができます。
従来は原因を特定するために、膨大な時間を必要としていました。
(adb, truss などのツールを駆使していました。)
■特徴
・リアルタイムに分析、診断できるポイントを約4万箇所持っています。
・D言語というスクリプト言語で制御します。
■使ってみよう
何はともあれ動かしてみましょう。

まずはスクリプトを記述します。

# cat test.d
syscall::write:entry
/uid==0/
{
	printf("%s",execname);
}

profile:::tick-1sec
/i++>=10/
{
	exit(0);
}
このスクリプトをDTraceで実行してみます。

# dtrace -s test.d

10秒間、何かを表示します。
■ちょっと解説
D言語の基本構造は次のようになっています。C言語に似ていますね。

プローブ記述
/述語/
{
	アクション
}
・「プローブ記述」は(provider:module:function:name)の4つから構成されています。
項目を省略することもできます。問題箇所を絞り込むために利用します。
指定できる詳細なリストは dtrace -l で表示します。
syscall::write:entry とはシステムコールの書き込みの入り口が呼び出されたらを意味します。

・「述語」で条件を指定します。
省略することもできます。
uid==0 とはユーザIDを0(ルート)に限定します。

・「アクション」で動作を決定します。
printf("%s",execname);とはプロセス名を表示します。
つまり、
「システムコールの書き込みの入り口が呼び出されたら、ユーザIDが0のプロセス名を表示しなさい」
というスクリプトでした。
D言語の基本構造を並記することで、並列処理させることができます。
profile:::tick-1sec
/i++>=10/
{
	exit(0);
}
とは10秒でdtraceを終了させることを意味します。便利な記述です。
これががないとCTRL-Cするまで永遠に dtrace を実行し続けます。
■集計関数
D言語には集計に便利な機能が盛り込まれています。従来であれば awk や perl を必要としました。
test.d を少し改良してみましょう。

# cat test1.d
syscall::write:entry
/uid==0/
{
	@c[execname]=count();
}

profile:::tick-1sec
/i++>=10/
{
	exit(0);
}
実行してみましょう。
# dtrace -s test1.d
dtrace: script 'test1.d' matched 2 probes
dtrace: buffer size lowered to 2m
dtrace: aggregation size lowered to 1m
CPU     ID                    FUNCTION:NAME
  0  39250                       :tick-1sec

  mozilla-bin                                                       2
  xscreensaver                                                      2
  gnome-netstatus-                                                  5
  dtrace                                                           10
  gnome-terminal                                                   25
  java                                                             82
■ちょっと解説
変更箇所はアクション部分です。集計関数と呼ばれるもので、次のような形で使われます。
@name[key]=aggfunc(args);

aggfunc(args)は集計関数であり、count()は呼び出された回数を返します。
@name は集積体と呼ばれる変数です。
プロセス名execnameをキーとして、呼び出された回数が各変数に格納されます。
つまり10秒間
「システムコールの書き込みの入り口が呼び出された回数を、ユーザIDが0のプロセス名ごとにカウントしなさい」
というスクリプトでした。
これによりどんなプロセスがシステムコールを頻繁に呼び出しているのかを分析することができます。
集計関数には sum(), avr(), min(), max(), quantize(), lquantize() などがあります。

zfs-intro

ZFS のご紹介


はじめに

Solaris 10 Update 2 よりZFSが実装されます。 ZFS とは、Zettabyte File System の略で、以下の特徴があります。

・128-bit ファイルシステム
今までのファイルシステムによっては、何GByteまでといったような 制限があったと思いますが、ZFSの場合は、 事実上無制限といえるサイズのファイルシステムを構築可能です。

・オープンソース(無償)
Solaris をインストールすれば、タダで使える機能です。

では実際、どのように使うのでしょうか? はじめに、ストレージプールを作成します。

zpool create testpool c1t1d0 c1t2d0 c1t3d0


ストレージプールを作成すると、ストレージプール名でファイルシステムとマウ ントポイントが作成されて、マウントまで全て自動的に行われます。 もちろん、マウントされたディレクトリでファイル作成などの作業ができます。

自動的に作成されるファイルシステム(ZFS)以外にも、ファイルシステムを 作成することができます。

zfs create testpool/home

好きなマウントポイントにマウントすることもできます。

zfs set mountpoint=/export/user testpool/home 

ZFS(ファイルシステム)の拡張はストレージプールにディスクを追加するだけ です。

zpool add testpool c1t4d0

以上、まとめますと

・ZFS(ファイルシステム)の作成は容易に早くできる
ちなみに上記のコマンド実行時間は、 18GB のディスクを使って、0.1 〜 3.1秒です。

・ストレージプール
ZFS の場合、ストレージプールを一元的に管理することによって、 ファイルシステムの使用容量を柔軟に変更することができる。


ZFS のボリュームマネジメント機能について

これまで作成したストレージプールは、RAID-0(ストライピング)の構成でした が、ミラーリングや、RAID-Z(RAID-5 の ZFS版)を構成できます。

・ミラーリング

ミラーリングは、既存のディスクに設定する方法と、新規にストレージプールを 作成する時に設定する方法があります。

既存のディスクに対してミラーリングを設定するコマンドです

zpool attach testpool mirror c1t1d0 c1t5d0

ストレージプール作成時にディスクのミラーリングを設定するコマンドです

zpool create testpool mirror c1t1d0 c1t2d0 mirror c1t3d0 c1t4d0

ディスクをミラー構成で追加することもできます

zpool add testpool mirror c1t5d0 c1t6d0


・RAID-Z

RAID-Z とは、ストレージプールの一種で、 RAID-5 の ZFS 版でその主な特徴は、

・read-modify-write を行わない
書き込みなどの処理が従来の RAID-5 よりも早くなった

・write-hole の問題を解決
RAID-5 よりも安全性が高くなった

RAID-Z は下記のコマンドで作成します。

zpool create raidzpool raidz c1t1d0 c1t2d0 c1t3d0 c1t4d0 c1t5d0


今回のおさらい

・Solaris 10 Update 2 より実装

・Zettabyte File System の略

・128-bit ファイルシステム

・オープンソース(無償)

・コマンドが基本的に zfs と zpool のみで操作が簡単

・ファイルシステム(ZFS)、ストレージプールの作成実行時間が早い

・ファイルシステム(ZFS)の使用容量をストレージプールを
 一元的に管理することによって、柔軟に変更することができる。

・RAID-0(ストライピング)、RAID-1(RAID-1+0,ミラーリング)
 RAID-Z(RAID-5 の ZFS版)を構成できる。


今回ご紹介できなかった特徴

・VMソフトいらずのファイルシステム
ファイルシステム(ZFS)に使用制限を設定したり、 圧縮処理や、スナップショットの作成、Export、Import などの 作業ができます。

その他にも、ご紹介しきれなかった機能もありますので、詳細は下記の URL を 参照してください。

・Solaris ZFS Administration Guide
http://docs.sun.com/app/docs/doc/817-2271?l=ja

・ZFS Documentation (Beta)
http://www.opensolaris.org/os/community/zfs/docs/

・ZFS: The Last Word in File Systems
http://www.opensolaris.org/os/community/zfs/docs/zfs_last.pdf

・次世代のファイルシステム「Solaris ZFS」
http://jp.sun.com/company/events/downloads/3121/snw2006_zfs.pdf