(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024172314
(43)【公開日】2024-12-12
(54)【発明の名称】ストレージシステム及びデータの転送方法
(51)【国際特許分類】
G06F 13/12 20060101AFI20241205BHJP
G06F 13/10 20060101ALI20241205BHJP
G06F 3/06 20060101ALI20241205BHJP
H04L 67/1097 20220101ALI20241205BHJP
H04L 67/1095 20220101ALI20241205BHJP
【FI】
G06F13/12 340B
G06F13/10 330C
G06F13/10 340A
G06F3/06 301F
H04L67/1097
H04L67/1095
【審査請求】未請求
【請求項の数】15
【出願形態】OL
(21)【出願番号】P 2023089944
(22)【出願日】2023-05-31
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.PYTHON
(71)【出願人】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】東海林 知輝
(72)【発明者】
【氏名】高田 正法
(72)【発明者】
【氏名】田中 勝也
(57)【要約】
【課題】ストレージコントローラ間で送受信される制御データの転送のスループットを向上させる。
【解決手段】ストレージシステムであって、複数のストレージコントローラを備え、ストレージコントローラは、プロセッサ、メモリ、及び、複数のストレージコントローラ間で送受信される、ストレージシステムの内部動作を制御するための制御データを処理する転送デバイスを有し、プロセッサは、制御データの転送リクエストが発生した場合、制御データをメモリに蓄積し、メモリに格納される複数の制御データを送信するためのライトリクエストを生成し、他のストレージコントローラに送信し、転送デバイスは、ライトリクエストを受信した場合、ライトリクエストに含まれる複数の制御データをメモリに書き込む。
【選択図】
図6
【特許請求の範囲】
【請求項1】
ストレージシステムであって、
複数のストレージコントローラを備え、
前記ストレージコントローラは、プロセッサ、メモリ、及び、複数の前記ストレージコントローラ間で送受信される、前記ストレージシステムの内部動作を制御するための制御データを処理する転送デバイスを有し、
前記プロセッサは、
前記制御データの転送リクエストが発生した場合、前記制御データを前記メモリに蓄積し、
前記メモリに格納される複数の前記制御データを送信するためのライトリクエストを生成し、他の前記ストレージコントローラに送信し、
前記転送デバイスは、前記ライトリクエストを受信した場合、前記ライトリクエストに含まれる複数の前記制御データを前記メモリに書き込むことを特徴とするストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記プロセッサは、
前記制御データを転送する他の前記ストレージコントローラとの間を接続する伝送路の通信負荷を確認し、
前記伝送路の通信負荷が大きい場合、前記制御データを前記メモリに蓄積することを特徴とするストレージシステム。
【請求項3】
請求項1に記載のストレージシステムであって、
前記プロセッサは、前記メモリに格納される前記制御データのデータ量が閾値より大きい場合、前記ライトリクエストを生成することを特徴とするストレージシステム。
【請求項4】
請求項1に記載のストレージシステムであって、
前記制御データは、可変長のデータであり、
前記プロセッサは、
前記制御データの各々について、前記制御データの書き込み先のアドレス、前記制御データのデータ長、及び前記制御データから構成される転送指示を生成し、
前記転送指示を連結することによって前記ライトリクエストを生成し、
前記転送デバイスは、
一つの前記転送指示を選択し、
選択された前記転送指示に含まれる前記制御データのデータ長に基づいて、当該転送指示から前記制御データを読み出し、
選択された前記転送指示に含まれる前記制御データの書き込み先のアドレスに、読み出された前記制御データを書き込むことを特徴とするストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記ストレージコントローラは、前記転送デバイスがアクセス可能なバッファメモリを有し、
前記プロセッサは、他の前記ストレージコントローラの前記バッファメモリ宛てに前記ライトリクエストを送信することを特徴とするストレージシステム。
【請求項6】
ストレージシステムが実行するデータの転送方法であって、
前記ストレージシステムは、複数のストレージコントローラを含む、
前記ストレージコントローラは、プロセッサ、メモリ、及び、複数の前記ストレージコントローラ間で送受信される、前記ストレージシステムの内部動作を制御するための制御データを処理する転送デバイスを有し、
前記データの転送方法は、
前記プロセッサが、前記制御データの転送リクエストが発生した場合、前記制御データを前記メモリに蓄積する第1のステップと、
前記プロセッサが、前記メモリに格納される複数の前記制御データを送信するためのライトリクエストを生成し、他の前記ストレージコントローラに送信する第2のステップと、
前記転送デバイスが、前記ライトリクエストを受信した場合、前記ライトリクエストに含まれる複数の前記制御データを前記メモリに書き込む第3のステップと、を含むことを特徴とするデータの転送方法。
【請求項7】
請求項6に記載のデータの転送方法であって、
前記第1のステップは、
前記プロセッサが、前記制御データを転送する他の前記ストレージコントローラとの間を接続する伝送路の通信負荷を確認するステップと、
前記伝送路の通信負荷が大きい場合、前記プロセッサが、前記制御データを前記メモリに蓄積するステップと、を含むことを特徴とするデータの転送方法。
【請求項8】
請求項6に記載のデータの転送方法であって、
前記第2のステップは、前記プロセッサが、前記メモリに格納される前記制御データのデータ量が閾値より大きい場合、前記ライトリクエストを生成するステップを含むことを特徴とするデータの転送方法。
【請求項9】
請求項6に記載のデータの転送方法であって、
前記制御データは、可変長のデータであり、
前記第2のステップは、
前記プロセッサが、前記制御データの各々について、前記制御データの書き込み先のアドレス、前記制御データのデータ長、及び前記制御データから構成される転送指示を生成するステップと、
前記プロセッサが、前記転送指示を連結することによって前記ライトリクエストを生成するステップと、を含み、
前記第3のステップは、
前記転送デバイスが、一つの前記転送指示を選択するステップと、
前記転送デバイスが、選択された前記転送指示に含まれる前記制御データのデータ長に基づいて、当該転送指示から前記制御データを読み出すステップと、
前記転送デバイスが、選択された前記転送指示に含まれる前記制御データの書き込み先のアドレスに、読み出された前記制御データを書き込むステップと、を含むことを特徴とするデータの転送方法。
【請求項10】
請求項6に記載のデータの転送方法であって、
前記ストレージコントローラは、前記転送デバイスがアクセス可能なバッファメモリを有し、
前記第2のステップは、前記プロセッサが、他の前記ストレージコントローラの前記バッファメモリ宛てに前記ライトリクエストを送信するステップを含むことを特徴とするデータの転送方法。
【請求項11】
複数のストレージノードから構成されるストレージシステムであって、
前記ストレージノードは、プロセッサ、メモリ、及び、複数の前記ストレージコントローラ間で送受信される、前記ストレージシステムの内部動作を制御するための制御データを処理する転送デバイスを有し、
前記プロセッサは、
前記制御データの転送リクエストが発生した場合、前記制御データを前記メモリに蓄積し、
前記メモリに格納される複数の前記制御データを送信するためのライトリクエストを生成し、他の前記ストレージノードに送信し、
前記転送デバイスは、前記ライトリクエストを受信した場合、前記ライトリクエストに含まれる複数の前記制御データを前記メモリに書き込むことを特徴とするストレージシステム。
【請求項12】
請求項11に記載のストレージシステムであって、
前記プロセッサは、
前記制御データを転送する他の前記ストレージノードとの間を接続する伝送路の通信負荷を確認し、
前記伝送路の通信負荷が大きい場合、前記制御データを前記メモリに蓄積することを特徴とするストレージシステム。
【請求項13】
請求項11に記載のストレージシステムであって、
前記プロセッサは、前記メモリに格納される前記制御データのデータ量が閾値より大きい場合、前記ライトリクエストを生成することを特徴とするストレージシステム。
【請求項14】
請求項11に記載のストレージシステムであって、
前記制御データは、可変長のデータであり、
前記プロセッサは、
前記制御データの各々について、前記制御データの書き込み先のアドレス、前記制御データのデータ長、及び前記制御データから構成される転送指示を生成し、
前記転送指示を連結することによって前記ライトリクエストを生成し、
前記転送デバイスは、
一つの前記転送指示を選択し、
選択された前記転送指示に含まれる前記制御データのデータ長に基づいて、当該転送指示から前記制御データを読み出し、
選択された前記転送指示に含まれる前記制御データの書き込み先のアドレスに、読み出された前記制御データを書き込むことを特徴とするストレージシステム。
【請求項15】
請求項11に記載のストレージシステムであって、
前記ストレージノードは、前記転送デバイスがアクセス可能なバッファメモリを有し、
前記プロセッサは、他の前記ストレージノードの前記バッファメモリ宛てに前記ライトリクエストを送信することを特徴とするストレージシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のストレージコントローラを有するストレージシステムのデータ転送技術に関する。
【背景技術】
【0002】
ストレージシステムでは、複数のストレージコントローラを接続することで、並列動作による処理高速化、及びデータ冗長化による可用性向上を実現できる。以下では、ストレージコントローラを単にコントローラと記載する。
【0003】
複数のコントローラは、データを共有するために、各コントローラのメモリを共有して使用する。共有化されたメモリは、別のコントローラ(他系コントローラ)のプロセッサから直接アクセスされる。
【0004】
特許文献1には、通信ネットワーク規格の一つであるPCIe(PCIe、PCI Expressは登録商標、以下同じ)を使用してコントローラ間を接続し、共有メモリを実現することが記載されている。
【0005】
PCIeは、コントローラ間を接続する通信規格として一般的に用いられている。PCIeは技術世代を上げると帯域を向上させることが可能であるが、近年、PCIeの世代を上げると長距離における伝送の品質維持が困難になるという課題が生じている。
【0006】
長距離伝送が可能な通信規格として、RoCE(RDMA over Converged Ethernet(イーサネット、Ethernetは登録商標、以下同じ))及びInfinibandが存在する。特許文献2には、RoCEを用いて、コントローラ間のRDMA(Remote Direct Memory Access)を実現し、メモリアクセスを可能にする技術が記載されている。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】特表2015-501957号公報
【特許文献2】特開2022-164414号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
ストレージワークロードでは2Bから64B程度の小さいサイズの制御データがコントローラ間で送受信される。イーサネットを始めとするRDMAのデータ転送においては、小さいサイズのデータ転送を繰り返すワークロードでは伝送路の性能が低下する。本発明は、コントローラ間をイーサネット等の伝送路を介して接続したストレージシステムにおいて、小さい制御データの転送が多数発生する場合に、RDMAのスループットを向上させる。
【課題を解決するための手段】
【0009】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、ストレージシステムであって、複数のストレージコントローラを備え、前記ストレージコントローラは、プロセッサ、メモリ、及び、複数の前記ストレージコントローラ間で送受信される、前記ストレージシステムの内部動作を制御するための制御データを処理する転送デバイスを有し、前記プロセッサは、前記制御データの転送リクエストが発生した場合、前記制御データを前記メモリに蓄積し、前記メモリに格納される複数の前記制御データを送信するためのライトリクエストを生成し、他の前記ストレージコントローラに送信し、前記転送デバイスは、前記ライトリクエストを受信した場合、前記ライトリクエストに含まれる複数の前記制御データを前記メモリに書き込む。
【発明の効果】
【0010】
本発明によれば、複数の制御データが一括して転送されるため、RDMAのスループットを向上できる。これによって、ストレージシステムを高性能化できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0011】
【
図1】実施例1のストレージシステムの構成の一例を示す図である。
【
図2】実施例1のストレージシステムにおける制御データの転送方法を説明する図である。
【
図3】実施例1のライトリクエストのフォーマットの一例を示す図である。
【
図4】実施例1のライトリクエストのフォーマットの一例を示す図である。
【
図5】実施例1の制御データの転送元のストレージコントローラが実行する処理の一例を説明するフローチャートである。
【
図6】実施例1の制御データの転送先のストレージコントローラが実行する処理の一例を説明するフローチャートである。
【
図7】実施例2のストレージシステムの構成の一例を示す図である。
【
図8】実施例2のストレージシステムにおける制御データの転送方法を説明する図である。
【
図9】実施例2の制御データの転送元のストレージノードが実行する処理の一例を説明するフローチャートである。
【
図10】実施例3のストレージシステムの構成の一例を示す。
【
図11】実施例3のストレージノードのハードウェア構成の一例を示す図である。
【
図12】実施例3のエッジインターフェースのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【0012】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施例の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0013】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【0014】
本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【実施例0015】
図1は、実施例1のストレージシステムの構成の一例を示す図である。
【0016】
実施例1のストレージシステム101は、ストレージコントローラ111に、ストレージコントローラ111間で送受信される制御データを処理する受信処理用DMA126を搭載することを特徴とする。以下、詳細な構成について説明する。
【0017】
ホスト102は、ユーザ操作、又はアプリケーションソフトウェアなどの動作に基づいて、ストレージシステム101に、データのリードコマンド及びライトコマンドを送信するコンピュータ装置である。なお。ホスト102は、仮想マシンのような仮想的なコンピュータ装置であってもよい。
【0018】
図1では、一つのストレージコントローラ111に対して一つのホスト102が接続されているが、一つのストレージコントローラ111に複数のホスト102が接続されていてもよい。
【0019】
ストレージシステム101は、二つのストレージコントローラ111及びドライブボックス112を有する。
【0020】
ストレージシステム101は、二つのストレージコントローラ111を搭載したデュアルコントローラ構成をとる。デュアルコントローラ構成のストレージシステム101では、ストレージコントローラ111間で、主にユーザデータ及び制御データの転送が発生する。ユーザデータは、ホスト102からストレージシステム101に書き込まれたデータであり、データ保護を目的とした二重化等により、ストレージコントローラ111間で転送される。制御データは、ストレージシステム101の内部動作を制御するためのデータであり、約64B程度の短転送長のデータである。
【0021】
ドライブボックス112は、例えばハードディスク及びSSD(Solid State Drive)などの、一種類以上の大容量不揮発性記憶装置を収容する。ドライブボックス112は、ホスト102から送信されるライトコマンド及びリードコマンドに応じてデータを読み書きするための物理的な記憶領域を提供する。
【0022】
ストレージコントローラ111は、フロントエンドインターフェース(FE IF)121、プロセッサ(MP)122、メモリ123、バックエンドインターフェース(BE IF)124、NIC125、及び受信処理用DMA126を有する。
【0023】
FE IF121は、ホスト102及びストレージシステム101を接続する。FE IF121は、ホスト102及びストレージコントローラ111の間のデータ転送プロトコルと、ストレージコントローラ111内のデータ転送プロトコルとの変換を行う。
【0024】
ホスト102及びFE IF121は、ファイバチャネルケーブル及びイーサネットケーブル等の伝送線を介して接続される。なお、ホスト102及びFE IF121は、複数の伝送線及び複数のスイッチから構成されるストレージエリアネットワークを介して接続されてもよい。
【0025】
BE IF124は、ストレージコントローラ111及びドライブボックス112を接続する。BE IF124は、ストレージコントローラ111内のデータ転送プロトコルと、ストレージコントローラ111及びドライブボックス112の間のデータ転送プロトコルとの変換を行う。
【0026】
なお、ドライブボックス112に収容される記憶装置がPCIe接続のNVMeSSDである場合、BE IF124は、プロトコル変換を行わないPCIeスイッチである。
【0027】
MP122は、FE IF121を介して接続されるホスト102と、BE IF124を介して接続されるドライブボックス112との間のデータ転送を制御する。さらに、MP122は、ストレージコントローラ111間のデータ転送を制御する。
【0028】
メモリ123は、MP122が使用する主記憶装置であり、MP122が実行するプログラム(例えば、ストレージ制御プログラム等)、及びMP122が参照する管理テーブル等の情報を格納する。
【0029】
また、メモリ123は、ストレージコントローラ111のキャッシュメモリとしても使用される。メモリ123は、他のストレージコントローラ111に送信する制御データを一時的に蓄積するための制御データ格納領域131を含む。
【0030】
また、メモリ123は、ユーザデータを格納する領域と、制御データを格納する領域とが分かれており、他のストレージコントローラ111に送信するデータがユーザデータ又は制御データのいずれであるかは、送信先アドレスによって判別できる。
【0031】
NIC125は、例えばイーサネット規格で、RDMAが可能なインターフェースを有し、各ストレージコントローラ111のMP122間を接続する。NIC125は、PCIeバスを介して自ストレージコントローラ111のMP122と接続する。
【0032】
RDMAとは、転送元のノードのメモリから転送先のノードのメモリへデータを転送することである。イーサネット上でRDMAが可能なプロトコルとしてはRoCEが知られている。
【0033】
受信処理用DMA126は、制御データの受信に関する処理を行う。受信処理用DMA126は、内部にバッファメモリ132を有し、受信した制御データがメモリ123に書き込むまでの間、制御データをバッファメモリ132に一時的に蓄積する。受信処理用DMA126は、PCIeバスを介してMP122と接続する。受信処理用DMA126の詳細な役割や動作については後述する。
【0034】
次に、
図2を用いて、ストレージコントローラ111間の制御データの転送方法について説明する。
図2は、実施例1のストレージシステム101における制御データの転送方法を説明する図である。
【0035】
ストレージコントローラ111間の制御データの転送方法は二種類存在する。
【0036】
(転送方法1)MP122が、制御データの転送先アドレスに、転送先のストレージコントローラのメモリ123を直接指定して転送先のストレージコントローラ111にライトリクエストを発行する。
【0037】
(転送方法2)MP122が、転送先のストレージコントローラ111の受信処理用DMA126に対して、複数の制御データを含むライトリクエストを発行する。
【0038】
図2には、(転送方法2)の制御フローを示す。ここでは、一例として、ストレージコントローラ111-1からストレージコントローラ111-2へ制御データを転送する場合の制御フローを示す。
【0039】
ストレージコントローラ111-1で制御データの転送リクエストが発生した場合、MP122-1は、転送対象の制御データをメモリ123-1の制御データ格納領域131-1に格納する(フロー201)。MP122-1は、複数の制御データを含むライトリクエストを送信するように制御を行う。
【0040】
NIC125-1は、制御データ格納領域131-1に格納されている複数の制御データを読み出す(フロー202)。NIC125-1は、読み出した制御データをNIC125-2に送信する(フロー203)。
【0041】
NIC125-2は、NIC125-1から受信した複数の制御データを受信処理用DMA126-2のバッファメモリ132-2に転送する(フロー204)。
【0042】
受信処理用DMA126-2は、受信した複数の制御データをメモリ123-2に書き込む(フロー205)。
【0043】
ここでは、NIC125がデータ転送に使用するプロトコルの一例として、RoCEを想定し、
図3及び
図4を用いて実施例1のライトリクエストのフォーマットを説明する。
【0044】
図3及び
図4は、実施例1のライトリクエストのフォーマットの一例を示す図である。
【0045】
図3及び
図4には、RoCEのライトリクエストのトランスポート層のパケットのフォーマットを示している。なお、RoCEのトランスポート層のパケットのフォーマットであるため、IPヘッダ等、トランスポート層より下位の層で使用されるヘッダは省略されている。
【0046】
パケット301は、Base Transport Header(BTH)311、RDMA Extended Transport Header(RETH)312、Payload313、及びICRC314を含む。転送方法1の制御データの転送処理ではパケット301が用いられる。
【0047】
パケット401は、パケット301と同様に、BTH311、RETH312、Payload411、及びICRC314を含む。転送方法2の制御データの転送処理ではパケット401が用いられる。
【0048】
RETH312は、Payload313又はPayload411に格納されるデータの書き込み先のメモリアドレスの情報を格納する。
【0049】
Payload313は、実際に送信するライトデータを格納する。Payload411は、複数の制御データを格納する。具体的には、Payload411は、一つの制御データに対して、制御データの転送長及び書き込み先のアドレスが付加された制御データ転送指示421を複数含む。ここで、複数の制御データ転送指示421を連結させたものを制御データ転送リストと記載する。制御データ転送指示421は処理順に連結されている。
【0050】
制御データ転送指示421は、書き込み先アドレス431、制御データ長432、及び制御データ433を含む。書き込み先アドレス431、制御データ長432、及び制御データ433の順に値が読み出されるように各領域は整列している。
【0051】
書き込み先アドレス431は、制御データを書き込むメモリ123のアドレスを格納する。書き込み先アドレス431に格納される値は固定長(例えば、8Byte程度)である。
【0052】
制御データ長432は、制御データ433に格納される制御データの長さを格納する。制御データ長432に格納される値は固定長(例えば、2Byte程度)である。
【0053】
制御データ433は、制御データを格納する。制御データ433には様々な長さの制御データを格納できる。
【0054】
このように、書き込み先アドレス431及び制御データ長432には固定長の値が格納され、制御データ433に任意の長さの制御データが格納される。受信処理用DMA126は、制御データ転送指示421の先頭から順番に各値を読み出すことによって、メモリ123への制御データの書き込みが可能となる。
【0055】
パケット301及びパケット401の違いは、Payloadに含まれる制御データの数と、RETH312で指定する送信先のアドレスである。パケット301のPayload313には一つの制御データのみが格納され、パケット401のPayload411には、複数の制御データ転送指示421が格納される。また、パケット301のRETH312には転送先のストレージコントローラ111のメモリ123のアドレスが格納され、パケット401のRETH312には、転送先のストレージコントローラ111の受信処理用DMA126のバッファメモリ132のアドレスが格納される。
【0056】
受信処理用DMA126は、パケット401を受信した場合、Payload411に格納される各制御データ転送指示421に含まれる制御データをメモリ123に書き込む。
【0057】
次に、
図5及び
図6を用いて、制御データの転送処理におけるストレージコントローラ111の動作手順を説明する。
【0058】
図5は、実施例1の制御データの転送元のストレージコントローラ111が実行する処理の一例を説明するフローチャートである。
【0059】
ストレージコントローラ111は、制御データの転送リクエストが発生した場合、以下で説明する処理を実行する。
【0060】
MP122は、制御データ格納領域131に未送信の制御データ転送指示421が存在するか否か、又は複数の制御データを一括送信する必要があるか否かを判定する(ステップS501)。
【0061】
例えば、MP122は、ストレージコントローラ111間のネットワークの利用率を確認し、利用率が高い場合、複数の制御データを一括送信する必要があると判定する。なお、MP122は、利用率が閾値より大きい場合、利用率が高いと判定するものとする。
【0062】
制御データ格納領域131に未送信の制御データ転送指示421が存在せず、かつ複数の制御データを一括送信する必要がない場合、MP122は、一つの制御データを転送するためのパケット301をライトリクエストとして生成し、NIC125にライトリクエストの転送を指示する(ステップS505)。その後、MP122は処理を終了する。
【0063】
パケット301のRETH312には、転送先のストレージコントローラ111のメモリ123のアドレスが格納される。
【0064】
ネットワークの利用率が低い場合、すなわち、ストレージコントローラ111間の帯域に余裕がある場合、スループットを向上させる必要がない。したがって、ストレージコントローラ111は、制御データを蓄積することなく、他のストレージコントローラ111に制御データを転送する。この場合、転送先のストレージコントローラ111は、受信した制御データをメモリ123に書き込む。これによって、制御データ転送のレイテンシを改善できる。
【0065】
制御データ格納領域131に未送信の制御データ転送指示421が存在する、又は複数の制御データを一括送信する必要がある場合、MP122は、制御データ転送指示421を生成し、制御データ格納領域131に格納する(ステップS502)。このとき、MP122は、制御データ転送リストの最後に制御データ転送指示421を連結する。
【0066】
MP122は、制御データ転送リストのデータ長が閾値以上であるか否かを判定する(ステップS503)。
【0067】
制御データ転送リストのデータ長が閾値より小さい場合、MP122は処理を終了する。このように、MP122は、制御データ転送リストのデータ長が閾値以上となるまで制御データの転送を行わない。なお、制御データ転送リストの転送に所定の待ち時間を設け、ステップS503において制御データ転送リストのデータ長が閾値に達していなくても、所定時間を超過した場合に制御データ転送リストを転送する実装であってもよい。
【0068】
制御データ転送リストのデータ長が閾値以上である場合、MP122は、複数の制御データを転送するためのパケット401をライトリクエストとして生成し、NIC125にライトリクエストの転送を指示する(ステップS504)。その後、MP122は処理を終了する。
【0069】
パケット401のRETH312には、転送先のストレージコントローラ111の受信処理用DMA126のバッファメモリ132のアドレスが格納される。
【0070】
図6は、実施例1の制御データの転送先のストレージコントローラ111が実行する処理の一例を説明するフローチャートである。ここでは、NIC125からパケット401を受信した受信処理用DMA126が実行する処理を説明する。受信処理用DMA126は、バッファメモリ132にパケット401が転送された場合、以下で説明する処理を開始する。
【0071】
受信処理用DMA126は、パケット401のPayload411に格納される制御データ転送リストから未処理の制御データ転送指示421を一つ選択する(ステップS601)。
【0072】
具体的には、受信処理用DMA126は、Payload411に格納される制御データ転送リストの先頭から順に制御データ転送指示421を選択する。このとき、受信処理用DMA126は、選択した制御データ転送指示421の先頭のアドレス(先頭アドレス)にポインタを設定する。
【0073】
受信処理用DMA126は、選択した制御データ転送指示421の書き込み先アドレス431の値を読み出す(ステップS602)。
【0074】
具体的には、書き込み先アドレス431は固定長であるため、受信処理用DMA126は、先頭アドレスから当該アドレスに固定長を加算したアドレス(第1アドレス)の範囲の値を読み出す。このとき、受信処理用DMA126は、第1アドレスにポインタを設定する。
【0075】
受信処理用DMA126は、選択した制御データ転送指示421の制御データ長432の値を読み出す(ステップS603)。
【0076】
具体的には、制御データ長432は固定長であるため、受信処理用DMA126は、第1アドレスから当該アドレスに固定長を加算したアドレス(第2アドレス)の範囲の値を読み出す。このとき、受信処理用DMA126は、第2アドレスにポインタを設定する。
【0077】
受信処理用DMA126は、選択した制御データ転送指示421の制御データ433の値を読み出す(ステップS604)。
【0078】
具体的には、受信処理用DMA126は、第2アドレスから第2アドレスにステップS603において取得したデータ長を加算したアドレス(第3アドレス)の範囲の値を読み出す。このとき、受信処理用DMA126は、第3アドレスにポインタを設定する。
【0079】
受信処理用DMA126は、メモリ123に制御データを書き込む(ステップS605)。
【0080】
具体的には、受信処理用DMA126は、ステップS602において読み出したアドレスに、ステップS604において読み出した制御データを書き込む。
【0081】
ステップS606では、受信処理用DMA126は、Payload411に格納される全ての制御データ転送指示421の処理が完了しているか否かを判定する(ステップS606)。
【0082】
全ての制御データ転送指示421の処理が完了していない場合、受信処理用DMA126は、ステップS601に戻り、同様の処理を実行する。全ての制御データ転送指示421の処理が完了した場合、受信処理用DMA126は処理を終了する。
【0083】
以上で説明したように、実施例1のストレージシステム101は、ストレージコントローラ111間の制御データの転送効率を向上させ、また、ストレージシステム101のスループットを向上させることができる。
実施例2では、SDS(Software Defined Storage)技術を用いて構築されたストレージシステムにおける制御データの転送方法について説明する。ここで、SDSとは、汎用サーバ上で専用のソフトウェアを動作させることにより、汎用サーバ上の計算資源を使用してストレージノードを構成する手法である。
ホスト702は、ユーザ操作、又はアプリケーションソフトウェアなどの動作に基づいて、スイッチ703を介してストレージノード704に、データのリードコマンド及びライトコマンドを送信するコンピュータ装置である。なお。ホスト702は、仮想マシンのような仮想的なコンピュータ装置でもよい。
スイッチ703は、複数のホスト702同士、複数のストレージノード704同士、及び複数のホスト702と複数のストレージノード704とを接続する。スイッチ703は、例えばイーサネット規格によりネットワークを構成している。
ストレージノード704は、例えばホスト702に対してデータを読み書きするための記憶領域を提供する物理サーバであり、NIC711、MP712、メモリ713、受信処理用DMA714、及びドライブ715を有する。
NIC711は、例えばイーサネット規格で、RDMAが可能なインターフェースを有し、ストレージノード704及びスイッチ703を接続する。NIC711は、PCIeバスを介してMP712と接続する。
MP712は、ホスト702及びストレージノード704の間のデータ転送、ストレージノード704間のデータ転送、及びドライブ715のデータ読み書きを制御する。
メモリ713は、MP712が使用する主記憶装置であり、MP712が実行するプログラム(例えば、ストレージ制御プログラム等)、MP712が参照する管理テーブル等の情報を格納する。メモリ713は、他のストレージノード704に送信する制御データを一時的に蓄積するための制御データ格納領域(図示省略)を含む。
受信処理用DMA714は、例えば汎用サーバにオプションで付けることが可能なPCIeカードであり、実施例1と同様に、制御データの受信に関連する処理を行う。受信処理用DMA714は、制御データを一時的に格納するバッファメモリ(図示省略)を有する。受信処理用DMA714は、PCIeバスを介してMP712と接続する。
ドライブ715は、例えばハードディスク及びSSDなどの、一種類以上の大容量不揮発性記憶装置から構成される。ドライブ715は、ホスト702から発行されるライトコマンド及びリードコマンドに応じてデータを読み書きするための物理的な記憶領域を提供する。
実施例2のストレージシステム701では、ストレージノード704の間でユーザデータ及び制御データの転送が発生する。実施例2の制御データの転送方法は、転送方法1及び転送方法2と同様の転送方法が存在する。
ストレージノード704-1で制御データの転送リクエストが発生した場合、MP712-1は、転送対象の制御データをメモリ713-1の制御データ格納領域に格納する(フロー801)。MP712-1は、複数の制御データを含むライトリクエストを送信するように制御を行う。
NIC711-1は、制御データ格納領域に格納される複数の制御データを読み出す(フロー802)。NIC711-1は、読み出した制御データを、スイッチ703を介してストレージノード704-2のNIC711-2に送信する(フロー803)。
ストレージノード704間の制御データの転送にはパケット401が用いられる。受信処理用DMA714は、実施例1と同様に、パケット401を受信した場合、Payload411から制御データを読み出し、メモリ713に書き込む。
MP712は、制御データ格納領域に未送信の制御データ転送指示421が存在するか否か、又は複数の制御データを一括送信する必要があるか否かを判定する(ステップS901)。
制御データ格納領域に未送信の制御データ転送指示421が存在せず、かつ複数の制御データを一括送信する必要がない場合、MP712は、一つの制御データを転送するためのパケット301をライトリクエストとして生成し、NIC711にライトリクエストの転送を指示する(ステップS905)。その後、MP712は処理を終了する。
ネットワークの利用率が低い場合、すなわち、ストレージノード704間の帯域に余裕がある場合、スループットを向上させる必要がない。したがって、ストレージノード704は、制御データを蓄積することなく、他のストレージノード704に制御データを転送する。この場合、転送先のストレージノード704は、受信した制御データをメモリ713に書き込む。これによって、制御データ転送のレイテンシを改善できる。
制御データ格納領域に未送信の制御データ転送指示421が存在する、又は複数の制御データを一括送信する必要がある場合、MP712は、制御データ転送指示421を生成し、制御データ格納領域に格納する(ステップS902)。このとき、MP712は、制御データ転送リストの最後に制御データ転送指示421を連結する。
制御データ転送リストのデータ長が閾値より小さい場合、MP712は処理を終了する。このように、MP712は、制御データ転送リストのデータ長が閾値以上となるまで制御データの転送を行わない。なお、制御データ転送リストの転送に所定の待ち時間を設け、ステップS903において制御データ転送リストのデータ長が閾値に達していなくても、所定時間を超過した場合に制御データ転送リストを転送する実装であってもよい。
制御データ転送リストのデータ長が閾値以上である場合、MP712は、複数の制御データを転送するためのパケット401をライトリクエストとして生成し、NIC125にライトリクエストの転送を指示する(ステップS904)。その後、MP712は処理を終了する。