図面 (/)

技術 メモリシステムおよび制御方法

出願人 東芝メモリ株式会社
発明者 菅野伸一
出願日 2019年8月28日 (1年10ヶ月経過) 出願番号 2019-155832
公開日 2021年3月1日 (4ヶ月経過) 公開番号 2021-033847
状態 未査定
技術分野 メモリシステム
主要キーワード 内部相互接続 ホスト計算機システム 半導体ストレージ 管理サイズ プログラム指示 未書き込み領域 フラッシュ書き込み バンクインタリーブ
関連する未来課題
重要な関連分野

この項目の情報は公開日時点(2021年3月1日)のものです。
また、この項目は機械的に抽出しているため、正しく解析できていない場合があります

図面 (16)

課題

バッファのサイズを増やすことなく、複数の書き込み先ブロック利用可能なメモリシステムを実現する。

解決手段

メモリシステムは、複数のストリームに対応する複数のグループの各々に関して、同じグループに属するライトコマンド集合に関連付けられたライトデータの長さが不揮発性メモリ最小書き込みサイズに達したか否かを判定する。第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、メモリシステムは、第1のグループに属するライトコマンドの集合に関連付けられたライトデータをホストのメモリ内ライトバッファからメモリシステム内の第1のバッファに転送し、第1のバッファに転送されたライトデータを、第1のストリームに対応する第1の書き込み先ブロックに書き込む。

概要

背景

近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NANDフラッシュ技術ベースソリッドステートドライブSSD)が知られている。

SSDは、データセンターサーバのような様々なホスト計算機システムストレージデバイスとして使用されている。

ホスト計算機システムにおいて利用されるストレージデバイスにおいては、異なる種類のデータを異なる書き込み先ブロックに書き込むことを可能にすることが求められる場合がある。

概要

バッファのサイズを増やすことなく、複数の書き込み先ブロックを利用可能なメモリシステムを実現する。メモリシステムは、複数のストリームに対応する複数のグループの各々に関して、同じグループに属するライトコマンド集合に関連付けられたライトデータの長さが不揮発性メモリの最小書き込みサイズに達したか否かを判定する。第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、メモリシステムは、第1のグループに属するライトコマンドの集合に関連付けられたライトデータをホストのメモリ内ライトバッファからメモリシステム内の第1のバッファに転送し、第1のバッファに転送されたライトデータを、第1のストリームに対応する第1の書き込み先ブロックに書き込む。

目的

本発明が解決しようとする課題は、バッファのサイズを増やすことなく、複数の書き込み先ブロックを利用可能なメモリシステムおよび制御方法を提供する

効果

実績

技術文献被引用数
0件
牽制数
0件

この技術が所属する分野

(分野番号表示ON)※整理標準化データをもとに当社作成

ライセンス契約や譲渡などの可能性がある特許掲載中! 開放特許随時追加・更新中 詳しくはこちら

請求項1

ホストに接続可能なメモリシステムであって、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、複数のストリームに対応する複数の書き込み先ブロックを前記複数のブロックから割り当てるように構成されたコントローラとを具備し、前記コントローラは、前記複数のストリームの一つを示すストリーム識別子を各々が含む複数のライトコマンドを前記ホストから受信し、前記受信されたライトコマンドそれぞれを前記複数のストリームに対応する複数のグループ分類し、前記複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記不揮発性メモリの最小書き込みサイズに達したか否かを判定し、前記複数のストリームのうちの第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライトコマンドの集合に関連付けられたライトデータを、前記ホストのメモリ内ライトバッファから前記メモリシステム内の第1のバッファ転送し、前記第1のバッファに転送された前記ライトデータを、前記複数の書き込み先ブロックのうちの前記第1のストリームに対応する第1の書き込み先ブロックに書き込むように構成されている、メモリシステム。

請求項2

前記コントローラは、前記第1のバッファへの前記ライトデータの転送完了後、もしくは前記第1の書き込み先ブロックへの前記ライトデータの書き込み完了後に、前記第1のグループに属する前記ライトコマンドの各々の完了を示す応答を前記ホストに返すように構成されている請求項1記載のメモリシステム。

請求項3

前記コントローラは、同じグループに属するライトコマンドそれぞれによって指定される長さの合計を算出することによって同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達したか否かを判定する請求項1記載のメモリシステム。

請求項4

前記コントローラは、前記受信されたライトコマンドの各々を前記複数のストリームに対応する前記メモリシステム内の複数のコマンドキューの一つに格納することによって前記受信されたライトコマンドそれぞれを前記複数のグループに分類するように構成されている請求項1記載のメモリシステム。

請求項5

前記コントローラは、前記複数のストリームのうちの第2のストリームに対応する第2のグループに属するライトコマンドの受信から所定時間が経過した場合、前記第2のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達していなくても、前記第2のグループに属するライトコマンドの集合に関連付けられたライトデータを前記ホストのメモリ内の前記ライトバッファから前記第1のバッファに転送し、前記第1のバッファに転送された前記ライトデータにパディングを加えて前記最小書き込みサイズ分のライトデータを生成し、前記生成されたライトデータを前記複数の書き込み先ブロックのうちの前記第2のストリームに対応する第2の書き込み先ブロックに書き込むように構成されている請求項1記載のメモリシステム。

請求項6

前記コントローラは、前記複数のストリームのうちの第2のストリームに対応する第2のグループに属するライトコマンドの受信から所定時間が経過した場合、前記第2のグループに属する前記ライトコマンドに関連付けられたライトデータを前記ホストのメモリ内の前記ライトバッファから前記メモリシステム内の第2のバッファに前記第2のストリーム用のライトデータとして転送し、前記第2のグループに属する前記ライトコマンドの完了を示す応答を前記ホストに返すように構成されている請求項1記載のメモリシステム。

請求項7

前記コントローラは、前記第2のバッファに格納されている前記第2のストリーム用のライトデータの長さと前記第2のグループに属するライトコマンドの集合に関連付けられたライトデータの長さとの合計長さが前記最小書き込みサイズに達した場合、前記第2のグループに属する前記ライトコマンドの集合に関連付けられたライトデータを前記ホストのメモリ内の前記ライトバッファから前記第1のバッファに転送し、前記第1のバッファに転送された前記ライトデータを前記第2のバッファに格納されている前記第2のストリーム用のライトデータと一緒に、前記複数の書き込み先ブロックのうちの前記第2のストリームに対応する第2の書き込み先ブロックに書き込むように構成されている請求項6記載のメモリシステム。

請求項8

前記第1のバッファは前記最小書き込みサイズと同じサイズを有する請求項1記載のメモリシステム。

請求項9

複数のブロックを含む不揮発性メモリを含むメモリシステムを制御する制御方法であって、複数のストリームに対応する複数の書き込み先ブロックを前記複数のブロックから割り当てることと、前記複数のストリームの一つを示すストリーム識別子を各々が含む複数のライトコマンドをホストから受信することと、前記受信されたライトコマンドそれぞれを前記複数のストリームに対応する複数のグループに分類することと、前記複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記不揮発性メモリの最小書き込みサイズに達したか否かを判定することと、前記複数のストリームのうちの第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライトコマンドの集合に関連付けられたライトデータを、前記ホストのメモリ内のライトバッファから前記メモリシステム内の第1のバッファに転送することと、前記第1のバッファに転送された前記ライトデータを、前記複数の書き込み先ブロックのうちの前記第1のストリームに対応する第1の書き込み先ブロックに書き込むこととを具備する制御方法。

技術分野

0001

本発明の実施形態は、不揮発性メモリを制御する技術に関する。

背景技術

0002

近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NANDフラッシュ技術ベースソリッドステートドライブSSD)が知られている。

0003

SSDは、データセンターサーバのような様々なホスト計算機システムストレージデバイスとして使用されている。

0004

ホスト計算機システムにおいて利用されるストレージデバイスにおいては、異なる種類のデータを異なる書き込み先ブロックに書き込むことを可能にすることが求められる場合がある。

先行技術

0005

