スポンサーリンク

PERFMON(4) FreeBSD/i386 カーネルインタフェースマニュアル PERFMON(4)

名称

perfmon − CPU の性能モニタリングをするインタフェース

書式

cpu "I586_CPU"

cpu "I686_CPU"

options PERFMON

解説

perfmon ドライバにより Intel の Pentium と Pentium Pro の CPU 内部の性能 モニタリング機能にアクセスできます。これらのプロセッサには多彩なイベント について発生回数または (CPU サイクルでの) 持続時間のどちらかを測定するよ うに設定できる 2 個の内部カウンタと、同じくクロックサイクルを数える 1 個 のサイクルカウンタが実装されています。 perfmon ドライバではこれらの機能に 対してデバイス形式によるインタフェースを提供します。

性能モニタリングをするカウンタへの全てのアクセスはデバイス型特殊ファイル の ‘‘/dev/perfmon’’ を媒介として処理されます。このデバイスが提供する ioctl(2) リクエストは多くあり ⟨machine/perfmon.h⟩ の中で定義され、この ファイルの中には Pentium と Pentium Pro プロセッサの両方の色々なカウンタ の定義もあります。

注意事項: 利用可能なイベントの集合はプロセッサ毎に異なります。使用される イベントコードが測定される CPU の型式に対して適正であることを確認すること はプログラマの責任です。

以下の ioctl(2) リクエストが定義されています:

       PMIOSETUP

(struct pmc) 構造体に定義されているパラメータとフラグでカウン タを設定します。以下のフィールドが struct pmc に定義されてい ます:

int pmc_num
指定するカウンタ番号です。 NPMC (現在は 2) より小さくなければなりません。

u_char pmc_event
モニタすべき特定のイベントコードで、 ⟨machine/perfmon.h⟩ に定義されています。

u_char pmc_unit
イベントの型に対応する装置のマスクの値です ( Intel の文書を参照)。

u_char pmc_flags
カウンタの働きを変更するフラグ (下記参照) です。

u_char pmc_mask
カウンタのマスクの値です。つまり、本来、こ の値は指定された数のクロック以上 (又は以 下) の間継続するイベントにカウントを制限す る為に使用されるしきい値です。

次のような pmc_flags の値が定義されています:
PMCF_USR
イベントをユーザモードでカウントします。
PMCF_OS
イベントをカーネルモードでカウントします。
PMCF_E
イベントを持続時間ではなくその数でカウントしま す。
PMCF_INV
カウンタのマスクの比較の意味を逆転します。

PMIOGET
(struct pmc) 指定されたカウンタの現在の設定を返します。

PMIOSTART

PMIOSTOP
(int) 指定したカウンタを起動 (停止) します。ハードウェアの欠 陥により、番号順に起動と停止をしなければなりません。 (即ち、 カウンタ 0 は必ずまずカウンタ 1 を停止してから停止しなければ なりません)。ドライバではこの制約を 強制していません (と言う のも将来の CPU ではこの制約はなくなるかも知れません)。

PMIORESET
(int) 指定されたカウンタを 0 にリセットします。カウンタはリ セットする前に PMIOSTOP により停止されなければなりません。全 てのカウンタは自動的に PMIOSETUP によってリセットされます。

PMIOREAD
(struct pmc_data) カウンタの現在の値を取り出します。 pmc_data 構造体には次のような 2 個のフィールドが定義されています:

int pmcd_num
読み出すカウンタの番号。
int pmcd_value
64 ビットの符号付き整数での終了値。

将来、 Pentium Pro プロセッサからカウンタを直接読み出す為に RDPMC 命令を使用出来る様になるでしょう。

PMIOTSTAMP
(struct pmc_tstamp) タイムスタンプカウンタを読み出します。 pmc_tstamp 構造体では 2 個のフィールドが定義されています:

int pmct_rate
カウンタの MHz でのおおよその速度です。
quad_t pmct_value
64 ビット整数でのカウンタの現在の値です。

pmct_rate フィールドに与えられるカウンタの速度は、校正が困難 な事やクロックの進行が不完全な為に、往々にして正確ではないこ とに注意する事が大切です。このフィールドについてはクロックが 刻む速度を実際に表示するものというよりも手がかりか又は適正さ の検査くらいに考えるべきです。

関連ファイル

       /dev/perfmon

カウンタへの文字型デバイスのインタフェー ス
/usr/include/machine/perfmon.h
構造体とイベントコードを定義しているイン クルードファイル
/usr/share/examples/perfmon
全ての ioctl() コマンドの使用を具体的に例 示したサンプルのソースコード

関連項目

ioctl(2)

       Intel Corporation,                            Pentium Pro Family Developer’s Manual,                                                                     vol. 3,     January 1996,                     Operating System Writer’s Manual.
       インテルジャパン株式会社,                                   Pentium Pro ファミリー ディベロッパーズ マニュアル,                 下巻,                         January 1996,                                         オペレーティング システム ライターズマニュアル.

歴史

perfmon デバイスは FreeBSD 2.2 で初めて現れました。

作者

perfmon ドライバは Garrett A. Wollman, MIT Laboratory for Computer Science が書きました。

FreeBSD 2.2 March 26, 1996 FreeBSD 2.2

スポンサーリンク