(57)【要約】      （修正有）【課題】Ｉ／Ｏ処理の性能低下を抑えつつ、ボリューム構成変更の処理性能を向上させる。【解決手段】プロセッサを有し、Ｉ／Ｏ（Input/Output）要求の対象となるボリュームを提供し、Ｉ／Ｏ要求を受けてＩ／Ｏを実行するストレージシステムは、Ｉ／Ｏ要求の対象として提供している有効ボリュームと、提供を行っていない無効ボリュームとを有する。複数の無効ボリュームには、複数種類の容量の無効ボリュームが含まれている。プロセッサは、ボリューム作成要求を受けた場合に、ボリューム作成要求にかかる容量に基づいて、無効ボリュームを選択し、選択した無効ボリュームを有効な有効ボリュームに変換し、有効化した有効ボリュームを提供する。【選択図】図１
2020035243.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサを有し、Ｉ／Ｏ（Input/Output）要求の対象となるボリュームを提供し、Ｉ／Ｏ要求を受けてＩ／Ｏを実行するストレージシステムであって、
前記Ｉ／Ｏ要求の対象として提供している有効ボリュームと、前記提供を行っていない無効ボリュームとを有し、
複数の前記無効ボリュームには、複数種類の容量の無効ボリュームが含まれており、
前記プロセッサは、
ボリューム作成要求を受けた場合に、前記ボリューム作成要求にかかる容量に基づいて、前記無効ボリュームを選択し、選択した無効ボリュームを有効な有効ボリュームに変換し、
前記有効化した有効ボリュームを提供する
ことを特徴とするストレージシステム。
【請求項２】
前記プロセッサは、
前記無効ボリュームのボリューム容量とボリューム数との組を設定する構成変更設定部と、
前記設定されたボリューム容量とボリューム数の組に従うボリューム構成を準備する準備処理を行う構成変更実行部と、
を備えたことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記構成変更実行部は、
前記ボリューム容量毎に、設定された無効ボリューム数と、現在の無効ボリューム数と、の差分を算出し、
前記差分に基づいてボリューム容量の作成優先度を定めて前記無効ボリュームを作成する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記構成変更実行部は、前記設定された数よりも多い前記無効ボリュームを削除する
ことを特徴とする請求項３に記載のストレージシステム。
【請求項５】
前記プロセッサは、ボリューム作成要求を受けた場合に、
前記ボリューム作成要求にかかる容量とは異なる容量の前記無効ボリュームを選択し、選択した無効ボリュームを有効ボリュームに変換して提供し、
前記提供の開始後に、前記有効ボリュームの容量を前記ボリューム作成要求にかかる容量に変更する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項６】
日時、ボリューム容量及びボリューム数を示すスケジュールであるボリューム作成スケジュールに基づいて、前記準備処理を行う
ことを特徴とする請求項１に記載のストレージシステム。
【請求項７】
ボリュームとして、プールを構成するバックエンドの一つ以上のボリュームの各々であるプールボリュームと、前記プールから記憶領域が動的に割り当てられるフロントエンドのボリュームである仮想ボリュームとがあり、
前記ボリュームの構成変更についての履歴は、仮想ボリュームのボリューム容量とボリューム数のうちの少なくとも１つを変更することについての履歴である第１のサブ履歴と、プールについてボリューム容量とボリューム数のうちの少なくとも１つを変更することについての履歴である第２のサブ履歴とを含み、
設定されたボリューム容量と同一のボリューム容量を有する無効なボリュームの前記準備処理後の数が、当該ボリューム容量について設定されたボリューム数以上である場合、前記構成変更実行部は、
前記履歴から、作成されたボリュームの数が相対的に少ないボリューム容量を特定し、
当該特定されたボリューム容量を持つ少なくとも１つの無効なボリュームのボリューム容量を、前記第２のサブ履歴に基づき設定されたボリューム容量に変更する
ことを特徴とする請求項２に記載のストレージシステム。
【請求項８】
前記構成変更設定部は、前記ボリュームの構成変更についての履歴を基に、前記無効ボリュームのボリューム容量とボリューム数との組を設定する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項９】
前記ストレージシステムに含まれるストレージノードのそれぞれが、メモリ部と、前記構成変更設定部とを有し、
前記履歴を複数のストレージノードで共有し、それぞれのストレージノードの前記構成変更設定部が、前記無効ボリュームのボリューム容量とボリューム数との組を設定する
ことを特徴とする請求項８に記載のストレージシステム。
【請求項１０】
Ｉ／Ｏ（Input/Output）要求の対象となるボリュームを提供し、Ｉ／Ｏ要求を受けてＩ／Ｏを実行するストレージシステムの記憶制御方法であって、
前記Ｉ／Ｏ要求の対象として提供している有効ボリュームと、前記提供を行っていない無効ボリュームとを有し、複数の前記無効ボリュームには、複数種類の容量の無効ボリュームが含まれており、
ボリューム作成要求を受けた場合に、前記ボリューム作成要求にかかる容量に基づいて、前記無効ボリュームを選択し、選択した無効ボリュームを有効な有効ボリュームに変換し、
前記有効化した有効ボリュームを提供する
ことを特徴とする記憶制御方法。
【請求項１１】
Ｉ／Ｏ（Input/Output）要求の対象となるボリュームを提供し、Ｉ／Ｏ要求を受けてＩ／Ｏを実行するストレージシステムの構成要素としての計算機又は当該ストレージシステムに接続された計算機に、
ボリューム作成要求を受けた場合に、前記ボリューム作成要求にかかる容量に基づいて、前記無効ボリュームを選択し、選択した無効ボリュームを有効な有効ボリュームに変換し、
前記ストレージシステムは、前記Ｉ／Ｏ要求の対象として提供している有効ボリュームと、前記提供を行っていない前記無効ボリュームとを有し、複数の前記無効ボリュームには、複数種類の容量の無効ボリュームが含まれており、
前記有効化した有効ボリュームを提供する
ことを実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶制御に関する。
【背景技術】
【０００２】
ストレージシステムに関して、例えば特許文献１の技術が知られている。特許文献１は、「各マイクロプロセッサが、ストレージシステムの稼働状況に応じて、同期処理と非同期処理とを実行できるストレージシステムを提供する。各マイクロプロセッサには、予め用意された複数の属性（動作モード）のうち、ストレージシステムの稼働状況に応じていずれか一つの属性が設定される。各マイクロプロセッサに設定される属性は、定期的に見直されて変更される。」を開示する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表2013-515292号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
以下、ボリューム数（ボリュームの数）及びボリューム容量（ボリュームの記憶容量）に従う構成を「ボリューム構成」と言うことにする。また、Ｉ／Ｏ（Input/Output）コマンドに応答してＩ／Ｏを行い応答を返す処理を「同期処理」と言い、同期処理以外の所定の処理を「非同期処理」と言う。
【０００５】
一般に、管理者がサービスイン前にボリューム構成をストレージシステムに設定し、サービスイン後は、ボリューム構成の変更が行われる頻度は少ない。そのため、ストレージシステムでは、通常、非同期処理（例えば、ボリューム構成変更の処理）の優先度は、同期処理の優先度よりも低い。
【０００６】
近年、ＶＭ（Virtual Machine）やコンテナなどの仮想環境やＳＤＳ（Software Defined Storage）の台頭に伴い、サービスイン後にボリューム構成変更が行われる頻度が高くなっている。例えば、ＶＭを用いたいわゆる自動テストでは、定期的（例えば数時間間隔）にボリュームの作成および破棄が行われる。
【０００７】
ボリューム構成変更の開始から完了までには、ボリュームの作成やボリューム容量の変更といった処理が走ることがあり、時間がかかることがある。ボリューム構成変更の頻度が高くなると、ボリューム構成変更が迅速に行われることが望ましい（特に上記のような仮想環境）。
【０００８】
しかし、上述したように、ストレージシステムでは、一般に、同期処理の優先度が比較的高い（例えば最も高い）ため、ボリューム構成変更を迅速に行うことは難しい。ボリューム構成変更を迅速に行う方法として、ボリューム構成変更の優先度を同期処理の優先度よりも高くすることが考えられるが、そうすると、同期処理の性能（つまりＩ／Ｏ性能）が低下し得る。
【課題を解決するための手段】
【０００９】
プロセッサを有し、Ｉ／Ｏ（Input/Output）要求の対象となるボリュームを提供し、Ｉ／Ｏ要求を受けてＩ／Ｏを実行するストレージシステムが、Ｉ／Ｏ要求の対象として提供している有効ボリュームと、当該提供を行っていない無効ボリュームとを有する。複数の無効ボリュームには、複数種類の容量の無効ボリュームが含まれている。プロセッサは、ボリューム作成要求を受けた場合に、当該ボリューム作成要求にかかる容量に基づいて、無効ボリュームを選択し、選択した無効ボリュームを有効な有効ボリュームに変換し、当該有効化した有効ボリュームを提供する。
【発明の効果】
【００１０】
本発明によれば、Ｉ／Ｏ処理の性能低下を抑えつつ、ボリューム構成変更の処理性能を向上することが期待できる。
【図面の簡単な説明】
【００１１】
【図１】実施例１の概要を示す模式図である。
【図２】ストレージシステムを含むシステム全体の構成を示す図である。
【図３】コンピュートノードのハードウェア構成を示す図である。
【図４】ストレージノードのハードウェア構成を示す図である。
【図５】ストレージノードが有する機能及びテーブルを示す図である。
【図６】ボリューム構成テーブルの構成を示す図である。
【図７】操作要求履歴テーブルの構成を示す図である。
【図８】上限管理テーブルの構成を示す図である。
【図９】ボリューム構成変更の操作要求の一例であるボリューム作成要求の処理のフローチャートである。
【図１０】ボリュームリサイズ処理のフローチャートである。
【図１１】予測準備処理のフローチャートである。
【図１２】予測準備処理におけるボリューム作成処理のフローチャートである。
【図１３】予測準備処理の一具体例の説明図である。
【図１４】コマンド処理のフローチャートである。
【図１５】実施例２に係るボリューム作成スケジュールテーブルの構成を示す図である。
【図１６】実施例２に係る予測準備処理のフローチャートである。
【図１７】実施例３に係るプール操作履歴テーブルの構成を示す図である。
【図１８】実施例３に係る予測準備処理のフローチャートである。
【図１９】プール操作履歴テーブルに基づく予測準備処理のフローチャートである。
【図２０】実施例４の概要を示す模式図である。
【発明を実施するための形態】
【００１２】
以下の説明では、「インターフェース部」は、一つ以上のインターフェースでよい。当該一つ以上のインターフェースは、一つ以上の同種の通信インターフェースデバイス（例えば一つ以上のＮＩＣ（Network Interface Card））であってもよいし二つ以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１３】
また、以下の説明では、「メモリ部」は、一つ以上のメモリであり、典型的には主記憶デバイスでよい。
【００１４】
また、以下の説明では、「ＰＤＥＶ部」は、一つ以上のＰＤＥＶであり、典型的には補助記憶デバイスでよい。「ＰＤＥＶ」は、記憶デバイスの一例であり、特に、物理的な記憶デバイス（Physical storage DEVice）を意味し、典型的には、不揮発性の記憶デバイスである。
【００１５】
また、以下の説明では、「記憶部」は、メモリ部とＰＤＥＶ部の少なくとも一部とのうちの少なくとも一つ（典型的には少なくともメモリ部）である。
【００１６】
また、以下の説明では、「プロセッサ部」は、一つ以上のプロセッサである。少なくとも一つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。少なくとも一つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサでもよい。
【００１７】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、この種の情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
【００１８】
また、以下の説明では、「ｋｋｋ部」（インターフェース部、記憶部及びプロセッサ部を除く）の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサ部によって実行されることで実現されてもよいし、一つ以上のハードウェア回路（例えばＦＰＧＡ又はＡＳＩＣ）によって実現されてもよい。プログラムがプロセッサ部によって実行されることで機能が実現される場合、定められた処理が、適宜に記憶部及び／又はインターフェース部等を用いながら行われるため、機能はプロセッサ部の少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサ部あるいはそのプロセッサ部を有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
【００１９】
また、以下の説明では、「ストレージシステム」は、一つ以上の物理的な計算機を含んだシステムでよい。物理的な計算機は、汎用計算機でも専用計算機でもよい。少なくとも一つの物理的な計算機において、一つ以上の仮想的な計算機（例えばＶＭ（Virtual Machine））が実行されてもよい。仮想的な計算機は、Ｉ／Ｏコマンドを発行する計算機でもよいし、Ｉ／Ｏコマンドに応答してデータのＩ／Ｏを行う計算機でもよい。物理的な計算機が所定のソフトウェアを実行することにより、当該物理的な計算機、又は、当該物理的な計算機を含んだシステムに、ＳＤｘ（Software-Defined anything）が構築されてもよい。ＳＤｘとしては、例えば、ＳＤＳ（Software Defined Storage）又はＳＤＤＣ（Software-defined Datacenter）を採用することができる。例えば、ストレージ機能を有するソフトウェアが物理的な汎用の計算機で実行されることにより、ＳＤＳとしてのストレージシステムが構築されてもよい。また、少なくとも一つの物理的な計算機（例えばストレージ装置）が、ホストシステムとしての一つ以上の仮想的な計算機と、ストレージシステムのストレージ制御システム（典型的には、Ｉ／Ｏコマンドに応答してデータをＰＤＥＶ部に対して入出力するコントローラ）としての仮想的な計算機とが実行されてもよい。言い換えれば、当該少なくとも一つの物理的な計算機は、ホストシステムの少なくとも一部として機能と、ストレージ制御システムの少なくとも一部としての機能の両方を有してもよい。
【００２０】
また、以下の説明では、「ボリューム」は、論理ボリュームの略であり、論理的な記憶デバイス（例えばアドレス空間）でよい。ボリュームは、ストレージシステムが有する物理的な記憶資源（例えば、一つ以上のＰＤＥＶ）に基づく実体的なボリュームでもよいし、仮想化技術（例えば、Thin Provisioning）に従う仮想的なボリュームでもよい。
【実施例１】
【００２１】
図１は、実施例１の概要を示す模式図である。
【００２２】
ストレージシステム１００は、コンピュートノード１５０（ホストシステムの一例）からＩ／Ｏ（Input/Output）要求を受けた場合に当該Ｉ／Ｏコマンドに基づきＩ／Ｏを行って応答を返す処理である同期処理と、同期処理以外の処理である非同期処理とを行うようになっている。ストレージシステム１００は、構成変更部１１０、ボリューム構成テーブル１４０及び操作要求履歴テーブル１３０を有する。ボリューム構成テーブル１４０は、ボリューム構成（本実施例では、ボリューム容量とボリューム数との関係）を示す。ボリューム構成テーブル１４０は、例えば、ボリューム毎に、状態フラグ（有効か無効かを示すフラグ）と、容量とを表す情報を保持する。操作要求履歴テーブル１３０は、ボリューム構成変更の操作要求の履歴を示す。操作要求履歴テーブル１３０が、ストレージシステム１００についてボリューム容量とボリューム数のうちの少なくとも１つを変更することであり一例が作成変更であるボリューム構成変更についての履歴の一例の少なくとも一部である。
【００２３】
構成変更部１１０は、構成変更設定部１１１、構成変更実行部１１２及び操作要求受付部１１３を有する。構成変更実行部１１２は、必要なときに（例えばボリューム作成要求を受けたときに）必要なボリューム容量（例えばボリューム作成要求で指定されているボリューム容量）の無効なボリュームが無ければ、作成変更（必要なボリューム容量の無効なボリュームの新規作成、或いは、必要なボリューム容量と異なるボリューム容量を有する無効なボリュームのボリューム容量の変更）を行った上で当該ボリュームの有効化を行う。一方、必要なときに必要なボリューム容量の無効なボリュームがあれば、構成変更実行部１１２は、当該無効なボリュームの有効化を行う。当該ボリュームについて上記作成変更は不要である。なお、「無効なボリューム」とは、例えば、存在はしているが提供されていないが故にＩ／Ｏがされ得ない状態のボリューム（例えば、コンピュートノード１５０に提供されていないボリューム）である。「ボリュームの有効化」とは、無効なボリュームを有効なボリュームとすることである。「有効なボリューム」とは、提供されたが故にＩ／Ｏがされ得る状態のボリューム（例えば、コンピュートノード１５０に提供されているボリューム）である。
【００２４】
本実施例で行われる処理として、例えば、ボリューム構成変更の予測（設定の一例）と当該予測に伴う準備処理、並びに、構成変更操作要求の受付と当該操作要求に従うボリューム構成変更、がある。
【００２５】
＜Ａ．ボリューム構成変更の予測と当該予測に伴う準備処理＞
【００２６】
構成変更設定部１１１は、操作要求履歴テーブル１３０を参照し（Ａ１）、将来新たに必要とされるボリューム容量とボリューム数との組を予測する。予測された組が、構成変更実行部１１２に入力される（Ａ２）。
【００２７】
構成変更実行部１１２は、ボリューム構成テーブル１４０を参照し（Ａ３）、予測されたボリューム容量毎に、ＮＥ（予測されたボリューム数）と、ＮＲ（当該ボリューム容量と同一のボリューム容量についての既存の無効なボリュームの数）とを比較する。構成変更実行部１１２は、ＮＥよりもＮＲが小さいボリューム容量があれば（例えば、既存の無効なボリュームが一つも存在しないボリューム容量があれば）、当該ボリューム容量のボリュームを予め準備しておく準備処理、具体的には、当該ボリューム容量のボリュームを作成するというボリューム構成変更を行う。当該ボリューム容量について作成されるボリュームの数は、例えば、ＮＤＩＦ（＝ＮＥ−ＮＲ）以上である。構成変更実行部１１２は、当該準備処理に従いボリューム構成テーブル１４０を更新する（Ａ４）。
【００２８】
図１に例示の処理によれば、必要なときに必要なボリューム容量の無効なボリュームが存在している可能性が高まる。結果として、一つの非同期処理としてのボリューム構成変更においてボリュームの有効化が行われればよく上記の作成変更が不要になる。故に、同期処理の性能低下を抑えつつ、ボリューム構成変更の処理性能を向上することが期待できる。
【００２９】
＜Ｂ．構成変更操作要求の受付と当該操作要求に従うボリューム構成変更＞
【００３０】
操作要求受付部１１３は、構成変更操作（ボリューム構成の変更のための操作）の要求をコンピュートノード１５０（又は、ストレージシステム１００の図示しない管理計算機）から受け付ける（Ｂ１）。操作要求受付部１１３は、受け付けた操作要求の内容を、構成変更実行部１１２に通知する（Ｂ２）。
【００３１】
構成変更実行部１１２は、当該操作要求の内容を、操作要求履歴テーブル１３０に記録する（Ｂ３）。つまり、当該操作要求の内容が、ボリューム構成変更の履歴に追加される。
【００３２】
受け付けられた操作要求が、ボリューム作成の要求であれば、当該操作要求には、ボリューム容量とボリューム数が指定されている。構成変更実行部１１２は、ボリューム構成テーブル１４０を参照し（Ｂ４）、ボリュームを作成する必要があるか否かの判定を行う。ここでは、説明を簡単にするために、指定されたボリューム数は“１”であるとする。指定されたボリューム容量と同じ又は異なるボリューム容量の無効なボリュームがなければ、判定の結果は真（ボリュームの作成は必要）である。一方、指定されたボリューム容量と同じ又は異なるボリューム容量の無効なボリュームがあれば、判定の結果は偽（ボリュームの作成は不要）である。
【００３３】
判定の結果が真の場合、構成変更実行部１１２は、ボリュームを作成し、作成したボリュームを有効化してから（当該ボリュームに関する情報をボリューム構成テーブル１４０に記録してから）（Ｂ５）、応答を返す（Ｂ６）。
【００３４】
判定の結果が偽の場合、例えば次の二通りがある。存在する無効なボリュームの容量が、指定されたボリューム容量と同じであれば、構成変更実行部１１２は、ボリュームの有効化（当該ボリュームに関しボリューム構成テーブル１４０における状態フラグを無効から有効に変更すること）を行って（Ｂ５）、応答を返せばよい（Ｂ６）。一方、存在する無効なボリュームの容量が、指定されたボリューム容量と異なっていても、構成変更実行部１１２は、ボリュームの有効化を行って（Ｂ５）、応答を返し（Ｂ６）、その後に、当該ボリュームの容量の変更を行う。このため、判定の結果が偽の場合、存在する無効なボリュームの容量が、指定されたボリューム容量と同じであっても異なっていても、応答までの時間が短い。
【００３５】
操作要求受付部１１３が、応答を構成変更実行部１１２から受け、当該応答を基に、受け付けた構成変更操作要求に対する応答をコンピュートノード１５０に返す（Ｂ７）。
【００３６】
以下、本実施例を詳細に説明する。
【００３７】
図２は、ストレージシステム１００を含むシステム全体の構成を示す図である。
【００３８】
ストレージシステム１００は、スケールアウト型のシステムであり、一つ以上のストレージノード２５０から構成される。各ストレージノード２５０は、フロントエンドのネットワーク２０１に接続されており、当該ネットワーク２０１経由で、一つ以上のコンピュートノード１５０の各々から、ボリューム構成変更の操作要求や、Ｉ／Ｏコマンドを受け付ける。また、各ストレージノード２５０は、バックエンドのネットワーク２０２に接続されており、当該ネットワーク２０２経由で、ストレージノード２５０間での通信が行われる。ネットワーク２０１及び２０２の各々は、ＷＡＮ（Wide Area Network）やＬＡＮ（Local Area Network）といったいずれの種類のネットワークでもよい。また、ネットワーク２０１及び２０２が一体でもよい。
【００３９】
図３は、コンピュートノード１５０のハードウェア構成を示す図である。
【００４０】
コンピュートノード１５０は、インターフェース部３１０、記憶部３２０及びそれらに接続されたプロセッサ部３３０を有する。インターフェース部３１０が、フロントエンドのネットワーク２０１に接続される。記憶部３２０が、一つ以上のプログラムを格納する。プロセッサ部３３０が、当該一つ以上のプログラムを実行することで（必要に応じて、ユーザによる操作に応答して）、ストレージシステム１００から提供されたボリュームを指定したＩ／Ｏコマンドや、ストレージシステム１００のボリューム構成の変更のための操作要求を、ストレージシステム１００に発行する。
【００４１】
図４は、ストレージノード２５０のハードウェア構成を示す図である。
【００４２】
ストレージノード２５０は、インターフェース部４１０、記憶部４２０及びそれらに接続されたプロセッサ部４３０を有する。インターフェース部４１０が、フロントエンドのネットワーク２０１及びバックエンドのネットワーク２０２に接続される。記憶部４２０が、一つ以上のプログラム、及び、管理情報を格納する。プロセッサ部４３０が、当該一つ以上のプログラムを実行することで、上述した構成変更部１１０のような機能を実現する。管理情報は、ストレージシステム１００に関する情報を含んだ情報であり、具体的には、例えば、上述した操作要求履歴テーブル１３０及びボリューム構成テーブル１４０を含む。
【００４３】
図５は、ストレージノード２５０が有する機能及びテーブルを示す図である。
【００４４】
ストレージノード２５０には、一つ以上のプログラムがプロセッサ部４３０に実行されることにより、コマンド処理部５０２及び構成変更部１１０といった機能が実現される。構成変更部１１０は、構成変更設定部１１１、構成変更実行部１１２及び操作要求受付部１１３を含む。これらの機能については後述する。
【００４５】
また、ストレージノード２５０は、管理情報５００に含まれるテーブルとして、ボリューム構成テーブル１４０、操作要求履歴テーブル１３０及び上限管理テーブル５１１を含む。図６〜図８を参照して、これらのテーブル１４０、１３０及び５１１を説明する。管理情報中のいずれのテーブルも、ストレージノード２５０間で同一内容であってよい（例えば、いずれかのストレージノード２５０のいずれかのテーブルの一例であるテーブル１４０が更新された場合、その更新が、バックエンドのネットワーク２０２経由で、各他のストレージノード２５０におけるテーブル１４０に反映されてもよい）。或いは、マスタのストレージノード２５０が全ストレージノード２５０の管理情報を保持してもよい。
【００４６】
図６は、ボリューム構成テーブル１４０の構成を示す図である。
【００４７】
ボリューム構成テーブル１４０は、ボリューム構成に関する情報を保持する。例えば、ボリューム構成テーブル１４０は、ボリューム毎にエントリを有する。各エントリは、ボリュームＩＤ６０１、ノードＩＤ６０２、ノードＩＰ６０３、内部容量６０４、外部容量６０５及び状態フラグ６０６といった情報を格納する。以下、一つのボリュームを例に取る（図６の説明において「対象ボリューム」）。
【００４８】
ボリュームＩＤ６０１は、対象ボリュームのＩＤ（識別情報）を示す。ノードＩＤ６０２は、対象ボリュームを有するストレージノード２５０のＩＤを示す。ノードＩＰ６０３は、対象ボリュームを有するストレージノード２５０のＩＰアドレス（ネットワーク２０１上のアドレスの一例）を示す。内部容量６０４は、対象ボリュームの実際の容量である内部容量（ストレージノード２５０が内部的に管理している容量）を示す。外部容量６０５は、対象ボリュームの内部容量のうち実際に提供されている容量である外部容量（例えば、コンピュートノード１５０が見せている容量）を示す。状態フラグ６０６は、対象ボリュームが有効か無効かを示す。
【００４９】
図６に示す通り、状態フラグ６０６“無効”に対応したボリュームについては、外部容量６０５はブランク（“−”）である。容量の提供がされていないためである。
【００５０】
図７は、操作要求履歴テーブル１３０の構成を示す図である。
【００５１】
操作要求履歴テーブル１３０は、ボリューム構成変更の履歴を示す。「ボリューム構成変更」とは、ボリューム容量とボリューム数のうちの少なくとも１つを変更することであり、一例が上述の作成変更である。例えば、操作要求履歴テーブル１３０は、操作要求毎にエントリを有する。各エントリは、要求元ＩＰ７０１、要求種別７０２、ボリューム容量７０３、ボリューム数７０４、ボリュームＩＤ７０５及び受付日時７０６といった情報を格納する。以下、一つの操作要求を例に取る（図７の説明において「対象操作要求」）。
【００５２】
要求元ＩＰ７０１は、対象操作要求の送信元のコンピュートノード１５０のＩＰアドレス（ノードＩＰ）を示す。要求種別７０２は、対象操作要求で指定されているボリューム変更操作の種別（例えば、“ボリューム作成”、“ボリューム削除”）を示す。ボリューム容量７０３は、対象操作要求で指定されているボリューム容量を示す。ボリューム数７０４は、対象操作要求で指定されているボリューム数を示す。ボリュームＩＤ７０５は、対象操作要求で指定されているボリュームＩＤを示す。受付日時７０６は、対象操作要求を受け付けた日時を示す。
【００５３】
図８は、上限管理テーブル５１１の構成を示す図である。
【００５４】
上限管理テーブル５１１は、各ストレージノード２５０について存在可能なボリュームの数の上限である存在上限を示す。存在上限が定められていることで、ボリューム構成テーブル１４０のようなテーブルを含む管理情報５００のサイズ（例えば、メモリの消費量）を制限することができる。例えば、上限管理テーブル５１１は、ストレージノード２５０毎にエントリを有する。各エントリは、ノードＩＤ８０１、ノードＩＰ８０２、メモリ量８０３及び上限８０４といった情報を格納する。以下、一つのストレージノード２５０を例に取る（図８の説明において「対象ストレージノード２５０」）。
【００５５】
ノードＩＤ８０１は、対象ストレージノード２５０のＩＤを示す。ノードＩＰ８０２は、対象ストレージノード２５０のＩＰアドレスを示す。メモリ量８０３は、対象ストレージノード２５０が有するメモリ量（記憶部４２０内のメモリ部の容量）を示す。上限８０４は、対象ストレージノード２５０に存在可能なボリュームの数の上限である存在上限を示す。対象ストレージノード２５０について、メモリ量８０３を基に自動で存在上限が決定されてもよい。
【００５６】
以下、本実施例で行われる処理の一例を説明する。
【００５７】
図９は、ボリューム構成変更の操作要求の一例であるボリューム作成要求の処理のフローチャートである。
【００５８】
操作要求受付部１１３が、ボリューム作成要求を受け付ける（Ｓ９０１）。構成変更実行部１１２が、当該ボリューム作成要求の内容を操作要求履歴テーブル１３０に記録する（Ｓ９０２）。
【００５９】
構成変更実行部１１２が、当該ボリューム作成要求に従うボリュームの作成先のストレージノード２５０を決定する（Ｓ９０３）。この決定は、所定のポリシー（例えば、ランダム又はラウンドロビン）に従って行われてよい。
【００６０】
構成変更実行部１１２が、Ｓ９０３で決定されたストレージノード２５０（以下、図９の説明において、決定ノード２５０）について、ボリューム構成テーブル１４０を基に、無効なボリュームの一覧（例えば、内部容量とボリューム数との組の一覧）を取得する（Ｓ９０４）。
【００６１】
構成変更実行部１１２が、Ｓ９０４で取得された一覧を基に、上記ボリューム作成要求に従うボリュームを決定ノード２５０に作成する必要があるか否かを判定する（Ｓ９０５）。ここでは、当該一覧に、無効なボリュームについての情報がなければ、つまり、決定ノード２５０に無効なボリュームが一つもなければ、Ｓ９０５の判定結果は真（Ｓ９０５：ＹＥＳ）である。一方、決定ノード２５０に無効なボリュームが一つでもあれば、Ｓ９０５の判定結果は偽（Ｓ９０５：ＮＯ）である。以下、図９の説明を簡単にするために、ボリューム作成要求で指定されているボリューム数が“２”又はそれより多く、且つ、決定ノード２５０に無効なボリュームが不足していれば、当該指定されているボリューム数のうちの少なくとも一部について、Ｓ９０５：ＹＥＳである。すなわち、指定されているボリューム数が“２”又はそれより多い場合、当該指定されているボリューム数について、Ｓ９０５：ＹＥＳ、Ｓ９０５：ＮＯ又はその両方になることがある。
【００６２】
Ｓ９０５の判定結果が真の場合（Ｓ９０５：ＹＥＳ）、構成変更実行部１１２が、指定されたボリューム容量と同一の内部容量のボリュームを決定ノード２５０に作成し（Ｓ９０６）、当該作成されたボリュームに関するエントリをボリューム構成テーブル１４０に追加する（Ｓ９０７）。
【００６３】
一方、Ｓ９０６の判定結果が偽の場合（Ｓ９０５：ＮＯ）、Ｓ９０６及びＳ９０７はスキップされる。
【００６４】
構成変更実行部１１２が、上記指定されたボリューム容量に関して決定された無効なボリュームの有効化を行う、具体的には、当該ボリュームに対応した状態フラグ６０６を“無効”から“有効”に変更する（Ｓ９０８）。以下、図９及び図１０の説明を簡単にするために、決定され有効化されたボリュームを、図９及び図１０の説明において「対象ボリューム」と言う。
【００６５】
操作要求受付部１１３が、上記ボリューム作成要求に対する応答を返す（Ｓ９０９）。この応答は、必要なボリューム容量の無効なボリュームを新規に作成するか、或いは、必要なボリューム容量と異なるボリューム容量を有する無効なボリュームのボリューム容量の変更を行うという作成変更を行った上で当該ボリュームの有効化を行ったことを意味する作成完了の応答である。
【００６６】
以上の流れによれば、指定されたボリューム容量と同じ内部容量の無効なボリュームが存在するか否かに関わらず、無効なボリュームがありさえすれば、当該ボリューム作成要求の送信元であるコンピュートノード１５０は、ボリューム作成要求を送信してから短時間で応答を受信できる。Ｓ９０６及びＳ９０７がスキップされるからである。そして、無効なボリュームは、操作要求履歴テーブル１３０に基づき前もって後述の予測準備処理において準備されている可能性が高い。結果として、ボリューム作成要求に従う処理が高速となる可能性が高まる。
【００６７】
Ｓ９０９の後、対象ボリュームについて、構成変更実行部１１２が、ボリュームリサイズ処理（図９）を行う（Ｓ９１０）。
【００６８】
なお、Ｓ９０５：ＹＥＳの場合、作成されたボリュームの外部容量６０５は内部容量６０４と同じであり、当該内部容量６０４は、指定されたボリューム容量と同じ容量を示す。
【００６９】
Ｓ９０５：ＮＯの場合、指定されたボリューム容量と一致する内部容量６０４に対応した無効なボリュームがあれば、そのような無効なボリュームが、Ｓ９０８において、有効化されて、且つ、そのボリュームの外部容量６０５が、当該内部容量６０４と同じ値とされる。一方、指定されたボリューム容量と一致する内部容量６０４に対応した無効なボリュームがなければ、いずれかの無効なボリュームが（例えば、指定されたボリューム容量に最も近い内部容量６０４に対応した無効なボリュームが）、Ｓ９０８において、有効化されて、且つ、そのボリュームの外部容量６０５が、指定されたボリューム容量と同じ値とされる（このため、当該ボリュームについて、外部容量６０５は内部容量６０４と異なる）。また、ボリューム作成要求の処理に関して、実行される操作要求受付部１１３と構成変更実行部１１２は、同一のストレージノード２５０に存在してもよいし別々のストレージノード２５０に存在してもよい。
【００７０】
図１０は、ボリュームリサイズ処理のフローチャートである。
【００７１】
対象ボリュームについて、構成変更実行部１１２が、ボリューム構成テーブル１４０を参照し、外部容量６０５と内部容量６０４との差分を算出する（Ｓ１００１）。構成変更実行部１１２が、算出された差分が０か否かを判定する（Ｓ１００２）。Ｓ１００２の判定結果が真の場合（Ｓ１００２：ＹＥＳ）、処理が終了する。
【００７２】
Ｓ１００２の判定結果が偽の場合（Ｓ１００２：ＮＯ）、構成変更実行部１１２が、外部容量６０５より内部容量６０４が大きいか否かを判定する（Ｓ１００３）。Ｓ１００３の判定結果が真の場合（Ｓ１００３：ＹＥＳ）、構成変更実行部１１２が、ボリューム縮小（すなわち、対象ボリュームの内部容量を外部容量と一致する程に小さくする処理）を行う（Ｓ１００４）。Ｓ１００３の判定結果が偽の場合（Ｓ１００３：ＮＯ）、構成変更実行部１１２が、ボリューム拡張（すなわち、対象ボリュームの内部容量を外部容量と一致する程に大きくする処理）を行う（Ｓ１００５）。Ｓ１００４又はＳ１００５の後、構成変更実行部１１２が、内部容量６０４を、変更後の内部容量を示す値に更新する（Ｓ１００６）。
【００７３】
図１１は、予測準備処理のフローチャートである。予測準備処理は、定期的に又は不定期的に開始される。図１１において、Ｓ１１０１及びＳ１１０２が、予測準備処理のうちの予測処理に属し、Ｓ１１０３〜Ｓ１１０９が、予測準備処理のうちの準備処理に属する。
【００７４】
構成変更設定部１１１が、操作要求履歴テーブル１３０から、或る一定期間（例えば、前回の図１１の予測準備処理から今回の図１１の予測準備処理までの期間）に受付日時７０６が属する履歴部分（全エントリ）を取得する（Ｓ１１０１）。構成変更設定部１１１が、取得された履歴部分が示すボリューム容量毎に、取得された履歴部分を基に、ボリューム数（ＮＥ）を集計する（Ｓ１１０２）。各ボリューム容量について、当該ボリューム容量と、当該ボリューム容量について集計されたボリューム数との組が、予測されたボリューム容量と予測されたボリューム数との組の一例である。なお、ボリューム容量とボリューム数の組の予測は、履歴部分を所定の学習モデルの入力とすることで得られた出力に基づいていてもよい。
【００７５】
構成変更実行部１１２が、ボリューム構成テーブル１４０から、無効なボリュームを特定し（Ｓ１１０３）、ボリューム容量毎に（具体的には、例えば、Ｓ１１０２での各ボリューム容量と同一の内部容量について）、Ｓ１１０３で特定された無効なボリュームの数（ＮＲ）を集計する（Ｓ１１０４）。
【００７６】
構成変更実行部１１２が、ボリューム容量毎に、ＮＤＩＦ＝ＮＥ−ＮＲを算出する（Ｓ１１０５）。ＮＥは、Ｓ１１０２で算出されたボリューム数である。ＮＲは、Ｓ１１０４で算出されたボリューム数である。
【００７７】
構成変更実行部１１２が、ＮＤＩＦが負であるボリューム容量があれば、当該ボリューム容量の全ての無効なボリュームのうち、最大でＮＤＩＦの絶対値分の無効なボリュームを削除する（Ｓ１１０６）。これにより、当該削除されたボリュームを有するストレージノード２５０について、当該ストレージノード２５０に対応した存在上限（上限８０４が示す値）と、既存のボリュームの数とに一層の差が生じる。言い換えれば、新たに作成可能なボリュームの数が増える。
【００７８】
構成変更実行部１１２が、正のＮＤＩＦを降順にソートする（Ｓ１１０７）。構成変更実行部１１２は、ボリューム作成処理（図１２）を行う（Ｓ１１０８）。構成変更実行部１１２は、Ｓ１１０７で作成された各ボリュームの無効化（各ボリュームの状態フラグ６０６を“無効”とすること）を行う（Ｓ１１０９）。
【００７９】
図１２は、予測準備処理におけるボリューム作成処理のフローチャートである。
【００８０】
構成変更実行部１１２が、正のＮＤＩＦの全てのボリューム容量について、ＮＤＩＦが大きいボリューム容量から順に、ループＢを行う（ループＡ）。ＮＤＩＦが正であるボリューム容量のうち、ＮＤＩＦが大きいボリューム容量程、ボリューム作成要求で指定された場合に、ボリュームが存在する可能性が低いが、図１２によれば、ＮＤＩＦが大きいボリューム容量程、優先的にボリュームが作成対象とされる。このため、ボリューム作成要求の処理において、指定されたボリューム容量と同一の内部容量を有するボリュームが存在する可能性を高めることができる。以下、一つのボリューム容量を例に取る（図１２の説明において「対象容量」）。
【００８１】
対象容量について、ループＢは、作成されたボリューム（対象容量と同じ内部容量のボリューム）の数が、ＮＤＩＦに達するまで、下記Ｓ１２０１〜Ｓ１２０３が繰り返される。
【００８２】
すなわち、構成変更実行部１１２が、ボリュームの作成先とするストレージノード２５０を決定する（Ｓ１２０１）。Ｓ１２０１では、例えば、構成変更実行部１１２が、ボリューム構成テーブル１４０及び上限管理テーブル５１１を参照し、存在上限と、存在するボリュームの数との差が最も大きいストレージノード２５０を、作成先として決定する。
【００８３】
構成変更実行部１１２が、Ｓ１２０１で決定したストレージノード２５０に、対象容量と同じ内部容量のボリュームを作成し、当該ボリュームに関するエントリを、ボリューム構成テーブル１４０に追加する（Ｓ１２０２）。
【００８４】
構成変更実行部１１２が、ボリューム構成テーブル１４０及び上限管理テーブル５１１を参照し、全ストレージノード２５０に存在するボリュームの数が、全ストレージノード２５０の存在上限の合計に達したか否かを判定する（Ｓ１２０３）。
【００８５】
Ｓ１２０３の判定結果が偽の場合（Ｓ１２０３：ＮＯ）、対象容量について、作成されたボリュームの数がインクリメントされ、インクリメント後のボリューム数が、ＮＤＩＦに達していなければ、処理がＳ１２０１に戻る。
【００８６】
一方、Ｓ１２０３の判定結果が真の場合（Ｓ１２０３：ＹＥＳ）、ボリューム作成処理が終了する。
【００８７】
図１３を参照して、予測準備処理の一具体例を説明する。なお、図１３の具体例では、説明の簡単のために、ボリューム容量は、１ＴＢ、２ＴＢ、３ＴＢ、４ＴＢ、５ＴＢ及び６ＴＢの６種類であるとする。
【００８８】
各ボリューム容量について、Ｓ１１０２でＮＥが算出され、Ｓ１１０４でＮＲが算出され、Ｓ１１０５でＮＤＩＦが算出される。図１３の例によれば、ストレージシステム１００に存在するボリュームの数が１５０であり、ストレージシステム１００の存在上限（全ストレージノード２５０の存在上限の合計）が２５０であるため、作成可能なボリュームの数は、１００（＝２５０−１５０）である。一方、不足分（正のＮＤＩＦの合計）は、１７０（＝８０＋８０＋１０）である。このため、不足分のボリューム全てを作成することはできない。
【００８９】
このような場合でも不足分のボリュームをなるべく多く作成できるようにするため、構成変更実行部１１２は、Ｓ１１０６で、ＮＤＩＦが負である各ボリューム容量について、最大でＮＤＩＦの絶対値分の無効なボリュームを削除する。図１３の例によれば、ＮＤＩＦが負である各ボリューム容量について、ＮＤＩＦの絶対値分の無効なボリューム、すなわち、６０（＝２０（１ＴＢについて）＋２０（２ＴＢについて）＋２０（６ＴＢについて））のボリュームが削除される。このため、ストレージシステム１００に存在するボリュームの数が、９０（１５０−６０）になる。故に、新たに１６０（＝２５０−９０）のボリュームを作成可能となる。つまり、作成可能なボリュームの最大数は、１６０である。
【００９０】
この後、Ｓ１１０８で、ＮＤＩＦが正である各ボリューム容量について、ＮＤＩＦが大きいボリューム容量程、優先的にボリュームが作成対象とされる。図１３の例によれば、まず、５ＴＢのボリュームが８０（＝ＮＤＩＦ）作成される。結果として、作成可能なボリュームの最大数は、８０（＝１６０−８０）となる。次に、４ＴＢのボリュームが８０（＝ＮＤＩＦ）作成される。結果として、作成可能なボリュームの数は、０となる（＝８０−８０）。このため、３ＴＢについて、ＮＤＩＦ＝１０であるが、３ＴＢのボリュームを一つも作成することはできない。従って、４ＴＢのボリュームが８０作成されたときに、図１２のＳ１２０３：ＹＥＳとなる。
【００９１】
図１４は、コマンド処理のフローチャートである。
【００９２】
コマンド処理部５０２が、コンピュートノード１５０からコマンドを受け付け（Ｓ１４０１）、当該コマンドを解析し（Ｓ１４０２）、当該コマンドで指定されているボリュームＩＤに対応したボリュームであるコマンド対象ボリュームを特定する（Ｓ１４０３）。
【００９３】
コマンド処理部５０２が、コマンド対象ボリュームが有効なボリュームか否か、具体的には、コマンド対象ボリュームに対応した状態フラグ６０６が“有効”か否かを判定する（Ｓ１４０４）。Ｓ１４０４の判定結果が偽の場合（Ｓ１４０４：ＮＯ）、コマンド処理部５０２が、所定の応答（例えばエラー）を作成し（Ｓ１４１０）、当該応答を返す（Ｓ１４１１）。
【００９４】
Ｓ１４０４の判定結果が真の場合（Ｓ１４０４：ＹＥＳ）、コマンド処理部５０２が、受け付けられたコマンドがボリューム容量を取得するコマンドであるか否かを判定する（Ｓ１４０５）。
【００９５】
Ｓ１４０５の判定結果が真の場合（Ｓ１４０５：ＹＥＳ）、コマンド処理部５０２が、コマンド対象ボリュームに対応した外部容量６０５を特定する（Ｓ１４０６）。コマンド処理部５０２が、特定した容量を示す情報を含んだ応答を作成し（Ｓ１４１０）、当該応答を返す（Ｓ１４１１）。
【００９６】
Ｓ１４０５の判定結果が偽の場合（Ｓ１４０５：ＮＯ）、コマンド処理部５０２が、受け付けられたコマンドがＩ／Ｏコマンドであるか否かを判定する（Ｓ１４０７）。Ｓ１４０７の判定結果が偽の場合（Ｓ１４０７：ＮＯ）、コマンド処理部５０２が、所定の応答（例えばエラー）を作成し（Ｓ１４１０）、当該応答を返す（Ｓ１４１１）。
【００９７】
Ｓ１４０７の判定結果が真の場合（Ｓ１４０７：ＹＥＳ）、コマンド処理部５０２が、Ｉコマンドで指定されているアクセス範囲（例えば、先頭ＬＢＡ（Logical Block Address）及びデータ長）が、コマンド対象ボリュームの外部容量に対応した範囲か否かを判定する（Ｓ１４０８）。Ｓ１４０８の判定結果が偽の場合（Ｓ１４０８：ＮＯ）、コマンド処理部５０２が、所定の応答（例えばエラー）を作成し（Ｓ１４１０）、当該応答を返す（Ｓ１４１１）。
【００９８】
Ｓ１４０８の判定結果が真の場合（Ｓ１４０８：ＹＥＳ）、コマンド処理部５０２が、Ｉ／Ｏコマンドに従うＩ／Ｏを行い、応答（例えば完了）を作成し（Ｓ１４１０）、当該応答を返す（Ｓ１４１１）。なお、本実施例において、「同期処理」は、Ｓ１４０１〜Ｓ１４１１のうちＳ１４０６を除く処理である。
【実施例２】
【００９９】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する（これは、後の実施例３及び４についても同様である）。
【０１００】
実施例２では、ボリューム構成変更の操作要求に応答してボリューム構成変更が行われることに代えて又は加えて、ボリューム作成スケジュールテーブルが示すボリューム作成スケジュールに従ってボリューム構成変更が行われる。
【０１０１】
図１５は、ボリューム作成スケジュールテーブルの構成を示す図である。
【０１０２】
ボリューム作成スケジュールテーブル１５００は、上述の管理情報５００に含まれるテーブルの一つである。ボリューム作成スケジュールテーブル１５００が示す一つ以上のボリューム作成スケジュールは、ユーザからＧＵＩ（Graphical User Interface）のようなユーザインターフェース経由で入力されたスケジュールを含んでよいし、所定のポリシーに従い自動作成されたスケジュールを含んでもよい。ボリューム作成スケジュールテーブル１５００は、例えば、ボリューム作成スケジュール毎にエントリを有する。各エントリが、日時１５０１、ボリューム容量１５０２及びボリューム数１５０３といった情報を格納する。以下、一つのボリューム作成スケジュールを例に取る（図１５の説明において「対象スケジュール」）。
【０１０３】
日時１５０１は、対象スケジュールに従うボリューム容量及びボリューム数のボリュームを作成する日時を示す。ボリューム容量１５０２は、対象スケジュールに従うボリューム容量を示す。ボリューム数１５０３は、対象スケジュールに従うボリューム数を示す。
【０１０４】
図１６は、実施例２に係る予測準備処理のフローチャートである。
【０１０５】
まず、図１１に示した予測準備処理が行われる（Ｓ１６０１）。なお、当該予測準備処理で参照される操作要求履歴テーブル１３０が示す履歴は、ボリューム作成スケジュールに従うボリューム作成の履歴を含む。ボリューム作成スケジュールに従うボリューム作成に対応したエントリでは、要求元ＩＰ７０１は、ボリューム作成スケジュールを意味する値でよく、受付日時７０６は、ボリューム作成スケジュールに対応した日時１５０１と同じ値でよい。
【０１０６】
構成変更実行部１１２は、ボリューム作成スケジュールテーブル１５００を参照する（Ｓ１６０２）。構成変更実行部１１２は、ボリューム作成スケジュールテーブル１５００の全体を参照してもよいし、所定の期間（例えば、現在から一定時間先の日時まで）に属するエントリを参照してもよい。以下、Ｓ１６０２で参照された一つ以上のボリューム作成スケジュールを、「参照スケジュール群」と言う。
【０１０７】
構成変更実行部１１２は、ボリューム構成テーブル１４０を参照し、参照スケジュール群が示すボリューム容量及びボリューム数の無効なボリュームが存在するか否かを判定する（Ｓ１６０３）。一つでも無効なボリュームが足りない場合は、Ｓ１６０３の判定結果が偽となる。図１６の説明において、足りない無効なボリュームを「不足ボリューム」と言う。
【０１０８】
Ｓ１６０３の判定結果が真の場合（Ｓ１６０３：ＹＥＳ）、構成変更実行部１１２は、参照スケジュール群に対応した全エントリをボリューム作成スケジュールテーブル１５００から削除する（Ｓ１６０９）。
【０１０９】
Ｓ１６０３の判定結果が偽の場合（Ｓ１６０３：ＮＯ）、構成変更実行部１１２は、不足ボリュームを追加できるか否かを判定する（Ｓ１６０４）。ストレージシステム１００に存在するボリュームの数がストレージシステム１００の存在上限に達していなければ、Ｓ１６０４の判定結果が真となる。
【０１１０】
Ｓ１６０４の判定結果が真の場合（Ｓ１６０４：ＹＥＳ）、構成変更実行部１１２は、不足ボリュームを作成し（Ｓ１６０５）、テーブル更新を行う（Ｓ１６０６）。Ｓ１６０６では、当該不足ボリュームに対応したエントリがボリューム構成テーブル１４０に追加される。また、Ｓ１６０６では、当該ボリューム作成に対応したエントリが操作要求履歴テーブル１３０に追加されてよい。当該不足ボリュームに対応した状態フラグ６０６は、“無効”である。Ｓ１６０６の後、構成変更実行部１１２は、Ｓ１６０９を行う。
【０１１１】
Ｓ１６０４の判定結果が偽の場合（Ｓ１６０４：ＮＯ）、構成変更実行部１１２は、ボリューム構成テーブル１４０及び操作要求履歴テーブル１３０を参照して、作成されたボリュームの数が相対的に少ない（なるべく少ない）ボリューム容量の無効なボリュームを不足ボリュームの数分特定し、特定された無効なボリュームの内部容量を、不足ボリュームの容量に変更する（Ｓ１６０７）。これにより、参照スケジュール群が示す日時になったときに当該参照スケジュール群が示すボリューム容量及びボリューム数の無効なボリュームが存在する可能性が高まる。Ｓ１６０７の後、構成変更実行部１１２は、少なくともボリューム構成テーブル１４０を更新し（Ｓ１６０８）、Ｓ１６０９を行う。Ｓ１６０８では、ボリューム構成テーブル１４０における対象エントリ（内部容量が変更された無効なボリュームに対応したエントリ）における内部容量６０４が更新される。また、Ｓ１６０８では、操作要求履歴テーブル１３０に、内部容量の変更に対応したエントリが追加されてもよい。
【実施例３】
【０１１２】
実施例３では、ボリュームとして、コンピュートノード１５０に提供されるフロントエンドのボリュームの他に、フロントエンドのボリュームに割り当てられる記憶領域のソースとしての論理的な記憶空間であるプールを構成するバックエンドのボリュームとがある。実施例３において、フロントエンドのボリュームは、Thin Provisioningに従う仮想ボリュームであり、バックエンドのボリュームは、プールの構成要素となるプールボリュームである。ボリューム構成変更の操作要求としては、仮想ボリュームの作成、削除又は容量変更といった仮想ボリューム操作要求と、プールへのボリュームの追加や、プールからのボリュームの削除のようなプール操作要求とがある。
【０１１３】
図１７は、プール操作履歴テーブルの構成を示す図である。
【０１１４】
プール操作履歴テーブル１７００は、上述の管理情報５００に含まれるテーブルの一つである。操作要求履歴テーブル１３０が第１のサブ履歴の一例であるのに対し、プール操作履歴テーブル１７００は、第２のサブ履歴の一例である。プール操作履歴テーブル１７００は、プール操作要求の履歴を示す。プール操作履歴テーブル１７００は、例えば、プール操作要求毎にエントリを有する。各エントリが要求元ＩＰ１７０１、要求種別１７０２、プールＩＤ１７０３、ボリュームＩＤ１７０４、ボリューム容量１７０５及び受付日時１７０６といった情報を格納する。以下、一つのプール操作要求を例に取る（図１７の説明において「対象操作要求」）。
【０１１５】
要求元ＩＰ１７０１は、対象操作要求の送信元のコンピュートノード１５０のＩＰアドレスを示す。要求種別１７０２は、対象操作要求で指定されているプール操作の種別（例えば、“プール拡張”、“プール縮小”）を示す。プールＩＤ１７０３は、対象操作要求で指定されているプール操作がされたプールのＩＤを示す。ボリュームＩＤ１７０４は、対象操作要求で指定されているプール操作に従い追加又は除去されたボリュームのＩＤを示す。ボリューム容量１７０５は、対象操作要求で指定されているプール操作に従い追加又は除去されたボリュームの容量を示す。受付日時７０６は、対象操作要求を受け付けた日時を示す。
【０１１６】
なお、要求種別１７０２“プール縮小”に対応したプール操作では、プールから除外されるボリュームに格納されているデータは、当該プールに存在する別のボリュームに移動され、マッピングが変更される。マッピングとは、仮想ボリュームにおける領域とプールにおける領域との対応関係である。マッピングの変更とは、移動元の領域が割り当てられていた仮想領域（仮想ボリュームにおける領域）に、移動元の領域に代えて移動先の領域が割り当てられることである。
【０１１７】
図１８は、実施例３に係る予測準備処理のフローチャートである。
【０１１８】
まず、図１１に示した予測準備処理が行われる（Ｓ１８０１）。
【０１１９】
次に、プール操作履歴テーブル１７００に基づく予測準備処理（図１９）が行われる（Ｓ１８０２）。
【０１２０】
構成変更実行部１１２は、ボリューム構成テーブル１４０を参照し、プールに新たに必要なボリューム容量及びボリューム数の無効なボリュームが存在するか否かを判定する（Ｓ１８０３）。一つでも無効なボリュームが足りない場合は、Ｓ１８０３の判定結果が偽となる。図１８の説明において、足りない無効なボリュームを「不足ボリューム」と言う。不足ボリュームは、プールに追加されるボリュームである。不足ボリュームの数と容量の各々は、プール操作履歴テーブル１７００に基づく予測準備処理（Ｓ１８０２）において予測された（算出された）数値である。
【０１２１】
Ｓ１８０３の判定結果が偽の場合（Ｓ１８０３：ＮＯ）、構成変更実行部１１２は、不足ボリュームを追加できるか否かを判定する（Ｓ１８０４）。ストレージシステム１００に存在するボリュームの数がストレージシステム１００の存在上限に達していなければ、Ｓ１８０４の判定結果が真となる。Ｓ１８０４の判定結果が偽の場合（Ｓ１８０４：ＮＯ）、処理が終了する。
【０１２２】
Ｓ１８０４の判定結果が真の場合（Ｓ１８０４：ＹＥＳ）、構成変更実行部１１２は、不足ボリュームを作成し（Ｓ１８０５）、テーブル更新を行う（Ｓ１８０６）。Ｓ１８０６では、当該不足ボリュームに対応したエントリがボリューム構成テーブル１４０に追加される。また、Ｓ１８０６では、当該ボリューム作成に対応したエントリが、操作要求履歴テーブル１３０及びプール操作履歴テーブル１７００に追加される。当該不足ボリュームに対応した状態フラグ６０６は、“無効”である。
【０１２３】
Ｓ１８０３の判定結果が偽の場合（Ｓ１８０３：ＮＯ）、構成変更実行部１１２は、ボリューム構成テーブル１４０及び操作要求履歴テーブル１３０を参照して、作成されたボリュームの数が相対的に少ない（なるべく少ない）ボリューム容量の無効なボリュームを不足ボリュームの数分特定し、特定された無効なボリュームの内部容量を、不足ボリュームの容量に変更する（Ｓ１８０７）。これにより、将来のプール操作においてプールに新たに必要となり得るボリューム容量及びボリューム数の無効なボリュームが当該将来のプール操作のときに存在する可能性が高まる。Ｓ１８０７の後、構成変更実行部１１２は、少なくともボリューム構成テーブル１４０を更新する（Ｓ１８０８）。Ｓ１８０８では、ボリューム構成テーブル１４０における対象エントリ（内部容量が変更された無効なボリュームに対応したエントリ）における内部容量６０４が更新される。また、Ｓ１８０８では、操作要求履歴テーブル１３０に、内部容量の変更に対応したエントリが追加されてもよい。
【０１２４】
図１９は、プール操作履歴テーブル１７００に基づく予測準備処理のフローチャートである。
【０１２５】
構成変更設定部１１１が、プール操作履歴テーブル１７００のうちの或る一定期間（例えば、前回の図１９の予測準備処理から今回の図１９の予測準備処理までの期間）に受付日時１７０６が属する履歴部分（全エントリ）を取得する（Ｓ１９０１）。構成変更設定部１１１が、取得された履歴部分が示すボリューム容量毎に、取得された履歴部分を基に、ボリューム数（ＰＥ）を集計する（Ｓ１９０２）。各ボリューム容量について、当該ボリューム容量と、当該ボリューム容量について集計されたボリューム数（プールに追加されたボリュームの数）との組が、プール操作履歴テーブル１７００に基づき予測されたボリューム容量と予測されたボリューム数との組の一例である。なお、プールについてボリューム容量とボリューム数の組の予測は、履歴部分を所定の学習モデルの入力とすることで得られた出力に基づいていてもよい。
【０１２６】
構成変更実行部１１２が、ボリューム構成テーブル１４０から、無効なボリュームを特定し（Ｓ１９０３）、ボリューム容量毎に（具体的には、例えば、Ｓ１９０２での各ボリューム容量と同一の内部容量について）、Ｓ１９０３で特定された無効なボリュームの数（ＰＲ）を集計する（Ｓ１９０４）。なお、各ボリューム容量について、Ｓ１９０４で集計されたボリューム数は、図１８のＳ１８０１で必要とされた無効なボリュームの数は除かれていてもよい。
【０１２７】
構成変更実行部１１２が、ボリューム容量毎に、ＰＤＩＦ＝ＰＥ−ＰＲを算出する（Ｓ１９０５）。ＰＥは、Ｓ１９０２で算出されたボリューム数である。ＰＲは、Ｓ１９０４で算出されたボリューム数である。
【０１２８】
構成変更実行部１１２が、ＰＤＩＦが負であるボリューム容量があれば、当該ボリューム容量の全ての無効なボリュームのうち、最大でＰＤＩＦの絶対値分の無効なボリュームを削除する（Ｓ１９０６）。
【０１２９】
構成変更実行部１１２が、正のＰＤＩＦを降順にソートする（Ｓ１９０７）。構成変更実行部１１２は、正のＰＤＩＦを合計する（Ｓ１９０８）。この合計と、ストレージシステム１００に存在するボリュームの数との和が、ストレージシステム１００の存在上限未満であれば、図１８のＳ１８０３の判定結果が真となる。
【実施例４】
【０１３０】
図２０は、実施例４の概要を示す模式図である。以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別して説明する場合は、参照符号を使用することがある。例えば、ストレージノードを特に区別しないで説明する場合には、「ストレージノード２５０」と記載し、個々のストレージノード２５０を区別して説明する場合には、「ストレージノード２５０Ａ」、「ストレージノード２５０Ｂ」のように記載することがある。また、以下の説明では、いずれの要素がいずれのストレージノード２５０の要素であるか分かり易くするため、ストレージノード２５０ｘ（ｘ＝Ａ又はＢ）における要素の参照符号の末尾にｘを付す。
【０１３１】
各ストレージノード２５０が、構成変更部１１０の他に、メモリイメージＩ／Ｏ部２０００を有する。メモリイメージＩ／Ｏ部２０００は、一つ以上のプログラムがプロセッサ部４３０に実行されることにより実現される機能の一つである。メモリイメージＩ／Ｏ部２０００は、メモリイメージの入出力を行う。「メモリイメージ」とは、メモリ部のイメージである。
【０１３２】
本実施例では、以下の処理が行われる。
【０１３３】
ストレージノード２５０Ｂ（第２のストレージノードの一例）が追加される前のストレージシステム１００のボリューム構成変更の操作要求の履歴を示す操作要求履歴テーブル１３０を含んだ管理情報５００が、ストレージノード２５０Ａ（第１のストレージノードの一例）のメモリ部２００２Ａに格納されている。ストレージノード２５０ＡのメモリイメージＩ／Ｏ部２０００Ａが、ストレージノード２５０Ａのメモリ部２００２Ａに格納されている管理情報５００を含むメモリイメージ２００１を出力する。
【０１３４】
出力されたメモリイメージ２００１が、例えばバックエンドのネットワーク２０２経由で、ストレージシステム１００に追加されたストレージノード２５０ＢのメモリイメージＩ／Ｏ部２０００Ｂにより、ストレージノード２５０Ｂに入力される。メモリイメージＩ／Ｏ部２０００Ｂは、ストレージノード２５０Ｂのメモリ部２００２Ｂに、当該メモリイメージ２００１内の管理情報５００を展開する。これにより、ストレージノード２５０Ｂには、ボリューム構成変更の実績が無くても、ボリューム構成変更の履歴が格納される。ストレージノード２５０Ｂの構成変更設定部１１１Ｂは、ストレージノード２５０Ｂのメモリ部２００２Ｂに展開された管理情報５００に含まれる操作要求履歴テーブル１３０を基に、ボリューム容量及びボリューム数の予測を行う。
【０１３５】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、上述の説明を、以下のように総括することができる。
【０１３６】
プロセッサ部３３０を有し、Ｉ／Ｏ（Input/Output）要求の対象となるボリュームを提供し、Ｉ／Ｏ要求を受けてＩ／Ｏを実行するストレージシステム１００が、Ｉ／Ｏ要求の対象として提供している有効ボリュームと、提供を行っていない無効ボリュームとを有する。複数の無効ボリュームには、複数種類の容量の無効ボリュームが含まれている。プロセッサ部３３０は、ボリューム作成要求を受けた場合に、当該ボリューム作成要求にかかる容量に基づいて、無効ボリュームを選択し、選択した無効ボリュームを有効な有効ボリュームに変換し（例えば図１のＢ５）、有効化した有効ボリュームを提供する（例えば図１のＢ６）。
【０１３７】
プロセッサ部３３０は、無効ボリュームのボリューム容量とボリューム数との組を設定する構成変更設定部１１１と、設定されたボリューム容量とボリューム数の組に従うボリューム構成を準備する準備処理を行う構成変更実行部１１２とを備えることができる（例えば実現することができる）。
【０１３８】
構成変更実行部１１２は、ボリューム容量毎に、設定された無効ボリューム数と、現在の無効ボリューム数と、の差分を算出し、当該差分に基づいてボリューム容量の作成優先度を定めて無効ボリュームを作成してよい。上述の実施例では、正のＮＤＩＦの大きさが作成優先度の高さに相当する。作成優先度は、正のＮＤＩＦの大きいほど高いとは限らないでよい。なお、構成変更実行部１１２は、上記設定された数よりも多い無効ボリュームを削除してよい。
【０１３９】
プロセッサ部３３０は、ボリューム作成要求を受けた場合に、当該ボリューム作成要求にかかる容量とは異なる容量の無効ボリュームを選択し、選択した無効ボリュームを有効ボリュームに変換して提供し、当該提供の開始後に、当該有効ボリュームの容量をボリューム作成要求にかかる容量に変更してよい。
【０１４０】
上述の準備処理は、日時、ボリューム容量及びボリューム数を示すスケジュールであるボリューム作成スケジュールに基づいて行われてよい。
【０１４１】
構成変更設定部１１１は、ボリュームの構成変更についての履歴を基に、無効ボリュームのボリューム容量とボリューム数との組を設定してよい。ストレージシステム１００に含まれるコンピュートノード２５０（ストレージノードの一例）それぞれが、メモリ部と、構成変更設定部１１１とを有してよい。上記の履歴を複数のコンピュートノード２５０で共有し、それぞれのコンピュートノード２５０の構成変更設定部１１１が、無効ボリュームのボリューム容量とボリューム数との組を設定してよい。
【符号の説明】
【０１４２】
１００：ストレージシステム
【図１】
2020035243.tif 000003
【図２】
2020035243.tif 000004
【図３】
2020035243.tif 000005
【図４】
2020035243.tif 000006
【図５】
2020035243.tif 000007
【図６】
2020035243.tif 000008
【図７】
2020035243.tif 000009
【図８】
2020035243.tif 000010
【図９】
2020035243.tif 000011
【図１０】
2020035243.tif 000012
【図１１】
2020035243.tif 000013
【図１２】
2020035243.tif 000014
【図１３】
2020035243.tif 000015
【図１４】
2020035243.tif 000016
【図１５】
2020035243.tif 000017
【図１６】
2020035243.tif 000018
【図１７】
2020035243.tif 000019
【図１８】
2020035243.tif 000020
【図１９】
2020035243.tif 000021
【図２０】
2020035243.tif 000022