JP6651836B2 - 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム - Google Patents

情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム Download PDF

Info

Publication number
JP6651836B2
JP6651836B2 JP2015247744A JP2015247744A JP6651836B2 JP 6651836 B2 JP6651836 B2 JP 6651836B2 JP 2015247744 A JP2015247744 A JP 2015247744A JP 2015247744 A JP2015247744 A JP 2015247744A JP 6651836 B2 JP6651836 B2 JP 6651836B2
Authority
JP
Japan
Prior art keywords
access
information processing
node
permission
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015247744A
Other languages
English (en)
Other versions
JP2017111751A (ja
Inventor
近藤 浩
浩 近藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2015247744A priority Critical patent/JP6651836B2/ja
Priority to US15/348,494 priority patent/US10628056B2/en
Publication of JP2017111751A publication Critical patent/JP2017111751A/ja
Application granted granted Critical
Publication of JP6651836B2 publication Critical patent/JP6651836B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • G06F11/0724Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU] in a multiprocessor or a multi-core unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0727Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a storage system, e.g. in a DASD or network based storage system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/1425Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
    • G06F12/1441Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0637Permissions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Storage Device Security (AREA)
  • Multi Processors (AREA)

Description

本発明は、情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラムに関する。
近年、複数の情報処理装置をクロスバースイッチ等で接続した情報処理システムが利用されている。各情報処理装置は、複数のCPU(Central Processing Unit)、メモリ、HDD(Hard Disk Drive)等を有し、クロスバースイッチ等を介して他の情報処理装置と通信を行う。また、各情報処理装置が有するメモリには、自装置だけがアクセス可能なローカルメモリと他の情報処理装置がアクセス可能な共有メモリがある。
共有メモリについては、他の情報処理装置からのアクセスの許可を制御する技術としてアクセストークンを用いる技術が開発されている。各情報処理装置は、共有メモリの所定の大きさの単位領域毎にメモリトークンと呼ばれるキーをレジスタに記憶し、キーをアクセストークンとして指定した情報処理装置だけに対応する単位領域へのアクセスを許可する。そして、共有メモリを利用する他の情報処理装置に障害が発生すると、共有メモリを有する情報処理装置は、新たなメモリトークンをレジスタに記憶する。そして、共有メモリを有する情報処理装置は、新たなメモリトークンを障害が発生した他の情報処理装置に送信する。しかしながら、障害が発生した情報処理装置は新たなメモリトークンを受信できないためことによって、共有メモリにアクセスしてもメモリトークンが不一致となる。それゆえ、障害が発生した情報処理装置からの共有メモリへのアクセスを防ぐことができる。
また、物理メモリに対してアクセスを許されたプロセッサエレメントの識別子を含むページテーブルを参照して物理メモリに対するプロセッサエレメントによるアクセス可否を判定することで、並列処理プログラムによるメモリ破壊による誤動作を防ぐ技術がある。
また、プロセサが共有メモリをアクセスする際、リード、ライトについて可能・禁止を示すビットパターンに基づいてアクセス違反を判定することで、共有メモリのアクセス保護を実現する技術がある。
特開2013−140446号公報 特開2011−70528号公報 特開昭59−121561号公報
しかしながら、共有メモリを利用するある情報処理装置に障害が発生した場合に、アクセストークンの再設定のために、共有メモリ全体に対するアクセスの一時的な停止が行われる。そのため、障害が発生した情報処理装置を除く他の正常な情報処理装置が、共有メモリに対してアクセスを行いたい場合であっても、共有メモリ全体に対するアクセスの停止及び再開の処理により、アクセスが中断してしまうという問題がある。
本発明は、1つの側面では、ある情報処理装置やあるアプリケーションに障害が発生しても、正常な情報処理装置や正常なアプリケーションによる共有メモリへのアクセスについては中断されず、障害が発生した異常な情報処理装置や異常なアプリケーションからの共有メモリへのアクセスについては瞬時に遮断可能にすることを目的とする。
1つの態様では、情報処理装置は、複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する。前記情報処理装置は、前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を記憶する認証情報記憶部を有する。前記情報処理装置は、前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部を有する。前記情報処理装置は、他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとする。前記情報処理装置は、他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定する。そして、前記情報処理装置は、前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否する。一方、前記情報処理装置は、前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と前記認証情報記憶部が記憶する前記認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定する。また、前記情報処理装置は、異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力する。
1つの側面では、ある情報処理装置やあるアプリケーションに障害が発生しても、正常な情報処理装置や正常なアプリケーションによる共有メモリへのアクセスについては中断されず、障害が発生した異常な情報処理装置や異常なアプリケーションからの共有メモリへのアクセスについては瞬時に遮断可能にすることができる。
図1は、実施例1に係る情報処理システムのハードウェア構成を示す図である。 図2は、CPUチップのブロック図である。 図3は、実施例1に係る情報処理システムのハードウェアの論理構成及びソフトウェアの機能構成を示す図である。 図4は、管理テーブルの一例を示す図である。 図5は、アクセス許可レジスタ方式を説明するための図である。 図6Aは、ノード毎のアクセス許可を説明するための第1の図である。 図6Bは、ノード毎のアクセス許可を説明するための第2の図である。 図7は、ノード毎の許可設定レジスタを示す図である。 図8Aは、CPUチップ毎のアクセス許可を説明するための第1の図である。 図8Bは、CPUチップ毎のアクセス許可を説明するための第2の図である。 図9は、CPUチップ毎の許可設定レジスタを示す図である。 図10Aは、ストランド毎のアクセス許可を説明するための第1の図である。 図10Bは、ストランド毎のアクセス許可を説明するための第2の図である。 図11は、ストランド毎の許可設定レジスタを示す図である。 図12Aは、ストランド毎のリード/ライト許可を説明するための第1の図である。 図12Bは、ストランド毎のリード/ライト許可を説明するための第2の図である。 図13Aは、ストランド毎のリード許可設定レジスタを示す図である。 図13Bは、ストランド毎のライト許可設定レジスタを示す図である。 図14Aは、共有メモリを使用する処理のフローを示す第1のフローチャート(ノード毎のアクセス可否が設定可能な場合)である。 図14Bは、共有メモリを使用する処理のフローを示す第2のフローチャート(ノード毎のアクセス可否が設定可能な場合)である。 図15Aは、共有メモリを使用する処理のフローを示す第1のフローチャート(ノード毎のリード・ライト許可が設定可能な場合)である。 図15Bは、共有メモリを使用する処理のフローを示す第2のフローチャート(ノード毎のリード・ライト許可が設定可能な場合)である。 図16Aは、共有メモリを使用するノードをセグメント単位で把握する処理のフローを示すフローチャートである。 図16Bは、共有メモリを使用するプロセスをセグメント単位で把握する処理のフローを示すフローチャートである。 図17は、ノード異常発生時の処理のフローを示すフローチャート(ノード毎のアクセス可否が設定可能な場合)である。 図18は、ノード異常発生時の処理のフローを示すフローチャート(ノード毎のリード・ライト許可が設定可能な場合)である。 図19は、実施例2に係る情報処理システムのハードウェアの論理構成及びソフトウェアの機能構成を示す図である。 図20Aは、複数トークン方式を説明するための第1の図である。 図20Bは、複数トークン方式を説明するための第2の図である。 図21Aは、共有メモリを使用する処理のフローを示す第1のフローチャートである。 図21Bは、共有メモリを使用する処理のフローを示す第2のフローチャートである。 図22は、ノード異常発生時の処理のフローを示すフローチャートである。 図23は、アプリ異常発生時の処理のフローを示すフローチャートである。
以下に、本願の開示する情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例は開示の技術を限定するものではない。
まず、実施例1の記載で用いられる用語について説明する。
「ノード」: 一つ以上のOS(Operating System)が動作する情報処理装置(コンピュータシステム)。仮想化機能を有するコンピュータシステムでは、ノード内を論理的に複数の論理ドメインに分割して、複数のOSを稼働させることもできる。
「ノード間の共有メモリ」: 複数のノード(複数の異なるOS上で動作する複数のアプリケーション)からアクセス(リード/ライト)可能な共有メモリ。
「ホームノード」: ノード間の共有メモリ領域として設定した物理メモリを有するノード。
「リモートノード」: ホームノードのメモリを参照したり更新したりするノード。
「セグメント」: 共有メモリの管理単位。セグメント毎に後述するメモリトークンを設定することができる。
「セグメントサイズ」: 共有メモリの管理単位のサイズ。例えば、4MB(メガバイト)、32MB、256MB、2GB(ギガバイト)等。
「RA」: 実アドレス。仮想化機能を導入したシステムで論理ドメイン毎に割り振られるアドレス。
「PA」: 物理アドレス。物理位置によって割り振られるアドレス。
「メモリトークン」: ホームノード側のCPUチップのメモリトークンレジスタに設定されるメモリアクセスキー。セグメント毎に異なるメモリトークンが設定される。メモリアクセスキーは、トークンとも呼ばれる。
「アクセストークン」: リモートノードからホームノード(他ノード)の共有メモリにアクセスする際に設定されるメモリアクセスキー。
・リモートノードからのメモリアクセス要求に付加されたアクセストークンとホームノードのメモリトークンレジスタに設定されたメモリトークンに基づいて、ハードウェアがメモリアクセス要求実行の可否を制御する。
・ホームノードのメモリトークンとリモートノードのアクセストークンが一致する場合は、共有メモリにアクセス(リード及びライト)することが可能。
・ホームノードのメモリトークンとリモートノードのアクセストークンが不一致の場合、共有メモリにアクセス(リード及びライト)しようとすると、例外トラップが発生してアクセス不可。
次に、実施例に係る情報処理システムのハードウェア構成について説明する。図1は、実施例に係る情報処理システムのハードウェア構成を示す図である。図1に示すように、情報処理システム2は、3つのノード1と、サービスプロセッサ3とを有する。また、3つのノード1とサービスプロセッサ3はクロスバーネットワーク4で接続される。
ノード1は、2つのCPUチップ11と、ディスクユニット12と、通信インターフェイス13とを有する情報処理装置である。CPUチップ11は、2つのコア14と、2つのメモリ15を有するチップである。コア14は、2つのストランド16を有する演算処理装置である。ストランド16は、コア14において命令を実行する単位である。プログラムは、各ストランド16で実行される。メモリ15は、コア14が実行するプログラムやコア14が使用するデータを記憶するRAM(Random Access Memory)である。
ディスクユニット12は、2つのHDD17を有する記憶装置である。HDD17は、磁気ディスク装置である。通信インターフェイス13は、クロスバーネットワーク4を介して他のノード1やサービスプロセッサ3と通信するためのインターフェイスである。
サービスプロセッサ3は、ノード1を制御する装置であり、CPU31と、メモリ32と、通信インターフェイス33とを有する。CPU31は、メモリ32が記憶するプログラムを実行する中央処理装置である。メモリ32は、CPU31によって実行されるプログラムやCPU31が使用するデータ等を記憶するRAMである。通信インターフェイス33は、クロスバーネットワーク4を介してノード1と通信するためのインターフェイスである。
なお、説明の便宜上、図1では3つのノード1を示したが、情報処理システム2は、任意の個数のノード1を有してよい。また、図1では、ノード1が2つのCPUチップ11を有する場合を示したが、ノード1は、任意の個数のCPUチップ11を有してよい。また、図1では、CPUチップ11が2つのコア14を有する場合を示したが、CPUチップ11は、任意の個数のコア14を有してよい。また、図1では、コア14が2つのストランド16を有する場合を示したが、コア14は、任意の個数のストランド16を有してよい。また、図1では、CPUチップ11が2つのメモリ15を有する場合を示したが、CPUチップ11は、任意の個数のメモリ15を有してよい。また、図1では、ディスクユニット12が2つのHDD17を有する場合を示したが、ディスクユニット12は、任意の個数のHDD17を有してよい。
図2は、CPUチップ11のブロック図である。図2に示すように、CPUチップ11は、2つのコア14と、メモリ26と、メモリトークンレジスタ27と、二次キャッシュ18と、許可設定レジスタ2aとを有する。なお、メモリ26は、図1の2つのメモリ15と対応する。また、図1において、メモリトークンレジスタ27、二次キャッシュ18及び許可設定レジスタ2aは省略されている。
メモリトークンレジスタ27は、セグメント毎にメモリトークンを記憶する。二次キャッシュ18は、コア14内の一次キャッシュ19と比較して低速で大容量のキャッシュメモリを有するキャッシュ装置である。
許可設定レジスタ2aは、セグメント毎に各ノード1についてアクセスを許可するか否かを示す情報を記憶する。許可設定レジスタ2aは、異常が発生したノード1又は異常が発生したアプリケーションがない場合には、セグメント毎にアクセスを許可する情報を記憶する。許可設定レジスタ2aは、ノード1に異常が発生すると、異常ノードが使用していたセグメントについて異常ノードからのアクセスを禁止する情報を記憶する。許可設定レジスタ2aは、アプリケーションに異常が発生すると、異常アプリケーションが使用していたセグメントについて異常アプリケーションが動作しているノード1からのアクセスを禁止する情報を記憶する。
なお、許可設定レジスタ2aは、各ノード1の代わりに各CPUチップ11、各コア14又は各ストランド16についてアクセスを許可するか否かを示す情報を記憶してもよい。また、許可設定レジスタ2aは、アクセスを許可するか否かを示す情報としてリードアクセス及びライトアクセスそれぞれについて許可するか否かを示す情報を記憶してもよい。
コア14は、一次キャッシュ19と、2つのストランド16とを有する。一次キャッシュ19は、二次キャッシュ18と比較して高速で小容量のキャッシュメモリを有するキャッシュ装置である。一次キャッシュ19は、命令キャッシュ20とデータキャッシュ21とを有する。命令キャッシュ20は、命令を記憶し、データキャッシュ21は、データを記憶する。
ストランド16は、一次キャッシュ19から命令及びデータを読み出す。ストランド16が読み出す命令又はデータが一次キャッシュ19にない場合には、一次キャッシュ19は、二次キャッシュ18から命令又はデータを読み出す。一次キャッシュ19が読み出す命令又はデータが二次キャッシュ18にない場合には、二次キャッシュ18は、メモリ26から命令又はデータを読み出す。
また、ストランド16は、メモリ26に格納するデータを一次キャッシュ19に書き込む。ストランド16が一次キャッシュ19に書き込んだデータは、二次キャッシュ18に書き込まれ、二次キャッシュ18からメモリ26に書き込まれる。
ストランド16は、命令制御部22と、命令バッファ23と、演算部24と、レジスタ部25と、アクセストークンレジスタ28とを有する。命令制御部22は、命令バッファ23から命令を読み出し、読み出した命令の実行を制御する。命令バッファ23は、命令キャッシュ20から読み出された命令を記憶する。演算部24は、四則演算等の演算を実行する。レジスタ部25は、命令の実行に用いられるデータや命令の実行結果等を記憶する。なお、ストランド16は独自の命令バッファ23とレジスタ部25を備えるが、命令制御部22と演算部24は2つのストランド16で共用される。
アクセストークンレジスタ28は、他のノード1の共有メモリのセグメント毎にアクセストークンを記憶する。ストランド16で実行されるプロセスは、アクセストークンレジスタ28に記憶されたアクセストークンを用いて共有メモリにアクセスする。なお、図1では、一次キャッシュ19及びアクセストークンレジスタ28は省略されている。また、図2では、アクセストークンレジスタ28はストランド16に含まれるが、アクセストークンレジスタ28の実装は図2の例に限定されることなく、各ストランド16に対応する各アクセストークンレジスタ28はストランド16の外にあってもよい。
次に、実施例に係る情報処理システム2のハードウェアの論理構成及びソフトウェアの機能構成について説明する。ここで、ハードウェアの論理構成とは、OSやアプリケーションが使用する論理的なハードウェアである。図3は、実施例に係る情報処理システム2のハードウェアの論理構成及びソフトウェアの機能構成を示す図である。なお、図3では、1つのノード1を1つの論理ドメインとした場合を示す。1つの論理ドメインでは1つのOSが実行される。したがって、図3では、各ノード1で1つのOSが実行される。
図3に示すように、ノード1は、論理資源として、4つのVCPU41と、ローカルメモリ42と、共有メモリ43と、ディスク装置44と有する。VCPU41は、論理的なCPUであり、図1に示した8個のストランド16のいずれかに対応付けられる。
ローカルメモリ42は、自ノード1だけからアクセスされるメモリであり、共有メモリ43は、他のノード1からもアクセス可能なメモリである。ローカルメモリ42と共有メモリ43は、図1に示した4つのメモリ15に対応する。ローカルメモリ42に2つのメモリ15を対応付け、共有メモリ43に他の2つのメモリ15を対応付けてもよいし、ローカルメモリ42に3つのメモリ15を対応付け、共有メモリ43に他の1つのメモリ15を対応付けてもよい。ディスク装置44は、図1に示したディスクユニット12に対応する。
ハイパーバイザ50は、情報処理システム2の物理資源を管理してOS60に論理資源を提供する基本ソフトウェアである。OS60は、論理資源を用いてアプリケーションの実行を制御する。OS60は、共有メモリ管理部61を有する。
共有メモリ管理部61は、共有メモリ43を管理し、管理テーブル70と、ノード・プロセス管理部71と、許可設定部72と、セグメント情報把握部73と、キャッシュフラッシュ部74と、許可解除部75と、ログ出力部76とを有する。
管理テーブル70は、他のノード1が有する共有メモリ43を含めて情報処理システム2が有する全ての共有メモリ43について、セグメント毎に共有メモリ43の情報が登録されるテーブルである。
図4は、管理テーブル70の一例を示す図である。図4は、ノード番号が「0」であるホームノードが有する管理テーブル70と、ノード番号が「1」であるホームノードが有する管理テーブル70と、ノード番号が「2」であるリモートノードが有する管理テーブル70を示す。図4において、セグメント番号が「0」〜「5」のセグメントは、ノード番号が「0」であるホームノードが物理メモリを有するセグメントである。また、セグメント番号が「16」〜「20」のセグメントは、ノード番号が「1」であるホームノードが物理メモリを有するセグメントである。
図4に示すように、ノード番号が「0」及び「1」であるホームノードの管理テーブル70には、セグメント毎に、セグメント番号と、アドレスと、セグメントサイズと、使用許可ノード番号と、使用中アプリのPIDと、メモリトークンとが登録される。また、ノード番号が「2」であるリモートノードの管理テーブル70には、ホームノードの管理テーブル70とほぼ同じ項目が登録されるが、メモリトークンの代わりにアクセストークンが登録される。
セグメント番号は、セグメントを識別する識別番号である。アドレスは、セグメントのRAである。なお、アドレスは、PAであってもよい。セグメントサイズは、セグメントのサイズである。使用許可ノード番号は、ホームノードの管理テーブル70でだけ用いられ、セグメントの使用が許可されたノード1の番号である。
使用中アプリのPIDは、自ノードにおいてセグメントを使用するアプリケーションのプロセスIDである。メモリトークンは、セグメントのアクセス許可の制御に用いられるメモリアクセスキーである。アクセストークンは、ホームノードの共有メモリ43にアクセスする際に使用されるメモリアクセスキーである。
例えば、ノード番号が「0」であるホームノードの管理テーブル70では、識別番号が「0」であるセグメントは、RAが16進数で「00000000」であり、サイズが「256MB」であり、使用が許可されたノードの番号は「0」及び「2」である。また、識別番号が「0」であるセグメントは、ホームノードにおいてプロセスIDが「123」、「456」等のプロセスで使用されており、メモリアクセスキーは16進数で「0123」である。
また、ノード番号が「2」であるリモートノードの管理テーブル70では、識別番号が「0」であるセグメントは、RAが16進数で「00000000」であり、サイズが「256MB」である。また、識別番号が「0」であるセグメントは、自ノードが物理メモリを有する共有メモリ43ではないので、使用許可ノード番号は使用されない。また、識別番号が「0」であるセグメントは、自ノードにおいてプロセスIDが「213」、「546」等のプロセスで使用されており、メモリアクセスキーは16進数で「0123」である。また、識別番号が「2」であるセグメントは、使用が許可されていないので、使用しているアプリケーションのプロセスIDはない。
図3に戻って、ノード・プロセス管理部71は、共有メモリ43のセグメント毎に、どのノード1で使用され、どのプロセスで使用されているかを管理する。具体的には、ホームノードのノード・プロセス管理部71は、リモートノードに共有メモリ43の使用許可を与える際に、その共有メモリセグメントを使用するリモートノードのノード番号を管理テーブル70に記録する。共有メモリ43なので、その共有メモリ43を使用するリモートノードは複数存在する可能性があり、ノード・プロセス管理部71は、共有メモリ43の使用許可を与える度にノード番号を全て記録する。
また、各ノード1のノード・プロセス管理部71は、共有メモリ43をアプリケーションに割り当てる際に、その共有メモリ43を使用するアプリケーションのプロセスIDを管理テーブル70に記録する。共有メモリ43なので、その共有メモリ43を使用するアプリケーションは複数存在する可能性があり、ノード・プロセス管理部71は、共有メモリ43をアプリケーションに割り当てる度にプロセスIDを全て記録する。なお、以下では、アプリケーションは「アプリ」と表される場合もある。
また、ホームノードのノード・プロセス管理部71は、リモートノードから共有メモリ43の使用終了の通知があった場合や、リモートノードが停止した場合は、該当リモートノードのノード番号の記録を管理テーブル70から削除する。また、各ノード1のノード・プロセス管理部71は、アプリから共有メモリ43の使用終了の通知があった場合や、アプリが終了した場合は、該当アプリのプロセスIDの記録を管理テーブル70から削除する。
許可設定部72は、リモートノードに共有メモリ43の各セグメントの使用を許可する際に、許可したリモートノードに関して許可設定レジスタ2aの設定を許可に変更する。許可設定レジスタ2aが各CPUチップ11についてアクセス可否を記憶する場合には、許可設定部72は、許可したリモートノードに含まれるCPUチップ11に関して許可設定レジスタ2aの設定を許可に変更する。許可設定レジスタ2aが各コア14についてアクセス可否を記憶する場合には、許可設定部72は、許可したリモートノードに含まれるコア14に関して許可設定レジスタ2aの設定を許可に変更する。許可設定レジスタ2aが各ストランド16についてアクセス可否を記憶する場合には、許可設定部72は、許可したリモートノードに含まれるストランド16に関して許可設定レジスタ2aの設定を許可に変更する。
セグメント情報把握部73は、リモードノードに異常が検出された場合に、異常ノードが使用していたセグメントのうち自ノードが物理メモリを有するセグメントを、管理テーブル70を用いて特定する。また、セグメント情報把握部73は、リモードノードで動作しているアプリに異常が検出された場合に、異常アプリが使用していたセグメントのうち自ノードが物理メモリを有するセグメントを、管理テーブル70を用いて特定する。
キャッシュフラッシュ部74は、後述する許可解除部75が許可設定レジスタ2aを変更する直前に、セグメント単位でキャッシュフラッシュを実行する。すなわち、キャッシュフラッシュ部74は、一次キャッシュ19又は二次キャッシュ18にキャッシュされている最新データを共有メモリ43に書き戻す。キャッシュフラッシュ部74は、異常ノードが検出された場合には、異常ノードが使用していたセグメントに対してキャッシュフラッシュを実行する。キャッシュフラッシュ部74は、異常アプリが検出された場合には、異常アプリが使用していたセグメントに対してキャッシュフラッシュを実行する。キャッシュフラッシュ部74が許可設定レジスタ2aの変更の直前に、セグメント単位でキャッシュフラッシュを実行することで、キャッシュコヒーレンシを保持した状態で異常ノード又は異常アプリからのアクセスを遮断することができる。
許可解除部75は、リモードノードに異常が検出された場合に、セグメント情報把握部73により把握されたセグメントについて、異常ノードからのアクセスを不可にするように許可設定レジスタ2aを変更する。許可設定レジスタ2aが、各CPUチップ11についてアクセス可否を記憶する場合には、許可解除部75は、異常ノードに含まれるCPUチップ11からのアクセスを不可にするように許可設定レジスタ2aを変更する。許可設定レジスタ2aが、各コア14についてアクセス可否を記憶する場合には、許可解除部75は、異常ノードに含まれるコア14からのアクセスを不可にするように許可設定レジスタ2aを変更する。許可設定レジスタ2aが、各ストラント16についてアクセス可否を記憶する場合には、許可解除部75は、異常ノードに含まれるストランド16からのアクセスを不可にするように許可設定レジスタ2aを変更する。
許可解除部75は、リモードノードで動作しているアプリに異常が検出された場合に、セグメント情報把握部73により把握されたセグメントについて、異常アプリが動作しているノードからのアクセスを不可にするように許可設定レジスタ2aを変更する。許可設定レジスタ2aが、各CPUチップ11についてアクセス可否を記憶する場合には、許可解除部75は、異常アプリが動作しているノードに含まれるCPUチップ11からのアクセスを不可にするように許可設定レジスタ2aを変更する。許可設定レジスタ2aが、各コア14についてアクセス可否を記憶する場合には、許可解除部75は、異常アプリが動作しているノードに含まれるコア14からのアクセスを不可にするように許可設定レジスタ2aを変更する。許可設定レジスタ2aが、各ストラント16についてアクセス可否を記憶する場合には、許可解除部75は、異常アプリが動作しているノードに含まれるストランド16からのアクセスを不可にするように許可設定レジスタ2aを変更する。
ログ出力部76は、許可設定レジスタ2aがリードアクセス及びライトアクセスそれぞれについて許可するか否かを示す情報を記憶する場合、ライトアクセスが許可されなかった共有メモリセグメントからデータを読み込んでディスク装置44にログ出力する。異常ノードからのライトアクセスが許可されず異常終了する際に、ログ出力が行われる。
次に、許可設定レジスタ2aを用いて共有メモリ43へのアクセスを制御するアクセス許可レジスタ方式について図5〜図13Bを用いて説明する。図5は、アクセス許可レジスタ方式を説明するための図である。図5は、ノード#2の共有メモリ43に含まれるセグメント82をノード#1がアクセスする場合を示す。なお、図5では、コア14はストランド16を1つ有し、アクセストークンレジスタ28はコア14に対応付けられる。図5に示すように、ノード#2のOS60は、セグメント82に対応させてメモリトークンレジスタ27に設定したトークンを管理テーブル70にセグメント番号に対応させて登録するとともに、ノード#2で動作するアプリケーション80に渡す。
ノード#2で動作するアプリケーション80は、OS60から渡されたトークンをアクセストークン81としてアドレスリージョン(アドレス及びサイズ)の情報とともに、ノード#1で動作してセグメント82をアクセスするアプリケーション80に送信する。ノード#1で動作するアプリケーション80は、受け取ったアクセストークン81をノード#1で動作するOS60に渡す。そして、ノード#1で動作するOS60は、アクセストークン81をアクセストークンレジスタ28に格納する。
そして、ノード#1のコア14は、セグメント82をアクセスする場合にアクセストークン81を含む情報をノード#2に送信する。そして、ノード#2のチェック部29が、ノード#1からセグメント82へのアクセスに対応する許可設定レジスタ2aの設定がアクセス可であるか否かを判定し、アクセス可である場合は、さらに、セグメント82に対応するメモリトークンとアクセストークン81を比較し、両者が一致するか否かを判定する。そして、ノード#2のチェック部29は、両者が一致する場合にセグメント82へのアクセスを許可する。一方、ノード#1からセグメント82へのアクセスに対応する許可設定レジスタ2aの設定がアクセス不可である場合、又は、セグメント82に対応するメモリトークンとアクセストークンが一致しない場合には、ノード#2のチェック部29がアクセス拒否と判定し、セグメント82へのアクセスは許可されない。
図6Aは、ノード毎のアクセス許可を説明するための第1の図であり、図6Bは、ノード毎のアクセス許可を説明するための第2の図である。図6Aは許可設定レジスタ2aが全ノード1からのアクセス可を示す情報を記憶する場合を示し、図6Bは許可設定レジスタ2aが一部のノード1からのアクセス不可を示す情報を記憶する場合を示す。図6A及び図6Bでは、ノード#0がホームノードであり、ノード#1〜ノード#3がそれぞれリモートノード#A〜リモートノード#Cである。また、図6A及び図6Bは、各ノード1は1つのCPUチップ11を有し、各CPUチップ11は1つのコア14を有する場合を示す。また、セグメント#0〜セグメント#Nは共有メモリ43のセグメントを表し、トークン#A0〜トークン#ANはセグメント#0〜セグメント#Nにそれぞれ対応付けられるトークンを表す。
図6Aに示すように、ホームノードの許可設定レジスタ2aがセグメント#0について、全てのノード1に対してアクセス可を示す情報を記憶する。そして、3つのリモートノードのアクセストークンレジスタ28には、トークン#A0がセグメント#0に対応付けられて記憶される。各リモートノードは、アクセストークンレジスタ28に記憶されたアクセストークンを用いてセグメント#0へのアクセスが可能である。
リモートノード#Aに異常が発生すると、図6Bに示すように、ホームノードにおいて許可設定レジスタ2aのセグメント#0に対応する情報が、リモートノード#Aすなわちノード#1からのアクセスを不可とするように変更される。したがって、リモートノード#B及びリモートノード#Cは、セグメント#0へ継続してアクセス可能であるが、リモートノード#Aからセグメント#0へのアクセスは遮断される。
図7は、ノード毎の許可設定レジスタ2aを示す図である。図7では、許可設定レジスタ2aは、64ビットのnode_enable_listで表され、64個までのノード1についてアクセス可否の情報を記憶できる。node_enable_listは共有メモリセグメントに対応付けられる。
node_enable_list[n]=0の時、ホームノードは、対応する共有メモリセグメントに対するノード#nからのアクセスを禁止する。ここで、0≦n≦63である。アクセスが禁止されたノード#nが対応する共有メモリセグメントにアクセスした場合、ノード#nでアクセス例外のトラップが発生する。node_enable_list[n]=1の時、ノード#nからのアクセスは本レジスタと対応するセグメントのトークンの設定に従ってアクセス可否の検査が行われる。
図8Aは、CPUチップ毎のアクセス許可を説明するための第1の図であり、図8Bは、CPUチップ毎のアクセス可否を説明するための第2の図である。図8Aは許可設定レジスタ2aが全CPUチップ11からのアクセス可を示す情報を記憶する場合を示し、図8Bは許可設定レジスタ2aが一部のCPUチップ11からのアクセス不可を示す情報を記憶する場合を示す。なお、図8A及び図8Bでは、CPUチップ毎に論理ドメイン91を作成することが可能である。
図8Aに示すように、ホームノードの許可設定レジスタ2aがセグメント#0について、全てのCPUチップ11に対してアクセス可を示す情報を記憶する。そして、3つのリモートノードのアクセストークンレジスタ28には、トークン#A0がセグメント#0に対応付けられて記憶される。各リモートCPUチップは、アクセストークンレジスタ28に記憶されたアクセストークンを用いてセグメント#0へのアクセスが可能である。
リモートノード#Aに異常が発生すると、図8Bに示すように、ホームノードにおいて許可設定レジスタ2aのセグメント#0に対応する情報が、リモートノード#Aに含まれるCPUチップ#2及びCPUチップ#3からのアクセスを不可とするように変更される。したがって、CPUチップ#4〜CPUチップ#7は、セグメント#0へ継続してアクセス可能であるが、CPUチップ#2及びCPUチップ#3からセグメント#0へのアクセスは遮断される。
図9は、CPUチップ毎の許可設定レジスタ2aを示す図である。図9では、許可設定レジスタ2aは、64ビットのcpu_enable_listで表され、64個までのCPUチップ11についてアクセス可否の情報を記憶できる。cpu_enable_listは共有メモリセグメントに対応付けられる。
図10Aは、ストランド毎のアクセス許可を説明するための第1の図であり、図10Bは、ストランド毎のアクセス可否を説明するための第2の図である。図10Aは許可設定レジスタ2aが全ストランド16からのアクセス可を示す情報を記憶する場合を示し、図10Bは許可設定レジスタ2aが一部のストランド16からのアクセス不可を示す情報を記憶する場合を示す。なお、図10A及び図10Bでは、ストランド毎に論理ドメイン91を作成することが可能である。
図10Aに示すように、ホームノードの許可設定レジスタ2aがセグメント#0について、全てのストランド16に対してアクセス可を示す情報を記憶する。そして、3つのリモートノードのアクセストークンレジスタ28には、トークン#A0がセグメント#0に対応付けられて記憶される。各リモートストランドは、アクセストークンレジスタ28に記憶されたアクセストークンを用いてセグメント#0へのアクセスが可能である。
リモートノード#Aに異常が発生すると、図10Bに示すように、ホームノードにおいて許可設定レジスタ2aのセグメント#0に対応する情報が、リモートノード#Aに含まれるストランド#2及びストランド#3からのアクセスを不可とするように変更される。したがって、ストランド#4〜ストランド#7は、セグメント#0へ継続してアクセス可能であるが、ストランド#2及びストランド#3からセグメント#0へのアクセスは遮断される。
図11は、ストランド毎の許可設定レジスタ2aを示す図である。図11では、許可設定レジスタ2aは、64×mビットのstrand_enable_list[m]で表され、64×m個までのストランド16についてアクセス可否の情報を記憶できる。strand_enable_list[m]は共有メモリセグメントに対応付けられる。
strand_enable_list[m][n]=0の時、ホームノードは、対応する共有メモリセグメントに対するストランド#(64×m+n)からのアクセスを禁止する。ここで、mは0又は正の整数であり、0≦n≦63である。アクセスが禁止されたストランド#(64×m+n)が対応する共有メモリセグメントにアクセスした場合、ストランド#(64×m+n)でアクセス例外のトラップが発生する。strand_enable_list[m][n]=1の時、ストランド#(64×m+n)からのアクセスは本レジスタと対応するセグメントのトークンの設定に従ってアクセス可否の検査が行われる。
図12Aは、ストランド毎のリード/ライト許可を説明するための第1の図であり、図12Bは、ストランド毎のリード/ライト許可を説明するための第2の図である。図12Aは許可設定レジスタ2aが全ストランド16からのリード可及びライト可を示す情報を記憶する場合を示し、図12Bは許可設定レジスタ2aが一部のストランド16からのライト不可を示す情報を記憶する場合を示す。
図12Aに示すように、ホームノードの許可設定レジスタ2aがセグメント#0について、全てのストランド16に対してリード可及びライト可を示す情報を記憶する。そして、3つのリモートノードのアクセストークンレジスタ28には、トークン#A0がセグメント#0に対応付けられて記憶される。各リモートストランドは、アクセストークンレジスタ28に記憶されたアクセストークンを用いてセグメント#0へのアクセスが可能である。
リモートノード#Aに異常が発生すると、図12Bに示すように、ホームノードにおいて許可設定レジスタ2aのセグメント#0に対応する情報が、リモートノード#Aに含まれるストランド#2及びストランド#3からのライトを不可とするように変更される。したがって、ストランド#4〜ストランド#7は、セグメント#0へ継続してリード及びライトが可能であり、ストランド#2及びストランド#3からセグメント#0へ継続してリードが可能である。一方、ストランド#2及びストランド#3からセグメント#0へのライトは遮断される。
図13Aは、ストランド毎のリード許可設定レジスタを示す図であり、図13Bは、ストランド毎のライト許可設定レジスタを示す図である。ここで、リード許可設定レジスタは、許可設定レジスタ2aのリード可否を示す情報を記憶するレジスタであり、ライト許可設定レジスタは、許可設定レジスタ2aのライト可否を示す情報を記憶するレジスタである。図13Aでは、リード許可設定レジスタは、64×mビットのstrand_read_enable_list[m]で表される。図13Bでは、ライト許可設定レジスタは、64×mビットのstrand_write_enable_list[m]で表される。
図13Aでは、strand_read_enable_list[m][n]=0の時、ホームノードは、対応する共有メモリセグメントに対するストランド#(64×m+n)からのリードを禁止する。図13Bでは、strand_write_enable_list[m][n]=0の時、ホームノードは、対応する共有メモリセグメントに対するストランド#(64×m+n)からのライトを禁止する。リード又はライトが禁止されたストランド#(64×m+n)が対応する共有メモリセグメントにそれぞれリード又はライトした場合、ストランド#(64×m+n)でアクセス例外のトラップが発生する。strand_read_enable_list[m][n]=1の時、ストランド#(64×m+n)からのリードは本レジスタと対応するセグメントのトークンの設定に従ってリード可否の検査が行われる。strand_write_enable_list[m][n]=1の時、ストランド#(64×m+n)からのライトは本レジスタと対応するセグメントのトークンの設定に従ってライト可否の検査が行われる。
次に、共有メモリ43を使用する処理のフローについて説明する。図14Aは、共有メモリ43を使用する処理のフローを示す第1のフローチャート(ノード毎のアクセス可否が設定可能な場合)である。図14Bは、共有メモリ43を使用する処理のフローを示す第2のフローチャート(ノード毎のアクセス可否が設定可能な場合)である。図15Aは、共有メモリ43を使用する処理のフローを示す第1のフローチャート(ノード毎のリード・ライト許可が設定可能な場合)である。図15Bは、共有メモリ43を使用する処理のフローを示す第2のフローチャート(ノード毎のリード・ライト許可が設定可能な場合)である。図14A及び図14Bは、許可設定レジスタ2aがノード毎にアクセス可否の情報を記憶する場合を示し、図15A及び図15Bは、許可設定レジスタ2aがノード毎にリード及びライトのそれぞれについて可否の情報を記憶する場合を示す。
図14Aに示すように、ホームノードにおいて、OS60が共有メモリ43を使用するアプリケーションであるアプリHを起動する(ステップS1)。そして、アプリHは、共有メモリ43のセグメントAを獲得する(ステップS2)。そして、ホームノードのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するアプリHのプロセスIDを追加する(ステップS3)。
その後、ホームノードは、リモートノードNに共有メモリ43のセグメントAの使用を許可し、セグメントAの使用許可をリモートノードNに通知する(ステップS4)。その際、ホームノードのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するリモートノードNのノード番号を追加する。
一方、リモートノードNにおいては、OS60が共有メモリ43を使用するアプリRを起動する(ステップS23)。そして、リモートノードNの共有メモリ管理部61は、セグメントAの使用許可をホームノードから通知されると、アプリRにセグメントAを割り当てる(ステップS24)。また、リモートノードNのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するアプリRのプロセスIDを追加する(ステップS25)。
そして、ホームノードは、リモードノードNからのアクセスを可に設定する(ステップS5)。すなわち、許可設定部72は、セグメントAへのリモードノードNからのアクセスに関して、ノード毎の許可設定レジスタ2aを0→1に更新する。そして、ホームノードは、セグメントAのメモリトークンを設定し(ステップS6)、リモートノードNにセグメントAのメモリトークンを通知する(ステップS7)。そして、ホームノードは、セグメントAのメモリトークンをOS60に通知し(ステップS8)、OS60は管理テーブル70にセグメントAのメモリトークンを追加する(ステップS9)。
一方、リモートノードNのアプリRは、セグメントAのメモリトークンをホームノードから通知されると、セグメントAのメモリトークンをOS60に通知する(ステップS26)。そして、リモートノードNの共有メモリ管理部61は、管理テーブル70にセグメントAのアクセストークンを追加し(ステップS27)、アクセストークンレジスタ28にアクセストークンを設定する(ステップS28)。そして、図14Bに示すように、リモートノードNのアプリRは、セグメントAへのアクセスを開始する(ステップS29)。
その後、ホームノードがリモートノードNの異常を検出した場合(ステップS10、Yes)には、キャッシュフラッシュ部74が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する(ステップS11)。そして、許可解除部75が、異常ノードからのアクセスを不可に設定する(ステップS12)。すなわち、許可解除部75は、異常ノードからセグメントAへのアクセスについて、ノード毎の許可設定レジスタ2aを1→0に更新する。
一方、リモートノードNの異常を検出しない場合(ステップS10、No)には、ホームノードがセグメントAへのアクセスを受信すると、ホームノードのチェック部29が、リモートノードNからセグメントAへのアクセスに対応する許可設定レジスタ2aの設定がアクセス可(1)であり、かつ、セグメントAのメモリトークンとアクセストークンが一致するか否かを判定する(ステップS13)。そして、許可設定レジスタ2aの設定がアクセス可(1)であり、かつ、メモリトークンとアクセストークンが一致した場合には、チェック部29は、アクセス可と判定する(ステップS14)。一方、許可設定レジスタ2aの設定がアクセス不可である場合、又は、セグメントAのメモリトークンとアクセストークンが一致しない場合には、チェック部29は、アクセス拒否と判定し(ステップS15)、アクセス拒否をリモートノードNに通知する。アクセス拒否を通知されると、リモートノードNは、アクセス拒否のトラップを生成し(ステップS30)、ステップS32へ進む。
リモートノードNは、セグメントAへのアクセス開始後、異常が発生しない場合(ステップS31、No)には、アクセス拒否のトラップが発生したか否かを判定する(ステップS32)。その結果、リモートノードNは、発生しない場合には、アクセス成功と判定し(ステップS33)、発生した場合には、アクセス失敗と判定する(ステップS34)。その後、リモートノードNは、アクセストークンを解除し(ステップS35)、アプリRがセグメントAの使用終了を通知する(ステップS36)。
ホームノードは、リモートノードNからセグメントAの使用終了の通知があるか否かを判定し(ステップS16)、通知がない場合には、ステップS10へ戻る。一方、通知がある場合には、キャッシュフラッシュ部74が、セグメントAに対してキャッシュフラッシュを実行する(ステップS17)。そして、許可解除部75が、使用が終了したリモートノードNからのアクセスを不可に設定する(ステップS18)。すなわち、許可解除部75は、セグメントAについて、ノード毎の許可設定レジスタ2aを1→0に更新する。
そして、ホームノードはセグメントAのメモリトークンを解除し(ステップS19)、ノード・プロセス管理部71がリモートノードNのセグメントA使用許可を解除する(ステップS20)。すなわち、ノード・プロセス管理部71は、管理テーブル70からリモートノードNのノード番号を削除する。
そして、ノード・プロセス管理部71は、管理テーブル70からセグメントAのメモリトークンとアプリHのプロセスIDを削除する(ステップS21)。そして、ホームノードは、共有メモリ43を使用するアプリHを終了する(ステップS22)。
一方、リモートノードNのノード・プロセス管理部71は、管理テーブル70からセグメントAのアクセストークンとアプリRのプロセスIDを削除する(ステップS37)。そして、リモートノードNは、共有メモリ43を使用するアプリRを正常終了する(ステップS38)。
また、異常が発生した場合(ステップS31、Yes)には、リモートノードNは、アクセス失敗と判定し(ステップS39)、ノード・プロセス管理部71が、管理テーブル70からセグメントAのアクセストークンとアプリRのプロセスIDを削除する(ステップS40)。そして、リモートノードNは、共有メモリ43を使用するアプリRを異常終了する(ステップS41)。
このように、リモートノードNに異常が発生すると、ホームノードの許可解除部75は、リモートノードNが使用していたセグメントAについて、ノード毎の許可設定レジスタ2aのリモートノードNに対応する箇所を1→0に更新する。したがって、ホームノードは、異常が発生したリモートノードNからのセグメントAへのアクセスを防ぐことができる。
また、許可設定レジスタ2aがノード毎にリード及びライトのそれぞれについて可否の情報を記憶する場合には、図15Aに示すように、ホームノードにおいて、OS60が共有メモリ43を使用するアプリケーションであるアプリHを起動する(ステップS51)。そして、アプリHは、共有メモリ43のセグメントAを獲得する(ステップS52)。そして、ホームノードのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するアプリHのプロセスIDを追加する(ステップS53)。
その後、ホームノードは、リモートノードNに共有メモリ43のセグメントAの使用を許可し、セグメントAの使用許可をリモートノードNに通知する(ステップS54)。その際、ホームノードのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するリモートノードNのノード番号を追加する。
一方、リモートノードNにおいては、OS60が共有メモリ43を使用するアプリRを起動する(ステップS73)。そして、リモートノードNの共有メモリ管理部61は、セグメントAの使用許可をホームノードから通知されると、アプリRにセグメントAを割り当てる(ステップS74)。また、リモートノードNのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するアプリRのプロセスIDを追加する(ステップS75)。
そして、ホームノードは、リモードノードNからのリードアクセス及びライトアクセスを可に設定する(ステップS55)。すなわち、許可設定部72は、セグメントAへのリモードノードNからのアクセスに関して、ノード毎のリード許可設定レジスタ及びライト許可設定レジスタを0→1に更新する。そして、ホームノードは、セグメントAのメモリトークンを設定し(ステップS56)、リモートノードNにセグメントAのメモリトークンを通知する(ステップS57)。そして、ホームノードは、セグメントAのメモリトークンをOS60に通知し(ステップS58)、OS60は管理テーブル70にセグメントAのメモリトークンを追加する(ステップS59)。
一方、リモートノードNのアプリRは、セグメントAのメモリトークンをホームノードから通知されると、セグメントAのメモリトークンをOS60に通知する(ステップS76)。そして、リモートノードNの共有メモリ管理部61は、管理テーブル70にセグメントAのアクセストークンを追加し(ステップS77)、アクセストークンレジスタ28にアクセストークンを設定する(ステップS78)。そして、図15Bに示すように、リモートノードNのアプリRは、セグメントAへのアクセスを開始する(ステップS79)。
その後、ホームノードがリモートノードNの異常を検出した場合(ステップS60、Yes)には、キャッシュフラッシュ部74が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する(ステップS61)。そして、許可解除部75が、異常ノードからのライトを不可に設定する(ステップS62)。すなわち、許可解除部75は、異常ノードからセグメントAへのアクセスについて、ノード毎のライト許可設定レジスタを1→0に更新する。
一方、リモートノードNの異常を検出しない場合(ステップS60、No)には、ホームノードがセグメントAへのアクセスを受信すると、ホームノードのチェック部29が、リモートノードNからセグメントAへのリード/ライトアクセスに対応するリード/ライト許可設定レジスタの設定がリード/ライト可(1)であり、かつ、セグメントAのメモリトークンとアクセストークンが一致するか否かを判定する(ステップS63)。そして、リード/ライト許可設定レジスタの設定がリード/ライト可(1)であり、かつ、メモリトークンとアクセストークンが一致した場合には、チェック部29は、アクセス可と判定する(ステップS64)。一方、リード/ライト許可設定レジスタの設定がリード/ライト不可(0)である場合、又は、セグメントAのメモリトークンとアクセストークンが一致しない場合には、チェック部29は、アクセス拒否と判定し(ステップS65)、アクセス拒否をリモートノードNに通知する。アクセス拒否を通知されると、リモートノードNは、トークン不一致のトラップを生成し(ステップS80)、ステップS82へ進む。
リモートノードNは、セグメントAへのアクセス開始後、異常が発生しない場合(ステップS81、No)には、トークン不一致のトラップが発生したか否かを判定する(ステップS82)。その結果、リモートノードNは、発生しない場合には、アクセス成功と判定し(ステップS83)、発生した場合には、アクセス失敗と判定する(ステップS84)。その後、リモートノードNは、アクセストークンを解除し(ステップS85)、アプリRがセグメントAの使用終了を通知する(ステップS86)。
ホームノードは、リモートノードNからセグメントAの使用終了の通知があるか否かを判定し(ステップS66)、通知がない場合には、ステップS60へ戻る。一方、通知がある場合には、キャッシュフラッシュ部74が、セグメントAに対してキャッシュフラッシュを実行する(ステップS67)。そして、許可解除部75が、使用が終了したリモートノードNからのアクセスを不可に設定する(ステップS68)。すなわち、許可解除部75は、セグメントAについて、ノード毎のリード許可設定レジスタ及びライト許可設定レジスタを1→0に更新する。
そして、ホームノードはセグメントAのメモリトークンを解除し(ステップS69)、ノード・プロセス管理部71がリモートノードNのセグメントA使用許可を解除する(ステップS70)。すなわち、ノード・プロセス管理部71は、管理テーブル70からリモートノードNのノード番号を削除する。
そして、ノード・プロセス管理部71は、管理テーブル70からセグメントAのメモリトークンとアプリHのプロセスIDを削除する(ステップS71)。そして、ホームノードは、共有メモリ43を使用するアプリHを終了する(ステップS72)。
一方、リモートノードNのノード・プロセス管理部71は、管理テーブル70からセグメントAのアクセストークンとアプリRのプロセスIDを削除する(ステップS87)。そして、リモートノードNは、共有メモリ43を使用するアプリRを正常終了する(ステップS88)。
また、異常が発生した場合(ステップS81、Yes)には、リモートノードNは、ライト失敗と判定し(ステップS89)、セグメントAに対するリードを実行し、ログとして出力する(ステップS90)。そして、ノード・プロセス管理部71が、管理テーブル70からセグメントAのアクセストークンとアプリRのプロセスIDを削除する(ステップS91)。そして、リモートノードNは、共有メモリ43を使用するアプリRを異常終了する(ステップS92)。
このように、リモートノードNに異常が発生すると、ホームノードの許可解除部75は、リモートノードNが使用していたセグメントAについて、ノード毎のライト許可設定レジスタのリモートノードNに対応する箇所を1→0に更新する。したがって、ホームノードは、異常が発生したリモートノードNからのセグメントAへのアクセスを防ぐことができる。
次に、共有メモリ43を使用するノード1をセグメント単位で把握する処理のフローについて説明する。図16Aは、共有メモリ43を使用するノード1をセグメント単位で把握する処理のフローを示すフローチャートである。
図16Aに示すように、ホームノードのノード・プロセス管理部71は、リモートノードへの共有メモリ43のセグメント使用の許可時であるか否かを判定する(ステップS101)。その結果、リモートノードへの共有メモリ43のセグメント使用の許可時である場合には、ホームノードのノード・プロセス管理部71は、管理テーブル70にセグメントを使用するノード1のノード番号を追加する(ステップS102)。
一方、リモートノードへの共有メモリ43のセグメント使用の許可時でない場合、すなわち、使用終了時は、ホームノードのノード・プロセス管理部71は、管理テーブル70からセグメントの使用を終了したノード1のノード番号を削除する(ステップS103)。
このように、ホームノードのノード・プロセス管理部71は、セグメントを使用するノード1のノード番号を、管理テーブル70を用いて管理することによって、セグメントを使用するリモートノードを把握することができる。
次に、共有メモリ43を使用するプロセスをセグメント単位で把握する処理のフローについて説明する。図16Bは、共有メモリ43を使用するプロセスをセグメント単位で把握する処理のフローを示すフローチャートである。
図16Bに示すように、リモートノードのノード・プロセス管理部71は、セグメント割り当て時であるか否かを判定する(ステップS111)。その結果、セグメント割り当て時である場合には、リモートノードのノード・プロセス管理部71は、管理テーブル70にセグメントを使用するアプリケーションのPIDを追加する(ステップS112)。
一方、セグメント割り当て時でない場合、すなわち、解放時は、リモートノードのノード・プロセス管理部71は、管理テーブル70からセグメントを解放するアプリケーションのPIDを削除する(ステップS113)。
このように、リモートノードのノード・プロセス管理部71は、セグメントを使用するアプリケーションのPIDを、管理テーブル70を用いて管理することによって、セグメントを使用するアプリケーションを把握することができる。
次に、ノード異常発生時の処理のフローについて説明する。図17は、ノード異常発生時の処理のフローを示すフローチャート(ノード毎のアクセス可否が設定可能な場合)であり、図18は、ノード異常発生時の処理のフローを示すフローチャート(ストランド毎のリード・ライト許可が設定可能な場合)である。図17は、許可設定レジスタ2aがノード毎にアクセス可否の情報を記憶する場合を示し、図18は、許可設定レジスタ2aがストランド毎にリード及びライトのそれぞれについて可否の情報を記憶する場合を示す。
図17に示すように、ホームノードの許可設定部72は、リモートノードからのアクセスを可に設定する(ステップS121)。すなわち、許可設定部72は、リモートノードが使用する共有メモリセグメントに関して、ノード毎の許可設定レジスタ2aを0→1に更新する。そして、ホームノードは、リモートノードが使用する共有メモリセグメントに関して、メモリトークンを設定し(ステップS122)、リモートノードにトークンを通知する(ステップS123)。
そして、トークンを通知されたリモートノードは、アクセストークンを設定し(ステップS124及びステップS125)、共有メモリセグメントへのアクセスを開始する(ステップS126及びステップS127)。そして、1つのリモートノードに異常が発生する(ステップS128)と、ホームノードは、リモートノードの異常を検出する(ステップS129)。
そして、キャッシュフラッシュ部74が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する(ステップS130)。そして、許可解除部75が、異常ノードからのアクセスを不可に設定する(ステップS131)。すなわち、許可解除部75は、異常ノードが使用していた共有メモリセグメントへの異常ノードからのアクセスについて、ノード毎のアクセス許可設定レジスタ2aを1→0に更新する。
その後、異常が発生したリモートノードは、共有メモリセグメントにアクセスすると、アクセスに失敗し(ステップS132)、異常終了する(ステップS133)。また、正常なリモートノードは、共有メモリセグメントにアクセスすると、アクセスに成功する(ステップS134)。その後、正常なリモートノードは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し(ステップS135)、正常終了する(ステップS136)。
このように、許可解除部75が、異常ノードが使用していた共有メモリセグメントへの異常ノードからのアクセスについて、ノード毎の許可設定レジスタ2aを1→0に更新する。したがって、ホームノードは、異常ノードからのアクセスのみを瞬時に遮断することができる。
また、許可設定レジスタ2aがストランド毎にリード及びライトのそれぞれについて可否の情報を記憶する場合には、図18に示すように、許可設定部72は、リモートノードのストランド16からのリード及びライトを可に設定する(ステップS141)。すなわち、ホームノードの許可設定部72は、リモートノードのストランド16が使用する共有メモリセグメントへのアクセスに関して、ストランド毎のリード許可設定レジスタ及びライト許可設定レジスタを0→1に更新する。そして、ホームノードは、リモートノードのストランド16が使用する共有メモリセグメントに関して、メモリトークンを設定し(ステップS142)、リモートノードのストランド16にトークンを通知する(ステップS143)。
そして、トークンを通知されたリモートノードのストランド16は、アクセストークンを設定し(ステップS144及びステップS145)、共有メモリセグメントへのアクセスを開始する(ステップS146及びステップS147)。そして、1つのリモートノードに異常が発生する(ステップS148)と、ホームノードは、リモートノードの異常を検出する(ステップS149)。
そして、キャッシュフラッシュ部74が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する(ステップS150)。そして、許可解除部75が、異常ノードのストランド16からのライトを不可に設定する(ステップS151)。すなわち、許可解除部75は、異常ノードが使用していた共有メモリセグメントについて、異常ノードのストランド16のライト許可設定レジスタを1→0に更新する。
その後、異常が発生したリモートノードは、共有メモリセグメントにライトすると、ライトに失敗する(ステップS152)。そこで、異常が発生したリモートノードは、ライトが失敗した共有メモリセグメントをリードすると、リードは成功し、リード結果をログ出力する(ステップS153)。そして、異常が発生したリモートノードは、異常終了する(ステップS154)。また、正常なリモートノードは、共有メモリセグメントにアクセスすると、アクセスに成功する(ステップS155)。その後、正常なリモートノードは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し(ステップS156)、正常終了する(ステップS157)。
このように、許可解除部75が、異常ノードが使用していた共有メモリセグメントについて、異常ノードに含まれるストランド16のライト許可設定レジスタを1→0に更新するので、ホームノードは、異常ノードからのアクセスのみを瞬時に遮断することができる。
上述してきたように、実施例1では、許可設定レジスタ2aが、共有メモリ43のセグメント毎に、各ノード1について、アクセス可否を示す情報を記憶する。そして、ノード1に異常が発生すると、許可解除部75が、異常ノードが使用していたセグメントについて、許可設定レジスタ2aの異常ノードに対応する情報をアクセス不可に設定する。そして、リモートノードから共有メモリセグメントへのアクセス要求があると、チェック部29が、許可設定レジスタ2a、アクセス要求に含まれるアクセストークン及びメモリトークンレジスタ27に基づいてハードウェアによりアクセスの可否を判定する。したがって、ホームノードは、異常ノードが使用していたセグメントについて、異常ノードからのアクセスを瞬時に遮断するとともに、正常ノードからのアクセスを継続許可することができる。
なお、許可設定レジスタ2aは、各ノード1についてアクセス可否を示す情報を記憶する代わりに、各CPUチップ11、各コア14、各ストランド16、各仮想ノード又は各仮想CPUについてアクセス可否を示す情報を記憶してもよい。ここで、仮想ノードとは、1つの論理ドメイン91を構成するノードであり、仮想CPUとは、論理CPUである。また、許可設定レジスタ2aは、アクセス可否を示す情報を記憶する代わりに、リードアクセス及びライトアクセスについてそれぞれ可否を示す情報を記憶してもよい。
CPUチップ毎の許可設定レジスタ2aを使用して、CPUチップ毎にアクセス許可を設定できるようにすると、CPUチップ毎に異なるトークン制御が可能となるため、CPUチップ毎にドメイン分割して仮想ノードを作成できるようになる。同様に、コア毎の許可設定レジスタ2aを使用して、コア毎にアクセス許可を設定できるようにすると、コア毎に異なるトークン制御が可能となるため、コア毎にドメイン分割して仮想ノードを作成できるようになる。CPUチップ単位よりコア単位の方が、仮想ノードの粒度が小さくなる。さらに同様に、ストランド毎の許可設定レジスタ2aを使用して、ストランド毎にアクセス許可を設定できるようにすると、ストランド毎に異なるトークン制御が可能となるため、ストランド毎にドメイン分割して仮想ノードを作成できるようになる。CPUチップ単位やコア単位よりストランド単位の方が、さらに仮想ノードの粒度が小さくなる。
また、実施例1では、ノード1に異常が発生すると、許可解除部75が許可設定レジスタ2aを設定する前に、キャッシュフラッシュ部74が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する。したがって、ホームノードは、キャッシュコヒーレンスを維持した状態で、異常ノードが使用していた共有メモリセグメントへの異常ノードからのアクセスを遮断することができる。
また、ノード1に異常が発生する代わりに、アプリに異常が発生してもよい。アプリに異常が発生した場合には、異常アプリが使用していた共有メモリセグメントについて、許可設定レジスタ2aの異常アプリが動作しているノード1に対応する情報をアクセス不可に設定する。
また、実施例1では、CPUチップ/コア/ストランド毎のリード/ライト許可設定レジスタを使用して、CPUチップ/コア/ストランド毎にリード/ライト許可を設定できる。このため、特定CPUチップ/コア/ストランドからの書き込みのみを不可(読み込みは可能)に設定することができる。したがって、異常ノード/異常アプリケーションからの不当な書き込みによるデータ破壊を防止しつつ、異常ノード/異常アプリケーションで共用メモリのデータを読み込んでディスクにログを書き出すなどのリカバリ処理を実行することができる。
また、実施例1では、管理テーブル70に使用を許可したノード1の番号を登録する場合について説明したが、管理テーブル70に使用を許可したCPUチップ11、コア14又はストランド16を登録してもよい。この場合、CPUチップ11、コア14又はストランド16が情報処理装置として機能する。
また、実施例1では、アプリがセグメントを獲得する毎に使用を許可する場合について説明したが、アプリに一定の範囲の共有メモリ43が割り当てられた際に、割り当てられた共有メモリ43に含まれるセグメントについて使用を許可してもよい。
ところで、上記実施例1では、許可設定レジスタ2aの異常ノードに対応する情報をアクセス不可にすることによって、異常ノードからのアクセスを遮断する場合について説明した。しかしながら、許可設定レジスタ2aを用いることなく、セグメント毎にトークンを複数用いて異常ノードからのアクセスを遮断することもできる。そこで、実施例2では、セグメント毎にトークンを複数用いる複数トークン方式により異常ノードからのアクセスを遮断する情報処理システムについて説明する。
なお、実施例2に係る情報処理システムは、共有メモリ管理部の機能構成及びメモリトークンレジスタの構成が実施例1に係る情報処理システム2と異なるので、主に共有メモリ管理部の機能構成及びメモリトークンレジスタの構成について説明する。
図19は、実施例2に係る情報処理システムのハードウェアの論理構成及びソフトウェアの機能構成を示す図である。なお、ここでは説明の便宜上、図3に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。図19に示すように、実施例2に係る共有メモリ管理部61aは、管理テーブル70と、ノード・プロセス管理部71と、メモリトークン設定部72aと、セグメント情報把握部73と、キャッシュフラッシュ部74と、メモリトークン設定解除部75aとを有する。
メモリトークン設定部72aは、ノード毎又はアプリ毎に異なるトークンをメモリトークンレジスタに設定する。すなわち、実施例2に係るメモリトークンレジスタは、セグメント毎に複数のトークンを記憶する。ホームノードのメモリトークン設定部72aは、リモートノードの共有メモリ管理部61aにノード専用又はアプリ専用のトークンを通知する。そして、各リモートノードの共有メモリ管理部61aは、ノード専用又はアプリ専用のトークンをアクセストークンレジスタ28に設定する。
メモリトークン設定解除部75aは、メモリトークンの設定を解除する。リモートノードの異常が検出された場合、メモリトークン設定解除部75aは、異常ノードが使用していたセグメントのうち自ノードが物理メモリを有するセグメントの異常ノードに対応するトークンの設定のみを解除する。これにより、異常ノードからのアクセスのみを瞬時にハードウェア的に遮断する。また、アプリの異常が検出された場合、メモリトークン設定解除部75aは、異常アプリが使用していたセグメントのうち自ノードが物理メモリを有するセグメンの異常アプリに対応するトークンの設定のみを解除する。これにより、異常アプリからのアクセスのみを瞬時にハードウェア的に遮断する。
図20Aは、複数トークン方式を説明するための第1の図であり、図20Bは、複数トークン方式を説明するための第2の図である。図20Aは、ホームノードのメモリトークンレジスタ27aがセグメント毎に複数のトークンを記憶し、各リモートノードのアクセストークンレジスタ28がノード専用のトークンを記憶する場合を示す。図20Bは、ホームノードのメモリトークンレジスタ27aの一部が削除された場合を示す。
図20Aに示すように、メモリトークンレジスタ27aは、セグメント#0に対応して3つのトークン#A0〜トークン#C0を記憶する。トークン#A0はリモートノード#A専用であり、トークン#B0はリモートノード#B専用であり、トークン#C0はリモートノード#C専用である。同様に、メモリトークンレジスタ27aは、セグメント#1に対応して3つのトークン#A1〜トークン#C1を記憶し、セグメント#Nに対応して3つのトークン#AN〜トークン#CNを記憶する。各リモートノードは、アクセストークンレジスタ28に記憶されたアクセストークンを用いてセグメント#0〜セグメント#Nへのアクセスが可能である。
リモートノード#Aに異常が発生すると、図20Bに示すように、リモートノード#Aにおいて使用されていたセグメント#0〜セグメント#Nに対応するトークン#A0〜トークン#ANがホームノードにおいてメモリトークンレジスタ27aから削除される。したがって、リモートノード#B及びリモートノード#Cは、セグメント#0〜セグメント#Nへ継続してアクセス可能であるが、リモートノード#Aからセグメント#0〜セグメント#Nへのアクセスは遮断される。
次に、共有メモリ43を使用する処理のフローについて説明する。図21Aは、共有メモリ43を使用する処理のフローを示す第1のフローチャートであり、図21Bは、共有メモリ43を使用する処理のフローを示す第2のフローチャートである。図21Aに示すように、ホームノードにおいて、OS60が共有メモリ43を使用するアプリケーションであるアプリHを起動する(ステップS161)。そして、アプリHは、共有メモリ43のセグメントAを獲得する(ステップS162)。そして、ホームノードのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するアプリHのプロセスIDを追加する(ステップS163)。
その後、ホームノードは、リモートノードNに共有メモリ43のセグメントAの使用を許可し、セグメントAの使用許可をリモートノードNに通知する(ステップS164)。その際、ホームノードのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するリモートノードNのノード番号を追加する。
一方、リモートノードNにおいては、OS60が共有メモリ43を使用するアプリRを起動する(ステップS181)。そして、リモートノードNの共有メモリ管理部61は、セグメントAの使用許可をホームノードから通知されると、アプリRにセグメントAを割り当てる(ステップS182)。また、リモートノードNのノード・プロセス管理部71は、管理テーブル70にセグメントAを使用するアプリRのプロセスIDを追加する(ステップS183)。
そして、ホームノードは、ノード毎に異なるメモリトークンをセグメントAのメモリトークンレジスタ27aに設定し(ステップS165)、各リモートノードにセグメントAの異なるメモリトークンを通知する(ステップS166)。そして、ホームノードは、セグメントAのメモリトークンをOS60に通知し(ステップS167)、OS60は管理テーブル70にセグメントAのメモリトークンを追加する(ステップS168)。
一方、リモートノードNのアプリRは、セグメントAのメモリトークンをホームノードから通知されると、セグメントAのメモリトークンをOS60に通知する(ステップS184)。そして、リモートノードNの共有メモリ管理部61は、管理テーブル70にセグメントAのアクセストークンを追加し(ステップS185)、アクセストークンレジスタ28にアクセストークンを設定する(ステップS186)。そして、図21Bに示すように、リモートノードNのアプリRは、セグメントAへのアクセスを開始する(ステップS187)。
その後、ホームノードがリモートノードNの異常を検出した場合(ステップS169、Yes)には、キャッシュフラッシュ部74が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する(ステップS170)。そして、メモリトークン設定解除部75aが、異常ノードが使用していた共有メモリセグメントに関して、メモリトークンレジスタ27aから異常ノードに対応するメモリトークンの設定のみ解除する(ステップS171)。
一方、リモートノードNの異常を検出しない場合(ステップS169、No)には、ホームノードがセグメントAへのアクセスを受信すると、ホームノードのチェック部29がセグメントAのメモリトークンとアクセストークンが一致するか否かを判定し(ステップS172)、一致した場合にはアクセス可と判定する(ステップS173)。一方、一致しない場合には、チェック部29は、アクセス拒否と判定し(ステップS174)、アクセス拒否をリモートノードNに通知する。アクセス拒否を通知されると、リモートノードNは、トークン不一致のトラップを生成し(ステップS188)、ステップS190へ進む。
リモートノードNは、セグメントAへのアクセス開始後、異常が発生しない場合(ステップS189、No)には、トークン不一致のトラップが発生したか否かを判定する(ステップS190)。その結果、リモートノードNは、発生しない場合には、アクセス成功と判定し(ステップS191)、発生した場合には、アクセス失敗と判定する(ステップS192)。その後、リモートノードNは、アクセストークンを解除し(ステップS193)、アプリRがセグメントAの使用終了を通知する(ステップS194)。
ホームノードは、リモートノードNからセグメントAの使用終了の通知があるか否かを判定し(ステップS175)、通知がない場合には、ステップS169へ戻る。一方、通知がある場合には、キャッシュフラッシュ部74が、セグメントAに対してキャッシュフラッシュを実行する(ステップS176)。
そして、ホームノードはセグメントAのメモリトークンを解除し(ステップS177)、ノード・プロセス管理部71がリモートノードNのセグメントA使用許可を解除する(ステップS178)。すなわち、ノード・プロセス管理部71は、管理テーブル70からリモートノードNのノード番号を削除する。
そして、ノード・プロセス管理部71は、管理テーブル70からセグメントAのメモリトークンとアプリHのプロセスIDを削除する(ステップS179)。そして、ホームノードは、共有メモリ43を使用するアプリHを終了する(ステップS180)。
一方、リモートノードNのノード・プロセス管理部71は、管理テーブル70からセグメントAのアクセストークンとアプリRのプロセスIDを削除する(ステップS195)。そして、リモートノードNは、共有メモリ43を使用するアプリRを正常終了する(ステップS196)。
また、異常が発生した場合(ステップS189、Yes)には、リモートノードNは、アクセス失敗と判定し(ステップS197)、ノード・プロセス管理部71が、管理テーブル70からセグメントAのアクセストークンとアプリRのプロセスIDを削除する(ステップS198)。そして、リモートノードNは、共有メモリ43を使用するアプリRを異常終了する(ステップS199)。
このように、リモートノードNに異常が発生すると、メモリトークン設定解除部75aが、メモリトークンレジスタ27aから異常ノードに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常が発生したリモートノードNからのセグメントAへのアクセスを防ぐことができる。
次に、ノード異常発生時の処理のフローについて説明する。図22は、ノード異常発生時の処理のフローを示すフローチャートである。図22に示すように、ホームノードのメモリトークン設定部72aは、リモートノードが使用する共有メモリセグメントに関して、ノード毎に異なるメモリトークンをメモリトークンレジスタ27aに設定する(ステップS201)。そして、メモリトークン設定部72aは、リモートノードにトークンを通知する(ステップS202)。
そして、トークンを通知されたリモートノードは、アクセストークンを設定し(ステップS203及びステップS204)、共有メモリセグメントへのアクセスを開始する(ステップS205及びステップS206)。そして、1つのリモートノードに異常が発生する(ステップS207)と、ホームノードは、リモートノードの異常を検出する(ステップS208)。
そして、キャッシュフラッシュ部74が、異常ノードが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する(ステップS209)。そして、メモリトークン設定解除部75aが、異常ノードが使用していた共有メモリセグメントに関して、メモリトークンレジスタ27aから異常ノードに対応するメモリトークンの設定のみ削除する(ステップS210)。
その後、異常が発生したリモートノードは、共有メモリセグメントにアクセスすると、アクセスに失敗し(ステップS211)、異常終了する(ステップS212)。また、正常なリモートノードは、共有メモリセグメントにアクセスすると、アクセスに成功する(ステップS213)。その後、正常なリモートノードは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し(ステップS214)、正常終了する(ステップS215)。
このように、メモリトークン設定解除部75aが、異常ノードが使用していた共有メモリセグメントについて、メモリトークンレジスタ27aから異常ノードに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常ノードからのアクセスのみを瞬時に遮断することができる。
次に、アプリ異常発生時の処理のフローについて説明する。図23は、アプリ異常発生時の処理のフローを示すフローチャートである。図23に示すように、ホームノードのメモリトークン設定部72aは、リモートノードで動作するアプリが使用する共有メモリセグメントに関して、アプリ毎に異なるメモリトークンをメモリトークンレジスタ27aに設定する(ステップS221)。そして、メモリトークン設定部72aは、リモートノードのアプリにトークンを通知する(ステップS222)。
そして、トークンを通知されたリモートノードアプリは、アクセストークンを設定し(ステップS223及びステップS224)、共有メモリセグメントへのアクセスを開始する(ステップS225及びステップS226)。そして、1つのリモートノードで動作しているアプリに異常が発生する(ステップS227)と、ホームノードは、リモートノードのアプリの異常を検出する(ステップS228)。
そして、キャッシュフラッシュ部74が、異常アプリが使用していた共有メモリセグメントに対してキャッシュフラッシュを実行する(ステップS229)。そして、メモリトークン設定解除部75aが、異常アプリが使用していた共有メモリセグメントに関して、メモリトークンレジスタ27aから異常アプリに対応するメモリトークンの設定のみ削除する(ステップS230)。
その後、異常が発生したアプリは、共有メモリセグメントにアクセスすると、アクセスに失敗し(ステップS231)、異常終了する(ステップS232)。また、正常なアプリは、共有メモリセグメントにアクセスすると、アクセスに成功する(ステップS233)。その後、正常なアプリは、共有メモリセグメントの使用を終了すると、アクセストークンの設定を解除し(ステップS234)、正常終了する(ステップS235)。
このように、メモリトークン設定解除部75aが、異常アプリが使用していた共有メモリセグメントについて、メモリトークンレジスタ27aから異常アプリに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常アプリからのアクセスのみを瞬時に遮断することができる。
上述してきたように、実施例2では、メモリトークンレジスタ27aにノード毎又はアプリ毎に異なるメモリトークンを記憶する。そして、ノード1又はアプリに異常が発生すると、メモリトークン設定解除部75aが異常ノード又は異常アプリに対応するメモリトークンの設定のみ解除する。したがって、ホームノードは、異常ノード又は異常アプリが使用していた共有メモリセグメントについて、異常ノード又は異常アプリからのアクセスのみを瞬時に遮断し、正常ノード又は正常アプリからのアクセスを継続することができる。
1 ノード
2 情報処理システム
2a 許可設定レジスタ
3 サービスプロセッサ
4 クロスバーネットワーク
11 CPUチップ
12 ディスクユニット
13 通信インターフェイス
14 コア
15 メモリ
16 ストランド
17 HDD
18 二次キャッシュ
19 一次キャッシュ
20 命令キャッシュ
21 データキャッシュ
22 命令制御部
23 命令バッファ
24 演算部
25 レジスタ部
26 メモリ
27,27a メモリトークンレジスタ
28 アクセストークンレジスタ
29 チェック部
31 CPU
32 メモリ
33 通信インターフェイス
41 VCPU
42 ローカルメモリ
43 共有メモリ
44 ディスク装置
50 ハイパーバイザ
60 OS
61,61a 共有メモリ管理部
70 管理テーブル
71 ノード・プロセス管理部
72 許可設定部
72a メモリトークン設定部
73 セグメント情報把握部
74 キャッシュフラッシュ部
75 許可解除部
75a メモリトークン設定解除部
76 ログ出力部
80 アプリケーション
81 アクセストークン
82 セグメント
91 論理ドメイン

