日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:仮想アドレス空間の概要
第 3 章:システム・サービスの 64 ビット・アドレッシングのサポート
第 4 章:メモリ管理 VLM 機能
第 5 章:64 ビット・アドレッシングを対象とする RMS インタフェースの強化
第 6 章:ファイル・システムの 64 ビット・アドレッシングのサポート
第 7 章:OpenVMS Alpha デバイスの 64 ビット・アドレッシングのサポート
第 8 章:OpenVMS Alpha 64 ビット API ガイドライン
第 9 章:64 ビット・アドレッシングをサポートする OpenVMS Alpha ツールおよびユーティリティ
第 10 章:言語およびポインタの 64 ビット・アドレッシング・サポート
第 11 章:DEC C RTL の 64 ビット・アドレッシング・サポート
付録 A :64 ビット・アドレッシングのための C マクロ
付録 B :64 ビット・アドレッシングのための MACRO-32 マクロ
付録 C :64 ビット・プログラム例
付録 D :VLM プログラム例
索引
PDF
OpenVMS ホーム
Open VMS Alpha オペレーティング・システム | HPE 日本

Open VMS Alpha オペレーティング・システム
64 ビット・アドレッシングおよび VLM 機能説明書


目次 索引

第 4 章
メモリ管理 VLM 機能

本章では,次の OpenVMS Alpha メモリ管理 VLM 機能について説明します。

  • メモリ常駐グローバル・セクション

  • 共用ページ・テーブル

  • 拡張可能なグローバル・ページ・テーブル

  • 予約メモリ・レジストリ

これら多数の VLM 機能を紹介するサンプル・プログラムについては, 付録 D を参照してください。

4.1 VLM 機能の概要

メモリ常駐グローバル・セクションを使用すると,データベース・サーバは,大量の "ホット"なデータを物理メモリにキャッシュしておくことができます。このため,データベース・サーバは,ディスク上のデータベース・ファイルから読み込み操作を実行することなく,物理メモリから直接データにアクセスできます。物理メモリ内のデータには,より高速にアクセスできるため,実行時の性能は大幅に向上します。

Fast I/Oは,入出力要求当たりの CPU コストを削減し,データベース操作の性能を向上します。Fast I/O を使用するには, バッファ・オブジェクトを介してデータをメモリ内にロックしておく必要があります。OpenVMS Alpha の以前のバージョンでは,バッファ・オブジェクトはプロセス・プライベート仮想アドレス空間に対してしか作成できませんでした。OpenVMS Alpha 7.2 では,バッファ・オブジェクトは,メモリ常駐セクション内のページも含めて,グローバル・ページに対して作成できるようになりました。

共用ページ・テーブルを使用すると,同じデータベース・サーバがシステムの中で消費する物理メモリ量を削減することができます。複数のサーバ・プロセスが,大きなデータベース・キャッシュをマップする同じ物理ページ・テーブルを共用するため, OpenVMS Alpha システムはより多くのサーバ・プロセスをサポートできます。これによってシステム全般の容量が増加し,クライアント要求に対する応答時間を短縮することができます。

共用ページ・テーブルを使用すると,サーバ・プロセスは従来のグローバル・セクションの数百倍の速度でメモリ常駐グローバル・セクションをマップできるため,データベース・サーバのスタートアップ時間を大幅に短縮できます。数ギガバイトのグローバル・データベース・キャッシュを使用すると,サーバのスタートアップ時間を大幅に短縮できます。

システム・パラメータ GBLPAGESGBLPAGFIL は動的パラメータです。CMKRNL 特権を持つユーザは,実行中のシステムでこれらのパラメータの値を変更できるようになりました。 GBLPAGES パラメータの値を大きくすると,必要に応じて新しい最大サイズまで,グローバル・ページ・テーブルを拡張できます。

予約メモリ・レジストリは,メモリ常駐グローバル・セクションおよび共用ページ・テーブルをサポートします。予約メモリ・レジストリは, SYSMAN ユーティリティの中のそのインタフェースを介して,メモリ常駐セクションまたは他の特権コードで使用するためのメモリを大量に確保して, OpenVMS システムを構成することができます。また,予約メモリ・レジストリによって,前もって確保した予約メモリを考慮しながら, AUTOGEN を介して OpenVMS システムを適切にチューニングできます。

4.2 メモリ常駐グローバル・セクション