米国特許出願公開第2018/0165014号明細書
国際公開第2015/114754号
米国特許第9026722号明細書

発明が解決しようとする課題

0006

本発明が解決しようとする課題は、バッファのサイズを増やすことなく、複数の書き込み先ブロックを利用可能なメモリシステムおよび制御方法を提供することである。

課題を解決するための手段

0007

実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、複数のストリームに対応する複数の書き込み先ブロックを前記複数のブロックから割り当てるように構成されたコントローラとを具備する。前記コントローラは、前記複数のストリームの一つを示すストリーム識別子を各々が含む複数のライトコマンドを前記ホストから受信する。前記コントローラは、前記受信されたライトコマンドそれぞれを前記複数のストリームに対応する複数のグループ分類する。前記コントローラは、前記複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記不揮発性メモリの最小書き込みサイズに達したか否かを判定する。前記コントローラは、前記複数のストリームのうちの第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライトコマンドの集合に関連付けられたライトデータを、前記ホストのメモリ内ライトバッファから前記メモリシステム内の第1のバッファに転送する。前記コントローラは、前記第1のバッファに転送された前記ライトデータを、前記複数の書き込み先ブロックのうちの前記第1のストリームに対応する第1の書き込み先ブロックに書き込む。

図面の簡単な説明

0008

ホストと実施形態に係るメモリシステムとの関係を示すブロック図。
実施形態に係るメモリシステムの構成例を示すブロック図。
実施形態に係るメモリシステムにおいて使用される複数のチャンネルと複数のNAND型フラッシュメモリチップとの関係を示すブロック図。
実施形態に係るメモリシステムにおいて使用される、あるスーパーブロックの構成例を示す図。
複数のストリームに関連付けられた複数種のライトデータを複数のストリームに対応する複数の書き込み先ブロックにそれぞれ書き込むストリーム書き込み動作を示すブロック図。
フリーブロック群から複数のストリームに対応する複数の書き込み先ブロックを割り当てる動作を示すブロック図。
複数のストリームに対応する複数のバッファを使用して実行される書き込み動作を示すブロック図。
実施形態に係るメモリシステムにおいて実行される書き込み動作を示すブロック図。
データ書き込みに関する、ホストと実施形態に係るメモリシステムそれぞれの構成例を示すブロック図。
実施形態に係るメモリシステムにおいて実行される書き込み動作のシーケンスを示す図。
データ読み出しに関する、ホストと実施形態に係るメモリシステムそれぞれの構成例を示すブロック図。
実施形態に係るメモリシステムにおいて実行される書き込み動作の手順を示すフローチャート
実施形態に係るメモリシステムにおいて実行される書き込み動作の別の手順を示すフローチャート。
実施形態に係るメモリシステムにおいて実行される書き込み動作のさらに別の手順を示すフローチャート。
実施形態に係るメモリシステムにおいて実行される書き込み動作のさらに別の手順を示すフローチャート。

実施例

0009

以下、図面を参照して、実施形態を説明する。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。

0010

このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。

0011

ホスト(ホストデバイス)2は、複数のSSD3を制御するように構成されている。ホスト2は、複数のSSD3によって構成されるフラッシュアレイストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。

0012

なお、SSD3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のSSD3)を制御するコントローラを含む。SSD3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、SSD3のホストとして機能してもよい。

0013

以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。

0014

ホスト(サーバ)2と複数のSSD3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCIExpress(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe overFabrics(NVMeOF)等を使用し得る。

0015

ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。

0016

ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。

0017

ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。

0018

複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。各仮想マシンに対応するオペレーティングシステムは、I/Oサービスを含む。このI/Oサービスは、論理ブロックアドレス(LBA)ベースのブロックI/Oサービスであってもよいし、あるいは、キーバリューストアサービスであってもよい。

0019

各仮想マシンに対応するオペレーティングシステムにおいては、I/Oサービスは、ユーザアプリケーションからのライト/リード要求応答して、I/Oコマンド(ライトコマンド、リードコマンド)を発行する。これらI/Oコマンドはホスト2内のサブミッションキューに入れられ、そしてこのサブミッションキューを介してSSD3に送出される。

0020

SSD3は、NAND型フラッシュメモリのような不揮発性メモリを含む。SSD3は、異なるストリームに関連付けられた複数種のライトデータを異なるブロックにそれぞれ書き込むストリーム書き込みをサポートしている。SSD3は、不揮発性メモリ内の複数のブロックから複数のストリームに対応する複数の書き込み先ブロックを割り当てる。書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。

0021

ホスト2からSSD3に送出されるライトコマンドの各々は、複数のストリームの一つを示すストリーム識別子(ストリームID)を含む。SSD3があるストリームのストリームIDを含むライトコマンドをホスト2から受信した場合、SSD3は、このストリームに対応する書き込み先ブロックにこのライトコマンドに関連付けられたライトデータを書き込む。SSD3が別のストリームのストリームIDを含むライトコマンドをホスト2から受信した場合、SSD3は、この別のストリームに対応する別の書き込み先ブロックにこのライトコマンドに関連付けられたライトデータを書き込む。あるストリームに対応する書き込み先ブロック全体がデータで満たされると、このストリーム用の新たな書き込み先ブロックが割り当てられる。

0022

したがって、ホスト2は、ストリームIDを各々が含むライトコマンドをSSD3に発行することによって、例えば、あるエンドユーザ端末61(クライアント)に対応するユーザアプリケーションのデータのような特定のデータのグループが1以上の特定のブロックに書き込まれ、他のエンドユーザ端末61(クライアント)に対応するユーザアプリケーションのデータのような別の特定のデータのグループが別の1以上のブロックに書き込まれる、といったデータ配置を実現することができる。

0023

図2は、SSD3の構成例を示す。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。

0024

NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。

0025

NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0〜BLKm−1を含む。ブロックBLK0〜BLKm−1の各々は複数のページ(ここではページP0〜Pn−1)を含む。ブロックBLK0〜BLKm−1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0〜Pn−1は、データ書き込み動作およびデータ読み出し動作の単位である。

0026

コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System−on−a−chip(SoC)のような回路によって実現されてもよい。

0027

NAND型フラッシュメモリ5は、図3に示すように、複数のNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)を含んでいてもよい。個々のNAND型フラッシュメモリチップは独立して動作可能である。このため、NAND型フラッシュメモリチップは、並列動作可能な単位として機能する。図3においては、NANDインタフェース13に16個のチャンネルCh.1〜Ch.16が接続されており、16個のチャンネルCh.1〜Ch.16の各々に2つのNAND型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルCh.1〜Ch.16に接続された16個のNAND型フラッシュメモリチップ#1〜#16がバンク#0として編成されてもよく、またチャンネルCh.1〜Ch.16に接続された残りの16個のNAND型フラッシュメモリチップ#17〜#32がバンク#1として編成されてもよい。バンクは、複数のメモリモジュールバンクインタリーブによって並列動作させるための単位として機能する。図3の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリチップを並列動作させることができる。

0028

消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含む並列単位(スーパーブロック)の単位で実行されてもよい。一つの並列単位、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリチップ#1〜#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリチップ#1〜#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1〜#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリチップ#1〜#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。

0029

図4には、32個の物理ブロック(ここでは、NAND型フラッシュメモリチップ#1内の物理ブロックBLK2、NAND型フラッシュメモリチップ#2内の物理ブロックBLK3、NAND型フラッシュメモリチップ#3内の物理ブロックBLK7、NAND型フラッシュメモリチップ#4内の物理ブロックBLK4、NAND型フラッシュメモリチップ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリチップ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。

0030

書き込み先ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。

0031

次に、図2のコントローラ4の構成について説明する。

0032

コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位リードライト動作ブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、SSD3の論理アドレス空間内の位置をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。

0033

SSD3をアクセスするためにホスト2によって使用される論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル論理物理アドレス変換テーブル:L2Pテーブル)31を用いて実行される。コントローラ4は、L2Pテーブル31を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたNAND型フラッシュメモリ5内の最新物理記憶位置を示す。L2Pテーブル31は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。

0034

