説明

データ記憶装置及びデータ記憶装置におけるデータ管理方法

【課題】磁気ディスクとフラッシュ・メモリを有するHDDにおいて、ログ・データの保存処理を効率化する。
【解決手段】本発明の一形態において、HDD1は、ユーザ・データのフラッシュ・メモリ25のアドレスと磁気ディスク11のLBAとを対応づけるセグメント・テーブルを作成する。HDD1は、セグメント・テーブル243をDRAM24上で更新すると共に、所定タイミングでフラッシュ・メモリ25に保存する。HDD1は、セグメント・テーブル243の更新を示すジャーナルを生成し、それをフラッシュ・メモリ25に保存する。フラッシュ・メモリ25上のセグメント・テーブル253とジャーナルとから、最新のセグメント・テーブルを回復することができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明はデータ記憶装置及びデータ記憶装置におけるデータ管理方法に関し、特に、ユーザ・データを保存するためのディスクと不揮発性半導体メモリとを有するデータ記憶装置における、テーブルの更新を示すログ・データの保存に関する。
【背景技術】
【0002】
データ記憶装置として、光ディスク、光磁気ディスク、あるいはフレキシブル磁気ディスクなどの様々な態様のメディアを使用する装置が知られているが、その中で、ハードディスク・ドライブ(HDD)は、コンピュータの記憶装置として広く普及し、現在のコンピュータ・システムにおいて欠かすことができない記憶装置の一つとなっている。さらに、コンピュータにとどまらず、動画像記録再生装置、カーナビゲーション・システム、あるいは携帯電話など、HDDの用途はその優れた特性により益々拡大している。
【0003】
HDDは、磁気ディスクへのアクセス(リードもしくはライト)のために、磁気ディスクを回転し、ヘッド・スライダを目的のデータ・セクタに移動する。このため、HDDの消費電力は半導体メモリに比較して大きく、また、そのアクセス・スピードも半導体メモリよりも遅い。特に、スピンドル・モータのスピン・アップ時間は他の動作に比較して多くの時間を必要とする。このため、HDDの起動時や、省電力低減のためのパワー・セーブ・モードから復帰するときに多くの処理時間を必要とする。
【0004】
このため、HDDに不揮発性半導体メモリの一つであるフラッシュ・メモリを実装することが提案されている(例えば、特許文献1を参照)。フラッシュ・メモリは半導体メモリであるため、磁気ディスクよりもアクセス・スピードが速く、消費電力が小さい。また、フラッシュ・メモリは不揮発性メモリであるため、電源オフ状態であってもデータを保存しておくことができる。
【0005】
HDDに実装するフラッシュ・メモリの容量は、コストなどの点から制限される。従って、HDDは、特定のユーザ・データのみをフラッシュ・メモリに保存し、その他ユーザ・データを磁気ディスクに保存する。例えば、ホストの起動に必要なデータや、ホストが頻繁にアクセスするデータをフラッシュ・メモリに保存しておくことによって、ホストの起動時間の短縮、HDDのパフォーマンスの向上、あるいはスピンドル・モータの回転数を小さくするパワー・セーブ・モードによる消費電力の低減を図ることができる。
【0006】
ホストは、HDDに対して、磁気ディスクのアドレスであるLBA(Logical Block Address)を指定してデータの書き込みあるいは読み出しを指示する。従って、HDDは、フラッシュ・メモリに保存しているユーザ・データのLBAと、フラッシュ・メモリ内のアドレスとを対応付けることが必要となる。具体的には、HDDは、上記二つのアドレスを対応づけるテーブルを作成し、そのテーブルを参照することでフラッシュ・メモリへのアクセスを行う。以下において、このテーブルをセグメント・テーブルと呼ぶ。
【特許文献1】特開2006−114206号公報
【特許文献2】特開2005−134125号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
セグメント・テーブルは電源がオフされ、再度オンされた後も使用するものであるため、HDDは、不揮発性メモリである磁気ディスクもしくはフラッシュ・メモリにセグメント・テーブルを保存する。典型的には、セグメント・テーブルはフラッシュ・メモリに保存される。しかし、フラッシュ・メモリはデータの書き換えのために消去と書き込みのプロセスが必要であり、頻繁にセグメント・テーブルを更新することは、パフォーマンスの低下を招く。磁気ディスクにセグメント・テーブルを保存する場合にも、磁気ディスクへのアクセスのための処理時間が必要であり、頻繁にセグメント・テーブルを更新することは、パフォーマンスの低下を招く。
【0008】
そこで、セグメント・テーブルをRAMにロードし、RAM上のセグメント・テーブルを更新する。さらに、セグメント・テーブルの更新内容を示すログ・データを生成し、そのログ・データを磁気ディスクあるいはフラッシュ・メモリに保存することが考えられる。なお、記録メディアへのデータ書き込みにおいてログ・データを使用することは、例えば特許文献2に開示されている。ログ・データを保存しておくことによって、電源遮断によりRAM上の最新のセグメント・テーブルが消えてしまった場合でも、フラッシュ・メモリ上のセグメント・テーブルとログ・データとから、最新のセグメント・テーブルを復元することができる。
【0009】
パフォーマンスの観点からは、セグメント・テーブルの保存回数を少なくすることが好ましい。しかし、そのことは、保存するログ・データのエントリ数が大きくなることを意味する。ログ・データによるデータ回復のための典型的な手法は、フラッシュ・メモリへの書き出しを伴うライト・コマンド毎にログ・データを保存する。このため、フラッシュ・メモリへの書き出し回数の増加に伴い、保存されるログ・データのエントリ数も増加する。一方、ログ・データを保存するための領域は限られている。従って、セグメント・テーブルの更新を示すログ・データのエントリ数を少なくする手法が要求される。
【0010】
あるいは、ログ・データを保存する処理時間を考慮することも重要である。特に、ユーザ・データの記憶に適切なNAND型フラッシュ・メモリは、ページ単位でのデータ書き込みを行う。このため、一つのライト・コマンドに対応するログ・データをNAND型フラッシュ・メモリに保存する処理は、1データ・セクタをする処理と同等の処理時間を必要とする。従って、セグメント・テーブルの更新を示すログ・データの保存処理の時間を短縮する手法が要求される。
【課題を解決するための手段】
【0011】
本発明の一態様に係るデータ記憶装置は、ユーザ・データを記憶するディスク・メモリ領域と、ユーザ・データを記憶する不揮発性半導体メモリ領域と、前記不揮発性半導体メモリ領域に記憶されているユーザ・データの前記ディスク・メモリ領域のアドレスが登録されているセグメント・テーブル、を記憶する揮発性メモリ領域と、前記セグメント・テーブルが保存される第1不揮発性メモリ領域と、前記揮発性メモリ領域のセグメント・テーブルの更新履歴を表すログ・データが保存される第2不揮発性メモリ領域と、コントローラとを有する。前記コントローラは、前記ディスク・メモリ領域の連続するアドレス領域への複数ライト・コマンドに対応するログ・データを、前記複数ライト・コマンドのそれぞれに対応するログ・データから一部を省略して生成し、生成した前記複数ライト・コマンドに対応するログ・データを前記第2不揮発性メモリ領域に保存する。これにより、ログ・データの保存を効率的に行うことができる。
【0012】
好ましくは、第1不揮発性メモリ領域と第2不揮発性メモリ領域と、不揮発性半導体メモリ領域とが、同一の不揮発性半導体メモリ内にある。これにより、部品点数を低減する。
前記複数ライト・コマンドが3以上のライト・コマンドである場合、前記コントローラは、最初のライト・コマンドと最後のライト・コマンドとの間にある全てのライト・コマンドのログ・データを省略する。これにより、ログ・データの保存をより効率的に行うことができる。
【0013】
好ましい例において、一つのライト・コマンドに対応する前記ログ・データは、前記揮発性メモリ領域のセグメント・テーブルの更新前のプロローグと更新後のエピローグとを含み、前記コントローラは、最初のライト・コマンドのプロローグと前記第2不揮発性メモリ領域に保存し、最後のライト・コマンドのエピローグを前記第2不揮発性メモリ領域に保存し、前記最初のライト・コマンドのプロローグと最後のライト・コマンドのエピローグとの間のログ・データを省略する。これにより、ログ・データの保存をより効率的に行うことができる。さらに、一つのライト・コマンドに対応するプロローグとエピローグとは、それぞれ、前記一つのライト・コマンドが指定する開始アドレスとアドレス長とを含み、前記最後のライト・コマンドのエピローグは、前記最初のライト・コマンドのプロローグが含む開始アドレスを含む。これにより、エピローグのみにより正確な情報を示すことができる。
【0014】
好ましい例において、前記コントローラは、ライト・コマンドをキャッシュされた順序に従って処理し、現在のライト・コマンドの指定アドレスが、その前のライト・コマンドの指定アドレスと連続している場合に、前記複数ライト・コマンドに前記現在のライト・コマンドを追加する。これにより、随時複数ライト・コマンドのグループを構成することができる。好ましくは、前記コントローラは、前記複数ライト・コマンドを構成するライト・コマンドの数が閾値に達している場合、前記複数ライト・コマンドに対応する現在のログ・データを前記第2不揮発性メモリ領域に保存する。あるいは、前記コントローラは、ライト・コマンドの指定アドレスの長さが閾値に達している場合、そのライト・コマンドに対応するログ・データを個別に前記第2不揮発性メモリ領域に保存する。もしくは、前記コントローラは、前記複数ライト・コマンドを構成するライト・コマンドが指定するアドレス領域が閾値に達している場合、前記複数ライト・コマンドに対応する現在のログ・データを前記第2不揮発性メモリ領域に保存する。これらにより、ログ・データが保存されるまでの時間が長くなりすぎることを防ぐ。
【0015】
好ましくは、電源遮断により前記複数ライト・コマンドに対応するログ・データの保存処理が中断した場合、前記電源遮断後に起動された前記コントローラは、前記不揮発性半導体メモリ領域において、前記複数ライト・コマンドの最初のライト・コマンドに対応するアドレスから先の不使用領域を消去する。これにより、データの書き込みのために消去を必要とする不揮発性メモリに適切に対応することができる。
【0016】
好ましい例において前記コントローラは、さらに、指定アドレスが不連続の複数ライト・コマンドの最初のライト・コマンド以外のライト・コマンドに対応するログ・データを、同時に前記第2不揮発性メモリ領域に保存する。これにより、ログ・データの保存をより効率的に行うことができる。さらに好ましい例において、一つのライト・コマンドに対応する前記ログ・データは、前記揮発性メモリ領域のセグメント・テーブルの更新前のプロローグと更新後のエピローグとを含み、前記コントローラは、最初のライト・コマンド以外のライト・コマンドに対応するプロローグを省略する。これにより、ログ・データの保存をより効率的に行うことができる。前記指定アドレスが不連続の複数ライト・コマンドに対応するログ・データは、最初のライト・コマンドのプロローグ及びエピローグと、それ以外のライト・コマンドのエピローグとから構成され、前記コントローラは、前記最初のライト・コマンドのプロローグを保存した後、その他のログ・データを同時に保存することが好ましい。これにより、ログ・データを全て保存する前に電源遮断が起きた場合に、適切に対応することができる。
【0017】
本発明の他の態様は、ユーザ・データを記憶するディスク・メモリ領域と、ユーザ・データを記憶する不揮発性半導体メモリ領域と、を有するデータ記憶装置における、データ管理方法である。この方法は、前記不揮発性半導体メモリ領域に記憶されているユーザ・データの前記ディスク・メモリ領域のアドレスが登録されているセグメント・テーブルを、揮発性メモリ領域に格納する。前記セグメント・テーブルを第1不揮発性メモリ領域に保存する。前記揮発性メモリ領域のセグメント・テーブルの更新履歴を表すログ・データを、第2不揮発性メモリ領域に保存する。前記ディスク・メモリ領域の連続するアドレス領域への複数ライト・コマンドに対応するログ・データを、前記複数ライト・コマンドのそれぞれに対応するログ・データから一部を省略して生成する。生成した前記複数ライト・コマンドに対応するログ・データを前記第2不揮発性メモリ領域に保存する。これにより、ログ・データの保存を効率的に行うことができる。
【発明の効果】
【0018】
本発明によれば、セグメント・テーブルの更新を示すログ・データを効率的に保存することができる。
【発明を実施するための最良の形態】
【0019】
以下に、本発明を適用可能な実施の形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。又、各図面において、同一要素には同一の符号が付されており、必要に応じて重複説明は省略されている。以下においては、ディスク・ドライブ装置の一例であるハードディスク・ドライブ(HDD)について説明する。
【0020】
本形態のHDDは、ユーザ・データを記憶するための不揮発性メモリとして、磁気ディスクの他にフラッシュ・メモリを有する。フラッシュ・メモリは、不揮発性半導体メモリである。HDDは、フラッシュ・メモリに保存するユーザ・データを管理するため、フラッシュ・メモリ内が記憶しているユーザ・データの磁気ディスクでのアドレス(LBA)を登録するテーブルを作成する。このテーブルを、以下においてセグメント・テーブルと呼ぶ。
【0021】
本形態のHDDは、セグメント・テーブルをRAM上で更新すると共に、所定のタイミングでフラッシュ・メモリに保存する。本形態のHDDは、さらに、RAM上の更新を示すログ・データを生成し、それをフラッシュ・メモリに保存する。以下において、このログ・データをジャーナルと呼ぶ。HDDは、予期しない電源遮断などが起きたとき、フラッシュ・メモリ上のセグメント・テーブルとジャーナルとから、最新のセグメント・テーブルを回復する。
【0022】
本形態のHDDは、ログ・データであるジャーナルの保存方法に特徴を有している。本形態のHDDは、条件に応じて、一つのライト・コマンドに対応するジャーナルを保存する、あるいは、所定の複数ライト・コマンドからなるグループに対応するジャーナルを保存する。複数ライト・コマンドのグループに対応するジャーナルの保存において、HDDは、グループの各ライト・コマンドそれぞれに対応するジャーナルの一部を省略する。従って、グループに対応するジャーナルの数は、グループの各ライト・コマンドに対応するジャーナルの合計数よりも少ない。これにより、セグメント・テーブルの更新内容を示すジャーナルのエントリ数を低減することができる。また、ジャーナルをテーブルに登録するための処理時間を短縮することができる。
【0023】
本実施形態においては、複数のライト・コマンドによるグループを構成する方法として、2つの好適な例を説明する。一つは、磁気ディスクの連続領域への複数ライト・コマンドでグループを構成する。HDDは、磁気ディスクの連続領域を指定アドレスとする複数のライト・コマンドを一つのグループとし、そのグループに対応したジャーナルをテーブルに保存する。
【0024】
他の一つは、それぞれのライト・コマンドが磁気ディスクの離散した非連続の領域を指定する複数のライト・コマンドにより、一つのグループを構成する。これら異なる二つのグループに対応して保存されるジャーナルは異なる。このように、連続領域へのライト・コマンドのグループと、非連続領域へのライト・コマンドのグループとによって、異なるジャーナルを保存することで、セグメント・テーブル回復のための必要な情報を保存すると共に、より効率的な処理を行うことができる。
【0025】
まず、本形態のHDDの全体構成を、図1のブロック図を参照して説明する。HDD1は、エンクロージャ10の外側に固定された回路基板20を備えている。回路基板20上には、リード・ライト・チャネル(RWチャネル)21、モータ・ドライバ・ユニット22、ハードディスク・コントローラ(HDC)とMPUの集積回路(HDC/MPU)23及び揮発性半導体メモリのDRAM24、不揮発性半導体メモリであるフラッシュ・メモリ25などの各回路を有している。エンクロージャ10内において、スピンドル・モータ(SPM)14は所定の角速度で磁気ディスク11を回転する。磁気ディスク11は、データを記憶するディスクであり、不揮発性のメモリである。
【0026】
各ヘッド・スライダ12は、磁気ディスク11上を浮上するスライダと、スライダに固定され磁気信号と電気信号との間の変換(データの読み書き)を行うヘッド素子部とを備えている。各ヘッド・スライダ12はアクチュエータ16の先端部に固定されている。アクチュエータ16はボイス・コイル・モータ(VCM)15に連結され、回動軸を中心に回動することによって、ヘッド・スライダ12を回転する磁気ディスク11上においてその半径方向に移動する。モータ・ドライバ・ユニット22は、HDC/MPU23からの制御データに従って、SPM14とVCM15とを駆動する。アーム電子回路(AE:Arm Electronics)13は、HDC/MPU23からの制御データに従って複数のヘッド・スライダ12の中から磁気ディスク11にアクセス(リードもしくはライト)するヘッド・スライダ12を選択し、リード/ライト信号の増幅を行う。
【0027】
RWチャネル21は、リード処理において、AE13から取得したリード信号からサーボ・データ及びユーザ・データを抽出し、デコード処理を行う。デコード処理されたデータは、HDC/MPU23に供給される。また、RWチャネル21は、ライト処理において、HDC/MPU23から供給されたライト・データをコード変調し、さらに、コード変調されたデータをライト信号に変換してAE13に供給する。
【0028】
HDC/MPU23において、HDCはロジック回路であり、MPUはDRAM24にロードされたファームウェアに従って動作する。HDD1の起動に伴い、DRAM24には、制御及びデータ処理に必要とされるデータが磁気ディスク11あるいはROM(不図示)からロードされる。HDC/MPU23はコントローラの一例であり、ヘッド・ポジショニング制御、インターフェース制御、ディフェクト管理などのデータ処理に関する必要な処理の他、HDD1の全体制御を実行する。
【0029】
HDC/MPU23は、ホスト51からのユーザ・データの一部をフラッシュ・メモリ25に保存する。つまり、HDC/MPU23は、ホスト51から受信するライト・コマンドの内、フラッシュ・メモリ25への書き出しを指定されているライト・コマンドに応答して、ユーザ・データをフラッシュ・メモリ25に保存する。フラッシュ・メモリ25上のユーザ・データを磁気ディスク11にも保存するか否かは、設計によって決めることができる。フラッシュ・メモリ25に保存するデータは、磁気ディスク11のLBAで特定することができる。HDC/MPU23は、予め設定されているLBAへのライト・コマンドを受信すると、そのユーザ・データをフラッシュ・メモリ25に保存する。HDC/MPU23は、フラッシュ・メモリ25に保存するユーザ・データのLBAを自ら設定することができ、また、ホスト51から指定されたLBAのユーザ・データをフラッシュ・メモリ25に保存する。
【0030】
図2は、フラッシュ・メモリ25にユーザ・データを保存するための処理に関連する論理構成要素を模式的に示すブロック図である。DRAM24上のPIN/UNPINテーブル242は、フラッシュ・メモリ25に保存するデータの磁気アドレス領域を示す。PIN領域及びUNPIN領域は、LBAで示される磁気ディスク・アドレスの一部の領域である。PIN領域は、ホスト51がフラッシュ・メモリ25に保存するアドレス領域として指定する。一方、UNPIN領域は、HDC/MPU23自身がフラッシュ・メモリ25に保存するアドレス領域として選択するものである。
【0031】
HDC/MPU23は、フラッシュ・メモリ25に保存されているPIN/UNPINテーブル254をDRAM24にロードする。HDC/MPU23は、ライト処理においては、DRAM24上のPIN/UNPINテーブル242を参照して処理を行う。また、HDC/MPU23はDRAM24上のPIN/UNPINテーブル242を変更した場合、それをフラッシュ・メモリ25上のPIN/UNPINテーブル254に反映する。
【0032】
ホスト51から転送された所定のユーザ・データU_DATAは、DRAM24内のセクタ・バッファ241に格納された後、フラッシュ・メモリ25に保存される。フラッシュ・メモリ25内に、ユーザ・データ領域251が確保されており、そこにユーザ・データが保存される。上述のように、フラッシュ・メモリ25に保存されるデータは、PINデータとUNPINデータがあり、それぞれ、ユーザ・データ領域251内のPIN領域255とUNPIN領域256とに保存される。
【0033】
HDC/MPU23は、フラッシュ・メモリ25上の保存セグメント・テーブル253をDRAM24にロードする。DRAM24上のセグメント・テーブルである一時的セグメント・テーブル243は、ユーザ・データのリード及びライト処理においてHDC/MPU23に参照される。セグメント・テーブル243、253は、フラッシュ・メモリ25に保存されているユーザ・データのアドレスを特定する。具体的には、セグメント・テーブル243、253は、フラッシュ・メモリ25上のユーザ・データのフラッシュ・メモリ・アドレスと磁気ディスク・アドレスとを対応づける。ホスト51は、磁気ディスク11上のアドレスであるLBAを指定して、データの書き込みを指示する。セグメント・テーブル243、253は、そのLBAとフラッシュ・メモリ25上のアドレスとを対応付けて格納している。
【0034】
図3(a)は、セグメント・テーブル243、253内の一レコードのフォーマットを模式的に示している。フラッシュ・メモリ25のページと、フラッシュ・メモリ25に保存されているユーザ・データの開始LBAと、データ・セクタ数で表されるデータ長LEN、そしてPIN/UNPINの区別を有している。
【0035】
HDC/MPU23は、フラッシュ・メモリ25へのアクセス(ライト)に応じて、一時的セグメント・テーブル243を更新する。HDC/MPU23は、その更新内容をすぐにフラッシュ・メモリ25上の保存セグメント・データ・テーブル253に反映せずに、その更新内容を示すログ・データであるジャーナルを生成する。HDC/MPU23はSRAM231を有しており、そのSRAM231に生成したジャーナルを格納する。生成されたジャーナルは、フラッシュ・メモリ25上の領域252に保存される。保存する前のジャーナルの格納にSRAM231を使用することによって、DRAMよりも処理速度を速めることができる。また、SRAM231からフラッシュ・メモリ25への保存も、DRAMよりも高速に行うことができる。
【0036】
図3(b)は、ジャーナルのフォーマットを模式的に示している。ジャーナルは、そのタイプを示すデータ、開始LBA、データ長LEN、そしてPIN/UNPINのサイズを有している。LBAそしてLENは、セグメント・テーブル243、253のレコード内のデータと同様である。PIN/UNPINのサイズは、ユーザ・データ領域251における、PIN領域255あるいはUNPIN領域256内のサイズを示している。セグメント・テーブルは、使用を開始するページを記憶しており、PIN領域255あるいはUNPIN領域256は、ユーザ・データを、それぞれの使用開始ページから順次格納していくため、PIN/UNPINのサイズを特定することでPIN領域255あるいはUNPIN領域256内のデータ位置を特定することができる。複数のタイプのジャーナルが存在し、本明細書においては、プロローグ・ジャーナルとエピローグ・ジャーナルについて説明する。HDC/MPU23は、プロローグ・ジャーナル232を生成した後に一時的セグメント・テーブル243を更新し、その後エピローグ・ジャーナル233を生成する。これによって、一時的セグメント・テーブル243を更新している間に電源遮断などがあった場合にも、正確にセグメント・テーブルを回復することができる。
【0037】
続いて、図2を参照して、フラッシュ・メモリ25へのユーザ・データの保存及びそれに伴う一時的セグメント・テーブル243の更新及びジャーナルの保存の処理例を説明する。以下の例において、HDC/MPU23は、一つのライト・コマンドに対応するジャーナルを保存する。HDC/MPU23は、ホスト51からライト・コマンドW_COMMANDを受信する[1]。さらに、HDC/MPU23は、ユーザ・データU_DATAを受信し、それをセクタ・バッファ241に格納する[2]。HDC/MPU23は、DRAM24上のPIN/UNPINテーブル242を参照して、ライト・コマンドW_COMMANDが指定するLBAがPINもしくはUNPIN領域内にあるか判定する[3]。ここでは、指定LBAが、上記のいずれかの領域にあるとする。
【0038】
HDC/MPU23は、プロローグ・ジャーナル232を生成し、それをフラッシュ・メモリ25内のジャーナル領域252に保存する[4]。次に、HDC/MPU23は、セクタ・バッファ241内のユーザ・データU_DATAを、フラッシュ・メモリ25内のユーザ・データ領域251に保存する[5]。次に、HDC/MPU23は、一時的セグメント・テーブル243を更新する[6]。続いて、HDC/MPU23は、エピローグ・ジャーナル233を生成し、それをフラッシュ・メモリ25内のジャーナル領域252に保存する[7]。
【0039】
次に、突然の電源遮断が起きた後、ジャーナルを使用してセグメント・テーブルを回復処理の一例を、図4(a)、(b)を参照して説明する。図4(a)において、左から右に向く矢印は、時間の経過を示している。なお、以下の各処理は、HDC/MPU23が実行する。最初の処理は、一時的セグメント・テーブル243に格納されているレコード#1とレコード#2を、保存セグメント・テーブル253に保存する。次の処理は、一時的セグメント・テーブル243にレコード#3を追加し、さらに、それを示すジャーナルをジャーナル領域252保存する。次の処理は、一時的セグメント・テーブル243からレコード#2を削除し、さらに、それを示すジャーナルをジャーナル領域252保存する。この段階において、電源遮断が発生する。
【0040】
その後、電源が回復すると、図4(b)に示す回復処理が開始する。図4(b)において、最初の処理は、保存セグメント・テーブル内のレコード#1とレコード#2とをDRAM24にロードして、一時的セグメント・テーブル243を生成する。次の処理は、レコード#3の追加を示すジャーナルに従って、一時的セグメント・テーブル243にレコード#3を追加する。最後の処理は、レコード#2の削除を示すジャーナルに従って、一時的セグメント・テーブル243からレコード#2を削除する。以上の処理で、一時的セグメント・テーブル243が回復される。必要であれば、このタイミングで、一時的セグメント・テーブル243をセーブする。HDC/MPU23は、一時的セグメント・テーブル243をフラッシュ・メモリ25にセーブして、保存セグメント・テーブル253を更新すると共に、ジャーナル領域252をクリアする。
【0041】
このように、ジャーナルを保存することによって、セグメント・テーブルを毎回保存するよりも処理時間を短縮することができると共に、予期しない電源遮断などが起きた場合でも、セグメント・テーブルを回復することができる。特に、フラッシュ・メモリは、データの書き換えをするためにブロック単位でデータを消去した後、新たなデータを書き込むことを必要とする。つまり、保存セグメント・テーブル253を更新するために、フラッシュ・メモリ25は、それを格納している領域を含むブロックを消去し、さらに、その消去したブロック内に新たな保存セグメント・テーブル253を書き込む。
【0042】
また、保存セグメント・テーブルは、一般に、高速サーチのために、2分木データ構造、あるいは線形リストやハッシュテーブルを有しており、一部のデータを追加する場合にも全体を書き換えることが要求される。一方、フラッシュ・メモリ25は、新たなジャーナルを、随時、ジャーナル領域252に書き込む。この書き込みのためには、消去処理を必要としない。このため、処理時間が大きく短縮される。
【0043】
しかし、セグメント・テーブル更新のための処理時間を短縮するためには、更新されたセグメント・テーブルをフラッシュ・メモリ25に保存することなくジャーナルを蓄積していくことが好ましい。しかし、ジャーナルを記憶するフラッシュ・メモリ25のジャーナル領域252は限られている。また、ジャーナル保存のために消去処理が必要ではないとしても、ジャーナルを書き込むための処理時間は必要となる。そこで、本形態のHDC/MPU23は、複数のライト・コマンドを一つのグループとみなし、そのグループに対応するジャーナルをフラッシュ・メモリ25のジャーナル領域252に保存する。これにより、ジャーナル保存処理を効率化し、保存するジャーナルのエントリ数及び保存処理時間を小さくする。
【0044】
まず、図5のフローチャート及び図6のブロック図を参照して、三つのライト・コマンドに対して、ライト・コマンド毎にジャーナルを保存する例を説明する。HDC/MPU23は、ライト・コマンド[1]を受信すると(S11)、そのプロローグ[1]をジャーナル領域252に保存する(S12)。ライト・コマンド[1]の指定アドレスは、LBA100h〜10Fhである。プロローグ[1]は、開始LBA100hと、データ長10hを示す。次に、HDC/MPU23は、ライト・コマンド共に受信したユーザ・データをフラッシュ・メモリ25に保存し(S13)、さらにDRAM24上の一時的セグメント・テーブル243を更新する(S14)。最後に、HDC/MPU23は、ライト・コマンド[1]に対応するエピローグ[1]をジャーナル領域252に保存する(S15)。エピローグ[1]は、開始LBA100hと、データ長10hを示す。
【0045】
HDC/MPU23は、ライト・コマンド[2]及びライト・コマンド[3]についても、同様の処理を繰り返す。従って、図6に示すように、ジャーナル領域252に保存されているジャーナルは、プロローグ[1]〜プロローグ[3]、エピローグ[1]〜エピローグ[3]の6エントリである。また、三つのライト・コマンド[1]〜ライト・コマンド[3]に対応するジャーナルを保存するために、HDC/MPU23は6回の書き込みを行う。
【0046】
次に、三つのライト・コマンド[1]〜ライト・コマンド[3]からなるグループに対応したジャーナルを保存する処理を説明する。上記三つのライト・コマンド[1]〜ライト・コマンド[3]の指定するアドレスは、磁気ディスク11上の連続アドレス領域(LBA100h〜1AFh)である。HDC/MPU23は、このように連続するアドレス領域への複数のライト・コマンドを一つにまとめ、複数ライト・コマンドからなるグループに対応したジャーナルを保存する。
【0047】
図7は、ライト・コマンド[1]〜ライト・コマンド[3]及びそれに対応して保存されるジャーナルを示している。保存されるジャーナルは、プロローグ[1]とエピローグ[3]の2エントリのみである。図6を参照して説明した、ライト・コマンド毎にジャーナルを保存する場合と比較して、中間のライト・コマンド[2]に対応する全てのジャーナルと、最初のライト・コマンド[1]のエピローグ[1]、そして最後のライト・コマンド[3]のプロローグ[3]が省略されている。連続領域への書き込みを指示する複数のライト・コマンドによるセグメント・テーブル243の更新は、このように、最初のライト・コマンドのプロローグと、最後のライト・コマンドのエピローグとで示すことができる。
【0048】
複数ライト・コマンドの指定アドレス領域が連続しているために、その領域を一つのライト・コマンドに対応するジャーナルで示すことができる。ここで重要なことは、最後のライト・コマンド[3]に対応するエピローグ[3]が含むデータは、ライト・コマンド[3]のみのために形成されるジャーナルとは異なるということである。図6に示すように、ライト・コマンド[3]単独でジャーナルを保存する場合は、そのライト・コマンド[3]が指定するアドレスをエピローグも有する。
【0049】
しかし、複数ライト・コマンドをまとめてジャーナルを保存する場合、エピローグは複数ライト・コマンドが指定する全てのアドレス領域を示すことが必要になる。そのため、HDC/MPU23は、最初のライト・コマンド[1]のプロローグ[1]の開始LBAと、最後のライト・コマンド[3]の終了アドレスとから、開始LBAとデータ長とを決定し、その値をエピローグ[3]に格納する。図7の例において、エピローグ[3]の開始LBAは、プロローグ[1]と同様のLBA100hであり、また、データ長は、LBA100hから最後のライト・コマンド[3]の終了アドレス1AFhまでのB0hである。
【0050】
また、連続領域を指定する複数ライト・コマンドを一単位としてジャーナルを保存することで、保存するジャーナルのエントリ数を低減することができると共に、ジャーナル保存のための処理時間を短縮することができる。上記説明から理解されるように、HDC/MPU23は、三つのライト・コマンドのジャーナルを保存するために、2回の書き込み処理を行うのみである。各ライト・コマンドに対して個別にジャーナルを保存する場合に対して、四回の書き込み処理時間を短縮することができる。
【0051】
続いて、図8のフローチャートを参照して、上記三つのライト・コマンドを一グループしてジャーナルを保存する処理を説明する。HDD1のライト・キャッシュ機能はイネーブルとなっている。ライト・キャッシュ機能は、ライト・データを不揮発性メモリに保存する前に、ライト・データをセクタ・バッファ241に格納すると、ホスト51からのライト・コマンドに対して、完了の通知を行う機能である。ライト・キャッシュ機能がイネーブルされている場合、ライト・データの保存は、ホスト51に対して保障されない。
【0052】
HDC/MPU23は、キャッシュされているライト・コマンドを取得し(S21)、そのライト・コマンドの指定アドレスを参照して、その前のライト・コマンドのアドレスに連続しているかを判定する(S22)。最初のライト・コマンド[1]は、連続領域への書き込みではないため(S22におけるN)、HDC/MPU23は、プロローグ[1]をジャーナル領域252に書き込む(S23)。HDC/MPU23は、さらに、ライト・コマンド[1]のユーザ・データをフラッシュ・メモリ25に保存し(S24)、さらにDRAM24上の一時的セグメント・テーブル243を更新する(S25)。
【0053】
次に、HDC/MPU23は、次のライト・コマンドがキャッシュされているかを確認し(S26)、次のライト・コマンドが存在する場合(S26におけるY)、そのライト・コマンドを取得する(S21)。本例では、HDC/MPU23は、ライト・コマンド[2]を取得する。HDC/MPU23は、ライト・コマンド[2]の指定アドレスを参照し、そのアドレスが、その前のライト・コマンド[1]の指定アドレスに連続しているかを判定する(S22)。本例において、これらの指定アドレスは連続領域であり(S22におけるY)、HDC/MPU23はプロローグの書き込み(S23)を省略して、ライト・コマンド[2]のユーザ・データをフラッシュ・メモリ25に保存し(S24)、さらにDRAM24上の一時的セグメント・テーブル243を更新する(S25)。
【0054】
次に、HDC/MPU23は、次のライト・コマンドがキャッシュされているかを確認し(S26)、次のライト・コマンドが存在する場合(S26におけるN)、そのライト・コマンドを取得する(S21)。本例では、HDC/MPU23は、ライト・コマンド[3]を取得する。HDC/MPU23は、ライト・コマンド[3]の指定アドレスを参照し、そのアドレスが、その前のライト・コマンド[2]の指定アドレスに連続しているかを判定する(S22)。本例において、これらの指定アドレスは連続領域である(S22におけるY)。
【0055】
従って、HDC/MPU23はプロローグの書き込み(S23)を省略して、ライト・コマンド[3]のユーザ・データをフラッシュ・メモリ25に保存し(S24)、さらにDRAM24上の一時的セグメント・テーブル243を更新する(S25)。キャッシュされているライト・コマンドがない場合(S26におけるN)、HDC/MPU23は、エピローグを保存する(S27)。本例においてはライト・コマンド[3]が最後のライト・コマンドであり、HDC/MPU23は、図7に示したエピローグ[3]をジャーナル領域252に書き込む。
【0056】
本方法に従えば、HDC/MPU23は、2つのライト・コマンドが連続アドレス領域を指定する場合、最初のライト・コマンドに対応するエピローグと、最後のライト・アドレスにおけるプロローグを省略する。また、上述のように、3以上の連続するライト・コマンドが、一つの連続アドレス領域を指定する場合、最初のライト・コマンドに対応するエピローグと、最後のライト・アドレスにおけるプロローグ、そして、それらの中間のライト・コマンドに対応する全てのジャーナルの保存を省略する。
【0057】
HDC/MPU23は、連続領域へ書き込むライト・コマンドの全てを一つのグループに含めることができる。つまり、HDC/MPU23は、取得したライト・コマンドが示すアドレス領域がその前のライト・コマンドのアドレス領域に連続している場合、そのライト・コマンドを無条件でグループに含める。しかし、グループに含めることはジャーナルの保存を遅らせることにあり、その時間が長すぎることは好ましくない場合もある。
【0058】
そこで、好ましい例において、HDC/MPU23は、グループを構成するライト・コマンド数が予め設定されている閾値に達すると、そのグループに対応するジャーナルをフラッシュ・メモリ25に保存する。あるいは、HDC/MPU23は、グループを構成するライト・コマンドが指定するアドレス領域が予め設定されている閾値に達すると、そのグループに対応するジャーナルをフラッシュ・メモリ25に保存する。
【0059】
HDC/MPU23は、各ライト・コマンドの指定アドレス領域に応じて、そのライト・コマンドをグループに含めるか否かを決定することができる。具体的には、ライト・コマンドの指定アドレスの長さが予め設定されている閾値に達している場合、HDC/MPU23は、そのライト・コマンド単独のジャーナル、つまり、そのライト・コマンドに対応するプロローグとエピローグとをフラッシュ・メモリ25に保存する。
【0060】
グループに対応するプロローグとエピローグとがフラッシュ・メモリ25に保存されている場合、予期しない電源遮断後において、HDC/MPU23は、上記プロローグとエピローグとを使用してセグメント・テーブルを回復することができる。しかし、プロローグを保存した後、エピローグを保存する前に電源遮断が起きることがありうる。エピローグが保存されていない場合、HDC/MPU23は、フラッシュ・メモリ25のユーザ・データ領域251に保存されているグループのライト・データ長を知ることができない。一方、HDC/MPU23は、フラッシュ・メモリ25にデータを上書きすることはできず、既存データを消去することが必要である。
【0061】
そこで、HDC/MPU23は、グループに対応するエピローグが保存される前に電源遮断が起きた場合、ユーザ・データ領域251内において上記グループに対応するユーザ・データが保存されている可能性がある領域を消去する。具体的には、HDC/MPU23は、上記グループのプロローグが示すユーザ・データ領域251内アドレスから先の不使用領域を消去する。不使用領域は、保存セグメント・テーブル253が示す他のユーザ・データが保存されている領域までの領域である。ユーザ・データ領域251がリングバッファとして機能している場合、他のユーザ・データが保存されている領域以外の領域が消去される。これにより、その後のユーザ・データのユーザ・データ領域251への保存処理を円滑に進めることができる。
【0062】
次に、ライト・コマンドのグループ化の他の好ましい方法を説明する。この方法は、指定アドレス領域が不連続(離散)の複数ライト・コマンドを一つのグループとし、さらに、そのグループのジャーナルの一部を同時にフラッシュ・メモリ25に保存する。HDC/MPU23は、ジャーナルの一部を省略して保存する。図9を参照して具体的に説明する。
【0063】
ライト・キャッシュ機能はイネーブルされている。/MPU23は、キャッシュされているライト・コマンド[1]の処理において、SRAM231にプロローグ[1]とエピローグ[1]とを格納する。さらに、HDC/MPU23は、プロローグ[1]をフラッシュ・メモリ25のジャーナル領域252に保存する。その後、HDC/MPU23は、キャッシュされているライト・コマンド[2]〜ライト・コマンド[N]を順次処理し、それぞれのライト・コマンドに対応する、プロローグ[2]〜プロローグ[N]、エピローグ[2]〜エピローグ[N]をSRAM231に格納する。
【0064】
キャッシュされているライト・コマンドが終了する、あるいは、SRAM231のジャーナル格納数が閾値に達すると、HDC/MPU23は、SRMA213に格納されているジャーナルを同時にフラッシュ・メモリ25のジャーナル領域252に保存する。このとき、HDC/MPU23は、各ライト・コマンドのプロローグ[2]〜プロローグ[N]を省略し、エピローグ[2]〜エピローグ[N]をジャーナル領域252に保存する。保存セグメント・テーブル253の更新のためにはエピローグのみで十分であり、HDC/MPU23は、保存するジャーナルを省略することでエントリ数を低減する。また、複数ライト・コマンドに対応するジャーナルを同時に保存することで、そのための処理時間を短縮することができる。最初のプロローグのみを保存して、その後のジャーナルを保存する前に電源遮断が起きた場合の処理は、上記連続領域へのライト・コマンドによりグループを構成する場合と同様である。
【0065】
以上、本発明について好ましい態様を使用して説明したが、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態においては、HDDを例にとって説明したが、光ディスクや光磁気ディスクなど他のディスクを使用するデータ記憶装置に適用してもよい。
【0066】
上述のように、セグメント・テーブルを不揮発性半導体メモリに保存することが好ましいが、不揮発性メモリである磁気ディスクに保存してもよい。不揮発性半導体メモリとしては、フラッシュ・メモリ以外のメモリを使用してもよい。また、複数のICを使用して不揮発性半導体メモリの領域を形成してもよい。メモリ領域は、ICやディスクなどの素子の数に制限されない。セグメント・テーブルやジャーナルなどのデータ・フォーマットや1ライト・コマンドに対応するログ・データの数などは、設計により変更することができる。
【図面の簡単な説明】
【0067】
【図1】本実施の形態にかかるハードディスク・ドライブの全体構成を模式的に示すブロック図である。
【図2】本実施の形態において、再生処理を行う構成要素を模式的に示すブロック図である。
【図3】本実施の形態にかかるセグメント・テーブルのレコード及びジャーナルのフォーマットを模式的に示す図である。
【図4】本実施の形態にかかるジャーナルを使用してセグメント・テーブルを回復処理の一例を模式的に示す図である。
【図5】本実施の形態において、ライト・コマンド毎にジャーナルを保存する例を説明するフローチャートである。
【図6】本実施の形態において、ライト・コマンド毎にジャーナルを保存する例を説明する図である。
【図7】本実施の形態において、連続領域を指定する複数ライト・コマンドで構成するグループに対応したジャーナルを保存する例を説明する図である。
【図8】本実施の形態において、連続領域を指定する複数ライト・コマンドで構成するグループに対応したジャーナルを保存する例を説明するフローチャートである。
【図9】本実施の形態において、離散領域を指定する複数ライト・コマンドで構成するグループに対応したジャーナルの保存を説明する図である。
【符号の説明】
【0068】
1 ハードディスク・ドライブ、10 エンクロージャ、11 磁気ディスク
12 ヘッド・スライダ、13 アーム・エレクトロニクス、14 スピンドル・モータ
15 ボイス・コイル・モータ、16 アクチュエータ、20 回路基板
21 RWチャネル、22 モータ・ドライバ・ユニット
23 ハードディスク・コントローラ/MPU、24 DRAM
25 フラッシュ・メモリ、231 SRAM、232 プロローグ・ジャーナル
233 エピローグ・ジャーナル、241 セクタ・バッファ
242、254 PIN/UNPINテーブル、243 一時的セグメント・テーブル
251 ユーザ・データ領域、252 ジャーナル領域
253 保存セグメント・テーブル、255 PIN領域、256 UNPIN領域

