以下、実施形態の記憶装置を、図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する構成要素については、共通する参照符号を付す。
図1は、実施形態の記憶装置の構成を説明するブロック図である。
記憶装置1は、記憶装置1全体を制御するコントローラ10と、データを記憶する不揮発性記憶媒体20と、各種情報群を一時的に格納するとともに、ホスト2と不揮発性記憶媒体20との間でデータを一時的に格納するバッファとして使用されるRAM(Random Access Memory)30と、FW(Firmware)に基づき記憶装置1全体を制御するCPU(Central Processing Unit)40と、を含む。
本実施形態の説明では、ホスト2はNVMe(NVM Express)(登録商標)規格のインターフェースをサポートするコンピュータであるが、その他の規格、例えばSAS(Serial Attached SCSI)規格、SATA(Serial ATA)規格のインターフェースをサポートするコンピュータであってもよい。
コントローラ10は、例えばSoC(System on a Chip)として構成される半導体集積回路である。
本実施形態では、不揮発性記憶媒体20はNAND型フラッシュメモリであり、複数のNAND型フラッシュメモリチップ100(以下、メモリチップ100と称する)を含んで構成されるが、磁気ディスクなど他の種類の不揮発性記憶媒体でもよい。以下では不揮発性記憶媒体20をNAND型フラッシュメモリ20と称する(以下、単にNANDとも称する)。また、本実施形態のNAND型フラッシュメモリ20は、例えば、16チャネル(Ch)のメモリチップ100を有する。以下では、メモリチップ100のそれぞれをメモリチップCh0〜メモリチップCh15と表記する。なお、チャネル数は16より多くても少なくてもよい。
本実施形態では、RAM30はDRAM(Dynamic Random Access Memory)であるが、SRAM(Static Random Access Memory)など他の種類の揮発性メモリを採用してもよい。
なお、RAM30及びCPU40は、別個の半導体集積回路とせずにコントローラ10に内蔵されていてもよい。また、以下の説明においてFWにより実行される機能の一部又は全部は、専用のHW(Hardware)によっても実行可能であり、HWにより実行される機能の一部又は全部を、FWによって実行することも可能である。
コントローラ10は、ホスト2との通信制御や複数接続されるホスト2の管理を行うホストインターフェース(IF)制御部200と、RAM30のリード・ライトを制御するバッファ制御部210と、NAND型フラッシュメモリ20のリード・ライトを制御するNAND制御部220と、を含む。ホストIF制御部200は、FWに基づくCPU40の指示により、ホスト2から受信した各種コマンドの実行結果をホスト2に報告することができる。
次に、図2a及び図2bを参照して、メモリチップ100の物理ページ300及び物理ブロック310の構成を説明する。
図2aに示すように、メモリチップ100に対するデータのリード・ライトにおける最小管理単位はクラスタ320と呼ばれる。本実施形態ではクラスタ320の大きさは4kBである。また、メモリチップ100の内部で一度にデータのリード・ライトが可能な最小の回路構成の単位は物理ページ300と呼ばれる。本実施形態では物理ページ300の大きさは16クラスタ(4kB×16クラスタ=64kB)である。
また、図2bに示すように、メモリチップ100のデータのイレースが可能な最小の回路構成の単位は物理ブロック310と呼ばれる。本実施形態では物理ブロック310の大きさは256クラスタ、すなわち16物理ページ(64kB×16物理ページ=1024kB)である。なお、これら各単位のサイズは一例であり、これらの値に限定されるものではない。
次に、図3a及び図3bを参照して、論理ページ400及び論理ブロック410の構成を説明する。
本実施形態では、図3aに示すように、メモリチップCh0〜Ch15それぞれの1つの物理ページ300を含む集合を論理ページ400とする。コントローラ10は、論理ページ400を論理的な単位として、NAND型フラッシュメモリ20へのデータのリード・ライトを制御する。また、図3bに示すように、コントローラ10は16個の論理ページ400分のデータである論理ブロック410を論理的な単位として、NAND型フラッシュメモリ20のデータのイレースを制御する。すなわち、コントローラ10はメモリチップ100のデータのイレースの最小単位である物理ブロック310ごとではなく、論理ブロック410ごとにイレース処理を行う。
次に、図4を参照して、部分空間について説明する。
記憶装置1がホスト2に提供する論理アドレス(Logical Block Address、LBA)と、ユーザデータが記憶されるNAND型フラッシュメモリ20の物理アドレスは、1対1に対応する。ここで、ユーザデータとは、ホスト2からライト要求と共に送信されてくるデータを指す。以下では、物理アドレスと1対1に対応する論理アドレスをドライブLBAと称する。
また、ドライブLBAは複数の部分空間に分割されてホスト2に提供される。NVMe規格においては部分空間はネームスペースと呼ばれ、SCSI規格においては部分空間はLogical Unitと呼ばれる。以下では、部分空間をネームスペースと称する。ネームスペースのそれぞれはネームスペースID(NSID)によって識別される。本実施形態では、ドライブLBAはNSID0〜NSIDnとして識別される(n+1)個のネームスペースに分割されている。
各ネームスペースは、ホスト2からは独立した記憶領域として扱うことができ、記憶装置1のドライブLBAは、NSIDと、ネームスペースごとに0から始まるホストLBAによって指定される。ここで、ホストLBAとは、記憶装置1のデータの記憶先を指定するために、ホスト2がコマンド発行時に指定する論理アドレスである。
コマンドで指定されたホストLBAとドライブLBAとの変換はホストIF制御部200が行う。例えば図4に示すように、ホスト2がNSID2のホストLBA=0をアクセスする場合、ホストIF制御部200はドライブLBA=Bがアクセスされたものとして取り扱う。
各ネームスペースはホスト2からのコマンドによって生成される。すなわち、ホスト2は記憶装置1にコマンドを発行し、生成したいネームスペースのNSIDと、そのネームスペースに割り当てたい記憶容量を指定する。なお、ドライブLBAのすべてにネームスペースを割り当てず、ネームスペースが割り当てられない空き領域があってもよい。
また、記憶装置1が複数のホスト2と接続される場合は、各ホスト2からアクセス可能なネームスペースを制限してもよい。例えば、ホスト#0はNSID0とNSID2のみをアクセス可能とし、ホスト#1はNSID3のみをアクセス可能とすることができる。
次に、図5を参照して、本実施形態のメモリ構成を説明する。
NAND型フラッシュメモリ20には、ユーザデータ500、翻訳情報群520a、ログ530、NS管理表540が記憶される。
翻訳情報群520aは翻訳情報510aを含み、各翻訳情報510aはドライブLBAと物理アドレスとの対応関係を示す情報である。ログ530は、ドライブLBAと物理アドレスとの対応関係の変更を記録するためのログである。NS管理表540は、ネームスペースごとの起動優先順位などを管理するためのテーブルである。
コントローラ10は、ユーザデータ500が記憶される(n+1)個のユーザデータ領域、翻訳情報群520aが記憶される翻訳情報群領域、ログ530が記憶される(m+1)個のログ領域、及び、NS管理表540が記憶されるNS管理表領域、を含んでNAND型フラッシュメモリ20を管理している。各ユーザデータ領域は各ネームスペースと1対1に対応している。各ログ領域には1つのネームスペースが対応するが、各ネームスペースが複数のログ領域と対応してもよい。すなわち、例えば、ログ領域0がNSID0とNSID1との両方に対応することはないが、NSID0がログ領域0とログ領域1とに対応してもよい。
コントローラ10は、1つの論理ページ400を、ユーザデータ領域とログ領域の両方を含むものとして管理するが、ユーザデータ領域専用の論理ページ400や、ログ領域専用の論理ページ400が存在してもよい。
なお、コントローラ10が、ホストLBAと、各ネームスペースに対応するドライブLBAとの関係を認識できるのであれば、コントローラ10は、ネームスペースと1対1に対応させてユーザデータ領域を管理しなくてもよい。例えば、1つのユーザデータ領域に複数のネームスペースのユーザデータ500を記憶させ、ネームスペースごとに割り当てられたログ領域に当該ネームスペースのログ530を記憶させてもよい。
また、コントローラ10が、ログ領域をネームスペースに対応させて管理するのではなく、ログ領域に記憶されるログ530にNSIDを含ませてもよい。この場合は、以下の説明において、例えばNSID0に対応するログ領域とは、NSID0を有するログ530が記憶されるログ領域の集合を指す。
RAM30には、NAND型フラッシュメモリ20の翻訳情報群領域から各翻訳情報510aがコピーされて、翻訳情報(キャッシュ)510bとして格納される。以下では、RAM30内に格納された翻訳情報(キャッシュ)510bの集合を翻訳情報群(キャッシュ)520bと称する。また、RAM30にはネームスペースごとの位置情報群550が格納される。詳細については後述するが、位置情報群550は位置情報560を含み、各位置情報560は翻訳情報510a及び翻訳情報(キャッシュ)510bの格納先を示す情報を記録する。
次に、図6を参照して、翻訳情報510を使用したホストLBAから物理アドレスへの変換について説明する。本実施形態においては、翻訳情報群520a内の翻訳情報510aと、翻訳情報群(キャッシュ)520b内の翻訳情報(キャッシュ)510bは、同一のデータ構造を有する。なお、翻訳情報510aと翻訳情報(キャッシュ)510bとが同一の内容を表すのであれば、翻訳情報510aと翻訳情報(キャッシュ)510bとのデータ構造は異なっていてもよい。例えば、翻訳情報510aには圧縮された翻訳情報データを格納してもよい。
図6及び以下の説明では、翻訳情報群520aと翻訳情報群(キャッシュ)520bとを総称して翻訳情報群520と表記し、翻訳情報510aと翻訳情報(キャッシュ)510bとを総称して翻訳情報510と表記している。
記憶装置1がホスト2よりコマンドを受領すると(S100)、ホストIF制御部200は当該コマンドからNSID及びホストLBAを抽出し(S101)、これらを用いてドライブLBAを算出する(S102)。
本実施形態においては、各翻訳情報510には、NAND型フラッシュメモリ20の物理アドレスが記録され、各翻訳情報510はユーザデータ500に対応付けられるドライブLBAの順で配列されている。すなわち、CPU40がFWに基づいて、ドライブLBAをインデックスとして翻訳情報群520を検索することで、各ユーザデータ500に対応付けられる物理アドレスを取得することができる(S103)。なお、各翻訳情報は、CPU40が各ドライブLBAと各翻訳情報の対応関係を認識できるのであれば、ドライブLBAの順に配列されていなくてもよい。
なお、本実施形態においては、ユーザデータ500と対応付けられていないドライブLBAに対応する翻訳情報510には、“アンマップ(Unmapped)”を示す情報が記録される。また、1つの翻訳情報510に、複数のドライブLBAと複数の物理アドレスとの対応関係を記録してもよい。
各翻訳情報510は、記憶装置1が動作するための電力が供給されていない間はNAND型フラッシュメモリ20内に格納されている。NAND型フラッシュメモリ20へのアクセスはRAM30へのアクセスに比べて遅いのが一般的であるため、記憶装置1への電力供給後なるべく速やかに各翻訳情報510をRAM30にコピー(キャッシュ)することが望ましい。なお、電力供給後に直ちにコピーするのではなく、対応するドライブLBAへのアクセスをトリガーとして、翻訳情報510をRAM30にコピーしてもよい。
次に、図7を参照して、RAM30における位置情報群550のデータ構造の一例を説明する。
図7には、NSID0の位置情報群550が示されているが、他のネームスペースの位置情報群550も同様の構成である。位置情報群550は複数の位置情報560を備えている。各位置情報560は1つの翻訳情報510と1対1で対応し、各翻訳情報510が格納されている場所(すなわちキャッシュとして使用されるRAM30又はNAND型フラッシュメモリ20)、及び、その物理アドレスが記録されている。
各位置情報560は、対応する翻訳情報510と同じ順序、すなわちユーザデータ500に対応付けられるドライブLBAの順序で配列されている。従って、CPU40がドライブLBAをインデックスとして位置情報群550を検索することで、各ユーザデータ500に対応する翻訳情報510が記憶されているRAM30又はNAND型フラッシュメモリ20の物理アドレスを取得することができる。
図7の例では、NSID0のホストLBA「L0」に対応するドライブLBAは「La」であり、これに対応する位置情報560は、NAND型フラッシュメモリ20の物理アドレス「Pb」である。NAND型フラッシュメモリ20の物理アドレス「Pb」の領域には、翻訳情報510aとしてNAND型フラッシュメモリ20の「物理アドレス=Pa」が記憶されている。すなわち、NSID0のホストLBA「L0」に対応するユーザデータ1は、NAND型フラッシュメモリ20の物理アドレス「Pa」の領域に記憶されていることになる。
また、NSID0のホストLBA「L1」に対応するドライブLBAは「Lc」であり、これに対応する位置情報560は、RAM30の物理アドレス「Pd」である。RAM30の物理アドレス「Pd」の領域には、翻訳情報(キャッシュ)510bとしてNAND型フラッシュメモリ20の「物理アドレス=Pc」が記憶されている。すなわち、NSID0のホストLBA「L1」に対応するユーザデータ2は、NAND型フラッシュメモリ20の物理アドレス「Pc」の領域に記憶されていることになる。
次に、図8を参照して、ログ530の一例を説明する。
図8に示す例では、NSID0のホストLBA「L1」に対応するドライブLBAは「Lc」であり、図8の初期状態では、ドライブLBA「Lc」に対応するユーザデータ2がNAND型フラッシュメモリ20の物理アドレス「Pc」の領域に記憶されている。また、ドライブLBA「Lc」と物理アドレス「Pc」との関連を示す翻訳情報(キャッシュ)510bは、RAM30の物理アドレス「Pd」に格納されている。
この状態で、ホスト2からNSID0のホストLBA「L1」へのライト要求とともに、ユーザデータ3が送られてくる。この時、CPU40は、ユーザデータ3を、NAND型フラッシュメモリ20の有効データが記憶されていない物理アドレス「Pe」の領域に記憶させるようにコントローラ10を制御する(S200)。また、CPU40は、RAM30の物理アドレス「Pf」に新たな翻訳情報(キャッシュ)510b(物理アドレス「Pe」)を追加する(S201)。CPU40は、ドライブLBA「Lc」に対応する位置情報560をRAM30の物理アドレス「Pd」から「Pf」に書き換える(S202)。
追加された翻訳情報(キャッシュ)510b(物理アドレス「Pe」)は、遅くとも記憶装置1への電力供給が断たれるまでに、NAND型フラッシュメモリ20の翻訳情報群520aに保存される(S203)。ここでは、ドライブLBA「Lc」に対応する翻訳情報(キャッシュ)510b(物理アドレス「Pe」)は、NAND型フラッシュメモリ20の物理アドレス「Pk」に保存されるものとする。
CPU40は、ドライブLBA「Lc」に対応する翻訳情報(キャッシュ)510bが物理アドレス「Pk」に保存されたことを示すログ530を、ログ領域0に記憶させる(S204)。
各ログ領域0〜mには、各ネームスペースに対応する翻訳情報(キャッシュ)510bの保存に伴い、順にログ530が記憶される。各ログ領域0〜m内には、ログ530が古いものから新しいものへと時系列で格納されている。各ログ領域0〜mには、前述したように、1つのネームスペースのログ530のみを記憶し、複数のネームスペースのログ530が1つのログ領域内に混在することはない。このログ530は、後述するように、記憶装置1の起動時に位置情報群550の復元に用いられる。
なお、例えば記憶装置1への電力供給が断たれる時に、すべてのログ530がログ領域へ一度に記憶されなくともよい。例えば、翻訳情報(キャッシュ)510bの複数回分の保存に伴うログ530の大きさの合計が1論理ページ分になるごとに、ログ530が記憶されてもよい。この場合には、CPU40は、ログ530に反映されていない翻訳情報(キャッシュ)510bの保存があることを、例えば翻訳情報(キャッシュ)510bのそれぞれにフラグを付加して管理する必要がある。
次に、図9a及び図9bを参照して、1つの論理ブロック410を1つのログ領域に割り当てる動作の一例を説明する。図9aの1つのログ530は、1論理ページ分のログ530の集合を示している。
ログ530は、ネームスペースごとに論理ブロック410を単位としてまとめられ、各論理ブロック410内の論理ページ400の番号の順に記憶される。図9aに示す例では、論理ブロック#0がログ領域0として割り当てられ、ここにはNSID0のログ530が記憶されている。また、論理ブロック#1はログ領域1として割り当てられ、ここにはNSID2のログ530が記憶されている。さらに、論理ブロック#2にはログ領域2としてNSID1のログ530が記憶され、論理ブロック#3にはログ領域3としてNSID0のログ530が記憶され、論理ブロック#4にはログ領域4としてNSID1のログ530が記憶されている。
この結果、図9bに示すように、NSID0のログ530を記憶している論理ブロック410の番号(ログブロック番号)は#0と#3に、NSID1のログブロック番号は#2と#4に、NSID2のログブロック番号は#1に、それぞれなっている。
次に、図10a及び図10bを参照して、1つの論理ブロック410を複数の領域に分割し、分割された各領域を1つのログ領域に割り当てる動作の一例を説明する。図10aにおいても図9aと同様に、1つのログ530は、1論理ページ分のログ530の集合を示している。
各論理ブロック410は、8つの論理ページ400ごとに1つのログ領域として割り当てられる。以下、論理ページ#0〜論理ページ#7の集合をLower Page、論理ページ#8〜論理ページ#15の集合をUpper Pageと称する。なお、1つのログ領域として割り当て可能な論理ページ400の数は、8に限られない。
図10aに示す例では、論理ブロック#0のLower Pageがログ領域0として割り当てられ、ここにはNSID0のログ530が記憶されている。論理ブロック#0のUpper Pageはログ領域1として割り当てられ、ここにはNSID2のログ530が記憶されている。論理ブロック#1のLower Pageはログ領域2として割り当てられ、ここにはNSID0のログ530が記憶されている。論理ブロック#1のUpper Pageはログ領域3として割り当てられ、ここにはNSID1のログ530が記憶されている。
この結果、図10bに示すように、NSID0のログ530を記憶している論理ブロック410の番号(ログブロック番号)は#0(L)と#1(L)に、NSID1のログブロック番号は#1(U)、NSID2のログブロック番号は#0(U)に、それぞれなっている。
次に、図11a及び図11bを参照して、各論理ブロック410のうちの1つの論理ページ400を含む集合を、1つのネームスペースのログ領域として割り当てる動作の一例を説明する。図11aにおいても図9aと同様に、1つのログ530は、1論理ページ分のログ530の集合を示している。
ログ530は、ネームスペースごとに、各論理ブロック410内の固定された位置(番号)の論理ページ400に記憶される。例えば、各論理ブロック410の論理ページ#0を、ログ領域0としてNSID0のログ530の記憶用に割り当てる。また、各論理ブロック410の論理ページ#1を、ログ領域1としてNSID1のログ530の記憶用に割り当てる。さらに、各論理ブロック410の論理ページ#2を、ログ領域2としてNSID2のログ530の記憶用に、各論理ブロック410の論理ページ#3を、ログ領域3としてNSID3のログ530の記憶用に、それぞれ割り当てる。
図11aに示す例では、NSID0のログ530は論理ブロック#0〜#4の論理ページ#0に、NSID1のログ530は論理ブロック#0〜#2の論理ページ#1に、NSID2のログ530は論理ブロック#0〜#2の論理ページ#2に、NSID3のログ530は論理ブロック#0〜#3の論理ページ#3に、それぞれ記憶されている。
この結果、図11bに示すように、NSID0のログ530を記憶する論理ブロック410の番号(ログブロック番号)は#0〜#4に、NSID1のログブロック番号は#0〜#2に、NSID2のログブロック番号は#0〜#2に、NSID3のログブロック番号は#0〜#3に、それぞれなっている。
なお、上記では各論理ブロック410のうちの1つの論理ページ400を含む集合を1つのログ領域として割り当てたが、各論理ブロック410のうちの複数の論理ページ400を含む集合を1つのログ領域として割り当てることも可能である。例えば、各論理ブロック410の論理ページ#0と論理ページ#1をログ領域0としてNSID0のログ530の記憶用に割り当て、各論理ブロック410の論理ページ#2と論理ページ#3をログ領域1としてNSID1のログ530の記憶用に割り当て、各論理ブロック410の論理ページ#4と論理ページ#5をログ領域2としてNSID2のログ530の記憶用に割り当て・・・、としてもよい。
次に、図12a及び図12bを参照して、1つの論理ページ400を複数の領域に分割し、分割された各領域を1つのログ領域に割り当てる動作の一例を説明する。図12aにおいては、1つのログ530はログ530の集合を示すものではない。各論理ページ400は、最大16個のログ530を記憶できるものとする。
図12aに示す例では、論理ページ#0のアドレスPaから始まる領域がログ領域0として割り当てられ、ここにはNSID0のログ530が8個記憶されている。論理ページ#0のアドレスPbから始まる領域はログ領域1として割り当てられ、ここにはNSID2のログ530が2個記憶されている。論理ページ#0のアドレスPcから始まる領域はログ領域2として割り当てられ、ここにはNSID1のログ530が4個記憶されている。
また、論理ページ#1のアドレスPdから始まる領域はログ領域0として割り当てられ、ここにはNSID0のログ530が4個記憶されている。論理ページ#1のアドレスPeから始まる領域はログ領域3として割り当てられ、ここにはNSID3のログ530が7個記憶されている。
この結果、図12bに示すように、NSID0のログ530を記憶している論理ページ400の番号(ログページ番号)は#0(開始アドレス=Pa、長さ=8)と#1(開始アドレス=Pd、長さ=4)に、NSID1のログページ番号は#0(開始アドレス=Pc、長さ=4)に、NSID2のログページ番号は#0(開始アドレス=Pb、長さ=2)に、NSID3のログページ番号は#1(開始アドレス=Pe、長さ=7)に、それぞれなっている。図12bに示すような各ログ領域の開始アドレス及び長さの情報は、ヘッダ情報として論理ページ400内に記憶されてもよい。
なお、上記では各論理ページ400のログ領域を複数の領域に分け、それぞれにネームスペースごとのログ530が記憶される動作を説明した。これに対しユーザデータ500の記憶では、各論理ページ400のユーザデータ領域を複数の領域に分け、それぞれにネームスペースごとのユーザデータ500が記憶されてもよく、論理ページ400の1つのユーザデータ領域内に複数のネームスペースのユーザデータ500が記憶されてもよい。
次に、図13を参照して、NS管理表540の構成を説明する。
NS管理表540には、位置情報群550が格納されているRAM30の物理アドレス、ログ530が記憶されている論理ブロック410の番号(ログブロック番号)、及び、後述する起動優先順位が、ネームスペースごとに記録されている。
NS管理表540は、記憶装置1が動作するための電力が供給されていない間はNAND型フラッシュメモリ20に格納されているが、記憶装置1への電力供給後は、他の情報に先立ってRAM30内、又は、CPU40内もしくはコントローラ10内の図示しないメモリ領域にコピーされる。
なお、図11aのように各論理ブロック410内の固定された位置(番号)の論理ページ400をログ領域として割り当てる場合においても、ログ領域として割り当てる論理ページ番号をあらかじめネームスペースごとに固定しておけば、ログ530を記憶している論理ページ番号をNS管理表540に記録しないでもよい。
また、ログ領域を図12のように割り当てる場合には、NS管理表540にはログブロック番号ではなくログページ番号が記録される。または、上述したようにヘッダ情報が論理ページ400内に記憶される場合には、NS管理表540にはログブロック番号が記録されてもよい。この場合には、CPU40は、ログ530の読み出し時にヘッダ情報を読み取ることで、各論理ブロック410内のどのアドレスに、どのネームスペースのログ530が記憶されているのかを判断することができる。
次に、図14を参照して、記憶装置1の起動時に位置情報群550を復元する動作を説明する。
記憶装置1の起動時、CPU40は、NS管理表540から起動優先順位を読み出し、起動優先順位の高いネームスペースから、ログブロック番号に従ってログ530を読み出す。前述したように、ログ530は翻訳情報(キャッシュ)510bの保存順に記憶されている。このため、ログ530をその記憶順に読み出すことで、一部のドライブLBAに対応する最新の位置情報560を復元することができる。
図14に示す例では、CPU40は、ログ領域0内のログ530をその記憶順に読み出し、ドライブLBA「La」に対応するログ530Aより位置情報560Aとして物理アドレス「Pb」を復元する。また、ドライブLBA「Lc」に対応するログ530Bより位置情報560Cとして物理アドレス「Pd」を復元する。なお、この位置情報560Cは、後述するように後の動作で上書きされる。次に、ドライブLBA「Lb」に対応するログ530Cより位置情報560Dとして物理アドレス「Pc」が復元される。次に読み出されるログ530Dには、ドライブLBA「Lc」に対応する物理アドレス「Pf」が記録されている。この場合、位置情報560Cは、物理アドレス「Pd」から物理アドレス「Pf」に上書きされる。その後に読み出されるログ530Eには、ドライブLBA「Lf」に対応する物理アドレス「Pe」が記録されており、位置情報560Dは物理アドレス「Pe」として復元される。
この時点では、各翻訳情報510はNAND型フラッシュメモリ20からRAM30にまだコピーされていないので、復元された各位置情報560において各翻訳情報510が格納されている場所は、NAND型フラッシュメモリ20となる。
なお、ログ530を、その記憶順とは逆の順に読み出しても、一部のドライブLBAに対応する最新の位置情報560を復元することができる。この場合は、同一のドライブLBAに対応する、後から読み出されるログ530に記録されている物理アドレスは、位置情報560に反映されない。図14に示す例では、ドライブLBA「Lc」に対応するログ530は、ログ530Dが先に読み出され、ログ530Bが後から読み出される。位置情報560Cには、ログ530Dに記録されている物理アドレス「Pf」が反映され、ログ530Bに記録されている物理アドレス「Pd」は反映されない。
また、ログ領域がネームスペースごとに管理されていない場合には、CPU40は、ログ530に含まれるNSIDによって、いずれのネームスペースに対応するログ530であるのかを判断する。この場合、読み出したログ530が復元対象のネームスペースに対応するものであれば、CPU40は、そのログ530を位置情報群550の復元に用いる。一方、読み出したログ530が復元対象のネームスペースに対応するものでなければ、CPU40は、そのログ530を使用せず、次のログ530の読み出しを行う。
本実施形態においては、NS管理表540の起動優先順位に従いネームスペースごとに位置情報群550が復元される。すなわち、記憶装置1の起動後、CPU40は起動優先順位が最も高いネームスペースの位置情報群550を最初に復元する。これが完了すると、CPU40は起動優先順位が次に高いネームスペースの位置情報群550の復元を順次開始する。
あるネームスペースのログ530がすべて読み出され、位置情報群550の復元が完了すると、そのネームスペースについてはユーザデータ500のリード・ライトが可能になる。すなわち、本実施形態においては、位置情報群550の復元が完了することによりそのネームスペースの起動が完了するので、各ログ530が、当該ネームスペースの起動情報であると考えることができる。
なお、翻訳情報510をNAND型フラッシュメモリ20に保存する際に、ネームスペースごとに分けて保存してもよい。この場合は、記憶装置1の起動後、あるネームスペースの位置情報群550の復元、及び、当該ネームスペースの翻訳情報510のRAM30へのコピーの完了により、当該ネームスペースの起動完了となる。
次に、図15を参照して、翻訳情報510のRAM30へのキャッシュ動作を説明する。
本実施形態では、すべてのネームスペースについての位置情報群550の復元が完了した後、翻訳情報510aがNAND型フラッシュメモリ20から、翻訳情報(キャッシュ)510bとしてRAM30にコピーされる。翻訳情報510のRAM30へのコピー完了に伴い、これに対応する位置情報560の参照先はRAM30となる。
なお、記憶装置全体の位置情報群550の復元が完了した後に翻訳情報510をRAM30がコピーされてもよく、あるネームスペースの位置情報群550の復元が完了するごとに、当該ネームスペースの翻訳情報510がRAM30へコピーされてもよい。
次に、図16a〜図16cを参照して、ホスト2への起動完了報告の一例を説明する。
NS管理表540に記録されている起動優先順位は、図16aに示すようにNSID0が第3位、NSID1が第2位、NSID2が第1位、NSID3が第4位である。
図16bに示す例では、記憶装置1への電力が供給されると、起動優先順位が第1位であるNSID2の位置情報群550の復元が開始される。そして、NSID2の位置情報群550の復元が完了すると、記憶装置1はホスト2に対してNSID2の起動が完了した旨を報告する。その後、NS管理表540の起動優先順位に従い、NSID1の位置情報群550の復元及びホスト2への起動完了報告、NSID0の位置情報群550の復元及びホスト2への起動完了報告、NSID3の位置情報群550の復元及びホスト2への起動完了報告が行われる。すべてのネームスペースについて位置情報群550の復元が完了すると、記憶装置1の起動が完了した旨がホスト2へ報告される。
図16bでは各ネームスペースの位置情報群550の復元完了に伴い、記憶装置1が自発的に当該ネームスペースの起動完了をホスト2に報告した。これに対し、図16cではホスト2からの問い合わせコマンドに対する応答として、起動完了したか、未完了であるかを報告する。
すなわち、図16cに例示するように、記憶装置1への電力の供給に伴い、起動優先順位が第1位であるNSID2の位置情報群550の復元が開始される。NSID2の位置情報群550の復元完了前に、ホスト2よりNSID2の起動が完了したか否かを問い合わせるコマンドを受信すると、記憶装置1は未完了である旨を報告する。また、NSID2の位置情報群550の復元中に、まだ位置情報群550の復元を開始していないNSID0の起動が完了したか否かを問い合わせるコマンドを受信した時も、同様に、記憶装置1は未完了である旨を報告する。そして、NSID2の位置情報群550の復元が完了後、NSID2の起動が完了したか否かを問い合わせるコマンドを受信すると、記憶装置1は完了している旨を報告する。なお、この例では、記憶装置1は、1つのネームスペースの位置情報群550の復元が完了すると、次の起動優先順位のネームスペースの位置情報群550の復元を開始する。すべてのネームスペースについて位置情報群550の復元が完了すると、記憶装置1の起動が完了した旨がホスト2へ報告される。
次に、図17を参照して、記憶装置1の起動時のFWの制御を説明する。
記憶装置1への電力供給(S300)に伴いCPU40は、まずNS管理表540をNAND型フラッシュメモリ20から読み出す(S301)。次に、CPU40は起動優先順位を示す変数iを1に初期化し(S302)、NS管理表540の起動優先順位に従い、起動優先順位が最も高い(すなわちi=1)ネームスペースのログ領域からログ530を読み出し(S303)、RAM30上に位置情報群550を復元する(S304)。当該ネームスペースの位置情報群550の復元が完了するまで(S305:No)、CPU40は、ログ530の読み出し位置を更新し(S306)、ログ530の読み出し及びRAM30への復元を繰り返す(S303〜S306)。
当該ネームスペースの位置情報群550の復元が完了すると(S305:Yes)、CPU40はホストIF制御部200に指示し、ホスト2に当該ネームスペースの起動完了を報告する(S307)。
すべてのネームスペースの起動が完了していない場合(S308:No)、CPU40は起動優先順位を示す変数iをインクリメントさせ(S309)、起動優先順位がiであるネームスペースのログ領域からログ530を読み出し(S303)、RAM30上に位置情報群550を復元する(S304)。
すべてのネームスペースの起動が完了すると(S308:Yes)、CPU40はホストIF制御部200に指示し、ホスト2に記憶装置1の起動完了を報告する(S310)。
その後、翻訳情報510をNAND型フラッシュメモリ20からRAM30へキャッシュする(S311)。
次に、図18a及び図18bを参照して、起動優先順位を指定するコマンドの動作の一例を説明する。
図18aは、既存のネームスペースに対し起動優先順位を指定するコマンドの動作の一例である。図18aに示すように、例えば、ホスト2はNSID2の起動優先順位を第1位に指定する。このコマンドを受領した記憶装置1は、NS管理表540のNSID2の起動優先順位を第1位にした後、ホスト2に対して正常終了を報告する。
図18bは、ネームスペースの生成と同時に起動優先順位を指定するコマンドの動作の一例である。図18aに示すように、例えば、ホスト2は起動優先順位が第1位であるNSID2を生成するように要求する。このコマンドを受領した記憶装置1は、論理アドレス空間にNSID2の領域を割り当て、また、NS管理表540のNSID2の起動優先順位を第1位にした後、ホスト2に対して正常終了を報告する。
なお、上記いずれのコマンドに対しても、ホスト2に要求された動作を行うことができない場合、又は、この動作に失敗した場合、記憶装置1はホスト2にエラーを報告する。
ここまで説明したように、ホスト2は、記憶装置1に対しネームスペースごとの起動優先順位を指定することにより、記憶装置1の起動時に優先して使用したいネームスペースを指定することができる。
次に、図19a及び図19bを参照して、ネームスペースごとの起動優先順位とネームスペースごとの用途、及び記憶装置1からの起動完了報告の一例を説明する。
ホスト2は、ネームスペースごとの用途、及び、起動優先順位をどのように設定するべきか決定する。ホスト2は、例えば各ネームスペースの用途を(a)ブートレコード、OSカーネルイメージを記憶するネームスペース、(b)OSの起動に必要なシステムファイルを記憶するネームスペース、(c)アプリケーションプログラムを記憶するネームスペース、(d)ユーザデータを記憶するネームスペース、(e)バックアップデータを記憶するネームスペースと決定する。また、ホスト2は、これらのネームスペースの起動優先順位を、(a)(b)(c)(d)(e)の順に高いものと決定する。そしてホスト2は記憶装置1に対し、起動優先順位を指定するコマンドを発行し、ネームスペースごとの起動優先順位を指定する。
図19aに示す例では、NSID0は起動優先順位が第3位に設定され、アプリケーションプログラムを記憶するために使用されている。NSID1は起動優先順位が第2位に設定され、システムファイルを記憶するために使用されている。NSID2は起動優先順位が第1位に設定され、ブートレコード、OSカーネルイメージを記憶するために使用されている。NSID3は起動優先順位が第4位に設定され、ユーザデータを記憶するために使用されている。NSID4は起動優先順位が第5位に設定され、バックアップデータを記憶するために使用されている。
このように各ネームスペースを設定することにより、ホスト2は他のユーザデータに先立ってOSの起動処理を行うことが可能となる。すなわち図19bに示すように、ホスト2は起動優先順位が第1位であるNSID2の起動完了報告を受領することにより、OSの起動処理を開始する。ホスト2は起動優先順位が第2位であるNSID1の起動完了報告を受領することにより、システムファイルの使用を開始する。ホスト2は起動優先順位が第3位であるNSID0の起動完了報告を受領することにより、アプリケーションプログラムの使用を開始する。これにより、記憶装置1全体の起動完了を待ってからホスト2がOSの起動処理を開始するようなシステムと比較して、システム全体としての起動時間を短縮することができる。
また、システム起動時に優先的に使用したいユーザデータが記憶されているネームスペースを、優先的に起動させることができる。図19bの例では、ホスト2は起動優先順位が第4位であるNSID3の起動完了報告を受領することにより、ユーザデータの使用を開始する。ホスト2は起動優先順位が第5位であるNSID4の起動完了報告を受領することにより、バックアップデータの使用を開始する。
次に、図20a及び図20bを参照して、ネームスペースごとの起動優先順位とネームスペースごとの用途、及び記憶装置1からの起動完了報告の別の一例を説明する。
図20aに示す例では、NSID0は起動優先順位が第3位に設定され、ユーザデータAを記憶するために使用されている。NSID1は起動優先順位が第2位に設定され、ユーザデータBを記憶するために使用されている。NSID2は起動優先順位が第1位に設定され、オペレーティングシステム(OS)を記憶するために使用されている。NSID3は起動優先順位が第4位に設定され、ユーザデータCを記憶するために使用されている。
ユーザデータA〜ユーザデータCは、例えば複数のユーザのバーチャルマシンイメージに対応する。ユーザデータBは、例えばユーザ全員が使用するデータに対応する。ユーザデータAは、例えば優先度の高いライセンス契約をしているユーザが使用するデータに対応する。ユーザデータCは、例えば優先度の低いライセンス契約をしているユーザが使用するデータに対応する。
このように各ネームスペースを設定することにより、ホスト2は、システム起動時に優先的に使用したいユーザデータが記憶されているネームスペースを、優先的に起動させることができる。図20bの例では、ホスト2は起動優先順位が第2位であるNSID1の起動完了報告を受領することにより、ユーザデータBの使用を開始する。ホスト2は起動優先順位が第3位であるNSID0の起動完了報告を受領することにより、ユーザデータAの使用を開始する。ホスト2は起動優先順位が第4位であるNSID3の起動完了報告を受領することにより、ユーザデータCの使用を開始する。
次に、図21a〜図21cを参照して、コマンドで指定された起動優先順位に重複があった場合の動作の一例を説明する。
図21bに示すように、例えば、NS管理表540に記録されている起動優先順位は、NSID0が第3位、NSID1が第2位、NSID2が第1位、NSID3が第4位、NSID4が第5位である。
この状態で、既存のネームスペースに対し起動優先順位を指定するコマンド(図18aのコマンド)によって、ホスト2がNSID4の起動優先順位を第3位に指定したとする。しかし、この時、起動優先順位の第3位はすでにNSID0に割り当てられている。このような場合、記憶装置1は、まず、コマンド指定の起動優先順位(第3位)をNSID4に設定する。また、既存のネームスペースのうち、コマンド指定のネームスペースではなく、且つ、コマンド指定の起動優先順位(第3位)以下の起動優先順位を有するネームスペースの起動優先順位は1つずつ低く設定される。すなわち、起動優先順位が第3位であったNSID0の起動優先順位は第4位に設定され、起動優先順位が第4位であったNSID3の起動優先順位は第5位に設定される。各ネームスペースの起動優先順位の設定が完了すると、記憶装置1はホスト2に対し、コマンドの正常終了を報告する。
本コマンドで要求された動作が完了した後のNS管理表540は図21cに示すようになり、NSID0が第4位、NSID1が第2位、NSID2が第1位、NSID3が第5位、NSID4が第3位となる。
次に、図22a〜図22cを参照して、コマンドで指定された起動優先順位に重複があった場合の動作の別の一例を説明する。ここではネームスペースの生成と同時に起動優先順位を指定するコマンド(図18bのコマンド)を受信した時の動作を説明する。なお、コマンド受信前のNS管理表540の状態を示す図22bは、図21bと等しい。
ネームスペースの生成と同時に起動優先順位を指定するコマンドによって、ホスト2は起動優先順位が第3位であるNSID5を生成するように要求するが、起動優先順位の第3位はすでにNSID0に割り当てられている。このような場合、記憶装置1は、まずコマンド指定の起動優先順位(第3位)をNSID5に設定する。また、既存のネームスペースのうち、コマンド指定のネームスペースではなく、且つ、コマンド指定の起動優先順位(第3位)以下の起動優先順位を有するネームスペースの起動優先順位は1つずつ低く設定される。すなわち、起動優先順位が第3位であったNSID0の起動優先順位は第4位に設定され、起動優先順位が第4位であったNSID3の起動優先順位は第5位に設定され、起動優先順位が第5位であったNSID4の起動優先順位は第6位に設定される。NSID5の生成、及び、各ネームスペースの起動優先順位の設定が完了すると、記憶装置1はホスト2に対し、コマンドの正常終了を報告する。
本コマンドで要求された動作が完了した後のNS管理表540は図22cに示すようになり、NSID0が第4位、NSID1が第2位、NSID2が第1位、NSID3が第5位、NSID4が第6位、NSID5が第3位となる。
図21a〜図21c、図22a〜図22cのいずれの場合においても、記憶装置1がホスト2に要求された動作を行うことができない場合、又は、この動作に失敗した場合、特に、起動優先順位の重複を許容しない場合は、記憶装置1はホスト2にエラーを報告するようにしてもよい。
また、コマンド指定の起動優先順位がNS管理表540に反映された結果、NS管理表540に記録されている起動優先順位に不連続性が生じた場合には、記憶装置1は、起動優先順位が連続になるように起動優先順位を変更してもよい。例えば、コマンド指定の起動優先順位がNS管理表540に反映された結果、NS管理表540に記録されている起動優先順位が第1位、第2位、第4位となった場合に、NS管理表540を書き換え、起動優先順位が第1位、第2位、第3位となるように変更してもよい。
次に、図23を参照して、起動優先順位を指定するコマンドを受信した時のFWの制御を説明する。
起動優先順位を指定するコマンドを受信(S400)すると、CPU40は、コマンドで指定されたネームスペース(指定ネームスペース)に、コマンドで指定された起動優先順位を設定する(S401)。次に、CPU40は、指定された起動優先順位が既存の起動優先順位と重複していないかをチェックする(S402)。
コマンドで指定された起動優先順位が既存の起動優先順位のいずれかと重複している場合(S402:Yes)、指定ネームスペース以外のネームスペースであって、コマンドで指定された起動優先順位以下の起動優先順位を有するネームスペースについては、起動優先順位が1ずつ低く設定される(S403)。
次にCPU40は、NS管理表540に記録されている起動優先順位に不連続性がないかをチェックする(S404)。起動優先順位に不連続性がある場合(S404:Yes)、CPU40は、不連続性を解消するように起動優先順位を変更してもよい(S405)。
(S401)又は(S403)又は(S405)により、すべてのネームスペースについて起動優先順位の設定が完了すると、CPU40はホストIF制御部200に指示し、ホスト2にコマンドの正常終了を報告する(S406)。
次に、図24a〜図24cを参照して、起動優先順位を問い合わせるためのコマンドの動作の一例を説明する。
図24aに示すように、例えば、NS管理表540に記録されている起動優先順位は、NSID0が第3位、NSID1が第2位、NSID2が第1位、NSID3が第4位、NSID4が第5位である。
図24bでは、記憶装置1はホスト2からNSID3の起動優先順位を問い合わせるコマンドを受信している。CPU40はNS管理表540を検索し、NSID3の起動優先順位(第4位)を取得した後、ホストIF制御部200に指示し、ホスト2に対してNSID3の起動優先順位として第4位を報告する。
図24cでは、記憶装置1はホスト2から起動優先順位が第4位であるネームスペースIDを問い合わせるコマンドを受信している。CPU40はNS管理表540を検索し、起動優先順位が第4位であるネームスペースID(NSID3)を取得した後、ホストIF制御部200に指示し、ホスト2に対して起動優先順位が第4位であるネームスペースIDとしてNSID3を報告する。
なお、図24b・図24cのいずれの場合も、ホスト2からの問い合わせに適合するネームスペースID又は起動優先順位がNS管理表540に記録されていない場合には、記憶装置1はホスト2に対してエラーを報告する。
以上説明した少なくとも1つの実施形態の記憶装置によれば、ホストがネームスペースごとの起動優先順位を指定し、記憶装置は起動優先順位の高いネームスペースから順に起動処理を行うので、システム全体としての起動時間を短縮することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。