JP2018156137A - 読出制御装置、ストレージコントローラ、およびプログラム - Google Patents

読出制御装置、ストレージコントローラ、およびプログラム Download PDF

Info

Publication number
JP2018156137A
JP2018156137A JP2017049946A JP2017049946A JP2018156137A JP 2018156137 A JP2018156137 A JP 2018156137A JP 2017049946 A JP2017049946 A JP 2017049946A JP 2017049946 A JP2017049946 A JP 2017049946A JP 2018156137 A JP2018156137 A JP 2018156137A
Authority
JP
Japan
Prior art keywords
unit
packing
reading
read
cluster
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2017049946A
Other languages
English (en)
Inventor
孝幸 伊東
Takayuki Ito
孝幸 伊東
淳 松村
Atsushi Matsumura
淳 松村
知也 児玉
Tomoya Kodama
知也 児玉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2017049946A priority Critical patent/JP2018156137A/ja
Priority to US15/684,975 priority patent/US20180267746A1/en
Publication of JP2018156137A publication Critical patent/JP2018156137A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0658Controller construction arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Memory System (AREA)

Abstract

【課題】不揮発性メモリへのアクセス速度の低下を抑制する。
【解決手段】ストレージ装置10(読出制御部22)は、変換部22Aと、読出部22Bと、解析部22Cと、を備える。変換部22Aは、読出対象の圧縮クラスタの論理アドレスを、NAND型フラッシュメモリ18(不揮発性メモリ)の物理アドレスに変換する。読出部22Bは、NAND型フラッシュメモリ18から、該物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す。解析部22Cは、パッキングユニットに含まれるデータの読出に並行して、パッキングユニットに含まれるヘッダ情報を解析し、パッキングユニットにおける、読出対象の圧縮クラスタの位置情報を取得する。
【選択図】図1

Description

