(57)【要約】【課題】ストレージコントローラ間での制御データ転送時間を抑えて、ストレージ装置の性能向上を図る。【解決手段】第１のストレージコントローラは、第１のプロセッサと、第１のメモリと、第１のポートを有する第１のスイッチと、を含み、第２のストレージコントローラは、第２のプロセッサと、第２のメモリと、第２のポートを有する第２のスイッチと、を含み、ストレージ装置は、第１のポートと第２のポートを第１のリンクで接続し、第１のプロセッサと第１のスイッチは、ユーザデータを転送する第２のリンクと、制御データを転送するための第３のリンクで接続され、第２のプロセッサと第２のスイッチは、ユーザデータを転送する第４のリンクと制御データを転送するための第５のリンクで接続され、第１のポートと第２のポートは、制御データをユーザデータより優先して第１のリンクで転送すること。【選択図】図１
2020113137.tif 000002
【特許請求の範囲】
【請求項１】
第１のストレージコントローラと第２のストレージコントローラを有するストレージ装置であって、
前記第１のストレージコントローラは、
第１のプロセッサと、
前記第１のプロセッサに接続された第１のメモリと、
前記第１のプロセッサに接続されて、第１のポートを有する第１のスイッチと、
前記第１のメモリに設定されてユーザデータを格納するキャッシュ領域と、
前記第１のメモリに設定されて制御データを格納する共有領域と、
を含み、
前記第２のストレージコントローラは、
第２のプロセッサと、
前記第２のプロセッサに接続された第２のメモリと、
前記第２のプロセッサに接続されて、第２のポートを有する第２のスイッチと、
前記第２のメモリに設定されてユーザデータを格納するキャッシュ領域と、
前記第２のメモリに設定されて制御データを格納する共有領域と、
を含み、
前記ストレージ装置は、
前記第１のポートと前記第２のポートを第１のリンクで接続し、
前記第１のプロセッサと前記第１のスイッチを、前記ユーザデータを転送するための第２のリンクと、前記制御データを転送するための第３のリンク、で接続し、
前記第２のプロセッサと前記第２のスイッチを、前記ユーザデータを転送するための第４のリンクと、前記制御データを転送するための第５のリンク、で接続し、
前記第１のポートと前記第２のポートは、
前記制御データを、前記ユーザデータより優先して前記第１のリンクで転送することを特徴とするストレージ装置。
【請求項２】
請求項１に記載のストレージ装置であって、
前記第１のプロセッサ及び前記第２のプロセッサは、それぞれ第１のプロセッサ内蔵のＤＭＡコントローラ及び第２のプロセッサ内蔵のＤＭＡコントローラを有し、
前記第１のスイッチ及び前記第２のスイッチは、それぞれ第１のスイッチ内蔵のＤＭＡコントローラ及び第２のスイッチ内蔵のＤＭＡコントローラを有し、
前記第１のストレージコントローラと前記第２のストレージコントローラ間において、前記第１のプロセッサ内蔵のＤＭＡコントローラまたは前記第２のプロセッサ内蔵のＤＭＡコントローラが前記ユーザデータを転送し、前記第１のスイッチ内蔵のＤＭＡコントローラまたは前記第２のスイッチ内蔵のＤＭＡコントローラが制御データを転送する、ことを特徴とするストレージ装置。
【請求項３】
請求項２に記載のストレージ装置であって、
前記第１のストレージコントローラまたは前記第２のストレージコントローラは、
転送する制御データのサイズが所定値以上の場合は、前記第１のスイッチ内蔵のＤＭＡコントローラまたは前記第２のスイッチ内蔵のＤＭＡコントローラに制御データを転送させ、
転送する制御データのサイズが所定値未満の場合は、前記第１のプロセッサまたは前記第２のプロセッサが、メモリライト命令を実行することにより制御データを転送する、ことを特徴とするストレージ装置。
【請求項４】
請求項１に記載のストレージ装置であって、
前記第１のリンク、前記第２のリンク、及び前記第４のリンクは、前記第１のスイッチまたは前記第２のスイッチが有する非透過性ブリッジと接続し、
前記第３のリンク及び前記第５のリンクは、前記第１のスイッチまたは前記第２のスイッチのアップストリームポートと接続することを特徴とするストレージ装置。
【請求項５】
請求項１に記載のストレージ装置であって、
前記第１のリンクは複数の仮想チャネルを有し、
前記第１のリンク上では、前記ユーザデータと前記制御データを異なる前記仮想チャネルで転送し、
前記第１のポートと前記第２のポートは、
前記仮想チャネルで転送する制御データを、前記ユーザデータより優先して転送することを特徴とするストレージ装置。
【請求項６】
請求項５に記載のストレージ装置であって、
前記第１のスイッチ内蔵のＤＭＡコントローラまたは前記第２のスイッチ内蔵のＤＭＡコントローラが、前記ユーザデータを転送するパケットよりも高い転送優先度に設定したパケットにより、前記第１のリンク上で制御データを転送することを特徴とするストレージ装置。
【請求項７】
請求項５に記載のストレージ装置であって、
前記第１のスイッチまたは前記第２のスイッチが、前記制御データを転送するパケットの転送優先度を、前記ユーザデータを転送するパケットよりも高い転送優先度に変換して前記第１のリンクへ送信することを特徴とするストレージ装置。
【請求項８】
請求項５に記載のストレージ装置であって、
前記第１のスイッチは第１の仮想スイッチと第２の仮想スイッチを有し、さらに前記第１の仮想スイッチと前記第２の仮想スイッチは第１の非透過性ブリッジで接続され、
前記第２のスイッチは第３の仮想スイッチと第４の仮想スイッチを有し、さらに前記第３の仮想スイッチと前記第４の仮想スイッチは第２の非透過性ブリッジで接続され、
前記第２のリンクは前記第１の仮想スイッチのアップストリームポートと接続し、
前記第３のリンクは前記第２の仮想スイッチのアップストリームポートと接続し、
前記第４のリンクは前記第３の仮想スイッチのアップストリームポートと接続し、
前記第５のリンクは前記第４の仮想スイッチのアップストリームポートと接続し、
前記第２の仮想スイッチは前記第１のポートを含み、
前記第４の仮想スイッチは前記第２のポートを含む、ことを特徴とするストレージ装置。
【請求項９】
請求項８に記載のストレージ装置であって、
前記第１の仮想スイッチまたは前記第３の仮想スイッチは、フロントエンドインターフェースまたは半導体メモリドライブを接続することを特徴とするストレージ装置。
【請求項１０】
第１のストレージコントローラと第２のストレージコントローラを有するストレージ装置であって、
前記第１のストレージコントローラは、
第１のプロセッサと、
前記第１のプロセッサに接続された第１のメモリと、
前記第１のプロセッサに接続されて、第１の外部接続ポートを有する第１のスイッチと、
前記第１のメモリに設定されてユーザデータを格納するキャッシュ領域と、
前記第１のメモリに設定されて制御データを格納する共有領域と、
を含み、
前記第２のストレージコントローラは、
第２のプロセッサと、
前記第２のプロセッサに接続された第２のメモリと、
前記第２のプロセッサに接続されて、第２の外部接続ポートを有する第２のスイッチと、
前記第２のメモリに設定されてユーザデータを格納するキャッシュ領域と、
前記第２のメモリに設定されて制御データを格納する共有領域と、
を含み、
前記ストレージ装置は、
前記第１のプロセッサと前記第１のスイッチを、前記ユーザデータを転送するための第２のリンクと、前記制御データを転送するための第３のリンク、で接続し、
前記第２のプロセッサと前記第２のスイッチを、前記ユーザデータを転送するための第４のリンクと、前記制御データを転送するための第５のリンク、で接続し、
前記第１の外部接続ポートと前記第２の外部接続ポートは、複数の仮想チャネルを有し、
前記第１の外部接続ポートと前記第２の外部接続ポートを、複数の仮想チャネルを有する外部スイッチに接続し、
前記第１の外部接続ポートと前記第２の外部接続ポートは、前記ユーザデータと前記制御データを異なる前記仮想チャネルで転送することを特徴とするストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のストレージコントローラを有するストレージ装置に関する。
【背景技術】
【０００２】
ストレージ装置は、ストレージコントローラと、ランダムアクセス可能な不揮発性記録媒体とを有する。この記録媒体は、例えば、ハードディスクドライブ（ＨＤＤ）や不揮発性半導体メモリドライブ（ＳＳＤ）を多数有するディスクアレイである。
【０００３】
ストレージコントローラは、上位装置（ホストシステム等）を接続するためのフロントエンドインターフェースと、ディスクアレイを接続するためのバックエンドインターフェースと、上位装置がディスクアレイに対して読み書きするユーザデータを一時的に保存するキャッシュメモリ（ＣＭと略す）を有する。更に、ストレージコントローラは、上位装置とキャッシュメモリとの間、及びディスクアレイとキャッシュメモリとの間におけるデータ転送を制御するためのプロセッサを有する。
【０００４】
また、ストレージコントローラと不揮発性半導体メモリドライブ（ＳＳＤ）の間の通信規格として、近年、「ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅと略す）」も新しく用いられるようになってきた。記録媒体としてＮＶＭｅドライブのみを有するストレージ装置では、スイッチを介してプロセッサとドライブを直接接続できるため、バックエンドインターフェースが不要である。
【０００５】
複数のプロセッサを搭載するストレージ装置では、ストレージコントローラ内に複数のプロセッサからアクセス可能な、ストレージ装置の制御データを格納する共有メモリ（ＳＭと略す）を有する。ストレージ装置の制御データとは、例えば、上位装置から参照されるデータ格納先のアドレス情報とストレージ装置内部で使用するディスクアレイ上のデータ格納先アドレス情報を変換するアドレス変換テーブル等がある。
【０００６】
高信頼性が要求されるストレージ装置では、ユーザデータおよび制御データを冗長化して保持するため、キャッシュメモリや共有メモリを含むストレージコントローラ内のコンポーネントが二重化される。
【０００７】
汎用技術を適用したストレージコントローラにおいて、キャッシュメモリ及び共有メモリはプロセッサに接続された主記憶内に構成される。また、プロセッサとフロントエンドインターフェースやバックエンドインターフェース、ＮＶＭｅドライブ等とを接続するための通信ネットワークの標準規格として、「ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅと略す）」が知られている。
【０００８】
ストレージコントローラ間は、ＰＣＩｅスイッチや非透過性ブリッジ（ＮＴＢ：Ｎｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ）によるコントローラ間リンクで相互接続される。複数のストレージコントローラに搭載されたプロセッサは、コントローラ間リンクを使用して、ユーザデータと制御データを相互に転送する。
【０００９】
例えば、特許文献１には、２個のストレージコントローラ間をＰＣＩｅスイッチやＮＴＢで相互に接続し、コントローラ間でデータ転送を行う技術が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】米国特許出願公開２０１３／０２５４４８７号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１１】
同じコントローラ間リンク上に、転送長が長い（ペイロードサイズも大）ユーザデータと、転送長の短い（ペイロードサイズも小）制御データが競合(混合)して転送されると、制御データのスループットが低下し、データ転送時間も増大してしまう。なお、制御データの転送性能の低下は、ストレージ装置の応答性能の低下を招いてしまう。
【００１２】
ＰＣＩｅでは、通信品質（ＱｏＳ）を保証するため、仮想チャネル（ＶＣ：Ｖｉｒｔｕａｌ  Ｃｈａｎｎｅｌ）とトラフィッククラス（ＴＣ：Ｔｒａｆｆｉｃ  Ｃｌａｓｓ）の仕組みが用意されている。仮想チャネルはＰＣＩｅリンク上で独立したフロー制御を行う単位であり、トラフィッククラスはＰＣＩｅのパケット転送の優先度である。
【００１３】
ストレージコントローラは上記仕組みにより、異なる仮想チャネルでユーザデータと制御データを転送することにより、ユーザデータとの競合時に制御データの転送性能の低下が避けられるはずである。しかし、汎用プロセッサには、１本の仮想チャネルしか持たないものがある。したがって、ストレージコントローラに汎用プロセッサを採用した場合には、複数の仮想チャネルを利用できない、という問題があった。
【００１４】
また、ユーザデータと制御データを物理的に別のパスで転送すれば競合の問題は発生しないが、ケーブルやＰＣＩｅのレーン数等の配線物量が倍増するので、コストが増大するという問題があった。
【００１５】
本発明の目的は、１本の仮想チャネルしか持たない汎用プロセッサを搭載したストレージコントローラのコントローラ間リンクにおいても、ユーザデータとの競合時に制御データの転送性能が低下するのを防止することである。
【課題を解決するための手段】
【００１６】
本発明は、第１のストレージコントローラと第２のストレージコントローラを有するストレージ装置であって、前記第１のストレージコントローラは、第１のプロセッサと、前記第１のプロセッサに接続された第１のメモリと、前記第１のプロセッサに接続されて、第１のポートを有する第１のスイッチと、前記第１のメモリに設定されてユーザデータを格納するキャッシュ領域と、前記第１のメモリに設定されて制御データを格納する共有領域と、を含み、前記第２のストレージコントローラは、第２のプロセッサと、前記第２のプロセッサに接続された第２のメモリと、前記第２のプロセッサに接続されて、第２のポートを有する第２のスイッチと、前記第２のメモリに設定されてユーザデータを格納するキャッシュ領域と、前記第２のメモリに設定されて制御データを格納する共有領域と、を含み、前記ストレージ装置は、前記第１のポートと前記第２のポートを第１のリンクで接続し、前記第１のプロセッサと前記第１のスイッチを、前記ユーザデータを転送するための第２のリンクと、前記制御データを転送するための第３のリンク、で接続し、前記第２のプロセッサと前記第２のスイッチを、前記ユーザデータを転送するための第４のリンクと、前記制御データを転送するための第５のリンク、で接続し、前記第１のポートと前記第２のポートは、前記制御データを、前記ユーザデータより優先して前記第１のリンクで転送する。
【発明の効果】
【００１７】
したがって、本発明は、本発明の一態様によれば、１本の仮想チャネルしか持たない汎用のプロセッサを搭載したストレージコントローラのコントローラ間リンクでも、ユーザデータ転送との競合による制御データの転送性能の低下を防ぐことができ、ストレージ装置の応答性能を改善することができる。これにより、制御データの転送時間を低減して、ストレージ装置の性能向上を図ることができる。
【００１８】
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施例１を示し、ストレージ装置の構成例を示すブロック図である。
【図２】本発明の実施例１を示し、ＰＣＩｅスイッチ内部の構成例を示すブロック図である。
【図３】本発明の実施例１を示し、ストレージコントローラ間におけるデータ転送経路の例を示す図である。
【図４】本発明の実施例１を示し、ＮＴＢにおけるアドレス変換処理の例を示す図である。
【図５】本発明の実施例１を示し、ＰＣＩｅスイッチポートにおけるアービトレーションテーブルの設定例を示す図である。
【図６】本発明の実施例１を示し、ストレージコントローラ間における制御データの転送の一例を示すシーケンス図である。
【図７】本発明の実施例１を示し、制御データ転送の手順を示すフローチャートである。
【図８】本発明の実施例１を示し、ストレージコントローラ間で転送する制御データサイズと制御データ転送時間の関係の例を示すグラフである。
【図９】本発明の実施例２を示し、ストレージコントローラ間におけるデータ転送経路の別の例を示す図である。
【図１０】本発明の実施例２を示し、データの種別と、トラフィッククラス及び仮想チャネルの関係の一例を示す図である。
【図１１】本発明の実施例２を示し、ＰＣＩｅスイッチのポートにおける仮想チャネルアービトレーションの設定例を示す図である。
【図１２】本発明の実施例３を示し、データの種別と、トラフィッククラス及び仮想チャネルの関係の別の例を示す図である。
【図１３】本発明の実施例４を示し、ＮＴＢにおけるトラフィッククラス変換処理の手順を示すフローチャートである。
【図１４】本発明の実施例４を示し、データの種別と、トラフィッククラス及び仮想チャネルの関係の別の例を示す図である。
【図１５】本発明の実施例５を示し、ストレージ装置の別の構成例を示すブロック図である。
【図１６】本発明の実施例５を示し、ＰＣＩｅスイッチ内部の別の構成例を示すブロック図である。
【図１７】本発明の実施例５を示し、ストレージコントローラ間におけるデータ転送経路の別の例を示す図である。
【図１８】本発明の実施例６を示し、ストレージ装置の別の構成例を示すブロック図である。
【図１９】本発明の実施例７を示し、ストレージノードの構成例を示すブロック図である。
【図２０】本発明の実施例７を示し、複数のストレージノード間の接続例を示すブロック図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照しながら、本発明の幾つかの実施例を説明する。
【実施例１】
【００２１】
図１〜図８を用いて、本発明の実施例１のストレージ装置とその処理について説明する。
【００２２】
図１は、本発明の実施例１のストレージ装置の構成例を示すブロック図である。ストレージ装置１００は、ストレージコントローラ１１０、１５０と複数の不揮発性半導体メモリドライブ（ＳＳＤ：Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）１０２で構成されている。
【００２３】
ストレージコントローラ１１０、１５０は、外部の上位装置１９０と上位装置１９１が接続される。上位装置１９０、１９１は、例えば、ストレージ装置１００に対してデータを読み書きするホストコンピュータである。また、不揮発性半導体メモリドライブ（ＳＳＤ）１０２はＮＶＭｅ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ）ドライブである。
【００２４】
ストレージコントローラ１１０は、プロセッサ（図中ＭＰ０）１１１と、メインメモリ（図中Ｍｅｍ０）１１２と、フロントエンドインターフェース１４０と、ＰＣＩｅスイッチ１２０、１３０で構成されている。
【００２５】
メインメモリ１１２は、プロセッサ１１１と接続され、共有メモリ（図中ＳＭ０）１１３とキャッシュメモリ（図中ＣＭ０）１１４とを含む。またメインメモリ１１２は、プロセッサ１１１により実行されるプログラムや、参照される管理テーブルが格納される。
【００２６】
プロセッサ１１１は、フロントエンドインターフェース１４０とキャッシュメモリ１１４の間、及びＰＣＩｅスイッチ１３０を介したキャッシュメモリ１１４と不揮発性半導体メモリドライブ１０２との間、のデータ転送を制御する。
【００２７】
ＰＣＩｅスイッチ１２０は、プロセッサ１１１と２本のＰＣＩｅリンク１２１、１２２で接続されている。また、ＰＣＩｅスイッチ１２０は、他のストレージコントローラと接続するために、ＰＣＩｅリンクであるコントローラ間リンク１０１と接続されている。
【００２８】
同様に、ストレージコントローラ１５０は、プロセッサ（図中ＭＰ１）１５１と、メインメモリ（図中Ｍｅｍ１）１５２と、フロントエンドインターフェース１８０と、ＰＣＩｅスイッチ１６０、１７０で構成されている。
【００２９】
メインメモリ１５２は、プロセッサ１５１と接続され、共有メモリ（図中ＳＭ１）１５３とキャッシュ（図中ＣＭ１）メモリ１５４とを含む。またメインメモリ１５２は、プロセッサ１５１により実行されるプログラムや、参照される管理テーブルが格納される。
【００３０】
プロセッサ１５１は、フロントエンドインターフェース１８０とキャッシュメモリ１５４の間、及びＰＣＩｅスイッチ１７０を介したキャッシュメモリ１５４と不揮発性半導体メモリドライブ１０２との間、のデータ転送を制御する。
【００３１】
ＰＣＩｅスイッチ１６０は、プロセッサ１５１と２本のＰＣＩｅリンク１６１、１６２で接続されている。また、ＰＣＩｅスイッチ１６０は、他のストレージコントローラと接続するために、ＰＣＩｅリンクであるコントローラ間リンク１０１と接続されている。
【００３２】
プロセッサ１１１とプロセッサ１５１は、コントローラ間リンク１０１を介して相互に通信し、上位装置（図中Ｈｏｓｔ０、１）１９０、１９１から受信したユーザデータをキャッシュメモリ１１４、１５４内に二重化して一時的に格納する。
【００３３】
また、プロセッサ１１１とプロセッサ１５１は、コントローラ間リンク１０１を介して相互に通信し、ストレージ装置１００内の制御データを共有メモリ１１３、１５３内に二重化して格納する。
【００３４】
図２は、ＰＣＩｅスイッチ１２０の内部構成例を示すブロック図である。ＰＣＩｅスイッチ１２０は、ＰＣＩｅリンク１２２に接続するアップストリームポート２００と、ＮＴＢ（Ｎｏｎ  Ｔｒａｎｓｐａｒｅｎｔ  Ｂｒｉｄｇｅ）２１０と、ＮＴＢ２２０と、ＰＣＩｅスイッチに内蔵されたＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ２３０と、プロセッサ２５０と、メモリ２４０を含んで構成される。
【００３５】
アップストリームポート（図中ＵＰ００）２００はＰＣＩ−ｔｏ−ＰＣＩ（Ｐ２Ｐ）ブリッジ（図中Ｐ２Ｐ）２０２と接続され、ＮＴＢ２１０（図中ＮＴ００）内のエンドポイント２１１はＰ２Ｐブリッジ２０３と接続され、ＮＴＢ２２０（図中ＮＴ０１）内のエンドポイント（図中ＥＰ）２２１はＰ２Ｐブリッジ２０４と接続され、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０はＰ２Ｐブリッジ２０５と接続される。Ｐ２Ｐブリッジ２０２、２０３、２０４、２０５は、内部バス２０１に接続されている。
【００３６】
ＮＴＢ２１０は、エンドポイント２１１とエンドポイント２１２とを含む。エンドポイント２１２は、ＰＣＩｅリンク１２１を介して、プロセッサ１１１からアクセス可能に設定される。
【００３７】
エンドポイント２１１はＰＣＩｅリンク１２２を介して、プロセッサ１１１からアクセス可能に設定される。エンドポイント２１１と２１２は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向で通過できるように設定及び接続されている。
【００３８】
ＮＴＢ２２０は、エンドポイント２２１とエンドポイント２２２とを含む。エンドポイント２２１は、ＰＣＩｅリンク１２２を介して、プロセッサ１１１からアクセス可能に設定される。
【００３９】
エンドポイント２２２はコントローラ間リンクに接続される。エンドポイント２２１と２２２は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向で通過できるように設定及び接続されている。
【００４０】
メモリ２４０には、制御プログラムやテーブルなどが格納される。本実施例１では、プロセッサ２５０が利用するテーブルとしてアービトレーションテーブル５００（後述）が格納される例を示す。プロセッサ２５０は、メモリ２４０の制御プログラムを実行して、ＰＣＩｅスイッチ１２０内の各部を制御する。
【００４１】
なお、図１に示した、ストレージコントローラ１５０のＰＣＩｅスイッチ１６０の内部構成は、図２に示したＰＣＩｅスイッチ１２０の内部構成と同様であるので、説明を省略する。
【００４２】
図３は、ストレージコントローラ１１０からストレージコントローラ１５０への制御データ及びユーザデータの転送経路を示す図である。
【００４３】
プロセッサ１１１は、プロセッサコア３４２とプロセッサ内蔵のＤＭＡコントローラ３４３を有する。また、プロセッサ１１１は、ＰＣＩｅスイッチ１２０のＮＴＢ２１０（図中ＮＴ００）とＰＣＩｅリンク１２１を介して接続するルートポート３４０（図中ＲＰ００）と、アップストリームポート２００（図中ＵＰ００）とＰＣＩｅリンク１２２を介して接続するルートポート３４１（図中ＲＰ０１）を有する。
【００４４】
プロセッサ１５１は、プロセッサコア３５２とプロセッサ内蔵のＤＭＡコントローラ３５３を有する。また、プロセッサ１５１は、ＰＣＩｅスイッチ１６０のＮＴＢ３１０（図中ＮＴ１０）とＰＣＩｅリンク１６１を介して接続するルートポート３５０（図中ＲＰ１０）と、アップストリームポート３００（図中ＵＰ１０）とＰＣＩｅリンク１６２を介して接続するルートポート３５１（図中ＲＰ１１）を有する。
【００４５】
先ず、ユーザデータの転送経路を説明する。ユーザデータは、プロセッサ１１１がプロセッサ内蔵のＤＭＡコントローラ３４３を制御することにより、キャッシュメモリ１１４からストレージコントローラ１５０のキャッシュメモリ１５４へ転送する。
【００４６】
プロセッサ１１１は、プロセッサ内蔵のＤＭＡコントローラ３４３を制御するためのデータ転送リストを生成する。プロセッサ内蔵のＤＭＡコントローラ３４３は、データ転送リストに基づき、転送元であるキャッシュメモリ１１４からユーザデータを読出し（３６０）、ルートポート３４０（ＲＰ００）へユーザデータを書き出す（３６１）。
【００４７】
ユーザデータは、ルートポート３４０から、ＰＣＩｅリンク１２１、ＮＴＢ２１０、ＮＴＢ２２０、コントローラ間リンク１０１、ＮＴＢ３２０、ＮＴＢ３１０、ＰＣＩｅリンク１６１、ルートポート３５０を介して、キャッシュメモリ１５４へ転送される。
【００４８】
次に、制御データの転送経路を説明する。制御データには２通りの転送方法がある。一つはプロセッサコア３４２がＰＣＩｅ空間（アドレス空間）に対する書込み命令を実行する方法であり、以後この方法をコアライトと呼ぶことにする。もう一つは、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０を使用する方法である。
【００４９】
コアライトによる制御データの転送の場合、先ず、プロセッサコア３４２が転送元である共有メモリ１１３から制御データを読出し（３６４）、ルートポート３４１へ制御データを書き出す（３６５）。制御データは、ルートポート３４１から、ＰＣＩｅリンク１２２、アップストリームポート２００、ＮＴＢ２２０、コントローラ間リンク１０１、ＮＴＢ３２０、アップストリームポート３００、ＰＣＩｅリンク１６２、ルートポート３５１を介して、共有メモリ１５３へ転送される。
【００５０】
ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０による制御データの転送の場合、プロセッサ１１１が、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０を制御するためのデータ転送リストを生成する。ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０は、データ転送リストに基づき、転送元である共有メモリ１１３から、ルートポート３４１、ＰＣＩｅリンク１２２、アップストリームポート２００を介して制御データを読出し（３６２）、ＮＴＢ２２０へ制御データを書き出す（３６３）。
【００５１】
制御データは、ＮＴＢ２２０から、コントローラ間リンク１０１、ＮＴＢ３２０、アップストリームポート３００、ＰＣＩｅリンク１６２、ルートポート３５１を介して、ストレージコントローラ１５０の共有メモリ１５３へ転送される。
【００５２】
ストレージコントローラ１５０からストレージコントローラ１１０へ制御データを転送する場合の経路も同様である。
【００５３】
ストレージコントローラ１５０のユーザデータは、プロセッサ１５１がプロセッサ内蔵のＤＭＡコントローラ３５３（ＭＰ  ＤＭＡ１）を制御することにより、キャッシュメモリ１５４からストレージコントローラ１１０のキャッシュメモリ１１４へ転送する。
【００５４】
プロセッサ１５１は、プロセッサ内蔵のＤＭＡコントローラ３５３（ＭＰ  ＤＭＡ１）を制御するためのデータ転送リストを生成する。プロセッサ内蔵のＤＭＡコントローラ３５３は、データ転送リストに基づき、転送元であるキャッシュメモリ１５４からユーザデータを読出し、ルートポート３５０へユーザデータを書き出す。
【００５５】
ユーザデータは、ルートポート３５０から、ＰＣＩｅリンク１６１、ＮＴＢ３１０、ＮＴＢ３２０、コントローラ間リンク１０１、ＮＴＢ２２０、ＮＴＢ２１０、ＰＣＩｅリンク１２１、ルートポート３４０を介して、ストレージコントローラ１１０のキャッシュメモリ１１４へ転送される。
【００５６】
コアライトによる制御データ転送の場合、先ず、プロセッサコア３５２が転送元である共有メモリ１５３から制御データを読出し、ルートポート３５１へ制御データを書き出す。
【００５７】
制御データは、ルートポート３５１から、ＰＣＩｅリンク１６２、アップストリームポート３００、ＮＴＢ３２０、コントローラ間リンク１０１、ＮＴＢ２２０、アップストリームポート２００、ＰＣＩｅリンク１２２、ルートポート３４１を介して、ストレージコントローラ１１０の共有メモリ１１３へ転送される。
【００５８】
ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ３３０による制御データ転送の場合、プロセッサ１５１が、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ３３０を制御するためのデータ転送リストを生成する。ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ３３０は、データ転送リストに基づき、転送元である共有メモリ１５３から、ルートポート３５１、ＰＣＩｅリンク１６２、アップストリームポート３００を介して制御データを読出し、ＮＴＢ３２０へ制御データを書き出す。
【００５９】
制御データは、ＮＴＢ３２０から、コントローラ間リンク１０１、ＮＴＢ２２０、アップストリームポート２００、ＰＣＩｅリンク１２２、ルートポート３４１を介して、ストレージコントローラ１１０の共有メモリ１１３へ転送される。
【００６０】
図４を用いて、ＰＣＩｅスイッチ１２０、１６０におけるアドレス変換処理を説明する。図４において、プロセッサ１１１のアドレス空間４００は、プロセッサ１１１のメインメモリ空間４０５と、アップストリームポート２００にアクセスするためのウインドウ４０３（図中Ｗｉｎｄｏｗ０３）と、ＮＴＢ２１０にアクセスするためのウインドウ４０４（図中Ｗｉｎｄｏｗ０４）を含む。
【００６１】
プロセッサ１５１のアドレス空間４１０は、プロセッサ１５１のメインメモリ空間４１５と、アップストリームポート３００にアクセスするためのウインドウ４１３（図中Ｗｉｎｄｏｗ１３）と、ＮＴＢ３１０にアクセスするためのウインドウ４１４（図中Ｗｉｎｄｏｗ１４）を含む。
【００６２】
メインメモリ空間４０５は、共有メモリ１１３にアクセスするためのウインドウ４０１（図中Ｗｉｎｄｏｗ０１）と、キャッシュメモリ１１４にアクセスするためのウインドウ４０２（図中Ｗｉｎｄｏｗ０２）を含む。ストレージコントローラ１５０のメインメモリ空間４１５は、共有メモリ１５３にアクセスするためのウインドウ４１１（図中Ｗｉｎｄｏｗ１１）と、キャッシュメモリ１５４にアクセスするためのウインドウ４１２（図中Ｗｉｎｄｏｗ１２）を含む。
【００６３】
アドレス空間４２０は、コントローラ間リンク１０１上をＰＣＩｅパケットが転送される際に使用されるアドレス空間であり、制御データ転送用のウインドウ４２１（図中Ｗｉｎｄｏｗ２１）と、ユーザデータ転送用のウインドウ４２２（図中Ｗｉｎｄｏｗ２２）を含む。
【００６４】
なお、以下の説明では、上記アドレス空間４００、４１０、４２０のうち、ＰＣＩｅで利用するアドレス空間をＰＣＩ空間とする場合がある。
【００６５】
先ず、ＰＣＩｅスイッチ１２０におけるＰＣＩｅパケット送信先アドレスの変換処理について説明する。ＮＴＢ２１０、２２０は、それぞれアドレス変換機能部であると共に、これらの組み合わせもアドレス変換機能部である。
【００６６】
ＰＣＩｅスイッチ１２０は、アップストリームポート２００が受信したウインドウ４０３内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４２１内のアドレスに変換し、ＮＴＢ２２０から送信する。また、ＰＣＩｅスイッチ１２０は、ＮＴＢ２１０が受信したウインドウ４０４内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４２２内のアドレスに変換し、ＮＴＢ２２０から送信する。
【００６７】
また、ＰＣＩｅスイッチ１２０は、ＮＴＢ２２０が受信したウインドウ４２１内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４０１内のアドレスに変換し、アップストリームポート２００から送信する。
【００６８】
また、ＰＣＩｅスイッチ１２０は、ＮＴＢ２２０が受信したウインドウ４２２内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４０２内のアドレスに変換し、ＮＴＢ２１０から送信する。
【００６９】
次に、ＰＣＩｅスイッチ１６０におけるＰＣＩｅパケット送信先アドレスの変換処理について説明する。ＮＴＢ３１０、３２０は、それぞれアドレス変換機能部であると共に、これらの組み合わせもアドレス変換機能部である。
【００７０】
ＰＣＩｅスイッチ１６０は、アップストリームポート３００が受信したウインドウ４１３内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４２１内のアドレスに変換し、ＮＴＢ３２０から送信する。
【００７１】
また、ＰＣＩｅスイッチ１６０は、ＮＴＢ３１０が受信したウインドウ４１４内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４２２内のアドレスに変換し、ＮＴＢ３２０から送信する。
【００７２】
また、ＰＣＩｅスイッチ１６０は、ＮＴＢ３２０が受信したウインドウ４２１内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４１１内のアドレスに変換し、アップストリームポート３００から送信する。
【００７３】
また、ＰＣＩｅスイッチ１６０は、ＮＴＢ３２０が受信したウインドウ４２２内のＰＣＩｅパケットの送信先アドレスを、ウインドウ４１２内のアドレスに変換し、ＮＴＢ３１０から送信する。
【００７４】
図５は、ＮＴＢ２２０を制御するアービトレーションテーブル５００の一例を示す図である。プロセッサ２５０は、アービトレーションテーブル５００に設定された内容をＮＴＢ２２０へ指令する。
【００７５】
ＮＴＢ２２０は、ＰＣＩｅスイッチ１２０のアップストリームポートとしても機能する。そして、ＮＴＢ２２０は、ＮＴＢ２１０およびアップストリームポート２００で制御データとユーザデータを受信し、ＮＴＢ２２０から送信されるＰＣＩｅパケットに対して、ＷＲＲ（Ｗｅｉｇｈｔｅｄ  Ｒｏｕｎｄ  Ｒｏｂｉｎ）アービトレーションを設定することができる。
【００７６】
ここでは一例として、ＮＴＢ２２０は、３２フェーズのアービトレーションテーブル５００の設定にする。図５に示すように、３２フェーズのうち、ユーザデータが入力されるＮＴＢ２１０（ＮＴ００）を６フェーズに割り当て、制御データが入力されるアップストリームポート２００（ＵＰ００）を残りの２６フェーズに割り当てる。
【００７７】
この設定により、制御データはユーザデータより優先してＮＴＢ２２０からコントローラ間リンク１０１へ送信される。
【００７８】
さらに、制御データが受信されるアップストリームポート２００（ＵＰ００）を割り当てるフェーズが、少なくとも連続した４フェーズに対して設定されている。これは、転送される制御データのサイズが数十バイトから高々１０００バイト程度であり、また、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０が転送するＰＣＩｅパケットのペイロードサイズは最大２５６バイトであることによる。
【００７９】
連続した４フェーズに制御データが受信されるアップストリームポート２００（ＵＰ００）を設定することにより、制御データはユーザデータのＰＣＩｅパケットの通過（転送完了）を待つこと無く、連続的に設定されたフェーズで送信することができる。また、連続した４フェーズに制御データを割り当てることで、制御データのＰＣＩｅパケットが連続してＮＴＢ２２０から送信される割合を高めることができる。
【００８０】
ＮＴＢ３２０についても、図５と同様にアービトレーションテーブル５００が設定される。
【００８１】
なお、本実施例１のアービトレーションテーブル５００では、アービトレーションテーブルのフェーズ数を３２とし、連続する４フェーズに制御データを割り当て、５フェーズおきにユーザデータを割り当てた例を示したがこれに限定されるものではない。
【００８２】
図６は、制御データ転送シーケンスを説明する図である。例として、プロセッサ１１１（図中ＭＰ０）が、ストレージコントローラ１１０の共有メモリ１１３（図中ＳＭ０）から、ストレージコントローラ１５０の共有メモリ１５３（図中ＳＭ１）へ制御データを転送する場合を示す。
【００８３】
先ず、プロセッサ１１１が共有メモリ１１３（ＳＭ０）から制御データを読出し、ＰＣＩｅ空間に対する書込み命令を実行することにより、つまりコアライトにより、メインメモリ１５２（Ｍｅｍ１）の共有メモリ１５３（ＳＭ１）へ制御データを転送する（６０１）。
【００８４】
一回のコアライトで転送できるデータサイズは、例えば８バイトなので、プロセッサ１１１は、制御データを転送するのに必要な回数だけコアライトを繰り返して実行する。
【００８５】
制御データの転送に続けて、プロセッサ１１１（ＭＰ０）は、プロセッサ１５１（ＭＰ１）へ割込み信号であるＭＳＩ（Ｍｅｓｓａｇｅ  Ｓｉｇｎａｌｅｄ  Ｉｎｔｅｒｒｕｐｔ）を送信する（６０２）。ＭＳＩの実態は、プロセッサ１５１（ＭＰ１）の割込みコントローラ（図示省略）へ送信するＰＣＩｅ  Ｗｒｉｔｅパケットである（６０３）。
【００８６】
ＭＳＩを受信したプロセッサ１５１（ＭＰ１）は、割込み内容に応じた割込みハンドラを実行する（６０４）。割込みハンドラの実行により、プロセッサ１５１（ＭＰ１）は、制御データが共有メモリ１５３（ＳＭ１）に確実に書き込まれたことを検出し、書込み完了を通知するＡＣＫ（Ａｃｋｎｏｌｅｄｇｅ）をプロセッサ１１１（ＭＰ０）へ送信する。ＡＣＫの実態は、共有メモリ内の所定アドレスに対するＰＣＩｅ  Ｗｒｉｔｅパケットである（６０５）。
【００８７】
ＭＳＩの送信後、プロセッサ１１１（ＭＰ０）は、共有メモリ１１３（ＳＭ０）の所定アドレスをポーリングして、ＡＣＫがプロセッサ１５１（ＭＰ１）から返信されるのを待つ（６０６）。
【００８８】
プロセッサ１１１（ＭＰ０）が、プロセッサ１５１（ＭＰ１）からのＡＣＫの受信を検出することにより、制御データ転送が完了する（６０７）。
【００８９】
プロセッサ１１１（ＭＰ０）が制御データの転送を開始（６０１）してから、プロセッサ１５１（ＭＰ１）からのＡＣＫの受信を検出するまで（６０７）が、制御データの転送時間である（６０８）。
【００９０】
コアライトの替わりにＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０を使用する場合は、上記ステップ６０１がＤＭＡコントローラ２３０による制御データの転送に、上記ステップ６０２がＰＣＩｅスイッチ１２０に内蔵されたＤＭＡコントローラ２３０によるＭＳＩの送信に、それぞれ置き換わる。
【００９１】
プロセッサ１５１（ＭＰ１）が、ストレージコントローラ１５０の共有メモリ１５３（ＳＭ１）から、ストレージコントローラ１１０の共有メモリ１１３（ＳＭ０）へ制御データを転送する場合も同様である。
【００９２】
図７は、制御データの転送の手順を示すフローチャートである。本実施例１のストレージ装置１００において、制御データは、プロセッサ１１１、１５１によるＰＣＩｅ空間に対する書込み命令（コアライト）、または、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０のいずれかの構成要素を使用して、ストレージコントローラ１１０、１５０間で転送される。図７のフローチャートは、プロセッサ１１１または１５１が、これら２つの構成要素を選択し、転送を実行する手順を示す。
【００９３】
先ず、プロセッサ１１１または１５１は、転送する制御データのサイズを計算する（７０１）。
【００９４】
次に、プロセッサ１１１または１５１は、計算された転送する制御データのサイズが所定値以上か、否かを判定する（７０２）。ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０がデータを転送する場合、データ転送リストの生成や送信のオーバーヘッドを考慮する必要がある。
【００９５】
つまり、制御データのサイズが所定値（または閾値）より小さい場合、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０による転送よりも、コアライトによる転送の方が、制御データの転送時間を短縮できる場合がある。
【００９６】
制御データの転送サイズが所定値より小さい場合、プロセッサ１１１または１５１は、コアライトにより制御データ転送を実行する（７０３）。それに続けて、プロセッサ１１１または１５１は、図６の説明で述べたように、ＭＳＩを他方のプロセッサへ送信する。
【００９７】
制御データの転送サイズが所定値以上の場合、プロセッサ１１１または１５１は、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０が制御データ転送を実行するための、データ転送リストを生成する（７０４）。データ転送リストには、図６の説明で述べたＭＳＩ送信も含まれる。
【００９８】
次に、プロセッサ１１１または１５１は、生成したデータ転送リストをＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０へ送信する。データ転送リストを受信したＤＭＡコントローラ２３０、３３０は、制御データ転送を実行する（７０５）。
【００９９】
最後に、プロセッサ１１１または１５１が、他方のプロセッサが送信したＡＣＫ（図６参照）の受信を検出することにより、制御データ転送が完了する（７０６）。
【０１００】
図８は、制御データのサイズと図６で説明した制御データの転送時間（６０８）の関係を示すグラフである（８００）。
【０１０１】
図中実線８０１と破線８０２は、従来技術においてコアライトにより制御データを転送した場合の、制御データのサイズと制御データの転送時間の関係を示す。実線８０１は同じコントローラ間リンク１０１上でユーザデータの転送と制御データの転送が競合した場合を示し、破線８０２は、両者が競合しない場合の制御データの転送時間とサイズの関係を示す。
【０１０２】
図中実線８０３は本実施例１のストレージ装置１００における制御データのサイズと制御データの転送時間の関係を示す。制御データのサイズが所定値（８０５）より小さい領域（８０４）において、本実施例１のストレージ装置１００は、コアライトによる制御データ転送を実行する。
【０１０３】
この場合の制御データ転送時間は、従来技術において競合がない場合の制御データ転送時間（８０２）と同等である。これは、図５で説明したポートアービトレーションの設定により、制御データをユーザデータより優先的に転送した結果である。
【０１０４】
制御データのサイズが所定値（８０５）以上の領域（８０６）において、本実施例１のストレージ装置１００は、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０によって制御データの転送を行うので、その結果、従来技術より制御データの転送時間を短縮できる。
【０１０５】
従来技術では、たとえ制御データの転送にＤＭＡコントローラを使う場合でも、制御データがユーザデータに対して優先的に転送されないので、両者の競合がある場合に制御データの転送時間を短縮することができない。
【０１０６】
これに対して、本実施例１のストレージ装置１００は、別のデータ転送経路上にあるプロセッサ内蔵のＤＭＡコントローラ３４３、３５３と、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０を使用して、ユーザデータと制御データをそれぞれ転送する。そして、両者が合流するＰＣＩｅスイッチ１２０、１６０のポート（ＮＴＢ２２０、３２０）において、ユーザデータよりも制御データを優先して転送することにより、制御データの転送時間を短縮できる。
【実施例２】
【０１０７】
図９〜図１１を用いて、本発明の実施例２のストレージ装置とその処理について説明する。実施例２のストレージ装置の構成は、図１のストレージ装置１００と一部を除いて同様な構成であるので図による説明を省略する。
【０１０８】
実施例２のストレージ装置は、ＰＣＩｅスイッチ１２０、１６０に替えて、複数の仮想チャネル（ＶＣ：Ｖｉｒｔｕａｌ  Ｃｈａｎｎｅｌ）を使用可能なＰＣＩｅスイッチ９２０、９６０（図参照９）を有する。
【０１０９】
そして、コントローラ間リンク１０１は、ＶＣ０とＶＣ１の２本の仮想チャネルが使用可能である点が、前記実施例１のストレージ装置１００とは異なる。また、ＰＣＩｅスイッチ９２０、９６０にそれぞれ内蔵されるＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０は、トラフィッククラス（ＴＣ：Ｔｒａｆｆｉｃ  Ｃｌａｓｓ）をＴＣ１に設定したＰＣＩｅパケットでデータ転送を行うことができる。なお、前記従来例でも述べたように、仮想チャネルはＰＣＩｅリンク上で独立したフロー制御を行う単位であり、トラフィッククラスはＰＣＩｅのパケット転送の優先度である。
【０１１０】
図９は、ストレージコントローラ１１０からストレージコントローラ１５０への制御データ及びユーザデータの転送経路を示す図である。図９のデータ転送経路は、ＰＣＩｅスイッチ１２０がＰＣＩｅスイッチ９２０に、ＰＣＩｅスイッチ１６０がＰＣＩｅスイッチ９６０に、それぞれ置き換えられている点を除いて、前記実施例１に示した図３のデータ転送経路と同様である。
【０１１１】
ＰＣＩｅリンク１２１、１２２、１６１、１６２上では、トラフィッククラスＴＣ０、ＴＣ１に設定されたＰＣＩｅパケットが、仮想チャネルＶＣ０を使って転送されるように設定されている。
【０１１２】
コントローラ間リンク１０１上では、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットが仮想チャネルＶＣ０を、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットが仮想チャネルＶＣ１を使って転送されるように設定されている。
【０１１３】
図１０は、実施例２のストレージ装置における、トラフィッククラスと仮想チャネルの使用方法を示す図である。
【０１１４】
プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１００１）、ユーザデータ（１００３）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。ここでプロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンク（１００１）は、図９における、ＰＣＩｅリンク１２１、１６１である。
【０１１５】
コントローラ間リンク１０１において（１００２）、ユーザデータ（１００３）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１１６】
コアライト（ＭＰ  Ｃｏｒｅ）による制御データ転送の場合、プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１００１）、制御データ（１００４）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。ここでプロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンク（１００１）は、図９における、ＰＣＩｅリンク１２２、１６２である。
【０１１７】
コントローラ間リンク１０１において（１００２）、コアライトによる制御データ（１００４）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１１８】
ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０（ＳＷ  ＤＭＡ）による制御データ転送の場合、プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンク（１００１）において制御データ（１００５）は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１１９】
コントローラ間リンク１０１において（１００２）、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０による制御データ（１００５）の転送は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ１上でデータ転送が行われる。
【０１２０】
図１１は、ＮＴＢ２２０およびＮＴＢ３２０における、仮想チャネルアービトレーションの設定例を示す。仮想チャネルＶＣ０（１１０１）の転送優先度（１１０３）を「Ｌｏｗ」に設定し、仮想チャネルＶＣ１（１１０２）の転送優先度（１１０３）を「Ｈｉｇｈ」に設定する。
【０１２１】
この設定により、コントローラ間リンク１０１上では、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０によりトラフィッククラスＴＣ１に設定され仮想チャネルＶＣ１を使う制御データの転送が、プロセッサ内蔵のＤＭＡコントローラ３４３、３５３によりＴＣ０に設定されて仮想チャネルＶＣ０を使うユーザデータの転送より優先される。
【０１２２】
コアライトによる制御データは、コントローラ間リンク１０１上でユーザデータと同じ仮想チャネルＶＣ０を使って転送される。実施例２のストレージ装置においても、実施例１における図５のアービトレーションテーブル５００と同様の設定により、コアライトによる制御データをユーザデータより優先して転送することができる。
【０１２３】
以上説明した通り、実施例２のストレージ装置１００は、コントローラ間リンク１０１を接続するＮＴＢ２２０、３２０におけるポートアービトレーション、及び仮想チャネルアービトレーションの設定の組合せにより、制御データをユーザデータにより優先して転送することができる。
【実施例３】
【０１２４】
図１２を用いて、本発明の実施例３のストレージ装置とその処理について説明する。実施例３のストレージ装置の構成は、前記実施例２のストレージ装置１００と一部を除いて同様な構成であるので図による説明を省略する。
【０１２５】
実施例３のストレージ装置は、前記実施例２と同様に図１のストレージ装置１００におけるＰＣＩｅスイッチ１２０、１６０に替えて、複数の仮想チャネルを使用可能なＰＣＩｅスイッチ９２０、９６０を有する。
【０１２６】
そして、コントローラ間リンク１０１は、仮想チャネルＶＣ０とＶＣ１の２本の仮想チャネルが使用可能である点が、実施例１のストレージ装置１００とは異なる。また、ＰＣＩｅスイッチ９２０、９６０にそれぞれ内蔵されるＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０は、トラフィッククラスをＴＣ１に設定したＰＣＩｅパケットでデータ転送を行うことができる。さらにプロセッサ１１１および１５１は、トラフィッククラスＴＣ１に設定したＰＣＩｅパケットを送信できるとする。
【０１２７】
図１２は、実施例３のストレージ装置における、トラフィッククラスと仮想チャネルの使用方法を示す図である。
【０１２８】
プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１２０１）、ユーザデータ（１２０３）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１２９】
コントローラ間リンク１０１において（１２０２）、ユーザデータ（１２０３）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１３０】
コアライト（ＭＰ  Ｃｏｒｅ）による制御データ転送の場合、プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１２０１）、制御データ（１２０４）は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１３１】
コントローラ間リンク１０１において（１２０２）、コアライトによる制御データ（１２０４）は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ１上でデータ転送が行われる。
【０１３２】
ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０（ＳＷ  ＤＭＡ）による制御データ転送の場合、プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１２０１）、制御データ（１２０５）は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１３３】
コントローラ間リンク１０１において（１２０２）、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０による制御データ（１２０５）は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ１上でデータ転送が行われる。
【０１３４】
実施例３のストレージ装置１００は、実施例２のストレージ装置と同様に、コントローラ間リンク１０１を接続するＰＣＩｅスイッチポートにおいて、図１１に示した仮想チャネルアービトレーションが設定されている。
【０１３５】
この設定により、コントローラ間リンク１０１上では、コアライトおよびＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０によるトラフィッククラスＴＣ１に設定された制御データ転送が、プロセッサ内蔵のＤＭＡコントローラによるＴＣ０に設定された仮想チャネルＶＣ０を使うユーザデータ転送より優先される。
【０１３６】
以上説明した通り、実施例３のストレージ装置は、コントローラ間リンク１０１を接続するＮＴＢ２２０、３２０における仮想チャネルアービトレーションの設定により、制御データをユーザデータにより優先して転送することができる。
【実施例４】
【０１３７】
図１３〜図１４を用いて、本発明の実施例４のストレージ装置とその処理について説明する。実施例４のストレージ装置の構成は、実施例２のストレージ装置と一部を除いて同様な構成であるので図による説明を省略する。実施例４のストレージ装置は、前記実施例２と同様に、図１のストレージ装置１００におけるＰＣＩｅスイッチ１２０、１６０に替えて、複数の仮想チャネルを使用可能なＰＣＩｅスイッチ９２０、９６０を有する。
【０１３８】
そして、コントローラ間リンク１０１は、ＶＣ０とＶＣ１の２本の仮想チャネルが使用可能である点が、実施例１のストレージ装置１００とは異なる。また、ＰＣＩｅスイッチ９２０、９６０にそれぞれ内蔵されるＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０は、トラフィッククラスをＴＣ０またはＴＣ１に設定したＰＣＩｅパケットでデータ転送を行うことができる。
【０１３９】
さらにコントローラ間リンク１０１を接続するＮＴＢ２２０およびＮＴＢ３２０は、コントローラ間リンク１０１へ送信するＰＣＩｅパケットのトラフィッククラスを、ＴＣ０からＴＣ１に変更できる機能を有するとする。
【０１４０】
図１３は、ＮＴＢ２２０およびＮＴＢ３２０における、トラフィッククラスの変換処理のフローチャートである。
【０１４１】
ＮＴＢ２２０またはＮＴＢ３２０は、コントローラ間リンク１０１へ送信されるＰＣＩｅパケットが、制御データかユーザデータのどちらを転送するものかを判定する（１３０１）。これはＰＣＩｅパケットの送信先アドレスを調べることで、容易に判定できる。制御データを転送するＰＣＩｅパケットである場合はステップ１３０２に進み、ユーザデータを転送するＰＣＩｅパケットである場合はステップ１３０３に進む。
【０１４２】
ステップ１３０２において、ＮＴＢ２２０またはＮＴＢ３２０は、コントローラ間リンク１０１から送信するＰＣＩｅパケットのトラフィッククラスを、ＴＣ１に設定する。
【０１４３】
ステップ１３０３において、ＮＴＢ２２０またはＮＴＢ３２０は、コントローラ間リンク１０１から送信するＰＣＩｅパケットのトラフィッククラスを、ＴＣ０に設定する。
【０１４４】
次に、ステップ１３０４において、ＮＴＢ２２０またはＮＴＢ３２０は、図４で説明したアドレス変換処理および送信元ＩＤ変換処理を行う。送信元ＩＤ変換処理は、ＮＴＢを跨いでＰＣＩｅパケットを送信する際に必要な処理の一つである。
【０１４５】
図１４は、実施例４のストレージ装置における、トラフィッククラスと仮想チャネルの使用方法を示す図である。
【０１４６】
プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１４０１）、ユーザデータ（１４０３）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１４７】
コントローラ間リンク１０１において（１４０２）、ユーザデータ（１４０３）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１４８】
コアライト（ＭＰ  Ｃｏｒｅ）による制御データ転送の場合、プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１４０１）、制御データ（１４０４）は、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１４９】
コントローラ間リンク１０１において（１４０２）、コアライトによる制御データ（１４０４）は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ１上でデータ転送が行われる。
【０１５０】
ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０（ＳＷ  ＤＭＡ）による制御データ転送の場合、プロセッサとＰＣＩｅスイッチ間のＰＣＩｅリンクにおいて（１４０１）、制御データ（１４０５）は、トラフィッククラスＴＣ０またはＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ０上でデータ転送が行われる。
【０１５１】
コントローラ間リンク１０１において（１４０２）、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０による制御データ（１４０５）は、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットにより、仮想チャネルＶＣ１上でデータ転送が行われる。
【０１５２】
実施例４のストレージ装置は、実施例２のストレージ装置と同様に、コントローラ間リンク１０１を接続するＰＣＩｅスイッチポートにおいて、図１１に示す仮想チャネルアービトレーションが設定されている。
【０１５３】
この設定により、コントローラ間リンク１０１上では、コアライトおよびＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０による制御データの転送が、ＮＴＢ２２０、３２０によりトラフィッククラスＴＣ１のＰＣＩｅパケットによるものに変更され、仮想チャネルＶＣ１を使って転送される。この結果、制御データは、プロセッサ内蔵のＤＭＡコントローラ３４３、３５３によるＴＣ０に設定された仮想チャネルＶＣ０を使うユーザデータ転送より優先される。
【０１５４】
以上説明した通り、実施例４のストレージ装置は、コントローラ間リンク１０１を接続するＮＴＢ２２０、３２０におけるトラフィッククラスの変換機能と仮想チャネルのアービトレーションの設定により、制御データをユーザデータにより優先して転送することができる。
【実施例５】
【０１５５】
図１５〜図１７を用いて、本発明の実施例５のストレージ装置とその処理について説明する。図１５は、本発明の実施例５のストレージ装置の構成例を示すブロック図である。
【０１５６】
ストレージ装置１５００は、ストレージコントローラ１５１０、１５５０と複数の不揮発性半導体メモリドライブ（ＳＳＤ）１０２、で構成されている。ストレージ装置１５００は、実施例１のストレージ装置１００から、コントローラ間リンク１０１を接続するＰＣＩｅスイッチ１２０、１６０を取り除いている。
【０１５７】
そして、前記実施例１のＰＣＩｅスイッチ１３０、１７０の替わりに、プロセッサ１１１、１５１と不揮発性半導体メモリドライブ１０２を接続するＰＣＩｅスイッチ１５２０、１５６０を有する。さらにＰＣＩｅスイッチ１５２０、１５６０間をコントローラ間リンク１５０１で接続する。
【０１５８】
プロセッサ１１１とＰＣＩｅスイッチ１５２０間は、ＰＣＩｅリンク１５２１、１５２２で接続する。プロセッサ１５１とＰＣＩｅスイッチ１５６０間は、ＰＣＩｅリンク１５６１、１５６２で接続する。ＰＣＩｅスイッチ１５２０と不揮発性半導体メモリドライブ（ＳＳＤ）１０２との間は、ＰＣＩｅリンク１５３０〜１５３７で接続している。
【０１５９】
図１６は、ＰＣＩｅスイッチ１５２０の内部構成を示す。ＰＣＩｅスイッチ１５２０は仮想スイッチ１６００（ＶＳ２０）と１６０１（ＶＳ２１）を有する。
【０１６０】
仮想スイッチ１６００は、ＰＣＩｅリンク１５２１に接続するアップストリームポート１６０２と、ＰＣＩｅリンク１５３０〜１５３７に接続するダウンストリームポート１６２０〜１６２７と、ＮＴＢ１６４０（ＮＴ２２）内のエンドポイント１６４１を含んで構成される。
【０１６１】
アップストリームポート１６０２（ＵＰ２０）はＰ２Ｐブリッジ１６０３と、エンドポイント１６４１はＰ２Ｐブリッジ１６０５と、ダウンストリームポート１６２０〜１６２７はＰ２Ｐブリッジ１６１０〜１６１７と、それぞれ接続される。Ｐ２Ｐブリッジ１６０３、１６０５及び１６１０〜１６１７は、内部バス１６０４に接続されている。
【０１６２】
仮想スイッチ１６０１は、ＰＣＩｅリンク１５２２に接続するアップストリームポート１６０６（ＵＰ２１）と、ＮＴＢ１６４０内のエンドポイント１６４２、ＮＴＢ１６５０（ＮＴ２１）、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ１６３０（ＳＷ  ＤＭＡ）を含んで構成される。
【０１６３】
アップストリームポート１６０６はＰ２Ｐブリッジ１６０７と接続され、エンドポイント１６４２はＰ２Ｐブリッジ１６０９と、エンドポイント１６５１はＰ２Ｐブリッジ１６１８と、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ１６３０はＰ２Ｐブリッジ１６３１と、それぞれ接続される。Ｐ２Ｐブリッジ１６０７、１６０９、１６１８、１６３１は、内部バス１６０８に接続されている。
【０１６４】
ＮＴＢ１６４０は、エンドポイント１６４１とエンドポイント１６４２とを含む。エンドポイント１６４１は、ＰＣＩｅリンク１５２１を介して、プロセッサ１１１からアクセス可能に設定される。
【０１６５】
エンドポイント１６４２はＰＣＩｅリンク１５２２を介して、プロセッサ１１１からアクセス可能に設定される。エンドポイント１６４１と１６４２は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０１６６】
ＮＴＢ１６５０は、エンドポイント１６５１とエンドポイント１６５２とを含む。エンドポイント１６５１は、ＰＣＩｅリンク１５２２を介して、プロセッサ１１１からアクセス可能に設定される。エンドポイント１６５２はコントローラ間リンク１５０１に接続される。エンドポイント１６５１と１６５２は、送信先が所定のアドレス範囲内であるＰＣＩｅパケットが双方向に通過できるように設定、接続されている。
【０１６７】
ＰＣＩｅスイッチ１５６０の内部構成は、ＰＣＩｅスイッチ１５２０と同様であるので、説明を省略する。
【０１６８】
図１７は、ストレージコントローラ１５１０からストレージコントローラ１５５０への制御データ及びユーザデータの転送経路を示す図である。ＰＣＩｅスイッチ１５２０は仮想スイッチ１６００（ＶＳ２０）と１６０１（ＶＳ２１）を有する。また、ＰＣＩｅスイッチ１５６０は仮想スイッチ１７００（ＶＳ３０）と１７０１（ＶＳ３１）を有する。
【０１６９】
先ず、ユーザデータの転送経路を説明する。ユーザデータは、プロセッサ１１１（ＭＰ０）がプロセッサ内蔵のＤＭＡコントローラ３４３（ＭＰ  ＤＭＡ０）を制御することにより、キャッシュメモリ１１４（ＣＭ０）からキャッシュメモリ１５４（ＣＭ１）へユーザデータを転送する。
【０１７０】
プロセッサ１１１は、プロセッサ内蔵のＤＭＡコントローラ３４３を制御するためにデータ転送リストを生成する。プロセッサ内蔵のＤＭＡコントローラ３４３は、データ転送リストに基づき、転送元であるキャッシュメモリ１１４からユーザデータを読出して（１７６０）、ルートポート３４０へユーザデータを書き出す（１７６１）。
【０１７１】
ユーザデータは、ルートポート３４０から、ＰＣＩｅリンク１５２１、アップストリームポート１６０２、ＮＴＢ１６４０、ＮＴＢ１６５０、コントローラ間リンク１５０１、ＮＴＢ１７５０、ＮＴＢ１７４０、アップストリームポート１７０２、ＰＣＩｅリンク１５６１、ルートポート３５０を介して、キャッシュメモリ１５４へ転送される。
【０１７２】
次に、制御データの転送経路を説明する。コアライトによる制御データの転送の場合、先ず、プロセッサコア３４２が転送元である共有メモリ１１３（ＳＭ０）から制御データを読出し（１７６４）、ルートポート３４１へ制御データを書き出す（１７６５）。制御データは、ルートポート３４１から、ＰＣＩｅリンク１５２２、アップストリームポート１６０６、ＮＴＢ１６５０、コントローラ間リンク１５０１、ＮＴＢ１７５０、アップストリームポート１７０６、ＰＣＩｅリンク１５６２、ルートポート３５１を介して、共有メモリ１５３（ＳＭ１）へ転送される。
【０１７３】
ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ１６３０による制御データ転送の場合、プロセッサ１１１が、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ１６３０を制御するためのデータ転送リストを生成する。ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ１６３０は、データ転送リストに基づき、転送元である共有メモリ１１３から、ルートポート３４１、ＰＣＩｅリンク１５２２、アップストリームポート１６０６を介して制御データを読出し（１７６２）、ＮＴＢ１６５０へ制御データを書き出す（１７６３）。
【０１７４】
制御データは、ＮＴＢ１６５０から、コントローラ間リンク１５０１、ＮＴＢ１７５０、アップストリームポート１７０６、ＰＣＩｅリンク１５６２、ルートポート３５１を介して、共有メモリ１５３（ＳＭ１）へ転送される。
【０１７５】
ストレージコントローラ１５０からストレージコントローラ１１０へ制御データを転送する場合の経路も同様である。
【０１７６】
ユーザデータは、プロセッサ１５１がプロセッサ内蔵のＤＭＡコントローラ３５３を制御することにより、キャッシュメモリ１５４（ＣＭ１）からキャッシュメモリ１１４（ＣＭ０）へ転送される。
【０１７７】
プロセッサ１５１は、プロセッサ内蔵のＤＭＡコントローラ３５３を制御するためのデータ転送リストを生成する。プロセッサ内蔵のＤＭＡコントローラ３５３は、データ転送リストに基づき、転送元であるキャッシュメモリ１５４からユーザデータを読出し、ルートポート３５０へユーザデータを書き出す。
【０１７８】
ユーザデータは、ルートポート３５０から、ＰＣＩｅリンク１５６１、アップストリームポート１７０２、ＮＴＢ１７４０、ＮＴＢ１７５０、コントローラ間リンク１５０１、ＮＴＢ１６５０、ＮＴＢ１６４０、アップストリームポート１６０２、ＰＣＩｅリンク１５２１、ルートポート３４０を介して、キャッシュメモリ１１４へ転送される。
【０１７９】
コアライトによる制御データ転送の場合、先ず、プロセッサコア３５２が転送元である共有メモリ１５３から制御データを読出し、ルートポート３５１へ制御データを書き出す。制御データは、ルートポート３５１から、ＰＣＩｅリンク１５６２、アップストリームポート１７０６、ＮＴＢ１７５０、コントローラ間リンク１５０１、ＮＴＢ１６５０、アップストリームポート１６０６、ＰＣＩｅリンク１５２２、ルートポート３４１を介して、共有メモリ１１３へ転送される。
【０１８０】
ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ１７３０による制御データ転送の場合、プロセッサ１５１が、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ１７３０を制御するためのデータ転送リストを生成する。ＰＣＩｅスイッチのＤＭＡコントローラ１７３０は、データ転送リストに基づき、転送元である共有メモリ１５３から、ルートポート３５１、ＰＣＩｅリンク１５６２、アップストリームポート１７０６を介して制御データを読出し、ＮＴＢ１７５０へ制御データを書き出す。
【０１８１】
制御データは、ＮＴＢ１７５０から、コントローラ間リンク１５０１、ＮＴＢ１６５０、アップストリームポート１６０６、ＰＣＩｅリンク１５２２、ルートポート３４１を介して、共有メモリ１１３へ転送される。
【０１８２】
ＰＣＩｅリンク１５２１、１５２２、１５６１、１５６２上では、トラフィッククラスＴＣ０、ＴＣ１に設定されたＰＣＩｅパケットが、仮想チャネルＶＣ０を使って転送されるように設定されている。
【０１８３】
コントローラ間リンク１５０１上では、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットが仮想チャネルＶＣ０を、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットが仮想チャネルＶＣ１を使って転送されるように設定されている。
【０１８４】
ユーザデータは、プロセッサ内蔵のＤＭＡコントローラ３４３、３５３により、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットで転送される。制御データは、ＰＣＩｅスイッチ内の蔵ＤＭＡコントローラ１６３０、１７３０により、トラフィッククラスＴＣ１に設定されたＰＣＩｅパケットで転送される。
【０１８５】
コアライトによりプロセッサコア３４２、３５２から送信された制御データを含むＰＣＩｅパケットは、ＮＴＢ１６５０または１７５０からコントローラ間リンク１５０１へ送信される際に、トラフィッククラスＴＣ１のＰＣＩｅパケットに変換される。
【０１８６】
さらに、実施例２のストレージ装置と同様に、コントローラ間リンク１５０１を接続するＰＣＩｅスイッチポートであるＮＴＢ１６５０、１７５０において、図１１に示す仮想チャネルアービトレーションが設定されている。以上により、コントローラ間リンク１５０１上では、制御データがユーザデータよりも優先して転送される。
【０１８７】
ＰＣＩｅスイッチ１５２０、１５６０は、ＮＴＢを通過するＰＣＩｅパケットに対して、図４の説明で示したような、実施例１のストレージ装置１００におけるＰＣＩｅスイッチ１２０、１６０と同様のアドレス変換処理を行う。
【０１８８】
ストレージ装置１５００では、ＰＣＩｅスイッチ１５２０、１５６０上で、制御データとユーザデータの他に、不揮発性半導体メモリドライブ（ＳＳＤ）１０２に対する読み書きデータに関する転送も競合することになる。
【０１８９】
しかし、図１６で示したように、ユーザデータとドライブ読み書きデータが転送される仮想スイッチ１６００、１７００と、制御データとユーザデータが転送される仮想スイッチ１６０１、１７０１が論理的に分割されている。さらに制御データはユーザデータより転送優先度の高いトラフィッククラスに設定されたＰＣＩｅパケットで転送される。その結果、制御データは、ユーザデータとドライブ読み書きデータの転送の影響を受けずに、ストレージコントローラ１５１０と１５５０間を転送することができる。
【実施例６】
【０１９０】
図１８を用いて、本発明の実施例６のストレージ装置１８００とその処理について説明する。図１８は、本発明の実施例６のストレージ装置の構成の一例を示すブロック図である。
【０１９１】
ストレージ装置１８００は、ストレージコントローラ１８１０、１８５０と複数の不揮発性半導体メモリドライブ（ＳＳＤ）１０２、で構成されている。ストレージ装置１８００は、実施例１のストレージ装置１００から、コントローラ間リンク１０１を接続するＰＣＩｅスイッチ１２０、１６０を取り除いている。
【０１９２】
そしてＰＣＩｅスイッチ１３０、１７０の替わりに、プロセッサ１１１、１５１と複数のフロントエンドインターフェース１８４０、１８８０を接続するＰＣＩｅスイッチ１８１１、１８５１を有する。さらにＰＣＩｅスイッチ１８１１、１８５１間をコントローラ間リンク１８０１で接続する。
【０１９３】
プロセッサ１１１とＰＣＩｅスイッチ１８１１間は、ＰＣＩｅリンク１８２１、１８２２で接続する。プロセッサ１５１とＰＣＩｅスイッチ１８５１間は、ＰＣＩｅリンク１８６１、１８６２で接続する。実施例６のストレージ装置１８００は、多数の上位装置を接続するために多数のフロントエンドインターフェース１８４０、１８８０が必要な場合に適している。
【０１９４】
ＰＣＩｅスイッチ１８１１、１８５１の内部構成は、前記実施例５に示した図１６のＰＣＩｅスイッチ１５２０と同様であるので、説明を省略する。
【０１９５】
また、ストレージコントローラ間における制御データ及びユーザデータの転送の詳細は、前記実施例５のストレージ装置１５００と同様であるので、説明を省略する。
【０１９６】
本実施例６によれば、プロセッサ１１１、１５１と複数のフロントエンドインターフェース１８４０、１８８０を接続するＰＣＩｅスイッチ１８１１、１８５１間をコントローラ間リンク１８０１で接続する場合でも、制御データをユーザデータより優先して転送するストレージ装置を実現できる。
【実施例７】
【０１９７】
図１９〜図２０を用いて、本発明の実施例７のストレージ装置とその処理について説明する。実施例７のストレージ装置は、複数のストレージノードをＰＣＩｅスイッチで相互接続する点が特徴である。
【０１９８】
図１９は、本発明の実施例７のストレージ装置におけるストレージノードの構成例を示す。ストレージノード１９００は、ストレージコントローラ１９１０、１９５０と複数の不揮発性半導体メモリドライブ（ＳＳＤ）１０２、で構成されている。
【０１９９】
ストレージノード１９００は、実施例１のストレージ装置１００から、コントローラ間リンク１０１を接続するＰＣＩｅスイッチ１２０、１６０の替わりに、ＰＣＩｅスイッチ１９２０、１９６０を有する。ＰＣＩｅスイッチ１９２０、１９６０間は直接接続せず、他のストレージノードへ接続するための外部接続ポート１９０１、１９０２にそれぞれ接続する。
【０２００】
プロセッサ１１１とＰＣＩｅスイッチ１９２０間は、ＰＣＩｅリンク１９２１、１９２２で接続する。プロセッサ１５１とＰＣＩｅスイッチ１９６０間は、ＰＣＩｅリンク１９６１、１９６２で接続する。
【０２０１】
ＰＣＩｅスイッチ１９２０、１９６０は、実施例２から実施例４のＰＣＩｅスイッチ９２０、９６０と同様の構成とする。その結果、外部接続ポート１９０１、１９０２からは、制御データがトラフィッククラスＴＣ１に設定されたＰＣＩｅパケットで、ユーザデータがトラフィッククラスＴＣ０に設定されたＰＣＩｅパケットで、それぞれ送信される。
【０２０２】
図２０は、４個のストレージノード１９００、２１１０、２１２０、２１３０をＰＣＩｅスイッチ２００１、２００２で相互接続した、本発明の実施例７のストレージ装置を示す。
【０２０３】
ストレージノード１９００の外部接続ポート１９０１（図１９参照）は、ＰＣＩｅスイッチ２００１と接続する。ストレージノード１９００の外部接続ポート１９０２は、ＰＣＩｅスイッチ２００２と接続する。ストレージノード２１１０の外部接続ポート２１１１は、ＰＣＩｅスイッチ２００１と接続する。ストレージノード２１１０の外部接続ポート２１１２は、ＰＣＩｅスイッチ２００２と接続する。
【０２０４】
ストレージノード２１２０の外部接続ポート２１２１は、ＰＣＩｅスイッチ２００１と接続する。ストレージノード２１２０の外部接続ポート２１２２は、ＰＣＩｅスイッチ２００２と接続する。ストレージノード２１３０の外部接続ポート２１３１は、ＰＣＩｅスイッチ２００１と接続する。ストレージノード２１３０の外部接続ポート２１３２は、ＰＣＩｅスイッチ２００２と接続する。
【０２０５】
ＰＣＩｅスイッチ２００１、２００２は２本の仮想チャネルＶＣ０、ＶＣ１を有する。各ストレージノードとＰＣＩｅスイッチ２００１、２００２間は、仮想チャネルＶＣ０とＶＣ１を含む複数の仮想チャネルが使用可能なＰＣＩｅリンクで接続する。
【０２０６】
そして、ＰＣＩｅスイッチ２００１、２００２の各ストレージノードと接続するＰＣＩｅポートにおいて、トラフィッククラスＴＣ０が仮想チャネルＶＣ０に、トラフィッククラスＴＣ１が仮想チャネルＶＣ１に、マッピングされている。
【０２０７】
この結果、各ストレージノードからトラフィッククラスＴＣ１に設定されたＰＣＩｅパケットで送信される制御データが、トラフィッククラスＴＣ０に設定されたＰＣＩｅパケットで送信されるユーザデータよりも、優先して転送される。
【０２０８】
本実施例７によれば、複数のストレージノードを相互接続するストレージ装置において、制御データをユーザデータより優先して転送するストレージ装置を実現できる。また、制御データとユーザデータを別のケーブル等の配線で転送する場合よりも、複数のストレージノード間を接続する配線物量を削減できる。
【０２０９】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０２１０】
また、上記の各構成・機能・処理部等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ等の記録装置の記録媒体に置くことができる。
【０２１１】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【０２１２】
＜まとめ＞
【０２１３】
以上のように、上記実施例１〜７のストレージ装置は、以下のような構成とすることができる。
【０２１４】
（１．）第１のストレージコントローラ（１１０）と第２のストレージコントローラ（１５０）を有するストレージ装置（１００）であって、前記第１のストレージコントローラ（１１０）は、第１のプロセッサ（１１１）と、前記第１のプロセッサ（１１１）に接続された第１のメモリ（１１２）と、前記第１のプロセッサ（１１１）に接続されて、第１のポート（ＮＴＢ２２０）を有する第１のスイッチ（ＰＣＩｅスイッチ１２０）と、前記第１のメモリ（１１２）に設定されてユーザデータを格納するキャッシュ領域（１１４）と、前記第１のメモリ（１１２）に設定されて制御データを格納する共有領域（１１３）と、を含み、前記第２のストレージコントローラ（１５０）は、第２のプロセッサ（１５１）と、前記第２のプロセッサ（１５１）に接続された第２のメモリ（１５２）と、前記第２のプロセッサ（１５１）に接続されて、第２のポート（ＮＴＢ３２０）を有する第２のスイッチ（ＰＣＩｅスイッチ１６０）と、前記第２のメモリ（１５２）に設定されてユーザデータを格納するキャッシュ領域（１５４）と、前記第２のメモリ（１５２）に設定されて制御データを格納する共有領域（１５３）と、を含み、前記ストレージ装置（１００）は、前記第１のポート（２２０）と前記第２のポート（３２０）を第１のリンク（コントローラ間リンク１０１）で接続し、前記第１のプロセッサ（１１１）と前記第１のスイッチ（１２０）を、前記ユーザデータを転送するための第２のリンク（ＰＣＩｅリンク１２１）と、前記制御データを転送するための第３のリンク（ＰＣＩｅリンク１２２）、で接続し、前記第２のプロセッサ（１５１）と前記第２のスイッチ（１６０）を、前記ユーザデータを転送するための第４のリンク（ＰＣＩｅリンク１６１）と、前記制御データを転送するための第５のリンク（ＰＣＩｅリンク１６２）、で接続し、前記第１のポート（２２０）と前記第２のポート（３２０）は、前記制御データを、前記ユーザデータより優先して前記第１のリンク（１０１）で転送する。
【０２１５】
上記構成により、実施例１のストレージ装置１００は、１本の仮想チャネルしか持たない汎用のプロセッサを搭載したストレージコントローラのコントローラ間リンク（１０１）でも、ユーザデータ転送との競合による制御データの転送性能の低下を防ぐことができ、ストレージ装置１００の応答性能を改善することができる。これにより、制御データの転送時間を低減して、ストレージ装置１００の性能向上を図ることができる。
【０２１６】
（２．）上記（１．）に記載のストレージ装置（１００）であって、前記第１のプロセッサ（１１１）及び前記第２のプロセッサ（１５１）は、それぞれ第１のプロセッサ（１１１）内蔵のＤＭＡコントローラ（３４３）及び第２のプロセッサ（１５１）内蔵のＤＭＡコントローラ（３５３）を有し、前記第１のスイッチ（１２０）及び前記第２のスイッチ（１６０）は、それぞれ第１のスイッチ（１２０）内蔵のＤＭＡコントローラ（２３０）及び第２のスイッチ（１６０）内蔵のＤＭＡコントローラ（３３０）を有し、前記第１のストレージコントローラ（１１０）と前記第２のストレージコントローラ（１５０）間において、前記第１のプロセッサ（１１１）内蔵のＤＭＡコントローラ（３４３）または前記第２のプロセッサ（１５１）内蔵のＤＭＡコントローラ（３５３）が前記ユーザデータを転送し、前記第１のスイッチ（１２０）内蔵のＤＭＡコントローラ（２３０）または前記第２のスイッチ（１６０）内蔵のＤＭＡコントローラ（３３０）が制御データを転送する。
【０２１７】
上記構成により、ストレージ装置１００は、異なるデータ転送経路上にあるプロセッサ内蔵のＤＭＡコントローラ３４３、３５３と、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０を使用して、ユーザデータと制御データをそれぞれ転送する。そして、両者が合流するＰＣＩｅスイッチ１２０、１６０のポート（ＮＴＢ２２０、３２０）において、制御データを優先して転送することにより、制御データの転送時間を短縮できる。
【０２１８】
（３．）上記（２．）に記載のストレージ装置（１００）であって、前記第１のストレージコントローラ（１１０）または前記第２のストレージコントローラ（１５０）は、転送する制御データのサイズが所定値以上の場合は、前記第１のスイッチ（１２０）内蔵のＤＭＡコントローラ（２３０）または前記第２のスイッチ（１６０）内蔵のＤＭＡコントローラ（３３０）に制御データを転送させ、転送する制御データのサイズが所定値未満の場合は、前記第１のプロセッサ（１１１）または前記第２のプロセッサ（１５１）が、メモリライト命令を実行することにより制御データを転送する。
【０２１９】
上記構成により、制御データのサイズが所定値（または閾値）より小さい場合、ＰＣＩｅスイッチ内蔵のＤＭＡコントローラ２３０、３３０による転送よりも、コアライトによる転送の方が、制御データの転送時間を短縮できる。
【０２２０】
（４．）上記（１．）に記載のストレージ装置（１００）であって、前記第１のリンク（１０１）、前記第２のリンク（１２１）、及び前記第４のリンク（１６１）は、前記第１のスイッチ（１２０）または前記第２のスイッチ（１６０）が有する非透過性ブリッジ（ＮＴＢ２２０、３２０）と接続し、前記第３のリンク（１２２）及び前記第５のリンク（１６２）は、前記第１のスイッチ（１２０）または前記第２のスイッチ（１６０）のアップストリームポート（２００、３００）と接続する。
【０２２１】
上記構成により、非透過性ブリッジ（ＮＴＢ２２０、３２０）では、第２のリンク（１２１）または第４のリンク（１６１）からのユーザデータと、第３のリンク（１２２）または第５のリンク（１６２）からの制御データを集合させて、第１のリンク（コントローラ間リンク１０１）へ送信することができる。
【０２２２】
（５．）上記（１．）に記載のストレージ装置（１００）であって、前記第１のリンク（１０１）は複数の仮想チャネル（ＶＣ０、ＶＣ１）を有し、前記第１のリンク（１０１）上では、前記ユーザデータと前記制御データを異なる前記仮想チャネルで転送し（ＶＣ０、ＶＣ１）、前記第１のポート（２２０）と前記第２のポート（３２０）は、前記仮想チャネルで転送する制御データを、前記ユーザデータより優先して転送する。
【０２２３】
上記構成により、コントローラ間リンク１０１の異なる仮想チャネルでユーザデータと制御データを転送することで、トラフィッククラスなどの優先度制御を実施して制御データを優先的に転送することができる。
【０２２４】
（６．）上記（５．）に記載のストレージ装置（１００）であって、前記第１のスイッチ（１２０）内蔵のＤＭＡコントローラ（２３０）または前記第２のスイッチ（１６０）内蔵のＤＭＡコントローラ（３３０）が、前記ユーザデータを転送するパケットよりも高い転送優先度に設定したパケットにより、前記第１のリンク（１０１）上で制御データを転送する。
【０２２５】
スイッチ内蔵のＤＭＡコントローラ２３０または３３０が、ユーザデータを転送するパケットよりも、制御データを転送するパケットの転送優先度を高く設定することで、コントローラ間リンク１０１の仮想チャネルで優先的に制御データを転送することが可能となる。
【０２２６】
（７．）上記（５．）に記載のストレージ装置（１００）であって、前記第１のスイッチ（１２０）または前記第２のスイッチ（１６０）が、前記制御データを転送するパケットの転送優先度を、前記ユーザデータを転送するパケットよりも高い転送優先度に変換して前記第１のリンク（１０１）へ送信する。
【０２２７】
ＰＣＩｅスイッチ９２０、９６０が、ユーザデータを転送するパケットよりも、制御データを転送するパケットの転送優先度を高く設定することで、コントローラ間リンク１０１の仮想チャネルで優先的に制御データを転送することが可能となる。
【０２２８】
（８．）上記（５．）に記載のストレージ装置（１００）であって、前記第１のスイッチ（１２０）は第１の仮想スイッチ（１６００）と第２の仮想スイッチ（１６０１）を有し、さらに前記第１の仮想スイッチ（１６００）と前記第２の仮想スイッチ（１６０１）は第１の非透過性ブリッジ（ＮＴＢ１６４０）で接続され、前記第２のスイッチ（１６０）は第３の仮想スイッチ（１７００）と第４の仮想スイッチ（１７０１）を有し、さらに前記第３の仮想スイッチ（１７００）と前記第４の仮想スイッチ（１７０１）は第２の非透過性ブリッジ（ＮＴＢ１７４０）で接続され、前記第２のリンク（１５２１）は前記第１の仮想スイッチ（１６００）のアップストリームポート（１６０２）と接続し、前記第３のリンク（１５２２）は前記第２の仮想スイッチ（１６０１）のアップストリームポート（１６０６）と接続し、前記第４のリンク（１５６１）は前記第３の仮想スイッチ（１７００）のアップストリームポート（１７０２）と接続し、前記第５のリンク（１５６２）は前記第４の仮想スイッチ（１７０１）のアップストリームポート（１７０６）と接続し、前記第２の仮想スイッチ（１６０１）は前記第１のポート（１６５０）を含み、前記第４の仮想スイッチ（１７０１）は前記第２のポート（１７５０）を含む。
【０２２９】
上記構成により、ユーザデータとドライブ読み書きデータが転送される仮想スイッチ１６００、１７００と、制御データとユーザデータが転送される仮想スイッチ１６０１、１７０１が論理的に分割される。そして、制御データはユーザデータより転送優先度の高いトラフィッククラスに設定されたＰＣＩｅパケットで転送される。これにより、仮想スイッチ１６００、１７００は、ユーザデータとドライブ読み書きデータの転送の影響を受けずに、ストレージコントローラ１５１０と１５５０間で制御データを優先的に転送することが可能となる。
【０２３０】
（９．）上記（８．）に記載のストレージ装置（１００）であって、前記第１の仮想スイッチ（１６００）または前記第３の仮想スイッチ（１７００）は、フロントエンドインターフェース（１４０）または半導体メモリドライブ（１０２）を接続する。
【０２３１】
上記構成により、仮想スイッチ１６０１、１７０１は、フロントエンドインターフェース（１４０）と半導体メモリドライブ（１０２）との間で、ユーザデータとドライブ読み書きデータの転送の影響を受けずに、ストレージコントローラ１５１０と１５５０間で制御データを優先的に転送することが可能となる。
【０２３２】
（１０．）第１のストレージコントローラ（１９１０）と第２のストレージコントローラ（１９５０）を有するストレージ装置（１９００）であって、前記第１のストレージコントローラ（１９１０）は、第１のプロセッサ（１１１）と、前記第１のプロセッサ（１１１）に接続された第１のメモリ（１１２）と、前記第１のプロセッサ（１１１）に接続されて、第１の外部接続ポート（１９０１）を有する第１のスイッチ（１９２０）と、前記第１のメモリ（１１２）に設定されてユーザデータを格納するキャッシュ領域と、前記第１のメモリ（１１２）に設定されて制御データを格納する共有領域と、を含み、前記第２のストレージコントローラ（１９５０）は、第２のプロセッサ（１５１）と、前記第２のプロセッサ（１５１）に接続された第２のメモリ（１５２）と、前記第２のプロセッサ（１５１）に接続されて、第２の外部接続ポート（１９０２）を有する第２のスイッチ（１９６０）と、前記第２のメモリ（１５２）に設定されてユーザデータを格納するキャッシュ領域と、前記第２のメモリ（１５２）に設定されて制御データを格納する共有領域と、を含み、前記ストレージ装置（１９００）は、前記第１のプロセッサ（１１１）と前記第１のスイッチ（１９２０）を、前記ユーザデータを転送するための第２のリンク（１９２１）と、前記制御データを転送するための第３のリンク（１９２２）、で接続し、前記第２のプロセッサ（１５１）と前記第２のスイッチ（１６０）を、前記ユーザデータを転送するための第４のリンク（１９６１）と、前記制御データを転送するための第５のリンク（１９６２）、で接続し、前記第１の外部接続ポート（１９０１）と前記第２の外部接続ポート（１９０２）は、複数の仮想チャネルを有し、前記第１の外部接続ポート（１９０１）と前記第２の外部接続ポート（１９０２）を、複数の仮想チャネルを有する外部スイッチに接続し、前記第１の外部接続ポート（１９０１）と前記第２の外部接続ポート（１９０２）は、前記ユーザデータと前記制御データを異なる前記仮想チャネルで転送する。
【０２３３】
上記構成により、複数のストレージノードを相互接続するストレージ装置において、制御データをユーザデータより優先して転送するストレージ装置を実現できる。また、制御データとユーザデータを別のケーブル等の配線で転送する場合よりも、複数のストレージノード間を接続する配線物量を削減できる。
【符号の説明】
【０２３４】
１００  ストレージ装置
１０１  コントローラ間リンク
１０２  不揮発性半導体メモリドライブ
１１０、１５０  ストレージコントローラ
１１１  プロセッサ
１１２  メインメモリ
１１３  共有メモリ
１１４  キャッシュメモリ
１４０、１８０  フロントエンドインターフェース
１２０、１３０  ＰＣＩｅスイッチ
１２１、１２２、１６１、１６２  ＰＣＩｅリンク
２００、３００  アップストリームポート
２１０、２２０、３１０、３２０  ＮＴＢと、ＮＴＢ
２３０、３３０  ＤＭＡコントローラ
２４０  メモリ
２５０  プロセッサ
３４０、３４１、３５０、３５１  ルートポート
５００  アービトレーションテーブル
【図１】
2020113137.tif 000003
【図２】
2020113137.tif 000004
【図３】
2020113137.tif 000005
【図４】
2020113137.tif 000006
【図５】
2020113137.tif 000007
【図６】
2020113137.tif 000008
【図７】
2020113137.tif 000009
【図８】
2020113137.tif 000010
【図９】
2020113137.tif 000011
【図１０】
2020113137.tif 000012
【図１１】
2020113137.tif 000013
【図１２】
2020113137.tif 000014
【図１３】
2020113137.tif 000015
【図１４】
2020113137.tif 000016
【図１５】
2020113137.tif 000017
【図１６】
2020113137.tif 000018
【図１７】
2020113137.tif 000019
【図１８】
2020113137.tif 000020
【図１９】
2020113137.tif 000021
【図２０】
2020113137.tif 000022