JP7074454B2 - 計算機システムおよび制御方法 - Google Patents

計算機システムおよび制御方法 Download PDF

Info

Publication number
JP7074454B2
JP7074454B2 JP2017209344A JP2017209344A JP7074454B2 JP 7074454 B2 JP7074454 B2 JP 7074454B2 JP 2017209344 A JP2017209344 A JP 2017209344A JP 2017209344 A JP2017209344 A JP 2017209344A JP 7074454 B2 JP7074454 B2 JP 7074454B2
Authority
JP
Japan
Prior art keywords
block
address
data
storage device
physical address
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.)
Active
Application number
JP2017209344A
Other languages
English (en)
Other versions
JP2019082817A (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.)
Kioxia Corp
Original Assignee
Kioxia 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 Kioxia Corp filed Critical Kioxia Corp
Priority to JP2017209344A priority Critical patent/JP7074454B2/ja
Priority to US16/017,195 priority patent/US10558563B2/en
Priority to TW109121852A priority patent/TWI765289B/zh
Priority to TW111114108A priority patent/TWI805323B/zh
Priority to CN201810887535.3A priority patent/CN109725848A/zh
Priority to TW107127263A priority patent/TWI700586B/zh
Publication of JP2019082817A publication Critical patent/JP2019082817A/ja
Priority to US16/740,680 priority patent/US11151029B2/en
Priority to US17/475,025 priority patent/US11669444B2/en
Application granted granted Critical
Publication of JP7074454B2 publication Critical patent/JP7074454B2/ja
Priority to US18/138,378 priority patent/US20230259452A1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/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
    • 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
    • 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
    • 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/0253Garbage collection, i.e. reclamation of unreferenced memory
    • 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/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • 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/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
    • 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/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7203Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
    • 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/7205Cleaning, compaction, garbage collection, erase control
    • 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

Description

