SSDの空き領域が枯渇している、すなわちSSDコントローラに有効なデータを全く持っていないと認識されているNAND型フラッシュメモリの物理ブロック(フリーブロック)が枯渇している場合、そのSSDに書き込みを行うと、SSDコントローラに有効なデータを持っていると認識されているNAND型フラッシュメモリの物理ブロック(アクティブブロック)上の無効なデータ領域を検索し、有効なデータを整理(NAND整理)して新たなフリーブロックを確保する処理に負荷がかかり、書き込みのパフォーマンスが著しく劣化してしまう。
また、NAND型フラッシュメモリに無効データが多い、すなわちSSD上での空き領域が枯渇している状況で書き込みが行われると、特定の領域に書き込みが集中したり、頻繁に発生するNAND整理でNAND型フラッシュメモリの余分な消去が発生したりするため、SSDの信頼性が著しく劣化する可能性がある。
以下、実施形態について図面を参照して説明する。以下に示す幾つかの実施形態は、本発明の技術思想を具体化するための装置および方法を例示したものであって、構成部品の形状、構造、配置などによって、本発明の技術思想が特定されるものではない。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
[第1の実施形態]
[1.メモリシステムの構成]
図1は、第1の実施形態に係るメモリシステム1のブロック図である。メモリシステム1は、ホスト装置(情報処理装置)2と、外部記憶装置としての不揮発性記憶装置3とを備えている。不揮発性記憶装置3として、本実施形態では、SSD(Solid State Drive)を例に挙げて説明する。
SSD3は、インターフェースコントローラ10、SSDコントローラ(制御回路)11、メインメモリとしてのDRAM12、不揮発性記憶媒体としてのNAND型フラッシュメモリ13、及びこれらを接続するバスを備えている。
インターフェースコントローラ10は、ホスト装置2とのインターフェース処理を実行する。インターフェースコントローラ10は、例えばSATA(Serial Advanced Technology Attachment)規格に準拠した通信インターフェースでホスト装置2に接続され、SATA規格に準拠したインターフェース処理を実行する。インターフェース規格については、SATA以外に、SAS(Serial Attached SCSI)やUSB(universal serial bus)などを用いてもよい。
SSDコントローラ11は、SSD3全体の各種動作を制御する。SSDコントローラ11は、NAND型フラッシュメモリ13に格納されているプログラムをDRAM12に読み出して所定の処理を実行することにより、各種テーブルをDRAM12に作成する。また、SSDコントローラ11は、ホスト装置2から書き込み命令、読み出し命令、消去命令などを受信し、これらの命令に応答してNAND型フラッシュメモリ13に所定の処理を実行する。
NAND型フラッシュメモリ13は、(n+1)個のNANDメモリチップChip0〜Chipnによって構成されている。nは、0以上の整数である。NANDメモリチップChip0〜Chipnは、並列動作が可能なように構成されていてもよい。各NANDメモリチップは、複数のフラッシュメモリセルからなるメモリセルアレイ、及び周辺回路(例えば、ロウデコーダ、カラムデコーダ、ページバッファ、データキャッシュなど)を備えている。NAND型フラッシュメモリ13のメモリセルアレイは、複数のブロックから構成され、各ブロックは、複数のページから構成されている。ブロックは、データ消去の最小単位であり、ページは、データ書き込み及び読み出しの最小単位である。
NAND型フラッシュメモリ13のメモリセルアレイを構成するメモリセルトランジスタは、半導体基板上に形成された積層ゲート構造を備えたMOSFET(Metal Oxide Semiconductor Field Effect Transistor)から構成される。積層ゲート構造は、半導体基板上にゲート絶縁膜を介在して形成された電荷蓄積層(浮遊ゲート電極)、及び浮遊ゲート電極上にゲート間絶縁膜を介在して形成された制御ゲート電極を含んでいる。メモリセルトランジスタは、浮遊ゲート電極に蓄えられる電子の数に応じて閾値電圧が変化し、この閾値電圧の違いに応じてデータを記憶する。メモリセルトランジスタは、1ビットを記憶するように構成されていてもよいし、多値(2ビット以上のデータ)を記憶するように構成されていてもよい。また、メモリセルトランジスタは浮遊ゲート電極を有する構造に限らず、MONOS(Metal-Oxide-Nitride-Oxide-Silicon)型など、電荷蓄積層としての窒化界面に電子をトラップさせることで閾値電圧を調整可能な構造であってもよい。MONOS型のメモリセルトランジスタについても同様に、1ビットを記憶するように構成されていてもよいし、多値を記憶するように構成されていてもよい。また、不揮発性記憶媒体として、特開2010−161199や特開2011−29586に記述されるような3次元的にメモリセルが配置された半導体記憶媒体であってもよい。
DRAM12は、ホスト装置2とNAND型フラッシュメモリ13との間でのデータ転送用キャッシュ、及びSSDコントローラ11の作業用メモリなどとして機能する。DRAM12の作業領域用メモリに記憶されるものとしては、起動時などにNAND型フラッシュメモリ13から読み出される管理テーブルや関数fなどがある。DRAM12は、管理テーブルを格納する記憶領域12A、及び関数fを格納する記憶領域12Bを含んでいる。管理テーブル及び関数fについての詳細は後述する。メインメモリとしては、DRAM以外のメモリを用いてもよい。メインメモリとしては、ランダムアクセスメモリ(RAM)を用いることが望ましい。メインメモリとしては、DRAMの他に、SRAM、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PCRAM(Phase Change Random Access Memory)などを用いてもよい。また、上記メインメモリは、独立したチップとしてSSD基板上に実装してもよいし、組み込み型メモリとしてSSDコントローラ内に実装してもよい。
図2は、DRAM12に格納される管理テーブルの一部を説明する図である。ホスト装置2がSSD3へ命令を送信すると、インターフェースコントローラ10を介してその命令がSSDコントローラ11に送られる。SSDコントローラ11は、受信した命令を処理する。その際、SSDコントローラ11は、DRAM12上の管理テーブルを参照することで、適宜ホスト装置2より受信した論理アドレスを物理アドレスに変換する。論理アドレスとは、ホスト装置2で管理しているアドレスであり、物理アドレスとは、SSD3で管理している実アドレスである。
図2に示すように、管理テーブルは、フリーブロックテーブル、アクティブブロックテーブル、及びアクティブページテーブルを含む。物理ブロックID及び物理ページアドレスは物理アドレスに含まれる。アクティブブロックテーブルは、物理ブロックIDと論理アドレスとを結び付けて管理しており、アクティブブロックテーブルに登録されている物理ブロック(アクティブブロック)は、少なくともSSDコントローラ11にとっては有効なデータを保持していることになる。フリーブロックテーブルは、論理アドレスに結び付けられていない物理ブロックを管理している。フリーブロックテーブルに登録されている物理ブロック(フリーブロック)は、論理アドレスに結び付けられていないため、有効なデータを保持していないことになる。
アクティブページテーブルは、物理ページアドレスと論理アドレスとを結び付けて管理しており、アクティブページテーブルに登録されている物理ページ(アクティブページ)は、少なくともSSDコントローラ11にとっては有効なデータを保持していることになる。また、アクティブページテーブルに登録されている物理ページは、これが属する物理ブロックIDと関連付けられている。なお、管理テーブルで管理されている論理アドレスは、SSD3で管理できる最小データサイズ又はそれより大きいデータサイズのアドレスである。
次に、ホスト装置2の構成について説明する。図3は、ホスト装置2のブロック図である。CPU(制御回路)20がホスト装置2における中央演算処理装置であり、ホスト装置2における種々の演算及び制御はCPU20によって行われる。CPU20はサウスブリッジ21を介してSSD3や、DVD−ROMなどの光学ドライブ31の制御を行う。CPU20は、ノースブリッジ22を介して、メインメモリとしてのDRAM23の制御を行う。
ユーザは、キーボード29やマウス30などの入力装置を通してホスト装置2の制御を行い、キーボード29やマウス30からの信号はUSB(Universal Serial Bus)コントローラ28及びサウスブリッジ21を介してCPU20で処理される。CPU20は、ノースブリッジ22及び表示コントローラ24を介してディスプレイ(表示装置)25に画像データやテキストデータなどを送る。ユーザは、ディスプレイ25を介してホスト装置2からの画像データやテキストデータなどを視認することができる。
CPU20は、BIOS(Basic Input/Output System)−ROM26に格納されたBIOSを実行する。BIOSは、ハードウェア制御のためのプログラムである。その他、CPU20は、サウスブリッジ21を介してLAN(Local Area Network)コントローラ27を制御する。
DRAM23は、CPU20の作業用メモリとして機能し、OS(Operating System)
を格納する記憶領域23A、最適化プログラムを格納する記憶領域23B、最適化フラグを格納する記憶領域23C、及び関数fを格納する記憶領域23Dを含んでいる。OSは、一般的に知られているように、ホスト装置2の入出力装置を管理し、ディスクやメモリを管理し、ソフトウェアがホスト装置2のハードウェアを利用可能にするための制御を行うなど、ホスト装置2全体を管理するプログラムである。最適化プログラム及び最適化フラグについての詳細は後述する。OS、最適化プログラム、及び関数fは、ホスト装置2が電源オフとなっている時は、図4に示すようにSSD3のNAND型フラッシュメモリ13に格納されているが、ホスト装置2の起動時又はプログラム起動時に、NAND型フラッシュメモリ13からDRAM23にロードされる。NAND型フラッシュメモリ13は、OSを格納する記憶領域13A、最適化プログラムを格納する記憶領域13B、関数fを格納する記憶領域13C、及び管理テーブルを格納する記憶領域13Dを含んでいる。また、NAND型フラッシュメモリ13は、ユーザデータを格納する記憶領域(図示せず)を含んでいる。
次に、メモリシステム1の構成例について説明する。メモリシステム1は、例えば、デスクトップコンピュータやノートブック型のポータブルコンピュータとして実現し得る。図5は、メモリシステム1としてのデスクトップコンピュータの概略図である。
デスクトップコンピュータ1は、情報処理装置本体40、ディスプレイ25、キーボード29、及びマウス30などを備えている。情報処理装置本体40は、主要なハードウェアが搭載されたマザーボード41、SSD3、及び電源装置42などを備えている。SSD3は、SATAケーブルを介してマザーボード41に物理的に接続され、マザーボード41上に実装されたサウスブリッジを介して、同じくマザーボード上に実装されたCPU20に電気的に接続されている。電源装置42は、デスクトップコンピュータ1で使用される各種電源を発生し、電源ケーブルを介してマザーボード41やSSD3などに電源を供給する。
図6は、メモリシステム1としてのポータブルコンピュータの概略図である。ポータブルコンピュータ1は、情報処理装置本体50、及びディスプレイユニット51から構成されている。ディスプレイユニット51は、例えばLCD(Liquid Crystal Display)で構成される表示装置25が組み込まれている。
ディスプレイユニット51は、情報処理装置本体50に対し、この本体50の上面が露出される開放位置と本体2の上面を覆う閉塞位置との間を回動自由に取り付けられている。本体2は薄い箱形の筐体を有しており、その上面には、電源スイッチ52、キーボード29、タッチパッド53等が配置されている。また、本体50も、デスクトップコンピュータと同様に、SSD3、マザーボード、及び電源装置などを備えている。
その他、メモリシステム1はスチルカメラ或いはビデオカメラなどの撮像装置などであってもよいし、ゲーム機器やカーナビゲーションシステムなどであってもよい。
[2.動作]
<2−1.書き込み動作>
図7は、SSD3の書き込み動作を示すフローチャートである。SSD3は、ホスト装置2から書き込み命令を受信する(ステップS10)。書き込み命令には、書き込みコマンド、論理アドレス、及びデータが含まれる。
続いて、SSDコントローラ11は、DRAM12からフリーブロックテーブルを読み出し、フリーブロックテーブルから物理ブロックIDを取得する(ステップS11)。フリーブロックが存在しない場合は、後述するNAND整理処理を行い、物理ブロックIDを取得する(ステップS13,S12)。
続いて、SSDコントローラ11は、取得した物理ブロックIDに対応するフリーブロックに対してプログラム処理を行う(ステップS14)。続いて、SSDコントローラ11は、プログラムされた物理ブロックIDをフリーブロックテーブルから削除する(ステップS15)。続いて、SSDコントローラ11は、アクティブブロックテーブル及びアクティブページテーブルを更新する(ステップS16)。すなわち、プログラムされたブロックに対応する論理アドレス及び物理ブロックIDをアクティブブロックテーブルに追加し、さらに、論理アドレス、物理ブロックID及び物理ページアドレスをアクティブページテーブルに追加する。
なお、ステップS14のプログラム処理の前に、書き込み対象の物理ブロックについて消去を行ってもよい。
<2−2.NAND整理処理>
次に、SSD3のNAND整理処理について説明する。図8は、SSD3のNAND整理処理を示すフローチャートである。ある物理ブロックに対し、その物理ブロックに含まれる全ページのうちアクティブページテーブルに含まれているアクティブページ(有効ページ)は論理アドレスに対応付けられている。一方、ある物理ブロックに含まれる全ページが有効ページであるとは限らず、有効ページに該当しないページ(無効ページ)は論理アドレスに対応付けられていない。物理ブロックは無効ページの分だけデータに空きがあることになり、これら無効ページと有効ページとを分類することでフリーブロックを確保することができる。
まず、SSDコントローラ11は、列番号i=0、空き領域累積量s=0に設定する(ステップS20)。続いて、SSDコントローラ11は、DRAM12からアクティブブロックテーブルの先頭行を読み出し、物理ブロックIDを取得する(ステップS21)。ステップS21にて取得した物理ブロックIDを現在物理ブロックIDと呼ぶ。続いて、SSDコントローラ11は、DRAM12からアクティブページテーブルを読み出し、現在物理ブロックIDに含まれる全物理ページアドレスを取得する(ステップS22)。
続いて、SSDコントローラ11は、現在物理ブロックのうち無効ページのサイズを算出し、この無効ページサイズを変数vに代入する(ステップS23)。続いて、SSDコントローラ11は、“v>0”であるか否かを判定し(ステップS24)。“v>0”である場合は、現在物理ブロックIDを整理対象ブロックリストに追加する(ステップS26)。一方、ステップS24において無効ページがないと判定された場合、SSDコントローラ11は、現在物理ブロックIDをインクリメントして、作業対象を次の物理ブロックIDに移す(ステップS25)。
続いて、SSDコントローラ11は、空き領域累積量sに変数vを加算する(ステップS27)。続いて、SSDコントローラ11は、空き領域累積量sが物理ブロックサイズに到達したか否か、すなわちこれまでに取得した無効ページのサイズ総量が物理ブロックサイズに到達したか否かを判定する(ステップS28)。空き領域累積量sが物理ブロックサイズに到達してない場合、列番号iに1を加算した後(ステップS25)、ステップS21以下の処理を繰り返す。
一方、空き領域累積量sが物理ブロックサイズに到達した場合、SSDコントローラ11は、整理対象ブロックリストの全物理ブロックから全アクティブページのデータを読み出し、この読み出したデータをDRAM12に格納する(ステップS29)。続いて、SSDコントローラ11は、整理対象ブロックリストの全物理ブロックに対して消去処理を行う(ステップS30)。続いて、SSDコントローラ11は、アクティブブロックテーブル、フリーブロックテーブル、及びアクティブページテーブルを更新する(ステップS31)。すなわち、消去処理が行われた物理ブロックをアクティブブロックテーブルから削除してフリーブロックテーブルに追加し、また、データが読み出されたアクティブページをアクティブページテーブルから削除する。
続いて、SSDコントローラ11は、DRAM12に格納された全アクティブページのデータをフリーブロックにプログラムする(ステップS32)。続いて、SSDコントローラ11は、アクティブブロックテーブル、フリーブロックテーブル、及びアクティブページテーブルを更新する(ステップS31)。すなわち、プログラムされた物理ブロックをフリーブロックテーブルから削除してアクティブブロックテーブルに追加し、また、プログラムされた物理ページをアクティブページテーブルに追加する。
このように、NAND整理はNAND型フラッシュメモリ13の読み出し動作、消去動作、及びプログラム動作を多数伴うため、多くの時間を要する。よって、フリーブロックが枯渇した状況で書き込みを行うとNAND整理が発生するため、ホスト装置2からみた書き込み処理速度が低下し、かつNAND型フラッシュメモリ13の信頼性が低下する可能性がある。
なお、ステップS30の消去処理はステップS13のNAND整理内では行わずに、ステップS14の書き込み動作直前に行うようにしてもよい。
<2−3.削除通知処理>
次に、SSD3の削除通知処理について説明する。INCITS ATA8-ACSで採用されたdataset management command(通称、トリムコマンド)がある。このトリムコマンドは、削除通知として機能する。削除通知処理は、ホスト装置上でデータが削除された場合、削除されたデータの存在する論理アドレス空間をSSDに通知することにより、以後SSD上でもその領域を空き領域として扱うことができる方式である。削除通知を受信した場合には、SSDは管理テーブルにアクセスして該当領域を無効化する処理を行う。無効化処理では、SSDの管理テーブルを書き換えて該当領域が無効であることにすればよく、実際に該当領域のデータそのものを消さなくてもよいし、消してもよい。
図9は、SSD3の削除通知処理を示すフローチャートである。SSD3は、ホスト装置2から削除通知を受信する(ステップS40)。削除通知には、削除コマンド、及び論理アドレスが含まれる。
続いて、SSDコントローラ11は、DRAM12からアクティブページテーブルを読み出す(ステップS41)。続いて、SSDコントローラ11は、削除通知によって指定された削除対象となる論理アドレス領域に対応する全ページのうち、ページ内全領域が削除通知対象である全ページをアクティブページテーブルから削除する(ステップS42)。
続いて、SSDコントローラ11は、DRAM12からアクティブブロックテーブルを読み出す(ステップS43)。続いて、SSDコントローラ11は、アクティブブロックテーブルを参照し、アクティブページテーブルに物理ブロックIDを持たない物理ブロックをアクティブブロックテーブルから削除しフリーブロックテーブルに追加する(ステップS44)。このように、SSD3は、NAND整理以外に、削除通知処理によってもフリーブロックを確保することができる。
なお、ホスト装置2が削除通知を行うデータサイズは、SSD3が管理テーブルで管理している最小データサイズ以上であればよい。
<2−4.読み出し動作>
次に、SSD3の読み出し動作について説明する。図10は、SSD3の読み出し動作を示すフローチャートである。SSD3は、ホスト装置2から読み出し命令を受信する(ステップS50)。読み出し命令には、読み出しコマンド、及び論理アドレスが含まれる。
続いて、SSDコントローラ11は、DRAM12からアクティブブロックテーブルを読み出す(ステップS51)。続いて、SSDコントローラ11は、ホスト装置2から受信した論理アドレスに対応する物理ブロックIDを参照する(ステップS52)。アクティブブロックテーブルに物理ブロックIDが存在する場合、SSDコントローラ11は、以後、既書き込み領域読み出し処理を行う。すなわち、SSDコントローラ11は、アクティブページテーブルを読み出し(ステップS53)、NAND型フラッシュメモリ13の該当ページを読み出す(ステップS54)。そして、SSDコントローラ11は、読み出したデータをホスト装置2に送信する(ステップS55)。
一方、ホスト装置2から受信した論理アドレスに対応する物理ブロックIDがアクティブブロックテーブルに存在しない場合、SSDコントローラ11は、以後、未書き込み領域読み出し処理を行う。すなわち、SSDコントローラ11は、NAND型フラッシュメモリ13の読み出し処理を行わず、関数fで表されたデータをホスト装置2からの要求に対応するデータ長分ホスト装置2に送信する(ステップS56)。具体的には、関数fで表されたデータは、アドレスAi、データDiとすると、関数f(Ai)=Di(iは0以上の整数)を満たす。関数fは、ユーザ側で自由に設定することが可能であり、本実施形態では、論理アドレス(LBA:Logical Block Addressing)を変数として、“関数f(LBA)=0”と定義する。この例の場合、SSDコントローラ11は、ホスト装置2からの要求に対応するデータ長分の“0”で埋め尽くされたデータをホスト装置2に送信する。
未書き込み領域読み出し動作は、NAND型フラッシュメモリ13の読み出し処理が伴わない。このため、アクティブページテーブルの読み出し処理及びNAND型フラッシュメモリ13の読み出し処理が伴う既書き込み領域読み出し動作に比べ、未書き込み領域読み出し動作は高速に行われる。
<2−5.最適化処理>
次に、ホスト装置2の最適化処理について説明する。図11は、ホスト装置2の最適化処理を示すフローチャートである。論理アドレス空間を物理ページサイズで区切って考え、区切った要素を論理ページと定義する。
ホスト装置2のCPU20は、ある特定のフラグ(これを最適化フラグと呼ぶ)を監視し(ステップS60)、最適化フラグが立っていることを確認すると、現在論理アドレスを0に設定する(ステップS61)。続いて、CPU20は、現在論理アドレスからページサイズ分のデータ、すなわち現在論理アドレスから1つの論理ページ分を読み出すための読み出し命令をSSD3に送信する(ステップS62)。これに対して、SSD3は、ホスト装置2から受信した読み出し命令に従って読み出し処理を行い、読み出しデータをホスト装置2に送信する。
続いて、CPU20は、SSD3から1つの論理ページ分の読み出しデータを受信する(ステップS63)。続いて、CPU20は、読み出しデータが全て“0”で埋め尽くされているか否かを判定する(ステップS64)。読み出しデータが全て“0”で埋め尽くされている場合、CPU20は、読み出した論理アドレス領域に対して削除通知を行う(ステップS65)。これに対して、SSD3は、前述した削除通知処理を行う。
続いて、CPU20は、現在論理アドレスにページサイズ分を追加する(ステップS66)。続いて、CPU20は、全論理ページを読み出すまで、ステップS62〜S66の処理を繰り返す(ステップS67)。
この最適化処理によって削除通知処理が行われた論理ページ群は、対応する論理アドレスがアクティブページテーブルから削除されるため、SSD3内部では物理アドレスに対応付けられていない。削除通知処理が行われた論理ページに関してSSD3に読み出し命令を送信すると、図10の未書き込み領域読み出し動作が行われ、ホスト装置2は“0”
で埋め尽くされたデータをSSD3から受信するため、ホスト装置2からみたSSD3内部のデータは最適化処理前と変わらない。一方、未書き込み領域読み出し動作は、既書き込み領域読み出し動作よりも高速に行われるため、削除通知対象の論理ページ読み出しのパフォーマンスは、最適化処理前に比べて増大する。
なお、ホスト装置2は、最適化フラグが立っていることを確認し、かつSSD3がアイドル状態の時に最適化処理を行うようにしてもよい。これにより、SSD3の通常動作(書き込み動作など)におけるパフォーマンスが低下するのを防ぐことができる。
この最適化処理は、全LBA領域について行ってもよいし、一部のLBA領域に限定して行ってもよい。例えば、最適化処理を行う範囲を10ギガバイトの範囲に限定して行ってもよい。その場合、例えば、初回の最適化処理はLBA=0から10ギガバイトの範囲にわたって実行し、次に最適化フラグが立って最適化処理が開始されると、前回最適化を行った領域の末尾の次のLBA(例えばLBA=0+10ギガバイト+1)から10ギガバイトの範囲にわたって実行するようにしてもよい。このようにして、全LBA領域を複数回に分けて最適化処理を行うことで、1回の最適化処理にかかる時間を短縮することができる。
<2−6.最適化フラグ設定処理>
次に、ホスト装置2の最適化フラグ設定処理について説明する。図12は、ホスト装置2の最適化フラグ設定処理を示すフローチャートである。
ユーザは、ホスト装置2の最適化プログラムを起動し、GUI(Graphical User Inter
face)上のボタン若しくはメニューを選択して最適化機能を呼び出す、又は、コマンドラインから最適化プログラムを起動し、コマンドを入力して最適化機能を呼び出す。図13は、最適化プログラムのGUIの一例を示す概略図である。図13のGUIに対して、ユーザはマウスなどを用いてOKボタンを選択する。このようなユーザの操作により、ホスト装置2の最適化機能が呼び出される。
ホスト装置2のCPU20は、ユーザによって最適化機能が呼び出されたか否かを監視している(ステップS70)。ユーザによって最適化機能が呼び出されると、CPU20は、DRAM23の記憶領域23Cに最適化フラグを立てる。以後、最適化フラグが立っていることが確認されると、前述した最適化処理が行われる。
[3.効果]
以上詳述した第1の実施形態によれば、以下のような効果が得られる。
ホスト装置2上で有効なユーザデータのうち特定パターンの繰り返しであるような論理アドレス領域に関して、ホスト装置2からSSD3に対し削除通知を送信し、当該論理アドレス領域を削除する。そして、削除通知処理が行われたユーザデータをNAND型フラッシュメモリ13以外の特定領域(DRAMなど)から読み出すことで、当該ユーザデータの読み出し動作を高速化することができる。
また、SSD3に削除通知を行うことでフリーブロックを確保することができるため、最適化処理後は書き込み動作のパフォーマンスが向上し、かつSSD3の信頼性が劣化するのを低減することができる。この効果は、ホスト装置2上で有効なユーザデータのうち“0”で埋め尽くされたデータが多ければ多いほど効果が増大する。
図14は、“0”で埋め尽くされたデータの割合と平均読み出し速度との関係を示すグラフである。平均読み出し速度とは、ある特定の期間に発生した読み出し動作の読み出し速度を平均したものである。SSD3に格納されたユーザデータのうち“0”で埋め尽くされたデータの割合が大きくなるほど未書き込み領域読み出し動作が増えるため、平均読み出し速度が速くなる。
図15は、“0”で埋め尽くされたデータの割合とフリーブロック量との関係を示すグラフである。図15のグラフのかさ上げされた部分は、ユーザ領域以外のフリーブロック量である。SSD3に格納されたユーザデータのうち“0”で埋め尽くされたデータの割合が大きくなるほどホスト装置2からみたフリーブロック量が多くなる。
例えば、Windows(登録商標)においてSSD3に対しフルフォーマットを行うと、SSD3の全論理アドレスに対し“0”データが書き込まれることになる。これにより、フリーブロックの数が大幅に減少してしまうため、書き込みパフォーマンスが低下し、以後の書き込み動作でSSD3の信頼性が劣化しやすくなる。ところが、フルフォーマット後のSSD3に対して本実施形態の最適化処理を行うと、“0”で埋め尽くされた領域全てに関し削除通知処理が行われるため、フリーブロックの数が大幅に増大する。これにより、書き込みパフォーマンスが増大し、以後の書き込み動作におけるSSD3の信頼性が劣化するのを低減することができる。
本実施形態は、SSD3がアイドル状態の時にSSD3に対して最適化処理を行って管理テーブルを書き換えるソフトウェアやファームウェアをホスト装置2に実装するだけで実現できる。よって、本実施形態を実現するための機能を低コストかつ容易に実現できる。また、SSD3がアイドル状態の時に最適化処理が行われるようにすることが望ましく、それにより本実施形態を実現した場合でもSSD3の書き込み等のパフォーマンス低下を伴わない。
なお、上記説明では、未書き込み領域読み出し動作においてSSDコントローラ11がホスト装置2に送信するデータとして“0”で埋め尽くされたデータを用いたが、関数fで表されたデータはユーザ側で自由に設定することが可能である。例えば、“関数f(LBA)=1”と定義することで、“1”で埋め尽くされたデータを用いてもよい。また、“関数f(LBA)=LBA”と定義することで、“LBA”で表されたデータを用いてもよい。さらに、論理アドレス空間を分割して管理し、第1のパーティションに対しては削除通知に“0”で埋め尽くされたデータを用い、第2のパーティションに対しては削除通知に“1”で埋め尽くされたデータを用いるようにしてもよい。この場合の関数fは、例えば、“f(LBA)=0(LBA<Cap/2, f(LBA)=1(LBA≧Cap/2)”と定義される。Capは、SSD3の記憶容量である。
また、最適化処理でSSD3から読み出された論理ページが特定のデータパターンX(Xのデータサイズはページサイズと同じ)と同じである場合に、ホスト装置2が削除通知を行うようにしてもよい。この場合、“関数f=X”になっているものとする。この削除通知をSSD3が受信した場合、SSDコントローラ11は、未書き込み領域読み出し動作においてDRAM12に格納されたデータパターンXをホスト装置2に送信する。削除通知に特定のデータパターンを用いる例は、メモリシステム1が頻繁に同じデータを扱う場合に特に有効である。 本実施形態では、簡単のため、NAND型フラッシュメモリの物理アドレスは管理情報においてLBAに対して直接関連付けられていたが、例えば特開2009−217603号のようにセクタサイズの2以上の自然数倍の管理単位を用いてLBAを管理し、LBAではなく、上記管理単位とNAND型フラッシュメモリとの対応関係を管理情報に記述するようにしてもよい。LBAの管理単位などのように、NAND型フラッシュメモリの物理アドレスとLBAとの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAとの対応関係を記述するテーブル(論物変換テーブル)の取る形態の詳細は、本実施形態の本質には影響しない。
また、本実施形態においては、NAND型フラッシュメモリにホスト装置から受信した
データが書き込まれるとき、ホスト装置から受信したデータそのもの(平文)が記録されるとしたが、平文をランダマイズしてNAND型フラッシュメモリに記憶したり、平文を暗号化してNAND型フラッシュメモリに記憶したりする場合にも本実施形態は適用可能である。
[第2の実施形態]
第1の実施形態の最適化処理では、全論理アドレスを読み出すようにしているのに対して、第2の実施形態では、ホスト装置2内のOSの管理領域にアクセスすることでファイルリストを取得し、ファイル単位で最適化処理を行うようにしている。
図16は、第2の実施形態に係るホスト装置2の最適化処理を示すフローチャートである。ホスト装置2のCPU20は、最適化フラグを監視し(ステップS80)、最適化フラグが立っていることを確認すると、OSからファイル管理情報を取得し、ファイル管理情報に登録されている全ファイルを最適化対象ファイルリストに追加する(ステップS81)。最適化対象ファイルリストは、例えばホスト装置2のDRAM23に格納される。
続いて、CPU20は、最適化対象ファイルリストの先頭ファイルを現在ファイルに設定する(ステップS82)。続いて、CPU20は、現在ファイルを読み出すための読み出し命令をSSD3に送信する(ステップS83)。これに対して、SSD3は、ホスト装置2から受信した読み出し命令に従って読み出し処理を行い、読み出しデータをホスト装置2に送信する。
続いて、CPU20は、SSD3から現在ファイルに対応する読み出しデータを受信する(ステップS84)。続いて、CPU20は、読み出したファイル内に“0”で埋め尽くされた論理ページが存在するか否かを判定する(ステップS85)。“0”で埋め尽くされた論理ページが存在する場合、CPU20は、該当する論理ページに対して削除通知を行う(ステップS86)。これに対して、SSD3は、前述した削除通知処理を行う。
続いて、CPU20は、最適化対象ファイルリスト内の次のファイルを現在ファイルに設定する(ステップS87)。続いて、CPU20は、最適化対象ファイルリスト内の全ファイルを読み出すまで、ステップS83〜S87の処理を繰り返す(ステップS88)。
以上詳述したように第2の実施形態では、最適化処理において、全論理アドレス空間に対する読み出し動作を行わず、ホスト装置2上で有効なファイルに対してのみ読み出し動作を行うようにしている。このため、最適化対象のデータ量を減らすことができるため、最適化処理にかかる時間を短縮することができる。
この最適化処理は、全ファイルについて行ってもよいし、一部のファイルに限定して行ってもよい。例えば、最適化処理を行うファイル数を10000個に限定して行ってもよい。その場合、例えば、初回の最適化処理はファイルリスト先頭から10000個にわたって実行し、次に最適化フラグが立って最適化処理が開始されると、前回最適化を行った最後のファイルの次のファイル(例えば、ファイルリストの“0+10000+1”番目)から10000個にわたって実行するようにしてもよい。或いは、最適化処理を行うファイルの容量を10ギガバイトに限定して行ってもよい。その場合、例えば、初回の最適化処理はファイルリスト先頭から合計10ギガバイト分のファイルにわたって実行し、次に最適化フラグが立って最適化処理が開始されると、前回最適化を行った最後のファイルの次のファイルから合計10ギガバイト分のファイルにわたって実行するようにしてもよい。このようにして、全ファイルを複数回に分けて最適化処理を行うことで、1回の最適化処理にかかる時間を短縮することができる。
[第3の実施形態]
第3の実施形態は、最適化フラグ設定処理に関する他の実施例であり、ホスト装置2の時計が規定の時刻に到達した時に、最適化フラグを立てるようにしている。
図17は、第3の実施形態に係るホスト装置2の最適化フラグ設定処理を示すフローチャートである。ホスト装置2は、時計を有しており、ホスト装置2のCPU20は、この時計が規定の時刻に到達したか否かを監視している(ステップS90)。規定の時刻に到達した場合、CPU20は、DRAM23の記憶領域23Cに最適化フラグを立てる。以後、最適化フラグが立っていることが確認されると、前述した最適化処理が行われる。
第3の実施形態では、メモリシステム1は、ユーザの明示的な指示なしにバックグラウンドで最適化処理を行うことが可能である。
[第4の実施形態]
第4の実施形態は、最適化フラグ設定処理に関する他の実施例であり、SSD3からホスト装置2へ送信される情報をトリガとして、最適化フラグ設定処理を開始するようにしている。SSD3からホスト装置2へ送信される最適化処理の実施を促す情報を最適化起動情報と呼ぶ。SSD3内部で管理している情報の一つとして、例えば、フリーブロック数がある。第4の実施形態では、このフリーブロック数を用いて最適化起動情報を生成する。
まずは、SSD3側の動作について説明する。図18は、第4の実施形態に係るSSD3の最適化起動情報の生成処理を示すフローチャートである。SSDコントローラ11は、フリーブロック数を監視しており(ステップS100)、フリーブロック数が規定値(例えば、設計時に予め決められている規定値)を下回った場合、SSDコントローラ11は、ホスト装置2に最適化起動情報を送信する(ステップS101)。上記規定値としては、例えば、SSD3の書き込み動作において、書き込み速度を一定以上に保つために必要なフリーブロックの最低数を用いることができる。
次に、ホスト装置2側の動作について説明する。図19は、ホスト装置2の最適化フラグ設定処理を示すフローチャートである。ホスト装置2のCPU20は、SSD3から最適化起動情報を受信したか否かを監視している(ステップS110)。最適化起動情報を受信すると、CPU20は、DRAM23の記憶領域23Cに最適化フラグを立てる。以後、最適化フラグが立っていることが確認されると、前述した最適化処理が行われる。
最適化起動情報の監視及び授受には、例えば、メモリの自己診断機能であるS.M.A.R.T(Self-Monitoring Analysis and Reporting Technology)のコマンドであるSMART READ DATA(B0h(D0h))又はベンダー独自のコマンドを用いてもよい。或いは、CPU20は、例えば、S.M.A.R.TのコマンドであるSMART READ DATA(B0h(D0h))又はベンダー独自のコマンドを用いてSSD3のフリーブロック数を直接監視し、フリーブロック数が規定値(例えば、設計時に予め決められている規定値で、最適化プログラム23B上に保持されている)を下回った場合、CPU20がDRAM23の記憶領域23Cに最適化フラグを立てるようにしてもよい。
第4の実施形態では、SSD3側の最適なタイミングで最適化処理を行うことが可能である。
[第5の実施形態]
第5の実施形態は、関数fで定義されるデータパターンを、SSD3の使用状況に応じて変更可能なようにメモリシステム1を構成している。図20は、第5の実施形態に係るホスト装置2の最適化処理を示すフローチャートである。特定のデータパターンをXと表記し、“関数f=X”になっているものとする。
図20のステップS120〜S123は、図11のステップS60〜S63と同じである。続いて、CPU20は、読み出しデータが関数fで表されるデータパターンと同じであるか否かを判定する(ステップS124)。読み出しデータが関数fで表されるデータパターンと同じである場合、CPU20は、読み出した論理アドレス領域に対して削除通知を行う(ステップS125)。これに対して、SSD3は、前述した削除通知処理を行う。
続いて、CPU20は、現在論理アドレスにページサイズ分を追加する(ステップS126)。続いて、CPU20は、全論理ページを読み出すまで、ステップS122〜S126の処理を繰り返す(ステップS127)。
続いて、CPU20は、全論理アドレス領域のうちデータパターンXの領域の合計サイズを算出する(ステップS128)。続いて、CPU20は、全論理アドレス領域のうちデータパターンXと異なるデータパターンX´の領域の合計サイズを算出する(ステップS129)。
続いて、CPU20は、データパターンX´の合計サイズがデータパターンXの合計サイズより大きいか否かを判定する(ステップS130)。データパターンX´の合計サイズがデータパターンXの合計サイズ以下である場合、CPU20は、最適化処理を終了する。一方、データパターンX´の合計サイズがデータパターンXの合計サイズより大きい場合、DRAM23の記憶領域23Dに格納されている“関数f=X”を“関数f=X´”に書き換える(ステップS131)。ステップ130における判定条件を(データパターンX´の合計サイズ)≧(データパターンXの合計サイズ)とすると、データパターンX´の合計サイズとデータパターンXの合計サイズがほぼ等しい時に関数fの書き換えが頻繁に発生するため、例えば(データパターンX´の合計サイズ)≧1.1×(データパターンXの合計サイズ)のように、判定条件にマージンを持たせることが望ましい。
現時点では、データパターンXである論理ページ群については削除通知処理が行われているので、SSD3は、この論理ページをアクティブページとして管理していない。このため、CPU20は、データパターンXである論理ページ群についてデータパターンXに書き換える書き込み命令をSSD3に送信する(ステップS132)。続いて、CPU20は、NAND型フラッシュメモリ13の記憶領域13Cに格納されている“関数f=X”を“関数f=X´”に書き換える命令をSSD3に送信する(ステップS133)。関数fの書き換え命令は、例えばベンダー独自のコマンドを用いてもよい。これに対して、SSD3は、NAND型フラッシュメモリ13の記憶領域13Cに“関数f=X´”を書き込むとともに、DRAM12の関数fを更新する。
以上詳述したように第5の実施形態によれば、削除通知対象であるデータパターンを変更することができる。これにより、最も存在確率が高いデータパターンに対して未書き込み領域読み出し動作が行われることになるので、読み出し動作を高速化することができる。なお、ファイル単位で最適化処理を行う第2の実施形態に第5の実施形態を適用することも可能である。
[第6の実施形態]
第6の実施形態は、SSD3自身が前述した最適化処理と同じ処理を行うようにしている。図21は、第6の実施形態に係るメモリシステム1のブロック図である。SSD3のDRAM12は、最適化フラグを格納する記憶領域12Cを含んでいる。その他の構成は、図1と同じである。
本実施形態では、ホスト装置2は、最適化プログラム23B、最適化フラグ23C、及び関数f(23D)を保持しなくてもよい。SSDコントローラ11は、DRAM12の記憶領域12Cに最適化フラグを立てる。
図22は、DRAM12に格納される管理テーブルの一部を説明する図である。最適化処理を重複して行わないために、アクティブページテーブルには、最適化済マークが追加されていることが望ましい。最適化済マークは、論理アドレスに対応して設けられている。最適化済マークは、後述する最適化処理が実施されたか否かを判断するための情報である。
SSD3の書き込み動作は、第1の実施形態で示した図7のフローチャートと同じである。ただし、図7のステップS16においてアクティブページテーブルを更新する際、最適化済マーク=false(偽)を追加する。
次に、最適化処理について説明する。図23は、SSD3の最適化処理を示すフローチャートである。
SSDコントローラ11は、DRAM12の記憶領域12Cに最適化フラグが立っていることを確認すると(ステップS140)、アクティブページテーブルの1行目を現在行に設定する(ステップS141)。続いて、SSDコントローラ11は、DRAM12からアクティブページテーブルの現在行を読み出す(ステップS142)。
続いて、SSDコントローラ11は、現在行に含まれる最適化済マークを確認することで、現在行が示す物理ページが最適化済みであるか否かを判定する(ステップS143)。物理ページが最適化済みである場合(最適化済マーク=True(真))は、当該物理ページに対して最適化処理は行われない。一方、物理ページが最適化済みでない場合(最適化済マーク=false)、SSDコントローラ11は、NAND型フラッシュメモリ13から現在行が示す物理ページを読み出す(ステップS144)。
続いて、SSDコントローラ11は、読み出しデータが“0”で埋め尽くされている(“関数f(LBA)=0”の場合)か否かを判定する(ステップS145)。読み出しデータが“0”で埋め尽くされている場合、SSDコントローラ11は、アクティブページテーブルから現在行を削除する(ステップS146)。或いは、現在行の要素に無効なデータを書き込むことで、現在行を無効化してもよい。読み出しデータが“0”で埋め尽くされていない場合、SSDコントローラ11は、現在行の最適化済マークに“True”を書き込む(ステップS147)。続いて、SSDコントローラ11は、アクティブページテーブルの次の行を現在行に設定する(ステップS148)。
続いて、SSDコントローラ11は、ホスト装置2から割込み命令を受信した場合は、最適化処理を終了すべく、ステップS151に移行する。ホスト装置2から割込み命令を受信していない場合は、SSDコントローラ11は、アクティブページテーブルの全行を読み出すまで、ステップS142〜S148の処理を繰り返す(ステップS150)。続いて、SSDコントローラ11は、アクティブブロックテーブル及びフリーブロックテーブルを更新する(ステップS151)。すなわち、アクティブブロックテーブルを参照し、アクティブページテーブルに要素を持たない物理ブロックをアクティブブロックテーブルから削除してフリーブロックテーブルに追加する。なお、割込み命令が急を要する場合には、アクティブブロックテーブル及びフリーブロックテーブルの更新を後で行うようにしてもよい。
SSD3の読み出し動作及びNAND整理動作については、第1の実施形態と同じである。従って、最適化処理によって削除された論理ページに関してホスト装置2がSSD3に読み出し命令を送信すると、図10の未書き込み領域読み出し動作が行われ、ホスト装置2は“0”で埋め尽くされたデータをSSD3から受信する(“関数f(LBA)=0”の場合)ため、ホスト装置2からみたSSD3内部のデータは最適化処理前と変わらない。一方、未書き込み領域読み出し動作は、既書き込み領域読み出し動作よりも高速に行われるため、最適化対象の論理ページ読み出しのパフォーマンスは、最適化処理前に比べて増大する。また、第6の実施形態によれば、ホスト装置2の処理負担を軽減することができる。
なお、最適化フラグを立てる条件としては、ホスト装置2から、例えばベンダー独自のコマンドなどによって明示的に指示された場合でもよいし、ホスト装置2から明示的に指示された場合でなくてもよい。例えば、ホスト装置2から一定期間(例えば10秒)アクセスがない場合に、SSDコントローラ11がDRAM12の記憶領域12Cに最適化フラグを立てるようにしてもよい。また、第4の実施形態と同様に、SSDコントローラ11は、フリーブロック数を監視しており、フリーブロック数が規定値(例えば、設計時に予め決められている規定値)を下回った場合に、DRAM12の記憶領域12Cに最適化フラグを立てるようにしてもよい。
上記最適化は、アクティブページテーブルの全要素について行うようにしてもよいが、一部の要素に限定して行うようにしてもよい。例えば、各最適化動作において、10000個の要素に限定して行うようにしてもよい。この場合、初回の最適化ではアクティブページテーブルの0番目〜9999番目の要素について最適化を行い、次回の最適化では10000番目〜19999番目の要素について最適化を行い、次回の最適化では20000番目〜29999番目の要素について最適化を行う、というようにしてもよい。このようにアクティブページテーブルを分割して最適化を行うことで、一回の最適化に要する時間を短縮することができる。
なお、上記説明では、未書き込み領域読み出し動作においてSSDコントローラ11がホスト装置2に送信するデータとして“0”で埋め尽くされたデータを用いたが(“関数f(LBA)=0”の場合)、関数fで表されたデータはユーザ側で自由に設定することが可能であり、ステップS145において、データパターンと関数fの比較が行われる。例えば、“関数f(LBA)=1”と定義することで、“1”で埋め尽くされたデータを用いてもよい。また、“関数f(LBA)=LBA”と定義することで、“LBA”で表されたデータを用いてもよい。さらに、論理アドレス空間を分割して管理し、第1のパーティションに対しては最適化に“0”で埋め尽くされたデータを用い、第2のパーティションに対しては最適化に“1”で埋め尽くされたデータを用いるようにしてもよい。この場合の関数fは、例えば、“f(LBA)=0(LBA<Cap/2, f(LBA)=1(LBA≧Cap/2)”と定義される。Capは、SSD3の記憶容量である。
また、ステップS145で、NAND型フラッシュメモリ13のあるLBAから読み出されたデータが特定のデータパターンX(Xのデータサイズはページサイズと同じ)と同じである場合に、SSDコントローラ11が最適化処理を行うようにしてもよい(ステップS146)。この場合、“関数f=X”に該当する。この削除通知をSSD3が受信した場合、SSDコントローラ11は、未書き込み領域読み出し動作においてDRAM12に格納されたデータパターンXをホスト装置2に送信する。削除通知に特定のデータパターンを用いる例は、メモリシステム1が頻繁に同じデータを扱う場合に特に有効である。
本実施形態では、簡単のため、NAND型フラッシュメモリの物理アドレスは管理情報においてLBAに対して直接関連付けられていたが、例えば特開2009−217603号のようにセクタサイズの2以上の自然数倍の管理単位を用いてLBAを管理し、LBAではなく、上記管理単位とNAND型フラッシュメモリとの対応関係を管理情報に記述するようにしてもよい。LBAの管理単位などのように、NAND型フラッシュメモリの物理アドレスとLBAとの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAとの対応関係を記述するテーブル(論物変換テーブル)の取る形態の詳細は、本実施形態の本質には影響しない。
また、本実施形態においては、NAND型フラッシュメモリにホスト装置から受信したデータが書き込まれるとき、ホスト装置から受信したデータそのもの(平文)が記録されるとしたが、平文をランダマイズしてNAND型フラッシュメモリに記憶したり、平文を暗号化してNAND型フラッシュメモリに記憶したりする場合にも本実施形態は適用可能である。その際、ステップS145におけるデータの比較は、復号後の平文について行われることが望ましいが、復号前のランダマイズデータ又は暗号化データについて行ってもよい。
[第7の実施形態]
第7の実施形態は、ホスト装置がある論理アドレス領域をSSDから読み出したデータが比較元データと同一である場合、ホスト装置が上記論理アドレス領域に対して削除通知を行う。そして、上記論理アドレス領域に対応する論理アドレスを、NAND型フラッシュメモリ上の物理アドレスを疑似的に割り当てた「比較元データ領域」に対応するよう管理テーブルを書き換えることで、繰り返しパターンであるようなユーザデータの読み出し動作を高速化し、SSDが利用可能なフリーブロックを増加させるようにしている。
[1.メモリシステムの構成]
比較元データ領域に格納されているデータ(比較元データ)がNAND型フラッシュメモリの物理アドレス領域で繰り返し存在する場合、上記物理アドレス領域に対応するLBA(論理アドレス)は本実施形態により比較元データ領域に全て対応付けられる。これにより、最大で「(繰り返しデータパターンのデータ量)−(繰り返しデータ領域のデータ量)」に相当する物理ブロックがフリーブロックとなるため、SSDコントローラが利用可能なフリーブロックを増加させることができる。上記比較元データ領域は、DRAMなどのRAM、SSDコントローラ内のLSI若しくはRAM、又はNAND型フラッシュメモリ上に割り当てられる。それぞれの場合について以下に説明する。なお、本実施形態では簡単のため、NAND型フラッシュメモリの最小管理単位は物理ページサイズに等しいとする(一般的には最小管理単位は物理ページサイズの自然数倍であればよい)。
<比較元データ領域がDRAM上の場合>
図24は、比較元データ領域がDRAM12上に割り当てられる場合のメモリシステム1のブロック図である。以後、簡単のため、NAND型フラッシュメモリ13の個別チップはブロック図から省略する。
DRAM12は、比較元データを格納する記憶領域12Dを備えている。NAND型フラッシュメモリ13は、バックアップ用の比較元データ(以後、バックアップ比較元データという)を格納する記憶領域13Eを備えている。NAND型フラッシュメモリ13の記憶領域13Eには、工場出荷時に例えば”0”で埋め尽くされたデータのような初期データが書き込まれている。DRAM12の記憶領域12DとNAND型フラッシュメモリ13の記憶領域13Eとのサイズは等しい。SSD3の起動時に、SSDコントローラ11は、バックアップ比較元データをDRAM12に読み出す。
本実施形態では、第1の実施形態に比べて、物理アドレスのアドレスマッピング方法に特徴がある。図25は、物理アドレスのマッピングテーブルを説明する図である。図25の“h”は、16進数表記を意味している。
NAND型フラッシュメモリ13の全物理ページには物理ブロックIDと物理ページアドレスとが割り当てられており、全物理ページは互いに区別可能になっている。第1の実施形態では、物理アドレスにはNAND型フラッシュメモリ13の物理ページのみが割り当てられていたが、本実施形態では、DRAM12上の記憶領域12D(比較元データ領域)がNAND型フラッシュメモリの物理アドレスとして割り当てられる。比較元データ領域の管理単位は、NAND型フラッシュメモリ13の最小管理単位に等しい、つまり本実施形態では、物理ページサイズに等しい。
比較元データ領域の疑似的な物理ブロックIDは、アドレスマッピング方式によってNAND型フラッシュメモリ13の物理ブロックIDと区別できるようになっている。比較元データ領域が割り当てられているDRAM12の物理アドレス領域はNAND型フラッシュメモリの物理ページサイズごとに分割して管理され、DRAM12の物理アドレスが小さい順にそれら管理単位に対して疑似的な物理ページアドレスが昇り順で割り当てられる。比較元データ領域のサイズがNAND型フラッシュメモリ13の物理ブロックサイズより大きい場合は、比較元データ領域が割り当てられているDRAM12の物理アドレス領域をNAND型フラッシュメモリ13の物理ブロックサイズごとに分割し、DRAM12の物理アドレスが小さい順にそれらに対して疑似的な物理ブロックIDを昇り順で割り当て、物理ページアドレスは0〜最大物理ページアドレスを繰り返す。比較元データ領域に割り当てられている物理ブロックIDは、工場出荷時の段階からアクティブブロックテーブルに登録されている。
比較元データ領域のサイズは、NAND型フラッシュメモリ13の最小管理単位の自然数倍になっている、つまり本実施形態では、物理ページサイズの自然数倍になっている。比較元データ領域のサイズはNAND型フラッシュメモリ13の物理ブロックのサイズ以上でもよいし、未満でもよい。以後、本実施形態では簡単のため、比較元データ領域のサイズは1物理ページ分とする(図26)。比較元データ領域のサイズが複数物理ページ分の場合は、例えば比較元データ領域を物理ページごとに分割して処理すればよいので、実施形態の本質は同じである。
<比較元データ領域がSSDコントローラ上の場合>
図27は、比較元データ領域がSSDコントローラ11上に割り当てられる場合のメモリシステム1のブロック図である。
SSDコントローラ11上のSRAM(その他のRAMでもよい)又はLSI(その他のROMでもよい)には、比較元データを格納する記憶領域11A(比較元データ領域)が割り当てられている。記憶領域11AがRAMの場合は、DRAMの場合と同じように、SSD3の起動時に、SSDコントローラ11は、バックアップ比較元データを記憶領域11Aに読み出す。記憶領域11AがROMの場合は、工場出荷時に例えば”0”で埋め尽くされたデータのような初期データがROMに書き込まれている。
図28に示すように、物理アドレスのマッピングテーブル方式は、前述したDRAMの場合と同じである。以後、本実施形態では簡単のため、比較元データ領域のサイズは1物理ページ分とする(図29)。
<比較元データ領域がNAND型フラッシュメモリ上の場合>
図30は、比較元データ領域がNAND型フラッシュメモリ13上に割り当てられる場合のメモリシステム1のブロック図である。
NAND型フラッシュメモリ13の一部領域には、比較元データを格納する記憶領域13E(比較元データ領域)が割り当てられている。NAND型フラッシュメモリ13の比較元データ領域には、工場出荷時に例えば”0”で埋め尽くされたデータのような初期データが書き込まれている。
図31は、物理アドレスのマッピングテーブルを説明する図である。NAND型フラッシュメモリ13の全物理ページには物理ブロックIDと物理ページアドレスとが割り当てられており、かつ、これら物理ページ群の一部が比較元データ領域として割り当てられる。比較元データ領域における管理単位などのデータ管理方式は、その他のNAND型フラッシュメモリ13上の領域と同じである。比較元データ領域のサイズは、NAND型フラッシュメモリ13の最小管理単位の自然数倍になっている、つまり本実施形態では、物理ページサイズの自然数倍になっている。比較元データ領域の先頭アドレスは、いずれかの物理ページの先頭アドレスに等しい(物理ページの途中であってはいけない)。比較元データ領域に割り当てられている物理ブロックIDは、工場出荷時の段階からアクティブブロックテーブルに登録されていることが望ましい。
比較元データ領域のサイズはNAND型フラッシュメモリ13の物理ブロックのサイズ以上でもよいし、未満でもよい。以後、本実施形態では簡単のため、比較元データ領域のサイズは1物理ページ分とする(図32)。比較元データ領域のサイズが複数物理ページ分の場合は、例えば比較元データ領域を物理ページごとに分割して処理すればよいので、実施形態の本質は同じである。
以上、比較元データ領域がDRAM12、SSDコントローラ11、又はNAND型フラッシュメモリ13上に割り当てられた場合について説明してきたが、いずれの場合であっても、比較元データ領域は通常のNAND型フラッシュメモリの物理ページと同等の物理アドレスマッピングがされ、同等に扱うことができる。よって、以降の説明は、比較元データ領域が確保される部分(DRAM12、SSDコントローラ11、又はNAND型フラッシュメモリ13)に関わらず同じように実施可能である。
次に、ホスト装置2の構成について説明する。図33は、ホスト装置2のブロック図である。DRAM23は、関数fの代わりに、比較元データを格納する記憶領域23Eを含んでいる。その他の構成は、第1の実施形態の図3と同じである。
ホスト装置2のCPU20は、ホスト装置2の起動時又は最適化プログラムの起動時に、SSD3に比較元データを読み出すための読み出し命令を送信し、SSD3から読み出された比較元データをDRAM23の記憶領域23Eに格納する。読み出しには、読み出しコマンドを用いてもよいし、ベンダー独自のコマンドなどその他のコマンドを用いてもよい。或いは、ホスト装置2に接続された他の外部記憶装置に比較元データを保存しておき、ホスト装置2の起動時又は最適化プログラムの起動時に、ホスト装置2のCPU20が当該外部記憶装置から比較元データを読み出すようにしてもよい。
[2.動作]
<2−1.NAND整理処理>
図34は、SSD3のNAND整理処理を示すフローチャートである。SSDコントローラ11は、列番号i=0、空き領域累積量s=0に設定する(ステップS160)。続いて、SSDコントローラ11は、DRAM12からアクティブブロックテーブルの先頭行を読み出し、物理ブロックIDを取得する(ステップS161)。ステップS161にて取得した物理ブロックIDを現在物理ブロックIDと呼ぶ。
続いて、SSDコントローラ11は、図26、図29又は図32のアドレスマッピングに基づき、現在物理ブロックIDが比較元データ領域を含むか否かを判定する(ステップS162)。現在物理ブロックIDが比較元データ領域を含む場合、SSDコントローラ11は、現在物理ブロックIDをインクリメントして、作業対象を次の物理ブロックIDに移す(ステップS163)。現在物理ブロックIDが比較元データ領域を含まない場合、第1の実施形態の図8と同様に、DRAM12からアクティブページテーブルを読み出し、現在物理ブロックIDに含まれる全物理ページアドレスを取得する(ステップS164)。このようにして、比較元データ領域はNAND整理対象から除外される。比較元データ領域はNAND整理対象から除外されるのが望ましいが、比較元データ領域をNAND整理対象としてもよい。以後のフローは第1の実施形態の図8と同じである。
<2−2.削除通知処理>
次に、SSD3の削除通知処理について説明する。図35は、SSD3の削除通知処理を示すフローチャートである。SSD3は、ホスト装置2から削除通知を受信する(ステップS180)。削除通知には、削除コマンド、及び論理アドレスが含まれる。
続いて、SSDコントローラ11は、DRAM12からアクティブページテーブルを読み出す(ステップS181)。続いて、SSDコントローラ11は、アクティブページテーブルにおいて、削除通知によって指定された削除対象となる論理アドレス領域(削除対象論理領域)を比較元データ領域と関連付ける(ステップS182)。本実施形態では、比較元データ領域のサイズは1物理ページ分であるので、削除対象論理領域は1論理ページ分である。
続いて、SSDコントローラ11は、DRAM12からアクティブブロックテーブルを読み出す(ステップS183)。続いて、SSDコントローラ11は、アクティブブロックテーブルを参照し、アクティブページテーブルに物理ブロックIDを持たない物理ブロックをアクティブブロックテーブルから削除してフリーブロックテーブルに追加する(ステップS184)。このように、SSD3は、NAND整理以外に、削除通知処理によってもフリーブロックを確保することができる。
<2−3.読み出し動作>
次に、SSD3の読み出し動作について説明する。図36は、SSD3の読み出し動作を示すフローチャートである。SSD3は、ホスト装置2から読み出し命令を受信する(ステップS190)。読み出し命令には、読み出しコマンド、及び論理アドレスが含まれる。
続いて、SSDコントローラ11は、DRAM12からアクティブブロックテーブルを読み出し(ステップS191)、ホスト装置2から受信した論理アドレスに対応する物理ブロックIDを参照する。続いて、SSDコントローラ11は、アクティブページテーブルを読み出し(ステップS192)、図26、図29又は図32のアドレスマッピングに基づき、該当する物理アドレスの読み出し動作を行う(ステップS193)。この時、読み出し対象がDRAM12やSSDコントローラ11上の比較元データ領域である場合は、読み出し動作が高速に行われるため、読み出しパフォーマンスが向上する。そして、SSDコントローラ11は、読み出したデータをホスト装置2に送信する(ステップS194)。
<2−4.最適化処理>
次に、ホスト装置2の最適化処理について説明する。図37は、ホスト装置2の最適化処理を示すフローチャートである。最適化フラグの設定処理は、これまでに述べたホスト装置2の処理と同様である。
ホスト装置2のCPU20は、最適化フラグを監視し(ステップS200)、最適化フラグが立っていることを確認すると、現在論理アドレスを0に設定する(ステップS201)。続いて、CPU20は、現在論理アドレスからページサイズ分のデータ、すなわち現在論理アドレスから1つの論理ページ分を読み出すための読み出し命令をSSD3に送信する(ステップS202)。これに対して、SSD3は、ホスト装置2から受信した読み出し命令に従って読み出し処理を行い、読み出しデータをホスト装置2に送信する。
続いて、CPU20は、SSD3から1つの論理ページ分の読み出しデータを受信する(ステップS203)。続いて、CPU20は、読み出しデータがDRAM23の記憶領域23Eに格納された比較元データと一致しているか否かを判定する(ステップS204)。読み出しデータが比較元データと一致している場合、CPU20は、読み出した論理アドレス領域に対して削除通知を行う(ステップS205)。これに対して、SSD3は、前述した削除通知処理を行う。
続いて、CPU20は、現在論理アドレスにページサイズ分を追加する(ステップS206)。続いて、CPU20は、全論理ページを読み出すまで、ステップS202〜S206の処理を繰り返す(ステップS207)。最適化を行うLBA領域は全LBA領域であってもよいし、LBA領域の一部であってもよい。
この最適化処理によって削除通知処理が行われた論理ページ群は、SSD3内の比較元データ領域の物理アドレスに関連付けられることになる。削除通知処理が行われた論理ページに関してホスト装置2がSSD3に読み出し命令を送信すると、比較元データをSSD3から受信するため、ホスト装置2からみたSSD内部のデータは最適化処理前と変わらない。一方、比較元データ領域がSSD3側のDRAMやSSDコントローラに存在する場合、比較元データの読み出し動作は高速に行われるため、削除通知対象の論理ページ読み出しのパフォーマンスは、最適化処理前に比べて増大する。
[3.効果]
以上詳述した第7の実施形態によれば、以下のような効果が得られる。
ホスト装置2上で有効なユーザデータのうち比較元データと同じである論理アドレス領域に関して、ホスト装置2からSSD3に対して削除通知を送信する。これにより、削除通知が行われた論理アドレスがSSD3内の比較元データ領域の物理アドレスに関連付けられる。そして、削除通知処理が行われたユーザデータをSSD3側のDRAMやSSDコントローラに存在する比較元データ領域から読み出すことで、当該ユーザデータの読み出し動作を高速化することができる。
また、最適化処理を行うことでフリーブロックを確保することができるため、最適化処理後は書き込み動作のパフォーマンスが向上し、かつSSD3の信頼性劣化が軽減する。本実施形態の効果は、ホスト装置2上で有効なユーザデータのうち比較元データに一致するデータが多ければ多いほど効果が増大する。
[4.実施例]
(実施例1)
第8の実施形態に第2の実施形態を適用してもよい。すなわち、実施例1は、第2の実施形態と同様に、ホスト装置内のOSの管理領域にアクセスすることでファイルリストを取得し、ファイル単位で最適化処理を行うようにしている。
図38は、実施例1に係るホスト装置2の最適化処理を示すフローチャートである。ファイル単位でSSD3から読み出しデータを受信する工程は、第2の実施形態の図16と同じである。
続いて、ホスト装置2のCPU20は、読み出したファイル内に比較元データと一致する論理ページが存在するか否かを判定する(ステップS215)。比較元データと一致する論理ページが存在する場合、CPU20は、該当する論理ページに対して削除通知を行う(ステップS216)。これに対して、SSD3は、前述した削除通知処理を行う。その後の工程は、第2の実施形態の図16と同じである。
以上詳述したように実施例1では、最適化処理において、全論理アドレス空間に対する読み出し動作を行わず、ホスト装置2上で有効なファイルに対してのみ読み出し動作を行うようにしている。このため、最適化対象のデータ量を減らすことができるため、最適化処理にかかる時間を短縮することができる。最適化を行うファイルは全ファイルであってもよいし、一部のファイルであってもよい。
(実施例2)
SSD上の比較元データ、及びホスト装置上の比較元データは、工場出荷後に書き換えられてもよい。図39は、実施例2に係るホスト装置2の比較元データ書き換え処理を示すフローチャートである。
ホスト装置2のCPU20は、例えばユーザの指示に応答して、DRAM23の記憶領域23Eに格納された旧比較元データを新比較元データに書き換える(ステップS220)。続いて、CPU20は、比較元データを書き換えるための書き換え命令、及び比較元データをSSD3に送信する(ステップS221)。比較元データを書き換えるための書き換え命令は、通常の書き込み命令でもよいし、ベンダー独自の命令などその他命令でもよい。
図40は、実施例2に係るSSD3の比較元データ書き換え処理を示すフローチャートである。SSD3は、ホスト装置2から比較元データの書き換え命令、及び比較元データを受信する(ステップS230)。
SSD3の比較元データを書き換える場合、NAND型フラッシュメモリ13のデータに矛盾が生じないようにする必要がある。そこで、SSDコントローラ11は、旧比較元データに関連付けられた論理ページに旧比較元データを書き込む(ステップS231)。例えば、SSDコントローラ11は、旧比較元データをNAND型フラッシュメモリ13の論理アドレス領域のうち旧比較元データに関連付けられた論理ページの数だけ複製し、これら論理ページに旧比較元データを書き込む。続いて、SSDコントローラ11は、NAND型フラッシュメモリ13やDRAM12の比較元データ領域を新比較元データに書き換える(ステップS232)。
本実施形態では、簡単のため、各種物理アドレスは管理情報においてLBAに対して直接関連付けられていたが、例えば特開2009−217603号のようにセクタサイズの2以上の自然数倍の管理単位を用いてLBAを管理し、LBAではなく、上記管理単位とNAND型フラッシュメモリとの対応関係を管理情報に記述するようにしてもよい。LBAの管理単位などのように、NAND型フラッシュメモリの物理アドレスとLBAとの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAとの対応関係を記述するテーブル(論物変換テーブル)の取る形態の詳細は、本実施形態の本質には影響しない。
また、本実施形態においては、NAND型フラッシュメモリにホスト装置から受信したデータが書き込まれるとき、ホスト装置から受信したデータそのもの(平文)が記録されるとしたが、平文をランダマイズしてNAND型フラッシュメモリに記憶したり、平文を暗号化してNAND型フラッシュメモリに記憶したりする場合にも本実施形態は適用可能である。
[第8の実施形態]
第8の実施形態は、第7の実施形態で示した比較元データに関する最適化処理をSSD3自身が行うようにしている。SSD3が備える比較元データ領域の構成は第7の実施形態と同じであり、SSD3が備える比較元データ領域は、DRAMなどのRAM、SSDコントローラ内のLSI若しくはRAM、又はNAND型フラッシュメモリ上に割り当てられる。また、第7の実施形態と同様に、本実施形態では簡単のため、比較元データ領域のサイズは1物理ページ分とする。
図41は、第8の実施形態に係るSSD3の最適化処理を示すフローチャートである。SSDコントローラ11は、DRAM12の記憶領域12Cに最適化フラグが立っていることを確認すると(ステップS240)、アクティブページテーブルの1行目を現在行に設定する(ステップS241)。続いて、SSDコントローラ11は、DRAM12からアクティブページテーブルの現在行を読み出す(ステップS242)。
続いて、SSDコントローラ11は、現在行が示す物理アドレスが比較元データ領域であるか否かを判定する(ステップS243)。現在行が示す物理アドレスが比較元データ領域である場合は、当該物理アドレスに対して最適化処理は行われない。一方、現在行が示す物理アドレスが比較元データ領域でない場合は、NAND型フラッシュメモリ13から現在行が示す物理ページを読み出す(ステップS244)。
続いて、SSDコントローラ11は、読み出しデータが比較元データと一致しているか否かを判定する(ステップS245)。読み出しデータが比較元データと一致している場合、SSDコントローラ11は、アクティブページテーブルの現在行に、比較元データ領域に疑似的に割り当てられた物理ブロックID、及び比較元データ領域に疑似的に割り当てられた物理ページアドレスを書き込む(ステップS246)。読み出されたデータが比較元データ領域のデータに一致しない場合は、当該物理ページに対して最適化処理は行われない。
その後、第6の実施形態の図23と同様に、アクティブページテーブルの全行に対して最適化処理が行われる。最適化処理は一部の行について行われてもよい。続いて、SSDコントローラ11は、アクティブブロックテーブル及びフリーブロックテーブルを更新する(ステップS250)。すなわち、SSDコントローラ11は、アクティブブロックテーブルを参照し、NAND型フラッシュメモリ13の比較元データ領域以外の領域のうちアクティブページテーブルに要素を持たない物理ブロックに関して、アクティブブロックテーブルから削除してフリーブロックテーブルに追加する。なお、割込み命令が急を要する場合には、アクティブブロックテーブル及びフリーブロックテーブルの更新を後で行うようにしてもよい。
SSD3の読み出し動作及びNAND整理動作については、第7の実施形態と同じである。
以上詳述したように第8の実施形態によれば、比較元データ領域のデータと同じデータを有する物理ページが複数ある場合、最適化処理により複数の論理アドレス(LBA)が単一の比較元データ領域に関連付けられることになる。上記論理アドレスに関連付けられていた物理ページは解放されることになり、それによりフリーブロックを新たに確保できた場合は、最適化処理後は書き込み動作のパフォーマンスが向上し、かつSSD3の信頼性劣化が軽減する。
また、比較元データ領域がRAM上やSSDコントローラ上に確保されている場合は、比較元データ領域に関連付けられた論理アドレスに関してホスト装置2がSSD3に読み出し命令を送信すると、NAND型フラッシュメモリ13の読み出しが伴う読み出し動作よりも高速に読み出し動作が行われる。これにより、読み出しパフォーマンスが向上する。本実施形態の効果は、NAND型フラッシュメモリ13に書き込まれたデータのうち比較元データ領域に一致するデータが多ければ多いほど増大する。
なお、第7の実施形態と同様に、SSD上の比較元データは、工場出荷後に書き換えるようにしてもよい。この場合は、旧比較元データをNAND型フラッシュメモリ13の論理アドレス領域のうち旧比較元データに関連付けられた論理ページの数だけ複製し、これら論理ページに旧比較元データを書き込む。その後、NAND型フラッシュメモリ13やDRAM12の比較元データ領域を新比較元データに書き換えることで、データに矛盾が生じない。
また、最適化フラグを立てる条件としては、ホスト装置2から明示的に指示された場合に限らない。すなわち、第6の実施形態と同様に、ホスト装置2から一定期間(例えば10秒)アクセスがない場合に最適化フラグを立てるようにしてもよいし、フリーブロック数が規定値(例えば、設計時に予め決められている規定値)を下回った場合に最適化フラグを立てるようにしてもよい。
本実施形態では、簡単のため、各種物理アドレスは管理情報においてLBAに対して直接関連付けられていたが、例えば特開2009−217603号のようにセクタサイズの2以上の自然数倍の管理単位を用いてLBAを管理し、LBAではなく、上記管理単位とNAND型フラッシュメモリとの対応関係を管理情報に記述するようにしてもよい。LBAの管理単位などのように、NAND型フラッシュメモリの物理アドレスとLBAとの対応関係を記述する管理情報は様々な形態をとりうるが、物理アドレスとLBAとの対応関係を記述するテーブル(論物変換テーブル)の取る形態の詳細は、本実施形態の本質には影響しない。
また、本実施形態においては、NAND型フラッシュメモリにホスト装置から受信したデータが書き込まれるとき、ホスト装置から受信したデータそのもの(平文)が記録されるとしたが、平文をランダマイズしてNAND型フラッシュメモリに記憶したり、平文を暗号化してNAND型フラッシュメモリに記憶したりする場合にも本実施形態は適用可能である。その際、ステップS245におけるデータの比較は、復号後の平文について行われることが望ましいが、復号前のランダマイズデータまたは暗号化データについて行ってもよい。
[第9の実施形態]
第1乃至6の実施形態では、ホスト装置(情報処理装置)内又はSSD内の関数f(LBA)を用いて最適化処理を行っている。第9の実施形態では、最適化プログラム設計時、製品設計時若しくは工場出荷前において、又は工場出荷後において関数f(LBA)を決定する手法について説明する。特に、SSDにインストールするOSやシステム構成が決定しているときは、それらシステムに対して最適な関数f(LBA)を最適化プログラム設計時、製品設計時若しくは工場出荷前に設定しておくことが望ましい。
(実施例1)
図42は、論理アドレス及びデータの一例を示す図である。SSDの論理アドレス領域は、論理アドレス(LBA)によってホスト装置に認識される。論理アドレスは1セクタが最小管理単位となっており、1セクタは例えば512バイトである。図42のように、各セクタに対し論理アドレス(0000h、0001h、0002h、・・・、ba02h、・・・)が割り当てられている。
図42は、あるSSD搭載パーソナルコンピュータにおいて、予めOSやその他ソフトウェアをインストールしておいてから出荷する場合に、SSDに出荷前に書き込まれるデータパターンの例である。或いは、実際には書かれていなくても、エンドユーザが書き込むであろうデータを想定して(シミュレートして)以下のように関数f(LBA)を決定してもよい。
SSDは例えば出荷前にフルフォーマットが行われ、全論理アドレス領域に0データが書き込まれる。その後、SSDにOSやその他ソフトウェアがインストールされ、一部セクタに0でないデータが書き込まれる(図42のLBA=0000h、0001h、0003h、ba02hなど)。書き込みが行われていない論理アドレスに関しては“0”で埋め尽くされた1セクタ長のデータ(0-fillセクタ)が書き込まれたままである(図42のLBA=0002h、0004h、0005h、ba03hなど)。LBA=ba03h以降はデータが書かれておらず、全て0-fillセクタのままである。
全論理アドレスを読み出して、0-fillセクタと比較することで、図43のような0-fillセクタの存在確率分布を導くことができる。また、比較時に、0-fillセクタとなっているセクタ数合計を全論理アドレス領域の合計容量で割ると、正味の0-fillセクタの割合を導くことができる。
関数f(LBA)=000・・・0(固定値、0は512バイト分の繰り返し)とすることで、最大で0-fillセクタとなっているセクタ数合計相当のブロックを開放してフリーブロックを確保することができる。
また、最適化処理は、この正味の0-fillセクタの割合が有意であるとき(例えば5%以上であるとき)にのみ行うようにしてもよい。また、関数f(LBA)の書き換えは、この正味の0-fillセクタの割合が有意であるとき(例えば5%以上であるとき)にのみ行うようにしてもよい。0-fillセクタの割合が有意であるかどうかの基準は、例えば、以下のように決定される。
(1)書き込み応答時間が所定値(例えば仕様書に提示されたスペック)以下となることを保証できるためのフリーブロックの全容量に占める割合
(2)Write Amplification(WA)が所定値以下となることを保証できるためのフリーブロックの全容量に占める割合
なお、上記WAは以下のようにして定義される。
WA=(NAND型フラッシュメモリに書き込まれたデータの総サイズ)/(ホスト装置からSSDに転送された書き込みデータの総サイズ)
又は、
WA=(ブロックの総消去回数)×(ブロックサイズ)/(ホスト装置からSSDに転送された書き込みデータの総サイズ)
なお、上記“NAND型フラッシュメモリに書き込まれたデータの総サイズ”は、ユーザデータだけでなく、管理情報、ECCの冗長データ、暗号化キーなど、ユーザデータ以外のデータも含むことが望ましい。
(実施例2)
図44は、関数f(LBA)が固定値とならない例である。ある論理アドレス領域ではあるデータパターンが頻発し、ある論理アドレス領域では別のデータパターンが頻発するというように、論理アドレス領域によって頻発する繰り返しパターンが異なる場合がある。図44のように、論理アドレス領域の前半では0-fillセクタが多数存在する一方、論理アドレス領域の後半では1-fillデータ(全ビットが“1”で埋め尽くされたデータ、16進数で表すとfで埋め尽くされたデータということになる)が多数存在するよう場合を考える。
0-fillセクタの存在確率分布及び1-fillセクタの存在確率分布は図45のようになる。この場合、関数f(LBA)=000・・・0(固定値)としたり、関数f(LBA)=111・・・1(固定値)とするよりも、“関数f(LBA)=000・・・0h(LBA≦c000h),f(LBA)=111・・・1h(LBA≦c000h)”のように、関数f(LBA)を2つの論理アドレス領域で異なる値とするほうが、解放できるセクタ数が多くなるため望ましい。
(実施例3)
図46は、3つの論理アドレス領域で頻発するデータが異なる場合である。0-fillセクタの存在確率分布、320a-fillセクタ(320aデータで埋め尽くされた1セクタ長のデータ)の存在確率分布、及び1-fillセクタの存在確率分布は図47のようになる。この場合、“関数f(LBA)=000・・・0h(LBA≦7fffh),f(LBA)=320a320a・・・320ah(8000h≦LBA≦c000h),f(LBA)=111・・・1h(LBA≦c001h)”のように、関数f(LBA)を3つの論理アドレス領域で異なる値とするほうが、解放できるセクタ数が多くなるため望ましい。
(実施例4)
実施例4では、論理アドレス領域をサイズLごとに分割した管理単位を用いる。サイズLはLBAの最小単位以上である。関数f(LBA)は管理単位の内部では一定値をとるが、異なる管理単位間では関数f(LBA)は異なってもよい。先頭の管理単位では関数f(LBA)=D0(固定値)、次の管理単位では関数f(LBA)=D1(固定値)、・・・というようになる。この場合の関数f(LBA)は、以下のように表される。
“f(LBA)=D0(0≦LBA≦L−1,f(LBA)=D1(L≦LBA≦2L−1),f(LBA)=D2(2L≦LBA≦3L−1,・・・,Dk(kL≦LBA≦(k+1)L−1),・・・”
Dk(k=0、1、・・・)は、サイズがLの任意のデータパターンである。
Dk(k=0、1、・・・)の選び方には任意性があり、最適なDkを選ぶことで最適な関数f(LBA)が決定される。Dkの各種候補に対して、SSDの出荷前検査装置、情報処理装置のCPU、又はSSDコントローラは、以下の手法で点数付けを行う。
(1) 各種セクタごとのデータを読み出す(又は、セクタの整数倍ごとにデータを読み出してもよいし、管理単位ごとにデータを読み出してもよい)
(2) (1)で読み出したデータが関数f(LBA)に等しいか否かを判定する(セクタの整数倍ごとにデータを読み出した場合は、その中の全セクタが関数f(LBA)に等しいか否かを判定する)
(3) 等しい場合は1点、等しくない場合は0点と点数をつける
(4) SSDの全論理アドレス領域に対して点数付けを行い、点数の合計を算出する(代表して一部領域のみについて点数付けを行ってもよい)
そして、もっとも高得点となったDkが最適ということになり、このDkを用いて最適な関数f(LBA)が決定される。例えば、L=128MiB(MiB=1,048,576バイト)とすると、SSDの全論理アドレス領域を始端から均等に128MiBごとに区切り、それぞれの区画を読み出し、区画内全データが関数f(LBA)に等しいか否かを判定し、等しい場合は1点加算し、合計点数を計算する。その点数計算を例えば(D0,D1,・・・)=(0000・・・,0000・・・,・・・),(FFFF・・・,FFFF・・・,・・・),(FFFF・・・,0000・・・,・・・),(0000・・・,FFFF・・・,・・・)のような複数の候補について行い、もっとも得点の高い候補を最適な(D0,D1,・・・)として選定して関数f(LBA)を決定する。
(実施例5)
実施例4では、管理単位として固定長に区切った区画を用いたが、可変長に区切った区画を管理単位として用いてもよい。この場合の関数f(LBA)は、以下のように表される。
“f(LBA)=D0(L0=0≦LBA≦L1−1,f(LBA)=D1(L1≦LBA≦L2−1),f(LBA)=D2(L2≦LBA≦L3−1,・・・,Dk(Lk≦LBA≦L(k+1)−1),・・・”
Dk(k=0、1、・・・)は、サイズがLの任意のデータパターンである。“L0<L1<L2<・・・Lk<・・・”である。
(実施例6)
実施例6は、同一データで埋め尽くされているセクタが少ないため、前述の手法を適用しても十分な効果が得られないが、データとLBAとに一定の相関がある場合のケースである(図48)。このような場合には、より一般的な関数f(LBA)の決定手法を用いることが好ましい。例えば、複数の関数f(LBA)の候補を用意し、それぞれのf(LBA)に対して前述の点数付けを行い、もっとも高得点のf(LBA)を最適なf(LBA)として決定する。実施例6では、図49に示すように、データとLBAとに一定の相関があるセクタが解放される。
(実施例7)
例えば、2種類のパラメータa,bについて、“関数f(LBA)=a×LBA+b”
を定義し、パラメータa,bを振ったものを関数f(LBA)の候補として用いる。そして、もっとも高得点の(a,b)を求め、もっとも高得点の(a,b)を用いて関数f(LBA)を決定してもよい。
図50は、実施例7に係る関数f(LBA)の決定方法を説明する図である。図50には、パラメータbがb1、b2、b3の場合を図示している。パラメータaを変えると、(a,b)=(a0,b2)がもっとも得点の高い。よって、“関数f(LBA)=a0×LBA+b2”が算出される。
より一般的には、LBAがSATA規格において一般的な48ビットLBAである場合にはLBA=(d0,d1,d2,・・・,d47)tという列数48のベクトルとし(tは転置記号)、Aを512×48の行列とし、bを列数4096(1セクタ=512バイト=4096ビット)のベクトルとすることで、“関数f(LBA)=A×LBA+b”というように関数f(LBA)を列数4096のベクトル形式で取得してもよい。この場合、ベクトルf(LBA)の1列目が1ビット目のデータに、2列目が2ビット目のデータに、・・・、という対応関係がある。
さらに一般的には、LBAがnビットで記述されるとき、LBA=(d0,d1,d2,・・・,dn−1)tという列数nのベクトルとし、Aをn×mの行列とし、bを列数mのベクトルとすることで、“関数f(LBA)=A×LBA+b”というように関数f(LBA)を列数mのベクトル形式で取得してもよい。
上記各実施形態で説明したコントローラの処理は、プログラムで実現することも可能である。プログラムのフローチャートは、上記各実施形態で示したフローチャートを使用することができる。
上記各実施形態では、不揮発性記憶装置3としてSSDを例に挙げて説明したが、SSD以外の不揮発性記憶装置に広く適用可能であり、例えば、磁性媒体(プラッタ)を用いたハードディスクドライブ(HDD)や、NAND型フラッシュメモリと磁性媒体(プラッタ)の両方を用いたハイブリッドハードディスクドライブ(ハイブリッドHDD)に適用することも可能である。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。