Claims (7)

  1. 複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する情報処理装置において、
    前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を記憶する認証情報記憶部と、
    前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部と、
    他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとする設定部と、
    他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、
    リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定し、
    前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否し、
    前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と前記認証情報記憶部が記憶する前記認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定する判定部と
    異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力するログ出力部と
    を有することを特徴とする情報処理装置。
  2. 前記設定部が前記可否情報を不可に設定する前に前記異常情報処理装置が使用していた共有メモリの単位領域に対してキャッシュフラッシュを実行するフラッシュ実行部をさらに有することを特徴とする請求項1に記載の情報処理装置。
  3. 前記演算処理装置は、CPUチップ、コア、ストランド、仮想ノード又は仮想CPUであることを特徴とする請求項1又は2に記載の情報処理装置。
  4. 前記異常情報処理装置は、動作するアプリケーションに異常が発生した情報処理装置であることを特徴とする請求項1〜のいずれか1つに記載の情報処理装置。
  5. 前記共有メモリの単位領域と単位領域毎に使用許可を受けた情報処理装置を対応付ける管理情報を記憶する管理情報記憶部をさらに有し、
    前記設定部は、前記管理情報を参照して、前記異常情報処理装置が使用していた共有メモリの単位領域を特定し、特定した単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとすることを特徴とする請求項1〜のいずれか1つに記載の情報処理装置。
  6. 複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する情報処理装置による共有メモリ管理方法において、
    前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部にアクセス可を示す情報を設定し、
    他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとし、
    他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、
    リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定し、
    前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否し、
    前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と、前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定し、
    異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力する
    処理を前記情報処理装置が実行する共有メモリ管理方法。
  7. 複数の他の情報処理装置とともに情報処理システムを構築し、該複数の他の情報処理装置からアクセスされる共有メモリを有する情報処理装置で実行される共有メモリ管理プログラムにおいて、
    前記共有メモリの単位領域毎に各情報処理装置又は各情報処理装置に含まれる各演算処理装置からのリードアクセス及びライトアクセスのそれぞれについてアクセス可否制御に用いる可否情報を記憶する可否情報記憶部にアクセス可を示す情報を設定し、
    他の情報処理装置のうちのいずれかの情報処理装置に異常が発生すると、異常が発生した異常情報処理装置が使用していた共有メモリの単位領域について異常情報処理装置又は異常情報処理装置に含まれる各演算処理装置に対応する前記可否情報のうちライトアクセスに対応する可否情報だけを不可に設定してリードアクセスに対応する可否情報を可のままとし、
    他の情報処理装置又は他の情報処理装置に含まれる演算処理装置から認証情報を含むリードアクセス要求又はライトアクセス要求により共有メモリのいずれかの単位領域へのアクセスがあった場合に、
    リードアクセス要求のときは前記可否情報記憶部が記憶するリードアクセスの可否情報に基づいて、リードアクセス要求された単位領域毎にアクセス可否を判定し、ライトアクセス要求のときは前記可否情報記憶部が記憶するライトアクセスの可否情報に基づいて、ライトアクセス要求された単位領域毎にアクセス可否を判定し、
    前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが不可であれば判定対象の単位領域へのアクセスを拒否し、
    前記他の情報処理装置又は他の情報処理装置に含まれる演算処理装置によるアクセスが可であれば、前記リードアクセス要求又はライトアクセス要求に含まれる前記認証情報と、前記共有メモリの単位領域毎にアクセスの認証制御に用いる認証情報を比較した結果に基づいて、判定対象の単位領域へのアクセスを許可するか否かを判定し、
    異常が発生した場合に、他の情報処理装置が備える共有メモリのうち使用していた単位領域のデータを読み込んでログを出力する
    処理を前記情報処理装置に実行させる共有メモリ管理プログラム。
