|
|
前のページ 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プロジェクトでの製品開発が主な業務。気になったことにはすぐ手を出すために、一時期はインストーラも担当していたほど、ミラクルの何でも屋担当。
|
|
|
|