Compaq OpenVMS Alpha
オペレーティング・システム
パーティショニングおよび Galaxy ガイド


前へ 次へ 目次 索引



第 15 章
共用メモリとの通信

この章では,次の 2 つの OpenVMS 内部機能について説明します。これらの機能は,共用メモリを使用して,OpenVMS Galaxy コンピューティング環境のインスタンス間で通信を行います。

15.1 共用メモリ・クラスタ・インターコネクト (SMCI)

共用メモリ・クラスタ・インターコネクト (SMCI) は,Galaxy インスタンス間で通信するためのシステム通信サービス (SCS) ポートです。OpenVMS インスタンスが Galaxy および OpenVMS Cluster メンバの両方としてブートされると,SMCI ドライバがロードされます。この SCS ポート・ドライバは,共用メモリを介して同じ Galaxy 内の他のクラスタ・インスタンスと通信します。この機能は,OpenVMS Galaxy ソフトウェア・アーキテクチャが備えている性能向上のための主要な機能の 1 つです。共用メモリを介してクラスタ接続された他のインスタンスと通信できる機能は,従来のクラスタ・インターコネクトより大幅に性能を向上することができます。

15.1.1 SYS$PBDRIVER ポート・デバイス

Galaxy およびクラスタ・メンバの両方としてブートすると,デフォルトで SYS$PBDRIVER がロードされます。このドライバをロードすると,デバイス PBAx が作成されます。ただし,x は Galaxy パーティション ID です。他のインスタンスがブートされると,PBAx デバイスも作成されます。SMCI は他のインスタンスをただちに識別し,そのインスタンスへの通信チャネルを作成します。従来のクラスタ・インターコネクトと異なり,他のインスタンスと通信するために新しいデバイスが作成されます。このデバイスにも PBAx という名前が割り当てられます。ただし,x は,このデバイスの通信相手であるインスタンスの Galaxy パーティション ID です。

たとえば,MILKY と WAY という 2 つのインスタンスで構成される OpenVMS Galaxy について考えてみましょう。MILKY はインスタンス 0 であり,WAY はインスタンス 1 です。ノード MILKY がブートされると,デバイス PBA0 が作成されます。ノード WAY がブートされると,PBA1 が作成されます。2 つのノードが相互に相手を "検出" すると,MILKY はWAY と通信するために PBA1 を作成し,WAY は MILKY と通信するために PBA0 を作成します。


            MILKY                 WAY 
 
            PBA0:                 PBA1: 
 
            PBA1:   <------->     PBA0: 

15.1.2 1 つの Galaxy 内の複数のクラスタ

SYS$PBDRIVER は同じ Galaxy 内で複数のクラスタをサポートできます。この機能は, SYS$PEDRIVER を使用して,同じ LAN で複数のクラスタがサポートされるのと同じ方法で実現されます。SYS$PEDRIVER で使用されるクラスタ・グループ番号とパスワードは,同じ Galaxy コミュニティ内の異なるクラスタを区別するために, SYS$PBDRIVER でも使用されます。Galaxy インスタンスが LAN を介して他の OpenVMS インスタンスとクラスタ接続もされている場合は,クラスタ・グループ番号は CLUSTER_CONFIG によって適切に設定されます。現在のクラスタ・グループ番号を判断するには,次のコマンドを実行します。


$ MCR SYMAN 
SYSMAN> CONFIGURATION SHOW CLUSTER_AUTHORIZATION 
Node: MILKY   Cluster group number: 0 
Multicast address: xx-xx-xx-xx-xx-xx 
SYSMAN> 

LAN を介してクラスタ接続されていないときに,同じ Galaxy コミュニティ内で複数のクラスタを稼動する場合は,クラスタ・グループ番号を設定しなければなりません。グループ番号とパスワードは,次のように同じクラスタ内のすべての Galaxy インスタンスで同一でなければなりません。


$ MCR SYSMAN 
SYSMAN> CONFIGURATION SET 
CLUSTER_AUTHORIZATION/GROUP_NUMBER=222/PASSWORD=xxxx 
SYSMAN> 

