JPWO2016203631A1 - フラッシュメモリデバイス - Google Patents

フラッシュメモリデバイス Download PDF

Info

Publication number
JPWO2016203631A1
JPWO2016203631A1 JP2017524250A JP2017524250A JPWO2016203631A1 JP WO2016203631 A1 JPWO2016203631 A1 JP WO2016203631A1 JP 2017524250 A JP2017524250 A JP 2017524250A JP 2017524250 A JP2017524250 A JP 2017524250A JP WO2016203631 A1 JPWO2016203631 A1 JP WO2016203631A1
Authority
JP
Japan
Prior art keywords
flash memory
read
data
processor
pattern
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.)
Granted
Application number
JP2017524250A
Other languages
English (en)
Other versions
JP6374108B2 (ja
Inventor
洋平 狹間
洋平 狹間
純司 小川
純司 小川
二瀬 健太
健太 二瀬
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2016203631A1 publication Critical patent/JPWO2016203631A1/ja
Application granted granted Critical
Publication of JP6374108B2 publication Critical patent/JP6374108B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/26Sensing or reading circuits; Data output circuits
    • 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/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • 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
    • 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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/16Protection against loss of memory contents
    • 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/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • 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
    • 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/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/56Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency
    • G11C11/5621Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using storage elements with more than two stable states represented by steps, e.g. of voltage, current, phase, frequency using charge storage in a floating gate
    • G11C11/5642Sensing or reading circuits; Data output circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/349Arrangements for evaluating degradation, retention or wearout, e.g. by counting erase cycles
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C2211/00Indexing scheme relating to digital stores characterized by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C2211/56Indexing scheme relating to G11C11/56 and sub-groups for features not covered by these groups
    • G11C2211/564Miscellaneous aspects
    • G11C2211/5648Multilevel memory programming, reading or erasing operations wherein the order or sequence of the operations is relevant

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)
  • Computer Hardware Design (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Read Only Memory (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

フラッシュメモリコントローラは、フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持する。フラッシュメモリコントローラは、リードコマンドに従ってフラッシュメモリチップからリードしたデータのエラー訂正を実行する。フラッシュメモリコントローラは、エラー訂正によってリードしたデータの全てのエラーを訂正できない場合、リードパターンが示す次のリードオプションをフラッシュメモリチップに指定して、フラッシュメモリチップからデータをリードする。

Description

本発明は、フラッシュメモリデバイスに関する。
近年、高速にリード/ライトすることが可能なフラッシュメモリを記憶媒体とするフラッシュメモリデバイスが普及している。フラッシュメモリデバイスは、フラッシュメモリの微細化の進展に伴って低価格化している一方、格納したデータのエラー発生率が増加している。そのため、フラッシュメモリデバイスは、エラー訂正機能を使用したデータ回復を必要とする。さらに、フラッシュメモリチップの状態によって、一回のリードによるデータが、訂正限界値を超えるエラーを含むことがある。
そこで、信頼性の向上のために、フラッシュメモリデバイスは、リード時に使用するパラメータを変更して再リードを行う、リードリトライ機能を搭載している。リードリトライ機能によって、一回のリードによるデータ内のエラーを訂正限界値以下に抑えてデータをリードできる可能性を高めることができる。例えば、米国特許出願公開2013/0238836号は、プロセッサが、リードパラメータを探索し、フラッシュメモリインタフェースにリードパラメータの転送を指示することを開示する。
米国特許出願公開2013/0238836号
しかし、リードリトライの結果をプロセッサが受け取り、リードパラメータを変更してリードリトライをさらに指示する構成は、プロセッサのオーバーヘッドが大きく、リードリトライに多くの時間を必要とする。
また、フラッシュメモリはデータの読み出し/書込みをページ単位で実行するという制約がある。フラッシュメモリチップのあるページからリードされたページデータが訂正できないエラーを含む場合、当該ページデータは訂正不可能であり、フラッシュメモリデバイス単体ではデータを回復できない。このため、RAID(Redundant Arrays of Independent Disks)機能による他のフラッシュメモリデバイスのデータを使用したデータ回復のための時間を必要とする。以上のように、エラー訂正に時間がかかると、フラッシュメモリの高速性を活かすことができない。
本発明の代表的な一例は、データを格納する、フラッシュメモリチップと、外部からのリード要求を解析し、リードコマンドを生成するプロセッサと、前記プロセッサから前記リードコマンドを受け付けるフラッシュメモリコントローラと、を含み、前記フラッシュメモリコントローラは、前記フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持し、前記リードコマンドに従って前記フラッシュメモリチップからリードしたデータの、エラー訂正を実行し、前記エラー訂正によって前記リードしたデータの全てのエラーを訂正できない場合、前記リードパターンが示す次のリードオプションを前記フラッシュメモリチップに指定して、前記フラッシュメモリチップから前記データをリードする、フラッシュメモリデバイスである。
本発明の一態様によれば、フラッシュメモリデバイスにおけるリードを高速化できる。
計算機システムの概略構成を模式的に示す。 SSDの構成例を示す。 SSDのメモリが格納する制御情報を示す。 劣化度管理テーブルの構成例を示す。 リードパターン構成テーブルの構成例を示す。 エラービットの原因とリードオプションとの関係例を示す。 劣化度−リードパターン対応テーブルの構成例を示す。 リードパターン管理テーブルの構成例を示す。 ストレージコントローラからのリード要求に応じた、デバイスコントローラにおけるプロセッサの処理のフローチャートを示す。 プロセッサからのリードコマンドに応じた、フラッシュメモリコントローラの処理のフローチャートを示す。 ページデータの構成を示す。 リードオプションと、コードワードのエラー訂正成否(可能/不可能)と、の関係例を示す。 異なるリードオプションにおいて訂正されたコードワードのユーザデータのマージを模式的に示している。 異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージする処理を模式的に示す。 プロセッサからのリードコマンドに応じた、フラッシュメモリコントローラの処理のフローチャートを示す。 プロセッサがコードワードのユーザデータをマージする例を示す。 プロセッサがコードワードのユーザデータをマージする他の例を示す。 リード要求に応じたリードパターンの選択を模式的に示す。 リードパターンレジスタに格納されるリードパターンの書き換えを模式的に示す。 フラッシュメモリチップの状態検査及び検査結果に応じた劣化度管理テーブルの更新のフローチャートを示す。 フラッシュメモリコントローラが格納するリードパターンの更新のフローチャートを示す。
以下、添付図面を参照して本発明の実施形態を説明する。本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。特に説明がない場合、各図において共通の構成については同一の参照符号が付されている。
以下において、フラッシュメモリチップを含むフラッシュメモリデバイス及びフラッシュメモリデバイスを含むストレージ装置が開示される。フラッシュメモリデバイスは、プロセッサと、フラッシュメモリコントローラとを含む。プロセッサは、上位装置からのリード要求を解析してリードコマンドを生成し、フラッシュメモリコントローラに発行する。
フラッシュメモリコントローラは、リードコマンドに従って、フラッシュメモリチップからデータをリードする。フラッシュメモリコントローラは、リードオプションとアクセス先となる物理領域を指定して、フラッシュメモリチップにリードを指示する。フラッシュメモリチップは、リードオプションが対応するリードパラメータを使用して、データをリードする。
フラッシュメモリコントローラは、リードオプションの実行順序を示すリードパターンを保持している。フラッシュメモリコントローラは、リードパターンに従って、フラッシュメモリチップにリードオプションを指示して、リードを実行する。一回のリードによる全データが訂正可能である場合、リードは完了する。フラッシュメモリコントローラがリードパターンを保持することにより、リードリトライにおけるプロセッサの介在回数(オーバーヘッド)を削減し、リードを高速化できる。
一例において、フラッシュメモリコントローラは、複数のリードパターンを保持し、プロセッサは、アクセス先領域の状態に応じたリードパターンを指定する。フラッシュメモリコントローラは、指定されたリードパターンに従って、異なるリードオプションのリードリトライを実行する。これにより、リードリトライ回数を低減し、リードを高速化できる。
一例において、フラッシュメモリデバイスは、エラー訂正単位(コードワード)毎にデータを回復し、さらに、コードワード毎にデータとエラー訂正成否情報を管理する。フラッシュメモリチップのリードはページ単位であり、複数コードワードが1ページ内に存在する。一つのコードワードは、ユーザデータとエラー訂正コードで構成される。フラッシュメモリデバイスは、コードワード毎にデータを回復し、複数回のリードによる回復後のデータをマージする。これにより、データ回復できる可能性を高め、さらに、リードリトライ回数を低減できる。
以下に説明する例は、リードパターンに従ったリードリトライ及びコードワードのユーザデータのマージの双方を実行するが、フラッシュメモリデバイスは、いずれか一方の機能のみが実装されていてもよい。以下に説明する例は、フラッシュメモリコントローラに複数のリードパターンを保持するが、フラッシュメモリコントローラが保持するリードパターンは一つのみでもよい。この場合、プロセッサからのリードパターンの指定は省略できる。
図1は、本実施形態の計算機システムの概略構成を模式的に示す。図1において、同構成の要素に対する参照符号は省略されている。本計算機システムは、ホスト計算機10及びストレージ装置12を含む。ホスト計算機10及びストレージ装置12は、データネットワーク11により接続されている。各ホスト計算機10は、ストレージ装置12のリソースにアクセスし、業務を行う装置である。
データネットワーク11はデータ通信用のネットワークであって、一例において、SAN(Storage Area Network)である。データネットワーク11は、データ通信用のネットワークであれば、SANと異なるネットワークでもよい。
ストレージ装置12は、記憶デバイス134、135及びストレージコントローラ120を含む。本例において、ストレージ装置12は、2種類の記憶デバイスを含み、具体的には、SSD(Solid State Drive)134及びHDD(Hard Disk Drive)135を含む。ストレージコントローラ120は、記憶デバイスの上位装置である。
ストレージコントローラ120は、プロセッサ122、メモリ123、パリティ演算回路125、複数のディスクインタフェース(I/F)127、及び複数のホストインタフェース(I/F)121を含む。これらは、相互接続スイッチ(SW)126で通信可能に接続されている。
ホストインタフェース121は、それぞれ、データネットワーク11に接続し、ネットワーク11での通信に用いられるプロトコルを、ストレージコントローラ120内部で用いられるプロトコルに変換する機能を有する。
プロセッサ122は、メモリ123に格納されているストレージ制御プログラム及び必要な他のプログラムを実行することで、ホスト計算機10からのI/Oアクセス(リード/ライト)の制御及びストレージ装置12のボリュームの管理制御を含む所定の機能を実現する。
メモリ123は、プロセッサ122が実行するプログラム及びその制御データを格納する。メモリ123は、さらに、ホスト計算機10のユーザデータ(ホストデータ)を、キャッシュ領域124に一時的に格納する。具体的には、キャッシュ領域124は、ホスト計算機10からのライトデータを一時的に格納して、その後、記憶デバイス134、135に転送し、記憶デバイス134、135からホスト計算機10に転送されるリードデータを一時的に格納する。
パリティ演算回路125は、ホスト計算機10からのホストデータから、RAID機能のためのパリティデータを生成する。記憶デバイス134のグループ及び記憶デバイス135のグループは、それぞれ、冗長構成(RAID構成)を有し、生成されたパリティデータは、ホストデータと共に記憶デバイスに格納される。パリティ演算回路125は、パリティデータを使用して、記憶デバイスから正確にリードできなかったホストデータを回復する。
ディスクインタフェース127は、それぞれ、同一種類の記憶デバイスのグループに接続し、記憶デバイスグループとキャッシュ領域124との間において、ライトデータ及びリードデータを仲介する。ディスクインタフェース127は、記憶デバイス134又は135とおいて用いられる通信プロトコルと、ストレージコントローラ120で用いられるプロトコルとの間の変換を行う。記憶デバイス134又は135のプロトコルは設計に依存する。
各ディスクインタフェース127は、バッファ128及びSAS(Serial Attached SCSI)コントローラ(SAS CTL)129を含む。バッファ128は、記憶デバイスに書き込むライトデータ及び記憶デバイスから読み出したリードデータを一時的に格納する。SASコントローラ129は、SASプロトコルに従って記憶デバイス134又は135と通信する。
図2Aは、SSD134の構成例を示す。SSD134はフラッシュメモリ(FM)を記憶媒体として使用するフラッシュメモリデバイスである。図2Aの例において、SSD134は、デバイスコントローラ150と、複数のフラッシュメモリチップ161と、を含む。
フラッシュメモリにおいては、ページ単位でデータのリード及びライトが実行される。ライトは、消去済みページに対して実行される。フラッシュメモリにおいては、ブロック単位でデータが消去される。ブロックは複数のページで構成される。また、フラッシュメモリにおいては、データを上書きできないという特性がある。ページにデータを上書きする場合、デバイスコントローラ150は、当該ページとは異なるページにデータをライトし、当該ページの物理アドレスと論理アドレスのマッピングを更新する。
デバイスコントローラ150は、SASコントローラ(SAS CTL)151、プロセッサ153、メモリ154、及びフラッシュメモリ(FM)コントローラ155を含む。これらは、内部接続スイッチ(SW)152で通信可能に接続されている。フラッシュメモリコントローラ155は、制御部156、マイクロプログラムインタフェース157、データバッファ158、ECC(Error Checking and Correction)演算回路159、及びフラッシュメモリインタフェース(FM I/F)160を含む。
SASコントローラ151は、ディスクインタフェース127との間で、SASプロトコルに従って通信を行う。プロセッサ153は、メモリ154に格納されているプログラムを実行することで、ディスクインタフェース127からのI/O要求を処理する。I/O要求はリード要求又はライト要求である。
メモリ123は、プロセッサ153が実行するプログラム及び制御データの他、フラッシュメモリチップ161のデータを一時的に格納する。具体的には、メモリ123は、ディスクインタフェース127からチップ161に転送されるライトデータを一時的に格納して、フラッシュメモリコントローラ155からディスクインタフェース127に転送されるリードデータを一時的に格納する。
制御部156は、マイクロプログラムインタフェース157、データバッファ158、及びフラッシュメモリインタフェース160を制御するシーケンサである。制御部156は、レジスタセット162を含む。後述するように、レジスタセット162は、リードパターンを格納するリードパターンレジスタを含む。リードパターンは、リードオプションの実行順序を指示する。リードオプションは、フラッシュメモリチップ161によるデータリードのパラメータ値(パラメータセットの値)に対応づけられる。
制御部156は、プロセッサ153からのリードコマンドと共に、アクセス先アドレス及びリードパターンの指定を受け付ける。制御部156は、アドレスからアクセス先のフラッシュメモリチップ161、当該チップ161内のブロック及びページを決定する。制御部156は、アクセス先のフラッシュメモリチップ161からのリードにおいて、指定されたリードパターンに従ったリードオプションを、順次、フラッシュメモリチップ161に指示する。
マイクロプログラムインタフェース157は、プロセッサ153との通信のインフェースである。データバッファ158は、リードデータ及びライトデータを一時的に格納する。ECC演算回路159は、フラッシュメモリチップ161に書き込まれるデータにエラー訂正のための冗長データ(エラー訂正コード)を付加する。ECC演算回路159は、各ページデータのエラー訂正コードを生成し、各ページデータに付加する。後述するように、ECC演算回路159は、ページデータ内のエラー訂正単位毎にエラー訂正コードを生成する。
ECC演算回路159は、フラッシュメモリチップ161から読み出されたデータのエラー訂正を、エラー訂正コードを使用して実行する。エラー訂正は、検出したエラーを訂正する。
フラッシュメモリインタフェース160は、フラッシュメモリチップ161との通信のインタフェースであり、選択したフラッシュメモリチップ161にデータをライト及びリードする。後述するように、フラッシュメモリインタフェース160は、制御部156からリードオプションの指定を受け付け、フラッシュメモリチップ161にリードオプションを指定する。フラッシュメモリチップ161は、指定されたリードオプションに対応するパラメータ値において、セルから値を読み出す。
図2Bは、メモリ154が格納する制御情報を示す。メモリ154は、劣化度管理テーブル230、リードパターン構成テーブル250、劣化度−リードパターン対応テーブル270、及びリードパターン管理テーブル290を格納している。
図3は劣化度管理テーブル230の構成例を示す。劣化度管理テーブル230は、フラッシュメモリチップ161におけるブロックの劣化度に関する情報を管理する。本例においては、劣化度を計算するために参照される情報を格納する。劣化度は、セルのデータ保持能力を示し、セル電圧の本来の値からのずれに対応する。後述するように、フラッシュメモリチップ161からのリードにおいて使用されるリードパターンは、データを読み出す領域の劣化度に応じて決定される。なお、ブロック単位でデータが消去されるため、ブロック内のセルの劣化度はほぼ同じになる。このため、ブロックの状態を管理すれば、セルの劣化度を管理できる。
チップ番号欄はフラッシュメモリチップ161の番号を示し、ブロック番号欄は、フラッシュメモリチップ161内のブロックの番号を示す。累積消去回数欄は、計測開始(例えば起動時)からのブロックの総消去回数を示す。プロセッサ153は、ストレージコントローラ120から消去要求毎に累積消去回数欄を更新する。ライト日時欄は、ブロックへの最新のライト(前回ライト)の日時を示し、ストレージコントローラ120からのライト要求毎に更新される。
ECC訂正ビット数欄は、後述するフラッシュメモリチップ161の状態検査において検出されたブロック内のECC訂正ビット数を示す。リードオプション欄は、フラッシュメモリチップ161の状態検査において、ブロックに格納されているデータを正確にリードできたリードオプションの番号を示す。
リトライリード使用率欄は、現在のリードパターンを適用してからの、ページ単位の1回のリードにおけるリトライ回数の平均値を示し、ストレージコントローラ120からのリード要求毎に更新される。FM温度欄は、SSD134に実装されている温度センサ(不図示)による温度を示し、フラッシュメモリチップ161の温度に対応する。
チップ別使用不可ブロック数は、フラッシュメモリチップ161内で使用できないブロック数を示す。使用リードパターン欄は、ブロックに対する次回のリードにおいて使用されるリードパターンの番号を示す。なお、劣化度管理テーブル230は、ブロックと異なる記憶領域単位、例えば、ページ単位で情報を保持してもよい。
図4は、リードパターン構成テーブル250の構成例を示す。リードパターン構成テーブル250は、リードパターンそれぞれの構成情報、つまり、リードパターンそれぞれの、リードオプション実行順序の情報を格納する。図4の例においては、20のリードパターンが用意されており、例えば、リードオプション番号は0〜15である。フラッシュメモリチップ161は、リードオプション番号それぞれに対応するパラメータ値を保持している。
図5は、エラービットの原因とリードオプションとの関係例を示す。図5は、異なるリードオプションにおける、セルの閾値電圧Vth、セル数及びリード基準電圧(V_R)の関係を示す。図5は、4値セル(2ビットセル)のフラッシュメモリチップ161の例を示すが、本開示は、2値のセル又は4値より大きいセルのフラッシュメモリチップに適用できる。
リードオプション0及び1それぞれにおける二つのグラフは、LEVEL0〜3それぞれにおける、セルの閾値電圧Vthの分布を示す。具体的には、LEVEL0〜3それぞれにおける、セルの閾値電圧Vthとセルの数との関係を示す(閾値電圧Vthの確率分布)。
セルのレベルを判定するため、三つのリード基準電圧値V_R(LEVEL1)〜V_R(LEVEL3)が設定されている。三つのリード基準電圧値は、リードオプションによって決められる。
セルの閾値電圧Vthは、セルの劣化やライトからの時間経過等によって変化する。図5の例において、LEVEL3の閾値電圧Vthが低下している。リードオプション0におけるリード基準電圧値V_R(LEVEL3)は、LEVEL3の閾値電圧Vthに比較して高すぎるため、LEVEL3のセルのビットエラー率が高くなり、ECC演算回路159によりページデータのエラーを訂正できない可能性が高まる。
一方、リードオプション1は、リードオプション0よりも低いリード基準電圧値V_R(LEVEL3)を指定する。低いリード基準電圧値V_R(LEVEL3)によって、電圧変動を起こしているLEVEL3のセルのビットエラー率が低くなる。このように、適切なリードオプションを選択することによって、ページデータ内のビットエラー数を、ECC演算回路159により訂正可能は範囲に収めることができる。
図6は、劣化度−リードパターン対応テーブル270の構成例を示す。劣化度−リードパターン対応テーブル270は、フラッシュメモリチップ161における劣化度と、適用されるリードパターンと、の間の関係を示す。劣化度は、フラッシュメモリチップ161内の記憶領域の状態に基づき、所定記憶領域単位で決定される。例えば、劣化度は、最新のライトからの経過時間や消去回数等のI/O情報(I/O履歴)やチップ温度等の物理状態情報に基づき、ブロック単位、チップ単位又はページ単位で決定される。
図7は、リードパターン管理テーブル290の構成例を示す。リードパターン管理テーブル290は、フラッシュメモリコントローラ155内のリードパターンレジスタが格納しているリードパターンを示す。リードパターンレジスタは、制御部156のレジスタセット162に含まれており、リードパターンレジスタ番号により識別される。プロセッサ153は、例えば、リードパターンレジスタ番号によって、使用するリードパターンを指定する。なお、プロセッサ153は、レジスタ番号ではなくリードパターン番号でリードパターンを指示してもよい。
図8は、ストレージコントローラ120からのリード要求に応じた、デバイスコントローラ150におけるプロセッサ153の処理のフローチャートを示す。プロセッサ153は、SASコントローラ151を介して、リード要求を受信する(S101)。
プロセッサ153は、リード要求を解析し、データを読み出すフラッシュメモリチップ161の領域を計算する。例えば、リード要求はアクセス先アドレスを示し、プロセッサ153は、保持するマッピング情報を使用して、当該アドレスからアクセス先のフラッシュメモリチップ161並びに当該チップ161内のブロック及びページを特定する。
プロセッサ153は、劣化度管理テーブル230を参照し、アクセス先のブロックのエントリから「使用リードパターン」の値を取得する(S102)。プロセッサ153は、アクセス先の領域及びリードパターンを指定するリードコマンドを生成する(S103)。プロセッサ153は、リードパターン管理テーブル290を参照し、上記リードパターンを格納するリードパターンレジスタ番号を特定し、当該リードパターンレジスタ番号をリードコマンドに含める。
リードパターン管理テーブル290が上記リードパターンの番号を格納していない場合、プロセッサ153は、上記リードパターンの番号に最も近いリードパターン番号をリードパターン管理テーブル290において検索し、検索したリードパターン番号に対応するリードパターンレジスタ番号を取得する。プロセッサ153は、劣化度管理テーブル230を参照して劣化度を計算し、計算した劣化度に最も近い劣化度範囲に対応するリードパターンを、リードパターン管理テーブル290において検索してもよい。
または、プロセッサ153は、劣化度管理テーブル230の「使用リードパターン」が示すリードパターンを、リードパターン構成テーブル250から取得し、いずれかのリードパターンレジスタを書き換えてもよい。プロセッサ153は、書き換えたリードパターンレジスタの番号をリードコマンドに含める。リードパターンの書き換えは、図18を参照して後述する。
プロセッサ153は、生成したリードコマンドを、フラッシュメモリコントローラ155に発行する(S104)。具体的には、プロセッサ153は、生成したリードコマンドをメモリ154に格納し、マイクロプログラムインタフェース157は、メモリ154から当該リードコマンドを取得する。
プロセッサ153は、フラッシュメモリコントローラ155からの、リード終了応答を待つ(S105)。リード終了応答を受信すると(S105:YES)、プロセッサ153は、リード終了応答を参照し、正常にリードが終了したか否か判定する(S106)。
ステップ106の判定結果がYESである場合、プロセッサ153は、メモリ154に格納されているデータを、SASコントローラ151を介してストレージコントローラ120に転送する(S107)。ステップ106の判定結果がNOである場合、プロセッサ153は、エラー結果を、SASコントローラ151を介してストレージコントローラ120に転送する(S108)。ストレージコントローラ120は、パリティ演算回路125によって、他のSSD134から読み出したデータから、読み出せなかったデータを回復できる。
図9は、プロセッサ153からのリードコマンドに応じた、フラッシュメモリコントローラ155の処理のフローチャートを示す。本フローチャートは、フラッシュメモリチップ161から1ページのデータをリードする処理を示す。制御部156は、マイクロプログラムインタフェース157を介して、リードコマンドを受信する(S120)。
制御部156は、リードコマンドが示すリードパターンをレジスタセット162から取得し、1回目のリードオプションを当該リードパターンから選択する(S121)。リードコマンドは、例えば、リードパターンレジスタ番号を示し、制御部156は、レジスタセット162における当該リードパターンレジスタ番号のレジスタから、リードパターンを取得する。1回目のリードオプションは、リードパターンに拠らず、予め設定された全フラッシュメモリチップに共通のリードオプションであってもよい。
制御部156は、選択したリードオプションにおいて、フラッシュメモリチップ161からのデータリードを実行する(S122)。具体的には、制御部156は、リードオプション番号を、チップ番号及びチップ内ページアドレスと共に指定したリードコマンドを、フラッシュメモリインタフェース160に送信する。フラッシュメモリインタフェース160は、ページアドレスとリードオプション番号を指定して、指定されたフラッシュメモリチップ161にリードを指示する。
フラッシュメモリチップ161からのページデータは、ECC演算回路159に転送される。ECC演算回路159は、ページデータのエラー訂正を実行する(S123)。図10はページデータの構成を示す。ページデータは、複数のコードワードを含んで構成されている。コードワードは、ユーザデータ及びエラー訂正コード(ECC)を含んで構成されている。コードワードはエラー訂正単位である。ECC演算回路159は、ユーザデータに対するエラー訂正コードを生成してコードワードを生成し、さらに、各コードワードのエラー訂正を実行する。
図9に戻って、制御部156は、ページの全コードワードのエラーが訂正されているか判定する(S124)。具体的には、ECC演算回路159は、エラー訂正処理を実行したデータをデータバッファ158に格納し、さらに、エラー訂正成否情報を制御部156に送信する。データは、データバッファ158を経由しなくてもよい。エラー訂正成否情報は、各コードワードのエラー訂正の成否を示す。エラーが検出されない場合又は検出された全エラーが訂正された場合、エラー訂正は成功である。エラービット数が訂正限界を超えており、訂正できないエラーが存在する場合、エラー訂正は失敗(不可能)である。
データバッファ158に格納されるページデータは、正常にエラー訂正されたコードワードと、エラー訂正できなかったコードワードとを含み得る。いずれかのコードワードのエラーを訂正できてない場合は、ページデータはデータバッファ158に格納されなくてもよい。
全てのコードワードのエラーが訂正できた場合(S124:YES)、制御部156は、リードの正常終了をプロセッサ153に通知する(S125)。プロセッサ153は、データバッファ158に格納されているデータをメモリ154に転送する。データは、データバッファ158から、メモリ154を介することなく、ストレージコントローラ120に転送されてもよい。
いずれかのコードワードのエラーが訂正できなかった場合(S124:NO)、制御部156は、リードパターンの全てのリードオプションを試したか判定する(S126)。全リードオプションを終了している場合(S126:YES)、制御部156は、リードのエラー終了をプロセッサ153に通知する(S125)。
試していないリードオプションが残っている場合(S126:NO)、制御部156は、リードパターンから次のリードオプションを選択し(S128)、選択したリードオプションにおけるフラッシュメモリチップ161からのリードを実行する(S122)。
上述のように、フラッシュメモリコントローラ155がリードパターンを保持し、当該リードパターンが示す実行順序に従ったリードオプションでリードを繰り返しリトライすることで、プロセッサ153の介在回数を削減し、リードリトライのためのオーバーヘッドを大きく低減できる。
図9のフローチャートにおいて、制御部156は、一回のリードで読み出したページデータの全コードワードのエラー訂正が可能である場合に、正常終了をプロセッサ153に通知する。これと異なり、制御部156は、異なるリードオプションでリードされ、エラー訂正されたコードワードのユーザデータをマージして、エラーを含まないページデータを形成してもよい。ここで、エラー訂正されたデータは、エラーが検出されなかったデータを含む。
図11は、リードオプションと、コードワードのエラー訂正成否(可能/不可能)と、の関係例を示す。グラフ411〜414は、それぞれ、コードワード1〜コードワード4のエラービット数と、リードオプションとの関係を示す。
コードワード1は、リードオプション2又は3において、訂正限界以下のエラービット数を示す。コードワード2は、リードオプション0、1、4又は5において、訂正限界以下のエラービット数を示す。コードワード3は、リードオプション0において、訂正限界以下のエラービット数を示す。コードワード4は、リードオプション3、4又は5において、訂正限界以下のエラービット数を示す。
テーブル415は、リードオプションそれぞれにおける、各コードワードのエラー訂正成否を示す。正しいコードワードを得ることができた場合、当該コードワードのエラー訂正は成功であり、訂正できないエラーが存在する場合、エラー訂正は失敗(不可能)である。
表415から理解されるように、全てのコードワードを訂正できる単一のリードオプションは存在しない。しかし、全てのコードワードが、いずれかのリードオプションにおいてエラー訂正可能である。したがって、異なるリードオプションにおいてエラー訂正されたコードワードのユーザデータをマージすることで、全コードワードがエラー訂正されたページデータを形成することができる。
図12は、異なるリードオプションにおいて訂正されたコードワードのユーザデータのマージを模式的に示している。リードパターン421に従って、異なるリードオプションでリードが繰り返される。テーブル422は、各リードオプションにおける各コードワードの訂正結果を示す。いずれのリードオプションのリードによっても、いずれかのコードワードが訂正不能である。しかし、各コードワードは、いずれかのリードオプションで訂正可能である。
テーブル423は、異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージした場合の、ページデータにおける各コードワードの訂正成否を示す。異なるリードオプションで訂正されたコードワードのユーザデータをマージすることで、エラーを含まない正しいページデータが形成される。
図13は、異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージする処理を模式的に示す。図13において、フラッシュメモリコントローラ155が、異なるリードオプションにおいて訂正されたコードワードのユーザデータをマージして、全エラーが訂正されたページデータを生成する。
ホスト計算機10からリード要求を受信したストレージコントローラ120は、対応するリード要求をSSD134に送信する。SSD134のプロセッサ153は、リード要求を解析し、対応するリードコマンドをフラッシュメモリコントローラ155に発行する。
フラッシュメモリコントローラ155の制御部156は、リードコマンドに応じて、リードオプションを指定して、フラッシュメモリチップ161からデータをリードする。リードされたデータはECC演算回路159に転送され、ECC演算回路159は、コードワード毎にエラー訂正処理を実行する。
ECC演算回路159は、エラー訂正処理を実行したリードデータ(ページデータ)501を、データバッファ158に格納する。ECC演算回路159は、ページデータのECC訂正成否情報505を、制御部156に送信する。ECC訂正成否情報505は、リードデータ501内の各コードワードのエラー訂正が成功したか失敗したかを示す。
制御部156は、ECC訂正管理情報507を保持している。データバッファ158は、マージデータ503を格納する。マージデータ503は、リードパターンのリードオプションでの順次リードにおいてエラー訂正されたコードワードのユーザデータをマージして構成されている。訂正されたコードワードのユーザデータは、リード毎にマージデータ503にマージされる。これにより、データのマージに必要な記憶領域を低減できる。
ECC訂正管理情報507は、これまでのリードにおいて、各コードワードが訂正できたか否かを示す。いずれかのリードオプションでコードワードが訂正されている場合、ECC訂正管理情報507は、当該コードワードの訂正されたデータがマージデータ503に含まれていることを示す。いずれのリードオプションでもコードワードが訂正できていない場合、ECC訂正管理情報507は、当該コードワードの訂正されたデータがマージデータ503に含まれていないことを示す。
制御部156は、ECC演算回路159から取得したECC訂正成否情報505とECC訂正管理情報507とを参照して、リードデータ501内の訂正されたコードワードのユーザデータとマージデータ503とをマージする。
つまり、制御部156は、ECC訂正成否情報505とECC訂正管理情報507とを比較して、今回のリードでエラー訂正されたコードワードであって、マージデータ503に含まれないコードワードを特定する。制御部156は、特定した訂正されたコードワードのユーザデータをマージデータ503に追加する。制御部156は、新たに追加したコードワードの情報を、ECC訂正管理情報507において更新する。または、制御部156は、今回のリードでエラー訂正された全てのコードワードのユーザデータを、マージデータ503に追加する。制御部156は、エラー訂正されたコードワードの情報を、ECC訂正管理情報507において更新する。
1回のリードによるページデータの全エラーが訂正される、又は、ページデータの全ての訂正されたコードワードのユーザデータがマージデータ503に追加されるまで、異なるリードオプションでのリードが順次実行される。制御部156は、いずれかのリードオプションにおける1回のリードで、エラーを含まないリードデータ501を得ると、当該データをメモリ154に転送する。または、マージデータ503に全てのコードワードのユーザデータが含まれると、制御部156は、マージデータ503をメモリ154に転送する。
図14は、図13を参照して説明した処理のフローチャートを示す。つまり、プロセッサ153からのリードコマンドに応じた、フラッシュメモリコントローラ155の処理のフローチャートを示す。本フローにおいて、制御部156は、異なるリードオプションでエラー訂正されたコードワードのユーザデータをマージすることによって、エラーを含まない正しいページデータを形成する。
ステップS140〜S145は、図9におけるステップS120〜125と同様である。本フローにおいても、一回のリードによって全てのコードワードを訂正できた場合、当該訂正されたページデータがメモリ154に転送される。
ステップS144において、ECC演算回路159からのECC訂正成否情報505が、フラッシュメモリチップ161からリードしたページデータがエラー訂正不能なコードワードを含むことを示す場合(S144:NO)、制御部156は、リードデータ501内のエラー訂正されたコードワードのユーザデータとマージデータ503とをマージする(S146)。
つまり、制御部156は、エラー訂正されたコードワードであって、マージデータ503に格納されていないコードワードのユーザデータを、マージデータ503に追加する。または、制御部156は、エラー訂正された全てのコードワードのユーザデータを、マージデータ503に追加する。1回目のリードにおいては、エラー訂正が成功した全コードワードのユーザデータから、マージデータ503が生成される。
制御部156は、ECC訂正管理情報507において、マージデータ503に追加したコードワードの情報を更新する(S147)。1回目のリードにおいて、制御部156は、ECC訂正管理情報507を生成した後に更新する。
制御部156は、ECC訂正管理情報507を参照し、ページデータの全コードワードが訂正され、マージデータ503に含まれているか判定する(S148)。全てのコードワードのユーザデータがマージデータ503に含まれている場合(S148:YES)、制御部156は、リードの正常終了通知とマージデータ503を送信する。
いずれかのコードワードのユーザデータがマージデータ503に含まれていない場合(S148:NO)、制御部156はステップS149に進む。ステップS149、S150、S151は、ステップS126、S127、S128と同様である。
上述のように、異なるリードオプションでエラー訂正されたコードワードのユーザデータをマージしてページデータを生成することで、リードエラーの蓋然性を低減することができる。フラッシュメモリコントローラ155がマージ処理を実行することで、プロセッサ153が関わる処理と比較してオーバーヘッドを低減できる。
上記例と異なり、フラッシュメモリコントローラ155に代わり、プロセッサ153が、訂正されたコードワードのユーザデータをマージしてもよい。フラッシュメモリコントローラ155にマージ機能を実装するよりも容易に、SSD134において、マージ機能を設計、実装することができる。
図15は、プロセッサ153がコードワードのユーザデータをマージする例を示す。プロセッサ153は、ストレージコントローラ120からのリード要求に対応するリードコマンドを生成し、フラッシュメモリコントローラ155に発行する。リードコマンドは、リードパターンを指定する。
フラッシュメモリコントローラ155は、選択したリードオプションにおいて、フラッシュメモリチップ161からデータを読み出し、エラー訂正を実行した後、メモリ154に転送する。転送されたデータは、リードデータ領域521に格納される。フラッシュメモリコントローラ155は、ECC訂正成否情報505によって、ECC訂正管理情報507を更新する。ECC訂正成否情報505の生成及びECC訂正管理情報507の更新は、図13及び14を参照して説明した構成と同様である。
フラッシュメモリコントローラ155は、ECC訂正成否情報505をプロセッサ153に送信する。プロセッサ153は、ECC訂正成否情報505を、ECC訂正成否管理情報523に追加する。
フラッシュメモリコントローラ155は、リードパターンに従って、異なるリードオプションにおけるフラッシュメモリチップ161からのリードを繰り返す。上述のように、ECC訂正管理情報507が更新され、訂正されたリードデータがリードデータ領域521に格納され、ECC訂正成否情報505がECC訂正成否管理情報523に追加される。
ECC訂正管理情報507が、全てのコードワードがエラー訂正されたことを示すと、フラッシュメモリコントローラ155は、リードの正常終了をプロセッサ153に通知する。全てのコードワードは、1回のリード又は複数回のリードによってエラー訂正され得る。
プロセッサ153は、ECC訂正成否管理情報523を参照し、リードデータ領域521に格納されているエラー訂正されたコードワードのユーザデータをマージし、マージデータ525を生成する。マージデータ525は、エラーを含まない正しいページデータである。プロセッサ153は、マージデータ525をストレージコントローラ120に転送する。なお、1回のリードで全てのコードワードがエラー訂正されている場合、マージは不要である。
図16は、プロセッサ153がコードワードのユーザデータをマージする他の例を示す。図15の例において、フラッシュメモリコントローラ155は、リードパターンに従ってリトライリードを繰り返し、全コードワードがエラー訂正されたか否か判定する。
本例において、プロセッサ153は、リードコマンドにおいて、リードパターンに代えて、リードオプションを指定する。フラッシュメモリコントローラ155は、指定されたリードオプションにおいて、フラッシュメモリチップ161からデータを読み出し、エラー訂正を実行した後、メモリ154に転送する。転送されたデータは、リードデータ領域521に格納される。本例において、フラッシュメモリコントローラ155は、リードパターンを保持せず、参照しない。
フラッシュメモリコントローラ155は、ECC訂正成否情報505をプロセッサ153に送信する。プロセッサ153は、ECC訂正成否情報505を、ECC訂正成否管理情報523に追加する。プロセッサ153は、ECC訂正成否管理情報523をマージして、ECC訂正成否情報527を生成する。
ECC訂正成否情報527が、全てのコードワードが訂正されていることを示す場合、プロセッサ153は、ECC訂正成否管理情報523を参照し、リードデータ領域521に格納されているエラー訂正されたコードワードのユーザデータをマージし、マージデータ525を生成する。マージデータ525は、エラーを含まない正しいページデータである。プロセッサ153は、マージデータ525をストレージコントローラ120に転送する。なお、1回のリードで全てのコードワードがエラー訂正されている場合、マージは不要である。
上述のように、プロセッサ153が訂正されたコードワードのユーザデータをマージすることで、当該機能をフラッシュメモリコントローラ155に実装する必要がなく、容易に設計変更を行うことができる。
図17は、リード要求に応じたリードパターンの選択を模式的に示す。プロセッサ153により実行されるマイクロプログラム611は、劣化度管理テーブル230を参照し、リード要求によって指定されたブロックで使用するリードパターンのリードパターン番号を取得する。マイクロプログラム611は、リードパターン管理テーブル290を参照し、取得したリードパターン番号に対応するリードパターンレジスタ番号を取得する。
マイクロプログラム611は、取得したリードパターンレジスタ番号を指定して、リードコマンドをフラッシュメモリコントローラ155に発行する。制御部156は、指定されたリードパターンレジスタ番号のリードパターンレジスタから、格納されているリードパターンを取得し、当該リードパターンに従って、リードリトライにおけるリードオプションを制御する。
図17の例において、制御部156は、7つのリードパターンレジスタを有している。一方、リードパターン構成テーブル250は、20のリードパターンを格納している。効率的なリードを行うためには、多くのリードパターンを用意しておくことが好ましい。一方で、ハードウェアリソース削減の点から、リードパターンレジスタの数は少ないことが好ましい。プロセッサ153は、リードパターンレジスタに格納されるリードパターンを変更することで、上記要求を満たす。
図18は、リードパターンレジスタに格納されるリードパターンの書き換えを模式的に示す。例えば、リードにおいて参照されたリードパターン管理テーブル290が、劣化度管理テーブル230から取得されたリードパターン番号を含まない場合、マイクロプログラム611は、リードパターンレジスタのリードパターンを書き換える。または、後述するように、マイクロプログラム611は、フラッシュメモリチップ161の状態検査の結果に応じて、リードパターンレジスタのリードパターンを書き換える。
マイクロプログラム611は、リードパターン構成テーブル250から、特定のリードパターン番号のリードパターンを取得する。マイクロプログラム611は、リードパターンレジスタ番号を指定して、リードパターンの変更をフラッシュメモリコントローラ155に指示し、リードパターンを送信する。制御部156は、指定されたリードパターンレジスタに、受信した新たなリードパターンを格納する。
図18の例において、リードパターンレジスタ2のリードパターンが書き換えられる。リードパターンレジスタ2は、変更前にリードパターン3を格納しており、リードパターン3が、リードパターン13に書き換えられる。マイクロプログラム611は、リードパターン管理テーブル290において、リードパターンを入れ替えたリードパターンレジスタの情報を更新する。
図19は、フラッシュメモリチップ161の状態検査及び検査結果に応じた劣化度管理テーブル230の更新のフローチャートを示す。フラッシュメモリチップ161の状態検査は、フラッシュメモリチップ161のリード/ライトとは独立して実行され、例えば、定期的に実行される。
プロセッサ153は、リードコマンドを作成し(S161)、フラッシュメモリコントローラ155に発行する(S162)。リードコマンドは、リードオプションと領域とを指定する。リードコマンドの指定領域は、例えば、1ブロックである。指定領域は、劣化度管理テーブル230の管理単位に応じて決められる。指定領域は複数ブロックでもよい。
プロセッサ153は、フラッシュメモリコントローラ155からのリードコマンドに対する処理完終了通知を待つ(S163)。プロセッサ153は、エラー通知を受信した場合、異なるリードオプションを指定して、同一領域へのリードコマンドを発行する。プロセッサ153は、処理終了通知を受信すると(S164)、当該処理終了通知を解析し、ECC演算回路159によるエラー訂正数を取得する。
プロセッサ153は、当該ブロックの劣化度を計算する(S165)。プロセッサは、例えば、現在のチップ温度、リードにおけるECC訂正ビット数、及び最新ライトからの経過時間に基づいて、劣化度を計算する。チップ温度は、不図示のセンサから取得される温度情報により決定される。最新ライトからの経過時間は、劣化度管理テーブル230が示すライト日時から現在時刻までの時間である。なお、フラッシュメモリチップの劣化度は、ブロックの値の平均値を使用して計算できる。
劣化度は、チップ温度、ECC訂正ビット数の増加及び最新ライトからの経過時間それぞれの増加と共に、増加する関数で表わされる。劣化度の関数は、設計に従い予め設定されている。劣化度は、上記値の一部のみ又は他の値を使用して計算されてもよい。劣化度は、ECC訂正ビット数、最新ライトからの経過時間、累積消去回数等のI/O情報(I/O履歴)やチップ温度のような物理状態情報等を使用して計算できる。これらにより、劣化度をより適切に計算できる。
プロセッサ153は、劣化度−リードパターン対応テーブル270を参照し、計算した劣化度に対応するリードパターンを決定する(S166)。プロセッサ153は、今回の検査結果により、劣化度管理テーブル230を更新する(S167)。具体的には、プロセッサ153は、検査したブロックの、ECC訂正ビット数欄、リードオプション欄、FM温度欄、及び使用リードパターン欄を更新する。本フローにより、劣化度管理テーブル230を更新し、適切なリードパターンを選択できる。
図20は、フラッシュメモリコントローラ155が格納するリードパターンの更新のフローチャートを示す。本フローは、図19を参照して説明した劣化度管理テーブル230の更新後に実行される。
プロセッサ153は、劣化度管理テーブル230を参照し、使用リードパターンそれぞれのブロックの数(領域の数)を算出する(S181)。具体的には、プロセッサ153は、劣化度管理テーブル230において、リードパターンそれぞれのエントリ数をカウントする。プロセッサ153は、ブロックの数が最も多い未選択のリードパターン番号を、選択する(S182)。プロセッサ153は、リードパターン構成テーブル250から、上記リードパターン番号のリードパターンを取得する(S183)。
プロセッサ153は、フラッシュメモリコントローラ155のリードパターンレジスタに対して、新たなリードパターンを格納する(S184)。プロセッサ153は、リードパターン管理テーブル290において、新たにリードパターンを格納したリードパターンレジスタの情報を更新する。プロセッサ153は、ステップS182〜S185を、リードパターンレジスタの数だけ繰り返す(S186)。本フローにより、使用される確率が高いリードパターンを予めフラッシュメモリコントローラ155に格納することができる。
なお、本発明は上記実施形態に限定されるものではなく、様々な変形例が含まれる。上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある例の構成の一部を他の例の構成に置き換えることが可能であり、また、ある例の構成に他の例の構成を加えることも可能である。また、各例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実効することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。

Claims (9)

  1. データを格納する、フラッシュメモリチップと、
    外部からのリード要求を解析し、リードコマンドを生成するプロセッサと、
    前記プロセッサから前記リードコマンドを受け付けるフラッシュメモリコントローラと、を含み、
    前記フラッシュメモリコントローラは、
    前記フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持し、
    前記リードコマンドに従って前記フラッシュメモリチップからリードしたデータの、エラー訂正を実行し、
    前記エラー訂正によって前記リードしたデータの全てのエラーを訂正できない場合、前記リードパターンが示す次のリードオプションを前記フラッシュメモリチップに指定して、前記フラッシュメモリチップから前記データをリードする、フラッシュメモリデバイス。
  2. 請求項1に記載のフラッシュメモリデバイスであって、
    前記フラッシュメモリコントローラは、複数のリードパターンを保持し、
    前記プロセッサは、リードパターンを前記フラッシュメモリコントローラに指定し、
    前記フラッシュメモリコントローラは、前記リードコマンドに従った前記フラッシュメモリチップからのリードにおいて前記指定されたリードパターンを参照する、フラッシュメモリデバイス。
  3. 請求項2に記載のフラッシュメモリデバイスであって、
    前記プロセッサは、前記リードコマンドのアクセス先の状態に基づいて前記フラッシュメモリコントローラに指定するリードパターンを決定する、フラッシュメモリデバイス。
  4. 請求項2に記載のフラッシュメモリデバイスであって、
    前記プロセッサは、前記フラッシュメモリコントローラが保持する前記リードパターンを、異なるリードパターンに変更する、フラッシュメモリデバイス。
  5. 請求項4に記載のフラッシュメモリデバイスであって、
    前記プロセッサは、
    前記フラッシュメモリコントローラが保持するリードパターンを管理し、
    前記フラッシュメモリコントローラが前記指定するリードパターンを保持していない場合、前記フラッシュメモリコントローラが保持する前記リードパターンを、前記指定するリードパターンに変更する、フラッシュメモリデバイス。
  6. 請求項4に記載のフラッシュメモリデバイスであって、
    前記プロセッサは、
    複数のリードパターンを保持し、
    前記フラッシュメモリチップの複数の領域それぞれの状態に基づき、前記複数の領域それぞれのリードパターンを決定し、
    前記複数のリードパターンそれぞれに対応する、前記フラッシュメモリチップ内の領域数に基づき、前記フラッシュメモリコントローラに保持させるリードパターンを前記複数のリードパターンから選択する、フラッシュメモリデバイス。
  7. 請求項1に記載のフラッシュメモリデバイスであって、
    前記フラッシュメモリコントローラは、
    前記フラッシュメモリチップからリードしたデータをコードワード毎にエラー訂正し、
    異なるリードオプションによりリードされたデータを保持し、
    前記異なるリードオプションでリードされたデータにおいて訂正されたコードワードのユーザデータをマージして、前記リードコマンドに対応する全訂正されたデータを生成する、フラッシュメモリデバイス。
  8. 請求項1に記載のフラッシュメモリデバイスであって、
    前記フラッシュメモリコントローラは、前記フラッシュメモリチップからリードしたデータをコードワード毎にエラー訂正し、
    前記プロセッサは、異なるオプションでリードされたデータにおいて訂正されたコードワードのユーザデータをマージして、前記リードコマンドに対応するリードデータを生成する、フラッシュメモリデバイス。
  9. 複数のフラッシュメモリデバイスと、
    前記複数のフラッシュメモリデバイスに対して、I/O要求を発行するストレージコントローラと、を含むストレージ装置であって、
    前記複数のフラッシュメモリデバイスのそれぞれは、
    データを格納する、フラッシュメモリチップと、
    外部からのリード要求を解析し、リードコマンドを生成するプロセッサと、
    前記プロセッサが実行するプログラムを格納するメモリと、
    前記プロセッサから前記リードコマンドを受け付けるフラッシュメモリコントローラと、を含み、
    前記フラッシュメモリコントローラは、
    前記フラッシュメモリチップからのリードのためのパラメータ値を指定するリードオプション、の実行順序を示すリードパターンを保持し、
    前記リードコマンドに従って前記フラッシュメモリチップからリードしたデータの、エラー訂正を実行し、
    前記エラー訂正によって前記リードしたデータの全てのエラーを訂正できない場合、前記リードパターンが示す次のリードオプションを前記フラッシュメモリチップに指定して、前記フラッシュメモリチップから前記データをリードする、ストレージ装置。
JP2017524250A 2015-06-19 2015-06-19 フラッシュメモリデバイス Active JP6374108B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/067685 WO2016203631A1 (ja) 2015-06-19 2015-06-19 フラッシュメモリデバイス

Publications (2)

Publication Number Publication Date
JPWO2016203631A1 true JPWO2016203631A1 (ja) 2017-12-28
JP6374108B2 JP6374108B2 (ja) 2018-08-15

Family

ID=57545493

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017524250A Active JP6374108B2 (ja) 2015-06-19 2015-06-19 フラッシュメモリデバイス

Country Status (3)

Country Link
US (1) US10229742B2 (ja)
JP (1) JP6374108B2 (ja)
WO (1) WO2016203631A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108780429B (zh) * 2016-03-31 2022-05-31 英特尔公司 用于高速i/o数据传输的错误处理技术
US10346268B2 (en) * 2016-07-21 2019-07-09 SK Hynix Inc. Efficient data recovery for write path errors
KR102617411B1 (ko) * 2018-08-31 2023-12-26 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
US11023317B2 (en) 2019-07-12 2021-06-01 Micron Technology, Inc. Read recovery control circuitry
JP7438859B2 (ja) 2020-06-17 2024-02-27 キオクシア株式会社 メモリシステムおよび方法
JP7550895B2 (ja) 2023-02-02 2024-09-13 ウィンボンド エレクトロニクス コーポレーション 半導体装置およびウエアレベリング方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100211852A1 (en) * 2009-02-17 2010-08-19 Samsung Electronics Co., Ltd. Method of reading data in non-volatile memory device
JP2011100519A (ja) * 2009-11-06 2011-05-19 Toshiba Corp メモリシステム
JP2012221522A (ja) * 2011-04-06 2012-11-12 Toshiba Corp 不揮発性半導体記憶装置

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040153902A1 (en) * 2003-01-21 2004-08-05 Nexflash Technologies, Inc. Serial flash integrated circuit having error detection and correction
US20040187050A1 (en) * 2003-03-19 2004-09-23 Baumann Robert Christopher Test structure and method for accurate determination of soft error of logic components
KR101601849B1 (ko) * 2009-10-21 2016-03-09 삼성전자주식회사 불휘발성 메모리 장치, 그것의 읽기 방법, 그리고 그것을 포함하는 메모리 시스템
US8661184B2 (en) * 2010-01-27 2014-02-25 Fusion-Io, Inc. Managing non-volatile media
DE102011079259B9 (de) * 2011-07-15 2013-11-28 Infineon Technologies Ag Bitfehlerkorrektur zur Beseitigung von altersbedingten Fehlern in einem Bitmuster
US9299455B2 (en) 2012-03-06 2016-03-29 Hitachi, Ltd. Semiconductor storage device having nonvolatile semiconductor memory
US9176812B1 (en) * 2012-05-22 2015-11-03 Pmc-Sierra, Inc. Systems and methods for storing data in page stripes of a flash drive
US9021336B1 (en) * 2012-05-22 2015-04-28 Pmc-Sierra, Inc. Systems and methods for redundantly storing error correction codes in a flash drive with secondary parity information spread out across each page of a group of pages
US9575125B1 (en) * 2012-10-11 2017-02-21 Everspin Technologies, Inc. Memory device with reduced test time
WO2015061227A1 (en) * 2013-10-21 2015-04-30 Washington State University Performance analysis of power grid monitors
WO2015167480A1 (en) * 2014-04-29 2015-11-05 Hewlett-Packard Development Company, L.P. Hardware assisted software versioning of clustered applications
WO2016036347A1 (en) * 2014-09-02 2016-03-10 Hewlett Packard Enterprise Development Lp Serializing access to fault tolerant memory
US9361991B1 (en) * 2014-12-23 2016-06-07 Sandisk Technologies Inc. Efficient scanning of nonvolatile memory blocks
US9870153B2 (en) * 2014-12-29 2018-01-16 Sandisk Technologies Llc Non-volatile memory systems utilizing storage address tables

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100211852A1 (en) * 2009-02-17 2010-08-19 Samsung Electronics Co., Ltd. Method of reading data in non-volatile memory device
JP2011100519A (ja) * 2009-11-06 2011-05-19 Toshiba Corp メモリシステム
JP2012221522A (ja) * 2011-04-06 2012-11-12 Toshiba Corp 不揮発性半導体記憶装置

Also Published As

Publication number Publication date
JP6374108B2 (ja) 2018-08-15
WO2016203631A1 (ja) 2016-12-22
US20180061498A1 (en) 2018-03-01
US10229742B2 (en) 2019-03-12

Similar Documents

Publication Publication Date Title
JP6374108B2 (ja) フラッシュメモリデバイス
JP6855102B2 (ja) 不揮発性メモリ・システムにおけるマルチページ障害の回復
TWI428737B (zh) 半導體記憶體裝置
JP4901968B2 (ja) 半導体記憶装置
US9910748B2 (en) Rebuilding process for storage array
US7984325B2 (en) Storage control device, data recovery device, and storage system
US7386758B2 (en) Method and apparatus for reconstructing data in object-based storage arrays
US9244766B2 (en) Variable data recovery scheme hierarchy
US8694865B2 (en) Data storage device configured to reduce buffer traffic and related method of operation
US9304685B2 (en) Storage array system and non-transitory recording medium storing control program
US9727244B2 (en) Expanding effective storage capacity of a data storage system while providing support for address mapping recovery
US20080184062A1 (en) System and method for detecting write errors in a storage device
JP2008204041A (ja) ストレージ装置及びデータ配置制御方法
JP2008015769A (ja) ストレージシステム及び書き込み分散方法
KR20220001222A (ko) 베드 블록을 처리하는 메모리 시스템 및 동작 방법
WO2015034901A1 (en) Method and system for migrating data between flash memory devices
US20130346829A1 (en) Flash memory device and storage control method
JP2016143085A (ja) 装置及び方法
JP2006139478A (ja) ディスクアレイシステム
JPWO2015029230A1 (ja) 記憶装置及びデータ制御方法
JP2010055210A (ja) ストレージシステム及びデータ保証方法
KR20210121654A (ko) 메모리 시스템의 데이터 에러를 복구하는 장치 및 방법
JP5579431B2 (ja) ソリッド・ステート・ドライブ装置および平準化管理情報の退避・回復方法
WO2018185800A1 (ja) ストレージ装置
WO2020028801A1 (en) Error correction with scatter-gather list data management

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170822

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180605

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180619

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180626

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180718

R150 Certificate of patent or registration of utility model

Ref document number: 6374108

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150