NAND型フラッシュメモリ5においては、ページへのデータ書き込みは1消去サイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。このため、既に書き込まれているデータを更新する場合には、コントローラ4はそのブロック(または別のブロック)内の未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、L2Pテーブル31を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。本実施形態では、L2Pテーブル31の更新は、書き込むべきデータ(ライトデータ)がNAND型フラッシュメモリ5に書き込まれた後に実行されてもよいし、ホスト2からライトデータが転送された後に実行されもよいし、ホスト2からライトコマンドが受信された後に実行されもよい。

0035

ブロック管理には、バッドブロック不良ブロック)の管理と、ウェアレベリングと、ガベージコレクションGC)等が含まれる。ウェアレベリングは、ブロックそれぞれの書き換え回数プログラムイレーズサイクルの数)を均一化するための動作である。

0036

GCは、フリーブロック個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。GCにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、L2Pテーブル31から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、L2Pテーブル31を更新して、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後に再利用することが可能となる。

0037

コントローラ4は、ホストインタフェース11、CPU12−1、CPU12−2、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、内部バッファ16、ECCエンコードデコード部17、等を含む。これらホストインタフェース11、CPU12−1、CPU12−2、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、内部バッファ16、ECCエンコード/デコード部17は、バス10を介して相互接続される。

0038

このホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。あるいは、SSD3がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース11は、NVMe overFabrics(NVMeOF)コントローラであってもよい。

0039

ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、デアロケーションアンマップトリム)コマンド、他の様々なコマンドが含まれる。

0040

ライトコマンドは書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むコマンド(ライト要求)であり、ライトデータの論理アドレス(開始LBA)、このライトデータの長さ、このライトデータが関連付けられているストリームを示すストリーム識別子(ストリームID)、このライトデータが格納されているホスト2のメモリ内のライトバッファ内の位置を示すデータポインタ、等を含む。

0041

リードコマンドはデータをNAND型フラッシュメモリ5から読み出すコマンド(リード要求)であり、読み出すべきデータの論理アドレス(開始LBA)、このデータの長さ、このデータが転送されるべきホスト2のメモリ内のリードバッファ内の位置を示すデータポインタ、等を含む。

0042

デアロケーション(アンマップ/トリム)コマンドは、ある論理アドレスに対応するデータを無効化するためのコマンドである。デアロケーション(アンマップ/トリム)コマンドは、無効化すべき論理アドレス範囲(LBA範囲)を指定する。

0043

CPU12−1、12−2の各々は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14を制御するように構成されたプロセッサである。CPU12−1、12−2の各々は、SSD3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラムファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。CPU12−1、12−2の各々は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12−1、12−2の各々の動作は、上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。一つのコマンドに対するコマンド処理は複数の処理を含む。これら複数の処理はCPU12−1、12−2によって分担して実行されてもよいし、いずれか一方のCPUのみによって実行されてもよい。

0044

CPU12−1、12−2の少なくとも一方は、ライト制御部21およびリード制御部22として機能することができる。なお、これらライト制御部21およびリード制御部22の各々の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。

0045

ライト制御部21は、ホスト2から受信されるライトコマンドに応じて、ライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込むための処理を実行する。ライト制御部21は、上述のストリーム書き込み動作をサポートしている。ライト制御部21は、NAND型フラッシュメモリ5の複数のブロックから複数のストリームに対応する複数の書き込み先ブロックを割り当て、これら割り当てられた複数の書き込み先ブロックを管理する。

0046

NAND型フラッシュメモリには、プログラムディスターブを低減するために、ブロック内の複数のページ内の一つのページに書き込まれたデータの読み出しがこのページに後続する1以上のページへのデータ書き込み後に可能となるようなものもある。各ページのデータが読み出し可能となるタイミングはNAND型フラッシュメモリに適用されている書き込み方法によって異なる。

0047

例えば、一つのメモリセル当たりに3ビットのデータを格納可能なトリプルレベルセルTLC)−フラッシュメモリにおいては、ワード線WL0に接続されたメモリセル群ロアーページ、ミドルページ、およびアッパーページが割り当てられ、次のワード線WL1に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、さらに次のワード線WL2に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、さらに次のワード線WL3に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、そして最後のワード線WLnに接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられる。各ワード線に接続されたメモリセル群においては、アッパーページに対する書き込み動作が完了するまでは、ロアーページおよびミドルページの各々からデータを正しく読み出すことでできない。

0048

また、NAND型フラッシュメモリにおいては、各ブロックにデータを書き込むために必要なページの順序を示すページ書き込み順序が規定されている。例えば、TLC−フラッシュメモリにおいては、プログラムディスターブによる影響を抑制するために、隣接する幾つかのワード線に対する書き込み動作が交互に実行されるようにページ書き込み順序が規定されている。

0049

例えば、WL0のロアーページへの書き込み、WL1のロアーページへの書き込み、WL0のミドルページへの書き込み、WL2のロアーページへの書き込み、WL1のミドルページへの書き込み、WL0のアッパーページへの書き込み、WL3のロアーページへの書き込み、WL2のミドルページへの書き込み、WL1のアッパーページへの書き込み、といった書き込み順序で書き込み動作が実行される。このため、ブロック内の複数のページ内の一つのページに書き込まれたデータの読み出しは、このページに後続する幾つかのページへのデータ書き込み後に可能となる。

0050

ライト制御部21は、ライトコマンドそれぞれをホスト2から受信し、各ライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込む書き込み動作を実行する。書き込み動作は、(1)ライトデータが書き込まれるべきNAND型フラッシュメモリ5内の記憶位置を示す物理アドレスをこのライトデータに割り当てるアドレス割り当て動作、(2)このライトデータをホスト2のメモリ内のライトバッファから転送するデータ転送動作、(3)ホスト2のメモリ内のライトバッファから転送されたライトデータを書き込み先ブロックに書き込むフラッシュ書き込み動作(プログラム動作)、(4)このライトデータの論理アドレスにこのライトデータに割り当てられた物理アドレスが関連付けられるようにL2Pテーブル31を更新するL2P更新動作、等を含む。

0051

本実施形態においては、ライト制御部21は、上述したように、異なるストリームに関連付けられたライトデータを異なる書き込み先ブロックにそれぞれ書き込むストリーム書き込みをサポートしている。ホスト2から受信される各ライトコマンドはストリームIDを含んでいるので、ライト制御部21は、各ライトコマンドに関連付けられたライトデータがどのストリームに関連付けられたデータであるかを識別することができる。

0052

データセンターのサーバのようなホスト計算機システムにおいては、多数のエンドユーザをサポートできるようにするために、多数のストリームを利用可能なSSDの実現が望まれる場合がある。

0053

しかし、もしホスト2からライトコマンドを受信する度にライトデータをホスト2からSSD3内のバッファに転送するという構成が使用されたならば、大容量のバッファをSSD内に用意することが必要とされ、これによってSSD3のコストアップが引き起こされることになる。また、もし大容量のバッファをDRAM6の記憶領域内に確保するという構成が使用されたならば、データ転送のためにコントローラ4とDRAM6との間のトラフィックが増大し、これによってDRAM6内のL2Pテーブル31をアクセスするための速度が低下し、結果としてSSD3の性能低下を招くことになる。

0054

本実施形態においては、ライト制御部21は、必要なバッファサイズを削減できるようにするために、以下のストリーム書き込み動作を実行する。

0055

ライト制御部21は、ホスト2からライトコマンドそれぞれを受信する。これら各ライトコマンドは、ストリームIDを含む。ライト制御部21は、受信したライトコマンドそれぞれを複数のストリームに対応する複数のグループ(ライトコマンドグループ)に分類する。そして、ライト制御部21は、グループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さがNAND型フラッシュメモリ5の最小書き込みサイズに達したか否かを判定する。

0056

