特表-19016911IP Force 特許公報掲載プロジェクト 2015.5.11 β版

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

▶ 株式会社日立製作所の特許一覧
再表2019-16911分散ストレージシステム及び分散ストレージ制御方法
<>
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000003
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000004
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000005
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000006
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000007
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000008
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000009
  • 再表WO2019016911-分散ストレージシステム及び分散ストレージ制御方法 図000010
< >
(19)【発行国】日本国特許庁(JP)
【公報種別】再公表特許(A1)
(11)【国際公開番号】WO/0
(43)【国際公開日】2019年1月24日
【発行日】2019年12月12日
(54)【発明の名称】分散ストレージシステム及び分散ストレージ制御方法
(51)【国際特許分類】
   G06F 3/06 20060101AFI20191115BHJP
   G06F 13/10 20060101ALI20191115BHJP
【FI】
   G06F3/06 301X
   G06F3/06 304E
   G06F3/06 540
   G06F3/06 302A
   G06F13/10 340B
   G06F3/06 305C
【審査請求】有
【予備審査請求】未請求
【全頁数】28
【出願番号】特願2019-530302(P2019-530302)
(21)【国際出願番号】PCT/0/0
(22)【国際出願日】2017年7月20日
(81)【指定国】 AP(BW,GH,GM,KE,LR,LS,MW,MZ,NA,RW,SD,SL,ST,SZ,TZ,UG,ZM,ZW),EA(AM,AZ,BY,KG,KZ,RU,TJ,TM),EP(AL,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LT,LU,LV,MC,MK,MT,NL,NO,PL,PT,RO,RS,SE,SI,SK,SM,TR),OA(BF,BJ,CF,CG,CI,CM,GA,GN,GQ,GW,KM,ML,MR,NE,SN,TD,TG),AE,AG,AL,AM,AO,AT,AU,AZ,BA,BB,BG,BH,BN,BR,BW,BY,BZ,CA,CH,CL,CN,CO,CR,CU,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,ES,FI,GB,GD,GE,GH,GM,GT,HN,HR,HU,ID,IL,IN,IR,IS,JO,JP,KE,KG,KH,KN,KP,KR,KW,KZ,LA,LC,LK,LR,LS,LU,LY,MA,MD,ME,MG,MK,MN,MW,MX,MY,MZ,NA,NG,NI,NO,NZ,OM,PA,PE,PG,PH,PL,PT,QA,RO,RS,RU,RW,SA,SC,SD,SE,SG,SK,SL,SM,ST,SV,SY,TH,TJ,TM,TN,TR,TT
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000279
【氏名又は名称】特許業務法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】田代 敦
(72)【発明者】
【氏名】伊藤 晋太郎
(72)【発明者】
【氏名】千葉 武尊
(72)【発明者】
【氏名】林 伸也
(72)【発明者】
【氏名】上條 聡
(57)【要約】
複数のノードのうちのいずれかのノードである第1ノードが、ノード毎に当該ノードのノード領域におけるストリップがライト先となるデータセットである転送対象データセットの第1ノードでの有無を管理するノード管理情報を保持する。第1ノードは、複数のノードのうちの第1ノード以外の各ノードである各第2ノードについて、
(A)当該第2ノードのノード領域における2以上のストリップがそれぞれライト先となる2以上の転送対象データセットがあることをノード管理情報を基に特定した場合、当該2以上の転送対象データセットにそれぞれ対応した2以上のノード内位置をノード管理情報を基に特定し、
(B)特定した2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信する。
【特許請求の範囲】
【請求項1】
複数のノードのうちのいずれかのノードである第1ノードで実行されるコンピュータプログラムであって、
前記複数のノードの各々は、1以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、2以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記2以上のノード領域がそれぞれ有する2以上のストリップから構成されるストライプを含み、
前記第1ノードが、ノード毎に当該ノードのノード領域におけるストリップがライト先となるデータセットである転送対象データセットの前記第1ノードでの有無を管理するノード管理情報を保持し、
前記コンピュータプログラムが、前記第1ノードに、
前記複数のノードのうちの前記第1ノード以外の各ノードである各第2ノードについて、
(A)当該第2ノードのノード領域における2以上のストリップがそれぞれライト先となる2以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該2以上の転送対象データセットにそれぞれ対応した2以上のノード内位置を前記ノード管理情報を基に特定し、
(B)前記特定した2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信する、
を実行させるコンピュータプログラム。
【請求項2】
前記第1ノードが、キャッシュメモリを有し、
前記ノード管理情報が管理する各ノード内位置は、転送対象データセットのライト先ストリップに対応したキャッシュストリップである、
請求項1記載のコンピュータプログラム。
【請求項3】
前記第1ノードに、前記各第2ノードについて、(B)において、
(b1)前記2以上の転送対象データセットをそれぞれ格納する2以上のキャッシュストリップを含む、当該第2ノードに対応した複数のキャッシュストリップをロックし、
(b2)前記ロックした複数のキャッシュストリップにおける前記2以上の転送対象データセットの前記転送用コマンドを当該第2ノードに送信する、
を実行させる請求項2記載のコンピュータプログラム。
【請求項4】
前記第1ノードに、ログストラクチャード方式で、前記第1ノードにおける前記キャッシュメモリにデータセットを書き込ませるようになっており、
(b1)において、ロック対象の前記複数のキャッシュストリップは、連続した前記2以上のキャッシュストリップである、
請求項3記載のコンピュータプログラム。
【請求項5】
前記第1ノードに、ログストラクチャード方式で、前記第1ノードにおける前記キャッシュメモリにデータセットを書き込ませるようになっており、
(b1)において、ロック対象の前記複数のキャッシュストリップは、連続しており、非連続の前記2以上のキャッシュストリップを含む、
請求項3記載のコンピュータプログラム。
【請求項6】
前記ノード管理情報が、ノード毎のサブノード管理情報を含み、
前記サブノード管理情報が管理する各ノード内位置は、当該情報に対応したノードに対応したキャッシュストリップであって、転送対象データセットのライト先ストリップに対応したキャッシュストリップであり、
各ノードについて、前記第1ノードがロック可能なキャッシュストリップの最大数は、当該ノードに対応したサブノード管理情報のサイズに依存し、
各ノードについて、サブノード管理情報のサイズは、前記第1ノードが転送可能なデータセットの総量である最大転送長に依存する、
請求項3記載のコンピュータプログラム。
【請求項7】
前記第1ノードにおいて、前記複数のノードの少なくとも1つについて、前記最大転送長は、下記のうちの少なくとも1つに基づく、
(p1)当該ノードについて目標とされるI/O処理性能、
(p2)当該ノードのネットワーク帯域、
(p3)I/O処理の多重度、及び、
(p4)前記冗長構成領域を構成する複数のノード領域を提供するノードの数、
請求項6記載のコンピュータプログラム。
【請求項8】
(p1)が採用される場合、I/O処理性能が比較的高い場合、最大転送長は比較的小さい、
(p2)が採用される場合、ネットワーク帯域が比較的小さい場合、最大転送長は比較的小さい、
(p3)が採用される場合、I/O処理の多重度が比較的大きい場合、最大転送長は比較的小さい、
(p4)が採用される場合、ノード数が比較的大きい場合、最大転送長は比較的小さい、
請求項7記載のコンピュータプログラム。
【請求項9】
前記第1ノードの稼働後、前記第1ノードにおいて、前記複数のノードの少なくとも1つについて、前記最大転送長を、前記第1ノードに、下記のうちの少なくとも1つに基づいて変更させる、
(q1)前記第1ノードの計算リソースの性能値、及び、
(q2)前記第1ノードで実行されるプログラムであって前記コンピュータプログラム以外のいずれか1以上のプログラムである1以上の外部プログラムの稼働状況、
請求項6記載のコンピュータプログラム。
【請求項10】
(q1)が採用されている場合、前記第1ノードの計算リソースの性能値に基づく帯域限界値の予測値を基に、最大転送長を変更し、
(q2)が採用されている場合、1又は複数の外部プログラムが新たに稼働することに応じて、最大転送長を比較的小さくし、1又は複数の外部プログラムが新たに停止することに応じて、最大転送長を比較的大きくする、
を、前記第1ノードに実行させる請求項7記載のコンピュータプログラム。
【請求項11】
前記第1ノードに、前記各第2ノードについて、(B)において、
(b3)前記転送対象データセットの数に従うストリップ数と同数のキャッシュストリップを当該第2ノードのキャッシュメモリからロックすることの要求であるロック要求を、前記第2ノードに送信し、
(b1)及び(b3)の完了後に、(b2)を実行する、
を実行させる請求項2記載の分散ストレージシステム。
【請求項12】
前記ノード管理情報が、ノード毎のサブノード管理情報を含み、
各ノードについて、サブノード管理情報のサイズは、前記第1ノードが転送可能なデータセットの総量である最大転送長に依存する、
請求項1記載のコンピュータプログラム。
【請求項13】
複数のノードを有し、
前記複数のノードの各々は、1以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、2以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記2以上のノード領域がそれぞれ有する2以上のストリップから構成されるストライプを含み、
前記複数のノードのうちのいずれかのノードである第1ノードが、ノード毎に当該ノードのノード領域におけるストリップがライト先となるデータセットである転送対象データセットの前記第1ノードでの有無を管理するノード管理情報を保持し、
前記第1ノードが、前記複数のノードのうちの前記第1ノード以外の各ノードである各第2ノードについて、
(A)当該第2ノードのノード領域における2以上のストリップがそれぞれライト先となる2以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該2以上の転送対象データセットにそれぞれ対応した2以上のノード内位置を前記ノード管理情報を基に特定し、
(B)前記特定した2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信する、
を分散ストレージシステム。
【請求項14】
複数のノードを有する分散ストレージシステムにおいて実行される分散ストレージ制御方法であって、
前記複数のノードの各々は、1以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、2以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記2以上のノード領域がそれぞれ有する2以上のストリップから構成されるストライプを含み、
前記第1ノードが、ノード毎に当該ノードのノード領域におけるストリップがライト先となるデータセットである転送対象データセットの前記第1ノードでの有無を管理するノード管理情報を保持し、
前記第1ノードが、前記複数のノードのうちの前記第1ノード以外の各ノードである各第2ノードについて、
(A)当該第2ノードのノード領域における2以上のストリップがそれぞれライト先となる2以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該2以上の転送対象データセットにそれぞれ対応した2以上のノード内位置を前記ノード管理情報を基に特定し、
(B)前記特定した2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信する、
分散ストレージ制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、分散ストレージシステムでの記憶制御に関する。
【背景技術】
【0002】
分散ストレージに関する技術として、例えば、特許文献1及び2に開示の技術が知られている。
【0003】
特許文献1は、例えば次のことを開示する。すなわち、SDS(Software Defined Storage)グリッドを構成する複数のサーバのうち、第1サーバが、ホストコンピュータからI/O(Input/Output)要求を受信する。第1サーバが、SDSグリッドによって管理されるすべてのデータの場所を示すローカルグリッドデータマップを基に、そのI/O要求を第2サーバが処理することを識別した場合、そのI/O要求を第2サーバに転送する。
【0004】
特許文献2は、例えば次のことを開示する。ストレージシステムに複数の記憶デバイスが接続されている。複数の記憶デバイスの各々が、複数の記憶ブロックを有する。ストレージシステムが、複数の書込み要求をバッファリングし、定義された記憶ブロックのグループに、データを書き込む。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】US2016/0173598
【特許文献2】特開2010−079928号
【発明の概要】
【発明が解決しようとする課題】
【0006】
以下の説明では、分散ストレージシステムの要素としての計算機を「ノード」と言うことがある。プロセッサやメモリや通信インターフェースデバイスといった計算リソースを有するいずれの計算機もノードになることができてよい。ノードは、物理的な計算機(例えば、汎用計算機又は物理的なストレージ装置)であってもよいし、物理的な計算機の少なくとも一部の計算リソースを基に動作する仮想的な計算機であってもよい。1つの物理的な計算機が、I/O要求を発行するホストのような仮想的な計算機と、I/O要求を受信し処理するストレージ装置のような仮想的な計算機(例えばSDS)とを実行してもよい。
【0007】
また、以下の説明では、複数のノードで冗長構成グループを形成する。冗長構成の例としては、Erasure Coding、RAIN(Redundant Array of Independent Nodes)、ノード間ミラーリング、ノードを1つのドライブとみなしたRAID(Redundant Array of Independent (or Inexpensive) Disks)などがあり、いずれでもよい。その他の方式(ノード間で冗長構成グループを構成する方式)が採用されてもよい。
【0008】
従って、以下の説明では、「冗長構成グループ」は、2以上のノードがそれぞれ提供する2以上の記憶領域で構成されデータを記憶するグループでよい。
【0009】
また、以下の説明における複数種類の記憶領域の各々の定義は、下記の通りである。
・「冗長構成領域」とは、冗長構成グループが提供する論理記憶領域である。
・「ノード領域」とは、複数のノードの各々が提供する論理記憶領域である。複数のノードがそれぞれ提供する複数のノード領域が、冗長構成領域を構成する。
・「ストリップ」とは、ノード領域の一部である。ストリップは、ユーザデータセット又はパリティを格納する。ユーザデータセットが格納されるストリップを「ユーザストリップ」と言うことができ、パリティが格納されるストリップを「パリティストリップ」と言うことができる。なお、「ユーザデータセット」は、ライト要求に従うユーザデータ(ライト対象データ)の少なくとも一部としてのユーザデータユニットの一部である。「ユーザデータユニット」は、ストライプに対応した全ユーザデータセットの集合である。「パリティ」は、ユーザデータユニットに基づき生成されるデータセットである。「データセット」とは、1つのストリップに格納されるデータであり、以下の説明では、ユーザデータセット又はパリティである。つまり、データセットとは、ストリップ単位のデータである。
・「ストライプ」とは、冗長構成領域における2以上のノード領域にそれぞれ存在する2以上のストリップ(例えば同一論理アドレスの2以上のストリップ)で構成された記憶領域である。
【0010】
分散ストレージシステム(例えば、スケールアウト型のストレージシステム)において、各ノードは、更新後のデータセットのライト先ストリップが、そのノードにおけるストリップでなければ、ノード間転送を行う、すなわち、そのライト先ストリップを有するノードに更新後のデータセットを転送する。
【0011】
ノード間転送は、ストリップ単位で行われる。このため、各ノードは、N個(Nは自然数)の更新後のデータセットにそれぞれ対応したN個のライト先ストリップが、いずれも、当該ノードに無い場合、N個のライト先ストリップの各々について、ノード間転送を行う。つまり、N回のノード間転送が行われる。ノード間転送は、通信のオーバーヘッドのため、分散ストレージシステムの性能(例えばI/O性能)を低下させる原因の1つである。
【課題を解決するための手段】
【0012】
複数のノードのうちのいずれかのノードである第1ノードが、ノード毎に当該ノードのノード領域におけるストリップがライト先となるデータセットである転送対象データセットの第1ノードでの有無を管理するノード管理情報を保持する。第1ノードは、複数のノードのうちの第1ノード以外の各ノードである各第2ノードについて、
(A)当該第2ノードのノード領域における2以上のストリップ(すなわち、2以上のストライプのうち、当該第2ノードに対応した2以上のストリップ)がそれぞれライト先となる2以上の転送対象データセットがあることをノード管理情報を基に特定した場合、当該2以上の転送対象データセットにそれぞれ対応した2以上のノード内位置をノード管理情報を基に特定し、
(B)特定した2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信する。
【発明の効果】
【0013】
分散ストレージシステムの性能低下を低減することができる。
【図面の簡単な説明】
【0014】
図1】実施形態の概要を示す。
図2】分散ストレージシステムを含むシステム全体の物理構成を示す。
図3】分散ストレージシステムを含むシステム全体の論理構成を示す。
図4】ノードの論理構成を示す。
図5】ホストライト処理の流れを示す。
図6】ログストラクチャードライトの一例を示す。
図7】非同期転送処理の流れを示す。
図8】最大転送長制御処理の流れを示す。
【発明を実施するための形態】
【0015】
以下、一実施形態を説明する。
【0016】
なお、以下の説明では、「インターフェース部」は、1以上のインターフェースを含む。1以上のインターフェースは、1以上の同種のインターフェースデバイス(例えば1以上のNIC(Network Interface Card))であってもよいし2以上の異種のインターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0017】
また、以下の説明では、「記憶部」は、メモリ部及びPDEV部のうちの少なくともメモリ部を含む。PDEV部は、1以上のPDEVを含む。メモリ部は、1以上のメモリを含む。少なくとも1つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。記憶部は、主に、プロセッサ部による処理の際に使用される。
【0018】
また、以下の説明では、「プロセッサ部」は、1以上のプロセッサを含む。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)である。プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。
【0019】
また、以下の説明では、「xxxテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部又は一部が1つのテーブルであってもよい。
【0020】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えばCPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶部(例えばメモリ)及び/又はインターフェースデバイス(例えば通信ポート)等を用いながら行うため、処理の主語が、プロセッサ(或いは、そのプロセッサを有する装置又はシステム)とされてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
【0021】
また、以下の説明では、「PDEV」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)、例えばHDD(Hard Disk Drive)又はSSD(Solid State Drive)である。
【0022】
また、複数種類の記憶領域の各々の定義は、更に、下記の通りである。
・「キャッシュストリップ」は、ストリップに対応した記憶領域であってCM(キャッシュメモリ)上の記憶領域である。なお、キャッシュストリップもストリップも一定サイズでよい。
・「キャッシュストライプ」は、ストライプに対応した記憶領域であってCM上の記憶領域である。キャッシュストライプは、そのキャッシュストライプに対応するストライプを構成する2以上のストリップにそれぞれ対応した2以上のキャッシュストリップで構成されている。キャッシュストリップ内のデータセット(ユーザデータセット又はパリティ)が、そのキャッシュストリップに対応したストリップを有するノード領域に書き込まれる。
・「キャッシュノード領域」は、ノード領域に対応した記憶領域であってCM上の記憶領域である。キャッシュノード領域は、そのキャッシュノード領域に対応するノード領域を構成する2以上のストリップにそれぞれ対応した2以上のキャッシュストリップで構成されている。
・「VOL」は、論理ボリュームの略であり、ホストに提供される論理的な記憶領域である。VOLは、実体的なVOL(RVOL)であってもよいし、仮想的なVOL(VVOL)であってもよい。「RVOL」は、そのRVOLを提供するストレージシステムが有する物理的な記憶資源(例えば、1以上のPDEV)に基づくVOLでよい。「VVOL」は、複数の仮想領域(仮想的な記憶領域)で構成されており容量仮想化技術(典型的にはThin Provisioning)に従うVOLでよい。
【0023】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号を使用し、同種の要素を区別して説明する場合は、要素のID(例えば識別番号)を使用することがある。例えば、ノードを特に区別しないで説明する場合には、「ノード101」と記載し、個々のノードを区別して説明する場合には、「ノード0」、「ノード1」のように記載することがある。また、以下の説明では、ノードn(nは0以上の整数)内の要素の名称にnを付加することで、いずれのノードの要素であるか(或いは、いずれのノードに対応する要素であるか)を区別することができる。
【0024】
図1は、実施形態の概要を示す。
【0025】
分散ストレージシステム100が、複数のノード101、例えばノード0〜4を有する。各ノード101は、ノード領域52を提供する。ノード領域0〜4が、冗長構成領域53を構成する。また、ノード領域0〜4が、ノード0〜4が提供するVOL54に関連付けられている。
【0026】
各ノード101は、CM(キャッシュメモリ)51を有する。CM51は、1以上のメモリであってもよいし、1以上のメモリの一部領域でもよい。CM51に、例えば、ライト要求に従うライト対象のユーザデータセット、リード要求に従うリード対象のユーザデータセット、パリティ、及び、他ノードからの転送用コマンドに従うデータセットが一時的に格納される。CM51の記憶容量は、典型的には、ノード領域52の記憶容量より小さい。CM51の少なくとも一部は、論理的には、マトリクス状の複数のキャッシュストリップ(以下、キャッシュストリップマトリクス)である。複数のキャッシュストリップ行は、複数のキャッシュストライプ56である(すなわち、複数のキャッシュストリップ行はそれぞれ複数のストライプに対応している)。複数のキャッシュストリップ列は、複数のキャッシュノード領域57である(すなわち、複数のキャッシュストリップ列はそれぞれ複数のノード101に対応している)。なお、CM51における領域のアドレスとストリップのアドレスとの対応関係は動的に変わる。例えば、キャッシュノード領域0において、2番目のキャッシュストリップと3番目のキャッシュストリップは連続しているが、ノード領域0において、2番目のキャッシュストリップに対応したストリップと、3番目のキャッシュストリップに対応したストリップとが連続しているとは限らない。
【0027】
各ノード101は、コントローラ60を有する。コントローラ60は、1以上のコンピュータプログラムが実行されることにより発揮される機能の一例である。コントローラ60は、データセットの入出力等を制御する。
【0028】
各ノード101において、コントローラ60が、ノード管理ビットマップ102を管理する。コントローラ60が、CM51の更新に応じて、ノード管理ビットマップ102を更新する。ノード管理ビットマップ102は、転送対象のデータセットが存在するノード内位置をノード毎に管理するノード管理情報の一例である。ノード管理ビットマップ102は、複数のノードにそれぞれ対応した複数のサブビットマップ70で構成されている。サブビットマップ70は、サブノード管理情報の一例である。複数のサブビットマップ70は、それぞれ、複数のキャッシュノード領域57に対応している。各サブビットマップ70について、2以上のビットは、そのサブビットマップ70に対応するキャッシュノード領域57を構成する2以上のキャッシュストリップにそれぞれ対応している。ビット“0”は、そのビットに対応するキャッシュストリップ内のデータセットが非転送対象であることを意味する。ビット“1”は、そのビットに対応するキャッシュストリップ内のデータセットが転送対象であることを意味する。転送対象のデータセットが格納されているキャッシュストリップを「転送対象キャッシュストリップ」と言うことができる。また、ノードnに対応するサブビットマップ70を、「サブビットマップn」と言い、ノードnに対応するキャッシュノード領域57を、「キャッシュノード領域n」と言うことができる。なお、後に詳述するように、サブビットマップ70の長さ(言い換えれば、サブビットマップを構成するビットの数)は変更可能である。サブビットマップ70の長さが、最大転送長に相当する。「最大転送長」は、転送可能なデータセットの総量でよい。また、本実施形態では、CM51には、後述のログストラクチャード方式でデータセットが書き込まれるため、各ノードについて、2以上の転送対象キャッシュストリップが連続する傾向にあることが期待できる。
【0029】
以下、説明を分かり易くするため、各ノード101の説明として、主にノード0を例に取る。すなわち、以下の説明では、ノード0が第1ノード(又は自ノード)の一例であり、ノード1〜3の各々が第2ノード(又は他ノード)の一例である。
【0030】
本実施形態によれば、ノード0が、転送対象キャッシュストリップの位置をノード毎に管理するノード管理ビットマップ102を有する。コントローラ0が、ノード管理ビットマップ0を参照することにより、キャッシュノード領域0〜3の各々について、全ての転送対象キャッシュストリップを特定できる。
【0031】
コントローラ0は、ノード1〜3の各々に、1回のノード間転送で(言い換えれば、1つの転送用コマンド(ノード間転送用のコマンド)で)、その特定した全ての転送対象キャッシュストリップにおける全ての転送対象データセットを、その特定した全ての転送対象キャッシュストリップが連続したキャッシュストリップであるか否かに関わらず、転送することができる。すなわち、ノード間転送の回数(言い換えれば、発行する転送用コマンドの数)を削減することができる。別の言い方をすれば、複数回のノード間転送を1回のノード間転送にまとめることができる。以って、分散ストレージシステム100の性能低下を低減することができる。
【0032】
具体的には、例えば、コントローラ0は、サブビットマップ1における連続した3つのビット“1”(1番目のビット〜3番目のビット)にそれぞれ対応した、キャッシュノード領域1における連続した3つのキャッシュストリップを、3つの転送対象キャッシュストリップとして特定する。コントローラ0は、連続した3つの転送対象キャッシュストリップ内の3つのデータセットD1を転送対象(ライト対象)とした1つの転送用コマンド(例えば、ノード領域1の先頭のライト先ストリップのアドレスと転送長とを指定したコマンド)をノード1に転送する。なお、「転送長」は、最大転送長以下の長さである。上述したように、転送対象キャッシュストリップが連続する傾向にあることが期待でき、以って、2以上の転送対象データセットを1つの転送コマンドで転送することが容易である。具体的には、1つの転送用コマンドで、先頭のアドレスと転送長とを指定すればよい。
【0033】
同様に、例えば、コントローラ0は、サブビットマップ2における連続した3つのビット“1”(2番目のビット〜4番目のビット)にそれぞれ対応した、キャッシュノード領域2における連続した3つのキャッシュストリップを、3つの転送対象キャッシュストリップとして特定する。コントローラ0は、連続した3つの転送対象キャッシュストリップ内の3つのデータセットD2を転送対象とした1つの転送用コマンドをノード2に転送する。
【0034】
上述したように、1つのノードに対する1つの転送用コマンドで転送対象とする2以上のデータセット(2以上のストリップをそれぞれライト先とする2以上のデータセット)は、連続した2以上のキャッシュストリップ内の2以上のデータセットに限らず、非連続の2以上のキャッシュストリップ内の2以上のデータセットでもよい。その場合、スキャッタギャザーリスト(SGL)の手法を適用すること(非転送対象のデータセットについてのアドレスを転送用コマンドで指定すること)ができる。具体的には、例えば、コントローラ0は、サブビットマップ3における非連続の2つのビット“1”(1番目のビット及び4番目のビット)にそれぞれ対応した、キャッシュノード領域3における非連続の2つのキャッシュストリップを、2つの転送対象キャッシュストリップとして特定する。コントローラ0は、非連続の2つの転送対象キャッシュストリップ内の2つのデータセットD3を転送対象とした1つの転送用コマンド(例えば、ノード領域3の先頭のライト先ストリップのアドレス及び転送長と、非ライト先ストリップの先頭アドレス及びデータ長(オフセット)とを指定したコマンド)をノード3に転送する。すなわち、転送対象キャッシュストリップが非連続のケースは、転送対象キャッシュストリップが連続のケースに比べて、1つの転送用コマンドで2以上の転送対象データセットを転送するために指定するパラメータの数が増えるが、転送対象キャッシュストリップが非連続でも、1つの転送用コマンドで2以上の転送対象データセットを転送することができる。
【0035】
また、コントローラ0は、ノード領域0に対しても、1回の書込みで(すなわち、1つのライトコマンドで)、2以上のストリップに2以上のデータセットを書き込むことができる。具体的には、例えば、コントローラ0は、サブビットマップ0における連続した2つのビット“1”(2番目のビット及び3番目のビット)にそれぞれ対応した、キャッシュノード領域0における連続した2つのキャッシュストリップを、2つのライト対象キャッシュストリップとして特定する。コントローラ0は、連続した2つのライト対象キャッシュストリップ内の2つのデータセットD0をライト対象とした1つのライトコマンドを発行する。それにより、2つのデータセットD0がノード領域0における2つのストリップに書き込まれる。
【0036】
以下、本実施形態を詳細に説明する。
【0037】
図2は、分散ストレージシステム100を含むシステム全体の物理構成を示す。
【0038】
1以上のホスト201、管理システム203及び分散ストレージシステム100が、ネットワーク240に接続される。ネットワーク240は、例えば、FC(Fibre Channel)ネットワークとIP(Internet Protocol)ネットワークとのうちの少なくとも1つを含んでよい。
【0039】
ホスト201は、ユーザデータのI/O要求を発行する。ホスト201は、物理的な計算機であってもよいし、物理的な計算機で実行される仮想的な計算機であってもよい。仮想的な計算機としてのホスト201は、ノード101において実行されてもよい。具体的には、例えば、同一のノード101において、ホスト201としての仮想的な計算機と、ホスト201からI/O要求を受信して処理するストレージ(コントローラ60)としての仮想的な計算機(例えばSDS(Software Defined Storage))とが実行されてもよい。
【0040】
管理システム203は、分散ストレージシステム100を管理する。管理システム203は、一以上の計算機(一以上の物理計算機又は仮想計算機)で構成されてよい。具体的には、例えば、管理計算機が表示デバイスを有していて管理計算機が自分の表示デバイスに情報を表示する場合、管理計算機が管理システム203でよい。また、例えば、管理計算機(例えばサーバ)が表示用情報を遠隔の表示用計算機(例えばクライアント)に送信し表示用計算機がその情報を表示する場合(管理計算機が表示用計算機に情報を表示する場合)、管理計算機と表示用計算機とのうちの少なくとも管理計算機を含んだシステムが管理システム203でよい。
【0041】
分散ストレージシステム100は、ネットワーク240に接続された複数のノード101を含む。各ノード101は、インターフェース部251、PDEV部252、メモリ部253及びそれらに接続されたプロセッサ部254を有する。例えば、インターフェース部251は、ネットワーク240に接続され、インターフェース部251経由でノード間転送が行われる。PDEV部252に基づく論理記憶領域が、ノード領域である。メモリ部253が、1以上のプログラム、及び、上述したノード管理ビットマップ102を記憶する。プロセッサ部254が、1以上のプログラムを実行する。
【0042】
図3は、分散ストレージシステム100を含むシステム全体の論理構成を示す。
【0043】
2以上のノード101がそれぞれ有する2以上のVOL(例えば、VOL A1、及び、VOL A2)が1つのVOL(例えば、VOL A)としてホスト201に提供される。ホスト201は、VOL Aを指定したI/O要求を、VOL A1を提供するノード0、又は、VOL A2を提供するノード1に送信する。
【0044】
各ノード101は、上述したようにコントローラ60を有する。コントローラ60は、データプレーン311及びコントロールプレーン312を有する。データプレーン311が、VOLを提供し、ホスト201からのI/O要求に従う処理を行う。コントロールプレーン312が、種々の制御を行う。コントロールプレーン312は、コントロールマスタ322とコントロールエージェント321とを有する。コントロールマスタ322が、管理システム203から指示を受け、その指示に従う制御コマンドを、1以上のコントロールエージェント321に送信する。コントロールエージェント321は、制御コマンドに従い制御を行う。
【0045】
各ノード101が、ノード管理ビットマップ102を基に、ノード毎に、転送対象データセットを特定し転送する。分散ストレージシステム100において、データの整合性を、例えば下記のうちのいずれかの方法で維持することができる。
・ストライプ毎に、いずれかのノード101が担当ノードとなる。ノード101は、ライト要求に対応したライト先ストライプの担当ノードが自ノードであれば、ライト対象のユーザデータをCM51に書き、当該ストライプについて、転送対象データセットを他ノードに転送する。ノード101は、ライト要求に対応したライト先ストライプの担当ノードが自ノードでなければ、担当ノード(他ノード)に、そのライト要求を転送する。
・各ノード101が、自ノードについて、ライト要求に従うデータセットが書き込まれる第1のCM部分と、受信した転送用コマンドに従うデータセットが書き込まれる第2のCM部分とを持ち、それらのCM部分のうちより新しいデータセットを格納している方を、自ノードのノード領域におけるストリップへの書込み対象として採用する。
【0046】
図4は、ノード101の論理構成を示す。
【0047】
ノード101において、データプレーン311は、フロントエンドプログラム421、コントロールプログラム422、キャッシュプログラム423、アドレス変換プログラム424、データ転送プログラム425及びバックエンドプログラム426を含む。データプレーン0が、ノード管理ビットマップ102を管理する。フロントエンドプログラム421は、I/O要求を受けたり、I/O要求の応答を返したりする。コントロールプログラム422は、受けたI/O要求の処理を実行したり、I/O要求の処理と非同期で転送処理を実行したりする。キャッシュプログラム423は、CM51を更新したり、ノード管理ビットマップ102を更新したりする。アドレス変換プログラム424は、キャッシュアドレス(CMの論理アドレス)をストリップアドレス(ストリップの論理アドレス)に変換する。データ転送プログラム425は、1以上の転送対象データセットを指定した転送用コマンドを送信したり、1以上のライト対象データセットを指定したライトコマンドを送信したりする。バックエンドプログラム426は、ライトコマンドに応答して、そのライトコマンドで指定されている1以上のライト対象データセットを1以上のストリップに書き込む。
【0048】
ノード101において、コントロールプレーン312は、CLI(Command Line Interface)プログラム431、GUI(Graphical User Interface)プログラム432、REST(REpresentational State Transfer)サーバプログラム433、コントロールエージェント321、コントロールマスタ322及び保守プログラム434を含む。CLIプログラム431は、CLI経由でホスト201のユーザから指示を受け付ける。GUIプログラム432は、GUI経由でホスト201のユーザから指示を受け付ける。RESTサーバプログラム433は、ノード101において、コントローラ60(例えばSDS)外の少なくとも1つのプログラムである外部プログラム(例えば、図示しないアプリケーションプログラム)から指示を受け付ける。RESTサーバプログラム433は、例えば、外部プログラムからの指示に従い保守プログラム434に指示を出すことができる。コントロールエージェント321は、少なくとも1つのノード101におけるコントロールマスタ322から指示を受け付ける。コントロールマスタ322は、少なくとも1つのノード101におけるコントロールエージェント321に指示を出す。保守プログラム434は、RESTサーバプログラム433から指示を受け付け、その指示に従う保守(例えば、少なくとも1つのノードに対応した最大転送長(サブビットマップの長さ)を変更すること)を行う。
【0049】
以下、本実施形態で行われる処理の一例を説明する。また、ノード0を例に取る。
【0050】
図5は、ホストライト処理の流れを示す。
【0051】
フロントエンドプログラム0が、ホスト201からユーザデータのライト要求を受信する(S501)。ライト要求は、ライト先を示す情報であるライト先情報を含む。ライト先情報は、例えば、ライト先VOLのID(例えばLUN(Logical Unit Number))と、ライト先VOLにおけるライト先の領域の論理アドレスとを含む。
【0052】
フロントエンドプログラム0が、そのライト要求をコントロールプログラム0に転送する(S502)。
【0053】
コントロールプログラム0は、そのライト要求を解析する(S503)。例えば、コントロールプログラム0は、要求がライト要求であることと、そのライト要求におけるライト先情報とを特定する。
【0054】
コントロールプログラム0は、ライト要求に従うユーザデータのキャッシュをキャッシュプログラム0に指示する(S504)。
【0055】
キャッシュプログラム0は、その指示に応答して、CM0に対してユーザデータのログストラクチャードライトを行う、すなわち、ログストラクチャード方式でCM0にユーザデータを書き込む(S505)。なお、ログストラクチャードライトは、図5に示すように、ライト要求に応答して行われる処理において行われてもよいし、ライト要求に応答して行われる処理とは非同期に行われてもよい(例えば、ユーザデータをCM0に書き込んだ後に、CM0において離散したデータセットが連続するようにログストラクチャードライトを行ってよい)。
【0056】
また、キャッシュプログラム0は、S505のCM0の更新に伴い、ノード管理ビットマップ0を更新する(S506)。例えば、新たなVOL領域(VOLにおける領域)をライト先としたユーザデータに従うデータセットがキャッシュストリップに書き込まれた場合、キャッシュプログラム0は、そのキャッシュストリップに対応したビットの値を“0”から“1”に更新する。
【0057】
キャッシュプログラム0は、S504の指示に対する応答をコントロールプログラム0に返す(S507)。コントロールプログラム0は、その応答を受けた場合、S502の要求に対する応答をフロントエンドプログラム0に返す(S508)。フロントエンドプログラム0は、その応答を受けた場合、S501のライト要求に対する完了応答をホスト201に返す(S509)。
【0058】
図6を参照して、ログストラクチャードライトの一例を説明する。
【0059】
新たなユーザデータユニットXがライト対象の場合、キャッシュプログラム0は、そのユーザデータユニットXを構成するユーザデータセットx1、x2及びx3と、それらのユーザデータセットに基づくパリティxPとを、第1のキャッシュストライプ(連続したキャッシュストリップ)に書き込む。
【0060】
次に、新たなユーザデータユニットYがライト対象の場合、キャッシュプログラム0は、そのユーザデータユニットYを構成するユーザデータセットy1、y2及びy3と、それらのユーザデータセットに基づくパリティyPとを、第1のキャッシュストライプの次のキャッシュストライプである第2のキャッシュストライプ(具体的には、第1のキャッシュストライプの終端キャッシュストリップの次のキャッシュストリップを先頭とした第2のキャッシュストライプ)に書き込む。
【0061】
次に、ユーザデータユニットXの全てを更新するためのユーザデータユニットX´がライト対象の場合、キャッシュプログラム0は、そのユーザデータユニットX´を構成するユーザデータセットx1´、x2´及びx3´と、それらのユーザデータセットに基づくパリティxP´とを、第2のキャッシュストライプの次のキャッシュストライプである第3のキャッシュストライプに書き込む。また、キャッシュプログラム0は、更新前のユーザデータユニットXを構成するユーザデータセットx1、x2及びx3をそれぞれ格納している3つのキャッシュストリップを、空き領域として管理する。更新前パリティxPが格納されているキャッシュストリップも空き領域として管理されてよい。
【0062】
このように、ログストラクチャードライトによれば、更新前データセットが格納されている領域に更新後データセットが上書きされるのではなく、更新後データセットのために新たに領域が確保され、その領域が、新たにキャッシュストリップとなる。これにより、ライト先アドレスが非連続のランダムライトが行われても、一定のアドレス長のCM0に、アドレスが連続したデータ領域(アドレスが連続した転送対象キャッシュストリップ)を得ることができる。
【0063】
なお、更新後ユーザデータセットx1´、x2´及びx3´にそれぞれ対応した3つのライト先ストリップは、更新前ユーザデータセットx1、x2及びx3にそれぞれ対応した3つのライト先ストリップと同じため、キャッシュプログラム0は、ノード管理ビットマップ0は更新しないでよい(例えば、更新前ユーザデータセットx1を格納したキャッシュストリップに対応したビットの値は“1”のままでよい)。但し、転送対象データセットが格納されているキャッシュストリップのアドレスは変更されたため、キャッシュプログラム0は、ビット“1”に対応したキャッシュアドレスを、更新前ユーザデータセット(例えばx1)を格納しているキャッシュストリップのアドレスから、更新後ユーザデータセット(例えばx1´)を格納しているキャッシュストリップのアドレスに変更してよい。
【0064】
図7は、非同期転送処理の流れを示す。非同期転送処理は、ホストライト処理と非同期に行われる転送処理であって、転送対象データを転送先ノードに転送する処理を含む処理である。
【0065】
コントロールプログラム0が、ロック取得をキャッシュプログラム0に指示する(S701)。
【0066】
キャッシュプログラム0が、その指示に応答して、次の処理を行う(S702)。
・キャッシュプログラム0は、ノード管理ビットマップ102を参照し、ノード0〜3の各々について、転送対象キャッシュストリップを特定する。以下、ノード1を例に取る。
・キャッシュプログラム0は、ノード1について、特定した全ての転送対象キャッシュストリップを含む連続したキャッシュストリップをロックできるか否かの判断であるロック判断を行う。
・ロック判断の結果が真の場合、キャッシュプログラム0は、連続したキャッシュストリップをロックする。ロックされたキャッシュストリップ内のデータセットがホストライト処理において更新されることがない。
【0067】
キャッシュプログラム0が、S701の指示に対する応答として、S702の結果を表す応答をコントロールプログラム0に返す(S703)。
【0068】
コントロールプログラム0が、ロックされた連続したキャッシュストリップのうちの各転送対象キャッシュストリップのキャッシュアドレスを特定する(S704)。コントロールプログラム0が、S704で特定したキャッシュアドレスのアドレス変換をアドレス変換プログラム0に指示する。アドレス変換プログラム0が、その指示に応答して、キャッシュアドレスに対応したストリップアドレスを特定し(S706)、特定したストリップアドレスをコントロールプログラム0に返す(S707)。
【0069】
必要に応じて(例えば、当該ストリップを含むストライプについてノード0が少なくともパリティ生成の担当の場合)、コントロールプログラム0が、更新前データセットをノード1から読み出し、パリティを生成する(S708)。
【0070】
コントロールプログラム0が、ノード1のキャッシュロックをデータ転送プログラム0に指示する(S709)。その指示では、ストリップ数及びストリップアドレス群が指定される。ストリップ数は、例えば、ノード1についてS702でロックされたキャッシュストリップの数、又は、ノード1についてS702でロックされたキャッシュストリップのうちの転送対象キャッシュストリップの数である。ストリップアドレス群は、ノード領域1内の1以上のストリップのアドレスでもよいし、ストリップアドレスと転送長との組でもよい。当該指示に応答して、データ転送プログラム0が、ロック要求をノード1に送信する(S710)。当該ロック要求でも、ストリップ数及びストリップアドレス群が指定される。つまり、当該ロック要求は、指定されたストリップ数と同数のキャッシュストリップをノード1のCMからロックすること(確保すること)の要求である。当該ロック要求に応答して、ノード1(例えばコントローラ1)が、CM1から、指定されたストリップ数と同数の領域(キャッシュストリップ)をロックし(例えば、キャッシュノード領域1からキャッシュストリップをロックし)、且つ、それらの領域に、ストリップアドレス群を関連付ける(S711)。ノード1(例えばコントローラ1)が、S710の指示に対する応答をデータ転送ログラム0に返す(S712)。データ転送プログラム0が、S709の指示に対する応答をコントロールプログラム0に返す(S713)。
【0071】
コントロールプログラム0が、データ転送をデータ転送プログラム0に指示する(S714)。
【0072】
その指示に応答して、下記が行われる。
・データ転送プログラム0が、ノード領域0に対する全転送対象データセットのライトコマンドを生成する(S715)。ライトコマンドでは、ストリップアドレス群(ノード領域0内のストリップのアドレス)が指定される。データ転送プログラム0が、そのライトコマンドの送信をバックエンドプログラム0に指示する。その指示に応答して、バックエンドプログラム0が、ノード領域0に対するライトコマンドを送信する(S716)。バックエンドプログラム0が、応答をデータ転送プログラム0に返す(S718)。
・データ転送プログラム0が、ノード1に対する全転送対象データセットの転送用コマンドを生成する(S715)。転送用コマンドでは、上記ストリップアドレス群(ノード領域1内のストリップのアドレス)が指定される。データ転送プログラム0が、転送用コマンドをノード1に転送する(S717)。ノード1(例えばコントローラ1)が、その転送用コマンドに応答して、その転送用コマンドに従う転送対象データセットを、S711でロックしたキャッシュストリップに書き込んで、応答をデータ転送プログラム0に返す(S719)。ノード1において、コントローラ1が、転送対象データセットを、キャッシュストリップからノード領域1のストリップに書き込む。
【0073】
データ転送プログラム0が、S714の指示に対する応答をコントロールプログラム0に返す(S720)。
【0074】
コントロールプログラム0が、ロック解除をキャッシュプログラム0に指示する(S721)。その指示に応答して、キャッシュプログラム0が、S702で取得したロックを解除する(S722)。キャッシュプログラム0が、S721の指示に対する応答をコントロールプログラム0に返す(S723)。
【0075】
以上が、非同期転送処理である。
【0076】
なお、非同期転送処理では、転送元ノードが転送先ノードに転送用コマンドを送信することで転送元ノードから転送先ノードへ転送対象データセットが転送されるが(プッシュ型の転送)、転送先ノードが転送元ノードへ転送要求を送信することで転送元ノードから転送先ノードへ転送対象データセットが転送されてよい(プル型の転送)。
【0077】
また、上述のロック判断(特定した全ての転送対象キャッシュストリップを含む連続したキャッシュストリップをロックできるか否かの判断)の結果が、例えば下記の場合に偽となる。
・ロック対象のキャッシュストリップのうちの少なくとも1つが既にロックされている。
・ロック対象のキャッシュストリップをロックすると、ロック割合(CMの容量に対する、ロックされているキャッシュストリップの全容量の割合)が閾値を超える。
【0078】
ロック判断の結果が偽の場合、コントローラ0は、非同期転送処理とは別の処理(例えば、別のノードに対応したキャッシュノード領域におけるキャッシュストリップに関してのロック判断)を行ってもよい。
【0079】
全てのノード101について、最大転送長(ノード管理テーブル102におけるサブビットマップ70の長さ)が同じである必要は無い。最大転送長は、例えば、下記のように設定又は変更可能である。
【0080】
図8は、最大転送長制御処理の流れを示す。最大転送長制御処理は、ノード101において実行される。以下、ノード0を例に取る。
【0081】
最大転送長を設定する設定イベントが生じた場合(S801:YES)、ノード0に最大転送長が設定される(S802)。すなわち、ノード0に、ノード0〜3の各々についてサブビットマップ70が設定される。ここで言う「設定イベント」とは、例えば、下記のうちのいずれかでよい。
・最大転送長を指定した設定指示をCLIプログラム0がホスト201から受けたこと。
・最大転送長を指定した設定指示をGUIプログラム0がホスト201から受けたこと。
・保守プログラム434が、RESTサーバプログラム0経由で外部プログラムから最大転送長を指定した設定指示を受けたこと。
・最大転送長を指定した設定指示をコントロールマスタ0が管理システム203から受けたこと。
【0082】
指定された最大転送長は、管理システム203、外部プログラム及びコントローラ0のうちのいずれによって決定されてもよい。
【0083】
最大転送長は、コントローラ0(例えばSDS)の性能値に基づく。具体的には、最大転送長は、例えば、下記のうちの少なくとも1つに基づく。なお、以下の説明において、「Kが比較的大きい(又は小さい)」とは、「或るKの値k1よりも別の或るKの値k2の方が大きい(又は小さい)」ことを意味する。また、「最大転送長は比較的小さい(又は大きい)」とは、「或るKの値k1に対応した最大転送長t1よりも別の或るKの値k2に対応した最大転送長t2の方が小さい(又は大きい)」ことを意味する。
・ノード0について目標とされるI/O処理性能(単位時間当たりに入出力されるデータの量)。例えば、I/O処理性能が比較的高い場合、最大転送長は比較的小さい。非同期転送処理がホストI/O処理の性能に与える影響を小さくするためである。なお、「I/O処理性能」とは、I/O要求(本実施形態ではホストから受信したI/O要求)の処理の性能である。「I/O」は、ライトであってもよいし、リードであってもよいし、ライト及びリードの両方であってもよい。
・ノード0に搭載されるインターフェース部のネットワーク帯域。例えば、ネットワーク帯域が比較的小さい程、最大転送長は比較的小さい。インターフェース部という物理的なハードウェアの性能を超えた転送はできないからである。
・ホストライト処理の多重度。例えば、多重度が比較的大きい場合、最大転送長は比較的小さい。多重度が大きいと非同期転送処理に使用可能なリソース量が圧迫されるからである。
・冗長構成領域53を構成するノード数。例えば、ノード数が比較的大きい場合、最大転送長は比較的小さい。ノード数が大きいと、サブビットマップの数が増え、以って、ノード管理ビットマップのサイズが大きくなる傾向にあるからである。
【0084】
稼動した後(S803)、少なくとも1つのノードについて設定済の最大転送長を変更する変更イベントが生じた場合(S804:YES)、ノード0に設定済の最大転送長が変更される(S805)、変更後の最大転送長が設定される(S806)。例えば、サブビットマップ70が長くなる又は短くなる。ここで言う「変更イベント」とは、例えば、下記のうちのいずれかでよい。
・変更後の最大転送長を指定した変更指示をCLIプログラム0がホスト201から受けたこと。
・変更後の最大転送長を指定した変更指示をGUIプログラム0がホスト201から受けたこと。
・保守プログラム434が、RESTサーバプログラム0経由で外部プログラムから変更後の最大転送長を指定した変更指示を受けたこと。
・保守プログラム434が、ノード0の負荷(例えば、計算リソース(ハードウェア)の負荷、又は、1以上の外部プログラムの稼働状況)が1以上の閾値のうちのいずれかの閾値以上となった又はいずれかの閾値未満となったことを検出した。
・変更後の最大転送長を指定した変更指示をコントロールマスタ0が管理システム203から受けたこと。
・前回のS804の判断から一定時間が経った。
・現在時刻が所定の時刻になった。
【0085】
変更後の最大転送長は、例えば、下記のうちの少なくとも1つに基づく。
・ノード0の計算リソース(ハードウェア)の性能値。例えば、コントローラ0(例えば保守プログラム0)が、ノード0の計算リソースの性能値(例えば、CM0の空き容量)に基づいて帯域の限界値を予測し(或いは、当該帯域の限界値の予測値を管理システム203のような外部から受けて)、限界値の予測値を基に、最大転送長を変更する。
・1以上の外部プログラムの稼働状況。例えば、1又は複数の外部プログラム(例えば或る外部プログラム)が新たに稼働又は停止する場合、コントローラ0(例えば、RESTサーバプログラム0)が、その1又は複数の外部プログラムの新たな稼動又は停止の通知をその1又は複数の外部プログラムの少なくとも1つから受ける、又は、コントローラ0(例えば、保守プログラム0)が、1又は複数の外部プログラムの新たな稼動又は停止の通知を管理システム203から受ける。その通知を受けたコントローラ0(例えば、RESTサーバプログラム0又は保守プログラム0)が、1又は複数の外部プログラムが新たに稼働するならば最大転送長を比較的小さくし、1又は複数の外部プログラムが新たに停止するならば最大転送長を比較的大きくする。
【0086】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【0087】
例えば、CM51に対するライトとして、必ずしもログストラクチャードライトが採用されなくてもよい。
【0088】
また、例えば、未転送の転送対象データセットの冗長性維持のため、ノード101は、その転送対象データセットをPDEV部に書き込んでおき、その転送対象データセットのノード間転送完了後にその転送対象データをPDEV部から削除してもよい。
【0089】
また、例えば、転送対象データセットは、CMからデステージされていないデータセットである「ダーティデータセット」と言うことができる。また、例えば、転送対象データセットを格納するキャッシュストリップを「ダーティキャッシュストリップ」と言うことができる。
【符号の説明】
【0090】
101…ノード
図1
図2
図3
図4
図5
図6
図7
図8