Galaxy インスタンスが LAN を介してクラスタ接続もされている場合は, CLUSTER_CONFIG はクラスタ・グループ番号を質問し,Galaxy インスタンスはこれらのグループ番号を使用します。LAN を介してクラスタ接続されていない場合は,グループ番号のデフォルトは 0 になります。つまり,Galaxy 内のすべてのインスタンスは同じクラスタ内に存在します。

15.1.3 SYS$PBDRIVER の SYSGEN パラメータ

ほとんどの場合,SYS$PBDRIVER のデフォルト設定を使用すると適切です。しかし,いくつかの SYSGEN パラメータも準備されています。 SMCI_PORTS と SMCI_FLAGS の 2 つの SYSGEN パラメータは SYS$PBDRIVER を制御します。

15.1.3.1 SMCI_PORTS

SYSGEN パラメータ SMCI_PORTS は,SYS$PBDRIVER の初期ロードを制御します。このパラメータはビットマスクであり,ビット 0〜25 はそれぞれコントローラ名を表します。ビット 0 がセットされている場合は,PBAx がロードされます。これはデフォルト設定です。ビット 1 がセットされている場合は,PBBx がロードされ,以下同様で,ビット 25 がセットされている場合は,PBZx がロードされます。OpenVMS Alpha バージョン 7.2-1 の場合,このパラメータはデフォルト値の 1 のままにしておいてください。

追加ポートをロードすると,Galaxy インスタンス間で複数のパスを使用できます。 OpenVMS Alpha バージョン 7.2-1 では,SYS$PBDRIVER は当初,Fast Path をサポートしないので,複数の通信チャネルを使用しても利点がありません。 OpenVMS の将来のリリースでは,SYS$PBDRIVER 用に Fast Path がサポートされるようになる予定です。Fast Path がサポートされるようになれば,複数の CPU が割り当てられたインスタンスは,インスタンス間に複数の通信チャネルを持つことで,スループットを向上できます。

15.1.4 SMCI_FLAGS

SYSGEN パラメータ SMCI_FLAGS は,SYS$PBDRIVER の動作を制御します。現在定義されているフラグはビット 1 だけです。これは,ポート・デバイスがそれ自体との通信をサポートするかどうかを制御します。それ自体との SCS 通信をサポートする機能は,主にテストのために使用されます。デフォルト設定では,このビットはオフに設定され,システム・リソースを節約するために,ローカルな SCS 通信のサポートは無効になります。このパラメータは動的であり,このビットをオンにすると,SCS 仮想サーキットがただちに作成されます。

ビット マスク 説明
0 0 0 = ローカル通信チャネルを作成しない (SYSGEN のデフォルト)。ローカル SCS 通信は主にテストで使用され,通常の操作では必要ない。このビットをオフにしておけば,リソースとオーバーヘッドを削減できる。

1 = ローカル通信チャネルを作成する。
1 2 0 = Galaxy およびクラスタの両方としてブートされた場合は,SYS$PBDRIVER をロードする (SYSGEN のデフォルト)。

1 = Galaxy としてブートされた場合は,SYS$PBDRIVER をロードする。
2 4 0 = 必要最低限のコンソール出力 (SYSGEN のデフォルト)

1 = 完全なコンソール出力,SYS$PBDRIVER は,通信チャネルを作成するときと,通信チャネルを破棄するときに,コンソール・メッセージを表示する。

15.2 LAN 共用メモリ・デバイス・ドライバ

OpenVMS Galaxy インスタンス間のローカル・エリア・ネットワーク (LAN) 通信は,イーサネット LAN 共用メモリ・ドライバでサポートされます。この LAN ドライバは共用メモリを介して,同じ OpenVMS Galaxy システム内の他のインスタンスと通信します。共用メモリを介して他のインスタンスと通信すれば,従来の LAN を介した通信より性能を大幅に向上できます。

LAN 共用メモリ・ドライバ SYS$EBDRIVER をロードするには,次のコマンドを入力します。