NAND型フラッシュメモリ5の最小書き込みサイズは、ページサイズ、つまり一つのページのサイズ(例えば16Kバイト)であってもよい。あるいは、2つのプレーンを含むNAND型フラッシュメモリチップがNAND型フラッシュメモリ5として使用されるケースにおいては、2つのプレーンからそれぞれ選択された2つのブロックに対する書き込み動作が並列に実行される場合がある。この場合には、ページサイズの2倍(例えば32Kバイト)がNAND型フラッシュメモリ5の最小書き込みサイズとして使用されてもよい。

0057

各ライトコマンドによって指定されるライトデータの最小の長さは、例えば、4Kバイト(または512バイト)である。したがって、NAND型フラッシュメモリ5の最小書き込みサイズは、各ライトコマンドによって指定されるライトデータの最小サイズよりも大きい。

0058

同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していな場合、ライト制御部21は、このグループに属するライトコマンドの集合に関連付けられたライトデータをホスト2のメモリ内のライトバッファから取得する処理を実行せずに、このグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達するまで待つ。これは、NAND型フラッシュメモリ5への書き込みを開始できないライトデータによってSSD3内のバッファ内の領域が長い間専有されてしまうことを防止するためである。

0059

このグループに属する新たなライトコマンドがホスト2から受信されることによってこのグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、ライト制御部21は、最小書き込みサイズを有する、このグループに属するライトコマンドの集合に関連付けられたライトデータを、ホスト2のメモリ内のライトバッファから内部バッファ16に転送する。内部バッファ16は、例えば、コントローラ4内のSRAM等によって実現されてもよい。この内部バッファ16は、第1のバッファとしても参照される。そして、ライト制御部21は、内部バッファ16に転送されたライトデータを、このグループに対応するストリーム用に割り当てられている書き込み先ブロックに書き込む。この場合、通常、このライトデータは符号化され、符号化されたライトデータ(例えば、ライトデータとエラー訂正コード(ECC))が書き込み先ブロックに書き込まれる。書き込み先ブロックへのライトデータの書き込み完了後に、ライト制御部21は、このグループに属するライトコマンドの各々の完了を示す応答をホスト2に返す。あるいは、このグループに属するライトコマンドの集合に関連付けられたライトデータを内部バッファ16に転送する処理が完了した後に、ライト制御部21は、このグループに属するライトコマンドの各々の完了を示す応答をホスト2に返してもよい。

0060

このライトデータが書き込み先ブロックに書き込まれると、内部バッファ16内の記憶領域は即座に解放可能となる。よって、内部バッファ16を、最小書き込みサイズを有する別のストリームに対応するライトデータの転送に利用することが可能となる。したがって、内部バッファ16のサイズは最小書き込みサイズと同程度のサイズで十分であるので、大容量のバッファを用意すること無く、多数のストリームを同時に利用することが可能となる。

0061

また、データ転送のためにコントローラ4とDRAM6との間のトラフィックが増大してしまうことも無いので、L2Pテーブル31のアクセス速度の低下、ひいてはSSD3全体の性能低下を抑制することができる。

0062

なお、受信された一つのライトコマンドによって指定された長さが最小書き込みサイズに一致する場合もある。この場合には、この一つのライトコマンドが受信された後に、このライトコマンドに関連付けられたライトデータがホスト2のメモリ内のライトバッファから内部バッファ16に転送される。

0063

また、受信された一つのライトコマンドによって指定された長さが最小書き込みサイズよりも大きい場合もある。この場合には、この一つのライトコマンドが受信された後に、このライトコマンドに関連付けられたライトデータのうち、最小書き込みサイズ分のデータ部分のみがホスト2のメモリ内のライトバッファから内部バッファ16に転送される。そして、このライトデータの残り部分についてのホスト2のメモリ内のライトバッファから内部バッファ16への転送は、残り部分の長さと、このライトコマンドと同じストリームIDを含む後続の1以上のライトコマンドのライトデータの長さとの合計長さが、最小書き込みサイズに達した後に実行される。

0064

リード制御部22は、ホスト2からリードコマンドを受信し、この受信されたリードコマンドによって指定されたデータをNAND型フラッシュメモリ5、SSD3内の第2のバッファ、またはホスト2のメモリ内のライトバッファから読み出す。SSD3内の第2のバッファとしては、DRAM6内のバッファ32を使用することができる。第2のバッファ(DRAM6内のバッファ32)は、たとえば、ライトコマンドの受信から所定時間が経過したライトコマンドに関連付けられたライトデータを格納するために使用される。つまり、ライト制御部21は、あるストリームに対応するグループに属するあるライトコマンドの受信から所定時間が経過した場合、このストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、受信から所定時間が経過したこのライトコマンドに関連付けられたライトデータのみをホスト2のメモリ内のライトバッファからDRAM6内のバッファ32にこのストリーム用のライトデータとして転送し、このライトコマンドの完了を示す応答をホスト2に返す。これにより、このライトコマンドのタイムアウトエラーが起こることを防止することができる。

0065

リードコマンドによって指定されたデータがNAND型フラッシュメモリ5から読み出し可能なデータである場合、リード制御部22は、このデータをNAND型フラッシュメモリ5から読み出し、読み出したデータをホスト2に返す。

0066

リードコマンドによって指定されたデータがNAND型フラッシュメモリ5から読み出し可能なデータではない場合もある。例えば、リードコマンドによって指定されたデータがNAND型フラッシュメモリ5への書き込みが開始されていないデータである場合、このデータはNAND型フラッシュメモリ5から読み出し可能なデータではない。また、NAND型フラッシュメモリ5に書き込みまれたがまだ読み出し可能になっていないデータも、NAND型フラッシュメモリ5から読み出し可能なデータではない。

0067

リードコマンドによって指定されたデータがNAND型フラッシュメモリ5から読み出し可能なデータではない場合、このデータがDRAM6内のバッファ32に存在する場合には、リード制御部22は、このデータをバッファ32から読み出し。読み出したデータをホスト2に返す。このデータがDRAM6内のバッファ32に存在しない場合には、リード制御部22は、まず、このデータをホスト2のメモリ内のライトバッファから取得し、そしてこの取得したデータをホスト2に返す。

0068

NANDインタフェース13は、CPU12−1またはCPU12−2の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。

0069

DRAMインタフェース14は、CPU12−1またはCPU12−2の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、L2Pテーブル31およびバッファ32用の記憶領域として利用されてもよい。また、DRAM6の記憶領域の他の一部は、ブロック管理テーブル33、書き込み先ブロック管理テーブル34の格納のために使用されてもよい。

0070

DMAC15は、CPU12−1またはCPU12−2の制御の下、ホスト2のメモリと内部バッファ16との間のデータ転送を実行する。ホスト2のメモリ内のライトバッファから内部バッファ16にライトデータを転送すべき場合には、CPU12−1またはCPU12−2は、ホスト2のメモリ内のライトバッファ上の位置を示す転送元アドレス、データサイズ、内部バッファ16上の位置を示す転送先アドレスをDMAC15に対して指定する。

0071

ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。

0072

図5は、複数のストリームに関連付けられた複数種のライトデータを複数のストリームに対応する複数の書き込み先ブロックにそれぞれ書き込むストリーム書き込み動作を示す。

0073

図5では、ストリームID#1のストリームに対して書き込み先フロックBLK10が関連付けられており、ストリームID#2のストリームに対して書き込み先フロックBLK20が関連付けられており、ストリームID#3のストリームに対して書き込み先フロックBLK30が関連付けられており、ストリームID#4のストリームに対して書き込み先フロックBLK40が関連付けられており、ストリームID#5のストリームに対して書き込み先フロックBLK50が関連付けられており、ストリームID#6のストリームに対して書き込み先フロックBLK60が関連付けられており、そしてストリームID#nのストリームに対して書き込み先フロックBLK100が関連付けられている場合が例示されている。

0074

例えば、エンドユーザ#1に対応するI/Oサービス(仮想マシン#1)はストリームID#1を各々が含むライトコマンドを発行し、エンドユーザ#2に対応するI/Oサービス(仮想マシン#2)はストリームID#2を各々が含むライトコマンドを発行し、そしてエンドユーザ#nに対応するI/Oサービス(仮想マシン#n)はストリームID#nを各々が含むライトコマンドを発行する。