本発明の実施形態は、不揮発性メモリを含むストレージデバイスを制御する技術に関する。
近年、不揮発性メモリを備えるストレージデバイスが広く普及している。このようなストレージデバイスの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。データセンターのサーバのような計算機システムにおいて利用されるストレージデバイスにおいては、高いI/O性能が求められている。このため、最近では、ホスト側とストレージデバイス側との間の新たなインタフェースが提案され始めている。
Yiying Zhang, 外, "De-indirection for flash-based SSDs with nameless writes." FAST. 2012, [online], [平成29年9月13日検索], インターネット<URL: https://www.usenix.org/system/files/conference/fast12/zhang.pdf >
しかし、不揮発性メモリに含まれる不良ブロックの数が増加すると、ストレージデバイス側では、不良ブロックを他のブロックに置換するための置換情報の量の増大、この置換の処理に起因するリード遅延時間の増加が引き起こされる場合がある。このことは、システム全体のI/O性能を低下させる要因とる場合がある。
本発明が解決しようとする課題は、I/O性能を改善することができる計算機システムおよび制御方法を提供することである。
実施形態によれば、各々が複数のブロックを含む複数の不揮発性メモリダイを備えるストレージデバイスを制御する計算機システムは、メモリと、前記メモリに電気的に接続され、前記メモリに格納されたコンピュータプログラムを実行するように構成されたプロセッサとを具備する。前記プロセッサは、書き込むべき第1のデータに対応する第1の論理アドレスと前記第1のデータの長さとを指定するライト要求を前記ストレージデバイスに送信する。前記プロセッサは、不良ブロックを除くブロックの中から前記第1のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第1のブロックおよび前記第1のデータが書き込まれた前記第1のブロック内の第1の物理記憶位置の双方を示す第1の物理アドレスと、前記第1の論理アドレスとを、前記ストレージデバイスから受信する。前記プロセッサは、論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第1のテーブルを更新して前記第1の論理アドレスに前記第1の物理アドレスをマッピングする。
ホストとメモリシステム(フラッシュストレージデバイス)との関係を示すブロック図。 フラッシュストレージデバイスとホストとの間の役割分担とを説明するための図。 フラッシュストレージデバイスの構成例を示すブロック図。 In-Drive-GC API用のコマンドを示す図。 スーパーブロックAPI用のコマンドを示す図。 フラッシュストレージデバイスに設けられたフラッシュI/O制御回路と複数のNAND型フラッシュメモリダイとの関係を示すブロック図。 複数のブロックの集合によって構築されるスーパーブロック(並列単位)の構成例を示す図。 スーパーブロックのブロックアドレスとこのスーパーブロックを構成する複数のブロックそれぞれのブロックアドレスとの関係を説明するための図。 ある不揮発性メモリダイに属する不良ブロックそれぞれをこの不揮発性メモリダイの他のブロックそれぞれによって置換する動作を説明するための図。 不良ブロックを置換することなく、スーパーブロック内の非不良ブロックの中から書き込み先ブロックを選択する動作を説明するための図。 フラッシュストレージデバイスに適用されるライトコマンドを説明するための図。 図11のライトコマンドに対するレスポンスを説明するための図。 フラッシュストレージデバイスに適用されるTrimコマンドを説明するための図。 不良ブロックを有するスーパーブロックにデータを書き込む動作を示す図。 図12のレスポンスに含まれる物理アドレスの構成例を示す図。 スーパーブロックのブロックアドレスとこのスーパーブロックに含まれる各ブロックのブロックアドレスとの関係を示す図。 論理アドレスとデータのペアをブロック内のページに書き込む動作を説明するための図。 データをブロック内のページのユーザデータ領域に書き込み、このデータの論理アドレスをこのページの冗長領域に書き込む動作を説明するための図。 複数のデータ部とこれらデータ部から算出される消失訂正符号とを不良ブロックを有するスーパーブロックに書き込む動作を説明するための図。 ホスト内のフラッシュトランスレーション部とフラッシュストレージデバイス内のライト動作制御部との関係を示すブロック図。 ホストとフラッシュストレージデバイスとによって実行されるライト動作およびリード動作を説明するためのブロック図。 ホストとフラッシュストレージデバイスとによって実行される書き込み動作処理のシーケンスを示すシーケンスチャート。 すでに書き込まれているデータに対する更新データを書き込むデータ更新動作を示す図。 フラッシュストレージデバイスによって管理されるブロック管理テーブルを更新する動作を説明するための図。 ホストによって管理されるルックアップテーブル(論理物理アドレス変換テーブル)を更新する動作を説明するための図。 無効化すべきデータに対応する物理アドレスを示すホストからの通知に応じてブロック管理テーブルを更新する動作を説明するための図。 フラッシュストレージデバイスに適用されるリードコマンドを説明するための図。 フラッシュストレージデバイスによって実行されるリード動作を説明するための図。 ホストとフラッシュストレージデバイスとによって実行されるリード処理のシーケンスを示すシーケンスチャート。 フラッシュストレージデバイスに適用されるガベージコレクション(GC)制御コマンドを説明するための図。 フラッシュストレージデバイスに適用される強制ガベージコレクション(GC)コマンドを説明するための図。 フラッシュストレージデバイスからホストに送信されるアドレス更新通知を説明するための図。 フラッシュストレージデバイスによって実行されるガベージコレクション(GC)動作の手順を示すシーケンスチャート。 ガベージコレクション(GC)のために実行されるデータコピー動作の例を説明するための図。 図34のデータコピー動作の結果に基づいて更新されるホストのルックアップテーブルの内容を説明するための図。 ライトコマンドに対するレスポンスとGC用コールバック処理(アドレス更新通知)との関係を説明するための図。 ホストによって実行されるルックアップテーブル更新処理の手順を示すフローチャート。 参照カウントを管理するためのブロック管理テーブルの構成例を示す図。 フラッシュストレージデバイスに適用されるデュプリケートコマンドを説明するための図。 ホストとフラッシュストレージデバイスとによって実行される参照カウントインクリメント/デクリメント処理を示すシーケンスチャート。 フラッシュストレージデバイスによって実行されるスーパーブロック割り当て処理の手順を示すフローチャート。 スーパーブロック内の全ての非不良ブロックがこのスーパーブロックの先頭から連続して論理的に配置されるようにアクセス対象ブロックのアドレスを変換するアドレス変換動作を説明するための図。 アドレス変換動作のために使用される不良情報管理テーブルとアドレス変換の例を説明するための図。 ホスト内のフラッシュトランスレーション部とフラッシュストレージデバイス内の不良ブロックトランスレーション部との関係を示すブロック図。 ホスト(計算機システム)の構成例を示すブロック図。 フラッシュストレージデバイスを内蔵するホストの構成例を示す図。 ホストによって実行される書き込み動作の手順を示すフローチャート。 ホストによって実行されるリード動作の手順を示すフローチャート。 ホストによって実行される参照カウントインクリメント/デクリメント処理の手順を示すフローチャート。
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、ホストとメモリシステムとの関係を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのフラッシュストレージデバイス3として実現されている。
ホスト(ホストデバイス)2は、複数のフラッシュストレージデバイス3を制御するように構成されている。ホスト2は、複数のフラッシュストレージデバイス3によって構成されるフラッシュアレイをストレージとして使用するように構成された計算機システムによって実現される。この計算機システムはサーバであってもよい。
なお、フラッシュストレージデバイス3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバのような計算機システムにケーブルまたはネットワークを介して接続されてもよい、ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のフラッシュストレージデバイス3)を制御するコントローラを含む。フラッシュストレージデバイス3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス3のホストとして機能してもよい。
以下では、サーバのような計算機システムがホスト2として機能する場合を例示して説明する。
ホスト(サーバ)2と複数のフラッシュストレージデバイス3は、インタフェース50を介して相互接続される(内部相互接続)。この内部相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
ホスト2として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク51を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。
ホスト(サーバ)2は、フラッシュアレイを構成する複数のフラッシュストレージデバイス3を管理するストレージ管理機能と、エンドユーザ端末61それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
従来型SSDにおいては、NAND型フラッシュメモリのブロック/ページの階層構造はSSD内のフラッシュトランスレーション層(FTL)によって隠蔽されている。つまり、従来型SSDのFTLは、(1)論理物理アドレス変換テーブルとして機能するルックアップテーブルを使用して、論理アドレスそれぞれとNAND型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する機能、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための機能、(3)NAND型フラッシュメモリのガベージコレクション(GC)を実行する機能、等を有している。論理アドレスそれぞれとNAND型フラッシュメモリの物理アドレスとの間のマッピングは、ホストからは見えない。NAND型フラッシュメモリのブロック/ページ構造もホストからは見えない。
一方、ホストにおいても、一種のアドレス変換(アプリケーションレベルアドレス変換)が実行されることがある。このアドレス変換は、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーション用の論理アドレスそれぞれとSSD用の論理アドレスそれぞれとの間のマッピングを管理する。また、ホストにおいても、SSD用の論理アドレス空間上に生じるフラグメントの解消のために、この論理アドレス空間上のデータ配置を変更するための一種のGC(アプリケーションレベルGC)が実行される場合がある。
しかし、ホストおよびSSDがそれぞれアドレス変換テーブルを有するという冗長な構成(SSDは論理物理アドレス変換テーブルとして機能するルックアップテーブルを有し、ホストはアプリケーションレベルアドレス変換テーブルを有する)においては、これらアドレス変換テーブルを保持するために膨大なメモリリソースが消費される。さらに、ホスト側のアドレス変換とSSD側のアドレス変換とを含む2重のアドレス変換は、システム全体のI/O性能を低下させる要因にもなる。
さらに、ホスト側のアプリケーションレベルGCは、SSDへのデータ書き込み量を実際のユーザデータ量の数倍(例えば2倍)程度に増やす要因となる。このようなデータ書き込み量の増加は、SSDのライトアンプリフィケーションを増加させてはいないが、システム全体のストレージ性能を低下させ、またSSDの寿命も短くする。
そこで、本実施形態では、FTLの役割はホスト2とフラッシュストレージデバイス3との間で分担される。ホスト2は論理物理アドレス変換テーブルとして機能するルックアップテーブルを管理するが、書き込みに使用すべきブロックおよびページは、ホスト2ではなく、フラッシュストレージデバイス3によって決定することができる。また、GCも、ホスト2ではなく、フラッシュストレージデバイス3によって実行することができる。以下では、ホスト2に移されたFTL機能をグローバルFTLと称する。
また、フラッシュストレージデバイス3は、書き込み/読み出し速度を上げるために、各々が複数のブロック(複数の物理ブロック)から構成される複数の並列単位(複数のスーパーブロック)を管理する。フラッシュストレージデバイス3は、ある並列単位内の複数のブロックに対する書き込み動作および読み出し動作を並列に実行することができる。
しかし、NAND型フラッシュメモリダイにはいくつかの不良ブロックが含まれるため、並列度を確保するため並列単位内の各不良ブロックを他のブロックで置き換えることが行われる場合がある。しかし、一つのNAND型フラッシュメモリダイ当たりに含まれる不良ブロックの数が増加すると、置き換えの管理のための情報量が増大する可能性がある。
一つの並列単位に含まれるブロックの数が64である場合を例にとると、並列単位を示すブロックアドレスから数学的規則で各ブロックのブロックアドレスを生成するケースにおいては、64個のブロック中の15番目のブロックをブロックアドレス2049のブロックで置き換える場合、15番目を表現するために少なくとも6ビット、2049を表現するために12ビットが必要である。置き換えるべきブロック数が多い場合にはそれに比例した情報量が必要である。置き換えるべきブロックの数を16個までとした場合には、18bit×16 = 294bitの情報が、並列単位毎に必要となる。
また、データリード動作においては、置き換え情報を使用して、不良ブロックを示すアドレスを置換先ブロックを示すアドレスに変換するためのアドレス変換を実行することが必要となる。このため、不良ブロックの数が増加すると、置き換え情報の増大に伴ってこのアドレス変換処理に要する時間が増えるので、リードレイテンシが増大する。
そこで、ホスト2からのデータを書き込むための書き込み動作においては、フラッシュストレージデバイス3は、書き込み対象の並列単位内の不良ブロックを避けてこの並列単位内の非不良ブロックの中から書き込み先ブロックを選択し、この書き込み先ブロック内の書き込み先位置を決定する。ホスト2からのデータは、この書き込み先位置に書き込まれる。そして、フラッシュストレージデバイス3は、この書き込み先ブロックおよびこの書き込み先ブロック内の書き込み位置の双方を示す物理アドレスをホスト2に通知する。これにより、ホスト2は、実際にデータが書き込まれたブロックとこのブロック内の書き込み先位置を認識できるので、このデータをリードする必要がある場合には、この物理アドレスを指定するリード要求をフラッシュストレージデバイス3に送信することができる。フラッシュストレージデバイス3は、このリード要求によって指定される物理アドレスに基づいて、上述の選択したブロック内の書き込み先位置からデータをリードすることができる。したがって、フラッシュストレージデバイス3では、アドレス変換処理が不要となり、リードレイテンシを低減することができる。
ホスト2のグローバルFTLは、ストレージサービスを実行する機能、ルックアップテーブル(LUT)を管理する機能、ウェアー制御機能、高可用性を実現するための機能、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除(De-duplication)機能、等を有していてもよい。
一方、フラッシュストレージデバイス3は、ローレベルアブストラクション(LLA)を実行することができる。LLAはNAND型フラッシュメモリのアブストラクションのための機能である。LLAは、データ配置を補助する機能等を含む。データ配置を補助する機能には、ユーザデータの書き込み先位置(ブロックアドレス、このブロック内の位置)を決定する機能、ユーザデータが書き込まれたこの書き込み先位置を示す物理アドレスを上位階層(ホスト2)に通知する機能、ガベージコレクションのためのコピー元ブロックとコピー先ブロックとを決定する機能、有効データのコピー先位置を上位階層(ホスト2)に通知する機能、等を含む。また、LLAは、フラッシュストレージデバイス3のリソース管理をドメイン(QoSドメイン)毎に実行するQoS制御機能も有している。
QoS制御機能には、QoSドメイン毎にアクセス単位(データの粒度)を決める機能が含まれる。アクセス単位は、ホスト2がライト/リードすることが可能な最小データサイズ(データの粒度)を示す。フラッシュストレージデバイス3は単一、あるいは複数のアクセス単位(データの粒度)をサポートしており、ホスト2は、フラッシュストレージデバイス3が複数のアクセス単位をサポートしている場合にはQoSドメイン毎に、使用すべきアクセス単位(データの粒度)をフラッシュストレージデバイス3に指示することができる。
また、QoS制御機能には、QoSドメイン間の性能干渉をできるだけ防ぐための機能が含まれている。この機能は、基本的には、安定したレイテンシを保つための機能である。
これを実現するために、フラッシュストレージデバイス3は、NAND型フラッシュメモリ内を複数の領域(複数のQoSドメイン)に論理的に分割してもよい。一つの領域(一つのQoSドメイン)は一つ以上の並列単位(スーパーブロック)を含む。各並列単位(スーパーブロック)はある一つの領域(QoSドメイン)のみに属する。
図2は、フラッシュストレージデバイス3とホスト2とを含むシステム全体の階層構造を表している。
ホスト(サーバ)2においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス401が実行される。仮想マシンサービス401上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション402が実行される。
また、ホスト(サーバ)2においては、複数のユーザアプリケーション402に対応する複数のI/Oサービス403が実行される。これらI/Oサービス403には、LBAベースのブロックI/Oサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各I/Oサービス403は、論理アドレスそれぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル(LUT)を含む。ここで、論理アドレスとは、アクセス対象のデータを識別可能な識別子(タグ)を意味する。この論理アドレスは、論理アドレス空間上の位置を指定する論理ブロックアドレス(LBA)であってもよいし、キー・バリュー・ストアのキーであってもよいし、ファイル名のようなファイル識別子であってもよい。
LBAベースのブロックI/Oサービスにおいては、論理アドレス(LBA)それぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するLUTが使用されてもよい。
キー・バリュー・ストアサービスにおいては、論理アドレス(キーのようなタグ)それぞれとこれら論理アドレス(つまり、キーのようなタグ)に対応するデータが格納されているフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するLUTが使用されてもよい。このLUTにおいては、タグと、このタグによって識別されるデータが格納されている物理アドレスと、このデータのデータ長との対応関係が管理されてもよい。
各エンドユーザは、使用すべきアドレッシング方法(LBA、キー・バリュー・ストアのキー、ファイル識別子、等)を選択することができる。
これら各LUTは、ユーザアプリケーション402からの論理アドレスそれぞれをフラッシュストレージデバイス3用の論理アドレスそれぞれに変換するのではなく、ユーザアプリケーション402からの論理アドレスそれぞれをフラッシュストレージデバイス3の物理アドレスそれぞれに変換する。つまり、これら各LUTは、フラッシュストレージデバイス3用の論理アドレスを物理アドレスに変換するテーブルとアプリケーションレベルアドレス変換テーブルとが統合(マージ)されたテーブルである。
ホスト(サーバ)2においては、上述のQoSドメイン毎にI/Oサービス403が存在する。あるQoSドメインに属するI/Oサービス403は、対応するQoSドメイン内のユーザアプリケーション402によって使用される論理アドレスそれぞれと対応するQoSドメインに割り当てられた領域の物理アドレスそれぞれとの間のマッピングを管理する。
ホスト(サーバ)2からフラッシュストレージデバイス3へのコマンドの送信およびフラッシュストレージデバイス3からホスト(サーバ)2へのコマンド完了のレスポンス等の返送は、ホスト(サーバ)2およびフラッシュストレージデバイス3の各々に存在するI/Oキュー500を介して実行される。これらI/Oキュー500も、複数のQoSドメインに対応する複数のキューグループに分類されていてもよい。
フラッシュストレージデバイス3は、複数のQoSドメインに対応する複数のライトバッファ(WB)601、複数のQoSドメインに対応する複数のガベージコレクション(GC)機能602、NAND型フラッシュメモリ(NANDフラッシュアレイ)603を含む。
図3は、フラッシュストレージデバイス3の構成例を示す。
フラッシュストレージデバイス3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。フラッシュストレージデバイス3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKm-1を含む。ブロックBLK0~BLKm-1の各々は多数のページ(ここではページP0~Pn-1)によって編成される。ブロックBLK0~BLKm-1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0~Pn-1の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0~Pn-1は、データ書き込み動作およびデータ読み込み動作の単位である。
コントローラ4は、Toggle、オープンNANDフラッシュインタフェース(ONFI)のようなフラッシュI/O制御回路13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラ(制御回路)である。
NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリダイを含む。コントローラ4は、上述の複数の並列単位(パラレルユニット)を管理する。各並列単位は、異なるNAND型フラッシュメモリダイにそれぞれ属する複数のブロック(複数の物理ブロック)を含むブロックグループであるスーパーブロックによって実現される。コントローラ4は、各並列単位(スーパーブロック)に含まれる複数のブロックに対する書き込み動作、読み出し動作を並列に実行することができる。複数の並列単位(スーパーブロック)の各々は、固有のスーパーブロックアドレス(第1のブロックアドレス)を有する。各不揮発性メモリダイ内の複数のブロックの各々は固有のブロックアドレス(第2のブロックアドレス)を有する。各並列単位(スーパーブロック)に含まれるべきブロックそれぞれのブロックアドレスは、各並列単位のスーパーブロックから数学的規則に基づいて定められる。
コントローラ4は、ホストインタフェース11、CPU12、フラッシュI/O制御回路13、およびDRAMインタフェース14等を含む。これらCPU12、フラッシュI/O制御回路13、DRAMインタフェース14は、バス10を介して相互接続される。
このホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってよい。ホストインタフェース11は、ホスト2から様々な要求(コマンド)を受信する。これら要求(コマンド)には、ライト要求(ライトコマンド)、リード要求(リードコマンド)、他の様々な要求(コマンド)が含まれる。
CPU12は、ホストインタフェース11、フラッシュI/O制御回路13、DRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、フラッシュストレージデバイス3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。このCPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、ライト動作制御部21、リード動作制御部22、およびGC動作制御部23として機能することができる。これらライト動作制御部21、リード動作制御部22、およびGC動作制御部23においては、図2に示すシステム構成を実現するためのアプリケーションプログラムインタフェース(API)が実装されている。
ライト動作制御部21は、書き込むべきデータ(ユーザデータ)を識別するための論理アドレス(タグ)を指定するライト要求(ライトコマンド)をホスト2から受信する。ライトコマンドを受信した場合、ライト動作制御部21は、まず、不良情報管理テーブル33を参照して、書き込み対象の並列単位(スーパーブロック)に含まれる不良でないブロック(非不良ブロック)の中から一つのブロックを書き込み先ブロックとして選択する。不良情報管理テーブル33は、各並列単位(スーパーブロック)に含まれるブロック毎に使用可能または使用不可能を示す少なくとも1ビットの情報を保持する不良情報を保持する。各スーパーブロックに対応する不良情報は、各スーパーブロックに含まれるブロックの数と同数のビットを含むビットマップであってもよい。ライト動作制御部21は、書き込み対象の並列単位(スーパーブロック)に対応する不良情報(不良情報管理テーブル33)を参照することにより、書き込み対象の並列単位内の各ブロックが不良ブロックまたは非不良ブロックのいずれであるかを認識することができる。
なお、不良情報は上述のビットマップに限定されず、例えば、各ブロックの消去回数(プログラム/イレーズサイクルの数)を示す情報を不良情報として代用してもよい。この場合、コントローラ4は、ある閾値以上の消去回数を有するブロックを不良ブロックであると判定してもよい。
不良ブロックは使用不可能なブロックであり、「バッドブロック」としても参照される。不良情報によって示される不良ブロック(バッドブロック)には、NAND型フラッシュメモリの製造過程で発生する不良ブロック(プライマリー不良ブロック)が含まれてもよいし、フラッシュストレージデバイス3の使用開始後に発生する不良ブロック(グロウン不良ブロック)が含まれてもよいし、これらプライマリー不良ブロックとグロウン不良ブロックの双方が含まれてもよい。
ライト動作制御部21は、選択した書き込み先ブロック内の書き込み先位置(ページ、およびこのページ内の位置)を決定する。次いで、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部21は、ホスト2からのデータのみならず、このデータとこのデータの論理アドレス(タグ)の双方を書き込み先ブロックに書き込むことができる。
そして、ライト動作制御部21は、指定された論理アドレス(タグ)と、書き込み先ブロックおよび書き込み先位置の双方を示す物理アドレスとをホスト2に返す。
この場合、この物理アドレスは、ダイ識別子と、物理ブロックアドレス(第2のブロックアドレス)と、オフセットとによって表されてもよい。ダイ識別子は、各不揮発性メモリダイに固有の識別子である。この物理アドレスに含まれるダイ識別子は、書き込み先ブロックが属する不揮発性メモリダイのダイ識別子を示す。物理ブロックアドレスは、各不揮発性メモリダイ内の複数のブロックそれぞれを識別するためのブロックアドレス(ブロック番号)である。この物理アドレスに含まれるブロックアドレスは、この書き込み先ブロックのブロックアドレスを示す。オフセットは、ブロック内オフセットである。この物理アドレスに含まれるオフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット(オフセット値)を示す。このオフセットは、書き込み先位置が属するページのページアドレスと、書き込み先位置に対応するページ内オフセットとによって表されてもよい。
あるいは、この物理アドレスは、スーパーブロックアドレス(第1のブロックアドレス)と、オフセットとによって表されてもよい。スーパーブロックアドレスは各スーパーブロックに固有のブロックアドレスである。この物理アドレスに含まれるスーパーブロックアドレスは、書き込み対象のスーパーブロックのスーパーブロックアドレスを示す。オフセットは、書き込み対象のスーパーブロックの先頭から書き込み先位置までのオフセット(オフセット値)を示す。このオフセットは、書き込み先ブロックが属する不揮発性メモリダイのダイ識別子と、書き込み先位置が属するページのページアドレスと、書き込み先位置に対応するページ内オフセットとによって表されてもよい。
物理アドレスは「フラッシュアドレス」としても参照される。
なお、ライトコマンドは、論理アドレス(タグ)を指定するだけでなく、スーパーブロックアドレスを指定してもよい。スーパーブロックアドレスを指定するライトコマンドを受信した場合、ライト動作制御部21は、複数のスーパーブロックの中から、ライトコマンドによって指定されたスーパーブロックアドレスを有するスーパーブロックを書き込み対象の並列単位(書き込み先スーパーブロック)として選択する。
リード動作制御部22は、物理アドレス(リード対象のブロックおよびこのブロック内のリード対象の位置を示す)を指定するリード要求(リードコマンド)をホスト2から受信した場合、この物理アドレスに基づいて、リード対象のブロック内のリード対象の位置からデータをリードする。
GC動作制御部23は、NAND型フラッシュメモリ5のガベージコレクションを実行する場合、このガベージコレクションのためのコピー元ブロック(GCソースブロック)およびコピー先ブロック(GCデスティネーションブロック)をNAND型フラッシュメモリ5内の多数のブロックから選択する。これらGCソースブロックおよびGCデスティネーションブロックの各々はスーパーブロックであってもよいし、物理ブロックであってもよい。
GC動作制御部23は、通常、複数のコピー元ブロック(GCソースブロック)と、一つ以上のコピー先ブロック(GCデスティネーションブロック)とを選択する。コピー元ブロック(GCソースブロック)を選択するための条件(GCポリシー)は、ホスト2によって指定されてもよい。例えば、有効データ量が最も少ないブロックをコピー元ブロック(GCソースブロック)として優先的に選択するというGCポリシーが使用されてもよいし、別のGCポリシーが使用されてもよい。このように、コピー元ブロック(GCソースブロック)およびコピー先ブロック(GCデスティネーションブロック)の選択は、ホスト2ではなく、フラッシュストレージデバイス3のコントローラ4(GC動作制御部23)によって実行される。コントローラ4は、各ブロック管理テーブルを使用して、各ブロックの有効データ量を管理してもよい。
有効データ/無効データの管理は、ブロック管理テーブル32を使用して実行されてもよい。このブロック管理テーブル32は、例えば、スーパーブロック毎に存在してもよい。あるスーパーブロックに対応するブロック管理テーブル32においては、このスーパーブロック内の各ブロックのデータそれぞれの有効/無効を示すビットマップフラグが格納されている。ここで、有効データとは、LUTから参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)であって、後にホスト2からリードされる可能性があるデータを意味する。無効データとは、もはやホスト2からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。
GC動作制御部23は、コピー元ブロック(GCソースブロック)内に格納されている有効データを書き込むべきコピー先ブロック(GCデスティネーションブロック)内の位置(コピー先位置)を決定し、有効データをコピー先ブロック(GCデスティネーションブロック)のこの決定された位置(コピー先位置)にコピーする。この場合、GC動作制御部23は、有効データとこの有効データの論理アドレスの双方を、コピー先ブロック(GCデスティネーションブロック)にコピーしてもよい。GC動作制御部23は、コピー元ブロック(GCソースブロック)に対応するブロック管理テーブル32を参照することによってGCソースブロック内の有効データを特定してもよい。あるいは、別の実施形態では、ホスト2が、GCソースブロックとGCデスティネーションブロックとを指定してもよい。これらGCソースブロックとGCデスティネーションブロックはスーパーブロックであってもよいし、物理ブロックであってもよい。
そして、GC動作制御部23は、コピーされた有効データの論理アドレス(タグ)と、
コピーされた有効データの旧物理記憶位置を示す物理アドレスと、コピーされた有効データの新物理記憶位置を示す物理アドレスとをホスト2に通知する。
本実施形態では、上述したように、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)とホスト2からの論理アドレス(タグ)の双方を書き込み先ブロックに書き込むことができる。このため、GC動作制御部23は、コピー元ブロック(GCソースブロック)内の各データの論理アドレスをこのコピー元ブロック(GCソースブロック)から容易に取得することができるので、コピーされた有効データの論理アドレスをホスト2に容易に通知することができる。
フラッシュI/O制御回路13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、リードバッファ(RB)30、ライトバッファ(WB)31、ブロック管理テーブル32、不良情報管理テーブル33の格納のために使用される。なお、これらリードバッファ(RB)30、ライトバッファ(WB)31、ブロック管理テーブル32、不良情報管理テーブル33は、コントローラ4内の図示しないSRAMに格納されてもよい。
次に、フラッシュストレージデバイス3とホスト2との間のソフトウェアインタフェースとして使用されるAPIについて説明する。本実施形態では、このAPIは、2種類のAPI(イン・ドライブ・GC(In-Drive-GC)API、スーパーブロックAPIに大別される。
In-Drive-GC-APIは、フラッシュストレージデバイス3が単独でガベージコレクション(GC)を実行することを前提としたコマンド群を含む。これらコマンド群には、ベーシックコマンドとして、ライトコマンド(Write without Physical Address)、リードコマンド(Read with Physical Address)、トリムコマンド(Trim)、デュプリケーションコマンド(Duplicate)、アドレス更新通知(Address Update Notification (Device Initiated))、強制GCコマンド(Forced Garbage-Collection)、GC制御コマンド(Garbage Collection Control)、等が含まれてもよい。
ライトコマンド(Write without Physical Address)は、書き込むべきユーザデータを識別する論理アドレス(タグ)を指定し、書き込み先の物理アドレスを指定しないライトコマンドである。
リードコマンド(Read with Physical Address)は、リード対象の物理記憶位置(物理ブロック、物理ブロック内のリード対象位置)を示す物理アドレスを指定するリードコマンドである。
トリムコマンド(Trim)は、無効にすべきデータの物理アドレスを指定し、この物理アドレスに対応するデータを無効化すべきことをストレージデバイス3に指示するコマンドである。なお、ホスト2が、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除(De-duplication)機能をサポートしている場合には、トリムコマンド(Trim)は、あるデータを参照している論理アドレスの数を示す参照カウントを減らすべきことをストレージデバイス3に指示するコマンドとして使用される。デュプリケーションコマンド(Duplicate)は、あるデータを参照している論理アドレスの数を示す参照カウントを増やすべきことをストレージデバイス3に指示するコマンドとして使用される。
アドレス更新通知(Address Update Notification (Device Initiated))は、フラッシュストレージデバイス3によってGCのためのデータコピー動作が実行された後に、コピーされたデータ(有効データ)の論理アドレス、この有効データの旧物理記憶位置、この有効データの新物理記憶位置をフラッシュストレージデバイス3がホスト2に通知するために使用される。
強制GCコマンド(Forced Garbage-Collection)は、フラッシュストレージデバイス3にGCを強制的に実行させるためのコマンドである。
GC制御コマンド(Garbage Collection Control)は、GCを開始するための条件等をフラッシュストレージデバイス3に指示するためのコマンドである。
図4は、In-Drive-GC-API用の各コマンドのパラメータと返値の例を示している。
図4において、「Host:」のラベルに後続して記載されている内容は対応するコマンドによって指定されるパラメータであり、「Device:」のラベルに後続して記載されている内容はこのコマンドに対するレスポンスに含まれるパラメータ(返値)である。
ライトコマンド(Write without Physical Address)は、ユーザアドレス、長さ、データ、QoSドメイン識別子を含んでもよい。ユーザアドレスは、書き込むべきデータを識別するための論理アドレス(タグ)である。ユーザアドレスの例には、LBA、キー・バリュー・ストアのキー、ファイル識別子、等が含まれる。
ライトコマンドに対するレスポンスは、ステータス(成功/失敗)、ユーザアドレス、フラッシュアドレス(物理アドレス)、長さ、残り書き込み可能データ量(distance-to-block-boundary)を含んでもよい。残り書き込み可能データ量(distance-to-block-boundary)はオプショナルな返値であり、データが書き込まれたスーパーブロックに書き込み可能な残りデータ量を示す。残り書き込み可能データ量(distance-to-block-boundary)は、上述のデータの粒度の倍数で表されてもよい。データは不良ブロックの前後の2つの非不良ブロックに跨がって書き込まれる場合がある。このため、ライトコマンドに対するレスポンスは、各セットがユーザアドレス、フラッシュアドレス(物理アドレス)、長さを含む複数のセットを含んでもよい。
リードコマンド(Read with Physical Address)は、フラッシュアドレス、長さを含んでもよい。リードコマンド(Read with Physical Address)は、各セットがフラッシュアドレス、長さを含む複数のセットを含んでもよい。リードコマンドに対するレスポンスは、ステータス、ユーザアドレス、長さ、データを含んでもよい。リードコマンドに対するレスポンスは、各セットがユーザアドレス、長さを含む複数のセットを含んでもよい、
トリムコマンド(Trim)/デュプリケーションコマンド(Duplicate)は、フラッシュアドレス、長さ、参照カウントの増減量(reference-count-to-add-or-subtract)を含んでもよい。トリムコマンド(Trim)/デュプリケーションコマンド(Duplicate)は、各セットがフラッシュアドレス、長さ、参照カウントの増減量を含む複数のセットを含んでもよい。
アドレス更新通知(Address Update Notification (Device Initiated))は、フラッシュストレージデバイス3によってホスト2に通知される出力パラメータとして、ユーザアドレス、旧フラッシュアドレス、新フラッシュアドレス、参照カウント、長さを含んでもよい。例えば、フラッシュストレージデバイス3は旧物理記憶位置から新物理記憶位置にデータをコピーした後、アドレス更新通知(Address Update Notification (Device Initiated))をホスト2に送信する。このアドレス更新通知(Address Update Notification (Device Initiated))には、そのデータのユーザアドレス、そのデータの旧物理記憶位置を示す旧フラッシュアドレス、そのデータの新物理記憶位置を示す新フラッシュアドレス、このデータを参照している論理アドレスの数を示す参照カウント、このデータの長さが含まれてもよい。アドレス更新通知(Address Update Notification (Device Initiated))は、各セットがユーザアドレス、旧フラッシュアドレス、新フラッシュアドレス、参照カウント、長さを含む複数のセットを含んでもよい。
強制GCコマンド(Forced Garbage-Collection)は、QoSドメイン識別子、ソーススーパーブロックアドレス(オプショナル)を含んでもよい。
GC制御コマンド(Garbage Collection Control)は、最大データ数(maximum-number-of-data)、QoSドメイン識別子、GCの方法(ポリシー)を含んでいてもよい。
スーパーブロックAPIは、ホスト2が論理アドレス(タグ)とスーパーブロックを指定し、フラッシュストレージデバイスがこのスーパーブロック内の書き込み先ブロックとこの書き込み先ブロック内の書き込み先位置を決定することを前提としたコマンド群を含む。これらコマンド群には、ベーシックコマンドとして、ライトコマンド(Write without Page Address)、リードコマンド(Read with Physical Address)、スーパーブロック解放コマンド(Release Super Block to Unused Super Block Pool)、スーパーブロック割り当てコマンド(Allocate Super Block and Open Write Buffer with Block Healing)、クローズ・スーパーブロックコマンド(Close Super Block and Write Buffer)、スーパーブロック情報コマンド(Super Block Information)、非コピーデータ設定コマンド(Set Data not to be Copied)、データコピーコマンド(Data Copy without Page Address)、等を含む。
ライトコマンド(Write without Page Address)は、論理アドレス(タグ)とスーパーブロックアドレスを指定するライトコマンドである。リードコマンドはIn-Drive-GC-API用のリードコマンドと同じである。スーパーブロック解放コマンド(Release Super Block to Unused Super Block Pool)は、既に割り当てられているスーパーブロックを解放するためのコマンドである。スーパーブロック割り当てコマンド(Allocate Super Block and Open Write Buffer with Block Healing)は、スーパーブロックの割り当てを要求するコマンドである。スーパーブロック割り当てコマンド(Allocate Super Block and Open Write Buffer with Block Healing)は、並列アクセス可能なブロックの数を示す並列数を指定するパラメータを含んでいてもよい。スーパーブロック情報コマンド(Super Block Information)は、特定のスーパーブロックに関する情報を取得するためのコマンドである。非コピーデータ設定コマンド(Set Data not to be Copied)は、スーパーブロック内のコピーすべきでないデータを指定するためのコマンドである。データコピーコマンド(Data Copy without Page Address)は、GCのためにデータをコピーするためのコマンドである。これらコマンドのパラメータと返値の例は図5に示されている。図5においても、「Host:」のラベルに後続して記載されている内容は対応するコマンドによって指定されるパラメータを示し、「Device:」のラベルに後続して記載されている内容はこのコマンドに対するレスポンスに含まれるパラメータ(返値)を示す。
図6は、フラッシュI/O制御回路13と複数のNAND型フラッシュメモリダイとの関係を示す。
NAND型フラッシュメモリ5は、図6に示すように、複数のNAND型フラッシュメモリダイを含む。各NAND型フラッシュメモリダイは、複数のブロック(物理ブロック)BLKを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のNAND型フラッシュメモリダイは独立して動作可能である。このため、NAND型フラッシュメモリダイは、最小の並列動作単位として機能する。NAND型フラッシュメモリダイは、「NAND型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。図6においては、フラッシュI/O制御回路13に16個のチャンネルCh0、Ch1、…Ch15が接続されており、これらチャンネルCh0、Ch1、…Ch15の各々に、同数(例えばチャンネル当たり1個のダイ)のNAND型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するNAND型フラッシュメモリダイと通信するための通信線(メモリバス)を含む。
コントローラ4は、チャンネルCh0、Ch1、…Ch15を介してNAND型フラッシュメモリダイ#0~#15を制御する。コントローラ4は、チャンネルCh0、Ch1、…Ch15を同時に駆動することができる。
図6の構成例においては、最大16個のNAND型フラッシュメモリダイを並列動作させることができる。
本実施形態では、コントローラ4は、各々が複数のブロックBLKから構成される複数の並列単位(スーパーブロック)を管理する。スーパーブロックは、これに限定されないが、異なるチャンネルに接続されたNAND型フラッシュメモリダイ#0~#15から一つずつ選択される計16個のブロックBLKを含んでいてもよい。なお、NAND型フラッシュメモリダイ#0~#15の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#0~#15の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#0~#15に対応する32個のプレーンから一つずつ選択される計32個のブロックBLKを含んでいてもよい。
図7には、一つのスーパーブロックSBが、NAND型フラッシュメモリダイ#0~#14から一つずつ選択される計16個のブロックBLKから構成される場合が例示されている。スーパーブロックSBに対する書き込み動作においては、データは、NAND型フラッシュメモリダイ#0に属するブロックBLKのページP0、NAND型フラッシュメモリダイ#1に属するブロックBLKのページP0、…NAND型フラッシュメモリダイ#15に属するブロックBLKのページP0、NAND型フラッシュメモリダイ#0に属するブロックBLKのページP1、NAND型フラッシュメモリダイ#2に属するブロックBLKのページP1、…NAND型フラッシュメモリダイ#15に属するブロックBLKのページP1、…という順序で書き込まれる。
図8は、スーパーブロックSBのブロックアドレス(スーパーブロックアドレス)とこのスーパーブロックSBを構成する複数のブロック(物理ブロック)それぞれのブロックアドレスとの関係を示す。
スーパーブロックSBに含まれるべきブロック(物理ブロック)それぞれのブロックアドレスは、このスーパーブロックSBのブロックアドレス(スーパーブロックアドレス)からある数学的規則に基づいて定められる。
例えば、スーパーブロックSBのスーパーブロックアドレスに所定の四則演算を施すことによって得られる値を、このスーパーブロックSBに含まれるべき各ブロックのブロックアドレスとして決定してもよい。あるいは、スーパーブロックSBのスーパーブロックアドレスを表す複数ビットに所定のビット反転または所定のビットシフトを施すことによって得られる値を、このスーパーブロックSBに含まれるべき各ブロックのブロックアドレスとして決定してもよい。
図8では、図示の簡単化のために、スーパーブロックSBのスーパーブロックアドレスと同じブロックアドレスを有するブロックそれぞれによってこのスーパーブロックSBが構成される場合が例示されている。
すなわち、スーパーブロックアドレス0を有するスーパーブロックSB0は、NAND型フラッシュメモリダイ#0(Die#0)に含まれるブロックアドレス0のブロックBLK0、NAND型フラッシュメモリダイ#1(Die#1)に含まれるブロックアドレス0のブロックBLK0、NAND型フラッシュメモリダイ#2(Die#2)に含まれるブロックアドレス0のブロックBLK0、…、NAND型フラッシュメモリダイ#15(Die#15)に含まれるブロックアドレス0のブロックBLK0によって構成される。
同様に、スーパーブロックアドレス1000を有するスーパーブロックSB1000は、NAND型フラッシュメモリダイ#0(Die#0)に含まれるブロックアドレス1000のブロックBLK1000、NAND型フラッシュメモリダイ#1(Die#1)に含まれるブロックアドレス1000のブロックBLK1000、NAND型フラッシュメモリダイ#2(Die#2)に含まれるブロックアドレス1000のブロックBLK1000、…、NAND型フラッシュメモリダイ#15(Die#15)に含まれるブロックアドレス1000のブロックBLK1000によって構成される。
各Dieには、幾つかの不良ブロックが含まれる場合がある。通常、不良ブロックの数はDie毎に異なる。
図9においては、各Dieに含まれる各不良ブロックを同じDieに属する他のブロックで置き換える処理が示されている。
図9においては、各Dieが2048個のブロックBLKを含んでおり、Die#0が100個の不良ブロックを含み、Die#1が不良ブロックを含まず、Die#2が20個の不良ブロックを含み、そしてDie#15が30個の不良ブロックを含む場合が想定されている。
Die#0においては、例えば、不良ブロックBLK1はDie#0の非不良ブロックBLK1948で置換され、不良ブロックBLK5はDie#0の非不良ブロックBLK1949で置換される。このようにして、Die#0の先頭から合計1948(=2048-100)個のブロックのみが利用可能状態となり、Die#0の残りのブロックBLK1948~BLK2047は利用できない。
このため、たとえDie#1が不良ブロックを含まない場合であっても、Die#1のブロックBLK1948~BLK2047はスーパーブロックの構築のために利用できなくなる。よって、構築可能なスーパーブロックSBの数は、最も不良ブロックの多いDie#0内の非不良ブロックの数までに制限されてしまう。
図10は、各不良ブロックを置換することなく、あるスーパーブロックSB内の非不良ブロックの中から書き込み先ブロックを選択する動作を示す。
図10では、図示の簡単化のために、あるスーパーブロック(ここでは、スーパーブロックSB5)が、8個のブロック、つまり、Die#0内のブロックBLK5、Die#1内のブロックBLK5、Die#2内のブロックBLK5、Die#3内のブロックBLK5、Die#4内のブロックBLK5、Die#5内のブロックBLK5、Die#6内のブロックBLK5、およびDie#7内のブロックBLK5によって構成されている場合が例示されている。
本実施形態では、各スーパーブロックに対応する不良情報管理テーブル33が設けられている。スーパーブロックSB5用の不良情報管理テーブル33においては、ブロック毎に使用可能または使用不可能を示す1ビットの情報を含む不良情報(ビットマップ)が保持されている。不良情報(ビットマップ)においては、“0”は非不良ブロックを表し、“1”は不良ブロックを表す。
図10では、Die#1内のブロックBLK5、Die#4内のブロックBLK5、Die#5内のブロックBLK5が不良ブロックである場合が想定されている。
コントローラ4は、Die#1内のブロックBLK5をDie#1内の他のブロックで置き換える処理、Die#4内のブロックBLK5をDie#4内の他のブロックで置き換える処理、Die#5内のブロックBLK5をDie#5内の他のブロックで置き換える処理を実行しない。代わりに、コントローラ4は、スーパーブロックSB5用の不良情報管理テーブル33を参照して、スーパーブロックSB5に含まれる非不良ブロック(Bここでは、Die#0内のブロックBLK5、Die#2内のブロックBLK5、Die#3内のブロックBLK5、Die#6内のブロックBLK5、Die#7内のブロックBLK5)の中から一つのブロックを書き込み先ブロックとして選択する。コントローラ4は、この書き込み先ブロック内の書き込み先位置を決定し、ホスト2からのライトデータをこの書き込み先ブロック内の書き込み先位置に書き込む。そして、コントローラ4は、この書き込み先ブロックおよびこの書き込み先位置の双方を示す物理アドレスをホスト2に通知する。
これにより、ホスト2は、実際にライトデータが書き込まれたブロック(書き込み先ブロック)とこのブロック内の書き込み先位置を認識できるので、このデータをリードする必要がある場合には、この通知された物理アドレスを指定するリード要求(リードコマンド)をフラッシュストレージデバイス3に送信することができる。つまり、まず、ホスト2は、書き込むべきデータを識別する論理アドレス(タグ)を含むライト要求(ライトコマンド)をフラッシュストレージデバイス3に送信する。ホスト2は、不良ブロックを除くブロックの中から書き込み先ブロックとして選択されたブロックおよびこのブロック内の書き込み先位置(物理記憶位置)の双方を示す物理アドレスと、このデータの論理アドレス(タグ)とをフラッシュストレージデバイス3から受信する。そして、ホスト2は、論理アドレス(タグ)それぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するホスト2上のルックアップテーブル(LUT)を更新して、このデータを識別する論理アドレス(タグ)に、受信した物理アドレスをマッピングする。このデータをリードすることが必要となった場合、ホスト2は、ホスト2上のルックアップテーブル(LUT)を参照して、このデータの論理アドレス(タグ)にマッピングされている物理アドレスを取得し、取得した物理アドレスを指定するリード要求(リードコマンド)をフラッシュストレージデバイス3に送信する。
このように、本実施形態では、書き込み対象のスーパーブロック内の不良ブロックをこの不良ブロックが属するDie内の他のブロックで置換することなく、このスーパーブロックに対するデータ書き込みおよび読み出し動作を正常に実行することができる。よって、たとえ不良ブロックの数が増えても、大量の置き換え情報を管理する必要はない。また、置換処理のためのアドレス変換処理も不要であるので、リードレイテンシを低減することができる。さらに、基本的には、各Dieに属するブロックの数と同数のスーパーブロックを構築することができるので、たとえ不良ブロックの数が増えても、ほとんど全ての非不良ブロックを利用することが可能となる。
図11は、フラッシュストレージデバイス3に適用されるライトコマンド(Write without Physical Address)を示す。
このライトコマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。このライトコマンドは、上述したように、コマンドID、QoSドメインID、ユーザアドレス、長さ、等を含んでもよい。
コマンドIDはこのコマンドがライトコマンドであることを示すID(コマンドコード)であり、ライトコマンドにはライトコマンド用のコマンドIDが含まれる。
QoSドメインIDは、データが書き込まれるべきQoSドメインを一意に識別可能な識別子である。あるエンドユーザからのライト要求に応じてホスト2から送信されるライトコマンドは、このエンドユーザに対応するQoSドメインを指定するQoSドメインIDを含んでもよい。ネームスペースIDがQoSドメインIDとして扱われてもよい。
ユーザアドレスは、データを識別する論理アドレス(タグ)であり、例えば、LBA、キー、ファイル識別子がこれに相当する。
長さは、書き込まれるべきライトデータの長さを示す。長さは、LBAの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
図12は、図11のライトコマンドに対するレスポンスを示す。
このレスポンスは、ユーザアドレス、フラッシュアドレス、長さ、残り書き込み可能データ量(distance-to-block-boundary)を含む。
ユーザアドレスは、図11のライトコマンドに含まれていたユーザアドレスである。
フラッシュアドレスは、図11のライトコマンドに応じてデータが書き込まれたNAND型フラッシュメモリ5内の物理記憶位置の物理アドレスを示す。
本実施形態では、この物理アドレスは、例えば、ダイ識別子と、ブロックアドレスと、オフセット(ブロック内オフセット)との組み合わせ、または、スーパーブロックアドレスと、オフセット(スーパーブロック内のオフセット)との組み合わせによって指定される。
長さは、書き込まれたライトデータの長さを示す。長さは、LBAの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
残り書き込み可能データ量(distance-to-block-boundary)は、データ書き込みを行ったスーパーブロックに対してさらに書き込むことが可能なデータ量を示す。
図13は、フラッシュストレージデバイス3に適用されるTrimコマンドを示す。
このTrimコマンドは、コマンドID、フラッシュアドレス、長さ、参照カウントの減少量(reference-count-to- subtract)を含む。
コマンドIDはこのコマンドがTrimコマンドであることを示すID(コマンドコード)であり、TrimコマンドにはTrimコマンド用のコマンドIDが含まれる。
フラッシュアドレスは、無効化すべきデータ(参照カウントを減らすべきデータ)が格納されている最初の物理記憶位置を示す。本実施形態では、このフラッシュアドレスは、ダイ識別子と、ブロックアドレスと、オフセット(ブロック内オフセット)との組み合わせ、または、スーパーブロックアドレスと、オフセット(スーパーブロック内のオフセット)との組み合わせによって指定される。
長さは、無効化すべきデータ(参照カウントを減らすべきデータ)の長さを示す。この長さ(データ長)は、バイトによって指定されてもよい。
コントローラ4は、複数のスーパーブロックの各々に含まれるデータそれぞれの有効/無効を示すフラグ(ビットマップフラグ)をブロック管理テーブル32を使用して管理する。無効にすべきデータが格納されている物理記憶位置を示すフラッシュアドレスを含むTrimコマンドをホスト2から受信した場合、コントローラ4は、ブロック管理テーブル32を更新して、Trimコマンドに含まれるフラッシュアドレスに対応する物理記憶位置のデータに対応するフラグ(ビットマップフラグ)を無効を示す値に変更する。
重複排除(De-duplication)機能をサポートするケースにおいては、ブロック管理テーブル32では、複数のスーパーブロックの各々に含まれるデータに対応する参照カウントが管理される。参照カウントの減少量は、参照カウントを減らすべき量を示す。
次に、図14を参照して、不良ブロックを有するスーパーブロックにデータを書き込む動作について説明する。
ここでは、図示を簡単化するために、ある一つのスーパーブロックSB0が4つのブロックBLK0(Die#0)、BLK0(Die#1)、BLK0(Die#2)、BLK0(Die#3)から構成され、その中でBLK0(Die#2)が不良ブロックであることが想定されている。
コントローラ4は、不良ブロックを避けるように、ブロックBLK0(Die#0)のページ0、ブロックBLK0(Die#1)のページ0、ブロックBLK0(Die#3)のページ0、ブロックBLK0(Die#0)のページ1、ブロックBLK0(Die#1)のページ1、ブロックBLK0(Die#3)のページ1、…という順序でデータを書き込む。
ページサイズが16Kバイト(16KB)であり、データの粒度が4Kバイト(4KB)である場合には、最初の16Kバイトデータ(D1~D4)は、ブロックBLK0(Die#0)のページ0に書き込まれる。続く16Kバイトデータ(D5~D8)は、ブロックBLK0(Die#1)のページ0に書き込まれる。BLK0(Die#2)に対する書き込みはスキップされ、続く16Kバイトデータ(D9~D12)は、ブロックBLK0(Die#3)のページ0に書き込まれる。
図15は、図12のレスポンスに含まれる物理アドレスの構成例を示す。
物理アドレスは、図15の上部に示すように、書き込み先ブロックとして選択したブロックが属するダイのダイ識別子と、その選択したブロックに対応するブロックアドレスと、その選択したブロックの先頭から書き込み先位置までのオフセットとから構成される。選択したブロックの先頭から書き込み先位置までのオフセットは、ページアドレスとページ内オフセットとを含む。
または、図15の下部に示すように、物理アドレスは、書き込み先ブロックが属するスーパーブロックに対応するブロックアドレス(スーパーブロックアドレス)と、スーパーブロックの先頭から書き込み先位置までのオフセットとから構成される。スーパーブロックの先頭から書き込み先位置までのオフセットは、ダイ識別子、ページアドレス、ページ内オフセットを含む。
図16は、スーパーブロックのスーパーブロックアドレス(第1のブロックアドレス)とこのスーパーブロックに含まれる各ブロックのブロックアドレス(第2のブロックアドレス)との関係を示す。
説明を簡単にするために、スーパーブロックSB0、SB1、SB2は、それぞれ4つのブロックから構成されている場合を想定する。
スーパーブロックSB0は、ブロック80、ブロック81、ブロック82、およびブロック83を含む。これらブロック80、ブロック81、ブロック82、およびブロック83の各々は、スーパーブロックSB0のスーパーブロックアドレス(第1のブロックアドレス)から数学的規則に基づいて定められるブロックアドレス(第2のブロックアドレス)を含む。ブロック81が不良ブロックである場合には、ホスト2からデータは、ブロック80、ブロック82、ブロック83から選択される書き込み先ブロックに書き込まれる。このため、不良ブロック81の第2のブロックアドレス(不良ブロック81が属するダイのダイ識別子)はホスト2にはリターンされない。
スーパーブロックSB1は、ブロック84、ブロック85、ブロック86、およびブロック87を含む。これらブロック84、ブロック85、ブロック86、およびブロック87の各々は、スーパーブロックSB1のスーパーブロックアドレス(第1のブロックアドレス)から数学的規則に基づいて定められるブロックアドレス(第2のブロックアドレス)を含む。ブロック86およびブロック87が不良ブロックである場合には、ホスト2からデータは、ブロック84、ブロック85から選択される書き込み先ブロックに書き込まれる。このため、不良ブロック86の第2のブロックアドレス(不良ブロック86が属するダイのダイ識別子)、および不良ブロック87の第2のブロックアドレス(不良ブロック87が属するダイのダイ識別子)は、ホスト2にはリターンされない。
スーパーブロックSB2は、ブロック88、ブロック89、ブロック90、およびブロック91を含む。これらブロック88、ブロック89、ブロック90、およびブロック91の各々は、スーパーブロックSB2のスーパーブロックアドレス(第1のブロックアドレス)から数学的規則に基づいて定められるブロックアドレス(第2のブロックアドレス)を含む。ブロック88が不良ブロックである場合には、ホスト2からデータは、ブロック89、ブロック90、およびブロック91から選択される書き込み先ブロックに書き込まれる。このため、不良ブロック88の第2のブロックアドレス(不良ブロック88が属するダイのダイ識別子)はホスト2にはリターンされない。
図17、図18は、論理アドレスとデータのペアをブロック内のページに書き込む動作を示す。
各ブロックにおいて、各ページは、ユーザデータを格納するためのユーザデータ領域と管理データを格納するための冗長領域とを含んでもよい。ページサイズは16KB+アルファである。
コントローラ4は、4KBユーザデータとこの4KBユーザデータに対応する論理アドレス(例えばLBA)との双方を書き込み先ブロックBLKに書き込む。この場合、図17に示すように、各々がLBAと4KBユーザデータとを含む4つのデータセットが同じページに書き込まれてもよい。ブロック内オフセットは、セット境界を示してもよい。
あるいは、図18に示されているように、4つの4KBユーザデータがページ内のユーザデータ領域に書き込まれ、これら4つの4KBユーザデータに対応する4つのLBAがこのページ内の冗長領域に書き込まれてもよい。
図19を用いて、複数のデータ部とこれらデータ部から算出される消失訂正符号とを不良ブロックを有するスーパーブロックに書き込む動作を説明する。
RAIDの仕組みをスーパーブロック内の複数のブロックを使用して実現するために、コントローラ4は、図19に示すように、一つのスーパーブロックに含まれる複数のブロックに属し且つ同じページアドレスをそれぞれ有する複数のページに跨がって、複数のデータ部とこれら複数のデータ部から算出される1以上の消失訂正符号とを書き込む。複数のブロックに属し且つ同じページアドレスをそれぞれ有する複数のページは、スーパーページとして参照される。
図19の上部には、スーパーブロックSB0において、スーパーページにデータおよびで消失訂正符号が書き込まれていることが示されている。スーパーページは、BLK0(Die#0)のページ0、BLK0(Die#1)のページ0、BLK0(Die#2)のページ0、BLK0(Die#3)のページ0、BLK0(Die#4)のページ0、BLK0(Die#5)のページ0、BLK0(Die#6)のページ0、BLK0(Die#7)のページ0から構成される。
データは、非不良ブロックであるBLK0(Die#0)、BLK0(Die#2)、BLK0(Die#3)、BLK0(Die#4)の各ページ0に書き込まれる。
消失訂正符号の例は、リードソロモン符号、パリティ、等を含む。消失訂正符号は、非不良ブロック内のページに書き込まれる。また、消失訂正符号は、各不良ブロック内のページに予め定めた値(例えば、オール“0”のビット列、またはオール“1”のビット列)が格納されているものとして算出される。
図19の上部に示す例では、2つの消失訂正符号がスーパーブロックSB0のスーパーページに書き込まれた場合が例示されている。2つの消失訂正符号は、最後の2つの非不良ブロック内のページに書き込まれる。図19の上部に示す例では、最後のブロックであるBLK0(Die#7)が非不良ブロックであり、最後から2番目のブロックであるBLK0(Die#6)が不良ブロックであり、最後から3番目のブロックであるBLK0(Die#5)が非不良ブロックであるので、2つの消失訂正符号は、BLK0(Die#5)のページ0と、BLK0(Die#7)のページ0に書き込まれる。
エンコード処理においては、コントローラ4は、BLK0(Die#0)に書き込まれるデータ部と、不良ブロックであるBLK0(Die#0)に書き込まれると仮定される予め定めた値と、BLK0(Die#2)に書き込まれるデータ部と、BLK0(Die#3)に書き込まれるデータ部と、BLK0(Die#4)に書き込まれるデータ部と、BLK0(Die#6)に書き込まれると仮定される予め定めた値とに基づいて、2つの消失訂正符号を算出する。
これにより、スーパーブロック内における不良ブロック/非不良ブロックのパターンに関係なく、エンコードのための同じ演算によって消失訂正符号を容易に算出することができる。
また、コントローラ4は、各不良ブロック内のページには予め定めた値が格納されているものとして、消失訂正符号を使用した復号処理を行う。
図19の下部に示す例では、スーパーブロックSB1を構成する最後のブロックであるBLK1(Die#7)が不良ブロックであり、最後から2番目のブロックであるBLK1(Die#6)が不良ブロックであり、最後から3番目のブロックであるBLK1(Die#5)が非不良ブロックであるので、2つの消失訂正符号は、BLK1(Die#5)のページ0と、BLK1(Die#6)のページ0に書き込まれる。
次に、図20を用いてホスト2内のフラッシュトランスレーション部2Aとフラッシュストレージデバイス3内のライト動作制御部21との関係を説明する。
ホスト2側では、フラッシュトランスレーション部2Aは、データの書き込みを行う場合、このデータを識別するTag(例えば、LBA)を含むライトコマンドをフラッシュストレージデバイス3に送信する。なお、スーパーブロック用のAPIを使用する場合には、フラッシュトランスレーション部2Aは、データを識別するTag(例えば、LBA)と、並列単位(Parallel Unit)のブロックアドレスとを指定するライトコマンド(Write without Page Address)をフラッシュストレージデバイス3に送信する。並列単位(Parallel Unit)は一つのスーパーブロックによって実現されているので、並列単位(Parallel Unit)のブロックアドレスは、このスーパーブロックのスーパーブロックアドレスである。
フラッシュストレージデバイス3側は、ライト動作制御部21、フラッシュI/O制御回路13、不良情報管理テーブル33、NAND型フラッシュメモリダイから構成されている。また、フラッシュストレージデバイス3内ではスーパーブロック毎に使用可能または使用不可能を示す少なくとも1ビットの情報を保持する不良情報が、不良情報管理テーブル33で管理されている。
ホスト2側から、書き込むべきデータを識別するための情報であるTag(例えば、LBA)を含むライト要求を受信した場合、ライト動作制御部21は、不良情報管理テーブル33の不良情報を参照して一つのスーパーブロックに含まれる非不良ブロックの中から一つのブロックを書き込み先ブロックとして選択し、データが書き込まれるべき選択したブロック内の書き込み先位置(書き込み先ページ、このページ内のオフセット)を決定する。
なお、並列単位のブロックアドレス(スーパーブロックアドレス)を指定するライトコマンドをホスト2から受信した場合、ライト動作制御部21は、この指定されたブロックアドレス(スーパーブロックアドレス)を有するスーパーブロックに含まれる非不良ブロックの中から書き込み先ブロックを選択し、データが書き込まれるべき選択したブロック内の書き込み先位置(書き込み先ページ、このページ内のオフセット)を決定する。
そして、ライト動作制御部21は、書き込み先ブロックが属するダイのダイ識別子(Die ID)、書き込み先ブロックのブロックアドレス(Raw Block)、書き込み先ページ(Raw Page)、書き込み先ページ内のオフセット(Offset)を指定する書き込み指示をフラッシュI/O制御回路13に送信する。
また、ライト動作制御部21は、書き込み先ブロックおよび書き込み先位置の双方を表すフラッシュアドレス(Die ID、Raw Block、Raw Page、Offset)と、Tag(例えば、LBA)とを、ホスト2に通知する。
書き込み指示を受信したフラッシュI/O制御回路13は、書き込み指示に基づいて、書き込み先位置にデータを書き込む。
ホスト2側では、フラッシュトランスレーション部2Aは、フラッシュストレージデバイス3からフラッシュアドレス(Die ID、Raw Block、Raw Page、Offset)と、Tag(例えば、LBA)とを受信すると、ホスト2で管理されているLUTを更新する。このとき、フラッシュアドレス(Die ID、Raw Block、Raw Page、Offset)と、Tag(例えば、LBA)とが対応付けられる。
フラッシュトランスレーション部2Aは、リード要求を行う場合、フラッシュアドレス(Die ID、Raw Block、Raw Page、Offset)を指定するリード要求をフラッシュストレージデバイス3に送信する。
フラッシュストレージデバイス3側では、フラッシュアドレス(Die ID、Raw Block、Raw Page、Offset)を指定するリード要求をホスト2から受信した場合、フラッシュI/O制御回路13は、フラッシュアドレスに基づいて、データをリードする。リード対象のブロックはDie IDとRaw Blockとによって特定される。リード対象のページは、Raw Pageによって特定される。リード対象のページ内のリード対象位置は、Offsetによって特定される。
次に、図21を用いてホスト2とフラッシュストレージデバイス3とによって実行されるライト動作およびリード動作を説明する。
<ライト動作>
(1)ライトコマンドの受信
フラッシュストレージデバイス3においては、ホスト2から受信される、LBAを含むライトコマンド、およびデータは、フラッシュストレージデバイス3内のライトバッファ31に一時的に格納される。
(2)不良情報の参照
ライト動作制御部21は、不良情報管理テーブル33で管理されている不良情報を参照して、書き込み対象のスーパーブロックに含まれる非不良ブロックの中から一つのブロックを書き込み先ブロックとして選択し、書き込み先ブロック内の書き込み先位置を決定する。
(3)書き込み指示
ライト動作制御部21は、書き込み先ブロックと書き込み先ブロック内の書き込み先位置を決定すると、書き込み先ブロックと書き込み先ブロックの双方を示すフラッシュアドレス(Rawアドレス)を指定する書き込み指示をライトバッファ31を介してフラッシュI/O制御回路13に送信する。ここで、Rawアドレスには、DieID、Raw Block、Raw Page、Offsetが含まれる。Rawアドレスを受信したフラッシュI/O制御回路13は、Rawアドレスに基づいて、書き込み先ブロックとして選択されたブロック内の書き込み先位置にライトデータを書き込む。
(4)ホストへの書き込み先の通知
ライト動作制御部21は、Rawアドレスと、LBAとをホスト2に通知する。これにより、ホスト2は、LUTを更新してこのRawアドレスをこのLBAにマッピングすることができる。
<リード動作>
(11)LBAの通知
リードパーサ2Bは、LBAを含むリードコマンドを受信すると、LBAをフラッシュトランスレーション部2Aに通知する。
(12)Rawアドレスの取得
フラッシュトランスレーション部2Aは、リードパーサ2BからLBAを受信すると、LUTを参照し、受信したLBAに対応するRawアドレスを取得し、取得したRawアドレスをリードパーサ2Bに返す。これにより、リードパーサ2Bは、Rawアドレスを取得でき、LBAを含むリードコマンドを、Rawアドレスを含むリードコマンドに変換することができる。
(13)リード指示
リードパーサ2Bは、Rawアドレスを含むリードコマンドをフラッシュストレージデバイス3に送信する。フラッシュストレージデバイス3においては、Rawアドレスを含むリードコマンドを受信したフラッシュI/O制御回路13は、Rawアドレスに基づいて、データをリードし、リードデータをリードバッファ30に送信する。リードバッファ30ではリードデータが一時的に記憶される。
(14)リードデータのホストへの送信
リードバッファ30で一時的に記憶されたリードデータは、ホスト2に送信される。
図22のシーケンスチャートは、ホスト2とフラッシュストレージデバイス3とによって実行される書き込み動作処理の手順を示す。
ホスト2は、QoSドメインID、ユーザアドレス(論理アドレス)、ライトデータ、長さを含むライトコマンド(Write without Physical Address)をフラッシュストレージデバイス3に送信する。フラッシュストレージデバイス3のコントローラ4がこのライトコマンドを受信した時、コントローラ4は、一つのスーパーブロック(書き込み対象のスーパーブロック)に含まれる非不良ブロックの中から一つのブロックを書き込み先ブロックとして選択し、選択したブロック内の書き込み先位置を決定する(ステップS11)。ステップS11では、この書き込み対象のスーパーブロックは、QoSドメインIDによって特定されるQoSドメインに属しているスーパーブロックであってもよい。このQoSドメインに複数のスーパーブロックが属している場合には、これら複数のスーパーブロックの一つが書き込み対象のスーパーブロックとして選択される。
コントローラ4は、ホスト2から受信されるライトデータを書き込み先位置に書き込む(ステップS12)。ステップS12では、コントローラ4は、ユーザアドレス(例えばLBA)とライトデータの双方を書き込み先ブロックの書き込みも先位置に書き込む。
コントローラ4は、ブロック管理テーブル32を更新して、書き込まれたデータに対応するビットマップフラグ(つまり、このデータが書き込まれた物理記憶位置の物理アドレスに対応するビットマップフラグ)を0から1に変更する(ステップS13)。例えば、図23に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK11のページ1のオフセット+0~+3に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図24に示されているように、ブロックBLK11用のブロック管理テーブルにおいては、ページ1のオフセット+0~+3に対応するビットマップフラグそれぞれが0から1に変更される。
コントローラ4は、このライトコマンドに対するレスポンスをホスト2に返す(ステップS14)。レスポンスには、ユーザアドレス、物理アドレス(フラッシュアドレス)、長さが含まれる。例えば、図23に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK11のページ1のオフセット+0~+3に対応する物理記憶位置に書き込まれたならば、LBAx、フラッシュアドレス(ブロックBLK11が属するダイのダイ識別子、ブロックBLK11のブロックアドレス、ページアドレス(=1)、ページ内オフセット(=+0))、長さ(=4)を含むレスポンスがコントローラ4からホスト2に送信される。フラッシュアドレスは、ブロックアドレス、ページアドレス、ページ内オフセットの組み合わせによって表現されるが、以下の説明では、フラッシュアドレスの説明を簡単化するために、フラッシュアドレス内のダイ識別子の説明については省略することとする。
ホスト2がこのレスポンスを受信した時、ホスト2は、ホスト2によって管理されているLUTを更新して、書き込まれたライトデータに対応するユーザアドレスそれぞれにフラッシュアドレス(物理アドレス)をマッピングする(ステップS21)。図25に示されているように、LUTは、複数のユーザアドレス(論理アドレス)それぞれに対応する複数のエントリを含む。あるユーザアドレス(例えばあるLBA)に対応するエントリには、このLBAに対応するデータが格納されているNAND型フラッシュメモリ5内の位置(物理記憶位置)を示す物理アドレスが格納される。図23に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK11のページ1のオフセット+0~+3に対応する物理記憶位置に書き込まれたならば、図25に示されているように、LUTが更新されて、LBAxに対応するエントリにBLK11、ページ1、オフセット+0が格納され、LBAx+1に対応するエントリにBLK11、ページ1、オフセット+1が格納され、LBAx+2に対応するエントリにBLK11、ページ1、オフセット+2が格納され、LBAx+3に対応するエントリにBLK11、ページ1、オフセット+3が格納される。
この後、ホスト2は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのTrimコマンドをフラッシュストレージデバイス3に送信する。図23に示されているように、以前のデータがブロックBLK0のページ0のオフセット+0、オフセット+1、オフセット+2、オフセット+3に対応する位置に格納されている場合には、図26に示すように、フラッシュアドレス(ブロックアドレス(=BLK0)、ページアドレス(=ページ0)、ページ内オフセット(=+0))、長さ(=4)を指定するTrimコマンドがホスト2からフラッシュストレージデバイス3に送信される。フラッシュストレージデバイス3のコントローラ4は、このTrimコマンドに応じて、ブロック管理テーブル32を更新する(ステップS15)。ステップS15においては、図26に示すように、ブロックBLK0用のブロック管理テーブルにおいて、ページ0のオフセット+0~+3に対応するビットマップフラグそれぞれが1から0に変更される。
図27は、フラッシュストレージデバイス3に適用されるリードコマンド(Read with Physical Address)を示す。
リードコマンドは、フラッシュストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、フラッシュアドレス、長さ、転送先ポインタを含む。
コマンドIDはこのコマンドがリードコマンドであることを示すID(コマンドコード)であり、リードコマンドにはリードコマンド用のコマンドIDが含まれる。
フラッシュアドレスは、データが読み出されるべき最初の物理記憶位置のフラッシュアドレス(物理アドレス)を示す。長さは、リードすべきデータの長さを示す。
転送先ポインタは、読み出されたデータが転送されるべきホスト2内のメモリ上の位置を示す。
一つのリードコマンドは、フラッシュアドレス(物理アドレス)と長さの組を複数指定することができる。
ここで、リードコマンドに、フラッシュアドレスおよび長さの組が2組以上含まれていてもよい。2組以上のフラッシュアドレスおよび長さの組が含まれる場合としては、データの書き込みを行ったスーパーブロックに不良ブロックが存在したため、ライトデータが不良ブロックを挟む2つのブロックに書き込まれた場合が想定される。
図28は、リード動作を示す。
ここでは、ブロックアドレス(=BLK2)、ページアドレス(=ページ1)、ページ内オフセット(=+1)、長さ(=3)を指定するリードコマンドがホスト2から受信された場合が想定されている。フラッシュストレージデバイス3のコントローラ4は、ブロックアドレス(=BLK2)、ページアドレス(=ページ1)、ページ内オフセット(=+1)、長さ(=3)に基づいて、BLK2からデータd1~d3をリードする。この場合、コントローラ4は、BLK2のページ1から1ページサイズ分のデータをリードし、このリードデータからデータd1~データd3を抽出する。次いで、コントローラ4は、データd1~データd3を、転送先ポインタによって指定されるホストメモリ上に転送する。
図29のシーケンスチャートは、ホスト2とフラッシュストレージデバイス3とによって実行されるリード処理の手順を示す。
ホスト2は、ホスト2によって管理されているLUTを参照して、ユーザアプリケーションからのリード要求に含まれるユーザアドレス(論理アドレス)をフラッシュアドレスに変換する。そして、ホスト2は、このフラッシュアドレス、長さを指定するリードコマンドをフラッシュストレージデバイス3に送信する。
フラッシュストレージデバイス3のコントローラ4がリードコマンドをホスト2から受信した時、コントローラ4は、このリードコマンドによって指定されたフラッシュアドレスに基づいて、リード対象のブロック、リード対象のページ、リード対象のページ内位置を決定する(ステップS31)。コントローラ4は、フラッシュアドレス、長さによって規定されるデータをNAND型フラッシュメモリ5からリードし(ステップS32)、このリードデータをホスト2に送信する。
図30は、フラッシュストレージデバイス3に適用されるガベージコレクション(GC)制御コマンドを示す。
GC制御コマンドは、コマンドID、ポリシー(GCの方法)、QoSドメインID、最大データ数(maximum-number-of-data)、等を含んでもよい。
コマンドIDはこのコマンドがGC制御コマンドであることを示すID(コマンドコード)であり、GC制御コマンドにはGC制御コマンド用のコマンドIDが含まれる。
ポリシー(GCの方法)は、GC候補ブロック(GCソースブロック)を選択するための条件(GCポリシー)を指定するパラメータである。フラッシュストレージデバイス3のコントローラ4は、複数のGCポリシーをサポートしている。
コントローラ4によってサポートされているGCポリシーには、有効データ量が少ないブロックを優先的にGC候補ブロック(GCソースブロック)として選択するというポリシー(Greedy)が含まれてもよい。
また、コントローラ4によってサポートされているGCポリシーには、低い更新頻度を有するデータ(コールドデータ)が集められているブロックを、高い更新頻度を有するデータ(ホットデータ)が集められているブロックよりも優先的にGC候補ブロック(GCソースブロック)として選択するというポリシーが含まれていてもよい。
さらに、GCポリシーは、GC開始条件を指定してもよい。GC開始条件は、例えば、残りフリーブロックの個数を示してもよい。
コントローラ4は、有効データを含むスーパーブロック群をアクティブブロックリストによって管理しており、GCを実行する場合には、GC制御コマンドによって指定されたGCポリシーに基づいて、アクティブブロックリストによって管理されているスーパーブロック群から一つ以上のGC候補スーパーブロック(GCソースブロック)を選択してもよい。
QoSドメインIDは、GCが施されるべきQoSドメインを指定するパラメータである。コントローラ4は、QoSドメインIDによって指定されるQoSドメインに属するスーパーブロック群、つまりこのQoSドメインに対応するアクティブブロックリストから、一つ以上のGC候補スーパーブロック(GCソースブロック)を選択する。
最大データ数は、GCを実行する際にコピーされるデータ量の上限値を示す。つまり、GC動作は、最大データ数を超えて実行されない。
コントローラ4は、QoSドメインに対応する残りフリーブロックの数がポリシーによって指定される閾値以下になった場合に、GCを開始してもよい。
図31は、フラッシュストレージデバイス3に適用される強制GCコマンド(Forced Garbage-Collection)を示す。
強制GCコマンドは、コマンドID、QoSドメインID、スーパーブロックアドレス、等を含んでもよい。この強制GCコマンドを受信した時、コントローラは、即座にGCを実行する。
図32は、フラッシュストレージデバイス3からホスト2に送信されるアドレス更新通知(Address Update Notification (Device Initiated))を示す。
アドレス更新通知は、フラッシュストレージデバイス3において、GC動作が実行されたことによって変更されたデータの格納位置をホスト2に通知するためのものである。ユーザアドレス、旧フラッシュアドレス、新フラッシュアドレス、参照カウント、長さ、等を含んでいてもよい。
ユーザアドレスは、コピーされたデータを識別するアドレスである。
旧フラッシュアドレスは、コピーされたデータが格納されている旧物理記憶位置の物理アドレス(旧物理アドレス)を示す。
新フラッシュアドレスは、コピーされたデータが格納されている新物理記憶位置の物理アドレス(新物理アドレス)を示す。
参照カウントは、コピーされたデータを参照しているユーザアドレスの数を示す。
長さは、コピーされたデータの長さを示す。
図33のシーケンスチャートは、フラッシュストレージデバイス3によって実行されるGC動作の手順を示す。
フラッシュストレージデバイス3のコントローラ4は、ホスト2によって指定されたQoSドメインに属するスーパーブロック群から、有効データと無効データとが混在する一つ以上のGCソースブロック(GCソーススーパーブロック)を選択する(ステップS41)。次いで、コントローラ4は、このQoSドメインに属するフリーブロック群(フリースーパーブロック群)から一つ以上のフリーブロック(フリースーパーブロック)を選択し、選択したフリーブロックをGCデスティネーションブロック(GCデスティネーションスーパーブロック)として割り当てる(ステップS42)。
コントローラ4は、GCソースブロック(GCソーススーパーブロック)内の全ての有効データをGCデスティネーションブロック(GCデスティネーションスーパーブロック)にコピーする(ステップS43)。ステップS43では、コントローラ4は、GCソースブロック(GCソーススーパーブロック)内の有効データのみならず、この有効データとこの有効データに対応するユーザアドレス(論理アドレス)の双方を、GCソースブロック(GCソーススーパーブロック)からGCデスティネーションブロック(GCデスティネーションスーパーブロック)にコピーする。これにより、GCデスティネーションブロック(GCデスティネーションスーパーブロック)内にデータとユーザアドレス(論理アドレス)とのペアを保持することができる。
そして、コントローラ4は、コピーされた有効データ毎に、ユーザアドレス(論理アドレス)、旧フラッシュアドレス、新フラッシュアドレス、長さを、アドレス更新通知を使用してホスト2に通知する(ステップS44)。
ホスト2がこのアドレス更新通知を受信した時、ホスト2は、ホスト2によって管理されているLUTを更新して、コピーされた各有効データに対応するユーザアドレス(論理アドレス)に新フラッシュアドレスをマッピングする(ステップS51)。
図34は、GCのために実行されるデータコピー動作の例を示す。
図34では、GCソースブロック(ここではブロックBLK50)のページ1のオフセット+0に対応する位置に格納されている有効データ(LBA=10)が、GCデスティネーションブロック(ここではブロックBLK100)のページ0のオフセット+0に対応する位置にコピーされ、GCソースブロック(ここではブロックBLK50)のページ2のオフセット+2に対応する位置に格納されている有効データ(LBA=20)が、GCデスティネーションブロック(ここではブロックBLK100)のページ0のオフセット+1に対応する位置にコピーされた場合が想定されている。この場合、コントローラ4は、{LBA10、旧フラッシュアドレス(BLK50、ページ1、オフセット(=+0))、新フラッシュアドレス(LBA100、ページ0、オフセット(=+0))、長さ(=1)}、{LBA20、旧フラッシュアドレス(BLK50、ページ2、オフセット(=+2))、新フラッシュアドレス(LBA100、ページ0、オフセット(=+1))、長さ(=1)}をホスト2に通知する(アドレス更新通知)。
図35は、図34のデータコピー動作の結果に基づいて更新されるホスト2のLUTの内容を示す。
このLUTにおいては、LBA10に対応するフラッシュアドレス(ブロックアドレス、ページアドレス、およびオフセット(ページ内オフセット))は、BLK50、ページ1、オフセット(=+0)から、BLK100、ページ0、オフセット(=+0)に更新される。同様に、LBA20に対応するフラッシュアドレス(ブロックアドレス、ページアドレス、およびオフセット(ページ内オフセット))は、BLK50、ぺージ2、オフセット(=+2)から、BLK100、ページ0、オフセット(=+1)に更新される。
LUTが更新された後、ホスト2は、BLK50、ページ1、オフセット(=+0)を指定するTrimコマンドをフラッシュストレージデバイス3に送信して、BLK50のページ1のオフセット(=+0)に対応する位置に格納されているデータを無効化してもよい。さらに、ホスト2は、BLK50、ページ2、オフセット(=+2)を指定するTrimコマンドをフラッシュストレージデバイス3に送信して、BLK50のページ2のオフセット(=+2)に対応する位置に格納されているデータを無効化してもよい。
図36は、ライトコマンドに対するレスポンスとGC用コールバック処理(アドレス更新通知)との関係を示す。
コントローラ4があるユーザアドレス(論理アドレス)に対応する有効データをコピーしている間に、このユーザアドレスを指定するライトコマンドがホスト2から受信されるというケースが起こる場合がある。
図36では、図34のデータコピー動作(LBA10に対応するデータコピー動作)の実行中に、LBA10を指定するライトコマンドがホスト2から受信された場合が想定されている。
コントローラ4は、ホスト2から受信されるライトデータを書き込み先ブロックに書き込む(ここではBLK3のページ0のオフセット+0に対応する位置に書き込まれる)。そして、コントローラ4は、{LBA10、BLK3、ページ0、オフセット(=+0)}を、ライトコマンドに対するレスポンスとしてホスト2に返す。
ホスト2は、LUTを更新して、LBA10に対応するブロックアドレス、ページアドレス、オフセット(ページ内オフセット)を、BLK50、ページ1、オフセット(+0)から、BLK3、ページ0、オフセット(+0)に変更する。
もしこの後に、LBA10の新フラッシュアドレスがコントローラ4からホスト2に通知されたならば、LBA10に対応する最新データが格納されている位置を示すブロックアドレス、ページアドレスおよびオフセット(BLK3、ページ0、オフセット(+0))が、LBA10に対応する新フラッシュアドレス(ここでは、BLK100、ページ0、オフセット(=+0))に誤って変更されてしまう可能性がある。
本実施形態では、コントローラ4は、LBA10、新フラッシュアドレス(BLK100、ページ0、オフセット(=+0))、長さ=1のみならず、旧フラッシュアドレス(BLK50、ページ1、オフセット(=+0))もホスト2に通知することができる(アドレス更新通知)。ホスト2は、旧フラッシュアドレス(BLK50、ページ1、オフセット(=+0))が、LUTによってLBA10に現在マッピングされているブロックアドレス、ページアドレス、オフセットに一致しない場合には、LUTを更新しない。これにより、LBA10に対応する最新データが格納されている位置を示すブロックアドレス、ページアドレスおよびオフセット(BLK3、ページ0、オフセット(+0))が、LBA10に対応する新フラッシュアドレス(ここでは、BLK100、ページ0、オフセット(=+0))に誤って変更されてしまうことを防止することができる。
図37のフローチャートは、ホスト2によって実行されるLUT更新処理の手順を示す。
ホスト2は、アドレス更新通知を受信したならば(ステップS101のYES)、旧フラッシュアドレスをLUT上の現在の物理アドレスと比較する(ステップS102)。比較した結果、旧フラッシュアドレスと、現在の物理アドレスとが一致するならば(ステップS103のYES)、ホスト2は、ユーザアドレスに対応する現在の物理アドレスを、新フラッシュアドレスに更新する(ステップS104)。次に、ホスト2は、Trimコマンドをフラッシュストレージデバイスに送信し、旧フラッシュアドレスに対応する位置に格納されているデータを無効化する(ステップS105)。
他方、旧フラッシュアドレスと、現在の物理アドレスとが一致しないならば(ステップS106のNO)、ホスト2は、ユーザアドレスに対応する現在の物理アドレスを維持する(ステップS106)。これにより、アドレス更新通知により通知された最新データが格納されている位置を示すブロックアドレス、ページアドレスおよびオフセットが、新フラッシュアドレスに誤って変更されてしまうことを防止することができる。
図38では、ブロックBLK1用のブロック管理テーブルが例示されている。
ブロックBLK1用のブロック管理テーブルは、ブロックBLK1のページアドレスおよびページ内オフセットの組のそれぞれに対応する複数のエントリを含む。
例えば、ページ0、オフセット+0に対応するエントリには、ブロックBLK1のページ0、オフセット+0に対応する位置に格納されている4KBデータに対応する参照カウントが格納される。同様に、ページ0、オフセット+1に対応するエントリには、ブロックBLK1のページ0、オフセット+1に対応する位置に格納されている4KBデータに対応する参照カウントが格納される。
参照カウントが1以上であるデータは有効データであり、参照カウントが0のデータは無効データである。
フラッシュストレージデバイス3は、ホスト2から受信されるデュプリケートコマンド/Ttimコマンドに基づいて、参照カウントをインクリメント/デクリメントする。
図39は、参照カウントの管理のためにフラッシュストレージデバイス3に適用されるデュプリケートコマンドを示す。
デュプリケートコマンドは、ある物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)に格納されているデータの参照カウントを増やすことをフラッシュストレージデバイス3に要求するコマンドである。
このデュプリケートコマンドは、コマンドID、フラッシュアドレス、長さ、等を含んでもよい。
コマンドIDはこのコマンドがデュプリケートコマンドであることを示すID(コマンドコード)であり、デュプリケートコマンドにはデュプリケートコマンド用のコマンドIDが含まれる。
フラッシュアドレスは、参照カウントを増やすべきデータが格納されている最初の物理記憶位置を示す。
長さは、参照カウントを増やすべきデータの長さを示す。
コントローラ4は、参照カウントを増やすべきデータが格納されている物理記憶位置を示すブロックアドレス、ページアドレス、ページ内オフセットを含むデュプリケートコマンドをホスト2から受信した場合、ブロック管理テーブル32を更新して、デュプリケートコマンドに含まれるブロック番号、ページ番号、ページ内オフセットに対応する物理記憶位置のデータに対応する参照カウントを増やす。
図40のシーケンスチャートは、参照カウントインクリメント/デクリメント処理を示す。
フラッシュストレージデバイス3のコントローラ4がホスト2からデュプリケートコマンドを受信した時、コントローラ4は、デュプリケートコマンドによって指定されるフラッシュアドレス(ブロックアドレス、ページアドレス、オフセット(ページ内オフセット))に対応する参照カウント、つまり、このブロックアドレス、ページアドレス、オフセットによって指定されるNAND型フラッシュメモリ5内の物理記憶位置に格納されているデータに対応する参照カウントを、例えば1だけ、増やす(ステップS61)。この場合、コントローラ4は、デュプリケートコマンドによって指定されるブロックアドレスを有するブロックに対応するブロック管理テーブル32を更新する。このブロック管理テーブル32の更新では、デュプリケートコマンドによって指定される物理記憶位置に対応するブロック管理テーブル32内のエントリに格納されている参照カウントが、例えば1だけ、増やされる。デュプリケートコマンドによって指定される長さが2以上の場合には、デュプリケートコマンドによって指定されるページアドレスおよびオフセットに対応する参照カウントのみならず、このページアドレスおよびオフセットに後続する幾つかのページアドレスおよびオフセットに対応する参照カウントも、例えば1だけ、増やされる。
フラッシュストレージデバイス3のコントローラ4がホスト2からTrimコマンドを受信した時、コントローラ4は、Trimコマンドによって指定されるフラッシュアドレス(ブロックアドレス、ページアドレス、オフセット(ページ内オフセット))に対応する参照カウント、つまり、このブロックアドレス、ページアドレス、オフセットによって指定されるNAND型フラッシュメモリ5内の物理記憶位置に格納されているデータに対応する参照カウントを、例えば1だけ、減らす(ステップS62)。この場合、コントローラ4は、Trimコマンドによって指定されるブロックアドレスを有するブロックに対応するブロック管理テーブル32を更新する。このブロック管理テーブル32の更新では、Trimコマンドによって指定されるページアドレスおよびオフセットに対応するブロック管理テーブル32内のエントリに格納されている参照カウントが、例えば1だけ、減らされる。Trimコマンドによって指定される長さが2以上の場合には、Trimコマンドによって指定されるページアドレスおよびオフセットに対応する参照カウントのみならず、このオフセットに後続する幾つかのページアドレスおよびオフセットに対応する参照カウントも、例えば1だけ、減らされる。
GCにおいては、コントローラ4は、GCソースブロックに対応するブロック管理テーブルを参照して、サイズが4KBであるデータ単位で、GCソースブロック内のデータが有効データであるか無効データであるかを判定する。コントローラ4は、参照カウントが0であるデータは無効データであると判定し、参照カウントが1以上であるデータは有効データであると判定する。そして、コントローラ4は、有効データ(参照カウントが1以上のデータ)とこの有効データに対応する論理アドレスをGCソースブロック(GCソーススーパーブロック)からGCデスティネーションブロック(GCデスティネーションスーパーブロック)にコピーする。
より詳しくは、コントローラ4は、NAND型フラッシュメモリ5のガベージコレクションを実行する場合、ガベージコレクションのためのGCソースブロック(GCソーススーパーブロック)およびGCデスティネーションブロック(GCデスティネーションスーパーブロック)を選択する。コントローラ4は、GCソースブロック(GCソーススーパーブロック)内に格納されている、参照カウントが1以上の第1のデータ(有効データ)と第1のデータの論理アドレスの双方をGCデスティネーションブロック(GCデスティネーションスーパーブロック)にコピーする。そして、コントローラ4は、第1のデータのユーザアドレス(論理アドレス)と、第1のデータのコピー先物理記憶位置(新物理記憶位置)の物理アドレスと、第1のデータのコピー元物理記憶位置(旧物理記憶位置)の物理アドレスとを、ホスト2に通知する。
図41のフローチャートは、フラッシュストレージデバイス3によって実行されるスーパーブロック割り当て処理の手順を示す。
ホスト2からのスーパーブロック割当て要求(並列単位割り当て要求)を受信すると(ステップS71のYES)、コントローラ4は、この割当て要求によって指定された並列数以上の非不良ブロックを含むスーパーブロックを選択する(ステップS72)。
次に、コントローラ4は、選択したスーパーブロックをホスト2に割当てる(ステップS73)。
続いて、ホスト2からのライト要求を受信すると(ステップS74のYES)、コントローラ4は、ライトデータを、この割当てたスーパーブロック内の非不良ブロックに書き込む(ステップS75)。そして、コントローラ4は、レスポンスをホストに返す(ステップS76)。
次に、図42を用いてスーパーブロック内の全ての非不良ブロックがこのスーパーブロックの先頭から連続して論理的に配置されるようにアクセス対象ブロックのアドレスを変換するアドレス変換動作を説明する。
図42には、スーパーブロックSB5が、BLK5(Die#0)、BLK5(Die#1)、BLK5(Die#2)、BLK5(Die#3)、BLK5(Die#4)、BLK5(Die#5)、BLK5(Die#6)、BLK5(Die#7)から構成され、その中で、BLK5(Die#2)、BLK5(Die#5)が不良ブロックであることが示されている。また、BLK5(Die#0)、BLK5(Die#1)、BLK5(Die#2)、BLK5(Die#3)、BLK5(Die#4)、BLK5(Die#5)、BLK5(Die#6)、BLK5(Die#7)は、それぞれブロック番号(ブロックアドレス)0、1、2、3、4、5、6、7によって外部から指定されるものとする。
アドレス変換は、スーパーブロックSB5内の6個の非不良ブロック(BLK5(Die#0)、BLK5(Die#1)、BLK5(Die#3)、BLK5(Die#4)、BLK5(Die#6)、BLK5(Die#7))がブロック番号0~6のブロックとして扱われるように実行される。
アドレス変換動作が実行されると、BLK5(Die#0)、BLK5(Die#1)、BLK5(Die#2)、BLK5(Die#3)、BLK5(Die#4)のそれぞれのブロック番号は、それぞれ1→1、2→3、3→4、4→6、5→7に変換される。このアドレス変換動作により、スーパーブロックSB5の先頭から始まる連続したオフセットアドレス内に不良ブロックのブロック番号が含まれないようにすることができる。よって、このアドレス変換動作により、スーパーブロックSB5内の全ての非不良ブロックがこのスーパーブロックSB5の先頭から連続して論理的に配置されるので、スーパーブロックSB5をあたかも不良ブロックを含まない小サイズのスーパーブロック(6個の非不良ブロックのみから構成されるスーパーブロック)であるかのように扱うことができる。この結果、長いデータであっても、このデータの物理記憶位置を、その開始物理記憶位置を示す一つの物理アドレスと一つの長さとの組み合わせのみによって表現することが可能となる。
次に、図43を用いてアドレス変換動作のために使用される不良情報管理テーブル33とアドレス変換の例を説明する。なお、図43において、ブロック番号は16進数で表されている。
不良情報管理テーブル33は、先頭から(ブロック番号が小さいほうから)見つけた不良ブロック数の累計を示している。図43には、不良情報管理テーブル33のブロック番号が4、9のブロックが不良ブロックであることが示されている。この場合、不良情報管理テーブル33には、ブロック番号0に対応する位置、ブロック番号1に対応する位置、ブロック番号2に対応する位置、ブロック番号3に対応する位置に“0”が格納され、ブロック番号4に対応する位置、ブロック番号5に対応する位置、ブロック番号6に対応する位置、ブロック番号7に対応する位置、ブロック番号8に対応する位置に“1”が格納され、ブロック番号9に対応する位置、ブロック番号Aに対応する位置、ブロック番号Bに対応する位置、ブロック番号Cに対応する位置、ブロック番号Dに対応する位置に“1”が格納される。つまり、格納されている数値が変化した部分に対応するブロック番号のブロックが不良ブロックであることを示す。
なお、不良情報管理テーブル33のブロック番号E、およびFに対応する位置には、ありえない数値が格納される。もし、ブロック当たりの不良情報のビット数が2bitであるならば、ブロック番号E、およびFに対応する位置には“3”が格納される。
また、アドレス変換動作が実行されると、アクセス対象のブロックのブロック番号は、このブロックのブロック番号と不良ブロック数の累計との和に変換される。例えば、ブロック番号0~3については、不良ブロックの累計が“0”であるため、ブロック番号は不変である。
一方、例えば、アクセス対象のブロックのブロック番号が4である場合には、このブロック番号は+1され、ブロック番号“5”に変換される。このため、書き込み対象のブロックのブロック番号が4である場合には、データは、実際にはブロック番号“5”のブロックに書き込まれる。コントローラ4は、ブロック番号4をデータ書き込み先ブロックの物理アドレスとしてホスト2に通知する。ブロック番号4をリード対象ブロックの物理アドレスとて指定するリード要求を受信した場合には、このブロック番号4はブロック番号“5”に変換されるので、コントローラ4は、ブロック番号“5”のブロックからデータをリードする。
同様に、アクセス対象のブロックのブロック番号が5である場合には、このブロック番号は+1され、ブロック番号“6”に変換される。このため、書き込み対象のブロックのブロック番号が5である場合には、データは、実際にはブロック番号“6”のブロックに書き込まれる。コントローラ4は、ブロック番号5をデータ書き込み先ブロックの物理アドレスとしてホスト2に通知する。ブロック番号5をリード対象ブロックの物理アドレスとて指定するリード要求を受信した場合には、このブロック番号5はブロック番号“6”に変換されるので、コントローラ4は、ブロック番号“6”のブロックからデータをリードする。
図44は、ホスト2内のフラッシュトランスレーション部2Aとフラッシュストレージデバイス3内の不良ブロックトランスレーション部24との関係を示す。
ホスト2側では、フラッシュトランスレーション部2Aは、データの書き込みを行う場合、このデータを識別するTag(例えば、LBA)を含むライトコマンドをフラッシュストレージデバイス3に送信する。なお、スーパーブロック用のAPIを使用する場合には、フラッシュトランスレーション部2Aは、データを識別するTag(例えば、LBA)と、並列単位(Parallel Unit)のブロックアドレスとを指定するライトコマンド(Write without Page Address)をフラッシュストレージデバイス3に送信する。並列単位(Parallel Unit)は一つのスーパーブロックによって実現されているので、並列単位(Parallel Unit)のブロックアドレスは、このスーパーブロックのスーパーブロックアドレスである。
フラッシュストレージデバイス3側は、不良ブロックトランスレーション部24、フラッシュI/O制御回路13、不良情報管理テーブル33、NAND型フラッシュメモリダイから構成されている。また、フラッシュストレージデバイス3内ではスーパーブロック毎に使用可能または使用不可能を示す少なくとも2ビットの情報を保持する不良情報が、不良情報管理テーブル33で管理されている。
ホスト2側から、書き込むべきデータを識別するための情報であるTag(例えば、LBA)を含むライト要求を受信した場合、不良ブロックトランスレーション部24は、不良情報を参照して、書き込み対象のスーパーブロックに含まれる全ての非不良ブロックが書き込み対象のスーパーブロックの先頭から連続して論理的に配置されるようにアクセス対象ブロックのアドレスを変換するアドレス変換を実行することによって、書き込み対象のスーパーブロック内の非不良ブロックを書き込み先ブロックとして選択し、選択されたブロック内の書き込み先位置(書き込み先ページ、このページ内のオフセット)を決定する。
なお、並列単位のブロックアドレス(スーパーブロックアドレス)を指定するライトコマンドをホスト2から受信した場合、不良ブロックトランスレーション部24は、不良情報を参照して、この指定されたブロックアドレス(スーパーブロックアドレス)を有するスーパーブロックを書き込み対象のスーパーブロックとして選択する。
そして、不良ブロックトランスレーション部24は、書き込み先ブロックが属するダイのダイ識別子(Die ID)、書き込み先ブロックのブロックアドレス(Raw Block)、書き込み先ページ(Raw Page)、書き込み先ページ内のオフセット(Offset)を指定する書き込み指示をフラッシュI/O制御回路13に送信する。
また、不良ブロックトランスレーション部24は、アドレス変換前のアクセス対象ブロックおよび書き込み先位置の双方を示す物理アドレスと、Tag(例えば、LBA)とを、ホスト2に通知する。この物理アドレスは、書き込み先のスーパーブロックを示す並列単位(Parallel Unit)と、このスーパーブロック内のオフセット(Offset)とによって表されてもよい。書き込み先のスーパーブロックを示す並列単位(Parallel Unit)は、書き込み先のスーパーブロックのスーパーブロックアドレスである。
書き込み指示を受信したフラッシュI/O制御回路13は、書き込み指示に基づいて、書き込み先位置にデータを書き込む。
ホスト2側では、フラッシュトランスレーション部2Aは、物理アドレス(Parallel Unit、Offset)と、Tag(例えば、LBA)とを受信すると、ホスト2で管理されているLUTを更新し、受信した物理アドレスを受信したTag(例えば、LBA)にマッピングする。
フラッシュトランスレーション部2Aは、リード要求を行う場合、物理アドレス(Parallel Unit、Offset)を指定するリード要求をフラッシュストレージデバイス3に送信する。
フラッシュストレージデバイス3側では、物理アドレス(Parallel Unit、Offset)を指定するリード要求をホスト2から受信した場合、不良ブロックトランスレーション部24は、上述のアドレス変換を実行して、物理アドレス(Parallel Unit、Offset)を、ダイ識別子(Die ID)、ブロックアドレス(Raw Block)、ページアドレス(Raw Page)、ページ内のオフセット(Offset)に変換する。そして、不良ブロックトランスレーション部24は、ダイ識別子(Die ID)、ブロックアドレス(Raw Block)、ページアドレス(Raw Page)、ページ内のオフセット(Offset)を指定する書き込み指示をフラッシュI/O制御回路13に送信する。フラッシュI/O制御回路13は、ダイ識別子(Die ID)、ブロックアドレス(Raw Block)、ページアドレス(Raw Page)、ページ内のオフセット(Offset)に基づいて、データをリードする。
図45は、ホスト2(計算機システム)の構成例を示す。
このホスト2(計算機システム)は、プロセッサ(CPU)101、メインメモリ102、BIOS-ROM103、ネットワークコントローラ105、周辺インタフェースコントローラ106、コントローラ107、およびエンベデッドコントローラ(EC)108等を含む。
プロセッサ101は、この計算機システムの各コンポーネントの動作を制御するように構成されたCPUである。このプロセッサ101は、複数のフラッシュストレージデバイス3のいずれか1つからメインメモリ102にロードされる様々なプログラムを実行する。メインメモリ102は、DRAMのようなランダムアクセスメモリから構成される。プロセッサ101によって実行されるプログラムは、アプリケーションソフトウェアレイヤ41、オペレーティングシステム(OS)42、ファイルシステム43、ドライバ44、等を含む。ここで、ファイルシステム43にはフラッシュストレージマネージャ45が含まれる。なお、このフラッシュストレージマネージャ45は、ファイルシステム43ではなく、ドライバ44に含まれていてもよい。
また、プロセッサ101は、不揮発性メモリであるBIOS-ROM103に格納された基本入出力システム(BIOS)も実行する。BIOSはハードウェア制御のためのシステムプログラムである。
ネットワークコントローラ105は、有線LANコントローラ、無線LANコントローラのような通信デバイスである。周辺インタフェースコントローラ106は、USBデバイスのような周辺デバイスとの通信を実行するように構成されている。
コントローラ107は、複数のコネクタ107Aにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のフラッシュストレージデバイス3が複数のコネクタ107Aにそれぞれ接続されてもよい。コントローラ107は、SAS expander、PCIe Switch、PCIe expander、またはRAIDコントローラ等である。
EC108は、計算機システムの電力管理を実行するように構成されたシステムコントローラとして機能する。EC108は、ユーザによる電源スイッチの操作に応じて計算機システムをパワーオンおよびパワーオフする。EC108はワンチップマイクロコントローラのような処理回路として実現されている。
フラッシュストレージマネージャ45は、上述のフラッシュトランスレーション部2Aとして機能するプログラムモジュールである。フラッシュストレージマネージャ45は、ユーザアドレス(論理アドレス)それぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理する上述のLUTを有する。ユーザアドレス(論理アドレス)としてLBAが使用される場合には、フラッシュストレージマネージャ45はドライバ44内に設けられてもよい。
フラッシュストレージマネージャ45は、書き込むべきデータ(ライトデータ)を識別するためのユーザアドレス(論理アドレス)とこのライトデータの長さとを指定するライトコマンドをフラッシュストレージデバイス3に送信する。フラッシュストレージマネージャ45は、不良ブロックを除くブロックの中からフラッシュストレージデバイス3によって選択された書き込み先ブロックおよび書き込み先ブロック内の書き込み先位置の双方を示す物理アドレスと、上述のユーザアドレス(論理アドレス)とをフラッシュストレージデバイス3から受信し、LUTを更新してこのユーザアドレス(論理アドレス)にこの物理アドレスをマッピングする。受信する物理アドレスは、詳しくは、書き込み対象の一つの並列単位に含まれる不良ブロック以外のブロックの中からライトデータのための書き込み先ブロックとしてフラッシュストレージデバイス3によって選択された書き込み先ブロックおよびこのライトデータが書き込まれた書き込み先ブロック内の物理記憶位置の双方を示す。
また、フラッシュストレージマネージャ45は、LUTを参照して、リード対象のデータに対応するユーザアドレス(論理アドレス)にマッピングされている物理アドレスを取得し、この物理アドレスを指定するリードコマンドをフラッシュストレージデバイス3に送信する。
図46は、フラッシュストレージデバイス3を内蔵するホスト(計算機システム)2の構成例を示す。
この計算機システムは、ラックに収容可能な薄い箱形の筐体201を備える。多数のフラッシュストレージデバイス3は筐体201内に配置されても良い。この場合、各フラッシュストレージデバイス3は筐体201の前面201Aに設けられたスロットに取り外し可能に挿入されてもよい。
システムボード(マザーボード)202は筐体201内に配置される。システムボード(マザーボード)202上においては、CPU101、メモリ102、ネットワークコントローラ105、コントローラ107を含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
図47のフローチャートは、ホスト(計算機システム)2によって実行される書き込み動作の手順を示す。
ホスト2のプロセッサ101は、メインメモリ102に格納されたコンピュータプログラム(ここでは、フラッシュストレージマネージャ45等)を実行することによって以下の手順を実行する。
すなわち、プロセッサ101は、ライトコマンドを送信する必要があるか否かを判定し(ステップS201)、ライトコマンドを送信する必要があるならば(ステップS201のYES)、ユーザアドレス、フラッシュアドレス、長さを指定するライトコマンドをフラッシュストレージデバイス3に送信する(ステップS202)。
その後、プロセッサ101は、フラッシュストレージデバイス3からの書き込み動作完了のレスポンス(ユーザアドレス、フラッシュアドレス、長さを含む)を受信したならば(ステップS203のYES)、LUTを更新する(ステップS204)。そして、プロセッサ101は、旧データに対応する物理アドレスを指定するTrimコマンドをフラッシュストレージデバイス3に送信して記旧データを無効化すべきこと(または旧データを参照している論理アドレスの数を示す参照カウントを減らすべきこと)をフラッシュストレージデバイス3に指示する(ステップS205)。
図48のフローチャートは、ホスト2によって実行されるリード動作の手順を示す。
プロセッサ101は、リードコマンドを送信する必要があるか否かを判定し(ステップS301)、リードコマンドを送信する必要があるならば(ステップS301のYES)、フラッシュアドレス、長さを指定するリードコマンドをフラッシュストレージデバイス3に送信する(ステップS302)。
その後、プロセッサ101は、リードデータを受信したか否かを判定し(ステップS303)、リードデータを受信したならば(ステップS303のYES)、動作は完了する。
図49のフローチャートは、ホスト2によって実行される参照カウントインクリメント/デクリメント処理の手順を示す。
プロセッサ101は、旧データの参照数を増やすためのデュプリケーションコマンドを送信する必要があるか否かを判定し(ステップS401)、デュプリケーションコマンドを送信する必要があるならば(ステップS401のYES)、デュプリケーションコマンドをフラッシュストレージデバイス3に送信する(ステップS402)。
また、プロセッサ101は、旧データの参照数を減らすためのTrimコマンドを送信する必要があるか否かを判定し(ステップS403)、Trimコマンドを送信する必要があるならば(ステップS403のYES)、Trimコマンドをフラッシュストレージデバイス3に送信する(ステップS404)。
以上説明したように、本実施形態によれば、ホスト(計算機システム)2は、ライトデータを識別するための論理アドレスを指定するライト要求をストレージデバイス3に送信し、不良ブロックを除くブロックの中からライトデータのための書き込み先ブロックとしてストレージデバイス3によって選択された書き込み先ブロックおよびライトデータが書き込まれた書き込み先ブロック内の物理記憶位置の双方を示す物理アドレスと、この論理アドレスとを、ストレージデバイス3から受信する。そして、ホスト(計算機システム)2は、LUTを更新して、受信した物理アドレスを受信した論理アドレスにマッピングする。したがって、不良ブロック以外の物理記憶位置を直接的に示す物理アドレスをホスト(計算機システム)2のLUTによって管理することができるので、ホスト(計算機システム)2は、必要に応じて、この物理記憶位置を直接的に示す物理アドレスを指定するリード要求をストレージデバイス3に送信することができる。この結果、ストレージデバイス3側では、不良ブロックをこの不良ブロックが属するダイ内の他のブロックで置換することなく、不良ブロック以外のブロックに対するデータ書き込みおよび読み出し動作を正常に実行することができる。よって、たとえ不良ブロックの数が増えても、大量の置き換え情報を管理する必要はない。また、置換処理のためのアドレス変換処理も不要であるので、リードレイテンシを低減することができる。よって、システム全体のI/O性能を向上することが可能となる。
なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト、3…フラッシュストレージデバイス、4…コントローラ、5…NAND型フラッシュメモリ、21…ライト動作制御部、22…リード動作制御部、23…GC動作制御部。

Claims (16)

  1. 各々が複数のブロックを含む複数の不揮発性メモリダイを備えるストレージデバイスを制御する計算機システムであって、
    メモリと、
    前記メモリに電気的に接続され、前記メモリに格納されたコンピュータプログラムを実行するように構成されたプロセッサとを具備し、
    前記プロセッサは、
    書き込むべき第1のデータに対応する第1の論理アドレスと前記第1のデータの長さとを指定するライト要求を前記ストレージデバイスに送信し、
    不良ブロックを除くブロックの中から前記第1のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第1のブロックおよび前記第1のデータが書き込まれた前記第1のブロック内の第1の物理記憶位置の双方を示す第1の物理アドレスと、前記第1の論理アドレスとを、前記ストレージデバイスから受信し、
    論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第1のテーブルを更新して前記第1の論理アドレスに前記第1の物理アドレスをマッピングするように構成されている、計算機システム。
  2. 前記プロセッサは、
    前記第1のテーブルを参照して前記第1の論理アドレスにマッピングされている前記第1の物理アドレスを取得し、
    前記第1の物理アドレスを指定するリード要求を前記ストレージデバイスに送信するように構成されている請求項1記載の計算機システム。
  3. 前記プロセッサは、
    前記ストレージデバイスによって前記第1のデータが旧物理記憶位置から新物理記憶位置にコピーされた後、前記第1の論理アドレスと、前記旧物理記憶位置を示す第2の物理アドレスと、前記新物理記憶位置を示す第3の物理アドレスとを前記ストレージデバイスから受信し、
    前記第1のテーブルを参照して前記第1の論理アドレスにマッピングされている現在の物理アドレスを取得し、
    前記第2の物理アドレスが前記取得された現在の物理アドレスに一致する場合、前記第1のテーブルを更新して前記第1の論理アドレスに前記第3の物理アドレスをマッピングし、
    前記第2の物理アドレスが前記取得された現在の物理アドレスに一致しない場合、前記第1のテーブルを更新せずに前記現在の物理アドレスを維持するように構成されている請求項1記載の計算機システム。
  4. 前記プロセッサは、前記第1のテーブルを更新して前記第1の論理アドレスに前記第3の物理アドレスをマッピングした後、前記第2の物理アドレスを指定する第1のコマンドを前記ストレージデバイスに送信することによって前記第2の物理アドレスに対応するデータを無効化すべきことを前記ストレージデバイスに指示するように構成されている請求項3記載の計算機システム。
  5. 前記プロセッサは、前記第1のデータが、前記ストレージデバイスに既に書き込まれている旧データの更新データである場合、前記第1のテーブルを更新して前記第1の論理アドレスに前記第1の物理アドレスをマッピングした後、前記旧データに対応する物理アドレスを指定する第1のコマンドを前記ストレージデバイスに送信することによって、前記旧データを無効化すべきことを前記ストレージデバイスに指示するように構成されている請求項1記載の計算機システム。
  6. 前記プロセッサは、前記第1のデータが、前記ストレージデバイスに既に書き込まれている旧データの更新データであり、且つ前記旧データが複数の論理アドレスによって参照されている重複データである場合、前記第1のテーブルを更新して前記第1の論理アドレスに前記第1の物理アドレスをマッピングした後、前記旧データに対応する物理アドレスを指定する第1のコマンドを前記ストレージデバイスに送信することによって、前記旧データを参照している論理アドレスの数を示す参照カウントを減らすべきことを前記ストレージデバイスに指示するように構成されている請求項1記載の計算機システム。
  7. 前記計算機システムは前記参照カウントを保持していない請求項6記載の計算機システム。
  8. 複数の不揮発性メモリダイを備え且つ異なる不揮発性メモリダイに属するブロックそれぞれを各々が含む複数の並列単位を管理するように構成されたストレージデバイスを制御する計算機システムであって、
    メモリと、
    前記メモリに電気的に接続され、前記メモリに格納されたコンピュータプログラムを実行するように構成されたプロセッサとを具備し、
    前記プロセッサは、
    書き込むべき第1のデータに対応する第1の論理アドレスと前記第1のデータの長さとを指定するライト要求を前記ストレージデバイスに送信し、
    書き込み対象の一つの並列単位に含まれる不良ブロック以外のブロックの中から前記第1のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第1のブロックおよび前記第1のデータが書き込まれた前記第1のブロック内の第1の物理記憶位置の双方を示す第1の物理アドレスと、前記第1の論理アドレスとを、前記ストレージデバイスから受信し、
    論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第1のテーブルを更新して前記第1の論理アドレスに前記第1の物理アドレスをマッピングするように構成されている、計算機システム。
  9. 前記ライト要求は、前記第1の論理アドレスと、前記複数の並列単位内の一つの並列単位を示す第1のブロックアドレスとを指定し、
    前記書き込み対象の前記一つの並列単位は、前記指定された第1のブロックアドレスを有する並列単位である請求項8記載の計算機システム。
  10. 前記プロセッサは、
    前記第1のテーブルを参照して前記第1の論理アドレスにマッピングされている前記第1の物理アドレスを取得し、
    前記第1の物理アドレスを指定するリード要求を前記ストレージデバイスに送信するように構成されている請求項8記載の計算機システム。
  11. 前記プロセッサは、
    前記ストレージデバイスによって前記第1のデータが旧物理記憶位置から新物理記憶位置にコピーされた後、前記第1の論理アドレスと、前記旧物理記憶位置を示す第2の物理アドレスと、前記新物理記憶位置を示す第3の物理アドレスとを前記ストレージデバイスから受信し、
    前記第1のテーブルを参照して前記第1の論理アドレスにマッピングされている現在の物理アドレスを取得し、
    前記第2の物理アドレスが前記取得された現在の物理アドレスに一致する場合、前記第1のテーブルを更新して前記第1の論理アドレスに前記第3の物理アドレスをマッピングし、
    前記第2の物理アドレスが前記取得された現在の物理アドレスに一致しない場合、前記第1のテーブルを更新せずに前記現在の物理アドレスを維持するように構成されている請求項8記載の計算機システム。
  12. 前記プロセッサは、前記第1のテーブルを更新して前記第1の論理アドレスに前記第3の物理アドレスをマッピングした後、前記第2の物理アドレスを指定する第1のコマンドを前記ストレージデバイスに送信することによって前記第2の物理アドレスに対応するデータを無効化すべきことを前記ストレージデバイスに指示するように構成されている請求項11記載の計算機システム。
  13. 各々が複数のブロックを含む複数の不揮発性メモリダイを備えるストレージデバイスを制御する計算機システムによって実行される制御方法であって、
    書き込むべき第1のデータに対応する第1の論理アドレスと前記第1のデータの長さとを指定するライト要求を前記ストレージデバイスに送信することと、
    不良ブロックを除くブロックの中から前記第1のデータのための書き込み先ブロックとして前記ストレージデバイスによって選択された第1のブロックおよび前記第1のデータが書き込まれた前記第1のブロック内の第1の物理記憶位置の双方を示す第1の物理アドレスと、前記第1の論理アドレスとを、前記ストレージデバイスから受信することと、
    論理アドレスそれぞれと前記ストレージデバイスの物理アドレスそれぞれとの間のマッピングを管理する第1のテーブルを更新して前記第1の論理アドレスに前記第1の物理アドレスをマッピングすることとを具備する制御方法。
  14. 前記第1のテーブルを参照して前記第1の論理アドレスにマッピングされている前記第1の物理アドレスを取得することと、
    前記第1の物理アドレスを指定するリード要求を前記ストレージデバイスに送信することとをさらに具備する請求項13記載の制御方法。
  15. 前記ストレージデバイスによって前記第1のデータが旧物理記憶位置から新物理記憶位置にコピーされた後、前記第1の論理アドレスと、前記旧物理記憶位置を示す第2の物理アドレスと、前記新物理記憶位置を示す第3の物理アドレスとを前記ストレージデバイスから受信することと、
    前記第1のテーブルを参照して前記第1の論理アドレスにマッピングされている現在の物理アドレスを取得することと、
    前記第2の物理アドレスが前記取得された現在の物理アドレスに一致する場合、前記第1のテーブルを更新して前記第1の論理アドレスに前記第3の物理アドレスをマッピングすることと、
    前記第2の物理アドレスが前記取得された現在の物理アドレスに一致しない場合、前記第1のテーブルを更新せずに前記現在の物理アドレスを維持することとをさらに具備する請求項13記載の制御方法。
  16. 前記第1のテーブルを更新して前記第1の論理アドレスに前記第3の物理アドレスをマッピングした後、前記第2の物理アドレスを指定する第1のコマンドを前記ストレージデバイスに送信することによって前記第2の物理アドレスに対応するデータを無効化すべきことを前記ストレージデバイスに指示することをさらに具備する請求項15記載の制御方法。
JP2017209344A 2017-10-30 2017-10-30 計算機システムおよび制御方法 Active JP7074454B2 (ja)

Priority Applications (9)

Application Number Priority Date Filing Date Title
JP2017209344A JP7074454B2 (ja) 2017-10-30 2017-10-30 計算機システムおよび制御方法
US16/017,195 US10558563B2 (en) 2017-10-30 2018-06-25 Computing system and method for controlling storage device
TW111114108A TWI805323B (zh) 2017-10-30 2018-08-06 儲存裝置
CN201810887535.3A CN109725848A (zh) 2017-10-30 2018-08-06 计算机系统及储存装置的控制方法
TW109121852A TWI765289B (zh) 2017-10-30 2018-08-06 儲存系統
TW107127263A TWI700586B (zh) 2017-10-30 2018-08-06 計算機系統及儲存裝置之控制方法
US16/740,680 US11151029B2 (en) 2017-10-30 2020-01-13 Computing system and method for controlling storage device
US17/475,025 US11669444B2 (en) 2017-10-30 2021-09-14 Computing system and method for controlling storage device
US18/138,378 US20230259452A1 (en) 2017-10-30 2023-04-24 Computing system and method for controlling storage device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017209344A JP7074454B2 (ja) 2017-10-30 2017-10-30 計算機システムおよび制御方法

Publications (2)

Publication Number Publication Date
JP2019082817A JP2019082817A (ja) 2019-05-30
JP7074454B2 true JP7074454B2 (ja) 2022-05-24

Family

ID=66243968

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017209344A Active JP7074454B2 (ja) 2017-10-30 2017-10-30 計算機システムおよび制御方法

Country Status (4)

Country Link
US (4) US10558563B2 (ja)
JP (1) JP7074454B2 (ja)
CN (1) CN109725848A (ja)
TW (3) TWI765289B (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190082513A (ko) * 2018-01-02 2019-07-10 에스케이하이닉스 주식회사 컨트롤러 및 그것의 동작방법
KR102524432B1 (ko) * 2018-04-09 2023-04-24 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
KR102530369B1 (ko) * 2018-04-23 2023-05-10 에스케이하이닉스 주식회사 저장 장치 및 그 동작 방법
CN110658980B (zh) * 2018-06-29 2021-03-23 华为技术有限公司 数据处理方法及装置、存储系统
KR20210018570A (ko) * 2019-08-05 2021-02-18 에스케이하이닉스 주식회사 컨트롤러, 컨트롤러의 동작 방법 및 이를 포함하는 저장 장치
KR20210076497A (ko) 2019-12-16 2021-06-24 에스케이하이닉스 주식회사 스토리지 장치 및 그 동작 방법
US11734175B2 (en) 2019-08-22 2023-08-22 SK Hynix Inc. Storage device and method of operating the same
US20210064278A1 (en) * 2019-08-27 2021-03-04 Micron Technology, Inc. Managing attributes of memory components
CN110609660A (zh) * 2019-09-10 2019-12-24 深圳忆联信息系统有限公司 Ssd阵列的主机端映射方法、装置、计算机设备及存储介质
US11762769B2 (en) 2019-09-20 2023-09-19 SK Hynix Inc. Memory controller based on flush operation and method of operating the same
KR20210043314A (ko) * 2019-10-11 2021-04-21 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 동작 방법
JP7214758B2 (ja) 2019-11-15 2023-01-30 キオクシア株式会社 ストレージデバイスおよびストレージシステム
US11561870B2 (en) * 2020-03-30 2023-01-24 Kioxia Corporation SSD with compressed superblock mapping table
CN111177091B (zh) * 2020-04-10 2020-07-31 深圳市思拓通信系统有限公司 基于xfs文件系统录像预分配存储方法、系统及存储介质
US11609909B2 (en) * 2020-05-12 2023-03-21 Google Llc Zero copy optimization for select * queries
CN112711501B (zh) * 2020-12-30 2023-04-25 杭州国芯科技股份有限公司 采用NAND Flash作为存储器时坏块管理的方法
US11494124B2 (en) 2021-02-17 2022-11-08 Micron Technology, Inc. Inversion refresh of physical memory location
US11561713B2 (en) * 2021-03-11 2023-01-24 Western Digital Technologies, Inc. Simplified high capacity die and block management
TWI802279B (zh) * 2022-02-18 2023-05-11 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
TWI805231B (zh) 2022-02-18 2023-06-11 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
TW202334821A (zh) 2022-02-18 2023-09-01 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
TWI814590B (zh) * 2022-09-26 2023-09-01 慧榮科技股份有限公司 資料處理方法及對應之資料儲存裝置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008226040A (ja) 2007-03-14 2008-09-25 Hitachi Ltd 情報処理装置及びコマンド多重度制御方法
JP2009245163A (ja) 2008-03-31 2009-10-22 Tdk Corp メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2011197945A (ja) 2010-03-18 2011-10-06 Toshiba Corp コントローラ、データ記憶装置、及びプログラム
WO2014155668A1 (ja) 2013-03-29 2014-10-02 株式会社 東芝 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム、ストレージコントローラ及び方法
JP2014222528A (ja) 2014-07-08 2014-11-27 株式会社東芝 メモリシステムおよび不揮発性メモリの制御方法
JP2016021246A (ja) 2012-06-19 2016-02-04 株式会社東芝 制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置
JP2017162068A (ja) 2016-03-08 2017-09-14 東芝メモリ株式会社 ストレージシステム、情報処理システムおよび制御方法

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6728851B1 (en) 1995-07-31 2004-04-27 Lexar Media, Inc. Increasing the memory performance of flash memory devices by writing sectors simultaneously to multiple flash memory devices
US6427186B1 (en) * 1999-03-30 2002-07-30 Frank (Fong-Long) Lin Memory, interface system and method for mapping logical block numbers to physical sector numbers in a flash memory, using a master index table and a table of physical sector numbers
JP5019567B2 (ja) * 2006-08-04 2012-09-05 ソニーモバイルコミュニケーションズ株式会社 メモリ管理方法および携帯端末装置
US20090013148A1 (en) * 2007-07-03 2009-01-08 Micron Technology, Inc. Block addressing for parallel memory arrays
EP2476079A4 (en) * 2009-09-09 2013-07-03 Fusion Io Inc APPARATUS, SYSTEM, AND METHOD FOR STORAGE ALLOCATION
US9582431B2 (en) 2010-03-22 2017-02-28 Seagate Technology Llc Storage address space to NVM address, span, and length mapping/converting
JP5581256B2 (ja) 2011-03-28 2014-08-27 株式会社東芝 メモリシステム、コントローラ、およびメモリシステムの制御方法
CN102279712A (zh) * 2011-08-10 2011-12-14 北京百度网讯科技有限公司 一种适用于互联网存储系统的存储控制方法、系统和装置
US20140181455A1 (en) * 2012-12-20 2014-06-26 Apple Inc. Category based space allocation for multiple storage devices
WO2014102882A1 (en) * 2012-12-28 2014-07-03 Hitachi, Ltd. Storage apparatus and storage control method
US10824553B2 (en) * 2015-04-24 2020-11-03 Toshiba Memory Corporation Memory device that controls timing of receiving write data from a host
JP2017045288A (ja) * 2015-08-27 2017-03-02 株式会社東芝 メモリシステム
US20170139616A1 (en) * 2015-11-17 2017-05-18 HGST Netherlands B.V. Method of decreasing write amplification factor and over-provisioning of nand flash by means of diff-on-write approach
JP6414853B2 (ja) * 2015-12-14 2018-10-31 東芝メモリ株式会社 メモリシステムおよび制御方法
JP6523193B2 (ja) 2016-03-08 2019-05-29 東芝メモリ株式会社 ストレージシステム、情報処理システムおよび制御方法
TWI645289B (zh) * 2017-10-31 2018-12-21 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體操作方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008226040A (ja) 2007-03-14 2008-09-25 Hitachi Ltd 情報処理装置及びコマンド多重度制御方法
JP2009245163A (ja) 2008-03-31 2009-10-22 Tdk Corp メモリコントローラ、メモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP2011197945A (ja) 2010-03-18 2011-10-06 Toshiba Corp コントローラ、データ記憶装置、及びプログラム
JP2016021246A (ja) 2012-06-19 2016-02-04 株式会社東芝 制御プログラム、ホスト装置の制御方法、情報処理装置およびホスト装置
WO2014155668A1 (ja) 2013-03-29 2014-10-02 株式会社 東芝 データの重複をハッシュテーブルに基づいて排除するためのストレージシステム、ストレージコントローラ及び方法
JP2014222528A (ja) 2014-07-08 2014-11-27 株式会社東芝 メモリシステムおよび不揮発性メモリの制御方法
JP2017162068A (ja) 2016-03-08 2017-09-14 東芝メモリ株式会社 ストレージシステム、情報処理システムおよび制御方法

Also Published As

Publication number Publication date
TWI700586B (zh) 2020-08-01
TWI805323B (zh) 2023-06-11
US20230259452A1 (en) 2023-08-17
US20190129841A1 (en) 2019-05-02
TW201917580A (zh) 2019-05-01
US10558563B2 (en) 2020-02-11
JP2019082817A (ja) 2019-05-30
US11669444B2 (en) 2023-06-06
US20210406173A1 (en) 2021-12-30
TW202230136A (zh) 2022-08-01
TW202046116A (zh) 2020-12-16
US11151029B2 (en) 2021-10-19
US20200151091A1 (en) 2020-05-14
CN109725848A (zh) 2019-05-07
TWI765289B (zh) 2022-05-21

Similar Documents

Publication Publication Date Title
JP7074454B2 (ja) 計算機システムおよび制御方法
JP7074453B2 (ja) メモリシステムおよび制御方法
JP6785205B2 (ja) メモリシステムおよび制御方法
JP6982468B2 (ja) メモリシステムおよび制御方法
JP6785204B2 (ja) メモリシステムおよび制御方法
JP7013546B2 (ja) メモリシステム
JP7204020B2 (ja) 制御方法
JP7102482B2 (ja) メモリシステムおよび制御方法
JP7167295B2 (ja) メモリシステムおよび制御方法
JP7366222B2 (ja) メモリシステムおよび制御方法
JP2023021450A (ja) メモリシステム

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20180830

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200915

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211026

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211210

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: 20220412

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220512

R151 Written notification of patent or utility model registration

Ref document number: 7074454

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151