本発明の実施の形態は、読出制御装置、ストレージコントローラ、およびプログラムに関する。
NANDフラッシュなどの不揮発性メモリを用いた記憶装置が用いられている。これら記憶装置では、外部から入力されたデータを不揮発性メモリに記憶するとともに、記憶先の物理アドレスと外部から参照可能な論理アドレスとの対応関係を記憶する。情報を読み出す場合、読出対象のデータの論理アドレスに対応する物理アドレスを用いて、不揮発性メモリに記憶されたデータを読み出し、外部へ出力する。データは、所定サイズのクラスタ単位で不揮発性メモリに記憶され、クラスタ単位で物理アドレスの対応付けが行われている。
このような記憶装置において、データを圧縮した圧縮クラスタを、不揮発性メモリに記憶する手法が知られている。また、圧縮クラスタの位置およびサイズ情報の一部を、ECC(Error−Correcting Code)を適用するデータ単位であるECCユニットに保持する方法も示されている。しかし、従来では、読出対象のECCユニットを読出し、読出したECCユニットに含まれる圧縮クラスタの位置およびサイズ情報を取得した後に、必要数のECCユニットをさらに読み出す、と言った処理が必要であった。このため、従来では、特にランダムアクセス時の読出しの遅延時間が大きくなり、不揮発性メモリへのアクセス速度が低下するという問題があった。
特許5978259号公報
本発明が解決しようとする課題は、不揮発性メモリへのアクセス速度の低下を抑制することができる、読出制御装置、ストレージコントローラ、およびプログラムを提供することである。
実施の形態の読出制御装置は、変換部と、読出部と、解析部と、を備える。変換部は、読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの物理アドレスに変換する。読出部は、不揮発性メモリから、物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す。解析部は、パッキングユニットに含まれるデータの読出に並行して、パッキングユニットに含まれるヘッダ情報を解析し、パッキングユニットにおける読出対象の圧縮クラスタの位置情報を取得する。
ストレージ装置の模式図。 パッキングユニットのデータ構成を示す模式図。 ヘッダ情報のデータ構成を示す模式図。 ヘッダ情報のデータ構成を示す模式図。 ヘッダ情報のデータ構成を示す模式図。 読出制御の説明図。 データの読出および解析の説明図。 データの読出および解析の説明図。 書込処理の手順を示すフローチャート。 読出処理の手順を示すフローチャート。 ストレージ装置の模式図。 データの読出および解析の説明図。 データの読出および解析の説明図。 ハードウェア構成図。
以下に添付図面を参照して、読出制御装置、ストレージコントローラ、および読出プログラムを詳細に説明する。
(第1の実施の形態)
図1は、本実施の形態のストレージ装置10の一例を示す模式図である。
ストレージ装置10は、不揮発性メモリを用いた記憶装置である。ストレージ装置10は、例えば、SSD(Solid State Drive)である。
ストレージ装置10は、ホスト装置12と通信可能に接続されている。ストレージ装置10とホスト装置12とは、例えば、SATA(Serial AT Attachment)、SAS(Serial Attached SCSI)、またはPCIe(Peripheral Component Interconnect Express)などのインターフェース規格で接続されている。
ホスト装置12は、PC(Personal Computer)、ワークステーション、またはサーバ装置などの情報処理装置である。ホスト装置12は、ストレージ装置10に対して、データの書込要求や、データの読出要求などを行う。
ストレージ装置10は、ホスト・インターフェース部14と、ストレージコントローラ20と、メモリ・インターフェース部16と、NAND型フラッシュメモリ18と、を備える。
ホスト・インターフェース部14は、ストレージコントローラ20とホスト装置12とを接続するためのインターフェースである。ストレージコントローラ20は、ホスト・インターフェース部14を介してホスト装置12に接続される。
メモリ・インターフェース部16は、ストレージコントローラ20とNAND型フラッシュメモリ18とを接続するためのインターフェースである。ストレージコントローラ20は、メモリ・インターフェース部16を介してNAND型フラッシュメモリ18に接続される。
NAND型フラッシュメモリ18は、不揮発性メモリの一例である。
NAND型フラッシュメモリ18には、ストレージコントローラ20によって、書込制御や読出制御が行われる。
NAND型フラッシュメモリ18は、記憶素子(セルと称される)を備える。NAND型フラッシュメモリ18の記憶素子による領域(セル・アレイ)は、1ビットまたは多ビットの情報を記憶する。
NAND型フラッシュメモリ18に対するデータの読出制御や書込制御は、物理ページ単位で行われる。物理ページは、予め定めた数の複数のセルを含む。また、NAND型フラッシュメモリ18に対する消去は、物理ブロック単位で行われる。物理ブロックは、予め定めた数の複数の物理ページを含む。物理ページのサイズは、例えば、4kyte、8kbyte、16kbyteなどである。
NAND型フラッシュメモリ18は、データ・バッファを有する。データ・バッファは、ページ・レジスタと称される場合もある。
NAND型フラッシュメモリ18からデータを読出す場合、まずセル・アレイから、指定された物理ページのデータが、データ・バッファへと読みだされる。そして、データ・バッファ上のデータが、データバスおよびメモリ・インターフェース部16を介して、ストレージコントローラ20へ出力される。
例えば、NAND型フラッシュメモリ18における物理ページ内の一部のデータを読み出す場合でも、セル・アレイからデータ・バッファへの読出しは、物理ページ単位で実施される。一方、データ・バッファからストレージコントローラ20へのデータの出力は、データバスを経由したシーケンシャルな転送処理であり、所定の一部分のみを転送することが可能である。
NAND型フラッシュメモリ18へのデータの書込みについても、データ・バッファを経由して実施される。書込みを行う場合、ストレージコントローラ20からメモリ・インターフェース部16およびNAND型フラッシュメモリ18におけるデータ・ポートを経由して、書込みデータがデータ・バッファへと転送される。その後、データ・バッファの内容が、セル・アレイ中の指定された物理ページに対して書込まれる。
次に、ストレージコントローラ20について説明する。ストレージコントローラ20は、NAND型フラッシュメモリ18へのデータの書込制御および読出制御を行う制御装置である。ストレージコントローラ20は、1個または複数個のLSI(Large Scale Integrated Circuit)で構成されている。
ストレージコントローラ20は、書込制御部24と、読出制御部22と、を備える。ホスト・インターフェース部14、メモリ・インターフェース部16、読出制御部22、および書込制御部24は、アドレスバスおよびデータバスなどのバスによって互いに通信可能に接続されている。
書込制御部24は、圧縮部24Aと、パッキング処理部24Bと、書込部24Cと、を備える。読出制御部22は、変換部22Aと、読出部22Bと、解析部22Cと、伸長部22Dと、を備える。読出制御部22、変換部22A、読出部22B、解析部22C、伸長部22D、書込制御部24、圧縮部24A、パッキング処理部24B、および書込部24Cは、例えば、1または複数のプロセッサにより実現される。例えば上記各部は、CPU(Central Processing Unit)などのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のIC(Integrated Circuit)などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち1つを実現してもよいし、各部のうち2以上を実現してもよい。
なお、本実施の形態および後述する実施の形態において用いる「プロセッサ」との文言は、例えば、CPU、GPU(Graphical Processing Unit)或いは、特定用途向け集積回路(Application Specific Integrated Circuit:ASIC)、プログラマブル論理デバイス(例えば、単純プログラマブル論理デバイス(Simple Programmable Logic Device:SPLD)、複合プログラマブル論理デバイス(Complex Programmable Logic Device:CPLD)、およびフィールドプログラマブルゲートアレイ(Field Programmable Gate Array:FPGA))の回路を意味する。
プロセッサは、記憶部に保存されたプログラムを読出し実行することで、上記各部を実現する。なお、記憶部にプログラムを保存する代わりに、プロセッサの回路内にプログラムを直接組込むよう構成してもよい。この場合、プロセッサは回路内に組込まれたプログラムを読出し実行することで、上記各部を実現する。
書込制御部24は、ホスト装置12から受付けた書込みデータを、圧縮およびパッキングし、NAND型フラッシュメモリ18へ書込む、書込制御を行う。
書込制御部24は、圧縮部24Aと、パッキング処理部24Bと、書込部24Cと、を有する。
書込制御部24は、ホスト装置12から書込要求を受付ける。書込要求は、書込み対象のデータと、論理アドレス(Logical Block Address:LBA)と、を含む。LBAは、外部(例えば、ホスト装置12)から参照可能な論理ブロックアドレスである。LBAは、例えば、512バイトのセクタを単位とするアドレスである。
圧縮部24Aは、書込要求に含まれる、書込み対象のデータを取得する。なお、本実施の形態では、書込要求には、所定の単位(クラスタ)の、書込み対象のデータが含まれるものとする。クラスタとは、予め定めたサイズ(例えば、4kbyte)ごとにデータをまとめたものである。なお、クラスタの単位が1つのセクタである場合には、クラスタとセクタは同じであり、LCAとLBAは同じである。
圧縮部24Aは、書込み対象のデータを、クラスタごとに圧縮し、圧縮クラスタを生成する。
なお、書込要求に含まれる、書込み対象のデータのサイズが、クラスタより大きい場合がある。この場合、圧縮部24Aは、書込み対象のデータをクラスタ毎に分割し、分割したクラスタの各々の圧縮クラスタを生成すればよい。
圧縮部24Aは、クラスタについて、可逆的な圧縮方法による圧縮処理を行う。圧縮処理は、例えば、Lempel−Ziv(LZ77,LZ78等)、Deflate、あるいは、その他各種の辞書式圧縮、などである。また、圧縮部24Aは、ブロックソートに基づく符号化(例えばbzip2等)や、各種のエントロピー符号化等により、圧縮処理を行ってもよい。圧縮部24Aは、クラスタを圧縮処理することで生成した圧縮クラスタを、パッキング処理部24Bへ出力する。
なお、圧縮処理によって生成された圧縮クラスタは、圧縮前のクラスタに比べて、データサイズが小さくなる(圧縮率が閾値以上)。
しかし、クラスタのデータの特性や圧縮方式により、クラスタに対する、圧縮後の圧縮クラスタの圧縮率が、閾値未満の場合がある。すなわち、圧縮処理しても、データサイズが小さくならない、または、データサイズが大きくなる場合がある。
このため、圧縮率が閾値未満である場合、圧縮部24Aは、圧縮クラスタに代えて、元のクラスタと、非圧縮であることを示すフラグと、をパッキング処理部24Bへ出力してもよい。圧縮率の閾値には、例えば、NAND型フラッシュメモリ18からのデータの読出しの遅延量増減の合計が負(減少)となる圧縮率を、予め設定すればよい。このようにすることで、圧縮によりデータサイズが増大してしまうことを防ぐことができる。
次に、パッキング処理部24Bについて説明する。
パッキング処理部24Bは、圧縮部24Aから圧縮クラスタを取得する。また、パッキング処理部24Bは、圧縮クラスタの論理アドレスを取得する。パッキング処理部24Bは、書込要求に含まれる論理アドレスを読取ることで、論理アドレスを取得する。
パッキング処理部24Bは、パッキングユニットを生成する。パッキングユニットは、1または複数の圧縮クラスタと、ヘッダ情報と、を含む。
図2は、パッキングユニットのデータ構成の一例を示す模式図である。なお、図2には、NAND型フラッシュメモリ18の物理ページに含まれる、複数のパッキングユニットを一例として示した。
パッキングユニットは、ヘッダ情報と、1以上の圧縮クラスタ(またはその一部分)と、から構成される。パッキングユニットのデータサイズは、予め定めればよい。パッキングユニットのデータサイズは、例えば、物理ページと同一、または、物理ページ以下のサイズであればよい。また、物理ページは、1以上のパッキングユニットを含む構成であればよい。また、例えば、パッキングユニットは、クラスタ(圧縮前のクラスタ)と同じサイズであってもよい。
パッキング処理部24Bは、圧縮部24Aから取得した圧縮クラスタを、パッキングユニットのヘッダ情報の直後から、順に配置する。例えば、配置対象のパッキングユニットに既に圧縮クラスタが配置されている場合、パッキング処理部24Bは、今回取得した圧縮クラスタを、前回取得した圧縮クラスタの直後に配置する。そして、パッキング処理部24Bは、配置した圧縮クラスタの末尾が、配置対象のパッキングユニットからはみ出す場合、当該はみ出した部分については、次のパッキングユニットの先頭(ヘッダ情報の直後)に配置する。
また、パッキング処理部24Bは、パッキングユニット内に先頭位置を含む圧縮クラスタに関する情報を、該パッキングユニットのヘッダ情報に登録する。
詳細には、ヘッダ情報は、該ヘッダ情報を含むパッキングユニットに含まれる、圧縮クラスタの論理アドレスと、該パッキングユニット内における圧縮クラスタの位置を示す位置情報(以下、オフセットと称する場合がある)と、を、少なくとも対応づけたものである。この位置情報は、物理アドレスの一種である。
ヘッダ情報に、圧縮クラスタの論理アドレス(LCA:Logical Cluster Address)と、該圧縮クラスタのオフセットと、を対応付けて保持することで、パッキングユニット内に複数の圧縮クラスタが含まれる場合であっても、論理アドレス(LCA)から、目的とする圧縮クラスタの位置情報(オフセット)を用意に取得可能とすることができる。
本実施の形態では、パッキング処理部24Bは、LCAを、圧縮クラスタの論理アドレスとして、ヘッダ情報に格納する。LCAは、圧縮クラスタのLBAの、先頭アドレスに対応する部分(LBAの上位ビット部分)である。
パッキング処理部24Bは、ヘッダ情報と、圧縮クラスタと、を含むパッキングユニットを、書込部24Cへ出力する。
なお、パッキング処理部24Bは、圧縮部24Aから取得した圧縮クラスタを、バイト単位で隙間なく詰めて、パッキングユニットに配置してもよい。また、パッキング処理部24Bは、パッキングユニットにおける、所定サイズ(例えば、64Byte、512Byteなど)の単位に相当する位置ごとに、圧縮クラスタの先頭を合わせて配置することで、パッキングユニットを生成してもよい。
また、所定サイズの単位に相当する位置ごとに、圧縮クラスタの先頭を併せて配置するときに、圧縮クラスタのサイズが該単位未満である場合がある。この場合、パッキング処理部24Bは、圧縮クラスタの末尾から次の単位に相当する位置までの間を、パディング処理すればよい。パディング処理とは、0または任意データによって不足領域を埋める処理である。
パッキング処理部24Bが、該所定サイズの単位として、バイト単位、または、より小さいサイズの単位を用いると、パッキングによるデータ増加を抑制することができる。一方パッキング処理部24Bが、より大きいサイズの該所定サイズの単位を用いると、ヘッダ情報のデータ量の削減を図ることができる。
なお、パッキング処理部24Bは、1つのパッキングユニットに詰め込み可能な圧縮クラスタ数の最大値を予め設定してもよい。そして、パッキング処理部24Bは、この最大値に相当する数の圧縮クラスタを、1つのパッキングユニットとして生成してもよい。そして、最大値の数の圧縮クラスタを1つのパッキングユニットとして生成した後に、次に取得した圧縮クラスタは、次のパッキングユニットに割当てればよい。
なお、NAND型フラッシュメモリ18における物理ブロックの末尾に位置するパッキングユニットの、末尾に配置された圧縮クラスタの末尾が、該パッキングユニットからはみ出す場合がある。
NAND型フラッシュメモリ18に対する消去は、物理ブロック単位で行われる。このため、1つの圧縮クラスタが、複数の物理ブロックに跨いで配置されていると、物理ブロックの消去効率や、物理ブロックの再利用(GC(Garbage Collection)処理)の処理効率が低下する。
そこで、この場合、パッキング処理部24Bは、該パッキングユニットに該圧縮クラスタを詰め込まずに、該圧縮クラスタを、次の物理ブロックのパッキングユニットに配置してもよい。なお、次の物理ブロックは、次の書込み先となる他の物理ブロックである。なお、次の物理ブロックは、GC処理の関係上、アドレス順に限定されない。
このように圧縮クラスタをパッキング処理することで、パッキング効率は低下するものの、NAND型フラッシュメモリ18へのランダムアクセス速度の低下を防ぐことができる。
また、NAND型フラッシュメモリ18における物理ページの末尾に位置するパッキングユニットの、末尾に配置された圧縮クラスタの末尾が、該パッキングユニットからはみ出す場合がある。
1つの圧縮クラスタが、複数の物理ページに跨いで配置されていると、当該圧縮クラスタを読出すためには、2つの物理ページをセル・アレイから読み出す必要が生じる。このため、NAND型フラッシュメモリ18へのランダムアクセス時の読出速度が低下する場合がある。
そこで、この場合、パッキング処理部24Bは、該パッキングユニットに該圧縮クラスタを詰め込まずに、該圧縮クラスタを、次の物理ページのパッキングユニットに配置してもよい。このように圧縮クラスタをパッキング処理することで、パッキング効率は低下するものの、NAND型フラッシュメモリ18へのランダムアクセス速度の低下を防ぐことができる。
なお、パッキングユニットに含まれるヘッダ情報は、該パッキングユニットに含まれる圧縮クラスタの長さ(データ長)を示す長さ情報、および、該パッキングユニットに先頭が含まれる圧縮クラスタの数、の少なくとも一方を、更に含んでいてもよい。
具体的には、パッキングユニットに含まれるヘッダ情報は、該パッキングユニットに先頭が含まれる圧縮クラスタの数を含む。また、該ヘッダ情報は、該パッキングユニットに先頭が含まれる圧縮クラスタの各々の、LCA(論理アドレス)と、オフセット(パッキングユニット内における圧縮クラスタの位置情報)と、圧縮クラスタの長さ情報と、を対応づけた情報である。
圧縮クラスタのサイズは、圧縮前のクラスタや圧縮方法によって異なるものとなる。このため、ヘッダ情報に、圧縮クラスタの長さ情報を含めることで、圧縮クラスタの読出し時には、該長さ情報の長さごとに圧縮クラスタを抽出することができる。このため、データの読出時には、NAND型フラッシュメモリ18から読出したデータから、圧縮データを容易に抽出することができる。
図3〜図5は、ヘッダ情報のデータ構成の一例を示す模式図である。
例えば、図3に示すように、ヘッダ情報は、圧縮クラスタの数(num_entry)を含む。また、ヘッダ情報は、該ヘッダ情報を含むパッキングユニットに含まれる圧縮クラスタの各々の、LCA(論理アドレス)と、オフセット(位置情報:comp_clst_offset[i])と、圧縮クラスタの長さ情報(comp_clst_len[i])と、を含む。
なお、ヘッダ情報は、図4に示すデータ構成であってもよい。図4に示すように、ヘッダ情報は、図3に示すヘッダ情報における圧縮クラスタの長さ情報(comp_clst_len[i])に代えて、パッキングユニットの末尾に配置された圧縮クラスタの長さ情報(comp_clst_len[num_entry])を含む構成であってもよい。
また、ヘッダ情報は、パッキングユニットの末尾に配置された圧縮クラスタの長さ情報(comp_clst_len[num_entry])に代えて、パッキングユニットの末尾に配置された圧縮クラスタの末尾の位置を示す位置情報を含む構成であってもよい。
パッキングユニットに含まれる圧縮データの末尾の位置は、次に配置された圧縮クラスタの先頭の位置に一致する。そして、パッキングユニットに含まれる圧縮データの長さは、これらの末尾の位置と先頭の位置とから算出可能である。このため、図4に示すデータ構成のヘッダ情報とすることで、パッキングユニットに含まれる各圧縮クラスタの位置と長さ情報を、効率的にヘッダ情報として保持することができる。
なお、ヘッダ情報に含まれる、圧縮クラスタの数(num_entry)を示す情報は、所定のビット数による整数で符号化してもよいし、任意の可変長符号(例えばユーナリー符号等)を用いて符号化してもよい。この所定のビット数は、パッキングユニットに割り当てられる圧縮クラスタの最大値に基づいて、設定すればよい。また、可変長符号を用いて符号化する場合、パッキングユニットに割当てられる最大値までの整数を表現可能なトランケーテッド符号(例えばトランケーテッド・ユーナリー符号等)を用いてもよい。
また、上記位置情報(オフセット)や長さ情報は、バイト数によって示してもよい。圧縮クラスタの位置情報(オフセット)は、例えば、該圧縮クラスタを含むパッキングユニットの先頭から該圧縮クラスタの先頭位置までのバイト数で表せばよい。また、圧縮クラスタの位置情報(オフセット)は、例えば、該圧縮クラスタを含むパッキングユニットの末尾から該圧縮クラスタの先頭位置までのバイト数であってもよい。
また、上述したように、パッキング処理部24Bが、バイト単位ではなく、所定のサイズ(8Byte、512Byteなど)の単位で、圧縮クラスタをパッキングする場合がある。この場合、パッキング処理部24Bは、圧縮クラスタの位置情報(オフセット)や圧縮クラスタの長さ情報として、この所定のサイズに対応する上位ビット部分のみをヘッダ情報に登録してもよい。
例えば、512Byteを所定のサイズの単位とすると仮定する。512Byte=2Byteである。この場合、パッキング処理部24Bは、バイト数によって示される位置情報(オフセット)の下位9ビット分を除いた部分を、位置情報(オフセット)として、ヘッダ情報に登録してもよい。これにより、パッキングの単位が大きい場合であっても、ヘッダ情報のデータ量を削減することができる。
なお、上述したヘッダ情報のデータ構成は、一例であり、類似の範囲で変更・並び替えを行ってもよい。
また、上述したように、圧縮部24Aが圧縮処理しても、データサイズが小さくならない、または、データサイズが大きくなる場合がある。この場合、パッキング処理部24Bは、圧縮部24Aから、圧縮クラスタに代えて、元のクラスタと、非圧縮であることを示すフラグと、を受付ける。
パッキング処理部24Bは、非圧縮であることを示すフラグを受付けた場合、該フラグと共に受付けたクラスタを、次のパッキングユニットの先頭に配置してもよい。
例えば、パッキングユニットのサイズが、(非圧縮の)クラスタのサイズと同一である場合がある。この場合、パッキング処理部24Bは、単一のパッキングユニットに、このクラスタを配置すればよい。
この場合には、パッキング処理部24Bは、図5に示すヘッダ情報を生成すればよい。例えば、図5の“no_compression_flag”が真である場合、パッキング処理部24Bは、当該パッキングユニットのデータ部分に、非圧縮のクラスタを格納する。
なお、パッキング処理部24Bは、生成中のパッキングユニットに空き領域が有る場合であっても、該フラグを受付けた場合には、該フラグと共に受付けた非圧縮のクラスタを、次のパッキングユニットに割当てればよい。
この場合、該パッキングユニットの前の、空き領域の有るパッキングユニットについて、パッキング処理部24Bは、空き領域をそのままとしてもよいし、該空き領域内に収まる他の圧縮クラスタを新たに取得した場合に、該圧縮クラスタを該パッキングユニットに配置してもよい。
次に、書込部24Cについて説明する。書込部24Cは、パッキング処理部24Bから受け付けたパッキングユニットを、NAND型フラッシュメモリ18へ書込む。また、書込部24Cは、管理情報を更新する。
書込部24Cは、パッキング処理部24Bからパッキングユニットを受付ける。書込部24Cは、物理ページに相当する1以上のパッキングユニットを蓄積する。書込部24Cは、物理ページに相当するパッキングユニットを蓄積すると、NAND型フラッシュメモリ18に、該物理ページを書込む。
詳細には、書込部24Cは、該物理ページの書込み命令を、メモリ・インターフェース部16を介してNAND型フラッシュメモリ18へ送信する。これによって、NAND型フラッシュメモリ18では、受付けた物理ページをNAND型フラッシュメモリ18のセル・アレイに書込む。
また、書込部24Cは、NAND型フラッシュメモリ18における、該パッキングユニットの書込まれた物理アドレスを用いて、LUT(ルックアップテーブル)18Aを更新する。
LUT18Aは、管理情報の一例である。LUT18Aは、圧縮クラスタの論理アドレス(LCA)と、NAND型フラッシュメモリ18における、該圧縮クラスタを含むパッキングユニットの物理アドレス(以下、ユニットアドレスと称する場合がある)と、を対応づけたものである。
なお、NAND型フラッシュメモリ18には、追記処理を行うことが出来ない。このため、書込部24Cは、圧縮クラスタの論理アドレスに対応するセルに対して直接書込みを実施する代わりに、書込みタイミングにおいて書込み可能な位置に、書込みを実施する。そして、書込部24Cは、圧縮クラスタの論理アドレス(LCA)と、NAND型フラッシュメモリ18における書込位置であるユニットアドレスと、の対応を示す管理情報(LUT18A)を更新する。
LUT18Aは、NAND型フラッシュメモリ18の領域の一部に格納される。そして、本実施の形態では、LUT18Aには、圧縮クラスタの論理アドレスに対応する、NAND型フラッシュメモリ18における書込位置として、該圧縮クラスタを含むパッキングユニットの物理アドレス(ユニットアドレス)が、格納される。
書込部24Cは、LUT18Aについて、NAND型フラッシュメモリ18に書込んだパッキングユニットに含まれる、圧縮クラスタの各々の論理アドレス(LCA)に対応するユニットアドレスを、該圧縮クラスタを含むパッキングユニットの最新の物理アドレス(ユニットアドレス)に更新する。
書込制御部24による、上述した書込制御により、ホスト装置12から受け付けた書込対象のデータを圧縮した、圧縮クラスタのパッキングユニットが、NAND型フラッシュメモリ18に記憶される。そして、書込制御部24によって、LUT18Aが更新される。
ここで、クラスタを圧縮せずにNAND型フラッシュメモリ18へ記憶する場合、クラスタサイズは固定である。このため、この場合、LUT18Aで管理する物理アドレスは、固定のクラスタサイズに応じた位置を参照可能なものであればよい。
一方、本実施の形態のストレージ装置10では、圧縮クラスタを、NAND型フラッシュメモリ18へ記憶する。クラスタの圧縮率は、クラスタや圧縮方法などに応じて異なる。このため、NAND型フラッシュメモリ18における圧縮クラスタの位置(先頭位置)は不規則である。このため、圧縮クラスタの位置情報には、非圧縮のクラスタをNAND型フラッシュメモリ18へ記憶する場合に比べて、より詳細な情報が必要となる。
本実施の形態のストレージ装置10では、上述したように、NAND型フラッシュメモリ18における、圧縮クラスタを含むパッキングユニットの物理アドレス(ユニットアドレス)を、圧縮クラスタの論理アドレスに対応づけて管理する。そして、パッキングユニットのヘッダ情報に、圧縮クラスタの論理アドレスと、パッキングユニット内における圧縮クラスタの位置を示す位置情報(以下、オフセットと称する場合がある)と、を対応づけて格納する。
このため、LUT18Aのデータサイズの増加や、LUT18Aに書換えるデータ量の増加、を抑制することができる。このため、NAND型フラッシュメモリ18の劣化を抑制することができる。
次に、読出制御部22について説明する。読出制御部22は、読出制御部、および、読出制御装置の一例である。
読出制御部22は、ホスト装置12から受付けた、読出対象のデータの論理アドレス(LBA)に対応する圧縮クラスタを、NAND型フラッシュメモリ18から読出し、伸長した後に、ホスト装置12へ出力する。
読出制御部22は、変換部22Aと、読出部22Bと、解析部22Cと、伸長部22Dと、を含む。
図6は、読出制御の概略の説明図である。
変換部22Aは、ホスト装置12から、読出要求を受付ける。読出要求は、読出対象の圧縮クラスタの論理アドレス(LBA)を含む。変換部22Aは、受付けた論理アドレス(LBA)を、NAND型フラッシュメモリ18の物理アドレスに変換する。
変換部22Aは、LUT18Aを用いて、論理アドレス(LBA)を物理アドレスに変換する。
上述したように、LUT18Aには、圧縮クラスタの論理アドレス(LCA)に対応する、該圧縮クラスタを含むパッキングユニットの物理アドレス(ユニットアドレス)が、格納されている。このため、変換部22Aは、NAND型フラッシュメモリ18からLUT18Aを読取る。そして、変換部22Aは、ホスト装置12から取得したLBAの上位ビット部分であるLCAに対応する、ユニットアドレス(パッキングユニットの物理アドレス)を、LUT18Aから特定する。これにより、変換部22Aは、受付けた論理アドレス(LBA)を、NAND型フラッシュメモリ18の物理アドレス(ユニットアドレス)に変換する。
変換部22Aは、圧縮クラスタの論理アドレス(LCA)と、変換した物理アドレス(ユニットアドレス)と、を読出部22Bへ出力する。
読出部22Bは、NAND型フラッシュメモリ18における、変換部22Aから受付けた物理アドレス(ユニットアドレス)によって示される位置の、パッキングユニットに含まれるデータを読出す。
図1に戻り、説明を続ける。解析部22Cは、読出部22Bによって読み出されたパッキングユニットに含まれるデータの内、ヘッダ情報を解析する。そして、解析部22Cは、該パッキングユニットにおける、読出対象の圧縮クラスタの位置情報(オフセット)を取得する。
そして、読出部22Bは、パッキングユニットにおける、解析部22Cで取得した位置情報によって示される位置の圧縮クラスタを、読出対象の圧縮クラスタとして、伸長部22Dへ出力する。
ここで、本実施の形態では、解析部22Cは、読出部22Bによる、パッキングユニットに含まれるデータの読出しに並行して、ヘッダ情報の解析を行う。
そして、読出部22Bは、解析部22Cで取得した位置情報が第1条件を満たすと判定した場合、パッキングユニットから、少なくとも該位置情報によって示される位置の圧縮クラスタの読出しを終了するまで、データの読出しを継続する。一方、読出部22Bは、解析部22Cで取得した位置情報が第2条件を満たすと判定した場合、パッキングユニットにおける該位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタを読出す。
読出部22Bおよび解析部22Cの処理について、図7および図8を用いて説明する。
図7は、読出部22Bによるデータの読出、および、解析部22Cによる解析、の説明図である。図7は、解析部22Cで取得した位置情報が第1条件を満たす場合を示した。
第1条件は、解析部22Cで取得した位置情報(オフセット)によって示される位置が、ヘッダ情報に隣接する位置である場合である。また、第1条件は、解析部22Cで取得した位置情報(オフセット)によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値以下の場合である。
例えば、読出部22Bは、NAND型フラッシュメモリ18へ、読出し命令を発行する(ステップS1)。読出し命令は、NAND型フラッシュメモリ18における、変換部22Aから受付けた、圧縮クラスタの論理アドレス(LCA)と、変換した物理アドレス(ユニットアドレス)と、読出信号と、を含む。
読出し命令を受付けたNAND型フラッシュメモリ18は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む、物理ページを、セル・アレイからデータ・バッファへ読出す(ステップS2)。そして、NAND型フラッシュメモリ18は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部22Bへの順次出力を開始する(ステップS3)。すなわち、ステップS3では、読出部22Bが、パッキングユニットのデータを、順次読出す。
読出部22Bは、NAND型フラッシュメモリ18から順次出力される、パッキングユニットのデータと、変換部22Aから受付けた圧縮クラスタの論理アドレス(LCA)と、を解析部22Cへ出力する。
解析部22Cは、読出部22Bによるパッキングユニットのデータの読出し(ステップS3)に並行して、読出部22Bによって読み出されたデータの内のヘッダ情報を解析する(ステップS4)。詳細には、解析部22Cは、読出部22Bから受け付けたヘッダ情報から、読出部22Bから受け付けた論理アドレス(LCA)に対応する、圧縮クラスタの位置情報(オフセット)を読取る。このとき、解析部22Cは、該論理アドレス(LCA)に対応する他の情報(例えば、圧縮クラスタのデータ長など)を、併せて該ヘッダ情報から読取ってもよい。
そして、読出部22Bは、解析部22Cから、読出対象の圧縮クラスタの位置情報(オフセット)を受付ける。なお、読出部22Bは、少なくとも、読出対象の圧縮クラスタの位置情報を解析部22Cから受付けるまでの間、パッキングユニットのデータの読取りを継続してよい。
そして、読出部22Bは、解析部22Cから受付けた位置情報が、第1条件を満たすと判定したとする。この場合、該パッキングユニットから、少なくとも該位置情報によって示される位置の圧縮クラスタの読出しを終了するまで、データの読出を継続する(ステップS3’)。
このため、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報(オフセット)によって示される位置が、該パッキングユニットのヘッダ情報に隣接する位置である場合、読出部22Bは、データの読出を継続する。また、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報(オフセット)によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値以下の場合、読出部22Bは、データの読出を継続する。この閾値には、後述する第2条件で用いる閾値と同じ閾値を用いればよい。
そして、読出部22Bは、解析部22Cから取得した位置情報によって示される位置の圧縮クラスタを読出すと、読出した圧縮クラスタを、伸長部22Dへ出力する(ステップS5)。伸長部22Dは、圧縮クラスタを伸長したデータを、ホスト装置12へ出力する(ステップS6)。
次に、第2条件を満たす場合を説明する。図8は、読出部22Bによるデータの読出、および、解析部22Cによる解析、の説明図である。図8には、解析部22Cで取得した位置情報が第2条件を満たす場合を示した。
第2条件は、解析部22Cで取得した位置情報(オフセット)によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値を超える場合である。
この閾値には、予め定めた値を用いればよい。具体的には、第1条件および第2条件で用いる閾値には、解析部22Cがヘッダ情報の解析に要する時間(例えば平均時間)と、読出部22Bが読出位置の変更に要する時間と、の合計時間の間に、読出部22Bが読出すデータ量を用いればよい。
読出部22Bは、NAND型フラッシュメモリ18へ、読出し命令を発行する(ステップS10)。読出し命令は、NAND型フラッシュメモリ18における、変換部22Aから受付けた、圧縮クラスタの論理アドレス(LCA)と、変換した物理アドレス(ユニットアドレス)と、読出信号と、を含む。
読出し命令を受付けたNAND型フラッシュメモリ18は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む物理ページを、セル・アレイからデータ・バッファへ読出す(ステップS11)。そして、NAND型フラッシュメモリ18は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部22Bへの順次出力を開始する(ステップS12)。すなわち、ステップS12では、読出部22Bが、パッキングユニットのデータを、順次読出す。
読出部22Bは、NAND型フラッシュメモリ18から順次出力される、パッキングユニットのデータと、変換部22Aから受付けた圧縮クラスタの論理アドレス(LCA)と、を解析部22Cへ出力する。
解析部22Cは、読出部22Bによるパッキングユニットのデータの読出し(ステップS12)に並行して、読出部22Bによって読み出されたデータの内のヘッダ情報を解析する(ステップS13)。詳細には、解析部22Cは、読出部22Bから受け付けたヘッダ情報から、読出部22Bから受け付けた論理アドレス(LCA)に対応する、圧縮クラスタの位置情報(オフセット)を読取る。このとき、解析部22Cは、該論理アドレス(LCA)に対応する他の情報(例えば、圧縮クラスタのデータ長など)を、併せて該ヘッダ情報から読取ってもよい。
そして、読出部22Bは、解析部22Cから、読出対象の圧縮クラスタの位置情報(オフセット)を受付ける。なお、読出部22Bは、少なくとも、読出対象の圧縮クラスタの位置情報を解析部22Cから受付けるまでの間、パッキングユニットのデータの読出しを継続してよい。
そして、読出部22Bは、解析部22Cから受付けた位置情報が、第2条件を満たすと判定した場合、該パッキングユニットにおける、該位置情報に示される位置へ読出位置を変更し(ステップS14)、該読出位置から圧縮クラスタを読出す(ステップS15)。
そして、読出部22Bは、読出した圧縮クラスタを、伸長部22Dへ出力する(ステップS16)。伸長部22Dは、圧縮クラスタを伸長し、ホスト装置12へ出力する(ステップS17)。
なお、図7および図8に示す動作は、ストレージコントローラ20からNAND型フラッシュメモリ18に対し、各種の命令を発行することで行われる。具体的な命令は、利用するNAND型フラッシュメモリ18の仕様に依存してよい。例えば、JEDEC 230B標準に対応したNAND型フラッシュメモリ18を用いる場合、セル・アレイからデータ・バッファへのデータ読出しと、バッファからストレージコントローラ20へのデータ読出しには、Page Read命令(00h−30h)を用いればよい。また、読出位置の変更には、Change Read Column命令(05h−E0h)を用いればよい。その他の使用のNAND型フラッシュメモリ18を用いる場合には、これらの命令と同一または類似の機能の命令を、ストレージコントローラ20からNAND型フラッシュメモリ18へ発行することで、上記動作を実現すればよい。
なお、上述したように、パッキングユニットのヘッダ情報が、圧縮クラスタの長さ情報を含む場合がある。この場合、読出部22Bは、解析部22Cから取得した、読出対象の圧縮クラスタの位置情報(オフセット)の位置から、該圧縮クラスタの長さ情報に相当する位置(すなわち末尾)までを読出たときに、NAND型フラッシュメモリ18からのデータ読出しを終了すればよい。
また、パッキングユニットのヘッダ情報に、圧縮クラスタの長さ情報が含まれていない場合がある。この場合、読出部22Bは、所定のワースト符号量までの読出しと、伸長部22Dによる圧縮クラスタの伸長処理の完了と、の内の早い方のタイミングで、読出しを終了すればよい。
ワースト符号量とは、圧縮部24Aによって圧縮された圧縮クラスタの内、サイズの最も大きい圧縮クラスタの符号量である。ワースト符号量は、圧縮部24Aで用いる圧縮方式に応じて規定される。なお、上述したように、圧縮部24Aが、圧縮率が閾値未満である場合に、圧縮クラスタに代えて、元のクラスタと、非圧縮であることを示すフラグと、を出力する場合がある。この場合には、ワースト符号量は、このクラスタのサイズ(または、クラスタのサイズ+フラグのビット数)とすればよい。
また、読出対象となる圧縮クラスタが、2つのパッキングユニットに跨って配置されている場合がある。この場合、後段のパッキングユニットの先頭部分にヘッダ情報が位置している。このため、読出部22Bは、前段のパッキングユニットの末尾まで、読出し対象の圧縮クラスタを読出し、次のパッキングユニットの先頭部分を解析部22Cへ出力する。ここでも、解析部22Cによるヘッダ情報の解析に並行して、読出部22Bは、パッキングユニットのデータの読出を継続する。そして、読出部22Bは、後段のパッキングユニットのヘッダ情報に含まれるヘッダサイズに基づいて、ヘッダ情報を除去し、圧縮クラスタの後段を前段に続けて伸長部22Dへ出力すればよい。
次に、伸長部22Dについて説明する。伸長部22Dは、読出部22Bから圧縮クラスタを受付ける。伸長部22Dは、圧縮クラスタを伸長し、クラスタ(すなわち、読出対象のデータ)を生成する。そして、伸長部22Dは、クラスタを、ホスト・インターフェース部14を介してホスト装置12へ出力する。
なお、伸長部22Dによる伸長処理は、圧縮部24Aが行う圧縮処理と対になるものであればよい。例えば、圧縮部24AがDeflateによる圧縮処理を実施すると仮定する。この場合、伸長部22Dは、Deflateによる伸長処理を圧縮クラスタに適用することで、伸長処理を行えばよい。
次に、ストレージ装置10で実行する書込処理の手順の一例を説明する。図9は、書込処理の手順の一例を示す、フローチャートである。
まず、書込制御部24が、ホスト・インターフェース部14を介してホスト装置12から、書込み対象のデータ(クラスタ)と、論理アドレス(LBA)と、を含む書込要求を取得する(ステップS200)。
次に、圧縮部24Aが、ステップS200で取得した書込対象のデータ(クラスタ)を圧縮し、圧縮クラスタを生成する(ステップS202)。次に、パッキング処理部24Bが、ステップS202で生成された圧縮クラスタと、ヘッダ情報と、を含むパッキングユニットを生成する(ステップS204)。
次に、書込部24Cが、ステップS204で生成したパッキングユニットをNAND型フラッシュメモリ18へ書込み(ステップS206)、LUT18Aを更新する(ステップS208)。そして、本ルーチンを終了する。
次に、ストレージ装置10で実行する読出処理の手順の一例を説明する。図10は、読出処理の手順の一例を示す、フローチャートである。
まず、変換部22Aが、読出し対象の圧縮クラスタの論理アドレス(LBA)を取得する(ステップS300)。次に、変換部22Aが、ステップS300で取得した論理アドレス(LBAの上位ビット部分であるLCA)を、NAND型フラッシュメモリ18における物理アドレス(ユニットアドレス)に変換する(ステップS302)。
次に、読出部22Bが、ステップS302で変換された物理アドレスの位置のパッキングユニットのデータの読出しを開始する(ステップS304)。解析部22Cは、ステップS304で開始されたデータの読出に並行して、該データに含まれるヘッダ情報を解析する(ステップS306)。ステップS306の処理によって、解析部22Cは、読出し対象の圧縮クラスタの位置情報(オフセット)を取得する。上述したように、このとき、解析部22Cは、該圧縮クラスタのデータ長情報も取得してもよい。
次に、読出部22Bは、ステップS306で解析された位置情報が第1条件を満たすか第2条件を満たすかを判定する(ステップS308)。第1条件を満たすと判定した場合(ステップS308:Yes)、ステップS310へ進む。
ステップS310では、読出部22Bは、パッキングユニットのデータの読出を継続し(ステップS310)、ステップS314へ進む。
一方、ステップS308で第2条件を満たすと判定した場合(ステップS308:No)、ステップS312へ進む。ステップS312では、読出部22Bは、パッキングユニットにおける該位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタのデータを順次読出す(ステップS312)。そして、ステップS314へ進む。
読出部22Bによって、ステップS306で取得した位置情報によって示される位置の圧縮クラスタが読み出されると(ステップS314)、伸長部22Dは、該圧縮クラスタを伸長する(ステップS316)。
伸長部22Dは、伸長処理によって得られたクラスタを、ホスト・インターフェース部14を介してホスト装置12へ出力する(ステップS318)。そして、本ルーチンを終了する。
以上説明したように、本実施の形態のストレージ装置10(読出制御部22)は、変換部22Aと、読出部22Bと、解析部22Cと、を備える。変換部22Aは、読出対象の圧縮クラスタの論理アドレスを、NAND型フラッシュメモリ18(不揮発性メモリ)の物理アドレスに変換する。読出部22Bは、NAND型フラッシュメモリ18から、該物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す。解析部22Cは、パッキングユニットに含まれるデータの読出に並行して、パッキングユニットに含まれるヘッダ情報を解析し、パッキングユニットにおける、読出対象の圧縮クラスタの位置情報を取得する。
このように、本実施の形態のストレージ装置10では、読出部22BによるNAND型フラッシュメモリ18からのデータの読出しに並行して、解析部22Cが、パッキングユニットのヘッダ情報を解析する。言い換えると、本実施の形態のストレージ装置10では、NAND型フラッシュメモリ18から読出したデータの解析中に、並行して、NAND型フラッシュメモリ18からのデータの読出しを継続する。
このため、解析部22Cによるヘッダ情報の解析に起因する、読出部22Bによるランダムアクセス性能の低下を抑制することができる。また、本実施の形態では、NAND型フラッシュメモリ18には、クラスタを圧縮した圧縮クラスタが記憶される。このため、NAND型フラッシュメモリ18から読出すデータ量の削減を図ることができ、読出速度の向上を図ることができる。すなわち、本実施の形態のストレージ装置10では、NAND型フラッシュメモリ18からのデータ読出し時の遅延量の削減と、ランダム読出し性能の改善を実現することができる。
従って、本実施の形態の読出制御部22(ストレージ装置10)は、不揮発性メモリ(NAND型フラッシュメモリ18)へのアクセス速度の低下を抑制することができる。
また、本実施の形態のストレージ装置10の変換部22Aは、LUT18A(管理情報)を用いて、読出対象の圧縮クラスタの論理アドレスを、NAND型フラッシュメモリ18(不揮発性メモリ)における該圧縮クラスタを含むパッキングユニットの位置を示す物理アドレスに変換する。また、パッキングユニットに含まれるヘッダ情報は、該ヘッダ情報を含むパッキングユニットに含まれる、圧縮クラスタの位置情報(オフセット)と、圧縮クラスタの論理アドレスと、を含む。このため、LUT18Aに記憶するデータ量の削減を図ることができる。
ここで、LUT18Aのサイズが大きくなるほど、キャッシュとして保持されるエントリ数が少なくなるため、NAND型フラッシュメモリ18へのアクセス速度、特に、ランダムリード時のアクセス速度が低下する場合があった。
一方、本実施の形態のストレージ装置10では、LUT18Aとヘッダ情報に、上記情報を格納することから、上記効果に加えて、特に、ランダムリード時のアクセス速度の低下を抑制することができる。
また、本実施の形態のストレージ装置10では、特に圧縮効率の高い圧縮クラスタをNAND型フラッシュメモリ18に記憶した場合に、特に効果的に、NAND型フラッシュメモリ18からのデータ読出速度の向上を図ることができる。
また、本実施の形態のストレージ装置10では、読出部22Bは、位置情報(オフセット)が第1条件を満たすと判定した場合、パッキングユニットから、少なくとも位置情報によって示される位置の圧縮クラスタの読出しを終了するまで、データの読出を継続する。一方、読出部22Bは、位置情報(オフセット)が第2条件を満たすと判定した場合、パッキングユニットにおける位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタを読出す。
このため、読出対象の圧縮クラスタがヘッダ情報に連続して配置されている場合、および、ヘッダ情報から離れて配置されている場合、の何れの場合であっても、NAND型フラッシュメモリ18からのデータ読出速度の低下を抑制することができる。また、ストレージ装置10では、ヘッダ情報の解析に起因する遅れを低減することができ、NAND型フラッシュメモリ18からのデータの読出速度の低下を抑制することができる。
また、上述したように、本実施の形態では、パッキング処理部24Bは、非圧縮であることを示すフラグを受付けた場合(すなわち、圧縮率が閾値未満の場合)、該フラグと共に受付けた非圧縮のクラスタを、次のパッキングユニットの先頭に配置する。上述したように、例えば、パッキングユニットのサイズが、(非圧縮の)クラスタのサイズと同一である場合がある。この場合、パッキング処理部24Bは、単一のパッキングユニットに、このクラスタを配置する。
このような処理を行う場合、非圧縮のクラスタをNAND型フラッシュメモリ18へ記憶する従来のストレージ装置と同様の形態で、クラスタが、NAND型フラッシュメモリ18へ書込まれる。ここで、上述したように、本実施の形態では、ヘッダ情報と圧縮クラスタとが隣接して配置されている場合、ヘッダ情報の解析に並行して、パッキングユニットに含まれるデータの読出しが行われる。
このため、本実施の形態では、ヘッダ情報の解析による遅延を、抑制することができる。よって、圧縮率が閾値以下の圧縮クラスタに対応する、圧縮前のクラスタがNAND型フラッシュメモリ18に記憶される場合であっても、従来技術に比べて、読出しに要する時間の遅延を抑制することができる。
一方、書込部24Cが、圧縮クラスタをNAND型フラッシュメモリ18へ記憶する場合には、NAND型フラッシュメモリ18へ書込むデータ量、および、NAND型フラッシュメモリ18から読出すデータ量の削減を図ることができる。
このため、本実施の形態のストレージ装置10では、NAND型フラッシュメモリ18へのアクセス速度(書込み速度、読出し速度)の低下を抑制することができる。
なお、書込制御部24は、圧縮クラスタを、間隔を隔てずに詰めて、パッキングユニット内に配置することが好ましい。また、書込制御部24は、1つの物理ページ内のパッキングユニットを、間隔を隔てずに詰めて配置することが好ましい(図2参照)。
このように圧縮クラスタを配置することで、例えば、NAND型フラッシュメモリ18の規定容量に相当する書込み対象のデータを書き込む場合であっても、実際にNAND型フラッシュメモリ18に書込まれる物理ページ数の削減を図ることができる。このため、圧縮クラスタに代えて、クラスタをNAND型フラッシュメモリ18に書込む場合に比べて、NAND型フラッシュメモリ18内で余る、余剰領域が増加する。
NAND型フラッシュメモリ18には、予備領域が設けられている。このため、NAND型フラッシュメモリ18は、実際には、規定容量を上回る記憶容量を有する。
ストレージ装置10では、上記余剰領域が発生した場合、該余剰領域を、上記予備領域として用いることが好ましい。
予備領域は、不良ブロックなどに対する代替領域として用いたり、エラー訂正符号を示す情報を記憶する領域として用いたりすることが可能である。不良ブロックとは、例えば、読出し、書込み、または消去を正しく行うことができない、またはできなくなったブロックを示す。ストレージ装置10は、上記余剰領域を予備領域として用いることで、ストレージ装置10の信頼性向上を図ることができる。
また、ストレージ装置10は、予備領域を、ガベージ・コレクション(GC)の効率向上に用いてもよい。この場合、ストレージ装置10は、ストレージ装置10の信頼性や寿命の向上と、NAND型フラッシュメモリ18への書込みなどの処理速度の向上と、を図ることができる。
GCは、追記処理が出来ないNAND型フラッシュメモリ18において、書込み可能な物理ブロックが不足した場合に、書込み済みのブロックから有効な(上書きされていない)クラスタを退避した上で消去し、書込み可能ブロックを新たに生成する処理である。GCの対象となるブロックから退避された有効データは、書込み可能なブロックへ、再度書き込まれる。
一般に、GC等に起因する書き込みを含めた、NAND型フラッシュメモリ18への総書き込み量(ホスト装置12から取得した書込み対象のデータのデータ量と、GCデータのデータ量と、の合計量)と、ホスト装置12から取得した書込み対象のデータのデータ量と、の比を、Write Amplification(WA)と称する。そして、このWAの値が大きいと、NAND型フラッシュメモリ18に対する総書き込み量が増加する。このため、WAの値が大きいほど、ホスト装置12からNAND型フラッシュメモリ18への書込み速度の低下や、書込みストレスによるNAND型フラッシュメモリ18の劣化速度の上昇、などが生じる。
本実施の形態のストレージ装置10では、上述のように、書込み対象のデータをクラスタ単位で圧縮した圧縮クラスタを、NAND型フラッシュメモリ18へ書込む。このため、ホスト装置12からNAND型フラッシュメモリ18へ書込まれるデータのデータサイズが、圧縮により小さくなる。そして、NAND型フラッシュメモリ18における、クラスタの圧縮により増加した予備領域についても、書込み可能な領域として用いることで、GCの対象のブロックに含まれる有効データ数の期待値を小さくすることができる。このため、本実施の形態のストレージ装置10では、WA値を小さくすることが可能となる。よって、ストレージ装置10は、上記効果に加えて、NAND型フラッシュメモリ18の劣化抑止と、書込み速度の向上と、を図ることができる。
(第2の実施の形態)
本実施の形態では、NAND型フラッシュメモリ18に、エラー訂正符号を付与したデータを書込む場合を説明する。
図11は、本実施の形態のストレージ装置10Aの一例を示す模式図である。なお、本実施の形態では、第1の実施の形態と同様の機能を示す構成には、同じ符号を付与し、詳細な説明を省略する場合がある。
ストレージ装置10Aは、ホスト装置12と通信可能に接続されている。ホスト装置12は、第1の実施の形態と同様である。
ストレージ装置10Aは、ホスト・インターフェース部14と、ストレージコントローラ21と、メモリ・インターフェース部16と、NAND型フラッシュメモリ18と、を備える。ストレージ装置10Aは、ストレージコントローラ20に代えてストレージコントローラ21を備えた点以外は、第1の実施の形態のストレージ装置10と同様である。
ストレージコントローラ21は、書込制御部25と、読出制御部23と、を備える。書込制御部25は、圧縮部24Aと、パッキング処理部24Bと、書込部24Cと、符号化部25Dと、を備える。ストレージコントローラ21は、第1の実施の形態の書込制御部24および読出制御部22に代えて、書込制御部25および読出制御部23を備える。
書込制御部25は、圧縮部24Aと、パッキング処理部24Bと、符号化部25Dと、書込部24Cと、を含む。読出制御部23は、変換部22Aと、読出部23Bと、解析部23Cと、訂正部23Eと、伸長部22Dと、を含む。読出制御部23、変換部22A、読出部23B、解析部23C、訂正部23E、伸長部22D、書込制御部25、圧縮部24A、パッキング処理部24B、符号化部25D、および書込部24Cは、例えば、1または複数のプロセッサにより実現される。例えば上記各部は、CPUなどのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のICなどのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち1つを実現してもよいし、各部のうち2以上を実現してもよい。
プロセッサは、記憶部に保存されたプログラムを読み出し実行することで、上記各部を実現する。なお、記憶部にプログラムを保存する代わりに、プロセッサの回路内にプログラムを直接組み込むよう構成してもよい。この場合、プロセッサは回路内に組み込まれたプログラムを読み出し実行することで、上記各部を実現する。
まず、書込制御部25について説明する。書込制御部25は、圧縮部24Aと、パッキング処理部24Bと、符号化部25Dと、書込部24Cと、を備える。圧縮部24A、パッキング処理部24B、および書込部24Cは、第1の実施の形態と同様である。
符号化部25Dは、パッキング処理部24Bから、パッキングユニットを受付ける。符号化部25Dは、パッキングユニット毎、あるいはそのサブブロック毎に、エラー訂正符号を算出し、付与する。
エラー訂正符号を適用するデータ単位は、第1単位の一例である。エラー訂正符号を付与するデータ単位は、ECCフレームと称される場合もある。第1単位は、圧縮クラスタに対応する非圧縮のクラスタのサイズより小さいことが好ましい。
エラー訂正符号は、例えば、LDPC (Low−Density Parity Check)符号、BCH符号、リード・ソロモン符号、などである。
なお、エラー訂正符号を適用するデータ単位である第1単位は、固定長であってもよいし、可変長であってもよい。
例えば、符号化部25Dは、パッキングユニットの先頭付近については、該先頭付近以外に比べて小さい第1単位を設定してもよい。パッキングユニットの先頭付近とは、例えば、パッキングユニットに含まれるヘッダ情報の最大サイズに相当する部分である。
符号化部25Dが、パッキングユニットの先頭付近については、該先頭付近以外に比べて小さい第1単位でエラー訂正符号を付与することで、読出制御部23がヘッダ情報を解析するためにパッキングユニットから読出すデータ量の、削減を図ることができる。
なお、この場合、符号化部25Dは、パッキングユニットの先頭付近に付与するエラー訂正符号(例えば、パリティビット)のビット数の割合を、該先頭以外に比べて増やす、などの処理を行うことが好ましい。この処理を行うことで、第1単位の大きい領域に比べて、第1単位の小さい部分に付与されたエラー訂正符号の、エラー訂正能力の低下を抑制することができる。なお、符号化部25Dは、パリティビットのビット数を増やすために、例えば、他の第1単位で本来用いていた部分を流用すればよい。
また、符号化部25Dは、パッキングユニットにおけるヘッダ情報の部分(例えば、ヘッダ情報の最大サイズに相当する部分)に、独立に、エラー検出符号またはエラー訂正符号を付与してもよい。
これにより、読出制御部23は、パッキングユニットにおけるヘッダ情報の部分のみを読出して、エラー検出またはエラー訂正や、ヘッダ情報の解析を行うことができる。このため、ストレージ装置10Aでは、ヘッダ情報解析の遅延を低減することができる。
なお、第1の実施の形態で説明したように、ヘッダ情報には、パッキングユニットに先頭が含まれる圧縮クラスタの数や、圧縮クラスタの長さ(データ長)や、圧縮クラスタの位置情報(オフセット)や、圧縮クラスタの論理アドレス(LCA)、などの種類のデータが含まれる(図3〜図5参照)。
このため、例えば、符号化部25Dは、各種類のデータごとに、エラー検出符号やエラー訂正符号(例えばパリティ検査符号等)を付与してもよい。
このように、ヘッダ情報に含まれる各種類のデータごとに、エラー検出符号やエラー訂正符号を付与すると、読出制御部23は、各種類のデータごとに、エラー検出またはエラー訂正と解析を行うことができる。
なお、ヘッダ情報の部分と、ヘッダ情報全体を含み、且つヘッダ情報よりデータ長の長い第1単位との各々について、エラー訂正符号を付与してもよい。
このように、パッキングユニットに対して、段階的にサイズの大きい第1単位ごとにエラー訂正符号を付与することで、最も小さいサイズの第1単位に付与されたエラー訂正符号でエラー訂正が出来なかった場合であっても、より大きいサイズの第1単位に付与されたエラー訂正符号により、エラー訂正が可能となる。
例えば、ヘッダ情報に付与されたエラー訂正符号を用いたエラー訂正が出来なかった場合、該ヘッダ情報より大きいサイズの第1単位に付与されたエラー訂正符号を用いてエラー訂正を行うことで、ヘッダ情報を復元することができる。
また、符号化部25Dで用いる第1単位を固定とし、パッキング処理部24Bは、符号化部25Dで用いる該第1単位ごとに、圧縮クラスタをパッキングし、パッキングユニットを生成してもよい。すなわち、パッキング処理部24Bで生成されるパッキングユニットと、符号化部25Dでエラー訂正符号を付与する第1単位と、を同一としてもよい。
例えば、第1単位よりデータ長の短い圧縮クラスタが、2つの第1単位(ECCフレーム)に跨って配置される場合がある。この場合、読出制御部23では、この圧縮クラスタを読出すためには、少なくとも2つのECCフレームを読出す必要が生じる。このため、パッキング処理部24Bが、上述したように、圧縮クラスタを、第1単位ごとにパッキングする。これにより、読出制御部23では、読出し対象の圧縮クラスタを読出すために、複数のECCフレームを読出すといった処理が削減され、読出速度の向上を図ることができる。
なお、圧縮クラスタを第1単位ごとにパッキングする場合、第1単位のデータサイズが大きいほど、パッキング効率が低下する。このため、パッキング処理部24Bは、圧縮クラスタの圧縮率が閾値以上(例えば90%)の場合には、圧縮クラスタを第1単位ごとにパッキングする。そして、パッキング処理部24Bは、圧縮クラスタの圧縮率が閾値未満(例えば、50%)の場合には、圧縮クラスタが2つのパッキングユニットに跨る場合であっても、予め定めた単位毎に圧縮クラスタをパッキングしてもよい。
符号化部25Dは、エラー訂正符号を付与したパッキングユニットを、書込部24Cへ出力する。書込部24Cは、第1の実施の形態と同様に、該パッキングユニットのNAND型フラッシュメモリ18への書込み、および、LUT18Aの更新を行う。
次に、読出制御部23について説明する。
読出制御部23は、変換部22Aと、読出部23Bと、解析部23Cと、訂正部23Eと、伸長部22Dと、を含む。変換部22Aおよび伸長部22Dは、第1の実施の形態と同様である。
読出部23Bは、第1の実施の形態の読出部22Bと同様に、NAND型フラッシュメモリ18における、変換部22Aから受付けた物理アドレス(ユニットアドレス)によって示される位置のパッキングユニットに含まれるデータを、順次読出す。そして、読出部23Bは、読出したデータを、訂正部23Eへ順次出力する。
訂正部23Eは、読出部23Bによって読み出されたデータにおける、第1単位ごとに付与されたエラー訂正符号を用いて、エラー訂正を行う。
訂正部23Eは、符号化部25Dによって付与されたエラー訂正符号に応じた訂正方法を用いて、エラー訂正を行う。
そして、訂正部23Eは、エラー訂正したデータを、解析部23Cへ出力する。
解析部23Cは、第1の実施の形態の解析部22Cと同様に、読出部23Bによって読み出されたパッキングユニットに含まれるデータの内、ヘッダ情報を解析する。すなわち、解析部23Cは、訂正部23Eによってエラー訂正されたヘッダ情報を解析する。そして、解析部23Cは、第1の実施の形態の解析部22Cと同様に、該パッキングユニットにおける、読出対象の圧縮クラスタの位置情報(オフセット)を取得し、読出部23Bへ出力する。
そして、読出部23Bは、パッキングユニットにおける、解析部23Cで取得した位置情報によって示される位置の圧縮クラスタを、読出対象の圧縮クラスタとして、訂正部23Eへ出力する。訂正部23Eは、読出部23Bから取得した圧縮クラスタについてエラー訂正を行い、伸長部22Dへ出力する。伸長部22Dは、第1の実施の形態と同様に、圧縮クラスタを伸長し、ホスト・インターフェース部14を介してホスト装置12へ出力する。
ここで、第1の実施の形態と同様に、解析部23Cは、読出部23Bによる、パッキングユニットに含まれるデータの読出に並行して、ヘッダ情報の解析を行う。
そして、読出部23Bは、解析部23Cで取得した位置情報が第1条件を満たすと判定した場合にはデータの読出を継続する。一方、読出部23Bは、解析部23Cで取得した位置情報が第2条件を満たすと判定した場合、パッキングユニットにおける該位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタを読出す。第1条件および第2条件は、第1の実施の形態と同様である。
読出部23Bおよび解析部23Cの処理について、図12および図13を用いて説明する。
図12は、読出部23Bによるデータの読出、および、解析部23Cによる解析、の説明図である。図12は、解析部23Cで取得した位置情報が第1条件を満たす場合を示した。
例えば、読出部23Bは、NAND型フラッシュメモリ18へ、読出し命令を発行する(ステップS20)。読出し命令は、NAND型フラッシュメモリ18における、変換部22Aから受付けた、圧縮クラスタの論理アドレス(LCA)と、変換した物理アドレス(ユニットアドレス)と、読出し信号と、を含む。
読出し命令を受付けたNAND型フラッシュメモリ18は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む物理ページを、セル・アレイからデータ・バッファへ読出す(ステップS21)。そして、NAND型フラッシュメモリ18は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部23Bへの順次出力を開始する(ステップS22)。すなわち、ステップS22では、読出部23Bが、パッキングユニットのデータを順次読出す。
読出部23Bは、NAND型フラッシュメモリ18から順次出力される、パッキングユニットのデータを、順次、訂正部23Eへ出力する。訂正部23Eは、エラー訂正符号の付与された単位である第1単位(ECCフレーム)に相当するデータを受付けた段階で、エラー訂正を行う(ステップS23)。
解析部23Cは、読出部23Bによるパッキングユニットのデータの読出し(ステップS22、ステップS22’)に並行して、訂正部23Eでエラー訂正されたヘッダ情報を解析する(ステップS24)。この解析により、解析部23Cは、読出対象の圧縮クラスタの位置情報を、読出部23Bへ出力する。なお、解析部23Cは、解析前に、読出部23Bから、圧縮クラスタの論理アドレス(LCA)を受付け、位置情報の特定に用いる。
なお、ヘッダ情報のデータサイズは、圧縮クラスタのサイズに比べて小さい。また、ヘッダ情報は、エラー訂正符号の付与された単位である第1単位内に収まることが多い。このため、読出部23Bが、パッキングユニットの最初の1単位分のデータを読出し(ステップS22)、訂正部23Eがエラー訂正を行うことで(ステップS23)、解析部23Cはヘッダ情報を解析することができる(ステップS24)。
なお、ヘッダ情報のサイズには、パッキングフレームに含むことの可能な、圧縮クラスタの最大数を設定することが好ましい。この設定により、ヘッダ情報の最大サイズを規定することができる。
そして、読出部23Bは、解析部23Cから受付けた位置情報が、第1条件を満たすと判定したとする。この場合、読出制御部23はデータの読出を継続する(ステップS22’)。
このため、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報(オフセット)によって示される位置が、該パッキングユニットのヘッダ情報に隣接する位置である場合、読出部23Bは、データの読出を継続する。また、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報(オフセット)によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値以下の場合、読出部23Bは、データの読出を継続する。この閾値には、予め定めた値を用いればよい。
そして、読出部23Bは、解析部23Cから取得した位置情報によって示される位置の圧縮クラスタを含む第1単位(ECCフレーム)を読出すと、読出した第1単位を、訂正部23Eへ出力する。訂正部23Eは、エラー訂正を行い、エラー訂正した圧縮クラスタを、伸長部22Dへ出力する(ステップS25)。伸長部22Dは、圧縮クラスタを伸長し、ホスト装置12へ出力する(ステップS26)。
次に、第2条件を満たす場合を説明する。図13は、読出部23Bによるデータの読出、および、解析部23Cによる解析、の説明図である。図13には、解析部23Cで取得した位置情報が第2条件を満たす場合を示した。
読出部23Bは、NAND型フラッシュメモリ18へ、読出し命令を発行する(ステップS31)。読出し命令は、NAND型フラッシュメモリ18における、変換部22Aから受付けた、圧縮クラスタの論理アドレス(LCA)と、変換した物理アドレス(ユニットアドレス)と、読出し信号と、を含む。
読出し命令を受付けたNAND型フラッシュメモリ18は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む物理ページを、セル・アレイからデータ・バッファへ読出す(ステップS32)。そして、NAND型フラッシュメモリ18は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部23Bへの順次出力を開始する(ステップS33、S33’)。すなわち、ステップS33、S33’では、読出部23Bが、パッキングユニットのデータを順次読出す。
読出部23Bは、NAND型フラッシュメモリ18から順次出力される、パッキングユニットのデータを、順次、訂正部23Eへ出力する。訂正部23Eは、エラー訂正符号の付与された単位である第1単位(ECCフレーム)に相当するデータを受付けた段階で、エラー訂正を行う(ステップS34)。
そして、読出部23Bは、解析部23Cから受付けた位置情報が、第2条件を満たすと判定したとする。この場合、読出部23Bは、該パッキングユニットにおける、該位置情報に示される位置を含む、第1単位(ECCフレーム)の先頭位置へ読出位置を変更する(ステップS36)。すなわち、読出部23Bは、該位置情報に示される位置に記憶されている圧縮クラスタの先頭を含む、第1単位(ECCフレーム)の先頭位置へ、読出位置を変更する。そして、読出部23Bは、変更後の該読出位置から圧縮クラスタを読出す(ステップS37)。
そして、読出部23Bは、解析部23Cから取得した位置情報によって示される位置の圧縮クラスタを含む第1単位(ECCフレーム)を読出すと、読出した第1単位を、訂正部23Eへ出力する。訂正部23Eは、エラー訂正を行い、エラー訂正した圧縮クラスタを、伸長部22Dへ出力する(ステップS38)。伸長部22Dは、圧縮クラスタを伸長し、ホスト装置12へ出力する(ステップS39)。
なお、上述したように、符号化部25Dが、パッキングユニットにおけるヘッダ情報の部分に、独立にエラー訂正符号を付与し、且つ、ヘッダ情報より大きいデータサイズの第1単位ごとにエラー訂正符号を付与する場合がある。
この場合、符号化部25Dは、第1訂正部23Fと、第2訂正部23Gと、を有する構成とすることが好ましい。
第1訂正部23Fは、読出部23Bによって読み出されたデータにおける、ヘッダ情報に付与されたエラー訂正符号を用いて、該ヘッダ情報のエラー訂正を行う。第2訂正部23Gは、ヘッダ情報より大きいデータサイズの第1単位ごとに付与されたエラー訂正符号を用いてエラー訂正を行う。
そして、解析部23Cは、第1訂正部23Fによるヘッダ情報のエラー訂正が成功した場合、第1訂正部23Fによってエラー訂正されたヘッダ情報を解析する。また、解析部23Cは、第1訂正部23Fによるヘッダ情報のエラー訂正が失敗した場合、第2訂正部23Gによってエラー訂正された第1単位のデータに含まれるヘッダ情報を解析すればよい。
以上説明したように、本実施の形態のストレージ装置10Aでは、符号化部25Dが第1単位毎にエラー訂正符号を付与する。そして、NAND型フラッシュメモリ18には、エラー訂正符号の付与されたパッキングユニットが記憶される。そして、読出制御部23は、訂正部23Eが、付与されたエラー訂正符号を用いてエラー訂正を行う。
ここで、NAND型フラッシュメモリ18では、メモリ・セルの内部状態の時間変化や、読出時のノイズなどにより、読出しデータの一部が、書込み時とは異なる値を示す場合がある。このため、ストレージ装置10Aは、符号化部25Dおよび訂正部23Eを用いることで、第1の実施の形態の効果に加えて、NAND型フラッシュメモリ18に記憶されたデータのエラー訂正を行うことができる。
また、本実施の形態のストレージ装置10Aによれば、第1の実施の形態と同様に、圧縮クラスタを用いることによる読出し速度の向上や、NAND型フラッシュメモリ18の寿命向上を図ることができる。
次に、上記実施の形態のストレージ装置10、10Aのハードウェア構成の一例を説明する。図14は、上記実施の形態のストレージ装置10、10Aのハードウェア構成図の一例である。
上記実施の形態のストレージ装置10、10Aは、CPU300などの制御装置と、RAM(Random Access Memory)302などの記憶装置と、圧縮・伸長回路304と、メモリI/F308と、ホストI/F310と、各部を接続するバス306と、を備える。
ホストI/F310は、上記ホスト・インターフェース部14に相当する。ホストI/F310は、ホスト装置12に接続されている。メモリI/F308は、上記メモリ・インターフェース部16に相当する。メモリI/F308は、NAND型フラッシュメモリ18に接続されている。圧縮・伸長回路304は、上記圧縮部24A、伸長部22D、に相当する。
RAM302は、ホスト装置12から取得またはホスト装置12へ送信するデータ(クラスタ)、圧縮クラスタ、論理アドレス(LCA、LBA)などを一次記憶する揮発性の記憶装置である。なお、RAM302は、LUT18Aの一部または全部をキャッシュするために用いてもよい。RAM302は、例えば、SRAM(Static RAM)またはDRAM(Dynamic RAM)である。
上記実施の形態のストレージ装置10、10Aでは、CPU300が、ROMからプログラムをRAM302上に読み出して実行することにより、上記各部がコンピュータ上で実現される。
なお、上記実施の形態のストレージ装置10、10Aで実行される上記各処理を実行するためのプログラムは、HDDに記憶されていてもよい。また、上記実施の形態のストレージ装置10、10Aで実行される上記各処理を実行するためのプログラムは、ROMに予め組み込まれて提供されていてもよい。
また、上記実施の形態のストレージ装置10、10Aで実行される上記処理を実行するためのプログラムは、インストール可能な形式または実行可能な形式のファイルでCD−ROM、CD−R、メモリカード、DVD(Digital Versatile Disk)、フレキシブルディスク(FD)等のコンピュータで読み取り可能な記憶媒体に記憶されてコンピュータプログラムプロダクトとして提供されるようにしてもよい。また、上記実施の形態のストレージ装置10、10Aで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上記実施の形態のストレージ装置10、10Aで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワーク経由で提供または配布するようにしてもよい。
なお、図14に示したハードウェア構成は、一例であり、ストレージ装置10、10Aを、その他のハードウェア構成によって実現してもよい。例えば、CPU300および圧縮・伸長回路304は、その一部または全部の処理を専用の回路で行ってもよいし、汎用の演算装置(CPUなど)で行ってもよい。
なお、上記には、本発明の実施の形態を説明したが、上記実施の形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施の形態は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
10、10A ストレージ装置
18 NAND型フラッシュメモリ
18A LUT
20、21 ストレージコントローラ
22、23 読出制御部
22A 変換部
22B、23B 読出部
22C、23C 解析部
23E 訂正部
24、25 書込制御部
24A 圧縮部
24B パッキング処理部
24C 書込部
25D 符号化部