JP2015247744A 2015-12-18 2015-12-18 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム Active JP6651836B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015247744A JP6651836B2 (ja) 2015-12-18 2015-12-18 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム
US15/348,494 US10628056B2 (en) 2015-12-18 2016-11-10 Information processing apparatus and shared memory management method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015247744A JP6651836B2 (ja) 2015-12-18 2015-12-18 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム

Publications (2)

Publication Number Publication Date
JP2017111751A JP2017111751A (ja) 2017-06-22
JP6651836B2 true JP6651836B2 (ja) 2020-02-19

Family

ID=59064316

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015247744A Active JP6651836B2 (ja) 2015-12-18 2015-12-18 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム

Country Status (2)

Country Link
US (1) US10628056B2 (ja)
JP (1) JP6651836B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10324722B2 (en) * 2016-06-24 2019-06-18 Hewlett Packard Enterprise Development Lp Global capabilities transferrable across node boundaries

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59121561A (ja) * 1982-12-28 1984-07-13 Fuji Facom Corp マルチプロセサシステムにおける共有資源アクセス保護方式
JP4123621B2 (ja) * 1999-02-16 2008-07-23 株式会社日立製作所 主記憶共有型マルチプロセッサシステム及びその共有領域設定方法
US7917710B2 (en) * 2006-06-05 2011-03-29 Oracle America, Inc. Memory protection in a computer system employing memory virtualization
US8073922B2 (en) * 2007-07-27 2011-12-06 Twinstrata, Inc System and method for remote asynchronous data replication
JP2011070528A (ja) 2009-09-28 2011-04-07 Nec Corp マルチプロセッサシステム及びメモリアクセス制御方法
JP5541275B2 (ja) * 2011-12-28 2014-07-09 富士通株式会社 情報処理装置および不正アクセス防止方法
US20150269092A1 (en) * 2014-03-19 2015-09-24 Fujitsu Limited Information processing device and shared memory management method

