半導体ディスク装置
【課題】複数の半導体ディスク3a、3bによりデータを記録する半導体ディスク装置1において、高信頼性を維持し、処理量およびオーバーヘッドを少なくする。
【解決手段】複数の半導体ディスク3a、3bによりミラーリング構成を成し、一の半導体ディスク3aの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスク3bから当該アドレスのデータを読み出して、前記一の半導体ディスク3aの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスク3aまたは3bの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスク3bまたは3aから当該アドレスのデータを読み出して前記一の半導体ディスク3aまたは3bの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにした。
【解決手段】複数の半導体ディスク3a、3bによりミラーリング構成を成し、一の半導体ディスク3aの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスク3bから当該アドレスのデータを読み出して、前記一の半導体ディスク3aの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスク3aまたは3bの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスク3bまたは3aから当該アドレスのデータを読み出して前記一の半導体ディスク3aまたは3bの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにした。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、不揮発性の複数の半導体ディスクによりデータを記録する半導体ディスク装置のアクセス制御技術に関するものである。
【背景技術】
【0002】
半導体ディスク装置は、一般に、記録媒体としてNANDフラッシュメモリ等を用い、その記録方式としては1つのセルに1ビットを記録するシングルレベルセル(以下、「SLC」という)方式、1セルに複数のビットを記録するマルチレベルセル(以下、「MLC」という)方式がある。
【0003】
近年では、容量単価を安くするために、SLC方式ではなく、MLC方式を採用する傾向がある。
【0004】
図16にNANDフラッシュメモリの信頼性特性を示す。同図に示したように、データの書き込みを行ってから時間が経過するに従ってエラーレイトは上昇し、書換え回数が多いほどエラーレイトは高くなる傾向がある。
【0005】
また、SLC方式よりもMLC方式の方が高いエラーレイトとなるが、特に、MLC方式ではデータを書き込んでから1年程度経過した後のエラーレイトが急激に上昇する傾向がある。
【0006】
この対策として、書換え回数を各メモリブロックで平準化することにより特定のブロックの書換え回数が多くなることを避けるウェアレベリング技術を採用したり、エラー訂正符号(以下、「ECC」という)を用いてある程度のエラーレイトをカバーするようにしている。
【0007】
しかしながら、このような技術を採用しても、十分な信頼性を得られず、訂正できずにセクタエラーとなる場合があった。
【0008】
この半導体ディスク装置の信頼性の問題を解消するために、分散データ・ガーディングとも呼ばれるRAID(Redundant Arrays of Independent Disks)レベル5のディスクアレイを半導体ディスクにて構成し、記録データを修復するために冗長コードとしてパリティを全ての半導体ディスクに分散して保存し、セクタエラー発生時にパリティ計算にて元のデータを復元して保持し、セクタエラーとなった半導体ディスクへの書込みを行う技術はあった(例えば、特許文献1参照)。
【0009】
また、定期的にディスク全面にわたってリードしたデータを再び書込む、リフレッシュ動作を行い、記録したデータの劣化を防止する技術はあった。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2010−15195号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、上記従来のRAID5による半導体ディスク装置では、データの書き込み時に、パリティを算出して生成する必要があるほか、パリティ生成のために所定のデータブロックを一旦半導体ディスクから読み出さなければならず、オーバーヘッドが大きくなるという問題があった。
【0012】
また、定期的にリフレッシュ動作を行う技術では、リフレッシュ動作を行うことにより、半導体ディスクへの書込み回数が増え、早く装置寿命となってしまうという問題や、リフレッシュ動作の実施によりミッションクリティカルな処理をも遅延させてしまうという問題があった。
【課題を解決するための手段】
【0013】
本発明は、前述の課題を解決するため次の構成を採用する。すなわち、複数の半導体ディスクによりデータを記録する半導体ディスク装置において、複数の半導体ディスクによりミラーリング構成を成し、一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにした。
【0014】
或いはさらに、前記ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、 前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにした。
【0015】
或いはさらに、所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、当該判定結果に基づいて、ベリファイを実施するようにした。
【発明の効果】
【0016】
本発明の半導体ディスク装置によれば、以上のように構成したので、高信頼性を維持し、処理量およびオーバーヘッドを少なくすることができる。或いはさらに、ベリファイを実施する頻度を必要最小限とすることができ、システムへの処理負荷を必要最小限にすることができる。或いは、さらにベリファイ動作の実施によるディスクアクセスの遅延の発生を最小限とすることができ、ミッションクリティカルな処理の遅延の発生を防止することができる。
【図面の簡単な説明】
【0017】
【図1】実施例1の半導体ディスク装置の構成図である。
【図2】実施例1の半導体ディスク装置のリード動作フローチャート図である。
【図3】実施例1の半導体ディスク装置のベリファイ動作フローチャート図である。
【図4】実施例2の半導体ディスク装置の構成図である。
【図5】実施例2の半導体ディスク装置の各フラグの説明図である。
【図6】実施例2の半導体ディスク装置の各テーブルの例示図である。
【図7】実施例2の半導体ディスク装置の1台のベリファイ動作フローチャート図である。
【図8】実施例2の各半導体ディスク装置のインターバル補正動作フローチャート図である。
【図9】実施例2の半導体ディスク装置のインターバル補正テーブルの例示図である。
【図10】実施例2の半導体ディスク装置のベリファイ動作フローチャート図である。
【図11】実施例3の半導体ディスク装置の構成図である。
【図12】実施例3の半導体ディスク装置のアクセス回数集計テーブルの例示図である。
【図13】実施例3の半導体ディスク装置のアクセス回数集計テーブル更新動作フローチャート図である。
【図14】実施例3の半導体ディスク装置のベリファイ動作フローチャート図である。
【図15】実施例3の半導体ディスク装置のベリファイ実施可否設定テーブルの例示図である。
【図16】NANDフラッシュメモリの信頼性特性を説明する図である。
【発明を実施するための形態】
【0018】
以下、本発明に係わる実施の形態例を、図面を用いて説明する。図面に共通する要素には同一の符号を付す。なお、以下の説明では、便宜上、2台の半導体ディスクによるミラーリング制御を例として説明するが、3台以上の半導体ディスクによるミラーリング制御であってもよい。
【実施例1】
【0019】
(構成)
実施例1の半導体ディスク装置では、簡単な処理でオーバーヘッドの少ないRAID1のミラーリングを2台の半導体ディスクにより構成するとともに、運用中に定期的にリード動作を基本とした全面ベリファイ動作を行い、全てのセクタエラーを事前に検出して修復しておくことにより、リード動作におけるセクタエラーの修復不可とならないようにしている。
【0020】
図1に実施例1の半導体ディスク装置1の構成図を示す。同図に示したように、実施例1の半導体ディスク装置1は、CPUやメモリを含んだ装置全体を制御し、オペレーティングシステム(以下、「OS」という)やアプリケーションプログラム(以下、「AP」という)などのプログラムを実行する制御部2と、2台の半導体ディスクをRAID1にてミラーリングの機能を実現するミラーコントローラ5と、ミラーコントローラ5や図示していない他のコントローラと接続するPCIなどの制御部バス6と、ミラーコントローラ5と2台の半導体ディスク3a、3bと接続するためのIDE(Integrated Drive Electronics)、SATA(Serial Advanced Technology Attachment)、SCSI(Small Computer System Interface)などのディスクI/Fバス4a、4bを備える。
【0021】
なお、ミラーコントローラ5は、制御LSIを実装し、ミラーリング制御をLSI内部のファームで実現する構成としてもよいし、制御部2内で動作するミラーコントローラドライバにて実現する構成としてもよい。
【0022】
(動作)
以上の構成により、実施例1の半導体ディスク装置1は以下のように動作する。なお、ミラーリング制御の基本動作としては、複数のディスクに同じデータを書き込む「ライト動作」、任意のディスクからデータをリードする「リード動作」、一方のディスクの故障を検出した場合に当該ディスクへのアクセスを停止して他方の正常なディスクからのみアクセスを行う「縮退動作」、故障したディスクを新しいディスクに交換した後に正常なディスクからデータをコピーしてもとの状態に戻す「リビルド動作」があるが、これらの動作はハードディスクドライブ(HDD)により構成したRAID1の動作と同様であるので、簡略化のためにその詳細な説明は省略する。
【0023】
次に、図2のリード動作のフローチャートを用いて、リードによりセクタエラーが検出された場合のセクタエラー修復動作を説明する。
【0024】
まず、リードは2台の半導体ディスク3a、3bのいずれか任意の半導体ディスクを選択し(ステップS01)、選択した半導体ディスク、本例では半導体ディスク3aへのリードを行い(ステップS02)、その応答がセクタエラーかどうか判断し(ステップS03)、セクタエラーがなければリードしたデータを図示しない上位装置へ転送して(ステップS06)、本処理を終了する。
【0025】
一方、セクタエラーがあった場合は、選択した半導体ディスク3aのリードしたセクタにECCで訂正できないビットエラーがあるため、まず、選択しなかった半導体ディスク3bから当該セクタのデータをリードし(ステップS04)、そのデータをセクタエラー応答した半導体ディスク3aに書き込み(ステップS05)、既にリードしたデータを上位に転送して(ステップS06)、本処理を終了する。
【0026】
以上のセクタエラー修復動作は、OSやAPによるリード時だけでなく、後述のベリファイ動作においても実施するのがよい。
【0027】
次に、図3の動作フローチャート図を用いて実施例1の半導体ディスク装置のベリファイ動作を説明する。まず、半導体ディスクのアドレスAdrを先頭アドレス、すなわち"0"とする(ステップS11)。
【0028】
そして、半導体ディスク3aに対してベリファイコマンドを実行し(ステップS12)、セクタエラー応答がないか確認し(ステップS13)、セクタエラーがあった場合は半導体ディスク3bからデータを読み出し(ステップS14)、そのデータを半導体ディスク3aに書き込む(ステップS15)。
【0029】
同様に、半導体ディスク3bに対してベリファイコマンドを実行し、セクタエラー応答がないか確認し、セクタエラーがあった場合は半導体ディスク3aからデータを読み出し、そのデータを半導体ディスク3bに書き込む(ステップS16〜S19)。
【0030】
アドレスAdrに対するベリファイが半導体ディスク3aおよび半導体ディスク3bについて終了すると、アドレスAdrが半導体ディスクの最終アドレスかどうか判定し(ステップS20)、最終アドレスでなければアドレスAdrをインクリメントし(ステップS21)、ステップS12に戻り、以降同様に半導体ディスクのベリファイを行う。一方、アドレスAdrが最終アドレスのときは本ベリファイ動作を終了する。
【0031】
なお、以上のベリファイ動作は半導体ディスク装置の動作中にバックグランドで行うが、例えば、1日一回など定期的に実施し、その際にベリファイ動作によるディスクアクセスは、OSやAPからのアクセスが数秒程度の一定時間ないような空き時間に実行するようにすればよい。
【0032】
また、故障した半導体ディスクを新しい半導体ディスクに交換した後に正常な半導体ディスクからデータをコピーしてもとの状態に戻す「リビルド」の際に始めてコピー元になる半導体ディスクについてもベリファイ動作を行い、セクタエラーを検出することによりリード時のセクタエラー修復動作が失敗するリスクを減らすことができる。
【0033】
以上のように、バックグラウンドにてリード動作を基本としたベリファイ動作を行うようにしたので、従来技術のように全面の書込み動作を伴うリフレッシュ動作を行った場合のように寿命が短くなることもない。
【0034】
(実施例1の効果)
以上の実施例1の半導体ディスク装置によれば、複数の半導体ディスクによりデータを記録する半導体ディスク装置において、複数の半導体ディスクによりミラーリング構成を成し、一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにしたので、高信頼性を維持したままで、処理量およびオーバーヘッドも少なくすることができる。
【実施例2】
【0035】
(構成)
実施例2の半導体ディスク装置では、簡単な処理でオーバーヘッドの少ないRAID1により半導体ディスクのミラーリング構成を形成するとともに、ベリファイ動作によるシステムへの処理負荷をさらに少なくするために、ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備えた構成としている。
【0036】
図4に実施例2の半導体ディスク装置の構成図を示す。同図に示したように、実施例2の半導体ディスク装置は、ミラーコントローラ5に、インターバル設定手段として、詳細後述のディスクテーブル11と、書換えテーブル12と、セクタエラー記録テーブル13と、インターバル補正テーブル14と、を新たに設けた構成となっている。その他の構成は、実施例1の半導体ディスク装置の構成と同様であるので、簡略化のためにその詳細な説明は省略する。
【0037】
図5(a)にディスクテーブル11の構成を示す。同図に示したように、ディスクテーブル11は、半導体ディスクごとに、半導体ディスク装置の記録方式を示す図5(b)の項番をメモリフラグに、搭載するウェアレベリングの種類を示す図5(c)の項番をウェアレベリングフラグに格納できる構成となっている。
【0038】
前記メモリフラグには、半導体ディスクの記録方式、すなわちSLC方式かMLC方式かに分け、MLC方式の場合はビット/セルの種類により、2ビット/セルの場合はMLC2、3ビット/セルの場合はMLC3、・・・、xビット/セルの場合はMLCxとして、それぞれ対応する項番を格納する。
【0039】
なお、図5(b)右欄のベリファイ実施時のデフォルトインターバルは記録方式ごとのベリファイ実施ンターバルの基準値であり、高密度の記録方式ほどインターバル時間を短くするように設定し、SLC方式のときは100秒とし、2ビット/セルのMLC方式のときは50秒、3ビット/セルのMLC方式のときは25秒、そしてxビット/セルのMLC方式の場合は100秒/xのインターバルでベリファイを実施することを示す。
【0040】
また、インターバル補正テーブル14は、図9に示したように、所定の期間、本例では1ヶ月および1年間に発生したセクタエラー回数に応じてデフォルトインターバルを補正する補正値を格納する。
【0041】
ところで、ウェアレベリングとは、半導体ディスク装置の特定のアドレスに書換えが集中した場合でも実際のメモリに対しては特定のブロックに書換えが集中しないようにする書換え回数を平準化するアルゴリズムであり、APデータなどのように運用中に書換えの行われているメモリブロックのみを対象にして平準化を行うダイナミックウェアレベリングと、OSプログラムなどのようにインストール以降書換えられないようなメモリブロックも含めて平準化を行うスタティックウェアレベリングがある。
【0042】
前記ウェアレベリングフラグには、それぞれの半導体ディスク装置が搭載する上記ウェアレベリングの種類に基づき図5(c)のテーブルに従ってそれぞれ対応する項番を格納する。
【0043】
なお、図5(c)右欄のベリファイ実施頻度の調整値は、前述のデフォルトインターバルをインターバル補正テーブル14にて補正したものを、さらにウェアレベリングの種類によりどのように調整するかを示している。例えば、スタティックウェアレベリングではあまり書換えられないエリアの平準化を行う場合であるので、ベリファイ実施頻度を少なくしインターバルを長くし、本例では10倍としスキップ回数Nsを10としている。
【0044】
図6(a)に実施例2の半導体ディスク装置の書換えテーブル12の例示図を示す。同図に示したように、書換えテーブル12は、半導体ディスク3a、3bそれぞれについて、半導体ディスクの全領域をエリアNo.1〜nのように半導体ディスクのメモリブロックの書換え単位に分割し、それぞれのエリアごとに最後に書き込みがあった日時を保持する。
【0045】
なお、メモリブロックの書換え単位は、使用するメモリや半導体ディスクの方式により16KB〜128KBとするが一般的であるが、その他の書換え単位としても勿論よい。
【0046】
また、書換えテーブル12は、頻繁に更新されるテーブルであるため、通常はプログラム用メモリ中に実装し、運用終了時に半導体ディスク上のファイルに保存し、次の起動時にプログラム用メモリにロードするようにするのがよい。
【0047】
図6(b)に実施例2の半導体ディスク装置のセクタエラー記録テーブル13の構成図を示す。同図に示したように、セクタエラー記録テーブル13は、半導体ディスク3a、3bそれぞれについて、m個の記録を保持できるテーブルを用意し、セクタエラーが発生した場合にその発生日時を順次保持する。
【0048】
なお、セクタエラー記録テーブル13は、頻繁には更新されないテーブルであるので、図4の構成図では便宜上半導体ディスクとは別の構成として示しているが半導体ディスク上のファイルとして実装してもよい。
【0049】
(動作)
以上の構成により実施例2の半導体ディスク装置は、以下のように動作する。まず、初期設定として、図5(b)、(c)により半導体ディスクの記録方式及びウェアレベリングに対応する項番をディスクテーブル11に設定する。なお、この設定はオペレータが専用の設定用ツールによりあらかじめ設定するようにしてもよいし、起動時に制御部2にて記憶方式等の設定をリードして設定するようにしてもよい。
【0050】
また、初期設定として、書換えテーブル12の最終更新日時及びセクタエラー記録テーブル13のセクタエラー発生日時は、日時が指定されていないことを示すため、「0」などの値を書き込んでおく。
【0051】
そして、運用中の書換えテーブル12の更新は、OSやAPからの半導体ディスクへの書込みがあったときに、該当するエリアに更新日時を書き込む。
【0052】
そして、運用中のセクタエラー記録テーブル13の更新は、OSやAPからのリード動作によりセクタエラーを検出したときまたはベリファイ動作によりセクタエラーを検出した場合にセクタエラー記録テーブル13に発生日時を追加する。
【0053】
そして、セクタエラー記録テーブル13がフルになった場合はNo.1からサイクリックにテーブルを使用し、直近のセクタエラーの発生日時の情報が残るようにする。
【0054】
次に、実施例2のベリファイ動作について、図7のベリファイ動作フローチャートを用いて以下詳細に説明する。なお、このベリファイ動作は半導体ディスク3aと半導体ディスク3bそれぞれ独立して動作させる。
【0055】
運用を開始すると、まず、半導体ディスク毎に、それまでのベリファイ実施の際にファイルとして半導体ディスクに保存されたベリファイを行うアドレスを示す「ベリファイアドレス」とそれまでに実施されたベリファイの回数を示す「ベリファイカウンタ」を読み出し、レジスタAdrとレジスタcntに格納する(ステップS31)。
【0056】
なお、最初のシステム構成時のベリファイアドレスは半導体ディスクの先頭領域を示す「0」であり、ベリファイ回数も「0」のため、Adr=0、cnt=0と設定される。
【0057】
次に、詳細後述のベリファイを行うインターバルの設定を実施し(ステップS32)、次に、アドレスAdrについて詳細後述のベリファイを実施し(ステップS33)、Adrをインクリメントする(ステップS34)。
【0058】
そして、Adrが半導体ディスク装置の最終アドレスを超えた場合は(ステップS35)、初期値の「0」に戻し、cntをインクリメントする(ステップS36)。
【0059】
そして、運用を終了する場合は(ステップS37)、Adrとcntの値をそれぞれ半導体ディスク装置の「ベリファイアドレス」と「ベリファイカウンタ」に保存して終了する(ステップS38)。
【0060】
一方、運用を継続する場合は、直近のステップS32のインターバル設定から所定の時間経過したかどうかを確認し、所定の時間を経過していると判定した場合は(ステップS39)、ステップS32に戻り、インターバル設定を最新の状態にし、以降同様に行う。ステップS39にて所定の時間を経過していないと判定した場合は、ステップS33に戻り、ベリファイ動作を継続して実施し、以降同様に行う。
【0061】
なお、前記所定の時間は例えば24時間などの時間とし、連続運用を行う装置でも、1日ごとにインターバル設定を更新する。
【0062】
次に、前述ステップS32のインターバル設定の詳細な動作を図8の動作フローチャートを用いて説明する。まず、ディスクテーブル11のメモリフラグ、すなわち半導体ディスクの記録方式を示す項番に対応する図5(b)のデフォルトインターバルを取得する(ステップS41)。
【0063】
例えば、2ビット/セルのMLCの場合で項番が"2"の場合では、デフォルトインターバルとしてTc=50秒を取得する。
【0064】
次に、セクタエラー記録テーブル13を参照し、直近1ヶ月と1年のセクタエラー回数を集計する(ステップS42)。
【0065】
そして、インターバルを図9のインターバル補正テーブル14に従って補正し、当該半導体ディスク装置の最終的なインターバル時間を決定する(ステップS43)。
【0066】
例えば、セクタエラー記録テーブル13を参照した結果、2010年10月現在、図6(b)の半導体ディスク3aのように、直近1ヶ月にセクタエラーが1回発生し、1年間に4回セクタエラーが発生していた場合では、前述のデフォルトインターバルTcを1/2にし、Tc*=25秒と補正する。
【0067】
次に、以上のように補正されたインターバルTc*ごとに実施するベリファイの詳細動作を図10の動作フローチャートを用いて説明する。まず、ステップS43で設定した当該半導体ディスク装置のインターバル時間Tc*(=25秒)の間、ウェイトする(ステップS51)。
【0068】
次に、ディスクテーブル11のウェアレベリングフラグを参照しウェアレベリングを確認し、ウェアレベリング無しの場合や(ステップS52)、ダイナミックウェアレベリングで且つ書換えテーブル12を参照しAdrを含むエリアの書換えが例えば最近1年間行われていない場合は(ステップS53)、ステップS55のベリファイの実動作に進む。
【0069】
また、ダイナミックウェアレベリングで且つ書換えテーブル12を参照し例えば最近1年に書換えが行われている場合やスタティックウェアレベリングの場合は、ベリファイの実動作をインターバルTc間ごとの図5(c)のスキップ回数Ns回数ごとに一回行うようにするために、cntの値をスキップ回数Nsで割った余りが0かどうか調べ(ステップS54)、0の場合はステップS55のベリファイの実動作に進み、0以外の場合は処理を終了する。
【0070】
なお、ステップS55〜S58のベリファイの実動作とセクタエラー時の動作は実施例1の図3のステップS12〜S15またはステップS16〜S19と同様であるので簡略化のためにその説明を省略する。
【0071】
(実施例2の効果)
以上の実施例2の半導体ディスク装置によれば、ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにしたので、実施例1の効果に加え、ベリファイを実施する頻度を必要最小限とすることができ、システムへの処理負荷を必要最小限にすることができる。
【実施例3】
【0072】
(構成)
実施例3の半導体ディスク装置では、図11の構成図に示したように、実施例1の構成に、ベリファイ実施有無判定手段として、所定の時間間隔の半導体ディスクのリードおよびライトのアクセス回数を格納するアクセス回数集計テーブル21と、当該アクセス回数集計テーブル21に基づいて当該時間帯にてベリファイを実施するか実施ないかを判定して当該判定結果を格納するベリファイ実施有無設定テーブル22と、を新たに設け、ベリファイ実施有無設定テーブル22の前記判定結果に基づいてベリファイを実施する構成としている。その他の構成は、実施例1の構成と同様であるので、その詳細な説明は省略する。
【0073】
図12はアクセス回数集計テーブル21の構成例を示す図である。同図に示したように、アクセス回数集計テーブル21は、曜日ごとに10分毎のアクセス回数を保持できる構成となっている。なお、上記時間間隔は10分より短くしてもよいし、逆に長くしても勿論よい。また、アクセス回数集計テーブル21は、頻繁に更新やリードを行わないため、半導体ディスク上のファイルとして実装してもよい。
【0074】
図15は、ベリファイ実施有無設定テーブル22の構成例を示す図である。同図に示したように、ベリファイ実施が可能な時間帯・曜日を「○」で示し、不可の時間帯・曜日を「×」として格納できるようになっている。なお、"○"を"1"とし「×」を"0"、或いはその逆にして格納するようにしてもよい。
【0075】
(動作)
以上の構成により、実施例3の半導体ディスク装置は、以下のように動作する。この動作を図13のアクセス回数集計テーブル21の更新動作フローチャートおよび図14のベリファイ動作の動作フローチャートを用いて以下詳細に説明する。
【0076】
まず、図13に示したように、装置起動後、アクセス回数集計を行う時間間隔となる10分間、ウェイトし(ステップS61)、この間の半導体ディスク(3a、3b)へのアクセス回数を計数する(ステップS62)。なお、単位時間あたりの半導体ディスクへのアクセス回数の計数は、汎用OSではライブラリ等でファイルアクセス回数の計数機能として提供されているので、当該機能を用いればよい。
【0077】
そして、10分間のアクセス回数をアクセス回数集計テーブル21の該当する時刻・曜日の欄に格納して更新する(ステップS63)。なお、アクセス回数集計テーブル21の該当する欄を更新する際に、例えば、今回の計数回数は1/4し、該当する欄にすでに格納されていた値を3/4にし、これらを加算して当該欄に上書きするようにすれば、直近の1週間前のアクセス回数にてスムージングすることができる。
【0078】
或いは、アクセス回数集計テーブル21を当該月分格納できる構成とし、今回の計数回数は1/4し、該当する欄にすでに格納されていた値を3/4にし、これらを加算して当該欄に上書きするようにすれば、直近の1月前のアクセス回数にてスムージングすることができる。
【0079】
次に、アクセス回数集計テーブル21を用いて、ベリファイ実施タイミングを調整する動作について図14の動作フローチャートを用いて以下説明する。
【0080】
まず、アクセス回数集計テーブル21より、どの時間帯でベリファイ実施が可能か否かの判定結果を格納するベリファイ実施有無設定テーブル22を作成する(ステップS71)。
【0081】
すなわち、図12のアクセス回数集計テーブル21から、例えば上位20%に入る最小のアクセス回数を求めて基準回数Nmとして、この基準回数Nm以上をベリファイ実施不可の「×」としその他を「○」としてベリファイ実施有無設定テーブル22を作成する。図15の例では、アクセス回数集計テーブル21から基準回数Nmが900回として求められ、当該基準回数900回にてベリファイ実施可否を判定して当該判定結果を「○」「×」にて格納した例となっている。
【0082】
なお、基準回数Nmは半導体ディスク装置の運用条件などで調整し、セクタエラー発生が少なくなる運用条件では、例えば上位30%に入る最小のアクセス回数を基準回数Nmとしてベリファイ実施可否を判定するようにし、ベリファイ実施頻度を少なくするのがよい。
【0083】
そして、10分毎の区切りの時間までウェイトした後(ステップS72)、現在、ベリファイ未実施の状態で「○」の時間帯になった場合は(ステップS73)、ベリファイ動作を起動する(ステップS74)。なお、ステップS74のベリファイ動作は、図3にて説明した実施例1の半導体装置のベリファイ動作と同様に行うようにすればよい。一方、ベリファイ動作中で「×」の時間帯になった場合は(ステップS75)、ベリファイ動作を終了する(ステップS76)。
【0084】
そして、運用終了でないときは(ステップS78)、ベリファイ実施可否設定テーブル15を作成してから所定の期間、例えば24時間経過した場合は、ステップS71に戻り、再度ベリファイ実施可否設定テーブル15の作成を行い、以下同様に行い、一方、所定の期間を経過していないときは、ステップS72に戻り、10分間ごとのベリファイ実施可否設定テーブル15に基づいたベリファイ実施動作を繰り返す。ステップS78にて運用終了と判定したときは、本処理を終了する。
【0085】
なお、以上の実施例の説明では、実施例1の半導体ディスク装置の構成にアクセス回数集計テーブル21を設けた例を説明したが、図4の実施例2の半導体ディスクの構成にアクセス回数集計テーブル21およびベリファイ実施有無設定テーブル22を設け、ベリファイ実施インターバルを、半導体ディスクの記録方式、書換えた回数、搭載するウェアレベリングの種類に基づいて調整するとともに、所定の時間ごとのアクセス回数によりベリファイ実施の有無をさらに調整するようにしてもよい。
【0086】
また、以上の実施例の説明では、ベリファイ実施可否設定テーブル15を設けるように説明したが、ベリファイ実施可否設定テーブル15を設けることなく、アクセス回数集計テーブル21に基づいて、都度該当する時間帯のアクセス回数が基準回数Nmより多いかどうかを判定してベリファイ実施の可否を判定するようにしてもよい。
【0087】
(実施例3の効果)
以上の実施例3の半導体ディスク装置によれば、所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、当該判定結果に基づいて、ベリファイを実施するようにしたので、ベリファイ動作の実施によるOSやAPからのディスクアクセスの遅延の発生を最小限とすることができる。
【0088】
《その他の変形例》
なお、以上の実施例の説明では、NANDフラッシュメモリを用いた半導体ディスク装置を例として説明したが、書込みにより寿命が短くなりリードエラーが発生し易いその他の不揮発性メモリを使用したディスク装置にも本発明を適用することができる。
【産業上の利用可能性】
【0089】
以上述べたように、本発明は不揮発性の複数の半導体ディスクによりデータを記録する半導体ディスク装置に広く用いることができる。
【符号の説明】
【0090】
1 半導体ディスク装置
2 制御部
3a、3b 半導体ディスク
4a、4b ディスクI/F#1、#2
5 ミラーコントローラ
11 ディスクテーブル
12 書換えテーブル
13 セクタエラー記録テーブル
14 インターバル補正テーブル
21 アクセス回数集計テーブル
22 ベリファイ実施有無設定テーブル
【技術分野】
【0001】
本発明は、不揮発性の複数の半導体ディスクによりデータを記録する半導体ディスク装置のアクセス制御技術に関するものである。
【背景技術】
【0002】
半導体ディスク装置は、一般に、記録媒体としてNANDフラッシュメモリ等を用い、その記録方式としては1つのセルに1ビットを記録するシングルレベルセル(以下、「SLC」という)方式、1セルに複数のビットを記録するマルチレベルセル(以下、「MLC」という)方式がある。
【0003】
近年では、容量単価を安くするために、SLC方式ではなく、MLC方式を採用する傾向がある。
【0004】
図16にNANDフラッシュメモリの信頼性特性を示す。同図に示したように、データの書き込みを行ってから時間が経過するに従ってエラーレイトは上昇し、書換え回数が多いほどエラーレイトは高くなる傾向がある。
【0005】
また、SLC方式よりもMLC方式の方が高いエラーレイトとなるが、特に、MLC方式ではデータを書き込んでから1年程度経過した後のエラーレイトが急激に上昇する傾向がある。
【0006】
この対策として、書換え回数を各メモリブロックで平準化することにより特定のブロックの書換え回数が多くなることを避けるウェアレベリング技術を採用したり、エラー訂正符号(以下、「ECC」という)を用いてある程度のエラーレイトをカバーするようにしている。
【0007】
しかしながら、このような技術を採用しても、十分な信頼性を得られず、訂正できずにセクタエラーとなる場合があった。
【0008】
この半導体ディスク装置の信頼性の問題を解消するために、分散データ・ガーディングとも呼ばれるRAID(Redundant Arrays of Independent Disks)レベル5のディスクアレイを半導体ディスクにて構成し、記録データを修復するために冗長コードとしてパリティを全ての半導体ディスクに分散して保存し、セクタエラー発生時にパリティ計算にて元のデータを復元して保持し、セクタエラーとなった半導体ディスクへの書込みを行う技術はあった(例えば、特許文献1参照)。
【0009】
また、定期的にディスク全面にわたってリードしたデータを再び書込む、リフレッシュ動作を行い、記録したデータの劣化を防止する技術はあった。
【先行技術文献】
【特許文献】
【0010】
【特許文献1】特開2010−15195号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、上記従来のRAID5による半導体ディスク装置では、データの書き込み時に、パリティを算出して生成する必要があるほか、パリティ生成のために所定のデータブロックを一旦半導体ディスクから読み出さなければならず、オーバーヘッドが大きくなるという問題があった。
【0012】
また、定期的にリフレッシュ動作を行う技術では、リフレッシュ動作を行うことにより、半導体ディスクへの書込み回数が増え、早く装置寿命となってしまうという問題や、リフレッシュ動作の実施によりミッションクリティカルな処理をも遅延させてしまうという問題があった。
【課題を解決するための手段】
【0013】
本発明は、前述の課題を解決するため次の構成を採用する。すなわち、複数の半導体ディスクによりデータを記録する半導体ディスク装置において、複数の半導体ディスクによりミラーリング構成を成し、一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにした。
【0014】
或いはさらに、前記ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、 前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにした。
【0015】
或いはさらに、所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、当該判定結果に基づいて、ベリファイを実施するようにした。
【発明の効果】
【0016】
本発明の半導体ディスク装置によれば、以上のように構成したので、高信頼性を維持し、処理量およびオーバーヘッドを少なくすることができる。或いはさらに、ベリファイを実施する頻度を必要最小限とすることができ、システムへの処理負荷を必要最小限にすることができる。或いは、さらにベリファイ動作の実施によるディスクアクセスの遅延の発生を最小限とすることができ、ミッションクリティカルな処理の遅延の発生を防止することができる。
【図面の簡単な説明】
【0017】
【図1】実施例1の半導体ディスク装置の構成図である。
【図2】実施例1の半導体ディスク装置のリード動作フローチャート図である。
【図3】実施例1の半導体ディスク装置のベリファイ動作フローチャート図である。
【図4】実施例2の半導体ディスク装置の構成図である。
【図5】実施例2の半導体ディスク装置の各フラグの説明図である。
【図6】実施例2の半導体ディスク装置の各テーブルの例示図である。
【図7】実施例2の半導体ディスク装置の1台のベリファイ動作フローチャート図である。
【図8】実施例2の各半導体ディスク装置のインターバル補正動作フローチャート図である。
【図9】実施例2の半導体ディスク装置のインターバル補正テーブルの例示図である。
【図10】実施例2の半導体ディスク装置のベリファイ動作フローチャート図である。
【図11】実施例3の半導体ディスク装置の構成図である。
【図12】実施例3の半導体ディスク装置のアクセス回数集計テーブルの例示図である。
【図13】実施例3の半導体ディスク装置のアクセス回数集計テーブル更新動作フローチャート図である。
【図14】実施例3の半導体ディスク装置のベリファイ動作フローチャート図である。
【図15】実施例3の半導体ディスク装置のベリファイ実施可否設定テーブルの例示図である。
【図16】NANDフラッシュメモリの信頼性特性を説明する図である。
【発明を実施するための形態】
【0018】
以下、本発明に係わる実施の形態例を、図面を用いて説明する。図面に共通する要素には同一の符号を付す。なお、以下の説明では、便宜上、2台の半導体ディスクによるミラーリング制御を例として説明するが、3台以上の半導体ディスクによるミラーリング制御であってもよい。
【実施例1】
【0019】
(構成)
実施例1の半導体ディスク装置では、簡単な処理でオーバーヘッドの少ないRAID1のミラーリングを2台の半導体ディスクにより構成するとともに、運用中に定期的にリード動作を基本とした全面ベリファイ動作を行い、全てのセクタエラーを事前に検出して修復しておくことにより、リード動作におけるセクタエラーの修復不可とならないようにしている。
【0020】
図1に実施例1の半導体ディスク装置1の構成図を示す。同図に示したように、実施例1の半導体ディスク装置1は、CPUやメモリを含んだ装置全体を制御し、オペレーティングシステム(以下、「OS」という)やアプリケーションプログラム(以下、「AP」という)などのプログラムを実行する制御部2と、2台の半導体ディスクをRAID1にてミラーリングの機能を実現するミラーコントローラ5と、ミラーコントローラ5や図示していない他のコントローラと接続するPCIなどの制御部バス6と、ミラーコントローラ5と2台の半導体ディスク3a、3bと接続するためのIDE(Integrated Drive Electronics)、SATA(Serial Advanced Technology Attachment)、SCSI(Small Computer System Interface)などのディスクI/Fバス4a、4bを備える。
【0021】
なお、ミラーコントローラ5は、制御LSIを実装し、ミラーリング制御をLSI内部のファームで実現する構成としてもよいし、制御部2内で動作するミラーコントローラドライバにて実現する構成としてもよい。
【0022】
(動作)
以上の構成により、実施例1の半導体ディスク装置1は以下のように動作する。なお、ミラーリング制御の基本動作としては、複数のディスクに同じデータを書き込む「ライト動作」、任意のディスクからデータをリードする「リード動作」、一方のディスクの故障を検出した場合に当該ディスクへのアクセスを停止して他方の正常なディスクからのみアクセスを行う「縮退動作」、故障したディスクを新しいディスクに交換した後に正常なディスクからデータをコピーしてもとの状態に戻す「リビルド動作」があるが、これらの動作はハードディスクドライブ(HDD)により構成したRAID1の動作と同様であるので、簡略化のためにその詳細な説明は省略する。
【0023】
次に、図2のリード動作のフローチャートを用いて、リードによりセクタエラーが検出された場合のセクタエラー修復動作を説明する。
【0024】
まず、リードは2台の半導体ディスク3a、3bのいずれか任意の半導体ディスクを選択し(ステップS01)、選択した半導体ディスク、本例では半導体ディスク3aへのリードを行い(ステップS02)、その応答がセクタエラーかどうか判断し(ステップS03)、セクタエラーがなければリードしたデータを図示しない上位装置へ転送して(ステップS06)、本処理を終了する。
【0025】
一方、セクタエラーがあった場合は、選択した半導体ディスク3aのリードしたセクタにECCで訂正できないビットエラーがあるため、まず、選択しなかった半導体ディスク3bから当該セクタのデータをリードし(ステップS04)、そのデータをセクタエラー応答した半導体ディスク3aに書き込み(ステップS05)、既にリードしたデータを上位に転送して(ステップS06)、本処理を終了する。
【0026】
以上のセクタエラー修復動作は、OSやAPによるリード時だけでなく、後述のベリファイ動作においても実施するのがよい。
【0027】
次に、図3の動作フローチャート図を用いて実施例1の半導体ディスク装置のベリファイ動作を説明する。まず、半導体ディスクのアドレスAdrを先頭アドレス、すなわち"0"とする(ステップS11)。
【0028】
そして、半導体ディスク3aに対してベリファイコマンドを実行し(ステップS12)、セクタエラー応答がないか確認し(ステップS13)、セクタエラーがあった場合は半導体ディスク3bからデータを読み出し(ステップS14)、そのデータを半導体ディスク3aに書き込む(ステップS15)。
【0029】
同様に、半導体ディスク3bに対してベリファイコマンドを実行し、セクタエラー応答がないか確認し、セクタエラーがあった場合は半導体ディスク3aからデータを読み出し、そのデータを半導体ディスク3bに書き込む(ステップS16〜S19)。
【0030】
アドレスAdrに対するベリファイが半導体ディスク3aおよび半導体ディスク3bについて終了すると、アドレスAdrが半導体ディスクの最終アドレスかどうか判定し(ステップS20)、最終アドレスでなければアドレスAdrをインクリメントし(ステップS21)、ステップS12に戻り、以降同様に半導体ディスクのベリファイを行う。一方、アドレスAdrが最終アドレスのときは本ベリファイ動作を終了する。
【0031】
なお、以上のベリファイ動作は半導体ディスク装置の動作中にバックグランドで行うが、例えば、1日一回など定期的に実施し、その際にベリファイ動作によるディスクアクセスは、OSやAPからのアクセスが数秒程度の一定時間ないような空き時間に実行するようにすればよい。
【0032】
また、故障した半導体ディスクを新しい半導体ディスクに交換した後に正常な半導体ディスクからデータをコピーしてもとの状態に戻す「リビルド」の際に始めてコピー元になる半導体ディスクについてもベリファイ動作を行い、セクタエラーを検出することによりリード時のセクタエラー修復動作が失敗するリスクを減らすことができる。
【0033】
以上のように、バックグラウンドにてリード動作を基本としたベリファイ動作を行うようにしたので、従来技術のように全面の書込み動作を伴うリフレッシュ動作を行った場合のように寿命が短くなることもない。
【0034】
(実施例1の効果)
以上の実施例1の半導体ディスク装置によれば、複数の半導体ディスクによりデータを記録する半導体ディスク装置において、複数の半導体ディスクによりミラーリング構成を成し、一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにしたので、高信頼性を維持したままで、処理量およびオーバーヘッドも少なくすることができる。
【実施例2】
【0035】
(構成)
実施例2の半導体ディスク装置では、簡単な処理でオーバーヘッドの少ないRAID1により半導体ディスクのミラーリング構成を形成するとともに、ベリファイ動作によるシステムへの処理負荷をさらに少なくするために、ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備えた構成としている。
【0036】
図4に実施例2の半導体ディスク装置の構成図を示す。同図に示したように、実施例2の半導体ディスク装置は、ミラーコントローラ5に、インターバル設定手段として、詳細後述のディスクテーブル11と、書換えテーブル12と、セクタエラー記録テーブル13と、インターバル補正テーブル14と、を新たに設けた構成となっている。その他の構成は、実施例1の半導体ディスク装置の構成と同様であるので、簡略化のためにその詳細な説明は省略する。
【0037】
図5(a)にディスクテーブル11の構成を示す。同図に示したように、ディスクテーブル11は、半導体ディスクごとに、半導体ディスク装置の記録方式を示す図5(b)の項番をメモリフラグに、搭載するウェアレベリングの種類を示す図5(c)の項番をウェアレベリングフラグに格納できる構成となっている。
【0038】
前記メモリフラグには、半導体ディスクの記録方式、すなわちSLC方式かMLC方式かに分け、MLC方式の場合はビット/セルの種類により、2ビット/セルの場合はMLC2、3ビット/セルの場合はMLC3、・・・、xビット/セルの場合はMLCxとして、それぞれ対応する項番を格納する。
【0039】
なお、図5(b)右欄のベリファイ実施時のデフォルトインターバルは記録方式ごとのベリファイ実施ンターバルの基準値であり、高密度の記録方式ほどインターバル時間を短くするように設定し、SLC方式のときは100秒とし、2ビット/セルのMLC方式のときは50秒、3ビット/セルのMLC方式のときは25秒、そしてxビット/セルのMLC方式の場合は100秒/xのインターバルでベリファイを実施することを示す。
【0040】
また、インターバル補正テーブル14は、図9に示したように、所定の期間、本例では1ヶ月および1年間に発生したセクタエラー回数に応じてデフォルトインターバルを補正する補正値を格納する。
【0041】
ところで、ウェアレベリングとは、半導体ディスク装置の特定のアドレスに書換えが集中した場合でも実際のメモリに対しては特定のブロックに書換えが集中しないようにする書換え回数を平準化するアルゴリズムであり、APデータなどのように運用中に書換えの行われているメモリブロックのみを対象にして平準化を行うダイナミックウェアレベリングと、OSプログラムなどのようにインストール以降書換えられないようなメモリブロックも含めて平準化を行うスタティックウェアレベリングがある。
【0042】
前記ウェアレベリングフラグには、それぞれの半導体ディスク装置が搭載する上記ウェアレベリングの種類に基づき図5(c)のテーブルに従ってそれぞれ対応する項番を格納する。
【0043】
なお、図5(c)右欄のベリファイ実施頻度の調整値は、前述のデフォルトインターバルをインターバル補正テーブル14にて補正したものを、さらにウェアレベリングの種類によりどのように調整するかを示している。例えば、スタティックウェアレベリングではあまり書換えられないエリアの平準化を行う場合であるので、ベリファイ実施頻度を少なくしインターバルを長くし、本例では10倍としスキップ回数Nsを10としている。
【0044】
図6(a)に実施例2の半導体ディスク装置の書換えテーブル12の例示図を示す。同図に示したように、書換えテーブル12は、半導体ディスク3a、3bそれぞれについて、半導体ディスクの全領域をエリアNo.1〜nのように半導体ディスクのメモリブロックの書換え単位に分割し、それぞれのエリアごとに最後に書き込みがあった日時を保持する。
【0045】
なお、メモリブロックの書換え単位は、使用するメモリや半導体ディスクの方式により16KB〜128KBとするが一般的であるが、その他の書換え単位としても勿論よい。
【0046】
また、書換えテーブル12は、頻繁に更新されるテーブルであるため、通常はプログラム用メモリ中に実装し、運用終了時に半導体ディスク上のファイルに保存し、次の起動時にプログラム用メモリにロードするようにするのがよい。
【0047】
図6(b)に実施例2の半導体ディスク装置のセクタエラー記録テーブル13の構成図を示す。同図に示したように、セクタエラー記録テーブル13は、半導体ディスク3a、3bそれぞれについて、m個の記録を保持できるテーブルを用意し、セクタエラーが発生した場合にその発生日時を順次保持する。
【0048】
なお、セクタエラー記録テーブル13は、頻繁には更新されないテーブルであるので、図4の構成図では便宜上半導体ディスクとは別の構成として示しているが半導体ディスク上のファイルとして実装してもよい。
【0049】
(動作)
以上の構成により実施例2の半導体ディスク装置は、以下のように動作する。まず、初期設定として、図5(b)、(c)により半導体ディスクの記録方式及びウェアレベリングに対応する項番をディスクテーブル11に設定する。なお、この設定はオペレータが専用の設定用ツールによりあらかじめ設定するようにしてもよいし、起動時に制御部2にて記憶方式等の設定をリードして設定するようにしてもよい。
【0050】
また、初期設定として、書換えテーブル12の最終更新日時及びセクタエラー記録テーブル13のセクタエラー発生日時は、日時が指定されていないことを示すため、「0」などの値を書き込んでおく。
【0051】
そして、運用中の書換えテーブル12の更新は、OSやAPからの半導体ディスクへの書込みがあったときに、該当するエリアに更新日時を書き込む。
【0052】
そして、運用中のセクタエラー記録テーブル13の更新は、OSやAPからのリード動作によりセクタエラーを検出したときまたはベリファイ動作によりセクタエラーを検出した場合にセクタエラー記録テーブル13に発生日時を追加する。
【0053】
そして、セクタエラー記録テーブル13がフルになった場合はNo.1からサイクリックにテーブルを使用し、直近のセクタエラーの発生日時の情報が残るようにする。
【0054】
次に、実施例2のベリファイ動作について、図7のベリファイ動作フローチャートを用いて以下詳細に説明する。なお、このベリファイ動作は半導体ディスク3aと半導体ディスク3bそれぞれ独立して動作させる。
【0055】
運用を開始すると、まず、半導体ディスク毎に、それまでのベリファイ実施の際にファイルとして半導体ディスクに保存されたベリファイを行うアドレスを示す「ベリファイアドレス」とそれまでに実施されたベリファイの回数を示す「ベリファイカウンタ」を読み出し、レジスタAdrとレジスタcntに格納する(ステップS31)。
【0056】
なお、最初のシステム構成時のベリファイアドレスは半導体ディスクの先頭領域を示す「0」であり、ベリファイ回数も「0」のため、Adr=0、cnt=0と設定される。
【0057】
次に、詳細後述のベリファイを行うインターバルの設定を実施し(ステップS32)、次に、アドレスAdrについて詳細後述のベリファイを実施し(ステップS33)、Adrをインクリメントする(ステップS34)。
【0058】
そして、Adrが半導体ディスク装置の最終アドレスを超えた場合は(ステップS35)、初期値の「0」に戻し、cntをインクリメントする(ステップS36)。
【0059】
そして、運用を終了する場合は(ステップS37)、Adrとcntの値をそれぞれ半導体ディスク装置の「ベリファイアドレス」と「ベリファイカウンタ」に保存して終了する(ステップS38)。
【0060】
一方、運用を継続する場合は、直近のステップS32のインターバル設定から所定の時間経過したかどうかを確認し、所定の時間を経過していると判定した場合は(ステップS39)、ステップS32に戻り、インターバル設定を最新の状態にし、以降同様に行う。ステップS39にて所定の時間を経過していないと判定した場合は、ステップS33に戻り、ベリファイ動作を継続して実施し、以降同様に行う。
【0061】
なお、前記所定の時間は例えば24時間などの時間とし、連続運用を行う装置でも、1日ごとにインターバル設定を更新する。
【0062】
次に、前述ステップS32のインターバル設定の詳細な動作を図8の動作フローチャートを用いて説明する。まず、ディスクテーブル11のメモリフラグ、すなわち半導体ディスクの記録方式を示す項番に対応する図5(b)のデフォルトインターバルを取得する(ステップS41)。
【0063】
例えば、2ビット/セルのMLCの場合で項番が"2"の場合では、デフォルトインターバルとしてTc=50秒を取得する。
【0064】
次に、セクタエラー記録テーブル13を参照し、直近1ヶ月と1年のセクタエラー回数を集計する(ステップS42)。
【0065】
そして、インターバルを図9のインターバル補正テーブル14に従って補正し、当該半導体ディスク装置の最終的なインターバル時間を決定する(ステップS43)。
【0066】
例えば、セクタエラー記録テーブル13を参照した結果、2010年10月現在、図6(b)の半導体ディスク3aのように、直近1ヶ月にセクタエラーが1回発生し、1年間に4回セクタエラーが発生していた場合では、前述のデフォルトインターバルTcを1/2にし、Tc*=25秒と補正する。
【0067】
次に、以上のように補正されたインターバルTc*ごとに実施するベリファイの詳細動作を図10の動作フローチャートを用いて説明する。まず、ステップS43で設定した当該半導体ディスク装置のインターバル時間Tc*(=25秒)の間、ウェイトする(ステップS51)。
【0068】
次に、ディスクテーブル11のウェアレベリングフラグを参照しウェアレベリングを確認し、ウェアレベリング無しの場合や(ステップS52)、ダイナミックウェアレベリングで且つ書換えテーブル12を参照しAdrを含むエリアの書換えが例えば最近1年間行われていない場合は(ステップS53)、ステップS55のベリファイの実動作に進む。
【0069】
また、ダイナミックウェアレベリングで且つ書換えテーブル12を参照し例えば最近1年に書換えが行われている場合やスタティックウェアレベリングの場合は、ベリファイの実動作をインターバルTc間ごとの図5(c)のスキップ回数Ns回数ごとに一回行うようにするために、cntの値をスキップ回数Nsで割った余りが0かどうか調べ(ステップS54)、0の場合はステップS55のベリファイの実動作に進み、0以外の場合は処理を終了する。
【0070】
なお、ステップS55〜S58のベリファイの実動作とセクタエラー時の動作は実施例1の図3のステップS12〜S15またはステップS16〜S19と同様であるので簡略化のためにその説明を省略する。
【0071】
(実施例2の効果)
以上の実施例2の半導体ディスク装置によれば、ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにしたので、実施例1の効果に加え、ベリファイを実施する頻度を必要最小限とすることができ、システムへの処理負荷を必要最小限にすることができる。
【実施例3】
【0072】
(構成)
実施例3の半導体ディスク装置では、図11の構成図に示したように、実施例1の構成に、ベリファイ実施有無判定手段として、所定の時間間隔の半導体ディスクのリードおよびライトのアクセス回数を格納するアクセス回数集計テーブル21と、当該アクセス回数集計テーブル21に基づいて当該時間帯にてベリファイを実施するか実施ないかを判定して当該判定結果を格納するベリファイ実施有無設定テーブル22と、を新たに設け、ベリファイ実施有無設定テーブル22の前記判定結果に基づいてベリファイを実施する構成としている。その他の構成は、実施例1の構成と同様であるので、その詳細な説明は省略する。
【0073】
図12はアクセス回数集計テーブル21の構成例を示す図である。同図に示したように、アクセス回数集計テーブル21は、曜日ごとに10分毎のアクセス回数を保持できる構成となっている。なお、上記時間間隔は10分より短くしてもよいし、逆に長くしても勿論よい。また、アクセス回数集計テーブル21は、頻繁に更新やリードを行わないため、半導体ディスク上のファイルとして実装してもよい。
【0074】
図15は、ベリファイ実施有無設定テーブル22の構成例を示す図である。同図に示したように、ベリファイ実施が可能な時間帯・曜日を「○」で示し、不可の時間帯・曜日を「×」として格納できるようになっている。なお、"○"を"1"とし「×」を"0"、或いはその逆にして格納するようにしてもよい。
【0075】
(動作)
以上の構成により、実施例3の半導体ディスク装置は、以下のように動作する。この動作を図13のアクセス回数集計テーブル21の更新動作フローチャートおよび図14のベリファイ動作の動作フローチャートを用いて以下詳細に説明する。
【0076】
まず、図13に示したように、装置起動後、アクセス回数集計を行う時間間隔となる10分間、ウェイトし(ステップS61)、この間の半導体ディスク(3a、3b)へのアクセス回数を計数する(ステップS62)。なお、単位時間あたりの半導体ディスクへのアクセス回数の計数は、汎用OSではライブラリ等でファイルアクセス回数の計数機能として提供されているので、当該機能を用いればよい。
【0077】
そして、10分間のアクセス回数をアクセス回数集計テーブル21の該当する時刻・曜日の欄に格納して更新する(ステップS63)。なお、アクセス回数集計テーブル21の該当する欄を更新する際に、例えば、今回の計数回数は1/4し、該当する欄にすでに格納されていた値を3/4にし、これらを加算して当該欄に上書きするようにすれば、直近の1週間前のアクセス回数にてスムージングすることができる。
【0078】
或いは、アクセス回数集計テーブル21を当該月分格納できる構成とし、今回の計数回数は1/4し、該当する欄にすでに格納されていた値を3/4にし、これらを加算して当該欄に上書きするようにすれば、直近の1月前のアクセス回数にてスムージングすることができる。
【0079】
次に、アクセス回数集計テーブル21を用いて、ベリファイ実施タイミングを調整する動作について図14の動作フローチャートを用いて以下説明する。
【0080】
まず、アクセス回数集計テーブル21より、どの時間帯でベリファイ実施が可能か否かの判定結果を格納するベリファイ実施有無設定テーブル22を作成する(ステップS71)。
【0081】
すなわち、図12のアクセス回数集計テーブル21から、例えば上位20%に入る最小のアクセス回数を求めて基準回数Nmとして、この基準回数Nm以上をベリファイ実施不可の「×」としその他を「○」としてベリファイ実施有無設定テーブル22を作成する。図15の例では、アクセス回数集計テーブル21から基準回数Nmが900回として求められ、当該基準回数900回にてベリファイ実施可否を判定して当該判定結果を「○」「×」にて格納した例となっている。
【0082】
なお、基準回数Nmは半導体ディスク装置の運用条件などで調整し、セクタエラー発生が少なくなる運用条件では、例えば上位30%に入る最小のアクセス回数を基準回数Nmとしてベリファイ実施可否を判定するようにし、ベリファイ実施頻度を少なくするのがよい。
【0083】
そして、10分毎の区切りの時間までウェイトした後(ステップS72)、現在、ベリファイ未実施の状態で「○」の時間帯になった場合は(ステップS73)、ベリファイ動作を起動する(ステップS74)。なお、ステップS74のベリファイ動作は、図3にて説明した実施例1の半導体装置のベリファイ動作と同様に行うようにすればよい。一方、ベリファイ動作中で「×」の時間帯になった場合は(ステップS75)、ベリファイ動作を終了する(ステップS76)。
【0084】
そして、運用終了でないときは(ステップS78)、ベリファイ実施可否設定テーブル15を作成してから所定の期間、例えば24時間経過した場合は、ステップS71に戻り、再度ベリファイ実施可否設定テーブル15の作成を行い、以下同様に行い、一方、所定の期間を経過していないときは、ステップS72に戻り、10分間ごとのベリファイ実施可否設定テーブル15に基づいたベリファイ実施動作を繰り返す。ステップS78にて運用終了と判定したときは、本処理を終了する。
【0085】
なお、以上の実施例の説明では、実施例1の半導体ディスク装置の構成にアクセス回数集計テーブル21を設けた例を説明したが、図4の実施例2の半導体ディスクの構成にアクセス回数集計テーブル21およびベリファイ実施有無設定テーブル22を設け、ベリファイ実施インターバルを、半導体ディスクの記録方式、書換えた回数、搭載するウェアレベリングの種類に基づいて調整するとともに、所定の時間ごとのアクセス回数によりベリファイ実施の有無をさらに調整するようにしてもよい。
【0086】
また、以上の実施例の説明では、ベリファイ実施可否設定テーブル15を設けるように説明したが、ベリファイ実施可否設定テーブル15を設けることなく、アクセス回数集計テーブル21に基づいて、都度該当する時間帯のアクセス回数が基準回数Nmより多いかどうかを判定してベリファイ実施の可否を判定するようにしてもよい。
【0087】
(実施例3の効果)
以上の実施例3の半導体ディスク装置によれば、所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、当該判定結果に基づいて、ベリファイを実施するようにしたので、ベリファイ動作の実施によるOSやAPからのディスクアクセスの遅延の発生を最小限とすることができる。
【0088】
《その他の変形例》
なお、以上の実施例の説明では、NANDフラッシュメモリを用いた半導体ディスク装置を例として説明したが、書込みにより寿命が短くなりリードエラーが発生し易いその他の不揮発性メモリを使用したディスク装置にも本発明を適用することができる。
【産業上の利用可能性】
【0089】
以上述べたように、本発明は不揮発性の複数の半導体ディスクによりデータを記録する半導体ディスク装置に広く用いることができる。
【符号の説明】
【0090】
1 半導体ディスク装置
2 制御部
3a、3b 半導体ディスク
4a、4b ディスクI/F#1、#2
5 ミラーコントローラ
11 ディスクテーブル
12 書換えテーブル
13 セクタエラー記録テーブル
14 インターバル補正テーブル
21 アクセス回数集計テーブル
22 ベリファイ実施有無設定テーブル
【特許請求の範囲】
【請求項1】
複数の半導体ディスクによりデータを記録する半導体ディスク装置において、
複数の半導体ディスクによりミラーリング構成を成し、
一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、
バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにしたことを特徴とする半導体ディスク装置。
【請求項2】
前記ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、
前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにしたことを特徴とする請求項1記載の半導体ディスク装置。
【請求項3】
前記インターバル設定手段は、
半導体ディスクの記録方式の種類とウェアレベリングの種類を格納するディスクテーブルと、
所定のエリアごとに最後に書き込みがあった日時を格納する書換えテーブルと、
セクタエラーの発生日時を記録するセクタエラー記録テーブルと、
所定の期間のセクタエラー回数に応じた補正値を格納するインターバル補正テーブルを、半導体ディスクごとに備え、
前記半導体ディスクの記録方式の種類によりデフォルトインターバルを設定し、前記補正値により前記デフォルトインターバルを補正してインターバルを設定し、ウェアレベリングの種類および所定の期間の書換えの有無により前記補正後のインターバルをさらに調整するようにしたことを特徴とする請求項2記載の半導体ディスク装置。
【請求項4】
前記補正後のインターバルの調整は、前記補正後のインターバルごとに行うベリファイ動作を、ウェアレベリングの種類および所定の期間中の書換えの有無に応じて設定したスキップ回数分、スキップすることによって調整するようにしたことを特徴とする請求項3記載の半導体ディスク装置。
【請求項5】
所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、
前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、
当該判定結果に基づいて、ベリファイを実施するようにしたことを特徴とする請求項1または請求項2記載の半導体ディスク装置。
【請求項6】
前記ベリファイ実施有無判定手段は、前記アクセス回数集計テーブルを参照し当該時間帯のアクセス回数により当該時間帯のベリファイを実施するか否かを設定しておくベリファイ実施有無設定テーブルを設け、
前記ベリファイ実施有無設定テーブルの設定値に基づいてベリファイを実施するようにしたことを特徴とする請求項5記載の半導体ディスク装置。
【請求項1】
複数の半導体ディスクによりデータを記録する半導体ディスク装置において、
複数の半導体ディスクによりミラーリング構成を成し、
一の半導体ディスクの任意のアドレスにてセクタエラーを検出したときに、他の半導体ディスクから当該アドレスのデータを読み出して、前記一の半導体ディスクの前記アドレスに上書きするとともに、
バックグラウンドにて一の半導体ディスクの全アドレスのセクタエラーを検出しセクタエラーが検出されたときは他の半導体ディスクから当該アドレスのデータを読み出して前記一の半導体ディスクの前記アドレスに上書きするベリファイ動作を全ての半導体ディスクについて行うようにしたことを特徴とする半導体ディスク装置。
【請求項2】
前記ベリファイ動作を行うインターバルを、半導体ディスクの記録方式の種類、所定の期間の書換えの有無、搭載するウェアレベリングの種類、所定の期間のセクタエラー回数に基づいて設定するインターバル設定手段を備え、
前記インターバル設定手段により設定されたインターバルにて前記ベリファイ動作を行うようにしたことを特徴とする請求項1記載の半導体ディスク装置。
【請求項3】
前記インターバル設定手段は、
半導体ディスクの記録方式の種類とウェアレベリングの種類を格納するディスクテーブルと、
所定のエリアごとに最後に書き込みがあった日時を格納する書換えテーブルと、
セクタエラーの発生日時を記録するセクタエラー記録テーブルと、
所定の期間のセクタエラー回数に応じた補正値を格納するインターバル補正テーブルを、半導体ディスクごとに備え、
前記半導体ディスクの記録方式の種類によりデフォルトインターバルを設定し、前記補正値により前記デフォルトインターバルを補正してインターバルを設定し、ウェアレベリングの種類および所定の期間の書換えの有無により前記補正後のインターバルをさらに調整するようにしたことを特徴とする請求項2記載の半導体ディスク装置。
【請求項4】
前記補正後のインターバルの調整は、前記補正後のインターバルごとに行うベリファイ動作を、ウェアレベリングの種類および所定の期間中の書換えの有無に応じて設定したスキップ回数分、スキップすることによって調整するようにしたことを特徴とする請求項3記載の半導体ディスク装置。
【請求項5】
所定の時間ごとの半導体ディスクのアクセス回数を格納するアクセス回数集計テーブルと、
前記アクセス回数集計テーブルの当該時間帯のアクセス回数により当該時間帯のベリファイ動作を実施するか否かを判定するベリファイ実施有無判定手段を備え、
当該判定結果に基づいて、ベリファイを実施するようにしたことを特徴とする請求項1または請求項2記載の半導体ディスク装置。
【請求項6】
前記ベリファイ実施有無判定手段は、前記アクセス回数集計テーブルを参照し当該時間帯のアクセス回数により当該時間帯のベリファイを実施するか否かを設定しておくベリファイ実施有無設定テーブルを設け、
前記ベリファイ実施有無設定テーブルの設定値に基づいてベリファイを実施するようにしたことを特徴とする請求項5記載の半導体ディスク装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【公開番号】特開2012−123641(P2012−123641A)
【公開日】平成24年6月28日(2012.6.28)
【国際特許分類】
【出願番号】特願2010−274006(P2010−274006)
【出願日】平成22年12月8日(2010.12.8)
【出願人】(000000295)沖電気工業株式会社 (6,645)
【Fターム(参考)】
【公開日】平成24年6月28日(2012.6.28)
【国際特許分類】
【出願日】平成22年12月8日(2010.12.8)
【出願人】(000000295)沖電気工業株式会社 (6,645)
【Fターム(参考)】
[ Back to top ]