$ MCR SYSMAN 
SYSMAN> IO CONN EBA/DRIVER=SYS$EBDRIVER/NOADAPTER 

OpenVMS バージョン 7.2-1 で,LAN プロトコルがこの LAN デバイス ( EBAn,ただし n はユニット番号 ) を介して自動的に起動するように設定するには,このドライバをロードするためのプロシージャを構成プロシージャに追加する必要があります。 SYS$MANAGER:SYCONFIG.COM.

LAN ドライバは Ethernet/IEEE 802.3 と同じフレーム形式でイーサネット LAN をエミュレートしますが,最大フレーム・サイズは 1518 から 7360 バイトに拡大しています。LAN ドライバは標準の OpenVMS QIO および VCI インタフェースをアプリケーションに提供します。既存の QIO および VCI LAN アプリケーションはすべて,変更せずに動作するはずです。

将来のリリースでは,SYS$EBDRIVER デバイス・ドライバは自動的にロードされるようになります。


第 16 章
共用メモリ・プログラミング・インタフェース

共用メモリ・グローバル・セクション は,共用コミュニティ内のすべてのインスタンスからアクセスできるメモリをマッピングします。これらのオブジェクトは Galaxywide 共用セクション とも呼びます。このような各オブジェクトには名前,バージョン,保護属性があります。

16.1 共用メモリの使用

アプリケーション・プログラムは,Galaxywide 共用セクションをマッピングすることで共用メモリにアクセスします。プログラミング・モデルは標準の OpenVMS グローバル・セクションと同じです。つまり,共用メモリを使用する各インスタンスで,その共用メモリを作成,マッピング,アンマッピング,削除します。共用メモリ・グローバル・セクションには次の属性があります。

プログラマの立場から見ると,共用メモリ・グローバル・セクションはメモリ常駐セクションによく似ています。メモリ常駐セクションを作成するときに使用するシステム・サービスと同じサービスを使用して,Galaxywide 共用セクションを作成します。フラグ SEC$M_SHMGS をセットすると,サービスは共用メモリ・グローバル・セクションに対して動作します。

メモリ常駐セクションと異なり,Galaxywide セクションに対して空間を割り当てるために,予約メモリ・レジストリは使用されません。SYSMAN RESERVE コマンドは,ノード固有メモリにのみ影響します。通常の OpenVMS ページング操作のために共用メモリは使用されないので,共用メモリを予約する必要はありません。

Galaxywide セクションに対して共用ページ・テーブルを作成しなければならないかどうかを指定するためのユーザ・インタフェースもありません。その代わり, Galaxywide セクションに対する共用ページ・テーブルの作成は,セクション・サイズによって決定されます。OpenVMS バージョン 7.2 では,共用ページ・テーブルは 128 ページ (1MB) 以上のセクションに対して作成されます。 Galaxywide 共用ページ・テーブルはすべてのGalaxy インスタンス間で共用されます。

16.2 システム・サービス

ここでは,共用メモリ・グローバル・セクションをサポートする新しいシステム・サービスと,変更されたシステム・サービスについて説明します。

16.2.1 強化されたサービス

新しい共用メモリ・グローバル・セクション・フラグ SEC$M_SHMGS を認識するように,次のシステム・サービスが強化されました。

次のシステム・サービスは共用メモリを操作できるように強化されていますが,インタフェースは変更されていません。

16.2.2 新しいセクション・フラグ SEC$M_READ_ONLY_SHPT

新しいセクション・フラグ SEC$M_READ_ONLY_SHPT は,SYS$CREATE_GDZRO と SYS$CRMPSC_GDZRO_64 サービスで認識されます。このビットがセットされている場合は,読み込みアクセスだけが可能な共用ページ・テーブルをセクション用に作成することをシステムに要求します。この機能は特に,メモリ常駐セクションや Galaxy 共用セクションが多くのプログラムで読み込まれるものの,書き込むプログラムは 1 つしかない環境で役立ちます。

共用ページ・テーブル・セクションが割り当てられている Galaxy 共用セクションまたはメモリ常駐セクションをマッピングする場合には,データにアクセスするために次のオプションを使用できます。

共用ページ・テーブル 読み込み専用 読み込みと書き込み
何も作成されない マップ要求に SEC$M_WRT フラグをセットしない。

プライベート・ページ・テーブルは,セクションをマッピングする共用ページ・テーブル領域を指定した場合でも,常に使用される。

マップ要求に SEC$M_WRT フラグをセットする。

プライベート・ページ・テーブルは,セクションをマッピングする共用ページ・テーブル領域を指定した場合でも,常に使用される。

書き込みアクセス マップ要求に SEC$M_WRT フラグをセットしない。

プライベート・ページ・テーブルが使用されることを確認する。セクションをマッピングする共用ページ・テーブル領域を指定しない。指定すると,エラー状態 S$_IVSECFLG が返される。

マップ要求に SEC$M_WRT フラグをセットする。

セクションをマッピングする共用ページ・テーブル領域を指定した場合,マッピングのために共用ページ・テーブル・セクションが使用される。

読み込みアクセス マップ要求に SEC$M_WRT フラグをセットしない。セクションをマッピングする共用ページ・テーブル領域を指定した場合,マッピングのために共用ページ・テーブル・セクションが使用される。 マップ要求に SEC$M_WRT フラグをセットする。プライベート・ページ・テーブルが使用されることを確認する。セクションをマッピングする共用ページ・テーブル領域を指定しない。指定すると,エラー状態 SS$_IVSECFLG が返される。

注意

Galaxy 共用セクションの共用ページ・テーブルも Galaxy 共用セクションとして実装されます。このため,このセクションに接続されているすべての OpenVMS インスタンスで読み込みアクセスが許可されるか,またはすべてのインスタンスで読み込みアクセスと書き込みアクセスが許可されます。セクションを作成するために,最初のインスタンスが要求する SEC$M_READ_ONLY_SHPT フラグの設定がすべてのインスタンスで使用されます。

SYS$CRMPSC_GDZRO_64 サービスを使用すると,常に SEC$M_WRT フラグがセットされ,書き込みのためにセクションをマッピングすることが示されます。このサービスを使用して,読み込み専用アクセスのために共用ページ・テーブルを使用するセクションを作成する場合は,プライベート・ページ・テーブルを使用しなければならず,セクションをマッピングする共用テーブル領域を指定することはできません。

16.3 Galaxywide グローバル・セクション

Galaxy 共用メモリにオブジェクトを作成するには,SHMEM 特権が必要です。既存のセクションにマッピングする権利は,通常のアクセス制御機能によって制御されます。既存のセクションをマッピングするために SHMEM は必要ありません。通常のメモリ常駐セクションを作成する場合は,VMS$MEM_RESIDENT_USER 識別子が必要ですが,Galaxywide セクションの場合は必要ありません。

Galaxywide メモリ・セクションの作成とマッピングは,メモリ常駐セクションを作成する場合と同じサービスで実行されます。現在,次のサービスが SEC$M_SHMGS フラグを認識します。

SYS$CREATE_GDZRO
SYS$CRMPSC_GDZRO_64
SYS$MGBLSC_64
SYS$DGBLSC

SYS$CREATE_GDZRO と SYS$CRMPSC_GDZRO_64 は新しい状態コードを返します。

SS$_INV_SHMEM 共用メモリが不正である。
SS$_INSFRPGS 空き共用ページまたはプライベート・ページが不足している。
SS$_NOBREAK Galaxy ロックが別のノードによって保有されており,破棄されていない。
SS$_LOCK_TIMEOUT Galaxy ロック・タイムアウトが発生した。

$ INSTALL LIST/GLOBAL と $ SHOW MEMORY コマンドは Glaxywide セクションを認識します。

