以下、本発明の実施の形態について図面を参照して説明する。
〔第1の実施の形態〕
図1は、第1の実施の形態に係る情報処理装置の構成例および処理例を示す図である。情報処理装置10は、揮発性記憶装置11、不揮発性記憶装置12、バッテリ13および制御部14を有する。
揮発性記憶装置11には、あらかじめ優先度が設定された複数のデータ群が記憶されている。図1の例では、最も優先度が高い「優先度1」が設定されたデータ群DG1と、次に優先度が高い「優先度2」が設定されたデータ群DG2と、最も優先度が低い「優先度3」が設定されたデータ群DG3が記憶されているものとする。
ここで、重要性の高いデータ群ほど、高い優先度が設定される。例えば、他の情報処理装置のバックアップデータより、情報処理装置10が自ら使用するデータの方が、高い優先度が設定される。
不揮発性記憶装置12には、電源の停電時において、揮発性記憶装置11に記憶されたデータ群DG1~DG3がバックアップされる。
バッテリ13は、停電時において、揮発性記憶装置11に記憶されたデータ群DG1~DG3を不揮発性記憶装置12に格納するための電力を供給する。なお、このようなデータの格納は制御部14の制御により実行されるので、停電時におけるバッテリ13からの電力は、揮発性記憶装置11、不揮発性記憶装置12および制御部14に供給される。
制御部14は、例えば、プロセッサとして実現される。制御部14は、停電時において、揮発性記憶装置11に記憶されたデータ群DG1~DG3を、優先度が高い順に不揮発性記憶装置12に格納するバックアップ処理を実行する。また、制御部14は、このバックアップ処理において、1つのデータ群を不揮発性記憶装置12へ格納する処理が完了するたびに、バッテリ13から供給される供給電圧に基づいて、バッテリ13からの電圧供給に関する故障状態を判定する。そして、制御部14は、判定された故障状態に基づいて、次に優先度が高いデータ群を不揮発性記憶装置12へ格納するか否かを決定する。
例えば、制御部14は、まず、最も優先度の高いデータ群DG1を不揮発性記憶装置12に格納する(ステップS1)。格納が完了すると、制御部14は、バッテリ13からの供給電圧に基づいて故障状態を判定し(ステップS2)、故障状態に基づいて、次に優先度の高いデータ群DG2を不揮発性記憶装置12に格納するか否かを決定する(ステップS3)。制御部14は、特定の故障が発生していると判定した場合、その時点でバックアップ処理を終了する。一方、制御部14は、故障していないと判定した場合、次のデータ群DG2に関してステップS1~S3を実行する。このようにして、故障していないと判定される間、データ群DG2,DG3が順次不揮発性記憶装置12に格納される。一方、故障していると判定された時点で、バックアップ処理が終了される。
ここで、バッテリ13からの電圧供給経路上の回路において種々の故障が発生する場合がある。これらの故障によりバッテリ13の消費電力が高くなり、そのためにバッテリ13の持続時間が短くなってしまう場合がある。このような故障の種類によっては、例えば、バッテリ13からの供給電圧が正常時より一定レベルだけ低くなったり、正常時より供給電圧の低下が早く始まる場合がある。上記のステップS2では、バッテリ13からの供給電圧から、このような特定の故障が発生しているか否かを判定でき、発生していると判定された場合には、バッテリ13の持続時間が少ないと推定できる。
そして、制御部14による上記処理によれば、データ群単位でバックアップが行われ、かつ、優先度の高いデータ群ほど先にバックアップが行われて、特定の故障が発生していると判定された場合には、バックアップ処理が終了される。これにより、故障発生状況に応じたバッテリ13の持続時間内で、重要性の高いデータをバックアップすることができる。
〔第2の実施の形態〕
次に、図1の情報処理装置10を含む情報処理システムの例として、ストレージシステムについて説明する。
図2は、第2の実施の形態に係るストレージシステムの構成例を示す図である。図2に示すストレージシステムは、CM(Controller Module)100,200、ドライブ部300およびPSU(Power Supply Unit)400を備えたストレージ装置1000と、ホスト装置1100とを含む。ホスト装置1100は、例えばSAN(Storage Area Network)を介して、CM100,200と接続されている。
CM100,200は、ホスト装置1100からの要求に応じて、ドライブ部300に搭載された記憶装置に対するアクセスを制御するストレージ制御装置である。CM100は、CM100の内部のキャッシュを用いて、ドライブ部300内の記憶装置に対するアクセスを制御する。CM200も同様に、CM200の内部のキャッシュを用いて、ドライブ部300内の記憶装置に対するアクセスを制御する。
また、CM100とCM200は、互いに接続され、データを互いに送受信することができる。CM100とCM200との間のデータ転送は、キャッシュのミラーリングに利用される。すなわち、CM100のキャッシュのデータがCM200にミラーリングされ、CM200のキャッシュのデータがCM100にミラーリングされる。
ドライブ部300には、ホスト装置1100からのアクセス対象となる複数台の記憶装置が搭載されている。記憶装置としては、HDD(Hard Disk Drive)、SSD(Solid State Drive)などの不揮発性記憶装置が搭載される。
PSU400は、図示しない外部電源から供給された電力を受け付け、その電力を基にCM100,200およびドライブ部300に対して電源を供給する。
図3は、CMのハードウェア構成例を示す図である。
まず、CM100は、CPU(Central Processing Unit)101、RAM(Random Access Memory)102、PCIe(PCI express,PCI:Peripheral Component Interconnect)スイッチ103、SSD104、ホストコントローラ(CONT)105、SAS(Serial Attached SCSI,SCSI:Small Computer System Interface)エクスパンダ(EXP)106、バッテリ107および電源制御回路108を備える。
CPU101は、CM100全体を統括的に制御する。CPU101は、例えば、1または複数のプロセッサコアを備える。
RAM102は、CM100の主記憶装置として使用される。RAM102には、CPU101に実行させるOS(Operating System)プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。例えば、RAM102には、ホスト装置1100からの要求に応じたドライブ部300内の記憶装置へのアクセス制御の際に用いられるキャッシュの領域が確保される。
SSD104は、PCIeスイッチ103を介してCPU101と接続されている。PCIeスイッチ103は、SSD104とCPU101との間のデータ送受信を制御する。
SSD104は、CM100の補助記憶装置として使用される。SSD104には、OSプログラム、アプリケーションプログラム、および各種データが格納される。また、SSD104には、停電時にRAM102内の一部のデータをバックアップするためのバックアップ領域が確保される。なお、SSD104の代わりに、HDDなどの他の種類の不揮発性記憶装置が用いられてもよい。
ホストコントローラ105は、ホスト装置1100と通信するためのインタフェース回路である。
SASエクスパンダ106は、CPU101とドライブ部300内の記憶装置との間で送受信されるデータを中継する。なお、図3では例として、ドライブ部300にはn台の記憶装置DK1,DK2,DK3,・・・,DKnが搭載されている。SASエクスパンダ106とドライブ部300内の記憶装置DK1,DK2,DK3,・・・,DKnとの間では、SAS規格にしたがって通信が行われる。
バッテリ107は、停電時のバックアップ用電源である。バッテリ107は、停電が発生したとき、RAM102内のバックアップ対象データをSSD204のバックアップ領域にバックアップするための電力をCM100の内部に供給する。
電源制御回路108は、PSU400から供給される電力とバッテリ107から供給される電力のいずれかを、選択的にCM100の内部に供給する。具体的には、電源制御回路108は、通常時はPSU400からの電力をCM100の内部に供給し、停電の発生を検出すると、バッテリ107からの電力をCM100の内部に供給する。
CM200は、CM100と同様のハードウェア構成を有する。すなわち、CM200は、CPU201、RAM202、PCIeスイッチ203、SSD204、ホストコントローラ(CONT)205、SASエクスパンダ(EXP)206、バッテリ207および電源制御回路208を備える。CPU201、RAM202、PCIeスイッチ203、SSD204、ホストコントローラ205、SASエクスパンダ206、バッテリ207および電源制御回路208は、CPU101、RAM102、PCIeスイッチ103、SSD104、ホストコントローラ105、SASエクスパンダ106、バッテリ107および電源制御回路108にそれぞれ対応する構成要素であるので、ここでは説明を省略する。
図4は、CM間でのキャッシュのミラーリングについて説明するための図である。
CM100,200は、論理ボリュームに対するアクセスをホスト装置1100から受け付ける。論理ボリュームは、ドライブ部300に搭載された1台以上の記憶装置によって実現される論理記憶領域である。本実施の形態では、CM100,200は、それぞれ個別の論理ボリュームに対するアクセスを受け付けるものとする。なお、論理ボリュームは、シンプロビジョニング技術を用いた仮想ボリュームであってもよい。この場合、ドライブ部300内の複数の記憶装置によって実現される「プール」と呼ばれる論理記憶領域から、仮想ボリュームの記憶領域が動的に割り当てられる。
CM100は、RAM102の記憶領域の一部をキャッシュとして用い、論理ボリュームに対するアクセスをライトバック方式で制御する。CM200も同様に、RAM202の記憶領域の一部をキャッシュとして用い、論理ボリュームに対するアクセスをライトバック方式で制御する。また、CM100,200は、自装置のキャッシュのデータを他方のRAMにミラーリングする。これにより、キャッシュのデータが失われる可能性が低減される。また、一方の装置が故障したとき、他方の装置がミラーリングされたキャッシュのデータを用いて、一方の装置が実行していたアクセス制御処理を引き継ぐこともできる。
図4に示すように、CM100のRAM102には、自系テーブル領域102a、自系キャッシュ領域102b、他系テーブル領域102cおよび他系キャッシュ領域102dが確保される。また、CM200のRAM202には、自系テーブル領域202a、自系キャッシュ領域202b、他系テーブル領域202cおよび他系キャッシュ領域202dが確保される。
CM100の自系テーブル領域102aには、CM100が論理ボリュームに対するアクセスを制御するために使用される各種の管理テーブルのデータが記憶される。また、CM100の自系キャッシュ領域102bは、CM100が論理ボリュームに対するアクセスを制御する際に、キャッシュとして使用される。
同様に、CM200の自系テーブル領域202aには、CM200が論理ボリュームに対するアクセスを制御するために使用される各種の管理テーブルのデータが記憶される。また、CM200の自系キャッシュ領域202bは、CM200が論理ボリュームに対するアクセスを制御する際に、キャッシュとして使用される。
一方、CM100の他系テーブル領域102cには、CM200の自系テーブル領域202aと同一のデータが記憶される。また、CM100の他系キャッシュ領域102dには、CM200の自系キャッシュ領域202bと同一のデータが記憶される。同様に、CM200の他系テーブル領域202cには、CM100の自系テーブル領域102aと同一のデータが記憶される。また、CM200の他系キャッシュ領域202dには、CM100の自系キャッシュ領域102bと同一のデータが記憶される。
すなわち、CM100は、自系テーブル領域102aおよび自系キャッシュ領域102bのデータを、CM200の他系テーブル領域202cおよび他系キャッシュ領域202dにそれぞれミラーリングする。また、CM200は、自系テーブル領域202aおよび自系キャッシュ領域202bのデータを、CM100の他系テーブル領域102cおよび他系キャッシュ領域102dにそれぞれミラーリングする。
例えば、CM100がある論理ボリュームへのデータの書き込み要求をホスト装置1100から受け付けた場合(ステップS11)、次のような処理が実行される。CM100のCPU101は、書き込みが要求されたデータ(書き込みデータ)を自系キャッシュ領域102bに書き込むとともに、自系テーブル領域102aを更新する(ステップS12)。例えば、自系テーブル領域102aに記憶されたキャッシュ管理テーブルが更新される。
また、CPU101は、書き込みデータと、自系テーブル領域102aの更新内容を示すデータとをCM200のCPU201に送信する。CPU201は、書き込みデータを他系キャッシュ領域202dに書き込むとともに、更新内容を示すデータに基づいて他系テーブル領域202cを更新する(ステップS13)。
CM100のCPU101は、以上の処理が完了すると、ホスト装置1100に対して書き込みの完了通知を送信する(ステップS14)。このような処理により、自系テーブル領域102aおよび自系キャッシュ領域102bのデータは、CM200の他系テーブル領域202cおよび他系キャッシュ領域202dにそれぞれミラーリングされる。
なお、図示しないが、CPU101は、この後の非同期のタイミングで、ステップS12で自系キャッシュ領域102bに書き込んだ書き込みデータを、ドライブ部300における対応する記憶装置に書き込む(ライトバック)。
図5は、停電時のバックアップ処理について説明するための図である。
上記の図4で説明したように、CM100,200では、ライトバック方式のアクセス制御が行われ、キャッシュ領域(自系キャッシュ領域102b,202b)は揮発性記憶装置であるRAM102,202に確保される。このような構成では、停電が発生した場合、キャッシュ領域のデータのうち、ライトバックが行われていないダーティデータが失われてしまう。
このようなデータロストを防止するために、CM100,200にはそれぞれバッテリ107,207が搭載され、停電が発生すると、バッテリ107,207からの電力を用いて、キャッシュ領域のダーティデータが不揮発性記憶装置に退避される。図5に示すように、CM100のSSD104には、停電時にバックアップデータを格納するためのバックアップ領域104aが確保されており、キャッシュ領域のダーティデータはバックアップ領域104aにバックアップされる。また、図示しないが、CM200のSSD204にも同様なバックアップ領域が確保されている。
また、図4に示したように、RAM102には自系キャッシュ領域102bに加えて、自系テーブル領域102a、他系テーブル領域102c、他系キャッシュ領域102dが確保されている。自系テーブル領域102aには、キャッシュ管理テーブルなど、論理ボリュームへのアクセスに必要な管理データが格納されている。そのため、図5に示すように、停電時には、自系テーブル領域102aに格納された管理テーブルのデータも、SSD104のバックアップ領域104aにバックアップされる。同様に、図示しないが、CM200の自系テーブル領域202aに格納されたデータも、SSD204のバックアップ領域へのバックアップの対象となる。
さらに、本実施の形態では、図5に示すように、他系テーブル領域102cに格納された管理テーブルのデータと、他系キャッシュ領域102dのデータのうちダーティデータも、バックアップ領域104aにバックアップされる。同様に、図示しないが、CM200の他系テーブル領域202cに格納された管理テーブルのデータと、他系キャッシュ領域202dのデータのうちダーティデータも、SSD204のバックアップ領域にバックアップされる。
例えば、他系テーブル領域102cに格納された管理テーブルのデータと、他系キャッシュ領域102dのデータのうちダーティデータもバックアップされることで、次のようなメリットが得られる。例えば、何らかの理由でCM200の自系テーブル領域202aおよび自系キャッシュ領域202bのデータが失われてしまった場合に、CM200は、他系テーブル領域102cおよび他系キャッシュ領域102dのデータを読み込むことで、動作を再開できる。
また、停電状態から復電したときにCM100,200がともに正常に起動した場合でも、CM100の他系テーブル領域102cおよび他系キャッシュ領域102dには、他方のCM200ではなくCM100のバックアップ領域104aからデータをリストアできる。このため、復電から、CM200の自系テーブル領域202aおよび自系キャッシュ領域102bとCM100の他系テーブル領域102cおよび他系キャッシュ領域102dとがミラーリングされた状態でCM100,200が起動するまでの時間を短縮できる。その結果、キャッシュデータおよび管理テーブルのデータが冗長化された状態で、CM200によるアクセス制御処理を短時間で再開できるようになる。
なお、SSD104のフラッシュメモリに対するデータの書き込みは、一定サイズのセルを単位として行われる。本実施の形態では、セルのサイズを4キロバイトとする。そして、本実施の形態では、RAM102におけるバックアップ対象のデータも4キロバイト単位で管理することで、RAM102からSSD104のバックアップ領域104aへのデータの書き込みを4キロバイト単位で簡単に実行できるようにする。一例として、本実施の形態では、キャッシュページの大きさを4キロバイトとする。
図6は、電源制御回路の内部構成例を示す図である。なお、図6では例として、CM100の電源制御回路108について示すが、CM200の電源制御回路208も同様の内部構成を有する。
図6(A)に示すように、電源制御回路108は、スイッチ回路111,112を備える。スイッチ回路111は、PSU400からCM100内の各部に対する電力の通電、遮断を切り替える。スイッチ回路112は、バッテリ107から、CM100内の各部に対する電力の通電、遮断を切り替える。
スイッチ回路111,112はいずれも、入力側の電圧と出力側の電圧とを検出してそれらを比較することで、停電状態か否かを検出する。停電でない状態(PSU400から電力が供給されている状態)では、スイッチ回路111が通電状態となり、スイッチ回路112が遮断状態となる。停電状態では、スイッチ回路111が遮断状態となり、スイッチ回路112が通電状態となる。
図6(B)には、スイッチ回路111,112の内部構成例を示している。スイッチ回路111は、FET(Field Effect Transistor)111a,111bとコントローラ111cを備える。スイッチ回路112は、FET112a,112bとコントローラ112cを備える。なお、FET111a,111b,112a,112bは、いずれもNチャネルMOSFET(Metal-Oxide-Semiconductor FET)である。
スイッチ回路111において、FET111a,111bの各ドレインにはPSU400からの12Vの電圧が入力され、各ソースはCM100の内部に対する出力端子に接続されている。また、FET111a,111bの各ゲートにはコントローラ111cからの共通の制御信号が入力され、この制御信号によってFET111a,111bのそれぞれのドレイン-ソース間の導通、遮断が制御される。この構成により、PSU400からの電圧の出力を制御するスイッチング素子が冗長化され、電圧出力の切り替え動作の信頼性が高められている。
また、スイッチ回路112において、FET112a,112bの各ドレインにはバッテリ107からの12Vの電圧が入力され、各ソースはCM100の内部に対する出力端子に接続されている。また、FET112a,112bの各ゲートにはコントローラ112cからの共通の制御信号が入力され、この制御信号によってFET112a,112bのそれぞれのドレイン-ソース間の導通、遮断が制御される。この構成により、バッテリ107からの電圧の出力を制御するスイッチング素子が冗長化され、電圧出力の切り替え動作の信頼性が高められている。
コントローラ111cは、入力電圧Va1と出力電圧Vc1とを検出し、それらの比較結果に基づいてFET111a,111bの各ゲートに対する制御信号を出力する。コントローラ112cは、入力電圧Va2と出力電圧Vc2とを検出し、それらの比較結果に基づいてFET112a,112bの各ゲートに対する制御信号を出力する。
コントローラ111cは、(Va1-Vc1)>TH1の場合、制御信号をハイレベルにしてFET111a,111bを導通させ、それ以外の場合、制御信号をローレベルにしてFET111a,111bを遮断させる。閾値TH1は、FET111a,111b,112a,112bのドレイン-ソース間の電圧降下量より小さい値(例えば、10mV)に設定される。一方、コントローラ112cは、(Va2-Vc2)>TH2の場合、制御信号をローレベルにしてFET112a,112bを遮断させ、それ以外の場合、制御信号をハイレベルにしてFET112a,111bを導通させる。閾値TH2は、上記の電圧降下量より大きい値に設定される。
これにより、CM100の電源が投入されたとき、PSU400から12Vの電圧が供給されていれば、コントローラ111cからの制御信号がハイレベルになり、PSU400からの電力がCM100の内部に供給される。このとき、コントローラ112cからの制御信号がローレベルになり、バッテリ107からの電力はCM100の内部に供給されない。
この状態から、停電してPSU400から電圧が出力されなくなると、コントローラ111cからの制御信号がローレベルになり、PSU400からの電源経路が遮断される。一方、コントローラ112cからの制御信号がハイレベルになり、バッテリ107からの電力がCM100の内部に供給されるようになる。このようなコントローラ111c,112cによる自律的な処理により、停電が発生したとき、CM100の内部に対する電力供給源がPSU400からバッテリ107に切り替えられる。
なお、停電が発生したとき、CPU101の処理によってホストコントローラ105やSASエクスパンダ106の動作が停止される。このため、停電が発生した後、バッテリ107からの電力はバックアップ処理に関係するCPU101、RAM102、PCIeスイッチ103およびSSD104にだけ供給されるようになる。CM200でも同様に、停電が発生した後、バッテリ207からの電力はバックアップ処理に関係するCPU201、RAM202、PCIeスイッチ203およびSSD204にだけ供給されるようになる。
次に、図7を用いて、スイッチ回路112が故障した場合の問題点について説明する。
図7は、バッテリ電圧の推移例を示す図である。図7では、停電発生時を起点としたバッテリ107からの出力電圧の推移について示している。ここで言う出力電圧とは、正確には、電源制御回路108を介したバッテリ107の出力電圧(すなわち、バッテリ107による駆動時におけるスイッチ回路112からの出力電圧Vc2)を指す。
バッテリ107のためのスイッチ回路112が故障する状態としては、FET112a,112bの一方のみ故障している「故障状態A」と、FET112a,112bの両方とも故障している「故障状態B」の2通りの状態が想定される。これらの故障状態A,Bのどちらでも、故障したFETの寄生ダイオードの影響によってFETでの消費電力が大きくなり、その結果、図7に示すようにバッテリ107の持続時間が正常時より減少する。
具体的には、故障状態Aでは、故障していない他方のFETによってバッテリ107からの電力はCM100の内部に出力され続ける。例えば、FET111aが故障したとすると、FET111bはオンのままなので、バッテリ107からの電力が出力され続け、スイッチ回路112の出力電圧は12.0Vのまま維持される。しかし、このとき、故障したFET111aの寄生ダイオードに大きな電流が流れ、電力が消費されてしまう。その結果、図7に示すように、FET112a,112bが故障していない正常状態より、バッテリ107の持続時間が短くなってしまう。
図7において、9.6Vの電圧は、CM100がバックアップ動作を実行可能な下限の電圧(動作下限電圧)を示す。図7の例では、正常状態では、電源制御回路108を介したバッテリ107の出力電圧が動作下限電圧の9.6Vより低下するまでの時間は、300秒となっている。これに対して、故障状態Aでは、電源制御回路108を介したバッテリ107の出力電圧が動作下限電圧の9.6Vより低下するまでの時間は、250秒に短縮されている。
故障状態Bでは、故障したFET111a,111bのいずれもオフになる。しかし、バッテリ107からの電圧がFET111a,111bの両方の寄生ダイオードに印加されて、これら2つの寄生ダイオードに電流が流れてしまうことで、例えば図7に示すように、11.4Vの電圧が出力される。また、故障状態Aより多くの寄生ダイオードに電流が流れることで、故障状態Aよりさらに大きな電力が消費されてしまう。その結果、図7に示すように、バッテリ107の持続時間が故障状態Aよりさらに短くなってしまう。図7の例では、故障状態Bでは、電源制御回路108を介したバッテリ107の出力電圧が動作下限電圧の9.6Vより低下するまでの時間は、さらに200秒に短縮されている。
このように、故障状態A,Bになると、バッテリ107の持続時間が短くなる。このため、バックアップ対象のデータの一部をバックアップ領域104aにバックアップできずに失う可能性が生じる。
ここで、故障検出方法の一例として、電源制御回路108を介したバッテリ107の出力電圧が、上記の動作下限電圧(9.6V)より低くなった場合に、バッテリ107が故障したと判定する方法がある。しかし、この方法では、図7の例のように、動作下限電圧より高い出力電圧がある程度の時間維持される故障状態A,Bを検出することはできない。
また、FETの個数を増やしてFETを通る経路の冗長度を高めることで、故障状態Bのように電力が消費される事態を防止できる。しかし、この方法では、回路の実装面積が増大して電源制御回路108が大型化し、また、電源制御回路108のコストも上がってしまう。また、この方法では、故障状態Aのような寄生ダイオードによる電力消費を防止することはできない。
このような問題に対して、CM100は、バックアップ対象のデータに優先度を付与し、優先度の高いデータから順にバックアップ領域104aにバックアップしていく。また、CM100は、ある優先度のデータのバックアップが完了するたびに、電源制御回路108を介したバッテリ107の出力電圧を検出して、バッテリ107によるその後の電力供給能力を推定する。CM100は、次の優先度のデータのバックアップを完了できるだけの電力供給能力があると判定される場合に、そのデータのバックアップを実行する。このような処理により、スイッチ回路112の故障状態に応じて、バッテリ107からの電力供給能力の範囲内で、優先度の高い順に、同じ優先度のデータ群を単位として最大限のデータをバックアップできるようにする。
なお、以上の図7ではCM100での故障について説明したが、CM200でも同様の故障によって同様の問題が発生し得る。そして、CM200もCM100と同様の処理を実行可能である。
図8は、CMが備える処理機能の構成例を示すブロック図である。なお、図8では例としてCM100について示すが、CM200もCM100と同様の処理機能を備える。
CM100は、アクセス制御部121、ミラーデータ受信処理部122、バックアップ制御部123およびリストア制御部124を備える。なお、アクセス制御部121、ミラーデータ受信処理部122、バックアップ制御部123およびリストア制御部124の処理は、例えば、CPU101が所定のプログラムを実行することで実現される。
アクセス制御部121は、ホスト装置1100からの要求に応じて論理ボリュームに対するアクセスを制御する。そのアクセス制御の際、アクセス制御部121は、自系キャッシュ領域102bをキャッシュとして用いる。通常時、図4で説明したように、アクセス制御部121は、自系キャッシュ領域102bをキャッシュとして用いながら、論理ボリュームに対するデータの書き込みをライトバック方式で制御する。また、アクセス制御部121は、自系キャッシュ領域102bのデータを、CM200のミラーデータ受信処理部(図示せず)を介して他系キャッシュ領域102dにミラーリングする。
また、アクセス制御部121は、論理ボリュームへのアクセス制御の際、自系テーブル領域102aに記憶された管理テーブルを参照する。そして、アクセス制御部121は、自系テーブル領域102aのデータを更新するたびに、そのデータ更新をCM200のミラーデータ受信処理部(図示せず)を介して他系キャッシュ領域に反映させる。
例えば、図8に示すように、自系キャッシュ領域102bには、アクセス制御部121に参照される管理テーブルとして、キャッシュ管理テーブル131とボリューム管理テーブル132が記憶される。キャッシュ管理テーブル131は、自系キャッシュ領域102bに記憶されるデータを管理するための管理情報である。ボリューム管理テーブル132は、論理ボリュームへのアクセスのためのアドレス変換のために利用される管理情報である。
ここで、図9は、キャッシュ管理テーブルの構成例を示す図である。キャッシュ管理テーブル131には、自系キャッシュ領域102bの各ページを示すページ番号に対応付けて、論理アドレス、ダーティフラグ、属性が登録される。
論理アドレスは、ページに格納されたデータについての論理ボリューム上のアドレスを示す。ダーティフラグは、ページに格納されたデータがダーティデータか否かを示す。ダーティフラグは、ダーティデータの場合「1」を示し、ダーティデータでない場合「0」を示す。属性は、データが書き込み要求と読み出し要求のどちらに応じてページに格納されたかを示す。
他方のCM200の他系テーブル領域202cには、図9のキャッシュ管理テーブル131と同じ形式のキャッシュ管理テーブルが記憶される。アクセス制御部121は、キャッシュ管理テーブル131を更新すると、その更新内容を他系テーブル領域202cのキャッシュ管理テーブルにも反映させる。
例えば、アクセス制御部121は、ホスト装置1100からの要求に応じてあるページにデータを書き込むと、キャッシュ管理テーブル131の該当ページ番号に対応する論理アドレスとして、論理ボリューム上の書き込み先アドレスを登録する。これとともに、アクセス制御部121は、該当ページ番号に対応するダーティフラグを「1」に設定し、属性として「書き込み」を設定する。さらに、アクセス制御部121は、他系テーブル領域202cのキャッシュ管理テーブルについても、同じページ番号に対応する論理アドレス、ダーティフラグおよび属性を同様に更新する。
その後、アクセス制御部121は、上記データのライトバックを実行すると、キャッシュ管理テーブル131における該当レコードのダーティフラグを「0」に更新する。これとともに、アクセス制御部121は、他系テーブル領域202cのキャッシュ管理テーブルについても、該当レコードのダーティフラグを「0」に更新する。
以下、図8に戻って説明を続ける。
前述のように、ボリューム管理テーブル132は、論理ボリュームへのアクセスのためのアドレス変換のために利用される管理情報である。ボリューム管理テーブル132には、例えば、次のようなデータが登録される。
例えば、ボリューム管理テーブル132には、ドライブ部300内の1以上の記憶装置によって実現される論理記憶領域のアドレスと、論理ボリュームのアドレスとの対応関係を示す情報が登録される。論理記憶領域がRAID(Redundant Arrays of Inexpensive Disks)グループとして実現される場合、ボリューム管理テーブル132には、RAIDグループに属する記憶装置の識別情報、RAIDレベルなど、RAIDグループに関する情報が登録される。
また、論理ボリュームがシンプロビジョニング技術を用いた仮想ボリュームとして生成される場合には、例えば、論理ボリュームを分割した単位領域のうち、データが書き込まれた単位領域に対してのみ、論理記憶領域(プール)から記憶領域が割り当てられる。この場合、ボリューム管理テーブル132には、論理ボリューム上の単位領域と、論理記憶領域から割り当てられた記憶領域との対応関係を示す情報が登録される。アクセス制御部121は、論理ボリューム上の空きの単位領域に新たなデータを書き込むたびに、その単位領域に対して論理記憶領域から新たな記憶領域を割り当てる。このとき、アクセス制御部121は、単位領域とその割り当て先の記憶領域との対応関係を示す情報をボリューム管理テーブル132に登録するとともに、CM200の他系テーブル領域202cのボリューム管理テーブルにも同様の情報を登録する。
ミラーデータ受信処理部122は、CM200のアクセス制御部(図示せず)から自系キャッシュ領域202bまたは自系テーブル領域202aにおける更新されたデータを受信する。ミラーデータ受信処理部122は、受信したデータによって他系キャッシュ領域102dまたは他系テーブル領域102cの該当箇所を更新する。
バックアップ制御部123は、停電が発生すると、自系テーブル領域102a、自系キャッシュ領域102b、他系テーブル領域102cおよび他系キャッシュ領域102dのデータを、SSD104のバックアップ領域104aにバックアップする。このとき、バックアップ制御部123は、バッテリ107から電源制御回路108を介して出力される電圧を参照しながら、後述するデータごとの優先度にしたがってバックアップ処理を実行する。
また、SSD104には、バックアップ管理テーブル133が記憶される。バックアップ制御部123は、バックアップ管理テーブル133をバックアップ処理の進行に応じて更新する。
リストア制御部124は、外部電力の供給が再開される(復電する)と、バックアップ管理テーブル133を参照しながら、SSD104のバックアップ領域104aにバックアップされたデータをRAM102に書き戻してデータをリストアする。
次に、図10~図12を用いて、バックアップ制御部123によるバックアップ処理について説明する。
図10は、データの優先度について説明するための図である。CM100,200では、バックアップ対象のデータに優先度が設定され、優先度が高い順にデータがSSD104のバックアップ領域104aにバックアップされる。
CM100では、図10に示すように、自系テーブル領域102aに格納された管理テーブルのデータ(テーブルデータ)と、自系キャッシュ領域102bに格納されたデータのうちのダーティデータとに対して、最も優先度が高い「優先度1」が設定される。これらのデータがバックアップされる確実性を高めることで、復電時にCM100が記憶するデータだけを用いて、データを失うことなく迅速にアクセス制御を再開できる。
また、他系テーブル領域102cに格納された管理テーブルのデータ(テーブルデータ)に対して、次に優先度が高い「優先度2」が設定される。さらに、他系キャッシュ領域102dに格納されたデータのうちのダーティデータに対して、最も優先度が低い「優先度3」が設定される。
なお、CM200においても上記と同様に、バックアップ対象のデータに優先度が設定される。すなわち、自系テーブル領域202aに格納された管理テーブルのデータ(テーブルデータ)と、自系キャッシュ領域202bに格納されたデータのうちのダーティデータとに対して、「優先度1」が設定される。また、他系テーブル領域202cに格納された管理テーブルのデータ(テーブルデータ)に対して、「優先度2」が設定される。さらに、他系キャッシュ領域202dに格納されたデータのうちのダーティデータに対して、「優先度3」が設定される。
図11は、バックアップ管理テーブルの構成例を示す図である。前述のように、SSD104にはバックアップ管理テーブル133が記憶される。バックアップ管理テーブル133には、優先度ごとにバックアップフラグが対応付けられている。バックアップフラグは、対応する優先度のデータのバックアップが完了したか否かを示すフラグ情報である。バックアップフラグは、該当するデータのバックアップが未完了の場合は「0」に設定され、該当するデータのバックアップが完了した場合は「1」に設定される。
なお、CM200のSSD204にも、図11と同様のデータ構成を有するバックアップ管理テーブルが記憶される。
図12は、優先度にしたがったバックアップ処理の例を示す図である。なお、図7と同様に、図12のグラフの縦軸は、電源制御回路108を介したバッテリ107の出力電圧を示す。
バックアップ制御部123は、停電が検出されたタイミングT0において、優先度1に対応するデータのバックアップを開始する。これにより、自系テーブル領域102aに格納された管理テーブルのデータと、自系キャッシュ領域102bに格納されたデータのうちのダーティデータとが、SSD104のバックアップ領域104aにバックアップされる。
バックアップ制御部123は、タイミングT1において優先度1に対応するデータのバックアップが完了すると、バックアップ管理テーブル133における優先度1に対応するバックアップフラグを、「0」から「1」に更新する。これとともに、バックアップ制御部123は、電源制御回路108を介したバッテリ107の出力電圧(すなわち、スイッチ回路112からの出力電圧Vc2)をスイッチ回路112のコントローラ112cから取得する。バックアップ制御部123は、取得した出力電圧が11.4V以下であるかを判定する。
ここで、タイミングT1において取得した出力電圧が11.4V以下である場合、スイッチ回路112のFET112a,112bの両方とも故障している故障状態Bであると推定される。この場合、バッテリ107の持続時間の残りが非常に短く、優先度2に対応するデータのバックアップを完了することも困難と推定される。このため、バックアップ制御部123は、バックアップ処理を終了する。
一方、タイミングT1において取得した出力電圧が11.4Vより高い場合、少なくとも故障状態Bにはなっておらず、バッテリ107の持続時間の残りがある程度長いと推定される。このため、バックアップ制御部123は、次の優先度2に対応するデータのバックアップを開始する。これにより、他系テーブル領域102cに格納された管理テーブルのデータが、SSD104のバックアップ領域104aにバックアップされる。
なお、タイミングT1での上記判定では、電圧の判定閾値として11.4V以上12.0V未満の値が用いられればよい。この判定閾値は、FET112a,112bがいずれも正常な場合の出力電圧Vc2といずれも故障している場合の出力電圧Vc2との差分に基づいて決定される、ということができる。
バックアップ制御部123は、タイミングT2において優先度2に対応するデータのバックアップが完了すると、バックアップ管理テーブル133における優先度2に対応するバックアップフラグを、「0」から「1」に更新する。これとともに、バックアップ制御部123は、電源制御回路108を介したバッテリ107の出力電圧をスイッチ回路112のコントローラ112cから取得する。
バックアップ制御部123は、取得した出力電圧が11.8V以下であるかを判定する。この11.8Vとは、出力電圧が正常時の12.0Vより低下し始めているかを判定するための電圧である。出力電圧が正常時の12.0Vより低下し始めている場合、FET112a,112bの一方のみ故障している故障状態Aになっており、そのような故障による余計な電力消費によって出力電圧が低下し始めていると推定される。このため、バッテリ107の持続時間の残りが非常に短く、優先度3に対応するデータのバックアップを完了することも困難と推定される。したがって、バックアップ制御部123は、バックアップ処理を終了する。
一方、タイミングT2において取得した出力電圧が11.8Vより高い場合、正常状態である可能性が高いと推定される。このため、バックアップ制御部123は、次の優先度3に対応するデータのバックアップを開始する。これにより、他系キャッシュ領域102dに格納された管理テーブルのデータが、SSD104のバックアップ領域104aにバックアップされる。
バックアップ制御部123は、タイミングT3において優先度3に対応するデータのバックアップが完了すると、バックアップ管理テーブル133における優先度3に対応するバックアップフラグを、「0」から「1」に更新する。そして、バックアップ制御部123は、バックアップ処理を終了する。
なお、バックアップ管理テーブル133は、復電後のリストア処理時にリストア制御部124によって参照される。バックアップ管理テーブル133のバックアップフラグにより、どのデータがSSD104のバックアップ領域104aにバックアップされ、どのデータを他方のSSD204のバックアップ領域から取得するべきかが判断される。バックアップ管理テーブル133を用いたリストア処理については、後の図14、図15において詳しく説明する。
以上の処理によれば、優先度の高いデータから順にバックアップが行われる。また、1つの優先度に対応するデータのバックアップが完了するたびに、電源制御回路108を介したバッテリ107の出力電圧が検出され、バッテリ107による電力供給能力の余力が推定される。そして、余力が十分あると推定される場合は次の優先度に対応するデータがバックアップされる一方、余力がないと推定される場合はその時点でバックアップ処理が終了される。
このような処理により、バッテリ107からの放電経路上にあるFETの故障によってバッテリ107の電力供給能力が低下した場合でも、その能力の範囲内で、同じ優先度のデータ群を単位として最大限のデータをバックアップできる。このとき、優先度の高いデータから順にバックアップされることで、重要なデータ(特に、復電後にアクセス制御を正確かつ迅速に再開するために必要なデータ)が失われる可能性を低減できる。
また、バッテリ107の電力供給能力の余力が少ないと判定された場合に、その時点でバックアップ処理が終了されることで、その時点でバッテリ107の放電も終了され、バッテリ107の残量低下が停止する。このため、バッテリ107の電力供給能力がなくなるまでバックアップ処理を継続する場合と比較して、復電時点でのバッテリ107の残量が多くなる。
復電後には、バッテリ107の残量が、少なくとも優先度1に対応するデータのバックアップを実行できる下限量に達するまで、キャッシュデータのロストを防止するため、ライトスルー方式でアクセス制御が再開される。そして、バッテリ107の残量がこの下限量に達すると、アクセス制御の方式がライトバック方式に切り替えられる。ライトスルー方式では、データの書き込みが要求された場合、そのデータのキャッシュへの書き込みだけでなく、そのデータのライトバックが完了した後に、ホスト装置1100に対して書き込み完了が通知される。このため、ライトバック方式と比較して、ホスト装置1100からの書き込み要求に対する応答速度が低い。
上記のように、復電時点でのバッテリ107の残量が多くなることで、復電後に、アクセス制御をライトスルー方式からライトバック方式に切り替えるまでの時間を短縮できる。その結果、ホスト装置1100からの書き込み要求に対する応答性能を、復電から短時間で回復させることができ、全体としてこの応答性能を改善できる。
次に、CM100の処理についてフローチャートを用いて説明する。
図13は、停電時におけるCMの処理手順を示すフローチャートの例である。
[ステップS21]バックアップ制御部123は、停電を検出するまで待機状態となり、停電を検出するとステップS22の処理を実行する。なお、バックアップ制御部123は、例えば、電源制御回路108のスイッチ回路111のコントローラ111cからの通知に基づいて、停電の発生を検出する。また、バックアップ制御部123は、すべてのバックアップフラグを「0」に設定したバックアップ管理テーブル133を、SSD104に記録する。
[ステップS22]バックアップ制御部123は、優先度1のデータを退避させる。すなわち、バックアップ制御部123は、自系テーブル領域102aに格納された管理テーブルのデータと、自系キャッシュ領域102bに格納されたデータのうちのダーティデータとを、SSD104のバックアップ領域104aに格納する。なお、自系キャッシュ領域102bに格納されたデータのうちのダーティデータは、自系テーブル領域102aに格納されたキャッシュ管理テーブル131のダーティフラグに基づいて判別される。
[ステップS23]バックアップ制御部123は、バックアップ管理テーブル133における優先度1に対応するバックアップフラグを「1」に更新する。
[ステップS24]バックアップ制御部123は、電源制御回路108を介したバッテリ107の出力電圧(すなわち、スイッチ112からの出力電圧Vc2)をスイッチ回路112のコントローラ112cから取得する。バックアップ制御部123は、取得した出力電圧が11.4V以下である場合、処理を終了する。この場合、CM100の動作が停止する。一方、バックアップ制御部123は、取得した出力電圧が11.4Vより高い場合、ステップS25の処理を実行する。
[ステップS25]バックアップ制御部123は、優先度2のデータを退避させる。すなわち、バックアップ制御部123は、他系テーブル領域102cに格納された管理テーブルのデータを、SSD104のバックアップ領域104aに格納する。
[ステップS26]バックアップ制御部123は、バックアップ管理テーブル133における優先度2に対応するバックアップフラグを「1」に更新する。
[ステップS27]バックアップ制御部123は、電源制御回路108を介したバッテリ107の出力電圧をスイッチ回路112のコントローラ112cから取得する。バックアップ制御部123は、取得した出力電圧が11.8V以下である場合、処理を終了する。この場合、CM100の動作が停止する。一方、バックアップ制御部123は、取得した出力電圧が11.8Vより高い場合、ステップS28の処理を実行する。
[ステップS28]バックアップ制御部123は、優先度3のデータを退避させる。すなわち、バックアップ制御部123は、他系キャッシュ領域102dに格納されたデータのうちのダーティデータを、SSD104のバックアップ領域104aに格納する。なお、他系キャッシュ領域102dに格納されたデータのうちのダーティデータは、他系テーブル領域102cに格納されたCM200のキャッシュ管理テーブルのダーティフラグに基づいて判別される。
[ステップS29]バックアップ制御部123は、バックアップ管理テーブル133における優先度3に対応するバックアップフラグを「1」に更新する。この処理が完了すると、CM100の動作が停止する。
図14、図15は、復電時におけるCMの処理手順を示すフローチャートの例である。
[ステップS31]外部電源からの電力供給が復旧すると、PSU400からの電力供給が再開される(復電する)。CM100が、PSU400からの電力によって起動すると、リストア制御部124は、ステップS32以降の処理を実行する。また、PSU400からの電力供給が再開されることで、電源制御回路108は、PSU400からの電力を用いてバッテリ107の充電を開始する。
[ステップS32]リストア制御部124は、SSD104に記憶されたバックアップ管理テーブル133を参照し、優先度1に対応するバックアップフラグを読み込む。リストア制御部124は、バックアップフラグが「1」の場合、ステップS33の処理を実行し、バックアップフラグが「0」の場合、ステップS34の処理を実行する。
[ステップS33]リストア制御部124は、CM100のSSD104のバックアップ領域104aから、優先度1のデータをリストアする。すなわち、リストア制御部124は、自系テーブル領域102aからバックアップされた管理テーブルのデータを、バックアップ領域104aから自系テーブル領域102aに書き戻す。また、リストア制御部124は、自系キャッシュ領域102bからバックアップされたダーティデータを、バックアップ領域104aから自系キャッシュ領域102bに書き戻す。
[ステップS34]リストア制御部124は、他方のCM200が備えるSSD204のバックアップ領域から、優先度1のデータをリストアする。具体的には、リストア制御部124は、他方のCM200のリストア制御部に対して、他系テーブル領域202cのデータと他系キャッシュ領域202dのダーティデータの転送を要求する。CM200のリストア制御部は、SSD204のバックアップ領域から、他系テーブル領域202cからバックアップされた管理テーブルのデータと、他系キャッシュ領域202dからバックアップされたダーティデータとを読み出し、CM100に転送する。CM100のリストア制御部124は、転送された管理テーブルのデータを自系テーブル領域102aに格納し、転送されたダーティデータを自系キャッシュ領域102bに格納する。
[ステップS35]リストア制御部124は、SSD104に記憶されたバックアップ管理テーブル133を参照し、優先度2に対応するバックアップフラグを読み込む。リストア制御部124は、バックアップフラグが「1」の場合、ステップS36の処理を実行し、バックアップフラグが「0」の場合、ステップS37の処理を実行する。
[ステップS36]リストア制御部124は、CM100のSSD104のバックアップ領域104aから、優先度2のデータをリストアする。すなわち、リストア制御部124は、他系テーブル領域102cからバックアップされた管理テーブルのデータを、バックアップ領域104aから他系テーブル領域102cに書き戻す。
[ステップS37]リストア制御部124は、他方のCM200が備えるSSD204のバックアップ領域から、優先度2のデータをリストアする。具体的には、リストア制御部124は、他方のCM200のリストア制御部に対して、自系テーブル領域202aのデータの転送を要求する。CM200のリストア制御部は、SSD204のバックアップ領域から、自系テーブル領域202aからバックアップされた管理テーブルのデータを読み出し、CM100に転送する。CM100のリストア制御部124は、転送された管理テーブルのデータを他系テーブル領域102cに格納する。
[ステップS38]リストア制御部124は、SSD104に記憶されたバックアップ管理テーブル133を参照し、優先度3に対応するバックアップフラグを読み込む。リストア制御部124は、バックアップフラグが「1」の場合、ステップS39の処理を実行し、バックアップフラグが「0」の場合、ステップS40の処理を実行する。
[ステップS39]リストア制御部124は、CM100のSSD104のバックアップ領域104aから、優先度3のデータをリストアする。すなわち、リストア制御部124は、リストア制御部124は、他系キャッシュ領域102dからバックアップされたダーティデータを、バックアップ領域104aから他系キャッシュ領域102dに書き戻す。
[ステップS40]リストア制御部124は、他方のCM200が備えるSSD204のバックアップ領域から、優先度3のデータをリストアする。具体的には、リストア制御部124は、他方のCM200のリストア制御部に対して、自系キャッシュ領域202bのデータの転送を要求する。CM200のリストア制御部は、SSD204のバックアップ領域から、自系キャッシュ領域202bからバックアップされたダーティデータを読み出し、CM100に転送する。CM100のリストア制御部124は、転送されたダーティデータを他系キャッシュ領域102dに格納する。
以上の処理により、リストア処理が完了する。上記のリストア処理では、リストア制御部124は、バックアップ管理テーブル133の優先度ごとのバックアップフラグに基づいて、リストア対象のデータをどこから読み込むべきかを判断できる。そのため、データを確実かつ迅速にリストアすることができる。
以下、図15を用いて説明を続ける。
[ステップS41]リストア制御部124は、他方のCM200でのリストア処理が終了したかをCM200のリストア制御部に問い合わせる。リストア制御部124は、CM200でのリストア処理が終了していない場合、待ち状態になり、一定時間ごとに再度問い合わせを行う。そして、リストア制御部124は、CM200でのリストア処理が終了した場合、ステップS42の処理を実行する。
[ステップS42]リストア制御部124は、バッテリ107の残量が所定の閾値以上かを判定する。この閾値としては、例えば、優先度1に対応するデータのバックアップを実行できるバッテリ107の残量の下限値が設定される。バッテリ107の残量がこの下限値以上であれば、ライトバック方式によるアクセス制御を再開したとしても、停電が発生した場合に少なくとも優先度1に対応するデータをバックアップでき、ライトバックされていないダーティデータを保証できる。リストア制御部124は、バッテリ107の残量が閾値未満の場合、ステップS43の処理を実行し、残量が閾値以上の場合、ステップS45の処理を実行する。
[ステップS43]リストア制御部124は、バッテリ107の残量が閾値未満であることをアクセス制御部121に通知する。アクセス制御部121は、この通知に応じて、ホスト装置1100からの要求に応じた論理ボリュームに対するアクセス制御を開始する。このとき、アクセス制御部121は、書き込み制御をライトスルー方式で実行する。すなわち、アクセス制御部121は、ホスト装置1100からデータの書き込みが要求された場合、そのデータを自系キャッシュ領域102bに書き込むとともに、そのデータをドライブ部300にライトバックし、ホスト装置1100に対して書き込み完了を通知する。
[ステップS44]バッテリ107の残量が上記の閾値以上かを判定する。リストア制御部124は、バッテリ107の残量が閾値以上になるまで待機状態となり、残量が閾値以上になると、ステップS45の処理を実行する。
[ステップS45]リストア制御部124は、バッテリ107の残量が閾値以上になったことをアクセス制御部121に通知する。ステップS42の次にステップS45が実行された場合、アクセス制御部121は、この通知に応じて、ホスト装置1100からの要求に応じた論理ボリュームに対するアクセス制御を開始する。このとき、アクセス制御部121は、書き込み制御をライトバック方式で実行する。一方、ステップS44の次にステップS45が実行された場合、すなわち、すでにアクセス制御が開始されている場合には、アクセス制御部121は、書き込み制御方式をライトスルー方式からライトバック方式に切り替える。
ここで、図13に示した停電時の処理では、ある優先度のデータのバックアップが完了したとき、バッテリ107の電力供給能力の余力が小さいと推定される場合には、その時点でバックアップ処理が終了される。これにより、バッテリ107の残量がバックアップ処理を実行できる下限量に低下するまでバックアップ処理を継続する場合と比較して、バッテリ107の放電量を抑制できる。その結果、図14、図15の処理では、復電から、バッテリ107の残量が閾値以上になるまでの時間が短縮される。これにより、復電から、アクセス制御部121がライトバック方式でアクセス制御を実行できるようになるまでの時間を短縮でき、ホスト装置1100からの書き込み要求に対する応答性能を全体として改善できる。
なお、上記の各実施の形態に示した装置(例えば、情報処理装置10、CM100,200)の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置(HDD)、磁気テープなどがある。光ディスクには、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスク(Blu-ray Disc:BD、登録商標)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CDなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。