.\" .\" Copyright 1996 Massachusetts Institute of Technology .\" .\" Permission to use, copy, modify, and distribute this software and .\" its documentation for any purpose and without fee is hereby .\" granted, provided that both the above copyright notice and this .\" permission notice appear in all copies, that both the above .\" copyright notice and this permission notice appear in all .\" supporting documentation, and that the name of M.I.T. not be used .\" in advertising or publicity pertaining to distribution of the .\" software without specific, written prior permission. M.I.T. makes .\" no representations about the suitability of this software for any .\" purpose. It is provided "as is" without express or implied .\" warranty. .\" .\" THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS .\" ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, .\" INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT .\" SHALL M.I.T. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, .\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT .\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF .\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND .\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" %Id: perfmon.4,v 1.6 1998/03/12 07:30:36 charnier Exp % .\" $FreeBSD$ .Dd March 26, 1996 .Dt PERFMON 4 i386 .Os FreeBSD 2.2 .Sh 名称 .Nm perfmon .Nd CPU の性能モニタリングをするインタフェース .Sh 書式 .Cd cpu \&"I586_CPU\&" .Cd cpu \&"I686_CPU\&" .Cd options PERFMON .Sh 解説 .Nm perfmon ドライバにより .Tn Intel の .Tn Pentium と .Tn "Pentium Pro" の CPU 内部の性能モニタリング機能にアクセスできます。 これらのプロセッサには多彩なイベントについて発生回数または (CPU サイクルでの) 持続時間のどちらかを測定するように設定できる 2 個の内部カウンタと、同じくクロックサイクルを数える 1 個のサイクルカウンタが実装されています。 .Nm ドライバではこれらの機能に対してデバイス形式によるインタフェースを提供 します。 .Pp 性能モニタリングをするカウンタへの全てのアクセスは デバイス型特殊ファイルの .Dq Pa /dev/perfmon を媒介として処理されます。 このデバイスが提供する .Xr ioctl 2 リクエストは多くあり .Aq Pa machine/perfmon.h の中で定義され、このファイルの中には .Tn Pentium と .Tn "Pentium Pro" プロセッサの両方の色々なカウンタの定義もあります。 .Pp .Sy 注意事項: 利用可能なイベントの集合はプロセッサ毎に異なります。 使用されるイベントコードが測定される CPU の型式に対して 適正であることを確認することはプログラマの責任です。 .Pp 以下の .Xr ioctl 2 リクエストが定義されています: .Bl -tag -width PMIOTSTAMP .It Dv PMIOSETUP .Pq Li "struct pmc" 構造体に定義されているパラメータとフラグでカウンタを設定します。 以下のフィールドが .Li struct pmc に定義されています: .Bl -tag -width "u_char pmc_eventx" .It Li "int pmc_num" 指定するカウンタ番号です。 .Dv NPMC (現在は 2) より小さくなければなりません。 .It Li "u_char pmc_event" モニタすべき特定のイベントコードで、 .Aq Pa machine/perfmon.h に定義されています。 .It Li "u_char pmc_unit" イベントの型に対応する装置のマスクの値です ( .Tn Intel の文書を参照)。 .It Li "u_char pmc_flags" カウンタの働きを変更するフラグ (下記参照) です。 .It Li "u_char pmc_mask" カウンタのマスクの値です。つまり、本来、この値は指定された数のクロック 以上 (又は以下) の間継続するイベントにカウントを制限する為に使用されるしきい値 です。 .El .Pp 次のような .Li pmc_flags の値が定義されています: .Bl -tag -compact -width PMCF_USRxx .It Dv PMCF_USR イベントをユーザモードでカウントします。 .It Dv PMCF_OS イベントをカーネルモードでカウントします。 .It Dv PMCF_E イベントを持続時間ではなくその数でカウントします。 .It Dv PMCF_INV カウンタのマスクの比較の意味を逆転します。 .El .It Dv PMIOGET .Pq Li "struct pmc" 指定されたカウンタの現在の設定を返します。 .It Dv PMIOSTART .It Dv PMIOSTOP .Pq Li int 指定したカウンタを起動 (停止) します。ハードウェアの欠陥により、番号順に 起動と停止をしなければなりません。 (即ち、カウンタ 0 は必ずまずカウンタ 1 を停止してから停止しなければなりません)。 ドライバではこの制約を .Sy 強制していません (と言うのも将来の CPU ではこの制約はなくなるかも知れません)。 .It Dv PMIORESET .Pq Li int 指定されたカウンタを 0 にリセットします。カウンタはリセットする前に .Dv PMIOSTOP により停止されなければなりません。全てのカウンタは自動的に .Dv PMIOSETUP によってリセットされます。 .It Dv PMIOREAD .Pq Li "struct pmc_data" カウンタの現在の値を取り出します。 .Li pmc_data 構造体には次のような 2 個のフィールドが定義されています: .Pp .Bl -tag -compact -width "quad_t pmcd_value" .It Li "int pmcd_num" 読み出すカウンタの番号。 .It Li "int pmcd_value" 64 ビットの符号付き整数での終了値。 .El .Pp 将来、 .Tn "Pentium Pro" プロセッサから カウンタを直接読み出す為に .Li RDPMC 命令を使用出来る様になるでしょう。 .It Dv PMIOTSTAMP .Pq Li "struct pmc_tstamp" タイムスタンプカウンタを読み出します。 .Li pmc_tstamp 構造体では 2 個のフィールドが定義されています: .Pp .Bl -tag -compact -width "quad_t pmct_value" .It Li "int pmct_rate" カウンタの MHz でのおおよその速度です。 .It Li "quad_t pmct_value" 64 ビット整数でのカウンタの現在の値です。 .El .Pp .Li pmct_rate フィールドに与えられるカウンタの速度は、 校正が困難な事やクロックの進行が不完全な為に、 往々にして正確ではないことに注意する事が大切です。 このフィールドについては クロックが刻む速度を実際に表示するものというよりも 手がかりか又は適正さの検査くらいに考えるべきです。 .El .Sh 関連ファイル .Bl -tag -compact -width "/usr/include/machine/perfmon.h" .It Pa /dev/perfmon カウンタへの文字型デバイスのインタフェース .It Pa /usr/include/machine/perfmon.h 構造体とイベントコードを定義しているインクルードファイル .It Pa /usr/share/examples/perfmon 全ての .Fn ioctl コマンドの使用を具体的に例示したサンプルのソースコード .El .Sh 関連項目 .Xr ioctl 2 .Rs .%A Intel Corporation .%B Pentium Pro Family Developer's Manual .%D January 1996 .%V vol. 3 .%O Operating System Writer's Manual .Re .\"訳者注開始 .Rs .%A インテルジャパン株式会社 .%B Pentium Pro ファミリー ディベロッパーズ マニュアル .%D January 1996 .%V 下巻 .%O オペレーティング システム ライターズ マニュアル .Re .\"訳者注終り .Sh 歴史 The .Nm デバイスは .Fx 2.2 で初めて現れました。 .Sh 作者 .Nm ドライバは .An Garrett A. Wollman , MIT Laboratory for Computer Science が書きました。 .\"Translated by Tetsuro Furuya , Dec. 1999. .\"ML Checked by Tetsuya Isaki (井崎哲也) , .\" Satoru Koizumi (小泉 悟 ) .\"Final Checked by