メモリ常駐グローバル・セクションは,ファイルにバックアップされないグローバル・セクションです。つまり,メモリ常駐グローバル・セクション内のページは,ページファイルや,ディスク上の他のファイルにバックアップされません。このため,プロセスやシステムがページファイル制限値を制限されることはありません。プロセスがメモリ常駐グローバル・セクションにマップしページを参照するとき,ページのワーキング・セット・リスト・エントリは作成されません。したがって,プロセスがワーキング・セット制限値には制限されることはありません。

メモリ常駐グローバル・デマンド・ゼロ (DZRO) セクション内のページには,最初は 0 が含まれています。

メモリ常駐グロバール DZRO セクションの作成は, SYS$CREATE_GDZRO システム・サービス,またはSYS$CRMPSC_GDZRO_64 システム・サービスを呼び出すことによって行われます。

メモリ常駐グローバル DZRO セクションへのマップは, SYS$CRMPSC_GDZRO_64 システム・サービス,または SYS$MGBLSC_64 システム・サービスを呼び出すことによって行われます。

メモリ常駐グローバル・セクションを作成するには,プロセスに VMS$MEM_RESIDENT_USER ライト識別子が与えられていなければなりません。なお,メモリ常駐グローバル・セクションへのマップは,このライト識別子を必要としません。

メモリ常駐グローバル DZRO セクションを作成する場合,次の 2 つのオプションを使用できます。

  • Fault オプション: 仮想アドレスが参照されたときだけページを割り当てる。

  • Allocate オプション: セクションが作成されたときにすべてのページを割り当てる。

Fault オプション

fault オプションを使用するには,予約メモリ・レジストリを介して,システムの流動ページ・カウントからメモリ常駐グローバル・セクション内のページを差し引くことをおすすめします。なお,この操作が要求されるわけではありません。

予約メモリ・レジストリを使用すると,システムの流動ページ・カウントの計算にメモリ常駐セクション・ページを含めずに, AUTOGEN でシステムを適切にチューニングできます。 AUTOGEN は,システムの流動ページ・カウントに基づいて,システム・ページファイル,プロセス数,およびワーキング・セット最大サイズを判別します。

予約メモリ・レジストリを介してメモリ常駐グローバル・セクションが登録されていない場合,メモリ常駐グローバル・セクションを含むことができるだけの十分な流動ページがシステムにない時は,システム・サービス呼び出しは失敗します。

予約メモリ・レジストリを介してメモリ常駐グローバル・セクションが登録されている場合,グローバル・セクションのサイズが予約メモリのサイズを超えたときに,追加ページを含むことができるだけの十分な流動ページがシステムにないと,システム・サービス呼び出しは失敗します。

予約メモリ・レジストリを介してメモリが予約されている場合,そのメモリは,SYSMAN コマンドで指定されているグローバル・セクションで使用されなければなりません。メモリをシステムに戻すには,SYSMAN を実行して予約メモリを"解放"します。ページが戻され,システムの流動ページ・カウントの対象となります。

起動時にメモリ常駐グローバル・セクションの名前がわからない場合,または,システムがプールしている流動メモリを超えて大量のメモリを構成する場合,予約メモリ・レジストリ内のエントリを追加し, AUTOGEN でシステムを再チューニングすることができます。システムを再起動した後で,予約メモリを"解放"して, VMS$MEM_RESIDENT_USER ライト識別子を持つシステム内の任意のアプリケーションにこれを使用させることができます。この方法は,予約メモリを受け取るアプリケーションや名前付きグローバル・セクションを限定することなく,メモリ常駐グローバル・セクションに使用する流動メモリを増加することができます。 RESERVED_MEMORY FREE コマンドについての詳細は, 第 4.6.2.2 項 を参照してください。

Allocate オプション

allocate オプションを使用するには,システムを初期化する時にあらかじめメモリを割り当てて,連続的にアラインした物理ページが使用できる状態でなければなりません。マッピングの仮想アライメントが 8 ページ,64 ページ,または 512 ページ境界にある場合は,メモリ常駐グローバル・セクションにマップするときに粒度ヒントが使用されます (システム・ページ・サイズが 8 K バイトの場合,粒度ヒント仮想アライメントは 64 K バイト,512 K バイト,および 4 M バイト境界にあります)。 OpenVMS は, SYS$MGBLSC などのマッピング・システム・サービスへの呼び出しにフラグ SEC$M_EXPREG が設定されている場合,粒度ヒントを使用した最適な仮想アライメントを選択します。

