JP2018060419A - ストレージ制御装置およびストレージ装置 - Google Patents

ストレージ制御装置およびストレージ装置 Download PDF

Info

Publication number
JP2018060419A
JP2018060419A JP2016198364A JP2016198364A JP2018060419A JP 2018060419 A JP2018060419 A JP 2018060419A JP 2016198364 A JP2016198364 A JP 2016198364A JP 2016198364 A JP2016198364 A JP 2016198364A JP 2018060419 A JP2018060419 A JP 2018060419A
Authority
JP
Japan
Prior art keywords
data
error
storage
connection port
control device
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.)
Granted
Application number
JP2016198364A
Other languages
English (en)
Other versions
JP6773974B2 (ja
Inventor
貴志 堀
Takashi Hori
貴志 堀
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 JP2016198364A priority Critical patent/JP6773974B2/ja
Publication of JP2018060419A publication Critical patent/JP2018060419A/ja
Application granted granted Critical
Publication of JP6773974B2 publication Critical patent/JP6773974B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】データの受信状況の確認を効率化すること。【解決手段】接続ポート11は、自ポートで発生したエラーの検出機能とエラーの検出結果を記憶する検出結果記憶部11aとを備える。接続ポート11は、ストレージ制御装置20へのデータ送信に用いられる。処理部12は、接続ポート11およびストレージ制御装置20が備える接続ポート21を介して、ストレージ制御装置20にデータを送信する。処理部12は、接続ポート21が備える検出結果記憶部21aから接続ポート21によるエラーの検出結果を取得し、取得したエラーの検出結果に基づいて、ストレージ制御装置20におけるデータの受信状況を確認する。【選択図】図1

Description

本発明はストレージ制御装置およびストレージ装置に関する。
現在、データの保存にストレージ装置が利用されている。ストレージ装置は、HDD(Hard Disk Drive)やSSD(Solid State Drive)などの記憶装置を複数有し、大容量の記憶領域を提供する。ストレージ装置は、記憶装置に対するデータの書き込みや読み出しのアクセス制御を行うストレージ制御装置を有する。ストレージ装置では、ストレージ制御装置を複数搭載して、データアクセスの分散化や冗長化を図り、データアクセスの性能や信頼性を向上させることがある。
例えば、ホストから一方のディスクアレイコントローラに転送されたデータを、コントローラ間インタフェースを介して他方のディスクアレイコントローラに転送し、両コントローラのディスクキャッシュ上のデータを多重化して、高信頼化を図る提案がある。
また、制御装置間のDMA(Direct Memory Access)を制御するDMAチップが、データの書き込み要求のあった第1の制御装置のメモリ、および、第1の制御装置と冗長化された第2の制御装置のメモリへデータを転送して、データを冗長化する提案もある。
なお、メモリバスと入出力バスとを接続するバスインタフェース装置が、バスに接続された装置により出力されたデータからチェックコードを計算し、同装置により出力されたチェックコードと比較することで、転送中のデータのエラーを発見する提案もある。
特開平8−328758号公報 特開2014−32516号公報 特開平5−224968号公報
上記のように、あるストレージ制御装置が他のストレージ制御装置へデータを送信することがある。しかし、他のストレージ制御装置におけるエラーによって、データが適切に受信されないことがある。データが適切に受信されないと、両ストレージ制御装置の連携を適切に行えず、ストレージ装置の信頼性の低下を招くおそれがある。そこで、送信先のストレージ制御装置によるデータの適切な受信を保証する仕組みが問題となる。
例えば、データ送信毎に、送信元のストレージ制御装置により、送信先のストレージ制御装置に対してデータの受信確認を要求する要求メッセージを送信する方法が考えられる。送信先のストレージ制御装置は、要求メッセージに応じて、受信したデータを確認し、データ受信の成否を判定し、判定結果を示す応答メッセージを送信元のストレージ制御装置に応答する。
しかし、この方法では、両ストレージ制御装置間で送受信される確認用のメッセージにより通信量が増える可能性がある。また、ストレージ制御装置において、確認用のメッセージ通信や受信成否確認を行うプロセッサの負荷が増える可能性がある。
1つの側面では、本発明は、データの受信状況の確認を効率化することを目的とする。
1つの態様では、ストレージ制御装置が提供される。ストレージ制御装置は、第1の接続ポートと処理部とを有する。第1の接続ポートは、自ポートで発生したエラーの検出機能とエラーの検出結果を記憶する第1の記憶部とを備え、他のストレージ制御装置へのデータ送信に用いられる。処理部は、第1の接続ポートおよび他のストレージ制御装置が備える第2の接続ポートを介して、他のストレージ制御装置にデータを送信し、第2の接続ポートが備える第2の記憶部から第2の接続ポートにおける検出結果を取得し、取得した検出結果に基づいて、他のストレージ制御装置におけるデータの受信状況を確認する。
また、1つの態様では、ストレージ装置が提供される。ストレージ装置は、第1のストレージ制御装置と第2のストレージ制御装置とを有する。第1のストレージ制御装置は、第1の接続ポートを有する。第1の接続ポートは、自ポートで発生したエラーの検出機能とエラーの検出結果を記憶する記憶部とを備える。第2のストレージ制御装置は、第2の接続ポートと処理部とを有する。第2の接続ポートは、第1のストレージ制御装置へのデータ送信に用いられる。処理部は、第2の接続ポートおよび第1の接続ポートを介して第1のストレージ制御装置にデータを送信し、記憶部から検出結果を取得し、取得した検出結果に基づいて、第1のストレージ制御装置におけるデータの受信状況を確認する。
1つの側面では、データの受信状況の確認を効率化できる。
第1の実施の形態のストレージ装置を示す図である。 第2の実施の形態の情報処理システムを示す図である。 ストレージ装置のハードウェア例を示す図である。 デバイスツリーの例を示す図である。 ストレージ装置の機能例を示す図である。 他CM上のデバイスへのアクセス例を示す図である。 メモリ空間の例を示す図である。 他CM上のデバイスのUESTSに対するアクセス例を示す図である。 CMのDMAによるデータ転送例を示すフローチャートである。 他UPのUESTSに対するアクセス例を示す図である。 他RPのUESTSに対するアクセス例を示す図である。 異常検出の例(その1)を示す図である。 異常検出の例(その2)を示す図である。 データの受信状況の確認機能の比較例を示す図である。 ストレージ装置の他のハードウェア例(その1)を示す図である。 ストレージ装置の他のハードウェア例(その2)を示す図である。
以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態のストレージ装置を示す図である。ストレージ装置1は、ストレージ制御装置10,20および記憶装置群30を有する。ストレージ制御装置10,20は、記憶装置群30に属する複数の記憶装置に対するデータアクセスを制御する。記憶装置群30は、HDDやSSDなどの複数の記憶装置を含む。例えば、ストレージ装置1は、情報処理装置(図1では図示を省略)に接続され、上記複数の記憶装置による大容量のデータ記憶領域を情報処理装置に提供する。
ストレージ制御装置10,20は相互に連携する。例えば、ストレージ制御装置10,20のうちの何れか一方が故障しても、他方のストレージ制御装置がデータアクセスを継続する。ストレージ制御装置10,20は、ユーザデータの二重化や連携用の制御情報を受け渡すために通信を行う。ストレージ制御装置10,20は、データが送信先のストレージ制御装置により適切に受信されたことの確認(受信状況の確認、あるいは、送達確認と称する)を行う機能を提供する。
ストレージ制御装置10は、接続ポート11、処理部12およびデータ記憶部13を有する。
接続ポート11は、ストレージ制御装置20へのデータ送信に用いられるインタフェースである。接続ポート11は、自ポートで発生したエラーの検出機能を有する。接続ポート11は、検出結果記憶部11aを有する。検出結果記憶部11aは、接続ポート11のエラー検出機能によるエラーの検出結果を記憶する。接続ポート11は、エラーの検出結果として、検出したエラーに対応する識別情報を生成し、検出結果記憶部11aに格納する。
接続ポート11の一例として、PCIe(Peripheral Component Interconnect Express)のインタフェースが挙げられる。PCIeのインタフェースを用いる場合、検出結果記憶部11aは、例えばPCIeにおけるアンコレクタブル・エラー・ステータス・レジスタ(UESTS:Uncorrectable Error Status register)である。UESTSは、アンコレクタブルエラーに関する情報を記憶する。アンコレクタブルエラーは、訂正不可能なデータ誤りの発生を示すエラーである。
ストレージ制御装置10は、接続ポート11を複数有してもよい。例えば、PCIeデバイスを複数接続する場合に、両PCIeデバイスが備える接続ポート同士を所定のケーブルで繋ぐことで、PCIeデバイス同士を接続できる。また、接続ポート11をストレージ制御装置20が備える接続ポートと所定のケーブルで接続することで、ストレージ制御装置10,20の間の通信路を形成することもできる。すなわち、ストレージ制御装置10では、複数の接続ポートが多段に接続されて、デバイス間の通信路を形成してもよい。
処理部12は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部12はプログラムを実行するプロセッサでもよい。プロセッサは、複数のプロセッサの集合(マルチプロセッサ)を含む。
データ記憶部13は、処理部12の処理に用いられるデータ(前述のユーザデータや制御情報など)を記憶する主記憶装置である。データ記憶部13は、例えば、RAM(Random Access Memory)やメモリなどと呼ばれる記憶装置でもよい。
ストレージ制御装置20は、接続ポート21、処理部22およびデータ記憶部23を有する。
接続ポート21は、接続ポート11と同様に、自ポートで発生したエラーの検出機能を有する。接続ポート21は、検出結果記憶部21aを有する。検出結果記憶部21aは、接続ポート21によるエラーの検出結果を記憶する。接続ポート21は、エラーの検出結果として、検出したエラーに対応する識別情報を生成し、検出結果記憶部21aに格納する。接続ポート21は、接続ポート11と同様に、PCIeのインタフェースでもよい。検出結果記憶部21aは、UESTSでもよい。更に、ストレージ制御装置20は、ストレージ制御装置10と同様に、接続ポート21を複数有してもよい。すなわち、ストレージ制御装置20では、複数の接続ポートが多段に接続されて、デバイス間の通信路を形成してもよい。
処理部22は、CPU,DSP,ASIC,FPGAなどを含み得る。処理部22はプログラムを実行するプロセッサでもよい。プロセッサは、マルチプロセッサでもよい。データ記憶部23は、処理部22の処理に用いられるデータを記憶する主記憶装置である。データ記憶部23は、例えば、RAMやメモリなどと呼ばれる記憶装置でもよい。
ここで、ストレージ制御装置10からストレージ制御装置20へデータの送信を行う場合を考える。処理部12は、データ記憶部13に記憶されたデータをデータ記憶部23へ送信する。このデータ送信は、DMAにより実現されてもよい。そのために、ストレージ制御装置10,20は、DMAを制御するDMAコントローラを更に有してもよい。例えば、処理部12は、ストレージ制御装置10のDMAコントローラを用いて、DMAによるストレージ制御装置20へのデータ送信を実現することもできる。
処理部12は、接続ポート11,21を介して、ストレージ制御装置20にデータを送信する。このとき、接続ポート21は、自ポートで発生したエラーを検出し、エラーの検出結果を検出結果記憶部21aに格納する。処理部12は、接続ポート21による検出結果を、検出結果記憶部21aから取得する。
処理部12は、接続ポート21から取得した検出結果を、データ記憶部13に格納する。処理部12は、取得した検出結果に基づいて、ストレージ制御装置20によるデータの受信状況を確認する。ここで、ストレージ制御装置20によるデータの受信状況の確認は、「データの送達確認」ともいえる。
例えば、検出結果がエラーの識別情報を含まない場合(全てエラーなしの場合)、処理部12は、ストレージ制御装置20により適切にデータが受信されたと判断する。また、検出結果がエラーの識別情報を含む場合(少なくとも1つのエラーありの場合)、処理部12は、ストレージ制御装置20により適切にデータが受信されていないと判断する。後者の場合、処理部12は、更に、該当のデータの再送処理を行ってもよい。
このように、処理部12は、ストレージ制御装置20においてデータ送信の経路上にある接続ポート21のエラー検出機能を、データの受信状況の確認に利用する。このため、ストレージ制御装置10,20の間で、受信状況の確認用のメッセージを余計に送受信しなくてもよくなる。また、ストレージ制御装置20は受信データの確認処理を実行しなくてもよくなる。その結果、ストレージ制御装置10,20間の受信状況の確認に伴う通信量、および、処理部12,22の負荷が軽減される。そして、受信状況の確認に伴う所要時間を短縮できる。すなわち、データ送信元のストレージ制御装置10から、ストレージ制御装置20側の異常を直接検出することにより、性能劣化を抑えてデータの受信状況の確認を実現できる。こうして、データの受信状況の確認を効率化できる。
また、データ送信中に接続ポート21でエラーが検出されている場合、データ送信に悪影響を及ぼしている可能性が高いと考えられる。そこで、接続ポート21でエラーが検出されている場合には、処理部12は、ストレージ制御装置20が適切にデータを受信できていないと判断して、再送などのリカバーを行う。これにより、ストレージ装置1におけるストレージ制御装置10,20の連携を適切に行える。その結果、ストレージ装置1の信頼性の向上を図れる。特に、ストレージ制御装置10,20の冗長制御は、適切にデータを送受信できることが前提となる。例えば、ストレージ制御装置10からストレージ制御装置20へのデータ送信に失敗したまま、ストレージ制御装置10が縮退すると、正常データが喪失されることになり、データの不整合が発生してしまう。このため、データの送達保証による信頼性向上は、ストレージ制御装置10,20において特に重要であり、受信状況の確認を高速実行する意義は大きい。
更に、エラーの検出結果として、例えば、前述のPCIeにおけるUESTSの情報のようにデータに対するアンコレクタブルエラーの検出状況を利用することで、データの受信失敗の検出精度を向上できる。なぜなら、接続ポート21でアンコレクタブルエラーが発生している場合、接続ポート21においてデータ化けやデータ欠落などが生じていることになり、この現象は正常な受信データの喪失を意味するからである。一方、アンコレクタブルエラーが検出されていなければ、接続ポート21をデータが正しく通過したことを意味する。
なお、ストレージ制御装置20が、複数の接続ポートを有する場合、処理部12は、データの通信経路上にある複数の接続ポートそれぞれの検出結果記憶部から、各接続ポートによるエラーの検出結果を取得してもよい。そうすれば、処理部12は、接続ポートを備えるデバイス毎に、エラーの発生状況を確認でき、データの受信失敗の要因になった通信経路上のデバイスを特定することもできる。例えば、処理部12は、エラーの発生したデバイスに応じた再送制御を行ったり、特定したデバイスのエラーをログに出力したりしてもよい。
更に、ストレージ制御装置20からストレージ制御装置10へデータを送信する場合も、処理部22は、処理部12と同様に、データの受信状況の確認を行える。具体的には、処理部22は、接続ポート11が備える検出結果記憶部11aから、接続ポート11によるエラーの検出結果を取得し、取得したエラーの検出結果に基づいてデータの受信状況の確認を行う。これにより、ストレージ制御装置20によるデータの受信状況の確認も同様に効率化できる。
以下では、ストレージ制御装置10,20相当の機能を有するストレージ装置を更に具体的に説明する。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムを示す図である。第2の実施の形態の情報処理システムは、ストレージ装置50およびサーバ60を含む。ストレージ装置50およびサーバ60は、ネットワーク70に接続されている。ネットワーク70は、例えば、SAN(Storage Area Network)である。
ストレージ装置50は、複数のHDD(またはSSD)を収納可能であり、複数のHDDを組み合わせて大容量の記憶領域をサーバ60に提供する。ストレージ装置50は、RAID(Redundant Arrays of Inexpensive Disks)装置、ディスクアレイ装置、または、ストレージシステムなどと呼ばれてもよい。
サーバ60は、ストレージ装置50に格納されたデータを用いて業務処理を実行するサーバコンピュータである。
図3は、ストレージ装置のハードウェア例を示す図である。ストレージ装置50は、ドライブエンクロージャ(DE:Drive Enclosure)51およびコントローラモジュール(CM:Controller Module)100,200を有する。
DE51は、複数のHDDを収納する。DE51は、HDDに代えて、あるいは、HDDと併せて複数のSSDを収納してもよい。
CM100,200は、DE51に収納された複数のHDDを組み合わせて、RAIDの技術による論理的な記憶領域をサーバ60に提供する。CM100,200は、ネットワーク70を介してサーバ60から、記憶領域に対するデータの読み出しや書き込みの要求を受け付け、DE51に収納された複数のHDDへアクセスする。CM100,200は、冗長化されている。CM100,200の何れか一方が故障しても、他方によりDE51へのアクセスを継続できる。
CM100の装置番号は“#0”である。CM200の装置番号は“#1”である。図中、例えば、CM100を指して“CM#0”や“CM(#0)”のように表記することがある。CM100,200は、第1の実施の形態のストレージ制御装置10,20の一例である。
CM100,200は、互いに連携するために、相互に通信を行う(CM間通信と称することがある)。CM間通信では、DMAの技術により、一方のCMのメモリから他方のCMのメモリに、データが転送される。転送対象のデータは、ユーザデータであることもあるし、CM間の連携用の制御情報であることもある。
CM100は、CPU110、RAM120、PCIeスイッチ130,140、SAS(Serial Attached SCSI)150およびCA(Channel Adapter)160を有する。これらの各デバイスは、PCIeのインタフェースを用いたバスにより接続される。
CPU110は、CM100全体を制御するプロセッサである。CPU110は、マルチプロセッサであってもよい。CPU110は、所定の機能を実現するASICやFPGAなどを備えてもよい。CPU110は、ルートポート(RP:Root Port)111を有する。
RP111は、PCIeスイッチ130と接続するインタフェースである。なお、CPU110は、PCIeスイッチ140と接続するRPも有している(図示を省略する)。
RAM120は、CM100の主記憶装置である。RAM120は、CPU110に接続される。RAM120は、CPU110に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。また、RAM120は、CPU110による処理に用いる各種データを記憶する。
PCIeスイッチ130,140は、CM100が備える各種のデバイス(CPU110,SAS150およびCA160など)を接続する中継器である。PCIeスイッチ130は、DMA制御部131、アップストリームポート(UP:Upstream Port)132およびノントランスペアレントブリッジ(NTB:Non Transparent Bridge)133を有する。
DMA制御部131は、CM100からCM200へのDMAによるデータ転送を制御する。DMA制御部131は、例えば、FPGAやASICなどのプロセッサによって実現される。
UP132は、RP111と接続するインタフェースである。
NTB133は、CM200と接続するインタフェースである。NTB133は、異なる2つのPCIeドメイン間を接続し、相互の通信を可能にする。NTB133は、所定の条件に合致する通信に限定して、他PCIeドメインへの通過を許容する。例えば、PCIeの規約では、NTB133は、メモリリクエストという種類のコマンドの通過を許容する。メモリリクエストは、相手側のCMのRAMに対するデータの読み出しや書き込み(Read/Write)を要求できる。後述するように、CM100は、メモリリクエストを用いて、CM200における各デバイスが保持する情報を読み取る。このため、メモリリクエストを、CM200の各デバイスに対するアクセス要求であるともいえる。
PCIeスイッチ140も、PCIeスイッチ130と同様のハードウェアを備える。PCIeスイッチ140は、CPU110、SAS150およびCA160と接続される。PCIeスイッチ140は、SAS150およびCA160と接続するダウンストリームポート(DW:DoWnstream port)を有するが図3では図示を省略している(PCIeスイッチ130もDWを有する)。
SAS150は、DE51と接続するインタフェースである。
CA160は、ネットワーク70と接続するインタフェースである。CA160としては、例えば、ファイバチャネル(FC:Fibre Channel)のインタフェースを用いることができる。
CM200は、CPU210、RAM220、PCIeスイッチ230,240、SAS250およびCA260を有する。これらの各デバイスは、PCIeのインタフェースを用いたバスにより接続される。
CPU210は、CM200全体を制御するプロセッサである。CPU210は、マルチプロセッサであってもよい。CPU210は、所定の機能を実現するASICやFPGAなどを備えてもよい。CPU210は、RP211を有する。
RP211は、PCIeスイッチ230と接続するインタフェースである。なお、CPU210は、PCIeスイッチ240と接続するRPも有している(図示を省略する)。
RAM220は、CM200の主記憶装置である。RAM220は、CPU210に接続される。RAM220は、CPU210に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。また、RAM220は、CPU210による処理に用いる各種データを記憶する。
PCIeスイッチ230,240は、CM200が備える各種のデバイスを接続する中継器である。PCIeスイッチ230は、DMA制御部231、UP232およびNTB233を有する。
DMA制御部231は、CM200からCM100へのDMAによるデータ転送を制御する。DMA制御部231は、例えば、FPGAやASICなどのプロセッサによって実現される。
UP232は、RP211と接続するインタフェースである。
NTB233は、CM200と接続するインタフェースである。NTB233は、NTB133と同様に異なる2つのPCIeドメイン間を接続し、相互の通信を可能にする。NTB233は、NTB133と接続される。
PCIeスイッチ240も、PCIeスイッチ230と同様のハードウェアを備える。PCIeスイッチ240は、CPU210、SAS250およびCA260と接続される。PCIeスイッチ240は、SAS250およびCA260と接続するDWを有するが図3では図示を省略している(PCIeスイッチ230もDWを有する)。
SAS250は、DE51と接続するインタフェースである。SAS250は、SAS150にも接続される。
CA260は、ネットワーク70と接続するインタフェースである。CA260としては、例えば、FCのインタフェースを用いることができる。
ここで、RP111,211、UP132,232およびNTB133,233は、それぞれがエラー検出機能を有する。エラー検出機能により検出可能なエラーは、転送対象のデータに対するアンコレクタブルエラーを含む。RP111,211、UP132,232およびNTB133,233は、それぞれが自身で発生したアンコレクタブルエラーの情報を格納するためのUESTSと呼ばれるレジスタを有する。
PCIeの規約では、単一のCM内部でのデバイス間の通信は保証されるが、CM100内部のデバイスとCM200内部のデバイスとの間の通信は保証されていない。すなわち、CM100は、自CMのデバイスツリーに属するデバイスにおける異常をPCIeの規約における通信保証の機能により検出できる。一方、CM100は、CM200のデバイスツリーに属するデバイスにおける異常をPCIeの規約における通信保証の機能では検出できない。そこで、CM100,200は、データの受信状況の確認を工夫して、CM100,200間の通信を保証する機能を提供する。
以下の説明では、CM100からCM200へのDMAによるデータ転送において、CM100によりデータの受信状況の確認を行うケースを例示する。その際、CM100は、CM200側に存在するUESTSの情報を用いる。そこで、以下では、RP211、UP232およびNTB233それぞれのUESTSを図示するが、RP111、UP132およびNTB133それぞれのUESTSの図示を省略する。
RP211は、UESTS211aを有する。UP232は、UESTS232aを有する。NTB233はUESTS233aを有する。
RP111、UP132およびNTB133は、第1の実施の形態の接続ポート11の一例である。RP211、UP232およびNTB233は、第1の実施の形態の接続ポート21の一例である。
図4は、デバイスツリーの例を示す図である。CM100のデバイスツリーでは、CPU110に属するルートコンプレックス(RP111に相当)を頂点とし、RP111の配下にPCIeスイッチ群SW1(PCIeスイッチ130,140)が接続される。そして、PCIeスイッチ群SW1の配下に、複数のエンドポイントが接続される。複数のエンドポイントは、NTB133、SAS150およびCA160を含む。CM100のデバイスツリーを、1つのPCIeドメインと呼ぶこともできる。
CM200のデバイスツリーもCM100と同様の構造となる。ただし、図4では、両PCIeドメインの接続関係を表すために、ルートコンプレックス(RP211に相当)を下側にして図示している。RP211の配下にPCIeスイッチ群SW2(PCIeスイッチ230,240)が接続される。そして、PCIeスイッチ群SW2の配下に、複数のエンドポイントが接続される。複数のエンドポイントは、NTB233、SAS250およびCA260を含む。
CM100のデバイスツリーおよびCM200のデバイスツリーは、NTB133,233を介して接続される。CM100,200は、NTB133,233を介して、所定のコマンドを送受信する。
NTB133,233は、次の特性により、CM100,200の通信を可能とする。
第1に、NTB133,233は、自CM側、および、他CM側の2つのバスを接続可能であり、両バスの2つのドメインを分離させつつ、電気的な接続を可能とする。
第2に、NTB133,233は、両方のバスから異なるエンドポイントとして認識される。また、NTB233は、相手側のデバイス(例えば、CPU110)に、NTB233のデバイス空間を認識させる機能をもつ。すなわち、CPU110は、CPU110が認識する論理的なアドレスを指定することで、NTB233のレジスタへアクセス可能である。NTB133も、CM200に対して同様の機能をもつ。
第3に、NTB133,233は、NTB133,233を跨ぐ(PCIeドメインを跨ぐ)パケットの送受信を可能とする。ここで、パケットは、通信対象のデータの一単位である。
第4に、NTB133,233は、NTB133,233を跨ぐパケットのアドレスを変換する機能を有する。
第5に、NTB133,233は、PCIeの標準規約で動作が定められているわけではないため、チップベンダ毎に異なった仕様にできる。
図5は、ストレージ装置の機能例を示す図である。図5では、主に、CPU110、NTB133,233、RP211およびUP232が有する機能を説明する。
CPU110は、送信制御部112を有する。
送信制御部112は、RAM120に記憶されたプログラムがCPU110により実行されることで実現されてもよいし、所定のプロセッサ(例えば、ASICやFPGAなどのハードウェア)により実現されてもよい。
送信制御部112は、DMAによるデータ転送の準備処理を行い、DMA制御部131にデータ転送を指示する。具体的には、送信制御部112は、CM200の実メモリ空間に対するデータ転送用のDMA起動情報を生成し、DMA制御部131に提供して、データ転送用のパケットを、DMA制御部131を用いて送信する。なお、送信制御部112のDMAによるデータ転送は、CM200へのデータ送信であるともいえる。
また、送信制御部112は、DMAによるデータ転送のためのDMA起動情報に加えて、UESTS211a,232a,233aに格納されたエラー情報を読み出すためのDMA起動情報を生成し、DMA制御部131に提供する。こうして、送信制御部112は、UESTS211a,232a,233aのREADコマンドを含むパケットをDMA制御部131の機能によりCM200に送信する。ここで、エラー情報は、RP211、UP232およびNTB233の各デバイスによるエラーの検出結果の情報である。送信制御部112は、UESTS211a,232a,233aから取得されたエラー情報をRAM120に格納する。
送信制御部112は、RAM120に格納されたエラー情報に基づいて、CM200によるデータの受信状況の確認(データの送達確認)を行う。送信制御部112は、CM200により適切にデータが受信されたと判定すると、今回のデータ転送を終了し、次のデータ転送に移る。送信制御部112は、CM200により適切にデータが受信されていないと判定すると、今回のデータの再送を行う。
ここで、送信制御部112は、CM100におけるメモリ空間の所定のメモリアドレス(単にアドレスと称することがある)を指定して、CM200に対するコマンドを発行する(詳細は後述される)。CM100により発行されるパケットは、アクセス先のデバイスに応じたアドレスを含む。
NTB133は、アドレス変換部133aを有する。アドレス変換部133aは、所定のプロセッサ(例えば、ASICやFPGAなどのハードウェア)により実現される。
アドレス変換部133aは、パケットのアドレス変換を行う。アドレス変換部133aは、CM100側のアドレスをCM200側のアドレスに変換することもあるし、CM200側のアドレスをCM100側のアドレスに変換することもある。アドレス変換部133aは、後述するメモリ空間におけるデバイスアドレスのレイアウトに従ってアドレスの変換を行う。
RP211は、エラー検出部211bを有する。エラー検出部211bは、所定のプロセッサ(例えば、ASICやFPGAなどのハードウェア)により実現される。
エラー検出部211bは、RP211におけるアンコレクタブルエラーを検出するエラー検出機能である。例えば、エラー検出部211bは、パケットに付加されたCRC(Cyclic Redundancy Check)の値によるデータ化けの検出や、パケットのシーケンス番号によるパケット欠落の検出などを行う。
エラー検出部211bは、検出したアンコレクタブルエラーの情報をUESTS211aに格納する。エラー検出部211bは、32ビットのエラー情報をUESTS211aに格納する。エラーが検出されていない場合、エラー検出部211bは、エラー情報を0(=0x00000000)とする。エラーが検出された場合、エラー検出部211bは、エラー情報に含まれる各ビットのうちエラーに応じたビットに1を設定する。
UP232は、エラー検出部232bを有する。エラー検出部232bは、所定のプロセッサ(例えば、ASICやFPGAなどのハードウェア)により実現される。
エラー検出部232bは、UP232におけるアンコレクタブルエラーを検出するエラー検出機能である。エラー検出部232bは、検出したアンコレクタブルエラーの情報をUESTS232aに格納する。エラー検出部232bによるエラー検出やエラー情報の設定方法は、エラー検出部211bと同様である。
NTB233は、エラー検出部233bおよびアドレス変換部233cを有する。エラー検出部233bおよびアドレス変換部233cは、所定のプロセッサ(例えば、ASICやFPGAなどのハードウェア)により実現される。
エラー検出部233bは、NTB233におけるアンコレクタブルエラーを検出するエラー検出機能である。エラー検出部233bは、検出したアンコレクタブルエラーの情報をUESTS233aに格納する。エラー検出部233bによるエラー検出やエラー情報の設定方法は、エラー検出部211bと同様である。
アドレス変換部233cは、パケットのアドレス変換を行う。アドレス変換部233cは、CM100側のアドレスをCM200側のアドレスに変換することもあるし、CM200側のアドレスをCM100側のアドレスに変換することもある。アドレス変換部233cは、後述するメモリ空間に対するデバイスアドレスのレイアウトに従ってアドレスの変換を行う。
図6は、他CM上のデバイスへのアクセス例を示す図である。前述のように、NTB233は、CPU110に対して、NTB233のデバイス空間を認識させる機能をもつ。このため、CPU110は、NTB233のデバイス空間を、CPU110が認識するアドレス空間にマッピングし、マッピングした所定のアドレスへアクセスすることで、NTB233のUESTS233aへアクセスすることができる。
また、NTB133,233は、NTB133,233を跨ぐパケットを送受信可能である。例えば、NTB133は、NTB233へパケットを送信する。また、NTB233は、NTB133へパケットを送信する。このとき、NTB133,233は、次のようにパケットのアドレスを変換する。
NTB133は、CPU110により指定されたUESTS233aに対応するアドレス(CM100側のアドレス)を、CM200側のアドレスに変換する。
NTB233は、NTB133から受信したパケットのUESTS232aに対応するアドレスを、UESTS232aに対応するCM200側のアドレスに変換する。また、NTB233は、NTB133から受信したパケットのUESTS211aに対応するアドレスを、UESTS211aに対応するCM200側のアドレスに変換する。
図7は、メモリ空間の例を示す図である。CPU110が認識するメモリ空間は、アドレスの小さい方から順に、自メモリ空間、他NTB領域、予約領域および他メモリ空間に区分される。
自メモリ空間は、RAM120の実メモリ空間およびCM100側のPCIeデバイスに対応するアドレスを含むメモリ空間である。第2の実施の形態の例では、RAM120の記憶容量は約8ギガバイト(GB:Giga Bytes)である。なお、図中“0x00000000”などの表記の単位は、バイト(B:Bytes)である。すなわち、アドレスの1単位は1バイト(B)に相当する。
他NTB領域は、CM200のNTB233に対応するアドレス空間である。CPU110は、UESTS233aに対応する他NTB領域上のアドレスを指定してReadリクエストを発行することで、UESTS233aの情報を読み出す。
予約領域は、予め確保されたオフセット領域である。
他メモリ空間は、CM200側のメモリ空間(CM200における自メモリ空間に相当するメモリ空間)がマッピングされる領域である。
図7の例では、自メモリ空間のアドレス範囲は“0x0_00000000”〜“0x2_1FFFFFFF”である。他NTB領域のアドレス範囲は“0x2_20000000”〜“0x2_20000FFF”である。予約領域のアドレス範囲は“0x2_20001000”〜“0x2_FFFFFFFF”である。他メモリ空間のアドレス範囲は“0x3_00000000”〜“0x5_20000000”(より厳密には“0x5_1FFFFFFF”まで)である。
ここで、自メモリ空間は、Extended機構による拡張領域を含む。自メモリ空間のサイズ(RAM120のサイズ)は、拡張領域以外のサイズ(8GB)に拡張領域分のサイズを加えたサイズとなる。
Extended機構とは、自CMのPCIeデバイスに対応するアドレスをマッピングした拡張領域をメモリ空間に設け、拡張領域のアドレスを指定したメモリリクエスト(Read/Write)を行うことで、PCIeデバイスにアクセスする仕組みである。
図7の例では、自メモリ空間のアドレス範囲のうち、拡張領域以外のアドレス範囲は“0x0_00000000”〜“0x0_DFFFFFFF”および“0x1_00000000”〜“0x2_1FFFFFFF”である。拡張領域のアドレス範囲は“0x0_E0000000”〜“0x0_FFFFFFFF”である。
拡張領域は、更に、Extended空間、未使用領域およびMMIO(Memory Mapped Input / Output)領域を含む。
Extended空間は、自CMのPCIeデバイスに対応するアドレスが属する領域である。例えば、Extended空間のアドレス範囲は“0x0_E0000000”〜“0x0_EFFFFFFF”である。アドレス範囲“0x0_F0000000”〜“0x1_00000000”の領域に未使用領域およびMMIO領域が属する。
ここで、PCIeデバイスへのアクセスでは、バス番号(Bと表記する)、デバイス番号(Dと表記する)およびファンクション番号(Fと表記する)の組み合わせ(B:D:F)に対応するアドレスが指定される。例えば、CPU110は、所定のB:D:Fに対応するアドレスを指定することで、RP111、UP132またはNTB133のUESTSにアクセスする。
バス番号(B)の個数は最大で256個(8ビット)である。デバイス番号(D)の個数は最大で32個(5ビット)である。ファンクション番号(F)の個数は最大で8個(3ビット)である。
また、Extended空間は、4キロバイト(KB:Kilo Bytes)単位のブロックに区切られている。1つのブロックの先頭のアドレスが、B:D:Fの1つの組に対応する。そして、(B:D:F)=(0:0:0),(0:0:1),(0:0:2),・・・,(0:31:7),(1:0:0),・・・,(255:31:6),(255:31:7)というようにB,D,Fの順に、昇順に各ブロックに対応付けられる。
この場合、CPU110は、下記のように、PCIeデバイス上のUESTSにアクセスする。
例えば、該当のPCIeデバイス(例えば、UP132)が(B:D:F)=(1:0:0)で指定されるとする。そして、このPCIeデバイスのUESTSが(B:D:F)=(1:0:0)に対応するアドレスを基準としたオフセット0x10に対応しているとする。この場合、(B:D:F)=(1:0:0)にアクセスするには、0x0_E0000000+1バス番号分のアドレスにRead/Writeすればよい。また、該当のUESTSにアクセスするには、当該アドレスに上記オフセット分を加算したアドレスにアクセスすればよい。
具体的には、CPU110は、当該UESTSをReadする場合、次のようにExtended空間におけるアクセス先のアドレスX1を計算する。
X1=0x0_E0000000+1MB*1+0x10=0x0_E0100010
ここで、1MBは1メガバイト(Mega Bytes)を示す。ただし、1MB=1024KB、1KB=1024Bとする。1MB分のオフセットを加算する理由は次の通りである。1つのバス番号には、32個のデバイス番号が属し、8*32=256個のファンクション番号が属する。1ファンクション番号当たりのブロックサイズは4KBなので、バス番号B=1に相当するオフセット(Extended空間の先頭に対するオフセット)は、256*4KB=1MBである。このため、Extended空間の先頭“0x0_E0000000”に1MBに相当するオフセット“0x100000”を加算することになる。
また、該当のPCIeデバイス(例えば、RP111)が(B:D:F)=(0:3:0)で指定されるとする。そして、このPCIeデバイスのUESTSが(B:D:F)=(0:3:0)に対応するアドレスを基準としたオフセット0x10に対応しているとする。
CPU110は、当該UESTSをReadする場合、次のようにExtended空間におけるアクセス先のアドレスX2を計算する。
X2=0x0_E0000000+32KB*3+0x0_00000010=0x0_E0018010
ここで、32KB*3=96KB分のアドレスを加算する理由は次の通りである。1つのデバイス番号には、8個のファンクション番号が属する。1ファンクション番号当たりのブロックサイズは4KBなので、デバイス番号D=3に相当するオフセット(Extended空間の先頭に対するオフセット)は、8*4KB*3=32KB*3=96KBである。このため、Extended空間の先頭“0x0_E0000000”に96KBに相当するオフセット“0x18000”を加算することになる。
拡張領域における未使用領域は、未使用の領域である。
MMIO領域は、MMIOに用いられる領域である。
上記のメモリ空間に関する情報は、CM100,200が備える所定の記憶装置(RAM120でもよいし、RAM120以外の記憶装置でもよい)に予め格納される。また、RP111,211およびUP132,232の各UESTSに対応するB:D:Fの組み合わせは、CM100,200が備える所定の記憶装置に予め格納される。
図8は、他CM上のデバイスのUESTSに対するアクセス例を示す図である。CPU110は、次のようにして、CM200(他CM)のUESTS233a,232a,211aにアクセス可能である。
まず、UESTS233aに対するReadの場合、CPU110は、メモリ空間における他NTB領域のUESTS233aに対応するアドレスを指定してメモリリクエスト(Read)のパケットを発行する。当該パケットは、RP111、UP132を経由してNTB133に到達する。NTB133は、パケットに含まれるアドレスを、CM200側で管理されるUESTS233aに対応するアドレスに変換して、NTB233に送信する。NTB233は、受信したパケットに応じて、UESTS233aからエラー情報を読み取り、エラー情報を含むパケットを生成してNTB133に応答する。NTB133は、応答として受信したパケットを、UP132およびRP111を介してCPU110に送信する。
なお、NTB233によりエラー情報を含むパケットを応答するものとしたが、CPU210により、メモリリクエストに応じたUESTS233aのReadを実行し、CPU210によりエラー情報を含むパケットをNTB133に応答してもよい。
次に、UESTS232a,211aに対するReadの場合、CPU110は、他メモリ空間に含まれるExtended空間のUESTS232a,211aに対応するアドレスを指定してメモリリクエスト(Read)のパケットを発行する。ここで、CPU110,210が認識するメモリ空間のレイアウトは共通である。
したがって、CPU110は、自身のExtended空間におけるUP132のUESTSに対応するアドレスに“0x3_00000000”のオフセットを加算することで、UESTS232aに対応するアドレスを指定できる。図7のメモリレイアウト例によれば、自メモリ空間のアドレスに対する他メモリ空間のアドレスのオフセットは、“0x3_00000000”だからである。UESTS211aについても同様である。
当該パケットは、RP111、UP132およびNTB133を経由して、NTB233に到達する。NTB233は、パケットに含まれるアドレスを、CM200側で管理されるアドレスに変換する。前述の例でいえば、NTB233は、CM100側から指定されたアドレスに対して加算されているオフセット分“0x3_00000000”を減算する変換を行えばよい。NTB233は、UP232およびRP211を介して、CPU210に当該パケットを転送する。CPU210は、受信したパケットがExtended空間に対するメモリリクエストであると判断すると、当該メモリリクエストで指定されたアドレスに対応するUESTS211aまたはUESTS232aからエラー情報を読み出す。CPU210は、読み出したエラー情報を含むパケットを発行し、NTB233,133を介して、CPU110に応答する。
次に、CM100による送達確認を含むデータ転送の手順を説明する。
図9は、CMのDMAによるデータ転送例を示すフローチャートである。以下、図9に示す処理をステップ番号に沿って説明する。
(S1)送信制御部112は、初期設定を行う。具体的には、送信制御部112は、RAM120に確保されたNTB233、UP232およびRP211用の記憶領域(各UESTSの読み出し結果を格納する領域)を所定値で初期化する。送信制御部112は、所定値を、例えば、0xEEEEEEEEとする(理由は後述される)。
(S2)送信制御部112は、DMA準備を行う。具体的には、送信制御部112は、DMAによるデータ転送の準備(データ転送用のメモリリクエストの生成など)やUESTS233a,232a,211aのRead用のメモリリクエストの生成を行う。送信制御部112は、当該Read用のメモリリクエストの生成の際に、他メモリ空間におけるUESTS233a,232a,211aに対応するアドレスの計算も行う。
(S3)送信制御部112は、DMA起動を行う。具体的には、送信制御部112は、DMA制御部131の機能によって、ステップS2で生成した各種のメモリリクエストを、NTB133を介してCM200に送信する。これにより、DMAのメモリリクエストに応じてDMAによるCM100からCM200へのデータ転送が開始されるとともに、各UESTSのReadのメモリリクエストに応じて各UESTSの読み出し結果がCM200からCM100へ応答される。送信制御部112は、各UESTSの読み出し結果を、RAM120の所定の領域に格納する。
(S4)送信制御部112は、DMA制御部131からDMAによるデータ転送が完了した旨を示す割り込みを受け付けることで、DMA完了を検出する。
(S5)送信制御部112は、RAM120を参照して、NTB233(他NTB)のUESTS233aから取得したエラー情報が0であるか否かを判定する。0である場合、処理をステップS6に進める。0でない場合、処理をステップS9に進める。
(S6)送信制御部112は、RAM120を参照して、UP232(他UP)のUESTS232aから取得したエラー情報が0であるか否かを判定する。0である場合、処理をステップS7に進める。0でない場合、処理をステップS9に進める。
(S7)送信制御部112は、RAM120を参照して、RP211(他RP)のUESTS211aから取得したエラー情報が0であるか否かを判定する。0である場合、処理をステップS8に進める。0でない場合、処理をステップS9に進める。
(S8)送信制御部112は、DMAによるデータの転送に成功したと判断する。そして、送信制御部112は、処理を終了する。
(S9)送信制御部112は、DMAによるデータの転送に失敗したと判断する。この場合、送信制御部112は、該当のデータの再送処理を行う。送信制御部112は、再送時の受信状況の確認も、ステップS1〜S9の手順を用いて行う。そして、送信制御部112は、処理を終了する。
ここで、ステップS1においてRAM120のUESTSの保持領域を0xEEEEEEEEで初期化する理由は次の通りである。例えば、0(0x00000000)で初期化すると、エラーなしと同じ値となり、該当の保持領域が更新されない場合に、正常なのか異常なのかを判断できないことになる。また、例えば、1(0x00000001)で初期化すると、所定のエラー時と同じ値となり、該当の保持領域が更新されない場合に、エラーを誤判断するおそれがある。更に、例えば、オールF(0xFFFFFFFF)で初期化すると、デバイスが無応答でタイムアウトとなった場合と同じ値となり、該当の保持領域が更新されない場合に、タイムアウトが発生したのか、保持領域が更新されなかったのかを判断できない。そこで、送信制御部112は、エラー情報として用いられない0xEEEEEEEEで、各保持領域を初期化することで、タイムアウトやエラーなどを、保持領域の無更新の場合と区別して検出可能となる。
なお、上記の手順では、通常のDMAによるデータ転送に比べて、UESTS233a,232a,211aをReadするためのDMA起動情報(メモリリクエスト)を生成する処理と、取得した各エラー情報による転送成否の判定が追加となる。これらの2つの処理の追加のデータ転送に対する影響はほぼ無いと考えてよい。理由は次の通りである。
第1に、送信制御部112は、DMA起動情報の生成を、元々行っていたデータ転送用のDMA起動情報の生成処理に組み込める。具体的には、送信制御部112は、両DMA起動情報の生成箇所をRAM120上のメモリ空間の連続領域とすることで、両情報に高速にアクセスでき(キャッシュヒットを期待でき)、当該生成処理による性能への影響はほぼ無いと考えてよい。
第2に、送信制御部112は、DMA完了後のエラー情報による判定では、UESTS233a,232a,211aから読み出したエラー情報を、DMA完了の処理で使用したRAM120上のメモリ空間の連続領域に格納する。このため、送信制御部112は、エラー情報に高速にアクセスでき(キャッシュヒットを期待でき)、当該判定処理による性能への影響はほぼ無いと考えてよい。
次に、CM100によるUP232のUESTS232aおよびRP211のUESTS211aに対するアクセスの具体例を説明する。
図10は、他UPのUESTSに対するアクセス例を示す図である。ここで、各デバイスのB:D:Fの値は、次の通りであるとする。RP111,211は、(B:D:F)=(0:3:0)である。DMA制御部131,231は、(B:D:F)=(1:0:1)である。UP132,232は、(B:D:F)=(1:0:0)である。NTB133,233は、(B:D:F)=(2:0:0)である。
また、UESTS232aのアドレスは、UP232のアドレスに対してオフセット0x10である。この場合、CM100は、次のように、UESTS232aに格納されたエラー情報を読み出す。
(1)DMA制御部131は、DMA READコマンドを含むアクセス要求のパケットを、NTB133を介してCM200に送信する。DMA制御部131は、DMA READコマンドにおいて、READ先アドレスとして、“0x3_E0100010”を指定する。
(2)NTB233は、NTB133から当該パケットを受信すると、READ先アドレスを、“0x3_E0100010”から“0x3_00000000”を減算した“0x0_E0100010”に変換して、CPU210に送信する。
(3)CPU210は、“0x0_E0100010”がRAM220のExtended領域に対応するデバイス宛であると判断し、“0x0_E0100010”に対応するデバイスであるUP232を特定する。
(4)CPU210は、該当のアドレスに対応するUESTS232aのREAD要求をUP232に送信する。
(5)UP232は、READ要求で指定されたUESTS232aのエラー情報を読み出し、エラー情報を含むREAD応答をCPU210に送信する。
(6)CPU210は、UESTS232aから読み出されたエラー情報を、NTB233,133を介して、DMA制御部131に応答する(DMA READに対する応答)。DMA制御部131は、受信したエラー情報をCPU110に通知する。DMA制御部131は、受信したエラー情報を、RAM120の所定の領域に書き込んでもよい。
図11は、他RPのUESTSに対するアクセス例を示す図である。UESTS211aのアドレスは、RP211のアドレスに対してオフセット0x10である。この場合、CM100は、次のように、UESTS211aに格納されたエラー情報を読み出す。
(1)DMA制御部131は、DMA READコマンドを含むアクセス要求のパケットを、NTB133を介してCM200に送信する。DMA制御部131は、DMA READコマンドにおいて、READ先アドレスとして、“0x3_E0018010”を指定する。
(2)NTB233は、NTB133から当該パケットを受信すると、READ先アドレスを、“0x3_E0018010”から“0x3_00000000”を減算した“0x0_E0018010”に変換して、CPU210に送信する。
(3)CPU210は、“0x0_E0018010”がRAM220のExtended領域に対応するデバイス宛であると判断し、“0x0_E0018010”に対応するデバイスであるRP211を特定する。
(4)CPU210は、該当のアドレスに対応するUESTS211aからエラー情報の読み出しを行う。
(5)CPU210は、UESTS211aから読み出されたエラー情報を、NTB233,133を介して、DMA制御部131に応答する(DMA READに対する応答)。DMA制御部131は、受信したエラー情報をCPU110に通知する。DMA制御部131は、受信したエラー情報を、RAM120の所定の領域に書き込んでもよい。
次に、送信制御部112による異常検出の具体例を説明する。
図12は、異常検出の例(その1)を示す図である。前述のように送信制御部112は、RAM120に、3つの領域121,122,123を設ける。領域121は、UESTS233aから読み出したエラー情報を格納する領域である。領域122は、UESTS232aから読み出したエラー情報を格納する領域である。領域123は、UESTS211aから読み出したエラー情報を格納する領域である。
送信制御部112は、DMAの準備処理において、領域121,122,123に“0xEEEEEEEE”を設定する(ST1)。
そして、送信制御部112は、DMAによるデータ転送と共に、UESTS233a,232a,211aから読み出したエラー情報を領域121,122,123に格納する(ST2)。図12の例では、領域121には、“0x00100000”が格納される。領域122には、“0x00000000”が格納される。領域123には、“0x00000000”が格納される。
送信制御部112は、領域121,122,123の値に基づいて、NTB233において、アンコレクタブルエラーが発生したことを検出する。領域121に、所定のエラーに対応する値“0x00100000”が格納されているからである。エラー情報では、エラーに応じた位置にビットが立つことになる。このため、送信制御部112は、エラー情報を参照して、アンコレクタブルエラーの種別を判断することもできる。
例えば、UESTSに要因が立つ(所定のビットに“1”が設定される)エラーの場合、送信制御部112は、該当のデバイスによるエラーハンドリングが可能なレベルの異常であると判断できる。また、無応答となるエラーの場合、送信制御部112は、該当のデバイスによるエラーハンドリングが不可能なレベルの異常であると判断できる。
なお、この場合、送信制御部112は、UP232およびRP211では、アンコレクタブルエラーが発生していないと判断する。領域122,123には、何れもエラーなしを示す“0x00000000”が設定されているからである。
送信制御部112は、CM200で適切にデータを受信できていないと判断し、該当のデータの再送処理を行う。
図13は、異常検出の例(その2)を示す図である。送信制御部112は、DMAの準備処理において、領域121,122,123に“0xEEEEEEEE”を設定する(ST11)。
そして、送信制御部112は、DMAによるデータ転送と共に、UESTS233a,232a,211aから読み出したエラー情報を領域121,122,123に格納する(ST12)。図13の例では、領域121には、“0x00000000”が格納される。領域122には、“0xFFFFFFFF”が格納される。領域123には、“0x00000000”が格納される。
ここで、“0xFFFFFFFF”が領域122に格納されたのは、UP232が無応答のままタイムアウトとなったからである。この場合、送信制御部112またはDMA制御部131により当該タイムアウトを検出して、“0xFFFFFFFF”を設定する。
送信制御部112は、領域121,122,123の値に基づいて、UP132において何らかのエラーが発生したことを検出する。また、送信制御部112は、領域122の値が“0xEEEEEEEE”(初期値)のまま変更されていない場合にも、同様に、UP132において何らかのエラーが発生したことを検出する。
送信制御部112は、CM200で適切にデータを受信できていないと判断し、該当のデータの再送処理を行う。また、上記のように、CM200で該当のデバイスによるエラーハンドリングが不可能な異常が発生した場合にも、CM100側の情報によって、CM200における異常の要因となった被疑デバイスを特定できる。
なお、この例では、領域121,123には、何れもエラーなしを示す“0x00000000”が設定されている。このため、送信制御部112は、NTB233,211では、アンコレクタブルエラーが発生していないと判断する。
ここで、再送処理において、送信制御部112は、アンコレクタブルエラーの種別に応じて、再送処理の方法を選択してもよい。例えば、送信制御部112は、アンコレクタブルエラーの内容から、該当のデバイスによるエラーハンドリングが可能なレベルであるか否かなどを判断して、再送処理の方法を選択することが考えられる。より具体的には、送信制御部112は、エラーハンドリングが不可能なレベルの異常の場合には、CM200により該当のデバイスを再起動またはリセットさせてから再送することが考えられる。また、送信制御部112は、エラーハンドリングが可能なレベルの異常の場合には、該当のデバイスを再起動させずに再送することが考えられる。
また、送信制御部112は、CM100が出力するログに、CM200側から取得したアンコレクタブルエラーの内容を記録してもよい。あるいは、送信制御部112は、CM100が備える表示パネルに、当該エラー内容を表示させてもよい。こうして、CM100は、CM200における異常原因のユーザによる調査を支援することもできる。
次に、データの受信状況の確認機能の比較例を説明する。
図14は、データの受信状況の確認機能の比較例を示す図である。CM100(送信元)からCM200(送信先)へDMAによるデータ送信を行った際に、次のような受信状況の確認方法も考えられる。まず、CM100は、DMA通信によりCM200にデータを送信する(ステップS101)。
CM100は、DMA通信が完了すると、データが適切に受信されたことを確認する確認要求のメッセージ(MSG:Message)をCM200に送信する(ステップS102)。
CM200は、確認要求のメッセージを受信すると、当該確認要求に応じて、DMAによるデータ受信を適切に行ったか否かを確認する(ステップS103)。例えば、CM200は、データ受信を適切に行っていない場合、どのデバイスでどのような異常が発生したかを確認することも考えられる。
CM200は、確認結果を含む確認応答のメッセージをCM100に送信する。CM100は、確認応答のメッセージを受信すると、当該確認応答により、CM200によりデータが適切に受信されたか否かを判断する(ステップS104)。
このように、DMA通信後にCM100からCM200に確認要求のメッセージを送信し、CM200からCM100に確認応答のメッセージを送信して、受信状況の確認を行うことも考えられる。しかし、この方法では、メッセージ送受信やメッセージ処理のオーバヘッドによって受信状況の確認を実現するのに時間がかかる。例えば、一連のメッセージの送受信およびCM200側での確認処理に伴う所要時間が、ミリ秒〜秒程度のオーダーに達することもある。
これに対し、CM100は、CM200においてデータ送信の経路上にあるNTB233、UP232およびRP211のエラー検出機能を、データの受信状況の確認に利用する。このため、CM100,200の間で、受信状況の確認用のメッセージを送受信しなくてもよくなる。また、CM200に受信データの確認処理を実行しなくてもよくなる。その結果、CM100,200間の受信状況の確認に伴う通信量、および、CM100,200の負荷が軽減される。そして、受信状況の確認に伴う所要時間を短縮できる。例えば、CM100による受信状況の確認の所要時間を、ナノ秒〜マイクロ秒程度のオーダーに抑えられる。すなわち、データ送信元のCM100から、CM200側の異常を直接検出することにより、性能劣化を抑えてデータの受信状況の確認を実現できる。こうして、データの受信状況の確認を効率化できる。
また、データ送信中にNTB233、UP232およびRP211でアンコレクタブルエラーが検出されている場合、データ送信が適切に行えていないと考えられる。そこで、NTB233、UP232およびRP211でアンコレクタブルエラーが検出されている場合には、CM100は、CM200が適切にデータを受信できていないと判断して、再送などのリカバーを行う。
これにより、ストレージ装置50におけるCM100,200間の連携を適切に行える。その結果、ストレージ装置50の信頼性の向上を図れる。特に、CM100,200の冗長制御は、適切にデータを送受信できることが前提となる。例えば、CM100からCM200へのデータ送信に失敗したまま、CM100が縮退すると、RAM120上のデータが揮発して正常データが喪失されることになり、データの不整合が発生してしまう。このため、データの送達保証による信頼性向上は、CM100,200において特に重要であり、受信状況の確認を高速実行する意義は大きい。
更に、前述のように、CM100は、NTB233、UP232およびRP211(複数の接続ポート)のうち、アンコレクタブルエラーを検出したデバイス(接続ポート)を、データの受信に失敗した要因と決定し、ログなどに出力することもできる。これにより、異常原因のユーザによる調査を支援することもできる。
図15は、ストレージ装置の他のハードウェア例(その1)を示す図である。これまでの説明では、PCIeスイッチ130,230を接続する例を示したが、CM100の複数のPCIeスイッチと、CM200の複数のPCIeスイッチとを接続することもできる。
例えば、CM100は、PCIeスイッチ130,140に加えて、PCIeスイッチ130a,130bを更に有してもよい。PCIeスイッチ130a,130bは、PCIeスイッチ130と同様に、DMA制御部、UPおよびNTBを備える。
また、CM200は、PCIeスイッチ230,240に加えて、PCIeスイッチ230a,230bを更に有してもよい。PCIeスイッチ230a,230bは、PCIeスイッチ230と同様に、DMA制御部、UPおよびNTBを備える。
この場合、PCIeスイッチ130a,230aを、PCIeスイッチ130a,230aそれぞれが備える2つのNTBを介して接続する。また、PCIeスイッチ130b,230bを、PCIeスイッチ130b,230bそれぞれが備える2つのNTBを介して接続する。図15の例では、CM100,200間に合計3つのパスが形成されることになる。ただし、CM100,200間のパスは2つでもよいし、4以上でもよい。CM100は1つまたは複数のパスを用いて、CM200へのデータのDMA転送を行う。この場合にも、CM100は、データ転送において、第2の実施の形態の方法による受信状況の確認をパス毎に行える。
図16は、ストレージ装置の他のハードウェア例(その2)を示す図である。更に、これまでの説明では、ストレージ装置50が2つのCM(CM100,200)を有する例を示したが、ストレージ装置50は、3以上のCMを有してもよい。例えば、CM100,200,300、および、CM100,200,300を相互に接続するPCIeスイッチ400をストレージ装置50に設けることもできる。
ここで、CM300は、CM100,200と同様に、CPU310、PCIeスイッチ330およびPCIeスイッチ340を有する。CPU310はRP311を有する。PCIeスイッチ330は、DMA制御部331、UP332およびNTB333を有する。CM300は、RAMも有するが、図16ではCM間の接続関係を主に表すため図示を省略している。
PCIeスイッチ400は、DW401,402,403を有する。DW401,402,403は、PCIeデバイスを接続するためのインタフェースである。
NTB133は、NTB233に代えて、DW401に接続される。NTB233は、NTB133に代えて、DW402に接続される。NTB333は、DW403に接続される。
PCIeスイッチ400は、DW401,402,403に接続されたCM100,200,300によるCM間のデータ通信を中継する。例えば、CM100は、NTB133およびDW401,402を介して、CM200へのDMAによるデータ転送を行える。この場合、CPU110は、NTB133およびDW401,402を介して、NTB233、UP232およびRP211の各UESTSを読み取り、データの受信状況の確認を行う。
また、CM100は、NTB133およびDW401,403を介して、CM300へのDMAによるデータ転送を行える。この場合、CPU110は、NTB133およびDW401,403を介して、NTB333、UP332およびRP311の各UESTSを読み取り、データの受信状況の確認を行う。
こうして、ストレージ装置50がCMを3以上有する場合でも、データの受信状況の確認の効率を容易に向上できる。
1 ストレージ装置
10,20 ストレージ制御装置
11,21 接続ポート
11a,21a 検出結果記憶部
12,22 処理部
13,23 データ記憶部
30 記憶装置群

Claims (8)

  1. 自ポートで発生したエラーの検出機能と前記エラーの検出結果を記憶する第1の記憶部とを備え、他のストレージ制御装置へのデータ送信に用いられる第1の接続ポートと、
    前記第1の接続ポートおよび前記他のストレージ制御装置が備える第2の接続ポートを介して、前記他のストレージ制御装置にデータを送信し、前記第2の接続ポートが備える第2の記憶部から前記第2の接続ポートにおける前記検出結果を取得し、取得した前記検出結果に基づいて、前記他のストレージ制御装置における前記データの受信状況を確認する処理部と、
    を有するストレージ制御装置。
  2. 前記第2の接続ポートは複数の接続ポートを含み、
    前記処理部は、複数の前記第2の接続ポートから取得した複数の前記検出結果に基づいて、前記データの受信状況を確認する、請求項1記載のストレージ制御装置。
  3. 前記処理部は、複数の前記検出結果のうち、全てがエラーなしを示す場合、前記データが適切に受信されていると判定し、少なくとも1つがエラーありを示す場合、前記データが適切に受信されていないと判定する、請求項2記載のストレージ制御装置。
  4. 前記処理部は、複数の前記第2の接続ポートのうち、前記エラーを検出した前記第2の接続ポートを、前記データの受信に失敗した要因と決定する、請求項2または3記載のストレージ制御装置。
  5. 前記エラーは、前記データに対する訂正不可能な誤りの発生を示すエラーである、請求項1乃至4の何れか1項に記載のストレージ制御装置。
  6. 前記処理部は、前記処理部により管理される第1のアドレス範囲のうち、前記第2の記憶部に対応する第1のアドレスを指定したアクセス要求を生成し、
    前記第1の接続ポートは、前記アクセス要求の前記第1のアドレスを、前記他のストレージ制御装置により管理される第2のアドレス範囲のうち前記第2の記憶部に対応する第2のアドレスに変換し、変換後の前記アクセス要求を前記他のストレージ制御装置に送信し、前記アクセス要求に応じた前記検出結果を前記他のストレージ制御装置から受信する、請求項1記載のストレージ制御装置。
  7. 前記処理部は、前記処理部により管理される第1のアドレス範囲のうち、前記第2の記憶部に対応する第1のアドレスを指定したアクセス要求を生成し、
    前記第1の接続ポートは、複数の前記第2の接続ポートのうち前記第1の接続ポートに接続されている第3の接続ポートに前記アクセス要求を送信し、前記第3の接続ポートにより、前記アクセス要求の前記第1のアドレスを、前記他のストレージ制御装置により管理される第2のアドレス範囲のうち前記第2の記憶部に対応する第2のアドレスに変換させ、変換後の前記アクセス要求に応じた前記検出結果を、前記第3の接続ポートから受信する、請求項2記載のストレージ制御装置。
  8. 自ポートで発生したエラーの検出機能と前記エラーの検出結果を記憶する記憶部とを備える第1の接続ポートを有する第1のストレージ制御装置と、
    前記第1のストレージ制御装置へのデータ送信に用いられる第2の接続ポートと、前記第2の接続ポートおよび前記第1の接続ポートを介して前記第1のストレージ制御装置にデータを送信し、前記記憶部から前記検出結果を取得し、取得した前記検出結果に基づいて、前記第1のストレージ制御装置における前記データの受信状況を確認する処理部と、を有する第2のストレージ制御装置と、
    を有するストレージ装置。
JP2016198364A 2016-10-06 2016-10-06 ストレージ制御装置およびストレージ装置 Active JP6773974B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016198364A JP6773974B2 (ja) 2016-10-06 2016-10-06 ストレージ制御装置およびストレージ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016198364A JP6773974B2 (ja) 2016-10-06 2016-10-06 ストレージ制御装置およびストレージ装置

Publications (2)

Publication Number Publication Date
JP2018060419A true JP2018060419A (ja) 2018-04-12
JP6773974B2 JP6773974B2 (ja) 2020-10-21

Family

ID=61908529

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016198364A Active JP6773974B2 (ja) 2016-10-06 2016-10-06 ストレージ制御装置およびストレージ装置

Country Status (1)

Country Link
JP (1) JP6773974B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020119325A (ja) * 2019-01-24 2020-08-06 富士通株式会社 ストレージシステム、及びストレージ制御装置
JP2020119218A (ja) * 2019-01-23 2020-08-06 Necソリューションイノベータ株式会社 管理装置
CN115098413A (zh) * 2022-05-25 2022-09-23 苏州浪潮智能科技有限公司 一种存储控制器、方法、装置及存储介质
US11704208B2 (en) 2021-05-12 2023-07-18 Fujitsu Limited Storage system and information processing method

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007501986A (ja) * 2003-06-23 2007-02-01 シエラ・ロジック、インコーポレイテッド ストレージシェルフ内で発生するエラー及びイベントをハンドリングする方法
JP2008233973A (ja) * 2007-03-16 2008-10-02 Hitachi Ltd ストレージ管理システム
JP2009187483A (ja) * 2008-02-08 2009-08-20 Hitachi Ltd ストレージサブシステム及びこれの制御方法
JP2011221981A (ja) * 2010-04-08 2011-11-04 Hitachi Ltd 外部ストレージシステムに結合されたストレージシステムのエラーコード管理方法及び装置
JP2015099487A (ja) * 2013-11-19 2015-05-28 富士通株式会社 情報処理装置,制御装置及び制御プログラム

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007501986A (ja) * 2003-06-23 2007-02-01 シエラ・ロジック、インコーポレイテッド ストレージシェルフ内で発生するエラー及びイベントをハンドリングする方法
JP2008233973A (ja) * 2007-03-16 2008-10-02 Hitachi Ltd ストレージ管理システム
JP2009187483A (ja) * 2008-02-08 2009-08-20 Hitachi Ltd ストレージサブシステム及びこれの制御方法
JP2011221981A (ja) * 2010-04-08 2011-11-04 Hitachi Ltd 外部ストレージシステムに結合されたストレージシステムのエラーコード管理方法及び装置
JP2015099487A (ja) * 2013-11-19 2015-05-28 富士通株式会社 情報処理装置,制御装置及び制御プログラム

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020119218A (ja) * 2019-01-23 2020-08-06 Necソリューションイノベータ株式会社 管理装置
JP7279891B2 (ja) 2019-01-23 2023-05-23 Necソリューションイノベータ株式会社 管理装置
JP2020119325A (ja) * 2019-01-24 2020-08-06 富士通株式会社 ストレージシステム、及びストレージ制御装置
JP7147589B2 (ja) 2019-01-24 2022-10-05 富士通株式会社 ストレージシステム、及びストレージ制御装置
US11704208B2 (en) 2021-05-12 2023-07-18 Fujitsu Limited Storage system and information processing method
CN115098413A (zh) * 2022-05-25 2022-09-23 苏州浪潮智能科技有限公司 一种存储控制器、方法、装置及存储介质
CN115098413B (zh) * 2022-05-25 2023-08-11 苏州浪潮智能科技有限公司 一种存储控制器、方法、装置及存储介质

Also Published As

Publication number Publication date
JP6773974B2 (ja) 2020-10-21

Similar Documents

Publication Publication Date Title
KR101455016B1 (ko) 고가용성 솔리드 스테이트 드라이브를 제공하는 방법 및 장치
US10789196B2 (en) Storage system
JP4391954B2 (ja) ファイル制御システムおよびファイル制御装置
US7761657B2 (en) Storage control system, control method for storage control system, port selector, and controller
US6829659B2 (en) Method, system and program product for logically disconnecting in fibre channel communication without closing the exchange
US20110238909A1 (en) Multicasting Write Requests To Multiple Storage Controllers
US10027532B2 (en) Storage control apparatus and storage control method
US20110289280A1 (en) Storage system, control method therefor, and program
JP6773974B2 (ja) ストレージ制御装置およびストレージ装置
US20120233399A1 (en) Storage apparatus and method of controlling the same
WO2015035574A1 (zh) 一种故障处理的方法、计算机系统和装置
TW201720123A (zh) 用於透過乙太式網路遠端存取記憶體及輸入/輸出之特快非揮發性記憶體控制器
JP2007094996A (ja) データストレージシステム、データストレージ制御装置及びその障害箇所診断方法
CN112306388B (zh) 存储装置
US20070186141A1 (en) Method and information apparatus for improving data reliability
US7774638B1 (en) Uncorrectable data error containment systems and methods
WO2014094250A1 (zh) 数据处理方法和设备
US20130246857A1 (en) Controller, storage apparatus, method of testing storage apparatus, and tangible computer-readable storage medium
WO2022155919A1 (zh) 一种故障处理方法、装置及系统
US7293139B2 (en) Disk array system generating a data guarantee code on data transferring
US10956245B1 (en) Storage system with host-directed error scanning of solid-state storage devices
JP5511546B2 (ja) フォールトトレラントの計算機システム、複数の物理サーバとストレージ装置とに接続されるスイッチ装置、及び、サーバ同期制御方法
US6499066B1 (en) Method and apparatus for using fibre channel test extended link service commands for interprocess communication
JP7315753B2 (ja) ストレージ装置
WO2023046129A1 (zh) 计算机设备、处理数据的方法及计算机系统

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190709

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20190718

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20190718

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: 20200901

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200914

R150 Certificate of patent or registration of utility model

Ref document number: 6773974

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150