TOP設計・移行・活用> フックポイントの絞りこみ
OSS適用システムの障害解析ツール
OSS適用システムの障害解析ツール

第4回:MIRACLE LINUXによる実践的なLKSTの利用
著者:ミラクル・リナックス  武田 保真   2005/7/5
前のページ  1  2  3  4
フックポイントの絞りこみ

   LKST性能評価機能を用いて性能解析を行う際には、できるだけ不要なフックポイントは設定しないほうが良いことは述べた。そこで、実際にフックポイントを絞りこむための操作について説明しておく。

   LKSTのフックポイントは、マスクセットと呼ばれるフックポイント一覧で構成される。システムに登録されているマスクセットの確認はlkstmコマンドで行う。

# /sbin/lkstm list
maskset_id     length     name
  0 (0x00) 4096 RNOTHING
  1 (0x01) 4096 RALL
  2*(0x02) 4096 RDEFAULT

   "*"が付いているマスクセットが現在選択されているマスクセットである。そこで、このマスクセットをもとにマスクセットの絞りこみを行ってみる。

   まずは、既存のマスクセットの内容を読み出し、ファイルに保存する。

   次のコマンドでは、-mオプションでmaskset_id 2番を指定して、maskset.1ファイルにマスクセットの内容を読み込んでいる。

# /sbin/lkstm read -m 2 > maskset.1

   このmaskset.1ファイルには、LKSTでデータを取得できるフックポイントと、そのフックポイント通過時の処理が一覧になっている。

# ID=2
# maskset name=RDEFAULT
# length=4096
# event_type   event_name   event_handler_ID
  0x001 PROCESS_CONTEXTSWITCH   0x01
  0x002 PROCESS_WAKEUP 0x01
  0x003 PROCESS_SIGSEND 0x01
  0x004 PROCESS_LTHREADGEN 0x01
  0x005 PROCESS_INIT_WQH 0x01
  0x006 PROCESS_ADD_WQ 0x01
  0x007 PROCESS_REM_WQ 0x01
  0x008 PROCESS_SCHED_ENTER 0x01
  0x009 PROCESS_SCHED_EXIT 0x01
  0x00a PROCESS_FORK 0x01
  …

   上記のファイル内で、event_handler_IDが0x01になっているイベントは、イベント記録の対象として扱われる。一方、0xffに設定されているイベントはイベントが記録されない。したがって、不要なフックポイントを無効にするためには、それぞれのevent_typeに設定されているevent_handler_IDを0xffに変更すれば良い。

   例えば、システムコールの入口、出口でのフックポイントを無効にするためには、次のようにマスクセットを変更する(Kernel 2.4の場合)。

0x030     SYSCALL_ENTRY     0xff
0x031     SYSCALL_EXIT     0xff

   そして、変更したmaskset.1ファイルを使って、新しいマスクセットを登録する。

# /sbin/lkstm write -f maskset.1
New maskset id=3 was written. (Name:new_maskset0)

   以上の操作で、自由にマスクセットを変更できるので、必要に応じてマスクセットを調節してからデータ取得を行うことをお薦めする。


lkstlogdの利用

   前回の記事で少し紹介したが、カーネル内部にイベントを記録するための領域は、lkstbufコマンドによって、より大きな領域を確保することができる。しかし、x86環境ではカーネル内部に確保できるバッファに制限があり、最大でも合計約128MBまでしか確保できない。このバッファサイズは、長時間動作するアプリケーションのイベントを記録するためには十分とはいえない。

   そのためLKSTでは、lkstlogdと呼ばれるデーモンを経由して、カーネル内のバッファを自動でファイルに書き出す仕組みを提供している。

   lkstlogdを利用するメリット、デメリットは次の通りである。

  • 長時間のLKSTのイベントログを取得することが可能となる
  • lkstlogdによるログ書き出しのディスクI/Oが発生するため、ディスクI/O系のイベント解析には向かない

   実際にlkstlogdを利用するためには、serviceコマンドでlkstlogdを起動する。

# /sbin/service lkstlogd start

   lkstlogdを起動すると、/var/log/lkstにsebuf00.0、sebuf01.0といったファイルが作成される。これらのファイルはそれぞれのCPUごとに記録されたバイナリ形式のログファイルである。

   lkstlogdの起動直後は、マスクセットがlkstlogdのデフォルトとなっているため、マスクセットの変更を行ってからデータの取得を開始することを忘れないようにする。

   このようにlkstlogdを利用することで長時間のログの書き出しが可能となる。


まとめ

   今回紹介したMIRACLE LINUX V3.0用のRPMパッケージを利用することで、LKST性能評価機能を手軽に試すことができる。興味のある方はぜひ試して欲しい。

   また、2005年秋出荷予定のMIRACLE LINUX V4.0では、LKST性能評価機能を組み込んでおり、OProfileなどのツールと組み合わせることで、アプリケーションやカーネルの性能解析、ボトルネックの抽出などに利用できる環境が整っているので、ぜひ活用して欲しい。

   次回は、日立製作所の杉田氏が、「DAVL(Disk Allocation Viewer for Linux)」について紹介する。

前のページ  1  2  3  4


ミラクル・リナックス株式会社 武田 保真
著者プロフィール
ミラクル・リナックス株式会社   武田 保真
2001年入社。「MIRACLE LINUX Standard Edition V1.1」から製品開発に携わり今に至る。Samba、Kernelなどのパッケージメンテナンスを経て、最近はAsianuxプロジェクトでの製品開発が主な業務。気になったことにはすぐ手を出すために、一時期はインストーラも担当していたほど、ミラクルの何でも屋担当。


INDEX
第4回:MIRACLE LINUXによる実践的なLKSTの利用
  はじめに
  LKSTのオーバーヘッド
  chatベンチ
フックポイントの絞りこみ