Claims (11)

  1. 読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの物理アドレスに変換する変換部と、
    前記不揮発性メモリから、前記物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す読出部と、
    前記パッキングユニットに含まれるデータの読出に並行して、前記パッキングユニットに含まれるヘッダ情報を解析し、前記パッキングユニットにおける、前記読出対象の前記圧縮クラスタの位置情報を取得する解析部と、
    を備える、読出制御装置。
  2. 前記読出部は、前記パッキングユニットにおける前記位置情報によって示される位置の前記圧縮クラスタを、前記読出対象の前記圧縮クラスタとして出力する、
    請求項1に記載の読出制御装置。
  3. 前記変換部は、前記圧縮クラスタの論理アドレスと、前記不揮発性メモリにおける前記圧縮クラスタを含むパッキングユニットの位置を示す前記物理アドレスと、を対応づけた管理情報を用いて、前記圧縮クラスタの論理アドレスを前記物理アドレスに変換する、請求項1または請求項2に記載の読出制御装置。
  4. 前記読出部は、
    前記位置情報が第1条件を満たすと判定した場合、前記パッキングユニットから、少なくとも前記位置情報によって示される位置の前記圧縮クラスタの読出しを終了するまで、データの読出を継続し、
    前記位置情報が第2条件を満たすと判定した場合、前記パッキングユニットにおける前記位置情報に示される位置へ読出位置を変更し、該読出位置から前記圧縮クラスタを読出す、
    請求項1〜請求項3の何れか1項に記載の読出制御装置。
  5. 前記読出部は、
    前記解析部で取得した前記位置情報によって示される位置が前記ヘッダ情報に隣接する位置である場合、または、前記解析部で取得した前記位置情報によって示される位置が前記ヘッダ情報に非隣接の位置であって、且つ、前記ヘッダ情報の末尾から前記位置情報によって示される位置までの間隔が閾値以下の場合、前記第1条件を満たすと判定し、
    前記解析部で取得した前記位置情報によって示される位置が前記ヘッダ情報に非隣接の位置であって、且つ、前記間隔が前記閾値を超える場合、前記第2条件を満たすと判定する、
    請求項4に記載の読出制御装置。
  6. 前記読出部によって読み出されたデータにおける、第1単位ごとに付与されたエラー訂正符号を用いて、エラー訂正を行う訂正部を備え、
    前記解析部は、エラー訂正された前記ヘッダ情報を解析する、
    請求項1〜請求項5の何れか1項に記載の読出制御装置。
  7. 前記訂正部は、
    前記読出部によって読み出されたデータにおける、前記ヘッダ情報に付与されたエラー訂正符号を用いて、該ヘッダ情報のエラー訂正を行う第1訂正部と、
    前記ヘッダ情報より大きいデータサイズの前記第1単位ごとに付与されたエラー訂正符号を用いてエラー訂正を行う第2訂正部と、
    を有し、
    前記解析部は、
    前記第1訂正部による前記ヘッダ情報のエラー訂正が成功した場合、エラー訂正された前記ヘッダ情報を解析し、前記第1訂正部による前記ヘッダ情報のエラー訂正が失敗した場合、前記第2訂正部によってエラー訂正された前記第1単位のデータに含まれる前記ヘッダ情報を解析する、
    請求項6に記載の読出制御装置。
  8. 前記ヘッダ情報は、該ヘッダ情報を含む前記パッキングユニットに含まれる、前記圧縮クラスタの前記位置情報と、前記圧縮クラスタの前記論理アドレスと、を含む、
    請求項1〜請求項7の何れか1項に記載の読出制御装置。
  9. 前記ヘッダ情報は、前記パッキングユニットに含まれる前記圧縮クラスタの数と、前記圧縮クラスタのサイズと、の少なくとも一方を更に含む、
    請求項8に記載の読出制御装置。
  10. 書込制御部と、読出制御部と、を含むストレージコントローラであって、
    前記書込制御部は、
    書込みデータを圧縮した圧縮クラスタ、および、前記圧縮クラスタの論理アドレスと位置情報とを対応づけたヘッダ情報と、を含むパッキングユニットを生成するパッキング処理部と、
    前記パッキングユニットを不揮発性メモリへ書込み、前記圧縮クラスタの論理アドレスと物理アドレスとを対応づけた管理情報を更新する書込部と、
    を備え、
    前記読出制御部は、
    読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの前記物理アドレスに変換する変換部と、
    前記不揮発性メモリから、前記物理アドレスによって示される位置の前記パッキングユニットに含まれるデータを読出す読出部と、
    前記パッキングユニットに含まれるデータの読出に並行して、前記パッキングユニットに含まれるヘッダ情報を解析し、前記パッキングユニットにおける、前記読出対象の前記圧縮クラスタの位置情報を取得する解析部と、
    を備える、
    ストレージコントローラ。
  11. 読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの物理アドレスに変換するステップと、
    前記不揮発性メモリから、前記物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出すステップと、
    前記パッキングユニットに含まれるデータの読出に並行して、前記パッキングユニットに含まれるヘッダ情報を解析し、前記パッキングユニットにおける、前記読出対象の前記圧縮クラスタの位置情報を取得するステップと、
    をコンピュータに実行させるためのプログラム。
