説明

情報処理装置及びキャッシュ制御方法

【課題】 停電等の異常終了が発生した際にも、ダーティデータを外部記憶装置に書き込むことができる情報処理装置及びキャッシュ制御方法を提供すること。
【解決手段】 実施形態によれば、第1外部記憶装置をアクセス可能な情報処理装置は、ホストシステム、第2外部記憶装置、揮発性メモリ、第1キャッシュ制御手段、終了処理手段及び初期化手段を具備する。第2外部記憶装置は前記第1外部記憶装置に対する二次キャッシュとして機能する。揮発性メモリは前記第1外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される。第1キャッシュ制御手段は前記第1外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納する。初期化手段は前記情報処理装置が異常終了した後に起動されたとき、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置に書き込む。

【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、外部記憶装置へのアクセス要求に応じたキャッシュ動作を制御する情報処理装置及び該装置に適用されるキャッシュ制御方法に関する。
【背景技術】
【0002】
半導体メモリを用いたディスクキャッシュ処理では、ホストシステムによって主メモリからハードディスクへのデータのライトが要求されたとき、例えば、ハードディスクにデータを書き込む前に、半導体メモリ(キャッシュメモリとも云う)にデータを一時記憶して、一時記憶されたデータを所定のタイミングでハードディスクに書き込むライトバック処理が実行される。ライトバック処理では、データがキャッシュメモリに一時記憶されたことに応答して、ホストシステムにデータの書き込み完了を通知する。そのため、ホストシステムに対するハードディスクの見かけ上のアクセス速度を向上させることができる。
【0003】
しかし、ライトバック処理では、稼働中に停電等が起きたとき、キャッシュメモリに一時記憶されたデータが失われてしまうという問題がある。そのため、揮発性のキャッシュメモリを使用するライトバック処理では、外部電源を用いて供給される電力に異常が検出されたとき、バックアップのためのバッテリによって電力が供給されている間に、キャッシュメモリに格納されているデータを不揮発性メモリに退避する技術が利用されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2008−192028号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
上述のライトバック処理では、ホストシステムにバックアップのためのバッテリが接続されている必要がある。しかし、ホストシステムに接続される無停電電源装置等を設けることはコストが高い。
【0006】
ところで、ホストシステムに接続されるRAIDコントローラ等には、バッテリによってバックアップされる揮発性メモリが設けられることがある。RAIDコントローラ内のプロセッサは、この揮発性メモリを作業メモリとして用いることができる。そして、このRAIDコントローラでは、停電等によって外部電源から電力が供給されないとき、バッテリを用いて揮発性メモリに電力を供給することによって揮発性メモリに格納されたデータを保持する。そのため、バッテリによってバックアップ可能な時間内に外部電源による電力供給が回復した際には、例えば、揮発性メモリに格納されたデータを外部記憶装置に書き込むことができる。
【0007】
しかし、このRAIDコントローラ内に設けられた揮発性メモリ(バッテリによってバックアップされる揮発性メモリ)は、RAIDコントローラの作業メモリとして用いられ、ホストシステムのキャッシュとして用いることはできなかった。
【0008】
本発明は、停電等の異常終了が発生した際にも、キャッシュされたダーティデータを外部記憶装置に書き込むことができる情報処理装置及びキャッシュ制御方法を提供することを目的とする。
【課題を解決するための手段】
【0009】
実施形態によれば、第1外部記憶装置をアクセス可能な情報処理装置は、ホストシステム、第2外部記憶装置、揮発性メモリ、第1キャッシュ制御手段、終了処理手段、及び初期化手段を具備する。第2外部記憶装置は、前記第1外部記憶装置に対する二次キャッシュとして機能し、前記第1外部記憶装置から読み出されるリードデータ及び前記第1外部記憶装置に書き込むべきライトデータを一時的に格納する。揮発性メモリは、前記第1外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される。第1キャッシュ制御手段は、前記ホストシステムからのライト要求に応答して前記第1外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新する。終了処理手段は、前記情報処理装置が正常終了されるとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む。初期化手段は、前記情報処理装置が停電によって異常終了した後に起動されたとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む。
【図面の簡単な説明】
【0010】
【図1】第1実施形態に係る情報処理装置の構成を示すブロック図。
【図2】同実施形態の情報処理装置に設けられたメインメモリにRAIDコントローラ内に設けられたメモリが投影される例を示す図。
【図3】同実施形態の情報処理装置のソフトウェア構成を示す概念図。
【図4】同実施形態の情報処理装置によって実行されるキャッシュドライバプログラムの構成を示すブロック図。
【図5】同実施形態の情報処理装置によって用いられるアドレステーブルの一構成例を示す図。
【図6】同実施形態の情報処理装置によって実行される初期化処理の手順の例を示すフローチャート。
【図7】同実施形態の情報処理装置によって実行されるリード処理の手順の例を示すフローチャート。
【図8】同実施形態の情報処理装置によって実行されるライト処理の手順の例を示すフローチャート。
【図9】第2実施形態に係る情報処理装置の構成を示すブロック図。
【図10】同実施形態の情報処理装置によって実行される初期化処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【0011】
以下、第1の実施の形態を、図1乃至図8に基づいて説明する。
まず、図1を参照して、第1の実施形態に係る情報処理装置の構成を説明する。この情報処理装置は、例えば、サーバコンピュータ、パーソナルコンピュータのようなコンピュータ1として実現し得る。
【0012】
コンピュータ1は、ホストシステム10、RAIDコントローラ20、及び外部記憶装置30を備える。ホストシステム10は、RAIDコントローラ20に接続され、RAIDコントローラ20を介して外部記憶装置30にアクセスする。RAIDコントローラ20は外部記憶装置30に接続される。RAIDコントローラ20は、RAID技術に基づいて、外部記憶装置30からのデータの読み出し及び外部記憶装置30へのデータの書き込み等を行う。外部記憶装置30は不揮発性の記憶装置を含む。外部記憶装置30は、例えば、SSD31と3台のHDD32,33,34を含む。
【0013】
ホストシステム10は、プロセッサ11、PCH(Platform Controller Hub)12及びメインメモリ13を備える。プロセッサ11は、ホストシステム10内の各部の動作を制御する。プロセッサ11は、例えば、外部記憶装置30からメインメモリ13上にロードされたオペレーティングシステム(OS)、キャッシュドライバプログラム54、サービス43、各種のアプリケーションプログラム等を実行する。また、プロセッサ11は、ホストシステム10に接続されたRAIDコントローラ20にコマンドを出力することができる。このコマンドは、例えば、外部記憶装置30からデータを読み出すためのリードコマンド、外部記憶装置30にデータを書き込むためのライトコマンドである。
【0014】
PCH12は、PCI(Peripheral Component Interconnect)バス上の各デバイスを制御する。また、PCH12は、USBポートに取り外し自在に接続されるUSBデバイスを制御するUSBコントローラを内蔵している。
【0015】
RAIDコントローラ20は、プロセッサ21、メモリ22、バッテリ23、バッテリ回路24、PCI Expressコネクタ26、SASコネクタ27、DMAコントローラ28を備える。
【0016】
プロセッサ21は、RAIDコントローラ20内の各部の動作を制御する。プロセッサ21は、プロセッサ11(ホストシステム10)によって出力されたコマンドをPCI Expressバス、PCI Expressコネクタ26を介して受け取る。そして、プロセッサ21は、受け取ったコマンドに応じた処理を実行する。
【0017】
プロセッサ21は、バッテリ23によってバックアップされるメモリ22に接続される。メモリ22は、プロセッサ21による処理に用いられるワーク領域やディスクキャッシュに用いられるキャッシュ領域を含む揮発性メモリである。メモリ22には、バッテリ23を用いて停電時にも電力を供給することができる。そのため、メモリ22は、ライトバックモードによるキャッシュ動作に利用することができる。
【0018】
すなわち、メモリ22は、プロセッサ11(ホストシステム10)による要求に応じて外部記憶装置30からリードされるリードデータ及び外部記憶装置30にライトされるライトデータが、一時的に格納されるキャッシュメモリとして用いられる。つまり、メモリ22は、外部記憶装置30(HDD32,33,34)に対する一次キャッシュとして機能する。ホストシステム10には、RAIDコントローラ20内のメモリ22を使用するためのインタフェースが提供される。ホストシステム10のキャッシュメモリ(一次キャッシュ)として機能するために、メモリ22は、キャッシュ管理情報221が格納される領域と一時的なキャッシュ領域222とを含む。つまり、キャッシュ管理情報221が格納される領域と一時的なキャッシュ領域222とは、ホストシステム10のメインメモリ13ではなく、RAIDコントローラ20のメモリ22内に配置される。メモリ22は、上述のようにバッテリ23によってバックアップされるため、停電時にもキャッシュ管理情報221及び一時的なキャッシュ領域222に格納されたデータを保持することができる。ホストシステム10のプロセッサ11は、キャッシュ管理情報221が格納される領域と一時的なキャッシュ領域222とを論理的にメインメモリ13の一部として使用することができるように、メモリ22をメインメモリ13に投影してもよい。
【0019】
ライトバックモードによるキャッシュ動作では、例えば、ホストシステム10によって発行される、データを外部記憶装置30に書き込むためのライト要求に応じて、このライト要求によって指定されたデータがメモリ22内のキャッシュ領域222に書き込まれる。そして、ホストシステム10に、データのライトが完了したことが通知される。また、キャッシュ領域222に書き込まれたデータは、所定のタイミングで外部記憶装置30に書き込まれる。ライトバックモードでは、データ(ライトデータ)がキャッシュ領域222に格納されたことに応答して、ホストシステム10にデータの書き込み完了が通知されるため、ホストシステム10に対して外部記憶装置30の見かけ上の書込み速度を向上させることができる。
【0020】
いままでシステムでライトバックモードを使った場合では、RAIDカード(RAIDコントローラ20)を用いないため、ホストシステム10内のメモリ13に外部記憶装置30に書き込むべき一次データ(ダーティデータと云う)が存在する。このため、停電等によって不意の電源断が発生した際には、そのダーティデータを外部記憶装置30に書き込むことができない。すなわち、揮発性メモリ13内に格納されたデータが揮発するために、外部記憶装置30に書き込むべきダーティデータが失われてしまう。また、データが格納された揮発性メモリ13のアドレス(領域)とデータが格納されるべき外部記憶装置30上のアドレス(領域)との対応を示す情報を含むキャッシュ管理情報も失われてしまう。
【0021】
このため、本実施形態では、RAIDカード内のメモリ22が、バッテリ23によってバックアップされていることに着目し、ホストシステム10のプロセッサ11がライト要求を受けたときのデータの一次キャッシュの保存先として、RAIDカード内のメモリ22を用いることにより、停電時にもメモリ22に格納されたデータを保持することができる。そのため、コンピュータ1が停電から復帰したとき、メモリ22に保持されたデータを用いて、ダーティデータを外部記憶装置30に書き込むことができる。
【0022】
図2は、メインメモリ13にRAIDコントローラ20内に設けられたメモリ22が投影される例を示す。RAIDコントローラ20内に設けられたメモリ22は、RAIDコントローラ20(プロセッサ21)によって使用されるワーク領域と、ホストシステム10(プロセッサ11)によって使用されるキャッシュ管理情報221が格納される領域及び一時的なキャッシュ領域222とを含む。ワーク領域と、ホストシステム10によって使用されるキャッシュ管理情報221が格納される領域及び一時的なキャッシュ領域222とは、排他的に使用される。ホストシステム10によって使用されるキャッシュ管理情報221が格納される領域及び一時的なキャッシュ領域222は、例えばBIOSの設定等によってメインメモリ13上に投影することができる。これにより、ホストシステム10は、RAIDコントローラ20内のメモリ22をあたかもメインメモリ13の一部であるかのように使用することができる。
【0023】
また、RAIDコントローラ20内のバッテリ23は、メモリ22及びバッテリ回路24をバックアップする。つまり、メモリ22及びバッテリ回路24には、停電時にバッテリ23を用いて電力が供給される。バッテリ23には、例えばニッケル水素電池やリチウム二次電池等が用いられる。バッテリ23によるバックアップ時間は、例えば72時間である。
【0024】
バッテリ回路24は、停電が検出されたとき等の所定のタイミングでメモリ22に電力を供給する。具体的には、バッテリ回路24は、BBU(Battery Backup Unit)オプション25に基づいて、メモリ22への電力供給を制御する。BBUオプション25は、例えば、メモリ22に電力を供給するタイミングを規定するパラメータを含む。
【0025】
バッテリ回路24は、例えば、RAIDコントローラ20内に設けられたハードウェアによるフラグ(図示せず)を用いて、停電時におけるメモリ22への電力供給を制御する。このフラグは、メモリ22にデータが存在するときセットされ、コンピュータ1が正常終了するとき(例えば、シャットダウン処理が正常に完了したとき)リセットされる。停電が発生した際には、コンピュータ1が異常終了し、フラグがセットされたままになる。バッテリ回路24は、停電の発生が検出され、且つこのフラグがセットされているとき、バッテリ23を用いてメモリ22に電力を供給する。メモリ22を制御するメモリコントローラは、停電が検出されたことに応答して、例えば、メモリ22に対するリフレッシュ動作を行うセルフリフレッシュモードに設定される。メモリコントローラによるリフレッシュ動作によって、メモリ22内のデータを保持することができる。
【0026】
外部記憶装置30は、上述のように、例えばSSD31と3台のHDD32,33,34とを含む。SSD31は、HDD32,33,34に対する二次キャッシュとして機能し、HDD32,33,34から読み出されるリードデータ及びHDD32,33,34に書き込むべきライトデータを一時的に格納する。SSD31は、キャッシュ領域31Aとキャッシュ管理情報31Bが格納される領域とを含む。つまり、SSD31の一部がキャッシュデバイスとして利用される。
【0027】
HDD32,33,34は、それぞれキャッシュ対応領域32A,33A,34Aを含む。つまり、HDD32,33,34はキャッシュ対象のデバイスであり、HDD32,33,34から読み出されるリードデータ及びHDD32,33,34に書き込むべきライトデータは、SSD31に設けられたキャッシュ領域31A(二次キャッシュ)やRAIDコントローラ20内のメモリ22に設けられた一時的なキャッシュ領域222(一次キャッシュ)に一時的に格納される。
【0028】
SSD31は、一般に、SDRAM等の半導体メモリよりも大容量であり、HDD32,33,34よりも高速にアクセスすることができる。そのため、SSD31を、HDD32,33,34に対する二次キャッシュとして用いることにより、半導体メモリよりもキャッシュミスが少なく、HDD32,33,34よりも高速にアクセス可能なキャッシュ制御を実現することができる。
【0029】
ホストシステム10のプロセッサ11が、RAIDコントローラ20内のメモリ22を一次キャッシュとして使用し、SSD31を二次キャッシュとして使用するためのキャッシュ制御は、例えば、ソフトウェアによって行われる。図3は、コンピュータ1のソフトウェア構成の例を示す。コンピュータ1は、ユーザ空間40及びカーネル空間50に属する階層化されたソフトウェア群を用いて、下位層(物理層)に属するハードウェア60の動作を制御する。図3に示すように、ユーザ空間40は、例えば、アプリケーションプログラム41、GUI42、サービス43、キャッシュAPI44等を含む。カーネル空間50は、例えば、OS51、ファイルシステム52、ディスククラスドライバ53、キャッシュドライバ(フィルタ)54、ストレージドライバ55、iSCSI56、TCP/IP57を含む。
【0030】
キャッシュドライバ54は、図3の階層に示すように、OS51によって発行される、データをHDD32,33,34に書き込むためのライトコマンド、及びデータをHDD32,33,34から読み出すためのリードコマンドを、それらコマンドがRAIDコントローラ20(すなわち、ハードウェア60)に出力されるよりも前に受信する。そして、キャッシュドライバ54は、メモリ22(一次キャッシュ)及びSSD31(二次キャッシュ)を用いて、受信したコマンドに応じた処理を実行する。なお、図3に示すように、コンピュータ1内に設けられるHDD32,33,34ではなく、ネットワーク65を介して接続されたHDD(iSCSIターゲット)66をキャッシュ対象のデバイスとしてもよい。
【0031】
図4は、キャッシュドライバプログラム54の構成の例を示す。キャッシュドライバ54は、メモリ22をホストシステム10の一次キャッシュとして使用し、SSD31をホストシステム10の二次キャッシュとして使用するための制御を行う。キャッシュドライバ54は、初期化部71、キャッシュ制御部72及び終了処理部73を備える。
【0032】
初期化部71は、コンピュータ1(ホストシステム10)が起動されたことに応答して、キャッシュ管理情報221が格納される領域と一時的なキャッシュ領域222とに対応する部分に対して初期化処理を施す。通常、メモリ22は、コンピュータ1の電源がオンになったとき、RAIDコントローラ20によって、初期化のためのクリア処理が施される。しかし、コンピュータ1が停電等によって異常終了した後に起動された際には、メモリ22に、キャッシュ管理情報221と一時的なキャッシュ領域222内のデータとが保持されている可能性がある。これらデータが消去されないように、RAIDコントローラ20は、例えば、RAIDコントローラ20のワーク領域部分に対してはデータをクリアするためのクリア処理を行い、キャッシュ管理情報221が格納される領域と一時的なキャッシュ領域222とに対応する部分に対してはパリティビットを用いた整合性のチェックを行うスクラビング処理を実行するように設定される。初期化部71は、RAIDコントローラ20によって上述の処理(クリア処理及びスクラビング処理)が施されたメモリ22に対して初期化処理を施す。
【0033】
初期化部71は、停電判定部711、第1初期化部712及び第2初期化部713を備える。
停電判定部711は、コンピュータ1が前回終了したとき、正常終了したか異常終了したかを判定する。メモリ22に格納されたキャッシュ管理情報221のヘッダ情報は、コンピュータ1が正常終了するとき(例えば、シャットダウン処理が正常に完了したとき)、クリアされる。このヘッダ情報の有無をフラグとして利用して、停電判定部711は、例えば、メモリ22内の所定の位置にキャッシュ管理情報221のヘッダ情報が存在しないとき、コンピュータ1が前回正常終了したものと判定する。また、停電判定部711は、例えば、メモリ22内の所定の位置にキャッシュ管理情報221のヘッダ情報が存在するとき、コンピュータ1が前回異常終了したものと判定する。
【0034】
なお、停電判定部711による正常終了又は異常終了の判定のためのフラグ(異常終了フラグ)を設けてもよい。その場合、例えば、コンピュータ1が正常終了した後に起動されたとき、コンピュータ1が異常終了したことを示す異常終了フラグがセットされ、コンピュータ1が正常終了されるとき、その異常終了フラグがリセットされる。したがって、次回の起動時に異常終了フラグがセットされたままであるとき、停電判定部711は、コンピュータ1が前回異常終了したものと判定する。
【0035】
停電判定部711は、コンピュータ1が前回正常終了したと判定したとき、第1初期化部712に処理の開始を要求する。第1初期化部712は、停電判定部711による要求に応答して、メモリ22を初期化する処理を開始する。具体的には、第1初期化部712は、メモリ22内にキャッシュ管理情報221を構築することにより、例えばアドレステーブル221A及びコマンドテーブル221B等を作成する。第1初期化部712は、作成されたアドレステーブル221Aに、SSD31に格納されたキャッシュ管理情報31Bをロードする。
【0036】
図5は、アドレステーブル221Aの一構成例を示す。キャッシュ管理情報221は、一時的なキャッシュ領域222又はキャッシュ領域31Aに格納されるデータに対応するエントリを含む。一時的なキャッシュ領域222又はキャッシュ領域31Aに格納されるデータは、例えば、HDD32,33,34からのリードデータ又はHDD32,33,34へのライトデータに対応するデータである。各エントリは、例えば、キャッシュ領域情報、HDD内の領域情報、及びHDD書き込みフラグを含む。あるデータに対応するエントリにおいて、キャッシュ領域情報は、そのデータが格納されているメモリ22上の領域(例えば、アドレスで示される範囲)を示す。HDD内の領域情報は、そのデータが格納されている(又は格納されるべき)HDD32,33,34上の領域を示す。HDD書き込みフラグ(ダーティフラグ)は、そのデータがHDD32,33,34に書き込まれたか否かを示す。例えば、そのデータがHDD32,33,34に既に書き込まれている場合、HDD書き込みフラグには、書き込み済みであることを示す値が設定される(すなわち、ダーティフラグがセットされない)。また、例えば、そのデータがHDD32,33,34にまだ書き込まれていない場合、HDD書き込みフラグには、未書き込みであることを示す値が設定される(すなわち、ダーティフラグがセットされる)。換言すると、HDD書き込みフラグは、そのデータがダーティデータ(HDD32,33,34にまだ書き込まれていないデータ)であるかどうかを示す。なお、一時的なキャッシュ領域222に格納されたデータに対応するエントリと、キャッシュ領域31Aに格納されたデータに対応するエントリとは別のテーブル(ディレクトリ)内に記載されてもよい。すなわち、キャッシュ管理情報221は、例えば、一時的なキャッシュ領域222に格納されたデータに対応するエントリを含むディレクトリ(一次キャッシュのディレクトリとも云う)と、キャッシュ領域31Aに格納されたデータに対応するエントリを含むディレクトリ(二次キャッシュのディレクトリとも云う)を含む。
【0037】
停電判定部711は、コンピュータ1が前回異常終了したと判定したとき、第2初期化部713に処理の開始を要求する。第2初期化部713は、停電判定部711による要求に応答して、メモリ22に格納されたキャッシュ管理情報221(アドレステーブル221A)に基づいて、一時的なキャッシュ領域222に格納されているダーティデータをHDD32,33,34又はSSD31に書き込む。具体的には、第2初期化部713は、アドレステーブル221Aに含まれる複数のエントリから、HDD書込みフラグがセットされていない(すなわち、対応するデータがダーティデータである)エントリを検出する。そして、第2初期化部713は、検出したエントリに含まれるキャッシュ領域情報に基づいて、一時的なキャッシュ領域222からデータ(ダーティデータ)を読み出し、該エントリに含まれるHDD内の領域情報に基づいて、HDD32,33,34に読み出したデータを書き込む。なお、第2初期化部713は、読み出したダーティデータをキャッシュ領域31A(SSD31)内の対応する領域や空き領域に書き込んでもよい。第2初期化部713は、該エントリのHDD書込みフラグに、データがHDD32,33,34に書込み済みであることを示す値を設定する。
【0038】
なお、第2初期化部713は、コマンドテーブル221Bに基づいて、一時的なキャッシュ領域222に格納されているダーティデータをHDD32,33,34又はSSD31に書き込んでもよい。コマンドテーブル221Bは、例えば、複数のコマンドに対応する複数のエントリを含む。あるコマンドに対応するエントリは、例えば、そのコマンドの種類と完了フラグを含む。コマンドの種類は、リードコマンド、ライトコマンド等の種類を示す。また、その読み出し先又は書込み先が示されてもよい。完了フラグは、そのコマンドの実行が完了したか否かを示す。
【0039】
コマンドテーブル221Bを用いる際には、第2初期化部713は、完了フラグに基づいて、コマンドテーブル221B内に実行が完了していない(すなわち、実行中の)コマンドがあるか否かを判定する。実行が完了していないコマンドがあるとき、第2初期化部713は、そのコマンドがライトコマンドであるか否かを判定する。そして、そのコマンドがライトコマンドであるとき、第2初期化部713は、該コマンドに対応する、一時的なキャッシュ領域222に格納されたデータをHDD32,33,34(又はSSD31)に書き込む。そして、第2初期化部713は、そのコマンドに対応するエントリに含まれる完了フラグに、実行が完了したことを示す値を設定する。また、第2初期化部713は、コマンドの実行によってHDD32,33,34に書き込まれたデータに対応する、アドレステーブル221A内のエントリに含まれるHDD書込みフラグに、ダーティデータでないことを示す値を設定する。コマンドがリードコマンドであるとき、第2初期化部713は、当該コマンドに対応するエントリをコマンドテーブル221Bからクリアする。実行が完了していない全てのコマンドに対して、上述の処理を施すことにより、停電が発生した際にも、一次キャッシュ(メモリ22)に格納されたダーティデータを失わずに、HDD32,33,34に書き込むことができる。
【0040】
上述の初期化処理が完了した後、キャッシュ制御部72による処理が開始される。
キャッシュ制御部72は、第1初期化部712又は第2初期化部713によって初期化されたメモリ22を用いて、キャッシュ動作を制御する。キャッシュ制御部72は、リード制御部722、キャッシュリード部722A、SSDリード部722B、HDDリード部722C、ライト制御部723、キャッシュライト部723A、SSDライト部723B、HDDライト部723C、リード完了通知部724、及びライト完了通知部725を備える。
【0041】
コマンド受信部721は、OS51(ホストシステム10)によって発行された、HDD32,33,34(キャッシュ対応領域32A,33A,34A)からデータを読み出すためのリードコマンド、及びHDD32,33,34にデータを書き込むためのライトコマンドを受信する。コマンド受信部721は、受信したリードコマンドをリード制御部722に出力する。また、コマンド受信部721は、受信したライトコマンドをライト制御部723に出力する。
【0042】
リード制御部722は、コマンド受信部721によって出力されたリードコマンドに指定されたデータを読み出す処理を制御する。具体的には、まず、リード制御部722は、キャッシュ管理情報221を用いて、リードコマンドによって指定されたデータに対応するデータが一時的なキャッシュ領域222に格納されているか否かを判定する。データが一時的なキャッシュ領域222に格納されている場合、リード制御部722は、キャッシュリード部722Aに一時的なキャッシュ領域222から当該データを読み出すことを要求する。キャッシュリード部722Aは、リード制御部722による要求に応答して、一時的なキャッシュ領域222から当該データを読み出す。読み出されたデータは、例えばメインメモリ13に格納される。そして、キャッシュリード部722Aは、リードコマンドによって指定されたデータが読み出されたことをリード完了通知部724に通知する。リード完了通知部724は、OS51(ホストシステム10)にリードコマンドの実行が完了したことを通知する。なお、リード制御部722は、キャッシュリード部722Aにデータの読み出しを要求する代わりに、メモリ22に対して、一時的なキャッシュ領域222から当該データを読み出すためのリードコマンドを発行(組み替え発行)してもよい。
【0043】
データが一時的なキャッシュ領域222に格納されていない場合、リード制御部722は、キャッシュ管理情報221を用いて、リードコマンドによって指定されたデータに対応するデータがSSD31内のキャッシュ領域31Aに格納されているか否かを判定する。リードコマンドによって指定されたデータに対応するデータがキャッシュ領域31Aに格納されている場合、リード制御部722は、SSDリード部722Bにキャッシュ領域31Aから当該データを読み出すことを要求する。SSDリード部722Bは、リード制御部722による要求に応答して、キャッシュ領域31Aから当該データを読み出す。読み出されたデータは、例えばメインメモリ13に格納される。そして、SSDリード部722Bは、リードコマンドによって指定されたデータが読み出されたことをリード完了通知部724に通知する。リード完了通知部724は、OS51(ホストシステム10)にリードコマンドの実行が完了したことを通知する。また、SSDリード部722Bは、読み出したデータを一時的なキャッシュ領域222に書き込んでもよい。その場合、SSDリード部722Bは、データが書き込まれたメモリ22内の領域を示す情報(キャッシュ領域情報)と、データが読み出された(SSD31内の領域に対応する)HDD32,33,34内の領域を示す情報(HDD内の領域情報)とを含むエントリをキャッシュ管理情報221に追加する。なお、リード制御部722は、SSDリード部722Bにデータの読み出しを要求する代わりに、SSD31に対して、SSD31内のキャッシュ領域31Aから当該データを読み出すためのリードコマンドを発行してもよい。
【0044】
また、データがメモリ22内の一時的なキャッシュ領域222とSSD31内のキャッシュ領域31Aのいずれにも格納されていない場合、リード制御部722は、HDDリード部722CにHDD32,33,34から当該データを読み出すことを要求する。HDDリード部722Cは、リード制御部722による要求に応答して、HDD32,33,34から当該データを読み出す。読み出されたデータは、例えばメインメモリ13に格納される。そして、HDDリード部722Cは、リードコマンドによって指定されたデータが読み出されたことをリード完了通知部724に通知する。リード完了通知部724は、OS51(ホストシステム10)にリードコマンドの実行が完了したことを通知する。また、HDDリード部722Cは、読み出したデータを一時的なキャッシュ領域222及びキャッシュ領域31Aに書き込んでもよい。その場合、HDDリード部722Cは、データが書き込まれたメモリ22内の領域を示す情報(キャッシュ領域情報)と、データが読み出されたHDD32,33,34内の領域を示す情報(HDD内の領域情報)とを含むエントリをキャッシュ管理情報221に追加する。また、HDDリード部722Cは、データが書き込まれたSSD31内の領域を示す情報(キャッシュ領域情報)と、データが読み出されたHDD32,33,34内の領域を示す情報(HDD内の領域情報)とを含むエントリをキャッシュ管理情報221に追加する。なお、リード制御部722は、HDDリード部722Cにデータのリードを要求する代わりに、HDD32,33,34に対して、HDD32,33,34から当該データを読み出すためのリードコマンドを発行してもよい。
【0045】
ライト制御部723は、コマンド受信部721によって出力されたライトコマンドに指定されたデータを書き込む処理を制御する。具体的には、まず、ライト制御部723は、キャッシュライト部723Aにライトコマンドによって指定されたデータを一時的なキャッシュ領域222に書き込むことを要求する。キャッシュライト部723Aは、ライト制御部723による要求に応答して、一時的なキャッシュ領域222に当該データを書き込む。キャッシュライト部723Aは、データが書き込まれたメモリ22内の領域を示す情報(キャッシュ領域情報)と、データが書き込まれるべきHDD32,33,34内の領域を示す情報(HDD内の領域情報)とを含むエントリをキャッシュ管理情報221に追加する。追加されるエントリでは、HDD書込みフラグに、データがHDD32,33,34にまだ書き込まれていないことを示す値が設定される。そして、キャッシュライト部723Aは、ライトコマンドによって指定されたデータが書き込まれたことをライト完了通知部725に通知する。ライト完了通知部725は、OS51(ホストシステム10)にライトコマンドの実行が完了したことを通知する。なお、ライト制御部723は、キャッシュライト部723Aにデータの書込みを要求する代わりに、メモリ22に対して、一時的なキャッシュ領域222に当該データを書き込むためのライトコマンドを発行(組み替え発行)してもよい。
【0046】
次いで、ライト制御部723は、所定のタイミングで(例えば、一定期間毎に)、一時的なキャッシュ領域222に格納されたダーティデータを書き込むことができる領域が、キャッシュ領域31A(SSD31)内にあるかどうかを判定する。具体的には、ライト制御部723は、キャッシュ管理情報221を用いて、SSD31内のキャッシュ領域31Aに格納されたデータに対応する複数のエントリの中に、一時的なキャッシュ領域222に格納されたダーティデータに対応するエントリと、HDD32,33,34内の領域情報が一致するエントリがあるかどうかを判定する。HDD32,33,34内の領域情報が一致するエントリがあるとき、ライト制御部723は、一時的なキャッシュ領域222に格納されたダーティデータを、対応するSSD31内のキャッシュ領域31Aに書き込むことを、SSDライト部723Bに要求する。SSDライト部723Bは、対応するSSD31内のキャッシュ領域31Aに、一時的なキャッシュ領域222に格納されたダーティデータを書き込む。そして、SSDライト部723Bは、そのデータが格納されている一時的なキャッシュ領域222に対応するエントリ(第1エントリと云う)と、そのデータが書き込まれたSSD31内のキャッシュ領域31Aに対応するエントリ(第2エントリと云う)とを更新する。すなわち、SSDライト部723Bは、第1エントリのHDD書込みフラグにダーティデータでないことを示す値を設定し、第2エントリのHDD書込みフラグにダーティデータであることを示す値を設定する。
【0047】
また、HDD32,33,34内の領域情報が一致するエントリがないとき、ライト制御部723は、SSD31内のキャッシュ領域31Aに、一時的なキャッシュ領域222に格納されたダーティデータを書き込むことができる空き領域があるかどうかを判定する。ダーティデータを書き込むことができる空き領域があるとき、ライト制御部723は、一時的なキャッシュ領域222に格納されたダーティデータをキャッシュ領域31A内の空き領域に書き込むことを、SSDライト部723Bに要求する。そして、SSDライト部723Bは、SSD31のキャッシュ領域31A内の空き領域に、一時的なキャッシュ領域222に格納されたダーティデータを書き込む。そして、SSDライト部723Bは、そのデータが格納されている一時的なキャッシュ領域222に対応するエントリ(第1エントリ)と、そのデータが書き込まれたSSD31内のキャッシュ領域31Aに対応するエントリ(第2エントリ)とを更新する。すなわち、SSDライト部723Bは、第1エントリのHDD書込みフラグにダーティデータでないことを示す値を設定する。また、SSDライト部723Bは、このデータが書き込まれたSSD31内の領域を示す情報、このデータが書き込まれるHDD32,33,34内の領域を示す情報、及びダーティデータであることを示すHDD書込みフラグを含むエントリをキャッシュ管理情報221に追加する。なお、ライト制御部723は、SSDライト部723Bにデータの書込みを要求する代わりに、SSD31に対して、キャッシュ領域31Aに当該データを書き込むためのライトコマンドを発行(組み替え発行)してもよい。
【0048】
さらに、キャッシュ領域31A内にダーティデータを書き込むことができる空き領域がないとき、ライト制御部723は、一時的なキャッシュ領域222に格納されたダーティデータを、対応するHDD32,33,34内の領域に書き込むことを、HDDライト部723Cに要求する。HDDライト部723Cは、キャッシュ管理情報221に基づいて、一時的なキャッシュ領域222に格納されたダーティデータを、対応するHDD32,33,34内の領域に書き込む。そして、HDDライト部723Cは、このデータに対応するエントリのHDD書込みフラグに、データがダーティデータでないことを示す値を設定する。なお、ライト制御部723は、HDDライト部723Cにデータの書込みを要求する代わりに、HDD32,33,34に対して、キャッシュ対応領域32A,33A,34Aに当該データを書き込むためのライトコマンドを発行(組み替え発行)してもよい。
【0049】
終了処理部73は、コンピュータ1がシャットダウン(正常終了)されるとき、キャッシュ管理情報221に基づいて、一時的なキャッシュ領域222に格納されているダーティデータをHDD32,33,34に書き込む。また、終了処理部73は、メモリ22に格納されたキャッシュ管理情報221を用いて、SSD31に格納されたキャッシュ管理情報31Bを更新する。そして、終了処理部73は、キャッシュ管理情報221のヘッダ情報をクリアする。上述のように、キャッシュ管理情報221のヘッダ情報がクリアされていることによって、停電判定部711は、コンピュータ1が前回正常終了されたことを検出する。なお、終了処理部73は、キャッシュ管理情報221に基づいて、SSD31のキャッシュ領域31Aに格納されているダーティデータをHDD32,33,34に書き込み、対応するキャッシュ管理情報221のエントリを更新してもよい。
【0050】
上述の構成により、停電によって異常終了が発生した際にも、一時的なキャッシュ領域222に格納されたダーティデータをHDD32,33,34に書き込むことができる。なお、上述の処理は、キャッシュドライバプログラム54に限らず、図3に示す他の階層に対応するソフトウェア及びハードウェアによる処理と連携して行われてもよい。
【0051】
次いで、図6に示すフローチャートを参照して、キャッシュドライバ54によって実行される初期化処理の手順の例について説明する。
まず、停電判定部711は、RAIDコントローラ20内のメモリ22にキャッシュ管理情報221が格納されているか否かを判定する(ブロックB11)。具体的には、停電判定部711は、例えば、メモリ22内の所定の位置にキャッシュ管理情報221のヘッダ情報が存在するとき、メモリ22にキャッシュ管理情報221が格納されていると判定する。また、停電判定部711は、例えば、メモリ22内の所定の位置にキャッシュ管理情報221のヘッダ情報が存在しないとき、メモリ22にキャッシュ管理情報221が格納されていないと判定する。上述のように、メモリ22内の所定の位置にキャッシュ管理情報221のヘッダ情報が存在することは、コンピュータ1が前回、停電等によって異常終了したことを示す。また、メモリ22内の所定の位置にキャッシュ管理情報221のヘッダ情報が存在しないことは、コンピュータ1が前回、正常終了したことを示す。
【0052】
RAIDコントローラ20内のメモリ22にキャッシュ管理情報221が格納されていない場合(すなわち、コンピュータが前回、正常終了している場合)(ブロックB11のNO)、第1初期化部712は、RAIDコントローラ20内のメモリ22にキャッシュ管理情報221を再構築する(ブロックB12)。そして、第1初期化部712は、SSD31に格納されたキャッシュ管理情報31BをRAIDコントローラ20内のメモリ22にロードする(ブロックB13)。
【0053】
RAIDコントローラ20内のメモリ22にキャッシュ管理情報221が格納されている場合(すなわち、コンピュータが前回、異常終了している場合)(ブロックB11のYES)、第2初期化部713は、RAIDコントローラ20内のメモリ22に格納されたキャッシュ管理情報221を使用することを決定する(ブロックB14)。そして、第2初期化部713は、キャッシュ管理情報221に基づいて、実行が完了していないコマンドが存在するか否かを判定する(ブロックB15)。
【0054】
実行が完了していないコマンドが存在する場合(ブロックB15のYES)、第2初期化部713は、そのコマンドがライトコマンドであるか否かを判定する(ブロックB16)。コマンドがライトコマンドである場合(ブロックB16のYES)、第2初期化部713はコマンドを実行し直す(ブロックB17)。そして、第2初期化部713は、ブロックB15に戻り、キャッシュ管理情報221にさらに実行が完了していないコマンドが存在するか否かを判定する。
【0055】
また、コマンドがライトコマンドでない場合(例えば、リードコマンドである場合)(ブロックB16のNO)、第2初期化部713は、そのコマンドをキャッシュ管理情報221(コマンドテーブル221B)からクリアする(ブロックB18)。そして、第2初期化部713は、ブロックB15に戻り、キャッシュ管理情報221にさらに実行が完了していないコマンドが存在するか否かを判定する。
【0056】
実行が完了していないコマンドが存在していない場合(ブロックB15のNO)、第2初期化部713は処理を終了する。
【0057】
以上の処理により、キャッシュメモリとして使用されるRAIDコントローラ20内のメモリ22を初期化することができ、メモリ22を用いたキャッシュ動作を開始することができる。なお、コンピュータが前回、異常終了していると判定された場合、キャッシュ管理情報221のコマンドテーブル221Bではなく、アドレステーブル221Aを用いて、HDD書込みフラグにデータがHDD32,33,34に書込み済みであることを示す値が設定されていないダーティデータをHDD32,33,34に書き込む処理を行ってもよい。
【0058】
図7のフローチャートは、コンピュータ1によって実行されるリード処理の手順の例を示す。リード処理は、例えばOS51がHDD32,33,34からデータを読み出すためのリードコマンドを発行することによって開始される。
【0059】
まず、リード制御部722は、リードコマンドによって指定されたデータが一時的なキャッシュ領域222に格納されているか否かを判定する(ブロックB201)。具体的には、リード制御部722は、キャッシュ管理情報221を用いて、キャッシュ対応領域32A,33A,34Aに格納されたリード対象のデータが一時的なキャッシュ領域222に格納されているか否かを判定する。
【0060】
リードコマンドによって指定されたデータが一時的なキャッシュ領域222に格納されている場合(ブロックB201のYES)、リード制御部722は、一時的なキャッシュ領域222からデータを読み出すためのリードコマンドを発行する(ブロックB202)。リード制御部722は、発行したリードコマンドをキャッシュリード部722Aに出力する。キャッシュリード部722Aは、リードコマンドによって指定されたデータを一時的なキャッシュ領域222から読み出す(ブロックB203)。そして、リード完了通知部724は、ホストシステム10にリードの完了を通知する(ブロックB204)。
【0061】
リードコマンドによって指定されたデータが一時的なキャッシュ領域222に格納されていない場合(ブロックB201のNO)、リード制御部722は、リードコマンドによって指定されたデータがキャッシュ領域31Aに格納されているか否かを判定する(ブロックB205)。リードコマンドによって指定されたデータがキャッシュ領域31Aに格納されている場合(ブロックB205のYES)、リード制御部722は、キャッシュ領域31Aからデータを読み出すためのリードコマンドを発行する(ブロックB206)。リード制御部722は、発行したリードコマンドをSSDリード部722Bに出力する。SSDリード部722Bは、リードコマンドによって指定されたデータをキャッシュ領域31Aから読み出す(ブロックB207)。そして、リード完了通知部724は、ホストシステム10にリードの完了を通知する(ブロックB208)。また、SSDリード部722Bは、読み出したデータを一時的なキャッシュ領域222に格納する(ブロックB209)。そして、SSDリード部722Bは、対応するエントリをキャッシュ管理情報221に追加する(ブロックB210)。SSDリード部722Bは、例えばデータが格納されたメモリ22(一時的なキャッシュ領域222)内の領域を示す情報、データが格納されるHDD32,33,34(キャッシュ対応領域32A,33A,34A)内の領域を示す情報、データがダーティデータでないことを示すフラグ(HDD書込みフラグ)を含むエントリを追加する。
【0062】
リードコマンドによって指定されたデータがキャッシュ領域31Aに格納されていない場合(ブロックB205のNO)、HDDリード部722Cは、リードコマンドによって指定されたデータをHDD32,33,34から読み出す(ブロックB211)。そして、リード完了通知部724は、ホストシステム10にリードの完了を通知する(ブロックB212)。HDDリード部722Cは、読み出したデータを一時的なキャッシュ領域222に格納する(ブロックB213)。また、HDDリード部722Cは、読み出したデータをキャッシュ領域31Aに格納する(ブロックB214)。そして、HDDリード部722Cは、対応するエントリをキャッシュ管理情報221に追加する(ブロックB215)。HDDリード部722Cは、例えばデータが格納されたメモリ22(一時的なキャッシュ領域222)内の領域を示す情報、データが格納されるHDD32,33,34(キャッシュ対応領域32A,33A,34A)内の領域を示す情報、データがダーティデータでないことを示すフラグ(HDD書込みフラグ)を含むエントリと、データが格納されたSSD31(キャッシュ領域31A)内の領域を示す情報、データが格納されるHDD32,33,34(キャッシュ対応領域32A,33A,34A)内の領域を示す情報、データがダーティデータでないことを示すフラグ(HDD書込みフラグ)を含むエントリとを追加する。
【0063】
以上の処理により、OS51によって発行された、HDD32,33,34からデータを読み出すためのリードコマンドに応じて、対応するデータを一時的なキャッシュ領域222、キャッシュ領域222又はHDD32,33,34から読み出すことができる。
【0064】
次いで、図8のフローチャートは、コンピュータ1によって実行されるライト処理の手順の例を示す。ライト処理は、例えばOS51がHDD32,33,34にデータを書き込むためのライトコマンドを発行することによって開始される。
【0065】
まず、キャッシュライト部723Aは、ライトコマンドによって指定されたデータ(ライトデータとも云う)をRAIDコントローラ20内のメモリ22に設けられた一時的なキャッシュ領域222に格納する(ブロックB301)。キャッシュライト部723Aは、対応するエントリをキャッシュ管理情報221に追加する。キャッシュライト部723Aは、例えば、データが格納されたメモリ22(一時的なキャッシュ領域222)内の領域を示す情報、データが格納されるべきHDD32,33,34(キャッシュ対応領域32A,33A,34A)内の領域を示す情報、データがダーティデータであることを示すフラグ(HDD書込みフラグ)を含むエントリを追加する。そして、ライト完了通知部725は、ホストシステム10にライトの完了を通知する(ブロックB302)。
【0066】
次いで、ライト制御部723は、SSD31内に設けられたキャッシュ領域31Aに、ライトデータが書き込まれるべきHDD32,33,34内の領域(ライト対象領域)に対応する領域があるか否かを判定する(ブロックB303)。キャッシュ領域31Aに、HDD32,33,34内のライト対象領域に対応する領域がない場合(ブロックB303のNO)、ライト制御部723は、キャッシュ領域31にライトデータを書き込むことができる空き領域があるか否かを判定する(ブロックB309)。
【0067】
キャッシュ領域31Aに、HDD32,33,34内のライト対象領域に対応する領域がある場合(ブロックB303のYES)、又はキャッシュ領域31にライトデータを書き込むことができる空き領域がある場合(ブロックB309のYES)、ライト制御部723は、一時的なキャッシュ領域222に格納されたライトデータをキャッシュ領域31Aに書き込むためのライトコマンドを発行する(ブロックB304)。ライト制御部723は、発行したライトコマンドをSSDライト部723Bに出力する。そして、SSDライト部723Bは、一時的なキャッシュ領域222に格納されたライトデータをキャッシュ領域31Aに書き込む(ブロックB305)。そして、SSDライト部723Bは、キャッシュ管理情報221内のエントリを更新(追加)する。例えば、SSDライト部723Bは、対応するエントリをキャッシュ管理情報221に追加する。SSDライト部723Bは、例えば、データが格納されたSSD31(キャッシュ領域31A)内の領域を示す情報、データが格納されるHDD32,33,34(キャッシュ対応領域32A,33A,34A)内の領域を示す情報、データがダーティデータであることを示すフラグ(HDD書込みフラグ)を含むエントリを追加する。
【0068】
次いで、ライト制御部723は、ライトデータがキャッシュ領域31Aに格納されてから一定時間が経過したか否かを判定する(ブロックB306)。一定時間が経過していない場合(ブロックB306のNO)、ライト制御部723は、再度、ブロックB306の処理を実行し、一定時間が経過したか否かを判定する。
【0069】
一定時間が経過した場合(ブロックB306のYES)、ライト制御部723は、キャッシュ領域31Aに格納されたライトデータを、HDD32,33,34内のライト対象領域に書き込むためのライトコマンドを発行する(ブロックB307)。そして、HDDライト部723Cは、キャッシュ領域31Aに格納されたライトデータを、HDD32,33,34内のライト対象領域に書き込む(ブロックB308)。HDDライト部723Cは、キャッシュ管理情報221内の対応するエントリを更新する。HDDライト部723Cは、例えば、対応するエントリに含まれるHDD書込みフラグに、ダーティデータでないことを示す値を設定する。
【0070】
キャッシュ領域31内にライトデータを書き込むことができる空き領域がない場合(ブロックB309のNO)、ライト制御部723は、一時的なキャッシュ領域222に格納されたライトデータを、HDD32,33,34内のライト対象領域に書き込むためのライトコマンドを発行する(ブロックB310)。そして、HDDライト部723Cは、一時的なキャッシュ領域222に格納されたライトデータを、HDD32,33,34内のライト対象領域に書き込む(ブロックB311)。HDDライト部723Cは、キャッシュ管理情報221内の対応するエントリを更新する。HDDライト部723Cは、例えば、対応するエントリに含まれるHDD書込みフラグに、ダーティデータでないことを示す値を設定する。
【0071】
以上の処理により、データをHDD32,33,34に書き込むためのライトコマンドに応じて、一時的なキャッシュ領域222及びキャッシュ領域31Aを用いた、ライトバックモードによるキャッシュ動作を実現することができる。
【0072】
なお、RAIDコントローラ20内のメモリ22へのアクセスには、DMAコントローラ28を用いてもよい。これにより、ホストシステム10のプロセッサ11及びRAIDコントローラ20のプロセッサ21による処理量を低減することができる。例えば、メインメモリ13とRAIDコントローラ20内のメモリ22との間のデータ転送は、プロセッサ11によって実行されるが、このデータ転送をRAIDコントローラ20内のDMAコントローラ28を用いて実行することによって、プロセッサ11にかかる負荷を分散することができる。
【0073】
次いで、第2の実施の形態を、図9及び図10に基づいて説明する。図9は、第2の実施形態に係る情報処理装置(コンピュータ1)の構成を示す。
【0074】
第2の実施形態では、RAIDコントローラ20内のメモリ22ではなく、不揮発性メモリ(SSD)29がキャッシュメモリ(一次キャッシュ)として利用される。不揮発性メモリ(SSD)29は、キャッシュ管理情報291が格納される領域と一時的なキャッシュ領域292とを含む。キャッシュドライバ54は、第1の実施形態と同様にして、不揮発性メモリ29をキャッシュメモリとして利用する。
【0075】
一般に、不揮発性メモリ29はメインメモリ13よりも低速であることが想定される。そのため、不揮発性メモリ29に格納されたキャッシュ管理情報291を読み出すことによって、コンピュータ1(ホストシステム10)の処理速度が低下する可能性がある。これは、不揮発性メモリ29がメインメモリ13よりも低速であるために、キャッシュ管理情報291のリードに多大な時間が必要になるためである。そこで、キャッシュ管理情報291をメインメモリ13にも格納し、キャッシュ管理情報291に対する更新がある際には、メインメモリ13に格納されたキャッシュ管理情報291と、不揮発性メモリ29に格納されたキャッシュ管理情報291の両方に対して更新を施す。キャッシュ動作では、キャッシュ管理情報291をサーチする読み込みが多いことが想定されるため、キャッシュ管理情報291の更新のみが行われる不揮発性メモリ29へのアクセス回数を減らすことができる。
【0076】
図10は、キャッシュドライバ54によって実行される初期化処理の手順の例を示す。なお、キャッシュドライバ54の構成は図4に示す構成と同様である。
【0077】
まず、停電判定部711は、SSD(不揮発性メモリ)29にキャッシュ管理情報291が格納されているか否かを判定する(ブロックB41)。具体的には、停電判定部711は、例えば、SSD29内の所定の位置にキャッシュ管理情報291のヘッダ情報が存在するとき、SSD29にキャッシュ管理情報291が格納されていると判定する。また、停電判定部711は、例えば、SSD29内の所定の位置にキャッシュ管理情報291のヘッダ情報が存在しないとき、SSD29にキャッシュ管理情報291が格納されていないと判定する。SSD29内の所定の位置にキャッシュ管理情報291のヘッダ情報が存在することは、コンピュータ1が前回、停電等によって異常終了したことを示す。また、SSD29内の所定の位置にキャッシュ管理情報291のヘッダ情報が存在しないことは、コンピュータ1が前回、正常終了したことを示す。
【0078】
SSD29にキャッシュ管理情報291が格納されていない場合(すなわち、コンピュータが前回、正常終了している場合)(ブロックB41のNO)、第1初期化部712は、メインメモリ13にキャッシュ管理情報291を再構築する(ブロックB42)。そして、第1初期化部712は、SSD31に格納されたキャッシュ管理情報31Bをメインメモリ13にロードする(ブロックB43)。
【0079】
SSD29にキャッシュ管理情報291が格納されている場合(すなわち、コンピュータが前回、異常終了している場合)(ブロックB41のYES)、第2初期化部713は、SSD29に格納されたキャッシュ管理情報291をメインメモリ13上のキャッシュ管理情報が格納される領域に転送する(ブロックB44)。そして、第2初期化部713は、キャッシュ管理情報291に基づいて、実行が完了していないコマンドが存在するか否かを判定する(ブロックB45)。
【0080】
実行が完了していないコマンドが存在する場合(ブロックB45のYES)、第2初期化部713は、そのコマンドがライトコマンドであるか否かを判定する(ブロックB46)。コマンドがライトコマンドである場合(ブロックB46のYES)、第2初期化部713はコマンドを実行し直す(ブロックB47)。そして、第2初期化部713は、ブロックB45に戻り、キャッシュ管理情報291にさらに実行が完了していないコマンドが存在するか否かを判定する。
【0081】
また、コマンドがライトコマンドでない場合(例えば、リードコマンドである場合)(ブロックB46のNO)、第2初期化部713は、そのコマンドをキャッシュ管理情報291(コマンドテーブル)からクリアする(ブロックB48)。そして、第2初期化部713は、ブロックB45に戻り、キャッシュ管理情報291にさらに実行が完了していないコマンドが存在するか否かを判定する。
【0082】
実行が完了していないコマンドが存在していない場合(ブロックB45のNO)、第2初期化部713は処理を終了する。
【0083】
以上の処理により、キャッシュメモリとして使用されるメインメモリ13とSSD29とを初期化することができ、メインメモリ13とSSD29とを用いたキャッシュ動作を開始することができる。
【0084】
以上説明したように、第1及び第2の実施形態によれば、停電等の異常終了が発生した際にも、キャッシュされたダーティデータを外部記憶装置に書き込むことができる。ホストシステム10は、停電時にバッテリ23によって電力が供給されるメモリ22をHDD32,33,34対する一次キャッシュとして用いる。そして、停電時にバッテリ23によって電力が供給されるメモリ22に、キャッシュ管理情報221が格納される領域及び一時的なキャッシュ領域222を設ける。また、ホストシステム10は、起動時に、前回コンピュータ1が正常終了したか異常終了したかを判定する機能を有する。これにより、コンピュータ1が異常終了したと判定された際には、停電時にバッテリ23によって電力が供給されるメモリ22に格納されたダーティデータをHDD32,33,34に書き込むことができる。つまり、停電等の異常終了が発生した際にも、ダーティデータを失うことなく、HDD32,33,34に反映させることができる。なお、停電時にバッテリ23によって電力が供給されるメモリ22の代わりに、不揮発性メモリ29を用いてもよい。
【0085】
なお、本実施形態の初期化処理、リード処理、ライト処理、及び終了処理の手順は全てソフトウェアによって実行することができる。このため、初期化処理、リード処理、ライト処理、及び終了処理の手順を実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのプログラムを通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【0086】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0087】
10…ホストシステム、20…RAIDコントローラ、30…外部記憶装置、11…プロセッサ、12…PCH、13…メインメモリ、21…プロセッサ、22…メモリ、23…バッテリ、24…バッテリ回路、25…BBUオプション、26…PCI Expressコネクタ、27…SASコネクタ、28…DMAコントローラ、221…キャッシュ管理情報、222…一時的なキャッシュ領域、31…SSD、32、33、34…HDD、31A…キャッシュ領域、31B…キャッシュ管理情報、32A、33A、34A…キャッシュ対応領域、43…サービス、54…キャッシュドライバプログラム。

