プロジェクトおよびタスク機能 (第 2 章プロジェクトとタスク (概要)で説明) を使って作業負荷にラベル付けを行い、分離することにより、作業負荷ごとの資源消費を監視できます。「拡張アカウンティング」サブシステムを使用すると、プロセスとタスクの両方について詳細な資源消費統計情報を取得できます。
この章の内容は次のとおりです。
拡張アカウンティングの使用を開始する場合は、「プロセス、タスク、およびフローの拡張アカウンティングを起動する方法」に進んでください。
プロセスアカウンティングの mstate データを生成できるようになりました。「使用可能なアカウンティング資源を表示する方法」を参照してください。
Solaris 10 の新機能の全一覧および Solaris リリースについての説明は、『Oracle Solaris 10 9/10 の新機能』を参照してください。
拡張アカウンティングサブシステムは、行われた作業の対象プロジェクトの使用状況レコードにラベル付けします。また、拡張アカウンティングを IPQoS (Internet Protocol Quality of Service、IP サービス品質) フローアカウンティングモジュール (『Solaris のシステム管理 (IP サービス)』の第 36 章「フローアカウンティングの使用と統計情報の収集 (手順)」を参照) と組み合わせて、システム上のネットワークフロー情報を取得することもできます。
資源管理機構を適用する前に、まず、さまざまな作業負荷がシステムに対して行う資源消費要求の特徴をつかむ必要があります。Solaris オペレーティングシステムの拡張アカウンティング機能を利用すると、タスクベース、プロセスベース、または IPQoS flowacct モジュールが提供するセレクタベースで、システムやネットワークの資源消費を記録する柔軟性が得られます。詳細は、ipqos(7IPP) のマニュアルページを参照してください。
システムの使用状況をリアルタイムで計測するオンライン監視ツールとは異なり、拡張アカウンティング機能を使用すると、使用状況の履歴を調べることができます。その上で、将来の作業負荷の容量要件を算定できます。
拡張アカウンティングのデータを使用すれば、資源の課金、作業負荷の監視、容量計画などの目的でソフトウェアを開発したり購入したりできます。
Solaris オペレーティングシステムの拡張アカウンティング機能は、バージョン番号が付けられた拡張ファイル形式を使用してアカウンティングデータを格納します。このデータ形式を使用するファイルは、添付のライブラリ libexacct (libexacct(3LIB) のマニュアルページを参照) で提供される API を使ってアクセスまたは作成できます。作成されたファイルは、拡張アカウンティング機能を使用できる任意のプラットフォーム上で解析でき、データを容量計画や課金に使用できます。
拡張アカウンティングを起動すると、libexacct API で調べることができる統計情報が収集されます。libexacct は、exacct ファイルを前後どちらの方向からでも検査できます。API は、カーネルが作成するファイルだけでなく、libexacct によって生成された他社製のファイルもサポートします。libexacct に対する Perl (Practical Extraction and Report Language) インタフェースが用意されています。これを使えば、報告および抽出用のカスタムスクリプトを開発できます。「libexacct に対する Perl インタフェース」を参照してください。
たとえば、拡張アカウンティングを有効にすると、タスクは、自分のメンバープロセスの総資源使用状況を追跡します。タスクのアカウンティングレコードは、そのタスクの完了時に書き込まれます。実行中のプロセスやタスクについて中間レコードを書き込むこともできます。タスクの詳細については、第 2 章プロジェクトとタスク (概要)を参照してください。
拡張アカウンティングの形式は、古い SunOS システムのアカウンティングソフトウェアの形式に比べて拡張性があります (『Solaris のシステム管理 (上級編)』の「システムアカウンティング」を参照)。拡張アカウンティングでは、システムアカウンティングメトリックスのシステムへの追加や削除をシステムの解放時またはシステムの操作中に行うことができます。
拡張アカウンティングと古いシステムのアカウンティングソフトウェアの両方をシステム上で同時に起動できます。
exacct レコードを作成するルーチンは、次の 2 つの目的で使用できます。
他社製の exacct ファイルを作成できるようにします。
putacct システムコールを使ってカーネルアカウンティングファイルに埋め込むためのタグ付けレコードを作成できるようにします (getacct(2) のマニュアルページを参照)。
Perl インタフェースから putacct システムコールを利用することもできます。
この形式では、すべての変更を明示的なバージョン変更にしなくても、さまざまな形式のアカウンティングレコードを取得できます。アカウンティングデータを使用するアプリケーションは、認識不可能なレコードを無視するように作成する必要があります。
libexacct ライブラリは、ファイルを exacct 形式に変換し、その形式のファイルを生成します。このライブラリは、exacct 形式のファイルに対するインタフェースとしてサポートされている唯一のインタフェースです。
getacct、putacct、wracct の各システムコールは、フローには適用されません。IPQoS フローアカウンティングの構成時には、カーネルによってフローレコードが作成され、ファイルに書き込まれます。
拡張アカウンティングサブシステムを大域ゾーンで実行した場合、非大域ゾーンを含むシステム全体の情報が収集および報告されます。大域管理者は、ゾーンごとの資源消費を決定することもできます。詳細は、「ゾーンがインストールされている Solaris システムでの拡張アカウンティング」を参照してください。
/etc/acctadm.conf ファイルには、現在の拡張アカウンティング構成が含まれます。このファイルは、ユーザーが直接編集するのではなく、acctadm インタフェースを介して編集します。
拡張アカウンティングデータは、デフォルトでは /var/adm/exacct ディレクトリに置かれます。acctadm コマンドを使用すると、プロセスやタスクのアカウンティングデータファイルの格納場所を変更できます。詳細は、acctadm(1M) のマニュアルページを参照してください。
コマンド |
説明 |
---|---|
拡張アカウンティング機能のさまざまな属性の変更、拡張アカウンティングの停止と起動を行います。また、プロセス、タスク、およびフローを追跡するためのアカウンティング属性を選択するのに使用します。 |
|
アクティブなプロセスおよびタスクの拡張アカウンティングアクティビティーを書き込みます。 |
|
直前に呼び出されたコマンドを表示します。lastcomm では、標準アカウンティングプロセスのデータまたは拡張アカウンティングプロセスのデータのどちらかを使用できます。 |
タスクやプロジェクトに関連するコマンドについては、「コマンドとコマンドオプションの例」を参照してください。IPQoS フローアカウンティングについては、ipqosconf(1M) のマニュアルページを参照してください。
Perl インタフェースによって、exacct フレームワークで作成されたアカウンティングファイルを読み取ることのできる、Perl スクリプトを作成できます。exacct ファイルを作成する Perl スクリプトも作成できます。
このインタフェースの機能は、基礎となる C 言語の API と同様です。可能な場合は、基礎となる C 言語の API から取得したデータを Perl データタイプとして表示します。この機能によって、データアクセスが簡単になり、バッファーのパック/アンパック操作が不要になります。さらに、あらゆるメモリー管理が Perl ライブラリによって実行されます。
各種のプロジェクト、タスク、exacct 関連機能はいくつかのグループに分けられます。各機能グループは、別々の Perl モジュールに配置されます。各モジュールは、Sun の標準である Sun::Solaris:: Perl パッケージ接頭辞で始まります。Perl exacct ライブラリが提供するクラスはすべて、Sun::Solaris::Exacct モジュールの下にあります。
配下の libexacct(3LIB) ライブラリは、exacct 形式のファイル、カタログタグ、および exacct オブジェクトに対する操作を実行します。exacct オブジェクトは、次の 2 つのタイプに分けられます。
アイテム (単一データ値 [スカラー])
グループ (項目のリスト)
次の表に各モジュールの概要を示します。
モジュール (空白文字は使用不可) |
説明 |
詳細 |
---|---|---|
Sun::Solaris::Project |
このモジュールは、次のプロジェクト操作関数にアクセスする機能を提供します。getprojid(2)、endprojent(3PROJECT)、fgetprojent(3PROJECT)、getdefaultproj(3PROJECT)、getprojbyid(3PROJECT)、getprojbyname(3PROJECT)、getprojent(3PROJECT)、getprojidbyname(3PROJECT)、inproj(3PROJECT)、project_walk(3PROJECT)、setproject(3PROJECT)、および setprojent(3PROJECT) です。 |
Project(3PERL) |
Sun::Solaris::Task |
このモジュールは、タスク操作関数である gettaskid(2) と settaskid(2) にアクセスする機能を提供します。 |
Task(3PERL) |
Sun::Solaris::Exacct |
最上位レベルの exacct モジュール。このモジュールは、exacct 関連のシステムコールである getacct(2)、putacct(2)、および wracct(2) にアクセスする機能を提供します。このモジュールは、libexacct(3LIB) ライブラリ関数である ea_error(3EXACCT) にアクセスする機能も提供します。exacct EO_*、EW_*、EXR_*、P_*、および TASK_* マクロのすべてに対応する定数も、このモジュールで提供されます。 |
Exacct(3PERL) |
Sun::Solaris::Exacct:: Catalog |
このモジュールは、exacct カタログタグ内のビットフィールドにアクセスする、オブジェクト指向型メソッドを提供します。このモジュールによって、EXC_*、EXD_*、および EXD_* マクロの定数にもアクセスできます。 |
Exacct::Catalog(3PERL) |
Sun::Solaris::Exacct:: File |
このモジュールは、次の libexacct アカウンティングファイル関数にアクセスする、オブジェクト指向型メソッドを提供します。ea_open(3EXACCT)、ea_close(3EXACCT)、ea_get_creator(3EXACCT)、ea_get_hostname(3EXACCT)、ea_next_object(3EXACCT)、ea_previous_object(3EXACCT)、および ea_write_object(3EXACCT) です。 |
Exacct::File(3PERL) |
Sun::Solaris::Exacct:: Object |
このモジュールは、個々の exacct アカウンティングファイルオブジェクトにアクセスする、オブジェクト指向型メソッドを提供します。exacct オブジェクトは、該当する Sun::Solaris::Exacct::Object サブクラスに与えられた、隠された参照として表されます。このモジュールはさらに、アイテムかグループかのオブジェクトタイプに分けられます。このレベルで、ea_match_object_catalog(3EXACCT) および ea_attach_to_object(3EXACCT) 関数にアクセスするメソッドがあります。 |
Exacct::Object(3PERL) |
Sun::Solaris::Exacct:: Object::Item |
このモジュールは、独立した exacct アカウンティングファイルアイテムにアクセスする、オブジェクト指向型メソッドを提供します。このタイプのオブジェクトは、Sun::Solaris::Exacct::Object から継承します。 |
Exacct::Object::Item(3PERL) |
Sun::Solaris::Exacct:: Object::Group |
このモジュールは、独立した exacct アカウンティングファイルグループにアクセスする、オブジェクト指向型メソッドを提供します。このタイプのオブジェクトは、Sun::Solaris::Exacct::Object から継承します。これらのオブジェクトによって、ea_attach_to_group(3EXACCT) 関数にアクセスできます。グループ内のアイテムは Perl 配列として表されます。 |
Exacct::Object::Group(3PERL) |
Sun::Solaris::Kstat |
このモジュールは、kstat 機能に対する Perl のタイハッシュインタフェースを提供します。このモジュールの使用例については、Perl で記述された /bin/kstat を参照してください。 |
Kstat(3PERL) |
表で説明したモジュールの使用例については、「libexacct に対する Perl インタフェースの使用」を参照してください。