JP2017049946A 2017-03-15 2017-03-15 読出制御装置、ストレージコントローラ、およびプログラム Pending JP2018156137A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017049946A JP2018156137A (ja) 2017-03-15 2017-03-15 読出制御装置、ストレージコントローラ、およびプログラム
US15/684,975 US20180267746A1 (en) 2017-03-15 2017-08-24 Readout control device, storage controller, and computer program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017049946A JP2018156137A (ja) 2017-03-15 2017-03-15 読出制御装置、ストレージコントローラ、およびプログラム

Publications (1)

Publication Number Publication Date
JP2018156137A true JP2018156137A (ja) 2018-10-04

Family

ID=63520001

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017049946A Pending JP2018156137A (ja) 2017-03-15 2017-03-15 読出制御装置、ストレージコントローラ、およびプログラム

Country Status (2)

Country Link
US (1) US20180267746A1 (ja)
JP (1) JP2018156137A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021029143A1 (ja) * 2019-08-15 2021-02-18 ソニーセミコンダクタソリューションズ株式会社 半導体記憶装置及び該装置における不良メモリセルに対するエラー処理方法
JP2022545997A (ja) * 2019-07-02 2022-11-02 マイクロソフト テクノロジー ライセンシング,エルエルシー ハードウェアベースのメモリ圧縮

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111324307B (zh) * 2020-02-13 2023-02-21 西安微电子技术研究所 一种星载nand flash型固态存储器及分配存储空间的方法
CN115455010B (zh) * 2022-11-09 2023-02-28 以萨技术股份有限公司 一种基于milvus数据库的数据处理方法、电子设备及存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022545997A (ja) * 2019-07-02 2022-11-02 マイクロソフト テクノロジー ライセンシング,エルエルシー ハードウェアベースのメモリ圧縮
JP7438246B2 (ja) 2019-07-02 2024-02-26 マイクロソフト テクノロジー ライセンシング,エルエルシー ハードウェアベースのメモリ圧縮
WO2021029143A1 (ja) * 2019-08-15 2021-02-18 ソニーセミコンダクタソリューションズ株式会社 半導体記憶装置及び該装置における不良メモリセルに対するエラー処理方法