【特許請求の範囲】
【請求項1】
第1外部記憶装置をアクセス可能な情報処理装置であって、
ホストシステムと、
前記第1外部記憶装置に対する二次キャッシュとして機能し、前記第1外部記憶装置から読み出されるリードデータ及び前記第1外部記憶装置に書き込むべきライトデータを一時的に格納する第2外部記憶装置と、
前記第1外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される揮発性メモリと、
前記ホストシステムからのライト要求に応答して前記第1外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新する第1キャッシュ制御手段と、
前記情報処理装置が正常終了されるとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む終了処理手段と、
前記情報処理装置が停電によって異常終了した後に起動されたとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む初期化手段とを具備する情報処理装置。
【請求項2】
前記情報処理装置が正常終了した後に起動されたとき、前記情報処理装置が異常終了したことを示す異常終了フラグをセットし、前記情報処理装置が正常終了されるとき前記異常終了フラグをリセットするフラグ制御手段と、
前記初期化手段は、前記異常終了フラグがセットされている場合、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む請求項1記載の情報処理装置。
【請求項3】
前記第1キャッシュ制御手段は、前記ライトデータが書き込まれるべき前記第1外部記憶装置上のアドレスと前記ライトデータが格納された前記揮発性メモリ上のアドレスとの対応を示すアドレス情報を前記揮発性メモリに格納されたキャッシュ管理情報に追加する請求項1記載の情報処理装置。
【請求項4】
前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたライトデータを前記第1外部記憶装置に書き込み、前記揮発性メモリに格納されたキャッシュ管理情報に、当該ライトデータが書込済みであることを示す書込フラグをセットする第2キャッシュ制御手段をさらに具備する請求項3記載の情報処理装置。
【請求項5】
前記終了処理手段は、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたライトデータのうち、前記書込フラグがセットされていないライトデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む請求項4記載の情報処理装置。
【請求項6】
前記ライトデータを前記第2外部記憶装置内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新する第3キャッシュ制御手段をさらに具備する請求項1記載の情報処理装置。
【請求項7】
前記第3キャッシュ制御手段は、前記ライトデータが書き込まれるべき前記第1外部記憶装置上のアドレスと前記ライトデータが格納された前記第2外部記憶装置上のアドレスとの対応を示すアドレス情報を前記揮発性メモリに格納されたキャッシュ管理情報に追加する請求項6記載の情報処理装置。
【請求項8】
前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記第2外部記憶装置内のキャッシュ領域に格納されたライトデータを前記第1外部記憶装置に書き込み、前記揮発性メモリに格納されたキャッシュ管理情報に、当該ライトデータが書込済みであることを示す書込フラグをセットする第4キャッシュ制御手段をさらに具備する請求項7記載の情報処理装置。
【請求項9】
前記終了処理手段は、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記第2外部記憶装置内のキャッシュ領域に格納されたライトデータのうち、前記書込フラグがセットされていないライトデータを前記第1外部記憶装置に書き込む請求項8記載の情報処理装置。
【請求項10】
第1外部記憶装置をアクセス可能な情報処理装置であって、
ホストシステムと、
前記第1外部記憶装置に対する二次キャッシュとして機能し、前記第1外部記憶装置から読み出されるリードデータ及び前記第1外部記憶装置に書き込むべきライトデータを一時的に格納する第2外部記憶装置と、
前記第1外部記憶装置に対する一次キャッシュとして機能する不揮発性メモリと、
前記ホストシステムからのライト要求に応答して前記第1外部記憶装置に書き込むべきライトデータを前記不揮発性メモリ内のキャッシュ領域に格納し、前記不揮発性メモリに格納されたキャッシュ管理情報を更新する第1キャッシュ制御手段と、
前記情報処理装置が正常終了されるとき、前記不揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記不揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む終了処理手段と、
前記情報処理装置が停電によって異常終了した後に起動されたとき、前記不揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記不揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込む初期化手段とを具備する情報処理装置。
【請求項11】
第1外部記憶装置をアクセス可能な情報処理装置であって、ホストシステムと、前記第1外部記憶装置に対する二次キャッシュとして機能し、前記第1外部記憶装置から読み出されるリードデータ及び前記第1外部記憶装置に書き込むべきライトデータを一時的に格納する第2外部記憶装置と、前記第1外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される揮発性メモリとを具備する情報処理装置のキャッシュ動作を制御するキャッシュ制御方法であって、
前記ホストシステムからのライト要求に応答して前記第1外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新し、
前記情報処理装置が正常終了されるとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込み、
前記情報処理装置が停電によって異常終了した後に起動されたとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第1外部記憶装置又は前記第2外部記憶装置に書き込むキャッシュ制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2012−78941(P2012−78941A)
【公開日】平成24年4月19日(2012.4.19)
【国際特許分類】
【出願番号】特願2010−221593(P2010−221593)
【出願日】平成22年9月30日(2010.9.30)
【出願人】(000003078)株式会社東芝 (54,554)
【Fターム(参考)】