IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日立ヴァンタラ株式会社の特許一覧

特開2024-172314ストレージシステム及びデータの転送方法
<>
  • 特開-ストレージシステム及びデータの転送方法 図1
  • 特開-ストレージシステム及びデータの転送方法 図2
  • 特開-ストレージシステム及びデータの転送方法 図3
  • 特開-ストレージシステム及びデータの転送方法 図4
  • 特開-ストレージシステム及びデータの転送方法 図5
  • 特開-ストレージシステム及びデータの転送方法 図6
  • 特開-ストレージシステム及びデータの転送方法 図7
  • 特開-ストレージシステム及びデータの転送方法 図8
  • 特開-ストレージシステム及びデータの転送方法 図9
  • 特開-ストレージシステム及びデータの転送方法 図10
  • 特開-ストレージシステム及びデータの転送方法 図11
  • 特開-ストレージシステム及びデータの転送方法 図12
< >
(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のスループットを向上させることができる。
【実施例0084】
実施例2では、SDS(Software Defined Storage)技術を用いて構築されたストレージシステムにおける制御データの転送方法について説明する。ここで、SDSとは、汎用サーバ上で専用のソフトウェアを動作させることにより、汎用サーバ上の計算資源を使用してストレージノードを構成する手法である。
【0085】
図7は、実施例2のストレージシステムの構成の一例を示す図である。
【0086】
ストレージシステム701は、スイッチ703を介して接続された複数のストレージノード704から構成される。図7では、ストレージシステム701のスイッチ703の数は一つであるが、複数でもよい。
【0087】
ホスト702は、ユーザ操作、又はアプリケーションソフトウェアなどの動作に基づいて、スイッチ703を介してストレージノード704に、データのリードコマンド及びライトコマンドを送信するコンピュータ装置である。なお。ホスト702は、仮想マシンのような仮想的なコンピュータ装置でもよい。
【0088】
スイッチ703は、複数のホスト702同士、複数のストレージノード704同士、及び複数のホスト702と複数のストレージノード704とを接続する。スイッチ703は、例えばイーサネット規格によりネットワークを構成している。
【0089】
ストレージノード704は、例えばホスト702に対してデータを読み書きするための記憶領域を提供する物理サーバであり、NIC711、MP712、メモリ713、受信処理用DMA714、及びドライブ715を有する。
【0090】
NIC711は、例えばイーサネット規格で、RDMAが可能なインターフェースを有し、ストレージノード704及びスイッチ703を接続する。NIC711は、PCIeバスを介してMP712と接続する。
【0091】
MP712は、ホスト702及びストレージノード704の間のデータ転送、ストレージノード704間のデータ転送、及びドライブ715のデータ読み書きを制御する。
【0092】
メモリ713は、MP712が使用する主記憶装置であり、MP712が実行するプログラム(例えば、ストレージ制御プログラム等)、MP712が参照する管理テーブル等の情報を格納する。メモリ713は、他のストレージノード704に送信する制御データを一時的に蓄積するための制御データ格納領域(図示省略)を含む。
【0093】
受信処理用DMA714は、例えば汎用サーバにオプションで付けることが可能なPCIeカードであり、実施例1と同様に、制御データの受信に関連する処理を行う。受信処理用DMA714は、制御データを一時的に格納するバッファメモリ(図示省略)を有する。受信処理用DMA714は、PCIeバスを介してMP712と接続する。
【0094】
ドライブ715は、例えばハードディスク及びSSDなどの、一種類以上の大容量不揮発性記憶装置から構成される。ドライブ715は、ホスト702から発行されるライトコマンド及びリードコマンドに応じてデータを読み書きするための物理的な記憶領域を提供する。
【0095】
図8は、実施例2のストレージシステム701における制御データの転送方法を説明する図である。
【0096】
実施例2のストレージシステム701では、ストレージノード704の間でユーザデータ及び制御データの転送が発生する。実施例2の制御データの転送方法は、転送方法1及び転送方法2と同様の転送方法が存在する。
【0097】
図8には、(転送方法2)に対応する制御フローを示す。ここでは、一例として、ストレージノード704-1からストレージノード704-2へ制御データを転送する場合の制御フローを示す。
【0098】
ストレージノード704-1で制御データの転送リクエストが発生した場合、MP712-1は、転送対象の制御データをメモリ713-1の制御データ格納領域に格納する(フロー801)。MP712-1は、複数の制御データを含むライトリクエストを送信するように制御を行う。
【0099】
NIC711-1は、制御データ格納領域に格納される複数の制御データを読み出す(フロー802)。NIC711-1は、読み出した制御データを、スイッチ703を介してストレージノード704-2のNIC711-2に送信する(フロー803)。
【0100】
NIC711-2は、NIC711-1から受信した複数の制御データを受信処理用DMA714-2のバッファメモリに転送する(フロー804)。
【0101】
受信処理用DMA714-2は、受信した複数の制御データをメモリ713-2に書き込む(フロー805)。
【0102】
ストレージノード704間の制御データの転送にはパケット401が用いられる。受信処理用DMA714は、実施例1と同様に、パケット401を受信した場合、Payload411から制御データを読み出し、メモリ713に書き込む。
【0103】
受信処理用DMA714が、NIC711から受信したパケット401を処理する方法は、実施例1と同様(図6)であるため説明を省略する。
【0104】
図9は、実施例2の制御データの転送元のストレージノード704が実行する処理の一例を説明するフローチャートである。
【0105】
ストレージノード704は、制御データの転送リクエストが発生した場合、以下で説明する処理を実行する。
【0106】
MP712は、制御データ格納領域に未送信の制御データ転送指示421が存在するか否か、又は複数の制御データを一括送信する必要があるか否かを判定する(ステップS901)。
【0107】
例えば、MP712は、ストレージノード704間のネットワークの利用率を確認し、利用率が高い場合、複数の制御データを一括送信する必要があると判定する。
【0108】
制御データ格納領域に未送信の制御データ転送指示421が存在せず、かつ複数の制御データを一括送信する必要がない場合、MP712は、一つの制御データを転送するためのパケット301をライトリクエストとして生成し、NIC711にライトリクエストの転送を指示する(ステップS905)。その後、MP712は処理を終了する。
【0109】
パケット301のRETH312には、転送先のストレージノード704のメモリ713のアドレスが格納される。
【0110】
ネットワークの利用率が低い場合、すなわち、ストレージノード704間の帯域に余裕がある場合、スループットを向上させる必要がない。したがって、ストレージノード704は、制御データを蓄積することなく、他のストレージノード704に制御データを転送する。この場合、転送先のストレージノード704は、受信した制御データをメモリ713に書き込む。これによって、制御データ転送のレイテンシを改善できる。
【0111】
制御データ格納領域に未送信の制御データ転送指示421が存在する、又は複数の制御データを一括送信する必要がある場合、MP712は、制御データ転送指示421を生成し、制御データ格納領域に格納する(ステップS902)。このとき、MP712は、制御データ転送リストの最後に制御データ転送指示421を連結する。
【0112】
MP712は、制御データ転送リストのデータ長が閾値以上であるか否かを判定する(ステップS903)。
【0113】
制御データ転送リストのデータ長が閾値より小さい場合、MP712は処理を終了する。このように、MP712は、制御データ転送リストのデータ長が閾値以上となるまで制御データの転送を行わない。なお、制御データ転送リストの転送に所定の待ち時間を設け、ステップS903において制御データ転送リストのデータ長が閾値に達していなくても、所定時間を超過した場合に制御データ転送リストを転送する実装であってもよい。
【0114】
制御データ転送リストのデータ長が閾値以上である場合、MP712は、複数の制御データを転送するためのパケット401をライトリクエストとして生成し、NIC125にライトリクエストの転送を指示する(ステップS904)。その後、MP712は処理を終了する。
【0115】
パケット401のRETH312には、転送先のストレージノード704の受信処理用DMA714のバッファメモリのアドレスが格納される。
【0116】
実施例2によれば、実施例1と同様に、ストレージノード704間の制御データの転送効率を向上させ、ストレージシステムのスループットを向上させることができる。
【実施例0117】
実施例3では、デュアルコントローラ構成のストレージノードを複数接続したクラスタ構成のストレージシステムにおける制御データの転送方法について説明する。
【0118】
以下の説明及び図面において、複数のストレージノードを接続したストレージシステムの内部ネットワークを内部ネットワークと呼ぶ。
【0119】
図10は、実施例3のストレージシステムの構成の一例を示す。
【0120】
ストレージシステム1001は、複数のストレージノード1012から構成される。各ストレージノード1012は、イーサネット規格のスイッチ1011及びリンクを用いて構築された内部ネットワークを介して互いに接続される。なお、内部ネットワークを構成するスイッチ1011の数に限定されない。
【0121】
図10では、N個のストレージノード1012を有するストレージシステム1001を示している。ここで、Nは2以上の整数である。なお、本発明は、ストレージシステム1001に含まれるストレージノード1012の数に限定されない。
【0122】
ストレージノード1012は、二つのストレージコントローラ1021を有する。なお、ストレージノード1012が有するストレージコントローラ1021の数は任意である。
【0123】
ストレージコントローラ1021は、スイッチ1011と接続するためのエッジインターフェース(EIF)1126及びホスト1002と接続するためのFE IF1121を有する。EIF1126の詳細は図12を用いて後述する。ストレージコントローラ1021のその他の構成要素については図11を用いて後述する。ストレージノード1012には、異なる構成のストレージコントローラ1021が混在してもよい。
【0124】
ホスト1002は、ユーザ操作、又はアプリケーションソフトウェアなどの動作に基づいて、ストレージシステム1001に、データのリードコマンド及びライトコマンドを送信するコンピュータ装置である。図10では、ホスト1002はストレージコントローラ1021に対して一つずつ接続されているが、一つに限定されるものではなく、各ストレージコントローラ1021に複数接続されていてもよい。なお、ホスト1002は、仮想マシンのような仮想的なコンピュータ装置であってもよい。
【0125】
図11は、実施例3のストレージノード1012のハードウェア構成の一例を示す図である。
【0126】
ストレージノード1012-1は、二つのストレージコントローラ1021、及び複数の記憶装置を収容するドライブボックス1112を有する。ドライブボックス1112は、ドライブボックス112と同一のものである。
【0127】
ストレージコントローラ1021は、FE IF1121、MP1122、メモリ1123、BE IF1124、NIC1125、及びEIF1126を有する。
【0128】
FE IF1121、MP1122、メモリ1123、BE IF1124、及びNIC1125は、FE IF121、MP122、メモリ123、BE IF124、NIC125と同一のものである。ただし、実施例3のメモリ1123は、制御データ格納領域131を含まない。
【0129】
図12は、実施例3のEIF1126のハードウェア構成の一例を示す図である。
【0130】
EIF1126は、イーサネットポート1201、内部ネットワークプロトコル処理回路1202、受信処理用DMA回路1203、バッファメモリ1204、及びPCIeポート1205を有する。各ハードウェア要素は内部バス1206を介して接続される。
【0131】
イーサネットポート1201は、内部ネットワークを構築するスイッチ1011と接続する。本実施例では、内部ネットワークをRoCEとしているが、RoCEに限定されない。例えば、内部ネットワークはInfinibandで構成されていてもよい。
【0132】
内部ネットワークプロトコル処理回路1202は、ストレージシステム1001を構成する内部ネットワークプロトコルを処理するための回路である。
【0133】
受信処理用DMA回路1203は、実施例1の受信処理用DMA126と同様の処理を実行する回路である。ストレージコントローラ1021は、スイッチ1211を介して相互接続された内部ネットワークで、パケット401を用いて複数の制御データを一度に転送することができる。
【0134】
バッファメモリ1204は、受信処理用DMA回路1203が受信した制御データを一時的に格納する。
【0135】
PCIeポート1205は、EIF1126とMP1122とを接続する。
【0136】
ストレージコントローラ1021は、他系ストレージノード1012から受信したパケット401を、EIF1126内部の受信処理用DMA回路1203に転送する。受信処理用DMA回路1203は、パケット401を受け取り、実施例1の受信処理用DMA126と同様の処理(図6)を実行する。
【0137】
また、MP1122は、他系ストレージノード1012へ複数の制御データを転送するためにパケット401を生成する。MP1122は、図5又は図9で説明した方法を用いてパケット401を生成する。
【0138】
実施例3によれば、ストレージノード1012間の制御データの転送効率を向上させ、ストレージシステム1001のスループットを向上させることができる。
【0139】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【0140】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD-ROM、DVD-ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD-R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0141】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Python、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
【0142】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD-RW、CD-R等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【0143】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【0144】
101、701、1001 ストレージシステム
102、702、1002 ホスト
111、1021 ストレージコントローラ
112、1112 ドライブボックス
121、1121 フロントエンドインターフェース
122、712、1122 プロセッサ
123、713、1123 メモリ
124、1124 バックエンドインターフェース
125、711、1125 NIC
126、714 受信処理用DMA
131 制御データ格納領域
132、1204 バッファメモリ
301、401 パケット
311 Base Transport Header
312 RDMA Extended Transport Header
313、411 Payload
314 ICRC
421 制御データ転送指示
431 書き込み先アドレス
432 制御データ長
433 制御データ
703、1011、1211 スイッチ
704、1012 ストレージノード
715 ドライブ
1126 エッジインターフェース
1201 イーサネットポート
1202 内部ネットワークプロトコル処理回路
1203 受信処理用DMA回路
1205 PCIeポート
1206 内部バス
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12