0075

ストリームID#1を含むライトコマンドに関連付けられたライトデータは書き込み先フロックBLK10に書き込まれ、ストリームID#2を含むライトコマンドに関連付けられたライトデータは書き込み先フロックBLK20に書き込まれ、ストリームID#nを含むライトコマンドに関連付けられたライトデータは書き込み先フロックBLK100に書き込まれる。

0076

図6は、フリーブロック群から複数のストリームに対応する複数の書き込み先ブロックを割り当てる動作を示す。

0077

図6においては、図示の簡単化のために、ストリームID#1のストリーム(ストリーム#1)とストリームID#2のストリーム(ストリーム#2)の2つのストリームのみが例示されている。

0078

NAND型フラッシュメモリ5内の各ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックプールと称されるリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックプールと称されるリストによって管理される。アクティブブロックプール101−1は、ストリーム#1に関連付けられた有効データをそれぞれ格納しているブロックのリストである。アクティブブロックプール101−nは、ストリーム#nに関連付けられた有効データをそれぞれ格納しているブロックのリストである。フリーブロックプール200は全てのフリーブロックのリストである。これらフリーブロックは複数のストリームによって共有される。

0079

コントローラ4がストリームID#1を含むライトコマンドを受信した場合、コントローラ4は、ストリーム#1用の書き込み先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。

0080

ストリーム#1用の書き込み先ブロックが割り当て済みでないならば、コントローラ4は、フリーブロックプール200内の一つのフリーブロックをストリーム#1用の書き込み先ブロックとして割り当てる。図6では、ブロックBLK10がストリーム#1用の書き込み先ブロックとして割り当てられた場合が例示されている。コントローラ4は、ストリームID#1を含むライトコマンドそれぞれに関連付けられたライトデータをブロックBLK10に書き込む。ストリーム#1用の書き込み先ブロックが既に割り当てられている場合、コントローラ4は、フリーブロックをストリーム#1用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。

0081

ストリーム#1用の書き込み先ブロック(ここではBLK10)全体がホスト2からのライトデータで満たされると、コントローラ4は、この書き込み先ブロックBLK10をアクティブブロックプール101−1によって管理するとともに(クローズ)、フリーブロックプール200内のフリーブロックをストリーム#1用の新たな書き込み先ブロック(オープンブロック)として割り当てる。

0082

アクティブブロックプール101−1内のあるブロック内の全ての有効データが、データ更新、デアロケーション(アンマップ、トリム)、ガベージコレクション等によって無効化されると、コントローラ4は、このブロックをフリーブロックプール200に移動してこのブロックを書き込み先ブロックとして再利用可能な状態に遷移させる。

0083

コントローラ4がストリームID#nを含むライトコマンドを受信した場合、コントローラ4は、ストリーム#n用の書き込み先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。

0084

ストリーム#n用の書き込み先ブロックが割り当て済みでないならば、コントローラ4は、フリーブロックプール200内の一つのフリーブロックをストリーム#n用の書き込み先ブロックとして割り当てる。図6では、ブロックBLK100がストリーム#n用の書き込み先ブロックとして割り当てられた場合が例示されている。コントローラ4は、ストリームID#nを含むライトコマンドそれぞれに関連付けられたライトデータをブロックBLK100に書き込む。ストリーム#n用の書き込み先ブロックが既に割り当てられている場合、コントローラ4は、フリーブロックをストリーム#n用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。

0085

ストリーム#n用の書き込み先ブロック(ここではBLK100)全体がホスト2からのライトデータで満たされると、コントローラ4は、この書き込み先ブロックBLK100をアクティブブロックプール101−nによって管理するとともに(クローズ)、フリーブロックプール200内のフリーブロックをストリーム#n用の新たな書き込み先ブロック(オープンブロック)として割り当てる。

0086

アクティブブロックプール101−n内のあるブロック内の全ての有効データが、データ更新、デアロケーション(アンマップ、トリム)、ガベージコレクション等によって無効化されると、コントローラ4は、このブロックをフリーブロックプール200に移動してこのブロックを書き込み先ブロックとして再利用可能な状態に遷移させる。

0087

図7は、複数のストリームに対応する複数のバッファを使用して実行される書き込み動作を示す。

0088

もしホスト2からライトコマンドを受信する度にライトデータをホスト2からSSD3内のバッファに転送するという構成が用いられたならば、図7に示すように、ストリーム#1、ストリーム#2、ストリーム#3、…ストリーム#nにそれぞれ対応するライトバッファWB#1、ライトバッファWB#2、ライトバッファWB#3、…ライトバッファWB#nをSSD3内に用意することが必要となる。

0089

ストリームID#1を含むライトコマンドが受信される度に、このライトコマンドに関連付けられたライトデータがホスト2のメモリ内のライトバッファからライトバッファWB#1に転送される。ライトバッファWB#1に転送されたライトデータは、ライトバッファWB#1内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達するまで、ライトバッファWB#1内に維持することが必要とされる。ライトバッファWB#1内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータがストリーム#1に対応する書き込み先ブロックBLK10に書き込み可能となる。

0090

同様に、ストリームID#nを含むライトコマンドが受信される度に、このライトコマンドに関連付けられたライトデータがホスト2のメモリ内のライトバッファからライトバッファWB#nに転送される。ライトバッファWB#nに転送されたライトデータは、ライトバッファWB#n内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達するまで、ライトバッファWB#n内に維持することが必要とされる。ライトバッファWB#n内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータがストリーム#nに対応する書き込み先ブロックBLK100に書き込み可能となる。

0091

したがって、もし対応するイトバッファ内に蓄積されたライトデータの総サイズが最小書き込みサイズ未満であるストリームが多数存在すると、NAND型フラッシュメモリ5への書き込みを開始できないライトデータによって多くのバッファ領域が消費されてしまうことになる。

0092

図8は、SSD3において実行される書き込み動作を示す。
SSD3のコントローラ4は、ホスト2からライトコマンドを受信する度にライトデータをホスト2のメモリ内のライトバッファ51から内部バッファ16に転送するのではなく、ホスト2からライトコマンドを受信する度にこのライトコマンドだけをコマンドキュー41に格納する。すなわち、コントローラ4は、受信されたライトコマンドの各々をストリーム#1〜#nに対応するコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応するn+1個のグループに分類する。

0093

この場合、ストリームID#1を含む各ライトコマンドはコマンドキュー41−1に格納され、ストリームID#2を含む各ライトコマンドはコマンドキュー41−2に格納され、ストリームID#3を含む各ライトコマンドはコマンドキュー41−3に格納され、ストリームID#nを含む各ライトコマンドはコマンドキュー41−nに格納される。

0094

コントローラ4は、同じグループに属するライトコマンドそれぞれによって指定される長さの合計(データサイズ)を算出することによって、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達したか否かを判定する。

0095

例えば、ストリーム#1に対応するグループについては、コントローラ4は、コマンドキュー41−1に格納されているライトコマンドそれぞれに含まれる長さの合計を算出する。コマンドキュー41−1に格納されているライトコマンドそれぞれに含まれる長さの合計が最小書き込みサイズに達した場合には、コントローラ4は、ストリーム#1に対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達したと判定する。

0096

同様に、ストリーム#2対応するグループについては、コントローラ4は、コマンドキュー41−2に格納されているライトコマンドそれぞれに含まれる長さの合計を算出する。コマンドキュー41−2に格納されているライトコマンドそれぞれに含まれる長さの合計が最小書き込みサイズに達した場合には、コントローラ4は、ストリーム#2に対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達したと判定する。

0097

あるグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、例えば、ストリーム#2に対応するグループに属するライトコマンドそれぞれによって指定される長さが最小書き込みサイズに達した場合、コントローラ4は、これらライトコマンドの各々に含まれるデータポインタおよび長さに基づいて、ストリーム#2に関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する。そして、コントローラ4は、内部バッファ16に転送されたライトデータを、ストリーム#2に対応する書き込み先ブロックBLK20に書き込む。ライトデータが書き込み先ブロックBLK20に書き込まれると、内部バッファ16内のこのライトデータは不要となる。

