JP2018073312A - メモリシステムおよび制御方法 - Google Patents

メモリシステムおよび制御方法 Download PDF

Info

Publication number
JP2018073312A
JP2018073312A JP2016215831A JP2016215831A JP2018073312A JP 2018073312 A JP2018073312 A JP 2018073312A JP 2016215831 A JP2016215831 A JP 2016215831A JP 2016215831 A JP2016215831 A JP 2016215831A JP 2018073312 A JP2018073312 A JP 2018073312A
Authority
JP
Japan
Prior art keywords
parity
area
host
data
controller
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
JP2016215831A
Other languages
English (en)
Inventor
石山 政浩
Masahiro Ishiyama
政浩 石山
滋博 浅野
Shigehiro Asano
滋博 浅野
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.)
Kioxia Corp
Original Assignee
Toshiba Memory 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 Memory Corp filed Critical Toshiba Memory Corp
Priority to JP2016215831A priority Critical patent/JP2018073312A/ja
Priority to US15/802,331 priority patent/US10528464B2/en
Publication of JP2018073312A publication Critical patent/JP2018073312A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • 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
    • 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
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD
    • 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
    • G06F3/0611Improving I/O performance in relation to response time
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/26Using a specific storage system architecture
    • G06F2212/261Storage comprising a plurality of storage devices
    • G06F2212/262Storage comprising a plurality of storage devices configured as RAID
    • 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/7207Details relating to flash memory management management of metadata or control 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/7208Multiple device management, e.g. distributing data over multiple flash devices

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)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

【課題】書き込み動作を実行中のダイへのリード要求の発生に対する耐性を改善することができるメモリシステムを実現する。
【解決手段】実施形態によれば、メモリシステムは、不揮発性メモリ内の第1領域に対応するデータ数およびパリティ数を示すkおよびmの組と、不揮発性メモリ内の第2領域に対応するデータ数およびパリティ数を示すk’およびm’の組とを管理する。前記メモリシステムは、第1領域に対する書き込み要求に基づいて、k個のデータ部とm個のパリティとを、k+m個の異なるダイから一つずつ選出されるk+m個の物理ブロックに書き込み、第2領域に対する書き込み要求に基づいて、k’個のデータ部とm’個のパリティとを、k’+m’個の異なるダイから一つずつ選出されるk’+m’個の物理ブロックに書き込む。
【選択図】図4

Description

