JP2019008730A - メモリシステム - Google Patents
メモリシステム Download PDFInfo
- Publication number
- JP2019008730A JP2019008730A JP2017126616A JP2017126616A JP2019008730A JP 2019008730 A JP2019008730 A JP 2019008730A JP 2017126616 A JP2017126616 A JP 2017126616A JP 2017126616 A JP2017126616 A JP 2017126616A JP 2019008730 A JP2019008730 A JP 2019008730A
- Authority
- JP
- Japan
- Prior art keywords
- area
- data
- block
- logical
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- 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
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- 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
- G06F3/0664—Virtualisation aspects at device level, e.g. emulation of a storage device or system
-
- 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- 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/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- 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/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- 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/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
-
- 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/40—Specific encoding of data in memory or cache
- G06F2212/403—Error protection encoding, e.g. using parity or ECC codes
-
- 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/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- 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/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- 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/7205—Cleaning, compaction, garbage collection, erase control
-
- 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/7207—Details relating to flash memory management management of metadata or control data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Detection And Correction Of Errors (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】ある領域に格納されているデータを他の領域の論理アドレスを通して利用することができるメモリシステムを実現する。
【解決手段】メモリシステムは、不揮発性メモリの第1の領域に対応する第1の論理物理アドレス変換テーブルの内容を、不揮発性メモリの第2の領域に対応する第2の論理物理アドレス変換テーブルにコピーする。メモリシステムは、第2の領域の論理アドレスを指定するリード要求に応じて、第2の論理物理アドレス変換テーブルに基づいて、第1のデータの一部を第1の領域から読み出して前記ホスト計算機に返す。メモリシステムは、第1の領域に割り当てられている前記不揮発性メモリの第1のブロック群からリフレッシュ条件を満たすブロックを検出し、検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す。
【選択図】図6
【解決手段】メモリシステムは、不揮発性メモリの第1の領域に対応する第1の論理物理アドレス変換テーブルの内容を、不揮発性メモリの第2の領域に対応する第2の論理物理アドレス変換テーブルにコピーする。メモリシステムは、第2の領域の論理アドレスを指定するリード要求に応じて、第2の論理物理アドレス変換テーブルに基づいて、第1のデータの一部を第1の領域から読み出して前記ホスト計算機に返す。メモリシステムは、第1の領域に割り当てられている前記不揮発性メモリの第1のブロック群からリフレッシュ条件を満たすブロックを検出し、検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す。
【選択図】図6
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
SSDのようなメモリシステムにおいては、ある領域に格納されているデータを他の領域にコピーすることが必要とされる場合がある。
しかし、このようなコピーには比較的多くの時間を要する場合が多い。
本発明が解決しようとする課題は、ある領域に格納されているデータを他の領域の論理アドレスを通して利用することができるメモリシステムを提供することである。
実施形態によれば、ホスト計算機に接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記不揮発性メモリ内の複数の領域を管理する。前記複数の領域は、他の領域から参照される第1のデータを格納している第1の領域と、前記第1のデータを参照する第2の領域とを含む。前記コントローラは、前記ホスト計算機からの要求に応じて、前記第1の領域に対応する第1の論理物理アドレス変換テーブルの内容を、前記第2の領域に対応する第2の論理物理アドレス変換テーブルにコピーする。前記コントローラは、前記ホスト計算機からの前記第2の領域の論理アドレスを指定するリード要求に応じて、前記第2の論理物理アドレス変換テーブルに基づいて、前記第1のデータの一部を前記第1の領域から読み出して前記ホスト計算機に返す。前記コントローラは、前記ホスト計算機からの前記第2の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第2のデータを前記第2の領域に書き込むと共に、前記第2のデータが書き込まれた前記第2の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第2の論理物理アドレス変換テーブルを更新する。前記コントローラは、前記第1の領域に割り当てられている前記不揮発性メモリの第1のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す。
以下、図面を参照して、実施形態を説明する。
図1は、一実施形態に係るメモリシステムが適用可能な計算機の構成例を示す。この計算機は、サーバ、パーソナルコンピュータのような、様々なプログラムを実行する情報処理装置である。以下では、この計算機が、サーバ100として実現されている場合を想定する。
サーバ100は、ネットワークを介して複数のユーザ(複数の端末)に対して様々なサービスを提供する計算機(「物理サーバ」とも云う)である。
このサーバ100は、データセンター内に設置されていてもよい。このサーバ100によって提供されるサービスの例には、仮想サーバのようなインフラストラクチャを多数のユーザ(多数のテナント)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
サーバ100は、複数の仮想マシンが実行される仮想化環境を含み、これら複数の仮想マシンがこのサーバ100上で実行される。図1では、3つの仮想マシンVM1、VM2、VM3がサーバ100上で実行される場合が例示されている。
これら仮想マシンVM1、VM2、VM3は、仮想マシンVM1、VM2、VM3にそれぞれ対応するユーザA、ユーザB、ユーザCに対して各種サービスを提供するように構成された仮想サーバとして機能する。
これら仮想マシンVM1、VM2、VM3は、サーバ100内の物理リソース101を共有する。物理リソース101は、通常、一つ以上の物理CPU、一つ以上の物理メモリモジュールを含む物理メモリ、一つ以上の物理ストレージ、一つ以上の物理ネットワークインタフェースカード(物理NIC)、等を含む。各物理ストレージは、NAND型フラッシュメモリのような不揮発性メモリを記憶媒体として利用するストレージデバイスであってもよい。このストレージデバイスは、ソリッドステートドライブ(SSD)であってもよいし、不揮発性メモリを各々が含む複数のストレージを含むフラッシュアレイであってもよい。
各仮想マシンVMは、仮想CPU、仮想メモリ、仮想ストレージ(仮想ディスクとも云う)、および仮想NICによって構成されてもよい。
図1においては、ユーザAに提供される仮想マシンVM1が、仮想CPU201、仮想メモリ202、仮想ストレージ203、仮想NIC204を含み、ユーザBに提供される仮想マシンVM2が、仮想CPU211、仮想メモリ212、仮想ストレージ213、仮想NIC214を含み、ユーザCに提供される仮想マシンVM3が、仮想CPU221、仮想メモリ222、仮想ストレージ223、仮想NIC224を含むケースが例示されている。
仮想マシン(仮想サーバ)を利用することを望むユーザは、利用したい仮想マシン(仮想サーバ)の性能、プロパティ等を指定することができる。より詳しくは、ユーザは、所望の性能(例えば、CPUスピード、CPUコア数)、所望のメモリ(DRAM)容量、所望のネットワーク性能(例えばNICの数)、所望のストレージ容量、使用すべきオペレーティングシステムの種類、使用すべきアプリケーションプログラムの種類、等を、指定することができる。
例えば、仮想マシンVM1の作成時にユーザAがある種類のオペレーティングシステムを選択したならば、この選択されたオペレーティングシステムのバイナリイメージが仮想マシンVM1用の仮想ストレージ203にインストールされてもよい。
しかし、通常、仮想ストレージ203へのオペレーティングシステムのインストールには比較的多くの時間を要する。
したがって、サーバ100においては、何種類かの仮想マシンイメージがテンプレートとして予め用意されていてもよい。
図1においては、ある種類のオペレーティングシステム(OS#1)が仮想マシンイメージA(つまりテンプレート)としてインストールされたディスク115と、別の種類のオペレーティングシステム(OS#2)が仮想マシンイメージB(つまり別のテンプレート)としてインストールされたディスク116とが予め用意されているケースが例示されている。
ユーザAが仮想マシンイメージAを選択したならば、オペレーティングシステム(OS#1)のバイナリイメージ、つまりオペレーティングシステム(OS#1)のインストール・イメージが、ディスク115から仮想マシンVM1の仮想ストレージ203にコピーされる。
仮想マシンイメージAは、オペレーティングシステム(OS#1)のインストール・イメージのみならず、幾つかのアプリケーションプログラム(APL#1、#2、#3)のインストール・イメージを含んでいてもよい。
仮想マシンイメージBも、オペレーティングシステム(OS#2)のインストール・イメージのみならず、幾つかのアプリケーションプログラム(APL#4、#5、#6)のインストール・イメージを含んでいてもよい。
各ユーザは、テンプレートとして用意されている複数の仮想マシンイメージ(ここでは、仮想マシンイメージA、B)から任意の仮想マシンイメージを選択することができる。
例えば、もしユーザAによって仮想マシンイメージAが選択されたならば、仮想マシンイメージAのクローン(オペレーティングシステム(OS#1)、アプリケーションプログラム(APL#1、#2、#3))がディスク115から仮想マシンVM1の仮想ストレージ203にコピーされる。仮想ストレージ203にコピーされたオペレーティングシステム(OS#1)は、仮想マシンVM1用のゲストオペレーティングシステムとして実行される。換言すれば、仮想マシンVM1は、仮想ストレージ203をアクセスして、仮想ストレージ203内のオペレーティングシステム(OS#1)を実行する。
同様に、もしユーザBによって仮想マシンイメージAが選択されたならば、仮想マシンイメージAのクローン(オペレーティングシステム(OS#1)、アプリケーションプログラム(APL#1、#2、#3))がディスク115から仮想マシンVM2の仮想ストレージ213にコピーされる。仮想ストレージ213にコピーされたオペレーティングシステム(OS#1)は、仮想マシンVM2用のゲストオペレーティングシステムとして実行される。換言すれば、仮想マシンVM2は、仮想ストレージ213をアクセスして、仮想ストレージ213内のオペレーティングシステム(OS#1)を実行する。
もし、ユーザCによって仮想マシンイメージBが選択されたならば、仮想マシンイメージBのクローン(オペレーティングシステム(OS#2)、アプリケーションプログラム(APL#4、#5、#6))がディスク116から仮想マシンVM3の仮想ストレージ223にコピーされる。仮想ストレージ223にコピーされたオペレーティングシステム(OS#2)は、仮想マシンVM3用のゲストオペレーティングシステムとして実行される。換言すれば、仮想マシンVM3は、仮想ストレージ223をアクセスして、仮想ストレージ223内のオペレーティングシステム(OS#2)を実行する。
このように、仮想マシンイメージのクローンを仮想ストレージにコピーするという仕組みを利用することにより、オペレーティングシステムを仮想ストレージに実際にインストールする作業を行う場合よりも短い時間で仮想マシンVMのセットアップを完了することが可能となる。
しかし、通常、各仮想マシンイメージは、例えば数10Gバイトといった比較的大きなサイズを有する。したがって、仮想マシンイメージのクローンをディスク115(またはディスク116)から仮想ストレージにコピーする処理にもある程度の時間を要する。
このため、あるユーザが仮想マシンのレンタルサービスを契約してからこの仮想マシンが実際に利用できるようになるまでの時間をさらに短縮するための新たな機能が要求される。
そこで、図2に示されているように、各仮想マシンがアクセス先切り換え部を含む構成が、図1のサーバ100に適用されてもよい。
図2のサーバ100の構成においては、仮想マシンVM1は、アクセス先切り換え部205を含む。同様に、仮想マシンVM2は、アクセス先切り換え部215を含み、仮想マシンVM3は、アクセス先切り換え部225を含む。
各アクセス先切り換え部は、対応する仮想CPUによって要求されたデータが対応する仮想ストレージに存在しない場合には、この仮想ストレージの代わりに、ディスク115またはディスク116をアクセスする。
例えば、仮想マシンVM1においては、仮想ストレージ203内にアクセス対象のデータ(例えば、オペレーティングシステム(OS#1)のバイナリイメージ)が存在しない場合には、アクセス先切り換え部205は、仮想CPU201からのリード要求に応じて、ディスク115からアクセス対象のデータ(例えば、オペレーティングシステム(OS#1)のバイナリイメージの一部)を読み出す。
これにより、ディスク115内のデータを仮想ストレージにコピーすること無く、ディスク115内のデータを利用することが可能となる。換言すれば、オペレーティングシステムのバイナリイメージを仮想ストレージにコピーすること無く、仮想マシンの利用を即座に開始することが可能となる。
本実施形態においては、ディスク115(またはディスク116)と、仮想ストレージそれぞれに対応する複数の領域と、アクセス先切り換え部に対応する機能とを、サーバ100に接続されたメモリシステムによって提供することができる。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ソリッドステートドライブ(SSD)であってもよいし、不揮発性メモリを各々が含む複数のストレージを含むフラッシュアレイであってもよい。以下では、この例に限定されないが、メモリシステムが、図3に示されているように、例えば、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている場合を想定する。
このSSD3は、図2のサーバ100にこのサーバ100の物理ストレージとして適用される。サーバ100は、SSD3に対してリード要求、ライト要求、他の様々な要求を送出するホスト計算機(「ホスト」または「ホストデバイス」とも云う)として機能する。
SSD3は、不揮発性メモリを含み、この不揮発性メモリ内の複数の領域を管理する。例えば、SSD3においては、不揮発性メモリは、領域#1、領域#2、…領域#31、領域#32、領域#33に論理的に分割されてもよい。
領域#1は、他の領域によって参照されるデータ(オリジナルデータ)を格納するための領域である。
オリジナルデータは、上述の仮想マシンイメージAであってもよい。この場合、この領域#1においては、少なくとも、オペレーティングシステム(OS#1)のバイナリイメージが格納される。このオペレーティングシステム(OS#1)は、ある一つ以上の仮想マシン用のゲストオペレーティングシステムとして利用される。さらに、アプリケーションプログラム(APL#1、#2、#3)のバイナリイメージも領域#1に格納されてもよい。
領域#2も、他の領域によって参照される別のデータ(別のオリジナルデータ)を格納するための領域である。
別のオリジナルデータは、上述の仮想マシンイメージBであってもよい。この場合、この領域#2においては、少なくとも、オペレーティングシステム(OS#2)のバイナリイメージが格納される。このオペレーティングシステム(OS#2)も、ある一つ以上の仮想マシン用のゲストオペレーティングシステムとして利用される。さらに、アプリケーションプログラム(APL#4、#5、#6)のバイナリイメージも領域#2に格納されてもよい。
領域#31は、領域#1のデータ(オリジナルデータ)を参照する領域である。
領域#1がオペレーティングシステム(OS#1)をオリジナルデータとして格納している場合には、領域#31は、オペレーティングシステム(OS#1)を実行する仮想マシンVM1によってアクセスされる仮想ストレージ(仮想ディスク)として利用される。
領域#1がオペレーティングシステム(OS#1)およびアプリケーションプログラム(APL#1、#2、#3)をオリジナルデータとして格納している場合には、領域#31は、オペレーティングシステム(OS#1)およびアプリケーションプログラム(APL#1、#2、#3)を実行する仮想マシンVM1によってアクセスされる仮想ストレージ(仮想ディスク)として利用される。
領域#32も、領域#1のデータ(オリジナルデータ)を参照する領域である。
領域#1がオペレーティングシステム(OS#1)をオリジナルデータとして格納している場合には、領域#32は、オペレーティングシステム(OS#1)を実行する仮想マシンVM2によってアクセスされる仮想ストレージ(仮想ディスク)として利用される。
領域#1がオペレーティングシステム(OS#1)およびアプリケーションプログラム(APL#1、#2、#3)をオリジナルデータとして格納している場合には、領域#32は、オペレーティングシステム(OS#1)およびアプリケーションプログラム(APL#1、#2、#3)を実行する仮想マシンVM2によってアクセスされる仮想ストレージ(仮想ディスク)として利用される。
このように、領域#1に存在するオリジナルデータ(テンプレート)は、他の複数の領域(ここでは、領域#31、領域#32)によって共有可能である。
領域#33は、領域#2のデータ(別のオリジナルデータ)を参照する領域である。
領域#2がオペレーティングシステム(OS#2)を別のオリジナルデータとして格納している場合には、領域#33は、オペレーティングシステム(OS#2)を実行する仮想マシンVM3によってアクセスされる仮想ストレージ(仮想ディスク)として利用される。
領域#2がオペレーティングシステム(OS#2)およびアプリケーションプログラム(APL#4、#5、#6)をオリジナルデータとして格納している場合には、領域#33は、オペレーティングシステム(OS#2)およびアプリケーションプログラム(APL#4、#5、#6)を実行する仮想マシンVM3によってアクセスされる仮想ストレージ(仮想ディスク)として利用される。
これら複数の領域(領域#1、領域#2、…領域#31、領域#32、領域#33)には、複数の論理アドレス空間がそれぞれ割り当てられる。論理アドレスとしては、論理ブロックアドレス(LBA)が使用されてもよい。
仮想マシンVM1は、領域#31の論理アドレス空間を通して領域#31をアクセスする。仮想マシンVM2は、領域#32の論理アドレス空間を通して領域#32をアクセスする。仮想マシンVM3は、領域#33の論理アドレス空間を通して領域#33をアクセスする。
各領域は、ネームスペースによって実現されてもよい。この場合、NAND型フラッシュメモリのような不揮発性メモリを論理的に複数の領域に分割するために、複数のネームスペースが利用される。各ネームスペースは、不揮発性メモリ内の一種の領域(記憶領域)であり、論理アドレス空間(LBA空間)が割り当てられる。
個々のネームスペースは、これらネームスペースの識別子によって識別される。各領域がネームスペースによって実現された場合、各領域には、LBA範囲(LBA0〜LBAn−1)が割り当てられる。LBA範囲のサイズ(つまりLBAの数)は、領域(ネームスペース)毎に可変である。各LBA範囲は、LBA0から始まる。
図4は、複数の領域とこれら領域に対応する論理アドレス空間(LBA空間)とこれら領域に対応するルックアップテーブルとの関係を示す。
ネームスペースNS#1に対応する領域#1には、0〜n−1の論理アドレス空間(LBA空間)A1が割り当てられている。ネームスペースNS#2に対応する領域#2には、0〜n−1の論理アドレス空間(LBA空間)A2が割り当てられている。ネームスペースNS#31に対応する領域#31には、0〜n−1の論理アドレス空間(LBA空間)A31が割り当てられている。ネームスペースNS#32に対応する領域#32には、0〜n−1の論理アドレス空間(LBA空間)A32が割り当てられている。ネームスペースNS#33に対応する領域#33には、0〜n−1の論理アドレス空間(LBA空間)A33が割り当てられている。
本実施形態では、ルックアップテーブルLUTは、領域毎に、つまりネームスペース毎に分割されている。つまり、領域#1、領域#2、…領域#31、領域#32、領域#33にそれぞれ対応するルックアップテーブルLUT#1、LUT#2、…LUT#31、LUT#32、LUT#33が、SSD3によって管理される。
ルックアップテーブルLUT#1は、領域#1の論理アドレス(LBA)それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブル(logical−to−physical address translation table)である。このルックアップテーブルLUT#1は、領域#1の論理アドレス(LBA)それぞれと領域#1に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
領域#1のある論理アドレス(あるLBA)を指定するライト要求(ライトコマンド)をサーバ100(ホスト計算機)から受信した場合、SSD3は、書き込むべきデータ(ライトデータ)を領域#1に書き込む。そして、SSD3は、ライトデータが書き込まれた領域#1内の物理記憶位置を示す物理アドレスがこのLBAにマッピングされるように、ルックアップテーブルLUT#1を更新する。
領域#1のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(ホスト計算機)から受信した場合、SSD3は、ルックアップテーブルLUT#1を参照してこのLBAに対応する物理アドレスをルックアップテーブルLUT#1から取得する。そして、SSD3は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
また、ルックアップテーブルLUT#1は、領域#1のフリースペースを増やすためのガベージコレクションにおいても利用される。領域#1のガベージコレクションにおいては、SSD3は、この領域#1に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の1以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域#1に割り当てられた別のブロック(フリーブロック)にコピーする。そして、SSD3は、コピーされたデータに対応するLBAそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルLUT#1を更新する。
ルックアップテーブルLUT#2は、領域#2の論理アドレス(LBA)それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルLUT#2は、領域#2の論理アドレス(LBA)それぞれと領域#2に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
領域#2のある論理アドレス(あるLBA)を指定するライト要求(ライトコマンド)をサーバ100(ホスト計算機)から受信した場合、SSD3は、書き込むべきデータ(ライトデータ)を領域#2に書き込む。そして、SSD3は、ライトデータが書き込まれた領域#2内の物理記憶位置を示す物理アドレスがこのLBAにマッピングされるように、ルックアップテーブルLUT#2を更新する。
領域#2のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(ホスト計算機)から受信した場合、SSD3は、ルックアップテーブルLUT#2を参照してこのLBAに対応する物理アドレスをルックアップテーブルLUT#2から取得する。そして、SSD3は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
また、ルックアップテーブルLUT#2は、領域#2のフリースペースを増やすためのガベージコレクションにおいても利用される。領域#2のガベージコレクションにおいては、SSD3は、この領域#2に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の1以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域#2に割り当てられた別のブロック(フリーブロック)にコピーする。そして、SSD3は、コピーされたデータに対応するLBAそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルLUT#2を更新する。
ルックアップテーブルLUT#31は、領域#31の論理アドレス(LBA)それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルLUT#31は、領域#31の論理アドレス(LBA)それぞれと領域#31に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
領域#31のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM1)から受信した場合、SSD3は、ルックアップテーブルLUT#31を参照してこのLBAに対応する物理アドレスをルックアップテーブルLUT#31から取得する。そして、SSD3は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
本実施形態では、仮想マシンVM1内の上述のアクセス先切り換え部205を実現するために、仮想マシンVM1の作成時に、ルックアップテーブルLUT#1の内容がルックアップテーブルLUT#31にコピーされる。したがって、仮想マシンVM1の作成直後の初期状態においては、ルックアップテーブルLUT#31は、ルックアップテーブルLUT#1の内容と同じ内容を保持する。つまり、ルックアップテーブルLUT#31内の物理アドレスそれぞれは、領域#31内の物理記憶位置ではなく、領域#1内の物理記憶位置を指す。このため、領域#31の各論理アドレスへのリードアクセスは、領域#1へ向け直される。
したがって、領域#31のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(仮想マシンVM1)から受信した場合、SSD3は、ルックアップテーブルLUT#31に基づいて、オリジナルデータ(例えば、オペレーティングシステム(OS#1)の一部)を領域#1から読み出してサーバ100(仮想マシンVM1)に返す。したがって、領域#1内のオリジナルデータ(例えば、オペレーティングシステム(OS#1)等)を領域#31にコピーすること無く、領域#31の論理アドレス空間を通して領域#1内に格納されているオリジナルデータ全てを利用することが可能となる。
領域#31のある論理アドレス(あるLBA)を指定するライト要求(ライトコマンド)をサーバ100(ホスト計算機の仮想マシンVM1)から受信した場合、SSD3は、書き込むべきデータ(ライトデータ)を領域#31(領域#31に割り当てられたブロック)に書き込む。そして、SSD3は、ライトデータが書き込まれた領域#31内の物理記憶位置を示す物理アドレスがこのLBAにマッピングされるように、ルックアップテーブルLUT#31を更新する。
このように、領域#31へのデータ書き込みは、領域#1へ向け直されず、領域#31にデータが書き込まれる。したがって、領域#1内のオリジナルデータは更新されず、領域#31のデータのみが更新される。領域#1内のオリジナルデータは元の状態に維持され続ける。よって、たとえ領域#1内のオリジナルデータ(例えば、仮想マシンイメージのテンプレート)が複数のユーザによって参照(共有)されている場合であっても、あるユーザに対応する領域内のデータ更新が、他のユーザに対応する領域のデータに影響を与えてしまうという矛盾(問題)が生じることはない。
ルックアップテーブルLUT#31においては、この書き込まれたデータに対応する論理アドレスには領域#31内の物理記憶位置の物理アドレスがマッピングされる。したがって、この論理アドレスを指定する後続のリード要求は、領域#1へ向け直されず、領域#31からこの書き込まれたデータが読み出される。
したがって、領域#31に存在しないデータ(オリジナルデータ、例えば、オペレーティングシステム(OS#1))を領域#1から読み出すことができ、且つ、新たなライトデータを、またはオリジナルデータの一部を書き替えるための更新データを、領域#31に書き込むことができる。例えば、仮想マシンVM1によって実行されるオペレーティングシステム(OS#1)の一部(ファイル等)をアップデートする必要がある場合には、オペレーティングシステム(OS#1)の更新データ部分、つまり更新されたファイルが、領域#31に書き込まれる。また、仮想マシンVM1よって実行されるアプリケーションによって作成されたユーザデータも領域#31に書き込まれる。
また、領域#31にデータが書き込まれると、このデータに対応する論理アドレスには領域#31内の物理記憶位置の物理アドレスがマッピングされる。したがって、あるデータが領域#31に書き込まれた後にこのデータの論理アドレスを指定する後続のリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM1)から受信した場合、SSD3は、ルックアップテーブルLUT#31に基づいて、このデータを領域#31から読み出してサーバ100(仮想マシンVM1)に返す。よって、領域#31に新たに書き込まれたデータ、および領域#31内の更新されたデータを、領域#31から正しく読み出すことができる。
ルックアップテーブルLUT#31は、領域#31のフリースペースを増やすためのガベージコレクションにおいても利用される。領域#31のガベージコレクションにおいては、SSD3は、この領域#31に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の1以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域#31に割り当てられた別のブロック(フリーブロック)にコピーする。そして、SSD3は、コピーされたデータに対応するLBAそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルLUT#31を更新する。
ルックアップテーブルLUT#32は、領域#32の論理アドレス(LBA)それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルLUT#32は、領域#32の論理アドレス(LBA)それぞれと領域#32に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
領域#32のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM2)から受信した場合、SSD3は、ルックアップテーブルLUT#32を参照してこのLBAに対応する物理アドレスをルックアップテーブルLUT#32から取得する。そして、SSD3は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
仮想マシンVM2内の上述のアクセス先切り換え部215を実現するために、仮想マシンVM2の作成時には、ルックアップテーブルLUT#1の内容がルックアップテーブルLUT#32にコピーされる。したがって、仮想マシンVM2の初期状態においては、ルックアップテーブルLUT#32も、ルックアップテーブルLUT#1の内容と同じ内容を保持する。つまり、ルックアップテーブルLUT#32内の物理アドレスそれぞれは、領域#32内の物理記憶位置ではなく、領域#1内の物理記憶位置を指す。このため、領域#32へのリードアクセスは、領域#1へ向け直される。
したがって、領域#32のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM2)から受信した場合、SSD3は、ルックアップテーブルLUT#32に基づいて、オリジナルデータ(例えば、オペレーティングシステム(OS#1)の一部)を領域#1から読み出してサーバ100(仮想マシンVM2)に返す。したがって、領域#1内のオリジナルデータ(例えば、オペレーティングシステム(OS#1)等)を領域#32にコピーすること無く、領域#32の論理アドレス空間を通して領域#1内のオリジナルデータ全てを利用することが可能となる。
領域#32のある論理アドレス(あるLBA)を指定するライト要求(ライトコマンド)をサーバ100(ホスト計算機の仮想マシンVM1)から受信した場合、SSD3は、書き込むべきデータ(ライトデータ)を領域#32(領域#32に割り当てられたブロック)に書き込む。そして、SSD3は、ライトデータが書き込まれた領域#32内の物理記憶位置を示す物理アドレスがこのLBAにマッピングされるように、ルックアップテーブルLUT#32を更新する。
このように、領域#32へのデータ書き込みは、領域#1へ向け直されず、領域#32にデータが書き込まれる。ルックアップテーブルLUT#32においては、この書き込まれたデータに対応する論理アドレスには領域#32内の物理記憶位置の物理アドレスがマッピングされる。したがって、この論理アドレスを指定する後続のリード要求は、領域#1へ向け直されず、領域#32からこの書き込まれたデータが読み出される。
したがって、領域#32に存在しないデータ(オリジナルデータ、例えば、オペレーティングシステム(OS#1))を領域#1から読み出すことができ、且つ、新たなライトデータを、またはオリジナルデータの一部を書き替えるための更新データを、領域#32に書き込むことができる。例えば、仮想マシンVM2によって実行されるオペレーティングシステム(OS#1)の一部(ファイル等)をアップデートする必要がある場合には、オペレーティングシステム(OS#1)の更新データ部分、つまり更新されたファイルが、領域#32に書き込まれる。また、仮想マシンVM2よって実行されるアプリケーションによって作成されたユーザデータも領域#32に書き込まれる。
また、領域#32にデータが書き込まれると、このデータに対応する論理アドレスには領域#32内の物理記憶位置の物理アドレスがマッピングされる。したがって、あるデータが領域#32に書き込まれた後にこのデータの論理アドレスを指定する後続のリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM2)から受信した場合、SSD3は、ルックアップテーブルLUT#32に基づいて、このデータを領域#32から読み出してサーバ100(仮想マシンVM2)に返す。
ルックアップテーブルLUT#32は、領域#32のフリースペースを増やすためのガベージコレクションにおいても利用される。領域#32のガベージコレクションにおいては、SSD3は、この領域#32に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の1以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域#32に割り当てられた別のブロック(フリーブロック)にコピーする。そして、SSD3は、コピーされたデータに対応するLBAそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルLUT#32を更新する。
ルックアップテーブルLUT#33は、領域#33の論理アドレス(LBA)それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルLUT#33は、領域#33の論理アドレス(LBA)それぞれと領域#33に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
領域#33のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM3)から受信した場合、SSD3は、ルックアップテーブルLUT#33を参照してこのLBAに対応する物理アドレスをルックアップテーブルLUT#33から取得する。そして、SSD3は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
仮想マシンVM3内の上述のアクセス先切り換え部225を実現するために、仮想マシンVM3の作成時には、ルックアップテーブルLUT#2の内容がルックアップテーブルLUT#33にコピーされる。したがって、仮想マシンVM3の初期状態においては、ルックアップテーブルLUT#33は、ルックアップテーブルLUT#2の内容と同じ内容を保持する。つまり、ルックアップテーブルLUT#33内の物理アドレスそれぞれは、領域#33内の物理記憶位置ではなく、領域#2内の物理記憶位置を指す。このため、領域#33へのリードアクセスは、領域#2へ向け直される。
したがって、領域#33のある論理アドレス(あるLBA)を指定するリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM3)から受信した場合、SSD3は、ルックアップテーブルLUT#33に基づいて、別のオリジナルデータ(例えば、オペレーティングシステム(OS#2)の一部)を領域#2から読み出してサーバ100(仮想マシンVM3)に返す。したがって、領域#2内のオリジナルデータ(例えば、オペレーティングシステム(OS#2)等)を領域#33にコピーすること無く、領域#33の論理アドレス空間を通して領域#2内のオリジナルデータ全てを利用することが可能となる。
領域#33のある論理アドレス(あるLBA)を指定するライト要求(ライトコマンド)をサーバ100(ホスト計算機の仮想マシンVM3)から受信した場合、SSD3は、書き込むべきデータ(ライトデータ)を領域#33(領域#33に割り当てられたブロック)に書き込む。そして、SSD3は、ライトデータが書き込まれた領域#33内の物理記憶位置を示す物理アドレスがこのLBAにマッピングされるように、ルックアップテーブルLUT#33を更新する。
このように、領域#33へのデータ書き込みは、領域#2へ向け直されず、領域#33にデータが書き込まれる。ルックアップテーブルLUT#33においては、この書き込まれたデータに対応する論理アドレスには領域#33内の物理記憶位置の物理アドレスがマッピングされる。したがって、この論理アドレスを指定する後続のリード要求は、領域#2へ向け直されず、領域#33からこの書き込まれたデータが読み出される。
したがって、領域#33に存在しないデータ(別のオリジナルデータ、例えば、オペレーティングシステム(OS#2))を領域#2から読み出すことができ、且つ、新たなライトデータを、または別のオリジナルデータの一部を書き替えるための更新データを、領域#33に書き込むことができる。例えば、仮想マシンVM3によって実行されるオペレーティングシステム(OS#2)の一部(ファイル等)をアップデートする必要がある場合には、オペレーティングシステム(OS#2)の更新データ部分、つまり更新されたファイルが、領域#33に書き込まれる。また、仮想マシンVM3よって実行されるアプリケーションによって作成されたユーザデータも領域#33に書き込まれる。
また、領域#33にデータが書き込まれると、このデータに対応する論理アドレスには領域#33内の物理記憶位置の物理アドレスがマッピングされる。したがって、あるデータが領域#33に書き込まれた後にこのデータの論理アドレスを指定する後続のリード要求(リードコマンド)をサーバ100(ホスト計算機の仮想マシンVM3)から受信した場合、SSD3は、ルックアップテーブルLUT#33に基づいて、このデータを領域#33から読み出してサーバ100(仮想マシンVM3)に返す。
ルックアップテーブルLUT#33は、領域#33のフリースペースを増やすためのガベージコレクションにおいても利用される。領域#33のガベージコレクションにおいては、SSD3は、この領域#33に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の1以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域#33に割り当てられた別のブロック(フリーブロック)にコピーする。そして、SSD3は、コピーされたデータに対応するLBAそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルLUT#33を更新する。
なお、領域#1(または領域#2)に書き込まれるデータは仮想マシンイメージに限定されず、他の領域から参照される任意のデータが領域#1(または領域#2)に書き込まれてもよい。例えば、共有ファイルのような共有データが領域#1(または領域#2)に書き込まれてもよい。
図5は、領域#1にオペレーティングシステム(OS#1)のバイナリイメージを書き込む動作と領域#1を書き込み禁止モード(リードオンリーモード)に設定する動作とを示す。
(1)サーバ100(ホスト計算機)の管理者の操作に基づいて、サーバ100は、ネームスペースNS#1に対応する領域#1にオリジナルデータ(例えば、仮想マシンイメージA)を書き込むための幾つかのライト要求をSSD3に送出する。これらライト要求の各々は、ネームスペースNS#1の識別子(NSID1)、開始LBA、転送長とを含む。開始LBAは、ライトデータが書き込まれるべき最初のLBAを示す。転送長は、ライトデータのデータ長を示す。
SSD3は、オリジナルデータ、例えば、仮想マシンイメージA(オペレーティングシステム(OS#1)のバイナリイメージ、アプリケーションプログラム(APL#1〜#3)のバイナリイメージ)を領域#1に書き込む。この場合、オペレーティングシステム(OS#1)およびアプリケーションプログラム(APL#1〜#3)のインストール・イメージが、あるディスクから領域#1にコピーされてもよいし、オペレーティングシステム(OS#1)およびアプリケーションプログラム(APL#1〜#3)を領域#1にインストールする動作が実行されてもよい。
(2)SSD3は、オリジナルデータ(例えば、仮想マシンイメージA)が書き込まれた領域#1内の複数の物理記憶位置を示す複数の物理アドレスがこの仮想マシンイメージAに対応する複数のLBAにマッピングされるように、NSID1に対応するLUT#1を更新する。
(3)オリジナルデータ(例えば、仮想マシンイメージA)の書き込み(インストール)が完了した後、SSD3は、領域#1を、領域#1への書き込みが禁止されるリードオンリーモード(書き込み禁止モード)に設定してもよい。この場合、領域#1は、読み出しおよび書き込みの双方が許可されたモードから、リードオンリーモード(書き込み禁止モード)に遷移する。これにより、オリジナルデータ(例えば、仮想マシンイメージA)の書き込み(インストール)が完了した後は、領域#1への新たなデータの書き込み/領域#1内のデータの書き換えは実行されない。したがって、領域#1に割り当てられた不揮発性メモリ内のブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)は、仮想ストレージとして利用される他の領域よりも少ない値に維持される。
図6は、領域#31を制御する動作を示す。
(4)サーバ100(ホスト計算機)の管理者の操作に基づいて、サーバ100は、論理物理アドレス変換テーブルをコピーするためのコピー要求(コピーコマンド)をSSD3に送出する。このコピー要求は、コピー元領域(コピー元LUT)を指定するコピー元パラメータと、コピー先領域(コピー先LUT)を指定するコピー先パラメータとを含む。オリジナルデータ(ここでは、仮想マシンイメージA)を参照する仮想マシンVM1用の仮想ストレージをネームスペース#31に対応する領域#31に作成すべきケースにおいては、サーバ100は、ネームスペース#1の識別子(NSID1)を指定するコピー元パラメータと、ネームスペース#31の識別子(NSID31)を指定するコピー先パラメータとを含むコピー要求(コピーコマンド)を、SSD3に送信する。このコピーコマンドを受信すると、SSD3は、コピー元パラメータによって指定されるLUT#1の内容(領域#1の論理アドレスそれぞれにマッピングされている物理アドレスの集合)を、コピー先パラメータによって指定されるLUT#31にコピーする。このコピーが完了すると、仮想マシンVM1の利用が可能となる。通常、各LUTの容量は、対応する領域の容量の1/1000程度である。したがって、LUTのコピーに要する時間は仮想マシンイメージAをコピーに要する時間の1/1000程度であり、LUTのコピーは瞬時に完了する。したがって、仮想マシンVM1の利用を即座に開始することが可能となる。
(5)サーバ100(ホスト計算機の仮想マシンVM1)は、その仮想マシンVM1用の仮想ストレージからオペレーティングシステム(OS#1)をブートするために、領域#31のLBAを各々指定する多数のリード要求(リードコマンド)をSSD3に送出する。これら各リード要求は、ネームスペースNS#31の識別子(NSID31)、開始LBA、転送長とを含む。
(6)一つのリード要求を受信すると、SSD3は、NSID31に対応するLUT#31を参照して、リード要求に含まれる開始LBAに対応する物理アドレスをLUT#31から取得する。
(7)そして、SSD3は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域#1内の物理記憶位置を示すので、オリジナルデータの一部、つまりオペレーティングシステム(OS#1)の一部が領域#1から読み出されて、サーバ100(ホスト計算機の仮想マシンVM1)に返される。多数のリード要求に応じて実行される領域#1からのデータ読み出し動作によってオペレーティングシステム(OS#1)がブートされ、このオペレーティングシステム(OS#1)が仮想マシンVM1のためのゲストオペレーティングシステムとして実行される。この結果、仮想マシンVM1は、様々なサービスを実行可能な稼動状態となる。
なお、このオペレーティングシステム(OS#1)上でアプリケーションプログラムを実行することが必要な場合には、仮想マシンVM1(オペレーティングシステム(OS#1))は、アプリケーションプログラムを実行するために、領域#31のLBAを各々指定する多数のリード要求(リードコマンド)をSSD3に送出する。これら各リード要求も、ネームスペースNS#31の識別子(NSID31)、開始LBA、転送長とを含む。一つのリード要求を受信すると、SSD3は、NSID31に対応するLUT#31を参照して、開始LBAに対応する物理アドレスをLUT#31から取得する。そして、SSD3は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域#1内の物理記憶位置を示すので、アプリケーションプログラムの一部が領域#1から読み出されて、サーバ100(ホスト計算機の仮想マシンVM1)に返される。多数のリード要求に応じて実行される領域#1からのデータ読み出し動作によってアプリケーションプログラムが実行される。
(8)仮想マシンVM1が稼動状態の間、サーバ100(仮想マシンVM1)は、ユーザデータの新規書き込み、このユーザデータの書き換え、オペレーティングシステム(OS#1)のアップデート等のために、領域#31のLBAを各々指定する多数のライト要求(ライトコマンド)をSSD3に送出する。
(9)一つのライト要求を受信すると、SSD3は、サーバ100(仮想マシンVM1)から受信されるデータ(ライトデータ)を領域#31に書き込む。
(10)データ(ライトデータ)が領域#31に書き込まれると、SSD3は、このデータが書き込まれた領域#31内の物理記憶位置を示す物理アドレスがこのデータのLBAにマッピングされるようにLUT#31を更新する。これにより、このデータに対する後続のリード要求が受信された場合には、このデータは領域#31から読み出され、そしてサーバ100(仮想マシンVM1)に返される。また、このデータの更新データも領域#31に書き込まれる。
図7は、領域#32を制御する動作を示す。
(4)サーバ100の管理者の操作に基づいて、サーバ100は、論理物理アドレス変換テーブルをコピーするためのコピー要求(コピーコマンド)をSSD3に送出する。オリジナルデータ(例えば、仮想マシンイメージA)を参照する仮想マシンVM2用の仮想ストレージをネームスペース#32に対応する領域#32に作成すべきケースにおいては、サーバ100は、このコピー要求は、コピー元領域(コピー元LUT)を指定するコピー元パラメータと、コピー先領域(コピー先LUT)を指定するコピー先パラメータとを含む。このコピーコマンドを受信すると、SSD3は、LUT#1の内容を、LUT#32にコピーする。このコピーが完了すると、仮想マシンVM2の利用が可能となる。
(5)サーバ100(仮想マシンVM2)は、その仮想マシンVM2用の仮想ストレージからオペレーティングシステム(OS#1)をブートするために、領域#32のLBAを各々指定する多数のリード要求(リードコマンド)をSSD3に送出する。これら各リード要求は、ネームスペースNS#32の識別子(NSID32)、開始LBA、転送長とを含む。
(6)一つのリード要求を受信すると、SSD3は、NSID32に対応するLUT#32を参照して、開始LBAに対応する物理アドレスをLUT#32から取得する。
(7)そして、SSD3は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域#1内の物理記憶位置を示すので、オペレーティングシステム(OS#1)の一部が、領域#1から読み出される。多数のリード要求に応じて実行される領域#1からのデータ読み出し動作によってオペレーティングシステム(OS#1)がブートされ、このオペレーティングシステム(OS#1)が仮想マシンVM2のためのゲストオペレーティングシステムとして実行される。この結果、仮想マシンVM2は、様々なサービスを実行可能な稼動状態となる。
なお、このオペレーティングシステム(OS#1)上でアプリケーションプログラムを実行することが必要な場合には、仮想マシンVM2(オペレーティングシステム(OS#1))は、アプリケーションプログラムを実行するために、領域#32のLBAを各々指定する多数のリード要求(リードコマンド)をSSD3に送出する。これら各リード要求も、ネームスペースNS#32の識別子(NSID32)、開始LBA、転送長とを含む。一つのリード要求を受信すると、SSD3は、NSID32に対応するLUT#32を参照して、開始LBAに対応する物理アドレスをLUT#32から取得する。そして、SSD3は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域#1内の物理記憶位置を示すので、アプリケーションプログラムの一部が、領域#1から読み出される。多数のリード要求に応じて実行される領域#1からのデータ読み出し動作によってアプリケーションプログラムが実行される。
(8)仮想マシンVM2が稼動状態の間、サーバ100(仮想マシンVM2)は、ユーザデータの新規書き込み、このユーザデータの書き換え、オペレーティングシステム(OS#1)のアップデート等のために、領域#32のLBAを各々指定する多数のライト要求(ライトコマンド)をSSD3に送出する。
(9)一つのライト要求を受信すると、SSD3は、サーバ100(仮想マシンVM2)から受信されるデータ(ライトデータ)を領域#31に書き込む。
(10)データ(ライトデータ)が領域#32に書き込まれると、SSD3は、このデータが書き込まれた領域#32内の物理記憶位置を示す物理アドレスがこのデータのLBAにマッピングされるようにLUT#32を更新する。これにより、このデータに対する後続のリード要求が受信された場合には、このデータは領域#32から読み出される。また、このデータの更新データも領域#32に書き込まれる。
図8は、SSD3によって実行される、領域#1に対するリフレッシュ動作の例を示す。
上述したように、領域#1のオリジナルデータは、領域#31、領域#32から参照される。したがって、領域#1からのデータ読み出しは非常に高い頻度で実行される。つまり、領域#1に割り当てられた各ブロックの書き換え回数は非常に少ないが、これら各ブロックのデータ読み出しの回数は非常に多くなる。データ読み出しの回数の増加は、リードディスターブエラーを増やす要因になる。リードディスターブエラーは、データ読み出し動作に起因してメモリセル(特に、非選択メモリセル)の閾値電圧レベルが変動(上昇)する現象である。このリードディスターブエラーにより、領域#1に割り当てられた各ブロックからリードされるデータのビット誤り率が増加する可能性がある。
そこで、SSD3は、領域#1に割り当てられた各ブロックの書き換え回数が少ないことに着目して、以下のリフレッシュ動作を実行する。
SSD3は、領域#1に割り当てられているブロック群からリフレッシュ条件を満たすブロックを検出する(ステップS11)。リフレッシュ条件を満たすブロックとは、ビット誤り率が閾値X以上であるブロックであってもよいし、または総読み出し回数が閾値Y以上であるブロックであってもよい。SSD3は、検出されたブロック内のデータの誤りを訂正する(ステップS12)。ステップS12では、SSD3は、検出されたブロック内のデータに付加されているエラー訂正コード(ECC)を使用してこのデータの誤りを訂正する。そして、SSD3は、誤りが訂正されたデータを、検出されたブロックと同じブロックに書き戻す(ステップS13)。例えば、領域#1に割り当てられているブロックBLK2がビット誤り率が閾値X以上であるならば、このブロックBLK2が、リフレッシュ条件を満たすブロック、つまりリフレッシュ動作を施すべきブロックとして検出されてもよい。そして、このブロックBLK2内の全てのデータ部の誤りが訂正される。ブロックBLK2の消去動作が実行された後、誤りが訂正されたこれらデータ部が、このブロックBLK2に書き戻される。
通常のリフレッシュ動作では、リフレッシュ対象のブロックBLK2から読み出されたデータは、このブロックBLK2とは異なるブロック(移動先ブロック)に移動される。そして、移動先ブロックの物理アドレスそれぞれがこの移動されたデータの論理アドレスそれぞれにマッピングされるようにLUT#1が更新される。
しかし、本実施形態では、LUT#1の内容(物理アドレスの集合)は、LUT#31内にコピーされており、さらには、LUT#32内にもコピーされている。したがって、もしリフレッシュ動作によってデータがブロックBLK2から別のブロックに移動されたならば、LUT#1のみならず、LUT#31、LUT#32も更新することが必要となる。したがって、更新が必要な論理物理アドレス変換情報の量が非常に増大する。このことは、SSD3の性能を低下させる要因となり得る。
本実施形態では、誤りが訂正されたデータ部それぞれはブロックBLK2に書き戻されるので、LUT#1、LUT#31、LUT#32を更新する必要は無い。また、領域#1に割り当てられた各ブロックの書き換え回数は非常に少ない。したがって、誤りが訂正されたこれらデータ部がブロックBLK2に書き戻されても、ブロックBLK2の書き替え回数(プログラム/イレーズサイクルの数)が制限値に近づくことはない。よって、誤りが訂正されたデータを元のブロックBLK2に書き戻すという改良されたリフレッシュ動作は、領域#1(ネームスペースNS#1)のリードディスターブエラーを低減でき、領域#1(ネームスペースNS#1)に割り当てられた各ブロックの信頼性を効率良く改善することができる。
図9は、領域#1に対応するLUT#1の内容の例と領域#31に対応するLUT#31の内容の例とを示す。
領域#1(ネームスペースNS#1)には、不揮発性メモリ内のブロックBLK1、BLK2、BLK3、…BLK50が割り当てられ、領域#31(ネームスペースNS#31)には、不揮発性メモリ内のブロックBLK51、BLK52、BLK53、…BLK100が割り当てられている。領域#1に割り当てられるBLK1、BLK2、BLK3、…BLK50の各々は、仮想マシンイメージAの格納のためにのみ使用され、他の領域(他のネームスペース)用のデータの格納には使用されない。これにより、これらBLK1、BLK2、BLK3、…BLK50の各々の書き替え回数を低い値に維持することができる。
LUT#1は、ネームスペース#1に対応するLBA0、LBA1、LBA2、LBA3、LBA4、LBA5、LBA6、LBA7、LBA8、LBA9、LBA10、LBA11、LBA12、LBA13、LBA14、LBA15、…にそれぞれ対応する複数のエントリを含む。データ書き込みに利用された各LBAに対応するエントリは、このデータが実際に書き込まれた不揮発性メモリ内の物理記憶位置を示す物理アドレスを保持する。データ書き込みにまだ利用されていない各LBAに対応するエントリは、物理アドレスを保持しない。このエントリは、このエントリが物理アドレスを保持しない空きエントリであることを示すヌル値を保持してもよい。
同様に、LUT#31も、ネームスペース#31に対応するLBA0、LBA1、LBA2、LBA3、LBA4、LBA5、LBA6、LBA7、LBA8、LBA9、LBA10、LBA11、LBA12、LBA13、LBA14、LBA15、…にそれぞれ対応する複数のエントリを含む。
図9では、LUT#1において、ネームスペース#1に対応するLBA0、LBA1、LBA2、LBA3、LBA4、LBA5、LBA6、LBA7、LBA8、LBA9、LBA10、LBA11、LBA12、LBA13、LBA14、LBA15、…に、領域#1の物理アドレス“100”、“101”、“102”、“103”、“104”、“105”、“106”、“107”、“200”、“201”、“202”、“203”、“204”、“205”、“206”、“207”、…がマッピングされている場合が例示されている。
LUT#1の内容がLUT#31にコピーされると、LUT#31においては、ネームスペース#31に対応するLBA0、LBA1、LBA2、LBA3、LBA4、LBA5、LBA6、LBA7、LBA8、LBA9、LBA10、LBA11、LBA12、LBA13、LBA14、LBA15、…にそれぞれ対応するエントリに、領域#1の物理アドレス“100”、“101”、“102”、“103”、“104”、“105”、“106”、“107”、“200”、“201”、“202”、“203”、“204”、“205”、“206”、“207”、…が格納される。この結果、ネームスペース#31に対応するLBA0、LBA1、LBA2、LBA3、LBA4、LBA5、LBA6、LBA7、LBA8、LBA9、LBA10、LBA11、LBA12、LBA13、LBA14、LBA15、…に、領域#1の物理アドレス“100”、“101”、“102”、“103”、“104”、“105”、“106”、“107”、“200”、“201”、“202”、“203”、“204”、“205”、“206”、“207”、…がマッピングされる。
したがって、ルックアップテーブルLUT#31内の物理アドレスそれぞれは、領域#31内の物理記憶位置ではなく、領域#1内の物理記憶位置を指す。このため、領域#31の各論理アドレス(ネームスペース#31の各論理アドレス)へのリードアクセスは、領域#1へ向け直される。
SSD3が、領域#31のLBAxを指定するライト要求(一度もデータが書き込まれていないLBAxへの新規の書き込み要求、またはLBAxに既に書き込まれているデータの書き換え要求)をサーバ100から受信すると、SSD3は、書き込むべきデータ(ライトデータ)を領域#31に書き込む。例えば、このライトデータが書き込まれた領域#31内の物理記憶位置が物理アドレス“500”によって指定される物理記憶位置であったならば、LUT#31は、領域#31内の物理記憶位置を示す物理アドレス“500”がLBAxにマッピングされるように更新される。
この場合、LUT#31において、もしLBAxに対応するエントリ内の値がヌル値であったならば、つまり受信されたライト要求がLBAxへの新規の書き込み要求であったならば、物理アドレス“500”が、LBAxに対応するエントリに新たに格納される。この結果、LBAxに対応するエントリの内容はヌル値から物理アドレス“500”に変更される。
あるいは、もしLBAxに対応するエントリに領域#1内のある物理記憶位置を示す物理アドレスが既に格納されていたならば、つまり受信されたライト要求がLBAxに既に書き込まれている旧データの書き換え要求であったならば、LUT#31においては、LBAxに対応するエントリの内容は、LBAxの旧データが格納されていた物理記憶位置を示す物理アドレスから物理アドレス“500”に変更される。
本実施形態では、複数のネームスペースが使用される環境を説明したが、本実施形態は、複数のネームスペースが使用される環境にのみ限定されず、例えば、領域#1のLBA空間と異なるLBA空間が領域#31に割り当てられる環境にも適用され得る。例えば、領域#1のLBA空間がLBA0、LBA1、LBA2、LBA3、LBA4、LBA5、LBA6、LBA7、LBA8、LBA9、LBA10、LBA11、LBA12、LBA13、LBA14、LBA15、…LBAn−1であり、領域#31のLBA空間がLBAn、LBAn+1、LBAn+2、LBAn+3、LBAn+4、LBAn+5、LBAn+6、LBAn+7、LBAn+8、LBAn+9、LBAn+10、LBAn+11、LBAn+12、LBAn+13、LBAn+14、LBAn+15、…LBA2n−1であってもよい。
この場合、LUT#1の内容がLUT#31にコピーされると、ネームスペース#31に対応するLBAn、LBAn+1、LBAn+2、LBAn+3、LBAn+4、LBAn+5、LBAn+6、LBAn+7、LBAn+8、LBAn+9、LBAn+10、LBAn+11、LBAn+12、LBAn+13、LBAn+14、LBAn+15、…に、領域#1の物理アドレス“100”、“101”、“102”、“103”、“104”、“105”、“106”、“107”、“200”、“201”、“202”、“203”、“204”、“205”、“206”、“207”…がマッピングされる。この場合においても、ネームスペース#31のあるLBAを指定するリード要求を、領域#1に向け直すことができる。
なお、領域#1(ネームスペース#1)に対するデータの書き換えはほとんど実行されないので、領域#1(ネームスペース#1)にはシン・プロビジョニングが適用されてもよい。この場合、領域#1(ネームスペース#1)においては、領域#1のサイズ(LBAの数に対応する容量)よりも少ない容量に相当する数のブロック群のみが確保(予約)される。同様に、領域#2(ネームスペース#2)にもシン・プロビジョニングが適用されてもよい。
領域#31(ネームスペース#31)には、シン・プロビジョニング、オーバー・プロビジョニングのどちらが適用されてもよい。同様に、領域#32(ネームスペース#323)、領域#33(ネームスペース#33)の各々には、シン・プロビジョニング、オーバー・プロビジョニングのどちらが適用されてもよい。
図10は、領域#31(または領域#32)の或る論理アドレスを指定するリード要求に応じて実行されるリード動作と、領域#31(または領域#32)の或る論理アドレスを指定するライト要求に応じて実行されるライト動作とを示す。
本実施形態では、LUT#1の内容は、LUT#31、LUT#32の各々にコピーされる。この結果、領域#31の各LBAへのリードアクセスは、領域#1へ向け直される。同様に、領域#32の各LBAへのリードアクセスも、領域#1へ向け直される。
SSD3が、領域#31のあるLBA(例えばLBAx)を指定するライト要求をサーバ100から受信した時、SSD3は、サーバ100から受信されるデータ(DATAx)を領域#31内の利用可能な物理記憶位置に書き込む。そして、LUT#31が更新されて、DATAxが書き込まれた物理記憶位置を示す物理アドレスが、LUT#31内のLBAxに対応するエントリに格納される。
SSD3が、領域#31のあるLBA(例えばLBAy)を指定するライト要求をサーバ100から受信した時、SSD3は、サーバ100から受信されるデータ(DATAy)を領域#31内の利用可能な物理記憶位置に書き込む。そして、LUT#31が更新されて、DATAyが書き込まれた物理記憶位置を示す物理アドレスが、LUT#31内のLBAyに対応するエントリに格納される。
SSD3が、領域#32のあるLBA(例えばLBAz)を指定するライト要求をサーバ100から受信した時、SSD3は、サーバ100から受信されるデータ(DATAz)を領域#32内の利用可能な物理記憶位置に書き込む。そして、LUT#32が更新されて、DATAzが書き込まれた物理記憶位置を示す物理アドレスが、LUT#32内のLBAzに対応するエントリに格納される。
図11は、領域#1に割り当てられるシングルレベルセル(SLC)ブロック群と領域#31(または領域#32)に割り当てられるマルチレベルセル(MLC)/トリプルレベルセル(TLC)ブロック群とを示す。
SLCブロックにおいては、メモリセル当たりに1ビットが格納される。各メモリセルは2つの状態(一つの消去状態、一つのプログラム状態)に対応する2つの閾値電圧分布のいずれかに設定される。したがって、SLCブロックにおいては、これら状態(消去状態、プログラム状態)間を分離するためのマージンの量が比較的大きいので、リードディスターブエラーが発生しにくい。
一方、MLCブロックにおいては、メモリセル当たりに2ビットが格納される。各メモリセルは4つの状態(一つの消去状態、三つのプログラム状態)に対応する4つの閾値電圧分布のいずれかに設定される。したがって、MLCブロックにおいては、これら4つの状態が比較的狭い閾値電圧間隔で並べられるので、隣接する2つの状態間を分離するためのマージンの量がSLCブロックよりも狭く、SLCブロックよりもリードディスターブエラーが発生しやすい。
TLCブロックにおいては、メモリセル当たりに3ビットが格納される。各メモリセルは8つの状態(一つの消去状態、七つのプログラム状態)に対応する8つの閾値電圧分布のいずれかに設定される。したがって、TLCブロックにおいては、隣接する2つの状態間を分離するためのマージンの量がさらに狭くなり、リードディスターブエラーがより発生しやすくなる。
本実施形態においては、図11に示されているように、頻繁にデータ読み出しが実行され且つデータ書き換えはほとんど実行されない領域#1(ネームスペースNS#1)には、SLCブロック群(SLC−BLK1、SLC−BLK2、SLC−BLK3、…SLC−BLK50)が物理リソースとして割り当てられる。これは、領域#1については、容量コストよりも、リードディスターブエラーに対する耐性を重視するためである。
一方、領域#31(ネームスペースNS#31)においては、データ読み出し回数は領域#1(ネームスペースNS#1)よりも少ないが、時間が経過するにつれて、多くの量のデータが領域#31に書き込まれる可能性がある。したがって、領域#31(ネームスペースNS#31)には、MLC(またはTLC)ブロック群(MLC/TLC−BLK51、MLC/TLC−BLK52、MLC/TLC−BLK53、…MLC/TLC−BLK100)が物理リソースとして割り当てられる。これは、領域#31については、リードディスターブエラーに対する耐性よりも、容量コストを重視するためである。
同様に、領域#32(ネームスペースNS#32)にも、MLC(またはTLC)ブロック群(MLC/TLC−BLK101、MLC/TLC−BLK102、MLC/TLC−BLK103、…MLC/TLC−BLK200)が物理リソースとして割り当てられる。
SSD3が、メモリセル当たりに1ビットのデータを格納可能なSLC−NANDフラッシュメモリと、メモリセル当たりに複数ビットのデータを格納可能なMLC/TLC−NANDフラッシュメモリとを内蔵する場合には、SLC−NANDフラッシュメモリ内のSLCブロック群を領域#1に割り当て、MLC/TLC−NANDフラッシュメモリ内のMLC/TLCブロック群を領域#31および領域#32に割り当ててもよい。
あるいは、SSD3がメモリセル当たりに複数ビットのデータを格納可能なMLC/TLC−NANDフラッシュメモリを内蔵する場合には、MLC/TLC−NANDフラッシュメモリから領域#1に割り当てられた各MLC/TLCブロックをSLCモードに設定し、MLC/TLC−NANDフラッシュメモリから領域#31(または領域#32)に割り当てられた各MLC/TLCブロックをMLC/TLCモードに設定してもよい。
SLCモードに設定されたMLC/TLCブロックに関しては、SSD3は、メモリセル当たりに1ビットのデータが書き込まれる第1の書き込みモードで、データ(ここでは、オペレーティングシステムのバイナリイメージ、等)をMLC/TLCブロックに書き込む。換言すれば、SSD3は、メモリセル当たりに1ビットのデータが書き込まれる第1の書き込みモードを使用して、領域#1へのデータ書き込みを実行する。例えば、第1の書き込みモードでは、同一ワード線に接続されたメモセル群にロアページデータのみが書き込まれてもよい。
MLC/TLCモードに設定されたMLC/TLCブロックに関しては、SSD3は、メモリセル当たりに複数ビットのデータが書き込まれる第2の書き込みモードで、データをMLC/TLCブロックに書き込む。換言すれば、SSD3は、メモリセル当たりに複数ビットのデータが書き込まれる第2の書き込みモードを使用して、領域#31または領域#32へのデータ書き込みを実行する。例えば、第2の書き込みモードでは、同一ワード線に接続されたメモセル群にロアページデータとアッパーページデータとが書き込まれてもよいし(MLCモード)、ロアページデータとミドルページデータとアッパーページデータとが書き込まれてもよい(TLCモード)。
図12は、領域#1に対するリフレッシュ動作の他の例を示す。
図12のリフレッシュ動作は、図13に示されているような2段階のアドレス変換が実行される構成に適用される。
まず、2段階のアドレス変換について説明する。
図13に示されているように、LUT#1、…LUT#31、LUT#32の各々の後段には、ブロックアドレス変換テーブルT1が設けられる。ブロックアドレス変換テーブルT1は、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理する。このブロックアドレス変換テーブルT1は、例えば、変換前の複数のブロックアドレスに対応する複数のエントリを含んでいてもよい。各エントリには、対応する変換前のブロックアドレスに対応する変換後のブロックアドレスが格納される。
LUT#1、LUT#31またはLUT#32から取得される物理アドレスは、ブロックアドレスBLK−addrと、ページアドレスPage−addrとを含む。取得される物理アドレス内のブロックアドレスBLK−addrに応じて、ブロックアドレス変換テーブルT1内の複数のエントリの一つが選択される。そして、選択されたエントリに保持されているブロックアドレスBLK−addr’がブロックアドレス変換テーブルT1から読み出され、このブロックアドレスBLK−addr’と取得された物理アドレス内のページアドレスPage−addrとによって新たな物理アドレス(ブロックアドレスBLK−addr’,ページアドレスPage−addr)が生成される。
このような2段階のアドレス変換により、たとえ領域#1に割り当てられているブロック内のデータが別のブロック(移動先ブロック)に移動されても、LUT#1、LUT#31、LUT#32を更新することなく、単にブロックアドレス変換テーブルT1のみを更新するだけで、移動先ブロックに対応する物理アドレスを得ることができる。
図12のリフレッシュ動作においては、以下の処理が実行される。
SSD3は、領域#1に割り当てられているブロック群からリフレッシュ条件を満たすブロックを検出する(ステップS21)。リフレッシュ条件を満たすブロックとは、ビット誤り率が閾値X以上であるブロックであってもよいし、または総読み出し回数が閾値Y以上であるブロックであってもよい。SSD3は、検出されたブロック内のデータの誤りを訂正する(ステップS22)。ステップS22では、SSD3は、検出されたブロック内のデータに付加されているエラー訂正コード(ECC)を使用してこのデータの誤りを訂正する。そして、SSD3は、誤りが訂正されたデータを、検出されたブロックとは異なる別のブロック(移動先ブロック)に書き戻す(ステップS23)。移動先ブロックは、読み出し回数の少ないフリーブロックであってもよい。そして、SSD3は、検出されたブロックへのアクセスが移動先ブロックへ向け直されるように、ブロックアドレス変換テーブルT1を更新する(ステップS24)。ステップS24では、SSD3は、LUT#1、LUT#31、またはLUT#32から取得された物理アドレス内に含まれる検出されたブロックのブロックアドレスが移動先ブロックのブロックアドレスに変換されるように、ブロックアドレス変換テーブルT1に、移動先ブロックのブロックアドレスを格納する。この場合、移動先ブロックのブロックアドレスは、検出されたブロックのブロックアドレスに対応するエントリに格納される。
図14は、SSD3とサーバ(ホスト計算機)100とを含む情報処理システム1を示す。
サーバ(ホスト計算機)100は、ネットワーク50を介して複数の端末51に接続されていてもよい。これら端末51は、図1、図2で説明したユーザA、ユーザB、ユーザCに対応する。サーバ100は、これら端末51に対してIaaSのようなサービスを提供する。
SSD3は、サーバ100の物理ストレージとして使用され得る。SSD3は、サーバ100として機能する計算機に内蔵されてもよいし、この計算機にケーブルまたはネットワークを介して接続されてもよい。
サーバ100とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(登録商標),Fibre channel、NVM Express(NVMe)(登録商標)等を使用し得る。
SSD3は、コントローラ(メモリコントローラ)4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。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に電気的に接続されている。NANDインタフェース13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。
NAND型フラッシュメモリ5は、図15に示すように、複数のNAND型フラッシュメモリダイを含んでいてもよい。個々のNAND型フラッシュメモリダイは独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な最小単位として機能する。図15においては、NANDインタフェース13に8個のチャンネルCh.1〜Ch.8が接続されており、8個のチャンネルCh.1〜Ch.8の各々に4つのNAND型フラッシュメモリダイが接続されている場合が例示されている。この場合、最大32個のNAND型フラッシュメモリダイ#1、#2、…#32を並列動作させることができる。
SSD3内のコントローラ4は、NAND型フラッシュメモリ5のデータ管理とNAND型フラッシュメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)として機能することができる。
このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。
論理ブロックアドレス(LBA)それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)を用いて実行される。
本実施形態では、コントローラ4は、上述したように、複数の領域にそれぞれ対応する複数のルックアップテーブルLUT#1、LUT#2、…LUT#31、LUT#32、LUT#33を使用して、領域(ネームスペース)毎に、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理する。
あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNAND型フラッシュメモリ5内の物理記憶位置を示す。LUT#1、LUT#2、…LUT#31、LUT#32、LUT#33は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。一般に、各LUTのサイズは、比較的大きい。したがって、各LUTの少なくとも一部がDRAM6に論理物理アドレス変換テーブルキャッシュとして格納されてもよい。
サーバ100からのリード要求(リードコマンド)によって指定される論理アドレスに対応する目的の物理アドレスを含むキャッシュラインが論理物理アドレス変換テーブルキャッシュに存在するならば(キャッシュヒット)、この目的の物理アドレスによって指定されるNAND型フラッシュメモリ5内の物理記憶位置からデータが即座にリードされる。
一方、目的の物理アドレスを含むキャッシュラインが論理物理アドレス変換テーブルキャッシュに存在しないならば(キャッシュミス)、目的の物理アドレスを含むルックアップテーブル内の一部分(アドレス変換テーブル部)がNAND型フラッシュメモリ5から読み出される。そして論理物理アドレス変換テーブルキャッシュ内の置換対象キャッシュラインの内容が論理物理アドレス変換テーブルキャッシュから追い出され、代わりに、NAND型フラッシュメモリ5から読み出されたアドレス変換テーブル部がこのキャッシュラインに格納される。そして、この目的の物理アドレスによって指定されるNAND型フラッシュメモリ5内の物理記憶位置からデータがリードされる。
NAND型フラッシュメモリ5の各領域において、ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、あるLBAに対応する更新データを、このLBAに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、この領域に対応するルックアップテーブルLUTを更新してこのLBAにこの別の物理記憶位置の物理アドレスを関連付け、そして以前のデータを無効化する。
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
ウェアレベリングは、物理ブロックそれぞれの消耗を均一化するための動作である。
ガベージコレクションにおいては、コントローラ4は、データを書き込むことが可能なフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかの対象ブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、LUTから参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)であって、後にサーバ(ホスト計算機)100からリードされる可能性があるデータを意味する。無効データとは、もはやサーバ(ホスト計算機)100からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。そして、コントローラ4は、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックは、フリーブロックとして解放される。これによって、このブロックはその消去動作が実行された後に再利用することが可能となる。
次に、コントローラ4の構成について説明する。
コントローラ4は、例えば、一つのLSIによって実現されてもよい。コントローラ4は、少なくともハードウェアロジックを含む。このハードウェアロジックは、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、およびECC回路15等を含む。これらCPU12、NANDインタフェース13、DRAMインタフェース14、ECC回路15は、バス10を介して相互接続される。
このホストインタフェース11は、サーバ(ホスト計算機)100との通信を実行するように構成されたホストインタフェース回路である。ホストインタフェース11は、サーバ(ホスト計算機)100から様々なコマンド(ライトコマンド、リードコマンド、ネームスペース作成コマンド、コピーコマンド、等)を受信する。
ライトコマンドは、SSD3に対し、このライトコマンドによって指定されたデータをライトするように要求する。ライトコマンドは、開始LBA、転送長、およびネームスペースIDを含んでいてもよい。ライトコマンド内のネームスペースIDは、データが書き込まれるべき領域(ネームスペース)を一意に識別するための識別子である。リードコマンドは、SSD3に対し、このリードコマンドによって指定されたデータをリードするように要求する。リードコマンドは、開始LBA、転送長、およびネームスペースIDを含んでいてもよい。リードコマンド内のネームスペースIDは、データが読み出されるべき領域(ネームスペース)を一意に識別するための識別子である。
ネームスペース作成コマンドは、SSD3に対し、ネームスペースの作成を要求するコマンドである。コピーコマンドは、SSD3に対し、あるネームスペースの内容を別のネームスペースにコピーすることを要求する。より詳しくは、コピーコマンドは、SSD3に対し、あるネームスペースのLUTの内容を別のネームスペースのLUTにコピーすることを要求する。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、ECC回路15を制御するように構成されたプロセッサである。CPU12は、上述のFTLの処理に加え、サーバ(ホスト計算機)100からの様々なコマンドを処理するためのコマンド処理等を実行する。
これらFTL処理およびコマンド処理は、CPU12によって実行されるファームウェアによって制御されてもよい。このファームウェアは、CPU12を、ネームスペース管理部21、LUTコピー制御部22、ライト禁止制御部23、リード/ライト制御部24、およびリフレッシュ制御部25として機能させる。なお、ネームスペース管理部21、LUTコピー制御部22、ライト禁止制御部23、リード/ライト制御部24、およびリフレッシュ制御部25はハードウェアによって実現されてもよい。
ネームスペース管理部21は、複数のネームスペースを管理するためのマルチネームスペース管理機能を有する。各ネームスペースは、不揮発性メモリであるNAND型フラッシュメモリ5内の一種の領域に相当する。ネームスペース管理部21は、サーバ(ホスト計算機)100からのネームスペース作成コマンドそれぞれに基づいて、複数のネームスペース、つまり複数の領域を作成する。換言すれば、ネームスペース管理部21は、サーバ(ホスト計算機)100からの領域それぞれのネームスペース作成コマンドに基づいて、NAND型フラッシュメモリ5を複数の領域(ネームスペース)に論理的に分割する。
LUTコピー制御部22は、サーバ(ホスト計算機)100からのLUTコピーコマンドに基づいて、コピー元ネームスペースに対応するLUTの内容を、コピー先ネームスペースに対応するLUTにコピーする。このLUTコピーコマンドは、コピー元ネームスペースに格納されているデータをコピー先ネームスペースにコピーするためのコピーコマンドである。
ライト禁止制御部23は、領域#1(ネームスペース#NS1)への仮想マシンイメージAの書き込みの完了の後に、領域#1(ネームスペース#NS1)を、領域#1(ネームスペース#NS1)への書き込みが禁止されるリードオンリーモード(書き込み禁止モード)に設定する。同様に、ライト禁止制御部23は、領域#2(ネームスペース#NS2)への仮想マシンイメージBの書き込みの完了の後に、領域#2(ネームスペース#NS2)を、領域#3(ネームスペース#NS2)への書き込みが禁止されるリードオンリーモード(書き込み禁止モード)に設定する。
領域#31(ネームスペース#NS31)に対するリードコマンドをサーバ(ホスト計算機)100から受信した場合、リード/ライト制御部24は、ネームスペース#NS31に対応するLUT#31を参照することによって、リード対象の論理アドレスに対応する物理アドレスをLUT#31から取得する。そして、リード/ライト制御部24は、この取得された物理アドレスによって指定されるNAND型フラッシュメモリ5の物理記憶位置からデータを読み出し、この読み出したデータをサーバ(ホスト計算機)100に返す。領域#31(ネームスペース#NS31)は、仮想マシンVM1の仮想ストレージ(仮想ディスク)として機能する。仮想マシンVM1は、ネームスペース#NS31のNSID31を含むリード要求(リードコマンド)をデバイスドライバ等を介して発行するだけで領域#31を自身の仮想ストレージとしてリードアクセスすることができる。
領域#31(ネームスペース#NS31)に対するライトコマンドをサーバ(ホスト計算機)100から受信した場合、リード/ライト制御部24は、書き込むべきデータを領域#31(ネームスペース#NS31)に書き込み、そして、LUT#31を更新して、このデータが書き込まれた領域#31内の物理記憶位置を示す物理アドレスを、このデータの論理アドレスにマッピングする。仮想マシンVM1は、ネームスペース#NS31のNSID31を含むライト要求(ライトコマンド)をデバイスドライバ等を介して発行するだけで領域#31を自身の仮想ストレージとしてライトアクセスすることができる。
領域#32(ネームスペース#NS32)に対するリードコマンドをサーバ(ホスト計算機)100から受信した場合、リード/ライト制御部24は、ネームスペース#NS32に対応するLUT#32を参照することによって、リード対象の論理アドレスに対応する物理アドレスをLUT#32から取得する。そして、リード/ライト制御部24は、この取得された物理アドレスによって指定されるNAND型フラッシュメモリ5の物理記憶位置からデータを読み出し、この読み出したデータをサーバ(ホスト計算機)100に返す。領域#32(ネームスペース#NS32)は、仮想マシンVM2の仮想ストレージ(仮想ディスク)として機能する。仮想マシンVM2は、ネームスペース#NS32のNSID32を含むリード要求(リードコマンド)をデバイスドライバ等を介して発行するだけで領域#32を自身の仮想ストレージとしてリードアクセスすることができる。
領域#32(ネームスペース#NS32)に対するライトコマンドをサーバ(ホスト計算機)100から受信した場合、リード/ライト制御部24は、書き込むべきデータを領域#32(ネームスペース#NS32)に書き込み、そして、LUT#32を更新して、このデータが書き込まれた領域#32内の物理記憶位置を示す物理アドレスを、このデータの論理アドレスにマッピングする。仮想マシンVM2は、ネームスペース#NS32のNSID32を含むライト要求(ライトコマンド)をデバイスドライバ等を介して発行するだけで領域#32を自身の仮想ストレージとしてライトアクセスすることができる。
リフレッシュ制御部25は、領域#31(ネームスペース#NS31)に割り当てられているブロック群からリフレッシュ条件を満たすブロックを検出する。そして、リフレッシュ制御部25は、検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、検出されたブロックと同じブロックに書き戻す。
なお、図12、図13で説明したように、リフレッシュ制御部25は、誤りが訂正されたデータを、検出されたブロックとは異なる別のブロック(移動先ブロック)に書き込むこともできる。この場合、リフレッシュ制御部25は、検出されたブロックを指定するブロックアドレスが移動先ブロックのブロックアドレスに変換されるように、ブロックアドレス変換テーブルT1に移動先ブロックのブロックアドレスを格納する。
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御する。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAMコントローラである。DRAM6の記憶領域の一部は、サーバ(ホスト計算機)100からのライトデータを一時的に格納するライトバッファ(WB)31を格納するために使用される。また、DRAM6の記憶領域の他の一部は、LUT#1、LUT#2、…LUT#31、LUT#32、LUT#33を格納するために使用される。
ECC回路15は、ECCエンコーダとECCデコーダとを含む。ECCエンコーダは、書き込むべきデータ(ユーザデータ)を符号化して、ユーザデータと誤り訂正符号(ECC)とを含むメモリ書き込みデータを生成する。ECCデコーダは、ユーザデータと誤り訂正符号(ECC)とを含むメモリ読み出しデータを復号して、ユーザデータの誤りを訂正する。
図16は、領域#1に仮想マシンイメージを書き込む処理の手順を示す。
サーバ(ホスト計算機)100は、領域#1(ネームスペース#NS1)に仮想マシンイメージAを書き込むためのライト要求をSSD3に送出する。SSD3のコントローラ4は、仮想マシンイメージAを領域#1(ネームスペース#NS1)に書き込む(ステップS101)。そして、コントローラ4は、LUT#1を更新して、仮想マシンイメージAに対応する複数のLBAに、仮想マシンイメージAが書き込まれた領域#1内の物理記憶位置を示す物理アドレスそれぞれをマッピングする(ステップS102)。
仮想マシンイメージAの全てが領域#1に書き込まれた後、サーバ100(ホスト計算機)の管理者の操作に基づいて、サーバ(ホスト計算機)100は、仮想マシンイメージAの書き込み完了をSSD3に通知してもよい。この通知に応答して、コントローラ4は、領域#1(ネームスペース#NS1)を書き込み禁止モード(書き込みが禁止され且つリードだけが許可されたリードオンリーモード)に設定する(ステップS103)。なお、ステップS103では、領域#1(ネームスペース#NS1)をリードオンリーモードに設定するだけでなく、領域#1(ネームスペース#NS1)に対するガベージコレクションの実行を禁止してもよい。
図17は、仮想ストレージ(領域#31または領域#32)を作成する処理の手順を示す。
新たな仮想ストレージを作成することが必要な時、サーバ(ホスト計算機)100は、仮想ストレージの作成するために、ネームスペース作成コマンドをSSD3に送出する。SSD3のコントローラ4は、ネームスペースを作成し、幾つかの数のブロックをこのネームスペースのために予約する(ステップS111)。そして、コントローラ4は、作成されたネームスペースにIDを割り当て、このネームスペースのIDをサーバ(ホスト計算機)100に返す(ステップS112)。
サーバ(ホスト計算機)100は、コピーコマンド(アドレス変換テーブルコピーコマンド)をSSD3に送出する。SSD3のコントローラ4は、コピーコマンド内のコピー元パラメータによって指定されたNSIDに対応するLUTの内容を、コピーコマンド内のコピー先パラメータによって指定されたNSIDに対応するLUTにコピーする(ステップS113)。
図18のフローチャートは、リード/ライト処理の手順を示す。
サーバ(ホスト計算機)100からリード要求(リードコマンド)を受信すると(ステップS121のYES)、SSD3のコントローラ4は、リードコマンド内のNSIDによって指定されるネームスペースに対応するLUTを参照して、リードコマンド内の論理アドレス(LBA)に対応する物理アドレスをこのLUTから取得する(ステップS122)。換言すれば、ある領域の論理アドレスを指定するリードコマンドを受信した時、コントローラ4は、この領域に対応するLUTを参照して、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。
コントローラ4は、この取得された物理アドレスに対応するNAND型フラッシュメモリ5内の物理記憶位置からデータを読み出し、この読み出したデータをサーバ(ホスト計算機)100に返す(ステップS123)。本実施形態では、例えば、仮想ストレージ用の領域#31に対応するLUT#31には領域#1のLUT#1の内容がコピーされている。したがって、領域#31のある論理アドレスを指定するリードコマンドが受信された場合には、LUT#31が参照され、そして、領域#1内の物理記憶位置を示す物理アドレスがLUT#31から取得される。この結果、LUT#1の物理記憶位置からデータが読み出される。
サーバ(ホスト計算機)100からライト要求(ライトコマンド)を受信すると(ステップS124のYES)、SSD3のコントローラ4は、ライトコマンド内のNSIDによって指定される書き込み先ネームスペースが書き込み禁止モード(リードオンリーモード)であるか否かを判定する(ステップS125)。換言すれば、ある領域の論理アドレスを指定するライトコマンドを受信した時、コントローラ4は、この領域が書き込み禁止モード(リードオンリーモード)であるか否かを判定する。
書き込み先ネームスペースが書き込み禁止モード(リードオンリーモード)に設定されているならば(ステップS124のYES)、コントローラ4は、書き込み先ネームスペースへの書き込みが禁止されていることを示すエラー通知をサーバ(ホスト計算機)100に返す(ステップS128)。
書き込み先ネームスペースが書き込み禁止モード(リードオンリーモード)ではないならば(ステップS124のNO)、コントローラ4は、書き込み先ネームスペースに対応する領域にデータ(ライトデータ)を書き込む(ステップS126)。そして、コントローラ4は、ライトデータが書き込まれた物理記憶位置を示す物理アドレスがこのライトデータの論理アドレス(LBA)にマッピングされるように、書き込み先ネームスペースに対応するLUTを更新する(ステップS127)。
図19のフローチャートは、リフレッシュ処理の手順を示す。
SSD3のコントローラ4は、仮想マシンイメージが格納されているネームスペースに対応するブロック群、つまり仮想マシンイメージを格納しているブロック群から、リフレッシュ条件を満たすブロックを検出する(ステップS131)。コントローラ4は、この検出されたブロックからページ単位でデータを読み出し、読み出したデータの誤りをECC回路15を使用して訂正する(ステップS132)。ステップS132では、検出されたブロックの全てのページのデータの誤りが訂正される。コントローラ4は、検出されたブロックに消去動作を施して検出されたブロックの全てのメモリセルを消去状態にする(ステップS133)。そして、コントローラ4は、誤りが訂正された全てのページのデータを、検出されたブロックと同じブロックに書き戻す(ステップS134)。
図20のフローチャートは、リフレッシュ処理の別の手順を示す。
SSD3のコントローラ4は、仮想マシンイメージが格納されているネームスペースに対応するブロック群、つまり仮想マシンイメージを格納しているブロック群から、リフレッシュ条件を満たすブロックを検出する(ステップS141)。コントローラ4は、この検出されたブロックからページ単位でデータを読み出し、読み出したデータの誤りをECC回路15を使用して訂正する(ステップS142)。ステップS142では、検出されたブロックの全てのページのデータの誤りが訂正される。
コントローラ4は、検出されたブロックのビット誤り率またはリード回数がデータ移動用の閾値以上であるか否かを判定する(ステップS143)。この閾値は、誤りが訂正されたデータを検出されたブロックとは異なる別のブロックに移動すべきか否かを判定するための閾値である。
検出されたブロックのビット誤り率またはリード回数が閾値未満であるならば(ステップS143のNO)、コントローラ4は、検出されたブロックに消去動作を施して検出されたブロックの全てのメモリセルを消去状態にする(ステップS144)。そして、コントローラ4は、誤りが訂正された全てのページのデータを、検出されたブロックと同じブロックに書き戻す(ステップS145)。
検出されたブロックのビット誤り率またはリード回数が閾値以上であるならば(ステップS143のYES)、コントローラ4は、誤りが訂正された全てのページのデータを、検出されたブロックとは異なる別のブロック(移動先ブロック)に書き込む(ステップS146)。そして、コントローラ4は、検出されたブロックのブロックアドレスが移動先ブロックのブロックアドレスに変換されるように、ブロックアドレス変換テーブルT1を更新して、ブロックアドレス変換テーブルT1に移動先ブロックのブロックアドレスを格納する(ステップS147)。ステップS147では、移動先ブロックのブロックアドレスは、検出されたブロックのブロックアドレスに対応するエントリに格納される。
なお、ここでは、検出されたブロックのビット誤り率またはリード回数が閾値以上である場合にのみ、エラーが訂正されたデータを検出されたブロックとは異なる別のブロック(移動先ブロック)に書き込み、ブロックアドレス変換テーブルT1を更新する場合を説明したが、検出されたブロックのビット誤り率またはリード回数とは無関係に、エラーが訂正されたデータを、検出されたブロックとは異なる別のブロック(移動先ブロック)に書き込み、ブロックアドレス変換テーブルT1を更新してもよい。また、検出されたブロックに消去動作を施した結果、このブロックが不良ブロック(バッドブロック)となる場合もあり得る。この場合にも、エラーが訂正されたデータを、検出されたブロックとは異なる別のブロック(移動先ブロック)に書き込み、ブロックアドレス変換テーブルT1を更新してもよい。
図21のフローチャートは、メモリセル当たりに1ビットのデータが書き込まれる第1の書き込みモードでデータを領域#1(オリジナルの仮想マシンイメージを格納するオリジナルネームスペース)に書き込み、メモリセル当たりに複数のビットのデータが書き込まれる第2の書き込みモードでデータを領域#31(または領域#32)に書き込む処理の手順を示す。
SSD3のコントローラ4は、書き込み先のネームスペースがオリジナルの仮想マシンイメージを格納すべきオリジナルネームスペース(領域#1、または領域#2)であるか否かを判定する(ステップS151)。
書き込み先のネームスペースがオリジナルネームスペース(領域#1、または領域#2)であるならば、コントローラ4は、メモリセル当たりに1ビットのデータが書き込まれる書き込みモード(SLCモード)で、データ(ここでは、オペレーティングシステムのバイナリイメージ、等)をオリジナルネームスペース(領域#1、または領域#2)に書き込む(ステップS152)。換言すれば、コントローラ4は、メモリセル当たりに1ビットのデータが書き込まれる書き込みモード(SLCモード)を使用して、領域#1または領域#2へのデータ書き込みを実行する。
一方、書き込み先のネームスペースが仮想マシン用の仮想ストレージとして利用されるネームスペース(領域#31、領域#32、または領域#33)であるならば、コントローラ4は、メモリセル当たりに複数ビットのデータが書き込まれる書き込みモード(MLCモードまたはTLCモード)で、データを、仮想ストレージとして利用されるネームスペース(領域#31、領域#32、または領域#33)に書き込む(ステップS153)。換言すれば、コントローラ4は、メモリセル当たりに複数ビットのデータが書き込まれる書き込みモード(MLCモードまたはTLCモード)を使用して、領域#31または領域#32へのデータ書き込みを実行する。
図22は、複数のSSD3を含むサーバ(ホスト計算機)100の構成例を示す。
このサーバ(ホスト計算機)100として機能する情報処理装置は、ラックに収容可能な薄い箱形の筐体301を備える。多数のSSD3は筐体301内に配置されてもよい。この場合、各SSD3は筐体301の前面301Aに設けられたスロットに取り外し可能に挿入されてもよい。
システムボード(マザーボード)302は筐体301内に配置される。システムボード(マザーボード)302上においては、物理CPU、物理メモリ、物理NICを含む様々な電子部品が実装されている。
以上説明したように、本実施形態によれば、サーバ(ホスト計算機)100からの要求に応じて、オリジナルデータ(第1のデータ)を格納している領域#1に対応するLUT#1の内容が、領域#31に対応するLUT#31にコピーされる。そして、サーバ(ホスト計算機)100からの領域#31の論理アドレスを指定するリード要求の受信の度、LUT#31に基づいて、第1のデータの一部が領域#1から読み出されてサーバ(ホスト計算機)100に返される。したがって、領域#1に格納されている第1のデータを領域#31にコピーすることなく、領域#1に格納されている第1のデータを、領域#31の論理アドレスそれぞれを介してリードアクセスすることができる。
また、領域#31の論理アドレスを指定するライト要求がサーバ(ホスト計算機)100から受信された場合、書き込まれるべき第2のデータが領域#31に書き込まれると共に、第2のデータが書き込まれた領域#31内の物理記憶位置を示す物理アドレスがライト要求によって指定された論理アドレスにマッピングされるようにLUT#31が更新される。このように、LUT#31が更新されるので、第2のデータが領域#31に書き込まれた後に第2のデータに対するリード要求がサーバ(ホスト計算機)100から受信された場合には、この更新されたLUT#31に基づいて、第2のデータを領域#31から読み出してサーバ(ホスト計算機)100に返すことができる。このように、書き込まれるべきデータは領域#31に書き込まれ、領域#31に書き込まれたデータは領域#31から読み出される。したがって、領域#1のオリジナルデータ(第1のデータ)が複数の領域(領域#31、#32、…)によって共有されている場合であっても、矛盾が発生することはない。また、領域#1はもっぱらリードに使用されることになるので、領域#1の書き替え回数を低い値に維持することができる。
また、第1の領域に割り当てられているブロック群からリフレッシュ条件を満たすブロックが検出され、検出されたブロック内のデータの誤りが訂正され、誤りが訂正されたデータが、検出されたブロックと同じブロックに書き戻される。したがって、LUT#1、LUT#31を更新することなく、第1の領域のリフレッシュ動作を実行することができる。領域#1に割り当てられた各ブロックの書き換え回数は非常に少ない。したがって、たとえ誤りが訂正されたデータが検出されたブロックと同じブロックに書き戻されても、このブロックの書き替え回数(プログラム/イレーズサイクルの数)が制限値に近づくことはない。よって、誤りが訂正されたデータを検出されたブロックと同じブロックに書き戻すという改良されたリフレッシュ動作は、領域#1に割り当てられた各ブロックの信頼性を効率良く改善することができる。
なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、21…ネームスペース管理部、22…LUTコピー制御部、23…ライト禁止制御部、24…リード/ライト制御部、25…リフレッシュ制御部、100…サーバ(ホスト計算機)。
Claims (15)
- ホスト計算機に接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリ内の複数の領域を管理し、前記複数の領域は、他の領域から参照される第1のデータを格納している第1の領域と、前記第1のデータを参照する第2の領域とを含み、
前記ホスト計算機からの要求に応じて、前記第1の領域に対応する第1の論理物理アドレス変換テーブルの内容を、前記第2の領域に対応する第2の論理物理アドレス変換テーブルにコピーし、
前記ホスト計算機からの前記第2の領域の論理アドレスを指定するリード要求に応じて、前記第2の論理物理アドレス変換テーブルに基づいて、前記第1のデータの一部を前記第1の領域から読み出して前記ホスト計算機に返し、
前記ホスト計算機からの前記第2の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第2のデータを前記第2の領域に書き込むと共に、前記第2のデータが書き込まれた前記第2の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第2の論理物理アドレス変換テーブルを更新し、
前記第1の領域に割り当てられている前記不揮発性メモリの第1のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す、メモリシステム。 - 前記第1の領域は、オペレーティングシステムを前記第1のデータとして格納しており、
前記第2の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムを実行する請求項1記載のメモリシステム。 - 前記第1の領域は、オペレーティングシステムおよびアプリケーションプログラムを前記第1のデータとして格納しており、
前記第2の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムおよび前記アプリケーションプログラムを実行する請求項1記載のメモリシステム。 - 前記コントローラは、前記第2のデータが前記第2の領域に書き込まれた後に前記第2のデータに対するリード要求を前記ホスト計算機から受信した場合、前記更新された第2のアドレス変換テーブルに基づいて、前記第2のデータを前記第2の領域から読み出して前記ホスト計算機に返す請求項1記載のメモリシステム。
- 前記複数の領域は、前記第1のデータを参照する第3の領域をさらに含み、
前記コントローラは、
前記ホスト計算機からの要求に応じて、前記第1の論理物理アドレス変換テーブルの内容を、前記第3の領域に対応する第3の論理物理アドレス変換テーブルにコピーし、
前記ホスト計算機からの前記第3の領域の論理アドレスを指定するリード要求に応じて、前記第3の論理物理アドレス変換テーブルに基づいて、前記第1のデータの一部を前記第1の領域から読み出して前記ホスト計算機に返し、
前記ホスト計算機からの前記第3の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第3のデータを前記第3の領域に書き込むと共に、前記第3のデータが書き込まれた前記第3の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第3の論理物理アドレス変換テーブルを更新する請求項1記載のメモリシステム。 - 前記コントローラは、
前記ホスト計算機からの要求に応じて、前記第1のデータを前記第1の領域に書き込み、
前記第1のデータの書き込みの完了の後に、前記第1の領域を、前記第1の領域への書き込みが禁止されるリードオンリーモードに設定する請求項1記載のメモリシステム。 - 前記コントローラは、
前記検出されたブロックのビット誤り率またはリード回数が閾値以上である場合、前記誤りが訂正されたデータを前記検出されたブロックとは異なる別のブロックに書き込み、
前記第1の論理物理アドレス変換テーブルまたは前記第2の論理物理アドレス変換テーブルから取得された物理アドレス内に含まれる前記検出されたブロックのブロックアドレスが前記別のブロックのブロックアドレスに変換されるように、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理するブロックアドレス変換テーブルに前記別のブロックのブロックアドレスを格納する請求項1記載のメモリシステム。 - 前記第1の領域に割り当てられている前記第1のブロック群は、メモリセル当たりに1ビットのデータを格納可能な第1のタイプのブロック群であり、
前記第2の領域に割り当てられている前記不揮発性メモリの第2のブロック群は、メモリセル当たりに複数ビットのデータを格納可能な第2のタイプのブロック群である請求項1記載のメモリシステム。 - 前記コントローラは、
メモリセル当たりに1ビットのデータが書き込まれる第1の書き込みモードを使用して前記第1の領域へのデータ書き込みを実行し、
メモリセル当たりに複数ビットのデータが書き込まれる第2の書き込みモードを使用して前記第2の領域へのデータ書き込みを実行する請求項1記載のメモリシステム。 - ホスト計算機に接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリ内の複数の領域を管理し、前記複数の領域は、他の領域から参照される第1のデータを格納している第1の領域と、前記第1のデータを参照する第2の領域とを含み、
前記ホスト計算機からの要求に応じて、前記第1の領域に対応する第1の論理物理アドレス変換テーブルの内容を、前記第2の領域に対応する第2の論理物理アドレス変換テーブルにコピーし、
前記ホスト計算機からの前記第2の領域の論理アドレスを指定するリード要求に応じて、前記第2の論理物理アドレス変換テーブルに基づいて、前記第1のデータの一部を前記第1の領域から読み出して前記ホスト計算機に返し、
前記ホスト計算機からの前記第2の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第2のデータを前記第2の領域に書き込むと共に、前記第2のデータが書き込まれた前記第2の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第2の論理物理アドレス変換テーブルを更新し、
前記第1の領域に割り当てられている前記不揮発性メモリの第1のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックとは異なる別のブロックに書き込み、
前記第1の論理物理アドレス変換テーブルまたは前記第2の論理物理アドレス変換テーブルから取得された物理アドレス内に含まれる前記検出されたブロックのブロックアドレスが前記別のブロックのブロックアドレスに変換されるように、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理するブロックアドレス変換テーブルに前記別のブロックのブロックアドレスを格納する、メモリシステム。 - 前記第1の領域は、オペレーティングシステムを前記第1のデータとして格納しており、
前記第2の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムを実行する請求項10記載のメモリシステム。 - 前記第1の領域は、オペレーティングシステムおよびアプリケーションプログラムを前記第1のデータとして格納しており、
前記第2の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムおよび前記アプリケーションプログラムを実行する請求項10記載のメモリシステム。 - 仮想マシンが実行される仮想化環境を含むサーバに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリ内の複数の領域を管理し、前記複数の領域は、前記仮想マシン用のゲストオペレーティングシステムとして利用されるオペレーティングシステムを格納している第1の領域と、前記仮想マシンによってアクセスされる仮想ストレージとして利用される第2の領域とを含み、
前記第1の領域に対応する第1の論理物理アドレス変換テーブルの内容を、前記第2の領域に対応する第2の論理物理アドレス変換テーブルにコピーし、
前記仮想マシンからの前記第2の領域の論理アドレスを指定するリード要求に応じて、前記第2の論理物理アドレス変換テーブルに基づいて、前記オペレーティングシステムの一部を前記第1の領域から読み出して前記仮想マシンに返し、
前記仮想マシンからの前記第2の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第2のデータを前記第2の領域に書き込むと共に、前記第2のデータが書き込まれた前記第2の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第2の論理物理アドレス変換テーブルを更新し、
前記第1の領域に割り当てられている前記不揮発性メモリの第1のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す、メモリシステム。 - 前記第1の領域は、前記オペレーティングシステムおよびアプリケーションプログラムを格納しており、
前記仮想マシンは、前記オペレーティングシステムおよび前記アプリケーションプログラムを実行する請求項13記載のメモリシステム。 - 前記コントローラは、
前記検出されたブロックのビット誤り率またはリード回数が閾値以上である場合、前記誤りが訂正されたデータを前記検出されたブロックとは異なる別のブロックに書き込み、
前記第1の論理物理アドレス変換テーブルまたは前記第2の論理物理アドレス変換テーブルから取得された物理アドレス内に含まれる前記検出されたブロックのブロックアドレスが前記別のブロックのブロックアドレスに変換されるように、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理するブロックアドレス変換テーブルに前記別のブロックのブロックアドレスを格納する請求項13記載のメモリシステム。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017126616A JP2019008730A (ja) | 2017-06-28 | 2017-06-28 | メモリシステム |
US15/820,516 US10719393B2 (en) | 2017-06-28 | 2017-11-22 | Memory system for controlling nonvolatile memory |
CN201810021540.6A CN109144888B (zh) | 2017-06-28 | 2018-01-10 | 存储器系统 |
US16/909,015 US11221914B2 (en) | 2017-06-28 | 2020-06-23 | Memory system for controlling nonvolatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017126616A JP2019008730A (ja) | 2017-06-28 | 2017-06-28 | メモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2019008730A true JP2019008730A (ja) | 2019-01-17 |
Family
ID=64734411
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017126616A Pending JP2019008730A (ja) | 2017-06-28 | 2017-06-28 | メモリシステム |
Country Status (3)
Country | Link |
---|---|
US (2) | US10719393B2 (ja) |
JP (1) | JP2019008730A (ja) |
CN (1) | CN109144888B (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020123038A (ja) * | 2019-01-29 | 2020-08-13 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP2020123039A (ja) * | 2019-01-29 | 2020-08-13 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP2022007376A (ja) * | 2020-06-26 | 2022-01-13 | キオクシア株式会社 | メモリシステムおよび制御方法 |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2015204126A (ja) * | 2014-04-16 | 2015-11-16 | 株式会社東芝 | 半導体記憶装置 |
CN105278876B (zh) * | 2015-09-23 | 2018-12-14 | 华为技术有限公司 | 一种固态硬盘的数据擦除方法及装置 |
JP7030463B2 (ja) | 2017-09-22 | 2022-03-07 | キオクシア株式会社 | メモリシステム |
JP6837419B2 (ja) * | 2017-12-05 | 2021-03-03 | ルネサスエレクトロニクス株式会社 | 半導体記憶装置、及び半導体記憶装置のリフレッシュ方法 |
US10990520B2 (en) * | 2018-12-10 | 2021-04-27 | Storart Technology Co., Ltd. | Method for gabage collecting for non-volatile memory |
KR20200084200A (ko) * | 2019-01-02 | 2020-07-10 | 에스케이하이닉스 주식회사 | 컨트롤러 및 컨트롤러의 동작방법 |
KR20200085510A (ko) * | 2019-01-07 | 2020-07-15 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 동작 방법과, 이를 위한 컨트롤러 |
CN109828931B (zh) * | 2019-01-25 | 2020-12-01 | 深圳忆联信息系统有限公司 | 一种dram碎片管理方法及其装置 |
TWI698749B (zh) * | 2019-03-13 | 2020-07-11 | 慧榮科技股份有限公司 | 資料儲存裝置與資料處理方法 |
JP6898393B2 (ja) * | 2019-03-22 | 2021-07-07 | 株式会社日立製作所 | ストレージシステム及びデータ転送方法 |
US11061787B2 (en) * | 2019-04-23 | 2021-07-13 | Micron Technology, Inc. | Custom error recovery in selected regions of a data storage device |
CN110209602A (zh) * | 2019-05-17 | 2019-09-06 | 北京航空航天大学 | 跨域虚拟数据空间中区域划分及空间分配方法 |
US10860228B1 (en) * | 2019-06-24 | 2020-12-08 | Western Digital Technologies, Inc. | Method to switch between traditional SSD and open-channel SSD without data loss |
KR20210001206A (ko) * | 2019-06-27 | 2021-01-06 | 에스케이하이닉스 주식회사 | 컨트롤러, 메모리 시스템 및 그것의 동작 방법 |
CN110321081B (zh) * | 2019-07-08 | 2023-06-06 | 深圳忆联信息系统有限公司 | 一种闪存读缓存的方法及其系统 |
JP6942163B2 (ja) * | 2019-08-06 | 2021-09-29 | 株式会社日立製作所 | ドライブボックス、ストレージシステム及びデータ転送方法 |
EP3792800A1 (en) * | 2019-09-12 | 2021-03-17 | Nxp B.V. | Managing equally sized virtual memory regions and physical memory regions in an electronic device |
JP7346311B2 (ja) * | 2020-01-16 | 2023-09-19 | キオクシア株式会社 | メモリシステム |
US11907570B2 (en) | 2020-02-25 | 2024-02-20 | Micron Technology, Inc. | Predictive media management for read disturb |
US12086072B1 (en) * | 2020-03-11 | 2024-09-10 | Amazon Technologies, Inc. | Memory vulnerability mitigation |
US11789611B2 (en) | 2020-04-24 | 2023-10-17 | Netapp, Inc. | Methods for handling input-output operations in zoned storage systems and devices thereof |
JP7457248B2 (ja) * | 2020-05-27 | 2024-03-28 | 株式会社バッファロー | 記憶装置 |
KR20220003757A (ko) | 2020-07-02 | 2022-01-11 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
WO2022021280A1 (zh) * | 2020-07-31 | 2022-02-03 | 华为技术有限公司 | 存储控制器、存储控制方法、固态硬盘及存储系统 |
US11836077B2 (en) | 2020-09-01 | 2023-12-05 | Micron Technology, Inc. | Dynamically tuning host performance booster thresholds |
CN112162935B (zh) * | 2020-09-30 | 2021-06-08 | 深圳市时创意电子有限公司 | 存储芯片的数据处理方法、装置、计算机设备及存储介质 |
CN112199044B (zh) * | 2020-10-10 | 2023-04-25 | 中国人民大学 | 面向多租户的ftl设置方法、系统、计算机程序及存储介质 |
US11762680B2 (en) * | 2020-10-20 | 2023-09-19 | Alilbaba Group Holding Limited | Method and system of host resource utilization reduction |
US12164796B2 (en) * | 2020-12-16 | 2024-12-10 | Kioxia Corporation | Systems and methods for data copy offload for storage devices |
US11340987B1 (en) | 2021-03-04 | 2022-05-24 | Netapp, Inc. | Methods and systems for raid protection in zoned solid-state drives |
JP2022143762A (ja) * | 2021-03-18 | 2022-10-03 | キオクシア株式会社 | メモリシステム、制御方法およびメモリコントローラ |
CN115185450A (zh) * | 2021-04-01 | 2022-10-14 | 戴尔产品有限公司 | 用于迁移、复制和备份的基于阵列的拷贝机制 |
JP2023002294A (ja) * | 2021-06-22 | 2023-01-10 | キオクシア株式会社 | メモリシステムおよびリフレッシュ制御方法 |
US11762735B2 (en) * | 2021-10-01 | 2023-09-19 | Western Digital Technologies, Inc. | Interleaved ECC coding for key-value data storage devices |
US11797377B2 (en) | 2021-10-05 | 2023-10-24 | Netapp, Inc. | Efficient parity determination in zoned solid-state drives of a storage system |
US11714565B2 (en) * | 2021-11-18 | 2023-08-01 | Western Digital Technologies, Inc. | Block budget enhancement mechanisms for memory |
US11803329B2 (en) | 2021-11-22 | 2023-10-31 | Netapp, Inc. | Methods and systems for processing write requests in a storage system |
US11934264B2 (en) | 2021-11-22 | 2024-03-19 | Western Digital Technologies, Inc. | ECC parity biasing for Key-Value data storage devices |
JP2023079292A (ja) * | 2021-11-29 | 2023-06-08 | ラピステクノロジー株式会社 | 半導体記憶装置、データ書込方法及び半導体記憶装置の製造方法 |
EP4449238A1 (en) | 2021-12-16 | 2024-10-23 | NetApp, Inc. | Scalable solid-state storage system and methods thereof |
US11816359B2 (en) | 2021-12-16 | 2023-11-14 | Netapp, Inc. | Scalable solid-state storage system and methods thereof |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6047623B2 (ja) * | 1982-02-12 | 1985-10-22 | 株式会社日立製作所 | アドレス変換方式 |
JP3102495B2 (ja) * | 1989-12-28 | 2000-10-23 | 株式会社日立製作所 | 仮想記憶管理方法 |
JP3579389B2 (ja) * | 2001-11-30 | 2004-10-20 | 株式会社東芝 | ディスクアレイ装置及び同装置におけるデータ復旧方法 |
JP3526452B2 (ja) * | 2001-12-18 | 2004-05-17 | 株式会社東芝 | ディスクアレイ装置及びデータバックアップ方法 |
JP3702231B2 (ja) * | 2002-01-31 | 2005-10-05 | 株式会社東芝 | ディスクアレイ装置及び同装置における動的記憶容量拡張方法 |
US20100174845A1 (en) * | 2009-01-05 | 2010-07-08 | Sergey Anatolievich Gorobets | Wear Leveling for Non-Volatile Memories: Maintenance of Experience Count and Passive Techniques |
JP5221699B2 (ja) * | 2011-03-23 | 2013-06-26 | 株式会社東芝 | 半導体記憶装置 |
US8972651B2 (en) * | 2011-10-05 | 2015-03-03 | Hitachi, Ltd. | Storage system and storage method |
JP5907739B2 (ja) * | 2012-01-26 | 2016-04-26 | 株式会社日立製作所 | 不揮発性記憶装置 |
US8880687B1 (en) * | 2012-02-06 | 2014-11-04 | Netapp, Inc. | Detecting and managing idle virtual storage servers |
CN103377129B (zh) * | 2012-04-11 | 2016-04-06 | 群联电子股份有限公司 | 数据写入方法、存储器控制器与存储器储存装置 |
JP2015162001A (ja) | 2014-02-26 | 2015-09-07 | 富士通株式会社 | ストレージ管理装置、ストレージ装置、及びストレージ管理プログラム |
JP6385556B2 (ja) * | 2015-02-27 | 2018-09-05 | 株式会社日立製作所 | 不揮発性メモリデバイスおよび不揮発性メモリデバイスのデータ記憶方法 |
-
2017
- 2017-06-28 JP JP2017126616A patent/JP2019008730A/ja active Pending
- 2017-11-22 US US15/820,516 patent/US10719393B2/en active Active
-
2018
- 2018-01-10 CN CN201810021540.6A patent/CN109144888B/zh active Active
-
2020
- 2020-06-23 US US16/909,015 patent/US11221914B2/en active Active
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020123038A (ja) * | 2019-01-29 | 2020-08-13 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP2020123039A (ja) * | 2019-01-29 | 2020-08-13 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP7155028B2 (ja) | 2019-01-29 | 2022-10-18 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP7178916B2 (ja) | 2019-01-29 | 2022-11-28 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP2023010765A (ja) * | 2019-01-29 | 2023-01-20 | キオクシア株式会社 | メモリシステム |
JP7392080B2 (ja) | 2019-01-29 | 2023-12-05 | キオクシア株式会社 | メモリシステム |
JP2022007376A (ja) * | 2020-06-26 | 2022-01-13 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP7475989B2 (ja) | 2020-06-26 | 2024-04-30 | キオクシア株式会社 | メモリシステムおよび制御方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109144888A (zh) | 2019-01-04 |
US20200319966A1 (en) | 2020-10-08 |
US20190004964A1 (en) | 2019-01-03 |
US11221914B2 (en) | 2022-01-11 |
US10719393B2 (en) | 2020-07-21 |
CN109144888B (zh) | 2023-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109144888B (zh) | 存储器系统 | |
US12038834B2 (en) | Memory system and method for controlling nonvolatile memory during command processing without replacing defective blocks | |
US11669444B2 (en) | Computing system and method for controlling storage device | |
JP6785205B2 (ja) | メモリシステムおよび制御方法 | |
CN109725846B (zh) | 存储器系统及控制方法 | |
JP6785204B2 (ja) | メモリシステムおよび制御方法 | |
JP6414852B2 (ja) | メモリシステムおよび制御方法 | |
CN114258535A (zh) | 使用PCIe连接的远存储器的存储器分层 | |
JP7178916B2 (ja) | メモリシステムおよび制御方法 | |
KR102281750B1 (ko) | 비-휘발성 메모리에서 데이터 유효성 추적 | |
JP2020021232A (ja) | 情報処理システム | |
US10861580B2 (en) | Memory system for controlling nonvolatile memory | |
JP7013546B2 (ja) | メモリシステム | |
CN113064548A (zh) | 存储器子系统中的逻辑到物理页转译中的相干性问题解决方案 | |
JP7524443B2 (ja) | メモリシステムおよび制御方法 | |
JP7167295B2 (ja) | メモリシステムおよび制御方法 | |
JP7567009B2 (ja) | メモリシステムおよび制御方法 | |
JP7204020B2 (ja) | 制御方法 | |
JP6666405B2 (ja) | メモリシステムおよび制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20180830 |