1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
|
.\"
.\" Japanese Version Copyright (c) 1997 Koso Fukuba
.\" all rights reserved.
.\" Translated Mon Jan 27 12:00:00 JST 1997
.\" by Koso Fukuba <koso@ga2.so-net.or.jp>
.\" for util-linux-2.5
.\" Translated Tue Sep 02 12:00:00 JST 1997
.\" by Koso Fukuba <koso@ga2.so-net.or.jp>
.\" for util-linux-2.7
.\" Updated Mon Apr 9 20:17:43 JST 2001
.\" by Yuichi SATO <ysato444@yahoo.co.jp>
.\" Updated & Modified Wed Aug 28 04:34:09 JST 2002 by Yuichi SATO
.\" Updated & Modified Sat May 1 17:16:36 JST 2004 by Yuichi SATO
.\"
.TH READPROFILE 1 "May 1996"
.UC 4
.SH 名前
readprofile - カーネルのプロファイリング情報を読みだすツール
.SH 書式
.B readprofile
[
.I options
]
.SH バージョン
このオンラインマニュアルは、バージョン 2.0 のものである。
.SH 説明
.LP
.B readprofile
コマンドは、
.B /proc/profile
の情報を標準出力に出力する。
出力される情報は、3 種類の情報から構成されている。
最初の項目は、クロックチック (clock tick) である。
2 番目は、たくさんの時間を消費しているカーネル内部の C の関数名である。
3 番目の項目は、手続きの「負荷」を正規化したもので、
関数の長さとクロック数の比率として計算される。
これらの項目は、読み取りやすいように空白を入れ、桁を揃えて出力される。
.LP
次のコマンドラインオプションを指定できる:
.TP
.RB -m " mapfile"
マップファイルを指定する。
デフォルトでは、
.B /usr/src/linux/System.map
が使用される。
現在のカーネルが最後にコンパイルしたものでない場合、
または System.map を他の場所に保存している場合は、
コマンドライン上でマップファイルを指定する必要がある。
マップファイル名の最後が `.gz' となっている場合は、
実行時に自動的に伸長される。
.TP
.RB -p " pro-file"
別のプロファイリングバッファを指定する。
デフォルトでは、
.B /proc/profile
が使用される。
別のプロファイリングバッファを使用すると、
カーネルプロファイリングを「凍結」した後で
プロファイリング情報を読む場合などに有用である。
.B /proc/profile
は、`cat' や、`cp' コマンドを使ってコピーすることができる。
プログラムがプロファイリングバッファのサイズを
前もって取得する必要があるため、
.B readprofile-1.1
で行なわれていた、
圧縮されたプロファイリングバッファはサポートされなくなった。
.TP
.B -i
カーネルプロファイリング情報の表示。
このオプションを指定すると、
.B readprofile
は、カーネルによって使用されている
プロファイリングステップのみを表示する。
プロファイリングステップはプロファイリングバッファの精度であり、
(make config を使った) カーネルの設定、
またはカーネルのコマンドラインで指定される。
.B -t
(terse: 簡潔モード) スイッチが
.B -i
と一緒に指定されると、単に 10 進数の数字のみが表示される。
.TP
.B -a
マップファイル中のすべてのシンボルを表示する。
デフォルトでは、使用クロック数が 0 の手続きは出力されない。
.TP
.B -b
各メモリ領域に対する出現数のカウントを表示する。
.TP
.B -r
プロファイリングバッファの内容を初期化する。
.B /proc/profile
は、スーパーユーザーだけが書き込み可能で、
一般ユーザーは読み込みしかできないため、
このオプションを使用するには、スーパーユーザーの権限が必要となる。
しかし、
.B readprofile
を setuid 0 とすることで、特権を持たないユーザーでも
プロファイリングバッファの内容を初期化することができる。
.TP
.RB -M " multiplier"
カーネルがプロファイリング割り込みを各 CPU に送る周期を変更できる
アーキテクチャもある。
このオプションにより、
周期をシステムクロック周波数 HZ の倍数で設定できる。
i386-SMP (2.2 と 2.4 カーネル) と
sparc64-SMP (2.4 カーネル) でサポートされている。
このオプションはプロファイリングバッファの初期化も行うので、
スーパーユーザー特権が必要である。
.TP
.B -v
詳細モード。
出力は 4 つの項目から構成され、それぞれ空白により桁が揃えられる。
最初の項目はカーネルの関数の RAM アドレス、
2 番目の項目は関数の名前、
3 番目の項目は使用したクロック数、
最後の項目には正規化された負荷が表示される。
.TP
.B -V
バージョン情報の表示。
.B readprofile
は、現在のバージョン番号を表示した後、終了する。
.SH 例
プロファイリングバッファの内容を使用したクロック数の順に表示するには:
.nf
readprofile | sort -nr | less
.fi
最もたくさんクロックを使用した関数の上位 20 個を表示するには:
.nf
readprofile | sort -nr +2 | head -20
.fi
ファイルシステムのプロファイリング情報だけを表示するには:
.nf
readprofile | grep _ext2
.fi
すべてのカーネル情報を RAM アドレスと一緒に表示させるには:
.nf
readprofile -av | less
.fi
現在のカーネルのものではない「凍結された」
プロファイリングバッファの内容を表示するには:
.nf
readprofile -p ~/profile.freeze -m /zImage.map.gz
.fi
各 CPU に対して 2kHz の周期でプロファイリングを要求し、
プロファイリングバッファを初期化するには:
.nf
sudo readprofile -M 20
.fi
.SH バグ
.LP
カーネルバージョン 1.2 から 1.3 で
.B /proc/profile
が変更されたため、
.B readprofile
は 1.3.x 以降のカーネルでのみ動作する。
.LP
このプログラムは、ELF カーネルでのみ動作する。
a.out カーネルへの変更は大きな作業ではない。
a.out カーネルユーザーへの練習問題として残してある。
.LP
プロファイリングを有効にするためには、
カーネルの (再構築と) リブートが必要である。
これはプロファイリング用のモジュールは存在せず、
かつ、簡単には作れないためである。
プロファイリングを有効にするには、カーネルのコマンドライン上で、
"profile=2" (または、別の数字) を指定する必要がある。
この数字を指数として 2 を累乗したものが、
プロファイリングステップとして使用される。
.LP
プロファイリングは、割り込みが禁止されていると使用できない。
これは、割り込みを再び有効にするときに、
多くのプロファイリングのカウントが行われることを意味する。
誤った情報に注意すること。
.SH ファイル
.nf
/proc/profile プロファイリングバッファのバイナリスナップショット
/usr/src/linux/System.map カーネルのシンボルテーブル
/usr/src/linux/* プロファイルされるプログラム :-)
.fi
|