(58)【調査した分野】(Int.Cl.,DB名)
前記第2の物理ページに格納されている、前記第1の保証コード及び前記第2の保証コードの位置情報は、前記第2の物理ページの先頭アドレスからの位置を示すオフセット情報として保持される
ことを特徴とする、請求項1に記載のフラッシュメモリモジュール。
前記第2の物理ページに格納されている、前記第1の保証コード及び前記第2の保証コードの位置情報は、前記第2の物理ページの先頭アドレスからの位置を示すオフセット情報として保持される
ことを特徴とする、請求項10に記載のストレージ装置。
【発明を実施するための形態】
【0013】
以下図面について、本発明の一実施の形態を詳述する。
【0014】
(1)第1の実施の形態
(1−1)計算機システムのハードウェア構成
まず、本実施の形態にかかる計算機システム1のハードウェア構成について説明する。
図1に示すように、本実施の形態にかかる計算機システム1は、ストレージ装置11と、第1および第2のホスト12A、12B(以降、第1および第2のホストを単にホスト12と称する場合もある。)と、管理端末13と、SAN(Storage Area Network)14と、を備えている。
【0015】
ストレージ装置11は、ホスト12から送信されたコマンドを解釈して、ストレージ装置11の記憶領域内へのリード/ライトを実行する。ストレージ装置11は、
図1に示すように、第1および第2のホストインタフェース112A、112B(第1および第2のホストインタフェースを単にホストインタフェース112と称する場合もある。)、第1および第2のストレージインタフェース113A、113B(以降、第1および第2のストレージインタフェースを単にストレージインタフェース113と称する場合もある。)保守インタフェース(I/F)114、CPU115、メモリ116、コネクタ16A、16B、16C、16D(以降、単にコネクタ16と称する。)およびフラッシュメモリストレージ17などから構成される。
【0016】
ホストインタフェース112は、ホスト12からのデータや制御コマンドなどを受け付けるインタフェースである。また、ストレージインタフェース113は、フラッシュメモリストレージ17にデータや制御コマンドを送信するインタフェースである。また、保守インタフェース(I/F)114は、管理端末13と接続して、管理端末13からの管理や保守に関する制御コマンド等を受け付けるインタフェースである。
【0017】
CPU115は、演算処理装置として機能し、メモリ
116に記憶されている各種プログラムや演算パラメータ等にしたがって、ストレージ装置11全体の動作を制御する機能を有する。具体的に、CPU115は、ホスト12からのデータ入出力(データI/O)を処理し、フラッシュメモリストレージ17にデータ入出力に関するI/Oコマンドを発行する。また、ホスト12から受け付けたユーザデータに対して保証コードを生成して、ユーザデータに付与する。メモリ116は、各種プログラムや演算パラメータ等の他、制御情報や管理情報、また、ユーザからのデータを一時的に格納する。
【0018】
フラッシュメモリストレージ17は、フラッシュメモリモジュール21A〜21F(以降、フラッシュメモリモジュール21と称する場合もある。)から構成されている。本実施形態では、フラッシュメモリストレージ17に、6つのフラッシュメモリモジュール21〜21Fが備えられている構成としたが、フラッシュメモリモジュールの数はかかる例に限定されない。フラッシュメモリモジュール21は、ストレージインタフェース113とコネクタ16を介して接続され、コネクタ16を介してホスト12から受け付けられたデータおよび各制御コマンドがフラッシュメモリモジュール21に書き込まれる。フラッシュメモリモジュール21の内部構成については後で詳細に説明する。なお、本実施形態では、フラッシュメモリストレージ17をストレージ装置11と一体とした構成としているが、かかる例に限定されず、フラッシュメモリストレージ17をストレージ装置11とは別体の装置としてもよい。
【0019】
ホスト12は、SANを介してストレージ装置11と接続され、ストレージ装置11にデータのリード/ライト要求を送信する。また、ホスト100は、CPU(Central Processing Unit)およびメモリ等の情報処理資源を備えたコンピュータ装置であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。ホスト12とストレージ装置11との通信は、例えば、SCSI(Small Computer System Interface)などのブロックプロトコルが用いられる。また、ホスト20は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の情報入力装置と、モニタディスプレイやスピーカ等の情報出力装置とを備えている。
【0020】
管理端末13は、CPUおよびメモリ等の情報処理資源を備えたコンピュータ装置であって、例えば、パーソナルコンピュータや、ワークステーション、メインフレームなどから構成される。CPUは、演算処理装置として機能し、メモリに記憶されているプログラムや演算パラメータ等にしたがって、管理端末13の動作を制御する。また、管理端末13は、キーボード、スイッチやポインティングデバイス、マイクロフォン等の情報入力装置と、モニタディスプレイやスピーカ等の情報出力装置とを備えており、オペレータ等の入力に応じてストレージ装置11等を管理する装置である。
【0021】
なお、ホスト12およびフラッシュメモリモジュール21の数、およびそれらを接続するコネクタ16は、
図1に示す数に限定されず、1またはそれ以上の数であればよい。同様に、各コネクタおよびインタフェースの規格は特定のものに限定されない。例えば、SAN14に適用される代表的な規格として、FC(Fibre Channel)、SCSI、iSCSI(internet Small Computer System Interface)、SAS(Serial Attached SCSI)などを例示できる。
【0022】
ここで、フラッシュメモリ(フラッシュメモリモジュール21)について説明する。フラッシュメモリは、最小消去単位が、最小書き込み単位に比べて大きいという特徴を有する。具体的に、フラッシュメモリにおいては、1つのブロック内に複数のページが設けられており、ブロック単位でデータが消去され、ページ単位でデータの読み書きが実行される。
【0023】
上記したように、フラッシュメモリは、その特性上、データを直接書き換えることができない。すなわち、フラッシュメモリでは、記憶しているデータを書き換える場合、記憶している有効なデータを他のブロックに退避させて、記憶しているデータをブロック単位で消去する。そして、データを消去したブロックにデータを書き込むことによりデータの書き換えを行っている。
【0024】
このように、フラッシュメモリにおけるデータの書き換え処理では、ブロック単位のデータの消去が伴う。しかしながら、フラッシュメモリの1ブロック分のデータの消去にかかる時間は、1ページ分のデータを書き込むのに要する時間と比べて約1桁分長い時間がかかる。したがって、1ページ分のデータを書き換えるために毎回1ブロック分のデータ消去を実行すると、フラッシュメモリのデータ書き換え性能が劣化してしまう。すなわち、記憶媒体としてフラッシュメモリを用いる場合には、フラッシュメモリからデータを消去する時間を隠ぺいできるアルゴリズムでデータを書き込むことが必要となる。
【0025】
通常、フラッシュメモリに対してデータの書き換えを行う場合には、データを書き換えるごとにデータを消去することは行わず、データが記録されていない未使用領域にデータを追記する方式によってデータの書き換えを行う。しかし、データの書き換え処理が度重なって実行されると、フラッシュメモリ内の未使用領域が枯渇してしまうため、フラッシュメモリに書き込まれている不要なデータを消去して、記憶領域を再利用可能な状態にする必要が生じる。
【0026】
そこで、旧データを含むブロック内の有効なデータのみを未使用領域にコピーし、コピー元のブロックを消去して再利用可能な状態にするブロック再生処理(以下、当該処理をリクラメーション処理と称する。)を実行することが、フラッシュメモリのデータ高速書き換えには必須の処理となる。このリクラメーション処理は、無効データが多くなったブロックを対象に実行される。
【0027】
一方、フラッシュメモリは、データを消去する回数に制限があるという特徴を有する。例えば、1ブロック当たり10万回までの消去回数が保証されている。この場合、データの書き換えが1のブロックに集中して、当該ブロックの消去回数が増大すると、データの消去ができなくなり、ブロックが使用不能となってしまうという問題があった。そのため、フラッシュメモリを記憶媒体として用いる場合、特定のブロックに対するデータ消去処理が集中しないように、消去回数の平準化処理を行う必要がある。
【0028】
また、フラッシュメモリは、一度書き込みしたページについては、時間とともに読み出しエラー率が増加するという特徴を有する。このように、データを保持しておくだけでも発生するエラーをリテンションエラーといい、これを回避するために、書き込み後一定時間を経過したページを、別ページに書き込む処理(リフレッシュ処理)が実行される。リフレッシュ処理を実行する場合においても、上記した消去回数を平準化したり、性能に対する影響を考慮したりする必要がある。
【0029】
上記したように、フラッシュメモリを記憶媒体として用いる場合には、データ消去時間を隠ぺいしたり、データ消去回数を平準化したりするために、上位装置に提供する論理アドレスと実際の記憶領域の物理アドレスとを対応づけて、データの書き込みの際に、論理アドレスから物理アドレスへの変更処理が行われる。すなわち、上位装置に提供する論理アドレスと記憶領域上の物理アドレスとの対応を逐次変更することにより、上位装置は、論理アドレス空間にデータを書き込めばよく、データ書き込み時における未使用領域への追記に伴う物理アドレスの変更などを意識する必要がなくなる。
【0030】
フラッシュメモリを有するストレージ装置において、上記のように論理アドレスと物理アドレスとを対応付けて管理している場合に、重複排除技術を適用することが考えられている。重複排除技術は、同一のデータが格納された複数の論理アドレス空間を、当該データが格納された1つの物理アドレス空間に対応付ける技術である。当該重複排除技術により、データ量を短縮し、ストレージのデータ容量を節約することが可能となる。
【0031】
特に、重複排除技術の適用が有効と考えられる対象のデータとして、フォーマットデータが挙げられる。ストレージ装置11は、記憶デバイスを使用する際に、記憶デバイスの異常個所を検知したり保証コードを事前に書き込みしたりすることを目的として、記憶デバイスの全領域に特定パタンのデータを書き込むフォーマット処理を実行する。このフォーマット処理は、フラッシュメモリをはじめとする書き換えが制限されている記憶デバイスにおいては、不必要に書き換え回数を増加させるという問題があった。
【0032】
また、フラッシュメモリは、データの書き換えに対して、未使用領域への追記方式を採用しているため、未使用領域が少なくなると頻繁にデータの消去処理を実行しなければならない。このため、フォーマット処理により実体を伴わないデータが書き込まれることにより、未使用領域が減少して性能安定性が損なわれるという問題があった。そこで、上記した重複排除技術を適用することにより、データの書き込み量を低減させて、フラッシュメモリを記憶媒体とするストレージ装置11におけるフラッシュメモリの長寿命化と性能安定性の向上を図ることができる。
【0033】
さらに、ストレージ装置11では、データ領域に格納するデータのハードウェア障害などによるビット化けや、内部制御エラーなどによる不正なアドレスへの書き込みや読込みを防ぐために、書き込みデータに対して保証コードが付与される。一般的に、この保証コードは、データに対して冗長性を持たせることを目的にデータ内容から算出される部と、ベンダ毎に値を自由に設定できる部を組み合わせた内容となっている。このような保証コードが付与されたデータに対して重複排除を行う場合、保証コード部分がデータ毎に異なるため、データの内容が同じであっても保証コードに差異があるため重複排除を行うことができないという問題があった。
【0034】
そこで、本実施形態では、保証コードを含むデータに対して重複排除処理を行う場合に、対象となるデータの保証コード部分とデータ部分を分離して、データ部分のみを重複排除の処理対象とし、保証コード部分はデータとは別に管理してそれぞれのデータ毎にフラッシュメモリに格納して管理している。また、フラッシュメモリにおいては、上記したように、最小の書き込み単位はページ単位であるため、単純に保証コード部分を分離してフラッシュメモリに格納するだけでなく、書き込み単位を意識して効率的に保証コードを格納したり、論理アドレスから物理アドレスへの変更を実行したりしている。
【0035】
さらに、上記したフォーマットデータに代表される同一値やインクリメント値など、単純なパタンのデータについては、データ部をさらに圧縮することにより、データの書き込み量を削減することができる。そして、本実施形態では、上記したフラッシュメモリにおける書き込み制限に適合するように、圧縮したデータ部とそのデータに関連する保証コードを効率よく管理している。
【0036】
以上のように、本実施形態によれば、保証コードが付与されたデータに対しても重複排除を行って、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【0037】
(1−2)ストレージ装置の内部構成について
次に、ストレージ装置11の内部構成について説明する。まず、フラッシュメモリモジュール21の内部構成の詳細について説明する。フラッシュメモリモジュール21は、フラッシュ制御装置210とフラッシュメモリチップ31A〜31H(以降、フラッシュメモリ31と称する場合もある。)とから構成される。なお、本実施形態では、フラッシュメモリチップ31は、
図2に示すように6つのフラッシュメモリから構成されるが、かかる例に限定されず1以上の個数であればよい。
【0038】
図2に示すように、フラッシュ制御装置210は、ストレージインタフェース221と、CPU212と、コントローラ213と、メモリ214と、バッファ215と、フラッシュメモリインタフェース216などを備える。
【0039】
ストレージインタフェース221は、ストレージ装置11本体のCPU115からのデータおよび制御コマンドを受け付けるインタフェースである。CPU212は、フラッシュ制御装置210全体の動作を制御する機能を有し、メモリ214に格納されている各種プログラムに基づいて動作する。CPU212は、例えば、ストレージインタフェース211を介して受領したホスト12からのデータI/Oに対して、メモリ214に格納されている各種テーブルを参照して、フラッシュメモリチップ31にデータをリード/ライトする。また、フラッシュメモリチップ31の使用状況に応じて、使用済み領域を再生させるリクラメーションの実行やデータの書き換えによる記憶媒体の摩耗を記憶媒体の各素子に均等に分散させるウェアレベリングなどを実施する。
【0040】
コントローラ213は、CPU212の制御のもと、フラッシュメモリチップ31A〜31Hに対してデータのリード/ライトを実行する。また、当該データに対してエラー訂正符号の生成や、重複排除のためのデータの比較や、ハッシュ値の生成などを実行する。なお、本実施形態では、エラー訂正符号の生成等の処理をコントローラ213が実行する構成としたが、かかる例に限定されず、コントローラ213の処理をCPU212が実行する構成としてもよい。
【0041】
メモリ214は、CPU212およびコントローラ213により実行される各種プログラム、各種テーブルおよび制御情報を記憶する。なお、フラッシュ制御装置210の内部構成は、
図2に示す構成に限定されず、各機能を1または複数のデバイスによって実行するようにしてもよい。
【0042】
次に、フラッシュメモリチップ31の内部構成について説明する。
図3に示すように、フラッシュメモリチップ31は、フラッシュ制御装置
210から発行されたデータI/Oコマンドの対象データを一時的に格納するページバッファ312A、312B(以降、ページバッファ312とも称する。)および、実際の記憶領域である物理ブロック313A〜313F(以降、物理ブロック313とも称する。)から構成される。
【0043】
物理ブロック313は、さらに、ページ32A〜32C(以降、ページ32とも称する。)から構成される。上記したように、物理ブロック313は、フラッシュメモリにおける消去単位であり、ページ32は、フラッシュメモリにおける書き込み/読み込み単位である。また、ページ32は、2Kバイト、3Kバイト、8Kバイトなどのサイズに分割された領域であり、ブロック313は、128個のページ、256個のページのサイズに分割された領域であり、1Mバイト、2Mバイトなどの大きさを有する。
【0044】
次に、ユーザデータに対する保証コードについて説明する。
図4Aに示すように、データ(ユーザデータ)41に付与されるコード(保証コード)42は、データ41に対して一定のアドレスの区切りごとに付与される。一般的に、1セクタ、512バイトのユーザデータごとに、8バイトの保証コードが生成され、付与される。以降、このデータの区切りをセクタと称して説明する場合もある。
【0045】
コード42は、データ
41から生成されるビットエラー訂正符号部421と、ベンダが自由に設定可能なUDT部422とから構成される。UDT部422は、例えば、対象データのアドレスの整合性を確認することを目的として、当該データのアドレスが格納される。この場合、UDT部422には、ユーザデータ41の値に関わらず、固有の値が格納される。
【0046】
なお、フラッシュメモリのページサイズは、通常、512バイトより大きいため、1つのページの中に複数のセクタが格納されることとなる。このとき、ページ32は、
図4Bに示す構成となる。すなわち、フラッシュメモリのページ32内には、nセクタを格納することができ、各セクタのデータ部41A〜41Cをまとめてページ32のデータ部411とする。また、各セクタのコード42A〜42Cをまとめて、ページのコード部421としている。なお、ページ内のデータおよび保証コードの配置は、
図4Bに示す構成に限定されず、各セクタのデータおよび保証コードの位置が確定できる構成であればよい。また、説明上、セクタのうち、コード42をデータ41以外としているが、かかる例に限定されず、ユーザデータから生成されるビットエラー訂正符号421をデータの一部として、データ部41に格納するようにしてもよい。
【0047】
次に、本実施形態にかかる重複排除処理の概要について説明する。
図5に示すように、データ部411Aとコード部421Aを含むページと、データ部411Bとコード部421Bを含むページと、データ部411Cとコード部421Cを含むページの3つのページを含むページ群43は、重複排除処理によって、データ部441を含むページ44とコード部451を含むページ45の2つのページに格納することができる。すなわち、データ部411A、411B、411Cに格納されているデータは同一の内容のデータであるため、データ部をページ44のデータ部441に格納する。そして、コード部421A、421B、421Cに格納されている保証コードは異なる内容の保証コードであるため、ページ45のコード部451にコード部421A、421B、421Cのすべての保証コードを格納する。
【0048】
そして、ページ群43の各論理アドレスと、ページ44およびページ45の物理アドレスとが対応付けられる。すなわち、データ部については、データ部411A、411B、411Cの論理アドレスの先頭と、ページ44の物理アドレスとが対応付けられ、さらに、コード部については、ページ45の各物理アドレスと、当該物理アドレスの先頭からのオフセット情報とが対応付けられる。このように、データ部とコード部を含むページが3ページ以上あり、データ部が同一の内容である場合には、重複排除により3ページを2ページにして、ページ数削減の効果を得ることができる。なお、重複排除によりページ内に空きスペース422、452を得ることができるが、当該空きスペースは未使用のままにしてもよいし、後述する管理情報の格納用に使用してもよい。
【0049】
次に、重複排除の具体例について説明する。
図6Aに、論理ページアドレスと物理ページアドレスとの対応関係を示す。
図6Aに示すように、Addr51は、論理ページアドレスを示し、Data52は、論理ページアドレス空間に格納されているデータを示す。また、Code53は、論理ページアドレス空間に格納されている保証コードを示す。そして、Addr54は、論理ページに対応付けられている物理ページアドレスを示し、Data55は、物理ページアドレス空間に格納されているデータの内容を示す。
【0050】
論理ページアドレス0〜3で示される論理ページ511〜514に格納されているデータ52には、同一の内容のデータ「AAAA」が格納されている。この場合、論理ページ511〜514の各論理ページアドレス0〜3は、「AAAA」のデータを格納している物理ページ541の物理ページアドレス0に対応付けられる。しかし物理ページ541は、保証コードを含まないユーザデータのみであるため、各論理ページ511〜514には、保証コードを格納している物理ページ542の物理ページアドレス1が対応付けられる。さらに、各論理ページ511〜514に対応する保証コードが物理ページアドレス1の先頭コードからどの位置にあるかがオフセット情報として対応付けられる。
【0051】
次に、上記した論理ページと物理ページとの対応付けを実現するための管理テーブルについて説明する。当該管理テーブルは、フラッシュメモリモジュール21のメモリ214に格納される。また、フラッシュメモリモジュール21のコントローラ213が重複排除処理を実行して、各種管理テーブルを作成する。そして、フラッシュメモリモジュール21のCPU212の制御のもと、コントローラ21が管理テーブルを参照して、フラッシュメモリチップ31にデータのリード/ライトを実行する。
【0052】
論理/物理アドレス変換テーブル56は、論理アドレスと物理アドレスとの対応付けを管理し、具体的に論理ページアドレスに格納されたデータおよび保証コードがいずれの物理ページに存在するかを管理するテーブルである。論理/物理アドレス変換テーブル56は、
図6Bに示すように、論理ページアドレス欄561、物理ページデータアドレス欄562、物理ページコードアドレス欄563および物理ページコードオフセットアドレス欄564から構成される。
【0053】
論理ページアドレス欄561には、論理ページの先頭アドレスが格納される。物理ページデータアドレス欄562には、論理ページアドレス欄561に格納されているアドレスに対応するデータ部が格納されている物理ページの先頭アドレスが格納される。物理ページコードアドレス欄563には、論理ページアドレス欄561に格納されているアドレスに対応するコード部が格納されている物理ページの先頭アドレスが格納される。
【0054】
物理ページコードオフセットアドレス564には、物理ページコードアドレス欄563に格納されているアドレスによって示されるページ内コードのうち、各論理ページの保証コードに対応する保証コードの格納位置を示すアドレスが格納される。このように、論理/物理アドレス変換テーブル56により、論理ページに含まれるデータと保証コードに対応する、物理ページのデータおよび保証コードが格納されている位置を得ることができる。
【0055】
なお、
図6Bでは、物理ページコードオフセットアドレス欄564に保証コードのオフセットアドレスを格納しているが、物理ページコードオフセットアドレス欄564を設けずに保証コードの物理位置を認識するようにしてもよい。すなわち、重複排除の対象となるページ群のアドレスの並びが連続であるという制約を設けることにより、物理ページコードオフセットアドレスがなくとも保証コードの物理位置を認識することができる。また、重複排除の対象となっていないページについては、当該ページに対してフラグを設けたり、物理ページデータアドレスと物理ページコードアドレスとを同一の値にしたりすることにより、重複排除の対象となっているか否かを判別するようにしてもよい。
【0056】
次に、逆参照テーブル57について説明する。逆参照テーブル57は、物理ページがいずれの論理ページに参照されているかを管理するテーブルであって、
図6Cに示すように、物理ページアドレス欄571、参照カウント欄572および論理ページアドレス欄573から構成される。
【0057】
物理ページアドレス欄571には、データおよび保証コードが格納されている物理ページの先頭アドレスが格納される。参照カウント欄572には、物理ページに格納されているデータを参照している論理ページの数が格納される。したがって、当該物理ページを参照していた論理ページが更新されて、参照されなくなった場合には、参照カウントをデクリメントする。論理ページアドレス欄573には、参照元となる論理ページアドレスが格納される。1つの物理ページが複数の論理ページに参照されている場合には、複数の論理ページアドレス欄573に、参照元となる複数の論理ページアドレスが格納される。
【0058】
当該逆参照テーブル57により、例えばリクラメーション処理が実行された場合に、物理ページが参照されているか否かを判定することができ、参照元となる論理ページアドレス573から、再配置対象となる論理ページアドレスを取得することができる。
【0059】
上記したように、上記した管理テーブルはフラッシュ制御装置210のメモリ214に格納することにより、データの書き込み/読み取り等の処理を高速化することができるが、かかる例に限定されず、管理テーブルサイズがメモリ241の容量に対して大きい場合には、フラッシュメモリ31に格納してもよい。この場合、例えば、物理ページ内の空きスペース442および452などを利用してもよい。
【0060】
また、上記したように、管理テーブルの作成および管理等は、フラッシュ制御装置210により実行されるが、かかる例に限定されず、フラッシュメモリのページ構造を認識し、書き込みデータの重複排除処理および管理情報を保持することができる装置が行ってもよい。例えば、ストレージ装置のCPU115が管理テーブルの作成および管理等をおこなってもよい。ただし、フラッシュ制御装置21においては、論理アドレスと物理アドレスとの対応付けが必須となるため、管理テーブルを新設する必要がないが、ストレージ装置のCPU115により論理アドレスと物理アドレスの対応付けを管理する場合には、上記の管理テーブルを新設することとなる。
【0061】
(1−3)ストレージ装置の動作の詳細
(1−3−1)重複排除処理
次に、ストレージ装置11における重複排除処理について説明する。上記したように、フラッシュメモリモジュール21のコントローラ213が重複排除処理を実行する。
図7に示すように、まず、コントローラ213は、重複排除の対象となる論理ページリストを取得する(S11)。論理ページリストは、ページ内のユーザデータが格納されているデータ部の内容が同一で、保証コードが格納されているコード部の内容が異なる2つ以上のページから構成される。
【0062】
当該論理ページの探索方法としては、例えば、大サイズのデータをライトする場合や、リクラメーション処理やリフレッシュ処理などのデータ再配置時に、大サイズのデータの中から重複排除の対象となる論理ページの組み合わせを検索する。また、各ページのデータ部のハッシュ値を算出して管理し、ハッシュ値に基づいて、動的にデータ部の一致するページの組み合わせを検索するようにしてもよい。
【0063】
続いて、コントローラ231は、ステップS11において取得した論理ページのデータ部を格納する物理ページを取得する(S12)。例えば、コントローラ231は、フラッシュメモリの長寿命化の観点から、摩耗度の少ない物理ページを優先して取得してもよいが、物理ページの取得ポリシーはかかる例に限定されず、管理者により設定されたポリシーをもとに物理ページを取得してもよい。
【0064】
そして、コントローラ231は、ステップS12において取得した物理ページに、ステップS11において取得した論理ページのデータ部に格納されたユーザデータを書き込む(S13)。ただし、コントローラ231は、必ずしもステップS13においてデータの書き込みをしなくてもよい。例えば、データの書き込みをスケジューラなどに登録してもよい。
【0065】
次に、コントローラ231は、ステップS11において取得した論理ページのコード部を格納する物理ページを1ページ取得する(S14)。ここで、コード部を格納する物理ページのブロックは、ステップS12において取得したデータ部の書き込み先となる物理ページのブロックと異なるブロックとする。これにより、データをリード/ライトする際に、データ部とコード部とを別々に読み出してデータ部に対する処理とコード部に対する処理とを並行することが可能となる。
【0066】
次に、コントローラ231は、ステップS14において取得した物理ページが必要数あるかを判定する(S15)。具体的に、コントローラ231は、重複排除対象となる論理ページの数分の保証コードの容量が取得した物理ページの容量以内であるかを判定する。保証コードを格納するための必要な容量は、保証コードサイズ×重複排除対象となる論理ページ数となる。また、1つの物理ページに格納可能な最大の保証コード数(最大対象ページ数)は、物理ページサイズを保証コードサイズで除算することにより算出することができる。したがって、コントローラ231は、対象論理ページ数が取得物理ページ数に最大対象ページ数を乗算した数より小さいか否かを判定することにより、物理ページが必要数あるかを判定する。
【0067】
ステップS15において、物理ページが必要数あると判定された場合には、コントローラ231は、ステップS16の処理を実行する。一方、ステップS15において、物理ページが必要数ないと判定された場合には、コントローラ231は、ステップS14〜S15の処理を繰り返す。
【0068】
続いて、コントローラ231は、重複排除対象となる各論理ページのコード部を抽出して連結する(S16)。具体的に、コントローラ231は、各論理ページから抽出したコード部を、物理ページサイズに収まるように連結する。
【0069】
そして、コントローラ231は、ステップS16において連結した保証コードを物理ページに書き込む(S17)。コントローラ231は、保証コードを書き込むための複数の物理ページを取得している場合には、各物理ページに連結された保証コードを書き込む。
【0070】
続いて、コントローラ231は、管理テーブルである論理/物理アドレス変換テーブル56と逆参照テーブル57を更新する(S18)。具体的に、コントローラ231は、論理/物理アドレス変換テーブル56については、重複排除の対象となった論理ページに該当するエントリについて、物理ページデータアドレス欄562の値をデータ格納先の物理ページアドレスの値に更新し、物理ページコードアドレス欄563の値を保証コード格納先の物理ページアドレスの値に更新する。また、コントローラ231は、保証コードの格納先となる物理ページ内の各保証コードの位置を物理ページコードオフセットアドレス欄564に格納する。
【0071】
また、逆参照テーブル57については、コントローラ231は、重複排除対象となった論理ページに対応付けられていた物理ページに該当するエントリについて更新を行う。すなわち、重複排除対象となった論理ページのアドレスの更新により、参照されなくなった物理ページに対して、参照カウンタ欄572の値をデクリメントする。そして、論理ページアドレス欄573から参照されなくなった論理ページのアドレスを削除する。
【0072】
なお、論理/物理アドレス変換テーブル56の更新は、重複排除処理を行わない通常の書き込み(ライト)処理においても行う必要がある。すなわち、論理ページのアドレスと、新しい書き込み先となる物理ページのアドレスとを対応付けたり、元の格納先の物理ページのエントリから参照していた論理ページのアドレスを削除したりする。
【0073】
(1−3−2)リクラメーション処理、リフレッシュ処理
次に、リクラメーション処理およびリフレッシュ処理の詳細について説明する。
図8に示すように、まず、コントローラ231は、リクラメーションまたはリフレッシュの対象となる物理ブロックリストを取得する(S21)。例えば、コントローラ231は、無効ページの多い物理ブロックをリクラメーション処理の対象とし、長時間アクセスされていない物理ブロックをリフレッシュ処理の対象とする。
【0074】
続いて、コントローラ231は、ステップS21において取得した物理ブロックリストに含まれるすべての物理ブロックに対して処理を実行したか否かを判定する(S220)。ステップS220において、すべての物理ブロックに対して処理を実行したと判定された場合には、コントローラ231は、ステップS221以降の処理を実行する。一方、ステップS220において、すべての物理ブロックに対して処理を実行していないと判定された場合には、コントローラ231は、ステップS22以降の処理を実行する。
【0075】
続いて、コントローラ231は、物理ブロック内のすべての物理ページを対象として、逆参照テーブル57の参照カウント欄572の値が0より大きい物理ページが存在するか否かを判定する(S22)。ステップS22において、参照カウント欄572の値が0より大きい物理ページが存在すると判定された場合には、ステップS23以降の処理を実行し、参照カウント欄572の値が0より大きい物理ページが存在しないと判定された場合には、ステップS221以降の処理を実行する。
【0076】
続いて、コントローラ231は、対象となる物理ページのうち、参照カウント欄572の値が0以上の物理ページXを1つ取得する(S23)。以降、ステップS23において取得した物理ページを物理ページXとして以下説明する。そして、コントローラ231は、逆参照テーブル57の物理ページXに対応するエントリを取得する(S24)。さらに、コントローラ231は、参照元論理ページアドレス欄573から、物理ページXを参照している論理ページのアドレスを取得する(S25)。以降、コントローラ231は、参照元論理ページアドレス欄573に登録されている参照元論理ページを調査する。
【0077】
そして、コントローラ231は、ステップS25において取得した論理ページが、対象としている物理ページXを未だ参照しているか否かを調査する(S26)。なお、重複排除処理時や、通常のライト処理時に実行される管理テーブルの更新処理(ステップS18)において、逆参照テーブル57の参照元論理ページアドレス欄573から物理ページを参照しなくなった論理ページのアドレスを削除している場合には、ステップS26の処理は不要である。一方、逆参照テーブル57がフラッシュメモリに格納されており、容易に更新出来ない場合に、ステップS26において物理ページXの参照の有無を確認する必要がある。
【0078】
次に、コントローラ231は、物理ページXを参照している論理ページを、コピー対象のリストに追加する(S27)。コントローラ231は、物理ページXを参照している論理ページを最終的に0にして、物理ブロックの消去を可能な状態とする。コントローラ231は、ステップS27においては、コピー対象の論理ページをリストに追加するのみで、論理ページの実際のコピー処理は任意の契機に基づいて後で行ってもよい。
【0079】
続いて、コントローラ231は、物理ページXを参照している可能性のあるすべての論理ページについて、参照の有無を確認する(S28)。ステップS28において、物理ページXの参照の有無を確認していない論理ページがある場合には、コントローラ231は、ステップS26以降の処理を繰り返す。一方、ステップS28において、すべての論理ページについて物理ページXの参照の有無を確認したと判定された場合には、ステップS220の処理に戻る。
【0080】
そして、コントローラ231は、ステップS27において作成されたコピー対象リストに含まれる論理ページについて、重複排除処理を試行する(S221)。具体的に、コントローラ231は、コピー対象リストに含まれる論理ページのうち、データ部が同一の論理ページについて重複排除処理を実行する。
【0081】
続いて、コントローラ231は、ステップS221において重複排除処理を実行した後、コピー対象リストに残っている論理ページをコピー先となる物理ページにコピーする(S222)。そして、コントローラ231は、ステップS21においてリクラメーション処理またはリフレッシュ処理の対象となった物理ブロックを消去する(S223)。
【0082】
(1−3−3)マージ処理
次に、マージ処理について説明する。ここで、マージ処理とは、既に重複排除処理が行われている論理ページについて、さらに、同一のデータを有する論理ページまたは物理ページについてそれらを統合する処理を意味する。上記した重複排除処理は、上記したように大サイズのデータをライトする場合や、リクラメーション処理やリフレッシュ処理時などに実行される。したがって、同一のフラッシュメモリモジュール21内で重複排除処理がまだ実行されていない論理ページが存在する場合がある。また、ストレージ装置11に複数のフラッシュメモリモジュール21が存在する場合には、各フラッシュメモリモジュール21内で重複排除処理が実行されるため、複数のフラッシュメモリモジュールにおいて同一のデータを含む論理ページが存在する場合がある。この場合、マージ処理を実行することにより、同一のデータを統合して、さらなるデータ容量の縮減を実現することが可能となる。
【0083】
例えば、
図9Aに示すように、重複排除された論理ページが格納されている物理ページの組が2つあるとする。データ部を格納している2つの物理ページ61Aおよび61Bには、同一のデータが格納されているとする。また、保証コードを格納している2つの物理ページ62Aおよび62Bには、それぞれ、論理ページリストの保証コードが格納されている。これらの物理ページの2つの組について、データ部をさらに共通化して、4つの物理ページ61A、61B、62A、62Bを、3つの物理ページ61C、62C、62Dにまとめることができる。
【0084】
図9Aに示すように、4つの物理ページを3つの物理ページにまとめる場合、保証コードが格納されている物理ページ62Aおよび62Bはそのまま利用し物理ページ62C、62Dとし、データが格納されている物理ページ61Aおよび61Bのうちいずれか一方を利用して61Cとして、他方を無効ページとする。ただし、物理ページの空き領域442に論理/物理アドレス変換テーブル56などの管理情報を格納している場合には、データ格納用として物理ページを新たに割り当てる必要がある。データ格納用として新たに物理ページを割り当てた場合には、データを格納している物理ページ61Aおよび61Bはいずれも無効ページとする。
【0085】
また、重複排除された論理ページが格納されている物理ページの組のうち、保証コード部が格納されている物理ページに空き領域がある場合には、保証コードもマージすることができる。例えば、
図9Bに示すように、物理ページ64Aおよび物理ページ64Bに格納されている保証コードがそれぞれ抽出されて、物理ページ64Cにまとめてコピーされる。そして、物理ページ64Aおよび物理ページ64Bは無効ページとなり廃棄される。また、データが格納されている物理ページ63Aおよび63Bについては、同一のデータが格納されているため、
図9Aと同様に、物理ページ63Aおよび63Bのうちいずれか一方を物理ページ63Cとし、他方を無効ページとする。このように、データ部だけでなく、コード部も統合することにより、4つの物理ページを2つの物理ページにまとめることができる。
【0086】
次に、マージ処理の処理手順について説明する。
図10に示すように、コントローラ231は、まず、マージの対象となる物理ページリストを取得する(S31)。具体的に、コントローラ231は、物理ページリストのうち、有効なページであり、重複排除処理されたページであり、かつ、データ部の等しい物理ページの集合である物理ページリストを取得する。当該物理ページリストは、例えば、大サイズのデータをライトしたり、リクラメーション処理やリフレッシュ処理などを契機とした大サイズのデータを処理したりする場合に、物理ページのデータを検索して作成される。また、各物理ページのデータ部のハッシュ値を算出して管理し、ハッシュ値に基づいて、動的にデータ部の一致するページの組み合わせを検索して物理ページリストを作成してもよい。
【0087】
そして、コントローラ231は、ステップS31において取得したすべての物理ページリストに対して処理を実行したか否かを判定する(S320)。ステップS320において、すべての物理ページに対して処理を実行したと判定された場合には、コントローラ231は、ステップS321以降の処理を実行する。一方、ステップS320において、すべての物理ブロックに対して処理を実行していないと判定された場合には、コントローラ231は、ステップS32以降の処理を実行する。
【0088】
続いて、コントローラ231は、ステップS31において取得した物理ページのうち、逆参照テーブル57の参照カウント欄572の値が0より大きい物理ページが存在するか否かを判定する(S32)。ステップS32において、参照カウント欄572の値が0より大きい物理ページが存在すると判定された場合には、ステップS33以降の処理を実行し、参照カウント欄572の値が0より大きい物理ページが存在しないと判定された場合には、ステップS321以降の処理を実行する。
【0089】
続いて、コントローラ231は、対象となる物理ページのうち、参照カウント欄572の値が0以上の物理ページXを1つ取得する(S33)。以降、ステップS33において取得した物理ページを物理ページXとして以下説明する。そして、コントローラ231は、逆参照テーブル57の物理ページXに対応するエントリを取得する(S34)。さらに、コントローラ231は、参照元論理ページアドレス欄573から、物理ページXを参照している論理ページのアドレスを取得する(S35)。以降、コントローラ231は、参照元論理ページアドレス欄573に登録されている参照元論理ページを調査する。
【0090】
そして、コントローラ231は、ステップS35において取得した論理ページが、対象としている物理ページXを未だ参照しているか否かを調査する(S36)。なお、重複排除処理時や、通常のライト処理時に実行される管理テーブルの更新処理(ステップS18)において、逆参照テーブル57の参照元論理ページアドレス欄573から物理ページを参照しなくなった論理ページのアドレスを削除している場合には、ステップS36の処理は不要である。一方、逆参照テーブル57がフラッシュメモリに格納されており、容易に更新出来ない場合に、ステップS36において物理ページXの参照の有無を確認する必要がある。
【0091】
次に、コントローラ231は、物理ページXを参照している論理ページを、マージ対象のリストに追加する(S37)。そして、コントローラ231は、物理ページXを参照している可能性のあるすべての論理ページについて、参照の有無を確認する(S38)。ステップS38において、物理ページXの参照の有無を確認していない論理ページがある場合には、コントローラ231は、ステップS36以降の処理を繰り返す。一方、ステップS38において、すべての論理ページについて物理ページXの参照の有無を確認したと判定された場合には、ステップS320の処理に戻る。
【0092】
そして、コントローラ231は、ステップS37において作成されたマージ対象リストに含まれる論理ページに格納されている保証コードを格納するための物理ページを取得する(S321)。具体的に、コントローラ231は、対象となる論理ページ数に応じた個数の物理ページを取得する。
【0093】
そして、コントローラ231は、マージ対象となる論理ページの保証コードをマージして、ステップS321において取得した物理ページに当該保証コードを書き込む
(S322)。
【0094】
そして、コントローラ231は、管理テーブルである論理/物理アドレス変換テーブル56と逆参照テーブル57を更新する(S323)。具体的に、コントローラ231は、論理/物理アドレス変換テーブル56については、マージ対象となった論理ページに該当するエントリについて、物理ページデータアドレス欄562に格納されている値を、データ格納先の物理ページアドレスの値に更新し、物理ページコードアドレス欄563の値を保証コード格納先の物理ページアドレスの値に更新する。また、コントローラ231は、保証コードの格納先となる物理ページ内の各保証コードの位置を物理ページコードオフセットアドレス欄564に格納する。
【0095】
また、逆参照テーブル57については、コントローラ231は、重複対象となった論理ページ対応付けられていた物理ページに該当するエントリについて更新を行う。すなわち、論理ページの対応先となるアドレスの更新により、参照されなくなった物理ページに対して、参照カウンタ欄572の値をデクリメントして、論理ページアドレスリスト欄573から参照されなくなった論理ページのアドレスを削除する。
【0096】
なお、論理/物理アドレス変換テーブル56の更新は、重複排除処理を行わない通常の書き込み(ライト)処理においても行う必要がある。すなわち、論理ページのアドレスと、新しい書き込み先となる物理ページのアドレスとを対応付けたり、元の格納先の物理ページのエントリから参照していた論理ページのアドレスを削除したりする。
【0097】
(1−3−4)リード処理
次に、リード処理の処理手順について説明する。
図11に示すように、コントローラ231は、リード対象となる論理ページアドレスを取得する(S41)。具体的に、コントローラ231は、ホスト12からのリードコマンドや、リクラメーション処理やリフレッシュ処理などの内部制御のコピー時にリード対象となる論理ページアドレスを取得する。
【0098】
次に、コントローラ231は、論理/物理アドレス変換テーブル56から、対象となる論理/物理アドレス情報を取得する(S42)。続いて、コントローラ231は、ステップS41において取得した論理ページが重複排除処理されたページかを判定する(S43)。具体的に、コントローラ231は、論理/物理アドレス変換テーブル56の物理ページデータアドレス欄562に格納されているアドレスと、物理ページコードアドレス欄563に格納されているアドレスとが同一のアドレスである場合に、重複排除されていない論理ページであると判定してもよい。
【0099】
ステップS43において、論理ページが重複排除されたページであると判定された場合には、コントローラ231は、ステップS44以降の処理を実行する。一方、ステップS43において、論理ページが重複排除されていないページであると判定された場合には、コントローラ231は、ステップS47の処理を実行する。
【0100】
そして、コントローラ231は、論理ページが重複排除されたページであると判定された場合には、論理ページのデータ部を格納している物理ページデータアドレスを取得する(S44)。続いて、コントローラ231は、論理ページの保証コードを格納している物理ページコードアドレスを取得する(S45)。さらに、コントローラ231は、論理ページの保証コードの物理位置を示す物理ページコードオフセットアドレスを取得する(S46)。
【0101】
また、ステップS43において、論理ページが重複排除されていない通常のページであると判定された場合には、コントローラ231は、論理ページに対応する物理ページのアドレスを取得する(S47)。具体的に、コントローラ231は、論理/物理アドレス変換テーブル56の物理ページデータアドレス欄562に格納されている物理ページデータアドレスを取得する。
【0102】
そして、コントローラ231は、リード対象となる論理ページに対応付けられた物理ページアドレスをもとに、物理ページに格納されているデータをリードする(S48)。
【0103】
(1−4)本実施の形態の効果
以上のように、本実施の形態による計算機システム1では、フラッシュメモリチップに書き込まれる複数のデータのうち、ユーザデータを含むデータ部が共通する複数のデータについて、データと保証コードとを分けて、1つのデータを物理ページに格納し、複数のデータに対応する保証コードを連結して物理ページに格納する。これにより、保証コードが付与されたデータに対しても重複排除を行って、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【0104】
(2)第2の実施の形態
(2−1)計算機システムのハードウェア構成
本実施の形態にかかる計算機システム2のハードウェア構成は、第1の実施の形態にかかる計算機システム1のハードウェア構成と同様であるため、詳細な説明は省略する。本実施の形態は、複数の論理ページの重複排除を実行する点で第1の実施の形態と共通するが、さらに、重複排除対象のデータ部を圧縮する点で第1の実施形態と異なっている。なお、本実施の形態においても、重複排除対象の論理ページの探索方法は、例えば、大サイズのデータをライトする場合や、リクラメーション処理やリフレッシュ処理などのデータ再配置時に、大サイズのデータの中から重複排除の対象となる論理ページの組み合わせを検索する。また、各ページのデータ部のハッシュ値を算出して管理し、ハッシュ値に基づいて、動的にデータ部の一致するページの組み合わせを検索するようにしてもよい。なお、本実施形態では、説明を容易にするために、一定間隔で区切られており、アドレスの連続している論理ページを対象として以下説明する。
【0105】
(2−2)ストレージ装置の内部構成について
本実施の形態にかかるストレージ装置11の内部構成については、第1の実施の形態と同様の構成についての詳細な説明は省略し、第1の実施の形態と異なる構成について特に詳細に説明する。まず、本実施の形態における重複排除の概要について、第1の実施の形態と異なる点について説明する。
【0106】
図12に示すように、第1の実施形態では同一の内容のデータが格納されているデータ部411A、411B、411Cを含むページ群43を、データ部441を含むページ44とコード部451を含むページ45の2つのページに格納している。本実施形態では、さらに、ページ44のデータ「Data 0〜Data n−1」を圧縮して、圧縮データ(Comp Data)72に変換する。
【0107】
ここで、圧縮データは、例えば、フォーマットデータから構成される。上記したように、フォーマットデータは、記憶デバイスを使用する際に、記憶デバイスの異常個所を検知したり保証コードを事前に書き込みしたりすることを目的として、記憶デバイスの全領域に特定パタンのデータが書き込まれる。しかし、フラッシュメモリをはじめとする書き換えが制限されている記憶デバイスにおいては、このフォーマットデータの書き込みにより不必要に書き換え回数を増加させてしまうという問題があった。
【0108】
そこで、本実施形態では、フォーマットデータについては、通常、「0」などの実体を伴わないデータが書き込まれるため、データ部411A、411Bおよび411Cに「0」が書き込まれているページ群43をページ44および45とする重複排除を実行する。さらに、「0」などのフォーマットデータが書き込まれるデータ部を圧縮して、ページ71に集約する。
【0109】
また、
図12に示すように、圧縮データ72が格納されたページ71の空き領域に保証コード「C 0〜C n−1」を格納する。これにより、ページ44およびページ45の2つのページがページ71の1つのページに集約される。なお、ページ71のすべてを圧縮データ72と保証コード73を格納するために使用してもよいし、空き領域(reserve)に管理テーブル等の管理情報を格納してもよい。
【0110】
次に、本実施形態における重複排除の具体例について説明する。
図13Aに、論理ページアドレスと物理ページアドレスとの対応関係を示す。
図13Aに示すように、Addr81は、論理ページアドレスを示し、Data82は、論理ページアドレス空間に格納されているデータを示す。また、Code83は、論理ページアドレス空間に格納されている保証コードを示す。そして、Addr84は、論理ページに対応付けられている物理ページアドレスを示し、Data85は、物理ページアドレス空間に格納されているデータの内容を示す。
【0111】
論理ページアドレス0〜2で示される論理ページ811〜813に格納されているデータ82には、同一の内容のデータ「AAAA」が格納されている。この場合、論理ページ811〜813の各論理ページアドレス0〜2は、物理ページ841の物理ページアドレス0に対応付けられる。物理ページ841には、データ「AAAA」が圧縮されたデータ「A」と、参照元となる論理ページ811〜813に対応する保証コードC0〜C2が格納されている。一方、重複排除されていない論理ページ814は、物理ページ842が対応付けられ、物理ページ842には、通常通り、データと保証コードが格納される。
【0112】
次に、上記した論理ページと物理ページとの対応付けを実現するための管理テーブルについて説明する。論理/物理アドレス変換テーブル86は、論理アドレスと物理アドレスとの対応付けを管理するテーブルであって、
図13Bに示すように、論理ページアドレス欄861、物理ページアドレス欄862およびフラグ欄863から構成される。
【0113】
論理ページアドレス欄861には、論理ページの先頭アドレスが格納される。物理ページアドレス欄862には、論理ページアドレス欄861に対応付けられた物理ページの先頭アドレスが格納される。フラグ欄863には、対応する論理ページが重複排除されているかを判定するためのフラグが格納される。
【0114】
例えば、フラグ欄863に「1」が格納されている場合、対応する論理ページは重複排除されたページであると判定され、圧縮されたデータが解凍されたり、物理ページ内の保証コードの位置が計算されたりする。物理ページ内の保証コードの位置は、例えば、参照元となる論理ページアドレスからのオフセット位置から算出される。フラグ欄863に対応する論理ページアドレスが圧縮されたか否かを判定するフラグを設定することにより、保証コードが格納されている物理ページの実際の位置を保持する必要がなくなる。
【0115】
さらに、物理ページに格納するデータ量を減らすために、論理ページ単位ではなく、任意の複数の論理ページ単位で重複排除されたか否かを判定するフラグを設定するようにしてもよい。例えば、重複対象となる論理ページ群のアドレスの並びが連続であり、データを圧縮後には、データが一定のサイズに収まることが保証されているデータであって、例えば、フォーマットデータである場合に、重複排除された物理ページ内の論理ページ数は事前に固定的に決定されるとする。この場合、複数の論理ページ単位に重複排除されたか否かを判定するフラグを設定することにより、論理/物理アドレス変換テーブル86のテーブルサイズを軽減することができる。ただし、この場合、任意の範囲の論理ページごとに重複排除のためのフラグが設定されるため、特定の範囲内の論理ページのうち、1つの論理ページ以外の論理ページが重複排除されている場合には、重複排除されていない論理ページ用に別途の情報が必要となる。
【0116】
また、逆参照テーブル87は、物理ページがいずれの論理ページに参照されているかを管理するテーブルであって、
図13Cに示すように、物理ページアドレス欄871、参照カウント欄872および論理ページ代表アドレス欄873から構成される。
【0117】
物理ページアドレス欄871には、データおよび保証コードが格納されている物理ページの先頭アドレスが格納される。参照カウント欄872には、物理ページに格納されているデータを参照している論理ページの数が格納される。論理ページ代表アドレス欄872には、参照元の論理ページの代表アドレスが格納される。論理ページの代表アドレスは、重複排除された複数の論理ページの先頭の論理ページのアドレスである。すなわち、当該物理ページをポイントしている任意の論理ページの保証コードの位置を、論理ページの代表アドレスからのオフセットから求めることができる。
【0118】
また、逆参照テーブル87において、各物理ページに対応する情報を格納するのではなく、任意の数の物理ページ単位に対応する情報を格納することにより、逆参照テーブル87に格納する情報量を減らすようにしてもよい。例えば、消去単位となる物理ブロックの単位で、参照カウント数をまとめて管理してもよい。この場合、消去単位の参照カウント数と、参照元の論理ページの代表アドレスをもとに論理アドレスと物理アドレスの変換を行って、参照元の論理ページを確認することにより、物理ページ単位毎の参照カウント数を復元することができる。
【0119】
(2−3)ストレージ装置の動作の詳細
(2−3−1)重複排除処理
次に、本実施形態にかかるストレージ装置11における重複排除処理について説明する。以下では、第1実施の形態と異なる処理について特に説明し、第1の実施の形態と同様の構成については説明を省略する。
図14に示すように、まず、コントローラ213は、重複排除の対象となる論理ページリストを取得する(S51)。論理ページリストは、ページ内のユーザデータが格納されているデータ部の内容が同一で、保証コードが格納されているコード部の内容が異なる少なくとも3つ以上のページから構成される。
【0120】
次に、コントローラ213は、ステップS51において取得した論理ページリストに含まれる複数の論理ページのデータ部の圧縮後のデータサイズが所定の閾値THより小さいか否かを判定する(S52)。ステップS52において、圧縮後のデータサイズが所定の閾値TH以上の場合には、コントローラ213は、重複排除処理を行わず、通常のライト処理を実行する(S58)。ステップS52において圧縮後のデータサイズが所定の閾値THより小さいと判定された場合には、ステップS53以降の重複排除処理を実行する。
【0121】
ここで、閾値THは、予め管理プログラム等に設定されており、データサイズが閾値THより小さい場合に、重複排除の対象となる論理ページの圧縮後のデータ部のサイズとコード部のサイズとを合計した値が1つの物理ページのサイズに収まるように設定された値である。
【0122】
そして、ステップS52において、圧縮後のデータサイズがTHより小さいと判定された場合には、コントローラ231は、ステップS51において取得した論理ページのデータ部を格納する物理ページを取得する(S53)。
【0123】
そして、コントローラ231は、重複排除対象となる論理ページのデータ部を圧縮する(S54)。そして、コントローラ231は、重複排除対象となる各論理ページのコード部を抽出して連結する(S55)。そして、ステップS54において圧縮したデータ部と、ステップS55において連結したコード部とを連結して、ステップS53において取得した物理ページに書き込む(S56)。
【0124】
続いて、コントローラ231は、管理テーブルである論理/物理アドレス変換テーブル56と逆参照テーブル57を更新する(S57)。具体的に、コントローラ231は、論理/物理アドレス変換テーブル86については、重複排除の対象となった論理ページに該当するエントリについて、物理ページアドレス欄862の値をデータ格納先の物理ページアドレスの値に更新し、重複排除フラグ欄863に「1」を格納する。
【0125】
また、逆参照テーブル87については、コントローラ231は、重複対象となった論理ページに対応付けられている物理ページに該当するエントリについて更新を行う。すなわち、逆参照テーブル87の参照カウント欄872に「1」を格納し、さらに、論理ページ代表アドレス873に対象となる論理ページの代表アドレスを格納する。
【0126】
(2−3−2)リクラメーション処理、リフレッシュ処理
本実施の形態にかかるリクラメーション処理およびリフレッシュ処理は、第1の実施の形態にかかるリクラメーション処理およびリフレッシュ処理とほぼ同様のため、異なる点について詳細に説明する。本実施の形態では、
図15に示すように、コントローラ231は、ステップS63において処理の対象となる物理ページXを取得した後、物理ページXを参照している論理ページの代表アドレスを取得する(S64)点で第1の実施の形態と異なっている。
【0127】
そして、ステップS64において取得した論理ページの代表アドレスを開始点として、物理ページXを参照している可能性のある論理ページの現在の参照先を調べるために、論理ページの代表アドレスの次の論理ページの論理/物理アドレス変換テーブル86のエントリを取得する(S65)。そして、ステップS65において取得した論理ページが、物理ページXを未だ参照しているか否かを調査して(S66)、物理ページXを参照している場合には当該論理ページをコピー対象リストに追加する(S67)。
【0128】
(2−3−3)リード処理
本実施の形態にかかるリード処理についても、第1の実施の形態にかかるリード処理と異なる点について特に詳細に説明する。
図16に示すように、コントローラ231は、リード対象となる論理ページアドレスを取得する(S71)。
【0129】
次に、コントローラ231は、論理/物理アドレス変換テーブル86から、対象となる論理/物理アドレス情報を取得する(S72)。続いて、コントローラ231は、ステップS41において取得した論理ページが重複排除処理されたページかを判定する(S73)。
【0130】
そして、ステップS73において、論理ページが重複排除されたページであると判定された場合には、コントローラ231は、ステップS74以降の処理を実行する。一方。ステップS73において、論理ページが重複排除されていないページであると判定された場合には、コントローラ231は、ステップS731の処理を実行する。
【0131】
そして、コントローラ231は、論理ページが重複排除されたページであると判定された場合には、論理ページのデータ部を格納している物理ページデータアドレスを取得する(S74)。続いて、コントローラ231は、参照元の論理ページ代表アドレスから、物理ページ内の保証コードのオフセット位置を計算する(S75)。そして、コントローラ231は、リード対象となる論理ページに対応付けられた物理ページアドレスに格納されたデータをリードする(S76)。さらに、コントローラ231は、ステップS76において取得したデータを解凍する(S77)。
【0132】
一方、ステップS73において、論理ページが重複排除されていないページであると判定された場合には、コントローラ231は、論理ページに対応するデータ部及び保証コード部を格納している物理ページアドレスを取得する(S731)。そして、コントローラ231は、ステップS731で取得した物理ページアドレスに格納されている物理ページをリードする(S732)。
【0133】
また、ステップS73において、論理ページが重複排除されていない通常のページであると判定された場合には、コントローラ231は、論理ページに対応する物理ページのアドレスを取得する(S731)。具体的に、コントローラ231は、論理/物理アドレス変換テーブル56の物理ページデータアドレス欄562に格納されている物理ページデータアドレスを取得する。
【0134】
そして、コントローラ231は、リード対象となる論理ページに対応付けられた物理ページアドレスをもとに、物理ページに格納されているデータをリードする(S732)。
【0135】
(2−4)本実施の形態の効果
以上のように、本実施の形態による計算機システム2では、重複排除処理に加え、さらに、重複排除対象となるデータ部を圧縮する。これにより、保証コードが付与されたデータに対しても重複排除を行って、さらに、データ部を圧縮して、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【0136】
(3)第3の実施の形態
(3−1)計算機システムのハードウェア構成
本実施の形態にかかる計算機システム3のハードウェア構成は、第1の実施の形態にかかる計算機システム1のフラッシュメモリストレージ17が、ストレージ装置11とは別体の装置として構成されている点で異なっている。本実施の形態は、複数の論理ページの重複排除を実行する点で第1の実施の形態と共通するが、ストレージ装置11とフラッシュメモリストレージ17とが連携して重複排除を実行する点で異なっている。具体的に、ストレージ装置11が、ホスト12からの要求に応じて記憶領域に書き込むフォーマットデータ等について、フラッシュメモリストレージ17に実際にデータを送信するのではなく、特定のパタンを送信することによりデータ転送量を削減している。
【0137】
(3−2)計算機システムの動作の詳細
次に、ストレージ装置11とフラッシュメモリストレージ17との間で実行される重複排除処理について説明する。
【0138】
図17に示すように、まず、ストレージ装置11は、ホスト12からの要求に応じて、記憶領域のフォーマットを開始する(S81)。ストレージ装置11は、対象となる全記憶領域に対して、それぞれのセクタ毎に特定パタンを書き込むことにより記憶領域のフォーマットを行う。また、ストレージ装置11は、特定パタンを書き込む際に、保証コードも付与する。
【0139】
そして、ストレージ装置11は、ホスト12からの要求に応じて生成したフォーマットパタンと、フォーマットデータに付与する保証コードの生成ルールをパタン情報としてコントローラ213に通知する(S82)。ここで、パタン情報は、例えば、オール0などの固定的なパタンであり、保証コードは、例えば、データ部から生成されるエラー訂正符号に加えて、論理アドレス情報が付与された形式のコードなどである。すなわち、ストレージ装置11は、実際にフォーマット情報を記憶領域に書き込むのではなく、フォーマットパタンや保証コードの生成ルールを含むパタン情報を通知する。これにより、データ転送量を削減することができる。
【0140】
そして、フラッシュメモリストレージ17は、ステップS82においてストレージ装置11から送信されたパタン情報を受領する(S83)。そして、フラッシュメモリストレージ17は、ストレージ装置11から送信されたパタン情報を元に、フォーマットの対象とされている記憶領域に対応する各論理ページの保証コードを生成する(S84)。続いて、フラッシュメモリストレージ17は、パタン情報を元に、フォーマットパタンを生成する(
S85)。
【0141】
そして、フラッシュメモリストレージ17は、ステップS85において生成された論理ページに対して、重複排除処理を実行する(S86)。ステップS86における重複排除処理は、第1の実施の形態と同様の処理であるため、詳細な説明は省略する。
【0142】
そして、フラッシュメモリストレージ17は、重複排除された論理テーブルについて、論理/物理アドレス変換管理テーブル56の対象となるエントリを更新する(S87)。ステップS87における論理/物理アドレス変換管理テーブル56の更新処理は、第1の実施の形態と同様の処理であるため、詳細な説明は省略する。
【0143】
そして、フラッシュメモリストレージ17は、ストレージ装置11にフォーマット処理が終了した旨を通知する(S88)。そして、ストレージ装置11は、フラッシュメモリストレージ17からフォーマット処理が終了した旨の通知を受領して、フォーマット処理が終了したことをホスト12に通知する。
【0144】
(3−3)本実施の形態の効果
本実施形態にかかる計算機システム3によれば、特定のパタン情報に基づいて、記憶領域にデータおよび保証コードを書き込む。これにより、データ書き込みにおけるデータ転送量を削減することができる。さらに、保証コードが付与されたデータに対しても重複排除を行って、記憶媒体への書き込み量を縮減することによりフラッシュメモリの長寿命化を図ることができる。さらに、追記型の書き込み方法を採用するフラッシュメモリなどの記憶媒体において、ユーザが使用していない未使用領域を増加させて、未使用領域をデータの追記用の領域とすることにより、性能安定性の向上を図ることが可能となる。
【0145】
(4)他の実施の形態
なお、上述の実施の形態においては、フラッシュ制御装置210に格納されている各種プログラムに基づいて、重複排除処理等を実行しているが、かかる例に限定されず、例えば、フラッシュ制御装置210をストレージ装置11とは別体の装置に設けて、当該フラッシュ制御装置210と協同して各種機能を実現するようにしてもよい。また、フラッシュ制御装置210に格納されている各種プログラムをストレージ装置11とは別体の他の装置に設けて、当該プログラムがフラッシュ制御装置210に呼び出されることにより各種機能を実現するようにしてもよい。