JP2019079464A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2019079464A JP2019079464A JP2017208115A JP2017208115A JP2019079464A JP 2019079464 A JP2019079464 A JP 2019079464A JP 2017208115 A JP2017208115 A JP 2017208115A JP 2017208115 A JP2017208115 A JP 2017208115A JP 2019079464 A JP2019079464 A JP 2019079464A
- Authority
- JP
- Japan
- Prior art keywords
- block
- host
- physical address
- data
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 188
- 238000000034 method Methods 0.000 title claims description 33
- 238000013507 mapping Methods 0.000 claims abstract description 32
- 238000006243 chemical reaction Methods 0.000 claims abstract description 26
- 238000013519 translation Methods 0.000 claims description 16
- 239000008186 active pharmaceutical agent Substances 0.000 description 226
- 238000007726 management method Methods 0.000 description 50
- 230000004044 response Effects 0.000 description 45
- 230000006870 function Effects 0.000 description 36
- 238000012545 processing Methods 0.000 description 23
- 230000014616 translation Effects 0.000 description 14
- 230000008569 process Effects 0.000 description 13
- 238000012546 transfer Methods 0.000 description 9
- 239000000872 buffer Substances 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000003321 amplification Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 5
- 238000003199 nucleic acid amplification method Methods 0.000 description 5
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 102220481310 Adhesion G-protein coupled receptor D1_S11A_mutation Human genes 0.000 description 2
- 102220588696 Keratin, type I cytoskeletal 18_S51A_mutation Human genes 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 102220480414 Adhesion G-protein coupled receptor D1_S13A_mutation Human genes 0.000 description 1
- 102220495430 Glutaredoxin-like protein C5orf63_S12A_mutation Human genes 0.000 description 1
- 101001118566 Homo sapiens 40S ribosomal protein S15a Proteins 0.000 description 1
- 102220588438 Keratin, type I cytoskeletal 18_S15A_mutation Human genes 0.000 description 1
- 102220588436 Keratin, type I cytoskeletal 18_S31A_mutation Human genes 0.000 description 1
- 102220588433 Keratin, type I cytoskeletal 18_S42A_mutation Human genes 0.000 description 1
- 102220588695 Keratin, type I cytoskeletal 18_S53A_mutation Human genes 0.000 description 1
- 102220621241 Proline-rich membrane anchor 1_S32A_mutation Human genes 0.000 description 1
- 102220585520 T cell receptor gamma constant 1_S20A_mutation Human genes 0.000 description 1
- 102220585558 T cell receptor gamma constant 1_S41A_mutation Human genes 0.000 description 1
- 102220536512 THAP domain-containing protein 1_S52A_mutation Human genes 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012005 ligant binding assay Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 102220247850 rs1421233354 Human genes 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000013403 standard screening design Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0615—Address space extension
- G06F12/0623—Address space extension for memory modules
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7204—Capacity control, e.g. partitioning, end-of-life degradation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Iron Core Of Rotating Electric Machines (AREA)
- Soundproofing, Sound Blocking, And Sound Damping (AREA)
- Vehicle Body Suspensions (AREA)
Abstract
【課題】異なる種類のインタフェースに対応した複数の領域を選択的に利用することができるメモリシステムを実現する。【解決手段】ホストから受信したリード要求が第1領域を示す第1の識別子を含む場合、メモリシステムは、受信したリード要求から論理アドレスを取得し、前記取得した論理アドレスに対応する物理アドレスを、論理アドレスそれぞれと前記一つの第1領域の物理アドレスそれぞれとの間のマッピングを管理する論理物理アドレス変換テーブルから取得し、取得した物理アドレスに基づいて、前記一つの第1領域からデータをリードする。受信したリード要求が第2領域を示す第2の識別子を含む場合、メモリシステムは、受信したリード要求から物理アドレス情報を取得し、取得した物理アドレス情報に基づいて、第2の領域からデータをリードする。【選択図】図2
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
最近では、ホストとストレージとの間の新たなインタフェースが提案され始めている。
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 >
本発明が解決しようとする課題は、異なる種類のインタフェースに対応した複数の領域を選択的に利用することができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、各々が複数のページを含む複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、前記不揮発性メモリを論理的に分割することによって得られる複数の領域を管理する。前記複数の領域は、前記ホストが論理アドレスを指定し前記不揮発性メモリの物理アドレスを指定しない第1タイプのインタフェースを使用してリードアクセスされる一つ以上の第1領域と、前記ホストが前記不揮発性メモリの物理アドレスの一部または全体を指定する第2タイプのインタフェースを使用してリードアクセスされる一つ以上の第2領域とを含む。前記コントローラは、前記ホストからリード要求を受信する。前記コントローラは、前記受信したリード要求が前記一つ以上の第1領域の一つの第1領域を示す第1の識別子を含む場合、前記第1タイプのインタフェースを選択し、前記受信したリード要求から論理アドレスを取得し、前記取得した論理アドレスに対応する物理アドレスを、論理アドレスそれぞれと前記一つの第1領域の物理アドレスそれぞれとの間のマッピングを管理する論理物理アドレス変換テーブルから取得し、取得した物理アドレスに基づいて、前記一つの第1領域からデータをリードする。前記コントローラは、前記受信したリード要求が前記一つ以上の第2領域の一つの第2領域を示す第2の識別子を含む場合、前記第2タイプのインタフェースを選択し、前記受信したリード要求から前記一つの第2の領域の物理アドレスの一部または全てを指定する物理アドレス情報を取得し、前記取得した物理アドレス情報に基づいて、前記一つの第2の領域からデータをリードする。
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、一実施形態に係るメモリシステムを含む計算機システムの構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのフラッシュストレージデバイス3として実現されている。
この計算機システムは、ホスト(ホストデバイス)2と、複数のフラッシュストレージデバイス3とを含んでいてもよい。ホスト2は、複数のフラッシュストレージデバイス3によって構成されるフラッシュアレイをストレージとして使用するように構成されたサーバであってもよい。ホスト(サーバ)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の寿命も短くする。
このような問題点を解消するために、従来型SSDのFTLの機能の全てをホストに移すという対策も提案されている。
しかし、この対策を実装するためには、NAND型フラッシュメモリのブロックおよびページをホストが直接的にハンドリングすることが必要となる。NAND型フラッシュメモリの容量はNAND型フラッシュメモリの世代毎に増加しており、これに伴ってNAND型フラッシュメモリのブロックサイズ/ページサイズも世代毎に異なる。このためホスト2では異なるブロックサイズ・ページサイズのNAND型フラッシュメモリを混在して使用することが必要となる場合がありうる。異なるブロックサイズ/ページサイズを扱うことはホストにとっては困難である。また、様々な製造上の理由などにより発生する予測不可能な数の不良ページ(バッドページ)が存在することがありうるので、ブロック内の実質的に利用可能なページ数がブロック毎に異なることが想定され、そのNAND型フラッシュメモリ内のブロックサイズがブロック毎に異なる場合もあり得る。バッドページおよび不均一なブロックサイズをハンドリングすることは、ホストにとってはなおさら困難である。
そこで、本実施形態のフラッシュストレージデバイス3では、NAND型フラッシュメモリをアクセスするための複数種のインタフェース(ソフトウェアインタフェース)がサポートされており、NAND型フラッシュメモリ内のアクセス対象の領域毎に、使用すべきインタフェースを切り替えることができる。したがって、用途に応じて、より適切なインタフェースを使用することが可能となる。
より詳しくは、フラッシュストレージデバイス3は、NAND型フラッシュメモリを論理的に分割することによって得られる複数の領域を管理する。
これら複数の領域には、ホスト2が論理アドレスのみを指定しNAND型フラッシュメモリの物理アドレスを指定しない第1タイプのインタフェースを使用してリードアクセスされる一つ以上の第1領域が含まれる。
第1タイプのインタフェースにおいては、ホスト2は、NAND型フラッシュメモリの物理アドレスを指定する必要は無く、リードすべきデータに対応する論理アドレスのみを指定すればよい。
したがって、第1領域に関しては、ホスト2は、NAND型フラッシュメモリを直接的にハンドリングする必要はない。NAND型フラッシュメモリを直接的にハンドリングするためには、NAND型フラッシュメモリを直接的にハンドリングするために必要な機能群がホスト2上で既に実行されていることが必要となる。しかし、第1領域からデータをリードする場合にはこれら機能群は不要であるので、第1領域は、オペレーティングシステムをブートするためのブータブル領域として利用可能である。
さらに、これら複数の領域には、ホスト2がNAND型フラッシュメモリの物理アドレスの一部(例えばブロック番号のみ)または物理アドレスの全体(例えばブロック番号とブロック内オフセット)を指定する第2タイプのインタフェースを使用してリードアクセスされる一つ以上の第2領域も含まれる。
第2タイプのインタフェース(以下、物理アドレスAPIと称する)を使用してデータをリードする場合においては、NAND型フラッシュメモリの物理アドレスの一部または全体がホスト2によって指定される。
したがって、ホスト2は、必要に応じて物理アドレスAPIを使用することにより、NAND型フラッシュメモリを直接的にアクセスすることができる。
物理アドレスAPIを実現するに際しては、FTLの役割はホスト2とフラッシュストレージデバイス3との間で適切に分担されてもよい。この場合、従来型SSDのFTLの機能の一部のみがホスト2に移されてもよい。以下では、ホスト2に移されたFTL機能をグローバルFTLと称する。
ホスト2のグローバルFTLは、ストレージサービスを実行する機能、論理アドレスそれぞれとNAND型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する論理物理アドレス変換テーブルとして機能するルックアップテーブル(LUT)(または論理アドレスそれぞれとNAND型フラッシュメモリのブロック番号それぞれとの間のマッピングのみを管理するブロックレベルLUT)を管理する機能、ウェアー制御機能、高可用性を実現するための機能、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除(De−duplication)機能、等を有していてもよい。
一方、フラッシュストレージデバイス3は、ローレベルアブストラクション(LLA)のための機能を有していてもよい。LLAはNAND型フラッシュメモリのアブストラクションのための機能である。LLAは、物理アドレスAPIを実現するために利用し得る。
図2は、フラッシュストレージデバイス3によってサポートされる複数種のインタフェース(複数種のAPI)を示す。
フラッシュストレージデバイス3は、コントローラ4と、NAND型フラッシュメモリ5とを含む。コントローラ4は、複数種のAPIをサポートしている。これらAPIには、LBA API、物理アドレスAPI、キー・バリューAPI、他のAPI(例えば可変長LUT等)が含まれてもよい。
LBA APIは、上述の第1タイプのインタフェースとして利用される。LBA APIにおいては、ホスト2からのリード要求は、LBAのような論理アドレスのみを指定し、NAND型フラッシュメモリ5の物理アドレスを指定しない。また、LBA APIにおいては、ホスト2からのライト要求も、LBAのような論理アドレスのみを指定し、NAND型フラッシュメモリ5の物理アドレスを指定しない。
物理アドレスAPIは、上述の第2タイプのインタフェースとして利用される。本実施形態では、3種類の物理アドレスAPI、つまり物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、物理アドレスAPI(タイプ#3)が、NAND型フラッシュメモリ5の物理アドレスの一部または全体を指定する上述の第2タイプのインタフェースとしてそれぞれ利用され得る。コントローラ4は、物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、物理アドレスAPI(タイプ#3)の全てを利用可能な物理アドレスAPIとしてサポートしてもよいし、物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、物理アドレスAPI(タイプ#3)内の任意の1種類だけを利用可能な物理アドレスAPIとしてサポートしてもよい。
これら物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、物理アドレスAPI(タイプ#3)は、以下の特徴を有している。
<物理アドレスAPI(タイプ#1)>
物理アドレスAPI(タイプ#1)においては、ホスト2から受信されるリード要求はNAND型フラッシュメモリ5の物理アドレス全体(ブロック番号とブロック内オフセットの双方)を指定する。ブロック内オフセットは、ブロック内の位置を指定するブロック内物理アドレスである。ホスト2から受信されるライト要求は、論理アドレスのみを指定する。
物理アドレスAPI(タイプ#1)においては、ホスト2から受信されるリード要求はNAND型フラッシュメモリ5の物理アドレス全体(ブロック番号とブロック内オフセットの双方)を指定する。ブロック内オフセットは、ブロック内の位置を指定するブロック内物理アドレスである。ホスト2から受信されるライト要求は、論理アドレスのみを指定する。
つまり、ホスト2は論理物理アドレス変換テーブルとして機能するルックアップテーブルを管理するが、書き込みに使用すべきブロックの選択は、ホスト2ではなく、フラッシュストレージデバイス3のコントローラ4によって実行される。
<物理アドレスAPI(タイプ#2)>
物理アドレスAPI(タイプ#2)においては、ホスト2から受信されるリード要求は、NAND型フラッシュメモリ5の物理アドレスの一部(ブロック番号)と、論理アドレスとを指定する。一方、ホスト2から受信されるライト要求は、NAND型フラッシュメモリ5の物理アドレスの一部(ブロック番号)と、論理アドレスとを指定する。
物理アドレスAPI(タイプ#2)においては、ホスト2から受信されるリード要求は、NAND型フラッシュメモリ5の物理アドレスの一部(ブロック番号)と、論理アドレスとを指定する。一方、ホスト2から受信されるライト要求は、NAND型フラッシュメモリ5の物理アドレスの一部(ブロック番号)と、論理アドレスとを指定する。
つまり、ホスト2は、論理アドレスそれぞれとブロック番号それぞれとの間のマッピングを管理するためのブロックレベルアドレス変換テーブルであるブロックレベルルックアップテーブル(ブロックレベルLUT)を管理し、フラッシュストレージデバイス3は、論理アドレスそれぞれと各ブロックのブロック内物理アドレスとの間のマッピングを管理するためのページレベルアドレス変換テーブルであるブロック内ルックアップテーブル(ブロック内LUT)を管理する。
<物理アドレスAPI(タイプ#3)>
物理アドレスAPI(タイプ#3)においては、ホスト2から受信されるリード要求はNAND型フラッシュメモリ5の物理アドレス全体(ブロック番号およびブロック内オフセットの双方)を指定する。一方、ホスト2から受信されるライト要求は、NAND型フラッシュメモリ5の物理アドレスの一部(ブロック番号)と、論理アドレスとを指定する。
物理アドレスAPI(タイプ#3)においては、ホスト2から受信されるリード要求はNAND型フラッシュメモリ5の物理アドレス全体(ブロック番号およびブロック内オフセットの双方)を指定する。一方、ホスト2から受信されるライト要求は、NAND型フラッシュメモリ5の物理アドレスの一部(ブロック番号)と、論理アドレスとを指定する。
つまり、ホスト2は論理物理アドレス変換テーブルとして機能するルックアップテーブルを管理するが、ホスト2はデータが書き込まれるべきブロックのブロック番号とこのデータに対応する論理アドレスだけを指定し、このデータが書き込まれるべきこのブロック内の位置(書き込み先位置)はフラッシュストレージデバイス3によって決定される。決定されたこのブロック内の位置(書き込み先位置)を示すブロック内オフセット(ブロック内物理アドレス)は、フラッシュストレージデバイス3からホスト2に通知される。
キー・バリューAPIは以下の特徴を有する。
キー・バリューAPIにおいては、キー・バリュー・ストアのキー(タグ)、あるいはキーのハッシュ値が、一種の論理アドレスとして使用される。
キー・バリューAPIにおいては、ホスト2からのリード要求は、キーを論理アドレスとして指定し、NAND型フラッシュメモリ5の物理アドレスを指定しない。また、キー・バリューAPIにおいては、ホスト2からのライト要求も、キーを論理アドレスとして指定し、NAND型フラッシュメモリ5の物理アドレスを指定しない。
上述の物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、物理アドレスAPI(タイプ#3)においては、論理アドレスとしてLBAが使用されてもよいし、キー・バリュー・ストアのキー(タグ)、あるいはキーのハッシュ値が使用されてもよい。
可変長LUTに対応するAPIは以下の特徴を有する。
可変長LUTに対応するAPIは、可変長データを扱うためのAPIである。コントローラ4は、複数の論理アドレスに対応する複数のエントリを含む可変長LUTを管理する。各エントリは、あるデータに対応する論理アドレスを保持するフィールドと、このデータが書き込まれた物理記憶位置を示す物理アドレスを保持するフィールドと、このデータの長さを保持するフィールドとを含む。可変長LUTに対応するAPIは、任意の論理アドレスに任意の長さのデータを書き込むことを可能にする。
本実施形態においては、コントローラ4は、任意のAPIをNAND型フラッシュメモリ5の任意の領域に適用することができる。領域それぞれとAPIそれぞれとの対応関係は、ホスト2が指定することができる。
図2においては、NAND型フラッシュメモリ5が論理的に複数の領域(ここでは、領域#0〜#6)に分割されており、領域#0、#1に対応するAPIがLBA APIに設定され、領域#2に対応するAPIが物理アドレスAPI(タイプ#1)に設定され、領域#3に対応するAPIが物理アドレスAPI(タイプ#2)に設定され、領域#4に対応するAPIが物理アドレスAPI(タイプ#3)に設定され、領域#5に対応するAPIがキー・バリューAPIに設定され、領域#6に対応するAPIが他のAPIに設定されているケースが例示されている。
ホスト2からのリード要求およびライト要求等は、アクセス対象の領域を示す識別子(ID)を含む。コントローラ4は、リード要求/ライト要求に含まれる識別子(ID)に基づいて、使用すべきAPIを選択する。
例えば、領域#0を指定するID#0を含むリード要求をホスト2から受信した場合、コントローラ4は、領域#0からのデータリードをLBA APIを使用して実行する。一方、領域#2〜#4のいずれかを指定するID(ID#2〜#4のいずれか)を含むリード要求をホスト2から受信した場合、コントローラ4は、指定された領域からのデータリードを物理アドレスAPIを使用して実行する。
より詳しくは、コントローラ4は、以下のリード処理の手順を実行する。
(1)コントローラ4は、ホスト2からリード要求(リードコマンド)を受信する。
(2)コントローラ4は、受信したリード要求に含まれるIDをチェックする。
(3)受信したリード要求がID#0を含むならば、コントローラ4は、領域#0に対応するAPIであるLBA APIを選択する。LBA APIを使用して領域#0をリードアクセスするために、コントローラ4は、受信したリード要求から論理アドレスを取得し、取得した論理アドレスに対応する物理アドレスを、論理アドレスそれぞれと領域#0の物理アドレスそれぞれとの間のマッピングを管理するLUT(論理物理アドレス変換テーブル)から取得する。そして、コントローラ4は、取得した物理アドレスに基づいて、領域#0からデータをリードする。
(4)受信したリード要求が領域#2〜#4のいずれかを指定するID(ID#2〜#4のいずれか)を含むならば、コントローラ4は、領域#2〜#4に対応するAPIである物理アドレスAPIを選択する。指定された領域を物理アドレスAPIを使用してリードアクセスするために、コントローラ4は、受信したリード要求から、物理アドレスの一部または全てを指定する物理アドレス情報を取得する。そして、コントローラ4は、取得した物理アドレス情報に基づいて、指定された領域からデータをリードする。
このように、アクセス対象の領域に応じて、使用すべきAPIが自動的に選択される。
複数の領域(ここでは、領域#0〜#6)は、複数のネームスペースによって実現されてもよい。各ネームスペースは、NAND型フラッシュメモリ5内の一種の領域(記憶領域)であり、論理アドレス空間(LBA範囲)が割り当てられる。個々のネームスペースは、これらネームスペースの識別子(NSID)によって識別される。各領域には、LBA範囲(LBA0〜LBAn−1)が割り当てられる。LBA範囲のサイズ(つまりLBAの数)は、領域(ネームスペース)毎に可変である。各LBA範囲は、LBA0から始まる。
領域#0〜#6がそれぞれネームスペースによって実現されている場合には、ホスト2からの各リード/ライト要求は、アクセス対象のネームスペースに対応する識別子(NSID)を含む。
コントローラ4がリード要求を受信した時、コントローラ4は、このリード要求に含まれるNSIDをチェックする。受信したリード要求がNSID#0を含むならば、コントローラ4は、領域#0に対応するAPIであるLBA APIを選択する。LBA APIを使用してネームスペース#0をリードアクセスするために、コントローラ4は、受信したリード要求から論理アドレスを取得し、取得した論理アドレスに対応する物理アドレスを、ネームスペース#0に対応する論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理するLUT(ネームスペース#0用のLUT)から取得する。そして、コントローラ4は、取得した物理アドレスに基づいて、ネームスペース#0(つまり、ネームスペース#0に対応するNAND型フラッシュメモリ5内の領域)からデータをリードする。
受信したリード要求がNSID#2〜#4のいずれかを含むならば、コントローラ4は、物理アドレスAPIを選択する。指定されたネームスペースを物理アドレスAPIを使用してリードアクセスするために、コントローラ4は、受信したリード要求から、物理アドレスの一部または全てを指定する物理アドレス情報を取得する。そして、コントローラ4は、取得した物理アドレス情報に基づいて、指定されたネームスペース(つまり、指定されたネームスペースに対応するNAND型フラッシュメモリ5内の領域)からデータをリードする。
図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)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラ(制御回路)である。
NAND型フラッシュメモリ5は、図4に示すように、複数のNAND型フラッシュメモリダイを含む。各NAND型フラッシュメモリダイは、複数のブロックBLKを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のNAND型フラッシュメモリダイは独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作単位として機能する。NAND型フラッシュメモリダイは、「NAND型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。図4においては、NANDインタフェース13に16個のチャンネルCh1、Ch2、…Ch16が接続されており、これらチャンネルCh1、Ch2、…Ch16の各々に、同数(例えばチャンネル当たり2個のダイ)のNAND型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するNAND型フラッシュメモリダイと通信するための通信線(メモリバス)を含む。
コントローラ4は、チャンネルCh1、Ch2、…Ch16を介してNAND型フラッシュメモリダイ#1〜#32を制御する。コントローラ4は、チャンネルCh1、Ch2、…Ch16を同時に駆動することができる。
チャンネルCh1〜Ch16に接続された16個のNAND型フラッシュメモリダイ#1〜#16は第1のバンクとして編成されてもよく、またチャンネルCh1〜Ch16に接続された残りの16個のNAND型フラッシュメモリダイ#17〜#32は第2のバンクとして編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図5の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
本実施形態では、コントローラ4は、各々が複数のブロックBLKから構成される複数のブロック(以下、スーパーブロックと称する)を管理してもよく、スーパーブロックの単位で消去動作を実行してもよい。
スーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#1〜#32から一つずつ選択される計32個のブロックBLKを含んでいてもよい。なお、NAND型フラッシュメモリダイ#1〜#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#1〜#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#1〜#32に対応する64個のプレーンから一つずつ選択される計64個のブロックBLKを含んでいてもよい。図5には、一つのスーパーブロックSBが、NAND型フラッシュメモリダイ#1〜#32から一つずつ選択される計32個のブロックBLK(図4においては太枠で囲まれているブロックBLK)から構成される場合が例示されている。
図3に示されているように、コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、およびDRAMインタフェース14等を含む。これらCPU12、NANDインタフェース13、DRAMインタフェース14は、バス10を介して相互接続される。
このホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってよい。ホストインタフェース11は、ホスト2から様々な要求(コマンド)を受信する。これら要求(コマンド)には、ライト要求(ライトコマンド)、リード要求(リードコマンド)、他の様々な要求(コマンド)が含まれる。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、フラッシュストレージデバイス3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。このCPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、API設定/選択部20、ライト動作制御部21、リード動作制御部22、およびGC動作制御部23として機能することができる。
API設定/選択部20は、ホスト2からの要求に基づき、個々の領域毎に、使用すべきAPIを設定する。また、API設定/選択部20は、ホスト2から受信されるリード/ライト要求に含まれるIDに基づいて、リード/ライトアクセスのために使用されるべきAPIを選択する。
ライト動作制御部21は、上述の複数種のAPIに対応する複数種の書き込み処理を実行することができる。リード動作制御部22も、上述の複数種のAPIに対応する複数種のリード処理を実行することができる。同様に、GC動作制御部23も、上述の複数種のAPIに対応する複数種のGC動作を実行することができる。
<物理アドレスAPI(タイプ#1)に対応する書き込み処理>
物理アドレスAPI(タイプ#1)においては、ライト動作制御部21は、論理アドレスを指定するライト要求(ライトコマンド)をホスト2から受信する。論理アドレスは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。
物理アドレスAPI(タイプ#1)においては、ライト動作制御部21は、論理アドレスを指定するライト要求(ライトコマンド)をホスト2から受信する。論理アドレスは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。
ライトコマンドを受信した場合、ライト動作制御部21は、まず、ホスト2からのデータを書き込むべきブロック(書き込み先ブロック)およびこのブロック内の位置(書き込み先位置)を決定する。次いで、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部21は、ホスト2からのデータのみならず、このデータとこのデータの論理アドレスの双方を書き込み先ブロックに書き込むことができる。そして、ライト動作制御部21は、指定された論理アドレスと、データ(ライトデータ)が書き込まれたNAND型フラッシュメモリ5内の位置(物理記憶位置)を示す物理アドレスとをホスト2に返す。
この場合、この物理アドレスは、(1)この書き込み先ブロックのブロック番号と、(2)この書き込み先ブロック内の書き込み先位置を示すブロック内オフセットとによって表される。ブロック番号は、データが書き込まれたブロックを指定する識別子である。ブロック番号としては、複数のブロック内の任意の一つを一意に識別可能な様々な値を使用し得る。
ブロック内オフセットは、書き込み先ブロック内の位置を示すブロック内物理アドレスである。このブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット、つまり書き込み先ブロックの先頭に対する書き込み先位置のオフセットを示す。書き込み先ブロックの先頭から書き込み先位置までのオフセットのサイズは、ページサイズとは異なるサイズを有する粒度(Grain)の倍数で示される。粒度(Grain)は、アクセス単位である。粒度(Grain)のサイズの最大値は、ブロックサイズまでに制限される。換言すれば、ブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す。
粒度(Grain)は、ページサイズよりも小さいサイズを有していてもよい。例えば、ページサイズが16Kバイトである場合、粒度(Grain)は、そのサイズが4Kバイトであってもよい。この場合、ある一つのブロックにおいては、各々サイズが4Kバイトである複数のオフセット位置が規定される。ブロック内の最初のオフセット位置に対応するブロック内オフセットは、例えば0であり、ブロック内の次のオフセット位置に対応するブロック内オフセットは、例えば1である、ブロック内のさらに次のオフセット位置に対応するブロック内オフセットは、例えば2である。
あるいは、粒度(Grain)は、ページサイズよりも大きなサイズを有していてもよい。例えば、粒度(Grain)は、ページサイズの数倍のサイズであってもよい。ページサイズが16Kバイトである場合、粒度は、32Kバイトのサイズであってもよい。
このように、ライト動作制御部21は、データを書き込むべきブロックおよびこのブロック内の位置の双方を自身で決定し、そしてホスト2からのデータ(ユーザデータ)が書き込まれた位置を示す物理アドレスをホスト2に通知する。この物理アドレスとしては、ブロック番号およびブロック内オフセットを使用することができる。ブロック番号によって指定されるブロックは、物理ブロックであってもよいし、上述のスーパーブロックであってもよい。
ホスト2は、ブロックサイズ、ページ書き込み順序制約、バッドページ、ページサイズ等を意識することなく、ユーザデータをNAND型フラッシュメモリ5に書き込むことができ、さらに、ブロック番号およびブロック内オフセットによって表された物理アドレスを、このユーザデータの論理アドレスにマッピングすることができる。
<物理アドレスAPI(タイプ#1)に対応するリード処理>
物理アドレスAPI(タイプ#1)においては、リード動作制御部22は、物理アドレス(すなわち、ブロック番号およびブロック内オフセット(ブロック内物理アドレス))を指定するリード要求(リードコマンド)をホスト2から受信する。リードコマンドをホスト2から受信した場合、リード動作制御部22は、これらブロック番号およびブロック内オフセットに基づいてNAND型フラッシュメモリ5からデータをリードする。リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。
物理アドレスAPI(タイプ#1)においては、リード動作制御部22は、物理アドレス(すなわち、ブロック番号およびブロック内オフセット(ブロック内物理アドレス))を指定するリード要求(リードコマンド)をホスト2から受信する。リードコマンドをホスト2から受信した場合、リード動作制御部22は、これらブロック番号およびブロック内オフセットに基づいてNAND型フラッシュメモリ5からデータをリードする。リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。
リード対象の物理記憶位置を得るために、リード動作制御部22は、まず、このブロック内オフセットを、ページサイズを表す粒度の数(ここでは、4)で除算し、そしてこの除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセットとしてそれぞれ決定してもよい。
<物理アドレスAPI(タイプ#1)に対応するGC動作>
物理アドレスAPI(タイプ#1)においては、GC動作制御部23は、ガベージコレクションのためのコピー元ブロック(GCソースブロック)およびコピー先ブロック(GCデスティネーションブロック)をNAND型フラッシュメモリ5内の多数のブロックから選択する。この場合、GC動作制御部23は、通常、複数のコピー元ブロック(GCソースブロック)と、一つ以上のコピー先ブロック(GCデスティネーションブロック)とを選択する。コピー元ブロック(GCソースブロック)を選択するための条件(GCポリシー)は、ホスト2によって指定されてもよい。例えば、有効データ量が最も少ないブロックをコピー元ブロック(GCソースブロック)として優先的に選択するというGCポリシーが使用されてもよいし、別のGCポリシーが使用されてもよい。このように、コピー元ブロック(GCソースブロック)およびコピー先ブロック(GCデスティネーションブロック)の選択は、ホスト2ではなく、フラッシュストレージデバイス3のコントローラ4(GC動作制御部23)によって実行される。コントローラ4は、各ブロック管理テーブルを使用して、各ブロックの有効データ量を管理してもよい。
物理アドレスAPI(タイプ#1)においては、GC動作制御部23は、ガベージコレクションのためのコピー元ブロック(GCソースブロック)およびコピー先ブロック(GCデスティネーションブロック)をNAND型フラッシュメモリ5内の多数のブロックから選択する。この場合、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動作制御部23は、GCソースブロック内の各データの有効/無効を示す情報をホスト2から受信し、この受信した情報に基づいて、GCソースブロック内の有効データを特定してもよい。
そして、GC動作制御部23は、コピーされた有効データの論理アドレスと、コピー先ブロック(GCデスティネーションブロック)のブロック番号と、コピー先ブロック(GCデスティネーションブロック)の先頭からコピー先位置までのオフセットを上述の粒度の倍数で示すブロック内オフセットとをホスト2に通知する。
上述したように、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)とホスト2からの論理アドレスの双方を書き込み先ブロックに書き込むことができる。このため、GC動作制御部23は、コピー元ブロック(GCソースブロック)内の各データの論理アドレスをこのコピー元ブロック(GCソースブロック)から容易に取得することができるので、コピーされた有効データの論理アドレスをホスト2に容易に通知することができる。
<物理アドレスAPI(タイプ#2)に対応する書き込み処理>
物理アドレスAPI(タイプ#2)においては、ライト動作制御部21は、ブロック番号と論理アドレスを指定するライト要求(ライトコマンド)をホスト2から受信する。論理アドレスは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。ライトコマンドを受信した場合、ライト動作制御部21は、まず、ホスト2からのデータを書き込むべき、この指定されたブロック番号を有するブロック(書き込み先ブロック)内の位置(書き込み先位置)を決定する。次いで、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部21は、ホスト2からのデータのみならず、このデータとこのデータの論理アドレスの双方を書き込み先ブロックに書き込むことができる。
物理アドレスAPI(タイプ#2)においては、ライト動作制御部21は、ブロック番号と論理アドレスを指定するライト要求(ライトコマンド)をホスト2から受信する。論理アドレスは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。ライトコマンドを受信した場合、ライト動作制御部21は、まず、ホスト2からのデータを書き込むべき、この指定されたブロック番号を有するブロック(書き込み先ブロック)内の位置(書き込み先位置)を決定する。次いで、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部21は、ホスト2からのデータのみならず、このデータとこのデータの論理アドレスの双方を書き込み先ブロックに書き込むことができる。
そして、ライト動作制御部21は、論理アドレスそれぞれとこのブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理するブロック内LUTを更新して、この書き込み先ブロックの上述の書き込み先位置を示すブロック内物理アドレスをライトデータの論理アドレスにマッピングする。
この場合、このブロック内物理アドレスは、この書き込み先ブロック内の書き込み先位置を示すブロック内オフセットによって表される。
このように、ライト動作制御部21は、ホスト2からのブロック番号を有するブロック内の書き込み先位置を自身で決定し、そしてホスト2からのライトデータをこのブロック内のこの書き込み先位置に書き込む。そして、ライト動作制御部21は、このブロックに対応するブロック内LUTを更新して、書き込み先位置を示すブロック内物理アドレス(ブロック内オフセット)をライトデータの論理アドレスにマッピングする。これにより、フラッシュストレージデバイス3は、ブロック番号をホスト2にハンドリングさせつつ、ページ書き込み順序制約、バッドページ、ページサイズ等を隠蔽することができる。
この結果、ホスト2は、ブロック境界は認識できるが、ページ書き込み順序制約、バッドページ、ページサイズについては意識することなく、どのユーザデータがどのブロック番号に存在するかを管理することができる。
<物理アドレスAPI(タイプ#2)に対応するリード処理>
物理アドレスAPI(タイプ#2)においては、リード動作制御部22は、論理アドレスとブロック番号を指定するリード要求(リードコマンド)をホスト2から受信する。論理アドレスは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。リードコマンドをホスト2から受信した場合、リード動作制御部22は、この論理アドレスを使用して、このリード要求によって指定されたブロック番号を有するブロックに対応するブロック内LUT32を参照する。これにより、リード動作制御部22は、この論理アドレスに対応するデータが格納されている、このブロックのブロック内物理アドレス(ブロック内オフセット)を取得することができる。そして、リード動作制御部22は、リード要求によって指定されたブロック番号と、取得されたブロック内物理アドレスとに基づいて、この論理アドレスに対応するデータをNAND型フラッシュメモリ5からリードする。
物理アドレスAPI(タイプ#2)においては、リード動作制御部22は、論理アドレスとブロック番号を指定するリード要求(リードコマンド)をホスト2から受信する。論理アドレスは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。リードコマンドをホスト2から受信した場合、リード動作制御部22は、この論理アドレスを使用して、このリード要求によって指定されたブロック番号を有するブロックに対応するブロック内LUT32を参照する。これにより、リード動作制御部22は、この論理アドレスに対応するデータが格納されている、このブロックのブロック内物理アドレス(ブロック内オフセット)を取得することができる。そして、リード動作制御部22は、リード要求によって指定されたブロック番号と、取得されたブロック内物理アドレスとに基づいて、この論理アドレスに対応するデータをNAND型フラッシュメモリ5からリードする。
この場合、リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。リード対象の物理記憶位置を得るために、リード動作制御部22は、まず、このブロック内オフセットを、ページサイズを表す粒度の数(ここでは、4)で除算し、そしてこの除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセットとしてそれぞれ決定してもよい。
<物理アドレスAPI(タイプ#2)に対応するGC動作>
物理アドレスAPI(タイプ#2)においては、GC動作制御部23は、NAND型フラッシュメモリ5のガベージコレクションのためのコピー元ブロック番号(GCソースブロック番号)およびコピー先ブロック番号(GCデスティネーションブロック番号)を指定するGC制御コマンドをホスト2から受信する。GC制御コマンドをホスト2から受信した場合、GC動作制御部23は、NAND型フラッシュメモリ5の複数のブロックから、指定されたコピー元ブロック番号を有するブロックと指定されたコピー先ブロック番号を有するブロックとをコピー元ブロック(GCソースブロック)およびコピー先ブロック番号(GCデスティネーションブロック)として選択する。GC動作制御部23は、選択されたGCソースブロックに格納されている有効データを書き込むべきGCデスティネーションブロック内のコピー先位置を決定し、有効データをGCデスティネーションブロック内のコピー先位置にコピーする。
物理アドレスAPI(タイプ#2)においては、GC動作制御部23は、NAND型フラッシュメモリ5のガベージコレクションのためのコピー元ブロック番号(GCソースブロック番号)およびコピー先ブロック番号(GCデスティネーションブロック番号)を指定するGC制御コマンドをホスト2から受信する。GC制御コマンドをホスト2から受信した場合、GC動作制御部23は、NAND型フラッシュメモリ5の複数のブロックから、指定されたコピー元ブロック番号を有するブロックと指定されたコピー先ブロック番号を有するブロックとをコピー元ブロック(GCソースブロック)およびコピー先ブロック番号(GCデスティネーションブロック)として選択する。GC動作制御部23は、選択されたGCソースブロックに格納されている有効データを書き込むべきGCデスティネーションブロック内のコピー先位置を決定し、有効データをGCデスティネーションブロック内のコピー先位置にコピーする。
そして、GC動作制御部23は、有効データの論理アドレスにマッピングされているブロック内物理アドレス(ブロック内オフセット)が、この有効データが格納されているGCソースブロック内のコピー元位置を示すブロック内物理アドレスから、GCデスティネーションブロック内のコピー先位置を示すブロック内物理アドレスに変更されるように、GCソースブロックに対応するブロック内LUTとGCデスティネーションブロックに対応するブロック内LUTを更新する。
上述したように、GC動作制御部23は、コピー元ブロック(GCソースブロック)内に格納されている有効データを書き込むべきコピー先ブロック(GCデスティネーションブロック)内の位置(コピー先位置)を決定し、有効データをコピー先ブロック(GCデスティネーションブロック)のこの決定された位置(コピー先位置)にコピーする。この場合、GC動作制御部23は、有効データとこの有効データの論理アドレスの双方を、コピー先ブロック(GCデスティネーションブロック)にコピーしてもよい。
上述したように、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)とホスト2からの論理アドレスの双方を書き込み先ブロックに書き込むことができる。このため、GC動作制御部23は、コピー元ブロック(GCソースブロック)内の各データの論理アドレスをこのコピー元ブロック(GCソースブロック)から容易に取得することができるので、コピー元ブロックに対応するブロック内LUTおよびコピー先ブロックに対応するブロック内LUTを容易に更新することができる。
<物理アドレスAPI(タイプ#3)に対応する書き込み処理>
物理アドレスAPI(タイプ#3)は、物理アドレスAPI(タイプ#2)と物理アドレスAPI(タイプ#1)の中間のAPIである。物理アドレスAPI(タイプ#3)においては、物理アドレスAPI(タイプ#2)とは異なり、ブロック内LUTは使用されない。
物理アドレスAPI(タイプ#3)は、物理アドレスAPI(タイプ#2)と物理アドレスAPI(タイプ#1)の中間のAPIである。物理アドレスAPI(タイプ#3)においては、物理アドレスAPI(タイプ#2)とは異なり、ブロック内LUTは使用されない。
物理アドレスAPI(タイプ#3)においては、ライト動作制御部21は、ブロック番号と論理アドレスを指定するライト要求(ライトコマンド)をホスト2から受信する。論理アドレスは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。ライトコマンドを受信した場合、ライト動作制御部21は、まず、ホスト2からのデータを書き込むべき、この指定されたブロック番号を有するブロック(書き込み先ブロック)内の位置(書き込み先位置)を決定する。次いで、ライト動作制御部21は、ホスト2からのデータ(ライトデータ)を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部21は、ホスト2からのデータのみならず、このデータとこのデータの論理アドレスの双方を書き込み先ブロックに書き込むことができる。
そして、ライト動作制御部21は、この書き込み先ブロックの上述の書き込み先位置を示すブロック内物理アドレスをホスト2に通知する。このブロック内物理アドレスは、この書き込み先ブロック内の書き込み先位置を示すブロック内オフセットによって表される。
このように、ライト動作制御部21は、ホスト2からのブロック番号を有するブロック内の書き込み先位置を自身で決定し、そしてホスト2からのライトデータをこのブロック内のこの書き込み先位置に書き込む。そして、ライト動作制御部21は、この書き込み先位置を示すブロック内物理アドレス(ブロック内オフセット)をライト要求に対応するレスポンス(返り値)としてホスト2に通知する。あるいは、ライト動作制御部21は、ブロック内物理アドレス(ブロック内オフセット)のみをホスト2に通知するのではなく、論理アドレスとブロック番号とブロック内物理アドレス(ブロック内オフセット)との組をホスト2に通知してもよい。
したがって、フラッシュストレージデバイス3は、ブロック番号をホスト2にハンドリングさせつつ、ページ書き込み順序制約、バッドページ、ページサイズ等を隠蔽することができる。
この結果、ホスト2は、ブロック境界は認識できるが、ページ書き込み順序制約、バッドページ、ページサイズについては意識することなく、どのユーザデータがどのブロック番号に存在するかを管理することができる。
<物理アドレスAPI(タイプ#3)に対応するリード処理>
物理アドレスAPI(タイプ#3)においては、リード動作制御部22は、物理アドレス(すなわち、ブロック番号およびブロック内オフセット)を指定するリード要求(リードコマンド)をホスト2から受信する。リードコマンドをホスト2から受信した場合、リード動作制御部22は、これらブロック番号およびブロック内オフセットに基づいて、リード対象のブロック内のリード対象の物理記憶位置からデータをリードする。リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。
物理アドレスAPI(タイプ#3)においては、リード動作制御部22は、物理アドレス(すなわち、ブロック番号およびブロック内オフセット)を指定するリード要求(リードコマンド)をホスト2から受信する。リードコマンドをホスト2から受信した場合、リード動作制御部22は、これらブロック番号およびブロック内オフセットに基づいて、リード対象のブロック内のリード対象の物理記憶位置からデータをリードする。リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。
リード対象の物理記憶位置を得るために、リード動作制御部22は、まず、このブロック内オフセットを、ページサイズを表す粒度の数(ページサイズが16Kバイトで粒度(Grain)が4Kバイトである場合には、ページサイズを表す粒度の数は4)で除算し、そしてこの除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセットとしてそれぞれ決定してもよい。
<物理アドレスAPI(タイプ#3)に対応するGC動作>
物理アドレスAPI(タイプ#3)においては、GC動作制御部23は、NAND型フラッシュメモリ5のガベージコレクションのためのコピー元ブロック番号(GCソースブロック番号)およびコピー先ブロック番号(GCデスティネーションブロック番号)を指定するGC制御コマンドをホスト2から受信する。GC制御コマンドをホスト2から受信した場合、GC動作制御部23は、NAND型フラッシュメモリ5の複数のブロックから、指定されたコピー元ブロック番号を有するブロックと指定されたコピー先ブロック番号を有するブロックとをコピー元ブロック(GCソースブロック)およびコピー先ブロック(GCデスティネーションブロック)として選択する。GC動作制御部23は、選択されたGCソースブロックに格納されている有効データを書き込むべきGCデスティネーションブロック内のコピー先位置を決定し、有効データをGCデスティネーションブロック内のコピー先位置にコピーする。そして、GC動作制御部23は、有効データの論理アドレスと、コピー先ブロック番号と、GCデスティネーションブロック内のコピー先位置を示すブロック内物理アドレス(ブロック内オフセット)とを、ホスト2に通知する。
物理アドレスAPI(タイプ#3)においては、GC動作制御部23は、NAND型フラッシュメモリ5のガベージコレクションのためのコピー元ブロック番号(GCソースブロック番号)およびコピー先ブロック番号(GCデスティネーションブロック番号)を指定するGC制御コマンドをホスト2から受信する。GC制御コマンドをホスト2から受信した場合、GC動作制御部23は、NAND型フラッシュメモリ5の複数のブロックから、指定されたコピー元ブロック番号を有するブロックと指定されたコピー先ブロック番号を有するブロックとをコピー元ブロック(GCソースブロック)およびコピー先ブロック(GCデスティネーションブロック)として選択する。GC動作制御部23は、選択されたGCソースブロックに格納されている有効データを書き込むべきGCデスティネーションブロック内のコピー先位置を決定し、有効データをGCデスティネーションブロック内のコピー先位置にコピーする。そして、GC動作制御部23は、有効データの論理アドレスと、コピー先ブロック番号と、GCデスティネーションブロック内のコピー先位置を示すブロック内物理アドレス(ブロック内オフセット)とを、ホスト2に通知する。
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、ライトバッファ(WB)31の格納のために使用される。また、DRAM6の記憶領域の他の一部は、ブロック管理テーブル32の格納のために使用される。物理アドレスAPI(タイプ#2)を使用するケースにおいては、DRAM6の記憶領域の他の一部は、ブロック内LUTの格納のために使用される。なお、これらライトバッファ(WB)31、ブロック管理テーブル32、ブロック内LUTは、コントローラ4内の図示しないSRAMに格納されてもよい。
図6は、拡張ネームスペース管理コマンドを示す。
拡張ネームスペース管理コマンドは、領域(ここではネームスペース)を作成または削除するための管理コマンドである。
拡張ネームスペース管理コマンドは、以下のパラメータを含む。
(1)作成/削除
(2)LBA範囲
(3)物理リソースサイズ
(4)APIタイプ
作成/削除のパラメータの値0hは、ネームスペースの作成をSSD3に要求する。作成/削除のパラメータの値1hは、ネームスペースの削除をSSD3に要求する。ネームスペースの削除を要求する場合には、削除対象のネームスペースのIDを示すパラメータが拡張ネームスペース管理コマンドに設定される。
(2)LBA範囲
(3)物理リソースサイズ
(4)APIタイプ
作成/削除のパラメータの値0hは、ネームスペースの作成をSSD3に要求する。作成/削除のパラメータの値1hは、ネームスペースの削除をSSD3に要求する。ネームスペースの削除を要求する場合には、削除対象のネームスペースのIDを示すパラメータが拡張ネームスペース管理コマンドに設定される。
LBA範囲のパラメータは、ネームスペースのLBA範囲(LBA0〜n−1)を示す。このLBA範囲は、このネームスペースのユーザ領域にマッピングされる。
物理リソースサイズのパラメータは、ネームスペース用に確保されるべきブロックの個数を示す。
別の実施形態では、拡張ネームスペース管理コマンドは、物理リソースサイズのパラメータ代わりに、オーバープロビジョンのサイズを示すパラメータを含んでいてもよい。
オーバープロビジョンのサイズのパラメータは、ネームスペースに関連付けられた領域内のオーバープロビジョン領域用に確保されるべきブロックの個数を示す。もし拡張ネームスペース管理コマンドがオーバープロビジョンのサイズのパラメータを含むならば、SSD3は、ネームスペースを作成し、且つこのネームスペースに関連付けられた領域内のオーバープロビジョン領域に、このパラメータによって指定された個数のブロックを割り当ててもよい。
APIタイプのパラメータの値とAPIタイプとの関係は、次の通りである。
000: LBA API
001: 物理アドレスAPI(タイプ#1)
010: 物理アドレスAPI(タイプ#2)
011: 物理アドレスAPI(タイプ#3)
100: キー・バリューAPI
101: 他のAPI(例えば可変長LUT)
図7は、フラッシュストレージデバイス3によって実行される領域(ここでは、ネームスペース)作成処理を示す。
001: 物理アドレスAPI(タイプ#1)
010: 物理アドレスAPI(タイプ#2)
011: 物理アドレスAPI(タイプ#3)
100: キー・バリューAPI
101: 他のAPI(例えば可変長LUT)
図7は、フラッシュストレージデバイス3によって実行される領域(ここでは、ネームスペース)作成処理を示す。
ホスト2は、ネームスペースの作成を要求する拡張ネームスペース管理コマンドをSSD3に送出する。この拡張ネームスペース管理コマンドは、作成対象の領域(ここでは、ネームスペース)用に確保すべきブロックの個数を指定する物理リソースサイズパラメータ、および作成対象の領域(ここでは、ネームスペース)に対して設定すべきAPIタイプを指定するAPIタイプパラメータを含む。SSD3内の一つのブロックの容量はSSD3からホスト2に報告されているので、ホスト2は、作成対象の領域(ここでは、ネームスペース)に適した個数のブロックを要求することができる。また、ホスト2は、作成対象の領域(ここでは、ネームスペース)に適したAPIを指定することができる。例えば、オペレーティングシステムをブート可能なブータブル領域を作成する場合には、ホスト2は、LBA APIを指定すればよい。また、I/O性能を優先すべき領域を作成する場合には、ホスト2は、物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、または物理アドレスAPI(タイプ#3)を指定すればよい。
この拡張ネームスペース管理コマンドの受信に応答して、SSD3のコントローラ4は、ネームスペース(NS#0)を作成し、このネームスペース(NS#0)に対して指定された個数のブロックを予約し、さらに、このネームスペース(NS#0)のAPIタイプを指定された種類のAPIタイプに設定する(ステップS1)。コントローラ4は、コマンド完了を示すレスポンスをホスト2に送出する。このレスポンスは、作成されたネームスペースのIDを含んでいてもよい。
ホスト2は、次のネームスペースの作成を要求する拡張ネームスペース管理コマンドをSSD3に送出する。この拡張ネームスペース管理コマンドは、作成対象の領域(ここでは、ネームスペース)用に確保すべきブロックの個数を指定する物理リソースサイズパラメータ、および作成対象の領域(ここでは、ネームスペース)に対して設定すべきAPIタイプを指定するAPIタイプパラメータを含む。この拡張ネームスペース管理コマンドの受信に応答して、SSD3のコントローラ4は、ネームスペース(NS#1)を作成し、このネームスペース(NS#1)に対して指定された個数のブロックを予約し、さらに、このネームスペース(NS#1)のAPIタイプを指定された種類のAPIタイプに設定する(ステップS2)。コントローラ4は、コマンド完了を示すレスポンスをホスト2に送出する。このレスポンスは、作成されたネームスペースのIDを含んでいてもよい。
同様にして、ホスト2は、さらに次のネームスペースの作成を要求する拡張ネームスペース管理コマンドをSSD3に送出する。この拡張ネームスペース管理コマンドは、作成対象の領域(ここでは、ネームスペース)用に確保すべきブロックの個数を指定する物理リソースサイズパラメータ、および作成対象の領域(ここでは、ネームスペース)に対して設定すべきAPIタイプを指定するAPIタイプパラメータを含む。この拡張ネームスペース管理コマンドの受信に応答して、SSD3のコントローラ4は、ネームスペース(NS#n)を作成し、このネームスペース(NS#n)に対して指定された個数のブロックを予約し、さらに、このネームスペース(NS#n)のAPIタイプを指定された種類のAPIタイプに設定する(ステップS3)。コントローラ4は、コマンド完了を示すレスポンスをホスト2に送出する。このレスポンスは、作成されたネームスペースのIDを含んでいてもよい。
このようにして、ネームスペースを作成する処理が繰り返されることによって、NAND型フラッシュメモリ5は複数の領域に論理的に分割され、さらに領域毎に、APIタイプが設定される。領域それぞれとAPIタイプそれぞれとの間の対応関係は、フラッシュストレージデバイス3のコントローラ4によって管理されるAPIタイプ管理テーブルによって管理される。
フラッシュストレージデバイス3のコントローラ4は、アクセス対象の領域を示す識別子(ネームスペースのID:NSID)を含むコマンド(リードコマンド、ライトコマンド、GC制御コマンド、等)をホスト2から受信する。そして、受信したコマンドに含まれるNSIDと、APIタイプ管理テーブルとに基づいて、コントローラ4は、使用すべきAPIを選択する。
以下、物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、物理アドレスAPI(タイプ#3)の詳細について説明する。
これら物理アドレスAPI(タイプ#1)、物理アドレスAPI(タイプ#2)、物理アドレスAPI(タイプ#3)において使用される様々なコマンドの各々は、ある領域(ここではネームスペース)を指定するNSIDを含むが、以下の各コマンドの説明では、コマンドの特徴を主として説明し、NSIDの説明については省略する。
<物理アドレスAPI(タイプ#1)の詳細>
まず、図8〜図35を参照して、物理アドレスAPI(タイプ#1)について説明する。
まず、図8〜図35を参照して、物理アドレスAPI(タイプ#1)について説明する。
図8は、従来型SSDとホストとの間の役割分担と、物理アドレスAPI(タイプ#1)をサポートするフラッシュストレージデバイス3とホスト2との間の役割分担とを示す。
図8の左部は、従来型SSDと仮想ディスクサービスを実行するホストとを含む計算機システム全体の階層構造を表している。
ホスト(サーバ)においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス101が実行される。仮想マシンサービス101上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション102が実行される。
また、ホスト(サーバ)においては、複数のユーザアプリケーション102に対応する複数の仮想ディスクサービス103が実行される。各仮想ディスクサービス103は、従来型SSD内のストレージリソースの容量の一部を、対応するユーザアプリケーション102用のストレージリソース(仮想ディスク)として割り当てる。各仮想ディスクサービス103においては、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスをSSD用の論理アドレスに変換するアプリケーションレベルアドレス変換も実行される。さらに、ホストにおいては、アプリケーションレベルGC104も実行される。
ホスト(サーバ)から従来型SSDへのコマンドの送信および従来型SSDからホスト(サーバ)へのコマンド完了のレスポンスの返送は、ホスト(サーバ)および従来型SSDの各々に存在するI/Oキュー200を介して実行される。
従来型SSDは、ライトバッファ(WB)301、ルックアップテーブル(LUT)302、ガベージコレクション機能303、NAND型フラッシュメモリ(NANDフラッシュアレイ)304を含む。従来型SSDは、一つのルックアップテーブル(LUT)302のみを管理しており、NAND型フラッシュメモリ(NANDフラッシュアレイ)304のリソースは複数の仮想ディスクサービス103によって共有される。
この構成においては、仮想ディスクサービス103下のアプリケーションレベルGC104と従来型SSD内のガベージコレクション機能303(LUTレベルGC)とを含む重複したGCにより、ライトアンプリフィケーションが大きくなる。また、従来型SSDにおいては、あるエンドユーザまたはある仮想ディスクサービス103からのデータ書き込み量の増加によってGCの頻度が増加し、これによって他のエンドユーザまたは他の仮想ディスクサービス103に対するI/O性能が劣化するというノイジーネイバー問題が生じうる。
また、各仮想ディスクサービス内のアプリケーションレベルアドレス変換テーブルと従来型SSD内のLUT302とを含む重複したリソースの存在により、多くのメモリリソースが消費される。
図8の右部は、物理アドレスAPI(タイプ#1)をサポートするフラッシュストレージデバイス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を含む。
この図8の右部に示す構成においては、従来型SSD内のLUT302とアプリケーションレベルアドレス変換テーブルとがI/Oサービス403内の一つのLUTとしてマージされているので、アドレス変換情報の格納のために消費されるメモリリソースの量を低減できる。また、アドレス変換ステージの数が減少するので、I/O性能を向上することが可能となる。
さらに、アプリケーションレベルGCとLUTレベルGCを含む重複したGCではなく、フラッシュストレージデバイス3のみがGC(ユニファイドGC)のためのデータコピーを実行する。したがって、重複したGCが実行される構成に比し、システム全体のライトアンプリフィケーションを大幅に低減することが可能となる。この結果、I/O性能を改善することができ、且つフラッシュストレージデバイス3の寿命を最大化することが可能となる。
図9は、物理アドレスAPI(タイプ#1)で使用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドID、QoSドメインID、論理アドレス、長さ、等を含んでもよい。
コマンドIDはこのコマンドがライトコマンドであることを示すID(コマンドコード)であり、ライトコマンドにはライトコマンド用のコマンドIDが含まれる。
QoSドメインIDは、データが書き込まれるべきQoSドメインを一意に識別可能な識別子である。あるエンドユーザからのライト要求に応じてホスト2から送信されるライトコマンドは、このエンドユーザに対応するQoSドメインを指定するQoSドメインIDを含んでもよい。ネームスペースIDがQoSドメインIDとして扱われてもよい。
論理アドレスは、書き込まれるべきライトデータを識別するための識別子である。この論理アドレスは、上述したように、LBAであってもよいし、キー・バリュー・ストアのキーであってもよい。論理アドレスがLBAである場合には、このライトコマンドに含まれる論理アドレス(開始LBA)は、ライトデータが書き込まれるべき論理位置(最初の論理位置)を示す。
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
コントローラ4は、NAND型フラッシュメモリ5内の多数のブロックの各々が一つのグループのみに属するようにNAND型フラッシュメモリ5内の多数のブロックを複数のグループ(複数のQoSドメイン)に分類することができる。そして、コントローラ4は、グループ(QoSドメイン)毎に、フリーブロックリスト(フリーブロックプール)とアクティブブロックリスト(アクティブブロックプール)とを管理することができる。
各ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックリストによって管理される。
ホスト2からライトコマンドを受信した時、コントローラ4は、ホスト2からのデータが書き込まれるべきブロック(書き込み先ブロック)およびこの書き込み先ブロック内の位置(書き込み先位置)を決定する。コントローラ4は、QoSドメインIDに対応するQoSドメインに属するフリーブロック群の一つを書き込み先ブロックとして決定してもよい。書き込み先位置は、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ4は、ホスト2からのデータを、書き込み先ブロック内の書き込み先位置に書き込む。
なお、この書き込み先ブロック全体がユーザデータで満たされたならば、コントローラ4は、この書き込み先ブロックをアクティブブロックリスト(アクティブブロックプール)に移動する。そして、コントローラ4は、このQoSドメインに対応するフリーブロックリストからフリーブロックを再び選択し、この選択したフリーブロックを新たな書き込み先ブロックとして割り当てる。
もしフリーブロックリストによって管理されている残りフリーブロックの数が所定のポリシーによって定められる閾値以下に低下した場合あるいはホスト2からガベージコレクションを実施する指示があった場合、コントローラ4は、このQoSドメインのガベージコレクションを開始してもよい。
このQoSドメインのガベージコレクションでは、コントローラ4は、このQoSドメインに対応するアクティブブロック群からコピー元ブロック(GCソースブロック)とコピー先ブロック(GCデスティネーションブロック)を選択する。どのブロックをGC候補(コピー元ブロック)として選択するかは、ホスト2によって指定される上述のポリシーに従って決定されてもよいし、ホスト2から指定されても良い。ポリシーも基づく場合には例えば、有効データ量が最も少ないブロックがGC候補(コピー元ブロック)として選択されてもよい。
図10は、図9のライトコマンドに対するレスポンスを示す。
このレスポンスは、論理アドレス、物理アドレス、長さを含む。
論理アドレスは、図9のライトコマンドに含まれていた論理アドレスである。
物理アドレスは、図9のライトコマンドに応じてデータが書き込まれたNAND型フラッシュメモリ5内の物理記憶位置を示す。物理アドレスAPI(タイプ#1)をサポートするフラッシュストレージデバイス3では、この物理アドレスは、ブロック番号とオフセット(ブロック内オフセット)との組み合わせによって指定される。ブロック番号は、フラッシュストレージデバイス3内の全てのブロックの任意の一つを一意に識別可能な識別子である。全てのブロックに異なるブロック番号が付与されている場合には、これらブロック番号を直接使用してもよい。あるいは、ブロック番号は、ダイ番号と、ダイ内ブロック番号との組み合わせによって表現されてもよい。長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
図11は、物理アドレスAPI(タイプ#1)で使用されるTrimコマンドを示す。
このTrimコマンドは、無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびブロック内オフセットを含むコマンドである。つまり、このTrimコマンドは、LBAのような論理アドレスではなく、物理アドレスを指定可能である。このTrimコマンドは、コマンドID、物理アドレス、長さを含む。
コマンドIDはこのコマンドがTrimコマンドであることを示すID(コマンドコード)であり、TrimコマンドにはTrimコマンド用のコマンドIDが含まれる。
物理アドレスは、無効化すべきデータが格納されている最初の物理記憶位置を示す。物理アドレスAPI(タイプ#1)をサポートするフラッシュストレージデバイス3では、この物理アドレスは、ブロック番号とオフセット(ブロック内オフセット)との組み合わせによって指定される。
長さは、無効化すべきデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、バイトによって指定されてもよい。
コントローラ4は、複数のブロックの各々に含まれるデータそれぞれの有効/無効を示すフラグ(ビットマップフラグ)をブロック管理テーブル32を使用して管理する。無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびオフセット(ブロック内オフセット)を含むTrimコマンドをホスト2から受信した場合、コントローラ4は、ブロック管理テーブル32を更新して、Trimコマンドに含まれるブロック番号およびブロック内オフセットに対応する物理記憶位置のデータに対応するフラグ(ビットマップフラグ)を無効を示す値に変更する。
図12は、図10のレスポンスに含まれる物理アドレスを規定するブロック番号およびオフセット(ブロック内オフセット)の例を示す。
ブロック番号はある一つのブロックBLKを指定する。各ブロックBLKは、図12に示されているように、複数のページ(ここでは、ページ0〜ページn)を含む。
ページサイズ(各ページのユーザデータ格納領域)が16Kバイトであり、粒度(Grain)が4KBのサイズであるケースにおいては、このブロックBLKは、4×(n+1)個の領域に論理的に分割される。
オフセット+0はページ0の最初の4KB領域を示し、オフセット+1はページ0の2番目の4KB領域を示し、オフセット+2はページ0の3番目の4KB領域を示し、オフセット+3はページ0の4番目の4KB領域を示す。
オフセット+4はページ1の最初の4KB領域を示し、オフセット+5はページ1の2番目の4KB領域を示し、オフセット+6はページ1の3番目の4KB領域を示し、オフセット+7はページ1の4番目の4KB領域を示す。
図13は、ライトコマンドに応じて実行される書き込み動作とこのライトコマンドに対するレスポンスに含まれる返値との関係を示す。
フラッシュストレージデバイス3のコントローラ4は、有効データを含まないフリーブロック群をフリーブロックリストによって管理しており、これらフリーブロック群から一つのブロック(フリーブロック)を選択し、選択したブロックを書き込み先ブロックとして割り当てる。いま、ブロックBLK#1が書き込み先ブロックとして割り当てられた場合を想定する。コントローラ4は、ページ0、ページ1、ページ2、…ページnという順序で、データをページ単位でブロックBLK#1に書き込む。
図13においては、ブロックBLK#1のページ0に16Kバイト分のデータがすでに書き込まれている状態で、論理アドレス(LBAx)および長さ(=4)を指定するライトコマンドがホスト2から受信された場合が想定されている。コントローラ4は、ブロックBLK#1のページ1を書き込み先位置として決定し、ホスト2から受信される16Kバイト分のライトデータをブロックBLK#1のページ1に書き込む。そして、コントローラ4は、このライトコマンドに対するレスポンス(論理アドレス、ブロック番号、オフセット(ブロック内オフセット)、長さ)をホスト2に返す。このケースにおいては、論理アドレスはLBAxであり、ブロック番号はBLK#1であり、オフセット(ブロック内オフセット)は+5であり、長さは4である。
図14は、不良ページ(バッドページ)をスキップする書き込み動作を示す。
図14においては、ブロックBLK#1のページ0、ページ1にデータがすでに書き込まれている状態で、論理アドレス(LBAx+1)および長さ(=4)を指定するライトコマンドがホスト2から受信された場合が想定されている。もしブロックBLK#1のページ2が不良ページであるならば、コントローラ4は、ブロックBLK#1のページ3を書き込み先位置として決定し、ホスト2から受信される16Kバイト分のライトデータをブロックBLK#1のページ3に書き込む。そして、コントローラ4は、このライトコマンドに対するレスポンス(論理アドレス、ブロック番号、オフセット(ブロック内オフセット)、長さ)をホスト2に返す。このケースにおいては、論理アドレスはLBAx+1であり、ブロック番号はBLK#1であり、オフセット(ブロック内オフセット)は+12であり、長さは4である。
図15は、不良ページをスキップする書き込み動作の別の例を示す。
図15においては、不良ページを挟む2つのページに跨がってデータが書き込まれる場合が想定されている。いま、ブロックBLK#2のページ0、ページ1にデータがすでに書き込まれており、且つライトバッファ31に未書き込みの8Kバイト分のライトデータが残っている場合を想定する。この状態で、論理アドレス(LBAy)および長さ(=6)を指定するライトコマンドが受信されたならば、コントローラ4は、未書き込みの8Kバイトライトデータと、ホスト2から新たに受信される24Kバイトライトデータ内の最初の8Kバイトライトデータとを使用して、ページサイズに対応する16Kバイトライトデータを準備する。そして、コントローラ4は、この準備した16KバイトライトデータをブロックBLK#2のページ2に書き込む。
もしブロックBLK#2の次のページ3が不良ページであるならば、コントローラ4は、ブロックBLK#2のページ4を次の書き込み先位置として決定し、ホスト2から受信された24Kバイトライトデータ内の残りの16Kバイトライトデータを、ブロックBLK#2のページ4に書き込む。
そして、コントローラ4は、このライトコマンドに対するレスポンス(論理アドレス、ブロック番号、オフセット(ブロック内オフセット)、長さ)をホスト2に返す。このケースにおいては、このレスポンスは、LBAy、ブロック番号(=BLK#2)、オフセット(=+10)、長さ(=2)、ブロック番号(=BLK#2)、オフセット(=+16)、長さ(=4)を含んでもよい。
図16、図17は、論理アドレスとデータのペアをブロック内のページに書き込む動作を示す。
各ブロックにおいて、各ページは、ユーザデータを格納するためのユーザデータ領域と管理データを格納するための冗長領域とを含んでもよい。ページサイズは16KB+アルファである。
コントローラ4は、4KBユーザデータとこの4KBユーザデータに対応する論理アドレス(例えばLBA)との双方を書き込み先ブロックBLKに書き込む。この場合、図16に示すように、各々がLBAと4KBユーザデータとを含む4つのデータセットが同じページに書き込まれてもよい。ブロック内オフセットは、セット境界を示してもよい。
あるいは、図17に示されているように、4つの4KBユーザデータがページ内のユーザデータ領域に書き込まれ、これら4つの4KBユーザデータに対応する4つのLBAがこのページ内の冗長領域に書き込まれてもよい。
図18は、スーパーブロックが使用される場合におけるブロック番号とオフセット(ブロック内オフセット)との関係を示す。以下では、ブロック内オフセットは単にオフセットとしても参照される。
ここでは、図示を簡単化するために、ある一つのスーパーブロックSB#1が4つのブロックBLK#11、BLK#21、BLK#31、BLK#41から構成されている場合が想定されている。コントローラ4は、ブロックBLK#11のページ0、ブロックBLK#21のページ0、ブロックBLK#31のページ0、ブロックBLK#41のページ0、ブロックBLK#11のページ1、ブロックBLK#21のページ1、ブロックBLK#31のページ1、ブロックBLK#41のページ1、…という順序でデータを書き込む。
オフセット+0はブロックBLK#11のページ0の最初の4KB領域を示し、オフセット+1はブロックBLK#11のページ0の2番目の4KB領域を示し、オフセット+2はブロックBLK#11のページ0の3番目の4KB領域を示し、オフセット+3はブロックBLK#11のページ0の4番目の4KB領域を示す。
オフセット+4はブロックBLK#21のページ0の最初の4KB領域を示し、オフセット+5はブロックBLK#21のページ0の2番目の4KB領域を示し、オフセット+6はブロックBLK#21のページ0の3番目の4KB領域を示し、オフセット+7はブロックBLK#21のページ0の4番目の4KB領域を示す。
同様に、オフセット+12はブロックBLK#41のページ0の最初の4KB領域を示し、オフセット+13はブロックBLK#41のページ0の2番目の4KB領域を示し、オフセット+14はブロックBLK#41のページ0の3番目の4KB領域を示し、オフセット+15はブロックBLK#41のページ0の4番目の4KB領域を示す。
オフセット+16はブロックBLK#11のページ1の最初の4KB領域を示し、オフセット+17はブロックBLK#11のページ1の2番目の4KB領域を示し、オフセット+18はブロックBLK#11のページ1の3番目の4KB領域を示し、オフセット+19はブロックBLK#11のページ1の4番目の4KB領域を示す。
オフセット+20はブロックBLK#21のページ1の最初の4KB領域を示し、オフセット+21はブロックBLK#21のページ1の2番目の4KB領域を示し、オフセット+22はブロックBLK#21のページ1の3番目の4KB領域を示し、オフセット+23はブロックBLK#21のページ1の4番目の4KB領域を示す。
同様に、オフセット+28はブロックBLK#41のページ1の最初の4KB領域を示し、オフセット+29はブロックBLK#41のページ1の2番目の4KB領域を示し、オフセット+30はブロックBLK#41のページ1の3番目の4KB領域を示し、オフセット+31はブロックBLK#41のページ1の4番目の4KB領域を示す。
例えば、あるLBA(LBAx)を指定するライトコマンドに対応する4Kバイトデータをオフセット+8に対応する位置に書き込んだ場合には、コントローラ4は、論理アドレス(=LBAx)、ブロック番号(=SB#1)、オフセット(=+8)、長さ(=1)をこのライトコマンドに対するレスポンスとしてホスト2に返してもよい。
図19のシーケンスチャートは、ホスト2と物理アドレスAPI(タイプ#1)をサポートするフラッシュストレージデバイス3とによって実行される書き込み動作処理のシーケンスを示す。
ホスト2は、QoSドメインID、LBA、長さを含むライトコマンドをフラッシュストレージデバイス3に送信する。フラッシュストレージデバイス3のコントローラ4がこのライトコマンドを受信した時、コントローラ4は、ホスト2からのライトデータを書き込むべき書き込み先ブロックおよびこの書き込み先ブロック内の位置を決定する。より詳しくは、コントローラ4は、フリーブロックリストから一つのフリーブロックを選択し、選択したフリーブロックを書き込み先ブロックとして割り当てる(ステップS11)。つまり、この選択されたフリーブロックおよびこの選択されたフリーブロック内の利用可能な最初のページが、ホスト2からのライトデータを書き込むべき書き込み先ブロックおよびこの書き込み先ブロック内の位置として決定される。もし書き込み先ブロックがすでに割り当てられている場合には、このステップ11における書き込み先ブロック割り当て処理を実行する必要は無い。すでに割り当てられている書き込み先ブロック内の利用可能な次のページが、ホスト2からのライトデータを書き込むべき書き込み先ブロック内の位置として決定される。
コントローラ4は、複数のQoSドメインに対応する複数のフリーブロックリストを管理してもよい。あるQoSドメインに対応するフリーブロックリストにおいては、このQoSドメインに対して予約されたブロック群のみが登録されてもよい。この場合、ステップS12では、コントローラ4は、ライトコマンドのQoSドメインIDによって指定されるQoSドメインに対応するフリーブロックリストを選択し、この選択したフリーブロックリストから一つのフリーブロックを選択し、この選択したフリーブロックを書き込み先ブロックとして割り当ててもよい。これにより、異なるQoSドメインに対応するデータが同じブロックに混在されてしまうことを防止することができる。
コントローラ4は、ホスト2から受信されるライトデータを書き込み先ブロックに書き込む(ステップS12)。ステップS12では、コントローラ4は、論理アドレス(ここではLBA)とライトデータの双方を書き込み先ブロックに書き込む。
コントローラ4は、ブロック管理テーブル32を更新して、書き込まれたデータに対応するビットマップフラグ(つまり、このデータが書き込まれた物理記憶位置の物理アドレスに対応するビットマップフラグ)を0から1に変更する(ステップS13)。例えば、図20に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK#1のオフセット+4〜+7に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図21に示されているように、ブロックBLK#1用のブロック管理テーブルにおいては、オフセット+4〜+7に対応するビットマップフラグそれぞれが0から1に変更される。
コントローラ4は、このライトコマンドに対するレスポンスをホスト2に返す(ステップS14)。例えば、図20に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK#1のオフセット+4〜+7に対応する物理記憶位置に書き込まれたならば、LBAx、ブロック番号(=BLK1)、オフセット(=+4)、長さ(=4)を含むレスポンスがコントローラ4からホスト2に送信される。
ホスト2がこのレスポンスを受信した時、ホスト2は、ホスト2によって管理されているLUTを更新して、書き込まれたライトデータに対応する論理アドレスそれぞれに物理アドレスをマッピングする。図22に示されているように、LUTは、複数の論理アドレス(例えばLBA)それぞれに対応する複数のエントリを含む。ある論理アドレス(例えばあるLBA)に対応するエントリには、このLBAに対応するデータが格納されているNAND型フラッシュメモリ5内の位置(物理記憶位置)を示す物理アドレスPBA、つまりブロック番号、オフセット(ブロック内オフセット)が格納される。図20に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK#1のオフセット+4〜+7に対応する物理記憶位置に書き込まれたならば、図22に示されているように、LUTが更新されて、LBAxに対応するエントリにBLK#1、オフセット+4が格納され、LBAx+1に対応するエントリにBLK#1、オフセット+5が格納され、LBAx+2に対応するエントリにBLK#1、オフセット+6が格納され、LBAx+3に対応するエントリにBLK#1、オフセット+7が格納される。
この後、ホスト2は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのTrimコマンドをフラッシュストレージデバイス3に送信する(ステップS21)。図20に示されているように、以前のデータがブロックBLK#0のオフセット+0、オフセット+1、オフセット+2、オフセット+3に対応する位置に格納されている場合には、図23に示すように、ブロック番号(=BLK#0)、オフセット(=+0)、長さ(=4)を指定するTrimコマンドがホスト2からフラッシュストレージデバイス3に送信される。フラッシュストレージデバイス3のコントローラ4は、このTrimコマンドに応じて、ブロック管理テーブル32を更新する(ステップS15)。ステップS15においては、図23に示すように、ブロックBLK#0用のブロック管理テーブルにおいて、オフセット+0〜+3に対応するビットマップフラグそれぞれが1から0に変更される。
図24は、物理アドレスAPI(タイプ#1)で使用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、物理アドレスPBA、長さ、転送先ポインタを含む。
コマンドIDはこのコマンドがリードコマンドであることを示すID(コマンドコード)であり、リードコマンドにはリードコマンド用のコマンドIDが含まれる。
物理アドレスPBAは、データが読み出されるべき最初の物理記憶位置を示す。物理アドレスPBAは、ブロック番号、オフセット(ブロック内オフセット)によって指定される。
長さは、リードすべきデータの長さを示す。このデータ長は、Grainの数によって指定可能である。
転送先ポインタは、読み出されたデータが転送されるべきホスト2内のメモリ上の位置を示す。
一つのリードコマンドは、物理アドレスPBA(ブロック番号、オフセット)と長さの組を複数指定することができる。
図25は、物理アドレスAPI(タイプ#1)に対応するリード動作を示す。
ここでは、ブロック番号(=BLK#2)、オフセット(=+5)、長さ(=3)を指定するリードコマンドがホスト2から受信された場合が想定されている。フラッシュストレージデバイス3のコントローラ4は、ブロック番号(=BLK#2)、オフセット(=+5)、長さ(=3)に基づいて、BLK#2からデータd1〜d3をリードする。この場合、コントローラ4は、BLK#2のページ1から1ページサイズ分のデータをリードし、このリードデータからデータd1〜データd3を抽出する。次いで、コントローラ4は、データd1〜データd3を、転送先ポインタによって指定されるホストメモリ上に転送する。
図26のシーケンスチャートは、物理アドレスAPI(タイプ#1)に対応するリード処理のシーケンスを示す。
ホスト2は、ホスト2によって管理されているLUTを参照して、ユーザアプリケーションからのリード要求に含まれる論理アドレスをブロック番号、オフセットに変換する。そして、ホスト2は、このブロック番号、オフセット、長さを指定するリードコマンドをフラッシュストレージデバイス3に送信する。
フラッシュストレージデバイス3のコントローラ4がリードコマンドをホスト2から受信した時、コントローラ4は、このリードコマンドによって指定されたブロック番号に対応するブロックをリード対象のブロックとして決定するとともに、このリードコマンドによって指定されたオフセットに基づいてリード対象のページを決定する(ステップS31)。ステップS31では、コントローラ4は、まず、リードコマンドによって指定されたオフセットを、ページサイズを表す粒度の数(ここでは、4)で除算してもよい。そして、コントローラ4は、この除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセット位置としてそれぞれ決定してもよい。
コントローラ4は、ブロック番号、オフセット、長さによって規定されるデータをNAND型フラッシュメモリ5からリードし(ステップS32)、このリードデータをホスト2に送信する。
図27は、物理アドレスAPI(タイプ#1)で使用されるガベージコレクション(GC)制御コマンドを示す。
GC制御コマンドは、コマンドID、ポリシー、ソースQoSドメインID、デスティネーションQoSドメインID、等を含んでもよい。
コマンドIDはこのコマンドがGC制御コマンドであることを示すID(コマンドコード)であり、GC制御コマンドにはGC制御コマンド用のコマンドIDが含まれる。
ポリシーは、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は、どのQoSドメインをGCソースとすべきかを指定するパラメータである。コントローラ4は、ソースQoSドメインIDによって指定されるQoSドメインに属するブロック群、つまりこのQoSドメインに対応するアクティブブロックリストから、一つ以上のGC候補ブロック(GCソースブロック)を選択する。
デスティネーションQoSドメインIDは、どのQoSドメインをGCデスティネーションとすべきかを指定するパラメータである。コントローラ4は、デスティネーションQoSドメインIDによって指定されるQoSドメインに属するフリーブロック群内の一つ以上のフリーブロックをGCデスティネーションブロックとして選択することができる。
ソースQoSドメインIDおよびデスティネーションQoSドメインIDは、同じQoSドメインを指定してもよいし、互いに異なるQoSドメインを指定してもよい。つまり、ソースQoSドメインIDおよびデスティネーションQoSドメインIDの各々は、複数のQoSドメインの任意の一つを指定するパラメータである。
コントローラ4は、ソースQoSドメインに対応する残りフリーブロックの数がポリシーによって指定される閾値以下になった場合に、GCを開始してもよい。もしGCの強制実行を指定するポリシーを含むGC制御コマンドを受信したならば、コントローラ4は、ホスト2からこのGC制御コマンドを受信した時にGCを即座に開始してもよい。
図28は、物理アドレスAPI(タイプ#1)で使用されるGC用コールバックコマンドを示す。
GC用コールバックコマンドは、GCによってコピーされた有効データの論理アドレスとこの有効データのコピー先位置を示すブロック番号およびオフセットとをホスト2に通知するために使用される。
GC用コールバックコマンドは、コマンドID、論理アドレス、長さ、デスティネーション物理アドレス、ソース物理アドレス(オプショナル)を含んでよい。
コマンドIDはこのコマンドがGC用コールバックコマンドであることを示すID(コマンドコード)であり、GC用コールバックコマンドにはGC用コールバックコマンド用のコマンドIDが含まれる。
論理アドレスは、GCによってGCソースブロックからGCデスティネーションブロックにコピーされた有効データの論理アドレスを示す。
長さは、このコピーされたデータの長さを示す。このデータ長は、粒度(Grain)の数によって指定されてもよい。
デスティネーション物理アドレスは、有効データがコピーされたGCデスティネーションブロック内の位置を示す。デスティネーション物理アドレスは、ブロック番号、オフセット(ブロック内オフセット)によって指定される。
ソース物理アドレス(オプショナル)は、有効データが格納されていたGCソースブロック内の位置を示す。ソース物理アドレスは、ブロック番号、オフセット(ブロック内オフセット)によって指定される。
図29のシーケンスチャートは、物理アドレスAPI(タイプ#1)に対応するガベージコレクション(GC)動作の手順を示す。
フラッシュストレージデバイス3のコントローラ4は、ホスト2によって指定されたポリシーに基づいて、ソースQoSドメインIDによって指定されるQoSドメインに属するブロック群から、有効データと無効データとが混在する一つ以上のGCソースブロック(コピー元ブロック)を選択する(ステップS41)。次いで、コントローラ4は、デスティネーションQoSドメインIDによって指定されるQoSドメインに属するフリーブロック群から一つ以上のフリーブロックを選択し、選択したフリーブロックをGCデスティネーションブロック(コピー先ブロック)として割り当てる(ステップS42)。
コントローラ4は、GCソースブロック(コピー元ブロック)内の全ての有効データをGCデスティネーションブロック(コピー先ブロック)にコピーする(ステップS43)。ステップS43では、コントローラ4は、GCソースブロック(コピー元ブロック)内の有効データのみならず、この有効データとこの有効データに対応する論理アドレスの双方を、GCソースブロック(コピー元ブロック)からGCデスティネーションブロック(コピー先ブロック)にコピーする。これにより、GCデスティネーションブロック(コピー先ブロック)内にデータと論理アドレスとのペアを保持することができる。
そして、コントローラ4は、コピーされた有効データの論理アドレスと、この有効データがコピーされたGCデスティネーションブロック(コピー先ブロック)内の位置を示すデスティネーション物理アドレス(ブロック番号、オフセット(ブロック内オフセット))を、GC用コールバックコマンドを使用してホスト2に通知する(ステップS44)。なお、ステップS44では、コントローラ4は、コピーされた有効データの論理アドレスとデスティネーション物理アドレスとみならず、ソース物理アドレスもホスト2に通知してもよい。
ホスト2がこのGC用コールバックコマンドを受信した時、ホスト2は、ホスト2によって管理されているLUTを更新して、コピーされた有効データに対応する論理アドレスそれぞれにデスティネーション物理アドレスをマッピングする(ステップS51)。
図30は、ガベージコレクション(GC)のために実行されるデータコピー動作の例を示す。
図30では、GCソースブロック(ここではブロックBLK#50)のオフセット+4に対応する位置に格納されている有効データ(LBA=10)が、GCデスティネーションブロック(ここではブロックBLK#100)のオフセット+0に対応する位置にコピーされ、GCソースブロック(ここではブロックBLK#50)のオフセット+10に対応する位置に格納されている有効データ(LBA=20)が、GCデスティネーションブロック(ここではブロックBLK#100)のオフセット+1に対応する位置にコピーされた場合が想定されている。この場合、コントローラ4は、{LBA10、BLK#100、オフセット(=+0)、LBA20、BLK#100、オフセット(=+1)}をホストに通知する(GC用コールバック処理)。
図31は、図30のデータコピー動作の結果に基づいて更新されるホスト2のLUTの内容を示す。
このLUTにおいては、LBA10に対応するブロック番号およびオフセットは、BLK#50、オフセット(=+4)から、BLK#100、オフセット(=+0)に更新される。同様に、LBA20に対応するブロック番号およびオフセットは、BLK#50、オフセット(=+10)から、BLK#100、オフセット(=+1)に更新される。
LUTが更新された後、ホスト2は、BLK#50およびオフセット(=+4)を指定するTrimコマンドをフラッシュストレージデバイス3に送信して、BLK#50のオフセット(=+4)に対応する位置に格納されているデータを無効化してもよい。さらに、ホスト2は、BLK#50およびオフセット(=+10)を指定するTrimコマンドをフラッシュストレージデバイス3に送信して、BLK#50のオフセット(=+10)に対応する位置に格納されているデータを無効化してもよい。
図32は、ライトコマンドに対するレスポンスとGC用コールバック処理との関係を示す。
コントローラ4がある論理アドレスに対応する有効データをコピーしている間に、この論理アドレスを指定するライトコマンドがホスト2から受信されるというケースが起こる場合がある。
図32では、図30のデータコピー動作(LBA10に対応するデータコピー動作)の実行中に、LBA10を指定するライトコマンドがホスト2から受信された場合が想定されている。
コントローラ4は、ホスト2から受信されるライトデータを書き込み先ブロックに書き込む(ここではBLK#3のオフセット+0に対応する位置に書き込まれる)。そして、コントローラ4は、{LBA10、BLK#3、オフセット(=+0)}をホスト2に通知する。
ホスト2は、LUTを更新して、LBA10に対応するブロック番号およびオフセットを、BLK#50、オフセット(+4)から、BLK#3、オフセット(+0)に変更する。
もしこの後に、LBA10のデスティネーション物理アドレスがコントローラ4からホスト2に通知されたならば、LBA10に対応する最新データが格納されている位置を示すブロック番号およびオフセット(BLK#3、オフセット(+0))が、LBA10に対応するデスティネーション物理アドレス(ここでは、BLK#100、オフセット(=+0))に誤って変更されてしまう可能性がある。
物理アドレスAPI(タイプ#1)をサポートするフラッシュストレージデバイス3では、コントローラ4は、LBA10とデスティネーション物理アドレス(BLK#100、オフセット(=+0))のみならず、ソース物理アドレス(BLK#50、オフセット(=+4))もホスト2に通知することができる。ホスト2は、ソース物理アドレス(BLK#50、オフセット(=+4))が、LUTによってLBA10に現在マッピングされているブロック番号、オフセットに一致しない場合には、LUTを更新しない。これにより、LBA10に対応する最新データが格納されている位置を示すブロック番号およびオフセット(BLK#3、オフセット(+0))が、LBA10に対応するデスティネーション物理アドレス(ここでは、BLK#100、オフセット(=+0))に誤って変更されてしまうことを防止することができる。
図33は、物理アドレスAPI(タイプ#1)で使用されるガベージコレクション(GC)制御コマンドの別の例を示す。
この図33のGC制御コマンドは、ソースQoSドメインIDの代わりに、ソースデバイスIDとソースQoSドメインIDのペアを指定してもよい。さらに、この図33のGC制御コマンドは、デスティネーションQoSドメインIDの代わりに、デスティネーションデバイスIDとデスティネーションQoSドメインIDのペアを指定してもよい。これにより、あるフラッシュストレージデバイス3をGCソースとして動作させ、別のフラッシュストレージデバイス3をGCデスティネーションとして動作させることが可能となる。ソースデバイスIDとデスティネーションデバイスIDが同じである場合には、一つのフラッシュストレージデバイス3内でGCが実行される。
図34は、物理アドレスAPI(タイプ#1)で使用されるGC用コールバックコマンドの別の例を示す。
図34のGC用コールバックコマンドは、デスティネーション物理アドレスの代わりに、デスティネーションデバイスIDとデスティネーション物理アドレスのペアを含む。また、図34のGC用コールバックコマンドは、ソース物理アドレス(オプショナル)の代わりに、ソースデバイスIDとソース物理アドレスのペア(オプショナル)を含んでもよい。
いま、デバイスIDが1のフラッシュストレージデバイス3をGCソースとして動作させ、デバイスIDが2のフラッシュストレージデバイス3をGCデスティネーションとして動作させる場合を想定する。ホスト2は、ソースデバイスID#1およびデスティネーションデバイスID#2を指定するGC制御コマンドを、デバイスID#1のフラッシュストレージデバイス3と、デバイスID#2のフラッシュストレージデバイス3に送信してもよい。
デバイスID#1のフラッシュストレージデバイス3は、ソースQoSドメインIDによって指定されるQoSドメインに属するブロック群からGCソースブロックを選択し、GCソースブロック内の有効データとこの有効データの論理アドレスとを、デスティネーションデバイスIDによって指定されるフラッシュストレージデバイス(デバイスID#2のフラッシュストレージデバイス)宛てに送信する。GCソースブロック内の有効データとこの有効データの論理アドレスは、例えば、図1のインタフェース50を介して、デバイスID#1のフラッシュストレージデバイス3からデバイスID#2のフラッシュストレージデバイス3に転送される。
デバイスID#2のフラッシュストレージデバイス3は、デスティネーションQoSドメインIDによって指定されるQoSドメインに属するフリーブロック群からGCデスティネーションブロックを選択し、スイッチ1を介して受信される有効データおよび論理ドレスをGCデスティネーションブロックに書き込む(コピーする)。
デバイスID#2のフラッシュストレージデバイス3は、コピーされた有効データの論理アドレスと、この有効データがコピーされたデスティネーション物理アドレス(ブロック番号、オフセット)を、GC用コールバックコマンドによってホスト2に通知する。
デバイスID#1のフラッシュストレージデバイス3は、コピーされた有効データの論理アドレスと、この有効データが格納されているソース物理アドレス(ブロック番号、オフセット)を、GC用コールバックコマンドによってホスト2に通知する。
図35は、物理アドレスAPI(タイプ#1)に対応する書き込み/リード/GC動作を示す。
まず、ホスト2からのデータを書き込むホストライト動作について説明する。
(1)コントローラ4は、ホスト2からLBAとライトデータを受信する。
(2)コントローラ4は、LBAとライトデータの双方を書き込み先ブロックに書き込む。書き込み先ブロックが割り当てられていない場合には、コントローラ4は、フリーブロックリストから一つのフリーブロックを選択し、この選択したフリーブロックを新たな書き込み先ブロックとして割り当てる。そして、コントローラ4は、LBAとライトデータの双方をこの新たな書き込み先ブロックに書き込む。
(3)コントローラ4は、このLBAと、このライトデータが書き込まれた書き込み先ブロック内の位置を示す物理アドレスPBAをホスト2に通知する。この物理アドレスPBAは、ブロック番号およびオフセットによって表される。書き込み先ブロック全体がデータで満たされると、コントローラ4は、この書き込み先ブロックをアクティブブロックリストに登録する。
次に、リード動作について説明する。
(4)ホスト2は、ホスト2によって管理されているLUTを参照して、ユーザアプリケーションからのリード要求に含まれるLBAをリード用物理アドレスPBA(ブロック番号、オフセット)に変換する。
(5)ホスト2から受信されるリード用物理アドレスPBA(ブロック番号、オフセット)に基づいて、コントローラ4は、このブロック番号を有するブロックをリード対象のブロックとして決定する。リード対象のブロックは、アクティブブロックリストによって管理されているブロック群(アクティブブロック)のいずれか一つ、または現在のGCソースブロック、または現在の書き込み先ブロックである。そして、コントローラ4は、オフセットに基づいて、リード対象のブロックからデータをリードする。
次に、GC動作について説明する。
(6)コントローラ4は、GCソースブロック(コピー元ブロック)およびGCデスティネーションブロック(コピー先ブロック)を選択し、GCソースブロック内に格納されている有効データとこの有効データのLBAの双方をGCデスティネーションブロックにコピーする。
(7)コントローラ4は、コピーされた有効データのLBAと、この有効データがコピーされたGCデスティネーションブロック内の位置を示すPBA(ブロック番号、オフセット)の双方を、ホスト2に通知する。
あるいは、コントローラ4は、コピーされた有効データのLBAと、この有効データがコピーされたGCデスティネーションブロック内の位置を示すPBA(ブロック番号、オフセット)と、この有効データが格納されているGCソースブロック内の位置を示すPBA(ブロック番号、オフセット)とを、ホスト2に通知してもよい。
<物理アドレスAPI(タイプ#2)の詳細>
次に、図36〜図50を参照して、物理アドレスAPI(タイプ#2)について説明する。
次に、図36〜図50を参照して、物理アドレスAPI(タイプ#2)について説明する。
図36は、従来型SSDとホストとの間の役割分担と、物理アドレスAPI(タイプ#2)をサポートするフラッシュストレージデバイス3とホスト2との間の役割分担を示す。
図36の右部は、物理アドレスAPI(タイプ#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用の論理アドレスをブロック番号に変換するテーブルとアプリケーションレベルアドレス変換テーブルとが統合(マージ)されたテーブルである。
また、各I/Oサービス403は、GCブロック選択機能を含む。GCブロック選択機能は、対応するブロックレベルLUTを使用して各ブロックの有効データ量を管理することができ、これによってGCソースブロックを選択することができる。
ホスト(サーバ)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ドメインに対応する複数のブロック内LUT602A、複数のQoSドメインに対応する複数のガベージコレクション(GC)機能603A、NAND型フラッシュメモリ(NANDフラッシュアレイ)603を含む。
この図36の右部に示す構成においては、上位階層(ホスト2)はブロック境界を認識することができるので、ブロック境界/ブロックサイズを考慮してユーザデータを各ブロックに書き込むことができる。つまり、ホスト2はNAND型フラッシュメモリ(NANDフラッシュアレイ)603の個々のブロックを認識することができ、これにより、例えば、一つのブロック全体に一斉にデータを書き込む、一つのブロック内のデータ全体を削除または更新によって無効化する、といった制御を行うことが可能となる。この結果、一つのブロックに有効データと無効データが混在されるという状況を起こりにくくすることが可能となる。したがって、GCを実行することが必要となる頻度を低減することができる。GCの頻度を低減することにより、ライトアンプリフィケーションが低下され、フラッシュストレージデバイス3の性能の向上、フラッシュストレージデバイス3の寿命の最大化を実現できる。このように、上位階層(ホスト2)がブロック番号を認識可能な構成は有用である。
一方、ページ書き込み順序制約により、現在書き込み可能なページはブロックあたり1ページのみである。このため、ページ番号を上位階層に見せることは、ブロック番号を上位階層に見せることに比較して有用ではない。
図37は、ホスト2によって管理されるブロックレベルLUT(ブロックレベルアドレス変換テーブル)と物理アドレスAPI(タイプ#2)をサポートするフラッシュストレージデバイス3によって管理されるブロック内LUT(ブロック内アドレス変換テーブル)を示す。
ブロックレベルLUTは、論理アドレスそれぞれとフラッシュストレージデバイス3の複数のブロックそれぞれに対応するブロック番号それぞれとの間のマッピングを管理する。このブロックレベルLUTは、ある論理アドレスをあるブロック番号BLK#に変換するテーブルである。
フラッシュストレージデバイス3においては、複数のブロックそれぞれに対応する複数のブロック内LUTが管理される。各ブロック内LUTは、論理アドレスそれぞれと対応するブロック内のブロック内物理アドレス(フロック内オフセット)それぞれの間のマッピングを管理する。各ブロック内LUTは、ある論理アドレスをあるブロック内物理アドレス(ブロック内PBA)に変換するテーブルである。ブロック内物理アドレス(ブロック内PBA)は、上述したようにブロック内オフセットによって表される。
アドレス変換は以下のように実行される。
例えば、リード動作においては、ホスト2は、ある論理アドレス(例えば、あるLBA)を使用してブロックレベルLUTを参照して、この論理アドレス(LBA)をブロック番号BLK#に変換する。この論理アドレスおよびブロック番号BLK#がホスト2からフラッシュストレージデバイス3に送信される。物理アドレスAPI(タイプ#2)をサポートするフラッシュストレージデバイス3においては、各ブロックに特定の論理アドレス範囲を割り当てるのではなく、どのブロックに対しても任意の論理アドレスに対応するデータを格納できるようにするために、この論理アドレスそのものがブロック番号BLK#と一緒にホスト2からフラッシュストレージデバイス3に送信される。
フラッシュストレージデバイス3においては、コントローラ4は、ブロック番号BLK#に対応するブロック内LUTを選択する。例えば、ホスト2からのブロック番号BLK#がブロック番号BLK#0を示すならば、ブロック番号BLK#0に対応するブロック内LUTが選択され、ホスト2からのブロック番号BLK#がブロック番号BLK#1を示すならば、ブロック番号BLK#1に対応するブロック内LUTが選択され、ホスト2からのブロック番号BLK#がブロック番号BLK#2を示すならば、ブロック番号BLK#2に対応するブロック内LUTが選択される。
選択されたブロック内LUTは、ホスト2からの論理アドレスによって参照される。そして、この論理アドレスに対応するブロック内PBAが選択されたブロック内LUTから取得される。
図38は、物理アドレスAPI(タイプ#2)で使用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドID、ブロック番号BLK#、論理アドレス、長さ、等を含んでもよい。
コマンドIDはこのコマンドがライトコマンドであることを示すID(コマンドコード)であり、ライトコマンドにはライトコマンド用のコマンドIDが含まれる。
ブロック番号BLK#は、データが書き込まれるべきブロックを一意に識別可能な識別子(ブロックアドレス)である。
論理アドレスは、書き込まれるべきライトデータを識別するための識別子である。この論理アドレスは、上述したように、LBAであってもよいし、キー・バリュー・ストアのキーであってもよいし、キーのハッシュ値であってもよい。論理アドレスがLBAである場合には、このライトコマンドに含まれる論理アドレス(開始LBA)は、ライトデータが書き込まれるべき論理位置(最初の論理位置)を示す。
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
ホスト2からライトコマンドを受信した時、コントローラ4は、ライトコマンドによって指定されたブロック番号を有するブロック内の書き込み先位置を決定する。この書き込み先位置は、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ4は、ホスト2からのデータを、ライトコマンドによって指定されたブロック番号を有するこのブロック内のこの書き込み先位置に書き込む。
図39は、物理アドレスAPI(タイプ#2)で使用されるTrimコマンドを示す。
このTrimコマンドは、無効にすべきデータが格納されているブロックのブロック番号およびこのデータの論理アドレスを含むコマンドである。このTrimコマンドは、コマンドID、ブロック番号BLK#、論理アドレス、長さを含む。
コマンドIDはこのコマンドがTrimコマンドであることを示すID(コマンドコード)であり、TrimコマンドにはTrimコマンド用のコマンドIDが含まれる。
ブロック番号は、無効化すべきデータが格納されているブロックを示す。
論理アドレスは、無効化すべきデータの最初の論理位置を示す。
長さは、無効化すべきデータの長さを示す。この長さ(データ長)は、論理アドレスの数によって指定されてもよいし、粒度(Grain)の数によって指定されてもよいし、バイトによって指定されてもよい。
コントローラ4は、複数のブロックの各々に含まれるデータそれぞれの有効/無効を示すフラグ(ビットマップフラグ)をブロック管理テーブル32を使用して管理する。無効にすべきデータが格納されているブロックを示すブロック番号および論理アドレスを含むTrimコマンドをホスト2から受信した場合、コントローラ4は、ブロック管理テーブル32を更新して、Trimコマンドに含まれるブロック番号および論理アドレスによって特定されるブロック内物理アドレスに対応するフラグ(ビットマップフラグ)を無効を示す値に変更する。
図40のシーケンスチャートは、物理アドレスAPI(タイプ#2)に対応する書き込み処理のシーケンスを示す。
ホスト2は、まず、書き込みのために使用すべきブロック(フリーブロック)を自身で選択するか、またはブロックアロケートコマンドをフラッシュストレージデバイス3に送信することによってフリーブロックを割り当てるようにフラッシュストレージデバイス3に要求する。そして、ホスト2は、自身で選択したブロックのブロック番号BLK#(またはフラッシュストレージデバイス3によって割り当てられたフリーブロックのブロック番号BLK#)と、論理アドレス(LBA)と、長さとを含むライトコマンドをフラッシュストレージデバイス3に送信する(ステップS20A)。
フラッシュストレージデバイス3のコントローラ4がこのライトコマンドを受信した時、コントローラ4は、ホスト2からのライトデータを書き込むべき、このブロック番号BLK#を有するブロック(書き込み先ブロックBLK#)内の書き込み先位置を決定し、この書き込み先ブロックBLK#の書き込み先位置にライトデータを書き込む(ステップS11A)。ステップS11Aでは、コントローラ4は、論理アドレス(ここではLBA)とライトデータの双方を書き込み先ブロックに書き込んでもよい。
コントローラ4は、書き込み先ブロックBLK#に対応するブロック内LUTを更新して、書き込み先位置を示すオフセット(ブロック内オフセット)をこの論理アドレスにマッピングする(ステップS12A)。
次いで、コントローラ4は、書き込み先ブロックBLK#に対応するブロック管理テーブル32を更新して、書き込まれたデータに対応するビットマップフラグ(つまり、このデータが書き込まれたオフセット(ブロック内オフセット)に対応するビットマップフラグ)を0から1に変更する(ステップS13A)。
例えば、図41に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK#1のオフセット+4〜+7に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図42に示されているように、ブロックBLK#1用のブロック内LUTにおいては、オフセット+4〜+7がLBAx〜LBAx+3にマッピングされる。また、図43に示されているように、ブロックBLK#1用のブロック管理テーブルにおいては、オフセット+4〜+7に対応するビットマップフラグそれぞれが0から1に変更される。
コントローラ4は、このライトコマンドに対するレスポンス(成功/失敗)をホスト2に返す(ステップS14A)。
ホスト2がこのレスポンスを受信した時、ホスト2は、ホスト2によって管理されているブロックレベルLUTを更新して、書き込み先ブロックBLK#のブロック番号BLK#を、書き込まれたライトデータに対応する論理アドレスにマッピングする(ステップS21A)。図44に示されているように、ブロックレベルLUTは、複数の論理アドレス(例えばLBA)それぞれに対応する複数のエントリを含む。ある論理アドレス(例えばあるLBA)に対応するエントリには、このLBAに対応するデータが格納されているNAND型フラッシュメモリ5のブロック番号が格納される。図41に示されているように、開始LBAがLBAxである16Kバイト更新データがブロックBLK#1に書き込まれたならば、図44に示されているように、ブロックレベルLUTが更新されて、LBAx〜LBAx+3に対応するブロック番号がBLK#0からBLK#1に変更される。
この後、図40に示すように、ホスト2は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのTrimコマンドをフラッシュストレージデバイス3に送信する。フラッシュストレージデバイス3のコントローラ4は、このTrimコマンドに応じて、ブロック内LUT、ブロック管理テーブルを更新する(ステップS15A、S16A)。
もし図41に示されているように、以前のデータがブロックBLK#0に格納されている場合には、図45に示すように、ブロック番号(=BLK#0)、LBAx、長さ(=4)を指定するTrimコマンドがホスト2からフラッシュストレージデバイス3に送信される。フラッシュストレージデバイス3のコントローラ4は、このTrimコマンドに応じて、BLK#0に対応するブロック内LUTを更新して、LBAx〜LBAx+3それぞれとオフセット+1〜+3それぞれとの間のマッピングを示す情報を削除する。この場合、コントローラ4は、これらLBAx〜LBAx+3とオフセット+1〜+3を無効を示す値(null)に変更してもよい。さらに、コントローラ4は、BLK#0に対応するブロック管理テーブル32を更新して、オフセット+0〜+3に対応するビットマップフラグそれぞれを1から0に変更する。
図46は、物理アドレスAPI(タイプ#2)で使用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、ブロック番号BLK#、論理アドレス、長さ、転送先ポインタを含む。
コマンドIDはこのコマンドがリードコマンドであることを示すID(コマンドコード)であり、リードコマンドにはリードコマンド用のコマンドIDが含まれる。
ブロック番号BLK#は、リードされるべきデータが格納されているブロックのブロック番号を示す。論理アドレスは、リードされるべきデータの論理アドレスである。
長さは、リードすべきデータの長さを示す。このデータ長は、LBAの数によって示されてもよいし、Grainの数によって示されてもよい。
転送先ポインタは、読み出されたデータが転送されるべきホスト2内のメモリ上の位置を示す。
図47のシーケンスチャートは、物理アドレスAPI(タイプ#2)に対応するリード動作を示す。
ホスト2は、ホスト2によって管理されているブロック内LUTを参照して、ユーザアプリケーションからのリード要求に含まれる論理アドレス(LBA)をブロック番号に変換する。そして、ホスト2は、このブロック番号、LBA、長さを指定するリードコマンドをフラッシュストレージデバイス3に送信する。
フラッシュストレージデバイス3のコントローラ4がリードコマンドをホスト2から受信した時、コントローラ4は、このリードコマンドによって指定されたブロック番号に対応するブロック内LUTを選択し、この選択したブロック内LUTをリードコマンド内のLBAを使用して参照して、このLBAに対応するオフセット(ブロック内オフセット)を取得する(ステップS31A)。コントローラ4は、リードコマンドによって指定されたブロック番号と、取得したオフセット(ブロック内オフセット)とに基づいて、このLBAに対応するデータをNAND型フラッシュメモリ5からリードし(ステップS32A)、このリードデータをホスト2に送信する。
図48は、物理アドレスAPI(タイプ#2)で使用されるガベージコレクション(GC)制御コマンドを示す。
GC制御コマンドは、GCソースブロック番号およびGCデスティネーションブロック番号をフラッシュストレージデバイス3に通知するために使用される。ホスト2は、各ブロックの有効データ量/無効データ量を管理しており、有効データ量がより少ない幾つかのブロックをGCソースブロックとして選択することができる。また、ホスト2は、フリーブロックリストを管理しており、幾つかのフリーブロックをGCデスティネーションブロックとして選択することができる。このGC制御コマンドは、コマンドID、GCソースブロック番号、GCデスティネーションブロック番号、等を含んでもよい。
コマンドIDはこのコマンドがGC制御コマンドであることを示すID(コマンドコード)であり、GC制御コマンドにはGC制御コマンド用のコマンドIDが含まれる。
GCソースブロック番号は、GCソースブロックを示すブロック番号である。ホスト2は、どのブロックをGCソースブロックとすべきかを指定することができる。ホスト2は、複数のGCソースブロック番号を一つのGC制御コマンドに設定してもよい。
GCデスティネーションブロック番号は、GCデスティネーションブロックを示すブロック番号である。ホスト2は、どのブロックをGCデスティネーションブロックとすべきかを指定することができる。ホスト2は、複数のGCデスティネーションブロック番号を一つのGC制御コマンドに設定してもよい。
図49は、物理アドレスAPI(タイプ#2)で使用されるGC用コールバックコマンドを示す。
GC用コールバックコマンドは、論理アドレス(LBA)とデスティネーションブロック番号との複数のペアを含むリストをホスト2に通知するために使用される。あるペアに含まれる論理アドレス(LBA)は、コピーされた有効データの論理アドレスである。このペアに含まれるデスティネーションブロック番号は、この有効データがコピーされたGCデスティネーションブロックのブロック番号である。このGC用コールバックコマンドは、GC制御コマンドによって複数のGCソースブロック番号および複数のデスティネーションブロック番号が指定された場合にのみ、フラッシュストレージデバイス3からホスト2に送信されてもよい。
図50のシーケンスチャートは、物理アドレスAPI(タイプ#2)に対応するガベージコレクション(GC)動作の手順を示す。
例えば、ホスト2は、ホスト2によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、GCソースブロックおよびGCデスティネーションブロックを選択し、GC制御コマンドをフラッシュストレージデバイス3に送信する(ステップS41A)。
このGC制御コマンドを受信すると、フラッシュストレージデバイス3のコントローラ4は、GCソースブロック内の有効データを書き込むべきGCデスティネーションブロック内の位置(コピー先位置)を決定する動作と、GCソースブロック内の有効データをGCデスティネーションブロック内のコピー先位置にコピーする動作とを含むデータコピー動作を実行する(ステップS51A)。ステップS51Aでは、GCソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。複数のGCソースブロックがGC制御コマンドによって指定された場合には、全てのGCソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。
そして、コントローラ4は、論理アドレス(LBA)とデスティネーションブロック番号との複数のペアを含むリストをGC用コールバックコマンドを使用してホスト2に通知するとともに(ステップS52A)、コピーされた有効データの論理アドレスにマッピングされているオフセット(ブロック内オフセット)が、GCソースブロック内のコピー元位置を示すオフセット(ブロック内オフセット)からGCデスティネーションブロック内のコピー先位置を示すオフセット(ブロック内オフセット)に変更されるように、GCソースブロックに対応するブロック内LUTおよびGCデスティネーションブロックに対応するブロック内LUTを更新する(ステップS53A)。
ホスト2は、フラッシュストレージデバイス3から通知されるリストに基づいて、ブロック内LUTを更新する(ステップS42A)。
<物理アドレスAPI(タイプ#3)の詳細>
次に、図51〜図60を参照して、物理アドレスAPI(タイプ#3)について説明する。
次に、図51〜図60を参照して、物理アドレスAPI(タイプ#3)について説明する。
図51は、従来型SSDとホストとの間の役割分担と、物理アドレスAPI(タイプ#3)をサポートするフラッシュストレージデバイス3とホスト2との間の役割分担とを示す。
図51の右部は、物理アドレスAPI(タイプ#3)をサポートするフラッシュストレージデバイス3とホスト2とを含む計算機システム全体の階層構造を表している。
ホスト(サーバ)2においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス401が実行される。仮想マシンサービス401上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション402が実行される。
また、ホスト(サーバ)2においては、複数のユーザアプリケーション402に対応する複数のI/Oサービス403が実行される。これらI/Oサービス403には、LBAベースのブロックI/Oサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各I/Oサービス403は、論理アドレスそれぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル(LUT)411を含む。ここで、論理アドレスとは、アクセス対象のデータを識別可能な識別子を意味する。この論理アドレスは、論理アドレス空間上の位置を指定する論理ブロックアドレス(LBA)であってもよいし、あるいは、キー・バリュー・ストアのキー(タグ)であってもよいし、キーのハッシュ値であってもよい。
LBAベースのブロックI/Oサービスにおいては、論理アドレス(LBA)それぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するLUT411が使用されてもよい。
キー・バリュー・ストアサービスにおいては、論理アドレス(つまり、キーのようなタグ)それぞれとこれら論理アドレス(つまり、キーのようなタグ)に対応するデータが格納されているフラッシュストレージデバイス3内の物理記憶位置を示す物理アドレスそれぞれとの間のマッピングを管理するLUT411が使用されてもよい。このLUT411においては、タグと、このタグによって識別されるデータが格納されている物理アドレスと、このデータのデータ長との対応関係が管理されてもよい。
各エンドユーザは、使用すべきアドレッシング方法(LBA、キー・バリュー・ストアのキー、等)を選択することができる。
これら各LUT411は、ユーザアプリケーション402からの論理アドレスそれぞれをフラッシュストレージデバイス3用の論理アドレスそれぞれに変換するのではなく、ユーザアプリケーション402からの論理アドレスそれぞれをフラッシュストレージデバイス3の物理アドレスそれぞれに変換する。つまり、これら各LUT411は、フラッシュストレージデバイス3用の論理アドレスを物理アドレスに変換するテーブルとアプリケーションレベルアドレス変換テーブルとが統合(マージ)されたテーブルである。
また、各I/Oサービス403は、GCブロック選択機能を含む。GCブロック選択機能は、対応するLUTを使用して各ブロックの有効データ量を管理することができ、これによってGCソースブロックを選択することができる。
ホスト(サーバ)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)機能603A、NAND型フラッシュメモリ(NANDフラッシュアレイ)603を含む。
この図51の右部に示す構成においては、上位階層(ホスト2)はブロック境界を認識することができるので、ブロック境界/ブロックサイズを考慮してユーザデータを各ブロックに書き込むことができる。つまり、ホスト2はNAND型フラッシュメモリ(NANDフラッシュアレイ)603の個々のブロックを認識することができ、これにより、例えば、一つのブロック全体に一斉にデータを書き込む、一つのブロック内のデータ全体を削除または更新によって無効化する、といった制御を行うことが可能となる。この結果、一つのブロックに有効データと無効データが混在されるという状況を起こりにくくすることが可能となる。したがって、GCを実行することが必要となる頻度を低減することができる。GCの頻度を低減することにより、ライトアンプリフィケーションが低下され、フラッシュストレージデバイス3の性能の向上、フラッシュストレージデバイス3の寿命の最大化を実現できる。このように、上位階層(ホスト2)がブロック番号を認識可能な構成は有用である。
一方、データが書き込まれるべきブロック内の位置は、上位階層(ホスト2)ではなく、フラッシュストレージデバイス3によって決定される。したがって、不良ページ(バッドページ)を隠蔽することができ、またページ書き込み順序制約を守ることができる。
図52は、物理アドレスAPI(タイプ#3)に対応するデータ書き込み動作と、物理アドレスAPI(タイプ#3)に対応するデータ読み出し動作とを示す。
データ書き込み動作は以下の手順で実行される。
(1)ホスト2のライト処理部412がフラッシュストレージデバイス3にデータ(ライトデータ)を書き込むことが必要な時、ライト処理部412は、フリーブロックを割り当てるようにフラッシュストレージデバイス3に要求してもよい。フラッシュストレージデバイス3のコントローラ4は、NAND型フラッシュメモリ5のフリーブロック群を管理するブロック割り当て部701を含む。ブロック割り当て部701がライト処理部412からこの要求(ブロック割り当て要求)を受信した時、ブロック割り当て部701は、フリーブロック群の一つのフリーブロックをホスト2に割り当て、割り当てられたブロックのブロック番号(BLK#)をホスト2に通知する。
あるいは、ライト処理部412がフリーブロック群を管理する構成においては、ライト処理部412が自身で書き込み先ブロックを選択してもよい。
(2)ライト処理部412は、ライトデータに対応する論理アドレス(例えばLBA)と書き込み先ブロックのブロック番号(BLK#)とを指定するライト要求をフラッシュストレージデバイス3に送信する。
(3)フラッシュストレージデバイス3のコントローラ4は、データ書き込み用のページを割り当てるページ割り当て部702を含む。ページ割り当て部702がライト要求を受信した時、ページ割り当て部702は、ライト要求によって指定されたブロック番号を有するブロック(書き込み先ブロック)内の書き込み先位置を示すブロック内物理アドレス(ブロック内PBA)を決定する。ブロック内物理アドレス(ブロック内PBA)は、上述のブロック内オフセット(単にオフセットとしても参照される)によって表すことができる。コントローラ4は、ライト要求によって指定されたブロック番号と、ブロック内物理アドレス(ブロック内PBA)とに基づいて、ホスト2からのライトデータを、書き込み先ブロック内の書き込み先位置に書き込む。
(4)コントローラ4は、書き込み先位置を示すブロック内物理アドレス(ブロック内PBA)をライト要求に対するレスポンスとしてホスト2に通知する。あるいは、コントローラ4は、ライトデータに対応する論理アドレス(LBA)と、書き込み先ブロックのブロック番号(BLK#)と、書き込み先位置を示すブロック内PBA(オフセット)との組を、ライト要求に対するレスポンスとしてホスト2に通知してもよい。換言すれば、コントローラは、ブロック内物理アドレス、または論理アドレスとブロック番号とブロック内物理アドレスとの組のいずれかを、ホスト2に通知する。ホスト2においては、ライトデータが書き込まれた物理記憶位置を示す物理アドレス(ブロック番号、ブロック内物理アドレス(ブロック内オフセット))が、このライトデータの論理アドレスにマッピングされるように、LUT411が更新される。
データリード動作は以下の手順で実行される。
(1)’ホスト2がフラッシュストレージデバイス3からデータをリードすることが必要な時、ホスト2は、LUT411を参照して、リードすべきデータの論理アドレスに対応する物理アドレス(ブロック番号、ブロック内物理アドレス(ブロック内オフセット))をLUT411から取得する。
(2)’ホスト2は、取得されたブロック番号およびブロック内物理アドレス(ブロック内オフセット)を指定するリード要求をフラッシュストレージデバイス3に送出する。フラッシュストレージデバイス3のコントローラ4がこのリード要求をホスト2から受信した時、コントローラ4は、ブロック番号およびブロック内物理アドレスに基づいて、リード対象のブロックおよびリード対象の物理記憶位置を特定し、このリード対象のブロック内のリード対象の物理記憶位置からデータをリードする。
図53は、物理アドレスAPI(タイプ#3)で使用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドID、ブロック番号BLK#、論理アドレス、長さ、等を含んでもよい。
コマンドIDはこのコマンドがライトコマンドであることを示すID(コマンドコード)であり、ライトコマンドにはライトコマンド用のコマンドIDが含まれる。
ブロック番号BLK#は、データが書き込まれるべきブロックを一意に識別可能な識別子(ブロックアドレス)である。
論理アドレスは、書き込まれるべきライトデータを識別するための識別子である。この論理アドレスは、上述したように、LBAであってもよいし、キー・バリュー・ストアのキーであってもよいし、キーのハッシュ値であってもよい。論理アドレスがLBAである場合には、このライトコマンドに含まれる論理アドレス(開始LBA)は、ライトデータが書き込まれるべき論理位置(最初の論理位置)を示す。
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
ホスト2からライトコマンドを受信した時、コントローラ4は、ライトコマンドによって指定されたブロック番号を有するブロック内の書き込み先位置を決定する。この書き込み先位置は、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ4は、ホスト2からのデータを、ライトコマンドによって指定されたブロック番号を有するこのブロック内のこの書き込み先位置に書き込む。
図54は、図53のライトコマンドに対するレスポンスを示す。
このレスポンスは、ブロック内物理アドレス、長さを含む。ブロック内物理アドレスは、データが書き込まれたブロック内の位置(物理記憶位置)を示す。ブロック内物理アドレスは、上述したように、ブロック内オフセットによって指定可能である。長さは、書き込まれたデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
あるいは、このレスポンスは、ブロック内物理アドレスおよび長さだけでなく、論理アドレスおよびブロック番号をさらに含んでいてもよい。論理アドレスは、図53のライトコマンドに含まれていた論理アドレスである。ブロック番号は、図53のライトコマンドに含まれていた論理アドレスである。
図55は、物理アドレスAPI(タイプ#3)で使用されるTrimコマンドを示す。
このTrimコマンドは、無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびブロック内物理アドレス(ブロック内オフセット)を含むコマンドである。つまり、このTrimコマンドは、LBAのような論理アドレスではなく、物理アドレスを指定可能である。このTrimコマンドは、コマンドID、物理アドレス、長さを含む。
コマンドIDはこのコマンドがTrimコマンドであることを示すID(コマンドコード)であり、TrimコマンドにはTrimコマンド用のコマンドIDが含まれる。
物理アドレスは、無効化すべきデータが格納されている最初の物理記憶位置を示す。物理アドレスAPI(タイプ#3)をサポートするフラッシュストレージデバイス3では、この物理アドレスは、ブロック番号とオフセット(ブロック内オフセット)との組み合わせによって指定される。
長さは、無効化すべきデータの長さを示す。この長さ(データ長)は、粒度(Grain)の数によって指定されてもよいし、バイトによって指定されてもよい。
コントローラ4は、複数のブロックの各々に含まれるデータそれぞれの有効/無効を示すフラグ(ビットマップフラグ)をブロック管理テーブル32を使用して管理する。無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびオフセット(ブロック内オフセット)を含むTrimコマンドをホスト2から受信した場合、コントローラ4は、ブロック管理テーブル32を更新して、Trimコマンドに含まれるブロック番号およびブロック内オフセットに対応する物理記憶位置のデータに対応するフラグ(ビットマップフラグ)を無効を示す値に変更する。
図56のシーケンスチャートは、物理アドレスAPI(タイプ#3)に対応する書き込み処理のシーケンスを示す。
ホスト2は、まず、書き込みのために使用すべきブロック(フリーブロック)を自身で選択するか、またはブロックアロケートコマンドをフラッシュストレージデバイス3に送信することによってフリーブロックを割り当てるようにフラッシュストレージデバイス3に要求する。そして、ホスト2は、自身で選択したブロックのブロック番号BLK#(またはフラッシュストレージデバイス3によって割り当てられたフリーブロックのブロック番号BLK#)と、論理アドレス(LBA)と、長さとを含むライトコマンドをフラッシュストレージデバイス3に送信する(ステップS20B)。
フラッシュストレージデバイス3のコントローラ4がこのライトコマンドを受信した時、コントローラ4は、ホスト2からのライトデータを書き込むべき、このブロック番号BLK#を有するブロック(書き込み先ブロックBLK#)内の書き込み先位置を決定し、この書き込み先ブロックBLK#の書き込み先位置にライトデータを書き込む(ステップS11B)。ステップS11Bでは、コントローラ4は、論理アドレス(ここではLBA)とライトデータの双方を書き込み先ブロックに書き込んでもよい。
コントローラ4は、書き込み先ブロックBLK#に対応するブロック管理テーブル32を更新して、書き込まれたデータに対応するビットマップフラグ(つまり、このデータが書き込まれたオフセット(ブロック内オフセット)に対応するビットマップフラグ)を0から1に変更する(ステップS12B)。
そして、図56に示すように、コントローラ4は、このライトコマンドに対するレスポンスをホスト2に返す(ステップS13B)。このレスポンスは、このデータが書き込まれたオフセット(ブロック内オフセット)を少なくとも含む。
ホスト2がこのレスポンスを受信した時、ホスト2は、ホスト2によって管理されているLUT411を更新して、書き込まれたライトデータに対応する論理アドレスそれぞれに物理アドレスをマッピングする(ステップS21B)。
この後、ホスト2は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのTrimコマンドをフラッシュストレージデバイス3に送信する。フラッシュストレージデバイス3のコントローラ4は、このTrimコマンドに応じて、ブロック管理テーブル32を更新する(図56、ステップS14B)。
図57は、物理アドレスAPI(タイプ#3)で使用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、物理アドレスPBA、長さ、転送先ポインタを含む。
コマンドIDはこのコマンドがリードコマンドであることを示すID(コマンドコード)であり、リードコマンドにはリードコマンド用のコマンドIDが含まれる。
物理アドレスPBAは、データが読み出されるべき最初の物理記憶位置を示す。物理アドレスPBAは、ブロック番号、オフセット(ブロック内オフセット)によって指定される。
長さは、リードすべきデータの長さを示す。このデータ長は、Grainの数によって指定可能である。
転送先ポインタは、読み出されたデータが転送されるべきホスト2内のメモリ上の位置を示す。
一つのリードコマンドは、物理アドレスPBA(ブロック番号、オフセット)と長さの組を複数指定することができる。
図58は、物理アドレスAPI(タイプ#3)で使用されるガベージコレクション(GC)制御コマンドを示す。
GC制御コマンドは、GCソースブロック番号およびGCデスティネーションブロック番号をフラッシュストレージデバイス3に通知するために使用される。ホスト2は、各ブロックの有効データ量/無効データ量を管理しており、有効データ量がより少ない幾つかのブロックをGCソースブロックとして選択することができる。また、ホスト2は、フリーブロックリストを管理しており、幾つかのフリーブロックをGCデスティネーションブロックとして選択することができる。このGC制御コマンドは、コマンドID、GCソースブロック番号、GCデスティネーションブロック番号、等を含んでもよい。
コマンドIDはこのコマンドがGC制御コマンドであることを示すID(コマンドコード)であり、GC制御コマンドにはGC制御コマンド用のコマンドIDが含まれる。
GCソースブロック番号は、GCソースブロックを示すブロック番号である。ホスト2は、どのブロックをGCソースブロックとすべきかを指定することができる。ホスト2は、複数のGCソースブロック番号を一つのGC制御コマンドに設定してもよい。
GCデスティネーションブロック番号は、GCデスティネーションブロックを示すブロック番号である。ホスト2は、どのブロックをGCデスティネーションブロックとすべきかを指定することができる。ホスト2は、複数のGCデスティネーションブロック番号を一つのGC制御コマンドに設定してもよい。
図59は、物理アドレスAPI(タイプ#3)で使用されるGC用コールバックコマンドを示す。
GC用コールバックコマンドは、GCによってコピーされた有効データの論理アドレスとこの有効データのコピー先位置を示すブロック番号およびオフセットとをホスト2に通知するために使用される。
GC用コールバックコマンドは、コマンドID、論理アドレス、長さ、デスティネーション物理アドレスを含んでよい。
コマンドIDはこのコマンドがGC用コールバックコマンドであることを示すID(コマンドコード)であり、GC用コールバックコマンドにはGC用コールバックコマンド用のコマンドIDが含まれる。
論理アドレスは、GCによってGCソースブロックからGCデスティネーションブロックにコピーされた有効データの論理アドレスを示す。
長さは、このコピーされたデータの長さを示す。このデータ長は、粒度(Grain)の数によって指定されてもよい。
デスティネーション物理アドレスは、有効データがコピーされたGCデスティネーションブロック内の位置を示す。デスティネーション物理アドレスは、ブロック番号、オフセット(ブロック内オフセット)によって指定される。
図60のシーケンスチャートは、物理アドレスAPI(タイプ#3)に対応するガベージコレクション(GC)動作の手順を示す。
例えば、ホスト2は、ホスト2によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、GCソースブロックおよびGCデスティネーションブロックを選択し、選択されたGCソースブロックおよび選択されたGCデスティネーションブロックを指定するGC制御コマンドをフラッシュストレージデバイス3に送信する(ステップS41B)。あるいは、ライト処理部412がフリーブロック群を管理する構成においては、残りフリーブロックの数が閾値以下に低下した際にライト処理部412がホスト2にその旨通知を行ない、通知を受信したホスト2がブロック選択およびGC制御コマンドの送信を行なってもよい。
このGC制御コマンドを受信すると、フラッシュストレージデバイス3のコントローラ4は、GCソースブロック内の有効データを書き込むべきGCデスティネーションブロック内の位置(コピー先位置)を決定する動作と、GCソースブロック内の有効データをGCデスティネーションブロック内のコピー先位置にコピーする動作とを含むデータコピー動作を実行する(ステップS51B)。ステップS51Bでは、コントローラ4は、GCソースブロック(コピー元ブロック)内の有効データのみならず、この有効データとこの有効データに対応する論理アドレスの双方を、GCソースブロック(コピー元ブロック)からGCデスティネーションブロック(コピー先ブロック)にコピーする。これにより、GCデスティネーションブロック(コピー先ブロック)内にデータと論理アドレスとのペアを保持することができる。
また、ステップS51Bでは、GCソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。複数のGCソースブロックがGC制御コマンドによって指定された場合には、全てのGCソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。
そして、コントローラ4は、コピーされた有効データ毎に、その有効データの論理アドレス(LBA)と、その有効データのコピー先位置を示すデスティネーション物理アドレス等を、GC用コールバックコマンドを使用してホスト2に通知する(ステップS52B)。ある有効データに対応するデスティネーション物理アドレスは、この有効データがコピーされたコピー先ブロック(GCデスティネーションブロック)のブロック番号と、この有効データがコピーされたコピー先ブロック内の物理記憶位置を示すブロック内物理アドレス(ブロック内オフセット)とによって表される。
ホスト2がこのGC用コールバックコマンドを受信した時、ホスト2は、ホスト2によって管理されているLUT411を更新して、コピーされた各有効データに対応する論理アドレスにデスティネーション物理アドレス(ブロック番号、ブロック内オフセット)をマッピングする(ステップS42B)。
以上説明したように、本実施形態によれば、NAND型フラッシュメモリ5をアクセスするための複数種のインタフェースがサポートされており、NAND型フラッシュメモリ5内のアクセス対象の領域毎に、使用すべきインタフェースを切り替えることができる。したがって、ホスト2は異なる種類のインタフェースに対応した複数の領域を選択的に利用することができる。また、これら複数の領域には、少なくとも、ホスト2が論理アドレスを指定しNAND型フラッシュメモリ5の物理アドレスを指定しない第1タイプのインタフェースを使用してリードアクセスされる第1領域と、ホスト2がNAND型フラッシュメモリ5の物理アドレスの一部または全体を指定する第2タイプのインタフェースを使用してリードアクセスされる第2領域とが含まれている。
第1タイプのインタフェースにおいては、ホスト2は、NAND型フラッシュメモリの物理アドレスを指定する必要は無く、リードすべきデータに対応する論理アドレスのみを指定すればよい。したがって、第1領域をリードアクセスする場合においては、NAND型フラッシュメモリ5を直接的にハンドリングするための機能群がホスト2上で既に実行されている必要は無い。よって、第1領域は、オペレーティングシステムをブートするためのブータブル領域として利用可能である。
また、第2タイプのインタフェース(物理アドレスAPI)を使用してデータをリードする場合においては、ホスト2は、NAND型フラッシュメモリ5の物理アドレスの一部または全体を指定することができる。したがって、ホスト2は、必要に応じて物理アドレスAPIを使用することにより、NAND型フラッシュメモリ5を直接的にアクセスすることができる。
なお、フラッシュストレージデバイス3は、ストレージアレイ内に設けられる複数のフラッシュストレージデバイス3の一つとして利用されてもよい。ストレージアレイは、サーバ計算機のような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のフラッシュストレージデバイス3を制御するコントローラを含む。フラッシュストレージデバイス3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス3のホスト2として機能してもよい。
また、本実施形態では、不揮発性メモリとして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型フラッシュメモリ、20…API設定/選択部、21…ライト動作制御部、22…リード動作制御部、23…GC動作制御部。
Claims (15)
- ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域を管理し、前記複数の領域は、前記ホストが論理アドレスを指定し前記不揮発性メモリの物理アドレスを指定しない第1タイプのインタフェースを使用してリードアクセスされる一つ以上の第1領域と、前記ホストが前記不揮発性メモリの物理アドレスの一部または全体を指定する第2タイプのインタフェースを使用してリードアクセスされる一つ以上の第2領域とを含み、
前記ホストからリード要求を受信し、
前記受信したリード要求が前記一つ以上の第1領域の一つの第1領域を示す第1の識別子を含む場合、前記第1タイプのインタフェースを選択し、前記受信したリード要求から論理アドレスを取得し、前記取得した論理アドレスに対応する物理アドレスを、論理アドレスそれぞれと前記一つの第1領域の物理アドレスそれぞれとの間のマッピングを管理する論理物理アドレス変換テーブルから取得し、取得した物理アドレスに基づいて、前記一つの第1領域からデータをリードし、
前記受信したリード要求が前記一つ以上の第2領域の一つの第2領域を示す第2の識別子を含む場合、前記第2タイプのインタフェースを選択し、前記受信したリード要求から前記一つの第2領域の物理アドレスの一部または全てを指定する物理アドレス情報を取得し、前記取得した物理アドレス情報に基づいて、前記一つの第2領域からデータをリードするように構成されている、メモリシステム。 - 前記一つ以上の第1領域は、オペレーティングシステムをブート可能なブータブル領域を含む請求項1記載のメモリシステム。
- 前記第1タイプのインタフェースにおいて前記ホストによって指定される前記論理アドレスは論理ブロックアドレスである請求項1記載のメモリシステム。
- 前記複数の領域は、前記第1タイプのインタフェースおよび前記第2タイプのインタフェースの各々と異なる第3タイプのインタフェースを使用してリードアクセスされる一つ以上の第3領域をさらに含む請求項1記載のメモリシステム。
- 前記第2タイプのインタフェースにおいては、前記ホストから受信されるライト要求は論理アドレスを指定し、前記ホストから受信されるリード要求は前記不揮発性メモリの物理アドレスの全体を指定し、
前記コントローラは、
前記第2の識別子を含み且つ第1の論理アドレスを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、第1のブロックと前記第1のブロック内の第1の位置との双方を決定し、前記ホストからのデータを前記第1のブロックの前記第1の位置に書き込み、前記第1の論理アドレスと、前記第1のブロックを指定する第1のブロック番号と、前記第1の位置を指定する第1のブロック内物理アドレスとを前記ホストに通知し、
前記第1のブロック番号および前記第1のブロック内物理アドレスを指定するリード要求を前記ホストから受信した場合、前記第1のブロック内物理アドレスに基づいて前記第1のブロックからデータをリードするように構成されている請求項1記載のメモリシステム。 - 前記第2タイプのインタフェースにおいては、前記ホストから受信されるライト要求はブロック番号と論理アドレスとを指定し、前記ホストから受信されるリード要求はブロック番号と論理アドレスとを指定し、
前記コントローラは、
前記第2の識別子を含み且つ第1のブロック番号と第1の論理アドレスを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第1のブロック番号を有する第1のブロック内の第1の位置を決定し、前記ホストからのデータを前記第1のブロック内の前記第1の位置に書き込み、論理アドレスそれぞれと前記第1のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第1のアドレス変換テーブルを更新して、前記第1の位置を示す第1のブロック内物理アドレスを前記第1の論理アドレスにマッピングし、
前記第1のブロック番号と前記第1の論理アドレスを指定するリード要求を前記ホストから受信した場合、前記第1の論理アドレスを使用して前記第1のアドレス変換テーブルを参照して、前記第1のブロック内物理アドレスを取得し、前記第1のブロック番号と前記取得された第1のブロック内物理アドレスとに基づいて、前記第1の論理アドレスに対応するデータを前記第1のブロックからリードするように構成されている請求項1記載のメモリシステム。 - 前記第2タイプのインタフェースにおいては、前記ホストから受信されるライト要求はブロック番号と論理アドレスとを指定し、前記ホストから受信されるリード要求は前記不揮発性メモリの物理アドレスの全体を指定し、
前記コントローラは、
前記第2の識別子を含み且つ第1の論理アドレスと第1のブロック番号とを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第1のブロック番号を有する第1のブロック内の第1の位置を決定し、前記ホストからのデータを前記第1のブロック内の前記第1の位置に書き込み、前記第1の位置を示す第1のブロック内物理アドレス、または前記第1の論理アドレスと前記第1のブロック番号と前記第1のブロック内物理アドレスとの組のいずれかを、前記ホストに通知し、
前記第1のブロック番号と前記第1のブロック内物理アドレスを指定するリード要求を前記ホストから受信した場合、前記第1のブロック番号と前記第1のブロック内物理アドレスとに基づいて、前記第1のブロック内の前記第1の位置からデータをリードするように構成されている請求項1記載のメモリシステム。 - ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
複数のネームスペースを管理し、前記複数のネームスペースは、前記ホストが論理アドレスを指定し前記不揮発性メモリの物理アドレスを指定しない第1タイプのインタフェースを使用してリードアクセスされる第1ネームスペースと、前記ホストが前記不揮発性メモリの物理アドレスの一部または全体を指定する第2タイプのインタフェースを使用してリードアクセスされる第2ネームスペースとを含み、
前記ホストからリード要求を受信し、
前記受信したリード要求が前記第1ネームスペースの識別子を含む場合、前記第1タイプのインタフェースを選択し、前記受信したリード要求から論理アドレスを取得し、前記取得した論理アドレスに対応する物理アドレスを、論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理する論理物理アドレス変換テーブルから取得し、取得した物理アドレスに基づいて、前記第1ネームスペースからデータをリードし、
前記受信したリード要求が前記第2ネームスペースの識別子を含む場合、前記第2タイプのインタフェースを選択し、前記受信したリード要求から前記不揮発性メモリの物理アドレスの一部または全てを指定する物理アドレス情報を取得し、前記取得した物理アドレス情報に基づいて、前記第2ネームスペースからデータをリードするように構成されている、メモリシステム。 - 前記第1ネームスペースは、オペレーティングシステムをブート可能なネームスペースである請求項8記載のメモリシステム。
- 各々が複数のページを含む複数のブロックを含む不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域を管理することと、前記複数の領域は、ホストが論理アドレスを指定し前記不揮発性メモリの物理アドレスを指定しない第1タイプのインタフェースを使用してリードアクセスされる一つ以上の第1領域と、前記ホストが前記不揮発性メモリの物理アドレスの一部または全体を指定する第2タイプのインタフェースを使用してリードアクセスされる一つ以上の第2領域とを含み、
前記ホストからリード要求を受信することと、
前記受信したリード要求が前記一つ以上の第1領域の一つの第1領域を示す第1の識別子を含む場合、前記第1タイプのインタフェースを選択する動作と、前記受信したリード要求から論理アドレスを取得する動作と、前記取得した論理アドレスに対応する物理アドレスを、論理アドレスそれぞれと前記一つの第1領域の物理アドレスそれぞれとの間のマッピングを管理する論理物理アドレス変換テーブルから取得する動作と、取得した物理アドレスに基づいて、前記一つの第1領域からデータをリードする動作とを実行することと、
前記受信したリード要求が前記一つ以上の第2領域の一つの第2領域を示す第2の識別子を含む場合、前記第2タイプのインタフェースを選択する動作と、前記受信したリード要求から前記一つの第2領域の物理アドレスの一部または全てを指定する物理アドレス情報を取得する動作と、前記取得した物理アドレス情報に基づいて、前記一つの第2領域からデータをリードする動作とを実行することとを具備する制御方法。 - 前記一つ以上の第1領域は、オペレーティングシステムをブート可能なブータブル領域を含む請求項10記載の制御方法。
- 前記第1タイプのインタフェースにおいて前記ホストによって指定される前記論理アドレスは論理ブロックアドレスである請求項10記載の制御方法。
- ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリを論理的に分割することによって得られる複数の領域を管理し、前記複数の領域は少なくとも第1領域と第2領域とを含み、
前記ホストから前記第1領域を示す第1の識別子を含むリード要求を受信した場合、前記受信したリード要求から論理アドレスを取得し、前記取得した論理アドレスに対応する物理アドレスを、論理アドレスそれぞれと前記第1領域の物理アドレスそれぞれとの間のマッピングを管理する論理物理アドレス変換テーブルから取得し、取得した物理アドレスに基づいて、前記第1領域からデータをリードし、
前記ホストから前記第2領域を示す第2の識別子を含むリード要求を受信した場合、前記受信したリード要求から前記第2領域の物理アドレスの一部または全てを指定する物理アドレス情報を取得し、前記取得した物理アドレス情報に基づいて、前記第2領域からデータをリードするように構成されている、メモリシステム。 - 前記第1領域は、オペレーティングシステムをブート可能なブータブル領域を含む請求項13記載のメモリシステム。
- 前記第1の識別子を含む前記リード要求に含まれる論理アドレスは、論理ブロックアドレスである請求項13記載のメモリシステム。
Priority Applications (10)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017208115A JP2019079464A (ja) | 2017-10-27 | 2017-10-27 | メモリシステムおよび制御方法 |
US15/984,703 US10552336B2 (en) | 2017-10-27 | 2018-05-21 | Memory system and method for controlling nonvolatile memory |
TW107122911A TWI689817B (zh) | 2017-10-27 | 2018-07-03 | 記憶體系統及控制方法 |
TW109105524A TWI791140B (zh) | 2017-10-27 | 2018-07-03 | 記憶體系統 |
TW111150687A TW202331530A (zh) | 2017-10-27 | 2018-07-03 | 記憶體系統 |
CN202310947639.XA CN116909941A (zh) | 2017-10-27 | 2018-07-13 | 存储器***及控制非易失性存储器的方法 |
CN201810768120.4A CN109726139B (zh) | 2017-10-27 | 2018-07-13 | 存储器***及控制方法 |
US16/725,094 US11347655B2 (en) | 2017-10-27 | 2019-12-23 | Memory system and method for controlling nonvolatile memory |
US17/689,787 US11954043B2 (en) | 2017-10-27 | 2022-03-08 | Memory system and method for controlling nonvolatile memory |
US18/593,823 US20240202135A1 (en) | 2017-10-27 | 2024-03-01 | Memory system and method for controlling nonvolatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017208115A JP2019079464A (ja) | 2017-10-27 | 2017-10-27 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019079464A true JP2019079464A (ja) | 2019-05-23 |
Family
ID=66245534
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017208115A Pending JP2019079464A (ja) | 2017-10-27 | 2017-10-27 | メモリシステムおよび制御方法 |
Country Status (4)
Country | Link |
---|---|
US (4) | US10552336B2 (ja) |
JP (1) | JP2019079464A (ja) |
CN (2) | CN109726139B (ja) |
TW (3) | TWI791140B (ja) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI678618B (zh) * | 2018-06-22 | 2019-12-01 | 慧榮科技股份有限公司 | 快閃記憶裝置的命名空間操作方法及裝置 |
US10853309B2 (en) | 2018-08-13 | 2020-12-01 | Micron Technology, Inc. | Fuseload architecture for system-on-chip reconfiguration and repurposing |
JP7155028B2 (ja) * | 2019-01-29 | 2022-10-18 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP2021034091A (ja) * | 2019-08-29 | 2021-03-01 | キオクシア株式会社 | メモリシステムおよび制御方法 |
US10963396B1 (en) * | 2019-09-17 | 2021-03-30 | Micron Technology, Inc. | Memory system for binding data to a memory namespace |
CN111045954B (zh) * | 2019-11-29 | 2023-08-08 | 北京航空航天大学青岛研究院 | 基于nand-spin的存内计算加速方法 |
CN113495869B (zh) * | 2020-03-20 | 2024-04-26 | 华为技术有限公司 | 文件***空间的调整方法、装置和电子设备 |
US11550482B2 (en) * | 2020-04-09 | 2023-01-10 | Synaptics Incorporated | Page-based memory access control |
CN111294247B (zh) * | 2020-05-13 | 2020-09-18 | 广东睿江云计算股份有限公司 | 一种存储区域的QoS分配方法及*** |
US11550727B2 (en) * | 2020-06-18 | 2023-01-10 | Micron Technology, Inc. | Zone-aware memory management in memory subsystems |
TWI738390B (zh) * | 2020-06-19 | 2021-09-01 | 群聯電子股份有限公司 | 資料保護方法、記憶體儲存裝置及記憶體控制電路單元 |
US12007887B2 (en) * | 2021-05-25 | 2024-06-11 | SK Hynix Inc. | Method and system for garbage collection |
US11954350B2 (en) | 2021-05-25 | 2024-04-09 | SK Hynix Inc. | Storage device and method of operating the same |
US11733927B2 (en) * | 2021-11-30 | 2023-08-22 | Microsoft Technology Licensing, Llc | Hybrid solid-state drive |
US11822813B2 (en) | 2021-12-28 | 2023-11-21 | Samsung Electronics Co., Ltd. | Storage device, operation method of storage device, and storage system using the same |
US11687447B1 (en) * | 2022-01-04 | 2023-06-27 | Silicon Motion, Inc. | Method and apparatus for performing access control of memory device with aid of additional physical address information |
Family Cites Families (48)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6883063B2 (en) | 1998-06-30 | 2005-04-19 | Emc Corporation | Method and apparatus for initializing logical objects in a data storage system |
US6804674B2 (en) | 2001-07-20 | 2004-10-12 | International Business Machines Corporation | Scalable Content management system and method of using the same |
US7512957B2 (en) | 2004-12-03 | 2009-03-31 | Microsoft Corporation | Interface infrastructure for creating and interacting with web services |
US7315917B2 (en) | 2005-01-20 | 2008-01-01 | Sandisk Corporation | Scheduling of housekeeping operations in flash memory systems |
US7934049B2 (en) * | 2005-09-14 | 2011-04-26 | Sandisk Corporation | Methods used in a secure yet flexible system architecture for secure devices with flash mass storage memory |
US7769978B2 (en) * | 2005-12-21 | 2010-08-03 | Sandisk Corporation | Method and system for accessing non-volatile storage devices |
WO2007073538A2 (en) * | 2005-12-21 | 2007-06-28 | Sandisk Corporation | Non-volatile memories and methods with data alignment in a directly mapped file storage system |
US20080172519A1 (en) * | 2007-01-11 | 2008-07-17 | Sandisk Il Ltd. | Methods For Supporting Readydrive And Readyboost Accelerators In A Single Flash-Memory Storage Device |
US8959280B2 (en) | 2008-06-18 | 2015-02-17 | Super Talent Technology, Corp. | Super-endurance solid-state drive with endurance translation layer (ETL) and diversion of temp files for reduced flash wear |
WO2009153982A1 (ja) * | 2008-06-20 | 2009-12-23 | パナソニック株式会社 | 複数区分型不揮発性記憶装置およびシステム |
US9323658B2 (en) * | 2009-06-02 | 2016-04-26 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Multi-mapped flash RAID |
US8688894B2 (en) | 2009-09-03 | 2014-04-01 | Pioneer Chip Technology Ltd. | Page based management of flash storage |
US8255661B2 (en) | 2009-11-13 | 2012-08-28 | Western Digital Technologies, Inc. | Data storage system comprising a mapping bridge for aligning host block size with physical block size of a data storage device |
US20110137966A1 (en) * | 2009-12-08 | 2011-06-09 | Netapp, Inc. | Methods and systems for providing a unified namespace for multiple network protocols |
JP5589205B2 (ja) | 2011-02-23 | 2014-09-17 | 株式会社日立製作所 | 計算機システム及びデータ管理方法 |
US20120246385A1 (en) * | 2011-03-22 | 2012-09-27 | American Megatrends, Inc. | Emulating spi or 12c prom/eprom/eeprom using flash memory of microcontroller |
US20130191580A1 (en) * | 2012-01-23 | 2013-07-25 | Menahem Lasser | Controller, System, and Method for Mapping Logical Sector Addresses to Physical Addresses |
JP5687639B2 (ja) | 2012-02-08 | 2015-03-18 | 株式会社東芝 | コントローラ、データ記憶装置及びプログラム |
JP5597666B2 (ja) * | 2012-03-26 | 2014-10-01 | 株式会社東芝 | 半導体記憶装置、情報処理システムおよび制御方法 |
US9075710B2 (en) * | 2012-04-17 | 2015-07-07 | SanDisk Technologies, Inc. | Non-volatile key-value store |
CN103176752A (zh) | 2012-07-02 | 2013-06-26 | 晶天电子(深圳)有限公司 | 带有耐用转换层及临时文件转移功能从而实现闪速存储器磨损降低的超耐用固态驱动器 |
CN102789427B (zh) | 2012-07-17 | 2015-11-25 | 威盛电子股份有限公司 | 数据储存装置与其操作方法 |
US9575884B2 (en) * | 2013-05-13 | 2017-02-21 | Qualcomm Incorporated | System and method for high performance and low cost flash translation layer |
US20150186259A1 (en) | 2013-12-30 | 2015-07-02 | Sandisk Technologies Inc. | Method and apparatus for storing data in non-volatile memory |
US10812313B2 (en) * | 2014-02-24 | 2020-10-20 | Netapp, Inc. | Federated namespace of heterogeneous storage system namespaces |
KR20150106778A (ko) | 2014-03-12 | 2015-09-22 | 삼성전자주식회사 | 메모리 시스템 및 메모리 시스템의 제어 방법 |
US9959203B2 (en) * | 2014-06-23 | 2018-05-01 | Google Llc | Managing storage devices |
US20160041760A1 (en) | 2014-08-08 | 2016-02-11 | International Business Machines Corporation | Multi-Level Cell Flash Memory Control Mechanisms |
KR20160027805A (ko) | 2014-09-02 | 2016-03-10 | 삼성전자주식회사 | 비휘발성 메모리 장치를 위한 가비지 컬렉션 방법 |
US9977734B2 (en) * | 2014-12-11 | 2018-05-22 | Toshiba Memory Corporation | Information processing device, non-transitory computer readable recording medium, and information processing system |
JP6406707B2 (ja) | 2015-03-23 | 2018-10-17 | 東芝メモリ株式会社 | 半導体記憶装置 |
US20160321010A1 (en) | 2015-04-28 | 2016-11-03 | Kabushiki Kaisha Toshiba | Storage system having a host directly manage physical data locations of storage device |
JP2017027388A (ja) | 2015-07-23 | 2017-02-02 | 株式会社東芝 | メモリシステムおよび不揮発性メモリの制御方法 |
US10102138B2 (en) * | 2015-10-22 | 2018-10-16 | Western Digital Technologies, Inc. | Division of data storage in single-storage device architecture |
US10705952B2 (en) * | 2015-11-04 | 2020-07-07 | Sandisk Technologies Llc | User space data storage management |
US9996473B2 (en) * | 2015-11-13 | 2018-06-12 | Samsung Electronics., Ltd | Selective underlying exposure storage mapping |
US9990304B2 (en) | 2015-11-13 | 2018-06-05 | Samsung Electronics Co., Ltd | Multimode storage management system |
US9946642B2 (en) | 2015-11-13 | 2018-04-17 | Samsung Electronics Co., Ltd | Distributed multimode storage management |
US9940028B2 (en) * | 2015-11-13 | 2018-04-10 | Samsung Electronics Co., Ltd | Multimode storage device |
TWI595492B (zh) | 2016-03-02 | 2017-08-11 | 群聯電子股份有限公司 | 資料傳輸方法、記憶體控制電路單元與記憶體儲存裝置 |
JP6444917B2 (ja) * | 2016-03-08 | 2018-12-26 | 東芝メモリ株式会社 | ストレージシステム、情報処理システムおよび制御方法 |
JP6523193B2 (ja) | 2016-03-08 | 2019-05-29 | 東芝メモリ株式会社 | ストレージシステム、情報処理システムおよび制御方法 |
US20180173619A1 (en) | 2016-12-21 | 2018-06-21 | Sandisk Technologies Llc | System and Method for Distributed Logical to Physical Address Mapping |
JP6709180B2 (ja) * | 2017-02-28 | 2020-06-10 | キオクシア株式会社 | メモリシステムおよび制御方法 |
US10338842B2 (en) * | 2017-05-19 | 2019-07-02 | Samsung Electronics Co., Ltd. | Namespace/stream management |
US10592408B2 (en) | 2017-09-13 | 2020-03-17 | Intel Corporation | Apparatus, computer program product, system, and method for managing multiple regions of a memory device |
JP6785205B2 (ja) | 2017-09-21 | 2020-11-18 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP6982468B2 (ja) | 2017-10-27 | 2021-12-17 | キオクシア株式会社 | メモリシステムおよび制御方法 |
-
2017
- 2017-10-27 JP JP2017208115A patent/JP2019079464A/ja active Pending
-
2018
- 2018-05-21 US US15/984,703 patent/US10552336B2/en active Active
- 2018-07-03 TW TW109105524A patent/TWI791140B/zh active
- 2018-07-03 TW TW107122911A patent/TWI689817B/zh active
- 2018-07-03 TW TW111150687A patent/TW202331530A/zh unknown
- 2018-07-13 CN CN201810768120.4A patent/CN109726139B/zh active Active
- 2018-07-13 CN CN202310947639.XA patent/CN116909941A/zh active Pending
-
2019
- 2019-12-23 US US16/725,094 patent/US11347655B2/en active Active
-
2022
- 2022-03-08 US US17/689,787 patent/US11954043B2/en active Active
-
2024
- 2024-03-01 US US18/593,823 patent/US20240202135A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
TWI689817B (zh) | 2020-04-01 |
TW202024926A (zh) | 2020-07-01 |
CN109726139A (zh) | 2019-05-07 |
US11347655B2 (en) | 2022-05-31 |
US11954043B2 (en) | 2024-04-09 |
US20200133879A1 (en) | 2020-04-30 |
US20220197817A1 (en) | 2022-06-23 |
US20190129862A1 (en) | 2019-05-02 |
TW202331530A (zh) | 2023-08-01 |
US20240202135A1 (en) | 2024-06-20 |
TWI791140B (zh) | 2023-02-01 |
CN109726139B (zh) | 2023-08-18 |
US10552336B2 (en) | 2020-02-04 |
TW201917584A (zh) | 2019-05-01 |
CN116909941A (zh) | 2023-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6785205B2 (ja) | メモリシステムおよび制御方法 | |
TWI689817B (zh) | 記憶體系統及控制方法 | |
JP6982468B2 (ja) | メモリシステムおよび制御方法 | |
JP6785204B2 (ja) | メモリシステムおよび制御方法 | |
JP2020046963A (ja) | メモリシステムおよび制御方法 | |
JP7013546B2 (ja) | メモリシステム | |
JP7167295B2 (ja) | メモリシステムおよび制御方法 | |
JP7204020B2 (ja) | 制御方法 | |
JP7490714B2 (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 |