以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、一実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、サーバ、パーソナルコンピュータのような情報処理装置である。ホスト2として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク50を介して複数のエンドユーザ端末(クライアント)90に接続されてもよい。ホスト2は、これらエンドユーザ端末90に対して様々なサービスを提供することができる。
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム開発プラットフォームを各クライアント(各エンドユーザ端末90)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末90)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシン#1、#2、#3、…#nが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。これら仮想マシン#1、#2、#3、…#nは、対応するクライアント(エンドユーザ端末90)に各種サービスを提供するように構成された仮想サーバとして機能することができる。
なお、コンテナ型仮想化環境がホスト(サーバ)2に適用されてもよい。この場合には、ホスト(サーバ)2のオペレーティングシステム上に複数のコンテナ(複数のユーザ空間)それぞれが配置される。これらコンテナの各々は、アプリケーションを実行するための独立したリソースを含み、仮想マシン(仮想サーバ)と同等の機能を実行することができる。
SSD3は、ホスト2として機能する情報処理装置(計算機)のメインストレージとして使用され得る。SSD3は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)、Ethernet(登録商標),Fibre channel、NVM Express(NVMe)(登録商標)等を使用し得る。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。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を制御するように構成されたメモリコントローラ(制御回路)である。このコントローラ4は、例えば、ワンチップLSIによって実現されていてもよい。
NAND型フラッシュメモリ5は、図2に示すように、複数のNAND型フラッシュメモリダイ(図2においては「NANDダイ」として示されている)を含む。各NAND型フラッシュメモリダイは、複数のブロックを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のNAND型フラッシュメモリダイは独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作単位として機能する。NAND型フラッシュメモリダイは、「NAND型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。
図2においては、NANDインタフェース13に8つのチャンネルCh1、Ch2、…Ch8が接続されており、これらチャンネルCh1、Ch2、…Ch8の各々に、同数(例えばチャンネル当たり4個のダイ)のNAND型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するNAND型フラッシュメモリダイと通信するための通信線(メモリバス)を含む。
コントローラ4は、チャンネルCh1、Ch2、…Ch8を介してNAND型フラッシュメモリダイ#1〜#32を制御する。コントローラ4は、チャンネルCh1、Ch2、…Ch8を同時に駆動することができる。
本実施形態では、コントローラ4は、NAND型フラッシュメモリダイの各々が一つの物理セットにのみ属するように、32個のNAND型フラッシュメモリダイ#1〜#32を、複数の物理セット(NVMセット)に分類する。これら物理セットは、ある一つの物理セットが一つの専用チャンネルを含むようにチャンネル境界で分離されてもよい。この場合、ある一つの物理セットは、専用チャンネル上の専用の4個のダイを含む。あるいは、これら物理セットの各々は、チャンネルCh1、Ch2、…Ch8に跨がっていてもよい。この場合、各物理セットは、異なる8つのチャンネルにそれぞれ接続された専用の幾つかのダイ(例えば8個のダイ)を含んでもよい。
このように、本実施形態では、NAND型フラッシュメモリダイ#1〜#32の各々が一つの物理セットにのみ属するように不揮発性メモリダイ#1〜#32を複数の物理セットに分類することによって、互いに分離された複数の物理セットが管理される。
上述したように、個々のNAND型フラッシュメモリダイは独立して動作することができるので、各NAND型フラッシュメモリダイは並列処理の単位として機能し得る。
しかし、通常、一つのNAND型フラッシュメモリダイに対する動作は、並列には実行されず、逐次的に実行される。このため、もし書き込み動作が実行されているNAND型フラッシュメモリダイへのリード要求が起きると(リード・オン・ライト・ダイ・コンテンション)、そのリード要求の応答時間(リードレイテンシ)は非常に長くなる場合がある。
SSD3は、複数のエンドユーザ(複数のテナント)によって共有されるストレージとして機能する。したがって、SSD3においては、エンドユーザ間のアクセスの競合(あるエンドユーザからのライトアクセスと別のエンドユーザからのリードアクセスとの間の衝突)に起因して長いリードレイテンシが生じる場合がある。より詳しくは、もしあるエンドユーザからのライト要求に応じてあるNAND型フラッシュメモリダイへの書き込み動作が実行されている間に、別のエンドユーザからのリード要求に応じてこのNAND型フラッシュメモリダイからデータのリードが必要とされたならば、このリード要求は、実行中の書き込み動作が完了するまでは実行することができない。これにより、長いリードレイテンシが生じる可能性がある。
安定したリードレイテンシを実現する方法の一つとしては、専用のチャンネルまたは専用の幾つかのダイを使用して、複数のエンドユーザのための複数の記憶領域を作成する方法が考えられる。
この方法は、各記憶領域に専用のチャンネルまたは専用の幾つかのダイを割り当てることによって、これら記憶領域を互いに完全に分離する。よって、複数のエンドユーザは異なるチャンネルまたは異なるダイをそれぞれ使用するので、あるエンドユーザからのライトアクセスと別のエンドユーザからのリードアクセスとの間の衝突を防ぐことができる。
しかし、この方法では、一つのSSDを共用するエンドユーザの最大数、つまりI/O性能を保証可能なエンドユーザの最大数は、一つのSSD内に含まれるチャンネルの数またはダイの数までに制限されてしまう。近年では、3次元NAND型フラッシュメモリの開発等によって、一つのダイの容量は増加する傾向にある。ダイ当たりの容量の増加は、あるストレージ容量を有するSSDを実現するためにそのSSDに搭載することが必要なダイの数が減少されることに繋がる。したがって、上述の方法では、ダイ当たりの容量の増加に起因して、一つのSSDを共用可能なエンドユーザの最大数、つまりI/O性能を保証可能なエンドユーザの最大数、の減少を招くという現象が生じうる。
またさらに、記憶領域を互いに完全に分離する上述の方法では、ある特定の幾つかのチャンネルまたはある特定の幾つかのダイにデータ書き込みが集中してしまう場合がある。この場合、この特定の幾つかのブロックのプログラム/イレーズサイクルの数が早く制限値に達しやすくなり、この結果、SSDの寿命が短くなる可能性がある。
そこで、本実施形態では、SSD3は、異なるNAND型フラッシュメモリダイを含む複数の物理セットの各々を共有する複数の記憶領域を作成する。これら記憶領域の各々は、複数の物理セットに跨っている。これら記憶領域は、互いに独立したSSDであるかのように動作する仮想SSD(VSSD)として機能し得る。これら記憶領域(VSSD)は、異なるネームスペースの識別子によって識別されてもよい。
複数の物理セットの各々から取得される幾つかのブロックが各記憶領域(VSSD)にその物理リソースとして割り当てられる。複数の記憶領域がそれぞれ専用の物理セットを含むのではなく、複数の記憶領域が複数の物理セットの各々を共有する。したがって、本実施形態では、無数の記憶領域(無数のVSSD)を作成することができる。このことは、記憶領域を互いに完全に分離する方法に比較して、より多くのエンドユーザを一つのSSD3上に共存させることを可能とする。
本実施形態のSSD3においては、データ書き込みは、複数の物理セットの少なくとも一つ(例えば、一つの物理セットまたは2つの物理セット)のみに許可される。一方、データ読み出しは、他の全ての物理セットに対して許可される。例えば、複数の物理セットのうちの一つの物理セットは、ライト動作およびリード動作が許可された第1モード(以下、ライト許可モードという)に設定され、残りの全ての物理セットはリード動作が許可され且つライト動作が禁止された第2のモード(以下、リードオンリーモードという)に設定される。ライト許可モードの物理セットにおいては、ホスト2からのデータ書き込みが許可される。さらに、ライト許可モードの物理セットにおいては、ガベージコレクションによるデータ書き込み(データコピー)も許可される。
複数の記憶領域(複数のVSSD)のいずれか一つの記憶領域(VSSD)を指定するパラメータを含むライト要求がホスト2から受信された時、ライトデータは、ライト許可モードに現在設定されている特定の物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに書き込まれる。書き込み先ブロックとは、ホスト2からのライトデータの書き込みに利用されるブロックを意味する。書き込み先ブロックは、インプットブロックと称されることもある。
本実施形態では、ライト許可モードに設定されるべき物理セットは、複数の物理セット間で順番に変更される。
したがって、ある期間においては、ホスト2からのどのライトデータも、ライト許可モードに現在設定されている特定の物理セット内の書き込み先ブロックに書き込まれ、リードオンリーモードに現在設定されている物理セットに書き込まれることはない。よって、リード・オン・ライト・ダイ・コンテンションが生じる可能性がある物理セットを、ライト許可モードに現在設定されている特定の物理セットのみに制限することができる。残りの全ての物理セットはリードオンリーモードであるので、残りの全ての物理セットにおいては、データ書き込み動作は実行されない。したがって、残りの全ての物理セットにおいては、リード・オン・ライト・ダイ・コンテンションは生じない。
この結果、本実施形態のSSD3では、リード・オン・ライト・ダイ・コンテンションが生じる確率を、全ての物理セットへのデータ書き込みが常に許可される通常のSSDに比べて低減することができ、これによってSSD3を共有する複数のエンドユーザ間のアクセス競合(リード・オン・ライト・ダイ・コンテンション)によるI/O性能の低下を低減することができる。
また、本実施形態では、各物理セットは複数のVSSDによって共有されており、且つライト許可モードに設定されるべき物理セットが複数の物理セット間で順番に変更される。したがって、どの記憶領域(どのVSSD)についても、データ書き込みを複数の物理セットに分散させることが可能となり、これによって物理セット間の消耗の差(物理セット間のプログラム/イレーズサイクルの数の差)を小さくすることができる。このことは、SSD3の寿命を最大化することを可能にする。
このように、本実施形態のSSD3は、複数のVSSDを管理する機能(以下、「仮想SSD(VSSD)プラットホーム」と云う)を有している。このVSSDプラットホームは、仮想マシン#1、#2、#3、…#nのような複数の仮想サーバがSSD3の複数のVSSDを利用することを可能にし、さらにまた複数の仮想サーバが直接的に複数のVSSDをアクセスすることを可能にする。
一つの仮想マシンに対してSSD3内の1つ以上のVSSDが、この仮想マシンに専用のストレージリソース(仮想ディスク)として割り当てられてもよい。
ここで、仮想ディスクとは、仮想マシン上で実行されるゲストオペレーティングシステムが物理ディスクとして認識する一種のファイルを意味する。各仮想マシンは、この仮想マシンに割り当てられた仮想ディスクを物理ディスクとして扱うことができる。
SSD3は、容量/性能(耐久性)に関する特徴が互いに異なる様々な記憶領域(VSSD)を作成および管理することができる。また、SSD3は、ホスト2によって削除(リムーブ)が要求されたVSSDを削除することもできる。あるVSSDの削除によって増加されるNAND型フラッシュメモリ5内のフリーエリアは、新たなVSSDの作成に利用され得る。
VSSDは、仮想ディスクと同等の機能を有する。したがって、SSD3は、仮想ディスクを作成および管理するためのエミュレーション機能をホスト2からSSD3にオフロードすることを可能にする。これによって、ホスト2がストレージ管理のために実行することが必要な処理量を低減でき、この結果、ホスト2のI/O性能の向上を図ることができる。
また、コントローラ4は、NAND型フラッシュメモリ5のデータ管理とNAND型フラッシュメモリ5のブロック管理とを実行するように構成されたフラッシュトランスレーション層(FTL)としても機能することができる。
このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトと物理ブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス(LBA)が使用される。
論理ブロックアドレス(LBA)それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)を用いて実行される。
本実施形態では、コントローラ4は、複数のVSSD(VSSD#1、VSSD#2、…VSSD#n)にそれぞれ対応する複数のルックアップテーブルLUT#1、LUT#2、…LUT#nを使用して、VSSD毎に、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを管理する。
あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNAND型フラッシュメモリ5内の物理記憶位置を示す。ルックアップテーブルLUT#1、LUT#2、…LUT#nは、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。一般に、各ルックアップテーブルのサイズは、比較的大きい。したがって、各ルックアップテーブルの少なくとも一部がDRAM6にアドレス変換テーブルキャッシュとして格納されてもよい。
NAND型フラッシュメモリ5においては、ページへのデータ書き込みは、1消去サイクル当たり1回のみ可能である。このため、コントローラ4は、あるLBAに対応する更新データを、このLBAに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、対応するルックアップテーブル(LUT)を更新してこのLBAをこの別の物理記憶位置に関連付け、そして以前のデータを無効化する。
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
ウェアレベリングは、SSD3内のブロックそれぞれの消耗を均一化するための動作である。
ガベージコレクション(GC)は、データを書き込むことが可能なフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかのGC対象ブロック(GCソースブロックとも云う)内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、LUTから参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)であって、後にホスト2からリードされる可能性があるデータを意味する。無効データとは、もはやホスト2からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。そして、コントローラ4は、コピーされた有効データのLBAそれぞれを、その有効データのコピー先物理アドレスにマッピングする。有効データが別のブロック(コピー先ブロック)にコピーされることによって無効データのみになったブロックは、フリーブロックとして解放される。これによって、このブロックはその消去動作が実行された後に再利用することが可能となる。
本実施形態では、コントローラ4は、まず、同じVSSDに関連付けられた有効データをガベージコレクション(GC)によって同じ幾つかのブロックに集める。そして、その後は、コントローラ4は、VSSD毎に独立してガベージコレクション(GC)を実行する。これにより、異なるエンドユーザのデータを異なるブロックに存在させることが可能となるので、たとえあるVSSDのガベージコレクションが実行中であっても、このガベージコレクションが、他のVSSDに対する通常のアクセスに悪影響を及ぼす可能性を大幅に低減することができる。この結果、いわゆるノイジーネイバー問題を解決することができる。
次に、コントローラ4の構成について説明する。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、およびDRAMインタフェース14等を含む。これらCPU12、NANDインタフェース13、DRAMインタフェース14は、バス10を介して相互接続される。
このホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってよい。ホストインタフェース11は、ホスト2から様々な要求(コマンド)を受信する。これら要求(コマンド)には、ライト要求(ライトコマンド)、リード要求(リードコマンド)、VSSD管理のための要求(VSSD管理コマンド)等が含まれる。
ライトコマンドは、SSD3に対し、このライトコマンドによって指定されたデータをライトするように要求する。ライトコマンドは、開始LBAと、転送長と、データが書き込まれるべきVSSDを指定するためのVSSD指定パラメータとを含んでいてもよい。上述の複数のVSSDは、複数のネームスペースによって実現され得る。複数のVSSDが複数のネームスペースによって実現されている場合には、ネームスペースの識別子(NSID)を、VSSD指定パラメータとして利用することができる。ライトコマンド内のNSIDは、データが書き込まれるべきネームスペース(ここでは、データが書き込まれるべきVSSD)を一意に識別するための識別子である。
リードコマンドは、SSD3に対し、このリードコマンドによって指定されたデータをリードするように要求する。リードコマンドは、開始LBAと、転送長と、データがリードされるべきVSSDを指定するためのVSSD指定パラメータとを含んでいてもよい。上述の複数のVSSDが複数のネームスペースによって実現されている場合には、ネームスペースの識別子(NSID)を、VSSD指定パラメータとして利用することができる。リードコマンド内のNSIDは、データがリードされるべきネームスペース(ここでは、データがリードされるべきVSSD)を一意に識別するための識別子である。
VSSD管理コマンドは、SSD3に対し、VSSDの作成または削除を要求するコマンドである。VSSD管理コマンドは、個々のエンドユーザのストレージ要件に適合したVSSDを作成するための様々なパラメータを含んでいてもよい。データセンタープロバイダは、個々のエンドユーザの容量/性能のニーズに応じて、これらエンドユーザに提供するストレージ(VSSD)の容量、性能を自由に設定することができる。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。このCPU12は、例えば、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、VSSD作成部21、書き込み可能物理セット変更部22、ガベージコレクション(GC)制御部23、リードキャッシュ制御部24、データコピー制御部25として機能することができる。
VSSD作成部21は、複数のVSSDを管理するためのマルチVSSD管理機能を有する。各VSSDは、不揮発性メモリであるNAND型フラッシュメモリ5内の一種の論理的な領域(記憶領域)に相当する。各VSSDは、すべての物理セットに跨るように作成される。各VSSDは、すべての物理セットの各々からこのVSSD用に割り当てられた一つ以上のブロックを含む。
VSSD作成部21は、複数のNAND型フラッシュメモリダイ#1〜#32の各々が一つの物理セットにのみ属するようにNAND型フラッシュメモリダイ#1〜#32を複数の物理セットに分類し、そして、ホスト2からのVSSDそれぞれの作成要求に基づいて、複数の物理セットの各々を共有する複数の記憶領域(VSSD)であって、各々が複数の物理セットに跨る複数の記憶領域(VSSD)を作成する。
ホスト2は、上述のVSSD管理コマンドを使用してVSSDそれぞれの作成をSSD3に要求することができる。VSSD作成部21は、ホスト2によって指定された容量/性能(耐久性)等に関する要件を満たすVSSDそれぞれを作成することができる。
ホスト2は、幾つかのVSSD管理コマンドをSSD3に発行することにより、容量/性能(耐久性)等に関するパラメータをVSSD毎に指定することができる。
VSSDの性能(耐久性)に関するパラメータは、例えば、VSSDのオーバープロビジョニング領域の容量を指定するパラメータであってもよい。ここで、オーバープロビジョン領域について説明する。
オーバープロビジョニングは、ホスト2に利用可能なユーザスペース(「ユーザアクセス可能LBAスペース」、または「visible region」とも云う)として見えないSSD3内のストレージ容量を割り当てることを意味する。VSSDは、ユーザ領域とオーバープロビジョン領域とを含み得る。ユーザ領域の容量は、ホスト2にユーザアクセス可能LBAスペースとして見えるストレージ容量である。一方、ホスト2にユーザアクセス可能LBAスペースとして見えないストレージ容量が割り当てられたスペースが、オーバープロビジョン領域である。オーバープロビジョニングにより、ユーザアクセス可能LBAスペース(ユーザ領域の容量)を超える容量に対応するブロック群をこのVSSDへのデータ書き込みに使用することができる。
通常のSSDにおいては、ホストはあるネームスペース用のLBAの数をユーザ領域の容量として指定することはできても、このネームスペース用に割り当てるべきオーバープロビジョニング領域の容量を指定することはできない。また、通常は、ただ一つのオーバープロビジョン領域のみが、1台のSSD内に設定される。
これに対し、本実施形態では、ホスト2からの要求に応じて、VSSD毎に、ユーザ領域の容量(このVSSDに割り当てられるLBAの数)のみならず、オーバープロビジョニング領域の容量を設定することができる。
例えば、データ書き込み量が多いVSSD(頻繁に更新されるデータが書き込まれるVSSD)に関しては、ホスト2は、ユーザ領域の容量に対するオーバープロビジョン領域の容量の比率、つまり[オーバープロビジョン領域の容量] / [ユーザ領域の容量]、が比較的大きな値になるように、オーバープロビジョニング領域の容量を指定してもよい。
ユーザ領域の容量に対するオーバープロビジョン領域の容量の比率が大きいVSSDにおいては、この大きなサイズのオーバープロビジョン領域の活用によって、このVSSDのライトアンプリフィケーションを効率よく減少することができる。なぜなら、たとえこのVSSDのユーザ領域の容量に対応するブロック群すべてがデータで満たされ、この結果、これらブロックがそのブロックの消去動作無しで利用可能ページを含まない状態になっても、これらブロックの代わりに、オーバープロビジョン領域に対応する数のブロック群をデータのライト(データ更新)に使用することができるからである。よって、このVSSDのガベージコレクションが実行されるタイミングを十分に遅らせることができる。オーバープロビジョン領域のブロック群に更新データがライトされるにつれ、ユーザ領域のブロック群内のデータはその更新によって無効化される。全てのデータが無効化されたブロックはそのガベージコレクションなしで再利用することができる。したがって、このVSSDのライトアンプリフィケーションを効率よく減少することができるので、このVSSDのブロック群のライト/イレーズ回数を低く抑えることができる。このことは、このVSSDの耐久性を向上させることできることを意味している。
書き込み可能物理セット変更部22は、複数の物理セット内の少なくとも一つの物理セットをライト動作およびリード動作が許可されたライト許可モードに設定し、且つ複数の物理セット内の他の物理セットそれぞれをリード動作が許可され且つライト動作が禁止されたリードオンリーモードに設定する。ライト許可モードに設定されている物理セットにおいては、ホスト2からのデータ書き込みのみが許可されるだけでなく、ガベージコレクションによるデータ書き込み(データコピー)も許可される。
さらに、書き込み可能物理セット変更部22は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットのいずれか一つをライト許可モードに変更する。つまり、ライト許可モードの物理セットは複数の物理セット間でローテーションされる。
例えば、複数のVSSDによって共有される4つの物理セット#1〜#4が存在する場合には、ある期間T1においては、物理セット#1がライト許可モードに設定されてもよく、他の全ての物理セット#2〜#4がリードオンリーモードに設定されてもよい。ホスト2からのライトデータは、物理セット#1に、つまり物理セット#1のフリーブロック群から割り当てられた書き込み先ブロックに書き込まれ、物理セット#2〜#4のブロックには書き込まれない。ホスト2からデータのリードが要求された場合には、リードすべきデータは、このデータが格納されている任意の物理セット(物理セット#1、#2、#3または#4)から読み出される。
次の期間T2においては、ライト許可モードに設定されるべき物理セットは、物理セット#1から他の物理セットのいずれかに変更される。
ライト許可モードに設定されるべき物理セットを変更する処理は、ある条件(ローテーション条件)が満たされた時に実行される。このローテーション条件としては、
(1)ライト許可モードに現在設定されている物理セット内のフリーブロックの数がある閾値X以下に低下したという条件
(2)ライト許可モードに現在設定されている物理セット内のフリーブロック群から書き込み先ブロックとして割り当てられたフリーブロックの数がある閾値Yに達したという条件
(3)ライト許可モードに現在設定されている物理セット内のフリーブロック群から書き込み先ブロックとして割り当てられたフリーブロックの数とこのフリーブロック群からコピー先ブロック(「GCコピー先ブロック」または「GCデスティネーションブロック」とも云う)として割り当てられたフリーブロックの数との合計がある閾値Zに達したという条件、または
(4)ある物理セットがライト許可モードに設定されてからの経過時間が閾値Tに達したという条件
等が使用されてもよい。
期間T2においては、物理セット#2がライト許可モードに設定されてもよく、物理セット#1、#3〜#4がリードオンリーモードに設定されてもよい。
さらに次の期間T3においては、物理セット#3がライト許可モードに設定されてもよく、物理セット#1、#2、#4がリードオンリーモードに設定されてもよい。
さらに次の期間T4においては、物理セット#4がライト許可モードに設定されてもよく、物理セット#1〜#3がリードオンリーモードに設定されてもよい。
なお、ある期間においてライト許可モードに設定される物理セットは必ずしも一つの物理セットである必要はなく、少なくとも一つの物理セットがある期間においてライト許可モードに設定され、他の全ての物理セットそれぞれがリードオンリーモードに設定されればよい。
リードキャッシュ制御部24は、次にライト許可モードに設定されるべき物理セット(リードオンリーモードに現在設定されている物理セットの一つ)に格納されている有効データをリードキャッシュに格納する処理を実行することができる。換言すれば、リードキャッシュ制御部24は、ある物理セットがライト許可モードに設定される前に、この物理セット内の有効データをリードキャッシュ(例えばリードキャッシュ(RC#1)31A)に格納することができる。この物理セット内の有効データのすべてがリードキャッシュRC#1に格納されてもよいし、有効データの一部のみがリードキャッシュ(RC#1)31Aに格納されてもよい。
この物理セットがライト許可モードに設定された物理セットとして動作している期間中においては、この物理セット内に存在するデータのリードがホスト2からのリード要求によって要求されたならば、コントローラ4は、リード要求によって指定されたこのデータを、このリードキャッシュ(RC#1)31Aから読み出すことができる。したがって、SSD3がリードキャッシュ(RC#1)31Aを使用するように構成されているケースにおいては、リードオンリーモードに設定されている各物理セットのみならず、ライト許可モードに設定されている物理セットにおいても、リード・オン・ライト・ダイ・コンテンションは生じない。これにより、複数のVSSDがそれぞれ割り当てられた複数のエンドユーザ間の干渉をさらに効率よく低減することができる。
また、この物理セットがライト許可モードに設定された物理セットとして動作している期間中においては、リードキャッシュ制御部24は、この物理セットの次にライト許可モードに設定されるべき別の物理セットに格納されている有効データをリードキャッシュ(RC#2)31Bに格納する処理を実行することができる。換言すれば、リードキャッシュ(RC#1、RC#2)31A,31Bはダブルバッファとして機能する。リードキャッシュ(RC#1、RC#2)31A,31Bのいずれか一方のリードキャッシュは、ホスト2へのデータ読み出し用に使用される。リードキャッシュ(RC#1、RC#2)31A,31Bの他方のリードキャッシュは、次にライト許可モードに設定されるべき物理セットからコピーされる有効データのコピー先として使用される。
本実施形態では、リードキャッシュ(RC#1、RC#2)31A,31Bの各々は、ランダムアクセスメモリ、例えばDRAM6によって実現される。別の実施形態では、リードキャッシュ(RC#1、RC#2)31A,31Bの各々は、コントローラ4内のSRAMによって実現されてもよい。
データコピー制御部25は、リードキャッシュを使用することなく、ライト許可モードに設定されている物理セットにおいてもリード・オン・ライト・ダイ・コンテンションが生じないようにするために、次にライト許可モードに設定されるべき物理セットに格納されているすべての有効データをライト許可モードに現在設定されている物理セットにコピーする処理を実行することができ、これによって、次にライト許可モードに設定されるべき物理セットを有効データを含まないフリー物理セットにすることができる。
次にライト許可モードに設定されるべき物理セットからライト許可モードに現在設定されている物理セットへの有効データのコピーの進行中に、次にライト許可モードに設定されるべき物理セットに存在するデータのリードがホスト2からのリード要求によって要求された場合には、コントローラ4は、このデータを、次にライト許可モードに設定されるべき物理セットから読み出すことができる。ここで、有効データのコピーの進行中とは、次にライト許可モードに設定されるべき物理セット内の全ての有効データのコピーがまだ完了しておらず、コピー動作が実行されている状態を意味する。
コントローラ4は、全ての有効データのコピーの完了の後、フリー物理セットとなった物理セットをライト許可モードに設定し、且つこれまでライト許可モードに設定されていた物理セットをリードオンリーモードに設定(変更)する。ライト許可モードに設定された新たな物理セットは、有効データを含まないフリー物理セットである。したがって、通常、ライト許可モードに設定された物理セットへのリード要求は生じないので、ライト許可モードに設定された物理セットにおいても、リード・オン・ライト・ダイ・コンテンションが生じないようにすることができる。
なお、ライト許可モードに設定された新たな物理セットにホスト2からの新たなデータが書き込まれ、このデータのリードがホスト2によって要求される場合もある。この場合は、コントローラ4は、ライトバッファ(WB)30にライトデータを維持しておくことによって、このデータをライトバッファ(WB)30から読み出してホスト2に返すことができる。
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、ライトバッファ(WB)30の格納のために使用される。また、DRAM6の記憶領域の他の一部は、リードキャッシュ(RC#1、RC#2)31A,31Bの格納のために使用される。さらに、DRAM6の記憶領域のさらに他の一部は、複数のルックアップテーブルLUT#1〜LUT#nの格納のために使用される。
図3は、従来型SSDを使用した仮想化環境と、本実施形態のSSD3(仮想SSD(VSSD)プラットホーム3Aを含むSSD)を使用した仮想化環境とを示す。
図3の左部は従来型SSDを使用した仮想化環境を示す。従来型SSDを使用した仮想化環境においては、ホスト(サーバ)側CPU上で動作するソフトウェアには仮想ディスクサービスソフトウェアが含まれており、この仮想ディスクサービスソフトウェアが、エミュレーションによって物理ストレージ(ここではSSD)から仮想ディスク#1、#2、#3を生成する。つまり、仮想ディスクサービスソフトウェアは、物理ストレージ(ここではSSD)の資源を論理的なストレージプールとして管理し、このストレージプールを使用して仮想ディスク#1、#2、#3…を生成し、これら仮想ディスク#1、#2、#3…を仮想マシン#1、#2、#3…にそれぞれに提供する。
図3の右部はVSSDプラットホーム3Aを含むSSD3を使用した仮想化環境を示す。
VSSDプラットホーム3Aを含むSSD3を使用した仮想化環境においては、SSD3内のVSSDプラットホーム3AによってVSSD#1、VSSD#2、VSSD#3…がSSD3内に作成される。
これらVSSD#1、VSSD#2、VSSD#3…は、仮想ディスク#1、#2、#3…と同等の機能を有している。したがって、仮想ディスク#1、#2、#3…を作成するエミュレーション機能をホスト(サーバ)側CPU上で動作するソフトウェアから取り除くことが可能となる。この結果、ホスト(サーバ)側CPU上で動作するソフトウェアの構成を簡単化することができるので、ソフトウェア内の処理の遅延を短くでき、これによってホスト(サーバ)のI/O性能の向上を図ることができる。SSD3の物理リソースは、仮想マシン#1、#2、#3…によって共有される。仮想マシン#1、#2、#3…は、デバイスドライバを介してSSD3内のVSSD#1、VSSD#2、VSSD#3…をそれぞれ直接的にアクセスすることができる。
図4は、SSD3内のVSSDの数とホスト(サーバ)側の仮想マシンの数との関係を示す。
図4では、ホスト(サーバ)側では仮想マシン#1〜#nが実行され、SSD3においては仮想マシン#1〜#nにそれぞれ対応するVSSD#1〜#nが作成されている場合が想定されている。VSSDプラットホーム3Aを含むSSD3を使用した仮想化環境においては、ホスト(サーバ)側CPU上で動作するソフトウェアの構成を簡単化することができるので、ホスト(サーバ)側の仮想マシンの数を容易に増やすことができる。これにより、一つのホスト(サーバ)当たりのエンドユーザの数を容易に増やすことが可能となる。また、上述したように、本実施形態では、複数のVSSDがそれぞれ専用の物理セットを含むのではなく、複数のVSSDが複数の物理セットの各々を共有する。したがって、本実施形態では、無数のVSSDを作成することができる。このことは、一つのホスト(サーバ)当たりのエンドユーザの数をより多くすることを可能にする。
次に、図5を参照して、SSD3内に作成されるVSSDについて説明する。
SSD3のVSSDプラットホーム3Aは、仮想マシン#1〜#nにそれぞれ対応する複数のVSSD#1〜#nを作成する。この場合、VSSDプラットホーム3Aは、複数のVSSDVSSD#1〜#nそれぞれに対応する複数の論理アドレス空間(LBA空間)を管理することができる。
各VSSDは、上述したように、ネームスペースによって実現されてもよい。この場合、NAND型フラッシュメモリ5の記憶領域を論理的に複数の領域に分割するために、複数のネームスペースが利用される。各ネームスペースは、NAND型フラッシュメモリ5内の記憶領域であり、論理アドレス範囲(LBA範囲)が割り当てられる。個々のネームスペースは、これらネームスペースの識別子によって識別される。各VSSDがネームスペースによって実現された場合、各VSSDには、LBA範囲(LBA0〜LBAn−1)が割り当てられる。LBA範囲のサイズ(つまりLBAの数)は、VSSD(ネームスペース)毎に可変である。各LBA範囲は、LBA0から始まる。
図6は、SSD3によって実行されるVSSD管理を示す。
ここでは、複数のVSSDが複数のネームスペースによって実現されている場合を想定する。VSSD#1には、0〜n−1の論理アドレス空間(LBA空間)A1が割り当てられている。VSSD#2には、0〜n−1の論理アドレス空間(LBA空間)A2が割り当てられている。同様に、VSSD#nには、0〜n−1の論理アドレス空間(LBA空間)Anが割り当てられている。
本実施形態では、ルックアップテーブルLUTは、VSSD毎に分割されている。つまり、VSSD#1〜#nに対応するルックアップテーブルLUT#1〜#nがSSD3のコントローラ4によって管理される。
ルックアップテーブルLUT#1は、VSSD#1のLBA空間A1とNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。ルックアップテーブルLUT#2は、VSSD#2のLBA空間A2とNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。ルックアップテーブルLUT#nは、VSSD#nのLBA空間AnとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。
コントローラ4は、ルックアップテーブルLUT#1〜#nを使用することによって、VSSD(記憶領域)毎に独立してガベージコレクションを行うことができる。あるVSSDのガベージコレクションにおいては、このVSSDに割り当てられているブロックそれぞれからガベージコレクション対象の1以上のブロックが選択され、この選択された各ブロック内の有効データが、このVSSDに割り当てられたブロック(フリーブロック)にコピーされる。そして、このVSSDに対応するルックアップテーブルLUTが更新されて、コピーされたデータに対応するLBAそれぞれにコピー先物理アドレスが関連付けられる。このVSSD(記憶領域)毎に独立したガベージコレクションは、異なるVSSDに関連付けられたデータがガベージコレクションによって同じブロックに格納されてしまうことを防止することができる。
図7は、VSSD管理コマンドを示す。
VSSD管理コマンドは、VSSDの作成および削除を含むVSSD管理のために使用されるコマンドである。VSSD管理コマンドは、以下のパラメータを含んでもよい。
(1)作成(クリエイト)/削除(リムーブ)
(2)capacity
(3)over−provisioning
作成/削除のパラメータの値0hは、VSSDの作成をSSD3に要求する。作成/削除のパラメータの値1hは、VSSDの削除をSSD3に要求する。VSSDの削除を要求する場合には、削除対象のVSSDの識別子(VSSDID)を指定するパラメータがVSSD管理コマンドに設定されてもよい。
capacityのパラメータは、作成対象のVSSDに割り当てるべきユーザ領域の容量(visible capacity)を指定する。ユーザ領域の容量は、上述したように、ユーザアクセス可能LBAスペースに相当する。このユーザ領域の容量は、このVSSDに割り当てるべきLBAの数に相当する。このユーザ領域の容量はバイトによって指定されてもよいし、このVSSDに割り当てるべきLBAの数によって指定されてもよい。
over−provisioningのパラメータは、作成対象のVSSDに割り当てるべきオーバープロビジョニング領域の容量を指定する。
次に、図8を参照して、ユーザ領域の容量とオーバープロビジョニング領域の容量との組をVSSD毎に指定するホスト2からの要求に基づいて、個々のVSSDにユーザ領域およびオーバープロビジョニング領域を割り当てる動作を説明する。
コントローラ4のVSSD作成部21は、ユーザ領域の容量とオーバープロビジョニング領域の容量との組をVSSD毎に指定するホスト2からの要求に基づいて、指定されたユーザ領域の容量と指定されたオーバープロビジョニング領域の容量との合計の容量を個々のVSSDに割り当てる。
ホスト2が、あるVSSD(ここではVSSD#n)の作成をSSD3に要求する場合、ホスト2は、このVSSD#n用に割り当てるべきユーザ領域の容量とこのVSSD#n用に割り当てるべきオーバープロビジョニング領域の容量とを指定する。コントローラ4のVSSD作成部21は、指定されたユーザ領域の容量と指定されたオーバープロビジョニング領域の容量との合計の容量をこのVSSD#n用に割り当てる。図8に示すように、割り当てられたユーザ領域の容量とオーバープロビジョニング領域の容量との合計がこのVSSD#nの総容量となる。上述したように、ユーザ領域の容量に対するオーバープロビジョニング領域の容量の割合が大きいほど、このVSSD#nの性能および耐久性が向上する。ホスト2は、capacityのパラメータおよびover−provisioningのパラメータを使用することによって、エンドユーザの要件に合った性能および耐久性を有するVSSDの作成をSSD3に要求することができる。SSD3は、capacityのパラメータによって指定されるユーザ領域の容量とover−provisioningのパラメータによって指定されるオーバープロビジョニング領域の容量との合計の容量をVSSDに割り当てることによって、エンドユーザの要件に合った性能および耐久性を有するVSSDを作成する。
図9は、複数のVSSDによって実現されるIssS/PaaS環境を示す。
IssS/PaaS環境においては、個々のエンドユーザは、契約した通りの計算機、ストレージの能力/容量を使用することを望み、また、必要なタイミングまたは期間で、計算機やストレージの能力/容量を増減することをのぞむ場合がある。一方、データセンターサービスプロバイダは、多数のエンドユーザに対する多数のサービスを実行することによって、つまりサーバ当たりのエンドユーザの数を増やすことによって、サーバの平均稼働率を改善することを望み、また、電力、メンテナンスのような運用コストを削減することを望み、また、エンドユーザのコンフィグレーション変更に柔軟に対応することを望む場合がある。
本実施形態では、複数の物理セットを共有する複数のVSSDが作成されるので、作成可能なVSSDの数を容易に増加することができる。したがって、多数のエンドユーザに対する多数のサービスを同時に実行することが可能となり、サーバ当たりのエンドユーザの数を増やすことができる。
図10は、複数のVSSDによって実現されるデータベースキャッシュ環境を示す。
SNSサービスのように、データベースキャッシュ環境を使用するクラウドシステムにおいては、SSDのライトアンプリフィケーションを下げ且つSSDへのデータ書き込みの量を下げようとすると、更新周期の異なる複数種のコンテンツそれぞれに対応する複数のSSDが必要となる場合がある。
本実施形態では、更新周期の異なる複数種のコンテンツそれぞれに対応する複数のVSSDをSSD3上に作成することによって、複数のSSD(複数の物理SSD)を用意することなく、ライトアンプリフィケーションを下げ且つ一つのSSD3へのデータ書き込みの量を下げることが可能となる。
図11は、QoS要件の遷移を示す。
従来では、図11の上部に示すように、QoSは、物理サーバとストレージとの間で規定されていた。本実施形態では、図11の下部に示すように、複数のエンドユーザに対応する複数のVSSDをSSD3上に作成することによって、個々のエンドユーザと個々のVSSDとの間でQoSを規定することが可能となる。
図12は、IssS/PaaS環境に複数のVSSDを適用することによって実現される効果を示す。
本実施形態では、例えば、SSD3が有するVSSDプラットホームによって、仮想マシン(VM)とVSSDを各が含む多数の仮想化環境を物理サーバ上で動作させることができる。この多数の仮想化環境は、多数のエンドユーザに対する多数のサービスを同時に実行することが可能となり、サーバの稼働率を上げることができる。
また、本実施形態では、上述したように、リード・オン・ライト・ダイ・コンテンションが生じる確率を低減できるので、SSD3を共有する複数のエンドユーザ間のアクセス競合(リード・オン・ライト・ダイ・コンテンション)によるI/O性能の低下を低減することができる。
図13は、データベースキャッシュ環境に複数のVSSDを適用することによって実現される効果を示す。
図13の上部は、複数のデータベースキャッシュを含む階層化データベースキャッシュシステムを示す。この階層化データベースキャッシュシステムにおいては、更新周期の異なる複数種のコンテンツをそれぞれ格納するための、複数の物理SSDがデータベースキャッシュとして使用される。
本実施形態では、図13の下部に示されているように、SSD3内に複数のVSSDを作成することによって、更新周期の異なる複数種のコンテンツを一つのSSD3に効率よく配置することが可能となる。
図14は、複数の物理セットと複数のVSSDとの関係を示す。
図14では、NAND型フラッシュメモリ5を構成するNAND型フラッシュメモリダイ#1〜#32は、物理セット#1、#2、#3、#4に分類されており、これら物理セット#1、#2、#3、#4を共有するVSSD#1、#2、#3、#4、#5、#6、#7、#8が作成されている場合が例示されている。図14では、物理セット#1、#2、#3、#4は縦方向に延在するバーによって表されており、VSSD#1、#2、#3、#4、#5、#6、#7、#8は、物理セット#1、#2、#3、#4と直交する横方向に伸びるバーによって表されている。
VSSD#1、#2、#3、#4、#5、#6、#7、#8に対応するバーの面積は、これらVSSD#1、#2、#3、#4、#5、#6、#7、#8の容量(総容量)を表している。
VSSD#1〜#8はエンドユーザ#1〜#8(仮想マシン#1〜#8)用の記憶領域としてそれぞれ使用される。
ある期間においては、物理セット#1、#2、#3、#4のうちの少なくとも一つのみがライト許可モードに設定され、他のすべての物理セットはリードオンリーモードに設定される。図14では、物理セット#2がライト許可モードに設定され、物理セット#1、#3、#4がリードオンリーモードに設定されている場合が例示されている。
図15は、図14の複数のVSSDに含まれるユーザ領域とオーバープロビジョニング領域との関係を示す。
上述したように、本実施形態のSSD3は、ホスト2からの要求に応じて、VSSD毎に、VSSDに割り当てるユーザ領域の容量(visible capacity)とオーパプロビジョニング領域の容量とを設定することができる。各VSSDにおいて、ハッチングによって示される領域がオーパプロビジョニング領域を表している。
図16は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットそれぞれをライト許可モードに変更する動作を示す。
図16の左上部に示すように、ある期間(あるサイクル)においては、物理セット#2がライト許可モードに設定され、物理セット#1、#3、#4がリードオンリーモードに設定される。
図16の右上部に示すように、次の期間(次のサイクル)においては、ライト許可モードに設定されるべき物理セットは、物理セット#2から物理セット#3に変更される。そして、物理セット#1、#2、#4はリードオンリーモードに設定される。つまり、ライト許可モードに設定されていた物理セット#2はリードオンリーモードに変更され、リードオンリーモードに設定されていた物理セット#3はライト許可モードに変更される。
図16の左下部に示すように、さらに次の期間(さらに次のサイクル)においては、ライト許可モードに設定されるべき物理セットは、物理セット#3から物理セット#4に変更される。そして、物理セット#1、#2、#3はリードオンリーモードに設定される。
図16の右下部に示すように、さらに次の期間(さらに次のサイクル)においては、ライト許可モードに設定されるべき物理セットは、物理セット#4から物理セット#1に変更される。そして、物理セット#2、#3、#4はリードオンリーモードに設定される。
さらに次の期間(さらに次のサイクル)においては、図16の左上部に示すように、物理セット#2がライト許可モードに再び設定され、物理セット#1、#3、#4がリードオンリーモードに再び設定される。
図17は、NAND型フラッシュメモリダイ#1〜#32をチャンネル境界で分割することによって得られる複数の物理セットの構成例を示す。
図17では、物理セット#1は、チャンネルCh1に含まれるNAND型フラッシュメモリダイ#1、#9、#17、#25を含む。物理セット#2は、チャンネルCh2に含まれるNAND型フラッシュメモリダイ#2、#10、#18、#26を含む。同様に、物理セット#8は、チャンネルCh8に含まれるNAND型フラッシュメモリダイ#8、#16、#24、#32を含む。
図18は、同じチャンネルを共有する幾つかの物理セットの構成例を示す。
図18では、物理セット#1〜#7は専用のチャンネルを有しているが、物理セット#8、#9はチャンネルCh8を共有している。物理セット#8は、チャンネルCh8に含まれるNAND型フラッシュメモリダイ#8、#16を含み、物理セット#9は、チャンネルCh8に含まれるNAND型フラッシュメモリダイ#24、#32を含む。
図19は、全てのチャンネルを横断する複数の物理セットであって、全てのチャンネルから物理セット毎に一つずつNANDダイを選択することによって得られる複数の物理セットの構成例を示す
図19では、物理セット#1は、チャンネルCh1〜Ch8にそれぞれ属するNAND型フラッシュメモリダイ#1〜#8を含む。物理セット#2は、チャンネルCh1〜Ch8にそれぞれ属するNAND型フラッシュメモリダイ#9〜#16を含む。同様に、物理セット#4は、チャンネルCh1〜Ch8にそれぞれ属するNAND型フラッシュメモリダイ#25〜#32を含む。
図20は、各々が幾つかのチャンネルのみに跨がる幾つかの物理セットの構成例を示す。
図20では、物理セット#1〜#3の各々は、すべてのチャンネルCh1〜Ch8に跨がっているが、物理セット#4、#5は幾つかのチャンネルのみに跨がっている。物理セット#4は、チャンネルCh1〜Ch4にのみ跨がっており、チャンネルCh1〜Ch4にそれぞれ属するNAND型フラッシュメモリダイ#25〜#28を含む。物理セット#5は、チャンネルCh5〜Ch8にのみ跨がっており、チャンネルCh5〜Ch8にそれぞれ属するNAND型フラッシュメモリダイ#29〜#32を含む。
図21は、SSD3におけるホスト書き込み動作とガベージコレクション(GC)動作を示す。
図21では、物理セット#2がライト許可モードに設定されており、物理セット#1、#3、…がリードオンリーモードに設定されている場合が例示されている。
物理セット#1、#2、#3…の各々において、この物理セットに属するダイそれぞれに含まれるブロックそれぞれの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。
ある物理セットに属し且つアクティブブロックである各ブロックは、この物理セットに対応するアクティブブロックプールによって管理される。例えば、物理セット#1内のアクティブブロックそれぞれは物理セット#1に対応するアクティブブロックプールによって管理され、物理セット#2内のアクティブブロックそれぞれは、物理セット#2に対応するアクティブブロックプールによって管理され、物理セット#3内のアクティブブロックそれぞれは、物理セット#3に対応するアクティブブロックプールによって管理される。
ある物理セットに属し且つフリーブロックである各ブロックは、この物理セットに対応するフリーブロックプールによって管理される。例えば、物理セット#1内のフリーブロックそれぞれは物理セット#1に対応するフリーブロックプールによって管理され、物理セット#2内のフリーブロックそれぞれは物理セット#2に対応するフリーブロックプールによって管理され、物理セット#3内のフリーブロックそれぞれは物理セット#3に対応するフリーブロックプールによって管理される。
ホスト書き込みは以下の手順で実行される。
コントローラ4は、ライト許可モードに現在設定されている物理セット#2のフリーブロック群(物理セット#2に対応するフリーブロックプール)からフリーブロックを選択し、選択したフリーブロックを書き込み先ブロックとして割り当てる。コントローラ4は、ホスト2から受信されるライト要求に応じて、書き込むべきデータ(ライトデータ)を書き込み先ブロックに書き込む。この場合、受信されたライト要求がどのVSSDを指定しているかに関係なく、ライトデータは同じ書き込み先ブロックに書き込まれてもよい。この書き込み先ブロック全体がホスト2からのライトデータで満たされると、この書き込み先ブロックはアクティブブロックとなり、物理セット#2のアクティブブロックプールによって管理される。また、コントローラ4は、物理セット#2のフリーブロック群(物理セット#2に対応するフリーブロックプール)からフリーブロックを選択し、選択したフリーブロックを新たな書き込み先ブロックとして割り当てる。この場合、最小プログラム/イレーズサイクル数を有するフリーブロックがフリーブロックプールから選択されてもよい。
アクティブブロックの状態は、共有ブロックと非共有ブロックとに大別される。共有ブロックとは、幾つかのVSSDのデータが混在されているブロックを意味する。非共有ブロックとは、ある特定のVSSDのデータのみが格納されているブロックを意味する。
書き込み先ブロックがアクティブブロックになった直後は、通常、このアクティブブロックは、複数のVSSDに対応する複数種のデータを含む。したがって、物理セット#2のアクティブブロックプールにおいては、このアクティブブロックは、共有ブロックとして管理される。
ある物理セットにおいて、ガベージコレクションまたはデータ更新によってあるアクティブブロック(共有ブロックまたは非共有ブロック)内のすべてのデータが無効化されると、このアクティブブロックはフリーブロックとなり、この物理セットに対応するフリーブロックプールによって管理される。
なお、リードキャッシュ(RC#1またはRC#2)31Aまたは31Bを使用する構成においては、コントローラ4は、物理セット#2がライト許可モードに設定される前に、物理セット#2内の有効データをリードキャッシュ(RC#1またはRC#2)31Aまたは31Bに事前に格納しておいてもよい。
ガベージコレクション(GC)は以下の手順で実行される。
コントローラ4は、ライト許可モードに現在設定されている物理セット#2のフリーブロック群(物理セット#2に対応するフリーブロックプール)から複数のVSSD#1〜#nに対応する複数のフリーブロックを選択し、選択したフリーブロックをGCコピー先ブロック#1〜#nとして割り当てる。GCコピー先ブロック#1は、GCによって他の幾つかのブロックからコピーされるVSSD#1の有効データを格納するためのブロックである。GCコピー先ブロック#2は、GCによって他の幾つかのブロックからコピーされるVSSD#2の有効データを格納するためのブロックである。同様に、GCコピー先ブロック#nは、GCによって他の幾つかのブロックからコピーされるVSSD#nの有効データを格納するためのブロックである。
コントローラ4は、書き込み許可モードに設定されている物理セット(ここでは物理セット#2)に属し、且つ幾つかのVSSDに対応する複数種のデータが格納されている幾つかのブロック(つまり、幾つかの共有ブロック)を特定する。そして、コントローラ4は、特定された共有ブロックそれぞれをGCソースブロックとして選択する。GCソースブロックとは、GCが施されるブロックを意味する。GCソースブロックは、「GC対象ブロック」とも称される。
コントローラ4は、GCソースブロックとして選択された幾つかの共有ブロック内のVSSD#1用の有効データを、VSSD#1用のGCコピー先ブロック#1にコピーする。コントローラ4は、GCソースブロックとして選択された幾つかの共有ブロック内のVSSD#2用の有効データを、VSSD#2用のGCコピー先ブロック#2にコピーする。同様に、コントローラ4は、GCソースブロックとして選択された幾つかの共有ブロック内のVSSD#n用の有効データを、VSSD#n用のGCコピー先ブロック#nにコピーする。これにより、複数のVSSDに対応する複数種のデータを異なるブロックに格納することができ、これによってこれら複数種のデータを互いに分離することができる。
あるGCコピー先ブロック全体が有効データで満たされると、このGCコピー先ブロックはアクティブブロックとなり、物理セット#2のアクティブブロックプールによって管理される。このアクティブブロックは特定のVSSDのみに対応するデータのみを含む。したがって、物理セット#2のアクティブブロックプールにおいては、このアクティブブロックは、非共有ブロックとして管理される。コントローラ4は、VSSD#1用のデータのみを含むアクティブブロック群をVSSD#1用の非共有ブロック群として管理し、VSSD#2用のデータのみを含むアクティブブロック群をVSSD#2用の非共有ブロック群として管理し、そして、VSSD#n用のデータのみを含むアクティブブロック群をVSSD#n用の非共有ブロック群として管理する。通常は、時間の経過に伴って、幾つかの非共有ブロック内のデータの一部は、このデータの更新によって無効化される。
ここで、複数のVSSDに対応する複数種のデータ(複数のVSSDに対応する複数種のライトデータ)を同じ書き込み先ブロックに書き込む理由について説明する。
基本的には、ガベージコレクションの効率を上げるためには、同じVSSDのデータ(同じエンドユーザのデータ)を同じブロックに書き込むことが好ましい。しかし、このためには、VSSDの数(エンドユーザの数)と同数の多数の書き込み先ブロックを割り当てることが必要となる。例えば、VSSDの数が100〜1000の場合には、割り当てることが必要な書き込み先ブロックの数も100〜1000となる。一般に、データ書き込み量は、VSSD(エンドユーザ)毎に異なる。このため、これら多数の書き込み先ブロックがデータで満たされるタイミングがばらばらになる。例えば、ある書き込み先ブロック全体がデータで満たされ、他の書き込み先ブロックにはほとんどデータが書き込まれていない、という状況も生じうる。このことは、データで満たされた書き込み先ブロック群をアクティプブロックプールに移動するための処理およびフリーブロック群を書き込み先ブロック群として新たに割り当てるための処理を複雑化させる要因となり得る。
本実施形態では、コントローラ4は、複数のVSSDに対応する複数種のデータを同じ書き込み先ブロックに書き込むことができ、そして、後に、GCによってこれら複数種のデータを分離することができる。したがって、処理の複雑化を招くことなく、複数種のデータを容易に分離することが可能となる。
GCにおいては、コントローラ4は、共有ブロックのみならず、有効データと無効データとが混在する非共有ブロックもGCソースブロックとして選択することもできる。
この場合、コントローラ4は、物理セット#2のアクティブブロックプールから有効データと無効データとが混在するVSSD#1用の非共有ブロックをGCソースブロックとして選択し、この選択したVSSD#1用の非共有ブロック内の有効データをVSSD#1用のGCコピー先ブロック#1にコピーする。
また、コントローラ4は、物理セット#2のアクティブブロックプールから有効データと無効データとが混在するVSSD#2用の非共有ブロックをGCソースブロックとして選択し、この選択したVSSD#2用の非共有ブロック内の有効データをVSSD#2用のGCコピー先ブロック#2にコピーする。
同様に、コントローラ4は、物理セット#2のアクティブブロックプールから有効データと無効データとが混在するVSSD#n用の非共有ブロックをGCソースブロックとして選択し、この選択したVSSD#n用の非共有ブロック内の有効データをVSSD#n用のGCコピー先ブロック#nにコピーする。
したがって、たとえ共有ブロック群内に存在する特定のVSSDの有効データの量が比較的少ない場合でも、この特定のVSSDに関する有効データを、非共有ブロックからこの特定のVSSDに対応するGCコピー先ブロックにコピーすることによって、この特定のVSSDに対応するGCコピー先ブロック全体をこの特定のVSSDの有効データで満たすことができる。これにより、GCコピー先ブロックにダミーデータを書き込むことなく、このGCコピー先ブロック全体を有効データで満たすことができる。このことは、GCの効率を高めることを可能にする。
また、GCにおいては、コントローラ4は、リードオンリーモードに設定されている他の物理セット(ここでは、物理セット#1、#3)内のブロックをGCソースブロックとして利用することもできる。コントローラ4は、まず、書き込み許可モードに設定されている物理セット#2よりも多い書き換え回数(プログラム/イレーズサイクル)を有し且つリードオンリーモードに設定されている他の物理セットをGCソース物理セットとして選択する。ある物理セットの書き換え回数としては、この物理セットに属するブロックそれぞれの書き換え回数の合計値を使用してもよい。そして、コントローラ4は、複数のVSSD#1〜#nにそれぞれ対応する複数の有効データ部を、選択されたGCソース物理セットから、物理セット#2内のGCコピー先ブロック#1〜#nにそれぞれコピーする。この場合、コントローラ4は、GCソース物理セットのアクティブブロックプールから、有効データと無効データとが混在する幾つかのブロック(例えば、有効データと無効データとが混在する幾つかの共有ブロック、有効データと無効データとが混在する幾つかの非共有ブロック)をGCソースブロックとして選択してもよい。そして、コントローラ4は、選択された各GCソースブロック内のVSSD#1用の有効データをVSSD#1用のGCコピー先ブロック#1にコピーし、選択された各GCソースブロック内のVSSD#2用の有効データをVSSD#2用のGCコピー先ブロック#2にコピーし、そして選択された各GCソースブロック内のVSSD#n用の有効データをVSSD#n用のGCコピー先ブロック#nにコピーする。
これにより、例えば、ライト許可モードに現在設定されている物理セットが最小プログラム/イレーズサイクル数を有する物理セットであるならば、この物理セット内の低い消耗度のフリーブロック(書き換え回数の少ないブロック)を各VSSDのためのGC書き込み先ブロック(GCコピー先ブロック)として優先的に利用して、GCを実行することができる。この結果、物理セット間の消耗の不均衡を均一化する物理セット間ウェアレベリングを実行することができる。
図22は、ストリーム書き込みを利用することによって、更新頻度の異なる複数種のデータを異なるブロックに書き込む動作を示す。
ストリーム書き込みとは、同じストリームに関連付けられたデータを同じブロックに書き込むことによって、異なるストリームに関連付けられた異なる種類のデータを異なるブロックに書き込む動作を意味する。ホスト2からのライト要求は、あるVSSDを指定するネームスペースのID(NSID)と、あるストリームのID(ストリームID)との双方を含んでもよい。
本実施形態では、更新頻度の異なる複数種のデータは、異なるストリームに関連付けられる。この場合、ホスト2は、書き込まれるべきデータを、更新頻度の異なる複数種のデータタイプのいずれかに分類する。本実施形態では、データタイプとして、「Hot(微粒度)」、「Hot(粗粒度)」、「Cold」、「Unknown」が使用されてもよい。「Hot(微粒度)」は、頻繁に更新され、且つ小さなサイズを有するデータである。「Hot(粗粒度)」頻繁に更新され、且つ「Hot(微粒度)」のデータよりも大きなサイズを有するデータである。「Cold」は、頻繁には更新されないか、あるいは滅多に更新されないデータである。「Unknown」は、その更新頻度が不明のデータである。
コントローラ4は、ライト許可モードに現在設定されている物理セット#2のフリーブロック群(物理セット#2に対応するフリーブロックプール)から四つのフリーブロックを選択し、選択した四つのフリーブロックを書き込み先ブロックとしてそれぞれ割り当てる。
コントローラ4は、ホスト2から受信されるライト要求に応じて、書き込むべきデータ(ライトデータ)を四つの書き込み先ブロックのいずれかに書き込む。受信されたライト要求がストリーム#1のストリームIDを含む場合、ライトデータ(「Hot(微粒度)」データ)は、ストリーム#1に対応する書き込み先ブロックに書き込まれる。受信されたライト要求がストリーム#2のストリームIDを含む場合、ライトデータ(「Hot(粗粒度)」データ)は、ストリーム#2に対応する書き込み先ブロックに書き込まれる。受信されたライト要求がストリーム#3のストリームIDを含む場合、ライトデータ(「Cold」データ)は、ストリーム#3に対応する書き込み先ブロックに書き込まれる。受信されたライト要求がストリーム#4のストリームIDを含む場合、ライトデータ(「Unknown」データ)は、ストリーム#4に対応する書き込み先ブロックに書き込まれる。
これら書き込み先ブロックがデータで満たされると、これら書き込み先ブロックはアクティブブロック(ここでは共有ブロック)となり、アクティブブロックプールにおいて管理される。これにより、同じ共有ブロックに異なる更新頻度を有するデータが混在されることを防止することができる。このことは、ガベージコレクションが実行される頻度を減少させることを可能とし、この結果、ライトアンプリフィケーションを低下させることができる。なぜなら、Hotデータのみで満たされたブロックは、そのデータの更新によってそのブロック内のすべてのデータが無効される可能性があるためである。この場合、このブロックにガベージコレクションを施すことなく、このブロックをフリーブロックとして開放することができる。また、Coldデータのみで満たされたブロックは、長い間、有効データのみを含む可能性が高い。したがって、このブロックに対してガベージコレクションを施す必要もない。
図23のフローチャートは、コントローラ4によって実行されるリード/ライト処理の手順を示す。
コントローラ4は、NAND型フラッシュメモリダイの各々が一つの物理セットにのみ属するように32個のNAND型フラッシュメモリダイ#1〜#32を複数の物理セットに分類することによって、これら複数の物理セットを管理する(ステップS11)。コントローラ4は、SSD3を共有する複数のクライアント(複数のエンドユーザ)に対応する複数のVSSD#1〜#nを作成する(ステップS12)。VSSD#1〜#nの各々は複数の物理セットに跨り、VSSD#1〜#nは複数の物理セットの各々を共有する。コントローラ4は、ある物理セットをライト許可モードに設定し、他の物理セットそれぞれをリードオンリーモードに設定する(ステップS13)。
コントローラ4がホスト2からライト要求(ライトコマンド)を受信したならば(ステップS14のYES)、コントローラ4は、このライト要求に応じて、書き込み動作を実行する(ステップS16)。ライト要求は、複数のVSSD#1〜#nのいずれか一つのVSSDを指定するVSSD指定パラメータを含む。ステップS16では、コントローラ4は、書き込むべきデータ(ライトデータ)を、ライト許可モードに設定されている物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに書き込む。コントローラ4は、データが書き込まれたVSSD(VSSD指定パラメータによって指定されるVSSD)に対応するルックアップテーブルLUTを更新して、このデータに対応する論理アドレスに、このデータが書き込まれたNAND型フラッシュメモリ5上の物理記憶位置を示す物理アドレスをマッピングする(ステップS17)。
コントローラ4がホスト2からリード要求(リードコマンド)を受信したならば(ステップS15のYES)、コントローラ4は、このリード要求に応じて、リードすべきデータを複数のVSSDのいずれか一つから読み出す読み出し動作を実行する(ステップS18、S19)。このリード要求は、VSSD指定パラメータを含む。ステップS18では、コントローラ4は、このリード要求によって指定されるVSSD(VSSD指定パラメータによって指定されるVSSD)に対応するルックアップテーブルLUTを参照して、リード要求内に含まれる開始LBAにマッピングされている物理アドレスをルックアップテーブルLUTから取得する。ステップS19では、コントローラ4は、この物理アドレスによって示されるNAND型フラッシュメモリ5上の物理記憶位置からデータを読み出し、この読み出されたデータをホスト2に返す。
コントローラ4は、ライト許可モードの物理セットを別の物理セットに変更することが必要か否かを判定する(ステップS20)。ステップS20では、上述のローテーション条件が満たされたか否かが判定されてもよい。この場合、ローテーション条件が満たされているならば、コントローラ4は、ライト許可モードの物理セットを別の物理セットに変更することが必要であると判定し(ステップS20のYES)、ライト許可モードの物理セットを別の物理セットに変更する(ステップS21)。ステップS21では、コントローラ4は、複数の物理セットが交代でライト許可モードに設定された物理セットになるように、ライト許可モードに設定されるべき物理セットを複数の物理セット間で変更する。換言すれば、コントローラ4は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットのいずれか一つをライト許可モードに変更する。これにより、ライト許可モードに設定されるべき物理セットは、複数の物理セット間でローテーションされる。
図24のフローチャートは、リード/ライト処理の別の手順を示す。
コントローラ4は、NAND型フラッシュメモリダイの各々が一つの物理セットにのみ属するように32個のNAND型フラッシュメモリダイ#1〜#32を複数の物理セットに分類することによって、これら複数の物理セットを管理する(ステップS31)。コントローラ4は、SSD3を共有する複数のクライアント(複数のエンドユーザ)に対応する複数のVSSD#1〜#nを作成する(ステップS32)。VSSD#1〜#nの各々は複数の物理セットに跨り、VSSD#1〜#nは複数の物理セットの各々を共有する。コントローラ4は、ある物理セットをライト許可モードに設定し、他の物理セットそれぞれをリードオンリーモードに設定する(ステップS33)。ライト許可モードに設定された物理セット内の有効データは、コントローラ4によって、リードキャッシュ(RC#1)31Aに事前に格納されている。
コントローラ4がホスト2からライト要求(ライトコマンド)を受信したならば(ステップS34のYES)、コントローラ4は、このライト要求に応じて、書き込み動作を実行する(ステップS36)。ライト要求は、複数のVSSD#1〜#nのいずれか一つのVSSDを指定するVSSD指定パラメータを含む。ステップS36では、コントローラ4は、書き込むべきデータ(ライトデータ)を、ライト許可モードに設定されている物理セット内のフリーブロック群から割り当てられた書き込み先ブロックに書き込む。コントローラ4は、データが書き込まれたVSSD(VSSD指定パラメータによって指定されるVSSD)に対応するルックアップテーブルLUTを更新して、このデータに対応する論理アドレスに、このデータが書き込まれたNAND型フラッシュメモリ5上の物理記憶位置を示す物理アドレスをマッピングする(ステップS37)。
コントローラ4がホスト2からリード要求(リードコマンド)を受信したならば(ステップS35のYES)、コントローラ4は、このリード要求に応じて、リードすべきデータを複数のVSSDのいずれか一つまたはリードキャッシュ(RC#1)31Aから読み出す読み出し動作を実行する(ステップS39〜S42)。このリード要求は、VSSD指定パラメータを含む。
ステップS39では、コントローラ4は、このリード要求によって指定されるVSSD(VSSD指定パラメータによって指定されるVSSD)に対応するルックアップテーブルLUTを参照して、リード要求内に含まれる開始LBAにマッピングされている物理アドレスをルックアップテーブルLUTから取得する。ステップS40では、コントローラ4は、この物理アドレスに基づいて、リード対象のデータが格納されている物理セットがライト許可モードに設定されている物理セットであるか否か、つまりリード対象のデータが格納されている物理記憶位置がライト許可モードに設定されている物理セットに属しているか否かを判定する。リード対象のデータが格納されている物理セットがライト許可モードに設定されている物理セットであるならば(ステップS40のYES)、ステップS41において、コントローラ4は、リード対象のデータをリードキャッシュ(RC#1)31Aから読み出し、この読み出されたデータをホスト2に返す。一方、リード対象のデータが格納されている物理セットがライト許可モードに設定されている物理セットでないならば(ステップS40のNO)、ステップS42において、コントローラ4は、この物理アドレスによって示される物理記憶位置、つまりリードオンリーモードの物理セット内の物理記憶位置からデータを読み出し、この読み出されたデータをホスト2に返す。
このようなライト/リード処理のバックグラウンドで、コントローラ4は、次にライト許可モードに設定されるべき物理セット内の有効データをリードキャッシュ(RC#2)31Bに格納する処理を実行する(ステップS38)。
そして、コントローラ4は、ライト許可モードの物理セットを別の物理セットに変更することが必要か否かを判定する(ステップS38)。ステップS38では、上述のローテーション条件が満たされたか否かが判定されてもよい。この場合、ローテーション条件が満たされているならば、コントローラ4は、ライト許可モードの物理セットを別の物理セットに変更することが必要であると判定し(ステップS43のYES)、ライト許可モードの物理セットを別の物理セットに変更する(ステップS44)。ステップS44では、コントローラ4は、複数の物理セットが交代でライト許可モードに設定された物理セットになるように、ライト許可モードに設定されるべき物理セットを複数の物理セット間で変更する。換言すれば、コントローラ4は、全ての物理セットが交代でライト許可モードに設定されるように、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し且つリードオンリーモードに設定されている他の物理セットのいずれか一つ(次にライト許可モードに設定されるべき物理セット)をライト許可モードに変更する。これにより、ライト許可モードに設定されるべき物理セットは、複数の物理セット間でローテーションされる。
新たにライト許可モードに設定された物理セット内の有効データはリードキャッシュ(RC#2)31Bに格納されている。したがって、ステップS41では、リードキャッシュ(RC#2)31Bからデータがリードされる。また、ステップS38では、次にライト許可モードに設定されるべき物理セット内の有効データをリードキャッシュ(RC#1)31Aに格納する処理が実行される。
図25のフローチャートは、ガベージコレクション(GC)動作の手順を示す。
コントローラ4は、ライト許可モードに設定されている物理セット内の幾つかの共有ブロックをGC対象ブロック(GCソースブロック)として選択する(ステップS51)。そして、コントローラ4は、GC対象ブロックにGCを施すことによって、選択された各選択された共有ブロック内の有効データを、VSSD#1〜VSSD#nに対応するn種類のデータに分類する(ステップS52)。ステップS52では、コントローラ4は、(1)選択された共有ブロック内のVSSD#1用の有効データを、ライト許可モードに設定されている物理セットのフリーブロック群から割り当てられたVSSD#1用のGCコピー先ブロック#1にコピーし、(2)選択された共有ブロック内のVSSD#2用の有効データを、ライト許可モードに設定されている物理セットのフリーブロック群から割り当てられたVSSD#2用のGCコピー先ブロック#2にコピーし、そして、同様にして、(3)選択された共有ブロック内のVSSD#n用の有効データを、ライト許可モードに設定されている物理セットのフリーブロック群から割り当てられたVSSD#n用のGCコピー先ブロック#nにコピーする。さらに、コントローラ4は、ライト許可モードに設定されている物理セット内の幾つかの非共有ブロックもGC対象ブロック(GCソースブロック)として選択してもよい。この場合、VSSD#1用の非共有ブロック内の有効データは、VSSD#1用のGCコピー先ブロック#1にコピーされる。VSSD#2用の非共有ブロック内の有効データは、VSSD#2用のGCコピー先ブロック#2にコピーされる。VSSD#n用の非共有ブロック内の有効データは、VSSD#n用のGCコピー先ブロック#nにコピーされる。
図26のフローチャートは、物理セット間ウェアレベリングの手順を示す。
コントローラ4は、ライト許可モードに設定されている物理セットのフリーブロックプール内のフリーブロックをGCコピー先ブロックとして選択する(ステップS61)。そして、コントローラ4は、ライト許可モードに設定されている物理セットよりも書き換え回数が多い物理セット内のアクティブブロックの有効データを、ライト許可モードに設定されている物理セット内のGCコピー先ブロックにコピーし、これによってこれら物理セット間の消耗の差を減少させる(ステップS62)。
より詳しくは、ステップS62では、まず、書き込み許可モードに設定されている物理セットよりも多い書き換え回数(プログラム/イレーズサイクル)を有し且つリードオンリーモードに設定されている他の物理セットがGCソース物理セットとして選択される。そして、複数のVSSD#1〜#nにそれぞれ対応する複数の有効データ部が、選択されたGCソース物理セットから、書き込み許可モードに設定されている物理セット内のフリーブロック群から割り当てられたGCコピー先ブロック#1〜#nにそれぞれコピーされる。
図27は、次にライト許可モードに設定されるべき物理セットに格納されている全ての有効データをライト許可モードに現在設定されている物理セットにコピーする動作を示す。
サイクル1では、物理セット#1はライト許可モードに設定され、物理セット#2、#3、#4はリードオンリーモードに設定される。物理セット#4は、次にライト許可モードに設定されるべき物理セットである。
サイクル1では、ホスト2からのライトデータは、まず、ライトバッファ(WB)30に書き込まれる。そして、このライトデータが、ライトバッファ(WB)30から物理セット#1内の書き込み先ブロックに書き込まれる。ライトバッファ(WB)30に書き込まれたライトデータは、サイクル1が終了するまでライトバッファ(WB)30内に維持される。したがって、サイクル1においてホスト2から物理セット#1に書き込まれたデータは、ライトバッファ(WB)30から読み出すことができる。
また、サイクル1では、この物理セット#4に格納されている全ての有効データが、ライト許可モードに設定されている物理セット#1にコピーされる。この場合、物理セット#4に格納されているVSSD#1用の全ての有効データは、物理セット#1のフリーブロック群から割り当てられたVSSD#1用のGCコピー先ブロック群にコピーされる。物理セット#4に格納されているVSSD#2用の全ての有効データは、物理セット#1のフリーブロック群から割り当てられたVSSD#2用のGCコピー先ブロック群にコピーされる。同様に、物理セット#4に格納されているVSSD#n用の全ての有効データは、物理セット#1のフリーブロック群から割り当てられたVSSD#n用のGCコピー先ブロック群にコピーされる。
有効データのコピーの進行中に、物理セット#4内のデータのリードがホスト2からのリード要求によって要求された場合、このデータは、物理セット#1からではなく、物理セット#4から読み出される。したがって、物理セット#4から物理セット#1への有効データのコピーに起因して、物理セット#1において、リード・オン・ライト・ダイ・コンテンションが生じる可能性が高くなることはない。
全ての有効データのコピーの完了の後、コントローラ4は、物理セット#4に対する消去動作を実行して物理セット#4を有効データを含まないフリー物理セットにし、この物理セット#4をライト許可モードに変更する。
これにより、サイクル2では、物理セット#4は、ライト許可モードに設定された物理セットとして再利用される。物理セット#1はリードオンリーモードに変更される。物理セット#3は、次にライト許可モードに設定されるべき物理セットとなる。
このサイクル2の開始時点では、物理セット#4は有効データを含まない。したがって、この物理セット#4がリード対象となる確率を低減できる。
サイクル2では、ホスト2からのライトデータは、まず、ライトバッファ(WB)30に書き込まれる。そして、このライトデータが、ライトバッファ(WB)30から物理セット#4内の書き込み先ブロックに書き込まれる。ライトバッファ(WB)30に書き込まれたライトデータは、サイクル2が終了するまでライトバッファ(WB)30内に維持される。したがって、サイクル2においてホスト2から物理セット#4に書き込まれたデータは、ライトバッファ(WB)30から読み出すことができる。
また、このサイクル2では、次にライト許可モードに設定されるべき物理セット#3に格納されている全ての有効データが、ライト許可モードに設定されている物理セット#4にコピーされる。この場合、物理セット#3に格納されているVSSD#1用の全ての有効データは、物理セット#4のフリーブロック群から割り当てられたVSSD#1用のGCコピー先ブロック群にコピーされる。物理セット#3に格納されているVSSD#2用の全ての有効データは、物理セット#4のフリーブロック群から割り当てられたVSSD#2用のGCコピー先ブロック群にコピーされる。同様に、物理セット#3に格納されているVSSD#n用の全ての有効データは、物理セット#4のフリーブロック群から割り当てられたVSSD#n用のGCコピー先ブロック群にコピーされる。
有効データのコピーの進行中に、物理セット#3内のデータのリードがホスト2からのリード要求によって要求された場合、このデータは、物理セット#4からではなく、物理セット#3から読み出される。したがって、物理セット#3から物理セット#4への有効データのコピーに起因して、物理セット#4において、リード・オン・ライト・ダイ・コンテンションが生じる可能性が高くなることはない。
全ての有効データのコピーの完了の後、コントローラ4は、物理セット#3に対する消去動作を実行して物理セット#3を有効データを含まないフリー物理セットにし、この物理セット#3をライト許可モードに変更する。
これにより、サイクル3では、物理セット#3は、ライト許可モードに設定された物理セットとして再利用される。物理セット#4はリードオンリーモードに変更される。物理セット#2は、次にライト許可モードに設定されるべき物理セットとなる。
図28のフローチャートは、リード/ライト/ガベージコレクション(GC)動作の手順を示す。
コントローラ4は、次にライト許可モードに設定されるべき物理セットをGCソース物理セットとして選択する(ステップS71)。コントローラ4は、GCソース物理セット内の全ての有効データを、ライト許可モードに設定されている物理セット(GCデスティネーション物理セット)にコピーする(ステップS92)。
コントローラ4は、ホスト2から受信されるI/O要求がリード要求またはライト要求のいずれであるかを判定する(ステップS73、S74)。
ホスト2から受信されたI/O要求がライト要求であるならば(ステップS74のYES)、コントローラ4は、ホスト2からのライトデータをライトバッファ(WB)30に蓄積した状態(残した状態)でこのライトデータを、ライト許可モードに設定されている物理セット内の書き込み先ブロックに書き込む(ステップS75)。
ホスト2から受信されたI/O要求がリード要求であるならば(ステップS73のYES)、コントローラ4は、リード対象のデータがライトバッファ(WB)30に蓄積されているか否かを判定する(ステップS76)。
一方、リード対象のデータがライトバッファ(WB)30に蓄積されているならば(ステップS76のYES)、コントローラ4は、リード対象のデータをライトバッファ(WB)30から読み出し、読み出したデータをホスト2に返す(ステップS77)。
リード対象のデータがライトバッファ(WB)30に蓄積されていないならば(ステップS76のNO)、コントローラ4は、リード対象のデータがGCソース物理セットに格納されているデータであるか否かを判定する(ステップS78)。
リード対象のデータがGCソース物理セットに格納されているデータであるならば(ステップS78のYES)、コントローラ4は、リード対象のデータをGCソース物理セットから読み出し、読み出したデータをホスト2に返す(ステップS79)。
一方、リード対象のデータがGCソース物理セットに格納されていないデータであるならば(ステップS78のNO)、コントローラ4は、リード対象のデータを、このリード対象のデータが格納されている物理セットから読み出し、読み出したデータをホスト2に返す(ステップS80)。
コントローラ4は、GCソース物理セットに格納されている全ての有効データのコピーが完了したか否かを判定する(ステップS81)。
全ての有効データのコピーが完了していないならば(ステップS81のNO)、コントローラ4は、ステップS72からの処理を再び実行する。
全ての有効データのコピーが完了したならば(ステップS81のYES)、コントローラ4は、ライト許可モードの物理セットを他の物理セットに変更する(ステップS82)。ライト許可モードの物理セットを変更する処理は、上述のローテーション条件が満たされた時に実行されてもよい。ステップS82では、コントローラ4は、ライト許可モードに設定されている物理セットをリードオンリーモードに変更し、次にライト許可モードに設定されるべき物理セットをライト許可モードに変更する。
図29は、データコピー前のGCソース物理セット/GCデスティネーション物理セットの内容とデータコピー後のGCソース物理セット/GCデスティネーション物理セットの内容を示す。
GCソース物理セットは、次にライト許可モードに設定されるべき物理セットである。GCデスティネーション物理セットは、ライト許可モードに現在設定されている物理セットである。
図27で説明したように、本実施形態では、次にライト許可モードに設定されるべき物理セット(GCソース物理セット)に格納されている全ての有効データを、ライト許可モードに現在設定されている物理セット(GCデスティネーション物理セット)にコピーするGC処理(データコピー処理)を実行することができる。
図29の左部に示されているように、データコピー前においては、通常、GCソース物理セットに格納されているデータ(アクティブデータ)は、有効データと無効データとの双方を含む。ライト許可モードに設定された直後の物理セット(GCデスティネーション物理セット)は、有効データを含まないフリー物理セットである。
コントローラ4は、GC処理(データコピー処理)を実行して、GCソース物理セットに格納されている全ての有効データをGCデスティネーション物理セットにコピーする。
図29の右部に示されているように、データコピー後においては、GCソース物理セットは有効データを含まないフリー物理セットとなる。GCデスティネーション物理セットは、GCソース物理セットからコピーされた有効データ(Copied)を含む。また、GCデスティネーション物理セットは、GCソース物理セットの無効データの量に相当する容量を有する空き領域(フリー領域)を含む。この空き領域は、ホスト2からの新データの書き込みに利用することができる。
このため、コントローラ4は、ライト許可モードに設定された物理セット(GCデスティネーション物理セット)に書き込み可能なホスト2からのデータの量を、GCソース物理セットの無効データ量(ガベージ量)までに制限してもよい。
GCソース物理セットの無効データの総量は、VSSD#1に対応する無効データの量と、VSSD#2に対応する無効データの量と、VSSD#3に対応する無効データの量と、…VSSD#nに対応する無効データの量との合計である。したがって、コントローラ4は、VSSD#1〜VSSD#nそれぞれがホスト2から受け取ることが可能なライトデータの量を、GCソース物理セットのVSSD#1〜VSSD#nそれぞれの無効データ量までにそれぞれ制限してもよい。
GC処理(データコピー処理)によってフリー物理セットとなったGCソース物理セットは、その消去動作が実行された後に、ライト許可モードに設定された物理セット(新たなGCデスティネーション物理セット)として再利用される。
図30は、リードキャッシュを利用する構成における、データコピー前のGCソース物理セット/GCデスティネーション物理セットの内容とデータコピー後のGCソース物理セット/GCデスティネーション物理セットの内容を示す。
リードキャッシュを利用する構成においては、GCソース物理セット内のアクティブブロック群のうち、有効データと無効データとが混在するアクティブブロック群のみをGC処理(データコピー処理)の対象とすることができる。
図30の左部に示されているように、データコピー前においては、GCソース物理セットは、GC対象領域(GC Target)と、非GC対象領域(NonGC)とを含む。GC対象領域(GC Target)は、有効データと無効データとが混在するアクティブブロック群を含む。非GC対象領域(NonGC)は、有効データのみでほぼ満たされているアクティブブロック群(コールドユーザデータ)を含む。有効データのみでほぼ満たされているアクティブブロック群とは、ブロック内の有効データ量が閾値よりも大きいブロック(コールドユーザデータブロック)、つまりたとえGCが施されても空きスペースを実行されてもフリースペースの作成にほとんど貢献しないブロックを意味する。コールドユーザデータブロックの例には、書き換え頻度の低いコールドユーザデータ(単にコールドデータとも云う)で満たされているブロック等が含まれてもよい。ライト許可モードに設定された直後の物理セット(GCデスティネーション物理セット)は、有効データを含まないフリー領域と、非GC対象領域(NonGC)とを含む。
コントローラ4は、GC処理(データコピー処理)を実行して、GCソース物理セットのGC対象領域(GC Target)に格納されている有効データのみをGCデスティネーション物理セットにコピーする。
図30の右部に示されているように、データコピー後においては、GCソース物理セットは、有効データを含まないフリー領域と、コールドユーザデータを含む非GC対象領域(NonGC)とを含む。GCソース物理セット内のコールドユーザデータは、リードキャッシュに格納される。GCデスティネーション物理セットは、コールドユーザデータ(NonGC)と、GCソース物理セットからコピーされた有効データ(Copied)とを含む。また、GCデスティネーション物理セットは、GCソース物理セットのGC対象領域(GC Target)内の無効データの量に相当する容量を有する空き領域(フリー領域)を含む。この空き領域は、ホスト2からの新データの書き込みに利用することができる。
このため、コントローラ4は、ライト許可モードに設定された物理セット(GCデスティネーション物理セット)に書き込み可能なホスト2からのデータの量を、GCソース物理セットのGC対象領域(GC Target)内の無効データ量(ガベージ量)までに制限してもよい。この場合、コントローラ4は、VSSD#1〜VSSD#nそれぞれがホスト2から受け取ることが可能なライトデータの量を、GCソース物理セットのGC対象領域(GC Target)内のVSSD#1〜VSSD#nそれぞれの無効データ量までにそれぞれ制限してもよい。
GC処理(データコピー処理)によってフリー領域が増加されたGCソース物理セットは、そのフリー領域の消去動作が実行された後に、ライト許可モードに設定された物理セット(新たなGCデスティネーション物理セット)として再利用される。
図31は、各物理セット内の個々のブロックの状態遷移を示す。
(1)コントローラ4は、ホスト2から受信したライトデータ(VSSD#1に対するライトデータ、VSSD#2に対するライトデータ、…VSSD#nに対するライトデータ)をライトバッファ(WB)30に書き込む。
(2)コントローラ4は、ライトバッファ(WB)30内のライトデータを、ライト許可モードに設定されている物理セット#2内の書き込み先ブロック(共有書き込み先ブロック)に書き込む。この共有書き込み先ブロックは、VSSD#1に対するライトデータ、VSSD#2に対するライトデータ、…VSSD#nに対するライトデータが書き込まれるべき書き込み先ブロックである。
(3)共有書き込み先ブロック全体がライトデータで満たされた時、コントローラ4は、この共有書き込み先ブロックを、物理セット#2内のアクティブブロックプールに移動して共有ブロックとして管理する。
(4)コントローラ4は、GCを実行する。このGCでは、コントローラ4は、VSSD#1〜VSSD#nに対応する複数種のデータを共有ブロック群から、VSSD#1〜VSSD#nに対応する複数のGCコピー先ブロックにコピーし、これによってこれら複数種のデータを互いに分離する。また、このGCでは、リードオンリーモードに設定されている他の物理セットもGC対象となり得る。例えば、コントローラ4は、次にライト許可モードに設定されるべき物理セット(ここでは、物理セット#1)のGC対象領域(GC Target)内の有効データを、複数のGCコピー先ブロックにコピーする。
(5)あるVSSDに対応するGCコピー先ブロックが有効データで満たされると、コントローラ4は、このGCコピー先ブロックを、物理セット#2内のアクティブブロックプールに移動して非共有ブロックとして管理する。
(6)コントローラ4は、次にライト許可モードに設定されるべき物理セット(ここでは、物理セット#1)内のコールドユーザデータをリードキャッシュに格納する処理を実行する。物理セット#2内のコールドユーザデータはリードキャッシュ(RC#1)31Aにすでに存在している。このため、コントローラ4は、物理セット#1内のコールドユーザデータは、別のリードキャッシュ(RC#2)31Bに格納する。なお、物理セット#1内のコールドユーザデータもGC対象にしてもよい。この場合には、物理セット#1全体をフリー物理セットにすることができるので、コールドユーザデータをリードキャッシュに格納する処理は不要となる。
図32は、複数のSSDを搭載したコンピュータ(サーバ)の構成例を示す。
このコンピュータ(情報処理装置)は、ラックに収容可能な薄い箱形の筐体301を備える。多数のSSD3は筐体301内に配置されてもよい。この場合、各SSD3は筐体301の前面301Aに設けられたスロットに取り外し可能に挿入されてもよい。多数のSSD3の各々は、多数のVSSD、例えば、100〜1000のVSSDを含む。
システムボード(マザーボード)302は筐体301内に配置される。システムボード(マザーボード)302上においては、CPU、メモリ、ネットワークコントローラを含む様々な電子部品が実装されている。これら電子部品がホスト2として機能する。
以上説明したように、本実施形態によれば、複数の不揮発性メモリダイ(例えばNAND型フラッシュメモリダイ)の各々が一つの物理セットにのみ属するように複数の不揮発性メモリダイが複数の物理セットに分類され、複数の物理セットの各々を共有する複数の記憶領域(VSSD)であって、各々が複数の物理セットに跨る複数の記憶領域(VSSD)が作成される。複数の物理セット内の物理セットがライト動作およびリード動作が許可されたライト許可モード(第1モード)に設定される。複数の物理セット内の他の物理セットそれぞれは、リード動作が許可され且つライト動作が禁止されたリードオンリーモード(第2モード)に設定される。そして、全ての物理セットが交代でライト許可モード(第1モード)に設定されるように、ライト許可モード(第1モード)に設定されている物理セットをリードオンリーモード(第2モード)に変更し且つリードオンリーモード(第2モード)に設定されている他の物理セットのいずれか一つをライト許可モード(第1モード)に変更する処理が実行される。
したがって、ある期間においては、ホスト2からのどのライトデータも、ライト許可モードに現在設定されている特定の物理セットに書き込まれ、リードオンリーモードに現在設定されている物理セットに書き込まれることはない。よって、リード・オン・ライト・ダイ・コンテンションが生じる可能性がある物理セットを、ライト許可モードに現在設定されている特定の物理セットのみに制限することができる。残りの全ての物理セットはリードオンリーモードであるので、残りの全ての物理セットにおいては、データ書き込み動作は実行されない。したがって、残りの全ての物理セットにおいては、リード・オン・ライト・ダイ・コンテンションは生じない。この結果、本実施形態のSSD3では、リード・オン・ライト・ダイ・コンテンションが生じる確率を低減することができ、これによってSSD3を共有する複数のエンドユーザ(テナント)間のアクセス競合(リード・オン・ライト・ダイ・コンテンション)によるI/O性能の低下を低減することができる。
また、本実施形態では、各物理セットは複数のVSSDによって共有されており、且つライト許可モードに設定されるべき物理セットが複数の物理セット間で変更される。したがって、どの記憶領域(どのVSSD)についても、データ書き込みを複数の物理セットに分散させることが可能となり、これによって物理セット間の消耗の差(プログラム/イレーズサイクルの数の差)を小さくすることができる。このことは、SSD3の寿命を最大化することを可能にする。
なお、本実施形態の構成は、NAS、オールフラッシュアレイといった、複数のSSDを含むストレージシステム(ストレージアレイ)に適用することもできる。
また、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。