[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

# 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システムはより多くのサーバ・ プロセスをサポートできます。これによってシステム全般の容量が増加し， クライアント要求に対する応答時間を短縮することができます。

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

システム・パラメータGBLPAGESとGBLPAGFILは動的パラメータです。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 』を参照してください。

## 4.3.4 バッファ・オブジェクトの作成と使用

バッファ・オブジェクトを作成して使用する場合，次のことに注意する必要があります。

- バッファ・オブジェクトはプロセス空間(P0，P1，P2のいずれか) ページにだけ関連付けることができます。

- PFNでマップされたページをバッファ・オブジェクトに関連付けることはできません。

- システム空間が関連付けられていない特殊なバッファ・オブジェクトは，Fast I/O データ・バッファを記述するためだけに使用できます。IOSA は常にシステム空間を含む完全なバッファ・オブジェクトに関連付けなければなりません。

- データ・バッファがシステム空間を含まないバッファ・オブジェクトに関連付けられている場合は， 一部のFast I/O操作は完全に最適化されません。VIOC キャッシュを介したディスク読み込みI/OやバッファードI/O の完了時に，データのコピーは，完全なバッファ・オブジェクトに対してシステム・ コンテキストでIPL 8で実行される可能性があります。 しかし，システム空間が割り当てられていないバッファ・ オブジェクトの場合は，プロセス・コンテキストで実行しなければなりません。 アプリケーションで独自のキャッシュを実装している場合は，IO$M_NOVCACHE ファンクション・コード修飾子を設定することで， ディスクI/Oに対してVIOCを使用しないようにしてください。Fast I/O はこの条件を認識し，バッファ・オブジェクトの種類とは無関係に， 最大レベルの最適化を使用します。

# 4.4 共用ページ・テーブル

共用ページ・テーブルを使用すると，2つ以上のプロセスが同じ物理ページにマップすることができます。 このとき，各プロセスがページ・テーブル作成， ページ・ファイル・アカウンティング，およびワーキング・セット制限値アカウンティングのオーバヘッドを受けることはありません。 共用ページ・ テーブルは，内部的には特別な種類のグローバル・セクションとして扱われており， メモリ常駐グローバル・セクションの一部であるページをマップするときに使用されます。 ページ・テーブルの共用を実現する特別グローバル・ セクションを，共用ページ・テーブル・セクション と呼びます。共用ページ・テーブル・セクション自体は，メモリ常駐です。

共用ページ・テーブルは，いくつかのシステム・サービスによって作成され， 複数のプロセスに送信されます。プロセスやアプリケーションが共用ページ・ テーブルを使用するのに，特別な特権やライト識別子は必要ありません。 メモリ常駐グローバル・セクションを作成するときだけ， VMS$MEM_RESIDENT_USERライト識別子が必要です。この識別子を持たないプロセスであっても，( 特定のマッピング基準を満たしている限り)共用ページ・ テーブルを使用できます。

メモリ常駐グローバル・セクションで予約されるメモリと同様に，共用ページ・ テーブルのメモリも，システムの流動ページ集合から除外しなければなりません。 メモリ常駐グローバル・セクションが登録される時，予約メモリ・ レジストリによってこの除外が行われます。

## 4.4.1 プライベート・ページ・テーブルのメモリ必要量

表 4-1は，各種サイズのグローバル・ セクションにマップするプライベート・ ページ・テーブルおよび共用ページ・テーブルの物理メモリ必要量を， プロセス数に応じて示しています。この表から， 共用ページ・テーブルを使用することで，システム全体で節約される物理メモリ量がわかります。 たとえば，100プロセスが1 Gバイトのグローバル・ セクションにマップするとき，共用ページ・テーブルでグローバル・ セクションにマップすることによって， 99 Mバイトの物理メモリが節約されます。

物理メモリが節約されると，物理メモリ・システム・リソースの競合が抑制されるため， システム全体の性能が向上します。各プロセスについては， ページ・テーブル・ページが使用するワーキング・セットが少なくてすむため， プロセスがより多くのプライベート・コードおよびデータを物理メモリに保持できるという利点があります。

### 表 4-1 ページ・テーブル・サイズ必要量

マッピングプロセスの個数 | 8MB | 1GB | 8GB | 1TB
--- | --- | --- | --- | ---
| PPT | SHTP | PPT | SHTP | PPT | SHTP | PPT | SHTP
1 | 8KB | 8KB | 1MB | 1MB | 8MB | 8MB | 1GB | 1GB
10 | 80KB | 8KB | 10MB | 1MB | 80MB | 8MB | 10GB | 1GB
100 | 800KB | 8KB | 100MB | 1MB | 800MB | 8MB | 100GB | 1GB
1000 | 8MB | 8KB | 1GB | 1MB | 8GB | 8MB | 1TB | 1GB
PPT-プライベート・ページ・テーブル SHPT-共用ページ・テーブル

## 4.4.2 共用ページ・テーブルおよびプライベート・データ

プロセスが共用ページ・テーブルを使用するのに，特別な特権やライト識別子は必要ありません。 メモリ常駐グローバル・セクションを作成するときだけ， ライト識別子VMS$MEM_RESIDENT_USERが必要です。メモリ常駐グローバル・ セクションを作成すると，予約メモリ・レジストリによって共用ページ・ テーブルが必要ないと指定されていない限り，そのグローバル・ セクションをマップする共用ページ・テーブルが作成されます。一見すると， このように広くデータを共用することは，本質的なセキュリティ上のリスクを伴う可能性があります。 しかし，この節で説明する理由によって， セキュリティ上のリスクはありません。

共用ページ・テーブルでメモリ常駐グローバル・セクションにマップするアプリケーションまたはプロセスは， 次の手順を実行しなければなりません。

1. システム・サービスSYS$CREATE_REGION_64を呼び出すことによって， 共用ページ・テーブル・リージョンを作成します。

   リージョンがページ・テーブル・ページ境界で開始および終了するように， リージョンの開始仮想アドレスは切り下げ，長さは切り上げます。

2. SYS$CRMPSC_GDZRO_64システム・サービスまたはSYS$MGBLSC_64 システム・サービスを使用して，メモリ常駐グローバル・セクションにマップします。 これらのサービスを使用すると，呼び出し者は，次の条件を満たす場合に， グローバル・セクションに関連付けられた共用ページ・ テーブルを使用することができます。

   - 呼び出し者がマッピング要求で指定する読み込み/書き込みアクセス・ モードが，マップするグローバル・セクションに関連するアクセス・ モードに完全に一致している。

   - 呼び出し者がマッピング要求で正しい仮想アドレッシング・ アライメントを指定している。

共用ページ・テーブル・リージョンは，メモリ常駐グローバル・セクションのマップのみ行えます。 アプリケーションは，複数のメモリ常駐グローバル・ セクションを，共用ページ・テーブル・リージョンにマップできます。 共用ページ・テーブル・リージョンにマップされるグローバル・セクションの先頭仮想アドレスは， 常にページ・テーブル・ページ境界に丸められます。 これによって，2つの異なるグローバル・セクションが同じページ・ テーブル・ページを共用することが避けられます。手順2に示した以外のシステム・ サービスで，共用ページ・テーブル・リージョンに仮想アドレス空間を作成しようとしても失敗します。

注意
  プロセスは非共用ページ・テーブル・ リージョンを指定して，共用ページ・テーブルを伴うメモリ常駐グローバル・ セクションにマップすることができます。この場合，グローバル・ セクションにマップするために，プロセス・プライベート・ページ・ テーブルが使用されます。

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

GBLPAGESシステム・パラメータがグローバル・ページ・テーブルのサイズを定義します。 パラメータ・ファイルに格納されている値は起動時に使用され， グローバル・ページ・テーブルの初期サイズを設定します。

OpenVMS Alpha V7.1以降，システム・パラメータのGBLPAGESおよびGBLPAGFIL が変更され，ダイナミック・パラメータになりました。CMKRNL 特権を持つユーザであれば，実行中のシステム上でこれらの値を直ちに変更できます。 実行時にGBLPAGESパラメータの値を増加すると，グローバル・ ページ・テーブルを必要に応じて新しい最大値まで拡張できます。なお， グローバル・ページ・テーブルを拡張または増加させるためには，次の条件をすべて満たす必要があります。

- グローバル・ページ・テーブルの連続空き領域が，要求されたグローバル・ セクションを作成するのに十分でない。

- GBLPAGESパラメータの現在の設定値が，グローバル・ページ・ テーブルの拡張できる値になっている。

- グローバル・ページ・テーブルの上限の位置に，グローバル・ ページ・テーブルを拡張できるだけの十分な未使用の仮想メモリがある。

- グローバル・ページ・テーブルを拡張できるだけの流動メモリ( メモリにロックされていないページ)がシステムに十分にある。

グローバル・ページ・テーブルは，最低でも6 Gバイトの64ビットS2空間にマップされるため， これらの条件はほとんどすべてのシステムで満たされます。 極端にメモリを消費するシステムや，S2仮想アドレス空間を大量に使用するアプリケーションを実行しているシステムに限って， 要求に応じてグローバル・ ページ・テーブルを拡張できないことがあります。

グローバル・ページは，他のチューニング・パラメータにも影響するシステム・ リソースであるため， GBLPAGESを増加するには，AUTOGENを使用してシステムを再起動することをおすすめします。 操作上の理由で再起動できない場合は， 実行中のシステム上で次のコマンドを使用することによって， パラメータを変更できます。

         $ RUN SYS$SYSTEM:SYSGEN
         SYSGEN> USE ACTIVE
         SYSGEN> SET GBLPAGES  new_value
         SYSGEN> WRITE ACTIVE

WRITE ACTIVEコマンドを実行するには，CMKRNL特権が必要です。

同じコマンドで，グローバル・ページ・サイズの有効サイズを小さくすることもできます。 次の条件が満たされる場合，グローバル・ページ・テーブルは実際に縮小され， フル・ページが流動ページとしてシステムに解放されます。

- グローバル・セクションが削除され，グローバル・ページ・テーブル・ エントリが解放される。

- GBLPAGESの値が示すグローバル・ページ・テーブルのサイズが， 現在のサイズよりも小さい。

- グローバル・ページ・テーブルの高位アドレスの終端に未使用のエントリが存在し， 構造を縮小できる。

GBLPAGESのアクティブ値を，現在使用されているグローバル・ページ・カウントより低い値に設定しても， 現在使用されているグローバル・ページに影響はありません。 新たなグローバル・ページの作成が抑制されるだけです。

GBLPAGFILパラメータのアクティブ値は，正の最大整数値まで，いつでも増加できます。GBLPAGES と同様に，GBLPAGFILの値を，システムのページファイルに対してページングされているグローバル・ ページ数より低い値に設定しても， そのページに影響はありません。新たなグローバル・ページファイル・ セクションの作成が抑制されるだけです。

なお，GBLPAGFILを増加すると，追加のページファイル空間が必要となり， 追加のページファイルをインストールしなければならないことがあるので注意してください。

# 4.6 予約メモリ・レジストリ

予約メモリ・レジストリは，SYSMANユーティリティの中のそのインタフェースを介して，OpenVMS Alpha システムに，メモリ常駐セクションおよび他の特権アプリケーションで使用するためのメモリを大量に設定できます。 また，予約メモリ・レジストリを使用すると，割り当て済みの予約メモリを考慮しながら，AUTOGEN ユーティリティを介してOpenVMSシステムを適切にチューニングできます。

予約メモリ・レジストリによって，次の操作を実行できます。

- システムの非流動メモリをメモリ常駐グローバル・セクションのfault オプション用に予約する。

- システムの非流動メモリに加えて割り当て済みの連続的にアラインされた物理ページを， メモリ常駐グローバル・セクションのallocate オプション用に予約する。

予約メモリ・レジストリは，システムの起動時に割り当て済みのページをゼロ化することを指定できる機能を備えています。 このオプションは，メモリ常駐クローバル・ デマンド・ゼロ・セクションを作成するのに必要な時間を短縮します。

予約メモリ・レジストリは，予約メモリの内，メモリ常駐グローバル・セクションにマップするのに必要なページ・ テーブルのサイズを指定するオプションも備えています。 このオプションが指定され，予約メモリがメモリ常駐グローバル・ セクションに使用される場合，共用ページ・テーブルと共にメモリ常駐グローバル・ セクションが作成されます。

## 4.6.1 予約メモリ・レジストリの使用

OpenVMSは，メモリ常駐グローバル・デマンド・ゼロ・セクションでの使用を目的として， 非流動メモリを予約するメカニズムを備えています。予約されたメモリは， システムの非流動メモリ・サイズから単純に差し引かれたものであるか， または連続的にアラインされた物理ページとしてあらかじめ割り当てられています。

予約メモリ・レジストリを使用すると，システムの流動ページ・カウントの計算にメモリ常駐セクション・ ページを含めずに， AUTOGENでシステムを適切にチューニングできます。 AUTOGEN は，システムの流動ページ・カウントに基づいて， システム・ページファイル，プロセス数，およびワーキング・ セット最大サイズを算出します。他の目的のために永久的に予約されている物理メモリを考慮していない流動ページ・ カウントに基づいてAUTOGEN がパラメータを調整すると，性能に関する重大な問題がシステムで発生します。

また，予約メモリ・レジストリでallocateオプションを指定することにより， 連続的にアラインされたメモリがメモリ常駐セクションで使用されます。

注意
  ここでは，予約メモリ・レジストリをグローバル・ セクションに対して使用する方法について説明していますが， この機能は他の特権アプリケーションに対して使用することもできます。

### 4.6.1.1 予約メモリ・レジストリ・データ・ファイル

予約されている非流動メモリを使用するものは，メモリの特徴を，システムの初期化( 起動)の際に読み込まれるデータ・ファイルに入力します。 データ・ファイルを操作するメカニズムは，SYS$LOADABLE_ IMAGES:VMS$SYSTEM_IMAGES.DATAと同様です(インストール固有のエグゼクティブ・ ロード・イメージを指定します)。

このファイルの名前は次のとおりです。

         SYS$SYSTEM:VMS$RESERVED_MEMORY.DATA

このファイルは，(エグゼクティブ・ロード・イメージ・データ・ファイルと同様に) SYSMAN ユーティリティで管理します。

### 4.6.1.2 AUTOGEN

予約メモリ・レジストリ・ファイルVMS$RESERVED_MEMORY.DATAは， AUTOGENフィードバック・メカニズムによって読み込まれ，システムの流動ページ・ カウントの設定に反映されます。 AUTOGENは，システムの流動ページ・ カウントに基づいて，システム・ページファイル，プロセス数， およびワーキング・セット最大サイズを算出します。

### 4.6.1.3 予約メモリ・レジストリへのエントリの追加

データ・ファイルにエントリを追加するには，SYSMANユーティリティを使用します。 SYSMAN コマンドは次の形式で指定します。

         SYSMAN RESERVED_MEMORY ADD gs_name -
                               /GROUP = n -
                               /SIZE = {size of reserved memory, unit: MB} -
                               /[NO]ALLOCATE -
                               /[NO]ZERO -
                               /[NO]PAGE_TABLES

- gs_nameフィールドには，この予約メモリに関連付けられているメモリ常駐グローバル・ セクションの名前を指定する。この名前は必ず指定しなければならない。

- /GROUP修飾子が指定されていない場合，予約メモリはシステム・ グローバル・セクション(SYSGBL)で使用される。

- /GROUP修飾子が指定されている場合，予約メモリはグループ・ グローバル・セクションで使用される。値nには，グループ・グローバル・ セクションを作成するプロセスの UICグループ番号(8進数)を指定する。 作成者のUICグループ番号と等しいプロセスだけがグローバル・ セクションにアクセスできる。たとえば，UICが[6,100]のプロセスがグループ・ グローバル・セクションの作成者の場合， /GROUP修飾子には6 というグループ番号を指定する。

- /ALLOCATE修飾子が指定されていない場合，または/NOALLOCATE 修飾子が指定されている場合，システムを次に再起動するときに予約メモリが割り当てられない。 予約メモリはシステムの流動ページ・カウントから除外されるだけで， メモリ常駐グローバル・セクションの作成でfault オプションが使用される。

- /ALLOCATE修飾子が指定されている場合，システムを次に起動するときに連続的にアラインされたページが割り当てられる。 割り当てられたメモリはシステムの流動ページ・ カウントから差し引かれ， メモリ常駐グローバル・セクションの作成でallocateオプションが使用される。 ページの物理アライメントは，予約メモリのサイズのページをマップできる最大粒度ヒント係数に基づいている。 粒度ヒント係数は512 ページ(または4 Mバイト)，あるいは64ページ(または512 Kバイト) のいずれかである。このため，8 Kバイトのシステム・ページ・ サイズを仮定すると，予約メモリは次のように物理的にアラインされる。

           1. size >= 4 M バイト: 4 M バイト境界上に物理的にアラインされる。

           2. size < 4 M バイト: 512 K バイト境界上に物理的にアラインされる。

- /ZERO修飾子が指定されていない場合，または/NOZERO修飾子が指定されている場合， システムの初期化のときに割り当て済みのページはゼロ化されない。 グローバル・セクションが作成されるときにページがゼロ化される。

- /ZERO修飾子は，/ALLOCATE修飾子が指定されているときだけ指定できる。/ZERO 修飾子が指定されている場合，システムの初期化のときに割り当て済みのページがゼロ化される。 メモリ常駐グローバル・ セクションにとってゼロ化されたページが必要であるが，必ずしもシステムの初期化のときにページをゼロ化する必要はない。

- /PAGE_TABLES修飾子が指定されていない場合，または/NOPAGE_ TABLES修飾子が指定されている場合，共用ページ・テーブル用に追加メモリが予約されない。 メモリ常駐グローバル・セクションが作成されるとき， グローバル・セクションに対して共用ページ・テーブルが作成されない。

- /PAGE_TABLES修飾子が指定されている場合，共用ページ・テーブル用に追加メモリが予約される。 メモリ常駐グローバル・セクションが作成されるとき， グローバル・セクションに対して共用ページ・ テーブルが作成される。/ALLOCATE修飾子が指定されていない場合，または/NOALLOCATE 修飾子が指定されている場合，追加予約メモリがシステムの流動ページ・ カウントから除外だけされる。/ALLOCATE修飾子が指定されている場合， システムを次に再起動するときに，連続的にアラインされた追加のページが共用ページ・ テーブル用に割り当てられ， 追加予約メモリがシステムの流動ページ・カウントから除外される。

## 4.6.2 予約メモリ・レジストリからのエントリの削除

次のSYSMANコマンドを実行することによって，予約メモリ・エントリを削除できます。

         SYSMAN RESERVED_MEMORY REMOVE gs_name /GROUP = n

`gs_name` には，予約メモリ・レジストリから削除するエントリに関連付けられているメモリ常駐セクションの名前を指定します。 名前は必ず指定しなければなりません。

/GROUP修飾子に指定する値nは，削除するメモリ常駐セクションに関連付けられているUIC グループ番号(8進数)です。メモリ常駐グローバル・ セクションがグループ・グローバル・セクションの場合は，/GROUP修飾子を指定しなければなりません。 メモリ常駐グローバル・セクションがシステム・ グローバル・セクションの場合は，/GROUP修飾子を指定しないでください。

ページ・テーブルが名前付きメモリ常駐グローバル・セクション用に予約されている場合， そのための追加予約メモリも削除されます。

REMOVEコマンドは予約メモリ・レジストリ・データ・ファイルからエントリを削除するだけで， 実行中のシステム内のメモリには影響しません。

### 4.6.2.1 予約メモリの割り当て

システムを初期化する時に，VMS$RESERVED_MEMORY.DATAデータ・ファイルが読み込まれます。

データ・ファイル内の各エントリについて， RESERVED_MEMORY ADDコマンドの/SIZE 修飾子で指定したメガバイト数が，このメモリ常駐グローバル・ セクションに対するシステムの流動ページ・カウントから差し引かれます。 /PAGE_TABLES が指定されている場合，メモリ常駐グローバル・セクションをマッピングする共用ページ・ テーブルが必要とするメモリ量も， システムの流動ページ・カウントから差し引かれます。

RESERVED_MEMORY ADDコマンドに/ALLOCATEが指定された場合，物理ページの連続的なまとまりが割り当てられ， メモリ常駐グローバル・セクション用に確保されます。 /PAGE_TABLES が指定された場合，物理ページの連続的なまとまりがさらに割り当てられ， 共用ページ・テーブル用に確保されます。 ページは，与えられたサイズのまとまりに対して，最大の粒度ヒント係数を使用するのに適した物理アライメントを持ちます。 /ZERO が指定された場合， システムの初期化の際に，またはシステムがアイドル状態のとき， ページがゼロ化されます。 /ZEROが指定されていない場合，または/NOZERO が指定された場合は，メモリ常駐グローバル・セクションが作成されるときにページがゼロ化されます。

システム・パラメータSTARTUP_P1がMINに設定されると，予約メモリ・レジストリ・ エントリ内のエントリは無視され，メモリは予約されません。

システムの初期化の際に行われる予約メモリ・レジストリ・データ・ファイルの処理で， システム流動ページの予約や，連続的にアラインされた物理ページの割り当てに関してエラーが発生すると， コンソールにエラー・ メッセージが出力され，システムは起動を続けます。

### 4.6.2.2 予約メモリの解放

実行中のシステムの中で次のSYSMANコマンドを実行することによって，予約メモリを解放できます。

         SYSMAN RESERVED_MEMORY FREE gs_name /GROUP = n

`gs_name` には，予約メモリ・レジストリから解放するエントリに関連付けられているメモリ常駐セクションの名前を指定します。 名前は必ず指定しなければなりません。

/GROUP修飾子に指定する値nは，解放するメモリ常駐セクションに関連付けられているUIC グループ番号(8進数)です。メモリ常駐グローバル・ セクションがグループ・グローバル・セクションの場合は，/GROUP修飾子を指定しなければなりません。 メモリ常駐グローバル・セクションがシステム・ グローバル・セクションの場合は，/GROUP修飾子を指定しないでください。

システムの初期化の際に，このグローバル・セクションに対して連続的にアラインされた物理ページがあらかじめ割り当てられなかった場合， システムの流動ページ・ カウントに予約メモリが単純に追加されます。そうでなければ， システムの未使用またはゼロ化ページ・リスト上で，物理ページの割り当てが解除されます。 システムの流動ページ・カウントは，割り当てを解除されたページを含むように調整されます。

名前付きのメモリ常駐グローバル・セクションに対してページ・テーブルも予約されている場合， 共用ページ・テーブル用の予約メモリも解放されます。

名前付きのメモリ常駐グローバル・セクションによって予約メモリが使用されている場合， 現在使用されていない予約メモリが解放されます。

RESERVED_MEMORY FREEコマンドは，予約メモリ・レジストリ・データ・ファイルの内容には影響しません。 実行中のシステム内のメモリにだけ影響します。

### 4.6.2.3 予約メモリの表示

予約メモリ情報は，予約メモリ・レジストリ・データ・ファイルと，データ・ ファイル内のエントリに基づいてシステムの初期化の際に作成される， 実行中のシステム内の予約メモリ・レジストリの2ヶ所に保存されています。

予約メモリについての情報がどこから発生するかによって，表示メカニズムがそれぞれ異なります。

実行中のシステムの中で予約メモリ・レジストリを表示するには， SYSMAN，DCL SHOW MEMORYコマンド，およびSDAという3種類のメカニズムがあります。

- SYSMAN

  次のSYSMANコマンドを実行することによって，実行中のシステムの中で予約メモリ・ レジストリを表示できる。

           SYSMAN RESERVED_MEMORY SHOW gs_name /GROUP = n

  `gs_name` には，実行中のシステムの中で表示するエントリに関連付けられているメモリ常駐グローバル・ セクションの名前を指定する。gs_name の指定を省略すると，登録されているすべてのグローバル・ セクションに対する予約メモリが表示される。

  /GROUP修飾子に指定する値nは，表示するメモリ常駐セクションに関連付けられているUIC グループ番号(8進数)である。メモリ常駐グローバル・ セクションがグループ・グローバル・セクションの場合は，/GROUP 修飾子を指定しなければならない。メモリ常駐グローバル・ セクションがシステム・グローバル・セクションの場合は，/GROUP 修飾子を指定してはならない。/GROUP修飾子は，gs_nameが指定されているときだけ指定できる。

- DCL SHOW MEMORYコマンド

  DCL SHOW MEMORYコマンドを実行することによって，実行中のシステム内の予約メモリ・ レジストリを表示できる。このコマンドは，予約メモリ・ レジストリをはじめ，実行中のシステムについてのメモリ関連情報をすべて表示する。

  SHOW MEMORY /RESERVEDコマンドは，実行中のシステム内の予約メモリ・ レジストについての情報だけを表示する。

  SHOW MEMORYコマンドによって表示される情報には，名前付きグローバル・ セクションによって現在使用されているメモリ量も含まれる。また， ページ・テーブル用に予約されているメモリ量と，使用されているメモリ量( 使用されている場合)も表示される。

- SDA

  SDAもさまざまな拡張機能を備えており，実行中のシステム内の予約メモリ・ レジストリに加えて，クラッシュ・ダンプ・ファイルを表示する。

### 4.6.2.4 予約メモリの使用

システム・サービスSYS$CREATE_GDZROおよびSYS$CRMPSC_GDZRO_64は，内部カーネル・ モードのOpenVMS Alphaルーチンを呼び出し，予約メモリ・ レジストリに登録されている予約メモリを使用します。

グローバル・セクションは，予約メモリ・レジストリに登録されている必要はありません。 グローバル・セクション名が予約メモリ・レジストリに登録されている場合， グローバル・セクションのサイズが，予約メモリのサイズに正確に一致している必要はありません。 グローバル・セクションが登録されていない場合， またはグローバル・セクションが予約メモリ・ レジストリに登録されるときに/NOALLOCATEが指定された場合，メモリ常駐グローバルDZRO セクションに対してfaultオプションが使用されます。 サイズが予約メモリのサイズよりも大きい場合，メモリ常駐グローバルDZRO セクションを作成するシステム・サービス呼び出しは，システム内に十分な追加流動ページがない限り失敗します。

グローバル・セクションが予約メモリ・レジストリに登録されるときに/ALLOCATE が指定された場合，メモリ常駐グローバルDZROセクションに対してallocate オプションが使用されます。グローバル・セクションのサイズは， 予約されている割り当て済みのメモリのサイズ以下でなければなりません。 そうでないと，システム・サービス呼び出しからエラーSS$_MRES_PFNSMALL が返されます。

### 4.6.2.5 予約メモリの復帰

メモリ常駐グローバル・セクションが削除された時，このグローバル・セクションに対して， 連続的でアラインされた物理ページがあらかじめ割り当てられていなかった場合， このグローバル・セクションに使用されていた物理ページの割り当てが解除され， 空きページ・リストに返されます。 システムの流動ページ・カウントは，このグローバル・セクションについて， 予約メモリ・レジストリに予約されていないページ分だけ調整されます。

メモリ常駐グローバル・セクションが削除された時，このグローバル・セクションに対して， 連続的でアラインされた物理ページがあらかじめ割り当てられていた場合， このグローバル・セクション用に使用されていた物理ページが予約メモリ・ レジストリに返されます。物理ページの割り当てが解除されて空きページ・ リストに返されることはなく，引き続き予約されます。 システムの流動ページ・カウントも調整されません。

予約メモリは， SYSMANユーティリティのRESERVED_MEMORY FREEコマンドでのみ実行中のシステムに解放されます。

注意
  パーマネント・グローバル・ セクションは， SYS$DGBLSCの呼び出しと，グローバル・セクションへの最終リファレンスで削除されます。 非パーマネント・グローバル・セクションは， グローバル・セクションへの最終リファレンスで単純に削除されます。

## 4.6.3 アプリケーション構成

メモリ常駐グローバル・セクションを使用する OpenVMS Alphaアプリケーションを構成するには， 次の手順を実行します。

1. SYSMAN RESERVED_MEMORY ADDコマンドを実行し，必要な予約メモリを指定します。

2. フィードバックを伴うAUTOGENを実行し，システムの流動ページ・ カウントを適切に設定し，システムのページファイル，プロセス数， およびワーキング・セット最大サイズを適切に算出します。

3. システムを再起動することによって，予約メモリをシステムの流動ページ・ カウントから除外し，連続的でアラインされたページを割り当て， 必要に応じてゼロ化します。

[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]