連続的でアラインされた PFN は,予約メモリ・レジストリを使用して予約されます。連続的でアラインされたページは,予約メモリの記述に基づいて,システムの初期化の際に割り当てられます。メモリ常駐グローバル・セクションのサイズは,予約メモリのサイズ以下でなければなりません。そうでない場合は,システム・サービス呼び出しからエラーが返ります。

メモリが予約メモリ・レジストリを介して予約されている場合,そのメモリは SYSMAN コマンドで指定されているグローバル・セクションで使用されなければなりません。メモリをシステムに戻すには,SYSMAN を実行して予約済みのメモリを解放します。予約済みのメモリが解放されると, allocate オプションを使用してメモリ常駐グローバル・セクションを作成することはできません。

4.3 グローバル・セクションのための Fast I/O とバッファ・オブジェクト

OpenVMS Alpha 7.2 では,VLM アプリケーションは,グローバル・セクションを介してプロセスで共用されるメモリに対して, Fast I/O を使用できます。OpenVMS Alpha の以前のバージョンでは,バッファ・オブジェクトはプロセス・プライベート仮想アドレス空間に対してしか作成できませんでした。Fast I/O を使用するには,バッファ・オブジェクトを介してデータをメモリにロックしておかなければなりません。複数のプロセスが大きなキャッシュを共用するデータベース・アプリケーションでは,次の種類のグローバル・セクションに対して,バッファ・オブジェクトを作成できるようになりました。

  • ページファイルにバックアップされるグローバル・セクション

  • ディスク・ファイルにバックアップされるグローバル・セクション

  • メモリ常駐グローバル・セクション

バッファ・オブジェクトを使用すると,Fast I/O システム・サービスが有効になります。これらのサービスを使用すると,I/O 装置との間で高速に非常に大量の共用データを読み書きすることができます。 I/O 要求当たりの CPU コストを削減することで,Fast I/O は I/O 操作の性能を向上します。

Fast I/O は,データベース・サーバなどの VLM アプリケーションの能力を向上するので,従来より大きな容量を取り扱うことができるようになり,高いデータ・スループットを実現できます。

4.3.1 $QIO と Fast I/O の比較

$QIO システム・サービスでは,指定された範囲のメモリが存在することと,それぞれのダイレクト I/O 要求が実行される間,そのメモリにアクセスできることが必要です。バッファが存在することと,アクセス可能であることの確認は,プローブと呼ぶ操作で実行されます。I/O がアクティブな間,バッファを削除できないようにし,アクセス保護が変更されないようにするために,I/O 要求が実行されている間はメモリ・ページをロックし,I/O が終了した時点でアンロックするようにしています。

I/O で実行されるプローブとロック/アンロック操作は,コストのかかる操作です。この操作を各 I/O に対して実行するには,CPU の能力の多くを使用しなければならない可能性があります。Fast I/O の利点は, 1 つの I/O の間だけメモリがロックされ,それ以外はページングできるという点です。

Fast I/O の場合も,バッファが使用可能であるかどうかを確認する必要がありますが,多くの I/O 要求は同じメモリ・キャッシュから実行されるため,各 I/O に対してではなく,キャッシュが 1 回だけプローブされ,ロックされる場合は,性能を向上できます。 OpenVMS では,複数の I/O の間にメモリ・アクセスが変更されないことだけを確認する必要があります。Fast I/O では,この目標を達成するためにバッファ・オブジェクトを使用します。また, Fast I/O では,一部のシステム・リソースを前もって割り当て,I/O の流れを全般的に単純化することで,さらに性能を向上しています。

4.3.2 バッファのロックの概要

I/O サブシステムは,バッファード I/O でシステム空間からデータを移動するか,ダイレクト I/O 操作を認めることで,データをユーザ・バッファに移動できます。しかし,その前にユーザ・バッファが実際に存在することと,アクセス可能であることを確認しなければなりません。

バッファード I/O の場合,この処理は通常,I/O を要求しているプロセスのコンテキストを想定し,ターゲット・バッファをプローブすることで行われます。ほとんどの QIO 要求では,この処理は IPL 2 (IPL$_ASTDEL) で行われるため,バッファのプローブとデータの移動の間で AST が実行されることはありません。操作全体が完了するまで,バッファは削除されません。また,IPL 2 で実行することにより,データがコピーされている間,通常のページング・メカニズムが動作できます。

