(57)【要約】【課題】制御プログラムの更新に伴う性能への影響を抑えること。【解決手段】ストレージ装置１は、記憶部１ａと処理部１ｂとを有する。記憶部１ａは、記憶装置１ｃ，１ｄ，１ｅ，１ｆに対するコマンドを記憶する。処理部１ｂは、記憶装置１ｃの制御プログラムの更新指示を受信すると、記憶部１ａが記憶するコマンドの数に基づいて、記憶装置１ｃが不要な領域を開放するガベージコレクションを実行中であると判定した場合、制御プログラムの更新を記憶装置１ｃに指示する。【選択図】図１
2018185584.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置を有するストレージ装置において、
記憶装置に対するコマンドを記憶する記憶部と、
前記記憶装置を制御する制御プログラムの更新指示を受信すると、前記記憶部が記憶するコマンドの数に基づいて、前記記憶装置が不要な領域を開放するガベージコレクションを実行中であると判定した場合、前記制御プログラムの更新を前記記憶装置に指示する処理部と、
を有するストレージ装置。
【請求項２】
前記複数の記憶装置は、各々が記憶装置を含む複数のグループに分けられており、
前記処理部は、前記複数のグループのうち、第１のグループに属するとともに前記制御プログラムを更新中である記憶装置に対する書き込みコマンドを受け付けた場合、前記複数のグループのうち第２のグループに属する他の記憶装置に対して前記書き込みコマンドに応じたデータの書き込みを実行する、
請求項１記載のストレージ装置。
【請求項３】
前記処理部は、前記書き込みコマンドが前記第１のグループに記憶された既存データの更新を示す場合、前記既存データの格納先の記憶領域の割り当てを前記第１のグループから前記第２のグループに変更した後、前記第２のグループに属する前記他の記憶装置に対して前記書き込みコマンドに応じたデータの書き込みを実行する、
請求項２記載のストレージ装置。
【請求項４】
前記処理部は、前記複数の記憶装置のうち、前記制御プログラムを更新中である記憶装置に対する読み出しコマンドを受け付けた場合、前記第１のグループに属する記憶装置以外の記憶装置から前記読み出しコマンドに応じたデータの読み出しを実行する、
請求項２または３記載のストレージ装置。
【請求項５】
前記処理部は、前記記憶部が記憶するコマンドの数が閾値以上である場合に前記記憶装置が前記ガベージコレクションを実行中であると判定し、前記記憶部が記憶するコマンドの数が前記閾値未満である場合に前記記憶装置が前記ガベージコレクションを実行中でないと判定する、
請求項１乃至４の何れか一項に記載のストレージ装置。
【請求項６】
前記処理部は、前記更新指示を受信すると、情報処理装置から受信するアクセス要求の頻度を監視し、前記アクセス要求の頻度が規定数以下の場合、前記記憶部が記憶するコマンドの数に拘わらず、前記制御プログラムの更新を前記記憶装置に指示し、前記アクセス要求の頻度が前記規定数よりも大きい場合、前記記憶部が記憶するコマンドの数に応じて、前記制御プログラムの更新を前記記憶装置に指示する、
請求項１乃至５の何れか一項に記載のストレージ装置。
【請求項７】
前記複数のグループそれぞれは、同じＲＡＩＤ（Redundant Arrays of Independent Disks）レベルのＲＡＩＤグループである、
請求項２乃至４の何れか一項に記載のストレージ装置。
【請求項８】
前記記憶装置は、フラッシュメモリを有し、前記フラッシュメモリに対して前記ガベージコレクションを実行する、
請求項１乃至７の何れか一項に記載のストレージ装置。
【請求項９】
複数の記憶装置と記憶装置に対するコマンドを記憶する記憶部とを有するストレージ装置の制御プログラムにおいて、
前記ストレージ装置が有する処理部に、
前記記憶装置を制御する第１の制御プログラムの更新指示を受信すると、前記記憶部が記憶するコマンドの数に基づいて、前記記憶装置が不要な領域を開放するガベージコレクションを実行中であるかを判定させ、
前記ガベージコレクションを実行中であると判定した場合、前記第１の制御プログラムの更新を前記記憶装置に指示させるストレージ装置の制御プログラム。
【請求項１０】
複数の記憶装置と記憶装置に対するコマンドを記憶する記憶部とを有するストレージ装置の制御方法において、
前記ストレージ装置が有する処理部が、
前記記憶装置を制御する制御プログラムの更新指示を受信すると、前記記憶部が記憶するコマンドの数に基づいて、前記記憶装置が不要な領域を開放するガベージコレクションを実行中であるかを判定し、
前記ガベージコレクションを実行中であると判定した場合、前記制御プログラムの更新を前記記憶装置に指示するストレージ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ装置、ストレージ装置の制御プログラムおよびストレージ装置の制御方法に関する。
【背景技術】
【０００２】
現在、データの保存にストレージ装置が利用されている。ストレージ装置は、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）などの記憶装置を複数有し、大容量の記憶領域を提供する。ストレージ装置は、ＲＡＩＤ（Redundant Arrays of Independent Disks）技術により、複数の記憶装置それぞれの記憶領域を用いて論理的な記憶領域を提供することもある。ＲＡＩＤを用いることで、データアクセスの高速化やデータ記憶の高信頼化を図れる。また、ストレージ装置では、論理的な記憶領域を複数設け、データアクセスに対する信頼性の向上や、シンプロビジョニング（Thin Provisioning）の技術による記憶容量の利用の効率化を図ることもある。
【０００３】
ところで、ストレージ装置の運用では、ストレージ装置の制御に用いられる制御プログラムであるファームウェアの更新が行われることがある。例えば、複数のディスク装置と、ディスク装置へのアクセス制御を行うコントローラモジュールとを有するストレージシステムにおいてファームウェアの更新を行う方法が提案されている（特許文献１）。この提案では、ストレージシステムは、コントローラモジュールの入出力制御チップのファームウェアのダウンロード処理を、ディスク装置に対する入出力処理と並行して実行しても、入出力処理が滞ることを防止することができる。
【０００４】
なお、フラッシュメモリなどの不揮発性メモリへのデータ書き込み時に、データ書き込みに伴い無効にすべきページが属するブロックの有効ページ数をカウントし、有効ページ数が所定数以下のブロックをコンパクション処理の対象とするコントローラの提案がある（特許文献２）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１３４６８９号公報
【特許文献２】特開２０１１−１５９０４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
記憶装置には、内蔵の不揮発性メモリに制御プログラム（例えば、ファームウェア）を記憶し、制御プログラムにより自装置の動作を制御するものがある。例えば、ＳＳＤではウェアレベリングやエラー訂正などの管理機能が制御プログラムによって実現されることもある。一方、記憶装置の制御プログラムは、不具合の解消やアルゴリズムの改善などのために、制御プログラムの配信元によって更新されることがある。制御プログラムが更新されると、更新後の制御プログラムを記憶装置に適用する（記憶装置上の制御プログラムを更新する）ことになる。
【０００７】
しかし、記憶装置における制御プログラムの更新中は、当該記憶装置に対するデータアクセスを行えなくなる。このため、任意のタイミングで記憶装置の制御プログラムの更新を行うと、制御プログラムの更新期間と衝突した場合、該当の記憶装置に対するデータアクセスに遅延が発生し、性能に影響を及ぼす可能性があるという問題がある。
【０００８】
１つの側面では、本発明は、制御プログラムの更新に伴う性能への影響を抑えることを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、複数の記憶装置を有するストレージ装置が提供される。ストレージ装置は、記憶部と処理部とを有する。記憶部は、記憶装置に対するコマンドを記憶する。処理部は、記憶装置を制御する制御プログラムの更新指示を受信すると、記憶部が記憶するコマンドの数に基づいて、記憶装置が不要な領域を開放するガベージコレクションを実行中であると判定した場合、制御プログラムの更新を記憶装置に指示する。
【発明の効果】
【００１０】
１つの側面では、制御プログラムの更新に伴う性能への影響を抑えることができる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態のストレージ装置を示す図である。
【図２】第２の実施の形態の情報処理システムの例を示す図である。
【図３】ストレージ装置のハードウェア例を示す図である。
【図４】ＣＭのハードウェア例を示す図である。
【図５】ＳＳＤのハードウェア例を示す図である。
【図６】ガベージコレクションの例を示す図である。
【図７】ＣＭの機能例を示す図である。
【図８】チャンクの例を示す図である。
【図９】チャンク割り当て管理テーブルの例を示す図である。
【図１０】サーバのＩＯ数の監視例を示す図である。
【図１１】ＳＳＤに対するアクセス待ちコマンドの監視例を示す図である。
【図１２】ファームウェア更新例を示すフローチャートである。
【図１３】ファームウェア更新中の書き込み処理例を示すフローチャートである。
【図１４】ファームウェア更新中の書き込みの具体例を示す図である。
【図１５】ファームウェア更新中の読み出し処理例を示すフローチャートである。
【図１６】ファームウェア更新中の読み出しの具体例を示す図である。
【発明を実施するための形態】
【００１２】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージ装置を示す図である。ストレージ装置１は、記憶部１ａ、処理部１ｂおよび記憶装置１ｃ，１ｄ，１ｅ，１ｆを有する。記憶装置１ｃ，１ｄ，１ｅ，１ｆをまとめて、記憶装置群Ａ１と称する。ストレージ装置１は、情報処理装置２に接続される。ストレージ装置１および情報処理装置２は、所定のケーブルによって直接接続されてもよいし、ネットワークを介して接続されてもよい。ストレージ装置１は、情報処理装置２の業務処理により用いられる各種のデータ（業務データ）を記憶する。
【００１３】
ストレージ装置１は、記憶装置１ｃ，１ｄ，１ｅ，１ｆそれぞれの記憶領域を用いて論理的な記憶領域を提供可能であり、制御プログラムであるファームウェアにより制御される。例えば、ストレージ装置１は、記憶装置１ｃ，１ｄにより第１のＲＡＩＤグループ（ＲＡＩＤ１）を構築し、記憶装置１ｅ，１ｆにより第２のＲＡＩＤグループ（ＲＡＩＤ１）を構築する。そして、例えば、ストレージ装置１は、第１のＲＡＩＤグループに属する第１の記憶領域、および、第２のＲＡＩＤグループに属する第２の記憶領域を組み合わせることで、情報処理装置２によりアクセス可能な論理的な記憶領域を提供する。あるいは、ストレージ装置１は、３以上の記憶装置によるＲＡＩＤグループ（例えば、ＲＡＩＤ５）を複数作成し、各ＲＡＩＤグループの記憶領域を組み合わせて、情報処理装置２によりアクセス可能な論理的な記憶領域を提供することもできる。
【００１４】
記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、フラッシュメモリなどの不揮発性記憶装置でもよい。処理部１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１ｂはプログラムを実行するプロセッサでもよい。「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１５】
記憶装置１ｃ，１ｄ，１ｅ，１ｆは、例えばＳＳＤである。ＳＳＤは、フラッシュメモリを内蔵し、フラッシュメモリに業務データを格納する。記憶装置１ｃは、フラッシュメモリなどの業務データの格納用の記憶デバイスの他にも、ファームウェア保存用の不揮発性メモリ、ファームウェア実行用のＲＡＭおよびプロセッサを内蔵する（図１では図示を省略している）。記憶装置１ｃのプロセッサは、当該不揮発性メモリに記憶されたファームウェアを記憶装置１ｃのＲＡＭにロードして実行し、記憶装置１ｃの動作を制御する。記憶装置１ｄ，１ｅ，１ｆも記憶装置１ｃと同様に、業務データの格納用の記憶デバイス、ファームウェア保存用の不揮発性メモリ、ファームウェア実行用のＲＡＭおよびプロセッサを内蔵する。
【００１６】
処理部１ｂは、記憶装置１ｃ，１ｄ，１ｅ，１ｆのファームウェアの更新を制御する。具体的には、次の通りである。
処理部１ｂは、記憶装置群Ａ１に記憶されたデータに対するアクセス要求を情報処理装置２から受信する。処理部１ｂは、受信したアクセス要求（例えば、データの書き込み要求）に応じてアクセス先の記憶装置を決定し、該当の記憶装置に対するアクセスコマンド（アクセス要求に応じたコマンド）を生成し、記憶部１ａに格納する。記憶部１ａは、各記憶装置に対するアクセスコマンドを記憶する。記憶部１ａに格納されるアクセスコマンドは、アクセス待ち（または実行待ち）のコマンドであり、アクセス待ちコマンド（または実行待ちコマンド）と呼ばれる。
【００１７】
ここで、記憶部１ａは、記憶装置１ｃ，１ｄ，１ｅ，１ｆごとにアクセスコマンドを保持するキューを備える。例えば、記憶装置１ｃのキューは、キュー番号“１”のキューである。ここで、キュー番号“１”を、“＃１”のように表記することがある。記憶装置１ｄのキューは、“＃２”のキューである。記憶装置１ｅのキューは、“＃３”のキューである。記憶装置１ｆのキューは、“＃４”のキューである。
【００１８】
例えば、処理部１ｂは、記憶装置１ｃに対する書き込みコマンドを“＃１”のキューに格納する。処理部１ｂは、記憶装置１ｄに対する書き込みコマンドを“＃２”のキューに格納する。処理部１ｂは、記憶装置１ｅに対する書き込みコマンドを“＃３”のキューに格納する。処理部１ｂは、記憶装置１ｆに対する書き込みコマンドを“＃４”のキューに格納する。こうして、処理部１ｂは、記憶部１ａをキャッシュとして利用し、一端、記憶部１ａにデータを格納し、情報処理装置２に対する応答を行ってから、アクセス要求とは非同期に記憶装置１ｃ，１ｄ，１ｅ，１ｆへの書き込みを行う（ライトバックと呼ばれる）。これにより、処理部１ｂは、記憶部１ａにデータを格納した時点で情報処理装置２に対する応答を行えるので、書き込みなどのアクセス要求に対する応答を早めることができる。
【００１９】
処理部１ｂは、記憶装置１ｃ，１ｄ，１ｅ，１ｆのファームウェアの更新指示を受信すると、記憶部１ａに記憶された記憶装置１ｃ，１ｄ，１ｅ，１ｆそれぞれに対するアクセス待ちコマンドの数を監視する。例えば、処理部１ｂは、情報処理装置２からファームウェアの更新指示を受信してもよいし、ユーザによるファームウェアの更新指示の操作入力を受け付けてもよい。記憶装置に適用する更新後のファームウェアのプログラムは、情報処理装置２によりストレージ装置１に提供されてもよい。あるいは、当該ファームウェアのプログラムは、所定の記録媒体を用いて、ストレージ装置１に提供されてもよい。処理部１ｂは、提供されたファームウェアのプログラムを記憶部１ａに格納しておいてもよい。
【００２０】
処理部１ｂは、アクセス待ちコマンドの数に基づいて、記憶装置１ｃ，１ｄ，１ｅ，１ｆそれぞれがガベージコレクションを実行中であるか否かを判定する。
ここで、ガベージコレクションは、データの消去が可能な単位領域におけるデータを消去して、当該単位領域を再利用可能にする不要領域開放機能である。具体的には、ガベージコレクションでは、フラッシュメモリなどにおいて有効データおよび無効データが混在する第１の単位領域（例えば、ブロック）における有効データを、第２の単位領域に複製し、第１の単位領域のデータを一括して消去する。なお、「データの消去」は、「当該データが格納された記憶領域の解放」ともいえる。
【００２１】
ガベージコレクションは、記憶装置１ｃ，１ｄ，１ｅ，１ｆそれぞれにより自律的に実行される。ガベージコレクションは、各記憶装置が独自に実行する処理であり、例えば、数時間から数日に一回程度の頻度で発生する。ただし、前述のように、ガベージコレクションは、記憶装置１ｃ，１ｄ，１ｅ，１ｆにより自律的に実行されるため、処理部１ｂにより、各記憶装置でガベージコレクションが発生するタイミングを予測することは困難である。
【００２２】
一方、記憶装置によりガベージコレクションが実行されている間は、該当の記憶装置に対するアクセス性能が低下する。すなわち、記憶装置がガベージコレクションを行っている間は、該当の記憶装置に対するアクセスコマンドによるアクセスが遅延する。このため、該当の記憶装置に対応するキューに保持されているアクセス待ちコマンドが処理されずに、キューに残存する。したがって、ガベージコレクションの実行中は、該当の記憶装置に対応するキューに保持されるアクセス待ちコマンドの数が過大になる可能性が高い。
【００２３】
そこで、処理部１ｂは、例えば、アクセス待ちコマンドの数が、所定の閾値を超えた記憶装置について、ガベージコレクションを実行中であると判定する。一方、処理部１ｂは、例えば、アクセス待ちコマンドの数が所定の閾値以下の記憶装置について、ガベージコレクションを実行中でないと判定する。
【００２４】
例えば、図１のグラフは、処理部１ｂがファームウェアの更新指示を受け付けた後のある時点における、記憶装置１ｃ，１ｄ，１ｅ，１ｆそれぞれに対するアクセス待ちコマンドの数（アクセス待ちコマンド数）を示す。記憶装置１ｃに対するアクセス待ちコマンド数は、閾値を超過している。記憶装置１ｄ，１ｅ，１ｆに対するアクセス待ちコマンド数は閾値を超過していない。この場合、処理部１ｂは、記憶装置１ｃがガベージコレクションを実行中であると判定する。一方、処理部１ｂは、記憶装置１ｄ，１ｅ，１ｆがガベージコレクションを実行中でないと判定する。
【００２５】
処理部１ｂは、ある記憶装置についてガベージコレクションを実行中であると判定された場合に、ファームウェアの更新を当該記憶装置に指示する。上記の例でいえば、処理部１ｂは、ガベージコレクションを実行中であると判定された記憶装置１ｃに対してファームウェアの更新を指示する。このとき、処理部１ｂは、適用すべきファームウェアのプログラムを記憶装置１ｃに提供する。一方、処理部１ｂは、この段階では、記憶装置１ｄ，１ｅ，１ｆに対してファームウェアの更新を指示しない。
【００２６】
例えば、ファームウェアの更新の指示を受け付けた記憶装置１ｃは、ガベージコレクションの実行を一時中断して、記憶装置１ｃにより保持されるファームウェアの更新を行い、更新完了後にガベージコレクションの実行を再開する。
【００２７】
こうして、処理部１ｂは、記憶装置１ｃ，１ｄ，１ｅ，１ｆに対して、ファームウェアの更新を順次行う。
これにより、ファームウェアの更新に伴う性能への影響を抑えることができる。具体的には次の通りである。
【００２８】
記憶装置におけるファームウェアの更新中は、当該記憶装置に対するデータアクセスを行えなくなる。このため、任意のタイミングで記憶装置のファームウェアの更新を行うと、該当の記憶装置に対するデータアクセスに遅延が発生し、性能に影響を及ぼす可能性があるという問題がある。
【００２９】
そこで、処理部１ｂは、記憶装置によりガベージコレクションが実行中である期間を利用して、該当の記憶装置によるファームウェアの更新も実行させる。ガベージコレクション中は、そもそも記憶装置のアクセス性能が低下する期間であるため、ファームウェアの更新も当該期間において実行してしまう方が、業務運用への影響を低減できる。なぜなら、ガベージコレクション中でない通常運用中にファームウェア更新を行うと、ガベージコレクションとは別に、記憶装置へのアクセスを行えない時間帯が発生することになるからである。ガベージコレクションの期間中にファームウェア更新も併せて行うことで、記憶装置へのアクセスを行えない時間帯が余計に発生することを抑えられ、性能への影響を抑えられる。
【００３０】
また、複数のＲＡＩＤグループを用いて、シンプロビジョニングにより論理的な記憶領域をユーザに割り当てる場合に、ファームウェア更新中の記憶装置を避けたアクセス制御を実現できる。具体的には次の制御が考えられる。
【００３１】
第１に、処理部１ｂは、ファームウェア更新中の記憶装置が属する第１のＲＡＩＤグループへの新規データの書き込み要求に対して、第１のＲＡＩＤグループ以外の第２のＲＡＩＤグループの記憶領域を当該新規データの書き込み先に割り当てる。
【００３２】
第２に、処理部１ｂは、ファームウェア更新中の記憶装置が属する第１のＲＡＩＤグループに格納された既存データの更新要求に対し、既存データの格納先の記憶領域の割り当てを第１のＲＡＩＤグループから第２のＲＡＩＤグループに変更する。処理部１ｂは、その上で、第２のＲＡＩＤグループに属する他の記憶装置に対して書き込み（既存データに対する更新後のデータの書き込み）を実行する。
【００３３】
第３に、処理部１ｂは、ファームウェア更新中の記憶装置が属するＲＡＩＤグループに格納された既存データの読み出し要求に対し、ファームウェア更新中の記憶装置以外の他の記憶装置により当該既存データを構築し、応答する。例えば、処理部１ｂは、ＲＡＩＤ１であれば、ミラーとなる他の記憶装置から既存データを取得し、応答する。あるいは、処理部１ｂは、ＲＡＩＤ５であれば、パリティなどを記憶する複数の他の記憶装置から既存データを取得し、応答する。
【００３４】
このようにして、処理部１ｂは、ファームウェア（制御プログラム）の更新に伴う性能への影響を抑えて、記憶装置群Ａ１に記憶されたデータに対するアクセスを行うことができる。
【００３５】
［第２の実施の形態］
図２は、第２の実施の形態の情報処理システムの例を示す図である。第２の実施の形態の情報処理システムは、ストレージ装置１０およびサーバ２０を含む。ストレージ装置１０およびサーバ２０は、例えば、ＳＡＮ（Storage Area Network）などのネットワークを介して接続される。ストレージ装置１０およびサーバ２０は、所定のケーブルによって直接接続されてもよい。
【００３６】
ストレージ装置１０は、複数のＳＳＤ（複数の記憶装置の一例）を備える。ストレージ装置１０は、複数のＳＳＤにより、大容量の記憶領域をサーバ２０に提供する。ストレージ装置１０は、２以上のＳＳＤを１つのグループ（ＲＡＩＤグループ）とする。ストレージ装置１０は、１つのＲＡＩＤグループに属する２以上のＳＳＤを用いて、ＲＡＩＤ（ＲＡＩＤレベルは１以上であるとする）を構築する。複数のＲＡＩＤグループのＲＡＩＤレベルは同じである。
【００３７】
ストレージ装置１０は、複数のＲＡＩＤグループにおける記憶領域を組み合わせることで、サーバ２０によりアクセス可能な仮想的なボリューム（仮想ボリューム）を提供する。仮想ボリュームに対する実容量は、シンプロビジョニングの技術により割り当てられる。これにより、ストレージ装置１０における記憶容量の効率的な利用が図られる。
【００３８】
ストレージ装置１０は、第１の実施の形態のストレージ装置１の一例である。
サーバ２０は、ユーザの業務処理を行う業務アプリケーションを実行するサーバコンピュータである。サーバ２０は、ストレージ装置１０に記憶されたデータを用いて業務処理を行う。サーバ２０は、新たなデータをストレージ装置１０に書き込むことがある。サーバ２０は、ストレージ装置１０に記憶されているデータを更新することもある。また、サーバ２０は、ストレージ装置１０に記憶されているデータを読み出すこともある。更に、サーバ２０は、ストレージ装置１０に記憶されているデータを削除することもある。
【００３９】
図３は、ストレージ装置のハードウェア例を示す図である。ストレージ装置１０は、コントローラモジュール（ＣＭ：Controller Module）１００およびドライブ収納部２００を有する。
【００４０】
ＣＭ１００は、ドライブ収納部２００に収納されている各ＳＳＤに対するデータアクセスを制御するストレージ制御装置である。ＣＭ１００は、ＲＡＩＤコントローラ、または、単にコントローラと呼ばれることもある。ストレージ装置１０は、複数のＣＭを備えてもよい。複数のＣＭによりデータアクセス機能を冗長化させることで、データアクセス機能の可用性の向上やデータアクセス性能の向上を図ることもある。
【００４１】
ドライブ収納部２００は、ＳＳＤ５０，５０ａ，５０ｂ，・・・を収納する収納装置である。ドライブ収納部２００は、ドライブエンクロージャと呼ばれることもある。ＳＳＤ５０，５０ａ，５０ｂ，・・・は、フラッシュメモリを備える記憶装置である。
【００４２】
ここで、サーバ２０により発行された新規データの書き込みのアクセス要求や、既存データの更新のアクセス要求は、ＣＭ１００のキャッシュメモリを用いたライトバック方式で処理される。具体的には次の通りである。
【００４３】
（１）ＣＭ１００は、サーバ２０から書き込みのアクセス要求を受信する。書き込みのアクセス要求は、書き込み対象のデータを含む。（２）ＣＭ１００は、ＣＭ１００のキャッシュメモリに、書き込み対象のデータを書き込む。（３）ＣＭ１００は、書き込みが完了した旨の通知をサーバ２０に送信する。（４）ＣＭ１００は、キャッシュメモリに蓄積された書き込み対象のデータを、サーバ２０によるアクセス要求とは非同期に、ＳＳＤ５０，５０ａ，５０ｂ，・・・に書き込む。
【００４４】
このように、ライトバック方式では、一連の手順の中にキャッシュメモリを介在させる。これにより、サーバ２０およびＣＭ１００の間のデータの転送速度と、ＣＭ１００からＳＳＤ５０，５０ａ，５０ｂ，・・・へのデータの書き込み速度との差によるＣＭ１００からサーバ２０への応答遅延を低減する。
【００４５】
図４は、ＣＭのハードウェア例を示す図である。ＣＭ１００は、プロセッサ１０１、ＲＡＭ１０２、キャッシュメモリ１０３、媒体リーダ１０４、ＮＶＲＡＭ（Non-Volatile RAM）１０５、ＤＩ（Drive Interface）１０６、ＣＡ（Channel Adaptor）１０７、ＮＡ（Network Adaptor）１０８を有する。各ハードウェアはＣＭ１００のバスに接続されている。
【００４６】
プロセッサ１０１は、ＣＭ１００の情報処理を制御するハードウェアである。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００４７】
ＲＡＭ１０２は、ＣＭ１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるファームウェアのプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００４８】
キャッシュメモリ１０３は、ライトバック方式によるＳＳＤへのデータ書き込みに用いられる揮発性の半導体メモリである。キャッシュメモリ１０３は、ライトバックの処理に用いられるため、ライトバックキャッシュと呼ばれてもよい。キャッシュメモリ１０３は、プロセッサ１０１による書き込み制御に用いられる各種データも記憶する。
【００４９】
媒体リーダ１０４は、記録媒体１１に記録されたプログラムやデータを読み取る装置である。記録媒体１１として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用できる。媒体リーダ１０４は、例えば、プロセッサ１０１からの命令に従って、記録媒体１１から読み取ったプログラムやデータをＲＡＭ１０１またはＮＶＲＡＭ１０５に格納する。
【００５０】
ＮＶＲＡＭ１０５は、ＣＭ１００の動作制御に用いられるファームウェアを記憶する不揮発性メモリである。プロセッサ１０１は、ＮＶＲＡＭ１０５に記憶されたファームウェアのプログラムをＲＡＭ１０２にロードすることで、各種の機能を発揮する。
【００５１】
ＤＩ１０６は、ドライブ収納部２００との接続に用いられるインタフェースである。ＤＩ１０６としては、例えば、ＳＡＳ（Serial Attached SCSI（SCSIはSmall Computer System Interfaceの略））やファイバチャネル（ＦＣ：Fibre Channel）などのインタフェースを用いることができる。
【００５２】
ＣＡ１０７は、ＳＡＮ３０を介してサーバ２０と通信する通信インタフェースである。ＣＡ１０７として、例えばＦＣのインタフェースを用いることができる。ＣＡ１０７として、ＦＣ以外のインタフェース（例えば、ｉＳＣＳＩ（Internet Small Computer System Interface）など）が用いられることもある。
【００５３】
ＮＡ１０８は、ＬＡＮ３０ａを介してサーバ２０や、ＬＡＮ３０ａを介してアクセス可能な他のサーバコンピュータと通信する通信インタフェースである。ＮＡ１０８として、例えば、イーサネット（登録商標）のインタフェースを用いることができる。
【００５４】
図５は、ＳＳＤのハードウェア例を示す図である。ＳＳＤ５０は、コントローラ５１、ＮＶＲＡＭ５２、接続ＩＦ（InterFace）５３およびフラッシュメモリ５４を有する。各ハードウェアは、ＳＳＤ５０のバスに接続されている。ＳＳＤ５０ａ，５０ｂ，・・・もＳＳＤ５０と同様のハードウェアにより実現される。
【００５５】
コントローラ５１は、フラッシュメモリ５４に対するデータの書き込みや読み出しなどのアクセス制御を行う。コントローラ５１は、プロセッサおよびＲＡＭ（図５では図示を省略している）を内蔵し、当該ＲＡＭにロードされたファームウェアｆ１を、プロセッサにより実行することで、所定の機能を実現する。ファームウェアｆ１により実現される機能としては、例えば、エラー訂正、ウェアレベリング、エラーブロックの管理およびガベージコレクションなどが挙げられる。
【００５６】
また、コントローラ５１は、ＣＭ１００によるファームウェアｆ１の更新の指示に応じて、ＮＶＲＡＭ５２に記憶されているファームウェアｆ１を更新する。具体的には、コントローラ５１は、改版後のファームウェアをＣＭ１００から取得して、ＮＶＲＡＭ５２に書き込む。コントローラ５１は、１世代前のファームウェアｆ１をＮＶＲＡＭ５２に残した状態で、改版後のファームウェアをＮＶＲＡＭ５２に書き込んでもよい。あるいは、コントローラ５１は、ファームウェアｆ１を改版後のファームウェアにより上書きしてもよい。
【００５７】
ＮＶＲＡＭ５２は、ファームウェアｆ１を記憶する不揮発性メモリである。前述のように、ＮＶＲＡＭ５２により記憶されるファームウェアは、コントローラ５１により更新される。ＮＶＲＡＭ５２は、コントローラ５１に内蔵されてもよい。
【００５８】
接続ＩＦ５３は、ドライブ収納部２００に接続するためのインタフェースである。接続ＩＦ５３としては、例えば、ＳＡＳのインタフェースを用いることができる。
フラッシュメモリ５４は、ユーザの業務処理に用いられる各種のデータを記憶する。フラッシュメモリ５４は、コントローラ５１の制御により、フラッシュメモリ５４に内蔵される記憶素子に対して電気的にデータの書き込みを行う。
【００５９】
ここで、フラッシュメモリ５４の記憶領域は、複数のブロックに区分される。ブロックは複数のページを含む。ページは、データの読み出しや書き込みが行われる記憶領域の単位である。一方、フラッシュメモリ５４では、ブロック単位でデータが消去される。したがって、ブロック内の無効データが格納されたページを再利用可能にするためには当該無効データを消去することになるが、この場合、無効データのみを消去することはできず、該当のブロック内の全てのページのデータを消去することになる。コントローラ５１は、ガベージコレクションと呼ばれる処理により、ブロック単位のデータの消去を行う。以下の説明では、ガベージコレクションを、ＧＣ（Garbage Collection）と略記することがある。
【００６０】
図６は、ガベージコレクションの例を示す図である。図６（Ａ）、図６（Ｂ）、図６（Ｃ）は、フラッシュメモリ５４におけるブロック５４ａ，５４ｂ，５４ｃ，５４ｄを例示している。ブロック５４ａは、ページＰ１１，Ｐ１２，Ｐ１３，Ｐ１４を含む。ブロック５４ｂは、ページＰ２１，Ｐ２２，Ｐ２３，Ｐ２４を含む。ブロック５４ｃは、ページＰ３１，Ｐ３２，Ｐ３３，Ｐ３４を含む。ブロック５４ｄは、ページＰ４１，Ｐ４２，Ｐ４３，Ｐ４４を含む。
【００６１】
図６（Ａ）において、ページＰ１１，Ｐ１２，Ｐ１３，Ｐ１４，Ｐ２１，Ｐ２３，Ｐ２４，Ｐ３１，Ｐ３３，Ｐ４１，Ｐ４４は、有効なデータ（有効データ）を記憶しているページである。また、ページＰ２２は、無効なデータ（無効データ）を記憶しているページである。更に、ページＰ３２，Ｐ３４，Ｐ４２，Ｐ４３は、データを記憶していない空きページである。
【００６２】
例えば、コントローラ５１は、ページＰ２２を再利用可能にするために、ブロック５４ｂに属するページＰ２１，Ｐ２３，Ｐ２４に記憶されている有効データを空きページに複製する。具体的には、コントローラ５１は、ページＰ２１に記憶されている有効データを複製し、複製された有効データをページＰ３２に格納する。コントローラ５１は、ページＰ２３に記憶されている有効データを複製し、複製された有効データをページＰ４３に格納する。コントローラ５１は、ページＰ２４に記憶されている有効データを複製し、複製された有効データをページＰ３４に格納する。
【００６３】
図６（Ｂ）は、コントローラ５１による上記の有効データの複製後のブロック５４ａ，５４ｂ，５４ｃ，５４ｄを示している。具体的には、空きページであったページＰ３２に、ページＰ２１の有効データの複製が格納されている。また、空きページであったページＰ３４に、ページＰ２４の有効データの複製が格納されている。更に、空きページであったページＰ４３に、ページＰ２３の有効データの複製が格納されている。
【００６４】
コントローラ５１は、ブロック５４ｂに格納されているデータ（すなわち、ページＰ２１，Ｐ２２，Ｐ２３，Ｐ２４に記憶されているデータ）を消去する（あるいは、「ブロック５４ｂを解放する」といってもよい）。
【００６５】
図６（Ｃ）は、コントローラ５１によるブロック５４ｂに格納されているデータの消去後のブロック５４ａ，５４ｂ，５４ｃ，５４ｄを示している。こうして、コントローラ５１は、ページＰ２２の無効データを消去する場合でも、ガベージコレクションにより、ブロック５４ｂの単位でデータを消去し、ブロック５４ｂ全体を再利用可能にする。
【００６６】
ここで、ガベージコレクションは、コントローラ５１により、例えば、数時間から数日に一回程度の頻度で実行される。ガベージコレクションの実行中には、該当のＳＳＤのアクセス性能が低下する。ガベージコレクションの所要時間は、数分（例えば、５分）程度である。ガベージコレクションは、ＳＳＤ５０においてコントローラ５１により自律的に実行されるため、ＣＭ１００側でガベージコレクションが発生するタイミングを予測することは困難である。
【００６７】
図７は、ＣＭの機能例を示す図である。ＣＭ１００は、ファームウェア更新制御部１１０およびＩＯ（Input / Output）制御部１２０を有する。ファームウェア更新制御部１１０およびＩＯ制御部１２０は、例えば、ＲＡＭ１０２に記憶されたプログラムを、プロセッサ１０１により実行することで、プロセッサ１０１により発揮される機能である。ただし、ファームウェア更新制御部１１０およびＩＯ制御部１２０は、ＦＰＧＡやＡＳＩＣなどのハードワイヤードロジックにより実現されてもよい。
【００６８】
ファームウェア更新制御部１１０は、キャッシュメモリ１０３に記憶される情報に基づいて、ＳＳＤ５０，５０ａ，５０ｂ，・・・によるファームウェアの更新のタイミングを制御する。具体的には、ファームウェア更新制御部１１０は、ＳＳＤ５０，５０ａ，５０ｂ，・・・のファームウェアの更新指示の入力を受け付ける。当該更新指示は、管理者によりＣＭ１００に入力されてもよいし、サーバ２０または他のサーバコンピュータによりＬＡＮ３０ａを介して、ＣＭ１００に入力されてもよい。更新指示が管理者によりＣＭ１００に入力される場合、記録媒体１１を用いて、更新後のファームウェアのプログラムが、ＣＭ１００に提供される。あるいは、更新指示がサーバ２０または他のサーバコンピュータによりＣＭ１００に入力される場合、サーバ２０または他のサーバコンピュータによりＬＡＮ３０ａを介して、更新後のファームウェアのプログラムが、ＣＭ１００に提供される。
【００６９】
そして、ファームウェア更新制御部１１０は、サーバ２０によるストレージ装置１０へのアクセス状況や、ＳＳＤ５０，５０ａ，５０ｂ，・・・それぞれに対するアクセス待ちコマンドを監視する。ファームウェア更新制御部１１０は、当該監視に応じて、ＳＳＤ毎に、ファームウェアの更新のタイミングを決定する。ファームウェア更新制御部１１０は、あるＳＳＤにおいてファームウェアの更新を行うと決定すると、該当のＳＳＤに対して更新後のファームウェアを提供し、ファームウェアの更新を指示する。ファームウェア更新制御部１１０は、ファームウェアを更新中であるＳＳＤの識別情報を、キャッシュメモリ１０３に格納する。なお、ＳＳＤによるファームウェアの更新の所要時間は、数秒（例えば、５秒）程度である。
【００７０】
ＩＯ制御部１２０は、キャッシュメモリ１０３に記憶される情報に基づいて、ファームウェア更新中のＳＳＤに対するＩＯを制御する。具体的には、ファームウェア更新中のＳＳＤに対するＩＯを、別のＳＳＤに振り替えたり、ファームウェア更新中のＳＳＤが属するＲＡＩＤグループにおける他のＳＳＤを用いて処理したりする。例えば、ＩＯ制御部１２０は、ファームウェア更新制御部１１０によりキャッシュメモリ１０３に格納されたファームウェアを更新中であるＳＳＤの識別情報を参照することで、ファームウェア更新中のＳＳＤを特定する。
【００７１】
図８は、チャンクの例を示す図である。ＲＡＩＤグループにおける各ＳＳＤの記憶領域はチャンクと呼ばれる単位で管理される。例えば、ＳＳＤ５０は、チャンクａ，ｂ，ｃ，ｄ，ｅを含む（ＳＳＤ５０には更に多くのチャンクが含まれ得る）。ここで、識別情報“ａ”で表されるチャンクを、“チャンクａ”のように表記している。
【００７２】
図９は、チャンク割り当て管理テーブルの例を示す図である。チャンク割り当て管理テーブル１１１は、キャッシュメモリ１０３に記憶される。チャンク割り当て管理テーブル１１１は、Ｗｒｉｔｅデータ（書き込み対象のデータ）と、チャンクとの対応関係を管理するためのテーブルである。チャンク割り当て管理テーブル１１１は、Ｗｒｉｔｅデータおよびチャンクの項目を含む。
【００７３】
Ｗｒｉｔｅデータの項目には、Ｗｒｉｔｅデータの識別情報が登録される。チャンクの項目には、当該Ｗｒｉｔｅデータの書き込み先のチャンクの識別情報が登録される。例えば、チャンク割り当て管理テーブル１１１には、Ｗｒｉｔｅデータが“１”、チャンクが“ａ，ｂ”というレコードが登録されている。これは、識別情報“１”に対応するＷｒｉｔｅデータの書き込み先が、チャンクａ，ｂであることを示す。チャンク割り当て管理テーブル１１１には、他のＷｒｉｔｅデータに対しても同様に、書き込み先のチャンクの識別情報が対応付けられている。
【００７４】
ここで、チャンク割り当て管理テーブル１１１は、キャッシュメモリ１０３に、ＳＳＤ毎に格納される（チャンク割り当てテーブルは、該当のＳＳＤの識別情報と対応付けられてキャッシュメモリ１０３に格納される）。各ＳＳＤのチャンク割り当て管理テーブルは、ストレージ装置１０の電源をオフにする際（当該電源がオフになる直前）に、プロセッサ１０１により、ＳＳＤ５０，５０ａ，５０ｂ，・・・の所定の記憶領域（不揮発性の記憶領域）に格納される。また、各ＳＳＤのチャンク割り当て管理テーブルは、ストレージ装置１０の電源をオンにする際（例えば、当該電源のオンのための処理の間）に、プロセッサ１０１により、ＳＳＤ５０，５０ａ，５０ｂ，・・・の所定の記憶領域から読み出されて、キャッシュメモリ１０３に格納される。
【００７５】
図１０は、サーバのＩＯ数の監視例を示す図である。ファームウェア更新制御部１１０は、サーバ２０によるストレージ装置１０へのＩＯ数を監視することで、サーバ２０によるアクセス状況を監視する。サーバ２０によるＩＯ数は、プロセッサ１０１が受け付けたサーバ２０による書き込みや読み出しのアクセス要求の数である。例えば、ファームウェア更新制御部１１０は、サーバ２０から単位時間当たりに受け付けたＩＯ数を得ることで、現在、サーバ２０によるアクセス要求が規定数よりも多いか、または、規定数以下かを判定し得る。サーバ２０によるアクセス要求が規定数よりも多い場合、サーバ２０では、ユーザの業務処理が活発に行われていると推定される。また、サーバ２０によるアクセス要求が規定数以下の場合、サーバ２０では、ユーザの業務処理の実行が不活発であると推定される。ファームウェア更新制御部１１０は、ＲＡＩＤグループ毎に、ＩＯ数を監視してもよい。
【００７６】
なお、アクセス要求は、前述のライトバックの方法により、キャッシュメモリ１０３に保持される（具体的な保持方法は、図１１において説明される）。そして、プロセッサ１０１は、キャッシュメモリ１０３に保持された当該アクセス要求に応じて、所定のＲＡＩＤグループ（例えば、ＳＳＤ５０，５０ａが属するＲＡＩＤグループＧ１）に対するアクセスを行う。
【００７７】
図１１は、ＳＳＤに対するアクセス待ちコマンドの監視例を示す図である。前述のように、プロセッサ１０１は、ライトバック方式によって、サーバ２０からのアクセス要求を処理する。このため、ファームウェア更新制御部１１０は、サーバ２０から受け付けたアクセス要求に基づいて、ＳＳＤ５０，５０ａ，５０ｂ，・・・それぞれに対するアクセスコマンドをキャッシュメモリ１０３に格納する。キャッシュメモリ１０３に格納された各ＳＳＤに対するアクセスコマンドは、アクセス待ちとなっているコマンドである。このため、キャッシュメモリ１０３に格納されたアクセスコマンドを、アクセス待ちコマンドと称する。
【００７８】
キャッシュメモリ１０３には、ＳＳＤ５０，５０ａ，５０ｂ，・・・それぞれのキューが設けられ、各キューにアクセス待ちコマンドが格納される。例えば、ＳＳＤ５０（図中“ＳＳＤｘ”と表記）に対応するキューに、ＳＳＤ５０に対する複数のアクセス待ちコマンド（アクセス待ちコマンド群）が格納される。また、ＳＳＤ５０ａ（図中“ＳＳＤｙ”と表記）に対応するキューに、ＳＳＤ５０ａに対する複数のアクセス待ちコマンド（アクセス待ちコマンド群）が格納される。
【００７９】
例えば、ファームウェア更新制御部１１０は、ＳＳＤ５０に対応するキューに格納されたアクセス待ちコマンドの数を求めることで、ＳＳＤ５０に対するアクセス待ちコマンドの数を得る。同様に、ファームウェア更新制御部１１０は、ＳＳＤ５０ａに対応するキューに格納されたアクセス待ちコマンドの数を求めることで、ＳＳＤ５０ａに対するアクセス待ちコマンドの数を得る。ファームウェア更新制御部１１０は、他のＳＳＤに対しても同様にして、アクセス待ちコマンドの数を求めることができる。
【００８０】
次に、ＣＭ１００によるＳＳＤのファームウェア更新の処理手順を説明する。
図１２は、ファームウェア更新例を示すフローチャートである。以下、図１２に示す手順をステップ番号に沿って説明する。
【００８１】
（Ｓ１１）ファームウェア更新制御部１１０は、ＳＳＤ５０，５０ａ，５０ｂ，・・・のファームウェア更新の指示（更新指示）を受け付ける。前述のように、ファームウェア更新制御部１１０は、記録媒体１１やＬＡＮ３０ａを介して、更新後のファームウェアのプログラムを取得し、ＲＡＭ１０２またはキャッシュメモリ１０３に格納する。
【００８２】
（Ｓ１２）ファームウェア更新制御部１１０は、ＩＯ数を監視し、各ＳＳＤについてＩＯ数が規定数以下であるか否かを判定する。ファームウェア更新制御部１１０によるＩＯ数の監視方法は、図１０で例示した通りである。例えば、ファームウェア更新制御部１１０は、サーバ２０から受け付けるＩＯ数の頻度（単位時間当たりのＩＯ数）を取得し、ＩＯ数の頻度を、規定数（規定の頻度）以下であるか否かを、ＲＡＩＤグループ単位に判定する。あるＲＡＩＤグループについてＩＯ数（ＩＯ数の頻度）が規定数以下である場合、ファームウェア更新制御部１１０は、ステップＳ１３に処理を進める。何れのＲＡＩＤグループについてもＩＯ数（ＩＯ数の頻度）が規定数よりも大きい場合、ファームウェア更新制御部１１０は、ステップＳ１４に処理を進める。ここで、ステップＳ１２の判定に用いられる規定数は、運用に応じて予め定められ、ファームウェア更新制御部１１０に対して予め設定される。
【００８３】
（Ｓ１３）ファームウェア更新制御部１１０は、ＩＯ数（ＩＯ数の頻度）が規定数以下のＲＡＩＤグループに属するＳＳＤのファームウェア更新を実施するように、該当のＳＳＤに対して指示する。例えば、ファームウェア更新制御部１１０は、１つのＳＳＤずつ順番にファームウェア更新を行うよう指示する。このとき、ファームウェア更新制御部１１０は、更新後のファームウェアのプログラムを該当のＳＳＤに対して提供する。該当のＳＳＤのコントローラは、当該指示に応じて、更新後のファームウェアのプログラムを該当のＳＳＤのＮＶＲＡＭに格納し、自ＳＳＤを再起動させ、更新後のファームウェアでの動作を開始し、更新完了をファームウェア更新制御部１１０に応答する。そして、ファームウェア更新制御部１１０は、ステップＳ１６に処理を進める。
【００８４】
（Ｓ１４）ファームウェア更新制御部１１０は、キャッシュメモリ１０３に格納されたＳＳＤ毎のアクセス待ちコマンドの数に基づいて、何れかのＳＳＤにおいてガベージコレクション（ＧＣ）を検出したか否かを判定する。何れかのＳＳＤにおいてガベージコレクションを検出した場合、ファームウェア更新制御部１１０は、ステップＳ１５に処理を進める。ガベージコレクションを検出していない場合、ファームウェア更新制御部１１０は、ステップＳ１２に処理を進める。
【００８５】
ここで、図１１で例示したように、ファームウェア更新制御部１１０は、キャッシュメモリ１０３を参照し、あるＳＳＤにおいて、アクセス待ちコマンドの数が所定の閾値以上になった場合に、該当のＳＳＤにおけるガベージコレクションを検出する。一方、ファームウェア更新制御部１１０は、各ＳＳＤについて、アクセス待ちコマンドの数が所定の閾値未満である場合に、ガベージコレクションを検出しない。ステップＳ１４の判定に用いられる閾値は、運用に応じて予め定められ、ファームウェア更新制御部１１０に対して予め設定される。
【００８６】
（Ｓ１５）ファームウェア更新制御部１１０は、ガベージコレクションが検出されたＳＳＤのファームウェア更新を実施するように、該当のＳＳＤに対して指示する。このとき、ファームウェア更新制御部１１０は、更新後のファームウェアのプログラムを該当のＳＳＤに対して提供する。該当のＳＳＤのコントローラは、当該指示に応じて、更新後のファームウェアのプログラムを該当のＳＳＤのＮＶＲＡＭに格納し、ガベージコレクションを一時中断し、自ＳＳＤを再起動させ、更新後のファームウェアでの動作を開始する。該当のＳＳＤのコントローラは、更新後のファームウェアでの動作開始後に、一時中断したガベージコレクションを再開する。また、該当のＳＳＤのコントローラは、ファームウェアの更新完了を、ファームウェア更新制御部１１０に応答する。
【００８７】
（Ｓ１６）ファームウェア更新制御部１１０は、全ＳＳＤのファームウェアの更新を完了したか否かを判定する。全ＳＳＤのファームウェアの更新を完了した場合、ファームウェア更新制御部１１０は、ステップＳ１７に処理を進める。全ＳＳＤのファームウェアの更新を完了していない場合、ファームウェア更新制御部１１０は、ステップＳ１２に処理を進める。
【００８８】
（Ｓ１７）ファームウェア更新制御部１１０は、各ＳＳＤのファームウェア更新の完了を通知する。具体的には、ファームウェア更新制御部１１０は、ファームウェア更新の完了を示すメッセージを、更新指示を行ったサーバ２０または他のサーバコンピュータに送信してもよい。あるいは、ファームウェア更新制御部１１０は、ストレージ装置１０に接続された表示装置に、ファームウェア更新の完了を示すメッセージを表示させてもよい。そして、ファームウェア更新制御部１１０は、ファームウェア更新処理を終了する（ＣＭ１００は通常時の処理に復帰する）。
【００８９】
このように、ファームウェア更新制御部１１０は、各ＳＳＤのファームウェアの更新指示を受信すると、サーバ２０から受信するアクセス要求の頻度（ＩＯ数の頻度）を監視する。そして、ファームウェア更新制御部１１０は、当該アクセス要求の頻度が規定数以下の場合に、アクセス待ちコマンドの数に拘わらずにファームウェアの更新を各ＳＳＤに指示する。この場合、例えば、ファームウェア更新制御部１１０は、各ＳＳＤに対して１つずつ順番にファームウェアの更新を指示する。例えば、１つのＲＡＩＤグループにおいて、１回にファームウェア更新を行うＳＳＤは１つとする。また、ファームウェア更新制御部１１０は、アクセス要求の頻度が規定数よりも大きい場合に、アクセス待ちコマンドの数に応じて、ファームウェアの更新をＳＳＤに指示する。この場合も、１つのＲＡＩＤグループにおいて１回にファームウェア更新を行うＳＳＤは１つとする。
【００９０】
なお、ステップＳ１４の判定では、他の方法によりガベージコレクションを検出してもよい。例えば、ファームウェア更新制御部１１０は、単位時間におけるアクセス待ちコマンドの数の増分が所定の閾値以上になった（比較的短期間にアクセス待ちコマンド数が急増した）場合に、該当のＳＳＤにおけるガベージコレクションを検出してもよい。このとき、ファームウェア更新制御部１１０は、各ＳＳＤについて、単位時間におけるアクセス待ちコマンドの数の増分が所定の閾値未満の場合に、ガベージコレクションを検出しないことになる。
【００９１】
こうして、ファームウェア更新制御部１１０は、ＳＳＤ５０，５０ａ，５０ｂ，・・・それぞれに対して、ファームウェアの更新を順次行う。これにより、ファームウェアの更新に伴う性能への影響を抑えることができる。具体的には次の通りである。
【００９２】
ＳＳＤにおけるファームウェアの更新中は、当該ＳＳＤに対するデータアクセスを行えなくなる。このため、任意のタイミングでＳＳＤのファームウェアの更新を行うと、該当のＳＳＤに対するデータアクセスに遅延が発生し、性能に影響を及ぼす可能性があるという問題がある。
【００９３】
そこで、ファームウェア更新制御部１１０は、ＳＳＤによりガベージコレクションが実行中である期間を利用して、該当のＳＳＤによるファームウェアの更新も実行させる。ガベージコレクション中は、そもそもＳＳＤのアクセス性能が低下する期間であるため、ファームウェアの更新も当該期間において実行してしまう方が、業務運用への影響を低減できる。なぜなら、ガベージコレクション中でない通常運用中にファームウェア更新を行うと、ガベージコレクションとは別に、ＳＳＤへのアクセスを行えない時間帯が発生することになるからである。ガベージコレクションの期間中にファームウェア更新も併せて行うことで、ＳＳＤへのアクセスを行えない時間帯が余計に発生することを抑えられ、性能への影響を抑えられる。
【００９４】
特に、ファームウェア更新制御部１１０は、上記のように、サーバ２０からのＩＯ数が比較的多い場合でも、ガベージコレクション中と判断された場合には、該当のＳＳＤのファームウェア更新を行う。これにより、サーバ２０によるＩＯ数が比較的少なくなる時間帯を待たなくてもよく、早いタイミングで更新後のファームウェアを適用することができる。更に、管理者が、サーバ２０によるＩＯ数を監視して、ファームウェア更新のタイミングを決定する場合よりも、管理者の運用管理の負担を低減できる。
【００９５】
また、ガベージコレクションは、各ＳＳＤによって自律的に実行され、ＣＭ１００側で各ＳＳＤによるガベージコレクションが実行されるタイミングを予測することは困難である。そこで、ファームウェア更新制御部１１０は、キャッシュメモリ１０３におけるアクセス待ちコマンドの数を監視することで、各ＳＳＤによりガベージコレクションが実行されているか否かを適切に判定可能となる。なぜなら、ＳＳＤによりガベージコレクションが実行されている間は、該当のＳＳＤに対するアクセス性能が低下し、該当のＳＳＤに対応するキューに保持されるアクセス待ちコマンドの数が過大になる可能性が高いからである。
【００９６】
また、複数のＲＡＩＤグループを用いて、シンプロビジョニングにより論理的な記憶領域をユーザに割り当てる場合に、ファームウェア更新およびガベージコレクションを行っているＳＳＤを避けたアクセス制御を実現できる。具体的には以下に示す制御が考えられる。まず、ＣＭ１００によるファームウェア更新中の書き込み処理の手順を説明する。
【００９７】
図１３は、ファームウェア更新中の書き込み処理例を示すフローチャートである。以下、図１３に示す手順をステップ番号に沿って説明する。
（Ｓ２１）ＩＯ制御部１２０は、ファームウェア更新中のＳＳＤに対するＷｒｉｔｅアクセス（データの書き込みコマンド）の発生を検出する。例えば、ＩＯ制御部１２０は、ファームウェア更新中のＳＳＤについて、キャッシュメモリ１０３におけるキューからデータの書き込みに相当するアクセス待ちコマンドを取得することで、当該Ｗｒｉｔｅアクセスの発生を検出する。
【００９８】
（Ｓ２２）ＩＯ制御部１２０は、書き込み対象のデータが新規データであるか否かを判定する。新規データとは、該当のＳＳＤが属するＲＡＩＤグループに既に格納されている既存データに対する更新後のデータ以外のデータである。書き込み対象のデータが新規データである場合、ＩＯ制御部１２０は、ステップＳ２３に処理を進める。書き込み対象のデータが新規データでない場合、ＩＯ制御部１２０は、ステップＳ２４に処理を進める。
【００９９】
（Ｓ２３）ＩＯ制御部１２０は、今回の書き込み対象である新規データについて、対象ＳＳＤ（すなわち、ファームウェア更新中のＳＳＤ）を含まない別のＲＡＩＤグループへチャンクを割り当てる。ＩＯ制御部１２０は、チャンクの割り当て変更に応じて、キャッシュメモリ１０３に記憶されたチャンク割り当て管理テーブル１１１を更新する。そして、ＩＯ制御部１２０は、ステップＳ２５に処理を進める。
【０１００】
（Ｓ２４）ＩＯ制御部１２０は、対象ＳＳＤ（すなわち、ファームウェア更新中のＳＳＤ）を含まない別のＲＡＩＤグループへ既存データを移す。その上で、ＩＯ制御部１２０は、今回の書き込み対象のデータ（更新後のデータ）について、当該別のＲＡＩＤグループへチャンクを割り当てる（既存データの移行先のチャンクを割り当てる）。ＩＯ制御部１２０は、チャンクの割り当て変更に応じて、キャッシュメモリ１０３に記憶されたチャンク割り当て管理テーブル１１１を更新する。なお、既存データを取得する際、ＩＯ制御部１２０は、対象ＳＳＤが属するＲＡＩＤグループにおける対象ＳＳＤ以外のＳＳＤから既存データを取得する（例えば、ＲＡＩＤ１であればミラー、ＲＡＩＤ５であればパリティなどを用いて既存データを取得する）。
【０１０１】
（Ｓ２５）ＩＯ制御部１２０は、割り当てたＲＡＩＤグループ（ステップＳ２３またはステップＳ２４における別のＲＡＩＤグループ）に属するＳＳＤに対して書き込みを実行する。
【０１０２】
図１４は、ファームウェア更新中の書き込みの具体例を示す図である。例えば、ストレージ装置１０において、ＲＡＩＤグループＧ１，Ｇ２が存在している。ＳＳＤ５０，５０ａは、ＲＡＩＤグループＧ１に属する。ＳＳＤ５０ｂ，５０ｃは、ＲＡＩＤグループＧ２に属する。ＲＡＩＤグループＧ１，Ｇ２それぞれにおけるＲＡＩＤレベルは、例えば、ＲＡＩＤ１である。そして、ＲＡＩＤグループＧ２に属するＳＳＤ５０ｂは、ファームウェアを更新中である。このとき、ＩＯ制御部１２０（プロセッサ１０１）が、ＳＳＤ５０ｂに対するＷｒｉｔｅアクセスの発生を検出したとする。例えば、検出されたＷｒｉｔｅアクセスは、既存データに対する更新データの書き込みを要求するものであるとする。
【０１０３】
この場合、まず、ＩＯ制御部１２０は、（１）別ＲＡＩＤにデータを再配置する。別ＲＡＩＤとは、ＲＡＩＤグループＧ２とは異なるＲＡＩＤグループＧ１を意味する。すなわち、ＩＯ制御部１２０は、ＲＡＩＤグループＧ２に記憶された該当の既存データを、ＲＡＩＤグループＧ１に格納する（該当の既存データに対するチャンクの割り当て変更を行う）。そして、ＩＯ制御部１２０は、（２）別ＲＡＩＤに対して、該当の更新データを書き込む。すなわち、ＩＯ制御部１２０は、ＲＡＩＤグループＧ１に再配置した既存データを、更新データにより更新する。
【０１０４】
このように、ファームウェア更新中のＳＳＤに対してＷｒｉｔｅアクセスが発生した場合には、該当のＳＳＤが属するＲＡＩＤグループとは別のＲＡＩＤグループにアクセス先を振り替えることで、ファームウェア更新に伴う書き込み遅延を低減できる。
【０１０５】
次に、ＣＭ１００によるファームウェア更新中の読み出し処理の手順を説明する。
図１５は、ファームウェア更新中の読み出し処理例を示すフローチャートである。以下、図１５に示す手順をステップ番号に沿って説明する。
【０１０６】
（Ｓ３１）ＩＯ制御部１２０は、ファームウェア更新中のＳＳＤに対するＲｅａｄアクセス（データの読み出しコマンド）の発生を検出する。例えば、ＩＯ制御部１２０は、ファームウェア更新中のＳＳＤについて、キャッシュメモリ１０３におけるキューからデータの読み出しに相当するアクセス待ちコマンドを取得することで、当該Ｒｅａｄアクセスの発生を検出する。
【０１０７】
（Ｓ３２）ＩＯ制御部１２０は、該当のＳＳＤ（ファームウェア更新中のＳＳＤ）が属するＲＡＩＤグループ内の該当のＳＳＤ以外のＳＳＤにアクセスする。例えば、ＲＡＩＤグループのＲＡＩＤレベルがＲＡＩＤ１の場合、該当のＳＳＤ以外のＳＳＤは、該当のＳＳＤに対するミラーのＳＳＤである。あるいは、ＲＡＩＤグループのＲＡＩＤレベルがＲＡＩＤ５の場合、該当のＳＳＤ以外のＳＳＤ（読み出し対象のデータの断片またはパリティを記憶するＳＳＤ）は、複数存在することになる。
【０１０８】
（Ｓ３３）ＩＯ制御部１２０は、ステップＳ３２のアクセス結果により、読み出し対象のデータを構築する。例えば、ＲＡＩＤ１であれば、ＩＯ制御部１２０は、ミラーのＳＳＤにアクセスすることで、読み出し対象のデータを取得できる。あるいは、ＲＡＩＤ５であれば、例えば、ＩＯ制御部１２０は、他のＳＳＤから取得したパリティなどにより該当のＳＳＤに記憶されたデータを復元できる。また、ＩＯ制御部１２０は、他のＳＳＤから取得したデータと復元したデータとを用いて、読み出し対象のデータを取得できる。あるいは、ファームウェア更新中のＳＳＤにパリティが記憶されている場合、ＩＯ制御部１２０は、他のＳＳＤに記憶されたデータ（データの断片）を用いて、読み出し対象のデータを取得できる。
【０１０９】
（Ｓ３４）ＩＯ制御部１２０は、ステップＳ３３において構築した読み出し対象のデータをサーバ２０に応答する。
図１６は、ファームウェア更新中の読み出しの具体例を示す図である。図１６（Ａ）は、ＲＡＩＤレベルがＲＡＩＤ１であるＲＡＩＤグループＧ１に対するＲｅａｄアクセスの処理例を示している。ＳＳＤ５０，５０ａは、ＲＡＩＤグループＧ１に属する。そして、ＳＳＤ５０は、ファームウェアを更新中である。このとき、ＩＯ制御部１２０（プロセッサ１０１）が、ＳＳＤ５０に対するＲｅａｄアクセスの発生を検出したとする。
【０１１０】
この場合、ＩＯ制御部１２０は、ＳＳＤ５０のミラーであるＳＳＤ５０ａから、読み出し対象のデータを取得し、サーバ２０に応答する。
図１６（Ｂ）は、ＲＡＩＤレベルがＲＡＩＤ５であるＲＡＩＤグループＧ３に対するＲｅａｄアクセスの処理例を示している。ＳＳＤ５０ｄ，５０ｅ，５０ｆ，５０ｇは、ＲＡＩＤグループＧ３に属する。そして、ＳＳＤ５０ｄは、ファームウェアを更新中である。このとき、ＩＯ制御部１２０（プロセッサ１０１）が、ＳＳＤ５０ｄに対するＲｅａｄアクセスの発生を検出したとする。
【０１１１】
この場合、ＩＯ制御部１２０は、ＲＡＩＤグループＧ３に属するＳＳＤ５０ｄ以外のＳＳＤ５０ｅ，５０ｆ，５０ｇ（残りのＳＳＤ）に格納されたデータ（パリティなど）を用いて読み出し対象のデータを構築し、サーバ２０に応答する。
【０１１２】
このように、ファームウェア更新中のＳＳＤに対してＲｅａｄアクセスが発生した場合には、該当のＳＳＤが属するＲＡＩＤグループにおける他のＳＳＤを用いて、読み出し対象のデータを取得することで、ファームウェア更新に伴う読み出し遅延を低減できる。
【０１１３】
なお、第１の実施の形態の情報処理は、処理部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。ＣＭ１００は、プロセッサ１０１とＲＡＭ１０２（メモリ）とを含むコンピュータであると考えることもできる。プログラムは、コンピュータ読み取り可能な記録媒体１１に記録できる。
【０１１４】
例えば、プログラムを記録した記録媒体１１を配布することで、プログラムを流通させることができる。プログラムの流通に利用可能な記録媒体１１としては、前述のフラッシュメモリカードなどの半導体メモリ以外のものを用いることもできる。例えば、記録媒体１１として、フレキシブルディスク（ＦＤ：Flexible Disk）、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用してもよい。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１１に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＮＶＲＡＭ１０５などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０１１５】
１  ストレージ装置
１ａ  記憶部
１ｂ  処理部
１ｃ，１ｄ，１ｅ，１ｆ  記憶装置
２  情報処理装置
Ａ１  記憶装置群
【図１】
2018185584.tif 000003
【図２】
2018185584.tif 000004
【図３】
2018185584.tif 000005
【図４】
2018185584.tif 000006
【図５】
2018185584.tif 000007
【図６】
2018185584.tif 000008
【図７】
2018185584.tif 000009
【図８】
2018185584.tif 000010
【図９】
2018185584.tif 000011
【図１０】
2018185584.tif 000012
【図１１】
2018185584.tif 000013
【図１２】
2018185584.tif 000014
【図１３】
2018185584.tif 000015
【図１４】
2018185584.tif 000016
【図１５】
2018185584.tif 000017
【図１６】
2018185584.tif 000018