Also Published As

Publication number Publication date
US20170177254A1 (en) 2017-06-22
US10628056B2 (en) 2020-04-21
JP2017111751A (ja) 2017-06-22

Similar Documents

Publication Publication Date Title
US11777705B2 (en) Techniques for preventing memory timing attacks
JP6310061B2 (ja) システムメモリから不揮発性データストレージに移行されるアプリケーションプログラムデータの選択的保持
US7502872B2 (en) Method for out of user space block mode I/O directly between an application instance and an I/O adapter
US8332363B2 (en) Storage system and data management method of the same
CN110998562B (zh) 在分布式集群系统中隔开节点
US20110145243A1 (en) Sharing of Data Across Disjoint Clusters
TW201933112A (zh) 區域融合
CN105049445B (zh) 一种访问控制方法及独立式访问控制器
US20070005815A1 (en) System and method for processing block mode I/O operations using a linear block address translation protection table
US20180157605A1 (en) Configuration of a memory controller for copy-on-write
US20060265525A1 (en) System and method for processor queue to linear block address translation using protection table control based on a protection domain
JP2017004044A (ja) ライセンス管理プログラム、ライセンス管理方法、およびライセンス管理システム
JP6651836B2 (ja) 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム
JP6337607B2 (ja) 情報処理装置、共有メモリ管理方法及び共有メモリ管理プログラム
US9575658B2 (en) Collaborative release of a virtual disk
KR20210132545A (ko) 이상행위 탐지 장치, 방법 및 이를 포함하는 시스템
US12069104B2 (en) Dynamic management of role-based access control systems
JP5864534B2 (ja) 仮想計算機システム、メモリ管理方法、メモリ管理プログラム、記録媒体および集積回路
CN106557263B (zh) 用于在数据块删除中检查伪共享的方法及设备
US20170177508A1 (en) Information processing apparatus and shared-memory management method
JP6680973B2 (ja) 情報処理装置、情報処理装置の制御方法及び演算処理装置
TW201926061A (zh) 用於記憶體區域的巡檢清除-提交狀態
CN117234431B (zh) 缓存管理方法、装置、电子设备及存储介质
US11520488B2 (en) Method and apparatus for identifying a device missing from a consistency group
KR102607875B1 (ko) 액세스 제어를 위한 블록체인 네트워크의 노드 장치 및 이의 동작방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180810

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190611

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190625

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190726

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20191224

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200106

R150 Certificate of patent or registration of utility model

Ref document number: 6651836

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150