【手続補正書】
【提出日】2019年8月7日
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数のノードを有し
前記複数のノードの各々は、1以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、2以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記2以上のノード領域がそれぞれ有する2以上のストリップから構成されるストライプを含む分散ストレージシステムにおいて前記ノード間でのライト対象データの転送を行うコンピュータプログラムであって
前記コンピュータプログラムは前記複数のノードのうちのいずれかのノードである第1ノードで実行され、
前記第1ノードが、
前記複数のノードそれぞれの前記ノード領域にライトされるデータセットを記憶するキャッシュメモリと、
前記複数のノードのうち前記第1ノード以外の複数の第2ノードそれぞれの前記ノード領域におけるストリップがライト先となる、前記キャッシュメモリに記憶されたデータセットである転送対象データセットの前記第1ノードでの有無を管理するノード管理情報と、を保持し、
前記コンピュータプログラムが、前記第1ノードに、
(A)当該1つの前記第2ノードのノード領域における2以上のストリップがそれぞれライト先となる2以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該2以上の転送対象データセットのキャッシュストリップを前記ノード管理情報を基に特定し、
(B)前記特定した前記キャッシュストリップに対応する2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信する、
を実行させることで1つの転送用コマンドで2以上のライト対象データを当該第2ノードに送信するコンピュータプログラム。
【請求項2】
前記第1ノードに、前記各第2ノードについて、(B)において、
(b1)前記2以上の転送対象データセットをそれぞれ格納する2以上のキャッシュストリップを含む、当該第2ノードに対応した複数のキャッシュストリップをロックし、
(b2)前記ロックした複数のキャッシュストリップにおける前記2以上の転送対象データセットの前記転送用コマンドを当該第2ノードに送信する、
を実行させる請求項1記載のコンピュータプログラム。
【請求項3】
前記第1ノードに、ログストラクチャード方式で、前記第1ノードにおける前記キャッシュメモリにデータセットを書き込ませるようになっており、
(b1)において、ロック対象の前記複数のキャッシュストリップは、連続した前記2以上のキャッシュストリップである、
請求項2記載のコンピュータプログラム。
【請求項4】
前記第1ノードに、ログストラクチャード方式で、前記第1ノードにおける前記キャッシュメモリにデータセットを書き込ませるようになっており、
(b1)において、ロック対象の前記複数のキャッシュストリップは、連続しており、非連続の前記2以上のキャッシュストリップを含む、
請求項2記載のコンピュータプログラム。
【請求項5】
前記ノード管理情報が、ノード毎のサブノード管理情報を含み、
前記サブノード管理情報が管理する各ノード内位置は、当該情報に対応したノードに対応したキャッシュストリップであって、転送対象データセットのライト先ストリップに対応したキャッシュストリップであり、
各ノードについて、前記第1ノードがロック可能なキャッシュストリップの最大数は、当該ノードに対応したサブノード管理情報のサイズに依存し、
各ノードについて、サブノード管理情報のサイズは、前記第1ノードが転送可能なデータセットの総量である最大転送長に依存する、
請求項2記載のコンピュータプログラム。
【請求項6】
前記第1ノードにおいて、前記複数のノードの少なくとも1つについて、前記最大転送長は、下記のうちの少なくとも1つに基づく、
(p1)当該ノードについて目標とされるI/O処理性能、
(p2)当該ノードのネットワーク帯域、
(p3)I/O処理の多重度、及び、
(p4)前記冗長構成領域を構成する複数のノード領域を提供するノードの数、
請求項5記載のコンピュータプログラム。
【請求項7】
(p1)が採用される場合、I/O処理性能が比較的高い場合、最大転送長は比較的小さい、
(p2)が採用される場合、ネットワーク帯域が比較的小さい場合、最大転送長は比較的小さい、
(p3)が採用される場合、I/O処理の多重度が比較的大きい場合、最大転送長は比較的小さい、
(p4)が採用される場合、ノード数が比較的大きい場合、最大転送長は比較的小さい、
請求項6記載のコンピュータプログラム。
【請求項8】
前記第1ノードの稼働後、前記第1ノードにおいて、前記複数のノードの少なくとも1つについて、前記最大転送長を、前記第1ノードに、下記のうちの少なくとも1つに基づいて変更させる、
(q1)前記第1ノードの計算リソースの性能値、及び、
(q2)前記第1ノードで実行されるプログラムであって前記コンピュータプログラム以外のいずれか1以上のプログラムである1以上の外部プログラムの稼働状況、
請求項5記載のコンピュータプログラム。
【請求項9】
(q1)が採用されている場合、前記第1ノードの計算リソースの性能値に基づく帯域限界値の予測値を基に、最大転送長を変更し、
(q2)が採用されている場合、1又は複数の外部プログラムが新たに稼働することに応じて、最大転送長を比較的小さくし、1又は複数の外部プログラムが新たに停止することに応じて、最大転送長を比較的大きくする、
を、前記第1ノードに実行させる請求項6記載のコンピュータプログラム。
【請求項10】
前記第1ノードに、前記各第2ノードについて、(B)において、
(b3)前記転送対象データセットの数に従うストリップ数と同数のキャッシュストリップを当該第2ノードのキャッシュメモリからロックすることの要求であるロック要求を、前記第2ノードに送信し、
(b1)及び(b3)の完了後に、(b2)を実行する、
を実行させる請求項1記載コンピュータプログラム。
【請求項11】
前記ノード管理情報が、ノード毎のサブノード管理情報を含み、
各ノードについて、サブノード管理情報のサイズは、前記第1ノードが転送可能なデータセットの総量である最大転送長に依存する、
請求項1記載のコンピュータプログラム。
【請求項12】
複数のノードを有し、
前記複数のノードの各々は、1以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、2以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記2以上のノード領域がそれぞれ有する2以上のストリップから構成されるストライプを含み、前記ノード間でのライト対象データの転送を行う分散ストレージシステムにおいて、
前記複数のノードのうちのいずれかのノードである第1ノードが、
前記複数のノードの各々の前記ノード領域にライトされるデータセットを記憶するキャッシュメモリと、
前記複数のノードのうち前記第1ノード以外の複数の第2ノードそれぞれの前記ノード領域におけるストリップがライト先となる、前記キャッシュメモリに記憶されたデータセットである転送対象データセットの前記第1ノードでの有無を管理するノード管理情報と、を保持し、
前記第1ノードは、
(A)1つの前記第2ノードのノード領域における2以上のストリップがそれぞれライト先となる2以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該2以上の転送対象データセットのキャッシュストリップを前記ノード管理情報を基に特定し、
(B)前記特定した前記キャッシュストリップに対応する2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信する、
ことで1つの転送用コマンドで2以上のライト対象データを当該第2ノードに送信する分散ストレージシステム。
【請求項13】
複数のノードを有
前記複数のノードの各々は、1以上のストリップで構成された論理的な記憶領域であるノード領域を有し、
前記複数のノードは、2以上の前記ノード領域から冗長構成領域を構成し、
前記冗長構成領域は、前記2以上のノード領域がそれぞれ有する2以上のストリップから構成されるストライプを含み、前記ノード間でのライト対象データの転送を行う分散ストレージシステムの制御方法において、
前記複数のノードのうちのいずれかのノードである第1ノードが、
前記複数のノードの各々の前記ノード領域にライトされるデータセットを記憶するキャッシュメモリと、
前記複数のノードのうち前記第1ノード以外の複数の第2ノードそれぞれの前記ノード領域におけるストリップがライト先となる、前記キャッシュメモリに記憶されたデータセットである転送対象データセットの前記第1ノードでの有無を管理するノード管理情報と、を保持し、
前記第1ノードに、
(A)1つの前記第2ノードのノード領域における2以上のストリップがそれぞれライト先となる2以上の転送対象データセットがあることを前記ノード管理情報を基に特定した場合、当該2以上の転送対象データセットのキャッシュストリップを前記ノード管理情報を基に特定させ、
(B)前記特定した前記キャッシュストリップに対応する2以上のノード内位置にそれぞれ存在する2以上の転送対象データセットを転送対象とした1つの転送用コマンドを当該第2ノードに送信させる、
ことで1つの転送用コマンドで2以上のライト対象データを当該第2ノードに送信する分散ストレージ制御方法。
【請求項14】
請求項1に記載のコンピュータプログラムであって、
前記第1ノードの前記キャッシュメモリは、
複数の前記キャッシュストリップを含むキャッシュストリップ列を複数有し、
それぞれの前記キャッシュストリップ列には、互いに異なる前記ノードへの転送対象データセットを記憶し、
1つの前記キャッシュストリップ列に含まれる複数の前記転送対象データセットを、前記1つの転送用コマンドで、前記キャッシュストリップ列に対応する前記ノード(単数)に転送するコンピュータプログラム。
【国際調査報告】