0098

したがって、例えば、次に、コマンドキュー41−3に格納されているライトコマンドそれぞれに含まれる長さの合計が最小書き込みサイズに達した場合には、コントローラ4は、ストリーム#3に対応するグループに属するライトコマンドの集合に関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送することができ、そして内部バッファ16に転送されたこのライトデータを、ストリーム#3に対応する書き込み先ブロックBLK30に書き込むことができる。

0099

このように、本実施形態では、コントローラ4は、受信されたライトコマンド群に対応するライトデータの長さ(サイズ)をストリーム毎チェックして、ライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する。そして、ライトデータのサイズが最小書き込みサイズに達したストリームに関連付けられた最小書き込みサイズ分のライトデータがホストメモリ内のライトバッファ51から内部バッファ16に転送される。内部バッファ16に転送された最小書き込みサイズ分のライトデータは、即座に書き込みを開始することが可能である。したがって、内部バッファ16は複数のストリームによって共有することができる。よって、SSD3によってサポートされるべきストリームの数が増えても、最小書き込みサイズ分の内部バッファ16のみを用意するだけで、ストリーム書き込み動作を効率よく実行することができる。

0100

図9は、データ書き込みに関する、ホスト2とSSD3それぞれの構成例を示す。
ホスト2においては、各ライトコマンドはサブミッションキュー71に格納される。各ライトコマンドは、ライトデータのLBA、ライトデータの長さ、ストリームID、ライトデータが格納されているライトバッファ51内の位置を示すデータポインタを含む。各ライトコマンドの完了を示す応答はコンプリーションキュー72に格納される。

0101

各ライトコマンドに関連付けられたライトデータは、ホストメモリ内のライトバッファ51に格納される。ライトバッファ51においては、ストリーム#1〜ストリーム#nに対応する複数の領域が割り当てられていてもよい。この場合、ストリーム#1に関連付けられたライトデータはストリーム#1に対応するライトバッファ51内の領域に格納され、ストリーム#2に関連付けられたライトデータはストリーム#2に対応するライトバッファ51内の領域に格納され、ストリーム#nに関連付けられたライトデータはストリーム#nに対応するライトバッファ51内の領域に格納される。

0102

SSD3においては、ライト制御部21は、ホスト2のサブミッションキュー71からライトコマンドそれぞれを受信し、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。ストリームID#1を含む各ライトコマンドはコマンドキュー41−1に格納され、ストリームID#2を含む各ライトコマンドはコマンドキュー41−2に格納され、そしてストリームID#nを含む各ライトコマンドはコマンドキュー41−nに格納される。

0103

ライト制御部21は、受信した各ライトコマンドに関連付けられたライトデータが書き込まれるべきNAND型フラッシュメモリ5内の記憶位置を示す物理アドレス(PBA)をこのライトデータに割り当てるアドレス割り当て動作を実行する。物理アドレスは、ブロックアドレスと、ページアドレスと、ページ内オフセットとによって表されてもよい。各コマンドキューにおいては、ライトコマンド毎に、LBA、長さ、PBA、バッファアドレスが管理されてもよい。PBAは、このライトコマンドに関連付けられたライトデータに割り当てられた物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を示す。バッファアドレスは、このライトコマンドに関連付けられたライトデータが格納されているホストメモリのライトバッファ51内の位置を示す。このライトバッファ51内の位置は、このライトコマンドに含まれるデータポインタによって指定される。

0104

なお、このライトデータがホストメモリのライトバッファ51からDRAM6のバッファ32(以下、DRAMバッファ32と称する)に転送された場合には、バッファアドレスの値は、このライトデータが格納されているDRAMバッファ32内の位置を示す値に更新される。

0105

DRAMバッファ32においては、ストリーム#1〜ストリーム#nに対応する複数の領域が割り当てられていてもよい。この場合、ストリーム#1に関連付けられたライトデータはストリーム#1に対応するDRAMバッファ32内の領域に転送され、ストリーム#2に関連付けられたライトデータはストリーム#2に対応するDRAMバッファ32内の領域に転送され、ストリーム#nに関連付けられたライトデータはストリーム#nに対応するDRAMバッファ32内の領域に転送される。

0106

あるストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、ライト制御部21は、このストリームに関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送するための転送要求をDMAC15に送信する。この転送要求の受信に応じて、DMAC15は、DMA転送を実行することによって、このストリームに関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する。そして、ライト制御部21は、NANDインタフェース13にプログラム指示送出して、内部バッファ16に転送された最小書き込みサイズ分のライトデータをNAND型フラッシュメモリ5内の書き込み先ブロックに書き込む。

0107

最小書き込みサイズ分のライトデータの内部バッファ16への転送完了後、または最小書き込みサイズ分のライトデータの書き込み先ブロックへの書き込み完了後に、ライト制御部21は、このライトデータに対応するライトコマンドの各々(つまり、このストリームに対応するグループに属するライトコマンドの各々)の完了を示す応答をホスト2に返す。各ライトコマンドの完了を示す応答は、対応するライトデータの解放をホスト2に許可するためのバッファ解放要求としてコンプリーションキュー72に入れられる。完了を示す応答は完了したライトコマンドの識別子を含むので、ホスト2は、完了を示す応答によって指定された完了したライトコマンドに関連付けられているライトデータが格納されているライトバッファ51内の領域を解放することができる。

0108

また、最小書き込みサイズ分のライトデータの内部バッファ16への転送完了後、ライト制御部21は、このライトデータに対応するライトコマンドの各々をコマンドキューから削除してもよい。

0109

また、上述したように、ライト制御部21は、あるストリームに対応するグループに属するあるライトコマンドの受信から所定時間が経過した場合、このストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、DMAC15を使用して、このライトコマンドに関連付けられたライトデータのみをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送し、このライトコマンドの完了を示す応答をホスト2に返す。

0110

例えば、ストリームID#1を含むあるライトコマンドの受信から所定時間経過してもコマンドキュー41−1に格納されているライトコマンドの集合に関連付けられたライトデータのサイズが最小書き込みサイズに達しない場合、つまりあるライトコマンドがコマンドキュー41−1に維持されている時間が所定時間に達した場合、ライト制御部21は、このライトコマンドのタイムアウトエラーが起こるのを防止するために、このライトコマンドに関連付けられたライトデータのみをホストメモリ内のライトバッファ51からDRAMバッファ32に転送する。この場合、このライトデータはDRAMバッファ32内のストリーム#1用の領域に転送されてもよい。このライトコマンドはコマンドキュー41−1から削除される。

0111

ホスト2から多くの量のデータ書き込みが要求されている期間、つまりホスト2から受信される各ストリームのライトコマンドの数が比較的多い期間においては、ライトコマンドの受信から所定時間経過する前に、各ストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達する可能性が高い。したがって、ほとんどのライトデータは、DRAMバッファ32ではなく、内部バッファ16に転送される。あるライトコマンドがコマンドキューに維持されている時間が所定時間に達するというケースは、ホスト2から受信されるライトコマンドの数が比較的少ない場合に起こる。

0112

したがって、ライトデータの転送のためにコントローラ4とDRAM6との間のトラフィックが増大することはない。よって、コントローラ4とDRAM6との間のバンド幅をL2Pテーブル31を更新する処理のために主として利用することが可能となり、L2Pテーブル31を更新する処理を効率よく実行することが可能となる。

0113

また、ライト制御部21は、あるストリームに対応するグループに属するあるライトコマンドの受信から所定時間が経過した場合、このストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、DMAC15を使用して、これらライトコマンドの集合に関連付けられたライトデータ全体をホストメモリ内のライトバッファ51から内部バッファ16に転送してもよい。

0114

