JP3798767B2 - ディスク制御システム及びディスク制御プログラム - Google Patents
ディスク制御システム及びディスク制御プログラム Download PDFInfo
- Publication number
- JP3798767B2 JP3798767B2 JP2003182836A JP2003182836A JP3798767B2 JP 3798767 B2 JP3798767 B2 JP 3798767B2 JP 2003182836 A JP2003182836 A JP 2003182836A JP 2003182836 A JP2003182836 A JP 2003182836A JP 3798767 B2 JP3798767 B2 JP 3798767B2
- Authority
- JP
- Japan
- Prior art keywords
- area
- amt
- data
- address
- stripe
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【発明の属する技術分野】
本発明は、主メモリとディスク装置とを利用して、ディスク上のストライプに連続的にライトリクエストのデータを書き込むための制御を行うディスク制御システムに係り、特にディスクに記録されたアドレス変換テーブル(AMT)の整合性を確認するのに好適なディスク制御システム及びディスク制御プログラムに関する。
【0002】
【従来の技術】
従来から、計算機システムにおけるディスク入出力(ディスクI/O)の効率向上のために、ホスト(ホスト計算機)からのディスクへのランダムライト要求を1つの連続した領域としての物理ストライプへの要求に変換して、当該ストライプにまとめて書き込むディスク制御方法が知られている。このディスク制御方法によれば、ディスクに書き込むべきデータは一旦書き換え可能な不揮発性メモリに書き込まれ、1ストライプ分の書き込みデータが揃った時点で、ディスク上のストライプに書かれる。
【0003】
このように、一旦不揮発性メモリにデータを書き込むことにより、ディスク上にデータを書き込む前にシステムが異常停止したとしても、書き込みデータが失われないで済む。このため、システムリブート後に不揮発性メモリ上の書きかけのデータを正しくディスク上に書き込むことにより、書き込みを完了させることができる。つまり、不揮発性メモリへのデータ書き込みが終了しているならば、そのデータが失われることはない。このため、従来は、書き込みデータを不揮発性メモリに書き込んだ時点で、対応するライトリクエストに対して「完了」をホストに通知している。
【0004】
しかしながら、不揮発性メモリはシステムに装着するI/Oカード(ハードウェア)で提供する必要があり、その分コストがかかるという問題がある。また、ホストとの相性の問題、互換性の問題、保守の手間がかかる等の問題がある。
【0005】
そこで、不揮発性メモリを用いることなく、ディスク上のストライプに連続的にライトリクエストのデータを書き込むための制御を行うディスク制御システム及びディスク制御方法(以下、先行技術と称する)が、本発明者によって提案されている(例えば、特許文献1参照)。この先行技術の特徴は、上述の制御を主メモリとディスク装置とを用いて行うことにある。
【0006】
この先行技術では、オペレーティングシステム(OS)のファイルシステム(つまり上位ファイルシステム)から認識可能な論理アドレスをディスク上の物理アドレスに変換するのに用いられるアドレス変換テーブル(AMT:アドレスマッピングテーブル)が、不揮発性メモリに代えてディスクに保存される。また、アドレス変換の高速化のために、アドレス変換テーブルの一部がアドレス変換テーブルキャッシュ(AMTキャッシュ)として主メモリに置かれる。システムの稼動中は、このアドレス変換テーブルキャッシュがアクセスされる。アドレス変換テーブルキャッシュの内容が更新された場合、あるいはシステムがシャットダウンされる場合には、アドレス変換テーブルキャッシュの内容はディスク上のアドレス変換テーブルに書き戻される。
【0007】
また、上記先行技術では、ディスク上のストライプに書き込まれるデータブロックの論理アドレスが、ディスク上に確保された論理アドレスログ領域にデータブロック毎に記録される。これにより、一連のデータ書き込み処理が完了しない状態でシステムに障害(システムダウン)が発生しても、論理アドレスログ領域に記録された情報を用いることで、システムリブート後のデータの回復処理が可能となる。
【0008】
【特許文献1】
特開2002−207572号公報(段落0035乃至段落0059、図3及び図4)
【0009】
【発明が解決しようとする課題】
上記したように、特許文献1に記載された先行技術によれば、一連のデータ書き込み処理が完了しない状態でシステムに障害が発生した場合、不揮発性メモリを用いていないにも拘わらず、ディスク上に確保された論理アドレスログ領域に記録されている論理アドレスの情報をもとに、データの回復処理を行うことができる。
【0010】
しかしながら上記先行技術は、ディスク上のアドレス変換テーブルの整合性(特にエントリ情報変更後の整合性)を確認可能とする仕組み、更にはシステムに障害が発生した場合に当該アドレス変換テーブルを復元(再構築)可能とする仕組みを有していない。
【0011】
本発明は上記事情を考慮してなされたものでその目的は、ディスクに記録されたアドレス変換テーブルの特にエントリ情報変更後の整合性が容易に確認できる、ディスク制御システム及びディスク制御プログラムを提供することにある。
【0012】
【課題を解決するための手段】
本発明の1つの観点によれば、上位ファイルシステムからのライトリクエストを単位に、または複数のライトリクエストをまとめて、複数のディスク装置により構成される論理的に単一のディスク上に確保されたデータ領域から選択された書き込み対象データストライプの空き領域に対応するデータを書き込むと共に、当該空き領域に書かれたデータブロック毎の論理アドレスを含む論理アドレスログ情報を前記ディスク上に確保された論理アドレスログ領域に当該データストライプの識別情報と対応付けて書き込むディスク制御システムが提供される。このシステムは、主メモリの一部に設けられたAMT(アドレス変換テーブル)キャッシュであって、上記ディスク上に確保されたAMT領域に記録されている、上記データ領域に書かれたデータブロック毎に論理アドレスと物理アドレスとの対応関係を表すアドレス変換情報を保持するAMTの一部のコピーが保持されるAMTキャッシュと、上記データストライプの全領域へのデータの書き込みが終了した際に、上記論理アドレスログ領域に書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプに割り当てられたタグ領域に書き込むタグ書き込み手段と、上記データストライプのタグ領域にタグ情報が書き込まれた際に、当該タグ情報をもとに上記AMTキャッシュを更新する第1の更新手段と、上記AMTキャッシュの更新とは非同期に、当該キャッシュの更新内容を上記AMT領域内のAMTに反映する第2の更新手段と、システムブート時に、上記AMT領域内のAMTのチェックサムを上記主メモリ上に設けられたチェックサム領域に書き込むチェックサム書き込み手段と、上記AMTキャッシュが更新される際に、上記チェックサム領域のチェックサム値を更新する第3の更新手段と、上記AMT領域内のAMTのチェックサムを算出して、上記チェックサム領域のチェックサム値と比較することで、AMTキャッシュの更新内容がAMT領域内のAMTに正しく反映されているかを判定する手段とを備えている。
【0013】
このように、不揮発性メモリを用いることなく高速なデータ書き込みを実現する本発明のディスク制御システムによれば、システムブート時には、その時点におけるAMT領域内のAMTのチェックサムが主メモリ上のチェックサム領域に書き込まれる。このチェックサム領域内のチェックサム値は、ディスク上のデータストライプへのデータ書き込みに伴うAMTキャッシュの更新時に更新される。これにより、AMT領域内のAMTのチェックサムを算出してチェックサム領域のチェックサム値と比較するだけで、AMTキャッシュの更新内容がAMT領域に正しく反映されているかを簡単に確認できる。
【0014】
ここで、上記第3の更新手段により更新されるチェックサム領域のチェックサム値が、「現在のチェックサム値−アドレス変換テーブルキャッシュの更新対象エントリの更新前の値+当該更新対象エントリに新たに書き込まれる値」の演算により求められる構成とするならば、AMTキャッシュの更新を反映したチェックサムを簡単に求めることが可能となる。
【0015】
また、上記第3の更新手段により更新されるチェックサム領域のチェックサム値が、AMT領域内のAMTのエントリ毎に「AMTエントリの値*(当該エントリが属するブロック内のオフセット+n)(nは0以外の所定値)」を算出して、その値の総和を算出することで求められる構成としてもよい。このような構成においては、単純なAMTエントリの入れ替えのような場合でも、ブロック内オフセット値が異なるエントリ間の入れ替えであれば、異なるチェックサム値となる。よって、主メモリ上のAMTキャッシュとディスクのAMT領域に保存されているAMTとの間で整合性に欠けた(一貫性のない)不正な状態を検出するチャンスを増やすことができる。
【0016】
また、ディスク上の各データストライプのタグ領域にそれぞれ書き込まれているタグ情報をもとにAMT領域内のAMTを再構築する再構築手段を追加し、システムのシャットダウン時には、AMTキャッシュの更新内容が第2の更新手段によりAMT領域内のAMTに全て反映され、その際にAMTキャッシュの更新内容がAMTに正しく反映されているかが判定手段により判定され、正しく反映されているならば、AMTが有効であることを示す第1のステータス情報とAMTのチェックサムの値とがディスク上に確保されたパーティションステータスブロックに記録され、正しく反映されていないならば、当該AMTが無効であることを示す第2のステータス情報が上記パーティションステータスブロックに記録される構成とするとよい。更に、システムブート時に、パーティションステータスブロックを参照し、上記第1のステータス情報が設定されているならば、当該ステータスブロックからチェックサム値を読み出して上記チェックサム領域に書き込み、上記第2のステータス情報が設定されているならば、上記アドレス変換テーブル再構築手段によりAMT領域内のAMTを再構築させた後、その再構築後のAMTのチェックサムを算出して上記チェックサム領域に書き込む構成とするとよい。
【0017】
このような構成においては、システムシャットダウン後のシステムブートにおいて、主メモリ上のAMTキャッシュとディスク上のAMT領域のAMTとの整合性を確保できる。
【0018】
また、上記データストライプのタグ領域にタグ情報が書き込まれる際に、その際のタイムスタンプも当該タグ領域に書き込まれる構成とするならば、AMT再構築手段は、ディスク上の各データストライプのタグ領域に書き込まれているタグ情報を対応するタイムスタンプに従って時系列順に選択し、当該タグ情報をもとにデータブロック単位でアドレス変換情報を生成して上記AMT領域に登録することができる。
【0019】
また、ライトリクエストに従うデータ書き込みの対象となったデータストライプの識別情報(ストライプID)を、ディスク上に確保されたストライプIDログ領域に時系列順に記録する手段と、予め定められたタイミングが到来する毎に、上記第1の更新手段による新たなデータストライプに関するAMTキャッシュの更新を停止させる手段と、上記第1の更新手段によるAMTキャッシュの更新が停止された場合、上記AMT領域の内容をディスク上に確保されたAMTバックアップ領域にコピーするバックアップ手段と、上記第1の更新手段によるAMTキャッシュの更新が停止された場合、上記AMTに関するチェックポイント情報であって、AMTキャッシュの更新が停止される前に最後に当該キャッシュの更新が完了したデータストライプの識別情報と、当該キャッシュの更新に際して上記第3の更新手段により更新されたチェックサム領域のチェックサム値と、当該データストライプのタグ領域に書き込まれているタイムスタンプとを含むチェックポイント情報を採取して、ディスク上に確保されたチェックポイントステータスブロックに書き込むチェックポイント採取手段と、このチェックポイント採取手段によるチェックポイント情報採取が完了した場合に、上記第1の更新手段によるAMTキャッシュの更新を再開させる手段とを追加し、上記第1の更新手段によるAMTキャッシュの更新が停止された場合、上記バックアップ手段によるコピー動作に先行して、当該キャッシュの更新内容が上記AMT領域内のAMTに反映される構成とするとよい。
【0020】
このような構成においては、所定のタイミングが到来する毎にAMT更新処理が止められて、AMT更新に関するチェックポイント情報が確実に採取されると共に、その際のAMT領域内のAMTの全データがAMTバックアップ領域にバックアップされる。これにより、たとえシステムに障害が発生して当該システムが異常終了しても、次のシステムリブート時には、最新のチェックポイント情報とバックアップ領域にバックアップされた内容(AMT領域内のAMTの全データ)とを用いて、障害発生時のAMTを復元することが可能となる。
【0021】
【発明の実施の形態】
まず、本発明の実施の形態で適用される各種の用語について説明する。
(データストライプ)
ディスク制御システムが「まとめ書き」(「一括書き込み」とも称される)するデータの単位を意味する。ディスクのパーティション上で、一続きの領域となっており、RAIDコントローラが管理するストライプ(ストライプユニット)のサイズの整数倍のサイズである。例えば「RAID5」と呼ばれるRAIDレベルを適用する場合、このサイズをパリティグループにすることにより、いわゆる「RAID5のライトペナルティ」を改善することができ、大幅な性能向上を実現できる。ストライプは複数のデータブロックから構成される。
【0022】
(ストライプ番号)
パーティション上に並んでいる物理ストライプの通し番号を意味する。
(論理ブロック番号=論理アドレス番号)
「論理ブロック番号」とは、OS(オペレーティングシステム)のファイルシステム(上位ファイルシステム)から認識される、ディスクパーティション上のデータブロック番号である。ディスク制御システムにおいて、OSファイルシステムがアクセスを要求するときのブロック番号は、論理ブロック番号であり、仮想的なブロック番号である。論理ブロック番号は、ディスク制御システムが管理する「アドレス変換テーブル」によって物理ブロック番号と対応付けられる。この物理ブロック番号は、ディスクパーティション上の対応するブロックの物理位置を示すブロック番号であり、当該パーティションを構成するディスク装置上の物理位置を示す(RAIDコントローラから物理ブロック番号として認識される)ブロック番号とは異なる。つまり、この物理ブロック番号は、ディスクパーティション上でユニークであり、RAIDコントローラからは論理ブロック番号として認識される。(物理ブロック番号)*(ブロックサイズ[バイト])から、パーティション上での先頭位置からのバイトオフセット値(アドレス)が求まる。
【0023】
(アドレス変換テーブル:AMT(Address Mapping Table))
上位ファイルシステムがアクセスを要求するときに用いられる上記論理ブロック番号は、「アドレス変換テーブル」によって上記物理ブロック番号と対応付けられる。本実施形態では、アドレス変換テーブルは、対象パーティション上に存在し、データ部とは別の領域が割り当てられる。アドレス変換テーブルの各エントリは、それぞれ固有の論理ブロック番号に対応付けられている。つまりアドレス変換テーブルのエントリは論理ブロック番号でインデックスされる。アドレス変換テーブルの各エントリには、当該エントリに対応する論理ブロック番号に対応付けられた物理ブロック番号が登録される。新たにデータブロックを書き込むときには、対応する論理ブロック番号で特定されるアドレス変換テーブルのエントリに、そのブロックを書き込むディスクパーティション上の物理ブロックの番号が登録される。また、データブロックを参照する際には、対応する論理ブロック番号(論理アドレス)をインデックスとするエントリの値を求め、その値をディスク上の物理ブロック番号(物理アドレス)として実際のアドレスを求め参照する。
【0024】
以下、本発明の実施の形態につき図面を参照して説明する。図1は本発明の一実施形態に係るディスク制御システムを適用した計算機システムのブロック構成を示す。この計算機システムは、例えばサーバ(PCサーバ)として利用されるものであり、複数のCPU11-1(#1),11-2(#2),…11-N(#N)を備えている。なお、計算機システムに搭載されるCPUが複数である必要はない。CPU11-1(#1),11-2(#2),…11-N(#N)は、プロセッサバス1を介してブリッジ12に接続されている。ブリッジ12はプロセッサバス1とPCI(Peripheral Component Interconnect)バス2とを双方向で接続するためのブリッジLSIである。ブリッジ12には、主メモリ13を制御するためのメモリコントローラ(図示せず)も内蔵されている。
【0025】
主メモリ13には、オペレーティングシステム(OS)、実行対象のアプリケーションプログラム、及び各種ドライバを含むプログラム群がロードされている。この主メモリ13にロードされている各種ドライバの1つは、後述するRAID高速化ドライバ100(図2参照)である。主メモリ13のドライバ作業領域17には、ライトバッファ(まとめ書きバッファ)171、アドレス変換テーブルキャッシュ(以下、AMTキャッシュと称する)172、及びストライプ管理テーブル173の領域が確保されている。また、ドライバ作業領域17には、AMTのチェックサムの値を保持するチェックサム領域174も確保される。
【0026】
ライトバッファ171は、書き込みデータブロックを蓄積するためのデータバッファである。このライトバッファ171を用いることにより、当該バッファ171に例えば1物理ストライプ分の書き込みデータブロックが蓄積された時点でディスクアレイ18への「まとめ書き」(一括書き込み)を開始することが可能である。但し本実施形態では、説明の簡略化のために、「まとめ書き」でなくて、「逐次書き込み」が適用されるものとする。「まとめ書き」を適用する場合、物理ストライプは「まとめ書き」の単位であり、ディスクアレイ18の全記憶領域に形成されたパーティション(ディスクパーティション)上で一続きの連続した領域から構成される。各物理ストライプは、RAIDコントローラ16が管理するストライプユニットの整数倍のサイズである。
【0027】
AMTキャッシュ172は、論理アドレス空間を構成する全論理ブロックの一部をなす複数の論理ブロックについて、それぞれの論理ブロック番号と、当該論理ブロック番号で指定されるデータブロックが存在するディスクパーティション上の物理位置を示す物理ブロック番号との対応関係を示すアドレス変換情報を記憶する。論理ブロック番号は、上位ファイルシステムとしてのOSファイルシステム50(図2参照)がアクセスを要求するときのブロック番号であり、仮想的なアドレス(仮想ブロック番号)である。この論理ブロック番号はAMTキャッシュ172によって物理ブロック番号(ディスクパーティション上の物理的なブロック番号)と対応付けられる。
【0028】
AMTキャッシュ172は、論理アドレス空間内の任意の一定サイズの領域に含まれる論理ブロック数に一致する数のエントリであって、当該領域に含まれる各論理ブロックの論理ブロック番号それぞれに対応するエントリを有している。OSファイルシステム50から要求された論理ブロック番号のデータブロックを書き込むときには、当該論理ブロック番号に対応するエントリが存在するならば、当該エントリには、当該論理ブロック番号と当該データブロックが実際に書き込まれる物理ブロックの物理ブロック番号(物理アドレス)との対応関係を示すアドレス変換情報が登録される。一方、データブロックの読み出し時には、読み出し要求された論理ブロック番号に対応するエントリが存在するならば、当該エントリに登録されているアドレス変換情報中の物理ブロック番号(物理ブロック番号×ブロックサイズ)で指定されるディスクパーティション上の物理位置からデータブロックが読み出される。
【0029】
ストライプ管理テーブル173は、各論理ストライプに関する情報を管理するためのものであり、それら各論理ストライプの情報はデータ再配置のための処理などに利用される。
【0030】
PCIバス2には、RAIDコントローラ16が接続されている。RAIDコントローラ16は、ディスクアレイ18へのアクセスを制御する。ディスクアレイ18は、複数のディスク装置から構成され、各種ユーザデータ等の記録に用いられる。ディスクアレイ18は、RAIDコントローラ16の制御により、例えばRAID5構成のディスクアレイとして機能する。この場合、ディスクアレイ18は、データ記憶に必要なディスク装置の台数がNであるものとすると、N+1台のディスク装置(ここでは、DISK0〜DISK4の5台)から構成される。このN+1台のディスク装置(DISK0〜DISK4)はグループ化され、論理的に単一のディスク(ディスクドライブ)として使用される。
【0031】
グループ化されたディスク装置には、データ(DATA)とそのパリティデータ(PARITY)とが記録される物理ストライプ(パリティグループ)の群が割り当てられる。ここで、物理ストライプ中のN+1台のディスク装置(DISK0〜DISK4)に属する領域の当該ディスク装置内の物理位置は同一である。RAID5では、パリティデータが記録される物理ストライプ内の位置(パリティ位置)は、物理ストライプ毎にN+1台のディスク装置間で順に移動される。図1の場合、パリティ位置は、物理ストライプS0ではDISK4に、次の物理ストライプS1ではDISK3に、それぞれ割り当てられる。このようにRAID5では、パリティ位置を物理ストライプ単位でN+1台のディスク装置に分散させることによって、同一ディスクへのアクセス集中を防止するように構成されている。
【0032】
主メモリ13に確保されたドライバ作業領域17は、主としてRAID高速化ドライバ100(図2参照)の実現のために使用される。RAID高速化ドライバ100は、ディスクアレイ18に対する書き込み性能を向上させるために用いられる。本実施形態においては、OSファイルシステム50には改良を加えず、OSに組み込んで用いられるドライバプログラム(ディスク制御プログラム)とドライバ作業領域17とによってRAID高速化ドライバ100が実現されている。
【0033】
ここで、図2を参照して、RAID高速化ドライバ100によるディスクアレイ18の書き込み制御の原理について説明する。RAID高速化ドライバ100は、OSファイルシステム50のドライバと物理ディスク(ディスクアレイ18)のドライバとの間に位置するフィルタドライバである。RAID高速化ドライバ100は、ファイルシステム50からのライトリクエストに応じて、次の処理を実行する。
【0034】
(1)まずRAID高速化ドライバ100は、書き込み先を、ライトリクエストにより指定される論理アドレス(論理ブロック番号)に無関係に、書き込み対象データストライプにおける次の空き領域の物理アドレス(RAID上の論理パーティション内アドレス)として決定する。つまりRAID高速化ドライバ100は、書き込み先を、書き込み対象データストライプにおける次の空き領域の物理ブロック番号(物理アドレス)とすることにより、ライトリクエストで指定された論理ブロック番号を当該物理ブロック番号にアドレス変換する。RAID高速化ドライバ100は、RAIDコントローラ16を利用して、この物理ブロック番号で特定される領域へのデータ書き込みを行う。
【0035】
(2)次にRAID高速化ドライバ100は、上記(1)で決定(変換)された書き込み先の物理ブロック番号をライトリクエストで指定された論理ブロック番号に対応付けてAMTキャッシュ172に登録する。
【0036】
このようにRAID高速化ドライバ100は、OSファイルシステム50からのライトリクエストで指定される論理アドレスに無関係に、当該OSファイルシステム50から要求された書き込みデータを、ディスクアレイ18の論理パーティション(ディスクパーティション)上に形成されるデータストライプの連続する領域に書き込む。つまりRAID高速化ドライバ100は、ターゲットとなる論理アドレスが連続していない一連のライトリクエストに対しても、連続する領域へのデータ書き込みを実行し、その論理アドレスに対応する物理アドレスをAMTキャッシュ172に登録する。ここで、データストライプを構成するディスクパーティション上のアドレスが連続する領域は、ディスクに効率良く書き込めるストライプ境界及びサイズである。このストライプ境界及びサイズはディスクを直接操作するドライバとRAIDコントローラ16とに依存して決まる。特に、書き込み対象のディスクアレイ18がRAID5で構成されている場合、上記連続領域は、「パリティグループ」あるいはその整数倍である。
【0037】
なお、OSファイルシステム50から書き込み要求された順番で対応する書き込みデータをライトバッファ171に順次蓄積することも可能である。ここでは、複数の書き込みデータブロックから構成される大きなデータブロックが構成される。これにより、この大きなデータブロックをディスクアレイ18の空き領域に「まとめ書き」することが可能となる。「まとめ書き」の単位は物理ストライプである。つまり、「まとめ書き」の度に1つの空き物理ストライプが割り当てられ、そこに1物理ストライプ分のデータブロックがシーケンシャルに書き込まれる。これにより、ランダムなアクセスをシーケンシャルなアクセスに変換することができ、書き込み性能を大幅に向上させることができる。
【0038】
図2は、上記した「まとめ書き」による書き込み動作を示している。この図2は、OSファイルシステム50から送られてくる書き込みデータのブロックデータサイズが2KB、1ストライプユニットのデータサイズが64KB、1物理ストライプ(パリティグループ)分のデータサイズが256KB(=64KB×4)の場合の例である。2KBの書き込みデータブロックは、RAID高速化ドライバ100によって取得される。この取得された書き込みデータブロックは、上記ライトバッファ171に蓄積される。そして基本的には、ライトバッファ171に256KB分のデータブロック(2KB×128個のデータブロック)が蓄積された時点で、RAID高速化ドライバ100の制御の下、ディスクアレイ18の1物理ストライプに対する書き込みが1度にまとめて行われる。この場合、RAIDコントローラ16は、256KB分の書き込みデータブロックのみからパリティを生成できるので、パリティ計算のために旧データを読み出す等の処理が不要となり、良く知られたRAID5の書き込みペナルティを減らすことができる。
【0039】
次に、RAID高速化ドライバ100によるディスクアレイ18への書き込み動作の詳細について説明する。このデータ書き込み処理に関しては、前記特許文献1にも記載されている(段落0035乃至段落0057参照)。しかし、このデータ書き込み処理は本願発明に関係するため、理解を容易にするために、図3を参照して改めて説明する。
【0040】
図3は、OSファイルシステム50から順次送られてきた複数のライトリクエストReq1,Req2,Req3,Req4,…をRAID高速化ドライバ100が処理する様子を示す。図3では、1つのディスク180に対してRAID高速化ドライバ100が書き込み/参照処理をしているように示されている。しかし、ディスク180は論理的なものであり、実際には図1及び図2に示すように、RAID構成をとる複数のディスク装置(DISK0〜DISK4)により実現される。ここでは、ディスク180全体が1つのパーティション(ディスクパーティション)を構成している。
【0041】
図3において、ディスク180のパーティション内は、アドレス変換テーブル領域(以下、AMT領域と称する)18aと、管理データ領域18bと、データ領域18cとに分けて管理されている。管理データ領域18bは、ストライプIDログ領域18b1と論理アドレスログ領域18b2とAMTチェックポイントステータスブロック18b3を含む。
【0042】
ここで、現在の書き込み対象の物理データストライプがデータ領域18cの「ストライプ#34」であると想定する。RAID高速化ドライバ100は、書き込み対象データストライプ#34中の全ての領域に書き込みデータが割り当てられた時点で、新しい空きストライプを次の新たな書き込み対象ストライプとして割り当てる。以降、ライトリクエストデータをディスク180に書き込む処理は、新たに割り当てられたストライプの領域に対して行われる。
【0043】
RAID高速化ドライバ100は、OSファイルシステム50からのライトリクエストReq1,Req2,Req3,Req4,…を受けて、当該ライトリクエストで指定されたデータ(書き込みデータ)をライトバッファ171に逐次記憶する。RAID高速化ドライバ100は、このライトバッファ171に記憶したデータを、ディスク180のデータ領域18cのストライプ#34に書き込む。この際、RAID高速化ドライバ100は、データの書き込み先の物理アドレス(物理ブロック番号)を、対応する論理アドレス(論理ブロック番号)に対応付けてAMTキャッシュ172に登録する。
【0044】
一方、OSファイルシステム50からのリードリクエスト(リード要求)に対しては、RAID高速化ドライバ100はAMTキャッシュ172を参照して、当該リードリクエストにより指定された論理アドレスに対応する物理アドレスを求める。そしてRAID高速化ドライバ100は、ディスク180からその物理アドレスのデータをリードしてOSファイルシステム50に返す。
【0045】
データ領域18cの各データストライプの1ブロック、例えば最後の1ブロックはTAGブロック(TAG領域)に割り当てられている。このデータストライプ内のTAGブロックには、TAG情報が、当該データストライプにデータが書き込まれ(て当該ストライプに空き領域がなくなっ)た際に記録される。TAG情報は、(1)タイムスタンプTSと、(2)当該データストライプ中の有効データブロック(物理ブロック)に対応する論理アドレス(論理ブロック番号)とを含む。ここでは、TAG情報中の論理アドレス(論理ブロック番号)の並び順は、当該論理アドレス(論理ブロック番号)に対応するデータストライプ中のデータブロックの並び順に一致する。この場合、TAG情報中に、論理アドレス(論理ブロック番号)に対応するデータストライプ中のデータブロックの物理アドレス(物理ブロック番号)を含めなくても、当該データストライプの物理アドレス(先頭位置の物理アドレス)と当該論理アドレス(論理ブロック番号)のTAG情報中の相対位置とから、対応する物理アドレス(物理ブロック番号)を特定できる。このことは、TAG情報が、論理アドレスと当該論理アドレスに対応するデータストライプ中のデータブロックの物理アドレスとの対応関係を示す情報であることを意味する。
【0046】
TAG情報中のタイムスタンプTSは、対応するデータストライプにデータが書き込まれて当該ストライプに空き領域がなくなった際(データストライプへのデータ書き込みの完了時)の時刻を直接または間接に表す時刻情報であり、時刻それ自体、あるいは書き込みの順番を表すシーケンス番号である。ここでは、タイムスタンプTSはシーケンス番号であり、TAGブロックの最終位置に設定される。一方、有効データブロックに対応する、TAG情報中の論理アドレスは、OSファイルシステム50からのライトリクエストで指定される論理アドレスである。
【0047】
また、データストライプへのデータの書き込み時には、当該データストライプに書き込まれれるデータブロックに対応する論理アドレスが、管理データ領域18bの論理アドレスログ領域18b2にデータブロック毎に記録される。同様に、管理データ領域18bのストライプIDログ領域18b1には、書き込み対象として選択されたデータストライプのID(識別)情報であるストライプID(例えば、ストライプ番号)が時系列順(選択順)に記録される。図3の例では、ストライプID「34」のストライプ(つまりストライプ#34)への書き込みの前に、ストライプID「31」のストライプ(つまりストライプ#31)への書き込みが行われたことが分かる。
【0048】
図3には、上記ディスク180の他に、ドライバ作業領域17が示されている。ドライバ作業領域17は、図1に示したように、主メモリ13上に確保されている。図3では、このドライバ作業領域17に、ライトバッファ171及びAMTキャッシュ172の2つの領域が確保されていることが示されており、ストライプ管理テーブル173は省略されている。AMTキャッシュ172には、AMT領域18aに記憶されるAMT(アドレス変換テーブル)の一部が記憶される。システム稼働中は基本的には、このAMTキャッシュ172がアクセスされる。もし、AMTキャッシュ172に登録されていない論理アドレスによるアクセス要求があった場合、AMT領域18aから該当するAMT内エントリを含む所定サイズのAMT情報が読み出され、AMTキャッシュ172に登録される。AMTキャッシュ172の内容が更新された場合、あるいはシステムがシャットダウンされる場合には、AMTキャッシュ172の内容はAMT領域18a内のAMTに書き戻される。
【0049】
ライトバッファ171は、OSファイルシステム50からのライトリクエストに応じて、当該リクエストで指定されるデータを最初にバッファリングするための領域である。ライトバッファ171のサイズは1データストライプのサイズに等しい。但し、本実施形態のように、1ストライプ単位の「まとめ書き」を行わないシステムでは、ライトバッファ171は少なくとも1データブロックのサイズでよい。なお、1ストライプ単位の「まとめ書き」を行う場合、処理の高速化のために、1データストライプのサイズに等しいライトバッファ171を複数用意して、サイクリックに使用するとよい。
【0050】
AMTキャッシュ172の領域は、ディスク180上のAMT領域18aに記録されているAMTの一部をキャッシュして記憶するための領域である。RAID高速化ドライバ100は、AMTキャッシュ172上に、参照または変更(更新)の対象となるAMTの内容が存在しない場合、その内容を含むAMTの一部を、予め定められた固定サイズ(例えば4KB)の単位でAMT領域18aからAMTキャッシュ172に読み込む。RAID高速化ドライバ100はAMTキャッシュ172を変更した場合、当該AMTキャッシュ172の変更部分を含む固定サイズをAMT領域18aに書き戻す。
【0051】
次に、RAID高速化ドライバ100によるディスク180のパーティションに対するデータ書き込み処理の詳細な動作について、ライト処理のメインルーチンの処理手順を表す図4のフローチャートを参照して説明する。なお、以下の説明では、書き込み対象データストライプが「ストライプ#34」であるとする。
【0052】
今、OSファイルシステム50からライトリクエストReqi(i=1,2,3,4…)が入力されたものとする(ステップ401)。このライトリクエストReqiは、論理アドレスaddriから始まるn個のライトブロックデータB0〜Bn-1の書き込みを指定するものとする。ここでは、1ブロックデータは2KBである。
【0053】
RAID高速化ドライバ100は、ライトリクエストReqiが入力されると、現在、空き領域を有するストライプが書き込み対象ストライプとして割り当てられているか否かをチェックする(ステップ402)。もし、目的のストライプが割り当てられていないならば、RAID高速化ドライバ100はディスク180上の空きストライプを1つ選択する(ステップ403)。このステップ403では、書き込み対象ストライプのストライプID(ストライプ番号)を示すIDkとして、当該ステップ403で選択された空きストライプのストライプID(この例では、ストライプ#34)が設定される。RAID高速化ドライバ100は、このストライプIDkを、データ管理領域18bのストライプIDログ領域18b1に、次のエントリ情報として書き込む(ステップ404)。これによりストライプIDログ領域18b1には、書き込み対象に選ばれたストライプのIDが時系列順に記録されていく。なお、空きストライプは、図1中のストライプ管理テーブル173により示される。
【0054】
次に、RAID高速化ドライバ100は、ステップ404で選択されたストライプに管理データ領域18b中の論理アドレスログ領域18b2を割り当てる(ステップ405)。
【0055】
論理アドレスログ領域18b2は、OSファイルシステム50からのライトリクエストReqiにより指定されたデータを書き込み対象のデータストライプ#34に書き込んだ際に、そのデータの論理アドレスを記憶しておくための領域である。この論理アドレスログ領域18b2は、ヘッダ部とエントリ部とから構成される。論理アドレスログ領域18b2のヘッダ部には、書き込み対象のデータストライプのストライプIDが記録され、エントリ部には、当該ストライプを構成する各物理ブロックが保持するデータの論理アドレス(論理ブロックアドレス)がライトリクエストReqiを単位に記録される。このエントリ部内の、ライトリクエストReqiを単位とする領域をエントリと呼ぶ。図3では省略されているが、論理アドレスログ領域18b2のヘッダ部には、ストライプIDと組をなして、当該ストライプIDで示されるデータストライプへのデータ書き込みの完了時のタイムスタンプTSも記録される。同様に、論理アドレスログ領域18b2の各エントリには、論理アドレスと組をなして、対応する物理ブロックのデータのチェックサムも記録される。
【0056】
RAID高速化ドライバ100は上記ステップ405を実行すると、書き込み対象データストライプ#34の空き領域内に、ライトリクエストReqiで指定されたライトデータを記憶するための領域を2KBのブロック単位で確保する(ステップ406)。この動作は、データストライプ#34の空き領域が無くなるまで、あるいは、ライトリクエストReqiの全てのブロックの記憶領域が確保されるまで行われる。なお、空き領域を有する書き込み対象データストライプ#34が既に割り当てられている場合には(ステップ402)、ステップ403,404,405の処理をスキップして、ステップ406へ進む。
【0057】
次に、RAID高速化ドライバ100は、データストライプ#34に対するデータ書き込みのI/O要求を発行する(ステップ407)。この際、書き込みできるデータはライトバッファ171上で1つにまとめられて、I/O要求が発行される。例えば、図3のライトリクエストReq1は、2KBのブロックデータを2個書き込むものであるが、これを1つのライトリクエストとしてI/O要求を発行する。これにより、ディスクの特性から効率の良い書き込みが行われる。更に、ライトデータに関する論理アドレス情報を、ステップ405で割り当てられた論理アドレスログ領域18b2に書き込むためのI/O要求が発行される。この例では、図3に示すように、論理アドレスログ領域18b2の先頭にストライプID=34が書き込まれる。また、論理アドレスログ領域18b2内の後続する領域に、書き込まれたデータの論理アドレス(論理ブロック番号)Vとして、図3に示すように、ライトリクエストReq1の2ブロックデータの書き込みに対応してV=100,101が、同様にライトリクエストReq2の3ブロックデータに対応してV=76,77,78が、ライトリクエストReq3の1ブロックデータに対応してV=60が、そしてライトリクエストReq4の4ブロックデータに対応してV=79,80,81,82が、それぞれ書き込まれる(ステップ408)。
【0058】
上記ステップ407,408で発行されたI/O要求は非同期に処理され、当該I/O要求で指定されるI/O処理の完了を待つことなく次の処理が行われる。即ちRAID高速化ドライバ100は、ステップ407,408でI/O要求を発行すると、書き込み対象データストライプ#34に空き領域が有るか否かを調べる(ステップ409)。空き領域が無い場合、つまり書き込み対象データストライプ#34に当該ストライプ#34の全容量分の書き込みデータが揃った場合には、TAG情報(対象データストライプ#34に書き込んだブロックの論理ブロック番号テーブル)の書き込みI/O要求(TAG書き込みI/O要求)を発行する(ステップ410)。TAG情報が書き込まれる領域は原則として、ディスク180上のどこに配置されても構わないが、本実施形態ではデータストライプ#34の1つのブロック(TAGブロック)として存在する。ステップ410のTAG情報の書き込み処理は非同期に行われる。このTAG情報中の論理ブロック番号(論理アドレス)には、データストライプ#34へのデータ書き込みに応じてディスク180の論理アドレスログ領域18b2に記録された論理ブロック番号(論理アドレス)が用いられる。
【0059】
次にRAID高速化ドライバ100は、書き込み対象データストライプ#34に書き込んだデータブロックのTAG情報の内容によりAMTキャッシュ172を更新する(ステップ411)。即ちRAID高速化ドライバ100は、AMTキャッシュ172のエントリの情報(AMTエントリ情報)のうち、TAG情報中の論理ブロック番号を含むエントリ情報(アドレス変換情報)を、当該論理ブロック番号と当該論理ブロック番号のTAG情報中の位置から特定されるデータストライプ#34内のデータブロックの物理ブロック番号との対応関係を示す情報(アドレス変換情報)に更新する。この処理についてもAMTキャッシュ172の操作にI/O要求が伴う場合があり、非同期に処理が行われる。一方、ステップ409において、書き込み対象データストライプ#34に空き領域が有る場合には、上記ステップ410,S411の処理をせず、ステップ412に進む。
【0060】
最後に、RAID高速化ドライバ100は、ライトリクエストReqiに対して全てのデータブロックの書き込みI/O要求が発行されたか否かを判断する(ステップ412)。まだライトすべきデータが残っている場合には、ステップ402に戻り、新たなストライプを割り当てて、同様に書き込みI/O要求を発行する。これに対し、ライトリクエストReqiに対する全てのデータブロックの書き込みI/O要求が発行されていた場合には、ディスクへの書き込み処理は終了する。
【0061】
図5は、上記ステップ407,408で発行されたI/O要求の完了処理(通常は完了割り込みの処理)の動作を示すフローチャートである。I/O完了処理#1は、ステップ407に対応したデータ書き込みに関する完了処理であり、I/O完了処理#2はステップ408に対応した論理アドレスログの書き込みに関する完了処理である。
【0062】
RAID高速化ドライバ100は、I/O完了処理#1では、完了したデータ書き込みに対応する論理アドレスログの書き込み処理が完了しているか否かをチェックする(ステップ501)。一方、I/O完了処理#2では、RAID高速化ドライバ100は、完了した論理アドレスログの書き込みに対応するデータ書き込み処理が完了したか否かをチェックする(ステップ510)。RAID高速化ドライバ100は、判定の対象となる書き込みが完了しているならば、元々のライトリクエストReqiに関して、全てのデータ書き込みと、論理アドレスログの書き込みとが完了しているか否かをチェックする(ステップ502)。それらが完了しているならば、RAID高速化ドライバ100は、OSファイルシステム50にライトリクエストReqiに対するディスクへの書き込みが全て完了したことを通知する(ステップ503)。即ち、全ての書き込みブロックがデータストライプ#34に書き込まれ、且つ、それらのブロックの論理アドレス情報が論理アドレスログ領域118b2に書き込まれた時点で、RAID高速化ドライブ100はライトリクエストReqiの完了通知をリクエスト発行元のOSファイルシステム50に通知する。
【0063】
図6は、図4のステップ410で発行されたTAG書き込みI/O要求の完了処理の動作を示すフローチャートである。RAID高速化ドライバ100は、TAG書き込みI/O要求の完了処理(I/O完了処理#3)において、TAG書き込みI/O要求処理が終ったストライプ#34に割り当てた論理アドレスログ領域を解放する(ステップ600)。これにより、TAG情報の書き込みは終了する。
【0064】
以上、RAID高速化ドライバ100によるディスク180のパーティションに対するデータ書き込み処理について説明した。このデータ書き込み処理によれば、不揮発性メモリの代わりに、ディスク180上に設けられたAMT領域18a(主メモリ13上のAMTキャッシュ172の領域を含む)、管理データ領域18b及びデータ領域18cを用いることにより、OSファイルシステム50からのランダムライトを物理的に連続した領域への書き込みとして実行することができる。RAID5を適用するディスクに対しては、パリティグループ単位での書き込みになるようにストライプ境界とサイズを合わせるならば、ストライプへの書き込みが全て終った段階で、RAIDコントローラ16のキャッシュメモリ上でパリティグループが揃うため、パリティ計算のためのディスクリード処理が不要となる。これにより、所謂「RAID5のライトペナルティ」を無くすことが可能になり、結果として高速な書き込み処理が実現される。
【0065】
また、一連のデータ書き込み処理が完了しない状態で、不慮のシステムダウンによる処理停止が起こった場合、論理アドレスログ領域18b2に記録された情報(以下、論理アドレスログ情報と称する)を用いて、システムリブート後のデータ回復処理が実行できる。この論理アドレスログ情報は、書き込み対象データストライプ#34に書き込まれる全ての書き込みデータブロックの論理アドレスと物理アドレスの関係を示す情報が、データストライプ#34のTAG情報として、当該ストライプ#34のTAGブロックに登録された時点で不要になる。そのため、論理アドレスログ領域18b2が解放される。具体的には、論理アドレスログ領域18b2のヘッダ部に記録される後述するフラグが、使用中を示す状態から使用されていないことを示す状態に変更される。
【0066】
次に、RAID高速化ドライバ100が書き込み処理を実行しているときにシステムの障害が発生した場合の、システムリブート後のデータの障害回復処理(復元処理)について説明する。システム障害発生時には、データや論理アドレスログ情報等の書き込みが完了しない状態でシステムが立ち上がる可能性がある。このようなときに、データ書き込みが完了していたデータブロックについては、書き込み対象データストライプ中のTAGブロックとAMTキャッシュ172に、そのブロックに関する論理アドレスと物理アドレスとの関係を示す情報を登録し直すことにより、以降、そのデータブロックへのアクセスが可能になる。
【0067】
ここで、データがディスク180に正しく書き込めたか否かは、論理アドレスログ領域18b2に記録されているチェックサムと、書き込み先のデータの領域から再計算したチェックサムとを比較することで判断できる。この場合、論理アドレスログ領域18b2に記録された(チェックサムの値を含む)論理アドレスログ情報の値が、「正しい値」であることを保証する必要がある。そのためには、論理アドレスログ領域18b2の各エントリ毎に、例えば以下の手順
(x)エントリ書き込み時に、特定の文字列(signature)をエントリの領域の最初と最後に入れておき、読み出し時にチェックする。
【0068】
(y)エントリ全体のチェックサムを計算して記録する。
【0069】
(z)ターゲットのデータストライプのストライプIDを記録して、論理ストライプログ領域18b2の先頭に記録されるストライプIDとの一致を確認する。
【0070】
を実行し、各エントリのデータの整合性を確認すればよい。
【0071】
以下、上記の障害回復処理の手順について、図7のフローチャートを参照して説明する。なお、図3では作図の都合上、論理アドレスログ領域18b2が管理データ領域18b内に1つだけ存在するように示されている。しかし本実施形態では、管理データ領域18b内には複数の論理アドレスログ領域18b2、例えば図8に示すように4つの論理アドレスログ領域18b2が配置されている。この4つの論理アドレスログ領域18b2を区別するために、それぞれLA0〜LA3の符号を付して、以下の説明では論理アドレスログ領域LA0〜LA3と呼ぶこともある。論理アドレスログ領域LA0〜LA3のヘッダ部には、ストライプIDの他に、当該論理アドレスログ領域LA0〜LA3が使用中であるかを示すフラグ(Valid)が記録される。このフラグは、論理アドレスログ領域が使用中の間はセット(Valid=“1”)され、当該論理アドレスログ領域が解放される際にリセット(Valid=“0”)される。データ領域18cの中から空きストライプが新たな書き込み対象ストライプとして割り当てられる場合、現在使用されていない(つまり解放されている)論理アドレスログ領域のうちで最も最近に使用された論理アドレスログ領域が、当該書き込み対象ストライプに対応する論理アドレス情報を記録するために選択される。本実施形態において、管理データ領域18b内に複数(4つ)の論理アドレスログ領域18b2を用意する理由は、複数(4つ)のデータストライプへのデータ書き込みが並行して行えるようにするためであり、その必要がなければ論理アドレスログ領域18b2は1つでも構わない。
【0072】
さて、RAID高速化ドライバ100はまず、管理データ領域18b内の論理アドレスログ領域LA0〜LA3のヘッダ部を参照し、フラグが使用中(Valid=“1”)を示している論理アドレスログ領域を確認する(ステップ701)。図8の例では、論理アドレスログ領域LA1,LA2のフラグが使用中(Valid=“1”)を示している。この場合、RAID高速化ドライバ100は、論理アドレスログ領域LA1,LA2が使用中であると判定し、当該LA1,LA2の情報のリスト(使用中論理アドレスログ領域リスト)Sを主メモリ13のドライバ作業領域17上に生成する。
【0073】
次にRAID高速化ドライバ100は、上記リストSの要素を、対応する論理アドレスログ領域のヘッダ部に記録されているタイムスタンプTSの値により降べきの順にソートする(ステップ702)。これにより、使用中の論理アドレスログ領域の情報が時系列順にソートされることになる。図8の例では、論理アドレスログ領域LA2のタイムスタンプTS=11679の方が論理アドレスログ領域LA1のタイムスタンプTS=11680より小さい(即ち、古い)。したがって、ステップ702のソートの結果、リストSではLA2,LA1の順となる。
【0074】
次にRAID高速化ドライバ100は、リストSに未処理の使用中論理アドレスログ領域(要素)が存在するかを調べる(ステップ703)。この例のように存在する場合、RAID高速化ドライバ100は、リストSから未処理の要素の中で一番古いタイムスタンプTSを持つ要素を要素(論理アドレスログ領域)LAiとして選択する(ステップ704)。1回目のステップ704では、LA2がLAiとして選択される。
【0075】
次にRAID高速化ドライバ100は、主メモリ13のライトバッファ171上にTAGブロックの内容(TAGイメージ)を復元するための領域(以下、TAGバッファと称する)を確保して、当該領域(TAGバッファ)を初期化する(ステップ705)。このTAGバッファの初期化により、即ち論理アドレスログ領域LAiのヘッダ部により示されるデータストライプの各物理ブロックに対応する、TAGバッファ内の各エントリの初期化により、当該各物理ブロックが無効である状態にされる。
【0076】
次にRAID高速化ドライバ100は、要素(論理アドレスログ領域)LAi中のエントリEkを指定する変数kを初期値0に設定する(ステップ706)。そしてRAID高速化ドライバ100は、論理アドレスログ領域LAi(ここではLA2)内の先頭エントリE0から順に有効なエントリEkを探す動作を変数kをインクリメントしながら実行する(ステップ707,711,712)。有効なエントリEkの判断は、上述した(x)〜(z)の手順で行えばよい。
【0077】
RAID高速化ドライバ100は、有効なエントリEkを見つける都度、対応するデータストライプ中のデータブロックに実際に書かれているデータからチェックサムChkSum1を計算する(ステップ708)。このチェックサムChkSum1は、データブロック毎のチェックサムから構成される。そしてRAID高速化ドライバ100は、算出されたチェックサムChkSum1(中のデータブロック毎のチェックサム)がエントリEkに記録されているチェックサムChkSum0(中のデータブロック毎のチェックサム)に一致するか否かを確認する(ステップ709)。
【0078】
上記ステップステップ708,709の処理の詳細を、LAiがLA2の場合を例に以下に説明する。まず、図8に示す論理アドレスログ領域LA2の例では、当該領域LA2のヘッダ部で示されるデータストライプが、ストライプID=34のデータストライプであり、当該領域LA2中のエントリE0,E1,E2,…のうち、ヘッダ部に設定されているタイムスタンプTS=11679に一致するタイムスタンプを有するエントリE0,E1が有効なエントリであると想定している。また、ストライプID=34のデータストライプ(つまりデータストライプ#34)の先頭ブロックの物理アドレス(物理ブロック番号)が2000であるとしている。
【0079】
LA2中のエントリE0に注目すると、当該エントリE0は2つの物理ブロックから構成されている。エントリE0には、論理アドレスV=463,464と、その論理アドレスV=463,464が割り当てられるそれぞれのデータブロックのチェックサムCS(ChkSum0)=CS0,CS1とが記録されている。
【0080】
そこで上記ステップ708では、実際にデータストライプ#34(論理アドレスログLA2に対応するデータストライプ)の1番目と2番目のデータブロック(物理アドレス2000と2001のデータブロック)を読み出して、チェックサムChkSum1=CS0’,CS1’を計算する。そしてステップ709で、ChkSum0とChkSum1とが比較される。具体的には、ChkSum0中のCS0とChkSum1中のCS0’、及びChkSum0中のCS1とChkSum1中のCS1’とが、それぞれ比較される。この比較の結果、チェックサムが一致するデータブロックについては正しいデータであると判断される。
【0081】
ステップ709での比較の結果、チェックサムが一致した場合、当該チェックサムが一致したデータブロックに対応する、TAGバッファ内のエントリに、エントリE0中の該当する論理アドレス(論理ブロック番号)が記録される(ステップ710)。この論理アドレスが記録されるTAGバッファ内のエントリの位置は、チェックサムが一致したデータブロックのデータストライプ#34内の相対位置(データストライプ#34内の何番目のデータブロックか)で決まる。
【0082】
RAID高速化ドライバ100は、変数kをインクリメントする都度(ステップ711)、そのインクリメント後の変数kが、データストライプを構成するデータブロック数Nより小さいかを判定する(ステップ712)。もし、k<Nでないならば、RAID高速化ドライバ100は論理アドレスログ領域LA2内の全エントリについて処理したと判断する。この段階で、TAGバッファの情報(TAGイメージ)が完成する。
【0083】
そこでRAID高速化ドライバ100は、k<Nが成立しなくなった段階で(ステップ712)、TAGバッファの内容(TAGイメージ)を、論理アドレスログ領域LA2のヘッダ部で示されるデータストライプ(ここでは、データストライプ#34)のTAGブロックに書き込む(ステップ713)。図9は、このときのデータストライプ#34内のTAGブロックの状態、即ち論理アドレスログ領域LA2のエントリE0,E1に記録されている論理アドレスで指定される5つのデータブロック(論理アドレスV=463,464,27,28,29が割り当てられたデータブロック)を処理し終えた結果完成したTAGイメージが書き込まれた、データストライプ#34内のTAGブロックの状態を示す。
【0084】
次にRAID高速化ドライバ100は、TAGイメージ(つまりデータストライプ#34内のTAGブロックに書き込まれている論理アドレスと当該論理アドレスに対応するデータストライプ中のデータブロックの物理アドレスとの対応関係を示す情報)をドライバ作業領域17上のAMTキャッシュ172に反映し、当該AMTキャッシュ172を更新する(ステップ714)。そしてRAID高速化ドライバ100は、論理アドレスログ領域LA2中の使用中フラグをリセット(valid=“0”)して当該ログ領域LA2を解放することにより、論理アドレスログLA2の回復処理を終了し(ステップ715)、ステップ703に戻る。同様の処理を論理アドレスログLA1について行えば、障害発生時に書き込み途中であった論理アドレスログLA1,LA2の書き込みを終了させることができる。
【0085】
このように本実施形態では、システム障害が発生した後のシステム再立ち上げ時に、復元されたTAGイメージでAMTキャッシュ172を更新しているものの、その更新内容を直ちにディスク180上のAMT領域18aに反映させていない。同様に本実施形態では、通常のライト処理(図4のフローチャート参照)において、書き込み対象データストライプ#34に書き込まれたデータブロックのTAG情報の内容によりAMTキャッシュ172を更新しているものの、その更新内容を直ちにディスク180上のAMT領域18aに反映させていない。その理由は、書き込み処理の高速化のためである。しかし、このようにすると、特にシステムに障害が発生した場合に、ディスク180のAMT領域18aに記録されているAMTの整合性に欠けるという問題がある。
【0086】
なお、TAGブロック内のエントリには、有効なデータブロックに関しては、対応する論理アドレスが記録され、無効なデータブロックに関しては、無効である旨を示す論理アドレス(無効論理アドレス)が記録される。無効論理アドレスには、例えばディスク180(ディスクパーティション)に存在しない論理アドレスが使用される。
【0087】
次に、本願発明に直接関係する、ディスク180上のAMT領域18aに記憶されているAMT(アドレス変換テーブル)の特にエントリ情報変更後の整合性(つまりAMTの情報の一貫性)を確認するための仕組みについて説明する。本実施形態では、AMTの整合性を確認するための方法として、以下に述べる方法1及び方法2のいずれかが適用可能である。
【0088】
(方法1)
まず、方法1の概略手順について説明する。方法1では、ディスク180上のAMT領域18aの初期化時(以下、AMT初期化時と称する)、あるいはシステムブート時に、当該AMT領域18aの全てに対して、AMTのエントリの値の総和がチェックサムとして求められる。この値をCk0とする。
【0089】
以降、前述したOSファイルシステム50からのライトリクエストに従うデータ書き込み等に伴って、主メモリ13のドライバ作業領域17に記憶されているAMTキャッシュ172内のエントリの情報を変更する場合には、その変更(AMT変更)に応じてAMTのチェックサムの値が再計算される。この再計算されたチェックサムの値が主メモリ13のドライバ作業領域17に確保されたチェックサム領域174(図1参照)に保持される。ここでは、AMT変更後のチェックサムは、次式
により算出される。
【0090】
AMTの変更は、まず、変更対象のエントリを含むAMTのデータブロック(たとえば4KB)が主メモリ13のドライバ作業領域17上のAMTキャッシュ172にキャッシュされている状態で、当該エントリに対して行われる。このAMTの変更は、AMTキャッシュ172の変更内容をディスク180のAMT領域18aに書き戻すライトバック処理により、当該AMT領域18aに保存されているAMTに反映される。上記(1)式に従って求められる「AMT変更後のチェックサム」は、AMTキャッシュ172内のエントリの変更後に当該エントリを含むAMTのデータブロックがディスク180のAMT領域18aに書き戻されたときのAMT全体のチェックサムの値である。したがって、この値を用いることにより、最終的にディスク180のAMT領域18a上のAMTが正しく変更されたかどうかを判断することができる。
【0091】
(方法2)
次に、方法2の概略手順について説明する。方法2においても、上記方法1と同様に、AMT初期化時、あるいはシステムブート時に、AMTのチェックサムが求められる。但し、以下に述べるようにチェックサムの求め方が方法1と異なる。まず、ディスク180上のAMT領域18aが予め定められた一定の大きさのブロックに分割される。そして、AMTのエントリ毎に、そのエントリが属するブロック内のオフセット値(バイト)を用いて、次式
(AMTのエントリの値)*(ブロック内オフセット+1)…(2)
に示す演算が行われ、その演算結果の総和がチェックサムとして求められる。この値をCk0とする。なお、システムブート時には、チェックサムを求める演算に代えて、後述するパーティションステータスブロック18d(図13参照)に保存されているチェックサム値CSdiskがCk0として用いられることもある(方法1においても同様)。
【0092】
以降、OSファイルシステム50からのライトリクエストに従うデータ書き込み等に伴うAMT変更の場合には、その変更に応じてAMTのチェックサムの値が再計算される。この再計算されたチェックサムの値は主メモリ13のチェックサム領域174に保持される。ここでは、AMT変更後のチェックサムは、次式
により算出される。
【0093】
このように方法2では、方法1と異なり、チェックサムの算出に、AMTのエントリの値をそのまま用いるのではなく、当該エントリの値に当該エントリが属するブロック内オフセット値(バイト)の重みを乗じた結果を用いている。これにより、単純なAMTエントリの入れ替えのような場合でも、ブロック内オフセット値が異なるエントリ間の入れ替えであれば、方法1とは違い、異なるチェックサム値となる。よって、主メモリ13のドライバ作業領域17上のAMTキャッシュ172とディスク180のAMT領域18aに保存されているAMTとの間で整合性に欠けた(一貫性のない)不正な状態を検出するチャンスが増える。
【0094】
なお、ブロック内の先頭のエントリのブロック内オフセットの値は0である。このため、ブロック内オフセットの値を、そのままエントリの値に乗ずると、チェックサムの計算にエントリの値が反映されなくなる。そこで方法2では、上記(2)式のように、ブロック内オフセットに所定値1を加算した値を、エントリの値に乗じている。なお、この所定値は1に限るものではなく、0以外の値であればよい。
【0095】
次に、AMTの整合性を確認するための仕組みの詳細について、上記方法2を適用した場合を例に、(1)ディスク上のAMTデータからのチェックサムの求め方、(2)AMTエントリの変更に伴うチェックサムの再計算に分けて、順に説明する。なお、本実施形態では、RAID高速化ドライバ100が、ディスク180上のAMT領域18aからAMTの一部をAMTキャッシュ172として4KBのサイズ(以下、AMTブロックまたはAMTページと呼ぶ)を単位に主メモリ13のドライバ作業領域17にリードするものとする。また、このAMTキャッシュ172を対象に、RAID高速化ドライバ100が参照と変更とを行い、変更されたAMTブロック(AMTページ)に関しては、あるタイミングで後ほどディスク180上のAMT領域18aに書き戻すことを前提とする。
【0096】
(1)ディスク上のAMTデータからのチェックサムの求め方
まず、ディスク180上のAMT領域18a(に保存されているAMT)のチェックサムの求め方について説明する。ここでは、AMT領域18aは、図10に示すように、ディスク180上の予め定められた領域に確保されているものとする。このAMT領域18aのサイズは4KB×Mであり、4KBのAMTブロック(AMTページ)Bi(i=0,1,2,…M−1)を単位に管理される。本実施形態では、このブロックBi毎のチェックサムCSiが求められる。
【0097】
図11は、AMTブロックBiのチェックサムCSiを求めるのに必要なブロック内オフセットOfjと当該オフセット位置の4バイトの値Ajを説明するための図である。本実施形態では、AMTのエントリが4バイトで構成されるものとする。そこで図11では、4KBのブロックBiを4バイト単位で区切ることで、当該ブロックBiを先頭から4バイト単位の値の連続と見なしている。RAID高速化ドライバ100は、ブロックBiの4バイト(ブロックBiに属するAMTエントリ)毎に、その4バイトの値Aj(jは0〜1023のいずれか)と、その4バイト(AMTエントリ)のブロックBi内のオフセットOfj+1とを乗じた値を求める。これにより、1つのブロックBiについて、1,024個のAj*(Ofj+1)(j=0,1,2,…1023)の値が求められる。なお、図11中のAjの例である“0x00001f28”の先頭にある“0x”は、後続の文字列(00001f28)が16進表現であることを示す。
【0098】
RAID高速化ドライバ100は、ブロックBiについて、生成された1,024個のAj*(Ofj+1)(j=0,1,2,…1023)を加算することで、図12(a)に示すように、ブロックBiのチェックサムCSiを求める。RAID高速化ドライバ100は、AMT領域18aの全てのブロックBi(i=0〜M−1)についてチェックサムCSiを求め、図12(b)に示すように、それらの総和をAMT全体のチェックサム(AMTチェックサム)CS(Ck0)とする。このAMTチェックサムCSは、ディスク180のパーティションステータスブロック18d(図13参照)に(CSdiskとして)保存されると共に、主メモリ13のチェックサム領域174に保持される。以上に述べたAMTチェックサムCSの値を算出する処理は、AMT初期化時、あるいはシステムブート時に実行される。但し、後述するように、パーティションステータスブロック18dにAMT有効を示すステータス情報が保存されている状態でのシステムブート時には、当該ステータスブロック18dに保存されているチェックサム値CSdiskが上記CSとして用いられる。
【0099】
(2)AMTエントリの変更に伴うチェックサムの再計算
次に、AMT(AMTキャッシュ172)の任意のエントリを変更する際の、AMTチェックサムCSの再計算について説明する。RAID高速化ドライバ100は、AMTキャッシュ172の任意のエントリ(AMTエントリ)を変更する際には、主メモリ13のチェックサム領域174に保持されているチェックサム(AMTチェックサム)CSを、AMT変更(AMTエントリ)後のチェックサムに前記(3)式に従って更新する。
【0100】
図13は、主メモリ13のドライバ作業領域17に保持されているAMTキャッシュ172中のエントリEkが変更される際の動作手順を示す。同図に示すように、RAID高速化ドライバ100はまず、変更の対象となるAMTキャッシュ172中のエントリEkの値Dkoldを読み出す(ステップ1301)。このエントリEkがAMTブロックBiに属するものとする。
【0101】
次にRAID高速化ドライバ100は、主メモリ13のチェックサム領域174に保持されている現在のAMTチェックサムCSの値と、読み出したAMTエントリEkの値(変更前のエントリの値)Dkoldと、当該AMTエントリEkにこれから書き込む値(つまり新たなエントリの値)Dknewと、当該AMTエントリEkのブロックBi内のオフセットOf)とをもとに、前記(3)式に従って、AMTエントリ変更後のAMTチェックサムCSを算出する(ステップ1302)。RAID高速化ドライバ100は、主メモリ13のチェックサム領域174に保持されているAMTチェックサムCSを、算出したAMTチェックサムCSに更新する(ステップ1303)。次にRAID高速化ドライバ100は、変更の対象となるAMTキャッシュ172中のエントリEkの値を、新しいエントリ値Dknewに更新する(ステップ1304)。
【0102】
この時点では、AMTキャッシュ172内のエントリEkは更新されているものの、当該エントリに対応するディスク180上のAMT領域18aのAMTエントリは更新されていない。つまり、ステップ1304で更新されたAMTチェックサムは、AMTキャッシュ172内の更新されたエントリEkを含むデータブロックが全てディスク180のAMT領域18aに書き戻されたことを想定して算出されたものである。したがって、この状態においてAMT領域18aに保存されているAMTから算出されるAMTチェックサムの値(AMT領域18aのチェックサム値)と、ステップ1303で更新されたAMTチェックサムの値とは、異なっている。AMTキャッシュ172内の更新されたエントリEkを含むデータブロックが全てディスク180のAMT領域18aに正常に書き戻されて初めて、当該AMT領域18aのチェックサムの値(以下、CSdiskと称する)はステップS1303で更新されたAMTチェックサムの値に一致する。
【0103】
本実施形態では、図1の計算機システムのシャットダウンに際し、主メモリ13のドライバ作業領域17に保持されているAMTキャッシュ172内のデータブロックのうち、変更が加えられた(エントリを含む)データブロック(であって当該変更がディスク180上のAMT領域18aに反映されていないデータブロック)が全て当該AMT領域18aに書き戻(ライトバック)される。もし、この書き戻しが正常に行われるならば、当該書き戻し後のAMT領域18aのチェックサムの値CSdiskと主メモリ13のチェックサム領域174に保持されているAMT変更後のチェックサムの値とは一致するはずである。したがって、上記書き戻し後にAMT領域18aのチェックサムの値CSdiskを再計算し、その値CSdiskをAMT変更後のチェックサムの値と比較するならば、上記書き戻しが正常に行われたかを判定できる。
【0104】
以下、この判定を伴う、計算機のシャットダウン時の処理について、図14のフローチャートを参照して説明する。まずRAID高速化ドライバ100は、主メモリ13のチェックサム領域174に保持されているチェックサムの値、即ち現在までのAMT変更を反映したチェックサムの値を、CSmemとする(ステップ1401)。次にRAID高速化ドライバ100は、AMTキャッシュ172内のAMTブロックのうち、変更が加えられた(エントリを含む)AMTブロック(であって当該変更がディスク180上のAMT領域18aに反映されていないAMTブロック)を全てディスク180上のAMT領域18aに書き戻す(ステップ1402)。
【0105】
次にRAID高速化ドライバ100は、ディスク180上のAMT領域18aに保存されている、上記ステップ1402での書き戻し後のAMTをAMTブロック(AMTページ)単位で読み出して、当該AMT領域18aのチェックサムの値CSdiskを算出する(ステップ1403)。RAID高速化ドライバ100は、算出されたチェックサム値CSdisk(つまり書き戻し後のAMT領域18aのチェックサム値CSdisk)をメモリ13のチェックサム領域174に保持されているチェックサム値CSmemと比較することにより、CSdiskがCSmemに一致するか否かを判定する(ステップ1404)。
【0106】
もし、算出されたチェックサム値CSdiskがチェックサム値CSmemに一致しているならば、RAID高速化ドライバ100は、AMT領域18a内のAMTが正常に変更されていると判断する。この場合、RAID高速化ドライバ100は、ディスク180の所定領域に確保されている図13に示すパーティションステータスブロック18dに、AMTが正しい旨(AMT有効)を示すステータス情報を保存する(ステップ1405)。このステップ1405において、RAID高速化ドライバ100は、チェックサム値CS(=CSmem=CSdisk)も、パーティションステータスブロック18dに保存する。
【0107】
一方、CSmemとCSdiskとが異なる値の場合、RAID高速化ドライバ100は、AMTは正しくないと判断する。この場合、RAID高速化ドライバ100は、パーティションステータスブロック18dに、AMTが誤っている旨(AMT無効)を示すステータス情報を保存する(ステップ1406)。CSmemとCSdiskとが一致しない要因としては、例えばRAID高速化ドライバ100のバグでAMTブロックの変更が一部ディスクに反映されていない、あるいはディスク上でAMTデータが壊れているなどが考えられる。
【0108】
このように本実施形態においては、ディスク180上のAMT領域18a(に保存されているAMT)の内容から算出されたチェックサムの値CSdiskをメモリ13のチェックサム領域174に保持されているチェックサムの値CSmemと比べることにより、AMTの整合性が簡単にチェックでき、RAID高速化ドライバ100の信頼性を向上することができる。
【0109】
次に、本実施形態のシステムブート時の処理について、図15のフローチャートを参照して説明する。まずRAID高速化ドライバ100は、図1の計算機システムのブート時には、ディスク180のパーティションステータスブロック18dを参照する(ステップ1501)。そしてRAID高速化ドライバ100は、パーティションステータスブロック18dに「AMT有効」を示すステータス情報が保存されているか否かを判定する(ステップ1502)。
【0110】
もし、「AMT有効」を示すステータス情報が保存されているならば、RAID高速化ドライバ100はディスク180上のAMT領域18aの内容(AMTの内容)は正しいと判断する。この場合、RAID高速化ドライバ100は、パーティションステイタスブロック18dに保存されているチェックサム値CSdiskを読み出すと共に、当該パーティションステータスブロック18d中のステータス情報を「AMT更新中」に変更する(ステップ1503,1504)。そしてRAID高速化ドライバ100は、パーティションステータスブロック18dから読み出したチェックサム値CSdiskをCSmemとして、主メモリ13のチェックサム領域174に書き込む(ステップ1505)。この場合、ディスク180上のAMT領域18aの内容はそのまま参照され使用される。
【0111】
これに対し、パーティションステータスブロック18dに、「AMT無効」を示すステータス情報が保存されているならば(ステップ1502)、RAID高速化ドライバ100はAMT領域18aの内容は正しくないと判断する。この場合、RAID高速化ドライバ100は、AMT領域18aを初期化して、ディスク(ディスクパーティション)180のデータ領域18c内の全データストライプに含まれているTAGブロック(TAG領域)の情報をもとに、当該ディスク180上のAMT領域18aの内容(AMT)を再構築するAMT再構築処理を実行する(ステップ1506)。このAMT再構築処理の詳細については後述する。
【0112】
RAID高速化ドライバ100は、ディスク180上のAMT領域18aの内容を再構築すると、当該再構築されたAMT領域18aのチェックサム値を求め、そのチェックサム値をCSdiskと(してディスク180上のパーティションステータスブロック18dに保存)する(ステップ1507)。そしてRAID高速化ドライバ100は上記ステップ1505に進み、ステップ1507で求めたチェックサム値CSdiskをCSmemとして、主メモリ13のチェックサム領域174に書き込む。このステップ1505が実行された後は、RAID高速化ドライバ100はAMTキャッシュ172が変更される都度、前記(3)式に従ってAMT変更後のチェックサムを算出し、チェックサム領域174に保持されているチェックサム(AMTチェックサム)CSを、この算出した値に更新する。
【0113】
次に、AMT再構築処理(ステップ1506)の詳細について図16のフローチャートを参照して説明する。まずRAID高速化ドライバ100は、ディスク(パーティション)180上のAMT領域18aを初期化、つまり有効ブロックが1つも登録されていない状態にする(ステップS1600)。次にRAID高速化ドライバ100は、ディスク180のデータ領域18c内の全ての有効なストライプ(つまり、パーティション生成後にデータの書き込みが行われたストライプ)のTAGブロックに設定されているTAG情報に関し、当該TAG情報中のタイムスタンプTSに従い、当該タイムスタンプTSの昇べきの順(つまりTAG情報の生成時刻順)にソートする(ステップ1601)。
【0114】
次にRAID高速化ドライバ100は、ソートされたTAG情報を、データ書き込み時刻の古いストライプのTAG情報から順番に選択する(ステップ1602,1607,1608)。RAID高速化ドライバ100は、参照したTAG情報中の論理ブロック番号毎に(ステップ1603)、その論理ブロック番号の当該TAG情報中の相対位置と当該TAG情報が設定されている(TAGブロックを含む)データストライプの物理アドレスとから、その論理ブロック番号で指定されるデータが書き込まれている物理ブロックの物理ブロック番号を特定する(ステップ1604)。RAID高速化ドライバ100は、TAG情報中の論理ブロック番号と上記特定された物理ブロック番号(即ち当該論理ブロック番号で指定されるデータが書き込まれている物理ブロックの物理ブロック番号)との対応を示す情報を、AMTの1エントリの情報として、ディスク180上のAMT領域18aに登録する(ステップ1605)。
【0115】
RAID高速化ドライバ100は、以上のステップ1603〜1605の処理を、選択したTAG情報中の全ての論理ブロック番号について繰り返す(ステップ1606)。そしてRAID高速化ドライバ100は、選択したTAG情報についての処理を終了すると(ステップ1606)、ソートされた全てのTAG情報について終了したか判定する(ステップ1607)。もし、未処理のTAG情報が残っているならば、RAID高速化ドライバ100は、ソートされたTAG情報の中から今回処理したTAG情報の次に古いTAG情報を選択して(ステップ1608)、当該TAG情報中の全ての論理ブロック番号についてステップ1603〜1605の処理を繰り返す(ステップ1606)。RAID高速化ドライバ100は、以上の処理を、ソートされた全てのTAG情報について繰り返す。これにより、全てのTAG情報について、当該TAG情報に含まれている各論理ブロック番号と物理ブロック番号との対応を表すAMTエントリ情報がAMT領域18aに登録されて、AMTが再構築される。このときAMTは、その際のディスク(パーティション)180内のデータブロックの論理ブロック番号と物理ブロック番号との関係を正しく表すようになり、AMT再構築処理は完了する。
【0116】
なお、上記「有効なストライプ」とは、現在のパーティションの生成後に書き込みが行われたストライプを意味する。例えば、物理ディスク上に同じオフセット、同じ大きさのパーティションを数度作成する(と共に当該パーティションにデータの書き込みを行う)と、新しいパーティションで書き込みを行っていないストライプに関して、古いパーティションに対して書き込んだ際の古いストライプのイメージが、新しいパーティション上に存在するように認識されることになる。このようなストライプは新しいパーティションにとっては(まだ書き込みを行っていないので)「無効なストライプ」であり、そのストライプ内のデータは無効とみなす必要がある。つまり、上記の「AMT再構築処理」ではこのようなストライプは無効なストライプとして区別する必要がある。そのためには、生成されたパーティションを識別可能な情報、例えばパーティションのIDを、当該パーティション上のデータストライプへのデータ書き込み時に当該ストライプ中のTAGブロックに書き込むとよい。このようにすると、AMT再構築処理で有効ストライプを選択する際に,TAGブロック内のパーティションIDが現在のパーティションIDに一致するか否かをチェックすることにより、当該ストライプが「有効」であるか「無効」であるかを判断できる。
【0117】
次に、本実施形態で適用される、図1の計算機システムに障害が発生した場合においてAMTを障害発生直前の状態に復元する仕組みについて、その概要を説明する。
【0118】
既に述べたように、本実施形態では、書き込み対象になったストライプのIDが、ディスク180上に確保された管理データ領域18b内のストライプIDログ領域18b1に(ストライプID情報として)時系列順に記録される。また、データストライプへのデータ書き込み終了時に当該ストライプ中のTAGブロックに記録されたTAG情報により示される、当該ストライプに書き込まれたデータブロックの論理ブロック番号と物理ブロック番号との対応関係が、AMT(アドレス変換テーブル)に反映される。AMTの本体はディスク180上のAMT領域18aに存在し、AMTへのアクセス効率を向上するために、AMT領域18a内のAMTの一部が一定のサイズ(4KB)のAMTブロック(AMTページ)を単位に、AMT領域18aから主メモリ13(のドライバ作業領域17)にキャッシュされる。また、AMTのエントリの変更は、主メモリ13上にキャッシュされた状態で、つまりAMTキャッシュ172を対象に行われ、その変更された部分を含むAMTブロックは、最終的にはディスク180のAMT領域18aに書き戻される。
【0119】
本実施形態では、障害発生時のAMTを復元するために、データストライプ単位でのAMTの更新処理(を伴うデータストライプへのデータ書き込み)が定期的に停止される。この状態で、主メモリ13のドライバ作業領域17にキャッシュされている全てのAMTブロック、即ちAMTの更新処理の対象となったAMTキャッシュ172を構成する全てのAMTブロックが、ディスク180のAMT領域18aに書き戻される。
【0120】
この書き戻しの後に、以下の3種の情報
(1)最後にAMT更新を終えたストライプのID
(2)その時点での、主メモリ13上のAMTキャッシュ172の変更内容から計算された、AMTのチェックサムの値CSmem
(3)ストライプ書き込み時のタイムスタンプTS
が、AMTチェックポイント情報として、ディスク180に確保された図3に示すAMTチェックポイントステータスブロック18b3に記録される。このAMTチェックポイントステータスブロック18b3は、例えば図19に示すように、2つのエントリEa及びEbを有する。AMTチェックポイント情報は、この2つのエントリEa及びEbのいずれか一方に記録される。
【0121】
ディスク180には、AMTチェックポイントステータスブロック18b3の各エントリEa,Ebに対応して、図20に示すように、2つのAMTバックアップ領域210a(#1),210b(#2)も確保されている。AMTチェックポイントステータスブロック18b3のエントリEaまたはEbへのAMTチェックポイント情報の記録時には、そのときのディスク180上のAMT領域18aの全データがバックアップ情報として、当該エントリEaまたはEbに対応するAMTバックアップ領域210aまたは210bに保存される。
【0122】
図1の計算機システムの障害発生により異常終了した後のリブート処理では、最後のAMTチェックポイント情報が検出され、当該チェックポイント情報中の上記3種の情報が読み出される。その後、最後のチェックポイント時のAMT領域18aのバックアップ情報(つまりAMTバックアップ領域210aまたは210bに保存されているバックアップ情報)を用いて、当該最後のチェックポイント時のAMT領域18aの内容が復元される。
【0123】
次に、ストライプIDログ領域18b1に時系列順に記録されているストライプIDで指定されるストライプのうち、上記AMTチェックポイント以降に使用されたストライプを対象に、当該ストライプ中のTAGブロックからTAG情報が読み出される。このストライプ中のTAG情報をもとに、前記ステップS411と同様にして、AMTキャッシュ172が更新される。同時に、このAMTキャッシュ172の更新内容が、上記読み出されたAMTチェックポイント情報中のAMTチェックサムの値CSmemに反映される。
【0124】
このように、障害発生直前までに書き込み処理が行われた全てのストライプに関してAMT更新処理を行うことにより、障害発生時のAMTを復元することが可能となる。なお、同一データストライプに対して複数回書き込みが繰り返される場合がある。この場合、ストライプIDログ領域18b1には、同一ストライプIDが複数記録される。そこで、ストライプIDで指定されるデータストライプ中のTAGブロックに記録されているタイムスタンプを参照し、TAGが時系列に記録されている順番と異なっている場合には、AMTの更新が行われないようにする必要がある。
【0125】
次に、図1の計算機システムに障害が発生してシステムダウンした場合においてAMTを障害発生直前の状態に復元する動作の詳細について説明する。
まず、AMT復元を可能とするためのデータ書き込み時の動作及びシャットダウン時の動作並びにチェックポイント処理について、図4のフローチャートと相異する部分を中心に、図17及び図18のフローチャートを参照して説明する。ここでは、AMTチェックポイントを採取する時期をストライプ書き込みの回数から決定するために、当該ストライプ書き込みの回数を示す変数Iが適用される。また、ディスク180のストライプIDログ領域18b1には、ストライプID情報として、図3の例とは異なって、ストライプIDとタイムスタンプTSとの対が時系列に記録される。図21は、ストライプIDとタイムスタンプTSとの対が時系列に記録されたストライプIDログ領域18b1の一例を示す。
【0126】
RAID高速化ドライバ100は、処理の開始時に、変数(ストライプ回数)Iを初期値0に設定する(ステップ1701)。またRAID高速化ドライバ100は、ディスク180のデータ領域18c内の空きストライプを1つ選択して書き込み対象ストライプとして割り当てる(ステップ1702)。この書き込み対象ストライプのID(ストライプID)をIDiとする。
【0127】
次にRAID高速化ドライバ100は、ストライプIDiに対して最新のタイムスタンプTSiを割り当てる(ステップ1703)。そしてRAID高速化ドライバ100は、ディスク180上のストライプIDログ領域18b1内の最も最近にストライプID及びタイムスタンプTSの対が書き込まれたエントリの次のエントリに、(ストライプID,タイムスタンプTS)として(IDi,TSi)を書き込む(ステップ1704)。このストライプIDログ領域18b1は循環バッファ(リングバッファ)として用いられる。ここで、最も最近にストライプID及びタイムスタンプTSの対が書き込まれたエントリは、現時点までで最も新しいタイムスタンプTS(タイムスタンプTSにシーケンス番号が適用される本実施形態では、最も大きな値のタイムスタンプTS)が書き込まれているエントリである。
【0128】
さて本実施形態では、論理アドレスログ領域18b2が複数用意される。そこでRAID高速化ドライバ100は、複数の論理アドレスログ領域18b2の中から、ステップ1702で選択されたストライプIDiのストライプに書き込むデータに対応する論理ブロック番号(論理アドレス)を記録するための論理アドレスログ領域18b2を決定して、当該ストライプIDiのストライプに割り当てる(ステップ1705)。
【0129】
次にRAID高速化ドライバ100は、書き込み途中のライトリクエストが存在するならば(ステップ1706)、当該ライトリクエストで指定されるデータを、ストライプIDiのストライプ(書き込み対象ストライプ)に書き込む(ステップ1707)。このステップ1707においてRAID高速化ドライバ100は、ストライプIDiの書き込み対象ストライプに書き込んだデータの論理ブロック番号(論理アドレス)を、先に選択された論理アドレスログ領域18b2に書き込む。RAID高速化ドライバ100は、ステップ1707で書き込み対象ストライプにデータ書き込みを行っても、当該ストライプに空き領域が存在しているならば(ステップ1708)、ステップ1706に戻る。
【0130】
これに対し、ステップS1707でのデータ書き込みの結果、書き込み対象ストライプに空き領域がなくなったならば(ステップ1708)、RAID高速化ドライバ100はAMTチェックポイント処理中か否かを判定する(ステップ1709)。もし、AMTチェックポイント処理中であれば、RAID高速化ドライバ100は、現在AMTの更新処理が開始されているストライプに後続する、未だAMT更新処理(ライトリクエストで指定された、AMT更新処理を伴うデータ書き込み)が開始されていないストライプに関して当該AMT更新処理(を伴うデータ書き込み)をペンディング(キューイング)して(ステップ1710)、AMTチェックポイント処理が終了するのを待つ(ステップ1709)。
【0131】
一方、AMTチェックポイント処理中でなければ(ステップ1709)、RAID高速化ドライバ100はストライプIDiに関する後処理を開始する(ステップ1711)。ここでは、図4中のステップ410及び411に相当する処理、即ち(1)TAG情報書き込みのためのTAG書き込みI/O要求の発行と、(2)TAG情報を反映するAMTキャッシュ172の更新(AMT更新)とが行われる。また、AMTキャッシュ172が更新される際には、図13に示したように、主メモリ13上のチェックサム領域174のチェックサム値も更新される。ステップ1711の処理(ストライプIDiに関する後処理)は、他の処理と非同期に行われ、その完了を待たずに次の処理(ステップ1712)が行われる。このステップS1712では、変数(ストライプ書き込み回数)Iが1インクリメントされる。
【0132】
もし、インクリメント後の変数Iが所定値Ic(例えば10,000)未満であるならば(ステップ1713)、RAID高速化ドライバ100は、上記ステップ1702から始まるAMT更新を伴うデータストライプへのデータ書き込みを再び実行する。これに対し、インクリメント後の変数Iが所定値Ic以上であるならば、RAID高速化ドライバ100は変数Iを初期値0に戻し(ステップ1714)、しかる後にAMTチェックポイントを採取するAMTチェックポイント処理(ステップ1715)を実行する。このようにRAID高速化ドライバ100は、ステップS1702から始まる処理のループを所定回数Ic(=10,000回)繰り返す毎に、つまりストライプ書き込みを所定回数Ic(=10,000回)繰り返す毎に、当該ステップ1702から始まる処理(AMT更新を伴うデータストライプへのデータ書き込み)を停止して、AMTチェックポイント処理(ステップ1715)を実行する。
【0133】
さてRAID高速化ドライバ100は、ステップ1702から始まる処理を実行した結果、書き込み途中のライトリクエストがなくなると(ステップ1706)、OSファイルシステム50からライトリクエストまたはシャットダウン通知が発行されるのを待つ(ステップ1802)。この状態で、OSファイルシステム50からRAID高速化ドライバ100にライトリクエストまたはシャットダウン通知が発行されたものとする(ステップ1801)。もし、ライトリクエストが発行されたならば(ステップ1803)、RAID高速化ドライバ100は上記ステップ1707に進む。これに対し、シャットダウン通知が発行されたならば(ステップ1803)、RAID高速化ドライバ100は上記ステップ1711でTAG書き込みI/O要求が発行される毎に実行が開始されるTAG書き込み処理が全て完了するのを待つと共に(ステップ1804)、このTAG書き込み処理で書き込まれるTAG情報が反映されるAMTキャッシュ172の更新(AMT更新)が全て完了するのを待つ(ステップ1805)。
【0134】
RAID高速化ドライバ100は、TAG書き込み処理及びAMT更新処理が全て完了すると、AMTキャッシュ172上の更新されたAMTブロック(つまりダーティブロック)をディスク180上のAMT領域18aに書き戻す(ステップ1806)。そしてRAID高速化ドライバ100は、前記した図14のフローチャートで示されるシャットダウン時の処理を実行する(ステップ1807)。
【0135】
次に、上記AMTチェックポイント処理(ステップ1715)の詳細について、図22のフローチャートを参照して説明する。まずRAID高速化ドライバ100は、現在AMT更新処理が開始されているストライプに後続する、未だAMT更新処理(を伴うデータストライプへのデータ書き込み)が開始されていないストライプに関し、AMT更新処理をペンディング(キューイング)するモードにする(ステップ2201)。このモードでは、AMTチェックポイント処理が実行される。そこで、このモードをAMTチェックポイント処理モードと呼ぶ。AMTチェックポイント処理モードでは、上記後続のストライプのAMT更新処理は、たとえライトデータが全て揃っても待たされる(図18のステップ1709,1710)。
【0136】
RAID高速化ドライバ100はAMTチェックポイント処理モードを設定すると、現在AMT更新処理の対象となっている全てのストライプについて、当該更新処理が完了するのを待つ(ステップ2202)。そして、AMT更新処理中のストライプがなくなると、AMTキャッシュ172上の更新されたAMTブロック(AMTページ)を全てディスク180上のAMT領域18aに書き戻す(ステップ2203)。この段階で、ディスク180上のAMT領域18aの内容は、全ての更新を反映した状態になる。したがって、この状態でAMT領域18aの内容(AMT)のチェックサム値CSdiskを算出するならば、そのチェックサム値CSdiskは、現在主メモリ13上のチェックサム領域174に保持されているチェックサム値CSmemに一致するはずである。そこでRAID高速化ドライバ100は、現在のAMT領域18aの全内容(AMT)を、ディスク180上に予め確保されている、図20に示した2つのAMTバックアップ領域210a,210bのうちの一方(具体的には、前回のチェックポイント処理で使用されなかった方)に退避(コピー)する(ステップ2204)。
【0137】
さてRAID高速化ドライバ100は、ディスク180上のAMT領域18aの全内容をAMTバックアップ領域210a,210bのうちの一方に退避すると、ディスク180上のAMTチェックポイントステータスブロック18b3のエントリEa,Ebのうち、前回のチェックポイント処理で使われなかったエントリにチェックポイント情報を書き込む(ステップ2205)。このチェックポイント情報は、既に述べたように、以下の3種の情報
(1)最後にAMT更新を終えたストライプのID
(2)AMTチェックサムCSmem
(3)ストライプのTS(タイムスタンプ)
からなる。
【0138】
このようにRAID高速化ドライバ100は、AMTチェックポイントステータスブロック18b3のエントリEa,Ebを交互に使用して、チェックポイント情報を保存する。またRAID高速化ドライバ100は、AMTバックアップ領域210a,210bも交互に使用する。
【0139】
RAID高速化ドライバ100は、AMTチェックポイントステータスブロック18b3のエントリEa,Ebの一方にチェックポイント情報を書き込むと(ステップ2205)、AMTチェックポイント処理モードを解除して、AMT更新処理を再開する(ステップ2206)
次に、図1の計算機システムが障害等で異常終了(システムダウン)した際に実行されるシステムリブート時の回復処理(AMT回復処理)について、図23のフローチャートを参照して説明する。ここでは、図1の計算機システムが、図17及び図18のフローチャートに示す手順のデータ書き込み及び図22のフローチャートに示す手順のAMTチェックポイント処理を適用しているものとする。
【0140】
図1の計算機システムが障害発生により異常終了した場合、その異常終了前に主メモリ13のドライバ作業領域17に保持されていた(AMTキャッシュ172に含まれている)変更済みのAMTブロックのうち、その変更がディスク180上のAMT領域18aに反映されていないAMTブロックは失われる。このとき、ディスク180上のAMT領域18aは、上記失われた変更済みのAMTブロックの変更が反映されていない状態にある。図23のシステムリブート時の回復処理(AMT回復処理)の主たる特徴は、この失われた変更済みのAMTブロックの変更をAMT領域18aに反映して、当該AMT領域18aの情報の整合性を回復することにある。
【0141】
まずRAID高速化ドライバ100は、書きかけのストライプ、即ちTAG書き込み及びAMT更新処理まで完了していないストライプに対して、ディスク180上の論理アドレスログ領域18b2の内容を用いて、TAG書き込み及びAMT更新まで終らせる(ステップ2301)。このステップ2301の処理には、図7のフローチャートに従う障害回復処理の手順が適用される。
【0142】
RAID高速化ドライバ100は、ステップ2301を実行すると、主メモリ13上のAMTキャッシュ172の現在の内容に従い、ステップ2301で復元されたAMTブロック、つまりAMTキャッシュ172上の変更されたAMTブロックを、ディスク180上のAMT領域18aに書き戻す(ステップ2302)。RAID高速化ドライバ100は、この書き戻しが完了したところで、AMTキャッシュ172上の全ての情報をクリア(初期化)する(ステップ2303)。
【0143】
次にRAID高速化ドライバ100は、ディスク180上のAMTチェックポイントステータスブロック18b3に含まれている2つのエントリEa,Ebを参照し、当該両エントリEa,Ebに保存されているAMTチェックポイント情報のうち最新のチェックポイント情報を選択する(ステップ2304)。ここでは、AMTチェックポイントステータスブロック18b3のエントリEa,Ebに保存されているチェックポイント情報中のタイムスタンプTSの値を比較し、値が大きい方のタイムスタンプTS(つまり最新のタイムスタンプTS)を含むチェックポイント情報を選択すればよい。選択されたチェックポイント情報中のストライプID、AMTチェックサムCSmem及びタイムスタンプTSを、それぞれSid0、CSmem0及びTS0とする。図19の例では、AMTチェックポイントステータスブロック18b3のエントリEa,Ebのうち、TSの値が大きい方のエントリEbが選択され、Sid0=34,CSmem0=0xfe60f512,TS0=1413となる。
【0144】
次にRAID高速化ドライバ100は、ディスク180上のAMTバックアップ領域210a,210bのうち、選択されたAMTチェックポイントステータスブロック18b3内のエントリ(ここではエントリEb)に対応するAMTバックアップ領域の内容を、AMT領域18aにコピーして、当該AMT領域18aの内容を、最新のチェックポイント情報を採取した際(最新のチェックポイント時)の状態に復元(リストア)する(ステップ2305)。本実施形態では、AMTチェックポイントステータスブロック18b3内のエントリEbには、図20中のAMTバックアップ領域210b(#2)が対応付けられている。この場合、AMTバックアップ領域210b(#2)のデータがAMT領域18aにコピーされる。
【0145】
次にRAID高速化ドライバ100は、図21に示した、ディスク180上のストライプIDログ領域18b1を参照し、AMTチェックポイントステータスブロック18b3内の選択されたエントリ(エントリEb)に記録されているストライプID及びタイムスタンプTSと同じ値のストライプID及びタイムスタンプTS(即ちID=Sid0=34及びTS=TS0=1413)が記録されている、ストライプIDログ領域18b1内のエントリを探す(ステップ2306)。このエントリは、最新のチェックポイント時のストライプのストライプID及びタイムスタンプTSの対からなるID情報が記録されているエントリであり、図21の例ではストライプIDログ領域18b1内の先頭(左)から3番目のエントリである。このエントリをE0とする。
【0146】
RAID高速化ドライバ100は、エントリE0をカレントエントリEとする(ステップ2307)。以後、RAID高速化ドライバ100は、ストライプIDログ領域18b1内の、エントリE0から異常終了(システムダウン)直前に書き込みが行われたストライプのID情報が記録されているエントリまでの各エントリで示されるストライプに記録されたTAG情報を読み込む処理(ステップS2308)を、カレントエントリEを順次切り替えながら(ステップ2312)、繰り返す。ここで異常終了直前に書き込みが行われたストライプのIDが記録されている、ストライプIDログ領域18b1内のエントリは、当該ログ領域18b1内で最も大きな値のタイムスタンプが記録されているエントリとして検出される。そこでRAID高速化ドライバ100は、エントリE0以降、ストライプIDログ領域18b1内のエントリに記録されているタイムスタンプTSの値が増加する傾向にある限り、つまりカレントエントリ(現在のエントリ)E中のタイムスタンプTSの値より、次のエントリ中のタイムスタンプTSの値の方が大きい限り(ステップ2311)、有効なエントリが続いているものと判断する。この場合、RAID高速化ドライバ100は次のエントリを新たなカレントエントリEとして(ステップ2312)、当該エントリE中にタイムスタンプTSと対をなして記録されているストライプIDで指定されるストライプに記録されたTAG情報を読み込む(ステップ2308)。
【0147】
RAID高速化ドライバ100は、読み込んだTAG情報中のタイムスタンプTSの値とストライプIDログ領域18b1内のエントリEに記録されているタイムスタンプTSとが等しいならば(ステップ2309)、そのTAG情報の内容をAMTキャッシュ172に反映する(ステップ2310)。この際、RAID高速化ドライバ100は、CSmem0にAMTキャッシュ172の更新(AMT更新)の内容を反映する。
【0148】
ここで、ストライプIDログ領域18b1内のエントリEに記録されているTSと、当該エントリE(に記録されているストライプID)で指定されるストライプ中のTAG情報に含まれているTSとが異なる場合がある。このことは、該当するストライプがAMTチェックポイント時以降、複数回書き込みの対象となったことを示す。そのようなストライプに関しては、AMTにTAG情報を反映する処理(ステップ2310)は、最新のTAG情報について1度のみ行えばよい。つまり、上記のように、ストライプIDログ領域18b1内のエントリEを参照し、当該エントリE(に記録されているストライプID)で指定されるストライプに記録されている実際のTAG情報中のTSが当該エントリEに記録されているTSと一致したときのみAMTを更新するようにすればよい。
【0149】
やがて、最新のストライプ、つまりストライプIDログ領域18b1内で最も大きな値のTSと対をなして記録されているストライプIDで指定されるストライプまでTAG情報のAMTキャッシュ172への反映を終えたものとする(ステップ2311)。この場合、RAID高速化ドライバ100は、AMTキャッシュ172上の変更されている(ダーティな)AMTブロック(AMTページ)を、全てディスク180上のAMT領域18aに書き戻す(ステップ2313)。図19の例では、ストライプIDログ領域18b1内の先頭(左)から3番目のエントリ(ID=34のエントリ)乃至5番目のエントリ(ID=51のエントリ)でそれぞれ指定されるストライプ(ID=34,40,51の各ストライプ)中のTAG情報が順次読み出され、そのTAG情報でAMTキャッシュ172が更新される。このAMTキャッシュ172の更新の結果、当該AMTキャッシュ172中の更新されたAMTブロックからディスク180上のAMT領域18aを修復することにより、障害発生時のAMTイメージが復元できる。
【0150】
このように本実施形態においては、AMTチェックポイントを採取することにより、AMTの高速な回復処理を実現できる。なお、本実施形態では、ライトしたストライプの総数Iが所定値Ic(=10,000)になる都度、AMTチェックポイントを採取することから、ストライプIDログ領域18b1のエントリ数は少なくともIc個必要となる。もし、Icを小さな値に設定するならば、ストライプIDログ領域18b1のエントリ数を少なくできる。しかし、AMTチェックポイント処理の間は、通常のライト処理を止める必要があることから、Icを小さな値に設定してAMTチェックポイント処理を頻繁に行うと、性能に影響する。そこで、例えばOSファイルシステム50からのライトリクエストがない状態が一定期間を超えた時点でAMTチェックポイント処理が行われる構成を適用してもよい。この構成では、AMTチェックポイント処理が不定期に行われることから、ストライプIDログ領域18b1のエントリ数を十分に確保し、前回のAMTチェックポイント時のストライプIDの情報が当該ログ領域18b1に残るようにする必要がある。
【0151】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【0152】
【発明の効果】
以上詳述したように本発明によれば、システムブート時に、ディスク上のアドレス変換テーブル領域内のアドレス変換テーブルのチェックサムを主メモリ上のチェックサム領域に書き込んでおき、それ以後、ディスク上のデータストライプへのデータ書き込みに伴うアドレス変換テーブルキャッシュの更新時に、当該チェックサム領域内のチェックサム値を更新するようにしたので、アドレス変換テーブル領域内のアドレス変換テーブルのチェックサムを算出してチェックサム領域のチェックサム値と比較するだけで、アドレス変換テーブルキャッシュの更新内容がアドレス変換テーブル領域に正しく反映されているかを、つまりアドレス変換テーブルとアドレス変換テーブルキャッシュとの情報の整合性を、簡単に確認できる。
【図面の簡単な説明】
【図1】 本発明の一実施形態に係るディスク制御システムを適用した計算機システムの構成を示すブロック図。
【図2】 図1中のRAID高速化ドライバ100によるディスクアレイの書き込み制御の原理を説明するためのブロック図。
【図3】 RAID高速化ドライバ100とディスク180との関係と、RAID高速化ドライバ100による書き込み制御とを説明するための図。
【図4】 同実施形態におけるライト処理のメインルーチンの処理手順を表すフローチャート。
【図5】 図4中のステップ407,408で発行されたI/O要求の完了処理(I/O完了処理#1,#2)の動作を説明するためのフローチャート。
【図6】 図4中のステップ410で発行されたI/O要求の完了処理(I/O完了処理#3)の動作を説明するためのフローチャート。
【図7】 実施形態における障害回復処理の手順を説明するためのフローチャート。
【図8】 同実施形態における論理アドレスログLA0〜LA3の構成例を示す図。
【図9】 図8中のステップ713の実行時における、データストライプのTAG情報の書き込み状態を示す図。
【図10】 図1中のAMT領域18aが複数のAMTブロックに分割して管理されることを示す図。
【図11】 AMT領域18a内の任意のブロックBiのチェックサムCSiを求めるのに必要なブロック内オフセットOfjと当該オフセット位置の4バイトの値Ajを説明するための図。
【図12】 ブロックBiのチェックサムCSi及びAMT全体のチェックサムCSの求め方を説明するための図。
【図13】 AMTキャッシュ172中のエントリEkが変更される際の動作手順を説明するための図。
【図14】 同実施形態におけるシャットダウン時の処理を説明するためのフローチャート。
【図15】 同実施形態におけるブート時の処理を説明するためのフローチャート。
【図16】 図15中のステップ1506の処理(AMT再構築処理)の詳細を説明するためのフローチャート。
【図17】 同実施形態におけるAMT復元を可能とするためのデータ書き込み時の動作及びシャットダウン時の動作並びにチェックポイント処理を説明するためのフローチャートの一部を示す図。
【図18】 同実施形態におけるAMT復元を可能とするためのデータ書き込み時の動作及びシャットダウン時の動作並びにチェックポイント処理を説明するためのフローチャートの残りを示す図。
【図19】 ディスク180に確保されたAMTチェックポイントステータスブロック18b3の一例を示す図。
【図20】 ディスク180のAMT領域18aに、2つのAMTバックアップ領域210a(#1),210b(#2)が確保されている例を示す図。
【図21】 ストライプIDとタイムスタンプTSとの対が時系列に記録されたストライプIDログ領域18b1の一例を示す
【図22】 図17中のステップ1715の処理(AMTチェックポイント処理)の詳細を説明するためのフローチャート。
【図23】 同実施形態におけるシステムリブート時の回復処理(AMT回復処理)の動作を説明するためのフローチャート。
【符号の説明】
11-1〜11-N…CPU、13…主メモリ、16…RAIDコントローラ、17…ドライバ作業領域、18…ディスクアレイ、18a…AMT領域、18b…管理データ領域、18b1…ストライプIDログ領域、18b2…論理アドレスログ領域、18b3…AMTチェックポイントステータスブロック、18c…データ領域、18d…パーティションステータスブロック、150…OSファイルシステム、100…RAID高速化ドライバ、171…ライトバッファ、172…AMTキャッシュ、173…ストライプ管理テーブル、174…チェックサム領域、210a,210b…AMTバックアップ領域。
Claims (11)
- 上位ファイルシステムからのライトリクエストを単位に、または複数のライトリクエストをまとめて、複数のディスク装置により構成される論理的に単一のディスク上に確保されたデータ領域から選択された書き込み対象データストライプの空き領域に対応するデータを書き込むと共に、当該空き領域に書かれたデータブロック毎の論理アドレスを含む論理アドレスログ情報を前記ディスク上に確保された論理アドレスログ領域に当該データストライプの識別情報と対応付けて書き込むディスク制御システムにおいて、
主メモリの一部に設けられたアドレス変換テーブルキャッシュであって、前記ディスク上に確保されたアドレス変換テーブル領域に記録されている、前記データ領域に書かれたデータブロック毎に論理アドレスと物理アドレスとの対応関係を表すアドレス変換情報を保持するアドレス変換テーブルの一部のコピーが保持されるアドレス変換テーブルキャッシュと、
前記データストライプの全領域へのデータの書き込みが終了した際に、前記論理アドレスログ領域に書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプに割り当てられたタグ領域に書き込むタグ書き込み手段と、
前記データストライプのタグ領域にタグ情報が書き込まれた際に、当該タグ情報をもとに前記アドレス変換テーブルキャッシュを更新する第1の更新手段と、前記アドレス変換テーブルキャッシュの更新とは非同期に、当該キャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映する第2の更新手段と、
システムブート時に、前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを前記主メモリ上に設けられたチェックサム領域に書き込むチェックサム書き込み手段と、
前記アドレス変換テーブルキャッシュが更新される際に、前記チェックサム領域のチェックサム値を更新する第3の更新手段と、
前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを算出し、前記チェックサム領域のチェックサム値と比較することで、前記アドレス変換テーブルキャッシュの更新内容が前記アドレス変換テーブル領域内の前記アドレス変換テーブルに正しく反映されているかを判定する手段
とを具備することを特徴とするディスク制御システム。 - 前記チェックサム書き込み手段は、前記アドレス変換テーブル領域の初期化時にも、前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを前記チェックサム領域に書き込むことを特徴とする請求項1記載のディスク制御システム。
- 前記アドレス変換テーブル領域内の前記アドレス変換テーブルは、前記データブロック毎に前記アドレス変換情報を保持するエントリを有し、
前記アドレス変換テーブル領域は第1のサイズのブロックを単位に管理され、当該アドレス変換テーブル領域内の前記アドレス変換テーブルに対応する前記第1のサイズの各ブロックは第2のサイズを単位に区切られ、
前記第1のサイズの各ブロックが前記第2のサイズを単位に区切られた各領域は前記アドレス変換テーブルのエントリをなし、
前記第3の更新手段は、前記アドレス変換テーブルキャッシュのエントリの情報が更新される際に、前記チェックサム領域のチェックサム値を「現在のチェックサム値−アドレス変換テーブルキャッシュの更新対象エントリの更新前の値+当該更新対象エントリに新たに書き込まれる値」に更新する
ことを特徴とする請求項1記載のディスク制御システム。 - 前記アドレス変換テーブル領域内の前記アドレス変換テーブルは、前記データブロック毎に前記アドレス変換情報を保持するエントリを有し、
前記アドレス変換テーブル領域は第1のサイズのブロックを単位に管理され、当該アドレス変換テーブル領域内の前記アドレス変換テーブルに対応する前記第1のサイズの各ブロックは第2のサイズを単位に区切られ、
前記第1のサイズの各ブロックが前記第2のサイズを単位に区切られた各領域は前記アドレス変換テーブルのエントリをなし、
前記チェックサム書き込み手段は、前記アドレス変換テーブル領域内の前記アドレス変換テーブルの前記エントリ毎に「アドレス変換テーブルのエントリの値*(当該エントリが属する前記第1のサイズのブロック内のオフセット+n)(nは0以外の所定値)」を算出して、その値の総和を求めて前記アドレス変換テーブルのチェックサムとし、
前記第3の更新手段は、前記アドレス変換テーブルキャッシュのエントリの情報が更新される際に、前記チェックサム領域のチェックサム値を「現在のチェックサム値+(アドレス変換テーブルキャッシュの更新対象エントリに新たに書き込まれる値−当該更新対象エントリの更新前の値)*(当該更新対象エントリが属する前記第1のサイズのブロック内のオフセット+n)」に更新する
ことを特徴とする請求項1記載のディスク制御システム。 - 前記ディスク上の各データストライプのタグ領域にそれぞれ書き込まれているタグ情報をもとに前記アドレス変換テーブル領域の前記アドレス変換テーブルを再構築するアドレス変換テーブル再構築手段を更に具備し、
前記第2の更新手段は、システムのシャットダウン時に、前記アドレス変換テーブルキャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに全て反映し、
前記判定手段は、前記シャットダウン時に前記第2の更新手段により前記アドレス変換テーブルキャッシュの更新内容が前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映された際に、前記アドレス変換テーブルキャッシュの更新内容が正しく反映されているかを判定し、正しく反映されているならば、前記アドレス変換テーブルが有効であることを示す第1のステータス情報と前記アドレス変換テーブルのチェックサムの値とを、正しく反映されていないならば、当該アドレス変換テーブルが無効であることを示す第2のステータス情報を、前記ディスク上に確保されたパーティションステータスブロックに記録し、
前記チェックサム書き込み手段は、システムブート時に前記パーティションステータスブロックを参照し、前記第1のステータス情報が設定されているならば、当該ステータスブロックからチェックサム値を読み出して前記チェックサム領域に書き込み、前記第2のステータス情報が設定されているならば、前記アドレス変換テーブル再構築手段により前記アドレス変換テーブル領域内の前記アドレス変換テーブルを再構築させた後、その再構築後のアドレス変換テーブルのチェックサムを算出して前記チェックサム領域に書き込む
ことを特徴とする請求項1記載のディスク制御システム。 - 前記タグ書き込み手段は、前記データストライプのタグ領域にタグ情報を書き込む際に、その際のタイムスタンプも当該タグ領域に書き込み、
前記アドレス変換テーブル再構築手段は、前記ディスク上の各データストライプのタグ領域に書き込まれているタグ情報を対応するタイムスタンプに従って時系列順に選択し、当該タグ情報をもとにデータブロック単位でアドレス変換情報を生成して前記ディスク上に確保されたアドレス変換テーブル領域に登録する
ことを特徴とする請求項5記載のディスク制御システム。 - 前記ライトリクエストに従うデータ書き込みの対象となったデータストライプの識別情報を、前記ディスク上に確保されたストライプIDログ領域に時系列順に記録する手段と、
予め定められたタイミングが到来する毎に、前記第1の更新手段による新たなデータストライプに関する前記アドレス変換テーブルキャッシュの更新を停止させる手段と、
前記第1の更新手段による前記アドレス変換テーブルキャッシュの更新が停止された場合、前記アドレス変換テーブル領域の内容を前記ディスク上に確保されたアドレス変換テーブルバックアップ領域にコピーするバックアップ手段と、
前記第1の更新手段による前記アドレス変換テーブルキャッシュの更新が停止された場合、前記アドレス変換テーブルに関するチェックポイント情報であって、前記アドレス変換テーブルキャッシュの更新が停止される前に最後に当該キャッシュの更新が完了したデータストライプの識別情報と、当該キャッシュの更新に際して前記第3の更新手段により更新された前記チェックサム領域のチェックサム値と、当該データストライプのタグ領域に書き込まれているタイムスタンプとを含むチェックポイント情報を採取して、前記ディスク上に確保されたチェックポイントステータスブロックに書き込むチェックポイント採取手段と、
前記チェックポイント採取手段によるチェックポイント情報採取が完了した場合に、前記第1の更新手段による前記アドレス変換テーブルキャッシュの更新を再開させる手段と
を更に具備し、
前記第2の更新手段は、前記第1の更新手段による前記アドレス変換テーブルキャッシュの更新が停止された場合、前記バックアップ手段によるコピー動作に先行して、当該キャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映する
ことを特徴とする請求項6記載のディスク制御システム。 - 前記予め定められたタイミングは、前記第1の更新手段による前記アドレス変換テーブルキャッシュのデータストライプ単位での更新が予め定められた回数繰り返された時点であることを特徴とする請求項7記載のディスク制御システム。
- 前記予め定められたタイミングは、前記上位ファイルシステムからのライトリクエストがない状態が一定期間を超えた時点であることを特徴とする請求項7記載のディスク制御システム。
- システムの異常終了に伴うシステムリブート時に、その時点において最新のチェックポイント情報をチェックポイントステータスブロックから選択する手段と、
前記選択手段によって選択されたチェックポイント情報が採取された際に前記バックアップ領域にコピーされた内容を前記アドレス変換テーブル領域に復元する手段と、
前記選択手段によって選択されたチェックポイント情報をもとに、当該チェックポイント情報が採取された時点から前記システムの異常終了時点までに前記ストライプIDログ領域に記録されたデータストライプ識別情報を特定する手段と
を更に具備し、
前記タグ書き込み手段は、前記システムリブート時に、タグ領域へのタグ情報の書き込みが未完了の前記論理アドレスログ領域にデータストライプの識別情報と対応付けて書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプのタグ領域に書き込む動作を、前記復元手段の動作に先行して実行し、
前記第1の更新手段は、前記システムリブート時に前記タグ書き込み手段によってタグ領域へのタグ情報書き込みが行われた場合には、当該タグ情報をもとに前記アドレス変換テーブルキャッシュを更新し、前記特定手段によってデータストライプ識別情報が特定された場合には、当該特定されたデータストライプ識別情報により示されるデータストライプのタグ領域に書き込まれているタグ情報をもとに前記アドレス変換テーブルキャッシュを更新し、
前記第2の更新手段は、前記システムリブート時において前記第1の更新手段によって更新された前記アドレス変換テーブルキャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映する
ことを特徴とする請求項7記載のディスク制御システム。 - 上位ファイルシステムからのライトリクエストを単位に、または複数のライトリクエストをまとめて、複数のディスク装置により構成される論理的に単一のディスク上に確保されたデータ領域から選択された書き込み対象データストライプの空き領域に対応するデータを書き込むためのディスク制御プログラムであって、
コンピュータに、
前記データストライプの空き領域に書かれたデータブロック毎の論理アドレスを含む論理アドレスログ情報を、前記ディスク上に確保された論理アドレスログ領域に当該データストライプの識別情報と対応付けて書き込むステップと、
前記データストライプの全領域へのデータの書き込みが終了した際に、前記論理アドレスログ領域に書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプに割り当てられたタグ領域に書き込むステップと、
主メモリの一部に設けられたアドレス変換テーブルキャッシュであって、前記ディスク上に確保されたアドレス変換テーブル領域に記録されている、前記データ領域に書かれたデータブロック毎に論理アドレスと物理アドレスとの対応関係を表すアドレス変換情報を保持するアドレス変換テーブルの一部のコピーが保持されるアドレス変換テーブルキャッシュを、前記データストライプのタグ領域にタグ情報が書き込まれた際に、当該タグ情報をもとに更新するステップと、
前記アドレス変換テーブルキャッシュの更新とは非同期に、当該キャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映するステップと、
システムブート時に、前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを前記主メモリ上に設けられたチェックサム領域に書き込むステップと、
前記アドレス変換テーブルキャッシュが更新される際に、前記チェックサム領域のチェックサム値を更新するステップと、
前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを算出し、前記チェックサム領域のチェックサム値と比較することで、前記アドレス変換テーブルキャッシュの更新内容が前記アドレス変換テーブル領域内の前記アドレス変換テーブルに正しく反映されているかを判定するステップと
を実行させるためのディスク制御プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003182836A JP3798767B2 (ja) | 2003-06-26 | 2003-06-26 | ディスク制御システム及びディスク制御プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003182836A JP3798767B2 (ja) | 2003-06-26 | 2003-06-26 | ディスク制御システム及びディスク制御プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005018443A JP2005018443A (ja) | 2005-01-20 |
JP3798767B2 true JP3798767B2 (ja) | 2006-07-19 |
Family
ID=34183114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003182836A Expired - Fee Related JP3798767B2 (ja) | 2003-06-26 | 2003-06-26 | ディスク制御システム及びディスク制御プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3798767B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100779077B1 (ko) * | 2005-12-08 | 2007-11-27 | 한국전자통신연구원 | 균형적인 객체 분산 저장 방법 및 이를 위한 시스템 |
KR100827677B1 (ko) | 2006-06-20 | 2008-05-07 | 한국과학기술원 | 행렬 스트라이프 캐쉬를 이용한 raid 시스템의 입출력성능 향상 방법 |
US8224780B2 (en) * | 2010-06-15 | 2012-07-17 | Microsoft Corporation | Checkpoints for a file system |
US10353606B2 (en) * | 2017-10-12 | 2019-07-16 | International Business Machines Corporation | Partial data replay in a distributed memory buffer system |
-
2003
- 2003-06-26 JP JP2003182836A patent/JP3798767B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2005018443A (ja) | 2005-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7216199B2 (en) | Disk control system and method | |
JP3526452B2 (ja) | ディスクアレイ装置及びデータバックアップ方法 | |
US6738863B2 (en) | Method for rebuilding meta-data in a data storage system and a data storage system | |
US5701516A (en) | High-performance non-volatile RAM protected write cache accelerator system employing DMA and data transferring scheme | |
Saxena et al. | Flashtier: a lightweight, consistent and durable storage cache | |
US5572660A (en) | System and method for selective write-back caching within a disk array subsystem | |
US7882386B1 (en) | System and method for recovering a logical volume during failover or reboot of a file server in a data storage environment | |
US8930619B2 (en) | Method and apparatus for efficiently destaging sequential I/O streams | |
JP4922496B2 (ja) | I/o要求に優先順位を与える方法 | |
US7631009B1 (en) | Redundancy check of transaction records in a file system log of a file server | |
JP3682256B2 (ja) | ディスクアレイ装置及び同装置におけるパリティ処理方法 | |
US20100191922A1 (en) | Data storage performance enhancement through a write activity level metric recorded in high performance block storage metadata | |
US7219169B2 (en) | Composite DMA disk controller for efficient hardware-assisted data transfer operations | |
US20040093463A1 (en) | RAID-5 disk having cache memory implemented using non-volatile RAM | |
US20080040540A1 (en) | On-disk caching for raid systems | |
US20130339569A1 (en) | Storage System and Method for Operating Thereof | |
US7734842B2 (en) | Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages | |
US7222135B2 (en) | Method, system, and program for managing data migration | |
US20130326272A1 (en) | Storage system and method of operating thereof | |
US6912687B1 (en) | Disk array storage subsystem with parity assist circuit that uses scatter-gather list | |
JP3798767B2 (ja) | ディスク制御システム及びディスク制御プログラム | |
JP2001188658A (ja) | ディスク制御システムおよびデータ再配置方法 | |
JP2021022213A (ja) | ストレージシステム、ストレージ制御装置およびプログラム | |
US12105972B2 (en) | Storage system and storage control method of data deduplication between virtual devices | |
Eskesen et al. | Software exploitation of a fault-tolerant computer with a large memory |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051125 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051129 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060127 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060214 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060327 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060418 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060420 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090428 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100428 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100428 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110428 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130428 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140428 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |