(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025014626
(43)【公開日】2025-01-30
(54)【発明の名称】ストレージシステム、及びストレージシステムの管理方法
(51)【国際特許分類】
G06F 3/06 20060101AFI20250123BHJP
G06F 13/10 20060101ALI20250123BHJP
G06F 13/12 20060101ALI20250123BHJP
G06F 9/50 20060101ALI20250123BHJP
G06F 11/20 20060101ALI20250123BHJP
【FI】
G06F3/06 301Z
G06F13/10 330C
G06F13/10 340A
G06F13/12 340A
G06F9/50 120A
G06F11/20 666
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2023117331
(22)【出願日】2023-07-19
(71)【出願人】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110002365
【氏名又は名称】弁理士法人サンネクスト国際特許事務所
(72)【発明者】
【氏名】額田 哲彰
(72)【発明者】
【氏名】伊藤 晋太郎
(72)【発明者】
【氏名】山本 貴大
(72)【発明者】
【氏名】大平 良徳
【テーマコード(参考)】
5B034
【Fターム(参考)】
5B034CC04
(57)【要約】
【課題】ストレージシステムのリソースを適切に割り当ててストレージシステムの性能を向上する。
【解決手段】プロセッサ70を有する複数のストレージノード150と、記憶装置とを備えたストレージシステムにおいて、プロセッサ70は、それぞれ複数のプロセッサコアを有し、当該プロセッサコアを用いて、記憶装置に入出力するデータを処理する複数のプログラムを実行し、論理的な記憶領域であるボリュームを提供し、前記それぞれ複数のプログラムに対して割り当てるプロセッサコアの数を調整する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
プロセッサを有する複数のストレージノードと、記憶装置とを備えたストレージシステムにおいて、
前記プロセッサは、それぞれ複数のプロセッサコアを有し、当該プロセッサコアを用いて前記記憶装置に入出力するデータを処理する複数のプログラムを実行し、
論理的な記憶領域であるボリュームを提供し、
前記それぞれの複数のプログラムに対して割り当てるプロセッサコアの数を調整する
ことを特徴とするストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
ボリュームの属性に基づいて、前記プログラムへのプロセッサコアの割り当てを変更し、
前記ボリュームの属性は、前記データを圧縮する機能と、データの複製を生成する機能との少なくともいずれかを含むことを特徴とするストレージシステム。
【請求項3】
請求項2に記載のストレージシステムであって、
前記データの複製を生成する機能は、スナップショット作成機能またはリモートコピー機能であることを特徴とするストレージシステム。
【請求項4】
請求項2に記載のストレージシステムであって、
前記プログラムには、前記ボリュームを提供し、入出力するデータを圧縮するストレージ制御プログラムが含まれ、
前記ストレージ制御プログラムは、前記データを圧縮して格納する圧縮ボリュームと、前記データを非圧縮で格納する非圧縮ボリュームとを含む複数のボリュームを提供し、
前記プロセッサは、前記圧縮ボリュームの数と前記非圧縮ボリュームの数とに基づいて、前記ストレージ制御プログラムに対して割り当てるプロセッサコアの数を調整することを特徴とするストレージシステム。
【請求項5】
請求項4に記載のストレージシステムであって、
前記ボリュームの属性と前記ボリュームに対するデータの入出力の数に応じて、前記ストレージ制御プログラムに対して割り当てるプロセッサコアの数を決定することを特徴とするストレージシステム。
【請求項6】
請求項5に記載のストレージシステムであって、
前記ストレージ制御プログラムが提供する複数のボリュームの各々について、当該ボリュームの属性に応じて各プログラムの基本入出力オーバヘッドを決定し、前記基本入出力オーバヘッドと前記データの入出力数とから各ボリュームの各プログラムにおけるオーバヘッドを算出し、算出したオーバヘッドをプログラムごとに合算し、合算したプログラムごとのオーバヘッドの比率から前記プロセッサコアの割り当てを決定することを特徴とするストレージシステム。
【請求項7】
請求項4に記載のストレージシステムであって、
前記ストレージノードの同じプロセッサ上で、アクティブのストレージ制御プログラムとスタンバイのストレージ制御プログラムとが動作しており、フェイルオーバにより前記スタンバイのストレージ制御プログラムがアクティブに移行した場合に、フェイルオーバ前からアクティブのストレージ制御プログラムと、フェイルオーバによりスタンバイからアクティブに移行したストレージ制御プログラムとに割り当てるプロセッサコアの数を調整することを特徴とするストレージシステム。
【請求項8】
請求項2に記載のストレージシステムであって、
前記プログラムには、
前記ボリュームを提供し、入出力するデータを圧縮するストレージ制御プログラムと、
前記データを冗長化して複数の記憶装置に格納するためのデータ冗長化プログラムと、
が含まれ、
前記ボリュームの属性の機能が多くなるにつれて前記ストレージ制御プログラムに割り当てるコアを多く、データ冗長化プログラムに割り当てるコアを少なく設定する
ことを特徴とするストレージシステム。
【請求項9】
請求項8に記載のストレージシステムであって、
前記プログラムには、前記データを冗長化して複数の記憶装置に格納するためのデータ冗長化プログラムが含まれ、
前記ストレージ制御プログラム、前記データ冗長化プログラムに割り当てるプロセッサコアの比率を維持しつつ、前記フェイルオーバ前からアクティブのストレージ制御プログラムと、前記フェイルオーバによりスタンバイからアクティブに移行したストレージ制御プログラムとに割り当てるプロセッサコアの数を調整することを特徴とするストレージシステム。
【請求項10】
プロセッサを有する複数のストレージノードと、記憶装置とを備えたストレージシステムの管理方法において、
前記プロセッサが、それぞれ複数のプロセッサコアを有し、当該プロセッサコアを用いて前記記憶装置に入出力するデータを処理する複数のプログラムを実行し、
論理的な記憶領域であるボリュームを提供し、
前記それぞれの複数のプログラムに対して割り当てるプロセッサコアの数を調整する
ことを特徴とするストレージシステムの管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステム、及びストレージシステムの管理方法に関する。
【背景技術】
【0002】
従来、ストレージシステムのリソースを適切に割り当てて性能を向上するため、特開2021-026659号公報(特許文献1)に記載の技術がある。この公報には、「ノード群を構成する複数のノードの各々が、当該ノードのリソース群の一つ以上のドライバを含むハードウェア制御部と、当該ノードがI/O(Input/Output)コマンドを受信した場合、当該I/Oコマンドに従うI/Oのための処理においてハードウェア制御部を制御するコマンド制御部とを備えている。少なくとも一つのノードが、割当て決定部を備える。割当て決定部が、当該ノードを含む一つ以上のノードのI/O特性に基づき、当該一つ以上のノードについて、ハードウェア制御部及びコマンド制御部に対するリソース割当てを決定する。当該一つ以上のストレージノードの各々では、当該ストレージノードのリソース群のリソース量のうち、ハードウェア制御部及びコマンド制御部の各々に割り当てられるリソース量は、上記決定されたリソース割当てに従う。」という記載がある。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
上記の技術では、非圧縮でデータを格納するボリュームに対して、RW(Write/Read)比率を加味してCPUコア割当を決定する。しかし、データを圧縮してデータを格納可能なボリュームなど、ボリュームの機能や属性による負荷の違いについては考慮されていない。また、フェイルオーバによる負荷の変動のようなストレージノードの稼働状態による負荷の違いも考慮されていない。
【0005】
そこで、本発明では、ボリュームの属性及び/又はストレージノードの稼働状態による負荷の違いを考慮し、ストレージシステムのリソースをさらに適切に割り当ててストレージシステムの性能を向上することを目的とする。
【課題を解決するための手段】
【0006】
上記目的を達成するために、代表的な本発明のストレージシステムの一つは、プロセッサを有する複数のストレージノードと、記憶装置とを備えたストレージシステムにおいて、前記プロセッサは、それぞれ複数のプロセッサコアを有し、当該プロセッサコアを用いて前記記憶装置に入出力するデータを処理する複数のプログラムを実行し、論理的な記憶領域であるボリュームを提供し、前記それぞれの複数のプログラムに対して割り当てるプロセッサコアの数を調整することを特徴とする。
また、代表的な本発明のストレージシステムの管理方法の一つは、プロセッサを有する複数のストレージノードと、記憶装置とを備えたストレージシステムの管理方法において、前記プロセッサが、それぞれ複数のプロセッサコアを有し、当該プロセッサコアを用いて前記記憶装置に入出力するデータを処理する複数のプログラムを実行し、論理的な記憶領域であるボリュームを提供し、前記それぞれの複数のプログラムに対して割り当てるプロセッサコアの数を調整することを特徴とする。
【発明の効果】
【0007】
本発明によれば、ストレージシステムのリソースを適切に割り当ててストレージシステムの性能を向上できる。上記した以外の課題、構成及び効果は以下の実施の形態の説明により明らかにされる。
【図面の簡単な説明】
【0008】
【
図2】ストレージシステムの物理構成についての説明図
【
図3】ストレージ制御プログラムとメモリの冗長構成の説明図
【
図4】非圧縮ボリュームにおけるデータの冗長化の説明図
【
図5】圧縮ボリュームにおけるデータの冗長化の説明図
【
図6】メモリに格納されるプログラム及びテーブルの一例を示す図
【
図12】コア割当調整対象プログラム毎コア数管理テーブルの具体例
【
図13】非圧縮ボリュームに対するライト処理のフローチャート
【
図14】非圧縮のユーザデータをデステージする処理のフローチャート
【
図16】圧縮データをデステージする処理のフローチャート
【
図18】コア数増減処理の詳細を示すフローチャート
【
図19】実施例2のシステムにおけるボリューム構成管理テーブル
【
図20】実施例2のシステムが有する属性毎I/O処理オーバヘッド管理テーブルの説明図
【
図22】コア割当比率計算処理の詳細を示すフローチャート
【
図24】実施例3で用いるクラスタ管理テーブルの説明図
【
図25】フェイルオーバの処理手順を示すフローチャート
【
図27】複数のストレージ制御プログラムに対するコア数調整のフローチャート
【発明を実施するための形態】
【0009】
以下の説明では、「インターフェース装置」は、一つ以上の通信インターフェースデバイスでよい。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス(例えば一つ以上のNIC(Network Interface Card))であってもよいし二つ以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0010】
また、以下の説明では、「メモリ」は、一つ以上の記憶デバイスの一例である一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
【0011】
また、以下の説明では、「永続記憶装置」は、一つ以上の記憶デバイスの一例である一つ以上の永続記憶デバイスでよい。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス(例えば補助記憶デバイス)でよく、具体的には、例えば、HDD(Hard Disk Drive)、SSD(Solid State Drive)、NVMe(Non-Volatile Memory Express)ドライブ、又は、SCM(Storage Class Memory)でよい。
【0012】
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
【0013】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスでよい。少なくとも一つのプロセッサデバイスは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサデバイスでよいが、GPU(Graphics Processing Unit)のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。少なくとも一つのプロセッサデバイスは、処理の一部又は全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)又はASIC(Application Specific Integrated Circuit))といった広義のプロセッサデバイスでもよい。
【0014】
また、以下の説明では、「xxxテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし(例えば、構造化データでもよいし非構造化データでもよいし)、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
【0015】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置及び/又はインターフェース装置等を用いながら行うため、処理の主語が、プロセッサ(或いは、そのプロセッサを有するコントローラのようなデバイス)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
【0016】
また、以下の説明では、「ストレージシステム」は、それぞれが記憶装置を有する複数のストレージノードを備えたマルチノード構成のノード群(例えば分散システム)を含む。各ストレージノードは、一つ以上のRAID(Redundant Array of Independent (or Inexpensive) Disks)グループを備えてもよいが、典型的には、汎用のコンピュータでよい。一つ以上のコンピュータの各々が所定のソフトウェアを実行することにより、当該一つ以上のコンピュータがSDx(Software-Defined anything)として構築されてよい。SDxとしては、例えば、SDS(Software Defined Storage)又はSDDC(Software-defined Datacenter)を採用することができる。例えば、ストレージ機能を有するソフトウェアが一つ以上の汎用のコンピュータの各々で実行されることにより、SDSとしてのストレージシステムが構築されてよい。また、一つのストレージノードが、ホストコンピュータとしての仮想的なコンピュータと、ストレージシステムの記憶制御装置(典型的には、I/O要求に応答してデータを記憶デバイス部に対して入出力する装置)としての仮想的なコンピュータとを実行してもよい。また、オンプレミスでもクラウドでもよく、それらのハイブリッドでもよい。
【0017】
また、以下の説明では、「ボリューム」を「VOL」と表記することがある。「VOL」は、論理ボリュームの略であり、論理的な記憶デバイスでよい。VOLは、実体的なVOL(RVOL)であってもよいし、仮想的なVOL(VVOL)であってもよい。「RVOL」は、そのRVOLを提供するストレージシステムが有する物理的な記憶資源(例えば、一つ以上のRAIDグループ)に基づくVOLでよい。「VVOL」は、例えば、容量拡張VOL(TPVOL)でよい。TPVOLは、複数の仮想領域(仮想的な記憶領域)で構成されており容量仮想化技術(典型的にはThin Provisioning)に従うVOLでよい。「プール」は、一つ以上の永続記憶デバイス(例えば、当該プールを管理するストレージノード内の永続記憶デバイス、又は、当該ストレージノードと通信可能なストレージノード内の永続記憶デバイス)に基づく複数の実領域(実体的な記憶領域)で構成された記憶領域でよい。ストレージシステムが、受信したライト要求が指定するアドレスが属する仮想領域(TPVOLの仮想領域)に実領域が割り当てられていない場合、その仮想領域(ライト先仮想領域)にプールから実領域を割り当ててよい(ライト先仮想領域に他の実領域が割り当て済であっても実領域が新たにライト先仮想領域に割り当てられてもよい)。ストレージシステムは、割り当てられた実領域に、そのライト要求に付随するライト対象データを書き込んでよい。
【0018】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号を使用し、同種の要素を区別して説明する場合には、参照符号を使用することがある。例えば、ストレージノードを特に区別しないで説明する場合には、「ストレージノード150」と記載し、個々のストレージノードを区別して説明する場合には、「ストレージノード150A1」、「ストレージノード150B1」のように記載することがある。
【0019】
また、以下の説明では、ストレージノードの「I/O量」は、当該ストレージノードが一つ以上のI/Oコマンドを受信したことに伴い生じたI/Oの量でよい。「I/O量」として、「I/O数」及び「I/Oサイズ」の少なくとも一つが採用されてよい。「I/O数」は、ストレージノードが受信したI/Oコマンドの数でもよいし、受信した一つ以上のI/Oコマンドに基づき発行したI/Oコマンドの数でもよい。発行されたI/Oコマンドの宛先は、ストレージノード内の記憶デバイスであってもよいし、別のストレージノードであってもよい。「I/Oサイズ」は、ストレージノードが一つ以上のI/Oコマンドを受信したことに伴いI/Oされたデータの総サイズでよい。「I/O量」は、ライト量、リード量、又は、ライト量及びリード量の両方に従う量(例えば、ライト量とリー
ド量の合計)でよい。「ライト量」の説明は、本段落における「I/O量」の説明中の「I/O」を「ライト」と読み替えた説明でよい。同様に、「リード量」の説明は、本段落における「I/O量」の説明中の「I/O」を「リード」と読み替えた説明でよい。
【0020】
また、以下の説明では、「クラスタ」とは、二つ以上のストレージノードである。或るクラスタにおいて生じたライトの対象のデータは、冗長化されて(例えば二重化されて)、当該クラスタにおける二つ以上のストレージノードに格納される。クラスタには、アクティブのストレージ制御プログラム80と、アクティブのストレージ制御プログラム80が停止する場合にアクティブのストレージ制御プログラム80の処理を引き継いで起動する(フェイルオーバ)スタンバイのストレージ制御プログラム80とが含まれてよい。アクティブのストレージ制御プログラム80とスタンバイのストレージ制御プログラム80の組み合わせはあらかじめ定められており、別々のストレージノードに配置されている。また異なる組み合わせに属している複数のストレージ制御プログラム80を、同じプロセッサ上で動作させることが可能である。
【0021】
以下、一実施形態を詳細に説明する。
【実施例0022】
図1は、実施例1のストレージシステムの説明図である。
実施例1のストレージシステム95は、複数のストレージノード150を含むノード群である。ストレージノード150は、例えば、所定のソフトウェア(例えば、SDSソフトウェア)を実行する計算機(例えば汎用計算機)である。ストレージシステム95は、計算ノード100と通信可能に接続する。
【0023】
計算ノード100は、アプリケーション110(アプリケーションプログラム)を実行する計算機である。計算ノード100は、物理的な計算機でもよいし、仮想的な計算機(例えば、仮想マシン(Virtual Machine)やコンテナのような実行環境)でもよい。
【0024】
図1の例では、計算ノード100とストレージノード150はそれぞれ異なるノードであるが、それらのノードのうちの二つ以上のノードを一つのノードが兼ねてもよい。例えば、計算ノード100は、少なくとも一つのストレージノード150に含まれてもよい。
【0025】
各ストレージノード150は、インターフェース装置、記憶装置及びそれらに接続されたプロセッサ70といった複数の計算リソースであるリソース群を有する。
【0026】
インターフェース装置の少なくとも一部の一例として、ポート161がある。ポート161が、通信インターフェースデバイスの一例である。
【0027】
記憶装置の少なくとも一部の一例として、一つ以上のディスク60であるディスク群65がある。ディスク60が、記憶デバイス(特に、永続記憶デバイス)の一例である。
【0028】
プロセッサ70の少なくとも一部の一例が、一つ以上のCPUでよく、一つ以上のCPUが、複数のプロセッサコア(以下、コア)71を有する。CPU及びコア71のいずれも、プロセッサデバイスの一例である。
【0029】
プロセッサ70は、複数のコア71を用いて、ストレージ制御プログラム80、割当調整プログラム81及びデータ冗長化プログラム82などのプログラムを実行する。
ストレージ制御プログラム80は、ディスク群65の物理記憶領域に基づいて論理的な記憶領域であるボリュームを構成する。アプリケーション110がボリュームに対してデータの入出力を要求すると、ストレージ制御プログラム80は、ディスク群65に対するデータの入出力として処理する。
データ冗長化プログラム82は、ディスク群65に入出力するデータを冗長化する。
【0030】
割当調整プログラム81は、ボリュームの属性に応じ、ストレージ制御プログラム80やデータ冗長化プログラム82に対して割り当てるコア71の数を調整する。
図1では、割当調整プログラム81は、ストレージ制御プログラム80に4つのコア71を割り当て、データ冗長化プログラム82に4つのコア71を割り当てている。
割当調整プログラム81自体もいずれかのコア71によって実行されるが、ストレージ制御プログラム80やデータ冗長化プログラム82に比して負荷が非常に小さいためコア単位での割り当ては必要としない。
【0031】
ボリュームの属性は、例えばそのボリュームがデータを圧縮して格納する機能が有効になっている圧縮ボリューム(Compressionボリューム)であるか、その機能が無効または機能無しでありデータを非圧縮で格納する非圧縮ボリューム(Simplexボリューム)であるかなどである。圧縮及び伸張は、ストレージ制御プログラム80が行う。
複数のボリュームは、圧縮ボリュームと非圧縮ボリュームとが混在していてもよい。割当調整プログラム81は、ボリューム全体における圧縮ボリュームの比率と、各プログラムに割り当てるコア71の比率とを対応付けた割当比率表を参照し、各プログラムに対して割り当てるコア71の数を決定する。
【0032】
図2は、ストレージシステム95の物理構成についての説明図である。
ストレージシステム95は、複数のクラスタ200で構成される。各クラスタ200は、二つ以上のストレージノード150で構成される。例えば、クラスタ200Aは、ストレージノード150A1~150A3で構成され、クラスタ200Bは、ストレージノード150B1~150B3で構成される。各ストレージノード150は、
図1を参照して説明した計算リソースの他に、メモリ90を有する。メモリ90は、プロセッサ70に接続されている。また、各ストレージノード150は、
図1を参照して説明した計算ノード100の他に、管理ノード120と接続する。
【0033】
管理ノード120は、管理ソフトウェアを実行する計算機である。管理ノード120は、物理的な計算機でもよいし、仮想的な計算機でもよい。管理ノード120は、ストレージシステム95の全体構成、各ストレージノード150の個別の構成、各ストレージノード150の状態などを管理する。
【0034】
各クラスタ200において、各ストレージノード150は、ネットワークを介して、管理ノード120、計算ノード100、及び、別のストレージノード150と通信する。ネットワークは、一つ以上のネットワーク、例えば、第1のネットワーク51、第2のネットワーク52、及び、第3のネットワーク53を含む。第1のネットワーク51は、ストレージノード150と管理ノード120間の通信に使用されるネットワークである。第2のネットワーク52は、ストレージノード150と計算ノード100(及び別のクラスタ200内のストレージノード150)間の通信に使用されるネットワークである。第3のネットワーク53は、同一クラスタ200内のストレージノード150間の通信に使用されるいわゆる内部ネットワークである。第3のネットワーク53は、クラスタ200毎に存在する。例えば、ストレージノード150A間の通信に使用されるネットワーク53Aと、ストレージノード150B間の通信に使用されるネットワーク53Bがある。
【0035】
図2に例示の構成において、例えば、第2のネットワーク52は、WAN(Wide Area Network)又はLAN(Local Area Network)でよく、第1のネットワーク51及び第3のネットワーク53の各々は、LANでよい。第1のネットワーク51、第2のネットワーク52、及び、第3のネットワーク53の少なくとも一つは、冗長化されていてもよい。例えば、第1のネットワーク51と第2のネットワーク52は、互いに分離せず共通のネットワークでもよい。ネットワーク51~53のいずれについても、接続規格は、Ethernet(登録商標)、Infiniband(登録商標)又は無線でよい。
ストレージノード150は、第2のネットワーク52を介してアプリケーション110からI/Oコマンドを受信する。
【0036】
図3は、ストレージ制御プログラムとメモリの冗長構成の説明図である。ストレージ制御プログラムは、
図3では、ストレージノード150A1のストレージ制御プログラム80A1がアクティブ、ストレージノード150A2のストレージ制御プログラム80A2がスタンバイとなっている。
ストレージノード150A1のプロセッサ70A1は、ストレージ制御プログラム80A1に加え、メモリデータ冗長化プログラム83A1を実行している。
同様に、ストレージノード150A2のプロセッサ70A2は、ストレージ制御プログラム80A2に加え、メモリデータ冗長化プログラム83A2を実行している。
【0037】
計算ノード100のアプリケーション110がボリュームに対してI/Oコマンドを発行すると、アクティブであるストレージ制御プログラム80A1がI/Oコマンドを処理する。ストレージ制御プログラム80A1は、I/Oの結果をメモリ90A1に格納する。
【0038】
メモリデータ冗長化プログラム83A1は、ストレージ制御プログラム80A1がメモリ90A1に格納したデータを、メモリデータ冗長化プログラム83A2に送る。メモリデータ冗長化プログラム83A2は、メモリデータ冗長化プログラム83A1から受信したデータをストレージノード150A2のメモリ90A2に格納する。
この結果、メモリ90A1とメモリ90A2のデータを一致させることができる。
【0039】
図4は、非圧縮ボリュームにおけるデータの冗長化の説明図である。本実施例では、Mirror方式によって二重化しているが、パリティを用いるEC(Ereasure Coding)方式を採用してもよい。まず、計算ノード100のアプリケーション110が、非圧縮ボリュームに対してユーザデータのライトを行っている。ストレージノード150A1のストレージ制御プログラム80A1は、ライトデータをバッファに格納する。このバッファとしては、メモリ90A1内のバッファ領域を用いる。非圧縮ボリューム上のアドレスと、ディスク群65A1におけるアドレスとは、アドレス変換テーブル84A1により対応付けられている。
【0040】
また、ストレージノード150A1のメモリデータ冗長化プログラム83A1は、バッファ上のユーザデータを読み出して、ストレージノード150A2のメモリデータ冗長化プログラム83A2に送る。メモリデータ冗長化プログラム83A2は、メモリデータ冗長化プログラム83A1から受信したユーザデータをストレージ制御プログラム80A2のバッファに書き込むことで二重化する。そして、各々ディスク群65A1、65A2に一時格納して不揮発化し、その後にストレージ制御プログラム80A1はアプリケーション110に完了応答を送信する。
【0041】
その後、ストレージノード150A1のデータ冗長化プログラム82A1は、バッファ上のユーザデータを読み出して、ストレージ機能の処理を行ってディスク群65A1の最終格納領域に書き込むとともに、ストレージノード150A2のデータ冗長化プログラム82A2に送る。データ冗長化プログラム82A2は、データ冗長化プログラム82A1から受信したユーザデータをディスク群65A2の最終格納領域に書き込む。
【0042】
このように、
図4の動作によれば、非圧縮ボリュームに書き込まれたユーザデータを、ストレージ制御プログラム80Aのバッファにおいてもディスク群65においても冗長化できる。
【0043】
図5は、圧縮ボリュームにおけるデータの冗長化の説明図である。まず、計算ノード100のアプリケーション110が、圧縮ボリュームに対してユーザデータのライトを行っている。ストレージノード150A1のストレージ制御プログラム80A1は、ユーザデータの圧縮の要否を判定する。圧縮が必要なければ、ストレージ制御プログラム80A1を上書きバッファに格納する。上書きバッファは、
図4のバッファに対応する。圧縮が必要ない場合の以降の処理は、
図4と同様であるので説明を省略する。
【0044】
圧縮が必要であれば、ストレージ制御プログラム80A1は、ユーザデータに圧縮処理を行って圧縮データを生成し、追い書きバッファに格納する。追い書きバッファは、圧縮データを一時的に格納するため、メモリ90A1に設けた領域である。圧縮データの圧縮ボリューム上のアドレスと、ディスク群65A1におけるアドレスとは、圧縮データ用アドレス変換テーブル85A1により対応付けられている。
【0045】
また、ストレージノード150A1のメモリデータ冗長化プログラム83A1は、追い書きバッファ上の圧縮データ群を読み出して、ストレージノード150A2のメモリデータ冗長化プログラム83A2に送る。メモリデータ冗長化プログラム83A2は、メモリデータ冗長化プログラム83A1から受信した圧縮データ群をストレージ制御プログラム80A2の追い書きバッファに書き込むことで二重化する。そして、各々ディスク群65A1、65A2に一時格納して不揮発化し、その後にストレージ制御プログラム80A1はアプリケーション110に完了応答を送信する。
【0046】
その後、ストレージノード150A1のデータ冗長化プログラム82A1は、追い書きバッファ上の圧縮データ群を読み出して、ストレージ機能の処理を行ってディスク群65A1の最終格納領域に書き込むとともに、ストレージノード150A2のデータ冗長化プログラム82A2に送る。データ冗長化プログラム82A2は、データ冗長化プログラム82A1から受信した圧縮データ群をディスク群65A2の最終格納領域に書き込む。
【0047】
このように、
図5の動作によれば、圧縮データをストレージ制御プログラム80Aのバッファにおいてもディスク群65においても冗長化できる。
【0048】
図6は、メモリ90に格納されるプログラム及びテーブルの一例を示す図である。
【0049】
メモリ90は、ストレージ制御プログラム80、割当調整プログラム81、データ冗長化プログラム82及びメモリデータ冗長化プログラム83を格納する。また、メモリ90は、アドレス変換テーブル84、圧縮データ用アドレス変換テーブル85、ボリューム構成管理テーブル86、コア管理テーブル87、コア割当比率管理テーブル88及びコア割当調整対象プログラム毎コア数管理テーブル89を格納する。これらのプログラム及びテーブルの少なくとも一部は、ディスク60に格納されてもよい。
【0050】
図6に例示のメモリ90は、各ストレージノード150のメモリ90でもよいし、クラスタ200毎のマスタのストレージノード150のメモリ90でもよいし、いずれかの特定のストレージノード150でもよい。また、
図6に例示のメモリ90に格納される少なくとも一つのテーブルが、管理ノード120に保存されてもよい。
【0051】
図7は、アドレス変換テーブル84の具体例である。アドレス変換テーブル84は、ボリューム上のアドレスと、当該アドレスが圧縮データの格納に用いられているか否かと、上書きバッファ上のアドレスと、ディスク装置上のアドレスとを対応付けている。なお、ボリューム上のアドレスのうち、圧縮データの格納に用いられているアドレスは、上書きバッファ上のアドレスとディスク装置上のアドレスが「値無し」である。
【0052】
図8は、圧縮データ用アドレス変換テーブル85の具体例である。圧縮データ用アドレス変換テーブル85は、ボリューム上のアドレスと、追い書きバッファ上のアドレスと、ディスク装置上のアドレスとを対応付けている。
【0053】
図9は、ボリューム構成管理テーブル86の具体例である。ボリューム構成管理テーブル86は、ボリューム毎構成情報テーブルと属性毎ボリューム統計テーブルを含む。
【0054】
ボリューム毎構成情報テーブルは、ボリュームIDに属性と容量を対応付けている。ボリュームIDは、ボリュームを一意に特定する識別情報である。属性は、そのボリュームが非圧縮ボリュームである場合に「Simplex」、圧縮ボリュームである場合に「Compression」となる。
図9では、ボリュームID「0」が属性「Simplex」で容量「500GiB」、ボリュームID「1」が属性「Compression」で容量「1TiB」、ボリュームID「2」が属性「Compression」で容量「1.5TiB」である。
【0055】
属性毎ボリューム統計テーブルは、属性と、当該属性を有するボリュームの数と、容量の合計と示す。
図9では、属性「Simplex」はボリュームの数が「1」、容量の合計が「500GiB」である。属性「Compression」はボリュームの数が「2」、容量の合計が「2.5TiB」である。そして、全属性の合計では、ボリュームの数が「3」、容量の合計が「3TiB」である。
【0056】
図10は、コア割当比率管理テーブル88の具体例である。コア割当比率管理テーブル88は、
図1の割当比率表に対応する。コア割当比率管理テーブル88は、「Compression」の割合に対して、ストレージ制御プログラムコア比率、データ冗長化プログラムコア比率、メモリデータ冗長化プログラムコア比率を対応付けている。
【0057】
図10では、「ストレージ制御プログラムコア比率:データ冗長化プログラムコア比率:メモリデータ冗長化プログラムコア比率」は、「Compression」ボリュームの割合が「0%」のときに「1:3:2」、「10%」のときに「1:3:2」、「100%」のときに「4:1:1」である。
このように、コア割当比率管理テーブル88は、圧縮ボリュームの割合が高いときには、ストレージ制御プログラム80に割り当てるコア71を多くしている。このため、データの圧縮に高い負荷を要することを考慮して、コア71の割り当てを最適化できる。
【0058】
図11は、コア管理テーブル87の具体例である。コア管理テーブル87には、コア割当管理テーブルとコア数管理テーブルが含まれる。
コア割当管理テーブルは、コア71を識別するコアIDに対し、当該コアで動作しているプログラムを対応付けたテーブルである。
コア数管理テーブルは、ストレージノード150を識別するストレージノードIDに、当該ストレージノード150で動作するコア71の数を対応付けたテーブルである。
【0059】
図12は、コア割当調整対象プログラム毎コア数管理テーブル89の具体例である。コア割当調整対象プログラム毎コア数管理テーブル89は、プログラムに対し、動作コアIDと、コア数を対応づける。
図12では、ストレージ制御プログラム80に、コアID「1」とコアID「2」の2つのコア71が割り当てられている。また、データ冗長化プログラム82に、コアID「3」とコアID「4」の2つのコア71が割り当てられている。また、メモリデータ冗長化プログラム83に、コアID「5」とコアID「6」の2つのコア71が割り当てられている。
【0060】
つぎに、ストレージシステムの動作について説明する。
図13は、非圧縮ボリュームに対するライト処理のフローチャートである。
まず、アプリケーション110が、非圧縮ボリュームにライトコマンドを発行する(ステップS101)。続いて、ストレージ制御プログラム80は、ライトコマンドを解析し、ボリューム上のデータをライトするアドレスを取得する(ステップS102)。続いて、ストレージ制御プログラム80は、ユーザデータをバッファに格納し、さらにディスクに一時格納し不揮発化する(ステップS103)。続いて、ストレージ制御プログラム80は、バッファ上のアドレスをアドレス変換テーブル84に格納してボリューム上のアドレスに対応させる(ステップS104)。続いて、ストレージ制御プログラム80は、アプリケーション110にライトコマンド完了を応答し(ステップS105)、処理を終了する。
【0061】
図14は、非圧縮のユーザデータをデステージする処理のフローチャートである。
まず、ストレージ制御プログラム80は、ユーザデータをデータ冗長化プログラム上のバッファに格納する(ステップS201)。続いて、ストレージ制御プログラム80は、アドレス変換テーブル84を参照する(ステップS202)。
【0062】
アドレス変換テーブル84にディスク装置上のアドレスが存在しなければ(ステップS203;No)、ストレージ制御プログラム80は、ディスク装置上のアドレスを新規に割り当てる(ステップS204)。続いて、ストレージ制御プログラム80は、ディスク装置上のアドレスをアドレス変換テーブル84に対応させて格納する(ステップS205)。
【0063】
ステップS205の後、もしくはアドレス変換テーブル84にディスク装置上のアドレスが存在する場合(ステップS203;Yes)、ストレージ制御プログラム80は、データ冗長化プログラム82にユーザデータを格納する(ステップS206)。その後、ストレージ制御プログラム80は、ディスク装置上のアドレスにユーザデータを格納するようデータ冗長化プログラム82に命令を発行する(ステップS207)。
【0064】
データ冗長化プログラム82は、ユーザデータを他ストレージノード150のデータ冗長化プログラム82に転送する(ステップS208)。自ストレージノード150、他ストレージノード150のデータ冗長化プログラム82は、ユーザデータを各自のストレージノード150のディスク装置に格納し(ステップS209)、処理を終了する。
【0065】
図15は、圧縮データのライト処理のフローチャートである。
まず、アプリケーション110が、圧縮ボリュームにライトコマンドを発行する(ステップS301)。続いて、ストレージ制御プログラム80は、ライトコマンドを解析し、ボリューム上のアドレスを取得する(ステップS302)。続いて、ストレージ制御プログラム80は、圧縮要否を判断する(ステップS303)。
【0066】
圧縮不要であれば(ステップS304;No)、ストレージ制御プログラム80は、ユーザデータを上書きバッファに格納し、さらにディスクに一時格納し不揮発化する(ステップS305)。続いて、ストレージ制御プログラム80は、上書きバッファ上のアドレスをアドレス変換テーブル84に格納し(ステップS306)、処理を終了する。
【0067】
圧縮要であれば(ステップS304;Yes)、ストレージ制御プログラム80は、追い書きバッファ上のアドレスを新規に割り当てる(ステップS307)。その後、ストレージ制御プログラム80は、ユーザデータを圧縮する(ステップS308)。続いて、ストレージ制御プログラム80は、ユーザデータを圧縮してできた圧縮データを追い書きバッファに格納し、さらにディスクに一時格納し不揮発化する(ステップS309)。その後、ストレージ制御プログラム80は、追い書きバッファ上のアドレスを圧縮データ用アドレス変換テーブル85に格納し(ステップS310)、処理を終了する。
【0068】
図16は、圧縮データをデステージする処理のフローチャートである。
まず、ストレージ制御プログラム80は、圧縮データ群をデータ冗長化プログラム上のバッファに格納する(ステップS401)。続いて、ストレージ制御プログラム80は、ディスク装置上のアドレスを新規に割り当てる(ステップS402)。続いて、ストレージ制御プログラム80は、ディスク装置上のアドレスを圧縮データ用アドレス変換テーブル85に格納する(ステップS403)。
【0069】
その後、ストレージ制御プログラム80は、データ冗長化プログラム82に圧縮データ群を格納する(ステップS404)。続いて、ストレージ制御プログラム80は、ディスク装置上のアドレスに圧縮データ群を格納するようデータ冗長化プログラム82に命令を発行する(ステップS405)。
【0070】
データ冗長化プログラム82は、圧縮データ群を他ストレージノード150のデータ冗長化プログラム82に転送する(ステップS406)。自ストレージノード150、他ストレージノード150のデータ冗長化プログラム82は、圧縮データ群を各自のストレージノード150のディスク装置に格納し(ステップS407)、処理を終了する。
【0071】
図17は、実施例1のコア数調整のフローチャートである。
まず、割当調整プログラム81は、ボリューム毎構成情報テーブルの更新を確認する(ステップS501)。割当調整プログラム81は、ボリューム毎構成情報テーブルを参照し、属性毎ボリューム統計テーブルを更新する(ステップS502)。その後、割当調整プログラム81は、属性毎ボリューム統計テーブルを参照し、各属性のボリュームの数と合計を取得する(ステップS503)。ここでは各属性のボリュームの数を取得しているが、各属性のボリュームの容量を取得する構成として実施してもよい。
【0072】
ステップS503の後、割当調整プログラム81は、取得した値を用いて、圧縮ボリュームの比率を算出する(ステップS504)。例えば、ボリューム数を使用する場合、(圧縮ボリュームの比率)=(圧縮ボリュームの数)/(圧縮ボリュームの数と非圧縮ボリュームの数の合計)として求めることができる。
【0073】
ステップS504の後、割当調整プログラム81は、コア割当比率管理テーブルを参照し、算出した比率に最も近い圧縮ボリュームの割合でのコア割当比率を取得する(ステップS505)。また、割当調整プログラム81は、コア数管理テーブルを参照し、当該ストレージノードの総コア数を取得する(ステップS506)。
【0074】
その後、割当調整プログラム81は、取得したコア比率と総コア数を用いて、各プログラムの割当目標コア数を算出する(ステップS507)。例えば、(各プログラムの割当目標コア数)=(総コア数)×(当該プログラムのコア比率)/(各プログラムのコア比率の和)により求める。なお、割り当て目標コア数は、整数にまるめることが望ましい。
【0075】
ステップS507の後、割当調整プログラム81は、各プログラムのコア数増減処理(ステップS508)を行って、処理を終了する。
【0076】
図18は、コア数増減処理の詳細を示すフローチャートである。
コア数増減処理が開始すると、割当調整プログラム81は、コア割当調整対象プログラム毎コア数管理テーブル89を参照する(ステップS601)。そして、割当調整プログラム81は、コア割当調整対象プログラムを順次選択する(ステップS602)。
【0077】
割当調整プログラム81は、ステップS602で選択したプログラムについて、当該プログラムの現在のコア数が当該プログラムの割当目標コア数に満たないならば(ステップS603;Yes)、当該プログラムに対する割り当てコア数を増加する(ステップS604)。
【0078】
割当調整プログラム81は、ステップS602で選択したプログラムについて、当該プログラムの現在のコア数が当該プログラムの割当目標コア数に達しており(ステップS603;No)、当該プログラムの現在のコア数が当該プログラムの割当目標コア数を超えているならば(ステップS605;Yes)、当該プログラムに対する割り当てコア数を減少させる(ステップS606)。
【0079】
ステップ604の後、ステップS606の後、若しくは、ステップS602で選択したプログラムについて、当該プログラムの現在のコア数が当該プログラムの割当目標コア数に等しい場合(ステップS605;No)、割当調整プログラム81は、全てのコア割当調整対象プログラムの選択が完了したか否かを判定する(ステップS607)。未選択のコア割当調整対象プログラムがあれば(ステップS607;No)、ステップS602に戻る。全てのコア割当調整対象プログラムの選択を完了したならば(ステップS607;Yes)、割当調整プログラム81は、コア数増減処理を終了する。
実施例1では、圧縮ボリュームと非圧縮ボリュームの比率に応じ、コア割当調整対象プログラム(ストレージ制御プログラム80、データ冗長化プログラム82及びメモリデータ冗長化プログラム83)に対するコア71の割り当てを決定する場合を説明した。
本実施例2では、ボリュームに対するデータの入出力の数に応じて、コア割当調整対象プログラムに対して割り当てるプロセッサコアの数を決定する構成について説明する。
ステップS703の後、割当調整プログラム81は、各プログラムのコア数増減処理を行って(ステップS704)、処理を終了する。各プログラムのコア数増減処理は、実施例1と同様であるので、説明を省略する。
ステップS801の後、割当調整プログラム81は、属性I/O処理オーバヘッド管理テーブルを参照し、各ボリューム毎のストレージ制御プログラム、データ冗長化プログラム、およびメモリデータ冗長化プログラムの基本オーバヘッドを算出する(ステップS802)。
基本オーバヘッドは、例えば、次のように求めればよい。
(ストレージ制御プログラムの基本オーバヘッド)=
(当該ボリュームが持つ1つ目の属性に対応するオーバヘッド)+
(当該ボリュームが持つ2つ目の属性に対応するオーバヘッド)+
・・・
ステップS804の後、割当調整プログラム81は、算出した各ボリューム毎のストレージ制御プログラム、データ冗長化プログラム、およびメモリデータ冗長化プログラムのオーバヘッドから、ストレージ制御プログラム、データ冗長化プログラム、およびメモリデータ冗長化プログラムのコア割当比率を算出し(ステップS805)、コア割当比率計算処理を終了する。
例えば、次のように求めればよい。
(ストレージ制御プログラム):(データ冗長化プログラム):(メモリデータ冗長化プログラム)=
(ボリュームID0のストレージ制御プログラムのオーバヘッド)+・・・ :
(ボリュームID0のデータ冗長化プログラムのオーバヘッド)+・・・ :
(ボリュームID0のメモリデータ冗長化プログラムのオーバヘッド)+・・・