例えば、ストリームID#1を含むあるライトコマンドの受信から所定時間経過してもコマンドキュー41−1に格納されているライトコマンドの集合に関連付けられたライトデータのサイズが最小書き込みサイズに達しない場合、つまりあるライトコマンドがコマンドキュー41−1に維持されている時間が所定時間に達した場合、ライト制御部21は、このライトコマンドのタイムアウトエラーが起こるのを防止するために、コマンドキュー41−1に現在格納されているライトコマンドの集合に関連付けられたライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する。この場合、ライト制御部21は、内部バッファ16に転送されたライトデータにパディングを加えて最小書き込みサイズ分のライトデータを生成し、生成されたライトデータを、このストリームに対応する書き込み先ブロックに書き込む。この場合、特定のビットパターンを有するデミーデータがライトデータにパディングとして追加されてもよい。

0115

このように、あるストリームに対応するグループに属するライトコマンドの受信から所定時間が経過した場合、ライト制御部21は、このグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、このグループに属するライトコマンドの集合に関連付けられたライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送し、内部バッファ16に転送されたライトデータにパディングを加えることによって生成される最小書き込みサイズ分のライトデータを、このストリームに対応する書き込み先ブロックに書き込む。これにより、DRAM6内のバッファ32を使用しない構成においても、タイムアウトエラーが起きることを防止することができる。

0116

図10はSSD3において実行される書き込み動作のシーケンスを示す。

0117

ライトコマンドWxをホスト2から受信した場合、コントローラ4のCPU#1(例えばCPU12−1)は、ライトコマンドWxに関連付けられたライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を決定し、この物理アドレスをこのライトデータに割り当てる(アドレス割り当て動作)。ライトコマンドWxと同じストリームIDを含む受信済みのライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、DMAC15は、ホストメモリのライトバッファ51から内部バッファ16に最小書き込みサイズ分のライトデータを転送する。そして、コントローラ4は、内部バッファ16内のライトデータを、NAND型フラッシュメモリ5内の決定された物理記憶位置に書き込む(フラッシュ書き込み)。ライトコマンドWxを含むこれらライトコマンドそれぞれの完了を示す応答(completion)は、内部バッファ16へのライトデータの転送完了後、またはフラッシュ書き込みの完了後にホスト2に返される。

0118

ライトコマンドWyをホスト2から受信した場合、コントローラ4のCPU#1(例えばCPU12−1)は、ライトコマンドWyに関連付けられたライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を決定し、この物理アドレスをこのライトデータに割り当てる(アドレス割り当て動作)。ライトコマンドWyと同じストリームIDを含む受信済みのライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、DMAC15は、ホストメモリのライトバッファ51から内部バッファ16に最小書き込みサイズ分のライトデータを転送する。そして、コントローラ4は、内部バッファ16内のライトデータを、NAND型フラッシュメモリ5内の決定された物理記憶位置に書き込む(フラッシュ書き込み)。ライトコマンドWyを含むこれらライトコマンドそれぞれの完了を示す応答(completion)は、内部バッファ16へのライトデータの転送完了後、またはフラッシュ書き込みの完了後にホスト2に返される。
ライトコマンドWzについても、ライトコマンドWx,Wyと同様に処理される。

0119

図11は、データ読み出しに関する、ホスト2とSSD3それぞれの構成例を示す。
リード制御部22がホスト2のサブミッションキュー71からリードコマンドを受信した場合、リード制御部22は、DRAM6内のL2Pテーブル31を参照することによって、このリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)をL2Pテーブル31から取得する。

0120

この読み出し対象データがNAND型フラッシュメモリ5から読み出し可能である場合、リード制御部22は、この読み出し対象データを読み出すための読み出し指示をNANDインタフェース13を介してNAND型フラッシュメモリ5に送出し、この読み出し対象データをNAND型フラッシュメモリ5から読み出す。読み出された読み出し対象データはコントローラ4内の内部リードバッファ16’に一時的に格納されてもよい。内部リードバッファ16’は、内部バッファ16と同様に、コントローラ4内のSRAMによって実現されてもよい。

0121

リード制御部22は、DMAC15を使用して、内部リードバッファ16’からホストメモリ内のリードバッファ52に読み出し対象データを転送する。読み出し対象データが転送されるべきリードバッファ52内の位置は、このリードコマンドに含まれるデータポインタによって指定される。そして、リード制御部22は、このリードコマンドの完了を示す応答をホスト2に返し、リードコマンドの完了を示す応答をホスト2のコンプリーションキュー72に入れる。

0122

読み出し対象データがNAND型フラッシュメモリ5から読み出し可能になっていない場合、つまり読み出し対象データがまだ書き込みが開始されていない書き込み待ちデータまたは書き込みは開始されたがNAND型フラッシュメモリ5から正常に読み出すことができない書き込み途中のデータである場合、リード制御部22は、DRAMバッファ32またはホストメモリ内のライトバッファ51からこの読み出し対象データを読み出し、読み出した読み出し対象データをホスト2に返す。ホストメモリ内のライトバッファ51からこの読み出し対象データを読み出す場合には、まず、リード制御部22は、読み出し対象データをDMAC15を用いてライトバッファ51から内部リードバッファ16’に転送し、そしてこの読み出し対象データをDMAC15を用いて内部リードバッファ16’からホストメモリ内のリードバッファ52に転送する。DRAMバッファ32からこの読み出し対象データを読み出す場合には、リード制御部22は、DRAMバッファ32からこの読み出し対象データを内部リードバッファ16’に読み出し、そしてこの読み出し対象データをDMAC15を用いて内部リードバッファ16’からホストメモリ内のリードバッファ52に転送する。

0123

コントローラ4は、書き込み先ブロック管理テーブル34を使用して、書き込み先ブロックとして現在使用されているブロック毎に、このブロックに書き込むことが決定され且つ読み出し可能になっていないデータが存在しているバッファアドレスを管理してもよい。DRAMバッファ32に転送済みで且つNAND型フラッシュメモリ5から読み出し可能になっていないデータに対応するバッファアドレスは、このデータが存在するDRAMバッファ32内の位置を示す。DRAMバッファ32に転送されておらず且つNAND型フラッシュメモリ5から読み出し可能になっていないデータに対応するバッファアドレスは、このデータが存在するホストメモリ内のライトバッファ51内の位置を示す。したがって、リード制御部22は、NAND型フラッシュメモリ5から読み出し可能になっていない読み出し対象データに対応するバッファアドレスに基づいて、DRAMバッファ32またはホストメモリ内のライトバッファ51からこの読み出し対象データを読み出すことができ、読み出した読み出し対象データをホスト2に返すことができる。

0124

よって、ホスト2は、ライトバッファ51に向けたリード要求とSSD3に向けたリードコマンドを選択的に発行する処理を行わずとも、SSD3に向けたリードコマンドそれぞれを発行するというシンプルな処理を行うだけで、所望のデータをSSD3から受け取ることができる。

0125

図12のフローチャートは、SSD3において実行される書き込み動作の手順を示す。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS11)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS12)。ステップS12では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。

0126

コントローラ4は、蓄積されたライトコマンドに対応する書き込み待ちのライトデータのサイズをストリーム毎にチェックして、書き込み待ちのライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する(ステップS13)。すなわち、ステップS13では、コントローラ4は、複数のグループの各々に関して、同じグループに属するライトコマンドそれぞれによって指定される長さの合計を算出することによって同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さ(書き込み待ちのライトデータのサイズ)が最小書き込みサイズに達したか否かを判定する。

0127

書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームを検出した場合(ステップS14のYES)、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に、検出したストリームに関連付けられた最小書き込みサイズ分のライトデータを転送する(ステップS15)。そして、コントローラ4は、内部バッファ16に転送されたライトデータを、このストリーム用に割り当てられている書き込み先ブロックに書き込む(ステップS16)。

0128

なお、コントローラ4は、このストリームに関連付けられたライトコマンドそれぞれの完了を示す応答を、ステップS15におけるデータ転送完了後、またはステップS16における書き込み先ブロックへの書き込み完了後に、ホスト2に返す。

0129

図13のフローチャートは、SSD3において実行される書き込み動作の別の手順を示す。
図13の書き込み動作においては、図12のステップS11〜S16の処理にステップS21〜S23の処理が追加されている。コントローラ4は、ライトコマンド毎に、その受信からの経過時間をチェックする。