ダイレクト I/O の場合は通常,I/O に対してターゲット・ページをロックすることで行われます。この結果,バッファを構成するページは,ページングやスワッピングの対象から除外されます。I/O サブシステムは,ページ・フレーム番号,最初のページ内のバイト・オフセット,I/O 要求の長さで,バッファを識別できます。

この方法では,プロセスがページングを続行でき,I/O がまだ実行されていなかったり,アクティブな間も,バランス・セットからスワップすることができるので,柔軟性を最大限に向上できます。バッファード I/O の場合は,ページをロックする必要はありません。ダイレクト I/O の場合は,ほとんどのプロセス・ページはページングまたはスワッピングが可能です。しかし,この柔軟性を実現するために,コストが必要になります。I/O に関係するすべてのページを,おのおのの I/O に対してプローブまたはロックし,アンロックしなければなりません。I/O の実行回数の多いアプリケーションの場合は,オペレーティング・システムがこれらの操作に大量の時間を費やす可能性があります。

バッファ・オブジェクトを使用すると,このオーバーヘッドの大部分を回避するのに役立ちます。

4.3.3 バッファ・オブジェクトの概要

バッファ・オブジェクトとは,プロセス内の仮想アドレスに割り当てられたプロセス・エンティティです。バッファ・オブジェクトが作成されると,この範囲のアドレス内のすべてのページがメモリ内でロックされます。バッファ・オブジェクトが削除されるまで,これらのページを解放することはできません。Fast I/O 環境では,$IO_SETUP の間,バッファ・オブジェクト自体をロックすることで,この機能を利用します。このようにすると,バッファ・オブジェクトと,そのオブジェクトに割り当てられたページが削除されるのを防止できます。バッファ・オブジェクトは $IO_CLEANUP でアンロックされます。これにより,コストのかかるプローブ,ロック,アンロック操作は, I/O バッファがバッファ・オブジェクトを越えないことを確認する単純なチェックに置き換えられます。ただし,バッファ・オブジェクトに割り当てられたページは,メモリ内で永久的にロックされるという欠点があります。アプリケーションは従来より多くの物理メモリを必要とするようになりますが,実行速度は向上します。

システム・メモリへのこの種のアクセスを制御するには,ユーザは VMS$BUFFER_OBJECT_USER 識別子を保有しなければなりません。システムはバッファ・オブジェクトで使用するために特定のページ数だけをロックすることを認めます。この数は動的 SYSGEN パラメータ MAXBOBMEM で制御されます。

第 2 のバッファ・オブジェクト・プロパティにより,Fast I/O は高い IPL でシステム・コンテキストから完全に複数の I/O 関連タスクを実行することができ,プロセス・コンテキストを想定する必要がありません。バッファ・オブジェクトが作成されると,システムはデフォルトでシステム空間のセクション (S2) を,バッファ・オブジェクトに割り当てられたプロセス・ページにマップします。このシステム空間ウィンドウは,カーネル・モードだけから読み込みアクセスと書き込みアクセスを許可するように保護されます。すべてのシステム空間はどのコンテキストの内部からも等しくアクセスできるので,元のユーザのプロセス・コンテキストを想定するために,さらにコストのかかるコンテキスト切り換えを回避することができます。

バッファ・オブジェクト・ページへのシステム空間アクセスを可能にするには,コストが必要です。たとえば,S2 空間は通常,数ギガバイトですが,Fast I/O のために数ギガバイトのデータベース・キャッシュを多くのプロセスで共用しなければならない場合は,このサイズでも不十分な可能性があります。このような環境では,キャッシュ・バッファとの間のすべてまたは大部分の I/O はダイレクト I/O であり,システム空間マップは必要ありません。

OpenVMS バージョン 7.2 では,バッファ・オブジェクトは,システム空間ウィンドウを割り当てた状態で作成でき,割り当てずに作成することもできます。バッファ・オブジェクトが使用するリソースは次のようにチャージされます。

  • ページがメモリ常駐セクションに属しているか,ページがすでに別のバッファ・オブジェクトに割り当てられている場合を除き,物理ページは MAXBOBMEM に対してチャージされます。

  • デフォルトでは,システム空間ウィンドウ・ページは MAXBOBS2 に対してチャージされます。CBO$_SVA_32 が指定されている場合は, MAXBOBS0S1 に対してチャージされます。

  • CBO$_NOSVA がセットされている場合は,システム空間ウィンドウは作成されず,必要に応じて MAXBOBMEM だけがチャージされます。

Fast I/O 機能の使用の詳細については,『OpenVMS I/O User's Reference Manual』を参照してください。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項