実施形態1において、ストレージシステムが、複数の論理ボリュームの基になる複数の記憶装置と、複数の論理ボリュームのうち上位装置から送信されたI/Oコマンドで指定されている論理ボリュームにデータを書込む或いはその論理ボリュームからデータを読出す一以上のプロセッサと、プロセッサによって論理ボリュームに書かれるデータ或いはプロセッサによって論理ボリュームから読み出されたデータを一時的に記憶する一以上のキャッシュメモリとを備えている。そのストレージシステムに、節電制御部が備えられる。節電制御部は、I/Oコマンドの処理に関わるI/O処理関与装置である記憶装置、プロセッサ及びキャッシュメモリのうちの少なくとも一種類について、一以上のI/O処理関与装置又はその一部の状態に関わる処理を、他の一以上のI/O処理関与装置又はその一部分に移し、前記一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させる。
ここで、「節電状態」とは、I/O処理関与装置又はその一部が消費する電力が通常の稼動状態における消費電力よりも少ない状態であることを意味する。具体的には、例えば、電源オフ状態、I/O処理関与装置又はその一部の一部の電源がオフになる状態である。また、例えば、I/O処理関与装置が、ディスクタイプの記憶メディアを駆動するドライブであれば、節電状態とは、その記憶メディアの回転速度を通常の稼動状態(データの読み書きが可能な状態)の回転速度よりも低速である状態とすることもできる。
実施形態2では、実施形態1において、プロセッサが複数個ある。各プロセッサは、複数のプロセッサモジュールの構成要素である。各プロセッサモジュールは、一以上のプロセッサで構成されている。一以上のI/O処理関与装置又はその一部は、プロセッサモジュール又はその一部である。プロセッサモジュールの一部とは、プロセッサ、又は、プロセッサを構成する複数のプロセッサコアのうちの少なくとも一つである。
実施形態3では、実施形態1乃至2のうちの少なくとも一つにおいて、各プロセッサモジュールには、複数の論理ボリュームのうちの一以上の論理ボリュームが割当てられている。ストレージシステムに、上位インタフェース部が更に備えられる。上位インタフェース部は、上位装置から送信されたI/Oコマンドを受信し、複数のプロセッサモジュールのうちの、そのI/Oコマンドで指定されている論理ボリュームが割当てられているプロセッサモジュールに、そのI/Oコマンドを転送する。節電制御部が、複数のプロセッサモジュールのうちの低負荷のプロセッサモジュールに割当てられていた論理ボリュームを、前記複数のプロセッサモジュールのうちの他のプロセッサモジュールに割当て、低負荷のプロセッサモジュールの状態を節電状態に遷移させる。
実施形態4では、実施形態3において、節電制御部が、低負荷のプロセッサモジュールにかかる負荷が他のプロセッサモジュールにかかるとその他のプロセッサモジュールにかかる負荷が所定の閾値を超えるか否かを判断し、その負荷が所定の閾値を超えないとの判断結果になった場合に、低負荷のプロセッサモジュールに割当てられていた論理ボリュームを前記他のプロセッサモジュールに割当てる。
実施形態5では、実施形態3乃至4のうちの少なくとも一つにおいて、節電制御部が、論理ボリュームが割当てられた他のプロセッサモジュールの負荷が所定の閾値を超えた場合には、節電状態のプロセッサモジュールの状態を非節電状態に遷移させ、他のプロセッサモジュールからそのプロセッサモジュールに、その論理ボリュームに割当てる。
実施形態6では、実施形態2乃至5のうちの少なくとも一つにおいて、複数のプロセッサモジュールが二以上の電源系統に所属する。節電制御部が、低負荷のプロセッサモジュールの状態を節電状態に遷移させると、非節電状態のプロセッサモジュールが一の電源系統のみに存在することになるか否かを判断し、非節電状態のプロセッサモジュールが二以上の電源系統に存在するとの判断結果になった場合に、前記低負荷のプロセッサモジュールの状態を節電状態に遷移させる。
実施形態7では、実施形態2乃至6のうちの少なくとも一つにおいて、節電制御部が、低負荷のプロセッサモジュールの状態を節電状態に遷移させると、非節電状態のプロセッサモジュールが一つだけになるか否かを判断し、非節電状態のプロセッサモジュールが二つ以上存在するとの判断結果になった場合に、低負荷のプロセッサモジュールの状態を節電状態に遷移させる。
実施形態8では、実施形態3において、各プロセッサモジュールには、プロセッサがI/Oコマンドの処理の際に参照するI/O処理制御情報が記憶される記憶領域が備えられる。節電制御部が、低負荷のプロセッサモジュールの記憶領域に記憶されているI/O処理制御情報を、他のプロセッサモジュールの記憶領域に記憶させて、低負荷のプロセッサモジュールの状態を節電状態に遷移させる。
実施形態9では、実施形態2乃至8のうちの少なくとも一つにおいて、節電制御部が、低負荷のプロセッサモジュールに非節電状態のプロセッサが複数個存在する場合には、そのプロセッサモジュールそれ自体ではなく、それら複数の非節電状態のプロセッサから選択したプロセッサ、又は、プロセッサを構成する複数のプロセッサコアから選択したプロセッサコアの状態を、節電状態に遷移させる。
実施形態10では、実施形態2乃至9のうちの少なくとも一つにおいて、節電制御部は、選択したプロセッサの状態を節電状態に遷移させると性能が所定の要求性能未満になるとの判断結果になった場合に、上記選択したプロセッサではなく、プロセッサを構成する複数のプロセッサコアから選択したプロセッサコアの状態を、節電状態に遷移させる。
実施形態11では、実施形態2乃至10のうちの少なくとも一つにおいて、ストレージシステムが、記憶領域を更に備え、その記憶領域が、管理者所望の省電力レベルを表す情報を記憶する。節電制御部は、その情報が示す省電力レベルに応じて、プロセッサモジュール、プロセッサ及びプロセッサコアのうちのいずれを節電状態に遷移させる対象にするかを選択する。
実施形態12では、実施形態1乃至11のうちの少なくとも一つにおいて、キャッシュメモリは、複数のキャッシュメモリ領域で構成されている。一以上のI/O処理関与装置又はその一部は、一以上のキャッシュメモリ、又は、キャッシュメモリを構成する複数のキャッシュメモリ領域のうちの少なくとも一つである。
実施形態13では、実施形態12において、節電制御部が、キャッシュメモリ領域の状態を節電状態に遷移させる前に、そのキャッシュメモリ領域に記憶されているデータを、非節電状態の他のキャッシュメモリ領域、又は、前記複数の記憶装置のうちの少なくとも一つに退避させる。
実施形態14では、実施形態13において、複数の記憶装置のうちの各二以上の記憶装置により各RAIDグループが構成される。節電制御部が、低負荷のRAIDグループを基に形成された全ての論理ボリュームを一以上の他のRAIDグループにマイグレーションしてその低負荷のRAIDグループを構成する各記憶装置の状態を節電状態に遷移させることができるよう構成されている。節電制御部は、キャッシュメモリ領域に記憶されているデータを記憶装置に退避することと、低負荷のRAIDグループを基に形成された全ての論理ボリュームを一以上の他のRAIDグループにマイグレーションすることとが同時又は実質的に同時に発生する場合、いずれか一方を先に行い、その一方の処理が完了した後に、他方の処理を開始する。
実施形態15では、実施形態1乃至14のうちの少なくとも一つにおいて、複数の記憶装置のうちの各二以上の記憶装置により各RAIDグループが構成されている。節電制御部が、低負荷のRAIDグループを基に形成された全ての論理ボリュームを一以上の他のRAIDグループにマイグレーションしてその低負荷のRAIDグループを構成する各記憶装置の状態を節電状態に遷移させる。
実施形態16では、実施形態15において、節電制御部が、マイグレーション対象の論理ボリュームの負荷が他のRAIDグループにかかるとその他のRAIDグループにかかる負荷が所定の閾値を超えるか否かを判断し、その負荷が所定の閾値を超えないとの判断結果になった場合に、前記低負荷のRAIDグループが基になっているマイグレーション対象の論理ボリュームを、前記他のRAIDグループにマイグレーションする。
実施形態17では、実施形態1乃至16のうちの少なくとも一つにおいて、ストレージシステムが、記憶領域を備え、その記憶領域が、管理者所望の一以上のI/O処理関与装置又はその一部を示す情報を記憶する。節電制御部は、その情報が示す一以上のI/O処理関与装置又はその一部以外のI/O処理関与装置又はその一部については、低負荷であっても非節電状態を維持する。
実施形態18では、実施形態1乃至17のうちの少なくとも一つにおいて、ストレージシステムが、記憶領域を更に備え、その記憶領域が、節電状態に遷移する前に管理者の許可が必要かどうかを示す情報を記憶する。節電制御部は、その情報が、節電状態に遷移する前に管理者の許可が必要であることを示している場合、一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させる前に、その一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させても良いか否かの問合せを出力し、その問合せに応答して、その一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させても良いとの回答が入力された場合に、その一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させる。
実施形態19では、実施形態1乃至18のうちの少なくとも一つにおいて、節電状態に遷移させられ得るI/O処理関与装置は、プロセッサ、キャッシュメモリ及び記憶装置のうちの二種類以上である。各種I/O処理関与装置についての低負荷を定義する各閾値は、複数のポリシー値から選択されたポリシー値に対応付けられている閾値である。
実施形態20では、実施形態1乃至19のうちの少なくとも一つにおいて、節電制御部が、一以上のI/O処理関与装置又はその一部の負荷が、所定の閾値以下である低負荷の場合に、前記一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させたら性能が所定の要求性能未満となるか否かを判断し、性能が所定の要求性能未満にならないとの判断結果になった場合に、低負荷の一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させる。言い換えれば、その判断の結果が、性能が所定の要求性能未満になるとの判断結果である場合には、低負荷の一以上のI/O処理関与装置又はその一部の状態を節電状態に遷移させない。
前述した節電制御部は、ストレージシステムを管理する管理計算機で実行されても良い。
上述した複数の実施形態のうちの二以上の実施形態を組み合わせることができる。また、上述した各部は、ハードウェア、コンピュータプログラム又はそれらの組み合わせ(例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること)により構築することができる。コンピュータプログラムは、所定のプロセッサに読み込まれて実行される。また、コンピュータプログラムがプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶領域が使用されてもよい。また、コンピュータプログラムは、CD−ROM等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。
以下、図面を用いて本発明の実施の形態について説明する。
<第一の実施形態>。
最初に、本発明の第一の実施形態に係るコンピュータシステムの構成を、図1から図6を用いて説明する。
図1は、コンピュータシステムの構成例を示した図である。
コンピュータシステムは、ストレージシステム100、1台以上のホスト200、1台以上の管理サーバ300、ストレージネットワーク400及び管理ネットワーク500から構成される。ホスト200とストレージシステム100は、Fibre Channelインタフェースで接続され、FCP(Fibre Channel Protocol)プロトコルを用いて、I/Oコマンドやデータの送受信を行う。また、ストレージシステム100と管理サーバ300は、Ethernet(登録商標)にて接続され、TCP/IPプロトコルによりデータ送受信を行う。
ストレージシステム100とホスト200間で用いるインタフェースおよびプロトコルは限定されない。本実施形態では、Fibre ChannelとFCPを例示したが、他にEthernet(登録商標)とiSCSIなどを用いてもよい。同様に、ホスト200と管理サーバ300間のEthernet(登録商標)とTCP/IPプロトコルも例示にすぎない。
ホスト200は、ストレージシステム100が提供するLDEV(LogicaLDEVice)にデータを格納する計算機である。ここでいう「LDEV」とは、ホスト200から論理アドレスによりアクセス可能な仮想記憶領域のことをいう(「LDEV」は、「論理ボリューム」或いは「LU(Logical Unit)」と言い換えることもできる。ホスト200は、LDEVの識別情報を含んだI/Oコマンドをストレージシステム100に送信する。これにより、ストレージシステム100に対してデータの入出力が指示されることになる。なお、例えばFCPを用いた場合、ホス200トはLUN(Logical Unit Number)と呼ばれる番号をLDEVの識別情報としてI/Oコマンドに付加することで、データ入出力を行うLDEV(データの書込み先、或いはデータの読出し元となるLDEV)を指定することができる。I/Oコマンドには、読出しや書込みなどのコマンド種別を示すコマンドコードや、LDEV内でのデータ格納位置を示す論理アドレス(例えばLBA(Logical Brock Address))、及び、データ転送長などの情報が含まれる。
ストレージシステム100は、コントローラ1000、一つ以上の記憶ディスク筐体2000、管理用端末3000、及び、一つ以上の電源モジュール4000を有する。コントローラ1000と記憶ディスク筐体2000は、Ultra SCSIインタフェース/プロトコルを用いてデータの送受信を行う。また、コントローラ1000と管理用端末3000はEthernet(登録商標)で接続され、TCP/IPプロトコルによりデータ送受信を行う。電源モジュール4000は、コントローラ1000、ディスク筐体2000、管理用端末3000に電力を供給する。なお、これらのインタフェースおよびプロトコルは例示に過ぎない。
コントローラ1000は、一つ以上のフロントエンドモジュール1200、一つ以上のプロセッサモジュール1100、一つ以上の共有メモリモジュール1300、一つ以上のバックエンドモジュール1600を有する。コントローラ1000内の各モジュールは、内部ネットワーク1700により相互接続される。内部ネットワークは、インタフェースおよびプロトコルとして、Fibre Chennel・FCPを用いる。なおこれらのインタフェースおよびプロトコルについては例示に過ぎない。
プロセッサモジュール1100は、I/Oコマンドを解釈し、その解釈の結果を基に、フロントエンドモジュール1200に指示する。その指示の内容により、ホスト200と共有メモリモジュール1300間のデータ転送が制御される。また、プロセッサモジュール1100は、I/Oコマンドの解釈の結果を基に、バックエンドモジュール1600に指示する。その指示の内容により、共有メモリモジュール1300と記憶ディスク筐体2000間のデータ転送が制御される。また、プロセッサモジュール1100は、後述する管理コマンドを解釈し、その解釈の結果を基に、ストレージシステム100全体を制御する。
フロントエンドモジュール1200は、ホスト200からI/Oコマンドを受信し、そのI/Oコマンドをプロセッサモジュール1100に転送する。また、フロントエンドモジュール1200は、プロセッサモジュール1100からの指示に従い、ホスト200と共有メモリモジュール1300間のデータ転送を行う。
バックエンドモジュール1600は、プロセッサモジュール1100からの指示に従い、共有メモリモジュール1300と記憶ディスク筐体2000間のデータ転送を行う。
共有メモリモジュール1300は、キャッシュデータを格納する。ここでいう「キャッシュデータ」とは、高速な記憶媒体に一時的に格納されるデータのことをいう。また、共有メモリモジュール1300は、ストレージシステム100に関する後述の制御情報も格納する。フロントエンドモジュール1200、バックエンドモジュール1600及びプロセッサモジュール1100は、内部ネットワーク1700を通じて共有メモリモジュール1300にアクセスすることが可能である。
記憶ディスク筐体2000は、LDEVに書かれるデータを記憶する。記憶ディスク筐体2000は、バックエンドモジュール1600に接続される。
管理用端末3000は、管理者がストレージシステム100の各種設定を行うために使用される。管理用端末3000は、プロセッサモジュール1100に接続され、後述する管理コマンドをプロセッサモジュール1100に送信する。また、管理者は、管理サーバ300を操作して、管理用端末3000と同等の操作を行うことが出来る。以降、説明を簡単にするために、管理用端末3000が使用され各種設定が行われることとするが、それには、管理サーバ300が使用されて各種設定が行われることも含むこととする。
電源モジュール4000は、ストレージシステム100内の各装置に対して、外部(例えば商用電源)から供給される電力を供給する。以下、同一の電源モジュール4000から電力が供給される装置群を「電源系統」と呼ぶ。
図2は、フロントエンドモジュール1200およびバックエンドモジュール1600のハードウェア構成例を示した図である。
フロントエンドモジュール1200は、一つ以上の外部I/F1210、転送制御モジュール1220、メモリモジュール1230及びプロセッサ1240から構成される。また、バックエンドモジュール1600のハードウェア構成例も、フロントエンドモジュール1200と同等である。
まず、フロントエンドモジュール1200について説明する。プロセッサ1240は、メモリモジュール1230に格納された各種プログラムを実行する。外部I/F1210は、プロセッサ1240からの指示に従い、ホスト200から受信したI/Oコマンドの転送やI/Oデータ(I/Oコマンドの処理に伴って入出力されるデータ)の送受信を行う。転送制御モジュール1220は、プロセッサ1240からの指示に従い、プロセッサモジュール1100や共有メモリモジュール1300との間の通信や、データ転送を行う。メモリモジュール1230は、後述する各種プログラムおよびデータを格納する。電源モジュール4000は、これらのモジュールに対して、電力を供給する。
続いて、バックエンドモジュール1600について説明する。プロセッサ1240は、メモリモジュール1230に格納された各種プログラムを実行する。外部I/F1210は、プロセッサ1240からの指示に従い、記憶ディスク筐体2000へのデータアクセスを行う。転送制御モジュール1120は、プロセッサ1240からの指示に従い、プロセッサモジュール1100や共有メモリモジュール1300との間の通信や、データ転送を行う。メモリモジュール1230は、後述する各種プログラムおよびデータを記憶する。電源モジュール4000は、これらのモジュールに対して、電力を供給する。
図3は、プロセッサモジュール1100のハードウェア構成例を示した図である。
プロセッサモジュール1100は、一つ以上のプロセッサ1110、転送制御モジュール1120及びメモリモジュール1130から構成される。
プロセッサ1110は、メモリモジュール1130に記憶されている各種プログラムを実行する。転送制御モジュール1120は、プロセッサ1110からの指示に従い、他のプロセッサ1110、フロントエンドモジュール1200、バックエンドモジュール1600、共有メモリモジュール1300及び管理用端末3000との間の通信を制御する。メモリモジュール1130は、後述する各種プログラムや各種データを記憶する。電源モジュール4000は、これらのモジュールに対して、電力を供給する。
プロセッサ1110は、内部に一つ以上のコア1111を有する。コア1111は、プロセッサ1110が持つ演算回路であり、コアの数が多いほど、プロセッサ1110の処理能力は向上する。コア1111への電力供給は、他のコア1111とは独立して制御することが可能である。言い換えれば、複数のコア1111の中から選択されたコア1111のみを休眠させる(休眠状態に移行させる)ことが可能である。
プロセッサモジュール1100またはプロセッサ1110は、外部からの休眠命令を受信するか、自らが休眠命令を実行することにより、休眠する機能を有する。また、プロセッサモジュール1100またはプロセッサ1110は、休眠中に外部からの起動命令を受信することにより、起動する機能も有する(例えば、少なくとも外部からの起動命令を受信する要素(例えば回路)を電源オン状態にしたまま休眠する構成となっている)。
なお、以下の説明では、稼動プロセッサモジュール、稼動プロセッサ、或いは稼動コアとは、状態が「稼動中」であるプロセッサモジュール、プロセッサ或いはコアのことを言う(ただし、稼動プロセッサについては、状態が「コア休眠中」のプロセッサも含まれる)。一方、休眠プロセッサモジュール、休眠プロセッサ或いは休眠コアとは、状態が「休眠中」であるプロセッサモジュール、プロセッサ或いはコアのことを言う。
図4は、共有メモリモジュール1300のハードウェア構成例を示した図である。
共有メモリモジュール1300は、キャッシュメモリモジュール1340、制御メモリモジュール1320及びメモリコントローラ1310から構成される。
キャッシュメモリモジュール1340は、ハードディスクドライブ(HDD)よりも高速なアクセスが可能な、例えば揮発性のメモリである。キャッシュメモリモジュール1340は、記憶ディスク筐体2000に記憶されるデータの一部をキャッシュデータとして一時的に記憶する。制御メモリモジュール1320は、ストレージシステム100に関する後述の制御情報を格納する。メモリコントローラ1310は、これら二つのメモリモジュールとフロントエンドモジュール1200、プロセッサモジュール1100、記憶ディスク筐体2000との間のデータの送受信を行う。電源モジュール4000は、これらのモジュールに対して、電力を供給する。
また、制御メモリモジュール1320は、ロック機構を有する。ここでいう「ロック機構」とは、或る主体が使用中の資源に対して、他の主体からのアクセスを制限する同期機構である。プロセッサ1110が制御メモリモジュール1320にアクセスするためには、ロックを獲得しなければならない。
なお、キャッシュメモリモジュール1340は、外部からの休眠命令を受信することにより、キャッシュメモリモジュール1340全体の領域の一部を休眠させる機能を有する。また、キャッシュメモリモジュール1340は、休眠中に外部からの起動命令を受信することにより、再起動する機能も有する(例えば、キャッシュメモリモジュール1340全体を、少なくとも外部からの起動命令を受信する要素(例えば回路)を電源オン状態にしたまま休眠する構成となっている)。
図5は、管理用端末3000のハードウェア構成例を示した図である。
管理用端末3000は、一つ以上のプロセッサ3010、メモリモジュール3030、転送制御モジュール3020及びディスプレイ3040から構成される。プロセッサ3010は、メモリモジュール3030に記憶されている管理I/Fプログラムを実行する。メモリモジュール3030は、管理I/Fプログラムを記憶する。転送制御モジュール3020は、プロセッサ3010からの指示に従い、プロセッサモジュール1100との間の通信を制御する。電源モジュール4000は、これらのモジュールに対して、電力を供給する。
図6は、記憶ディスク筐体2000のハードウェア構成例を示した図である。
記憶ディスク筐体2000には、一つ以上の記憶ディスク2010が収納される。記憶ディスク筐体2000では、複数の記憶ディスク2010の組合せによりRAID(Redandant Array of Inexpensive Disks)が構成される。なお、RAIDとは、複数台の記憶装置を組み合わせることで仮想的な1台のハードディスクとして運用する技術のことをいう。RAIDを構成する記憶ディスク2010の集合を、「RAIDグループ」と呼ぶものとする。また、LDEVは、RAIDグループにより提供される記憶空間を基に形成され、RAIDグループの構成に基づいて定義される。複数のLDEVを一つのRAIDグループの記憶空間を基に形勢することが可能である。電源モジュール4000は、各記憶ディスク2010に対して、電力を供給する。
なお、LDEVの構成方法は限定されない。本実施形態では、一つのRAIDグループに対して複数のLDEVを定義する方法を例示しているが、一つのRAIDグループに対して一つのLDEVを定義することも、複数のRAIDグループに対して複数のLDEVを定義することも可能である。
また、記憶ディスク2010は、例えばHDD(Hard Disk Drive)であるが、他種のディスクドライブ(例えば光ディスクドライブ)であっても良い。また、ディスクドライブに代えて、他種の記憶装置(例えばフラッシュメモリ等の半導体メモリのドライブ)が採用されても良い。
続いて、図7を用いて、第一の実施形態の概要を説明する。
第一の実施形態では、プロセッサモジュール1100の消費電力が削減される。
以下、プロセッサモジュール1100が行うI/Oコマンド処理について簡単に説明する。なお、以下の説明では、各プロセッサモジュール1100には、複数のLDEVのうちのどのLDEVを担当するかが割当てられていることとする。
フロントエンドモジュール1200は、ホスト200からI/Oコマンドを受信し、そのI/Oコマンドを、一以上のプロセッサモジュール1100のうちの、そのI/Oコマンドで指定されているLDEVの担当プロセッサモジュール1100に転送する。担当プロセッサモジュール1100は、フロントエンドモジュール1200から受信したI/Oコマンドを解釈し、その解釈の結果を基に、I/Oデータキャッシュメモリモジュール1340への書き込み・読み込み、および、記憶ディスク筐体2000へのデータの書込み或いは記憶ディスク筐体2000からのデータの読出しを行う。
このようなI/Oコマンド処理においては、プロセッサモジュール1100が、I/Oコマンドの解釈、I/Oデータの読み書き、論理アドレスから物理アドレスへの変換などの多くの処理を行うため、プロセッサモジュール1100が性能上のボトルネックとなりやすい。性能劣化を抑える方法としては、ストレージシステム100に搭載するプロセッサモジュール1100の数を増やす方法が考えられる。しかし、プロセッサモジュール1100の数を増やすことにより、プロセッサモジュール1100の消費電力が増大する。
そこで、第一の実施形態では、低負荷プロセッサモジュール1100が、他の性能余剰プロセッサモジュール(或る程度負荷が増えても高負荷にならないプロセッサモジュール)1100にI/Oコマンド処理を移行し、その後に、休眠する。これにより、ストレージシステム100の消費電力を削減することができる。
具体的には、例えば、低負荷プロセッサモジュール1100が、そのモジュール1100にあるプロセッサ1110、又は、プロセッサ1110におけるコア1111を休眠させることで、消費電力を削減する。また、低負荷プロセッサモジュール1100は、稼働プロセッサ1110が一つになってもなお低負荷状態の場合、他の性能余剰プロセッサモジュール1100に担当LDEV(低負荷プロセッサモジュール1100が担当するLDEV)についてのI/Oコマンド処理を移行し、自らも休眠する。なお、本実施形態では、負荷の評価基準の例として、単位時間(例えば一秒間)あたりの最大I/Oコマンド処理数(処理可能なI/Oコマンドの最大数)と現在のI/Oコマンド数の比が用いられるものとする。他に、単位時間あたりに受信したI/Oコマンドの数や、プロセッサ1110が有するモニタ情報の示す負荷や温度などから負荷を評価することも可能である。
なお、この処理について考察すると、更なる下記の課題1乃至4が挙げられる。
(課題1)プロセッサモジュール1100が休眠することにより、稼動プロセッサモジュール1100が唯一つの電源系統にしか存在しなくなる恐れがある。その場合、稼働中プロセッサモジュール1100の電源系統に障害が発生した場合、I/Oコマンドを処理可能なプロセッサモジュール1100がいなくなり、一時的にシステムダウン状態となる。
(課題2)プロセッサモジュール1100の休眠後に、ストレージシステム100全体でのプロセッサ処理能力が低下し、LDEVの要求性能が満たせなくなる恐れがある。ここでいう「LDEVの要求性能」とは、ストレージシステム100が単位時間(例えば一秒間)に処理しなければならないLDEVに対するI/Oコマンドの数のことをいう。LDEVの要求性能は、管理者が設定することが可能である。
(課題3)異なるプロセッサモジュール1100にI/Oコマンド処理を移行した場合、移行先で移行元プロセッサモジュール1100のメモリモジュール1130を参照できないことが問題となる。例えば、プロセッサモジュール1100は、メモリモジュール1130内の後述するLDEV構成情報の複製1135やキャッシュテーブルの複製1136を利用し、I/Oコマンド処理を高速化する。しかし、I/Oコマンドを移行されたプロセッサモジュール1100内のメモリモジュール1130には、新たに担当するLDEVに関するこれらの情報が存在しない。そのため、移行先プロセッサモジュール1100は、移行されたLDEVへのI/Oコマンド受信時に、制御メモリモジュール1320上のこれらの情報を調べる必要がありレスポンス速度が低下する。
(課題4)管理者が電力削減量よりも性能を重視したい場合でも、性能や障害時耐性と、消費電力の削減量のトレードオフを設定することができない。
そこで、第一の実施形態では、これらの課題を解決するために、以下のような工夫1乃至4が施されている。
(工夫1)低負荷プロセッサモジュール1100は、休眠する前に、他のプロセッサモジュール1100が2つ以上の電源系統で稼動しているかどうかを判断し、稼働しているとの判断結果になった場合に、休眠する。これにより、ストレージシステム100では、常に、2つ以上の電源系統で稼働中プロセッサモジュール1100が存在することが保証される。このため、電源障害発生時にシステムダウン状態となることを防ぐことができる。なお、この(工夫1)では、稼動プロセッサモジュール1100が存在する電源系統の数が確認されるが、それに代えて、稼動プロセッサモジュール1100の数が確認されても良い。すなわち、低負荷プロセッサモジュール1100は、休眠する前に、他の稼動プロセッサモジュール1100が2つ以上存在するかどうかを判断し、存在するとの判断結果になった場合に、休眠する。これにより、いずれかの他の稼動プロセッサモジュール1100に障害が発生してもシステムダウン状態となることを防ぐことができる。
(工夫2)低負荷プロセッサモジュール1100は、自分にかかる負荷を他のプロセッサモジュール1100に移行しても、LDEVの要求性能を満たし、且つ、その他のプロセッサモジュール1100が高負荷とならないかどうかを判断する。LDEVの要求性能を満たし、且つ、その他のプロセッサモジュール1100が高負荷とならない場合に、低負荷プロセッサモジュール1100は、その他のプロセッサモジュール1100に、自分に割当てられている担当LDEVをその他のプロセッサモジュール1100に割り当て、休眠する。これにより、移行先プロセッサモジュール1100に、低負荷プロセッサモジュール1100に割当てられていた担当LDEVが割当てられても、LDEVの要求性能を満たすことができる。
(工夫3)低負荷プロセッサモジュール1110は、I/Oコマンド処理の移行前に、移行先のプロセッサモジュール1100に指示して、LDEV構成情報の複製1135とキャッシュテーブルの複製1136をメモリモジュール1130に作成させる。そのため、ストレージシステム100は、異なるプロセッサモジュール1100間のI/Oコマンド処理移行時においても、レスポンス性能の低下を防ぐことができる。
(工夫4)少なくともプロセッサモジュール1100が、管理用端末3000から、省電力レベル、低負荷閾値、及び高負荷閾値を受け付け、受けた省電力レベル、低負荷閾値及び高負荷閾値を、共有メモリモジュール1300に書込む。プロセッサモジュール1110は、その省電力レベル、低負荷閾値及び高負荷閾値を基に、処理を実行する。これにより、性能や障害耐性と、消費電力の削減量のトレードオフを設定することができる。
「省電力レベル」は、プロセッサ休眠、プロセッサモジュール休眠、コア休眠のうち、許可する休眠方法を表す。本実施形態では、省電力レベルとしてレベル1からレベル4が設定可能である。レベル1が設定された場合、プロセッサモジュール1100は、電力制御をおこなわない。レベル2が設定された場合、プロセッサモジュール1100は、コア休眠を行うことが可能である。レベル3が設定された場合、プロセッサモジュール1100は、コア休眠とプロセッサ休眠を行うことが可能である。レベル4が設定された場合、プロセッサモジュール1100は、プロセッサ休眠、プロセッサモジュール休眠およびコア休眠を行うことが可能である。
ここでいう「プロセッサモジュール休眠」とは、プロセッサモジュール1100内の全てのプロセッサ1110、メモリモジュール1130、転送制御モジュール1150が休眠することをいう。「プロセッサ休眠」とは、プロセッサ1110のみが休眠することをいう。「コア休眠」とは、コア1111が休眠することをいう。
これらの工夫1乃至4により、前述した課題1乃至4をそれぞれ解決することができる。以降では、第一の実施形態について、詳細を述べる。
図8を用いて、ストレージシステム100の各種プログラムと各種データを説明する。
フロントエンドモジュール1200は、メモリモジュール1230に格納されたFE(Front End)データ転送プログラム1232をプロセッサ1240が実行することで、FEデータ転送処理が行われる。
プロセッサモジュール1100は、メモリモジュール1130に格納されたI/Oコマンド処理プログラム1131、ストレージ管理プログラム1132、電力制御プログラム1133及び障害回復プログラム1134をプロセッサ1110が実行することで、I/Oコマンド処理、ストレージ管理処理、電力制御処理、障害回復処理がそれぞれ行われる。
バックエンドモジュール1600は、BEデータ転送プログラム1601をプロセッサ1240が実行することにより、BEデータ転送処理が行われる。
管理用端末3000は、メモリモジュール3030に格納された管理インタフェース(I/F)プログラム3031をプロセッサ3010が実行することで、管理I/F処理が行われる。
FEデータ転送プログラム1232、I/Oコマンド処理プログラム1131、ストレージ管理プログラム1132、電力制御プログラム1133、障害回復プログラム1134、BEデータ転送プログラム1601、及び管理I/Fプログラム3031がそれぞれプロセッサ(例えばマイクロプロセッサ)に実行されることによって行われる各処理は、集積回路化する等によりハードウェアで実現されてもよい。以下、説明を簡単にするために各プログラムを、プロセッサ1110やプロセッサ1240、プロセッサ3010が実行することで実現される各処理を主体として説明する。
FEデータ転送プログラム1232は、ホスト200から受信したI/Oコマンドに含まれているLUNに対応したプロセッサモジュール1100に、そのI/Oコマンドを転送する。また、FEデータ転送プログラム1232は、プロセッサモジュール1100からの指示に従い、ストレージシステム100とホスト200間のデータ転送を制御する。ルーティング情報1231は、LUNごとの担当プロセッサモジュール1100を示す。ルーティング情報1231の詳細は、図15を用いて後述する。
BEデータ転送プログラム1601は、プロセッサモジュール1100からの指示に従い、コントローラ1000と記憶ディスク筐体2000の間のデータ転送を制御する。
プロセッサモジュール1100のメモリモジュール1120に記憶される、LDEV構成情報の複製1135は、後述するLDEV構成情報1325の全部又は一部の複製である。プロセッサモジュール1100は、共有メモリモジュール1300に記憶されているLDEV構成情報1325ではなく、LDEV構成情報の複製1135を参照することにより、処理(例えば、論理アドレスと物理アドレスの変換)を高速に行うことが可能である。
プロセッサモジュール1100のメモリモジュール1120に記憶される、キャッシュテーブルの複製1136は、後述するキャッシュテーブル1327の担当するLDEVに関する部分の複製である。プロセッサモジュール1100は、キャッシュテーブルの複製1136を参照することで、LDEVデータがキャッシュデータ1341中に存在するかどうかを高速に判定することができる。
プロセッサモジュール1100で実行されるI/Oコマンド処理プログラム1131は、フロントエンドモジュール1200から転送されて来たI/Oコマンドを解釈し、コマンドコードで指定される処理を行う。
コマンドコードでデータ読出しが指定されている場合、I/Oコマンド処理プログラム1131は、最初に、I/Oコマンド内のLUN、アドレス及び転送長を読み取る。次に、I/Oコマンド処理プログラム1131は、キャッシュテーブルの複製1136を参照し、キャッシュメモリモジュール1340上のキャッシュデータ1341に該当するデータ(I/Oコマンドに従って読み出されるべきデータ)が存在するかどうかを調べる。I/Oコマンド処理プログラム1131は、キャッシュデータが存在する場合、そのキャッシュデータ1341をホスト200に転送することをFEデータ転送プログラム1232に指示する。
キャッシュデータが存在しない場合、I/Oコマンド処理プログラム1131は、記憶ディスク筐体2000からキャッシュメモリモジュール1230へのデータ転送をBEデータ転送プログラム1601に指示する。その後、I/Oコマンド処理プログラム1131は、キャッシュデータが存在する場合、キャッシュデータ1341をホスト200に転送することをFEデータ転送プログラム1232に指示する。最後に、I/Oコマンド処理プログラム1131は、キャッシュテーブル1327およびキャッシュテーブルの複製1136を更新する。
コマンドコードでデータ書き込みが指定されている場合、I/Oコマンド処理プログラム1131は、最初に、I/Oコマンド内のLUN、アドレス及び転送長を読み取る。次に、I/Oコマンド処理プログラム1131は、ホスト200からキャッシュメモリモジュール1340にデータを転送することをFEデータ転送プログラム1232に指示する。データ転送完了後に、I/Oコマンド処理プログラム1131は、ホスト200に完了メッセージを送信する。その際、I/Oコマンド処理プログラム1131は、キャッシュテーブル1327およびキャッシュテーブルの複製1136を更新する。
また、I/Oコマンド処理プログラム1131は、定期的に(又は不定期的に)、キャッシュテーブル1327を確認し、記憶ディスク筐体2000に未書き込みのデータ量を調べる。未書き込みのデータが一定量を超えた場合、I/Oコマンド処理プログラム1131は、バックエンドモジュール1600に指示してキャッシュデータ1341のデステージを行う。ここでいう「デステージ」とは、未書き込みキャッシュデータを記憶ディスク筐体2000に書き込むことをいう。その後、I/Oコマンド処理プログラム1131は、キャッシュテーブル1327にアクセスし、デステージの済んだキャッシュデータが存在するメモリブロック(キャッシュメモリモジュール1340の構成要素)に対応した書込みフラグを、「未書込み」から「書き込み済み」に更新する。
ストレージ管理プログラム1132は、管理用端末3000から管理コマンドを受信し、その管理コマンドに従って、制御メモリモジュール1320に記憶されている各種制御情報を更新する。制御情報としては、例えば、プロセッサモジュール構成情報1321、プロセッサモジュール状態情報1322、プロセッサ情報1324、LDEV構成情報1325及び電力制御情報1326がある。LDEV構成情報1325の更新時には、LDEV構成情報の複製1135も同時に更新される。
電力制御プログラム1133は、プロセッサ1110の稼動状態を監視し、定期的に(又は不定期的に)、制御メモリモジュール1320に記憶されているプロセッサ情報1324とプロセッサモジュール状態情報1322とを更新する。また、電力制御プログラム1133は、定期的に(又は不定期的に)、プロセッサ休眠制御を実行する。プロセッサ休眠制御の詳細は、図16から図19を用いて後述する。また、電力制御プログラム1133は、休眠中のプロセッサモジュール1100、休眠中のプロセッサ1110、或いは休眠中のコア1111がある場合、定期的に(又は不定期的に)、図20で説明するプロセッサ起動制御を実行し、プロセッサモジュール1100の高負荷時には、休眠中のプロセッサモジュール1100、休眠中のプロセッサ1110または休眠中のコア1111を起動する。ただし、管理者から管理用端末3000を介して入力され共有メモリモジュール1300に記憶された後述の電力制御情報1326が、レベル1を示している場合、プロセッサモジュール1100は、以上のような電力制御処理を行わない。
障害回復プログラム1134は、自身が実行されるプロセッサモジュール1100の障害を検知したら、他の稼動プロセッサモジュール1100のうちの一つに障害発生を通知する。また、障害回復プログラム1134は、他の稼動プロセッサモジュール1100に対し、定期的に(又は不定期的に)、ハートビート信号を発信する。ここでいう「ハートビート信号」とは、自身が正常に稼動していることを外部に知らせるために送る信号のことをいう。障害回復プログラム1134は、他の稼動プロセッサモジュール1100から障害を通知された場合やハートビート信号の受信が途絶えた場合、当該プロセッサモジュール1100の障害回復を行う。プロセッサ障害回復時における障害回復プログラム1134の動作に関する詳細は、図21を用いて後述する。
制御メモリモジュール1320に記憶されている各種制御情報については、図9から図14を用いて後述する。
キャッシュデータ1341は、複数のデータブロックに分割され、それぞれが異なるLDEVに記憶される。ここでいう「データブロック」とは、キャッシュデータ1341の管理単位である。図14を用いて後述するキャッシュテーブル1327は、これらデータブロックとLDEVアドレスの対応関係を保持する。
管理I/Fプログラム3031は、ディスプレイ3040上に管理画面(例えばGUI(Graphical User Interface))を表示する。管理者は、その管理画面を通して、LDEVの要求性能の設定、省電力レベル、プロセッサモジュール1100の低負荷閾値と高負荷閾値を入力する。管理I/Fプログラム3031は、管理者から入力された情報を、管理コマンドとして、ストレージ管理を担当するプロセッサモジュール1100に送信する。
続いて、制御メモリモジュール1320に記憶されたプロセッサモジュール構成情報1321、プロセッサモジュール状態情報1322、プロセッサ情報1324、LDEV構成情報1325、電力制御情報1326及びキャッシュテーブル1327について図9から図14を用いて説明する。これらの情報には、ハードウェアやLDEVなどの構成、管理者が定める設定、装置の性能、ホストからのアクセス数などの稼働状況などが含まれる。
図9は、プロセッサモジュール構成情報1321の構成を示す。
プロセッサモジュール構成情報1321は、例えばテーブルであり、プロセッサモジュール1100の構成と設定に関する情報を含む。プロセッサモジュール構成情報1321は、プロセッサモジュール1100ごとに、エントリ領域1321aからエントリ領域1321gを有する。
具体的には、エントリ領域1321aには、プロセッサモジュール1100の識別番号(プロセッサモジュール番号)が格納される。エントリ領域1321bには、プロセッサモジュール1100内のプロセッサ1110の識別番号(プロセッサ番号)が格納される。エントリ領域1321cには、プロセッサモジュール1100が担当しているLDEVの識別番号(担当LDEV番号)が格納される。エントリ領域1321dには、最初にプロセッサモジュール1100が担当していたLDEVの識別番号(初期担当LDEV番号)が格納される。エントリ領域1321eには、プロセッサモジュール1100が低負荷かどうかの基準となる閾値(低負荷閾値)が格納される。エントリ領域1321fには、プロセッサモジュール1100が高負荷かどうかの基準となる閾値(高負荷閾値)が格納される。エントリ領域1321gには、プロセッサモジュール1100が属している電源系統の識別番号(電源系統番号)が格納される。
このプロセッサモジュール構成情報1321を参照することで、どのプロセッサモジュールにどのプロセッサが存在するかの特定が可能である。
図10は、プロセッサモジュール状態情報1322の構成を示す。
プロセッサモジュール状態情報1322は、例えばテーブルであり、プロセッサモジュール1100の性能と稼働状況に関する情報を含む。プロセッサモジュール状態情報1322は、プロセッサモジュール1100ごとに、エントリ領域1322aからエントリ領域1322eを有する。
エントリ領域1322aには、プロセッサモジュール1100の識別番号(プロセッサモジュール番号)が格納される。エントリ領域1322bには、プロセッサモジュール1100内で稼動中のプロセッサ1110の能力性能の総和(プロセッサモジュール能力性能)が格納される。ここでいうプロセッサ1110の能力性能とは、単位時間(例えば一秒間)で処理可能なI/Oコマンド数のことである。その能力性能は、稼働中プロセッサ内1110の稼動中コアの数により変化する。エントリ領域1322cには、担当するLDEVの要求性能をみたすために、プロセッサモジュール1100が一秒間あたりの処理しなければならないI/Oコマンド数(プロセッサモジュール要求性能)が格納される。そのため、エントリ領域1322cに格納される値は、プロセッサモジュール1100が担当しているLDEVの要求性能の総和となる(各LDEV要求性能は、図12のLDEV構成情報テーブルに記録されている)。エントリ領域1322dには、現在のプロセッサモジュール1100の負荷が格納される。格納される負荷は、エントリ領域1322bに格納されているプロセッサモジュール能力性能と、現在のプロセッサモジュール1100が処理するI/Oコマンド数(以下、プロセッサモジュール現在性能)とを基に算出された値(例えば、プロセッサモジュール能力性能に対するプロセッサモジュール現在性能のパーセンテージ)である。エントリ領域1322eには、「稼働中」、「休眠中」或いは「障害」といった、プロセッサモジュール1100の状態を表す情報(プロセッサモジュール状態)が格納される。
図11は、プロセッサ情報1324の構成を示す。
プロセッサ情報1324は、例えばテーブルであり、プロセッサ1110に関する性能、構成、稼動状態に関する情報を含む。プロセッサ情報1324は、プロセッサ1110ごとにエントリ領域1324aからエントリ領域1324eを有する。
エントリ領域1324aには、プロセッサ1110の識別番号(プロセッサ番号)が格納される。エントリ領域1324bには、プロセッサ1110内のコア一つあたりの能力性能(コア能力性能)が格納される。エントリ領域1324cには、現在稼動しているコア数(稼動コア数)が格納される。なお、プロセッサ1110の性能(プロセッサ能力性能)は、コア能力性能と稼動コア数の積である。エントリ領域1324dには、現在のプロセッサ1110が処理している、一秒あたりのI/Oコマンド数(プロセッサ現在性能)を格納する。エントリ領域1325eには、「稼働中」、「休眠中」、「コア休眠中」などの、プロセッサ1110の状態を表す情報(プロセッサ状態)が格納される。
なお、コア能力性能の値は、ストレージシステム100の保守員または管理者が入力した値であっても良いし、プロセッサモジュール1100が稼動実績または装置の仕様から自動的に算出された値であっても良い。
図12は、LDEV構成情報1325の構成を示す。
LDEV構成情報1325は、例えばテーブルであり、LDEVの構成と設定に関する情報を含む。LDEV構成情報1325は、LDEVごとにエントリ領域1325aからエントリ領域1325fを有する。
エントリ領域1325aには、LDEVの識別番号(LDEV番号)が格納される。エントリ領域1325bには、LDEVが定義されているRAIDグループの識別番号(RAIDグループ番号)が格納される。エントリ領域1325cには、LDEVの、RAIDグループ内における先頭物理アドレス(開始アドレス)が格納される。エントリ領域1325dには、RAIDグループに割りあてられたLDEVの記憶容量(領域サイズ)が格納される。なお、本実施形態では、領域サイズの単位としてメガバイトを用いた例を示している。エントリ領域1325eには、LDEVに対応するポート識別子とLUNとのセットが格納される。エントリ領域1325fには、管理者によって定められたLDEVの要求性能が格納される。
図13は、キャッシュテーブル1327の構成を示す。
キャッシュテーブル1327は、キャッシュデータ1341の格納位置に関する情報を含む。キャッシュテーブル1327は、データブロック(LDEVの構成要素)ごとに、エントリ領域1327aからエントリ領域1327eを有する。
エントリ領域1327aには、データブロックを有するLDEVの識別番号(LDEV番号)が格納される。エントリ領域1327bには、データブロックに対応した先頭論理アドレスが格納される。エントリ領域1327cには、データブロックに格納されたデータのサイズ(格納データ長)が格納される。エントリ領域1327dには、データブロックに対応した、キャッシュメモリモジュールにおけるメモリブロックの物理アドレスが格納される。エントリ領域1327eには、メモリブロックに記憶されているデータが既に対応するデータブロックに書き込まれているかどうかの情報(例えば、「書き込み済み」または「未書き込み」といった情報)が格納される。
図14は、電力制御情報1326の構成を模擬的に示した図である。
電力制御情報1326は、電力制御関連の設定に関する情報を含む。電力制御情報1326はエントリ領域1326aを有し、そのエントリ領域1326aに、前述した省電力レベルを表す値が格納される。
図15は、フロントエンドモジュール1200に記憶されるルーティング情報1231の構成を示す。
ルーティング情報1231は、LUNと、LUNに対応するLDEVを担当するプロセッサモジュールとの対応関係を含む。ルーティング情報1231は、例えばテーブルであり、LUNごとに、エントリ領域1231aとエントリ領域1231bを有する。
エントリ領域1231aには、LUNが格納される。エントリ領域1231bには、LUNに対応するLDEVを担当するプロセッサモジュール1100の識別番号(担当プロセッサモジュール番号)が格納される。
続いて、図16から図21を用いて、本実施形態で行われる各種処理を説明する。なお、これらの図中にて二重線で囲まれたステップは、他の図を用いてより詳細を説明している。
図16は、プロセッサ休眠制御処理のフローチャートである。以下、各ステップについて説明する。なお、この処理の対象となる或る一つのプロセッサモジュールを、以下、便宜上、「対象プロセッサモジュール」と呼ぶ。
(S100)電力制御プログラム1133は、制御メモリモジュール1320から、プロセッサモジュール構成情報1321、プロセッサモジュール状態情報1322、プロセッサ情報1324及び電力制御情報1326を読み取る。
(S101)電力制御プログラム1133は、対象プロセッサモジュール(つまり自身の動作するプロセッサモジュール)1100内の各稼動プロセッサ1110について、プロセッサ情報1324におけるコア能力性能(エントリ領域1324bに記録されている情報)と稼動コア数(エントリ領域1324cに記録されている情報)との積、つまりプロセッサ能力性能を算出する。また、電力制御プログラム1133は、対象プロセッサモジュール1100に存在する一以上の稼動プロセッサ(プロセッサ状態「稼動中」に対応したプロセッサ)のプロセッサ能力性能の総和、つまりプロセッサモジュール能力性能を算出し、算出されたプロセッサモジュール能力性能を、エントリ領域1322bに記録する。更に、電力制御プログラム1133は、各稼動プロセッサのプロセッサ現在性能(エントリ領域1324dに記録されている情報であって、一秒あたりに処理されるI/Oコマンド数)を調べる。電力制御プログラム1133は、稼動プロセッサのプロセッサ現在性能の総和と、前述したプロセッサモジュール能力性能から、プロセッサモジュール負荷を計算し、その算出されたプロセッサモジュール負荷を、エントリ領域1322dに記録する。
(S102)電力制御プログラム1133は、S101で得たプロセッサモジュール負荷と、対象プロセッサモジュール1100に対応する低負荷閾値(エントリ領域1321eに記録されている情報)を比較し、プロセッサモジュール負荷が低負荷閾値より小さい場合、S103を行い、そうでない場合は、プロセッサ休眠制御を終了する。
(S103)電力制御プログラム1133は、管理者によって設定された省電力レベル(電力制御情報1326が示す省電力レベル)に応じて、休眠方法を選択する。休眠方法の選択の詳細は、図17を用いて後述する。なお、電力制御プログラム1133は、プロセッサモジュール休眠を選択する場合には、I/Oコマンド処理の移行先プロセッサモジュール1100の検索も行う。
(S104)電力制御プログラム1133は、S103にてプロセッサモジュール休眠を選択した場合、S105を行う。それ以外の場合はS106を行う。
(S105)電力制御プログラム1133は、自身が実行されているプロセッサモジュール1100の担当LDEVについてのI/Oコマンド処理を、S103で発見した移行先プロセッサモジュール1100に移行する。なおI/Oコマンド処理移行の詳細は、図19を用いて後述する。
(S106)電力制御プログラム1133は、S103でプロセッサモジュール休眠が選択された場合、対象プロセッサモジュール1100に対応するエントリ領域1322eに記録される情報を、「休眠中」に更新する。電力制御プログラム1133は、S103でプロセッサ休眠が選択された場合、選択されたプロセッサ1110(図17のS410の処理において選択されたプロセッサ1110)に対応するエントリ領域1324eに記録される情報を、「休眠中」に更新する。電力制御プログラム1133は、S103でコア休眠が選択された場合、選択された選択されたプロセッサ1110(図17のS420の処理において選択されたコア1111)に対応するエントリ領域1324eに記録される情報を、「コア休眠中」に更新し、更に、一つのコア1111を休眠させるため、選択されたプロセッサ1110に対応したエントリ領域1324cに記録される稼動コア数を、一つ減らす(例えば、稼動コア数がNならば、N−1に更新する)。
その後、電力制御プログラム1133は、選択された休眠方法に応じ、プロセッサ1110、プロセッサモジュール1100またはコア1111を休眠させる。ただし休眠方法が選択されていない場合は、電力制御プログラム1133は何も行わない。
なお、電力制御プログラム1133は、これら一連の処理の間、制御メモリモジュール1320のロックを獲得し、他の電力制御プログラム1133の制御メモリモジュール1320へのアクセスを禁止する。
図17は、プロセッサ休眠方法選択処理のフローチャートである。
(S400)電力制御プログラム1133は、電力制御情報1326が示す省電力レベル(エントリ領域1326a)を調べ、省電力レベルが4の場合にはS401を、省電力レベルが3の場合にはS410を、省電力レベルが2の場合にはS420をそれぞれ行う。
(S401)電力制御プログラム1133は、プロセッサモジュール構成情報1321のプロセッサ番号(エントリ領域1321b)とプロセッサ情報1324のプロセッサ状態(エントリ領域1324e)から、対象プロセッサモジュール1100に存在する稼動プロセッサ1110が一つか二つ以上かを調べる。電力制御プログラム1133は、稼動プロセッサ1110が一つである場合、S402を行い、そうでない場合はS410を行う。
(S402)電力制御プログラム1133は、移行先プロセッサモジュール1100を検索する。移行先プロセッサモジュールの検索処理についての詳細は、図18を用いて後述する。
(S403)電力制御プログラム1133は、S402で移行先プロセッサモジュール1100が見つかっている場合、S404を行う。それ以外の場合、電力制御プログラム1133は、S420を行う。
(S404)電力制御プログラム1133は、プロセッサモジュール休眠を選択し、休眠方法の選択処理を終了する。
(S410)電力制御プログラム1133は、対象プロセッサモジュール1100における一以上の稼動プロセッサから一つのプロセッサ1110を選択し、選択されたプロセッサ1110が休眠した後のプロセッサモジュール1100の現在性能を計算する。その現在性能は、例えば、対象プロセッサモジュールの現在性能から、選択されたプロセッサの現在性能を減算することで算出される。電力制御プログラム1133は、算出された現在性能がプロセッサモジュール要求性能(エントリ1322cに記録されている値)より大きい場合は、S411を行い、そうでない場合は、S420を行う。
(S411)電力制御プログラム1133は、プロセッサ休眠を選択し、休眠方法の選択処理を終了する。
(S420)電力制御プログラム1133は、或る稼動プロセッサにおける二以上の稼動コアから一つ(又は複数)のコアを選択し、選択したコア1111を休眠した後のプロセッサモジュール1100の能力性能を計算する。その能力性能は、例えば、対象プロセッサモジュールの能力性能から、選択されたコアの能力性能を減算することで算出される。電力制御プログラム1133は、算出された能力性能がプロセッサモジュール要求性能(エントリ1322cに記録されている値)より大きい場合は、S421を行い、そうでない場合は、休眠方法を選択せずに休眠方法の選択処理を終了する。
(S421)電力制御プログラム1133は、コア休眠を選択し、休眠方法の選択処理を終了する。
図18は、移行先プロセッサモジュール検索処理のフローチャートである。
(S300)電力制御プログラム1133は、プロセッサモジュール状態情報1322を参照し、対象プロセッサモジュール1100ではない二以上の他のプロセッサモジュール1100が二つ以上の電源系統で稼動中か否かを判断する。電力制御プログラム1133は、稼動中の場合はS301を行い、そうでない場合は処理を終了する。
(S301)電力制御プログラム1133は、他の稼働中のプロセッサモジュール1100のうち一つを、移行可能かどうかの判定対象として選択する。
(S302)電力制御プログラム1133は、プロセッサモジュール状態情報1322を参照し、自身の動作する対象プロセッサモジュール1100の能力性能及び負荷と、判定対象のプロセッサモジュール1110の能力性能及び負荷とを特定する。電力制御プログラム1133は、2つのプロセッサモジュール1100の能力性能比(対象プロセッサモジュールの能力性能/判定対象プロセッサモジュールの能力性能)を計算し、対象プロセッサモジュール1100の負荷と上記算出された能力性能比との積(つまり、判定対象プロセッサモジュール1100の負荷増加見積もり)を計算する。その後、電力制御プログラム1133は、その負荷増加見積もりと判定対象プロセッサモジュール1100の負荷の和(つまり、移行後の負荷見積もり)を計算する。移行後の負荷見積もりが判定対象プロセッサモジュール1100の高負荷閾値(エントリ領域1321fに記録されている値)よりも低い場合、電力制御プログラム1133は、S303を行う。それ以外の場合は、電力制御プログラム1133は、現在の判定対象プロセッサ1110の判定を終了し、S305を実行する。
(S303)電力制御プログラム1133は、対象プロセッサモジュール(言い換えれば移行元プロセッサモジュール)1110の要求性能と、判定対象のプロセッサモジュールの要求性能との和(つまり、判定対象プロセッサモジュールについての移行後の要求性能)を計算する。電力制御プログラム1133は、判定対象プロセッサモジュール1100について、能力性能と移行後の要求性能とを比較する。電力制御プログラム1133は、移行後の要求性能が判定対象プロセッサモジュール1100の能力性能以下の場合、S304を実行する。それ以外の場合は、電力制御プログラム1133は、現在現在の判定対象プロセッサ1110の判定を終了し、S305を実行する。
(S304)電力制御プログラム1133は、検索結果に判定対象プロセッサモジュール1100を追加する(例えば、メモリモジュール1130に一時的に用意された所定の電子的な情報に、判定対象プロセッサモジュール1100のプロセッサモジュール番号を記録する)。
(S305)全ての稼動プロセッサモジュール1100が判定済みである場合、電力制御プログラム1133は、本検索処理を終了する。そうでない場合、電力制御プログラム1133は、S300を行う。
図19は、I/Oコマンド処理移行処理のフローチャートである。
(S500)電力制御プログラム1133は、プロセッサモジュール構成情報1321から、対象プロセッサモジュール1100の担当LDEV(エントリ領域1321c)を読み取り、移行先プロセッサモジュール1100の担当LDEV(エントリ領域1321c)に追加する。その際、電力制御プログラム1133は、対象プロセッサモジュール1110に対応したエントリ領域1322eに記録される情報を、「休眠中」に更新する。また、電力制御プログラム1133は、対象プロセッサモジュールに存在する各プロセッサ1110に対応したエントリ領域1324eに記録される情報を、「休眠中」に更新する。
(S501)電力制御プログラム1133は、移行先プロセッサモジュール1100に、メモリモジュール更新メッセージを送信して、メモリモジュール更新を指示する。メモリモジュール更新メッセージには、自身が動作するプロセッサモジュール1100の担当LDEV番号が含まれる。メッセージを受信した移行先プロセッサモジュール1100の電力制御プログラム1133は、共有メモリモジュール1300上のキャッシュテーブル1327から、移行されるLDEVに関する情報をキャッシュテーブルの複製1136に追加する。また、移行先プロセッサモジュール1100の電力制御プログラム1133は、LDEV構成情報の複製1135についても、同様に更新する。また、移行先プロセッサモジュール1100の電力制御プログラム1133は、追加するLDEVの要求性能(エントリ領域1325f)を、プロセッサモジュールの要求性能(エントリ領域1322c)の値に加算する。これらの処理の終了後に、移行先の電力制御プログラム1133は、移行元プロセッサモジュール1100に完了メッセージを送信する。
(S502)電力制御プログラム1133は、S501の完了メッセージ受信後に、LDEV構成情報の複製1135から、自身が動作するプロセッサモジュール1110の担当LDEVを調べる。そして、電力制御プログラム1133は、フロントエンドモジュール1200にルーティング変更メッセージを送信して、I/Oコマンドのルーティングの変更を指示する。ルーティング変更メッセージには、移動するLDEVのLUNと、移行先プロセッサモジュール1100の番号が含まれている。ルーティング変更を指示された、フロントエンドモジュール1200のFEデータ転送プログラム1232は、ルーティング変更メッセージに示されたLUNの担当プロセッサモジュールの番号を、移行先プロセッサモジュール1110の番号に更新。その後、FEデータ転送プログラム1232は、完了メッセージを電力制御プログラム1133に送信する。また、FEデータ転送プログラム1232は、それ以降の移行元プロセッサ1110に対するI/Oコマンドを、移行先プロセッサ1110に転送する。電力制御プログラム1133は、完了メッセージ受信後I/O処理の移行を完了する。
図20は、移行先プロセッサモジュール高負荷時のプロセッサ起動制御処理のフローチャートである。
(S600)図19での移行先プロセッサモジュールで実行される電力制御プログラム1133は、図16のS101について説明した方法にて、そのプロセッサモジュール1100の負荷を計算する。
(S601)電力制御プログラム1133は、S600で得た負荷が、そのプロセッサモジュール1100に対応した高負荷閾値(エントリ領域1321f)以上の場合、S602を実行し、そうでない場合はプロセッサ起動制御を終了する。
(S602)電力制御プログラム1133は、プロセッサ情報1324を参照し、そのプロセッサモジュール1100内にコア休眠中のプロセッサ1110がないか調べる。電力制御プログラム1133は、休眠中のコアが存在しない場合、S603を行い、存在する場合はS610を行う。
(S603)電力制御プログラム1133は、プロセッサ情報1324を参照し、そのプロセッサモジュール内に休眠中のプロセッサ1110がないか調べる。電力制御プログラム1133は休眠中のプロセッサが存在しない場合、S604を行い、存在する場合はS620を行う。
(S604)電力制御プログラム1133は、プロセッサモジュール構成情報1321の担当LDEV(エントリ領域1321c)と初期担当LDEV(エントリ領域1321d)から、現在担当しているLDEVに他のプロセッサモジュール1100から移行されてきたものがあるかどうかを調べる(言い換えれば、担当LDEVと初期担当LDEVが異なっているか否かを調べる)。もし、移行されてきたLDEVがある場合、電力制御プログラム1133は、S605を実行し、無い場合、プロセッサ起動制御を終了する。
(S605)電力制御プログラム1133は、図19での移行元プロセッサモジュールを再起動する。その後、電力制御プログラム1133は、移行元プロセッサモジュールに対応したエントリ領域1322eに記録される情報を、「稼動中」に更新する。また、電力制御プログラム1133は、移行元プロセッサモジュール1100に含まれる各プロセッサに対応したエントリ領域1324eに記録される情報を、「稼動中」に更新し、その各プロセッサに対応したエントリ領域1324dに記録される値を、そのプロセッサが有するコアの数に更新する。
(S606)電力制御プログラム1133は、図19を用いて説明した方法で移行されてきたLDEVのI/Oコマンド処理を、図19における移行元のプロセッサモジュール1100に移行する。
(S610)電力制御プログラム1133は、図19での移行先プロセッサモジュール内の或る稼動プロセッサにおける全ての休眠コアを起動する。次に、電力制御プログラム1133は、それらのコア1111を有する稼動プロセッサ1110に対応したエントリ領域1324eに記録される情報を、「コア休眠」から「稼動中」に更新する。また、電力制御プログラム1133は、その稼動プロセッサ1110に対応したエントリ領域1324cに記録される情報を、そのプロセッサ1110が有するコアの数に更新する。
(S620)電力制御プログラム1133は、図19での移行先プロセッサモジュール内の或る休眠プロセッサ1110を起動する。次に、電力制御プログラム1133は、その或る休眠プロセッサ1110に対応したエントリ領域1324eに記録される情報を、「稼動中」に更新する。また、電力制御プログラム1133は、その或る休眠プロセッサ1110に対応したエントリ領域1324cに記録される情報を、そのプロセッサ1110が有するコアの数に更新する。
なお、電力制御プログラム1133は、これら一連の処理の間、制御メモリモジュール1320のロックを獲得し、他の電力制御プログラム1133の制御メモリモジュール1320へのアクセスを禁止する。
図21は、プロセッサ障害回復処理のフローチャートである。
(S700)障害回復プログラム1134は、一定時間以上、他の稼動プロセッサモジュール1100からハートビート信号を受信しない場合や、障害発生が通知された場合、その通知元或いはハートビート信号の送信元のプロセッサモジュール1100に障害があることを検出する。以下、そのプロセッサモジュール1100を「障害プロセッサモジュール1100」と言う。
(S701)障害回復プログラム1134は、移行先プロセッサモジュール1100を選択する。例えば、障害回復プログラム1134は、一以上の稼動プロセッサモジュール1100のうち、最も低負荷な稼動プロセッサモジュール1100を選択する。
(S702)障害回復プログラム1134は、障害プロセッサモジュール1100が行うI/Oコマンド処理をS701で選択された移行先プロセッサモジュール1100に転送することをフロントエンドモジュール1200に指示する。フロントエンドモジュール1100のFEデータ転送プログラム1232は、障害回復プログラム1134からの指示に応答して、障害プロセッサモジュール1100の担当LUNを、移行先プロセッサモジュール1100の担当LUNに更新する(つまりルーティング情報1231を更新する)。その後、FEデータ転送プログラム1232は、更新後のルーティング情報1231に基づいたI/Oコマンド転送制御を開始する。
(S703)障害回復プログラム1134は、移行先プロセッサモジュール1100に対応するエントリ領域1321cに、障害プロセッサモジュール1100の担当LDEVの番号を追記する。また、電力制御プログラム1133は、移行先プロセッサモジュール1100に対応したエントリ領域1322cに記録されている値に、障害プロセッサモジュール1100の担当LDEVの要求性能を追加し、更に、障害プロセッサモジュール1100に対応したエントリ領域1322eに記録される情報を、「障害」に更新する。
(S704)最後に、障害回復プログラム1134は、障害プロセッサモジュール1100への電力供給を遮断する(つまり障害プロセッサモジュール1100を休眠させる或いは閉塞する)。
以上が、第一の実施形態についての説明である。なお、例えば、プロセッサモジュール1100への電力制御方法として、休眠させる方法を例示したが、他に動作周波数を抑制することも可能である。
<第二の実施形態>。
以下、本発明の第二の実施形態を説明する。第二の実施形態では、コンピュータシステムの構成は第一の実施形態と実質的に同様のため、説明を省略する。
図22は、第二の実施形態の概要を示した図である。
第二の実施形態では、キャッシュメモリモジュール1340の消費電力が削減される。キャッシュメモリモジュール1340の動作について説明する。ストレージシステム100は、キャッシュメモリモジュール1340に、I/Oデータ(ホスト200からのI/Oコマンドに伴って読み書きされるデータ)をキャッシュデータ1341として格納することで、ホスト200からのI/Oコマンドの処理を高速化する。ストレージシステム100は、データ書き込み時には、I/Oデータをキャッシュデータ1341として保存することで、I/Oデータの記憶ディスク筐体2000への書き込みを、I/Oコマンドの受信と非同期に行う。また、ストレージシステム100は、データ読み込みにおいて、キャッシュヒット時には、キャッシュデータをホスト200へ転送する。ここでいう「キャッシュヒット」とは、I/Oコマンドに伴うI/Oデータがキャッシュメモリモジュール1340から見つかることをいう。
ストレージシステム100は、キャッシュメモリモジュール1340を大容量化しキャッシュヒット率を上げることで、データ読み込みの高速化を図ることができる。ここでいう、キャッシュヒット率とは、I/Oコマンド処理時にキャッシュヒットとなる確率をいう。キャッシュメモリモジュール1340が大容量となると、消費電力の増加が懸念される。
そこで、第二の実施形態では、ストレージシステム100が、I/Oコマンド数が少ない場合、キャッシュメモリモジュール1340の一部領域を休眠させ、消費電力を削減する。
第二の実施形態では、次のような方法でキャッシュメモリモジュール1340の休眠を実現する。
電力制御を実行するプロセッサモジュール1100は、キャッシュメモリモジュール1340について、単位容量あたりのI/Oコマンド数を監視する。プロセッサモジュール1100は、そのI/Oコマンド数が閾値以下になった場合、低アクセス頻度のメモリブロックを休眠させる。ここでいうメモリブロックとは、キャッシュメモリモジュール1340の、休眠制御が可能な物理的または論理的な分割単位のことをいう。
ただし、プロセッサモジュール1100は、メモリブロックを休眠させる前に、そのメモリブロックに記憶されている未書き込みのキャッシュデータ1341を、記憶ディスク筐体2000にデステージする。なお、プロセッサモジュール1100がデータ消失を防ぐため、メモリブロックの休眠前に未書き込みのキャッシュデータ1341をデステージする処理は例示にすぎない。他に、プロセッサモジュール1100がメモリブロックの休眠前に、未書き込みのキャッシュデータ1341を他のメモリブロック(キャッシュデータの存在しないメモリブロック、或いは、上書きされても構わないキャッシュデータを記憶するメモリブロック)に移動することも可能である。
なお、キャッシュメモリモジュールとしてフラッシュメモリなどの不揮発性のメモリが用いられている場合は、デステージが行われなくてもよい。その場合、プロセッサモジュール1100は、休眠メモリブロック上のキャッシュデータにアクセスするならば、そのメモリブロックを再起動し、起動完了後、そのメモリブロックにアクセスする。
また、プロセッサモジュール1100は、メモリブロックを休眠させる前に、休眠後のアクセス性能の見積もりがLDEVの要求性能を満たすことを確認する。ここでいうアクセス性能とは、一秒間に処理可能な最大I/Oアクセス数のことをいう。I/Oアクセス数とは、キャッシュメモリモジュール1341または記憶ディスク筺体2000へのアクセス数であり、キャッシュヒット数とキャッシュミス数の和となる。ここでいう「キャッシュミス」とは、キャッシュデータ1341上に、アクセス対象のキャッシュデータが格納されてないことをいう。
また、ストレージシステム100は、低アクセス閾値および高アクセス閾値を管理用端末3000から受け付ける。管理者は、性能と省電力効果のトレードオフを設定することが可能である。なお、低アクセス閾値および高アクセス閾値は、例えば、単位容量あたりのI/Oコマンド数と比較されるが、それに代えて、キャッシュメモリモジュール1340への総アクセス数と比較されても良い。
以下、第二の実施形態について詳細に説明する。
図23を用いて、第二の実施形態のストレージシステム100のプログラムおよび各種データを説明する。なお、第一の実施形態と同等のものについては説明を省略する。図中で太線にて示されるデータやプログラムは、第一の実施形態では存在しない、もしくは第一の実施形態に対して変更点を有することを示す。
I/Oコマンド処理プログラム1131は、第一実施形態の処理に加え、キャッシュメモリ全体でのキャッシュヒット率、I/Oコマンド数を監視し、定期的に後述するキャッシュメモリモジュール情報1328に書き込む。また、I/Oコマンド処理プログラム1131は、メモリブロックごとのキャッシュヒット数を監視し、定期的に後述するメモリブロック情報1328に記録する。
電力制御プログラム1133は、定期的に後述するキャッシュメモリ休眠制御を行う。キャッシュメモリ休眠制御の詳細は、図26〜図27を用いて後述する。また、電力制御プログラム1133は、休眠メモリブロックがある場合には、定期的にキャッシュメモリ起動制御を行う。キャッシュメモリ起動制御の詳細は、図28を用いて後述する。
キャッシュメモリモジュール情報1328とメモリブロック情報1329は、図24と図25を用いて後述する。
管理I/Fプログラム3031は、ディスプレイ3040上に管理画面を表示する。管理者は、管理画面を通して、後述するキャッシュメモリモジュールの1340低アクセス閾値と高アクセス閾値を入力する。管理I/Fプログラム3031は、管理内容(入力された低アクセス閾値と高アクセス閾値)を含んだコマンドをプロセッサモジュール1100に管理コマンドとして送信する。
図24は、キャッシュメモリモジュール情報1328の構成を示す。
キャッシュメモリモジュール情報1328は、例えばテーブルであり、キャッシュメモリモジュール1340の性能や稼動状態、設定に関する情報を含む。キャッシュメモリモジュール情報1328は、エントリ領域1328aからエントリ領域1328hを有する。
エントリ領域1328aには、キャッシュヒット時におけるストレージシステム100の単位時間(例えば一秒間)に処理可能な最大I/Oアクセス数(キャッシュヒット性能)が格納される。エントリ領域1328bには、キャッシュミス時におけるストレージシステム100の一秒間に処理可能な最大I/Oアクセス数(キャッシュミス性能)が格納される。エントリ領域1328cには、キャッシュヒット率が格納される。エントリ領域1328dには、直近の一秒間にホストから受信したI/Oコマンド数が格納される。エントリ領域1328eには、キャッシュメモリモジュール1340の稼働メモリ領域のサイズ(休眠してないメモリブロックのサイズの総和、以下、稼動メモリサイズ)が格納される。エントリ領域1328fには、キャッシュメモリモジュール1340に対するアクセス頻度が低アクセス頻度であるかどうかの基準となる閾値(低アクセス閾値)が格納される(例えば、本実施形態では、キャッシュメモリモジュール1340のアクセス頻度の評価方法として、一秒間のキャッシュメモリモジュール1MBあたりのI/Oコマンド数が用いられる)。エントリ領域1328gには、キャッシュメモリモジュール1340のアクセス頻度が高アクセス頻度であるかどうかの基準となる閾値(高アクセス閾値)が格納される。エントリ領域1328hには、ストレージシステム100が一秒間に処理を要求されるI/Oコマンド数(要求性能)が格納される。その要求性能は、ストレージシステム100に存在する全てのLDEVの要求性能の総和である。
なお、キャッシュヒット性能(エントリ領域1328a)とキャッシュミス性能(エントリ領域1329b)は、ストレージシステム100の保守員または管理者が手動で設定するか、プロセッサモジュール1100が稼動実績または装置の仕様から自動的に計算されても良い。
図25は、メモリブロック情報1329の構成を示す。
メモリブロック情報1329は、例えばテーブルであり、メモリブロックの構成や稼動状態に関する情報を含む。メモリブロック情報1329は、メモリブロックごとに、エントリ領域1329aからエントリ領域1329e有する。
エントリ領域1329aには、メモリブロックの識別番号(メモリブロック番号)が格納される。エントリ領域1329bには、キャッシュメモリモジュール1340内におけるメモリブロックの先頭物理アドレス(開始アドレス)が格納される。エントリ領域1329cには、メモリブロックのサイズ(領域サイズ、例えば単位はメガバイト)が格納される。エントリ領域1329dには、メモリブロックの単位時間(例えば一秒間)あたりのキャッシュヒット数が格納される。エントリ領域1329eには、メモリブロックの状態を表す情報、例えば「稼働中」、「休眠中」などが格納される。
続いて、第二の実施形態で行われる各種処理を、図26から図28を用いて説明する。
図26は、キャッシュメモリ休眠制御処理のフローチャートである。
(S800)電力制御プログラム1133は、制御メモリモジュール1320から、キャッシュメモリモジュール情報1328、メモリブロック情報1329及び電力制御情報1326を読み取る。
(S801)電力制御プログラム1133は、キャッシュメモリモジュール情報1328の、I/Oコマンド数(エントリ領域1328d)と稼動メモリサイズ(エントリ領域1328e)の商から、キャッシュメモリモジュール1340の1MBあたりのアクセス頻度を計算する。電力制御プログラム1133は、算出されたアクセス頻度と低アクセス閾値(エントリ領域1328f)とを比較し、アクセス頻度が低アクセス閾値以下の場合には、S802を行い、そうでない場合は、キャッシュメモリ休眠制御を終了する。
(S802)電力制御プログラム1133は、メモリブロック情報1329を参照し、最もキャッシュヒット数(エントリ領域1329dに記録されている値)が少ない稼動メモリブロックを、休眠対象として選択する。
(S803)電力制御プログラム1133は、キャッシュメモリモジュール1340のキャッシュヒット性能a(エントリ領域1328a)、キャッシュミス性能b(エントリ領域1328b)、キャッシュヒット率c(エントリ領域1328c)、稼動メモリサイズd(1328e)、及び、休眠対象メモリブロックのサイズe(エントリ領域1329c)から、移行後の性能の見積もりを計算する。電力制御プログラム1133は、下記(式1)及び(式2)から、休眠後のキャッシュヒット率見積もりx、性能見積もりyを計算する。
x = c × (d−e)/d・・・・・・(式1)
y = a × x + b ×(1−x)・・・・・・(式2)。
(S804)電力制御プログラム1133は、S803で得た性能見積もりyと要求性能(1328h)とを比較し、性能見積もりyが要求性能以上の場合、S805を行い、そうでない場合はキャッシュ休眠制御を終了する。
(S805)電力制御プログラム1133は、キャッシュメモリ休眠を行う。これにより、S802で選択した休眠対象メモリブロックが休眠させられる。キャッシュメモリ休眠の詳細については、図27を用いて後述する。
図27は、キャッシュメモリ休眠の処理のフローチャートである。
(S900)電力制御プログラム1133は、キャッシュテーブル1327を参照し、休眠対象メモリブロック内に記憶されているデータブロックが記憶ディスク2000に未書き込みのデータブロックであるかどうかを調べる。未書込みのデータブロックであれば、電力制御プログラム1133は、その未書き込みデータブロックの記憶ディスク筐体2000へのデステージを行う。
(S901)電力制御プログラム1133は、キャッシュテーブル1327から、休眠対象メモリブロックに関する情報を削除する。また、電力制御プログラム1133は、全てのプロセッサモジュール1100に、休眠対象メモリブロックの識別番号を通知する。その通知を受けたプロセッサモジュール1100では、電力制御プログラム1133が、キャッシュテーブルの複製1134から、休眠対象メモリブロック(通知された識別番号に対応するメモリブロック)に関する情報を削除する。
(S902)電力制御プログラム1133は、メモリブロック情報1329におけるエントリ領域1329eに記録される情報を、「休眠中」に更新する。また、電力制御プログラム1133は、キャッシュメモリモジュール1328の稼動メモリサイズ(エントリ領域1328e)を、休眠対象メモリブロックの領域サイズ(エントリ領域1329c)を引いた値に更新する。最後に、電力制御プログラム1133は、休眠対象メモリブロックを休眠させる。
図28は、キャッシュメモリ起動制御処理のフローチャートである。
(S1000)電力制御プログラム1133は、S800と同様にキャッシュメモリモジュール1340の情報を取得する。
(S1001)電力制御プログラム1133は、S801と同様に、キャッシュメモリモジュール1340のアクセス頻度を計算する。電力制御プログラム1133は、算出されたアクセス頻度と高アクセス閾値(エントリ領域1328g)とを比較し、そのアクセス頻度が高アクセス閾値以上の場合、S1002を行い、そうでない場合は、キャッシュメモリ起動制御を終了する。
(S1002)電力制御プログラム1133は、休眠メモリブロックを一つ選び、その休眠メモリブロックを再起動する。電力制御プログラム1133は、メモリブロック情報1329における、起動するメモリブロックに対応したエントリ領域1329eに記録される情報を、「稼働中」に更新する。また、電力制御プログラム1133は、キャッシュメモリモジュール情報1328の稼動メモリサイズ(エントリ領域1328e)を、起動させるメモリブロックの領域サイズ(エントリ領域1329c)を足した値に更新する。
以上が、第二の実施形態についての説明である。なお、例えば、メモリブロック毎に休眠することに代えて又は加えて、キャッシュメモリモジュールをLDEVごとに論理分割された領域ごとに休眠させることも可能である。
<第三の実施形態>。
以下、本発明の第三の実施形態を説明する。第三の実施形態では、コンピュータシステムの構成は第一の実施形態と実質的に同様のため、説明を省略する。
図29は、第三の実施形態の概要を示した図である。
第三の実施形態では、記憶ディスク筐体2000の消費電力が削減される。
記憶ディスク筐体2000は、複数の記憶ディスク2010から構成されるRAIDグループごとに、一以上のLDEVが用意され、LDEVに、I/Oデータが格納される。ストレージシステム100は、大量のデータを格納するために多くの数の記憶ディスク2010が必要となり、これらの消費電力が問題となる。そのため、第三の実施形態では、ストレージシステム100が、一定時間データ入出力のないRAIDグループを構成する記憶ディスク2010を休眠させ、消費電力を削減する。なお、以降の説明では、説明を分かりやすくするために、RAIDグループを構成する記憶ディスク2010の休眠を単に、RAIDグループの休眠と表現する。
なお、RAIDグループの消費電力の削減について考察すると、例えば以下の(課題1)及び(課題2)を挙げることができる。
(課題1)休眠RAIDグループを基にしたLDEVが存在する場合、ホスト200からのI/Oコマンドに伴いそのLDEVにデータ入出力が発生するたびに、休眠RAIDグループを構成する全ての記憶ディスクの再起動が必要となる。このため、ホスト200に対するレスポンスの速度が遅くなる。また、LDEVに対するデータ入出力のたびにRAIDグループを起動すると、そのデータ入出力の頻度によっては、RAIDグループを常に稼動している場合に比して、多くの電力を消費してしまうおそれがある。
(課題2)管理者が性能と電力削減量のトレードオフを設定することができない。
以上の課題(課題1)及び(課題2)をそれぞれ解決するために、第三の実施形態では、以下の(工夫1)及び(工夫2)が施されている。
(工夫1)コントローラ1000は、低負荷RAIDグループを発見した場合、そのRAIDグループに含まれる全てのLDEVを、他のRAIDグループに移動してから、低付加RAIDグループを休眠させる。ここでいうLDEVの移動とは、LDEVの物理的な格納場所をホストから透過的に変更することをいう。ただし、RAIDグループの負荷の評価方法は、単位時間(例えば一秒間)あたりに処理可能なディスクアクセス数と、現在のディスクアクセス数の比とする。また、ディスクアクセス数とは、実際の記憶装置へのアクセス数のことをいい、キャッシュデータへのアクセスは含まない。その結果、休眠したRAIDグループは、ホスト200からアクセスされなくなり、再起動する必要がなくなる。
なお、LDEVの移動に伴い、移動先のRAIDグループの負荷が高負荷になる恐れや、LDEVの要求性能を満たせなくなる恐れがある。そのため、更なる工夫として、コントローラ1000は、LDEVを移動する前に、移動先のRAIDグループの負荷が高負荷にならないかどうかや、LDEV移動を行ってもLDEVの要求性能をみたすかどうかを判断し、高負荷にならずLDEVの要求性能を満たす場合に、LDEVの移動を実行する。
また、LDEV移動は、コントローラ1000や記憶ディスク2010に負荷がかかる。さらに、全てのRAIDグループが同等の信頼性や性能を有するとは限らない。そのため、LDEV移動により、管理者の意図に反した、ストレージシステム100の一時的な負荷上昇やLDEVの信頼性や性能の変化が発生する恐れがある。そのため、更なる工夫として、ストレージシステム100は、管理者に警告メッセージを通知し、RAIDグループの休眠を許可するかどうか選択させることで、管理者の意図に反したLDEV移動を防ぐ。
(工夫2)ストレージシステム100が、管理用端末3000から、休眠を許可するRAIDグループ、低アクセス閾値、高アクセス閾値を受け付ける。管理者は、性能と電力削減量のトレードオフを設定することができる。
以下、第三の実施形態について詳細に説明する。
図30を用いて、第三の実施形態におけるストレージシステム100のプログラムおよび各種データを説明する。なお、第一の実施形態と同等のものについては説明を省略する。図中で太線にて示されるデータやプログラムは、第一の実施形態では存在しない、もしくは第一の実施形態に対して変更点を有することを示す。
メモリモジュール1130に格納されたLDEV移動プログラム1137をプロセッサ1110が実行することで、LDEV移動処理が行われる。LDEV移動処理は、集積回路化するなどして、ハードウェアで実現することもできる。
I/Oコマンド処理プログラム1131は、第一の実施形態で説明した処理の他に、直近の一秒あたりの各LDEVに対するI/Oコマンド数を後述するLDEV状態情報1330に書き込む。また、I/Oコマンド処理プログラム1131は、定期的(又は不定期的)に、各RAIDグループのディスクアクセス数、空き容量を調べ、後述するRAIDグループ情報1331を更新する。
電力制御プログラム1133は、定期的(又は不定期的)に、ディスク休眠制御を行う。ディスク休眠制御の詳細については、図34〜図35を用いて後述する。また、電力制御プログラム1133は、休眠RAIDグループがある場合には、定期的(又は不定期的)に、ディスク起動制御を行う。ディスク起動制御の詳細については、図36を用いて後述する。
LDEV移動プログラム1137は、指定されたLDEVを、指定されたRAIDグループに移動する。LDEV移動プログラム1137は、LDEVを移動する前に、移動先のRAIDグループに移動するLDEVと同容量の領域を確保する。次に、LDEV移動プログラム1137は、移動するLDEVのデータを、確保した領域にコピーする。次に、LDEV移動プログラム1137は、LDEV構成情報1325の、移動LDEVのRAIDグループ番号(1325b)および開始アドレス(1325c)の値をそれぞれ、移動先RAIDグループ番号、および確保した領域の開始アドレスに更新する。次に、LDEV移動プログラム1137は、共有メモリモジュール1300に記憶されているLDEV構成情報1325を更新する。その際、LDEV移動プログラム1137は、全てのプロセッサモジュール1100に対して、LDEV構成情報の複製1135の更新を指示する。最後に、LDEV移動プログラム1137は、移動元LDEVに記憶されているデータを消去する。
制御メモリモジュール1320の、LDEV状態情報1330、RAIDグループ情報1331及び電力制御情報1326に関しては、図31から図33を用いて後述する。
管理I/Fプログラム3031は、第一の実施形態の処理のほかに、休眠を許可するRAIDグループ、警告設定、RAIDグループごと低負荷閾値、高負荷閾値の入力を受け付ける管理画面をディスプレイ3040に表示する。また、管理I/Fプログラム3031は、その管理画面を介して入力された種々の情報を含んだコマンドを管理コマンドとしてプロセッサモジュール1100に通知する。
続いて、図31から図33を用いて、各種情報の構成について説明する。
図31は、LDEV状態情報1330の構成を示した図である。
LDEV状態情報1330は、例えばテーブルであり、LDEVの稼動状態に関する情報を含む。LDEV状態情報1330は、LDEVごとに、エントリ領域1330a及び1330bを有する。エントリ領域1330aには、LDEVの識別番号(LDEV番号)が格納される。エントリ領域1330bには、LDEVに対する直近の一秒間のI/Oコマンド数が格納される。
図32は、RAIDグループ情報1331の構成を示した図である。
RAIDグループ情報1331は、例えばテーブルであり、RAIDグループの性能、構成、稼動状態に関する情報を含む。RAIDグループ情報1331は、RAIDグループごとに、エントリ領域1331aからエントリ領域1331jを有する。
エントリ領域1331aには、RAIDグループの識別番号(RAIDグループ番号)が格納される。エントリ領域1331bには、RAIDグループが一秒間あたりに処理可能なディスクアクセス回数(RAIDグループ能力性能)が格納される。エントリ領域1331cには、RAIDグループに要求される一秒間あたりのディスクアクセス回数(RAIDグループ要求性能)が格納される。RAIDグループの要求性能は、そのRAIDグループにある一以上のLDEVの要求性能の総和に所定の計数を掛けた値となる。ただし、計数は、例えば一般的なキャッシュミス率を基に定められる。エントリ領域1331dには、RAIDグループにあるLDEVの識別番号が格納される。エントリ領域1331eには、RAIDグループに最初に形成されたLDEVの識別番号が格納される。エントリ領域1331fには、一秒間あたりのディスクアクセス回数(RAIDグループ現在性能)が格納される。エントリ領域1331gには、現在使われていない記憶領域のサイズ(空き容量)が格納される。エントリ領域1331hには、RAIDグループの負荷が低負荷であるかどうかの基準となる閾値(低負荷閾値)が格納される。エントリ領域1331iには、RAIDグループの負荷が高負荷であるかどうかの基準となる閾値(高負荷閾値)が格納される。エントリ領域1331jには、RAIDグループの状態を示す情報として、例えば「稼動中」か「休眠中」が格納される。
なお、RAIDグループ能力性能は、ストレージシステム100の保守員または管理者が手動で設定されても良いし、ストレージシステム100が稼動実績または装置の仕様から自動的に設定されても良い。
図33は、第三の実施形態における電力制御情報1326の構成を示した図である。
電力制御情報1326は、電力制御に関する情報を含む。電力制御情報1326は、エントリ領域1326bとエントリ領域1326cを有する。エントリ領域1326bに、休眠許可RAIDグループ(休眠を許可するRAIDグループ)の識別番号が格納される。エントリ領域1326cに、RAIDグループの休眠前に管理者に通知するかどうかを表す情報が格納される。
続いて、第三の実施形態で行われる各種処理について、図34から図36を用いて説明する。
図34は、ディスク休眠制御処理のフローチャートである。
(S1100)電力制御プログラム1133は、制御メモリモジュール1320から、LDEV構成情報1325、LDEV状態情報1330、RAIDグループ情報1331及び電力制御情報1326を読み込む。
(S1101)電力制御プログラム1133は、電力制御情報1326を参照して、一以上の休眠許可RAIDグループを特定し、且つ、各休眠許可RAIDグループについて、RAIDグループ性能(エントリ領域1331b)とRAIDグループ現在性能(エントリ領域1331f)を特定し、各休眠許可RAIDグループの負荷を計算する。負荷は、例えば、RAIDグループ能力性能とRAIDグループ現在性能の比から求められる(例えば、RAIDグループ能力性能に対するRAIDグループ現在性能の百分率である)。電力制御プログラム1133は、各休眠許可RAIDグループについて、負荷と低負荷閾値(エントリ領域1331h)とを比較し、負荷が低負荷閾値以下である休眠許可RAIDグループが少なくとも一つある場合、S1102を行い、そうでない場合はディスク休眠制御を終了する。
(S1102)電力制御プログラム1133は、S1101で低負荷と判断したRAIDグループ(負荷が低負荷閾値以下の休眠許可RAIDグループ)のうち、一つを、休眠するRAIDグループの候補(休眠RAIDグループ候補)として選択する。
(S1103)電力制御プログラム1133は、RAIDグループ情報1331を参照し、S1102で選択した休眠RAIDグループ候補に存在するLDEVを特定する。電力制御プログラム1133は、特定された各LDEVについて、LDEV移動先となるRAIDグループを検索する。LDEV移動先の検索の詳細は、図35を用いて後述する。
(S1104)電力制御プログラム1133は、S1103の結果から、全てのLDEVに移動先がある場合はS1105を行い、そうでない場合はディスク休眠制御を終了する。
(S1105)電力制御プログラム1133は、電力制御情報1326の警告設定(エントリ領域1326c)が有効の場合、S1106を行い、そうでない場合はS1107を行う。
(S1106)電力制御プログラム1133は、管理用端末3000に、休眠するRAIDグループの識別番号と、各LDEVの移動先のRAIDグループの識別番号を含む警告メッセージを送信する。管理用端末3000の管理I/Fプログラム3031は、その警告メッセージを受信したら、ディスプレイ3040に警告メッセージを表示し、管理者に休眠を許可するか質問する。管理者は、上記警告メッセージの内容を確認し、RAIDグループの休眠を許可するかどうかを入力する。電力制御プログラム1133は、管理者が休眠を許可した場合S1107を行い、許可しない場合、ディスク休眠制御を終了する。
(S1107)電力制御プログラム1133は、S1102で選択した休眠RAIDグループ候補(移動元RAIDグループ)におけるすべてのLDEVを、S1103の検索処理で発見されたそれぞれの移動先RAIDグループに移動する。実際の移動処理は、LDEV移動プログラム1137が行う。LDEV移動プログラム1137は、LDEVの移動完了後、LDEV移動完了を電力制御プログラム1133に通知する。
(S1108)電力制御プログラム1133は、その通知を受けたならば(つまり、移動対象の全てのLDEVの移動完了後に)、RAIDグループ情報1331にアクセスし、移動元RAIDグループ及び移動先RAIDグループのそれぞれについて、RAIDグループ要求性能(エントリ領域1331b)、LDEVの識別番号(エントリ領域1331d)、空き容量(エントリ領域1331f)、及び、RAIDグループの状態(エントリ領域1331j)を更新する。
図35は、LDEV移動先検索処理のフローチャートである。
(S1200)電力制御プログラム1133は、LDEVの移動先として判定対象とするRAIDグループを選択する。ただし、電力制御プログラム1133は、判定対象として、まだ判定を行っていないRAIDグループのうち、S1100で計算した負荷の低いRAIDグループから順に選択するものとする。
(S1201)電力制御プログラム1133は、LDEV構成情報1325とRAIDグループ情報1331を参照し、LDEVの領域サイズ(1325d)と判定対象RAIDグループの空き容量(1331g)を特定し、それらを比較する。LDEVの領域サイズが判定対象RAIDグループの空き容量以下の場合、電力制御プログラム1133は、S1202を行い、そうでない場合はS1210を行う。
(S1202)電力制御プログラム1133は、LDEV状態情報1330とRAIDグループ情報1331を参照し、移動するLDEVのI/Oコマンド数(エントリ領域1330b)と判定対象RAIDグループのディスクアクセス数(エントリ領域133f)の和から、移動後の負荷見積もりを計算する。ただし、判定対象とするRAIDグループが他のLDEVの仮移行先となっている場合、そのLDEVのI/Oコマンド数(エントリ領域1330b)についても、移動後のアクセス数見積もりに加算する。次に、電力制御プログラム1133は、RAIDグループ情報1331を参照し、判定対象RAIDグループの能力性能(エントリ領域1331b)と移動後のディスクアクセス数見積もりの比(例えば、その能力性能に対する移動後のディスクアクセス数見積もりの百分率)、つまり負荷見積もりを計算する。電力制御プログラム1133は、負荷見積もりと高負荷閾値を比較し、負荷見積もりが高負荷敷居値以上の場合、S1203を行い、そうでない場合はS1210を行う。
(S1203)電力制御プログラム1133は、LDEV構成情報1325とRAIDグループ情報1331を参照し、判定対象RAIDグループの要求性能(エントリ領域1331d)と、移行するLDEVの要求性能(1325f)の和から、移行後の要求性能見積もりを求める。ただし、判定対象とするRAIDグループが他のLDEVの仮移行先となっている場合、当該他のLDEVの要求性能(エントリ領域1330b)も、移行後の要求性能見積もりに加算する。電力制御プログラム1133は、RAIDグループ情報1331を参照し、要求性能見積もりが、RAIDグループ能力性能(1331b)よりも小さい場合、S1204を行い、そうでない場合はS1210を行う。
(S1204)電力制御プログラム1133は、判定対象のRAIDグループを仮移動先として、LDEV移動先の検索を終了する。
(S1210)電力制御プログラム1133は、未判定のRAIDグループが存在する場合、S1200を行い、そうでない場合はLDEV移動先の検索を終了する。
図36は、ディスク起動制御処理のフローチャートである。
(S1300)電力制御プログラム1133は、S1100と同様に、制御メモリモジュール1320からRAIDグループに関する情報を読み込む。
(S1301)電力制御プログラム1133は、S1101と同様の方法で、LDEVが移動されているRAIDグループの負荷見積もりを計算する。電力制御プログラム1133は、全ての移動先RAIDグループの負荷見積もりが高負荷閾値(エントリ領域1331g)以下の場合、ディスク起動制御を終了し、そうでない場合はS1302を行う。
(S1302)電力制御プログラム1133は、LDEVの移動元のRAIDグループを再起動する。次に、電力制御プログラム1133は、RAIDグループ情報1133の、再起動したRAIDグループに対応するエントリ領域1331jに記録される情報を、「稼動中」に更新する。ただし、すでにLDEVの移動元のRAIDグループが起動している場合、電力制御プログラム1133は何も行わない。
(S1303)電力制御プログラム1133は、S1106と同じ方法でLDEVを元のRAIDグループに移動する。
以上が、第三の実施形態についての説明である。なお、例えば、LDEVの移動先のRAIDグループの検索処理では、信頼性や性能の制限を加えることも可能である。
<第四の実施形態>
図37を用いて、本発明の第四の実施形態に係るコンピュータシステムの構成を説明する。
第四の実施形態では、ストレージシステム100に外部接続ストレージシステム600が接続される。それ以外の構成は、第一の実施形態と実質的に同等のため、説明は省略する。
外部接続ストレージシステム600は、ファイバチャネルやFCPを用いてストレージシステム100内部のバックエンドモジュール1600に接続される。バックエンドモジュール1600はプロセッサモジュール1100の指示に従い、ストレージシステム100と外部接続ストレージシステム600間のデータ転送を行う。外部接続ストレージシステム600は、外部からの休眠指示または起動指示に応答して、休眠や再起動する機能を有する。
図38は、第四の実施形態の概要を示した図である。
第四の実施形態では、外部接続ストレージシステム600の消費電力が削減される。
外部接続ストレージシステム600について説明する。外部接続ストレージシステム600は、それ自身もストレージシステム100と同様に、ホスト200に対してLDEVを提供する機能を有するストレージシステムである。ストレージシステム100は、外部接続ストレージシステム600のLDEVを仮想的に自らのLDEVとしてホスト200に提供する。ストレージシステム100は、外部接続ストレージシステム600のLDEVへのI/Oコマンド受信時には、外部接続ストレージシステム600を仮想的にストレージシステム100内のRAIDグループとして制御する。
ストレージシステム100に複数の外部接続ストレージシステム600を接続し、一元管理することで、管理の容易化を図ることができる。このようなシステム構成では、外部接続ストレージシステム600による消費電力が問題となる。第四の実施形態では、外部接続ストレージシステム600のうち、アクセス頻度の低い外部接続ストレージを休眠させることにより消費電力が削減される。
外部接続ストレージシステム600を休眠することにより、第三の実施形態におけるRAIDグループの休眠時と実質的に課題が発生することが考えられる。そのため、第四の実施形態では、以下のような工夫で、その課題の解決が図られる。
すなわち、ストレージシステム100は、外部接続ストレージシステム600のLDEVを、その他の外部接続ストレージシステム600、または自身の記憶ディスク筺体2000内のRAIDグループに移動し、その後、外部接続ストレージシステム600を休眠させる。ストレージシステム100は、外部接続ストレージシステム600を、仮想的なRAIDグループとして管理することにより、第三の実施形態と同等の電力制御を行う。
以下、第三の実施形態との相違点を主に説明する。
第四の実施形態におけるストレージシステム100のプログラムおよび各種データについて、図30を用いて説明する。
I/Oコマンド処理プログラム1131は、外部接続ストレージシステム600の提供するLDEVへのI/Oコマンド受信時には、バックエンドモジュール1600に指示して、必要なデータ転送を行う。
電力制御プログラム1133は、自身のRAIDグループおよび外部接続ストレージシステム600を、第三の実施形態のRAIDグループと同等に扱う。
LDEV移動プログラム1137は、外部接続ストレージシステム600を仮想的なRAIDグループと見なし、外部接続ストレージシステム600間、外部接続ストレージとストレージシステム100間のLDEV移動を行う。ただし、LDEV移動プログラム1137は、LDEV定義、およびLDEV削除などのLDEV移動に必要な外部接続ストレージシステム600の機能を、外部接続ストレージシステム600で指定された方法で呼び出す。
共有メモリモジュール1300は、LDEV構成情報1325、RAIDグループ情報1331、LDEV状態情報1330は、RAIDグループに関する情報のほかに、外部接続ストレージシステム600に関する情報を記憶する。
管理I/Fプログラム3031は、第三の実施形態の処理のほかに、休眠を許可する外部接続ストレージ内のRAIDグループに関する管理画面をディスプレイ3040に表示する。管理I/Fプログラム3031は、管理画面を介して入力された情報を含んだコマンドを管理コマンドとしてプロセッサモジュール1100に通知する。
以上が、第四の実施形態についての説明である。なお、例えば、外部接続ストレージシステム600全体ではなくその一部、例えば、コントローラ或いはキャッシュメモリ、ディスクが休眠させられても良い。
<第五の実施形態>。
本発明の第五の実施形態に係るコンピュータシステムの構成を、図39を用いて説明する。
第五の実施形態では、コンピュータシステムは、2台以上のストレージシステム100、1台以上のホスト200、1台以上の管理サーバ300、ストレージネットワーク400及び管理ネットワーク500から構成される。ストレージシステム100、ホスト200、管理サーバ間のシステム構成は、第一の実施形態と実質的に同様である。複数のストレージシステム100間は、コントローラ1000同士がFCとFCPを用いて接続され、管理情報やデータが転送される。ただし、コントローラ1000間のインタフェースとプロトコルは例示にすぎず、他のインタフェースやプロトコルを用いてもよい。ホスト200からストレージシステム100の提供するLDEVへのアクセスパスは、ホスト200上で動作するパス制御モジュール2001により制御される。ただし、アクセスパスとはホストからLDEVへのアクセス時のネットワークの経路のことを言う。パス制御モジュール2001は、ハードウェアとして例示しているが、プロセッサに実行されるコンピュータプログラムであっても良い。
なお、第五の実施形態では、ストレージシステム100はコントローラ1000により自ら休眠する機能と、外部から再起動する機能を有する。ハードウェア構成は、第一の実施形態と実質的に同等のため説明を省略する。
続いて、第五の実施形態の概要について図40を用いて説明する。
第五の実施形態では、ストレージシステム100の消費電力が削減される。
ストレージシステム100の数を増やすことにより、より多くのデータの格納やI/Oコマンド処理が可能となる。しかし、ストレージシステム数の増加に伴い、消費電力が増加する。
第五の実施形態では、ストレージシステム100がアクセスの少ないRAIDグループ内のLDEVを、他のストレージシステム100に移動し、RAIDグループを休眠させる。この場合、以下のような課題の発生が考えられる。
まず、他のストレージシステム100にLDEVを移動した場合、ホスト200からの該当LDEVにアクセスするためのネットワーク経路が変化する。そのため、ホスト200が移動したLDEVにアクセスできなくなる。
また、他の実施形態と同様に、移動先のストレージシステム100が高負荷になる恐れや、LDEVの要求性能を満たせなくなる恐れがある。さらに、管理者が性能と省電力効果のトレードオフを設定できない。
これらの課題を解決するために、第五の実施形態では以下のような工夫が施されている。
ストレージシステム100は、低負荷RAIDグループのLDEVを他のストレージシステムに移動し、RAIDグループを休眠させる。これらの処理は、ストレージシステム100が、全てのストレージシステム内のRAIDグループを仮想的に自身のRAIDグループとみなし、第三の形態と同等の処理を行うことにより実現する。電力制御プログラムを実行するストレージシステム100は、全てのRAIDグループが休眠する場合には、ストレージシステム100を休眠させる。
ただし、LDEVを他のストレージシステム100に移動する場合は、電力制御プログラムを実行するストレージシステム100は、ホスト200に、移動LDEVの識別番号と移動先ストレージシステムの識別子を通知する。ホスト200に、パス制御モジュール2001が備えられ、パス制御モジュール2001は、その通知を受信する。パス制御モジュール2001は、その通知に応答して、移動したLDEVへのアクセスパスを更新する。なお、パス制御モジュール2001は、例えば、ホスト200内のプロセッサで実行されるコンピュータプログラムであり、LDEVごとに、LDEV番号とLDEVが存在するストレージシステムの識別子とを表す情報(ホスト200内のメモリなどの記憶資源に記憶される情報)を参照したり更新したりする。パス制御モジュール2001は、ホスト200内のプロセッサで実行されるアプリケーションプログラムからLDEVが指定されたI/O指示を受けた場合、そのLDEVが存在するストレージシステムがどれであるかを特定し、特定したストレージシステムに、そのLDEVを指定したI/Oコマンドを送信する。
以下、第三の実施形態との相違点を主に説明を行い、共通点については説明を省略或いは簡略する。
第五の実施形態のストレージシステム100のプログラムおよび各種データを、図30を用いて説明する。
電力制御プログラム1133は、定期的(又は不定期的)に、他のストレージシステム100に対し、LDEV構成情報1331、LDEV状態情報1330およびRAIDグループ情報1331を送信することを指示する。指示を受け取った他のストレージシステム上の電力制御プログラム1133は、電力制御処理を行うストレージシステム100にそれらの情報を制御メモリモジュール1320から転送する。それらの情報の転送を受けたストレージシステム100において、電力制御プログラム1133は、それらの情報を結合し、制御メモリモジュール1320上のLDEV構成情報1331、LDEV状態情報1330およびRAIDグループ情報1331として格納する。
LDEV移動プログラム1137は、他のストレージシステム100と連携してストレージシステム100間のLDEV移動を実現する。
電力制御を行うストレージシステム100上の制御メモリモジュール1320に記憶されるLDEV構成情報1325、LDEV状態情報1330及びRAIDグループ情報1331には、全てのストレージシステム100に関する情報が含まれる。
管理I/Fプログラム3031は、第三の実施形態の処理のほかに、他のストレージシステム100についても休眠を許可するRAIDグループの管理画面をディスプレイ3040に表示する。また、管理I/Fプログラム3031は、管理画面を介して入力された情報を含んだコマンドを管理コマンドとしてプロセッサモジュール1100に通知する。
続いて、各種処理について、図34から図36を用いて説明した第三の実施形態と異なる点について説明する。
電力制御プログラム1133は、仮想的にRAIDグループと認識された他のストレージシステム100内のRAIDグループを、第三の実施形態のRAIDグループと同等に扱う。
(図34のS1108)電力制御プログラム1133は、ストレージシステム100内の全てのRAIDグループが休眠する場合は、そのストレージシステム100のコントローラ1000に休眠指示をだす。
(図36のS1302)電力制御プログラム1133は、移動元のストレージシステム100が休眠している場合、その移動元のストレージシステム100に再起動を指示する。
(図34のS1106、及び、図36のS1303)電力制御プログラム1133から指示を受けたLDEV移動プログラム1137は、ホスト200に、LDEV番号と移動先ストレージシステム100のストレージシステム識別子とを通知する。ホスト200上のパス制御モジュール2001は、これらの通知を受け取った以降は、移動するLDEVへのアクセスパスを切り替える。例えば、パス制御モジュール2001は、ホスト200上のアプリケーションプログラム(図示せず)から或るLDEVを指定したI/O指示を受けた場合、受け取ったストレージシステム識別子が示す移動先ストレージシステム100に、その或るLDEVを指定したI/Oコマンドを送信する。
以上が、第五の実施形態についての説明である。なお、例えば、ストレージシステム100に代えて、管理サーバ300により電力制御が行われてもよい。
<第六の実施形態>。
例えば第一乃至第五の実施形態のうちの二以上を組み合わせることができる。そのため、例えば、一ストレージシステムにおいて、キャッシュ休眠とディスク休眠の両方を行うことが可能である。しかし、その場合、キャッシュ休眠およびディスク休眠間での実行タイミングの制御が必要となる。具体的には、例えば、キャッシュ休眠制御処理中に、ディスク休眠制御処理が発生した場合、キャッシュメモリモジュール1340上のディスク未書き込みのキャッシュデータ(記憶ディスクへ未書込みのデータ)のデステージとLDEV移動が同時に発生する可能性がある。ディスク未書き込みのキャッシュデータのデステージ先のLDEVが、移動するLDEVである場合、そのLDEVの移動中にデステージが行われ、移動先RAIDグループにおいて、LDEVにキャッシュデータが反映されないおそれ(すなわち、キャッシュデータが消失するおそれ)が生じる。
そこで、第六の実施形態では、キャッシュ休眠とディスク休眠のいずれか一方を先に行い、その先に行った処理が終了した後に、他方の処理が開始される。詳細を、図41を参照して説明する(なお、図41において、<>内の番号は、処理の順番を表している)。
ディスク休眠とキャッシュ休眠がほぼ同時に発生したとする。ディスク休眠における移動対象のLDEVも、キャッシュ休眠におけるデステージ先LDEVも、LDEV1´であるとする。
電力制御プログラム1133は、キャッシュメモリモジュールからのダーティのキャッシュデータのデステージを停止し、LDEV移動プログラムにLDEV1´の移動を実行させる。電力制御プログラム1133は、LDEV1´の移動の完了後、制御メモリモジュール1320に記憶されているLDEV構成情報1325や、自身が動作するプロセッサモジュールにおけるLDEV構成情報の複製1135を更新する。電力制御プログラム1133は、LDEV構成情報1325やLDEV構成情報の複製1135の更新を完了した後に、停止していたデステージを開始する。その際、デステージ先は、移動先RAIDグループにおけるLDEV1´である。その後、電力制御プログラム1133は、共有メモリモジュールに記憶されているキャッシュテーブルや、自身が動作するプロセッサモジュールにおけるキャッシュテーブルの複製を更新し、処理を終了する。
なお、上記の説明では、LDEVの移動が先に行われる場合を例に採ったが、それに代えて、デステージが行われた後に、LDEVの移動が開始されても良い。また、例えば、デステージとLDEV移動のどちらを先に行うかは、例えば、LDEVの移動先が、リモートのストレージシステムであるかどうかに応じて決定されても良い。例えば、LDEVの移動先がリモートのストレージシステムである場合には、デステージが先に行われ、一方、LDEVの移動先がローカルのストレージシステム(すなわち同一のストレージシステム)である場合には、LDEV移動が先に行われても良い。
<第七の実施形態>。
プロセッサ休眠、キャッシュ休眠及びディスク休眠の少なくとも二つが行われる場合、管理者は、各種休眠について、トレードオフ(例えば、低負荷閾値、低アクセス閾値、高負荷閾値、高アクセス閾値、省電力レベルなど)を設定しなければならない。これは、管理者によっては煩わしく感じられる可能性がある。
そこで、第七の実施形態では、図42に示す処理が行われる。
すなわち、管理サーバ300(又は管理用端末3000)の記憶資源に、ポリシー管理テーブル331が記憶される。ポリシー管理テーブル331には、例えば図43に示すように、ポリシー毎に、複数種類の休眠制御に使用される設定値の組合せが対応付けられている。例えば、ポリシー値「A」には、プロセッサ休眠における省電力レベル「4」、高負荷閾値「80%」及び低負荷閾値「30%」と、キャッシュ休眠における高アクセス閾値「80%」及び低アクセス閾値「30%」と、ディスク休眠における休眠許可RAIDグループ「1,2,3,4,5」、高負荷閾値「80%」、低負荷閾値「30%」及び警告設定「有効」とが対応付けられている。
管理サーバ300(又は管理用端末3000)は、ポリシー管理テーブル331を編集したり管理者所望のポリシー値を入力するためのGUIを提供する。管理者は、そのGUIを介して、ポリシー値の入力やポリシー管理テーブル331の編集を行う。
管理サーバ300(又は管理用端末3000)は、GUIを介してポリシー値が入力された場合、例えば管理サーバ300(又は管理用端末3000)のプロセッサで実行される設定制御プログラム(図示せず)が、そのポリシー値に対応した各種設定値をポリシー管理テーブル331から特定し、特定した各種設定値を含んだ管理コマンドを、プロセッサモジュール1100に送信する。プロセッサモジュール1100は、各実施例で述べた方法でこれらの管理コマンドを処理し、制御メモリモジュール1320に記憶されている電力制御情報1326やその他の情報(例えばLDEV構成情報)を更新する。
このように、この第七実施形態では、管理者は、複数のポリシー値のうちの所望のポリシー値を入力するだけで、複数種類の休眠制御における種々の設定を行うことができる。
以上、本発明の好適な実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。