以後の説明では「aaaテーブル」、「aaaリスト」、「aaaDB」、「aaaキュー」等の表現にて本発明の情報を説明するが、情報はテーブル、リスト、DB、キュー、等のデータ構造以外で表現されていてもよい。そのため、情報がデータ構造に依存しないことを示すために「aaaテーブル」、「aaaリスト」、「aaaDB」、「aaaキュー」等について「aaa情報」と呼ぶことがある。
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート(通信制御デバイス)を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理はストレージコントローラ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディア(computer-readable memory media)によって各計算機にインストールされてもよい。この場合、プログラム配布サーバはプロセッサ(例えばCPU:Central Processing Unit)と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムを記憶している。そして、配布プログラムをCPUが実行することで、プログラム配布サーバのCPUは配布対象のプログラムを他の計算機に配布する。
以下、実施例の計算機システムの構成について説明する。
図1は、実施例の計算機システムの構成を示す。
この計算機システムは、一つのストレージコントローラ100と、二つのドライブボックス200と、四つのホスト計算機300とを含む。ドライブボックス200は、二つのドライブ210を含む。ドライブボックス200は、ストレージコントローラ100に接続されており、不揮発性半導体メモリやHDD(Hard Disk Drive)などである。ホスト計算機300は、ストレージコントローラ100に接続されており、ストレージコントローラ100を介してドライブ210内のデータにアクセスする。
ストレージコントローラ100は、互いに同じ構成を有する二つのクラスタ(CL)110を含む。二つのクラスタ110を区別する場合、CL0及びCL1と呼ぶ。クラスタ110は、MP(Microprocessor Package)120と、メモリ(MM)140と、ドライブI/F(Interface)150と、ホストI/F160との組を、二組含む。一つのクラスタ110内の二つのMP120を区別する場合、夫々MP0及びMP1と呼ぶ。一つのクラスタ110内の二つのメモリ140を区別する場合、夫々MM0及びMM1と呼ぶ。MM0及びMM1はそれぞれ、MP0及びMP1に接続されている。メモリ140は、例えばDRAM(Dynamic Random Access Memory)である。メモリ140は、MP120により用いられるプログラム及びデータを格納する。
本実施例において、CL0とCL1が同一の構成を有しているが、互いに異なる構成を有していても良い。また、CL0内のメモリ140の容量とCL1内のメモリ140の容量とが互いに異なっていても良い。
MP120は、コア121と、IOMMU(Input/Output Memory Management Unit)122と、メモリI/F123と、MPI/F124と、DMA(DMAC:Direct Memory Access Controller)125と、NTB126と、PCIe(PCI Express:Peripheral Component Interconnect Express)I/F135、136、137、138とを含む。コア121と、IOMMU122と、メモリI/F123と、MPI/F124と、PCIeI/F135、136、137、138との間は、MP内部のIOバスで接続されている。一つのクラスタ110内のMP0及びMP1に夫々設けられている二つのNTB126を区別する場合、夫々NTB0及びNTB1と呼ぶ。また、PCIeバスに接続されているデバイスをIOデバイスと呼ぶことがある。IOデバイスは、DMA125、NTB126、ドライブI/F150、ホストI/F160などである。PCIeI/F135、136、137、138の夫々には、PCIeポートIDが与えられる。
コア121は、メモリ140に格納されているプログラム及びデータに基づいてストレージコントローラ100の制御を行う。なお、このプログラムが、コンピュータにより読み取り可能な記憶媒体に格納され、コア121がこの記憶媒体からプログラムを読み出しても良い。なお、コア121は、CPUなどのマイクロプロセッサのコアであっても良いし、マイクロプロセッサ自体であっても良い。
メモリI/F123は、自MPに対応するメモリ140に接続されている。
MPI/F124は、自クラスタ内の他MP内のMPI/Fに接続されており、自MPと他MPの間の通信を制御する。
DMA125は、PCIeバス及びPCIeI/F135を介してIOバスに接続されており、自MPのメモリ140と、IOデバイス又は他MPのメモリ140との間の通信を制御する。
NTB126は、PCIeバス及びPCIeI/F136を介してIOバスに接続されており、他クラスタの対応するMP120のNTB126にPCIeバスを介して接続されており、自クラスタと他クラスタの間の通信を制御する。
PCIeI/F137は、PCIeバスを介して、自MPに対応するドライブI/F150に接続されている。PCIeI/F138は、PCIeバスを介して、自MPに対応するホストI/F160に接続されている。
IOデバイスがメモリ140へアクセスする際、当該IOデバイスに接続されているPCIeI/Fは、IOMMU122を用いて、当該IOデバイスにより用いられる仮想アドレスを物理アドレスに変換し、その物理アドレスにアクセスする。
ドライブI/F150は、対応するドライブ210に接続されている。ホストI/F160は、対応するホスト計算機300に接続されている。
本発明の表現のための用語について説明する。ストレージシステムは、ストレージコントローラ100及びドライブボックス200等に対応する。記憶デバイスは、ドライブ210等に対応する。制御システムは、ストレージコントローラ100等に対応する。制御サブシステムは、クラスタ110等に対応する。制御装置は、MP120等に対応する。メモリは、メモリ140等に対応する。プロセッサは、コア121等に対応する。入出力デバイスは、IOデバイス(DMA125、NTB126、ドライブI/F150、ホストI/F160)及びそれに接続されているPCIeI/F(135,136,137,138)等に対応する。中継デバイスは、NTB126及びそれに接続されているPCIeI/F136等に対応する。メモリ変換デバイスは、IOMMU122等に対応する。
図2は、物理アドレス空間の構成を示す。
メモリ140内の記憶領域の物理アドレスを示す物理アドレス空間には、先頭から順に、DRAM領域と、予約領域と、MMIO(Memory Mapped Input/Output)領域とが連続して配置される。
DRAM領域には、自クラスタ内の二つのメモリ140内の記憶領域が連続して割り当てられている。DRAM領域には、NUMAに基づき、先頭から順に、MM0割当領域と、MM1割当領域とが連続して配置される。MM0割当領域には、自クラスタ内のMM0の記憶領域が割り当てられている。MM1割当領域には、自クラスタ内のMM1の記憶領域が割り当てられている。
一つのMP120及び一つのメモリ140に対応する割当領域には、制御データ領域と、共有データ領域と、ユーザデータ領域とが連続して配置される。制御データ領域は、自MPのコア121がプログラムとして実行可能なプログラムコードを含む制御データを格納し、自MP内のコア121によるアクセスが許可されており、自MP以外のコア121及びIOデバイスによるアクセスが禁止されている。共有データ領域は、自MPの自分MP内の複数のコア121が読み書きできる情報となる共有データを格納し、ストレージコントローラ100内のすべてのコア121によるアクセスが許可されており、IOデバイスによるアクセスが禁止されている。ユーザデータ領域は、自MPにより管理されるホスト計算機300から転送されたユーザデータを格納し、ストレージコントローラ100内のすべてのコア121及びIOデバイスによるアクセスが許可されている。制御データ領域は、自クラスタの構成を示すハードウェア構成情報と、コア121による仮想アドレスの変換に用いられるコア変換テーブルと、IOMMU122による仮想アドレスの変換に用いられるIO変換テーブルとを格納する。制御データ領域は更に、物理アドレステーブルを格納していても良い。制御データ領域は、コア変換テーブル及びIO変換テーブルの基となるベーステーブルを予め格納していても良い。これらのデータについては後述する。また、これらのデータのポインタがコア121のレジスタに設定されることにより、コア121がこれらのデータを読み出しても良い。
この図において、制御データ領域、共有データ領域、及びユーザデータ領域には、対応するMP120の識別子を付けて区別する。MM0割当領域には、先頭から順に、MP0制御データ領域と、MP0共有データ領域と、MP0ユーザデータ領域とが連続して配置される。MM1割当領域には、先頭から順に、MP1制御データ領域と、MP1共有データ領域と、MP1ユーザデータ領域とが連続して配置される。
予約領域は、アクセス不可能な記憶領域である。
MMIO領域は、MM1割当領域より後の、予め定められたMMIO先頭アドレスから配置される。MMIO先頭アドレスは、DRAM領域のサイズに比べて十分大きい。この例において、DRAM領域のサイズは、16GBであり、MMIO先頭アドレスは、先頭から256GBの位置である。MMIO領域は、NTB領域を含む。NTB領域には、他クラスタのDRAM領域がマッピングされている。ここでは、自クラスタのメモリ140の容量と他クラスタのメモリ140の容量とが等しいとする。このとき、NTB領域のサイズは、DRAM領域のサイズに等しい。他クラスタの物理アドレス空間におけるDRAM領域内の各領域の配置は、自クラスタの物理アドレス空間におけるDRAM領域内の各領域の配置と同一である。言い換えれば、NTB領域は、他クラスタの物理アドレス空間におけるDRAM領域に、MMIO先頭アドレスのオフセットを加えた配置を有する。
この物理アドレス空間によれば、MM0割当領域が一つにまとめて配置され、MM1割当領域が一つにまとめて配置されることにより、二つのメモリへのアクセスを均等化する物理アドレス空間に比べて、MP間の通信を低減し、ストレージコントローラ100の性能を向上させることができる。また、物理アドレス空間において、一つのメモリ140の領域内に、制御データ領域、共有データ領域、及びユーザデータ領域を配置することにより、デバイス毎にアクセス権が異なる記憶領域を配置することができる。
図3は、物理アドレス空間とコア仮想アドレス空間とIO仮想アドレス空間との関係を示す。
コア121は、コア121のための仮想アドレスと物理アドレスの関連を示すコア変換テーブルを作成し、メモリ140に保存する。コア121に対するコマンドは、メモリ140内の対象の記憶領域を仮想アドレスで指定する。コマンドは、例えばプログラムとしてメモリ140等に格納される。コア121は、コア変換テーブルに基づいて、指定された仮想アドレスを物理アドレスに変換し、その物理アドレスにアクセスする。コア121で指定される仮想アドレスの空間をコア仮想アドレス空間と呼ぶ。
コア121は、IOデバイスのための仮想アドレスと物理アドレスの関連を示すIO変換テーブルを作成し、メモリ140に保存する。IOデバイスに対するコマンドは、メモリ140内の対象の記憶領域を仮想アドレスで指定する。IOデバイスがメモリ140にアクセスする際、IOMMU122は、IO変換テーブルを用いて、指定された仮想アドレスを物理アドレスに変換する。IOデバイスで指定される仮想アドレスの空間をIO仮想アドレス空間と呼ぶ。
コア仮想アドレス空間には、先頭から順に、MP0制御データ領域と、MP0共有データ領域と、MP0ユーザデータ領域と、MP間予約領域と、MP1制御データ領域と、MP1共有データ領域と、MP1ユーザデータ領域と、クラスタ間予約領域と、MMIO領域とが連続して配置される。このうち、MP0制御データ領域と、MP0共有データ領域と、MP0ユーザデータ領域と、MP1制御データ領域と、MP1共有データ領域と、MP1ユーザデータ領域と、MMIO領域とに格納されるデータは、物理アドレス空間と同一である。以後、各種の予約領域を、単に予約領域と呼ぶことがある。予約領域は、メモリ140の増設などメモリ140の容量の変化を契機に、DRAM領域として割り当てられても良い。又は、意図的にIOデバイスやコア121によるメモリアクセスを回避したい場合に、IOデバイスやコア121がアクセスできない記憶領域として用いられても良い。
本実施例においては、仮想アドレス空間において、制御データ領域や共有データ領域のように容量が変わらないことが前提となるデータ領域に続けて、ユーザデータ領域のように容量が可変である容量可変データ領域が配置される。更に、仮想アドレス空間において、容量可変データ領域の終端アドレスの後に、物理アドレス空間へのマッピングを行わないことなどによりメモリアクセスが出来ないようにした記憶領域(予約領域やマージンと呼ぶ)が配置され、その後に次の種別のデータ領域が配置される。このような配置とすることで、容量が変化した場合に、容量が変化しないデータ領域についてのアドレス空間のマッピングを変化させる必要がなく、当該容量可変データ領域の終端アドレスに関するマッピングを変化させるだけでよい。
尚、少なくとも容量可変データ領域の終端アドレスの後にマージンを設けて次の種別のデータ領域を配置するようにすれば、上記実施例と異なる順序で各データ領域が配置されてもマッピング変更の負荷を低減するという効果を得ることができる。
MM0割当領域(MP0制御データ領域と、MP0共有データ領域と、MP0ユーザデータ領域)について、コア仮想アドレス空間におけるアドレス範囲は、物理アドレス空間におけるアドレス範囲と等しい。
MM1割当領域(MP1制御データ領域と、MP1共有データ領域と、MP1ユーザデータ領域)について、コア仮想アドレス空間における先頭アドレスは、物理アドレス空間における先頭アドレスより大きく、予め定められたMP1先頭アドレスに設定される。MP0ユーザデータ領域の終端アドレスの最大値は、MP0に割り当てられるメモリ140の最大容量になる。MP120はMM0とMM1を認識する必要があるため、MP0に割り当てられるメモリ140の最大容量は、MP120が認識しうる最大のメモリ容量の半分に相当する。よって、MP1先頭アドレスは、MP0ユーザデータ領域の終端アドレスの最大値より大きくなる。この例において、MP0ユーザデータ領域の終端アドレスは、8GBであり、MP1先頭アドレスは、先頭から32GBの位置である。これにより、コア仮想アドレス空間におけるMM0割当領域とMM1割当領域の間には、アクセス不可能なMP間予約領域が配置される。
コア仮想アドレス空間におけるMMIO領域の先頭アドレスは、MMIO先頭アドレスである。これにより、MMIO領域について、コア仮想アドレス空間におけるアドレス範囲は、物理アドレス空間におけるアドレス範囲に等しい。MMIO先頭アドレスは、コア仮想アドレス空間におけるMP1ユーザデータ領域の終端アドレスより大きい。この例において、MP1ユーザデータ領域の終端アドレスは、先頭から16GBの位置であり、MMIO先頭アドレスは、先頭から256GBの位置である。これにより、コア仮想アドレス空間におけるMP1ユーザデータ領域とMMIO領域の間には、アクセス不可能なクラスタ間予約領域が配置される。
コア仮想アドレス空間において、自クラスタのMMIO領域は、他クラスタのDRAM領域に対応する。また、他クラスタのコア仮想アドレス空間におけるDRAM領域内の各領域の先頭アドレスは、自クラスタのコア仮想アドレス空間におけるDRAM領域内の各領域の先頭アドレスに等しい。これにより、自クラスタ内のコア121は、他クラスタのメモリ140の容量が変化しても、固定の仮想アドレスを用いて他クラスタ内のメモリ140内の特定の記憶領域にアクセスすることができる。
以後、或るMP120の制御データ領域と共有データ領域を合わせた領域を、システムデータ領域と呼ぶことがある。システムデータ領域は、自クラスタ内のコアによるアクセスが許可され、IOデバイスによるアクセスが禁止されている。ここでは、MP0のシステムデータ領域を、MP0システムデータ領域と呼び、MP1のシステムデータ領域を、MP1システムデータ領域と呼ぶ。
IO仮想アドレス空間には、先頭から順に、MP0保護領域と、MP0ユーザデータ領域と、MP間保護領域と、MP1保護領域と、MP1ユーザデータ領域と、クラスタ間保護領域と、MMIO領域とが連続して配置される。以後、各種の保護領域を、単に保護領域と呼ぶことがある。保護領域は、物理アドレス空間にマッピングされるが、メモリアクセス権の設定によりメモリアクセスに制約が生じている記憶領域を指す。保護領域を設け、クラスタ110間のデータ転送において、クラスタ110が他方のクラスタ110のアドレス空間を自己のアドレス空間にマッピングすることにより、クラスタ110側が他方のクラスタ110から転送されるデータの受領可否を制御することができる。よってクラスタ110が他方のクラスタ110のアドレス空間マッピングの情報を持たなくてもメモリアクセス保護機能を実現できる。
IO仮想アドレス空間におけるMP0保護領域のアドレス範囲は、コア仮想アドレス空間におけるMP0システムデータ領域のアドレス範囲に等しい。MP0保護領域は、IOデバイスからアクセス不可能である。
MP0ユーザデータ領域について、IO仮想アドレス空間におけるアドレス範囲は、コア仮想アドレス空間におけるアドレス範囲に等しい。
IO仮想アドレス空間におけるMP間保護領域のアドレス範囲は、コア仮想アドレス空間におけるMP間予約領域のアドレス範囲に等しい。MP間保護領域は、IOデバイスからアクセス不可能である。
IO仮想アドレス空間におけるMP1保護領域のアドレス範囲は、コア仮想アドレス空間におけるMP1システムデータ領域のアドレス範囲に等しい。MP1保護領域は、IOデバイスからアクセス不可能である。
MP1ユーザデータ領域について、IO仮想アドレス空間におけるアドレス範囲は、コア仮想アドレス空間におけるアドレス範囲に等しい。
IO仮想アドレス空間におけるMMIO領域の先頭アドレスは、MMIO先頭アドレスである。これにより、MMIO領域について、IO仮想アドレス空間におけるアドレス範囲は、コア仮想アドレス空間におけるアドレス範囲に等しい。これにより、IO仮想アドレス空間におけるクラスタ間保護領域のアドレス範囲は、コア仮想アドレス空間におけるクラスタ間予約領域のアドレス範囲に等しい。クラスタ間保護領域は、IOデバイスからアクセス不可能である。
コア仮想アドレス空間と同様、IO仮想アドレス空間において、自クラスタのMMIO領域は、他クラスタのDRAM領域に対応する。また、他クラスタのIO仮想アドレス空間におけるDRAM領域内の各領域の先頭アドレスは、自クラスタのIO仮想アドレス空間におけるDRAM領域内の各領域の先頭アドレスに等しい。これにより、自クラスタ内のIOデバイスは、他クラスタのメモリ140の容量が変化しても、固定の仮想アドレスを用いて、他クラスタ内のメモリ140内の特定の記憶領域にアクセスすることができる。
前述のようにMMIO先頭アドレスは、DRAM領域のサイズに比べて十分大きい。これにより、自クラスタは、自クラスタのメモリ140の容量の変化に依らず、固定の仮想アドレスを用いて、他クラスタのメモリ140内の特定の記憶領域へアクセスすることができる。また、MM0割当領域のサイズに比べて十分大きいMP1先頭アドレスからMM1割当領域を開始することにより、ストレージコントローラ100内のコア121又はIOデバイスは、メモリ140の容量の変化に依らず、固定の仮想アドレスを用いて、MM1内の特定の記憶領域へアクセスすることができる。また、IO仮想アドレス空間に保護領域を設けることにより、MP0システムデータ領域とMP1システムデータ領域に対するIOデバイスからのアクセスを防ぐことができる。
なお、物理アドレス空間、コア仮想アドレス空間、及びIO仮想アドレス空間において、DRAM領域の先頭アドレスを予め設定された自制御サブシステムアドレスに設定し、MMIO領域の先頭アドレスを予め設定された他制御サブシステムアドレスに設定しても良い。本実施例において、自制御サブシステムアドレスは、アドレス空間の先頭であり、他制御サブシステムアドレスは、MMIO先頭アドレスである。
また、コア仮想アドレス空間及びIO仮想アドレス空間において、MP0システムデータ領域の先頭アドレスを予め設定された第一システムデータアドレスに設定し、MP1システムデータ領域の先頭アドレスを予め設定された第二システムデータアドレスに設定しても良い。本実施例において、第二システムデータアドレスは、アドレス空間の先頭であり、第二システムデータアドレスは、MP1先頭アドレスである。
図4は、コア変換テーブルを示す。
ストレージコントローラ100は、メモリ140内の記憶領域を、複数のページに分割して管理する。コア変換テーブルは、ページテーブルであり、ページ毎のエントリを有する。
一つのページのエントリは、ページ番号(#)と、領域種別と、物理アドレスと、ページサイズと、仮想アドレスと、アクセス権とのフィールドを有する。ページ番号は、当該ページの識別子を示す。領域種別は、当該ページが属する領域の種別を示す。領域種別は、例えば、制御データ領域(制御)、共有データ領域(共有)、ユーザデータ領域(ユーザ)の何れかを示す。物理アドレスは、物理アドレス空間における当該ページの先頭アドレスを示す。ページサイズは、当該ページのサイズを示す。仮想アドレスは、コア仮想アドレス空間における当該ページの先頭アドレスを示す。アクセス権は、自MPのコアによる当該ページへのアクセス権を示し、Readアクセス権と、Writeアクセス権と、Executeアクセス権とを有する。Readアクセス権は、当該ページへのReadアクセスの可否を示す。Writeアクセス権は、当該ページへのWriteアクセスの可否を示す。Executeアクセス権は、当該ページに格納されているデータについてコア121がプログラム実行可能なコードとして扱えるかどうかを示す。
コア変換テーブルは、コア121により用いられる仮想アドレスを、物理アドレスに関連付けている。これにより、コア121は、メモリ140の容量の変化に依らず、固定の仮想アドレスを用いて特定の記憶領域へアクセスすることができる。また、メモリ140の容量の変化が発生しても、コア121へのコマンドを含むプログラムの修正を避けることができる。
図5は、IO変換テーブルを示す。
IO変換テーブルは、ページテーブルであり、ページ毎のエントリを有する。
一つのページのエントリは、ページ番号(#)と、変換有効フラグと、対象デバイスと、物理アドレスと、ページサイズと、仮想アドレスと、アクセス権とのフィールドを有する。ページ番号は、当該ページの識別子を示す。変換有効フラグは、当該ページの仮想アドレスと物理アドレスの変換が行われるか否かを示す。対象デバイスは、当該ページへアクセスするIOデバイスの識別子を示す。物理アドレスは、物理アドレス空間における当該ページの先頭アドレスを示す。ページサイズは、当該ページのサイズを示す。仮想アドレスは、IO仮想アドレス空間における当該ページの先頭アドレスを示す。アクセス権は、Readアクセス権と、Writeアクセス権とを有する。Readアクセス権は、当該ページへのReadアクセスの可否を示す。Writeアクセス権は、当該ページへのWriteアクセスの可否を示す。
IO変換テーブルは、一つの物理アドレスに複数のIOデバイスを関連付けていても良い。また、IO変換テーブルは、一つの仮想アドレスに複数のIOデバイスを関連付けていても良い。
IO変換テーブルは、IOデバイスが用いる仮想デバイスに対し、物理アドレスを関連付けている。これにより、IOデバイスは、メモリ140の容量の変化に依らず、固定の仮想アドレスを用いて特定の記憶領域へアクセスすることができる。また、メモリ140の容量の変化が発生しても、IOデバイスへのコマンドを含むプログラムの修正を避けることができる。
なお、コア変換テーブル及びIO変換テーブルにおいて、仮想アドレスは仮想ページ番号で表されても良く、物理アドレスは物理ページ番号で表されても良い。
コア121が、自クラスタ内のメモリ140の容量に基づいて、コア変換テーブル及びIO変換テーブルを作成することにより、自クラスタ内のメモリ140の容量が変化しても、特定の記憶領域に固定の仮想アドレスを関連付けることができる。
図6は、クラスタ間のアドレス空間の関係を示す。
この図は、CL0内のコア121により用いられるCL0内のコア仮想アドレス空間であるCL0コア仮想アドレス空間と、CL0内の物理アドレス空間であるCL0物理アドレス空間と、CL0内のコア及びCL1内のIOデバイスにより用いられるCL1内のIO仮想アドレス空間であるCL1IO仮想アドレス空間と、CL1内の物理アドレス空間であるCL1物理アドレス空間とを示す。ここでのCL0内の二つのメモリ140の容量は、CL1内の二つのメモリ140の容量に等しいとする。夫々のシステムデータ領域、ユーザデータ領域には、対応するクラスタ110の識別子とMP120の識別子とを付けて区別する。
CL0コア仮想アドレス空間には、先頭から順に、DRAM領域と、MMIO領域とが連続して配置される。
CL0コア仮想アドレス空間のDRAM領域には、先頭から順に、CL0MP0システムデータ領域と、CL0MP0ユーザデータ領域と、CL0MP間予約領域と、CL0MP1システムデータ領域と、CL0MP1ユーザデータ領域と、クラスタ間予約領域とが連続して配置される。
CL0内のコア121が、DRAM領域内の仮想アドレスを指定するコマンドを取得すると、当該コアは、指定された仮想アドレスを物理アドレスに変換し、変換された物理アドレスにアクセスする。
CL0物理アドレス空間には、先頭から順に、CL0MP0システムデータ領域と、CL0MP0ユーザデータ領域と、CL0MP1システムデータ領域と、CL0MP1ユーザデータ領域とが連続して配置される。
CL0コア仮想アドレス空間のMMIO領域には、先頭から順に、CL1MP0保護領域と、CL1MP0システムデータ領域と、CL1MP0ユーザデータ領域と、CL1MP間保護領域と、CL1MP1保護領域と、CL1MP1システムデータ領域と、CL1MP1ユーザデータ領域と、CL1クラスタ間保護領域とが連続して配置される。
CL0内のコア121が、MMIO領域内の仮想アドレスを指定するコマンドを取得すると、当該コアは、NTB126を介してCL1へアクセスする。CL1内のNTB126は、CL0コア仮想アドレス空間のMMIO領域内の仮想アドレスを、CL1IO仮想アドレス空間のDRAM領域内の仮想アドレスに変換する。
CL1IO仮想アドレス空間のDRAM領域には、CL0コア仮想アドレス空間のMMIO領域と同様、先頭から順に、CL1MP0保護領域と、CL1MP0システムデータ領域と、CL1MP0ユーザデータ領域と、CL1MP間保護領域と、CL1MP1保護領域と、CL1MP1システムデータ領域と、CL1MP1ユーザデータ領域と、CL1クラスタ間保護領域とが連続して配置される。即ち、CL1IO仮想アドレス空間のDRAM領域内のアドレスは、CL0コア仮想アドレス空間のMMIO領域内のアドレスからMMIO先頭アドレスのオフセットを減じたアドレスである。
CL1内のNTB126がMMIO領域内の仮想アドレスをDRAM領域内の仮想アドレスに変換した後、当該NTBに接続されているPCIeI/F136は、IOMMU122を用いて、CL1IO仮想アドレス空間内の仮想アドレスを、CL1物理アドレス空間内の物理アドレスに変換し、変換された物理アドレスにアクセスする。
CL1物理アドレス空間のDRAM領域には、先頭から順に、CL1MP0システムデータ領域と、CL1MP0ユーザデータ領域と、CL1MP1システムデータ領域と、CL1MP1ユーザデータ領域とが連続して配置される。CL1物理アドレス空間におけるCL1MP0システムデータ領域及びCL1MP1システムデータ領域のそれぞれは、CL1IO仮想アドレス空間における保護領域に対応する。これにより、CL0内のコア121及びIOデバイスは、CL1内のシステムデータ領域にアクセスできない。
或るクラスタ110内のコア121に対するコマンドは、MMIO領域を用いることにより、他クラスタ内のメモリ140の容量の変化に依らず、固定の仮想アドレスを用いて、他クラスタ内のメモリ140内の特定の記憶領域を指定することができる。
DRAM領域内の各領域の先頭の仮想アドレスは、メモリ140の容量に依らず、二つのクラスタ110において同一になる。これにより、他クラスタ内のメモリ140の容量が自クラスタ内のメモリ140の容量と異なる場合でも、自クラスタ内のコア121及びIOデバイスは、固定の仮想アドレスを指定して他クラスタ内のメモリ140へアクセスすることができる。
図7は、ハードウェア構成情報を示す。
ハードウェア構成情報は、自クラスタのハードウェア構成に関するデータ毎のエントリを有する。一つの情報は、データ番号(#)と、項目名と、内容とのフィールドを含む。データ番号は、当該データを示す識別子を示す。項目名は、当該データの名称を示す。項目名は、例えば、当該クラスタ内のMP120の数である搭載MP数、当該クラスタのMPの動作周波数であるMP周波数、当該クラスタ内のコア121の数であるコア数、当該クラスタ内のメモリ140の容量の合計であるメモリ容量、当該クラスタ内のPCIeポート1(PCIeI/F138)に接続されているIOデバイスの有無、そのポートに接続されているIOデバイス(接続IOデバイス)の種別、当該クラスタ内のPCIeポート2(PCIeI/F136)に接続されているIOデバイスの有無、そのポートに接続されているIOデバイスの種別、当該クラスタ内のPCIeポート3(PCIeI/F137)に接続されているIOデバイスの有無、そのポートに接続されているIOデバイスの種別などである。内容は、当該データの内容を示す。例えば、搭載MP数の内容は2であり、メモリ容量の内容は16GBである。
このハードウェア構成情報がメモリ140等に格納されていることにより、コア121は、自クラスタの搭載MP数やメモリ容量など、コア変換テーブルやIO変換テーブルの作成に必要な情報を参照することができる。
図8は、物理アドレステーブルを示す。
物理アドレステーブルは、クラスタ内のメモリ容量と当該クラスタ内のMPの識別子に対応するエントリを有する。クラスタメモリ容量は、クラスタ内のメモリ容量の合計であり、クラスタに搭載可能なメモリ容量の値を示す。一つのクラスタメモリ容量と一つのMPに対応するエントリは、クラスタメモリ容量(メモリ/クラスタ)と、MP番号(MP)と、システムデータ領域範囲と、ユーザデータ領域範囲とのフィールドを含む。MP番号は、当該MPを示す識別子であり、MP0又はMP1を示す。システムデータ領域範囲は、物理アドレス空間における当該MPのシステムデータ領域の先頭アドレス及び終端アドレスを示す。ユーザデータ領域範囲は、物理アドレス空間における当該MPのユーザデータ領域の先頭アドレス及び終端アドレスを示す。
例えば、コア121は、システムデータ領域の先頭アドレスを制御データ領域の先頭アドレスとして決定し、制御データ領域の先頭アドレスに予め設定された制御データ領域のサイズを加えたアドレスを、共有データ領域の先頭アドレスとして算出する。
このようにクラスタ110内のメモリ140の容量の合計と、各領域の先頭の物理アドレスとの関係が予め設定されていることにより、コア121は、メモリ140の容量に応じて、各領域の先頭の物理アドレスを決定することができ、コア変換テーブルやIO変換テーブルを作成することができる。
図9は、クラスタ110の起動処理を示す。
クラスタ110の管理者が、当該クラスタ内のメモリ140の増設など、当該クラスタ内のメモリ140の容量を変化させた後、当該クラスタを起動させる。
S110においてコア121は、後述するコア変換テーブル作成処理を行う。
その後、S120においてコア121は、NTB126を除くIOデバイスを初期化する。
その後、S130においてコア121は、後述するIO変換テーブル作成処理を行う。
その後、S140においてコア121は、他クラスタのモデルと接続状態の情報を取得する。その後、S150においてコア121は、取得された情報に基づいて、自クラスタと同じモデルの他クラスタが自クラスタに接続されているか否かを判定する。
S150において同じモデルのクラスタが自クラスタに接続されていないと判定された場合(N)、コア121は処理をS140に戻す。
S150において同じモデルのクラスタが自クラスタに接続されていると判定された場合(Y)、S160においてコア121は、NTB0及びNTB1のリンクアップを試行する。その後、S170においてコア121は、NTB0及びNTB1がリンクアップ済であるか否かを判定する。
S170においてNTB0及びNTB1がリンクアップ済でないと判定された場合(N)、コア121は処理をS160に戻す。
S170においてNTB0及びNTB1がリンクアップ済であると判定された場合(Y)、S180においてコア121は、他クラスタに起動完了を通知する。その後、S190においてコア121は、両クラスタの起動処理完了を確認し、このフローを終了する。
以上の起動処理によれば、メモリ140の容量の変化後に、コア変換テーブルとIO変換テーブルを作成することができる。
図10は、コア変換テーブル作成処理を示す。
S210においてコア121は、ハードウェア構成情報を参照し、メモリ140のメモリ容量とMP数の情報を取得する。その後、S220においてコア121は、物理アドレステーブルを参照する。その後、S230においてコア121は、コア変換テーブルのベーステーブルと、メモリ容量と、物理アドレステーブルに基づいて、コア変換テーブルを作成し、アクセス権以外を設定する。コア変換テーブルのベーステーブルにおいて、MP1の制御データ領域の先頭ページの仮想アドレスには、MP1先頭アドレスが設定されている。
その後、S250においてコア121は、コア変換テーブルから未選択のページを選択し、当該ページがMP間予約領域の条件を満たすか否かを判定する。MP間予約領域の条件は、当該ページの仮想アドレスがMP0ユーザデータ領域の終端アドレスより大きく、且つMP1システムデータ領域の先頭アドレスより小さいことである。
S250において当該ページがMP間予約領域の条件を満たすと判定された場合(Y)、S270においてコア121は、当該ページをアクセス不可に設定し、処理をS280へ移行させる。ここで、コア121は、当該ページのアクセス権において、Read禁止、Write禁止、Execute禁止に設定する。
S250において当該ページがMP間予約領域の条件を満たさないと判定された場合(N)、S260においてコア121は、当該ページがクラスタ間予約領域の条件を満たすか否かを判定する。クラスタ間予約領域の条件は、当該ページの仮想アドレスがMP1ユーザデータ領域の終端アドレスより大きいことである。
S260において当該ページがクラスタ間予約領域の条件を満たすと判定された場合(Y)、コア121は処理をS270へ移行させる。S260において当該ページがクラスタ間予約領域の条件を満たさないと判定された場合(N)、S280においてコア121は、コア変換テーブル内のすべてのページの処理を終了したか否かを判定する。
S280においてすべてのページの処理を終了していないと判定された場合(N)、コア121は処理をS250へ戻す。
S280においてすべてのページの処理を終了したと判定された場合(Y)、S290においてコア121は、コア変換テーブルへのポインタを、コア121のMSR(Model Specific Register)にセットすることにより、仮想アドレスの変換を有効化し、このフローを終了する。
以上のコア変換テーブル作成処理によれば、コア121は、メモリ140の容量に応じたコア変換テーブルを作成することができる。また、コア121は、コア仮想アドレス領域において、先頭のMPのユーザデータ領域の終端アドレスと、MP1先頭アドレスの間に、MP間予約領域を設定することができる。
図11は、IO変換テーブル作成処理を示す。
S310においてコア121は、ハードウェア構成情報を参照し、メモリ容量、MP数、接続IOデバイスの情報を取得する。その後、S320においてコア121は、物理アドレステーブルを参照する。その後、S330においてコア121は、IO変換テーブルのベーステーブルと、メモリ容量と、物理アドレステーブルに基づいて、IO変換テーブルを作成し、変換有効フラグ以外を設定する。IO変換テーブルのベーステーブルにおいて、MP1の制御データ領域の先頭ページの仮想アドレスには、MP1先頭アドレスが設定されており、各ページの対象デバイスにはIOデバイスが設定されている。
その後、S350においてコア121は、IO変換テーブルから未選択のページを選択し、当該ページの対象デバイスがPCIeポートに接続されているか否かを判定する。
S350において対象デバイスがPCIeポートに接続されていると判定された場合(Y)、S360においてコア121は、IO変換テーブル内の当該ページの変換有効フラグの値を”Yes”に設定し、処理をS380へ移行させる。
S350において対象デバイスがPCIeポートに接続されていないと判定された場合(N)、S370においてコア121は、IO変換テーブル内の当該ページの変換有効フラグの値を”No”に設定し、処理をS380へ移行させる。
S380においてコア121は、IO変換テーブル内のすべてのページの処理を終了したか否かを判定する。
S380においてすべてのページの処理を終了していないと判定された場合(N)、コア121は処理をS350へ戻す。
S380においてすべてのページの処理を終了したと判定された場合(Y)、S390においてコア121は、自MP内のIOMMU122のレジスタにIO変換テーブルへのポインタをセットすることにより、IOMMU122による仮想アドレスの変換を有効化し、このフローを終了する。
以上のIO変換テーブル作成処理によれば、コア121は、自クラスタ内のメモリ140の容量に応じたIO変換テーブルを作成することができる。また、コア121は、接続されているIOデバイスに対応するページのアドレス変換を有効にすることができる。
以下、計算機システムにおけるフロントエンドライト処理について説明する。
フロントエンドライト処理は、ホスト計算機300がストレージコントローラ100へライトコマンド及びユーザデータを送信し、そのユーザデータを二つのクラスタ110のメモリ140へ書き込む処理である。
図12は、ホストI/F転送コマンド内のパラメータを示す。
コア121は、ホストI/F転送コマンドを作成し、メモリ140内でホストI/F160に対応する記憶領域へ書き込むことにより、ホストI/F160に対してデータ転送の指示(命令)を行う。ホストI/F転送コマンドは、コマンド種別と、IO転送長と、タグ番号と、メモリアドレスとのフィールドを有する。コマンド種別は、当該コマンドの種別を示し、例えばリードやライトを示す。ここではコマンド種別がライトである場合を示す。この場合、ホストI/F転送コマンドはホストI/F160からメモリ140への転送を指示する。IO転送長は、ホストI/F160とメモリ140の間で転送されるデータの長さを示す。タグ番号は、転送されるデータに付与される識別子を示す。メモリアドレスは、メモリ140の記憶領域を示す仮想アドレスである。コマンド種別がライトである場合、メモリアドレスは転送先の記憶領域を示す。なお、コマンド種別がリードである場合、ホストI/F転送コマンドはメモリ140からホストI/F160への転送を指示し、メモリアドレスは転送元の記憶領域を示す。
図13は、DMA転送コマンド内のパラメータを示す。
コア121は、DMA転送コマンドを作成し、メモリ140内でDMA125に対応する記憶領域へ書き込むことにより、DMA125に対してデータ転送を命令する。DMA転送コマンドは、コマンド種別と、データ転送長と、転送元メモリアドレスと、転送先メモリアドレスと、制御内容とのフィールドを有する。コマンド種別は、当該コマンドの種別を示し、例えばデータコピーやパリティ生成を示す。ここでは、コマンド種別がデータコピーである場合を示す。データ転送長は、DMA125により転送されるデータの長さを示す。転送元メモリアドレスは、転送元のメモリ140の記憶領域を示す仮想アドレスである。転送先メモリアドレスは、転送先のメモリ140の記憶領域を示す仮想アドレスである。制御内容は、DMA125による制御の内容を示す。転送元メモリアドレス及び転送先メモリアドレスの夫々は、自クラスタ内のメモリ140を示すDRAM領域内の仮想アドレスであっても良いし、他クラスタ内のメモリ140を示すMMIO領域内の仮想アドレスであっても良い。
図14は、PCIeデータ転送パケット内のパラメータを示す。
PCIeデータ転送パケットは、PCIeバスを介するデータ転送のパケットである。PCIeデータ転送パケットは、パケット種別と、リクエスタIDと、転送先メモリアドレスと、データ長と、転送先データ内容[0]~[N-1]とのフィールドを有する。パケット種別は、当該パケットの種別を示し、例えばメモリリクエストやコンフィギュレーションやメッセージを示す。リクエスタIDは、当該パケットを発行したIOデバイスを識別する識別子である。転送先メモリアドレスは、当該パケットの転送先の記憶領域を示すアドレスであり、仮想アドレス又は物理アドレスで表される。データ長は、その後に続くデータの長さを示す。転送先データ内容[0]~[N-1]は、当該パケットのデータ内容を示す。
NTB126は、他クラスタからのPCIeデータ転送パケット内のリクエスタIDを書き換えると共に、転送先メモリアドレスを示す仮想アドレスをMMIO領域からDRAM領域に書き換える。更に、NTB126に接続されているPCIe/IF136は、IOMMU122を用いて、転送先メモリアドレスを示す仮想アドレスを物理アドレスに書き換え、その物理アドレスへ転送する。
図15は、ホストI/Fライト処理を示す。
ホストI/F160は、起動処理が終了すると、受信準備完了を示す情報を、接続されているホスト計算機300へ送信する。その後、当該ホストI/Fは、当該ホスト計算機からライトコマンドを受信すると、自MPのコア121へライトコマンドを通知する。当該コアは、ホストI/F転送コマンドを作成し、ホストI/F転送コマンドを読み込むことを当該ホストI/Fに指示する。これにより、当該ホストI/Fは、ホストI/Fライト処理を開始する。
S410において当該ホストI/Fは、当該ホスト計算機からユーザデータを受信する。その後、S420において当該ホストI/Fは、ユーザデータにCRCコードを付与し、ホストI/F転送コマンドにより指定された転送先メモリアドレスを持つPCIeデータ転送パケットを生成して転送する。このとき、当該ホストI/Fに接続されているPCIeI/F138は、IOMMU122を用いて、PCIeデータ転送パケットの転送先メモリアドレスを示す仮想アドレスを物理アドレスに書き換え、PCIeデータ転送パケットをその物理アドレスへ転送する。
その後、S430において当該ホストI/Fは、自MPのコア121へデータ転送完了を通知し、このフローを終了する。
以上のホストI/Fライト処理によれば、ホストI/F160は、ホスト計算機300から受信したユーザデータを、対応するメモリ140へ転送することができる。
図16は、DMAライト処理を示す。
本実施例においては、二つのクラスタ110がライトデータを二重化してメモリ140に格納するために、ライトデータを受信して格納した一方のクラスタは、他方のクラスタへライトデータを転送する。ここでは、ライトコマンドを受信したクラスタ110を転送元クラスタと呼び、ライトコマンドを受信したMP120を転送元MPと呼び、他方のクラスタを転送先クラスタと呼ぶ。
S510において、ホストI/Fライト処理によりデータ転送完了の通知を受けた転送元クラスタのコア121は、転送元MPのDMA125に対するDMA転送コマンドを作成し、転送元MPに接続されているメモリ140へ書き込む。
S520において、当該コアは、DMA転送コマンドを読み込むことを当該DMAに指示する。
S530において、当該DMAは、DMA転送コマンドを読み込む。S540において、当該DMAは、転送元メモリアドレスのユーザデータを読み込み、DMA転送コマンドにより指定された転送先メモリアドレスへのPCIeデータ転送パケットを生成して転送する。このとき、当該DMAに接続されているPCIeI/F135は、IOMMU122を用いて、転送元メモリアドレスを、仮想アドレスから物理アドレスに変換する。当該DMA125は、その物理アドレス内のユーザデータを読み込み、読み込んだユーザデータを転送先メモリアドレスへ転送する。転送先メモリアドレスがMMIO領域内のNTB領域内であるため、PCIeI/F135は、ユーザデータを転送元MPのNTB126へ転送する。転送元MPのNTB126は、接続されている転送先クラスタのNTB126へ、ユーザデータを含むPCIeデータ転送パケットを転送する。このPCIeデータ転送パケットにおける転送先メモリアドレスは、他クラスタのメモリ140内のユーザデータ領域を示し、MMIO領域内の仮想アドレスである。
S550において、転送先クラスタのNTB126は、転送元クラスタから転送されたPCIeデータ転送パケットを受信する。ここで、当該NTBは、PCIeデータ転送パケット内の転送先メモリアドレスからMMIO先頭アドレスを減ずることにより、転送先メモリアドレスをDRAM領域内のアドレスに書き換える。更に、当該NTBは、PCIeデータ転送パケット内のリクエスタIDを書き換える。
その後、S610において当該NTBは、IO変換テーブルにおける、転送先メモリアドレスの仮想アドレスに対応する変換有効フラグに基づいて、仮想アドレスの変換が有効であるか否かを判定する。
S610において仮想アドレスの変換が無効であると判定された場合(N)、当該NTBは、処理をS630へ移行させる。
S610において仮想アドレスの変換が有効であると判定された場合(Y)、S620において当該NTBに接続されているPCIeI/F136は、自MPのIOMMU122を用いて、PCIeデータ転送パケット内の転送先メモリアドレスを仮想アドレスから物理アドレスに変換し、PCIeデータ転送パケットを書き換える。
その後、S630において当該PCIeI/Fは、転送先メモリアドレスがMM1割当領域であるか否かを判定する。
S630において転送先メモリアドレスがMM0割当領域であると判定された場合(N)、S640において当該PCIeI/Fは、PCIeデータ転送パケットをMM0へ転送し、処理をS660へ移行させる。
S630において転送先メモリアドレスがMM1割当領域であると判定された場合(Y)、S650において当該PCIeI/Fは、PCIeデータ転送パケットをMM1へ転送し、処理をS660へ移行させる。
その後、S660において転送先のメモリ140に接続されているMP120のコア121は、転送先のメモリ140に格納されているユーザデータを読み出してCRCチェックを行うことにより、ユーザデータにエラーが無いことを確認し、このフローを終了する。
以上のDMAライト処理によれば、DMAは、自クラスタのメモリ140に格納されているユーザデータを他クラスタのメモリ140へ転送することができ、ユーザデータを二重化して格納することができる。また、NTB126が、転送先を示す他クラスタのMMIO領域内の仮想アドレスを、自クラスタのDRAM領域内の仮想アドレスに変換することにより、他クラスタから自クラスタへアクセスすることができる。更にNTB126に接続されているPCIeI/F136が、IOMMU122を用いて、転送先を示す自クラスタのDRAM領域内の仮想アドレスを物理アドレスに変換することにより、他クラスタから自クラスタ内のメモリ140へアクセスすることができる。
フロントエンドライト処理の第一具体例について説明する。
CL0MP0のホストI/F160がホスト計算機300からユーザデータを受信すると、自MPのコア121は当該ホストI/FへホストI/F転送コマンドを発行する。当該ホストI/Fは、ホストI/F転送コマンドに従って、ユーザデータにCRC(Cyclic Redundancy Check)コードを追加し、ユーザデータをCL0MM0へ転送する。
ここでCL0MP0のコア121は、DMA125に対し、ユーザデータをCL1MM0へ転送することを示すDMA転送コマンドを発行する。当該DMAは、DMA転送コマンドに応じて、CL0MM0からCL1MM0へユーザデータを転送する。このとき、ユーザデータは、CL0MP0のNTB126からPCIeバスを介してCL1MP0のNTB126へ転送され、CL1MP0のNTB126からCL1MM0へ転送される。
CL1MP0のコア121は、CL1MM0に格納されているユーザデータをリードし、CRCチェックを行う。
以上の第一具体例において、CL0MP0に接続されているホスト計算機300からのユーザデータは、CL0MM0に格納された後、CL0MP0及びCL1MP0を介してCL1MM0へ転送される。これにより、ユーザデータは、CL0MM0及びCL1MM0に二重化されて格納される。
フロントエンドライト処理の第二具体例について説明する。
ユーザデータをCL0MM0へ転送するまでの動作は、第一具体例と同様である。その後、CL0MP0のコア121は、DMA125に対し、ユーザデータをCL1MM1へ転送することを示すDMA転送コマンドを発行する。当該DMAは、DMA転送コマンドに応じて、CL0MM0からCL1MM1へユーザデータを転送する。このとき、ユーザデータは、CL0MP0のNTB126からPCIeバスを介してCL1MP0のNTB126へ転送され、CL1MP0のNTB126からMPI/F124及びCL1MP1を介してCL1MM1へ転送される。
CL1MP1のコア121は、CL1MM1に格納されているユーザデータをリードし、CRCチェックを行う。
以上の第二具体例において、CL0MP0に接続されているホスト計算機300からのユーザデータは、CL0MM0に格納された後、CL0MP0、CL1MP0、及びCL1MP1を介してCL1MM0へ転送される。これにより、ユーザデータは、CL0MM0とCL1MM1に二重化されて格納される。
以上のフロントエンドライト処理によれば、ストレージコントローラ100は、ホスト計算機300からのユーザデータを、二つのクラスタ110のメモリ140へ書き込み、ユーザデータを二重化して格納することにより、ユーザデータの信頼性を高めることができる。その後、ストレージコントローラ100は、メモリ140に格納されたデータをドライブ210へ書き込むことができる。