Galaxywide セクションはそれぞれ独自のネーム・スペースを使用します。さまざまな所有者 UIC に対して,システム・グローバル・セクションとグループ・グローバル・セクションを識別するために常に同じ名前を使用できるのと同様に,Galaxywide システム・グローバル・セクションと Galaxywide グループ・グローバル・セクションで同じ名前を使用できます。

Galaxywide セクションにはそれぞれ,セキュリティ・クラスが割り当てられます。

GLXSYS_GLOBAL_SECTION
GLXGRP_GLOBAL_SECTION

これらのセキュリティ・クラスは $GET_SECURITY と $SET_SECURITY システム・サービス,DCL コマンド SET/SHOW SECURITY で使用されます。

これらの新しいセキュリティ・クラスは Galaxy 環境でのみ有効です。 Galaxy 以外のノードでは認識されません。

Galaxywide グローバル・セクションが共用インスタンスに存在する場合は,そのセキュリティ属性を検索し,影響を与えることだけが可能です。

次の例は,Galaxywide セクションの監査メッセージを示しています。


%%%%%%%%%  OPCOM  20-MAR-1998 10:44:43.71  %%%%%%%% (from node GLX1 at 20-MAR-1998 10:44:43.85) 
Message from user AUDIT$SERVER on GLX1 
Security alarm (SECURITY) on GLX1, system id: 19955 
Auditable event:          Object creation 
Event information:        global section map request 
Event time:               20-MAR-1998 10:44:43.84 
PID:                      2040011A 
Process name:             ANDY 
Username:                 ANDY 
Process owner:            [ANDY] 
Terminal name:            RTA1: 
Image name:               MILKY$DKA100:[ANDY]SHM_MAP.EXE;1 
Object class name:        GLXGRP_GLOBAL_SECTION 
Object name:              [47]WAY____D99DDB03_0$MY_SECTION 
Secondary object name:    <Galaxywide global section> 
Access requested:         READ,WRITE 
Deaccess key:             8450C610 
Status:                   %SYSTEM-S-CREATED, file or section did not exist; 
has 
been created 

"Object name" フィールドに注意してください。ここに表示されているオブジェクト名は,OpenVMS Galaxy 内のセクションを一意に識別します。フィールドは次のとおりです。

[47] (グループ・グローバル・セクションの場合のみ) セクションの作成者の UIC グループを識別する。
WAY____D99DDB03_0$ 共用コミュニティの識別子。
MY_SECTION ユーザが指定したセクションの名前。

ユーザはセキュリティ・プロファイルを設定または表示するために,要求に対してセクション名とクラスだけを指定できます。UIC は常に現在のプロセスから取得され,コミュニティ識別子はプロセスが実行されているコミュニティから取得されます。

Galaxywide システム・グローバル・セクションの出力は,"Object class name" と "Objects name" フィールドでのみ異なります。このタイプのセクションのオブジェクト名には,グループ識別フィールドが含まれません。

オブジェクト・クラス名: GLXSYS_GLOBAL_SECTION
オブジェクト名: WAY____D99DDB03_0$SYSTEM_SECTION

セキュリティに関する重要な注意事項

Galaxywide メモリ・セクションのセキュリティ属性は,それがどのインスタンスで実行されているかとは関係なく,プロセスにとって同一でなければなりません。

この条件は,この共用コミュニティに参加するすべてのインスタンスを,すべてのノードがセキュリティ関連ファイルを共用する「同種」OpenVMS Cluster に参加させることで実現できます。

SYSUAF.DAT, SYSUAFALT.DAT (システム登録ファイル)
RIGHTSLIST.DAT (ライト・データベース)
VMS$OBJECTS.DAT (オブジェクト・データベース)

特に,保護の変更を Galaxywide セクションに自動的に伝達するには,すべての共用インスタンスで同じ物理ファイル (VMS$OBJECTS.DAT) を使用することが必要です。

インストールしたシステムで,これらのファイルが Galaxy 全体で共用されない場合は,Galaxywide 共用セクションの作成者は,セクションが各インスタンスで同じセキュリティ属性を持つようにしなければなりません。このためには,手動の操作が必要です。


前へ 次へ 目次 索引