Also Published As

Publication number Publication date
US20180267746A1 (en) 2018-09-20

Similar Documents

Publication Publication Date Title
US8560926B2 (en) Data writing method, memory controller and memory storage apparatus
TWI455144B (zh) 使用於快閃記憶體的控制方法與控制器
TWI534618B (zh) 映射表更新方法、記憶體控制電路單元及記憶體儲存裝置
JP6134857B2 (ja) 記憶デバイス、記憶デバイスを有する装置、及び記憶制御方法
JP2018156137A (ja) 読出制御装置、ストレージコントローラ、およびプログラム
TWI609263B (zh) 可變大小快閃轉變層
CN110832590A (zh) 在基于相变存储器的存储设备中减轻写入放大的方法和系统
US9336081B2 (en) Data writing and reading method, and memory controller and memory storage apparatus using the same for improving reliability of data access
KR20130025415A (ko) 고체-상태 드라이브의 성능 및/또는 신뢰성을 개선하는 방법 및 시스템
KR20110073932A (ko) Ecc 회로를 포함하는 반도체 스토리지 시스템 및 그 제어 방법
US9720821B2 (en) Adaptive compression data storing method for non-volatile memories and system using the same
US20150242122A1 (en) Method for wrtiting data, memory storage device and memory control circuit unit
TW201545167A (zh) 在非揮發性記憶體中處理錯誤更正碼的方法及其非揮發性儲存裝置
KR20110113422A (ko) 저장 매체에 데이터를 저장하는 방법, 그를 이용한 데이터 저장 장치, 및 그것을 포함한 시스템
TWI540582B (zh) 資料管理方法、記憶體控制電路單元以及記憶體儲存裝置
WO2018087795A1 (ja) フラッシュメモリモジュール及びフラッシュメモリモジュールの制御方法
KR20110138076A (ko) 데이터 저장 장치 및 그것의 쓰기 방법
US9430327B2 (en) Data access method, memory control circuit unit and memory storage apparatus
TWI545432B (zh) 資料管理方法、記憶體控制電路單元以及記憶體儲存裝置
TWI606333B (zh) 資料處理方法、記憶體儲存裝置及記憶體控制電路單元
JP2020149195A (ja) メモリシステム
US20180267733A1 (en) Non-volatile memory apparatus and data deduplication method thereof
TW201705148A (zh) 映射表存取方法、記憶體控制電路單元及記憶體儲存裝置
US10911064B1 (en) Symbol pair encoding for data compression
TWI467590B (zh) 資料處理方法、記憶體控制器及記憶體儲存裝置