0130

書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS14のNO)、コントローラ4は、あるライトコマンドの受信から所定時間が経過したストリームの有無を検出する(ステップS21)。

0131

ライトコマンドの受信から所定時間が経過したストリームを検出した場合(ステップS21のYES)、コントローラ4は、この検出されたストリームに対応するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、この検出されたストリームに対応するライトコマンドの集合に関連付けられたライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する(ステップS22)。

0132

コントローラ4は、内部バッファ16に転送されたライトデータにパディングを加えることによって最小書き込みサイズ分のデータを生成し、検出されたストリームに割り当てられた書き込み先ブロックにこの生成されたデータを書き込む(ステップS23)。

0133

なお、コントローラ4は、ライトコマンドの受信から所定時間が経過したストリームに関連付けられたライトコマンドそれぞれの完了を示す応答を、ステップS22におけるデータ転送完了後、またはステップS23における書き込み先ブロックへの書き込み完了後に、ホスト2に返す。

0134

図14のフローチャートは、SSD3において実行される書き込み動作の別の手順を示す。
図14の書き込み動作においては、図12のステップS11〜S16の処理にステップS31およびS32の処理が追加されている。コントローラ4は、ライトコマンド毎に、その受信からの経過時間をチェックする。

0135

書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS14のNO)、コントローラ4は、受信から所定時間が経過したライトコマンドの有無を検出する(ステップS31)。

0136

あるストリームに対応するライトコマンドの受信から所定時間が経過したことを検出した場合(ステップS31のYES)、コントローラ4は、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送する(ステップS32)。このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送した後、コントローラ4は、このライトコマンドを、このライトコマンドが格納されているコマンドキューから削除する。そして、コントローラ4は、このライトコマンドの完了を示す応答をホスト2に返す。

0137

このように、あるストリームに対応するライトコマンドの受信から所定時間が経過した場合、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送する処理と、このライトコマンドの完了を示す応答をホスト2に返す処理とがコントローラ4によって実行される。

0138

また、このようにあるストリームに対応するグループに属するライトコマンドに関連付けられたライトデータをDRAMバッファ32に転送する構成においては、コントローラ4は、DRAMバッファ32に転送したライトデータの長さとこのストリームに対応するグループに属するライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとの合計長さが最小書き込みサイズに達したことを条件に、ホストメモリ内のライトバッファ51から内部バッファ16へのデータ転送を実行する。

0139

図15のフローチャートは、DRAMバッファ32を使用してSSD3において実行される書き込み動作の手順を示す。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS41)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS42)。ステップS42では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。

0140

コントローラ4は、蓄積されたライトコマンドに対応する書き込み待ちのライトデータのサイズとDRAMバッファ32内のライトデータのサイズの合計サイズ(合計長さ)をストリーム毎にチェックして、合計サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する(ステップS43)。すなわち、ステップS43では、コントローラ4は、複数のグループの各々に関して、コマンドキュー内のライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したか否かを判定する。

0141

コマンドキュー内のライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したストリームを検出した場合(ステップS44のYES)、コントローラ4は、DRAMバッファ32から内部バッファ16に、検出されたストリーム用のライトデータを転送する(ステップS45)。コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に、検出したストリームに関連付けられたライトデータを転送する(ステップS46)。そして、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に転送されたライトデータを、DRAMバッファ32から内部バッファ16に転送されたライトデータと一緒に、このストリーム用に割り当てられている書き込み先ブロックに書き込む(ステップS47)。

0142

なお、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に転送されたライトデータに対応するライトコマンドそれぞれの完了を示す応答を、ステップS46におけるデータ転送完了後、またはステップS47における書き込み先ブロックへの書き込み完了後に、ホスト2に返す。また、これらライトコマンドはコマンドキューから削除される。

0143

書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS44のNO)、コントローラ4は、図14のステップS31、S32の処理を実行する。

0144

すなわち、コントローラ4は、受信から所定時間が経過したライトコマンドの有無を検出する(ステップS31)。あるストリームに対応するライトコマンドの受信から所定時間が経過したことを検出した場合(ステップS31のYES)、コントローラ4は、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送する(ステップS32)。このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送した後、コントローラ4は、このライトコマンドを、このライトコマンドが格納されているコマンドキューから削除する。そして、コントローラ4は、このライトコマンドの完了を示す応答をホスト2に返す。

0145

以上説明したように、本実施形態によれば、複数のストリームに対応する複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さがNAND型フラッシュメモリ5の最小書き込みサイズに達したか否かが判定される。あるストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、最小書き込みサイズを有する、このグループに属するライトコマンドの集合に関連付けられたライトデータが、ホストメモリ内のライトバッファ51から内部バッファ16に転送される。そして、内部バッファ16に転送されたライトデータが、このストリームに対応する書き込み先ブロックに書き込まれる。このライトデータが書き込み先ブロックに書き込まれると、内部バッファ16内の記憶領域は即座に解放可能となる。よって、内部バッファ16を、最小書き込みサイズを有する別のストリームに対応するライトデータの転送に利用することが可能となる。したがって、内部バッファ16のサイズは最小書き込みサイズと同程度のサイズで十分である。

0146

よって、ホスト2からライトコマンドを受信する度にライトデータをホスト2からSSD3内のバッファに転送するという構成に比し、SSD3内に設けることが必要なバッファのサイズを削減することができる。

0147

なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。

0148

本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。

0149

2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、16…内部バッファ、21…ライト制御部、22…リード制御部、51…ライトバッファ。

ページトップへ

この技術を出願した法人

この技術を発明した人物

ページトップへ

関連する挑戦したい社会課題

関連する公募課題

ページトップへ

技術視点だけで見ていませんか?

この技術の活用可能性がある分野

分野別動向を把握したい方- 事業化視点で見る -

(分野番号表示ON)※整理標準化データをもとに当社作成

ページトップへ

おススメ サービス

おススメ astavisionコンテンツ

新着 最近 公開された関連が強い技術

  • 株式会社リコーの「 情報処理装置、情報処理方法、及びプログラム」が 公開されました。( 2021/04/30)

    【課題】処理性能への影響を抑制しつつ、所定の処理を実行するプログラムの履歴情報を取得することができる情報処理装置、情報処理方法及びプログラムを提供する。【解決手段】画像形成装置200は、複数のCPUコ... 詳細

  • 東芝メモリ株式会社の「 メモリシステム及び制御方法」が 公開されました。( 2021/04/30)

    【課題】ステータスポーリングによるリード動作の遅延を抑制するメモリシステムを提供する。【解決手段】メモリシステム1は、それぞれがメモリセルを含む複数の並列動作要素を有する不揮発性メモリ20と、複数の並... 詳細

  • TDK株式会社の「 メモリコントローラ及びフラッシュメモリシステム」が 公開されました。( 2021/04/30)

    【課題】物理ブロック間でデータが移し替えられた際に効率的にアドレスを管理することができる。【解決手段】メモリコントローラ3は、ホストシステム4からの命令に応答してフラッシュメモリ2へのアクセスを制御す... 詳細

この 技術と関連性が強い技術

関連性が強い 技術一覧

この 技術と関連性が強い人物

関連性が強い人物一覧

この 技術と関連する社会課題

関連する挑戦したい社会課題一覧

この 技術と関連する公募課題

関連する公募課題一覧

astavision 新着記事

サイト情報について

本サービスは、国が公開している情報(公開特許公報、特許整理標準化データ等)を元に構成されています。出典元のデータには一部間違いやノイズがあり、情報の正確さについては保証致しかねます。また一時的に、各データの収録範囲や更新周期によって、一部の情報が正しく表示されないことがございます。当サイトの情報を元にした諸問題、不利益等について当方は何ら責任を負いかねることを予めご承知おきのほど宜しくお願い申し上げます。

主たる情報の出典

特許情報…特許整理標準化データ(XML編)、公開特許公報、特許公報、審決公報、Patent Map Guidance System データ