本発明の実施形態は、不揮発性メモリを備えるメモリシステムに関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
SSDに搭載されるNAND型フラッシュメモリは、複数のNAND型フラッシュメモリダイから構成されるのが一般的である。これらダイは並列に動作することができる。
しかし、一つのダイに対する処理(書き込み動作、読み出し動作、等)は並列には実行されず、逐次的に実行される。このため、例えば、データ書き込み動作中のダイへのリード要求が発生した場合には(以下、ダイ衝突という)、そのリード要求の応答時間(リードレイテンシ)は通常のリードレイテンシよりも非常に長くなる場合がある。
米国特許出願公開第2013/0019057号明細書
I. S. Reed 外著, "Polynomial Codes Over Certain Finite Fields", Journal of the Society for Industrial and Applied Mathematics, Vol. 8, No. 2 (1960年6月), p. 300-304 Maheswaran Sathiamoorthy外著, "XORing Elephants: Novel Erasure Codes for Big Data", Proceedings of the VLDB Endowment, Vol. 6, No. 5, 2013年3月, p. 325-336
したがって、SSDの性能を改善するためには、書き込み動作を実行中のダイへのリード要求が発生するというダイ衝突に対する耐性を改善するための新たな技術の実現が必要とされる。
本発明が解決しようとする課題は、書き込み動作を実行中のダイへのリード要求の発生に対する耐性を改善することができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、RAIDの一つのパリティグループを構成するデータ部の数およびパリティの数を前記不揮発性メモリ内の領域毎に指定する前記ホストからの要求に基づいて、前記不揮発性メモリ内の第1領域に対応するデータ数およびパリティ数を示すkおよびmの組と、前記kおよびmの組みと異なるk’およびm’の組であって、前記不揮発性メモリ内の第2領域に対応するデータ数およびパリティ数を示すk’およびm’の組とを管理する。前記コントローラは、前記第1領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるk個のデータ部と、前記k個のデータ部から算出されるm個のパリティとを、前記複数の不揮発性メモリダイ内のk+m個の異なる不揮発性メモリダイから一つずつ選出されるk+m個の物理ブロックに跨がって書き込む。前記コントローラは、前記第2領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるk’個のデータ部と、前記k’個のデータ部から算出されるm’個のパリティとを、前記複数の不揮発性メモリダイ内のk’+m’個の異なる不揮発性メモリダイから一つずつ選出されるk’+m’個の物理ブロックに跨がって書き込む。
実施形態に係るメモリシステムの構成例を示すブロック図。 同実施形態のメモリシステム内のNANDインタフェースと複数のNAND型フラッシュメモリダイとの関係を示すブロック図。 書き込み動作を実行中のダイへのリード要求が発生するというダイ衝突の例を示す図。 同実施形態のメモリシステムによって領域毎に管理および制御されるRAID構成の例を示す図。 図同実施形態のメモリシステムによって管理される領域管理テーブルを示す図。 同実施形態のメモリシステムによって管理されるNAND構造情報を示す図。 同実施形態のメモリシステムによって管理される仮想ブロック管理テーブルを示す図。 ある仮想ブロックに割り当てられる、データ用の物理ブロックの集合およびパリティ用の物理ブロックの集合の例を示す図。 同実施形態のメモリシステムによって実行される仮想ブロックアクセス動作を説明するための図。 同実施形態のメモリシステムによって管理される領域管理テーブルの例を示す図。 同実施形態のメモリシステムによって管理される仮想ブロック管理テーブルの例を示す図。 同実施形態のメモリシステムによって複数の物理ブロックに分散して書き込まれるデータ部の集合とパリティの集合とを説明するための図。 一つの仮想ブロックに割り当てられる複数の物理ブロックが異なるダイから一つずつ選出される様子を示す図。 同実施形態のメモリシステムによって実行される仮想ブロックアクセス動作を説明するための図。 同実施形態のメモリシステムによって管理される複数の領域とリードレイテンシ/容量効率との関係を示す図。 同実施形態のメモリシステムによって実行される領域宣言処理および書き込み処理の処理シーケンスを示す図。 同実施形態のメモリシステムによって実行されるRAIDリード処理の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるパリティ削除処理を説明するための図。 図18のパリティ削除処理時に同実施形態のメモリシステムによって実行される仮想ブロック管理テーブルの更新処理を示す図。 同実施形態のメモリシステムによって実行されるパリティ削除処理の手順を示すフローチャート。 同実施形態のメモリシステム内のDRAM上のパリティキャッシュにパリティをキャッシュする処理を説明するための図。 図21のパリティキャッシュのエントリの構成例を示す図。 同実施形態のメモリシステムによって実行されるパリティ削除およびキャッシュフィル処理の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるパリティ削除およびキャッシュフィル処理の別の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるパリティ削除順変更処理を説明するための図。 削除されたパリティを同実施形態のメモリシステムからホストに通知する処理を説明するための図。 同実施形態のメモリシステムからホストに対して削除されたパリティを通知する処理を説明するための図。 同実施形態のメモリシステムによって実行されるパリティ削除およびパリティ通知処理の手順を示すフローチャート。 同実施形態のメモリシステムによって実行されるパリティ削除およびパリティ通知処理の別の手順を示すフローチャート。 ホストによって実行されるリード要求送信処理の手順を示すフローチャート。 ホストによって実行されるパリティ保護処理の手順を示すフローチャート。 同実施形態のメモリシステムによって実行される書き込みスロットリング処理を説明するための図。 同実施形態のメモリシステムに適用可能な二次元パリティの例を示す図。 ホストの構成例を示すブロック図。 ホストと同実施形態のメモリシステムとを含むコンピュータの構成例を示す図。
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、一実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NAND型フラッシュメモリを備えたソリッドステートドライブ(SSD)3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、SSD3をアクセスする情報処理装置(コンピューティングデバイス)である。ホスト2は、大量且つ多様なデータをSSD3に保存するストレージサーバ(サーバ)であってもよいし、パーソナルコンピュータであってもよい。
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等を使用し得る。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。NAND型フラッシュメモリ5は、メモリセルアレイを含む。このメモリセルアレイは、多数の物理ブロックB0〜Bm−1を含む。物理ブロックB0〜Bm−1は、消去単位として機能する。物理ブロックは「消去ブロック」、または単に「物理消去ブロック」と称されることもある。
物理ブロックB0〜Bm−1は多数のページ(物理ページ)を含む。つまり、物理ブロックB0〜Bm−1の各々は、ページP0〜Pn−1を含む。NAND型フラッシュメモリ5においては、データのリードおよびデータのライトはページ単位で実行される。データを消去するための消去動作は物理ブロック(消去ブロック)単位で実行される。
コントローラ4は、Toggle、ONFIのようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。
NAND型フラッシュメモリ5は、図2に示すように、複数のNAND型フラッシュメモリダイ(不揮発性メモリダイ)を含む。個々のダイは独立して動作可能である。このため、ダイは、並列動作可能な最小単位として機能する。なお、ダイは、書き込み動作、読み出し等の動作を互いに独立して実行可能な並列動作単位として機能すればよいので、例えば、一つのダイに含まれる複数のプレーンが書き込み動作、読み出し等の動作を互いに独立して実行可能であれば、これらプレーンをダイ(並列動作単位)として転用可能である。
各NAND型フラッシュメモリダイは、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。このメモリセルアレイは、複数の物理ブロックによって編成される。各物理ブロックは多数のページによって編成される。図2においては、NANDインタフェース13に8個のチャンネル(Ch.1〜Ch.8)が接続されており、8個のチャンネル(Ch.1〜Ch.8)の各々に4つのNAND型フラッシュメモリダイが接続されている場合が例示されている。各チャンネルは、対応するNAND型フラッシュメモリダイと通信するための通信線(メモリバス)を含む。コントローラ4の制御の下、NANDインタフェース13は、8個のチャンネル(Ch.1〜Ch.8)を介して32個のNAND型フラッシュメモリダイをアクセスすることができる。なお、SSD3に搭載されるNAND型フラッシュメモリダイの数は32個に限定されず、任意の数のNAND型フラッシュメモリダイがSSD3に搭載され得る。また、チャンネルの数も8個に限定されず、任意の数のチャンネルが使用され得る。
ところで、近年、SSDなどに代表される高速なストレージデバイスに対する読み込み応答性能への要求が高まっている。特に、テールレイテンシ(tail latency)と呼ばれる、アクセス要求に対する応答時間(レイテンシ)の平均値に対して極端に遅くなるような応答が問題となることがあるとされており、特にリード要求に対する応答時間(リードレイテンシ)の予測性を高めることが求められる。
リードレイテンシが変動する要因の一つとして、NANDフラッシュメモリへのアクセスの衝突がある。一つのNAND型フラッシュメモリダイ(単にダイともいう)に対する処理(書き込み動作、読み出し動作、消去動作)は並列化されず、逐次的に処理される。すなわち、ダイは並列実行の単位であり、多くのダイがあれば、チャンネルの帯域の制限はあるが、ダイの数と同数の処理を並列に行うことができる。
一般的に、NAND型フラッシュメモリへの書き込み動作には読み出し動作に対してより長い時間がかかる。よって、書き込み動作中のダイに対してリード要求が発生した場合(ダイ衝突(die collision))、そのリード要求に対するレイテンシは通常よりも非常に長くなり、これがリードレイテンシ変動の一因となる。
また、NAND型フラッシュメモリにおいては、消去状態の物理ブロックにのみ書き込みが可能となる。このため、最初の書き込みの前に物理ブロック単位で消去処理を行わなければならない。この消去処理を行っているダイに対してリード要求が発生した場合(ダイ衝突)も、そのリードのレイテンシは通常よりも非常に長くなる。
ホストからSSDへの書き込みにおいて、データが書き込まれるべき記憶位置は、通常、論理ブロックアドレス(LBA)と称される論理アドレスで指示される。
一方、どのLBAがどのダイのどのブロックに割り当てられるかは、通常、SSD内部で隠蔽されるためホストが知ることはできない。
よって、ホストが書き込みを行った場合、どのダイが書き込み動作中になっているかをホストは知ることができない。このため、ホストはどの要求がダイ衝突を招くかを知ることができない。
ダイ衝突は一種の障害としてとらえることができる。この障害は、複数のデータ部(データブロック)をグループ化し、このデータグループにパリティを与えることで解決することができる。これは、RAIDなどで使用されている技術である。
あるデータグループにパリティが付加されている場合、このデータグループ内の一部のデータ部を読むことが出来ない場合であっても、このデータグループ内の他のデータ部それぞれとパリティとを使用して、この読むことが出来ないデータ部分を復元することが可能である。
本実施形態では、SSD3は、SSD3に書き込まれるデータグループ毎にこのデータグループの複数のデータ部からパリティを算出し、このデータグループ内の複数のデータ部とパリティとを異なるNAND型フラッシュメモリダイに跨がって書き込む。このように、SSD3内部でデータグループ毎にパリティを保持することで、ダイ衝突を避けることが可能となる。
例えば、図3に示すような状況を考える。
図3では、4つのダイd1、d2、d3、d4によって一つのRAIDグループが実現されている。ダイd1、d2、d3、およびd4には、データD1、D2、D3、およびパリティP1が格納されている。データD1、D2、D3、およびパリティP1は、パリティグループと称される。
いま、ダイd2が書き込み動作を実行中である場合を考える。このとき、ホスト2からダイd2に対するリード要求が到来したとする。ダイd2のデータD2を読むためには、ダイd2が処理している書き込み動作が完了することを待つ必要がある。
そこで、SSD3は、ダイd2のデータD2を読まずに、他のダイd1、d3、d4からデータD1、データD3、パリティP1を読む。そして、SSD3は、これらデータD1、データD3、パリティP1からデータD2を復元し、復元されたデータD2をホスト2に返す。これにより、ダイ衝突に対する耐性を高めることができる。
以下、一つのパリティグループに含まれる実データ数をk、パリティ数をmで表す。例えば、前述のD1、D2、D3に対して1つのパリティP1が付与されている場合、kは3であり、mは1である。原理的には、k及びmは1以上の整数となるが、典型例では、kは2以上の整数、mは1以上の整数となる。
k個のデータ部とm個のパリティとを含む、k+mの構成を有するパリティグループにおいては、最大でm個までのデータ部の消失に耐えることができる。つまり、あるパリティグループ内において、m個までの同時のダイ衝突を回避することが可能である。
前例では、ダイd2に対するダイ衝突を回避する例を示したが、例えば、もしダイd2とダイd3の各々が書き込み動作を行っている場合には、ダイ衝突数がm(ここでは1)を超えるために、リード要求されたデータD1を復元することはできない。
なお、通常のRAIDにおいては、RAID6のように、mが2までとなるのが通例であるが、例えば、リードソロモン(Reed Solomon)のような消失訂正符号を用いれば、2より大きい任意のmを使用することができる。
ところで、パリティを用いたダイ衝突の回避には、容量効率の問題がある。
すなわち、ダイ衝突が起きた場合には、可能な限り少ない数のデータ部を読むことで、ダイ衝突が起きたダイ内の目的のデータを復元させたい。このためには、kを小さくする必要がある。しかし、k+mの一つのパリティグループにおいては、ユーザが使用可能なデータ数はkであり、SSDが必要とする記憶領域はk+mとなる。すなわち、ユーザが使用できる容量は、SSDの容量 × (k/(k+m))となる。よって、kが小さければ小さいほど、リードレイテンシは短くなるが、容量効率は悪くなる問題がある。また、mが大きければ大きいほど、ダイ衝突に対する耐性が高まる。しかし、mが大ければ大きいほど容量効率は悪くなる。
そこで、本実施形態に係るSSD3は、ホスト2がkとmの任意の組み合わせをSSD3内の領域毎に指定することを可能とし、これによって容量効率/ダイ衝突耐性に関して異なる特性を有する複数の領域(パリティを用いたダイ衝突回避読み込み可能領域)をSSD3内に共存させるための機能を有している。この機能は、以下、RAID読み込み可能領域制御機能と称する。パリティを用いたダイ衝突回避読み込み可能領域は、k+mのRAID構成が適用された記憶領域を意味する。以後、パリティを用いたダイ衝突回避読み込み可能領域は、RAID読み込み可能領域とも称する。
ホスト2は、一台のSSD3に対して任意のk+mを動的に宣言し、複数のk+mの構成を選択して使用することができる。これにより、ダイ衝突を気にしない、つまりリード要求に対するテールレイテンシがあまり問題とならないようなデータについては容量効率を優先し、そうでないデータについては容量効率を犠牲にしてリードレイテンシをできるだけ短くするということが1台のSSD3で実現可能となる。
また、RAID読み込み可能領域制御機能は、NAND型フラッシュメモリ5の空き容量を積極的に活用してパリティの数mを動的に制御することもできる。
この場合、ホスト2は、あるkに対して最良でmが3、最悪でmが1、のようにmの範囲(つまり最小のmと最大のm)を指定してもよい。SSD3は、例えば、NAND型フラッシュメモリ5の空き容量に余裕があれば、k=7、m=3の組み合わせ、つまり7+3のRAID構成を採用してもよい。そして、空き容量が低下するにつれて、SSD3は、NAND型フラッシュメモリ5からパリティを削除することによって、mの数を順次減らす。例えば、最初は、7+3のRAID構成が採用されてもよく、後に、RAID構成は、7+2の構成に変更されてもよい。さらに後に、RAID構成は、7+1の構成に変更されてもよく、さらに後に、7+0の構成に変更されてもよい。
このように、パリティグループ内のmの数を減らすことによって、つまりNAND型フラッシュメモリ5に既に格納されたパリティを削除することによって、NAND型フラッシュメモリ5の空き容量を増やすことができる。
また、SSD3は、SSD3内のランダムアクセスメモリ(例えば、DRAM6)にパリティを書き込むこともできる。
この場合、SSD3は、NAND型フラッシュメモリ5から削除されるパリティを、DRAM6内のパリティキャッシュに保存してもよい。パリティキャッシュは、パリティをキャッシュとして格納するためのDRAM6上の記憶エリアである。パリティキャッシュにパリティを何時保存するかは限定されないが、例えば、NAND型フラッシュメモリ5からパリティを削除する時であってもよいし、削除されたパリティを含むパリティグループにおいてダイ衝突が起きた時であってもよい。
一度リードが要求されたデータは再びリードされる可能性が高い。このため、削除されたパリティを含むパリティグループにおいてダイ衝突が起きたならば、SSD3は、このパリティグループの他のデータ部および残りのパリティを使用してこのデータ部を復元するだけでなく、削除されたパリティを再算出し、再算出されたパリティをDRAM6のパリティキャッシュに保存してもよい。これにより、NAND型フラッシュメモリ5に格納されるパリティの数を増やすこと無く、このパリティグループのパリティ数mを増加させることができる。つまり、このパリティグループのダイ衝突の耐性を高めることができる。
例えば、リード要求によって指定されたリード対象のデータ部が格納されているダイが書き込み処理を実行中であるならば、SSD3は、削除されたパリティおよびリード対象のデータ部を除くこのパリティグループ内の全てのデータ部および全てのパリティをNAND型フラッシュメモリ5から読み出し、読み出されたこのパリティグループのデータ部および全てのパリティを使用してリード対象のデータ部を復元する(RAID読み込み)。さらに、SSD3は、復元されたリード対象のデータ部と読み出されたパリティグループ内のデータ部とを使用して、削除されたパリティを再算出し、再算出されたパリティをDRAM6のパリティキャッシュに保存してもよい。
また、SSD3は、リード対象領域を予告する通知(ヒント)をホスト2から受信し、この通知(ヒント)に基づいて、このリード対象領域のパリティをNAND型フラッシュメモリ5またはキャッシュエリアに優先的に残すことができる。
ホスト2は、リード対象領域を予告する通知をSSD3に送信する。リード対象領域は、後続のリード要求によって指定される可能性が高い領域である。ホスト2は、RAID読み込み可能領域の一つをリード対象領域として通知してもよいし、一つのRAID読み込み可能領域内の一部分をリード対象領域として通知してもよい。
リード対象領域は、論理アドレス範囲によって指定されてもよい。あるいは、複数のRAID読み込み可能領域にそれぞれ領域識別子が割り当てられている場合には、リード対象領域は、領域識別子によって指定されてもよい。あるいは、一つのRAID読み込み可能領域が一つ以上の仮想ブロックから構成されるケースにおいては、リード対象領域は、領域識別子と仮想ブロック番号とによって指定されてもよい。仮想ブロック番号は、あるRAID読み込み可能領域の中で一意となる番号(識別子)である。仮想ブロックは、複数の物理ブロックの纏まりを示す。
あるRAID読み込み可能領域をリード対象領域として指定するヒントをホスト2から受信した場合、ホスト2は、このRAID読み込み可能領域のパリティをNAND型フラッシュメモリ5またはキャッシュエリアに優先的に残すための処理を実行してもよい。また、あるRAID読み込み可能領域内のある仮想ブロック番号をリード対象領域として指定するヒントをホスト2から受信した場合、ホスト2は、このRAID読み込み可能領域の仮想ブロックに割り当てられている物理ブロック集合に格納されているパリティを、NAND型フラッシュメモリ5またはキャッシュエリアに優先的に残すための処理を実行してもよい。
例えば、ホスト2においてデータベースソフトウェアが実行されている場合、データベースソフトウェアは、インデックスデータを参照することによって、目的のデータの格納位置を特定する。したがって、インデックスデータ内のあるインデックス部分が参照されたならば、この参照されたインデックス部分から、これからリードが要求される可能性が高い領域を予測することができる。ホスト2は、この予測された領域を示すリード対象領域をヒントとしてSSD3に通知することができる。
この通知を受信した場合、SSD3は、NAND型フラッシュメモリ5の複数の領域(RAID読み込み領域)の内、このリード対象領域をNAND型フラッシュメモリ5またはキャッシュエリアに優先的に残すための処理を実行してもよい。例えば、ある仮想ブロック番号がリード対象領域として指定された場合には、この仮想ブロック番号に関連付けられた各パリティグループのパリティをNAND型フラッシュメモリ5またはキャッシュエリアに優先的に残すための処理を実行してもよい。
あるいは、SSD3は、例えばSSD3がアイドル状態の期間などにおいて、このリード対象領域に属する各パリティグループのパリティを再算出する処理を積極的に実行し、再算出されたパリティをキャッシュエリアに保存してもよい。
また、SSD3は、パリティを算出(または再算出)する度に、この算出(または再算出)されたパリティとこのパリティが属するパリティグループの識別子とをホスト2に通知してもよい。
ホスト2は、SSD3から通知されたパリティとパリティグループの識別子とをホスト2のランダムアクセスメモリ(DRAM)上のパリティキャッシュに保存してもよい。ホスト2は、いまからリードしようとするデータの位置に対するパリティがホスト2のパリティキャッシュに存在する場合には、このパリティを含むリード要求をSSD3に送信してもよい。
あるいは、SSD3は、SSD3のDRAM6上のパリティキャッシュからパリティを削除(追い出し)する場合、この削除(追い出し)対象のパリティとこの削除(追い出し)対象のパリティが属するパリティグループの識別子とをホスト2に通知してもよい。ホスト2は、SSD3から通知されたパリティとパリティグループの識別子とをホスト2のランダムアクセスメモリ(DRAM)上のパリティキャッシュに保存する。ホスト2は、いまからリードしようとするデータの位置に対するパリティがホスト2のパリティキャッシュに存在する場合には、このパリティを含むリード要求をSSD3に送信してもよい。通常、ホスト2のパリティキャッシュのサイズは、SSD3のパリティキャッシュのサイズよりも大きい。したがって、SSD3のパリティキャッシュから削除されるパリティをホスト2に通知することにより、このパリティを消失させることなく有効に活用することができる。
また、SSD3は、ある任意の時刻において書き込みあるいは消去の処理が行われているダイの数を制限してもよい。具体的には、SSD3は、ホスト2から受信された書き込み要求それぞれの実行タイミングをスケジューリングすることによって、あるRAID読み込み可能領域に割り当てられている複数のダイに対して同時に実行される書き込み動作の数をこのRAID読み込み可能領域のパリティ数m以下に制限する。これにより、このRAID読み込み可能領域において同時に発生する可能性があるダイ衝突の数を、このRAID読み込み可能領域のm個のパリティによって回避可能なダイ衝突の数以下にすることができる。
また、SSD3は、例えば、XORパリティ、RAID6におけるPパリティ/Qパリティ(P+Q)、リードソロモン(Reed Solomon)のような複数種のパリティを算出する能力を有していてもよい。さらに、SSD3は、LRC(Local Reconstruction Codes)をパリティとして使用してもよいし、さらに、1次元のパリティ構成のみならず、2次元のパリティ構成を使用してもよい。
ホスト2は、SSD3に対して任意のk+mを動的に宣言するだけではなく、ホスト2のワークロード等を踏まえて、使用すべきパリティ算出方法(XORパリティ、Pパリティ/Qパリティ(P+Q)、リードソロモン(Reed Solomon)等)についても宣言してもよい。また同様に、ホスト2は、SSD3に対して任意のk+mを動的に宣言するだけではなく、ホスト2のワークロード等を踏まえて、使用すべきパリティの構成(1次元パリティ、2次元パリティ、LRC(Local Reconstruction Codes)、等)についても宣言してもよい。
次に、図1のコントローラ4の構成について説明する。
コントローラ4は、複数のチャンネル(例えば8個のチャンネル)を介して複数のNAND型フラッシュメモリダイに電気的に接続される。コントローラ4は、NAND型フラッシュメモリ5(複数のNAND型フラッシュメモリダイ)を制御する。
SSD3は、論理ブロックアドレス(LBA)のような論理アドレスを使用してデータをランダムアクセスすることを前提としたタイプのSSD(以下、コンベンショナルSSDと云う)として実現されていてもよいし、ホスト2からの連続データを仮想ブロックと称される物理ブロック集合にシーケンシャルに書き込むことを前提としたタイプのSSD(以下、非コンベンショナルSSDと云う)として実現されていてもよい。
SSD3がコンベンショナルSSDとして実現されている場合においては、コントローラ4は、NAND型フラッシュメモリ5のデータ管理を実行することができるように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLは、ホスト2が、論理ブロックアドレス(LBA)のような論理アドレスを使用してSSD3をアクセスするケースにおいて使用される。
このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス(LBA)が使用される。以下では、主に、論理アドレスが論理ブロックアドレス(LBA)である場合を想定する。
論理ブロックアドレス(LBA)それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)32を用いて実行される。コントローラ4は、ルックアップテーブル(LUT)32を使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。管理サイズ単位は、限定されないが、例えば、4KBであってもよい。アドレス変換テーブル(LUT32)は、SSD3の電源オン時にNANDフラッシュメモリ5からDRAM6にロードされてもよい。
あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNANDフラッシュメモリ5内の物理記憶位置を示す。物理アドレスは、例えば、ダイ番号と物理ブロック番号とページ番号等とによって表現されてもよい。
SSD3が非コンベンショナルSSDとして実現されている場合においては、コントローラ4は、LBAではなく、ホスト2から受信される別のタイプのSSDアドレス(例えば、領域識別子、仮想ブロック番号、仮想ブロック内ページ番号)に基づいて、NAND型フラッシュメモリ5を制御してもよい。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14等を含んでもよい。これらCPU12、NANDインタフェース13、DRAMインタフェース14は、バス10を介して相互接続されていてもよい。
ホストインタフェース11は、ホスト2から様々なコマンド(例えば、ライトコマンド、リードコマンド、イレーズコマンド、アンマップ(UNMAP)/トリム(Trim)コマンド、等)を受信する。
CPU12は、ホストインタフェース11、NANDインタフェース13、およびDRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答して、図示しないROMまたはNAND型フラッシュメモリ5に格納されている制御プログラム(ファームウェア)をDRAM6上にロードして所定の処理を実行する。このCPU12は、例えば、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行されるファームウェアによって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、ライト動作制御部21、リード動作制御部22、RAID読み込み可能領域制御部23として機能することができる。
ライト動作制御部21は、ホスト2からの書き込み要求(ライトコマンド)の受信に応答して、書き込みデータ(ライトデータ)をホスト2から受信する。そして、ライト動作制御部21は、ライトデータを、NAND型フラッシュメモリ5に書き込む。リード動作制御部22は、ホスト2からの読み出し要求(リードコマンド)の受信に応答して、リードコマンドによって指定されるデータをNAND型フラッシュメモリ5から読み出す。そして、リード動作制御部22は、読み出されたデータをホスト2に返す。
RAID読み込み可能領域制御部23は、上述のRAID読み込み可能領域制御機能を実行する。
RAID読み込み可能領域制御部23は、RAIDの一つのパリティグループを構成するデータ部の数およびパリティの数をNAND型フラッシュメモリ5内の論理的な領域(RAID読み込み可能領域)毎に指定するホスト2からの要求を受け付ける。そして、RAID読み込み可能領域制御部23は、RAID読み込み可能領域毎に、その領域に対応するデータ数およびパリティ数を示すk,mの組を、その領域のRAID構成を示すパラメータとして管理する。いま、RAID読み込み可能領域制御部23が、NAND型フラッシュメモリ5内の論理的な領域#1(あるRAID読み込み可能領域)に対応するデータ数およびパリティ数を示すk,mの組と、NAND型フラッシュメモリ5内の論理的な別の領域#n(別のRAID読み込み可能領域)に対応するデータ数およびパリティ数を示すk’,m’の組とを管理しているものとする。k’,m’の組は、k,mの組と異なるものである。
この場合、領域#1に対するホスト2からの書き込み要求(ライトコマンド)に基づいて、RAID読み込み可能領域制御部23は、ホスト2から受信されるk個のデータ部と、これらk個のデータ部から算出されるm個のパリティとを、k+m個の異なるダイから一つずつ選出されるk+m個の物理ブロックに跨がって書き込む。これにより、ホスト2からの書き込みデータを、k個のデータ部とm個のパリティとを含むパリティグループとしてNAND型フラッシュメモリ5に格納することができ、最大でm個までのダイ衝突を回避することができる。
また、領域#nに対するホスト2からの書き込み要求(ライトコマンド)に基づいて、RAID読み込み可能領域制御部23は、ホスト2から受信されるk’個のデータ部と、これらk’個のデータ部から算出されるm’個のパリティとを、k’+m’個の異なるダイから一つずつ選出されるk’+m’個の物理ブロックに跨がって書き込む。これにより、ホスト2からの書き込みデータを、k’個のデータ部とm’個のパリティとを含むパリティグループとしてNAND型フラッシュメモリ5に格納することができ、最大でm’個までのダイ衝突を回避することができる。
この書き込み動作の例を図4に示す。図4では、領域#1においてはk=7、m=3が適用され、領域#nにおいてはk=16、m=1が適用された場合が例示されている。
領域#1においては、例えば、7個のデータ部x1、x2、x3、x4、x5、x6、x7と3個のパリティp1、p2、p3が10個の異なるダイに分散される。これら7個のデータ部x1、x2、x3、x4、x5、x6、x7と3個のパリティp1、p2、p3は一つのパリティグループを構成する。この7+3のパリティグループにおいては、3つまでの同時のダイ衝突を回避することができる。
領域#nにおいては、例えば、16個のデータ部y1、y2、y3、y4、y5、y6、y7、y8、y9、y10、y11、y12、y13、y14、y15、y16と1個のパリティp1が17個の異なるダイに分散される。これら16個のデータ部y1、y2、y3、y4、y5、y6、y7、y8、y9、y10、y11、y12、y13、y14、y15、y16と1個のパリティp1は一つのパリティグループを構成する。この16+1のパリティグループにおいては、回避可能なダイ衝突は1つのみであるが、領域#1の各パリティグループよりも容量効率は高い。
図1のNANDインタフェース13は、NAND型フラッシュメモリ5を制御するNANDコントローラである。DRAMインタフェース14は、DRAM6をアクセス制御するDRAMコントローラである。DRAM6の記憶領域は、ライトバッファ(WB)31、ルックアップテーブル(LUT)32、システム管理情報33を格納するために利用される。システム管理情報33は、上述のRAID読み込み可能領域制御機能に必要な様々な管理情報を含む。
次に、ホスト2の構成について説明する。
ホスト2は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ41、オペレーティングシステム(OS)42、ファイルシステム43が含まれる。
一般に知られているように、オペレーティングシステム(OS)42は、ホスト2全体を管理し、ホスト2内のハードウェアを制御し、アプリケーションがハードウェアおよびSSD3を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
ファイルシステム43は、ファイルの操作(作成、保存、更新、削除等)のための制御を行うために使用される。例えば、ZFS、Btrfs、XFS、ext4、NTFSなどがファイルシステム43として使用されても良い。あるいは、ファイルオブジェクトシステム(例えば、Ceph Object Storage Daemon)、Key Value Store System (例えば、Rocks DB) がファイルシステム43として使用されても良い。
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ41上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
アプリケーションソフトウェアレイヤ41がリードコマンドまたはライトコマンドのようなリクエストをSSD3に送出することが必要な時、アプリケーションソフトウェアレイヤ41は、OS42にそのリクエストを送出する。OS42はそのリクエストをファイルシステム43に送出する。ファイルシステム43は、そのリクエストを、コマンド(リードコマンド、ライトコマンド等)にトランスレートする。ファイルシステム43は、コマンドを、SSD3に送出する。SSD3からのレスポンスが受信された際、ファイルシステム43は、そのレスポンスをOS42に送出する。OS42は、そのレスポンスをアプリケーションソフトウェアレイヤ41に送出する。
ファイルシステム43は、RAIDパラメータ指定部43A、パリティキャッシュ管理部43Bを含んでいてもよい。RAIDパラメータ指定部43Aは、領域毎にRAIDパラメータ(k、m)を指定するためのプログラムモジュールである。データセンタの管理者のようなユーザは、端末からホスト2のRAIDパラメータ指定部43Aを操作することによって、必要に応じて、任意のk+mの組み合わせを任意の領域に対して指定することができる。パリティキャッシュ管理部43Bは、上述のホスト2内のパリティキャッシュを管理するためのプログラムモジュールである。RAIDパラメータ指定部43A、およびパリティキャッシュ管理部43Bは、必ずしもファイルシステム43内に存在しなくてもよく、例えば、OS42内に存在してもよいし、アプリケーションソフトウェアレイヤ41上のアプリケーション内に存在してもよい。
図5は、領域管理テーブル33Aを示す。
領域管理テーブル33Aは、システム管理情報33の一部であり、各領域(各RAID読み込み可能領域)に対応するkおよびmの組を管理する。例えば、領域#1をリードレイテンシを短くすることを最優先するRAID読み込み可能領域として使用し、領域#2をリードレイテンシよりも容量効率を優先するRAID読み込み可能領域として使用するケースにおいては、k2+m2に対するk2の比率は、k1+m1に対するk1の比率よりも、高く設定されていてもよい。また、k1,k2,m1,m2は、以下の関係を有していてもよい。
k1およびk1は2以上の整数
m1は1以上の整数
m2はm1よりも小さい0以上の整数
なお、m2が0の場合、領域#2にパリティは格納されず、領域#2は、RAID0(ストライピング)のように機能する。
図6は、NAND型フラッシュメモリ5の構造情報33Bを示す。
NAND型フラッシュメモリ5の構造情報33Bは、システム管理情報33の一部であり、ページサイズ(容量)、ブロックサイズ(容量)、SSD容量(ユーザ容量)、等を含む。ブロックサイズは、一つの物理ブロックのサイズ(容量)を示す。NAND型フラッシュメモリ5の構造情報33Bは、さらに、仮想ブロックサイズを含んでいてもよい。コントローラ4は、ホスト2からの要求に応じて、この構造情報をホスト2に報告することができる。
図7は、仮想ブロック管理テーブル33Cを示す。
仮想ブロック管理テーブル33Cは、システム管理情報33の一部であり、SSD3が非コンベンショナルSSDとして実現されている場合において各仮想ブロックに割り当てられる物理ブロック集合を管理するために使用される。なお、説明を簡単にするために、図7においては領域識別子については省略されているが、実際には、領域識別子と仮想ブロック番号(以下、仮想ブロックidとも称する)の組毎に、物理ブロック集合が管理されてもよい。
仮想ブロック管理テーブル33Cは、複数のエントリを含む。各エントリは、「仮想ブロックid(vid)」フィールド、「データ用物理ブロックの集合」フィールド、「パリティ用物理ブロックの集合」フィールドを含む。「データ用物理ブロックの集合」フィールドは、データの格納に使用される各物理ブロックを特定する識別子、例えばダイ番号と物理ブロック番号の組み合わせ、を示す。「パリティ用物理ブロックの集合」フィールドは、パリティの格納に使用される各物理ブロックを特定する識別子、例えばダイ番号と物理ブロック番号の組み合わせ、を示す。
図8は、あるRAID読み込み可能領域内のある仮想ブロック(vid=x)に割り当てられる、データ用の物理ブロックの集合およびパリティ用の物理ブロックの集合の例を示す。ここでは、k=6、m=3の場合を想定する。
SSD3内部においては、物理ブロック(物理消去ブロック:PEB)は、(ダイ番号、ブロック番号)によって識別可能である。ブロック番号は、あるダイの中で一意となる番号である。仮想ブロックは、仮想ブロック番号(仮想ブロックid(vid))によって識別可能である。vidは、ある領域(あるRAID読み込み可能領域)の中で一意となる番号である。以後、主として、ダイ番号1をd1、ブロック番号1をb1のように表記する。
あるRAID読み込み可能領域の仮想ブロック(vid=x)には、1番目から6番目までの6個の物理ブロックPEB(k)と、1番目から3番目までの3個の物理ブロックPEB(m)とが割り当てられる。6個の物理ブロックPEB(k)は、仮想ブロック(vid=x)のデータ用の物理ブロックである。3個の物理ブロックPEB(m)は、仮想ブロック(vid=x)のパリティ用の物理ブロックである。
9個の物理ブロック(PEB(k)、PEB(m))は、異なる9個のダイから一つずつ選出される。図8では、以下の場合が想定されている。
(1)ダイd7の物理ブロックb12(d7,b12)が1番目のデータ用物理ブロック(PEB(k)=0)として割り当てられる。
(2)ダイd6の物理ブロックb2(d6,b2)が2番目のデータ用物理ブロックPEB(PEB(k)=1)として割り当てられる。
(3)ダイd13の物理ブロックb10(d13,b10)が3番目のデータ用物理ブロック(PEB(k)=2)として割り当てられる。
(4)ダイd9の物理ブロックb9(d9,b9)が4番目のデータ用物理ブロック(PEB(k)=3)として割り当てられる。
(5)ダイd2の物理ブロックb9(d2,b9)が5番目のデータ用物理ブロック(PEB(k)=4)として割り当てられる。
(6)ダイd8の物理ブロックb11(d8,b11)が6番目のデータ用物理ブロック(PEB(k)=5)として割り当てられる。
(7)ダイd15の物理ブロックb13(d15,b13)が1番目のパリティ用物理ブロック(PEB(m)=0)として割り当てられる。
(8)ダイd11の物理ブロックb1(d11,b1)が2番目のパリティ用物理ブロック(PEB(m)=1)として割り当てられる。
(9)ダイd3の物理ブロックb7(d3,b7)が3番目のパリティ用物理ブロック(PEB(m)=2)として割り当てられる。
なお、一つのRAID読み込み可能領域は複数のvidを含むことができる。この場合、同じRAID読み込み可能領域内のvidそれぞれには、同じダイ集合が割り当てられてもよい。そして、各ダイの異なる物理ブロックがこれらvidに割り当てられてもよい。
<複数のRAID設定の動的選択による目的別使用>
次に、RAID読み込み可能領域制御機能の具体例について説明する。
ホスト2は、RAID読み込み可能領域を宣言(要求)することができる。RAID読み込み可能領域とは、RAIDのパリティグループが適用される論理的な領域を意味する。RAID読み込み可能領域を宣言(要求)するための方法としては、以下の幾つかの方法が挙げられる。
一つ目の方法は、事前にSSD3のNAND型フラッシュメモリ5の記憶領域を論理的に複数の領域に分割し、これら領域の少なくとも一つをRAID読み込み可能領域にすることを宣言する方法である。
NAND型フラッシュメモリ5の記憶領域を論理的に複数の領域に分割するために、複数のネームスペース(Namespace)を利用してもよい。この場合、NVMeにおけるNamespace機能のように、NAND型フラッシュメモリ5の容量が複数のネームスペース(領域)によって分割されてもよいし、あるいは、これらネームスペース間でNAND型フラッシュメモリ5の容量が共有されてもよい。
ホスト2は、SSD3にネームスペースの作成を要求することができ、且つこのネームスペースに適用すべきRAID構成(k、m)を指定することができる。SSD3のコントローラ4は、この作成されたネームスペースの識別子(NSID#1)をホスト2に通知すると共に、このネームスペースに対応するRAID構成(k、m)を管理する。つまり、コントローラ4は、NSID#1のネームスペースを、k個のデータ部とm個のパリティとを含むパリティグループが適用される領域として管理する。
コントローラ4がNSID#1を指定する書き込み要求をホスト2から受信した場合、コントローラ4は、ホスト2から受信されるk個のデータ部と、k個のデータ部から算出されるm個のパリティとを、k+m個の物理ブロックに跨がって書き込む。これらk+m個の物理ブロックは、k+m個の異なる不揮発性メモリダイから一つずつ選出された物理ブロックである。なお、m=0の場合には、このネームスペースにはRAID読み込みが用いられない。つまり、このネームスペースはパリティ領域を持たない。
あるいは、ホスト2は、ネームスペースに適用すべきk、min_m、max_mを指定してもよい。ここで、min_mは最小のmを示し、max_mは最大のmを示す。SSD3の空き容量が十分にある場合には、コントローラ4は、max_mによって指定される個数のパリティを書き込む。SSD3の空き容量が減少するにつれ、コントローラ4は、書き込むべきパリティの数をmin_mまで減少してもよい。
二つ目の方法は、ホスト2からの連続データを仮想ブロックと称される物理ブロック集合にシーケンシャルに書き込むことを前提とした上述の非コンベンショナルSSDに適用可能な方法である。この場合、SSD3のコントローラ4が複数の物理ブロックPEBをまとめて一つの大きな書き込み領域とし、この大きな書き込み領域をホスト2に一つの仮想ブロックVBとして提供する。上述したように、仮想ブロックVBは仮想ブロック番号(vid)によって識別可能であり、vidは、ある領域(あるRAID読み込み可能領域)の中で一意となる番号である。
図9は、仮想ブロック番号(vid)を使用することによって実行される仮想ブロックアクセス動作の概要を示す。
ここでは、一つの物理ブロックが4つのページを含み、ページサイズが16KBであり、LBAが4KBの場合が想定されている。
ホスト2においては、SSD3のLBA範囲は、連続する幾つかの仮想ブロック(vid=0、vid=1、vid=2、…)であるかのように扱われてもよい。
また,SSD3は,LBAのようなSSD3の論理アドレスと仮想ブロックとの関係を持っていてもよい.これは例えば動的な変換テーブルを構成してもよいし,vidから単純に計算で求められるものでもよい.計算で求められるものの例としては,この例では1つの仮想ブロックは6個の物理消去ブロックから構成されているため,vid 1の先頭は, 1 * 6 * 4 * (16 / 4) = 96 とし,以下4KB毎に97, 98... のように構成してもよい.
SSD3内においては、あるRAID読み込み可能領域の各仮想ブロックには、幾つかのデータ用物理ブロックPEB(k)が割り当てられる。さらに、各仮想ブロックには、幾つかのパリティデータ用物理ブロックPEB(m)も割り当てられる。図9では、各仮想ブロックに6個のデータ用物理ブロックPEB(k)と3個のパリティデータ用物理ブロックPEB(m)が割り当てられている場合が例示されている。
ホスト2(例えば、ホスト2上で実行されるアプリケーション)は、各仮想ブロックを24ページ(=4×6)を含む大きな書き込み領域として認識する。仮想ブロック内の書き込み先位置は、仮想ブロック番号(vid)とページ番号(仮想ブロック内ページ番号)とによって識別される。
ホスト2がvid=0、page=0へのデータの書き込みを要求した場合、このデータは、1番目のデータ用物理ブロック(PEB(k)=0)の最初のページ(page0)に書き込まれる。ホスト2がvid=0、page=1へのデータの書き込みを要求した場合、このデータは、ストライピングされることによって、2番目のデータ用物理ブロック(PEB(k)=1)の最初のページ(page0)に書き込まれる。ホスト2がvid=0、page=2へのデータの書き込みを要求した場合、このデータは、ストライピングされることによって、3番目のデータ用物理ブロック(PEB(k)=2)の最初のページ(page0)に書き込まれる。
同様にして、例えば、ホスト2がvid=0、page=8へのデータの書き込みを要求した場合、このデータは、3番目のデータ用物理ブロック(PEB(k)=2)の2番目のページ(page1)に書き込まれる。
なお、ここでは、ページ単位のストライピングを行っているが、かならずしもページ単位でストライピングする必要は無く、任意のデータ長単位でストライピングすることができる。例えば、ページを4KBごとに分割し、4KB単位でデータをストライピング(複数のダイに分散)してもよい。
SSD3のコントローラ4は、vid毎にそのvidに割り当てられる物理ブロックPEBそれぞれの物理位置(ダイ番号、物理ブロック番号)を管理する。図9では、(d7,b12)、(d6,b2)、(d13,b10)、(d9,b9)、(d2,b9)、(d8,b11)が6個のデータ用物理ブロックPEB(k)として割り当てられ、(d15,b13)、(d11,b1)、(d3,b7)が3個のパリティ用物理ブロックPEB(m)として割り当てられた場合が例示されている。
次に、仮想ブロックアクセス動作の手順について説明する。
(1)ホスト2は、SSD3にRAID読み込み可能領域を要求するために、SSD3に対してRAID読み込みのためのパラメータを与える。例えば、RAID読み込み可能領域を要求するパリティ割り当て要求(k=6,min_m=1,max_m=3)をSSD3に送信する。ここで、k、min_m、max_mは、それぞれkおよび最小のmと最大のmを表す。このとき、min_m及びmax_mが0の場合、このRAID読み込み可能領域についてはRAID読み込みを用いない、すなわちパリティ領域を持たないことを意味する。
(2)SSD3のコントローラ4は、図10に示すように領域管理テーブル33Aを更新し、このパラメータに対して領域(RAID読み込み可能領域)の識別子(以下、領域識別子ridという)を与える。そして、コントローラ4は、領域識別子rid(例えばrid=1)を含む応答(パリティ割り当てリプライ)をホスト2に返し、これによってrid=1をホスト2に通知する。以降、ホスト2は、rid=1を使用することによって、このRAID読み込み可能領域を特定することができる。例えば、ホスト2がこのRAID読み込み可能領域に対する書き込み要求をSSD3に送信することが必要な場合、ホスト2は、rid=1と、rid=1に対応する領域内の書き込み先位置とを指定する。この書き込み先位置は、仮想ブロック番号(vid)と仮想ブロック内ページ番号(page)とによって識別される。
(3)いま、仮にホスト2がrid=1のvid=12の最初のページからデータを順に書き込むとする。ホスト2は、書き込み要求(rid=1、vid=12、page=0)をSSD3に送信する。rid=1は、書き込み先の領域を示し、vid=12は、この書き込み先の領域内の書き込み先仮想ブロックを示し、page=0は、仮想ブロック内ページ番号を示す。書き込み要求は、さらに、書き込むべきデータのデータ長を含んでいてもよい。
(4)SSD3のコントローラ4は、rid=1のvid=12の仮想ブロックに対してk(ここではk=6)個のデータ用物理ブロックと、m(ここではmin_m=1,max_m=3)個の物理ブロックを割り当てる。このとき、これら物理ブロックは異なるダイから一つずつ選出される。
ここで、現在はNAND型フラッシュメモリ5の空き容量に余裕があるものとする。この場合、max_mまでデータ用物理ブロックが割り当てられるため、合計9つの物理ブロックがrid=1のvid=12の仮想ブロック用に割り当てられる。
ここでは、仮に、kに対して(d7,b12)、(d6,b2)、(d13,b10)、(d9,b9)、(d2,b9)、(d8,b11)が、mに対して(d15,b13)、(d11,b1)、(d3,b7)が割り当られたとする。この時、SSD3のコントローラ4は、図11に示すように仮想ブロック管理テーブル33Cを更新して、rid=1のvid=12に対して割り当てられた6個のデータ用物理ブロック、つまり(d7,b12)、(d6,b2)、(d13,b10)、(d9,b9)、(d2,b9)、(d8,b11)と、rid=1のvid=12に対して割り当てられた3個のパリティ用物理ブロック、つまり、(d15,b13)、(d11,b1)、(d3,b7)とを管理する。
(5)仮に、ホスト2がNAND型フラッシュメモリ5の6ページ分のデータ(データ部x1,データ部x2,データ部x3,データ部x4,データ部x5,データ部x6)を書いたものとする。ここでは、これらデータ部は、rid=1のvid=12の最初の仮想ブロック内ページ(ページ0)から順に書き込まれるものとする。p1、p2、p3をそれぞれパリティデータとすると、(x1,x2,x3,x4,x5,x6,p1,p2,p3)が、図12に示すような形式でNAND型フラッシュメモリ5に書き込まれる。図13は、図12を説明するための図である。データx1は、ダイd7の物理ブロックb12の最初のページ(page0)に書き込まれる。データx2は、ダイd6の物理ブロックb2の最初のページ(page0)に書き込まれる。データx3は、ダイd13の物理ブロックb10の最初のページ(page0)に書き込まれる。データx4は、ダイd9の物理ブロックb9の最初のページ(page0)に書き込まれる。データx5は、ダイd2の物理ブロックb9の最初のページ(page0)に書き込まれる。データx6は、ダイd8の物理ブロックb11の最初のページ(page0)に書き込まれる。パリティp1は、ダイd15の物理ブロックb13の最初のページ(page0)に書き込まれる。パリティp2は、ダイd11の物理ブロックb1の最初のページ(page0)に書き込まれる。パリティp3は、ダイd3の物理ブロックb7の最初のページ(page0)に書き込まれる。
なお、上述したように、(x1,x2,x3,x4,x5,x6,p1,p2,p3)のようなデータとパリティの集合は、パリティグループと称される。
ここで、ホスト2はSSD3のページサイズを知っているものとし、SSDアドレスは(rid,vid,仮想ブロック内ページ番号(page))で示すものとし、SSD3はこれを(rid,vid,物理ブロック番号,物理ブロック内ページ番号(page))へと変換するものとする。
例えば、図14に示されているように、(rid=1,vid=12,page=3)は、(rid=1,vid=12,(d9,b9),page=0)に変換される。この変換は計算で求まるものでもよいし、SSD3とホスト2の間で変換表のようなものを共有してもよい。
(6)ここで、仮にダイd7の物理ブロックb12以外の別の物理ブロックへの書き込み要求が発生したものとする。ダイd7においては、この書き込み要求に対応する書き込み動作が実行される。この書き込み動作の実行中に、SSDアドレス(d7,b12,page=0)を指定するリード要求、すなわちデータx1へのリード要求がホスト2から到来したものとする。図12、図13に示すように、データx1は、(d7,b12,page=0)に格納されている。このとき、SSD3のコントローラ4は、ダイd7においてダイ衝突が起きたことを認識することができる。このため、SSD3のコントローラ4は、(d7,b12,page=0)からデータを読まず、仮想ブロック管理テーブル33Cの情報を参照して、x2、x3、x4、x5、x6、p1を読み込み、これらx2、x3、x4、x5、x6、p1からx1を復元する(RAID読み込み)。もちろん、このときコントローラ4は、(x2,x3,x4,x5,x6,p1,p2,p3)のうち任意の6つを読めばよい。
次に、NAND型フラッシュメモリ5の記憶領域を論理的に複数の領域に分割するためのさらに別の方法について説明する。以下では、LBAのような論理アドレスをSSDアドレスとして使用するコンベンショナルSSDに適用可能な方法について説明する。
ホスト2は、SSD3の全論理アドレス範囲内の任意の論理アドレス範囲を領域(RAID読み込み可能領域)として指定することができる。ホスト2は、RAID読み込み可能領域とすべき論理アドレス範囲と、この論理アドレス範囲に適用すべきRAID構成(k、m)とを指定することができる。
この場合、ホスト2は、以下のような領域要求をSSD3に送出してもよい。
領域要求(start=4000,length=1000,k=8,min_m=1,max_m=3)
ここで、startは、RAID読み込み可能領域の開始SSDアドレス(開始論理アドレス)、lengthは領域の長さ、k、min_m、max_mはそれぞれkおよび最小のmと最大のmを表す。
この時、パリティを保存する領域をSSD3内で確保できなければ、SSD3のコントローラ4は、ホスト2にエラーを返してもよい。SSD3のコントローラ4は前述の例同様の管理を行い、必要であればRAID読み込み処理を行う。
あるいは,ホスト2は領域要求を,実データ(k)の領域と,パリティデータ(m)の領域の両方を指定して行ってもよい.領域要求(start=8000, length=800,k=8, min_m=1, max_m=3, parity_start=16000, parity_length=100).ここで,startは、RAID読み込み可能領域の開始SSDアドレス(開始論理アドレス)、lengthは領域の長さ、k, min_m, max_m はそれぞれkおよび最小のmと最大のmを表す.さらに, parity_start は,RAID読み込みに使用されるparityを保存する領域の開始SSDアドレス(開始論理アドレス)、parity_lengthは領域の長さを示す.SSD3は,parity_startからparity_lengthの区間への書込要求については,領域が開放されるまでこれを禁止してもよい.また,parity_startからparity_lengthの区間への読み込みについては,実際のパリティ値を返してもよいし,ある一定の値やランダム値を返してもよいし,あるいはこれを禁止してもよい.
例えば、コントローラ4は、領域要求によって指定された論理アドレス範囲毎に、その論理アドレス範囲に対応するRAID構成(k、m)を管理する。コントローラ4が、ある論理アドレスを書き込み先として指定する書き込み要求をホスト2から受信した場合、コントローラ4は、この書き込み先論理アドレスが属する論理アドレス範囲に対応するRAID構成(k、m)を決定する。そして、コントローラ4は、この決定されたRAID構成(k、m)に基づいて、ホスト2から受信されるk個のデータ部と、k個のデータ部から算出されるm個のパリティとを、k+m個の物理ブロックに跨がって書き込む。
図15は、SSD3によって領域とリードレイテンシ/容量効率との関係を示す。
ここでは、NAND型フラッシュメモリ5の記憶領域が、kとmの組み合わせが互いに異なる3つの領域#1、#2、#3に論理的に分割されている場合を想定する。領域#1においては、例えば、k=7、m=3のRAID構成が適用され、領域#2においては、例えば、k=10、m=2のRAID構成が適用され、領域#3においては、例えば、k=16、m=1のRAID構成が適用されている。この場合、領域#1は、容量効率は低いが最も高いダイ衝突耐性を有し、領域#3は、ダイ衝突耐性は低いが最も高い容量効率を有することになる。このため、領域#1に書き込まれたデータは最も短いリードレイテンシで読み込むことができる。よって、ホスト2は、領域毎にその領域の目的に応じたRAID構成(k、m)を設定することにより、一台のSSDを特性の異なる複数種のストレージとして扱うことができる。
図16は、SSD3によって実行されるデータ書き込み処理シーケンスを示す。
SSD3のコントローラ4は、ホスト2から受信されたパリティ割り当て要求#1に基づいて、領域管理テーブル33Aを更新する(ステップS101)。ステップS101では、コントローラ4は、パリティ割り当て要求#1に含まれるパラメータ(k,min_m,max_m)に対して領域識別子(rid=1)を与え、rid=1、k、min_m、max_mを領域管理テーブル33Aに登録する。続いて、コントローラ4は、その領域識別子(rid=1)をホスト2に返す(ステップS102)。
また、コントローラ4は、ホスト2から受信されたパリティ割り当て要求#2に基づいて領域管理テーブル33Aを更新する(ステップS103)。ステップS103では、コントローラ4は、パリティ割り当て要求#2に含まれるパラメータ(k’,min_m’,max_m’)に対して領域識別子(rid=2)を与え、rid=2、k’、min_m’、max_m’を領域管理テーブル33Aに登録する。続いて、コントローラ4は、その領域識別子(rid=2)をホスト2に返す(ステップS104)。
また、コントローラ4は、ホスト2から受信されたパリティ割り当て要求#3に基づいて領域管理テーブル33Aを更新する(ステップS105)。ステップS105では、コントローラ4は、パリティ割り当て要求#3に含まれるパラメータ(k”,min_m”,max_m”)に対して領域識別子(rid=3)を与え、rid=3、k”、min_m”、max_m”を領域管理テーブル33Aに登録する。続いて、コントローラ4は、その領域識別子(rid=3)をホスト2に返す(ステップS106)。
SSD3がrid=1,vid=1を指定する書き込み要求(ライトコマンド)をホスト2から受信した場合、コントローラ4は、rid=1のvid=1の仮想ブロックに、k+m個の異なるダイから一つずつ選出されるk+m個の物理ブロックを割り当て、k個のデータ部およびm個のパリティをk+m個の物理ブロックに跨がって書き込む(ステップS107)。なお、rid=1,vid=1の仮想ブロックにk+m個の物理ブロックを割り当てる処理は、rid=1、vid=1、page=0を指定する書き込み要求を受信した時にのみ行ってもよい。
図17のフローチャートは、SSD3のコントローラ4によって実行されるリード処理の手順を示す。
SSD3がホスト2からのリード要求を受信すると(ステップS201のYES)、コントローラ4は、リード要求によって指定された記憶位置に対応するダイ(つまり、リードすべき目的のデータが格納されているダイ)にダイ衝突が起きているか否かを判定する(ステップS202)。ステップS202では、コントローラ4は、例えば、各ダイに現在割り当てられている未完了の処理を示すキュー(またはリスト)を参照することによって、リードすべき目的のデータが格納されているダイにダイ衝突が起きているか否かを判定してもよい。
ダイ衝突が起きている場合(ステップS202のYES)、コントローラ4は、リード要求によって指定されたデータが属するパリティグループのデータおよびパリティをリードする(ステップS203)。続いて、コントローラ4は、パリティグループのデータおよびパリティを使用して、リード要求によって指定されたデータを復元し(ステップS204)、復元したデータをホスト2に返す(ステップS205)。
ダイ衝突が起きていない場合(ステップS202のNO)、コントローラ4は、リード要求によって指定されたデータを、このデータが格納されているダイからリードし、リードしたデータをホスト2に返す(ステップS206)。
<積極的な空き容量の活用>
次に、パリティの数mを減少することによってSSD3の空き容量を増やす処理について説明する。
いま、SSD3の空き容量がある閾値よりも低くなったものとする。この閾値はSSD3のコントローラ4が事前に定めてもよいし、ユーザが定めてもよい。SSD3のコントローラ4は、必要ならば、パリティが含まれる物理ブロックPEBを解放することによってパリティを削除し、これによってパリティの数をmin_mに等しい数まで減らしてもよい。例えば、上記の例においては、図18に示すように、3つのパリティ用物理ブロック(d15,b13)、(d11,b1)、(d3,b7)の内、任意の2つを解放することができる。
ここでは仮に(d11,b1)、(d3,b7)を解放したとする。この場合、p2、p3が削除される。これにより、SSD3の空き容量が増加し、ユーザはSSD3の容量を効率よく使用することができる。
(d11,b1)、(d3,b7)の解放時(パリティ削除時)には、コントローラ4は、仮想ブロック管理テーブル33Cを、図19に示すように更新する。
図20のフローチャートは、SSD3のコントローラ4によって実行される物理ブロック解放処理(パリティ削除処理)の手順を示す。
コントローラ4は、SSD3の空き容量(つまり、NAND型フラッシュメモリ5の空き容量)をチェックする(ステップS301)。SSD3の空き容量が閾値よりも少ない場合(ステップS302のYES)、コントローラ4は、パリティが格納されている物理ブロックを解放する(ステップS303)。例えば、max_m=3の領域(RAID読み込み可能領域)においてはパリティp1,p2,p3がそれぞれ格納されている3つの物理ブロックが存在するので、最初に、これら3つの物理ブロックの一つを解放してパリティp1,p2,p3の一つ(例えばp2)を削除してもよい。
次に、コントローラ4は、「max_m − 1」を求め、「max_m − 1」がmin_mと等しいか否かをチェックする(ステップS304)。
「max_m − 1」がmin_mと等しくないならば(ステップS304のNO)、コントローラ4は、残りのパリティp1,p3の一つ(例えばp3)を削除する(ステップS303)。そして、コントローラ4は、「max_m − 1」を求め、「max_m − 1」がmin_mと等しいか否かをチェックする(ステップS304)。
「max_m − 1」がmin_mと等しいならば(ステップS304のYES)、コントローラ4は、処理を終了する。
<SSD内のDRAMを用いた動的な運用>
次に、図21を参照して、SSD3内のDRAM6を、パリティを格納するためのパリティキャッシュとして利用する場合について説明する。
例えば、上述した2つのパリティp2、p3が削除された時点で、仮にダイd6のどこかの物理ブロックに書き込み要求があったものとする。ダイd6がこの書き込み要求の処理を実行中に、(d6,b12,page=0)、すなわちデータx2へのリード要求がホスト2から到来したものとする。
この時、SSD3のコントローラ4は、(x1,x3,x4,x5,x6,p1)をダイd7、d13、d9、d2、d8、d15から読み込み、これらx1、x3、x4、x5、x6、p1からx2を復元し、復元したx2をホスト2に返す。
加えて、この時、SSD3のコントローラ4は、(d11,b1)、(d3,b7)を解放することによって消失されたp2、p3を復元(再算出)してもよい(ケースX)。p2、p3は、x1、x2、x3、x4、x5、x6を使用して再算出することができる。さらに、コントローラ4は、この再算出されたパリティp2、p3を、DRAM6にキャッシュとして保存してもよい。この場合、パリティp2、p3は、DRAM6上のパリティキャッシュ6Aのエントリの一つに保存される。パリティキャッシュ6Aにおいては、図22に示すように、パリティp2、p3は、パリティp2、p3が属するパリティグループの識別子(ここでは、rid=1、vid=12、page番号=0)と一緒にパリティキャッシュ6Aのエントリに保存される。
さらに、まだダイd6における書き込み処理が終了していない段階で、ダイd13のいずれかの物理ブロックへの新たな書き込み要求がホスト2から到来したものとする。
そして、さらに、この2つの書き込み要求に対応する書き込み処理の実行中に、(d13,b10,page=0)、すなわちデータx3への新たな読み込み要求がホスト2から到来したものとする。この場合、データx3を含むパリティグループにおいては、2つのダイ衝突が発生することになる。しかし、このパリティグループについては、一つのパリティp1のみがNAND型フラッシュメモリ5に格納されている。
したがって、SSD3のコントローラ4は、パリティキャッシュ6A内を探索し、このパリティグループのパリティp2、p3をパリティキャッシュ6Aから取得する。x3は、(x1,x4,x5,x6,p1,p2,p3)のうち任意の6つを使用して復元することができる。よって、コントローラ4は、例えば、(x1,x4,x5,x6)をダイd7、d9、d2、d8から読み込み、(x1,x4,x5,x6,p2,p3)を使用してx3を復元し、x3をホスト2に返すことができる。
DRAM6の領域は有限であるため、DRAM6に保存するパリティの量を一定としてもよい。
いま、DRAM6に保存されているパリティの量が一定量に達している場合、つまりパリティキャッシュ6Aに空きエントリが存在しない場合を想定する。NAND型フラッシュメモリ5に保存されていないパリティが計算によって新しく得られた場合、コントローラ4は、新しく得たパリティをパリティキャッシュ6Aに保存せずに廃棄してもよいし、すでに保存されているパリティをパリティキャッシュ6Aから削除(追い出し)して新たな空きエントリを作り、新しく得たパリティをその新たな空きエントリに保存してもよい。この消去(追い出し)すべきパリティの選択については、例えばLRUなどに代表される方法を使用してもよい。
図23のフローチャートは、SSD3のコントローラ4によって実行されるパリティ削除およびキャッシュフィル処理の手順を示す。
コントローラ4は、SSD3の空き容量(つまり、NAND型フラッシュメモリ5の空き容量)をチェックする(ステップS401)。SSD3の空き容量が閾値よりも少ない場合(ステップS402のYES)、コントローラ4は、削除対象のパリティをパリティキャッシュ6Aに格納する(ステップS403)。例えば、max_m=3の領域においてはパリティp1、p2、p3がそれぞれ格納されている3つの物理ブロックが存在するので、例えば、最初に、パリティp1、p2、p3の一つ(例えばp2)が削除対象のパリティとして選択されてもよい。
次いで、コントローラ4は、削除対象のパリティが格納されている物理ブロックを解放する(ステップS404)。ステップS404では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ(例えばp2)が削除される。
次に、コントローラ4は、「max_m − 1」を求め、「max_m − 1」がmin_mと等しいか否かをチェックする(ステップS405)。
「max_m − 1」がmin_mと等しくないならば(ステップS405のNO)、コントローラ4は、残りのパリティp1、p3の一つ(例えばp3)を削除対象のパリティとして選択し、この削除対象のパリティをパリティキャッシュ6Aに格納する(ステップS403)。次いで、コントローラ4は、削除対象のパリティが格納されている物理ブロックを解放する(ステップS404)。ステップS404では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ(例えばp3)が削除される。
そして、コントローラ4は、「max_m − 1」を求め、「max_m − 1」がmin_mと等しいか否かをチェックする(ステップS405)。
「max_m − 1」がmin_mと等しいならば(ステップS405のYES)、コントローラ4は、処理を終了する。
なお、例えば、max_m=3、min_m=1の領域においては、パリティp1、p2、p3がそれぞれ格納されている3つの物理ブロックの内、2つの物理ブロックを同時に解放してもよい。この場合、コントローラ4は、例えば、2つのパリティp2、p3を削除対象のパリティとして選択してもよい。これらパリティp2、p3は同じパリティグループ識別子を共有している。したがって、ステップS403では、パリティp2、p3とこれらパリティp2、p3に共通のパリティグループ識別子とがパリティキャッシュ6Aの一つのエントリに格納されてもよい。
図24のフローチャートは、SSD3のコントローラ4によって実行されるパリティ削除およびキャッシュフィル処理の別の手順を示す。
SSD3がホスト2からのリード要求を受信すると(ステップS501のYES)、コントローラ4は、リード要求によって指定された記憶位置に対応するダイ(つまり、リードすべき目的のデータが格納されているダイ)にダイ衝突が起きているか否かを判定する(ステップS502)。
ダイ衝突が起きている場合(ステップS502のYES)、コントローラ4は、リード要求によって指定されたデータが属するパリティグループのデータおよびパリティをリードする(ステップS503)。続いて、コントローラ4は、パリティグループのデータおよびパリティを使用して、リード要求によって指定されたデータを復元し(ステップS504)、復元したデータをホスト2に返す(ステップS505)。
続いて、コントローラ4は、パリティグループのデータおよびパリティを使用して、削除されたパリティを再算出し(ステップS506)、その再算出されたパリティをパリティグループ識別子と一緒にパリティキャッシュ6Aに格納する(ステップS507)。
ダイ衝突が起きていない場合(ステップS502のNO)、コントローラ4は、リード要求によって指定されたデータを、このデータが格納されているダイからリードし、リードしたデータをホスト2に返す(ステップS508)。
<ホストからのリード領域に対するヒント>
次に、リード対象領域を予告する通知(ヒント)をホスト2から受信した場合に実行される処理について説明する。
ホスト2は、これから読込を行う領域を事前に認識できる場合、その領域をSSD3に伝えてもよい。SSD3は、伝えられた領域については、優先的にパリティを保護してもよい。パリティを保護するとは、例えばSSD3から削除する場合、その削除の優先順位を引き下げるといった処理を指す。あるいは,パリティキャッシュ6Aにその領域のパリティが含まれている場合には、その領域のパリティの消去の優先順位を引き下げるといった処理を指す。これは、例えば、LRUのようなアルゴリズムを用いてパリティキャッシュ6A内のパリティの削除順を決定した場合には、伝えられた領域のパリティの削除順序を変更して優先的に削除対象から除外するような処理を含む。
図25は、パリティをNAND型フラッシュメモリ5またはパリティキャッシュ6Aから削除する場合、その削除の優先順位(削除順)を変更する処理を示す。
パリティキャッシュ6A内の各パリティについて、コントローラ4は、LRU等に代表されるアルゴリズムに従って、パリティの追い出し順序(削除順序)を決定する(ステップS601)。
ここで、SSD3がホスト2からリード対象領域を予告する通知(ヒント)を受信すると、コントローラ4は、ホスト2から通知されたリード対象領域のパリティの追い出し順序(削除順序)を変更してこのパリティをパリティキャッシュ6Aに優先的に残す(ステップS602)。例えば、リード対象領域がrid=1、vid=1であったならば、rid=1、vid=1に関連付けられたパリティの追い出し順序(削除順序)が変更され、このパリティがパリティキャッシュ6Aに優先的に残される。
NAND型フラッシュメモリ5から削除すべきパリティを決定する際においても、同様の処理が行われる。例えば、リード対象領域がrid=1、vid=1であったならば、rid=1、vid=1に関連付けられたパリティの削除順序が変更され、このパリティがNAND型フラッシュメモリ5に優先的に残される。
あるいは、SSD3のアイドル期間においては、ヒントによって指定されたリード対象領域のパリティを積極的に復元してもよい。例えば、ヒントによって指定されたリード対象領域のパリティが既に削除されていた場合、このリード対象領域のパリティが復元される。コントローラ4は、復元されたパリティを、DRAM6のパリティキャッシュ6Aに保存してもよいし、物理ブロックに書き込んでもよい。
ホスト2は、これから読み込みを行なわない領域についても、それを認識できる場合にはその領域をSSD3に伝えてもよい。SSD3は、その領域については優先的にパリティを削除してもよい。
<ホスト側のメモリの活用>
次に、ホスト2側のメモリを活用することについて説明する。
ホスト2はランダムアクセスメモリ(例えばDRAM)を備えており、通常、このホスト2のDRAMのサイズはSSD3のDRAM6のサイズよりも大きい。したがって、ホスト2のDRAMを使用することにより、より多くのパリティを管理することができる。
SSD3のコントローラ4は、パリティが計算された時点、例えば最初の書き込み時、あるいは、RAID読み込みを行う際に、消去されているパリティを計算した場合において、このパリティをその位置(このパリティに対応するパリティグループ識別子)と共にホスト2に通知してもよい。この様子を図26に示す。図26では、NAND型フラッシュメモリ5から削除されたパリティp2、p3をパリティグループ識別子(rid1、vid12、page=0)と共にSSD3内のパリティキャッシュ6Aに保存すると共に、パリティp2、p3およびパリティグループ識別子(rid1、vid12、page=0)がホスト2に通知される場合が例示されている。ホスト2は、通知されたパリティp2、p3およびパリティグループ識別子(rid1、vid12、page=0)を、ホスト2内のDRAM50上のパリティキャッシュ50Aに保存する。
ホスト2は、いまからリードしようとするデータの位置に対するパリティを知っている場合には、リード要求の中に当該パリティを含めてもよい。
例えば、上述のケースXの状態で、SSD3のコントローラ4は、(d11,b1)、(d3,b7)の解放によって失われたパリティp2、p3を再算出し、以下のパリティ通知をホスト2に送信することによって、この再算出されたパリティp2、p3をホスト2に通知する。
パリティ通知(rid=1,vid=12,page=0,[p2,p3])
ホスト2は、この通知を受け取った場合に、パリティグループ識別子(rid1、vid12、page=0)およびパリティp2、p3をホスト2内のDRAM50上のパリティキャッシュ50Aのエントリに保存する。
ホスト2は、リード要求を送信しようとする際に、そのリード要求によって指定されるSSDアドレス(rid、vid、page番号)にマッチするエントリをパリティキャッシュ50Aから探索する。リード要求によって指定されるSSDアドレス(rid、vid、page番号)にマッチするエントリがパリティキャッシュ50Aに存在する場合、ホスト2は、このエントリ内のパリティを含むリード要求をSSD3に送信してもよい。なお、ホスト2は、知りうる全てのパリティをSSD3に送信してもよいし、いくつかのパリティを選択的にSSD3に送信してもよい。
仮にいま、SSD3内部のパリティキャッシュ6Aからは(rid=1,vid=12,page=0)のエントリは消去されてしまったものとし,またNAND型フラッシュメモリ5にも、物理ブロック(d15,b13)に格納されているパリティ(値はp1)しか残っていないものとする。
ここでホスト2はデータx3を読み出そうとしたとする。このとき、ホスト2側のパリティキャッシュ50Aにはデータx3が属するパリティグループのパリティp2、p3が残っているので、ホスト2は、このパリティp2、p3が付加されたリード要求を送信する。
リード要求(rid=1,vid=12,page=2,parities=(p2、p3))
このリード要求は、SSD3の内部的には、(d13,b10,page=0)への読み込みとなる。
この時点で、仮にd7とd13が書き込み処理中であったとする。
SSD3内部にはこのリード対象のデータが属するパリティグループ用の1つのパリティp1しか存在しない。したがって、通常では、読み込み対象のダイd13に加え、さらに他のダイd7でも衝突が起きているこの状況では、リード対象のデータx3を復元することは出来ない。
しかし、ホスト2からパリティp2、p3が与えられているので、SSD3のコントローラ4は、[x2,x4,x5,x6,p1,p2,p3]のうち任意の6個のデータを用いてx3を復元でき、ホスト2にx3を返すことができる。
SSD3側に存在するパリティ数が消去のため不足しており、かつホスト2側からパリティが与えられなかった場合、SSD3のコントローラ4は、エラーをホスト2に返してもよい。この時、コントローラ4は、エラーと一緒、リード対象のデータが属するパリティグループ内で衝突なく読み出せる全てのデータ(パリティを含む)をホスト2に送信してもよい。
いま、SSD3内部のパリティキャッシュ6Aからは、(rid=1,vid=12,page=0)のエントリは消去されてしまったものとし、またNAND型フラッシュメモリ5にも、物理ブロック(d15,b13)に格納されているパリティ(値はp1)しか残っていないものとする。
ここでホスト2はデータx3を読み出そうとしたとする。このとき、ホスト2は、パリティを含まない以下のリード要求を送信したとする。
リード要求(rid=1,vid=12,page=2)
このリード要求は、SSD3の内部的には、(d13,b10,page=0)への読み込みとなる。
この時点で、仮にd7とd13が書き込み処理中であったとする。
SSD3内部にはこのリード対象のデータが属するパリティグループ用の1つのパリティp1しか存在しない。よって、読み込み対象のダイd13に加え、さらに他のダイd7でも衝突が起きているこの状況では、x3を復元することはできない。
このとき、SSD3のコントローラ4は、リード対象のデータが含まれるパリティグループ内で衝突なく読み出せる全てのデータ(パリティを含む)をNAND型フラッシュメモリ5から読み出し、これら読み出した全てのデータ(パリティを含む)をエラーと共にホスト2へ返す。
ページリードエラー(rid=1,vid=12,page=2,[x2,x4,x5,x6,p1])
ホスト2はこのエラーを受信すると、ホスト2側のパリティキャッシュ50Aを検索する。リード対象のデータを含むパリティグループのパリティがパリティキャッシュ50Aにあれば、それを用いてリード対象のデータx3を復元してもよい。
この例では、p2、p3を所持しているため、[x2,x4,x5,x6,p1,p2,p3]のうち任意の6個のデータを用いてx3を復元することができる。
また、ホスト2は、RAID読み込みでデータが復元できない場合にSSD3が取るべき処置の内容を、SSD3に明示的に指示してもよい。
例えば、ホスト2は、SSD3に対して、RAID読み込みでデータが復元できない場合にはダイ衝突を起こさずに読み出せるデータ(パリティを含む)を全て読み出し且つ読み出したデータをエラー(ページリードエラー)と共にホスト2へ返すように指示してもよい。
あるいは、ホスト2は、SSD3に対して、RAID読み込みでデータが復元できない場合にはダイ衝突を起こさずに読み出せるデータの読み出しを全く行わず、単にエラーのみをホスト2へ返すように指示してもよい。
あるいは、ホスト2は、SSD3に対して、RAID読み込みでデータが復元できない場合には該データが読み出せるようになるまで待ち、それから該データを読み出して、そのデータをホスト2へ返すように指示してもよい。
また、SSD3のコントローラ4は、パリティキャッシュ6Aのエントリを削除する際には、この処理の内容をホスト2に通知してもよい。その様子を図27に示す。図27の例では、図27では、SSD3内のパリティキャッシュ6Aから、(rid1、vid12、page=0)が削除される場合が例示されている。この場合、コントローラ4は、以下の通知(パリティキャッシュドロップ)をホスト2に送信する。
パリティキャッシュドロップ(rid=1,vid=12,page=0,[p2,p3])
ホスト2は、この通知を受けた場合、もし、パリティキャッシュドロップによって通知されたエントリと同一のエントリがホスト2側のパリティキャッシュ50Aに存在すねならば、このエントリを優先的に保護してもよい。すなわち、このエントリを優先的に削除対象から除外するといった処理を行ってもよい。
図28のフローチャートは、SSD3のコントローラ4によって実行されるパリティ削除およびパリティ通知処理の手順を示す。
コントローラ4は、SSD3の空き容量(つまり、NAND型フラッシュメモリ5の空き容量)をチェックする(ステップS701)。SSD3の空き容量が閾値よりも少ない場合(ステップS702のYES)、コントローラ4は、削除対象のパリティをパリティキャッシュ6Aに格納する(ステップS703)。例えば、max_m=3の領域においてはパリティp1、p2、p3がそれぞれ格納されている3つの物理ブロックが存在するので、例えば、最初に、パリティp1、p2、p3の一つ(例えばp2)が削除対象のパリティとして選択されてもよい。
次いで、コントローラ4は、削除対象のパリティをホスト2に通知し(ステップS704)、そして削除対象のパリティが格納されている物理ブロックを解放する(ステップS705)。ステップS705では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ(例えばp2)が削除される。
次に、コントローラ4は、「max_m − 1」を求め、「max_m − 1」がmin_mと等しいか否かをチェックする(ステップS706)。
「max_m − 1」がmin_mと等しくないならば(ステップS706のNO)、コントローラ4は、残りのパリティp1、p3の一つ(例えばp3)を削除対象のパリティとして選択し、この削除対象のパリティをパリティキャッシュ6Aに格納し(ステップS703)、この削除対象のパリティをホスト2に通知する(ステップS704)。次いで、コントローラ4は、削除対象のパリティが格納されている物理ブロックを解放する(ステップS705)。ステップS705では、削除対象のパリティが格納されている物理ブロックが解放されることによってパリティ(例えばp3)が削除される。
そして、コントローラ4は、「max_m − 1」を求め、「max_m − 1」がmin_mと等しいか否かをチェックする(ステップS706)。
「max_m − 1」がmin_mと等しいならば(ステップS706のYES)、コントローラ4は、処理を終了する。
なお、例えば、max_m=3、min_m=1の領域においては、パリティp1、p2、p3がそれぞれ格納されている3つの物理ブロックの内、2つの物理ブロックを同時に解放してもよい。この場合、コントローラ4は、例えば、2つのパリティp2、p3を削除対象のパリティとして選択してもよい。これらパリティp2、p3は同じパリティグループ識別子を共有している。したがって、ステップS704では、パリティp2、p3とこれらパリティp2、p3に共通のパリティグループ識別子とがホスト2に通知されてもよい。
図29のフローチャートは、SSD3のコントローラ4によって実行されるパリティ削除およびパリティ通知処理の別の手順を示す。
SSD3がホスト2からのリード要求を受信すると(ステップS801のYES)、コントローラ4は、リード要求によって指定された記憶位置に対応するダイ(つまり、リードすべき目的のデータが格納されているダイ)にダイ衝突が起きているか否かを判定する(ステップS802)。
ダイ衝突が起きている場合(ステップS802のYES)、コントローラ4は、リード要求によって指定されたデータが属するパリティグループのデータおよびパリティをリードする(ステップS803)。このパリティグループのあるパリティが削除されている場合には、ステップS803では、リード要求によって指定されたリード対象データと削除されパリティとを除くこのパリティグループのデータおよびパリティがNAND型フラッシュメモリ5から読み出される。続いて、コントローラ4は、読み出したパリティグループのデータおよびパリティを使用して、リード要求によって指定されたデータを復元し(ステップS804)、復元したデータをホスト2に返す(ステップS805)。
続いて、コントローラ4は、復元されたデータと、読み出したパリティグループのデータとを使用して、削除されたパリティを再算出し(ステップS806)、その再算出されたパリティをそのパリティグループ識別子と一緒にパリティキャッシュ6Aに格納する(ステップS807)。さらに、コントローラ4は、再算出されたパリティをそのパリティグループ識別子と一緒にホスト2に通知する(ステップS808)。
ダイ衝突が起きていない場合(ステップS802のNO)、コントローラ4は、リード要求によって指定されたデータを、このデータが格納されているダイからリードし、リードしたデータをホスト2に返す(ステップS809)。
図30のフローチャートは、ホスト2によって実行されるリード要求送信処理の手順を示す。
ホスト2がリード要求を送信しようとする際に、ホスト2は、ホスト2側のパリティキャッシュ50Aを参照し(ステップS901)、このリード要求によって指定されるリード対象データに対応するパリティグループのパリティがホスト2側のパリティキャッシュ50Aに存在するか否かを判定する(ステップS902)。例えば、リード要求によって指定されるSSDアドレスが(rid=1、vid=12、page=0)であるならば、(rid=1、vid=12、page=0)と同じパリティグループ識別子(パリティグループid)を持つエントリがホスト2側のパリティキャッシュ50Aから検索される。
リード要求によって指定されるリード対象データに対応するパリティグループのパリティがホスト2側のパリティキャッシュ50Aに存在するならば(ステップS902のYES)、ホスト2は、ホスト2側のパリティキャッシュ50Aからこのパリティとこのパリティに対応するパリティグループidとを取得する(ステップS903)。そして、ホスト2は、その取得したパリティとこのパリティに対応するパリティグループidと含むリード要求(リードコマンド)を、SSD3に送信する(ステップS904)。
一方、対応するパリティがホスト2側のパリティキャッシュ50Aに存在しないならば(ステップS902のNO)、ホスト2は、パリティおよびパリティグループidを含まない、通常のリード要求(リードコマンド)をSSD3に送信する(ステップS905)。
図31は、ホスト2がパリティキャッシュドロップ通知を受信した際にホストによって実行されるパリティ保護処理の手順を示す。
ホスト2がSSD3からパリティキャッシュドロップ通知を受信した場合(ステップS1001のYES)、ホスト2は、ホスト2側のパリティキャッシュ50Aを参照して、パリティキャッシュドロップ通知によって通知されたパリティグループのパリティが格納されているエントリがパリティキャッシュ50Aに存在するか否かを判定する(ステップS1002)。
通知されたパリティグループのパリティが格納されているエントリがパリティキャッシュ50Aに存在する場合(ステップS1003のYES)、ホスト2は、通知されたパリティグループのパリティが格納されているエントリを他のエントリよりも優先的にホスト側のパリティキャッシュ50Aに残すための処理を行う(ステップS1004)。すなわち、通常は、ホスト2は、LRUに代表されるアルゴリズムを使用してホスト側のパリティキャッシュ50Aのパリティそれぞれの削除順序(追い出し順序)を決定するが、パリティキャッシュドロップ通知を受信した場合には、通知されたパリティの削除順序を変更してこのパリティを他のパリティよりも優先的にホスト側のパリティキャッシュ50Aに残す。これにより、SSD3内で失われたパリティがホスト側のパリティキャッシュ50Aに存在する確率を高めることができる。
<書き込みのスロットリング>
SSD3のコントローラ4は、全ての領域(全てのRAID読み込み可能領域)におけるダイ衝突可能性がこれら領域それぞれに対応する制約を満たすように、あるいは全ての領域から選択された少なくとも一つの領域(少なくとも一つのRAID読み込み可能領域)におけるダイ衝突可能性がその領域に対応する制約を満たすように、ホスト2からのデータ書き込みの速度を制限してもよい。ここで、各領域に対応する制約とは、その領域のRAID読み込みで回避可能なダイ衝突数、つまりその領域のmの数に相当する。
例えば、コントローラ4は、各領域(RAID読み込み可能領域)毎に、その領域に割り当てられているダイの組み合わせを求める。ある領域に割り当てられているダイの組み合わせをダイグループと呼ぶ。図11の仮想ブロック管理テーブル33Cの例では、rid=1のRAID読み込み可能領域のダイグループは、(d7,d6,d13,d9,d2,d8,d15,d11,d3)となる。
例えば、コントローラ4は、ホスト2から受信された書き込み要求それぞれをリストやキューによって管理し、これら書き込み要求の中から、次に実行すべき書き込み要求を、評価関数を用いて選択してもよい。この場合、コントローラ4は、全ての領域(全てのRAID読み込み可能領域)におけるダイ衝突可能性がこれら領域それぞれに対応する制約を満たすように、ホスト2から受信された書き込み要求それぞれの実行タイミングをスケジューリングしてもよい。あるいは、コントローラ4は、RAID読み込み可能領域それぞれに優先順位を付け、最も優先すべきRAID読み込み可能領域のダイグループに対して同時に実行される書き込み動作の数がこの最も優先すべきRAID読み込み可能領域のパリティ数m以下に制限されるように、これら書き込み要求それぞれの実行タイミングをスケジューリングしてもよい。
以下、説明を簡単にするために、SSD3が16個のダイd0〜d15を備えており、4つの領域のダイグループが以下のように分類され、且つ各グループがk=3、m−1のRAID構成を有する場合を想定する。
領域#1のダイグループ:(d0,d1,d2,d3)
領域#2のダイグループ:(d4,d5,d6,d7)
領域#3のダイグループ:(d8,d9,d10,d11)
領域#4のダイグループ:(d12,d13,d14,d15)
いま、16個のダイd0〜d15それぞれに対する16個の書き込み要求がホスト2から受信されたとする。この場合、コントローラ4は、各ダイグループにおいて同時に一つの書き込み動作しか起こらないように16個の書き込み要求をスケジューリングしてもよい。例えば、最初は、16個の書き込み要求から、d0への書き込み要求、d4への書き込み要求、d8への書き込み要求、d12への書き込み要求が選択され、これら書き込み要求に対応する書き込み動作が実行されてもよい。いずれかの書き込み動作が完了した場合、例えば、d0の書き込み動作が完了した場合、残りの書き込み要求から、領域#1のダイグループ内の別のダイへの書き込み要求が次に実行されるべき書き込み要求として選択されてもよい。
なお、各領域に割り当てるべきダイそれぞれをランダムに選択するケースにおいては、幾つかのダイが複数の領域(RAID読み込み可能領域)間で共通に使用される。しかも、実際には、割り当てられるダイ数も領域毎に異なる。このため、実際には、全ての領域のダイ衝突可能性がそれら領域の制約を満たすように書き込み要求をスケジュールすることは難しい場合がある。よって、各領域に割り当てるべきダイそれぞれをランダムに選択するケースにおいては、全ての領域から選択された少なくとも一つの領域におけるダイ衝突可能性がその領域に対応する制約を満たすように、ホスト2からの書き込み要求をスケジューリングしてもよい。
例えば、図32の例では、4つのダイグループ#1、#2、#3、#4に優先順位が付けられており、ダイグループ#1が最も優先順位の高いダイグループである。ダイグループ#1にはk1+m1個のダイが割り当てられている。この場合、コントローラ4は、ホスト2から受信される書き込み要求それぞれの実行タイミングをスケジューリングすることによって、ダイグループ#1に対応するk1+m1個のダイに対して同時に実行される書き込み動作の数をm1以下に制限してもよい。
<パリティ算出方法/パリティ構成を可変にする>
次に、パリティ算出方法およびパリティ構成を可変にすることについて説明する。
ホスト2は、ユーザは、SSD3に対して任意のk+mを動的に宣言するだけではなく、ホスト2のワークロード等を踏まえて、使用すべきパリティ算出方法を領域毎に指定してもよい。使用可能なパリティ算出方法としては、XORパリティ、Pパリティ/Qパリティ(P+Q)、リードソロモン(Reed Solomon)、等が挙げられる。例えば、m=1の領域についてはXORパリティを使用し、m=2の領域についてはP+Qパリティを使用し、m>2の領域についてはリードソロモン(Reed Solomon)を使用してもよい。
また、ホスト2は、使用すべきパリティ構成として、LRC(Local Reconstruction Codes)を指定してもよい。LRCを使用した場合には、ダイ衝突によってすぐにはリードできないデータを、より少ない数のデータおよびパリティによって復元することができるため、よりテイルリードレイテンシが改善されることが期待できる。
また、ホスト2は、使用すべきパリティ構成として、図33に示すような二次元パリティを指定してもよい。px1〜px4は、水平方向に配置されたデータ部それぞれから算出されるパリティである。すなわち、例えば、px1は、(x1,x2,x3,x4)を対象としたパリティであり、py5は、(py1,py2,py3,py4)を対象としたパリティである。py1〜py5は、垂直方向に配置されたデータ部それぞれから算出されるパリティである。すなわち、例えば、py1は、(x1,x5,x9,x13)を対象としたパリティであり、py5は(px1,px2,px3,px4)を対象としたパリティである。これにより、許容できるダイ衝突のパターンをより広くすることができる。図33の二次元パリティは、k=16、m=9のRAID構成の一種として扱うことができる。
また、SSD3のコントローラ4は、事前に該SSD3が提供できる全てのパリティ算出方法をホスト2に報告してもよい。ホスト2は、これらパリティ算出方法の中から、使用すべきパリティ算出方法を選択する。パリティ算出方法は領域毎に選択し得る。パリティ算出方法がホスト2から指定されなかった場合には、SSD3のコントローラ4が、使用すべきパリティ算出方法を自動的に選択してもよい。
同様に、SSD3のコントローラ4は、事前に該SSD3が提供できる全てのパリティ構成(1次元パリティ、2次元パリティ、LRC、等)をホスト2に報告してもよい。ホスト2は、これらパリティ構成の中から、使用すべきパリティ構成を選択する。パリティ構成は領域毎に選択し得る。パリティ構成がホスト2から指定されなかった場合には、SSD3のコントローラ4が、使用すべきパリティ構成を自動的に選択してもよい。
図34は、ホスト2として機能する情報処理装置(コンピューティングデバイス)のハードウェア構成例を示す。
この情報処理装置は、サーバ(例えばストレージサーバ)のようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ(CPU)101、メインメモリ102、BIOS−ROM103、ネットワークコントローラ105、周辺インタフェースコントローラ106、コントローラ107、およびエンベデッドコントローラ(EC)108等を含む。
プロセッサ101は、この情報処理装置の各コンポーネントの動作を制御するように構成されたCPUである。このプロセッサ101は、複数のSSD3のいずれか1つからメインメモリ102にロードされる様々なプログラムを実行する。メインメモリ102は、DRAMのようなランダムアクセスメモリから構成される。このランダムアクセスメモリ上のある記憶領域が上述のホスト側パリティキャッシュ50Aとして使用される。プロセッサ101によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ41、OS42、ファイルシステム43、RAIDパラメータ指定部43A、パリティキャッシュ管理部43Bを含む。
また、プロセッサ101は、不揮発性メモリであるBIOS−ROM103に格納された基本入出力システム(BIOS)も実行する。BIOSはハードウェア制御のためのシステムプログラムである。
ネットワークコントローラ105は、有線LANコントローラ、無線LANコントローラのような通信デバイスである。周辺インタフェースコントローラ106は、USBデバイスのような周辺デバイスとの通信を実行するように構成されている。
コントローラ107は、複数のコネクタ107Aにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のSSD3が複数のコネクタ107Aにそれぞれ接続される。コントローラ107は、SAS expander、PCIe Switch、PCIe expander、フラッシュアレイコントローラ、またはRAIDコントローラ等である。
EC108は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。EC108は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。EC108はワンチップマイクロコントローラのような処理回路として実現されている。EC108は、キーボード(KB)などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
図35は、複数のSSD3とホスト2とを含む情報処理装置(コンピューティングデバイス)の構成例を示す。
この情報処理装置は、ラックに収容可能な薄い箱形の筐体201を備える。多数のSSD3は筐体201内に配置されても良い。この場合、各SSD3は筐体201の前面201Aに設けられたスロットに取り外し可能に挿入されてもよい。
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、CPU101、メモリ102、ネットワークコントローラ105、コントローラ107を含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
以上説明したように、本実施形態によれば、ホスト2がkとmの任意の組み合わせをSSD3内の領域毎に指定することを可能とし、これによって容量効率/ダイ衝突耐性に関する異なる特性を有する複数の領域(パリティを用いたダイ衝突回避読み込み可能領域)をSSD3内に共存させることができる。すなわち、RAIDの一つのパリティグループを構成するデータ部の数およびパリティの数をNAND型フラッシュメモリ5の領域毎に指定するホスト2からの要求に基づいて、NAND型フラッシュメモリ5内の第1領域に対応するデータ数およびパリティ数を示すkおよびmの組と、kおよびmの組みと異なるk’およびm’の組であって、NAND型フラッシュメモリ5内の第2領域に対応するデータ数およびパリティ数を示すk’およびm’の組とが管理される。そして、第1領域に対するホスト2からの書き込み要求に基づいて、ホスト2から受信されるk個のデータ部とm個のパリティとが、k+m個の異なる不揮発性メモリダイから一つずつ選出されるk+m個の物理ブロックに跨がって書き込まれる。これにより、ホスト2からの書き込みデータを、k個のデータ部とm個のパリティとを含むパリティグループとしてNAND型フラッシュメモリ5に格納することができ、最大でm個までのダイ衝突を回避することができる。また、第2領域に対するホスト2からの書き込み要求に基づいて、ホスト2から受信されるk’個のデータ部とm’個のパリティとをが、k’+m’個の異なる不揮発性メモリダイから一つずつ選出されるk’+m’個の物理ブロックに跨がって書き込まれる。これにより、ホスト2からの書き込みデータを、k’個のデータ部とm’個のパリティとを含むパリティグループとしてNAND型フラッシュメモリ5に格納することができ、最大でm’個までのダイ衝突を回避することができる。
したがって、パリティを使用することにより、書き込み動作を実行中のダイへのリード要求が発生するというダイ衝突に対する耐性を改善できる。しかも、データ部の数とパリティ数との組み合わせが領域間で互いに異なるので、容量効率/ダイ衝突耐性に関する異なる特性を有する複数の領域をSSD3内に共存させることができる。
なお、本実施形態では、不揮発性メモリとしてNANDメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、21…ライト動作制御部、22…リード動作制御部、23…RAID読み込み可能領域制御部。

Claims (15)

  1. ホストに接続可能なメモリシステムであって、
    並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリと、
    前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
    前記コントローラは、
    RAIDの一つのパリティグループを構成するデータ部の数およびパリティの数を前記不揮発性メモリ内の領域毎に指定する前記ホストからの要求に基づいて、前記不揮発性メモリ内の第1領域に対応するデータ数およびパリティ数を示すkおよびmの組と、前記kおよびmの組みと異なるk’およびm’の組であって、前記不揮発性メモリ内の第2領域に対応するデータ数およびパリティ数を示すk’およびm’の組とを管理し、
    前記第1領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるk個のデータ部と、前記k個のデータ部から算出されるm個のパリティとを、前記複数の不揮発性メモリダイ内のk+m個の異なる不揮発性メモリダイから一つずつ選出されるk+m個の物理ブロックに跨がって書き込み、
    前記第2領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるk’個のデータ部と、前記k’個のデータ部から算出されるm’個のパリティとを、前記複数の不揮発性メモリダイ内のk’+m’個の異なる不揮発性メモリダイから一つずつ選出されるk’+m’個の物理ブロックに跨がって書き込むように構成されている、メモリシステム。
  2. 前記kおよび前記k’は2以上の整数、前記mは1以上の整数、前記m’は前記mよりも小さい0以上の整数である請求項1記載のメモリシステム。
  3. 前記k’+m’に対する前記k’の比率は、前記k+mに対する前記kの比率よりも大きい請求項1記載のメモリシステム。
  4. 前記第1領域に対する前記書き込み要求は、前記第1領域の識別子と、前記第1領域における第1書き込み先仮想ブロックの識別子とを含み、前記第2領域に対する前記書き込み要求は、前記第2領域の識別子と前記第2領域における第2書き込み先仮想ブロックの識別子とを含み、
    前記コントローラは、
    前記第1領域の識別子と前記第1書き込み先仮想ブロックの識別子とを含む前記書き込み要求が前記ホストから受信された場合、前記複数の不揮発性メモリダイ内のk+m個の異なる不揮発性メモリダイから一つずつ選出されるk+m個の物理ブロックを前記第1領域の前記第1書き込み先仮想ブロック用に割り当て、
    前記ホストから受信される連続するk個のデータ部と前記k個のデータ部のためのm個のパリティとを、前記第1領域の前記第1書き込み先仮想ブロック用に割り当てられた前記k+m個の物理ブロックに跨がって書き込むように構成されている請求項1記載のメモリシステム。
  5. 前記コントローラは複数のネームスペースを管理するように構成され、
    前記第1領域は前記複数のネームスペース内の第1ネームスペースであり、前記第2領域は前記複数のネームスペース内の第2ネームスペースであり、
    前記第1領域に対する前記書き込み要求は、前記第1ネームスペースの識別子を含み、前記第2領域に対する前記書き込み要求は、前記第2ネームスペースの識別子を含む請求項1記載のメモリシステム。
  6. 前記第1領域は第1論理アドレス範囲を示し、前記第2領域は第2論理アドレス範囲を示し、
    前記第1領域に対する前記書き込み要求は、前記第1論理アドレス範囲に属する論理アドレスを書き込み先論理アドレスとして含み、前記第2領域に対する前記書き込み要求は、前記第2論理アドレス範囲に属する論理アドレスを書き込み先の論理アドレスとして含む請求項1記載のメモリシステム。
  7. 前記コントローラは、前記不揮発性メモリの空き容量が閾値よりも少なくなった場合、前記m個のパリティの少なくとも一つまたは前記m’個のパリティの少なくとも一つを前記不揮発性メモリから削除して前記不揮発性メモリの空き容量を増やすように構成されている請求項1記載のメモリシステム。
  8. 前記コントローラは、前記不揮発性メモリから削除されるパリティを、前記メモリシステム内のランダムアクセスメモリ上のキャッシュエリアに保存する請求項7記載のメモリシステム。
  9. 前記コントローラは、前記不揮発性メモリから削除されたパリティが属する第1パリティグループ内のデータ部のリードが前記ホストから要求され、且つ前記リードの対象のデータ部が格納されている不揮発性メモリダイが書き込み処理を実行中である場合、前記削除されたパリティおよび前記リードの対象のデータ部を除く前記第1パリティグループの内容を前記不揮発性メモリから読み出し、前記読み出された前記第1パリティグループの内容を使用して前記リードの対象のデータ部を復元し、前記復元されたリードの対象のデータ部と前記読み出された前記第1パリティグループの内容を使用して前記削除されたパリティを再算出し、前記削除されたパリティを保存するために、前記再算出されたパリティを前記メモリシステム内のランダムアクセスメモリ上のキャッシュエリアに保存する請求項7記載のメモリシステム。
  10. 前記コントローラは、前記不揮発性メモリまたは前記キャッシュエリアに格納されているパリティそれぞれの削除順序を決定し、リード対象領域を予告する通知を前記ホストから受信した場合、前記リード対象領域のパリティに関する削除順序を変更することによって前記リード対象領域のパリティを前記不揮発性メモリまたは前記キャッシュエリアに優先的に残すように構成されている請求項8記載のメモリシステム。
  11. 前記コントローラは、前記キャッシュエリアからパリティを削除する場合、削除対象のパリティとこの削除対象のパリティが属するパリティグループの識別子とを前記ホストに通知するように構成されている請求項8記載のメモリシステム。
  12. 前記コントローラは、前記ホストから受信される書き込み要求それぞれの実行タイミングをスケジューリングすることによって、前記第1領域に対応する前記k+m個の不揮発性メモリダイに対して同時に実行される書き込み動作の数を前記m以下に制限するように構成されている請求項1記載のメモリシステム。
  13. 並列動作可能な複数の不揮発性メモリダイを備える不揮発性メモリを制御する制御方法であって、
    RAIDの一つのパリティグループを構成するデータ部の数およびパリティの数を前記不揮発性メモリ内の領域毎に指定するホストからの要求に基づいて、前記不揮発性メモリ内の第1領域に対応するデータ数kおよびパリティ数mと、前記不揮発性メモリ内の第2領域に対応するデータ数k’およびパリティ数m’とを管理することと、
    前記第1領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるk個のデータ部と、前記k個のデータ部のためのm個のパリティとを、前記複数の不揮発性メモリダイ内のk+m個の異なる不揮発性メモリダイから一つずつ選出されるk+m個の物理ブロックに跨がって書き込むことと、
    前記第2領域に対する前記ホストからの書き込み要求に基づいて、前記ホストから受信されるk’個のデータ部と、前記k’個のデータ部のためのm’個のパリティとを、前記複数の不揮発性メモリダイ内のk’+m’個の異なる不揮発性メモリダイから一つずつ選出されるk’+m’個の物理ブロックに跨がって書き込むこととを具備する制御方法。
  14. 前記kおよび前記k’は2以上の整数、前記mは1以上の整数、前記m’は前記mよりも小さい0以上の整数である請求項13記載の制御方法。
  15. 前記k’+m’に対する前記k’の比率は、前記k+mに対する前記kの比率よりも大きい請求項13記載の制御方法。
JP2016215831A 2016-11-04 2016-11-04 メモリシステムおよび制御方法 Pending JP2018073312A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016215831A JP2018073312A (ja) 2016-11-04 2016-11-04 メモリシステムおよび制御方法
US15/802,331 US10528464B2 (en) 2016-11-04 2017-11-02 Memory system and control method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016215831A JP2018073312A (ja) 2016-11-04 2016-11-04 メモリシステムおよび制御方法

Publications (1)

Publication Number Publication Date
JP2018073312A true JP2018073312A (ja) 2018-05-10

Family

ID=62064370

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016215831A Pending JP2018073312A (ja) 2016-11-04 2016-11-04 メモリシステムおよび制御方法

Country Status (2)

Country Link
US (1) US10528464B2 (ja)
JP (1) JP2018073312A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113129978A (zh) * 2019-12-30 2021-07-16 美光科技公司 使用奇偶校验增加存储器存取并行性
CN114115716A (zh) * 2020-08-27 2022-03-01 美光科技公司 使用半良块的存储器装置虚拟块
CN115080466A (zh) * 2021-03-11 2022-09-20 西部数据技术公司 简化的高容量管芯和块管理
US11977775B2 (en) 2021-09-15 2024-05-07 Kioxia Corporation Memory system
US12007860B2 (en) 2020-08-27 2024-06-11 Micron Technology, Inc. Salvaging bad blocks in a memory device

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10761743B1 (en) 2017-07-17 2020-09-01 EMC IP Holding Company LLC Establishing data reliability groups within a geographically distributed data storage environment
US12007886B2 (en) * 2018-09-12 2024-06-11 International Business Machines Corporation Addressing page-correlated read issues using intra-block parity
US10929069B2 (en) * 2018-09-12 2021-02-23 International Business Machines Corporation Addressing page-correlated read issues using intra-block parity
US11436203B2 (en) 2018-11-02 2022-09-06 EMC IP Holding Company LLC Scaling out geographically diverse storage
US11748004B2 (en) 2019-05-03 2023-09-05 EMC IP Holding Company LLC Data replication using active and passive data storage modes
US11449399B2 (en) 2019-07-30 2022-09-20 EMC IP Holding Company LLC Mitigating real node failure of a doubly mapped redundant array of independent nodes
US11449248B2 (en) 2019-09-26 2022-09-20 EMC IP Holding Company LLC Mapped redundant array of independent data storage regions
US11435910B2 (en) 2019-10-31 2022-09-06 EMC IP Holding Company LLC Heterogeneous mapped redundant array of independent nodes for data storage
US11435957B2 (en) 2019-11-27 2022-09-06 EMC IP Holding Company LLC Selective instantiation of a storage service for a doubly mapped redundant array of independent nodes
CN111522686B (zh) * 2020-03-27 2023-11-10 北京经纬恒润科技股份有限公司 一种非易失性数据的读写方法及装置
US11507308B2 (en) 2020-03-30 2022-11-22 EMC IP Holding Company LLC Disk access event control for mapped nodes supported by a real cluster storage system
KR20210131058A (ko) * 2020-04-23 2021-11-02 에스케이하이닉스 주식회사 메모리 시스템 내 데이터를 보호하는 장치 및 방법
US11106390B1 (en) 2020-04-24 2021-08-31 Seagate Technology Llc Combining in-process reads to reduce die collisions
US11698734B2 (en) 2020-07-22 2023-07-11 Seagate Technology Llc Collision reduction through just-in-time resource allocation
US11822817B2 (en) 2020-07-31 2023-11-21 Seagate Technology Llc Ordering reads to limit collisions in a non-volatile memory (NVM)
US11693596B2 (en) 2020-08-13 2023-07-04 Seagate Technology Llc Pre-emptive storage strategies to reduce host command collisions
US11693983B2 (en) 2020-10-28 2023-07-04 EMC IP Holding Company LLC Data protection via commutative erasure coding in a geographically diverse data storage system
US11579964B2 (en) * 2020-12-22 2023-02-14 Micron Technology, Inc. Parity data in dynamic random access memory (DRAM)
US11847141B2 (en) 2021-01-19 2023-12-19 EMC IP Holding Company LLC Mapped redundant array of independent nodes employing mapped reliability groups for data storage
US11625174B2 (en) * 2021-01-20 2023-04-11 EMC IP Holding Company LLC Parity allocation for a virtual redundant array of independent disks
CN112965858B (zh) * 2021-03-04 2023-07-18 电信科学技术第五研究所有限公司 一种组网分布式存储数据冲突处理的实现方法
US11449234B1 (en) 2021-05-28 2022-09-20 EMC IP Holding Company LLC Efficient data access operations via a mapping layer instance for a doubly mapped redundant array of independent nodes
US11354191B1 (en) 2021-05-28 2022-06-07 EMC IP Holding Company LLC Erasure coding in a large geographically diverse data storage system

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9495241B2 (en) 2006-12-06 2016-11-15 Longitude Enterprise Flash S.A.R.L. Systems and methods for adaptive data storage
US8589625B2 (en) 2010-09-15 2013-11-19 Pure Storage, Inc. Scheduling of reconstructive I/O read operations in a storage environment
JP5639541B2 (ja) 2011-07-06 2014-12-10 株式会社日立ハイテクノロジーズ 光学式検査装置、検査システムおよび座標管理用ウエハ
US20130019057A1 (en) 2011-07-15 2013-01-17 Violin Memory, Inc. Flash disk array and controller
US9424128B2 (en) * 2011-08-12 2016-08-23 Futurewei Technologies, Inc. Method and apparatus for flexible RAID in SSD
WO2013076763A1 (en) * 2011-11-22 2013-05-30 Hitachi, Ltd. Storage system and control method of storage system
WO2015145617A1 (ja) * 2014-03-26 2015-10-01 株式会社日立製作所 ストレージシステム及び記憶制御方法
WO2016046970A1 (ja) 2014-09-26 2016-03-31 株式会社日立製作所 ストレージ装置
US9990263B1 (en) * 2015-03-20 2018-06-05 Tintri Inc. Efficient use of spare device(s) associated with a group of devices

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113129978A (zh) * 2019-12-30 2021-07-16 美光科技公司 使用奇偶校验增加存储器存取并行性
CN113129978B (zh) * 2019-12-30 2024-01-26 美光科技公司 使用奇偶校验增加存储器存取并行性
CN114115716A (zh) * 2020-08-27 2022-03-01 美光科技公司 使用半良块的存储器装置虚拟块
CN114115716B (zh) * 2020-08-27 2024-04-16 美光科技公司 使用半良块的存储器装置虚拟块
US12007860B2 (en) 2020-08-27 2024-06-11 Micron Technology, Inc. Salvaging bad blocks in a memory device
CN115080466A (zh) * 2021-03-11 2022-09-20 西部数据技术公司 简化的高容量管芯和块管理
US11977775B2 (en) 2021-09-15 2024-05-07 Kioxia Corporation Memory system

Also Published As

Publication number Publication date
US10528464B2 (en) 2020-01-07
US20180129600A1 (en) 2018-05-10

Similar Documents

Publication Publication Date Title
JP2018073312A (ja) メモリシステムおよび制御方法
US11429277B2 (en) Memory system for controlling nonvolatile memory
US11467955B2 (en) Memory system and method for controlling nonvolatile memory
US11151029B2 (en) Computing system and method for controlling storage device
JP6517684B2 (ja) メモリシステムおよび制御方法
JP6524039B2 (ja) メモリシステム及び制御方法
JP6414853B2 (ja) メモリシステムおよび制御方法
TWI644211B (zh) Memory system and control method for controlling non-volatile memory
JP6414852B2 (ja) メモリシステムおよび制御方法
JP6517685B2 (ja) メモリシステムおよび制御方法
KR102094236B1 (ko) 스토리지 디바이스 및 컴퓨터 시스템
TW201915742A (zh) 記憶體系統及控制非揮發性記憶體之控制方法
JP2018205936A (ja) ストレージ制御装置、ストレージ制御プログラムおよびストレージシステム
JP2017027388A (ja) メモリシステムおよび不揮発性メモリの制御方法
JP2016170583A (ja) メモリシステムおよび情報処理システム
AU2016397189B2 (en) Data check method and storage system
US10049042B2 (en) Storage device, semiconductor memory device, and method for controlling same
JP2019179571A (ja) メモリシステムおよび制御方法
US10365857B2 (en) Memory system
JP2021529406A (ja) システムコントローラおよびシステムガベージコレクション方法
US10861580B2 (en) Memory system for controlling nonvolatile memory
JP6721765B2 (ja) メモリシステムおよび制御方法
JP6552701B2 (ja) メモリシステムおよび制御方法
CN111367825A (zh) 存储设备的虚拟校验数据缓存
JP2019016383A (ja) メモリシステムおよび制御方法

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20170531

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180830