ストレージ装置及びそのデータ転送制御方法
【解決課題】複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置を提供する。
【解決手段】第1のクラスタから第2のクラスタに対してデータを転送する命令をライトし、第2のクラスタはこの命令に基づいて第1のクラスタから要求があったデータを第1のクラスタにライトすることによって、第1のクラスタから第2のクラスタにリード要求を発行することなく、第2のクラスタから第1のクラスタにデータがリアルタイムに転送できるようにしたものである。
【解決手段】第1のクラスタから第2のクラスタに対してデータを転送する命令をライトし、第2のクラスタはこの命令に基づいて第1のクラスタから要求があったデータを第1のクラスタにライトすることによって、第1のクラスタから第2のクラスタにリード要求を発行することなく、第2のクラスタから第1のクラスタにデータがリアルタイムに転送できるようにしたものである。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージ装置に係わり、特に、ホスト計算機に対してデータストレージサービスを提供する処理手段としてのクラスタを複数有し、ユーザに対してのデータ処理サービスの冗長性を高めたストレージ装置に関するものである。本発明はさらにストレージ装置のデータ転送制御方法に関するものである。
【背景技術】
【0002】
ホスト計算機に対してデータストレージサービスを提供する計算機システムとしてのストレージ装置には、データ処理に信頼性を持たせることと、データ処理のための応答性を向上させることが求められている。
【0003】
そこで、ストレージ装置では、ホスト計算機に対するデータストレージサービスを提供するコントローラを複数のクラスタから構成することが提案されている。
【0004】
この種のストレージ装置では、一方のクラスタが受信したコマンドに基づく処理を、そのクラスタが備えるプロセッサと他方のクラスタが備えるプロセッサとによって実行できるために、データ処理の高速化を達成できる。
【0005】
一方、複数のクラスタがストレージ装置に存在するために、一方のクラスタに障害が発生しても、他方のクラスタがその障害を補ってデータ処理を継続できるために、データ処理機能が冗長化できるという利点がある。複数クラスタを備えたストレージ装置は、例えば、特開2008−134776号公報に記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−134776号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
この種のストレージ装置では、複数のクラスタ間でデータ処理を連携させるために、複数クラスタ相互間で相手のクラスタのステータスを確認する必要がある。そこで、例えば、一方のクラスタはマイクロプログラムのステータスを他方のクラスタに一定周期でライトするようにしている。
【0008】
また、一方のクラスタが他方のクラスタのステータスに関する情報がリアルタイムに必要な場合は、他方のクラスタに直接アクセスしてそのステータス情報をリードするようにしている。
【0009】
ところで、一方のクラスタが他方のクラスタからでデータをリードする方式では、リードが複数のクラスタを跨った処理であるために、リードの発行元クラスはリードの発行先クラスタからリード結果が帰ってくるまで他の処理ができない。リード処理は4バイト単位で行われるものであり一度に大量のステータスのリードは、大きな性能劣化に繋がる。これでは、複数のクラスタを連携させてデータ処理を迅速に行おうとする、複数クラスタ型ストレージ装置の目的を達成することができないことになる。
【0010】
さらに、この課題は、複数のクラスタ間をPCI-Expressで接続した場合により顕著となる。すなわち、第1のクラスタから第2のクラスタのメモリにリードリクエストを発行すると、第2のクラスタから第1のクラスタにリードデータがコンプリーションとして応答される。第1のクラスタからリードリクエストが発行されると、クラスタ同士を接続するPCI-Expressポートでのデータ通信がタイマーによって管理される。
【0011】
第1のクラスタからのリードリクエストに対して、第2のクラスタから一定時間内に、コンプリーションが発行できないと、PCI-Expressポートに対してコンプリーションタイムアウトが第1のクラスタによって判定され、PCI-Expressポートがエラー状態にあるとしてこれを閉塞してしまう。
【0012】
このとき、コンプリーションを発行できない第2のクラスタ側に障害が発生しているため、ホスト計算機からのI/Oを第1のクラスタが処理しなければならないが、コンプリーションタイムアウトが発生したことで、第2クラスタに連れて第1のクラスタも強制的に障害状態にあると管理計算機によって判定されて、ストレージ装置の全体システムがダウンされてしまう。
【0013】
そこで、本発明は、複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法を提供することを目的とするものである。
【課題を解決するための手段】
【0014】
本発明はこの目的を達成するために、第1のクラスタから第2のクラスタに対してデータを転送する命令をライトし、第2のクラスタはこの命令に基づいて第1のクラスタから要求があったデータを第1のクラスタにライトすることによって、第1のクラスタから第2のクラスタにリード要求を発行することなく、第2のクラスタから第1のクラスタにデータがリアルタイムに転送できるようにしたものである。
【発明の効果】
【0015】
本発明によれば、本発明は、複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法を提供することができる。
【発明を実施するための形態】
【0016】
次に、本発明の実施形態について説明する。図1は本発明に係るストレージ装置を備える記憶システムのブロック図である。この記憶システムは、ストレージ装置10に、上位計算機としてのホスト計算機2A,2Bと、記憶デバイス4とが接続されることによって実現されている。
【0017】
ストレージ装置10は、ホスト計算機2Aが接続された第1のクラスタ6Aと、ホスト計算機2Bが接続された第2のクラスタ6Bとを備えている。両方のクラスタはそれぞれ独立してホスト計算機に対してデータストレージ処理を提供できるものである。すなわち、データストレージ制御用のコントローラがクラスタ6Aとクラスタ6Bによって構成されている。
【0018】
ホスト計算機2Aに対するデータストレージ処理は、クラスタ6A(クラスタA)によって提供されるほか、クラスタ6B(クラスタB)によっても提供される。ホスト計算機2Bについても同様である。そのために、二つのクラスタはデータストレージ処理を連携させるために、クラスタ間接続路12によって接続されている。第1のクラスタ(クラスタ6A)と第2のクラスタ(クラスタ6B)との間の制御情報やユーザデータの送受信は、この接続路12を介して行われる。
【0019】
クラスタ間接続路としては、例えば、1レーン片方向当たり(最大8レーン)のデータ転送量が2.5〔Gbit/sec〕と高速なデータ通信を実現するPCI(Peripheral Component Interconnect)-Express規格に準拠したバス及び通信プロトコルが適用される。
【0020】
クラスタ6Aとクラスタ6Bは、それぞれ同じデバイスを備えている。そこで、これらクラスタが備えるデバイスをクラスタ6Aに基づいて説明し、クラスタ6Bの説明を省略する。クラスタ6Aのデバイスとクラスタ6Bのデバイスとを、同一の算用数字で特定しながら、算用数字の後のアルファベットによって区別した。“**A”はクラスタ6Aのデバイスを示し、“**B”はクラスタ6Bのデバイスを示す。
【0021】
クラスタ6Aは、その全体の動作を制御するマイクロプロセッサ(MP)14Aと、ホスト計算機2Aとの通信制御を行うホストコントローラ16Aと、記憶デバイス4との間の通信制御を行うI/Oコントローラ18Aと、ホストコントローラと記憶デバイスとクラスタ間接続路とに対するデータ転送を制御するスイッチ回路(PCI-Express Switch)20Aと、MP14Aをスイッチ回路20Aに中継するブリッジ回路22Aと、ローカルメモリ24Aと、を備えている。
【0022】
ホストコントローラ16Aは、ホスト計算機2Aとの通信制御を行なうインターフェースを備えており、これは、複数の通信ポート及びホスト通信プロトコルチップを有する。通信ポートは、クラスタ6Aをネットワークやホスト計算機2Aに接続するためのものであり、例えば、IP(Internet Protocol)アドレスやWWN(World Wide Name)などの固有のネットワークアドレスが割り当てられている。
【0023】
ホスト通信プロトコルチップは、ホスト計算機2Aとの間の通信時におけるプロトコル制御を行う。このためホスト通信プロトコルチップとしては、例えば、ホスト計算機2Aとの間の通信プロトコルがファイバーチャネル(FC:Fibre Channel)プロトコルである場合にはファイバーチャネル変換プロトコルチップ、かかる通信プロトコルがiSCSIプロトコルである場合にはiSCSIプロトコルチップというように、ホスト計算機2Aとの間の通信プロトコルに適合したものが適用される。
【0024】
さらに、ホスト通信プロトコルチップには、複数のマイクロプロセッサとの間で通信を行い得るマルチマイクロプロセッサ機能が搭載されており、これにより、ホスト計算機2Aがクラスタ6AのMP14A、そして、クラスタ6BのMP14Bと通信を行えるようになっている。
【0025】
ローカルメモリ24Aは、システムメモリとキャッシュメモリとからなる。システムメモリとキャッシュメモリとを、図1のように、同一のデバイス上に搭載してもよいし、システムメモリとキャッシュメモリとを別なデバイスとしてもよい。
【0026】
システムメモリは、制御プログラムを格納するために用いられるほか、ホスト計算機2Aから与えられるリードコマンドやライトコマンド等の各種コマンドを一時的に保持するために用いられる。MP14Aは、ローカルメモリ24Aに格納されたリードコマンドやライトコマンドを、ローカルメモリ24Aにこれらが格納された順番で処理する。
【0027】
また、システムメモリ24Aには、クラスタ6A,6BのステータスやMP14Aが実行すべきマイクロプログラムが記録されている。ステータスとしては、マイクロプログラムの処理ステータス、マイクロプログラムのバージョン、ホストコントローラ16Aの転送リスト、I/Oコントローラの転送リストなどがある。
【0028】
MP14Aが自身のマイクロプログラムのステータスを、クラスタ6Bのシステムメモリ24Bに一定周期でライトするようにしてもよい。
【0029】
キャッシュメモリは、ホスト計算機2Aと記憶デバイス4間や、クラスタ6Aのクラスタ6Bとの間で送受信されるデータを一時的に記憶するために利用される。
【0030】
スイッチ回路20Aは、好適には、PCI-Express Switchからなり、クラスタ6Bのスイッチ回路20Bとの間のデータ転送と、クラスタ6A内の各デバイス間でのデータ転送をスイッチング制御する機能を備えている。
【0031】
また、スイッチ回路20Aは、クラスタ6AのMP14Aからの指示により、ホスト計算機2Aから与えられたライトデータをクラスタ6Aのキャッシュメモリ24Aにライトするとともに、接続路12と他のクラスタ6Bのスイッチ回路20Bとを介して、クラスタ6Bのキャッシュメモリ24Bにライトする機能を備える。
【0032】
ブリッジ回路22Aは、クラスタ6AのMP14Aを、同じクラスタのローカルメモリ24Aと、スイッチ回路20Aに接続するための中継装置としてものである。
【0033】
スイッチ回路(PCI-Express Switch)20Aは、PCI-Express規格のポート(PCIe)を複数備え、各ポートを介して、ホストコントローラ16A、I/Oコントローラ18Aと接続している他、ブリッジ回路22AのPCI-Express規格のポート(PCIe)にも接続している。
【0034】
スイッチ回路20Aには、NTB(Non-Transparent Bridge)26Aが実装されており、スイッチ回路20AのNTB26Aとスイッチ回路20BのNTB26Bとが接続路12によって接続されている。これによって、ストレージ装置10に複数のMPを配置することが可能になる。また、MP14Aは、NTBによってクラスタ6Bのアドレス空間にアクセスすることができる。
【0035】
本発明のストレージ装置がNTBを使用することによって、複数のクラスタ(ドメイン)を接続することが可能となる。換言すれば、一方のクラスタが他方のクラスタのメモリ空間を利用すること、即ち、複数のクラスタでメモリ空間を共有することができる。
【0036】
一方、ブリッジ回路22Aは、DMA(Direct Memory Access)コントローラ28Aと、RAIDエンジン30Aを備えている。DMAコントローラ28Aは、MP14Aを介することなく、クラスタ6Aのデバイス間でのデータ転送や、クラスタ6Bへのデータ転送を行う。
【0037】
RAIDエンジン30Aは、記憶デバイス4に格納されるユーザーデータに対して、RAID演算を実行するLSIである。ブリッジ回路22aは、ローカルメモリ24Aと接続されるポートを備えている。
【0038】
既述のとおり、MP14Aは、クラスタ6A全体の動作を制御する機能を有する。MP14Aは、ローカルメモリ24Aに格納されたライトコマンドやリードコマンドに応じて、予め自己に対して割り当てられた論理ボリュームに対するデータの読み書き等の処理を行う。また、MP14Aは、クラスタ6Bの制御も実行可能である。
【0039】
クラスタ6Aとクラスタ6BとのどちらのMP14A(14B)に対して論理ボリュームへのライト/リードを割り当てるかは、それぞれのマイクロプロセッサの負荷状況や、ホスト計算機から与えられる論理ボリュームごとの担当マイクロプロセッサを指定するコマンドの受信によって動的に変更することができる。
【0040】
I/Oコントローラ18Aは、記憶デバイス4との通信を制御するインターフェースであり、記憶装置との通信プロトコルチップを備える。このプロトコルチップとしては、例えば、記憶デバイスがFCハードディスクドライブである場合にはFCプロトコルチップであり、記憶デバイスがSASハードディスクドライブである場合にはSASプロトコルチップである。
【0041】
SATAハードディスクドライブを適用する場合には、記憶装置通信プロトコルチップ22A,22Bとして、FCプロトコルチップ又はSASプロトコルチップを適用でき、SATAハードディスクドライブにはSATAプロトコル変換チップを介して接続する構成とすることもできる。
【0042】
記憶デバイスは、複数のハードディスクドライブ、具体的にはFCハードディスクドライブ、SASハードディスクドライブ、SATAハードディスクドライブである。これら複数のハードディスクドライブが提供する記憶領域上には、データを読み書きするための論理的な記憶領域である論理ユニットが複数設定される。
【0043】
ハードディスクドライブに代えて、フラッシュメモリ等の半導体メモリや、光ディスク装置を適用することができる。また、フラッシュメモリとしては、安価で書込み速度が比較的低速であり、かつ、ライト回数制限が低い第1のタイプのものと、高価でライトコマンド処理が当該第1のタイプよりも高速であり、かつ、ライト回数制限が第1のタイプよりも高い第2のタイプとのいずれのタイプのフラッシュメモリを用いることもできる。
【0044】
RAID演算が、ブリッジ回路22AのRAIDコントローラ(RAIDエンジン)30Aによって実行されることを説明したが、これに代えて、MPがRAIDマネージャプログラムなどのソフトウエアによって実行されてもよい。
【0045】
図2は本発明が適用される第2の形態を説明するストレージ装置のハードウエアブロック図である。ストレージ装置からスイッチ回路20A(図1)を省略し、スイッチ回路のNTB用ポートをブリッジ回路22Aに持たせた点が、図1の実施形態と異なる点である。この実施形態では、ブリッジ回路22Aがスイッチ回路20Aの機能を兼ねている。ホストコントローラ16AとI/Oコントローラ18APCIポートによってブリッジ回路22Aに接続されている。
【0046】
図3は、さらに第3の実施形態に係るストレージ装置のハードウエアブロック図である。この実施形態は、スイッチ回路20Aを、DMAコントローラ28AとRAIDエンジン30Aを有するASIC(Application Specific Integrated Circuit)から構成し、これにキャッシュメモリ24A−2を接続した点と、ブリッジ回路22Aにシステムメモリ24A−1を接続した点とが、図1の実施形態と異なる点である。
【0047】
なお、図3のように、MP14Aに対して、ブリッジ回路22Aとスイッチ回路20Aを介して接続するキャッシュメモリ24A−2を、図1では、システムメモリと統合させローカルメモリ24Aとしているために、図1の実施形態は、MP14Aとキャッシュメモリ24Aとの間のレイテンシを削減できるものになっている。
【0048】
図3のように、スイッチ回路20AをASICによって構成することにより、コンプリーションタイムアウト時に、スイッチ回路22Aが、MP14Aによって実行されているマイクロプログラムにダミーコンプリーションを送信することによって、クラスタ6Aのシステムダウンを回避することができるが、本発明は、後述のように、クラスタ6Bからクラスタ6Aへのデータ転送をリード命令によらず、クラスタ6Aとクラスタ6B間のライト処理によって達成しているので、コンプリーションタイムアウトの発生がなく、スイッチ回路20AをASICではなく、汎用品(PCI Expressスイッチ)を備えたものから構成できる。
【0049】
次に、本発明に係るストレージ装置(図1)の動作例を、図4を利用して説明する。なお、この動作は図2及び図3においても同様である。
【0050】
ストレージ装置は、第1のクラスタが第2のクラスタからデータを取得する際、第1のクラスタが第2のクラスタからデータをリードするのではなく、第1のクラスタから第2クラスタのDMAに転送命令をライトして、第2のクラスタから第1のクラスタへ目的のデータをDMA転送する。
【0051】
図4は、第1のクラスタ6Aと第2のクラスタ6Bとの間での制御データやユーザデータのやり取りを説明するブロック図である。なお、以後DMAコントローラを“DMA”と略称する。
【0052】
クラスタ6AのMP14A、又は、クラスタ6BのMP14Bは、クラスタ6Bのシステムメモリ24Bに、DMA28Bへのデータ転送命令である転送リストを記述する(S1)。転送リストのライトは、クラスタ6Aがクラスタ6Bのステータスをリアルタイムに取得しようとする場合の他、ホスト計算機2A又は2Bから、ストレージ装置にリードコマンドが発行された場合などに発生する。この転送リストは、クラスタ6Bのシステムメモリ24Bのデータをクラスタ6Aのシステムメモリ24AにDMA転送すること規定する制御情報を備えている。
【0053】
次いで、MP14Aが実行するマイクロプログラムが、クラスタ6BのDMA28Bを起動する(S2)。起動されたDMA28Bは、システムメモリ24Bに設定された転送リストを読み取る(S3)。
【0054】
DMA28Bは、読みとった転送リストにしたがって、クラスタ6Bのシステムメモリ24Bからクラスタ6Aのシステムメモリ24Aに目的のデータのライトを発行する(S4)。
【0055】
なお、クラスタ6Aがクラスタ6Bのユーザデータを必要とする場合には、MP14BはHDD4からローカルメモリ24Bのキャッシュメモリに目的データをステージングしておく。
【0056】
DMA28Bは、DMA転送終了を表すコンプリーションライトをシステムメモリ24Aの所定エリアに書き込む(S5)。
【0057】
クラスタ6Aのマイクロプログラムは、メモリ24Aに書き込まれたクラスタ6BからのDMA転送完了のコンプリーションライトをリードすることでデータの移動が完了したことを確認する(S6)。
【0058】
なお、クラスタ6AのマイクロプログラムがDMA転送完了に関するコンプリーションライトを一定時間経過しても得ることができない場合は、クラスタ6Aは、クラスタ6B側に何らかの障害が発生したと判定し、以後、クラスタ6Bのジョブを代行するなど、耐障害時の処理を継続する。
【0059】
以上によって、ストレージ装置では、ライトのみでクラスタ間でのデータ移動が可能となる。ライトはリードと比較して、MPを拘束する時間が短い。リードコマンドを発行したMPはリード結果が得られるまでその他の処理が停止されるのに対して、ライトコマンドが発行された時点でMPは開放される。
【0060】
また、クラスタ6Bに何らかの障害があっても、コンプリーションタイムアウトは発生しない。したがって、ストレージ装置はクラスタ6Aのシステムダウンを避けることができる。
【0061】
クラスタ6Aがクラスタ6Bのデータをリードすることを、クラスタ6Aからクラスタ6BのDMA28Bへ転送リストをライトし、クラスタ6BのDMA28Bによるクラスタ6AへのDMAデータ転送を実現するために、システムメモリ6Aには複数の制御テーブルが設定されている。システムメモリ6Bについても同様である。
【0062】
この制御テーブルを図5にしたがって説明する。クラスタ6Aのシステムメモリ24Aに示すように、制御テーブルには、転送リストを格納するDMAディスクリプターテーブル(DMA Descriptor Table)と、DMAのステータスを格納するDMAステータステーブル(DMA Status Table)と、DMA転送の終了を意味するコンプリーションライトを格納するDMAコンプリーションステータステーブル(DMA Completion Status Table)と、DMAに対する使用権が、複数のマスタで競合した場合、マスタ間での優先度を格納するDMA優先度テーブルとが、が存在する。
【0063】
クラスタ6AのDMA28Aは、クラスタ6A内でのデータ転送の他、クラスタ6Bへのデータのライトを実行するものである。したがって、DMA ディスクリプターテーブルには、自クラスタ(クラスタ6A)のDMAに自クラスタ内でのデータ転送のための転送リストであるテーブル(A-1)と、自クラスタ(クラスタ6A)のDMAに他クラスタ6Bへデータを転送するための転送リストであるテーブル(A−2)とが存在する。テーブルA−2は、クラスタ6Bによってライトされる。
【0064】
また、DMAステータステーブルには、クラスタ6AのDMA28A用のステータステーブルと、クラスタ6BのDMA28B用テーブルがある。そして、クラスタ6AのDMA28Aは、クラスタ6Bによってライトされた転送リストに応じて、クラスタ6Aのデータをクラスタ6Bにライトし、これとは反対に、クラスタ6BのDMA28Bは、クラスタ6Aからライトされた転送リストに応じて、クラスタ6Bのデータをクラスタ6Aにライトする。
【0065】
クラスタ6Aとクラスタ6Bとの間のライト処理を制御するために、クラスタ6AのDMA用のステータステーブルと、クラスタ6BのDMA用テーブルとのそれぞれにクラスタ6Aによってライトされる、あるいはクラスタ6Bによってライトされるかの分類がある。
【0066】
A−3は自クラスタ(クラスタ6A)によってライトされ、クラスタ6AのDMAに対して割り当てられたステータステーブルである。
【0067】
A−4は、自クラスタによってライトされ、クラスタ6BのDMA28Bに対して割り当てられたステータステーブルである。
【0068】
A−5は、クラスタ6Bによってライトされ、クラスタ6BのDMA28Bに割り当てら得たステータステーブルであり、A−6は、クラスタ6Bによってライトされ、クラスタ6AのDMA28Aに割り当てられたステータステーブルである。
【0069】
DMAのステータスには、そのDMAがデータ転送に使用されているのかいないのかに関する情報と、そのDMAに転送リストが設定中か否かに関する情報とがある。DMAのステータスを示す複数ビットからなる信号のうちbit[0]に“1”(in use flag)が設定されていることは、そのDMAがデータ転送に使用されていることを示す。
【0070】
そして、bit[1]に“1”(standby flag)が設定されていることは、そのDMAに転送リストが設定中であることを示す。両方のフラグが設定されていないことは、そのDMAはデータ転送に関与していないことを示している。
【0071】
クラスタ6Aのシステムメモリのメモリ空間にマッピングされた既述のステータステーブルをさらに具体的に説明すると、次のとおりである。
【0072】
A-3 bit[0]:“in use flag” クラスタ6Aのライト用であって、自クラスタ(クラスタ6A)が自クラスタのDMA28Aを、使用しているかどうかを示す。
【0073】
A-3 bit[1]:“standby flag” クラスタ6Aのライト用であって、自クラスタが自クラスタのDMA28Aを、設定中かどうかを示す。
【0074】
A-4 bit[0]:“in use flag”クラスタ6Aのライト用であって、自クラスタがクラスタ6BのDMAを、使用しているかどうかを示す。
【0075】
A-4 bit[1]:“standby flag”クラスタ6Aのライト用であって、自クラスタがクラスタ6BのDMAを、設定中かどうかを示す。
【0076】
A-5 bit[0]:“in use flag”クラスタ6Bのライト用であって、クラスタ6B(別クラスタ)がクラスタ6B自身のDMA28Bを、使用しているかどうかを示す。
【0077】
A-5 bit[1]:“standby flag”クラスタ6Bのライト用であって、クラスタ6BがDMA28Bを設定中かどうかを示す。
【0078】
A-6 bit[0]:“in use flag” クラスタ6Bのライト用であって、クラスタ6Aが別クラスタ(クラスタ6B)のDMA28Bを使用しているかどうかを示す。
【0079】
A-6 bit[1]:“standby flag”クラスタ6Bのライト用であって、クラスタ6Aが別クラスタ(クラスタ6B)のDMA28Bを、設定中かどうかを示す。
【0080】
図5は、DMA28AとDMA28Bが1channelしかないことを前提としており、そうすると、二つのクラスタから、同じDMAを同時に使用することができない。そこで、DMAがどちらのクラスタに属するか、DMAへ転送リストがどちらのクラスタからライトされるかなどによって区別したステータステーブルを備え、二つのクラスタからDMAへの競合するアクセスを制御することとした。
【0081】
このようにDMAについての排他制御を実施するためには、クラスタ6Aからクラスタ6BのDMAの使用状況を確認する必要がある。このとき、クラスタ6Aがクラスタ間接続12を介してクラスタ6Bの“インユースフラグ”をリードした場合、レイテンシは極めて大きくクラスタ6Aの性能劣化に繋がる。
【0082】
そこで、ストレージ装置10は、“インユースフラグ”を含むDMAステータステーブルを、(A/B-3,4,5,6)のように、各クラスタのローカルメモリ中に設定した。
【0083】
図5のA−7は、クラスタ6AのDMA28Aによって“コンプリーションステータス”がライトされるテーブルであり、A−8は、クラスタ6BのDMAによって“コンプリーションステータス”がライトされるテーブルである。前者のテーブルは、クラスタ6Aの内部データ転送用としてのものであり、後者のテーブルは、クラスタ6Bからクラスタ6Aへのデータの転送用としてのものである。
【0084】
さらに、A−9は、クラスタ6AのDMA28Aに対して、複数のマスタ間での優先度を設定するためのテーブルであり、A−10は、クラスタ6BのDMA28Bに対して、複数のマスタ間での優先度を設定するためのテーブルである。
【0085】
マスタとは、DMAのデータ転送を実現するためのソフトウエア上の制御手段であり、マスタが複数存在する場合、DMAの転送ジョブは各マスタによって達成され、そして制御される。複数のマスタに依るジョブがDMAに競合した場合の調整手段が優先度テーブルである。
【0086】
クラスタ6Aのシステムメモリ24Aに格納された既述のテーブルは、クラスタ6AのMP14A、クラスタ6BのMP14Bによって、システムブート時、ストレージデータ処理時などに、設定あるいは更新されている。クラスタ6AのDMA28Aはシステムメモリ24Aのテーブルをリードして、クラスタ6A内でのDMA転送、クラスタ6BへのDMA転送を実行する。
【0087】
次に、クラスタ6Aがクラスタ6BのDMAからデータの転送を受ける処理の流れを、図6に示すフローチャートに従って説明する。クラスタ6AのMP14Aがクラスタ6BのDMA28Bを利用しようとすると、MP14Aは、マイクロプログラムを実行して、クラスタ6BのDMA28Bのステータスに係る領域のテーブルの“インユースフラグ”(A-4,5のbit[0])をそれぞれリードし、これがともに“0”か否かを判定する(600)。
【0088】
これを否定する場合は、クラスタ6BのDMAが使用されているとして、両フラグの値が“0”になるまで、すなわち、このDMAが未使用状態になるまでステップ600を繰り返し実行する。
【0089】
次いで、ステップ602において、MP14Aは、クラスタ6Bにアクセスし、そのローカルメモリのステータステーブルのB-6のbit[1]に“スタンドバイフラグ”として“1”を設定し、クラスタ6BのDMA28Bに対する転送リストの設定権を得る。
【0090】
また、ローカルメモリ24AのステータステーブルのA-4bit[1]に、“スタンドバイフラグ”である“1”をライトする。スタンドバイフラグが立っていることは、クラスタ6Aがクラスタ6BのDMA28Bを設定中であることを示している。
【0091】
次いで、MP14Aは、クラスタ6BのDMA28Bのステータスに係る領域A-5bit[1]をリードして、“スタンドバイフラグ”が“1”であるか否かを判定する(604)。
【0092】
このフラグが“0”の場合は、他のマスタもDMA28Bに対して転送リストの設定権を有していないと判定してステップ606に移行する。
【0093】
一方、このフラグが“1”であり、クラスタ6Aとクラスタ6Bとが同時にクラスタ6BのDMA28Bの使用権を所有する場合、ステップ604からステップ608に移行し、クラスタ6Aの優先度がクラスタ6Bのマスタの優先度より高い場合は、クラスタ6Aのマスタは、ステップ608からステップ606にリターンして、クラスタ6BのDMA28Bからクラスタ6Aへのデータ転送を実行しようとする。
【0094】
一方、クラスタ6Bのマスタの優先度が高い場合には、クラスタ6Bのマスタは、クラスタ6Aのマスタからクラスタ6BのDMA28Bへのデータ転送命令は実行できないとしてDMAエラーをクラスタ6Aのマイクロプログラム、マスタに通知する(611)。
【0095】
ステップ606においては、MP14は、クラスタ6Bのローカルメモリ24BのステータステーブルのB-4,6bit[0]に“インユースフラグ”=“1”を設定し、クラスタ6BのDMA28Bに対する使用権を確保する。
【0096】
次いで、ステップ608において、MP14Aは、クラスタ6Bのローカルメモリ24BのDMAディスクリプターテーブルに転送リストを設定する。
【0097】
さらに、MP14は、メモリ6BのDMA28Bを起動し、起動されたDMA28Bは、転送リストを読み取り、読み取った転送リストをもとにシステムメモリ24ABのデータをリードしてリードしたデータをクラスタ6Aのローカルメモリ24Aに転送する(610)。
【0098】
DMA28Bがクラスタ6Aに対してデータを正常にライトすると、DMA28Bは、システムメモリ24のクラスタBのDMA28Bに対して割り当てられコンプリーションステータステーブルにコンプリーションライトを書き込む。
【0099】
次いで、MP14Aは、このテーブルのコンプリーションステータスをテェック、すなわちCompletionライトが書き込まれているか否かをチェックする(612)。
【0100】
コンプリーションライトが書き込まれている場合には、クラスタ6Bからクラスタ6Aへデータ転送が正しく行われたと判断して、ステップ614に進む。
【0101】
ステップ614では、MP14Aは、システムメモリ24BのステータステーブルB-6(クラスタ6Aによってライトされ、クラスタ6BのDMAのステータスを示すテーブル)とクラスタ6Aのシステムメモリ24AのステータステーブルA-4(クラスタ6Aによってライトされ、クラスタ6BDMAのステータスを示すテーブル)のインユースフラグに関係するbit[0]に“0”に設定する。
【0102】
次いで、ステップ616では、これらのテーブルのスタンドバイフラグに関係するbit[1]に“0”を設定して、クラスタ6AのDMA28Bに対するアクセス権を開放する。
【0103】
なお、クラスタ6Bが自身のDMA28Bを使用する場合は、A-5,B-3のbit[0]に“1”を設定し、クラスタ6B自身がクラスタ6BのDMA28Bの使用権を所持していることを他のマスタに対して明らかにする。
【0104】
ステップ612において、MP14Aがコンプリーションライトを確認できない場合には、MP14はタイムアウトを判定して(618)、DMA28Bの転送エラーをユーザに通知する(610)。
【0105】
次に図6のクラスタ6AのMP14Aがクラスタ6BのDMA28Bに転送リストを設定してからDMA28Bを起動するまでの処理について補足説明を加える。
【0106】
図7は転送リストの一例であり、MP14Aは、転送リストフォーマットにしたがって転送リストをシステムメモリ28Bに設定する。この転送リストは、転送オプションと、転送サイズと、データの転送元となるシステムメモリ24Bのアドレスと、データ転送先となるシステムメモリ24Aのアドレスと、次の転送リストのアドレスと、を含んでいる。これらはオフセットアドレスによって定義され。転送リストは、キャッシュメモリに格納されてもよい。オフセットアドレスにベースアドレスを適用することによって、メモリ空間のアドレスが決まる。
【0107】
MP14Aが、転送リストをクラスタ6Bのローカルメモリ24Bに設定する際は、DMAのレジスタ(ディスクリプターアドレス)にディスクリプター(転送リスト)を配置したメモリ空間上のアドレスを設定する。このレジスタに対するアドレス設定テーブルの一例を図8に示す。
【0108】
DMA28Bはこのレジスタを参照して、ローカルメモリ中に転送リストが格納されているアドレスを知り、転送リストにアクセスする。図8において、サイズはこのアドレスへ格納可能なデータ量である。
【0109】
MP14AがDMA28Bを起動する際には、DMA28Bに対するレジスタ(スタートDMA)にスタートフラグをライトする。DMA28Bはこのレジスタにスタートフラグが設定されると起動し、データの転送処理を開始する。図9はこのレジスタの一例であり、オフセットアドレス値は、レジスタのメモリ空間上のアドレスであり、サイズはこのアドレスへ格納可能なデータ量である。
【0110】
クラスタ6Aへのコンプリーションライトのためのアドレスの設定は、NTBのMIMIO領域を利用して、クラスタ6BのDMAのMMIO領域に対して行なわれる。そして、MP14Aは、DMA28Bがデータ転送後、コンプリーションライトを発行するローカルメモリ24Aのアドレスを図10に示すレジスタ(コンプリーションライトアドレス)に設定する。この設定はDMA28Bからのデータ転送開始前に終了していなければならない。オフセットアドレスの値は、レジスタのメモリ空間上の位置であり、サイズはこのアドレスへ格納可能なデータ量である。
【0111】
クラスタ6Aは、クラスタ6BからのDMA転送完了後、DMA28Bのアボートによるエラー通知のコンプリーションステータスライトを書き込む領域を、既述とおり、DMAコンプリーションステータステーブル(A−8)として、システムメモリ24Aに設けている。
【0112】
ストレージ装置のDMAには、DMA転送の完了又はエラーを転送先のクラスタに通知する方式として、割り込みではなく、コンプリーションステータスライト機能が実装されている。
【0113】
なお、本発明は割り込み方式を否定するものではなく、ストレージ装置が同方式を採用してクラスタ6Bからクラスタ6AへDMA転送完了通知を実行するものであってもよい。
【0114】
クラスタ6Bからクラスタ6Aへのデータ転送を行う際、コンプリーションライトをクラスタ6Bのメモリに書き込み、これをクラスタ6Aからリードしにゆくと、このリードがクラスタ間の接続手段を跨がなくてはならないために、レイテンシが大きくなってしまうという問題が存在する。
【0115】
そこで、クラスタ6Aのメモリ24Aにコンプリーションステータス領域を予め確保しておき、クラスタ6Aのマスタが、この領域にライトアクセスするのをソフトウエアによって制限しながら、クラスタ6BのDMA28Bからのコンプリーションライトをこの領域に対して実行し、クラスタ間でのリードが行われることなく、クラスタ6Aのマスタがこの領域をリードすることによって、クラスタ6Bからクラスタ6AへのDMA転送が完了することを確認できるようにした。
【0116】
図6のステップ604とステップ608において、クラスタ6A及びクラスタ6Bのマスタが同時にクラスタ6Bの1チャンネルのDMA28Bにアクセス権を有している場合、優先度が高いマスタにDMAの使用権を割り当てることを説明している。
【0117】
これは、ストレージ装置10は、クラスタ6Aに、クラスタ6B側のDMA28Bにライトアクセスする権利を認めたが、DMA28Bがクラスタ6Aとクラスタ6Bの双方から使用されようとすると、DMA28Bが競合状態に陥り、DMAの正常な動作が保証されないため、これを防ぐ目的からである。なお、優先度に関する処理の詳細については後述する。
【0118】
一方、DMAの実装数が増大し、全てのDMAに対してクラスタ6Aとクラスタ6Bからのアクセスを認めとすると、この排他処理が各DMAについて必要となり、処理が複雑となってストレージ装置のI/O処理性能が劣化するおそれが生じる。
【0119】
そこで、クラスタに複数のチャネルからなるDMAが存在する形態において、優先度に基づく排他処理に代わる、複数のマスタのDMAに対する競合を避けることができるシステムが次に説明する実施形態である。
【0120】
図11にこの実施形態を説明する。ストレージ装置の各クラスタには、複数のDMA、例えば、4チャンネルを有するDMAが存在する。ストレージ装置は、クラスタ6Aの複数のDMAのうちDMAチャンネル1とDMAチャンネル2に対するアクセス権をクラスタ6Aのマスタに認め、同様に、DMAチャンネル3とDMAチャンネル4をクラスタ6Bのマスタに割り当てている。
【0121】
さらに、クラスタ6Bの複数のDMAのうちDMAチャンネル1とDMAチャンネル2とをクラスタ6Aのマスタに割り当て、DMAチャンネル3とDMAチャンネル4とをクラスタ6Bのマスタに割り当てている。このような割り当ては、クラスタ6A,6Bのソフトウエアコーディング時に設定される。
【0122】
したがって、クラスタ6Aとクラスタ6Bとのそれぞれにおいて、クラスタ6Aのマスタとクラスタ6Bのマスタとが一つのDMAに対してアクセス権を競合させることがないようにしている。
【0123】
クラスタ6Aの複数のDMAのそれぞれには、図11の矢印に示す様に、同一クラスタ内のシステムメモリ24Aに格納されたテーブルが割り当ている。クラスタ6Bについても同じである。
【0124】
クラスタ6Aのマスタは、DMAチャンネル1又はDMAチャンネル2を使用して、転送リストテーブル(自クラスタライト用/自クラスタ(クラスタ6A)のDMAディスクリプターテーブル)(A−1)を参照して、クラスタ6A内でのDMA転送を行い、転送リストテーブル(クラスタ6Bライト用/自クラスタ(クラスタ6A) のDMAディスクリプターテーブル)(A−2)を参照してクラスタ6BへのDMA転送を行う。
【0125】
このとき、クラスタ6Aのマスタは、前者の転送では、システムメモリ24Aのクラスタ6A用DMAステータステーブル(A−3)を参照し、後者の転送では、システムメモリ24Aのクラスタ6B用DMAステータステーブル(A−4)を参照する。
【0126】
クラスタ6Bのマスタは、クラスタ6Aのデータを必要とする場合、クラスタ6AのDMAチャンネル3又はDMAチャンネル4のレジスタに起動フラグをライトする。
【0127】
すると、クラスタ6AのDMAチャンネル3は、クラスタ6B用テーブル110に格納された転送リストにしたがって、クラスタ6Aからクラスタ6BにデータをDMA転送する。また、クラスタ6AのDMAチャンネル4は、クラスタ6B用テーブル112に格納された転送リストにしたがって、クラスタ6Aからクラスタ6BにデータをDMA転送する。
【0128】
これらテーブルには、クラスタ6Bのマスタによって、転送リストが設定あるいは更新される。
【0129】
クラスタ6Bにおいては、DMAチャンネル1及びDMAチャンネル2に、クラスタ6Aのマスタのアクセス権が割り当てられている。DMAチャンネル3とDMAチャンネル4にクラスタ6Bのマスタの専有権が認められている。テーブルとDMAチャンネルとの割り当ては、図に示す矢印のとおりである。
【0130】
次に、既述の優先度について説明する。図12は、DMAに複数のマスタのアクセスが競合した場合の優先度を規定する優先度テーブルを示すものである。物理的に1つしかないDMAを2つ以上のマスタが同時に起動・使用することは不可能であるため、優先度テーブルによって、マスタのDMAに対する使用権に優先度を設定することにしたものである。
【0131】
図12はクラスタ6AのDMA28A(図5参照)についての優先度テーブルA−9,B−10(図5)のフォーマットを示すものであり、図13はクラスタ6BのDMA28B(図5参照)についての優先度テーブルA−10,B−9のフォーマットを示すものである。このテーブルは、マスターを特定するバリューと、優先度の設定を含んでいる。小さい数値ほど優先度が高いことを示している。優先度は、一つのDMAに対するクラスタ6A,6Bの複数のマスタ間の優先度の優劣として定義されるものである。
図14は、クラスタ6Aのマスター0、マスター1とクラスタ6Bのマスター0とマスター1の合計で4マスタを定義するテーブルである。マスターは、図14に示す様に2ビット(バリュー)によって特定される。マスター定義用として合計で8ビット存在するために(図12参照)、図15に示す様に、優先度テーブルにはそれぞれ2ビットで特定される4つのマスターを優先度順にマッピングする。
【0132】
図15はクラスタ6Aのマスタ28Aについての優先度テーブルである。この優先度テーブルによれば、優先度の大小は、クラスタ6Aのマスター1>クラスタ6Aのマスター0>クラスタ6Bのマスター0>クラスタ6Bのマスター1の順である。
【0133】
したがって、クラスタ6Aのマイクロプログラムは、DMAに複数のマスタのアクセスが競合した場合、この優先度テーブルを参照して、優先度が最も高いマスタに対してアクセス権を認める。
【0134】
優先度のレベルはマスタの個数分用意する。既述の例では、クラスタ6Aにマスタが2、クラスタ6Bにマスタが2存在することを前提にして優先度のレベルを4段階にしている。マスタがこれより増える場合には、優先度のレベルを増やすため、優先度を設定するためのビット数を増加させる。
【0135】
マイクロプログラムは、DMAに対して複数のマスタが競合したことを、このDMAに対する複数のステータテーブルにそれぞれスタンドバイフラグ“1”がセットされることによって判定する。例えば、図5において、A−3とA−6の双方においてスタンドバイフラグがセットされている状態である。
【0136】
一方、ストレージ装置には、一旦優先度を設定した後に、優先度の変更を要するケースが発生する。例えば、クラスタ6Aにおいてファームウエアを交換する場合、ファームウエア高環中クラスタ6Aのマスタは、DMA28Aを一切使用しない。
【0137】
そこで、クラスタ6AのDMAをクラスタ6Bのマスタに対して一時優先して割り当てることによって、クラスタ6Bがクラスタ6AのDMAを使用するための待ち時間を低減させる。
【0138】
優先度テーブルの設定はストレージ装置のブート時である。ストレージ装置の起動時に、ソフトウェアによって、優先度テーブルが各クラスタのメモリに書き込まれる。この書き込みは、優先度テーブルが割り当てられたDMAが属するクラスタの側から行われる。例えば、テーブルA−9はクラスタ6Aのマイクロプログラムによって行われ、テーブルA−10は、クラスタ6Bのマイクロプログラムによって行われる。
【0139】
各クラスタに複数のマスタが存在しても、既述の優先度の設定・変更・更新はそのうちの一つのマスタによって行われる。この権限がないマスタが優先度を変更しようとする場合は権限があるマスタに優先度の変更を依頼する。
【0140】
次に、図16に基づいて優先度を変更するフローチャートについて説明する。優先度の変更処理のジョブは優先度変更対象DMAを特定することを含む(1600)。
【0141】
このDMAが属するクラスタに複数あるマスタは、このジョブの実行権限をランダムに選択して、優先度変更の権限があるか否かを判定する(1602)。この判定が否定された場合は、権限があるマスタに優先度変更ジョブを渡す(1604)。
【0142】
この判定が肯定されると、優先度変更の権限があるマスタは、優先度が変更されるDMAに割り当てられたステータステーブルのインユースフラグが“1”であるかを判定し、“1”である場合には、DMAがデータ転送に使用されているために優先度を変更すべきではないため、このフラグが“0”になるまで処理を繰り返す(1606)。
【0143】
対象のDMAがデータ転送を終了すると、このDMAについてデータが転送されるとインユースフラグは解放されて“0”になり、ステップ1606を通過し、次いで、マスタはこのDMAに割り当てられたステータステーブルのスタンドバイフラグに“1”を設定して、このDMAに対するアクセス権を確保する(1608)。
【0144】
ステップ1610において、優先度変更ジョブを実行するマスタが属するクラスタのメモリに格納され、別マスタのライト用優先度変更対象DMAのステータステーブルに、ジョブ実行中マスタとは別マスタによってスタンドバイフラグが設定されているとき、優先度変更ジョブ実行中マスタは、当該マスタがライトする対象DMAの優先度変更テーブルを参照し、別マスタの優先度と優先度変更ジョブを行うマスタの優先度を比較し、前者の優先度が高い場合にはステップ1620に移行する。
【0145】
ステップ1620では、優先度変更ジョブ実行中マスタは、対象DMAへの転送リストが別マスタによって設定中であるため、ジョブ実行中マスタによって設定された対象DMAのスタンドバイフラグを解放、すなわちこれを“0”にし、次いで、別DMAについて優先度の設定・変更・更新の開始処理へ移行し(1622)、ステップ1602にリターンする。
【0146】
一方、ステップ1610の処理おいてジョブ実行中のマスタの方が優先度が高い場合、このマスタは、当該マスタのライト用の対象DMAのステータステーブル、及び、別マスタライト用の“対象DMA”のインユースフラグに“1”に設定し、対象DMAを優先度変更処理にロックする(1612)。
【0147】
次のステップ1614では、ジョブ実行中のマスタは、クラスタに属する全てのDMAについてのインユースフラグに,DMAの使用中を示す“1”が設定されている場合は、クラスタに属する全DMAに対するロックが完了したとして、このクラスタに属する全DMAに対して優先度変更処理を行い、その後全DMAに割り当てられたフラグをクリアして、全DMAを優先度変更処理から解放する。
【0148】
以上によって、複数のクラスタに属する全てのDMAに対して優先度変更・更新処理が完了する。
【0149】
図17は図11の変形例であり、各クラスタのマスタにそれぞれDMAのチャンネルを割り当てる方式のものである。システム全体のDMAチャンネル数が、システム全体のマスタ数以下の場合に好適な方式のものである。
【0150】
クラスタA(6A)のプロセッサ14Aには、マスタ1及びマスタ2が稼働している。クラスタB(6B)についても同様である。
【0151】
クラスタAのDMAチャンネル1はクラスタAのマスタ1によって使用され、DMAチャンネル2はクラスタAのマスタ2によって使用され、DMAチャンネル3はクラスタBのマスタ1によって使用され、DMAチャンネル4はクラスタBのマスタ2によって使用される。
【0152】
一方、クラスタBのDMAチャンネル1はクラスタAのマスタ1によって使用され、DMAチャンネル2はクラスタAのマスタ2によって使用され、DMAチャンネル3はクラスタBのマスタ1によって使用され、DMAチャンネル4はクラスタBのマスタ2によって使用される。
【0153】
クラスタAのメモリ24AとクラスタBのメモリ24Bとには、各DMAチャンネル用の制御テーブルが存在し、この制御テーブルにはDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0154】
クラスタAのメモリ24Aには、クラスタAの各DMAチャンネル用の制御テーブルが存在し、チャンネル1及び2用のテーブルには、自クラスタ(クラスタA)によってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0155】
そして、クラスタAのチャンネル3及び4用のテーブルには、クラスタBによってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0156】
一方、クラスタBのメモリ24BAには、クラスタBの各DMAチャンネル用の制御テーブルが存在し、チャンネル1及び2用のテーブルには、クラスタAによってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0157】
そして、クラスタBのチャンネル3及び4用のテーブルには、クラスタBによってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
既述の実施形態では、クラスタ6Bからクラスタ6AにデータがDMA転送によってライトされることを説明したが、この逆も勿論可能である。既述の実施形態では二つのクラスタ間のデータ転送をDMAによって行うことを説明したが、これに限られるものではない。
【0158】
本発明は、ホスト計算機に対してデータストレージサービスを提供する処理手段としてのクラスタを複数有し、ユーザに対してのデータ処理サービスの冗長性を高めたストレージ装置に利用可能であり、特に、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法に利用可能である。
【図面の簡単な説明】
【0159】
【図1】本発明に係るストレージ装置の一例を備える記憶システムのハードウエアブロック図である。
【図2】第2の実施形態に係るストレージ装置を備える記憶システムのハードウエアブロック図である。
【図3】第3の実施形態に係るストレージ装置を備える記憶システムのハードウエアブロック図である。
【図4】図1のストレージ装置におけるデータ転送の流れの説明が付された記憶システムのハードウエアブロック図である。
【図5】図1のストレージ装置のローカルメモリ内の制御テーブルの詳細を説明するブロック図である。
【図6】図1のストレージ装置におけるデータ転送の流れを説明するフローチャートである。
【図7】転送リストの一例を示すテーブルである。
【図8】転送リストを格納したアドレスをDMAコントローラに対して設定するためのレジスタのテーブル構成の一例である。
【図9】起動要求を格納したアドレスをDMAコントローラに対して設定するためのレジスタのテーブル構成の一例である。
【図10】コンプリーションステータスをDMAに対して設定するためのレジスタのテーブル構成の一例である。
【図11】ローカルメモリに複数存在するDMAコントローラと複数の制御テーブルとの対応関係を示したブロック図である。
【図12】第1のクラスタの優先度テーブルの一例である。
【図13】第2のクラスタの優先度テーブルの一例である。
【図14】複数のマスタを特定するためのテーブルの一例である。
【図15】複数のマスタがマッピングされて、その優先度が規定された優先のテーブルの一例である。
【図16】DMAコントローラに対する複数マスタの優先度を変更するためのフローチャートである。
【図17】図11の変形例に係るブロック図である。
【符号の説明】
【0160】
2A,2B ホスト計算機
6A,6B クラスタ
10 ストレージ装置
12 クラスタ間の接続路
14A,14B マイクロプロセッサ(MP又はCPU)
20A、20B スイッチ回路(PCI Expressスイッチ)
22A ブリッジ回路
24A,24B ローカルメモリ
26A,26B NTBポート
28A,28B DMAコントローラ
【技術分野】
【0001】
本発明は、ストレージ装置に係わり、特に、ホスト計算機に対してデータストレージサービスを提供する処理手段としてのクラスタを複数有し、ユーザに対してのデータ処理サービスの冗長性を高めたストレージ装置に関するものである。本発明はさらにストレージ装置のデータ転送制御方法に関するものである。
【背景技術】
【0002】
ホスト計算機に対してデータストレージサービスを提供する計算機システムとしてのストレージ装置には、データ処理に信頼性を持たせることと、データ処理のための応答性を向上させることが求められている。
【0003】
そこで、ストレージ装置では、ホスト計算機に対するデータストレージサービスを提供するコントローラを複数のクラスタから構成することが提案されている。
【0004】
この種のストレージ装置では、一方のクラスタが受信したコマンドに基づく処理を、そのクラスタが備えるプロセッサと他方のクラスタが備えるプロセッサとによって実行できるために、データ処理の高速化を達成できる。
【0005】
一方、複数のクラスタがストレージ装置に存在するために、一方のクラスタに障害が発生しても、他方のクラスタがその障害を補ってデータ処理を継続できるために、データ処理機能が冗長化できるという利点がある。複数クラスタを備えたストレージ装置は、例えば、特開2008−134776号公報に記載されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2008−134776号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
この種のストレージ装置では、複数のクラスタ間でデータ処理を連携させるために、複数クラスタ相互間で相手のクラスタのステータスを確認する必要がある。そこで、例えば、一方のクラスタはマイクロプログラムのステータスを他方のクラスタに一定周期でライトするようにしている。
【0008】
また、一方のクラスタが他方のクラスタのステータスに関する情報がリアルタイムに必要な場合は、他方のクラスタに直接アクセスしてそのステータス情報をリードするようにしている。
【0009】
ところで、一方のクラスタが他方のクラスタからでデータをリードする方式では、リードが複数のクラスタを跨った処理であるために、リードの発行元クラスはリードの発行先クラスタからリード結果が帰ってくるまで他の処理ができない。リード処理は4バイト単位で行われるものであり一度に大量のステータスのリードは、大きな性能劣化に繋がる。これでは、複数のクラスタを連携させてデータ処理を迅速に行おうとする、複数クラスタ型ストレージ装置の目的を達成することができないことになる。
【0010】
さらに、この課題は、複数のクラスタ間をPCI-Expressで接続した場合により顕著となる。すなわち、第1のクラスタから第2のクラスタのメモリにリードリクエストを発行すると、第2のクラスタから第1のクラスタにリードデータがコンプリーションとして応答される。第1のクラスタからリードリクエストが発行されると、クラスタ同士を接続するPCI-Expressポートでのデータ通信がタイマーによって管理される。
【0011】
第1のクラスタからのリードリクエストに対して、第2のクラスタから一定時間内に、コンプリーションが発行できないと、PCI-Expressポートに対してコンプリーションタイムアウトが第1のクラスタによって判定され、PCI-Expressポートがエラー状態にあるとしてこれを閉塞してしまう。
【0012】
このとき、コンプリーションを発行できない第2のクラスタ側に障害が発生しているため、ホスト計算機からのI/Oを第1のクラスタが処理しなければならないが、コンプリーションタイムアウトが発生したことで、第2クラスタに連れて第1のクラスタも強制的に障害状態にあると管理計算機によって判定されて、ストレージ装置の全体システムがダウンされてしまう。
【0013】
そこで、本発明は、複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法を提供することを目的とするものである。
【課題を解決するための手段】
【0014】
本発明はこの目的を達成するために、第1のクラスタから第2のクラスタに対してデータを転送する命令をライトし、第2のクラスタはこの命令に基づいて第1のクラスタから要求があったデータを第1のクラスタにライトすることによって、第1のクラスタから第2のクラスタにリード要求を発行することなく、第2のクラスタから第1のクラスタにデータがリアルタイムに転送できるようにしたものである。
【発明の効果】
【0015】
本発明によれば、本発明は、複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法を提供することができる。
【発明を実施するための形態】
【0016】
次に、本発明の実施形態について説明する。図1は本発明に係るストレージ装置を備える記憶システムのブロック図である。この記憶システムは、ストレージ装置10に、上位計算機としてのホスト計算機2A,2Bと、記憶デバイス4とが接続されることによって実現されている。
【0017】
ストレージ装置10は、ホスト計算機2Aが接続された第1のクラスタ6Aと、ホスト計算機2Bが接続された第2のクラスタ6Bとを備えている。両方のクラスタはそれぞれ独立してホスト計算機に対してデータストレージ処理を提供できるものである。すなわち、データストレージ制御用のコントローラがクラスタ6Aとクラスタ6Bによって構成されている。
【0018】
ホスト計算機2Aに対するデータストレージ処理は、クラスタ6A(クラスタA)によって提供されるほか、クラスタ6B(クラスタB)によっても提供される。ホスト計算機2Bについても同様である。そのために、二つのクラスタはデータストレージ処理を連携させるために、クラスタ間接続路12によって接続されている。第1のクラスタ(クラスタ6A)と第2のクラスタ(クラスタ6B)との間の制御情報やユーザデータの送受信は、この接続路12を介して行われる。
【0019】
クラスタ間接続路としては、例えば、1レーン片方向当たり(最大8レーン)のデータ転送量が2.5〔Gbit/sec〕と高速なデータ通信を実現するPCI(Peripheral Component Interconnect)-Express規格に準拠したバス及び通信プロトコルが適用される。
【0020】
クラスタ6Aとクラスタ6Bは、それぞれ同じデバイスを備えている。そこで、これらクラスタが備えるデバイスをクラスタ6Aに基づいて説明し、クラスタ6Bの説明を省略する。クラスタ6Aのデバイスとクラスタ6Bのデバイスとを、同一の算用数字で特定しながら、算用数字の後のアルファベットによって区別した。“**A”はクラスタ6Aのデバイスを示し、“**B”はクラスタ6Bのデバイスを示す。
【0021】
クラスタ6Aは、その全体の動作を制御するマイクロプロセッサ(MP)14Aと、ホスト計算機2Aとの通信制御を行うホストコントローラ16Aと、記憶デバイス4との間の通信制御を行うI/Oコントローラ18Aと、ホストコントローラと記憶デバイスとクラスタ間接続路とに対するデータ転送を制御するスイッチ回路(PCI-Express Switch)20Aと、MP14Aをスイッチ回路20Aに中継するブリッジ回路22Aと、ローカルメモリ24Aと、を備えている。
【0022】
ホストコントローラ16Aは、ホスト計算機2Aとの通信制御を行なうインターフェースを備えており、これは、複数の通信ポート及びホスト通信プロトコルチップを有する。通信ポートは、クラスタ6Aをネットワークやホスト計算機2Aに接続するためのものであり、例えば、IP(Internet Protocol)アドレスやWWN(World Wide Name)などの固有のネットワークアドレスが割り当てられている。
【0023】
ホスト通信プロトコルチップは、ホスト計算機2Aとの間の通信時におけるプロトコル制御を行う。このためホスト通信プロトコルチップとしては、例えば、ホスト計算機2Aとの間の通信プロトコルがファイバーチャネル(FC:Fibre Channel)プロトコルである場合にはファイバーチャネル変換プロトコルチップ、かかる通信プロトコルがiSCSIプロトコルである場合にはiSCSIプロトコルチップというように、ホスト計算機2Aとの間の通信プロトコルに適合したものが適用される。
【0024】
さらに、ホスト通信プロトコルチップには、複数のマイクロプロセッサとの間で通信を行い得るマルチマイクロプロセッサ機能が搭載されており、これにより、ホスト計算機2Aがクラスタ6AのMP14A、そして、クラスタ6BのMP14Bと通信を行えるようになっている。
【0025】
ローカルメモリ24Aは、システムメモリとキャッシュメモリとからなる。システムメモリとキャッシュメモリとを、図1のように、同一のデバイス上に搭載してもよいし、システムメモリとキャッシュメモリとを別なデバイスとしてもよい。
【0026】
システムメモリは、制御プログラムを格納するために用いられるほか、ホスト計算機2Aから与えられるリードコマンドやライトコマンド等の各種コマンドを一時的に保持するために用いられる。MP14Aは、ローカルメモリ24Aに格納されたリードコマンドやライトコマンドを、ローカルメモリ24Aにこれらが格納された順番で処理する。
【0027】
また、システムメモリ24Aには、クラスタ6A,6BのステータスやMP14Aが実行すべきマイクロプログラムが記録されている。ステータスとしては、マイクロプログラムの処理ステータス、マイクロプログラムのバージョン、ホストコントローラ16Aの転送リスト、I/Oコントローラの転送リストなどがある。
【0028】
MP14Aが自身のマイクロプログラムのステータスを、クラスタ6Bのシステムメモリ24Bに一定周期でライトするようにしてもよい。
【0029】
キャッシュメモリは、ホスト計算機2Aと記憶デバイス4間や、クラスタ6Aのクラスタ6Bとの間で送受信されるデータを一時的に記憶するために利用される。
【0030】
スイッチ回路20Aは、好適には、PCI-Express Switchからなり、クラスタ6Bのスイッチ回路20Bとの間のデータ転送と、クラスタ6A内の各デバイス間でのデータ転送をスイッチング制御する機能を備えている。
【0031】
また、スイッチ回路20Aは、クラスタ6AのMP14Aからの指示により、ホスト計算機2Aから与えられたライトデータをクラスタ6Aのキャッシュメモリ24Aにライトするとともに、接続路12と他のクラスタ6Bのスイッチ回路20Bとを介して、クラスタ6Bのキャッシュメモリ24Bにライトする機能を備える。
【0032】
ブリッジ回路22Aは、クラスタ6AのMP14Aを、同じクラスタのローカルメモリ24Aと、スイッチ回路20Aに接続するための中継装置としてものである。
【0033】
スイッチ回路(PCI-Express Switch)20Aは、PCI-Express規格のポート(PCIe)を複数備え、各ポートを介して、ホストコントローラ16A、I/Oコントローラ18Aと接続している他、ブリッジ回路22AのPCI-Express規格のポート(PCIe)にも接続している。
【0034】
スイッチ回路20Aには、NTB(Non-Transparent Bridge)26Aが実装されており、スイッチ回路20AのNTB26Aとスイッチ回路20BのNTB26Bとが接続路12によって接続されている。これによって、ストレージ装置10に複数のMPを配置することが可能になる。また、MP14Aは、NTBによってクラスタ6Bのアドレス空間にアクセスすることができる。
【0035】
本発明のストレージ装置がNTBを使用することによって、複数のクラスタ(ドメイン)を接続することが可能となる。換言すれば、一方のクラスタが他方のクラスタのメモリ空間を利用すること、即ち、複数のクラスタでメモリ空間を共有することができる。
【0036】
一方、ブリッジ回路22Aは、DMA(Direct Memory Access)コントローラ28Aと、RAIDエンジン30Aを備えている。DMAコントローラ28Aは、MP14Aを介することなく、クラスタ6Aのデバイス間でのデータ転送や、クラスタ6Bへのデータ転送を行う。
【0037】
RAIDエンジン30Aは、記憶デバイス4に格納されるユーザーデータに対して、RAID演算を実行するLSIである。ブリッジ回路22aは、ローカルメモリ24Aと接続されるポートを備えている。
【0038】
既述のとおり、MP14Aは、クラスタ6A全体の動作を制御する機能を有する。MP14Aは、ローカルメモリ24Aに格納されたライトコマンドやリードコマンドに応じて、予め自己に対して割り当てられた論理ボリュームに対するデータの読み書き等の処理を行う。また、MP14Aは、クラスタ6Bの制御も実行可能である。
【0039】
クラスタ6Aとクラスタ6BとのどちらのMP14A(14B)に対して論理ボリュームへのライト/リードを割り当てるかは、それぞれのマイクロプロセッサの負荷状況や、ホスト計算機から与えられる論理ボリュームごとの担当マイクロプロセッサを指定するコマンドの受信によって動的に変更することができる。
【0040】
I/Oコントローラ18Aは、記憶デバイス4との通信を制御するインターフェースであり、記憶装置との通信プロトコルチップを備える。このプロトコルチップとしては、例えば、記憶デバイスがFCハードディスクドライブである場合にはFCプロトコルチップであり、記憶デバイスがSASハードディスクドライブである場合にはSASプロトコルチップである。
【0041】
SATAハードディスクドライブを適用する場合には、記憶装置通信プロトコルチップ22A,22Bとして、FCプロトコルチップ又はSASプロトコルチップを適用でき、SATAハードディスクドライブにはSATAプロトコル変換チップを介して接続する構成とすることもできる。
【0042】
記憶デバイスは、複数のハードディスクドライブ、具体的にはFCハードディスクドライブ、SASハードディスクドライブ、SATAハードディスクドライブである。これら複数のハードディスクドライブが提供する記憶領域上には、データを読み書きするための論理的な記憶領域である論理ユニットが複数設定される。
【0043】
ハードディスクドライブに代えて、フラッシュメモリ等の半導体メモリや、光ディスク装置を適用することができる。また、フラッシュメモリとしては、安価で書込み速度が比較的低速であり、かつ、ライト回数制限が低い第1のタイプのものと、高価でライトコマンド処理が当該第1のタイプよりも高速であり、かつ、ライト回数制限が第1のタイプよりも高い第2のタイプとのいずれのタイプのフラッシュメモリを用いることもできる。
【0044】
RAID演算が、ブリッジ回路22AのRAIDコントローラ(RAIDエンジン)30Aによって実行されることを説明したが、これに代えて、MPがRAIDマネージャプログラムなどのソフトウエアによって実行されてもよい。
【0045】
図2は本発明が適用される第2の形態を説明するストレージ装置のハードウエアブロック図である。ストレージ装置からスイッチ回路20A(図1)を省略し、スイッチ回路のNTB用ポートをブリッジ回路22Aに持たせた点が、図1の実施形態と異なる点である。この実施形態では、ブリッジ回路22Aがスイッチ回路20Aの機能を兼ねている。ホストコントローラ16AとI/Oコントローラ18APCIポートによってブリッジ回路22Aに接続されている。
【0046】
図3は、さらに第3の実施形態に係るストレージ装置のハードウエアブロック図である。この実施形態は、スイッチ回路20Aを、DMAコントローラ28AとRAIDエンジン30Aを有するASIC(Application Specific Integrated Circuit)から構成し、これにキャッシュメモリ24A−2を接続した点と、ブリッジ回路22Aにシステムメモリ24A−1を接続した点とが、図1の実施形態と異なる点である。
【0047】
なお、図3のように、MP14Aに対して、ブリッジ回路22Aとスイッチ回路20Aを介して接続するキャッシュメモリ24A−2を、図1では、システムメモリと統合させローカルメモリ24Aとしているために、図1の実施形態は、MP14Aとキャッシュメモリ24Aとの間のレイテンシを削減できるものになっている。
【0048】
図3のように、スイッチ回路20AをASICによって構成することにより、コンプリーションタイムアウト時に、スイッチ回路22Aが、MP14Aによって実行されているマイクロプログラムにダミーコンプリーションを送信することによって、クラスタ6Aのシステムダウンを回避することができるが、本発明は、後述のように、クラスタ6Bからクラスタ6Aへのデータ転送をリード命令によらず、クラスタ6Aとクラスタ6B間のライト処理によって達成しているので、コンプリーションタイムアウトの発生がなく、スイッチ回路20AをASICではなく、汎用品(PCI Expressスイッチ)を備えたものから構成できる。
【0049】
次に、本発明に係るストレージ装置(図1)の動作例を、図4を利用して説明する。なお、この動作は図2及び図3においても同様である。
【0050】
ストレージ装置は、第1のクラスタが第2のクラスタからデータを取得する際、第1のクラスタが第2のクラスタからデータをリードするのではなく、第1のクラスタから第2クラスタのDMAに転送命令をライトして、第2のクラスタから第1のクラスタへ目的のデータをDMA転送する。
【0051】
図4は、第1のクラスタ6Aと第2のクラスタ6Bとの間での制御データやユーザデータのやり取りを説明するブロック図である。なお、以後DMAコントローラを“DMA”と略称する。
【0052】
クラスタ6AのMP14A、又は、クラスタ6BのMP14Bは、クラスタ6Bのシステムメモリ24Bに、DMA28Bへのデータ転送命令である転送リストを記述する(S1)。転送リストのライトは、クラスタ6Aがクラスタ6Bのステータスをリアルタイムに取得しようとする場合の他、ホスト計算機2A又は2Bから、ストレージ装置にリードコマンドが発行された場合などに発生する。この転送リストは、クラスタ6Bのシステムメモリ24Bのデータをクラスタ6Aのシステムメモリ24AにDMA転送すること規定する制御情報を備えている。
【0053】
次いで、MP14Aが実行するマイクロプログラムが、クラスタ6BのDMA28Bを起動する(S2)。起動されたDMA28Bは、システムメモリ24Bに設定された転送リストを読み取る(S3)。
【0054】
DMA28Bは、読みとった転送リストにしたがって、クラスタ6Bのシステムメモリ24Bからクラスタ6Aのシステムメモリ24Aに目的のデータのライトを発行する(S4)。
【0055】
なお、クラスタ6Aがクラスタ6Bのユーザデータを必要とする場合には、MP14BはHDD4からローカルメモリ24Bのキャッシュメモリに目的データをステージングしておく。
【0056】
DMA28Bは、DMA転送終了を表すコンプリーションライトをシステムメモリ24Aの所定エリアに書き込む(S5)。
【0057】
クラスタ6Aのマイクロプログラムは、メモリ24Aに書き込まれたクラスタ6BからのDMA転送完了のコンプリーションライトをリードすることでデータの移動が完了したことを確認する(S6)。
【0058】
なお、クラスタ6AのマイクロプログラムがDMA転送完了に関するコンプリーションライトを一定時間経過しても得ることができない場合は、クラスタ6Aは、クラスタ6B側に何らかの障害が発生したと判定し、以後、クラスタ6Bのジョブを代行するなど、耐障害時の処理を継続する。
【0059】
以上によって、ストレージ装置では、ライトのみでクラスタ間でのデータ移動が可能となる。ライトはリードと比較して、MPを拘束する時間が短い。リードコマンドを発行したMPはリード結果が得られるまでその他の処理が停止されるのに対して、ライトコマンドが発行された時点でMPは開放される。
【0060】
また、クラスタ6Bに何らかの障害があっても、コンプリーションタイムアウトは発生しない。したがって、ストレージ装置はクラスタ6Aのシステムダウンを避けることができる。
【0061】
クラスタ6Aがクラスタ6Bのデータをリードすることを、クラスタ6Aからクラスタ6BのDMA28Bへ転送リストをライトし、クラスタ6BのDMA28Bによるクラスタ6AへのDMAデータ転送を実現するために、システムメモリ6Aには複数の制御テーブルが設定されている。システムメモリ6Bについても同様である。
【0062】
この制御テーブルを図5にしたがって説明する。クラスタ6Aのシステムメモリ24Aに示すように、制御テーブルには、転送リストを格納するDMAディスクリプターテーブル(DMA Descriptor Table)と、DMAのステータスを格納するDMAステータステーブル(DMA Status Table)と、DMA転送の終了を意味するコンプリーションライトを格納するDMAコンプリーションステータステーブル(DMA Completion Status Table)と、DMAに対する使用権が、複数のマスタで競合した場合、マスタ間での優先度を格納するDMA優先度テーブルとが、が存在する。
【0063】
クラスタ6AのDMA28Aは、クラスタ6A内でのデータ転送の他、クラスタ6Bへのデータのライトを実行するものである。したがって、DMA ディスクリプターテーブルには、自クラスタ(クラスタ6A)のDMAに自クラスタ内でのデータ転送のための転送リストであるテーブル(A-1)と、自クラスタ(クラスタ6A)のDMAに他クラスタ6Bへデータを転送するための転送リストであるテーブル(A−2)とが存在する。テーブルA−2は、クラスタ6Bによってライトされる。
【0064】
また、DMAステータステーブルには、クラスタ6AのDMA28A用のステータステーブルと、クラスタ6BのDMA28B用テーブルがある。そして、クラスタ6AのDMA28Aは、クラスタ6Bによってライトされた転送リストに応じて、クラスタ6Aのデータをクラスタ6Bにライトし、これとは反対に、クラスタ6BのDMA28Bは、クラスタ6Aからライトされた転送リストに応じて、クラスタ6Bのデータをクラスタ6Aにライトする。
【0065】
クラスタ6Aとクラスタ6Bとの間のライト処理を制御するために、クラスタ6AのDMA用のステータステーブルと、クラスタ6BのDMA用テーブルとのそれぞれにクラスタ6Aによってライトされる、あるいはクラスタ6Bによってライトされるかの分類がある。
【0066】
A−3は自クラスタ(クラスタ6A)によってライトされ、クラスタ6AのDMAに対して割り当てられたステータステーブルである。
【0067】
A−4は、自クラスタによってライトされ、クラスタ6BのDMA28Bに対して割り当てられたステータステーブルである。
【0068】
A−5は、クラスタ6Bによってライトされ、クラスタ6BのDMA28Bに割り当てら得たステータステーブルであり、A−6は、クラスタ6Bによってライトされ、クラスタ6AのDMA28Aに割り当てられたステータステーブルである。
【0069】
DMAのステータスには、そのDMAがデータ転送に使用されているのかいないのかに関する情報と、そのDMAに転送リストが設定中か否かに関する情報とがある。DMAのステータスを示す複数ビットからなる信号のうちbit[0]に“1”(in use flag)が設定されていることは、そのDMAがデータ転送に使用されていることを示す。
【0070】
そして、bit[1]に“1”(standby flag)が設定されていることは、そのDMAに転送リストが設定中であることを示す。両方のフラグが設定されていないことは、そのDMAはデータ転送に関与していないことを示している。
【0071】
クラスタ6Aのシステムメモリのメモリ空間にマッピングされた既述のステータステーブルをさらに具体的に説明すると、次のとおりである。
【0072】
A-3 bit[0]:“in use flag” クラスタ6Aのライト用であって、自クラスタ(クラスタ6A)が自クラスタのDMA28Aを、使用しているかどうかを示す。
【0073】
A-3 bit[1]:“standby flag” クラスタ6Aのライト用であって、自クラスタが自クラスタのDMA28Aを、設定中かどうかを示す。
【0074】
A-4 bit[0]:“in use flag”クラスタ6Aのライト用であって、自クラスタがクラスタ6BのDMAを、使用しているかどうかを示す。
【0075】
A-4 bit[1]:“standby flag”クラスタ6Aのライト用であって、自クラスタがクラスタ6BのDMAを、設定中かどうかを示す。
【0076】
A-5 bit[0]:“in use flag”クラスタ6Bのライト用であって、クラスタ6B(別クラスタ)がクラスタ6B自身のDMA28Bを、使用しているかどうかを示す。
【0077】
A-5 bit[1]:“standby flag”クラスタ6Bのライト用であって、クラスタ6BがDMA28Bを設定中かどうかを示す。
【0078】
A-6 bit[0]:“in use flag” クラスタ6Bのライト用であって、クラスタ6Aが別クラスタ(クラスタ6B)のDMA28Bを使用しているかどうかを示す。
【0079】
A-6 bit[1]:“standby flag”クラスタ6Bのライト用であって、クラスタ6Aが別クラスタ(クラスタ6B)のDMA28Bを、設定中かどうかを示す。
【0080】
図5は、DMA28AとDMA28Bが1channelしかないことを前提としており、そうすると、二つのクラスタから、同じDMAを同時に使用することができない。そこで、DMAがどちらのクラスタに属するか、DMAへ転送リストがどちらのクラスタからライトされるかなどによって区別したステータステーブルを備え、二つのクラスタからDMAへの競合するアクセスを制御することとした。
【0081】
このようにDMAについての排他制御を実施するためには、クラスタ6Aからクラスタ6BのDMAの使用状況を確認する必要がある。このとき、クラスタ6Aがクラスタ間接続12を介してクラスタ6Bの“インユースフラグ”をリードした場合、レイテンシは極めて大きくクラスタ6Aの性能劣化に繋がる。
【0082】
そこで、ストレージ装置10は、“インユースフラグ”を含むDMAステータステーブルを、(A/B-3,4,5,6)のように、各クラスタのローカルメモリ中に設定した。
【0083】
図5のA−7は、クラスタ6AのDMA28Aによって“コンプリーションステータス”がライトされるテーブルであり、A−8は、クラスタ6BのDMAによって“コンプリーションステータス”がライトされるテーブルである。前者のテーブルは、クラスタ6Aの内部データ転送用としてのものであり、後者のテーブルは、クラスタ6Bからクラスタ6Aへのデータの転送用としてのものである。
【0084】
さらに、A−9は、クラスタ6AのDMA28Aに対して、複数のマスタ間での優先度を設定するためのテーブルであり、A−10は、クラスタ6BのDMA28Bに対して、複数のマスタ間での優先度を設定するためのテーブルである。
【0085】
マスタとは、DMAのデータ転送を実現するためのソフトウエア上の制御手段であり、マスタが複数存在する場合、DMAの転送ジョブは各マスタによって達成され、そして制御される。複数のマスタに依るジョブがDMAに競合した場合の調整手段が優先度テーブルである。
【0086】
クラスタ6Aのシステムメモリ24Aに格納された既述のテーブルは、クラスタ6AのMP14A、クラスタ6BのMP14Bによって、システムブート時、ストレージデータ処理時などに、設定あるいは更新されている。クラスタ6AのDMA28Aはシステムメモリ24Aのテーブルをリードして、クラスタ6A内でのDMA転送、クラスタ6BへのDMA転送を実行する。
【0087】
次に、クラスタ6Aがクラスタ6BのDMAからデータの転送を受ける処理の流れを、図6に示すフローチャートに従って説明する。クラスタ6AのMP14Aがクラスタ6BのDMA28Bを利用しようとすると、MP14Aは、マイクロプログラムを実行して、クラスタ6BのDMA28Bのステータスに係る領域のテーブルの“インユースフラグ”(A-4,5のbit[0])をそれぞれリードし、これがともに“0”か否かを判定する(600)。
【0088】
これを否定する場合は、クラスタ6BのDMAが使用されているとして、両フラグの値が“0”になるまで、すなわち、このDMAが未使用状態になるまでステップ600を繰り返し実行する。
【0089】
次いで、ステップ602において、MP14Aは、クラスタ6Bにアクセスし、そのローカルメモリのステータステーブルのB-6のbit[1]に“スタンドバイフラグ”として“1”を設定し、クラスタ6BのDMA28Bに対する転送リストの設定権を得る。
【0090】
また、ローカルメモリ24AのステータステーブルのA-4bit[1]に、“スタンドバイフラグ”である“1”をライトする。スタンドバイフラグが立っていることは、クラスタ6Aがクラスタ6BのDMA28Bを設定中であることを示している。
【0091】
次いで、MP14Aは、クラスタ6BのDMA28Bのステータスに係る領域A-5bit[1]をリードして、“スタンドバイフラグ”が“1”であるか否かを判定する(604)。
【0092】
このフラグが“0”の場合は、他のマスタもDMA28Bに対して転送リストの設定権を有していないと判定してステップ606に移行する。
【0093】
一方、このフラグが“1”であり、クラスタ6Aとクラスタ6Bとが同時にクラスタ6BのDMA28Bの使用権を所有する場合、ステップ604からステップ608に移行し、クラスタ6Aの優先度がクラスタ6Bのマスタの優先度より高い場合は、クラスタ6Aのマスタは、ステップ608からステップ606にリターンして、クラスタ6BのDMA28Bからクラスタ6Aへのデータ転送を実行しようとする。
【0094】
一方、クラスタ6Bのマスタの優先度が高い場合には、クラスタ6Bのマスタは、クラスタ6Aのマスタからクラスタ6BのDMA28Bへのデータ転送命令は実行できないとしてDMAエラーをクラスタ6Aのマイクロプログラム、マスタに通知する(611)。
【0095】
ステップ606においては、MP14は、クラスタ6Bのローカルメモリ24BのステータステーブルのB-4,6bit[0]に“インユースフラグ”=“1”を設定し、クラスタ6BのDMA28Bに対する使用権を確保する。
【0096】
次いで、ステップ608において、MP14Aは、クラスタ6Bのローカルメモリ24BのDMAディスクリプターテーブルに転送リストを設定する。
【0097】
さらに、MP14は、メモリ6BのDMA28Bを起動し、起動されたDMA28Bは、転送リストを読み取り、読み取った転送リストをもとにシステムメモリ24ABのデータをリードしてリードしたデータをクラスタ6Aのローカルメモリ24Aに転送する(610)。
【0098】
DMA28Bがクラスタ6Aに対してデータを正常にライトすると、DMA28Bは、システムメモリ24のクラスタBのDMA28Bに対して割り当てられコンプリーションステータステーブルにコンプリーションライトを書き込む。
【0099】
次いで、MP14Aは、このテーブルのコンプリーションステータスをテェック、すなわちCompletionライトが書き込まれているか否かをチェックする(612)。
【0100】
コンプリーションライトが書き込まれている場合には、クラスタ6Bからクラスタ6Aへデータ転送が正しく行われたと判断して、ステップ614に進む。
【0101】
ステップ614では、MP14Aは、システムメモリ24BのステータステーブルB-6(クラスタ6Aによってライトされ、クラスタ6BのDMAのステータスを示すテーブル)とクラスタ6Aのシステムメモリ24AのステータステーブルA-4(クラスタ6Aによってライトされ、クラスタ6BDMAのステータスを示すテーブル)のインユースフラグに関係するbit[0]に“0”に設定する。
【0102】
次いで、ステップ616では、これらのテーブルのスタンドバイフラグに関係するbit[1]に“0”を設定して、クラスタ6AのDMA28Bに対するアクセス権を開放する。
【0103】
なお、クラスタ6Bが自身のDMA28Bを使用する場合は、A-5,B-3のbit[0]に“1”を設定し、クラスタ6B自身がクラスタ6BのDMA28Bの使用権を所持していることを他のマスタに対して明らかにする。
【0104】
ステップ612において、MP14Aがコンプリーションライトを確認できない場合には、MP14はタイムアウトを判定して(618)、DMA28Bの転送エラーをユーザに通知する(610)。
【0105】
次に図6のクラスタ6AのMP14Aがクラスタ6BのDMA28Bに転送リストを設定してからDMA28Bを起動するまでの処理について補足説明を加える。
【0106】
図7は転送リストの一例であり、MP14Aは、転送リストフォーマットにしたがって転送リストをシステムメモリ28Bに設定する。この転送リストは、転送オプションと、転送サイズと、データの転送元となるシステムメモリ24Bのアドレスと、データ転送先となるシステムメモリ24Aのアドレスと、次の転送リストのアドレスと、を含んでいる。これらはオフセットアドレスによって定義され。転送リストは、キャッシュメモリに格納されてもよい。オフセットアドレスにベースアドレスを適用することによって、メモリ空間のアドレスが決まる。
【0107】
MP14Aが、転送リストをクラスタ6Bのローカルメモリ24Bに設定する際は、DMAのレジスタ(ディスクリプターアドレス)にディスクリプター(転送リスト)を配置したメモリ空間上のアドレスを設定する。このレジスタに対するアドレス設定テーブルの一例を図8に示す。
【0108】
DMA28Bはこのレジスタを参照して、ローカルメモリ中に転送リストが格納されているアドレスを知り、転送リストにアクセスする。図8において、サイズはこのアドレスへ格納可能なデータ量である。
【0109】
MP14AがDMA28Bを起動する際には、DMA28Bに対するレジスタ(スタートDMA)にスタートフラグをライトする。DMA28Bはこのレジスタにスタートフラグが設定されると起動し、データの転送処理を開始する。図9はこのレジスタの一例であり、オフセットアドレス値は、レジスタのメモリ空間上のアドレスであり、サイズはこのアドレスへ格納可能なデータ量である。
【0110】
クラスタ6Aへのコンプリーションライトのためのアドレスの設定は、NTBのMIMIO領域を利用して、クラスタ6BのDMAのMMIO領域に対して行なわれる。そして、MP14Aは、DMA28Bがデータ転送後、コンプリーションライトを発行するローカルメモリ24Aのアドレスを図10に示すレジスタ(コンプリーションライトアドレス)に設定する。この設定はDMA28Bからのデータ転送開始前に終了していなければならない。オフセットアドレスの値は、レジスタのメモリ空間上の位置であり、サイズはこのアドレスへ格納可能なデータ量である。
【0111】
クラスタ6Aは、クラスタ6BからのDMA転送完了後、DMA28Bのアボートによるエラー通知のコンプリーションステータスライトを書き込む領域を、既述とおり、DMAコンプリーションステータステーブル(A−8)として、システムメモリ24Aに設けている。
【0112】
ストレージ装置のDMAには、DMA転送の完了又はエラーを転送先のクラスタに通知する方式として、割り込みではなく、コンプリーションステータスライト機能が実装されている。
【0113】
なお、本発明は割り込み方式を否定するものではなく、ストレージ装置が同方式を採用してクラスタ6Bからクラスタ6AへDMA転送完了通知を実行するものであってもよい。
【0114】
クラスタ6Bからクラスタ6Aへのデータ転送を行う際、コンプリーションライトをクラスタ6Bのメモリに書き込み、これをクラスタ6Aからリードしにゆくと、このリードがクラスタ間の接続手段を跨がなくてはならないために、レイテンシが大きくなってしまうという問題が存在する。
【0115】
そこで、クラスタ6Aのメモリ24Aにコンプリーションステータス領域を予め確保しておき、クラスタ6Aのマスタが、この領域にライトアクセスするのをソフトウエアによって制限しながら、クラスタ6BのDMA28Bからのコンプリーションライトをこの領域に対して実行し、クラスタ間でのリードが行われることなく、クラスタ6Aのマスタがこの領域をリードすることによって、クラスタ6Bからクラスタ6AへのDMA転送が完了することを確認できるようにした。
【0116】
図6のステップ604とステップ608において、クラスタ6A及びクラスタ6Bのマスタが同時にクラスタ6Bの1チャンネルのDMA28Bにアクセス権を有している場合、優先度が高いマスタにDMAの使用権を割り当てることを説明している。
【0117】
これは、ストレージ装置10は、クラスタ6Aに、クラスタ6B側のDMA28Bにライトアクセスする権利を認めたが、DMA28Bがクラスタ6Aとクラスタ6Bの双方から使用されようとすると、DMA28Bが競合状態に陥り、DMAの正常な動作が保証されないため、これを防ぐ目的からである。なお、優先度に関する処理の詳細については後述する。
【0118】
一方、DMAの実装数が増大し、全てのDMAに対してクラスタ6Aとクラスタ6Bからのアクセスを認めとすると、この排他処理が各DMAについて必要となり、処理が複雑となってストレージ装置のI/O処理性能が劣化するおそれが生じる。
【0119】
そこで、クラスタに複数のチャネルからなるDMAが存在する形態において、優先度に基づく排他処理に代わる、複数のマスタのDMAに対する競合を避けることができるシステムが次に説明する実施形態である。
【0120】
図11にこの実施形態を説明する。ストレージ装置の各クラスタには、複数のDMA、例えば、4チャンネルを有するDMAが存在する。ストレージ装置は、クラスタ6Aの複数のDMAのうちDMAチャンネル1とDMAチャンネル2に対するアクセス権をクラスタ6Aのマスタに認め、同様に、DMAチャンネル3とDMAチャンネル4をクラスタ6Bのマスタに割り当てている。
【0121】
さらに、クラスタ6Bの複数のDMAのうちDMAチャンネル1とDMAチャンネル2とをクラスタ6Aのマスタに割り当て、DMAチャンネル3とDMAチャンネル4とをクラスタ6Bのマスタに割り当てている。このような割り当ては、クラスタ6A,6Bのソフトウエアコーディング時に設定される。
【0122】
したがって、クラスタ6Aとクラスタ6Bとのそれぞれにおいて、クラスタ6Aのマスタとクラスタ6Bのマスタとが一つのDMAに対してアクセス権を競合させることがないようにしている。
【0123】
クラスタ6Aの複数のDMAのそれぞれには、図11の矢印に示す様に、同一クラスタ内のシステムメモリ24Aに格納されたテーブルが割り当ている。クラスタ6Bについても同じである。
【0124】
クラスタ6Aのマスタは、DMAチャンネル1又はDMAチャンネル2を使用して、転送リストテーブル(自クラスタライト用/自クラスタ(クラスタ6A)のDMAディスクリプターテーブル)(A−1)を参照して、クラスタ6A内でのDMA転送を行い、転送リストテーブル(クラスタ6Bライト用/自クラスタ(クラスタ6A) のDMAディスクリプターテーブル)(A−2)を参照してクラスタ6BへのDMA転送を行う。
【0125】
このとき、クラスタ6Aのマスタは、前者の転送では、システムメモリ24Aのクラスタ6A用DMAステータステーブル(A−3)を参照し、後者の転送では、システムメモリ24Aのクラスタ6B用DMAステータステーブル(A−4)を参照する。
【0126】
クラスタ6Bのマスタは、クラスタ6Aのデータを必要とする場合、クラスタ6AのDMAチャンネル3又はDMAチャンネル4のレジスタに起動フラグをライトする。
【0127】
すると、クラスタ6AのDMAチャンネル3は、クラスタ6B用テーブル110に格納された転送リストにしたがって、クラスタ6Aからクラスタ6BにデータをDMA転送する。また、クラスタ6AのDMAチャンネル4は、クラスタ6B用テーブル112に格納された転送リストにしたがって、クラスタ6Aからクラスタ6BにデータをDMA転送する。
【0128】
これらテーブルには、クラスタ6Bのマスタによって、転送リストが設定あるいは更新される。
【0129】
クラスタ6Bにおいては、DMAチャンネル1及びDMAチャンネル2に、クラスタ6Aのマスタのアクセス権が割り当てられている。DMAチャンネル3とDMAチャンネル4にクラスタ6Bのマスタの専有権が認められている。テーブルとDMAチャンネルとの割り当ては、図に示す矢印のとおりである。
【0130】
次に、既述の優先度について説明する。図12は、DMAに複数のマスタのアクセスが競合した場合の優先度を規定する優先度テーブルを示すものである。物理的に1つしかないDMAを2つ以上のマスタが同時に起動・使用することは不可能であるため、優先度テーブルによって、マスタのDMAに対する使用権に優先度を設定することにしたものである。
【0131】
図12はクラスタ6AのDMA28A(図5参照)についての優先度テーブルA−9,B−10(図5)のフォーマットを示すものであり、図13はクラスタ6BのDMA28B(図5参照)についての優先度テーブルA−10,B−9のフォーマットを示すものである。このテーブルは、マスターを特定するバリューと、優先度の設定を含んでいる。小さい数値ほど優先度が高いことを示している。優先度は、一つのDMAに対するクラスタ6A,6Bの複数のマスタ間の優先度の優劣として定義されるものである。
図14は、クラスタ6Aのマスター0、マスター1とクラスタ6Bのマスター0とマスター1の合計で4マスタを定義するテーブルである。マスターは、図14に示す様に2ビット(バリュー)によって特定される。マスター定義用として合計で8ビット存在するために(図12参照)、図15に示す様に、優先度テーブルにはそれぞれ2ビットで特定される4つのマスターを優先度順にマッピングする。
【0132】
図15はクラスタ6Aのマスタ28Aについての優先度テーブルである。この優先度テーブルによれば、優先度の大小は、クラスタ6Aのマスター1>クラスタ6Aのマスター0>クラスタ6Bのマスター0>クラスタ6Bのマスター1の順である。
【0133】
したがって、クラスタ6Aのマイクロプログラムは、DMAに複数のマスタのアクセスが競合した場合、この優先度テーブルを参照して、優先度が最も高いマスタに対してアクセス権を認める。
【0134】
優先度のレベルはマスタの個数分用意する。既述の例では、クラスタ6Aにマスタが2、クラスタ6Bにマスタが2存在することを前提にして優先度のレベルを4段階にしている。マスタがこれより増える場合には、優先度のレベルを増やすため、優先度を設定するためのビット数を増加させる。
【0135】
マイクロプログラムは、DMAに対して複数のマスタが競合したことを、このDMAに対する複数のステータテーブルにそれぞれスタンドバイフラグ“1”がセットされることによって判定する。例えば、図5において、A−3とA−6の双方においてスタンドバイフラグがセットされている状態である。
【0136】
一方、ストレージ装置には、一旦優先度を設定した後に、優先度の変更を要するケースが発生する。例えば、クラスタ6Aにおいてファームウエアを交換する場合、ファームウエア高環中クラスタ6Aのマスタは、DMA28Aを一切使用しない。
【0137】
そこで、クラスタ6AのDMAをクラスタ6Bのマスタに対して一時優先して割り当てることによって、クラスタ6Bがクラスタ6AのDMAを使用するための待ち時間を低減させる。
【0138】
優先度テーブルの設定はストレージ装置のブート時である。ストレージ装置の起動時に、ソフトウェアによって、優先度テーブルが各クラスタのメモリに書き込まれる。この書き込みは、優先度テーブルが割り当てられたDMAが属するクラスタの側から行われる。例えば、テーブルA−9はクラスタ6Aのマイクロプログラムによって行われ、テーブルA−10は、クラスタ6Bのマイクロプログラムによって行われる。
【0139】
各クラスタに複数のマスタが存在しても、既述の優先度の設定・変更・更新はそのうちの一つのマスタによって行われる。この権限がないマスタが優先度を変更しようとする場合は権限があるマスタに優先度の変更を依頼する。
【0140】
次に、図16に基づいて優先度を変更するフローチャートについて説明する。優先度の変更処理のジョブは優先度変更対象DMAを特定することを含む(1600)。
【0141】
このDMAが属するクラスタに複数あるマスタは、このジョブの実行権限をランダムに選択して、優先度変更の権限があるか否かを判定する(1602)。この判定が否定された場合は、権限があるマスタに優先度変更ジョブを渡す(1604)。
【0142】
この判定が肯定されると、優先度変更の権限があるマスタは、優先度が変更されるDMAに割り当てられたステータステーブルのインユースフラグが“1”であるかを判定し、“1”である場合には、DMAがデータ転送に使用されているために優先度を変更すべきではないため、このフラグが“0”になるまで処理を繰り返す(1606)。
【0143】
対象のDMAがデータ転送を終了すると、このDMAについてデータが転送されるとインユースフラグは解放されて“0”になり、ステップ1606を通過し、次いで、マスタはこのDMAに割り当てられたステータステーブルのスタンドバイフラグに“1”を設定して、このDMAに対するアクセス権を確保する(1608)。
【0144】
ステップ1610において、優先度変更ジョブを実行するマスタが属するクラスタのメモリに格納され、別マスタのライト用優先度変更対象DMAのステータステーブルに、ジョブ実行中マスタとは別マスタによってスタンドバイフラグが設定されているとき、優先度変更ジョブ実行中マスタは、当該マスタがライトする対象DMAの優先度変更テーブルを参照し、別マスタの優先度と優先度変更ジョブを行うマスタの優先度を比較し、前者の優先度が高い場合にはステップ1620に移行する。
【0145】
ステップ1620では、優先度変更ジョブ実行中マスタは、対象DMAへの転送リストが別マスタによって設定中であるため、ジョブ実行中マスタによって設定された対象DMAのスタンドバイフラグを解放、すなわちこれを“0”にし、次いで、別DMAについて優先度の設定・変更・更新の開始処理へ移行し(1622)、ステップ1602にリターンする。
【0146】
一方、ステップ1610の処理おいてジョブ実行中のマスタの方が優先度が高い場合、このマスタは、当該マスタのライト用の対象DMAのステータステーブル、及び、別マスタライト用の“対象DMA”のインユースフラグに“1”に設定し、対象DMAを優先度変更処理にロックする(1612)。
【0147】
次のステップ1614では、ジョブ実行中のマスタは、クラスタに属する全てのDMAについてのインユースフラグに,DMAの使用中を示す“1”が設定されている場合は、クラスタに属する全DMAに対するロックが完了したとして、このクラスタに属する全DMAに対して優先度変更処理を行い、その後全DMAに割り当てられたフラグをクリアして、全DMAを優先度変更処理から解放する。
【0148】
以上によって、複数のクラスタに属する全てのDMAに対して優先度変更・更新処理が完了する。
【0149】
図17は図11の変形例であり、各クラスタのマスタにそれぞれDMAのチャンネルを割り当てる方式のものである。システム全体のDMAチャンネル数が、システム全体のマスタ数以下の場合に好適な方式のものである。
【0150】
クラスタA(6A)のプロセッサ14Aには、マスタ1及びマスタ2が稼働している。クラスタB(6B)についても同様である。
【0151】
クラスタAのDMAチャンネル1はクラスタAのマスタ1によって使用され、DMAチャンネル2はクラスタAのマスタ2によって使用され、DMAチャンネル3はクラスタBのマスタ1によって使用され、DMAチャンネル4はクラスタBのマスタ2によって使用される。
【0152】
一方、クラスタBのDMAチャンネル1はクラスタAのマスタ1によって使用され、DMAチャンネル2はクラスタAのマスタ2によって使用され、DMAチャンネル3はクラスタBのマスタ1によって使用され、DMAチャンネル4はクラスタBのマスタ2によって使用される。
【0153】
クラスタAのメモリ24AとクラスタBのメモリ24Bとには、各DMAチャンネル用の制御テーブルが存在し、この制御テーブルにはDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0154】
クラスタAのメモリ24Aには、クラスタAの各DMAチャンネル用の制御テーブルが存在し、チャンネル1及び2用のテーブルには、自クラスタ(クラスタA)によってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0155】
そして、クラスタAのチャンネル3及び4用のテーブルには、クラスタBによってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0156】
一方、クラスタBのメモリ24BAには、クラスタBの各DMAチャンネル用の制御テーブルが存在し、チャンネル1及び2用のテーブルには、クラスタAによってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
【0157】
そして、クラスタBのチャンネル3及び4用のテーブルには、クラスタBによってライトされる、自クラスタ用のDMAディスクリプターテーブルとコンプリーションライト領域とが存在する。
既述の実施形態では、クラスタ6Bからクラスタ6AにデータがDMA転送によってライトされることを説明したが、この逆も勿論可能である。既述の実施形態では二つのクラスタ間のデータ転送をDMAによって行うことを説明したが、これに限られるものではない。
【0158】
本発明は、ホスト計算機に対してデータストレージサービスを提供する処理手段としてのクラスタを複数有し、ユーザに対してのデータ処理サービスの冗長性を高めたストレージ装置に利用可能であり、特に、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法に利用可能である。
【図面の簡単な説明】
【0159】
【図1】本発明に係るストレージ装置の一例を備える記憶システムのハードウエアブロック図である。
【図2】第2の実施形態に係るストレージ装置を備える記憶システムのハードウエアブロック図である。
【図3】第3の実施形態に係るストレージ装置を備える記憶システムのハードウエアブロック図である。
【図4】図1のストレージ装置におけるデータ転送の流れの説明が付された記憶システムのハードウエアブロック図である。
【図5】図1のストレージ装置のローカルメモリ内の制御テーブルの詳細を説明するブロック図である。
【図6】図1のストレージ装置におけるデータ転送の流れを説明するフローチャートである。
【図7】転送リストの一例を示すテーブルである。
【図8】転送リストを格納したアドレスをDMAコントローラに対して設定するためのレジスタのテーブル構成の一例である。
【図9】起動要求を格納したアドレスをDMAコントローラに対して設定するためのレジスタのテーブル構成の一例である。
【図10】コンプリーションステータスをDMAに対して設定するためのレジスタのテーブル構成の一例である。
【図11】ローカルメモリに複数存在するDMAコントローラと複数の制御テーブルとの対応関係を示したブロック図である。
【図12】第1のクラスタの優先度テーブルの一例である。
【図13】第2のクラスタの優先度テーブルの一例である。
【図14】複数のマスタを特定するためのテーブルの一例である。
【図15】複数のマスタがマッピングされて、その優先度が規定された優先のテーブルの一例である。
【図16】DMAコントローラに対する複数マスタの優先度を変更するためのフローチャートである。
【図17】図11の変形例に係るブロック図である。
【符号の説明】
【0160】
2A,2B ホスト計算機
6A,6B クラスタ
10 ストレージ装置
12 クラスタ間の接続路
14A,14B マイクロプロセッサ(MP又はCPU)
20A、20B スイッチ回路(PCI Expressスイッチ)
22A ブリッジ回路
24A,24B ローカルメモリ
26A,26B NTBポート
28A,28B DMAコントローラ
【特許請求の範囲】
【請求項1】
上位計算機からのコマンドに基づいて、記憶デバイスに対するデータの入出力を制御するコントローラを備え、このコントローラが複数のクラスタを備えている、ストレージ装置において、
前記複数のクラスタのそれぞれは、
前記上位計算機とのインターフェースと、
前記記憶デバイスとのインターフェースと、
ローカルメモリと、
他クラスタとの接続用回路と、
当該他クラスタ間のデータ転送を処理する処理装置と、
備え、
前記複数のクラスタのうちの第1のクラスタが第2のクラスタからのデータ転送を必要とする時、
前記第1のクラスタは前記第2のクラスタの前記ローカルメモリにデータ転送要求をライトし、
前記第2のクラスタは、前記ローカルメモリにライトされたデータ転送要求を参照して、このデータ転送要求の対象となったデータを当該ローカルメモリからリードし、リードした前記対象データを前記第1のクラスタの前記ローカルメモリにライトする、
ストレージ装置。
【請求項2】
前記複数のクラスタのそれぞれはDMAコントローラを備え、
前記第1のクラスタは、前記データ転送要求として、前記第2のクラスタのDMAコントローラに対する転送リストを当該第2のクラスタの前記ローカルメモリにライトし、
前記第2のクラスタの前記DMAコントローラは、前記転送リストを参照して、前記対象データを前記第1のクラスタにライトし、
前記接続用回路がNTBポートを有するPCI Expressスイッチを備え、二つのクラスタの前記NTBポート同士がPCI Expressバスによって接続され、
前記第2のクラスタの前記DMAコントローラは、前記対象データを前記第1のクラスタの前記ローカルメモリに転送後、当該ローカルメモリに前記データ転送のコンプリーションをライトし、
前記第1のクラスタが、前記第2のクラスタに、当該第2のクラスタの前記DMAコントローラに対する起動要求をライトし、
当該DMAコントローラはこの起動要求によって起動した後、前記転送リストにしたがって前記対象データを前記第1のクラスタの前記ローカルメモリにライトし、
前記複数のクラスタのそれぞれは、自クラスタの前記ローカルメモリに前記他クラスタの前記DMAコントローラのステータスを規定するテーブルを有し、
前記自クラスタは当該テーブルに対するライトを他クラスタから受け付け、
前記自クラスタは当該テーブルを参照して前記他クラスタの前記ローカルメモリに当該他クラスタの前記DMAコントローラに対する前記転送リストをライトし、
前記他クラスタは前記DMAコントローラのステータスを前記テーブルにライトする請求項1記載のストレージ装置。
【請求項3】
前記複数のクラスタのそれぞれはDMAコントローラを備え、
前記第1のクラスタは、前記データ転送要求として、前記第2のクラスタのDMAコントローラに対する転送リストを当該第2のクラスタの前記ローカルメモリにライトし、
前記第2のクラスタの前記DMAコントローラは、前記転送リストを参照して、前記対象データを前記第1のクラスタにライトする、請求項1記載のストレージ装置。
【請求項4】
前記接続用回路がPCI Expressのポートを備え、二つのクラスタの当該ポート同士がPCI Expressバスによって接続されている、請求項1記載のストレージ装置。
【請求項5】
前記接続用回路がNTBポートを有するPCI Expressスイッチを備え、二つのクラスタの前記NTBポート同士がPCI Expressバスによって接続されている、請求項1記載のストレージ装置。
【請求項6】
前記第1のクラスタが、前記第2のクラスタに、当該第2のクラスタの前記DMAコントローラに対する起動要求をライトし、
当該DMAコントローラはこの起動要求によって起動した後、前記転送リストにしたがって前記対象データを前記第1のクラスタの前記ローカルメモリにライトする、請求項3記載のストレージ装置。
【請求項7】
前記接続用回路がNTBポートを有するPCI Expressスイッチを備え、二つのクラスタの前記NTBポート同士がPCI Expressバスによって接続され、
前記第2のクラスタの前記DMAコントローラは、前記対象データを前記第1のクラスタの前記ローカルメモリに転送後、当該ローカルメモリに前記データ転送のコンプリーションをライトする、請求項3記載のストレージ装置。
【請求項8】
前記複数のクラスタのそれぞれでは、前記処理装置を用いた前記データ転送を実行する実行主体が複数定義され、
前記複数のクラスタのそれぞれは、前記DMAコントローラを複数備え、
前記複数の実行主体と前記複数DMAコントローラが1:1に割り当てられ、当該実行主体が割り当てられたDMAコントローラに対してアクセス権を有するものであり、
前記第1のクラスタの前記DMAコントローラに前記第2のクラスタの前記実行主体が割り当てられている、請求項3記載のストレージ装置。
【請求項9】
前記処理装置は、当該処理装置が属するクラスタのDMAに対して、当該クラスタ内でのデータ転送及び前記他クラスタとの間でのデータ転送を要求するものであり、
前記複数のクラスタのそれぞれは、自クラスタの前記DMAコントローラに対して複数のデータ転送要求が存在する場合、どの発行元からの当該要求を優先させるかを定めた優先制御テーブルを前記自クラスタ及び前記他クラスタの前記DMAコントローラに対して設定し、これを自クラスタの前記ローカルメモリに格納している、請求項1記載のストレージ装置。
【請求項10】
前記複数のクラスタのそれぞれは、自クラスタの前記ローカルメモリに前記他クラスタの前記DMAコントローラのステータスを規定するテーブルを有し、
前記自クラスタは当該テーブルに対するライトを他クラスタから受け付け、
前記自クラスタは当該テーブルを参照して前記他クラスタの前記ローカルメモリに当該他クラスタの前記DMAコントローラに対する前記転送リストをライトする、請求項3記載のストレージ装置。
【請求項11】
前記他クラスタは前記DMAコントローラのステータスを前記テーブルにライトする請求項10記載のストレージ装置。
【請求項12】
上位計算機からのコマンドに基づいて、記憶デバイスに対するデータの入出力を制御するコントローラを備え、このコントローラが複数のクラスタを備えている、ストレージ装置のデータ転送制御方法において、
第1のクラスタから第2のクラスタに対してデータを転送する命令をライトするステップと、
前記第2のクラスタがこの命令に基づいて前記第1のクラスタから要求があったデータを前記第1のクラスタにライトするステップと、
を備え、
前記第1のクラスタは前記第2のクラスタにリード要求を発行することなく、前記第2のクラスタから前記第1のクラスタに前記命令の対象となった対象データをリアルタイムに転送する、データ転送制御方法。
【請求項13】
前記データ転送は、前記第1のクラスタと前記第2のクラスタと接続するPCI Expressスイッチを介したダイレクトメモリアクセスによって実行される、請求項12記載のデータ転送制御方法。
【請求項1】
上位計算機からのコマンドに基づいて、記憶デバイスに対するデータの入出力を制御するコントローラを備え、このコントローラが複数のクラスタを備えている、ストレージ装置において、
前記複数のクラスタのそれぞれは、
前記上位計算機とのインターフェースと、
前記記憶デバイスとのインターフェースと、
ローカルメモリと、
他クラスタとの接続用回路と、
当該他クラスタ間のデータ転送を処理する処理装置と、
備え、
前記複数のクラスタのうちの第1のクラスタが第2のクラスタからのデータ転送を必要とする時、
前記第1のクラスタは前記第2のクラスタの前記ローカルメモリにデータ転送要求をライトし、
前記第2のクラスタは、前記ローカルメモリにライトされたデータ転送要求を参照して、このデータ転送要求の対象となったデータを当該ローカルメモリからリードし、リードした前記対象データを前記第1のクラスタの前記ローカルメモリにライトする、
ストレージ装置。
【請求項2】
前記複数のクラスタのそれぞれはDMAコントローラを備え、
前記第1のクラスタは、前記データ転送要求として、前記第2のクラスタのDMAコントローラに対する転送リストを当該第2のクラスタの前記ローカルメモリにライトし、
前記第2のクラスタの前記DMAコントローラは、前記転送リストを参照して、前記対象データを前記第1のクラスタにライトし、
前記接続用回路がNTBポートを有するPCI Expressスイッチを備え、二つのクラスタの前記NTBポート同士がPCI Expressバスによって接続され、
前記第2のクラスタの前記DMAコントローラは、前記対象データを前記第1のクラスタの前記ローカルメモリに転送後、当該ローカルメモリに前記データ転送のコンプリーションをライトし、
前記第1のクラスタが、前記第2のクラスタに、当該第2のクラスタの前記DMAコントローラに対する起動要求をライトし、
当該DMAコントローラはこの起動要求によって起動した後、前記転送リストにしたがって前記対象データを前記第1のクラスタの前記ローカルメモリにライトし、
前記複数のクラスタのそれぞれは、自クラスタの前記ローカルメモリに前記他クラスタの前記DMAコントローラのステータスを規定するテーブルを有し、
前記自クラスタは当該テーブルに対するライトを他クラスタから受け付け、
前記自クラスタは当該テーブルを参照して前記他クラスタの前記ローカルメモリに当該他クラスタの前記DMAコントローラに対する前記転送リストをライトし、
前記他クラスタは前記DMAコントローラのステータスを前記テーブルにライトする請求項1記載のストレージ装置。
【請求項3】
前記複数のクラスタのそれぞれはDMAコントローラを備え、
前記第1のクラスタは、前記データ転送要求として、前記第2のクラスタのDMAコントローラに対する転送リストを当該第2のクラスタの前記ローカルメモリにライトし、
前記第2のクラスタの前記DMAコントローラは、前記転送リストを参照して、前記対象データを前記第1のクラスタにライトする、請求項1記載のストレージ装置。
【請求項4】
前記接続用回路がPCI Expressのポートを備え、二つのクラスタの当該ポート同士がPCI Expressバスによって接続されている、請求項1記載のストレージ装置。
【請求項5】
前記接続用回路がNTBポートを有するPCI Expressスイッチを備え、二つのクラスタの前記NTBポート同士がPCI Expressバスによって接続されている、請求項1記載のストレージ装置。
【請求項6】
前記第1のクラスタが、前記第2のクラスタに、当該第2のクラスタの前記DMAコントローラに対する起動要求をライトし、
当該DMAコントローラはこの起動要求によって起動した後、前記転送リストにしたがって前記対象データを前記第1のクラスタの前記ローカルメモリにライトする、請求項3記載のストレージ装置。
【請求項7】
前記接続用回路がNTBポートを有するPCI Expressスイッチを備え、二つのクラスタの前記NTBポート同士がPCI Expressバスによって接続され、
前記第2のクラスタの前記DMAコントローラは、前記対象データを前記第1のクラスタの前記ローカルメモリに転送後、当該ローカルメモリに前記データ転送のコンプリーションをライトする、請求項3記載のストレージ装置。
【請求項8】
前記複数のクラスタのそれぞれでは、前記処理装置を用いた前記データ転送を実行する実行主体が複数定義され、
前記複数のクラスタのそれぞれは、前記DMAコントローラを複数備え、
前記複数の実行主体と前記複数DMAコントローラが1:1に割り当てられ、当該実行主体が割り当てられたDMAコントローラに対してアクセス権を有するものであり、
前記第1のクラスタの前記DMAコントローラに前記第2のクラスタの前記実行主体が割り当てられている、請求項3記載のストレージ装置。
【請求項9】
前記処理装置は、当該処理装置が属するクラスタのDMAに対して、当該クラスタ内でのデータ転送及び前記他クラスタとの間でのデータ転送を要求するものであり、
前記複数のクラスタのそれぞれは、自クラスタの前記DMAコントローラに対して複数のデータ転送要求が存在する場合、どの発行元からの当該要求を優先させるかを定めた優先制御テーブルを前記自クラスタ及び前記他クラスタの前記DMAコントローラに対して設定し、これを自クラスタの前記ローカルメモリに格納している、請求項1記載のストレージ装置。
【請求項10】
前記複数のクラスタのそれぞれは、自クラスタの前記ローカルメモリに前記他クラスタの前記DMAコントローラのステータスを規定するテーブルを有し、
前記自クラスタは当該テーブルに対するライトを他クラスタから受け付け、
前記自クラスタは当該テーブルを参照して前記他クラスタの前記ローカルメモリに当該他クラスタの前記DMAコントローラに対する前記転送リストをライトする、請求項3記載のストレージ装置。
【請求項11】
前記他クラスタは前記DMAコントローラのステータスを前記テーブルにライトする請求項10記載のストレージ装置。
【請求項12】
上位計算機からのコマンドに基づいて、記憶デバイスに対するデータの入出力を制御するコントローラを備え、このコントローラが複数のクラスタを備えている、ストレージ装置のデータ転送制御方法において、
第1のクラスタから第2のクラスタに対してデータを転送する命令をライトするステップと、
前記第2のクラスタがこの命令に基づいて前記第1のクラスタから要求があったデータを前記第1のクラスタにライトするステップと、
を備え、
前記第1のクラスタは前記第2のクラスタにリード要求を発行することなく、前記第2のクラスタから前記第1のクラスタに前記命令の対象となった対象データをリアルタイムに転送する、データ転送制御方法。
【請求項13】
前記データ転送は、前記第1のクラスタと前記第2のクラスタと接続するPCI Expressスイッチを介したダイレクトメモリアクセスによって実行される、請求項12記載のデータ転送制御方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【公開番号】特開2012−133405(P2012−133405A)
【公開日】平成24年7月12日(2012.7.12)
【国際特許分類】
【出願番号】特願2009−173285(P2009−173285)
【出願日】平成21年7月24日(2009.7.24)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
【公開日】平成24年7月12日(2012.7.12)
【国際特許分類】
【出願日】平成21年7月24日(2009.7.24)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】
[ Back to top ]