以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態のストレージ装置を示す図である。ストレージ装置1は、記憶部1a、処理部1bおよび記憶装置1c,1d,1e,1fを有する。記憶装置1c,1d,1e,1fをまとめて、記憶装置群A1と称する。ストレージ装置1は、情報処理装置2に接続される。ストレージ装置1および情報処理装置2は、所定のケーブルによって直接接続されてもよいし、ネットワークを介して接続されてもよい。ストレージ装置1は、情報処理装置2の業務処理により用いられる各種のデータ(業務データ)を記憶する。
ストレージ装置1は、記憶装置1c,1d,1e,1fそれぞれの記憶領域を用いて論理的な記憶領域を提供可能であり、制御プログラムであるファームウェアにより制御される。例えば、ストレージ装置1は、記憶装置1c,1dにより第1のRAIDグループ(RAID1)を構築し、記憶装置1e,1fにより第2のRAIDグループ(RAID1)を構築する。そして、例えば、ストレージ装置1は、第1のRAIDグループに属する第1の記憶領域、および、第2のRAIDグループに属する第2の記憶領域を組み合わせることで、情報処理装置2によりアクセス可能な論理的な記憶領域を提供する。あるいは、ストレージ装置1は、3以上の記憶装置によるRAIDグループ(例えば、RAID5)を複数作成し、各RAIDグループの記憶領域を組み合わせて、情報処理装置2によりアクセス可能な論理的な記憶領域を提供することもできる。
記憶部1aは、RAM(Random Access Memory)などの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。処理部1bは、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)などを含み得る。処理部1bはプログラムを実行するプロセッサでもよい。「プロセッサ」には、複数のプロセッサの集合(マルチプロセッサ)も含まれ得る。
記憶装置1c,1d,1e,1fは、例えばSSDである。SSDは、フラッシュメモリを内蔵し、フラッシュメモリに業務データを格納する。記憶装置1cは、フラッシュメモリなどの業務データの格納用の記憶デバイスの他にも、ファームウェア保存用の不揮発性メモリ、ファームウェア実行用のRAMおよびプロセッサを内蔵する(図1では図示を省略している)。記憶装置1cのプロセッサは、当該不揮発性メモリに記憶されたファームウェアを記憶装置1cのRAMにロードして実行し、記憶装置1cの動作を制御する。記憶装置1d,1e,1fも記憶装置1cと同様に、業務データの格納用の記憶デバイス、ファームウェア保存用の不揮発性メモリ、ファームウェア実行用のRAMおよびプロセッサを内蔵する。
処理部1bは、記憶装置1c,1d,1e,1fのファームウェアの更新を制御する。具体的には、次の通りである。
処理部1bは、記憶装置群A1に記憶されたデータに対するアクセス要求を情報処理装置2から受信する。処理部1bは、受信したアクセス要求(例えば、データの書き込み要求)に応じてアクセス先の記憶装置を決定し、該当の記憶装置に対するアクセスコマンド(アクセス要求に応じたコマンド)を生成し、記憶部1aに格納する。記憶部1aは、各記憶装置に対するアクセスコマンドを記憶する。記憶部1aに格納されるアクセスコマンドは、アクセス待ち(または実行待ち)のコマンドであり、アクセス待ちコマンド(または実行待ちコマンド)と呼ばれる。
ここで、記憶部1aは、記憶装置1c,1d,1e,1fごとにアクセスコマンドを保持するキューを備える。例えば、記憶装置1cのキューは、キュー番号“1”のキューである。ここで、キュー番号“1”を、“#1”のように表記することがある。記憶装置1dのキューは、“#2”のキューである。記憶装置1eのキューは、“#3”のキューである。記憶装置1fのキューは、“#4”のキューである。
例えば、処理部1bは、記憶装置1cに対する書き込みコマンドを“#1”のキューに格納する。処理部1bは、記憶装置1dに対する書き込みコマンドを“#2”のキューに格納する。処理部1bは、記憶装置1eに対する書き込みコマンドを“#3”のキューに格納する。処理部1bは、記憶装置1fに対する書き込みコマンドを“#4”のキューに格納する。こうして、処理部1bは、記憶部1aをキャッシュとして利用し、一端、記憶部1aにデータを格納し、情報処理装置2に対する応答を行ってから、アクセス要求とは非同期に記憶装置1c,1d,1e,1fへの書き込みを行う(ライトバックと呼ばれる)。これにより、処理部1bは、記憶部1aにデータを格納した時点で情報処理装置2に対する応答を行えるので、書き込みなどのアクセス要求に対する応答を早めることができる。
処理部1bは、記憶装置1c,1d,1e,1fのファームウェアの更新指示を受信すると、記憶部1aに記憶された記憶装置1c,1d,1e,1fそれぞれに対するアクセス待ちコマンドの数を監視する。例えば、処理部1bは、情報処理装置2からファームウェアの更新指示を受信してもよいし、ユーザによるファームウェアの更新指示の操作入力を受け付けてもよい。記憶装置に適用する更新後のファームウェアのプログラムは、情報処理装置2によりストレージ装置1に提供されてもよい。あるいは、当該ファームウェアのプログラムは、所定の記録媒体を用いて、ストレージ装置1に提供されてもよい。処理部1bは、提供されたファームウェアのプログラムを記憶部1aに格納しておいてもよい。
処理部1bは、アクセス待ちコマンドの数に基づいて、記憶装置1c,1d,1e,1fそれぞれがガベージコレクションを実行中であるか否かを判定する。
ここで、ガベージコレクションは、データの消去が可能な単位領域におけるデータを消去して、当該単位領域を再利用可能にする不要領域開放機能である。具体的には、ガベージコレクションでは、フラッシュメモリなどにおいて有効データおよび無効データが混在する第1の単位領域(例えば、ブロック)における有効データを、第2の単位領域に複製し、第1の単位領域のデータを一括して消去する。なお、「データの消去」は、「当該データが格納された記憶領域の解放」ともいえる。
ガベージコレクションは、記憶装置1c,1d,1e,1fそれぞれにより自律的に実行される。ガベージコレクションは、各記憶装置が独自に実行する処理であり、例えば、数時間から数日に一回程度の頻度で発生する。ただし、前述のように、ガベージコレクションは、記憶装置1c,1d,1e,1fにより自律的に実行されるため、処理部1bにより、各記憶装置でガベージコレクションが発生するタイミングを予測することは困難である。
一方、記憶装置によりガベージコレクションが実行されている間は、該当の記憶装置に対するアクセス性能が低下する。すなわち、記憶装置がガベージコレクションを行っている間は、該当の記憶装置に対するアクセスコマンドによるアクセスが遅延する。このため、該当の記憶装置に対応するキューに保持されているアクセス待ちコマンドが処理されずに、キューに残存する。したがって、ガベージコレクションの実行中は、該当の記憶装置に対応するキューに保持されるアクセス待ちコマンドの数が過大になる可能性が高い。
そこで、処理部1bは、例えば、アクセス待ちコマンドの数が、所定の閾値を超えた記憶装置について、ガベージコレクションを実行中であると判定する。一方、処理部1bは、例えば、アクセス待ちコマンドの数が所定の閾値以下の記憶装置について、ガベージコレクションを実行中でないと判定する。
例えば、図1のグラフは、処理部1bがファームウェアの更新指示を受け付けた後のある時点における、記憶装置1c,1d,1e,1fそれぞれに対するアクセス待ちコマンドの数(アクセス待ちコマンド数)を示す。記憶装置1cに対するアクセス待ちコマンド数は、閾値を超過している。記憶装置1d,1e,1fに対するアクセス待ちコマンド数は閾値を超過していない。この場合、処理部1bは、記憶装置1cがガベージコレクションを実行中であると判定する。一方、処理部1bは、記憶装置1d,1e,1fがガベージコレクションを実行中でないと判定する。
処理部1bは、ある記憶装置についてガベージコレクションを実行中であると判定された場合に、ファームウェアの更新を当該記憶装置に指示する。上記の例でいえば、処理部1bは、ガベージコレクションを実行中であると判定された記憶装置1cに対してファームウェアの更新を指示する。このとき、処理部1bは、適用すべきファームウェアのプログラムを記憶装置1cに提供する。一方、処理部1bは、この段階では、記憶装置1d,1e,1fに対してファームウェアの更新を指示しない。
例えば、ファームウェアの更新の指示を受け付けた記憶装置1cは、ガベージコレクションの実行を一時中断して、記憶装置1cにより保持されるファームウェアの更新を行い、更新完了後にガベージコレクションの実行を再開する。
こうして、処理部1bは、記憶装置1c,1d,1e,1fに対して、ファームウェアの更新を順次行う。
これにより、ファームウェアの更新に伴う性能への影響を抑えることができる。具体的には次の通りである。
記憶装置におけるファームウェアの更新中は、当該記憶装置に対するデータアクセスを行えなくなる。このため、任意のタイミングで記憶装置のファームウェアの更新を行うと、該当の記憶装置に対するデータアクセスに遅延が発生し、性能に影響を及ぼす可能性があるという問題がある。
そこで、処理部1bは、記憶装置によりガベージコレクションが実行中である期間を利用して、該当の記憶装置によるファームウェアの更新も実行させる。ガベージコレクション中は、そもそも記憶装置のアクセス性能が低下する期間であるため、ファームウェアの更新も当該期間において実行してしまう方が、業務運用への影響を低減できる。なぜなら、ガベージコレクション中でない通常運用中にファームウェア更新を行うと、ガベージコレクションとは別に、記憶装置へのアクセスを行えない時間帯が発生することになるからである。ガベージコレクションの期間中にファームウェア更新も併せて行うことで、記憶装置へのアクセスを行えない時間帯が余計に発生することを抑えられ、性能への影響を抑えられる。
また、複数のRAIDグループを用いて、シンプロビジョニングにより論理的な記憶領域をユーザに割り当てる場合に、ファームウェア更新中の記憶装置を避けたアクセス制御を実現できる。具体的には次の制御が考えられる。
第1に、処理部1bは、ファームウェア更新中の記憶装置が属する第1のRAIDグループへの新規データの書き込み要求に対して、第1のRAIDグループ以外の第2のRAIDグループの記憶領域を当該新規データの書き込み先に割り当てる。
第2に、処理部1bは、ファームウェア更新中の記憶装置が属する第1のRAIDグループに格納された既存データの更新要求に対し、既存データの格納先の記憶領域の割り当てを第1のRAIDグループから第2のRAIDグループに変更する。処理部1bは、その上で、第2のRAIDグループに属する他の記憶装置に対して書き込み(既存データに対する更新後のデータの書き込み)を実行する。
第3に、処理部1bは、ファームウェア更新中の記憶装置が属するRAIDグループに格納された既存データの読み出し要求に対し、ファームウェア更新中の記憶装置以外の他の記憶装置により当該既存データを構築し、応答する。例えば、処理部1bは、RAID1であれば、ミラーとなる他の記憶装置から既存データを取得し、応答する。あるいは、処理部1bは、RAID5であれば、パリティなどを記憶する複数の他の記憶装置から既存データを取得し、応答する。
このようにして、処理部1bは、ファームウェア(制御プログラム)の更新に伴う性能への影響を抑えて、記憶装置群A1に記憶されたデータに対するアクセスを行うことができる。
[第2の実施の形態]
図2は、第2の実施の形態の情報処理システムの例を示す図である。第2の実施の形態の情報処理システムは、ストレージ装置10およびサーバ20を含む。ストレージ装置10およびサーバ20は、例えば、SAN(Storage Area Network)などのネットワークを介して接続される。ストレージ装置10およびサーバ20は、所定のケーブルによって直接接続されてもよい。
ストレージ装置10は、複数のSSD(複数の記憶装置の一例)を備える。ストレージ装置10は、複数のSSDにより、大容量の記憶領域をサーバ20に提供する。ストレージ装置10は、2以上のSSDを1つのグループ(RAIDグループ)とする。ストレージ装置10は、1つのRAIDグループに属する2以上のSSDを用いて、RAID(RAIDレベルは1以上であるとする)を構築する。複数のRAIDグループのRAIDレベルは同じである。
ストレージ装置10は、複数のRAIDグループにおける記憶領域を組み合わせることで、サーバ20によりアクセス可能な仮想的なボリューム(仮想ボリューム)を提供する。仮想ボリュームに対する実容量は、シンプロビジョニングの技術により割り当てられる。これにより、ストレージ装置10における記憶容量の効率的な利用が図られる。
ストレージ装置10は、第1の実施の形態のストレージ装置1の一例である。
サーバ20は、ユーザの業務処理を行う業務アプリケーションを実行するサーバコンピュータである。サーバ20は、ストレージ装置10に記憶されたデータを用いて業務処理を行う。サーバ20は、新たなデータをストレージ装置10に書き込むことがある。サーバ20は、ストレージ装置10に記憶されているデータを更新することもある。また、サーバ20は、ストレージ装置10に記憶されているデータを読み出すこともある。更に、サーバ20は、ストレージ装置10に記憶されているデータを削除することもある。
図3は、ストレージ装置のハードウェア例を示す図である。ストレージ装置10は、コントローラモジュール(CM:Controller Module)100およびドライブ収納部200を有する。
CM100は、ドライブ収納部200に収納されている各SSDに対するデータアクセスを制御するストレージ制御装置である。CM100は、RAIDコントローラ、または、単にコントローラと呼ばれることもある。ストレージ装置10は、複数のCMを備えてもよい。複数のCMによりデータアクセス機能を冗長化させることで、データアクセス機能の可用性の向上やデータアクセス性能の向上を図ることもある。
ドライブ収納部200は、SSD50,50a,50b,・・・を収納する収納装置である。ドライブ収納部200は、ドライブエンクロージャと呼ばれることもある。SSD50,50a,50b,・・・は、フラッシュメモリを備える記憶装置である。
ここで、サーバ20により発行された新規データの書き込みのアクセス要求や、既存データの更新のアクセス要求は、CM100のキャッシュメモリを用いたライトバック方式で処理される。具体的には次の通りである。
(1)CM100は、サーバ20から書き込みのアクセス要求を受信する。書き込みのアクセス要求は、書き込み対象のデータを含む。(2)CM100は、CM100のキャッシュメモリに、書き込み対象のデータを書き込む。(3)CM100は、書き込みが完了した旨の通知をサーバ20に送信する。(4)CM100は、キャッシュメモリに蓄積された書き込み対象のデータを、サーバ20によるアクセス要求とは非同期に、SSD50,50a,50b,・・・に書き込む。
このように、ライトバック方式では、一連の手順の中にキャッシュメモリを介在させる。これにより、サーバ20およびCM100の間のデータの転送速度と、CM100からSSD50,50a,50b,・・・へのデータの書き込み速度との差によるCM100からサーバ20への応答遅延を低減する。
図4は、CMのハードウェア例を示す図である。CM100は、プロセッサ101、RAM102、キャッシュメモリ103、媒体リーダ104、NVRAM(Non-Volatile RAM)105、DI(Drive Interface)106、CA(Channel Adaptor)107、NA(Network Adaptor)108を有する。各ハードウェアはCM100のバスに接続されている。
プロセッサ101は、CM100の情報処理を制御するハードウェアである。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、DSP、ASICまたはFPGAなどである。プロセッサ101は、CPU、DSP、ASIC、FPGAなどのうちの2以上の要素の組み合わせであってもよい。
RAM102は、CM100の主記憶装置である。RAM102は、プロセッサ101に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。また、RAM102は、プロセッサ101による処理に用いる各種データを記憶する。
キャッシュメモリ103は、ライトバック方式によるSSDへのデータ書き込みに用いられる揮発性の半導体メモリである。キャッシュメモリ103は、ライトバックの処理に用いられるため、ライトバックキャッシュと呼ばれてもよい。キャッシュメモリ103は、プロセッサ101による書き込み制御に用いられる各種データも記憶する。
媒体リーダ104は、記録媒体11に記録されたプログラムやデータを読み取る装置である。記録媒体11として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用できる。媒体リーダ104は、例えば、プロセッサ101からの命令に従って、記録媒体11から読み取ったプログラムやデータをRAM101またはNVRAM105に格納する。
NVRAM105は、CM100の動作制御に用いられるファームウェアを記憶する不揮発性メモリである。プロセッサ101は、NVRAM105に記憶されたファームウェアのプログラムをRAM102にロードすることで、各種の機能を発揮する。
DI106は、ドライブ収納部200との接続に用いられるインタフェースである。DI106としては、例えば、SAS(Serial Attached SCSI(SCSIはSmall Computer System Interfaceの略))やファイバチャネル(FC:Fibre Channel)などのインタフェースを用いることができる。
CA107は、SAN30を介してサーバ20と通信する通信インタフェースである。CA107として、例えばFCのインタフェースを用いることができる。CA107として、FC以外のインタフェース(例えば、iSCSI(Internet Small Computer System Interface)など)が用いられることもある。
NA108は、LAN30aを介してサーバ20や、LAN30aを介してアクセス可能な他のサーバコンピュータと通信する通信インタフェースである。NA108として、例えば、イーサネット(登録商標)のインタフェースを用いることができる。
図5は、SSDのハードウェア例を示す図である。SSD50は、コントローラ51、NVRAM52、接続IF(InterFace)53およびフラッシュメモリ54を有する。各ハードウェアは、SSD50のバスに接続されている。SSD50a,50b,・・・もSSD50と同様のハードウェアにより実現される。
コントローラ51は、フラッシュメモリ54に対するデータの書き込みや読み出しなどのアクセス制御を行う。コントローラ51は、プロセッサおよびRAM(図5では図示を省略している)を内蔵し、当該RAMにロードされたファームウェアf1を、プロセッサにより実行することで、所定の機能を実現する。ファームウェアf1により実現される機能としては、例えば、エラー訂正、ウェアレベリング、エラーブロックの管理およびガベージコレクションなどが挙げられる。
また、コントローラ51は、CM100によるファームウェアf1の更新の指示に応じて、NVRAM52に記憶されているファームウェアf1を更新する。具体的には、コントローラ51は、改版後のファームウェアをCM100から取得して、NVRAM52に書き込む。コントローラ51は、1世代前のファームウェアf1をNVRAM52に残した状態で、改版後のファームウェアをNVRAM52に書き込んでもよい。あるいは、コントローラ51は、ファームウェアf1を改版後のファームウェアにより上書きしてもよい。
NVRAM52は、ファームウェアf1を記憶する不揮発性メモリである。前述のように、NVRAM52により記憶されるファームウェアは、コントローラ51により更新される。NVRAM52は、コントローラ51に内蔵されてもよい。
接続IF53は、ドライブ収納部200に接続するためのインタフェースである。接続IF53としては、例えば、SASのインタフェースを用いることができる。
フラッシュメモリ54は、ユーザの業務処理に用いられる各種のデータを記憶する。フラッシュメモリ54は、コントローラ51の制御により、フラッシュメモリ54に内蔵される記憶素子に対して電気的にデータの書き込みを行う。
ここで、フラッシュメモリ54の記憶領域は、複数のブロックに区分される。ブロックは複数のページを含む。ページは、データの読み出しや書き込みが行われる記憶領域の単位である。一方、フラッシュメモリ54では、ブロック単位でデータが消去される。したがって、ブロック内の無効データが格納されたページを再利用可能にするためには当該無効データを消去することになるが、この場合、無効データのみを消去することはできず、該当のブロック内の全てのページのデータを消去することになる。コントローラ51は、ガベージコレクションと呼ばれる処理により、ブロック単位のデータの消去を行う。以下の説明では、ガベージコレクションを、GC(Garbage Collection)と略記することがある。
図6は、ガベージコレクションの例を示す図である。図6(A)、図6(B)、図6(C)は、フラッシュメモリ54におけるブロック54a,54b,54c,54dを例示している。ブロック54aは、ページP11,P12,P13,P14を含む。ブロック54bは、ページP21,P22,P23,P24を含む。ブロック54cは、ページP31,P32,P33,P34を含む。ブロック54dは、ページP41,P42,P43,P44を含む。
図6(A)において、ページP11,P12,P13,P14,P21,P23,P24,P31,P33,P41,P44は、有効なデータ(有効データ)を記憶しているページである。また、ページP22は、無効なデータ(無効データ)を記憶しているページである。更に、ページP32,P34,P42,P43は、データを記憶していない空きページである。
例えば、コントローラ51は、ページP22を再利用可能にするために、ブロック54bに属するページP21,P23,P24に記憶されている有効データを空きページに複製する。具体的には、コントローラ51は、ページP21に記憶されている有効データを複製し、複製された有効データをページP32に格納する。コントローラ51は、ページP23に記憶されている有効データを複製し、複製された有効データをページP43に格納する。コントローラ51は、ページP24に記憶されている有効データを複製し、複製された有効データをページP34に格納する。
図6(B)は、コントローラ51による上記の有効データの複製後のブロック54a,54b,54c,54dを示している。具体的には、空きページであったページP32に、ページP21の有効データの複製が格納されている。また、空きページであったページP34に、ページP24の有効データの複製が格納されている。更に、空きページであったページP43に、ページP23の有効データの複製が格納されている。
コントローラ51は、ブロック54bに格納されているデータ(すなわち、ページP21,P22,P23,P24に記憶されているデータ)を消去する(あるいは、「ブロック54bを解放する」といってもよい)。
図6(C)は、コントローラ51によるブロック54bに格納されているデータの消去後のブロック54a,54b,54c,54dを示している。こうして、コントローラ51は、ページP22の無効データを消去する場合でも、ガベージコレクションにより、ブロック54bの単位でデータを消去し、ブロック54b全体を再利用可能にする。
ここで、ガベージコレクションは、コントローラ51により、例えば、数時間から数日に一回程度の頻度で実行される。ガベージコレクションの実行中には、該当のSSDのアクセス性能が低下する。ガベージコレクションの所要時間は、数分(例えば、5分)程度である。ガベージコレクションは、SSD50においてコントローラ51により自律的に実行されるため、CM100側でガベージコレクションが発生するタイミングを予測することは困難である。
図7は、CMの機能例を示す図である。CM100は、ファームウェア更新制御部110およびIO(Input / Output)制御部120を有する。ファームウェア更新制御部110およびIO制御部120は、例えば、RAM102に記憶されたプログラムを、プロセッサ101により実行することで、プロセッサ101により発揮される機能である。ただし、ファームウェア更新制御部110およびIO制御部120は、FPGAやASICなどのハードワイヤードロジックにより実現されてもよい。
ファームウェア更新制御部110は、キャッシュメモリ103に記憶される情報に基づいて、SSD50,50a,50b,・・・によるファームウェアの更新のタイミングを制御する。具体的には、ファームウェア更新制御部110は、SSD50,50a,50b,・・・のファームウェアの更新指示の入力を受け付ける。当該更新指示は、管理者によりCM100に入力されてもよいし、サーバ20または他のサーバコンピュータによりLAN30aを介して、CM100に入力されてもよい。更新指示が管理者によりCM100に入力される場合、記録媒体11を用いて、更新後のファームウェアのプログラムが、CM100に提供される。あるいは、更新指示がサーバ20または他のサーバコンピュータによりCM100に入力される場合、サーバ20または他のサーバコンピュータによりLAN30aを介して、更新後のファームウェアのプログラムが、CM100に提供される。
そして、ファームウェア更新制御部110は、サーバ20によるストレージ装置10へのアクセス状況や、SSD50,50a,50b,・・・それぞれに対するアクセス待ちコマンドを監視する。ファームウェア更新制御部110は、当該監視に応じて、SSD毎に、ファームウェアの更新のタイミングを決定する。ファームウェア更新制御部110は、あるSSDにおいてファームウェアの更新を行うと決定すると、該当のSSDに対して更新後のファームウェアを提供し、ファームウェアの更新を指示する。ファームウェア更新制御部110は、ファームウェアを更新中であるSSDの識別情報を、キャッシュメモリ103に格納する。なお、SSDによるファームウェアの更新の所要時間は、数秒(例えば、5秒)程度である。
IO制御部120は、キャッシュメモリ103に記憶される情報に基づいて、ファームウェア更新中のSSDに対するIOを制御する。具体的には、ファームウェア更新中のSSDに対するIOを、別のSSDに振り替えたり、ファームウェア更新中のSSDが属するRAIDグループにおける他のSSDを用いて処理したりする。例えば、IO制御部120は、ファームウェア更新制御部110によりキャッシュメモリ103に格納されたファームウェアを更新中であるSSDの識別情報を参照することで、ファームウェア更新中のSSDを特定する。
図8は、チャンクの例を示す図である。RAIDグループにおける各SSDの記憶領域はチャンクと呼ばれる単位で管理される。例えば、SSD50は、チャンクa,b,c,d,eを含む(SSD50には更に多くのチャンクが含まれ得る)。ここで、識別情報“a”で表されるチャンクを、“チャンクa”のように表記している。
図9は、チャンク割り当て管理テーブルの例を示す図である。チャンク割り当て管理テーブル111は、キャッシュメモリ103に記憶される。チャンク割り当て管理テーブル111は、Writeデータ(書き込み対象のデータ)と、チャンクとの対応関係を管理するためのテーブルである。チャンク割り当て管理テーブル111は、Writeデータおよびチャンクの項目を含む。
Writeデータの項目には、Writeデータの識別情報が登録される。チャンクの項目には、当該Writeデータの書き込み先のチャンクの識別情報が登録される。例えば、チャンク割り当て管理テーブル111には、Writeデータが“1”、チャンクが“a,b”というレコードが登録されている。これは、識別情報“1”に対応するWriteデータの書き込み先が、チャンクa,bであることを示す。チャンク割り当て管理テーブル111には、他のWriteデータに対しても同様に、書き込み先のチャンクの識別情報が対応付けられている。
ここで、チャンク割り当て管理テーブル111は、キャッシュメモリ103に、SSD毎に格納される(チャンク割り当てテーブルは、該当のSSDの識別情報と対応付けられてキャッシュメモリ103に格納される)。各SSDのチャンク割り当て管理テーブルは、ストレージ装置10の電源をオフにする際(当該電源がオフになる直前)に、プロセッサ101により、SSD50,50a,50b,・・・の所定の記憶領域(不揮発性の記憶領域)に格納される。また、各SSDのチャンク割り当て管理テーブルは、ストレージ装置10の電源をオンにする際(例えば、当該電源のオンのための処理の間)に、プロセッサ101により、SSD50,50a,50b,・・・の所定の記憶領域から読み出されて、キャッシュメモリ103に格納される。
図10は、サーバのIO数の監視例を示す図である。ファームウェア更新制御部110は、サーバ20によるストレージ装置10へのIO数を監視することで、サーバ20によるアクセス状況を監視する。サーバ20によるIO数は、プロセッサ101が受け付けたサーバ20による書き込みや読み出しのアクセス要求の数である。例えば、ファームウェア更新制御部110は、サーバ20から単位時間当たりに受け付けたIO数を得ることで、現在、サーバ20によるアクセス要求が規定数よりも多いか、または、規定数以下かを判定し得る。サーバ20によるアクセス要求が規定数よりも多い場合、サーバ20では、ユーザの業務処理が活発に行われていると推定される。また、サーバ20によるアクセス要求が規定数以下の場合、サーバ20では、ユーザの業務処理の実行が不活発であると推定される。ファームウェア更新制御部110は、RAIDグループ毎に、IO数を監視してもよい。
なお、アクセス要求は、前述のライトバックの方法により、キャッシュメモリ103に保持される(具体的な保持方法は、図11において説明される)。そして、プロセッサ101は、キャッシュメモリ103に保持された当該アクセス要求に応じて、所定のRAIDグループ(例えば、SSD50,50aが属するRAIDグループG1)に対するアクセスを行う。
図11は、SSDに対するアクセス待ちコマンドの監視例を示す図である。前述のように、プロセッサ101は、ライトバック方式によって、サーバ20からのアクセス要求を処理する。このため、ファームウェア更新制御部110は、サーバ20から受け付けたアクセス要求に基づいて、SSD50,50a,50b,・・・それぞれに対するアクセスコマンドをキャッシュメモリ103に格納する。キャッシュメモリ103に格納された各SSDに対するアクセスコマンドは、アクセス待ちとなっているコマンドである。このため、キャッシュメモリ103に格納されたアクセスコマンドを、アクセス待ちコマンドと称する。
キャッシュメモリ103には、SSD50,50a,50b,・・・それぞれのキューが設けられ、各キューにアクセス待ちコマンドが格納される。例えば、SSD50(図中“SSDx”と表記)に対応するキューに、SSD50に対する複数のアクセス待ちコマンド(アクセス待ちコマンド群)が格納される。また、SSD50a(図中“SSDy”と表記)に対応するキューに、SSD50aに対する複数のアクセス待ちコマンド(アクセス待ちコマンド群)が格納される。
例えば、ファームウェア更新制御部110は、SSD50に対応するキューに格納されたアクセス待ちコマンドの数を求めることで、SSD50に対するアクセス待ちコマンドの数を得る。同様に、ファームウェア更新制御部110は、SSD50aに対応するキューに格納されたアクセス待ちコマンドの数を求めることで、SSD50aに対するアクセス待ちコマンドの数を得る。ファームウェア更新制御部110は、他のSSDに対しても同様にして、アクセス待ちコマンドの数を求めることができる。
次に、CM100によるSSDのファームウェア更新の処理手順を説明する。
図12は、ファームウェア更新例を示すフローチャートである。以下、図12に示す手順をステップ番号に沿って説明する。
(S11)ファームウェア更新制御部110は、SSD50,50a,50b,・・・のファームウェア更新の指示(更新指示)を受け付ける。前述のように、ファームウェア更新制御部110は、記録媒体11やLAN30aを介して、更新後のファームウェアのプログラムを取得し、RAM102またはキャッシュメモリ103に格納する。
(S12)ファームウェア更新制御部110は、IO数を監視し、各SSDについてIO数が規定数以下であるか否かを判定する。ファームウェア更新制御部110によるIO数の監視方法は、図10で例示した通りである。例えば、ファームウェア更新制御部110は、サーバ20から受け付けるIO数の頻度(単位時間当たりのIO数)を取得し、IO数の頻度を、規定数(規定の頻度)以下であるか否かを、RAIDグループ単位に判定する。あるRAIDグループについてIO数(IO数の頻度)が規定数以下である場合、ファームウェア更新制御部110は、ステップS13に処理を進める。何れのRAIDグループについてもIO数(IO数の頻度)が規定数よりも大きい場合、ファームウェア更新制御部110は、ステップS14に処理を進める。ここで、ステップS12の判定に用いられる規定数は、運用に応じて予め定められ、ファームウェア更新制御部110に対して予め設定される。
(S13)ファームウェア更新制御部110は、IO数(IO数の頻度)が規定数以下のRAIDグループに属するSSDのファームウェア更新を実施するように、該当のSSDに対して指示する。例えば、ファームウェア更新制御部110は、1つのSSDずつ順番にファームウェア更新を行うよう指示する。このとき、ファームウェア更新制御部110は、更新後のファームウェアのプログラムを該当のSSDに対して提供する。該当のSSDのコントローラは、当該指示に応じて、更新後のファームウェアのプログラムを該当のSSDのNVRAMに格納し、自SSDを再起動させ、更新後のファームウェアでの動作を開始し、更新完了をファームウェア更新制御部110に応答する。そして、ファームウェア更新制御部110は、ステップS16に処理を進める。
(S14)ファームウェア更新制御部110は、キャッシュメモリ103に格納されたSSD毎のアクセス待ちコマンドの数に基づいて、何れかのSSDにおいてガベージコレクション(GC)を検出したか否かを判定する。何れかのSSDにおいてガベージコレクションを検出した場合、ファームウェア更新制御部110は、ステップS15に処理を進める。ガベージコレクションを検出していない場合、ファームウェア更新制御部110は、ステップS12に処理を進める。
ここで、図11で例示したように、ファームウェア更新制御部110は、キャッシュメモリ103を参照し、あるSSDにおいて、アクセス待ちコマンドの数が所定の閾値以上になった場合に、該当のSSDにおけるガベージコレクションを検出する。一方、ファームウェア更新制御部110は、各SSDについて、アクセス待ちコマンドの数が所定の閾値未満である場合に、ガベージコレクションを検出しない。ステップS14の判定に用いられる閾値は、運用に応じて予め定められ、ファームウェア更新制御部110に対して予め設定される。
(S15)ファームウェア更新制御部110は、ガベージコレクションが検出されたSSDのファームウェア更新を実施するように、該当のSSDに対して指示する。このとき、ファームウェア更新制御部110は、更新後のファームウェアのプログラムを該当のSSDに対して提供する。該当のSSDのコントローラは、当該指示に応じて、更新後のファームウェアのプログラムを該当のSSDのNVRAMに格納し、ガベージコレクションを一時中断し、自SSDを再起動させ、更新後のファームウェアでの動作を開始する。該当のSSDのコントローラは、更新後のファームウェアでの動作開始後に、一時中断したガベージコレクションを再開する。また、該当のSSDのコントローラは、ファームウェアの更新完了を、ファームウェア更新制御部110に応答する。
(S16)ファームウェア更新制御部110は、全SSDのファームウェアの更新を完了したか否かを判定する。全SSDのファームウェアの更新を完了した場合、ファームウェア更新制御部110は、ステップS17に処理を進める。全SSDのファームウェアの更新を完了していない場合、ファームウェア更新制御部110は、ステップS12に処理を進める。
(S17)ファームウェア更新制御部110は、各SSDのファームウェア更新の完了を通知する。具体的には、ファームウェア更新制御部110は、ファームウェア更新の完了を示すメッセージを、更新指示を行ったサーバ20または他のサーバコンピュータに送信してもよい。あるいは、ファームウェア更新制御部110は、ストレージ装置10に接続された表示装置に、ファームウェア更新の完了を示すメッセージを表示させてもよい。そして、ファームウェア更新制御部110は、ファームウェア更新処理を終了する(CM100は通常時の処理に復帰する)。
このように、ファームウェア更新制御部110は、各SSDのファームウェアの更新指示を受信すると、サーバ20から受信するアクセス要求の頻度(IO数の頻度)を監視する。そして、ファームウェア更新制御部110は、当該アクセス要求の頻度が規定数以下の場合に、アクセス待ちコマンドの数に拘わらずにファームウェアの更新を各SSDに指示する。この場合、例えば、ファームウェア更新制御部110は、各SSDに対して1つずつ順番にファームウェアの更新を指示する。例えば、1つのRAIDグループにおいて、1回にファームウェア更新を行うSSDは1つとする。また、ファームウェア更新制御部110は、アクセス要求の頻度が規定数よりも大きい場合に、アクセス待ちコマンドの数に応じて、ファームウェアの更新をSSDに指示する。この場合も、1つのRAIDグループにおいて1回にファームウェア更新を行うSSDは1つとする。
なお、ステップS14の判定では、他の方法によりガベージコレクションを検出してもよい。例えば、ファームウェア更新制御部110は、単位時間におけるアクセス待ちコマンドの数の増分が所定の閾値以上になった(比較的短期間にアクセス待ちコマンド数が急増した)場合に、該当のSSDにおけるガベージコレクションを検出してもよい。このとき、ファームウェア更新制御部110は、各SSDについて、単位時間におけるアクセス待ちコマンドの数の増分が所定の閾値未満の場合に、ガベージコレクションを検出しないことになる。
こうして、ファームウェア更新制御部110は、SSD50,50a,50b,・・・それぞれに対して、ファームウェアの更新を順次行う。これにより、ファームウェアの更新に伴う性能への影響を抑えることができる。具体的には次の通りである。
SSDにおけるファームウェアの更新中は、当該SSDに対するデータアクセスを行えなくなる。このため、任意のタイミングでSSDのファームウェアの更新を行うと、該当のSSDに対するデータアクセスに遅延が発生し、性能に影響を及ぼす可能性があるという問題がある。
そこで、ファームウェア更新制御部110は、SSDによりガベージコレクションが実行中である期間を利用して、該当のSSDによるファームウェアの更新も実行させる。ガベージコレクション中は、そもそもSSDのアクセス性能が低下する期間であるため、ファームウェアの更新も当該期間において実行してしまう方が、業務運用への影響を低減できる。なぜなら、ガベージコレクション中でない通常運用中にファームウェア更新を行うと、ガベージコレクションとは別に、SSDへのアクセスを行えない時間帯が発生することになるからである。ガベージコレクションの期間中にファームウェア更新も併せて行うことで、SSDへのアクセスを行えない時間帯が余計に発生することを抑えられ、性能への影響を抑えられる。
特に、ファームウェア更新制御部110は、上記のように、サーバ20からのIO数が比較的多い場合でも、ガベージコレクション中と判断された場合には、該当のSSDのファームウェア更新を行う。これにより、サーバ20によるIO数が比較的少なくなる時間帯を待たなくてもよく、早いタイミングで更新後のファームウェアを適用することができる。更に、管理者が、サーバ20によるIO数を監視して、ファームウェア更新のタイミングを決定する場合よりも、管理者の運用管理の負担を低減できる。
また、ガベージコレクションは、各SSDによって自律的に実行され、CM100側で各SSDによるガベージコレクションが実行されるタイミングを予測することは困難である。そこで、ファームウェア更新制御部110は、キャッシュメモリ103におけるアクセス待ちコマンドの数を監視することで、各SSDによりガベージコレクションが実行されているか否かを適切に判定可能となる。なぜなら、SSDによりガベージコレクションが実行されている間は、該当のSSDに対するアクセス性能が低下し、該当のSSDに対応するキューに保持されるアクセス待ちコマンドの数が過大になる可能性が高いからである。
また、複数のRAIDグループを用いて、シンプロビジョニングにより論理的な記憶領域をユーザに割り当てる場合に、ファームウェア更新およびガベージコレクションを行っているSSDを避けたアクセス制御を実現できる。具体的には以下に示す制御が考えられる。まず、CM100によるファームウェア更新中の書き込み処理の手順を説明する。
図13は、ファームウェア更新中の書き込み処理例を示すフローチャートである。以下、図13に示す手順をステップ番号に沿って説明する。
(S21)IO制御部120は、ファームウェア更新中のSSDに対するWriteアクセス(データの書き込みコマンド)の発生を検出する。例えば、IO制御部120は、ファームウェア更新中のSSDについて、キャッシュメモリ103におけるキューからデータの書き込みに相当するアクセス待ちコマンドを取得することで、当該Writeアクセスの発生を検出する。
(S22)IO制御部120は、書き込み対象のデータが新規データであるか否かを判定する。新規データとは、該当のSSDが属するRAIDグループに既に格納されている既存データに対する更新後のデータ以外のデータである。書き込み対象のデータが新規データである場合、IO制御部120は、ステップS23に処理を進める。書き込み対象のデータが新規データでない場合、IO制御部120は、ステップS24に処理を進める。
(S23)IO制御部120は、今回の書き込み対象である新規データについて、対象SSD(すなわち、ファームウェア更新中のSSD)を含まない別のRAIDグループへチャンクを割り当てる。IO制御部120は、チャンクの割り当て変更に応じて、キャッシュメモリ103に記憶されたチャンク割り当て管理テーブル111を更新する。そして、IO制御部120は、ステップS25に処理を進める。
(S24)IO制御部120は、対象SSD(すなわち、ファームウェア更新中のSSD)を含まない別のRAIDグループへ既存データを移す。その上で、IO制御部120は、今回の書き込み対象のデータ(更新後のデータ)について、当該別のRAIDグループへチャンクを割り当てる(既存データの移行先のチャンクを割り当てる)。IO制御部120は、チャンクの割り当て変更に応じて、キャッシュメモリ103に記憶されたチャンク割り当て管理テーブル111を更新する。なお、既存データを取得する際、IO制御部120は、対象SSDが属するRAIDグループにおける対象SSD以外のSSDから既存データを取得する(例えば、RAID1であればミラー、RAID5であればパリティなどを用いて既存データを取得する)。
(S25)IO制御部120は、割り当てたRAIDグループ(ステップS23またはステップS24における別のRAIDグループ)に属するSSDに対して書き込みを実行する。
図14は、ファームウェア更新中の書き込みの具体例を示す図である。例えば、ストレージ装置10において、RAIDグループG1,G2が存在している。SSD50,50aは、RAIDグループG1に属する。SSD50b,50cは、RAIDグループG2に属する。RAIDグループG1,G2それぞれにおけるRAIDレベルは、例えば、RAID1である。そして、RAIDグループG2に属するSSD50bは、ファームウェアを更新中である。このとき、IO制御部120(プロセッサ101)が、SSD50bに対するWriteアクセスの発生を検出したとする。例えば、検出されたWriteアクセスは、既存データに対する更新データの書き込みを要求するものであるとする。
この場合、まず、IO制御部120は、(1)別RAIDにデータを再配置する。別RAIDとは、RAIDグループG2とは異なるRAIDグループG1を意味する。すなわち、IO制御部120は、RAIDグループG2に記憶された該当の既存データを、RAIDグループG1に格納する(該当の既存データに対するチャンクの割り当て変更を行う)。そして、IO制御部120は、(2)別RAIDに対して、該当の更新データを書き込む。すなわち、IO制御部120は、RAIDグループG1に再配置した既存データを、更新データにより更新する。
このように、ファームウェア更新中のSSDに対してWriteアクセスが発生した場合には、該当のSSDが属するRAIDグループとは別のRAIDグループにアクセス先を振り替えることで、ファームウェア更新に伴う書き込み遅延を低減できる。
次に、CM100によるファームウェア更新中の読み出し処理の手順を説明する。
図15は、ファームウェア更新中の読み出し処理例を示すフローチャートである。以下、図15に示す手順をステップ番号に沿って説明する。
(S31)IO制御部120は、ファームウェア更新中のSSDに対するReadアクセス(データの読み出しコマンド)の発生を検出する。例えば、IO制御部120は、ファームウェア更新中のSSDについて、キャッシュメモリ103におけるキューからデータの読み出しに相当するアクセス待ちコマンドを取得することで、当該Readアクセスの発生を検出する。
(S32)IO制御部120は、該当のSSD(ファームウェア更新中のSSD)が属するRAIDグループ内の該当のSSD以外のSSDにアクセスする。例えば、RAIDグループのRAIDレベルがRAID1の場合、該当のSSD以外のSSDは、該当のSSDに対するミラーのSSDである。あるいは、RAIDグループのRAIDレベルがRAID5の場合、該当のSSD以外のSSD(読み出し対象のデータの断片またはパリティを記憶するSSD)は、複数存在することになる。
(S33)IO制御部120は、ステップS32のアクセス結果により、読み出し対象のデータを構築する。例えば、RAID1であれば、IO制御部120は、ミラーのSSDにアクセスすることで、読み出し対象のデータを取得できる。あるいは、RAID5であれば、例えば、IO制御部120は、他のSSDから取得したパリティなどにより該当のSSDに記憶されたデータを復元できる。また、IO制御部120は、他のSSDから取得したデータと復元したデータとを用いて、読み出し対象のデータを取得できる。あるいは、ファームウェア更新中のSSDにパリティが記憶されている場合、IO制御部120は、他のSSDに記憶されたデータ(データの断片)を用いて、読み出し対象のデータを取得できる。
(S34)IO制御部120は、ステップS33において構築した読み出し対象のデータをサーバ20に応答する。
図16は、ファームウェア更新中の読み出しの具体例を示す図である。図16(A)は、RAIDレベルがRAID1であるRAIDグループG1に対するReadアクセスの処理例を示している。SSD50,50aは、RAIDグループG1に属する。そして、SSD50は、ファームウェアを更新中である。このとき、IO制御部120(プロセッサ101)が、SSD50に対するReadアクセスの発生を検出したとする。
この場合、IO制御部120は、SSD50のミラーであるSSD50aから、読み出し対象のデータを取得し、サーバ20に応答する。
図16(B)は、RAIDレベルがRAID5であるRAIDグループG3に対するReadアクセスの処理例を示している。SSD50d,50e,50f,50gは、RAIDグループG3に属する。そして、SSD50dは、ファームウェアを更新中である。このとき、IO制御部120(プロセッサ101)が、SSD50dに対するReadアクセスの発生を検出したとする。
この場合、IO制御部120は、RAIDグループG3に属するSSD50d以外のSSD50e,50f,50g(残りのSSD)に格納されたデータ(パリティなど)を用いて読み出し対象のデータを構築し、サーバ20に応答する。
このように、ファームウェア更新中のSSDに対してReadアクセスが発生した場合には、該当のSSDが属するRAIDグループにおける他のSSDを用いて、読み出し対象のデータを取得することで、ファームウェア更新に伴う読み出し遅延を低減できる。
なお、第1の実施の形態の情報処理は、処理部1bにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、プロセッサ101にプログラムを実行させることで実現できる。CM100は、プロセッサ101とRAM102(メモリ)とを含むコンピュータであると考えることもできる。プログラムは、コンピュータ読み取り可能な記録媒体11に記録できる。
例えば、プログラムを記録した記録媒体11を配布することで、プログラムを流通させることができる。プログラムの流通に利用可能な記録媒体11としては、前述のフラッシュメモリカードなどの半導体メモリ以外のものを用いることもできる。例えば、記録媒体11として、フレキシブルディスク(FD:Flexible Disk)、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)を使用してもよい。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体11に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM102やNVRAM105などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。