【特許請求の範囲】
【請求項1】
ユーザ・データを記憶するディスク・メモリ領域と、
ユーザ・データを記憶する不揮発性半導体メモリ領域と、
前記不揮発性半導体メモリ領域に記憶されているユーザ・データの前記ディスク・メモリ領域のアドレスが登録されているセグメント・テーブル、を記憶する揮発性メモリ領域と、
前記セグメント・テーブルが保存される第1不揮発性メモリ領域と、
前記揮発性メモリ領域のセグメント・テーブルの更新履歴を表すログ・データが保存される第2不揮発性メモリ領域と、
前記ディスク・メモリ領域の連続するアドレス領域への複数ライト・コマンドに対応するログ・データを、前記複数ライト・コマンドのそれぞれに対応するログ・データから一部を省略して生成し、生成した前記複数ライト・コマンドに対応するログ・データを前記第2不揮発性メモリ領域に保存する、コントローラと、
を有するデータ記憶装置。
【請求項2】
第1不揮発性メモリ領域と第2不揮発性メモリ領域と、不揮発性半導体メモリ領域とが、同一の不揮発性半導体メモリ内にある、
請求項1に記載のデータ記憶装置。
【請求項3】
前記複数ライト・コマンドが3以上のライト・コマンドである場合、前記コントローラは、最初のライト・コマンドと最後のライト・コマンドとの間にある全てのライト・コマンドのログ・データを省略する、
請求項1に記載のデータ記憶装置。
【請求項4】
一つのライト・コマンドに対応するログ・データは、前記揮発性メモリ領域のセグメント・テーブルの更新前のプロローグと更新後のエピローグとを含み、
前記コントローラは、最初のライト・コマンドのプロローグと最後のライト・コマンドのエピローグとを前記第2不揮発性メモリ領域に保存し、前記最初のライト・コマンドのプロローグと前記最後のライト・コマンドのエピローグとの間のログ・データを省略する、
請求項1に記載のデータ記憶装置。
【請求項5】
一つのライト・コマンドに対応するプロローグとエピローグとは、それぞれ、前記一つのライト・コマンドが指定する開始アドレスとアドレス長とを含み、
前記最後のライト・コマンドのエピローグは、前記最初のライト・コマンドのプロローグが含む開始アドレスを含む、
請求項4に記載のデータ記憶装置。
【請求項6】
前記コントローラは、ライト・コマンドをキャッシュされた順序に従って処理し、現在のライト・コマンドの指定アドレスが、その前のライト・コマンドの指定アドレスと連続している場合に、前記複数ライト・コマンドに前記現在のライト・コマンドを追加する、
請求項1に記載のデータ記憶装置。
【請求項7】
前記コントローラは、前記複数ライト・コマンドを構成するライト・コマンドの数が閾値に達している場合、前記複数ライト・コマンドに対応する現在のログ・データを前記第2不揮発性メモリ領域に保存する、
請求項6に記載のデータ記憶装置。
【請求項8】
前記コントローラは、ライト・コマンドの指定アドレスの長さが閾値に達している場合、そのライト・コマンドに対応するログ・データを個別に前記第2不揮発性メモリ領域に保存する、
請求項6に記載のデータ記憶装置。
【請求項9】
前記コントローラは、前記複数ライト・コマンドを構成するライト・コマンドが指定するアドレス領域が閾値に達している場合、前記複数ライト・コマンドに対応する現在のログ・データを前記第2不揮発性メモリ領域に保存する、
請求項6に記載のデータ記憶装置。
【請求項10】
電源遮断により前記複数ライト・コマンドに対応するログ・データの保存処理が中断した場合、前記電源遮断後に起動された前記コントローラは、前記不揮発性半導体メモリ領域において、前記複数ライト・コマンドの最初のライト・コマンドに対応するアドレスから先の不使用領域を消去する、
請求項1に記載のデータ記憶装置。
【請求項11】
前記コントローラは、さらに、指定アドレスが不連続の複数ライト・コマンドの最初のライト・コマンド以外のライト・コマンドに対応するログ・データを、同時に前記第2不揮発性メモリ領域に保存する、
請求項1に記載のデータ記憶装置。
【請求項12】
一つのライト・コマンドに対応する前記ログ・データは、前記揮発性メモリ領域のセグメント・テーブルの更新前のプロローグと更新後のエピローグとを含み、
前記コントローラは、前記最初のライト・コマンド以外のライト・コマンドに対応するプロローグを省略する、
請求項11に記載のデータ記憶装置。
【請求項13】
前記指定アドレスが不連続の複数ライト・コマンドに対応するログ・データは、前記最初のライト・コマンドのプロローグ及びエピローグと、それ以外のライト・コマンドのエピローグとから構成され、
前記コントローラは、前記最初のライト・コマンドのプロローグを保存した後、その他のログ・データを同時に保存する、
請求項12に記載のデータ記憶装置。
【請求項14】
ユーザ・データを記憶するディスク・メモリ領域と、ユーザ・データを記憶する不揮発性半導体メモリ領域と、を有するデータ記憶装置における、データ管理方法であって、
前記不揮発性半導体メモリ領域に記憶されているユーザ・データの前記ディスク・メモリ領域のアドレスが登録されているセグメント・テーブルを、揮発性メモリ領域に格納し、
前記セグメント・テーブルを第1不揮発性メモリ領域に保存し、
前記揮発性メモリ領域のセグメント・テーブルの更新履歴を表すログ・データを、第2不揮発性メモリ領域に保存し、
前記ディスク・メモリ領域の連続するアドレス領域への複数ライト・コマンドに対応するログ・データを、前記複数ライト・コマンドのそれぞれに対応するログ・データから一部を省略して生成し、
生成した前記複数ライト・コマンドに対応するログ・データを前記第2不揮発性メモリ領域に保存する、
方法。
【請求項15】
前記複数ライト・コマンドが3以上のライト・コマンドである場合、前記コントローラは、最初のライト・コマンドと最後のライト・コマンドとの間にある全てのライト・コマンドのログ・データを省略する、
請求項14に記載の方法。
【請求項16】
さらに、指定アドレスが不連続の複数ライト・コマンドの最初のライト・コマンド以外のライト・コマンドに対応するログ・データを、同時に前記第2不揮発性メモリ領域に保存する、
請求項14に記載の方法。

【図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


【公開番号】特開2009−199665(P2009−199665A)
【公開日】平成21年9月3日(2009.9.3)
【国際特許分類】
【出願番号】特願2008−40128(P2008−40128)
【出願日】平成20年2月21日(2008.2.21)
【出願人】(503116280)ヒタチグローバルストレージテクノロジーズネザーランドビーブイ (1,121)
【出願人】(000233055)日立ソフトウエアエンジニアリング株式会社 (1,610)
【Fターム(参考)】